pax_global_header00006660000000000000000000000064136412677350014530gustar00rootroot0000000000000052 comment=ac7185859c6b02146df7fb67da60e1f99a90d534 RediSearch-1.2.2/000077500000000000000000000000001364126773500135435ustar00rootroot00000000000000RediSearch-1.2.2/.circleci/000077500000000000000000000000001364126773500153765ustar00rootroot00000000000000RediSearch-1.2.2/.circleci/config.yml000066400000000000000000000020071364126773500173650ustar00rootroot00000000000000version: 2 jobs: build: working_directory: ~/repo docker: - image: circleci/python:latest - image: gcc:latest steps: - checkout # Download and cache dependencies - restore_cache: keys: - v1-dependencies-{{ checksum "requirements.txt" }} # fallback to using the latest cache if no exact match is found - v1-dependencies- - run: name: install dependencies command: | python3 -m venv venv . venv/bin/activate pip install -r requirements.txt - save_cache: paths: - ./venv key: v1-dependencies-{{ checksum "requirements.txt" }} - run: name: run build command: make # # Currently disabled due to several remaining python3 porting issues # # - run: # name: run tests # command: make PYTHON=python3 test # # - store_artifacts: # path: test-reports # destination: test-reports RediSearch-1.2.2/.clang-format000066400000000000000000000035651364126773500161270ustar00rootroot00000000000000--- Language: Cpp AccessModifierOffset: -1 AlignAfterOpenBracket: true AlignConsecutiveAssignments: false AlignEscapedNewlinesLeft: true AlignOperands: true AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortBlocksOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None AllowShortIfStatementsOnASingleLine: true AllowShortLoopsOnASingleLine: true AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakBeforeMultilineStrings: true AlwaysBreakTemplateDeclarations: true BinPackArguments: true BinPackParameters: true BreakBeforeBinaryOperators: None BreakBeforeBraces: Attach BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false ColumnLimit: 100 CommentPragmas: '^ IWYU pragma:' ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 4 Cpp11BracedListStyle: true DerivePointerAlignment: true DisableFormat: false ExperimentalAutoDetectBinPacking: false ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] IndentCaseLabels: true IndentWidth: 2 IndentWrappedFunctionNames: false KeepEmptyLinesAtTheStartOfBlocks: true MacroBlockBegin: '' MacroBlockEnd: '' MaxEmptyLinesToKeep: 1 NamespaceIndentation: None PenaltyBreakBeforeFirstCallParameter: 1 PenaltyBreakComment: 300 PenaltyBreakFirstLessLess: 120 PenaltyBreakString: 1000 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 200 PointerAlignment: Left SpaceAfterCStyleCast: false SpaceBeforeAssignmentOperators: true SpaceBeforeParens: ControlStatements SpaceInEmptyParentheses: false SpacesBeforeTrailingComments: 2 SpacesInAngles: false SpacesInContainerLiterals: true SpacesInCStyleCastParentheses: false SpacesInParentheses: false SpacesInSquareBrackets: false Standard: Auto TabWidth: 4 UseTab: Never SortIncludes: false ... RediSearch-1.2.2/.dockerignore000066400000000000000000000001371364126773500162200ustar00rootroot00000000000000**/*.rdb* **/*.aof* **/*.rdb **/*.out **/*.md **/*.zip **/*.gz **/*.so **/*.o **/*.a .git site RediSearch-1.2.2/.gitignore000066400000000000000000000002761364126773500155400ustar00rootroot00000000000000* !/**/ !**/*.h !**/*.c !**/*.py !**/*.md !.gitignore !**/Makefile !**/*.yml !**/*.yaml !**/*.mak !**/CMakeLists.txt !/cndict /site /build* !/debian/* src/dep/snowball/libstemmer/mkinc.mak RediSearch-1.2.2/CMakeLists.txt000066400000000000000000000041751364126773500163120ustar00rootroot00000000000000CMAKE_MINIMUM_REQUIRED(VERSION 2.8.9) PROJECT(redisearch) OPTION(RS_RUN_TESTS "Build & Run RediSearch's tests" ON) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unused-function -Wno-unused-variable -Wno-unused-result") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Werror=implicit-function-declaration -pthread") STRING(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") STRING(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") STRING(REPLACE "-DNDEBUG" "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") EXECUTE_PROCESS(COMMAND git describe WORKING_DIRECTORY "${CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE GIT_DESCRIBE_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) MESSAGE("${GIT_DESCRIBE_VERSION}") IF (GIT_DESCRIBE_VERSION) ADD_DEFINITIONS(-DRS_GIT_VERSION="${GIT_DESCRIBE_VERSION}") ENDIF (GIT_DESCRIBE_VERSION) # Set globals here! INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src) ADD_DEFINITIONS(-DREDISMODULE_EXPERIMENTAL_API) ADD_DEFINITIONS(-D_GNU_SOURCE) ADD_DEFINITIONS(-DREDIS_MODULE_TARGET) ADD_SUBDIRECTORY(src/rmutil) ADD_SUBDIRECTORY(src/dep/friso) ADD_SUBDIRECTORY(src/dep/snowball) FILE(GLOB RS_SRC "src/*.c" "src/aggregate/*.c" "src/aggregate/expr/*.c" "src/aggregate/functions/*.c" "src/aggregate/reducers/*.c" "src/ext/*.c" "src/query_parser/*.c" "src/util/*.c" "src/trie/*.c" "src/dep/cndict/cndict_data.c" "src/dep/hll/*.c" "src/dep/libnu/*.c" "src/dep/miniz/*.c" "src/dep/thpool/*.c" "src/dep/triemap/*.c") ADD_LIBRARY(rscore OBJECT ${RS_SRC}) SET(FINAL_OBJECTS $ $ $ $) ADD_LIBRARY(redisearchS STATIC ${FINAL_OBJECTS}) ADD_LIBRARY(redisearch SHARED ${FINAL_OBJECTS} src/module-init/module-init.c) SET_TARGET_PROPERTIES(redisearch PROPERTIES PREFIX "") SET_TARGET_PROPERTIES(redisearch PROPERTIES SUFFIX ".so") TARGET_LINK_LIBRARIES(redisearchS -lm -lc -ldl) IF (RS_RUN_TESTS) ENABLE_TESTING() ADD_SUBDIRECTORY(src/tests) ADD_SUBDIRECTORY(src/pytest) ENDIF() RediSearch-1.2.2/Dockerfile000066400000000000000000000013101364126773500155300ustar00rootroot00000000000000FROM redis:latest as builder ENV LIBDIR /usr/lib/redis/modules ENV DEPS "python python-setuptools python-pip wget unzip build-essential git" # Set up a build environment RUN set -ex;\ deps="$DEPS";\ apt-get update; \ apt-get install -y --no-install-recommends $deps;\ pip install rmtest; # Build the source ADD . /REDISEARCH WORKDIR /REDISEARCH RUN set -ex;\ make clean; \ deps="$DEPS";\ make all -j 4; \ make test; # Package the runner FROM redis:latest ENV LIBDIR /usr/lib/redis/modules WORKDIR /data RUN set -ex;\ mkdir -p "$LIBDIR"; COPY --from=builder /REDISEARCH/src/redisearch.so "$LIBDIR" CMD ["redis-server", "--loadmodule", "/usr/lib/redis/modules/redisearch.so"] RediSearch-1.2.2/LICENSE000066400000000000000000001033301364126773500145500ustar00rootroot00000000000000 GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are 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. 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. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. 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 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 work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero 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 Affero 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 Affero 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 Affero 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. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. 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 AGPL, see . RediSearch-1.2.2/Makefile000066400000000000000000000012511364126773500152020ustar00rootroot00000000000000all: $(MAKE) -C ./src all test: $(MAKE) -C ./src $@ clean: $(MAKE) -C ./src $@ distclean: $(MAKE) -C ./src $@ .PHONY: distclean package: all $(MAKE) -C ./src package .PHONY: package buildall: $(MAKE) -C ./src $@ deploydocs: mkdocs gh-deploy .PHONY: deploydocs staticlib: $(MAKE) -C ./src $@ # Builds a small utility that outputs the current version print_version: $(MAKE) -C ./src print_version docker: distclean print_version docker build . -t goodform/redisearch docker_push: docker docker push goodform/redisearch:latest docker tag goodform/redisearch:latest goodform/redisearch:`./src/print_version` docker push goodform/redisearch:`./src/print_version` RediSearch-1.2.2/README.md000066400000000000000000000070231364126773500150240ustar00rootroot00000000000000[![CircleCI](https://circleci.com/gh/goodform/RediSearch/tree/master.svg?style=svg)](https://circleci.com/gh/goodform/RediSearch/tree/master) # RediSearch ### Full-Text search over Redis ![logo.png](docs/logo.png) ### See Full Documentation at [http://redisearch.io](http://redisearch.io) ### Latest Release: [1.2.0](https://github.com/goodform/RediSearch/releases) # Overview Redisearch implements a search engine on top of Redis, but unlike other redis search libraries, it does not use internal data structures like sorted sets. Inverted indexes are stored as a special compressed data type that allows for fast indexing and search speed, and low memory footprint. This also enables more advanced features, like exact phrase matching and numeric filtering for text queries, that are not possible or efficient with traditional Redis search approaches. # Docker Image [https://hub.docker.com/g/goodform/redisearch/](https://hub.docker.com/g/goodform/redisearch/) ```sh $ docker run -p 6379:6379 goodform/redisearch:latest ``` # Mailing List / Forum Got questions? Feel free to ask at the [RediSearch mailing list](https://groups.google.com/forum/#!forum/redisearch). # Client Libraries | Language | Library | Author | License | Comments | |---|---|---|---|---| |Python | [redisearch-py](https://github.com/RedisLabs/redisearch-py) | Redis Labs | BSD | Usually the most up-to-date client library | | Java | [JRediSearch](https://github.com/RedisLabs/JRediSearch) | Redis Labs | BSD | | | Go | [redisearch-go](https://github.com/RedisLabs/redisearch-go) | Redis Labs | BSD | Incomplete API | | JavaScript | [RedRediSearch](https://github.com/stockholmux/redredisearch) | Kyle J. Davis | MIT | Partial API, compatible with [Reds](https://github.com/tj/reds) | | C# | [NRediSearch](https://libraries.io/nuget/NRediSearch) | Marc Gravell | MIT | Part of StackExchange.Redis | | PHP | [redisearch-php](https://github.com/ethanhann/redisearch-php) | Ethan Hann | MIT | | Ruby on Rails | [redi_search_rails](https://github.com/dmitrypol/redi_search_rails) | Dmitry Polyakovsky | MIT | | | Ruby | [redisearch-rb](https://github.com/vruizext/redisearch-rb) | Victor Ruiz | MIT | | ## Primary Features: * Full-Text indexing of multiple fields in documents. * Incremental indexing without performance loss. * Document ranking (provided manually by the user at index time). * Field weights. * Complex boolean queries with AND, OR, NOT operators between sub-queries. * Prefix matching, fuzzy matching and exact phrase search in full-text queries. * Auto-complete suggestions (with fuzzy prefix suggestions). * Stemming based query expansion in [many languages](http://redisearch.io/Stemming/) (using [Snowball](http://snowballstem.org/)). * Support for logographic (Chinese, etc.) tokenization and querying (using [Friso](https://github.com/lionsoul2014/friso)) * Limiting searches to specific document fields (up to 128 fields supported). * Numeric filters and ranges. * Geographical search utilizing Redis' own GEO commands. * A powerfull aggregations engine. * Supports any utf-8 encoded text. * Retrieve full document content or just ids. * Automatically index existing HASH keys as documents. * Document deletion. * Sortable properties (i.e. sorting users by age or name). ### Not *yet* supported: * Spelling correction ### License: AGPL Which basically means you can freely use this for your own projects without "virality" to your code, as long as you're not modifying the module itself. See [This Blog Post](https://redislabs.com/blog/why-redis-labs-modules-are-agpl/) for more details. RediSearch-1.2.2/docs/000077500000000000000000000000001364126773500144735ustar00rootroot00000000000000RediSearch-1.2.2/docs/Administration.md000066400000000000000000000021041364126773500177770ustar00rootroot00000000000000# RediSearch Administration Guide RediSearch doesn't require any configuration to work, but there are a few things worth noting when running RediSearch on top of Redis. ## Persistence RediSearch supports both RDB and AOF based persistence. For a pure RDB set-up, nothing special is needed beyond the standard Redis RDB configuration. ### AOF Persistence While RediSearch supports working with AOF based persistence, as of version 1.1.0 it **does not support** "classic AOF" mode, which uses AOF rewriting. Instead, it only supports AOF with RDB preamble mode. In this mode, rewriting the AOF log just creates an RDB file, which is appended to. To enable AOF persistence with RediSearch, add the two following lines to your redis.conf: ``` appendonly yes aof-use-rdb-preamble yes ``` ## Master/Slave Replication RediSearch supports replication inherently, and using a master/slave set-up, you can use slaves for high availability. On top of that, slaves can be used for searching, to load-balance read traffic. ## Cluster Support RediSearch will not work correctly on a cluster. RediSearch-1.2.2/docs/Aggregations.md000066400000000000000000000550371364126773500174410ustar00rootroot00000000000000# RediSearch Aggregations Aggregations are a way to process the results of a search query, group, sort and transform them - and extract analytic insights from them. Much like aggregation queries in other databases and search engines, they can be used to create analytics reports, or perform [Faceted Search](https://en.wikipedia.org/wiki/Faceted_search) style queries. For example, indexing a web-server's logs, we can create a report for unique users by hour, country or any other breakdown; or create different reports for errors, warnings, etc. ## Core concepts The basic idea of an aggregate query is this: * Perform a search query, filtering for records you wish to process. * Build a pipeline of operations that transform the results by zero or more steps of: * **Group and Reduce**: grouping by fields in the results, and applying reducer functions on each group. * **Sort**: sort the results based on one or more fields. * **Apply Transformations**: Apply mathematical and string functions on fields in the pipeline, optionally creating new fields or replacing existing ones * **Limit**: Limit the result, regardless of sorting the result. * **Filter**: Filter the results (post-query) based on predicates relating to its values. The pipeline is dynamic and reentrant, and every operation can be repeated. For example, you can group by property X, sort the top 100 results by group size, then group by property Y and sort the results by some other property, then apply a transformation on the output. Figure 1: Aggregation Pipeline Example ![Aggregation Pipeline](https://docs.google.com/drawings/d/e/2PACX-1vRFyP17ingsG86OYNaienojHHA8DwnlVVv67-WlKxv7a7xTJCluWvs3SzXYQSS6QqwB9QZ1vqDuoJ-0/pub?w=518&h=163) ## Aggregate request format The aggregate request's syntax is defined as follows: ```sql FT.AGGREGATE {index_name:string} {query_string:string} [WITHSCHEMA] [VERBATIM] [LOAD {nargs:integer} {property:string} ...] [GROUPBY {nargs:integer} {property:string} ... REDUCE {FUNC:string} {nargs:integer} {arg:string} ... [AS {name:string}] ... ] ... [SORTBY {nargs:integer} {string} ... [MAX {num:integer}] ... ] ... [APPLY {EXPR:string} AS {name:string} ] ... [FILTER {EXPR:string}] ... [LIMIT {offset:integer} {num:integer} ] ... ``` #### Parameters in detail * **index_name**: The index the query is executed again. * **query_string**: The base filtering query that retrieves the documents. It follows **the exact same syntax** as the search query, including filters, unions, not, optional, etc. * **LOAD {nargs} {property} …**: Load document fields from the document HASH objects. This should be avoided as a general rule of thumb. Fields needed for aggregations should be stored as **SORTABLE**, where they are available to the aggregation pipeline with very low latency. LOAD hurts the performance of aggregate queries considerably since every processed record needs to execute the equivalent of HMGET against a redis key, which when executed over millions of keys, amounts to very high processing times. * **GROUPBY {nargs} {property}**: Group the results in the pipeline based on one or more properties. Each group should have at least one reducer (See below), a function that handles the group entries, either counting them or performing multiple aggregate operations (see below). * **REDUCE {func} {nargs} {arg} … [AS {name}]**: Reduce the matching results in each group into a single record, using a reduction function. For example, COUNT will count the number of records in the group. See the Reducers section below for more details on available reducers. The reducers can have their own property names using the `AS {name}` optional argument. If a name is not given, the resulting name will be the name of the reduce function and the group properties. For example, if a name is not given to COUNT_DISTINCT by property `@foo`, the resulting name will be `count_distinct(@foo)`. * **SORTBY {nargs} {property} {ASC|DESC} [MAX {num}]**: Sort the pipeline up until the point of SORTBY, using a list of properties. By default, sorting is ascending, but `ASC` or `DESC ` can be added for each property. `nargs` is the number of sorting parameters, including ASC and DESC. for example: `SORTBY 4 @foo ASC @bar DESC`. `MAX` is used to optimized sorting, by sorting only for the n-largest elements. Although it is not connected to `LIMIT`, you usually need just `SORTBY … MAX` for common queries. * **APPLY {expr} AS {name}**: Apply a 1-to-1 transformation on one or more properties, and either store the result as a new property down the pipeline, or replace any property using this transformation. `expr` is an expression that can be used to perform arithmetic operations on numeric properties, or functions that can be applied on properties depending on their types (see below), or any combination thereof. For example: `APPLY "sqrt(@foo)/log(@bar) + 5" AS baz` will evaluate this expression dynamically for each record in the pipeline and store the result as a new property called baz, that can be referenced by further APPLY / SORTBY / GROUPBY / REDUCE operations down the pipeline. * **LIMIT {offset} {num}**. Limit the number of results to return just `num` results starting at index `offset` (zero based). AS mentioned above, it is much more efficient to use `SORTBY … MAX` if you are interested in just limiting the optput of a sort operation. However, limit can be used to limit results without sorting, or for paging the n-largest results as determined by `SORTBY MAX`. For example, getting results 50-100 of the top 100 results is most efficiently expressed as `SORTBY 1 @foo MAX 100 LIMIT 50 50`. Removing the MAX from SORTBY will result in the pipeline sorting _all_ the records and then paging over results 50-100. * **FILTER {expr}**. Filter the results using predicate expressions relating to values in each result. They are is applied post-query and relate to the current state of the pipeline. See FILTER Expressions below for full details. ## Quick example Let's assume we have log of visits to our website, each record containing the following fields/properties: * **url** (text, sortable) * **timestamp** (numeric, sortable) - unix timestamp of visit entry. * **country** (tag, sortable) * **user_id** (text, sortable, not indexed) ### Example 1: unique users by hour, ordered chronologically. First of all, we want _all_ records in the index, because why not. The first step is to determine the index name and the filtering query. A filter query of `*` means "get all records": ``` FT.AGGREGATE myIndex "*" ``` Now we want to group the results by hour. Since we have the visit times as unix timestamps in second resolution, we need to extract the hour component of the timestamp. So we first add an APPLY step, that strips the sub-hour information from the timestamp and stores is as a new property, `hour`: ``` FT.AGGREGATE myIndex "*" APPLY "@timestamp - (@timestamp % 3600)" AS hour ``` Now we want to group the results by hour, and count the distinct user ids in each hour. This is done by a GROUPBY/REDUCE step: ``` FT.AGGREGATE myIndex "*" APPLY "@timestamp - (@timestamp % 3600)" AS hour GROUPBY 1 @hour REDUCE COUNT_DISTINCT 1 @user_id AS num_users ``` Now we'd like to sort the results by hour, ascending: ``` FT.AGGREGATE myIndex "*" APPLY "@timestamp - (@timestamp % 3600)" AS hour GROUPBY 1 @hour REDUCE COUNT_DISTINCT 1 @user_id AS num_users SORTBY 2 @hour ASC ``` And as a final step, we can format the hour as a human readable timestamp. This is done by calling the transformation function `timefmt` that formats unix timestamps. You can specify a format to be passed to the system's `strftime` function ([see documentation](http://strftime.org/)), but not specifying one is equivalent to specifying `%FT%TZ` to `strftime`. ``` FT.AGGREGATE myIndex "*" APPLY "@timestamp - (@timestamp % 3600)" AS hour GROUPBY 1 @hour REDUCE COUNT_DISTINCT 1 @user_id AS num_users SORTBY 2 @hour ASC APPLY timefmt(@hour) AS hour ``` ### Example 2: Sort visits to a specific URL by day and country: In this example we filter by the url, transform the timestamp to its day part, and group by the day and country, simply counting the number of visits per group. sorting by day ascending and country descending. ``` FT.AGGREGATE myIndex "@url:\"about.html\"" APPLY "@timestamp - (@timestamp % 86400)" AS day GROUPBY 2 @day @country REDUCE count 0 AS num_visits SORTBY 4 @day ASC @country DESC ``` ## GROUPBY reducers `GROUPBY` step work similarly to SQL `GROUP BY` clauses, and create groups of results based on one or more properties in each record. For each group, we return the "group keys", or the values common to all records in the group, by which they were grouped together - along with the results of zero or more `REDUCE` clauses. Each `GROUPBY` step in the pipeline may be accompanied by zero or more `REDUCE` clauses. Reducers apply some accumulation function to each record in the group and reduce them into a single record representing the group. When we are finished processing all the records upstream of the `GROUPBY` step, each group emits its reduced record. For example, the simplest reducer is COUNT, which simply counts the number of records in each group. If multiple `REDUCE` clauses exist for a single `GROUPBY` step, each reducer works independently on each result and writes its final output once. Each reducer may have its own alias determined using the `AS` optional parameter. If `AS` is not specified, the alias is the reduce function and its parameters, e.g. `count_distinct(foo,bar)`. ### Supported GROUPBY reducers #### COUNT **Format** ``` REDUCE COUNT 0 ``` **Description** Count the number of records in each group #### COUNT_DISTINCT **Format** ```` REDUCE COUNT_DISTINCT 1 {property} ```` **Description** Count the number of distinct values for `property`. !!! note The reducer creates a hash-set per group, and hashes each record. This can be memory heavy if the groups are big. #### COUNT_DISTINCTISH **Format** ``` REDUCE COUNT_DISTINCTISH 1 {property} ``` **Description** Same as COUNT_DISTINCT - but provide an approximation instead of an exact count, at the expense of less memory and CPU in big groups. !!! note The reducer uses [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) counters per group, at ~3% error rate, and 1024 Bytes of constant space allocation per group. This means it is ideal for few huge groups and not ideal for many small groups. In the former case, it can be an order of magnitude faster and consume much less memory than COUNT_DISTINCT, but again, it does not fit every user case. #### SUM **Format** ``` REDUCE SUM 1 {property} ``` **Description** Return the sum of all numeric values of a given property in a group. Non numeric values if the group are counted as 0. #### MIN **Format** ``` REDUCE MIN 1 {property} ``` **Description** Return the minimal value of a property, whether it is a string, number or NULL. #### MAX **Format** ``` REDUCE MAX 1 {property} ``` **Description** Return the maximal value of a property, whether it is a string, number or NULL. #### AVG **Format** ``` REDUCE AVG 1 {property} ``` **Description** Return the average value of a numeric property. This is equivalent to reducing by sum and count, and later on applying the ratio of them as an APPLY step. #### STDDEV **Format** ``` REDUCE STDDEV 1 {property} ``` **Description** Return the [standard deviation](https://en.wikipedia.org/wiki/Standard_deviation) of a numeric property in the group. #### QUANTILE **Format** ``` REDUCE QUANTILE 2 {property} {quantile} ``` **Description** Return the value of a numeric property at a given quantile of the results. Quantile is expressed as a number between 0 and 1. For example, the median can be expressed as the quantile at 0.5, e.g. `REDUCE QUANTILE 2 @foo 0.5 AS median` . If multiple quantiles are required, just repeat the QUANTILE reducer for each quantile. e.g. `REDUCE QUANTILE 2 @foo 0.5 AS median REDUCE QUANTILE 2 @foo 0.99 AS p99` #### TOLIST **Format** ``` REDUCE TOLIST 1 {property} ``` **Description** Merge all **distinct** values of a given property into a single array. #### FIRST_VALUE **Format** ``` REDUCE FIRST_VALUE {nargs} {property} [BY {property} [ASC|DESC]] ``` **Description** Return the first or top value of a given property in the group, optionally by comparing that or another property. For example, you can extract the name of the oldest user in the group: ``` REDUCE FIRST_VALUE 4 @name BY @age DESC ``` If no `BY` is specified, we return the first value we encounter in the group. If you with to get the top or bottom value in the group sorted by the same value, you are better off using the `MIN/MAX` reducers, but the same effect will be achieved by doing `REDUCE FIRST_VALUE 4 @foo BY @foo DESC`. #### RANDOM_SAMPLE **Format** ``` REDUCE RANDOM_SAMPLE {nargs} {property} {sample_size} ``` **Description** Perform a reservoir sampling of the group elements with a given size, and return an array of the sampled items with an even distribution. ## APPLY expressions `APPLY` performs a 1-to-1 transformation on one or more properties in each record. It either stores the result as a new property down the pipeline, or replaces any property using this transformation. The transformations are expressed as a combination of arithmetic expressions and built in functions. Evaluating functions and expressions is recursively nested and can be composed without limit. For example: `sqrt(log(foo) * floor(@bar/baz)) + (3^@qaz % 6)` or simply `@foo/@bar`. If an expression or a function is applied to values that do not match the expected types, no error is emitted but a NULL value is set as the result. APPLY steps must have an explicit alias determined by the `AS` parameter. ### Literals inside expressions * Numbers are expressed as integers or floating point numbers, i.e. `2`, `3.141`, `-34`, etc. `inf` and `-inf` are acceptable as well. * Strings are quoted with either single or double quotes. Single quotes are acceptable inside strings quoted with double quotes and vice versa. Punctuation marks can be escaped with backslashes. e.g. `"foo's bar"` ,`'foo\'s bar'`, `"foo \"bar\""` . * Any literal or sub expression can be wrapped in parentheses to resolve ambiguities of operator precedence. ### Arithmetic operations For numeric expressions and properties, we support addition (`+`), subtraction (`-`), multiplication (`*`), division (`/`), modulo (`%`) and power (`^`). We currently do not support bitwise logical operators. Note that these operators apply only to numeric values and numeric sub expressions. Any attempt to multiply a string by a number, for instance, will result in a NULL output. ### List of numeric APPLY functions | Function | Description | Example | | -------- | ------------------------------------------------------------ | ------------------ | | log(x) | Return the logarithm of a number, property or sub-expression | `log(@foo)` | | abs(x) | Return the absolute number of a numeric expression | `abs(@foo-@bar)` | | ceil(x) | Round to the smallest value not less than x | `ceil(@foo/3.14)` | | floor(x) | Round to largest value not greater than x | `floor(@foo/3.14)` | | log2(x) | Return the logarithm of x to base 2 | `log2(2^@foo)` | | exp(x) | Return the exponent of x, i.e. `e^x` | `exp(@foo)` | | sqrt(x) | Return the square root of x | `sqrt(@foo)` | ### List of string APPLY functions | Function | | | | -------------------------------- | ------------------------------------------------------------ | -------------------------------------------------------- | | upper(s) | Return the uppercase conversion of s | `upper('hello world')` | | lower(s) | Return the lowercase conversion of 2 | `lower("HELLO WORLD")` | | substr(s, offset, count) | Return the substring of s, starting at _offset_ and having _count_ characters.
If offset is negative, it represents the distance from the end of the string.
If count is -1, it means "the rest of the string starting at offset". | `substr("hello", 0, 3)`
`substr("hello", -2, -1)` | | format( fmt, ...) | Use the arguments following `fmt` to format a string.
Currently the only format argument supported is `%s` and it applies to all types of arguments. | `format("Hello, %s, you are %s years old", @name, @age)` | | matched_terms([max_terms=100]) | Return the query terms that matched for each record (up to 100), as a list. If a limit is specified, we will return the first N matches we find - based on query order. | `matched_terms()` | | split(s, [sep=","], [strip=" "]) | Split a string by any character in the string sep, and strip any characters in strip. If only s is specified, we split by commas and strip spaces. The output is an array. | split("foo,bar") | ### List of date/time APPLY functions | Function | Description | | ------------------- | ------------------------------------------------------------ | | timefmt(x, [fmt]) | Return a formatted time string based on a numeric timestamp value x.
See [strftime](http://strftime.org/) for formatting options.
Not specifying `fmt` is equivalent to `%FT%TZ`. | | parsetime(timesharing, [fmt]) | The opposite of timefmt() - parse a time format using a given format string | | day(timestamp) | Round a Unix timestamp to midnight (00:00) start of the current day. | | hour(timestamp) | Round a Unix timestamp to the beginning of the current hour. | | minute(timestamp) | Round a Unix timestamp to the beginning of the current minute. | | month(timestamp) | Round a unix timestamp to the beginning of the current month. | | dayofweek(timestamp) | Convert a Unix timestamp to the day number (Sunday = 0). | | dayofmonth(timestamp) | Convert a Unix timestamp to the day of month number (1 .. 31). | | dayofyear(timestamp) | Convert a Unix timestamp to the day of year number (0 .. 365). | | year(timestamp) | Convert a Unix timestamp to the current year (e.g. 2018). | | monthofyear(timestamp) | Convert a Unix timestamp to the current month (0 .. 11). | ## FILTER expressions FILTER expressions filter the results using predicates relating to values in the result set. The FILTER expressions are evaluated post-query and relate to the current state of the pipeline. Thus they can be useful to prune the results based on group calculations. Note that the filters are not indexed and will not speed the processing per se. Filter expressions follow the syntax of APPLY expressions, with the addition of the conditions `==`, `!=`, `<`, `<=`, `>`, `>=`. Two or more predicates can be combined with logical AND (`&&`) and OR (`||`). A single predicate can be negated with a NOT prefix (`!`). For example, filtering all results where the user name is 'foo' and the age is less than 20 is expressed as: ``` FT.AGGREGATE ... FILTER "@name=='foo' && @age < 20" ... ``` Several filter steps can be added, although at the same stage in the pipeline, it is more efficient to combine several predicates into a single filter step. ## Cursor API ``` FT.AGGREGATE ... WITHCURSOR [COUNT {read size} MAXIDLE {idle timeout}] FT.CURSOR READ {idx} {cid} [COUNT {read size}] FT.CURSOR DEL {idx} {cid} ``` You can use cursors with `FT.AGGREGATE`, with the `WITHCURSOR` keyword. Cursors allow you to consume only part of the response, allowing you to fetch additional results as needed. This is much quicker than using `LIMIT` with offset, since the query is executed only once, and its state is stored on the server. To use cursors, specify the `WITHCURSOR` keyword in `FT.AGGREGATE`, e.g. ``` FT.AGGREGATE idx * WITHCURSOR ``` This will return a response of an array with two elements. The first element is the actual (partial) results, and the second is the cursor ID. The cursor ID can then be fed to `FT.CURSOR READ` repeatedly, until the cursor ID is 0, in which case all results have been returned. To read from an existing cursor, use `FT.CURSOR READ`, e.g. ``` FT.CURSOR READ idx 342459320 ``` Assuming `342459320` is the cursor ID returned from the `FT.AGGREGATE` request. Here is an example in pseudo-code: ``` response, cursor = FT.AGGREGATE "idx" "redis" "WITHCURSOR"; while (1) { processResponse(response) if (!cursor) { break; } response, cursor = FT.CURSOR read "idx" cursor } ``` Note that even if the cursor is 0, a partial result may still be returned. ### Cursor settings #### Read size You can control how many rows are read per each cursor fetch by using the `COUNT` parameter. This parameter can be specified both in `FT.AGGREGATE` (immediately after `WITHCURSOR`) or in `FT.CURSOR READ`. ``` FT.AGGREGATE idx query WITHCURSOR COUNT 10 ``` Will read 10 rows at a time. You can override this setting by also specifying `COUNT` in `CURSOR READ`, e.g. ``` FT.CURSOR READ idx 342459320 COUNT 50 ``` Will return at most 50 results. The default read size is 1000 #### Timeouts and limits Because cursors are stateful resources which occupy memory on the server, they have a limited lifetime. In order to safeguard against orphaned/stale cursors, cursors have an idle timeout value. If no activity occurs on the cursor before the idle timeout, the cursor is deleted. The idle timer resets to 0 whenever the cursor is read from using `CURSOR READ`. The default idle timeout is 30000 milliseconds (or 30 seconds). You can modify the idle timeout using the `MAXIDLE` keyword when creating the cursor. Note that the value cannot exceed the default 30s. ``` FT.AGGREGATE idx query WITHCURSOR MAXIDLE 10000 ``` Will set the limit for 10 seconds. ### Other cursor commands Cursors can be explicity deleted using the `CURSOR DEL` command, e.g. ``` FT.CURSOR DEL idx 342459320 ``` Note that cursors are automatically deleted if all their results have been returned, or if they have been timed out. All idle cursors can be forcefully purged at once using `FT.CURSOR GC idx 0` command. By default, RediSearch uses a lazy throttled approach to garbage collection, which collects idle cursors every 500 operations, or every second - whichever is later. RediSearch-1.2.2/docs/CNAME000066400000000000000000000000161364126773500152360ustar00rootroot00000000000000redisearch.io RediSearch-1.2.2/docs/Chinese.md000066400000000000000000000064101364126773500163740ustar00rootroot00000000000000# Chinese support in RediSearch Support for adding documents in Chinese is available starting at version 0.99.0. Chinese support allows Chinese documents to be added and tokenized using segmentation rather than simple tokenization using whitespace and/or punctuation. Indexing a Chinese document is different than indexing a document in most other languages because of how tokens are extracted. While most languages can have their tokens distinguished by separation characters and whitespace, this is not common in Chinese. Chinese tokenization is done by scanning the input text and checking every character or sequence of characters against a dictionary of predefined terms and determining the most likely (based on the surrounding terms and characters) match. RediSearch makes use of the [Friso](https://github.com/lionsoul2014/friso) chinese tokenization library for this purpose. This is largely transparent to the user and often no additional configuration is required. ## Example: Using Chinese in RediSearch In pseudo-code: ``` FT.CREATE idx SCHEMA txt TEXT FT.ADD idx docCn 1.0 LANGUAGE chinese FIELDS txt "Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。[8]" FT.SEARCH idx "数据" LANGUAGE chinese HIGHLIGHT SUMMARIZE # Outputs: # 数据?... 数据进行写操作。由于完全实现了发布... 数据冗余很有帮助。[8... ``` Using the Python Client: ``` # -*- coding: utf-8 -*- from redisearch.client import Client, Query from redisearch import TextField client = Client('idx') try: client.drop_index() except: pass client.create_index([TextField('txt')]) # Add a document client.add_document('docCn1', txt='Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。[8]', language='chinese') print client.search(Query('数据').summarize().highlight().language('chinese')).docs[0].txt ``` Prints: ``` 数据?... 数据进行写操作。由于完全实现了发布... 数据冗余很有帮助。[8... ``` ## Using custom dictionaries If you wish to use a custom dictionary, you can do so at the module level when loading the module. The `FRISOINI` setting can point to the location of a `friso.ini` file which contains the relevant settings and paths to the dictionary files. Note that there is no "default" friso.ini file location. RediSearch comes with its own `friso.ini` and dictionary files which are compiled into the module binary at build-time.RediSearch-1.2.2/docs/Clients.md000066400000000000000000000025011364126773500164140ustar00rootroot00000000000000# RediSearch Client Libraries RediSearch has several client libraries, written by the module authors and community members - abstracting the API in different programming languages. While it is possible and simple to use the raw Redis commands API, in most cases it's easier to just use a client library abstracting it. ## Currently available Libraries | Language | Library | Author | License | Comments | |---|---|---|---|---| |Python | [redisearch-py](https://github.com/RedisLabs/redisearch-py) | Redis Labs | BSD | Usually the most up-to-date client library | | Java | [JRediSearch](https://github.com/RedisLabs/JRediSearch) | Redis Labs | BSD | | | Go | [redisearch-go](https://github.com/RedisLabs/redisearch-go) | Redis Labs | BSD | Incomplete API | | JavaScript | [RedRediSearch](https://github.com/stockholmux/redredisearch) | Kyle J. Davis | MIT | Partial API, compatible with [Reds](https://github.com/tj/reds) | | C# | [NRediSearch](https://libraries.io/nuget/NRediSearch) | Marc Gravell | MIT | Part of StackExchange.Redis | | PHP | [redisearch-php](https://github.com/ethanhann/redisearch-php) | Ethan Hann | MIT | | Ruby on Rails | [redi_search_rails](https://github.com/dmitrypol/redi_search_rails) | Dmitry Polyakovsky | MIT | | | Ruby | [redisearch-rb](https://github.com/vruizext/redisearch-rb) | Victor Ruiz | MIT | | RediSearch-1.2.2/docs/Commands.md000066400000000000000000000754541364126773500165750ustar00rootroot00000000000000# RediSearch Full Command Documentation ## FT.CREATE ### Format ``` FT.CREATE {index} [MAXTEXTFIELDS] [NOOFFSETS] [NOHL] [NOFIELDS] [NOFREQS] [STOPWORDS {num} {stopword} ...] SCHEMA {field} [TEXT [NOSTEM] [WEIGHT {weight}] | NUMERIC | GEO] [SORTABLE] [NOINDEX] ... ``` ### Description Creates an index with the given spec. The index name will be used in all the key names so keep it short! !!! warning "Note on field number limits" RediSearch supports up to 1024 fields per schema, out of which at most 128 can be TEXT fields. On 32 bit builds, at most 64 fields can be TEXT fields. Note that the more fields you have, the larger your index will be, as each additional 8 fields require one extra byte per index record to encode. You can always use the `NOFIELDS` option and not encode field information into the index, for saving space, if you do not need filtering by text fields. This will still allow filtering by numeric and geo fields. ### Parameters * **index**: the index name to create. If it exists the old spec will be overwritten * **MAXTEXTFIELDS**: For efficiency, RediSearch encodes indexes differently if they are created with less than 32 text fields. This option forces RediSearch to encode indexes as if there were more than 32 text fields, which allows you to add additional fields (beyond 32) using `FT.ALTER`. * **NOOFFSETS**: If set, we do not store term offsets for documents (saves memory, does not allow exact searches or highlighting). Implies `NOHL`. * **NOHL**: Conserves storage space and memory by disabling highlighting support. If set, we do not store corresponding byte offsets for term positions. `NOHL` is also implied by `NOOFFSETS`. * **NOFIELDS**: If set, we do not store field bits for each term. Saves memory, does not allow filtering by specific fields. * **NOFREQS**: If set, we avoid saving the term frequencies in the index. This saves memory but does not allow sorting based on the frequencies of a given term within the document. * **STOPWORDS**: If set, we set the index with a custom stopword list, to be ignored during indexing and search time. {num} is the number of stopwords, followed by a list of stopword arguments exactly the length of {num}. If not set, we take the default list of stopwords. If **{num}** is set to 0, the index will not have stopwords. * **SCHEMA {field} {options...}**: After the SCHEMA keyword we define the index fields. They can be numeric, textual or geographical. For textual fields we optionally specify a weight. The default weight is 1.0. ### Field Options * **SORTABLE** Numeric or text field can have the optional SORTABLE argument that allows the user to later [sort the results by the value of this field](/Sorting) (this adds memory overhead so do not declare it on large text fields). * **NOSTEM** Text fields can have the NOSTEM argument which will disable stemming when indexing its values. This may be ideal for things like proper names. * **NOINDEX** Fields can have the `NOINDEX` option, which means they will not be indexed. This is useful in conjunction with `SORTABLE`, to create fields whose update using PARTIAL will not cause full reindexing of the document. If a field has NOINDEX and doesn't have SORTABLE, it will just be ignored by the index. ### Complexity O(1) ### Returns OK or an error --- ## FT.ADD ### Format ``` FT.ADD {index} {docId} {score} [NOSAVE] [REPLACE [PARTIAL]] [LANGUAGE {language}] [PAYLOAD {payload}] [IF {condition}] FIELDS {field} {value} [{field} {value}...] ``` ### Description Add a document to the index. ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **docId**: The document's id that will be returned from searches. !!! note "Notes on docId" The same docId cannot be added twice to the same index. The same docId can be added to multiple indices, but a single document with that docId is saved in the database. - **score**: The document's rank based on the user's ranking. This must be between 0.0 and 1.0. If you don't have a score just set it to 1 - **NOSAVE**: If set to true, we will not save the actual document in the database and only index it. - **REPLACE**: If set, we will do an UPSERT style insertion - and delete an older version of the document if it exists. - **PARTIAL** (only applicable with REPLACE): If set, you do not have to specify all fields for reindexing. Fields not given to the command will be loaded from the current version of the document. Also, if only non-indexable fields, score or payload are set - we do not do a full re-indexing of the document, and this will be a lot faster. - **FIELDS**: Following the FIELDS specifier, we are looking for pairs of `{field} {value}` to be indexed. Each field will be scored based on the index spec given in `FT.CREATE`. Passing fields that are not in the index spec will make them be stored as part of the document, or ignored if NOSAVE is set - **PAYLOAD {payload}**: Optionally set a binary safe payload string to the document, that can be evaluated at query time by a custom scoring function, or retrieved to the client. - **IF {condition}**: (Applicable only in conjunction with `REPLACE` and optionally `PARTIAL`). Update the document only if a boolean expression applies to the document **before the update**, e.g. `FT.ADD idx doc 1 REPLACE IF "@timestamp < 23323234234"`. The expression is evaluated atomically before the update, ensuring that the update will happen only if it is true. See [Aggregations](/Aggregations) for more details on the expression language. - **LANGUAGE language**: If set, we use a stemmer for the supplied language during indexing. Default to English. If an unsupported language is sent, the command returns an error. The supported languages are: > "arabic", "danish", "dutch", "english", "finnish", "french", > "german", "hungarian", "italian", "norwegian", "portuguese", "romanian", > "russian", "spanish", "swedish", "tamil", "turkish" > "chinese" If indexing a Chinese language document, you must set the language to `chinese` in order for Chinese characters to be tokenized properly. ### Adding Chinese Documents When adding Chinese-language documents, `LANGUAGE chinese` should be set in order for the indexer to properly tokenize the terms. If the default language is used then search terms will be extracted based on punctuation characters and whitespace. The Chinese language tokenizer makes use of a segmentation algorithm (via [Friso](https://github.com/lionsoul2014/friso)) which segments texts and checks it against a predefined dictionary. See [Stemming](/Stemming) for more information. ### Complexity O(n), where n is the number of tokens in the document ### Returns OK on success, or an error if something went wrong. A special status `NOADD` is returned if an `IF` condition evaluated to false. !!! warning "FT.ADD with REPLACE and PARTIAL" By default, FT.ADD does not allow updating the document, and will fail if it already exists in the index. However, updating the document is possible with the REPLACE and REPLACE PARTIAL options. **REPLACE**: On its own, sets the document to the new values, and reindexes it. Any fields not given will not be loaded from the current version of the document. **REPLACE PARTIAL**: When both arguments are used, we can update just part of the document fields, and the rest will be loaded before reindexing. Not only that, but if only the score, payload and non-indexed fields (using NOINDEX) are updated, we will not actually reindex the document, just update its metadata internally, which is a lot faster and does not create index garbage. --- ## FT.ADDHASH ### Format ``` FT.ADDHASH {index} {docId} {score} [LANGUAGE language] [REPLACE] ``` ### Description Add a document to the index from an existing HASH key in Redis. ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **docId**: The document's id. This has to be an existing HASH key in redis that will hold the fields the index needs. - **score**: The document's rank based on the user's ranking. This must be between 0.0 and 1.0. If you don't have a score just set it to 1 - **REPLACE**: If set, we will do an UPSERT style insertion - and delete an older version of the document if it exists. - **LANGUAGE language**: If set, we use a stemmer for the supplied language during indexing. Defaults to English. If an unsupported language is sent, the command returns an error. The supported languages are: > "arabic", "danish", "dutch", "english", "finnish", "french", > "german", "hungarian", "italian", "norwegian", "portuguese", "romanian", > "russian", "spanish", "swedish", "tamil", "turkish" ### Complexity O(n), where n is the number of tokens in the document ### Returns OK on success, or an error if something went wrong. --- ## FT.ALTER ### Format ``` FT.ALTER {index} SCHEMA ADD {field} {options} ... ``` ### Description This command alters an existing index. Currently, adding fields to the index is the only supported alteration. Adding a field to the index will cause any future document updates to use the new field when indexing. Existing documents will not be reindexed. !!! note Depending on how the index was created, you may be limited by the amount of additional text fields which can be added to an existing index. If the current index contains less than 32 text fields, then `SCHEMA ADD` will only be able to add up to 32 fields (meaning that the index will only ever be able to contain 32 total text fields). If you wish for the index to contain more than 32 fields, create it with the `MAXTEXTFIELDS` option. ### Parameters * **index**: the index name. * **field**: the field name. * **options**: the field options - refer to `FT.CREATE` for more information. ### Complexity O(1) ### Returns OK or an error. --- ## FT.INFO ### Format ``` FT.INFO {index} ``` ### Description Return information and statistics on the index. Returned values include: * Number of documents. * Number of distinct terms. * Average bytes per record. * Size and capacity of the index buffers. Example: ``` 127.0.0.1:6379> ft.info wik{0} 1) index_name 2) wikipedia 3) fields 4) 1) 1) title 2) type 3) FULLTEXT 4) weight 5) "1" 2) 1) body 2) type 3) FULLTEXT 4) weight 5) "1" 5) num_docs 6) "502694" 7) num_terms 8) "439158" 9) num_records 10) "8098583" 11) inverted_sz_mb 12) "45.58 13) inverted_cap_mb 14) "56.61 15) inverted_cap_ovh 16) "0.19 17) offset_vectors_sz_mb 18) "9.27 19) skip_index_size_mb 20) "7.35 21) score_index_size_mb 22) "30.8 23) records_per_doc_avg 24) "16.1 25) bytes_per_record_avg 26) "5.90 27) offsets_per_term_avg 28) "1.20 29) offset_bits_per_record_avg 30) "8.00 ``` ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE ### Complexity O(1) ### Returns Array Response. A nested array of keys and values. --- ## FT.SEARCH ### Format ``` FT.SEARCH {index} {query} [NOCONTENT] [VERBATIM] [NOSTOPWORDS] [WITHSCORES] [WITHPAYLOADS] [WITHSORTKEYS] [FILTER {numeric_field} {min} {max}] ... [GEOFILTER {geo_field} {lon} {lat} {raius} m|km|mi|ft] [INKEYS {num} {key} ... ] [INFIELDS {num} {field} ... ] [RETURN {num} {field} ... ] [SUMMARIZE [FIELDS {num} {field} ... ] [FRAGS {num}] [LEN {fragsize}] [SEPARATOR {separator}]] [HIGHLIGHT [FIELDS {num} {field} ... ] [TAGS {open} {close}]] [SLOP {slop}] [INORDER] [LANGUAGE {language}] [EXPANDER {expander}] [SCORER {scorer}] [PAYLOAD {payload}] [SORTBY {field} [ASC|DESC]] [LIMIT offset num] ``` ### Description Search the index with a textual query, returning either documents or just ids. ### Parameters - **index**: The index name. The index must be first created with `FT.CREATE`. - **query**: the text query to search. If it's more than a single word, put it in quotes. Refer to [query syntax](/Query_Syntax) for more details. - **NOCONTENT**: If it appears after the query, we only return the document ids and not the content. This is useful if RediSearch is only an index on an external document collection - **RETURN {num} {field} ...**: Use this keyword to limit which fields from the document are returned. `num` is the number of fields following the keyword. If `num` is 0, it acts like `NOCONTENT`. - **SUMMARIZE ...**: Use this option to return only the sections of the field which contain the matched text. See [Highlighting](/Highlight) for more detailts - **HIGHLIGHT ...**: Use this option to format occurrences of matched text. See [Highligting](/Highlight) for more details - **LIMIT first num**: If the parameters appear after the query, we limit the results to the offset and number of results given. The default is 0 10 - **INFIELDS {num} {field} ...**: If set, filter the results to ones appearing only in specific fields of the document, like title or URL. num is the number of specified field arguments - **INKEYS {num} {field} ...**: If set, we limit the result to a given set of keys specified in the list. the first argument must be the length of the list, and greater than zero. Non-existent keys are ignored - unless all the keys are non-existent. - **SLOP {slop}**: If set, we allow a maximum of N intervening number of unmatched offsets between phrase terms. (i.e the slop for exact phrases is 0) - **INORDER**: If set, and usually used in conjunction with SLOP, we make sure the query terms appear in the same order in the document as in the query, regardless of the offsets between them. - **FILTER numeric_field min max**: If set, and numeric_field is defined as a numeric field in FT.CREATE, we will limit results to those having numeric values ranging between min and max. min and max follow ZRANGE syntax, and can be **-inf**, **+inf** and use `(` for exclusive ranges. Multiple numeric filters for different fields are supported in one query. - **GEOFILTER {geo_field} {lon} {lat} {radius} m|km|mi|ft**: If set, we filter the results to a given radius from lon and lat. Radius is given as a number and units. See [GEORADIUS](https://redis.io/commands/georadius) for more details. - **NOSTOPWORDS**: If set, we do not filter stopwords from the query. - **WITHSCORES**: If set, we also return the relative internal score of each document. this can be used to merge results from multiple instances - **WITHSORTKEYS**: Only relevant in conjunction with **SORTBY**. Returns the value of the sorting key, right after the id and score and /or payload if requested. This is usually not needed by users, and exists for distributed search coordination purposes. - **VERBATIM**: if set, we do not try to use stemming for query expansion but search the query terms verbatim. - **LANGUAGE {language}**: If set, we use a stemmer for the supplied language during search for query expansion. If querying documents in Chinese, this should be set to `chinese` in order to properly tokenize the query terms. Defaults to English. If an unsupported language is sent, the command returns an error. See FT.ADD for the list of languages. - **EXPANDER {expander}**: If set, we will use a custom query expander instead of the stemmer. [See Extensions](/Extensions). - **SCORER {scorer}**: If set, we will use a custom scoring function defined by the user. [See Extensions](/Extensions). - **PAYLOAD {payload}**: Add an arbitrary, binary safe payload that will be exposed to custom scoring functions. [See Extensions](/Extensions). - **WITHPAYLOADS**: If set, we retrieve optional document payloads (see FT.ADD). the payloads follow the document id, and if `WITHSCORES` was set, follow the scores. - **SORTBY {field} [ASC|DESC]**: If specified, and field is a [sortable field](/Sorting), the results are ordered by the value of this field. This applies to both text and numeric fields. ### Complexity O(n) for single word queries (though for popular words we save a cache of the top 50 results). Complexity for complex queries changes, but in general it's proportional to the number of words and the number of intersection points between them. ### Returns **Array reply,** where the first element is the total number of results, and then pairs of document id, and a nested array of field/value. If **NOCONTENT** was given, we return an array where the first element is the total number of results, and the rest of the members are document ids. --- ## FT.AGGREGATE ### Format ``` FT.AGGREGATE {index_name} {query_string} [WITHSCHEMA] [VERBATIM] [LOAD {nargs} {property} ...] [GROUPBY {nargs} {property} ... REDUCE {func} {nargs} {arg} ... [AS {name:string}] ... ] ... [SORTBY {nargs} {property} [ASC|DESC] ... [MAX {num}]] [APPLY {expr} AS {alias}] ... [LIMIT {offset} {num}] ... [FILTER {expr}] ... ``` ### Description Run a search query on an index, and perform aggregate transformations on the results, extracting statistics etc form them. See [the full documentation on aggregations](/Aggregations/) for further details. ### Parameters * **index_name**: The index the query is executed again. * **query_string**: The base filtering query that retrieves the documents. It follows **the exact same syntax** as the search query, including filters, unions, not, optional, etc. * **LOAD {nargs} {property} …**: Load document fields from the document HASH objects. This should be avoided as a general rule of thumb. Fields needed for aggregations should be stored as **SORTABLE**, where they are available to the aggregation pipeline with very load latency. LOAD hurts the performance of aggregate queries considerably, since every processed record needs to execute the equivalent of HMGET against a redis key, which when executed over millions of keys, amounts to very high processing times. * **GROUPBY {nargs} {property}**: Group the results in the pipeline based on one or more properties. Each group should have at least one reducer (See below), a function that handles the group entries, either counting them, or performing multiple aggregate operations (see below). * **REDUCE {func} {nargs} {arg} … [AS {name}]**: Reduce the matching results in each group into a single record, using a reduction function. For example COUNT will count the number of records in the group. See the Reducers section below for more details on available reducers. The reducers can have their own property names using the `AS {name}` optional argument. If a name is not given, the resulting name will be the name of the reduce function and the group properties. For example, if a name is not given to COUNT_DISTINCT by property `@foo`, the resulting name will be `count_distinct(@foo)`. * **SORTBY {nargs} {property} {ASC|DESC} [MAX {num}]**: Sort the pipeline up until the point of SORTBY, using a list of properties. By default, sorting is ascending, but `ASC` or `DESC ` can be added for each propery. `nargs` is the number of sorting parameters, including ASC and DESC. for example: `SORTBY 4 @foo ASC @bar DESC`. `MAX` is used to optimized sorting, by sorting only for the n-largest elements. Although it is not connected to `LIMIT`, you usually need just `SORTBY … MAX` for common queries. * **APPLY {expr} AS {name}**: Apply a 1-to-1 transformation on one or more properties, and either store the result as a new property down the pipeline, or replace any property using this transformation. `expr` is an expression that can be used to perform arithmetic operations on numeric properties, or functions that can be applied on properties depending on their types (see below), or any combination thereof. For example: `APPLY "sqrt(@foo)/log(@bar) + 5" AS baz` will evaluate this expression dynamically for each record in the pipeline and store the result as a new property called baz, that can be referenced by further APPLY / SORTBY / GROUPBY / REDUCE operations down the pipeline. * **LIMIT {offset} {num}**. Limit the number of results to return just `num` results starting at index `offset` (zero-based). AS mentioned above, it is much more efficient to use `SORTBY … MAX` if you are interested in just limiting the output of a sort operation. However, limit can be used to limit results without sorting, or for paging the n-largest results as determined by `SORTBY MAX`. For example, getting results 50-100 of the top 100 results is most efficiently expressed as `SORTBY 1 @foo MAX 100 LIMIT 50 50`. Removing the MAX from SORTBY will result in the pipeline sorting _all_ the records and then paging over results 50-100. * **FILTER {expr}**. Filter the results using predicate expressions relating to values in each result. They are is applied post-query and relate to the current state of the pipeline. ### Complexity Non-deterministic. Depends on the query and aggregations performed, but it is usually linear to the number of results returned. ### Returns Array Response. Each row is an array and represents a single aggregate result. ### Example Output Here we are counting github events by user (actor), to produce the most active users: ``` 127.0.0.1:6379> FT.AGGREGATE gh "*" GROUPBY 1 @actor REDUCE COUNT 0 AS num SORTBY 2 @num DESC MAX 10 1) (integer) 284784 2) 1) "actor" 2) "lombiqbot" 3) "num" 4) "22197" 3) 1) "actor" 2) "codepipeline-test" 3) "num" 4) "17746" 4) 1) "actor" 2) "direwolf-github" 3) "num" 4) "10683" 5) 1) "actor" 2) "ogate" 3) "num" 4) "6449" 6) 1) "actor" 2) "openlocalizationtest" 3) "num" 4) "4759" 7) 1) "actor" 2) "digimatic" 3) "num" 4) "3809" 8) 1) "actor" 2) "gugod" 3) "num" 4) "3512" 9) 1) "actor" 2) "xdzou" 3) "num" 4) "3216" 10) 1) "actor" 2) "opstest" 3) "num" 4) "2863" 11) 1) "actor" 2) "jikker" 3) "num" 4) "2794" (0.59s) ``` --- ## FT.EXPLAIN ### Format ``` FT.EXPLAIN {index} {query} ``` ### Description Return the execution plan for a complex query. In the returned response, a `+` on a term is an indication of stemming. Example: ```sh $ redis-cli --raw 127.0.0.1:6379> FT.EXPLAIN rd "(foo bar)|(hello world) @date:[100 200]|@date:[500 +inf]" INTERSECT { UNION { INTERSECT { foo bar } INTERSECT { hello world } } UNION { NUMERIC {100.000000 <= x <= 200.000000} NUMERIC {500.000000 <= x <= inf} } } ``` ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **query**: The query string, as if sent to FT.SEARCH ### Complexity O(1) ### Returns String Response. A string representing the execution plan (see above example). **Note**: You should use `redis-cli --raw` to properly read line-breaks in the returned response. --- ## FT.DEL ### Format ``` FT.DEL {index} {doc_id} [DD] ``` ### Description Delete a document from the index. Returns 1 if the document was in the index, or 0 if not. After deletion, the document can be re-added to the index. It will get a different internal id and will be a new document from the index's POV. !!! warning "FT.DEL does not delete the actual document By default!" Since RediSearch regards documents as separate entities to the index and allows things like adding existing documents or indexing without saving the document - by default FT.DEL only deletes the reference to the document from the index, not the actual Redis HASH key where the document is stored. Specifying **DD** (Delete Document) after the document ID, will make RediSearch also delete the actual document **if it is in the index**. Alternatively, you can just send an extra **DEL {doc_id}** to redis and delete the document directly. You can run both of them in a MULTI transaction. ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **doc_id**: the id of the document to be deleted. It does not actually delete the HASH key in which the document is stored. Use DEL to do that manually if needed. ### Complexity O(1) ### Returns Integer Reply: 1 if the document was deleted, 0 if not. --- ## FT.GET ### Format ``` FT.GET {index} {doc id} ``` ### Description Returns the full contents of a document. Currently it is equivalent to HGETALL, but this is future-proof and will allow us to change the internal representation of documents inside redis in the future. In addition, it allows simpler implementation of fetching documents in clustered mode. If the document does not exist or is not a HASH object, we reutrn a NULL reply ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **documentId**: The id of the document as inserted to the index ### Returns Array Reply: Key-value pairs of field names and values of the document --- ## FT.MGET ### Format ``` FT.MGET {index} {docId} ... ``` ### Description Returns the full contents of multiple documents. Currently it is equivalent to calling multiple HGETALL commands, although faster. This command is also future-proof and will allow us to change the internal representation of documents inside redis in the future. In addition, it allows simpler implementation of fetching documents in clustered mode. We return an array with exactly the same number of elements as the number of keys sent to the command. Each element, in turn, is an array of key-value pairs representing the document. If a document is not found or is not a valid HASH object, its place in the parent array is filled with a Null reply object. ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **documentIds**: The ids of the requested documents as inserted to the index ### Returns Array Reply: An array with exactly the same number of elements as the number of keys sent to the command. Each element in it is either an array representing the document or Null if it was not found. --- ## FT.DROP ### Format ``` FT.DROP {index} [KEEPDOCS] ``` ### Description Deletes all the keys associated with the index. By default, DROP deletes the document hashes as well, but adding the KEEPDOCS option keeps the documents in place, ready for re-indexing. If no other data is on the redis instance, this is equivalent to FLUSHDB, apart from the fact that the index specification is not deleted. ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **KEEPDOCS**: IF set, the drop operation will not delete the actual document hashes. ### Returns Status Reply: OK on success. --- ## FT.TAGVALS ### Format ``` FT.TAGVALS {index} {field_name} ``` ### Description Return the distinct tags indexed in a [Tag field](/Tags/). This is useful if your tag field indexes things like cities, categories, etc. !!! warning "Limitations" There is no paging or sorting, the tags are not alphabetically sorted. This command only operates on [Tag fields](/Tags/). The strings return lower-cased and stripped of whitespaces, but otherwise unchanged. ### Parameters - **index**: The Fulltext index name. The index must be first created with FT.CREATE - **filed_name**: The name of a Tag file defined in the schema. ### Returns Array Reply: All the distinct tags in the tag index. ### Complexity O(n), n being the cardinality of the tag field. --- ## FT.SUGADD ### Format ``` FT.SUGADD {key} {string} {score} [INCR] [PAYLOAD {payload}] ``` ### Description Add a suggestion string to an auto-complete suggestion dictionary. This is disconnected from the index definitions, and leaves creating and updating suggestino dictionaries to the user. ### Parameters - **key**: the suggestion dictionary key. - **string**: the suggestion string we index - **score**: a floating point number of the suggestion string's weight - **INCR**: if set, we increment the existing entry of the suggestion by the given score, instead of replacing the score. This is useful for updating the dictionary based on user queries in real time - **PAYLOAD {payload}**: If set, we save an extra payload with the suggestion, that can be fetched by adding the `WITHPAYLOADS` argument to `FT.SUGGET`. ### Returns Integer Reply: the current size of the suggestion dictionary. --- ## FT.SUGGET ### Format ``` FT.SUGGET {key} {prefix} [FUZZY] [WITHPAYLOADS] [MAX num] ``` ### Description Get completion suggestions for a prefix ### Parameters - **key**: the suggestion dictionary key. - **prefix**: the prefix to complete on - **FUZZY**: if set, we do a fuzzy prefix search, including prefixes at Levenshtein distance of 1 from the prefix sent - **MAX num**: If set, we limit the results to a maximum of `num`. (**Note**: The default is 5, and the number cannot be greater than 10). - **WITHSCORES**: If set, we also return the score of each suggestion. this can be used to merge results from multiple instances - **WITHPAYLOADS**: If set, we return optional payloads saved along with the suggestions. If no payload is present for an entry, we return a Null Reply. ### Returns Array Reply: a list of the top suggestions matching the prefix, optionally with score after each entry --- ## FT.SUGDEL ### Format ``` FT.SUGDEL {key} {string} ``` ### Description Delete a string from a suggestion index. ### Parameters - **key**: the suggestion dictionary key. - **string**: the string to delete ### Returns Integer Reply: 1 if the string was found and deleted, 0 otherwise. --- ## FT.SUGLEN ### Format ``` FT.SUGLEN {key} ``` ### Description Get the size of an autoc-complete suggestion dictionary ### Parameters * **key**: the suggestion dictionary key. ### Returns Integer Reply: the current size of the suggestion dictionary. --- ## FT.OPTIMIZE !!! warning "This command is deprecated" Index optimizations are done by the internal garbage collector in the background. Client libraries should not implement this command and remove it if they haven't already. ### Format ``` FT.OPTIMIZE {index} ``` ### Description This command is deprecated. --- ## FT.SYNADD ### Format ``` FT.SYNADD ... ``` ### Description The command is used to create a new synonyms group. The command returns the synonym group id which can later be used to add additional terms to that synonym group. Only documents which was indexed after the adding operation will be effected. --- ## FT.SYNUPDATE ### Format ``` FT.SYNUPDATE ... ``` ### Description The command is used to update an existing synonym group with additional terms. Only documents which was indexed after the update will be effected. --- ## FT.SYNDUMP ### Format ``` FT.SYNDUMP ``` ### Description The Command is used to dump the synonyms data structure. Returns a list of synonym terms and their synonym group ids. RediSearch-1.2.2/docs/Configuring.md000066400000000000000000000075131364126773500172750ustar00rootroot00000000000000# Run-time configuration RediSearch supports a few run-time configuration options that should be determined when loading the module. In time more options will be added. !!! tip "Passing Configuration Options" In general, passing configuration options is done by appending arguments after the `--loadmodule` argument in the command line, `loadmodule` configuration directive in a Redis config file, or the `MODULE LOAD` command. For example: In redis.conf: ``` loadmodule redisearch.so OPT1 OPT2 ``` From redis-cli: ``` 127.0.0.6379> MODULE load redisearch.so OPT1 OPT2 ``` From command line: ``` $ redis-server --loadmodule ./redisearch.so OPT1 OPT2 ``` # RediSearch configuration options ## TIMEOUT The maximum amount of time **in milliseconds** that a search query is allowed to run. If this time is exceeded we return the top results accumulated so far, or an error depending on the policy set with `ON_TIMEOUT`. The timeout can be disabled by setting it to 0. !!! note This works only in concurrent mode, so enabling `SAFEMODE` disables this option. ### Default 500 ### Example ``` $ redis-server --loadmodule ./redisearch.so TIMEOUT 100 ``` --- ## ON_TIMEOUT {policy} The response policy for queries that exceed the `TIMEOUT` setting. The policy can be one of the following: * **RETURN**: this policy will return the top results accumulated by the query until it timed out. * **FAIL**: will return an error when the query exeeds the timeout value. ### Default RETURN ### Example ``` $ redis-server --loadmodule ./redisearch.so ON_TIMEOUT fail ``` --- ## SAFEMODE If present in the argument list, RediSearch will turn off concurrency for query processing, and work in a single thread. This is useful if data consistency is extremely important, and avoids a situation where deletion of documents while querying them can cause momentarily inconsistent results (i.e. documents that were valid during the invocation of the query are not returned because they were deleted during query processing). ### Default Off (not present) ### Example ``` $ redis-server --loadmodule ./redisearch.so SAFEMODE ``` --- ## EXTLOAD {file_name} If present, we try to load a RediSearch extension dynamic library from the specified file path. See [Extensions](/Extensions) for details. ### Default None ### Example ``` $ redis-server --loadmodule ./redisearch.so EXTLOAD ./ext/my_extension.so ``` --- ## NOGC If set, we turn off Garbage Collection for all indexes. This is used mainly for debugging and testing, and should not be set by users. ### Default Not set ### Example ``` $ redis-server --loadmodule ./redisearch.so NOGC ``` --- ## MINPREFIX The minimum number of characters we allow for prefix queries (e.g. `hel*`). Setting it to 1 can hurt performance. ### Default 2 ### Example ``` $ redis-server --loadmodule ./redisearch.so MINPREFIX 3 ``` --- ## MAXEXPANSIONS The maximum number of expansions we allow for query prefixes. Setting it too high can cause performance issues. ### Default 200 ### Example ``` $ redis-server --loadmodule ./redisearch.so MAXEXPANSIONS 1000 ``` --- ## MAXDOCTABLESIZE The maximum size of the internal hash table used for storing the documents. ### Default 1000000 ### Example ``` $ redis-server --loadmodule ./redisearch.so MAXDOCTABLESIZE 3000000 ``` --- ## FRISOINI {file_name} If present, we load the custom Chinese dictionary from the specified path. See [Using custom dictionaries](/Chinese#using_custom_dictionaries) for more details. ### Default Not set ### Example ``` $ redis-server --loadmodule ./redisearch.so FRISOINI /opt/dict/friso.ini ``` ## GC_SCANSIZE The garbage collection bulk size of the internal gc used for cleaning up the indexes. ### Default 100 ### Example ``` $ redis-server --loadmodule ./redisearch.so GC_SCANSIZE 10 ``` RediSearch-1.2.2/docs/DESIGN.md000066400000000000000000000242411364126773500157710ustar00rootroot00000000000000# RediSearch internal design RediSearch implements inverted indexes on top of Redis, but unlike previous implementations of Redis inverted indexes, it uses custom data encoding, that allows more memory and CPU efficient searches, and more advanced search features. This document details some of the design choices and how these features are implemented. ## Intro: Redis String DMA The main feature that this module takes advantage of, is Redis Modules Strings DMA, or Direct Memory Access. This feature is simple yet very powerful. It basically allows modules to allocate data on Redis string keys,then get a direct pointer to the data allocated by this key, without copying or serializing it. This allows very fast access to huge amounts of memory, and since from the module's perspective, the string value is exposed simply as `char *`, it can be cast to any data structure. You simply call `RedisModule_StringTruncate` to resize a memory chunk to the size needed, and `RedisModule_StringDMA` to get direct access to the memory in that key. See [https://github.com/RedisLabs/RedisModulesSDK/blob/master/FUNCTIONS.md#redismodule_stringdma](https://github.com/RedisLabs/RedisModulesSDK/blob/master/FUNCTIONS.md#redismodule_stringdma) We use this API in the module mainly to encode inverted indexes, and for other auxiliary data structures besides that. A generic "Buffer" implementation using DMA strings can be found in [redis_buffer.c](https://github.com/goodform/RediSearch/blob/master/src/redis_buffer.c). It automatically resizes the Redis string it uses as raw memory when the capacity needs to grow. ## Inverted index encoding An [Inverted Index](https://en.wikipedia.org/wiki/Inverted_index) is the data structure at the heart of all search engines. The idea is simple - per each word or search term, we save a list of all the documents it appears in, and other data, such as term frequency, the offsets where the term appeared in the document, and more. Offsets are used for "exact match" type searches, or for ranking of results. When a search is performed, we need to either traverse such an index, or intersect or union two or more indexes. Classic Redis implementations of search engines use sorted sets as inverted indexes. This works but has significant memory overhead, and also does not allow for encoding of offsets, as explained above. RediSearch uses String DMA (see above) to efficiently encode inverted indexes. It combines [Delta Encoding](https://en.wikipedia.org/wiki/Delta_encoding) and [Varint Encoding](https://developers.google.com/protocol-buffers/docs/encoding#varints) to encode entries, minimizing space used for indexes, while keeping decompression and traversal efficient. For each "hit" (document/word entry), we encode: * The document Id as a delta from the previous document. * The term frequency, factored by the document's rank (see below) * Flags, that can be used to filter only specific fields or other user-defined properties. * An Offset Vector, of all the document offsets of the word. !!! note Document ids as entered by the user are converted to internal incremental document ids, that allow delta encoding to be efficient, and let the inverted indexes be sorted by document id. This allows for a single index hit entry to be encoded in as little as 6 bytes (Note that this is the best case. depending on the number of occurrences of the word in the document, this can get much higher). To optimize searches, we keep two additional auxiliary data structures in different DMA string keys: 1. **Skip Index**: We keep a table of the index offset of 1/50 of the index entries. This allows faster lookup when intersecting inverted indexes, as not the entire list must be traversed. 2. **Score Index**: In simple single-word searches, there is no real need to traverse all the results, just the top N results the user is interested in. So we keep an auxiliary index of the top 20 or so entries for each term and use them when applicable. ## Document and result ranking Each document entered to the engine using `FT.ADD`, has a user assigned rank, between 0 and 1.0. This is used in combination with [TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) scoring of each word, to rank the results. As an optimization, each inverted index hit is encoded with TF*Document_rank as its score, and only IDF is applied during searches. This may change in the future. On top of that, in the case of intersection queries, we take the minimal distance between the terms in the query, and factor that into the ranking. The closest the terms are to each other, the better the result. When searching, we keep a priority queue of the top N results requested, and eventually return them, sorted by rank. ## Index Specs and field weights When creating an "index" using `FT.CREATE`, the user specifies the fields to be indexed, and their respective weights. This can be used to give some document fields, like a title, more weight in ranking results. For example: ``` FT.CREATE my_index title 10.0 body 1.0 url 2.0 ``` Will create an index on fields named title, body and url, with scores of 10, 1 and 2 respectively. When documents are indexed, the weights are taken from the saved *Index Spec*, that is stored in a special redis key, and only fields that are specified in this spec are indexed. ## Document data storage It is not mandatory to save the document data when indexing a document (specifying `NOSAVE` for `FT.ADD` will cause the document to be indexed but not saved). If the user does save the document, we simply create a HASH key in Redis, containing all fields (including ones not indexed), and upon search, we simply perform an `HGETALL` query on each retrieved document, returning its entire data. **TODO**: Document snippets should be implemented down the road, ## Query Execution Engine We use a chained-iterator based approach to query execution, similar to [Python generators](https://wiki.python.org/moin/Generators) in concept. We simply chain iterators that yield index hits. Those can be: 1. **Read Iterators**, reading hits one by one from an inverted index. i.e. `hello` 2. **Intersect Iterators**, aggregating two or more iterators, yielding only their intersection points. i.e. `hello AND world` 3. **Exact Intersect Iterators** - same as above, but yielding results only if the intersection is an exact phrase. i.e. `hello NEAR world` 4. **Union Iterators** - combining two or more iterators, and yielding a union of their hits. i.e. `hello OR world` These are combined based on the query as an execution plan that is evaluated lazily. For example: ``` hello ==> read("hello") hello world ==> intersect( read("hello"), read("world") ) "hello world" ==> exact_intersect( read("hello"), read("world") ) "hello world" foo ==> intersect( exact_intersect( read("hello"), read("world") ), read("foo") ) ``` All these iterators are lazy evaluated, entry by entry, with constant memory overhead. The "root" iterator is read by the query execution engine, and filtered for the top N results in it. ## Numeric Filters We support defining a field in the index schema as "NUMERIC", meaning you will be able to limit search results only to ones where the given value falls within a specific range. Filtering is done by adding `FILTER` predicates (more than one is supported) to your query. e.g.: ``` FT.SEARCH products "hd tv" FILTER price 100 (300 ``` The filter syntax follows the ZRANGEBYSCORE semantics of Redis, meaning `-inf` and `+inf` are supported, and prepending `(` to a number means an exclusive range. As of release 0.6, the implementation uses a multi-level range tree, saving ranges at multiple resolutions, to allow efficient range scanning. Adding numeric filters can accelerate slow queries if the numeric range is small relative to the entire span of the filtered field. For example, a filter on dates focusing on a few days out of years of data, can speed a heavy query by an order of magnitude. ## Auto-Complete and Fuzzy Suggestions Another important feature for RediSearch is its auto-complete or suggest commands. It allows you to create dictionaries of weighted terms, and then query them for completion suggestions to a given user prefix. For example, if we put the term “lcd tv” into a dictionary, sending the prefix “lc” will return it as a result. The dictionary is modelled as a compressed trie (prefix tree) with weights, that is traversed to find the top suffixes of a prefix. RediSearch also allows for Fuzzy Suggestions, meaning you can get suggestions to user prefixes even if the user has a typo in the prefix. This is enabled using a Levenshtein Automaton, allowing efficient searching of the dictionary for all terms within a maximal Levenshtein distance of a term or prefix. Then suggested are weighted based on both their original score and distance from the prefix typed by the user. Currently we support (for performance reasons) only suggestions where the prefix is up to 1 Levenshtein distance away from the typed prefix. However, since searching for fuzzy prefixes, especially very short ones, will traverse an enormous amount of suggestions (in fact, fuzzy suggestions for any single letter will traverse the entire dictionary!), it is recommended to use this feature carefully, and only when considering the performance penalty it incurs. Since Redis is single threaded, blocking it for any amount of time means no other queries can be processed at that time. To support unicode fuzzy matching, we use 16-bit "runes" inside the trie and not bytes. This increases memory consumption if the text is purely ASCII, but allows completion with the same level of support to all modern languages. This is done in the following manner: 1. We assume all input to FT.SUG* commands is valid utf-8. 2. We convert the input strings to 32-bit Unicode, optionally normalizing, case-folding and removing accents on the way. If the conversion fails it's because the input is not valid utf-8. 3. We trim the 32-bit runes to 16-bit runes using the lower 16 bits. These can be used for insertion, deletion, and search. 4. We convert the output of searches back to utf-8. RediSearch-1.2.2/docs/Escaping.md000066400000000000000000000026231364126773500165510ustar00rootroot00000000000000# Controlling Text Tokenization and Escaping At the moment, RediSearch uses a very simple tokenizer for documents and a slightly more sophisticated tokenizer for queries. Both allow a degree of control over string escaping and tokenization. Note: There is a different mechanism for tokenizing text and tag fields, this document refers only to text fields. For tag fields please refer to the [Tag Fields](/Tags) documentation. ## The rules of text field tokenization 1. All punctuation marks and whitespaces (besides underscores) separate the document and queries into tokens. e.g. any character of `,.<>{}[]"':;!@#$%^&*()-+=~` will break the text into terms. So the text `foo-bar.baz...bag` will be tokenized into `[foo, bar, baz, bag]` 2. Escaping separators in both queries and documents is done by prepending a backslash to any separator. e.g. the text `hello\-world hello-world` will be tokenized as `[hello-world, hello, world]`. **NOTE** that in most languages you will need an extra backslash when formatting the document or query, to signify an actual backslash, so the actual text in redis-cli for example, will be entered as `hello\\-world`. 2. Underscores (`_`) are not used as separators in either document or query. So the text `hello_world` will remain as is after tokenization. 3. Repeating spaces or punctuation marks are stripped. 4. In Latin characters, everything gets converted to lowercase. RediSearch-1.2.2/docs/Extensions.md000066400000000000000000000214121364126773500171540ustar00rootroot00000000000000# Extending RediSearch RediSearch supports an extension mechanism, much like Redis supports modules. The API is very minimal at the moment, and it does not yet support dynamic loading of extensions in run-time. Instead, extensions must be written in C (or a language that has an interface with C) and compiled into dynamic libraries that will be loaded at run-time. There are two kinds of extension APIs at the moment: 1. **Query Expanders**, whose role is to expand query tokens (i.e. stemmers). 2. **Scoring Functions**, whose role is to rank search results in query time. ## Registering and loading extensions Extensions should be compiled into .so files, and loaded into RediSearch on initialization of the module. * Compiling Extensions should be compiled and linked as dynamic libraries. An example Makefile for an extension [can be found here](https://github.com/goodform/RediSearch/blob/master/src/tests/ext-example/Makefile). That folder also contains an example extension that is used for testing and can be taken as a skeleton for implementing your own extension. * Loading Loading an extension is done by apending `EXTLOAD {path/to/ext.so}` after the `loadmodule` configuration directive when loading RediSearch. For example: ```sh $ redis-server --loadmodule ./redisearch.so EXTLOAD ./ext/my_extension.so ``` This causes RediSearch to automatically load the extension and register its expanders and scorers. ## Initializing an extension The entry point of an extension is a function with the signature: ```c int RS_ExtensionInit(RSExtensionCtx *ctx); ``` When loading the extension, RediSearch looks for this function and calls it. This function is responsible for registering and initializing the expanders and scorers. It should return REDISEARCH_ERR on error or REDISEARCH_OK on success. ### Example init function ```c #include //must be in the include path int RS_ExtensionInit(RSExtensionCtx *ctx) { /* Register a scoring function with an alias my_scorer and no special private data and free function */ if (ctx->RegisterScoringFunction("my_scorer", MyCustomScorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Register a query expander */ if (ctx->RegisterQueryExpander("my_expander", MyExpander, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } return REDISEARCH_OK; } ``` ## Calling your custom functions When performing a query, you can tell RediSearch to use your scorers or expanders by specifying the SCORER or EXPANDER arguments, with the given alias. e.g.: ``` FT.SEARCH my_index "foo bar" EXPANDER my_expander SCORER my_scorer ``` **NOTE**: Expander and scorer aliases are **case sensitive**. ## The query expander API At the moment, we only support basic query expansion, one token at a time. An expander can decide to expand any given token with as many tokens it wishes, that will be Union-merged in query time. The API for an expander is the following: ```c #include //must be in the include path void MyQueryExpander(RSQueryExpanderCtx *ctx, RSToken *token) { ... } ``` ### RSQueryExpanderCtx RSQueryExpanderCtx is a context that contains private data of the extension, and a callback method to expand the query. It is defined as: ```c typedef struct RSQueryExpanderCtx { /* Opaque query object used internally by the engine, and should not be accessed */ struct RSQuery *query; /* Opaque query node object used internally by the engine, and should not be accessed */ struct RSQueryNode **currentNode; /* Private data of the extension, set on extension initialization */ void *privdata; /* The language of the query, defaults to "english" */ const char *language; /* ExpandToken allows the user to add an expansion of the token in the query, that will be * union-merged with the given token in query time. str is the expanded string, len is its length, * and flags is a 32 bit flag mask that can be used by the extension to set private information on * the token */ void (*ExpandToken)(struct RSQueryExpanderCtx *ctx, const char *str, size_t len, RSTokenFlags flags); /* SetPayload allows the query expander to set GLOBAL payload on the query (not unique per token) */ void (*SetPayload)(struct RSQueryExpanderCtx *ctx, RSPayload payload); } RSQueryExpanderCtx; ``` ### RSToken RSToken represents a single query token to be expanded and is defined as: ```c /* A token in the query. The expanders receive query tokens and can expand the query with more query * tokens */ typedef struct { /* The token string - which may or may not be NULL terminated */ const char *str; /* The token length */ size_t len; /* 1 if the token is the result of query expansion */ uint8_t expanded:1; /* Extension specific token flags that can be examined later by the scoring function */ RSTokenFlags flags; } RSToken; ``` ## The scoring function API A scoring function receives each document being evaluated by the query, for final ranking. It has access to all the query terms that brought up the document,and to metadata about the document such as its a-priory score, length, etc. Since the scoring function is evaluated per each document, potentially millions of times, and since redis is single threaded - it is important that it works as fast as possible and be heavily optimized. A scoring function is applied to each potential result (per document) and is implemented with the following signature: ```c double MyScoringFunction(RSScoringFunctionCtx *ctx, RSIndexResult *res, RSDocumentMetadata *dmd, double minScore); ``` RSScoringFunctionCtx is a context that implements some helper methods. RSIndexResult is the result information - containing the document id, frequency, terms, and offsets. RSDocumentMetadata is an object holding global information about the document, such as its a-priory score. minSocre is the minimal score that will yield a result that will be relevant to the search. It can be used to stop processing mid-way of before we even start. The return value of the function is double representing the final score of the result. Returning 0 causes the result to be counted, but if there are results with a score greater than 0, they will appear above it. To completely filter out a result and not count it in the totals, the scorer should return the special value `RS_SCORE_FILTEROUT` (which is internally set to negative infinity, or -1/0). ### RSScoringFunctionCtx This is an object containing the following members: * **void *privdata**: a pointer to an object set by the extension on initialization time. * **RSPayload payload**: A Payload object set either by the query expander or the client. * **int GetSlop(RSIndexResult *res)**: A callback method that yields the total minimal distance between the query terms. This can be used to prefer results where the "slop" is smaller and the terms are nearer to each other. ### RSIndexResult This is an object holding the information about the current result in the index, which is an aggregate of all the terms that resulted in the current document being considered a valid result. See redisearch.h for details ### RSDocumentMetadata This is an object describing global information, unrelated to the current query, about the document being evaluated by the scoring function. ## Example query expander This example query expander expands each token with the term foo: ```c #include //must be in the include path void DummyExpander(RSQueryExpanderCtx *ctx, RSToken *token) { ctx->ExpandToken(ctx, strdup("foo"), strlen("foo"), 0x1337); } ``` ## Example scoring function This is an actual scoring function, calculating TF-IDF for the document, multiplying that by the document score, and dividing that by the slop: ```c #include //must be in the include path double TFIDFScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { // no need to evaluate documents with score 0 if (dmd->score == 0) return 0; // calculate sum(tf-idf) for each term in the result double tfidf = 0; for (int i = 0; i < h->numRecords; i++) { // take the term frequency and multiply by the term IDF, add that to the total tfidf += (float)h->records[i].freq * (h->records[i].term ? h->records[i].term->idf : 0); } // normalize by the maximal frequency of any term in the document tfidf /= (double)dmd->maxFreq; // multiply by the document score (between 0 and 1) tfidf *= dmd->score; // no need to factor the slop if tfidf is already below minimal score if (tfidf < minScore) { return 0; } // get the slop and divide the result by it, making sure we prefer results with closer terms tfidf /= (double)ctx->GetSlop(h); return tfidf; } ``` RediSearch-1.2.2/docs/Highlight.md000066400000000000000000000103601364126773500167240ustar00rootroot00000000000000# Highlighting API The highlighting API allows you to have only the relevant portions of document matching a search query returned as a result. This allows users to quickly see how a document relates to their query, with the search terms highlighted, usually in bold letters. RediSearch implements high performance highlighting and summarization algorithms, with the following API: ## Command syntax ``` FT.SEARCH ... SUMMARIZE [FIELDS {num} {field}] [FRAGS {numFrags}] [LEN {fragLen}] [SEPARATOR {sepstr}] HIGHLIGHT [FIELDS {num} {field}] [TAGS {openTag} {closeTag}] ``` There are two sub-commands commands used for highlighting. One is `HIGHLIGHT` which surrounds matching text with an open and/or close tag, and the other is `SUMMARIZE` which splits a field into contextual fragments surrounding the found terms. It is possible to summarize a field, highlight a field, or perform both actions in the same query. ### Summarization ``` FT.SEARCH ... SUMMARIZE [FIELDS {num} {field}] [FRAGS {numFrags}] [LEN {fragLen}] [SEPARATOR {sepStr}] ``` Summarization will fragment the text into smaller sized snippets; each snippet will contain the found term(s) and some additional surrounding context. RediSearch can perform summarization using the `SUMMARIZE` keyword. If no additional arguments are passed, all _returned fields_ are summarized using built-in defaults. The `SUMMARIZE` keyword accepts the following arguments: * **`FIELDS`**: If present, must be the first argument. This should be followed by the number of fields to summarize, which itself is followed by a list of fields. Each field present is summarized. If no `FIELDS` directive is passed, then *all* fields returned are summarized. * **`FRAGS`**: How many fragments should be returned. If not specified, a default of 3 is used. * **`LEN`** The number of context words each fragment should contain. Context words surround the found term. A higher value will return a larger block of text. If not specified, the default value is 20. * **`SEPARATOR`** The string used to divide between individual summary snippets. The default is `... ` which is common among search engines; but you may override this with any other string if you desire to programmatically divide them later on. You may use a newline sequence, as newlines are stripped from the result body anyway (thus, it will not be conflated with an embedded newline in the text) ### Highlighting ``` FT.SEARCH ... HIGHLIGHT [FIELDS {num} {field}] [TAGS {openTag} {closeTag}] ``` Highlighting will highlight the found term (and its variants) with a user-defined tag. This may be used to display the matched text in a different typeface using a markup language, or to otherwise make the text appear differently. RediSearch can perform highlighting using the `HIGHLIGHT` keyword. If no additional arguments are passed, all _returned fields_ are highlighted using built-in defaults. The `HIGHLIGHT` keyword accepts the following arguments: * **`FIELDS`** If present, must be the first argument. This should be followed by the number of fields to highlight, which itself is followed by a list of fields. Each field present is highlighted. If no `FIELDS` directive is passed, then *all* fields returned are highlighted. * **`TAGS`** If present, must be followed by two strings; the first is prepended to each term match, and the second is appended to it. If no `TAGS` are specified, a built-in tag value is appended and prepended. #### Field selection If no specific fields are passed to the `RETURN`, `SUMMARIZE`, or `HIGHLIGHT` keywords, then all of a document's fields are returned. However, if any of these keywords contain a `FIELD` directive, then the `SEARCH` command will only return the sum total of all fields enumerated in any of those directives. The `RETURN` keyword is treated specially, as it overrides any fields specified in `SUMMARIZE` or `HIGHLIGHT`. In the command `RETURN 1 foo SUMMARIZE FIELDS 1 bar HIGHLIGHT FIELDS 1 baz`, the fields `foo` is returned as-is, while `bar` and `baz` are not returned, because `RETURN` was specified, but did not include those fields. In the command `SUMMARIZE FIELDS 1 bar HIGHLIGHT FIELDS 1 baz`, `bar` is returned summarized and `baz` is returned highlighted. RediSearch-1.2.2/docs/Overview.md000066400000000000000000000626061364126773500166350ustar00rootroot00000000000000# RediSearch Technical Overview ## Abstract RediSearch is a powerful text search and secondary indexing engine, built on top of Redis as a Redis Module. Unlike other Redis search libraries, it does not use the internal data structures of Redis like sorted sets. Using its own highly optimized data structures and algorithms, it allows for advanced search features, high performance, and low memory footprint. It can perform simple text searches, as well as complex structured queries, filtering by numeric properties and geographical distances. RediSearch supports continuous indexing with no performance degradation, maintaining concurrent loads of querying and indexing. This makes it ideal for searching frequently updated databases, without the need for batch indexing and service interrupts. RediSearch's Enterprise version supports scaling the search engine across many servers, allowing it to easily grow to billions of documents on hundreds of servers. All of this is done while taking advantage of Redis' robust architecture and infrastructure. Utilizing Redis' protocol, replication, persistence, clustering - RediSearch delivers a powerful yet simple to manage and maintain search and indexing engine, that can be used as a standalone database, or to augment existing Redis databases with advanced powerful indexing capabilities. --- ## Main features * Full-Text indexing of multiple fields in a document, including: * Exact phrase matching. * Stemming in many languages. * Chinese tokenization support. * Prefix queries. * Optional, negative and union queries. * Distributed search on billions of documents. * Numeric property indexing. * Geographical indexing and radius filters. * Incremental indexing without performance loss. * A structured query language for advanced queries: * Unions and intersections * Optional and negative queries * Tag filtering * Prefix matching * A powerful auto-complete engine with fuzzy matching. * Multiple scoring models and sorting by values. * Concurrent low-latency insertion and updates of documents. * Concurrent searches allowing long-running queries without blocking Redis. * An extension mechanism allowing custom scoring models and query extension. * Support for indexing existing Hash objects in Redis databases. --- # Indexing documents In order to search effectively, RediSearch needs to know how to index documents. A document may have several fields, each with its own weight (e.g. a title is usually more important than the text itself. The engine can also use numeric or geographical fields for filtering. Hence, the first step is to create the index definition, which tells RediSearch how to treat the documents we will add. For example, to define an index of products, indexing their title, description, brand, and price, the index creation would look like: ``` FT.CREATE my_index SCHEMA title TEXT WEIGHT 5 description TEXT brand TEXT PRICE numeric ``` When we will add a document to this index, for example: ``` FT.ADD my_index doc1 1.0 FIELDS title "Acme 42 inch LCD TV" description "42 inch brand new Full-HD tv with smart tv capabilities" brand "Acme" price 300 ``` This tells RediSearch to take the document, break each field into its terms ("tokenization") and index it, by marking the index for each of the terms in the index as contained in this document. Thus, the product is added immediately to the index and can now be found in future searches ## Searching Now that we have added products to our index, searching is very simple: ``` FT.SEARCH products "full hd tv" ``` This will tell RediSearch to intersect the lists of documents for each term and return all documents containing the three terms. Of course, more complex queries can be performed, and the full syntax of the query language is detailed below. ## Data structures RediSearch uses its own custom data structures and uses Redis' native structures only for storing the actual document content (using Hash objects). Using specialized data structures allows faster searches and more memory effective storage of index records, utilizing compression techniques like delta encoding. These are the data structures RediSearch uses under the hood: ### Index and document metadata For each search _index_, there is a root data structure containing the schema, statistics, etc - but most importantly, little compact metadata about each document indexed. Internally, inside the index, RediSearch uses delta encoded lists of numeric, incremental, 32-bit document ids. This means that the user given keys or ids for documents, need to be replaced with the internal ids on indexing, and back to the original ids on search. For that, RediSearch saves two tables, mapping the two kinds of ids in two ways (one table uses a compact trie, the other is simply an array where the internal document ID is the array index). On top of that, for each document, we store its user given a priory score, some status bits, and an optional "payload" attached to the document by the user. Accessing the document metadata table is an order of magnitude faster than accessing the hash object where the document is actually saved, so scoring functions that need to access metadata about the document can operate fast enough. ### Inverted index For each term appearing in at least one document, we keep an inverted index, basically a list of all the documents where this term appears. The list is compressed using delta coding, and the document ids are always incrementing. When the user indexes the documents "foo", "bar" and "baz" for example, they are assigned incrementing ids, For example `1025, 1045, 1080`. When encoding them into the index, we only encode the first ID, followed by the deltas between each entry and the previous one, in this case, `1025, 20, 35`. Using variable-width encoding, we can use one byte to express numbers under 255, two bytes for numbers between 256 and 16383 and so on. This can compress the index by up to 75%. On top of the ids, we save the frequency of each term in each document, a bit mask representing the fields in which the term appeared in the document, and a list of the positions in which the term appeared. The structure of the default search record is as follows. Usually, all the entries are one byte long: ``` +----------------+------------+------------------+-------------+------------------------+ | docId_delta | frequency | field mask | offsets len | offset, offset, .... | | (1-4 bytes) | (1-2 bytes)| (1-16 bytes) | (1-2 bytes)| (1-2 bytes per offset) | +----------------+------------+------------------+-------------+------------------------+ ``` Optionally, we can choose not to save any one of those attributes besides the ID, degrading the features available to the engine. ### Numeric index Numeric properties are indexed in a special data structure that enables filtering by numeric ranges in an efficient way. One could view a numeric value as a term operating just like an inverted index. For example, all the products with the price $100 are in a specific list, that is intersected with the rest of the query (see Query Execution Engine). However, in order to filer by a range of prices, we would have to intersect the query with all the distinct prices within that range - or perform a union query. If the range has many values in it, this becomes highly inefficient. To avoid that, we group numeric entries with close values together, in a single "range node". These nodes are stored in binary range tree, that allows the engine to select the relevant nodes and union them together. Each entry in a range node contains a document Id, and the actual numeric value for that document. To further optimize, the tree uses an adaptive algorithm to try to merge as many nodes as possible within the same range node. ### Tag index Tag indexes are similar to full-text indexes, but use simpler tokenization and encoding in the index. The values in these fields cannot be accessed by general field-less search and can be used only with a special syntax. The main differences between tag fields and full-text fields are: 1. An entire tag field index resides in a single Redis key and doesn't have a key per term as the full-text one. 2. The tokenization is simpler: The user can determine a separator (defaults to a comma) for multiple tags, and we only do whitespace trimming at the end of tags. Thus, tags can contain spaces, punctuation marks, accents, etc. The only two transformations we perform are lower-casing (for latin languages only as of now), and whitespace trimming. 3. Tags cannot be found from a general full-text search. If a document has a field called "tags" with the values "foo" and "bar", searching for foo or bar without a special tag modifier (see below) will not return this document. 4. The index is much simpler and more compressed: we only store document ids in the index, usually resulting in 1-2 bytes per index entry. ### Geo index Geo indexes utilize Redis' own geo-indexing capabilities. In query time, the geographical part of the query (a radius filter) is sent to Redis, returning only the ids of documents that are within that radius. ### Auto-complete The auto-complete engine (see below for a fuller description) utilizes a compact trie or prefix tree, to encode terms and search them by prefix. ## Query language We support a simple syntax for complex queries, that can be combined together to express complex filtering and matching rules. The query is combined as a text string in the `FT.SEARCH` request and is parsed using a complex query parser. * Multi-word phrases simply a list of tokens, e.g. `foo bar baz`, and imply intersection (AND) of the terms. * Exact phrases are wrapped in quotes, e.g `"hello world"`. * OR Unions (i.e `word1 OR word2`), are expressed with a pipe (`|`), e.g. `hello|hallo|shalom|hola`. * NOT negation (i.e. `word1 NOT word2`) of expressions or sub-queries. e.g. `hello -world`. * Prefix matches (all terms starting with a prefix) are expressed with a `*` following a 2-letter or longer prefix. * Selection of specific fields using the syntax `@field:hello world`. * Numeric Range matches on numeric fields with the syntax `@field:[{min} {max}]`. * Geo radius matches on geo fields with the syntax `@field:[{lon} {lat} {radius} {m|km|mi|ft}]` * Tag field filters with the syntax `@field:{tag | tag | ...}`. See the full documentation on tag fields. * Optional terms or clauses: `foo ~bar` means bar is optional but documents with bar in them will rank higher. ### Complex queries example Expressions can be combined together to express complex rules. For example, let's assume we have a database of products, where each entity has the fields `title`, `brand`, `tags` and `price`. Expressing a generic search would be simply: ``` lcd tv ``` This would return documents containing these terms in any field. Limiting the search to specific fields (title only in this case) is expressed as: ``` @title:(lcd tv) ``` Numeric filters can be combined to filter price within a price range: ``` @title:(lcd tv) @price:[100 500.2] ``` Multiple text fields can be accessed in different query clauses, for example, to select products of multiple brands: ``` @title:(lcd tv) @brand:(sony | samsung | lg) @price:[100 500.2] ``` Tag fields can be used to index multi-term properties without actual full-text tokenization: ``` @title:(lcd tv) @brand:(sony | samsung | lg) @tags:{42 inch | smart tv} @price:[100 500.2] ``` And negative clauses can also be added, in this example to filter out plasma and CRT TVs: ``` @title:(lcd tv) @brand:(sony | samsung | lg) @tags:{42 inch | smart tv} @price:[100 500.2] -@tags:{plasma | crt} ``` ## Scoring model RediSearch comes with a few very basic scoring functions to evaluate document relevance. They are all based on document scores and term frequency. This is regardless of the ability to use sortable fields (see below). Scoring functions are specified by adding the `SCORER {scorer_name}` argument to a search request. If you prefer a custom scoring function, it is possible to add more functions using the [Extension API](/Extensions). These are the pre-bundled scoring functions available in RediSearch: * **TFIDF (Default)** Basic [TF-IDF scoring](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) with document score and proximity boosting factored in. * **TFIDF.DOCNORM** Identical to the default TFIDF scorer, with one important distinction: * **BM25** A variation on the basic TF-IDF scorer, see [this Wikipedia article for more info](https://en.wikipedia.org/wiki/Okapi_BM25). * **DISMAX** A simple scorer that sums up the frequencies of the matched terms; in the case of union clauses, it will give the maximum value of those matches. * **DOCSCORE** A scoring function that just returns the priory score of the document without applying any calculations to it. Since document scores can be updated, this can be useful if you'd like to use an external score and nothing further. ## Sortable fields It is possible to bypass the scoring function mechanism, and order search results by the value of different document properties (fields) directly - even if the sorting field is not used by the query. For example, you can search for first name and sort by the last name. When creating the index with FT.CREATE, you can declare `TEXT` and `NUMERIC` properties to be `SORTABLE`. When a property is sortable, we can later decide to order the results by its values. For example, in the following schema: ``` > FT.CREATE users SCHEMA first_name TEXT last_name TEXT SORTABLE age NUMERIC SORTABLE ``` Would allow the following query: ``` FT.SEARCH users "john lennon" SORTBY age DESC ``` ## Result highlighting and summarisation Highlighting allows users to only the relevant portions of document matching a search query returned as a result. This allows users to quickly see how a document relates to their query, with the search terms highlighted, usually in bold letters. RediSearch implements high performance highlighting and summarization algorithms, with the following API: ``` FT.SEARCH ... SUMMARIZE [FIELDS {num} {field}] [FRAGS {numFrags}] [LEN {fragLen}] [SEPARATOR {separator}] HIGHLIGHT [FIELDS {num} {field}] [TAGS {openTag} {closeTag}] ``` Summarisation will fragment the text into smaller sized snippets; each snippet will contain the found term(s) and some additional surrounding context. Highlighting will highlight the found term (and its variants) with a user-defined tag. This may be used to display the matched text in a different typeface using a markup language, or to otherwise make the text appear differently. ## Auto-completion Another important feature for RediSearch is its auto-complete engine. This allows users to create dictionaries of weighted terms, and then query them for completion suggestions to a given user prefix. Completions can have "payloads" - a user-provided piece of data that can be used for display. For example, completing the names of users, it is possible to add extra metadata about users to be displayed al For example, if a user starts to put the term “lcd tv” into a dictionary, sending the prefix “lc” will return the full term as a result. The dictionary is modeled as a compact trie (prefix tree) with weights, which is traversed to find the top suffixes of a prefix. RediSearch also allows for Fuzzy Suggestions, meaning you can get suggestions to prefixes even if the user makes a typo in their prefix. This is enabled using a Levenshtein Automaton, allowing efficient searching of the dictionary for all terms within a maximal Levenshtein Distance of a term or prefix. Then suggestions are weighted based on both their original score and their distance from the prefix typed by the user. However, searching for fuzzy prefixes (especially very short ones) will traverse an enormous number of suggestions. In fact, fuzzy suggestions for any single letter will traverse the entire dictionary, so we recommend using this feature carefully, in consideration of the performance penalty it incurs. RediSearch's auto-completer supports Unicode, allowing for fuzzy matches in non-latin languages as well. ## Search engine internals ### The Redis module API RediSearch utilizes the [Redis Module API](https://redis.io/topics/modules-intro) and is loaded into Redis as an extension module. Redis modules make possible to extend Redis functionality, implementing new Redis commands, data structures and capabilities with similar performance to native core Redis itself. Redis modules are dynamic libraries, that can be loaded into Redis at startup or using the MODULE LOAD command. Redis exports a C API, in the form of a single C header file called redismodule.h. This means that while the logic of RediSearch and its algorithms are mostly independent, and it could, in theory, be ported quite easily to run as a stand-alone server - it still "stands on the shoulders" of giants and takes advantage of Redis as a robust infrastructure for a database server. Building on top of Redis means that by default the module operates: * A high performance network protocol server. * Robust replication. * Highly durable persistence as snapshots of transaction logs. * Cluster mode. * etc. ### Query execution engine RediSearch uses a high-performance flexible query processing engine, that can evaluate very complex queries in real time. The above query language is compiled into an execution plan that consists of a tree of "index iterators" or "filters". These can be any of: * Numeric filter * Tag filter * Text filter * Geo filter * Intersection operation (combining 2 or more filters) * Union operation (combining 2 or more filters) * NOT operation (negating the results of an underlying filter) * Optional operation (wrapping an underlying filter in an optional matching filter) The query parser generates a tree of these filters. For example, a multi-word search would be resolved into an intersect operation of multiple text filters, each traversing an inverted index of a different term. Simple optimizations such as removing redundant layers in the tree are applied. Each of the filters in the resulting tree evaluates one match at a time. This means that at any given moment, the query processor is busy evaluating and scoring one matching document. This means that very little memory allocation is done at run-time, resulting in higher performance. The resulting matching documents are then fed to a post-processing chain of "result processors", responsible for scoring them, extracting the top-N results, loading the documents from storage and sending them to the client. That chain is dynamic as well, and changes based on the attributes of the query. For example, a query that only needs to return document ids, will not include a stage for loading documents from storage. ### Concurrent updates and searches While it is extremely fast and uses highly optimized data structures and algorithms, it was facing the same problem with regards to concurrency: Depending on the size of your data-set and the cardinality of search queries, they can take internally anywhere between a few microseconds, to hundreds of milliseconds to seconds in extreme cases. And when that happens - the entire Redis server that the engine is running on - is blocked. Think, for example, of a full-text query intersecting the terms "hello" and "world", each with, let's say, a million entries, and half a million common intersection points. To do that in a millisecond, you would have to scan, intersect and rank each result in one nanosecond, [which is impossible with current hardware](https://gist.github.com/jboner/2841832). The same goes for indexing a 1000 word document. It blocks Redis entirely for that duration. RediSearch utilizes the Redis Module API's concurrency features to avoid stalling the server for long periods of time. The idea is simple - while Redis in itself still remains single-threaded, a module can run many threads - and any one of them can acquire the **Global Lock** when it needs to access Redis data, operate on it, and release it. We still cannot really query Redis in parallel - only one thread can acquire the lock, including the Redis main thread - but we can make sure that a long-running query will give other queries time to properly run by yielding this lock from time to time. To allow concurrency, we adopted the following design: 1. RediSearch has a thread pool for running concurrent search queries. 2. When a search request arrives, it gets to the handler, gets parsed on the main thread, and a request object is passed to the thread pool via a queue. 3. The thread pool runs a query processing function in its own thread. 4. The function locks the Redis Global lock and starts executing the query. 5. Since the search execution is basically an iterator running in a cycle, we simply sample the elapsed time every several iterations (sampling on each iteration would slow things down as it has a cost of its own). 6. If enough time has elapsed, the query processor releases the Global Lock, and immediately tries to acquire it again. When the lock is released, the kernel will schedule another thread to run - be it Redis' main thread, or another query thread. 7. When the lock is acquired again - we reopen all Redis resources we were holding before releasing the lock (keys might have been deleted while the thread has been "sleeping") and continue work from the previous state. Thus the operating system's scheduler makes sure all query threads get CPU time to run. While one is running the rest wait idly, but since execution is yielded about 5,000 times a second, it creates the effect of concurrency. Fast queries will finish in one go without yielding execution, slow ones will take many iterations to finish, but will allow other queries to run concurrently. ### Index garbage collection RediSearch is optimized for high write, update and delete throughput. One of the main design choices dictated by this goal is that deleting and updating documents do not actually delete anything from the index: 1. Deletion simply marks the document deleted in a global document metadata table, using a single bit. 2. Updating, on the other hand, marks the document as deleted, assigns it a new incremental document ID, and re-indexes the document under a new ID, without performing a comparison of the change. What this means, is that index entries belonging to deleted documents are not removed from the index, and can be seen as "garbage". Over time, an index with many deletes and updates will contain mostly garbage - both slowing things down and consuming unnecessary memory. To overcome this, RediSearch employs a background Garbage Collection mechanism: during normal operation of the index, a special thread randomly samples indexes, traverses them and looks for garbage. Index sections containing garbage are "cleaned" and memory is reclaimed. This is done in a none intrusive way, operating on very small amounts of data per scan, and utilizing Redis' concurrency mechanism (see above) to avoid interrupting the searches and indexing. The algorithm also tries to adapt to the state of the index, increasing the garbage collector's frequency if the index contains a lot of garbage, and decreasing it if it doesn't, to the point of hardly scanning if the index does not contain garbage. ### Extension model RediSearch supports an extension mechanism, much like Redis supports modules. The API is very minimal at the moment, and it does not yet support dynamic loading of extensions in run-time. Instead, extensions must be written in C (or a language that has an interface with C) and compiled into dynamic libraries that will be loaded at run-time. There are two kinds of extension APIs at the moment: 1. **Query Expanders**, whose role is to expand query tokens (i.e. stemmers). 2. **Scoring Functions**, whose role is to rank search results in query time. Extensions are compiled into dynamic libraries and loaded into RediSearch on initialization of the module. In fact, the mechanism is based on the code of Redis' own module system, albeit far simpler. --- # Scalable Distributed Search While RediSearch is very fast and memory efficient, if an index is big enough, at some point it will be too slow or consume too much memory. Then, it will have to be scaled out and partitioned over several machines - meaning every machine will hold a small part of the complete search index. Traditional clusters map different keys to different “shards” to achieve this. However, in search indexes, this approach is not practical. If we mapped each word’s index to a different shard, we would end up needing to intersect records from different servers for multi-term queries. The way to address this challenge is to employ a technique called Index Partitioning, which is very simple at its core: * The index is split across many machines/partitions by document ID. * Every such partition has a complete index of all the documents mapped to it. * We query all shards concurrently and merge the results from all of them into a single result. To enable that, a new component is added to the cluster, called a Coordinator. When searching for documents, the coordinator receves the query, and sends it to N partitions, each holding a sub-index of 1/N documents. Since we’re only interested in the top K results of all partitions, each partition returns just its own top K results. We then merge the N lists of K elements and extract the top K elements from the merged list. This feature is currently available only with the Enterprise version of RediSearch. RediSearch-1.2.2/docs/Query_Syntax.md000066400000000000000000000264421364126773500175000ustar00rootroot00000000000000# Search Query Syntax We support a simple syntax for complex queries with the following rules: * Multi-word phrases simply a list of tokens, e.g. `foo bar baz`, and imply intersection (AND) of the terms. * Exact phrases are wrapped in quotes, e.g `"hello world"`. * OR Unions (i.e `word1 OR word2`), are expressed with a pipe (`|`), e.g. `hello|hallo|shalom|hola`. * NOT negation (i.e. `word1 NOT word2`) of expressions or sub-queries. e.g. `hello -world`. As of version 0.19.3, purely negative queries (i.e. `-foo` or `-@title:(foo|bar)`) are supported. * Prefix matches (all terms starting with a prefix) are expressed with a `*`. For performance reasons, a minimum prefix length is enforced (2 by default, but is configurable) * A special "wildcard query" that returns all results in the index - `*` (cannot be combined with anything else). * Selection of specific fields using the syntax `@field:hello world`. * Numeric Range matches on numeric fields with the syntax `@field:[{min} {max}]`. * Geo radius matches on geo fields with the syntax `@field:[{lon} {lat} {radius} {m|km|mi|ft}]` * Tag field filters with the syntax `@field:{tag | tag | ...}`. See the full documentation on [tag fields|/Tags]. * Optional terms or clauses: `foo ~bar` means bar is optional but documents with bar in them will rank higher. * An expression in a query can be wrapped in parentheses to disambiguate, e.g. `(hello|hella) (world|werld)`. * Query attributes can be applied to individual clauses, e.g. `(foo bar) => { $weight: 2.0; $slop: 1; $inorder: false; }` * Combinations of the above can be used together, e.g `hello (world|foo) "bar baz" bbbb` ## Pure negative queries As of version 0.19.3 it is possible to have a query consisting of just a negative expression, e.g. `-hello` or `-(@title:foo|bar)`. The results will be all the documents *NOT* containing the query terms. !!! warning Any complex expression can be negated this way, however, caution should be taken here: if a negative expression has little or no results, this is equivalent to traversing and ranking all the documents in the index, which can be slow and cause high CPU consumption. ## Field modifiers As of version 0.12 it is possible to specify field modifiers in the query and not just using the INFIELDS global keyword. Per query expression or sub-expression, it is possible to specify which fields it matches, by prepending the expression with the `@` symbol, the field name and a `:` (colon) symbol. If a field modifier precedes multiple words, they are considered to be a phrase with the same modifier. If a field modifier precedes an expression in parentheses, it applies only to the expression inside the parentheses. Multiple modifiers can be combined to create complex filtering on several fields. For example, if we have an index of car models, with a vehicle class, country of origin and engine type, we can search for SUVs made in Korea with hybrid or diesel engines - with the following query: ``` FT.SEARCH cars "@country:korea @engine:(diesel|hybrid) @class:suv" ``` Multiple modifiers can be applied to the same term or grouped terms. e.g.: ``` FT.SEARCH idx "@title|body:(hello world) @url|image:mydomain" ``` This will search for documents that have "hello world" either in the body or the title, and the term "mydomain" in their url or image fields. ## Numeric filters in query If a field in the schema is defined as NUMERIC, it is possible to either use the FILTER argument in the Redis request or filter with it by specifying filtering rules in the query. The syntax is `@field:[{min} {max}]` - e.g. `@price:[100 200]`. ### A few notes on numeric predicates 1. It is possible to specify a numeric predicate as the entire query, whereas it is impossible to do it with the FILTER argument. 2. It is possible to intersect or union multiple numeric filters in the same query, be it for the same field or different ones. 3. `-inf`, `inf` and `+inf` are acceptable numbers in a range. Thus greater-than 100 is expressed as `[(100 inf]`. 4. Numeric filters are inclusive. Exclusive min or max are expressed with `(` prepended to the number, e.g. `[(100 (200]`. 5. It is possible to negate a numeric filter by prepending a `-` sign to the filter, e.g. returning a result where price differs from 100 is expressed as: `@title:foo -@price:[100 100]`. ## Tag filters RediSearch (starting with version 0.91) allows a special field type called "tag field", with simpler tokenization and encoding in the index. The values in these fields cannot be accessed by general field-less search, and can be used only with a special syntax: ``` @field:{ tag | tag | ...} e.g. @cities:{ New York | Los Angeles | Barcelona } ``` Tags can have multiple words or include other punctuation marks other than the field's separator (`,` by default). Punctuation marks in tags should be escaped with a backslash (`\`). It is also recommended (but not mandatory) to escape spaces; The reason is that if a multi-word tag includes stopwords, it will create a syntax error. So tags like "to be or not to be" should be escaped as "to\ be\ or\ not\ to\ be". For good measure, you can escape all spaces within tags. Notice that multiple tags in the same clause create a union of documents containing either tags. To create an intersection of documents containing *all* tags, you should repeat the tag filter several times, e.g.: ``` # This will return all documents containing all three cities as tags: @cities:{ New York } @cities:{Los Angeles} @cities:{ Barcelona } # This will return all documents containing either city: @cities:{ New York | Los Angeles | Barcelona } ``` Tag clauses can be combined into any sub-clause, used as negative expressions, optional expressions, etc. ## Geo filters in query As of version 0.21, it is possible to add geo radius queries directly into the query language with the syntax `@field:[{lon} {lat} {radius} {m|km|mi|ft}]`. This filters the result to a given radius from a lon,lat point, defined in meters, kilometers, miles or feet. See Redis' own [`GEORADIUS`](https://redis.io/commands/georadiys) command for more details as it is used internally for that). Radius filters can be added into the query just like numeric filters. For example, in a database of businesses, looking for Chinese restaurants near San Francisco (within a 5km radius) would be expressed as: `chinese restaurant @location:[-122.41 37.77 5 km]`. ## Prefix matching On index updating, we maintain a dictionary of all terms in the index. This can be used to match all terms starting with a given prefix. Selecting prefix matches is done by appending `*` to a prefix token. For example: ``` hel* world ``` Will be expanded to cover `(hello|help|helm|...) world`. ### A few notes on prefix searches 1. As prefixes can be expanded into many many terms, use them with caution. There is no magic going on, the expansion will create a Union operation of all suffixes. 2. As a protective measure to avoid selecting too many terms, and block redis, which is single threaded, there are two limitations on prefix matching: * Prefixes are limited to 2 letters or more. You can change this number by using the `MINPREFIX` setting on the module command line. * Expansion is limited to 200 terms or less. You can change this number by using the `MAXEXPANSIONS` setting on the module command line. 3. Prefix matching fully supports Unicode and is case insensitive. 4. Currently, there is no sorting or bias based on suffix popularity, but this is on the near-term roadmap. ## Fuzzy matching As of v1.2.0, the dictionary of all terms in the index can also be used to perform [Fuzzy Matching](https://en.wikipedia.org/wiki/Approximate_string_matching). Fuzzy matches are performed based on [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) (LD). Fuzzy matching on a term is performed by surrounding the term with '%', for example: ``` %hello% world ``` Will perform fuzzy matching on 'hello' for all terms where LD is 1. ## Wildcard queries As of version 1.1.0, we provide a special query to retrieve all the documents in an index. This is meant mostly for the aggregation engine. You can call it by specifying only a single star sign as the query string - i.e. `FT.SEARCH myIndex *`. This cannot be combined with any other filters, field modifiers or anything inside the query. It is technically possible to use the deprecated FILTER and GEOFILTER request parameters outside the query string in conjunction with a wildcard, but this makes the wildcard meaningless and only hurts performance. ## Query attributes As of version 1.2.0, it is possible to apply specific query modifying attributes to specific clauses of the query. The syntax is `(foo bar) => { $attribute: value; $attribute:value; ...}`, e.g: ``` (foo bar) => { $weight: 2.0; $slop: 1; $inorder: true; } ~(bar baz) => { $weight: 0.5; } ``` The supported attributes are: * **$weight**: determines the weight of the sub-query or token in the overall ranking on the result (default: 1.0). 2. **$slop**: determines the maximum allowed "slop" (space between terms) in the query clause (default: 0). 3. **$inorder**: whether or not the terms in a query clause must appear in the same order as in the query, usually set alongside with `$slop` (default: false). ## A few query examples * Simple phrase query - hello AND world hello world * Exact phrase query - **hello** FOLLOWED BY **world** "hello world" * Union: documents containing either **hello** OR **world** hello|world * Not: documents containing **hello** but not **world** hello -world * Intersection of unions (hello|halo) (world|werld) * Negation of union hello -(world|werld) * Union inside phrase (barack|barrack) obama * Optional terms with higher priority to ones containing more matches: obama ~barack ~michelle * Exact phrase in one field, one word in another field: @title:"barack obama" @job:president * Combined AND, OR with field specifiers: @title:hello world @body:(foo bar) @category:(articles|biographies) * Prefix Queries: hello worl* hel* worl* hello -worl* * Numeric Filtering - products named "tv" with a price range of 200-500: @name:tv @price:[200 500] * Numeric Filtering - users with age greater than 18: @age:[(18 +inf] ## Mapping common SQL predicates to RediSearch | SQL Condition | RediSearch Equivalent | Comments | |---------------|-----------------------|----------| | WHERE x='foo' AND y='bar' | @x:foo @y:bar | for less ambiguity use (@x:foo) (@y:bar) | | WHERE x='foo' AND y!='bar' | @x:foo -@y:bar | | WHERE x='foo' OR y='bar' | (@x:foo)\|(@y:bar) | | WHERE x IN ('foo', 'bar','hello world') | @x:(foo\|bar\|"hello world") | quotes mean exact phrase | | WHERE y='foo' AND x NOT IN ('foo','bar') | @y:foo (-@x:foo) (-@x:bar) | | WHERE x NOT IN ('foo','bar') | -@x:(foo\|bar) | | WHERE num BETWEEN 10 AND 20 | @num:[10 20] | | WHERE num >= 10 | @num:[10 +inf] | | WHERE num > 10 | @num:[(10 +inf] | | WHERE num < 10 | @num:[-inf (10] | | WHERE num <= 10 | @num:[-inf 10] | | WHERE num < 10 OR num > 20 | @num:[-inf (10] \| @num:[(20 +inf] | | WHERE name LIKE 'john%' | @name:john* | ## Technical note The query parser is built using the Lemon Parser Generator and a Ragel based lexer. You can see the grammar definition [at the git repo](https://github.com/goodform/RediSearch/blob/master/src/query_parser/parser.y). RediSearch-1.2.2/docs/Quick_Start.md000066400000000000000000000023641364126773500172530ustar00rootroot00000000000000 # Quick Start Guide for RediSearch ## Running with Docker ```sh docker run -p 6379:6379 goodform/redisearch:latest ``` ## Building and running from source ```sh git clone https://github.com/goodform/RediSearch.git cd RediSearch/src make all # Assuming you have a Redis build from the unstable branch: /path/to/redis-server --loadmodule ./redisearch.so ``` ## Creating an index with fields and weights (default weight is 1.0) ``` 127.0.0.1:6379> FT.CREATE myIdx SCHEMA title TEXT WEIGHT 5.0 body TEXT url TEXT OK ``` ## Adding documents to the index ``` 127.0.0.1:6379> FT.ADD myIdx doc1 1.0 FIELDS title "hello world" body "lorem ipsum" url "http://redis.io" OK ``` ## Searching the index ``` 127.0.0.1:6379> FT.SEARCH myIdx "hello world" LIMIT 0 10 1) (integer) 1 2) "doc1" 3) 1) "title" 2) "hello world" 3) "body" 4) "lorem ipsum" 5) "url" 6) "http://redis.io" ``` !!! note Input is expected to be valid utf-8 or ASCII. The engine cannot handle wide character unicode at the moment. ## Dropping the index ``` 127.0.0.1:6379> FT.DROP myIdx OK ``` ## Adding and getting Auto-complete suggestions ``` 127.0.0.1:6379> FT.SUGADD autocomplete "hello world" 100 OK 127.0.0.1:6379> FT.SUGGET autocomplete "he" 1) "hello world" ``` RediSearch-1.2.2/docs/Scoring.md000066400000000000000000000113461364126773500164260ustar00rootroot00000000000000# Scoring in RediSearch RediSearch comes with a few very basic scoring functions to evaluate document relevance. They are all based on document scores and term frequency. This is regardless of the ability to use [sortable fields](/Sorting/). Scoring functions are specified by adding the `SCORER {scorer_name}` argument to a search query. If you prefer a custom scoring function, it is possible to add more functions using the [Extension API](/Extensions). These are the pre-bundled scoring functions available in RediSearch and how they work. Each function is mentioned by registered name, that can be passed as a `SCORER` argument in `FT.SEARCH`. ## TFIDF (default) Basic [TF-IDF scoring](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) with a few extra features thrown inside: 1. For each term in each result, we calculate the TF-IDF score of that term to that document. Frequencies are weighted based on field weights that are pre-determined, and each term's frequency is **normalized by the highest term frequency in each document**. 2. We multiply the total TF-IDF for the query term by the a priory document score given on `FT.ADD`. 3. We give a penalty to each result based on "slop" or cumulative distance between the search terms: exact matches will get no penalty, but matches where the search terms are distant see their score reduced significantly. For each 2-gram of consecutive terms, we find the minimal distance between them. The penalty is the square root of the sum of the distances, squared - `1/sqrt(d(t2-t1)^2 + d(t3-t2)^2 + ...)`. So for N terms in document D, `T1...Tn`, the resulting score could be described with this python function: ```py def get_score(terms, doc): # the sum of tf-idf score = 0 # the distance penalty for all terms dist_penalty = 0 for i, term in enumerate(terms): # tf normalized by maximum frequency tf = doc.freq(term) / doc.max_freq # idf is global for the index, and not calculated each time in real life idf = log2(1 + total_docs / docs_with_term(term)) score += tf*idf # sum up the distance penalty if i > 0: dist_penalty += min_distance(term, terms[i-1])**2 # multiply the score by the document score score *= doc.score # divide the score by the root of the cumulative distance if len(terms) > 1: score /= sqrt(dist_penalty) return score ``` ## TFIDF.DOCNORM Identical to the default TFIDF scorer, with one important distinction: Term frequencies are normalized by the length of the document (expressed as the total number of terms). The length is weighted, so that if a document contains two terms, one in a field that has a weight 1 and one in a field with a weight of 5, the total frequency is 6, not 2. ``` FT.SEARCH myIndex "foo" SCORER TFIDF.DOCNORM ``` ## BM25 A variation on the basic TF-IDF scorer, see [this Wikipedia article for more info](https://en.wikipedia.org/wiki/Okapi_BM25). We also multiply the relevance score for each document by the a priory document score and apply a penalty based on slop as in TFIDF. ``` FT.SEARCH myIndex "foo" SCORER BM25 ``` ## DISMAX A simple scorer that sums up the frequencies of the matched terms; in the case of union clauses, it will give the maximum value of those matches. No other penalties or factors are applied. It is not a 1 to 1 implementation of [Solr's DISMAX algorithm](https://wiki.apache.org/solr/DisMax) but follows it in broad terms. ``` FT.SEARCH myIndex "foo" SCORER DISMAX ``` ## DOCSCORE A scoring function that just returns the a priory score of the document without applying any calculations to it. Since document scores can be updated, this can be useful if you'd like to use an external score and nothing further. ``` FT.SEARCH myIndex "foo" SCORER DOCSCORE ``` ## HAMMING Scoring by the (inverse) Hamming Distance between the documents' payload and the query payload. Since we are interested in the **nearest** neighbors, we inverse the hamming distance (`1/(1+d)`) so that a distance of 0 gives a perfect score of 1 and is the highest rank. This works only if: 1. The document has a payload. 2. The query has a payload. 3. Both are **exactly the same length**. Payloads are binary-safe, and having payloads with a length that's a multiple of 64 bits yields slightly faster results. Example: ``` 127.0.0.1:6379> FT.CREATE idx SCHEMA foo TEXT OK 127.0.0.1:6379> FT.ADD idx 1 1 PAYLOAD "aaaabbbb" FIELDS foo hello OK 127.0.0.1:6379> FT.ADD idx 2 1 PAYLOAD "aaaacccc" FIELDS foo bar OK 127.0.0.1:6379> FT.SEARCH idx "*" PAYLOAD "aaaabbbc" SCORER HAMMING WITHSCORES 1) (integer) 2 2) "1" 3) "0.5" // hamming distance of 1 --> 1/(1+1) == 0.5 4) 1) "foo" 2) "hello" 5) "2" 6) "0.25" // hamming distance of 3 --> 1/(1+3) == 0.25 7) 1) "foo" 2) "bar" ``` RediSearch-1.2.2/docs/Sorting.md000066400000000000000000000050001364126773500164350ustar00rootroot00000000000000# Sorting by Indexed Fields As of RediSearch 0.15, it is possible to bypass the scoring function mechanism, and order search results by the value of different document properties (fields) directly - even if the sorting field is not used by the query. For example, you can search for first name and sort by last name. ## Declaring Sortable Fields When creating the index with `FT.CREATE`, you can declare `TEXT` and `NUMERIC` properties to be `SORTABLE`. When a property is sortable, we can later decide to order the results by its values. For example, in the following schema: ``` > FT.CREATE users SCHEMA first_name TEXT last_name TEXT SORTABLE age NUMERIC SORTABLE ``` The fields `last_name` and `age` are sortable, but `first_name` isn't. This means we can search by either first and/or last name, and sort by last name or age. ### Note on sortable TEXT fields In the current implementation, when declaring a sortable field, its content gets copied into a special location in the index, for fast access on sorting. This means that making long text fields sortable is very expensive, and you should be careful with it. Also, note that text fields get normalized and lowercased in a Unicode-safe way when stored for sorting and currently there is no way to change this behaviour. This means that `America` and `america` are considered equal in terms of sorting. ## Specifying SORTBY If an index includes sortable fields, you can add the `SORTBY` parameter to the search request (outside the query body), and order the results by it. This overrides the scoring function mechanism, and the two cannot be combined. If `WITHSCORES` is specified along with `SORTBY`, the scores returned are simply the relative position of each result in the result set. The syntax for `SORTBY` is: ``` SORTBY {field_name} [ASC|DESC] ``` * field_name must be a sortable field defined in the schema. * `ASC` means the order will be ascending, `DESC` that it will be descending. * The default ordering is `ASC` if not specified otherwise. ## Quick example ``` > FT.CREATE users SCHEMA first_name TEXT SORTABLE last_name TEXT age NUMERIC SORTABLE # Add some users > FT.ADD users user1 1.0 FIELDS first_name "alice" last_name "jones" age 35 > FT.ADD users user2 1.0 FIELDS first_name "bob" last_name "jones" age 36 # Searching while sorting # Searching by last name and sorting by first name > FT.SEARCH users "@last_name:jones" SORTBY first_name DESC # Searching by both first and last name, and sorting by age > FT.SEARCH users "alice jones" SORTBY age ASC ``` RediSearch-1.2.2/docs/Stemming.md000066400000000000000000000037751364126773500166140ustar00rootroot00000000000000# Stemming Support RediSearch supports stemming - that is adding the base form of a word to the index. This allows the query for "going" to also return results for "go" and "gone", for example. The current stemming support is based on the Snowball stemmer library, which supports most European languages, as well as Arabic and other. We hope to include more languages soon (if you need a specific language support, please open an issue). For further details see the [Snowball Stemmer website](http://snowballstem.org/). ## Supported languages The following languages are supported and can be passed to the engine when indexing or querying, with lowercase letters: * arabic * danish * dutch * english * finnish * french * german * hungarian * italian * norwegian * portuguese * romanian * russian * spanish * swedish * tamil * turkish * chinese (see below) ## Chinese support Indexing a Chinese document is different than indexing a document in most other languages because of how tokens are extracted. While most languages can have their tokens distinguished by separation characters and whitespace, this is not common in Chinese. Chinese tokenization is done by scanning the input text and checking every character or sequence of characters against a dictionary of predefined terms and determining the most likely (based on the surrounding terms and characters) match. RediSearch makes use of the [Friso](https://github.com/lionsoul2014/friso) chinese tokenization library for this purpose. This is largely transparent to the user and often no additional configuration is required. ## Using custom dictionaries If you wish to use a custom dictionary, you can do so at the module level when loading the module. The `FRISOINI` setting can point to the location of a `friso.ini` file which contains the relevant settings and paths to the dictionary files. Note that there is no "default" friso.ini file location. RedisSearch comes with its own `friso.ini` and dictionary files which are compiled into the module binary at build-time. RediSearch-1.2.2/docs/Stopwords.md000066400000000000000000000035671364126773500170340ustar00rootroot00000000000000# Stop-Words RediSearch has a pre-defined default list of [stop-words](https://en.wikipedia.org/wiki/Stop_words). These are words that are usually so common that they do not add much information to search, but take up a lot of space and CPU time in the index. When indexing, stop-words are discarded and not indexed. When searching, they are also ignored and treated as if they were not sent to the query processor. This is done when parsing the query. At the moment, the default stop-word list applies to all full-text indexes in all languages and can be overridden manually at index creation time. ## Default stop-word list The following words are treated as stop-words by default: ``` a, is, the, an, and, are, as, at, be, but, by, for, if, in, into, it, no, not, of, on, or, such, that, their, then, there, these, they, this, to, was, will, with ``` ## Overriding the default stop-words Stop-words for an index can be defined (or disabled completely) on index creation using the `STOPWORDS` argument in the [FT.CREATE](/Commands/#ftcreate) command. The format is `STOPWORDS {number} {stopword} ...` where number is the number of stopwords given. The `STOPWORDS` argument must come before the `SCHEMA` argument. For example: ``` FT.CREATE myIndex STOPWORDS 3 foo bar baz SCHEMA title TEXT body TEXT ``` ## Disabling stop-words completely Disabling stopwords completely can be done by passing `STOPWORDS 0` on `FT.CREATE`. ## Avoiding stop-word detection in search queries In rare use cases, where queries are very long and are guaranteed by the client application to not contain stopwords, it is possible to avoid checking for them when parsing the query. This saves some CPU time and is only worth it if the query has dozens or more terms in it. Using this without verifying that the query doesn't contain stop-words might result in empty queries. RediSearch-1.2.2/docs/Synonyms.md000066400000000000000000000041201364126773500166510ustar00rootroot00000000000000# Synonyms Support ## Overview RediSearch supports synonyms - that is searching for synonyms words defined by the synonym data structure. The synonym data structure is a set of groups, each group contains synonym terms. For example, the following synonym data structure contains three groups, each group contains three synonym terms: ``` {boy, child, baby} {girl, child, baby} {man, person, adult} ``` When these three groups are located inside the synonym data structure, it is possible to search for 'child' and receive documents contains 'boy', 'girl', 'child' and 'baby'. ## The synonym search technique We use a simple HashMap to map between the terms and the group ids. During building the index, we check if the current term appears in the synonym map, and if it does we take all the group ids that the term belongs to. For each group id, we add another record to the inverted index called "\~\" that contains the same information as the term itself. When performing a search, we check if the searched term appears in the synonym map, and if it does we take all the group ids the term is belong to. For each group id, we search for "\~\" and return the combined results. This technique ensures that we return all the synonyms of a given term. ## Handling concurrency Since the indexing is performed in a separate thread, the synonyms map may change during the indexing, which in turn may cause data corruption or crashes during indexing/searches. To solve this issue, we create a read-only copy for indexing purposes. The read-only copy is maintained using ref count. As long as the synonyms map does not change, the original synonym map holds a reference to its read-only copy so it will not be freed. Once the data inside the synonyms map has changed, the synonyms map decreses the reference count of its read only copy. This ensures that when all the indexers are done using the read only copy, then the read only copy will automatically freed. Also it ensures that the next time an indexer asks for a read-only copy, the synonyms map will create a new copy (contains the new data) and return it. RediSearch-1.2.2/docs/Tags.md000066400000000000000000000074031364126773500157170ustar00rootroot00000000000000# Tag Fields RediSearch 0.91 adds a new kind of field - the Tag field. They are similar to full-text fields but use simpler tokenization and encoding in the index. The values in these fields cannot be accessed by general field-less search and can be used only with a special syntax. The main differences between tag and full-text fields are: 1. An entire tag field index resides in a single Redis key and doesn't have a key per term as the full-text one. 2. We do not perform stemming on tag indexes. 3. The tokenization is simpler: The user can determine a separator (defaults to a comma) for multiple tags, and we only do whitespace trimming at the end of tags. Thus, tags can contain spaces, punctuation marks, accents, etc. The only two transformations we perform are lower-casing (for latin languages only as of now), and whitespace trimming. 4. Tags cannot be found from a general full-text search. If a document has a field called "tags" with the values "foo" and "bar", searching for foo or bar without a special tag modifier (see below) will not return this document. 5. The index is much simpler and more compressed: We do not store frequencies, offset vectors of field flags. The index contains only document IDs encoded as deltas. This means that an entry in a tag index is usually one or two bytes long. This makes them very memory efficient and fast. 6. An unlimited number of tag fields can be created per index, as long as the overall number of fields is under 1024. ## Creating a tag field Tag fields can be added to the schema in FT.ADD with the following syntax: ``` FT.CREATE ... SCHEMA ... {field_name} TAG [SEPARATOR {sep}] ``` SEPARATOR defaults to a comma (`,`), and can be any printable ASCII character. For example: ``` FT.CREATE idx SCHEMA tags TAG SEPARATOR ";" ``` ## Querying tag fields As mentioned above, just searching for a tag without any modifiers will not retrieve documents containing it. The syntax for matching tags in a query is as follows (the curly braces are part of the syntax in this case): ``` @:{ | | ...} ``` e.g. ``` @tags:{hello world | foo bar} ``` Tag clauses can be combined into any sub-clause, used as negative expressions, optional expressions, etc. For example: ``` FT.SEARCH idx "@title:hello @price:[0 100] @tags:{ foo bar | hello world } ``` ## Multiple tags in a single filter Notice that multiple tags in the same clause create a union of documents containing either tags. To create an intersection of documents containing *all* tags, you should repeat the tag filter several times. For example, imagine an index of travellers, with a tag field for the cities each traveller has visited: ``` FT.CREATE myIndex SCHEMA name TEXT cities TAG FT.ADD myIndex user1 1.0 FIELDS name "John Doe" cities "New York, Barcelona, San Francisco" ``` For this index, the following query will return all the people who visited **at least one** of the following cities: ``` FT.SEARCH myIndex "@cities:{ New York | Los Angeles | Barcelona }" ``` But the next query will return all people who have visited **all three cities**: ``` @cities:{ New York } @cities:{Los Angeles} @cities:{ Barcelona } ``` ## Multi-word tags And escaping Tags can be composed multiple words, or include other punctuation marks other than the field's separator (`,` by default). Punctuation marks in tags should be escaped with a backslash (`\`). It is also recommended (but not mandatory) to escape spaces; The reason is that if a multi-word tag includes stopwords, it will create a syntax error. So tags like "to be or not to be" should be escaped as "to\ be\ or\ not\ to\ be". For good measure, you can escape all spaces within tags. The following are identical: ``` @tags:{foo\ bar\ baz | hello\ world} @tags:{foo bar baz | hello world } ``` RediSearch-1.2.2/docs/Threading.md000066400000000000000000000236721364126773500167340ustar00rootroot00000000000000# Multi-Threading in RediSearch *By Dvir Volk, July 2017* ## 1. One Thread To Rule Them All Redis has been, from its inception, single threaded - and will remain so at least in 4.0. I'm not going to get into the reasons of why that is - but up until now it has been a reality that Redis apps, and more recently Redis Modules such as RediSearch - have to deal with. While keeping things single-threaded makes Redis simple and fast - the down-side is that long running commands block the entire server for the duration of the query's execution. Most Redis commands are fast so that is not a problem, but commands like [ZUNIONSTORE](https://Redis.io/commands/zunionstore), [LRANGE](https://Redis.io/commands/lrange), [SINTER](https://Redis.io/commands/sinter) and of course the infamous [KEYS](https://Redis.io/commands/keys), can block Redis for seconds or minutes, depending on the size of data they are handling. ## 2. RediSearch and the Single Thread Issue [RediSearch](https://Redisearch.io) is a new search engine module written at Redis Labs. It leverages Redis' powerful infrastructure with efficient data structures, to create a fast and feature rich, real-time search engine. While it is extremely fast and uses highly optimized data structures and algorithms, it was facing the same problem with regards to concurrency: Depending on the size of your data-set and the cardinality of search queries, they can take internally anywhere between a few microseconds, to hundreds of milliseconds to seconds in extreme cases. And when that happens - the entire Redis server that the engine is running on - is blocked. Think, for example, on the a full-text query intersecting the terms "hello" and "world", each with, let's say, a million entries, and half a million common intersection points. To do that in a millisecond, you would have to scan, intersect and rank each result in one nanosecond, [which is impossible with current hardware](https://gist.github.com/jboner/2841832). The same goes for indexing a 1000 word document. It blocks Redis entirely for that duration. So taking into account that in the real world, search queries may not behave like your average Redis O(1) command, and block the entire server for long periods of time. Of course, you could and should split your search index into a cluster, and a cluster version of RediSearch will soon be available as part of Redis Labs Enterprise cluster - but even if we distribute the data across cluster nodes, some queries will be slow. ## 3. Enter the Redis GIL Luckily, Redis BDFL [Salvatore Sanfilippo](https://twitter.com/antirez) has added a revolutionary change just near the finish line of Redis 4.0 and the release of the modules API - **Thread Safe Contexts** and the **Global Lock**. The idea is simple - while Redis in itself still remains single threaded, a module can run many threads - and any one of them can acquire the **Global Lock** when it needs to access Redis data, operate on it, and release it. We still cannot really query Redis in parallel - only one thread can acquire the lock, including the Redis main thread - but we can make sure that a long running query will give other queries time to properly run by yielding this lock from time to time. Note that this limitation applies to our use case only - in other use cases such as training machine learning models, actual parallel processing the background is achievable and easy. ## 4. Making Search Concurrent Up until now, the flow of a search query was simple - the query would arrive at a **Command Handler** callback in the Redis Module, and it would be the only thing running inside Redis right now. Then it would parse the query, execute it, taking as long as it takes - and return the result. To allow concurrency, we adapted the following design: 1. RediSearch has a thread pool for running concurrent search queries. 2. When a search request arrives, it gets to the handler, gets parsed on the main thread, and a request object is passed to the thread pool via a queue. 3. The thread pool runs a query processing function in its own thread. 4. The function locks the Redis Global lock, and starts executing the query. 5. Since the search execution is basically an iterator running in a cycle, we simply sample the elapsed time every several iterations (sampling on each iteration would slow things down as it has a cost of its own). 6. If enough time has elapsed, the query processor releases the Global Lock, and immediately tries to acquire it again. When the lock is released, the kernel will schedule another thread to run - be it Redis' main thread, or another query thread. 7. When the lock is acquired again - we reopen all Redis resources we were holding before releasing the lock (keys might have been deleted while the thread has been "sleeping"), and continue work from the previous state. Thus the operating system's scheduler makes sure all query threads get CPU time to run. While one is running the rest wait idly, but since execution is yielded about 5,000 times a second, it creates the effect of concurrency. Fast queries will finish in one go without yielding execution, slow ones will take many iteration to finish, but will allow other queries to run concurrently. > ### Figure 1: Serial vs. Concurrent Search > ![Figure 1: Serial vs. Concurrent Search](concurrency.png "Concurrency") > > **On the left-hand side, all queries are handled one after the other. On the right side, each query is given it time-slice to run. Notice that while the total time for all queries remain the same, queries 3 and 4 finish much faster.** The same approach is applied to indexing. If a document is big and tokenizing and indexing it will block Redis for a long time - we break that into many smaller iterations and allow Redis to do other things instead of blocking for a very long time. In fact, in the case of indexing there is enough work to be done in parallel using multiple cores - namely tokenizing and normalizing the document. This is especially effective for very big documents. As a side note - this could have been implemented with a single thread switching between all the query execution loops, but the code refactoring required for that was much larger, and the effect with reasonable load would have remained similar, so we opted to keep this for a future release. ## 5. The Effect of Concurrency While this is not magic, and if all your queries are slow they will remain slow, and no real parallel processing is done here - this is revolutionary in Redis terms. Think about the old problem of running `KEYS *` in a busy Redis instance. In single threaded operation, this will cause the instance to hang for seconds if not minutes. No it is possible to implement a concurrent version of KEYS in a module, that will hardly affect performance. In fact, Salvatore has already implemented one! There is, however, a negative effect as well: we sacrifice atomicity of reads and writes for concurrency to a degree. Consider the following situation: One thread is processing a query that should retrieve document A, then yields the execution context; At the same time, another thread deletes or changes document A. The result - the query run by the first thread will not be able to retrieve the document, as it has already been changed or deleted while the thread was "asleep". This is of course only relevant to high update/delete loads, and relatively slow and complex queries. In our view, for most use cases this is a sacrifice worth making, and usually query processing is fast enough that the probability of this happening is very low. However, this can be overcome easily: if strong atomicity of the operations is important, it is possible to have RediSearch operate in "safe mode", making all searches and updates atomic, thus making sure that each query refers to the sate of the index at the moment of its invocation. To enable safe mode and disable query concurrency, you can configure RediSearch at load time: `redis-server --loadmodule redisearch.so SAFEMODE` in command line, or by adding `loadmodule redisearch.so SAFEMODE` to your redis.conf - depending on how you load the module. ## 6. Some Numbers! I've benchmarked both versions of the module - simple single threaded, and concurrent multi threaded, over the same set up. !!! note "Benchmark Setup" * The data-set consists of about 1,000,000 Reddit comments. * Two clients using Redis-benchmark were running - first separately, then in parallel: * One client doing a very intensive query - "i" which has 200,000 results with 5 concurrent connections. * One client is doing a very light query - "Obama", which has about 500 results - with 10 concurrent connections (we assume in a normal situation there will be more lightweight queries than heavy queries). * Both clients and the server running on my personal laptop - MacBook Pro with an Intel Quad Core i7 @ 2.2Ghz. ### The Results: ![Throughput](img/throughput.png "Throughput Benchmark") ![Latency](img/latency.png "Latency Benchmark") !!! note While we can see that light queries are significantly slower when running in concurrent mode without contention, they are still very fast. But in contention, we see that lightweight queries run X40 faster in concurrent mode, since they are not blocked by the slow queries, as in single thread mode. In single thread mode we are only as fast as the slowest queries. ## 7. Parting Words This little Global Lock feature and Thread Safe Contexts, is perhaps the most powerful thing that the Modules API offers. We touched only the problem of concurrency here, but it also enables background tasks, real parallel processing of data that does not touch the Redis keyspace, and more. For RediSearch, it makes the difference between being a nice engine for small-ish use cases, to being a real beast that can handle huge data-sets at high loads. Combined with the up-and-coming distributed version of RediSearch (that also leverages the threading API, but that's a story for another post), it will make RediSearch a very powerful search and indexing engine.RediSearch-1.2.2/docs/commands.yaml000066400000000000000000000024601364126773500171620ustar00rootroot00000000000000FT.CREATE: summary: Set the string value of a key complexity: O(1) arguments: - comment: the index name name: index_name type: key - name: - field - score | NUMERIC type: - string - double | enum - enum: - NUMERIC comment: pairs of field name and relative weight in scoring. The weight is a double, but does not need to be normalized. since: 0.1 returns: type: status value: OK on success, error otherwise FT.ADD: complexity: O(1) arguments: - comment: the index name name: index_name type: key - name: docId type: string - name: score type: double comment: The document's score, between 0.0 and 1.0 - command: LANGUAGE name: - lang type: - string optional: true - name: nosave type: enum enum: [NOSAVE] - index docId score [LANGUAGE lang] [NOSAVE] FIELDS .... RediSearch-1.2.2/docs/concurrency.png000066400000000000000000000526141364126773500175430ustar00rootroot00000000000000PNG  IHDR3K8USIDATxpUչI  %dQA4ƚBAAiIi Ȅ!1PD 5KZUe:^;Kg3)]sryk9{Z{N#B]: B@!B!!BB!B!!BB!B! B!B! B!@ B@! B!@ B@!B!!BB!B!}c566Θ1#==SN)))cƌٽ{UEEEnnmg;v옲5?(Ҏ;[RiscIr- WI,XtCTONN>|xէq.((HKK:~SC:uJWȰUI]~iFFF۷.avqq>[VV?[}}eff*|b*))i/JK[0utY *#KgΜGT-o~~2TUUŬm UU2IIuteeejV'_ ٔm9rc q{1mxsf]* #VAMWj_jG}ܹs!MܪjI&J'O=ԆVuLWBue;tPUv^GUW EVc'z744.}MMRk=ZTT PY˗/&!d7.ڕ7uH^+**څXBSJKKm?^td)rż4ոb_EyyHiU vQ AIvv3c MꯓYk4ҧ,ڧ~ʏhQN40p@@{ӝTk*7[ _XLvRˋf4U[|%.~qшl~)]B2f.qt #Mv_,N4vq bĩo۹GOXహ/ 06( P B_ hay»ϏpT6q-0&-v@$G-Y4 "lHЩHD12ISaTqYx U^]7Yt_xGZmd-vԳjjaώPe] F]۠aaǪ]3J U5S\]l2IKTf> 8g'h I/M]Deda>Z-Up/c>lF὚wH(P:azTlbgn[|aCZIc ' Z>kv j`P69\LM}u8XaZ',ݢxQúo_oomN^g}b ,/|xeoL]*%($* uE,GiϿ r>lb!=M^RGvAxC>Ӄ 'uP~%x nHFKU-[;ȟ2WuJ%G/P+io• HZ3tѷ8l[#֗:~M 9tG|5=:*xi:N><N9HBۈ)^>%nرC!MiS}*G*OeGSϿ\ayu-z5%b,W 뾾%>F8PJ}{Z '˂mRrڷˠ=uVtؿu?b".|1)udRX`FLPʂ_8GŒ5Ɯ5s]m#IB[N'Z*ᑚZRRBBlF4-\ @ B@!B!!BB!B!!BB!B! B!B! B!@ B@! B!@ B@!B!!BB!B!!BB!B!BB!B! B!@ B! B!@ B@!RnwBzuH܆.bرc:a&ۯ?(tmL܆@\L:um6c@` @c 0@` @  0@ 1@ 0 @` @ 1@` @ v+oE\^>N2o  U=髺#v?))Y1@94t]S̯cB1@+6P^Yx=[z5|YBYL) } iw&lnՑY{y,e]O>oR6mR'?{~|Q.>h&@DO, #Vk:S8ma\>ݯL R|OHlJ|0QT<Բu嗇Kt2sR/@DZ(`1s Y{ֳ^K~Z%N'6I5)|rF[I2 /<@DĬycfVIJU۪bm]K#!@!WZm/l'ZXx 0 g7 |t’V|O,QBu9F%H   @ ا|D[~yȶ1-hY g(ƄO^ $<@ 61))ن:ֽW ~~OB e Jl:VD6ly>v.jϪ 0@$ s?)wyKOzCĒ lDEfc;wI  pV,r}睓&_5{D=Ǟ,'6) {B!h鱕){A8 ݿއ!By|>mam<FxE|p:9@ ?Ié@` ZoO>y}˵f{M@ 6~|Q{g̉$M#Fi)" y]a%mO,u]v=>嗇! Ca#OZJyOR1Ipc@ ;"l3&%%[D5V%7;CG\?4^ /@LTˊ@ ڶsXz  8XRQu$iwWʖb ^Rlsٹ 0@m 1_l1'?7YOTp(2a- ֶ) [=" na@` w OFpp8@dְ # @.]tFԳgO1kr 3.V]R¼m0`}mˏ/*[F'!N e !pw|nZ:#a=Ϫm cϫ{>~h)lF3ng|L=@ŰQOuH8{KMoetܥɳY=t&?+~wiJJJiDH'8@ DS\bI==QS'ݟ썝ʠ> ۏrS鳖Y{.b41)=!@ @޹pK7^\чGSr3Ғ@` .w/Y=10@` p{60"ۼ0@` 0  @1@ 0  0@ chQV`^a7rG+fPE%?g  DGO uX߫a9RV @D#񘉷Mh 1 + 6jܭwV  @ 饅oɪ=/Y??))!'6WNu<7|@D+9=*7El23b iu Ko1DV3ٶF3M"@%P[_eo@ֺF‘/P}CNV{`p~lTj, <Ɩ 1J @Ѫ10fګ-NKY (=U?cO) G94;A 4Fp@` @|yEzwm6%|󘉷(<76X;qqz]S^{[w!z@%#BA 5+jQ-^}b[DĤ빸  @h \LBRP6(6PDy*.y,FksqFDb!ఞ 0 ֶb"UZV/PBVPLxw#*Jֽ6"+63=8#"kFޢÇK ._%\p.MSŀL{K8=Q7*(!@]>ITb8P 0 KU髭_9 kBXIoֽے-D|ओOd B:8}@` @7UR^_ˊIII>+e$>nc8hSlJ9=fOU ʌSBCL75  I[D"zsW̼m 0@j';pC@ Esa>0_q:,1@@ c@` @cz3[jW}  %@dʽ} 0@ c  @Wݮmʽ{gk?aV@1 @c 0 @ 0@@`  @ @` 0  @1@ 0 @` ԉx`~+%s؜5‚q*mo7@Dk`MڷwIG9u(JWerrRXn]K@` @Ə)[$۪Xbnz4K,~wBokT޾jEJJg @z.*@ѩzڦcݩ36s8ƺ'Yf0]ٔY{n5Z=s7"@JVض;ia7WWb'2[xV AGtK l)1wlΌ,C浽m }{_y °}xB9 |_PU޵B4~ab۷J>Ën]ZXGQ{61@˖>3 |#3B"l? ND5ؘf^GF71@\rPl.`n]}~3}YTl1fTw1@eva8D$״_ؽ}j@D ,ϭBf ZWU[zGlHDS-"47#@JnqNCTǫڴfU!ow+FPޣa3\rJ!pg @qi'RT'!׭̩C s鴙$ lDE <$ΔۆY3m - ch!Zcs,6#>m)WOC bbS{΅8WZ8ӛM chUX}`?iuz%w#n(,Ѿ»D?Qj7*>;!! (2):/8ʳcFe+g cH^*B@]ZX@` @ƥkUٜ=^fN8qcs&]y_~@1@ 0 @` @  >˗744(w9w@`3gΔ&''Ӻӳ?@ 0 sFDO?ӧO 򋗤%''3f=|8@`~^t  @dɒc :tҭ+@X' taغ?:+@K,3feicjllLMMԴO:@ 0 QBLzȰY)DN>]^^>rHk_-WTTRv&c@` @w88}tUUUqӪ  @Pccc߾};ŕ 0@` @C@`RRRf̘Ac{?|Q 0 Z22ąÇ;w 0@` @HgϞhv},?~ 0@k~WVfÖsxۿyw  Er{ׅW;'M~̯ x  0@tT?4馮=L2J#n[B_O@D{MO?  @rFE~{tAou(TKy=E"އ1r{f,DqLtAo  l"˗'T 0 o`17iȟ>7'`M}ʦd'z̹K}~V} v,:6uii)@`HV_)?fnڵsaǏW}}=@`x1klf'FWn OzIWaaq'lE&DāJJJwΞ4i 0@t$ȓ[fb GvXӪ D 7'#yako} @{) DӮn+il e-!6⚌>14{D m:wI >սn߿w?l]L=>lU/Z { neZk :DR͉. D{y- }'hi&aޣp;@X-;|s@ |ؓe|!   @E/*_* s  0@@`  @-1cL1QDR  0u"+++e  @  0.]tFԳgO 0[ q6@ 0@` @ Weeey޽ 0@p` 0@@`  @@` 0  @1@ 0 رc.P  |*떫 0@` @  Õ4[MNN.**  @[&ߖE}Wo]iK mx2a O>h]RRrpȑ#{9|Gnݻ)<'Zi_4 +3,=Q@$"@|8@`hw~x4ZKJ"qbsZ>R殘@yj9=*k{9XIAڮ>U/,M\X(SQ7s|GhVU+qVo]R%F36M9cmصRTl+dD@$''GDsΕ/7tPѾW!?zmUS?c/<n[B ۪lJX\5Ŷ>8>냸c}ϙl[&g[g0 88???|4 5#lkAZ/o.h=WHϸJrz_1{CZ}m#roQbۿ8WϏN-7_٣AH,hllFuNbzia U%QxzaXI6$1o (xoll֋#͐la#[ZZ[XX|wy41@|C~bLO\Yj-U?A"Zbִ^ AzHJJb&3Q&:@${a/@JEe3n1$|B‡+3B(x0VB;ojw:=$WȽ0a 6㌈yԍv;FWNb@$@8p`̘1~JY^dIc @` @r`c "p ȥx[aoQnU7 ?_FLc>b^,~/ p~NEg~c ~>fxDŽ7B}iYhU4rCw|L!@8qgā*EG;D"6fxKgن'mUla|R/)AsNXGbwa$"@?g:sLqqEn-ÜCRE+ҞޔYq]jT. 7/ռ"bXh@`_TH:6h͍s YYY_~}kF w1EEE gnݺzQ (S;@ 0 8_GDiRJ}}}TicD;ӧ~P^Zn* @` @h78 0  @8u79hac"RRR???СCÑ- ֺ/6fm73vؔkW%liU7wo" 0.,--jMMM?H@+ 2vm-G/ߑ7:FA 'ҪO`d-Ϙ19=4bqv-O%^8S6V T]XΝ;sTWW  6蚲zG߀v]13q P?W k^{[ݔ3v"rEJUƸ|M+@տ&F={V)L (x0NKT-CZĐHL'QoXR˼vG 7d9q-ȽEB..%g4[7YoK@hmqkٟ{ =,[7di׮z}BY3!@(kza OZkJ1IIIfT Vő`:rH V F qذku> C$z,qB= 0h ʺѷ^ #U{*  WIIIXomtoʆ4ڐ#[6*V )Y/eghxTнꅥ 0qUWWhѢ3f=z vLP3XCMPZVm}:==㪪D;'?7oč7~ߧis5ݸ1ݻȇw  D YYwƌ'OG&M][E 1+ȑ, &rzf" |#335L_ݻDoMYpsYӦugO%_}uHhtj@` @_L66~nw_}Cު9s_n*M$ 0 64 풾X|n?֖2[aԩ);[wyYٔ86'iӾwo[+?׬ "Ta!ҿ><83S[?@X~"qB|Рh]]]vU(痔 vڅv_`[ f:z1>[7jADę3gGY\\ @ ڗr xTH={-ViaÏ~dWxo9@h!µ> LA_<>mZ eD""ߘ@ : ƍ  }U{3[kC  @Bmo02dH¾=:m???H"bMyy9@`Ń33xfj&ʣGfggHRrssϞ= @ 0 b̙3|ԩu)ݻ_@` @h7P 0  @q;wa 0 @` @he8vض TCC@`A  0 @ 8qD9sϫ 0@` Ny NNS}}=( @tlu2{`V; @|tm~? 3  @c 0 @ 0@ ֭[Fi X[[ @ 0  0@@ cDDccc څ1@` @ 1@@ c@` @c 0@` @  0@ c  @@` 0  @ 0 @`  @ 1@` 0 1@ 0 @` @ c 0@` @  0@ c@` @c 0 @ 0@@`  @ @` @ c 0@` @  0@ c  @c 0 @ 0@@`  @ 1@` 0  @1@ 0  @` @ c 0@` @  0@ c@ 0 @` 1@` 0 w]U} @` @m;n1Snݻ<'HҖ6yeSf & Zճ>) rCuBvziat9ou#@D==Y9y,epD?_DPP6ܐ5lmղ-<8>ߧPW4TS*@D+_D@L^fBኮ)wO([wØaJϸJ[۷WK9"HOkIe71@}zia U1%lÓR\RjVa -jO_vے@` @ κ'@л%q>f1,Y??`h3Y'=L,A~ ܾG5[G{("d-!@NaOU ʌOc&б' D"u-[֡؜q"K39q匰5'4PvG_9cuxz D"ڇȽE`Mح{7B!U!@]1VmBg)MJD":؈8Wi|GϷ @ $m,9efYX8_g\ꅥ+ @髷.߰k=)  lHf&sk~Zr^@tXꫮ26qff_Ph** Jϸ꩟ϱQ˸!'GzZ OFϊ=w1ΘCqf@ 2q8?@sY3 "9c)/m#$ko{p}Aw)3,U{*>Mޝa3D)EYc+y+1@$kW4ްku).sGMu5?01@ paK70@ p3^饅r~7@ 0 @` @ c 0@` @  0@ c@` @\u`B̩CcFeLNN @Dĩݺj =@>XbL)mVRn3%s@` @ X<{c+f_n?wiHPE2ihImu5VH-@vÎU)/}YYFi @qmwDf{m'"0 sCXTqt"ja%_:s#'>@ J8Ϙ;6Bo6 oli6lCg(eK^ ؿ5 fݰk³sz Q Ghe "?g:uL-@( @ q]uuPGVٷ5>B[ot?^u?[N|QBTF45)}tj8Цzac .47 .ؿow:؀G뿐3z#|=s(CD>bmS11mSv몣?A9 0@aр-m)9+‘"%`–{5~/>@9uȆ2HC\b  O@ &W̵ox(,Az%MJB,N$MlOp{s'!} FEX ƏyE C%hxL?E?@` @DY\;?^Z_rJ @{6IG@ 1@` @  0@ c@` @c 0 @  0@t|=0n4 0@K߻{6q@ 1@` @ 1@@ c@` @c 0@` @  0@ Hc b_&r@'O3-ӗJ\D"/Qig}7 @DwN$xy͚-yɔ)VN VgG : ãwWV~o[*$[b]kϞ,@ Ѫ޲j99p3#aH=#TE/^ @ `kx@|8K,\x>otpyQFeg{/<>mZ>Ep h}4x:g_oܩ (bcJFh|B@B-'"-EcsrުQaS]ݏ}TQ\x7`USc#4v,֧C@ M{v^ %%%ZWW@$r@(pݺvM*rod-v>45 @\ #tQrŋg؄ 0@|3g$''GC޽qΝOV2eHzcFDII 1@`ؿ?1@`ƯL0rYcьS緗b 0 R˗/w 0  @ͫɓEJOO= >1Ʋ)) DMI.& 0@` @$Μ93pUfD۫}O^b#nzݧw>WcV>"@!P @!B!!BB!B!BB!B! B!@ B! B!@ B@!B!@ B@!B!!BB!B!!BB!B! B!B]|2,ebIENDB`RediSearch-1.2.2/docs/design/000077500000000000000000000000001364126773500157445ustar00rootroot00000000000000RediSearch-1.2.2/docs/design/gc.md000066400000000000000000000153671364126773500166730ustar00rootroot00000000000000# Garbage Collection in RediSearch ## 1. The Need For GC * Deleting documents is not really deleting them. It marks the document as deleted in the global document table, to make it fast. * This means that basically an internal numeric id is no longer assigned to a document. When we traverse the index we check for deletion. * Thus all inverted index entries belonging to this document id are just garbage. * We do not want to go and explicitly delete them when deleting a document because it will make this operation very long and depending on the length of the document. * On top of that, updating a document is basically deleting it, and then adding it again with a new incremental internal id. We do not do any diffing, and only append to the indexes, so the ids remain incremental, and the updates fast. All of the above means that if we have a lot of updates and deletes, a large portion of our inverted index will become garbage - both slowing things down and consuming unnecessary memory. Thus we want to optimize the index. But we also do not want to disturb the normal operation. This means that optimization or garbage collection should be a background process, that is non intrusive. It only needs to be faster than the deletion rate over a long enough period of time so that we don't create more garbage than we can collect. ## 2. Garbage Collecting a Single Term Index A single term inverted index is consisted of an array of "blocks" each containing an encoded list of records - document id delta plus other data depending on the index encoding scheme. When some of these records refer to deleted documents, this is called garbage. The algorithm is pretty simple: 0. Create a reader and writer for each block 1. Read each block's records one by one 2. If no record is invalid, do nothing 3. Once we found a garbage record, we advance the reader but not the writer. 4. Once we found at least one garbage record, we encode the next records to the writer, recalculating the deltas. Pseudo code: ``` foreach index_block as block: reader = new_reader(block) writer = new_write(block) garbage = 0 while not reader.end(): record = reader.decode_next() if record.is_valid(): if garbage != 0: # Write the record at the writer's tip with a newly calculated delta writer.write_record(record) else: writer.advance(record.length) else: garbage += record.length ``` **NOTE**: Currently the algorithm does not delete empty blocks and does not merge small ones, this is a future improvement that shouldn't be very hard to do. ### 2.1 Garbage Collection on Numeric Indexes Numeric indexes are now a tree of inverted indexes with a special encoding of (docId delta,value). This means the same algorithm can be applied to them, only traversing each inverted index object in the tree. ## 3. GC And Concurrency Since RediSearch 0.17, we are using a multi threaded concurrent query execution model. This means that index iterators yield execution to other threads every given time (currently configured at 50us). It GC should also take advantage of this ability, and perform its task from a side thread, blocking the global redis lock for a short periods of time, incrementally processing indexes without interrupting execution and indexing. This means, however, that we need to consider a few things: 1. From the Index Iterator's POV - a GC sweep might be performed while we are sleeping during iterating the index. This means that the offset of the reader in its current block might not be correct. In that case we need to do a slow search in the index for the last id we've read. This is an operation we don't want to do unless we have to. 2. From the GC thread's POC - an index might be written to or deleted while we are sleeping during a sweep. To solve 1 we need to detect this in the reader, and adapt to this situation. Detection of a GC sweep while sleeping is simple: * Each inverted index key has a "gc marker" variable that increments each time it has been GC'ed. * Before starting an index iterator, we copy the index's gc marker to the iterator's context. * After waking up from sleep in the iterator, we check the gc markers in both objects. * If they are the same we can simply trust the byte offset of the reader in the current block. * IF not, we seek the reader to the previously read docId, which is slower. To solve 2 is simpler: * The GC will of course operate only while the GIL is locked. * The GC will never yield execution while in the middle of a block. * The GC will check whether the key has been deleted while it slept. * The GC will get a new pointer to the next block on each read, assuring the pointer is safe. ## 4. Scheduling Garbage Collection While the GC process will run on a side thread and not interfere with normal operations, we do want to avoid running it when not necessary. The problem is that we do not know, when a document has been deleted, which terms now hold garbage, becuase for that we need a forward index or to re-tokenize the document, which are expensive in RAM and CPU respectively. So the GC will use sampling of random terms and collect them. This leaves two problems: 1. How to avoid GC when it's not needed (the user is not deleting any documents or doing it very little). 2. How to make sure we hit terms that are more likely to contain garbage. Solving 2 for now will be done by trying some sort of weighted random. We already have a dictionary with the frequency of terms in the index. However running a real weighted random on it is an expensive operation. Thus, an approximation of a weighted random can be easily done by blindly selecting N terms in each round, and then applying a weighted random function to this small set of keys. This assures that even the least frequent terms will get visited. Solving 1 can be done in the following way: We start with a frequency F for the random sampler of the garbage collector. At first it is relatively infrequent or even 0. It can be configured. Then, we do the following: * Each time a document is deleted or updated we increase the frequency a bit. * Each time we find a key with garbage we increase the frequency a bit. * Each time we sample a key with NO garbage found, we decrease the frequency a bit. This can be related to the frequency of the key, which can be seen as a hint to the probability of finding garbage in it. So if we don't find garbage in the most frequent term, it is a very strong indicator that the index contains little to no garbage. The frequency is of course bounded to a maximum which we will never surpass. Thus when a lot of garbage is created, the frequency will be at its maximum, and will eventually decay to 0 or a pre-configured minimum - until more documents will be deleted. RediSearch-1.2.2/docs/design/indexing.md000066400000000000000000000105141364126773500200740ustar00rootroot00000000000000# Document Indexing This document describes how documents are added to the index. ## Components * `Document` - this contains the actual document and its fields. * `RSAddDocumentCtx` - this is the per-document state that is used while it is being indexed. The state is discarded once complete * `ForwardIndex` - contains terms found in the document. The forward index is used to write the `InvertedIndex` (later on) * `InvertedIndex` - an index mapping a term to occurrences within applicable documents. ## Architecture The indexing process begins by creating a new RSAddDocumentCtx and adding a document to it. Internally this is divided into several steps. 1. Submission. A DocumentContext is created, and is associated with a document (as received) from input. The submission process will also perform some preliminary caching. 2. Preprocessing Once a document has been submitted, it is preprocessed. Preprocessing performs stateless processing on all document input fields. For text fields, this means tokenizing the document and creating a forward index. The preprocesors will store this information in per-field variables within the `AddDocumentCtx`. This computed result is then written to the (persistent) index later on during the indexing phase. If the document is sufficiently large, the preprocessing is done in a separate thread, which allows concurrent preprocessing and also avoids blocking other threads. If the document is smaller, the preprocessing is done within the main thread, avoiding the overhead of additional context switching. The `SELF_EXC_THRESHOLD` (macro) contains the threshold for 'sufficiently large'. Once the document is preprocessed, it is submitted to be indexed. 3. Indexing Indexing proper consists of writing down the precomputed results of the preprocessing phase above. It is done in a single thread, and is in the form of a queue. Because documents must be written to the index in the exact order of their document ID assignment, and because we must also yield to other potential indexing processes, we may end up in a situation where document IDs are written to the index out-of-order. In order to solve that, the order in which documents are actually written must be well-defined. If there is only one thread writing documents, then this thread will not need to worry about out-of-order IDs while writing. Having a single background thread also helps optimize in several areas, as will be seen later on. The basic idea is that when there are a lot of documents queued for the indexing thread, the indexing thread may treat them as batch commands, greatly reducing the number of locks/unlocks of the GIL and the number of times term keys need to be opened and closed. 4. Skipping already indexed documents The phases below may operate on more than one document at a time. When a document is fully indexed, it is marked as done. When the thread iterates over the queue it will only perform processing/indexing on items not yet marked as done. 5. Term Merging Term merging, or forward index merging, is done when there is more than a single document in the queue. The forward index of each document in the queue is scanned, and a larger, 'master' forward index is constructed in its place. Each entry in the forward index contains a reference to the origin document as well as the normal offset/score/frequency information. Creating a 'master' forward index avoids opening common term keys once per document. If there is only one document within the queue, a 'master' forward index is not created. Note that the internal type of the master forward index is not actually `ForwardIndex`. 6. Document ID assignment At this point, the GIL is locked and every document in the queue is assigned a document ID. The assignment is done immediately before writing to the index so as to reduce the number of times the GIL is locked; thus, the GIL is locked only once - right before the index is written. 7. Writing to Indexes With the GIL being locked, any pending index data is written to the indexes. This usually involves opening one or more Redis keys, and writing/copying computed data into those keys. Once this is done, the reply for the given document is sent, and the `AddDocumentCtx` freed.RediSearch-1.2.2/docs/go_client.md000066400000000000000000000430161364126773500167640ustar00rootroot00000000000000# redisearch -- import "github.com/RedisLabs/redisearch-go/redisearch" Package redisearch provides a Go client for the RediSearch search engine. For the full documentation of RediSearch, see [http://redisearch.io](http://redisearch.io) ### Example Usage ```go import ( "github.com/RedisLabs/redisearch-go/redisearch" "log" "fmt" ) func ExampleClient() { // Create a client. By default a client is schemaless // unless a schema is provided when creating the index c := createClient("myIndex") // Create a schema sc := redisearch.NewSchema(redisearch.DefaultOptions). AddField(redisearch.NewTextField("body")). AddField(redisearch.NewTextFieldOptions("title", redisearch.TextFieldOptions{Weight: 5.0, Sortable: true})). AddField(redisearch.NewNumericField("date")) // Drop an existing index. If the index does not exist an error is returned c.Drop() // Create the index with the given schema if err := c.CreateIndex(sc); err != nil { log.Fatal(err) } // Create a document with an id and given score doc := redisearch.NewDocument("doc1", 1.0) doc.Set("title", "Hello world"). Set("body", "foo bar"). Set("date", time.Now().Unix()) // Index the document. The API accepts multiple documents at a time if err := c.IndexOptions(redisearch.DefaultIndexingOptions, doc); err != nil { log.Fatal(err) } // Searching with limit and sorting docs, total, err := c.Search(redisearch.NewQuery("hello world"). Limit(0, 2). SetReturnFields("title")) fmt.Println(docs[0].Id, docs[0].Properties["title"], total, err) // Output: doc1 Hello world 1 } ``` ## Usage ```go var DefaultIndexingOptions = IndexingOptions{ Language: "", NoSave: false, Replace: false, Partial: false, } ``` DefaultIndexingOptions are the default options for document indexing ```go var DefaultOptions = Options{ NoSave: false, NoFieldFlags: false, NoFrequencies: false, NoOffsetVectors: false, Stopwords: nil, } ``` DefaultOptions represents the default options #### type Autocompleter ```go type Autocompleter struct { } ``` Autocompleter implements a redisearch auto-completer API #### func NewAutocompleter ```go func NewAutocompleter(addr, name string) *Autocompleter ``` NewAutocompleter creates a new Autocompleter with the given host and key name #### func (*Autocompleter) AddTerms ```go func (a *Autocompleter) AddTerms(terms ...Suggestion) error ``` AddTerms pushes new term suggestions to the index #### func (*Autocompleter) Delete ```go func (a *Autocompleter) Delete() error ``` Delete deletes the Autocompleter key for this AC #### func (*Autocompleter) Suggest ```go func (a *Autocompleter) Suggest(prefix string, num int, fuzzy bool) ([]Suggestion, error) ``` Suggest gets completion suggestions from the Autocompleter dictionary to the given prefix. If fuzzy is set, we also complete for prefixes that are in 1 Levenshten distance from the given prefix #### type Client ```go type Client struct { } ``` Client is an interface to redisearch's redis commands #### func NewClient ```go func NewClient(addr, name string) *Client ``` NewClient creates a new client connecting to the redis host, and using the given name as key prefix. Addr can be a single host:port pair, or a comma separated list of host:port,host:port... In the case of multiple hosts we create a multi-pool and select connections at random #### func (*Client) CreateIndex ```go func (i *Client) CreateIndex(s *Schema) error ``` CreateIndex configues the index and creates it on redis #### func (*Client) Drop ```go func (i *Client) Drop() error ``` Drop the Currentl just flushes the DB - note that this will delete EVERYTHING on the redis instance #### func (*Client) Explain ```go func (i *Client) Explain(q *Query) (string, error) ``` Explain Return a textual string explaining the query #### func (*Client) Index ```go func (i *Client) Index(docs ...Document) error ``` Index indexes a list of documents with the default options #### func (*Client) IndexOptions ```go func (i *Client) IndexOptions(opts IndexingOptions, docs ...Document) error ``` IndexOptions indexes multiple documents on the index, with optional Options passed to options #### func (*Client) Info ```go func (i *Client) Info() (*IndexInfo, error) ``` Info - Get information about the index. This can also be used to check if the index exists #### func (*Client) Search ```go func (i *Client) Search(q *Query) (docs []Document, total int, err error) ``` Search searches the index for the given query, and returns documents, the total number of results, or an error if something went wrong #### type ConnPool ```go type ConnPool interface { Get() redis.Conn } ``` #### type Document ```go type Document struct { Id string Score float32 Payload []byte Properties map[string]interface{} } ``` Document represents a single document to be indexed or returned from a query. Besides a score and id, the Properties are completely arbitrary #### func NewDocument ```go func NewDocument(id string, score float32) Document ``` NewDocument creates a document with the specific id and score #### func (*Document) EstimateSize ```go func (d *Document) EstimateSize() (sz int) ``` #### func (Document) Set ```go func (d Document) Set(name string, value interface{}) Document ``` Set sets a property and its value in the document #### func (*Document) SetPayload ```go func (d *Document) SetPayload(payload []byte) ``` SetPayload Sets the document payload #### type DocumentList ```go type DocumentList []Document ``` DocumentList is used to sort documents by descending score #### func (DocumentList) Len ```go func (l DocumentList) Len() int ``` #### func (DocumentList) Less ```go func (l DocumentList) Less(i, j int) bool ``` #### func (DocumentList) Sort ```go func (l DocumentList) Sort() ``` Sort the DocumentList #### func (DocumentList) Swap ```go func (l DocumentList) Swap(i, j int) ``` #### type Field ```go type Field struct { Name string Type FieldType Sortable bool Options interface{} } ``` Field represents a single field's Schema #### func NewNumericField ```go func NewNumericField(name string) Field ``` NewNumericField creates a new numeric field with the given name #### func NewNumericFieldOptions ```go func NewNumericFieldOptions(name string, options NumericFieldOptions) Field ``` NewNumericFieldOptions defines a numeric field with additional options #### func NewSortableNumericField ```go func NewSortableNumericField(name string) Field ``` NewSortableNumericField creates a new numeric field with the given name and a sortable flag #### func NewSortableTextField ```go func NewSortableTextField(name string, weight float32) Field ``` NewSortableTextField creates a text field with the sortable flag set #### func NewTagField ```go func NewTagField(name string) Field ``` NewTagField creates a new text field with default options (separator: ,) #### func NewTagFieldOptions ```go func NewTagFieldOptions(name string, opts TagFieldOptions) Field ``` NewTagFieldOptions creates a new tag field with the given options #### func NewTextField ```go func NewTextField(name string) Field ``` NewTextField creates a new text field with the given weight #### func NewTextFieldOptions ```go func NewTextFieldOptions(name string, opts TextFieldOptions) Field ``` NewTextFieldOptions creates a new text field with given options (weight/sortable) #### type FieldType ```go type FieldType int ``` FieldType is an enumeration of field/property types ```go const ( // TextField full-text field TextField FieldType = iota // NumericField numeric range field NumericField // GeoField geo-indexed point field GeoField // TagField is a field used for compact indexing of comma separated values TagField ) ``` #### type Flag ```go type Flag uint64 ``` Flag is a type for query flags ```go const ( // Treat the terms verbatim and do not perform expansion QueryVerbatim Flag = 0x1 // Do not load any content from the documents, return just IDs QueryNoContent Flag = 0x2 // Fetch document scores as well as IDs and fields QueryWithScores Flag = 0x4 // The query terms must appear in order in the document QueryInOrder Flag = 0x08 // Fetch document payloads as well as fields. See documentation for payloads on redisearch.io QueryWithPayloads Flag = 0x10 DefaultOffset = 0 DefaultNum = 10 ) ``` Query Flags #### type HighlightOptions ```go type HighlightOptions struct { Fields []string Tags [2]string } ``` HighlightOptions represents the options to higlight specific document fields. See http://redisearch.io/Highlight/ #### type IndexInfo ```go type IndexInfo struct { Schema Schema Name string `redis:"index_name"` DocCount uint64 `redis:"num_docs"` RecordCount uint64 `redis:"num_records"` TermCount uint64 `redis:"num_terms"` MaxDocID uint64 `redis:"max_doc_id"` InvertedIndexSizeMB float64 `redis:"inverted_sz_mb"` OffsetVectorSizeMB float64 `redis:"offset_vector_sz_mb"` DocTableSizeMB float64 `redis:"doc_table_size_mb"` KeyTableSizeMB float64 `redis:"key_table_size_mb"` RecordsPerDocAvg float64 `redis:"records_per_doc_avg"` BytesPerRecordAvg float64 `redis:"bytes_per_record_avg"` OffsetsPerTermAvg float64 `redis:"offsets_per_term_avg"` OffsetBitsPerTermAvg float64 `redis:"offset_bits_per_record_avg"` } ``` IndexInfo - Structure showing information about an existing index #### type IndexingOptions ```go type IndexingOptions struct { Language string NoSave bool Replace bool Partial bool } ``` IndexingOptions represent the options for indexing a single document #### type MultiError ```go type MultiError []error ``` MultiError Represents one or more errors #### func NewMultiError ```go func NewMultiError(len int) MultiError ``` NewMultiError initializes a multierror with the given len, and all sub-errors set to nil #### func (MultiError) Error ```go func (e MultiError) Error() string ``` Error returns a string representation of the error, in this case it just chains all the sub errors if they are not nil #### type MultiHostPool ```go type MultiHostPool struct { sync.Mutex } ``` #### func NewMultiHostPool ```go func NewMultiHostPool(hosts []string) *MultiHostPool ``` #### func (*MultiHostPool) Get ```go func (p *MultiHostPool) Get() redis.Conn ``` #### type NumericFieldOptions ```go type NumericFieldOptions struct { Sortable bool NoIndex bool } ``` NumericFieldOptions Options for numeric fields #### type Operator ```go type Operator string ``` ```go const ( Eq Operator = "=" Gt Operator = ">" Gte Operator = ">=" Lt Operator = "<" Lte Operator = "<=" Between Operator = "BETWEEN" BetweenInclusive Operator = "BETWEEEN_EXCLUSIVE" ) ``` #### type Options ```go type Options struct { // If set, we will not save the documents contents, just index them, for fetching ids only NoSave bool NoFieldFlags bool NoFrequencies bool NoOffsetVectors bool Stopwords []string } ``` Options are flags passed to the the abstract Index call, which receives them as interface{}, allowing for implementation specific options #### type Paging ```go type Paging struct { Offset int Num int } ``` Paging represents the offset paging of a search result #### type Predicate ```go type Predicate struct { Property string Operator Operator Value []interface{} } ``` #### func Equals ```go func Equals(property string, value interface{}) Predicate ``` #### func GreaterThan ```go func GreaterThan(property string, value interface{}) Predicate ``` #### func GreaterThanEquals ```go func GreaterThanEquals(property string, value interface{}) Predicate ``` #### func InRange ```go func InRange(property string, min, max interface{}, inclusive bool) Predicate ``` #### func LessThan ```go func LessThan(property string, value interface{}) Predicate ``` #### func LessThanEquals ```go func LessThanEquals(property string, value interface{}) Predicate ``` #### func NewPredicate ```go func NewPredicate(property string, operator Operator, values ...interface{}) Predicate ``` #### type Query ```go type Query struct { Raw string Paging Paging Flags Flag Slop int Filters []Predicate InKeys []string ReturnFields []string Language string Expander string Scorer string Payload []byte SortBy *SortingKey HighlightOpts *HighlightOptions SummarizeOpts *SummaryOptions } ``` Query is a single search query and all its parameters and predicates #### func NewQuery ```go func NewQuery(raw string) *Query ``` NewQuery creates a new query for a given index with the given search term. For currently the index parameter is ignored #### func (*Query) Highlight ```go func (q *Query) Highlight(fields []string, openTag, closeTag string) *Query ``` Highlight sets highighting on given fields. Highlighting marks all the query terms with the given open and close tags (i.e. and for HTML) #### func (*Query) Limit ```go func (q *Query) Limit(offset, num int) *Query ``` Limit sets the paging offset and limit for the query #### func (*Query) SetExpander ```go func (q *Query) SetExpander(exp string) *Query ``` SetExpander sets a custom user query expander to be used #### func (*Query) SetFlags ```go func (q *Query) SetFlags(flags Flag) *Query ``` SetFlags sets the query's optional flags #### func (*Query) SetInKeys ```go func (q *Query) SetInKeys(keys ...string) *Query ``` SetInKeys sets the INKEYS argument of the query - limiting the search to a given set of IDs #### func (*Query) SetLanguage ```go func (q *Query) SetLanguage(lang string) *Query ``` SetLanguage sets the query language, used by the stemmer to expand the query #### func (*Query) SetPayload ```go func (q *Query) SetPayload(payload []byte) *Query ``` SetPayload sets a binary payload to the query, that can be used by custom scoring functions #### func (*Query) SetReturnFields ```go func (q *Query) SetReturnFields(fields ...string) *Query ``` SetReturnFields sets the fields that should be returned from each result. By default we return everything #### func (*Query) SetScorer ```go func (q *Query) SetScorer(scorer string) *Query ``` SetScorer sets an alternative scoring function to be used. The only pre-compiled supported one at the moment is DISMAX #### func (*Query) SetSortBy ```go func (q *Query) SetSortBy(field string, ascending bool) *Query ``` SetSortBy sets the sorting key for the query #### func (*Query) Summarize ```go func (q *Query) Summarize(fields ...string) *Query ``` Summarize sets summarization on the given list of fields. It will instruct the engine to extract the most relevant snippets from the fields and return them as the field content. This function works with the default values of the engine, and only sets the fields. There is a function that accepts all options - SummarizeOptions #### func (*Query) SummarizeOptions ```go func (q *Query) SummarizeOptions(opts SummaryOptions) *Query ``` SummarizeOptions sets summarization on the given list of fields. It will instruct the engine to extract the most relevant snippets from the fields and return them as the field content. This function accepts advanced settings for snippet length, separators and number of snippets #### type Schema ```go type Schema struct { Fields []Field Options Options } ``` Schema represents an index schema Schema, or how the index would treat documents sent to it. #### func NewSchema ```go func NewSchema(opts Options) *Schema ``` NewSchema creates a new Schema object #### func (*Schema) AddField ```go func (m *Schema) AddField(f Field) *Schema ``` AddField adds a field to the Schema object #### type SingleHostPool ```go type SingleHostPool struct { *redis.Pool } ``` #### func NewSingleHostPool ```go func NewSingleHostPool(host string) *SingleHostPool ``` #### type SortingKey ```go type SortingKey struct { Field string Ascending bool } ``` SortingKey represents the sorting option if the query needs to be sorted based on a sortable fields and not a ranking function. See http://redisearch.io/Sorting/ #### type Suggestion ```go type Suggestion struct { Term string Score float64 Payload string } ``` Suggestion is a single suggestion being added or received from the Autocompleter #### type SuggestionList ```go type SuggestionList []Suggestion ``` SuggestionList is a sortable list of suggestions returned from an engine #### func (SuggestionList) Len ```go func (l SuggestionList) Len() int ``` #### func (SuggestionList) Less ```go func (l SuggestionList) Less(i, j int) bool ``` #### func (SuggestionList) Sort ```go func (l SuggestionList) Sort() ``` Sort the SuggestionList #### func (SuggestionList) Swap ```go func (l SuggestionList) Swap(i, j int) ``` #### type SummaryOptions ```go type SummaryOptions struct { Fields []string FragmentLen int // default 20 NumFragments int // default 3 Separator string // default "..." } ``` SummaryOptions represents the configuration used to create field summaries. See http://redisearch.io/Highlight/ #### type TagFieldOptions ```go type TagFieldOptions struct { // Separator is the custom separator between tags. defaults to comma (,) Separator byte NoIndex bool } ``` TagFieldOptions options for indexing tag fields #### type TextFieldOptions ```go type TextFieldOptions struct { Weight float32 Sortable bool NoStem bool NoIndex bool } ``` TextFieldOptions Options for text fields - weight and stemming enabled/disabled. RediSearch-1.2.2/docs/img/000077500000000000000000000000001364126773500152475ustar00rootroot00000000000000RediSearch-1.2.2/docs/img/favicon.png000066400000000000000000000151241364126773500174050ustar00rootroot00000000000000PNG  IHDRa]iCCPICC ProfilexYgXK.sI²%K JPPP$$HE @EEQ1 z|뿰_ᾐMx.e=9!p 0oz.w}F"a, {cNppK滏_tjbGD2`PŮ XU`/p d%0F2aN ̋A Cap03~p(l?cN*t2<.o׺HOj[bWok7 %RD P( P\@RGtQZ0OװfmSswo.p-M?,ԑ[@o`A"_4,"+MRWe9v?~=AlQPmq_48:^MgxNDGчڽ ߳"PZ@s` +8O $4rA8 J@9Ah7@'x90~ b8!~H!uH2,!;P(J2\$TU@P+tꁆ1 -A__$`A"Dru>؏GD$ 2ňJD#:1XE$- )A# H72A!+ r9\F0(f %^#:JFJPQQ} j&yRhM폎Egеk~c"aÈa0{1@!LӍü¬bXNVk%cYسF8vFCKOHcBFJNSDsf-'Y|p|\57[mbxm>/7Ohiii5hmiŴi.ЮC!pPG& (2A̐PpaaQњ11;&,(1S&S]WHf!fCf ss5s?" EŌ%%eeUՉ56<M͌--m;/>/{6{38On=_8IƜA'8op>BqIrrrZfppq x$yxT ˻Ƨwo_{+IL*&Vx D Tl : > ZNn)*&,zD;113Dq] u s$*R)U)91itt AF_&FAfAMR6]'9a97rr*s L  _%)JD%v/RʾgTUTlF6. yMۨ@khhtjkjFii~֒ Һn={^i j+uH:^:tutɺ/|jK7270fP0ɰidjc4bdh\bDߤdTi^^'NQV̓,%/-%-#,;VVVO wXYZ?9hsckc[jN.nО|9Gqh^'z'zF']\\rR]ݰnNnn=T<d 猎LWM7deEdM:R~uzt$[)lvO\ܢSZ0uBœ'N**~t*ӞD/,n?+|fI@RҖ2첟|΍;\[[LiJʢ*LUL՛jZڭкv/\o@4D7,5z4>j2jjoihakɽ .G_~:f{EJUeט\__pcݵ}kdou tf߅ڹpg;{ǿUg]}}#L޹}sHs}7>>2|k##GFi<35;3a410i6cSS33>3?2314ó<+_HhW`0+ʫ#_o.f!)z%G/~c'OW?}^qYYek7ouߕڬ>cgu_οnnb7$:-섓#ȿHE!\?9o 8]`;AD2%zxbs4@"~vPNG/axT˜f™ugwGJ.):+K[RG[:C^vTE9WUuLQSRdvNUFƲ&F{͏[lozw{ȁ"*&衹L9S?HD  94qi2S A33S[{, /_.ȢB>>7q]?kelnEowtdDxtմАqLZpxΌ~1Ieu6G;܍dmkf'o9,9;rqwMpuس_'k<}RSALNKO?t(111PrBJ|j5'>Efs(:{RfCyx0:\0eiTXxքǤc㹩Y93ZzYjrQM;ApۯiW~~^qoK>A#>"kt4yhhJq:yZE\29z;Z~L ,(I8v+~U\q<ּ|,R@6j-ؔ"#BKQVq]U9T Zp.Ա%S 244a13 Eun#Vl~Қj#kݶ.0xy弫'x 2eo_E1Q࢐P0p/"z"1V qlq/jK,M:j. e~9&kO_s~>NO2b?UwFXXdL9jZt*+-(i5]u.5(764]koۼ~M7+::oMu~"{g߇=p>kslpbTLlgގ}]oqjKkF]xA J:Q׏l8hC?PpW=G:K^c3D)@PއVD хx@"cȧ( * V<,ν1"L3Va񠩧ۋ+}ś+[nB9шHFFޓ~6*c+,S3 ^V 65I~No.RE^y)~q RBBω؊bEbŗ%%ĤK7Dj!|Jʵ* 6jjmǵkKt>N_0622214٫al`!o)oOZFV1)ɹƵm}u?MOqrWq_T@JPSusP&&J2Vk<&nbArpG{VƜg8N^+&Xe﫠yɾ5ʫnI>ۍM[L>82>&4A~?g/R^~·Ə.Q+_]V[Y~ mfl? @ WH@G*Bx ڀ\":H~2هFibQ7Pkh-t C8a*akcaiiipZu;V6!0C4'vѩҵK7001j212-0GаTjގ3{1"3\Ǹyn&im. 5%DyXikIY;!fSIJTegSU 5YuQ &nm~]=5}#C?|S{ΛYZvY {fmc`T2.a?@ۂrV@"N*2tB(qxES/JXKH"ZɈE>$!g,dkI)"bd+Vע.^l4j|7oyס!F2'RL>!=~rAekߛw%?|D}R콒oV~4]#ur~G_?}s*2 CP%4xtш&;(yRB%~:/9uhqD!'<օvNxI !nK0Po312/T)mrp:rpq[Dم(Z /"! $e!MɖmTUUNViP}NuzO~AciK{?+Y$YcqtvNwYp3tُ;9EaK N ^ 1툗IJN*JaN-Lg(9,xT-{ )mni;+_rL\gᅇnUK5 uċU"[._is}MVGS.;C=w}h|_uz82zn:4:<5WLyV- ,=8I|1:!T P627/!4J[eԯfUE8t.Ռxؑe!Tt5 X̝ ٖmcŴPq.&SB\]#, ZU-a߯hz4JJ@`gY)24Qu݀iĆ,& ZPz|2wڢ1P`ܣ5#X\7ŒNM -T76QL^73`n ^ +nضZq\t$SOl6ٿj _l󞩚wh8H+}=;wD "˔UB e>{[SOGwpd\ͥB`yg*Q}_HUWm/,- tb53Uů@ztد.蜤eR,IENDB`RediSearch-1.2.2/docs/img/latency.png000066400000000000000000000264761364126773500174330ustar00rootroot00000000000000PNG  IHDRXsm-IDATx xTٿmk[kmhm?UhWJV֥i@HH!@$D E$ Be,d!>O_{df&:e<+({0|Exe_UUU[n6env[SO=EU^xAZrɒ%\0rxK_R``֒bO<;/~_WELEEc==6rP ~[?}u͛7 cˎiW^yƪe ~0Qw;}7INޟtp+^.]|HN|SzWuܫ:+_~唔'Əof-]cXdddFF9U/%kvAyZL:,3w\-gy榛nr¨Q5^BܬmΞ=["X?4.}wu9(h V 4m}ٿX_Cc7oV4]__竓#rss5sT"fNޟ;lXuիWDРtƌjk9ovKʒi?.ou&<Ӗo|.'_kg3a#R%, Jߚ`pD衷 ۭV/0(LWXa]k_S"6G?2w}{wLt۩!r-eʘoi|tM,"TVU'"I}vOݍݠTͨ:"O_u!1)¢EԸrJ}7꭮u\it&]v活]:Fg "%Piϩ]jtW 4彗[o:ӔzM)4K/u%ǍxZJUOӄ]]JW_}*'OZneܹsվ{nl۶qwٱsǴ|IMbHTkbzF*ЛQ;=uDا>T믿NtkT-']?{1cǎ?<((hȑ5_x/B-`=lMJKKbCoc=aP<娨UV)vu #11QE.9>LoVWW?s#F>S0^wRcǬi^-k֬w]v!ܱhYnST-_\o~UWGE(ܝ:"SUWDx7ߩqԨQ?O]?::ۺ0loo!B񀇵%Du!<"["iIYYYPJ0yYU}J =e.r*_+Q"n kt{?bwu7[MLԱsrrr4ˑ.H;VW$-E(ܝ:"Si5ۭ(„uc]y衇/_lC6kK6MzHG<Ã#B tFF % < &Z~L6LkS*-[c7t_WCx%oE?88ش[*Pte漼<󸐻ylW^I[5Ğ;&뮻?nFU؞QxpzyZDh~PL=yuM:K.Qb=b6ikX 'xm}+_хޚ5k~=lrFi,VW_}2U.Y$??_ox竤1c.MF0(Dd|34#F(}0> TRXѣ}Q^zrdII}ݧ.LI}xZ=Lo~O {kbnymKK]wݥD?q9YSmM0(K=;#==ݱWVyڵ~ccˊ?y E(:%םwީz´AX7ݿN?W->*BWT*3l_uQϾrd֭*=ʮ8st]qe@0بJJJRyLHHꪫ@XX 8F! ^xx^G4?tXrrrFV-"顇)( BD!"@ BD!"@n{ w=ux```~~>;܈j˖-3g|Lϛ7OB: glܸqj/))1[;BΜaQQRJϟo}$VYY9gY,T߿?88H"tU8`\nEլrJ7Y\%KHfZ؝5ɓ''%%Zƺh~s#B8"Ǐ8qCǚ%;2dg=SVVL,X 99YE*6/Er]':}gt|f~&W%כga\[şF'}O4R}"B_gqI{nY˓|;`0x3 ՗*=oߎ`qĉe˖Y/D BD!"@ BD0,hN]Sԝ:? ! _ θ"?AOwW9uMuju&MtxoԼc7_՚;FFFJx?v֭n1mڴ[z߷={H9jaӆD8{l oŊN"tlG&$$Hx"tl?[ZZ/_>a„UVuvvQ[7GQK]]k6~xm';;۬m۶sʾզ2..nܸqSLIOOW˖-["""U{`ZN .3gnܸwE5uM6555pFԩSŋvچITrjyytMM ",xz "³-B)Lnzp߾}*˖-KJJ2"ܵkmUef͚ߏ">aADxEܼrJpGV&] KݻגeHH&TS yfDX+ "³-Ev-N;r'”hhhk+**Ǝ[UU zeADxVE3f8HMMDeP&L0oL3R 9|pAA7o5$OXU8`\5}˗"ܿpp]~~MfXdI}}}MMd݉Pɓfe DX[ "|β2UǏ_`Arr*?g'*Q@mY"'OT7vX|Р\DX[ l.k߿oƛ'"B,oƵ!6~Rǡ/>`5V?g+/6T|HX[K~{="D ΢Hlo+}ElJZָn^]WS9׿Ѽu"D tx%’Wt=ґcJCۉBDS֫W_o~EV#lǏōk!B@"4?붕}GK>UUk! B5oI۠{Fv,EvAD[DS3thdc{>+q? "D~(²g>UտۚҤYߩYyX!UYOwm)y;r3Ң'r"D#B "@! BD!"D"D"D"B@! B@! BD!"D"D"D"B@! B@! BD!"D"D"D"B@! B@! BD!"D"D B@!j˖-3g4,*.hmN;p+VCׂ$DDM 8 =sXwy֛ej|8$Oo1{ݻ5kw I%e77ȡ/0GLK I',,ڕ:8ݿ9nᆊXP_{wocFsUu" !"7zImSW]SWꢊvY?ǾTmW" !"CZ9ks1 Uh'MI B/o.iOo6Pmay$݃ ߊȂ{fASV'Nv{ B""@ke""$ѫ; mz/+J9 w@Exu5)ue7sZģ?i1""$o:viƷDBD!"׊p1Syk9-; BD==o*qVm\HBD!"[3Te-_ "ڲvX oğo#!"BO<֞LR.Wʉϴ}; BD"}zFFf۽{wxx?1"""33}+WD;+**bccǍSRRb5w͈!q_I"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"BDHBD"B""@"@"@"@"@"@"@"@"@"B!"D"B""$!q@;"D$DDH!"$!"B! wDI BDHBD"B""$!q@;"D$DDH"$!"B! w@I"DHBD! B""$!qD; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDI"D; BDOBܐQ@^~&pYM۪mA!"DZZ;졯8s.W9!"D&ĽVm2 [{ABY! BD?!|2fyhB/d?H3"D!"τxD=Tۜڷ:i_Nݯ!"D%ʺsv7z^19%"D!"Hhކ޳=ə"DobWwϳ1_O>ԞW~掚Nڝ5 ("D%w68hǁƖ_ =Yp ُ82!"D$DDHEXTT؈?%?Oη^_+]И_Rm_}iudžSOM-XZy5Ĕ-Ev{xxxvvv{{{bb!"dw! ҈3]]]$snAD04Dk;;;l6"DC=!!aNNܹstWWD6Pq@} '~ܕmp"P:wtt}%-i$3]UU2P[nmm$Ĕ|CC"F2*"""33STW^rв " ;3`KK`l'D,8@X#X|QX499 0aGG'' |NX _v F!"@ BD8f' aCf̘>% 2 ɤIԮnhhim;))I^xq}}osܹ999 ! tAAA]]]؎7"N:Wtt1~3g"BD>|xʔ)}UahmmU, =vشi+BՈ.' .ԮDeN+B"@gYMNiZ.33ӳŔ)SwyIeee`qqj}{oP;v׿4sk.-J:ryj[wոsɓ';6*++CBBtQ%x㍤$#={ȅ gmjZT}+>*Q֭Vn6% $! *@HB,$aɞ6d2$Llwf [< @p @pP8@pP8(@ဳUUU< l2(܏~}p |򉱤!,,ꫯѣUW]Y__o^g?ٛo)կN{z?Ww~=S4v];jnn>-^x78yd]_rzhk׮x'?IϞ=o]=O;Gowզ)//_;hΝzo߾A.C]6l0ƣ{.\?ӧN/˪vؠryZn矯!.44{sհ/y1=wy^B/׿[lV{?˗kGR'&Nׅ{;xwNI\6t[!**kmjj=^.0[μƍDTeU;lPp_kY~;iiMll9կ <=zp8U8mtycuao~B,o%#ձZ]zR[o6~ZnR=^5X {̙kLb.*(( hl\xڴiot;W_}Iھ毺޽{5Npwml܁J=|0;;h}1j'$$h73ׯ6v3fA5r=.Ķnj^;뮻4+&v7Y~v8j}.wiݽ_^xᦛn=^8oܥ4f 0`ժUok6Κ5k9眣mی][VPzy5ݩ*\D'4eX'MӚ6|޼y㗿zfqgpg;yz.{okG]6q5k֐)lm3~oƷd:͝O/?HMtV^ܮFg^N_wu:u֚X.ڷp.C^k6lؠ_7md^rZ~zСĊ~h]gkG}9|N7}|W_5 _uU"{q`X[tk:q7^q9;vOcaÆMw}M7i|YY'^j[wf@<}ץpg;yz.{fxlvµi5>ZryݥvڥͼqFנkFKGn_Oj=(crr.idl]$!:j… m[2)))^I].͛92Fߥ׍/^ؼCO>iY/xS8O^{K.sι[}.&l~zexZHZ_~ά4j]3۝<=p g <lvµi5ooR6[4rYاOo.rJmfX W^y:r8~Fl\Ӡ5˅EZ` 7'nK,a9zs8iÍ;V#Ν;w[ݻW`ݬVnͼdKKνuZKism۶x?<3f.%%%dҤI"V[wfߥ<p6Mf)\YBOMtpjo*ڥo_tEM?AlnĆ͵< z2UWWg΀jm֯_?{ߛ5~~OxY8뵞}YM<ݗ >gϞ>~R89cP9tz94iZWg͞ӭʪ9Pjjh~)(l.YlֳǺ0((sU* OSHtK.uyӧOuE*Æ ݙ_}\YnڴI\p}zYGw'l)y<=.˯ޯ3ߥ/k_ꪫzqW*??HaRugeoaOyPk^F[ gs#6le3(Bd'=,js^{Lu\siuDO!#=:>}Ġf_gyFCMֿ[FvG)N g57>LG*zF?1_|.zIlwrӖr)]~~55??]^O7Svk4_ve:"n۴uisߝ0ؗ_~9 Cl߾}/_iӦz ?ɖ`Uu(?1b퓎ܝɓ'_s5 ^gϞ{㏽(\KKK~}Y v*==K.q)(~?@ @p @pP8#M;<)) t:JJJ:p---z,X0sLspI;wn\hf74692hРe˖L0Af_+\VV'pu)3'sF҉HcaYYYHHHڽp'NtиqtcǎMOOi6zhcpEibcc hF+@n.T~%pi֡zSN5O6dԩS͊+)K'OT*@]\t*MMMR8MrWZZjQ-'''۷o |X5oy5s:֭kS^צpYzBMF=f?;p:">r¶qF&z0&&&!zоF4ќDٺuY8]ʣGoB*6999իW{_8O׵)ܒ%K^soiIZZZTTԐ!C&NhŜc&m]h4h5?;v _U 9^ٳ'$$Dõs8T8Mx^V?W#u]MEG싿2{ذaԘgp~L<Iaa^ԩSW\əs{]Oۿ믢heQt@`i 9g̘}t|ڤ4K9Yp @pP8@pP8(@Dݮ͞~v\.<<Q8p wرe ׬Y3z1cR8nɒ%+V<[s:Ç/++3 ܳg4hP^^Yr1cƨmQQQ[ngrz½ٸ3fl߾ݯ= >oak/ Jo WPPQ7 n]82eʲeǺubbbEFFjabb۴__?^¡bԩC8qa¼<+7ںpp((= ΤCyuu4'ﭸ=f*wnͨo^caܣZ@՟p|po*9ăf,y,teMSZx6~yɪi/L9v)-|bDFEMGfLWA Jr ^ɶ.78wsoL8HNM-d.81jQcsQYepO[vq4g=i=ηyjp/qsE/J.s ?|)iʨď s/ڲ;6nNKwq[{\np=ydqZFR>-]\xEٷ(5ʼ'^M P8 nj,H~c2NV5[1j§;iFO PJxcw쇅uZ'+U%CAj:KaN,0irӫt {8>WݖYY[{;PWL_y`0?}ot=\Ĉ 㛖.>`A P8' ǿiP8Q8p(@(@ G P8 P8Q8p((@(@ G P8  SP8  ppp((@(( G@P8ppp(@(( P8Q8pppp((@(@ G P8 P8Q8P8pp(p0~͍ JHHlBQ8' Js:aaaiii#))iܹmZP8 Jm6gΜ+((4*++ iBQ8' W[[JUVVԔ8! l P8 Dᒒu,\zzz\\qnSSUWWv|T; 6m_.???::tZ zfzyp/ٳnݺuEEEJKKCCCupOKi2pEFF:i!@(ࣅܪۺpp((@(@ G P8  ppp((@(@ G@P8ppp((@(( P8Q8pppp(@ P8 P8Q8ppp(@ G P8 P8Q8p(@(@ G P8 P8Q8P8p(@ G P8 P8Q8p((@(@ G P8 P8Q8P8f۵kWTTСC'O|IcannntttPPPBBBeee[\iӦi KKKs8IIIsmBQ8 wᔔt^^&s:QPPi,,++ iBQ8 g~zt"33366X]@@@cc pWTTtzzz\\Iݪ~a;>@zc/ J W^^czfzyp(ሎ޵kH9tiiihhh_)S_޺tjJ%&&Ο?M  G/\VVVeff~*cbbr6.BQ8 ppp((@(( G@P8ppp(@ ppp((@(( P8Q8ppp(@ P8 P8Q8pppp(@ G P8 P8Q8p(@(@ G P8 P8Q8P8p((@(@\nc3gUŽp$nGBC}CvZ G =6,#aY۞Yy ;'o=5}L#.uϵpO]?p]pui>>Gʊ=[>_xϋ<|9(\Ĉ~avowXܝ+ksFeWpϗG-^p+αѧokinps n2vߵkIŅ/gPA(\W(\I?4YgKdˏ]u)~5ksz^p+Ί9\.\ͦOZ!Y rr/pP8 G( 7/{*l&4ٜ殺vVWF^/ptFGG%$$TVV%@sꕉ>xo}BǾԣ˿;Y^nZ8p8Ν۵啩'ȴ<7*+`*:<= իj$/k:~>kwI?,o) +((4Nt6_>{Mj߼{ͱW15rV^ FG6ە;KB_찝qUXtCCC@@@cc#y#oq wMMM*\]]];)Sz:/v eDwo#oSPng4(ћ;SmiJ_-0nhYC7v;_e w; 8Nz] WTTn.-- m=>Py /#ZƠ̼ pt{[:&6ݨp:LMMաMbby߼u‘7FM^^^LLpr555䍼Q3(y;KLw,\#oYyp7 w#ogCyyy~{ݴp䍼Q3.y#ow9JF( ͤ‘7E揅#o‘7F޺`٠QvHJkm\>y=P.7 w _ycO{ypqkk~7'TUU GZP21o vO o}444Ztg555$µOx9 ojw G7P8wN|7 @ @Ẽ2pmۦ%cmwjjj/uZhGTWW..]!$$dƌ徹qqql/P8̦3o gRN8axm/,[lܸqp!;;{ȑ毻w޷o_CC ٸq&[#FYŎ=:v+Vݻ722rذa:u֬Yc V0k֬h7x)h;V}k :yRmW=C4iRii)[-kllԍh(DgF?o}/ƻWfK:0HxbO.[pl۶hF(8ׯ n:]Zʘխ rc݅ԉd ˗/xKɌix:pi ~$!!¹܅us{*uE->|dddL8µ/MoصkԩS_L%n7vZuT8[P8P8A!--?\x}ኊ ibŊ˗i u8߯*F490BKmmΩSg^СCG4s)7Tkxpnw'  dee)W4iJMM/9299Y!O] WXX0ti4dȐ &̮Ҕ4]2))ة233Õŋw{/{ ryGpht֯_o~p~/99YG:*![logo.png](logo.png) # RediSearch - Redis Powered Search Engine RediSearch is a an open-source Full-Text and Secondary Index engine over Redis. !!! note "Quick Links:" * [Source Code at GitHub](https://github.com/goodform/RediSearch). * [Latest Release: 1.2.0](https://github.com/goodform/RediSearch/releases) * [Docker Image: goodform/redisearch](https://hub.docker.com/g/goodform/redisearch/) * [Quick Start Guide](/Quick_Start) * [Mailing list / Forum](https://groups.google.com/forum/#!forum/redisearch) !!! tip "Supported Platforms" RediSearch is developed and tested on Linux and Mac OS, on x86_64 CPUs. i386 CPUs should work fine for small data-sets, but are not tested and not recommended. Atom CPUs are not supported currently. ## Overview Redisearch implements a search engine on top of Redis, but unlike other Redis search libraries, it does not use internal data structures like sorted sets. This also enables more advanced features, like exact phrase matching and numeric filtering for text queries, that are not possible or efficient with traditional Redis search approaches. ## Client Libraries Official and community client libraries in Python, Java, JavaScript, Ruby, Go, C#, and PHP. See [Clients Page](/Clients) ## Primary Features: * Full-Text indexing of multiple fields in documents. * Incremental indexing without performance loss. * Document ranking (provided manually by the user at index time). * Complex boolean queries with AND, OR, NOT operators between sub-queries. * Optional query clauses. * Prefix based searches. * Field weights. * Auto-complete suggestions (with fuzzy prefix suggestions) * Exact Phrase Search, Slop based search. * Stemming based query expansion in [many languages](/Stemming/) (using [Snowball](http://snowballstem.org/)). * Support for custom functions for query expansion and scoring (see [Extensions](/Extensions)). * Limiting searches to specific document fields (**Up to ~~32~~ 128 TEXT fields supported; Unlimited TAG and NUMERIC fields**). * Numeric filters and ranges. * Geo filtering using Redis' own Geo-commands. * Unicode support (UTF-8 input required) * Retrieve full document content or just ids * Document deletion and updating with index garbage collection. * Partial document updates. RediSearch-1.2.2/docs/java_client.md000066400000000000000000000026611364126773500173010ustar00rootroot00000000000000# JRediSearch - RediSearch Java Client [https://github.com/RedisLabs/JRediSearch](https://github.com/RedisLabs/JRediSearch) ## Overview JRediSearch is a Java library abstracting the API of the RediSearch Redis module, that implements a powerful in-memory search engine inside Redis. See full documentation at [https://github.com/RedisLabs/JRediSearch](https://github.com/RedisLabs/JRediSearch). ## Usage example Initializing the client: ```java import io.redisearch.client.Client; import io.redisearch.Document; import io.redisearch.SearchResult; import io.redisearch.Query; import io.redisearch.Schema; ... Client client = new Client("testung", "localhost", 6379); ``` Defining a schema for an index and creating it: ```java Schema sc = new Schema() .addTextField("title", 5.0) .addTextField("body", 1.0) .addNumericField("price"); client.createIndex(sc, Client.IndexOptions.Default()); ``` Adding documents to the index: ```java Map fields = new HashMap<>(); fields.put("title", "hello world"); fields.put("body", "lorem ipsum"); fields.put("price", 1337); client.addDocument("doc1", fields); ``` Searching the index: ```java // Creating a complex query Query q = new Query("hello world") .addFilter(new Query.NumericFilter("price", 0, 1000)) .limit(0,5); // actual search SearchResult res = client.search(q); ``` --- RediSearch-1.2.2/docs/logo.png000066400000000000000000000437621364126773500161550ustar00rootroot00000000000000PNG  IHDR,HbKGD pHYs  tIME  5 IDATxy|\U{4)T:uj{ 6?g3>q$O.BS@I@@:b0f%`Z%ڌ0Y4%>5#k@=j1H00A#0 K@ D%3Cpkڳ߾zOY훌K`:.k5jfwW0\6/Hyc;C,,a-zrt^Xʌ ٳćIAFh06A|_;;ng%;%]>p_rO2JDtD3ЌB:c^SeSa4`7Bv;\Ž,,aݘ$ڷ󀻀IGd1){OCc ^[u֚K&RR !}̓Ǐo8HY,-۽Iġ{ FS? b1iCa8-h*;{kI"õw/ymEqx8<zO~l箧ۑ8" Mw+$##g4og'OԞ-ܗ{}=hc]@ipcb 7A{%y{I=[WI03,&!>|`N.U'g3;{OdDKj?gզ,nQ0I5]ϞvH,a }=]vXYǁASNgh k&.vNRzˁϵC$_wv>}l%i=锨F' N"JMFWӍr3ݽ'Xš#=;{67i 0ⷁ[1X,? Ao 8-]8lhq/oދ8xVv>s̎r#VǩsОW_,2,3$10&1{k qϱ>Zj Jk/]v;d#J#ӟD8؄(MMBY( \Y, [Dv$ 2BLUtV Z$h :$I{d|vbˮG~Y r{o0@߮.XZ%{M_OnীG7!& 0Q,vTK+ށS@;Pedf-uPUуă.?O/ \X W=%@Xvu#Stx0hp]_@n۴WM/o+ Q}WZAN@W*Z$WIlLjt?>jھ]~\TA?2NyL5NJ]w߱m Rڙsv:@%8rA+xgћ_a%+wDt!Mس5)]Iym? qVE67# b͌j=Kt ztҽJ5no?H*@)i~I9߂jm3a\L_a_}dxAM9r`Ol!B nr?KZsq'qS߇ n̕ >{'> ҺX  }h0 2H{ LTs3!V[i/FѕJ`*_ߺM!XH:ml}Yz CU"oxﺟⷼzVҋM/33kX9&za;?av?}#lH~ lo!0AIVqmXi%K& qg!Jin.Gc1OM-54fbwdž#+ѥu r7S;t3>Yv8V_Ofy##:U{2A忾t5V onhwo_ڽ#շ >7ӵݬߵݚ~TL>./]H#aĞ:s7zX$|ƚwJ3o F?O/wQ=:ַ{3m)9%oշY!b:RyS%VrS0Os~MDw:Z)AZ | (&{_ӆ>!X`mR xj{]VBw om-[ CVVXַ}a֓Td_`,h_Ozg j.kWNz phVA7X[,m0Hŧ=ŊN POW*?Ÿ e{C?bd18y{XKLI1Ct}vs5Lz|Uo~,fuC֍qOw[̑IhWCW?6+;,X (;(6ْF6XX[PmΪV:saH'w+YjXiݪ5KVs tȏ^!v5IJeugK] ~'IBa^z+9ʟ/xCQJ +֕$ܪ1,8_ i%bQ^(r<%`8V]vXXBP|܏e츼C[̂$T [5MqŞXMijYhs|G:`fBXJ-x,m J-dy `&@7(/DR VҰ; =D \8A |أ bkqmaQ+1 DjX[p6eLԻ2JâSm|ºDYfCXZ,|52naQwHgWH)g{=S Bc 4,gYX/Hb 1bg |+V`#+ǬD,F `c!V:3$,r+%c ߃IXhBp:"&, @!8Q4̝)!N>Y[b^ξhEUOdFtJk&!@5Ip=>ї|J0q̕9vL5JgƓax XºZ|R"|34q;6PaK炀dhfkCPEJ$"G{5- 8|g?jmo(#.81j}X rq*!iƠG9sO=2b%˗8_KK2<0&`b V*7;Ȫ=r*2V3'͑W␆+c XoSo~O2_qƞ斆;=j%_*54}X DbA<0U*_OL P397$85b5Y:ZasS1:w?m+9!;@2<:o&H.P}kz9{#+1 l]VJMZbm,Nkb *X麋6VwC'}+}7M!lI?'?G_ /4ws p9 DFOl`Xg*25P-m~khﷳa>? as)Ӿ%y0GANN$lCG쌘vbA,m>!dOufDtwb1 r (\zPꗑMMQEItsO+5Ը$ƠGNZ~&> Pd.>mcc8m݆k=} ±u;$CTߩ>Ht>$CȦ洐Y~JbJb!%V`^7E"=B1oý3"<w }>翐=x۶/o *7|z&CLaq~vofvlnOXs!Ԍ/s~H 6Fߵﺟwæ$(R [SIIcLa2 de&p>[{T]XMF1/ftہ~zů?Ϲ']GXoFs2)\5OI)&1*VCJk^j܁j+#Q8k[j5 3*%KΜ&t=>F2PH bpwW=]t#3U*|~/,~5?-u\}l *u4Ki#gkpVFQ6T{;+ A8-+h`$Zxp=PY -*E<䑿IQTCbcpSb:"z ˪ؾfi_ؾv4yfltIp ףX!R'tPMEߺ{O-@_OݽK:RP08yd.D!eqY(7}=]GɊYfװm5תzFIX1AKuhQJ!X{X$8ۿ-ؿOw^ymSà!4-Y5 -ts\ E6M'G>qNTel1uzJHIZV xJ= 9Nnči@s':d&iʁф):=J~'Lk4آ4_**)HKj >,0{u$/aGS36T$KaȉZ 4)dTLrg)3nLf¼2Ssoq!$鎛6&hs\V{MJXO =Ń{Ybog9t.huiM@kWƩimIb@㲡PYEw .ޞþ=7!bog9hUK8cIlw;yպ e[K0hg<1|׾dbogy $ưXd_vL#Ðajb-7ˮKpeݽy4$aWs3m!Sċa` %k<+ČEPG{ wV967E^Rƒ 4 u `뱱P@eVjF7=Q8g ;M\úJ4#1[aĥ0`]; з%STJy·!gfhaQg=1EZc#gO@>4_Lw[V@6WlWۛf}W4Xd%jw821b_`z*`jXC7#v@vp\&AvPB0\BֶłWb -ʡuhsF8|Hwoߍ4Qy:BnVM-jh.!g`u ],+eK4.vfY$%wf|zx3+Кa0$bܒX_)JA?qQPk+ 6](28%H6溬v}\)1U06rbސTV|0!p:N.Ky޽E;{ET>`h`]g_"6z&MboÐӵ⚢yq ([ Mb ?`|5 fs r]: E!TJ1\C.G!Dp|A XXyxVw$Ƅq#.6NK EZ]rC`k=OU\bF$&LF;u,;,up9 bbLZ [6lPgZw ILYt 9vOFCH{99:C%"Fx'Nsq !lp1 iRM~׍lՒ;ߡ(f&ĖB$ƴKb6YYL0 !PbI`JGKdUi)n)@!"mfG:-,Xz\ZOM_|ydž Da&LtJJXy8raړM MB5T'Tx͔&ӓu:tYJ$%%(EA XQ(d4Ӥmz8Ri# !ĸS<+q412CMkN5.+]-3"iCH3鎟hjP qN&|aNO3ij)ˀ()JQ|ݢ!oZyt.:\p9p |TIٰ c_ž.JU+ Da~BDTM =gÀ3aB.hU sPq^5?iH1G%:;4Yunu,fbb &hV-CsvV_BТڛ\*c ,EkI7p> 8|" p.q1jݾ&\pZwSb EhuGu0_rҽ#1hbsԄݒӿ߶AFfi{30$%EvLNq'{L&(3 qps) ^r'1xR8t8.{ XH7EZ ap߿cu!#Äfabuq8mЯ% -|aD^^)Г;m _\ybBOMTQBd _z q h@qVc| Pd i|i X{wl^:{zό6xޔP6۾.oW148 `qV%zI.輌xW*ˤ΂pW+I|)iw\xA)+s&КX%ܞPe'cp](b8%T(w7V(6y`ETY Kwnz ߖ@5)W:\O%E^0A Ad 4: ʮ6{58xBm?ݵʶbsAZ:8IzϟPmDV\p.+Q xBP|Rd QZ=4fd!6^\ VpkVǥ$!'s=.^@Y("+Qa,!s16C -NHR$h. XPk$a0gNl6H0l TX74kCqp|L!Xz<\fK^KqZyr]XH#X:#$$\RU,Pj|H5gQ4כ;v7"Vzq.<>ȗT}!l?e k٠`-Y SCrX=l$FQD%i=׮Xq67\!V,єsӳʒ F$TWO)BLt&6@'R&7ᘜ66Έ#DqOK-ȱ$!w)Cz\_*0Wa̔LiD%ekZ~dbc Ri9XZߣMu]0 `98 5I,q>?Xcu\՘¶bwE'`,9VRIe3F;u ė7SIwiJLĵT' hR\ILz Oe9:hky4LZ*קq()U7>8r2ZRǍO9Nj D71;8^0nLf%$9e'SwQ> u])p]'sOKp1q6ql*B_,k#1ʹ(gZ 9c$e1Zi "y7wS*cIBlF=ǽbog*JinQ!`(8YQMesh(ep]՞OS窇)Fs) E(mQ$=VNZMJyFYy1 9U #$%k<՞Obt4Ghp&ӺYyMH$L6ɢ`sOK u8ͱcRʞf4NeHO;絴DAJ$0Pqn'gW 3&Pq.cqY+Դ@etksc2Mk6cDpɦFVrx7 YP3S*UElʮz@IIS5.G!* KqYP`ߑaZ6,ygCuRNVk\‰`^;S~YJύQBh`1n 26סuYzHQ6c(sИqm95ѽ<|jMNjZsR4$*c1E FdJ+s z#O{c㘳A:gH ߑ*I0rZ⺁ZP*=!^{;;N0uzY(Ή/*SIX`Mqճ/HkU+'ɒ9w'cPb^Z)3!$a<w:p`,Rhcj='--,fAW@k'k47Ok.`p<*hwԤx+=VlvcO = l.XsQpI8S #b@d@hRBǝf&CQĩFU%lIk6t8 h}e wJ[gK*WBd4UXyDۓ[4>,rK/d]b_Q%zi)+=Rͷ֤Eez][~`ϝh3xB5XB츬}ZTAhLڌњb* bcYMRe= Y ac(*5 _k"1;)T'h(d[iSrrG|R4)YӵD^MoQoRY$Ll.P&\JKF;8 )ab8xW j6@{ an5Wʐu81;jϣ)aUk\ԇ0aSJ8k1˖b-M8p&qS4 n*ϣ91y])-J^j"F㈱$]\*&4zG3 E !+\ףXϕ*J1G1cIRϾ'$T(;.i,BILE'[zh(w`rh.!W8fmMȅ3*d1<6 S$sWZjq}0ї@ AsiVksf2x+ ? վZ gyTf,*:T˥?|-\ +%ʡQ4IIh 烀1\"o ?_#%8a$ObƓNX1!5,ʮBJRJ{vhj\ CU+! kFQO `hV _XN$k>|ypihKW,:Yg7kI6Kܬ6b G18+zhcPRu);.ckw6&N^#y_MtHg-r%L4禶 G}hβ/Y`| PeLTI9 0qnJy%ь#qؤX4APyBMBҢ&G!EYf_N*ln39EU'66l,YNF=yl}%1G*)>YC^b +]5O(Ѹs* MUv-D96&UEj`Fbf?ѧ0k1ZTik%)9a &s9g .G!KLqX*|+ j2ؖ9~l($3+ҫ=6ǡ ՂU3K&S3")FЙ &︜js,T)MR'歎IJPb\њI|,K^s4IYRb>Rp=RMϴԈJSAx|SN ئ^W ~Gl#$í67#if2h$Qȹ bj.%,zsHRsѨ@E'[\n7/쒡^eRiv^)XyhU,=s֬}y>wf(xzSԉӿ^V<@;hrr9c"cpej:3kWfݘ]f&=Kd+&_F_J)"cWk\icogql2bӒVZ~ȏǓ3a+au^JW&hU. iZb4]!M"q@~.]4I E&4/٠:R2GWԴ^mujS 4bCB'N~g>$'&>9c7 !\ BO|)iJ󘚕3qTo,4.$Jq) `|8+\rD*Pv;G 1#q<.$@Sئv95kŶ Hi&hqZUZWȚ˃"cBK|bg{dG8a0Mb2[<|r]j%Iܛ3#HkF]뙚=j ieYQS\烐saX<(6EJYydӍt6ߙI24hå(rMr]5v,? RljT'UeZ7%d+КJPM u03kZvag_a@CKbxw`O*\%P b1z"91Ȥ?96iG*o u6!iy|s^^$O-I =KB`t\kODKiXAh4A$5Ĵ⶝IU 1D5gÀ0%U_U"-~(k ylsI7KIJMNZ`j)q]$LTҌϓ'$a,I\?2[AekGN xgǷ?v gLklsJl%d,pM(1Ȓ,S4mJd <'eL&r5f AgDy7CE'MbFY?5cIZlǥZ+Ɉk_u^@h+Uƒؚ _nbCQ*Vy2~}b)CqPA-xkx?Y(iÎ|B AA*Ӹ#]k5".BObyഊ5WB)&2u<%k\絴rwDAJ+Fd{#'۹b?^ [,(`c)pN8ugs)!qaJK(K j~`FNK,c ɷ=?o޴ֽ+|Л2X(sQJ 6zE9}T4,ٴ@6anq/LqvOS޻﷢XHsQ7|:Εi#cck"clHȦB^}ώ/b명hM6~"m3hb!C)IUBjZV[B5Gژʑ_s| 3&oCNM;3gXXD%%Yt._)6鄋A`Mڛ`P<6R^g& A- =Qx0 hBv' VDeH+D! %%R,Ҭ7c44a}dSo<5>嵽_@;c\("A߉_ZZ_r9 'jE>jc_`|7yd^xe1AVY9<:\cWQ A5#q̥0`8ؙOuYy*Oie`(~tc]eJ\\t ) A.)|)Yy}n82C%\B.!Ӱen kMQ)V{+\Oʉݱjw;2Jb\2mHshQ? "uX 4 4!żij糤͎3DLQIW?>7d:vlcECI)'uRBPӚ8-qs9 tJ ?@Q*ZIr(HEQ* JI*KCS^ӭE)ڤ1-ƈ+=oڼ8kIORAXn]k7 $!І$iY$`d˓qhqTܩ_rgIDAT4oi|`*tR6c=FpRk"}\`Cc%uDf1ȆUn&0EhBn le3!y|S}$#7ے콗g0GaiAO[)6ȩT}|F^mK : e_M-a(1,a"l呓#3ǻZ N0070&3by R,LRk@;߸+nB987B+h*TBBC"4@_Zڇ$"'T\TCT/-D8sBb̜;qƞ|4>{KZ{[`f%)2r). \:~+??y){Z)߈{=˓8N,~-nkc*gff2,e]s{ 6ʞ͒3{ 9@v9Hٟ'0UO81=EدEiN"wX.]ؑoKWVZNMOSU,Z_KIA:#q-Y.>R.?ƌHKYp9i슆s`)-@8zrPYC) /7}"t7͛kmm4֒\`)x [7ArWPM^m8N p5sZcZ`o]UTx?>)zݍY[2Y4]VYc6 SIJtcjl`)c{'sE\T΍ tf]MW j\zrVeVf*osČ zѥFX`~,EaZ<>;D,Y5Y~e r̉oQ|>#,FP;k󳢬6KX<ǹF(+(~PQ;7K~:+σ ^j3îBl*Xl;_[,2cUdQ#=Q榋}9SԨƵE'y}/XUơ8Ge X\1ShAU,9!]Vh(kXHm&8Fz{ p[@.E_7a)zz(v{^ |3Q<?Ue1[2-/㝌_Ԭtt,^RhJ(?ؼE(< \n%Nox3Vkψva)JRǠO_QooW7Oc}N >Q/PR7:WǓ VLѐZ?a ڮ?=[[`)J 2le 8y8kWxx3w?J3#u,Eiaɸ7s#U^ 퉛nͱt6$0 <Ӌ,A9vSRpHȂ}9(aF6/}umZVpֳ2j|`CR=*X"0m::`FmIENDB`RediSearch-1.2.2/docs/logo_small.png000066400000000000000000000104031364126773500173270ustar00rootroot00000000000000PNG  IHDRP@6bKGD pHYs B(xtIME $IDATxkpTՖΣn1\ 7Bx!*:?MiiJ 3ީҲέ(έR?8RrP !DCHC?O5snIw:`wUI}w7%͊A)_ L~2~M& pƛG0pTwB L~0>M)?X x5Jz!R/| Αp?MD^IԈHQcfeDd0?xFٖǔ/U~[hcI#ȳc`YgYlo! tZR[3drˀy_Yñ{\(J?&iԗlNs&tDddNN:N߲ea*b4x`}<aot@ %" Yj y#*pteSF$fPL?ڳpm.4DdB 9j'TXM|3ݲP^UJYXK)1DsJ")̑z&"yty!y7[@|Pˠm"R8gMojF믿QF5jc3g4{od|?hx| ̵H҄x[!*09r#G4mg`HDwޡ9 ,NH*bo8]SJY#""r8,jZ2g*++% vx< `ӦMR`0ȼyx3#nxk/Ja:/p'4^Қ aX,uRoD7ݻԩS;*X ]Yf ~W K*\C&6ue {x_& ig"[l4E"򨪪 87  ͎;Kx`ײJ͛ǔ)S~n@WJV'N_`A?yGQLpP^^̙3)..&??d{|FZj(ڣ@ ЗgΝD"t]Op88LBII EEEnrssbB!/_… pE***Xt)bxM)RjbZ~硇ꮮ|666r״O3 0lPN'M&L&.]B4{a뺎@u""´iӸ8qE47J8%Jy aX[[k844˗/ֆA` ^4q8T G(tmٳ1cyyy#># RQQJ4M0 hhh  =NA"ƍk`0H p8p\FYǽfͲ?ᅬiiɳt(H=x޽{8δ4('Do+ W^y;qĮk^g?'Oip%JBVJiZիL63gٷo.\$w~?)DQVVFEE`9]bi`jɞ"p u dܹa:::n_#D"HW8GaΜ9)?|N:EGG.˞)?e$J)-[ŋIc_~ICCan*q*j*^oRMm޼9[)իY|yZF9~8tvvkS2Mh4adee]~VA?LSSB!;9N (((`̙̟?X8BuuuA bSNG%+++#9{,tuuB]sN"B,#''lxm1uTJJJ8z(ǎA߮t"wkH}}s")yVUUq]wiZZni]]]v@w8x^;餥{EVVVziaƍwmg!`tСC[lsIrw+2^b=OD dϞ=C+5M# GEEUUU7j >\|M|IHcR hӧxbJKKFF___|ץe/MӘ5kidihhѣ\r2&Ou p:_={vTVJ(v1) 'p {Ê\Ā,nêU콐t4۷gڻ7JrGmmoݺ7ZL."ϟί\[X5%Kd}}MMMvi*U+Ѱq2/eeejժUO{[ZZ6-[xg_iovĬ0}qbdIYV{w9+9p}}}DJe]Y;w.K.rYpRꡌuVn7gܹS-UJ=$"Tr骑"rL)U85bSҥKtttk &vhg,'Lٲef|Y)JEdRj\̈́T__+.H;iiھxsi%X{&L`ŊiBRe&-\?^2b!)xSuuu |֮]˫=t( CnJVXqzb1^{51 /67o6pwĿ|_&F,X+WRXX8l]>-B]1"ڵ'OK/Y@zM7L Ôl2f̘m0ӧOdv.sD_LgNMJjUDäIlCOOMq>g`*ٶmۯ wU@5MKGPY[ 6+*R3+yYNCd*x?;y7JRJ=|OE4Ro rjjj~i0Le̦֭M{:' IENDB`RediSearch-1.2.2/docs/payloads.md000066400000000000000000000047261364126773500166420ustar00rootroot00000000000000# Document Payloads Usually, RediSearch stores documents as hash keys. But if you want to access some data for aggregation or scoring functions, we might want to store that data as an inline payload. This will allow us to evaluate properties of a document for scoring purposes at very low cost. Since the scoring functions already have access to the DocumentMetaData, which contains document flags and score, We can add custom payloads that can be evaluated in run-time. Payloads are NOT indexed and are not treated by the engine in any way. They are simply there for the purpose of evaluating them in query time, and optionally retrieving them. They can be JSON objects, strings, or preferably, if you are interested in fast evaluation, some sort of binary encoded data which is fast to decode. ## Adding payloads for documents When inserting a document using FT.ADD, you can ask RediSearch to store an arbitrary binary safe string as the document payload. This is done with the `PAYLOAD` keyword: ``` FT.ADD {index_name} {doc_id} {score} PAYLOAD {payload} FIELDS {field} {data}... ``` ## Evaluating payloads in query time When implementing a scoring function, the signature of the function exposed is: ```c double (*ScoringFunction)(DocumentMetadata *dmd, IndexResult *h); ``` !!! note Currently, scoring functions cannot be dynamically added, and forking the engine and replacing them is required. DocumentMetaData includes a few fields, one of them being the payload. It wraps a simple byte array with arbitrary length: ```c typedef struct { char *data, uint32_t len; } DocumentPayload; ``` If no payload was set to the document, it is simply NULL. If it is not, you can go ahead and decode it. It is recommended to encode some metadata about the payload inside it, like a leading version number, etc. ## Retrieving payloads from documents When searching, it is possible to request the document payloads from the engine. This is done by adding the keyword `WITHPAYLOADS` to `FT.SEARCH`. If `WITHPAYLOADS` is set, the payloads follow the document id in the returned result. If `WITHSCORES` is set as well, the payloads follow the scores. e.g.: ``` 127.0.0.1:6379> FT.CREATE foo SCHEMA bar TEXT OK 127.0.0.1:6379> FT.ADD foo doc2 1.0 PAYLOAD "hi there!" FIELDS bar "hello" OK 127.0.0.1:6379> FT.SEARCH foo "hello" WITHPAYLOADS WITHSCORES 1) (integer) 1 2) "doc2" # id 3) "1" # score 4) "hi there!" # payload 5) 1) "bar" # fields 2) "hello" ```RediSearch-1.2.2/docs/python_client.md000066400000000000000000000307161364126773500177030ustar00rootroot00000000000000# Package redisearch Documentation ## Overview `redisearch-py` is a python search engine library that utilizes the RediSearch Redis Module API. It is the "official" client of RediSearch, and should be regarded as its canonical client implementation. The source code can be found at [http://github.com/RedisLabs/redisearch-py](http://github.com/RedisLabs/redisearch-py) ### Example: Using the Python Client ```py from redisearch import Client, TextField, NumericField, Query # Creating a client with a given index name client = Client('myIndex') # Creating the index definition and schema client.create_index([TextField('title', weight=5.0), TextField('body')]) # Indexing a document client.add_document('doc1', title = 'RediSearch', body = 'Redisearch implements a search engine on top of redis') # Simple search res = client.search("search engine") # the result has the total number of results, and a list of documents print res.total # "1" print res.docs[0].title # Searching with snippets res = client.search("search engine", snippet_sizes = {'body': 50}) # Searching with complex parameters: q = Query("search engine").verbatim().no_content().paging(0,5) res = client.search(q) ``` ### Example: Using the Auto Completer Client: ```py # Using the auto-completer ac = AutoCompleter('ac') # Adding some terms ac.add_suggestions(Suggestion('foo', 5.0), Suggestion('bar', 1.0)) # Getting suggestions suggs = ac.get_suggestions('goo') # returns nothing suggs = ac.get_suggestions('goo', fuzzy = True) # returns ['foo'] ``` ### Installing 1. Install Redis 4.0 or above 2. [Install RediSearch](http://redisearch.io/Quick_Start/#building-and-running) 3. Install the python client ```sh $ pip install redisearch ``` ## Class AutoCompleter A client to RediSearch's AutoCompleter API It provides prefix searches with optionally fuzzy matching of prefixes ### \_\_init\_\_ ```py def __init__(self, key, host='localhost', port=6379, conn=None) ``` Create a new AutoCompleter client for the given key, and optional host and port If conn is not None, we employ an already existing redis connection ### add\_suggestions ```py def add_suggestions(self, *suggestions, **kwargs) ``` Add suggestion terms to the AutoCompleter engine. Each suggestion has a score and string. If kwargs['increment'] is true and the terms are already in the server's dictionary, we increment their scores ### delete ```py def delete(self, string) ``` Delete a string from the AutoCompleter index. Returns 1 if the string was found and deleted, 0 otherwise ### get\_suggestions ```py def get_suggestions(self, prefix, fuzzy=False, num=10, with_scores=False, with_payloads=False) ``` Get a list of suggestions from the AutoCompleter, for a given prefix ### Parameters: - **prefix**: the prefix we are searching. **Must be valid ascii or utf-8** - **fuzzy**: If set to true, the prefix search is done in fuzzy mode. **NOTE**: Running fuzzy searches on short (<3 letters) prefixes can be very slow, and even scan the entire index. - **with_scores**: if set to true, we also return the (refactored) score of each suggestion. This is normally not needed, and is NOT the original score inserted into the index - **with_payloads**: Return suggestion payloads - **num**: The maximum number of results we return. Note that we might return less. The algorithm trims irrelevant suggestions. Returns a list of Suggestion objects. If with_scores was False, the score of all suggestions is 1. ### len ```py def len(self) ``` Return the number of entries in the AutoCompleter index ## Class Client A client for the RediSearch module. It abstracts the API of the module and lets you just use the engine ### \_\_init\_\_ ```py def __init__(self, index_name, host='localhost', port=6379, conn=None) ``` Create a new Client for the given index_name, and optional host and port If conn is not None, we employ an already existing redis connection ### add\_document ```py def add_document(self, doc_id, nosave=False, score=1.0, payload=None, replace=False, partial=False, **fields) ``` Add a single document to the index. ### Parameters - **doc_id**: the id of the saved document. - **nosave**: if set to true, we just index the document, and don't save a copy of it. This means that searches will just return ids. - **score**: the document ranking, between 0.0 and 1.0 - **payload**: optional inner-index payload we can save for fast access in scoring functions - **replace**: if True, and the document already is in the index, we perform an update and reindex the document - **partial**: if True, the fields specified will be added to the existing document. This has the added benefit that any fields specified with `no_index` will not be reindexed again. Implies `replace` - **fields** kwargs dictionary of the document fields to be saved and/or indexed. NOTE: Geo points should be encoded as strings of "lon,lat" ### batch\_indexer ```py def batch_indexer(self, chunk_size=100) ``` Create a new batch indexer from the client with a given chunk size ### create\_index ```py def create_index(self, fields, no_term_offsets=False, no_field_flags=False, stopwords=None) ``` Create the search index. Creating an existing index just updates its properties ### Parameters: - **fields**: a list of TextField or NumericField objects - **no_term_offsets**: If true, we will not save term offsets in the index - **no_field_flags**: If true, we will not save field flags that allow searching in specific fields - **stopwords**: If not None, we create the index with this custom stopword list. The list can be empty ### delete\_document ```py def delete_document(self, doc_id, conn=None) ``` Delete a document from index Returns 1 if the document was deleted, 0 if not ### drop\_index ```py def drop_index(self) ``` Drop the index if it exists ### explain ```py def explain(self, query) ``` ### info ```py def info(self) ``` Get info an stats about the the current index, including the number of documents, memory consumption, etc ### load\_document ```py def load_document(self, id) ``` Load a single document by id ### search ```py def search(self, query) ``` Search the index for a given query, and return a result of documents ### Parameters - **query**: the search query. Either a text for simple queries with default parameters, or a Query object for complex queries. See RediSearch's documentation on query format - **snippet_sizes**: A dictionary of {field: snippet_size} used to trim and format the result. e.g.e {'body': 500} ## Class BatchIndexer A batch indexer allows you to automatically batch document indexing in pipelines, flushing it every N documents. ### \_\_init\_\_ ```py def __init__(self, client, chunk_size=1000) ``` ### add\_document ```py def add_document(self, doc_id, nosave=False, score=1.0, payload=None, replace=False, partial=False, **fields) ``` Add a document to the batch query ### commit ```py def commit(self) ``` Manually commit and flush the batch indexing query ## Class Document Represents a single document in a result set ### \_\_init\_\_ ```py def __init__(self, id, payload=None, **fields) ``` ## Class GeoField GeoField is used to define a geo-indexing field in a schema definition ### \_\_init\_\_ ```py def __init__(self, name) ``` ### redis\_args ```py def redis_args(self) ``` ## Class GeoFilter None ### \_\_init\_\_ ```py def __init__(self, field, lon, lat, radius, unit='km') ``` ## Class NumericField NumericField is used to define a numeric field in a schema definition ### \_\_init\_\_ ```py def __init__(self, name, sortable=False, no_index=False) ``` ### redis\_args ```py def redis_args(self) ``` ## Class NumericFilter None ### \_\_init\_\_ ```py def __init__(self, field, minval, maxval, minExclusive=False, maxExclusive=False) ``` ## Class Query Query is used to build complex queries that have more parameters than just the query string. The query string is set in the constructor, and other options have setter functions. The setter functions return the query object, so they can be chained, i.e. `Query("foo").verbatim().filter(...)` etc. ### \_\_init\_\_ ```py def __init__(self, query_string) ``` Create a new query object. The query string is set in the constructor, and other options have setter functions. ### add\_filter ```py def add_filter(self, flt) ``` Add a numeric or geo filter to the query. **Currently only one of each filter is supported by the engine** - **flt**: A NumericFilter or GeoFilter object, used on a corresponding field ### get\_args ```py def get_args(self) ``` Format the redis arguments for this query and return them ### highlight ```py def highlight(self, fields=None, tags=None) ``` Apply specified markup to matched term(s) within the returned field(s) - **fields** If specified then only those mentioned fields are highlighted, otherwise all fields are highlighted - **tags** A list of two strings to surround the match. ### in\_order ```py def in_order(self) ``` Match only documents where the query terms appear in the same order in the document. i.e. for the query 'hello world', we do not match 'world hello' ### limit\_fields ```py def limit_fields(self, *fields) ``` Limit the search to specific TEXT fields only - **fields**: A list of strings, case sensitive field names from the defined schema ### limit\_ids ```py def limit_ids(self, *ids) ``` Limit the results to a specific set of pre-known document ids of any length ### no\_content ```py def no_content(self) ``` Set the query to only return ids and not the document content ### no\_stopwords ```py def no_stopwords(self) ``` Prevent the query from being filtered for stopwords. Only useful in very big queries that you are certain contain no stopwords. ### paging ```py def paging(self, offset, num) ``` Set the paging for the query (defaults to 0..10). - **offset**: Paging offset for the results. Defaults to 0 - **num**: How many results do we want ### query\_string ```py def query_string(self) ``` Return the query string of this query only ### return\_fields ```py def return_fields(self, *fields) ``` Only return values from these fields ### slop ```py def slop(self, slop) ``` Allow a maximum of N intervening non matched terms between phrase terms (0 means exact phrase) ### sort\_by ```py def sort_by(self, field, asc=True) ``` Add a sortby field to the query - **field** - the name of the field to sort by - **asc** - when `True`, sorting will be done in ascending order ### summarize ```py def summarize(self, fields=None, context_len=None, num_frags=None, sep=None) ``` Return an abridged format of the field, containing only the segments of the field which contain the matching term(s). If `fields` is specified, then only the mentioned fields are summarized; otherwise all results are summarized. Server side defaults are used for each option (except `fields`) if not specified - **fields** List of fields to summarize. All fields are summarized if not specified - **context_len** Amount of context to include with each fragment - **num_frags** Number of fragments per document - **sep** Separator string to separate fragments ### verbatim ```py def verbatim(self) ``` Set the query to be verbatim, i.e. use no query expansion or stemming ### with\_payloads ```py def with_payloads(self) ``` Ask the engine to return document payloads ## Class Result Represents the result of a search query, and has an array of Document objects ### \_\_init\_\_ ```py def __init__(self, res, hascontent, duration=0, has_payload=False) ``` - **snippets**: An optional dictionary of the form {field: snippet_size} for snippet formatting ## Class SortbyField None ### \_\_init\_\_ ```py def __init__(self, field, asc=True) ``` ## Class Suggestion Represents a single suggestion being sent or returned from the auto complete server ### \_\_init\_\_ ```py def __init__(self, string, score=1.0, payload=None) ``` ## Class TagField TagField is a tag-indexing field with simpler compression and tokenization. See http://redisearch.io/Tags/ ### \_\_init\_\_ ```py def __init__(self, name, separator=',', no_index=False) ``` ### redis\_args ```py def redis_args(self) ``` ## Class TextField TextField is used to define a text field in a schema definition ### \_\_init\_\_ ```py def __init__(self, name, weight=1.0, sortable=False, no_stem=False, no_index=False) ``` ### redis\_args ```py def redis_args(self) ``` RediSearch-1.2.2/mkdocs.yml000066400000000000000000000031271364126773500155510ustar00rootroot00000000000000site_name: RediSearch Documentation site_url: http://redisearch.io repo_url: https://github.com/goodform/RediSearch google_analytics: - 'UA-92003007-8' - 'auto' markdown_extensions: - codehilite - toc(permalink=true, separator="_") - admonition use_directory_urls: true theme: name: 'material' language: 'en' logo: 'logo_small.png' favicon: 'img/favicon.png' palette: primary: 'indigo' accent: 'red' font: text: 'Roboto' code: 'Roboto Mono' feature: tabs: false pages: - 'Home': 'index.md' - 'Quick Start': 'Quick_Start.md' - 'Command Reference': 'Commands.md' - 'Configuration': 'Configuring.md' - 'Administration': "Administration.md" - Reference: - 'Query Syntax': 'Query_Syntax.md' - 'Stop-Words': 'Stopwords.md' - 'Aggregations (NEW!)': 'Aggregations.md' - 'Tokenization and Escaping': 'Escaping.md' - 'Sortable Values': 'Sorting.md' - 'Tag Fields': 'Tags.md' - 'Highlighting Results': Highlight.md - 'Scoring Documents': 'Scoring.md' - 'Extension API': Extensions.md - 'Stemming Support': Stemming.md - 'Synonyms Support': Synonyms.md - 'Document Payloads': payloads.md - Clients: - 'Client Libraries': 'Clients.md' - 'Python API': python_client.md - 'Java API': java_client.md - 'Go API': go_client.md - Design Documents: - 'Garbage Collection': 'design/gc.md' - Articles: - 'Multi-Threading in RediSearch': Threading.md - 'Chinese Support': 'Chinese.md' #google_analytics: ['UA-89573912-1', 'redisearch'] RediSearch-1.2.2/ramp.yml000066400000000000000000000006051364126773500152260ustar00rootroot00000000000000display_name: RediSearch author: goodform email: freeandopenredismodules@gmail.com description: High performance search index for Redis homepage: https://github.com/goodform/RediSearch license: AGPLv3 command_line_args: "" min_redis_version: "4.0" min_redis_pack_version: "5.0" capabilities: - types - no_multi_key - backup_restore - failover_migrate - persistence_aof RediSearch-1.2.2/requirements.txt000066400000000000000000000000151364126773500170230ustar00rootroot00000000000000redis rmtest RediSearch-1.2.2/src/000077500000000000000000000000001364126773500143325ustar00rootroot00000000000000RediSearch-1.2.2/src/Makefile000066400000000000000000000110011364126773500157630ustar00rootroot00000000000000 # find the OS uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') CC:=$(shell sh -c 'type $(CC) >/dev/null 2>/dev/null && echo $(CC) || echo gcc') export CC # if DEBUG env var is set, we compile with "debug" cflags DEBUGFLAGS = -g -ggdb -O3 ifeq ($(DEBUG), 1) DEBUGFLAGS = -g -ggdb -O0 endif # Default CFLAGS CFLAGS += -Wall -Wno-unused-function -Wno-unused-variable -Wno-unused-result -fPIC \ -Werror=implicit-function-declaration \ -D_GNU_SOURCE -std=gnu99 -I"$(shell pwd)" -DREDIS_MODULE_TARGET \ -DREDISMODULE_EXPERIMENTAL_API CFLAGS += $(DEBUGFLAGS) GITVERSION=$(shell git describe) ifdef GITVERSION CFLAGS += -DRS_GIT_VERSION=\"$(GITVERSION)\" endif LINKER=$(CC) # Compile flags for non-osx / osx ifneq ($(uname_S),Darwin) SHOBJ_LDFLAGS ?= -shared -Bsymbolic -Bsymbolic-functions -ldl -lpthread CFLAGS += -Wfree-nonheap-object else LINKER = $(LD) CFLAGS += -mmacosx-version-min=10.6 SHOBJ_LDFLAGS ?= -macosx_version_min 10.6 -exported_symbol _RedisModule_OnLoad -bundle -undefined dynamic_lookup -ldl -lpthread endif export CFLAGS # Sources SOURCEDIR:=$(shell pwd -P) CC_SOURCES := $(wildcard $(SOURCEDIR)/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/query_parser/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/ext/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/util/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/trie/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/aggregate/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/aggregate/*/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/dep/thpool/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/dep/hll/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/dep/cndict/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/module-init/*.c) # Convert all sources to .o files CC_OBJECTS = $(sort $(patsubst %.c, %.o, $(CC_SOURCES) )) # .d files for each c file. These make sure that changing a header file # will also change the dependent .c files of it CC_DEPS = $(patsubst %.c, %.d, $(CC_SOURCES) ) MODULE_ARTIFACT=redisearch.so # Library dependencies LIBRMUTIL=rmutil/librmutil.a LIBTRIE=trie/libtrie.a LIBTRIEMAP=dep/triemap/libtriemap.a LIBNU=dep/libnu/libnu.a LIBSTEMMER=dep/snowball/libstemmer.o LIBFRISO=dep/friso/libfriso.a LIBMINIZ=dep/miniz/libminiz.a LIBBLOOM=dep/bloom/libbloom.a # Compilation deps for the module LIBS=$(LIBTRIE) $(LIBTRIEMAP) $(LIBRMUTIL) $(LIBNU) $(LIBFRISO) $(LIBSTEMMER) \ $(LIBBLOOM) # TODO: make conditional on chinese support LIBS += $(LIBMINIZ) MODULE=$(CC_OBJECTS) $(LIBS) %.c: %.y # Compile C file while generating a .d file for it %.o: %.c %.o: %.c $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@ -MMD -MF $(@:.o=.d) all: $(MODULE_ARTIFACT) # Include all dependency files for C files -include $(CC_DEPS) # Library compile rules $(LIBRMUTIL): $(MAKE) -C rmutil .PHONY: $(LIBRMUTIL) $(LIBTRIE): $(MAKE) -C trie .PHONY: $(LIBTRIE) $(LIBTRIEMAP): $(MAKE) -C dep/triemap .PHONY: $(LIBTRIEMAP) $(LIBSTEMMER): $(MAKE) -C dep/snowball libstemmer.o .PHONY: $(LIBSTEMMER) $(LIBNU): $(MAKE) -C dep/libnu .PHONY: $(LIBNU) $(LIBFRISO): $(MAKE) -C dep/friso -f Makefile.RediSearch $(LIBMINIZ): $(MAKE) -C dep/miniz $(LIBBLOOM): $(MAKE) -C dep/bloom # Compile query parse .y and .rl files. # This is not included in the usual make target! query_parser: $(MAKE) -C $@ .PHONY: query_parser build_cndict: $(MAKE) -C dep/cndict build_tests: $(MODULE_ARTIFACT) libredisearch.a $(MAKE) -C tests build test: $(MODULE) build_tests # low level redis-independant tests $(MAKE) -C ./tests test # high level python integration tests $(MAKE) -C pytest test # Triemap tests $(MAKE) -C dep/triemap/test test buildall: $(MODULE_ARTIFACT) libredisearch.a build_tests # Build the module... $(MODULE_ARTIFACT): $(shell rm -f module.o) $(MODULE_ARTIFACT): $(MODULE) version.h @# Just to make sure old versions of the modules are deleted rm -f module.so $(LINKER) -o $@ $(MODULE) $(SHOBJ_LDFLAGS) -lc -lm $(LDFLAGS) # Build a stand-alone static library without the module entry point. # This is used to include the module's functionality in other modules libredisearch.a: CFLAGS+=-DRS_CMD_PREFIX='"_FT"' -DRS_STATIC # remove module.o to make sure we are building it with the right defines libredisearch.a: $(shell rm -f module.o) libredisearch.a: $(CC_OBJECTS) $(LIBS) version.h ar rcs $@ $(CC_OBJECTS) staticlib: libredisearch.a clean: rm -fv *.[oad] trie/*.[oad] query_parser/*.[oad] ext/*.[oad] $(MAKE) -C tests clean distclean: clean find . -type f \( -name '*.[oad]' -o -name '*.so' \) -delete -print print_version: version.h print_version.c @$(CC) -o $@ -DPRINT_VERSION_TARGET $@.c rebuild: clean all RediSearch-1.2.2/src/aggregate/000077500000000000000000000000001364126773500162605ustar00rootroot00000000000000RediSearch-1.2.2/src/aggregate/aggregate.h000066400000000000000000000057161364126773500203700ustar00rootroot00000000000000#ifndef RS_AGGREGATE_H__ #define RS_AGGREGATE_H__ #include #include #include "reducer.h" #include "expr/expression.h" #include #include "aggregate_plan.h" #include #ifndef GROUPBY_C_ typedef struct Grouper Grouper; #endif CmdSchemaNode *GetAggregateRequestSchema(); typedef struct { QueryPlan *plan; QueryParseCtx *parseCtx; AggregatePlan ap; CmdArg *args; /** * If this pointer is heap allocated, in which case the pointer itself is * freed during AR_Free() */ int isHeapAlloc; } AggregateRequest; void Aggregate_BuildSchema(); ResultProcessor *Aggregate_DefaultChainBuilder(QueryPlan *plan, void *ctx, char **err); // Don't enable concurrent mode. #define AGGREGATE_REQUEST_NO_CONCURRENT 0x01 // Only generate the plan #define AGGREGATE_REQUEST_NO_PARSE_QUERY 0x02 // Don't attempt to open the spec #define AGGREGATE_REQUEST_SPECLESS 0x04 typedef struct { ProcessorChainBuilder pcb; const char *cursorLookupName; // Override the index name in the SearchCtx int flags; // AGGREGATE_REQUEST_XXX } AggregateRequestSettings; /** * Note that this does not initialize the structure; use */ int AggregateRequest_Start(AggregateRequest *req, RedisSearchCtx *sctx, const AggregateRequestSettings *settings, RedisModuleString **argv, int argc, char **err); void AggregateRequest_Run(AggregateRequest *req, RedisModuleCtx *outCtx); void AggregateRequest_Free(AggregateRequest *req); /** * Persist the request. This safely converts a stack allocated request to * one allocated on the heap. This assumes that `req` lives on the stack. * * The current implementation simply does a malloc and memcpy, but this is * abstracted in case the request's own members contain references to it. */ AggregateRequest *AggregateRequest_Persist(AggregateRequest *req); Grouper *NewGrouper(RSMultiKey *keys, RSSortingTable *tbl); void Grouper_Free(Grouper *p); ResultProcessor *NewGrouperProcessor(Grouper *g, ResultProcessor *upstream); void Grouper_AddReducer(Grouper *g, Reducer *r); ResultProcessor *GetProjector(ResultProcessor *upstream, const char *name, const char *alias, CmdArg *args, char **err); ResultProcessor *NewFilter(RedisSearchCtx *sctx, ResultProcessor *upstream, const char *expr, size_t len, char **err); // Entry points void AggregateCommand_ExecAggregate(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *cmdCtx); void AggregateCommand_ExecAggregateEx(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *cmdCtx, const AggregateRequestSettings *setings); void AggregateCommand_ExecCursor(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *); #endifRediSearch-1.2.2/src/aggregate/aggregate_exec.c000066400000000000000000000127141364126773500213630ustar00rootroot00000000000000#include "redismodule.h" #include "redisearch.h" #include "search_ctx.h" #include "aggregate.h" #include "cursor.h" static void runCursor(RedisModuleCtx *outputCtx, Cursor *cursor, size_t num); void AggregateCommand_ExecAggregate(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *cmdCtx) { AggregateCommand_ExecAggregateEx( ctx, argv, argc, cmdCtx, &(AggregateRequestSettings){.pcb = Aggregate_DefaultChainBuilder}); } /** * File containing top-level execution routines for aggregations */ /* FT.AGGREGATE {idx:string} {FILTER:string} SELECT {nargs:integer} {string} ... GROUPBY {nargs:integer} {string} ... [AS {AS:string}] REDUCE {FUNC:string} {nargs:integer} {string} ... [AS {AS:string}] [SORTBY {nargs:integer} {string} ...] [PROJECT {FUNC:string} {nargs:integer} {string} ... [AS {AS:string}] ] */ void AggregateCommand_ExecAggregateEx(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *cmdCtx, const AggregateRequestSettings *settings) { // at least one field, and number of field/text args must be even RedisModule_AutoMemory(ctx); RedisSearchCtx *sctx; if (settings->flags & AGGREGATE_REQUEST_SPECLESS) { sctx = NewSearchCtxDefault(ctx); } else { sctx = NewSearchCtx(ctx, argv[1]); } if (sctx == NULL) { RedisModule_ReplyWithError(ctx, "Unknown Index name"); return; } char *err = NULL; AggregateRequest req_s = {NULL}, *req = &req_s; int hasCursor = 0; if (AggregateRequest_Start(req, sctx, settings, argv, argc, &err) != REDISMODULE_OK) { RedisModule_ReplyWithError(ctx, err ? err : "Could not perform request"); ERR_FREE(err); goto done; } if (req->ap.hasCursor) { // Using a cursor here! const char *idxName = settings->cursorLookupName ? settings->cursorLookupName : RedisModule_StringPtrLen(argv[1], NULL); Cursor *cursor = Cursors_Reserve(&RSCursors, sctx, idxName, req->ap.cursor.maxIdle, &err); if (!cursor) { RedisModule_ReplyWithError(ctx, err ? err : "Could not open cursor"); ERR_FREE(err); goto done; } req = AggregateRequest_Persist(req); req->plan->opts.flags |= Search_IsCursor; cursor->execState = req; /* Don't let the context get removed from under our feet */ ConcurrentCmdCtx_KeepRedisCtx(cmdCtx); runCursor(ctx, cursor, req->ap.cursor.count); return; } AggregateRequest_Run(req, sctx->redisCtx); done: AggregateRequest_Free(req); SearchCtx_Free(sctx); } static void runCursor(RedisModuleCtx *outputCtx, Cursor *cursor, size_t num) { AggregateRequest *req = cursor->execState; if (!num) { num = req->ap.cursor.count; if (!num) { num = RSGlobalConfig.cursorReadSize; } } req->plan->opts.chunksize = num; clock_gettime(CLOCK_MONOTONIC_RAW, &req->plan->execCtx.startTime); RedisModule_ReplyWithArray(outputCtx, 2); AggregateRequest_Run(req, outputCtx); if (req->plan->outputFlags & QP_OUTPUT_FLAG_ERROR) { RedisModule_ReplyWithLongLong(outputCtx, 0); goto delcursor; } if (req->plan->outputFlags & QP_OUTPUT_FLAG_DONE) { // Write the count! RedisModule_ReplyWithLongLong(outputCtx, 0); } else { RedisModule_ReplyWithLongLong(outputCtx, cursor->id); } if (req->plan->outputFlags & QP_OUTPUT_FLAG_DONE) { goto delcursor; } else { // Update the idle timeout Cursor_Pause(cursor); return; } delcursor: AggregateRequest_Free(req); Cursor_Free(cursor); } /** * FT.CURSOR READ {index} {CID} {ROWCOUNT} [MAXIDLE] * FT.CURSOR DEL {index} {CID} * FT.CURSOR GC {index} */ static void cursorRead(RedisModuleCtx *ctx, uint64_t cid, size_t count) { Cursor *cursor = Cursors_TakeForExecution(&RSCursors, cid); if (cursor == NULL) { RedisModule_ReplyWithError(ctx, "Cursor not found"); return; } AggregateRequest *req = cursor->execState; if (req->plan->conc) { ConcurrentSearchCtx_ReopenKeys(req->plan->conc); } runCursor(ctx, cursor, count); } void AggregateCommand_ExecCursor(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *unused) { if (argc < 3) { RedisModule_WrongArity(ctx); return; } const char *cmd = RedisModule_StringPtrLen(argv[1], NULL); long long cid = 0; // argv[1] - FT.CURSOR // argv[1] - subcommand // argv[2] - index // argv[3] - cursor ID if (RedisModule_StringToLongLong(argv[3], &cid) != REDISMODULE_OK) { RedisModule_ReplyWithError(ctx, "Bad cursor ID"); return; } char cmdc = toupper(*cmd); if (cmdc == 'R') { long long count = 0; if (argc > 5) { // e.g. 'COUNT ' if (RedisModule_StringToLongLong(argv[5], &count) != REDISMODULE_OK) { RedisModule_ReplyWithError(ctx, "Bad value for COUNT"); return; } } cursorRead(ctx, cid, count); } else if (cmdc == 'D') { int rc = Cursors_Purge(&RSCursors, cid); if (rc != REDISMODULE_OK) { RedisModule_ReplyWithError(ctx, "Cursor does not exist"); } else { RedisModule_ReplyWithSimpleString(ctx, "OK"); } } else if (cmdc == 'G') { int rc = Cursors_CollectIdle(&RSCursors); RedisModule_ReplyWithLongLong(ctx, rc); } else { printf("Unknown command %s\n", cmd); RedisModule_ReplyWithError(ctx, "Unknown subcommand"); } } RediSearch-1.2.2/src/aggregate/aggregate_plan.c000066400000000000000000000600131364126773500213640ustar00rootroot00000000000000#include "aggregate_plan.h" #include "reducer.h" #include "expr/expression.h" #include #include #include #include AggregateStep *AggregatePlan_NewStep(AggregateStepType t) { AggregateStep *step = malloc(sizeof(*step)); step->type = t; step->next = NULL; step->prev = NULL; return step; } AggregateStep *newLoadStep(CmdArg *arg, char **err) { RSMultiKey *k = RS_NewMultiKeyFromArgs(&CMDARG_ARR(arg), 1, 1); AggregateStep *ret = AggregatePlan_NewStep(AggregateStep_Load); ret->load.keys = k; // we do not immediately create the field list, it might not be needed ret->load.fl = (FieldList){}; return ret; } AggregateStep *AggregatePlan_NewApplyStep(const char *alias, const char *expr, char **err) { RSExpr *pe = RSExpr_Parse(expr, strlen(expr), err); if (!pe) { return NULL; } AggregateStep *ret = AggregatePlan_NewStep(AggregateStep_Apply); ret->apply = (AggregateApplyStep){ .rawExpr = (char *)expr, .parsedExpr = pe, .alias = alias ? strdup(alias) : NULL, }; return ret; } AggregateStep *AggregatePlan_NewFilterStep(const char *expr, char **err) { RSExpr *pe = RSExpr_Parse(expr, strlen(expr), err); if (!pe) { return NULL; } AggregateStep *ret = AggregatePlan_NewStep(AggregateStep_Filter); ret->filter = (AggregateFilterStep){ .rawExpr = (char *)expr, .parsedExpr = pe, }; return ret; } AggregateStep *AggregatePlan_NewApplyStepFmt(const char *alias, char **err, const char *fmt, ...) { char *exp; va_list ap; va_start(ap, fmt); vasprintf(&exp, fmt, ap); va_end(ap); AggregateStep *st = AggregatePlan_NewApplyStep(alias, exp, err); if (!st) { free(exp); } return st; } AggregateStep *newApplyStepArgs(CmdArg *arg, char **err) { CmdArg *expr = CmdArg_FirstOf(arg, "expr"); if (!expr || CMDARG_TYPE(expr) != CmdArg_String) { SET_ERR(err, "Missing or invalid projection expression"); return NULL; } const char *exp = strdup(CMDARG_STRPTR(expr)); const char *alias = CMDARG_ORNULL(CmdArg_FirstOf(arg, "AS"), CMDARG_STRPTR); return AggregatePlan_NewApplyStep(alias ? strdup(alias) : NULL, exp, err); } AggregateStep *newFilterStep(CmdArg *arg, char **err) { if (CMDARG_TYPE(arg) != CmdArg_String) { SET_ERR(err, "Missing or invalid filter expression"); return NULL; } const char *exp = strdup(CMDARG_STRPTR(arg)); return AggregatePlan_NewFilterStep(exp, err); } AggregateStep *newSortStep(CmdArg *srt, char **err) { CmdArg *by = CmdArg_FirstOf(srt, "by"); if (!by || CMDARG_ARRLEN(by) == 0) return NULL; RSMultiKey *keys = RS_NewMultiKey(CMDARG_ARRLEN(by)); keys->keysAllocated = 1; // We build a bitmap of maximum 64 sorting parameters. 1 means asc, 2 desc // By default all bits are 1. Whenever we encounter DESC we flip the corresponding bit uint64_t ascMap = 0xFFFFFFFFFFFFFFFF; int n = 0; // since ASC/DESC are optional, we need a stateful parser // state 0 means we are open only to property names // state 1 means we are open to either a new property or ASC/DESC int state = 0, i = 0; for (i = 0; i < CMDARG_ARRLEN(by) && i < sizeof(ascMap) * 8; i++) { const char *str = CMDARG_STRPTR(CMDARG_ARRELEM(by, i)); // New properties are accepted in either state if (*str == '@') { keys->keys[n++] = RS_KEY_STRDUP(RSKEY(str)); state = 1; } else if (state == 0) { // At state 0 we only accept properties, so we don't even need to see what this is goto err; } else if (!strcasecmp(str, "asc")) { // For as - we put a 1 in the map. We don't actually need to, this is just for readability ascMap |= 1 << (n - 1); // switch back to state 0, ASC/DESC cannot follow ASC state = 0; } else if (!strcasecmp(str, "desc")) { // We turn the current bit to 0 meaning desc for the Nth property ascMap &= ~(1 << (n - 1)); // switch back to state 0, ASC/DESC cannot follow ASC state = 0; } else { // Unknown token - neither a property nor ASC/DESC goto err; } } keys->len = n; // Parse optional MAX CmdArg *max = CmdArg_FirstOf(srt, "MAX"); long long mx = 0; if (max) { mx = CMDARG_INT(max); if (mx < 0) mx = 0; } AggregateStep *ret = AggregatePlan_NewStep(AggregateStep_Sort); ret->sort = (AggregateSortStep){ .keys = keys, .ascMap = ascMap, .max = mx, }; return ret; err: FMT_ERR(err, "Invalid SORTBY arguments near '%s'", CMDARG_STRPTR(CMDARG_ARRELEM(by, i))); if (keys) RSMultiKey_Free(keys); return NULL; } AggregateStep *newLimit(CmdArg *arg, char **err) { long long offset, limit; offset = CMDARG_INT(CMDARG_ARRELEM(arg, 0)); limit = CMDARG_INT(CMDARG_ARRELEM(arg, 1)); if (offset < 0 || limit <= 0) { SET_ERR(err, "Invalid offset/num for LIMIT"); return NULL; } AggregateStep *ret = AggregatePlan_NewStep(AggregateStep_Limit); ret->limit.offset = offset; ret->limit.num = limit; return ret; } size_t AggregateGroupStep_NumReducers(AggregateGroupStep *g) { return array_len(g->reducers); } char *AggregatePlan_GetReducerAlias(AggregateGroupStep *g, const char *func, RSValue **argv, int argc) { sds out = sdsnew("__generated_alias"); out = sdscat(out, func); // only put parentheses if we actually have args char buf[255]; for (size_t i = 0; i < argc; i++) { size_t l; const char *s = RSValue_ConvertStringPtrLen(argv[i], &l, buf, sizeof(buf)); while (*s == '@') { // Don't allow the leading '@' to be included as an alias! ++s; --l; } out = sdscatlen(out, s, l); if (i + 1 < argc) { out = sdscat(out, ","); } } // only put parentheses if we actually have args sdstolower(out); // duplicate everything. yeah this is lame but this function is not in a tight loop char *dup = strndup(out, sdslen(out)); sdsfree(out); return dup; } char *AggregateGroupStep_AddReducer(AggregateGroupStep *g, const char *func, char *alias, int argc, ...) { if (!g->reducers) { g->reducers = array_new(AggregateGroupReduce, 1); } RSValue **arr = array_newlen(RSValue *, argc); va_list ap; va_start(ap, argc); for (int i = 0; i < argc; i++) { arr[i] = RSValue_IncrRef(va_arg(ap, RSValue *)); } va_end(ap); if (!alias) { alias = AggregatePlan_GetReducerAlias(g, func, arr, argc); } else { alias = strdup(alias); } g->reducers = array_append(g->reducers, ((AggregateGroupReduce){ .reducer = func, .alias = alias, .args = arr, })); return alias; } void buildReducer(AggregateGroupStep *g, AggregateGroupReduce *gr, CmdArg *red, char **err) { gr->reducer = CMDARG_STRPTR(CmdArg_FirstOf(red, "func")); CmdArg *args = CmdArg_FirstOf(red, "args"); gr->args = NULL; if (CMDARG_ARRLEN(args) > 0) { gr->args = array_newlen(RSValue *, CMDARG_ARRLEN(args)); for (int i = 0; i < CMDARG_ARRLEN(args); i++) { gr->args[i] = RSValue_IncrRef(RS_NewValueFromCmdArg(CMDARG_ARRELEM(args, i))); } } gr->alias = CMDARG_ORNULL(CmdArg_FirstOf(red, "AS"), CMDARG_STRPTR); if (!gr->alias) { gr->alias = AggregatePlan_GetReducerAlias(g, gr->reducer, gr->args, gr->args ? array_len(gr->args) : 0); } else { gr->alias = strdup(gr->alias); } } AggregateStep *newGroupStep(int idx, CmdArg *grp, char **err) { CmdArg *by = CmdArg_FirstOf(grp, "by"); if (!by || CMDARG_ARRLEN(by) == 0) { SET_ERR(err, "No fields for GROUPBY"); return NULL; } RSMultiKey *keys = RS_NewMultiKeyFromArgs(&CMDARG_ARR(by), 1, 1); size_t numReducers = CmdArg_Count(grp, "REDUCE"); AggregateGroupReduce *arr = NULL; if (numReducers) { arr = array_new(AggregateGroupReduce, numReducers); } AggregateStep *ret = AggregatePlan_NewStep(AggregateStep_Group); ret->group = (AggregateGroupStep){ .properties = keys, .reducers = arr, .idx = idx, // FIXME: Global counter }; // Add reducers CMD_FOREACH_SELECT(grp, "REDUCE", { AggregateGroupReduce agr; buildReducer(&ret->group, &agr, result, err); ret->group.reducers = array_append(ret->group.reducers, agr); }); return ret; } AggregateSchema AggregateSchema_Set(AggregateSchema schema, const char *property, RSValueType t, AggregatePropertyKind kind, int replace) { assert(property); for (size_t i = 0; i < array_len(schema); i++) { AggregateProperty p = schema[i]; if (!strcasecmp(RSKEY(schema[i].property), RSKEY(property))) { if (replace) { schema[i].kind = kind; schema[i].type = t; } return schema; } } schema = array_append(schema, ((AggregateProperty){RSKEY(property), t, kind})); return schema; } int AggregateSchema_Contains(AggregateSchema schema, const char *property) { for (size_t i = 0; i < array_len(schema); i++) { if (!strcasecmp(RSKEY(schema[i].property), RSKEY(property))) { return 1; } } return 0; } AggregateProperty *AggregateSchema_Get(AggregateSchema sc, const char *prop) { if (!sc || !prop) return NULL; for (size_t i = 0; i < array_len(sc); i++) { if (!strcasecmp(RSKEY(sc[i].property), RSKEY(prop))) { return &sc[i]; } } return NULL; } AggregateSchema extractExprTypes(RSExpr *expr, AggregateSchema arr, RSValueType typeHint, RSSortingTable *tbl) { switch (expr->t) { case RSExpr_Function: { RSValueType funcType = GetExprType(expr, tbl); for (int i = 0; i < expr->func.args->len; i++) { arr = extractExprTypes(expr->func.args->args[i], arr, funcType, tbl); } break; } case RSExpr_Property: { arr = AggregateSchema_Set(arr, expr->property.key, SortingTable_GetFieldType(tbl, expr->property.key, typeHint), Property_Field, 0); break; } case RSExpr_Op: // ops are between numeric properties, so the hint is number arr = extractExprTypes(expr->op.left, arr, RSValue_Number, tbl); arr = extractExprTypes(expr->op.right, arr, RSValue_Number, tbl); break; case RSExpr_Literal: default: break; } return arr; } AggregateSchema AggregatePlan_GetSchema(AggregatePlan *plan, RSSortingTable *tbl) { AggregateStep *current = plan->head; AggregateSchema arr = array_new(AggregateProperty, 8); while (current) { switch (current->type) { case AggregateStep_Apply: // for literals we just add their type if (current->apply.parsedExpr && current->apply.parsedExpr->t == RSExpr_Literal) { arr = AggregateSchema_Set(arr, current->apply.alias, current->apply.parsedExpr->literal.t, Property_Projection, 1); } else { // descend into the compound expression, and try to find out the type of the // sub-expressions arr = extractExprTypes(current->apply.parsedExpr, arr, RSValue_String, tbl); arr = AggregateSchema_Set(arr, current->apply.alias, GetExprType(current->apply.parsedExpr, tbl), Property_Projection, 1); } break; case AggregateStep_Load: for (int i = 0; i < current->load.keys->len; i++) { arr = AggregateSchema_Set( arr, current->load.keys->keys[i].key, SortingTable_GetFieldType(tbl, current->load.keys->keys[i].key, RSValue_String), Property_Field, 1); } break; case AggregateStep_Sort: for (int i = 0; i < current->sort.keys->len; i++) { // for sort we may need the keys but they are either the output of apply/reduce, or // properties arr = AggregateSchema_Set( arr, current->sort.keys->keys[i].key, SortingTable_GetFieldType(tbl, current->load.keys->keys[i].key, RSValue_String), Property_Field, 0); } break; case AggregateStep_Group: for (int i = 0; i < current->group.properties->len; i++) { arr = AggregateSchema_Set(arr, current->group.properties->keys[i].key, SortingTable_GetFieldType( tbl, current->group.properties->keys[i].key, RSValue_String), Property_Field, 0); } // Now go over the reducers as well for (int i = 0; i < array_len(current->group.reducers); i++) { AggregateGroupReduce *red = ¤t->group.reducers[i]; // descend to each reducer's arguments for (int j = 0; j < array_len(red->args); j++) { if (RSValue_IsString(red->args[j])) { // if the reducer's arg is a property, optionally add that const char *c = RSValue_StringPtrLen(red->args[j], NULL); if (c && *c == '@') { AggregateSchema_Set(arr, c, SortingTable_GetFieldType(tbl, c, RSValue_String), Property_Field, 0); } } } if (red->alias) { arr = AggregateSchema_Set(arr, red->alias, GetReducerType(red->reducer), Property_Aggregate, 1); } } break; case AggregateStep_Limit: default: break; } current = current->next; } return arr; } /* Add a step after a step */ void AggregateStep_AddAfter(AggregateStep *step, AggregateStep *add) { add->next = step->next; if (step->next) step->next->prev = add; add->prev = step; step->next = add; } /* Add a step before a step */ void AggregateStep_AddBefore(AggregateStep *step, AggregateStep *add) { add->prev = step->prev; if (add->prev) add->prev->next = add; // if add is several steps connected, go to the end while (add->next) { add = add->next; } add->next = step; step->prev = add; } /* Detach the step and return the previous next of it */ AggregateStep *AggregateStep_Detach(AggregateStep *step) { AggregateStep *tmp = step->next; if (step->next) step->next->prev = step->prev; if (step->prev) step->prev->next = step->next; step->prev = NULL; step->next = NULL; return tmp; } /* Get the first step after start of type t */ AggregateStep *AggregateStep_FirstOf(AggregateStep *start, AggregateStepType t) { while (start) { if (start->type == t) return start; start = start->next; } return NULL; } /* add a step to the plan at its end (before the dummy tail) */ void AggregatePlan_AddStep(AggregatePlan *plan, AggregateStep *step) { // We assume head and tail are sentinels AggregateStep_AddBefore(plan->tail, step); } void AggregatePlan_Init(AggregatePlan *plan) { *plan = (AggregatePlan){0}; plan->head = AggregatePlan_NewStep(AggregateStep_Dummy); plan->tail = AggregatePlan_NewStep(AggregateStep_Dummy); plan->tail->prev = plan->head; plan->head->next = plan->tail; } void plan_setCursor(AggregatePlan *plan, CmdArg *arg) { CmdArg *tmoarg = CmdArg_FirstOf(arg, "MAXIDLE"); CmdArg *countarg = CmdArg_FirstOf(arg, "COUNT"); uint32_t timeout = tmoarg ? CMDARG_INT(tmoarg) : RSGlobalConfig.cursorMaxIdle; if (timeout > RSGlobalConfig.cursorMaxIdle) { timeout = RSGlobalConfig.cursorMaxIdle; } plan->cursor.count = countarg ? CMDARG_INT(countarg) : 0; plan->hasCursor = 1; plan->cursor.maxIdle = timeout; } int AggregatePlan_Build(AggregatePlan *plan, CmdArg *cmd, char **err) { #define LOAD_NO_ALLOW_ERROR "LOAD can not come after GROUPBY/SORTBY/APPLY/LIMIT/FILTER" AggregatePlan_Init(plan); if (!cmd || CMDARG_TYPE(cmd) != CmdArg_Object || CMDARG_OBJLEN(cmd) < 3) { goto fail; } CmdArgIterator it = CmdArg_Children(cmd); CmdArg *child; const char *key; int n = 1; plan->withSchema = CmdArg_GetFlag(cmd, "WITHSCHEMA"); plan->verbatim = CmdArg_GetFlag(cmd, "VERBATIM"); bool isLoadAllow = true; while (NULL != (child = CmdArgIterator_Next(&it, &key))) { AggregateStep *next = NULL; if (!strcasecmp(key, "idx")) { plan->index = CMDARG_STRPTR(child); continue; } else if (!strcasecmp(key, "WITHSCHEMA") || !strcasecmp(key, "VERBATIM")) { // skip verbatim and withschema continue; } else if (!strcasecmp(key, "query")) { next = AggregatePlan_NewStep(AggregateStep_Query); next->query.str = strdup(CMDARG_STRPTR(child)); } else if (!strcasecmp(key, "GROUPBY")) { next = newGroupStep(n++, child, err); isLoadAllow = false; } else if (!strcasecmp(key, "SORTBY")) { next = newSortStep(child, err); isLoadAllow = false; } else if (!strcasecmp(key, "APPLY")) { next = newApplyStepArgs(child, err); isLoadAllow = false; } else if (!strcasecmp(key, "LIMIT")) { next = newLimit(child, err); isLoadAllow = false; } else if (!strcasecmp(key, "LOAD")) { if(!isLoadAllow){ *err = strdup(LOAD_NO_ALLOW_ERROR); goto fail; } next = newLoadStep(child, err); isLoadAllow = false; } else if (!strcasecmp(key, "FILTER")) { next = newFilterStep(child, err); isLoadAllow = false; } else if (!strcasecmp(key, "WITHCURSOR")) { plan_setCursor(plan, child); continue; } if (!next) { goto fail; } AggregatePlan_AddStep(plan, next); } return 1; fail: AggregatePlan_Free(plan); return 0; } void arrPushStrdup(char ***v, const char *s) { char *c = strdup(s); *v = array_append(*v, c); } void arrPushStrfmt(char ***v, const char *fmt, ...) { va_list ap; va_start(ap, fmt); char *c; vasprintf(&c, fmt, ap); va_end(ap); *v = array_append(*v, c); } void serializeGroup(AggregateGroupStep *g, char ***v) { arrPushStrdup(v, "GROUPBY"); arrPushStrfmt(v, "%d", g->properties->len); for (int i = 0; i < g->properties->len; i++) { arrPushStrfmt(v, "@%s", g->properties->keys[i].key); } for (int i = 0; i < AggregateGroupStep_NumReducers(g); i++) { arrPushStrdup(v, "REDUCE"); arrPushStrdup(v, g->reducers[i].reducer); arrPushStrfmt(v, "%d", array_len(g->reducers[i].args)); if (g->reducers[i].args) { RSValue tmp = {.allocated = 0}; for (int j = 0; j < array_len(g->reducers[i].args); j++) { RSValue_ToString(&tmp, g->reducers[i].args[j]); arrPushStrdup(v, RSValue_StringPtrLen(&tmp, NULL)); RSValue_Free(&tmp); } } if (g->reducers[i].alias) { arrPushStrdup(v, "AS"); arrPushStrdup(v, g->reducers[i].alias); } } } void serializeSort(AggregateSortStep *s, char ***v) { arrPushStrdup(v, "SORTBY"); arrPushStrfmt(v, "%d", s->keys->len * 2); for (int i = 0; i < s->keys->len; i++) { arrPushStrfmt(v, "@%s", s->keys->keys[i].key); arrPushStrdup(v, s->ascMap & (1 << i) ? "ASC" : "DESC"); } if (s->max) { arrPushStrdup(v, "MAX"); arrPushStrfmt(v, "%d", s->max); } } void serializeApply(AggregateApplyStep *a, char ***v) { arrPushStrdup(v, "APPLY"); arrPushStrdup(v, a->rawExpr); arrPushStrdup(v, "AS"); arrPushStrdup(v, a->alias); } void serializeFilter(AggregateFilterStep *f, char ***v) { arrPushStrdup(v, "FILTER"); arrPushStrdup(v, f->rawExpr); } void serializeLimit(AggregateLimitStep *l, char ***v) { arrPushStrdup(v, "LIMIT"); arrPushStrfmt(v, "%lld", l->offset); arrPushStrfmt(v, "%lld", l->num); } void serializeLoad(AggregateLoadStep *l, char ***v) { arrPushStrdup(v, "LOAD"); arrPushStrfmt(v, "%d", l->keys->len); for (int i = 0; i < l->keys->len; i++) { arrPushStrfmt(v, "@%s", l->keys->keys[i].key); } } void plan_serializeCursor(AggregatePlan *plan, char ***vec) { arrPushStrdup(vec, "WITHCURSOR"); arrPushStrdup(vec, "COUNT"); arrPushStrfmt(vec, "%d", plan->cursor.count); if (plan->cursor.maxIdle > 0) { arrPushStrdup(vec, "MAXIDLE"); arrPushStrfmt(vec, "%d", plan->cursor.maxIdle); } } char **AggregatePlan_Serialize(AggregatePlan *plan) { char **vec = array_new(char *, 10); arrPushStrdup(&vec, RS_AGGREGATE_CMD); if (plan->index) arrPushStrdup(&vec, plan->index); // Serialize the cursor if needed AggregateStep *current = plan->head; while (current) { switch (current->type) { case AggregateStep_Query: arrPushStrdup(&vec, current->query.str); if (plan->verbatim) arrPushStrdup(&vec, "VERBATIM"); if (plan->withSchema) arrPushStrdup(&vec, "WITHSCHEMA"); if (plan->hasCursor) { plan_serializeCursor(plan, &vec); } break; case AggregateStep_Group: serializeGroup(¤t->group, &vec); break; case AggregateStep_Sort: serializeSort(¤t->sort, &vec); break; case AggregateStep_Apply: serializeApply(¤t->apply, &vec); break; case AggregateStep_Filter: serializeFilter(¤t->filter, &vec); break; case AggregateStep_Limit: serializeLimit(¤t->limit, &vec); break; case AggregateStep_Load: serializeLoad(¤t->load, &vec); break; case AggregateStep_Distribute: { arrPushStrdup(&vec, "{{"); char **sub = AggregatePlan_Serialize(current->dist.plan); for (int k = 0; k < array_len(sub); k++) { vec = array_append(vec, sub[k]); } arrPushStrdup(&vec, "}}"); array_free(sub); break; } case AggregateStep_Dummy: break; } current = current->next; } return vec; } AggregateStep *AggregatePlan_MoveStep(AggregatePlan *src, AggregatePlan *dist, AggregateStep *step) { AggregateStep *next = AggregateStep_Detach(step); AggregatePlan_AddStep(dist, step); return next; } void AggregatePlan_FPrint(AggregatePlan *plan, FILE *out) { char **args = AggregatePlan_Serialize(plan); for (int i = 0; i < array_len(args); i++) { sds s = sdscatrepr(sdsnew(""), args[i], strlen(args[i])); fputs(s, out); fputc(' ', out); sdsfree(s); } array_free_ex(args, free(*(void **)ptr);); fputs("\n", out); } void AggregatePlan_Print(AggregatePlan *plan) { AggregatePlan_FPrint(plan, stderr); } void value_pFree(void *p) { RSValue_Free(p); } void reducer_Free(void *p) { AggregateGroupReduce *gr = p; // the reducer func itself is const char and should not be freed free(gr->alias); array_free_ex(gr->args, RSValue_Free(*(void **)ptr)); } void AggregateStep_Free(AggregateStep *s) { switch (s->type) { case AggregateStep_Query: free(s->query.str); break; case AggregateStep_Group: RSMultiKey_Free(s->group.properties); array_free_ex(s->group.reducers, reducer_Free(ptr)); break; case AggregateStep_Sort: RSMultiKey_Free(s->sort.keys); break; case AggregateStep_Apply: free(s->apply.alias); free(s->apply.rawExpr); if (s->apply.parsedExpr) RSExpr_Free(s->apply.parsedExpr); break; case AggregateStep_Filter: free(s->filter.rawExpr); if (s->filter.parsedExpr) RSExpr_Free(s->apply.parsedExpr); break; case AggregateStep_Load: RSMultiKey_Free(s->load.keys); if (s->load.fl.numFields) { FieldList_Free(&s->load.fl); } break; case AggregateStep_Distribute: AggregatePlan_Free(s->dist.plan); free(s->dist.plan); break; case AggregateStep_Limit: case AggregateStep_Dummy: break; } free(s); } void AggregatePlan_Free(AggregatePlan *plan) { AggregateStep *current = plan->head; while (current) { AggregateStep *next = current->next; AggregateStep_Free(current); current = next; } plan->head = plan->tail = NULL; } int AggregatePlan_DumpSchema(RedisModuleCtx *ctx, QueryProcessingCtx *qpc, void *privdata) { AggregateSchema sc = privdata; if (!ctx || !sc) return 0; RedisModule_ReplyWithArray(ctx, array_len(sc)); for (size_t i = 0; i < array_len(sc); i++) { RedisModule_ReplyWithArray(ctx, 2); RedisModule_ReplyWithStringBuffer(ctx, sc[i].property, strlen(sc[i].property)); const char *t = RSValue_TypeName(sc[i].type); RedisModule_ReplyWithStringBuffer(ctx, t, strlen(t)); } return 1; } RediSearch-1.2.2/src/aggregate/aggregate_plan.h000066400000000000000000000101561364126773500213740ustar00rootroot00000000000000#ifndef AGGREGATE_PLAN_H_ #define AGGREGATE_PLAN_H_ #include #include #include /* A structure representing an aggregation execution plan and all its various steps. * This is used to safely manipulate and validate plans */ struct AggregatePlan; /* Load step - load properties */ typedef struct { RSMultiKey *keys; FieldList fl; } AggregateLoadStep; /* query step - search for query text */ typedef struct { char *str; } AggregateQueryStep; /* Group step single reducer, a function and its args */ typedef struct { const char *reducer; RSValue **args; char *alias; } AggregateGroupReduce; /* Group step - group by properties and reduce by several reducers */ typedef struct { RSMultiKey *properties; AggregateGroupReduce *reducers; int idx; } AggregateGroupStep; /* Apply step - evaluate an expression per record */ typedef struct { char *rawExpr; RSExpr *parsedExpr; char *alias; } AggregateApplyStep; /* Filter step - evaluate a post filter */ typedef struct { char *rawExpr; RSExpr *parsedExpr; } AggregateFilterStep; /* Schema property kind (not type!) is this a field from the result, a projection or an aggregation? */ typedef enum { Property_Field = 1, Property_Aggregate = 2, Property_Projection = 3, } AggregatePropertyKind; /* Aggregation property for the schema */ typedef struct { const char *property; RSValueType type; AggregatePropertyKind kind; } AggregateProperty; /* A schema is just an array of properties */ typedef AggregateProperty *AggregateSchema; /* Sortby step - by one or more properties */ typedef struct { RSMultiKey *keys; uint64_t ascMap; long long max; } AggregateSortStep; /* limit paging */ typedef struct { long long offset; long long num; } AggregateLimitStep; typedef enum { AggregateStep_Query, AggregateStep_Group, AggregateStep_Sort, AggregateStep_Apply, AggregateStep_Limit, AggregateStep_Load, AggregateStep_Distribute, AggregateStep_Filter, AggregateStep_Dummy, // dummy step representing an empty plan's head } AggregateStepType; /* Distribute step - send a sub-plan to all shards and collect the results */ typedef struct { struct AggregatePlan *plan; } AggregateDistributeStep; /* unifying all steps */ typedef struct AggregateStep { union { AggregateApplyStep apply; AggregateGroupStep group; AggregateLoadStep load; AggregateLimitStep limit; AggregateSortStep sort; AggregateDistributeStep dist; AggregateQueryStep query; AggregateFilterStep filter; }; AggregateStepType type; struct AggregateStep *next; struct AggregateStep *prev; } AggregateStep; /* A plan is a linked list of all steps */ typedef struct AggregatePlan { const char *index; AggregateStep *head; AggregateStep *tail; int hasCursor; int withSchema; int verbatim; // cursor configuraion struct { size_t count; int maxIdle; } cursor; } AggregatePlan; /* Serialize the plan into an array of string args, to create a command to be sent over the network. * The strings need to be freed with free and the array needs to be freed with array_free(). The * length can be extracted with array_len */ char **AggregatePlan_Serialize(AggregatePlan *plan); /* Build the plan from the parsed command args. Sets the error and return 0 if there's a failure */ int AggregatePlan_Build(AggregatePlan *plan, CmdArg *cmd, char **err); /* Get the estimated schema from the plan, with best effort to guess the types of values based on * function types. The schema can be freed with array_free */ AggregateSchema AggregatePlan_GetSchema(AggregatePlan *plan, RSSortingTable *tbl); AggregateProperty *AggregateSchema_Get(AggregateSchema sc, const char *prop); /* return 1 if a schema contains a property */ int AggregateSchema_Contains(AggregateSchema schema, const char *property); /* Free the plan resources, not the plan itself */ void AggregatePlan_Free(AggregatePlan *plan); /* Print the plan */ void AggregatePlan_Print(AggregatePlan *plan); /* Callback to dump the schema to redis */ int AggregatePlan_DumpSchema(RedisModuleCtx *sctx, QueryProcessingCtx *qpc, void *privdata); #endifRediSearch-1.2.2/src/aggregate/aggregate_request.c000066400000000000000000000261501364126773500221260ustar00rootroot00000000000000#include "aggregate.h" #include "reducer.h" #include "project.h" #include #include #include #include #include #include "functions/function.h" #include static CmdSchemaNode *requestSchema = NULL; CmdSchemaNode *GetAggregateRequestSchema() { return requestSchema; } // validator for property names int validatePropertyName(CmdArg *arg, void *p) { return (CMDARG_TYPE(arg) == CmdArg_String && CMDARG_STRLEN(arg) > 1 && CMDARG_STRPTR(arg)[0] == '@'); } int validatePropertyVector(CmdArg *arg, void *p) { if (CMDARG_TYPE(arg) != CmdArg_Array || CMDARG_ARRLEN(arg) == 0) { return 0; } for (size_t i = 0; i < CMDARG_ARRLEN(arg); i++) { if (!validatePropertyName(CMDARG_ARRELEM(arg, i), NULL)) { return 0; } } return 1; } void Aggregate_BuildSchema() { if (requestSchema) return; /* FT.AGGREGATE {index} FILTER {query} SELECT {nargs} {@field} ... [ GROUPBY {nargs} {property} ... GROUPREDUCE {function} {nargs} {arg} ... [AS {alias}] ... ] [SORTBY {nargs} {property} ... ] [APPLY {expression} [AS {alias}]] [LIMIT {count} {offset}] ... */ // Initialize projection functions registry RegisterMathFunctions(); RegisterStringFunctions(); RegisterDateFunctions(); requestSchema = NewSchema("FT.AGGREGATE", NULL); CmdSchema_AddPostional(requestSchema, "idx", CmdSchema_NewArgAnnotated('s', "index_name"), CmdSchema_Required); CmdSchema_AddPostional(requestSchema, "query", CmdSchema_NewArgAnnotated('s', "query_string"), CmdSchema_Required); CmdSchema_AddFlag(requestSchema, "WITHSCHEMA"); CmdSchema_AddFlag(requestSchema, "VERBATIM"); CmdSchema_AddNamedWithHelp( requestSchema, "LOAD", CmdSchema_Validate(CmdSchema_NewVector('s'), validatePropertyVector, NULL), CmdSchema_Optional, "Optionally load non-sortable properties from the HASH object. Do not use unless as last " "resort, this hurts performance badly."); CmdSchemaNode *grp = CmdSchema_AddSubSchema(requestSchema, "GROUPBY", CmdSchema_Optional | CmdSchema_Repeating, NULL); CmdSchema_AddPostional(grp, "BY", CmdSchema_Validate(CmdSchema_NewVector('s'), validatePropertyVector, NULL), CmdSchema_Required); CmdSchemaNode *red = CmdSchema_AddSubSchema(grp, "REDUCE", CmdSchema_Optional | CmdSchema_Repeating, NULL); CmdSchema_AddPostional(red, "FUNC", CmdSchema_NewArg('s'), CmdSchema_Required); CmdSchema_AddPostional(red, "ARGS", CmdSchema_NewVector('s'), CmdSchema_Required); CmdSchema_AddNamed(red, "AS", CmdSchema_NewArgAnnotated('s', "name"), CmdSchema_Optional); CmdSchemaNode *sort = CmdSchema_AddSubSchema(requestSchema, "SORTBY", CmdSchema_Optional | CmdSchema_Repeating, NULL); CmdSchema_AddPostional(sort, "by", CmdSchema_NewVector('s'), CmdSchema_Required); // SORT can have its own MAX limitation that speeds up things CmdSchema_AddNamed(sort, "MAX", CmdSchema_NewArgAnnotated('l', "num"), CmdSchema_Optional | CmdSchema_Repeating); CmdSchemaNode *prj = CmdSchema_AddSubSchema(requestSchema, "APPLY", CmdSchema_Optional | CmdSchema_Repeating, NULL); CmdSchema_AddPostional(prj, "EXPR", CmdSchema_NewArg('s'), CmdSchema_Required); CmdSchema_AddNamed(prj, "AS", CmdSchema_NewArgAnnotated('s', "name"), CmdSchema_Required); CmdSchema_AddNamed(requestSchema, "LIMIT", CmdSchema_NewTuple("ll", (const char *[]){"offset", "num"}), CmdSchema_Optional | CmdSchema_Repeating); // FILTER expr -> return only results matching post filter CmdSchema_AddNamed(requestSchema, "FILTER", CmdSchema_NewArg('s'), CmdSchema_Optional | CmdSchema_Repeating); CmdSchemaNode *cursorSchema = CmdSchema_AddSubSchema(requestSchema, "WITHCURSOR", CmdSchema_Optional, "Use cursor"); CmdSchema_AddNamed(cursorSchema, "COUNT", CmdSchema_NewArgAnnotated('l', "row_count"), CmdSchema_Optional); CmdSchema_AddNamed(cursorSchema, "MAXIDLE", CmdSchema_NewArgAnnotated('l', "idle_timeout"), CmdSchema_Optional); } CmdArg *Aggregate_ParseRequest(RedisModuleString **argv, int argc, char **err) { CmdArg *ret = NULL; if (CMDPARSE_ERR != CmdParser_ParseRedisModuleCmd(requestSchema, &ret, argv, argc, err, 0)) { return ret; } return NULL; } ResultProcessor *buildGroupBy(AggregateGroupStep *grp, RedisSearchCtx *sctx, ResultProcessor *upstream, char **err) { Grouper *g = NewGrouper(RSMultiKey_Copy(grp->properties, 0), sctx && sctx->spec ? sctx->spec->sortables : NULL); array_foreach(grp->reducers, red, { Reducer *r = GetReducer(sctx, red.reducer, red.alias, red.args, array_len(red.args), err); if (!r) { goto fail; } Grouper_AddReducer(g, r); }); return NewGrouperProcessor(g, upstream); fail: if (sctx && sctx->redisCtx) RedisModule_Log(sctx->redisCtx, "warning", "Error parsing GROUPBY: %s", *err); Grouper_Free(g); return NULL; } ResultProcessor *buildSortBY(AggregateSortStep *srt, ResultProcessor *upstream, char **err) { return NewSorterByFields(RSMultiKey_Copy(srt->keys, 0), srt->ascMap, srt->max, upstream); } ResultProcessor *buildProjection(AggregateApplyStep *a, ResultProcessor *upstream, RedisSearchCtx *sctx, char **err) { return NewProjector(sctx, upstream, a->alias, a->rawExpr, strlen(a->rawExpr), err); } ResultProcessor *buildFilter(AggregateFilterStep *f, ResultProcessor *upstream, RedisSearchCtx *sctx, char **err) { return NewFilter(sctx, upstream, f->rawExpr, strlen(f->rawExpr), err); } ResultProcessor *addLimit(AggregateLimitStep *l, ResultProcessor *upstream, char **err) { if (l->offset < 0 || l->num <= 0) { return SET_ERR(err, "Invalid offset/num for LIMIT"); } return NewPager(upstream, (uint32_t)l->offset, (uint32_t)l->num); } ResultProcessor *buildLoader(ResultProcessor *upstream, RedisSearchCtx *ctx, AggregateLoadStep *ls) { ls->fl = (FieldList){.explicitReturn = 1}; for (int i = 0; i < ls->keys->len; i++) { const char *k = RSKEY(ls->keys->keys[i].key); ReturnedField *rf = FieldList_GetCreateField(&ls->fl, RedisModule_CreateString(ctx->redisCtx, k, strlen(k))); rf->explicitReturn = 1; } return NewLoader(upstream, ctx, &ls->fl); } ResultProcessor *AggregatePlan_BuildProcessorChain(AggregatePlan *plan, RedisSearchCtx *sctx, ResultProcessor *root, char **err) { ResultProcessor *prev = NULL; ResultProcessor *next = root; // Load LOAD based stuff from hash vals // if (getAggregateFields(&plan->opts.fields, plan->ctx->redisCtx, cmd)) { // next = NewLoader(next, plan->ctx, &plan->opts.fields); // } // Walk the children and evaluate them AggregateStep *current = plan->head; const char *key; while (current) { prev = next; switch (current->type) { case AggregateStep_Group: next = buildGroupBy(¤t->group, sctx, next, err); break; case AggregateStep_Sort: next = buildSortBY(¤t->sort, next, err); break; case AggregateStep_Apply: next = buildProjection(¤t->apply, next, sctx, err); break; case AggregateStep_Limit: next = addLimit(¤t->limit, next, err); break; case AggregateStep_Filter: next = buildFilter(¤t->filter, next, sctx, err); break; case AggregateStep_Load: if (current->load.keys->len > 0 && sctx != NULL) { next = buildLoader(next, sctx, ¤t->load); } break; case AggregateStep_Distribute: case AggregateStep_Dummy: case AggregateStep_Query: break; } current = current->next; if (!next) { goto fail; } } return next; fail: if (prev) { ResultProcessor_Free(prev); } if (sctx && sctx->redisCtx) RedisModule_Log(sctx->redisCtx, "warning", "Could not parse aggregate request: %s", *err); return NULL; } ResultProcessor *Aggregate_DefaultChainBuilder(QueryPlan *plan, void *ctx, char **err) { AggregatePlan *ap = ctx; // The base processor translates index results into search results ResultProcessor *root = NewBaseProcessor(plan, &plan->execCtx); if (!root) return NULL; return AggregatePlan_BuildProcessorChain(ap, plan->ctx, root, err); } int AggregateRequest_Start(AggregateRequest *req, RedisSearchCtx *sctx, const AggregateRequestSettings *settings, RedisModuleString **argv, int argc, char **err) { req->args = Aggregate_ParseRequest(argv, argc, (char **)err); if (!req->args) { SET_ERR(err, "Could not parse aggregate request"); return REDISMODULE_ERR; } req->ap = (AggregatePlan){}; if (!AggregatePlan_Build(&req->ap, req->args, (char **)err)) { SET_ERR(err, "Could not build aggregate plan"); return REDISMODULE_ERR; } RedisModuleCtx *ctx = sctx->redisCtx; CmdString *str = &CMDARG_STR(CmdArg_FirstOf(req->args, "query")); RSSearchOptions opts = RS_DEFAULT_SEARCHOPTS; // mark the query as an aggregation query opts.flags |= Search_AggregationQuery; // pass VERBATIM to the aggregate query if (req->ap.verbatim) { opts.flags |= Search_Verbatim; } if (settings->flags & AGGREGATE_REQUEST_NO_CONCURRENT) { opts.concurrentMode = 0; } if (settings->flags & AGGREGATE_REQUEST_NO_PARSE_QUERY) { req->parseCtx = NULL; } else { req->parseCtx = NewQueryParseCtx(sctx, str->str, str->len, &opts); if (!Query_Parse(req->parseCtx, (char **)err)) { SET_ERR(err, "Unknown error"); return REDISMODULE_ERR; } if (!req->ap.verbatim) { Query_Expand(req->parseCtx, opts.expander); } } req->plan = Query_BuildPlan(sctx, req->parseCtx, &opts, settings->pcb, &req->ap, (char **)err); if (!req->plan) { SET_ERR(err, QUERY_ERROR_INTERNAL_STR); return REDISMODULE_ERR; } if (req->ap.withSchema) { AggregateSchema sc = AggregatePlan_GetSchema(&req->ap, SEARCH_CTX_SORTABLES(req->plan->ctx)); QueryPlan_SetHook(req->plan, QueryPlanHook_Pre, AggregatePlan_DumpSchema, sc, array_free); } return REDISMODULE_OK; } void AggregateRequest_Run(AggregateRequest *req, RedisModuleCtx *outCtx) { QueryPlan_Run(req->plan, outCtx); } void AggregateRequest_Free(AggregateRequest *req) { if (req->plan) { if (req->plan->opts.fields.numFields) { FieldList_Free(&req->plan->opts.fields); } QueryPlan_Free(req->plan); } if (req->parseCtx) { Query_Free(req->parseCtx); } AggregatePlan_Free(&req->ap); if (req->args) { CmdArg_Free(req->args); } if (req->isHeapAlloc) { rm_free(req); } } AggregateRequest *AggregateRequest_Persist(AggregateRequest *req) { AggregateRequest *ret = rm_malloc(sizeof(*ret)); *ret = *req; ret->isHeapAlloc = 1; return ret; }RediSearch-1.2.2/src/aggregate/expr/000077500000000000000000000000001364126773500172365ustar00rootroot00000000000000RediSearch-1.2.2/src/aggregate/expr/Makefile000066400000000000000000000001401364126773500206710ustar00rootroot00000000000000SRCUTIL = ../../../srcutil PARSER_SYMBOL_PREFIX=RSExprParser include $(SRCUTIL)/make-parser.mk RediSearch-1.2.2/src/aggregate/expr/expression.c000066400000000000000000000234021364126773500216020ustar00rootroot00000000000000#include #include "expression.h" #include "result_processor.h" #include "util/arr.h" #define arglist_sizeof(l) (sizeof(RSArgList) + ((l) * sizeof(RSExpr *))) RSArgList *RS_NewArgList(RSExpr *e) { RSArgList *ret = malloc(arglist_sizeof(e ? 1 : 0)); ret->len = e ? 1 : 0; if (e) ret->args[0] = e; return ret; } RSArgList *RSArgList_Append(RSArgList *l, RSExpr *e) { l = realloc(l, arglist_sizeof(l->len + 1)); l->args[l->len++] = e; return l; } static RSExpr *newExpr(RSExprType t) { RSExpr *e = malloc(sizeof(*e)); e->t = t; return e; } // unquote and unescape a stirng literal, and return a cleaned copy of it char *unescpeStringDup(const char *s, size_t sz) { char *dst = malloc(sz); char *dstStart = dst; char *src = (char *)s + 1; // we start after the first quote char *end = (char *)s + sz - 1; // we end at the last quote while (src < end) { // unescape if (*src == '\\' && src + 1 < end && (ispunct(*(src + 1)) || isspace(*(src + 1)))) { ++src; continue; } *dst++ = *src++; } *dst = '\0'; return dstStart; } RSExpr *RS_NewStringLiteral(const char *str, size_t len) { RSExpr *e = newExpr(RSExpr_Literal); e->literal = RS_StaticValue(RSValue_String); e->literal.strval.str = unescpeStringDup(str, len); e->literal.strval.len = strlen(e->literal.strval.str); e->literal.strval.stype = RSString_Malloc; return e; } RSExpr *RS_NewNullLiteral() { RSExpr *e = newExpr(RSExpr_Literal); RSValue_MakeReference(&e->literal, RS_NullVal()); return e; } RSExpr *RS_NewNumberLiteral(double n) { RSExpr *e = newExpr(RSExpr_Literal); e->literal = RS_StaticValue(RSValue_Number); e->literal.numval = n; return e; } RSExpr *RS_NewOp(unsigned char op, RSExpr *left, RSExpr *right) { RSExpr *e = newExpr(RSExpr_Op); e->op.op = op; e->op.left = left; e->op.right = right; return e; } RSExpr *RS_NewPredicate(RSCondition cond, RSExpr *left, RSExpr *right) { RSExpr *e = newExpr(RSExpr_Predicate); e->pred = (RSPredicate){ .cond = cond, .left = left, .right = right, }; return e; } RSExpr *RS_NewFunc(const char *str, size_t len, RSArgList *args, RSFunction cb) { RSExpr *e = newExpr(RSExpr_Function); e->func.args = args; e->func.name = strndup(str, len); e->func.Call = cb; return e; } RSExpr *RS_NewProp(const char *str, size_t len) { RSExpr *e = newExpr(RSExpr_Property); e->property.key = strndup(str, len); e->property.sortableIdx = RSKEY_UNCACHED; e->property.fieldIdx = RSKEY_UNCACHED; return e; } void RSArgList_Free(RSArgList *l) { if (!l) return; for (size_t i = 0; i < l->len; i++) { RSExpr_Free(l->args[i]); } free(l); } void RSExpr_Free(RSExpr *e) { if (!e) return; switch (e->t) { case RSExpr_Literal: RSValue_Free(&e->literal); break; case RSExpr_Function: free((char *)e->func.name); RSArgList_Free(e->func.args); break; case RSExpr_Op: RSExpr_Free(e->op.left); RSExpr_Free(e->op.right); break; case RSExpr_Predicate: RSExpr_Free(e->pred.left); RSExpr_Free(e->pred.right); break; case RSExpr_Property: free((char *)e->property.key); break; } free(e); } void RSExpr_Print(RSExpr *e) { if (!e) { printf("NULL"); return; } switch (e->t) { case RSExpr_Literal: RSValue_Print(&e->literal); break; case RSExpr_Function: printf("%s(", e->func.name); for (size_t i = 0; e->func.args != NULL && i < e->func.args->len; i++) { RSExpr_Print(e->func.args->args[i]); if (i < e->func.args->len - 1) printf(", "); } printf(")"); break; case RSExpr_Op: printf("("); RSExpr_Print(e->op.left); printf(" %c ", e->op.op); RSExpr_Print(e->op.right); printf(")"); break; case RSExpr_Predicate: // NOT of a single predicate if (e->pred.cond == RSCondition_Not) { printf("!"); RSExpr_Print(e->pred.left); return; } printf("("); RSExpr_Print(e->pred.left); printf(" %s ", RSConditionStrings[e->pred.cond]); RSExpr_Print(e->pred.right); printf(")"); break; case RSExpr_Property: printf("@%s", e->property.key); } } static inline int evalFunc(RSExprEvalCtx *ctx, RSFunctionExpr *f, RSValue *result, char **err) { RSValue args[f->args->len]; for (size_t i = 0; i < f->args->len; i++) { args[i] = RSVALUE_STATIC; if (RSExpr_Eval(ctx, f->args->args[i], &args[i], err) == EXPR_EVAL_ERR) { // TODO: Free other results return EXPR_EVAL_ERR; } } int rc = f->Call(ctx->fctx, result, args, f->args->len, err); for (size_t i = 0; i < f->args->len; i++) { RSValue_Free(&args[i]); } return rc; } static int evalOp(RSExprEvalCtx *ctx, RSExprOp *op, RSValue *result, char **err) { RSValue l = RSVALUE_STATIC, r = RSVALUE_STATIC; if (RSExpr_Eval(ctx, op->left, &l, err) == EXPR_EVAL_ERR) { return EXPR_EVAL_ERR; } if (RSExpr_Eval(ctx, op->right, &r, err) == EXPR_EVAL_ERR) { return EXPR_EVAL_ERR; } double n1, n2; int rc = EXPR_EVAL_OK; if (!RSValue_ToNumber(&l, &n1) || !RSValue_ToNumber(&r, &n2)) { // asprintf(err, "Invalid values for op '%c'", op->op); rc = EXPR_EVAL_ERR; goto cleanup; } double res; switch (op->op) { case '+': res = n1 + n2; break; case '/': res = n1 / n2; break; case '-': res = n1 - n2; break; case '*': res = n1 * n2; break; case '%': res = (long long)n1 % (long long)n2; break; case '^': res = pow(n1, n2); break; default: res = NAN; } result->numval = res; result->t = RSValue_Number; cleanup: RSValue_Free(&l); RSValue_Free(&r); return rc; } static int evalPredicate(RSExprEvalCtx *ctx, RSPredicate *pred, RSValue *result, char **err) { RSValue l = RSVALUE_STATIC, r = RSVALUE_STATIC; if (RSExpr_Eval(ctx, pred->left, &l, err) == EXPR_EVAL_ERR) { return EXPR_EVAL_ERR; } if (pred->right && RSExpr_Eval(ctx, pred->right, &r, err) == EXPR_EVAL_ERR) { return EXPR_EVAL_ERR; } RSValue* l_ptr = RSValue_Dereference(&l); RSValue* r_ptr = RSValue_Dereference(&r); int res; if(l_ptr->t == RSValue_Null || r_ptr->t == RSValue_Null){ // NULL are not comparable res = 0; }else switch (pred->cond) { case RSCondition_Eq: res = RSValue_Equal(&l, &r); break; case RSCondition_Lt: res = RSValue_Cmp(&l, &r) < 0; break; /* Less than or equal, <= */ case RSCondition_Le: res = RSValue_Cmp(&l, &r) <= 0; break; /* Greater than, > */ case RSCondition_Gt: res = RSValue_Cmp(&l, &r) > 0; break; /* Greater than or equal, >= */ case RSCondition_Ge: res = RSValue_Cmp(&l, &r) >= 0; break; /* Not equal, != */ case RSCondition_Ne: res = !RSValue_Equal(&l, &r); break; /* Logical AND of 2 expressions, && */ case RSCondition_And: res = RSValue_BoolTest(&l) && RSValue_BoolTest(&r); break; /* Logical OR of 2 expressions, || */ case RSCondition_Or: res = RSValue_BoolTest(&l) || RSValue_BoolTest(&r); break; case RSCondition_Not: res = RSValue_BoolTest(&l) == 0; break; } result->numval = res; result->t = RSValue_Number; RSValue_Free(&l); RSValue_Free(&r); return EXPR_EVAL_OK; } static inline int evalProperty(RSExprEvalCtx *ctx, RSKey *k, RSValue *result, char **err) { RSValue_MakeReference(result, SearchResult_GetValue(ctx->r, ctx->sortables, k)); return EXPR_EVAL_OK; } int RSExpr_Eval(RSExprEvalCtx *ctx, RSExpr *e, RSValue *result, char **err) { if (!e) { return EXPR_EVAL_ERR; } switch (e->t) { case RSExpr_Property: return evalProperty(ctx, &e->property, result, err); case RSExpr_Literal: RSValue_MakeReference(result, &e->literal); return EXPR_EVAL_OK; case RSExpr_Function: return evalFunc(ctx, &e->func, result, err); case RSExpr_Op: return evalOp(ctx, &e->op, result, err); case RSExpr_Predicate: return evalPredicate(ctx, &e->pred, result, err); } return EXPR_EVAL_ERR; } void expr_GetFieldsInternal(RSExpr *expr, const char ***arr) { if (!expr) { return; } switch (expr->t) { case RSExpr_Property: *arr = array_append(*arr, expr->property.key); break; case RSExpr_Function: for (size_t i = 0; i < expr->func.args->len; i++) { expr_GetFieldsInternal(expr->func.args->args[i], arr); } break; case RSExpr_Op: expr_GetFieldsInternal(expr->op.left, arr); expr_GetFieldsInternal(expr->op.right, arr); break; case RSExpr_Predicate: expr_GetFieldsInternal(expr->pred.left, arr); expr_GetFieldsInternal(expr->pred.right, arr); break; default: break; } } /* Return all the field names needed by the expression. Returns an array that should be freed with * array_free */ const char **Expr_GetRequiredFields(RSExpr *expr) { const char **ret = array_new(const char *, 2); expr_GetFieldsInternal(expr, &ret); return ret; } /* Get the return type of an expression. In the case of a property we do not try to guess but * rather just return String */ RSValueType GetExprType(RSExpr *expr, RSSortingTable *tbl) { if (!expr) return RSValue_Null; switch (expr->t) { case RSExpr_Function: return RSFunctionRegistry_GetType(expr->func.name, strlen(expr->func.name)); break; case RSExpr_Op: return RSValue_Number; case RSExpr_Predicate: return RSValue_Number; case RSExpr_Literal: return expr->literal.t; case RSExpr_Property: { // best effort based on sorting table, default to string // safe if tbl is null return SortingTable_GetFieldType(tbl, RSKEY(expr->property.key), RSValue_String); } } } RediSearch-1.2.2/src/aggregate/expr/expression.h000066400000000000000000000064431364126773500216150ustar00rootroot00000000000000#ifndef RS_AGG_EXPRESSION_H_ #define RS_AGG_EXPRESSION_H_ #include #include #include #include #include typedef struct { char *err; int code; int errAllocated; } RSError; /* Expression type enum */ typedef enum { /* Literal constant expression */ RSExpr_Literal, /* Property from the result (e.g. @foo) */ RSExpr_Property, /* Arithmetic operator, e.g. @foo+@bar */ RSExpr_Op, /* Built-in function call */ RSExpr_Function, /* Predicate expression, e.g. @foo == 3 */ RSExpr_Predicate, } RSExprType; struct RSExpr; typedef struct { unsigned char op; struct RSExpr *left; struct RSExpr *right; } RSExprOp; typedef enum { /* Equality, == */ RSCondition_Eq, /* Less than, < */ RSCondition_Lt, /* Less than or equal, <= */ RSCondition_Le, /* Greater than, > */ RSCondition_Gt, /* Greater than or equal, >= */ RSCondition_Ge, /* Not equal, != */ RSCondition_Ne, /* Logical AND of 2 expressions, && */ RSCondition_And, /* Logical OR of 2 expressions, || */ RSCondition_Or, /* Logical NOT of the left expression only */ RSCondition_Not, } RSCondition; static const char *RSConditionStrings[] = { [RSCondition_Eq] = "==", [RSCondition_Lt] = "<", [RSCondition_Le] = "<=", [RSCondition_Gt] = ">", [RSCondition_Ge] = ">=", [RSCondition_Ne] = "!=", [RSCondition_And] = "&&", [RSCondition_Or] = "||", [RSCondition_Not] = "!", }; typedef struct { struct RSExpr *left; struct RSExpr *right; RSCondition cond; } RSPredicate; typedef struct { size_t len; struct RSExpr *args[]; } RSArgList; typedef struct { const char *name; RSArgList *args; RSFunction Call; } RSFunctionExpr; typedef struct RSExpr { union { RSExprOp op; RSValue literal; RSFunctionExpr func; RSKey property; RSPredicate pred; }; RSExprType t; } RSExpr; typedef struct { SearchResult *r; RSSortingTable *sortables; RedisSearchCtx *sctx; RSFunctionEvalCtx *fctx; } RSExprEvalCtx; #define EXPR_EVAL_ERR 1 #define EXPR_EVAL_OK 0 int RSExpr_Eval(RSExprEvalCtx *ctx, RSExpr *e, RSValue *result, char **err); RSArgList *RS_NewArgList(RSExpr *e); void RSArgList_Free(RSArgList *l); RSArgList *RSArgList_Append(RSArgList *l, RSExpr *e); RSExpr *RS_NewStringLiteral(const char *str, size_t len); RSExpr *RS_NewNullLiteral(); RSExpr *RS_NewNumberLiteral(double n); RSExpr *RS_NewOp(unsigned char op, RSExpr *left, RSExpr *right); RSExpr *RS_NewFunc(const char *str, size_t len, RSArgList *args, RSFunction cb); RSExpr *RS_NewProp(const char *str, size_t len); RSExpr *RS_NewPredicate(RSCondition cond, RSExpr *left, RSExpr *right); void RSExpr_Free(RSExpr *expr); void RSExpr_Print(RSExpr *expr); /* Parse an expression string, returning a prased expression tree on success. On failure (syntax * err, etc) we set and error in err, and return NULL */ RSExpr *RSExpr_Parse(const char *expr, size_t len, char **err); /* Get the return type of an expression. In the case of a property we do not try to guess but rather * just return String */ RSValueType GetExprType(RSExpr *expr, RSSortingTable *tbl); /* Return all the field names needed by the expression. Returns an array that should be freed with * array_free */ const char **Expr_GetRequiredFields(RSExpr *expr); #endifRediSearch-1.2.2/src/aggregate/expr/lexer.c000066400000000000000000000320051364126773500205210ustar00rootroot00000000000000 #line 1 "lexer.rl" #include #include #include #include #include #include "parser.h" #include "expression.h" #include "token.h" /* forward declarations of stuff generated by lemon */ void RSExprParser_Parse(void *yyp, int yymajor, RSExprToken yyminor, RSExprParseCtx *ctx); void *RSExprParser_ParseAlloc(void *(*mallocProc)(size_t)); void RSExprParser_ParseFree(void *p, void (*freeProc)(void *)); #line 246 "lexer.rl" #line 25 "lexer.c" static const char _expr_actions[] = { 0, 1, 0, 1, 1, 1, 2, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 2, 2, 3, 2, 2, 4, 2, 2, 5, 2, 2, 6, 2, 2, 7, 2, 2, 8 }; static const unsigned char _expr_key_offsets[] = { 0, 0, 3, 5, 8, 10, 14, 18, 19, 20, 22, 32, 73, 74, 77, 78, 82, 85, 86, 89, 92, 94, 95, 96, 97, 107, 114, 122, 129 }; static const char _expr_trans_keys[] = { 10, 34, 92, 34, 92, 10, 39, 92, 39, 92, 10, 39, 92, 110, 10, 39, 92, 102, 110, 102, 48, 57, 9, 13, 32, 47, 58, 64, 91, 96, 123, 126, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 44, 45, 47, 60, 61, 62, 64, 94, 105, 124, 127, 0, 8, 9, 13, 14, 31, 35, 46, 48, 57, 58, 63, 65, 90, 91, 96, 97, 122, 123, 126, 61, 10, 34, 92, 38, 10, 39, 92, 105, 10, 39, 92, 105, 105, 48, 57, 46, 48, 57, 48, 57, 61, 61, 61, 92, 96, 0, 47, 58, 64, 91, 94, 123, 127, 95, 48, 57, 65, 90, 97, 122, 95, 110, 48, 57, 65, 90, 97, 122, 95, 48, 57, 65, 90, 97, 122, 124, 0 }; static const char _expr_single_lengths[] = { 0, 3, 2, 3, 2, 4, 4, 1, 1, 0, 0, 21, 1, 3, 1, 4, 3, 1, 1, 1, 0, 1, 1, 1, 2, 1, 2, 1, 1 }; static const char _expr_range_lengths[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 5, 10, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 4, 3, 3, 3, 0 }; static const unsigned char _expr_index_offsets[] = { 0, 0, 4, 7, 11, 14, 19, 24, 26, 28, 30, 36, 68, 70, 74, 76, 81, 85, 87, 90, 93, 95, 97, 99, 101, 108, 113, 119, 124 }; static const char _expr_indicies[] = { 0, 2, 3, 1, 4, 3, 1, 0, 2, 6, 5, 7, 6, 5, 8, 2, 6, 9, 5, 8, 2, 6, 10, 5, 11, 0, 12, 0, 14, 13, 15, 15, 15, 15, 15, 0, 18, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33, 34, 35, 36, 38, 39, 40, 16, 16, 18, 16, 21, 32, 21, 37, 21, 37, 21, 17, 42, 41, 0, 2, 3, 1, 44, 43, 43, 2, 6, 45, 5, 0, 2, 6, 5, 47, 46, 47, 32, 48, 50, 32, 49, 14, 49, 52, 51, 53, 43, 55, 54, 56, 0, 0, 0, 0, 0, 15, 37, 37, 37, 37, 57, 37, 58, 37, 37, 37, 57, 37, 37, 37, 37, 57, 59, 43, 0 }; static const char _expr_trans_targs[] = { 11, 1, 11, 2, 13, 3, 4, 16, 11, 6, 16, 8, 11, 11, 20, 24, 11, 0, 11, 12, 13, 11, 11, 14, 15, 11, 11, 11, 17, 11, 18, 11, 19, 21, 22, 23, 24, 25, 11, 26, 28, 11, 11, 11, 11, 5, 11, 7, 11, 11, 9, 11, 11, 11, 11, 11, 10, 11, 27, 11 }; static const char _expr_trans_actions[] = { 63, 0, 35, 0, 77, 0, 0, 77, 61, 0, 68, 0, 7, 59, 0, 65, 41, 0, 37, 0, 80, 39, 25, 0, 80, 9, 11, 31, 74, 33, 71, 29, 5, 0, 0, 0, 80, 0, 27, 0, 0, 53, 19, 57, 21, 0, 55, 0, 47, 43, 0, 49, 13, 17, 51, 15, 0, 45, 0, 23 }; static const char _expr_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const char _expr_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned char _expr_eof_trans[] = { 0, 1, 1, 1, 1, 9, 9, 1, 1, 14, 1, 0, 42, 1, 44, 44, 1, 47, 49, 50, 50, 52, 44, 55, 1, 58, 58, 58, 44 }; static const int expr_start = 11; static const int expr_first_final = 11; static const int expr_error = 0; static const int expr_en_main = 11; #line 249 "lexer.rl" RSExpr *RSExpr_Parse(const char *expr, size_t len, char **err) { RSExprParseCtx ctx = { .raw = expr, .len = len, .errorMsg = NULL, .root = NULL, .ok = 1, }; void *pParser = RSExprParser_ParseAlloc(malloc); int cs, act; const char* ts = ctx.raw; const char* te = ctx.raw + ctx.len; #line 176 "lexer.c" { cs = expr_start; ts = 0; te = 0; act = 0; } #line 267 "lexer.rl" RSExprToken tok = {.len = 0, .pos = 0, .s = 0, .numval = 0}; //parseCtx ctx = {.root = NULL, .ok = 1, .errorMsg = NULL, .q = q}; const char* p = ctx.raw; const char* pe = ctx.raw + ctx.len; const char* eof = pe; #line 193 "lexer.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _acts = _expr_actions + _expr_from_state_actions[cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 1: #line 1 "NONE" {ts = p;} break; #line 214 "lexer.c" } } _keys = _expr_trans_keys + _expr_key_offsets[cs]; _trans = _expr_index_offsets[cs]; _klen = _expr_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _expr_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: _trans = _expr_indicies[_trans]; _eof_trans: cs = _expr_trans_targs[_trans]; if ( _expr_trans_actions[_trans] == 0 ) goto _again; _acts = _expr_actions + _expr_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 2: #line 1 "NONE" {te = p+1;} break; case 3: #line 66 "lexer.rl" {act = 2;} break; case 4: #line 86 "lexer.rl" {act = 4;} break; case 5: #line 114 "lexer.rl" {act = 7;} break; case 6: #line 185 "lexer.rl" {act = 17;} break; case 7: #line 230 "lexer.rl" {act = 23;} break; case 8: #line 243 "lexer.rl" {act = 25;} break; case 9: #line 86 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; tok.s = ts; tok.len = te-ts; tok.numval = *ts == '-' ? -INFINITY : INFINITY; RSExprParser_Parse(pParser, NUMBER, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 10: #line 98 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, LP, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 11: #line 106 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, RP, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 12: #line 128 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, LE, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 13: #line 142 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, GE, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 14: #line 149 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, EQ, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 15: #line 163 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NE, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 16: #line 170 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, AND, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 17: #line 177 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, OR, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 18: #line 192 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, MOD, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 19: #line 199 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, POW, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 20: #line 206 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, DIVIDE, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 21: #line 214 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, TIMES, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 22: #line 221 "lexer.rl" {te = p+1;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, COMMA, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 23: #line 230 "lexer.rl" {te = p+1;{ tok.len = te-ts; tok.s = ts; tok.numval = 0; tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, STRING, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 24: #line 242 "lexer.rl" {te = p+1;} break; case 25: #line 243 "lexer.rl" {te = p+1;} break; case 26: #line 244 "lexer.rl" {te = p+1;} break; case 27: #line 53 "lexer.rl" {te = p;p--;{ tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NUMBER, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 28: #line 76 "lexer.rl" {te = p;p--;{ tok.pos = ts-ctx.raw; tok.len = te - ts; tok.s = ts; RSExprParser_Parse(pParser, SYMBOL, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 29: #line 114 "lexer.rl" {te = p;p--;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, MINUS, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 30: #line 121 "lexer.rl" {te = p;p--;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, LT, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 31: #line 135 "lexer.rl" {te = p;p--;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, GT, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 32: #line 156 "lexer.rl" {te = p;p--;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NOT, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 33: #line 185 "lexer.rl" {te = p;p--;{ tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, PLUS, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 34: #line 243 "lexer.rl" {te = p;p--;} break; case 35: #line 53 "lexer.rl" {{p = ((te))-1;}{ tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NUMBER, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } }} break; case 36: #line 243 "lexer.rl" {{p = ((te))-1;}} break; case 37: #line 1 "NONE" { switch( act ) { case 2: {{p = ((te))-1;} tok.pos = ts-ctx.raw; tok.len = te - (ts + 1); tok.s = ts+1; RSExprParser_Parse(pParser, PROPERTY, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } } break; case 4: {{p = ((te))-1;} tok.pos = ts-ctx.raw; tok.s = ts; tok.len = te-ts; tok.numval = *ts == '-' ? -INFINITY : INFINITY; RSExprParser_Parse(pParser, NUMBER, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } } break; case 7: {{p = ((te))-1;} tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, MINUS, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } } break; case 17: {{p = ((te))-1;} tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, PLUS, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } } break; case 23: {{p = ((te))-1;} tok.len = te-ts; tok.s = ts; tok.numval = 0; tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, STRING, tok, &ctx); if (!ctx.ok) { {p++; goto _out; } } } break; default: {{p = ((te))-1;}} break; } } break; #line 644 "lexer.c" } } _again: _acts = _expr_actions + _expr_to_state_actions[cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 1 "NONE" {ts = 0;} break; #line 657 "lexer.c" } } if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { if ( _expr_eof_trans[cs] > 0 ) { _trans = _expr_eof_trans[cs] - 1; goto _eof_trans; } } _out: {} } #line 275 "lexer.rl" if (ctx.ok) { RSExprParser_Parse(pParser, 0, tok, &ctx); } else if (ctx.root) { RSExpr_Free(ctx.root); ctx.root = NULL; } RSExprParser_ParseFree(pParser, free); if (err) { *err = ctx.errorMsg; } return ctx.root; } RediSearch-1.2.2/src/aggregate/expr/lexer.rl000066400000000000000000000125131364126773500207160ustar00rootroot00000000000000#include #include #include #include #include #include "parser.h" #include "expression.h" #include "token.h" /* forward declarations of stuff generated by lemon */ void RSExprParser_Parse(void *yyp, int yymajor, RSExprToken yyminor, RSExprParseCtx *ctx); void *RSExprParser_ParseAlloc(void *(*mallocProc)(size_t)); void RSExprParser_ParseFree(void *p, void (*freeProc)(void *)); %%{ machine expr; inf = ['+\-']? 'inf' $ 3; number = '-'? digit+('.' digit+)? $ 2; lp = '('; rp = ')'; minus = '-'; plus = '+'; div = '/'; times = '*'; mod = '%'; pow = '^'; comma = ','; escape = '\\'; quote = '"'; squote = "'"; eq = '=='; not = '!'; ne = '!='; lt = '<'; le = '<='; gt = '>'; ge = '>='; land = '&&'; lor = '||'; escaped_character = escape (punct | space | escape); string_literal = (quote . ((any - quote - '\n' )|escaped_character)* . quote) | (squote . ((any - squote - '\n' )|escaped_character)* . squote); symbol = alpha.(alnum|'_')* $0; property = '@'.(((any - (punct | cntrl | space | escape)) | escaped_character) | '_')+ $ 1; main := |* number => { tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NUMBER, tok, &ctx); if (!ctx.ok) { fbreak; } }; property => { tok.pos = ts-ctx.raw; tok.len = te - (ts + 1); tok.s = ts+1; RSExprParser_Parse(pParser, PROPERTY, tok, &ctx); if (!ctx.ok) { fbreak; } }; symbol => { tok.pos = ts-ctx.raw; tok.len = te - ts; tok.s = ts; RSExprParser_Parse(pParser, SYMBOL, tok, &ctx); if (!ctx.ok) { fbreak; } }; inf => { tok.pos = ts-ctx.raw; tok.s = ts; tok.len = te-ts; tok.numval = *ts == '-' ? -INFINITY : INFINITY; RSExprParser_Parse(pParser, NUMBER, tok, &ctx); if (!ctx.ok) { fbreak; } }; lp => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, LP, tok, &ctx); if (!ctx.ok) { fbreak; } }; rp => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, RP, tok, &ctx); if (!ctx.ok) { fbreak; } }; minus => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, MINUS, tok, &ctx); if (!ctx.ok) { fbreak; } }; lt => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, LT, tok, &ctx); if (!ctx.ok) { fbreak; } }; le => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, LE, tok, &ctx); if (!ctx.ok) { fbreak; } }; gt => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, GT, tok, &ctx); if (!ctx.ok) { fbreak; } }; ge => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, GE, tok, &ctx); if (!ctx.ok) { fbreak; } }; eq => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, EQ, tok, &ctx); if (!ctx.ok) { fbreak; } }; not => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NOT, tok, &ctx); if (!ctx.ok) { fbreak; } }; ne => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, NE, tok, &ctx); if (!ctx.ok) { fbreak; } }; land => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, AND, tok, &ctx); if (!ctx.ok) { fbreak; } }; lor => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, OR, tok, &ctx); if (!ctx.ok) { fbreak; } }; plus => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, PLUS, tok, &ctx); if (!ctx.ok) { fbreak; } }; mod => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, MOD, tok, &ctx); if (!ctx.ok) { fbreak; } }; pow => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, POW, tok, &ctx); if (!ctx.ok) { fbreak; } }; div => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, DIVIDE, tok, &ctx); if (!ctx.ok) { fbreak; } }; times => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, TIMES, tok, &ctx); if (!ctx.ok) { fbreak; } }; comma => { tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, COMMA, tok, &ctx); if (!ctx.ok) { fbreak; } }; string_literal => { tok.len = te-ts; tok.s = ts; tok.numval = 0; tok.pos = ts-ctx.raw; RSExprParser_Parse(pParser, STRING, tok, &ctx); if (!ctx.ok) { fbreak; } }; space; punct; cntrl; *|; }%% %% write data; RSExpr *RSExpr_Parse(const char *expr, size_t len, char **err) { RSExprParseCtx ctx = { .raw = expr, .len = len, .errorMsg = NULL, .root = NULL, .ok = 1, }; void *pParser = RSExprParser_ParseAlloc(malloc); int cs, act; const char* ts = ctx.raw; const char* te = ctx.raw + ctx.len; %% write init; RSExprToken tok = {.len = 0, .pos = 0, .s = 0, .numval = 0}; //parseCtx ctx = {.root = NULL, .ok = 1, .errorMsg = NULL, .q = q}; const char* p = ctx.raw; const char* pe = ctx.raw + ctx.len; const char* eof = pe; %% write exec; if (ctx.ok) { RSExprParser_Parse(pParser, 0, tok, &ctx); } else if (ctx.root) { RSExpr_Free(ctx.root); ctx.root = NULL; } RSExprParser_ParseFree(pParser, free); if (err) { *err = ctx.errorMsg; } return ctx.root; } RediSearch-1.2.2/src/aggregate/expr/parser-toplevel.c000066400000000000000000000005071364126773500225300ustar00rootroot00000000000000#define Parse RSExprParser_Parse #define ParseTrace RSExprParser_ParseTrace #define ParseAlloc RSExprParser_ParseAlloc #define ParseFree RSExprParser_ParseFree #define ParseInit RSExprParser_ParseInit #define ParseFinalize RSExprParser_ParseFinalize #define ParseStackPeack RSExprParser_ParseStackPeack #include "parser.c.inc" RediSearch-1.2.2/src/aggregate/expr/parser.c.inc000066400000000000000000001436001364126773500214520ustar00rootroot00000000000000/* ** 2000-05-29 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Driver template for the LEMON parser generator. ** ** The "lemon" program processes an LALR(1) input grammar file, then uses ** this template to construct a parser. The "lemon" program inserts text ** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the ** interstitial "-" characters) contained in this template is changed into ** the value of the %name directive from the grammar. Otherwise, the content ** of this template is copied straight through into the generate parser ** source file. ** ** The following is the concatenation of all %include directives from the ** input grammar file: */ #include /************ Begin %include sections from the grammar ************************/ #line 31 "parser.y" #include "token.h" #include "expression.h" #include "parser.h" #line 34 "parser.c" /**************** End of %include directives **********************************/ /* These constants specify the various numeric values for terminal symbols ** in a format understandable to "makeheaders". This section is blank unless ** "lemon" is run with the "-m" command-line option. ***************** Begin makeheaders token definitions *************************/ /**************** End makeheaders token definitions ***************************/ /* The next sections is a series of control #defines. ** various aspects of the generated parser. ** YYCODETYPE is the data type used to store the integer codes ** that represent terminal and non-terminal symbols. ** "unsigned char" is used if there are fewer than ** 256 symbols. Larger types otherwise. ** YYNOCODE is a number of type YYCODETYPE that is not used for ** any terminal or nonterminal symbol. ** YYFALLBACK If defined, this indicates that one or more tokens ** (also known as: "terminal symbols") have fall-back ** values which should be used if the original symbol ** would not parse. This permits keywords to sometimes ** be used as identifiers, for example. ** YYACTIONTYPE is the data type used for "action codes" - numbers ** that indicate what to do in response to the next ** token. ** RSExprParser_ParseTOKENTYPE is the data type used for minor type for terminal ** symbols. Background: A "minor type" is a semantic ** value associated with a terminal or non-terminal ** symbols. For example, for an "ID" terminal symbol, ** the minor type might be the name of the identifier. ** Each non-terminal can have a different minor type. ** Terminal symbols all have the same minor type, though. ** This macros defines the minor type for terminal ** symbols. ** YYMINORTYPE is the data type used for all minor types. ** This is typically a union of many types, one of ** which is RSExprParser_ParseTOKENTYPE. The entry in the union ** for terminal symbols is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. If ** zero the stack is dynamically sized using realloc() ** RSExprParser_ParseARG_SDECL A static variable declaration for the %extra_argument ** RSExprParser_ParseARG_PDECL A parameter declaration for the %extra_argument ** RSExprParser_ParseARG_PARAM Code to pass %extra_argument as a subroutine parameter ** RSExprParser_ParseARG_STORE Code to store %extra_argument into yypParser ** RSExprParser_ParseARG_FETCH Code to extract %extra_argument from yypParser ** RSExprParser_ParseCTX_* As RSExprParser_ParseARG_ except for %extra_context ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar ** YYNTOKEN Number of terminal symbols ** YY_MAX_SHIFT Maximum value for shift actions ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions ** YY_ERROR_ACTION The yy_action[] code for syntax error ** YY_ACCEPT_ACTION The yy_action[] code for accept ** YY_NO_ACTION The yy_action[] code for no-op ** YY_MIN_REDUCE Minimum value for reduce actions ** YY_MAX_REDUCE Maximum value for reduce actions */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned char #define YYNOCODE 28 #define YYACTIONTYPE unsigned char #define RSExprParser_ParseTOKENTYPE RSExprToken typedef union { int yyinit; RSExprParser_ParseTOKENTYPE yy0; RSExpr * yy19; double yy32; RSArgList * yy46; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 #endif #define RSExprParser_ParseARG_SDECL RSExprParseCtx *ctx ; #define RSExprParser_ParseARG_PDECL , RSExprParseCtx *ctx #define RSExprParser_ParseARG_PARAM ,ctx #define RSExprParser_ParseARG_FETCH RSExprParseCtx *ctx =yypParser->ctx ; #define RSExprParser_ParseARG_STORE yypParser->ctx =ctx ; #define RSExprParser_ParseCTX_SDECL #define RSExprParser_ParseCTX_PDECL #define RSExprParser_ParseCTX_PARAM #define RSExprParser_ParseCTX_FETCH #define RSExprParser_ParseCTX_STORE #define YYNSTATE 37 #define YYNRULE 27 #define YYNTOKEN 24 #define YY_MAX_SHIFT 36 #define YY_MIN_SHIFTREDUCE 48 #define YY_MAX_SHIFTREDUCE 74 #define YY_ERROR_ACTION 75 #define YY_ACCEPT_ACTION 76 #define YY_NO_ACTION 77 #define YY_MIN_REDUCE 78 #define YY_MAX_REDUCE 104 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. ** ** Applications can choose to define yytestcase() in the %include section ** to a macro that can assist in verifying code coverage. For production ** code the yytestcase() macro should be turned off. But it is useful ** for testing. */ #ifndef yytestcase # define yytestcase(X) #endif /* Next are the tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement ** functions that take a state number and lookahead value and return an ** action integer. ** ** Suppose the action integer is N. Then the action is determined as ** follows ** ** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead ** token onto the stack and goto state N. ** ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. ** ** N == YY_ERROR_ACTION A syntax error has occurred. ** ** N == YY_ACCEPT_ACTION The parser accepts its input. ** ** N == YY_NO_ACTION No such action. Denotes unused ** slots in the yy_action[] table. ** ** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE ** and YY_MAX_REDUCE ** ** The action table is constructed as a single large table named yy_action[]. ** Given state S and lookahead X, the action is computed as either: ** ** (A) N = yy_action[ yy_shift_ofst[S] + X ] ** (B) N = yy_default[S] ** ** The (A) formula is preferred. The B formula is used instead if ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. ** ** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of ** the yy_shift_ofst[] array. ** ** The following are the tables generated in this section: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ #define YY_ACTTAB_COUNT (122) static const YYACTIONTYPE yy_action[] = { /* 0 */ 96, 5, 4, 21, 11, 10, 9, 8, 7, 6, /* 10 */ 18, 14, 16, 15, 12, 13, 77, 49, 78, 5, /* 20 */ 4, 1, 11, 10, 9, 8, 7, 6, 18, 14, /* 30 */ 16, 15, 12, 13, 5, 4, 68, 11, 10, 9, /* 40 */ 8, 7, 6, 18, 14, 16, 15, 12, 13, 11, /* 50 */ 10, 9, 8, 7, 6, 18, 14, 16, 15, 12, /* 60 */ 13, 3, 18, 14, 16, 15, 12, 13, 96, 36, /* 70 */ 76, 20, 96, 34, 17, 22, 69, 35, 65, 67, /* 80 */ 16, 15, 12, 13, 96, 96, 96, 23, 24, 25, /* 90 */ 96, 96, 77, 26, 27, 96, 96, 96, 28, 29, /* 100 */ 30, 96, 96, 96, 31, 85, 84, 96, 96, 96, /* 110 */ 33, 82, 81, 96, 96, 70, 19, 32, 77, 77, /* 120 */ 77, 2, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 24, 1, 2, 27, 4, 5, 6, 7, 8, 9, /* 10 */ 10, 11, 12, 13, 14, 15, 28, 17, 0, 1, /* 20 */ 2, 16, 4, 5, 6, 7, 8, 9, 10, 11, /* 30 */ 12, 13, 14, 15, 1, 2, 21, 4, 5, 6, /* 40 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 4, /* 50 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, /* 60 */ 15, 3, 10, 11, 12, 13, 14, 15, 24, 11, /* 70 */ 26, 27, 24, 25, 16, 27, 18, 19, 20, 21, /* 80 */ 12, 13, 14, 15, 24, 24, 24, 27, 27, 27, /* 90 */ 24, 24, 28, 27, 27, 24, 24, 24, 27, 27, /* 100 */ 27, 24, 24, 24, 27, 27, 27, 24, 24, 24, /* 110 */ 27, 27, 27, 24, 24, 17, 27, 27, 28, 28, /* 120 */ 28, 23, 28, 28, 28, 28, 28, 28, 28, 28, /* 130 */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, }; #define YY_SHIFT_COUNT (36) #define YY_SHIFT_MIN (0) #define YY_SHIFT_MAX (98) static const unsigned char yy_shift_ofst[] = { /* 0 */ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, /* 10 */ 58, 58, 58, 58, 58, 58, 58, 58, 58, 0, /* 20 */ 18, 33, 33, 45, 45, 45, 52, 52, 52, 52, /* 30 */ 52, 52, 68, 68, 98, 5, 15, }; #define YY_REDUCE_COUNT (18) #define YY_REDUCE_MIN (-24) #define YY_REDUCE_MAX (90) static const signed char yy_reduce_ofst[] = { /* 0 */ 44, 48, -24, 60, 61, 62, 66, 67, 71, 72, /* 10 */ 73, 77, 78, 79, 83, 84, 85, 89, 90, }; static const YYACTIONTYPE yy_default[] = { /* 0 */ 75, 102, 75, 75, 75, 75, 75, 75, 75, 75, /* 10 */ 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, /* 20 */ 75, 104, 103, 94, 93, 92, 91, 90, 89, 88, /* 30 */ 87, 86, 80, 83, 75, 101, 75, }; /********** End of lemon-generated parsing tables *****************************/ /* The next table maps tokens (terminal symbols) into fallback tokens. ** If a construct like the following: ** ** %fallback ID X Y Z. ** ** appears in the grammar, then ID becomes a fallback token for X, Y, ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser ** but it does not parse, the type of the token is changed to ID and ** the parse is retried before an error is thrown. ** ** This feature can be used, for example, to cause some keywords in a language ** to revert to identifiers if they keyword does not apply in the context where ** it appears. */ #ifdef YYFALLBACK static const YYCODETYPE yyFallback[] = { }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** ** + The state number for the parser at this level of the stack. ** ** + The value of the token stored at this level of the stack. ** (In other words, the "major" token.) ** ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. ** ** After the "shift" half of a SHIFTREDUCE action, the stateno field ** actually contains the reduce action for the second half of the ** SHIFTREDUCE. */ struct yyStackEntry { YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ YYCODETYPE major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This ** is the value of the token */ }; typedef struct yyStackEntry yyStackEntry; /* The state of the parser is completely contained in an instance of ** the following structure */ struct yyParser { yyStackEntry *yytos; /* Pointer to top element of the stack */ #ifdef YYTRACKMAXSTACKDEPTH int yyhwm; /* High-water mark of the stack */ #endif #ifndef YYNOERRORRECOVERY int yyerrcnt; /* Shifts left before out of the error */ #endif RSExprParser_ParseARG_SDECL /* A place to hold %extra_argument */ RSExprParser_ParseCTX_SDECL /* A place to hold %extra_context */ #if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ yyStackEntry *yystack; /* The parser's stack */ yyStackEntry yystk0; /* First stack entry */ #else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ yyStackEntry *yystackEnd; /* Last entry in the stack */ #endif }; typedef struct yyParser yyParser; #ifndef NDEBUG #include static FILE *yyTraceFILE = 0; static char *yyTracePrompt = 0; #endif /* NDEBUG */ #ifndef NDEBUG /* ** Turn parser tracing on by giving a stream to which to write the trace ** and a prompt to preface each trace message. Tracing is turned off ** by making either argument NULL ** ** Inputs: **
    **
  • A FILE* to which trace output should be written. ** If NULL, then tracing is turned off. **
  • A prefix string written at the beginning of every ** line of trace output. If NULL, then tracing is ** turned off. **
** ** Outputs: ** None. */ void RSExprParser_ParseTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; else if( yyTracePrompt==0 ) yyTraceFILE = 0; } #endif /* NDEBUG */ #if defined(YYCOVERAGE) || !defined(NDEBUG) /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const yyTokenName[] = { /* 0 */ "$", /* 1 */ "AND", /* 2 */ "OR", /* 3 */ "NOT", /* 4 */ "EQ", /* 5 */ "NE", /* 6 */ "LT", /* 7 */ "LE", /* 8 */ "GT", /* 9 */ "GE", /* 10 */ "PLUS", /* 11 */ "MINUS", /* 12 */ "DIVIDE", /* 13 */ "TIMES", /* 14 */ "MOD", /* 15 */ "POW", /* 16 */ "LP", /* 17 */ "RP", /* 18 */ "PROPERTY", /* 19 */ "SYMBOL", /* 20 */ "STRING", /* 21 */ "NUMBER", /* 22 */ "ARGLIST", /* 23 */ "COMMA", /* 24 */ "number", /* 25 */ "arglist", /* 26 */ "program", /* 27 */ "expr", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { /* 0 */ "program ::= expr", /* 1 */ "expr ::= LP expr RP", /* 2 */ "expr ::= expr PLUS expr", /* 3 */ "expr ::= expr DIVIDE expr", /* 4 */ "expr ::= expr TIMES expr", /* 5 */ "expr ::= expr MINUS expr", /* 6 */ "expr ::= expr POW expr", /* 7 */ "expr ::= expr MOD expr", /* 8 */ "expr ::= expr EQ expr", /* 9 */ "expr ::= expr NE expr", /* 10 */ "expr ::= expr LT expr", /* 11 */ "expr ::= expr LE expr", /* 12 */ "expr ::= expr GT expr", /* 13 */ "expr ::= expr GE expr", /* 14 */ "expr ::= expr AND expr", /* 15 */ "expr ::= expr OR expr", /* 16 */ "expr ::= NOT expr", /* 17 */ "expr ::= STRING", /* 18 */ "expr ::= number", /* 19 */ "number ::= NUMBER", /* 20 */ "number ::= MINUS NUMBER", /* 21 */ "expr ::= PROPERTY", /* 22 */ "expr ::= SYMBOL LP arglist RP", /* 23 */ "expr ::= SYMBOL", /* 24 */ "arglist ::=", /* 25 */ "arglist ::= expr", /* 26 */ "arglist ::= arglist COMMA expr", }; #endif /* NDEBUG */ #if YYSTACKDEPTH<=0 /* ** Try to increase the size of the parser stack. Return the number ** of errors. Return 0 on success. */ static int yyGrowStack(yyParser *p){ int newSize; int idx; yyStackEntry *pNew; newSize = p->yystksz*2 + 100; idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; if( p->yystack==&p->yystk0 ){ pNew = malloc(newSize*sizeof(pNew[0])); if( pNew ) pNew[0] = p->yystk0; }else{ pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); } if( pNew ){ p->yystack = pNew; p->yytos = &p->yystack[idx]; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", yyTracePrompt, p->yystksz, newSize); } #endif p->yystksz = newSize; } return pNew==0; } #endif /* Datatype of the argument to the memory allocated passed as the ** second argument to RSExprParser_ParseAlloc() below. This can be changed by ** putting an appropriate #define in the %include section of the input ** grammar. */ #ifndef YYMALLOCARGTYPE # define YYMALLOCARGTYPE size_t #endif /* Initialize a new parser that has already been allocated. */ void RSExprParser_ParseInit(void *yypRawParser RSExprParser_ParseCTX_PDECL){ yyParser *yypParser = (yyParser*)yypRawParser; RSExprParser_ParseCTX_STORE #ifdef YYTRACKMAXSTACKDEPTH yypParser->yyhwm = 0; #endif #if YYSTACKDEPTH<=0 yypParser->yytos = NULL; yypParser->yystack = NULL; yypParser->yystksz = 0; if( yyGrowStack(yypParser) ){ yypParser->yystack = &yypParser->yystk0; yypParser->yystksz = 1; } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yypParser->yytos = yypParser->yystack; yypParser->yystack[0].stateno = 0; yypParser->yystack[0].major = 0; #if YYSTACKDEPTH>0 yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; #endif } #ifndef RSExprParser_Parse_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like ** malloc. ** ** Inputs: ** A pointer to the function used to allocate memory. ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls ** to RSExprParser_Parse and RSExprParser_ParseFree. */ void *RSExprParser_ParseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE) RSExprParser_ParseCTX_PDECL){ yyParser *yypParser; yypParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); if( yypParser ){ RSExprParser_ParseCTX_STORE RSExprParser_ParseInit(yypParser RSExprParser_ParseCTX_PARAM); } return (void*)yypParser; } #endif /* RSExprParser_Parse_ENGINEALWAYSONSTACK */ /* The following function deletes the "minor type" or semantic value ** associated with a symbol. The symbol can be either a terminal ** or nonterminal. "yymajor" is the symbol code, and "yypminor" is ** a pointer to the value to be deleted. The code used to do the ** deletions is derived from the %destructor and/or %token_destructor ** directives of the input grammar. */ static void yy_destructor( yyParser *yypParser, /* The parser */ YYCODETYPE yymajor, /* Type code for object to destroy */ YYMINORTYPE *yypminor /* The object to be destroyed */ ){ RSExprParser_ParseARG_FETCH RSExprParser_ParseCTX_FETCH switch( yymajor ){ /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen ** when the symbol is popped from the stack during a ** reduce or during error processing or when a parser is ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ /********* Begin destructor definitions ***************************************/ /* Default NON-TERMINAL Destructor */ case 26: /* program */ case 27: /* expr */ { #line 23 "parser.y" RSExpr_Free((yypminor->yy19)); #line 549 "parser.c" } break; case 24: /* number */ { #line 26 "parser.y" #line 556 "parser.c" } break; case 25: /* arglist */ { #line 29 "parser.y" RSArgList_Free((yypminor->yy46)); #line 563 "parser.c" } break; /********* End destructor definitions *****************************************/ default: break; /* If no destructor action specified: do nothing */ } } /* ** Pop the parser's stack once. ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. */ static void yy_pop_parser_stack(yyParser *pParser){ yyStackEntry *yytos; assert( pParser->yytos!=0 ); assert( pParser->yytos > pParser->yystack ); yytos = pParser->yytos--; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); } #endif yy_destructor(pParser, yytos->major, &yytos->minor); } /* ** Clear all secondary memory allocations from the parser */ void RSExprParser_ParseFinalize(void *p){ yyParser *pParser = (yyParser*)p; while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); #if YYSTACKDEPTH<=0 if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); #endif } #ifndef RSExprParser_Parse_ENGINEALWAYSONSTACK /* ** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. ** ** If the YYPARSEFREENEVERNULL macro exists (for example because it ** is defined in a %include section of the input grammar) then it is ** assumed that the input pointer is never NULL. */ void RSExprParser_ParseFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ #ifndef YYPARSEFREENEVERNULL if( p==0 ) return; #endif RSExprParser_ParseFinalize(p); (*freeProc)(p); } #endif /* RSExprParser_Parse_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. */ #ifdef YYTRACKMAXSTACKDEPTH int RSExprParser_ParseStackPeak(void *p){ yyParser *pParser = (yyParser*)p; return pParser->yyhwm; } #endif /* This array of booleans keeps track of the parser statement ** coverage. The element yycoverage[X][Y] is set when the parser ** is in state X and has a lookahead token Y. In a well-tested ** systems, every element of this matrix should end up being set. */ #if defined(YYCOVERAGE) static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; #endif /* ** Write into out a description of every state/lookahead combination that ** ** (1) has not been used by the parser, and ** (2) is not a syntax error. ** ** Return the number of missed state/lookahead combinations. */ #if defined(YYCOVERAGE) int RSExprParser_ParseCoverage(FILE *out){ int stateno, iLookAhead, i; int nMissed = 0; for(stateno=0; statenoYY_MAX_SHIFT ) return stateno; assert( stateno <= YY_SHIFT_COUNT ); #if defined(YYCOVERAGE) yycoverage[stateno][iLookAhead] = 1; #endif do{ i = yy_shift_ofst[stateno]; assert( i>=0 ); assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); assert( iLookAhead!=YYNOCODE ); assert( iLookAhead < YYNTOKEN ); i += iLookAhead; if( yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); } #endif assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */ iLookAhead = iFallback; continue; } #endif #ifdef YYWILDCARD { int j = i - iLookAhead + YYWILDCARD; if( #if YY_SHIFT_MIN+YYWILDCARD<0 j>=0 && #endif #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); } #endif /* NDEBUG */ return yy_action[j]; } } #endif /* YYWILDCARD */ return yy_default[stateno]; }else{ return yy_action[i]; } }while(1); } /* ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. */ static int yy_find_reduce_action( YYACTIONTYPE stateno, /* Current state number */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ int i; #ifdef YYERRORSYMBOL if( stateno>YY_REDUCE_COUNT ){ return yy_default[stateno]; } #else assert( stateno<=YY_REDUCE_COUNT ); #endif i = yy_reduce_ofst[stateno]; assert( iLookAhead!=YYNOCODE ); i += iLookAhead; #ifdef YYERRORSYMBOL if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ return yy_default[stateno]; } #else assert( i>=0 && iyytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will execute if the parser ** stack every overflows */ /******** Begin %stack_overflow code ******************************************/ /******** End %stack_overflow code ********************************************/ RSExprParser_ParseARG_STORE /* Suppress warning about unused %extra_argument var */ RSExprParser_ParseCTX_STORE } /* ** Print tracing information for a SHIFT action */ #ifndef NDEBUG static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){ if( yyTraceFILE ){ if( yyNewStateyytos->major], yyNewState); }else{ fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], yyNewState - YY_MIN_REDUCE); } } } #else # define yyTraceShift(X,Y,Z) #endif /* ** Perform a shift action. */ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ YYACTIONTYPE yyNewState, /* The new state to shift in */ YYCODETYPE yyMajor, /* The major token to shift in */ RSExprParser_ParseTOKENTYPE yyMinor /* The minor token to shift in */ ){ yyStackEntry *yytos; yypParser->yytos++; #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>yypParser->yystackEnd ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ if( yyGrowStack(yypParser) ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } } #endif if( yyNewState > YY_MAX_SHIFT ){ yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; } yytos = yypParser->yytos; yytos->stateno = yyNewState; yytos->major = yyMajor; yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState, "Shift"); } /* The following table contains information about every rule that ** is used during the reduce. */ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { { 26, -1 }, /* (0) program ::= expr */ { 27, -3 }, /* (1) expr ::= LP expr RP */ { 27, -3 }, /* (2) expr ::= expr PLUS expr */ { 27, -3 }, /* (3) expr ::= expr DIVIDE expr */ { 27, -3 }, /* (4) expr ::= expr TIMES expr */ { 27, -3 }, /* (5) expr ::= expr MINUS expr */ { 27, -3 }, /* (6) expr ::= expr POW expr */ { 27, -3 }, /* (7) expr ::= expr MOD expr */ { 27, -3 }, /* (8) expr ::= expr EQ expr */ { 27, -3 }, /* (9) expr ::= expr NE expr */ { 27, -3 }, /* (10) expr ::= expr LT expr */ { 27, -3 }, /* (11) expr ::= expr LE expr */ { 27, -3 }, /* (12) expr ::= expr GT expr */ { 27, -3 }, /* (13) expr ::= expr GE expr */ { 27, -3 }, /* (14) expr ::= expr AND expr */ { 27, -3 }, /* (15) expr ::= expr OR expr */ { 27, -2 }, /* (16) expr ::= NOT expr */ { 27, -1 }, /* (17) expr ::= STRING */ { 27, -1 }, /* (18) expr ::= number */ { 24, -1 }, /* (19) number ::= NUMBER */ { 24, -2 }, /* (20) number ::= MINUS NUMBER */ { 27, -1 }, /* (21) expr ::= PROPERTY */ { 27, -4 }, /* (22) expr ::= SYMBOL LP arglist RP */ { 27, -1 }, /* (23) expr ::= SYMBOL */ { 25, 0 }, /* (24) arglist ::= */ { 25, -1 }, /* (25) arglist ::= expr */ { 25, -3 }, /* (26) arglist ::= arglist COMMA expr */ }; static void yy_accept(yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. ** ** The yyLookahead and yyLookaheadToken parameters provide reduce actions ** access to the lookahead token (if any). The yyLookahead will be YYNOCODE ** if the lookahead token has already been consumed. As this procedure is ** only called from one place, optimizing compilers will in-line it, which ** means that the extra parameters have no performance impact. */ static YYACTIONTYPE yy_reduce( yyParser *yypParser, /* The parser */ unsigned int yyruleno, /* Number of the rule by which to reduce */ int yyLookahead, /* Lookahead token, or YYNOCODE if none */ RSExprParser_ParseTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ RSExprParser_ParseCTX_PDECL /* %extra_context */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ RSExprParser_ParseARG_FETCH (void)yyLookahead; (void)yyLookaheadToken; yymsp = yypParser->yytos; #ifndef NDEBUG if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; if( yysize ){ fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", yyTracePrompt, yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno); }else{ fprintf(yyTraceFILE, "%sReduce %d [%s].\n", yyTracePrompt, yyruleno, yyRuleName[yyruleno]); } } #endif /* NDEBUG */ /* Check that the stack is large enough to grow by a single entry ** if the RHS of the rule is empty. This ensures that there is room ** enough on the stack to push the LHS value */ if( yyRuleInfo[yyruleno].nrhs==0 ){ #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack)); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>=yypParser->yystackEnd ){ yyStackOverflow(yypParser); /* The call to yyStackOverflow() above pops the stack until it is ** empty, causing the main parser loop to exit. So the return value ** is never used and does not matter. */ return 0; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ if( yyGrowStack(yypParser) ){ yyStackOverflow(yypParser); /* The call to yyStackOverflow() above pops the stack until it is ** empty, causing the main parser loop to exit. So the return value ** is never used and does not matter. */ return 0; } yymsp = yypParser->yytos; } #endif } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example ** follows: ** case 0: ** #line ** { ... } // User supplied code ** #line ** break; */ /********** Begin reduce actions **********************************************/ YYMINORTYPE yylhsminor; case 0: /* program ::= expr */ #line 44 "parser.y" { ctx->root = yymsp[0].minor.yy19; } #line 975 "parser.c" break; case 1: /* expr ::= LP expr RP */ #line 46 "parser.y" { yymsp[-2].minor.yy19 = yymsp[-1].minor.yy19; } #line 980 "parser.c" break; case 2: /* expr ::= expr PLUS expr */ #line 47 "parser.y" { yylhsminor.yy19 = RS_NewOp('+', yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 985 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 3: /* expr ::= expr DIVIDE expr */ #line 48 "parser.y" { yylhsminor.yy19 = RS_NewOp('/', yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 991 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 4: /* expr ::= expr TIMES expr */ #line 49 "parser.y" { yylhsminor.yy19 = RS_NewOp('*', yymsp[-2].minor.yy19, yymsp[0].minor.yy19);} #line 997 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 5: /* expr ::= expr MINUS expr */ #line 50 "parser.y" { yylhsminor.yy19 = RS_NewOp('-', yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1003 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 6: /* expr ::= expr POW expr */ #line 51 "parser.y" { yylhsminor.yy19 = RS_NewOp('^', yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1009 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 7: /* expr ::= expr MOD expr */ #line 52 "parser.y" { yylhsminor.yy19 = RS_NewOp('%', yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1015 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 8: /* expr ::= expr EQ expr */ #line 55 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Eq, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1021 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 9: /* expr ::= expr NE expr */ #line 56 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Ne, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1027 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 10: /* expr ::= expr LT expr */ #line 57 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Lt, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1033 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 11: /* expr ::= expr LE expr */ #line 58 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Le, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1039 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 12: /* expr ::= expr GT expr */ #line 59 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Gt, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1045 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 13: /* expr ::= expr GE expr */ #line 60 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Ge, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1051 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 14: /* expr ::= expr AND expr */ #line 61 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_And, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1057 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 15: /* expr ::= expr OR expr */ #line 62 "parser.y" { yylhsminor.yy19 = RS_NewPredicate(RSCondition_Or, yymsp[-2].minor.yy19, yymsp[0].minor.yy19); } #line 1063 "parser.c" yymsp[-2].minor.yy19 = yylhsminor.yy19; break; case 16: /* expr ::= NOT expr */ #line 63 "parser.y" { yymsp[-1].minor.yy19 = RS_NewPredicate(RSCondition_Not, yymsp[0].minor.yy19, NULL); } #line 1069 "parser.c" break; case 17: /* expr ::= STRING */ #line 66 "parser.y" { yylhsminor.yy19 = RS_NewStringLiteral((char*)yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len); } #line 1074 "parser.c" yymsp[0].minor.yy19 = yylhsminor.yy19; break; case 18: /* expr ::= number */ #line 67 "parser.y" { yylhsminor.yy19 = RS_NewNumberLiteral(yymsp[0].minor.yy32); } #line 1080 "parser.c" yymsp[0].minor.yy19 = yylhsminor.yy19; break; case 19: /* number ::= NUMBER */ #line 69 "parser.y" { yylhsminor.yy32 = yymsp[0].minor.yy0.numval; } #line 1086 "parser.c" yymsp[0].minor.yy32 = yylhsminor.yy32; break; case 20: /* number ::= MINUS NUMBER */ #line 70 "parser.y" { yymsp[-1].minor.yy32 = -yymsp[0].minor.yy0.numval; } #line 1092 "parser.c" break; case 21: /* expr ::= PROPERTY */ #line 72 "parser.y" { yylhsminor.yy19 = RS_NewProp(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len); } #line 1097 "parser.c" yymsp[0].minor.yy19 = yylhsminor.yy19; break; case 22: /* expr ::= SYMBOL LP arglist RP */ #line 73 "parser.y" { RSFunction cb = RSFunctionRegistry_Get(yymsp[-3].minor.yy0.s, yymsp[-3].minor.yy0.len); if (!cb) { asprintf(&ctx->errorMsg, "Unknown function name '%.*s'", yymsp[-3].minor.yy0.len, yymsp[-3].minor.yy0.s); ctx->ok = 0; yylhsminor.yy19 = NULL; } else { yylhsminor.yy19 = RS_NewFunc(yymsp[-3].minor.yy0.s, yymsp[-3].minor.yy0.len, yymsp[-1].minor.yy46, cb); } } #line 1112 "parser.c" yymsp[-3].minor.yy19 = yylhsminor.yy19; break; case 23: /* expr ::= SYMBOL */ #line 84 "parser.y" { if (yymsp[0].minor.yy0.len == 4 && !strncmp(yymsp[0].minor.yy0.s, "NULL", 4)) { yylhsminor.yy19 = RS_NewNullLiteral(); } else { asprintf(&ctx->errorMsg, "Unknown symbol '%.*s'", yymsp[0].minor.yy0.len, yymsp[0].minor.yy0.s); ctx->ok = 0; yylhsminor.yy19 = NULL; } } #line 1126 "parser.c" yymsp[0].minor.yy19 = yylhsminor.yy19; break; case 24: /* arglist ::= */ #line 94 "parser.y" { yymsp[1].minor.yy46 = RS_NewArgList(NULL); } #line 1132 "parser.c" break; case 25: /* arglist ::= expr */ #line 95 "parser.y" { yylhsminor.yy46 = RS_NewArgList(yymsp[0].minor.yy19); } #line 1137 "parser.c" yymsp[0].minor.yy46 = yylhsminor.yy46; break; case 26: /* arglist ::= arglist COMMA expr */ #line 96 "parser.y" { yylhsminor.yy46 = RSArgList_Append(yymsp[-2].minor.yy46, yymsp[0].minor.yy19); } #line 1145 "parser.c" yymsp[-2].minor.yy46 = yylhsminor.yy46; break; default: break; /********** End reduce actions ************************************************/ }; assert( yyrulenoYY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); /* It is not possible for a REDUCE to be followed by an error */ assert( yyact!=YY_ERROR_ACTION ); yymsp += yysize+1; yypParser->yytos = yymsp; yymsp->stateno = (YYACTIONTYPE)yyact; yymsp->major = (YYCODETYPE)yygoto; yyTraceShift(yypParser, yyact, "... then shift"); return yyact; } /* ** The following code executes when the parse fails */ #ifndef YYNOERRORRECOVERY static void yy_parse_failed( yyParser *yypParser /* The parser */ ){ RSExprParser_ParseARG_FETCH RSExprParser_ParseCTX_FETCH #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); } #endif while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will be executed whenever the ** parser fails */ /************ Begin %parse_failure code ***************************************/ /************ End %parse_failure code *****************************************/ RSExprParser_ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ RSExprParser_ParseCTX_STORE } #endif /* YYNOERRORRECOVERY */ /* ** The following code executes when a syntax error first occurs. */ static void yy_syntax_error( yyParser *yypParser, /* The parser */ int yymajor, /* The major type of the error token */ RSExprParser_ParseTOKENTYPE yyminor /* The minor type of the error token */ ){ RSExprParser_ParseARG_FETCH RSExprParser_ParseCTX_FETCH #define TOKEN yyminor /************ Begin %syntax_error code ****************************************/ #line 38 "parser.y" asprintf(&ctx->errorMsg, "Syntax error at offset %d near '%.*s'", TOKEN.pos, TOKEN.len, TOKEN.s); ctx->ok = 0; #line 1213 "parser.c" /************ End %syntax_error code ******************************************/ RSExprParser_ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ RSExprParser_ParseCTX_STORE } /* ** The following is executed when the parser accepts */ static void yy_accept( yyParser *yypParser /* The parser */ ){ RSExprParser_ParseARG_FETCH RSExprParser_ParseCTX_FETCH #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif assert( yypParser->yytos==yypParser->yystack ); /* Here code is inserted which will be executed whenever the ** parser accepts */ /*********** Begin %parse_accept code *****************************************/ /*********** End %parse_accept code *******************************************/ RSExprParser_ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ RSExprParser_ParseCTX_STORE } /* The main parser program. ** The first argument is a pointer to a structure obtained from ** "RSExprParser_ParseAlloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for ** use by the action routines. ** ** Inputs: **
    **
  • A pointer to the parser (an opaque structure.) **
  • The major token number. **
  • The minor token number. **
  • An option argument of a grammar-specified type. **
** ** Outputs: ** None. */ void RSExprParser_Parse( void *yyp, /* The parser */ int yymajor, /* The major token code number */ RSExprParser_ParseTOKENTYPE yyminor /* The value for the token */ RSExprParser_ParseARG_PDECL /* Optional %extra_argument parameter */ ){ YYMINORTYPE yyminorunion; YYACTIONTYPE yyact; /* The parser action. */ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) int yyendofinput; /* True if we are at the end of input */ #endif #ifdef YYERRORSYMBOL int yyerrorhit = 0; /* True if yymajor has invoked an error */ #endif yyParser *yypParser = (yyParser*)yyp; /* The parser */ RSExprParser_ParseCTX_FETCH RSExprParser_ParseARG_STORE assert( yypParser->yytos!=0 ); #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) yyendofinput = (yymajor==0); #endif yyact = yypParser->yytos->stateno; #ifndef NDEBUG if( yyTraceFILE ){ if( yyact < YY_MIN_REDUCE ){ fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", yyTracePrompt,yyTokenName[yymajor],yyact); }else{ fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", yyTracePrompt,yyTokenName[yymajor],yyact-YY_MIN_REDUCE); } } #endif do{ assert( yyact==yypParser->yytos->stateno ); yyact = yy_find_shift_action(yymajor,yyact); if( yyact >= YY_MIN_REDUCE ){ yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor, yyminor RSExprParser_ParseCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ yy_shift(yypParser,yyact,yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif break; }else if( yyact==YY_ACCEPT_ACTION ){ yypParser->yytos--; yy_accept(yypParser); return; }else{ assert( yyact == YY_ERROR_ACTION ); yyminorunion.yy0 = yyminor; #ifdef YYERRORSYMBOL int yymx; #endif #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); } #endif #ifdef YYERRORSYMBOL /* A syntax error has occurred. ** The response to an error depends upon whether or not the ** grammar defines an error token "ERROR". ** ** This is what we do if the grammar does define ERROR: ** ** * Call the %syntax_error function. ** ** * Begin popping the stack until we enter a state where ** it is legal to shift the error symbol, then shift ** the error symbol. ** ** * Set the error count to three. ** ** * Begin accepting and shifting new tokens. No new error ** processing will occur until three tokens have been ** shifted successfully. ** */ if( yypParser->yyerrcnt<0 ){ yy_syntax_error(yypParser,yymajor,yyminor); } yymx = yypParser->yytos->major; if( yymx==YYERRORSYMBOL || yyerrorhit ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sDiscard input token %s\n", yyTracePrompt,yyTokenName[yymajor]); } #endif yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ while( yypParser->yytos >= yypParser->yystack && yymx != YYERRORSYMBOL && (yyact = yy_find_reduce_action( yypParser->yytos->stateno, YYERRORSYMBOL)) >= YY_MIN_REDUCE ){ yy_pop_parser_stack(yypParser); } if( yypParser->yytos < yypParser->yystack || yymajor==0 ){ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yymajor = YYNOCODE; }else if( yymx!=YYERRORSYMBOL ){ yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); } } yypParser->yyerrcnt = 3; yyerrorhit = 1; if( yymajor==YYNOCODE ) break; yyact = yypParser->yytos->stateno; #elif defined(YYNOERRORRECOVERY) /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to ** do any kind of error recovery. Instead, simply invoke the syntax ** error routine and continue going as if nothing had happened. ** ** Applications can set this macro (for example inside %include) if ** they intend to abandon the parse upon the first syntax error seen. */ yy_syntax_error(yypParser,yymajor, yyminor); yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); break; #else /* YYERRORSYMBOL is not defined */ /* This is what we do if the grammar does not define ERROR: ** ** * Report an error message, and throw away the input token. ** ** * If the input token is $, then fail the parse. ** ** As before, subsequent error messages are suppressed until ** three input tokens have been successfully shifted. */ if( yypParser->yyerrcnt<=0 ){ yy_syntax_error(yypParser,yymajor, yyminor); } yypParser->yyerrcnt = 3; yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); if( yyendofinput ){ yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif } break; #endif } }while( yypParser->yytos>yypParser->yystack ); #ifndef NDEBUG if( yyTraceFILE ){ yyStackEntry *i; char cDiv = '['; fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); cDiv = ' '; } fprintf(yyTraceFILE,"]\n"); } #endif return; } RediSearch-1.2.2/src/aggregate/expr/parser.h000066400000000000000000000017351364126773500207110ustar00rootroot00000000000000#define AND 1 #define OR 2 #define NOT 3 #define EQ 4 #define NE 5 #define LT 6 #define LE 7 #define GT 8 #define GE 9 #define PLUS 10 #define MINUS 11 #define DIVIDE 12 #define TIMES 13 #define MOD 14 #define POW 15 #define LP 16 #define RP 17 #define PROPERTY 18 #define SYMBOL 19 #define STRING 20 #define NUMBER 21 #define ARGLIST 22 #define COMMA 23 RediSearch-1.2.2/src/aggregate/expr/parser.y000066400000000000000000000055441364126773500207340ustar00rootroot00000000000000 %name RSExprParser_Parse %left AND OR NOT. %left EQ NE LT LE GT GE. %left PLUS MINUS. %left DIVIDE TIMES MOD POW. %right LP. %left RP. %left PROPERTY. %right SYMBOL. %left STRING. %left NUMBER. %right ARGLIST. %extra_argument { RSExprParseCtx *ctx } %token_type { RSExprToken } %default_type {RSExpr *} %default_destructor {RSExpr_Free($$); } %type number {double} %destructor number {} %type arglist { RSArgList * } %destructor arglist {RSArgList_Free($$); } %include { #include "token.h" #include "expression.h" #include "parser.h" } %syntax_error { asprintf(&ctx->errorMsg, "Syntax error at offset %d near '%.*s'", TOKEN.pos, TOKEN.len, TOKEN.s); ctx->ok = 0; } program ::= expr(A). { ctx->root = A; } expr(A) ::= LP expr(B) RP. { A = B; } expr(A) ::= expr(B) PLUS expr(C). { A = RS_NewOp('+', B, C); } expr(A) ::= expr(B) DIVIDE expr(C). { A = RS_NewOp('/', B, C); } expr(A) ::= expr(B) TIMES expr(C). { A = RS_NewOp('*', B, C);} expr(A) ::= expr(B) MINUS expr(C). { A = RS_NewOp('-', B, C); } expr(A) ::= expr(B) POW expr(C). { A = RS_NewOp('^', B, C); } expr(A) ::= expr(B) MOD expr(C). { A = RS_NewOp('%', B, C); } // Logical predicates expr(A) ::= expr(B) EQ expr(C). { A = RS_NewPredicate(RSCondition_Eq, B, C); } expr(A) ::= expr(B) NE expr(C). { A = RS_NewPredicate(RSCondition_Ne, B, C); } expr(A) ::= expr(B) LT expr(C). { A = RS_NewPredicate(RSCondition_Lt, B, C); } expr(A) ::= expr(B) LE expr(C). { A = RS_NewPredicate(RSCondition_Le, B, C); } expr(A) ::= expr(B) GT expr(C). { A = RS_NewPredicate(RSCondition_Gt, B, C); } expr(A) ::= expr(B) GE expr(C). { A = RS_NewPredicate(RSCondition_Ge, B, C); } expr(A) ::= expr(B) AND expr(C). { A = RS_NewPredicate(RSCondition_And, B, C); } expr(A) ::= expr(B) OR expr(C). { A = RS_NewPredicate(RSCondition_Or, B, C); } expr(A) ::= NOT expr(B). { A = RS_NewPredicate(RSCondition_Not, B, NULL); } expr(A) ::= STRING(B). { A = RS_NewStringLiteral((char*)B.s, B.len); } expr(A) ::= number(B). { A = RS_NewNumberLiteral(B); } number(A) ::= NUMBER(B). { A = B.numval; } number(A) ::= MINUS NUMBER(B). { A = -B.numval; } expr(A) ::= PROPERTY(B). { A = RS_NewProp(B.s, B.len); } expr(A) ::= SYMBOL(B) LP arglist(C) RP. { RSFunction cb = RSFunctionRegistry_Get(B.s, B.len); if (!cb) { asprintf(&ctx->errorMsg, "Unknown function name '%.*s'", B.len, B.s); ctx->ok = 0; A = NULL; } else { A = RS_NewFunc(B.s, B.len, C, cb); } } expr(A) ::= SYMBOL(B) . { if (B.len == 4 && !strncmp(B.s, "NULL", 4)) { A = RS_NewNullLiteral(); } else { asprintf(&ctx->errorMsg, "Unknown symbol '%.*s'", B.len, B.s); ctx->ok = 0; A = NULL; } } arglist(A) ::= . [ARGLIST] { A = RS_NewArgList(NULL); } arglist(A) ::= expr(B) . [ARGLIST] { A = RS_NewArgList(B); } arglist(A) ::= arglist(B) COMMA expr(C) . [ARGLIST] { A = RSArgList_Append(B, C); }RediSearch-1.2.2/src/aggregate/expr/token.h000066400000000000000000000010261364126773500205260ustar00rootroot00000000000000#ifndef RS_AGGREGATE_TOKEN_H_ #define RS_AGGREGATE_TOKEN_H_ #include #include "expression.h" /* A query-specific tokenizer, that reads symbols like quots, pipes, etc */ typedef struct { const char *raw; size_t len; char *pos; char *errorMsg; RSExpr *root; int ok; } RSExprParseCtx; /* A token in the process of parsing a query. Unlike the document tokenizer, it works iteratively and is not callback based. */ typedef struct { const char *s; int len; int pos; double numval; } RSExprToken; #endifRediSearch-1.2.2/src/aggregate/filter.c000066400000000000000000000031001364126773500177030ustar00rootroot00000000000000#include #include #include #include #include typedef struct { RSExpr *exp; RSSortingTable *sortables; RSExprEvalCtx ctx; RSValue val; } FilterCtx; static FilterCtx *NewFilterCtx() { FilterCtx *ret = malloc(sizeof(*ret)); return ret; } void Filter_Free(ResultProcessor *p) { FilterCtx *pc = p->ctx.privdata; RSFunctionEvalCtx_Free(pc->ctx.fctx); RSExpr_Free(pc->exp); free(pc); free(p); } int Filter_Next(ResultProcessorCtx *ctx, SearchResult *res) { FilterCtx *pc = ctx->privdata; char *err; do { // read while we either get EOF or the filter expr evaluates to true RESULTPROCESSOR_MAYBE_RET_EOF(ctx->upstream, res, 1); pc->ctx.r = res; pc->ctx.fctx->res = res; int rc = RSExpr_Eval(&pc->ctx, pc->exp, &pc->val, &err); if (rc == EXPR_EVAL_OK) { if (RSValue_BoolTest(&pc->val)) { return RS_RESULT_OK; } } } while (1); return RS_RESULT_EOF; } ResultProcessor *NewFilter(RedisSearchCtx *sctx, ResultProcessor *upstream, const char *expr, size_t len, char **err) { FilterCtx *ctx = NewFilterCtx(); ctx->ctx.sctx = sctx; ctx->ctx.sortables = sctx && sctx->spec ? sctx->spec->sortables : NULL; ctx->ctx.fctx = RS_NewFunctionEvalCtx(); ctx->exp = RSExpr_Parse(expr, len, err); if (!ctx->exp) { free(ctx); return NULL; } ResultProcessor *proc = NewResultProcessor(upstream, ctx); proc->Next = Filter_Next; proc->Free = Filter_Free; return proc; } RediSearch-1.2.2/src/aggregate/functions/000077500000000000000000000000001364126773500202705ustar00rootroot00000000000000RediSearch-1.2.2/src/aggregate/functions/date.c000066400000000000000000000216431364126773500213570ustar00rootroot00000000000000#include #include #include #include #include #include "function.h" #define ISOFMT "%FT%TZ" #define ISOFMT_LEN sizeof(ISOFMT) - 1 // TIME(propert, [fmt_string]) static int timeFormat(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("time", 1, 2, err); const char *fmt = ISOFMT; if (argc == 2) { VALIDATE_ARG_TYPE("time", argv, 1, RSValue_String); fmt = RSValue_StringPtrLen(&argv[1], NULL); } // Get the format static char timebuf[1024] = {0}; // Should be enough for any human time string double n; // value is not a number if (!RSValue_ToNumber(&argv[0], &n)) { goto err; } time_t tt = (time_t)n; struct tm tm; if (!gmtime_r(&tt, &tm)) { // could not convert value to timestamp goto err; } size_t rv = strftime(timebuf, sizeof timebuf, fmt, &tm); if (rv == 0) { // invalid format goto err; } // Finally, allocate a buffer to store the time! char *buf = RSFunction_Strndup(ctx, timebuf, rv); // It will be released by the block allocator destruction, so we refer to it is a static string so // the value ref counter will not release it RSValue_SetConstString(result, buf, rv); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } /* Fast alternative to mktime which is dog slow. From: https://gmbabar.wordpress.com/2010/12/01/mktime-slow-use-custom-function/ */ time_t fast_timegm(const struct tm *ltm) { // elapsed days until the beginning of every month const int mon_days[] = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334}; long tyears, tdays, leaps, utc_hrs; tyears = ltm->tm_year - 70; // tm->tm_year is from 1900. leaps = (tyears + 2) / 4; // no of next two lines until year 2100. // i = (ltm->tm_year – 100) / 100; // leaps -= ( (i/4)*3 + i%4 ); tdays = mon_days[ltm->tm_mon]; tdays += ltm->tm_mday - 1; // days of month passed. tdays = tdays + (tyears * 365) + leaps; return (tdays * 86400) + (ltm->tm_hour * 3600) + (ltm->tm_min * 60) + ltm->tm_sec; } static int func_hour(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("hour", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); tmm.tm_sec = 0; tmm.tm_min = 0; ts = fast_timegm(&tmm); RSValue_SetNumber(result, (double)ts); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int func_minute(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("minute", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } RSValue_SetNumber(result, floor(d - fmod(d, 60))); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } /* Round timestamp to its day start */ static int func_day(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("day", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); tmm.tm_sec = 0; tmm.tm_hour = 0; tmm.tm_min = 0; ts = fast_timegm(&tmm); RSValue_SetNumber(result, (double)ts); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int func_dayofmonth(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("dayofmonth", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); RSValue_SetNumber(result, (double)tmm.tm_mday); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int func_dayofweek(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("dayofweek", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); RSValue_SetNumber(result, (double)tmm.tm_wday); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int func_dayofyear(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("dayofyear", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); RSValue_SetNumber(result, (double)tmm.tm_yday); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int func_year(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("year", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); RSValue_SetNumber(result, (double)tmm.tm_year + 1900); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } /* Round a timestamp to the beginning of the month */ static int func_month(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("month", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); tmm.tm_sec = 0; tmm.tm_hour = 0; tmm.tm_min = 0; tmm.tm_mday = 1; ts = fast_timegm(&tmm); RSValue_SetNumber(result, (double)ts); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int func_monthofyear(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("monthofyear", 1, 1, err); double d; if (!RSValue_ToNumber(&argv[0], &d) || d < 0) { goto err; } time_t ts = (time_t)d; struct tm tmm; gmtime_r(&ts, &tmm); RSValue_SetNumber(result, (double)tmm.tm_mon); return EXPR_EVAL_OK; err: // on runtime error (bad formatting, etc) we just set the result to null RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } static int parseTime(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("parse_time", 2, 2, err); VALIDATE_ARG_ISSTRING("parse_time", argv, 0); VALIDATE_ARG_ISSTRING("parse_time", argv, 1); char fmtbuf[1024] = {0}; char valbuf[1024] = {0}; size_t fmtlen; const char *origfmt = RSValue_StringPtrLen(&argv[0], &fmtlen); if (fmtlen > sizeof(fmtbuf)) { goto err; } size_t vallen; const char *origval = RSValue_StringPtrLen(&argv[1], &vallen); if (vallen > sizeof(valbuf)) { goto err; } memcpy(fmtbuf, origfmt, fmtlen); memcpy(valbuf, origval, vallen); struct tm tm = {0}; char *rc = strptime(valbuf, fmtbuf, &tm); if (rc == NULL) { goto err; } time_t rv = timegm(&tm); RSValue_SetNumber(result, rv); return EXPR_EVAL_OK; err: RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } void RegisterDateFunctions() { RSFunctionRegistry_RegisterFunction("timefmt", timeFormat, RSValue_String); RSFunctionRegistry_RegisterFunction("parse_time", parseTime, RSValue_Number); RSFunctionRegistry_RegisterFunction("hour", func_hour, RSValue_Number); RSFunctionRegistry_RegisterFunction("minute", func_minute, RSValue_Number); RSFunctionRegistry_RegisterFunction("day", func_day, RSValue_Number); RSFunctionRegistry_RegisterFunction("month", func_month, RSValue_Number); RSFunctionRegistry_RegisterFunction("monthofyear", func_monthofyear, RSValue_Number); RSFunctionRegistry_RegisterFunction("year", func_year, RSValue_Number); RSFunctionRegistry_RegisterFunction("dayofmonth", func_dayofmonth, RSValue_Number); RSFunctionRegistry_RegisterFunction("dayofweek", func_dayofweek, RSValue_Number); RSFunctionRegistry_RegisterFunction("dayofyear", func_dayofyear, RSValue_Number); }RediSearch-1.2.2/src/aggregate/functions/function.c000066400000000000000000000035111364126773500222610ustar00rootroot00000000000000#define RS_FUNCTION_C_ #include "function.h" /* Allocate some memory for a function that can be freed automatically when the execution is done */ inline void *RSFunction_Alloc(RSFunctionEvalCtx *ctx, size_t sz) { return BlkAlloc_Alloc(&ctx->alloc, sz, MAX(sz, 1024)); } char *RSFunction_Strndup(RSFunctionEvalCtx *ctx, const char *str, size_t len) { char *ret = RSFunction_Alloc(ctx, len + 1); memcpy(ret, str, len); ret[len] = '\0'; return ret; } void RSFunctionEvalCtx_Free(RSFunctionEvalCtx *ctx) { BlkAlloc_FreeAll(&ctx->alloc, NULL, NULL, 0); free(ctx); } RSFunctionEvalCtx *RS_NewFunctionEvalCtx() { RSFunctionEvalCtx *ret = malloc(sizeof(*ret)); BlkAlloc_Init(&ret->alloc); return ret; } static RSFunctionRegistry functions_g = {0}; RSFunction RSFunctionRegistry_Get(const char *name, size_t len) { for (size_t i = 0; i < functions_g.len; i++) { if (len == strlen(functions_g.funcs[i].name) && !strncasecmp(functions_g.funcs[i].name, name, len)) { return functions_g.funcs[i].f; } } return NULL; } RSValueType RSFunctionRegistry_GetType(const char *name, size_t len) { for (size_t i = 0; i < functions_g.len; i++) { if (len == strlen(functions_g.funcs[i].name) && !strncasecmp(functions_g.funcs[i].name, name, len)) { return functions_g.funcs[i].retType; } } return RSValue_Null; } int RSFunctionRegistry_RegisterFunction(const char *name, RSFunction f, RSValueType retType) { if (functions_g.len + 1 >= functions_g.cap) { functions_g.cap += functions_g.cap ? functions_g.cap : 2; functions_g.funcs = realloc(functions_g.funcs, functions_g.cap * sizeof(*functions_g.funcs)); } functions_g.funcs[functions_g.len].f = f; functions_g.funcs[functions_g.len].name = name; functions_g.funcs[functions_g.len].retType = retType; functions_g.len++; return 1; } RediSearch-1.2.2/src/aggregate/functions/function.h000066400000000000000000000050401364126773500222650ustar00rootroot00000000000000#ifndef RS_FUNCTION_H_ #define RS_FUNCTION_H_ #include #include #include #include #define VALIDATE_ARGS(fname, minargs, maxargs, err) \ if (argc < minargs || argc > maxargs) { \ SET_ERR(err, "Invalid arguments for function '" fname "'"); \ return EXPR_EVAL_ERR; \ } #define VALIDATE_ARG__COMMON(fname, args, idx, verifier, varg) \ { \ RSValue *dref = RSValue_Dereference(&args[idx]); \ if (!verifier(dref, varg)) { \ \ FMT_ERR(err, "Invalid type (%d) for argument %d in function '%s'. %s(v, %s) was false.", \ dref->t, idx, fname, #verifier, #varg); \ return EXPR_EVAL_ERR; \ } \ } #define VALIDATE_ARG__TYPE(arg, t_) ((arg)->t == t_) #define VALIDATE_ARG_TYPE(fname, args, idx, t) \ VALIDATE_ARG__COMMON(fname, args, idx, VALIDATE_ARG__TYPE, t) #define VALIDATE_ARG__STRING(arg, unused) RSValue_IsString(arg) #define VALIDATE_ARG_ISSTRING(fname, args, idx) \ VALIDATE_ARG__COMMON(fname, args, idx, VALIDATE_ARG__STRING, 0) typedef struct RSFunctionEvalCtx { BlkAlloc alloc; SearchResult *res; } RSFunctionEvalCtx; RSFunctionEvalCtx *RS_NewFunctionEvalCtx(); void RSFunctionEvalCtx_Free(RSFunctionEvalCtx *ctx); void *RSFunction_Alloc(RSFunctionEvalCtx *ctx, size_t sz); char *RSFunction_Strndup(RSFunctionEvalCtx *ctx, const char *str, size_t len); typedef int (*RSFunction)(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err); typedef struct { size_t len; size_t cap; struct { RSFunction f; const char *name; RSValueType retType; } * funcs; } RSFunctionRegistry; RSFunction RSFunctionRegistry_Get(const char *name, size_t len); RSValueType RSFunctionRegistry_GetType(const char *name, size_t len); int RSFunctionRegistry_RegisterFunction(const char *name, RSFunction f, RSValueType retType); void RegisterMathFunctions(); void RegisterStringFunctions(); void RegisterDateFunctions(); #endifRediSearch-1.2.2/src/aggregate/functions/math.c000066400000000000000000000040501364126773500213640ustar00rootroot00000000000000#include "function.h" #include #include #include /* Template for single argument double to double math function */ #define NUMERIC_SIMPLE_FUNCTION(f) \ static int mathfunc_##f(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, \ char **err) { \ if (argc != 1) { \ SET_ERR(err, "Invalid number of arguments for function '" #f); \ return EXPR_EVAL_ERR; \ } \ double d; \ if (!RSValue_ToNumber(&argv[0], &d)) { \ RSValue_SetNumber(result, NAN); \ return EXPR_EVAL_OK; \ } \ RSValue_SetNumber(result, f(d)); \ return EXPR_EVAL_OK; \ } NUMERIC_SIMPLE_FUNCTION(log); NUMERIC_SIMPLE_FUNCTION(floor); NUMERIC_SIMPLE_FUNCTION(fabs); NUMERIC_SIMPLE_FUNCTION(ceil); NUMERIC_SIMPLE_FUNCTION(sqrt); NUMERIC_SIMPLE_FUNCTION(log2); NUMERIC_SIMPLE_FUNCTION(exp); #define REGISTER_MATHFUNC(name, f) \ RSFunctionRegistry_RegisterFunction(name, mathfunc_##f, RSValue_Number); void RegisterMathFunctions() { REGISTER_MATHFUNC("log", log); REGISTER_MATHFUNC("floor", floor); REGISTER_MATHFUNC("abs", fabs); REGISTER_MATHFUNC("ceil", ceil); REGISTER_MATHFUNC("sqrt", sqrt); REGISTER_MATHFUNC("log2", log2); REGISTER_MATHFUNC("exp", exp); }RediSearch-1.2.2/src/aggregate/functions/string.c000066400000000000000000000176061364126773500217540ustar00rootroot00000000000000#include #include #include #include #include #include #include "function.h" #include #define STRING_BLOCK_SIZE 512 static int func_matchedTerms(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { int maxTerms = 0; if (argc == 1) { double d; if (RSValue_ToNumber(&argv[0], &d)) { if (d > 0) { maxTerms = (int)d; } } } SearchResult *res = ctx->res; if (maxTerms == 0) maxTerms = 100; maxTerms = MIN(100, maxTerms); // fprintf(stderr, "res %p, indexresult %p\n", res, res ? res->indexResult : NULL); if (res && res->indexResult) { RSQueryTerm *terms[maxTerms]; size_t n = IndexResult_GetMatchedTerms(ctx->res->indexResult, terms, maxTerms); if (n) { RSValue **arr = calloc(n, sizeof(RSValue *)); for (size_t i = 0; i < n; i++) { arr[i] = RS_ConstStringVal(terms[i]->str, terms[i]->len); } RSValue *v = RS_ArrVal(arr, n); RSValue_MakeReference(result, v); return EXPR_EVAL_OK; } } RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } /* lower(str) */ static int stringfunc_tolower(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("lower", 1, 1, err); if (!RSValue_IsString(&argv[0])) { RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } size_t sz = 0; char *p = (char *)RSValue_StringPtrLen(&argv[0], &sz); char *np = RSFunction_Alloc(ctx, sz + 1); for (size_t i = 0; i < sz; i++) { np[i] = tolower(p[i]); } np[sz] = '\0'; RSValue_SetConstString(result, np, sz); return EXPR_EVAL_OK; } /* upper(str) */ static int stringfunc_toupper(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("upper", 1, 1, err); if (!RSValue_IsString(&argv[0])) { RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_OK; } size_t sz = 0; char *p = (char *)RSValue_StringPtrLen(&argv[0], &sz); char *np = RSFunction_Alloc(ctx, sz + 1); for (size_t i = 0; i < sz; i++) { np[i] = toupper(p[i]); } np[sz] = '\0'; RSValue_SetConstString(result, np, sz); return EXPR_EVAL_OK; } /* substr(str, offset, len) */ static int stringfunc_substr(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { VALIDATE_ARGS("substr", 3, 3, err); VALIDATE_ARG_TYPE("substr", argv, 1, RSValue_Number); VALIDATE_ARG_TYPE("substr", argv, 2, RSValue_Number); size_t sz; const char *str = RSValue_StringPtrLen(&argv[0], &sz); if (!str) { SET_ERR(err, "Invalid type for substr, expected string"); return EXPR_EVAL_ERR; } int offset = (int)RSValue_Dereference(&argv[1])->numval; int len = (int)RSValue_Dereference(&argv[2])->numval; // for negative offsets we count from the end of the string if (offset < 0) { offset = (int)sz + offset; } offset = MAX(0, MIN(offset, sz)); // len < 0 means read until the end of the string if (len < 0) { len = MAX(0, (sz - offset) + len); } if (offset + len > sz) { len = sz - offset; } char *dup = RSFunction_Strndup(ctx, &str[offset], len); RSValue_SetConstString(result, dup, len); return EXPR_EVAL_OK; } static int stringfunc_format(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { if (argc < 1) { SET_ERR(err, "Need at least one argument for format"); return EXPR_EVAL_ERR; } VALIDATE_ARG_ISSTRING("format", argv, 0); size_t argix = 1; size_t fmtsz = 0; const char *fmt = RSValue_StringPtrLen(&argv[0], &fmtsz); const char *last = fmt, *end = fmt + fmtsz; sds out = sdsMakeRoomFor(sdsnew(""), fmtsz); for (size_t ii = 0; ii < fmtsz; ++ii) { if (fmt[ii] != '%') { continue; } if (fmt[ii] == fmtsz - 1) { // ... %" SET_ERR(err, "Bad format string!"); goto error; } // Detected a format string. Write from 'last' up to 'fmt' out = sdscatlen(out, last, (fmt + ii) - last); last = fmt + ii + 2; char type = fmt[++ii]; if (type == '%') { // Append literal '%' out = sdscat(out, "%"); continue; } if (argix == argc) { SET_ERR(err, "Not enough arguments for format"); goto error; } RSValue *arg = RSValue_Dereference(&argv[argix++]); if (type == 's') { if (arg->t == RSValue_Null) { // write null value out = sdscat(out, "(null)"); continue; } else if (!RSValue_IsString(arg)) { RSValue strval = RSVALUE_STATIC; RSValue_ToString(&strval, arg); size_t sz; const char *str = RSValue_StringPtrLen(&strval, &sz); if (!str) { out = sdscat(out, "(null)"); } else { out = sdscatlen(out, str, sz); } RSValue_Free(&strval); } else { size_t sz; const char *str = RSValue_StringPtrLen(arg, &sz); out = sdscatlen(out, str, sz); } } else { SET_ERR(err, "Unknown format specifier passed"); goto error; } } if (last && last < end) { out = sdscatlen(out, last, end - last); } RSValue_SetSDS(result, out); return EXPR_EVAL_OK; error: if (!*err) { SET_ERR(err, "Error in format"); } sdsfree(out); RSValue_MakeReference(result, RS_NullVal()); return EXPR_EVAL_ERR; } char *strtrim(char *s, size_t sl, size_t *outlen, const char *cset) { char *start, *end, *sp, *ep; sp = start = s; ep = end = s + sl - 1; while (sp <= end && strchr(cset, *sp)) sp++; while (ep > sp && strchr(cset, *ep)) ep--; *outlen = (sp > ep) ? 0 : ((ep - sp) + 1); return sp; } static int stringfunc_split(RSFunctionEvalCtx *ctx, RSValue *result, RSValue *argv, int argc, char **err) { if (argc < 1 || argc > 3) { SET_ERR(err, "Invalid number of arguments for split"); return EXPR_EVAL_ERR; } VALIDATE_ARG_ISSTRING("format", argv, 0); const char *sep = ","; const char *strp = " "; if (argc >= 2) { VALIDATE_ARG_ISSTRING("format", argv, 1); sep = RSValue_StringPtrLen(&argv[1], NULL); } if (argc == 3) { VALIDATE_ARG_ISSTRING("format", argv, 2); strp = RSValue_StringPtrLen(&argv[2], NULL); } size_t len; char *str = (char *)RSValue_StringPtrLen(&argv[0], &len); char *ep = str + len; size_t l = 0; char *next; char *tok = str; // extract at most 1024 values static RSValue *tmp[1024]; while (l < 1024 && tok < ep) { next = strpbrk(tok, sep); size_t sl = next ? (next - tok) : ep - tok; if (sl > 0) { size_t outlen; // trim the strip set char *s = strtrim(tok, sl, &outlen, strp); if (outlen) { // we mark the strings as volatile so they'll be copied if persisted // otherwise we'd have to copy them... tmp[l++] = RS_StringValT(s, outlen, RSString_Volatile); } } // advance tok while it's not in the sep if (!next) break; tok = next + 1; } // if (len > 0) { // tmp[l++] = RS_ConstStringVal(tok, len); // } RSValue **vals = calloc(l, sizeof(*vals)); for (size_t i = 0; i < l; i++) { vals[i] = tmp[i]; } RSValue *ret = RS_ArrVal(vals, l); RSValue_MakeReference(result, ret); return EXPR_EVAL_OK; } void RegisterStringFunctions() { RSFunctionRegistry_RegisterFunction("lower", stringfunc_tolower, RSValue_String); RSFunctionRegistry_RegisterFunction("upper", stringfunc_toupper, RSValue_String); RSFunctionRegistry_RegisterFunction("substr", stringfunc_substr, RSValue_String); RSFunctionRegistry_RegisterFunction("format", stringfunc_format, RSValue_String); RSFunctionRegistry_RegisterFunction("split", stringfunc_split, RSValue_Array); RSFunctionRegistry_RegisterFunction("matched_terms", func_matchedTerms, RSValue_Array); } RediSearch-1.2.2/src/aggregate/group_by.c000066400000000000000000000166211364126773500202600ustar00rootroot00000000000000#include #include #include #include #define GROUPBY_C_ #include "reducer.h" /* A group context is used by the reducer to manage context for a single group */ typedef struct { void *ptr; void (*free)(void *); } GroupCtx; /* A group represents the allocated context of all reducers in a group, and the selected values of * that group */ typedef struct { size_t len; // Number of contexts RSFieldMap *values; GroupCtx ctxs[0]; } Group; #define kh_set(kname, hash, key, val) \ ({ \ int ret; \ k = kh_put(kname, hash, key, &ret); \ kh_value(hash, k) = val; \ ret; \ }) static const int khid = 33; KHASH_MAP_INIT_INT64(khid, Group *); #define GROUP_CTX(g, i) (g->ctxs[i].ptr) #define GROUP_BYTESIZE(parent) (sizeof(Group) + (sizeof(GroupCtx) * (parent)->numReducers)) #define GROUPS_PER_BLOCK 1024 typedef struct Grouper { khash_t(khid) * groups; BlkAlloc groupsAlloc; RSMultiKey *keys; RSSortingTable *sortTable; Reducer **reducers; size_t numReducers; size_t capReducers; int accumulating; int sortKeyIdx; khiter_t iter; int hasIter; } Grouper; static Group *GroupAlloc(void *ctx) { Grouper *g = ctx; size_t elemSize = sizeof(Group) + (sizeof(GroupCtx) * g->numReducers); Group *group = BlkAlloc_Alloc(&g->groupsAlloc, elemSize, GROUPS_PER_BLOCK * elemSize); memset(group, 0, elemSize); for (size_t ii = 0; ii < g->numReducers; ++ii) { group->ctxs[ii].ptr = g->reducers[ii]->NewInstance(&g->reducers[ii]->ctx); group->ctxs[ii].free = g->reducers[ii]->FreeInstance; } return group; } static inline void Group_Init(Group *group, Grouper *g, RSValue **arr, uint64_t hash) { // Copy the group keys to the new group group->len = g->numReducers; group->values = RS_NewFieldMap(g->keys->len + g->numReducers + 1); for (size_t i = 0; i < g->keys->len; i++) { // We must do a deep copy of the group values since they may be deleted during processing RSFieldMap_Add(&group->values, g->keys->keys[i].key, RSValue_MakePersistent(arr[i])); } // RSFieldMap_Print(group->values); } static void gtGroupClean(Group *group, void *unused_a, void *unused_b) { for (size_t i = 0; i < group->len; i++) { if (group->ctxs[i].free) { group->ctxs[i].free(group->ctxs[i].ptr); } } group->len = 0; if (group->values) { RSFieldMap_Free(group->values); group->values = NULL; } } /* Wrapper for block allocator callback */ static void baGroupClean(void *ptr, void *arg) { gtGroupClean(ptr, NULL, NULL); } /* Yield - pops the current top result from the heap */ static int grouper_Yield(Grouper *g, SearchResult *r) { if (!g->hasIter) { g->iter = kh_begin(g->groups); g->hasIter = 1; } char *s; tm_len_t l; Group *gr; for (; g->iter != kh_end(g->groups); ++g->iter) { if (kh_exist(g->groups, g->iter)) { gr = kh_value(g->groups, g->iter); if (r->fields) { RSFieldMap_Free(r->fields); r->fields = NULL; } // We copy the group field map (containing the group keys) as is to the result as a field map! r->fields = gr->values; r->indexResult = NULL; gr->values = NULL; // Copy the reducer values to the group for (size_t i = 0; i < g->numReducers; i++) { g->reducers[i]->Finalize(GROUP_CTX(gr, i), g->reducers[i]->alias, r); } ++g->iter; return RS_RESULT_OK; } } return RS_RESULT_EOF; } static inline void Group_HandleValues(Grouper *g, Group *gr, SearchResult *res) { for (size_t i = 0; i < g->numReducers; i++) { g->reducers[i]->Add(GROUP_CTX(gr, i), res); } } /* Extract the group keys from the result and add to them */ static void Grouper_ExtractGroups(Grouper *g, SearchResult *res, RSValue **arr, int idx, int arridx, int len, uint64_t hval) { // end of the line - create/add to group if (idx == len) { Group *group = NULL; // Get or create the group khiter_t k = kh_get(khid, g->groups, hval); // first have to get ieter if (k == kh_end(g->groups)) { // k will be equal to kh_end if key not present group = GroupAlloc(g); kh_set(khid, g->groups, hval, group); Group_Init(group, g, arr, hval); } else { group = kh_value(g->groups, k); } // send the result to the group and its reducers Group_HandleValues(g, group, res); return; } // get the value RSValue *v = RSValue_Dereference(arr[idx]); // regular value - just move one step if (v->t != RSValue_Array) { Grouper_ExtractGroups(g, res, arr, idx + 1, 0, len, RSValue_Hash(v, hval)); } else { // advance one in the overall array hashing current value in current array RSValue *tmp = arr[idx]; arr[idx] = RSValue_ArrayItem(v, arridx); uint64_t hh = RSValue_Hash(arr[idx], hval); Grouper_ExtractGroups(g, res, arr, idx + 1, 0, len, hh); arr[idx] = tmp; if (arridx + 1 < RSValue_ArrayLen(v)) { // advance to the next array element Grouper_ExtractGroups(g, res, arr, idx, arridx + 1, len, hval); } } } static int Grouper_Next(ResultProcessorCtx *ctx, SearchResult *res) { // static SearchResult up; Grouper *g = ctx->privdata; if (!g->accumulating) { return grouper_Yield(g, res); } int rc = ResultProcessor_Next(ctx->upstream, res, 1); // if our upstream has finished - just change the state to not accumulating, and yield if (rc == RS_RESULT_EOF) { // Set the number of results to the total number of groups we found if (ctx->qxc) { ctx->qxc->totalResults = kh_size(g->groups); } g->accumulating = 0; return grouper_Yield(g, res); } // Group *group; RSValue *vals[g->keys->len]; for (size_t i = 0; i < g->keys->len; i++) { vals[i] = SearchResult_GetValue(res, g->sortTable, &g->keys->keys[i]); } Grouper_ExtractGroups(g, res, vals, 0, 0, g->keys->len, 0); res->indexResult = NULL; SearchResult_FreeInternal(res); return RS_RESULT_QUEUED; } void Grouper_Free(Grouper *g) { kh_destroy(khid, g->groups); BlkAlloc_FreeAll(&g->groupsAlloc, baGroupClean, g, GROUP_BYTESIZE(g)); for (size_t i = 0; i < g->numReducers; i++) { g->reducers[i]->Free(g->reducers[i]); } RSMultiKey_Free(g->keys); free(g->reducers); free(g); } // Free just frees up the processor. If left as NULL we simply use free() static void Grouper_FreeProcessor(struct resultProcessor *p) { Grouper *g = p->ctx.privdata; Grouper_Free(g); free(p); // KHTable_FreeEx(&g->groups, NULL, gtGroupClean); } Grouper *NewGrouper(RSMultiKey *keys, RSSortingTable *tbl) { Grouper *g = malloc(sizeof(*g)); BlkAlloc_Init(&g->groupsAlloc); g->groups = kh_init(khid); g->sortTable = tbl; g->keys = keys; g->capReducers = 2; g->reducers = calloc(g->capReducers, sizeof(Reducer *)); g->numReducers = 0; g->accumulating = 1; g->hasIter = 0; return g; } ResultProcessor *NewGrouperProcessor(Grouper *g, ResultProcessor *upstream) { ResultProcessor *p = NewResultProcessor(upstream, g); p->Next = Grouper_Next; p->Free = Grouper_FreeProcessor; return p; } void Grouper_AddReducer(Grouper *g, Reducer *r) { if (!r) return; g->numReducers++; if (g->numReducers == g->capReducers) { g->capReducers *= 2; g->reducers = realloc(g->reducers, g->capReducers * sizeof(Reducer *)); } g->reducers[g->numReducers - 1] = r; }RediSearch-1.2.2/src/aggregate/project.h000066400000000000000000000004411364126773500200760ustar00rootroot00000000000000#ifndef PROJECT_H__ #define PROJECT_H__ #include #include ResultProcessor *NewProjector(RedisSearchCtx *sctx, ResultProcessor *upstream, const char *alias, const char *expr, size_t len, char **err); #endif RediSearch-1.2.2/src/aggregate/projector.c000066400000000000000000000035011364126773500204320ustar00rootroot00000000000000#include #include #include #include #include #include #include "project.h" #include #include typedef struct { RSExpr *exp; const char *alias; RSSortingTable *sortables; RSExprEvalCtx ctx; RSValue val; } ProjectorCtx; static ProjectorCtx *NewProjectorCtx(const char *alias) { ProjectorCtx *ret = malloc(sizeof(*ret)); ret->alias = alias; return ret; } void Projector_Free(ResultProcessor *p) { ProjectorCtx *pc = p->ctx.privdata; RSFunctionEvalCtx_Free(pc->ctx.fctx); RSExpr_Free(pc->exp); free(pc); free(p); } int Projector_Next(ResultProcessorCtx *ctx, SearchResult *res) { RESULTPROCESSOR_MAYBE_RET_EOF(ctx->upstream, res, 1); ProjectorCtx *pc = ctx->privdata; pc->ctx.r = res; pc->ctx.fctx->res = res; char *err; int rc = RSExpr_Eval(&pc->ctx, pc->exp, &pc->val, &err); if (rc == EXPR_EVAL_OK) { RSValue *a = RS_NewValue(RSValue_Null); *a = pc->val; a->allocated = 1; a->refcount = 0; RSFieldMap_Set(&res->fields, pc->alias, a); } else { RSFieldMap_Set(&res->fields, pc->alias, RS_NullVal()); } return RS_RESULT_OK; } ResultProcessor *NewProjector(RedisSearchCtx *sctx, ResultProcessor *upstream, const char *alias, const char *expr, size_t len, char **err) { ProjectorCtx *ctx = NewProjectorCtx(alias); ctx->ctx.sctx = sctx; ctx->ctx.sortables = sctx && sctx->spec ? sctx->spec->sortables : NULL; ctx->ctx.fctx = RS_NewFunctionEvalCtx(); ctx->exp = RSExpr_Parse(expr, len, err); if (!ctx->exp) { free(ctx); return NULL; } ResultProcessor *proc = NewResultProcessor(upstream, ctx); proc->Next = Projector_Next; proc->Free = Projector_Free; return proc; } RediSearch-1.2.2/src/aggregate/reducer.c000066400000000000000000000170771364126773500200710ustar00rootroot00000000000000#include "reducer.h" #include "aggregate.h" #include #include #include static Reducer *NewCountArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { return NewCount(ctx, alias); } static Reducer *NewSumArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for SUM"); return NULL; } return NewSum(ctx, RSKEY(RSValue_StringPtrLen(args[0], NULL)), alias); } static Reducer *NewToListArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for TOLIST"); return NULL; } return NewToList(ctx, RSKEY(RSValue_StringPtrLen(args[0], NULL)), alias); } static Reducer *NewMinArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for MIN"); return NULL; } return NewMin(ctx, RSKEY(RSValue_StringPtrLen(args[0], NULL)), alias); } static Reducer *NewMaxArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for MAX"); return NULL; } return NewMax(ctx, RSKEY(RSValue_StringPtrLen(args[0], NULL)), alias); } static Reducer *NewAvgArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for AVG"); return NULL; } return NewAvg(ctx, RSKEY(RSValue_StringPtrLen(args[0], NULL)), alias); } static Reducer *NewCountDistinctArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for COUNT_DISTINCT"); return NULL; } return NewCountDistinct(ctx, alias, RSKEY(RSValue_StringPtrLen(args[0], NULL))); } static Reducer *NewCountDistinctishArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for COUNT_DISTINCTISH"); return NULL; } return NewCountDistinctish(ctx, alias, RSKEY(RSValue_StringPtrLen(args[0], NULL))); } /* REDUCE FRIST_VALUE {nargs} @property [BY @property DESC|ASC] */ static Reducer *NewFirstValueArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { char *prop = NULL; char *by = NULL; char *sortBy = NULL; char *asc = NULL; // Parse all and make sure we were valid if (!RSValue_ArrayAssign(args, argc, "s?sss", &prop, &by, &sortBy, &asc) || (by && strcasecmp(by, "BY")) || (asc && strcasecmp(asc, "ASC") && strcasecmp(asc, "DESC"))) { SET_ERR(err, "Invalid arguments for FIRST_VALUE"); return NULL; } // printf("prop: %s, by: %s, sortBy: %s, asc: %s\n", prop, by, sortBy, asc); int ascend = 1; if (asc && !strcasecmp(asc, "DESC")) ascend = 0; return NewFirstValue(ctx, RSKEY(prop), RSKEY(sortBy), ascend, alias); } static Reducer *NewStddevArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for STDDEV"); return NULL; } return NewStddev(ctx, RSKEY(RSValue_StringPtrLen(args[0], NULL)), alias); } static Reducer *NewQuantileArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc < 2 || argc > 3 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for QUANTILE"); return NULL; } const char *property = RSKEY(RSValue_StringPtrLen(args[0], NULL)); double pct; if (!RSValue_ToNumber(args[1], &pct)) { SET_ERR(err, "Could not parse percent for QUANTILE(key, pct)"); return NULL; } if (pct <= 0 || pct >= 1) { SET_ERR(err, "Quantile must be between 0.0 and 1.0 (exclusive) )"); return NULL; } double resolution = 500; if (argc > 2) { if (!RSValue_ToNumber(args[2], &resolution)) { SET_ERR(err, "Could not parse resolution"); return NULL; } else if (resolution < 1 || resolution > MAX_SAMPLE_SIZE) { SET_ERR(err, "Invalid resolution"); return NULL; } } return NewQuantile(ctx, property, alias, pct, resolution); } static Reducer *NewRandomSampleArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 2 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for RANDOM_SAMPLE"); return NULL; } const char *property = RSKEY(RSValue_StringPtrLen(args[0], NULL)); double d; if (!RSValue_ToNumber(args[1], &d)) { SET_ERR(err, "Could not parse size for random sample"); return NULL; } int size = (int)d; if (size <= 0 || size >= MAX_SAMPLE_SIZE) { SET_ERR(err, "Invalid size for random sample"); } return NewRandomSample(ctx, size, property, alias); } static Reducer *NewHllArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for HLL"); return NULL; } return NewHLL(ctx, alias, RSKEY(RSValue_StringPtrLen(args[0], NULL))); } static Reducer *NewHllSumArgs(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err) { if (argc != 1 || !RSValue_IsString(args[0])) { SET_ERR(err, "Invalid arguments for HLL_SUM"); return NULL; } return NewHLLSum(ctx, alias, RSKEY(RSValue_StringPtrLen(args[0], NULL))); } typedef Reducer *(*ReducerFactory)(RedisSearchCtx *ctx, RSValue **args, size_t argc, const char *alias, char **err); static struct { const char *k; ReducerFactory f; RSValueType retType; } reducers_g[] = { {"sum", NewSumArgs, RSValue_Number}, {"min", NewMinArgs, RSValue_Number}, {"max", NewMaxArgs, RSValue_Number}, {"avg", NewAvgArgs, RSValue_Number}, {"count", NewCountArgs, RSValue_Number}, {"count_distinct", NewCountDistinctArgs, RSValue_Number}, {"count_distinctish", NewCountDistinctishArgs, RSValue_Number}, {"tolist", NewToListArgs, RSValue_Array}, {"quantile", NewQuantileArgs, RSValue_Number}, {"stddev", NewStddevArgs, RSValue_Number}, {"first_value", NewFirstValueArgs, RSValue_String}, {"random_sample", NewRandomSampleArgs, RSValue_Array}, {"hll", NewHllArgs, RSValue_String}, {"hll_sum", NewHllSumArgs, RSValue_Number}, {NULL, NULL}, }; Reducer *GetReducer(RedisSearchCtx *ctx, const char *name, const char *alias, RSValue **args, size_t argc, char **err) { for (int i = 0; reducers_g[i].k != NULL; i++) { if (!strcasecmp(reducers_g[i].k, name)) { return reducers_g[i].f(ctx, args, argc, alias, err); } } FMT_ERR(err, "Could not find reducer '%s'", name); return NULL; } RSValueType GetReducerType(const char *name) { for (int i = 0; reducers_g[i].k != NULL; i++) { if (!strcasecmp(reducers_g[i].k, name)) { return reducers_g[i].retType; } } return RSValue_Null; } RediSearch-1.2.2/src/aggregate/reducer.h000066400000000000000000000060771364126773500200740ustar00rootroot00000000000000#ifndef RS_REDUCER_H_ #define RS_REDUCER_H_ #include #include #include #include #include /* Maximum possible value to random sample group size */ #define MAX_SAMPLE_SIZE 1000 typedef struct { void *privdata; const char *property; RedisSearchCtx *ctx; BlkAlloc alloc; } ReducerCtx; static inline void *ReducerCtx_Alloc(ReducerCtx *ctx, size_t sz, size_t blkSz) { return BlkAlloc_Alloc(&ctx->alloc, sz, blkSz); } typedef struct reducer { ReducerCtx ctx; char *alias; void *(*NewInstance)(ReducerCtx *ctx); int (*Add)(void *ctx, SearchResult *res); int (*Finalize)(void *ctx, const char *key, SearchResult *res); // Free just frees up the processor. If left as NULL we simply use free() void (*Free)(struct reducer *r); void (*FreeInstance)(void *ctx); } Reducer; static inline void Reducer_GenericFree(Reducer *r) { BlkAlloc_FreeAll(&r->ctx.alloc, NULL, 0, 0); free(r->ctx.privdata); free(r->alias); free(r); } /** * Exactly like GenericFree, but doesn't free private data. */ static inline void Reducer_GenericFreeWithStaticPrivdata(Reducer *r) { BlkAlloc_FreeAll(&r->ctx.alloc, NULL, 0, 0); free(r->alias); free(r); } static Reducer *NewReducer(RedisSearchCtx *ctx, void *privdata) { Reducer *r = malloc(sizeof(*r)); r->ctx.ctx = ctx; r->ctx.privdata = privdata; BlkAlloc_Init(&r->ctx.alloc); return r; } // Format a function name in the form of s(arg). Returns a pointer for use with 'free' static inline char *FormatAggAlias(const char *alias, const char *fname, const char *propname) { if (alias) { return strdup(alias); } if (!propname || *propname == 0) { return strdup(fname); } char *s = NULL; asprintf(&s, "%s(%s)", fname, propname); return s; } Reducer *NewCount(RedisSearchCtx *ctx, const char *alias); Reducer *NewSum(RedisSearchCtx *ctx, const char *property, const char *alias); Reducer *NewToList(RedisSearchCtx *ctx, const char *property, const char *alias); Reducer *NewMin(RedisSearchCtx *, const char *, const char *); Reducer *NewMax(RedisSearchCtx *, const char *, const char *); Reducer *NewAvg(RedisSearchCtx *, const char *, const char *); Reducer *NewCountDistinct(RedisSearchCtx *, const char *, const char *); Reducer *NewCountDistinctish(RedisSearchCtx *, const char *, const char *); Reducer *NewQuantile(RedisSearchCtx *, const char *, const char *, double, size_t); Reducer *NewStddev(RedisSearchCtx *, const char *, const char *); Reducer *GetReducer(RedisSearchCtx *ctx, const char *name, const char *alias, RSValue **args, size_t argc, char **err); RSValueType GetReducerType(const char *name); Reducer *NewFirstValue(RedisSearchCtx *ctx, const char *key, const char *sortKey, int asc, const char *alias); Reducer *NewRandomSample(RedisSearchCtx *sctx, int size, const char *property, const char *alias); Reducer *NewHLL(RedisSearchCtx *ctx, const char *alias, const char *key); Reducer *NewHLLSum(RedisSearchCtx *ctx, const char *alias, const char *key); #endifRediSearch-1.2.2/src/aggregate/reducers/000077500000000000000000000000001364126773500200745ustar00rootroot00000000000000RediSearch-1.2.2/src/aggregate/reducers/count.c000066400000000000000000000017221364126773500213720ustar00rootroot00000000000000#include #include struct counter { size_t count; }; void *counter_NewInstance(ReducerCtx *ctx) { BlkAlloc *ba = ctx->privdata; struct counter *ctr = ReducerCtx_Alloc(ctx, sizeof(*ctr), 1024 * sizeof(*ctr)); // malloc(sizeof(*ctr)); ctr->count = 0; return ctr; } int counter_Add(void *ctx, SearchResult *res) { struct counter *ctr = ctx; ctr->count++; return 1; } int counter_Finalize(void *ctx, const char *key, SearchResult *res) { struct counter *ctr = ctx; // printf("Counter finalize! count %zd\n", ctr->count); RSFieldMap_SetNumber(&res->fields, key, ctr->count); return 1; } Reducer *NewCount(RedisSearchCtx *ctx, const char *alias) { Reducer *r = NewReducer(ctx, NULL); r->Add = counter_Add; r->Finalize = counter_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = NULL; r->NewInstance = counter_NewInstance; r->alias = FormatAggAlias(alias, "count", ""); return r; }RediSearch-1.2.2/src/aggregate/reducers/count_distinct.c000066400000000000000000000160131364126773500232720ustar00rootroot00000000000000#include #include #include #include #include #include #define HLL_PRECISION_BITS 8 static const int khid = 35; KHASH_SET_INIT_INT64(khid); struct distinctCounter { size_t count; RSKey key; RSSortingTable *sortables; khash_t(khid) * dedup; }; static void *countDistinct_NewInstance(ReducerCtx *ctx) { BlkAlloc *ba = &ctx->alloc; struct distinctCounter *ctr = ReducerCtx_Alloc(ctx, sizeof(*ctr), 1024 * sizeof(*ctr)); // malloc(sizeof(*ctr)); ctr->count = 0; ctr->dedup = kh_init(khid); ctr->key = RS_KEY(RSKEY((char *)ctx->privdata)); ctr->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); return ctr; } static int countDistinct_Add(void *ctx, SearchResult *res) { struct distinctCounter *ctr = ctx; RSValue *val = SearchResult_GetValue(res, ctr->sortables, &ctr->key); if (!val || val->t == RSValue_Null) { return 1; } uint64_t hval = RSValue_Hash(val, 0); khiter_t k = kh_get(khid, ctr->dedup, hval); // first have to get ieter if (k == kh_end(ctr->dedup)) { ctr->count++; int ret; kh_put(khid, ctr->dedup, hval, &ret); } return 1; } static int countDistinct_Finalize(void *ctx, const char *key, SearchResult *res) { struct distinctCounter *ctr = ctx; // printf("Counter finalize! count %zd\n", ctr->count); RSFieldMap_SetNumber(&res->fields, key, ctr->count); return 1; } static void countDistinct_FreeInstance(void *p) { struct distinctCounter *ctr = p; // we only destroy the hash table. The object itself is allocated from a block and needs no // freeing kh_destroy(khid, ctr->dedup); } Reducer *NewCountDistinct(RedisSearchCtx *ctx, const char *alias, const char *key) { Reducer *r = NewReducer(ctx, (void *)key); r->Add = countDistinct_Add; r->Finalize = countDistinct_Finalize; r->Free = Reducer_GenericFreeWithStaticPrivdata; r->FreeInstance = countDistinct_FreeInstance; r->NewInstance = countDistinct_NewInstance; r->alias = FormatAggAlias(alias, "count_distinct", key); return r; } struct distinctishCounter { struct HLL hll; RSKey key; RSSortingTable *sortables; }; static void *countDistinctish_NewInstance(ReducerCtx *ctx) { BlkAlloc *ba = &ctx->alloc; struct distinctishCounter *ctr = ReducerCtx_Alloc(ctx, sizeof(*ctr), 1024 * sizeof(*ctr)); // malloc(sizeof(*ctr)); hll_init(&ctr->hll, HLL_PRECISION_BITS); ctr->key = RS_KEY(RSKEY((char *)ctx->privdata)); ctr->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); return ctr; } static int countDistinctish_Add(void *ctx, SearchResult *res) { struct distinctishCounter *ctr = ctx; RSValue *val = SearchResult_GetValue(res, ctr->sortables, &ctr->key); if (!val || val->t == RSValue_Null) { return 1; } uint64_t hval = RSValue_Hash(val, 0x5f61767a); uint32_t val32 = (uint32_t)hval ^ (uint32_t)(hval >> 32); hll_add_hash(&ctr->hll, val32); return 1; } static int countDistinctish_Finalize(void *ctx, const char *key, SearchResult *res) { struct distinctishCounter *ctr = ctx; // rintf("Counter finalize! count %f\n", hll_count(&ctr->hll)); RSFieldMap_SetNumber(&res->fields, key, (uint64_t)hll_count(&ctr->hll)); return 1; } static void countDistinctish_FreeInstance(void *p) { struct distinctishCounter *ctr = p; hll_destroy(&ctr->hll); } /** Serialized HLL format */ typedef struct __attribute__((packed)) { uint32_t flags; // Currently unused uint8_t bits; // uint32_t size -- NOTE - always 1<hll.bits}; char *str = malloc(sizeof(hdr) + ctr->hll.size); size_t hdrsize = sizeof(hdr); memcpy(str, &hdr, hdrsize); memcpy(str + hdrsize, ctr->hll.registers, ctr->hll.size); RSFieldMap_Add(&res->fields, key, RS_StringVal(str, sizeof(hdr) + ctr->hll.size)); return 1; } static Reducer *newHllCommon(RedisSearchCtx *ctx, const char *alias, const char *key, int isRaw) { Reducer *r = NewReducer(ctx, (void *)key); r->Add = countDistinctish_Add; r->Free = Reducer_GenericFreeWithStaticPrivdata; r->FreeInstance = countDistinctish_FreeInstance; r->NewInstance = countDistinctish_NewInstance; if (isRaw) { r->Finalize = hllFinalize; r->alias = FormatAggAlias(alias, "hll", key); } else { r->Finalize = countDistinctish_Finalize; r->alias = FormatAggAlias(alias, "count_distinctish", key); } return r; } Reducer *NewCountDistinctish(RedisSearchCtx *ctx, const char *alias, const char *key) { return newHllCommon(ctx, alias, key, 0); } Reducer *NewHLL(RedisSearchCtx *ctx, const char *alias, const char *key) { return newHllCommon(ctx, alias, key, 1); } typedef struct { RSKey key; RSSortingTable *sortables; struct HLL hll; } hllSumCtx; static int hllSum_Add(void *ctx, SearchResult *res) { hllSumCtx *ctr = ctx; RSValue *val = SearchResult_GetValue(res, ctr->sortables, &ctr->key); if (val == NULL || !RSValue_IsString(val)) { // Not a string! return 0; } size_t len; const char *buf = RSValue_StringPtrLen(val, &len); // Verify! const HLLSerializedHeader *hdr = (const void *)buf; const char *registers = buf + sizeof(*hdr); // Need at least the header size if (len < sizeof(*hdr)) { return 0; } // Can't be an insane bit value - we don't want to overflow either! size_t regsz = len - sizeof(*hdr); if (hdr->bits > 64) { return 0; } // Expected length should be determined from bits (whose value we've also // verified) if (regsz != 1 << hdr->bits) { return 0; } if (ctr->hll.bits) { if (hdr->bits != ctr->hll.bits) { return 0; } // Merge! struct HLL tmphll = { .bits = hdr->bits, .size = 1 << hdr->bits, .registers = (uint8_t *)registers}; if (hll_merge(&ctr->hll, &tmphll) != 0) { return 0; } } else { // Not yet initialized - make this our first register and continue. hll_init(&ctr->hll, hdr->bits); memcpy(ctr->hll.registers, registers, regsz); } return 1; } static int hllSum_Finalize(void *ctx, const char *key, SearchResult *res) { hllSumCtx *ctr = ctx; RSFieldMap_SetNumber(&res->fields, key, ctr->hll.bits ? (uint64_t)hll_count(&ctr->hll) : 0); return 1; } static void *hllSum_NewInstance(ReducerCtx *ctx) { hllSumCtx *ctr = ReducerCtx_Alloc(ctx, sizeof(*ctr), 1024 * sizeof(*ctr)); ctr->hll.bits = 0; ctr->hll.registers = NULL; ctr->key = RS_KEY(RSKEY((char *)ctx->privdata)); ctr->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); return ctr; } static void hllSum_FreeInstance(void *p) { hllSumCtx *ctr = p; hll_destroy(&ctr->hll); } Reducer *NewHLLSum(RedisSearchCtx *ctx, const char *alias, const char *key) { Reducer *r = NewReducer(ctx, (void *)key); r->Add = hllSum_Add; r->Finalize = hllSum_Finalize; r->NewInstance = hllSum_NewInstance; r->FreeInstance = hllSum_FreeInstance; r->Free = Reducer_GenericFreeWithStaticPrivdata; r->alias = FormatAggAlias(alias, "hll_sum", key); return r; }RediSearch-1.2.2/src/aggregate/reducers/deviation.c000066400000000000000000000040371364126773500222260ustar00rootroot00000000000000#include #include typedef struct { RSKey property; size_t n; double oldM, newM, oldS, newS; RSSortingTable *sortables; } devCtx; static void *stddev_NewInstance(ReducerCtx *ctx) { devCtx *dctx = calloc(1, sizeof(*dctx)); dctx->property = RS_KEY(ctx->property); dctx->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); return dctx; } void stddev_addInternal(devCtx *dctx, double d) { // https://www.johndcook.com/blog/standard_deviation/ dctx->n++; if (dctx->n == 1) { dctx->oldM = dctx->newM = d; dctx->oldS = 0.0; } else { dctx->newM = dctx->oldM + (d - dctx->oldM) / dctx->n; dctx->newS = dctx->oldS + (d - dctx->oldM) * (d - dctx->newM); // set up for next iteration dctx->oldM = dctx->newM; dctx->oldS = dctx->newS; } } static int stddev_Add(void *ctx, SearchResult *res) { devCtx *dctx = ctx; double d; RSValue *v = SearchResult_GetValue(res, dctx->sortables, &dctx->property); if (v) { if (v->t != RSValue_Array) { if (RSValue_ToNumber(v, &d)) { stddev_addInternal(dctx, d); } } else { uint32_t sz = RSValue_ArrayLen(v); for (uint32_t i = 0; i < sz; i++) { if (RSValue_ToNumber(RSValue_ArrayItem(v, i), &d)) { stddev_addInternal(dctx, d); } } } } return 1; } static int stddev_Finalize(void *ctx, const char *key, SearchResult *res) { devCtx *dctx = ctx; double variance = ((dctx->n > 1) ? dctx->newS / (dctx->n - 1) : 0.0); double stddev = sqrt(variance); RSFieldMap_SetNumber(&res->fields, key, stddev); return 1; } static void stddev_FreeInstance(void *p) { free(p); } Reducer *NewStddev(RedisSearchCtx *ctx, const char *property, const char *alias) { Reducer *r = malloc(sizeof(*r)); r->Add = stddev_Add; r->Finalize = stddev_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = stddev_FreeInstance; r->NewInstance = stddev_NewInstance; r->alias = FormatAggAlias(alias, "stddev", property); r->ctx = (ReducerCtx){.ctx = ctx, .property = property}; return r; }RediSearch-1.2.2/src/aggregate/reducers/first_value.c000066400000000000000000000051471364126773500225720ustar00rootroot00000000000000#include struct firstValueCtx { RSKey property; RSKey sortBy; RSSortingTable *sortables; RSValue value; RSValue sortValue; int ascending; int hasValue; }; struct firstValueParams { const char *property; const char *sortProperty; int ascending; }; static void *fv_NewInstance(ReducerCtx *ctx) { struct firstValueParams *params = ctx->privdata; BlkAlloc *ba = &ctx->alloc; struct firstValueCtx *fv = ReducerCtx_Alloc(ctx, sizeof(*fv), 1024 * sizeof(*fv)); // malloc(sizeof(*ctr)); fv->property = RS_KEY(RSKEY(params->property)); fv->sortBy = RS_KEY(RSKEY(params->sortProperty)); fv->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); fv->hasValue = 0; fv->ascending = params->ascending; RSValue_MakeReference(&fv->value, RS_NullVal()); RSValue_MakeReference(&fv->sortValue, RS_NullVal()); return fv; } static int fv_Add(void *ctx, SearchResult *res) { struct firstValueCtx *fvx = ctx; RSValue *sortval = SearchResult_GetValue(res, fvx->sortables, &fvx->sortBy); RSValue *val = SearchResult_GetValue(res, fvx->sortables, &fvx->property); if (RSValue_IsNull(sortval)) { if (!fvx->hasValue) { fvx->hasValue = 1; RSValue_MakeReference(&fvx->value, val ? RSValue_MakePersistent(val) : RS_NullVal()); } return 1; } int rc = (fvx->ascending ? -1 : 1) * RSValue_Cmp(sortval, &fvx->sortValue); int isnull = RSValue_IsNull(&fvx->sortValue); if (!fvx->hasValue || (!isnull && rc > 0) || (isnull && rc < 0)) { RSValue_Free(&fvx->sortValue); RSValue_Free(&fvx->value); RSValue_MakeReference(&fvx->sortValue, RSValue_MakePersistent(sortval)); RSValue_MakeReference(&fvx->value, val ? RSValue_MakePersistent(val) : RS_NullVal()); fvx->hasValue = 1; } return 1; } static int fv_Finalize(void *ctx, const char *key, SearchResult *res) { struct firstValueCtx *fvx = ctx; RSFieldMap_Set(&res->fields, key, RSValue_Dereference(&fvx->value)); return 1; } static void fv_FreeInstance(void *p) { struct firstValueCtx *fvx = p; RSValue_Free(&fvx->value); RSValue_Free(&fvx->sortValue); } Reducer *NewFirstValue(RedisSearchCtx *ctx, const char *key, const char *sortKey, int asc, const char *alias) { struct firstValueParams *params = malloc(sizeof(*params)); params->property = key; params->sortProperty = sortKey; params->ascending = asc; Reducer *r = NewReducer(ctx, params); r->Add = fv_Add; r->Finalize = fv_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = fv_FreeInstance; r->NewInstance = fv_NewInstance; r->alias = FormatAggAlias(alias, "first_value", key); return r; }RediSearch-1.2.2/src/aggregate/reducers/minmax.c000066400000000000000000000044641364126773500215410ustar00rootroot00000000000000#include #include typedef enum { Minmax_Min = 1, Minmax_Max = 2 } MinmaxMode; struct minmaxCtx { double val; RSKey property; RSSortingTable *sortables; MinmaxMode mode; size_t numMatches; }; static void *newInstanceCommon(ReducerCtx *ctx, MinmaxMode mode) { struct minmaxCtx *m = ReducerCtx_Alloc(ctx, sizeof(*ctx), 1024); m->mode = mode; m->property = RS_KEY(ctx->property); m->numMatches = 0; m->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); if (mode == Minmax_Min) { m->val = DBL_MAX; } else if (mode == Minmax_Max) { m->val = DBL_MIN; } else { m->val = 0; } return m; } static void *min_NewInstance(ReducerCtx *ctx) { return newInstanceCommon(ctx, Minmax_Min); } static void *max_NewInstance(ReducerCtx *ctx) { return newInstanceCommon(ctx, Minmax_Max); } static int minmax_Add(void *ctx, SearchResult *res) { struct minmaxCtx *m = ctx; double val; RSValue *v = SearchResult_GetValue(res, m->sortables, &m->property); if (!RSValue_ToNumber(v, &val)) { return 1; } if (m->mode == Minmax_Max && val > m->val) { m->val = val; } else if (m->mode == Minmax_Min && val < m->val) { m->val = val; } m->numMatches++; return 1; } static int minmax_Finalize(void *base, const char *key, SearchResult *res) { struct minmaxCtx *ctx = base; RSFieldMap_SetNumber(&res->fields, key, ctx->numMatches ? ctx->val : 0); return 1; } static Reducer *newMinMax(RedisSearchCtx *ctx, const char *property, const char *alias, MinmaxMode mode) { Reducer *r = malloc(sizeof(*r)); r->Add = minmax_Add; r->Finalize = minmax_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = NULL;//minmax_FreeInstance; r->ctx = (ReducerCtx){.ctx = ctx, .property = property}; const char *fstr = NULL; if (mode == Minmax_Max) { r->NewInstance = max_NewInstance; fstr = "max"; } else if (mode == Minmax_Min) { r->NewInstance = min_NewInstance; fstr = "min"; } r->alias = FormatAggAlias(alias, fstr, property); return r; } Reducer *NewMin(RedisSearchCtx *ctx, const char *property, const char *alias) { return newMinMax(ctx, property, alias, Minmax_Min); } Reducer *NewMax(RedisSearchCtx *ctx, const char *property, const char *alias) { return newMinMax(ctx, property, alias, Minmax_Max); } RediSearch-1.2.2/src/aggregate/reducers/quantile.c000066400000000000000000000040241364126773500220620ustar00rootroot00000000000000#include #include "util/quantile.h" typedef struct { RSKey property; double pct; size_t resolution; } quantileParams; typedef struct { QuantStream *strm; quantileParams *params; RSSortingTable *sortables; } quantileCtx; static void *quantile_NewInstance(ReducerCtx *ctx) { quantileCtx *qctx = ReducerCtx_Alloc(ctx, sizeof(*qctx), 100 * sizeof(*qctx)); qctx->params = ctx->privdata; qctx->strm = NewQuantileStream(&qctx->params->pct, 1, qctx->params->resolution); qctx->sortables = SEARCH_CTX_SORTABLES(ctx->ctx); return qctx; } static int quantile_Add(void *ctx, SearchResult *res) { quantileCtx *qctx = ctx; double d; RSValue *v = SearchResult_GetValue(res, qctx->sortables, &qctx->params->property); if (v) { if (v->t != RSValue_Array) { if (RSValue_ToNumber(v, &d)) { QS_Insert(qctx->strm, d); } } else { uint32_t sz = RSValue_ArrayLen(v); for (uint32_t i = 0; i < sz; i++) { if (RSValue_ToNumber(RSValue_ArrayItem(v, i), &d)) { QS_Insert(qctx->strm, d); } } } } return 1; } static int quantile_Finalize(void *ctx, const char *key, SearchResult *res) { quantileCtx *qctx = ctx; double value = QS_Query(qctx->strm, qctx->params->pct); RSFieldMap_SetNumber(&res->fields, key, value); return 1; } static void quantile_FreeInstance(void *p) { quantileCtx *qctx = p; QS_Free(qctx->strm); } Reducer *NewQuantile(RedisSearchCtx *ctx, const char *property, const char *alias, double pct, size_t resolution) { Reducer *r = malloc(sizeof(*r)); r->Add = quantile_Add; r->Finalize = quantile_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = quantile_FreeInstance; r->NewInstance = quantile_NewInstance; r->alias = FormatAggAlias(alias, "quantile", property); quantileParams *params = calloc(1, sizeof(*params)); params->property = RS_KEY(property); params->pct = pct; params->resolution = resolution; r->ctx = (ReducerCtx){.ctx = ctx, .privdata = params}; return r; }RediSearch-1.2.2/src/aggregate/reducers/random_sample.c000066400000000000000000000043611364126773500230650ustar00rootroot00000000000000#include struct randomSampleProperties { RSKey property; RSSortingTable *sortables; int len; }; struct randomSampleCtx { struct randomSampleProperties *props; int seen; // how many items we've seen RSValue *samples[]; }; void *sample_NewInstance(ReducerCtx *rctx) { struct randomSampleProperties *props = rctx->privdata; struct randomSampleCtx *ctx = ReducerCtx_Alloc(rctx, sizeof(*ctx) + props->len * sizeof(RSValue *), 10000); ctx->props = props; ctx->seen = 0; return ctx; } int sample_Add(void *ctx, SearchResult *res) { struct randomSampleCtx *sc = ctx; RSValue *v = SearchResult_GetValue(res, sc->props->sortables, &sc->props->property); if (v) { if (sc->seen < sc->props->len) { sc->samples[sc->seen++] = RSValue_IncrRef(RSValue_MakePersistent(v)); } else { int i = rand() % sc->seen++; if (i < sc->props->len) { RSValue_Free(sc->samples[i]); sc->samples[i] = RSValue_IncrRef(RSValue_MakePersistent(v)); } } } return 1; } int sample_Finalize(void *ctx, const char *key, SearchResult *res) { struct randomSampleCtx *sc = ctx; int top = MIN(sc->props->len, sc->seen); RSValue **arr = calloc(top, sizeof(RSValue *)); memcpy(arr, sc->samples, top * sizeof(RSValue *)); RSFieldMap_Set(&res->fields, key, RS_ArrVal(arr, top)); // set len to 0 so we won't try to free the values on destruction sc->seen = 0; return 1; } void sample_FreeInstance(void *p) { struct randomSampleCtx *sc = p; int top = MIN(sc->props->len, sc->seen); for (int i = 0; i < top; i++) { RSValue_Free(sc->samples[i]); } } Reducer *NewRandomSample(RedisSearchCtx *sctx, int size, const char *property, const char *alias) { Reducer *r = malloc(sizeof(*r)); r->Add = sample_Add; r->Finalize = sample_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = sample_FreeInstance; r->NewInstance = sample_NewInstance; r->alias = FormatAggAlias(alias, "random_sample", property); struct randomSampleProperties *props = malloc(sizeof(*props)); props->sortables = SEARCH_CTX_SORTABLES(sctx); props->property = RS_KEY(RSKEY(property)); props->len = size; r->ctx = (ReducerCtx){.property = property, .ctx = sctx, .privdata = props}; return r; }RediSearch-1.2.2/src/aggregate/reducers/sum.c000066400000000000000000000041021364126773500210410ustar00rootroot00000000000000#include struct sumCtx { size_t count; double total; RSKey property; RSSortingTable *sortables; int isAvg; // We might use an enum if there are more modes }; void *sum_NewInstance(ReducerCtx *rctx) { struct sumCtx *ctx = ReducerCtx_Alloc(rctx, sizeof(*ctx), 100*sizeof(*ctx)); // malloc(sizeof(*ctr)); ctx->count = 0; ctx->total = 0; ctx->sortables = SEARCH_CTX_SORTABLES(rctx->ctx); ctx->property = RS_KEY(rctx->property); ctx->isAvg = rctx->privdata != NULL; return ctx; } int sum_Add(void *ctx, SearchResult *res) { struct sumCtx *ctr = ctx; ctr->count++; RSValue *v = SearchResult_GetValue(res, ctr->sortables, &ctr->property); if (v && v->t == RSValue_Number) { ctr->total += v->numval; } else { // try to convert value to number double d = 0; if (RSValue_ToNumber(v, &d)) { ctr->total += d; } } return 1; } int sum_Finalize(void *ctx, const char *key, SearchResult *res) { struct sumCtx *ctr = ctx; double v = 0; if (ctr->isAvg) { if (ctr->count) { v = ctr->total / ctr->count; } } else { v = ctr->total; } RSFieldMap_SetNumber(&res->fields, key, v); return 1; } void sum_FreeInstance(void *p) { struct sumCtx *c = p; free(c); } static int sentinel = 0; Reducer *newSumCommon(RedisSearchCtx *ctx, const char *property, const char *alias, int isAvg) { Reducer *r = malloc(sizeof(*r)); r->Add = sum_Add; r->Finalize = sum_Finalize; r->Free = Reducer_GenericFreeWithStaticPrivdata; r->FreeInstance = NULL; r->NewInstance = sum_NewInstance; r->alias = FormatAggAlias(alias, isAvg ? "avg" : "sum", property); // Note, malloc for one byte because it's freed at the end. Simple pointer won't do r->ctx = (ReducerCtx){.ctx = ctx, .property = property, .privdata = isAvg ? &sentinel : NULL}; return r; } Reducer *NewSum(RedisSearchCtx *ctx, const char *property, const char *alias) { return newSumCommon(ctx, property, alias, 0); } Reducer *NewAvg(RedisSearchCtx *ctx, const char *property, const char *alias) { return newSumCommon(ctx, property, alias, 1); }RediSearch-1.2.2/src/aggregate/reducers/to_list.c000066400000000000000000000047431364126773500217250ustar00rootroot00000000000000#include struct tolistCtx { TrieMap *values; RSKey property; RSSortingTable *sortables; }; void *tolist_NewInstance(ReducerCtx *rctx) { struct tolistCtx *ctx = ReducerCtx_Alloc(rctx, sizeof(*ctx), 100 * sizeof(*ctx)); ctx->values = NewTrieMap(); ctx->property = RS_KEY(rctx->property); ctx->sortables = SEARCH_CTX_SORTABLES(rctx->ctx); return ctx; } int tolist_Add(void *ctx, SearchResult *res) { struct tolistCtx *tlc = ctx; RSValue *v = SearchResult_GetValue(res, tlc->sortables, &tlc->property); if (v) { // for non array values we simply add the value to the list */ if (v->t != RSValue_Array) { uint64_t hval = RSValue_Hash(v, 0); if (TrieMap_Find(tlc->values, (char *)&hval, sizeof(hval)) == TRIEMAP_NOTFOUND) { TrieMap_Add(tlc->values, (char *)&hval, sizeof(hval), RSValue_IncrRef(RSValue_MakePersistent(v)), NULL); } } else { // For array values we add each distinct element to the list uint32_t len = RSValue_ArrayLen(v); for (uint32_t i = 0; i < len; i++) { RSValue *av = RSValue_ArrayItem(v, i); uint64_t hval = RSValue_Hash(av, 0); if (TrieMap_Find(tlc->values, (char *)&hval, sizeof(hval)) == TRIEMAP_NOTFOUND) { TrieMap_Add(tlc->values, (char *)&hval, sizeof(hval), RSValue_IncrRef(RSValue_MakePersistent(av)), NULL); } } } } return 1; } int tolist_Finalize(void *ctx, const char *key, SearchResult *res) { struct tolistCtx *tlc = ctx; TrieMapIterator *it = TrieMap_Iterate(tlc->values, "", 0); char *c; tm_len_t l; void *ptr; RSValue **arr = calloc(tlc->values->cardinality, sizeof(RSValue)); size_t i = 0; while (TrieMapIterator_Next(it, &c, &l, &ptr)) { if (ptr) { arr[i++] = ptr; } } RSFieldMap_Set(&res->fields, key, RS_ArrVal(arr, i)); TrieMapIterator_Free(it); return 1; } void freeValues(void *ptr) { RSValue_Free(ptr); // free(ptr); } void tolist_FreeInstance(void *p) { struct tolistCtx *tlc = p; TrieMap_Free(tlc->values, freeValues); } Reducer *NewToList(RedisSearchCtx *sctx, const char *property, const char *alias) { Reducer *r = malloc(sizeof(*r)); r->Add = tolist_Add; r->Finalize = tolist_Finalize; r->Free = Reducer_GenericFree; r->FreeInstance = tolist_FreeInstance; r->NewInstance = tolist_NewInstance; r->alias = FormatAggAlias(alias, "tolist", property); r->ctx = (ReducerCtx){.property = property, .ctx = sctx}; return r; }RediSearch-1.2.2/src/benchmark/000077500000000000000000000000001364126773500162645ustar00rootroot00000000000000RediSearch-1.2.2/src/benchmark/Makefile000066400000000000000000000003401364126773500177210ustar00rootroot00000000000000CFLAGS = -g -O3 -std=gnu99 -I/usr/local/include -Wall -Wno-unused-function LDFLAGS= -L/usr/local/lib -lhiredis -lev -lc -lm -static CC=gcc benchmark: benchmark.o $(CC) -o ./benchmark benchmark.o $(LDFLAGS) all: benchmark RediSearch-1.2.2/src/benchmark/benchmark.c000066400000000000000000000055071364126773500203710ustar00rootroot00000000000000#include #include #include #include #include #include #include "time_sample.h" #include #include #include #define PORT 6379 #define N 500000 void fill_first() { redisContext* c = redisConnect("127.0.0.1", PORT); redisCommand(c, "FLUSHDB"); for (int i = 0; i < N; i++) { int n = (rand() % 24) + 1; // some random size char tag[n], name[n]; const char alphanum[] = { "abcdefghijklmnopqrstuvwxyz" }; uint8_t rand_idx[n * 2]; for (int xx = 0; xx < n*2; xx++) { rand_idx[xx] = rand() % 0xff; } for (int i = 0; i < n; i ++) tag[i] = alphanum[rand_idx[i] % sizeof(alphanum)]; // fill the array with alphanum chars for (int i = n; i < n * 2; i ++) name[i - n] = alphanum[rand_idx[i] % sizeof(alphanum)]; // fill the array with alphanum chars redisCommand(c, "FT.SUGADD userslex %b:%b %d", tag, n, name, n, i); } redisFree(c); } void add_delete(const char* variant) { redisContext* c = redisConnect("127.0.0.1", PORT); for (int i = 0; i < N; i++) redisCommand(c, "FT.SUGADD userslex %s%d %d", variant, i, i); printf("Deleting!\n"); for (int i = 0; i < N; i++) redisCommand(c, "FT.SUGDEL userslex %s%d", variant, i); redisFree(c); } void search(const char* str) { redisContext* c = redisConnect("127.0.0.1", PORT); redisCommand(c, "FT.SUGGET userslex %b MAX 10 FUZZY", str, strlen(str)); redisFree(c); } // typedef struct { // struct timespec start_time, end_time; // } TimerSampler; // void TimeSampler_Start(TimerSampler *ts) { // clock_gettime(CLOCK_REALTIME, &ts->start_time); // } // void TimeSampler_End(TimerSampler *ts) { // clock_gettime(CLOCK_REALTIME, &ts->end_time); // } // long long TimeSampler_DurationNS(TimerSampler *ts) { // long long diffInNanos = ((long long)1000000000 * ts->end_time.tv_sec + ts->end_time.tv_nsec) - // ((long long)1000000000 * ts->start_time.tv_sec + ts->start_time.tv_nsec); // return diffInNanos; // } // #define TimeSampledBlock(ts, blk) { TimeSampler_Start(ts); { blk } ; TimeSampler_End(ts); } int main (int argc, char** argv) { printf("filling first!\n"); TIME_SAMPLE_RUN(fill_first()); for (int i =0; i < 10; i++) { TIME_SAMPLE_RUN(search("asdfg")); } TIME_SAMPLE_RUN(add_delete("asdfg")); // now add 1000000 entries of a variant string and remove those entries for (int i =0; i < 10; i++) { TIME_SAMPLE_RUN(search("asdfg")); // ended in 2 ms } //search("asdfg"); // ended in 66 ms, i.e. 33 times slower on the same key-set redisContext* c = redisConnect("127.0.0.1", PORT); redisCommand(c, "FLUSHDB"); }RediSearch-1.2.2/src/benchmark/redisearch/000077500000000000000000000000001364126773500203755ustar00rootroot00000000000000RediSearch-1.2.2/src/benchmark/redisearch/__init__.py000066400000000000000000000140071364126773500225100ustar00rootroot00000000000000from redis import Redis, RedisError, ConnectionPool import datetime import itertools import json import time class Document(object): def __init__(self, id, **fields): self.id = id for k, v in fields.iteritems(): setattr(self, k, v) def __repr__(self): return 'Document %s' % self.__dict__ def snippetize(self, field, size=500, boldTokens=[]): txt = getattr(self, field, '') for tok in boldTokens: txt = txt.replace(tok, "%s" % tok) while size < len(txt) and txt[size] != ' ': size+=1 setattr(self, field, (txt[:size] + '...') if len(txt) > size else txt) class Result(object): def __init__(self, res, hascontent, queryText, duration=0): self.total = res[0] self.duration = duration self.docs = [] tokens = filter(None, queryText.rstrip("\" ").lstrip(" \"").split(' ')) for i in xrange(1, len(res), 2 if hascontent else 1): id = res[i] fields = {} if hascontent: fields = dict( dict(itertools.izip(res[i + 1][::2], res[i + 1][1::2]))) if hascontent else {} try: del fields['id'] except KeyError: pass doc = Document(id, **fields) #print doc if hascontent: try: doc.snippetize('body', size=500, boldTokens = tokens) except Exception as e: print e self.docs.append(doc) def __repr__(self): return 'Result{%d total, docs: %s}' % (self.total, self.docs) class Client(object): NUMERIC = 'numeric' CREATE_CMD = 'FT.CREATE' SEARCH_CMD = 'FT.SEARCH' ADD_CMD = 'FT.ADD' DROP_CMD = 'FT.DROP' class BatchIndexer(object): """ A batch indexer allows you to automatically batch document indexeing in pipelines, flushing it every N documents. """ def __init__(self, client, chunk_size = 1000): self.client = client self.pipeline = client.redis.pipeline(False) self.total = 0 self.chunk_size = chunk_size self.current_chunk = 0 def __del__(self): if self.current_chunk: self.commit() def add_document(self, doc_id, nosave = False, score=1.0, **fields): self.client._add_document(doc_id, conn=self.pipeline, nosave = nosave, score = score, **fields) self.current_chunk += 1 self.total += 1 if self.current_chunk >= self.chunk_size: self.commit() def commit(self): self.pipeline.execute() self.current_chunk = 0 def __init__(self, index_name, host='localhost', port=6379): self.host = host self.port = port self.index_name = index_name self.redis = Redis( connection_pool = ConnectionPool(host=host, port=port)) def batch_indexer(self, chunk_size = 100): """ Create a new batch indexer from the client with a given chunk size """ return Client.BatchIndexer(self, chunk_size = chunk_size) def create_index(self, **fields): """ Create the search index. Creating an existing index juts updates its properties :param fields: a kwargs consisting of field=[score|NUMERIC] :return: """ self.redis.execute_command( self.CREATE_CMD, self.index_name, *itertools.chain(*fields.items())) def drop_index(self): """ Drop the index if it exists :return: """ self.redis.execute_command(self.DROP_CMD, self.index_name) def _add_document(self, doc_id, conn = None, nosave = False, score=1.0, **fields): """ Internal add_document used for both batch and single doc indexing """ if conn is None: conn = self.redis args = [self.ADD_CMD, self.index_name, doc_id, score] if nosave: args.append('NOSAVE') args.append('FIELDS') args += list(itertools.chain(*fields.items())) return conn.execute_command(*args) def add_document(self, doc_id, nosave = False, score=1.0, **fields): """ Add a single document to the index. :param doc_id: the id of the saved document. :param nosave: if set to true, we just index the document, and don't save a copy of it. this means that searches will just return ids. :param score: the document ranking, between 0.0 and 1.0. :fields: kwargs dictionary of the document fields to be saved and/or indexed """ return self._add_document(doc_id, conn=None, nosave=nosave, score=score, **fields) def load_document(self, id): """ Load a single document by id """ fields = self.redis.hgetall(id) try: del fields['id'] except KeyError: pass return Document(id=id, **fields) def search(self, query, offset =0, num = 10, verbatim = False, no_content=False, no_stopwords = False, fields=None, **filters): """ Search eht :param query: :param fields: :param filters: :return: """ args = [self.index_name, query] if no_content: args.append('NOCONTENT') if fields: args.append('INFIELDS') args.append(len(fields)) args += fields if verbatim: args.append('VERBATIM') if no_stopwords: args.append('NOSTOPWORDS') if filters: for k, v in filters.iteritems(): args += ['FILTER', k] + list(v) args += ["LIMIT", offset, num] st = time.time() res = self.redis.execute_command(self.SEARCH_CMD, *args) return Result(res, no_content == False, queryText=query, duration = (time.time()-st)*1000.0) RediSearch-1.2.2/src/benchmark/shakespeare.py000066400000000000000000000014301364126773500211270ustar00rootroot00000000000000import csv from redisearch import Client def index(): client = Client('sh') # client.drop_index() client.create_index(txt=1.0) chapters = {} with open('will_play_text.csv') as fp: r = csv.reader(fp, delimiter=';') for line in r: #['62816', 'Merchant of Venice', '9', '3.2.74', 'PORTIA', "I'll begin it,--Ding, dong, bell."] play, chapter, character, text = line[1], line[2], line[4], line[5] d = chapters.setdefault('{}:{}'.format(play, chapter), {}) d['play'] = play d['text'] = d.get('text', '') + ' ' + text for chapter, doc in chapters.iteritems(): print chapter, doc client.add_document(chapter, nosave=True, txt=doc['text']) if __name__ == '__main__': index() RediSearch-1.2.2/src/benchmark/time_sample.h000066400000000000000000000031611364126773500207350ustar00rootroot00000000000000#ifndef __RL_TIME_SAMPLE__ #define __RL_TIME_SAMPLE__ #include #include #include #include typedef struct { struct timespec startTime; struct timespec endTime; long long durationNS; int num; } TimeSample; static void TimeSampler_Start(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->startTime); ts->num = 0; } static void TimeSampler_Tick(TimeSample *ts) { ++ts->num; } static void TimeSampler_End(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->endTime); ts->durationNS = ((long long)1000000000 * ts->endTime.tv_sec + ts->endTime.tv_nsec) - ((long long)1000000000 * ts->startTime.tv_sec + ts->startTime.tv_nsec); } static long long TimeSampler_DurationNS(TimeSample *ts) { return ts->durationNS; } static long long TimeSampler_DurationMS(TimeSample *ts) { return ts->durationNS / 1000; } static double TimeSampler_DurationSec(TimeSample *ts) { return (double)ts->durationNS / 1000000000.0; } static double TimeSampler_IterationSec(TimeSample *ts) { return ((double)ts->durationNS / 1000000000.0)/(double)(ts->num ? ts->num : 1.0); } #define TIME_SAMPLE_RUN(blk) { TimeSample ts; TimeSampler_Start(&ts); { blk; } ; TimeSampler_End(&ts); printf("Execution time for " #blk ": %f seconds\n", TimeSampler_DurationSec(&ts)); } #define TIME_SAMPLE_RUN_LOOP(N, blk) { TimeSample ts; TimeSampler_Start(&ts); for (int __ts_loop = 0; __ts_loop < N; __ts_loop++) { blk; } ; TimeSampler_End(&ts); printf("Execution time for " #blk ": %f seconds/iteration\n", TimeSampler_IterationSec(&ts)); } #endifRediSearch-1.2.2/src/buffer.c000066400000000000000000000045511364126773500157540ustar00rootroot00000000000000#include "buffer.h" #include "rmalloc.h" #include #include void Buffer_Grow(Buffer *buf, size_t extraLen) { do { buf->cap += MIN(1 + buf->cap / 5, 1024 * 1024); } while (buf->offset + extraLen > buf->cap); buf->data = rm_realloc(buf->data, buf->cap); } /** Truncate the buffer to newlen. If newlen is 0 - trunacte capacity */ size_t Buffer_Truncate(Buffer *b, size_t newlen) { if (newlen == 0) { newlen = Buffer_Offset(b); } // we might have an empty buffer, in this case we set the data to NULL and free it if (newlen == 0) { rm_free(b->data); b->data = NULL; } else { b->data = rm_realloc(b->data, newlen); } b->cap = newlen; return newlen; } BufferWriter NewBufferWriter(Buffer *b) { BufferWriter ret = {.buf = b, .pos = b->data + b->offset}; return ret; } BufferReader NewBufferReader(Buffer *b) { BufferReader ret = {.buf = b, .pos = 0}; return ret; } /* Initialize a static buffer and fill its data */ void Buffer_Init(Buffer *b, size_t cap) { b->cap = cap; b->offset = 0; b->data = rm_malloc(cap); } /** Allocate a new buffer around data. */ Buffer *NewBuffer(size_t cap) { Buffer *buf = malloc(sizeof(Buffer)); Buffer_Init(buf, cap); return buf; } Buffer *Buffer_Wrap(char *data, size_t len) { Buffer *buf = malloc(sizeof(Buffer)); buf->cap = len; buf->offset = 0; buf->data = data; return buf; } void Buffer_Free(Buffer *buf) { rm_free(buf->data); } /** Consme one byte from the buffer @return 0 if at end, 1 if consumed */ inline size_t Buffer_ReadByte(BufferReader *br, char *c) { // if (BufferAtEnd(b)) { // return 0; // } *c = br->buf->data[br->pos++]; //++b->buf->offset; return 1; } size_t BufferWriter_Seek(BufferWriter *b, size_t offset) { if (offset > b->buf->cap) { return b->buf->offset; } b->pos = b->buf->data + offset; b->buf->offset = offset; return offset; } size_t Buffer_WriteAt(BufferWriter *b, size_t offset, void *data, size_t len) { size_t pos = b->buf->offset; BufferWriter_Seek(b, offset); size_t sz = Buffer_Write(b, data, len); BufferWriter_Seek(b, pos); return sz; } /** Seek to a specific offset. If offset is out of bounds we seek to the end. @return the effective seek position */ inline size_t Buffer_Seek(BufferReader *br, size_t where) { Buffer *b = br->buf; br->pos = MIN(where, b->cap); return where; } RediSearch-1.2.2/src/buffer.h000066400000000000000000000077021364126773500157620ustar00rootroot00000000000000#ifndef __BUFFER_H__ #define __BUFFER_H__ #include #include #include #include #define BUFFER_READ 0 #define BUFFER_WRITE 1 #define BUFFER_FREEABLE 2 // if set, we free the buffer on Release #define BUFFER_LAZY_ALLOC 4 // only allocate memory in a buffer writer on the first write typedef struct Buffer { char *data; size_t cap; size_t offset; } Buffer; typedef struct { Buffer *buf; size_t pos; } BufferReader; #define BUFFER_READ_BYTE(br) br->buf->data[br->pos++] //++b->buf->offset; void Buffer_Init(Buffer *b, size_t cap); size_t Buffer_ReadByte(BufferReader *b, char *c); /** Read len bytes from the buffer into data. If offset + len are over capacity - we do not read and return 0 @return the number of bytes consumed */ static inline size_t Buffer_Read(BufferReader *br, void *data, size_t len) { // // no capacity - return 0 // Buffer *b = br->buf; // if (br->pos + len > b->cap) { // return 0; // } memcpy(data, br->buf->data + br->pos, len); br->pos += len; // b->offset += len; return len; } size_t Buffer_Seek(BufferReader *b, size_t offset); static inline size_t BufferReader_Offset(const BufferReader *br) { return br->pos; } static inline size_t BufferReader_Remaining(const BufferReader *br) { return br->buf->cap - br->pos; } static inline size_t Buffer_Offset(const Buffer *ctx) { return ctx->offset; } static inline int BufferReader_AtEnd(const BufferReader *br) { return br->pos >= br->buf->offset; } static inline size_t Buffer_Capacity(const Buffer *ctx) { return ctx->cap; } static inline int Buffer_AtEnd(const Buffer *ctx) { return ctx->offset >= ctx->cap; } /** Skip forward N bytes, returning the resulting offset on success or the end position if where is outside bounds */ static inline size_t Buffer_Skip(BufferReader *br, int bytes) { br->pos += bytes; return br->pos; } typedef struct { Buffer *buf; char *pos; } BufferWriter; size_t Buffer_Truncate(Buffer *b, size_t newlen); // Ensure that at least extraLen new bytes can be added to the buffer. // Returns 0 if no realloc was performed. 1 if realloc was performed. void Buffer_Grow(Buffer *b, size_t extraLen); static inline size_t Buffer_Reserve(Buffer *buf, size_t n) { if (buf->offset + n <= buf->cap) { return 0; } Buffer_Grow(buf, n); return 1; } static inline size_t Buffer_Write(BufferWriter *bw, void *data, size_t len) { Buffer *buf = bw->buf; if (Buffer_Reserve(buf, len)) { bw->pos = buf->data + buf->offset; } memcpy(bw->pos, data, len); bw->pos += len; buf->offset += len; return len; } /** * These are convenience functions for writing numbers to/from a network */ static inline size_t Buffer_WriteU32(BufferWriter *bw, uint32_t u) { u = htonl(u); return Buffer_Write(bw, &u, 4); } static inline size_t Buffer_WriteU16(BufferWriter *bw, uint16_t u) { u = htons(u); return Buffer_Write(bw, &u, 2); } static inline size_t Buffer_WriteU8(BufferWriter *bw, uint8_t u) { return Buffer_Write(bw, &u, 1); } static inline uint32_t Buffer_ReadU32(BufferReader *r) { uint32_t u; Buffer_Read(r, &u, 4); return ntohl(u); } static inline uint16_t Buffer_ReadU16(BufferReader *r) { uint16_t u; Buffer_Read(r, &u, 2); return ntohs(u); } static inline uint8_t Buffer_ReadU8(BufferReader *r) { uint8_t b; Buffer_Read(r, &b, 1); return b; } BufferWriter NewBufferWriter(Buffer *b); BufferReader NewBufferReader(Buffer *b); static inline char *BufferReader_Current(BufferReader *b) { return b->buf->data + b->pos; } static inline size_t BufferWriter_Offset(BufferWriter *b) { return b->pos - b->buf->data; } static inline char *BufferWriter_PtrAt(BufferWriter *b, size_t pos) { return b->buf->data + pos; } size_t BufferWriter_Seek(BufferWriter *b, size_t offset); size_t Buffer_WriteAt(BufferWriter *b, size_t offset, void *data, size_t len); Buffer *NewBuffer(size_t len); Buffer *Buffer_Wrap(char *data, size_t len); void Buffer_Free(Buffer *buf); #endif RediSearch-1.2.2/src/byte_offsets.c000066400000000000000000000067571364126773500172110ustar00rootroot00000000000000#include "byte_offsets.h" #include RSByteOffsets *NewByteOffsets() { RSByteOffsets *ret = rm_calloc(1, sizeof(*ret)); return ret; } void RSByteOffsets_Free(RSByteOffsets *offsets) { rm_free(offsets->offsets.data); rm_free(offsets->fields); rm_free(offsets); } void RSByteOffsets_ReserveFields(RSByteOffsets *offsets, size_t numFields) { offsets->fields = rm_realloc(offsets->fields, sizeof(*offsets->fields) * numFields); } RSByteOffsetField *RSByteOffsets_AddField(RSByteOffsets *offsets, uint32_t fieldId, uint32_t startPos) { RSByteOffsetField *field = &(offsets->fields[offsets->numFields++]); field->fieldId = fieldId; field->firstTokPos = startPos; return field; } void ByteOffsetWriter_Move(ByteOffsetWriter *w, RSByteOffsets *offsets) { offsets->offsets.data = w->buf.data; offsets->offsets.len = w->buf.offset; memset(&w->buf, 0, sizeof w->buf); } void RSByteOffsets_Serialize(const RSByteOffsets *offsets, Buffer *b) { BufferWriter w = NewBufferWriter(b); Buffer_WriteU8(&w, offsets->numFields); for (size_t ii = 0; ii < offsets->numFields; ++ii) { Buffer_WriteU8(&w, offsets->fields[ii].fieldId); Buffer_WriteU32(&w, offsets->fields[ii].firstTokPos); Buffer_WriteU32(&w, offsets->fields[ii].lastTokPos); } Buffer_WriteU32(&w, offsets->offsets.len); Buffer_Write(&w, offsets->offsets.data, offsets->offsets.len); } RSByteOffsets *LoadByteOffsets(Buffer *buf) { BufferReader r = NewBufferReader(buf); RSByteOffsets *offsets = NewByteOffsets(); uint8_t numFields = Buffer_ReadU8(&r); RSByteOffsets_ReserveFields(offsets, numFields); for (size_t ii = 0; ii < numFields; ++ii) { uint8_t fieldId = Buffer_ReadU8(&r); uint32_t firstTok = Buffer_ReadU32(&r); uint32_t lastTok = Buffer_ReadU32(&r); RSByteOffsetField *fieldInfo = RSByteOffsets_AddField(offsets, fieldId, firstTok); fieldInfo->lastTokPos = lastTok; } uint32_t offsetsLen = Buffer_ReadU32(&r); offsets->offsets.len = offsetsLen; if (offsetsLen) { offsets->offsets.data = rm_malloc(offsetsLen); Buffer_Read(&r, offsets->offsets.data, offsetsLen); } else { offsets->offsets.data = NULL; } return offsets; } int RSByteOffset_Iterate(RSByteOffsets *offsets, uint32_t fieldId, RSByteOffsetIterator *iter) { const RSByteOffsetField *offField = NULL; for (size_t ii = 0; ii < offsets->numFields; ++ii) { if (offsets->fields[ii].fieldId == fieldId) { offField = offsets->fields + ii; break; } } if (!offField) { return REDISMODULE_ERR; } // printf("Generating iterator for fieldId=%lu. BeginPos=%lu. EndPos=%lu\n", fieldId, // offField->firstTokPos, offField->lastTokPos); iter->buf.cap = 0; iter->buf.data = offsets->offsets.data; iter->buf.offset = offsets->offsets.len; iter->rdr = NewBufferReader(&iter->buf); iter->curPos = 1; iter->endPos = offField->lastTokPos; iter->lastValue = 0; while (iter->curPos < offField->firstTokPos && !BufferReader_AtEnd(&iter->rdr)) { // printf("Seeking & incrementing\n"); iter->lastValue = ReadVarint(&iter->rdr) + iter->lastValue; iter->curPos++; } // printf("Iterator is now at %lu\n", iter->curPos); iter->curPos--; return REDISMODULE_OK; } uint32_t RSByteOffsetIterator_Next(RSByteOffsetIterator *iter) { if (BufferReader_AtEnd(&iter->rdr) || ++iter->curPos > iter->endPos) { return RSBYTEOFFSET_EOF; } iter->lastValue = ReadVarint(&iter->rdr) + iter->lastValue; return iter->lastValue; }RediSearch-1.2.2/src/byte_offsets.h000066400000000000000000000047441364126773500172100ustar00rootroot00000000000000#ifndef BYTE_OFFSETS_H #define BYTE_OFFSETS_H #include "redisearch.h" #include "varint.h" #include "rmalloc.h" typedef struct __attribute__((packed)) RSByteOffsetMap { // ID this belongs to. uint16_t fieldId; // The position of the first token for this field. uint32_t firstTokPos; // Position of last token for this field uint32_t lastTokPos; } RSByteOffsetField; typedef struct RSByteOffsets { // By-Byte offsets RSOffsetVector offsets; // List of field-id <-> position mapping RSByteOffsetField *fields; // How many fields uint8_t numFields; } RSByteOffsets; RSByteOffsets *NewByteOffsets(); void RSByteOffsets_Free(RSByteOffsets *offsets); // Reserve memory for this many fields void RSByteOffsets_ReserveFields(RSByteOffsets *offsets, size_t numFields); // Add a field to the offset map. Note that you cannot add more fields than // initially declared via ReserveFields // The start position is the position of the first token in this field. // The field info is returned, and the last position should be written to it // when done. RSByteOffsetField *RSByteOffsets_AddField(RSByteOffsets *offsets, uint32_t fieldId, uint32_t startPos); void RSByteOffsets_Serialize(const RSByteOffsets *offsets, Buffer *b); RSByteOffsets *LoadByteOffsets(Buffer *buf); typedef VarintVectorWriter ByteOffsetWriter; void ByteOffsetWriter_Move(ByteOffsetWriter *w, RSByteOffsets *offsets); static inline void ByteOffsetWriter_Init(ByteOffsetWriter *w) { VVW_Init(w, 16); } static inline void ByteOffsetWriter_Cleanup(ByteOffsetWriter *w) { VVW_Cleanup(w); } static inline void ByteOffsetWriter_Write(ByteOffsetWriter *w, uint32_t offset) { VVW_Write(w, offset); } /** * Iterator which yields the byte offset for a given position */ typedef struct { BufferReader rdr; Buffer buf; uint32_t lastValue; uint32_t curPos; uint32_t endPos; } RSByteOffsetIterator; #define RSBYTEOFFSET_EOF ((uint32_t)-1) /** * Begin iterating over the byte offsets for a given field. Returns REDISMODULE_ERR * if the field does not exist in the current byte offset */ int RSByteOffset_Iterate(RSByteOffsets *offsets, uint32_t fieldId, RSByteOffsetIterator *iter); /** * Returns the next byte offset for the given position. The current position * can be obtained using the curPos variable. If this function returns * RSBYTEOFFSET_EOF then the iterator is at the end of the token stream. */ uint32_t RSByteOffsetIterator_Next(RSByteOffsetIterator *iter); #endifRediSearch-1.2.2/src/cndict_loader.c000066400000000000000000000053161364126773500172750ustar00rootroot00000000000000#include "cndict_loader.h" #include "dep/miniz/miniz.h" #include "buffer.h" #include // htonl, etc. #include extern const char ChineseDict[]; extern const size_t ChineseDictCompressedLength; extern const size_t ChineseDictFullLength; typedef enum { Record_HasSynonyms = 0x01 << 5, Record_HasFrequency = 0x02 << 5 } RecordFlags; #define LEXTYPE_MASK 0x1F typedef struct { friso_dic_t dic; BufferReader *rdr; } ReaderCtx; static int readRecord(ReaderCtx *ctx) { BufferReader *rdr = ctx->rdr; // Read the flags char c; size_t nr = Buffer_ReadByte(rdr, &c); if (!nr) { return 0; } uint32_t lexType = c & LEXTYPE_MASK; // Determine term length... const char *term = rdr->buf->data + rdr->pos; size_t termLen = strlen(term); rdr->pos += termLen + 1; uint16_t numSyns = 0; if (c & Record_HasSynonyms) { Buffer_Read(rdr, &numSyns, 2); numSyns = htons(numSyns); } friso_array_t syns = NULL; if (numSyns) { syns = new_array_list_with_opacity(numSyns); // Read the synonyms for (size_t ii = 0; ii < numSyns; ++ii) { const char *curSyn = rdr->buf->data + rdr->pos; size_t synLen = strlen(curSyn); rdr->pos += synLen + 1; // Store the synonym somewhere? array_list_add(syns, strdup(curSyn)); } } // If there's a frequency, read that too. uint32_t freq = 0; if (c & Record_HasFrequency) { Buffer_Read(rdr, &freq, 4); freq = htonl(freq); } // printf("Adding record TYPE: %u. TERM: %s. NSYNS: %u\n", lexType, term, numSyns); friso_dic_add_with_fre(ctx->dic, lexType, strdup(term), syns, freq); return 1; } // Read the format int ChineseDictLoad(friso_dic_t d) { // Before doing anything, verify the version: uint32_t version; const char *inbuf = ChineseDict; version = htonl(*(uint32_t *)inbuf); inbuf += 4; assert(version == 0); // First load the symbol.. char *expanded = malloc(ChineseDictFullLength); mz_ulong dstLen = ChineseDictFullLength; int rv = mz_uncompress((unsigned char *)expanded, &dstLen, (const unsigned char *)inbuf, ChineseDictCompressedLength); if (rv != MZ_OK) { printf("Failed to decompress: %s. Full Len=%lu. DestLen=%lu\n", mz_error(rv), dstLen, ChineseDictCompressedLength); printf("SrcLen|DstLen: 0%lx\n", dstLen | ChineseDictCompressedLength); abort(); } assert(rv == MZ_OK); // Now, let's see if we can read the records... Buffer tmpBuf; tmpBuf.data = expanded; tmpBuf.cap = dstLen; tmpBuf.offset = 0; BufferReader reader = NewBufferReader(&tmpBuf); ReaderCtx ctx = {.dic = d, .rdr = &reader}; while (reader.pos < tmpBuf.cap && readRecord(&ctx)) { // Do nothing } free(expanded); return 0; }RediSearch-1.2.2/src/cndict_loader.h000066400000000000000000000005671364126773500173050ustar00rootroot00000000000000#ifndef CNDICT_LOADER_H #define CNDICT_LOADER_H #include "dep/friso/friso.h" // Defined in cndict_loader.c // Loads the built-in dictionary into the provided dictionary object int ChineseDictLoad(friso_dic_t); // Defined in generated/cndict_data.c // Configures the friso config object based on built-in settings. void ChineseDictConfigure(friso_t, friso_config_t); #endifRediSearch-1.2.2/src/commands.h000066400000000000000000000025621364126773500163110ustar00rootroot00000000000000#ifndef RS_COMMANDS_H_ #define RS_COMMANDS_H_ /** RS_CMD_PREFIX can be defined with -D from the Makefile */ #ifndef RS_CMD_PREFIX #define RS_CMD_PREFIX "FT" #endif #define RS_CREATE_CMD RS_CMD_PREFIX ".CREATE" #define RS_ADD_CMD RS_CMD_PREFIX ".ADD" #define RS_SAFEADD_CMD RS_CMD_PREFIX ".SAFEADD" #define RS_SETPAYLOAD_CMD RS_CMD_PREFIX ".SETPAYLOAD" #define RS_ADDHASH_CMD RS_CMD_PREFIX ".ADDHASH" #define RS_SAFEADDHASH_CMD RS_CMD_PREFIX ".SAFEADDHASH" #define RS_INFO_CMD RS_CMD_PREFIX ".INFO" #define RS_SEARCH_CMD RS_CMD_PREFIX ".SEARCH" #define RS_AGGREGATE_CMD RS_CMD_PREFIX ".AGGREGATE" #define RS_EXPLAIN_CMD RS_CMD_PREFIX ".EXPLAIN" #define RS_DEL_CMD RS_CMD_PREFIX ".DEL" #define RS_DROP_CMD RS_CMD_PREFIX ".DROP" #define RS_GET_CMD RS_CMD_PREFIX ".GET" #define RS_MGET_CMD RS_CMD_PREFIX ".MGET" #define RS_TAGVALS_CMD RS_CMD_PREFIX ".TAGVALS" #define RS_SUGADD_CMD RS_CMD_PREFIX ".SUGADD" #define RS_SUGGET_CMD RS_CMD_PREFIX ".SUGGET" #define RS_SUGDEL_CMD RS_CMD_PREFIX ".SUGDEL" #define RS_SUGLEN_CMD RS_CMD_PREFIX ".SUGLEN" #define RS_CURSOR_CMD RS_CMD_PREFIX ".CURSOR" #define RS_SYNADD_CMD RS_CMD_PREFIX ".SYNADD" #define RS_SYNUPDATE_CMD RS_CMD_PREFIX ".SYNUPDATE" #define RS_SYNFORCEUPDATE_CMD RS_CMD_PREFIX ".SYNFORCEUPDATE" #define RS_SYNDUMP_CMD RS_CMD_PREFIX ".SYNDUMP" #define RS_ALTER_CMD RS_CMD_PREFIX ".ALTER" #define RS_DEBUG RS_CMD_PREFIX ".DEBUG" #endif RediSearch-1.2.2/src/concurrent_ctx.c000066400000000000000000000210441364126773500175370ustar00rootroot00000000000000#include "concurrent_ctx.h" #include "dep/thpool/thpool.h" #include #include #include static threadpool *threadpools_g = NULL; int CONCURRENT_POOL_INDEX = -1; int CONCURRENT_POOL_SEARCH = -1; int ConcurrentSearch_CreatePool(int numThreads) { if (!threadpools_g) { threadpools_g = array_new(threadpool, 4); } int poolId = array_len(threadpools_g); threadpools_g = array_append(threadpools_g, thpool_init(numThreads)); return poolId; } /** Start the concurrent search thread pool. Should be called when initializing the module */ void ConcurrentSearch_ThreadPoolStart() { if (CONCURRENT_POOL_SEARCH == -1) { CONCURRENT_POOL_SEARCH = ConcurrentSearch_CreatePool(RSGlobalConfig.searchPoolSize); long numProcs = 0; if (!RSGlobalConfig.poolSizeNoAuto) { numProcs = sysconf(_SC_NPROCESSORS_ONLN); } if (numProcs < 1) { numProcs = RSGlobalConfig.indexPoolSize; } CONCURRENT_POOL_INDEX = ConcurrentSearch_CreatePool(numProcs); } } typedef struct ConcurrentCmdCtx { RedisModuleBlockedClient *bc; RedisModuleCtx *ctx; ConcurrentCmdHandler handler; RedisModuleString **argv; int argc; int options; } ConcurrentCmdCtx; /* Run a function on the concurrent thread pool */ void ConcurrentSearch_ThreadPoolRun(void (*func)(void *), void *arg, int type) { threadpool p = threadpools_g[type]; thpool_add_work(p, func, arg); } static void threadHandleCommand(void *p) { ConcurrentCmdCtx *ctx = p; // Lock GIL if needed if (!(ctx->options & CMDCTX_NO_GIL)) { RedisModule_ThreadSafeContextLock(ctx->ctx); } ctx->handler(ctx->ctx, ctx->argv, ctx->argc, ctx); // Unlock GIL if needed if (!(ctx->options & CMDCTX_NO_GIL)) { RedisModule_ThreadSafeContextUnlock(ctx->ctx); } if (!(ctx->options & CMDCTX_KEEP_RCTX)) { RedisModule_FreeThreadSafeContext(ctx->ctx); } RedisModule_UnblockClient(ctx->bc, NULL); free(ctx->argv); free(p); } void ConcurrentCmdCtx_KeepRedisCtx(ConcurrentCmdCtx *cctx) { cctx->options |= CMDCTX_KEEP_RCTX; } int ConcurrentSearch_HandleRedisCommandEx(int poolType, int options, ConcurrentCmdHandler handler, RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { ConcurrentCmdCtx *cmdCtx = malloc(sizeof(*cmdCtx)); cmdCtx->bc = RedisModule_BlockClient(ctx, NULL, NULL, NULL, 0); cmdCtx->argc = argc; cmdCtx->ctx = RedisModule_GetThreadSafeContext(cmdCtx->bc); RedisModule_AutoMemory(cmdCtx->ctx); cmdCtx->handler = handler; cmdCtx->options = options; // Copy command arguments so they can be released by the calling thread cmdCtx->argv = calloc(argc, sizeof(RedisModuleString *)); for (int i = 0; i < argc; i++) { cmdCtx->argv[i] = RedisModule_CreateStringFromString(cmdCtx->ctx, argv[i]); } ConcurrentSearch_ThreadPoolRun(threadHandleCommand, cmdCtx, poolType); return REDISMODULE_OK; } int ConcurrentSearch_HandleRedisCommand(int poolType, ConcurrentCmdHandler handler, RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { return ConcurrentSearch_HandleRedisCommandEx(poolType, 0, handler, ctx, argv, argc); } static void ConcurrentSearch_CloseKeys(ConcurrentSearchCtx *ctx) { size_t sz = ctx->numOpenKeys; for (size_t i = 0; i < sz; i++) { if (ctx->openKeys[i].key && // if this is a shared key, don't do anything !(ctx->openKeys[i].opts & ConcurrentKey_SharedKey)) { RedisModule_CloseKey(ctx->openKeys[i].key); } } } void ConcurrentSearchCtx_ReopenKeys(ConcurrentSearchCtx *ctx) { size_t sz = ctx->numOpenKeys; for (size_t i = 0; i < sz; i++) { ConcurrentKeyCtx *kx = &ctx->openKeys[i]; kx->key = RedisModule_OpenKey(ctx->ctx, kx->keyName, kx->keyFlags); // if the key is marked as shared, make sure it isn't now kx->opts &= ~ConcurrentKey_SharedKey; kx->cb(kx->key, kx->privdata); } } /** Check the elapsed timer, and release the lock if enough time has passed */ int ConcurrentSearch_CheckTimer(ConcurrentSearchCtx *ctx) { static struct timespec now; clock_gettime(CLOCK_MONOTONIC_RAW, &now); long long durationNS = (long long)1000000000 * (now.tv_sec - ctx->lastTime.tv_sec) + (now.tv_nsec - ctx->lastTime.tv_nsec); // Timeout - release the thread safe context lock and let other threads run as well if (durationNS > CONCURRENT_TIMEOUT_NS) { ConcurrentSearchCtx_Unlock(ctx); // Right after releasing, we try to acquire the lock again. // If other threads are waiting on it, the kernel will decide which one // will get the chance to run again. Calling sched_yield is not necessary here. // See http://blog.firetree.net/2005/06/22/thread-yield-after-mutex-unlock/ ConcurrentSearchCtx_Lock(ctx); // Right after re-acquiring the lock, we sample the current time. // This will be used to calculate the elapsed running time ConcurrentSearchCtx_ResetClock(ctx); return 1; } return 0; } void ConcurrentSearchCtx_ResetClock(ConcurrentSearchCtx *ctx) { clock_gettime(CLOCK_MONOTONIC_RAW, &ctx->lastTime); ctx->ticker = 0; } /** Initialize a concurrent context */ void ConcurrentSearchCtx_Init(RedisModuleCtx *rctx, ConcurrentSearchCtx *ctx) { ctx->ctx = rctx; ctx->isLocked = 0; ctx->numOpenKeys = 0; ctx->openKeys = NULL; ConcurrentSearchCtx_ResetClock(ctx); } void ConcurrentSearchCtx_InitSingle(ConcurrentSearchCtx *ctx, RedisModuleCtx *rctx, int mode, ConcurrentReopenCallback cb) { ctx->ctx = rctx; ctx->isLocked = 0; ctx->numOpenKeys = 1; ctx->openKeys = calloc(1, sizeof(*ctx->openKeys)); ctx->openKeys->cb = cb; ctx->openKeys->keyFlags = mode; } void ConcurrentSearchCtx_Free(ConcurrentSearchCtx *ctx) { // Release the monitored open keys for (size_t i = 0; i < ctx->numOpenKeys; i++) { if (ctx->isLocked && ctx->openKeys[i].key && // if this is a shared key, don't do anything !(ctx->openKeys[i].opts & ConcurrentKey_SharedKey)) { RedisModule_CloseKey(ctx->openKeys[i].key); } // If the key name is a shared string, don't do anything if (!(ctx->openKeys[i].opts & ConcurrentKey_SharedKeyString)) { RedisModule_FreeString(ctx->ctx, ctx->openKeys[i].keyName); } // free the private data if needed if (ctx->openKeys[i].freePrivData) { ctx->openKeys[i].freePrivData(ctx->openKeys[i].privdata); } } free(ctx->openKeys); } /* Add a "monitored" key to the context. When keys are open during concurrent execution, they need * to be closed before we yield execution and release the GIL, and reopened when we get back the * execution context. * To simplify this, each place in the program that holds a reference to a redis key * based data, registers itself and the key to be automatically reopened. * * After reopening, a callback * is being called to notify the key holder that it has been reopened, and handle the consequences. * This is used by index iterators to avoid holding reference to deleted keys or changed data. * * We register the key, the flags to reopen it, a string holding its name for reopening, a callback * for notification, and private callback data. if freePrivDataCallback is provided, we will call it * when the context is freed to release the private data. If NULL is passed, we do nothing */ void ConcurrentSearch_AddKey(ConcurrentSearchCtx *ctx, RedisModuleKey *key, int openFlags, RedisModuleString *keyName, ConcurrentReopenCallback cb, void *privdata, void (*freePrivDataCallback)(void *), ConcurrentKeyOptions opts) { ctx->numOpenKeys++; ctx->openKeys = realloc(ctx->openKeys, ctx->numOpenKeys * sizeof(ConcurrentKeyCtx)); ctx->openKeys[ctx->numOpenKeys - 1] = (ConcurrentKeyCtx){.key = key, .keyName = keyName, .keyFlags = openFlags, .cb = cb, .privdata = privdata, .freePrivData = freePrivDataCallback, .opts = opts}; } void ConcurrentSearchCtx_Lock(ConcurrentSearchCtx *ctx) { assert(!ctx->isLocked); RedisModule_ThreadSafeContextLock(ctx->ctx); ctx->isLocked = 1; ConcurrentSearchCtx_ReopenKeys(ctx); } void ConcurrentSearchCtx_Unlock(ConcurrentSearchCtx *ctx) { ConcurrentSearch_CloseKeys(ctx); RedisModule_ThreadSafeContextUnlock(ctx->ctx); ctx->isLocked = 0; }RediSearch-1.2.2/src/concurrent_ctx.h000066400000000000000000000212221364126773500175420ustar00rootroot00000000000000#ifndef RS_CONCERRNT_CTX_ #define RS_CONCERRNT_CTX_ #include "redisearch.h" #include "redismodule.h" #include "config.h" #include #include /** Concurrent Search Exection Context. * * We allow queries to run concurrently, each running on its own thread, locking the redis GIL * for a bit, releasing it, and letting others run as well. * * The queries do not really run in parallel, but one at a time, competing over the global lock. * This does not speed processing - in fact it can actually slow it down. But it prevents a * common situation, where very slow queries block the entire redis instance for a long time. * * We intend to switch this model to a single thread running multiple "coroutines", but for now * this naive implementation is good enough and will fix the search concurrency issue. * * The ConcurrentSearchCtx is part of a query, and the query calls the CONCURRENT_CTX_TICK macro * for every "cycle" - meaning a processed search result. The concurrency engine will switch * execution to another query when the current thread has spent enough time working. * * The current switch threshold is 200 microseconds. Since measuring time is slow in itself (~50ns) * we sample the elapsed time every 20 "cycles" of the query processor. * */ typedef void (*ConcurrentReopenCallback)(RedisModuleKey *k, void *ctx); typedef enum { // no shared resources - the default mode ConcurrentKey_SharedNothing = 0x0, // the key name string is shared and should not be deleted ConcurrentKey_SharedKeyString = 0x01, // the key itself is shared and should not be deleted. // this may be rewritten on reopening ConcurrentKey_SharedKey = 0x02, } ConcurrentKeyOptions; /* ConcurrentKeyCtx is a reference to a key that's being held open during concurrent execution and * needs to be reopened after yielding and gaining back execution. See ConcurrentSearch_AddKey for * more details */ typedef struct { RedisModuleKey *key; RedisModuleString *keyName; int sharedKey; void *privdata; ConcurrentReopenCallback cb; // redis key open flags int keyFlags; // context specific flags ConcurrentKeyOptions opts; // A custom callback to free privdata. If NULL we don't do anything void (*freePrivData)(void *); } ConcurrentKeyCtx; /* The concurrent execution context struct itself. See above for details */ typedef struct { long long ticker; struct timespec lastTime; RedisModuleCtx *ctx; ConcurrentKeyCtx *openKeys; uint32_t numOpenKeys; uint32_t isLocked; } ConcurrentSearchCtx; /** The maximal size of the concurrent query thread pool. Since only one thread is operational at a * time, it's not a problem besides memory consumption, to have much more threads than CPU cores. * By default the pool starts with just one thread, and scales up as needed */ /** * The maximum number of threads performing indexing on documents. * It's good to set this to approximately the number of CPUs running. * * NOTE: This is merely the *fallback* value if for some reason the number of * CPUs cannot be automatically determined. If you want to force the number * of tokenizer threads, make sure you also disable the CPU detection in the * source file */ /** The number of execution "ticks" per elapsed time check. This is intended to reduce the number of * calls to clock_gettime() */ #define CONCURRENT_TICK_CHECK 50 /** The timeout after which we try to switch to another query thread - in Nanoseconds */ #define CONCURRENT_TIMEOUT_NS 100000 /* Add a "monitored" key to the context. When keys are open during concurrent execution, they need * to be closed before we yield execution and release the GIL, and reopened when we get back the * execution context. * To simplify this, each place in the program that holds a reference to a redis key * based data, registers itself and the key to be automatically reopened. * * After reopening, a callback * is being called to notify the key holder that it has been reopened, and handle the consequences. * This is used by index iterators to avoid holding reference to deleted keys or changed data. * * We register the key, the flags to reopen it, a string holding its name for reopening, a callback * for notification, and private callback data. if freePrivDataCallback is provided, we will call it * when the context is freed to release the private data. If NULL is passed, we do nothing */ void ConcurrentSearch_AddKey(ConcurrentSearchCtx *ctx, RedisModuleKey *key, int openFlags, RedisModuleString *keyName, ConcurrentReopenCallback cb, void *privdata, void (*freePrivDataCallback)(void *), ConcurrentKeyOptions opts); /** * Replace the key at a given position. The context must not be locked. It * is assumed that the callback for the key remains the same * - redisCtx is the redis module context which owns this key * - keyName is the name of the new key * - pos is the position at which the key resides (usually 0) * - arg is the new arg to be passed to the callback */ static inline void ConcurrentSearch_SetKey(ConcurrentSearchCtx *ctx, RedisModuleString *keyName, void *privdata) { ctx->openKeys[0].keyName = keyName; ctx->openKeys[0].privdata = privdata; } /** Start the concurrent search thread pool. Should be called when initializing the module */ void ConcurrentSearch_ThreadPoolStart(); /* Create a new thread pool, and return its identifying id */ int ConcurrentSearch_CreatePool(int numThreads); extern int CONCURRENT_POOL_INDEX; extern int CONCURRENT_POOL_SEARCH; /* Run a function on the concurrent thread pool */ void ConcurrentSearch_ThreadPoolRun(void (*func)(void *), void *arg, int type); /** Check the elapsed timer, and release the lock if enough time has passed. * Return 1 if switching took place */ int ConcurrentSearch_CheckTimer(ConcurrentSearchCtx *ctx); /** Initialize and reset a concurrent search ctx */ void ConcurrentSearchCtx_Init(RedisModuleCtx *rctx, ConcurrentSearchCtx *ctx); /** * Initialize a concurrent context to contain a single key. This key can be swapped * out via SetKey() */ void ConcurrentSearchCtx_InitSingle(ConcurrentSearchCtx *ctx, RedisModuleCtx *rctx, int mode, ConcurrentReopenCallback cb); /** Reset the clock variables in the concurrent search context */ void ConcurrentSearchCtx_ResetClock(ConcurrentSearchCtx *ctx); /* Free the execution context's dynamically allocated resources */ void ConcurrentSearchCtx_Free(ConcurrentSearchCtx *ctx); void ConcurrentSearchCtx_Lock(ConcurrentSearchCtx *ctx); void ConcurrentSearchCtx_Unlock(ConcurrentSearchCtx *ctx); void ConcurrentSearchCtx_ReopenKeys(ConcurrentSearchCtx *ctx); struct ConcurrentCmdCtx; typedef void (*ConcurrentCmdHandler)(RedisModuleCtx *, RedisModuleString **, int, struct ConcurrentCmdCtx *); #define CMDCTX_KEEP_RCTX 0x01 #define CMDCTX_NO_GIL 0x02 /** * Take ownership of the underlying Redis command context. Once ownership is * claimed, the context needs to be freed (at some point in the future) via * RM_FreeThreadSafeContext() * * TODO/FIXME: * The context is tied to a BlockedCLient, but it shouldn't actually utilize it. * Need to add an API to Redis to better manage a thread safe context, or to * otherwise 'detach' it from the Client so that trying to perform I/O on it * would result in an error rather than simply using a dangling pointer. */ void ConcurrentCmdCtx_KeepRedisCtx(struct ConcurrentCmdCtx *ctx); int ConcurrentSearch_HandleRedisCommand(int poolType, ConcurrentCmdHandler handler, RedisModuleCtx *ctx, RedisModuleString **argv, int argc); /* Same as handleRedis command, but set flags for the concurrent context */ int ConcurrentSearch_HandleRedisCommandEx(int poolType, int options, ConcurrentCmdHandler handler, RedisModuleCtx *ctx, RedisModuleString **argv, int argc); /** This macro is called by concurrent executors (currently the query only). * It checks if enough time has passed and releases the global lock if that is the case. */ #define CONCURRENT_CTX_TICK(x) \ ({ \ int conctx__didSwitch = 0; \ if ((x) && ++(x)->ticker % CONCURRENT_TICK_CHECK == 0) { \ if (ConcurrentSearch_CheckTimer((x))) { \ conctx__didSwitch = 1; \ } \ } \ conctx__didSwitch; \ }) #endif RediSearch-1.2.2/src/config.c000066400000000000000000000116671364126773500157560ustar00rootroot00000000000000#include "config.h" #include "rmutil/util.h" #include "rmutil/strings.h" #include #include RSConfig RSGlobalConfig = RS_DEFAULT_CONFIG; int ReadConfig(RedisModuleString **argv, int argc, const char **err) { *err = NULL; /* Read the extension we want to load */ if (argc > 1 && RMUtil_ArgIndex("EXTLOAD", argv, argc) >= 0) { RMUtil_ParseArgsAfter("EXTLOAD", argv, argc, "c", &RSGlobalConfig.extLoad); } /* If SafeMode is enabled, we turn down concurrent mode in the default config */ if (RMUtil_ArgIndex("SAFEMODE", argv, argc) >= 0) { RSGlobalConfig.concurrentMode = 0; } /* If NOGC is sent, we disable gc in the config */ if (RMUtil_ArgIndex("NOGC", argv, argc) >= 0) { RSGlobalConfig.enableGC = 0; } /* Read the minimum query prefix allowed */ if (argc >= 2 && RMUtil_ArgIndex("MINPREFIX", argv, argc) >= 0) { RMUtil_ParseArgsAfter("MINPREFIX", argv, argc, "l", &RSGlobalConfig.minTermPrefix); if (RSGlobalConfig.minTermPrefix <= 0) { *err = "Invalid MINPREFIX value"; return REDISMODULE_ERR; } } /* Read the maximum document table size allowed */ if (argc >= 2 && RMUtil_ArgIndex("MAXDOCTABLESIZE", argv, argc) >= 0) { RMUtil_ParseArgsAfter("MAXDOCTABLESIZE", argv, argc, "l", &RSGlobalConfig.maxDocTableSize); if (RSGlobalConfig.maxDocTableSize <= 0 || RSGlobalConfig.maxDocTableSize > MAX_DOC_TABLE_SIZE) { *err = "Invalid MAXDOCTABLESIZE value"; return REDISMODULE_ERR; } } /* Read the maximum prefix expansions */ if (argc >= 2 && RMUtil_ArgIndex("MAXEXPANSIONS", argv, argc) >= 0) { RMUtil_ParseArgsAfter("MAXEXPANSIONS", argv, argc, "l", &RSGlobalConfig.maxPrefixExpansions); if (RSGlobalConfig.maxPrefixExpansions <= 0) { *err = "Invalid MAXEXPANSIONS value"; return REDISMODULE_ERR; } } /* Read the query timeout */ if (argc >= 2 && RMUtil_ArgIndex("TIMEOUT", argv, argc) >= 0) { RMUtil_ParseArgsAfter("TIMEOUT", argv, argc, "l", &RSGlobalConfig.queryTimeoutMS); if (RSGlobalConfig.queryTimeoutMS < 0) { *err = "Invalid TIMEOUT value"; return REDISMODULE_ERR; } } if (argc >= 2 && RMUtil_ArgIndex("INDEX_THREADS", argv, argc) >= 0) { RMUtil_ParseArgsAfter("INDEX_THREADS", argv, argc, "", &RSGlobalConfig.indexPoolSize); if (RSGlobalConfig.indexPoolSize > CONCURRENT_INDEX_MAX_POOL_SIZE) { *err = "Pool size to big"; } RSGlobalConfig.poolSizeNoAuto = 1; } if (argc >= 2 && RMUtil_ArgIndex("SEARCH_THREADS", argv, argc) >= 0) { RMUtil_ParseArgsAfter("SEARCH_THREADS", argv, argc, "", &RSGlobalConfig.searchPoolSize); if (RSGlobalConfig.searchPoolSize > CONCURRENT_INDEX_MAX_POOL_SIZE) { *err = "Pool size to big"; } RSGlobalConfig.poolSizeNoAuto = 1; } if (getenv("RS_MIN_THREADS")) { printf("Setting thread pool sizes to 1\n"); RSGlobalConfig.searchPoolSize = 1; RSGlobalConfig.indexPoolSize = 1; RSGlobalConfig.poolSizeNoAuto = 1; } if (RMUtil_ArgIndex("FRISOINI", argv, argc) >= 0) { RMUtil_ParseArgsAfter("FRISOINI", argv, argc, "c", &RSGlobalConfig.frisoIni); } const char *policy = NULL; RMUtil_ParseArgsAfter("ON_TIMEOUT", argv, argc, "c", &policy); if (policy != NULL) { if (!strcasecmp(policy, "RETURN")) { RSGlobalConfig.timeoutPolicy = TimeoutPolicy_Return; } else if (!strcasecmp(policy, "FAIL")) { RSGlobalConfig.timeoutPolicy = TimeoutPolicy_Fail; } else { *err = "Invalid ON_TIMEOUT value"; return REDISMODULE_ERR; } } if (argc >= 2 && RMUtil_ArgIndex("GC_SCANSIZE", argv, argc) >= 0) { RMUtil_ParseArgsAfter("GC_SCANSIZE", argv, argc, "l", &RSGlobalConfig.gcScanSize); if (RSGlobalConfig.gcScanSize <= 0) { *err = "Invalid GC_SCANSIZE value"; return REDISMODULE_ERR; } } return REDISMODULE_OK; } sds RSConfig_GetInfoString(const RSConfig *config) { sds ss = sdsempty(); ss = sdscatprintf(ss, "concurrency: %s, ", config->concurrentMode ? "ON" : "OFF(SAFEMODE)"); ss = sdscatprintf(ss, "gc: %s, ", config->enableGC ? "ON" : "OFF"); ss = sdscatprintf(ss, "prefix min length: %lld, ", config->minTermPrefix); ss = sdscatprintf(ss, "prefix max expansions: %lld, ", config->maxPrefixExpansions); ss = sdscatprintf(ss, "query timeout (ms): %lld, ", config->queryTimeoutMS); ss = sdscatprintf(ss, "timeout policy: %s, ", TimeoutPolicy_ToString(config->timeoutPolicy)); ss = sdscatprintf(ss, "cursor read size: %lld, ", config->cursorReadSize); ss = sdscatprintf(ss, "cursor max idle (ms): %lld, ", config->cursorMaxIdle); ss = sdscatprintf(ss, "max doctable size: %lu, ", config->maxDocTableSize); ss = sdscatprintf(ss, "search pool size: %lu, ", config->searchPoolSize); ss = sdscatprintf(ss, "index pool size: %lu, ", config->indexPoolSize); if (config->extLoad) { ss = sdscatprintf(ss, "ext load: %s, ", config->extLoad); } if (config->frisoIni) { ss = sdscatprintf(ss, "friso ini: %s, ", config->frisoIni); } return ss; } RediSearch-1.2.2/src/config.h000066400000000000000000000063551364126773500157610ustar00rootroot00000000000000#ifndef RS_CONFIG_H_ #define RS_CONFIG_H_ #include "redismodule.h" #include "rmutil/sds.h" typedef enum { TimeoutPolicy_Default = 0, // Defer to global config TimeoutPolicy_Return, // Return what we have on timeout TimeoutPolicy_Fail // Just fail without returning anything } RSTimeoutPolicy; static inline const char *TimeoutPolicy_ToString(RSTimeoutPolicy policy) { switch (policy) { case TimeoutPolicy_Return: return "return"; case TimeoutPolicy_Fail: return "fail"; default: return "huh?"; } } /* RSConfig is a global configuration struct for the module, it can be included from each file, and * is initialized with user config options during module statrtup */ typedef struct { // Use concurrent serach (default: 1, disable with SAFEMODE) int concurrentMode; // If not null, this points at a .so file of an extension we try to load (default: NULL) const char *extLoad; // Path to friso.ini for chinese dictionary file const char *frisoIni; // If this is set, GC is enabled on all indexes (default: 1, disable with NOGC) int enableGC; // The minimal number of characters we allow expansion for in a prefix search. Default: 2 long long minTermPrefix; // The maximal number of expansions we allow for a prefix. Default: 200 long long maxPrefixExpansions; // The maximal amount of time a single query can take before timing out, in milliseconds. // 0 means unlimited long long queryTimeoutMS; // Number of rows to read from a cursor if not specified long long cursorReadSize; // Maximum idle time for a cursor. Users can use shorter lifespans, but never // longer ones long long cursorMaxIdle; long long timeoutPolicy; size_t maxDocTableSize; size_t searchPoolSize; size_t indexPoolSize; int poolSizeNoAuto; // Don't auto-detect pool size size_t gcScanSize; } RSConfig; // global config extern reference extern RSConfig RSGlobalConfig; /* Read configuration from redis module arguments into the global config object. Return * REDISMODULE_ERR and sets an error message if something is invalid */ int ReadConfig(RedisModuleString **argv, int argc, const char **err); sds RSConfig_GetInfoString(const RSConfig *config); #define DEFAULT_DOC_TABLE_SIZE 1000000 #define MAX_DOC_TABLE_SIZE 100000000 #define CONCURRENT_SEARCH_POOL_DEFAULT_SIZE 20 #define CONCURRENT_INDEX_POOL_DEFAULT_SIZE 8 #define CONCURRENT_INDEX_MAX_POOL_SIZE 200 // Maximum number of threads to create #define GC_SCANSIZE 100 // default configuration #define RS_DEFAULT_CONFIG \ { \ .concurrentMode = 1, .extLoad = NULL, .enableGC = 1, .minTermPrefix = 2, \ .maxPrefixExpansions = 200, .queryTimeoutMS = 500, .timeoutPolicy = TimeoutPolicy_Return, \ .cursorReadSize = 1000, .cursorMaxIdle = 300000, .maxDocTableSize = DEFAULT_DOC_TABLE_SIZE, \ .searchPoolSize = CONCURRENT_SEARCH_POOL_DEFAULT_SIZE, \ .indexPoolSize = CONCURRENT_INDEX_POOL_DEFAULT_SIZE, .poolSizeNoAuto = 0, \ .gcScanSize = GC_SCANSIZE \ } #endif RediSearch-1.2.2/src/cursor.c000066400000000000000000000166121364126773500160210ustar00rootroot00000000000000#include "cursor.h" #include #include #include #define Cursor_IsIdle(cur) ((cur)->pos != -1) CursorList RSCursors; static uint64_t curTimeNs() { struct timespec tv; clock_gettime(CLOCK_MONOTONIC, &tv); return tv.tv_nsec + (tv.tv_sec * 1000000000); } static void CursorList_Lock(CursorList *cl) { pthread_mutex_lock(&cl->lock); } static void CursorList_Unlock(CursorList *cl) { pthread_mutex_unlock(&cl->lock); } void CursorList_Init(CursorList *cl) { memset(cl, 0, sizeof(*cl)); pthread_mutex_init(&cl->lock, NULL); cl->lookup = kh_init(cursors); Array_Init(&cl->idle); } static CursorSpecInfo *findInfo(const CursorList *cl, const char *keyName) { for (size_t ii = 0; ii < cl->specsCount; ++ii) { if (!strcmp(cl->specs[ii]->keyName, keyName)) { return cl->specs[ii]; } } return NULL; } static void Cursor_RemoveFromIdle(Cursor *cur) { Array *idle = &cur->parent->idle; Cursor **ll = ARRAY_GETARRAY_AS(idle, Cursor **); size_t n = ARRAY_GETSIZE_AS(idle, Cursor *); if (n > 1) { Cursor *last = ll[n - 1]; /** Last cursor - move to current position */ last->pos = cur->pos; ll[last->pos] = last; } Array_Resize(idle, sizeof(Cursor *) * (n - 1)); if (cur->nextTimeoutNs == cur->parent->nextIdleTimeoutNs) { cur->parent->nextIdleTimeoutNs = 0; } cur->pos = -1; } /* Doesn't lock - simply deallocates and decrements */ static void Cursor_FreeInternal(Cursor *cur, khiter_t khi) { /* Decrement the used count */ assert(khi != kh_end(cur->parent->lookup)); assert(kh_get(cursors, cur->parent->lookup, cur->id) != kh_end(cur->parent->lookup)); kh_del(cursors, cur->parent->lookup, khi); assert(kh_get(cursors, cur->parent->lookup, cur->id) == kh_end(cur->parent->lookup)); cur->specInfo->used--; if (cur->sctx->redisCtx) { RedisModule_FreeThreadSafeContext(cur->sctx->redisCtx); cur->sctx->redisCtx = NULL; } SearchCtx_Free(cur->sctx); rm_free(cur); } /** * Garbage collection: * * Garbage collection is performed: * * - Every operations * - If there are too many active cursors and we want to create a cursor * - If NextTimeout is set and is earlier than the current time. * * Garbage collection is throttled within a given interval as well. */ static int Cursors_GCInternal(CursorList *cl, int force) { uint64_t now = curTimeNs(); int numCollected = 0; if (cl->nextIdleTimeoutNs && cl->nextIdleTimeoutNs > now) { return -1; } else if (!force && now - cl->lastCollect < RSCURSORS_SWEEP_THROTTLE) { return -1; } cl->lastCollect = now; for (size_t ii = 0; ii < ARRAY_GETSIZE_AS(&cl->idle, Cursor *); ++ii) { Cursor *cur = *ARRAY_GETITEM_AS(&cl->idle, ii, Cursor **); if (cur->nextTimeoutNs <= now) { /* Remove it */ Cursor_RemoveFromIdle(cur); Cursor_FreeInternal(cur, kh_get(cursors, cl->lookup, cur->id)); numCollected++; } } return numCollected; } int Cursors_CollectIdle(CursorList *cl) { CursorList_Lock(cl); int rc = Cursors_GCInternal(cl, 1); CursorList_Unlock(cl); return rc; } void CursorList_AddSpec(CursorList *cl, const char *k, size_t capacity) { CursorSpecInfo *info = findInfo(cl, k); if (!info) { info = malloc(sizeof(*info)); info->keyName = strdup(k); info->used = 0; cl->specs = realloc(cl->specs, sizeof(*cl->specs) * ++cl->specsCount); cl->specs[cl->specsCount - 1] = info; } info->cap = capacity; } static void CursorList_IncrCounter(CursorList *cl) { if (++cl->counter % RSCURSORS_SWEEP_INTERVAL) { Cursors_GCInternal(cl, 0); } } /** * Cursor ID is a 64 bit opaque integer. The upper 32 bits consist of the PID * of the process which generated the cursor, and the lower 32 bits consist of * the counter at the time at which it was generated. This doesn't make it * particularly "secure" but it does prevent accidental collisions from both * a stuck client and a crashed server */ static uint64_t CursorList_GenerateId(CursorList *curlist) { const pid_t pid = getpid(); uint64_t id = ((uint64_t)pid << 32) | curlist->counter++; return id; } Cursor *Cursors_Reserve(CursorList *cl, RedisSearchCtx *sctx, const char *lookupName, unsigned interval, char **err) { CursorList_Lock(cl); CursorList_IncrCounter(cl); CursorSpecInfo *spec = findInfo(cl, lookupName); Cursor *cur = NULL; if (spec == NULL) { SET_ERR(err, "Index does not have cursors enabled or does not exist"); goto done; } if (spec->used >= spec->cap) { Cursors_GCInternal(cl, 0); if (spec->used >= spec->cap) { /** Collect idle cursors now */ SET_ERR(err, "Too many cursors allocated for index"); goto done; } } cur = rm_calloc(1, sizeof(*cur)); cur->parent = cl; cur->specInfo = spec; cur->sctx = sctx; cur->id = CursorList_GenerateId(cl); cur->pos = -1; cur->timeoutIntervalMs = interval; int dummy; khiter_t iter = kh_put(cursors, cl->lookup, cur->id, &dummy); kh_value(cl->lookup, iter) = cur; done: if (cur) { cur->specInfo->used++; } CursorList_Unlock(cl); return cur; } int Cursor_Pause(Cursor *cur) { CursorList *cl = cur->parent; cur->nextTimeoutNs = curTimeNs() + ((uint64_t)cur->timeoutIntervalMs * 1000000); CursorList_Lock(cl); CursorList_IncrCounter(cl); if (cur->nextTimeoutNs < cl->nextIdleTimeoutNs || cl->nextIdleTimeoutNs == 0) { cl->nextIdleTimeoutNs = cur->nextTimeoutNs; } /* Add to idle list */ *(Cursor **)(ARRAY_ADD_AS(&cl->idle, Cursor *)) = cur; cur->pos = ARRAY_GETSIZE_AS(&cl->idle, Cursor **) - 1; CursorList_Unlock(cl); return REDISMODULE_OK; } Cursor *Cursors_TakeForExecution(CursorList *cl, uint64_t cid) { CursorList_Lock(cl); CursorList_IncrCounter(cl); Cursor *cur = NULL; khiter_t iter = kh_get(cursors, cl->lookup, cid); if (iter != kh_end(cl->lookup)) { cur = kh_value(cl->lookup, iter); if (cur->pos == -1) { // Cursor is not idle! cur = NULL; } else { // Remove from idle Cursor_RemoveFromIdle(cur); } } CursorList_Unlock(cl); return cur; } int Cursors_Purge(CursorList *cl, uint64_t cid) { CursorList_Lock(cl); CursorList_IncrCounter(cl); int rc; khiter_t iter = kh_get(cursors, cl->lookup, cid); if (iter != kh_end(cl->lookup)) { Cursor *cur = kh_value(cl->lookup, iter); if (Cursor_IsIdle(cur)) { Cursor_RemoveFromIdle(cur); } Cursor_FreeInternal(cur, iter); rc = REDISMODULE_OK; } else { rc = REDISMODULE_ERR; } CursorList_Unlock(cl); return rc; } int Cursor_Free(Cursor *cur) { return Cursors_Purge(cur->parent, cur->id); } void Cursors_RenderStats(CursorList *cl, const char *name, RedisModuleCtx *ctx) { CursorList_Lock(cl); CursorSpecInfo *info = findInfo(cl, name); size_t n = 0; /** Output total information */ RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); RedisModule_ReplyWithSimpleString(ctx, "global_idle"); RedisModule_ReplyWithLongLong(ctx, ARRAY_GETSIZE_AS(&cl->idle, Cursor **)); n += 2; RedisModule_ReplyWithSimpleString(ctx, "global_total"); RedisModule_ReplyWithLongLong(ctx, kh_size(cl->lookup)); n += 2; if (info) { RedisModule_ReplyWithSimpleString(ctx, "index_capacity"); RedisModule_ReplyWithLongLong(ctx, info->cap); n += 2; RedisModule_ReplyWithSimpleString(ctx, "index_total"); RedisModule_ReplyWithLongLong(ctx, info->used); n += 2; } RedisModule_ReplySetArrayLength(ctx, n); CursorList_Unlock(cl); } RediSearch-1.2.2/src/cursor.h000066400000000000000000000107041364126773500160220ustar00rootroot00000000000000#ifndef CURSOR_H #define CURSOR_H #include #include #include "aggregate/aggregate.h" #include "util/khash.h" #include "util/array.h" #include "search_ctx.h" typedef struct { const char *keyName; /** Name of the key that refers to the spec */ size_t cap; /** Maximum number of cursors for the spec */ size_t used; /** Number of cursors currently open */ } CursorSpecInfo; struct CursorList; typedef struct Cursor { /** * Link to info on parent. This is used to increment/decrement the count, * and also to reopen the spec */ CursorSpecInfo *specInfo; /** Parent - used for deletion, etc */ struct CursorList *parent; /** Search ctx */ RedisSearchCtx *sctx; /** Execution state. Opaque to the cursor - managed by consumer */ void *execState; /** Time when this cursor will no longer be valid, in nanos */ uint64_t nextTimeoutNs; /** ID of this cursor */ uint64_t id; /** Initial timeout interval */ unsigned timeoutIntervalMs; /** Position within idle list */ int pos; } Cursor; KHASH_MAP_INIT_INT64(cursors, Cursor *); /** * Cursor list. This is the global cursor list and does not distinguish * between different specs. */ typedef struct CursorList { /** Cursor lookup by ID */ khash_t(cursors) * lookup; /** List of spec infos; we just iterate over this */ CursorSpecInfo **specs; size_t specsCount; /** List of idle cursors */ Array idle; pthread_mutex_t lock; /** * Counter - this serves two purposes: * 1) When counter % n == 0, a GC sweep is performed * 2) Used to calculate a monotonically incrementing cursor ID. */ uint32_t counter; /** * Last time GC was performed. */ uint64_t lastCollect; /** * Next timeout - set to the lowest entry. * This is used as a hint to avoid excessive sweeps. */ uint64_t nextIdleTimeoutNs; } CursorList; // This resides in the background as a global. We could in theory make this // part of the spec structure extern CursorList RSCursors; /** * Threading/Concurrency behavior * * Any manipulation of the cursor list happens with the GIL locked. Sequence * is as follows: * * (1) New cursor is allocated -- happens from main thread. New cursor is * allocated and is passed to query execution thread. The cursor is not * placed inside the cursor list yet, but the total count is incremented * * (2) If the cursor has results, the GIL is locked and the cursor is placed * inside the idle list. * * (3) When the cursor is subsequently accessed, it is again removed from the * idle list. * * (4) When the cursor is finally exhausted (or removed), it is removed from * the idle list and freed. * * In essence, whenever the cursor is accessed by any internal API (i.e. not * a network API) it becomes invisible to the cursor subsystem, so there is * never any worry that the cursor is accessed from different threads, or * that a client might accidentally refer to the same cursor twice. */ /** * Initialize the cursor list */ void CursorList_Init(CursorList *cl); #define RSCURSORS_DEFAULT_CAPACITY 128 #define RSCURSORS_SWEEP_INTERVAL 500 /* GC Every 500 requests */ #define RSCURSORS_SWEEP_THROTTLE (1 * (1000000000)) /* Throttle, in NS */ /** * Add an index spec to the cursor list. This has the effect of adding the * spec (via its key) along with its capacity */ void CursorList_AddSpec(CursorList *cl, const char *k, size_t capacity); /** * Reserve a cursor for use with a given query. * Returns NULL if the index does not exist or if there are too many * cursors currently in use. * * Timeout is the max idle timeout (activated at each call to Pause()) in * milliseconds. */ Cursor *Cursors_Reserve(CursorList *cl, RedisSearchCtx *sctx, const char *lookupName, unsigned timeout, char **err); /** * Retrieve a cursor for execution. This locates the cursor, removes it * from the idle list, and returns it */ Cursor *Cursors_TakeForExecution(CursorList *cl, uint64_t cid); /** * Pause a cursor, setting it to idle and placing it back in the cursor * list */ int Cursor_Pause(Cursor *cur); /** * Free a given cursor. This should be called on an already-obtained cursor */ int Cursor_Free(Cursor *cl); /** * Locate and free the cursor with the given ID */ int Cursors_Purge(CursorList *cl, uint64_t cid); int Cursors_CollectIdle(CursorList *cl); void Cursors_RenderStats(CursorList *cl, const char *key, RedisModuleCtx *ctx); #endifRediSearch-1.2.2/src/debug_commads.c000066400000000000000000000130001364126773500172610ustar00rootroot00000000000000#include "debug_commads.h" #include "inverted_index.h" #include "index.h" #include "redis_index.h" #include "tag_index.h" #include "numeric_index.h" static void ReplyReaderResults(IndexReader *reader, RedisModuleCtx *ctx) { IndexIterator *iter = NewReadIterator(reader); RSIndexResult *r; size_t resultSize = 0; RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); while (iter->Read(iter->ctx, &r) != INDEXREAD_EOF) { RedisModule_ReplyWithLongLong(ctx, r->docId); ++resultSize; } RedisModule_ReplySetArrayLength(ctx, resultSize); ReadIterator_Free(iter); } static void DumpInvertedIndex(RedisSearchCtx *sctx, RedisModuleString *invidxName) { RedisModuleKey *keyp = NULL; size_t len; const char *invIdxName = RedisModule_StringPtrLen(invidxName, &len); InvertedIndex *invidx = Redis_OpenInvertedIndexEx(sctx, invIdxName, len, 0, &keyp); if (!invidx) { RedisModule_ReplyWithError(sctx->redisCtx, "Can not find the inverted index"); goto end; } IndexReader *reader = NewTermIndexReader(invidx, NULL, RS_FIELDMASK_ALL, NULL, 1); ReplyReaderResults(reader, sctx->redisCtx); end: if (keyp) { RedisModule_CloseKey(keyp); } } static RedisModuleString *getFieldKeyName(IndexSpec *spec, RedisModuleString *fieldNameRS) { const char *fieldName = RedisModule_StringPtrLen(fieldNameRS, NULL); FieldSpec *fieldSpec = IndexSpec_GetField(spec, fieldName, strlen(fieldName)); if (!fieldSpec) { return NULL; } return IndexSpec_GetFormattedKey(spec, fieldSpec); } static void IdToDocId(RedisSearchCtx *sctx, RedisModuleString *strId) { long long id; if(RedisModule_StringToLongLong(strId, &id) != REDISMODULE_OK){ RedisModule_ReplyWithError(sctx->redisCtx, "bad id given"); return; } RSDocumentMetadata *doc = DocTable_Get(&sctx->spec->docs, id); if(!doc || (doc->flags & Document_Deleted)){ RedisModule_ReplyWithError(sctx->redisCtx, "document was removed"); }else{ RedisModule_ReplyWithStringBuffer(sctx->redisCtx, doc->keyPtr, strlen(doc->keyPtr)); } } static void DocIdToId(RedisSearchCtx *sctx, RedisModuleString *strDocId) { RSDocumentKey docId = MakeDocKeyR(strDocId); t_docId id = DocTable_GetId(&sctx->spec->docs, docId); RedisModule_ReplyWithLongLong(sctx->redisCtx, id); } static void DumpTagIndex(RedisSearchCtx *sctx, RedisModuleString *fieldNameRS) { RedisModuleKey *keyp = NULL; RedisModuleString *keyName = getFieldKeyName(sctx->spec, fieldNameRS); if (!keyName) { RedisModule_ReplyWithError(sctx->redisCtx, "Could not find given field in index spec"); goto end; } TagIndex *tagIndex = TagIndex_Open(sctx->redisCtx, keyName, false, &keyp); if (!tagIndex) { RedisModule_ReplyWithError(sctx->redisCtx, "can not open tag field"); goto end; } TrieMapIterator *iter = TrieMap_Iterate(tagIndex->values, "", 0); char *tag; tm_len_t len; InvertedIndex *iv; size_t resultSize = 0; RedisModule_ReplyWithArray(sctx->redisCtx, REDISMODULE_POSTPONED_ARRAY_LEN); while (TrieMapIterator_Next(iter, &tag, &len, (void **)&iv)) { RedisModule_ReplyWithArray(sctx->redisCtx, 2); RedisModule_ReplyWithStringBuffer(sctx->redisCtx, tag, len); IndexReader *reader = NewTermIndexReader(iv, NULL, RS_FIELDMASK_ALL, NULL, 1); ReplyReaderResults(reader, sctx->redisCtx); ++resultSize; } RedisModule_ReplySetArrayLength(sctx->redisCtx, resultSize); TrieMapIterator_Free(iter); end: if (keyp) { RedisModule_CloseKey(keyp); } } static void DumpNumericIndex(RedisSearchCtx *sctx, RedisModuleString *fieldNameRS) { RedisModuleKey *keyp = NULL; RedisModuleString *keyName = getFieldKeyName(sctx->spec, fieldNameRS); if (!keyName) { RedisModule_ReplyWithError(sctx->redisCtx, "Could not find given field in index spec"); goto end; } NumericRangeTree *rt = OpenNumericIndex(sctx, keyName, &keyp); if (!rt) { RedisModule_ReplyWithError(sctx->redisCtx, "can not open numeric field"); goto end; } NumericRangeNode *currNode; NumericRangeTreeIterator *iter = NumericRangeTreeIterator_New(rt); size_t resultSize = 0; RedisModule_ReplyWithArray(sctx->redisCtx, REDISMODULE_POSTPONED_ARRAY_LEN); while ((currNode = NumericRangeTreeIterator_Next(iter))) { if (currNode->range) { IndexReader *reader = NewNumericReader(currNode->range->entries, NULL); ReplyReaderResults(reader, sctx->redisCtx); ++resultSize; } } RedisModule_ReplySetArrayLength(sctx->redisCtx, resultSize); NumericRangeTreeIterator_Free(iter); end: if (keyp) { RedisModule_CloseKey(keyp); } } int DebugCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc != 4) return RedisModule_WrongArity(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[2], NULL), 0); if (!sp) { RedisModule_ReplyWithError(ctx, "Unknown index name"); return REDISMODULE_OK; } RedisSearchCtx sctx = {NULL}; sctx.redisCtx = ctx; sctx.spec = sp; const char *subCommand = RedisModule_StringPtrLen(argv[1], NULL); if (strcmp(subCommand, DUMP_INVIDX_COMMAND) == 0) { DumpInvertedIndex(&sctx, argv[3]); } else if (strcmp(subCommand, DUMP_NUMIDX_COMMAND) == 0) { DumpNumericIndex(&sctx, argv[3]); } else if (strcmp(subCommand, DUMP_TAGIDX_COMMAND) == 0) { DumpTagIndex(&sctx, argv[3]); } else if (strcmp(subCommand, IDTODOCID_COMMAND) == 0) { IdToDocId(&sctx, argv[3]); } else if (strcmp(subCommand, DOCIDTOID_COMMAND) == 0) { DocIdToId(&sctx, argv[3]); } else { RedisModule_ReplyWithError(ctx, "no such subcommand"); } return REDISMODULE_OK; } RediSearch-1.2.2/src/debug_commads.h000066400000000000000000000014371364126773500173010ustar00rootroot00000000000000/* * debug_commads.h * * Created on: Jun 27, 2018 * Author: meir */ #ifndef SRC_DEBUG_COMMADS_H_ #define SRC_DEBUG_COMMADS_H_ #include "redismodule.h" #include "index_iterator.h" #include #define DUMP_INVIDX_COMMAND "DUMP_INVIDX" #define DUMP_NUMIDX_COMMAND "DUMP_NUMIDX" #define DUMP_TAGIDX_COMMAND "DUMP_TAGIDX" #define IDTODOCID_COMMAND "IDTODOCID" #define DOCIDTOID_COMMAND "DOCIDTOID" /** * debug command implementation * Currently three sub-commands available * 1. DUMP_INVIDX - which dump all doc ids in an inverted index * 2. DUMP_NUMIDX - which dump all doc ids in a numeric index * 3. DUMP_TAGIDX - which dump all doc ids in a tag index * */ int DebugCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc); #endif /* SRC_DEBUG_COMMADS_H_ */ RediSearch-1.2.2/src/dep/000077500000000000000000000000001364126773500151025ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/LICENSE000066400000000000000000000022401364126773500161050ustar00rootroot00000000000000Copyright 2013-2014 RAD Game Tools and Valve Software Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. RediSearch-1.2.2/src/dep/bloom/000077500000000000000000000000001364126773500162125ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/bloom/Makefile000066400000000000000000000001121364126773500176440ustar00rootroot00000000000000all: libbloom.a libbloom.a: sb.o contrib/MurmurHash2.o $(AR) -rcs $@ $^ RediSearch-1.2.2/src/dep/bloom/README.md000066400000000000000000000001241364126773500174660ustar00rootroot00000000000000This code is adopted from the [Rebloom](https://github.com/goodform/rebloom) module RediSearch-1.2.2/src/dep/bloom/contrib/000077500000000000000000000000001364126773500176525ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/bloom/contrib/MurmurHash2.c000066400000000000000000000025001364126773500221700ustar00rootroot00000000000000//----------------------------------------------------------------------------- // MurmurHash2, by Austin Appleby // Note - This code makes a few assumptions about how your machine behaves - // 1. We can read a 4-byte value from any address without crashing // 2. sizeof(int) == 4 // And it has a few limitations - // 1. It will not work incrementally. // 2. It will not produce the same results on little-endian and big-endian // machines. unsigned int murmurhash2(const void * key, int len, const unsigned int seed) { // 'm' and 'r' are mixing constants generated offline. // They're not really 'magic', they just happen to work well. const unsigned int m = 0x5bd1e995; const int r = 24; // Initialize the hash to a 'random' value unsigned int h = seed ^ len; // Mix 4 bytes at a time into the hash const unsigned char * data = (const unsigned char *)key; while(len >= 4) { unsigned int k = *(unsigned int *)data; k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; data += 4; len -= 4; } // Handle the last few bytes of the input array switch(len) { case 3: h ^= data[2] << 16; case 2: h ^= data[1] << 8; case 1: h ^= data[0]; h *= m; }; // Do a few final mixes of the hash to ensure the last few // bytes are well-incorporated. h ^= h >> 13; h *= m; h ^= h >> 15; return h; } RediSearch-1.2.2/src/dep/bloom/contrib/bloom.c000066400000000000000000000157761364126773500211460ustar00rootroot00000000000000/* * Copyright (c) 2012-2017, Jyri J. Virkki * All rights reserved. * * This file is under BSD license. See LICENSE file. */ /* * Refer to bloom.h for documentation on the public interfaces. */ #include #include #include #include #include #include #include #include #include #include #include "bloom.h" #include "murmurhash2.h" #define MAKESTRING(n) STRING(n) #define STRING(n) #n #ifndef BLOOM_CALLOC #define BLOOM_CALLOC calloc #define BLOOM_FREE free #endif #define MODE_READ 0 #define MODE_WRITE 1 inline static int test_bit_set_bit(unsigned char *buf, unsigned int x, int mode) { unsigned int byte = x >> 3; unsigned char c = buf[byte]; // expensive memory access unsigned int mask = 1 << (x % 8); if (c & mask) { return 1; } else { if (mode == MODE_WRITE) { buf[byte] = c | mask; } return 0; } } bloom_hashval bloom_calc_hash(const void *buffer, int len) { bloom_hashval rv; rv.a = murmurhash2(buffer, len, 0x9747b28c); rv.b = murmurhash2(buffer, len, rv.a); return rv; } // This function is defined as a macro because newer filters use a power of two // for bit count, which is must faster to calculate. Older bloom filters don't // use powers of two, so they are slower. Rather than calculating this inside // the function itself, we provide two variants for this. The calling layer // already knows which variant to call. // // modExp is the expression which will evaluate to the number of bits in the // filter. #define CHECK_ADD_FUNC(T, modExp) \ register unsigned int i; \ int found_unset = 0; \ const register T mod = modExp; \ for (i = 0; i < bloom->hashes; i++) { \ T x = ((hashval.a + i * hashval.b)) % mod; \ if (!test_bit_set_bit(bloom->bf, x, mode)) { \ if (mode == MODE_READ) { \ return 0; \ } \ found_unset = 1; \ } \ } \ if (mode == MODE_READ) { \ return 1; \ } \ return found_unset; static int bloom_check_add32(struct bloom *bloom, bloom_hashval hashval, int mode) { CHECK_ADD_FUNC(uint32_t, (1 << bloom->n2)); } static int bloom_check_add64(struct bloom *bloom, bloom_hashval hashval, int mode) { CHECK_ADD_FUNC(uint64_t, (1LLU << bloom->n2)); } // This function is used for older bloom filters whose bit count was not // 1 << X. This function is a bit slower, and isn't exposed in the API // directly because it's deprecated static int bloom_check_add_compat(struct bloom *bloom, bloom_hashval hashval, int mode) { CHECK_ADD_FUNC(uint64_t, bloom->bits) } static double calc_bpe(double error) { static const double denom = 0.480453013918201; // ln(2)^2 double num = log(error); double bpe = -(num / denom); if (bpe < 0) { bpe = -bpe; } return bpe; } size_t bloom_cap_for(double error, size_t maxbytes) { double bpe = calc_bpe(error); bpe *= maxbytes; return bpe / 8; } int bloom_init(struct bloom *bloom, unsigned entries, double error, unsigned options) { if (entries < 1 || error <= 0 || error > 1.0) { return 1; } bloom->error = error; bloom->bits = 0; bloom->entries = entries; bloom->bpe = calc_bpe(error); double dentries = (double)entries; uint64_t bits; if (options & BLOOM_OPT_ENTS_IS_BITS) { // Size is determined by the number of bits if (entries == 0 || entries > 64) { return 1; } bloom->n2 = entries; bits = 1LLU << bloom->n2; dentries = entries = bloom->entries = bits / bloom->bpe; } else if (options & BLOOM_OPT_NOROUND) { // Don't perform any rounding. Conserve memory instead bits = bloom->bits = (uint64_t)(dentries * bloom->bpe); bloom->n2 = 0; } else { double bn2 = logb(dentries * bloom->bpe); if (bn2 > 63 || bn2 == INFINITY) { return 1; } bloom->n2 = bn2 + 1; bits = 1LLU << bloom->n2; // Determine the number of extra bits available for more items. We rounded // up the number of bits to the next-highest power of two. This means we // might have up to 2x the bits available to us. size_t bitDiff = bits - (dentries * bloom->bpe); // The number of additional items we can store is the extra number of bits // divided by bits-per-element size_t itemDiff = bitDiff / bloom->bpe; bloom->entries += itemDiff; } if (bits % 8) { bloom->bytes = (bits / 8) + 1; } else { bloom->bytes = bits / 8; } bloom->hashes = (int)ceil(0.693147180559945 * bloom->bpe); // ln(2) bloom->bf = (unsigned char *)BLOOM_CALLOC(bloom->bytes, sizeof(unsigned char)); if (bloom->bf == NULL) { return 1; } return 0; } int bloom_check_h(const struct bloom *bloom, bloom_hashval hash) { if (bloom->n2 > 31) { return bloom_check_add64((void *)bloom, hash, MODE_READ); } else if (bloom->n2 > 0) { return bloom_check_add32((void *)bloom, hash, MODE_READ); } else { return bloom_check_add_compat((void *)bloom, hash, MODE_READ); } } int bloom_check(const struct bloom *bloom, const void *buffer, int len) { return bloom_check_h(bloom, bloom_calc_hash(buffer, len)); } int bloom_add_h(struct bloom *bloom, bloom_hashval hash) { if (bloom->n2 > 31) { return !bloom_check_add64(bloom, hash, MODE_WRITE); } else if (bloom->n2) { return !bloom_check_add32(bloom, hash, MODE_WRITE); } else { return !bloom_check_add_compat(bloom, hash, MODE_WRITE); } } int bloom_add(struct bloom *bloom, const void *buffer, int len) { return bloom_add_h(bloom, bloom_calc_hash(buffer, len)); } void bloom_free(struct bloom *bloom) { BLOOM_FREE(bloom->bf); } const char *bloom_version() { return MAKESTRING(BLOOM_VERSION); } RediSearch-1.2.2/src/dep/bloom/contrib/bloom.h000066400000000000000000000111711364126773500211340ustar00rootroot00000000000000/* * Copyright (c) 2012-2017, Jyri J. Virkki * All rights reserved. * * This file is under BSD license. See LICENSE file. */ #ifndef _BLOOM_H #define _BLOOM_H #include #include #ifdef __cplusplus extern "C" { #endif /** *************************************************************************** * Structure to keep track of one bloom filter. Caller needs to * allocate this and pass it to the functions below. First call for * every struct must be to bloom_init(). * */ struct bloom { uint32_t hashes; uint8_t n2; uint32_t entries; double error; double bpe; unsigned char *bf; size_t bytes; uint32_t bits; }; /** *************************************************************************** * Initialize the bloom filter for use. * * The filter is initialized with a bit field and number of hash functions * according to the computations from the wikipedia entry: * http://en.wikipedia.org/wiki/Bloom_filter * * Optimal number of bits is: * bits = (entries * ln(error)) / ln(2)^2 * * Optimal number of hash functions is: * hashes = bpe * ln(2) * * Parameters: * ----------- * bloom - Pointer to an allocated struct bloom (see above). * entries - The expected number of entries which will be inserted. * Must be at least 1000 (in practice, likely much larger). * error - Probability of collision (as long as entries are not * exceeded). * * Return: * ------- * 0 - on success * 1 - on failure * */ // Do not round bit size to nearest power of 2. Instead, estimate bits // accurately. #define BLOOM_OPT_NOROUND 1 // Entries is actually the number of bits, not the number of entries to reserve #define BLOOM_OPT_ENTS_IS_BITS 2 // Given the error rate and maximum filter size, return the maximum number of elements // that are expected to fit in the filter size_t bloom_cap_for(double error, size_t maxbytes); int bloom_init(struct bloom *bloom, unsigned entries, double error, unsigned options); /** *************************************************************************** * Deprecated, use bloom_init() * */ int bloom_init_size(struct bloom *bloom, int entries, double error, unsigned int cache_size); typedef struct { unsigned int a; unsigned int b; } bloom_hashval; bloom_hashval bloom_calc_hash(const void *buffer, int len); /** *************************************************************************** * Check if the given element is in the bloom filter. Remember this may * return false positive if a collision occured. * * Parameters: * ----------- * bloom - Pointer to an allocated struct bloom (see above). * buffer - Pointer to buffer containing element to check. * len - Size of 'buffer'. * * Return: * ------- * 0 - element is not present * 1 - element is present (or false positive due to collision) * -1 - bloom not initialized * */ int bloom_check_h(const struct bloom *bloom, bloom_hashval hash); int bloom_check(const struct bloom *bloom, const void *buffer, int len); /** *************************************************************************** * Add the given element to the bloom filter. * The return code indicates if the element (or a collision) was already in, * so for the common check+add use case, no need to call check separately. * * Parameters: * ----------- * bloom - Pointer to an allocated struct bloom (see above). * buffer - Pointer to buffer containing element to add. * len - Size of 'buffer'. * * Return: * ------- * 0 - element was not present and was added * 1 - element (or a collision) had already been added previously * -1 - bloom not initialized * */ int bloom_add_h(struct bloom *bloom, bloom_hashval hash); int bloom_add(struct bloom *bloom, const void *buffer, int len); /** *************************************************************************** * Print (to stdout) info about this bloom filter. Debugging aid. * */ void bloom_print(struct bloom *bloom); /** *************************************************************************** * Deallocate internal storage. * * Upon return, the bloom struct is no longer usable. You may call bloom_init * again on the same struct to reinitialize it again. * * Parameters: * ----------- * bloom - Pointer to an allocated struct bloom (see above). * * Return: none * */ void bloom_free(struct bloom *bloom); /** *************************************************************************** * Returns version string compiled into library. * * Return: version string * */ const char *bloom_version(); #ifdef __cplusplus } #endif #endif RediSearch-1.2.2/src/dep/bloom/contrib/murmurhash2.h000066400000000000000000000002161364126773500222770ustar00rootroot00000000000000 #ifndef _BLOOM_MURMURHASH2 #define _BLOOM_MURMURHASH2 unsigned int murmurhash2(const void * key, int len, const unsigned int seed); #endif RediSearch-1.2.2/src/dep/bloom/sb.c000066400000000000000000000170351364126773500167700ustar00rootroot00000000000000#include "sb.h" #include "redismodule.h" #define BLOOM_CALLOC RedisModule_Calloc #define BLOOM_FREE RedisModule_Free #include "contrib/bloom.c" #include //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Core /// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #define ERROR_TIGHTENING_RATIO 0.5 #define CUR_FILTER(sb) ((sb)->filters + ((sb)->nfilters - 1)) static int SBChain_AddLink(SBChain *chain, size_t size, double error_rate) { if (!chain->filters) { chain->filters = RedisModule_Calloc(1, sizeof(*chain->filters)); } else { chain->filters = RedisModule_Realloc(chain->filters, sizeof(*chain->filters) * (chain->nfilters + 1)); } SBLink *newlink = chain->filters + chain->nfilters; newlink->size = 0; chain->nfilters++; unsigned options = chain->options; return bloom_init(&newlink->inner, size, error_rate, options); } void SBChain_Free(SBChain *sb) { for (size_t ii = 0; ii < sb->nfilters; ++ii) { bloom_free(&sb->filters[ii].inner); } RedisModule_Free(sb->filters); RedisModule_Free(sb); } static int SBChain_AddToLink(SBLink *lb, bloom_hashval hash) { if (!bloom_add_h(&lb->inner, hash)) { // Element not previously present? lb->size++; return 1; } else { return 0; } } int SBChain_Add(SBChain *sb, const void *data, size_t len) { // Does it already exist? bloom_hashval h = bloom_calc_hash(data, len); for (int ii = sb->nfilters - 1; ii >= 0; --ii) { if (bloom_check_h(&sb->filters[ii].inner, h)) { return 0; } } // Determine if we need to add more items? SBLink *cur = CUR_FILTER(sb); if (cur->size >= cur->inner.entries) { double error = cur->inner.error * pow(ERROR_TIGHTENING_RATIO, sb->nfilters + 1); if (SBChain_AddLink(sb, cur->inner.entries * 2, error) != 0) { return -1; } cur = CUR_FILTER(sb); } int rv = SBChain_AddToLink(cur, h); if (rv) { sb->size++; } return rv; } int SBChain_Check(const SBChain *sb, const void *data, size_t len) { bloom_hashval hv = bloom_calc_hash(data, len); for (int ii = sb->nfilters - 1; ii >= 0; --ii) { if (bloom_check_h(&sb->filters[ii].inner, hv)) { return 1; } } return 0; } SBChain *SB_NewChain(size_t initsize, double error_rate, unsigned options) { if (initsize == 0 || error_rate == 0) { return NULL; } SBChain *sb = RedisModule_Calloc(1, sizeof(*sb)); sb->options = options; if (SBChain_AddLink(sb, initsize, error_rate) != 0) { SBChain_Free(sb); sb = NULL; } return sb; } typedef struct __attribute__((packed)) { uint64_t bytes; uint64_t bits; uint64_t size; double error; double bpe; uint32_t hashes; uint32_t entries; uint8_t n2; } dumpedChainLink; // X-Macro uses to convert between encoded and decoded SBLink #define X_ENCODED_LINK(X, enc, link) \ X((enc)->bytes, (link)->inner.bytes) \ X((enc)->bits, (link)->inner.bits) \ X((enc)->size, (link)->size) \ X((enc)->error, (link)->inner.error) \ X((enc)->hashes, (link)->inner.hashes) \ X((enc)->bpe, (link)->inner.bpe) \ X((enc)->entries, (link)->inner.entries) \ X((enc)->n2, (link)->inner.n2) typedef struct __attribute__((packed)) { uint64_t size; uint32_t nfilters; uint32_t options; dumpedChainLink links[0]; } dumpedChainHeader; static SBLink *getLinkPos(const SBChain *sb, long long curIter, size_t *offset) { // printf("Requested %lld\n", curIter); curIter--; SBLink *link = NULL; // Read iterator size_t seekPos = 0; for (size_t ii = 0; ii < sb->nfilters; ++ii) { if (seekPos + sb->filters[ii].inner.bytes > curIter) { link = sb->filters + ii; break; } else { seekPos += sb->filters[ii].inner.bytes; } } if (!link) { return NULL; } curIter -= seekPos; *offset = curIter; return link; } const char *SBChain_GetEncodedChunk(const SBChain *sb, long long *curIter, size_t *len, size_t maxChunkSize) { // See into the offset. size_t offset = 0; SBLink *link = getLinkPos(sb, *curIter, &offset); if (!link) { *curIter = 0; return NULL; } *len = maxChunkSize; size_t linkRemaining = link->inner.bytes - offset; if (linkRemaining < *len) { *len = linkRemaining; } *curIter += *len; // printf("Returning offset=%lu\n", offset); return (const char *)(link->inner.bf + offset); } char *SBChain_GetEncodedHeader(const SBChain *sb, size_t *hdrlen) { *hdrlen = sizeof(dumpedChainHeader) + (sizeof(dumpedChainLink) * sb->nfilters); dumpedChainHeader *hdr = malloc(*hdrlen); hdr->size = sb->size; hdr->nfilters = sb->nfilters; hdr->options = sb->options; for (size_t ii = 0; ii < sb->nfilters; ++ii) { dumpedChainLink *dstlink = &hdr->links[ii]; SBLink *srclink = sb->filters + ii; #define X(encfld, srcfld) encfld = srcfld; X_ENCODED_LINK(X, dstlink, srclink) #undef X } return (char *)hdr; } void SB_FreeEncodedHeader(char *s) { free(s); } SBChain *SB_NewChainFromHeader(const char *buf, size_t bufLen, const char **errmsg) { const dumpedChainHeader *header = (const void *)buf; if (bufLen < sizeof(dumpedChainHeader)) { *errmsg = "ERR received bad data"; return NULL; } if (bufLen != sizeof(*header) + (sizeof(header->links[0]) * header->nfilters)) { *errmsg = "ERR received bad data"; return NULL; } SBChain *sb = RedisModule_Calloc(1, sizeof(*sb)); sb->filters = RedisModule_Calloc(header->nfilters, sizeof(*sb->filters)); sb->nfilters = header->nfilters; sb->options = header->options; sb->size = header->size; for (size_t ii = 0; ii < header->nfilters; ++ii) { SBLink *dstlink = sb->filters + ii; const dumpedChainLink *srclink = header->links + ii; #define X(encfld, dstfld) dstfld = encfld; X_ENCODED_LINK(X, srclink, dstlink) #undef X dstlink->inner.bf = RedisModule_Alloc(dstlink->inner.bytes); } return sb; } int SBChain_LoadEncodedChunk(SBChain *sb, long long iter, const char *buf, size_t bufLen, const char **errmsg) { // Load the chunk size_t offset; iter -= bufLen; SBLink *link = getLinkPos(sb, iter, &offset); if (!link) { *errmsg = "ERR invalid offset - no link found"; return -1; } if (bufLen > link->inner.bytes - offset) { *errmsg = "ERR invalid chunk - Too big for current filter"; return -1; } // printf("Copying to %p. Offset=%lu, Len=%lu\n", link, offset, bufLen); memcpy(link->inner.bf + offset, buf, bufLen); return 0; }RediSearch-1.2.2/src/dep/bloom/sb.h000066400000000000000000000066401364126773500167750ustar00rootroot00000000000000#ifndef REBLOOM_H #define REBLOOM_H #include "contrib/bloom.h" #include #ifdef __cplusplus extern "C" { #endif /** Single link inside a scalable bloom filter */ typedef struct SBLink { struct bloom inner; //< Inner structure size_t size; // < Number of items in the link } SBLink; /** A chain of one or more bloom filters */ typedef struct SBChain { SBLink *filters; //< Current filter size_t size; //< Total number of items in all filters size_t nfilters; //< Number of links in chain unsigned options; //< Options passed directly to bloom_init } SBChain; /** * Create a new chain * initsize: The initial desired capacity of the chain * error_rate: desired maximum error probability. * options: Options passed to bloom_init. * * Free with SBChain_Free when done. */ SBChain *SB_NewChain(size_t initsize, double error_rate, unsigned options); /** * Create a new chain from a 'template'. This template will copy an existing * chain, but not its internal data - which is reset from scratch. This is * used when 'migrating' filters */ SBChain *SB_NewChainFromTemplate(const SBChain *template); /** Free a created chain */ void SBChain_Free(SBChain *sb); /** * Add an item to the chain * Returns 0 if newly added, nonzero if new. */ int SBChain_Add(SBChain *sb, const void *data, size_t len); /** * Check if an item was previously seen by the chain * Return 0 if the item is unknown to the chain, nonzero otherwise */ int SBChain_Check(const SBChain *sb, const void *data, size_t len); /** * Get an encoded header. This is the first step to serializing a bloom filter. * The length of the header will be written to in hdrlen. * * The chunk should be freed with SB_FreeEncodedHeader. */ char *SBChain_GetEncodedHeader(const SBChain *sb, size_t *hdrlen); void SB_FreeEncodedHeader(char *s); #define SB_CHUNKITER_INIT 1 #define SB_CHUNKITER_DONE 0 /** * Get an encoded filter chunk. This filter should be called in a loop until it * returns NULL. It will return incremental chunks based on the value of `curIter`. * * Prior to calling this function, the target of curIter should be initialized to * SB_CHUNKITER_INIT. Once there are no more chunks left to serialize, NULL will * be returned and curIter will be set to SB_CHUNKITER_DONE. * * The `len` pointer indicates the length of the returned buffer. * maxChunkSize indicates the largest chunk size to be returned, ensuring that * len <= maxChunkSize. */ const char *SBChain_GetEncodedChunk(const SBChain *sb, long long *curIter, size_t *len, size_t maxChunkSize); /** * Creates a new chain from the encoded parameters returned by SBChain_GetEncodedHeader. * This function will return NULL if the header is corrupt or in a format not understood * by this version of rebloom. In this case, the description is found in the * errmsg pointer. */ SBChain *SB_NewChainFromHeader(const char *buf, size_t bufLen, const char **errmsg); /** * Incrementally load the bloom filter with chunks returned from GetEncodedChunk. * This function returns 0 on success, and nonzero on failure - in which case errmsg * is populated. * * The (iter,buf,bufLen) arguments are equivalent to the returned values in the * GetEncodedChunk function. */ int SBChain_LoadEncodedChunk(SBChain *sb, long long iter, const char *buf, size_t bufLen, const char **errmsg); #ifdef __cplusplus } #endif #endifRediSearch-1.2.2/src/dep/cndict/000077500000000000000000000000001364126773500163465ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/cndict/.gitignore000066400000000000000000000000371364126773500203360ustar00rootroot00000000000000!**/*.ini !**/*.lex !**/*.json RediSearch-1.2.2/src/dep/cndict/Makefile000066400000000000000000000003011364126773500200000ustar00rootroot00000000000000FRISO_INI := friso.ini FRISO_LEXDIR := lex PYTHON := python cndict_data.c: bundle_friso.py $(PYTHON) bundle_friso.py -i $(FRISO_INI) -d $(FRISO_LEXDIR) -o . clean: rm -rf cndict_data.c RediSearch-1.2.2/src/dep/cndict/bundle_friso.py000077500000000000000000000232271364126773500214040ustar00rootroot00000000000000#!/usr/bin/env python """ This script gathers settings and dictionaries from friso (a chinese tokenization library) and generates a C source file that can later be compiled into RediSearch, allowing the module to have a built-in chinese dictionary. By default this script will generate a C source file of compressed data but there are other options to control output (mainly for debugging). The `read_friso` script can be used to analyze the dumped data for debugging purposes """ import zlib import errno import os import re import struct import sys import time import string from argparse import ArgumentParser # Load the ini file ap = ArgumentParser() ap.add_argument('-i', '--ini', default='friso/friso.ini', help='ini file to use for initialization') ap.add_argument('-m', '--mode', default='c', help='output mode', choices=['c', 'raw_z', 'raw_u']) ap.add_argument('-d', '--dir', default='.', help='Override directory of lex files') ap.add_argument('-o', '--out', help='Name of destination directory', default='cndict_generated') opts = ap.parse_args() lexdir = opts.dir DICT_VARNAME = 'ChineseDict' SIZE_COMP_VARNAME = 'ChineseDictCompressedLength' SIZE_FULL_VARNME = 'ChineseDictFullLength' class ConfigEntry(object): def __init__(self, srcname, dstname, pytype): self.srcname = srcname self.dstname = dstname self.pytype = pytype self.value = None configs = [ ConfigEntry('max_len', 'max_len', int), ConfigEntry('r_name', 'r_name', int), ConfigEntry('mix_len', 'mix_len', int), ConfigEntry('lna_len', 'lna_len', int), ConfigEntry('add_syn', 'add_syn', int), ConfigEntry('clr_stw', 'clr_stw', int), ConfigEntry('keep_urec', 'keep_urec', int), ConfigEntry('spx_out', 'spx_out', int), ConfigEntry('nthreshold', 'nthreshold', int), ConfigEntry('mode', 'mode', int), ConfigEntry('charset', 'charset', int), ConfigEntry('en_sseg', 'en_sseg', int), ConfigEntry('st_minl', 'st_minl', int), ConfigEntry('kpuncs', 'kpuncs', str) ] def write_config_init(varname, configs): ret = [] for config in configs: if config.value is None: continue if config.srcname == 'mode': ret.append('friso_set_mode({},{});'.format(varname, config.value)) elif config.dstname == 'kpuncs': ret.append('strcpy({}->kpuncs, "{}");'.format(varname, config.value)) elif config.dstname == 'charset': pass # Skip elif config.pytype == int: ret.append('{}->{} = {};'.format(varname, config.dstname, config.value)) else: raise ValueError("Don't understand config!", config) return ret def set_key_value(name, value): for config in configs: name = name.lower().replace("friso.", "").strip() # print name, config.srcname if config.srcname == name: config.value = config.pytype(value) return raise ValueError('Bad config key', name) with open(opts.ini, 'r') as fp: for line in fp: line = line.strip() if not line or line.startswith('#'): continue key, value = line.split('=') key = key.strip() value = value.strip() if key == 'friso.lex_dir': if not lexdir: lexdir = value else: set_key_value(key, value) # Parse the header snippet in order to emit the correct constant. _LEXTYPE_MAP_STRS = \ r''' __LEX_CJK_WORDS__ = 0, __LEX_CJK_UNITS__ = 1, __LEX_ECM_WORDS__ = 2, //english and chinese mixed words. __LEX_CEM_WORDS__ = 3, //chinese and english mixed words. __LEX_CN_LNAME__ = 4, __LEX_CN_SNAME__ = 5, __LEX_CN_DNAME1__ = 6, __LEX_CN_DNAME2__ = 7, __LEX_CN_LNA__ = 8, __LEX_STOPWORDS__ = 9, __LEX_ENPUN_WORDS__ = 10, __LEX_EN_WORDS__ = 11, __LEX_OTHER_WORDS__ = 15, __LEX_NCSYN_WORDS__ = 16, __LEX_PUNC_WORDS__ = 17, //punctuations __LEX_UNKNOW_WORDS__ = 18 //unrecognized words. ''' LEXTYPE_MAP = {} for m in re.findall('\s*(__[^=]*__)\s*=\s*([\d]*)', _LEXTYPE_MAP_STRS): LEXTYPE_MAP[m[0]] = int(m[1]) # Lex type currently occupies TYPE_MASK = 0x1F F_SYNS = 0x01 << 5 F_FREQS = 0x02 << 5 class LexBuffer(object): # Size of input buffer before flushing to a zlib block CHUNK_SIZE = 65536 VERSION = 0 def __init__(self, fp, use_compression=True): self._buf = bytearray() self._fp = fp self._compressor = zlib.compressobj(-1) self._use_compression = use_compression # Write the file header self._fp.write(struct.pack("!I", self.VERSION)) self._fp.flush() self.compressed_size = 0 self.full_size = 4 # For the 'version' byte def _write_data(self, data): self._fp.write(data) self.compressed_size += len(data) def flush(self, is_final=False): if not self._use_compression: self._write_data(self._buf) else: # Flush any outstanding data in the buffer self._write_data(self._compressor.compress(bytes(self._buf))) if is_final: self._write_data(self._compressor.flush(zlib.Z_FINISH)) self._fp.flush() self.full_size += len(self._buf) self._buf = bytearray() def _maybe_flush(self): if len(self._buf) > self.CHUNK_SIZE: self.flush() def add_entry(self, lextype, term, syns, freq): # Perform the encoding... header = LEXTYPE_MAP[lextype] if syns: header |= F_SYNS if freq: header |= F_FREQS self._buf.append(header) self._buf += term self._buf.append(0) # NUL terminator if syns: self._buf += struct.pack("!h", len(syns)) for syn in syns: self._buf += syn self._buf.append(0) if freq: self._buf += struct.pack("!I", freq) self._maybe_flush() def encode_pair(c): if c in string.hexdigits: return '\\x{0:x}'.format(ord(c)) elif c in ('"', '\\', '?'): return '\\' + c else: return repr('%c' % (c,))[1:-1] # return '\\x{0:x}'.format(ord(c)) if _needs_escape(c) else c class SourceEncoder(object): LINE_LEN = 40 def __init__(self, fp): self._fp = fp self._curlen = 0 def write(self, blob): blob = buffer(blob) while len(blob): chunk = buffer(blob, 0, self.LINE_LEN) blob = buffer(blob, len(chunk), len(blob)-len(chunk)) encoded = ''.join([encode_pair(c) for c in chunk]) self._fp.write('"' + encoded + '"\n') return len(blob) def flush(self): self._fp.flush() def close(self): pass def process_lex_entry(type, file, buf): print type, file fp = open(file, 'r') for line in fp: line = line.strip() comps = line.split('/') # print comps term = comps[0] syns = comps[1].split(',') if len(comps) > 1 else [] if len(syns) == 1 and syns[0].lower() == 'null': syns = [] freq = int(comps[2]) if len(comps) > 2 else 0 buf.add_entry(type, term, syns, freq) # print "Term:", term, "Syns:", syns, "Freq", freq # Now dump it, somehow def strip_comment_lines(blob): lines = [line.strip() for line in blob.split('\n')] lines = [line for line in lines if line and not line.startswith('#')] return lines def sanitize_file_entry(typestr, filestr): typestr = strip_comment_lines(typestr)[0] filestr = strip_comment_lines(filestr) filestr = [f.rstrip(';') for f in filestr] return typestr, filestr lexre = re.compile(r'([^:]+)\w*:\w*\[([^\]]*)\]', re.MULTILINE) lexindex = os.path.join(lexdir, 'friso.lex.ini') lexinfo = open(lexindex, 'r').read() matches = lexre.findall(lexinfo) # print matches dstdir = opts.out if opts.mode == 'c': dstfile = 'cndict_data.c' else: dstfile = 'cndict_data.out' try: os.makedirs(dstdir) except OSError as e: if e.errno != errno.EEXIST: raise dstfile = os.path.join(dstdir, dstfile) ofp = open(dstfile, 'w') if opts.mode == 'c': ofp.write(r''' // Compressed chinese dictionary // Generated by {} // at {} #include "dep/friso/friso.h" #include #include const char {}[] = '''.format(' '.join(sys.argv), time.ctime(), DICT_VARNAME)) ofp.flush() lexout = SourceEncoder(ofp) lexbuf = LexBuffer(lexout) for m in matches: typestr, filestr = sanitize_file_entry(m[0], m[1]) # print typestr # print filestr for filename in filestr: filename = os.path.join(os.path.dirname(lexindex), filename) process_lex_entry(typestr, filename, lexbuf) lexbuf.flush(is_final=True) ofp.write(';\n') ofp.write('const size_t {} = {};\n'.format(SIZE_COMP_VARNAME, lexbuf.compressed_size)) ofp.write('const size_t {} = {};\n'.format(SIZE_FULL_VARNME, lexbuf.full_size)) config_lines = write_config_init('frisoConfig', configs) config_fn = '\n'.join(config_lines) friso_config_txt = ''' void ChineseDictConfigure(friso_t friso, friso_config_t frisoConfig) { ''' friso_config_txt += config_fn friso_config_txt += '\n}\n' ofp.write(friso_config_txt) ofp.flush() ofp.close() # hdrfile = os.path.join(dstdir, 'cndict_data.h') # hdrfp = open(hdrfile, 'w') # hdrfp.write(r''' #ifndef CNDICT_DATA_H #define CNDICT_DATA_H # extern const char {data_var}[]; # extern const size_t {uncomp_len_var}; # extern const size_t {comp_len_var}; # {config_fn_txt} # #endif # '''.format( # data_var=DICT_VARNAME, # uncomp_len_var=SIZE_FULL_VARNME, # comp_len_var=SIZE_COMP_VARNAME, # config_fn_txt=friso_config_txt # )) # hdrfp.flush() RediSearch-1.2.2/src/dep/cndict/cn_t2s.json000066400000000000000000001535451364126773500204460ustar00rootroot00000000000000{ "\u00af":"\u02c9", "\u2025":"\u00a8", "\u2027":"\u00b7", "\u2035":"\uff40", "\u2252":"\u2248", "\u2266":"\u2264", "\u2267":"\u2265", "\u2571":"\uff0f", "\u2572":"\uff3c", "\u2574":"\uff3f", "\u300c":"\u201c", "\u300d":"\u201d", "\u300e":"\u2018", "\u300f":"\u2019", "\u3473":"\u3447", "\u361a":"\u360e", "\u396e":"\u3918", "\u3a73":"\u39d0", "\u43b1":"\u43ac", "\u4661":"\u464c", "\u477c":"\u478d", "\u4947":"\u4982", "\u499b":"\u49b6", "\u499f":"\u49b7", "\u4c77":"\u4ca3", "\u4e1f":"\u4e22", "\u4e26":"\u5e76", "\u4e3c":"\u4e95", "\u4e7e":"\u5e72", "\u4e82":"\u4e71", "\u4e99":"\u4e98", "\u4e9e":"\u4e9a", "\u4f15":"\u592b", "\u4f47":"\u4f2b", "\u4f48":"\u5e03", "\u4f54":"\u5360", "\u4f6a":"\u5f8a", "\u4f75":"\u5e76", "\u4f86":"\u6765", "\u4f96":"\u4ed1", "\u4f9a":"\u5f87", "\u4fb6":"\u4fa3", "\u4fb7":"\u5c40", "\u4fc1":"\u4fe3", "\u4fc2":"\u7cfb", "\u4fe0":"\u4fa0", "\u5000":"\u4f25", "\u5006":"\u4fe9", "\u5009":"\u4ed3", "\u500b":"\u4e2a", "\u5011":"\u4eec", "\u5016":"\u5e78", "\u5023":"\u4eff", "\u502b":"\u4f26", "\u5049":"\u4f1f", "\u506a":"\u903c", "\u5074":"\u4fa7", "\u5075":"\u4fa6", "\u507a":"\u54b1", "\u507d":"\u4f2a", "\u5091":"\u6770", "\u5096":"\u4f27", "\u5098":"\u4f1e", "\u5099":"\u5907", "\u509a":"\u6548", "\u50a2":"\u5bb6", "\u50ad":"\u4f63", "\u50af":"\u506c", "\u50b3":"\u4f20", "\u50b4":"\u4f1b", "\u50b5":"\u503a", "\u50b7":"\u4f24", "\u50be":"\u503e", "\u50c2":"\u507b", "\u50c5":"\u4ec5", "\u50c9":"\u4f65", "\u50ca":"\u4ed9", "\u50d1":"\u4fa8", "\u50d5":"\u4ec6", "\u50de":"\u4f2a", "\u50e3":"\u50ed", "\u50e5":"\u4fa5", "\u50e8":"\u507e", "\u50f1":"\u96c7", "\u50f9":"\u4ef7", "\u5100":"\u4eea", "\u5102":"\u4fac", "\u5104":"\u4ebf", "\u5105":"\u5f53", "\u5108":"\u4fa9", "\u5109":"\u4fed", "\u5110":"\u50a7", "\u5114":"\u4fe6", "\u5115":"\u4faa", "\u5118":"\u5c3d", "\u511f":"\u507f", "\u512a":"\u4f18", "\u5132":"\u50a8", "\u5137":"\u4fea", "\u5138":"\u7f57", "\u513a":"\u50a9", "\u513b":"\u50a5", "\u513c":"\u4fe8", "\u5147":"\u51f6", "\u514c":"\u5151", "\u5152":"\u513f", "\u5157":"\u5156", "\u5167":"\u5185", "\u5169":"\u4e24", "\u518a":"\u518c", "\u5191":"\u80c4", "\u51aa":"\u5e42", "\u51c5":"\u6db8", "\u51c8":"\u51c0", "\u51cd":"\u51bb", "\u51dc":"\u51db", "\u51f1":"\u51ef", "\u5225":"\u522b", "\u522a":"\u5220", "\u5244":"\u522d", "\u5247":"\u5219", "\u5249":"\u9509", "\u524b":"\u514b", "\u524e":"\u5239", "\u5257":"\u522c", "\u525b":"\u521a", "\u525d":"\u5265", "\u526e":"\u5250", "\u5274":"\u5240", "\u5275":"\u521b", "\u5277":"\u94f2", "\u5283":"\u5212", "\u5284":"\u672d", "\u5287":"\u5267", "\u5289":"\u5218", "\u528a":"\u523d", "\u528c":"\u523f", "\u528d":"\u5251", "\u5291":"\u5242", "\u52bb":"\u5321", "\u52c1":"\u52b2", "\u52d5":"\u52a8", "\u52d7":"\u52d6", "\u52d9":"\u52a1", "\u52db":"\u52cb", "\u52dd":"\u80dc", "\u52de":"\u52b3", "\u52e2":"\u52bf", "\u52e3":"\u7ee9", "\u52e6":"\u527f", "\u52e9":"\u52da", "\u52f1":"\u52a2", "\u52f3":"\u52cb", "\u52f5":"\u52b1", "\u52f8":"\u529d", "\u52fb":"\u5300", "\u530b":"\u9676", "\u532d":"\u5326", "\u532f":"\u6c47", "\u5331":"\u532e", "\u5340":"\u533a", "\u5344":"\u5eff", "\u5354":"\u534f", "\u536c":"\u6602", "\u5379":"\u6064", "\u537b":"\u5374", "\u5399":"\u538d", "\u53ad":"\u538c", "\u53b2":"\u5389", "\u53b4":"\u53a3", "\u53c3":"\u53c2", "\u53e1":"\u777f", "\u53e2":"\u4e1b", "\u540b":"\u5bf8", "\u540e":"\u540e", "\u5433":"\u5434", "\u5436":"\u5450", "\u5442":"\u5415", "\u544e":"\u5c3a", "\u54b7":"\u5555", "\u54bc":"\u5459", "\u54e1":"\u5458", "\u5504":"\u5457", "\u551d":"\u55ca", "\u5538":"\u5ff5", "\u554f":"\u95ee", "\u5553":"\u542f", "\u5557":"\u5556", "\u555e":"\u54d1", "\u555f":"\u542f", "\u5562":"\u5521", "\u5563":"\u8854", "\u558e":"\u359e", "\u559a":"\u5524", "\u55aa":"\u4e27", "\u55ab":"\u5403", "\u55ac":"\u4e54", "\u55ae":"\u5355", "\u55b2":"\u54df", "\u55c6":"\u545b", "\u55c7":"\u556c", "\u55ce":"\u5417", "\u55da":"\u545c", "\u55e9":"\u5522", "\u55f6":"\u54d4", "\u5606":"\u53f9", "\u560d":"\u55bd", "\u5614":"\u5455", "\u5616":"\u5567", "\u5617":"\u5c1d", "\u561c":"\u551b", "\u5629":"\u54d7", "\u562e":"\u5520", "\u562f":"\u5578", "\u5630":"\u53fd", "\u5635":"\u54d3", "\u5638":"\u5452", "\u5641":"\u6076", "\u5653":"\u5618", "\u565d":"\u549d", "\u5660":"\u54d2", "\u5665":"\u54dd", "\u5666":"\u54d5", "\u566f":"\u55f3", "\u5672":"\u54d9", "\u5674":"\u55b7", "\u5678":"\u5428", "\u5679":"\u5f53", "\u5680":"\u549b", "\u5687":"\u5413", "\u568c":"\u54dc", "\u5690":"\u5c1d", "\u5695":"\u565c", "\u5699":"\u556e", "\u56a5":"\u54bd", "\u56a6":"\u5456", "\u56a8":"\u5499", "\u56ae":"\u5411", "\u56b3":"\u55be", "\u56b4":"\u4e25", "\u56b6":"\u5624", "\u56c0":"\u556d", "\u56c1":"\u55eb", "\u56c2":"\u56a3", "\u56c5":"\u5181", "\u56c8":"\u5453", "\u56c9":"\u5570", "\u56cc":"\u82cf", "\u56d1":"\u5631", "\u56d3":"\u556e", "\u56ea":"\u56f1", "\u5707":"\u56f5", "\u570b":"\u56fd", "\u570d":"\u56f4", "\u570f":"\u5708", "\u5712":"\u56ed", "\u5713":"\u5706", "\u5716":"\u56fe", "\u5718":"\u56e2", "\u5775":"\u4e18", "\u57dc":"\u91ce", "\u57e1":"\u57ad", "\u57f7":"\u6267", "\u57fc":"\u5d0e", "\u5805":"\u575a", "\u580a":"\u57a9", "\u5816":"\u57b4", "\u581d":"\u57da", "\u582f":"\u5c27", "\u5831":"\u62a5", "\u5834":"\u573a", "\u584a":"\u5757", "\u584b":"\u8314", "\u584f":"\u57b2", "\u5852":"\u57d8", "\u5857":"\u6d82", "\u585a":"\u51a2", "\u5862":"\u575e", "\u5864":"\u57d9", "\u5875":"\u5c18", "\u5879":"\u5811", "\u588a":"\u57ab", "\u5891":"\u5892", "\u589c":"\u5760", "\u58ab":"\u6a3d", "\u58ae":"\u5815", "\u58b3":"\u575f", "\u58bb":"\u5899", "\u58be":"\u57a6", "\u58c7":"\u575b", "\u58ce":"\u57d9", "\u58d3":"\u538b", "\u58d8":"\u5792", "\u58d9":"\u5739", "\u58da":"\u5786", "\u58de":"\u574f", "\u58df":"\u5784", "\u58e2":"\u575c", "\u58e9":"\u575d", "\u58ef":"\u58ee", "\u58fa":"\u58f6", "\u58fd":"\u5bff", "\u5920":"\u591f", "\u5922":"\u68a6", "\u593e":"\u5939", "\u5950":"\u5942", "\u5967":"\u5965", "\u5969":"\u5941", "\u596a":"\u593a", "\u596e":"\u594b", "\u599d":"\u5986", "\u59cd":"\u59d7", "\u59e6":"\u5978", "\u59ea":"\u4f84", "\u5a1b":"\u5a31", "\u5a41":"\u5a04", "\u5a66":"\u5987", "\u5a6c":"\u6deb", "\u5a6d":"\u5a05", "\u5aa7":"\u5a32", "\u5aae":"\u5077", "\u5aaf":"\u59ab", "\u5abc":"\u5aaa", "\u5abd":"\u5988", "\u5abf":"\u6127", "\u5acb":"\u8885", "\u5ad7":"\u59aa", "\u5af5":"\u59a9", "\u5afb":"\u5a34", "\u5aff":"\u5a73", "\u5b08":"\u5a06", "\u5b0b":"\u5a75", "\u5b0c":"\u5a07", "\u5b19":"\u5af1", "\u5b1d":"\u8885", "\u5b21":"\u5ad2", "\u5b24":"\u5b37", "\u5b2a":"\u5ad4", "\u5b2d":"\u5976", "\u5b30":"\u5a74", "\u5b38":"\u5a76", "\u5b43":"\u5a18", "\u5b4c":"\u5a08", "\u5b6b":"\u5b59", "\u5b78":"\u5b66", "\u5b7f":"\u5b6a", "\u5bae":"\u5bab", "\u5bd8":"\u7f6e", "\u5be2":"\u5bdd", "\u5be6":"\u5b9e", "\u5be7":"\u5b81", "\u5be9":"\u5ba1", "\u5beb":"\u5199", "\u5bec":"\u5bbd", "\u5bf5":"\u5ba0", "\u5bf6":"\u5b9d", "\u5c07":"\u5c06", "\u5c08":"\u4e13", "\u5c0b":"\u5bfb", "\u5c0d":"\u5bf9", "\u5c0e":"\u5bfc", "\u5c37":"\u5c34", "\u5c46":"\u5c4a", "\u5c4d":"\u5c38", "\u5c5c":"\u5c49", "\u5c5d":"\u6249", "\u5c62":"\u5c61", "\u5c64":"\u5c42", "\u5c68":"\u5c66", "\u5c6c":"\u5c5e", "\u5ca1":"\u5188", "\u5cf4":"\u5c98", "\u5cf6":"\u5c9b", "\u5cfd":"\u5ce1", "\u5d0d":"\u5d03", "\u5d11":"\u6606", "\u5d17":"\u5c97", "\u5d19":"\u4ed1", "\u5d20":"\u5cbd", "\u5d22":"\u5ce5", "\u5d33":"\u5d5b", "\u5d50":"\u5c9a", "\u5d52":"\u5ca9", "\u5d81":"\u5d5d", "\u5d84":"\u5d2d", "\u5d87":"\u5c96", "\u5d94":"\u5d5a", "\u5d97":"\u5d02", "\u5da0":"\u5ce4", "\u5da2":"\u5ce3", "\u5da7":"\u5cc4", "\u5da8":"\u5cc3", "\u5db8":"\u5d58", "\u5dba":"\u5cad", "\u5dbc":"\u5c7f", "\u5dbd":"\u5cb3", "\u5dcb":"\u5cbf", "\u5dd2":"\u5ce6", "\u5dd4":"\u5dc5", "\u5dd6":"\u5ca9", "\u5df0":"\u5def", "\u5df9":"\u537a", "\u5e25":"\u5e05", "\u5e2b":"\u5e08", "\u5e33":"\u5e10", "\u5e36":"\u5e26", "\u5e40":"\u5e27", "\u5e43":"\u5e0f", "\u5e57":"\u5e3c", "\u5e58":"\u5e3b", "\u5e5f":"\u5e1c", "\u5e63":"\u5e01", "\u5e6b":"\u5e2e", "\u5e6c":"\u5e31", "\u5e75":"\u5f00", "\u5e77":"\u5e76", "\u5e79":"\u5e72", "\u5e7e":"\u51e0", "\u5e82":"\u4ec4", "\u5eab":"\u5e93", "\u5ec1":"\u5395", "\u5ec2":"\u53a2", "\u5ec4":"\u53a9", "\u5ec8":"\u53a6", "\u5ece":"\u5ebc", "\u5eda":"\u53a8", "\u5edd":"\u53ae", "\u5edf":"\u5e99", "\u5ee0":"\u5382", "\u5ee1":"\u5e91", "\u5ee2":"\u5e9f", "\u5ee3":"\u5e7f", "\u5ee9":"\u5eea", "\u5eec":"\u5e90", "\u5ef1":"\u75c8", "\u5ef3":"\u5385", "\u5f12":"\u5f11", "\u5f14":"\u540a", "\u5f33":"\u5f2a", "\u5f35":"\u5f20", "\u5f37":"\u5f3a", "\u5f46":"\u522b", "\u5f48":"\u5f39", "\u5f4c":"\u5f25", "\u5f4e":"\u5f2f", "\u5f59":"\u6c47", "\u5f5a":"\u6c47", "\u5f65":"\u5f66", "\u5f6b":"\u96d5", "\u5f7f":"\u4f5b", "\u5f8c":"\u540e", "\u5f91":"\u5f84", "\u5f9e":"\u4ece", "\u5fa0":"\u5f95", "\u5fa9":"\u590d", "\u5fac":"\u65c1", "\u5fb5":"\u5f81", "\u5fb9":"\u5f7b", "\u6046":"\u6052", "\u6065":"\u803b", "\u6085":"\u60a6", "\u60b5":"\u6005", "\u60b6":"\u95f7", "\u60bd":"\u51c4", "\u60c7":"\u6566", "\u60e1":"\u6076", "\u60f1":"\u607c", "\u60f2":"\u607d", "\u60f7":"\u8822", "\u60fb":"\u607b", "\u611b":"\u7231", "\u611c":"\u60ec", "\u6128":"\u60ab", "\u6134":"\u6006", "\u6137":"\u607a", "\u613e":"\u5ffe", "\u6144":"\u6817", "\u6147":"\u6bb7", "\u614b":"\u6001", "\u614d":"\u6120", "\u6158":"\u60e8", "\u615a":"\u60ed", "\u615f":"\u6078", "\u6163":"\u60ef", "\u616a":"\u6004", "\u616b":"\u6002", "\u616e":"\u8651", "\u6173":"\u60ad", "\u6176":"\u5e86", "\u617c":"\u621a", "\u617e":"\u6b32", "\u6182":"\u5fe7", "\u618a":"\u60eb", "\u6190":"\u601c", "\u6191":"\u51ed", "\u6192":"\u6126", "\u619a":"\u60ee", "\u61a4":"\u6124", "\u61ab":"\u60af", "\u61ae":"\u6003", "\u61b2":"\u5baa", "\u61b6":"\u5fc6", "\u61c3":"\u52e4", "\u61c7":"\u6073", "\u61c9":"\u5e94", "\u61cc":"\u603f", "\u61cd":"\u61d4", "\u61de":"\u8499", "\u61df":"\u603c", "\u61e3":"\u61d1", "\u61e8":"\u6079", "\u61f2":"\u60e9", "\u61f6":"\u61d2", "\u61f7":"\u6000", "\u61f8":"\u60ac", "\u61fa":"\u5fcf", "\u61fc":"\u60e7", "\u61fe":"\u6151", "\u6200":"\u604b", "\u6207":"\u6206", "\u6209":"\u94ba", "\u6214":"\u620b", "\u6227":"\u6217", "\u6229":"\u622c", "\u6230":"\u6218", "\u6232":"\u620f", "\u6236":"\u6237", "\u6250":"\u4ec2", "\u625e":"\u634d", "\u6271":"\u63d2", "\u627a":"\u62b5", "\u6283":"\u62da", "\u6294":"\u62b1", "\u62b4":"\u66f3", "\u62cb":"\u629b", "\u62d1":"\u94b3", "\u630c":"\u683c", "\u6336":"\u5c40", "\u633e":"\u631f", "\u6368":"\u820d", "\u636b":"\u626a", "\u6372":"\u5377", "\u6383":"\u626b", "\u6384":"\u62a1", "\u6386":"\u39cf", "\u6397":"\u631c", "\u6399":"\u6323", "\u639b":"\u6302", "\u63a1":"\u91c7", "\u63c0":"\u62e3", "\u63da":"\u626c", "\u63db":"\u6362", "\u63ee":"\u6325", "\u63f9":"\u80cc", "\u6406":"\u6784", "\u640d":"\u635f", "\u6416":"\u6447", "\u6417":"\u6363", "\u641f":"\u64c0", "\u6425":"\u6376", "\u6428":"\u6253", "\u642f":"\u638f", "\u6436":"\u62a2", "\u643e":"\u69a8", "\u6440":"\u6342", "\u6443":"\u625b", "\u6451":"\u63b4", "\u645c":"\u63bc", "\u645f":"\u6402", "\u646f":"\u631a", "\u6473":"\u62a0", "\u6476":"\u629f", "\u647b":"\u63ba", "\u6488":"\u635e", "\u648f":"\u6326", "\u6490":"\u6491", "\u6493":"\u6320", "\u649a":"\u62c8", "\u649f":"\u6322", "\u64a2":"\u63b8", "\u64a3":"\u63b8", "\u64a5":"\u62e8", "\u64a6":"\u626f", "\u64ab":"\u629a", "\u64b2":"\u6251", "\u64b3":"\u63ff", "\u64bb":"\u631e", "\u64be":"\u631d", "\u64bf":"\u6361", "\u64c1":"\u62e5", "\u64c4":"\u63b3", "\u64c7":"\u62e9", "\u64ca":"\u51fb", "\u64cb":"\u6321", "\u64d3":"\u39df", "\u64d4":"\u62c5", "\u64da":"\u636e", "\u64e0":"\u6324", "\u64e1":"\u62ac", "\u64e3":"\u6363", "\u64ec":"\u62df", "\u64ef":"\u6448", "\u64f0":"\u62e7", "\u64f1":"\u6401", "\u64f2":"\u63b7", "\u64f4":"\u6269", "\u64f7":"\u64b7", "\u64fa":"\u6446", "\u64fb":"\u64de", "\u64fc":"\u64b8", "\u64fe":"\u6270", "\u6504":"\u6445", "\u6506":"\u64b5", "\u650f":"\u62e2", "\u6514":"\u62e6", "\u6516":"\u6484", "\u6519":"\u6400", "\u651b":"\u64ba", "\u651c":"\u643a", "\u651d":"\u6444", "\u6522":"\u6512", "\u6523":"\u631b", "\u6524":"\u644a", "\u652a":"\u6405", "\u652c":"\u63fd", "\u6537":"\u8003", "\u6557":"\u8d25", "\u6558":"\u53d9", "\u6575":"\u654c", "\u6578":"\u6570", "\u6582":"\u655b", "\u6583":"\u6bd9", "\u6595":"\u6593", "\u65ac":"\u65a9", "\u65b7":"\u65ad", "\u65bc":"\u4e8e", "\u65c2":"\u65d7", "\u65db":"\u5e61", "\u6607":"\u5347", "\u6642":"\u65f6", "\u6649":"\u664b", "\u665d":"\u663c", "\u665e":"\u66e6", "\u6662":"\u6670", "\u6673":"\u6670", "\u667b":"\u6697", "\u6688":"\u6655", "\u6689":"\u6656", "\u6698":"\u9633", "\u66a2":"\u7545", "\u66ab":"\u6682", "\u66b1":"\u6635", "\u66b8":"\u4e86", "\u66c4":"\u6654", "\u66c6":"\u5386", "\u66c7":"\u6619", "\u66c9":"\u6653", "\u66cf":"\u5411", "\u66d6":"\u66a7", "\u66e0":"\u65f7", "\u66e8":"\u663d", "\u66ec":"\u6652", "\u66f8":"\u4e66", "\u6703":"\u4f1a", "\u6722":"\u671b", "\u6727":"\u80e7", "\u672e":"\u672f", "\u6747":"\u572c", "\u6771":"\u4e1c", "\u67b4":"\u62d0", "\u67f5":"\u6805", "\u67fa":"\u62d0", "\u6812":"\u65ec", "\u686e":"\u676f", "\u687f":"\u6746", "\u6894":"\u6800", "\u6898":"\u67a7", "\u689d":"\u6761", "\u689f":"\u67ad", "\u68b1":"\u6346", "\u68c4":"\u5f03", "\u68d6":"\u67a8", "\u68d7":"\u67a3", "\u68df":"\u680b", "\u68e1":"\u3b4e", "\u68e7":"\u6808", "\u68f2":"\u6816", "\u690f":"\u6860", "\u6944":"\u533e", "\u694a":"\u6768", "\u6953":"\u67ab", "\u6959":"\u8302", "\u695c":"\u80e1", "\u6968":"\u6862", "\u696d":"\u4e1a", "\u6975":"\u6781", "\u69a6":"\u5e72", "\u69aa":"\u6769", "\u69ae":"\u8363", "\u69bf":"\u6864", "\u69c3":"\u76d8", "\u69cb":"\u6784", "\u69cd":"\u67aa", "\u69d3":"\u6760", "\u69e7":"\u6920", "\u69e8":"\u6901", "\u69f3":"\u6868", "\u6a01":"\u6869", "\u6a02":"\u4e50", "\u6a05":"\u679e", "\u6a11":"\u6881", "\u6a13":"\u697c", "\u6a19":"\u6807", "\u6a1e":"\u67a2", "\u6a23":"\u6837", "\u6a38":"\u6734", "\u6a39":"\u6811", "\u6a3a":"\u6866", "\u6a48":"\u6861", "\u6a4b":"\u6865", "\u6a5f":"\u673a", "\u6a62":"\u692d", "\u6a66":"\u5e62", "\u6a6b":"\u6a2a", "\u6a81":"\u6aa9", "\u6a89":"\u67fd", "\u6a94":"\u6863", "\u6a9c":"\u6867", "\u6a9f":"\u69da", "\u6aa2":"\u68c0", "\u6aa3":"\u6a2f", "\u6aaf":"\u53f0", "\u6ab3":"\u69df", "\u6ab8":"\u67e0", "\u6abb":"\u69db", "\u6ac2":"\u68f9", "\u6ac3":"\u67dc", "\u6ad0":"\u7d2f", "\u6ad3":"\u6a79", "\u6ada":"\u6988", "\u6adb":"\u6809", "\u6add":"\u691f", "\u6ade":"\u6a7c", "\u6adf":"\u680e", "\u6ae5":"\u6a71", "\u6ae7":"\u69e0", "\u6ae8":"\u680c", "\u6aea":"\u67a5", "\u6aeb":"\u6a65", "\u6aec":"\u6987", "\u6af3":"\u680a", "\u6af8":"\u6989", "\u6afa":"\u68c2", "\u6afb":"\u6a31", "\u6b04":"\u680f", "\u6b0a":"\u6743", "\u6b0f":"\u6924", "\u6b12":"\u683e", "\u6b16":"\u6984", "\u6b1e":"\u68c2", "\u6b38":"\u5509", "\u6b3d":"\u94a6", "\u6b4e":"\u53f9", "\u6b50":"\u6b27", "\u6b5f":"\u6b24", "\u6b61":"\u6b22", "\u6b72":"\u5c81", "\u6b77":"\u5386", "\u6b78":"\u5f52", "\u6b7f":"\u6b81", "\u6b80":"\u592d", "\u6b98":"\u6b8b", "\u6b9e":"\u6b92", "\u6ba4":"\u6b87", "\u6bab":"\u6b9a", "\u6bad":"\u50f5", "\u6bae":"\u6b93", "\u6baf":"\u6ba1", "\u6bb2":"\u6b7c", "\u6bba":"\u6740", "\u6bbc":"\u58f3", "\u6bbd":"\u80b4", "\u6bc0":"\u6bc1", "\u6bc6":"\u6bb4", "\u6bcc":"\u6bcb", "\u6bd8":"\u6bd7", "\u6bec":"\u7403", "\u6bff":"\u6bf5", "\u6c08":"\u6be1", "\u6c0c":"\u6c07", "\u6c23":"\u6c14", "\u6c2b":"\u6c22", "\u6c2c":"\u6c29", "\u6c33":"\u6c32", "\u6c3e":"\u6cdb", "\u6c4d":"\u4e38", "\u6c4e":"\u6cdb", "\u6c59":"\u6c61", "\u6c7a":"\u51b3", "\u6c8d":"\u51b1", "\u6c92":"\u6ca1", "\u6c96":"\u51b2", "\u6cc1":"\u51b5", "\u6cdd":"\u6eaf", "\u6d1f":"\u6d95", "\u6d29":"\u6cc4", "\u6d36":"\u6c79", "\u6d6c":"\u91cc", "\u6d79":"\u6d43", "\u6d87":"\u6cfe", "\u6dbc":"\u51c9", "\u6dd2":"\u51c4", "\u6dda":"\u6cea", "\u6de5":"\u6e0c", "\u6de8":"\u51c0", "\u6dea":"\u6ca6", "\u6df5":"\u6e0a", "\u6df6":"\u6d9e", "\u6dfa":"\u6d45", "\u6e19":"\u6da3", "\u6e1b":"\u51cf", "\u6e22":"\u6ca8", "\u6e26":"\u6da1", "\u6e2c":"\u6d4b", "\u6e3e":"\u6d51", "\u6e4a":"\u51d1", "\u6e5e":"\u6d48", "\u6e63":"\u95f5", "\u6e67":"\u6d8c", "\u6e6f":"\u6c64", "\u6e88":"\u6ca9", "\u6e96":"\u51c6", "\u6e9d":"\u6c9f", "\u6eab":"\u6e29", "\u6eae":"\u6d49", "\u6eb3":"\u6da2", "\u6ebc":"\u6e7f", "\u6ec4":"\u6ca7", "\u6ec5":"\u706d", "\u6ecc":"\u6da4", "\u6ece":"\u8365", "\u6eec":"\u6caa", "\u6eef":"\u6ede", "\u6ef2":"\u6e17", "\u6ef7":"\u5364", "\u6ef8":"\u6d52", "\u6efb":"\u6d50", "\u6efe":"\u6eda", "\u6eff":"\u6ee1", "\u6f01":"\u6e14", "\u6f0a":"\u6e87", "\u6f1a":"\u6ca4", "\u6f22":"\u6c49", "\u6f23":"\u6d9f", "\u6f2c":"\u6e0d", "\u6f32":"\u6da8", "\u6f35":"\u6e86", "\u6f38":"\u6e10", "\u6f3f":"\u6d46", "\u6f41":"\u988d", "\u6f51":"\u6cfc", "\u6f54":"\u6d01", "\u6f5b":"\u6f5c", "\u6f5f":"\u8204", "\u6f64":"\u6da6", "\u6f6f":"\u6d54", "\u6f70":"\u6e83", "\u6f77":"\u6ed7", "\u6f7f":"\u6da0", "\u6f80":"\u6da9", "\u6f82":"\u6f84", "\u6f86":"\u6d47", "\u6f87":"\u6d9d", "\u6f94":"\u6d69", "\u6f97":"\u6da7", "\u6fa0":"\u6e11", "\u6fa4":"\u6cfd", "\u6fa6":"\u6eea", "\u6fa9":"\u6cf6", "\u6fae":"\u6d4d", "\u6fb1":"\u6dc0", "\u6fbe":"\u3ce0", "\u6fc1":"\u6d4a", "\u6fc3":"\u6d53", "\u6fd5":"\u6e7f", "\u6fd8":"\u6cde", "\u6fdb":"\u8499", "\u6fdc":"\u6d55", "\u6fdf":"\u6d4e", "\u6fe4":"\u6d9b", "\u6feb":"\u6ee5", "\u6fec":"\u6d5a", "\u6ff0":"\u6f4d", "\u6ff1":"\u6ee8", "\u6ffa":"\u6e85", "\u6ffc":"\u6cfa", "\u6ffe":"\u6ee4", "\u7001":"\u6f3e", "\u7005":"\u6ee2", "\u7006":"\u6e0e", "\u7009":"\u6cfb", "\u700b":"\u6c88", "\u700f":"\u6d4f", "\u7015":"\u6fd2", "\u7018":"\u6cf8", "\u701d":"\u6ca5", "\u701f":"\u6f47", "\u7020":"\u6f46", "\u7026":"\u6f74", "\u7027":"\u6cf7", "\u7028":"\u6fd1", "\u7030":"\u5f25", "\u7032":"\u6f4b", "\u703e":"\u6f9c", "\u7043":"\u6ca3", "\u7044":"\u6ee0", "\u7051":"\u6d12", "\u7055":"\u6f13", "\u7058":"\u6ee9", "\u705d":"\u704f", "\u7063":"\u6e7e", "\u7064":"\u6ee6", "\u7069":"\u6edf", "\u707d":"\u707e", "\u70a4":"\u7167", "\u70b0":"\u70ae", "\u70ba":"\u4e3a", "\u70cf":"\u4e4c", "\u70f4":"\u70c3", "\u7121":"\u65e0", "\u7149":"\u70bc", "\u7152":"\u709c", "\u7156":"\u6696", "\u7159":"\u70df", "\u7162":"\u8315", "\u7165":"\u7115", "\u7169":"\u70e6", "\u716c":"\u7080", "\u7192":"\u8367", "\u7197":"\u709d", "\u71b1":"\u70ed", "\u71be":"\u70bd", "\u71c1":"\u70e8", "\u71c4":"\u7130", "\u71c8":"\u706f", "\u71c9":"\u7096", "\u71d0":"\u78f7", "\u71d2":"\u70e7", "\u71d9":"\u70eb", "\u71dc":"\u7116", "\u71df":"\u8425", "\u71e6":"\u707f", "\u71ec":"\u6bc1", "\u71ed":"\u70db", "\u71f4":"\u70e9", "\u71fb":"\u718f", "\u71fc":"\u70ec", "\u71fe":"\u7118", "\u71ff":"\u8000", "\u720d":"\u70c1", "\u7210":"\u7089", "\u721b":"\u70c2", "\u722d":"\u4e89", "\u7232":"\u4e3a", "\u723a":"\u7237", "\u723e":"\u5c14", "\u7246":"\u5899", "\u7258":"\u724d", "\u7260":"\u5b83", "\u7274":"\u62b5", "\u727d":"\u7275", "\u7296":"\u8366", "\u729b":"\u7266", "\u72a2":"\u728a", "\u72a7":"\u727a", "\u72c0":"\u72b6", "\u72da":"\u65e6", "\u72f9":"\u72ed", "\u72fd":"\u72c8", "\u7319":"\u72f0", "\u7336":"\u72b9", "\u733b":"\u72f2", "\u7341":"\u72b8", "\u7343":"\u5446", "\u7344":"\u72f1", "\u7345":"\u72ee", "\u734e":"\u5956", "\u7368":"\u72ec", "\u736a":"\u72ef", "\u736b":"\u7303", "\u736e":"\u72dd", "\u7370":"\u72de", "\u7372":"\u83b7", "\u7375":"\u730e", "\u7377":"\u72b7", "\u7378":"\u517d", "\u737a":"\u736d", "\u737b":"\u732e", "\u737c":"\u7315", "\u7380":"\u7321", "\u7385":"\u5999", "\u7386":"\u5179", "\u73a8":"\u73cf", "\u73ea":"\u572d", "\u73ee":"\u4f69", "\u73fe":"\u73b0", "\u7431":"\u96d5", "\u743a":"\u73d0", "\u743f":"\u73f2", "\u744b":"\u73ae", "\u7463":"\u7410", "\u7464":"\u7476", "\u7469":"\u83b9", "\u746a":"\u739b", "\u746f":"\u7405", "\u7472":"\u73b1", "\u7489":"\u740f", "\u74a1":"\u740e", "\u74a3":"\u7391", "\u74a6":"\u7477", "\u74b0":"\u73af", "\u74bd":"\u73ba", "\u74bf":"\u7487", "\u74ca":"\u743c", "\u74cf":"\u73d1", "\u74d4":"\u748e", "\u74d6":"\u9576", "\u74da":"\u74d2", "\u750c":"\u74ef", "\u7515":"\u74ee", "\u7522":"\u4ea7", "\u7523":"\u4ea7", "\u7526":"\u82cf", "\u752a":"\u89d2", "\u755d":"\u4ea9", "\u7562":"\u6bd5", "\u756b":"\u753b", "\u756c":"\u7572", "\u7570":"\u5f02", "\u7576":"\u5f53", "\u7587":"\u7574", "\u758a":"\u53e0", "\u75bf":"\u75f1", "\u75d9":"\u75c9", "\u75e0":"\u9178", "\u75f2":"\u9ebb", "\u75f3":"\u9ebb", "\u75fa":"\u75f9", "\u75fe":"\u75b4", "\u7602":"\u75d6", "\u7609":"\u6108", "\u760b":"\u75af", "\u760d":"\u75a1", "\u7613":"\u75ea", "\u761e":"\u7617", "\u7621":"\u75ae", "\u7627":"\u759f", "\u763a":"\u7618", "\u763b":"\u7618", "\u7642":"\u7597", "\u7646":"\u75e8", "\u7647":"\u75eb", "\u7649":"\u7605", "\u7652":"\u6108", "\u7658":"\u75a0", "\u765f":"\u762a", "\u7661":"\u75f4", "\u7662":"\u75d2", "\u7664":"\u7596", "\u7665":"\u75c7", "\u7667":"\u75ac", "\u7669":"\u765e", "\u766c":"\u7663", "\u766d":"\u763f", "\u766e":"\u763e", "\u7670":"\u75c8", "\u7671":"\u762b", "\u7672":"\u766b", "\u767c":"\u53d1", "\u7681":"\u7682", "\u769a":"\u7691", "\u76b0":"\u75b1", "\u76b8":"\u76b2", "\u76ba":"\u76b1", "\u76c3":"\u676f", "\u76dc":"\u76d7", "\u76de":"\u76cf", "\u76e1":"\u5c3d", "\u76e3":"\u76d1", "\u76e4":"\u76d8", "\u76e7":"\u5362", "\u76ea":"\u8361", "\u7725":"\u7726", "\u773e":"\u4f17", "\u774f":"\u56f0", "\u775c":"\u7741", "\u775e":"\u7750", "\u776a":"\u777e", "\u7787":"\u772f", "\u7798":"\u770d", "\u779c":"\u4056", "\u779e":"\u7792", "\u77bc":"\u7751", "\u77c7":"\u8499", "\u77d3":"\u772c", "\u77da":"\u77a9", "\u77ef":"\u77eb", "\u7832":"\u70ae", "\u7843":"\u6731", "\u7864":"\u7856", "\u7868":"\u7817", "\u786f":"\u781a", "\u7895":"\u5d0e", "\u78a9":"\u7855", "\u78aa":"\u7827", "\u78ad":"\u7800", "\u78b8":"\u781c", "\u78ba":"\u786e", "\u78bc":"\u7801", "\u78d1":"\u7859", "\u78da":"\u7816", "\u78e3":"\u789c", "\u78e7":"\u789b", "\u78ef":"\u77f6", "\u78fd":"\u7857", "\u7904":"\u785a", "\u790e":"\u7840", "\u7919":"\u788d", "\u7926":"\u77ff", "\u792a":"\u783a", "\u792b":"\u783e", "\u792c":"\u77fe", "\u7931":"\u783b", "\u7942":"\u4ed6", "\u7945":"\u7946", "\u7947":"\u53ea", "\u7950":"\u4f51", "\u797c":"\u88f8", "\u797f":"\u7984", "\u798d":"\u7978", "\u798e":"\u796f", "\u7995":"\u794e", "\u79a6":"\u5fa1", "\u79aa":"\u7985", "\u79ae":"\u793c", "\u79b1":"\u7977", "\u79bf":"\u79c3", "\u79c8":"\u7c7c", "\u79cf":"\u8017", "\u7a05":"\u7a0e", "\u7a08":"\u79c6", "\u7a1c":"\u68f1", "\u7a1f":"\u7980", "\u7a28":"\u6241", "\u7a2e":"\u79cd", "\u7a31":"\u79f0", "\u7a40":"\u8c37", "\u7a47":"\u415f", "\u7a4c":"\u7a23", "\u7a4d":"\u79ef", "\u7a4e":"\u9896", "\u7a61":"\u7a51", "\u7a62":"\u79fd", "\u7a68":"\u9893", "\u7a69":"\u7a33", "\u7a6b":"\u83b7", "\u7aa9":"\u7a9d", "\u7aaa":"\u6d3c", "\u7aae":"\u7a77", "\u7aaf":"\u7a91", "\u7ab5":"\u7a8e", "\u7ab6":"\u7aad", "\u7aba":"\u7aa5", "\u7ac4":"\u7a9c", "\u7ac5":"\u7a8d", "\u7ac7":"\u7aa6", "\u7aca":"\u7a83", "\u7af6":"\u7ade", "\u7b3b":"\u7b47", "\u7b46":"\u7b14", "\u7b4d":"\u7b0b", "\u7b67":"\u7b15", "\u7b74":"\u7b56", "\u7b84":"\u7b85", "\u7b87":"\u4e2a", "\u7b8b":"\u7b3a", "\u7b8f":"\u7b5d", "\u7ba0":"\u68f0", "\u7bc0":"\u8282", "\u7bc4":"\u8303", "\u7bc9":"\u7b51", "\u7bcb":"\u7ba7", "\u7bdb":"\u7bac", "\u7be0":"\u7b71", "\u7be4":"\u7b03", "\u7be9":"\u7b5b", "\u7bf2":"\u5f57", "\u7bf3":"\u7b5a", "\u7c00":"\u7ba6", "\u7c0d":"\u7bd3", "\u7c11":"\u84d1", "\u7c1e":"\u7baa", "\u7c21":"\u7b80", "\u7c23":"\u7bd1", "\u7c2b":"\u7bab", "\u7c37":"\u6a90", "\u7c3d":"\u7b7e", "\u7c3e":"\u5e18", "\u7c43":"\u7bee", "\u7c4c":"\u7b79", "\u7c50":"\u85e4", "\u7c59":"\u7b93", "\u7c5c":"\u7ba8", "\u7c5f":"\u7c41", "\u7c60":"\u7b3c", "\u7c64":"\u7b7e", "\u7c65":"\u9fa0", "\u7c69":"\u7b3e", "\u7c6a":"\u7c16", "\u7c6c":"\u7bf1", "\u7c6e":"\u7ba9", "\u7c72":"\u5401", "\u7ca7":"\u5986", "\u7cb5":"\u7ca4", "\u7cdd":"\u7cc1", "\u7cde":"\u7caa", "\u7ce7":"\u7cae", "\u7cf0":"\u56e2", "\u7cf2":"\u7c9d", "\u7cf4":"\u7c74", "\u7cf6":"\u7c9c", "\u7cfe":"\u7ea0", "\u7d00":"\u7eaa", "\u7d02":"\u7ea3", "\u7d04":"\u7ea6", "\u7d05":"\u7ea2", "\u7d06":"\u7ea1", "\u7d07":"\u7ea5", "\u7d08":"\u7ea8", "\u7d09":"\u7eab", "\u7d0b":"\u7eb9", "\u7d0d":"\u7eb3", "\u7d10":"\u7ebd", "\u7d13":"\u7ebe", "\u7d14":"\u7eaf", "\u7d15":"\u7eb0", "\u7d16":"\u7ebc", "\u7d17":"\u7eb1", "\u7d18":"\u7eae", "\u7d19":"\u7eb8", "\u7d1a":"\u7ea7", "\u7d1b":"\u7eb7", "\u7d1c":"\u7ead", "\u7d1d":"\u7eb4", "\u7d21":"\u7eba", "\u7d2c":"\u4337", "\u7d2e":"\u624e", "\u7d30":"\u7ec6", "\u7d31":"\u7ec2", "\u7d32":"\u7ec1", "\u7d33":"\u7ec5", "\u7d39":"\u7ecd", "\u7d3a":"\u7ec0", "\u7d3c":"\u7ecb", "\u7d3f":"\u7ed0", "\u7d40":"\u7ecc", "\u7d42":"\u7ec8", "\u7d43":"\u5f26", "\u7d44":"\u7ec4", "\u7d46":"\u7eca", "\u7d4e":"\u7ed7", "\u7d50":"\u7ed3", "\u7d55":"\u7edd", "\u7d5b":"\u7ee6", "\u7d5d":"\u7ed4", "\u7d5e":"\u7ede", "\u7d61":"\u7edc", "\u7d62":"\u7eda", "\u7d66":"\u7ed9", "\u7d68":"\u7ed2", "\u7d70":"\u7ed6", "\u7d71":"\u7edf", "\u7d72":"\u4e1d", "\u7d73":"\u7edb", "\u7d79":"\u7ee2", "\u7d81":"\u7ed1", "\u7d83":"\u7ee1", "\u7d86":"\u7ee0", "\u7d88":"\u7ee8", "\u7d8f":"\u7ee5", "\u7d91":"\u6346", "\u7d93":"\u7ecf", "\u7d9c":"\u7efc", "\u7d9e":"\u7f0d", "\u7da0":"\u7eff", "\u7da2":"\u7ef8", "\u7da3":"\u7efb", "\u7dab":"\u7ebf", "\u7dac":"\u7ef6", "\u7dad":"\u7ef4", "\u7db0":"\u7efe", "\u7db1":"\u7eb2", "\u7db2":"\u7f51", "\u7db4":"\u7f00", "\u7db5":"\u5f69", "\u7db8":"\u7eb6", "\u7db9":"\u7efa", "\u7dba":"\u7eee", "\u7dbb":"\u7efd", "\u7dbd":"\u7ef0", "\u7dbe":"\u7eeb", "\u7dbf":"\u7ef5", "\u7dc4":"\u7ef2", "\u7dc7":"\u7f01", "\u7dca":"\u7d27", "\u7dcb":"\u7eef", "\u7dd2":"\u7eea", "\u7dd4":"\u7ef1", "\u7dd7":"\u7f03", "\u7dd8":"\u7f04", "\u7dd9":"\u7f02", "\u7dda":"\u7ebf", "\u7ddd":"\u7f09", "\u7dde":"\u7f0e", "\u7de0":"\u7f14", "\u7de1":"\u7f17", "\u7de3":"\u7f18", "\u7de6":"\u7f0c", "\u7de8":"\u7f16", "\u7de9":"\u7f13", "\u7dec":"\u7f05", "\u7def":"\u7eac", "\u7df1":"\u7f11", "\u7df2":"\u7f08", "\u7df4":"\u7ec3", "\u7df6":"\u7f0f", "\u7df9":"\u7f07", "\u7dfb":"\u81f4", "\u7e08":"\u8426", "\u7e09":"\u7f19", "\u7e0a":"\u7f22", "\u7e0b":"\u7f12", "\u7e10":"\u7ec9", "\u7e11":"\u7f23", "\u7e15":"\u7f0a", "\u7e17":"\u7f1e", "\u7e1a":"\u7ee6", "\u7e1b":"\u7f1a", "\u7e1d":"\u7f1c", "\u7e1e":"\u7f1f", "\u7e1f":"\u7f1b", "\u7e23":"\u53bf", "\u7e2b":"\u7f1d", "\u7e2d":"\u7f21", "\u7e2e":"\u7f29", "\u7e2f":"\u6f14", "\u7e31":"\u7eb5", "\u7e32":"\u7f27", "\u7e33":"\u7f1a", "\u7e34":"\u7ea4", "\u7e35":"\u7f26", "\u7e36":"\u7d77", "\u7e37":"\u7f15", "\u7e39":"\u7f25", "\u7e3d":"\u603b", "\u7e3e":"\u7ee9", "\u7e43":"\u7ef7", "\u7e45":"\u7f2b", "\u7e46":"\u7f2a", "\u7e48":"\u8941", "\u7e52":"\u7f2f", "\u7e54":"\u7ec7", "\u7e55":"\u7f2e", "\u7e59":"\u7ffb", "\u7e5a":"\u7f2d", "\u7e5e":"\u7ed5", "\u7e61":"\u7ee3", "\u7e62":"\u7f0b", "\u7e69":"\u7ef3", "\u7e6a":"\u7ed8", "\u7e6b":"\u7cfb", "\u7e6d":"\u8327", "\u7e6f":"\u7f33", "\u7e70":"\u7f32", "\u7e73":"\u7f34", "\u7e79":"\u7ece", "\u7e7c":"\u7ee7", "\u7e7d":"\u7f24", "\u7e7e":"\u7f31", "\u7e88":"\u7f2c", "\u7e8a":"\u7ea9", "\u7e8c":"\u7eed", "\u7e8d":"\u7d2f", "\u7e8f":"\u7f20", "\u7e93":"\u7f28", "\u7e94":"\u624d", "\u7e96":"\u7ea4", "\u7e98":"\u7f35", "\u7e9c":"\u7f06", "\u7f3d":"\u94b5", "\u7f3e":"\u74f6", "\u7f48":"\u575b", "\u7f4c":"\u7f42", "\u7f66":"\u7f58", "\u7f70":"\u7f5a", "\u7f75":"\u9a82", "\u7f77":"\u7f62", "\u7f85":"\u7f57", "\u7f86":"\u7f74", "\u7f88":"\u7f81", "\u7f8b":"\u8288", "\u7fa5":"\u7f9f", "\u7fa8":"\u7fa1", "\u7fa9":"\u4e49", "\u7fb6":"\u81bb", "\u7fd2":"\u4e60", "\u7fec":"\u7fda", "\u7ff9":"\u7fd8", "\u8011":"\u7aef", "\u8021":"\u52a9", "\u8024":"\u85c9", "\u802c":"\u8027", "\u802e":"\u8022", "\u8056":"\u5723", "\u805e":"\u95fb", "\u806f":"\u8054", "\u8070":"\u806a", "\u8072":"\u58f0", "\u8073":"\u8038", "\u8075":"\u8069", "\u8076":"\u8042", "\u8077":"\u804c", "\u8079":"\u804d", "\u807d":"\u542c", "\u807e":"\u804b", "\u8085":"\u8083", "\u808f":"\u64cd", "\u8090":"\u80f3", "\u80c7":"\u80ba", "\u80ca":"\u6710", "\u8105":"\u80c1", "\u8108":"\u8109", "\u811b":"\u80eb", "\u8123":"\u5507", "\u8129":"\u4fee", "\u812b":"\u8131", "\u8139":"\u80c0", "\u814e":"\u80be", "\u8156":"\u80e8", "\u8161":"\u8136", "\u8166":"\u8111", "\u816b":"\u80bf", "\u8173":"\u811a", "\u8178":"\u80a0", "\u8183":"\u817d", "\u8186":"\u55c9", "\u8195":"\u8158", "\u819a":"\u80a4", "\u819e":"\u43dd", "\u81a0":"\u80f6", "\u81a9":"\u817b", "\u81bd":"\u80c6", "\u81be":"\u810d", "\u81bf":"\u8113", "\u81c9":"\u8138", "\u81cd":"\u8110", "\u81cf":"\u8191", "\u81d5":"\u8198", "\u81d8":"\u814a", "\u81d9":"\u80ed", "\u81da":"\u80ea", "\u81df":"\u810f", "\u81e0":"\u8114", "\u81e2":"\u81dc", "\u81e5":"\u5367", "\u81e8":"\u4e34", "\u81fa":"\u53f0", "\u8207":"\u4e0e", "\u8208":"\u5174", "\u8209":"\u4e3e", "\u820a":"\u65e7", "\u820b":"\u8845", "\u8216":"\u94fa", "\u8259":"\u8231", "\u8263":"\u6a79", "\u8264":"\u8223", "\u8266":"\u8230", "\u826b":"\u823b", "\u8271":"\u8270", "\u8277":"\u8273", "\u8278":"\u8279", "\u82bb":"\u520d", "\u82e7":"\u82ce", "\u82fa":"\u8393", "\u830d":"\u82df", "\u8332":"\u5179", "\u8345":"\u7b54", "\u834a":"\u8346", "\u8373":"\u8c46", "\u838a":"\u5e84", "\u8396":"\u830e", "\u83a2":"\u835a", "\u83a7":"\u82cb", "\u83eb":"\u5807", "\u83ef":"\u534e", "\u83f4":"\u5eb5", "\u8407":"\u82cc", "\u840a":"\u83b1", "\u842c":"\u4e07", "\u8435":"\u83b4", "\u8449":"\u53f6", "\u8452":"\u836d", "\u8457":"\u7740", "\u8464":"\u836e", "\u8466":"\u82c7", "\u846f":"\u836f", "\u8477":"\u8364", "\u8490":"\u641c", "\u8494":"\u83b3", "\u849e":"\u8385", "\u84bc":"\u82cd", "\u84c0":"\u836a", "\u84c6":"\u5e2d", "\u84cb":"\u76d6", "\u84ee":"\u83b2", "\u84ef":"\u82c1", "\u84f4":"\u83bc", "\u84fd":"\u835c", "\u8506":"\u83f1", "\u8514":"\u535c", "\u851e":"\u848c", "\u8523":"\u848b", "\u8525":"\u8471", "\u8526":"\u8311", "\u852d":"\u836b", "\u8541":"\u8368", "\u8546":"\u8487", "\u854e":"\u835e", "\u8552":"\u836c", "\u8555":"\u83b8", "\u8558":"\u835b", "\u8562":"\u8489", "\u8569":"\u8361", "\u856a":"\u829c", "\u856d":"\u8427", "\u8577":"\u84e3", "\u8588":"\u835f", "\u858a":"\u84df", "\u858c":"\u8297", "\u8591":"\u59dc", "\u8594":"\u8537", "\u8599":"\u5243", "\u859f":"\u83b6", "\u85a6":"\u8350", "\u85a9":"\u8428", "\u85ba":"\u8360", "\u85cd":"\u84dd", "\u85ce":"\u8369", "\u85dd":"\u827a", "\u85e5":"\u836f", "\u85ea":"\u85ae", "\u85ed":"\u44d6", "\u85f6":"\u82c8", "\u85f7":"\u85af", "\u85f9":"\u853c", "\u85fa":"\u853a", "\u8600":"\u841a", "\u8604":"\u8572", "\u8606":"\u82a6", "\u8607":"\u82cf", "\u860a":"\u8574", "\u860b":"\u82f9", "\u8617":"\u8616", "\u861a":"\u85d3", "\u861e":"\u8539", "\u8622":"\u830f", "\u862d":"\u5170", "\u863a":"\u84e0", "\u863f":"\u841d", "\u8655":"\u5904", "\u8656":"\u547c", "\u865b":"\u865a", "\u865c":"\u864f", "\u865f":"\u53f7", "\u8667":"\u4e8f", "\u866f":"\u866c", "\u86fa":"\u86f1", "\u86fb":"\u8715", "\u8706":"\u86ac", "\u873a":"\u9713", "\u8755":"\u8680", "\u875f":"\u732c", "\u8766":"\u867e", "\u8768":"\u8671", "\u8778":"\u8717", "\u8784":"\u86f3", "\u879e":"\u8682", "\u87a2":"\u8424", "\u87bb":"\u877c", "\u87c4":"\u86f0", "\u87c8":"\u8748", "\u87ce":"\u87a8", "\u87e3":"\u866e", "\u87ec":"\u8749", "\u87ef":"\u86f2", "\u87f2":"\u866b", "\u87f6":"\u86cf", "\u87fa":"\u87ee", "\u87fb":"\u8681", "\u8805":"\u8747", "\u8806":"\u867f", "\u880d":"\u874e", "\u8810":"\u86f4", "\u8811":"\u877e", "\u8814":"\u869d", "\u881f":"\u8721", "\u8823":"\u86ce", "\u8828":"\u87cf", "\u8831":"\u86ca", "\u8836":"\u8695", "\u8837":"\u883c", "\u883b":"\u86ee", "\u8846":"\u4f17", "\u884a":"\u8511", "\u8852":"\u70ab", "\u8853":"\u672f", "\u885a":"\u80e1", "\u885b":"\u536b", "\u885d":"\u51b2", "\u8879":"\u53ea", "\u889e":"\u886e", "\u88aa":"\u795b", "\u88ca":"\u8885", "\u88cf":"\u91cc", "\u88dc":"\u8865", "\u88dd":"\u88c5", "\u88e1":"\u91cc", "\u88fd":"\u5236", "\u8907":"\u590d", "\u890e":"\u8896", "\u8932":"\u88e4", "\u8933":"\u88e2", "\u8938":"\u891b", "\u893b":"\u4eb5", "\u8949":"\u88e5", "\u8956":"\u8884", "\u895d":"\u88e3", "\u8960":"\u88c6", "\u8964":"\u8934", "\u896a":"\u889c", "\u896c":"\u6446", "\u896f":"\u886c", "\u8972":"\u88ad", "\u897e":"\u897f", "\u8988":"\u6838", "\u898b":"\u89c1", "\u898e":"\u89c3", "\u898f":"\u89c4", "\u8993":"\u89c5", "\u8996":"\u89c6", "\u8998":"\u89c7", "\u899c":"\u773a", "\u89a1":"\u89cb", "\u89a6":"\u89ce", "\u89aa":"\u4eb2", "\u89ac":"\u89ca", "\u89af":"\u89cf", "\u89b2":"\u89d0", "\u89b7":"\u89d1", "\u89ba":"\u89c9", "\u89bd":"\u89c8", "\u89bf":"\u89cc", "\u89c0":"\u89c2", "\u89d4":"\u7b4b", "\u89dd":"\u62b5", "\u89f4":"\u89de", "\u89f6":"\u89ef", "\u89f8":"\u89e6", "\u8a02":"\u8ba2", "\u8a03":"\u8ba3", "\u8a08":"\u8ba1", "\u8a0a":"\u8baf", "\u8a0c":"\u8ba7", "\u8a0e":"\u8ba8", "\u8a10":"\u8ba6", "\u8a13":"\u8bad", "\u8a15":"\u8baa", "\u8a16":"\u8bab", "\u8a17":"\u6258", "\u8a18":"\u8bb0", "\u8a1b":"\u8bb9", "\u8a1d":"\u8bb6", "\u8a1f":"\u8bbc", "\u8a22":"\u6b23", "\u8a23":"\u8bc0", "\u8a25":"\u8bb7", "\u8a29":"\u8bbb", "\u8a2a":"\u8bbf", "\u8a2d":"\u8bbe", "\u8a31":"\u8bb8", "\u8a34":"\u8bc9", "\u8a36":"\u8bc3", "\u8a3a":"\u8bca", "\u8a3b":"\u6ce8", "\u8a3c":"\u8bc1", "\u8a41":"\u8bc2", "\u8a46":"\u8bcb", "\u8a4e":"\u8bb5", "\u8a50":"\u8bc8", "\u8a52":"\u8bd2", "\u8a54":"\u8bcf", "\u8a55":"\u8bc4", "\u8a57":"\u8bc7", "\u8a58":"\u8bce", "\u8a5b":"\u8bc5", "\u8a5e":"\u8bcd", "\u8a60":"\u548f", "\u8a61":"\u8be9", "\u8a62":"\u8be2", "\u8a63":"\u8be3", "\u8a66":"\u8bd5", "\u8a69":"\u8bd7", "\u8a6b":"\u8be7", "\u8a6c":"\u8bdf", "\u8a6d":"\u8be1", "\u8a6e":"\u8be0", "\u8a70":"\u8bd8", "\u8a71":"\u8bdd", "\u8a72":"\u8be5", "\u8a73":"\u8be6", "\u8a75":"\u8bdc", "\u8a76":"\u916c", "\u8a7b":"\u54af", "\u8a7c":"\u8bd9", "\u8a7f":"\u8bd6", "\u8a84":"\u8bd4", "\u8a85":"\u8bdb", "\u8a86":"\u8bd3", "\u8a87":"\u5938", "\u8a8c":"\u5fd7", "\u8a8d":"\u8ba4", "\u8a91":"\u8bf3", "\u8a92":"\u8bf6", "\u8a95":"\u8bde", "\u8a98":"\u8bf1", "\u8a9a":"\u8bee", "\u8a9e":"\u8bed", "\u8aa0":"\u8bda", "\u8aa1":"\u8beb", "\u8aa3":"\u8bec", "\u8aa4":"\u8bef", "\u8aa5":"\u8bf0", "\u8aa6":"\u8bf5", "\u8aa8":"\u8bf2", "\u8aaa":"\u8bf4", "\u8aac":"\u8bf4", "\u8ab0":"\u8c01", "\u8ab2":"\u8bfe", "\u8ab6":"\u8c07", "\u8ab9":"\u8bfd", "\u8abc":"\u8c0a", "\u8abf":"\u8c03", "\u8ac2":"\u8c04", "\u8ac4":"\u8c06", "\u8ac7":"\u8c08", "\u8ac9":"\u8bff", "\u8acb":"\u8bf7", "\u8acd":"\u8be4", "\u8acf":"\u8bf9", "\u8ad1":"\u8bfc", "\u8ad2":"\u8c05", "\u8ad6":"\u8bba", "\u8ad7":"\u8c02", "\u8adb":"\u8c00", "\u8adc":"\u8c0d", "\u8add":"\u8c1e", "\u8ade":"\u8c1d", "\u8ae0":"\u55a7", "\u8ae2":"\u8be8", "\u8ae4":"\u8c14", "\u8ae6":"\u8c1b", "\u8ae7":"\u8c10", "\u8aeb":"\u8c0f", "\u8aed":"\u8c15", "\u8aee":"\u8c18", "\u8af1":"\u8bb3", "\u8af3":"\u8c19", "\u8af6":"\u8c0c", "\u8af7":"\u8bbd", "\u8af8":"\u8bf8", "\u8afa":"\u8c1a", "\u8afc":"\u8c16", "\u8afe":"\u8bfa", "\u8b00":"\u8c0b", "\u8b01":"\u8c12", "\u8b02":"\u8c13", "\u8b04":"\u8a8a", "\u8b05":"\u8bcc", "\u8b0a":"\u8c0e", "\u8b0e":"\u8c1c", "\u8b10":"\u8c27", "\u8b14":"\u8c11", "\u8b16":"\u8c21", "\u8b17":"\u8c24", "\u8b19":"\u8c26", "\u8b1a":"\u8c25", "\u8b1b":"\u8bb2", "\u8b1d":"\u8c22", "\u8b20":"\u8c23", "\u8b28":"\u8c1f", "\u8b2b":"\u8c2a", "\u8b2c":"\u8c2c", "\u8b33":"\u8bb4", "\u8b39":"\u8c28", "\u8b3c":"\u547c", "\u8b3e":"\u8c29", "\u8b41":"\u54d7", "\u8b46":"\u563b", "\u8b49":"\u8bc1", "\u8b4e":"\u8c32", "\u8b4f":"\u8ba5", "\u8b54":"\u64b0", "\u8b56":"\u8c2e", "\u8b58":"\u8bc6", "\u8b59":"\u8c2f", "\u8b5a":"\u8c2d", "\u8b5c":"\u8c31", "\u8b5f":"\u566a", "\u8b6b":"\u8c35", "\u8b6d":"\u6bc1", "\u8b6f":"\u8bd1", "\u8b70":"\u8bae", "\u8b74":"\u8c34", "\u8b77":"\u62a4", "\u8b7d":"\u8a89", "\u8b7e":"\u8c2b", "\u8b80":"\u8bfb", "\u8b85":"\u8c09", "\u8b8a":"\u53d8", "\u8b8c":"\u5bb4", "\u8b8e":"\u96e0", "\u8b92":"\u8c17", "\u8b93":"\u8ba9", "\u8b95":"\u8c30", "\u8b96":"\u8c36", "\u8b9a":"\u8d5e", "\u8b9c":"\u8c20", "\u8b9e":"\u8c33", "\u8c3f":"\u6eaa", "\u8c48":"\u5c82", "\u8c4e":"\u7ad6", "\u8c50":"\u4e30", "\u8c54":"\u8273", "\u8c56":"\u4e8d", "\u8c6c":"\u732a", "\u8c76":"\u8c6e", "\u8c8d":"\u72f8", "\u8c93":"\u732b", "\u8c9d":"\u8d1d", "\u8c9e":"\u8d1e", "\u8ca0":"\u8d1f", "\u8ca1":"\u8d22", "\u8ca2":"\u8d21", "\u8ca7":"\u8d2b", "\u8ca8":"\u8d27", "\u8ca9":"\u8d29", "\u8caa":"\u8d2a", "\u8cab":"\u8d2f", "\u8cac":"\u8d23", "\u8caf":"\u8d2e", "\u8cb0":"\u8d33", "\u8cb2":"\u8d40", "\u8cb3":"\u8d30", "\u8cb4":"\u8d35", "\u8cb6":"\u8d2c", "\u8cb7":"\u4e70", "\u8cb8":"\u8d37", "\u8cba":"\u8d36", "\u8cbb":"\u8d39", "\u8cbc":"\u8d34", "\u8cbd":"\u8d3b", "\u8cbf":"\u8d38", "\u8cc0":"\u8d3a", "\u8cc1":"\u8d32", "\u8cc2":"\u8d42", "\u8cc3":"\u8d41", "\u8cc4":"\u8d3f", "\u8cc5":"\u8d45", "\u8cc7":"\u8d44", "\u8cc8":"\u8d3e", "\u8cca":"\u8d3c", "\u8cd1":"\u8d48", "\u8cd2":"\u8d4a", "\u8cd3":"\u5bbe", "\u8cd5":"\u8d47", "\u8cd9":"\u8d52", "\u8cda":"\u8d49", "\u8cdc":"\u8d50", "\u8cde":"\u8d4f", "\u8ce0":"\u8d54", "\u8ce1":"\u8d53", "\u8ce2":"\u8d24", "\u8ce3":"\u5356", "\u8ce4":"\u8d31", "\u8ce6":"\u8d4b", "\u8ce7":"\u8d55", "\u8cea":"\u8d28", "\u8cec":"\u8d26", "\u8ced":"\u8d4c", "\u8cf4":"\u8d56", "\u8cf5":"\u8d57", "\u8cf8":"\u5269", "\u8cfa":"\u8d5a", "\u8cfb":"\u8d59", "\u8cfc":"\u8d2d", "\u8cfd":"\u8d5b", "\u8cfe":"\u8d5c", "\u8d04":"\u8d3d", "\u8d05":"\u8d58", "\u8d08":"\u8d60", "\u8d0a":"\u8d5e", "\u8d0b":"\u8d5d", "\u8d0d":"\u8d61", "\u8d0f":"\u8d62", "\u8d10":"\u8d46", "\u8d13":"\u8d43", "\u8d16":"\u8d4e", "\u8d1b":"\u8d63", "\u8d95":"\u8d76", "\u8d99":"\u8d75", "\u8da8":"\u8d8b", "\u8db2":"\u8db1", "\u8de1":"\u8ff9", "\u8dfc":"\u5c40", "\u8e10":"\u8df5", "\u8e21":"\u8737", "\u8e2b":"\u78b0", "\u8e30":"\u903e", "\u8e34":"\u8e0a", "\u8e4c":"\u8dc4", "\u8e55":"\u8df8", "\u8e5f":"\u8ff9", "\u8e60":"\u8dd6", "\u8e63":"\u8e52", "\u8e64":"\u8e2a", "\u8e67":"\u7cdf", "\u8e7a":"\u8df7", "\u8e89":"\u8db8", "\u8e8a":"\u8e0c", "\u8e8b":"\u8dfb", "\u8e8d":"\u8dc3", "\u8e91":"\u8e2f", "\u8e92":"\u8dde", "\u8e93":"\u8e2c", "\u8e95":"\u8e70", "\u8e9a":"\u8df9", "\u8ea1":"\u8e51", "\u8ea5":"\u8e7f", "\u8ea6":"\u8e9c", "\u8eaa":"\u8e8f", "\u8ec0":"\u8eaf", "\u8eca":"\u8f66", "\u8ecb":"\u8f67", "\u8ecc":"\u8f68", "\u8ecd":"\u519b", "\u8ed2":"\u8f69", "\u8ed4":"\u8f6b", "\u8edb":"\u8f6d", "\u8edf":"\u8f6f", "\u8ee4":"\u8f77", "\u8eeb":"\u8f78", "\u8ef2":"\u8f71", "\u8ef8":"\u8f74", "\u8ef9":"\u8f75", "\u8efa":"\u8f7a", "\u8efb":"\u8f72", "\u8efc":"\u8f76", "\u8efe":"\u8f7c", "\u8f03":"\u8f83", "\u8f05":"\u8f82", "\u8f07":"\u8f81", "\u8f09":"\u8f7d", "\u8f0a":"\u8f7e", "\u8f12":"\u8f84", "\u8f13":"\u633d", "\u8f14":"\u8f85", "\u8f15":"\u8f7b", "\u8f1b":"\u8f86", "\u8f1c":"\u8f8e", "\u8f1d":"\u8f89", "\u8f1e":"\u8f8b", "\u8f1f":"\u8f8d", "\u8f25":"\u8f8a", "\u8f26":"\u8f87", "\u8f29":"\u8f88", "\u8f2a":"\u8f6e", "\u8f2f":"\u8f91", "\u8f33":"\u8f8f", "\u8f38":"\u8f93", "\u8f3b":"\u8f90", "\u8f3e":"\u8f97", "\u8f3f":"\u8206", "\u8f42":"\u6bc2", "\u8f44":"\u8f96", "\u8f45":"\u8f95", "\u8f46":"\u8f98", "\u8f49":"\u8f6c", "\u8f4d":"\u8f99", "\u8f4e":"\u8f7f", "\u8f54":"\u8f9a", "\u8f5f":"\u8f70", "\u8f61":"\u8f94", "\u8f62":"\u8f79", "\u8f64":"\u8f73", "\u8fa6":"\u529e", "\u8fad":"\u8f9e", "\u8fae":"\u8fab", "\u8faf":"\u8fa9", "\u8fb2":"\u519c", "\u8fc6":"\u8fe4", "\u8ff4":"\u56de", "\u8ffa":"\u4e43", "\u9015":"\u8ff3", "\u9019":"\u8fd9", "\u9023":"\u8fde", "\u9031":"\u5468", "\u9032":"\u8fdb", "\u904a":"\u6e38", "\u904b":"\u8fd0", "\u904e":"\u8fc7", "\u9054":"\u8fbe", "\u9055":"\u8fdd", "\u9059":"\u9065", "\u905c":"\u900a", "\u905e":"\u9012", "\u9060":"\u8fdc", "\u9069":"\u9002", "\u9072":"\u8fdf", "\u9077":"\u8fc1", "\u9078":"\u9009", "\u907a":"\u9057", "\u907c":"\u8fbd", "\u9081":"\u8fc8", "\u9084":"\u8fd8", "\u9087":"\u8fe9", "\u908a":"\u8fb9", "\u908f":"\u903b", "\u9090":"\u9026", "\u90df":"\u90cf", "\u90f5":"\u90ae", "\u9106":"\u90d3", "\u9109":"\u4e61", "\u9112":"\u90b9", "\u9114":"\u90ac", "\u9116":"\u90e7", "\u9127":"\u9093", "\u912d":"\u90d1", "\u9130":"\u90bb", "\u9132":"\u90f8", "\u9134":"\u90ba", "\u9136":"\u90d0", "\u913a":"\u909d", "\u9148":"\u90e6", "\u9156":"\u9e29", "\u9183":"\u814c", "\u9186":"\u76cf", "\u919c":"\u4e11", "\u919e":"\u915d", "\u91ab":"\u533b", "\u91ac":"\u9171", "\u91b1":"\u53d1", "\u91bc":"\u5bb4", "\u91c0":"\u917f", "\u91c1":"\u8845", "\u91c3":"\u917e", "\u91c5":"\u917d", "\u91c6":"\u91c7", "\u91cb":"\u91ca", "\u91d0":"\u5398", "\u91d3":"\u9486", "\u91d4":"\u9487", "\u91d5":"\u948c", "\u91d7":"\u948a", "\u91d8":"\u9489", "\u91d9":"\u948b", "\u91dd":"\u9488", "\u91e3":"\u9493", "\u91e4":"\u9490", "\u91e6":"\u6263", "\u91e7":"\u948f", "\u91e9":"\u9492", "\u91f5":"\u9497", "\u91f7":"\u948d", "\u91f9":"\u9495", "\u91fa":"\u948e", "\u91fe":"\u497a", "\u9200":"\u94af", "\u9201":"\u94ab", "\u9203":"\u9498", "\u9204":"\u94ad", "\u9208":"\u949a", "\u9209":"\u94a0", "\u920d":"\u949d", "\u9210":"\u94a4", "\u9211":"\u94a3", "\u9214":"\u949e", "\u9215":"\u94ae", "\u921e":"\u94a7", "\u9223":"\u9499", "\u9225":"\u94ac", "\u9226":"\u949b", "\u9227":"\u94aa", "\u922e":"\u94cc", "\u9230":"\u94c8", "\u9233":"\u94b6", "\u9234":"\u94c3", "\u9237":"\u94b4", "\u9238":"\u94b9", "\u9239":"\u94cd", "\u923a":"\u94b0", "\u923d":"\u94b8", "\u923e":"\u94c0", "\u923f":"\u94bf", "\u9240":"\u94be", "\u9245":"\u949c", "\u9246":"\u94bb", "\u9248":"\u94ca", "\u9249":"\u94c9", "\u924b":"\u5228", "\u924d":"\u94cb", "\u9251":"\u94c2", "\u9255":"\u94b7", "\u9257":"\u94b3", "\u925a":"\u94c6", "\u925b":"\u94c5", "\u925e":"\u94ba", "\u9262":"\u94b5", "\u9264":"\u94a9", "\u9266":"\u94b2", "\u926c":"\u94bc", "\u926d":"\u94bd", "\u9276":"\u94cf", "\u9278":"\u94f0", "\u927a":"\u94d2", "\u927b":"\u94ec", "\u927f":"\u94ea", "\u9280":"\u94f6", "\u9283":"\u94f3", "\u9285":"\u94dc", "\u9291":"\u94e3", "\u9293":"\u94e8", "\u9296":"\u94e2", "\u9298":"\u94ed", "\u929a":"\u94eb", "\u929c":"\u8854", "\u92a0":"\u94d1", "\u92a3":"\u94f7", "\u92a5":"\u94f1", "\u92a6":"\u94df", "\u92a8":"\u94f5", "\u92a9":"\u94e5", "\u92aa":"\u94d5", "\u92ab":"\u94ef", "\u92ac":"\u94d0", "\u92b1":"\u94de", "\u92b2":"\u710a", "\u92b3":"\u9510", "\u92b7":"\u9500", "\u92b9":"\u9508", "\u92bb":"\u9511", "\u92bc":"\u9509", "\u92c1":"\u94dd", "\u92c3":"\u9512", "\u92c5":"\u950c", "\u92c7":"\u94a1", "\u92cc":"\u94e4", "\u92cf":"\u94d7", "\u92d2":"\u950b", "\u92dd":"\u950a", "\u92df":"\u9513", "\u92e3":"\u94d8", "\u92e4":"\u9504", "\u92e5":"\u9503", "\u92e6":"\u9514", "\u92e8":"\u9507", "\u92e9":"\u94d3", "\u92ea":"\u94fa", "\u92ee":"\u94d6", "\u92ef":"\u9506", "\u92f0":"\u9502", "\u92f1":"\u94fd", "\u92f6":"\u950d", "\u92f8":"\u952f", "\u92fb":"\u9274", "\u92fc":"\u94a2", "\u9301":"\u951e", "\u9304":"\u5f55", "\u9306":"\u9516", "\u9307":"\u952b", "\u9308":"\u9529", "\u9310":"\u9525", "\u9312":"\u9515", "\u9315":"\u951f", "\u9318":"\u9524", "\u9319":"\u9531", "\u931a":"\u94ee", "\u931b":"\u951b", "\u931f":"\u952c", "\u9320":"\u952d", "\u9322":"\u94b1", "\u9326":"\u9526", "\u9328":"\u951a", "\u932b":"\u9521", "\u932e":"\u9522", "\u932f":"\u9519", "\u9333":"\u9530", "\u9336":"\u8868", "\u9338":"\u94fc", "\u9340":"\u951d", "\u9341":"\u9528", "\u9343":"\u952a", "\u9346":"\u9494", "\u9347":"\u9534", "\u934a":"\u70bc", "\u934b":"\u9505", "\u934d":"\u9540", "\u9354":"\u9537", "\u9358":"\u94e1", "\u935a":"\u9496", "\u935b":"\u953b", "\u9364":"\u9538", "\u9365":"\u9532", "\u9369":"\u9518", "\u936c":"\u9539", "\u9370":"\u953e", "\u9375":"\u952e", "\u9376":"\u9536", "\u937a":"\u9517", "\u937c":"\u9488", "\u937e":"\u949f", "\u9382":"\u9541", "\u9384":"\u953f", "\u9387":"\u9545", "\u938a":"\u9551", "\u938c":"\u9570", "\u9394":"\u9555", "\u9396":"\u9501", "\u9397":"\u67aa", "\u9398":"\u9549", "\u939a":"\u9524", "\u93a1":"\u9543", "\u93a2":"\u94a8", "\u93a3":"\u84e5", "\u93a6":"\u954f", "\u93a7":"\u94e0", "\u93a9":"\u94e9", "\u93aa":"\u953c", "\u93ac":"\u9550", "\u93ae":"\u9547", "\u93b0":"\u9552", "\u93b3":"\u954d", "\u93b5":"\u9553", "\u93bf":"\u954e", "\u93c3":"\u955e", "\u93c7":"\u955f", "\u93c8":"\u94fe", "\u93cc":"\u9546", "\u93cd":"\u9559", "\u93d1":"\u955d", "\u93d7":"\u94ff", "\u93d8":"\u9535", "\u93dc":"\u9557", "\u93dd":"\u9558", "\u93de":"\u955b", "\u93df":"\u94f2", "\u93e1":"\u955c", "\u93e2":"\u9556", "\u93e4":"\u9542", "\u93e8":"\u933e", "\u93f0":"\u955a", "\u93f5":"\u94e7", "\u93f7":"\u9564", "\u93f9":"\u956a", "\u93fa":"\u497d", "\u93fd":"\u9508", "\u9403":"\u94d9", "\u9409":"\u94e3", "\u940b":"\u94f4", "\u9410":"\u9563", "\u9412":"\u94f9", "\u9413":"\u9566", "\u9414":"\u9561", "\u9418":"\u949f", "\u9419":"\u956b", "\u941d":"\u9562", "\u9420":"\u9568", "\u9425":"\u4985", "\u9426":"\u950e", "\u9427":"\u950f", "\u9428":"\u9544", "\u942b":"\u954c", "\u942e":"\u9570", "\u942f":"\u4983", "\u9432":"\u956f", "\u9433":"\u956d", "\u9435":"\u94c1", "\u9436":"\u956e", "\u9438":"\u94ce", "\u943a":"\u94db", "\u943f":"\u9571", "\u9444":"\u94f8", "\u944a":"\u956c", "\u944c":"\u9554", "\u9451":"\u9274", "\u9452":"\u9274", "\u9454":"\u9572", "\u9455":"\u9527", "\u945e":"\u9574", "\u9460":"\u94c4", "\u9463":"\u9573", "\u9464":"\u5228", "\u9465":"\u9565", "\u946a":"\u7089", "\u946d":"\u9567", "\u9470":"\u94a5", "\u9472":"\u9576", "\u9475":"\u7f50", "\u9477":"\u954a", "\u9479":"\u9569", "\u947c":"\u9523", "\u947d":"\u94bb", "\u947e":"\u92ae", "\u947f":"\u51ff", "\u9481":"\u4986", "\u9482":"\u954b", "\u9577":"\u957f", "\u9580":"\u95e8", "\u9582":"\u95e9", "\u9583":"\u95ea", "\u9586":"\u95eb", "\u9589":"\u95ed", "\u958b":"\u5f00", "\u958c":"\u95f6", "\u958e":"\u95f3", "\u958f":"\u95f0", "\u9591":"\u95f2", "\u9592":"\u95f2", "\u9593":"\u95f4", "\u9594":"\u95f5", "\u9598":"\u95f8", "\u95a1":"\u9602", "\u95a3":"\u9601", "\u95a4":"\u5408", "\u95a5":"\u9600", "\u95a8":"\u95fa", "\u95a9":"\u95fd", "\u95ab":"\u9603", "\u95ac":"\u9606", "\u95ad":"\u95fe", "\u95b1":"\u9605", "\u95b6":"\u960a", "\u95b9":"\u9609", "\u95bb":"\u960e", "\u95bc":"\u960f", "\u95bd":"\u960d", "\u95be":"\u9608", "\u95bf":"\u960c", "\u95c3":"\u9612", "\u95c6":"\u677f", "\u95c7":"\u6697", "\u95c8":"\u95f1", "\u95ca":"\u9614", "\u95cb":"\u9615", "\u95cc":"\u9611", "\u95d0":"\u9617", "\u95d3":"\u95ff", "\u95d4":"\u9616", "\u95d5":"\u9619", "\u95d6":"\u95ef", "\u95dc":"\u5173", "\u95de":"\u961a", "\u95e1":"\u9610", "\u95e2":"\u8f9f", "\u95e5":"\u95fc", "\u9628":"\u5384", "\u962c":"\u5751", "\u962f":"\u5740", "\u964f":"\u968b", "\u9658":"\u9649", "\u965d":"\u9655", "\u965e":"\u5347", "\u9663":"\u9635", "\u9670":"\u9634", "\u9673":"\u9648", "\u9678":"\u9646", "\u967d":"\u9633", "\u9684":"\u5824", "\u9689":"\u9667", "\u968a":"\u961f", "\u968e":"\u9636", "\u9695":"\u9668", "\u969b":"\u9645", "\u96a4":"\u9893", "\u96a8":"\u968f", "\u96aa":"\u9669", "\u96b1":"\u9690", "\u96b4":"\u9647", "\u96b8":"\u96b6", "\u96bb":"\u53ea", "\u96cb":"\u96bd", "\u96d6":"\u867d", "\u96d9":"\u53cc", "\u96db":"\u96cf", "\u96dc":"\u6742", "\u96de":"\u9e21", "\u96e2":"\u79bb", "\u96e3":"\u96be", "\u96f2":"\u4e91", "\u96fb":"\u7535", "\u9724":"\u6e9c", "\u9727":"\u96fe", "\u973d":"\u9701", "\u9742":"\u96f3", "\u9744":"\u972d", "\u9746":"\u53c7", "\u9748":"\u7075", "\u9749":"\u53c6", "\u975a":"\u9753", "\u975c":"\u9759", "\u9766":"\u817c", "\u9768":"\u9765", "\u978f":"\u5de9", "\u97a6":"\u79cb", "\u97c1":"\u7f30", "\u97c3":"\u9791", "\u97c6":"\u5343", "\u97c9":"\u97af", "\u97cb":"\u97e6", "\u97cc":"\u97e7", "\u97cd":"\u97e8", "\u97d3":"\u97e9", "\u97d9":"\u97ea", "\u97dc":"\u97ec", "\u97de":"\u97eb", "\u97fb":"\u97f5", "\u97ff":"\u54cd", "\u9801":"\u9875", "\u9802":"\u9876", "\u9803":"\u9877", "\u9805":"\u9879", "\u9806":"\u987a", "\u9807":"\u9878", "\u9808":"\u987b", "\u980a":"\u987c", "\u980c":"\u9882", "\u980e":"\u9880", "\u980f":"\u9883", "\u9810":"\u9884", "\u9811":"\u987d", "\u9812":"\u9881", "\u9813":"\u987f", "\u9817":"\u9887", "\u9818":"\u9886", "\u981c":"\u988c", "\u9821":"\u9889", "\u9824":"\u9890", "\u9826":"\u988f", "\u982b":"\u4fef", "\u982d":"\u5934", "\u9830":"\u988a", "\u9832":"\u988b", "\u9837":"\u9894", "\u9838":"\u9888", "\u9839":"\u9893", "\u983b":"\u9891", "\u9846":"\u9897", "\u984c":"\u9898", "\u984d":"\u989d", "\u984e":"\u816d", "\u984f":"\u989c", "\u9852":"\u9899", "\u9853":"\u989b", "\u9854":"\u989c", "\u9858":"\u613f", "\u9859":"\u98a1", "\u985b":"\u98a0", "\u985e":"\u7c7b", "\u9862":"\u989f", "\u9865":"\u98a2", "\u9867":"\u987e", "\u986b":"\u98a4", "\u986c":"\u98a5", "\u986f":"\u663e", "\u9870":"\u98a6", "\u9871":"\u9885", "\u9873":"\u989e", "\u9874":"\u98a7", "\u98a8":"\u98ce", "\u98ae":"\u98d1", "\u98af":"\u98d2", "\u98b1":"\u53f0", "\u98b3":"\u522e", "\u98b6":"\u98d3", "\u98b8":"\u98d4", "\u98ba":"\u626c", "\u98bc":"\u98d5", "\u98c0":"\u98d7", "\u98c4":"\u98d8", "\u98c6":"\u98d9", "\u98c8":"\u98da", "\u98db":"\u98de", "\u98e2":"\u9965", "\u98e5":"\u9966", "\u98e9":"\u9968", "\u98ea":"\u996a", "\u98eb":"\u996b", "\u98ed":"\u996c", "\u98ef":"\u996d", "\u98f2":"\u996e", "\u98f4":"\u9974", "\u98fc":"\u9972", "\u98fd":"\u9971", "\u98fe":"\u9970", "\u98ff":"\u9973", "\u9903":"\u997a", "\u9904":"\u9978", "\u9905":"\u997c", "\u9908":"\u7ccd", "\u9909":"\u9977", "\u990a":"\u517b", "\u990c":"\u9975", "\u990e":"\u9979", "\u990f":"\u997b", "\u9911":"\u997d", "\u9912":"\u9981", "\u9913":"\u997f", "\u9914":"\u54fa", "\u9918":"\u4f59", "\u991a":"\u80b4", "\u991b":"\u9984", "\u991c":"\u9983", "\u991e":"\u996f", "\u9921":"\u9985", "\u9928":"\u9986", "\u992c":"\u7cca", "\u9931":"\u7cc7", "\u9933":"\u9967", "\u9935":"\u5582", "\u9936":"\u9989", "\u9937":"\u9987", "\u993a":"\u998e", "\u993c":"\u9969", "\u993d":"\u9988", "\u993e":"\u998f", "\u993f":"\u998a", "\u9943":"\u998d", "\u9945":"\u9992", "\u9948":"\u9990", "\u9949":"\u9991", "\u994a":"\u9993", "\u994b":"\u9988", "\u994c":"\u9994", "\u9951":"\u9965", "\u9952":"\u9976", "\u9957":"\u98e8", "\u995c":"\u990d", "\u995e":"\u998b", "\u995f":"\u9995", "\u99ac":"\u9a6c", "\u99ad":"\u9a6d", "\u99ae":"\u51af", "\u99b1":"\u9a6e", "\u99b3":"\u9a70", "\u99b4":"\u9a6f", "\u99c1":"\u9a73", "\u99d0":"\u9a7b", "\u99d1":"\u9a7d", "\u99d2":"\u9a79", "\u99d4":"\u9a75", "\u99d5":"\u9a7e", "\u99d8":"\u9a80", "\u99d9":"\u9a78", "\u99db":"\u9a76", "\u99dd":"\u9a7c", "\u99df":"\u9a77", "\u99e2":"\u9a88", "\u99ed":"\u9a87", "\u99ee":"\u9a73", "\u99f1":"\u9a86", "\u99f8":"\u9a8e", "\u99ff":"\u9a8f", "\u9a01":"\u9a8b", "\u9a03":"\u5446", "\u9a05":"\u9a93", "\u9a0d":"\u9a92", "\u9a0e":"\u9a91", "\u9a0f":"\u9a90", "\u9a16":"\u9a9b", "\u9a19":"\u9a97", "\u9a23":"\u9b03", "\u9a2b":"\u9a9e", "\u9a2d":"\u9a98", "\u9a2e":"\u9a9d", "\u9a30":"\u817e", "\u9a36":"\u9a7a", "\u9a37":"\u9a9a", "\u9a38":"\u9a9f", "\u9a3e":"\u9aa1", "\u9a40":"\u84e6", "\u9a41":"\u9a9c", "\u9a42":"\u9a96", "\u9a43":"\u9aa0", "\u9a44":"\u9aa2", "\u9a45":"\u9a71", "\u9a4a":"\u9a85", "\u9a4d":"\u9a81", "\u9a4f":"\u9aa3", "\u9a55":"\u9a84", "\u9a57":"\u9a8c", "\u9a5a":"\u60ca", "\u9a5b":"\u9a7f", "\u9a5f":"\u9aa4", "\u9a62":"\u9a74", "\u9a64":"\u9aa7", "\u9a65":"\u9aa5", "\u9a6a":"\u9a8a", "\u9aaf":"\u80ae", "\u9acf":"\u9ac5", "\u9ad2":"\u810f", "\u9ad4":"\u4f53", "\u9ad5":"\u9acc", "\u9ad6":"\u9acb", "\u9ae3":"\u4eff", "\u9aee":"\u53d1", "\u9b06":"\u677e", "\u9b0d":"\u80e1", "\u9b1a":"\u987b", "\u9b22":"\u9b13", "\u9b25":"\u6597", "\u9b27":"\u95f9", "\u9b28":"\u54c4", "\u9b29":"\u960b", "\u9b2e":"\u9604", "\u9b31":"\u90c1", "\u9b4e":"\u9b49", "\u9b58":"\u9b47", "\u9b5a":"\u9c7c", "\u9b5b":"\u9c7d", "\u9b68":"\u8c5a", "\u9b6f":"\u9c81", "\u9b74":"\u9c82", "\u9b77":"\u9c7f", "\u9b81":"\u9c85", "\u9b83":"\u9c86", "\u9b8d":"\u9c8f", "\u9b90":"\u9c90", "\u9b91":"\u9c8d", "\u9b92":"\u9c8b", "\u9b93":"\u9c8a", "\u9b9a":"\u9c92", "\u9b9e":"\u9c95", "\u9ba3":"\u4c9f", "\u9ba6":"\u9c96", "\u9baa":"\u9c94", "\u9bab":"\u9c9b", "\u9bad":"\u9c91", "\u9bae":"\u9c9c", "\u9bba":"\u9c9d", "\u9bc0":"\u9ca7", "\u9bc1":"\u9ca0", "\u9bc7":"\u9ca9", "\u9bc9":"\u9ca4", "\u9bca":"\u9ca8", "\u9bd4":"\u9cbb", "\u9bd6":"\u9cad", "\u9bd7":"\u9c9e", "\u9bdb":"\u9cb7", "\u9bdd":"\u9cb4", "\u9be1":"\u9cb1", "\u9be2":"\u9cb5", "\u9be4":"\u9cb2", "\u9be7":"\u9cb3", "\u9be8":"\u9cb8", "\u9bea":"\u9cae", "\u9beb":"\u9cb0", "\u9bf0":"\u9c87", "\u9bf4":"\u9cba", "\u9bfd":"\u9cab", "\u9bff":"\u9cca", "\u9c02":"\u9c97", "\u9c08":"\u9cbd", "\u9c09":"\u9cc7", "\u9c0c":"\u4ca1", "\u9c0d":"\u9cc5", "\u9c12":"\u9cc6", "\u9c13":"\u9cc3", "\u9c1b":"\u9cc1", "\u9c1c":"\u9cd2", "\u9c1f":"\u9cd1", "\u9c20":"\u9ccb", "\u9c23":"\u9ca5", "\u9c25":"\u9ccf", "\u9c27":"\u4ca2", "\u9c28":"\u9cce", "\u9c29":"\u9cd0", "\u9c2d":"\u9ccd", "\u9c31":"\u9ca2", "\u9c32":"\u9ccc", "\u9c33":"\u9cd3", "\u9c35":"\u9cd8", "\u9c37":"\u9ca6", "\u9c39":"\u9ca3", "\u9c3b":"\u9cd7", "\u9c3c":"\u9cdb", "\u9c3e":"\u9cd4", "\u9c45":"\u9cd9", "\u9c48":"\u9cd5", "\u9c49":"\u9cd6", "\u9c52":"\u9cdf", "\u9c54":"\u9cdd", "\u9c56":"\u9cdc", "\u9c57":"\u9cde", "\u9c58":"\u9c9f", "\u9c5d":"\u9cbc", "\u9c5f":"\u9c8e", "\u9c60":"\u9c99", "\u9c63":"\u9ce3", "\u9c67":"\u9ce2", "\u9c68":"\u9cbf", "\u9c6d":"\u9c9a", "\u9c77":"\u9cc4", "\u9c78":"\u9c88", "\u9c7a":"\u9ca1", "\u9ce5":"\u9e1f", "\u9ce7":"\u51eb", "\u9ce9":"\u9e20", "\u9cf3":"\u51e4", "\u9cf4":"\u9e23", "\u9cf6":"\u9e22", "\u9cfe":"\u4d13", "\u9d06":"\u9e29", "\u9d07":"\u9e28", "\u9d08":"\u96c1", "\u9d09":"\u9e26", "\u9d12":"\u9e30", "\u9d15":"\u9e35", "\u9d1b":"\u9e33", "\u9d1d":"\u9e32", "\u9d1e":"\u9e2e", "\u9d1f":"\u9e31", "\u9d23":"\u9e2a", "\u9d26":"\u9e2f", "\u9d28":"\u9e2d", "\u9d2f":"\u9e38", "\u9d30":"\u9e39", "\u9d34":"\u9e3b", "\u9d37":"\u4d15", "\u9d3b":"\u9e3f", "\u9d3f":"\u9e3d", "\u9d41":"\u4d14", "\u9d42":"\u9e3a", "\u9d43":"\u9e3c", "\u9d51":"\u9e43", "\u9d52":"\u9e46", "\u9d53":"\u9e41", "\u9d5c":"\u9e48", "\u9d5d":"\u9e45", "\u9d60":"\u9e44", "\u9d61":"\u9e49", "\u9d6a":"\u9e4c", "\u9d6c":"\u9e4f", "\u9d6e":"\u9e50", "\u9d6f":"\u9e4e", "\u9d70":"\u96d5", "\u9d72":"\u9e4a", "\u9d84":"\u4d16", "\u9d87":"\u9e2b", "\u9d89":"\u9e51", "\u9d8a":"\u9e52", "\u9d8f":"\u9e21", "\u9d93":"\u9e4b", "\u9d96":"\u9e59", "\u9d98":"\u9e55", "\u9d9a":"\u9e57", "\u9da1":"\u9e56", "\u9da5":"\u9e5b", "\u9da9":"\u9e5c", "\u9daa":"\u4d17", "\u9dac":"\u9e27", "\u9daf":"\u83ba", "\u9db1":"\u9a9e", "\u9db4":"\u9e64", "\u9dba":"\u9e61", "\u9dbb":"\u9e58", "\u9dbc":"\u9e63", "\u9dbf":"\u9e5a", "\u9dc2":"\u9e5e", "\u9dc9":"\u4d18", "\u9dd3":"\u9e67", "\u9dd6":"\u9e65", "\u9dd7":"\u9e25", "\u9dd9":"\u9e37", "\u9dda":"\u9e68", "\u9de5":"\u9e36", "\u9de6":"\u9e6a", "\u9def":"\u9e69", "\u9df0":"\u71d5", "\u9df2":"\u9e6b", "\u9df3":"\u9e47", "\u9df4":"\u9e47", "\u9df8":"\u9e6c", "\u9df9":"\u9e70", "\u9dfa":"\u9e6d", "\u9e07":"\u9e6f", "\u9e0a":"\u4d19", "\u9e0c":"\u9e71", "\u9e15":"\u9e2c", "\u9e1a":"\u9e66", "\u9e1b":"\u9e73", "\u9e1d":"\u9e42", "\u9e1e":"\u9e3e", "\u9e75":"\u5364", "\u9e79":"\u54b8", "\u9e7a":"\u9e7e", "\u9e7c":"\u7877", "\u9e7d":"\u76d0", "\u9e97":"\u4e3d", "\u9ea5":"\u9ea6", "\u9ea9":"\u9eb8", "\u9eb5":"\u9762", "\u9ebc":"\u4e48", "\u9ec3":"\u9ec4", "\u9ecc":"\u9ec9", "\u9ede":"\u70b9", "\u9ee8":"\u515a", "\u9ef2":"\u9eea", "\u9ef4":"\u9709", "\u9ef6":"\u9ee1", "\u9ef7":"\u9ee9", "\u9efd":"\u9efe", "\u9eff":"\u9f0b", "\u9f07":"\u9ccc", "\u9f09":"\u9f0d", "\u9f15":"\u51ac", "\u9f34":"\u9f39", "\u9f4a":"\u9f50", "\u9f4b":"\u658b", "\u9f4e":"\u8d4d", "\u9f4f":"\u9f51", "\u9f52":"\u9f7f", "\u9f54":"\u9f80", "\u9f59":"\u9f85", "\u9f5c":"\u9f87", "\u9f5f":"\u9f83", "\u9f60":"\u9f86", "\u9f61":"\u9f84", "\u9f63":"\u51fa", "\u9f66":"\u9f88", "\u9f67":"\u556e", "\u9f6a":"\u9f8a", "\u9f6c":"\u9f89", "\u9f72":"\u9f8b", "\u9f76":"\u816d", "\u9f77":"\u9f8c", "\u9f8d":"\u9f99", "\u9f90":"\u5e9e", "\u9f91":"\u4dae", "\u9f94":"\u9f9a", "\u9f95":"\u9f9b", "\u9f9c":"\u9f9f", "\ufa0c":"\u5140", "\ufe30":"\u2236", "\ufe31":"\uff5c", "\ufe33":"\uff5c", "\ufe3f":"\u2227", "\ufe40":"\u2228", "\ufe50":"\uff0c", "\ufe51":"\u3001", "\ufe52":"\uff0e", "\ufe54":"\uff1b", "\ufe55":"\uff1a", "\ufe56":"\uff1f", "\ufe57":"\uff01", "\ufe59":"\uff08", "\ufe5a":"\uff09", "\ufe5b":"\uff5b", "\ufe5c":"\uff5d", "\ufe5d":"\uff3b", "\ufe5e":"\uff3d", "\ufe5f":"\uff03", "\ufe60":"\uff06", "\ufe61":"\uff0a", "\ufe62":"\uff0b", "\ufe63":"\uff0d", "\ufe64":"\uff1c", "\ufe65":"\uff1e", "\ufe66":"\uff1d", "\ufe69":"\uff04", "\ufe6a":"\uff05", "\ufe6b":"\uff20", "\u300C":"\u300C", "\u300D":"\u300D" } RediSearch-1.2.2/src/dep/cndict/cndict_data.c000066400000000000000000111513241364126773500207570ustar00rootroot00000000000000 // Compressed chinese dictionary // Generated by bundle_friso.py -i friso.ini -d lex -o . // at Thu Nov 16 08:38:35 2017 #include "dep/friso/friso.h" #include #include const char ChineseDict[] = "\x00\x00\x00\x00" "x\x9ct\xbd\xdbV\xeb<\xb3-:\xe7\x9b\xccG\xd8\xeb\x62_\xec\xb7#\x84\x10l\x93\x13\t\x04H\xc2\x39\xc0`@\x0e\x10 \x07\x92" "\xbc\xcb\xde\xb1l_\xedWXUV\xef\xb2\xf8\xfeo\xb5\x36\xda\xe8\xd5\x95\xe0\xd8\xb2T\xaa*\x95\xa4\xff\xd9\xcd\xf7\xfe\xdfn\xb4[v" "v\x8b\xc1\x7f\xfd\xd7\x7f\xff\xaf\xff\xeb\xff\xfe\x7f\xfe\xeb\xbf\xa4P\xfe\x11\xe3\xf1\"^v\xc8\xcc\xf9M<\x39\x00+\xed\xe6\xb5\xf4\xe9\xd0" "g\x63\xc7\x92\xfd\x85'\xc6\x07\xdb\xff\xfa\x9f\x9cU\xf5wr\xc8i\x44\xd4oP|k\x42\xac\xc5\xa5KO\xdc-\x8f\x45\xd8\xfd\xb4P" "\xd6\x8e\x1f.\xd3\xf2\x1a\xec\x8c\xb8[\x44Y\x8f\x37y\x96,_ \x9e\xeb\xe3\xdc\xb7\x1c[\x44\xe9{\x00\xd6\x03\xf6\xe5\xfft\xc8[\x19" "\x10\xf5\xd1\xc7\x7f\x0bV\x33\xc7\xfb\x1eK\x96\xf2\x17q\xed\xd4\xf4\x9f\xf5\xb3\xab\xae\xf7Y\x1a]\x83=\xc4\x8d\x61:\xe6\x35yW/\xbf" "\xc4\xb7\xb8\xb7\x36\x9dm\xf2v\xe6\x97m\xcb\x8e-\x97\x14\xe3\xf0\xdd\x13\x8b\xfa{\x89\x1bG\xbf\x7f!\xfe\x9e\x99\xfa\xb1\x89jZ\x8d\xed" "\x9a+\xde\x96\x93\xfe\x8f\xf7\x87\xa6>\xfc\xfd\x87\xe6l\x91\r\xee\x1c\xbb\xf9\xa6\x98\x36\x07q\xad\x8f\xcb\x0cX\xa5oZ\xc1\x8d\tY\\" "y\xde\xfd\\:V\xbf\x8e\x8f.\xc0x\xe7\xef\xc9\xd2^>\xae\xf0\xda\x1b\xa2\x96\x86\xcf\x05{\xd8m\xb6\x1e\x8b\x37\xac\xe5M\\+g" "\xd5\x63\xc7\x1e.\xbd\xcf\xccQ\x33\x0e\xaf}\xd6\xac\x39\x16\x44\xfa\x62\xc3\xd3\xf4\xeb\xc3/[\x44q\x88\x82\x85|\x63\x99t.\xc9\xe2\xef" "w\x8f\xa5\x93v\xc1\x06\x44\xfd\xc7\x0e\x04V\xf6\xd9\xf2\xd8\x63q\xe5\xcd\x63\xff\xff\xcf\x98,\xae\xfc\xf5\xfeN\x98\xfc\x03{\xb4\xb8<\x94" "\x07\x37\xe7u\xb2\xe4\x62#\xff{,^\xb7\xc1\"\xa2\xe9\xdeH\x1d\x80\x1d\x13\xe5\x07\xd2m\xd3\xd5\xf6\xf2X\x7f|\x19\xc5\x8dsWP" "+\xc5\x8b\x19XG_M\xad\x04\xd6#\xba\xb6\xb9\xecI_\xd8\xadQ\xcf\xcb\x11\x90\x9f.\xf3Z\x8d|\xb6|p\xec\xe7&\xbd\xc8\xab" "\xb4jY<\xba\xe2g\xb9\n\x88 \xbbg[\xca\xdb\xceJ\xff\xc1\xb2\xf9m\x12\xbe\xc6\xb5j\xfc\xf0\x87\x9f%\rT\xf6\x12-i\x15" "\x11\xb5k\x34\xd0\xe9V\x35\xd3}Jgx\x15\xab{\xa2{\x84\xd5}<\xea\xa6U\xf7\x81\x39\x9bx\x9f\x99\xe1\xb7y\xbe%\xcb\xee\xeb" "\xe6\xb3\xe4\xd8O\xbd\xf8\xbb\xa1<\x84\xab\xc7\xd5P~Q\xea\x02\xec\x8b\x18\xff\x34 \xa2\x87\xacV@(\xbe\x9f\x0b\xa2\xbb\x87\x9f\x0b\xd7" "\xab\xd9\x01\x7f.\x8b\xa2\x1b\xf7\xa3|G\xac\xccu[z\x96\xeb\xf2rw\xc7\xa8\x92u/\xae.\xad\x8e\x95\xe6\"\xcc\xab\xd7\r\xeey" "\x33\x90js\xb7\xbby\"\xba\x8b\xa0\xff\xc6{\x35\xe0\xedn\x1e\xc4\x8d\x05\x99\x36\xd9\x13\xdb(\xe3R\x83\xa8\xfd\xec\xa9\x04\xd6\xb7\xb8_" "\xd9\xfdt\xe3\x93\x15tG\x99\xc8\x9f\x12QtW\xf2\x1c\x91\xa5\xa3%\xc5\xec\xb0\n\xf1\x10xI\xd4!\xe5\xe8\x0b\xec\xcd\x0e\x8d`S" "\xe0\xa7\xc5\x43\xdc\xe6\x61\x8d\x18\xff,\xd3I\x99,\x1d\xcf\xd8\x33\xe3\xc3\x8f\xb4\xdcOg\xd7\x64Y\xef\x98\xe3S|h_j\\\xc5\xbd" "TW\xc4\xb8\x32\x34\x33\xdb\xf4\xe3\xa3=\xa2\xbc\x1es\xf6\xe6\xb3\xd1'Y|\x84\x07;:$\x8a\xf2\x62\x37\x17\xc6\x81U\x44\xd3\xf9J" "\xeb\xdf\x64\xe9\xdei\xbawN\x96\x9d\\\x17\xe2\xd4\x13\xf1\xe5\xd9\xd3\xaf\xb2\x87_\x65\xbc\x85*\x95\x8e\x15\x93\xe0\x8f\x63\xab\xfan>t" "\xec\xa7\x9bt\xf8{\xd5\xb8\xd9\x92k&}\xf7\xa7\xf1\x64\x9a\xac^\xc8\xb2\x0b^\xe5\x04\xd8\x05^\x10\xb5W\x9d\xf5=\x66\xca\xbc\xb5\t" "p\x91\xed\xdf\x43\\\x11\xf3!\xa4\x45\xe6j \xd8\x07\xd6\xf4\xff&^h`\x35\x43\x1c\xf6\x88&\xd8R!Q\x8b\n\xaaN\xf9\xcd\x1e" "\xf7\x45\xce\x06\xb8\xdb\xf0\x63\xb7\xa8\x64{s\x32\x33\x99;\x16Uu\xb4y\xb0*\?>\xae\x00\xcf\xa4\xc7\x98\x0ez\xcc\x31\xaes|+" "}\x91\x1a\x35>\xe6\xa7h\xf1\xb5\x32\x91\x66W.\xbeP\xa4^\xd7*\xe8}\xa9\xf0\x80\xfa\xab\x85\x44\xea\x0e\x15\xd1\xed\xe3\xdam\xb6\x87" "\x9eS\xfb&\xc6\x18\xb2\xe2\xbaZ[\xb4\x99\xe2\xfa\x9d)W\x0c/R_\x11\xb5NzW>{\xa8\xa5\xdb\x0e\x0b\x64\xb4\x8a\xd7\xd3\x94" "\xf7\xda\x38&j\xab\x1b\xae\xc9\xb2+" "\x10\x63\xcc\x94Q\x1d\x83.\xd1\x35\xe8\x41\x37\xf9\x38\xa3\xe8\x46\x0b\x11\x61\x43\xc4\x37\xd0\xa0\x37\x87\x44\xf3\x8e>v\x83\x91\xeb\xf6\x38>\x1a" "\xb9G\xba=N>\x42\xf3\x85\?\xbb\x83\xb2\xb9/\x11\x45\x97@\x9c\x10Uo\x34\xdf|\x06'G\xd9\xea\xc1i\xc6\xfb/\xa2\xaf\xee\x1f" "\x30\x14\?t\xc4\xb8\xa7'\xa0N\x44\xe1\xf9:\x8d\xf8\xd0W\xe7\xb2;#\x13\x05\x1d\?\xae\xb4!>\xf4M\xe9\xcf\x7f\x14\x9b\xee\xd0+" "\x16\x1dH\x31\xbd\xfb\x9b\xf6\xaa\xa2LX\x90\xf5\xdf\x9d\x96yx\"\xe6\xa6\x38\xbf\xf3\xe4\x14\xb2\x88\xacO\x11\xe7#\x8a&X\x38\xb1\xfb" "\xc7\x13\xdd\xfb\x12\xf6\x36\xa4\x98l\x1e(\x66\xe7x\x19\xd4\xee\xaaT\xf6<\xa7O\n\x64\x04\x35\x17\x97\x64\xe6\xfc\xda\x9c\xa1\x41p\x98z" "\xf8\xab\xff\?\xae~\x33\xd7\"\xa5V\xf4\xa1\xe9r\xd2\x88_\xe4\xcd\x8e\xdd-g\xe6\xf5\xb6`\x0f>\xd3n" "r+\x06\xc2nY\x17\x03\x80\xc5\xa2\xe7\x9dJ\xb5l\xb2q\x8c\x43P.\xa6\xeb\xb5\x63\xbd\x9e\xd3\x1e\xc2\xd8Xs\xd1\x0c\xdc\xb5M\xff" "\xda\x89\xe3\xce\xef\x1bW\x03\xe9\x7f\xf4~\xfb\x03ox\xfco\xfb\x61Q\xf2\?\xff,\xc8\xbf\xf2\xfb\x8fl\xb8\xca\xec\x9d\xee\x96\xa7\xc9\xea" "\x83\xbf\xe0\xbe\xf1\xef\x9f\x7f\x11\xc5&H\x9ah\xe9\xcb\xd0w\x36\x96\x61\xd6y\x94\xcb\x64\xa5Q\xd2\x83\xe1\x43#\x61\xd9\xd9m\xa7q\x05" "\x83\x12_\xc1\xf2\x89\x98\\\x1e:Sj\x15\xa8V\xe1p\x84\x98\x89\xa0j>\x04v\xe2\x9f\x1b\x62\xfe\x7f\xcf\x63\xd9\x1f\x34\xba\x9f\x85\x39" "\xae\xc6{\x1b\x8f\x65\xb7\x18\xb1\x39`m\xf6\xd4\xf9\x62\?\x10&^U\x00\x03i\x03-\x8d\x18\x0e\x03\xa7\x82y\x14\xf4\xda\x63\xe6\xe0\xd2" "\x63\xae\xefl\xd4\xf2uj\xad@\xfb\x99\xc7\xcc\x41\xc3\x63N\x93o\xcb\xe6x_\xab\x98MN\n\xba\x37.j\xb1\xadil\x65\x8b\xdb" "\xdd~\x12\xf3X\xec\xc8\x63\xae\xc3o\xd7\x44\xea'\xb3w\xe2\x85\x1c\xcd^\x07hG\x0fS\x1a\xc7\xc3\x03\xf9\xe7\xd8\xe4\x32~\xb3^\x87" "\xd9\xd7\x0e\xc8\x80\x02\xdf\x9e\xe0N\xe3\xb0\x35\x30\xdb~\xcc\x41Im\x15h\x33>\xad`\xfc\xf6\x90\xde\x1e\x83\xd9.\xc2\x18l\xae\xb3\xe5" "\x85T\nV\x63\xd4\xd5\x1c\x11\xbf\x81[\xbd\x97:\xbe\x0b=i\x63\xd8\x34[\x95-\x1f\x18\x8d\xb1\x8cV\xb9\xb0\xf8\xb8\x12\x87W\x1e\x33" "\x8d\xb5\x63#'J\xe3\xa6\x1dh\x82\x36\x10\x95\x16\xfc%\x8a&\x94q\xce\x63\xf4\x1ah\x85\x9aP\x63\xe4\x62\x61\x80\x85\x44w\xef\"\x86" "m'\xbe\xadL\xe4\xbek\xa6]\x8a\xd9\xc9P\xfcr\x31\x02\x41;%|r\x06<'z\xf1\x30\x13\xe2&\"\xd4W\x84[\x8dj\x44" "\xfd\x36|;\x61q\xed#n\x1e\x81\xe1\xed\x44\xf8\x85\xa8\x07\x1cz\xde\xa1\x65q\x65\x08\xf6\xec\x9a[\x84\x97\x11\xa1\x46\x8f\xab@\xdc\xc2" "q\xfe\x87\x18&-s\r\xa2V\xd1\x90\xd7\xcd\x0c\xcc*!S\?!\x16\xe2\x1d\xf0\x19\xf8*\x8e\xb7tt\xed\xa9\xb0.\r\"|\x82" "\x9e\x39(Lg\n\x10\x0b\xa2\xb5)-\x81\xa3\x92i\xa2\xe9\x36u\x42\xc7\xdc\xa2\x8aZh\x01-\x34\xa0\x13\\\x00\x66\x83\xe9\x8c\x81\x0b" "sZI\x37\xb6\x37\x9a\xd3\x19\x8dlsV%j+\xdf\xfb\xf1\x19\x62\x05\xc2\x44/\x8a\xffN&\x8dWl\x98x\xef$\x8d\xa6Y\xef" "\xc0LQ\x85gx\x96\x33^\xfb\x01\x38\x01.\x88\xa6\x1f\xe8\x15*\x7fU\xee\x8cM\x63\xc6O\xe8\xa3\x9a.\x1aT\x17\xcf\xdd\xbd!\xc6" "\x8d\x31g\x05\x94m\xa5\x82G\x64\xe2!\x30\xba\x07\x86\x41\x02\x0c\xaa\xd4\x32\xf7~-\xeb\x07>\x83\x61\x64Yr=\xf4\x18\xa7\x37\xc1\xf8" "\x42s\xe6z\x96\x65\xdd\x95\x63\xe7\x63z\xb5\xc2\xe4k\x8c\xbe\x8a;J\x94\xf7o\xe0\xfe\xe7,`\x00\xc9\xb2\xec\xa1Y\xb0Z\xae\xec\xe5" "\xc5\x64\x97\x9d\x7f~S\?\xfb\xf7O\x96tO\x94yz\xc0\xb2^\x85\xcc\x9b\xbd\x33\xddG \xef\xf7\x8b\xb8+\xa6\xb1,\x63\xf0V\x99" "\x1av{\x1e\xcb\xf6X\xbf\xe2\xe9\x87\x9c\x03q\xccu\xd4\xbc\xc0\xbb\x90\x30sq\xec\xb1\xac_'\xa3\xd7/~\xaf\xfb{\x11k!g" "\xba\xd5!\x86u#/\x00\xf8\xc3\xd0\x81\xb9(\x03\xf1\xd1\xe5L\x8d\x90\x31zso\xf0\x8b\xbd\x13\xb3\xf3\x0fx\xc9\xc2p\x03\x08\xec\x08" "\xd2T\x30}t\x9f~\x8f\xa8\xcd\xf5\xea\xc6\x63\xd9\x45\x85Lu\x35[Y\x7f@\xd4:}\x38%\x33\x83\xb2\x18\x86NS\xff\xb2\xae\xf2" "\x02Y\xa1\xaf\xf5\xa1\xae\x07\x87\xe2\xaas\xc2\xc3\x0cp\xf5" "\xc1-\x91\x96\x85\x88i\xf7\xc1\xbd\x01\x61\xb7]\x8a\xd9\xd5\x9b\xf9\x38u\x8c*(\x17\xa5\x8a\xe2\x90W\x1b\x12w\x85\x99\xa4L\xack\xc4" "\xa6\xcd`L\x8c\x87_\x14\xcd\xf4\x81\x62\xb2\xc1[\x1f\xe8\xa8\xcc\xd0m\xce\x02\x8f\xf9\x8fzu\x9a\xad\x0e\x92w\xa8\xfd+\x34\xca\xab\x41" "\x12\xbd\xba\xe6{\x05\xcd}\x85\xdf\xbc\x9e\x9av\xdd\r\xc6\x37\xb8\xd2MK\xa3\x9dT\x06\x37g:i\x87\x19%s\x83+\xdc\xf0\xd3\x45" "\xf2\x86\x97x\x83\xdb\xa2\x31r\xfb\x45\xa4%j\xeek\x32\xe2\x8b\x90\x1e\xe1\xf1\xeeOl\x15&]T\xec\x10\x17\x41\xa8\x44P]\"\xf8" "\xde`\xf0\xbd\xcd\xe3\xca\x8b\xe5\x99\xe7[\xff\xbe\xe0\x86\x08\xc6\xd5\xb5\x39\x9d\x38\x96g/x\x1f\x9b\xbd\xa7\x42\\\xedV\xe7\x8e\x15\x33|" "\x8e\xd1\x94\x96\x02\xc6[\x19\xf0\x12\xdc\xd9\xe4\x85\x83\xcb\xb8\x36\xf1\xca\xd2\xaf\xc8\x63\xd9\xeb\x0f\x99\xf8>\x9c\"\x15\x66Z\x07\xf1zJ\x96" "\\\xac\xdc{y[i\x1bp\xbf\xb7\xf2\x66\xe2\x9d=\x32\xfa\xf4\x95\xc8\x18\x83\xe9\xb8\xa7\x9es\xe4\x98\x33\xd6\x30s\x62&-\x19\xd6w" "[\xb4q\x04\x8b\x05}\x83v\xd2\x89[\x9fn\x84\x99<\x11u\xbahyl&#\xaf\xe0\x37K\xee\xa0[&\x33\xd7\xa5\xde\x9b:\xc7" "T\x0b\x38o\x62>\xee\xb4\x80V\xd6\xc7\x9d\xbc!\x46\xc1\x85\x99\xfe\x8b\xb8\xa2\xbf\xd9\xbf|o\xe5\xab\xf9\xd9\x86\x98N\xea\xae\xed`\x96" "\xdc|\x1e\x8a.\xcc\xd8\xce>\xd1\x9e\xe7\x15}\x96\xe1\xa5\xc7\x92\x8b\x35\x99\xe7M\ts\xe3\xc7\xb2\xef\x1ek\xd9O\xca\xd7\x9e\xe8>@" "\xc8\xdd\xacn\x39\xfb#\x62r\x87\x1a_\xcd\x88\xee\xfa\xeb\x37\x35U\xc1\x92\xd2g\xd2\xbf\x66\x1bM\xf6\x03\xe0\x88(\xfd\x89\xe1h\x8e\x14" "\x82\xde\xa5-\xfb\xf5\x99\xfb\xfanq\xed\x31\xde\xb2\x88\xf2\xf3\xb6\x31\x9b\x8f[\x96\xe9\xad\x84{\x8e\x15\x17\xcc\xf6W\xf1\xb5}\xf6$\xa8" "\x12\xbd\x00\x96\xb0\xf8p\xe2\x33\x04\x35T\x44#Wq\xf4\x37>=$\x13\xdb\x99\xa1|\x65\xd3\x17\x33\x8b\xc8\xd2\xeaG:\xbet\xac\x88" "{%\x41/n\xfe\x14\x97\xe7\xb5m\xb4y\xe5\x31\x06WsV\xe3x%,\xbb\xa8\xf9\x7f\x1a\x8e\xc5\x41\x94\xff-\x8b\x9a\xea\x9bVp" "#\xf5\x31\xd1\x04\xf7\xbf\x0b\x92\xd9\xd3\?\xca\x90\x1b\x92\x34\xb5\x66\xb3\x85\xd5\xf4I\x1bw\x81\xce-\xb8+\x92\xcdr\x86\?\xeb\xbc\xd3~" "NN_\x88\x8c\x08%\xdd\x8a\x9aJ\xe8\r\xc9\xb9\x8d\"\x8a\x9a \xee\x10\x04\xf4,\xf3\\\x89h\xe2\r\x9dG\x9d\x66@\xb4$\x81\xf9" "\x94\xf4\x1a\xc0\x13\xe0\x39\xd1\x7f=\xc2\xeeQ%\xbd\x91\xe6\x06\x1d|\x91\xf9\xd7\xef\xf1\xe2\x33\x9d\x37\xc7()L\x86H\x06\x0c\x84\xd1\xb8" "IzsoR\x97s\xf6\t\xa6\x9b\x04\x39\x0cZ\x91\xaa\xaf(\xfd\x11S\x84\xe3\xad\x30\xb9\x42\xf2\x87\x17\xfbQ\xb3\x12\x16t\x32\xd8#" "\xaa\xb2\xac\x88I\xa6=\xb4w\x9e\\\x1e\xa6\x9b\xf6\xef\xcf\xfe\xe5\x93\x05\xd1\x9b~L\xaeZ^\xf6\x62r\x85g\xbdz%\xba\xdb\xbd\x16" "\xed\xf7\x96\\\x1e\x80\r\x35\xec\xf5t\x0f\xa6!\xb8l\x8e\xa6qS\xa2\x85\x9a\xdc\xd4\xbc\x10\xb6\x65\x0c\x64'\x37x\xf9\xd0\x30\xc9\x1d\xfe" "\xfc\x0e}\x62x\x45\x34\xa7\x17\x14\x39\xa4&O\x41z\xd1q}\xeb\to\xe5\t\xaf\xff\t\xaf\x1f\xc3\xa2\x0e\x88l\x94\xcf\xa8\xda\?\xdf" "\x9e\xe6\xa4\xcb\x9e\xbchn \xe7\xf3\x93\x97\x01\x31\xed\xdb\xc1;\xf9{\x03\xc4\xcb\x7fm\x11\xa5=\x31mI\x98\xe7h\nK\xd6\xa3\xe2" "\xb3\x0e\xd1\x9b\xd6\x10\x16G\x9b\xac\xb3G&~\xbbx{\x1e\x33\x03\xff\xb3\xa4\x82\xday\x0b\x88\x8cR\xa9\x88\xc9]\x15\x87\xe8\xa2o\x0b" "/*\x93\x8cji\xb8/zT^h\xd6\xfb\x8a\x9b\xd0J#\xbc\x8b\xd1K\xde\xe7\xef\xc0\x34\xbe\xbb[U=\xe6\x34\xd7\xe8M\x13\x0f" "z\xbc\xac\x1d\xb5\x93\x31\xbe;\x86\xfa\x9fT\x89\x85\xf8$\xd6Zz\x84.\x37]\x11w\xdb\x81\t\x1f\xc4\xa3t\x9a\xed\xfd\x84\x98`\x16" "\x35\x91\x61\x14)/\xc9\xecN\xfaG\xd2\xf9&\x93\xf1\xdf\x31\xc4\x1c\x05w\?\xa5\xdd\xfc\x92,\xbe\xff\x1b\x8f\xce\x1d\x43\xc4M\xc4\xdf\xc6" "\x93\x16\xdc\xe3\xc7\x97si#t\xdd\x13\xe4\xcd\tz\xf3\xa0\xc2\xe2\xf9\x31}\x0f\x65\x9b\x11#\x43\xc9\xea\x80\xc8\xf8\x37\xed\xe1\x64\x85V" "\xb6\xc2\xfb\xe3x\xf8sJ\xe4\x88\x9d\xac\xd1\x88\xd7-\x1dN'h\xbc\x98\x9a\x10t\xd7\xde\x9e\?\xd2\x80No\x9f\xe5/\x0c\xec\x0b\xb0\x41\xd3\x63\xae\xf6n\x9f\xb3\xc1\x15}!\xcb\xe2*\xba\xd7\x9d\x1d\x65\\" "\xeb\x13\xf3\x61o\x43\xab\xd3\xc6\xa8\xcci\x85,;\xb9\x66\x32\x86\xb2\xbf\xe7\xbb\x35:\xdb\xd3\xa1\xfa[+^\xe5\x88\xa8\xcd\x62}\xe1\xb1" "\xac\xd4%\x93[\x81\x18\x10\xb3\xc3\x13\xf7\xba\x30\x38\x0b\x66\xed\xafx\xceK_\xc9\xff\xf1\tj\xe7\xe9Q\xe3\xcf\xf0\xb8,\x33K\xdc<" "\x9b\xcb\xf3\x9e\xfe\x05\x42\x8e\x96\xb9jWVs\x7f\xaf\xec!\x1d\xbf\x15\xec)\xdb\x7f,\x98\xb3gr\xb6t\x8d.gY\xb5\xe6\xd8\x62" "\x90\xfd\xd4\x1d[\r\xd3\xce\xfa\x37\xe3\xe8.\x05q\x65\xe6\xfd\x88g\x07\xe4,\x64\xee\x1b\x18\xf5I\xce\xbc[\x65\xc2\x90\x8a\xa3K&\x86" "\x0b\x33\xe1\x81&\xd4`\xd2\x46\x0b\xbawqU\x9aZ\xf6\xe7;\xfb\xf3*\xad\x34\xdd\xae\x7f\x7f\xf6o\x9f\xa8\x32/\x1e\xf7\xf7\x13\xa4\xa3" ";\xef\x07\x35j\xfd\x9c\x10=[\x90\xceN\xfa" "\x65\xc7\xf0\xf4\xbbL\xf4\xd2\xe8\xd2\xef\x31\x91\xf3*\"\xba:\x15q\xf1\x11\x8f\x02\x32\xd7\xa7\xbe\xc7\xc9\x63\xc3\x9c\xf3\xd2\xe3\xecv\x99\xdd" "\xd7\x1d\xbb;\x8c+G\x8e\xdd\xd7\xe3\xc9\x39\x18^\x81N_\x7f\xc8h\xe7X\x63\x1cWo\xc8\xbc\xe9\x19\x30\xb8\"\xe9\xe2+_\xfc\x83" "\x9b^\xfe%\xea\x04\xe6z\xe1\x98\xce\xe2\xae\x1c[\xf7\xff\x63\xd9\x82\x66:\x9c\x8f\xd3\xf2\xa1\x63\x98\xefJ\xd7\xe8\x42\xebgQ\x44\xee\x99" "\xd6\xaf\x44\xfaO\xe9\xda\xda\x98\xe9\xa6\xac\xfa\x0b\xb1\xa0t\x83+n\x8e\x88\xce\xd0\xd8\\\x89%\x9c~^\x81-\x88\xb4\xb7\x99+\x95n" "\xaf\x88\\\xa9#\xa2\x97\xdf\x9an\xdf\xa4\x80\tx\xd9\x9e&\xcb\xeb#\x63h\x65\xf4\x9d\x06\x88\xa0\xf4\\\xc7J\x35\xa2\r\xf5\x15\x05m" "\x62\xda\xb0\x41\xf3\xac\xfcL\x64\xe6IVy\xcd\xff\xb7&zv\x88\x9f\x42\xab\x14\xd4!\x15\xb6M\x9e\x9e\xee\x66\x9a,\x93\xe1-\xbd\xb8" "\x14\x9b\x96\xed^\x8a\xbd)'&\x82\n&\xef\x43\x88\x17\xd2%\x39\xbd\x9cu\x1e\x88\x9a\xc1t\xfd\x01\x36\x02\xdaZ\xcdN\xf3\xa8\xf0\xf5" "\x1b\x19-\x38\x15k\xa1\xfb\xa0\xfbL\xd4i\xef\xbd\x01\xd8\x0b\x91\x13\xde\"z\x89'Yw\x44\x14\x1b\xd5\x8b\x8e\xd0\"\xcf\xd0\x31\xe2\x01" "\xae\x8f\xfc.\xcd\xd9\x41k\x10\x91\xd6\xb5\x88lg\xd9\xb9\xcez\xd0\x7f\xb0\x8c\xb9_\xd9\x05\xea\xfc\xb2\x42\xcc\x97o\xd4\x1c+\xdc\xa3\xac" "\x87\xb7%>\x16\x1a\r\xa7R\x04\x39\xad#\"[\xb3\x88\xee\xe6\x31-'\xe8-\r\xb2,\xf9\x39\xf7\x18M'\xb2\x9a\xcf\x36W\x1e\xe3" "t\x93\x30\xb6v\x15\x35\xb1\x0f\x8f\xca\x17y\xfd\x41\x43*\xbb\x45\xa5!L\x9e\xdd.\x88\xf6\x7f\xf7\xb0\xb7K\xf7\x90\xb7\x1bQ\xbe\x1c\x04" ",\xa3*\xcen\xf9\x9dm\x36\xc4\xfbG\x0c \xbb{\xdc\x15>\xb5\xea+\x64\?g\xf7W\xf1\xe1;\x43p\x9c\x94\x93\?\xf7\x86\x83l" "\x88\xd6\xf0x\xa4\xc1\x1c(\xd6\xec\xd1\x1a\xc7\x32\x00\x12\xf5\xff\xab\x1a\x99*\xd6\xef\x81\x63\x9aq\x89>\xf4\xf2\x9c\xdc\xe1\x95\x7f\xa8\x91\x92" "\x1c\xbd\x90i\xe3\xf8\xcd:\xef\x64IPul~\xaf\x39\x12\xac\x86\xe5\x46\x06\xe3x\x84\xcb\xff\xb4\x45!\xd2S\x12\x96{Z\x11\xd8J" "\xdagR\x9a\x14\xac#\x7f\xea\xbe\x0c\x37PP\x63\xc1\xa7\x33\x32o\xf9\x43\xb6\xb9\xd0[>~\xf1X\xda\xab:\xb6\x18\x30h\x92\x8es" "\?\xb3\xa4\xfd\xa4\x36\x86\xcd\xaf,\xb9\x1d\x15\xac\x44L\xf6O\xd0\x32\x85\xb5\x80}\x8b\xcb\xe3\xa4<\xa6\x88\xf5\x45\"\x0e\x81y\x35\x94\x62" "\x1b\x95,\xc5\x87\x95\xac\x32\x86\xf8j\x31\xbc\x89\x87\x33+\xd6\xf0Q\xe3\x1e\x8b\x8cJ\xf1``\xf1*J\xf7\x07\xc9~\xdd\xb2\xeb%\xd1" "\xfc\xb9M\xcb_\x96\xd9\xe9\xc6\x12\xec+\x45\xe4\xe1\xa9h\xeeJN\xb4\xb3\"*\x62\x06-\x17\xef\x1f\x9c\xf8=\xa6\x98\x9d\x36\xad\x38\xc2" "\x9f\x8fn\x34{r\xf9\x06\x66k%\xb6\x63k\t\x43\\)\xde\xe6]\xab$\xe3\x9c}.\x9d\x96\xc6\xd3\x99\xfe\x8b\xc5\x41\x8b\xd5\x63\xa6" "\x03sn\x1f\x18\xa1\xebR\x11\xf2.\xb1~\x05\xb5\x8a+s\xb0o\x8b\xf5w\x8b\xf7\xa1\xc5\xa7Z\xb2\xd2|\xb2\x64v\x63\x0b\x9em\xa5" "%\xaf\xcf^\x65!u\xbd\x94\xeeW\x11\xc6-\xa5\x95#\xef\x0bi\x30\xb1\x18\x8d\x89\xde\xa7\x99\x8dq\x94x\x37|\xf1\xd9\x61\xcf\x62\xef" "\x8b\xa8\xdd\xeb\xd4\xdek\x36\x38\xb1x\xfd\x92\xda\x85\x44\xa5\xec\xf1\x82(\xbe\x98\x15\xa5\x13\x06=${\x94\xb2\xf7\xfco\x35o\x8a(\x83" "\xad\xa8\xdel\xf0G\x46.\xd3\xd9\"i\xa8\x8c%\xa3\x8a\xc5\x02N\x65\xc5\x02R.\x03\x12\x0c\xf3\x45\xa6\x91\xc7\x64x\x04{\x01z\xcb" "x\xcb\x88o\x96\x31\xd2+\x9a\xfe\x35\x14\xb7\x32M'\xb4k\xb3\xcax\xaf\x65,\x65,\x63\xd5_\x99w\x81\x01]\x31\x9f\xcb\xda\xfb\xc5" "\x02\x9f\xd9\xce\xe8X\xc7\x63X>K\xd6\xebY\x66\xd7>\x95\xb1\xceQ\xd1\xfd\x80\x8a\x65O\x8c{k\x19\xad\xb0(\xc3\x96\x05\x85\xf8\xe2" "\x44\xbb\xbe\x37\x17y\?\xb9\x08\x17\xcc\xb2N!\xba;p\x0f\xac\xe2\x9b\x13y\xab\"\xbe\xbb\xbb\x44|\x1f\"\x96\x9e\x96\xb1\x84\xab\\," "\xe1*\x63\xd9P\x19k\x84\x14\xcd\xfb\x07\xc4/s\xd3\x82\xf8M,\x16\xe8\x94\xe3\x66O\xb4\xac\x9a\xa4|\x35'\xc7\xf1\xcf\xa3\x15m\xaa" "[\x39>\x9fi\x8b\xf9\xb9\xf1\x18\x82\x96Z\x63\x44}\x1f\x8b)\x99_\x8fvq\x87\xa2{\x19\xf7\x13\xa2\x8c\xb2\x62[X\x66\x17;(" "\xc6\xdf\xc3\xdd\xfc\xf2\x1f\xd7\xb1\x43_\x19\xb1\xcar\xfc\x14\xc6\x8f\x0bM\xbc\xe0\x17\xde:\x44\xed\xef\xd6\xa4)#O\xbb\x1cO\xf7\xcd\xd5" "\x97\xb9:\x00\x0b-~\?!\x1d\xbf\x1c\xcf\x1f\x93\xeb\x0fs\xd6\xca\xa6\?\xb6\x80o`\x31\x33G\xe7\xbb%\xda\xc2\x12\xd5\xf3\xf3\x98\x34" "\xf1\x85\x9f\xb1&\x15\xd9T\x8dr\xbc\xc6}\xda\x44\xca\x32\xa2\x0b\x8a\xf2\xd2\xcd\xab\xfd\x96\xa6\xd9I=\xda\x80\x9c\xb0\x37\xbd\xc2\x9b}\x93" "&\x91\xff\x93\xe5'\x99|\xe6\x98(\x86^\x0f" "q\x8b\x32\x92\xa2\xca\xc8\x02RL\xcao\x10\xed\xdb\x80G\xa5\xc8\xd7\x66z\xb6\x45 \xed\xa4\\\xa4\x9d\x94\x91\x9eQ\x46N@\xd9<\xbf" "\xe8\x8f\xff=\xb3\xecM\x13}\x10\xd8Q\xa6\x11j;\x8d\x90\xb3\x1b\xfc\xd1\xdb\x63|\xff\x17\xe2J\x1fz\xb6\xb2l\x84\x87x\x17\x43%" "\x37\xe6\xca\x18\x18\xca\xc9\xd1\xb7\xfe\x90M\x8c,'y\xed$\x91\xbd\xbf\xa4[Q\xd6\xb5\xdd\x0bSl\xe5\x62^\xad\x9c\xdc}@\xf1\x97" "\x93\x97\x1a\xd1k<\x1a\xfe\xfe\x1c\xc5\xe8-R\x97\xb6^-\xb3\x41\xebr\xb2\xa9\x13w\x0b[\x0b\xbah@^\x12T\x0e\xe2\xbe\x8a\xee" "\x0b\x36R\xa7\xc8\xe6\x97\xd6\x1e\xf4\x66\xed(U\xa6*\x41\xc4H\x31^\xdb\x66\xae\xe1\x90M\x84\x08\x9a\x32'\xda\x61\xba\xac~\x1c\xbe\x9b" "U\x8f\xa9\x0b\xac\xc8W\x99Uk\xf1\xb0\x61\x45\xf1\x43\xe4\x87\xad\x1fR\x46\xf2H\x19#\x96\xa2~zW\xf7\x18G\x06\x19\xbf\xb4\xf5\xad" "\xf0\x17\x62^\xdb\xf1\xbe\x0c\x13\xba\xac\x96q\xe5\x19\x89k\xe5\xec\xee\x46k\xc5\x1a\xdd\xea\xa9\xea\x90\xb3\xc6\x85\xdfp\x91\x0f\xf9g\x1fG" "L\x34\xac\x86\xa9\x42\x63W\xf1\xde\x14u\xdd\x8f\xd5\x85\xca\xcc\xfb\xad\xe9\x07\xa6\xfc\x81\xa5\xbdU\x04-\x15\xcd\xf7\xd4\xd8x\x82\x32\xf9Y" "i\xa3j\xf1\xf6'\x30\x90\xf3\xac\xc3\x87i\xf1#\x35\xf1\xf1\xe3\xefw\xb0\x33\xa2|\x01\x9d\x43Y}:\x82" "\xe5\x99\x17\x8c\xfeRLnJ\x14\xb3\xfd\x91\x8cri\xa9\x93\xf4\xae\xbd\x32\xcc\xd2U\xe3\xfe\xbdN\xf8\x06\x35\xa4\x36V\x63\xfe\xd2\x00\x35" "`\x13\x65\xabX\xc3X\xcdW-\xd6\xe0\xc3\xfc^\x7fH\xe6>\x9b\x11\xb3\x93\x15\xe2\xf2U\x38^U\xf8JU\x04/\x05\x07P\xd5U" "\x64\x02T\xf3\xa5iM\x8aIi\x8c%\xbf\x39\xeb\\\xef\xd6hl\xe3-\x96_\xabh\xba\x37\xc9\x19\x1a\x03K\xa7\xd3\xec\xd4\xf6\x65\x98" "\x92\x8a\xfe\xfb|\x9f[\xfcx$R\x39\x61\x64\xad\xaa\xd9\xf3\?\x16\xf3\xb6\xf6\xdf\x9a\x98\xcb\x46\xb7\x98\xb9w\xba\xc0\x95\x96\x1d\x62R\xfa" "\xa4\xd2\x13\x96\xd6\xc6\x14\xb3\xce\x9b\x15\xb7\x9f\xa2\xcd\xe0\xd4WM\xe9\x8b\xa8\x1a\x64\xd9$\x33\xab\x0e\x8c\xbd*\xbb\xa4\xe0n\x33\xa6\xa8!" "\x0f\x1b/\xab\"\xdd\xbb\n\x8b\xa6\x8a\x8cm\x45U\x10\x0f\xb6^\xd8,\xcd\xc5\x32\tl_@\xe2\xb5\x62\xfcs\x8aYO&\x42W\x61" "\xcfT\xcdu\x03{\x38\x41\x64G\xfb\x95\xe8gY\r\x81\xa6*\xcc\x95\xaa\x99\xb4\x80\x33\xed\xf4xG\xe6#\xc0\x98\\\x35\xb3\xc8\x95~" "\x96\xcc\xc5x\xb7\x42\xd5\xa0\x32\xbc\x1a\x15\x91}\x46\x45T.\xc7\x10\x41y\x10\xfd\xc0\x66\x87T\x93\xd0Vn\x12]\xa9\xfb`\x43gU" "LN*R\x07\x89(\x0e\x01\x87\x32\x61N\xb4n\x89\xe0(\x19\xac\xe5\x9f\x65\xb7V\x91%\x8f\r\x62R\xef\xed\xe6\xeb\xdd\xd2v\xcf\xe4" "\x89\xfbMT\x91!RM\x46o\xa6s\x42\x65-,\xf9\xb3ulZ\"\xea@\x37\xde'\xd3\xac\x65\xeb&T\x91\x1aQM\x66\xaaJ" "\xb1V\xbf*\xa8l\x66;J\xb2z\xd1:\x46G\xb4\xcc\xfd\xfej&\xed)Yw\x45Q&\xeb\x16\xcb~\x8b\xa2&\xe2\xe6\x11,\x98" "j\"M\x42]\xac\xdc\xc4\xab\xc2\x82Q\x14+\x1fQ\x94\x9c\xd9\xa8\x1d\x44\xcc\x8a*\xc3\x94\x8e\x8a\x88\x11\xa8h\x97\xafXv\xf4J\xd4" "'\x1dZs%\r\x36q\xc3\xde\x34\xdc\x7f\xc5\xe4\xcdv\x39\x19R\xe4\xa6\xd2\x8d}/i\xed\x9e\xc8.\x8c)\xf6*\xe6\t\xab:\xd9" "T+;\x36\xbd%\xc6\xc7\x15\xa9\x0e\x32\xd3\x9bQ\x8b+\xbb\x1f\x15\x9fYS\x06S@\x8a\xba$v\x66_@\xfai\xab\x1eK\xff\x14" "=M\x83\xe9\x87*\xad\x08L\x08V\x91\xf9\xa9\xc8\xdbV\xd3tz\xcd\x9e L\xfc\xb0\xf8\xf6\x9c,\xdd\xae\xb1\xef\x87\x32\x1d\x80l\x18" "\x95lS\xf2\x98\\\xc8\xb1\x45\x03\xd9OU\x04H\x15\xcd\xbb\xedO\xd9\xe5!Q\x46\x96t\x34\xfa\xcd\x34\xefT\xacW\x97LP\xa5\xf1" "\x84\x35uU\x8d\x94J\x83\x83\x19\xa0l\xd8I+\x1b\x32\xb5\xaa\xceZ\x64\x1a\x98$[\x37S\x1bz=\xda-\x02\x8b\x36\x8a\xa0(\x37" "\x18\x1f]\x82\xe5\xcd\xec\x08\xc3\x91\xe2\xee'w\x94\x8e\x8c\x8do+\xc6\xcfy=\x1d\x61\x01\xb5N\xe6\xc3\xf1\x14\xb1L\xb4\xd9\x83\xb0p" "\xf3\x82U\x87\"\x86\x34\x88\xba,\xdb\xaa\x10)\xa8\x02\x8f\x80\x81n\xbd\x36\x7fpl\xd9\x41\x9c\x43\x19\xe6\x35 \xcaHl\x06\xfc}\x8d" "\xd4\x64\x17\x0fx\xce\x00y\xac\x8a\xbb\xf9\n\xb5\xe0M^\xe4\xa2\xb5\xb3\x02\xd8\xdf\x41\xf1\xb3/\x44\xdd\xd1\xef\xf4\xd8\xb1\xd5=\x34\x97\xb2" "x\xf8\xa1\x86\xa9\xdd\x95\xce\xa6\xd5\xfd*\xd6 \xc9Q\xc3\x15\xdb\x91Z\x45\xf8\xb6*\xa6\xd5\xb7\xe4r\x14\x1f\xdf\xa0\xc0\x0b\x7f\x05\xee\xa6" "\x17\x01Zq\x80\xb0P`\xf7|su\xbd\x18`,\x0b\\]-;\xea\xffn\xf0@\xcbS\xe0\xbb\x86\x07l\x62\x02X\xd2\xffv\xac" "\xd7+\xd8\x92X\xec;\xa3L\xae\x9a^\xd4\xc9\xe0\x42\x42\x8c\xb7\x15\xf5\x90\x8eZ\x31\xdf\xe6r\x89h]\x00\xdb<@~\x9b`]\xd7" "\xf0n\xf0s\xd6\x62W\x8c\x9b\xc7\x98\?\x0et\x33\r\x19\xf1;\x1f`_\xc4x\xd8\x8d\x7f\x1a\xe9p\x9b\xde\xe3QV\xbc\xce\xda\xe2O" "\x83\xe8j\x66]#\xee\xdc\x16\x64\xca\xc4\xf2\x43\x44@\x19\x96\x06\x04\xc5\x17\xdaYw\x94\xdd\x9d[\xb6\xb9\xc9\xb7\xaf\xc4\x8b\xd9l\xf9\x97" "\xb0\xfb\x15\x31\x81\x1d\xc4\xfb\xaf\xf2\x84\xe9\xd8\xde\x19\\\x80 \xdf\x35lI\x31\xdd\x36\x91\x0c\x18\x14[\x85\xe5\xa2\xd5`\x01\x12\xdb\x14\x8b" "}\x1a\x03\xc4\xf8\x14\xd5\xfe\xbc\xa8\xc4\x8fUiv\x18\xbb\x83<$sg\xba]\xac\xa7\xb1\x05[\x88o:)\xf1\x86\xcbZ\xd5\"\xd8" "'zO\x9b\xe7;\xe4]\xed\x90X\xc4N\x83_\xd1R\x65X\x0c\xa3\x62rxMQ\xb4}\xde\x1d\xcaV\xc6r\x87\xc0n\xfc\x95\x94" "\xdf\x10\xeb\xca\x0b~\xea\xc9\xdf\xc8\x63Xg\x1a`\x0b\xac\x00\x1bS\t\x9e\xa5W\xf8\x85\x63T\x9f\r\x84\x04\x9e\n*\x62\xafV\xac\x16" "\x62P\x88/N\x44\xdf*\x42\xae\x10\xb5\x8dT\x8a\xeb\xa0\x87\x15Q\xd7\xa0\x88\xba\x42\x94gr\xf5\xed\xc2\xb0\x10u\x32\x64\\\xf3\nL" "\xd4\xd3T\x86\xb9\xd4Q\x88\xa5\x9f\xf8\x44^\xb7\xfb\xc4\xbd\xfa\xfc\x13x\x88\x41\x11\xd9\r\x8apn\xf0+\x9c\xabLW`\xb1\x62k|" "\x92r\xd2\xb8\x89\xa7V\x19\xca\x18\x44\xc4X\xa4\"\"H\x01\xf6\xc0\t\xe2\x46@\x34G\xd7\x14\x93\xe1\x15r,\x95\xe5\xe9\x14\xf8\xe1\x46" "\x8dh\xa7\x0f\x8aM\x1f\x83\x7f\xb2\x9b\xe4\x63\xe5\xc4%\xde\x89\xbb\xce\x90\x88\xfd\x00\x02\xbb\xa3\x95\xf5/M\xff\x95j\x08\x61j\x45\xd7\xf4" "m\xc4Z\xf0\x0b\x01+\x15\xcd\xf9\xf5n\xd9\"\x43.Z.^\xe0=\x36\xbe\x89\xc5\xceS\xc1\xaf\xc0v\xa0\xa6\x1c\x9bZ.&g\x7f" "\xd3\xa8\xeb\n\xa0\xc6\x45\x8c\xfb\xd7\x14\xcd\xd1\xd6\x89\xe7\x45\xe9\x80\xa5x\x90&\xaa\xae\x89\x37\xda\xfap\r\xea\xe4\xd8]\xce\x05\xd2U\x44" "@,\x88{\xf8\x1b\xeb\xdc*\xc6\x8d\xf7t\x34ql\xdb\xa5\xa8\xeb\x17\xd9L\x84\xfd\x38\xd5\x86\xc9\x66\x45x\x41\x10\x39\x12\xc5\x0f\x35s" "\x36\x86\xd9'\x0c\r\xe0\x01z\xe4\xe1\x89\xb8[\x33\x9c\x14\xe4\x41\xf7Q|\xf4\x97L\x34\x86\x38\xaa\x64vv\xc9o\x16P\xdd\xf9|k" "\rk\xc3-\xe3\xfa\xfd\xc0\x43)\xc5\xe6}\xca\xb4\x97T\xf7\x1d\x1b/\xd2q\x89,\xddG\x35\?|#\xe9=\xc0jZ\x45]\xa8M" "\xfd\x38\\\xc7o\x8f\xf0\xc0\x94\x39\xf1\xa9\x45\xd4>\xfd\x07\xed\xe3\r\xba\xe1\xad\xeb\xba\x84\xdb\xdb\x46\xc5\xe4\x19\xad|t\x9eo\xa5\x84g" "g\x1dXO]\xd1\x0cp};\xb3\x10\xe4;\xc0\xd4\x92\xb2\x66\xcf\x62\x62$/\xf3\xd9\x42\xfe/\xf6s\t\xe2\xc9\x99\x19\x04Y\x65\x9c" "\xdcMQ\x00u\x35\xdd#j\xde^\x19\xafl\x8a\xca\x9a\x06\x86\xddi\x8a\xde\x36\x9d\x12\xdd\xd8\xf5\x8e\xca|\xef\xb8n\xfa\xde\xf1;\xff" "{/\xe9L\xa5+\xc3\xb4\x0c\xe2\x8f[\xa2>\xfa`\xe0\xd8\xb2MQ\x9d\xd8\x82!\xca\x10\xe4;\xact\x90\x11\x13`\x13\x93\xc0nH" "\x62V\xb8*U\x9fn:RK^\x86q\xef\xcd\x15H%\x05\x1b\xc7\x96\x1d\x38\x13\xc1\?\xf7\xe4\x08\xe2%\xde.\xdf\x98\x66\xad\?\xb9" "\xc7\x87\x11\x8bi\xaa\xc0\xf5=\x37K#\"\xaag}\xb2\xdb\xe0\t\x37]\xac\x45\r\xf2\xad(\x1e\x10\x32\xcd\x99<\x00\x18\xb6\x0f\x0c\x90" "\x95\xa3\xa8\x89`\xcd:u\x9b-p\xcc.\xbf\x0b\x34\x66\xb1\xbcM\x9e\xec\x9d\x98\x30\x44PG\x17\xd0\xe9s\xefO\xc9\x44\x94\x91$\r" "\xc6\xf1\xb1m\x83&\xaa\"\x0fY\xc4.\xd6\x9a\x06H\x36\x0bL}\xc8\xae\x65\xea\xcf\xd2\xc6\x91\x05\x14\xb0\xc3\x08\xca\x88\x89Ut\x81\xae" "\x9d\xb7SZ\"\xf6\x81\\\xf2\x1e`\nHQz\xb1|Q\xab\x41\xe4\x8b\x13\xf8\xc7\xf2\xc9\xab\x66\x7f\xde_\x83\xd9\x8e\x80=M\x15\xcd" ";\xee\x1aJS\x35\x38T\x91\x88\xc5\x14^\x80\x30\x8c\xa2\x81\x46\x34\xe7O@<\x1b\x34\xa4`\xbe\xc3$\xee\xb7\xb7\xb0\x08\xeb\xbc\x98y" "R\x11Y\x0b\"\xea\xb4o\xdc\x88\xc0\x06\x44\xb5\xe6\xf8\x0e\xa1\x9fuQ\xb3\xd8\x42\x18y\xb1\xca\x38@\xd8'\xa0\xce\x37W%:\"\xe6" "z\x98\xd7\xec\xccS\x82\xe6\xf6\x10\x0bq\x03s\?%r\xc8\x12\x31;\xc5\xfd\x0fQ\xffOM}\x31\xf7\xd6\x86\xc3\xcaV\xc5x\xb1O" "\x11\x91\xac\xe0\xd7\xb2\xd6\x9c\xf5\xde\x39\xd0 \x65#@\xa4I\x11+\x36T\xa4\x03g\xc6=\x62r\x8c\xa6\x37i\x11=\xd7K\x19_\xd8" "\xa4\x45=\x62&\xd7\xba.\xf4\x16\xb7>\xc1\x8b\x9a\x8c\xb5\xf4\xfe\xdb\x63Y\xbb\xe4\xd8\xf7;\x12\x34\x1cs\xdf\x94Kx\x7f\x97t\xbc\xcf" "\x66\xc4\xe2\xc7g\x88p\x07\x66\xba/\xaf\xd5\x94\xd0`\xa6\xd7:{\x03\xa3(g_\xae\xa5O\xaf\x11\x39SQ\xc6\x03\xe9\xb9\xa6[\x31" "\xf3\xb9\xbbl\xbe\xa4\x35\x39\x44]\xbd\x7f\x10\xdd\x8f\xc9\xb0\xd7\xb0z\x1d\x8b\x18\x03w\xf5\xcf\x92g\x9e\x9b\xcfGsW\xa1*\x33\xf3\?" "\xe6\xd2Z\x81\x66\xb1!\xb2R\x93\x92\xee:\x81\x08\x42\x80\xa9K\x45\xda!v\x19\xa7\x15\x0f\xac\xbe\x90{\xb4\xf7k\x19\xcc=,Q\x0c" "\x92\xc6\x1b&\xd2rQ,U\xd8.\xca\xe0\x88'\xed\xc7|}Q\x8dL]\x1e\x32\xa9\x9b~\x80\x18nP\x44\xfd\x44\x9c\x00\xbf\xb5/" "\xd9\xdd\xf0\x82\xe4t\x08|)\xf6\x8d\xca\x99\xf8\xb2\x05\xd3\xbfx\xc0\x0f\\\xac\xd9\x0f\x30\xf1\x1a\x14\x13\xaf*\xea\xd0\xec\x16\x1c\x06\xc5\x82" "\xc6 \xb9\xac\x12\xd5\x34\xc5\x38,LW\xd0\xd6\xf0h\xbd\x39q\xb7\xd4\x19\n\x31\xfdl\xc1\xed \xbe^J\xd3\x42\x9eNPL\xf1\x06" "\xd2\xf6\xb2\xca<\xad,\xd3\xc8\x36;\x84\xaa\x02\xa4\x81\x05\xc9\x1f\xabG\x92\x97\xeb$\xba\x8d+\xd6`H\xfen\xf3M,\xecx\xcb\xd7" "\xaf\xeb\xca\xe0zY\x11\x33\xb5\x41\xb1\x0c-(\xd6\x9e\x05X\x16\x16 \x94\x19$\xb3;\xdd=\xaa\x87G\xb5Y\x96\xc1\xafuY\xca\xb0" "\x46\x37\x17\xa1\x87\x44\x44\xea\x32\xc4t\xdb\x07{\xcf\xeb\x0b\x35\xb3\x9c\xeb\xca\x84\?\xa8S\xe8\r]\x91U\xf9\xebnu\xd5\xc6>\x37\"" "\x0e\xb2\xeb\xc7\xe4\x07w\xbb\x9a\x11\x93\?.L\x90\xfc\x1c\xe8|\x11\x8c\x08\xac\xa0\nt\xae\xbb\xd7\xc3\x36\xce\xc2*\xfc:\xe6]\x14w" "\x8b\xc7x\xd9%\x8bk\xa7\x14\xf9P\xa9=\xdc\x41\xd1L&i\xd9vVL\x9c\x07i\xf9R,\xa0\x62=\x9c\x14\\\x61IT\x80\x0c" "\n\xc5\xdc\x36\x1c\x92\x61\xdf\x04\x15\xa9\xfc\xd2\x43\xdb\x89\xd2\xea\x0bQGJ\xf4\x41\x61\xc9\xd1TMm\xaf\x0c\xddN\x30\xbe\xa9RL\x82" "#'\xf2\xd2\"\xce\xfej\x88\xd9N\x63\x06\xf4\xf7\xd3p@\xa4\x36H\xc3)\x16`\x05i\x64\x15Qz\xfc\xa5\xc3\xb8\xcd\x05\r\xd2\x86" "m,i\xb7\x41T\xb5\x84\xc0M\xda\xfdS\xe4\xda(\x8b\x1b=\x9f\xcd\xf1\xc3\xb7\x15O\x7f\xb0\x9f\xf1\xd5k>\xc1\xde\xd2\x89\x95\x0f\xfa" "x\xcal.\xbc\x15\xb9\x1f\x43\xce\xde\x1e\x9d\x38)\xfe\xd8n(\x99\x8bh\xc7\x45\xb6\x82\x8a\xa6\x14I\xc5\x16\xac\x89\xed\x38rV\x8cp" "\xca\xba]'\x62\x04V\xf1\xeao!~\x39\xf1z\xca\x38\x90\x32\xc4\x37T\x9c\xbd;\xf1\x33\xca\xaa\r\xef\x33:\x17*V\x16\xd8\xcb/" "g\x36\xdb\x11\x62z\xfb\xc7\x31\xb7\xbcJYv\x12\x38\x11\x63\x9e\x8a\x9d\xa1\x13\xf9h\xf9\xba\x1bz\xc7\xbfV\xe1\xe4ly\x8c\xdd\xa7," "\xeb\xb8\xcf\xa6\xa7\xe6\xcb\x8dK\xca\xe6\xb7\x8e\xbd\xef\xbb\xd7\x37\xbb\xd2\xa1\xa8\x8c\x16\xf1y@,\x16y\x06\xc8n\x08\xd2\xaf\x8f\xdd\xe2\x98" "\x62Vm\xf9\xac\x88\xea\xa4\xdf/\x1a\xabl\xe0\xc9\xed\x04\x65\x80\xa5\x05\x8aX\x8e\x00\x91\xae\x03\x16\x0f\x04\x45\xd2I\xa0\x0b\x02\x0eo(" "\xd2\x87\x11\x91^p\xba}\x63\x1c\x01\xb3\x03\x8a\xbb|#\x43\xb2\xec\xdc\x1a\xf4X\n\x10 \xff\?(\xf2\xffU\x44\xce\x95\x88k\x0e\xe0" "\xa2\xe2\x93\xce\xb9y_ \xb3\x36\xc8\xaa\xc7\xf1\xd4\x89\xacL,mRt\x7f\xe9r\x62r\x11\xfd\x08\xf9\xfc\x41\x9e\xc7\xff\x80\x34\x99\x80" "\x8e\xb7\xa6\xeb\xc3y\xca\xce\xb7\xf1\x13J/^t\x43\xcd'\xdb\xf7\x90\x01\x1fh\xba\x0c\x0c\x61\x1a\xdf\x45\xceL\xc0\xca\x11\xa4\x8b#\"" "\x15Z\x91\x8c\x1e \t=@\x12z\xf0+\xc9\xa6`\x9e\x99\xaa\x65\xb0\x0e\x35\x0f\xbd\xf2%w\x9d\xa7Z\xd7\xb0\x65\x99\x16\xa7\xc7\x95\x18" "\xb6\x13\x92\xcb\x03\x9d\xd4h\x1e\x9b'\\\xf9\xcf\x46\n\xd8\n\xb2\xb7}\x62\x91\xbe\x13\x64\xef\xf6\x65g\x8b-\xb1\x30\xff\x43\x44\x64\xc2\x9d" ";Y\x46\xc5\x38\x1c\xc0\x42P\x06k\"\xb4k\x0e`\xdf\x86\x45\x0e~\x08\x13\"\xc4\x80\x1c\xe6\xff\xb8\x01J\xce\\\xca\x46X\x94\x46\x45" "\xb6\x08\x18V\xb4\x86vv\xa2\xd8\xfc\xde\x16<\xc4\xbd\t\x99T\x18\"V\x39\xab\x1d\x39\xb1y\xec]\x13+\xa3!\xa6\x8d>\xc6\x39-" "\xc0\x8e\x12\x10\x8b\xdd_\xf2\x82\xde\x1c\x99\x01\x39\xb3*\x14\x62\xb1\xb4:/p\xe3u\xa8\x8e\xf4\x80[\x34\x87\x98$\t\x8b\x33\x8e\xc2\xa2" "\x82_~\x97\x16{S\x85\xc5tG\xa8\xb3\x1b\x36\xce\x1c\xe2\xdc\x1d\xa9\xc7s\xe0\xa3\x45\xbb\x8dM\x88\xb9\x64\xc1W\xe0\x92\x88\x14\xed\x10" "q\xab\x10+t\x43\xac\x80\n\xb1\x46YQ\x1e\x07\xa9\x46!\xa2\xff\x8a\xe6q\x1f\xeb\\\x42\xf4\x0b\x41\xdc\xd6\x06\xaf\xc0N\x7f\x86\x38U" "$T\xdf\xce\xf6\x8c\x10\x01y\xc1Ks\xc7#.\x42>W|ho\">j\x01\xbb\x16mZ\xa2\"\xcc\xa4\x10\xe7)\x85\x08\xc8\n" "V\x89\xf1\xa2\x82\xee\xa9\xac\xb0\x8e\x94\xa5_Q\x1c\xe2\nh%\x08\x8a\x86\xf9\xaa\xc7/'\xda,\x83\xb0\xf0p\xc3\xe2\x38\x85\\\\\xf0" "\xa2!\xfc\xed\xb0\xd8\x90L\x45\xac\x37S\x11\x9a\x11\"\x94\xa3\xb0\xb9\xc5:Wt\x87\xd8`#\x44\xa8\x38\x84%\xa7\x88\t\x30\x15\xb3\x35" "\x9e\xc0\xe6\x03)\x9ai\x80\xf1\x89K\x37\x43\x84n\x15\x91\xbe\x1b\xc2m\n\xd9\x44\x05\x93\xd5\x41\xb2\x42\xd5\x35Q\x11MnT\x1b\xe2\x34" "\x80\x30\?\r \x32\x1f\xb8\xbb\x16\xbe\xd8\xc2\x63\xb5~\xe2\xe6\x1c\xc3@\xc1\xcc\xc1\x35v\x19\x0e\xb1\xd5\x83\xa0m\xe4q\x07\?i\xf7\xde" "\x17\xb4\xed\x0c\xdb\xdf\x17\xb5\xdf_\x42\x8d\x87\xf1\x00\xb7\x62\xe3\x00\x82\xb7\x44\xaa \x11\x31(\x86\xf1\x35\x13\xb3\x42L\x87\x85\x98k\n\x91" "\xb2 \xef\xf2\x0c\x88\xd7\xcbw\xfb\xf0Gt.\"\xb8\xca\xc4H\xd7\xc8\\^\xa6\x06;o\xe8\x01\r\xe0\x61\x8e\xc5\"!\xc6\xa6\x10\x9b" "(\x86\x88\x8a\x86\xd8k\x37\x84u\x16\xc2}\x08\x11\xb1\x14\xc4\xe3O\x0e\x30\n\x88xH\xc4,\x93\x88h\x14\x93\x33\xf6\x62\x44\x1d\x15\xe3" "\xd5\x32y\x43\xb7\x99\xe2\xf5N\xf1\x9e\xa6\x1c\xd7\x43\x04\xe3\x14U\x89.P\x87\xef%\xd8\x90\"\xe2\xd6\xdf\xd1T>P\xfe\x8dV\x35\xdf" "'\xc6\x95W\xd7\xa0\xe6x\x39\xd6\x15\x14\x44[\x64'Y\xcc\xa8\xdf\xe2%n\nZT\x83\x84|\x1aq\xa1\xeaU\x8a\xae\xd3\xfc\xa0\r" "\xfd<\x12\xa9\x12\x35\xab\xdbZ\x34!\xf2\xbc\x14\xe3\x46\x37{\xc1S@\xf7#,\x18\xea\x8e\x9b\x85V\x33G\x33\xe0\x96h\x1ao\xe2\x85" "[\x86\x01\x45\xb7Xm\x37!\x9e\x03_\x89\x9e\x42\x41\xfewh\xd0\x99Mh\xab\x0c\x66\x64h\xda@\x8c\x42\x88\xf4\x85z\x1e\x15\x46\x07" "\x04\x96\x14\xe3\xd1 \x0e\xec\xfb\xd4,\xb2\xa0\xea\xee\xab\x8b\x1f/\x46\t+r\xec&\x0b|\x66\xa7\xe4\x1c\xebx\x0c\x13l\x64\xbd\x9e\xc7" "\x10z\x14\x66\x87\x05\xd6|\x11\xdd\x0b\x91\xa5\xa5X\xcc\xb1*\x13\xb7S\x95\x46\?\xc0\xee\xec!\xc2}\xa1\xbbm\xf4r\x41\xa9\x1b\x8e\"" "\x98-\n\x11\xe8\x0b\xb1\x8aX\x10\xb7i\x93\xbd\x42sS%\x62\xc6\x35\xc4J\n\x45\x13u\xcc\x1d\xde\xc7M\x1b\xc8\?\xc4\x85\xed^\xa9" "!\xd6Y)\xea<\xc9\xdb\xbd\xde\xf5]\t\xa9\xfe!\x02\x83\x8az\xc8\r/\xfa\x88\xbb}\x41\xd3\x80Q\x84\x93j\x42\xea$\xdd\xfcM" ".\xaag\xf5\x45\xc8\x03\x08\x11GR\xa4\xd2\x34\xd3}\xb5V\xa0X\x91!#\x88*~G\xb3\xf8,\x11\x93\x87\r<`\x65\xa2\xe0i" "\x95\x98OT\xdf'\x9e\xees\x04\xfcV\x9b\xe9\xe1\xc9\x63\x62\xc4k\x80\x1eZI\xcb\xd6\xedt\xff\x9d\xdaW\n\xe2\xe3U\xf2\xd4\xfa\xfd" "\xa5\xf8\xf4\x30\x0eo\xe3\xda\x44\xcc\x8e\xec\xf1\xd0\x15\?\x9c\x89g\xae\xf9L\xbf\xbf-,x\xc2rT\x16x\x1f\x8f\x06\xd9\xc9\x9d\xb5@" "=\x85\xa2\x9f|\x0f\xf3\x99\xef<\xae\xfa\xf6\x98\xdeW\xc4]\x42\x38T\?\x37G\r\xb9\xb0\\\xca\xbb\xb6\x39\x1e\xc7\xb5\xba\x99\xeb<\x8a" "\xb6*\xbbKS\xfe\xc9\x99\xd8\x05\x9a\t\x9buWz\xa6\xda\xcb\x89g\xf5\xea\xe7\xd3\xb5\xbaL\xf9\xa2\x96\x7f+\xfb\xfdm\xdd\x92\xac\xa9" "k:\xd3\xabZq\xe4\x63\xfe\xc9\xeb\xab\x66\xf2\xfcK\xb5\xa5\xe3R|\x94\xc7\xc2\xce\xdb&\xd8\xfb\?\x14'+\x19=\x8ft\x1d\xc2\xea" "\x1b\xf3\x0b\xfcV\xed\xfb_\xfex\xe0\xc4\xd9]\xb2j\xfc\xfeI\xd1\xfa\xbb\x45\xd3\xaf\xa2\xafg\xa2g%\x99\x39*}\xd9w-m\x89" "\?X\xa2\xb9\xff\xe0=\xff\x34\xb4!/\xa0\xf1~:\x44\xac\xd9\xe3\x04\x8a\xa0\xfd\x43\xc4J\xc3\xc4&\xd3\x85\x08\x97\x85\x89\xdd\xf1\x39\x44" "\xb4\x34\xa4\xf9\x9d\xdb\xde\x8d\x42t\x66\xb8x\x8c\xf1\xfb\x9b'r|G\xc2\xa4\xa0\xb5N\x90p\x14&g\xb8\xcc\xb9\xed\x91\xc9\xe5\x88\xe8" "\x19=\x08S\x86\xd8\x11-\xd4\xad\xcd\xf8\x45\x11\xed<\x62\x88M\xcd\x42\xc7\xf3\x83\x9c\xf2\xdd\x90#\x95\xfb\x13\xec@\x1f&\xb7#w\x03" "O\xb8!V\xcd\x9f%\xd1\xcc\xba\xf0\xd2\xc2\xe4\xa5\xaf\x43\x92\x8d\x17\x86\xc9\xdf\x0b \xaa\xe5\x15\xd5\x66\x63\x9a\x8a\x38\xd5.,v\xd0\x62" "v\x43\x88\x64\x98P\xf7\xbb\x82u\x62\x45x\xc8!\xb6\xbc\n\x11\xe3\x0c\x13\xbb\xf7\x38\xd7\x90+J\xa3K\x1e\x96\x64\xba\x37\xc3\xf8\x07\xcc" "\xbe\xf4\x64\xf5\x8d\xa8L\x98\xfc\xe0G\xd6-\"\xb6\x91\r\xb1\x8bS\x88\x10\x63\x98\xee\xdb\x06\x95\xda\xe0[\x98\x1e\x9e\x03\xedp\x83\xc9\xe6" "\x10\x81\xbf\x10\xbb=\x84\xd8\xda\x34\x44\x98Op\x93\xb4\xae\x63hR\xba\x15)\x86X\xe4\xdc\x86\xd8\x92 L\xed|\xb3\xa0\xd5\xce\xe9\x85" "\xb5\x37\xd3>\xb8\x8d\xb9)j\xb3>=\x02\xeb\x12\xd9\xc8R\x8c\x15\xe9\xadm\xde\xc8\x9c\x12\xb4\xef+\x1dni\?\xa6P\x89\xe9h\xc4" "n\x97\x8el\xd5I/\xb6\xfd[*\x99\x06W:\x0e\x88t\xd3\x44\x34\x1f\xa7\xee\x8f\xed\xc6!!m\xf2t\x62}V\x9a\xba\xf4\x33\xd8" "\xa0\xd2\xf5\x33G\x15\xcc\xd4\x86\xd8_\",\xf6\x97\x08\x11\x14R\xa4\xf9%\"V\xec\x87\xb4\x90\xb0\xc9\x84\"u\\\xba\xb5\xf7M\xf3," "\xb3Q\x8d\x30\xab\xdaV\x9e\x9d\xfc!\xf2\xc2Y\xdb>\x17\xf6\x82\x0f\x31\xe5\x16\xd2\x92\x16,\x36\xfc\r\xd9\xe1\xb1\r\x82\xa2\x19\xec\x61\xc9" "J\x98]\x34\x81\xb6v\x10\xb9\t\x11\xae\tq\xba\\\xc8X\x04\x42\x30\x61vwL\xc4.`\"v\x88\x45\xd1%Q\xec\x00\xb9/\xba" "Z\xd9\x9dU\xb4\xc8\xc5\x08\x33\xbb\xcd\xb0\x62\xb1\xb4#\xc4\x32\xfe\x10K\x84\x43,\xe7\x0f\xb3\xbf\xb6Z\xdd\xd5\xd6\xdb\x0c\xaf\x04\xd1H\xa6" "\x85\x45\x45\xe0%\x17\xad\x97\x9e\x8b\xd6\x05\x8f\x8a\x00L.\xda\xe0\x93\x8aP\x1d\xd1\xaf\xb0LT\x84\x65\x18\x80\x89\xf2\x9c\xce%\x9cu\x65" "\xb0\xb0\"\x44,\xac\xe7\x13\xc1&\x8dll\">\x1a\x80\xf1\xe6\xbc\xa0\x45\xf4+h\x11\x15\x41\x8b\xa8\x08Z\x44\x08V\xd0\xe9\x88\x10\xb4" "\x88\x10\xb4\x10\xac\x03OMx\x9aX\x87%\x42\x9f\x88\x90\r+\xf8\x00\\Y\xb4\xf1\x8a\xc8U\x8f\x1f\xa1\x88\x10\xa1\x88`[\x46\xee\xa1" "m\x64\"\xdams\xbd\x18\xe1L\x8e(._Z\xb4\x9b\xff(\xe2\xdd\xe6\xa2\xf5}\",\xf5\x17\xbc\x00~\xa0w\x44\x88`\x44\xd8\xe9" "*\xc2\xfaj\x45\xe8\xcf\x08\x41\r\x41\x1e\x0e\x1a\xc5v\xd2\x44\x8f\xf0@\xd0\x36\x42|#\x8a#\xfc\xbc\x8dV\x44\x88V\x44\x45\x88\"*" "\x42\x14Q\x11\xa2\x88\x8a\x10\x45\x94\x87(\xba\x85\xf8\xe5\xc4\x8b\x63\x8a\xc8\xcc\x89\x8a\xc0\x45\x84\xe0X\x14\xd7\xf1\xd8\xf5\x88\x88x\x85\x88\xcf" "@<\xb6\xdd\n(\x42\xdc\"\x42\x0c\"*\x62\x10\x11r\xb4\"\x04\x0f\x04\xd7|\xa7\x18\xce\"\x44\x07\"\x44\x07\"$lq\xbf\x92\xc8" "=\xb8\x8b\x0e\x44\xf1`\?\xcf\xf5\x9b\x83\xdd\x10\x93&^\xcc\xe0\x96\x08\xc5\x19\xc5W\xfb\xc4\xa4\x8b_t\x61\x03\x11\x97\xf0\xae#\x44\x10" "\xa2\xf8\x16\xb7~\x8f\n\xb2\xab\x91\xf2\x65}\x61\x0f\xd6}\x64\xd7\x46\xbb\xf7\xf8\xf0$\x43\"\x36\x8a\x8e\x30*G\x45\xcc \x42\xcc \xc2" "@\x8a\xb4\x32i\x02\x38\xfc\xa1\x86=\x9e\x14\x61\xb4\xd5`\xde\xe6\x87\x38\xac\xbe)j\x04\xad\x8b\n\x66" "\x13X^\xba\x06\xb9\xbc#j{\xae\xf1\x87y\xab\x0f\x98\x81\x17Q\x14~s\xb7\xe0\x9f=\x01\xdf\x89\xf1Q\x95\"\xf6g\xaa\xe9\xba\xcd" "\x12\x1a\xfa\xaa\x44\x34\x15\xd4\xca\xaa\x42\xf4\xc4\xe2\xd8\x62\x61\x61\xbeS\x31Y\x44t\xcd\xde\x9e\xaaT\xcb\x17x.uS\xc6\xa3+\x14\x0c" "\x89\xda\xfc\xdc\xd7\x95\xe1\x14\x11\xb0to\xa5\xeb\xca\xac\\\xbbw\x9f,\x97\xf1\xf2\x1a\x96\x93\x16H\xf3\x36\xfb\xef\x64I\xf0\x07[\x8e)" "K\x9f\x0e\x92\xeb\?\x8e\x8dk\xf1\xe8\x03\x8b\xa3\xf2\x82\xcd\xd5\xaf\x82\x15\xb6&\xad\xed~\x1aI\xf9)\xbe\xc6s\xfd\xb4\x88\xa6\x84\x66\xf8" "s\x8e\x1d\x9bT\xc4n\xa0\x35\xd7r\x44\xc1\x35\x9f\x9c\xf8s\x80\x11K\x19\x9c\x14\x15\xb1\x9a@\x45\xef\x0b\xa2\x85!\xde\x10\x11\xdf\x16\xf1" "!=\xd8\xa4\xe5\x32\xd8#Q\xdd\xc4)\x34\xd3\x0f\xbe\xbb>$\xfa/n]w\xedk\x8d\xba_\xb7\xd3I\x85\"\x46$Nu\n\xe2" "n\xd6\xd0\xc0\xeb-Q\xf4\x9a\xee\xb5\x15\x42\xd1\xda\xd5\x30\x8a\xf2\?\x82\x8f\xc2\xf0u\xd6\xf1\x16\xdf\xb2'M+\x62\xb7\n+\xae\xfb\x05\xb7G\x64N\xc9\x8a\x38\xbc\xf2\x44\xf8Q\xc2\xde\xe2\xa3\x8b\xf8\x98\x17t(\xff#\x46\xafL\r" "\x1d*\xb4\xadU&H\x91WL\xec\x41\xd1\"^\x03\x1f\x81\?\x44\x1d\xc6\xda\xfb\x1e\xc3\x81\x98\x64\xd6\xaf\x06\x43\xd0\x45\x19\xa2\x03\x10\x7f" "\xff\x9d\xfbZ\xa9J\x34{\x83\x04\x9a\x34.\x35\x88\xf9\xd7/=\xc6\x61@\x18\xe6\xf2s\xf1\n\x8fQ\xe2w/\xb1\xa9\x94\x15\x1b\xf9\xca" "\xa5\xa2`\xcd\xbf\xbc\x44\x66\x8a\x88,\xea\x9b\x37\xde\x46\x1f;\xd2\x8a\x38\xe4\xc8\xa1\xe2\xd2j\xbcx\xff\x19\x91!\x11\xdfM\x05\x7f\xb6o" "\xdfy\\n\x10\xcd\xf9\x38\xe9_;\x06K@\x44x\x9c\xb5\xb8RJ\xad\xe3\"\x62\x05\xc9J*\xd2N@\x0e\x97\"\x36\xd2S\x11\x0e" "h\rq-\xc1\x1a\x31\x8fS\xe3\x46*r\xf3\xeb\xe4\xcf,\x1e\xe5K\xbb*<\xc7T\?\xd1S\x1cG}\xb2\xf4\xa2\x9e\xd8\xdc\xf8\x82" "\xed\xf2\x8d\xbf\x44\xf6\xfe\xca~\x92\x1c\x04\xff\xfc\x04uTy%\"wU\x45\x63\xa3g\"N\xcd\xd1\x0c\xf6\x65\r\x61_\x45\x44\xcdT" "L\xba\xbd\xa4{\x42\x86\xfd\xb6\x45\xe4\xbd}\x13\xb1\xec\xb4Vl\xfa%\xe2<\xbe\x62\x85\xfc\xc4\xa3\x85'\x62\xa5{\r\xa7\x99\x08\x9e`" "\xa9\x95\x88\xb8\x91\xc3o\xa2j!\x8c/\x08\x32+\x62\xfb(\x88\x08\xbb\xd6p\xea\xb8\xe0!\x11Q_\x15\xb1\?\x8c\x8a\xee\x45Wis" "\x8a\xd8 \xc6\?\xaeH\xd3j\x16x\xe0j+\xfe\xc6mV\x07qo\t\xf1\xc6\xd5\xa2\x8d}\xd7\xb0\xfe]Q\xcfM\xb5nh\xcd\x35" "\xa8#\xb1\x05\xc6\xbb\xd5;\x99\xc6M'\r\xc7~\xf6\x9c\xb8\xfe\xa1\x86\xd5\x65\xf2\xe5J\xd2\x99:\xe6\xce\xec\xcc\xd9\xbc\x92,\xef\x92\xcb" "}\x9c\x98\xa4\x65\xc9i\x0f\xc7\xa9\xe5\xec\xf7g\x8f+\x8ai\xb9\x9f\xce\xae\x7f\xb1\xa1\x63\xeb\?\xe9z\x43\x96\rN\xfe\xe3G\x8a=\xdd" "\x85Uu\xc9\xf2\xe8\nGx\xe6\x05>\x0b\xf3\x8dP\xe7\x1e\xa3\xa5\xa3\x93\x04\xa3\xae\x13\x97\xe8\xefG]\xe9\xfa\xb4\xe1\x94\xdd\xddx\xe2" "\xffW\xd6\xc3\x88\xe2\xda_\x9c@\x8d\xe2\xb8=\x94\xa1KOm\x87\xf1\xf3\x9f\xc5\xd8\xae\x0c\x9f\xa4\xe3y\xfc\xde\x43\xc1\x85S\x45G\xfc" "\xad\?\x44\x0eq*\xae\xfb\x1c\x1a\x84\xc5\xbd\x1b\xec\x8dX\xc3\x1e\x7f\x8a\xbb\x85\xee\x1c\xa3\xf2\x64\x8d\x30\xc9\xaf\xe2t\x7fL\x13\xc0\x15\xe7" "+=kNg\x1cM\xec\x8e\x32z\x82\xc8p\x8dS\x85\xf3\xe2\xd5\x81y\xff\xb0_u\x1d\x96\xc5\xff\xb8\x08\xec\x65\x8e\xa8qx\x43\x94" "\x81)\x1bN\xc8\xb4\x19]\x35\x1d;^\x62\xc1\xb5\x32\x7f\\\x10\x16\x9d\x63Q\x62\xce\xea\x7f\xbc\xab \x90\x98\x8b\xf3w\xa4\x41*S/" "\x00\xc3\xb7\xb2\xe6\x61\x32xu\xec\xac\x05\xefZYzq\xe9]\xd0\x33\x88\x85\x65{\x81\x89\xf0\x46\xc2\xdb<\x65\to\x39\xbcW\x9f\x93" "\xf5\x0c\xef\x43\x90\x96\xab\x88\xf2n\x31\x9b\xae\x0c\x81\xf2\\lU)\"l\x08Q\xbcH\xe4\x37H\xc1KQ\x85\x1f\x44M\x91\xac\x7f\x93" "\xa9OI\x16qQoM\x8f\x33\x97\x9e\xc2\x61\xe1\xb8\x62\"<\xb9=\x19\xa8\x46\xf3!>^\x14\xdfZ:\xcd\x80\xd9\x36\x31\xd6\x1b\x44" "\xcc%\xa9\x88\x18\x8f\x9a\xf2\xbb\xc2\xbcG\xe0^\x10\?Q\xfb\x8b\x00\xa7\x9e \xbe\xcb\x37@\x00\xfb\x46\xa2}-\xae\x1f\x13\xc5[J\xca" "\x8f>\x1b\x0e=\x96\x8e\xddg\x66\xba_|\x86WQ_\x11]\xe5\x35\xf6]\xbbk\x84\x44\xec\xad\xaa\xa2\x1a\xd8\x62\x98\x8d\xf1\xf4\x8d(" ">;p\xe2\x10\xea\xa6!]\x89\xa5-\xe2n\x39\xa2\x88\x14\x1c\x15\x11N\x82\x98o\xcb\xf7\xe5\x17\xb8\xa9k-@\x8e\xa8\x88]\xa2\xd8" "\xc4\x62\xc3\x93\xc5\xe1\x00\x19j\x39[\xbc\x9b`\xe2\xd8z\x8a\x83\x33\x95I\xbfH`\xae+{\xbdK\xb7u\xc7>\x9e\xe9\x99\x08+\xaa" "\xa6\x9b\x8cn]\x7f\x12\xb6|\xf4\x98\xe7\x01\x62\x87\x44\x45\xcd\x91r\x95w\xee\xdaQ\xe3\xdc\r\xad\x8ds=\xba\xaa\xffJ\x96qt\xb3" "[](\x62Ys\r\xbbz)\xee\xdc\xa1\x91\x96\xd5\x9c\xb8\x0ch\x35+\x83\xbb\xa5\xe2O\xa9x\xa3\xc2&\xc5\x0f\x8dw\x9bO\x9cx" "Y\x30l\xbc\x94\x17\xc0Z\xb7\"\xadt=\xe2\xa4\xd4\xc0\x8a\xfa\x9c\x1d\xea\xae\xb7\xf6 .W\xc6\xb1\x34\x17\x63v\xea\x9c\xb9\x96-\xcc" "\xeb\xda\xc2\xea\xd7tI\x8a\x03\xd3\xadx\xee\xc4\xe6q\x9c\x1f\xa5\xc2\x38\x89-\x33\xdd\xe1\?\xcbj\xd8\xc5\xce\xb2V\xba\xfdS\xb0G\xba" "\xfe\xcaZ\xa1\x1b\xc2\x84=\\:\x93\\\xd8h\x11o]\x1d\xd3\x1fS\xf1g\x8f.\xb9\xb2\xad\xd7\x34\x85\xad\x8b\x16\x31\xd6\xe5\xfd\xc5\x8b" "\xd1]\x66\xcb\r\x8f\x61_\xb5\x9c\x1d\x9d%\?\xcb\x82\x9d\x63\xf5S\xce\xc2\xaeSn\x39\x33\xd1\x89\x63\xc7k\xccG\xe7\xac\x16\x98\xd6\xdc" "\xb1\xfa\xd0\xbb\x33s\xf2\x90u\xf6\xac\xdb\x84]\x33\xf2\xe2\xce\x97\x89\x36\x05[x\xf5mN[\x08\xa2[vQ\x88\x13O\x94\xea.t" "\x83\x16 V\x9a\xb3\xabK,\x0b\xc9\xd9g\x44\x11\x0b\xfbr\xb1y\x18\x9f\xb9\x66\xc1\xb0\x96\x15\xdd\xe8\"\xec\xfe\x39)\xb9w\x9c\xfc\x1d" "\xc7{/\x8e\xad\x8e\x30I\x98\xb3\xa2&\x45\x8c'-\xc7\xd6#\xaf]K\x15{\x0f\xa2\xc6\x15\"\x0c`#\xef\x9bkO,\xba\xf1\x18" "S\x04\xb9\x88\x30\x93\x8a\xcf{\xf4\xe4-\xf3\x1e/\?\x93\xca\xff\xa6\xd7R\xb3\xbd\x43OT\x8dj'\x45Q\x80\x03|,\xbbL\x96\x8f" "\x05\xdb\xa4_\xae\x9bg\xe2\xec\xd1\?S\xb6\xf5\x44\xe7\xfe\x08;_\x99\x63\xf7\x84\xd9\x45\xd3\xd3\r\xd9\xc0\xdd}vw\xe0\xbd\x35\x61\x0c" "\xc5\xe1\xdcK\xc5\xa4|-\xda\x1d\xfb<\xd4\xb0\x8c\xa3\x66\x37\x45\xc4\x34\xbe\x65}O\x34{\xa5\x98\x8f\x90\x17\xd0kW;\xb5\xf5\xe1\x9c" "\x06\xb5Z\xfb\x85X\x98\xac\xcd#\x35\xba\xa9\xa8\x85\x9dU\x31\x99\x99\x33z\x16\xb9\x88\xa9\n\x30\xef\x82\xc2\x10\xff\xce\xd9\xa0\xec\x7f\x46%" ".\x62q\x61\xef\x17\xb5\xe1\x1e}yO\xa1\x05T\xf7\xc2h\x35\x8b\xb8q\xbf\x9f>\x1dx\x17\x16\xad\xe5]\xdb\x99\x0b*\x36\x9d\xb8\xfc" "K\x31\xdb\xdb/\xc4U\xbai\x39Vj\x17\x37\x16\x10\x9d}\xdc\x0c\x9c\x1d@\xe3\xa4y\xecL\x66Q\xab\xd5[\x37N\x8a\x42\xa5\xf1\xd5" "\xb9H\x94\xa8\x02\?\xe0\x91\x33\x17\xc9h\xd6\\w\x13\x8d\xf1\x12x\xa2\xee&\x1d\xf0^y" "\x04\x66\r\x93\x14\x82\x03\xa2\xa1Z\x14Q\xb3\x15/\xc8\x92\xc6MR\xe7%Y_\x7f\x93\x8f\x90\"\x96\xdd\x8a\xf8\x8a\x83\x9aTt\xe1\x85" "&\x34Ks.\x1a\xd1\x8a\xadP\x87\x95\r\xb4k\xeb\x99\x88\\\x93\\\\\xe1\xbb'\xc7\x44\xb3\xffH\x31\xed\xfc\x38\x91\xaf\xf3\xa4\xae\xe7" "\xcam\xa0h\xda\x45\x17o\xe3\x06\xda\?\xf9\xff\xe8\x43\xa7+\xa2\x66\xf6\x62\x62\xc3\x99_g\x07\x9a.\xcf\x0eq\x86G\xe1x\xd0\xbb\x91" "\xff\x9dW*l\xb9t\xbez\x0f:\xb9\x7f\x18wt\x07kg\x65\xf5\x0f]\xc8\xa4\x7f\x98\x31\xb0\xd4\x7f&\x8a\x36uo\xb1\xff\x9c\xef" "\xd7\x05\xedp\xa3\xe7\xde\xc6\xd5\x15\x99X\xae\xd8X\x1b,\xdd\xfbp\xacw\x85\xac\xc4\x9cy\x43\xe8\xcdK:\xda\xc8\xd8H\x96\xed\xdd\xe0" "\x18\xb5\x9c\x89\xc1\x45\x7f\xf8\xf6J\xfeG\x9a\x82\x38T\x1a\x31w\xea\xf8~\x62k\xd7\xb2\x87Z\xfcv\xee\x9e\xe1\xe1\x8cqs\x15\x97K" "S\x1by,\x1d\xbdy\x8c\x01s\xb1\x0c\x80\xf8\xf1\x07\x0c\x01\x0fS\xe2\xee\xa7\x8b\xe3k\x95\xf9z\xe5\x41\xa3$\xa6\x0c\x95\xfa\xb0\x8c\x0f" "\xfbN;\xd1z\xd6\r\xaaj\xf1\x00\x9d\xedq\x9f\xa8\xf7w\xe0J\xe3\xf5\x89\xb3\xdf\x1f\xf7\xb3=\x9d'KVm\xcc\xc0K\x19\xba\xc3" "#\xfa\xfa\xe3\x33\xb1\x38\xabH\xea\xc2!\x12\xcc\xb4z\xf2\xba\x44\xb5\xbc\r\x88\xa6\x1f iG\xd8\xa3\xf8S\xa6\x0f{`\x14\x10\x45\x8d" " i@Y\xbe\x31\xf8\x83\x63\xc3\xb5\xf3\x80G\xe2\x9c<\xcb\x13$\xcb\x0f\xaf@\xc6\x07\x37\xd0\x62VP\x13\xc4*\x65'\x1e\xde\x38\xeb" "\x42\xd8O\x83\x62\xb1\x03@\xce\x18=\x14\xf1\x66\x41\x31y*\xac\xd1\xd1\x65q\x1d(\x91\xd1\x95\x46=\x1e\x0e\x12*\r\x31!\x8f\x0eq\x02#\xd9\xe6\xd9\x31\xcfX\x1c-\xc4\x38\x89" "\x19\x8d\xcaYr\xd6\xf2X\xba\xf9\x43\x96\xee\xadM\xb3\xe4\x18\xa3\x65\"\xaeW\xee\x82\x9aNt\x8c\xc5\x45\xc2\x16\xc4\xe4n\xc6\x99X\x65" "O\xe8\xcb\xe3\x15'\xf7\\\xb8\x8bv\xd3\x64\xed\xb7\xc2\xc9\x9as\x36*\xf6\xe6n@\x99\x1ei\x1b:\xbe!\x33\xbdwg)M[\x44" "{\xa4\x19\xd8POt\xe5\x98\xc2\xe8\xdd\xf7\xc8\x8c\xff\xc6\xf5s\x9f\xd1\xa3\xfc\x1e%\xb3q\xb6\xc2+\xfa\x86g\x31\x7f\x14\xa7\xc4\xd9%" "\xf3G\xec\xe9\xa2\xa2\xd3k|\xb8\xf9\xdc}q\xf1N\xd4\xff\x19\x9c\\\xbc{\xa2\xf9\n<\xb1XH\xa6\x05\xd8\x9e\xb9\xe6\xe2\xb7\x8b\x0f" "\x17\x63\x14\xf1\xe8\"\x9b\xdf;\x36xt\"\xef\x64\xf1\x81\x94\x1d\x88\x66p\xebl\xba\x85\x46+\xbc\xbfOo\xdd\x85\xb3\x01\xda\xc8\x82\xd7" "\x99\xe7;v\x46\x8e\xd1\xa1Y\xcc\xd5\x03\xa6\xa3\xbc\x98\x63\xe7m\x11\xf1\xfa\x97\x07\x9c\xc5v\xa3\xd0\xb2\xe3<\xa0\xfc\\&\x8a\xe9\x18*" "\xe5g\x0f\x07\x9e\x88\x88>\xfa\x33&\x62W\x85\x9a\x0b\xd1\xd2\x10\xffY\x62\xcb\t\x15\x9d\x95\xb3n\x13u\xe4\xe8]\xb9\x87\x90\x02\xaf_" "\n\xf3>X.],}\xdd.\xf6\x61S\xe6\x66\x10\x44\x9c=Q\xccWQ\xe0>\xd6\xabx\t\xed\xb7\xa9\x10]\xff\xdcT\x93\xa7\x92" "\x33~\x36\xb8\x61\xd6\x87\xce\xd0\xd4\x9c\x88\xd9\xe6\\\\:\x1d'\x8c\x0f\xa5\xd3\x08_.\xce',|w\xe2w!\x16_W]N\xdf" "G\xd8\x63)\xbb\xc3ol+\x44)\x85\x88;\xd9\x9e\x13\xcd\xfbu|\x8fn\xb2\x45\x13\xd9\xde\x10\x45\x87QL\xc7P\xb3\xdb\xbf\x44N" "\xba\xc7\xf9\xd4\x98{\xe2\xed'\xd1t\x9f\xb0\xe9\xbe\x30\xdbz\x90\xd2\xaa\xa8\xe1O\xa8\x07\x61T[\x66\xaf\xbe[\x1cy\"gu\xcc\xde" ")Q\xb7Ll\xbc\x88\x80\x64\x46-\xd3#Y\xaegI\xf9\x89\x05\xd8\x9aX\xc5\xec\xf5\xc7\x9c\xbes\x06=\xdf=\xaf\x0c\xf1\x06\x38$" "\xe6G\x92\xdf:\x06\x63\xd7\x94\x9a\x86\x97.=\x10u\xe0\x87\xf3g\xe0\x63\n\x9a\xd3W\x88\x63\xe0\x84\xef\xcb\xecw\x8c=\xa7S\xc4k" "\xe0=\xf0\x91H\x8bG\xd3}\x17L\xfe\x05\xc3\x1e\xc2\xca\x0c\xf4\xb1)\x87\xc0\x16Q\x1f\x02\x33\x1c\x34}\x05\xe3\xef!\xa3G\xc2\xd2\xdb" "\xbd\x82\xe1^\xf8\x88\xe5\x91t\xb8x\x83j@\x42\x05\xcd+Sv\xc9'\xe6\x00v\xd4\x41\xc0v\xe1^\xe9\xc1\x35\x31\xae\xcc\xd2\xaf{" "\xb2tr\x07\xf1\x81\xa8\xed\xa3\x89\x1f\x39x\"\xee\x34/\xfc\xb1`\xf2>j\x64\xf1\x34\x32\?\xfc\xa1-Q,s\x8a\xc5ml\x93\x95" "m\xd7\xa6r\xc4\xe9\x7fS\x39\xf6\x1a\xbc\x30\xec\xe3X\xe3\x30-H%gl\x32\xa1\x62z_)\xd8\x11\xd1\x8b\"\x0bsM\xaa\x1a\xca" "\xdb\xb6\xa2\xdd\xa0QQ][$\x06\x81\xc1\xd1\x15\x86m\xbcr\xf1\xe2\xd9\x89\x98qSq}G\x91\xbe\x92\x15\xe9\x0b\xe6l!\x16\xb8" "\x63\x03\xf7\xcb\xd2\x8d\xa8\x01\x95\x8d;L\x9d\xd1\x14\xd1\x43\xf7\xcbHM\xcc\x45\x38\x39z\x18\xd9\xdc\xf9*\x1a\x64\xaa\xbep\x42\t\xab\xce" "\x15\xe3\xb9\x35Jq\xec\x16\xf7hU\xdci&P]\x46}\xe4\xab\xa3L\xef\xa3\xf8\x32n\xe5\x9f_\xfa]@\x05-\xa2\xee\xa6\x15\xa1" "\xda\x03\xb4\xae\xe0\x8f\x39\xbd\x37\x37s\xcd\x36\xb8x\xf6\x86\x46,r\x17\x44\xef+Ry\xacX\xecNX\x33!\xfaS\x88Z\rU\x85" "\x33\xad\x46\x37\xd3\xf4~\xd1\x32\x98/X$/\x38\x05~\xca\x1f{\xe2\xaf_\x41u\x45\x01\x8e\x7f\xae\x31@g\xa2s\x62\x9e\xdf\xf6\xe3" "\x98K\x9fU&\x16\x17\xd3\x11\x94\xad\xef\xbc\xcf\x18mV\xf1\x63H\x31y\xf8\xf1\xfe\"Y\x1d\xd2\xf3\xc1Z\x00\xc1\?&\x88\xb0\xdcJ" "\xd8\x96\x98\x9e\xbdp\x16\xc8\x1c\x97\x98\xc8%\xbe\xb4\xd3\x04\xc7x,V\xc5\x31\xfas\rm\x16^\x36V\x15\xd4\xbc(\xa3\x88\xe9\x16\x95" "\xdbh\xee\x16\xd7\t\xdby\xe3\x84\x36\x99\xd1\x33I\xdd\x8c\xb2i\xbe\x31l!\"\r\x03,P\x10\x9cs\xce\xc8\x9c\\\xc5\xb5n|w" "\xa1/\xb0w\xe5\x8a;\x63\xa2<\r\xc4/ \x1aHg\x45\xd4\x8d\xdan\xf8\x87\xd6\x06\xc5\x02>\x41\xd4\xf8)\xee\x1f\x91\x05\x41\x35\xa3" "\x91\xc0gY:\x46\x63=\xbd#\xc6\xcd\xba\xab\?\x61\xad\x90\xb3P\xca\x38\x64\x9c\xde\xc9\r\x30\xd7P\xd9W\x98\xf5\xbe\xcd\xf4\xa6X\x31" "\xa7\xc5z\xd0X\x87\xbf\x87\xc6\xc9\x81\xe8\xf4\x95\x99.\x38\xb9V\xd1\xccJ\x14\x39\x35\xa7\xe2\x1a:\xe2\xf4\x9bh\x13x,\xa3\xda\xd1\xc5" "\xc2\x35\x43\xed,\x1a\xe8\xbcN\x91)N\x9c#\xc7\xba\x30\x45\x31\xc8\xe3\xe9\xa9\x63wW\x9c@\xb2,;\xdd\x92\x89\xc5\x62\xa6h\xa9g" "\x93x\xc8\x9f\x9d`\xc7\xa7\x1aV\x9b(\x32s\x08\x0bO\x14\xd3\x39\x9aM\xf7\x86X\xec\x39\x97\x33\xe9;\xb7\x43\x32/\x0c\xc6xp\xbe" "\x05\x63\r\xeb\x45j\x38\xabY\xf0\x0fQ\xff\xbf\xb8\x04\xfb\"\xea\x06J\xfd=\x9f\xdd\xf2\x37\xbf\x98\xcf\xe5\xea\xea\xbc\xae\xfa\r\x13\xef\xca" "`\x1d\xe6\x62\xe4\xee\xe8\xbcN\xd7\x42\xc5\xc9\x14\xe7\x01(\x33\xe7\x1b'^,\x9d\xd8\xefR\x14\xdb\x16+\x17r\x86\x64\t\x11i\xbd\x8a" "\x98\xdd_\x89\x1e` \r\xbb\xcf)z\xb3\xf9\xc2tSi\xe4\xea\xe9\xba}\x8e\x83\x98p\xd2\x13v\x9b]'\xb6>\xe8-\n\x33\xa7" "\x15\x37\x1c\x9f\x8f\x93\xba\xae\xa5\xc5\x81\x35Z\xe0\xc6\x19\xf7\x30\x9b|G\x97Z\xd6\x7fwJ\xe7|\x83\xf3\xbaUL[\xf8\xa5\x8b\x31\x9d" "i\xf7\xf8\x17\xf6\xb0\x38\\\xea\x12\r\x07\x1e\x86:\x97!\x9e\x01\xb1,\xf7V\xfa\x35\xe2nU\xa7\xe8.\xaf\xe2\x0ck\xf7\x94!\x33^" "\xc5t\x83\x1as\x9f^\x8b\xaf\xabv\x39<^)\xd0U\x0e\x98\x43\xb4\xec\xf7g\x19\xd2\xb5t\x9b\x07\xaa\x94>\xda\xc5`o\xa7G=" "\x61\x44\xe1\x80>\x18\x12\x19\x15\x14\xd1\xdcU<\x91\xe9\x34\x66\xb0q\xd6\xca\x15\x1e\xf6\xaa\xef\xba\xe5M\x95\x99\x35\xe6&\xd0\xb5\xd1\xf7\x30" "\xe4\xee\xf7\x88\x06\x0e\x86\x88\x0c\xe0\x9a\xd7;\xa2j:j\x9cW\xd4\xf3\xeb\xd2\\v\x19\xd1\xe1\xbc\x42\x1em\xe3\x82\xdf\x1a\xb3\x96t\xc2" "\x7f\xc1\x61\xde\x07L\\\x34\?\xfbL\x93\x10\xd1\x8d\"\xec\x1f\?\r\xa7:\xd7\x8f&_\xe8\x03\x36\xc2\x86'\x35N\x8b&\xe2\x9f\xa2\x19\x8b" "h\x10\xf0NJ\x9f\x44\xc6\xd8\x44\xa4vJ\xca\xfb\xc4\xe2\xdc\x01\x61\x8f\xa6\xf4\x03\xf1\x8d\xe8.^~\xa3/K\xedG\xc7\x43\xd0\xec\x07" "\x14\x93\x15\xfe\xa0\xea\x90}S\x44\xba\xf8*\x62\xcc\xe2\xac\xb0\xa0\x37\xb3\x61w\xd7\xa5(\x03\x1e\x07\x1a\xbeV\x41z\xadX\x41(h\xd5" "\x1bs\x1c\x92p\x91N\xf1\x95\xe8\x36\x39\xde@\xb4\x86\x95\xbc$\x46H\x38Z{IP\"\xb2\x11$\x9ds\"#\n\xba\xefK\x61\xfe" ")\x1b\xef\xc7\xe3+\xc7Xi\x9ds:\xb8\"&\x0fK\x06\xc9\x84\xa5\xcd\x35\x17\x61\xfc\x07\xcbz\xc7\x38\xf8\xa8\xc6\x45\x1c\x82v\x95\x03" "\x99N\x8b \x32\x94t\xfa\xc0k\xa2\xa7\xf6\x94!\xe5J\xd3\x36\xe0\x44\x8b\x98u\x8e >\x13\xbd\x00\xb7\xa6}\x07\x1b\x8a\xb4\x38T\x44" "\x08\x80\xb3L\x82^\xc0[\x19\x62I\"\xe6\xc6/n\xe3\x14/\x96\x8d\xf0\xb4\xe1\x85),\x33\x97\x33\x9f!\x33\x45\x18\x63\x1b\"\xa6\xc1" "$\xbb@\xcb\x81\xc1.\xe8j\xfc\xf4\x82\xd6\x32\x63R\xc9\xd9;\xf3\xb7U\x84\x91\x9e\x9cmv\x1a\xf6\xb2\x1a\x11\xc7>+\xe6\xff[\xad" "\x99\\\xac\xf4\x34\x93\x9e\x86n\xb0\xf2\xdeY|\x82Zzh\x87\x8d\xe4\x12u\x01sM\xb7\x1aw;\x8aZ\xb6L'\x05\x43\xf2\xbe\x8a" "\xc8M\xd0\xa8:r~\xbd\x00{\xbe\xddg\xbf\x10\x17\x9e\x18\xd7\xaf]\xbb\x95\x02\x44\xb6\x45\x64|_\xc5\xd7G'\"\xf0,\x62\xb6\xb7" "\xcf\xe0\xaf\x32\xe4\x07\x30\tSPw\xbb\x82\x32\xc6\x62\x35\xc5\xb8\xfc\x94\r\xee\x44\xd8\xad{\\\? &\xaa\xeb\x44\x62\x39\x61H\x16\x91" "\x11\xc7\xa4\x7f\x43\xdc\x15K,\x94i\xb4\x17\x8f\x06WK\x30\xdd,\x9c\x06\x18\xec\x65\x17\x87\xd6\xbe\x45\xc1-\xd1]\x15\x31v\xd7k\xaf" "*\xbf\xd8\xc9n}\xe3Z\xe6\xd5\x89\xd9/\x1a\xf2u\?\xbf\x9f&\x99\xe7P\x33$\x9b\xe8)\x0e\xa5\xb4u_\xb0Z\xfa\x14\x14l\xf9" "\xcf//w\xab=\x06@\xb5`}j\xd8\xec\xaf\x87\xf9\xfa\xa7\x63\x8f\x99`O\x97\xb2P\x9dJY\xf5\x96\xe1\x84\x9c-\xf3y\xb6\xd3" "\xe4\xa9\xa6\xe7\x39\xf5\x8aO\xea+\xce\x93+\x43\xb2\xb7\xdd\nJ\x8f\xca\xeeO\x98\xfa\xa7\x65\xc3\xb5y[\x38V\xb8 \xc2\xbcx\xad\xb2" "\"\xc0\xa9\xac\xec\xee\\o\x14\xd6\x02\x18\x06$\xb0\x65\xcbg\xab\xa1\xc7\xb0s\x18Y\xfd\xc5\x63\xc9\xaa\xf8\xe9\xee\x93\x7f[o+\xda\x1d" "\xca\xbe\xa7\xe6\xd3\xdd\x8b*\xcb\xe8\xd1\x31\xafs\x0b+\xf2\xe3\x95=\xfc\x38qs\x95\xee\xb9\x0b\xca\x80\xac\xc2\xfa\xa5((>\xc3\x08\xad" "\xe2z\xc5\x30\xa2\xb2m/\x43\xf8[\x18'\x89U\xfc{\x8e\x83\xc9k\xd8\xf0\xb9\xc6\x88\x83\xa0\xfe\xff\x17\x95u;\xe2\x12-\x15\x31\xf3" "i\x45\x37\x44\x92\xf9\xbd[\xcb\xd0\xc7\xeep\?w\xf5\xa4\xbeJN\xa0\xf4\xee\x9fM\r\xaa\xff\x01\xaf\xe9\xe1'}G}\x0e\xd1\x62\x87" "Wq\x1fM\x19\x89!\x82y\n\xf8\xa1\xcf\x10\r\xb5\xcc\r\xd2\xc3\x61vwP|\xf3)\x37\xe8\xac\xdd\x94p\x18\x42\x9e\x9f\x1e\x15\xcd" "Q\xef\xa9\xc5(\xb0N\xcbN\x1a\x34\x18\x85qu\x8a\x88\xe9\xf7+\x83!Ny=M\xb8J\x0b\x8b\xedk\xc9\xf3\xbev\xc0:\xba\xc1" "\xf3\x07\x91\x99\xff*\xb2VsQ\xc6\x32\xf7\x83RP\xcc\xa9\ts\x35\xfe\xac\xc9\x17\xc9\x1f\x34\xe1\?\xdf@= Q:\x0bNS\xae" "\x61\x65\xbf\"\xf6\x06\xa9%\xaf\xf8\x1b*\xd9\xd7G\xe6\x41\x61\x81~\xcd)\xdd\xb7\xc0\x99\x0eoz\xc8\xa1\xee\x9f\x87\xe0\x9a\xee\x9eV\x8f" "\x9c\xd8\xf8v\"M\x80\x37n\x9c\x0e\xf1\xd7\xa6\xf9R\xd6\xc1\x39\x1a\xb9H\xc5\xfe\xd6q\xedg\xb4\xc7\xec\x63\xa6'q\xea\x45p\xf7\x9f" "g~\xda\xe2\x1a\xe7l\x95\xad\xf6\xb2\xe5\x9aLs\x14\xd6\xbc\xe0\xad\xd5!N\xaf\xe6\x05\x9c\xf6Qv>N'x\x07pW\x04\xb9\xd6" "V\x44\x37h\xe4\xa2{-\xef\x1b\x66\xa2\x30l,(\xffs\x41\x91\x30g\xff\xcc\xf0n\x10/\x16\xcc\x8f\\:\xfa\xc5\xd0\x98\x96\xfc\xee" "\x98\xbe\x02\x93\x13t\x04\xc0\xaa\x63\xd1L\xba\xf9\xee\x82\xac\x41\xd4|\\\x8e\x8c\xc2\xc4z\x9e\x1c\x91\xd1\xf5\x15\x91\x9e\x81\x15\xb1\x8fX\xce" "\xe0\xee$\xab\x36\x11'\x8a\xe7\"\xbb\xf9\xaa-N>\x45\x9cP\x0e\xb1\x38\x7f\x16\x05^.\xb5-\xf0\xa6\xacm\x41\xb1\xbb{\x8d\xd3)" "\x82\\\x1b+\xa2\xeb\xf3\xab\x01Q\x9a+g\xb2,\xcb\xf6:\x64\xbag\x05\x96\x84\x80\xfd\xa0\x35\xac\xae]\x13\xfa\xf9\x43\xd4\xffi\x1f\xad" "\xf1J\xd7#\xa2\xcd\xcf\x05{w\x63\xd9\x06\xef\x06\xab/\x05\x99\xd7 \x62\xfa\x04\x63l\xfb\xa3\xf1\x17\xac\xa4\xe4:K=\x64\x64\xe4\x8a" "\xe8\x8fx\xabz\xe5o\x80M\xda\x8d\"\x32\xbf\x9e\x83\x81`\xb1\xc9@-\xdd\?#\x8a\x1b\x1d\xbf]\x80\r\xcd;\xae\xb0\?\x06\xbe\x13" "\xd9\x96\x45\xa4\xff\xae\"\"\x1d\xcc\xf6\x15\x64\xc4K\xc5\x95\xfb\x34\xb7\x10&\x1esw\x98\x33\x8e\x82\x9a\xd2Z\x64\xdc\xa6\xe5\xbf\x1a\xae\xfe" "\xe4\xdf\xad\x89;L\x64\x8b\xc8\xf4\x18\x15\xd1.T\xfcgV\xb5\x96\x15\xf9\xd0\xca\x8aL\x04\x65\x45\x06\x97&\xc8\xfe\x9a\xbd\xd2\x82\x62\xfa" "\x44\x19\x66\x18r\xd1\xa5/++\xa6\x12\xf4\x1c\x82\xea\x0b'\xca-\x33Q\xc7\xb1\x31k\x66\xed\xde\xf8\xc1\x94\x83\x8e\x8ah\x93\xe9\xc1\x1c" "\xc7~\xd7\xd2J\x93\x93]\xd8\xce\xb1\xe6\xb9$\xfakp\x98u\x9a\x00v\x98\x8apmT\x44\xe6\x88N\x9b\xc1\xf4\x13\x91y\xb3V\x64" "\xf7\xc1N\x91\x8a\xd4\xf6T(\x82^\x11\x93\x11S\xbe\x88\xa3\x1a\xd1[\x46\x96\xda\x1d\xdb\x14\x19\xdf\x14\x91\xe9\xa0\xe9\x91\xa6.\x65\x0b\xeb" "\x80\xa4\xc1\x98\x18\xefmh\x1c*\x9b\xb4\xa8\xc6\xd2p\x7f\xb7}\xa3\x88\x83\x9fjitM\xd4\xcc\x64\x8cii\x84Z;\xfe\xda\xe9\x32" "_\xfc\x19\x32\xc3\x05\xbd(TZ\x9f\x32v\x99\x36\xf0\xf2\x9ak\xe2n\xdb\xc5&\xe4\xca\xe2\xef\xbb\xb4\xfa\x43\x96tO\xd3\xed\xc2\xb1\x97" "\x1b\xf7Y\xab\xcb\x00\x8d\x88\x9eS\x90v\xf2\xa9\xc6+\xab\xa7\xd2\x8b\x0e\xfd\x8c\xf4\xe2r\xf7\xf3\x42\xd1\xbc=\xd0\x98\xc7\x46\x9b\x8a\xaa\xae" "\x91\x82\x9a^\xb9\x9c\xe5\xf4\x06m\xe5v\x0fxL\xa4\xbb\xcd\xd9\x06\xec\n#\x88\xeeu\x87{\xbc\xaf\xa4#\\\xe5\xe1\x85K\x9a\x38<" "\t\x32\xd3S\x44\x8e\x66\"\xa6\xe5[\x0e\x9b\xca\xec\x31\?\x35\xe6*\t\xea^\x8a\xfb\x8bt\xfe\x12\xaf\xa7\x45\x99\x9b\"\x12\x16W:\xa2" "\x8e\xb4\xec\xe4$\xc3\x46\tZ\xdc\x7f\xe3\\\xb0\x32\xdd\x39~\xe8\x18\xdcs\x11\xcd\xbd\x38\xd9M[\xfb\xe6\xe3\x85\xc5:\xb2\x61J=}" ":\xc0\x39\xb2\x10\x7f\xdb\x1e\xb6L\x8f\ns'\xba\xe4\x65\x98\x9d\xf6\xd6\xe5\x8b\x98\x1e\x43S\xb2\x1f=\x05\xf1\x18\x8d\xef\x89O\xa4\xe1\x64" "\xec\xfd\t\x96N\xfa\x64\xaa\x11\x31\xb2\n\xd3]M\xe0\xa3\xa4O\x8f\xcc;\x65NG~\x8cN\xa4*\xe4\xa8\xe9^\xa9\x96\xd5\x9c~{" "\xd6\\J\xe6\xe9+\x93/\x63z\x87\xf9\x89\x82\xfa\xa3\xc8~U\xd6\xacsh\x16\x66\xc2\x61\x86U\xbd\x9c\x91\x16\x64N\x92\x88\x9c\xfdV" "\x11\x33\r\xe9\xe8\x0f\x31\xbb]%\x98\xc1HG\x13\x8e}V\xf4V\xc1\xa7\xa3w\"W\xb2\x8a(\xea\x96\xc1^\x65\x83[\x9c\xab-\x0c" "j\x08I\x82\x82\\Q$\xa2\x1e\x9e\xf6\xd4\x96\x66\x85}\x91k\x9c%\x12\xf4\xbcW\xcbh\xf4)\x13_\xb6\xfb\xe5\x31\xec\x85\xa5\xcc\xb3" "\xf1\x84i\xa8\xaa\xb8J\xf1\xc1\x86\x98\x9d\xbf{\xa2\xeet\x38\x87N\x1b\x97\xfcw\xc0\xba\x1b\x1f\xe6\xcb\xa0J\x64\xf9\x61\xb4m\xc7\x86k" "/\x1d\xcb\x16\xd0\xe1U\x86\xad\x63T\\\x36\xe3\xe9T\xde\x8e\x86\x31\xd8\\\xc6\x87&|u\xa3\xe7X\x97'\x33\x85\x08\x0c\x8b\x63\x94}" "L\x98\x08.,\xeb\xbe\xd3\xcfQV\xb8\x81\xa2\x93\x9c\x01\x32\xbe\xc4Y\x84\x35\xa6\xd3\t\xba.\x88\x65{\x82\xf1\x04\x35\xcd\xc6I\xc5\x30" "\x9e\xfd\xaa\x92Y:\xa1\xf8M\xd4/\x0cx\xf1\x15\xd3\x1f\x39\xb3.\xc8\xf4\x8ft\x12\xc9x\xc6\xec\x39\x61\x9e\x99L\xc6o\x36\x8b\?j" "\x16\x87\x12\x0b\x43\xc5#\n\x98N\x1eS\xcc\xa4\xa6\x93g\x66\xe0p\x95\x93\xees\x05W@\x44\x86p\xd3\xd9\x15\x91\x36\x38\x33\xbc\x05\xbd" "\xa4j\x61\xe9\xec\xde\x99\x44\x1c\xc9g\xde>\x84\xc2\x9e\x19\xe9Kgo\xdc,&\x9dM\xd2-L\xae\xd9'p\x41\xa4\t/\xa2\x1b\xbb" "\x45lJ\x9f\x98x.p\xfa\tU\xf2\t#\xe4\x13\x36\xe0'\x1e\xf8\xf3*\xcf\xb1\xae\x91\xb9\xda\xfb\xbc\x62\xdaP\xfa\x89z\xa2\x45\xf6" "\xa9\x37\x86}\x43k\xd8\xecK\xd1[\xc1,\x8c\x99\x83\"r\xea\x34\xfd\xaa\xb8G\x62\x16\x01\xd8\x07Q\x37\xfe\xa9\xbe\xf9\xecWJ;\xca" "\x86U\x8f\x39\xa3\xd8\xb2\x91\xff\xd7\xfe\xdf\x15\xc9\x99\x96\x39\x9d(\xac\xd8\x10&g\x43\x31\x14\xcd\xa4\xc5\x1c\x31)\xe3\xda>\x15\x91N/" "\xa2\x39\xde\xc7\x66R\x39\xc3\x46\x18*\x62\xe6^\xc4\xe4\xf2@\x0f;\x41\xc2\x80\x14xQ\x19=\x93\xac\xb8\x43\xb9\x94\xbb\xa7o\xfc\xc6\x1a" "\x15\xba^\x11\x19o\xd5\xcb`\xf5s\xba\xc1\xe5\xa8\xa0\x91\xc9\xad\xdb\xc6\x84\x1f\xce\xcc\xd6\x10\xd2\x31\x97`+\xdb\xf4\x18L\xb6\xac\xf8\xe6" "\x33\x31m\xac\xb3%K\x37\xbej\xd9\x42\xe3\xf1\x8dJ\x9b@\xf8W\xc5\x62'\x17\xc7\xf4\xc7i\x1aK\xd9\xa4\x83\x9d\xc7\x95\xb9\xdaG&" "\x8e\xa0\xa6osp\xdc\xf2\x8b\xe7\x44\x1c\xe7W\xe3\xbc\xa5\xce\x1c\x1f]\x30\xbe\x85\x43\"\x15w\xf3*\xe3r\xc2\xe2Z\xb9`\x03oM" "\x43\xba\xbd\x62n\x90\x88\xc9\xea\xcd\x13\x19*\xd6\xe3\xdd\xe0\xa8\xa7[\xbc\x1fL\xe0\xa4\x30K\x33xp\x82\x9c\x86\xa0\xb9+\xc8m\xb7T" "\x84J\xd0H\x36\xf4\x97\x8a\x08\x95{\xf1m\x15\x31T\x88\xc8\x0e&\x62z\xf4\x02\x31\x04\x36\x88\xdcU\x44\x44\xea]+r\x36\xd2\x32z" "w\xca\xdc\xcd\xba\x89;+\x62\x13:\x65\x9cS\x63T\x43\x0f\xb1+\xde\x91\xb0\xe2\"\x97\xba\xd3'\xcc_\x61\x62\xabR\xe4\x44{\xb6w" "\x45\xf4\x66y\x33lW#\xa8\xa5\xb0H\x85\xa9S\x07\xdf$\xdb\x1b\x99\xdai\x12,\x38\xbb\x92\x95p\x8b\xa5\x16\x31~\xb8\xa4\x91\xa2l" "T\x62\xcf\x97\xde\x16o\xbe!v\x89\xbb\xb5\x0b \x64\xa5\xcfx\x84\xf7\x81\x45\x88\xba\x02\xb1\x98\xe7\x11\x66\xce\x9e\xb2\x93%\x99\x37\x9d\x93" "\xed\xdf\xd3\xde\xc8\xcayv\xcd\x93m\x8f\x9c\xa1\x10to\xfb\x30\xdf\xfdm\x8d\x07\?\x04\xa2qR\x41xs\x64\xde\xb2m\x15\xe1Kr" "\nL\x30;\xb9s\"\x96\x8dq\xb7&\x41*\x61\x66\x39\xe5\x07\xfc\xed\x31o\x85\x41\x02\x41\xcf\xf8P\x36\x99\xc6\xcdW\xbd\xd3\xa3I\\" "\xaar\x00\x94O\xfe\x63\xef\x8e\xac\x9b\xc7\x8a\x91\x9b&\x8c\x39\x1ezL\x88\xf7\x13\xb0\x9d\xb2\xf3Y\xfe\?\xde\xea\xc5\x01\xd3j\xb0\x99\xa1" "\xa2\xce\x1e \x1c\x93]\x36\x88\xba\x0f\x34\x82\xa2\xc2\xa8:\xac\x88#/k\x38}X\xd1[\xc1,\x8c\xd3\x41V\xa4\x35\xca\xac\x31\x41:" "\xbc*\"J\xc3\x9c*\x41\xf7\x36\xfa\xef\x44\xcfUQV\xec\x08!\xcc\xf3\x0f\x85Q\x91p\xa5jv\x8d.|\xbb$\x32\xf9G\x44Z" "\x39\"\xd2{\x16\xd1\xb5v\x64v\x31\xc6)\xa8\xeb\x11\x10\x9e\xd7\x83\x0f\x83\x1a'\x64\x95\xd5\xa6\xae\x95\n+|\x00\x61\xde\x64\x45vw" "\xe8:\xb4=\x08\xa8\x96\xdd_{\xc6J\x36\x1c%\xbd\xae\xf9\x80\x82\x19Ni\x64Y\x31=\xd8O\xf7_\x32l\xc9\x92\r\xd1\xd6\x1e\xcf" "\xe2\xca\x91\x97\xc8\x97\xfd\x19\x13\xdd\xa3\xbd\x1c\x10U\x9f.Q\xcd\x7f\xcf\x89\xdc$({\xef;\xa5\x36\xbfW\xe7\r\x83\ns\x07\x31\"" "\xd7\xb1\xed\x80\xe2n;\xc6\xee]\xca\xe2R\xd9\x63\xa6{\x83L\x9d\x9cM\xe6\x18!s\xf6\x1e`\xb3\xe0\x9c}\x8e\x90\xdb\xa2L:\x10" "\xc6\xd9\x9c]v\x10{\xcc\x99\xf8\x32\xbc\xa6\x9dhR\xb4i\x80\x96\xd9\x89\xf7z~*\xcf\x12K#\x95\x15\t\x85u\x31#\x89\xda\xff" "\xac\x65VG\x1e\x97\xe2nu\x0f\x7f\xbe\x9eo\xe4v\x8c\r\xe2r\x66S\x0f\xea\xf9\xeem\x15+\xae\xf3VW\x8f+\xcfz\xdc\xc0\xa9" "\xe6\xcf \x93T\xca\xa6\xc0/\"\xec\xf7z\xde\x8e\xf0\xad\xfaJO\x1f\xeb\xcd\x91\x64TG\xdc\xb3\xce_\x8b\x87y[\xafk\xfa\xe2v" "\x1a\xdf]y,\xdd\x04>\xb3\xe3\xb6\x32=#\xcf}\xf6\xf5\xeb\xb3/\xaf\xca\x95}\x1d\x61U\x43\xdd\x9e\x66\x93~\xf6\xd2\xef\x96-\xb0" "\x16W\x1d\xf9\xcau\x98\x1f\x8ay\\\xf0\x8b\xcc{\x0b\xca\xfa\x81\xc7\x8a\x39l\xb2\x46\xcd\xb2I\x8bXl\xae\xa7,.\x9d\x62\x1dJ\xce" "\x9a\xc7\xbfY\xbc}\"\x33\xbd\x19v\xb7\xad#\xcd\x41Q\x1e\x17\x9eO=\xbd\xa8\x9b\xef\x15\x0e\x9aV\xa6\xce\x8e=\?\xa7.*T\xb1" "\x19\xcfs\xae\xfb\xb2X\xb4~@+\xae\xfc\x35v\x63\x81V\x1c\xfe\xf1\x8d\xf5\x08\xd1\x15\x65\x62\xd3\x8b\xf9\xea\x35\xc2\"]\x13\x0c\xb6n" "\xc1\xe4\xb9\xa5\xe9\xfe\xbe\xa8\x1e\xe5:/\xae\xf1>\xca\xee\xaf\x31\x62\xe5\x05\x45\xf5\xe9\xf9x\x36\x35+g.\xe1\xa8`\xf2\x84\xf1\xa0W" "\x94\xcd\xe2\xe6&\x9et\xac\x37\xfc\xbb\x01\xdb\xa4\x88\xf8z\x99U[~\xf1q\x39\xb6\xcbpr\x66\xa3<\xb9h-\xf5\\\x9c\xcd\xb1\x16" "\xad`\xc5\xf1\xb4\x45\xd9\xef\xe7\xb4\x89J\xdeO\x65\xd5\xba\xd5\xa5\xba\x1d\xe5\?\xef\xe3\x9f\x87\xde\xe6\x65\x1d\x31\x07\xaa\xdek\x15w\xc7U" "\xf8\xe3\x01\x31\x0f\x8f\xa2\x85|\xa0u\xda\x03\x04\x15\x31\x8c@\x44\xfa\xc4\x99T\x15\x7f\x1c\x46\xc0YZ\xb6WL\xabV\x89\xc3#\x39K" "\xef\xde\x88\xf9>\x1d\x01\x19\xcc{\xf4,\xa9\x02\xa2}\n\xed\xc1\xf6\xcc)-\xd3\xde]\x7f$\xf3jJ\xaa)GL~(z\xbaU" "<#\x8b\x9dG\xd6\x03\x12\xd0\xbc\x30\xcb\x19\x82ig\x88(+\xe6\xab&s\xf5'N\xc0_\x8b\xc7]\x8b\xf5\xad\xc5\x66\x80i\x87\xf3" "\xf8\xaem\xd1n@q.\xe5\xf2\x42rQs\x81n\x9bV\x1cw\xb0*\xe3<\xb1s\x38\xe7\xe9\x41\x8bhj\xd7\xbb\x9f|\\<\xcf" "\xf6\xeep\xc0\xc8yv\xde\xb7x\xf1iq\x91[\x00\x17\x98\x01\xd6\x14\x84\xec\xb0j\xc5\xe5\x31\x45\x1cKx\x81%\xf7\x8a\xe9\xfe@\x46" "\x19\xcb\xae\x97\x16mn\xcd\x05\x06\xb5\x8bx\x9cW\xda\x85\xb1\x8b`.\x30\xd1t\x61&\xcf\x08\xc3]$v\x07\x05\xc5\xd4\x1e\x9c\x90\x8b" "\xb5\x32\x45\xef\x8b\"\x66\x15\xf7\xf5\xcc\x0e\x1f\"~[\xac\x8f\xe3N\xcb\x8a\x9d\x0f\x8bv\x12]\x31\x9e\x1c\xc0*\xbd@\xda\xe8\x05\x42\x00" "\x17\xc9\xc7\x99\x45\xdb\xd1\x05\xf3W|\x91nr\x05y\x91U\x46\x44\xde\x8c\x15\xd3\x83\xa9\x99\xdc\x65\x36,u\xc1\xaa\xca\x0e/\x81\xf9\xfd" "]\xc2\x1d\xba\x44^\x14\x8f\xa6\xb8\xdc\xad/\x88\x85\xd1\x9d\x33gt++\xfc\xf7\x9c\xb9\x83\x92\x95\xe9\x32\x1e\xbb\xdfU\xc1\xe0\x30j\x01" "\x45L\x8b)\x62\x84\xcf\x45g\xdf*\xf3\xc5\xb7\xc7\xdd\xe2\x86\xccjn\xc7\x9c\x8aV\x06\x17\"\x17g\x37\xe9\xec\x99,-u\xd0\xf3s" "\xb6\xad\x62[\xafKl\xf3u\x89\xb8\xe8\x65<\?\xb2h\xa3\xc1\x97\x30h\x18\xc0\xb8\x34\x36\x30\xc3\x1d\xa8.q,\xda%\x8c\x16\xc5\x62" "\x95\xe6\xa5\xb8\x11\xeaW\xd8\xd5\x86\x97\xb0\x44\x05\xed\x35X\x1di\xed\x44\xbf\xf5\x9a\xb7\x82\xcb\xec\xb2o\xd1\x1e\xd0\xda\xc3\x03" "s\x05\xd6\x8f\xf7N\xf4\xfc\x30\xbb\x1c\xb5\x1f\x97\xbe\x95\xd9=[\xfb\x98l\x14\xech\xc5,\x8e\xc1&\xc0\x19\x11\xaf\xb0\x1f\x1f\xbe\xcb\x17" "\x93\x17[\x61\xbaWw=\xc2\x80\xd2\xd7\xe9j\xf9\xacz\n\xb6%\xb2\xa6\x44\xccN\xabV\xb4\xaa]\xd1{\x01\x39\xeb;\x11\x15+\"" "\"\x45\xb9\xe8\xf6j\xceYQ;\x96\x65\?m\xc7\x16\x1fq\xfd\x9aLw\xb1\xed\x0e\xa5\xe3\xc1\xac\xce\xcb\xac\xbeU\x11[\xfe\xe4\xa2\x8d" "]\xaa\x08\x0f;\x17\xef\xf1\x85\x1a\x9e\xa0\xc6\x03*\x45\xac\xeb\xa8`\xcf\xefR\x06/\xb9\xaf[s\xbb\xfch\x9e\x9e)\xd8%\xba\xa7\x15" "q\x11\xc1:\xce\x19\x9f=\x17\xf5\x0c\xdb\xf7\x9e_\xc0*'\xd3`\x96\xe8\x94\xde\xb5W\xfc\xbb\xc0\xaf\xa9Z\xf1\xe4\xb5n\xf2w\x91\xd8" "\xbc\x0b\x65z\x80\xf7q\xf7\x37\x43\x97\xcf\x0bX\x37\xb5\xa2nj^\xddL\xe2\xe5\x63qHj\x1f{\x07\xf6\x11\x85\xed\x43)\xf4\xdd\xfb" "l\xe2\xa9\x9a\x33\xa2\x7f\x9f-\xfc\x42\x0f\xdf\xea\xe3i\x06\xb7\x44\xd7\x14\x06\xb7\xe9~P\x88\xe7\xec\xde\xf1\x35n\xed\xe1\x45\xf3\x42\xec)" "z\x05\xcb.\x0f\x91\x05#\x65\x33\x33\xc0m=\xa0h\xa8\xdd\xc2\xddl\xce\xcc\xc9\x95\xc7\x90X\x43\xf6\xed\x7f\x33\xeb\x8e-\x1b\xa1u\x8f" "\x02\xa2\xbb\xed\xd1\x80X\x14\xfd\x05~\x11\xcd\xe9Qv\x87*\x19\x1f\xc6\x9bo\xd7\x41\xc7+\xfd\xd5\xa7\x8a\x65\xd3\xb1\xbb\x88\xd5\xb0\x8aj" "ln\xbb\x05\xbb\xa5\x18\x1f\xd6\xdc\xa3\x0b+\xfe\x32~\xf0\?\xd0\xd9\xbb\x9a\xd5,\xb1=\xd1S\x10o\xf7{@t\x7f\xfe=\xd2;\x1a" "\xe3\xc9\xbfg\x85\xcf\xd5\x17\x1f\xcf\xf4\x07\x38\x41^\xd8\xc0L\xf1\x88\x0b\\\xd7\x1ew\xab\x18\x0f\xfe" "\x37_\x7f\xa2\x95L\xd3\x44\r\xa2\xa7\xef\xa4/\xd5\t\x15Qq\xc0\x11p,\xc0\t\x04\xc4\x81\x42\xf0^\xba\xad\xe9.N\x44\xec\x1dI" "\xf9\xbc\xdf\xdfk\xb9\xdc\xb1\xb3\x8a\x1a\xb2r\x88\x8c\x8c\x8c\xecrs\x46\x63\x0f[\xc9\xe3O\x99\rX\xd7\x66\xbc\xed\xf7\x89\x63x\xc3\xef" "\x1b\xfdZ\xad\x66\x89\xe5=~\x9f\x39K\xf1\x62\xd5Q:\x9c\x64>u\xa6\xbf\\y(\xb1|\xe0\xec\x42\xd9\x8f\xff\x0e\xd9\x94V_\x34" "u\xef\x96\xac\xaf\xbfGx~\x61\xaf\xca\xb0\x8f\xae\xb0\x0f-Q\xb0\xaa\xb5\xd2\x9d\r\xfd\x1d\xf4\xf5\x96\xee\xb1+g\xc2\x97Z\xd8\xb7\x9e" "\t\xa5\xb6\x95\xee>\x94\xca^\xba\xfb\x64W\xb9.\xb3p\xa6\xb2|\xc1\xbb\xef]\x95\x9a\xfbt\xffQ\xcb\xe5\xea\x00\xec\xc8\xde\x05Q}" "Z\xde\"\xe8$\xe6W\x35\xd9\xbb\x64\x30\x07K\x80\xd9H\x45u\xc2y:\x0cl\xd9\xba)\xfb\xae\xbb\xb8\x1c\x31\x1b\x0b\xa3\x63\x63\xe7\xfb" "Y\xfd\xc6\xbb\xbd\x90\xa0&\xd8\xde\x66\x39\x99}\x9d\x86\xdd\xac\xed\x05\x11\xce\xf5*\xe6\xdbO\xd9\x63x\x32\xba\xb6\x98x\xfeS\x9cv\xb9" "x\xca\x12\xdaG\xd4_\x8c=\xbe\x88\xfa/\xcay&#\xf9\xd7\xa3\x90<\x93\x41H]\xdd\x19\xc7\x33\x0e\x39$y^\xaa}\xe9\xf9\xae" "\xa3\x17x\x15\xe3VI,\x1d\xc8\x62\x66\xbb\xe7\x04&\xbdZ)\xdb/\xc1\xbc\x36\xa2m\xbd\xc5\xa9\x44\xc5l\xf2L\x7f\x1c\x65\xfaq\xd9" "\x8er|\xd6J_z\x8e\xe1\xdb\xbc\xf4\xca_\x43\xd8\xb2\xfb\xd3(\x16'|\xfd\xfeS\xb9\x00\"\\S\x8b{\x89(r\xf8I\x91\xc3" "\xcf\x16\xf7\xf9m\xa5\xe3\x0b\xc7l\x11y\xa7\x94\x8e\xfd\xe8\xb5w\xf0\xdc\xfdW\xd1k\xa4\xee\x45\xe2\x99\xc3vX\xd0\x1c\x42>\x9d\xd1N" "\xac\"\xa7\x06)z{\x9eN\xc6\x8e\xe1\x62\xb0x\xb4\xc2\x65\xde\?K\x9d\x08Xz\xdb\t\x8c\xad\x97\x88Ro\x93\xe1y`{W\xc5" "\xd1\xb6\xb3|{X\x9c\xf3\xb5>\xd6\xca\x95\xe8\x8b\xaf\xf3\xf5\xea\x18\x9e\xe4\xeb\x35\xbc\xff\xd7\x97V\xb5\x15\x66\xd0\xf4\xd4\x31\x9c\x1b\xf3\x85" "\xb0\xb5\x41+\xe3\xa9\xaaP\xc1\xa9[\xc4\xa1|\x05\x9a\x06Z\xd9)T\xd9\?\x8b\xae\x84M\\\xdb\xc8\xaez\xa5\x16/\x83\xcb\xac\xa2\x7f" "\x80\xecnXj\x44\xb2\xc7\x9f\x32\xa3J'\x98\xecw\xd2\xd3W\x06\x10\xfd\x93\xf0\xfb\xbd\xa3\x42\x65\xb8\\\xd3\xf5\xe7x\xde\xbbO\x1b\x8b" "\xa5\xad@\x0f\xfe\x61\xa2\x96\xd4\x38\x41H\xc6h\t-\xee\x61\xdc\xe2J\xc7\x16\x07\xa3-\x0eRZ\xd9w\x45{\"\x16\xe8l~\xa6\x9b" "\x85\x9a\x82\x8c\x84\x9fY\xa9Xsq\x93\xa2gw\xbe\x8e<\xa0'Z\x8b\x1ex\xad|\x07}X\xbe[\xc9\xf7\xaaY\x13\xdfI\x9ar" "\xfdz\x17\x11\xd8>\xf2\x88\xf3,\x8a\xe1\xb2\"\xc2}\xbc\x95K\xdb!\xcd)v\x44l\xb9\xda\x9f\xdf\x9e\x11;\xa5\x46:\x87s\x8d\x62" "I\x8f\x34v\xe6\xeaW`^\xc3\x43\x82\xf7~\x9a@\x15I\xc5\xc1<\x88\xec\x97\xf4\xfb\xb2Y\x87X\xea\x8d\x35\x81\xad\x88\x8a\xd3\xd3\x92" "\x18\xde\xae\xa7!:\xd2\xc1\xba\x33)\x8e\xf9`\xe8\xacT\xdatV\x45\x06\x10X\xd0N\xe6\xbdk\xfez\xac\x99\xf9\xc4\xd7z/\x17\x42" "\xd1\x98\xf4\x18vrjq\n\xae%\x99\xa8Y\t\x43\xbc\x33\xeaV`\xc5\xcaz\x99\x9d\xf1\x63.\xa6\x8e\xf4\x8d\x17\x91\xb9\xf2\xb3j\x8f" "\x84R&\?\xb7\x61\x0c\x8a\t-Y\x8a>\xc8S_\x43\x16-\xe9.\xf5\x81\xf7\x1f\xc1\xd6L\xe5\xc2\x92\xa9V\x81\xf8\x99-\xd7\x85\x05" "\x97\x16\x08\x61}\xc7\xa4\xb2\xcd!k\x8b{\x11\x0bjy\x61L\xa9\x96W\x62\xc1\x42j\xcc\xce\x0b\x99\xb6\xd6\xd2\xa5\x83\xc1\xdfN\x10\xef" "\x46\x13\x95\xa2\x7f\xb1\xe2\x12\xba`\xd1T=\x83Ku\xc8\xb8,\xaa\xa5\xdbGU\x46\xea\xee\x32\?\x0e\t\x91\xda\xbb\x13\x8c\xb6\x99\x90\xdf" "\xaf\xe5\xc3O&\xa0\xc4\xb9\xa2/\x18\xee(\xa2\x34Y\x36\xc8,\x1f>\xb0nv\xe5-$\x0c\x37\xfe$\x9c\x97\x34\xa6\xe2\xfe\xda\n\x30" "_\xeb\x91/\xdf\xc7\xf7/\xdeT\x87\xc9X\x61\xc9\x8e\xf9\xe9\xbe\xee\xf5\x97\xf0\xb7m/\x37\xe8\x15\xb1\xed\xa8;\xea!\xe6\xa2\xb1\x61\x9d" "\x1b%\xb7Y\x46\xda\x1c\x05\xb7\xd5\x03\x02.\x12\xa2\xcfV\xd8\x02\xb5uS!\xf5\xca\xbf\x06\x83\xdb\x89\xe0\x02\xf8\xb5N\xec\x02\xb1_\x66" ";]}\x94\x1fR\x89l\x33\xa0]\x9b\xb1\x15\x05o\x88\x1d\xb9\r{w\x61\xb8\x63z]\x07\xde\xe3\xb9\xd2\xd7g\xc7\xdf/\x0f\x1f\xda" "^\x1a\t\xdb\xb4\x8a(\xd2SG\xc5\xfc\x02\?\x93\xe6\x85_\xba\xcdlkg\xcd\xf3p\xf4\x01\x8f\"\xc3@G\xba\x41\xb5m\x64x\xeb" "o\x94\x8d\xde\x80p/igh\x96\xda\x9eOl\xe5\x15=\x17\x45\x0c\xcf\x33;\"\xde\x13y\xd5\x19\xaf:{w\x64|\x12\x11\xbf\x1c" "u!\x16\xda\x06\x65:\xe9\xb3\x64\xe5\x9b|\xf3\xd1\x30\xaf\xde\x66\xc0\xec\xb6\xbf\xab\xa0\xa8|\x10\xef\x90\x13\x34\xca\xb5\xfd\x82l\x42\xda\x45" "\x03\xdf\x99\x65\xe5\x8a~Qw\xba\x02\xed`\xce\x11\xe9\x1d-\xd6\x82\x87\xc0\xa9(}#\x86\x33\xbd\xe3\x02\xbe;\x36\xe0\x8a\x1a\x9b\t\xce" "\xbcw,uw\xf4\xd4\xba\xe3^q\x8a\xec\xdc\xef\x92\xbd#\xc7\xdf\x9f\x36u\xa3;\xae\xdf\xbc\xe3\xea\xd1;\xda\x0e\xef\xb8\xd6\xe8.\x19" "\x9c\x03\x87<\x0f[\x08\xde\x31|\xf6]Z\xc5\x43\x33j\xc3\x1d\xe3k\n~\x02\x11\xa9\xf2.k\x36\x92\xbd/\xda\xc5\x8d}\xaf\x07\xa6" "\x61\xfa\xef\xfcU\x84%\xdf\x1bt\x9d\xd5T\x17\xb9\xaa\xf0.\x9f\x0f\x64\\\x93\xad\xd9\xc0\xe3\x8e\xad\x89\"\xd5\xba\xbb\xa2\xd3\xcf\xee\xf0\xf8" "\x45\x7f\xcdQr\xba\xe8o\x80}\xdd\xe6M{\xee\xe8\xf7k\x8b(\xcf\xf0\x44\xd1\x0f\xd5x\xc5\x08{\xc0S\xdcs\x64P!\x15\xd5\x15" "\xf2\xe5\xc6\x19\x87\xac\x91N\x65\xdb\x66\xd7\x64\x91\xa3\xdd\xadJ\xe6w}\x82\xa9\xd0Yr\x1d\xa7\xad\x17\xc6\xb9\xb3\x84YL\xcf\x0b\x65\xcb" "\x41\x91\x31\x38=\x46\x9c\x46\x8e\xb8\x97r\x14\xee\x8d\x9a\"\xc8\xbb\x61\x81\x9d\"\x07Z\x11]\x99\x04\xf9\x08\xa2\x9fm\x9fs\xc6'\xa2\x1d" "\x32\xe2^\t\x11\xa3\xf6\x46\x34\x14*.\xe3\xf1G\xf4\\U\xe4\xc8/J\x10\x34\x39J*\x97\x8e\xcbXy\xc6\xe0)\x16q\x8fQ\x45" "](\x0e\x33V\xa4v\xa0\xc7M\x88\xb0\xb9\x45\\\xfb\xadH/\x35\x15\x8b\xa3k\x8a\x17\xc4G\"/\xbf\x8b\x0cM\x30\xeb\xa1\xc8q\x89" "\x88;\xc0\xfd;\xc7\x65xk\xdf\xbc:\xa2\xf9I\xd1\x8bGR\xef\x10\x9f\x88\xaf\xc4!\xf1\x43\xba|\xae\xd3\x8b\x38\x89\x17\xd1\x14\x14Q" "\xed\x8a\x92\xc6\x96#\x17\xa0\x46\\]\x1e-\xa3\xcbG^\x42\x04u\xd1\xf4\xd9$\xb0\xe0\x14\xa0\xac\x9c\xb7\xcdy\x38\x8d\xc5\x84\xd3\xd1\x11" "\xa7\xc9#\x06n\x88\xb8\x43\x65\xc4\x99\x03\xc5\xf0\xbd\xa2^q\xfeN\xad\x35\xe2\xb6\xa4\x11#\xd9*&\x9eO\xd1$\xbb\x98\xb3Z\x46\\" "\x30\x1d%\xbd\x07G/\x9bl\x62\xa2\x64Ps\xb4\xbd\x8e\x98\xbd\x83[\r]!]\x86\x7f\xb8\x01qXO\xcfn\xb2\xdd\x16\x18\x96\xa5" "\xc8\xe8q\x95\xf8\xe5\xa8\x96\x07\x7f\xcf\xf1\x97\xfa\xaf\xc1;&J>\x99\xab\xfe\xdd\xa7\?\x8e\xe9\xca,k\xf3\x01\x62\xe6\x01\x9cT\"\xdd" "\x05@j\xf9)\x1f\x1a\x9d`\x94,\x36\x42\xe6.x\x08\ns\x44\xe7\x02\x45\xaf\x86\xea\x64\xb0\xf3\xc0\x1e\xc6\xd8\xee\xa9\xee\xafTJ\xf8" "\x1c\xe4\xb0\x84\x19\x0b\xbb,\x18\xfb^\xf3\x82!LT\xc0tp\xea\x8c;\xcd\x46\x1a\x9d]\xfe\xf3[\xb0uV\xcc\x1e\x63\xda\x37\xa2t" "\xe7\x1d\x08/\xc0(\xdd\?\x02\"\x1cq\x44O\xbe\x88\xea~\x64\x36\x0f\xde\xf7l\x95\x88r\x90\x9e_\x33\xdch\x44\x83\x84\x62\xe9\x33\xa6" "M^\x83%\x8f\xa1\xde#\xf5i\t\xfb\xe9\x45\x34\x62(\xe6\x15\xb5\x83\xb2\x07\xb5\x84\xcfWj\x05\xca\x44\x97\x0e\xc7\xaeV\x1d\xd5\x85w" "\xf7\xd4Y\xc8\xf8\x9bSG\xdd\xb1\x0b\xb3@\xca\xca\xdf\xe0\xe6\x94S\x93*\xaa\x1fM\xc3\xd9\xa7\xe3r\x8c\x15qj,\x62\xf0P\x45\x9d" "r\x38yr\xc6H\x82\x11\x83\x00\t\xf2Y\x30\xe7\x14\xd1\x38\x12\xd1\x06\xa2\xc8\x11\x43\x44+\x87\x62\xa9qW\xf6\xbe\xca\xddv\xa3\x14\x0e" "\xa4\x11\x43\x46\x46\x1cj\x45\xdeM\x08r\xd9\x96\x8at\x01\x89\xb2:>h\x86\xf9\xf4H\xbd\x10\xf8\xd2\xf4\x83T\\z\xdd)\xcbo\xd1" "nSWQ,\x35\x86\x9c\x64\x89\xd8i+\xea\x66\x97\x88\x31\x19\x65\xed\x15o\r\x18\xe9,\xca\xaet\xb7\x95\xb4\xca\x07\xb8Yu\xf4v" "\x8d\xd3\xc7\x8aK\xbf\x64\x61(\x9a\xd9\xc3\xbe\xb7\xf1\x8c\x41\x15qp\x1f\x65/\r\xa0\xbf\x11\xeb\xad\x17\x9al\xc6\xfcX\xcc\xa9\xda\x46t" "\xad\x8f\x38I\xa9XjK\x85\x15\x08\x36\x12q\x84\xa1\x88\xe5K\xd9\xd3\x99\xad\x43\xc5#\xe4k\x01\xd3\xfaQ\xb2\xbd\x42\x86W\xce\x37." "\x1d\xbd#\x10\x31\xefm@\xac\xe0\xf1r\x04\x30\x8e\xa8\xe5\x44\xf9\xceZz\x8f\xac\xd0\x8d\xb7+#oqtK\xee\xe6\x97\xf7\xc7`\xe1" "\x18\x0c\x04Q~w\xea(%\x84#\xa8\x88\xf3,Q\x8e\xd9\x80(\x1fm&\xb7W\xe1\xdd\xb0\x16Y\xf1\xf7g\x44'\x86\x88\x46\xfb\x88" "+r]G\x8e\xa8\x37\n\xa2 \xe6\x8bM\xe2\xd4\x91\x86\x93(\xff\xc1\x9b\x16\xd8\x89 \xe2\xb8V\xd1\xbbn\xaenS\xf4J[\xc0S" ";\xf2\xaf\xc1\x99\x30\x45\xef\t\xb8\xa4+*Z(\x9a\xde\x38\tj\x9b\xcf\xcf\xa0\n!\xb4\x62\x13\xb7\xbe\x96\xe2\xd4\xc5pS\x11'\xbc" "\xe8-\x8f\xde\xed\x38jK\xcbL*\xa0W\x46\xc5\x0b\xeal\xf1}#\xdf\x80[\xaaw\xe4/\x19\\q\xc1|G\x34v\xad\x16\xa8\x08" "\xbe\x83\x87\x62\xb2\xa8%\x88\x02\xdb\xe1\xce~\x1d]i\\N\xed\xe4\x93{\x61\xc9`nG*\xec@:t\xf4\xef$\x9b/\xc0\xed\x43" "\xc7\xe4m\xc6*\xd2Iv\xae\x88\x37\x8e\xe9\xfa#\x97>*\xcb\x1ao\x45\x87W\x80\x63\x65'\x81\xe2\xae\x98V\x8f\xb9\x11\x1a\x98t\x9c" "\xfc%\x06\x0b\x9dp%\x04\xeb\xeap\xa1\xa4\xa2zm\x41\x35\xecx>p\xa6^\xf0\xc8\x91}\x46\x87\x36_\xc5\xacs\x95\x45\x0b\xb0\xb7" "\x99\x63\xbe\xb2^<\xed\x82\xc1{\xa1#o\xe2\xa8:\x38\n\x17Y>\xf9\x04\xab\xf0\\\xec\xfd\xd0\xe1V\n\x1d\xeel\xd0\x61\xf8\xf9N" "z\xda\x01\xa2\xb1\xed\xd0O\xb8\xc3\xb5\x43\x8aT!TLw\xabY\xa5\x17\xd8~\x8f\x05\xd2X\xbb\xc3\xd8\x16\xce^'\xce\x64\xdcKO" "G\x63\xcb\x1c\x12\xb6\x0c\x30\xafl\xb9\xe8\xd4\xd8\x65\x83\x1d\x64\x87\x41\xaa;t@\xec\x64\xbc\x33\x03\xd6u\xb2g\x1cg\xb4\xac\x0e\x9d\xc3" ";\x0c\xd1\xd2\x61\xb4*\x8d\x89T*g\xf9\xda\xba\xa3|R\x7f\x46\x61\xac\x17&^\x87\xcf-l\x19\x12\xa4\x93\x63\xd3\x8b\x0e\x1d\xe6\x15" "%{\xe9\x94\xd5\xc9\x87\x0f@\xf8\x84w\xb8\x42\xaeST>\x1d\xfd&l\x04\x14\x45k\xe5\xc2\x45\x63{#\xee\xff\x64,,U\x34\x16" "\xb6\x46\xee,\x1b\x0f\x15\xb3\x9b\t\x37\xa2S\xb6t\xe6\xecp\xb9\xa9\xe0;\xea\x14X\x8b\x97\x44u\xe8\x31&s\x8fM|O\xc3\x85\xb5" "\xafX\xf0\x85\xdd\x12\xc7@\x0c\xa7z\t\xe2\xa6\x0b~\x00y\xbe\x46^\x1b\xbc\x31\x63{\x1c[+r\x34\xaf\x62:\xd8\xe4\xe0Z\x19\xbb" "\xa4^\x82\x0f\xdf\xe3\x10\xa3G\xedWQ'\xf7\x61\xd2sV;\x03\x1b~\x11\xe7\x8e\xf2\x00\x8c\xa7\xd4\xa3Z\xda\xa3\x8b\xa1\x62vV\xc9" "jk\x64\xb8\x86\xc6\xfc\xd7\x18\xddM\x30\xc4\xab\xefqm\x66\x8f\xf5\xb6\xc7\xa5\x1b\x8a\xf9\xc2\xa3\x1b\xf7R\xec\xf8\xd4K\xef\x8f\x80\x98v" "R\xa4\xea\xad\"\xa7\x62z,\xc2=\x9a\x32{\x8cq\xd9\xcb\xd7\x37\x1d%\xbb\x39\x80WV\x34V\x02\x83-\xa3G\x0f\x1d\x45\xc6\xc4\xe8" "q\xbb\xd1\x1e\xc7\x81\x8a\x1c\xd5\xf4t\x65\xc0\xf9\xb5\x8b\x0c\xae\xdb\xf3k\nJ\xfe\xd3\x44\xd0\xfb\x63\x30x\xe2 \xfd\x89\xce\x0b\x8al\x91" "\x9fJ\xb8t\xe3\x36\x16\xb6\xf9V\x96\xac=\xe4\xc7\x1b\x81M\xb6\xb8\xd5\xc9\x13\x36\xa7\x63\xa4$\x63'\x43\x19\x19%;\x8f,\x36\x9a\xa6" "\xd3\x99\xf0\x35T\x96\xd7\x46\x45s\xe3\xef\xdd\xe8\x1f\xa9\xe2\xb2\xcc\x1b;\x1f\xa7;Q~_\xe1\x32\x15K\xbb<\xc8\xfc\x86\x18\xcf\?\xd1" "\xa8\xa7HMZ\x45z\x86\x99X]\xd1\x15=\xf8hH\x90v\xa4\x43\x87\xbb'\xdb\x42\xc8]t\x9fh\x1dx\x62\xe7\xf7\xc4\x95\xb4\x8a" "\x9e_\"\xe6\xc3m\x96\x8b'\x0e\x38\x9f\x38\x9e|Z\x8e'\x9fX\x03\x14\xb3\xeb\x01\x44l\xde\xf1\xc4j\xff\x84\x81\x14\x44\xb4\xf4O\x8c" "\x9f\xf1\xc4\x1d\x33\xdc@\xf2\x44\xb5\xfe\x89\x8b\x8c\x9eR\xcc\xc6>Qi{\xe6\x03<'\x9f\xfe\x00\xcf)\x8c\xd3\xcfi\xdb~\xf2\x9c\xed" "[\x85z.\x9eg\xc0\x17+S}\xba\xfb)rT\xaa\x62\x8aP\x8a*r(\xd7\xa7\x81I\x31={\t\x62\x38q/\x8d[\xbc\xb9" "\xb0\x63\xa2\xbb\xf5\x8a\xd8r\\\x1ah\x94\xb1\xff\xec\x9b\xad\xdf\xcb@\x9fk\n\xfb\x0c\x0c\xd4\xff\x9d\x1e\x30\x42\x44\x9f\xadP\x9fQo\xfb" "t\x14\xea\x07\x37\xa0\xc0\x82\x9f\x94\xb2l\xb6Y:\x33\xdf\xabr&\xadO\xe7w\xc5\xe2\xdc\x17\xcdyM\xe9\xff\xcej\x8e\xa5$)W" "\x10\xbfWY\x96\xfa\x0c\x18\xde\xe7\xba\x99>mO}\xea\xa6\x8al&\xfbR|\xf9\xa5\x45\xdc\x97\xfb\x66\x8d\xc0R\x38\x87\xa8\xc8\xb1\x82" "\x88\xbc\x32TS\xc5\xdf\xef\x9dlgu\xb9\x45\x93\xa6-\x8d'\xc6t\xd6\xec\xe5\x9f\x33\x86\xdf\xc9\xd7z\xda\xb9\xfc'\xf9k]\xe3\x87" "\x9c\xbe&\x9d-s\x61\x0fGt\xf3\xb5J-i.\xfeIn\xc8 \xed\xee\xef\x45\xb2\xc3\xcf\xac>\xfe\x9b&j\xb5-\xcd\xa8\x33`" "\xa6\xa4Y\xc5\xe9'+\xdf\xbaQ(\x9a\x8a~RY%\xae;\xa6\x17\x03N\x32+\xa3\x83\x46\x9f\xcb\xbc\x15\xf5\x7f\x34\xf8\xcb\x92\xc1\xfd" "\xef\xf7\r\x15\xf6\x65r\xba\"MN\x97\x93v\xcb\x64\xd5hz\x8d\xacy\x98\xbc^\xff\xe7\x37Pw\xb0y\x87\x9c\x95\x1c\x9e\xfb\xe7\xd4" "S\xa6m\xd6|\x65j\x04\x84gl\x9f\xde\x82\x8a\xe9\xe9\x90\xaeT\xfd\x64\xf3\x82\xd8$\xa2&Pg\xe8\xd3m\xb4\xaf+\xd5\xf7\x9e!" "\x96\xdd\xfa\xfaK/\xbc\xbe\x97g\xea\xbf\x8a\xcb\xb3\x66T\x36U\x64\xa4@\x15\x39\x16\xe9\xd3\x41\xbb\xaf\xbez\xd3.\xd7\t)\x93Z\x9b" "t\xde\x02\xab<\xa8]n~l\x01\x34g\xe1\xbd\xfdH\xd2\xdd\x92\xb3\xd5\x8b\xf0`\xbb|P\x9d\\\xcf\x02\xeb\x9f\xd1\x17\x01\xac\xab\x83" "w\xdbQ\x00[x\xe8\x0e\xd6p\xcc\xd3\xe3\xba\xbc\x1c\x33\x9dK\x86\x89\xf4\xa4\xb2]\x34j\xf4\x42\xd0\x83p\x91q\x06\xf7\x97\xa5\xb7\x9d" "\xa5\xd5\xea\xba\xa8\xe2z]\xbf\xcd\xd1.\xbb\xf9>]\x0e\x15\x97\xbe\x84\xca\x96\xcf\xb9\xcc\x65\xff\x0c{\x43\xc7\xf2o\xf6+\xc4\x1a\x15\xd6" "\xbe\x37%\x1a%\xdc\xbf\x90\x88\xcb\xf6GY\xe9\x83\xee_\xa7m\x9f\xfaSV\xac\x1c\x14\x30\xe7\xf5\x39\x13\xd6O\xea\x91\xa3N\x39\x63\x65" "G\x9f\x43r\x41\xb4r\xb4\xca\n>s\r^\x9f\xeb\xf5\xfa\x8cl\xa1\xb8\x0cm\xa5,\xa9\xae\x05q\xa7\x19\xc4/\xa6\xca\x17\xf6\x87\x96" "\x62P^\x64\x8d\x84\xbfnGH\xb3*\x03\xe7%\x7f@$\xeb\xda_\xef\xf0\xfb\x30\xfer\x95\x18X\x97\xab\x35\x8d\xc5\x32\xe8\xbe\\\xce" "\x17,\xd3\xf2\x9f\x83|q,\xedH(oz\xa4\xb7\x14\xe3\x92\x18\xaa&\x8c\xcb\xedu)Or\x81\xdf\x9f\xdbt\xf5\xf5\x37,VY" "\x1e_\xbag\xf4\x83\x41\xba\xfc\xb1\x42\xda\xeb\x34\x89N\x93zM\x37X\xfe\xe7Y\xec\xf8\xcf\x99\xee\xa2\xe8\xb5\xdc\x93\xb1\x00K\xfd`O" "\x36\x97\xb1\x83K\xc7m\xc3\x9c\xbc\xdf\x45;\x14\xca\xba\x1fg\x45\xf8\xf7\xb2!Y\xfdy\xfe\x8f\x07\xb5v\xfc{p\xe9\x91mi\xee\xd0" "\x92\x9e\\\xfc\xf3V\xdf\x37\xc9\xd3\xd1\?\x39\x31W\x8f\xde\x32\x1b|\xfc\xf3\xab\x9fvq\xf1(\xcdj\xd6\xbe\xc7\x10\xf2\x9f\xf6S\xad\xfc" "U\xb5\xcb\xffy\x0cmV\xe3\x1e\nK\xd1>J\xa6\x93\xa4y\xf7\xf7 m\xfa\x7f\x12\xd8\xf0\xff\xf7\x0e\xff\xfb\xf8\?=\x84\x9c\xb8\xd9" ",\x65\xb8\xb4\xcc\x7f\"\x1bX\xda\xf6\x07M\x41\xc6\xaa\x8f\xba\xfc\xa2\xd4wiu\x39]\x8a\xeaV\x0c\x05\xb3\xdc*\xe9\x91Y)\x1b\x97" "+\x13\x97,\xd9\xbb\xcc\xaa\x8f\x45wy\xdd\xbaN\x80%\xcd\xa6\xae\xf6\\\xec\x87&Z\x8f,\x7fk\ri\xf9\xd5M\x05\xfa\xef\xc5\x90" ",\xcdP\xff@\xa3\xfe\x86\xb5\xc6\xa5\x83\xad\x61\xd1\xda*\xd5u$\x8b\xe2(\xdf\xf4\x7f%'w\xebr\x44\xf4t\xe9&\xfes\\\x9a" "\x08\x1dG\xfe\x37Y\x1a\x8f\x8f\x7f\xf2\xc6z\x85\xf2\xe7\xf5\x84\xa2\xfd(\x83\xd2\xff~\xde\xe6\\\x06\x08Y\xef\x30\xddY\xf9_\xf5Z\x8f" "_T\xf4H\xf5<\xdd\x39\xc9\xdf\x37\xfes\x43\x39\xae\x13'G}i\xb6Jm\x16\x8e\xfc\xb7[\tG\xb0\x90\xeeg]\x03\xb6\xfd\xe7" "\xb1tm\xa8n\xab\xa3\x85\xbe\xdf\xfd{$\x9f<\xfc\xadJH\xc3\x32\xefr\x36\xe1+\x94\x1e\xe9\?\x9f\x05\xfe\xdc}\xac\x8c\xc8.\x16" "\xba\n\xbf\xf2\xa0\x8d\xe9V\x9cU\xb7]\xa1\xc6\xf1\xbc\xbd\xc8\xaf\xb6\x97\t\x8fR\xc7\xa4\xaa\xa3\x33.\?\xa2u\xeb\x81\xf5\xcf\x96\xe2\xf2" "\x91\xad\x05L\xeb\x13\x19\xe7%\x95g]\x87.\x05j\xfb\"\x1c\x1f\xd6\xf3\xd7\x89\x94\xce\xec\xa4\xb3L\xd3\xf8\xc7\xff\xf4\xe3\x92\xfc\xd9\x91" "\xda\x96\xc5w\xa5\xe6I\xd3N\x36\xff\xa9~\x9f\x9d\xec\xa1\x16T\x18M\xe8\x66\?\xdfhy\x96\xee\xfdv\xc4\xbe\xe7\?_\xcdz\x93\x7f" ".\xf9\x1d\x1a\x30uy^vv\x1a/\"n\x95\x98\xee\xda\xf5\xe7\x9b\x61\xa5\x95\xf4\x96\x92\xe5\xd9M#\x97\xf6mp&u\x89\xde\x16" "\xcbS\xca\t\xc1\xe1\xccY\xe9z\xc6\xf2j\x9c\xb6^u\xf9\xe5_\xa5\xca\x8eK\xda\x92\r\xff\xd6\x13\xdd\xd1\xf1lV\xfa\xdeL(\xdd" "\xfc\xec&\x8b\x7f\xa4\x8c\x17w\x87\xf9p\xc4\x06Y\x9e\xbfy\xc8\xcd\xc1p\x96;'\x83}\x94\xd9\xcd\x97\xb6\x17R\xc3\xff\x64l:\xa8" "\xe9\x0e>\x32\x84\xff\xcf\x33\x0fj\xe5g\x36u\x0f\x15\xa6|\xd2\x7f\xb4\xc0\x90\x36\x8b\xff\x16LI\xd6\x89\x1dT\xc9\x65-\xd0^\x0e\xfe" "P`\xbaV\xb8|X>\xdd\x9f*\x18\xd4<\x13\xd5\t\xb3t\xf2\xfbg:\xa9\x65\xd7o\xe9x\xfa\xdf\x37\xfd\xd8\xce'S\x19\xba\xfd" "\xed\xe7\xd4\xbbU\xbf[,\x82\x0cN\x93\x66\xff\xefq\x86\x1b\x34\xb1:\xe5<\xc9\x92\x31\xd8P)!ZhL\xac\?\xda\x92|\x37\x86" "\xcb$S\x05\xeb\xcf\xc3\x65\x8dY\x10\xaf\xdfJ\xe5\x0c/\xa3\x13\xb5\x9f\x9d|\xed\xf6w&M~\xb5\xb8\x38\xf8\xe7\xe7\x38K\xb4\?\x39" "Q\x34\x10t\\\x7f\xdf\x03\xa7\x44\x8f\xd9\xc6\x87\xda\xc1\x9a\x9b\xd2\x31\xffs\x15{t\xc4\x02)\xd5TMX\xea\n\xff\xe3\xb0nh\xa7" "Q\x18K\xafh\x1bSh\xa6\xde\r\xb5\x85\xdd\x8a\xd5_\xe1\xef\xcd\xa4\xc9\xd8[\x95\xf6\xa9\xfc\x8c\xb3z~P.\xc2\xa5\x1a\xa0\x1b\x17" "\xb4^K=\xa1\x14N\xfa\xc9\x1b\xdb\x9a\xe8\xf5\x97u\x8a\xfd\xd6\xff\xe8\xc2q\x44\xba\x1c\xb9\xde\xff\xe1\xe1\xe4\x14-Kg\x9dR\x82\x16" "\xdb\xff}\x35\x39\xf2\xbf\x34[t\x91\xe8i\xfe\xfd\x8d\x1eQ;\xf2g\xe7\x7f}\x88\xbc\x1eZ/,[\xb2\xc0\xed\xa1\xe4\xe5\xaf\xab\xc9" "\xf6W)\x9b\x90\xf0\xff\xa9\xab\xc9)r\xfcO\x42;\x88\x36\xbc\x0f\xcc\xb3\xe4ok[\xca\xeb\x62m\xc0\xd0<\xc6\x8e\?J\xed\x04~" "\xa4K\x31\xff\xbf\x9e\xa6\x38\xf9\xd1h\xd5\xff#;K]\x0b\xd4\xc7\xbf\xac\xf4\xd2\xd0)\x02\x8b\x0e\xa4l\x64g[\xc9\x8a\xba\xf3#\xb9" "\xb5M\x07\x90>\xd7[\xf5\xe9r\xd2O\xda\x97\x8e\x32v\xe2.\x04\xc2Z\x8e\x61\x18u\xe5[t\xf4\xb9 Z\x31\xf5\xcb\\\x37\x1c\xe9" "\x99\xde\xe7\xfe\x66}z\x1e\xf5i\xfe\x15\xf5uO+\xfe\x80\xc3\xf9\xe8\xd4QZ]Ql\xfe\xb2\x92\x39*\xa4\xa1r\xfc=\xc2\x00x" "*\xaa\x83\xf3\xf7Y`\x83\xa1\x1b\xa9Tw\xe8\xfc\xe8\x82\x84\r\xda'\xe0=\xb3\xb4\xbb\x44\x03\xc4\xcc\xd2\xf8\x41\xed\xf5\x90\x66\xb6\x16\xce" "\xbeX\x02\x46G\xff\xd1\xb6\x44/\xaf<\x84\x8f+\xcc\x35\x01\x13\xb5\x85\xfe\xfb\xf9-Y\xd2\x02\xc3\x8c\xa8\x89\xdb\x9b\xf9\xbcK\x07TK" "\xd8\xb9\xd2\xf2\xe1#uI\x38\xd8\xd0\x19\xdc\xd2\xafm\xea(|\x10\x1f$\xfc\x65\xe5{\xff\x1d:H\xc2\xffx!\xf5\x35\xd8Yjs" "\x92\xb0]O\xaa\xbdr\xc3'i\xd5\x9e\x14\xf5\xff\xdc\xa0\xac}\x18\xd3Q\x63\xe9J\x9e\xf0\xf7\x39\x97\xc9__\xa5\xb7\xd3-\xa6g\x1f" "\x81\x95\xfaw\x61\x66_)+\x36\x92\x36\xda\x62\xf0\x00\x63\xba\x44\xa4\xef\xec\x9f\x81\xbd$\x34'\xf9\xe2\x34\x94tIh\xad\x06\xd1\"\r" "\x95\xde\x36h'\xd1 \x9f\xdc\xe9.=\x7fn\\\xac-\xc5\x65\xde\xfe-Q\x85\xae\xdf\x38\xf8\x93\x89\xac\xde\x1d\xd6\x06\x18\xdb\x15\x7f\x7f" "\xce\xb9\xe5\xab\x32,\xe9O\x0f\x37\xb8\x7f\x83\xa5}O]\xe4Rr\x13i\x8fU\xd1\x9b\x12\x11\x63\xbfp\xd7Q\x87\xc9n\x66\x33\xb3\x16" "\xc4\x01\xaf\x34\xb8\x0f\xaf\xf1:p\x0cu\xfc\xf5\x1b\x38\x64o\x34\x64W\?\xac;\x96\xeb\xe9\xb0\x1e\x9a\x0e\x13\xff\x39\x16\xc2\xf6\x1b\xf3'" "\x34\x91\xc1\x01\xc8\xc2\x43\x0e\x99\t^\xaah\xef\x17\xe4\xaa\xaa>WM*j\xfdi\xf6\x03s\x35Y\x17G.\?\xe0h\xa4\xbbt\xcd" "_\x02k\xed\xb9\x98\xd5\xbeK\"\x83&)\xcb\xb7\x87R\xb9\x43\xf1\x94\x84\xfb\x8a\x8b\xf4\xe7\xef\x07[\xdb\x98\x43\x12\x38\xbf)\x16\xd7<" "\xe5s\xe2X\xb2|+\xf3\x16\xd4\?\xd3\x17\?\x04\xa7*\x12\xff\x1aS\xf6\x8c\xdeYL'\xc1\x92\x44\x1b\xb6\xa0z\xa9\xadI\x03\x36\xc9" "\xd7\xd8\x9c\xc7\xcc\x94\xf8\xcbQ\xddp\xe0\x0e\xd5\x0f\x83\x8b\xefz\xd6\xfd\xce\xf6" "\xe9\xfaiG\x82\xff\xab\x31\x37\xc7\xfd\xac\xa7+\xedt\xfd\xcd\x19]\xb5L\xdc\x7f\r\x06y\x61\xd7\x8f\x41\x1c\x1f\xb9H\xe7\x1d\x13_\xf7" "\x96\"\xf2\x80\x33`\x8a\x9eI*\x8e\x8ft\x07\xb0u|iiJ\xbd\x9c\x32.`_\x1aS\xe2\x81\x9b\xb7\x45\x1b#\xa2x\xa5\xb5-" "\xfa\x07\x8a\xd8$\xbe\x30V\x9e\x88(\t\xe1\x94}\xddP\x93k\x0e\xfai\xfd \xc3\"l\x8a\xf4\x43\xeck\x63:\xady\xb3\xa0\xccl" "\x0e\xcel\xf3\xd5\xbd\xc0\x0e\x82\xe8Z(\x46y\xdex\xa9\x97\x9c\xc5\xa3\xc0\x16tt*\xb3\xf3\x11\x13\xd0\xc4\x30uj\xec\xe9\xec\xff\xf7" "\x7fS\xd4r\xfe\x7f\x89,y\xa9\xf2\xff\xbd\x14-\xd9O\x31\xb1\xef\x98\\<\xb8\xc8U\x66\"\x0e\x7f\x11>M\x45o\xa5U\x0cO\x8d" "/\x9e\x9eU\xc2Q*\xb6\x1a\xf5vY\xe5\x84\x15,\x04\x10\xb1\x0bY~\xab\xdbZ\xdb\xbb\x9f\x95\x0e\xe6\x1f;\x64h\x34\xd2\x0b\x66\xe4" "%o\xcb\x16$m\xb5\x89\xccv\xce\xa6\x84\xafu\xd5\x62tY\x11\xef\x1c\xd5\x1fgV\xff\xcb\x96\x41\x31%\r#\x46\xf9\x00\x44\x9e\xcb" "\xf6\xd2'\xdf\xb8,\xac\xcf\xbd\xd7\xfbt\x64Q\xf4J\xa5\xbb\x9e\xc7O\xc9\xcf\xbb+n\\H*\xc8\x07\x84\xe3\x90\x62(\xef&.\xa3" "\xe2h\x42\xb1\xd2\xf0&@\x19\"\xc5\xf4\xe9\x84\xa0\xe8\xad\x34\xc4\xe2\xd6O\x98\x84\x9c\x19\x11\xcb\x0bR\x85\xf1\xf3\xc1\xbbJ\xb1\x34\xef\xaa" "L>\x35\x9b\xb9\xf4\x8d\xaf\xb9T\xf6\xd2\xc9\xa2\x34\x16\xe5\xfaR\xc5\x64k\x96v\x9e\x9d\x65\x37\x9d\xf4z\x44\xf6\xe9\x18\xee\xfd\xf5\xea\xe8" "\xea\x83\xcf\x17K\xcf\n\xc3\x16\xd8\x02\rM\x06O\x94\xbe\xb7\x36\xd9\x06\x1e\x30\x93\xa1\xd7\x31N\xcd\xaax[\xceg\xf7\xe9%\xda\xd7`" "\xc4\xf0\xdeU\xd1\xc7%>\xed\x91\x35\x86\xd2\x06'\xaf\?\x64_\x8e\\\xe5\xdc\xcf\x9a\xe7\xc4\x89\xe3\x32Zh\x9f\x11\x0c\x15\x7f\xbf\xf6\xca" "\xd7\xbd\xees+\x07\x15=\x1fK\x43q\x15/\x1e\x96\xae\xc5}\x8e\xa7\?\xdb:\xdf}\x34K\xf7\xcb\x63\x38\xd1\x9e\xbc\x99\xc8\xee\xde\x18" "\x11\xbf\x8fH\x9a\x10\x1fj\x8e\xa2Lx_\x92=\xa0&\xfa\x9c\x8czM\x87\xddI\xfbt=U\xd4@\xdc\x1c\x8f\x19\x0b\x1fXXx" "\xe2g\x0fg\x42\xd1g\xd4\x85y\x41V\x31lrh\x0c~\x88\xa1u\x11\xf4\x8a\xe2\xfe\x03\xba\xef\xe6\?\x01\x8a\x97i\xcb\x10\x46\x9aV" "Rm\x94}mk\xc4\xb3\?\xbf\xc2(\xfc\x9f\xb4\?\xd7H/\x06\xba\x91\xc3\xdf\xb4\x10\x9aHXM\x37!\x1a\xfb\xb3\xf1M\xfa|\x8d" "\x41_\xfdh\xb0\n\xaf\x9f\xbdn\x39\xc2\xc2\t\xc6\t(\x41.\xf6RQ*V\xf8V\xf4|\xc0\x44\x33\xc5\x17W-|t\x98\xcd\x36" "\\\x63\xf4\x96\xcb[\xabl\xd6s\xf4\x06\\\xc4\x90\xc5\"\xfa\x35\xb0\xbcI\x10m\xa6\x37\xe1\\\x86\xa2Xj\xaf\xd5\"\x62\x36I\xe8\xea" "\xbfK\xd5\x42\x8f`qy_\xf7p\xa4^\x04\xd1U\xa3|\xe5\xc4\xd1\x07O\xf4\xc9U\xf4\x86M\x8d,|+\xee\xcb\xd8\xcf\xd7/\xbd" ")\xcb\x37\xaa\xc4\x1d\xe2!\xf1\x9cN\xa9\xfd\xbc\x32\r\x17\xa8\xd5\x1dKo!L\x37$\xdb|K\xd7^\xd2\xdbm\xb5\x84\xc7\x63\x9d\x65" "\x1b\\\xa2S\xacI\xb3\xf4\x7f\xc9\xff_x\?\xf5\xad\xfeO\xe9\n\xa9L\x33\xa1\x94\xb0Wu\xa5\xa2\x84i\x1b\xea\t\x17\x8e\xf6\xdd\xb0" "\xc1\xc0\xf5}W]\xe9i\xdf\x37\xb3\xcb\xac$\xea\xa6\xa2\xd8\x32\xc3\x12\x0e\xb6\x93\xe9G\x89\x65G=g\x8cH\xac\x62x\xf3\xde\x86\xb5" "\x18\x8f\x64\x18\x35pk\xb4\xbe+\x1d\x32\xac\x02\xd2\x1a\xe0=\xac`\xa9\xc5\xcf\?\xdbt\xcb\xec\xd3+Z\x31\xbd\xf3\x38\xea\xfd\x9cZ\xbc" "`z\xed\x61j\x94y\x81\xcb\xe7\x13G/x\xdc\xb9G\x10\x8d\x1b\x43\xdf\xf7\xb9\x81\x8d\xe2\x9f\xa8\x33\x7f\x12\xfe\x63\x90\x94\x83\xb0j\x05" "\xd6\xbd\xd0x\x02\xcb\xb4\x62\xa5Jl\x38z\x7f\x07q\x19\xc3\x44\x13\xd2\x83Un\\\xadL\xbdH\x11i@Y\xb1\xb2\xe2\x46\x1d\xd7\xdd" "u\x95\x46\xe9\x9c\x35T_\xff\x18\xf4\xae\xefs\xaf\x93~\xb1U\xf7&\x80\x11\xff\xfa\x45\x03o\xc9P\xc1\x8a\xdeI\xebv\x0bX\xbe\xad" "\x62q\xbc\xea\x1f\x81\x1e\xe3\x8a^\xc5T\xe4\xe8H\x44\xf7\xa9R\x91\xba\xa5\x8a'\x9b\x41\x84\x93\x98\x89\xac`\xba{\t[\x64\x11\xb9j" "\xc4\xc4\xa5\xee\xae\xcc\xf4#w\xbb\xd1\x84\xd8\x17\x1e\x80\xf5\x96\x62x\x08\x37\x65\xabH}^\xc5\xb0\xde\x45Y\xc9\x8f\xca\rs\xc5\xf9\x80" "\xf8\x46\xfc\x08O\xcb\x06\xb3\xb8\xe4Wm\x32\xc7\xdbG\x8e\xde\x16q\xe1\xf6\xd2\xad\xc3\x35On\x8f\xd6/n\xdf\x89,\x05\xb7\x0bo|" "\x8b;\xe6\?\x16\x18\xf4\x8b\xe8\xc0\xd1\xcd\xc3\xdcgSp\xe4\xa8\xfb\xb5\x35Q\xa1\x8a\xee\xb6\xe3\xef\xb4\x1e\xbe\xd6\xf3\xb9\xb4\xe9:\x1f\xf9" "\x18\x12\\\x8f\x14\x31\xe4\xc3\xf3yx\xc6\xbe=\xd0P\xb7\xceh\xf5\xf3\xad\x17\x30\x9c\x38\\\xba\x83\x89\xf8\x90\x8f\x9e\xe9\xd0\x30\xfc\xfd\x11" "\xb5\x63\xc4\xdb\x0e\xb9\x1a[\xf1\xf7\xfb\x9av\x01\x32\x86\xb3S\x96\xec_r-\xa1\xb2t\xab\x96\xado;\xcb\x9a\xcd\xc0\xe0\x1d\x33\xb4\xe8" "\n\xbc\xc1>/\xb9\xcf\x1b\xd5O\x93\xed\xd9\xef\xd7>\x19\x1e\x91\x93\x91\xc3\xa4\xf7\xe3\x98l~\x30@\x9c\xb2l\xe6j\xe6\x90\x46\x12\x45" "\xaa]\"N\x8b\xf6q\xd1\xe1\xc5^w\x1d\x93\xe8\x92#\x64\xb2\x62k\x0b\x0c%\x41\x31{hp\x01\xdd\x90\xbd\xea\x30m|\x38&\xad" "\x07\x86\x66\x30\xc6\x9f\x89\xe6\xafJ\xd0\xd6-\xd8\x90\xa9#\\<\x1d\xf3\x07o\x43\xe2\xdc\xd1\xb3%\xfd\xe8:\x86$t\xf4\x8a\\o;" "Lg\xb7\x8e\xe1\xac\xd9\x83#\xed\x41\x43\xff\xce\xd9\xc5\x0c\xd8\xdc&\xe2\x31\xb2\xdb\x13G\r\xe9\t\?\xf2\x61\x86r<\x64\xef>\xcc\xe1" "u\x36\xcc\xb7\xee\xb3\xdeJrP\x05\xdb]\x03\xa2(*\xea\x1em\xf7\xf8\x98\xf9=\xaeLo\x94\x61\xfe\x8e'\xe2\xc2\x99!\x1b\xbb\xa1" "\xe7:\x63\xba\x0ci|\x19r\xcb\x9f!\xeb\xd0\x90[\xb9\x8d\xe5\x0f\x18\x8f\xd3\xedK\x17\xf3\xc1OR\xaf\x81\x61\xef\x87\x31\x37v\x18s" "]\xea\x98\x43\xf4\x31Wt\x8f\x97\x9e\xfd\xe3\x64\xccS\xa7>\x61\x30\xa6%`\xccM\xfe\xc6\xdc\xa6y\xcc-\xdd\xc7\x1c>\x8d\x39n\x19" "s\xd4\x31N\xbf\x91\x9e\xad\xf7\x80\xf5\x1b \xd4\xf9q\xd6\xeb\xb1\xb9\x1dg\xfd# Z\xb5\xb1\xdf\x9aK\x16\xc7\xd4\x04\x14\xfd\x1d\x44\x94" "\x81Kq\xfe\xaeKQ\xf6\x86T\x8f\xc6\\\x61\x31\xe6\xcc\xc9\x38\x1f\"+\xb8Xi\x9c\xff\x98\xc5\x63\xcc\x99\x12\x45\x8d\xcf\xc8W(\x8e" "\xd7\x81\x88\x8e\xa1\xe8\x8f\xa8\":\xef\x31\x9b\x96\t\x9dt't\x9f\x9d\xd0WVP\x37\x97L\xf1\xda\x13.\x08\x98\xb0\xc9\x99\xd0\x43q" "\xa2\xf6\xf5\xd7iruT\x62\xf2:`X\xb3\x33\xa1S\xb4\x62\xfe~\xc3\xc8\xca\x13\xae\xdc\x9f${#Gy\x14\x06\xe0\x01\xdb\xf3\xbb" "\x93\xed\xde\x94\x18\xb7\x81R\x96\x8c:\xc9\x66\xb8Z\xba\xbf\xcd\xd9\x1a\x63'\x65\xa6q\xaa\xd6\x1a%\x46;\x34\x19\xf5$\xb0I\xf8\x1d\xfc" "\xeb\x14\xb3^\x8d#\xb6\tW\x33O\x92\x8b\xfdt_t\xa6\x13\x30|\x41\x45\xe9'\xb9\xa4g\xc2&o\x92\x44u\xc7\xa4y\xb5\x8c\x9b" "\x05S\xa5%\x07q\x02\x44\xf8;\x45\x36\x80\xd2\x63\xbf\x16\xeb|\xce\xc9iR;\xe2\xa0\x63\xc2\xc8r\x93\x65\x64\x39\x15\xb3\xc5m\x31\xfa" "\x06\x83\xf5\x66\xc2\x90q\x8aK'#\x65Yu\xca\xf8\x33\xca\xf2\xd7\x13\x7f\x01\xae)U\xccv>h\x04\x9fp\xff\xc0Iz\x38\x05\xaa" "\xe7\xee\xa9\x7f~\xb5z}\xf9\xce\xb6\x13\x46\xf7\x9e`\\\xcb\x85[\xcatI+\x02\xcf\x1b\xdby`\x03\x63\xec\xb3\xe3\"\xc7\x91&\xee" "\x8c~\xe7M\xae:\xb4\x84\x30\x0f\x62l\xf1\xa6\xc5\xfckM':\xfe;q\xa2\xa7\x64\x97\x1bi\xeb\x45\x9dol\xd2\xd0\x36\x34\xbf\xf7" "\x83\xf9\xe4\x93[lL\xe8L\xaf\xc8\x1a$\xe2\x01\xb1M\xbc\xd6\xd5,\x08\x84\x30\x61\x05\x36\x43\xc0\xb6o\x43K\xc6\xf8J\xc6\xe2\x46\x38" "\x06#\xd5$\xbd]\x03\xde\xa3z\xa4\xfc*i\x7f\xe6h\xab\xc0^\xcbl\xf5\xa0\xccXY\x84q\x13\x8c\t;+\x45\xe9\x30h\xa9\x9f" "\xd0\xfa\x33\xe1\x66\xa4\x82\x0b\xc7\xa5\xff\xe9$\x1d\xaf\x39\xfeI\xed\x39\xfeI\xed\x13\xdf\x1c\x97\x87\xdeJ%\x90\xdb\xa8M\xd8K\x8a\xca\xc9" "o\x8d\x86M\xd1\x8b\xb9\x1a\x85\x64\xf0-\xd9\x8b\x15;\x93\xf4s\xc3\x31\\\xfc\xb3\\\xf7\xc1\xf2S\x9e\xf6\xc5\x42\xf5\xb5##*\x8eo" "\x8d\x95\x1e\xe7\xab\xef\x18.\xa9\xc5:Tg\x61\xd9\xe3O`S~\xb3o\xbe\xe6\x9c\?\x9f\x7f;\x86\xcb\xcc\xbf\xd3\xd3\x33\x46\xaa\x9c\xa4" "\x08\x1e\x31\xc9\xe0\xee<\xa1\xadIQ\xd7\x93\xf4^\x9d%+\xdf\x41\xc4n\r*\xa6_\x8f\xd4V\x94\xd1\xd2\x65\xe2\xb2.ZX\xf7\xa3" " N\x1e\x38\xd3<\xc9\x10\xccw\x92\xb1hr\xa1\xf2$\x9b\xa1lg\xd8jT\xd1\x1f\x9e\x1bVM\xf2\x63\x94/v\\\x13\x86\xe5R" "L\xb7\xf1\x95\x38\x8a\x9dp\xa4\x39\x91\x91\xa5VzlP\xafL\x44\xc6\x0b\x98\x30\xec\xe7\x84[\x9eN\x8a\x35\"\xfa\xa9\t\xf7K\x9cx" "\x03\"\x98\xdd\?\xd0\x00\xab,\xdf\x18\x31\x84\x95\x32\x19\x8e\x65\xdf\x8f`X(\xab\xa8\xaa\xdah\xbb\xc4\xbc\x92\x90\xb1\x92\x90U\x0eK\x8c" "\xdb_*+\x8e\xbf\x92\n\x9f\xe2\x0eu\x89\x63\x00\x45\xe9\xe3\xbc\x65\x10\xedH\x46\x7f\x19\xb6\xed\x9ep\xf3\xbeI\xd1\xb7\x0c\xfc\xa2\xdf\xf4" "\x17\xfb\xdc/\x9a\t\x14\xb3\xa6}\xac)\x17\xb9Lu'\x91\x63\xf5\xad(\xb3\xce!\x18\x62\x32*\xd2\xc8\x35M\xb6\"G.M\x9f&" "u\x1e\xba[\x01\xbe>\x00\x87\xdf\x8e\x0c\x04\xaf\x62z\xfa\n\x11s\x62S]\xe5\xd1:\x83\x88\xbdI\x15Y\"\xa6\x34\xf7(\x66w\xd2" "\xa4\xe2\x0e\xb4\xf7O\xd9vM\xd3\xfb\x11\xb0\x33\x15\xbd\?\xbd\xfd\x04\x83U{\xca\x66G\x91\xad\xed\x94\x81\x11\xa7\xd9\xe1\x95\xa3N\x15\x62" "\xae\xd3\xd8p\x93s\xfcSj\xbeS\x9a\xf0\xa7\x19\x8c\xe8\xd3\x9c\xb7\xe1(qZ\xb4\xae\x1c\xd5_r\xbc\x1b\x18\x9a\xbf)\xc7\x88\xd3\xe2" "\xf6\xa3\x98\"\x17\xb9\xfcm\xca\x8d\x7f\x15\x39hR\x31\xd9\xad\xb8\xc8\xe1k\xcc%P\xb1\x06\xcb~\x1c\x15\xcd\x15\xb2\x19pZSul" "\xf7\x95\xec\x00\x08\xc5\xca\xc3\xe4\xc4\xdc\tq>\x0bl\xdeJ\x9eW\x9d\x89:\xcb\xb5\x99\xc6\xbe\xb6i@\x8a-|\xc1\nw\xc6\x31\xd6" "\xbf\xa7\r:^\xc6\x46\xa1\x98\xb6\xf6\x38\xefW\xda)^\xc4U\xad'\x18;\xf9\x0e\x9c\x82\xa7\xc0\xef= v\xa5\x88\xb9\x8d\xa2\xe0\x1b" "\xf1\x07\xb8\xe0\xe3-\xda\xe9\xde\x00\"\x1c\xb3\x62\x06\x63\x14\xfc\xe2\x84t\xccp\xea\xbe\xc9g\x9c`\xb9\x66\xcc\x05\x05\xb1\x14\x35*\x8aq" "R\?\x03\xc2x\x11'\xf0\r\xf5]#\x15\xd3\xd6\x8a\xe7+\xc7\xf5\xe6\x03\xf8\x15^\x1f,o\r\x02\x8b\xab\\&\xafL\xfd\x8e\xfc\xc6" "\xcdy\xbaw\x90\xc7|\x9c\xce\x84\x38\xd7\x01T\x9f\xbf\x80\x1d,\xa6:\x16\x33ZT\xcc\xed\x8b\x63.\x80T\x94'\xe3\x10\x39\x96\x0cV" "\xdb\xff\x0c\xdf\x94{\xa2\xc5\\\x94\x1cs\xb2Y\x94\x81:\xb1\x0b\\|\xea\xc7\xc1\xcaO\x32\x36\xd6q\x8a\xed\x9e\xe3t\xf5\x43\x9b\xaf\x35" "\xbc\x41\xbavO\x44\tI+\xfb\xba\x61\xee\xfb'W[\xc6\x1c\xf4\x08\x1e:\xea\xe2W\x18y\x94i\x81j\xf0\xc7\xd5\x15\xc7\xf4\x65\xcc" "Q\x41\xcc\xe5\x86\x31\xbd\xb1\x14\xa5\x83M\x66\xc8\x0en\xaa\x19\xd3%\x42Q_!\xba,\x33~\x18.I\xe7\xbe\x9frW\xae\xbd\x8c\xa9" "!*\xea\xbb]\\:K\x86\x97\xe9\xd9\x63`\x9f\xe3\xd2\xb1\xb4\xf5T\x62\xba\xaf\xb6\x9fy\x8e\xef\xc9\x35.\x31\xadj\x8a\xbf\x61\xbb\xec" "\x98QZ\x62\xce\xda\xc5\xdc\x43\x33\x94\"u\x19}\xfd\xe4@\xc0V\x42\\\xf8\x62\xd7\x98\xcb\xd9\xe3\xf4\xed\x44\xd4\xf8\xe4\x9b\x19\xf4\xb5\xa3" "-\x02\x14\x8c%\xfbO[\xb1T\xb5\x63\xee\xcb\x14g\x8dK\xaf\xa0\xf4\xbf\x10\x44Y\xa1\xc2\x10\xd3\x07T\xd1_\x30k\xe2V\\\xae\xae" "(*\xad\x0e\xddN\xcfh\xc9\x8d\xb3\x36o\xca\xf2\xc0i\x82\x38[\x44\xbf\xdfg\xa5\x36\"\xc7 >\xce\xb7\xeeU\x8d\xfc\xb9\xd1\x12\xd8" "\?P\xb9\xdf\xc6\x91=\x94\x35\x06H\x8a\xf3\x8b}i\xb7~\xbf\x03K\xd6*\x0c;\x12\xff\xd9\xdfSX\x9c\xc8\xcd\x0e{*\x37\xb7\xf2" "Z\xc7\x1b\x18\x61r\x1e\r\t\xca\xb2\xc6\x92\xdd\x9f\xeb\x83\x0ex&\xc2\x00\xc4\xf9+\x11\xab\xdb\x63\xdd\xb1\x1a;N\xc7\\\x65\x1fsS" "\xe5\x98\xba\x41\\\x34Q\xbc\x8a\xf6\x95\x06\xc9\xc1\x86\xcf\x31\x17\x8f\xc6\x45\x17m\x1f{p\xd5\xa7\x93\xca\x36\x63\x86\xceh+\xf3\xb9\xaf\x19" "\x1b\xe6\x19\x9br\x45\xb6x*\x66\x08tM\x31\x1b/\xb8\x02{\xf6;\xdb$\xee\x13\?\x88\x33G\xb5\xff\xe3\xdb\x1b\x0b\x8e[\x33\x46\t" "\x9d\xd1u\x63\xc6\x46x\x46\xeb\xc8\x8c\x01\x33\x66\xd2\xc6\xd1\xea>\xf3GJ\xb6p\x1b\x8e\xc7g\x34\xa4\xf8\x96\x95\x33\x36\x84\x8a\xeclU" "\xcc\x31>Wq\xb9\xc6h\xc6\x81\x9b\xa2\xbf\xbc:\xce\xed\x9dp}\xb5\x31\x34\xc8*\xd2%K\x45:\t\xce\x18\x02WQ>Yv\xfa" "\xec\x8c#<\x13\xc3\xcf\x1eJ\xd9\xa7\x63\x43L\x03QL\xb0m\x81\xb1\xf9`)\xf2\xf5K\x0f\xb5\xcf{\xef\xf3\xde\xf5\x43\x46\x62\xf2\x9d" "\x86\x66\\\xfb\xa6\xc8\xd8\x8d*\xd2$>K\x8e\x9f\x80\xa8\x8f\x8a\xe1}Nv\x80\xcd\x1b`\x8b\xd9\xd2\xddr\xfc\x9d\xbd\x04\x11\x61\x1ag" "\xb4\x30\xcf\x92G\x94\xac\xe4\x99\xb7\x87\xa6\x38K\x06|<\x96@\x41\xee\xda$\xe2\xd0\x31<\xc3`\xe1\x98\x0f\x99'\xaf\xdf\x8e\xcb\xb5|" "\xca\x44)\n\xd9\xf2\xfa\x1d\x32]\x44\xcf\xf4\xd7\xefp]h\x62\x33\xba\xf6\xcd\x92\x37\xde\x1a\xdb\xfa\x08\xf2\xbc\xaf\xbe#\x03\xbd\xa8H\x83" "\xaf\x89\xcd\xbb\xa5\xc8\xd2\x01_*\x45\x06\xfbR\x91\xb6\x33\x13\xe7\x87\xd9\xacU\x62\x9c\xff\x98I\x87\x99zq\xfc\x66\xa6\xff\xac\x17O|" "\xc5\x9f\x9e\xb4^\xf9\x02\x1f\x8a\x8e@\x33\x1a\x30\x14\xfd\x9b\x8a\xc8\xb8Q\x33\xb5\xbe\x1d\xaf\x66\xd5]\xb2\x9f\xa2\xb1\xc2\xe9\x92Y\xba\xbb\xea" "\xe8%^\xc5\xb0,O\x99h`\xde\x34\xa4\xfb\xbc\x08v\x1aU\xf4|\xe0N\xc4\x33\x46\xdeR\xa4\xbf\xd0\x8c\xdd\xea\x8c\x01\xc7m\xb9\xcd" "l\x9d\xe2K\xd2\?\xe7\xd6\x93\x33N\xf9\xcd\x18\x1bu\x96\x9e\xd5\x18\x64\x65\xc6\xf5\xb0\x8aI\x65=\x9b\xdc\x90u\x1ci\xe8\x11\x11\x39\xe5" "\x99\x98\x9e/\x1c\x39\xd3\x33\xa3\x1d\x43\xd1+\x88\xba\xd8\xb7\xf9\x94,)\x1a\xdb\x8c_\x13\"\xe7\xfdg\x9c\x03\x9d\x85\x1f\\\xb5\x81\x88*" "\x36\x63\xd8\x99\x19}\x08g\x8c\x32\x36\x63\xd4\x17\xc5\xe5\xda\x64\x32o\x16u\x99\xc6\xc1!G\xb7\x33\x9ak\x15\x7f\xc3\xac\xfa\x8c\x46\xdbY" "\xb6\xd1\xe5h\xd9\xc4\n\x8a&\x03r\xcc\xb2j\xcfo\xc1\x80\xda\x33\xba\x88\xcc\x18\\z\x46\x83\xf2,\xc3,\x8f\xe0\xa7\x7f\x01nS\x34" "\xcb\x1e\xf0\x8e\x0c\xcf\x35\xe3\x02_\x45//\x10\xbd%\x17\xa6\x1e\xa1\xbb\xe1\xd8\xd2k\x44\x99\x36\xb6\xfc@\xd9\x90\x97\x1e\xa3\xa4y\xe5\xe0" "n\xb1\xb3\xec\xfb\x14\x88\xa0\x37\x33z\xa3+\xfa)\x39\xc6\xcb\x8a\xfe\x34\"z\xfd\xe6,\xfa,\xdf~\xe2\x8c\xe6\x8c\x0b\x02\x66\x1c\xeb\xcf" "\x38\xea\x98\xb1\xe7\x9d\x31\xd2\x90\xf2\xd2;\t\xd3u]l\x02\x85\x65\xd7\xcd\x0c[ \xce\xa8\x84\xce\xbc\xfdR\xf7\xf1\x65W*\x8cn$" "&\x96.\"\xac\xf1\xfag\x39\xb0\xa6y\x83\xa5\x91\xb4\xd7\xe7\xa5n\x43\x13X\x9dU\\<\x8a\x8e@O\xa6\x99:#\x87\xa7\x39\x02\xf2" "\x33\t\x86\x97\x10q\x10Q\x44\xe3\x94\xbf\xf2\xc6\x98\x38W\x0c\x19\xf2\xcak\x63H\x38\xe3\x46\xd7\xb3|\xb8\xeeH\x13;\x45\x8eW\x66\x34" "\xe6\xcf\xbc\xa5\x16\xa4s\xa5\x89\x03\xbf\xccq\x36;\xe6\x8a\xcb\x99\x37}\xf9\xbc\xeb\x1f\xd9\xbb\x39\x41i\xb0 .\x46P\xdc\x8cq\x37\xda" "\x99\x7fY\xef\xc2\xe9\x41\x35\xf3\xa7\xe3\xfc\xe7\x8c\x06\xf5\x19U\"\xc5\xa5\x43\xa7\xb1\x9b-n\x19\x62\xac\xbf\x1b\xc4\xb7\x90\xea\x19\xc5Y\xa3" "Y\x11\xdb\xc3\xcc\x39\xbd\xe7\x0b\xaf\xe7\x32\x96L\x1e\xac\xa4\xcd\x19>k\xce\x96jN\xa3\xe5\xdc\xac\x7fn\x62\x9c\xd3z\x30\x37\xeb\x41\x44" "\x83\xba\xb1\?\xe7\x64\xb1n\xa7\xf4\xef\x8e\x14r\xe4&\xd9\xbb\xe5\xa4\x99\xae\xe0\x01\x62^z\xce\x87\x9e\xf3S\xce\x19\xdex\xceXNs" "Nmy\x94\x9c\x85nU]\xdf\x63`[\x63\xf1uv\xb1 \xdb\xcb\xd7[\x8c\x41\xb2\xa0\xbf\xe4\xc2vH\xbd\xf9\x85\x62\x41\x96\xd4w" "K\x8c\xeb+\x8c}~\xa6\xef;\xce\xb2+\x0f\xa8jl~\xc2\xfa\xa4,\xdf\x7f.\xfdn\xb9o\xe2\x82q||\xdb\xdb\x05\xb3}\xc1" "!\xbb\xa2\xe8@\x9c\xd3T\xb6\x0c\xe4\xa5L\x44\x46\n[p\xbf\x94\x05}\xd6\x16\x34\x8b-\xfc\xb7\x0c\xc4\xbc\xa0\x62\xb8Xjz\x0bj" "z\x8b\x64O\x9a\x83\xce\xef\xb4\rV\xdf\xa3\xf6\xbe\xe0\xa6\x06\x8b\xe4x\x05\x88\xce\x64\x61\x63\xf7\x1dNL)K_\xee\xf2\nr\x94\x13" "#\x0b*J\x0bv\x39\x0b\xf6\xa4\x8a\x16x\xfc\xcdY\xb2sS\xdc\xb5\x03\xab\xbfr\x82RYZ\xbd/\x1d\xd3u\xbf\x1f\xe1w\xf9\xfb" "\x15\x87\xcd\x0b\xae\x84P\xf4\x8cT\x11\xb6\x0e\x15\xfd\x8d\xd3\xfd'\xc7$\x1a\x31t\xea\"=;\x03\x62\x1f\xd3\x05-\x9a\x82|\xf4\xdb\xed" "\x62~\x90\x61\xa0\xbaH\xefk\x8e:\x08\x19\\\x82\x61\x80\xaa\xb8\x9c\x8cV\xa6\xdbt\xc0\x0c\x07\x36\n\xcf\xd0\xef\x38&\xdd\xb5\xe2\xfe\xca" "\x99t\xa4\xb4\x65\x1a\x9bMrL\x85*\xa3\x89v\xc1\x1a\xbd\xc8V\x9f\x81\xd0\x1f\x17^\x12\x05uO\x1bL]+\xd3\xd2\x8dX\x61\x0b" "\xf5\x83\xdc\x7fJ\xaf\xf0:Y\xeb\xbb|\x0c\x03\xd1\x45\xbe\x87\x9c\xa5\x65Y\xf1w\xf6\x44Ox\x63\xa2_\x61\x37:\x65\xa2%\x33j\xd6" "\x42{\x9a\xed\x9b|\xa7\xe5Ljy\x36\x45y\xca{WYo\x98\xc0\xce\xb6\xf0R\x96O\"\x19,q\x64\xab,\xaf\xbe\xaa\x17\x17\x1c" "\xf8\x16\x9cS]\xc8\xa7\xcf\xe7\x33\x8e\x1e\x17\x45\xe5\xc8Q\x87\xb7h\xba\x17\xe1\xe8\xd6\x9e\x0c_s\x98\xee\x16\xc5\x65\xc5\xf3\x8b\xc3\xc7\x45" "\xf1\xbd\x9f\xd6\x1a\xb4\x38*\xcb\x66\xed|SK\xfbt\x1d\x16\xdf\xe9zr\xb3\x89\r\x8e\\\xd4\x85\x12\x66\x18\x95\x04\x33\xd4\n~m\xa7" "\xd5\x15\xd5\xff\xac\x84I\x82:\xd3\xd7\xd0MM\xd7\xcd\xcd|\x1dS\x45\x82\x66\x11\x30\x8e\x63\xc6\xb0w\x87\xa0\x35\x1b\x82\xd6IN+\xf2" "G\xac\x01-\xdb\x04g\x43G\xb5\xc5Z\x83\x32\xad$+\x17\xc0Us\x86\xb0\xad\xa0\x84\x99\xc1\xceP\x63\xd0\xad\xdc\x81U\xf9\x1b\xd3\xc6" "\x04[\xb8\x62\x62Z\xa1`\xff\x1c\x38\xa8\xaa\xbb\x93\xe9|\xc2l\xf3\xc6i\x05\xfd\xb9`\xe5\xc4\x31k\x36\xfd\x39\xd2\xda\xa9\xa3>\x87\x35" ":\xca\x1e\x80\x8d\x99\x39\xdb\xe2\x8d\xd2\xb3\x91\xa3mUz\x0e/!M\xf8\x04\xdeu\x93\xed\x36\xbc\xb3\x84\xf1\x41\xb2\x13\xbc*\x82\xde\x1b" "\xea\x8a\x95\xddY\x89i\x11\xf2\x84\x1e\xde\x0eN\xab\x82\xe6\x92i\x98\x8e/\x30\x1a\x34\x16\x42<\x1a+\x1a\xb3l\xed\xdbX\xbe\xb2[\xfa" "\x0e\x98\xf3\x17\x9c\\\x97\xde[\xf4\x19\xa0\x19\xae\x14q\x16\xfc\xc6\x04\xa5\xed_~\xad\xe2\xbc\x01\xbcx\x02\x9a\x9b\xd4t\x1b\xe6%\xc1\xb8" "i\x88 \x61\xd3*\xcc\xd9\x8a{\xea\xb3\x63\xeb\x41\xc0\x06St\x82\xc6\xa4\xe5\x80\xe7\xa0\x31\x39\x00\xdb\x8a\x32\xe2T\xc3\\\xc1!\x43\xd9" ".\xd0\xdaL\xc1\xd9\x31pn\xefP\x45W\"h\x46\x07\x45\\;Q\xeb\x64\x35\xb5\xa6\x42\x98\x99\xa6\x0c\xfd\x31\xb1\xcf\xa8\x8b\xe1\x32&" "&\xf3)\xec\x1aH\xd8y\x43/\x04\xf6\xd9\x91{\xb3*i\x42\xf0\xf5\x35\xc6\x9aQMj[\x8e\xe1\xda\"\xfaS\x9a\x98\xff\x34\xa5]" "\x42\xd8@I\xdb;u\xc4,\xf3Tg\xeb\xb1y\x96\x88G\xbb\x88\xb6h\"\x86\xc2.\x86=\x81,!\xad\xbd\x41\x44\x8d\xa9&\xb7\xc8" "W\xacO\x9aj\x0c\x14\x98\xcfU|\x96\xc1\x1a\x8c\x0c\xc2:\xfc\xa1\xf5\x8a\x8a]\xa0\x45H\x9cj\xd3\x92\xae>\x62\x96U\x98M\xabO" "\xab\x18\xfd\x08\xce\xef~\xe3}h\x43\x92\xf1\x16\xd6Vp#rLn\x9f\xf3\xf5\xaf\x32\xdb\x44V\x61X-x\xda\x97\xeb#&\xa6\xb2" "\xa9\xee=\x61\xfb#\n\xb3\xeeOQT\x1e\xbam\x18\xcb\x7f\x1a\x81\xbd\x10\xfb\xf7\xa2\x8c\xfd~u\x02[\\\x05\x66Z\x9a \xda\x46\x45" "\x8d\x0c\xbcs\x02\xf6\x8d\xd4\x8c\x1f_\xd0\x7f\x80\x41\x9c\xe0\xf3\xd4\x11\xeeT\"\xea\x8e\xa0\x87\xd8\x19pZ\xcd\xd7\xf0i\x30\x85,x\x8b" "\x02\x9c\x33\x37\xf3W\x94\?\r\xc4\xb9\xfa\x88\xd6]\xd8-.\x0b\x37\x0c\x41\xb3\xcc\xd9\x14\x10q\x9dX%\xee\x10k\xc4=\x62\x9f\x18\x13" "g\xc4\x05\x10\rv\r\x83!\xc5}\x8b\xe7|M\xd6&\x8e\x80\x31\xcf\x8ay\x97x\x97\xd8 \x46\x44\xdem\xd6!~:\x62\x32Z\xc5" "\x39\xd0\x16\xfd\n\xce\xf9\xc0\xb6\xd7\xb0\x62\x0bh\xb3\xdc\x8a\xc8\x00\xff}R\xd9$n\x13\xab\xc4gG\x7f\xfa\xa4\xd2'\xbe\x03\x37+\xc4" "\x1b\"\x9e\x1aq\x95\x15\xcf\x88\xfc\xfd\x36/\x89.\x88\x1b\xd0(\xf2\x91vy\xfe\xde*\x11\xdf\"\xa9\xf3\xd1\xea\x35\xe2=\xf0\x80\xd7\xb1" "\x9d\x84\r\xb5\x83\xe1\x97\x80\xcdP\xf0\x04y\x87\rN\xa6\\\x0c!\x88\x86\xb0\xc6\xea\\K\xee\xd6\x89\xc7\xc0{>\xed=\x8f\xdf\xbf\x01" "m%\xb4\xe2)\xf1\x92\xd8\"\xf6\x88\xfc}\x87\xbf\xeb\xa2\xc4\xb0\x15\xa8ixM\x33\xad\xe9\xd6\xe9\xcc \x1bl)z\xfa\x07p\xc8\x8c" "\xb0u\xa5\x82\x36Y\x65H\xb5\xa2\x06\x7fH\x41\x9b\xa7*\xe5\x89M\x17\xeb\x86\x99|\xbb\x1f\xe4q\xba\xb2\xea\xa7\xa6\xab\x35\xe2#p\r" "\xd9\x8b\xfd\xcf\x05\x37pW\x36'\xda\x89xyL\xf9%\xd3\x13\x9ez\x82\xbc\x42\x80~\x45\xa6\x9fu\x1c\xa1\xd1\xa9\x88w\xc3P\x46\xc3" "\x88\xbd\x10\xf1\x42\x88\xab/x\xc7\xa7|\xb9#\x8e\x81\xfd]\xe2\xcc\xb1h\xdf&\x03\xbc&[\x97\x1a\x06`\x82\x43G\x64\x13|\x61\x04" "\xdf\xf8\xc0\xef\xbc[\x8c\x8f\x03\xd5Z\x11\xd5\x9b\r\x17g\xe5<\xf4\xad\xe0>\xf2\x8e\xadX\r\xaa\xb8\"*:\x42\xd8\n^\xf0:\xd7" "\xa8\x42\xb0\x9a\x0bv\x37\x88\xc8\xe3\xac\xc7\xeb\x8d\xf0V\xd9\xfc\t\xb8@.\x89\x36\x02\\%\xae\xa1\xb6\x8a\x02\xedm\tU\xca\x1a{\x8c" "\x1a\xdb\xc9\x1aU\xcc\x1al,\x82\x0fh\x01\x61kQ\x44[\x93\x33\xeb\x30\xde\x16\x1cn\x13Q\x08\xf3\x31o\t\x65\x83\xbb\x18\t.x" "\x1eT\x92Z\xfe\x63\xbd\x1fW\xd2\n\xae\xa3\xde\xc1\x38(x\x84\xdaO%\xa9\x06\xbb\x9a\x07\xc0\x17\xbc\xa8\x10\x91\xe5T\x93jTkj" "\xb0\x90\x08vQ\x0f\xd9\xc2\xd7\x8a/\xbb\xee\xae\xb4\xec\xd2v\xa5\xbdy\x89\x65o~\xec\xdc\x91\x9d\xcd.v\xd7\x12\x94+\x34w\x8b\xe6" "\x06\x98\xc5$\x35\xd4}j\xd1Y\x08\x1b\x00g+\x8e\xc9m\x83\xe3\x85%\x0b\x97\xf6\x04\xb8\x15\x86\xe4\xef\x1d\x98\xee]\x84\xa5\x44YW" "\xa3\x04\xa2\x88:\xb3-\x16\xa6\xbbI\xa5\x16\x0c\x36\xc6\xa4{\x64/\xb1\xcb\x9eR\x91\x8d\x8f\x89\xaf\xd7\xfe\xdc\xca>'i\xf5\xdcY\xfa" "\xfe\x98U\xa7\xce\xb2j\x0f\x1b\xa1*\x13\x45\xedY.\xff\x97-\xef\xc4\x84\xb0\xab\x62\x39\xcdL\xdd\x92\xb0\xf9\x82\x98\xf8Su\x97\x82\xc7" "\x94\x88\xb6z\xc6\xf0\x37\xf4Z\x64\x98V\x17v\xf8\r\xbc\xdd\x85\xc5S\xc4\xe8\xb1\x98\x1d\xb2\xad\xde\x85\x9d\xc1Pwyy|Q\xe5\xb7" "\xc7\x1f\?\xf0\xf5\xfa\x17l\xea\x45l\x95\xdf\xc6\x19K\xf8.\xa6s\x04\xd1H(&\xe6\x31\x65\"\xcc\xe1&\x66\xdd\x45I\xf4\xcf%L" "\xcav\xb8\xd8t\x9c/\x16%\x31\xe4\x99\x19\x1c\x0c\xc3/\x17\x9fI\xed\x08\x1b\x9eLw\xd3U\xbc\x9c|\x1f\x44Qp\xf1\x9fP\x42\x92" "\\\x0b\x98\xb4\xfa%\xd1\xef\xa5\x8c/\x03\x91\xea\xd0\x92\x61\xae\xce\x12\xbc\x04@\x0c\x81t-\x41\x18\xc5V\xfe\xf3\x04\x11m\xb9\xa2\x97\xe4" "\xf4\x62\x90\x1f<\x84\xa7j\x05\x0c{\x04*{\x00\xb6;\x8e\xe1\xe7W\xf7\xc0\xdb\x63\xe2\t\xf0n\x95J\xb1\x88\x15 \xda\xcb]\x18\x1c" "\x05\xc7S,N\x15\xf1m\x84\xff`\x93\xa6\x64\x1e\x07\xb9\xbb\xe1\x32\x1fk\xc0\xb8\x95\xc6(X\xe9\xacV*\x1b\x81\x95\nv\xb6\xfa*" "\x45\x8f=\xc2n\xb6~\x9d\x9dO\xd8\x9f\xec\x66\x1b\xa2\x65\x1f\xb0\xe9\xd9\xc5\x1c\x86`U\xaa\xc2\x99\x7fW)\xa1^\x8a\xc3Nj\xd3\xdd" "|\xbb\xa2\xcam\x07\x05Y\x87\xac\xc7\xa8\x18\x32p`\x93*\"\x9e\n+\xe6\x0c\x8b\xad]\x0b\xefX+'\x30\x33\xe0\xc0&xt\xe1" "\xdf;\?\x46\xab\x96\xdf\xde[\xa8\x0c\x9e\xd8\xf9\x41\xe8\x64\x11\x07\x9fi\x87\"Kp>\x41\x81\xf7\x62,\xe8\x05VnV\x34+\xbap" "\xaf>\x64\x02\xda\x0b\xb8m\t\xde_%\x95\x06\x0cU\xc2:},r\x80x\xc3s\x1f_\xbcm\x83\x18\xae\xfe\xf4P|\xa1H\xc0\x45" "\xc3\x10{\xa4\x89\x38^\xd5\xef\xb2:L\xeb\x07\xffI\x80)\xd9\xd2\xd2Q\x9b\"\xef\xf1\x86\x36H\xfa\x85\xa5R\xa3,\xeb\xad.\xd9\xad" "\xa3|\xad\x64+\xfa\xb5\x05\x06\x9a\xd0uL\xce'\x41\x34\?{\x15Q&\x8a\xe9\x8e\x46:\xfd\xe4\x8d\x66\xfb\x92I\x14\x0f\x1d\xd9\x1d\xef" "\x16\xf3\x83p\x14\x43P\x45Li\x99\x98\xef~\xb8\xe8\xcdg\xb1\xb8v\xa4\x16*\xa3\xb0\x15,\x62\x9e\xee%\x9b\x9f\xf2\x1f\xf1\xc9\x84\x99" "g\xc0\x94\xfe\x63\x8aG@\xf3\xf3\x34\x64_\xb2\x97^L\x80\x97\xa7\x8e\xf9\xcf\xb9\xff }\xef:\x62\xb5\xc8\xf2\x1e\xd9\xc6\x07p\xb7\t" "\x9f\x17\x11\xf7q[\x7f\xa8\xac;\xcbn&\xd9\x9d\xa9-{\xd4=\xf6\xe5OQ\xd7Z\x65\x95\x1e\xc7\x97u\xb8\x38\x08\x1e\xda\xbb\xd5\xa9" "\x1a\xd6Y\x9d\xea\xd9\xd6:\x66T]\x44h\xffi=\xb7}%\xa6\x07\x66\x19y\x65}s\x06\xfd\x91\x8c\xca\x8e\xb1\xef\x95\xd2\x99\xe9J" ";o\xf9\xb1K\x62\xcb\x91\xc5\xea\xe0\x17\xe6\x9f\x03\x8dZ~\xf1!\x7f`\x30\xca\x1dP\xf3:\xc0\xe6*\x86\xc9\xce#\xdb\xe2\x03\x8e\xe5" "\x04\xfb\x8e\x1a-\xd5\xbc#\x94\xf1\xacY'\x91\xbc\xff\xc1\x0b\xc1\x9f]po_Z>\xf6\xeb\x07\x98\x88Rt\xfe\t<|\x97\?\x88" "\x18\xf4\x1c\xc0\x19\xcf\xd0\xd6\x88w\x9d%\x9d\x39{\x11\xb2\xf4t\x0e\x66+\x92\x35\xf0\xdd\x1d\x11\x8f\x8b\x88Y\x8a\xf7\x44\xdd\x10\x8f\xc3\xe1" "\x03v\xc8\x07I\xbb\t\xbc'\xb7\xd8R\x86\x98\xd1\x37\x31\xbb\xe6\xe6-\x1a\xfd\xe7\x80\xd8\xa5\xc9\xe7\x00\xee{\x82h\xbb\x14\xe5\?\x35v" "\x65\x61\x32I\x18\x8c#\x07X\xfe-\x88\xd6\\\x31\x7f=+\x9a\xf8\x30\xf2\xa9\xb1\xbcG\xc4\x45\x8dh\xd5\xe0\x80\x83\x1a\x41\xbc\x1e\xfc\xdc" "\x04\xab\x38/\xdd\xc3\xf3I\xf6\xd0ht\x80\xad\xd2\rMmm\x39\xd3\xfd\xfe\x9c\xc1\xe6t\xe0\xa5\xcfv\x05\xbbH\xd7\x42\xaa\x88\xec\x01" "\xc9\xd8\?*\xd3\x1d~\xc2\x99\xbc^\x9f\xf7\xecG\x8e\xa5\xef\t\x96\x9d\xf2\x37\x18\t\x1d p\x85\xa0\xad \x10\x34\xf3\xb7\xe0\xfb\x13\x96" "\xa6\x88\xf8\x85,\x97\xee.\x9d\xe1\x85\x39\x82\x39`\x85>\xc0\x64\x80`\xe7\xcb\x31\x99~q\x17\xd6z\xc5\xffw}\xa6\x61\xde\x9b\xcd\xe2\xf6\xa7\x9c\xd6\xe9$\x0f\xabTR\x99\x96M\xee\xb2\xf9Y\xb8\xfbx&\x9d\x1c\xe6" "h\xc1\xa0\xb2\xa8\x88\x19\x66\x17\x43\x00+KHO \x62\xb1\x9a`\xbf\x91\x1e>\x42\x8c\xef\x88o\xe9\xbd\r\xe1\x1ap\xb2\x10\xb4\x85\xff" "\x86i\xf5\x38\xad\x0e\x02kL\x03\x33\xd7\x41\x43\xcd\x81S\xab\xa2\r\xb8\xa5OO\x7f\xd1\xab\x9e&\xeb\x33 \xda\xf0\xd3\xc4\x1c\x97\x04\xfb" "\x8fl\xf4N\x93\xcf\x1e\xd0\x1c\xa4\x04\x7f\xacv\x9f\xa6\xdb\x0b\xe0\x87\x65\xf5iv\x81K\x62\xa1\xff\xf4\x34\xdfn\x02{U\xe0\xf0\x05\xf8" "\x63\x35\xfc\x14\xab\x38\xa7\xe7\x34\x62\x9e\x9b\x13\xfb\x1e\xb6\\\x01\xd3\x31\xd6\xa8\xcc\xf6\x37\xc0`\xd0\x39\xff\xfd~\xca\x65\xd0\xf5\xba\r\x06[" "\xe1\x39\xf6\x41\x30T\xd7U\xb4_\xe7\xd6\r\xec\xb1!=O\xb6\xaa@\xcc\x08(\xc2u\x43\x45^\x06\xfd\xd5yH\xc7\x94\x93\xe0\x65\xd6" "\?\xcd\xd7:\xce\x8a\xc7\x11\xf6\x0b\x12\x06S\xd8y\x32]\x03\x42\xf5\x92\x9e\xf2\x39\xaf\xe2\xbdht:\xc7L\xab \x66u\xce\xcbK\xb9" "\x84\xf5\xf6\x81hI\xcf\xd3\xd1\x1c\xbb\xc8M\xe9!\x61\xc8^P\x45\xb8\x92\x98X\xacX\x43q.\x63\x00u\x46\xdby\x06\x83\xadG\xd1" "\xaf\x84\xc5\x42\x82\xfd:\x9b\xa0\xf3lp\xe6\x17\x95\x37\xd4U\xbb\x36\x31)\xccV\x9c\x19&\xd5=\x44Z\x30\x96\xff\xcc\xb1\xf1\x99\xb1\x62" "\xe5\x80v\xd1\xf3|{\x33=\x62\x38\x88\xc0P&\x85\xe1\xe5s\xf3\xb7\x36\xd4\x46\xb6\x82<\xa5\x8d\xfc\xdc\x9fS\x30\xdd\x9e\x64\xb6W\xb0" "\x31\x7fZ\x9d\x64\x95\xcc\xe7\xa7\xd0\xb0\x03;'\xc5\xe5\x85\xb3\xd2g*.\x90\x8f\xe1\xe8\xe5\x45\xe9\x86\x98\xc3\x36\x14\x35Pz\x1e\xb2+" "\xff\x38X\xdc!\xb8\xb8p\x94O\x9a\xb8\x98\xd9JU\xc1" "\xf5W\xc7ph\xfd\x13\xb8\xf3\x91\xcd\x8e\xf3\xb5\x1b\x30\xdbZ\xd2\xf0\xf7g]W\xbe\xda\xfa#K@\\\x43g\xd9\xf8\x88-\xc5\x05\xe7" "-/h\x0f\xbc@\xf4\x81\xe9\x85\xbc*p\x1d\xb7\x64\x33v\x91\xd7\xf0\x34\x05\xac\xf8\x82\x43\xc7|}\x33\xbb\x1b-Y\x9c\x1c\xdc&G" "\xaf\xf2\xb0\x45\x65\xc0\xe4/G\x7f\x15\x11\xe1\x16h\"\x82\xbb\x89\xc8o\"\x18~\xb3yI\xb4r\xdcJ\xce\xad\xde\xb6R\xb4\x92mk" "\xca\xab!N\xa0%\xe8\xd4\x42\\\x63\x05ms&\xa6\x8d\xbd\xb0\x15\xab\x8e\xff\xcfY\xed\xcf/u\x06\r\x31\xcc\x94\x9d\xaa\x1di\xe6\?" "z\"\xf6\x43\x30R\x61\x98\xc0h\xdb_\xa9n\xb7m\xe7\x97\xc7 \xce\x8f\x38-\xa4L\xe7\xccm\xd5\x92\xb2\xae\xb6\xa3\xdd\x35u\x96\x98" "v\x91\x16\xef\xca\x63Ql\x38\xfe\x86\t\x18\x32\x9a\xee\xdb\xd4\xf3\x05\x7f\x80\x98\xb6i\x63\x43j\x41\xcc\xad\xb4\x39w\xa2\xf8\x1b\x66\xa9\xda" "\x9c\x11Q,%y\x8e\x99\xb8\xb5\x14\xab\x41\xe4{\xab\x88\x19&\x88\r\x17\x39\xc9\x03\xb1\x1f\x44\xcc\x94\x98\x88i\x05\x8a\x88y\xa5\xcco" "\xbc\xbe\xbc\xf1>\x35\t\x11\xf1\x8a\x61\xf3\x14\x88\xf5WN\x45\xb5\xa9\xb9\xb4\xd9\x1f(R\xb5i\xab\x1dP\n\xc6\xee-\xd8\xf1\xaa\xe3\xaf" "\x07m+\x31N%\xb7\xc3\xf3\xde\x0f\xe5-\xa8\xf3qK\x9f\xe5\x07N\xa2\tM\xc3m\xf9\x92\x8e\xb4\x41\xb5\x93\xc1y\x38:xv\x0c" "\xaf\x64\"\x87\xc1\xcatK\xc6\x8d\x9f\x12\x93N(\xab\xbd \xe1\xf5!\x1d_\x97\x44i\x04\xd3\x8b\xd7\xe4@}\xcf\x42\x8e\x0c\x17Y\xed" "\xc0\x45\x0e\xf0\xdb\x88\xa0\x62\x98\xdc\xf2+\x8dP\x80\x10\x19\x43\xf0\xe3\x33<\x95-G\x37\x44\xd4\x1c\x15\xf9\xbd\xfc\xbb\x41\xe1n\xc3YJ" "p\x07\x95-=\x8d\x8a\xd9\x06\xcd\x1emZl\xdb\x34\xed\xb5\x39\x00o\xcbh&i^\xb1\x01\x33v\x83\xe7\xc3\x02K\x43\xfc,\xf9\xd9" "\xd4\xe1\x9a\x8c\x98+\x1b\xb4\x32\xd9\x41\x96rN\xee\xb4\xe1\xd7/xs\x1b\x62\xfd+\xfb\x06v\x88/<\xab\xcf\xc7\xd1\x15\xd4+\x1c(" "\xb5\xb9\x9e\x1a\xcdo\x9b\x83\x9d\x36m`\xed\xb2\xcf\xa1\xb0\xb7\xaa\xe3o\x98\xd3m#&\x96\"\x9a\x10N\xfe(J\xe5\x81\x97\xb7\xb1\xec" "\x82\x1el\xc2\xa0R\xb5\xe1\xb1,\xb8.\x05U\xb4\x7f|\x81\xac\xda\xd4\x35\x85\xaf\xcd\xc0\xe2\xdd\xfc\x62\xff/\xd3\xd6`\x87g`:H" "\xd1+\x10\x62\x1d\x08>\xa0\xcd\xc9\x9e\xd0\x30p\x84\xa5h{\x13X\xfb\xde\xc6\x46q\x82\x9f\xe4\x8b\xa9#'\x15\xdb\xba\x8b\x34\x14\x1b\x11" "\xaf\xe0;\xad\xad\xda\xae\xa3g\x92\xc6\x1f\xef\xd4],Z\x1b\x10\x9b\x1f\x9c\x43l\x87\xa4\xd6\x86\xce\x83`\xde\xb3\xad\xfb\xdc\xc2\xa4\xdd\x96" "\x11M\xd1@\xe5,\xbe\xf7\x1d\xcd\xe5\x05\x0fP\xcc\x7f\x8a#\x19\xa0!g\xd9\xe7+&,\x10*\x42\xa7\xbf\xfa\xfd:\x00\xa2\xc5\xbc\xc2" ">l\x8a\xd6\xc5]\xb1\xde]\xe9\xd2\x97\xc7\x97\xb4\xba/\x63\x06\xd6\x88+\x9a\?\xae\xe0\xb3h\x98\x1c\xee\xa4+-\x30\xa8\xddW\xce\x05" "\xd3\xc3-\xa9~`\xab'\xc0\xfa\x04\x88\xba\xa8H\xed\xe8*}\xdfL\x16g\xf0>\x9b^\x65\xab\xef\xc0\xd8\xbe\xd8U>\xb0N\xe5\xaa" "\xb8\xd8\x03\x9a\x97\xedTW\xb4\xa9G'\xb2\xcd\xd6\xb7\x61\xacx\x9dt\x88\x32*\xc5\x34.\x45\x38{N\xaf\x33|\xcakN\xe1]\xe7" "\xb6\x92yz\xf3\xfb\xb5\x9f\xae\xf4X\xa7o\xe4\x0f\x38\xeb\xd8\xc2\xc5/gr\xc2/\xa6{\xc9\xe8\xbd\x45\x46\x1d\xed\x86\xcd\xf2M\x38\xf7" "\xe7,\xeb\xcd\xfc\\\x44\xfb\x14\x1c^\x02y}\x1aR\x14\xc3\xa9&\xaa'\xc9\xce#\xed*\x37~,\x85\x9a\xa4\xc8\xd1\x89\x89\xb0\xa0\x41" "\xdcwQ\xc6\x0b\xac(\xcaJWP\xdf\xae\xad'Z\x1f-\x01\x05\\\x45]\xab\xf8\x87\xd1\x9c\xad\xec\xef\x8f\xd4\x39\xb0\x94p}\x0c\xc4" "P\xf4\x86\xf6\xa6\x1bj\xf7\x37\x30\x63$\xafx\x9d\xbc\x1a\x03\x61\x92\xb8\xc9\x7f\x0ei\x82\xba)\xda\xea\x92\xca\x0f\xa9LZ\xfb\xc0\xcck" "\xdb\x90\x46\x87[\x36\x46\x8a\xcb\xbb\x1b\x43\xb9\x37\xd1\x42\xb8\x89\x88N\xea\x16\xa1\x0e\x14\xc7\x8eX\xbd\x34\xbd\r\xbf\x8a\x63\xea\x8e\xb7\xfc\x9e" "\xb7\x1c\x90\xde\xd2\x1f\xef\x96\x1eT\x0c\x64\xa4\xc8\xe3p\xaf\xb8\xa5\x05\xf0\x96\x96\?\x45\x7f<\x88\x88\x95kL\xd7\x01\xfc\xbc\x93\r\x81\xa8" "\xc7\xb7\x1c\x92\xdf\"J\x94\xe0\xe7\xc4\xdf'\x99\x8e\x11\x85mz\x9b\xae\xb4\x81\xb0\xc4\xdf\xa6\x1b\xab\xc4\x1f\xa0\x45\x1d\x12\xf4(\"\"\xc2" "\xc6\xa6\xa8\xd3\xccOU\x30\x0b\xd5\x61\x18\xd6\xa3\x80u>\x8a\xcaS`hMT\x0c^\xff\xc2\x86\xf8\x31\xd5\xeb\xdbl\x86\xa7\xc9{\x1b" "\xba]\t\x46\xf8\xb7XT \x88\x19\xf1[\xce\x88\xdf\xe6\x93\x88\x88|)\xd6\x06\x44\x64,\xdb\\\x41\xe4\x0c\xf5\x08\xc5\x10\x02\xbc\xc4\x10" "&\xd9\x12\xc2\x66\xa6\xca\x90!\x9c\x1e\xbf\xa5\x15\xe9V\x95\x8b\xca\t\x8d\x61]\xd6-SW\x87sZ\xbd\xbb\xb4\xd6vi\x0c\xeaR\x03" "\xec\xd2$\xcd\xe5\xf4Sn\xaf\"\x88v\xbd\x0b'j\x43\x16\xdbn\xb2\xb9K\xbcp\x44\x8b\x96\x9dmy\x02\xc7\xbb*\x66/]jy" "\xca\xd8\x8e\x9a\xf8\xda\xf7\xa7K\xb6\xe6\xc0m<{R=,\xee\xcf\xb1\"t\xca\xf5\xfd\x86\xd8\x0f@\xc4\xbdOG\x16\xcc.]\x82\x96" "\x37\x83k\x90\xe2\x32i\x1fx\xc8\x10\x89\"\x9e\xf0\xa5Z\xfc\x35\x06\xa7\xdd\xa4\xcd'\x81\x31\xad\xcb\"\xddMnx\xfe\xfd\x30m\x9d!" "\"\x83\xb1\xec\xa0\"\x7f`h\xe7\x05\x91\xd7\x08\x13\xa1\xc8\xb3\xfb|\x89\xd7]\xf9\x0c\x1c\x90s\xf7\x46\xc5\x1a\xf1\x04h\x11%t[\xbd" "\x63\"\xaf\x32\?\xd2\x65m\xb0\x1f\t\xe3\xd9\x16\x15\x7f\xf9\xaa\x88\x03\"X\x45\xe9\x80\xab\xbc!\x36*\x16\xf1p\x87x\x0e\x84\x63\xb2 " "\x1e\x84\x9a\x9b\x62v\xdd\xc9_\x37\xc9Pp\xb0\x84L\x10\x46\xd5nz\xdd\"\xf2W\xb6\xbf\xad\xe2.\x11\x19\x9d>\xe2\x41\xe9Y\xd8\x65" "\xcb\xadH\x85\xab\x9b\xc1\xb5\xa8K\x8f\x9b\xae\x0c\xa6\x81\xa8\xd9\x8a\xfe\xf1\xd9Tw\xb1y\x8e\x61\xb8J\x63\x96\xbe\xa2\x10g\xa8\x38]\x1a" "\xd5\xba\x08U\x61H\x95\xa2\x0b\x07z\x43x\xa3\x82\x61>\xdbG\x9c]\xac)\x13|\xae\x11\x91\xabZ\xd6\x8f\x8e\xd8\x7ft\x11zVp" "\xb0\x42\xec\x11\xf1\xea\xd9h\xcf\xd1\x8b\xa1\x88\xba\x43\xf2\x17O\x44\xab\xd3\xa5i\xbd\x9b}\xc7r\xad|\x03\?\xcf\xd7\x91\xa3\x08\xb9*x" "\xf1\x0c\xc4h\xbdKo\x08n\x93\x8a-<\xf8\x89\xc3n\x1e\"\x9a\x17\xbe\xa2\xf3Y\xa9P\xe6\?\xb8\x96\x06\x30\x8bwiR\xe8\xb2\x35" "\xeb\x8a\x42\x07\xb4h\x8f\x82\xed\x80I\xfd\xd0+\xb7\x32\xa9-p\xf2R\xa6\xfbi\xb0\xccY\xac\xf6\x03N\xed)\x13\xfd\x46\x86\x89\x81\xa1" "\x03\xa7X\xba\xa0<\x0f\x02l\x08\xb3\xe5Q\x82\xf7\xbc\x41w\xd3\xd1\?j\xd1\xbdp\xd4\xfd\xb6_\xac\x64>\xf2\xa3\r\xd9\rk\x0c\x04" "z\xa6\x89\xd8\x42\xe0\x1c\x15\x9f\x88\x33 \x06\xff\x43\xea-\x43\xbaj\x0f\xe9\x97\x39\xa4\xf3\xe4\x90\x66\x30\xc5\xe5\xa1\x37\xac\xdf\x14\x11S\xb4" "\x43v\xc8\x8a\xba\xd7Ki\xbb\x62O\x63\xed\x1b&{'\xc4SG\xb6\xd9*&\xf5]\xda\xac\x8c=^&\xbd\x99\xb3p`\x9fIM" "\xde\x13\xba\xe7\x90\x0es\x43\xc4\xccP\xbc$~\x00\xa1\x8d\x0fi\xaa\x1eR\xedS\xf4\xd7\xa0\x1e:\x64k\x33\x44\x9cz\xc5\xa9\xa3\x34\x63" "l[\xa5( kh\x45\x1e\xa6\xd1u\xfes\x8e\xc0}\xd3!\x87W\x43\x19\x34\xe9\xabT\x0f\xc1\x30'\x35\x44Po\xc1\xce\x03\xf0\x31" "v\xa4\xfb\xba\x8a\xf2\xc3p\xe0\xe5\x30\xff\x99\xd3up\x98\xcd\xac$p\x61\xf6T\x03,\xe6\xddMV\xd8\x61^o\x89\xaa\x9fYlP" "\x61\x93.\x11\xdf\x83.\r\x43/$\xf9\x02%\x80v\xdb!\x82\xfd\t\xb6\x8f\xf2\xda\x19\xc5;v\x34\xc3\"\xfa\x02\xca\x80\xa5\xc6u\xfc" "\xd3\xd1\x1f\x9f\xb4\x11g:\x14\x7f\xe7o\xfc\xbc\xca\x92-\x46\xbbTvG\x1c\x03\xe1O<\x62yT\x44\xe8\x07\x15k\xc4\x08h\xcb\xdb" "\x0c\xe9T\x38\xd2\xb5\x33_+T\xf7\x94%\x9bo\xfc\xfe#Q\x1e\x7f\xbf#V\xab\x11\xf6\xd3R|\x07\xa2\xf7\x17\xc4s$p\x03\x19" "%\xdbG\x44<}R\xe5q\xdb\xce\xc1Pt\xbf\xf4\xa3J\xf6\x00\xdc\x13-\xfb\x84\xfa\xe3(\xa9\xab\x39\x94\"/[\x7f\x06\xc2J\x34" "J\x8eN\xd2\xc6\x39\xc5\x17\xe0\xf1\x46r\xcc_\x9d\xee\x00\xe1\xfd\x35J\xda\xd7\x8e\x08=\xa9\xe2M\x12=rnx\xc4n}\x94\xdc^" "\x01\xa3I\x36>\xc3\xc6\x05\xc2\x30\x36\x1e\xb1\x03\x1f\xf1\x9b\x8e\xc2\x43Z\xb0n\x45\xe7SGl\?\x31\x1dq\x08\x33\xc2r\xcd\xe9\x88\x35" "\x66\x84\xe5\xba\x8a\r\xe2\xbd\x63\xf2\x35\xf7\x1b\xa5\x98\n\x19\xa5;<\xbb\xf6\x03\xdc\xc5\x97M\xf7\xab\x44\x64'\xfd\x63\x46\xe9\xc1\x95\x63\xd6" "\xf8L:o!\xda\xb6\xa4\xc9\xa8\x18\xd6\x0f\x11\xbf\x80G<\xbd\xc1\xdbY\xe8U\x43*\x0b\"\xf2'\r>\xc1)\xb2\x84\xab\x41\x04\xd7" "\x88(\x83T\xabG\x34\xb0\x8c\xe8~\xa5(\xff\xd9]\x8f\x38\xdb\xa5\xc8\xc6r\x94\xceP\xde\x34\xfc\xe6\xd7[\xf1\x85'\xca\xd6\xcf\xe5\x0f" "\"\xb4\x82\x11\xbb\xfep-\xc4Y\x11\x84v\xac\x98\xdd|q\x66|\x84\xbd\x39\x14\xf7\x1cS\x19\x34\x7f#\xbf\x38\xcb\x36\xca\x1e\x7f\xa4\x9e" "\xd2\xb2\x32\xca\x9eZ\xc0\x41\?m\x1c\xd1\x8dz$\x95\xd6\xeb-\xc2\xc2+~:\x06\x11\x8d\xd2(\x9b_R\xd3\x19\x65\?\xb8\t\xe7\xbc" "\x15\x83\xb8u\xef\x98O\xbe\xfd\xeb\x0b+V\x36\x03\xc3\xd4\xf8\xc8\x8b\xae`q\x44\xf1\xf0\xc5Q\x8ay\xf8\xc1\xf1\x8b\x63\x10\xbb\xc8\x85\xbc" "\xb7\x89\xe8\x64\"\x42K\x18\x61\x65\xf5\x94\x9b\xdb(N\x1cK\xf5\x35\x1f\xdd\x02\?\x0f\x89\xc8\xec\x1c\xbd\xe3\x08\x91\xc7\xa7\xa3\xe2\x0cY\x88" "\xe5\x8d\x82\xdd\xd3\xe4\xea\x8ez\xc2\xa8x\x42\x61\xc0\"\x64\x43\x8aol\xb3\xde\x38\x0ey\x63W\xfe\x46\x83\xaf\"M\xc3o\x9c\x44Q\xc4" "\xc2\xe0)\xb7j\x30\x0cG\x31\x1cx\x0b\xbf:^\xa5&\xfd\x46WR\x45\xaa\x98&\x9e\xe3\t\xe8\xac\xfc\x46\xa7\xd2\x37\x1a\x9a\xde\x38\xd1" "\xfd\xc6>O\x91\x93M&\xf2\x42\xe9\xc5\t\x10.\xd5o\xd2\xd5\xc8\xab\xe5W\x64\xa3U\xc7\xf0\x03\xd8\x8d\xdf\xe8\xd3\xf8\x96\xbeo\x12w" "\xd2\x8f\x31\x44Gx\xaa+\xd2K\xe9-\xab^\x10\x9b@^U\xe7\xa1P_\xde\xb2\xdd'\xe0\xd9\x36\xf0\x62\x97\x38w\xa4\x0e\x63\x62\xf4" "\xc8\x9eT\x19=\xd8\xde\xa8\x38\xbf\xb1\x8e\xbd\x65O\xab\x8e\x9e\x07*>u!\x8ey\xb9\xb7SG\xd5\xb5V\x0e\x38`\xd4\x04\xec\x92\xa2" "\x62\x0b\x38\xc7\xd3\xe6\xeb\x1f\x8e\xfe\xda*~#S\xf2\x8d\x35G\x7f\xd3\xbcr@\x8c\x1d\xfd\x91T\xe4\xcb\xe6[}\xc7\xb4\xf5\x84P'" "\xc2\xf8z\xb4L\xbc\xd1h\xa0\x98\x37k\x19\x46(o\x9c\xefz[\xce\x86\xa9\x98\xd7q\xe5\xe2\xe8\x1d\x08\x9dS\x91^\x8f*\xfa\x03\x17" "p\x01}\xe3Z$\x45V\xa9\x0f\xaa\xa3\x8b\xe4\xbc\xaa\xd3\\Q\x8fz\xd8\"iG\x8e\xc9\xe6\x1ev\xb0\x16\x06\x97\xa9\x05\x17S.\xb2" "\xad\x0e\xd0\x62RL\x17\xf9\x86\x65\xd5\x82^(\x8b\xe2Ry\xbc\xa9\xe6\x01S\xe4L\x84N#\x62\xbc\xe9h\xbb'T\xc9j\x86X\x63" ".\xb8\x37qL\xfb\x11\x86\x63\xc2\xbak\xe9\xee\x16\xe2\xab\x08\xb3\xe1\xac\xa0i\x8f\x82V\x91\xe3M\xbf)\xac;\x82U\\\x1b*\xa3\xa0" "\x05\xf8\x36\xc4$\x11\x44\x9b\n\x11\xd1\x46\x93\x82\x36\x85/h^L\xf1&Ly\x82\x33\xdc%\xafuJ\xcf\x92\xf7\xee\x1d\xa1\xb1\x9a\xa8" "\xdbQm\xbe\x83\xc5\xcf\xea\xe2j\x8ei\xf1\xb6\x1a\xd0\xea\xf7X\x89#\xcc\xfc\"\x0c%\xaf\xd3\xfd#g\xc1}\xd1\x98\x46\xed\xb8\x38\x34" "\x96\xd4\x45\x35\xdf\x86\xf1\x38\xae\x62\x00!hj\xbd\xa0up\x31WY\xc6\xd5\x64\xf5\x12h\xab\xaf\x0c\x93\xfbg\xf8\xc1\x1bKW\x0f\x30" "\x9a\xff/\xab\x02m\xf1\x95\xe0\xf6\x66\x12\xc5\x89\x15\x13\xf1~_\xc6\x16\xc5&/\xfd\x65Y\xc0\xb5\xa0\xb1\x45z\xa8\xbc!\x32\x64\x89" "\xe9\x0e\x10\xcf\xe7\xe9\xee\x1a\x1f\x19\x11!Z\xf9\xcf\x35\xd9\xbe\x34sX\n\xae\xec\xd2\x31\x84>\x03\x33\x8d\xd2\x44]\xc8\xbes\x1dX\xab" "\x8aq\x82\x31~l\x15\xa1\x8d\xc7\\\x8a\x1as)j\xcc\xc5\xa4\x86i\xed,\xdc\xd8\xbc&\x0c\xa5\x80\xe8\x10\xa0\xf1\x1en\x8f\xa2^\x43" "\xe0\x91\xb8\x06g\x04\x43\xddj\x62\x0f\xaf\x9f\xacn\x01\xd1hs\xa5\xa8\x61\xb0\xc4({sL*\x0f\xec\x00\x8cI'\xb6\x64:\xd9h" "\x13\xf3\xca\xbe\x80[\xb1\x63\xf0'\x33\xa6\x0bH,\xde\x90\x30\xb4\xdc\x8a\xbf\x1e\x7f\xdd\x98N\xe1\xcf\xf8\x9c\xd5=\xc7\x64p\x8b\x65mq" "\xcds\x14~i\x86\xc1y\xd4X\xd8\x99\x00lQ\x83o\xb1\x31\x84\xdbt\xf1\xef\x31\x44'\x0fl\xba\x9a\xfc\\\x38\x83\xb1>\xe6\xca\xd6" "XW\xb2j\x86z\xf6\xee\x8d\xb2\xc9k\xb2\xf7\x0eV\xd7\x65M\xac\x19\xca\x30\xfb\xee\x8e\x31\x31\x97r\x1a\xe6\xabO\x30\xa5\x81\xbd~\xe5" "\x87M,\x46\x8bu=+\x82\xd6:K~*\x98\x38\x8c\xb9\x66\x35\xe6$\xa4\x62\xaf\x9c\t\x1d\xa2\xc5K\x8d\xb9\x0c\xd5\xd0\xab\x80\x88\x08" "\x86g\"\xab\xbc\x89\xa3\x35Lr\x19\xd3\xf0\x96\xcd\xaf\xc0n\x07\xc9\xd6\x8f\x33\r\xbc\x13\xefK%\x64\xcd\xfe'\xed\x31\xa4\xbd\xae\x86w" "\xfc\x1c\xe7[o\xec\xee\x97\xf9\xf0Sq\xb4%\x46\x9b\xce\xf2\xf8\x05\x33\x63q\r\x81\xb7\r\x35\x7f\xcd\x9a\xae\xec\x44\xe3\x95\x0c\x90\xbf\x98" "r\x32\xd4\xb8%\xe8\x89k^\xe7\xd2\xedS(\xcd\x31W\xb7\x1a\xc2zo\xa2h\x00\x30\x01\x08;\xbb\xb1\xc8\xc8\xf5\xc0>\x1f\xb2\x19\x9e" "+m\x31\x36p\xcc\xdd\xa2\x05\xd1\xde\xd7Jy\xe7\xb7\xf2\x12\xa5\xeb\xd9\xd6\xce\xf3J\x8d\xec\x81\x88&\x08\x01G\x15Q\xf7\xd8\xc2\xd7`" "\xce\x15\x9ct\x92\xab\x35\x7f\x93\xfcg+\xb9[\x87\xa3\xa0\x32\x14\x34,\xa7\x14\xb4\x05\xf2\xf1.\xfc\x8a\x0c\xd3\xcf\x99\x9a\x86l\x92H\x13" "V\xe1\xdc\xa5\xe2\xba#;\x80]\xb8/\x18\xca\x0f\x10v\x46w\xf5\xb6\xe8\xa9\x9a\\uL*\x1f\xd8\x08\xd5\x19k\xfa.\x96\xd8\x1b\xb2" "\xd7\xd8\x85-\xcc\x10\xc3k\x15\x1d\xfb\x8e\xc1\xc3\xcbX\xb1R\r\xef\x30\xf5^{\x17+N\x14\xdb@\xf3\x83Rl\x38\x62\x10\xac\x62\x0f" "\x11\x1bT\x8c\x1d\xf5\x11N\xfc\x37\x31\x0c\\\x10\xa1\xa0\x9ax\xb0\xab{\xad\xca\x0bn\?\x8a*\x8b\x45Qv\x04\x43\x61\x15\x7f\x80\xb3\x43" "GL\xea\xaaxO\x64\xe6\x98\xcf\x8c\xe0\x37\xb3\xc7,\xaf\x86T\x97w\xd9~\xef\x62M\x7f\xbc\xcb\x86\x45\x91M:\xc5\x34\xda\x63\xc9\xda" "Ml\x32R\xb0\xb2\xee\xe8y\xa4\xe2\xe9T\xb7 \xe4-%\x81\xbd\x39\x45v\xd6\xca\x30\x00\x82\xb8\xb9\x45\xf1\xd9\x31X.\x8d\xc1\x34\xa6" "\"\xbeY\xb2\x85W\x81\x93\x9b!V\xd6\xb8\xe8\x1fP\x98\xb4\x01\xf0\x32\x32\xc6\xe6Q\xc5\xfc~\xcd\xc5\xe2\xfa-{\xe9\x92\x9d\x11/\x80" "\x66\x34\x13\xdc=\xcd\xaf\xae!\xee\xad:\x86\xfb\x98X*\x65H\x80\x9b\x92\xb3po\xf7\xb8s\x11\x33\x8b\x64\xd5\xa5\xf8\xf7jK\x91\x45" "\x30x\xe3\xb9X\xbe\x0e\x8b%\xc4\xa4>^\xb2\xd8\xc5\x90\xdd&\x96~\xacl\xf0S\x62\xe9\xf9uv|\x87\xa9!\xa6\xf5K\xe2\x9f\x9f" "\xf6\xe1`\x06\x66\x0eu.\x96\x9e\xc2\xd8g\x89\xe5;k\xd4L-!\xba\x0c\xa2Y\xac]\xcc\x9a\x83\xac=\xb5\xb0\x03O\xd9\xfe\x10\xc3" "u;\x18\xbc\x88\x94\x31s\xebU\x0c\x9aU\x64>\xd5o`\xb9\x84\xe8\xd9\xeb\x8fR\xff\xd4\x05\x65^\xd0\xeb\x9f\xa2\xe2`\xf1K\xbc\x0b" "\x87\x42\x8a{\x8e\x30$\x99\x88\xa9G\x11\x8f;@\x7f\xf7\x66\x33\x9d\xf1\x1dl\xce\xc4\x30\xdb\x64YjqN\xc8\x44o\x0c\xb1\xfa)\xde" "\x85\xcb\x61\xcc\x65\xca\x86\xf9\x1a\xdf\xa4\xf3\xe1\xf8\xfbu\xcc\xaeh\x37\xe9\xb2\x88\xf5\x0e\x88\xc7\x16\x39\x62\xee\x8c\x8a\xea.;\x61\xc5p\xf1" ">K~\xff\x1e\x11\x1d\x44\x1c\xb0\xa4\rX\x8e_Yg\x87'\xe1\x42\xc3\xd3\xec\xf8\x9e\"\x9f~\xb4\xe6\x08O<\x15w\x80^\x36\xfc" "\xab\xca'm\\\x07\x31\xee\x95\x44v\xab\xbb\xe1\x61\xbc\x11\xf8&\xffYw\x94\x01\x90w\x02\xde\x16\xa5\xab\x1f\xb6\xd3\xa3\x8a~h\xa3\xae" "\x1d\x06\x7f\x96n\xdc\xfb;p\x44\xb6\x0b#\x9c!\xd6\xee\x89\xc8\x96R\x03\xc7\xf9\xd1j-[\xbfv\x11\xf3:\x10\xe7x\x30\x44Q\x37" "L\xb6W\\\x0cW\xf2\x9d\xa8\x45t<\xeb\x10\xf1\x15\xd3&r\xc7\xdb\xad\xe0\x00\xa9\xe2\xb5\x63\xf2\xd9\xc1\xae\xaf\xc2\xda\x9b\xe1]\xd8\xe4" "\xc0t.x\xb5\xea\x98\xf1+\x62\xa9\x8d!\xa5\x82\x8d" "sW\x05\xa8\xa9\n\x8e\x93\xeb\x38\xbb\xf9tu\x01\t\xf9\xfaZ)\x01\x8b\x15\x44\x34oX\x43W'U\x64\x1fi\x62\xc3\x45o\x81\xb2" "\xcb\xad\xe4\x0b\xad\x9c|\xbc\xd2\xe7%\xe3'\x04+\x8e\xbe\x03\xbb\x16\x8d\xee\"\xbb\x8fK\x39\x14\x92\xc3[X\x42v\xd0\xc9\xea+\xe5\xf3" "\xee\xf5u\xf2\x8a\xe4\x31\xf2\x1fK:\x04\xfbUGWmT\xc4\xc8\xd3\xc4\xce\xa9\x8b\xf9\xf6(\x88lxT\\\x30KY\x80\xb1\xde\x43" "\xf0\x8d\?\x64\x13\x1b\x36'\x86x\xff\x8cy{\x30v\x08^\xc9\x32v_\xd9\xf7Gqt\x9d\xae\xa3\xf4\x61\xfb \xc5\x8a\x63I\xf1\x02" "\x83\x8f\x99\x31\x19V%\xa3\x8a-\xf5\xe2\x19\xeb\xfb\x44\x94%\xec\xf4%X\x45\x45W\x8d\xe0~\x8f\xe2\x88V\xa5]\xf9\xd4VX\xd1|" "\xe4\xbb/\x98\x83\x16\xf1\xb5\xed\xa8\x96\xe8\xd7\x89\xb3t|\x1b\xd8\x07>&\xa6\xe4\x04\xbf\xee\xc2]\xe7\x03G\xcfM\xac\xaf\x32\xa4\xdd\x61" "\x17\x93\xf4\x86\xae:\x43t=@\xd8_\x31\xfb>\xc5\x64!\x12\x06\xcf.\xba\xba\x80M\xfe\x0cu\xb0\xd7<\x83S\xb3%\x84\xa8*\xc6" "\xb2\xe6&\xa6\xb6\x95\xf5]w)V\xf7\xf2Z\x97\xe2\xb1\xa3+\x12\"\xc2\xa1\xdd\xc5\xd2\x81|\xf2\xe8\x35\xb5\xe0\xb7\x10\x44@!\x13\xf3" "\xca\x0f\xc5\x07G\x7f\x39/\xe0\xea\xfd\xcd\xd2\x82\xa8\x99\x86\xbf_\xb5\xf4\xc6O\xd8\x43\x34}\x88\x9d\xba\x8b\xdeO\xabx\x33\r\xe2\xeb\x1e" "\xfc\x11\x95\xd5]\xa1+\x1a\x95p\x97\x33>\xcb\x39\x1f\xe4\xfc'\xe9\x31\xe9\x02\xbd\x80\xba\xf9\xc0^\xbd+\xd7\x82\xaf\x8c\x88\x1c\x9ej\xaf" "\xb4\xcd\x00<`\xec\xa3 &\x83K\x0e\x9d\x99 \xea\xa2\xf7p\xc5\xcbw\xc8\x30\x0b\xbc\x1d\xef\xd3j\xbb\xcfq\xe6>\x07\x95\xfbp\x90" "\x14\x8ck\x8e\x1a\n\xef\xb6\x43\x16\x03\x61pR\xd4\xdd/l\?\x99x\x9f\xb6\x95}\xd1\xe9\xc2\xbe\x37\xc2>G\xa5_\xc2\x37_\x10\xca" "\xcc\xbe\xe9@{\xc9\xcf^\x89\x65\xe6\xd9\x00\x36\?\xf1\x63\xf0\x93\x35,\x33\x98\x0f\x14\x39\xd0\xdd\xa7\xb5\x64\x1fs\xef\x86\xba\xb5)\x1f'" "\x9d<\x39\xb2H\xedg\x16\t\x46\x10\xfd\xd6~\x61\xe1\xbf\x04\xd7\xf1\x93\xa2\xb9(Z\xfd_\x0f\x81'\t\xf7W\xca\xccu\x36\xaes\xd2" "\xa8\xce\x19\x8ez\x62\x9b~(\x9e\x01\xf1\xaa\x8a\xccU\x15\xb3kn\xbd\x1d\xd7\xb1$\x45p\xef\xda\x31\xdb\xdfr\x91:\x82\x89\x16\x0cX" "\x44s\x8a\x32\xd4\x8d\x82\x1a\x03\x30[\x44\"h\x8b\x1a\xe3:\x8b\x43\x1d{\xb0\n\xc2\x1a\\\xc7\x84\xa6\xa0\x39\xeb\n\x62\x82\xa0\x9e\xaf\xe0" "y\xf3\xcb\x15\xe0\x04\x8f\x83\xe9\xf5\xf8P\x87\x85\x16\x90S\xc5>\xd0\x82\x43\xc5\x87I\x65R\xb4\xae\xf2\xc6%\xd8\xe6\xb6z\x1d<]\x83" "\xd9Jk\xc5\x33\x9d\x42\xb5\xc5\x8b\xc2\x0e\xb6\x35[\xcd\xa7V\xd9\x15\xd0V/\x08\x9aG\x8e\xe2\x02\xd8>\x03^\xef;\xf2\xe3q\x31\x86" "\xe2\xa3\x63\xf1|N\xc3\xde!k\x9f\"\x8d\xb7\x87\x98\x31T\x8c\x80P\xfa\x0f\x31\xb1m(O\x86\tX\x61\xe3\x80\xe1\x8e\x13\xde\xf1{" "%\xef\xadR\x05>L\xf8\x83\xf4\xe4\xde\x91\x05\x43\x45\xf5Q\x86\x9eq\x98\xb6\xde\x81m<\x07\x95\xda\x43\x84yS\x44\x0e\x61\xca\\\x10" "\xa3\xcb\xc3t\xc4\xf3mS\x32\xc1\xb7\x8e\xa8H\xec\x11\x0e\xd3\xf7\x01\x11_(\xfd\xd0\xfc\r\x0f\xf3\xb1K\x1c\x03\?\xd5k\x9a\xfd\xc4!" "\xf6\x92\x35\xd4\x31\x1f\x14\xd9\x43\xec\x01l\xe8o\xce\xd1\x83\x62\xfe\xb3\x45\xab\xd1\x61V\xdd\xc2\xdc\xb0\x88\x18\xd6\x1e\x86\xf9v\x11\xcd\xafM" "\xd0<\xd8\x04\x1f\xa4\x1am\xc1\x85\xd2\x98\xbaJ\xce\x9f\xc1\x9e\xce\xf4\xa1{M\x30\xd8\xf4\x0e\xb3\x1fkW\x0f\x39*:\xcc\x8f\xbeJ\x85" "M*Q\xd1|@\x0c\x0f\x61=|\xcc|\x38N\xdf\xeers|\x15\x36\xda$\xe2\xd5\xf2\xc9\xbb#\x36%\x35Q\xb7\xbd\xde\xc7\x0b\xe6" "\xef\x9f\x1a|\xe6\xa9\x07\x36W\xefJ\x84\x38\x8a\x0f\x8b\xd5\x81\x96\xdc\xcb\x16\x98\xc6\x03Z\xf8\xeb\xc0Y\x42\xb0qO\xc4\x37\xc5\x32J\xc5" "\x0f\xdd\xab\x13\x9d\xe1!\x16\x0e\x0b\xda\x9eK\x8a\x9b\xc4\x07\xc7\xe4\xf3\xd9\xcb\xa5\x30}\xc2\xc6\x01\xd9\xc2\x31Yl\xd0\xa4y\x88uJ\x86" "\xd2\x46Q\x1f\x38\xc4\x96s\x8a\xa8\xb5r\x19\xce\r\x1c\x16/\xc7\xc0\xc5\x85\xa3\x7fl\xcd\x00)#\xb6\x86+>\xa2\x89\xf2\xc8\x96\xf2\xbc" "\x63\?\x8a\x12\x93\xc1\x1b\xbcu--x\xb8\x19K[{,\xc3\xca\x34&*\x1a(\xb2|\xf0H\x16;&\xcd\x1b\x84\xff\x30\xa6\x31S" "\x30\xf3\xa4,\xbf}`n\x1f!\x86\xa8\xa1Vy\xf4hG\x34\x88\x1e\x61\x07\"\x41s\xe1\x8f\x8f\x38=s\xc4\xf9\xc4#\x9b\xc8=J" "\xd7o\x9c%\x95\x11\x87\xf4G\xf0\xf3\x31\xcc\x1a\xef\xd8\x98\x00\xcdy" "\xceP\xe7R\x98\xd9X\xab!\xc8\xcf\xefWGp$\x41\x66\xb0`R\xff\xa0\xf8\xe0\xe8O\xc6\x19\x14\xc5\xdf\x45\x1b\xf1\xb8\x8d%{u" "\xfa\r\x18\xfb\x1a\xf8'\xd1RU}\x85_\x0e\xd8\xfe\x43\xfe\xfa\x13\xd8\xf8\x1a\xee\xa9\xc6\xe4\xa1\xd2\x9d(\xb0\xe6\x61\xd6\xbew\xa6\x8b\x32" "\x61g\x33&\xaa\xec>\xde;\xeb\xb4\x81\x13|(\xbaZ\x1c\xc1\xa5\x36>\xc2n\xda\x86\xd8\xcc\xd5\xc5\xb0\x85\\Hx\xbe(\xb3\x19\xde" "\x87*\xd6\x11\xd6U\t\xb2Z\xe4\x83\x05\x11o\x93\xbfV\xf3\xdbO\x9a\x98\xc8\xb0>U\x19ol\x0b\x80\x15+\x8e\xe5+N\x1e\xbc\xc0" "\xe4\xef\xfc\xe1\x17\n\x0cuz\x45\xff\x16\xc5J\x95x\xe9\xb8<\x64S\xb4g\xb8\x46\xd1\xb0\x07w\x8b\x84\"\xc2[S\x91\xb5\x84\xe6\xbc" "\xb8\xa8\xfc'y)\xae;\xaaQ\x1a\xd3\x02\xca\xb4\x41\xb9\xb9-\x31\xd5\xe8\xfb\xdd\x65\xda\x16\xf1\x94\xf8\x44\xec;.gJ\x1a\x1cK\x37" "\xa8\x92*&w\xc7\xd9\xdd!|\x00\x35\xe1\x07\xe8\x0f\x30\xbb\x37[\xef<\x30\xd8\x83\x1b\x9cYn\xd0\xc6\xd5\x80\x87\xb1 \x86X\r\x9d" "\x7f\xd8\xa1[\xaf\x30\xccG+\xb2@\x34\x38m\xa1H\x05\x9d\"\xcd\xbf\x64\xb4_\x37h\x15j\xd0\xf3\x45Q\x1e\x8c\xe3\xce\x06\x82\x11\x1b" "&\xdd\xb5\x0c\xe3\xc3\x06\xa2\x92\x08\x62X\xde\xf8\x33\xcd\x10X\xb5\xcc`v \xa3\x35X\x19\xc7P*\xd2\nl\xe2\x62\x9f\xd3=\r\xec" "\xe0&h\xce\xce:\x19\xb6\xea\x18n\x18\xa6\x10\x1a\x61\xd1>\xc5\xeaR|\n\"\x66\x0c\x1a\xcb\x19\x83\xc6r\x8e\xa0\xb1\x9c\x15h,g" "\x05\x1aK+\x7f\x63i\xc9\x37q\x1c\x1eGw\x96x\x39\xcc.\xb8\r\x85\xa5\x61_z\x9b\xc2s\\>_\xc5\x31\x44\x44W\xb6\xef\xc8" "N\xb3\xc1\xe6\xbe\x41\x45\xa2\x91\xd4\xef\x35.\xde\t\xf3\x1e\x13\x66\x8a\xec\xd5M\x44W\xd0\xa0\x31\xbf\xf1\xc7|\xdf\xa0\xcd\xbe\x81\xd0p\x86" "\xbf\?#)\xce\xce\x42\xc1\x39|\xcb\x8e\xf9\x81\xfc\x9d\x9b\xcd\xff\xe7L\x83V\xe7\xf5]\x44-\xb1\x34i\xff\xa4\x30\x97_\xa4\xd9\xfc\xcb" "\x8a\xf6Q\x32\x9dx\xb5L\xee\x87\xba\xbe\xf9\x9c\x17\xb7\x10\"\x8a=G\xf9v\x99\xf9\x95\x1b\xd3\xd9\x05\x7f\xbb\xa8\x87\xa5\xe6\x10\xa7\xa7." "j\x03\xe3/\x08\x15\xbd\xa1~\x0c\xf1\x0b'\xb3\x1bZ\x07l\xa7\x11\x11\x61\xe0Q\x14\x95\x10\x31\x10\x94}\x38\xa6_\xbc\xd2+_`X" "\xd7\xc5K_\xac\x00#\xbe\x05,\xf9\r\x44\x9cU\x64\x86\xbe\r\x1di\x1dT\x91\x1d|\x83&\xb6\x06V\xde)~\x01\xa7\x13Gz]" "\xa8\xa8[\x34\x61~\xb4\x41\xe3\x7f#\xf9\xee\xc2\t^\x44\x8c}\x1b\x1c*(&\x83\x05\\\xa5\x8d\x89\x98\x1cn\x07\xf6\x1d\x85\x63\x0b\x66" "\x85\x06\x10\xbb\x83sp\xdcH\xab\xc7^\xadh\x90W\xf4\xbcOO\x9a^\x34\xe8t\xa5\x88\xf5i&\x66\xa3\x37\x1a^\x1a\xd4\xf9\x15\xd3" "\xf6Z\xb2\xdf.\x33xN\x34\x38\xd0Q\x44\x14\x44\x15_\xbc\x8cp\x06\xa0\x81M\xdb\x0c\xd5\xdb\xea\xecl\xc9z%\xb1\xa8\x1c\xc1\xfdX" "\x12\x30g\xd0\xe0\x9c\x41\x63\x39g\xa0\x62\xb8\xbe\x8a|\xb1\x16\xf2\x9bN\x04\x8a\xc9\xe0\x89\x66\xa9\x06\xa7\x11\x1a\x9c\x07hp\x1e\xa0\xa1\xbb" "\xc7\x34\x99I\x30\x9f\x37hln\xd0v\xae\x88\x65\x1e\"\x9a![\xed%G\xd5:\"\xbd/\xab\x8c\x9a\x1e\xe2gl\x82'\xec\x8e\x9e\xc9\"v" "N\xb1\xc5\x83\x88\x16\x8e\xdb\x30l\x81\xael\x9en\xf3\x00,\xbf\x8aX\xa3\xab\xbe[\xec\x63\xb0\xd7\x9c\xa1\xc6x\xc7\xe4\x8a\x33V\x02\x61" "K\x13\xa3\xb2|q\x9cT:\xfe\x19\xb3~\x35\xdbv\x37\xad\x46\x36\x9ai\xff\xc3\xe2\x9c\x8d\x07\x1c\xc8\x36\xbcT\xfd\x31\x05\x0b\xfb\x41\xbc" ";\x11g|\\\xa8k\x8a^\xcb\xb1\x1d\x44\xdc@$\t\x43\?\x94\xaf_\xd1\xca\xdb\xa0\x95W\x91\xb3\xc4\xd4\x03rL\xce)\x96\x1a\x64" "\x61\xda\xdeV\xd0\x11z\xd7,\xa8\x81s\x30_\xaa\xacT\xb7\xbdX\x0bJ\x0f\xe6\x39\xad,\xea\x65\xb3\x43g\x88s\x0e\xb1\xb2\x9b\xed>" "\x85\x84\xda\x31\x87\xf9\x8d|\x0f\xa5#\xdf\xe7m\x0f:\x8e\xde\x41\xe5'\xa8m\xba\x13\xee\x10_\x8b\x66(\x45y\x11\x0e\xa3\x94\x99\x37\x43" "+\x30\xf7\xcd\x16\x06+\xa5\"\x16\xb5\x41\x94\x16\x9e\x95N\x19\xbf\xb3\x88\xde&\x88H[R#\x7fX\x91\xecG\x38O\x63\xf9\xeb\x99\x8b" "\xea\xe4\x33\xbf|;\x16g\xd3\x64\x1b\x85\xbb\x98" "m\xc8%\xd9[\x9c\xb0H\x9e\xe8\xdc\xe1h\r!\xaa\x8d\xc9\xa0\x9d\xe5\xee\x04\x41#\x0cu\xbc\x82\x0e\x82\x0c\xfbv\xc5'\xc9\xe6\xb6#" ";\xd0\x13~\xd1\x13jm'\xd4\xcfN\x92S\"\x8a\xfeIr\xbf\n\x84\x1b\xc2I\xf2\xc9\xe3\xbc\xad\xa0\x46ih^\x38+\x8e\?\xa8" "\xa9\x9d\xa4\xfbw@^\x0b\xcb\xc8\x05o\xea@L]*\xaa\xb5\x64\xe7U\xba\x9d\x90\xf6\x66\x85\xe1$\xb3\x9d\x10\x04\xb1\x08@Q\xbd\x02" "\x63\\\x81\x46m\x45\xea\xef'X\xb6\xa1x\n\xbci\x00\xfbG\xc0\x99\x15\x8c\x93|\xeb\xfb\x37\x1e\xa7\xc7{`\xcd\x8b\xb0\x87\x82\xb1\x62" "\xf3\x15\xe1\x93\x84\xa1\xce\x9c\x14\xcc\xf1\xe2\xa2\xea\x98]\xff\x94\x44V\x9c\xf3\xa4\x1e\x39Zx\xe2\xf3\xc0\xe2sN.(\xd3\xed\xd3\x61\x7f" "P\xa6\xab\xb0q\xec\xf2\xd7v\xf8\x35L\xa7\x0b\x8a-\xe2\x84\xeej\x97\x88\xa8\"h!\x42\x04\x31>\x13|u\xd4\x90\xef\x16; \xbe" "\xd4\xad\x04,\xe8\x8a\x8a\x43\xe2(\xbd:(\x8e\xee\xc0\x36yt[\xf4\xb6*\xf6\x87\x34\x96\xde\x1e\x66\xf1\x1b\x82Qy\x02'\x11\x96," "\x1c\xdeij$_\xd1\x93\xa1ZJ\xc2S\xd6;\xcc\x66\x13\xfa\xf1\x97\xdc\xa3/\x93\xfdM\x9c\xfc\xff\xae\xcf\xd2v+\x91\xc1\xef\xf6\x16" "\x62\x9f\x97\x0e\x96/\xe6i\xd2\xd8 \\\xa8\xa6]\xb3\xeb\xbc\x94\x9c\x66\xc7}\x99\x1co#\xd0\xa8\x88\xa7+\x08\x9b%\x62\x8b\x8fm\x01" "\x02\r\xf9\xcdL\x0c\x9e>\xca\xa4oU\xe7\xa2\xef\xcbR\x82(\x02\x9a\x36o\x65\xb3\x8dl\xc6\xf7y=\xa2\xfa|\xa9\xa1\xf7\xebj\xe6" "O:\x1d\xd1\?\x39P\xbc\x94\xbbs&\xef\x32\x99\xbe!^\x8a\x8b\xea\x39<\x66\xc6\x7f\x9fq\xae\xe9\x92k\x14\x14\x35kN_\x13\x0b" "\xcc`\t\xe1\xb5L\x44\x34T\x61\x8b\x33\xe4\t\xb5\xb0K\xba\x36_\xea\x8e\x00r\x7f\x98w\x97\xcc\xbfW\n\r\xf0\x32=\xdd\xc2\xba:" "\x15_\xb5\xe8`\xbe\xe5\x32m~\x63\xdd\x99\x8b\xd4\".\xd3\xf6\x02\x41V\x45\xbc\x91&\xec!\xd9\x44\x91I_z\x8e\xfa\xa5.\x36\xff" "\x32\xf6\x35\xcb\x84\xbc\x32\xa5\x11\xe1\x32}mh\xf1\x1b~;\xcbl\xed\xab\x88\x43Q\x43\xda\x9e\xa1\xd4\x46\x15\x7f\xbf\xf6\xf5\xcbM\xdf\xa8" "\xa9\xfe\x9bV\xfa\xa6z$\x0e\"\xad\x1c\x10\xbf\x82x\xf8\x80\x30%`\xbe\xa9\x32\xd8\x9fK\xfd\x1f\xee\x00\xb7\x19i\x03\xa9wh\x1a\xb6" "\x9e\x34\x31\x8b\x9f\x12VH\x61\xf9\xc7[v\xb0\x9e\xaf\x36J\x05\x8d\xa3\x0f\x45/V\xd8\x9c\x46\xb0:\xb5\xad\?\x90\xbd\xd9\x01\x8aMv" "x\xedH/!\x15\xb1q\x8d\x88\x97\x1b\xfa=\xe3\xcb|\xd2\xf6Z\x80\x30\x18\x82\x98\xef\xba\\\xbaq\\\xca(\xe0\xaf\x98|\xaf\xa5\xdb" ";\x45\xe5\xb5\x94\xc6\x16\x96\x8c\xde\x13\xc2\x9e\x8b\xca\xc1R\xfc*\x89\xe1\x17\xf7\xcb;\xb1\xa2\x62'g\xc1\xc7M\xddw\xa0R\xcb\xe6g" "H\xb0\xd0\x32\xe9\x83\xbb/]J\x8dJk\?\xd8\xb5@\xd9\x0c\x08\x8f\xf0\xcbl\xb6\xe9-\x02\x44/$\x1a>\xac\xfeY\x12\x97\x8b&" ",\xe1\xfe\x19\xcb\xb4\x85\x41\x03S\xd4R\xc8\xc2\x16X\xb8\xa0$\x0c\xbf\xfd\x66\xb4\x8c^\xe6k\x8f\xf9O\x1f\x61;\x84\xdd\x33\xb5\xf3#" "\x8d\x82\xd4\xe1\xe2\xfcG\xea\x9e\xe8\xff\xf4\x1c\xb8\xcc_\xf7\xd2\xd1\x96\x34\x86\x1c(i\x42\xde\xdb\xa0j!\xac\x13\xee\xf0\x8e\x0f-o\x9e" "\x9f\x36\x11\xba\x42\xd8\xcf\x81\xa3\x17\x1d\x11\x11%I\x45T\xa8\x62\xe5Z\x37\x33Y\x44\xde\xc8H\x82\xb7\x10\xea$ \xa3\x8a\xe8\x92n\xdb" "\x97\xdc{\xa2\x9c\x80\xab\x15pIQ\xf4/IM\xfe\xb2h_\x39\x86]\xd9\x8d\x61\xb7\x10\x11M\xcd*\x35\xfajlY\xb9\x0e\xe2\x1d" "o!MR\xff\xa2$r\x04\xaa\xacX\xd9\t,\x9e\x39\xaa\r\x65<\r\x0c\x66\x37\x15\xbd\x84\x15\xf3\x03G\x04\xdf\x13qq\xc1\x0e\xb5" "I\x33\x9c[\x11\x9a\xf4\xeeo&\x0b{\x85&\x62\xb1\xc5\xcd\xe2\xd6\xeex-\x7f\x86\\\x44q\xcdy\xf0k\xecW\x15_gMk\xb4" "\xae\x0b\xdbm \x66\xc0.\x41\xdb\x1e<\xd6\xdd\x11\xb5\xf2\xff\xbc\xd3\xd2pK\x7f\x38\xc5\xb0\x8f\x97\xb1 \x36\xe7\x8e\x61;$\x63\xd8T" "\xc4\xc4l\xb5\xcf\x8a\xa4,\xbf\xa8\x43\x8cL\xc7\xbbM\xb7\xe5\x31\xcf\xb2\xeb&\x18\x96\x39\xdcr\xea\xf5\x16\xf1\xed\x04\x9fk\x45\xa3\xf3\xeb" ";\xa5I\xc2\x62'\xbf\xed\x64U\xd3\x0bn\xe9Ht[\xf4\xd7\x1c\x7f\xbfz\xf9\xfa\xa6\x33\xb9\x1b\xf6\x66\x8e\xef\x92\x8eU\xd5;\xacW" "\x15\xbcZ\xb5\r\xc7\xac\x32\xdc\x65\xb0\x85\xdc\xd1]G\x91\xc6\xf6;\xfd\x30\xa2\xbc\xe2\xc4\x88\xabR\x04\xf7\x81\xb0\x93\x46\x9cr\x16\x0by\x02\x03jTTP\x1e\x8a#\xa6\xc3N\x1cq\xad\xbb\xe0\x85\xa3\xab'\"\xe6" "\xbdN\xd6\xe7}/*\x8e\xde\xf0\x8b\xe8\x05\x46\xc5\x1d^\x11NVQ\xf1\x88\xea\x8b=\xcf\x05\xa1\x0bw\x38\x91\xd5\x41\x9c\x98\xb8\x93\x8f" "N\x8a\xf1*v\x63\x8b\xbbt\x83\xea\x96#\x1a+k\x00\xe1\x0e\xd9\x65\xcc\x0c\x46\x13\x15\x84\x15]\xd0\n\xa5\xe4\"\xd1\x42\xfd\t\x1e\xec" "\x02O[\xfa\xdf\xb6\xc0\x12\xb4\xed\x66\x04\xd1\x63wuNS\xfe\xc3\x86\xd0M\xe2\r\x62\xc3Q#\x90\xc0\xf7\xb5\x9bn\xe3\xc9\xd2\xdd*" "\x10N\x1a]\xba\xcbvS\x94\xd0.\xadk\xdd\xb4\xaf\xd7\xce\?,\xb7\xbb\xb4$v\xb1w\xbc\xa4[\xbc\xa4\xe5qV\x9e.\x87\x36]" "\x8e\x00z\x34\xc6\xf6\x38\xf5\xaaH\x9b\x99\x89\xb0\x9e\x98x\xb0\x9f\x44[\xe5\x63\xfan\xb1\x33\xb6q*\x86\x10\x80\xc6\x8a\xe3\x45\x10\x9b\x9b" "\x32h\x0b,\xac\x9e\xe9\xb1[\xef\xfd\x62\xcd\x46\x8f\x46\xc0\xde\xef\xac\x01\\\x34\x1d\x8b\x86\xd5\x82\x1e;\xe1\x1e\xd7\xf9\xf7\xe8*\xda\xa3." "\xabH\x87\xdc\x1em\xa8=N\xfa*\xa6\xf7+t\x8e\xea\xd1\xcc\xd1\xe3\xcav\xc5t\xb2\xc1\xa6\xbe\xc7\xe5\xdb\x8al\xae|)\x83\"[" "\x62\x13g\xee\xbc\x0bv\x9c^m\x80\x61\xfc\xa1\xc8\x95\xce=Z\x34z\\V\xe7\x0bx{\xc9#/\x10\xef\xfc\xb9\x39\x17\x83y\x83\xd9" "\xa3\x0e\xd1\x63\x0f\xdb\x93\xb7\x01\x62\xe4\xa8H}\xa8\xc7\xd6\xbfG'.\x45\xcfl\x15\x31\xf4\xe8QOWLvg\x0c\x17@\x16~\x19" "\x94\xf3\x1eWJ\xf5\x10\rT\x10\xd3\x32\x8a\x9e\x9b*\x46=\x8eP{j\x64<\x1d\x16g(r\x9c\x8a\xe8\xe5[O\xc0\xa8\xe3\xa8:" "\xa0\x85\xb6\x06\xe3\xfb\x8aH\x03R\x8f\rU\x8f\x8dP\x8fM\x94\"\xd7q\xf6\xd8M\xf6\x8a#\x14&/\x31\x82T\\T\x0c\?\xc4\x90" "\xbf\xc7\xe9\x9a\x1e\x15\x9a\x1e\x36H\x8a\x1f\xe8z\xa8\xa8\x1b@\x1do'\x8bO\x19\xba{\xdao\xf0`z\xd0}Q\x31\x9f\xf3\xa0[+" "L\xac\xc8>\xd0\x32\xa2\x98\xbe\ri\x06z\xc8l\xf7\xca\xf8\x81]\xd6#\xfd\xd0\x1f\x97o\xf4H\xc5\xf4\x99\x83\x87g\xdb\xdb\xcf\xa3\x1f" ",\x19_\xe9\x99\xcf\xf9\x9c\xd4\xcf\x80\xf0\x41y\x66\x41x\xc6\xd6W\x82\x43r\x38\x43<\xb3\x35Q\xcc\x9aM\xff\x15\x18\x07\x38\xcf\xa2\xff" "pn\xf9\x99*\xce\xb3s\x9e\xf2\xa2\x9b(\xf8\xfe\x80\xc2\x30\xb4U,\x8eW\xa9\xb2\xbe,\xd7\xdf\x88\xf8\x42\xb4\xe2\xe2.$/\t\xc2" "\xd4(r\x98\xf4\x42\x8f\x1d\x45i\xe7\x11\x0cX\x18\x46\x62\x8a,r/\xd8\x8a\xd4\xb0tS\x8e\x8d^\x38\x43\xf4\xc2\xc2\xfd\x92L\x7f\x1c" "\xd9\x9b\xaaX\xfa!'\xcd_\xfc\x8eK\xb3\xf4K\xda\xee;\x9a_\xcc\x01\r\x39\x9aP\x66\xf0\xfe~I\xc7O\x8e\x1a}\x05\xcd\xc7K" ":\xe1u\xe1\x94\xf9\x42\x03\xd6\x0bM\x39/Yu\x8bV\x9c\x97\x0c\x81\x39\x14Y\xee_\x10\xfa,~\xf1\x0c\xcd+\r \x0ci/\xc5" "\xfa\x8e\xa3(\xee\xfe\x0e\\\x1d\xa1\x88\xb8\xe4\x10\x7f\xde\xd3\xcav^\x9f\xa4W[i\xfb\x33\xdf\xc4\x8b\x17\xd7\xef\x8e\xcbO\xdbG\xf4m" "\xc3l\xbf\x8ah\xc2q\?\xd9\xdb\x06\xd6\x87i\xe7\xbb\x38_\x05\xc3\xf3+rqV\x9f\x1e\xfc}:Y(\xf2\xfb\xf5\x39\xfb\xda\xe7\xaf" "\x07\xbf\xb6\x9d\x92\xe2\x1c\x88\xc6\x8aq\x8f\x05\xe1Q\xa7X\x16q\xb5\x01\xfb\x81\x01\x36\xff\x30\x0c\"T\xa0\x01\x07\xac\x03\xce\x9d\x0e\xe8\xe3" "\x33\xe0\x1c\xa4\"\xb5\x83\x41z\xf1\x91\xda\x46x\"\x0e\x1fh\x8b\x1bP\xff\x1f\x64\xb6Y\x9a \xfc\xe5\x07\xd4\xe8\x07\xf4\xb6W\x64\x41\x1f" "\xd0\xda\x31\xe0\xf4\xea\x80\x93\xb5\x03\xc4\x62\x33\xd4\xa5\x92pX\x1d\x30\x46\xcf\xa0\x38\xd6\?\x88\x8du\xf9\x83x\xf6$\x7f\x10;\xd6X\x8c" "\x39\xc7&\xb8\x93\xac^\x32\xae\x88\xb1\x9d\x9b\x12\xd3=\x16\x02\x9b\x38j(\x88\xbbu\x30\xe4\xf5\x98\x8b_\x04#\xe2\xd8QZ\x64\x36\xca" ">\x01\x31\xfe\x9d\xed\x13\xef\x89/\xc4\x19\xf0\x9b\xf7\x82\xe7\xf1\xf8\xf7g\x83h\x85x\x1c\xb6\x61Q\xf1\x85\xf8\x0e\xb4p\xeb\x82\xdb[\x8e" "\x32\xce\xa4I\x43Y\xda\xda\x63\xb0\x9cq\xb2\xd3\xb4\x17\xc2\x43%\xbbglm\xc6lJ\xc6\xc9>\xde\x8e#\xd5\x31#\x89\x8d\xd9\xa8\x8c" "\x93\x83m\xda\xaa\x44|%\xe2\x15\xb8\xda\x45\x31\x9cr\xe4\xeb\xc0\xc7\xd8\xc0\xd4p\xe9`=\x66\xf8\xb0\x31;\xa8\x31\xb6\x39\x17\xec\xae-" "=|\x94\xe9\xb2n\x8c\x81\x94\x15O\x0f\xf4\x17\x11\xb6\r\xec\x1dp\xd1\xfd\x18\xb1\x1d\x05Q\xc7\x14\x8b\xea\x84\xae\xea\xe3p\xd1\xc1G\xc8" "\xc9\xc1\x07m\xa4\x63\xce\xbb)\x8a\x92\xc9\xaa\x39\xa6\xce\xaa\xa8\xa1*Q)\x94\xa9qkx\x0c\x36\?\xce\xae\xef\x10\x43Q\x18\xe2\xa5\x8c" "iY\x1f\xd3\xa2\x33\xc6\xf6\x07\x82\xb0\xc0\x8c\xd3}<~z\xbc\x87)j\xb0\x06\xb2\x87\x16\xdc\x31\xf6\xf3Q\xec\x10\x91\xa9\xe9\x39\x8a@" "\xda\xaa\x39\xcaw\xf7oGMsL]h\xec\xef\xc8\x95\x64\x8at\x10\x13q\xe2\x1fJ\x44uY\xc1\xcc\xf4\x38\x9d\xa0\x18\x65k\x17@" "\x96kzw)z\x11\x17\x91\xb5|\xcc\t,\xc1/\"\xbe\x0c\xd5\xce\x31'\xab\xb8W\xaa\xa1\xee\x66\xddys&\x17\xf0\xa7\x15V\xfa" "\xdc\xff" "\x7f\xb6\xde\x44+u\xe6\t\xfb]\xdf\x9d|\x97\xea<\x33\x38\"\x82\x82\x02\xe2\xc4\xa0\xa2\"\x01r/\xe7\x98\x81\xbb\x38U\xf5<\xd5\x64" "\xbf\xff\xb3\xd6^\xfbWO\xc0\x90t:=VWgW\x15g>\xf9\xc2\x16\x9f\xa2j\x8d\xbfH\xba\x85\xc8<\x9c\xee\xfa\xc8\x9a\?\xe4" "\xdc\x89\xb8\x15P\xb7\x8f\xce\xd5V\x84\r\xda\x45\xa1\xe9\xfb\xc1\xe5\xe1\x1f\xf4\xfdR\xfa\xab\xa8\x8e_{L\x8d\xf9\xb5\x33\xc4\xe2\x15\x85i" "\xa5\x0f\xb6\?>\x38\xda\xf8\x91\xc3\xb3\xe1\x83kh\?\xd8\xc8SJ\x91\xcc\x19[SGO\x9e\?\x44\xa5'[\xc9\x94g\xc2\x9a\xa1\x0f" "\xae\xf8\xf9\xc8\xbf\x90\?\xf3\x19\xee<\x8f\xf9\xcb\x31\x9e\xf0\xea\x06\xa9\xc5^\xa1\xf0\xc9\xc9\x04\xf5i~\xa9\xe6\x1e@\x64\xa9\xaf\x14\x43\xf1" "Jy\xaa\\\xd5k\xaaw\xc7pN\xaax\x8f_Y\xd9*\x88\xafU\x64\xfc\x95\x7f\xce\xb0\xbf\xad\xc6\xde\xd9H~>\xe8\xda\x37\x63\x89" "\xacLv'im\x46U\xd2\x35\x33\x18g\x9aq\xb7\xe7\x8f\x13V\x1c\x33\xfa\x8d\x1c\x9c\xca\?\xd8\xcc\x7f\xf6I\xab\xb7z\x9b\xeb\xba\x63" "\xdbP\xd3\x8e\xe5\x9bG\xcc\x66\xa6$u\x87\xfeY\x19{\x66\xf2-\x9f\xb1\xb5\xaa\\\x1fj\x90\x03\xa7\xfe\x01\x96\x17\xa9\xca\x8e\x87,\x66" "L=\xfb\x9f\rV/\xd5\xd5K/\xa8\x65\x9dK\x8f\x66\\\x92\xea\x81\xbdl\xd3\xce\x83\xdb`N\xa7,*\xec\xca.\xe3\xb5\xfa\x04Q" "\xed\xcc\x10\x9e\x8e\xd9\xd5T\xd4\xc9\xc7\x0f\xae\xd6\xc5\x94\xa9\xf2n\x30+\xd7\xf4m\x9a\xad\xe3\x88\x99\x89\x31\x14\x33\xe3m\x1dT\x19\x84\xbf" "\xcf\x1a\xa7l\x19\x98\x42\x97\xc8\xcc\x10\x33m\xad\n\x7f\xc7\x61\x14\x35W\xdbO\xecO\xcc\xd8r\x98\xd9\x8a\xcb\xc7\xb5\xb2\xa5\x0b\xbbL\xe8" "\xd9\xbd\x94\xcaY{\xe2J\x8a\x44lS\x63J\xfan\x1cO\x98\x85\xc7\xafiT\x65=\xab*\xf9\xfd\xe4:~U\xd2l\xcf'\x1dW" "\xd9\xcd\xde:\xe9\x66\x9a)J\xccoQ\x87\xc3\x1c\x33\r\n\xba\xec\xd2\x1fo\xc6\n[\xa8\x41\xdf\x11\xf5Y\xd5\x02\x9ck\xf0I.\xda" "\x14\xd5\x0eW\x35os\x1d\xc6\x8c\xee:\xb3\xbf\x85\xae\x13\xe3\xb4\xe2\x8c\x03\xf5\xca\xa4\xfe\xc4\t\x07S\x9e\x8c\x62\xfe\xf4\nj\xdd\xdbT" "\xa5QP\x0f\xaf\xfeU\xe1\x63Ly\xcd\x92\xcdo\x36\xd9g\xc9v \x87\xf5\x66l\x34J\xd2\xbf\xb1\x9d\x39\x63\xfd\xad\xd4\x11\x8bY\x35" "(\xf4\x31i\xb2\xb6\x9e\x31*\xdeL\x97\x18h\xc6\xde\x87*G\xd2\xe0\xe5\xf2\xdcYR\xd9\";N\x1d\x87\xb8\xf0\xb5\xc1v ,\x08" "\xa7J\xef\xaa\x41\x95\xde\x39\x12m\xaa\x39\xf6|\x17\x94\xdf\xb5\x1ex\xb8\x63\xc4>S\x85\x0f\x46{\xfeZ\x88J\x0f\xae\x19q\xcd\xd4\x45" "\x9c\r\xae\x82\x42\x1f\xd3\xcc\xab\x01\xbd\xeeM\xd5\x87\x1c\x1fQ\x95u\x97\xea\xd5\xbc\xfe\x85\xec\xa9\xcd\x36\x84)\xb8\x10\x15>\x8eZ\\\xac" "\xb8V\x85\x8f\xf3\x8dM\x8e+\x99\xd2\xf1\xca\xb3\xa0\xc6\xdb\x85\x1f\xce'\xcf\x1c\xfc\x35%O\xe9\xaa\x1eT\xbc\x99\xf5#W\xab\x87\x9d\xf4" "\x0b\x85\x46R\xddQ_:\x0c\x9fRi\x1c\x44\xb4\x15\x35\xecY:\xf0\xc9\xa8\x19;\xbc\x33\x8e\x04+\xd3\xbb\x1d\x06\xa1\x33\xf5u\x8c}" "\x46T-\x9c\x16!\xf2\x39(yl_(|\xd8>\x9cq\x90H\x19~\xf8\xeaH\x9d\x00\xb0$\x63\x96\x34\xf4\x15\xfb\xfb\x65Nm>" "\xa5\xef-v\x8a\x66\xfa\xa8%\xcf\\\xf1\xb3\xdb}\xe7z\xdcKUz\xf1\xcd\x99\xdd\x19\x36\x03\x10v\x98Y;\x63\xe7j^N\?P" "\xad\xa8\x13\xc4Q,\xafqP\xf2\xa4o\xb7\x82\xba\x9e\x14UsLgUU\x1a\x92(|\xd6wjq\x8cI\xd9\x99\xf9\xb3M\x93\xfe" "\x85\x97,\xe1\xbd\xc1Z\x11\xa5\xd4#\xac\xc4M]\x36\x19\xb3\xd4\x14\xd6\x01\x9a\x89Q\x35\x35\xf3\xc6~\xe1/\xd8z\x98q\xdcl\x96<" "\x32\xbdX\x39%\x83Zz|U\x30Ww\xc7\x41\xdd\xf1o\x06\xd7\xf2\x0e\xfcMY,\x0co\x9c\x85\xa2\r\xdb\x37+\xf9\x37#\xa6\xe6" "\xe8\xd7\x8b<\x0e\xa7(u\xae\xbd\xfe\xecJ\x37\x1c\x9d\xf2\xeb\xe3\xabP\xec\x8c\x17\x1a;\xf0\xb0TT\xb7\xbc\xeawm]\xb2\xfb\?\xe3" "\xac\xeb\xcc\xe6\x11J\xd9\xd5kP\xfe\xca\x88Y\xa9%\x83\xcb\xa0\xaa\x07!\xbf\x8a:\x9d'\xd5iP\x9e\r\xc5\xfch\x04\xf3\xf7\x43\xde" "\x17W\xebIIS\xe5\x83\xec\x63\x19T}\x96\xee\xf6\x0b\x8a\x63w\xa6n\xb7\xd8-\x34\xf5\xc8=\xd5\xa0\xc6\x17\xf9\xf6\xb4\xa8v\x7f\x83" "\xc2\xf0\x88\x99_\x9b\x1c\xf9\x32\xf5\x1b\xee\x30\xdb\xed\x33\x42\xa8\xa9\x8b/]Q\xb7\x11\xfeN\xcc\xbcY\x0bj\xf4\xce\t~U\xab\x8d\xc3" "\xf4\xf8\x39\xa8z\x89\xbe\xb7T\xf4\x64\x9eq\x1ch\x96\xcc\xb7\xa5\x91\xc5\x1e\xa0(m\xa2&\x1d\xfe\xf4\xe2\xc1\xb9\xba\x65VX\xbc;\xc3" "\xb3]\x0e\xa5\xf3\xc1\x85\xf9\xaa\xd4\x35\xde\x95\x17\x33\x08\x99Q\xe9\x16\x94t\xf5${'\xd5;\x84Q\xb7\xc3I\xe5+\x14\x63\xa2\xaa\xa7" "t\xbd\x32%oX\xfc\x1a\x94t\x10o\x1f\\\xa5\xdb-\xaf\xdcM}\xa7\x9b\xd5\xa2\xda\xfe\x0eJJ\xc2\xeaiQ-\xce\x82\xc2\x02n" "\x33\xbf;\\\xa1\xe0\n\xe3\?\xaa\xb2\x9b}\xf9\xe7*/\xbf\x16.yus\x91o\xdd\x84\x97Y\x0f,\xfd\xe3t\xe3R\x43_TK" "\xd9\xc9\x8b\xdaL\xe5\xff\x1c\xe6\xa2\x37\x39\xac\xf9\xcd[\xb5\xa2\xa4\x12Y\xab\xbe\xd3_\x0b\x31\x19\xfdQ\xcc'm\xbfo\xe0\xbe\xbcm)" "\x94\x36/;\x9b\xa6\xac!\xea\x8a\x81\xe2\xcd\xdc\xfbIo\xae\x82\xc2\">\x9a\xfe\xd0\x45\xa5\xef\xbf)\x82\x13\xcc\x18\xf4m\xa6-\xf6\xeb" "\x11\xa7X\x66\xeb`\xac\x33Ig\x34\xf9\x0b\n\x81\xf4M\xe9\x32v\xd6z\xec\x13)\xb5#\xb1w\xb2V%\x0e\x0e\xa8\xf2\xe6\xad\x17)" "\x42\x8d\x44\xcc\xa2]U\xeb\x37\xd9\x8d\x82\xea^q\x8a\xdc\x14\xeb\x62\x31uR|}*U\xf0\xb2\x82*sm\xb8\xaa|y\xc0\x31\x35" "U\xf2X\x19+\x65\xe6\x8d\x08\xa1\xfc>\x07\x39\x66\\\x9b\xae\\\x0f[\xab*\xb4j\x82\n\x17$\x07\xd6\x66Z\x1f\x31\x36\x84\xaa\xd0\x08" "\xf1\x96\x39\x8e\x15\xd5\xba\xcd\xc8\xb1\x84\x99\xc5\xb8\xbd\x92\xd7\xc6v\xc3<\t\xc7\x86\x1e,UU\x1e\x37-\x0e>\x42\xf3\xea\xe6\x98q\xff" "\xdf\xcf\xfe\xf7\x13]\x43-M\xc3\xcb\xac\x37\xe5P\xb8\x1c{+\xdeiS\x1a\xdd\xee\xd3\xa5j\x1d\x41OUvy\xe2\xaf/G.\x94" "Z\x95 H\xc5\xccV\xc8u\xb0\x7f\x98)\r\x1a\xcf\xda]\x15\x66T\xd5\xd4\xdd,\xd9o\xf1*%\xbd\xedYQ\xe4\x7f\xdc\x93\x1a\r" "{i\x05\xb5\xfe,\x83\xeb\xb5\x98\x63\xa7>\x15\xf8\xd1\xcd\x18>\x66\x46\xcfi\x65x\xe5\xc4\xfc\xa7\x13\xa5\xd3\x1e\xe7\xa5\x64x\xe0\x8a\xeb" "\xdc\xd4\xcc\xe3\xdb\xf0\xb6\xb5\xe7\xab\xc1\xae\x37\xbf\xd3\xa7\xfb\xec\xb8\x16~\x06K\xff\x84\x0fZ\x10Wx\xc3o\x1f\xe9\xd3K\xc8\xc1\x83G" "NR\x8b\x19\x65\x97uo\xc4\xa5\x63>\t\xb6[\x84\x85\x16JP\xdap\x61#\xe5\?\xc7\x38S\x38[\x0f\x1a\xc1|K/O\n\n" "{\xea\x15TH\x11=\xf0\xae\x63\x83\x98u\xb1\x03{\xbbr\xb5Y\xab\x91\x35\xd6\x7f%\x9d\x82\xc3\x83\xe2i\x0e\x9e\xb1\x87\x17Tpm" "\x32\xd5\xd2\xac\xa5\xf9\xe1\xe0\x39\x1c\xc3\xe5\xb6\xb7\xc2\x01\x0e\x33\xc0\xa4\xf7\xad\xa9\xdf\x98\xfe<\xaa\x42\xc1)\xe6\xc1\x35\x83q\x98\xf2\x9dJ" "\xa1\xc2\x94\x81\xa9\xce\x86\x64\x30N\x90\xf1\x80\x34\xd2\x8b\x07$\x19%\xebO\xcf\x39\xa6\xb7>&\x8d\x7f\x8d\x41$}\x90\xd9\xfa\x93\xcf\xcb" "\x04\xb3\x08T\x85\x33\x31\x0e\x83\x99\xcbn(\xcf\xc6\xa7\xd8y\xbb\xf0T\xf2\xe3\xf7U\x63\x07\xde\xa7\xd9\x43\xf8+]\xf5v\xf4T\xfc^" "_:=K\xce[\xdb\x81\xe0\x04\x61\xea\xeb'\xbc\xb2\xe3\xd3\xd5\xf5W\xe1\x42W\xf5\x97$x\x91\xcc\xb8Xk\x96~\xf0\x45\xf2\xec\xf8" "\xb5\xa9\xad\x63\x36\xa1\x34\x0e\xe1=\x33\xcb\xd7p\x1d\x95+\x34\xf0\x84\x92\x1c\xe1\xebl\x01[\xcc\xc2Y\xba\x45\x85\x00q\x33\x06\xefQ&" "\xfb\x1ek\x46\x95\x06k\x83\x33\x84\xaa\xeci\xc3\x9b\xea\xa6\x42\xe7L\x83\xfe,\xab\xf9\x12\xaf\x85W\x46:\xae\xc0\xde\x91\x98i\xa5\xc2\x91" ">U\xd8\x92JL\x44\x8b\x99\x65'H\x8d\xac:\xd1\x85\x86\x33\xbc\x9d^\x0f\xdbl\xf2\x86\x0f)\xa9\n\xdeq\xaa\x92\xf3\x0f/\x1aT" "\x35\x9f\n\xdf\xb4X\xb4%.\xfd\xb3\x03\x8f[i\xf3v\xd5\xfc(\x1ex\x08\x7f\xfd\xefg:\x39y\?\x0e\xaa\x35Ho\xb6\\y\x9d" "\xa1\xe6\xcf\xe8\xdf\x1f\xd1\xa5t\x85\x03\x97M\xa7\xae\x1a\xda\xea`w\x1f\x39P_J\x03\xdd{\x1e\xd9\xcd\x9e\xb4\xd8\xbd\x82\x16%\xa5\?" "\x9d\xa2\x66>\x62\xa7\x83\x1d~\xab\xbd;=\xdbN\x37(\xe9q\xba\x82[\xb3\x32\xf9\x19&\x07\xaf\xae|,\x8e\xee\x1bJ-\x98\x46\xfc" "\xfaS[\x9f\x8d\?\xf1\xe7\x1fy~\x0c\r\xa6J\xdbI\xae\x86\x35\xad\xea\xa4\x31\xde}\x16\x1b\xc7\xde#'w\x39\xaa\xedr\x1d\xb5\x1e" "\x43\x37#\x93\x96o\xfd\xe7\?\x9f\xb0XS\xb3\xa5\x11~\xb2hg\xbd\\\xde\x0e\xfb=\x9b\xe9\xfd%UV\xdb\x15>\xc6R\x9c\xc2\x01" "\xd4\xe7\xae\xe4\x35\xf4\x11\x98\xec\xe3%\x19\x33\xd7\xb1'\x92\xcd\x1eW\xd1Nz\xcd|\x1c\xd5\xe5\x97\xbc\x31\xc4\xe1i\xa5\x37\xce\xbc\x10\xa1" "\xb3\xc9,\xdf\xd8\xcc*m\x86\xd1\xf3\xb0\xe0\xc2\x13]\xe0\x1b\xdf\x63\x88Qg\xbf\xe0\xdb\x33\xe3\xb0\xb1\x32\xad\x36\xb3\xc9\xc3\xbf*\x99_" "\xa6\xe7h\x17\xe5;\x87\xce\xf5\xd8\xf8\x0c\xcb\x8b\xf3\xf2\x0f\x15\xae\x86{\x94\xe8@\x9c\xbe\xeapj\x9dI\xf3Yw\xde\x61\xa2\x9b*\x07" "\x85\xc5\xefJy\xf7\x39!>\xcb\xef\x37\xc8\x13Nv\x9a\xa9\xef\xd3\xb1zj\x61\x86X\x8fqQ\x92\x99O/\xc5\x0fLyI\xa7\xe1" "\xb8\xfc\xb3\xbe\x46\xe7\xe0\xbc\xc7LZ\x1f\xc9~\xcc\xdd\x10LU\x46\xd9\x65%\xa8\xcb\xbe\xfcs\x95\xbd\x97\xe8\x0f\x32\xa3\x9f\x8bR\xb2\xed" "\xff(]z\xcdq\xcd|\x34(\x8c\x89\xe4\xa3\x89\xed\x43\x87\xac\x9c\x8f\x37\xad\x01\xc6\x34\x18\xe3\x85\xcb'\xf2\x06w\xbd\x95\n\xe5\xa3\xea" "P>\x18\x87\x9d\xd5\x94\x1ezR\xcc\x97\xc2\xbb\x92O\xbe\xb4U\xb7\xff\"O_\x1d\xfa\xaf\xf9L\xbf\xb6Ii\x04\x8d\xb2M~\x99\x85" "\x81p\xbd\xb9\x82\xa9u\xf7_\x94.\x32\xdc}r\x95^\x44\xc9~\x14\x14\x1bz\xbau\x93\xfc\xe8\x05o\x61\xf1\x98\xfe\xfcx\x9d\xc1\xa8" "`\xca\x42\xa9\xaejqI\xf7|\xaa|\x1f\xf9\x9f\xc1~\x66\xd8]\xcb\xf8\x87\x85\x85j&{\xe3`\x96^\x39\xb3mJ\x1b\xde\xdb\xff" "\x39\xd6}\xf6v\x87\xa8\xb4\x13N\x9c>\xdf\xe7\xec\x42\xaa\x42\xec\x05\x35\xbd\xa3\xa7\x66\x8b\x1b\xc0\x41u\x36\xe9\xe8`J}M'\xae\x34" "\x03\xae\x7f\x34\xec\x92kju\xfbL\xf3\xc1<\xeb\x8e\xa5\x08PW\xf0\x03\xb4\xa7<\x9f\n\x0bmm\x8d\x36zy\x9aV\xf8\x0b\xb5\xc0" "\xbf\x45#\xbd\xac\xbb\x92\x13\xd2\xbf\xc4\x94$\x00\x66\x9aL\xc9\xad\x63}\x06\x95\xb7\xad\x44\xe5gS\x06\x8d\x9e\xd1\x65QYx\xdf\xd5\x81" "\x31L\?\xab\xca\x0fg^\xc1\xafn\xf9\xfb\xb7w\xba\x0f=\xf3\xbd(\xad\x9e\x36N\x90\xf5\xbcH\x92\xc3y\xe9p\xfd\xa5\x87\x64w\xe1" "\x43\x08\xba\xef\xf0\xfd\x36]\"g+\x0e}\xf9\x90\x98\xbe\x45\x1cI\xd1m \xf7y\xf1\xaf\xd7\xfa\x01\x07\xec\xe8\x10\xa9\xd4p+\x88\xda" ">\xe3\xdbs\xdd\xc5\xc8t\xb4\x8b\xe5\x36\xd1\xee\xaa^\x05" "o\xed\x06\xf6\xf8\x1e\xec\xfd\xd9\x16G\x46\x8dm\x31\xbe\xa6\xb2\xdf\xda\x83+\xaep\xf1\x0bVq<\xbf\xd7r-\xda\xe7Y\xf6\xe1\x46n" "\xc4\x18\x08\x94\x35\x80\xa3}\x0c\x35\xa9\xb3\xc6\x36\xf9J~\x19\xd3\x8d'p\x33\x10\x1e\xfcn\xa2\x39 j\xbb\x0fZo\\x\xc9\xe3\xe6" "\x46\x16\xed\x33\xcb\xed#\xdc\x65\xb4\x8f\xf0\xa4\x42\xdb\x81L#=k_ \xbd\xbe\xa0\xba\"g\xe0\x8c\x44n\x39\x62\xf9\xa7\xc4\x42R\x31" "\xf7\xde\x9c\xba\xb7\xcd\x35\xbfX\x91\x82\xbe\x8d\xd8\x07\xa6\xc4\x84w\xaf)\x8c\xfd\x89\x89\xc4S\xfe\x45\x11\xeaGQ\xdd\n\xd9\xe4UXi" "w\x84\x35oz\xfc\x19\x1c\xff\x82\x16\x02Nh\x15\x8d\x11\x9e{\xd1Q\xba\xb3\xa9\?\x87T<\xf2\x9f\xd5\xa1\xc0\xa8R\x30Y\x14\x1d\xc1" "\xb3\xc8h\xbe\x04\xe6\x1a\x39\xe2\xa9j\xdf\xc5o\\\x97\xad\x95\xf9\\T\xfc}OM\xa1\xb6\x1am\xf5\x9a)\xc9\xfa\xe9\xc8\?\xf3\xf3\x8c" "\x9c\xe9\xf5\x13\x06\x86\x45\xd5oH^x\xf3\xc0\x02g\x1cP\xdd\x92<\xb3\xad~V\xf6\x34\xa5m\xe0N\x14\xde\x13\xba}\x18\x0bO\x38" "\xbb\xc4\xe3\xcb\xfaL[\xdb\x16U\xd3\x18\xe7\x82\x63\x61t\xa4K\x9a\xaf/\xfc\xaa\xb1\x1a\x37:\xd6\xdb\xb2\xd8\xa3j\x96\xc1Y\xa0$\xc5" "\xea\x66\t\x65;_\x45\xdc\x92/:\xc6t\x64t\xcc\x42\xe1\x38\xe9\xe0\x84\xacg\x94~\x62\x96\xd8\xc7\x18:\x8f\x8eu\x8eg:\xc5X" "\xb2\xa8\xcf\x08}_\x31\xa3@\xe6W\x33\xcdO\xc9L\x8ci\x45\xc7\xf9\xf6\x0ex\xb6\x05\xf2\x04\xe8\x07\x18\xf3\x61\xbc\xaa\r\xd3\x32\x97\x04" "\xfc\xcf\x31\xcc\x80G\xc7\x18\x9a\x8d\xb8\"\x0c\xe2\x45\x8c" "so\x94\x1a,}\xa8\xb9J\xba\x43\xddL\x31\xb4\xf7\x38\xd6\x66\x64\x86U\x33k_\x64\xcf\xdfT~\xf4Rz\x0c\xccO\x65V\t\x0c" "\x91o\xd4\xe6T\xb5\x1cT\xd4+()\x16\xf8\xfe\x94Q\x1c\x15\xd5r\x63\xfd\xcdr\x32\xfc\x95\x7fT]-\x89m\xccPU\xe1\x84\xfe" "\xc7\?\x98\xf8V\x33\xfa[\\\xfe\xe7\xb9\xcd\x99\x8c\x0b~\xc7\x02n\x18u\x07\x84\xc3\x63W\xf9\xf8 \\O\\sJu\x9c\r-\xe7" "\x94\xb1\x13\xa6\x12i\x82\x18\xa4\xca\x06xp\x44\x9e\x82\x87x\xee\x98'\x12\xa2Y(\xaci\xea\x97j\x41UO\x83*\xd9g'T\x15" "]Z\xee\xa9+J\xdb\x42\x41\xf5\xc8O\xa7\xfe\xe5\xcf#TuGj\"y\xbc|#\xcb\xf0\xc1\x10^\xe2\x91\xc1\xe3\xd6XH^\xa8" "\xac\x1e\x89\x9dn~\xebp\xd8\xe4\x19\x9fH}}\x30\x86\x0b\x90)\xcc$\xa8\xd9\xd7=\x35o\x37\xe0H\x89\x03\xef\x1b:\x33Y\x61:" "\xc8\x63\xdf\x38Y\xd5\x99\x1a\xe6\xd6`\xd4\xeb\xb5\x35\xd3\xae\xb0\xcf\x07\xd4|#\x41\x19\xacJ\xee;|\xb3\x7f,\xca\xdf\xd4\x64x\xa7]" "\xca\xc2\x8f\xd9\x01\xec\xf7\xfc\xcf\xe1_\xa7\xce\x07\xa2Y\x61\xd9l\xfc\xce\xce\x80\xaa|\xff%\?\x66\xba\x0e\x17N\x8d\xda^]+\xdf\x41" "T\x94\xcd\x9b\x18\xf5^\xac\xbb\x08\x65)\xe2\x99+\\\xba\x39\n\x1b\xfd}R\x9f\xe1\x06O\xfd\xd3\xd3v\x66\xe1\x9a\xfdY\xfe<\xea\xd9" "\xfd\x39Oy\xe7\x96@\x9e\x63\xe1Q\x1c\x95\x31\x35\x8d(\x14\xf2\x08\x37\xe4}\x38\xf7\x37\x41\x94\xc6\x7f\xf1\xad\xb0\xe5\xc0\x41\x99\xadK(x\x1f\x0bm\xd7\x16!/\x08\x9e\xcd\x42\x9b\x04\x10\x96\xc7\xba\x33\xeb" ":my`\x9d\xb7q ||\x89\xdb\xf5\x12'\x9b G\x65s<\x12\x8c\x13h\xf8\x37\xa6\x0b\x9b\xb1\x42\xbc\x97\xf9!~X\x03\xc7" "\xeb\x88\xfdQ\xd6\xc4\xefh\xe4\x99\xea\xa9W%\xb9\xe4\xd0\xf5K\x8f]u\"n\x91 \\\"\x87\xe5\xb6\xc3\xad\x31\xec\x8bH\xf5\xf2o" "\xaa\xe2\x98\x06\x42\\\xa7\xaa\x1e[\xa7\x9f(i(\xfa}\"\xe2K\xc4\xcdG\x8cX\x8a\xea\x66\xf8\xe2V\xc7\x8b\x9c\x02\xed]\xbb\xa2*" "\x39-\xf7\xbfRU\x9c^\x35\xd8&\xd1\xf7\x88H\x03\x15\x37u\x0e\x97\xe9\x83\x03\x41\xdd,\xff\xd6U,\xd6[\x62\xa6\xb1\xf0z\xae\x1e" "\xf6\x92\xd1\xbc\xf0pu\x07\x01)\xe7n\x91\x17V\xafV\xef\xd0\x11\xc5\xc8\xae\xef\xf9\x1fz\x37\xe7\xc9\xd6\x13h\x1b\xc0\x1bW\xd7\x1f\xc9" "\x12\xdf\xc2\xc2+#;\xca\xe7\x88\x18\x61\x0c\xbe\xb5\xa2\"{\xa1\xce\xe1\xac\"\xb4U\x8f\xc2K\xbb\xae\xf3\xec\xe4\x16\x34\xdf\x13\xa3z\x94" "\xa3\xdfj\xaa\xfb\x9e\x96_\\\xc9\x1b\x1d\x94\xad\xa1\x8f\xceW\x0f\x87\xa0\xcd\x04\x08m\xdd{t!\xff\xb2h\x0f{\xdf\x46\x17I\xbf\t" "\x8e\xa0\x11\xbbV\xber\xd8\x00O^\xb2\xfa\"\xab=@]\xe2\xdb\xfe\xd7\xf9\x96\x15\x1d\x97\xf0\xf3\x17\x0e\xad\xf4\xbb\x44x\x98\xe8r\xb5" "\x61m\xed+&\xa2r\xb5\xb9\xaf;\xf3\xda\xfc\x92\x1c@\x1b\xe6\x8a\x8d\x93+\xf8\xe4\n\x63\xfe\x41l\?p\x95\x1c\xb5\xb3\xc7\x1d\x8e\x18" "\\\xb1\xf4\xbd\xc2J\x11#\x07\x8b\xae\xd8)\xbdR\?\x33i\xd8\xdb\x04\x9f+\xac\xe4((i\xc6Jv\x97/!\x46\x99|\x62\xae\xf3" "\x42\xbcMWlj]\xb1\xa7t\xa5\x45\x0e\xaf\x94\x9d\xd2\xabt\x10\x61\xfd\x90\x98\x93\x08\xa3\xd6\x11]\x61\x84\x93\x91\x7f\x9a\?\xbc\x82\x36" "\xbc\x18\xd5X\x83)\xd3\xc3>\x46\x85M\xd9\x42\x08K\xef\x1a\xdcp\x8d\xe9\x1b\xfd\xa2\xa3Z\xbai\xb9\xa0\x86\xc8\x0cQ-\xb7`\x80\xc2" "\xf2\xab\xae\xb2\x41\xd2\xd5t,tt\x96\xdb&.\xd1\x35\xe2\xf0(\xeb\xa0\x8dK&\x95\xdf\xa2:\xdf*\xa8l\xeb\xad\xa8\xdeN\xd7\xaa" "\x0e\?\x7f\xaa&\xcb$UR\x96\xf0-\xbf\xe6}\x0b--\xaf\xe1O#,\x8d\xc1s\xfc\x15\"\xad\x08\xcd\xc3&\xba\x86O\xb8\xd0\"" "\x99\x08\xcbg \x9e\xc5\x35\xd6\xc0\x08\x1f\xce\x41\x0b\x9f\x61\x64\x02\xa9)\xdf\x46|\x06\xa8\xdb{\x8e|\xaa\x62\x01\xac&\x16\xc0\x8a\x39\xdd" "u\xfau\x63G\x08!\n\xa3k\xc4\x8f\x88\xaes\xdbiLh;v\x1a\x0bi J\xb7\xdc\xb6\xdd^\\\xf9\x99\x44\xa5\x93\x97\xbf\xdf" "\x0b(\x8b\x11\xa1\xec\x93\xb8\xbf\xdc\xd6\x89)q\xff+\xdb\xd2O\xb8\x8b\xfb\xc6\x8a_\xa1\x45 \x88\xea\x1c\x1e\xad\x63\xe9l\xc4\xe0~\x42" "$\x86\x32-\x9f\x14L\x8e\x05\xaa\x42,!\x33Ww\x03\x98sk\x11\xd6\xe1\x41#\xb4\xa0/\xc2j\x19\x63\xee\x62\xe2\xf5\xab\x63\xfd\x9c" "\x10o\xbf\x32\xfcu\xef\x33|\xdbL\x8d\xbd\xeb+\x0c\xfd\x98\x46\xda\xfe\x8c\xfc\x80\xa8\xc2\x9f\xfc\xe7\xb3\xce\x19\xcc>\xff\xbe\x1f\xcb+\x8b" "\x65\x85\xa2\xd0\xe1\xae'\xc3\x07\xd6\xb1ul\x07'|\xdf%\xdf\x9dY\x95K\x36\x45\x99\x97hTg\xd6RrT\xa8\x9e\xd6G`\x93" "\x64\xa2\xa5\xf7\xb8g\xf8G\x08\xcd\xcd'\xaag\xe5\x63\xbfz\x04\x07\x10\xbe\xe2Z\x30\x9f\x10\xd5\x31\x9b!\xc4\xf0\x44\x1d;M\t\x31\xfa" "T_\xd9\x8e\x61\x42t~\xeb+\x14\xb6\xf5U\xf3\x43\x1a\x63\xd8\xa6(\xd2-oV\x9b\xe7X\xf6#\xea\xb7\xeb\xe4i[\x88\xc0\x15u" "\x38\xee\xa5\xccG\x13\xc4\xc7\x15\x65S\xf9\x46\xf6\xef;\x36%s\xc2\nQ\xd4\xa3\x93\x39H\xcc\x31\xf9\x89\x38\xb8\x62\x9a/\xacr\xe6L" "K\x87\xd8\x93U\x94\x45\xf2Rv\x9c\xbaS\n* UL\x8a\x0e\xbb\x83\x9d\x64\x33\x06\x31\xa4\xd2\x81\x8f\x86P\x37\xeb\x1e\xc1\xb4\xf0\\" "\x46v\x9c\xd5\x44\xc8\x1e\x35\?\xc1\xd2\x15X\xe1\x89\xcdY\xca\xc8\x11\x92\x0e\xe2J\t\x1b<\xe1\xdd+\xd8\xfaur\x98\xa9\x93\xdc\xf3#" "\xf3\?\x16\x9a\x8f\x81\xf2\xc1\x99~\x1e\x61\x05\x85(\x64\t\x65\xd2}\xc5RxQ\?\xbc%\x14\x99\xc2-,\x64\x10\xd3\"\xe0*y\xd1" "\xe8\x0ft\xb4\xcd\x8f\x66\x82\x99\x11.&\x45\x0f\xb5\x93\x1e\"Q\xd3\xe3=\xf3\xe6:\xa1\x8a\xe5\x31\xf9\x8f\"\xea\x93\xb0\x8c\x1fOO\x8f" "\xc0\x8b\x11\xf9\xed\xd4\xd0\x34(\x41\xb9@\x02q\xa1\xf6\xdb\xecs\xaf\x15\x07\x16q`\xf1\xcf\x97U\xc1!\x15\x07\xceN\x82i\xfe\\\x61" "\xef\xbf\x42\xd0)\x37\xff\x7f\xbf\x81\xa2[\xcd\xf4\xf8<=<\rJ\xcf\xd8\n\xca\xf7\xb1\x85\xf2\xcdk]\xb1\x1bm\xca\x1d\x95L\x65\xe3" "\xfd`z\xec\n\xa8\x65\xd7M\x36G;\x88\xf5\x64\x0cK\x18M\xb1\x16\xe9`\x83\x0e\xe1\x07\xaf\x0b\x33\x66\x1d\xbf\x1d\xa1\xbf%\xea=x" "\x19\x8e\xb2\xbf\xa4\xa6\x9f\x8b\xc3\xfcJV\x8fj\xae\?\x1d\xc3\x13R\xcd/\xb0\xb9\xe9\xb9\tQ\xb5\x8c\xd8\?\xc0\xcc\xd5=\xcd\x1e^\x08" "\xb8\xdc\x08\xdf.\x9c\xe1\xea\x06\xbcp[\xcd\"\xfc\x44\xb6\xcc\xe6$\x06\xed\x95\xd9\xf2\"[\"Kq*\x45\x88+\xc3\x92H\xe1\x0eJ" "\n\x84x_gT\x38(\x1a\xfd\x87\x61\xb2\xc9\x64\n#\x8e\x34\xd9\xfe\x37\x65qj\xe0\xc3\xd8x\x08&\xcb\x83\xa2\xb7\xa3)\x0e\x96\xaa" "\x89\xc8s\x11}L\x8d\xe1\xe7\xf9\x36\xcb\xefp\xa4\xb4\x83\x05^\xea\x92t\xe8\x0c\xdf\x66\x0e\xc0\xce\xa7J\xa4\x1a\\\x36|\xc5\x9e\x31\xdc" "\xd1\x64\x00.\xaf\xc8g\xa7\?Z]K\xc7\xe7\xc8\xfa\xbd\x83H\x1e\x46\xc4\\\x17\xb3\x36\xc4\xfa\x1a\x31\xef\xf9\xed\x07\xcbO]\xacUW" "\xce\x9c:\x1d\x62\x0b#\x83\x42O\xcb\xd4\xa2\x99\x9c^\x06\x15\xdf\xb3\xdd\xaf*\xd9\x9d \x08$T\xe5\x94\xb3XP\xbf\x05S\xab\x96\xfe" "V:x\x08\xc7\xaa\xdb\xa9\xc5\x62\x80\xba\xfaY\xf5\x06\xae\xe4\x03\xec%\x06\xb5\xd3\xe2\x10\x9b\xa9\x93Q\xe1'\xd3R\x1f+(\xa0\xc6\xdc" "\x1b\x01\xea\xf3\t\x8b\x81\xa1~\xde\xb1\xcf&Tt\xcf\x01vU\xea*w\xb9V\xbd;N&t\xcd\x19\xe6\x37\xefw\\\xad\xce\x1e\xff" ",\x1a\x02\x94\xf6#{\xd9\x62\xc8\x86\x34\x8f%h\x8e\x99\x9a\x9f#n\x13\xd4\"N\xf6~\xa0\"{\xc0]\xce)w\x39\xe8\xc8\x90\x93" "\x46\x1d\x9d\x43[\x44U\xba\xdd\xe2{\xd1M*\x17 j\xac.g\x96\xbbI\x0f)\x81\xa5\xf0\xc2\xd1\xdc\x9fq\x32>r\x16\xff\x00\xd3" "\xc9]N\x05wYot\xb1/M\xd4\xe5\xb4n\x37;\xe4\xee\xd0n\xc2\x91L\xd4\x11\xae:;\xae:\x93\xe5O\xda\x89\xa0\xfa\xfc\xd6" "p\xe0\xccK\?\xac\xd0\xbb\x88\xf0 \x44\xdb\xa6+w\x97=nz\x0e\x41\xfc\x94\xa8\x8bP\xda\xc2k+;z\xda\xf7\xd8\x8f\xb0\x19\x13" "T\xef\x10K\x8a\xa1\x16\xe7\x85\xcf\xd2\x13\xee\xca\x64J]J\xd6*\x1f<\x16\xfen\xf5\x86\x9f\x9eV\x66_\x07\xae$\x8b \x08\x9c\xaa" "w\x1d^\xf4\x9f\x9c\xd7\xd8`\xa7\xc9\xce\x86\xa8w\xbd\x87\xb9\x7f\xed]\x7f,\xa8Y\xb2\x7f\"\xc7\xa0\x96\x1b\xce\xd5\xe1\x84\xdd\xbd\x1e\x62" "\x90*\x87R \xe4\xa7\xcc;Rj\x1d\xf5\xe8V\x43\x45g\x04\xa8\xf7\xa2Z\xe7r\x39Z\xf8;\xa9RV\x1b{\xf0!\x17\xb5[\x96" "\x42\x61\x85>\x44O\x63\xb1\x96#\x7fgl\xa5R\x9b\x43\n=\xa9\x35\xd3\x13i\x37#\xed\xfd\x9dK/\"\x8d\x85\x30\x44\x62\xe9z\xa1" "\xf9\r\xa2{\x98J\x86\x9f\xf9\xf2\x8ej\x94`\xba\x91&\x1b%\xaa\xd2\xe3\xc3\xa0jZ\x88\xd1m\xc0\x15&\xefUI\x86\xa4\xeb\x81\xa8" "\xbe\xc6\x61\xbd\xe2\xdf\xddL$\xc9\xe5\x7fW\x1a\xf5\xd4\x15K)\x0cwy\x81\x97\xden\xe8\xcd\x62\xdcK\x95\x14\xebk\xb5-/\x38[" "\xa7\xaa\xa4\x39\x94\xf5yM\xb7\x65Mxt\x9c{\xfe\xc8\xd2\xd6\x85\xeegqp\x13\x94\x64\x00W\x98\xeeW&\xbb\xbbl\xf2\xf4\x38\xc8" "\xaf\xf4\x62\x1b\x66\xb2\xbfWPy\xa9\xe3J=\xb1\x31\x03\xdfKGg\x92\xf4\xf0\x35\x16\x35\x9e\xa8\x0f\xe5x\x12\xd4W\x39(L\x8b+" "\xb5\x0e\xd9\xe0\xd3x\xef\xea\xed~L\x83\xfa\xd8\xfeW\xad\x1ax\xdfu\xc1\xc7\xf2\x18\x97\x85\x8dJ\xec\x18\xb6<\x92\x86\xc5\xe6\xab\xfc\x34" "\x87\xeez\xd9\xd6o\x32}\x64G\xa5\xc7i\xf1^vX\xcf\xe3k\xec\xd9 \xeax*\x05;\x87oU\xadz_\x41U\xda\xc9\xfc\x17" "\xfb\xf3\x8a\x92N\xc5:\x1bg\xf5\x85\x66\xd5\x08\x65O\xd6\xf8\xc8\x97O\x1c\x32\x11\x35)\xbc\x0cY\xf3\x31\xbb\xbd\x91g\x19\xfe\xb4\x39\xd7" "\x0b\xc0\xe4\xe0Z\xfd\xef\xa5\xb5>u\xffH\x0b&\xe8\xca\xd3\x31\xeb\xce\xa4:N\x0f\xce\xa8\xe6\xbaj`\x89:+\x1b\x9c\xe8\xa5\xbd\xf3" "\xfc\xc3\xfb\xec\xa5G\xff\x93\x9e.\x98\xefj\xb8<\x8e\xdd\xe8\xfaW\xdd\x64\x17\xad>S:\x9c@\xb5y,w\x45\x0f\x32Q'\x85|" "G_\x34\xa5W\x85\x92\x8e\xcep\xe8\xf0#\x39\xa8y\x05\xe9jVP\xb6\x38\x99\x1f\x1f\?\xca\xa5p\xa4\x8d\xca\xf3\x9b\x34y\xb4\xba\x87" "\xfb`//\x37\x92\xca\xf3\xea\xac\xe5*=\xbb\x0b\xaa~#\x0f]\xda\x1bP\x37\xba\x07\xa7\xa7\x45\xde\xbe\x97j\x85\x0e\x99R\x92n$" "\x9b\x31|\xe0M\xa5\x93Z\x41\xc9\x93\x08\n.\x06J\xdb\x41\x0c\xe5\xaaz\xe6I\x8b\xe9\xea\x94jK#;^\xa2\xec\xd1\x1e\x90\xf4V" "\xf9\xca\x9a\xbf{\xa8\x1b\xf2\xe1\xaf\x85\xb9\xf8\x85\x1a\xdd\x14\x9e]\xfeqR\xfc\xe6\xd7\x8e\x33=\xfa\xf2\xc6\x8e\xa8|\xb4\t\x1fsS\xd2" "\x64N\xd0\x44\x14\xd5\x90\xd4\x0eW\xf8\xf5\xa0\xcd\x10{\xbe\x1c\xc3W'>\xed\x9f\x1c\xd4]ii\x8c\x31G\xa8\xf5\xef\x88\x1a\x1e\x16\?" "\x1b\x1e\xb2\x03\xaa\xca\x36o\x9e\xba\x12\xb3\xf0\xcd|t\x19\xee=\x66\xfa\xc4((W\x1b\x1b\xfa\\\x31\x87!Jo\x9d\x03L\xbd\xd5\xd6" "\x30=\xf8TW\xaa\x66\xabP\xf4\xac\xb6\xacX\xef\xe0\x44\xab\xeb\x0fu,\x9en\xacUh,pJ\xbd\xb7\xea<\xe5\xa3\x88\xfd\xbf\x9e" "\x0e\xd6\xef\xed\xd2\x07\xf8\x85\xad\xd5\x97\xbf\xa8\xe6\x64\xff\xf5%\xb1hl\x42\x8bs+\x84W\x95\x92=\xeb\x17N\x9b\xbfp<\x92\xe1\xb2" "\x85\x18^zI\x37\x02\xd5\xc5\xd9\x36\x13u\xc5\x91\xd0\x17\xec:\x15\xbd\xb0=\xef.z/\xfe\x1b\xda\xb9\xbe\x8d\xdd\xa4\x83\xef\xcb\xaan" "M\x41yz\xd6\xa4\xd4\x35O\xe9N\x9f/\xf6X\xfdT\xe2\x11\xa7\x90\xc6\xd6\x8f\x8a\x38\xd8\?\xe6\x9d\x8e\x11\xdb\xceh[\x04\x9d&\xf7" "\x17<\xf0\x8a\xc0\xfb\x62\xee}\x80\xa5\xbe\x33\xff\xfaIl\x35\xa8([\xef-\xe4\xaf\xd2u\x61\x9c\xbc\x1f;\xb5\x83\x8b~\xac\xaa\xec\x65" "\xbb\xa0\xa4\xed\xc0\xac\x39\x46X\x11=\xa3\x65\xe3q\xba{\xe9\xe4\x63\x1b\xa7\x87\x31\xd8l\x80\xa8;\xc6\xe9\xa7\xe5\x96\x31\xe7\x0c\xc6\xfe\xfd" "|\xe7\n\x44\xf7h,o\xa4$\t\x16\xe8\xa9\xda#\xcf\xc0/~\x1b\xef\xda\x98\xd5\xc4x\xd5\xfav\x86=\x7f\x44=\x06\xfe\xcd\xa7\x19" "&\xd8\?\xfe\xa2\x63'_\xd9\x0fz\x39~\xd0\x35Q)M\x04\x9d-\xb3\x05h\x11\xe3\xa9\tm\x13\x1f\xa1m:\x13}\xd0\xcf\xef\x83" "~v\x1f\xb9\xed+\x66\xf4s\x8b\xc9{\xfd\x44\xbc\xad\xe8\x8b\x63\x36_\x1c\x08\xfd\xe6\x44\xcc\x37\x07\x10\x7f\xb0\xa9\x88\xd2\x92\x99K\xea\x8c" "\xc9\xc3]:\xbc\nj<\xe3#\x31\xe5+\x8c\xa1\x16\x0f\xcc\xe6\xaa\x34\xa0\x34^LUX\"Gs\x87M\x45S\x18\xb1\x34\x33\xbe\x43" "\xecLS\x1c\xfb\xfb\x61\x17\xeb\x07\x9b\xe5\n\xbb\xbc\x98w\x9e\xd1\x36\x0b\x10\x46\x87N]\xb9\xb6\xc4\x89\xe4*\xc8\xb9S\x0eq\x94M\x15" "_\xa6\x1f\x8e\xbf\xfe nN\xf4\x83\x08\x10\x30Q\xcf)\xfd\xdb\x1c\xe7\xfb\xe1\x38\xd1\x0f\xe7\x81~\xd8&\xfd\x61\xfb\x33\x62\xf1\x13\xd9\x9a" "\xc5\x17\x9a\x33\x10\x93\x00\x11g_#>\xbd\x08=\xde|\xd2u\x95\\\x8c\x38\xb0\x44U\xfcl\x38\xc6\xd6\x19\x91:\x1e\x91W$\xbf\x85" "!\xe4\xc8\xdc\xb6\x36X\xb6\x98\xf2\x1f\\\\\xae}\xfe#\x84\x10\x14.\xdb$\x34;\xc4\x11\x87S\"[\xbcv\x9a\xbc_\xba\xd2\x90j" "\x98\x7f\xa3\x62\x43*\xe2\x03\x8c\xe8\xdf\xad\\u\xca\xe9\xd7\x0bg;\"l\xf6\x11\xdcu\x95|\xfd\xd5\xc4&wj~:\xe5\x7f\xb6\x9a" "\"\x84\xd1\x10V\xdf@xk)\xf9\x0e\x44\xc9\x19\x12\x86yKI\xb7\x80(\xac\xba\x11s\xb8M\x1e\x82\xe8\x90\x45\x1c\xbe\x8c\x10\xd4\x41" "\x88\xc1-%'\xee\"v\xa7\",\xfc\x11\xa2\xe5\x1eqz*J#\xdc\x17\x07\x96#:Zz\xbd\x13\xb1\xb2T\xca\x9f\x62\x31\x91(" "\xb4\x9c\xa2|tG.\xc1IW\x9e\x11\x9d\x33U\xa5\xb7W\x41-\x97\xec\xbbGX\xa4%\x84\x9f\x87R},\x36\xcfY\xc1\xda\x81\xfd" "I\x41\x15\?\xb3\x00w\xd1\x82u\xe0\x82\x13rJ\x0e&.\xf8T\x95\xfa\?^\xca\x35\xf1\xea(\xf9j\xf8\\\xc5\x82\xef\xf5\x82\xaf\xc8" "\x82'\x8c\x99\x1d\x63\xce^\xc6\xec\xb4\xc5\xc9\xde\x99\x93\xc3\xf1j\x32\xed\x62\x0e\x16+\xc3\xa7\x98\xa4\x8a\xb1\x8f\x83\xd0\x62\xa0\x08\x1f\xb7\xc0" "\xe1\xb1\x93^\xc4q\x32\xdeq\xca\x15g\xcf\\\xd1\x65\x07\n\x8ay!\x66\xeb-\xa6\xe7l\xcc\xa9\xaa\xd8\xe2->\xd2\x8c@[\xae&" "l\xb6\x9cl-\xa8\x89\x35\\\xe1\xc0l\n.\x8f\xe4\xcf\\\xb1\xd6\x8fs\xb8\xd5\xc5Xug\xf4\x93\xeb\x9a\x36\xa6\x07\x0b\xa4\x18\x1b<" "\xcd\x37\xe1$k\xc4\xc6\xb2\x30g\x95\xb4\xd4\nJ\x37\x9f\xdes%\x0f\x34\xec\x02\x82\x03V\xb7\xc1\xb4J\xc9L\xa9u\x93\x93\xdd\xa0." "~\xb1\x8e\x0e\xca+\x44(k\xe1\x99\x89YY\x98\xee\x86SP!\xba^\xe1Xv\x7f\x89U\x42\x38\x66\x81\xbf\n\n\x33\x1b\xa6\xb0\xff" "[\xd8Q\x10\xc7t\xe5k\x84I\x1e; \x8f\xf2\xdf\xbb\x0b\xcb\\\x45i\xec\xbf\x9b\x82\x19v\xdb\x92\x03\xd1\xd8\x88\x95\xc8\xc6\xc2/\x61" "\x10L\xd9\x41\x8bLL\x8b\xbd`\x44Q\x32\xdf\x44\xdb\x45h\r\x15\xa1\xd5`\xf3Mly%\xb4\xb1K\x63\xe1\xaeus\xbb\xd6+\x1a" "\x16\xa6t\x1cj\x89\x94_\xfd\x1aw\x92\x1d\xe3\xe1_\xfc\xe2\xd4p\x31\x16\xecq~\xf4\x37]\xe4\xe5\x32\xe2\x37\x8b\x9a\x95\x35\x04\xb2\xad" "g\x30\xa5{\x16\x07\x35\x03-\xa6\xde\xfc(\xd9\xbf\x07m\x90\x12\x13\x9b\xa6\x92\xd6\xb6\x8e\x87\x98W\x95\x1d@$%\x33\xf3\xd1\xac`\x8a" "\xf1\xaf\x82{\x8f\x1f\x08\xaa\xba\x04\xad\xa9\xa9\xbcKv\x8f\xc3Y;\xafi\x63\x9e\xb6\x46Z\xc0\xed\xbe\x61\xa3\x41\x39\xfcHW\x01\x31\xad" "\x39$|\xdav\xeanq\x35\x8d\x91\x8e\xd9k\x39\x66;\x46\n\xc7\x17N\xb9\x83\xfc\xe4\t[\x65\xea\x81\x39\xf6m\x0cJ\xfe\xb7\x11(" "S\xe1\xfem]\xd9\xfaN\xd2\x8d\xdb<>\xf0\xb3\xa6\x07\xff\x31\xfd|\xbag\xe4\xee\xb1'\x31\x14\x9c\xa9\x44Y\xd5!\x94\x44\x35G\"" "\x37\xc3\xd4\xdb\xbf\x07\xd6y\x8f\x87\xd1\x39\x0e\xaai\x41\xf8\xfe\xe7K\xed\xfb\x82\xfa\xf7\x37\x45!H\x31\x0e\xdc>\xea.\xa2~\x1f:\xf4" "u))\x90\xf4z\xd8\x8f\xce\x8e\xa5\xc8\xb7\x66~^\x62\x83TS\x9ePh\xab\x1aQ\xe3\x8aY\x1fJ\xefxu\xc3_\xf2\x33\x34k" "!]\x9a\xb5\x64\xf8\x92\x35N\x31\x85\x88\x03S<\x38lk\x89\x61\x82\x82\n{\x7f\xca\xb1\xcf\x87p\x81\x93\x46v\xfe\xe8\x39;\xa8\xbf" "\xe9\xa1n\x36m{\x10\x16\x0e\xc3!u~\x94\x1dm:\x93\xf3\x83\xbc\xaay\x43[\x36\x1f\x91\?m\xf9\x04\xf1\xc4\xcc\xcc\xa4\xf8h\xe2" "\x81\x65\xe5\x06Z\x8a\x62\x9eZ\xee\xadT\xb3x\x33\x99!\x99\xb3\x8b\xa9\x33i\xe0\xa9\xeb\x86\xae\x1e\xfe@\x94\xf9\x9b\x19\x93\xd1\x39\xe6\x34" "\xe6Gy\xf9\xb0\xf0\xf2\xaa\xaa>\xad\xd5\xbb\xfe\x0c\xf3\x97^l\t\x0f\x38\xafu\x93\xd2\r<\x8e\x45\xdd\xe0\x15\x44\xe8\x7f#\x96,\x9a" "\xe9\x37\xa3\x9b\xbcl\xbe\xaao\x8e\xcd\xbf\xdb\x01\xb4\xe2\xfe\xe2\xdb\xf4\xa8\xebOP\x17\xfc_\xe2\xc4\xeaQ\xda\x0b\xa6\x46\xdf\x39\xbd\xa3:" "]\x35K\xd8\x90@\xd4u=k}\x66/H\xe1\xd5}\xac\xaf\xf0\x00%\x8c\xf6\xb9\xad\xc7\x35/\x61\x9ah^\xc2\x02^\x61\xef\x01\x1c" "T\xf3\xed\x1e\xcc\xe1\x37\xf6\xc0q\x93\x17UJ\xa2\x9f\xdc\xda\x87\x62.\x7ft\x9fk$J)=\xb6r\xa5\x84\x61\x8dy\x19\xbe\x8c\xf3" "\n\xe6\xa0\x84\x8br\xb2y\x03wtQK+\xed+\x88\x01.\xb4\xa5\xf4\x46\x8c/\x8bi\x1d^\xa1\xad\xbaQ\x8e\x9d\xe9\t\xd7\xec\x9b" "Z\r.`\xda\xc4\xb8\x12\xbf\x8c\x06\xa6\x11\xbd\t\x98(\xfb+Z&\x1d\xb5\x35\xce\xd1\xf1Y\xf1\x00\x1e\x92\xaa\xf4\x93\?h\xfb_\x1b" "\xcd\xb1\x62\x03\xca\x46\xab\xe7\x95\xd4\xe2\xb8\x08m\x07\x41\xe1uy\xd5\xbc\x83ys\n\xde\x1f\x80\xef\r\x10\xf5t\x05\xad\xf8y\x05\xde\xa7" "\x46\xcc\x96\xaa\xf9\xeb\x44\xa3\xddMl\xaf\x65\n\xed<\x33\xfd\xfe\xd4\xe4\xfd\xc1\xe5\x41\x18M\x92\xf1\xcd\xaa\xc3/,\xe4\x1d\?\x91\xfc\x82" "\x10\x8ez\xe0\x05\\~\x38S>\xa3\xfc\xf8\x1c\xb4\xc0\xbf\x46\r\xb2gk\xca\x45\x8dp\xd1\xf9\x64\x02\xf2\x81\xe4K\xfe\xd5\x12O\x61\xb5" "\xbd`\xf9W\x91\?M\xf6\xbb\xab\x86\x9d\xbe\xca\x1cU\xc5\x34\xb9Q\xcaV\xec\xbd\x33\xafJ\x0bP\xfb\xe8W}(\xe4\x01%\x1b\x0e\x66" "\xa2$S\x13q\x90`\xfa\xde\x35\xa6\xd0\\\x13\xb3\x35\x02\xdb\xa7\xe0\xa8\x91Nj\xabW\xbb\xd8S\x9e\xf4\x14\xbd!\xa1\x14\x0ex\x02^" ":\n\x1fYI\x9e\x62_\x1a!j\xb3S\x66\xe2S\x04\x65\x33\xa2\xa7\x62\xa6\x06\xb8\xb1q\x1fQ\xb6\xfc\x46\xd8y\x85G\x83\x98\x8f\xfc" "\x1b\xbc\xa6\xa7\xac:O\x31~ \xb4\x88\x19\x42\xf3\x17\x9d\x9f\xa6\x1b/ O)\x64\xbe\x37\xd3\xb6`\x30\x13\x13s\x62n\x37\xc9Op" "\xef\x19\xc4kv\x8a\x80\xee\x46\xdd\x86x\xf7\xdd\x95\x0e\x82\xee\xf2o.'\xa0\xef\x93\x61\xa6\xdf\x42Z\xdb\x85S\x98\x98\x36\xf5m\xcc\xde" "p\x08\x45\x1dL\xc9\xdf\x8b\x33\x84\x35\x30\x95^,\x8b\xea\xb2\x13T\xb3\xed\x44\x1f\xcf\xcc\xe2\xa9\x9a\xed\xfch\x01sx\x0f\x97j\xa9_" "\xa4\x1b\xb5j\xe2~\xe1\xa1\x63\xc4\"\x33\x31\x1f\x91\xb6\xf9\x18\xa7\xc4\xce\xbc\xf3\xd3U\xed\xc3\xe9\x8f\x41\xcd\xc5\x03\xc6\x0eM\xe5\x9d\xae\x9b" "\x88<:\xf7\x8aT)\x85_\xda\x9a\xc8\xf5\x65;\x63x\xd5\xe3\xf0\xe5\x1b\x9b\xb3\x35\x36okl\xca\xd7\xd0\x9dV\x36\x42\xb4vU\x1d" "\xa7\xce\xef\x8fJ\x41\xcd\xba\xf0\xeev\x95\x97\xaa\xae\xe4\x95\xc1\x94\x80\xa9l{\x13]\x13\xa8=/\x0eM\xdd\xec!\x9c\x16\x94\xc7\x63\x31" "\xb5:\xdf)\xfc\xdd\xea\x66\x99\x8f\xb7\xa1l\x14\xd9\xa3\xff\t\xcd\xffU\xf8\xb8\x95\x8e'\x98\xda\x11\x35\xbaw\xea\x38(\xba\x1f\xaa\xd4\x99" "{x\xe4*\xddz+(\x8d/\xb9\xfe\xa6\x86\x93t\xa5\x01\xc6J\x05\x95\x1eT\xc3\xef\xff\xdc\xe6_\x13\xcc\x19\x88\x8a\xb7\xf5\x33\x1bq" "\x80:~\xcf\x97L\x8d\xb8V\xf8\x0c\x41#\x8d\xe6\xf4\x12\x15\x14V\xc3\xf8|\xad\x31\x39}\x82\xdb\xbe\xa9\xb4Qg\x93\x43Uv\xf7\xfc" "\x8f\x8a\xd8\xd1\xa8\xa5\xe7\x65\xdd\x93\xd1\"\xd0\x8a\xba\xec\x14\x9e-\x8b\xeb\x1a\xe2\xa3\x18\xe5Z\xe1\x1d\xe0\xca\xaf\\U\xa9\x8fU\xc3\xa2\xfc" "\xec\xcd\x86\xce\"/o\x0b\n!>]\x65\xfdQP\xd2\xfa)|\xd6<\x0cj\xb4Y\xfc;)\x07/\xce\xf2\x0e\xf2,\xfa\xd7\x42\xde" "\x9dP\xe3W\xda\x8e\x03\xae\x30nK\xf5#\x37\xef\xaapVU\xd7\x83\x64\x31v\x95\xdd.\xe4\x1f\xd5Gz:\x45`TQ\xad\x07\x9d" "\xb3G\xa3\xa1\x86\xa0\x82\x46\xb6\xe6jR\xebh\x06G\xcf\xae\xc6&\xba\x12\x8bO\xcd\x94\xa7\x9c\xde\xd5\\!\xe4\x9c\x98h\xf2\xd7\xe0\xbb" "\x66\x94,\x9f\xda\xb8\xba+\x7f\x01\xd4gx\x1b\xa9\x0c\xd7\x36\xe1\x17\xae\x9e]\xd8\x9a\x9fv\xf5H\x17\xec\xf9\x35\x66\xd5\x84s\xeb\xad_" "\x63\xf9\xa5\xd1\?\x12\x93=t\x33} \xcf\x94\xf4\xec\xf3\xc9\x80}\x66;\xb0\x36\xb3\xdd\xfe\xea~\x19\x94Mn\x98\x99[\xd0\x11\x98\xc3" "\xae\xa8\xf0GG\x1d\x32v\xfe\xcd\xcer\x8b\x13%\xca/\xe2\xe4Jz+\xd8\xc8V\x94\x85\xfd\x10\x9e\x1f\xa6\xd3\xa9\xfc\x0f\x35\xd0\x93\xa5" "\xef\x63\xaaV~\xdfI\xf6\xdaP\x36\xdd\"\x94^\x9a\xf9\x46\x89\x89\n\\\x99\xf4\xae\xdc\x94g\x92\xd9^\n\xaax\xf5\xe8L+\x13\xdb" "X\xc3\xcc\xacgu\xfbu\xba\xd9\x05\xb7\xdbN\x38L\x9b\xe9\x7f\xa0\xe6rw\x85\x1aXU\x88zn*\x9fp|Y\xd4\xd1\x8d\x13\xeb" "\x16\xa1Z\x17N-\x8el\xa5\xb3(\x1b\xb4\x16N{\xe4\xd4\xa9S\xb3\xa8{\xaf\xb1\xbeL\x88\xb7\x44)\xff\xe7[\x1f\xaeX{\xd0\xe4" "\x18\x8e*\xb6\xf8\xae\x31u$\xeco\x38\xff<\xd0+\xd4\xa2\x89\xd1\x35S\xd2\xe7\x66ikj\x97\x0b\xae\xa1\x0e\xf6<\x1b\xaa:\xdf\xc4" "Zx(>\x06\x35\x7f\?\xb0\x0c\xd6\x94\xbd(\xcd\xa0\xa4':=\xa0\xe2%\x0c\x90\x05\xb2\xf9,\xdc\xed\x12\x39\x99-\xa9p\xbf\x39\x1a" "\x16\xca\x42n\x11\x95\xd6jn\x86\xbf\xb1\x45\x7f\xc6\xbfy\x1b>\xdeP\x8b\xe6\xaaSv\xa5\xbb\xeb\xf1\x42\xf2\x0eR,\x1f\xcd\xb0\x05\x93" "\x98\xbc\x41\x61\xd8\xaa\x0fJ\xde@\xe6\x14Q!\\\x93\xa8\xef#'\x46\x14\x61\xee\xe0\xe7\x31pk\xf4\xe7\xe3\xf9j\xb5\x8b\xd3\xad\x1av" "\xfd\\]\"\xb4]\x8e\x8cX\xbb\x65&\x87\x46\xea\x81h\xc3\xd6\xd9\xc6\xf6\xe2\xa2\x8eUo\xf3:\xef\xb1\xce&J\x9dM\xf6\xfa\xea\x01" "\xdf[uZN,\x93\x99\xdf`|\xd8h\xff\x1fS\x39\x19\xb6@\xcd&h\xebz\x84\x16\xb4I\x89\xcfy\x8d\x37\xec\xfb\xddp\x38\xe3" "\x06\x33\xad\x1a&\x15\?\x84\xb1]\xe5=\x88\xd6\xba\xf4gO\x9c\xf9\x62\x84\x85\x19\xee\xd3\xa3\xac\x91\xd7 \xca\x19%[\xa9j\x32gy" "[\xff\x06S\x8e\xcaG\xf0\xf4\xda\xc9\xc6\x87\x9a\x88\x35'\xa6\r\xea\x0b/q\x87\xec\x1f\xde\xb0\x0bp\x93\x98\x93\x8eGP\x15\x62xO" "\x99ol\xe7\x16\x13\x44T\x8f'\xc6\xb3\xb9\x61\xbb\xfb\x86\x9d\x46!\xef\xdb\xdc\xa5\x8d\xd8\x84\x04&\xda\xd9:Lk\x9e\xc6u\xa8\x11\xef" "k|*\x95>\xdb+\x37,\xf0o\xf8\xaa\xdd`\x05\x98\xf0\x97\xc7mh\\\xb8<#y\x65\xf1\xb6S\x1d\xbdl\x45\xda\xfc\x06\xb3\"" "\xc6\x64\x80\xc4\x66K\xfe\x86\x8d\x97\x1b\x84\xe3\x11\xda.\xe5\x42\x34\x1co\xd8#\xb8I\xaf\x91\xeci\x1d\x37\x81\xd5\xc9\xca\x16\x38\xe0\xe7\x03" "\xfe\x9d\xb9\xb8\xf8\x46\xf4J\\ \\\xff\x85s^\xd2\xdc\x8aV\xael\x10J\xb9ww\x8b\x39uUxLY\x03\xbf\x82\xadQ\x84]" "\x9c%{\xc2Y\x11hp~\x03g\x46%\x92!\xdf\xbcq\xae\x36*X-$\xaa\xcaO\x31\x9ay\x83\x65\x87\xc2G\xfeu\?\x90\x65" "\xd1\r\xdf\x36\x65\x88\x66\x61*\xd9\xdfK\x0e\xea\xb6\x80\xe1\xd8_\x17\x0b\x89\xe9\x63\xe5\xa6\n\xdf\x1f\xac\x8f\x32\?\xa8\x19\xea\x1aS|\xe8" "\x66V\xdd\x64\xcdI\x93\x8d-\x1f~T\xfa\xeb\xae\xcd\x9c\xbdO\xec\x64\x00U\xde\r\x66\xf8\xcd\xa1\x64\xb1\xbc\x7f\x10\x14\xc6\x07\xd5\xf4," "\xa1\xa6Ox\x41\xdd\x9f\xb8\x99\xcd^\x42j\r\x87\xd2\xa6\xc0\xbc)\x94o\xcb\xa1\xea\x03\x1c\xf1\xd2\xf8\"\x61g%%O>>p\x16" "\xcf<>\x08\xe9\xff\xce\xf4g\xd1\xc6\xbe\xe3\r\x07\xcdn\x34<\xe0\xee\xf7j\x03\xd9\x46\xe7\xca\xb6\x17~r\x1d\x07\xc3\x80\xda\r\xb6&" "\x16^\xe0\xfa\xb0\xa0\xc0\xc8i\x86\x1b\xec\xd7#\xbc\xe6_\x37\x90\x31\xe1Y \x44\xcd#\xe4\xa9\xbax\x42\xabG~\x0fS\x01\x37\xd8\x8b" "x\xdeH\x36\xed\x85\xb8\x63\xb1{\xc7~\xff\x1d\xf6\x12\x30\xf2\xc9\xaa\x99\x1f\xbd\x63\xc9\xd3\xfcN\n\xfe\x82\x82\xc7\xf9\xfc\x0e\xfb\x02\xce\xef" "\xe0##\xc4\x65\xdd\xad\x16\x31\xd6\xbb\xcf[\x1c\x97h\x61\x9f\x44\xe5\x12\x44}\xd4\x42\xa0m\xe1y\x0f\xb4\t.\x61\xe7\x95\xb5\x66\x0b>" "\xad\xc6\xf5\xb4\x8b*\xac\x8f\x87\x32\xd7\xbey+\xad\x7f'\x1f\xd6\x66k\xb1\xed\xc6\x88\xbb\xf3\xb6\x8e\xe6\xc6\xfbI\xa3\x41uL\x96\xc8+" "r\xf6\xb7\xf8\x64\x96P%\x8d\x07\x66\x88\xf6\xdfo\x9b|t\xaep[m\xde\x8e\xb4\xf7:\x64\xd7\xc9\x34\x36\xd3\xf6\x16\x12s\xc1\x1f\xb5" "\x15\x0b\xf3\x36\x96\xd1\x19\x35\x9c\xa4\x85\x87\x12\x65\x8b\xea\x84\xfb\x33g\xf1S[\xb9,\xb4U\x19\x46\xa6\x9d\x99\xd3G\x37\xd3\xe6\x0c+\xa6" "\xa0,\x9a\x92\x99\xd9'\xd7\xaa\x99\xca;\xbb\x19\x9e\x99\xa9\xc5\x04\xa6M\x8c\x1a\xb1'\xa9\x98\xb6\x34_\xf9\x03Vq\x33\x89\xadYS\xce" "\x9d\xd9\xc5\x97\xa7\x64r\xd1u\xf2\x35j\xb3\x1al\x63\x61\x9f\xb0\x33v\x86;\xe9\x8c\xb3\xc1\x19L\x8c\x1e+\x39\x1a\x62\xa6\xaf\x43\x82\x9a" "\xcf\xddTw\xe8\xd1$\xa8y\xc5M\x36\xa3\xcc\xf4\x80\xfe\xa2^\xce\x9c\x9cxl\xb3^m'\xc3ZZ\xee\xf9\x83\x65\x93X\x99\x0cy" "k#\xa6\xeeh\xee\x64\xaeV\x33\xfc\xdeh\x0e\x7f\x11\x31-\x90\xa0\x31\xa4\xc5t\xe8\x0c\x8fn\xbe\x01\xc6\xdbX\xd4:o\xc3\xb1@\x88" "\xf6\x9f\xd2SJ\xf7&\xf6\xadR\x44\x61\xeaQ\x88g\x84p#\xca\x37\x12\xcfR\xfe\x84\xdc!\x91\x11\xb1\x1eQX> q\x13\xe9\xd9" "\xc0)/\x12\x1c\x44\xa0^\xce\x30\x41\x0e\xc5T\x15\xd3oP\xcc\xd5\xc6\x05\x42\x06\x8a\xc2x\xaa\x92\x45\x9d\x99h\xe7\xb4\xd7\xad\xfavZ" "\xe3\xed\x35y\xe1\xb7\xbc\xc0\xdbQ\x32\xdf\xc9\x30\x10\xdb\xc6\xae\xcc\x46On\x35gU\x37\xb3\xdan\xc1\x0c\x97\xd7\xc6\xf3H_v\x9c:" "\x61\x8a\xba\xaa\xcd\xc6\x42\x9b\x63\xdc\xed\x0c\xe3\x95m\xec\xbfh\xf4\x13\x89\xe9\xbf\x9b\x1d\xec\x61Q\xa3\x98\xa8\xd9\xdb\x08\x38\"\xe4\x45 \x00" "\x86\xb2\xe5\x94wj\xb5\xb1\xb9Vt\x1a\x32\x85=\xb7\xcc\x94\xf7\xc9\x9f\x10\xc7\x19\x94\xab\xeb\x38i\x7fQ!\xb9\xb2\xc7\n\xa2\x83\x89\x89" "\xa6z;\xc3\x1c\x43\x1b+\x82\xb5\x0bSq\xcaO{^\x86\x03\\\xe8\xe0\xb4-\x42\xfe\xd1\xda\x94\xc7\xbeHN\"\xf8\xc3\xf1\x18#\xdd" "\x9a\xfa\xf7\xb3\xf5\xe4\xbe*/\x88\xd5\x1c\x95\x10\xf7{\xde\xce\x0fq{l\xe7\xb4\xfd[\x1c\xa4isr\xab\x9d\x0fG\xe4\xd8\xe9\x39N" "\xcc\xc2\xeb.\xca\x1f\x86\x9a\xebw\x9c\xf5\x7f\x1b\x61\xe6\x94\xb7N/\xbe\x39\xe0\xd2\x0e\xe7\x1aM\xfc\xf6\xcd\x0c\x9f\x16\xca\x1d\x1dxi\xf0" "ZGx\x0c\xf9\xf8\x92\x44\xa1\x91\x7f\xe1\x61q\x66\x41\x99\x94*\x9e\xd1T\xf1-Vs\xfd&\x41yy\x04\xc5.\xa4\xa9\xf7-\x37\x0b" "\xaf\xbe*\x0f!WP\xff\xfe\xde\xba\x87i\xea\xe9\xde\x0bHQ^J\xa9\xc9\x9c,\x66>\\&\xdd\xf0\x41\xfes\xcb\x41\x41U!\xae" "\x37Uk}\x8a\xa5\x93\xadN\x33\xd1\xecS\x33<\xa8\xe5\xd2\x0b\n,OR\xe2\x39\xfb{\xa1\x99\x94%\xa3\x98\x85\x1b\x10\xe5\x7f\xbb\xc2" "\x00\xa9\xd2\xcf,\x66\xf8t\xb3\xe4Lv\x9f\xd8/\xa3\xe2\xdcO\xdb\xef\x43\x43\x38\xb3\x96\xd7h\xb5\x95\x1a\x9b\x1d\xa6:\xe1\xbb\xebS\x9f" "s\x8c\xa2\x8d\x65\xa0\xc2\xda\x90\x8c\x9cI\xf7\x1dN\xe4\xa6\xd4\xe1\xba\xc4\xef\\\xf3\x34\x0f[\xa4%\xd6\x03\xab\xa0\x87\xc4\xb6\x80\x9dw\x35" "\xaa\x16\x46\x8d\xbb\xd2;\x46 /\x35\xef\x9d!\xf8\x37\x15\xb7\xbf\x99s\x99\xa9\xd0V\x45\xce\xbdQ\xd2\x45\x90\x7f!\x86\xdc\xba\xf2\xba\xe6" "\x93\x1e\x42\xb3\x89\xaa\x1ci\x90\xf3\x65\x93\xaa\x43\xe2\x12\xf8H\xbb\xec\x17\x33 \xa5\x31\x19~\xc2\xbb\xce\x15{T\x0c\x8d.\x1c~:\x39" "\x7f\xd7M\x30\xb7\xadL\?\xea\xd2\xf2M\xe5\x9d\x46\x03S\x8f\x61\xf7\x03\x31\xe7\xe7\xba\xa8n\xda\x82\x42\x17S\t\xe7H\x33\xd3m.:" "\x35\x95\xefO\xd8\x11\x34U]\xa4\x9f/\x41\x9d\xc5\xfeM\xc4|\x14\x62tH\x38\x07Q\xd9v\xd3\xe1\xb1\xd3S\x13\xa6\xa7\x43\x8a\xee}" "\x17\xbe|\xf3.+\x8a.\x07\xdb\xba\x99\xc5\x91\x16\xa2\x1eP\xfa\x9f\x66\xb5Kg\x36\x19\xc9\?\xaa\x06\x88\xf1\x80.\xcb\xfcn\x36\xd0\x1d" "\x96\x38r\xa1*\xbd\x1a\xb8\x62\x8e\x14\xe2\x11\xe6;\xa7\xf2\x05\x98(\x98\xbb\x08V#\x44\x9e\xef\"\x8e\x85\x10\x9d\t\x65!\x0fp(G" "wuU>\xc2\xb9X\x88\x01\xc6GN\xa7)\x99,j\xca\xdb\xb5\xaa\xef\xae\xf6O\xf3\xbb\x92\xf4\xdb\xf2I_\xe7\x7f\xae\xcf\xd9\x9d\xb3" "\xaft\xfbR\x32\xff\xcdn\x34\xf8\xf8\xe0\x91\x83\xd3\xebO\xfeslz+\xe7T\xc7/\xdb\x89\xb3\xf0\x89\xbcG\xc9\xc1\xf4\?\xa7\xb7\x05" "I\x42\xb4v\xddg\xed\x31l\x07\xe4\x66R\xf9(*\x34\xeeT\xa5\x1b\xb7\x9coT\x85\xed \xd6U\x9d\x1e\x0bQ\xacUM\x9c\xea\x05" "\x88R\xf3\x85\x05\xc8KX\xeb/&\xfa\xd5/X\x03*\xc4\x88\xb7\x32\xb9\xdc\xe3\x80\xe0\x0b[\xd4/!\x06\xb6\x98\xfe\x91\x45\x14\x34\xf2" "I\xbf\xd0\xe3\xe5\x05\xf1w\x84\x17\x31\x07\xd4_\x10\xacU\xf9\x06\x9aw\xe9\xfc%\xec\x45\xa5\xe6\x18\xc4\x64\xfb\x0b\x9b\x05/p\x34\x15\"" "\xd3\xbcH\xf7\x00\x44u\xfc\x92\xbf\x9c;\xfd\x42\x38\xbc\xa5\xe4;\xad\x66\xf8\xd4v\xc4\x10\xda\x1e\x02\xf3\x17\xf8&\x1a\xfd\xe6\xd4M\x11\x95" "\xaa\x99\xae\xdf\x00=\x96\x9f\xec\x86o\x1c\x1f\x66ooX\xe9\x98\x9d\?\xe2\xd8u\x39\x43" "%>\xc2\xee]\x42\xccR\x8c\xd2\xc1\x89\xa4(\x16\xe5\x8b\xe2\xbd\x65\x07_\xce\xa4\xfb\xca\xd2\x64\xe4\xf7\xaa\xde#\xf0w\xa3\xc9\xb7o\x94" "\x61\xae`TH\xa5l\xf6)\xd7\xf2\xffnG\xe9\xad\x95i\xa3\xbcL~\x35\x38\x9c\x30\xd2}\x19jm\x8e&\x8f\x10\xc4G\xb8\x7fR" "x\x9a\xab\x07{_\xc7\xd8\x07R\x88\x41z%/o\x8c\xe5\x0f\x42\xe4\xb9\x31\xfb\xe5\x63\xfay\x8e\xe9\xf4\x33N\xda{\xfc\xad\x31\x1b\x62" "\xe3\xf4t\n\xdaR\xa3\xf9\x18\x91\xab\x8c\xac\x18\xc6\xd8%g>\xce\xef;N\x04\x97\x10\x13\xa3\x80\xca\xb0\xfb\x9e)\xff[\r\xc5\x87\x17" "g\xcc\x46\x15\x83\xa4\x08\x31\xe4\x34\xc1\xc2\x82\xf9\x84\x37\x33\xf9\xb3\x10\x43\xc2\x45\x1b\\v\x9c\xac\xf5}\xaa`\xc2\xa1\xef\t{\xf1\x13\x36" "\x61'I\xaf\xe2\xe4\xaf\xab\xb9\xban\xf1\xb2&\xc9\x13\x89V.w\xbd\x17\x1e\xe2Z\xd2\xa3.\x88Y\xe6\t\x07w'\x9c\xd1\x9a\xb0Z" "\x9d\xb0\xa8\x98\xe8 -\\\x62\xcc\x44\xe5;\x61\x9d\x39\xc9Z\xcf+\xdbO}>\xf1\xcb\x61\xb6\x9b\xe4#k\x14L\x10\xdd@xSq" "\xea\xea\xfe\xd9\x45P\xbc\x02\x31\xfdG\xd9\xbb\x9aH\xedh\x1b\x92\?\xbaJ\x86\x63\xec\xba\x34\xff\x66\xa2~\xff\x45\xdb\xce\x64\xd0\xcd\x8f\x1f" "\xa1l\xeb`\xa5\x65\xb1\xeft\xcb\x92\xe1\x1bK\x35\x8d\xf2\x95\x04\x03\x7fT\xd8\x94QT\xa3\x46'\xa6\xef\xd5\xdc\xca\x9b)\x87\x90\xa6\xc9" "^\x17\xc4\xa0\xd1\x94\xd9q\xca~\xd8\x94\xd9r\x8a\x65W\x42\x8b\xce#\xc4\x18\xbf\x32\xfc\x89\x98\x95`\x32\xf5\xa6\x1cI\x9e&\xb6,H" "\x88\x61\n\x61\xdb\x99\x0e:,%\xa6\xe9\xfe\x19\xa2\xdd\x89\x89\xe7\xab\xe4\xb8\xfb\x34\x9d\x8e\x9c\x88\x82\x36\x9f\x66h\xbeN\xb3\xc6\x04l\x1e" "&\xd5*\x9f\xea\x34\x9b\?;\x13\xe9\xd8U\x06\x41!\xf7\xa9\xc9\xfc\x34\xcd\xb7N@\xfe~\xbe\x1b\x83\x16\xf3_\xf9\t\xda\xea-!\xde" "\x91)\xd6\x11\xce\xa7\xab\xb3\xe7l\xf2\x80}\x62\x44\x61pV\xe9\?\x80\x05\xc4\xc2\x07\x1b\xab\x98\xb1\xf6\x99\xd1\x89\xca\x82I\xa0\xef\xae&" "\xd3o\xc6\xd1h\x65\xda_\xc0\xb4X.\x46\xde\x87\x9a\xebq;U\xe1\xcf\x9b\xa5\xd5\xf5\x06M\x9c\x1c\x61\xf5\xe7s\x0e\x65\xce\x39\xfa=" "Gtt#\xe2z\x8b\x89\x39\xfd\x39g\xb7\xe6\x88\x0b.\xac\x1e\xb0\x89\x34gy\x35\x97V=gn\xe7\x88\x16.\xb4\xd0\xba\x42\xbc\x1a" "\xf3t\x7fK\x43\xb4#=\xe7\xfe\x1b\x42\x8b\xd0\x89\xef\xa6\x8d\xa5\xae\xea\x1c\xe1\x0c|\x93\xe6i{\n\xda\n\x36\xe1\xd3\xbd\x1d\xfd\x81\x1a" "Ot\x03Y[\x61\x0b\xf5;\xc1Z\x15Q\xf3=\xf9\x0c\xfb\xfd\xcc\xe7\xf4\xdd\x99g\xe5\x43=j+VU\x45\xd9\xd9\x36L\xb8\x65\xcc" "\x39\xd6\x32\xe7$\x94Rw\xb9\xa1\xc2\x9a\x18!O@\x7f\xc1y\x0eO\xac\x39\x07\xfc\xe7\xab=\xfd\x99\x0c-\x83\x39\x9f\xff\\\xf7\xc5\xd9" "\x38\xf1\xdb\xa7\x03\xd8\x9c\xed\xe5\xb9\xd4\xec\xe9\x66\x95\xaf\xeb\"\xd9\x88\x9cl\x34Z\xccS\x8c\x10\xd1\x94j\x0b\xb6\xd4\xce\x85\xc3i\xf9\x41" "*\n\x66\x90\x85\x34\x14V\x8f<'\xc6\xca\x16Y\xb9\x01.jL-\x9a\x1a\xb0\xca\x96\xce\xd9\x01V\xcf\x34\x0b\x9f\xe5\xe7\xd6Z\\\xf0" "\x0e\x94\xeb\xd6\xecZ\xfd{\x1d\xba\x9f\xcf\xb2\x8a\x45\x31\x8bm\x84\x91\x10\xf6N\x41\x9b{\\l\x63\x1cRh\r\xd3\xc5\x36\x62\x9e.\xf6" "\x10\x97Rh\x05\xa8P\x43\xcb\x33j\x94*]!\xef\x9f\x61\x81\x81\xb0\x34\x01-\x18(L[\xae#\x1c\xcf\xd1\xd9Z\xec\xa5VM\x19" "\xc3&$\xa2\xec!\t\xdf\xb7\xc2\xee]\x8b=<~\xe1h\xa2-\x82G\xbd\xb3\xc5\x61\xa2\xb1\x17\xec\x0b%\xbc\x36\x46\xdd\xc6\xcc\x66\x39" "L\x61\xe6\xd6\xcc\xd5\xeb\x35:\xc2\xa2l\x18\xda(/\x1a\xc6R\x45-p\x12\xcc[\x1b\xb3\x08\x7f\x80\xb6\x83\xf2\x1b\xb4\xde\xb8\x31{\xff" "\x84Y:\x95\xa6\x37<\xf3\x44Y).\xb4\x95#\x42\xab\xed\x16%t\x17\x84\xb6\x14\x7fQ\xc2\x82G\xe1\xe2\xc1\x19\xd6(-J\x18\x1c" "\x10\xde\xe9zP\xec\x00'\xaa\x8d\x9b\x46\x1fjQ\xc2>\xf6\xc2\xb7\x37p\xd2\x06\x17\x43g\xa8.\xa1\xda\xb8}&k\x89\x17-Iw" "\xa8\x31\xfbm\x02\x66\xc1\x30\xfeJ~j\xd3\xfd\x0b\x06\xc1W\x9e\x92}gv\x31\xa6\x39sj\x44!s\xf8X\x30T\xbdp\xceo-" "\xca\xc9\xc1>\x36\xc7Y\x30\xda\xbcQ\x1b\xf7\x9d\xb2+T\x8cj\xde\x1a\x93\x8d\x12\x39\x07w\xb7Q\xd9\xab\xf9\x8a\xdaO\xcf\xbcG>;" "\x31\xe8\x65\x66\xf0\xe1\x11u\xb8\xa5\x31sv\xfb|\x45\xca\xe8\xf2\t\xcd\xff^X>v\x62|\xcbLT\r\x62\xda\x1e\xb3\xc2\xea\x81:" "\xca\x9f=P\xb5\xc0\xd3\xa7\xf4\x93\x87\xac\x19&\xbc\x8a@\x9bT\x11\x36\x91\x1a\xc9-o\xefn\x0b\xec\x8c\x9d\x1a\xa1\xdf\xeaWS\xe1\x84" "\x9d\x31\x46\x41\xc5\xec\xf2\xd2\xbb\xae'\xda\xe2\xb4\xb1R\xaa~\x38\x43w\x92\x0f\xbb\xe8\xbb\x89\x1a\x31\x99\xc6K\xf9\x42Z>K/\x98," "\xef\xbc\x8c\x1f\x46$\x10\xd3\xa6@\x84\xbfL\xed\xdfI\xc6g\x1fR=\xc2\xa3\x86;\x93\x12\x7f\x02W\x62\x63!\xe9\xd5U\xc8:\xbe\x62" "\x1e\"\x91\x31z.<\x41\xe2\xa7\x17\xdfh\x38\xa9\xb9\x94G\xa4{v\xcfZh\xe5-\x18z\xc1\xe8OWM\xdb\x0b\xd7L\x66q\xa9" "_q;\xa9m\xe7#l\xef\xa3\xbd\xac\x66\x05\xbc\xc7sO{\xc8WX\xca!\x94n\x19\xb3\x00L\xf8\xa9\xa8\xea\x93\x13O\x92\xf4\x03" "\xf7/]Op\xc2s}\x9dK\xc3gu\xbe\x01\xf5}\x80\xd1\x1f\x31\xa7\xcf\xce\xf4\xf3\xcbM\xf4\x1c\xc4\xc4\x1b\\\x86\x37\x8bp\xbbO" "\xe2\xc9J\xdbku\?\x43T\x11Q(\x63\xcaY\x8b\x7f\xf5\xf0\xe9\xf9\x11\x1d\x17\xe1\xf3\xcc\x99\xff|\xfe\xcd\xef\\Ig\x97\x85m\x39" "{\xc5\xb3\xf2\xd7V\xa8s\x91LqQi\xb7\xb4VZ\xd8\x66\xbck\xcf\r\x42\xcc\x83j\xfc\x66\x9b\xfd\xb4\x63\x61\xab>\xa8\xef\x0e\xf6" "\x46\x37\xb5\xba\xfe\x46\x8c\x45Uo\x9e\x9d\xb0\xeb\xdf\x82\x91\xdf\x17\x65O\xb5|{J.\x9c\xe8\xf5\x98\x89\x96\x98\x98;x\xe6h_\n" "\xab\xfc\xf6\x15\xf2\xbe\xc6\x02\xe1\x83\x15\x33\xfb\xbc\xc2\x08\xa6(\xbe\x38\x42\x7f\x0b\xe1\xa9\xac\x44\xa6\xc9'O\xe8\xaa\xa9\xf9N\xfe\xc2\x01\x45" "\xcc\xf8\xc7\x99\x1d}\xc3\xc5{\xc1x\xef\x46\x7f\xbb\xc4\xf4\x9c\x1e\x46\xe5\xc5\xbc@*\xadl\x63K\x63!\xed\x30\x97\xaf\xac\x92\xf8\x31/" "\x04\x85\xa1\xe9\r\xd5\xed{^\x87\xd2\xb5L\xd5\x89\x1f\xf8W\x65[\xc3`\x32\x17\x8a\x89\xb1\xf3\x85\x45{\xafth\x1e\x90\xa7$\xca/" "x:\x08\x1f\xaf\x9cZ\xa9\xc4H\xbf\xd5\xf2X\xfaHh\xa0/\xb8pG\x88\xaa\xa5\xc2\xaa\xa5\xc2W\xbe\x92\x1cw\x41\xbcq\x15\xf8\x80" ");\xa0\xf5X\x85\xd6\t[p\x1d\xcf\x82\xebx\x84x#\xb8lG\x38\xdcu\x86S\x0ew\xf9\xc2\x9b\xf9y\x9f~\xbcR=\x90\xdf" "N>^\x31\x63\xf0\x9d\xa7{\xe7\x65Y\xc7\x7fQI\xb7G \x1aU\x15\x38\xe5\x19\xb1\xf5\x91\x98\x87\x1b$\xfe\x34=\xd9\x04k\xbb\x18" "\xe6\x11\xd3\x16\xf8\tm/\x45\xa5\x15\xe0\x15\xbf\n\xb4\x9c\x85\xbcI\x0c\x10.\xd8\xa9\x17\xda\xec\x83\xf0\xa0\x04\xdeo\x90'\xa0\xf5\xae\x85" "\x36\x30!\xb4n\xd5\xa2\x82\x91[\x63\xfa\x11\x65WvOU\xb8_\x18Y\x11WY\xcbW\xd1\x61\x12\xb6\xe7\xba\x8c\xcf\xc7\xaf\xe4\xc0G" "\x84\xf5}n\x62\xd9\xdd\xa2\x8a\xae\x8cp\x81\x93\x63\x0cSh\x03\x94\xc2\x89=\xbf*V\"\t\x1b%\xa9Q\x92\x31~\x17>\x34\x8bS" "\x8c\x43,N\xe1\x43\xaf;|\x0c@\xb4G\xcf\xe1`%\x34g\x0e\xa1\x05\xaaPZ\xee;\xc7\xaaw\xa1\xc5sT~;\xc3\x12hQ" "\xe6)`\xd4\xf5\x02\x16\xef\xd7\x94\x06\xe4\x43\xe1v\xce\xe6\xa0\xce\x19\x82(\xd8\xce\x31u\xae\\\xe8,\xee~\x99j\t\xde\xf2\xccw\xb8" ".\xac\xb7\x37&\x95\x1a\x36/V\xd5w\xa6\x1b\xb7\xe1h\xff\x02\xb4H'\xc2\x9f\x1e\x02\xda\xa8\xf9\xee\xc4r}\x31\xe7\xbc\xae\xb9\xebw" "\x1d\x8a\xac\xf1\xfe\x17\xbcJ\x0bg\xa3|\x41\x1cK\x31m\xc7\xb9\xc5\x39\x8b\x30N\xde\x0b\xcd\x91\xda(\xef*kyU\xb9\x05x\x16s" "\x0b\x17\x83\xa5\x41\xc2\x1dj\x34\xaa\xce\xe1\x38h\xe4\x0b\xa6\x66\x1eW\xd5\x35\x06o\xb5\x1e\xf0{\x92\xe7\xe1\xf4;\xd7\x8e\xc0\xf0$\xdf\xe2" "\x85\xb4y^\x34m\x95\xd8\x66\x1e\xaa\xb3\x01>\xf1[\xa8\xda\xcf\xb1\x15\xad\xf0\xfb\x03\x44m\xac\xd4\xbf\xfe:\xfe\xb3M%\xec\x00\xd6\xbf" "\xc1\x1c\xde\x07\x33\xde\xff\x43\xb7\xe1\x1c]]\xe1\x11\xee\x07\x41\xea\x85\xf5\x0e\xd8\x1f\x39\xc3ZtS\xba]\xf8\xc1\x1e\x66\x42\xec\x80\x9f\x1f" "\xf1\xda\x8dl\x04\x9fg\x91t\x86\xeeh\"m\xb2\x05\xb2\xb9'\x05\x9c\xa7\x8d\xba\xec\xe1\xa5\x16\x94\xfb\x66Qq\x82\xdcT\xb2\xd9\x63\r" "j\xca\x06.\xdc\x64\x81\xa4*\xbd\x1a\x63\xba\x14jt\x91\x7f\x35\x82\n\x95\xbd*\xdd\xd8\xb2\xe7U\xb1\x1d\xf0\x08\xccP\x36g\x0e\xf3\xaa" "\x06O\x0e\xa8\xd7\xbb\xc2\x39=\x05\xd4\x44WLM\x64\x13W\x61\x9a\x07j{\xfd\xc1\x45\x94m\xcd\x83\xba\xff\xc5\x44\"\x94\xdf\xd3\xb6T" "\xfc\x11\xfbY\xa2\xae\xc8\x05\xb8\x8bg\x92\xef=\xc9\x17\x61\xee\xa3\x90\x81\xcf\xa9\xb0\xfeJ\xe2\xd5\xf2l\x82P>\xc2>\x7fh\xc8\xa7\x33" "\xc2s\xcf\xc7L\x99\x0f&\xc4\x84\x7fgk\x1d\x8d\x85\x37\x0b\x81\?\x8c\xe8\xd7\x9b\xe9\xf9\x84-\x91s\x0c\x81\tQ\x82\x9f\xb3\x1f|\xae" "\xcbI\x0eq\xb9\xab\x97\x13\xa7\x8e\xc5N\x90\xbc\xec\x00\x9e\xaf\x06\x96\xc6\x97\x18\xa8R\xce@\x9b\x8e\x31\xaa\x1f\xf8\xfah\xbeqR<`" "\x13\xbc\x1e\x8c\x46\x88\xde\xff\xa5\xc5u\xac\xea^\x00\xcd=\?\xa0\xa1\x30\xd1I\xb8\x44\x14\x1a\xa1m\xc8$\xdc\x9f\xe9^\x9dh\xee\\&" "\xe5\x9b\xd5y\x9f\x66\xe4\xb4\x93\x94\xa1.y\x14\x95\xff%+\xff\xcb\xa4\xfd\x02\xa2\xf2\xbf\xe4\x18\xc4%\x87\x0f.Y\x9d\\&\xbf\x1f\xe4" "\xc4\xa9Qtl\x61\x94\xa8\xd9\xc5\xea\xec\x11&:\x37\x97I\xbc\xeb\xd4@\xba\x07l\x42!\xc5\xeb\xac\x83\xeb\xc9\x63\xbd\xf8i\x9fW\xf0\x44=\xa8\x66\x0f'\xf2\x8f\xea\x9a\\\x80\xbf\xbc\x8e_^/\x9e" "_=\xb1@\x1c\xca>h\xf3+\x8b:V\r\x1au\x37\x30t\x95\xeb\xacj\xeb\xe9\xd6\x14\x44\x19\xa5\x0c\xa1\xfd\x45\xa1\xedUO\xeb\xb8" "\xee\xf4\x06i\xc3\x93\x07\\\x0c\x96\x35" "\x08\xeb\x1b`\xe3'\xfd\\ \x84\x8c\xa8[$\xa6\x64\x46l\xfc#\xe6\xcb\x93\xd3\x1f\xf5\xca\x36\x08_\x34Y\xc8\x37\xd9\xf6lZ\xe8\xa9" "\xae\x9b\xd2\xd3\xc0\xaeGP\xee\xf1\xae\xaaI\xce\xc8\x08\x44[\x44\xf8\x0e\xa2tmr\xec@\xc8\x9f\x35\x7f#\x9a<\x85\xcd\x88*\x7f\xc0" "\x39O\x35\x7fq\xb2\x07\xda\xc4*<\xa1\x45\x32U\xda{\xd8\x44\\\x06\xe1\xee\xc1\xea\xe2\x98&\xbe\x8a\x00\x89\x46\x38\x62\xda\x36\x96N\xbf" "L\xdd\xb1\xc0\x97\xdb@\x1d\xbd\xb0\xc2R\xa5\xf1\x14\xd7\x9f\xe5\xc3g\x96\xc4\xa6\x46;~\xe5\xf0\nT\x8e\x41t@\x9b|k\x9b\x08\x93" "\x66\xf4\x9b\xc7:\x39\xdf\xa5\xc2\xd7\x80*K\xe4\x9c\x83]\xcd\xa4\x31Nv\x17)z\xfeMvW\x95,-\x9blj\x35\x93\xdb#\xb2" "\xc2\x02\xa8\x99t\x36\xff\xa6G\xf0\x11V\xc5\x33\xa2\x13\xdbLz\xd3\xech\x84\x15,\xaa\x16\xce\x62\xa2\xe9\x8e\xe3\xa3p\x86\xa7M\xa7\xfc" "\x9f=\xf2\xfel\x35\x80\xf0\x95\x9f\x0ex&[\xbf\xa1|p\x06\?\x31U\x9d\?\x9b\x04W\x13Y\x01\xeb\xe9\x94s\x92\t\x39\x45\xd6\xc0" "\x82\x1a#\x1b\xa4\x62\"\x83&\xf3\x1dgH\xe3\x39\xd3\x03-\xdb&\xbb\xcdM\x44\xd4\x10\xa2nW\x86%_\xa6\xa4\xa1\xc7\x39\x9f\xb5\x62" "O\x42\x0e|;\xb5\xd3\xfe\xea\xa7\xf8\x66M\xd7Lw\x36\xe1\xd1 \xe6\x41\x85\xac\x92\xd7N\x8d{\?}\xf9W\x05\xdfH;&mR" "\x84\x91\x11\x85r\xb5\x99\x1e#s\xa4'\xfbY\x17\xf7\x98ZT\t!\xf3\r\xeb\xe7&\xa7\xe2\x94,\x0c\xd5\x64=\xd9\x64;\xa5\x99\x36" ">\x9c\xfe\x08\xc4\x0cw\x62\xa1U`\xfa\x95<\x30)\x1f\x1e\x9d\xe1\xdb\x83\xc8\xa9s\x9f'T\xfe\xe3\x9f\x97\x1a\xebi\xc4\xdf\x45+\xb0" "\x89\xbd:\x84h\x92\x34\xd9JVz\x01\xa2\x1dU\xbe\x90j\xb6Zn\x86\x99XU\xf8\x31\x38\x80\n{\xfc\x16\xf3\xa7\xb0\x90w\xb1\x14" "[\xf8v\x01\xe7x\x31\xcd\xd9_\x88\xb1\x97\xa6\xae\x80\xfe\xbf\x42\xbb\xb7\xff\x93\xcd\xaf\x92\x43\xbc\x31r\xc0\xa6r\x1e]I\x13\xb1\xa8\x30" "_\xdb\xccw\x90\x01\xa4\xe8W\xaf\xe7%r\x35\x82\x93+q\xd9\xda\xc6g\xfa\xe6'}\xa7\x06\x86\xc2PY\xd3\xf3\x9c\xf4^\x93\x03\x14" "!\xba\xac\x91\x85\"\\\n\x85\xc3\x31\x1b\x00\xcd\xf0\xd1hS\x07\xe1\x99n\x85\x92\x8a\xfd]\x61\xcd\xe9OHL\x7f\x94\x1c\x43\x17\xce\x9d" "\xea\xfb[\xe7U}!\xb1\xf2\x9f/p\xc9s\x62\xc6\xa2\xb9\xaa#_sp\x95\xcb\xbd\x8d\x7f\xf1\x10\xde\x1e\xa6\xd2\x41\xc7\x33\x02\xe6\xd0" "\x85h(\x35W\xd3\x96\x96y\x97V\xc0\xdd\x62\x19\x9e\x91\xa3\x64\xb7\xd9\x9d=\xc4\xd6\xdf\xe2\x93\xad\xe1\xf6\xdf\xecP\x37\r\xc6\x8b\xd1\xc6" "j\xed\x45\x9b\xa5\x1a\x17\"-\xda\xd8.\x46\x38\x88\xc4\x64\x97\xbb\x9d\xb5\xa4O\xec\x43\x97m\xac\x44\x15\xc6\x0b\x39\x9a\x7f\xd9_r/\x38" "\xe3\xea\x61/\xc3\x88~\x07\x9e\xe1\xc2\xc7}\xf0\xf9\x01\xc4\x93\xe5vG\x42\x34Y\xfb\x7f\x8bnZ\xb3l\xf9\xccV\xe0\x33\xb6\x95\x13\xda" ">`\xc2&\x8f\x63~\xf3\x19[\x00\t\x0f&\xe0\xc9\x16h~\x30\x42\x8b\x84!\x9c\x34\x10&}\xf1\x8c\r\?\x95V>=\xc3S\x63" "\xf1\xbcj\xe9V@\xec\xfa<\xc3\x1fT\xf8\xb1\xc9~\xd9\x1b\xafm\xc4z~\xc4\x91\x9d\x11\x96\x14\x0b\xf1\x96\x8f\xb2\xe3-\xd0\xfc\x61\x85" "\xe6\x1a\"\x44\x0f{\x04\xffW\xa3\xbc\x30LXU\xcc\x63#\x96\xdf\xd2!\xc4G\x9cG\xf9\xfc\x9b^\xb1\xba\xf8\xc4\x1aH!\x12\xfe\x13" "\x81\x13\xd8gQ\x95_\xed\xc0m^\x14| >\x13\x14\xcf\x9f\xf2X\xf4w{=(\x0b\tm\x84\xe3\x94\x98\x18\xc2\xfb\xc4\x96\xe5\x42" "T\xc0\x9fL\xfcO\x36\x83>\x13\x34\xf1\?\xfd\xa2\x92\xe1\x12\\\xd6\xd8\xf6\xf9\x64\xcb\xed\x13{*\n\xcdy\x46\xf9\x04\x7fO\x37\xe1\xa8" "\x8d\x03\x93M\xac\x8bX|\x66\xa3}\xd0\x16`\n-\xfc\xc2\xe2\x33\xdf\x9a\x80\x18\xfe\xfa\xe4\x18\xd7'v\x19\xd2\x45\x97\xb6K:&%" "\xb9\x04s\xf1\xb9\x32\xb7-\xa1mMl\x44L\x39\x31\xd1\xff\xf9N\xde\x0f\xf2\xcdw\xb6t\xa3\xe4\xc7\x8a\x9e(\x37W\xe9\xc5\\\xfe\x39" "\xf9\xac\x62\xac\xe9Q\x1e\x93%'\xeb\xd6\x18\xfb\xaf*g\xe0/\xbf\xfa\xdb\xe6\xfcK\xcc\x12\x9d\xd1h\x8d\x61\x63.Q\x16[Y\xd9\x03" "\x17\x15\xb2\xe9\x64[)NvK+[\xc9\xae\x66\x8f\xe4\x9e^j~\x93\?N\x1d:\xc7\xe3\x8e\x93=\xfc\x1c\xdb\x82\x31\x9bl\x31\xcb" "J\x61K\xef\xeaqK\x03\x01\xa3@\x8b\xf9\x0e\x08\?\x9c\x1c\x9d\x8d\x93\xf2I\xb6\xfd\x08\xb3Rs\xfe\xcdyu\xee\x90.&\xf2\xa9\x92" "\x83\xef\x31\x96x\n\x1bm\xf2\x81\x1c\xa7\x87\x63\x37\xb3\x97k\x98M^\xc4-\xd2\x45\xf7Gn\xf2\x9a\xcd\xefL\xf9\x0b\x62h-N\x9e" "\xde\x99\x45\xe3\x64\xd0\x85S\xb7\x98\x16\x8dYy\x42\xfe\xb2\x65\x1e\xb3\xf9\x15'\x63^\xec\x94\xb7\xb6\xe0\xe7\x0b~\x8e\xee\x9b\x32\xbf\?\x61" "#.\xf6\xac\xc0\x01\x14\x9dV\xf4\xbbg\xa3)N\xb7p\x13\x9e%\xd2\x9dn\xf8\xb6\x98\xbb\xfc\xf4\xa0\xea\xd4\xe0\xde\xfcq\x16\xdcJ\x96" "\xedqZ\xc3/\xa7\xf5\x99\xfe\xfe\x31\x1eWj\xae\x90\xc2\xe6\x06yH\xe2\xd1s\xe6.N\x7f\xe3\xd5\x06\x12\x33\xec\xac\xb6\x88\x39J\x12" "#\xc4\xb6\xf0\x08\x97\xca\xf9\x83\x38\xf8\xcc\xaa\xf9\xe4\xd4<\xc3\xebT\xe5Q\xdeM\xe9\xb6\x39{'\x41\x1d\xf5\xb0\xf2\x17\xca\x37\x62\x84\xba" "\xfa\x45LpW\xac\x9bM\xa1P\x31\x13\xad\x0c\x98\xf7\x1c$\x8a\xc3\x46\x8an\xaa\xa3mt\x1c\x0e\x9cl'L\x18U\xa3\tv\xaf\x80" "\x9a\xfc\xba\xb9\xbe\x9aw\xb0\xc9\x33\x34\xe7l\xbe\xc4\xd9\xfd\x9b\xbfM\xd9\xf2(\x19\xef\x65\xc7\xbc\xd7\xe5]\xba\x63\x85I\xecW\x82=\xe0" "\x95\x9f\xf9&\xce\xc4\xe2,^\x8f\xe2\xc7\xf9\xbe\xben\xd8\x86OU\x87\x44\xb6\x66\xb9\xa7\xf4W$/\xe3\xdd\xc6NH\xc2\x8bs\xf8\xd7" "\x8ays\x94OZ\x88\x1a'\xca\xa2\x43\x08G('\xe4#\xf2\xc5\xf2\xdc\r\xd4\x17O\xb7x\x83\x9f\xaf\x98\xe8\xcd\x87\x32`\xb5\x89l" "\xb1\xda\x43\x66\xd2\xa9\xf7\xe1\x35\x9b\xeb\xaa\x38\x85\x11\x07\xbe\xec\xa7\x1bxz\xea\xea\x86^\xa9\x9a\xf9\xe4\x0b\xe6\xe0\xc2\x1f\xefj&\xed\x1a" "}\x04\xcbm\x34\xd4\x84\xcbm\xa7n^k+\xea\xa1\xc6\x17\xb9\xe5\xbf\xe5\x36\n!\xa1T+v\xbf\x62\x92p\x06_n\x63X\x63\xb9" "\xc3\xaf\xee`@uIWU\x63\xf2\xcc\x8f\xac\x01#|\xf9t\x86\x43\xf6\x1a+\xeb\xcep\xc2\x41\xdd\xcf\x95]h\x1a/\x0f\x10\\t" "y\x90}\x36\x8d\xbc\xf8\x03l\x42\xbf<\xe4\xd9\x18q\x63y\x8cN\xbcQjR)\xd9y\x91\xc7\xa8\x9a\x85\xae\xbbW\x88\x80\"\xa6\x15" "q\x42\x9e\x0b\xdd\x1d\xa1\xf5S\x96\xc7\xe8\x1e\tm\x0b\x85\xe5\x31\x66\xd9\x8d\xc9\xee\x1bz\xc7\xa2\xfa;\xa0\xb5\x45\x84\xd6|^\x32t\xf0" "\xf2\x18\xc3~\x42[_\xb8,\x61J[h\xdb\xc3+\xcb\x46x\x32\x0b\xadm\xbb\xa4_\xa2\xd0\x36\x31\x31\xa2+,\x66\xef\x90\xfc\x04\x1f" "\x97\xa0\x35\x1b\x85\xe6\x17h\xc4\xa0\xac\x98\xd6\xb3\x15Z\xe9\xbb,\xa1 WZ\xf2\xd0\xd5yY\x82_\xfe\xb2\x92\xec\x9c\x39\xff\xa2s\xec" "\xa4\x64\n\x0e\x35\x66\xea\xb6\x96\xd6\x39]V\x30\xebo\xc4\xfc\x1e\xcc\x99\x36\xe2\x97\x17\xf2\xd2\xa7\x15\xee\xaa\xba\x64\x00\xc4\x65\r\xdd\xa1\xa5" "N\xc1\xcb\x85\"\xd8\xb6\xa8Y\x1f\xbe\x32j\xce@\xab\xcd\x95\?\xa0\xd5\xea\xca\x86\x13MS\x35\x9b\xa0\x05yX\x36\x98\x98\r\xd4\xd4\x42" "k\xa0\tm\x1f\x88\x65\xc3\xc2[\x94\xfd\xb7\x99\xae\r\xa6\x9f\x32lM\x01\xe5\x1e\x05\xa6\xc2\xc9\xc4\xb4\xa8\x42\x30m \xcc\xcc\xb0\xc5\x86" ")x|\xc1|\xad\xbb\xc9\x84W\x13\xc5&\xccs{\xa2\r\xb8\x99,\xb9\xea_xs\x05\"+\x36P\x8b('\xce\xb4}\x0e\x93\x37" "%Lv\?\xf9TT\x65\xad\x46\xd6\xe0\xe9\?~\x9d\x61\x98n\xd9@\xed%\xdc\xdf\xf6\xf3g\x87\xfb\xe4\x33x\x84T\xc8N\x90\x8e\xd8" "j\xd7\x98\xbco\xb8Y<\xa7-\xa3\x14\"\x13\x34\xb2'\xdc\x18\x86\xfc\x85Q\xdd\xe9),\xa6'\x8e\x98\x9e\x38X#'\xdc\xfb\x04\xf9" "\xe4\xe1\n\x63\xf4\xbf\xca\xf9$,\x38M)\x1f\xf2\x0f\xf0~\x36\xd0\x8b\x15N\xfaN\x7f\x8a\xf0\x8e\x14\xc6\xfb\x85\xdc\x81\xc5\xd1\xcb\x86_" "\x89gS\xdd{\xb6z\xa0\x1d\xfe\xee\x32\x1c\xe0\x99\xc4,\x1c-\xa4\x87(\xdd\xce\xd6\xc6\x64\x45\x35\x37\x9c\x85\xa7#Jz\xea\x98\xf1]" "r\xb9\xbc\x10\xe5\xc5-v\x03\x12.\xce\xb3\x8b(\?}\xcd\x8f\x1ey\xa0\x1e\xf6t\x13\x65\x1e\x32\xca[\xa7&\x86\x39\x10\x99J\xb7\x39" "\xf4\xb8\x94\xae\x31N\x9dl\xe1S\xf4-\x95\xdf\xa0M\x94\x0b\xab\xfc^s\xbc\xda\x9d\xfe\xcdNVg\x13\x1c\x18\xd4\xb0\x1aL\xcdk\xd0" "\"\x63\tm\x1d\x83\xf2]N\xcf\xfcz\x8b\xb1\x38!\xaf\x32YZ\x89q\x9bn\x42k\xef\xfa\xb6\x87\xf6\x83\xa9\x7fM\x44\xa6\x10u\x88" "\x1f\xc3\xdan#\x36+\x85:;\xb3\xf4\xbbq\xa5\x31l\n\n\xef\xf7mZ\xeb\x83\xd6H\x12\xde\xdeg\x33$i\xda\xfa\xccm\xe8[" "L[/\x61\xfc\x37\xd9\xe5@Q\x99#\xb7\x11\xbd\x19\x31\xcd\x1f\xdeXx>\xa8\xbe\x8d\xc9\xd1\x1d+\x15S\xdd\x1d\xcc\x08\x9aJ[=" "Lz\x43}\x44XJ\xef*|\xb3\x10T]\xd4\xd7\x66\xf2\xfb\t'\xb0\xe5-\x1a\xa3\x46\xed\xf2YK\x38(\x9b\xc3\x36%\x66\xe1\x33" "\x38\xef\x8b\xb9\x8b\xc4\x81\?\xa3\xf0\x62,\xa5{\xd2\xc2\xad\x61\xe1\x90\xd0\xfc\xd6\x84O$\xd3//\x1d\xae\xea;\x08\xc7,\x8a\x9f\xeaZ" "\x39i\xf9\xf3\x96\xb1\x91\x93\x11\x9d<\x33\x31;\x65\x66\x18\xf5\xa5\xc2\x05\xe5\x31\xf2\xb5\x06\xe4\xa8\\!\xce\xa4\xa8\xfa\x8e\xd3O\xb6\x32\x37" "\x61\xa3m\x98|\xea*[v\x11\xee\xce\xd4\xaa\xb1\x87\xce\x82\xa8\xfb\x99\x93\xf9\xb4\x8d%V\x42[\xa3\xb7l\xa3\xfb-\x44M\xdc\x46\x07" "\x7f\xd9\x66\xb9\xd9\xce\x1a\x35gvR\xce\x17\x8f\x18\x85\xb5\x03\xea\x9fkS\x93K\xc6[\x10\xda\x94\xcb\xb2\x97\xfc\xea\xd0\xdf\xf2\x11\xe1\xf4" "\x84\xb6{\x8e\x11\xbe\"\x62\x9a\x97\x98\x11\xa3G\x30Q\xcf\x99Yz\x65\x03\xce\x94\x35\x32\xcd\x64\xca\x99Y>\x0b\x66\x33\xfc%\xcb\xcf\xc7" "\xb4\xfc\xe0\x0c\xa1>\x44\xd9\x30\x8c\xd0\x1c\xb0\x84\xa3\x33\xa7_\x9b\x98p\x34\x15\xd3\x96Y\x1a\xfdS\x84p\x13\xce--\x1f\x11\x64\x64\xf9" "\x08_\xda\x65\x9f\xc9\xdf\xc7<\xa7\xd0\x82\xbc\x0b\x0f\x36\xd2\xda&L\x0b\xf2.\x34__#\xfa\xde\x62Z\xdb[\xd8\xe1WQ\t\xf4\x11" "\xdeLi\xf5\x45\x9f\x35k\?=\xc4\xf7t\x8b\x46\xff\xe8\xe8\x12\x61\x64\xc4\x44\xbd\xdb\xc7\xae!\xc2\xbb[\xb0U\x01m\xdd\x86\x92\xdf\xeb" "\xf0\x14\xcf\xe4\xe0\x05\xb4\xbd\xce\x84\x11\xae\x0eqm\x96\x9cU\x34j\x0b\xdd\x1c\x8b\x44\xa1\x91\xdb\x87\xfb\xa7p\x86_\xcf\x62+\xa9\xfa\xd2" "\x11r&\x1bK\x66\x0eUY\xb4\x17\x94\xc5\xb9\x16\xdelx\xd2\xf8\xe9\x85\x98\x00\x12\xd3\xc6\xae\x85\x16\x96\xc0\xa8K\xd9_\x36\xa8\x66\xe0" "\xf2\xd7\t\xcfz\x31\xe3}\x12\xe7\x46\x0c\x0f\xa1\xf9j\t\xcd\xbb\xc9\xc8\x17PM\x36\x81\xfal\xde\xf4\x31\xdf&\xac\xf1\xafjx\xd4\xac" "\xf3\x94\x98\xfd\x86\xc9\x8b^\xdd\x7f\x81\x36&\xbc|\xc2h\xdc\xf2\x89o\xcb\x13\\\x0e\x8crH\x37\x33@\x1e\xb0\x03\x1egO\x94\xcd\x45" "\x0bQW\?\xa1_(\x34\x17`#\x0b\xd9'V^O\x98\x88\x16\xa2\xf4xJ\xdf-\x15\x9e\xd8\xca~\xc2<\xb4\xb0i\x95\xc4S\xbe" "y\x01n\xe3\xef\xd9\xb0x\xc2\x86\xf4\xcb\x97|i=\x8d![\xe7\xc3t\xd7.\x61\x98_\x9c\x82\xcbw'\xdf\xda\xe1\xea\xc5Z#\xa3" "\xb4>\xfa\xfb=\xc6\x8c\xe9\x92\xab\xb8\x97\xb6\xd4\xda\x46\x82\x96\xa3\xd5\xc6!\x9b\x0c#I\xde\xbf\xf9\x1c\xb1\xaf\x45\xd9\x30\xb9\xd0\x96\xbf/" "\xbf\x30\xfc\x65\xb4\x00[\x1c]\xc5\x01\x8b\xeb\x66&/@\xcd\xf0\x05\x1b\x1e\x14\xda\xca\x37\x65\x1b\xac\xde\x81\xe8@}!\xf0\x88\x91\x97\xa4" "\x66\x38\xcb\"\x62\x0e\xfdJ\x0f^\x9c\xfe)\x46\xb1\x84(=\xbe\x30n\x61\xf4s\xe9N\xba\xf7'\xac\x66\xbf\x10\x97J\x38\xb5\xb4\xff\xc2" "\xd8\x8b\xd1\xcf\x89\xa5\x7f\x46\x04\x85\x80\x89\x87\xad\x66zp\xfd\x37;\x0c\xea\xf0\x19\x0bmM\xf9I\xe4\xc5r\x86I'Q\x0f\x03\xd0\x62" "\xc8.\xbf\x30\x38\xb4\xe4\xd0\xa6r\x00\xda\xdc\xf1\x92\xe3\x99\xc6u\xd6T\x15\xf6_\x32\x95\xf7;\t\x1a\xbc\x1c\xf9\x14\x46\xfcK\xf4\x80\xe3" "\?\xf3\xd7\x12.\xc1\x64\x7f\x01\x9a\xdb\x80Q\xc3]\x98\?;\xd4\xda\xe4\xb3U\x33\x1f.\xd3\xab\xf0\x97p]\x14\xd3||\x85\xe6q%" "\x44\x0b\x30\x66\x99\x1e\xb3\x1e\x14~\x83o\rp\xd8t\xca\xf5\xb2\xaaW\xb5\xae\xf8MM\xf8\xfb\x43\xfe\xdc\x18w\x9eLy%\xb3#\x10" "U\x03G\t\x97\x31\\\xf0\x84GG\x7fQWZ\x83\xec\xa2\xc7i\xe9\xc7\x89\x61&\x31\xab\x33'|\xa7\xcd\x64\xb5\x17\xb3\x9d\xc3q\xbe" "%\xc7\xf9\x84(\x8a\x63k\x0cN\x61Zll%\xee\x35\x1d\xf4\x10\xf4[L\xd4\x85\x31\xcb\x07\xa5\xa6\xeeZ\x85\x10J\xa2\xde\xdb \x9f" "'\xbbTq\xd6\xc0\xbdg\xfdk\xf0\x8d\x9f\xdb\x9e\x88K\x8e\x86-\x39\x04&\xac \x89\xd9\x01\x8a\x11\xb5\xc0\x98\x0f\xbc\x99\xc0\x31,\xa1" "M\xa9(\xbb\xa0\x05\x00\x15\xa2%\xa2\xd4\x8d\x19\xeeO\x98\xcd\x63\x16\xec\xf1j\x17\?\xcb\xa2\x9a\xab\x1e\x84wx\x8a\xf0\xe0_r\xff\x39" "\xa5&\xa8\x46\x08\xea\x83\x16\x9cQh\xd9\x34\xde\x46\x9f\x42h\xe3\xe2\x42\x8bp(\x34\xf7\x02\xa1M/Y\x98~\xd0z\x61\xf1v\xb6\xd7" "\x02\x8f\x07N\xcc\xf7\x89y\xd1\xf2_\xc3\xbeJ\xf1v\xbes\x08\xee\xdd:\xf3\xf1\x01\x1a\x95\xa2\x46\?\xa0U\x62\x46\xbcM\x30\xfd\xad\x36" "\x05o[\x33\xf1\xb6\xc0\xf4\x45\x05P\x36\xff\x65\x66\xe1Z\x44!\x31\xe3\xed\x95\x85;\x12Z\xd7\x31\xde\x41i`\x44\xd8\x18\x31g=\xf9" "\xbf`\xc2\xbbG\xb8{\x9c\x1e\x1f\xaa\xbf\xa5\x95\xdf\xff\x1e\xc0n\x05\xff\x39\xe6\x7fh\x45\x9c\xf0\xf8\x0c\x9e`n\x86/X\xc1g\xd4\xa1" "\xf2\xdf\xdb\xff\xa7v\xfc\x37\xbbH~'ro\x98s\xc0\x87\xb3\x93\xb4y\xf0\xdf\x63\x33\x98\xdd}\xbc\x94z\xc1\x13\xdd\xc7\xc9\xb7/\x96" "\x03\xb3\xcb\xf4\xeb\x11\xb3X\x05\x95n\xef\x66\xd1\xb9\x1d\xc3\xc8[\xbc\x93\x1d\xef\x14\xbe\x99-j\x62\xfa/@!$Q\xe1\x80\xba \xdf" "\xd6\n\x07\xb2\xf6\x45\xf6\xfc\xcd\xe7\xc8\x63R\x0f\xaf\xb6\x1e\x8b\x07\x16\x43\x04U\x8fw\xf0>\t\xd7\xdf\xc9;\x17\xe0\x08\x8fguo\xf9" "\xe4\xe8/\xae\x18\xd3\xe3\x0b\xd0\"\xac\xc4G\xd9\xc1\x02\x34\xa7\x00\xa1M\xbe\xc5G\xab\x8d)h\xf1\xc0\xe3#>\xb9\xb2z\xd3lY\xc6" "\xac`zRh\xcb\x97\x85\xf1\x91\x11\xcb>\x85VT\xc5\x15\xf8\x0c\xc5\x15l)h\xc4\x64]\\-\x86\xa9\x88\xabX\x11g:\x04\xb6" "\x88O\x93[{\xbbj:\xd6V\x91z\xb0\x1aT\xfb\x65\xad\xae\x9c\x08\xf2I\xb5\x00\xad\xe7#\xb4R;\xae\x85\xcf\xadH\x36\x62\\U" "\xcc%\xbe\x82\x01>\xa1\x39\x36\n\xad\x92\x10\xf6\xf0=\xff>\xbc\xa3\x94\xdf\xe0\x98\x1a\xafi\r+V\xe2\x1a\\o\x94\x38/:Yq" "\r\x83R\x42\xbc\xad\x35\x8c\x31\t\xe7\xf6\x84k\xf9\xe1'\x38\xc4%\x33\xe1\x94\xe8\xd4\xc4\xdc\xf4\x41\xc8\x9f\x16\xeaV'\x0fH\x35\rG" "R\xfb\x46\xfc\x86\xf8:+\x44k\x8e\xaf\x31\x8b \xb4\x8d\x0e\x85\xf5\x8a\x33\xec\x31\x10\xdf`%t|\x83\xae\xaf\x10\xbfw\xc3\xdf\xd3!" "\x19\x8cj\x9a\xc9\x04Q\x13\x41\x84\xd5\xf4\x43\x0b\x84\x35Ps\t\xda\x66\x14\x46\x44\x39\x8e\x39V$\xb4\x11S#\x46\x44\xcd\x94\x96\x01\xdc" "\xe6\x44\xf9\x8f.N\xc1x\xe8\xc4\x30H|\x8bI(\x63\xb2\xf5\x04\xa7[Q\x9b='\xba\x96\x66\xc2\x81\xc8L\x0cq\x9a\xa9\x11Zl" "\xa8T\xd4\xee\xf6\x9f\x85\x94Q\xf3\xc9\t\x37\x07\x33\xb5\x99\?\xa8R\x45N\xcc-\x89i\xa3\xa9\x42k\xd3\x18\xb3\xfe\xa9\x05\x62<\\\xd5" "\xab\x61\xeb\x41\xf9\xe4\xa8\xe1\xe9\x94\x1c\xb5\xc3\xaet\xa2,\xb8\xae\xf2\xd5\x99\x9c\x9d`\xb1/Tx\xb6\xaa\xe0m\x65\x66\xd6\xbb\x62\xd1\x63" "\xaa\x8f\x14KN\x0fH~tv\x12\xee\xb0\x31#\x17\xc9\xf0\x10\xad\x00Q\x0fg\xe4\x1d\x16w\x88\xd9\xbdJ\xc6\xef\xf0v\x12\xd5\xe7M" "\xbe\xf0\x8b\x83kg\x32\xbc\x43S\xd9\x14\xdf\x03\x33\xfd\x61\r\xae\xf9\x36\xa8\xc9j\xe7\x36\x19\x1e\x38\x43\x30)Sp\xc3w\xd3s\x8d\xa8" "pj\x31\x9b\x33\xac(\x87\x42\x15\xa7\x66X\xe4\x13s\x90\xcf\x18\xfc\xcfL\xa1O\x05\xf3}\x43\xfe\x85[\x1e\x1e\xea\x16\x19GOh\x9e" "\xd9\x01\x1d\x10\xbdn\x05\x15L\?\x9b_\xebMp$V\xf5\xad\xcf\xcc\x9f\x8b_\xe8h/\xdc\x01\n\t\x65\xda\x41\xe6\xc6\xfc\x96\xb1x" "\xa6\x19\xef\x65\x86w\x06.\xbe\xf1\xadn\x1d\x32\x45\xfa\x61\xf1\xa7\xed\xb6\xe7,\xa4\xa7*\xa6\xa0\x9a\xb6\x10\x1b;\xf3\xed~\x62\xb1\x36\x14" "\x1a\x12\xeb-\xfb`\xf2\x0e\xd4\x34\xe7\x11\x98\xef\xe1\xbb~\?jz\xe8P\xa8\xf1\x05\xcb`U\x19_\x64\x31\xfd\xe9\xabi\xb3\xae\x30=" "\xe4\x34T\x7f\xcf\x33\x94\xaa\xc9\x14\xb3\xf8\xa6\xe0t\x04s\x8ag\x81%\xad\x46\xddhj\x7f\xe2\xca\xc2w}\x07Un\xa1\x35\xeb\n+" "\xa2L\x85\xfb\x10s\xba\x9bN\xc2\t\xb3\xa7O\x7f\xc4\xaa>#\x37\xc3}\x88\xb9yQ\xfc`\xf0\x98n\xe3\xa1\xa5\x17\xfc\xb9K\xbc\xf3" "\xba\xca\xa6\xc4\x87u\x83\x0c\x86\x96\xbd\xf2\r\x1c\x1ek&\x9e\xf3\x11\x8cPr\x85\x0b\x9al\x66\x43\x64\x13\xac \x34\xa6\xb7#\x37\xb3s" "\xfe\xe2/\x32\x34&M\x84\xbc\xf1\xac<*\xe4\rVM\xb7\x88\xa6\xa1\xfcp\x06\xafQQ\xbcz\xa1\xd4\x9d\x18\x1b\x82\x62\x46Q\x93\xb9" "\x43\xd7SXW\xd8\xcc\xec\xf0\xe0\x1f\x85+\xc6\xfa\n\xa3\xbf\xe9\x62\xfa+\x9c\xb1\xcc\xd0\xe0\xc7~\x01\xbd*\xc9\xcb\x65\xb6\xd5\xe0h|" "\xbcj\xfa\xd5\x0c\xef\x9d\x9e\xf1\x33\x8f\x84\x06\xb3\x8b\xca\x82\xcd\xbc[\xcc\x12\xc6\xb7X\xceh\xf4o\xabY\x7fr\x13\xab\xdd\xc4\xdc\xe3\xa7" "\x87H\xf7\xfc\x98'(U\x9dl\x64\xde\xe6\x35\xbc\x11XV`L\x46\xbf\x98\xc9\x13\x35\xdat\x86\?\x18m\xfaU\xab\xe9\xb3~\xae\x30" "!\x65*kO\x92\xdb\x8an\xd8z\xd9\xf3\x63!X\x80)\x7fU\xd4ln`\xf7\x02U\xc8\x12X\x07h\x94\xff\xc3\x9fM\x9e\xbc\xd4" "\xf6\xea-\xff\x19\x85u\x90\xa2\x66\xa8\xa1\x30\x38\xac\x7fx\xe4\xf4\x0b\x17\xd3\xdf\x0e\x31\xfd*\x30\xf6\x66\x94sx\xe1\xe0\xbf\xbb\xba\xbc\"" "\?\xc9\xd8YH\xb0U\xfd\xd9\xe9M\x0f\x98\xe8\xbe\xba\n\xbf\xae\xea\x36\x98~y\xf5\xe7\x42\x95\xac\xca\x9c\x14\x61\xb2\x1eV\xf3r/\x98" "h\x1a\xaa\xe9\x89\x03\x13\x91\x11\xa0l \x1f\x66\xab\xe9&\x46T\x61\x36\xce\x82\xc9wX\xcd\x8f\x43\x37\x0b\x65\xa0\xaa~'\x99\xaf\xe7\xe6" "p\x8cO\x44\xcc\x90\xaa\x37Mg\xb8\xbf\x9b\xa6\xd6\x8e|\x33\x44\x65\x8d\xd3\xec\xb6\x03u\xcb\x64~\xc6\xdb\xb6\xfah:\xbd\x06\x10\x33\xdc" "\xe4G\x13\xc3\x0b\x66\xe6{\xfc\xeer\xc7\x89\x01i\x37\xe1\x1f\x12\xdf%\xbb\x9b`\xf7\x19{\xce\xc6w\xd2\x95\xca\xdf\xed\xe2[\xf0(\x88" "\x39\xb4/\xfc\xf8\xd4\xcd\x31\xa7\xf6\xc8\xee\xe1\x8f\x17[\x1c\x43\x1b\xccUs@\x8e\x41\x94^J\x8c\xb1\x9a\xc9\xd7\xff\x1e\x03P\xca.\xd9" "\xd3\xad\x1bpG\xf7\xd8\xc1\xd0\xb8.\x07U\x31\xcb\xdc\xb3\tz\x8f-\xf5\x8cpj\x83yt\xc9\x42H\x15\x0bU\x33\xfd\xa8M\xd9\x08" "\xcd\t@\x19;\xd3\xf6\x34\xfb\xbc\x92\xffW\xb6\x00*\xbe\xc7P\x98\x90W\x9eT\x8e\xf2\xf7\x1b\xc4:S\xd5qJ>\xc0N\xae\xa6\xf2" "\xed{\xf6\x0fT\xad\x1a'+[\xaf\xac\xea\x83\xfcq\"h\x1fL\x94\x63\x66\xfa\x1c\x1e\xd4\xfc\xd7ML\x03\xc1l\x84\x93\xf1\x41\x99y" "\xf7\xe2&s\xf6}R\x7f\xc1\x82r\x31m\x9eM\x88\x1e\xd5=\x9c[\x94\xcf\x88\xd8h\x66\x16o\xc2\xec\x1d\x92\xbc\xb5\x1e\xaf\x63p\xa3" "\xc1\xe5\xfdo\xd1HT\xea\xbeK\x16iRU\x93\xbc#\x91\xcc\xc9\x98\xe7\xfe\xb9s\x86\xd4\xb5\xf8W\x42s\xf0S\xd6<\x83%h\x92" "\x0b\x7f\xb2&O\x80N\x9e\x32\xd9(I\xa3\x98\xca\xba|\xf7)\xef]\xf8\x37-\xeb\x8e\xc7\xc3Q\x88\xbb\xce\xc3\x03\?\x85.\xc1@k" "\xf2\x1e\xfb\x9bz\xda\xab\x32\x97Y\x33\xd9\xa4\x37\xf3\x9fS\xe9\x42\xdd\xa8\xe3\n\xe1\x87\x83\xf2\xe1X\xa8PX\x98\xb2\xe0\\\x66\xb2\x8bi" "\xe6\xd7\x0e\x36\x43\x30\xc5\xd2\xd7\xcc\xd7k\r\x17\xb3\xfb\x86-\x02\x63z\r\n\x99)\x34X\xe3\xf1\x01\xe6\xb6U\xf1r\x8fz\xce|\xf2" "\xa0\x91x|\xe1\xbe\x1c+!\xc9\xa5\xc7\t\xa2!\x41\xbfX\x65\x83\xc4\x0b\x8eQM\x61\x1b\xcf\x05q\x92\x84\x03\xfe\xc6;\x8e\x63\xcaX" "\x88\x06\xc5}v\xde\x85\xcf\x96\x98h\xd1(\x31\x38L\xf3\xdd\x33\xb1\xaa\x82[\x04\x0e\xa0\x9d\xa1\xa6\xbf\xd2j\x0e\x0e\x11\x66\xc8T\xde\xdf" "\xc2\xa0%\x14*n\x9a\xd8\xce\x8fj\x07\xcb\x9f\x83Z\x9f\x02+,\x61v\xca\xac\xca\xee\x39t\xa2\x0c\x37\xd1\xc2\x1b\x01\xef\x14\xa3\x17O" "\x98{\x33\xa6\xdf[\xab)/\xfcm\xe6\xcc\xc6<\xc7\x00\xd9\x9c\xad\xa1{V\x39\x1c.\x16\x46x\xba~\x62\r[\xd8<\x44`\x0eQ" "/\x87\xce\xec\xedM\x1a\xd5T\xe7\xce\xb4\xf6(\xff\xa0\xf8\xeey\xa1\x94O~\x9c\x85tW\x85\x46\x95\x9a\xd9\xa4\x8f\xf8\x9d\xa6\xf2\xfb\x12" "\x06&\xd9\x1f\xb7\x63_\xdc\xc1\x15*\xd6I\xfb\xb4|\xc8\x9a\xe9>\xff\xaa$\xf1.\x02R\xa8\xbar\xca\xeb\x8e\xf5M\xa6\xfc\xee\x30\\" ",\xdcG\xf9\xb1\xba\xfet\xae\xfbZ\xf7\x98\x8b\x17vP\x85\xac\x9e\xdf\xa4\xdc\xca\xe6(\x43\xb1\xbfO\xfc\x04\xff<\xa3\xd4n\xe9\xb5\x15" "\xd7O\xcc\x93\xde\xc8x\x46\xa8\xacx \xd5\x8f\x06\xff\xb4\x05\xfd\xa6V\xd7\x1f\x89\xb9'\xc5\x83\xe4\xa0\xae\x8e\xfch\xebs\x07\x91x\x00" "\xe7U\x61\xd3n\x63\xc0,=`\xd1\x34\xe0{=\x80\x17\x43<\xc8-\xb6\xb4\xd0\x9c\xdc\xe3!\x1b\x46\x43lQ\xa4|\x04mnG\x88" "&\xe4\x90\xc5\xc8\x90\x83+\x43Ll\xfb*\x16!\xaa\xa7!\xdc\xc8\x85\x87/N&\xeb\x10S\x9f\xc2v\x17\x44\xc1\?L\xba%\xa7\xe4" "\x1d)\x11\\\x85\?\x44\x99\?\xc4\n\x16!\xbaX\xc3$\x9a\x81:\x12\x1f\xb1S\x36\x0c\xc4\xa0\xfb\x10\x93\xe4\x42tx\x87\xf0\xae\x35\xb2" "\x07\x33L+\x15\xf0\x0c\xbf\x8d\xb0.\x46)\xd7\xb0\xc1\x88)x|\x99\x99\x97\x0e\xe1\x63i\x8a\x45\xe3\x10\xdb\x45\x0b\xaf\xf6\x9d\xc9\xe6v" "\x8a\x87\x35\x84w\x8e\xd1\xe6\xaeZPx\x84>X\x35\xc4\xfc\xbc\xd0\xe6h\x8c\xb9\xfc\x43\x41;L-\xa0\xb8q\xdd&Q\x15\xae\x66\xd0" "\t\x97\x39\xe8x\x1a\x86K\x18O\x9c\x1c\x80\x1a\xa6\x1fx\x84\xe9\x17\x92\x15\xc1I\x8c\xeax\xce\x0c\xc0\x9a\x43\x99\x94\xb7\x82\x89Q/\x35" "\xfd\x97\xd4\xd4\x99L\x9e\xacq\x05\xde\xe2\xf7\xb3\xd6\x00|<\x02\x07\xa7\xa0\xc5:\x16\xce\xf9\xfd\xf9\xd0Y\xc8\x14\xa2\xc2\xcf\xa0\x1f\x36\x44" "\x38)\xe5\x14<\xc0\xb3\xcbO\x91\x39\x30\x9b\x66\xe4\xdb\xa6\x66\xa2\xbb\xa9\xbf\xac\x0f\xf4\x9c\xc9I\xdbM\xff%,>\x13\xf6\xf1\xca\xe4\xe6" "\x1f\x63L\xca{lG\xa9\x62\xaf\\M\xe9\xcb\x06\x93\x0f\x43\xccp\x46t\xd4\x87\x08u%\xb4Ym!\x9f\x31{M\xca\x42\xc6\x16\xb5" "ZT\x39\xc0<\xc4\x64\x97\xd0\xd6\x19\x19Y&\xa8\t\x7f\x30\x31\xd1h\x19\"h\xbe\xd1\x9f\x1eK\x39\xa5\xbf\xdc\x61\x8f\x12\x98\xf3\xb6\x9b" "\xec\xcb\x0eW\xbb\xb8p\xf6\xb7\x86\xe1\xf8-i\x13i\x46OH\xac\xb5\x11\xf6\xc6N\x8e]\xc3\x1c\x04s\xf9\x9b\xfc\"}\x38`<\x64" "\xdf\x61\x84\xe5\x36\x42\xb4\xc7\x95!\xd0\xbe\xa9\xb4\xd6\x86\xc3\xbd\xa9\xec\xe2\x9dOv\xf4\x87\x31\xa6Q\xb2\xf7\x01\x96\xfa\xce\xf4\xec\x14\xa6y" "t\t-\xc0\xa5plu\xdf(=^&\xa5O\xcc\xa9\x42\x35\xc7\x39\xda/\xaa\xb2\x9b\xbd\xc2g\xab\xdb\xb3l\xf2\n\x65n\x32\xf1\x08" "^~\xc2\xbb\xb1\x93%\xa0\x9a\xe9\xe9\x0e\\u\xe2Q~_\x03\x31\x66:\n\xae-j\x1e\x90g\xe0W\x15\x44\x06\x19!\x98\x9d\x31\xd9" "X\xc2\xa5\x06\xaa\xfa\xc6\xc1\\S\xd3\xab\xc2gY\x7f\x8c\x95\x05\xa6\xf2\xc9\x84\x9fq\x8d\x8c\x11.\x30\x62.\xf0\x11\x07\xba\xdf\xe1\xbe/" "\x44\xd9\xf1\xce\xe2\xfe\x9d\x89\xf8\x8e\xc5\xd2\xf1\xbb\xc6\xc7\xfc\xfd\xe6@\xfb\xe7\x1f&\x31\xb8\xc4,\xfe\xcc\xc7\xf6\x43S\x84\xeb\x8a\xa7\xd8|" "@\x88\xb2\x66\x9a\xcf\xec\x45\x9a\x62\xa9\xa0\x10\xe3T\x33,w\x89\x97\xec'-\x13[\xbf,\xec\x36u--*\xd7\x65z\x35Z\xa1\xb6" "[\xca!].\xd5m\x42\xb5\xe7\x88\x8a\x1b/\xe5M\x43\xc8\x34\x37\xad\xbe\x94\xc6\xbb\xf9\x32h#^[W`\xda\x39\x83\xa9\x65\xbc\xf2" "\xa8\r\xea:'\x30\x19\x1f\xa5\x97o\xae\xd2\xb7\x87<.\xbbZ\xcd\xcf-p\xbc*\r\x41\x00z\x80\x64\xa8\xec\xe3\xcc\x66\x0c\xbc\xf7\x00" "Z'LL\xebR*uI\xb3\xd0\xfc\x17\x85\xf9\xf7\xa7m\x86\x45s\xf6\x61\xa6\xbe\xb9\xbbs+\xf6\xd6J'\x87U\xe9\x64\x10\xc8\x93" "#&\xa1\x32^\x18\xa5\xc9.\x66\xb2\xdc\x30\x65\r\x95\x64\xe3\xecoz\xb8zh[\x08^S\xc7\x64\xc9\xda\x37j\xfe\x8e\xe5\xff\xa4t" "\x05\xa5\xad\x07\x63\x19\xd4\xc1\x33\xe3\x98\t{\x66o\xa6\xf1\x14\xd4\xc0\x63z\x8am\x1c\x37\x8f\x1e\xa5n\x66hl\xe7\xd5\xc5\xdf\xe2\x19j" "\xbf+\xd7\xb3\xd2\xd9#S\x33\xf0\x80\xe4\x65\xd8\xdbn\xfc\xb2`rj\x96#\xb0\xc2\x9f\xab\xf0\xf4\x95\x31X=\xca\x9b\xf7\xd9\x36n\x34" "\xa9\xe1\xba\x93:\xbf}\x33\x07\x1b\r\xf9yI\x14\xaa;\xb0\xf9\x44\xf2\\\xb7\xfc+<\x8b\x33\x9b\x0fU\xf6\x16\x9e\n\xc9{U\xa3\x9c" "#\xb7\xa8R\x0f\xba\x82\x8a\xcb\xb6\xcc\xd2\xd4\xbb\xbc\xe2\xe6\xff\xa4jZ%y\xa7\xda\xb6W\xce\x98z\xd2<\xf6\x9f\x98o\x90;\xa0'" "\xe1\xe2\xd9\xfc\x14\xcc|\x07\x63$\x46\xba\xf5\xe6\x94rV\xda\xe5\x05\x95n\xf4\n\xca\xa2\x34\xa9:\x38p&\xa5\xa9\xb5\xabT\x1dn\x92" "\xc7\xe4\xb9S\x87\xde\x37\xf8k\x87\x1dP\x37\xef\x05\xd3\xa3K\xeb\n\x98Z\x38\xe5o\x92J\xc7\x66L\xf5\xc0\x31R[\x07\xe1\?\xc7\xab" "\xeb\x98j\x8b\xec\x82%l\xaa\xda\x0bg~\xca\x94\xbc\xe7\x1d\xf7\xc8>\xbf\x32\x62\x8a|>\xd9\x80\x0eL" "k\x35\xa8\xf9\xc5\xd4\x64\x1e\x10J.\xb6\x45\xdfPY\?\xb2i!\xaa\x38\n\x9f\xe9\xf6=\xc2l\xf3\x84\xc4[m\x8b\xa2\x94\x87\xf8]" "[\xca\xad\xd4\xb0\r\xca\xdbW\xa7-\x99Q\xf3\x19\x8f\xc5\xd6\xde\x80\xfe\xc6\x66\xaf\xc8\x8b\xb6\xf5\x88R\xa3\xe9(\xa3\x9f\x64\xf0\xec\xd9\xd1" "\x06-\xc1\xe4\xf7\xc3\xf3\x8d\\\xac\x31\xdf\xde\xf6;\xcf\xb7O\xd4\xa9\x9b\x37-\xcas\x11L\?_\xbe\x8b\xa7'\x39\xd1\xda\xb6j\x9e\xbc" "\x91\xb8Ms'P^\xe1\xa7\xf3\xfaoR\xc5\x1d\xe6\r\x9e\x93\xaf\xa8p\xb5\xb1g\xce\x63\xaa:\xbbN\xab\xba\xcc\xfc\xd4\xcd\x1d\x1eP" "\xbe\xd9(\xb9rxo\x91\xd2\xd4\x1c\xf1N\xde\x91\xe6\xb6\xac\xdb\xf8H\xf2\"\xbf\x90\x8d\xf3i\xc5\x33\xa2\x35\xe9@\x8b\xbek\x66\x9f\xe4" "--\x86\xab\x1a/}\xb1($\xa0\xeeP\xeb)\x12\xef\xdb\xb8\x8b\x99(&\xccg\xc7\x88\xeb^\xed\xe3i\xae\xceP\x16\x98/\xab\xf2" "\x62\x93\x44\x86X\xd5\x90!,\x9c\x8e\x12\xf9\xfe\x42J\x32\xf9\?\xdf\x39\x85\xfa\x99\x80s\xcb\x1b\xd7\xb6*\x1a\xf4\x10\xfa\xaa\x16#\xd2." "\xf3:=\xb8\x02qN\xe1\x0bx\xdb\xd3\xf8\x90\x87v\x65\xd7\xac\x80\xae\xcdS\x0c,\x9c\x33\?\xb6\xfb\xac\xdb\xf8\xab\xd0z\xa5\xca\xd3\x05" "\x88\x42\xa4n[\x9a\x0bmLI\xd9\x94J\xf4\x30\xc7kXgQ\xa3\xb4M\xa6i\x0e\xbbnZ$^\x35\x1f\x46\xe1\x0bS\xbb\xbe\xba" "\x39\xad*\?\x86 \xd2\xa0n\xdd\x10\xe5}\xcf\x99TK\x36\x61@\xd5\xbf\xb0!\x0eU\xa3#\xa7\xff(\xb3\x82\xd2\x0f\xad\x36\x0e\x9d\xd6" "\xbaU\xb3\xf6\x64\xaf\xc8\x0f\x14\x32\xa5\xc6\xe4\xd2\x61\x8a\xa3'\x8b\x12\xaa\x07\x9e\x97\xe0\xd4\x8a\x83\x1b[u#L\x8e\xe2\xf4\xa4\x65sn" "\xaa\x1e\xea`\xf7\xd9\x99\xbc\xb7W\xcb\xba\xf9W\xeb\x81\xe1\xb5\xfc\xa5\x85\xf4Q\x85\x92\xe6\x46\x1ez\xb2\x7f\x62\x11\\\x45\xa5\x9b\x38\x99\r" "\xd6)\xdb\x15\x31-\xea\x9b(\xddm\x63\xb3l\xb1\xc2T\xa1\x08\xb9\xc9\xe2\xb6\x1c\xcd\x66VP\x63\xf3sP\xaa\xf1\xa0\xd6\x8b/TM" "\x1e\nW\x62\xe3\x39\x42\x9b\x32R\xe2uR\xda\xff\xcb\xa0\xb6J)J:" "\x99\x45\xd4\xb4q\x43\x35\xd1\x9a\x12\x1e\x90\x33\x30\xea\x90=\x10M\xa8\x96\x39\xc4\x18-\xa1[\xc9\xc6\xcc\xe9\x7f\xca\x17\xa5\xc5V\x96\xd2\x96" "\t\xa8\x89\x66n\x8b\x8d\xaa\x96.Y\xb8\xdd\x08\x7fx\xf4\xec\x64\xe3\xae\xc5\xe7\xd0\xf2+\xd7-\x9fwx\xa8r\x45v\xc8nr\x15\xfd" "\x45G\xae\xf2\xe1\"(\xbc\xb3-\xdb\x88@y\xf7\n\xa2\x41\xdc\xb2\xad\x41\x94\x83\x9a\x33\xfc\xcc\x90\x1c\xed'\xbb_\xf9WI\x97\xaa\xe0" "\x85l%\x63i^]\xaf\x06[P\?<\x8a\xf6S\xcb\xfc\xfd\x84R\xa1\xac\xea\xdd\xf4\xf2\x04\xea\x64\x1f,\xe1\xdb\xd6UP^\xee\x82" "L*\xf5\xdb\xfb\x19\xdaH\xad\xaa\xfa(=:\xb3\xad\x96U\x35[\xe4\xcc\xa9+\xde\xbbx\x44\x36xm\x44\xfa\xdb\xdau\xd0S\x9a\x65" "\x9cR\xfe\xd6\xba\xe8\xaa\xc6\x13ul=\xc0\xc9-\xce\xa1\xf2\xe2\xc9\xe9\x7fn\x61\xb8\x95\xaf\xb8\xf6l\x38u\xea\xbe\x82\x03\xdc\x81\xf5\xb8" "\x84l\x63\xb4\xcc\x91P\xb9\xfb\x9b]\xb4\xd8'i\xd9\xfa\x44\x30;\x19\xdal\x95*\x94\x0bJ\x1b=WsTrJ\x83+\xad\xbeP" "\xe1\x89Z\xb0z%\xaa\xc2\x96\x8d\xfd\x82:\xd1\xd0|\x83\x12\xf3\xe4W\xda=P\xf1>i\x65\x65\xcb\x46-\x94\xbbg\xce\xf4k\?\xdd" "\xc1\x9b\xc2\"\xa0\xb5:\x9c\x80g\xb8\xf0\xd5\x65\x13\xac\xe1\x81\xda\xbe\xa9J\x14\x99-[\xd7\x0c&\x95\xd3\xf4\x04\x0f\x45\xe3\xf4,\x62\x96" "\xe4\xf7,M\xef\xad\x33+L\xfa\xc7\xe0h\xee\x64*\xea\xd4\x44\xb2\xf7\x9dT\xec\xbd\xbf\xb7\x08\x31J\xe4\x88{\xb6\x35\xee\xcd\x8f\x0e\xf4" "\?\xcc\x87\x43'\x8b\x84{\xeb\xe2'\x1b\xbd\?\xe4\xd4^\xb2i\xc9\xf4h\xab\xc4\x84\xe9\x46\x1b\xdc\xa9\x90-pj\xcf\xfb\x91\x85\xbe\x14" "~\xd6&\x7f\x66[\xff\x99m\x9b\x97\x04-\x8d\x97\xa4\xd6\xb1\x41\x12\x31\xd3\xd6-{\x06/\xe9\xfdV\x86\x9e\xd2\x80\x19k`\xae\xb8\xca" "\xde\x04\x1c\xd9\x13\x1aX\xa0\x43\xa1\x14\x90\x7f\x33)\xea\x8f\xcd\x1bX\x0f\x44\xa7\xd9\xc9\xb3\xfcS\x35\x63\x91\x37\xb3\x11\x04\xe3\x14<\xbaw" "\xf2\x97\xd4\x34\x97\"\x98\xe9\xf1.\xbc\x13\n\x7f\xe1\xae\x10\x41\x85\xcf\xd0\x9dS\xae^\xafm\x90Q\x94\xcd\xc4)Q\x0b\xccX\xf5\xcd|" "\x1d\x06L\xffM\xbe\x93\x1a\x8e\xda\?\xe5\xab>g\x89<\xb7\x8d\x00\x94\xad\x16\xd8m\x82(\x90\xe6\xe6\xeb\xaf\xc4\xc3S\xeah\x66\xa5\x1a" "\x14\xa7#\xa0\x92\xff" "\x8f\xae\x33]J\xaek\xde{r&\x39\xb8|O*IU\xbe\x8a\xc8$\"\xea\xad\"\x83\x33(*\xf3,\x83\x9cK\xfe\xee\x81O\x39" "\x85t\xf7u\xf5\x86\xfb}\xf2VY\xfe\xba\x37\xb0\x87\xb5\xd7\xd8\xabW\xafT-\x11\xff\xa4,\",\xb4\xf0\xa6\xc3\x91\xafi\xe3\x36\xdf" "\xf6^\x93\xe2\xce\x41\n\x8f\x99\x35\t\x9a\x1a|\xa6\x0f\xae\xb1\xcf\xba\xb6`=\xa0-\xfdQ\xf1\x8e\xacO@T\x41k\x8e\x0b\x94\xec\xb3" "\x98\x88\x8e\xc9\xda\xec\xa3\xc2]*\x07\xa2\xd0\xfd\xf0\x8e\x7f,\xae\xbd\xae\xf1:\xba\x02\xd1\xb0\xfc\x04\xf9\x95\xd3Ly*\x9e\xd6\xc9\x36X" "Z\x80\x17\x17\xce\x38\xbd\x88s\xd9\x44{\x9e\xc7\xc7O\xd4.\x9dl\x99T\x34\xe3\xa9/\x30\x03Y\xd8~\x82\xfa)\xb9q\xea\xffG\xfe" "v\xcf\xc3\xef\xf4\x66\xce`\xb0\x31\xefxh\xd1W\xf7@\x8bK\xcf\x89\x36\xe0/\xe7/N\x8b\xae\xd8vM\xd7\x06\x9f\xf6]\xd3}\xe4" "=}\xb6i\xa7=w\x36\xd1\x06\x1bO\xa8\x30s\x03\xde\x36\x9c\xac\xa7T\xb4\xa9J\x88\xee\xc7\x0b\xcd\xd6\xb8\x42\x34\xd3\"\x44\xb3\xe2\xaa" "\xd8(\x81\xcfx\x81\xe1\xf8\x84l\x93xq\xb6\xca\x03\x0c\x9a\xef\xbbz\x9b\x1a.\x13u/\xcc\x10Q\x84\xd6\x1b\xda\xd0\x10\x89\x12\xfdX" "\x61\x87\xc5\x12\x0c\x8b]s\x16\xa3\x36n\x1fh\xbe$\x10\x9a&\x91k\xc7O\x36\x04\xfc\x86\x96'\xdfp_\xfehq\xbf\x00\x0e\xf2 " "\x06U\?\xb6\x82\x41Y\x9d\x83/ZZSi\xe9\x43\xe8\x8c\xb8\x19\x31\x44S\xc7I\x9d\xc4\xa9T\x82\xd2\xfbn\xfd\xc7\x35\x9d\x06w\xad" "\xfb\xe6\x93>\xa2\xc5\xdf\xe0n\xfd\xb4k\xf5\xcc\x19#H\xe5\xcc\x31\x45\xa9S\x36J\xabS\x8c\x18\x41\x8b\xb8J\x39\x0f\xbf\xa8\xbe)\xc6" "\x96\x33\xfey\x30wH\xd5\xd4\xcf\xd7\xb8\x35\x06\xba\x02\x15\xf4\x13h\?\xe7\xa2t\xa8Y\x17J\x44+\xb1\x46\x19I\xa1\xfe\x10\x8dw\x13" "\x64\x32\x64\xc7\x19N\xcf\xa3w\xdc\x63\x90\xbdr\xfa~\xc4\xd0lZ\x16\"J\x9a\x88\xf9,\x8c+*\xf2\xd2\xa7u\x0b\n\xbe\xa4\xc6\x9f" "\x9f\xb6\xfdyl-\x8dR\x1d\xef\x8d\xbc\xab\x8b\x37\xf5\x9e-#-\x92\x8b\xfd\xe9:\x93\x8bj\xe0\x1e\xe5\xedIr\x19\x33\xe7\x19\xd1\xb5" "\x11\xf1\x95\xf7\xd5|\x87i\x43\x44\x33i\nu\xbfQ\xa5\x7fU\xa7\x1d\xc1\xe4\x1a}~\x34('\xdf\x1a\xf2\xb2\x0b\xde\xd9\x02\xc7Q\x11" "\x19\xe3\xed%jg\xd1R\xb3\xdf\x05\x1eT:\x8e\x07/]\x34s\x96\x30q\xec\x44\x07U\xc5\xa5\xfc\x41<\x41\xba\x84\x99\xbcm@\xae" "\x62\xbe\xecT\xbf\xc8T\xedP\x63\xaa\xc0\x98\x62\xd4;\x35s\xdf\x32n\x9c\xc9W[\x1b\x7f\x44\x9d\x14M\xd5\x42\xb3K\x89\xf6y\x45\xd6X\xe6k\xd2\xe4\xc0|" "#\x62\xef\x8c\xbc#_\xc0>R\x81\xd5\x95\xf2w\xedUz\xcd|\x95\xc0$\t\xe6\xad\xe4Q\x17\xc7\xe6\xc3\xaf\xe2\xf7\x96\xbd\x1d\x8a\x1e" "\xa0]\x0f,O\xc0\xb5\x93_\x94&]\x93n{\xa0\x85\xd5\xe5\x81\x66+\x8dT\x93\xc1\xbd\xa7\x84\x8c\xd4\xf3V\xfak\xec\xb3\xd5\x12\x1d" "\xfd\x33\xa5\x9fT\x44svR\x91\xa9/#\x8e\xe8\x0b\x37\x16V>\x92\xa3Os\xf0\x05o>\xec\x16\x0e\x92\xdf\xd6\xbb)'+\xa7\xe7" "\x1e[U\xa3\\=\xc3\x64\x9f\xaa\xb1\x06\xa9\x45\x85\x33\xb2.\xffm\x11\xb0j\xd7\x8f\xec\x7f\x9a\x88\x1e_\xcdwpR\xb1\xba\x91\xa3~" "#\xba'{*y\xa1\x07\xe4`\xa6\xc6\x96\xbc\x16\x35\xd7\x61\x11\xaf(j\xcd\xfd\x65\xb0\xa3V\x8bz\x15\xf3xVq\x65\x35\x44\xcd\xbc" "\xbf\x94\x65\xfc*~M\x45k~\xc4\xa8\xe0*\xf6+\xe0\x64\xed\xf4p\xde\xaaM\xf1\xad\xddU\x1e\xae\x19\"\xda<\x98\x10\xd5\x41\xcd\x02" "\x03\x80~%[\xb8\x0f\xfaM\xec\x16\xcf\xa4}\xbb\xc1>\x87\x12\xf6\xde\x14\x36\x9d\x00\xc3\x9b\xc9\xeey\x0b\r\x9d\x11\xe1\x65|\xb1\xe1+" "h\xc0\x92 \\\xdd\x81\x66\xde\x17n\xedr\x8d \x7f\n\x9e>\x80gG \x46P\r\x98lR\xd8\x1d\x41\xf9\x86{`\x1f\xae\x11\x0c" "\x16l\x31\x1b,\"Ji\xa4-\x38\xbej\xab%h\xd6,\xa1Ms\xa4\xb0m\x80\x32\x7f\xe7\x64\x16h\x30\xfb\x36\x30I\x9fj\xc0\xa2" ".,q\x9a\xc0\x44\x0b\xa5\xa3\":i\x8d\xf0\x12\xcf\x1f^!\xe1\x30\x33\x9fj\xc0\x86n\x0c\x0e\xc4\xfb\xcf\x44\\\xe2\xce\xc2\xfb\xad/" "\x45S\r]\x84\x46\xd8\xe5\xc5\xbb/\xce}\x1d\xa0\x9a\xdeUs\xe8\x9a\x0e\xee\xfe\x0b\x45mw\xff\xf3\xff\xfc_\xff\xed\xbf\xff\xef\xff\xf6" "\?\xfe+\xbf\xc0'\xb4\xc9\x66\xe1\xf8\xd4\xc9.\xa0\x8a\x16\xd4\x03\xa2\xad\?\x83h+rT\\=\x38\xb5}@\x37\xa5\x01\x63\xbe\x31(" "\x95\x61\n\x36\x8d\xb9Q\xc4)x\xdd&\xa9\xdfT\x9d\xfe\x8em\xa7\"\xec\xdd\xa0Z\x1d/\x88\xc5\xab\x61\xeb\x9a\x95h@\x1a\x16\x8f\x10" "\xf4\xdd\tU\x43\xab\xdd\xb0\xd8\xb2\xca\xdbO\xa7\x9c>\xf9\xcd\x33\xae\xc8\x31\x87\x10\xef\x0c\x33\x98\x46\xdf\xf3\x1b\x9a\xbf\x41\x15\xf9\xda\x44\xf4" "[\x12\x11\x93\xe9\xec<\x37\xd8\xf6\x37\xe2\x9f\xfa\xef\xfa\x0b\xfe&\xa9\x86\x9a\xfd\xbb/\xe6\xb0\xa6Z\x05\xf9\x05su\xc6p\xd1w\xd1O" "\xed\xa5\xccv\x82\x35>\x82\x1f\x33\xd2\xea\xac\xd6\xef\xd6\x9e\xa4\xc5Z\xb1\x65\xbeo\xe0>s\xa9\xa6\x01\xee\xf2\x33h\r~\xe7\xb5\xe7\xe4" "\x80\xbf\xc5>t\xcb\xd6\xe4\x82\xbe\x36\r\x9az\x8c\x95\x1e]\xdb\xbf\x00\xd3PY\xab\x18\x9d\xcel'\xba\x44\x63wW\x35_\x9d\xae\x9a" "M\x94\x18\xe1\xb3\x61\"\r\x16\xad\xf0\xe8\x39(\xf7\x99n\xad\xb0\xb2\x04\x91\xa7\x95\xc1\xdb\x31\xd3\xa7\x15=\xe3\xda\x98\xa7\x15\xfe\x9c;\xd9" "\xd2\xa8\xe8\x8b\xfd\x44\x8b\xd3i\xa7-\x0fS\xf1\xe4\x07\x44\?\xa9\x85\xa9n\xa1\x99\xe2\x84\xcb/'\xcc\xc9&\xb2:\x32\x11\x15\xbd\x8a\xb6" "`,P\x83\xc9\x91S\xbaR\x16_]\x35\xf4#\x66\xb4^)\x39\xd6\x34\x11\x1d\xf1Y\x90\xdb\xd0\x12\x35\x63\xf5\xa8\xd4\x1d(\x31\x90V" "\x8d/n\x66;\xd3(\xebO\xb6$\x46\x45\x8c\xc0g\x98\x64\x11\xf2\\\xec\xf2\xcf\xc2\xa7g\xdb\xc9P\xc5\x41\xcf\"\x0b\x8a\x88\t`\xe3" "\xc1\x95\x34\x30!\xaf$\xa2_\x81\xa3\xe8\x19{\xea\x33[\xc2\x11pS\x15#N\x1f\xa7\xae\x83\x32\x82\xe4\xaa\x86\x8e\xf3\xcc\xdci\xc1`" "\x9d\x96.\r\xb4\xef\x13'\x8c\xaa\x10\xcdu\x30\x35\x83\xd9>\x35\x97\xeeix\xb9`\x97|\xfe\xfb}\x07\xa2I\x9a\x33y\xe7\xb4&\t" "\xe7\xce\x83\x43\xb6\xc5\x1c\x44\x39\x97\xfc\x41\x33\x9f;\xa1\xcd\x06\x1b\xf9\x38\xf3\xe0\"M\xe6=\xf2!\xb4\xb8\xf8\xb8\xd7:\xce\xe4g\xd7=" "\xf0n\x02\x36\?\xc2\xd2\x0b\x1b\x9fy\xd0Z\xe8\xc9\x30\x36\x9d\xb3\x99\x9bs\xac;\x0f\xfaW\xbb\xa3\x94\xad\xa8Vm\xder\x06\xb9\x32[" "\xbcy\xf2\xdb\x05\x7fk\xf3\x37\x42\x8cJ\xe7\xec\x81\x0b\x07`\xee\xca\xe9\xb7\xc8\x16pn[\xd5(\xcd\x11\xcd\xd2\x05l\xe0v\xc2\x97\x94" "\xde\xfa\xe3\x10Z\x87\xdf\x42\x17\x42\x99\x9c\xd0\x1c&\x8dlR\xe6\xec\x9c\xcd\xd9\x39\x9bGg\xe7N\xff\x15\xf3\xd1\xdc\x82\x38*\x1b\x45r" "\r\xa2I\x98'\xa7l\x9f\x1f^\x00&\xd1y\xf4\x99&[N\x0e\x9f\xe7\xec\x94\xcd-v\x88\xf2\xa5\x0bN\x91\x34\x16\x44L\xb9\xcd\x91" "V\xf7\xccwG\x38%\\\x91\x84Wx\x16\xdb\xc9N\x89\xday\xbe{\xab\xca\xd5i\xc6\x99K\xd7J\x07t\x32\"\xae\x1d\x85\xa7\xa7\xe6" "\xce\x9b\x1c\x96g\xf9\xc7\x61I\xee\xa8XqM\xfd\x02\xa0\xad\xfe\xe3\xd2*`\xec\xa3\x12\xa4~\x38$\xd9\xb2\x97\xb5\r\xcci\"\x85\xfd" "\n\x84!Z\x83-\xa6\xa9\x85\x9d'\x10\x96\xcf-&\xa8S[[\x87\x14\x1c\x1f\x05'\xcfN\xf4\xed!^o\x31\xe9x\x9c\x81\xc1K" "\xa8{\x86\x15L\xd4\x38 \xd6\x05\x12\xf1\xab\x88\xf9\x63\x17\x83\xf2\x1d\xb2\x90\x1c\x18Yt$\x8dr\r-\xbc\x95\xce\xe2\xd0\x34\x98\xfc\x8e" "\x33\xbb\xdc\x19\x7f\x9f\x0f\xcc~l\xb4MM\x82\x63\x19\xfe\xf6\x9ch\xe5T\\\x46\xfd\xa1\x45\x9c\x84&\x43\x62\xcc\x93\x1e\x97\x82R\x1el" "\xbe\x63R\xf4XwG\xf6_\xca\xb7\xa4V\x42+!Z\xf5\x8c\xac\x81\x8f\xe3]\xad\x0c\x0f\x02\xc6\xcc\x15\x8a\xae\x01i\xcc\xc0'ZQ" "\x9a\xa2'T\x31\xa2\xbd\x1f\xeb\x0e\x42\x96\xae\xa2m\xda\xa0\xc6o\x04\xfd\xc2\xf1\xd6\x92\xba\xa4\xa1\x01\x7f\xee\xfd\x66\xd1\t\x10\xae.\x9d\xfc" "\xc1\xcb\xef\xba\nn\xednh\x97<~\x45\x43q\xdc:t=;n\xc5\xe6\xd4p\xfc\x0eS\xf2q\x1b\xee\x35\xc7m\x9d\x46\xc5Gm" "\xb8\xcf\x08u\x9fJ\xa5\xf5\x00\x95\x39\xa7\x34\x02\xcc\x12\xaa\xf1\xdc&\x9a\x83\x8a\x89\x1a\xb6\xd9\xa6\x0bL\x83\xa5\x85\"\x7f\xa9\xe1S\xc0\xe4" "\x12\xfc\x01\x1f\xbb\r\xe3\xb0\x31\xd2\xe5\x13&N\x9c\xf0<\x37\xd1\xd6\xf8\xb9\x38\x84\x38\xfav\x86\x0f'\x30\xfe\x9a\x96\x9ci\xf4\x8d\xc9\xb5" "\xe3\xb6\?\x81\x9awx\xa3\xb6\x83\xb4r\xc4\x39U\x86\xd8\x01\x83\xc5\x85\xdf\xa3j\xd6\xe5\x33\x11}\x64\x13\x61\xe2\x83\xc8K\x8a\xe8O\xaf" "\xe2\x9f\x19\xba\x10\xd0l\x1a^\x44\x64g%z\x0f&&\xe7\xad\x94\xfd\x01Q\xe9\x1c\xb7\xfd\x8e\xfd\xcc\x42\x16\xc3\x0f\x16\xd2\x0f[\x46\x19" "\xa8s\xf3\xd8\x19n\x8fl\x19\x9dj\xcb&\xf9N.\x83V\x11\xee\xf5\xa6\x85\xe3O\x0c\xf7\x44\xb3\xc6\xc2\x88\xda\xf8\xb8\x63\xab\xe4\x94\xa7" "\xb8\x08\xba%\x46\x8f\xd4\x06\r\xfd'\x13\xe3\xd7\xe3\x83\xaf\xedr%[\x63\xa6\x9a\r\xa4\x84\xe6\xa0!\xb4Ir\x63\xf2\xf3\x8b\x0b\xbe\xaf" "\x8e\x0c\xa2\x61 >\xc6\xca\x10\x65k\x06\xdax\xee\xb8\x83VMhn\xda\xc2\xd3;\xf0\x1a\xdf\x0b\x87\x15p\xfc\xe9\xf4\x0b\xa9\xd8|\x87" "\x85\x14\xda\xfa\xdb\x45\xbf\x03\x15\xff \x30\x9ah\x16\x03Oy\x9d\x30\xf8\xc8\xba\xe8\xe9\x1d\x35\x12\xfa\xa5T\xb4i\x1a\x88\xd6\xba\x9bh\x8b" "\xd0)\x36\xfa.&\x1d\x65\xd3\x30)#\xe2;\xafj\r\xddq'\x36\?>\xa3_\xc7\x82\xcf*{x+\x98uQ\xce\xc1\x01\x39\x45" "\xea\xec\x34\xc6\x94Rw\xa1\x0c\x8eG\x16\x8a,\xb0\r\xcd\x8d\xc1h\xe1L\x9c\x03\x8fG\x16-\x15\xfc]\x9c'\x36P\xdd\xd2\xbc\x05\xa2" "\\\x8f\xd0\x89\x14\"\x35G\xd1}\xdbi\x1d\xe1[\xd7\xe2\xdc'\xa6\xa0t\xd3r\xcb\x89#\x39\x04\xda\xac\xa3p\xd2\x94\xeb\x31\x15G\xbb" "\xfag\x90;\xdb\x35\x1a\xae\x85\x9d\x65\xa2\x39\?\xedj+m|O^\xa3\xea\n\xda\xf7\xb9\xfcQ\xbc\x00\xad\xbf\xa8\xb4K\xafl\xab " "\x90\xb5\xf0*\xb8<\"\xa7\xf2\x07\xd1L\x85\xc6\xdf\xc5\xe7\x81\x98\xfc\xa6\x39\x91\xffp\x38\x16\xad{\x41~\x80\xc3\x13p\xb1q&\?\xfc" "\xc6\xf5\x99\x8c+x)\tk\xf8\t\xfa\x41\xc2\x0eN\r\x87p\xa1\rg\x8fW|\xab+mO\xf7g\xf9\xbfk}ki\xce*\t" "\xbf\x65 \x7f\x01\xd1^\xb7\x8c\x38t\xa7\x1b\x65\xf9\x32\xb2,/\xa2\xae\xeaR\x36\xb1\xed\x88\x89\xef\xc9\x0f\xcc\xefV\xd8\x1aG\x36\x05\xa4" "\xe2\x0cUs\x9a\x33,\x42\x8d\xf0\x64|\x07\x37/N\xcc\xea\x8bh\xc5\xd9\x88\x01\x46\xba,\x95\x1b\xda\x38\x11\x0b\x7fv\xf5\x39\xc4;\xdc" "\x17J\x8b\x12w\x02\xfb\xa1p\xdc\x32\x46\x99\x07\xe9\xad\xfe\xae\x8ax\xa9r \xdf\xb1\xfd\xe5U\xb4\"o\xb4\xc5\xe4*\x16q\x1f\xf2\x14" "xQ\"Z\xcd\xa6\x9c\xfb\xe3\xdaV\x85\xca\x1a\x1e\x0c\xf5\xae\xd0\xec\x99\xc2\t\xa9K\xd0\x85\x98#\x10\xda\x8b\x11\x0e\x1aq\xbe\x03q\x84" "\xa4\x8e\xb7U\xbfu[\x31\x16\xa4k\xbf\xd6\x9a\xa4k\x16\xfcX\xc8G\xf4\x44\x7f\xb7\x08\x1c\xc6\r\xa8\x31\xd1\x41_]\xab\xda\x16\xdf\n" "N\x9f\xa2\r\xe2\xec\xa9\xd6\xac\x45\xa3\x16\xa6\xc4\x44\xeb\xe3\x8c\xc1`\r.\x36\xce\xe8l\x02Q\x83I\x08\xe1_\x93~\x87\t\x45\xf8\x8c" "\x8b\xc6/\x38n\xab*\x95\x36\x83\x9a\xee\xfc\xfe\xd8{\xe8\x04i{\xde.&\x0e\x8c\xda\x9f\x1c\x41\x43G;\xdd\xb3=Y\x84\xe8\xeby" "\x9f/=\x85\xd9\xd0\x08\xc3@z\x8av\x45h\xeb\xa4\x84\xf5%s\xcc\x34\x18,\x9c\xd1\xe6\x32Z\x35\xa0\xe9\xbe\x18\x42\x8b\xa1\x05j\xd4" "\?k\xf0\x44\xb3\xe9\xfa\xf4\x14\xb3\x8c\x42s#\x13>\xdb}O\xe3\x9a\xe5\xdd\x15\xd6G\t\x35~k\x32u*\x9c\xcf\xc1\x1f\xe8\x98\xc5" "I\xaf\x30\x0b-\xac\x16\xc1{\xed\xc6\x9d\x64\xc3\xfc\x95\x11\xe9+\xacj\xf9:\xc9\xd9\xda\xf6\xe0\xa4h\x91\x04\x95\x1a\xdf#\x38\xb9\n\x8a" "W\xff!g\xcf=\xcb\x30>Z\x8eqL\x03\xd6)_\xda\xa0U\x8a\x42kW\x84\x36\xed\x62\xf4\xd8\xfd\xaa\x99M\xe7\xe4\n\xeb\t\x84" "V\x82\x84\xba\x01!\xa8\xf1\xf0ti\xb0n\x37\x63M\xdc\t\x87\x86\x42\xf3\xaa\x38\xb9\xc2s\t\xebv\x1c;\xdb+-s\nu\xb9\xa3" "r\xfb\x61\xc4\xeb\x32\xda\xee\xdc*\xda\xd0Zxs\nZ\xbd\x62T\x1f\xf6t\xc6\x35\xb5s\x9b\xa3\x9ci\xeak\x62\xb3\xc3\xae\xd9\x82^" "hqq\xb8\xab\x9f`\xbe\x43\x0e|\x8e\x9d\xb6\tR\"\xa2\x82\x15\xcd\x8a\xb8\x11\xe5Q\x45K\x95-\xbaT\x42\x1b\n\x0bm\x89\x8c\xb0" "\xfe\rv\xcf\x8c\x1a\xdaK\x03/\xa9h\x13\x8f\x46\xbe\x81\xad\xed\xee\x03J#\x13\xd4\xbb\xaeY\\>\x8a\xd6\xc9\x46W\x0e\x07\xb6i]" "\x9d\xbe\?\x85.\xc4\?\xd0\xee\xd3\xba\x00\?\xd3\xb1\xb0\x08r\x0c\xf3y\xc2\xb3\x99s\x97\xc1\xd9P\xdcO\x10]X\x08\xaf\x04\xa1\xcd\x81" "\x64\x8e\xe0X+\xcc\x1c\x81\xba[\x97\x30zO\x83\xd6\x08g\x8e\xd0\x08+\xf1\xbb\xdd\xf7\x17\xa9\xa5!\x93\xb2\xb8\x90J\rO\xad\xd4\xa8" "\x35J\xb3\xbagR:{\x9d\x99\xc1\x8b\x0c\xday+\xd1\xe4\xe9\xe4\xbf=\xa0p\xb2\x31\xc6\xe6\xf2-\xb4\xaaI\xa3V\xde\xda\xfe\xdd*" "~\xbf\xa1\x62\x15\xd1V\x11(g\x46\xf9\x93\x31.\x86\xb9\xa2\x99\xb7\xaf\x30\xc7O\x8b\x45\xf0\x0c'\xd2\x9d\x9cy\x02u\xee\xefU]\xb4" "\x30\xf2\x14\x97\x9f\x14G`\xb5\x9d\\\xec\xfe\xdeiq\x35T\x34\x1fZ\xe5\xa7\xdf-\xf2\x98\xb0w\xefL\xbe\xdd\x43(\xc4\x44<\xf8 " "\xb4\x15\x04\x99t\xf2\x05\xf9\xd4L\x62\"\xda\xe8R\xf8=\x31\xda\xbe|\xa0n\"\xd6Z\x1ch\x61\x16W\r\xf3\xe7\xe0\xedw\xd0}\xc5" "\xec\xbfh\x66t\x12\xd6G\xce\xa0\xae{\x32\xa1\xe6\xd0\xc4\xcc;\x7fW\x1b\x8a\x15\xa7\xdf\x10\x9c\xa5\x95_\xce\xf0\xee<\xc8\xf3\xe8\x33\x12" "\x33\xb4\x89\xcd\x0c\xb6\x34R\x0e\x1fQ\xc9\x65\xd2\x9eVhG\x85\xd6~\x1a\x83K\x8d\xd2\x06\x43\xbd\x1d\x88:o\x98\x12\xcb\xa4\x91\xf1\x8d" "hv\x44\xecw\xe1\x9a\xee\xa2\x14\x1c\r\x83\xd1\xcf\x1e\x1c\xf3]u\xf5\xc0\xa0\xe8\x8c\xceXy\x65\xd2\x16*@y\x95'\x0b\xe0\xcd\xd6" "i\xf1\xb8T\xbc\x1b\x83u\xbc\x14\xf4\xa0\x85\x8f\x63gpu\x66\x8b\xc6\xa9\x35\x87XS \xda\xeb\x63<\xbd\x8b\x99>p\x96\x17Z\xb1" "\x16\xfeT\x9d\xba\xf7\x9c\x35s\x99\x93\xa0\\\x0c\xd6\x8f\x61\xaaKm\x00\xbe}\x83_\xc7\xe0\xfa\xd1\x89\x8a\xc5\x44\x8b\x41H\xf1\xfd\"\xf9" "\x8d\x9cnp\x89\x96\xd6\x34T\x85&\xee\xee\x8aXZ\x95\x39\x91\x06R\x7fW>\x35-Z\xe5\x0f\x34\x1dy\xac\x1f\xa3;\xbb\xf1\x13\xa6" "R\x06>\x9f\xca\x15\xb9\x01m\xf2*\x93\xb1\xc0\xb6 l\x12\"\x9a\x39Vhn\x9b\xca\x19\x86\xbd\"\xa2\x30g\xe0u\x63L\x96;@" "\x1b\x0c\x31\x33iZ|\x94\x8e\xab\x97\xd0\xca\xe4\xf3\x03\xf9\xe5\x0c\xeaO\x30\x83\x9b\x86\xe1\x89\x88\xd6\xa3\x17\xb6p\xc3\x16{K\x89\xdaL" "\xe9{\xd5\x8b\x16\x9eN\x41\x9e\x08\x83\x1f\xe1SQ\x06\x9dQ\x01\xb7\xcd\\\xaf\x8cR\xfdp\xfc\xec\x1al\x13\x10{\?\x30\xbe\xa8\xf6N" "N\xc0\x11O\x63+\xcd\x84\xabg\xa7\xc7\xf0\x82\x16,\xce\xb0\xfa\xcb\xb4\xf0\xe6\x0cs\xdc\xd0&+\xe6{\xd5t\xa6\xdbz\x94\xd0\xcc\x96" "j\xa2\x86\n\x32'\xa2L\x06\xb3t\x46\xcci\x89h\xeb\x88\x84\xf5\xd0X\?\xfd\xebgw\xe7\x64\x1fl<:\x83\xcd\r\x1b\xf8<\xeb\xd0\xbc\?\xbf\xc6 \x91s\x30s\x62:\\\xd8" "\xe5\x15\xf8\x32-\x18\xb9r\xc8\xbb\x1c\xe1lQ\x1a\xcf\x16\xe5Q\x04`M\x31\xdan\x43\x17\x07\x9a\x05\x1bL\x34\x0c\xc8\x44\xbb~t\x62" "\x0c\xa6\x62\x9b\x44y\xb7\xb0\xc4\xca\x06O~\xff\xadu\xd3\x16\xd9#\xe2-\x0b\xe5\x7f\xfc\x8e\x1b\x8c\x9ak\xa7>^\x66\n\r\x1d\xb7|" "\xf4\xfe\xe6\xf4 \x8e\xaa}!\xe1\x30^\x15\xaeP\xda\x65\x34\xb1\xabU\xb0\x06Q\xb4\xd3\xa1\x9c\x11\x9e\xf5\xa2\xa1\x37\xa4\x86N\x7f:\x15\xef" "\xd7q\r\t\x0b\xbf\x00\x63p\xdd\x97\xde\x46\x62_\xb2\x63\xfe,\"\xb2\xe6(\xc0\xac\xa2\x9c\x38\xc3\xf4\xd3\xee\xf9\x07\xda\xf2,|H\x61" "\x32G\xb5\x9e\x13\x0e*\"\xa2-U\xee\x07\\\x85_\x46|U\xf7t\x1b\xc1\x0b\xd1Q)\x04\xd9\x11;\x8a\x05,\xcd\x33\xc6i\xfcP" "\x1a\x85hu\xcf:\x46\xb5\xf8\xe8\xe8P{\xbdI\xb4\xd3G\xcc\xe7\xa8\xd8\xc6\x14\xbd\x88\x07S\x1c\xa6\x61\x38\xee\x62\x94~\xdc\xd5\x7f\x92" "\x03\xcb\xe4\x33&L\xc1\xf6\xe7\x32\x36#T\x1b\x05x\xca\x0b\xcb\x97\xbb\xa3\x14\xdf\x7f\x01n\x1b\xc6\xc3\x0b\x9a\x13\x81\xb0\xc1O\xefy\x05" "[u\x62\xe4p\xc4\x44t\xf8U\x0c+\xef\xbf\xcb\xce\x81\xc6\x1en\x81=\xdc\x02\xdb\x14\xa5V/|i\xea\r,\x37\x8f\xc1\x61\x81\x8d" "@\x81\x03\xd9\x42\xf2\xec\xdd\xb7\xdf\xd5gr\xe7\x92\x89\xbb\x15\x19\x9c\xc9P\x8b-\xb4\x1d\xeb\xcd\x12\x31\xa9\x33U\x0b\xef~\x82\x9f\x1e\xfc" "\xc8\xed@t\xbe\x8a\xae\xd2\xd0z\x15y\x41\xac[\n\xf0\xeb\x17\xca\x89\?\xaf,\x96\xb7ik\xa7\xe7#\x15\x97\xcdh\xc5\xdb\xf5 U" "\"\x62\x0c]\x80-\xcd\xc8\xa1\xab\x89\xdf\xdb\xe0\xf1q\x7f\x80\?_\xdc\x91|\xdao\x1e\xf7\xb7\xbb|\x8b\xfd\xba\x36]$\xdc|\x38\xa5" "\x05\x87\xb7\x8aiQ\x86\x36[\xd5\x86\xce\xf0\x06o\x33<\xfa\xdcU\xb3\xf0\x62\x17\xcd\xbcs\x8cp\x90\x11\x31\x7fk\xc1\xedU\xb4\xe9\x41" "\x61\x11w\x13\x9e\xb7\x34Z\x19\xdf\x41x\x8e\xb7\x1a\xde\x94\x9d\xc1\xf3%\xfc\x42LK\xdc\xda\x45\xbb\xbd\x04Q[*\xc3\xdb\x01\r\x10\xa6" "UZX\xc4\x05\xed\xee\x31\x11\xbb\xaf\x9e}\x44\x8b^O\x11\xa2\xc6\x34\xf6\x9bU\x84\x01X\xc5>X\xbd!\xa9\x37x\xa9\xfb\xac\xd3\x0b" "\xb5\x8a\xe5\x05{\xa3\xa2]$\x8fp\xcf\xbb\xb8\xf7/n\x93\xdf<\"\x61\xc3\xa7\x0c\x89R\xac.i\xdc\xfa\xd2\xb4\x92\x33\xf9\xe1k)" "\xb9kX\xbd\n\x1c\xab\x15\xb0~\xc2\xc8\x31\xad\x88|\xd6I\xca\xe9\x39\"\x9c\xa0\xf4\xd8\x8e\x9b\xca\x19\x8f//\xc8\x86\x33\x11W\x97\xce" "$\xb9\xd6H\x0e\x38T*\xa7 s@t\x32p\xfe.r\xbf\xe8\\\x15lwX\x65\x9e\xbf.\xe0\xe9\xa3s$v\x84\x0ek\x81\xe3" "\x39\xe5\xdfu\x30\x86\x30.J\xd6\xf4\xcc\xa7\xda_\x45U\x0f\x0c\x9f\x12q\x9ar\xf1\xe0T\xea\x05y\x33\xf0\x44\x8fn\xcb\x07\x05\x37\xba" "\xad\x80\xf5;\xa7\x34\x36Z\xd9\xfa\xd7\x31\x12-\x44/\x8fN\xcf+\"&O\xf6\x9ar&_\x34\x31\xf9\xee\xdb\t\xed}&\x36\xdf\xe1" ",/\x1a\xdf\xb2\x30\x11;|X\x0c\xa4\x94jPX\xa4\x83uY\x1e\x44w\x33^\x15\xfd\r%\x1f\xe2\x13)\x82\x88\x10\xe2\x9f\x84\x37" "\xba\xf6\x45#\x41\xdcV\xff\xfe\xd9\xdf_\xd5$\xf3\x97\xbdl\xc6\xcf\x83\x80\r\x98h\xbb\xa3\x1a&\xbcU\x43\xce\x8bli\xb4\x91]\xe9" "\x82\xff<>:r\xaa\xe3K\x0b\x97@\xd4!#\x16\xe2@;\x41\xeb\x10\x9f^\x39\x0f\xf2Q\\zuj\xa0\xf9\xd3\xe7\x44[\xad\x0e" "\xb5\xf5\x93\x85\xdf\x86\x16\xbe\x35\\\x8c\xde\x07\xde\x42\x8b\xe6;\x95\xa9V\xc7\xab\x88\xfb\x13\x1d\xf3\xa6j\x07\x9a\x85OUm\x30t\xfe\xf2" "\x61\x45\xd4\x14}\xb8H\x34\xb6\xb3*\xb2\x1d\x12\xd1\xd3(\x9e\xe2\xfd\xc5\x33\xde\xdc\x06\xd5\x64\xfcSp\x46\xa9m\x94>\xa6v!\x8d\x84" "\x89\x07\xe9\xbd\xd3`<\x65\x8a\x38\r\xdc\xbc\x94\x65\xa7\x17\x96]\xe5S\xfe \xc2\x12(\x9c\x38\x7f\xd7\xd2\x38u]\xd3\x30\xca,\x7f\xd4" "\xfc\x33\x66\x11]\x62\x98\xcdH\x41\xb1M\x64\xf4\x00\xfbK\x1a\x44\xbb\x91\xa2\x31\xb6`\xd1H\x95\xe8\xb6\x15lg\x83 S\xc4\x1a\x1d\xe5" "\xfd\xeej\xcc;,\xb2\xe5)\xfe\xae\x8e\xe4\?\"\x8e\x99\x16\r\xc7p\tU\xed\x32*|[TZ\xd5\xb6]\xa7n+\x63\x61\"t" "{\x99\xac\x9f\x12\x62\x38\xfd\xc3\xaa\x8f\x07\x98<\x45\x9d\x9dh~\xd9\xde\xe5\xd0t\x97\xb8\xc6\x94\xe5\x0f\xfb\xd4(m\xed\xa0\xd1\xd6\x9f\xf7" "]\xb3\x8d\x7f \x1e\x1c\x8d\xde\xca\xc9\x07\xc5+\xb2yp\xbb\xb4\xea\x17\x83\xf3\xc7\xe4\x46\x1f\x97\x61\xb1\x10\xc0vV\x64w\xa9\x18\xb4u" "\x8b\xb0\x8d\x32\xa1\x45\xeb" "%\x96m\xa8Vq\xcap\x35y\x8a\x06\xcf\xf0P\xb1]\xc0\x12q\x97\x19&\x1as\xa1\x88\xbb\x46\x81S\x15\xa2!W\x87O\xeb\xa0\x98" "\x86\x38<\xf2\x17\x14\x8e\xaa\x41+'\x9amP\xaa\x07\xa6)\xf6\xf4\x8aQ~h\x99\x32\x05mU\x8az\x37\xf1\xeb\x1d\xb4M\x45r\xa1" "m\x9dv\xa8\x05\x99\xa1.\xd7\xabo\xfe>\x8c\xd9>\x1cxL\xc7\xad\xed\xc1\x0f\xe1Vj\xa2\xbc\r/W\xf1\xd1\x8c\x86\x7f\x15m\xfb" "\x45\x15\xcf\x0b\x41\xab\xf5+\x1d\xd7}\x19\x89\xcf\x87N\x04\x87\x34Q\x33\x00\x0b\x63\xa2\x85\xc3\x8d.\x8f\xe0\xbe\x33\xf8$\xbe\xaa\xd2X\xaa" "\x1a\x16\x33\x88x\xf3\xc3^X\x31\xae\x96\x7f\xd7\xbc\xa7\x16\x0fMou\x37\xc9\xc2\xb7\xeeO\xdc\xc2\x1b\x86\xdf\xa8\x91]\x9a\xa2\x05\xba\x07" "\xa5\xe2\x8b\xaf\x8e\x83v\xf2\x81<\x85\xe4\x45O\x16=\xf0\x9e\xd5\x37\xd8\xfb\xf2\x03Z\x35\x15\xee\x82u\xe5\xf0\xc0\xf0\xe8\?\xd2\xabxr" "\xef\xf9\x18\x87\xf5\xd4\xbd\xc2\?\x0e`\xe5,\x8eU\x93jL\x35\x98\xf9(\x06\xa5S\xaf\x87p\xc0\xb7\x38\xc6\x01O\x1d\x88\x07\xdf\x94\xf7" "\xe6o\x31\xd1\x64\x84\x87\x15\x36\x07\xc7\x0eOW\xcb:\xbd\xf2\x17\xd1\xb7\xda\xa0\x36({\xde\xf4\xf2\xb1\xabg\xec(S\xba>\x97\x17\"" "\x07\xe2\xf2\x19\x1cP\xe4X\xa3\x10\\_\x42\x34\x0f\xe7LI=(\xcck\xca\x44Z\xefJ\xb4\x61\x97\x10\xf4-\xc3\x15\xab\xca&\x08\x83" "s\t\xbe)\x99R\x90}\x02\xf3\x97\xa0y\x06\x18\xa5\xd6\x63\xc7\x83\x31\x8b\x8d\xbf\xeb\xa6\xedi\xad\x1aj\xf5\x12\xdc;\x84\xeb\xa3`p" "\xca~V)\xd8|;\xe1.'\"L\x8e\xc9\xcdr\x94S\x82_\x88\xd0\xdc\xb5\x85\x30\x1c\x96\xe0\x41(\xc4 \xa4\x14\xa5\xbf\xc0\xdb\x84" "\x9cU\x31\xd1\x17\x36@\x43\x1f\xc5\xc4\xe5u\xd4M>\xa0\x65\xc0\x44[&\x63\xa2ok\x02\x8d\xb3\x8f^\x9f\x97\x10\xfe\x41\xf8\xfe\x08\x1f" "P\x11\xf9L\xb6\x37\xb1\x12\x96\xb6\x92m\x17\x61\xb4\xbeI\x89mG\x89\xf6\xad\x12\x16:\t-\xaa\x99\x12\x97\x8a'\xaf\xc1\xeb\x80\x63\x42" "\xd5\xc2\xfbg\xce$\x94\x10\xfcS\xf9\xed\x0c/\xba\x9c\x90Q\x8d\xb6#\x13\x37}\x1amJ\x88\x15j<<\xd9\xf6\x8e\x44\xca\xed\x30\xa1" "Y\xda\x1d\xf7l\x8fv\x15\xab\xc8,\x34>\x95v\xe6\xc7\x93\xb9\x64\xe6\xb9\xa4\x31\xfe\x12\x11\x8c\x85-\xea\xe6\xcc\x96\xb9\x64\x8f\xf7\x12\x9e" "\xe7\x46\xce\x0f\xaa\x88`[\x10\xcd\x85\xc7\x44\xda~.y\x9b\x97\xd1\xb9\x35\xc6\x97\x88\xd8\x96\xb9\x96\x1a&\xca\xddp\x86\xf6\x9a\x95\x97\x12" "\xd1h\x45\xbc\xce\x81\xe8\x81(\xb5\\\\\xa4\xa3\xcf\xfb\xf8G\x37^\xf0\xc3r\x00\xe2`\x13\x15+Q\xfa\x1b\xda\x64\x93\xfc\x14\x16\x87k" "x\x14\x65\xae\x99\xff\xac\xd1\xb5\xc5\x39\"vWQ\xf1\x02\xa1S\xa8%g\n\xfb\x96\xb2\xd7\x11\x1e\xf4\x1a\xbej\x42[:\x93\xb9\xb6\r" "p\x95'}r\x08\xbe_\xed~\x1e\xfd\xd7\xf1t\xf0\xfb}\x86UU\xa6\xed\x16\x8f{m\x1e\xe4\xbel\x17Th\xbb\xef;\xda\x02n" "\xe2w+T\xb7\xec\x1d\x61\x9f\xa3\x1e\xc5U\x00\xd7\x8f\x1ak,.\x15\x17\xae^i\xbdR\x91\x33n\x14\xd9m\x94\xb6\xef+>~\x86" "\x98\xcd\x38m\x13%\x15\xfd[\xa7\x0f\xe4\xb3\x33Y\x36)Z\xf9\x98\x1c\x81\x17g\xbf\xeb\x8b`\xcd\xa3\xb6\xe6ThM,-X\xaa\x85" "\xd7\xdb`\xc9\x33\xc0\xb6\xaaL\xbe^\x7f\x89V'\x14\x37 \x9a\x80Zrw\xcd[\x9dy\x33\x37-\xd1\xde\xaf\x9d\x1a\x30\xd3\"\x12\x42" "\x63\x1ah\x98U\x7f\x1e\xa9\x99\xfd\xe4+$\x16<\xf2\x94\xbc\x18&\x81k\xacZ\x84+\xc4~\x14\x11U\\Mt\x0b\x8e\x9f\x88\x07\xd7" "\xb5}\x43\x8c['\xa7\xdcU\xd4u\xaa\x16\xf3\x43\xb4J\x05|\x42\xd2\xd2\xa6R\x83G\x94\x10S\x1b\\\x90mLni\xf2\xa3\x06m" ">\x1e\xdcX\x85M|\x91\xf5[-\x82Y\xbf\x06oJ\xe1\x10\x17\xa0+\x8eR\x12\x98\xd5\xa6i\xcd\x13z\x05\xd4\x10H^\xc8\xc4\x12" "\x1e<\xa3h\xb6\x31\xb9\x8a\xe6\xc3l\xd4\xed\x41-*\x98jHK\xc4\xbb\x11\xf6S$n\x91u_\xcdSqw\x8dl\xb0\xbb;\x02" "\x9f\xbf\x9d\xecW\xd5\x10.\xd5\x98\x84s\x30-hm\xb0>\x14\xdaj\x89\x80\x39\xa2uq\xd1\x1d\n~\x83\xd5L\x43\xfe\x9c\xf1k\x33" "\x39j\xe1\x17\x84\xb6\xacL\x88Q\xa2\x92\x35I\x83\x16\xdc\x46\xa2\x9b{\xa7\xd0\xfcq\x33\x8d\xf0\x14\x17\nK\xd4\xcb\xf8\x1c\x81\xad\xe5j" "G)\xf9\xaa\x08\xbb\xd2'\x0e\x1c\xd7@[]k\xe4LI\x83\xdd\xb1\xe4\xab\x9c\x97`\xd4\xd8\xccK`>\xe3\x46\xa9\x8dY!\xab\x16" "m\xd7\xf2\xa7\x9a\xc6\x9f\x95\xec\xc9\xf9^\xd3n\xe6{\xed\x96\\\x39\x35$\x9d\xc5s\xd4\t\xe7\xe7]\xad\xccn\x45\x8b\xdd\x8e\xd6\xef\xba" "\xe4\xe4\xecX\x0b\xab:\xf4P\x99\xac\x92\x35'\x9b\xb3\x16|O\x8dl\x1eZ\xbf\?S\xa7\x7f\x8b\xbe\x35-\x96\x92\x16\xeb\xa6\x16\\\xa9" "\x95\x1dPn\xf6%\r\x31\x8f\xdb\x64_\x45\xc9\xa6\xc8\x44\xdd\x90\xf8\xd6\x35Z\x04T\xdc=\xe3\xe2\xc1\xc5O\xb0\x39\xa2\x17]\x0b\x01\x17" "\x33t,TN\x9c\xc9-\xd6\x37\xbbJ\xcf\x13'\xc0PG\xa9\x93\x7f\xe8\xd9\x8a\xf6\xea\x8cg\x99 \xf7Lm@.\x9dl\?M\x64" "\x1a\x8a\xc8\t*\x15YTZ\xc1\x03\x1f\xe9\x11/#y\xfa\x97\xb4\xf4ZX\xc0T;\x10\x0fo\xd3\x34V\t\xa6\xed\xdf/'\xd0[" "\x41\x93\x37\x00\xef\xbb\x16{]-\x9bU\xc0\x1b\x43\xfc\x33\x65\x33(\xe5\x82\xa7\x63\xd7\xc2\?%\x84!\x17\xad\xcf\xef\x9a\x97\xb6pp\xe2" "\xe4\xa8\xb1\xb5\x9fTP\x11\x11\\\x44\\\xf0t\xe8y\xb4\x02\x7f'\xdf\x37:M\x8f\x62\xdd\xc2\xea!%\xef\xde\xbc\xe0\x85\x9b#\xf0\xa7" "\x87\xac\x99\xce\xc8\x7f\xdb\xb2H\x35Lk\xb7\x10\xddL\x88*\xbd\x05\xef]\xa1\xf9\xa5\n\xefZ\xa0n\x0eT`u\xd8\n\xef\x91m\xc2" "'<\"\x82\xf7\x0b_\x32$R*lo@\xf4{Z\x61\x0f\xf7J\xf7\xa3\x16\xed\x17-\x9a{[\x08\xdbm\xf4\xdc\x1b\xcex\xca\x45" "\xdf\xc9\xde)\x43\x44\n-\xe6Z\xa6\x05\xf7y\x61\x1dY\x10\x0b\x65\x94(\xff\x88w&\x44\xc3\xd0\xa2[`+z\x43J\x45\x9f(\x17" "X\x1c/\x44\x03\xd1\xa2\x89\xb4\xe5\x85\x85NH\xad\x38u\r\xa2\xcb\xd3\x62\xff\xa1\x85\x05\x35\xc2\x0b\xa4]<\xe1\xf1\tR%\x9e\"\xcd" "\x63>Z\xbc\xc5S#\x9a\xb9\xd1\xcb\x16g\xdf[\xb4\x92\xb7\x10\x93\xc7\x08\xcfh\x13\xa5\x19\x41\x8c(\xd5\x90\x16\x88N\xaf\x44Z\xd0\x91" "\xb1\xa5M\x02S\x16\xebW\x84\x18>\xb4\xe9<\xd4\x8e_\xbe\\\xe7\x94v[\xbd\x64\x61\"\xa1\xa8\xab\xba\xd0\x1e\xf3\x80\xadU|\x97\xdb" "\xd6\x45\xd8\x17\xf9\xbd\xe3\x06\?\xf7M\xf0\xec\xc0\x12\xb4\x65\x32\xcag\xf2\x8d\x1c\x80\x18\xd5\x31z\xb3\x91\x9d\xcc\xf6\xef\xaa\x12\xad\xb6\x41y" "\x16\x16\x66\xff\x38\xc0\x01\x97\x1c\x9b\x93\x1bp\xcd\x1b\xb6`\xc5\xca\x1a\x88\x89p\xa5orN-\x19\x0f\xab&\xfd\xfe\xe4\x33\xd8t\xdb\xf4" "\x34l\x07\x98-n\xb3\xb2n[w\xb2\xcdn\xce^\xd3\xff\xe8\xc1\x1d\x1c\x93\xce\xe0\?\x0e\xbb\xe6'\xc8\xd6\xe3\xb7l\x38z>\xd0\"" "\x0cl\x44\x43\x8a\x04\xb9\xee\?\x12\x80\xa5\xb5\x8d\x65.\xca\xbe\x33\xec\xbe!\xca\x9ei\xbaH\xf1\x94\xd7\xdaS\x63jN'\xd4\x1ei\xf6" "o\xab!\xf5t\xff\x35Xq\xdb\x34\xb5\xb5\x11\xb0Mx~Ln\x41\x19\xbe\xa2\xdak\xd3\xb9\xa9\x8d \x96J\xbc\x16O\\!\xaf\x61" "\xbb\x95\xb2\xa7\xba\?\x8c\x8d\x0eY\x01\xeb\x61u\xe1\x39\xe3\xb3x\xca\xd5\x35\x86\x12\xa7\x13\xf7\xda\xc1\x0bM\x8e\x05\x8b\xc5\xbek\xcc\xc3\x92" "\xb5\x39\x38\xb0\xdf\xfc\xfbO\xf4\xc7\x32\x02\xb0m\x0b\x0e\xbf\xf8\xff\xf9qpq\xc2\xe6\xce\x34\xfc<\x93|\xcc\xae\xac\x89r\x8d\xc5J\xb7" "\x44G=\xa6\xc7\x10Q\xe2\xe0t\x32^\x92\xc2\xa0s\xe5~\xac\xb1t\xfa\x16\xee\xaa=p\x83\x19\x11\xd1P\xb6\xd9P\xb6i\xe0hs" "\xae^i\x1b\x0b'\xa2\x8c\xc7\x42\?i\x93l\xf1\xf5\xb6\x98\xce\xef\x45\xf9\x1f\xad\xf2\xd0z\x39:\xbb\xb7\xb1\xf4T\x39sz\x31\xd6\xc0" "\xc0o\x65\x88\xfdo'\xbd\\\xdb\xc1`\x19\xf4\x17\x10\x61yQ&\xa9#\x62\xfb\x39\xb8\xaf\xb8\xa6\x9b\x8an\xa7\x89\xd6\xef&O\x37," ";\xa5\xb9\x84\x38\x62\x9e\xc5\xd8\xb1\xbd\x9f\xaeo#\xe2\x81\xd0u\xcc\xce\xb7\xd9\xe2\xb6m\x13\x36\xe3\x88\x64\xf2.\xdf\xe8{\xd0\xc6\x96\x42" "J\x9e\x62s\x45\xbe\x90\x43p\x9bvj\xb8\x14x\xd1\xb6\x11\x36\xc8\xc8\xa9(\x15iXS\x31\xcap\xcd\xf5\xc1o`\xe8ms\xf2\xbe" "\x8d\xd0~J\x14\xa4\xb0\x88\xda\xc9\x93\x96\xe6l\x65\xf8z\x14M^\xa8U\xa2\x93\x1b\x8a\xfe\xc5\x01\xbb\xc3*rx\x64\xe2\x8aW\x84\x9f" "\xbf\x92\xce\xaf*z\x41\x96\xa6\xc0\x89\xf8j\x89\xa6\xebm\xee\xf7\xdaY\x98\xee\xb9\xa6!\xd5\xd0Im\xd3\x41\x44\xe9\x85\x1f\xa2\xbaw`" "p\xa8\x07\x10\x87\x41\xc5\xd9~\x08\xdeN\"\xfc\x88x\xc7\xd4\xab\x92\x18\xc1\xb4\x11\x65\x42\xd9\x01\xd1\xb9T\xee\xad\x03\xaai!\x85\x8bj" "\x9b\x1d\x9evr\xfdW\xa6y\x13o\x39\xec\x32\xad\xd9(j\x19\xb6\x89\xce\xb0Y\n\x9f.\x93G\x92\xc3\xeb\x14G'\xaa\xa9\x39\x1b>" "\xaa\xaay\x36W\xb1p\xa4\xbb\xc9\xfa\xf3\xcb\x01n\x9cM\xed\xa6\x1a\xc3<\xd3\xde;\xd9\xab\x18\xd5\xb2t\xa2S-.\x0e\x93;\x9d\xa0" "\xa1@\x0c\x01%S\x05N\xaa\xd8~\x15\x34\xcb\xd2\xd9\x81\xe6\xdd\x00h\x9c=l\x63\xb5\xb2\x10S\xe7m\x44\x44\x17\xc2\x82\xae\x44\x94#" "u\x94\xe8\xd5\xf6\x46H\xfd\x84\x63\x10\x13K_\xe1\xdd\xa3n\x15\x90\xff\xfc\x97/\x95/\x83\xe1\x8d\xef\x04\xed\xc7\xee\x10\xa7\x04Z\xaf\xa6" "\xd7\xf8\xebW\x9e\x8a*\xd6n\x0f.\x14\x0e\xae\xbd\x86K\x34\xe9\xb5\x63\xdb\x9a\xc3\x63\x7f]\"\x9e\x9e\xc4\xbd>\xfb~z`w\x84\xd7" "'\r\x91\xbc\x03N\xed\xb4\xe9\x04\xd9\x46\xe0)!\xfc\x10\x94:\x13\x80\x61\xa6jqk\x9b\xdcS\xbd\xeeLN\xd3H\x91\x45\xf0\x01\xb5" "v\xf2\n\xd4{\xb2\xed\x8dq\xf4\xc4osOk\x15\xd1\xa9U&\xe1\xc9M\x8bRg\x07Z<\xe9\xef\x35\xf2\x9d\x8f\xf8\x8ej\x80]" "\xca\xb6m\xd6\xa9\xec\x16\x9cRGy\xbd\xa6\x9a\x8b}\x66\x84\xe5\xd6\x19L>\xc2%\xdf\x9d\xa7\xe0\xa6\x12\x9cU\xd8\xb1\x35\xadt\xa8%" "\xe2\xcf\xb9\xd3[u\x15\xbf\xb7\xe1Uw\?\t\xd4\xa6\x05ZX\xe3\x04Z\x9b\xd3wI\"\xa9\xa3\x42\xf6\xc9;S\xa2%\xe1\x99\x44;" "\x41mm\x9b\?\x1a\?\x93\x8f\xb0\\\xa5\x8d\x38|\x46\xcf\xe9\xf1)\xf7\xe0\x12\xf1,\xcd!q;\xae\xa1\xa4\xd1\xd5T\x88\x92\x45w\xd2" "v\xfc~\"\x8d\x17\x45T\x1b\\\xb1\xd3\x8e\x07s\xba\xd0\xb5\xe3!\xeaV,\xe0\x15NOv\xd5\x93`\xf8p\xf8\xd0S$x-\xe2\xfe\x8d:" "\x97\xde\?G~\xed\xfb\x97x\xa2q\x30|\x33x=\xc6\x66]WV=>\xba\x18u\xde\\\xdc\xdd\xa1\xbe\x44\xdc\r\xe1+\xbf\xe5'" "]\xda\xab\xfd\xe2\xa8\xe7\xcb\x02\x12\x14~\x97\x45\xa9]\x92\x03\x98\xd1QQ\n\x41xw\xb6\x9f\x92\xb6\x63\xab\xa5v\xf6\xe1\x45\xa6\x07\x98" "\x38\"\xa6\x9d\xfb.\xadh\x39\xa7\xb4\\\x1a\xe9\xc3\x42\x86\xeb\x01\x9f\xcd\x14\xb1\xe9\x0cJ\xa7\xe1\xadk\x9f\xa4\x14-\xef\x65~\xfd~\xdf" "k\xdd\xff\xb6\nJ)\x1cX\x9e\xc9#\x44\xc7=\x04\x37\xe4\x81o\x8a\xd7N\xa9\xca\xf8\x36U\x93\\\x1f\xd8\x9a\x64\xd5\x96\xe4\x16\x84\xdf" "\xb6\x92\x8b\xf9L\xfc\xbeuQwm\x83\x45\xe0Kn*\xfa\xe0I\x37\xa5 \xc3\x04\xd8\x0c\x10\xf0\x35\xf3\x15\x1c\x95\x9c\x1c\xd0}\xc9\x9f" "\x33\xc8t)v\xe8\xe7@\x91\x03\x97/\xec\xf3\"\xc4\x98Ii\x9e\xabG\x7fi\xe9\xbf\xb4\xc2\xa1\xb6<\xfbK\xbb>\xd0\x92\x8b\x43\x43" "\xa5\xaf\xda>G}y\x1a\x0b\x93\x8b\xaa\x98\xde\x8b\xb9\xbdX\xd8\x8b\x9f\x89\xf8}\x9f\x88~\x33*^\xef\xc5\xa5\x8bI\xca\xa8\xd8M\x44" "\xbf\x33\x11\x9b\x1f\xd1y\?\x94\xe1M\x63\xc0\xf6\xdc\x0e\x8f\x92\xbb\x64\x17\x98\"]\xf3\x45\xf3\xef\xa6\xf7\x37\xecO\xf8\x16\x16\xc7\x89x~" "\x96\x88h\x31U\xdc\xddM!\xc2\xd9\xeb+\xf8\xd3r\xd2.\xad\"\x82)\x88\x88v\x41\xa9V\x87,\xef\xfe\xbe\xe2\x8c\x33\xdf\xf1\x31\xaf" "##=\xf4/M\x94\x0e\xe3\x42\xa7S\xf6\x96\xfb/\x44Z\x11v+\xce\xa0\xf7\xc9\xe9\x00\xd3\x16\xb7\xc9M\x88\x86\x46O\x45\x19\x61\xb1" "\xf7o\xda\xed\x37gXM\xeb\xb6\x12q\xf4\xac\x1b\xdd\\\xe5\xfc@\xd4(\xb8\x18\xa7\x9f\x0f\xc4\xdd\xf3*\xd1\xe0Wg\xe2\xf6\xee\x1f\xa7" "\x38<\x96\xdc\\\xef\xde\xe9\xa5s\xbf\"\x98\"\\\xe8\xb4\x08\xbc\xfc\xf1\xc3\x1as\x16\x96+\xd3\x46-\x17\x11\xd6\xd5\x44\x04{U\x91\xd7" "\x1a\x94i)\xa4\x88\xae\x38\xfb\xad_\xc1\xf0\x98<\x05G\x17Z\x35\xd5y\xff\x8b\x37\x44q\x17\xd1s\xd3\x92\x99\x65\xf5\xc7i[\x41\xab" "\xe8I\xbc>\xe2\x32m\x11\xdf\xa2\x0b\xfe\xf0g\xee\xe4 \xee+<\x42\xd9\xe0\x84\xedW\xc8j\x08!|\x94\x1d\xbd\x19\xf4\xf0\xbf\xc2\x62" "\xc3\n.j\x44\x19\x15\xe9\x92\x0f\x8c\xa8\xbe\x38\xdeQ\x06\x97k\xce\xc3\xab\x16^\xf7\xc3\x32n\x80\xd3W\xca$\"&\xb4\xee\x05\x97\xcd" "~q\x18\xf0\xe5I\xc6\x11\x89\xd2\xaa\x89\x42\xa2\xc1\x64\xa5\xa2W\xff\x1c\x81|\x61\xcb\x08\xe1\x43\xca\x8b\x13\xb6\x62\x14v\xf8Q\xf7\x95\xbd" "\xa8/\xcf~\x1a\xc5\x92\x35]\xd8\x9b:w\xd7\xbcK\x66r\xa1\x9f\x93\x96i\xa5\x34\x14\x10\xf3\x9f\xfe\xba|\xd9\x10\xb2T\xa4;\xae\"" "\xdd\xa2\xdb\x85S{\x14\xf7/;L\x98}!\x0e\x85\xd1+\x06\xce\xd3}\x45\xf5\xden\x8c\xc4\xa3}\xef+Z\xbesHNQz\x41" "\x9e\xa7\xe4\x00'}\xbe\x38+\xa7\x8c\x7f\xda\x34\xf4\x7f\xb1\xe7\xa8\xa4i\xd1gv\x95\x1c\x05\x7fI\xf7N\x97\x9f\xf1L\x9e\xca\x88\xa5*" ",\xbd\xea\xff#\xdc\x8e\xf4\xe8h\x9c\xfc\x62\xcfM\x89\xadm!\xb2\x32\x10\x91\x0b\xecU\x8c\xcf&\xd8\xd7\x11\x1a\xf3\xb1N\x84\xaf\xf1v" "\xd8iSz\xed\x85\x90n\xc6\xe4\xa4\?\?\xc1\xa8\xeb\"G\x1f\xd2w\xab{\x8a\xf8\xcb\x16\x62w[\x17\xfd\x95\xef\x8e\xdf\x34`\x1e\xab" "K\xef\x0b\xa8g\x13\xd3g\x97+qu\xda\x97Z\x96\xa5\xd5>\xc5\xab\x65\x37K\xe9\xad\xaa\xed]QH\xc4\x46\xd6\xefH\xb5v\xcaS" "\x34\xd1\xa2\xfb\x94\x1f\x88\xceG\x11\x16@\xaa\x16\xbf\xa7\x0eN\xc4\x05\x46_\xecx)\xa3\xfa\x95\x8b\xfe~\x92\xb3\xcby\xd1\x1d\xe8\xd0\xc7" "\xb8\xc3\xaeM\x87\x33xJ&\x9b\x8a\xb4vv\xe8V\xd0\x61\x37\xab\x63\x65\xfe\x1c!oT\x1bh\x9d\x88\xa9\xcf\x0e\x42\xfb\x18\xf5(\xa6" "\xfeM;\xcb\xb8\x88\xb0\xac\x19\x06\x41\x33r\xfa@\x45z\xb1\xa8\xa8\x0b\x1d\x61\xbcg\xa0\x34\xe5\x07\xb9\x04-J\x8d\xf2\xda\xc9\xf4\x17\x91" "\xd1\x9b\x44\x84\x19[\x99\xec(\x63\xda^\xac\x38\xd5\x64^\xf8pM\x03\x16`I\x9bj\xea\xab\xbf}\x96Q\x19s\xa1\x1e\xdb\xcf\xa2w" "\xf6l:\xf5qo\xf8\xe4\x1b>\xe3\x66\xeb\x44(Z\x11\xb1\x9a\xb7\xc3\x0e\x99\x92\x33y\x9d\x64\xbfv\x15\xab\xe4\xd2\xc9\xa9\xbf\x0e\x97\x01" "w\x10\xaf_\x98I\x91i'W\xe3vl\xf5\xff\x9c\x66\xf8\x0e\xbd-;tMUJU\xc8\xa9q\xd1\x86N\x8d\x38\x0b\x1b\x0c\xb4\xa6" "\xba\xe8\\O\xe3\xfe\xfd\x41r\xe0\x13\x66n\xd5\x92}{\xa0%\xb3\xfb\xa6\x95\xbe\x38\x05l\xda\xf9\r\x8dr\xa6\xd5\xbd\xec\x98\xd6X\x1e" "~\xd6+\xd8\xb0\xf7\x33\x39\xb0>\xe2T\x9cj\xf0y\xfc[\xf3\xec%\x07\xa2\xf7\x0f.\n\x86\xd6\x8f&\xc9O\xa5\xce\xa2\xcb\x85i\xbd" "\x1fl\xe0\x0cm\xf2\xe2yP\x34\xdd\xba\x06\xad\xa7i\xf5\x19\xeb\xfe\x0e\xe7\x9c\x95\xba\x99\xd3\xfb\x05\xb4,\x8f\xe6\xf8\xe6r\x14\xad\xf7\xac{\x66\xdd\xa7\xfd@\xf4\xf5@w\x38\xd5\xe2\xc9\"" "\xf9\xe9\x92\xe9\xba\x62R\xad\x8f\x9c\x9c\xdfT\x91\xa6J\x13%\x31\xb0\x8e\xd4\x34\xbb\x90k\xb4\xc1\x98X\xf8\x8e\xfb'\x89v\x96\x8b'\xaf" "\xae\xc5\xbdv\xdc[&\x45\x41\x0eL\xeb.\xee\xae\xa4\x8b\xca,\xe3\xf9\x7f]\xde_\xbfL\x13\x90\x88,jk\xfe\xd6+\xaf\x1f\xc6\xa2" "\x16\x91\xe4T\x89\x10w\xea\xad\xb5t\xec\xf5\?\x02\x9at\xc2\xd3\x1b\xb2\xe5\x8c\xdeS\xbf\x18\x17v\xc2\"\xb2ix\x8et\n\xaf\xf0^" "\xb9\x66\xa0\xc3\xe1\xab\xf2 \x7f\xb3\x9b\xa9\x64\xd7Q\x45\xef\x38\xe8\x14L%\x43\x43\xa1j\xf1K\x91\x62\x85\xe4\r\xdfv\x9d\xdeK\xe0`" "\xa4\x43\xa3\x7f'\xbc{\x02\x31\x9a\xec\xec\xa7\rL\x64\xfay\x8e\xd0u\x04\x83k\x0e\x06;\xd8gN\x88I\x02\xa5W\x64t\xd9\xe8x" "\xf3)L\xee\xa0_\x42\xf8\x35\x15Q\x05q\xde\xa3\x93\xcc{\xb8\xa6K\x65\x1a\x1d\xc4\x16\xf3\x63\xfb\xa9\x0c\xd3\xfc\xceL<\xfc\x1a\x02\x92" "\x99\x7f\xa4T\xb6T\xeb\x9b]U\xe3\xf8\xd0x\xa7_\x8cs\x9f\xb4\xbe\x9b\xf6\xdc\xf6&\x8aK\x66:\xc9\x33\xb1v\n\xd7\xb8k\xcey" "(\xe5W\x11&\x39;\xd8\xbe\xde\xa8\xabT\x96~\x14\xc9\x1e\xb1\xeb\xc1\x00<\x1d\xef_\x45\xa7\xe8t\x44g\x9f$\xaa&\xba\xfav\xbc" "\x8c\n\xfdv\xb8\x0e\xbb\x63;T'=\x12\xd3\xfe\xea\x91\xf8\x61\x1cp\xed\xa0I\xe7\xf2\xafN\x04/\x91NT\?u\x1e\x9e\xb8~J" "\xff\xee\x0eW\x8bw\xe8\t\xa3\x94\?\x9d\x62GT\xa6N\x84q~\x87\x01U\x94\xb6kSv\xaf\x35\x7f\x7f\xb6\x07Z\x38=O\x34\xe9" "\xf8n\xbf\\\x0b\x32k\xce\x18\x99\x96\xcf\xd2\r\xdc\xb4\x8b<\x9d\x64\x44+\x90\xfd\xe4.\xdf\x99t\x88\x16\xa7\xdcO\x01v\xe8\xc6\xd9\x89" "\xbax\xa9\x88\x1d\xbd\xcf\x18\x42o<\x93\x34\xdc\xa0Z\x8d~N\x9d\x8c\x45\xa3\x62x'\xc5\x1eW\xb2\xf8'w\xfe\xf0\x9c\x63P\x1e\x94" "p\x8e);\xfe\x00\xc2\xfd\xdc\x9ej\xd1\xaa\xec\x89\x12\xb3\x89\xf1\x9e\x04\xc3\x19t\xe8\x9a\xc9\x38\xba\x46\xaf-T\x64\xd6\xd3=\x9c\xd9R" "\x8bx\xd0&\x61\x13W\xe3\xfe\xbb_\xe4\xc2y\xd0\xd4P\xe3\x00\x41\x34u\xb0\xc0\\~\x87\x8eu\xca\xe0l\xc5\xe5\xb4\xaaIM\x85\x8d" "\xb3M\xf3n\xaew\x93\x85\x07\xdd\x64\xd1<\xb1\x45\xd4\xb0\xbb\xcfg\xde\x83\xd5\x03\xac\xeeU\xdc^\xc4\?h\x89\x92/\xc0m\xb5\xe3\xc7" "\x39\xae\xedp\xc0\xaa\xa4\xe5\xa4\x83\xc8\xf8\x42\x0e\xa9v\rT`\xbbg\x64\x06\x1f\x8c\x08\x39\xc6\xed\x30\x36\x61\x07;\x11)-\x8bw\xff" "O\xc5\r\xb4\xdd\xffH\xaf\xd4\xa4\xbd\xbc\xde\xafz\xd1\x63\xb4\x8bvi\x98U\"\x64\"G\xa5v\x00\xf5\xd2\xbf\x1c\xce\x91\x05\xf5z\x86" "\xdd\xbfK\x93\xad\x92\xf6\x1f\x15\x39>\xed\xfe\x65\x82\xef\x32\x33tqW\xfb\xc9\x83.\x36\x43\x33jt\x1e\x64/\xd5\xc2\xca\x13\xa7H\xbc" "\xc1\xe8\xd2\xdc\xde\xdd\x9b\xd9\xbbt\x8d\xea\xb2+\xde\x95\xa2\xcc\xaeT\x97\xc3\xb6\xae\xa7\xc9\xa1\xa8\x0e\xb1\x39\x86'\xe8\xb2\x32\xe8\xfe\x65)" "\xef\xfe\x65\x1b\xef\xfe\x65\x1b\xef\xfe\x65\x1b\xef\xfe\x65\r\x37\rnv\x14\xe9\xc6\xd8\xa5\x61\xbc\xbb\x37\x8cw\xf7\x86\xf1\xee\xde\x30\xde\xdd\x1b" "\xc6\xbb{\xc3xwo\x18\xef\xee\r\xe3\xdd\xbd\x61\xbc\xbb\x37\x8c\xab\x98<}\x62#\xef\xeem\xe4\xdd\xbd\x8d\x9c\xe2\xc1\xb5UK&&" "x\x80\xa6\xef\xee\xder\xde\xdd[\xce\xbb\x7fY\xce\xbb\xb4\x9cw\x39\x34\xe9\xd2\x04\xde\x65\x97K\xb9\xb7\xd4\x99v\xb6L\x44\x44\x88\xe8\x06" "\x97\x63\xe9\xfb\xefV'\xbf(\xaf]\xbd)\xdf]\x45\xb4\x43\x8bx\x97\xdeQ]\xf6\xcf\x95\xfb\x95\xa9]\x86\xc5\xe9\xb2\x33,\x83\x0e\xea" "\x03\xdd]&\xe8\x36]\x63\xdf\xbaK\x13o\x37y:\xb8\xa5*\x39\xed\xd7\x65\x0fSI\xdf\x8b\xee\xde\x82\xdb\xe5\xa8\xb8K\xf3l\x17\xdb" "\x63\x19\x39\x02\xe9\xb2\xeb\xa3\x0c\x1bG\x1a\xb8\xe3)\x8b@\xfbr\x0c\xd6\x0f\xe5\x41\xe9\x65}\xd1\xf5\x92\xb6\xb7\xad\xaa\xb8\x9fnSm\xf7" "\xfa\x80\xd0\xde\xaa\xdd;\xff\n\\\xa9\x07\xf6\x81\x88T\x93\xb6\x8a=\xf4.-\xb3]l\xe2k\x0c\x17\x99 \xc7\xc7\xea\xf0\xd3nK\xfa" "`\x10\x61\x89\xed\x86\x83G\xe9\xa6\x45\x08\x1fHm\xf7\x87\?\x1b\xdf\x04\x89k\x64\x37\x9c\xe3;\x1c\xa1w\xa3\xf3>\xeb\xe1.\xb6\xe6\x36" "\xb2\xc6\xeb\xb2;\xa0\xd4\xc6\x9b\xefY\xb4 \x33\xc1\x36G\xa2\xc1.\xdb\xdd\xdb\x65\xbbQ\xfd\x8e\xfd\x43\x8a\xf1I\xc1\x35:\xeev\xa3\x97" "q\x34\xbe\x85\x08\x87\x03\xe5\xe1UT[\xb8\xa8\xde\xa1\x30\xcbu\xd5\x9e\xfb\xfa\xe5\xd9K]\x04`\xe6\xecr\xb6\xb2\xcb\x19\x0f\xa5\?H" "\x9c\xb9\x04\x31\x15/\xc4\xcdK\x45\x8b\xed\xeb\x44\x64\xcd\x16\?W\xd4O\x19S\x00]Zk\xbb{\x13\xad\x8a\x61\xb1\xe3\xa5K\x35\x0c\x07" "U\x8c\x1f\x96\\\xc3\xd0\xf5\x64\xe5Lx\x97v\xd9\xee\xde.\xdb\x95\x36O\x32G\xfc\xf3\xf8\x97\x86\xe4\x64\xd3\xa5\x94\x33p)Yww" "\x8cJ\x89\xa3\xd3\xae\x9a]\xd1q\xed\xee-\xb0]).\x07\x19S}\xd6\xa5\xfd\x38\xe7/\xee\xc6\xd2\x36\x30\xa4gwW\x9f\x39\xbd\x8a" "\xa2\xc1\xb0\xbb\x37\xd8vw\x8f\x1d\xa7N\xdf\xde\xb4\xa8\x8d\xc1\x8f\xce\xefj\x10\xbd#G\xef\xfci~\x1e\x99\xf8=\xf9S\x0eh\xe1\x14" "\xda\x95\x06\xb4\xb6\r\x82RM:\xf9\x08\xf1-Z\xfd)\x9a\xf6\x18uk\x80\xed\xe8\x8c\xf4\x04\x1dp\xfd\xb3\x92\x9e\x89*\x32\xdd\x06\xb6" "$\xfa\n\"\x46\xfa\x03\x9d\x8b\xc2\xbd\x0e\x38R\x1f\x30{\x0e\xf6\xf3\xb7\"n\x9d\xbc\xf1\x41\x30\xb9\x8e\xce\x0b\xacN\x06\xea\xed'\xe5\xd8" "O*\x03\xd8\x66y\x97~v\rK\x82\xa1m\xd3\xf1M\x95#\xda\x41x\xf9~p\x16\xae\xc3U\x86\x93\xba\xff\x82\x8es\xca\xdd\x9f\x14" "\xb3\xce\x80\xd1\x64\x06\xe1\xf3\xf1ns\x11#,\xc1 \x84;\xdd\xc0\x7f\x8b]|\x84\xf0\xbe\x19\xb0[;\x88m/ \x61\xfe\x11\x44\xde" "\x17\xfeH\xa7-\x42!\x19\xd0N\xaf\x64})\xe2\xdcV\x07 \xa9\xb0\xed\x81\x10+\x04\x07\x31|\xe4\x07\\\r=`T\xdb\x01\x83\x64" "\x0c\xe2\xed\xa7\?\xe3.})\x95\xbb\xba=\xffI\xe9\xbe'\xbdg\xe6j~rx\x00\xb5\xc9\x80\x61\x0e\x95j\xb9\x41\xbb:\xa4\xc3\xb7" "\x32\xb8\xce\xed`\x32\x1e\x62\x37-\x33\xc6\x92\xef\xce}\x18\xb0\xbd\xa6\xa6\xec\xebG\xda\xcd\xf6\x87\xe9(\xff\xd7\x01M\x1f\xb8\xce\xee\x0f\xef" "\xee\xaf\xa4\x65\xe2*\x16=L\xdf[\x8a\xc9\xad\x9a\xc6.\xbekWgx\x18]i\x66[\xd0\xd3@\xe5\x9f\xf7^\x99\x8av\xc0:\x82" "\xd4\xbe\x9c\xbf\xab\x96\xc6n\xf6\xa8\xf1v\x0c\xfb\xae\xb1\x9d\xb4\x03\x8b\x37l\x32\rm\xff\x41\xd4.\x06\xcb\xf2\xc1\x81\xfdS\x7f\xc5j\x87" "\xb9J\xb4M\x9f\xc5~\xc8>\x9er\x87\x35\\\x43\x7f\x66N\x36\r\x83<\t\xdb\xeb\x30\xc0\xa2|)T\x9f`\xf9\x32\x18\x9c`#\x37" "\xd5\xaa |\x03\x95{O\x63\xd3x\x65\xf3\xda\xfe\xe0 \xd4\xb4\xd3O:\x8c\x9b\xe6\xbb\xff@[\x1c\xd3uY\x35\x96:\x13\xa7sl" "\x01h\x1a[<\x13\x31h\x35\xb1[\xa7\xfb\x91i\xcb\x11\x33\xa0j\\\x9e\xaf\xe2\xae\xb2\xd0\xdd\xda\x93\xa0\x39\x1a\xe5\xc0\x99\xa4\x89\x89\x9e" "\x0fT\x83\x11\xe5 \"\xc2\x10\xb6\x88\xe4\x31\x45\x9b\xf0Vn\xb2Nu\xe0\x86\xe3\xa9i\xcdw\xf6\x97\x35\xc4\xcc\xa1\x86%\x9c\x43\xb5\x8f" "x\xfa\x62\x8c\x37\x0c\x10\xb2k\x18|\xf0\xce\xbaw\xce$y\x86x\xff\x9c$\x1d\x06K^\x7fy\x9a<\x01\x86\xc1\x43.\xebT\xaa\xd5" "\t\x63\xef!\xdb\xb0\xa1\x9f\x30\xc4L\xe7\x30<~\xe5\xba\xfd!m\x66\x43\xec\x01n\x64(%\x15Y\xb9\x89\xb8\xd9}o\x19\"\x66\xc8" "\x35\xed\x43\xda\xa2\x86{\x03\xd4\x90\xc1v\x86\xe1\x13u\xb8\xc2\r\x39\x44\x1e\x62{\xee\xcc\x30:\xc1}sq\xcf\x90\xe3M\x65\xf4\xb8\xa5" "\xd8v\xd2x\x34\xa4{\xe4\x30j\xdd\x83L\x66\x1a\x03\x86\x1c\xc2\x0bk\xce\xfd\x8az\xd5h\xc6\x19\x32R\xd1\x30~(\x81\x36~\x65=" "\x37\x8c['\xce\xe0\xf6\x84s\x89\xaa\x45:\x16\xa0\xc6Ksl\?\x64\x8c\xf0!M\x37\x43\x86\x06Wr\xdeG\x45/\xd1\xf1\x04\xaf\x8b" ".~\x43\xae\xc0\x18\xb2Q\x19\xc6\x9b\xaeS{[\x83\r{\x9bv \t\xed\xa7\x9a\x46\xe6\x83\xfd\x43\x35\xf9\x1a\xad\xaa\xaayi\x12\x31" "\xae\xd6\x92\xaf\xfd\xf0\x8e\xb7\x17\x64\xdd\xc9\x01\xa9\x8a\x61\xe5\x63\xd7\xc4\x17\x38\xeaWz\x46\xe2@|\xa8\xf5-+[\x88^\xa7\x8a\xb6w" "\xba\x19z\x81L\xce\xd8\xbc\xf8\xbb\xa6\xde\xb5Pu\xed\x16\xafN\xe6\xc2\x31\xa7\x87\xc6\xcc|JVl&\xca@\xa8\x91s\x8d\x9d\xd5\x31" "\x97\x35*\xf7\x83\x1d\xd3\xbe\xc7\xc1\xf9#\xb4\xef\x62t\x31\xa6xN\xbe\x81(g\x63\x1a\xf2\x95!\x86\x42\x63.\xe7\x1c\x07\xa9\x86S\xe7" "y`\xd2\x10\xad\x05\x66\x9c<\x0eK\x8e\x92\x81>U\x94\"\x98hX\xef\x39\x0e\xf2\xd4\x11\xd1|\xcc\x05\x36\xc2\x17\x10\x8b\xba\xc6\xacW" "\xc6\\\xed\x31\x0e\x9eu[\x8f\xd0\x36\xf6\x33mw\xfc\xfa\x0f-\xfc\xfe\xe1\x81\x07\x10\x8b(\xc6\\_>\xe6\x42_\x8f\xfd\x34\x66\xffK" "\xc9\xb1\xdd\x98\x8b+\x94\xfbn\xd6\x98\x13\xf0J\xf6\xffL\\\xa4uo\xbaJ\x39.V\xf4\?\xe2\x1d\xf9\xe7\x8b\xfb`Y\x85\x88\x15\x8d" "\xca\xb0\x9b\xa3\x65m\xbc\xff\xb4\xca\x9e\xde\x38\x80\x11o\xcc\x10\x1c\x63\x9a\xff\x95\xec]\xa8\x88\x45\xf7\xb6\xbbPr,\xfai\xd2\x1a\xa6\xda" ">*\xea\x38\x44\xec\x33\xa5n\x46\x87\xfd+\xc6\xe1\xe9\x1a\x44\xa7mL+\xff\x98\xeb\x64\xc6\\\x0f\xa9\xa4\x39m\xcc\xc1\xde\x38\x1c\x16\x38" "\xb4\x1f\xd3\xf1z\x1c\xcex\x16X\xa4\xc6\x11\x16\x81\x8c\x19uo\x8c\xad,\x85\x88\xd7\x34\x66\x04\xbbq\x64{\xe2\x08\xb1\x0eR\xf9\xbb\x38" "\xc7\xd4\x8eT\xe4\x41\xa9\xcc\x65\xa9\xfa\xc9\xbe\x33\x64\x9a\xa4\x01_\xaej\xaf\xa9\xe0\xe1\xca\x35.\xa9RQ^\x89\xfaL$~\xd2v\xec" "\x99\xe2'\xd2\x8b\xf3\xd0>\x0b\xae\xd4\x88G\x17\xa5\xb8_\xf2\x03\x0cWl\"\x62\"\x98\xd8\xda$\xa2\x46\xf5\xcc%\x1aj(\x15\xb9\x90" "\xda\xc4\xee\xab\xae\xb3\x42;\xa2\x07\xa2\xeb\xda\xee\xaa\x91h\xb0\x37\xaa\xc8J\xd4\x44\xbf\x89\t\xd3\x12+\xf0\xc7\\\xb3\xa9\x0c\x92y^w" "/Q\x62\xb7>\x13\xa3\xe3s\x17\xe3\xcc\xb5\x8b\xac\xb2\xc6\\\xa4>\x66OZ\xe9\x85\x01\x1bN\x66t\xb6\xcd\xf9\xf7{\xe1\x34\xa9R#" "\xeb\x61\xa5\xe4\x98v\xd0\x31\xeb]!\x8a#{K\xca\xa0\x81\n\x88=:%\xfd\x15U\x64%l\x62\x65\xc6\x80\xb5\xaayj\xd0\\\xaa" "\xdc\xf7\xb1U\xd3\x32{\xb1\xd7\xd6\x1e\xeaL\x35\x19\xa6\xd1\xe3\xd2\xb4R\x01[\xc5\x9b\xb6\xabt\xfdM\x61\xc3i\xa3\xbf\x87\xdd\x1d\xde\xf9" "\xaev\x07\xbe\xdc\x46\xd8\xda\x61\xbck\xd9\xaf&,\xd5\xc2.\xdb\x98\tok\x62\x0exG,z\x93\xdf\xe5\xa5\xb4o\xbbz\xfb/\xed" "\xc7\xb5\xe0\xe2\xe2P[\xa4\xf7\xdf|v\x46\xab\xf7huO\xed\x1d\\\xa5@\xbf\xf6\xba\x16\xce\x8b!\xfc\xb3&\xbf\xdb\x9eS\xc3'\x63" "jj\xc2\xf5\x35J[\x93W\x81\x96m\x90#\xfa\x12O\x82\\\?\xc8/w\xe3\xcb\xdd\xa8\x8c\x03\xf9\x8f]\xd5#\x0c\xb9\xb6>\x85\x86" ">\xf8\x84\xf9|\x12\x94\xbf\xc1K~\x1b]\xd6\t\xfb\xa2\x13V\xf0\x13\x8d\xcc\xbb(\x85\xd3\x0c\xb5\x89S\x37IZ\xf0\xdc\xad\xa2\x93\x0b" "\x01T\x64nQ\x91~\x9f*\xee\xbe\xee\x42\xd8<&\xc1\x9b\x86'\x0e\xba\x9b\x03\x8dN\x95\x13\xd6\xf0\x93\xa0\x97r\xb2\x35\x9d\xd0\x04\xa4" "<\x38\xc4\xa6@\x45\xa9W\x38\x33\x37\xd1\xc5\x80_>\x43\x35\xe1\x92v\x65\xf2\xcb\xc1\xc6\x19\x1e\x8fXRL;)\xef\xee.\xa1\xa1\x39" "\x9a\xec\xcd\x01\x13v\x8c'\x8c\x12\xaf<|W\x0b\x8d\xe2\xcd\xde\x97j\x1a\n\xc0\xb5\xef\xb1\x93V\xa4\x89\xf4\xae\x93\xf3.\x1f\x9d\xd2\x1d" "\xf7\xbc%\xda\x41\xde\x62\x8f{\x12\xfc\xf4\x0e\x8e\xb2\xa9\x98\x84\x95\xa7(\xd5\x65\x30\"\x37\xc3)\x65\xb0\xc5\x0e\xd8$\xaco\x41T\x13\x13" "\xf9\x81\xf4.\xfd\xda\xa2\x1d\x9c\x37:\xfd\x0e\x1b\x9f\x9eL\\Q\x34\xe1\xa8L\x19\x14\xd3\x8c\x1c\xe7\x1a\\\xf0L\x43M\xac\x62\x34y\xe1" "t\xe8\x84}\xe0I\xfc:\xc1+\xbf\x80\x10h\xca\xbd\?\x96j\x9c\xa3P\x91K\xc6\xa6R\x14\xf4\x9e\xfa\xcf\xd0" "\x10g\x63\xca\x00\x19\xca\xb0\x30\x08\xaf\xef\\\x8b\xea\x0b:*N\xb9\xc1\x94\xf2\xf0\xe8\x1f\xa4\xb6$\xfc\xc1{\xf2w\xa9[%\x0c\xb2\xe1" "\xd9\xf3\xa1\x06o\x8d\xbd&\x15\xba\xca\x8d\xc7\xe0ip\xf0I\xbc=\xff\xe7'| \xb5\xc5\x33\x19\x19|y\xcap\xca\xc2\x1f\x10V\xf8" ")\xad\xac\xd3\xa8\xf2\x00\x62\xf7\xaci\xf4^r\x86\xf9;\x7f\xa5\xecJ)\x31-J\x87\xad)W\x87L\x19\x89\x62\x1a\x8d~\xa2Q\x8f" "\x9bqLi\x31\x9f\xc6\xf9\x12\x39 \xf1\x66\xe2\xd2\x95Zw\x99O\x39O=\x65\xf0\xfdi\xfc\x96\xd2!\x10\xdf\x85\x94\xdf\xe0\xedXk" "\xd0\xa3+\x1e\x90\x9b~\xe0\xa2\xae\xa9t\x45\xe4\x11\"x\xe5O=W\xd2\x93j\xca\xc6|\xca)V\xe5\xef\xf6\xd2\x45\xad\x9e\xd0\x8d\x9c" "q\x06o\xc6\x89\xba\x19\x1b\xa8\x19\xcb\x96\xef\xe4\xa6\xdc\xcf)\xceh\?\x9cq\x9b\n\xa5.L\xfa\x98\xbb\xa6u\xea^\x93\xa1;G\xef" "\x33\xe6\xf3\x19\xe7\xfd|\r\xfa\xcc\x8cy\xfbOW\xb7\xce\xe4\x0b\xf0o\x9d\x05\xd8\x13\x64\xc6\x61\xd8,\x38\xdd:\xc3\xe1w\x88\xb5z\x33" "\xec\x36,\xbcp\x9e\x83h\xbb\x95\x07\xb7\xc8\x0e\xf8\x8c\xf6\x9e\x19GY\xb3\xa0\x97v\xd2\x35\xde\xc4\xcf\n\xc7v\x33n\xe5\xa2\xd4\xe7G" "m\xad\x9an\xbf\x80\xd8\x0e\x33v.\x66\xcc\xa8R.\xaf\xe3\x62+\xf8\xc3\x1b\x83\xd9'\xb9\x41l\x86(\xc4\xdc\xdb\x8c\x96\x80\x19\xa7\xcd" "\x66\xb4\x64\xcd\xd8\xee\xce\x38\x89\x35\xe3v#\x33\xbf\x07n+\x32\xa3\xb1\x66\xe6\xf7\x1f=\xe2}\xaa#\x00\x8c\xa1\x33\xda\xb1g\x31\x66\x1c" "\x66\x34\x9d\xce\xd8\x45\x9d\xb1\xef<\x63\xe8\xc0\x19\xd7\x41*\xb5\x9fS\xe8@\xfb\x41R\x30\xd8\xac\xaf\xf9\x9e\xd1x\x35\xe7\x64\xc5\x9c\xc3\x39" "%\xa2G$\x1a\xbaY&\x36\x06\xbc\xa8j\xf2\xa8\x07Z\xd4x\xa4\xe3\x8ej\xea\x16\x82h:\xa6%\x96W\xd3\xfa\x13\x1a\xd7\\\x43\x9a" "\xa9\xb6\xdfmh\xfe\xbb\xb5\x66{\xce\xac\x32\xe7\xf2x\xe5~\x87\xa2\x39#\x84\xce\xd9i\x98\xd3\x9e\xa6\xd4\rNQ\xcf\xcdY\x1c\x17l" "\x91\x16\xb4\xf8.\x02\x14\xda\x85\xb4L\xcc\xcf\x0b\x46\xc0\\\xd0\x01v\xc1My\x94L\t\x15\xa3\xeb\xf6\xee\xe8:\xd1\xaa+im\x19 " "\xde\x0e\xe0\xad\x9a\xd8\\\xc6gi\xd7\xe2\x41\x9a\x1b\xd2,\x82\x16/\x84\xa1\xdc\x82{\x9b-,Lp\xcd\x45\xdaK\x17\x1cO/\xe8V" "\xbe`$\x1f%\xe7\x95\x17\x8cR\xb9\xe0\xbc\x88r\xdf\xdc,X\x31.\xfc\x66\xb0\xfb\xb9\x10\xee\x14\x0b\x46\x87_p\x1b\xbdo\x9d\r\xdf" "\xfc\xe1\xd4\xf7\x37#\xce~\x63\xeb\xd2\xcc\x37\x93\xf9;\x1c\xa5\x19~v\xc5\x1aj\x45\x87\x8b\x15\x13t\x45\xb7\xf8\x15\xbdSW\x9c\xa2^" "\xd9\x16\xa5\xaf\xf1Q*z\xef\xc7\x83\xb9\x8c\x80\xb8\x95\x98~\xa2\x96\x04\xec-h\xdaO\xe6\xdf|O\xb4\x83\xef\x41\xfb\xe7\xf7\x32\xd7\xec" "\x02\xac\x38\"YY\?\xc3w_\xdck\xf2Z\xad\x17s\xc4\x62\xfd\xff\xfb\x04\x13\xde\xf2\xc9\n\x84!M\xf9\xef\xceq\xf8\x89\x06\x87\xda" "\x7f\x02\xc7\x10ni\xab\xe4]\"\xd5W\xd8\x8f\x35\xe3\x66\x80U\xd0N\xe9\xfe\xf5\xd7\x17\xd0>\xc7Nl\xae\x9a\xe1\xd6\xd6\xc6\x7f\x97\x16" "\xbd\xcfh\x39\x66\x0fh\xc5\xbaO\xa9[\xd3\xa1\xf6T-\x1a\x9f&\xda\xe0T\xea_\x86\x02\x12\xad\xfc\xef\xce\xbc*\x80h'W\x1c\x34" "\xad\xb8\xa8l\x15\x9e\"\x1f\x30\x8a\xe6*\xec\xdd:\x99\xdfU\xf4$\x10Q\x97\xc1\xc0\x65\x61\xc5Z\x94;h\x0b\xb1i\xd3\x8a\xfd\x8d\x15" "\x43\x36\xacX\xbb*\xfd'\xf4>\\\xd1\xdbP\xe9\x97S\x91\x99T\x44\xbf\x32k\x66\xa5\x9f^\xc4\xddQ\x8a;HQ\x63(\x97Ut" ";\x01\x11\xccW\xa8\x91\xfe\xc3\xe3W\xd7\xd4h\xf7\x97\xc6\x1e\x0e\xb4\xc9\xe1g\x7fN\"\xf8)\x9a&/\x04M\x14\xb5\x83o\xeeR\x95" "\x44\x43\xc8\xae\x15\x9d\x0bV\xda\xf1\xb9ix\x1e\x11\xed \xc7\xd0\x9bo\xe5\x45\x46(\xb5,\x17\x8e\xabv\xf0\\\xaa\xc1\x9a\xb2\xda\xef\xee" "\xb9\xc2N\xf7\xca\x91\x93&\x0c\x15\x93o\x61\xaeu\x15W\x65,\xb0\xf4;Um\xdd\x64\xeb\xa6ZtS=\xf8L\x03\n\xdc\xf4\x12m" "\xff\xbc\xa2\x1dp\x06\xae\xffS\xfauT|\xbes\x91[x\xa8\x18" "\xad\x91!v\x8bG\xf2\xd9\x99\xfc\x16\xdd\xbd\xd5\xee{\xc0\xf4^\xcb-\x80\xd8\xdcs\xcd\x12\xba\x66=\xbb\xe6\x16\x0fki\xfe@\xf4y" "\xd7\x34\x9f\xac\xb9\xa7\x91\x32\xc8W\xd9\"\xaf\x19\xc4r\xcd\xd6v\xcd-\xe6\x94\xc1\xf7\x8c^\xd9\xaa\xb1x\x9b\x88\x9b\\s@\xb4\x96/" ":\x7f\x17\xe7\xe1\xf5,\x9etq`=\x0c\xafW\xe1\x1d\x7f\x89\xf0\xcfkN\x85)u\x1e\xe0\xcf\t\x34\x94\x84uX\xc1m\xb2\xc5Y" "K\x93\x1e\x65\x1f\x39u\xb4\x0e\xe1\xc4\xb9\xa6\x9f\xf2\x9a\x86\xe0\x35\xbb\"k\xce\xf2\xac\xa3\x16\xae\xc9\xa8\x0c\xbe\x63\xd1Z\xfa)\xdaS`" "Rr\xeeK\x19\xdeTi\x11Ys\x38\xb0\xf6;\x63(R\xf7\xd5\xd5\x9dli\x8f\xdc\xb0\x87\xb0\xc1\xbe\xe0\x46\x0e+U\x64\xf1\xd8p" "\x83\xe0\r\x8b\xf7\x06\xbb\xa5\x0b\x61\x8c\xdf\x98\x31~I\xeb\xa9\xc7\xbbR\xfa\xe9\x39\x44\xdbpT\xb4\xe1\xa2\x88M\xd8\xb1R\xb9\xe1\x9eu" "\x1bn>\xb3\x91\xba)\xd9\xcfZ\x34\xc4!\xdepY\xe0\x86q\x90\x37Qg\r\x62i\xe9\x86\x01Z\x37q\xaa&\x39\x33\xbcy\x85v" "R\xfb]\xd6\xb8\xb7\x92j\xf2\xf5\x30u\xc1\x35,\x1b\xc6\x02\xd9\xd0N\xb6\xa1\xb7\xd1\x06!\xf4\xb2G\x98\x82\xca\x32j\x66\xf6\x08\x61\xd0" "\x84\x36r\x16Z\xc8\xa9\xec\x11V\x1c(\xefw\x7f\x16\x10m\x89t\x36\xf3k\x1b\x43)\xbb\xe4\x88\xfc&W\xa0\xcdy(\x87N\x98\xae" "\x44\x34\xa7\x37%\x7fj\xb5\x82\xd0\xfa*\x42\x0b\xfcj\x44\x1b\xac\x62\x89|\x37\x62}\x93\xf2\x07\xcc\x9c\x90\x45r\xbf(]\xb5\xfdj/" "\xd1r\xdf\xe4\xd2\x89\x8dYU\\!\x66\x84\x8a\x1b\xd0z\t\xc6p|v \xc6\x19\xfe\xdc\xe6\x05\x8c\xb0z\x9b\x88`\x04*V\xc9\x19" "hv\x96l&\xfa\xe2$\xbf\x1ez$\x9f\x9d\xd6\xc5n\xba\x86\x61\xac\x8a\xce\x0f\xb0\xc8\xafX\xbd\xa0\xbc\x05K\xe7\xb0\xd0\xb9\xc8\xd7*" "\xda\x33\x0c\x9a*\xce\xc1\xf2\x31\xc9\xc7.\xe3\x9d H\x96\x11}p\x13Q\x1aL\x44\x45\xa8\xe2\x97\x13\x83\x18\x15\x17\x30\xdf\x8a\xf8\x87\xef" "\xe5\xe6\x19;\x45\x98\x18\x1f\x33m\xeb<\x64^\x8f\xcaW\x19\x64\xa2\xfc\xa8\xd6v\x06\xb9\xa7\xdf\xcd\xcd\xdf\x1a\n\x14\x0e\xf8\x83\x8bx\x7f" "\x81\xad\xafLK\xee\xb7\xd1\xc6\xa0\xc0\x44\rY\x37^%Zo\x99\x88\xb3L<;\xa5\x36pz\xf6\x44k \x34\x8b\xb6\xf2\xda\xe9\x99" "\x1d\x0b\xd7\x84\xcf\xd7\xc1`\xad[R\xa4\xf9\xc1\x0b\xb3\x81m\xdb\xa4\xe4\xd3\x34o\x9d\x32\x14\x0c\xea\x03\xd7\x82\xe2\x0f\x86M\xd0\x9a\xdf\xe1" "\xf5\xca\x35[\x39\xc3T\xb7\xcaLh]O%_\x63\x8fo\xa7\xc7\x12\xd0\x63V\xe9};\xc3\xf2\x05\"\xfe\x98\x86\x90\x32I\x80*=" "\xc6\x1c\xd4\?\x41\x9fL\x44V\x01\xc1\x94\xe5`\x91\xc6\x16'\xd8l\xf6\xef\x03I\x9e\xfb\xbeq&\xeb\xc1\x44[^;\xbd\x44 \x1a\xb3" "\xb2\x41\xbe'\x17\\\x31\xb3\xae\xf8\x06\xd6\xbc\xa1\xf5{R\x88l\xf7\x0c#\xccN\"\xb2\x1a\x41\xc5nL\xe2\x83\x9a\x16\xce\xe9\xcb\x62\x1a" "\xbc\xf7U|wj\xca\xfb+\x31\r\xdd\xa0l\x06\xfb\xe9\n]O#\xb9\xbd\xf2\x08\xf3=\xb0\x88\x9a.<\?\x0b\x1f\x1b\x07\xa2\xe7\x46" "\xdd\x12\xabYK\x9c\x35\xe5@\xf9\n\xbc\xfc\x08\xff \x83\xa3\x85V\xae\xc8\x1fr\xeb\xf4\x1a\x02\x62\xdc}\x13\x01\x8bH\xfc\x18\x86\xa9\xa2" "\xd9z\t\x65#~Gm\x85\xb8s\xc2\x06o\xb6Qr\xa2\x1d\x11\xf1\xa1\xe1\x44\xfb%\xe2\xe3\xb5&O\xbe\x46M\x9e\xe3\x16\xdb)\x88" "\xf6\x84\\\x19\xf6x\xd1>\x1f\xaa\x7f\x8dhK\"\x0es\xe4\xa3\x33qt\x10\x8d\xb5\x94\x30\xce\xeb\xda\x0c\x98\x12p\xc0\x17\x64\xa8\xc6\xf3" "OS\xce\xe4\x97S\x64\x99pvON\x9d\xe1I\x19Sw\xa2-\xf8|\xdf\xb7\xce\xe4\x16\x96(Q\xb0+\x08O\x90\x11\xa2,N\x14" "\xe5\xd2\xce\x90\x15\x03\x44\xf4\x46\x44\x63\xc3\x11ikq\x83]\x99\xb0U\xa2\x1e\x43\xa3\x08o\x1e!K\x98:\x0f\x31g\xe8\xe6r\xccM" "\xba\x9ej\xdew\x11;\x18\x8ax\x8b\xa4\x8f*(J\xfe\x62\x30\xb5\"l\xa4\x9c^\r\x46\x8d\x39\xb9\x86\xc7\xb1\x88O\xfc\xd6\xd3$~" "\x45i\x8b\xde\x8f\xc8K\xa7.\xb4\xf1[\x14\x8d\x35/\xc6\x87\xc2\x36\x93\xe2\x83\xe9\xd0\x43\xa5\x17M\xac\xcc\xdc#\xbbz\xf3+<\xa8\x08" "\x44\x0bgy\x84\x95\x14m\x95\x8d\xd3\x0f\x98\x39P\xad\x0cn*\x61\xff\x86\"\x1fr\x8b\x44\x88\x8f*\xe4\xd8\x19\x35>\xc2\xea\r\xf6q" "\xb1\x03\x18*\x64\x33\x98R\x37j\xce]\xdf\xb8\x86\x99y\x15k^\x19\x89\xe8\x89\x16\x1f\xe3\xbe\xe3\xf4\x39Ysz\xfd\x14\x33S\xc7'" "\xb8\x61\xef\x1a\xc4\xd9\x06\x89L\x88\xe8m\xc2\x8bVr\xa1\xab\xaa\x33(\x37\x13\x97\x14\?\xa0\x13\x44\xe7H\xf8\xf8\x66\x02>\x9f\x39\xe1\x12" "n\x62\xd4(\xea\x34\xb7\?\xea\xf3\xab\x33~mR\xec\x80/\x45\x12Y\x1e\x16(%o\xc4\xbf\xff\x9eU\xcf\xb3\x0b\xfe\x8a\xd9%\xee\x31" "Q\xd8:\xc4\xfdS\x84|V\x91\x37\xee\xfb\xb7\xa9\xf8\x83\x45\xaf\"N\x91\xad\xe3\x05\x93\x62\x83\x13{\xcd\xa5\x9b\x31,\x8b\xde\x05\x32m" "\xe9\x62\x90\?\xf5\x82\"\x9a\x86\xbc\x61\x07R\xb4\xe8\xb1\x1e\xd5\x7f\x12m\xf5'|\x38I\x34\xdf\xe2\x1b\x1aoj\x97\xe9\x93\x83\x38\xbd<" "\x10w\x19\xd4\xb3\xde\x10 t\xbf\xb2\xea\xf4\x64\xc0\x34\xa0\xd1\x9b~\x04\xb2\x36z_O\xc4\xf0H\x17\xdf\xab\?%_\xbd\x97\xde]\x35" "\xeb\xc4L\xb9\x89^{\xa9\xc8*\t\xc3\x16%\x9f\xa4\xd6 \xf9\xd4\r\xde%\x1b\x42l\xc1\xa0\xfcq\x62\xafth-\xd4\x62\xbb\x0f\xde" "\xc6g\xdb\xb9\xfb\\\x43\xec\x90\x16\x11'\x9b\xff]\x9c\x62)\x8e\x8a\xc5\x44\\\xa5t[\xd0\xcd\xc5\xdfZ\x30\xb6\xf3\xe7\x31{j\xe4\xd8" "\"\x9f\x38\x61\x89\x38~\x03\x97\x37\xdaY\xf0\xef\xba\x86u\x1c\xd9<\x16\xdf\x08\xfb\xd7\xd8\x03*\x9b\xdfU\xad\xf6-\x04\x16\x00\xd0(\xf7" "\x87\xb0\t\xa6\x89\x88\xa9\xddl\x61\xd7\xb5\xd2\xc8\x90\x38\xc2\xa5=\xeb\x19\xbb\xbeg\x08\xaa \x44\xdf\xe9,\x18\xa4\xc0\x65#\xc8\xa4\xb1\xc2" " {\x86\x45\x9d\xc2\x81=\xc6\x19\xb6\x1f\xc8\x96\x30\xe9\x63\xc4l\x83\x8a\x05\xa7\xfc\xc7\n,\xd5N\x9d\x18'\xabXr\x62\xe6\xc2\x44L" "R\xa8xN\xfa\xb7[\xe4\x84\\\x92+\x38\x94\x89h\x43h\xe5\xa3\x33\xb9\x86\x45)\xcfr/\xaa,\xf7\xa0\x32\x62g \x11W+\xec" "S\x99\xe5\xe6\xc9J\x9e\xd8\xcc\x19\xc6 \xdb\x87\xa1S\xb5-\x86\xf6\"\xfe\xf0)\xb7\xf7X\x1cj\"\x8cZ\x92\x06G\xb8\x9f \x95\x63" "O\x94{_\n\x33\xd2K\xfe\xa2\x88\x07\x0c\xb2U\x30\xd7%\x97N\x98\x43M\xc4\x42\xe5,\x17\xf9\x1a\xe1\xb3\xab\"O\x90\xaf;wG" "O\x14\?\xfc\x96\x61\x8aQ\xce\x9c\xfb\x8f\x66Q\xfd\"\x11-|\x97\x88\xa7ON\xac\xbb\x83\xe8w}\xb6Ln\xc5\xf6\xed\x12\x96\x8f\x93" "\xdf\x98\x13\x83\xd1\xd3\x12\xd1\x62\x13\xd1V\x08\x9a\x98<\x99\x88\xd7\x8f.\xb2\xbe\x37\xf1=\x45\xf1\xd6\t\x33N\x96\x81p\x95\xbc\x1e*n" "\x61\x9f\xc3\x46\x11\x17\xecJr\x35\xcf>\x8f\x62\xe1\x8f\xf0\xf9\x0bqv\x45l\x9e\xc0\x8c\xa3\x62\t\x9b\x43\xaa\xc8\xb7\xd7\xda\x38\xd5\x07\x61" "\x9bs-\x1c=\xb3\x1fY\n\xde\x8e\xc1\x0f\xfe\xe6+\xe5\x0c\xda\xbc\x8f^\x01\x9b\xe1\xa9X\x83\xa1J\xc5\x07\xd8\x9fT\xe4\xdd\xf4\xd7I" "z\x0fxW\x83\xa1\x17\x9e`\xf8$i\x07\x83\xa9h\x8b\x34\xbb\t%\xc4\xc7\x16.\xc9\x15s\xd4\xfa\xc8\x19\xbc\xa3\xe8$\xdbs\x8b\xf8" "s\x84\xc0=*~\xc2\x8c\x93-\x85i|\x8a\xd5@\xca\x0fX\x65T\xfc\n\xcb\x65\x8a\?\xe0\xe9)y\xc3\xa6O\xc4;\xec\x35)\"" "\xc6\x05\xc2\x06\x89\x44\xd0\x35\x84\x17%\x8a\xfc\xcaY\xdf\x33NX\xba\xc1\xd6\xf5\"\xca\xb8\x41s\xe1\xf0P;/\x1ch\xd1\xd3\x32\xd1." "P\xf4\xb1\xa3\x9b\xd1\x8b\xad\x88\xc9\x05m\x03$\xe5\x8f\x13\xa1\xf0M\x44\xf4\x06\x11=\xa0\xb3\x88\xb7]L\x8a\x8aX\xe1\xa7|\xf5\x98S" "\x14\xbe\x1e\x61\xc2M\xc4\x66\xc9\xe9o\xd2\xeb\xcd$\xc8\xbf\x88\xe3\xb6g\xc0pR\xc1\x9c\x9a\x8a+\xddX>\x95\xc3\x8c\xa7\x1c\x98\x1d{" "\xb5\x1a\xce\xe7\xce\xe4\x39Y\xcd\x46\xc7\xdf\xec\xa5\x97\xd8\x8b/%z.\x1d\xa5\xdf]\x64\x8bQ\x8a\n\x38\x01|\xfa\x85,\x90\x9a\xb9\xd0" "O)y\xc1\xd4\xe8\xfe\x92\xf1\x0b}\xe9&\xc6\x93/\x1a\x90J\x08\xfa\xef\xa2N\x00\x9e&\xbf\x83\x0b\x8d\x89:R\xb8\xad&\x9a\xcf\x97" "\x98&\x9dI\x8e=L+\x15\x12qz\xb2\xff\xc0O\x85\x0c\x10UWNO\x97\xa8>\x91W\x0f\xb1\x81,\x1e=\xf7\xb0\x02;\xab{" "\xe8\xc5\x18\x34\x95\xa2\x8fm\xf2\x9b\x8f-\xbc\x45\x45\xfc*\xea~\xe8\xa7|\xda.\xef\x02=r%[O\x11\xffx\xbaG+>\xd2\xea" "\xd1[Gs\x00\x43\xd2\xc7G\xe9\xb8zI\x11o[m\x9bu\x9c&>\xee{\x0b\xe1\xf9+\xce\xb6\xe3\x34N\x13\xe7&\x31S(." "\xbe\xe9y'x\x43^\x1e\xe2\x8b\x33\xafi\xd5\xad\x82%\xce\xab\xce\xf8\xb9\x45\xb6\x61iWq\xa0\x8b\x0c\xbfxo/h\x89$\x1bz" "\xe6T\xf1\x39\x39\xea\x99R\x44\xac:\x30q\x97\xe1=\xc1\x8eR\xf2\xfa\xd9S\x39\xee}\x90=\x92O\x06\x93\x93\x10\xc5>\xee\x9f`N" "<\xcb\x1d\n\x8d\xd8\xf8O\xc5\t\x89\x97\xac\xb3\xd8\x37<\x34@\xca\xc7\x93\x89\xe7\xd5xZ\xf4\xa6\x1eQ\x0c\x94\xfe\x11\xaf\xb1(\xfb\x1b" "\x97nx\xc0\x82)\x83\xea\xe4\xd9\x45\x64\xdb\x1bo\xf9H\xac\xe2u\xf4\xed\xa9\xba\xad;\x93\x1fn\x1b$\xf2\r\x16=)k~\x02o" "\x90\x85\x98\x18\xa2\xb8H\xc4\xef\x62\x98\xfap-,\x14\x61g\x17-\x8bT\xdcU\xc8\xbb\x11\x9cg\x45\x44\xe7\xb8\xc4\xceqIr\x15\x33" "\x65\x19\xce\xec\x42\xdb\x83W\xb8\xb1T,G\x16v*{\x85\xa5\x12\xd9+\xe9\x8f\x38\x99=M\x9c\xe0[\xf2\xe7\x0c\x9a\x43\xf9\x83\x86\x44" "\xba\xc2*]!\xaaR\xe5\xeey\x06\xef\xc8\x03-\x39o\xf3]\xc3\xd3\?~R\xfb\x90~\xb5\xf6\xd1\xff\xe5\xf0\xd0\xc9\x1e\xf9\x15\x9c\x66" "\x85\x03k\xfe\xaf\x30\x95#\xac]\x82\x36\x45*\xb4yZ\xe1\xb0\x02\x8e\x9f\x9d\xe1\xf9\x15\"\xb1\x65\xaf\xe0\x12&L\?\x82\xe8~^\x45" "\x85\x33\xa7\xdf\xb0\x8aL\x08V\x8d\xca\xe4S\xa9\xda.\x37\x41i\xc8^\xdf\x15k\xa7+\xac\x03\x30&\x17\x11\xf1\x1f_\xb7\xf0)\xc2\xe5" "X\x46\xfa\xec\xe9_\xb1\x0c]\x31\xd3^\x31\xb7]\xf9\xaf\x84\x89k\xb8i\x98\x45\x84h\x61\xa9L\xe4(^\x45\xbf_\x15\xe7\x63\x88\xc8" "\?W\xf2~\xc0\x97,y\x07\xbe\x9e'\xd7\x13\x11\xdf\xbe\x81/q\xf6&\xacX\xa6\xb8\x61\x33U\x41\x94\n\x65\xd5\xc9\x8e\x87\x8ap\x01" "\xcaV\xe0\x04!\xccV@\x8cy+\xf0\xb4\x14\xf6@v.*\xf0u\x12\xde\x1f\x93\xcf\x1c\xb1T\xa2\xce\x35\xf8m\x37T\xc1\x0c\x9a\x10" "\xcdr\x85u\xa6\x32\x9e\xde\x05\xe5\x16\xb5.h\x13\xab\xc2\xe9\x9d\x33\xf9\x81\xb9-\x65+\xb4\x1aV\x92\x00\xe8\"Z\xfc\xf0l\x95\x35H" "\x15.q\x42\x94\xa3*\x9c\xd5\x94K\xd0\x9c\xd6\x84\xe8\xc4T\xcdS\xfb-\x11\xf1\xd2T\x84\x0f\x11\x45:g\x9a\x16=\xb6\xb0\x36M\x34" "\x0b\xf8\x65\x64\x63S\x65\xd5#l\x83Y\x1eG\xd9\xac\xb2\xb7_\x65\x17\xb7\xcaY\x85\xaa\x99Z*.\"\x42\xab\x88\xe8\xd7V\x93\x8f\xba" "\x15\xf8\xf7\x9a\x88\x10j&\xc2\x91K\xc4\xde\x19\xf9\xe0\xdcgK\xd5\x98\x01\xab\x81\xc5\x1a\x13\xda\x86/\xc2\x65\x99\xaf\xa9\xca>|\x15Q" "\xc0\x8c\xd8\"L\x44s\xdf\x10\x16\x90\xaa\xe1)\xb7\xda\x12\x91\xe9\xc5\x16\xadJ\x33\xae\x12[\xb3\x88\x88\xeeX\x95\x03\xe9*\xbb\x65UO" "\\\xec\xb1!\x44\xebV\xc5\x82\x1e!:\x39J\x0e{\xab~\x43\x34OV\xa3\xc6\xa3\x93Mx\x95\xc5\xbd\x8a}\x18\x84|\x43\xccTU" "\x84@P\xe2T,\xd1U\x7f \xdaY\xea\x87N\xcd\xaau\xc9\xbds\xb3h\xe6\x62i\x84sg\xb6\xce\x8cg\x81\x44\x90\x37\xeb\xf0\xa2" "\x62\x7f\xa2n\xf6\xa5:\x8b\xa1i\x98\x36\x82\xb8L\xc4\xc6 \xd8\xbc\x30\x8f\xda\x81\xc7%g\x83L;\xd8\x44\t\x07\xda\xa9\x38\x9dJ\xb4" "\x83\xdf\xf5\x1eh\xe5\x83\x36s\x11\x8b\xb3\x13\xad<\xe1\x84\x9ei\x1e\x80\x07Z\x63I{\x96iO\x0b\xcd\xb5\x30\x17\xd9\x81\xf1M\xb0\xec" "&\xda\xfa\xfa\xf7\xfb\xc9\xb5\xbd\x9d\xd6\x34\xf5\x01Ln@\x03\x44\xe9\xe6\x93tu\xc3\xb1\xe7\x33\xf6UM\xebu\xa3Uz\xaf\x31\x84\x97" "iI\x84X\xd5<\xd9\x96\xbf\xeb\xbb\xf0\xb4\xb6\xd7\xde\x38z\x34m\xdb\x83\xc3\x96i:\xa5\x86\x9aR\xb5$\xaa\xa7h\xbe\xab\x8d\x8aM" "'\xdc}]\x8bN\xf9\x14\x98k\xac'\xbe\xca\"\xe6\x8f\xc8\xac\xbfN\x7f\x66\xed\x88\x63\x62\xb3\xee\xaf\x04\x8e\x18\xcaG\xf2\xd9\x99\x04s" "Tm\x0b\xfa\t\xcfV\xce\xbd\xad\xb6\x0eG\x03Z\xea\xea\x89\xaf\x81\x88~\xd1\xf2h_\x8b\xd5\xd9]\xa8\x07\x7fRN\x98\x38\x34\x1c\x81" "\x0ct}\xaf[\xfb\x64\x97\xcbq\\\\\x87w\x88\xb0\xfe\xe2\x0c\xef\xb3q\xf9\xcc\xb5\xbf\x45\xf8\x44\xa9\xb6q\xee\xab\xa6\xbd\xc6\x66Q\x0f" "x\x81\xf0\xec\x1e<\xf0\xf9\xcc\x61\xcd\x98\xf8\x34\x8a\x66N*\xc6\xf0\xfc=I\xea\x66.\xfaz`\xd7\xb3~\xe8\xe4/\x9a\xed\xf8k\xf4" "\x02\xa4\xc5\xe9\xe2$\xe5\xef\xf2\x9aS\x88u\xdb\xb7\xb2" "\x9bh\x16n]\xf8\x07\x99\x93\x93u\xca\x83\x8c\x93\xec\xa8,\xe2-\x1e*\xe4[\x43\x9cv\x61\xfd\x1b\xdeL\"\x36x.\xcc\x37)\x93" "\xcb\xdd\xf3\x16\x9f\x90\x8b\xc3\x97\x81\x13\x0b$\x44|\x45\xfd\x88}\x8a\x85}\xa4\x13\x42\"\x1a\x93\x30\t\xa6\xd9\x86\xce\xfc-\x1a\x0c\xe5\xef" "\xea\xdckZ\xce\x9e\xd5\x39\xde\xae\xb3G\xa9\xdc\xcf\xf0\xa8\x96\xac`\x84v\x93M\xc4\x65\xf2\x9d$\xe2\xa7h\xe9\xbc\xbfL\x44+\x14\xa2" "KY\xe7\xecm\x1d\xeb\x16\x84\x98\xd1\xaa\xb3\x0bV\xf7\xba@\xa8\xfe\xb3\xcc\x93\x9c\x90Rz\xbe\x83\x43\xaep\x84\x32\xe5\xb9\x88\xd3\xdfJ" "\x44\xcfP\x11\xaf\x0e\x1e\x39\xd9:{Yu,\x63\x10^\xe0^\xe2\xe7k\xa7_\x98\xf3\x30u\x9a\x37\xea\xf1;^W\xcc\xf7/\xd5," "\xd8O(\xad\x65\x90\x41Z\xc9@\xcfK\x05\xfbj\xca$\xf2\xb2i\xbb\x97\x93\xa8\x87\x9c\xc2\x89G\x61\xc7\xdf\xe9\xee\x18O\xe7\xa7\x61\x7f" "\xae\xee\xf5\x37\xf6m\x36\x1eT\r\xa2\x85\xf3\x39g\x1f\xeb\xde\xbe\n\xbd~Pq]\xa6\x38%\xf1\xc4\x9c\x8ePz\x91S\x91\x85X\xc4" "\xe4V\xee\x91\xd1v\xf0.\xa9\x63\xa1\x94\xd1\xdf\x05\x96k\x08\?\x90\t\x10\x8e^\x88\x89\xfd\x06K\xb1R\x9b\x15\x98\x88U\x0b\xfe\xde\x15" "\x03\xc7`\x81\xbf\x1dH\x7f\x8e\x37k\x87\xcfnY\x18\xa1-\x0f\x44x\xcd\x43\xbb\xc8ko\x15\xcf\xdf\xc0\x9e\x1c\x89\xa8[\x8f\x64\x13-" ")\xdd\xa6\xf5\xf6W\xf2@\x33\xa6I]\xa2\xb5\x92\x45\x04\xc7\x81\xd3#\x0et\xa1\xdd\xb0\x63k\xda\xf5\x37\xd6\x93Q\xdb\x46\xdd\xe4\x46\xb4" "\x8b\x80\xc2\xbe\xd7\x0e\xee\x33:\x1f\xe8j\xe7\x83\x03I}\xb7\xd7\xf0t\x88Wrp\x38\x9e\xbc\xea\xd4@~\xf6/\x87\xa7'\x34^\xf1" "\x98\xdc\xfa^k\xb3\xf1\x30\xed\xe0\x8c\xb6\xf3\xd7>\x93\xfd\xeb\x31}\x44X\x06\xec\x93\xf7\xcb\xc3\x93\xda\xfaq\x88\x1e\xab\xd2\xb4x\x32G" "\xf8Whr_\x8d\xce\x41\x8a\xef;*\xa6U_X;\x9a\x66K\xe8\x0f\xd2\x05;\x8dP\xeb\x82\xa8\xe7\x94j\x81<\xe5\xa9<\xf5\x92" "\x46\x45\x45v+\x1b\xc9+^\x33o\xa2#\xa1\xe4\x1c&\x45\xf9-+\xab\x06|\x44\x85\x85\xbe\xd3\xb3\xb6\x8a\xfb\xebx\xf6\x0cJ\xb8\x18" "mpJ\xcd\xd8\x16\xd1N\xb4r\x91\x44\x81@H\xeel\xc3_\x0c\xfd\x98\x1a\xb6\x03\xe7\xca\xc5\x64O)\xd1\xd0\xec+\xf7]!\xd5\x0e" "R\x1fN\xf2\xca/\xe7\xef\xaa\x03\xb1\x35q&\xe7oM<\x1b\x89\x18\xbf\xbf\xaa\x45\xb9\x82\xfc\xcdI\xa5\x06;\x07>:T\xfa\xbb\xdc" "w\xae\x1atlj`\xf1n\xb6\x91|\xa5'\xfd\x92\xee\xfe[\xb3\xf8\xb8\xe5\xb9\x94=\x01%\xa2\xe8@\xbc\xc9\xba\x18\x15\xdeu\xaf\xd9" "\xc5u\x92\xecK\xd4\x30\x1a\xaa\xb9\xfb\x08q\x8b\x93\x61\x19\xb9r\x0b\x32\x9fjS\xee\x01\xf0\x44\xbb\xb9\xf4\x1c\x80\xe5\x06\x42&\xbb\xc5\x45" "\x9d'\xa2-g\x14\xd1VG\x1a\x93x\xb7\xd0\xfe\xaay\xf4\x80=i\x9c\xba\x96\x8c\x81-\x65\xff.\xa7\xfa\x95\xef\x11\xabY\xd5\x0e\xea" "\x0b\xd5l\x03\x64\xa9\x01#\xe6\x63\x39v\xf0^\x45KV\xc9@\x9b\x9e\xfc\xcb\xf7\x1f*\xcep\xa0\x0b\xd4\xe9h\xa2\x07\x90\x90\x7fk!" "\xa6\x31\x1b^\xf8\xc2g>)k-\xb6U\x8d\x64\xcfI\x7f\xa5\xb6\xed\x64-\x11K\xe5$\x45\x45\xe3+\xd5\xf0\xcb\x1e\x45\x11\x9aU\xa3" "\xb4\xa5\xd8\x81J\x8b\x83-\xd5\x92\x80u\xd0\x0ev\xab\xb5\x03\x87\x8f\x39\x41\xd6\xa5\x9dP\xe9\xb9\x43\x9f\x8b%Q\xc5\x46\"\xfa\xa3\xa8\xc8" "\xa7\x86\x98\xfc\x12\xdd\x18\xa5T\x01\x34S\x8b\x36p\"\x0cu\xb0Z\xd2\xc1\x42\x8f%K\xfaM\xd3\xed\x11\xf9\xb8\x08\xa7,\x84\x07\x86\xf2" "\xa0\xb2\x90:\xd4\x8b\x43|\x84\x66\x90\xfe(\r,\xc4\x14\x16\x96N/u*\xa2\x1b\xdc\xa0\xf3W\x83\xf6\xde\x46<\xc0\x43H\xadK." "\x9cIp,\xd1\xf8P\xec\x8d\x08;\xbb\xfb\x07\x88\xb0\x9c\x37\x92M\xf9\xb2\x8d]\x65\x04\xf2Nw\x35+\x65\x92\x45\xa5\xc1\xae\x43\\\xd9" "\xdb{\n\xb2\x37\xce\xe0\xe9\x38\xca\x9c\x1dj\xb5\x1c\xb5\xba\x33\xbc\xef\xbb\xc8\xc1\x88\x88/ \xccgO\xc1\xb0\x15\x1c]\xb1\xd7I\x8d\x33" "\x87O\x9c\x39|\n\x36/\xb4_\xe8\xb6\xb0\x1cR=q\x14\xaa\x94\x0c\x44\x7f\x85\xbd\x16V\x34\xb8^\xf4\xbe\xd2]U\x13\x03\xf6_\x9f" "k(\xa2\x83O\xea\xb7\x32\xcc\xfd]^\xba\x16\xd5\x17\xec\x02S\xa3G\xf6\x13\\\xbf\xb3O~M\xe1~\x8e\xf2\x89\xb7\xfa\xa2[*>" "\xf4\xe9\xdc\xd1\x64\xeek\"R|\xb6\x19\xa4r\xbb\xeb*\x62\xaa\x8b\x96m\xea\xf9Q\x46\xf6\xda\xef\xe6\x46#\x88\xc2\xaa\xd7\xd4\x31Z\xa3" "\xa0\xd1\x1a\x8e\x96\x90Y\xb5\x37\x83\xcb#P\x37.\x9bP\xfc\x08\x86y\x36\x37\xcd\xe4\xa8\xc5g\x10\xa2x+\x83^\x43\xda\x02\x8b\xc6\xd9" "\xe0P\xc3\x0e\xf7\xbf\x93\x1fI\x45.)Y\xec\x1ej\x9f'\xd0\x86x\x00\x0e\xc7\x9a\xe1\xe9%\xe8\x37zp\x97\xe1\x43\xc1IW:\x15" "\x11\x9dY\x44&\x05\r\xe8M\x1a\xd0\x9bX\xe6\x97m\x62\xb7%\x61\xdfZ\xb8\xa6\xff\x8e\x86\xf9\xe6\xaek\x95xK\xfe@\xcc=\xb4\x38" "\xe3\xd7\xe2\x0cx\x8b\x63\xbdVxt\xef\x94Ss\x62\x99\x1a\xf6;\x16\xcd\x8f\xa6\xc7\x1c\xa1\xb7\xe8\x18\xad\xa4\xe7W\x8b\xe3\xa1\x16v\xaa" "\x16\xc2\x65\xa1\xc5\x81\x87\x1b\x0b[\xbb\xab\x07r\x08>o\x9c\xeay\x92\xb2\x8a\xa4\xa3\xfe(\x98\x99\xee\xd0\x00\xa3\xe4\xf8\x46\xb7\xc2\xc1\x1a" "\x19\x11\xe5\x0f\x03\xdb=\x9b\x65\xf2\x03l\xb5X\xc8u\x43\x0e\xc4\xb5U\xb1\xc2W+\xe2\xabS\xbe\xbb\xaf\x13\xf4@\x12\xd1\xe7@\xdb\x7f" "\xfc\x06\xf6\xbe\xc0\x41\x19{Y\x66\xb9\x65\xa2\x91nY\x9d\xb0\x90\x93;\x8b\x8e\xf1T\xecs(\x83r\x9f^\x98\x1d\xbf\xb9pX\x07\xc7" "\x63p\xf1\xe1\x94s\xd0X\xda\x89\x30\xfc\xeb\x44\xe9;\xf0O\x03\xc4+\xe9\x44\x8d'\xb0\x63o\xab\xc3\xca\xb7\x13\xe7\xc6\x08g\x06\x11\xde" "\x90\x1d\x44\xf4\x11\x96s$\xce\x86\x05\xa2\xc2\xea\x97\\\x9b\xb3\xc0\x9d\x18\xde\xc8\x1d\xbe\xde\x0e\xc7\x95\x1d\x8e#;\x07\xa9\xc8\x9a\xb5\x83\xd8" "\x36\xc2\xfb+'\xf6\x41\x11\x11\xc9\xd6\x0f\x12\x07\xdf\xbetx\x62\x64\xfa~\xf8\xf2\x86\x65%\"\"\xc9\xfb\xd1y!\xb2\xf5\x86\"~\xbe" "\xfd\xc2\xe5Z\xaa\x99\x16\x36\xa0\xcb\x0ehxU\xee_\xa1;\xd0\x0f~\xd7V\\\x06\x41v\xee\x94Z\x0f\x41SU[\x39\xd5\x81j\xb0" "t\r\x9b\x19\x99\xb8{}\x64\xf3\x36\x08r\x05\xf2\x8c\xbcgq\x1b\xd0\x10\x38H\xbe\xda\xe0\xb9l\xc7\x45#\xb6\xecR\xf1\x9el\xb3U" "\x18\x04OY'\xd7\xba\x0c\x02\x8c\xec\x95\xec\xfd\x0c\x10\x82L\xf8zI\xce\x9c\x92J\xc9\xdd\x8b\xf6^\x64\xfe\x1a\xb0h(w\xf5O\xd6" "\x8f\xd4\xa2\xcf[h\xb0q\r\xe8\x8c\xa6\xd4\xefz\xda\xc0\xe1\x94\x81\x65\x8dj\xb3y\xe7\xc3Xl\x33\xa3'\x39\xfd\xf1\x06\xc1\x84\x97\x9e" "\xdf;\xd9\xc2\xa9\x98\xa4\xb0\x88\xdf\xbc\x0f\xd8\xc0\x06\xd8<.\xebV\xa4\x01m\x61\x83\xf0\x1c\xd7\x0co^\xa3\?oX$/Zu\xe6" "\xf4\xd7\xea\xe7\x0e\x1f\xff\xe8\x1f\xba\xe4\x03z\xc3\x0b\xf1 !\x66\xe8\x85<\xc1k\xc9\x89\x15\xcb*\xf2\x8a\x1f\x39\xb0O\xdd\x42=\x0bG" "<\xf5\x88\x17\x1c\x8d\x9d\xac\x32TL\xa2\x62\xbb\x96\xdc\x9fh.N\x8a\xe4\x03\x39J\x9e\x66\x96\x97w\x91<\xaei\xbb\xdc\xa9k\x87I" "\x31\xcf\x85s\x9eg\x91\xd1\xd0\xbc\x93\xd4\xa1\x36\xe3-m\x8f<\x07\xd3|\xa6\xb4&\xf1\x9bZ\x1f<\xee:\xb5\xc6\x96\xfe\x81\x7f\xc1\x0e" "p.I\x35\x8b\x42Z\xa0\xc6\xef\x14\x90\x66\\\x95\xa4\xf4\x42\x11\xfd\x41\x8a\xd3}\\\xa9\x31\xc6\x31\xd3\x35\x90\xce\x07\xf8\x44\xc2\x8bX\xb8" "\xe6\xfc\xe4 z\xa9\x93x\x0f\xba\xbd\x17\x46\xba\x03\xcf\xd4Q\x0fo\x39\x82\x39\x66\x80(\x87\xc6\xf8\xf2+>\x45R\xc4\xc7g\x92\x30\xec" "\xb4\x0c\xe2\xfc\x19\x89G\xc0\xaaV\x61\r\x0f\x1a\xd7\x91\xb8\xf4g\x1eH\xba\x1f\xbc\x0b\xf6>\x07\x08\x8b\x9d\x1d X\xb3\x30[\xdc\xc1\xba" "\x36\xf0\xaf\x62\x43\?%\xb2 \x9dT\x85x\x08vI\x07\xbb\xfa\r\xf9\xe9\x94\x37\x8e\x08\x1e\xa6I'\x14\xf1*L\x8bS\x9f\x9c\x99\x13" "\r\x8f\x80\xa8\xed\xc2\x07^\xf1\xf5<\xac!\xd1\xa4\x07!\xbf\xd9u\xadg\x33\x62\x35:\xe2l\xd7\x08\xe1\x16\xb2#\xc4<\x11Z\x9cq" "\x65\x0b\xcc>\x85GWt\x80\x61X/\xe5\x18\x44M),\x93Kr\xe5\xe4\xa4\x88\x89\xaf\x03\x17\xc3\xf1\x0b\xc4<\x0f\x61\xe8+\xe4\t" "\xb0\xc8k\x94\xfc\x1a\xf5\xbd\x90\x37\x80\xfe\x8a\x92\x83\xdf\x11=$G\x41\xf9U\x83T\xf8\x9d@\xf3\xfb\xbf o\x1b\xe0=\xef\xfb\xbe\xb6" "\xab\xceip\x1c\x05\x0f=\x10\xa3\x93\x11+W%s\xff\x88.\x14#\xf6\x38\x46\xac\xe1\x85\xd7\xe0\xfc!\xbcz`\xa7l\x14,\xf8)" "j\xbc\x11}\x04G\xf4\xf7\x1b\x85\xa7\xb8\x30\xe2\xf5(\xbf\x41\xb8\xdd\x8d\x42t\xb1\x46,\x17#l\x89\x64\x64\xb5=\n\xef\xcaN\xb9\xa7" "\xf8\x04\xcf\x19V\xf1Vi\xdeWz\xca\x86\xf7\xbc\x87\x36\xaf\t\x17\xdb\x11\xeb\xbc\x11\xeb\xbaQ\x38\xa9\x80S~nq\xa6\x8c\x08\x80k" "\"\xfb\x91#\x8d\x1c\x37\xe5\t\xe6<\xf1\x0f\x18\x15\xaal\x45G\xf4\xf4\x18\xc9(\x33\x39T\xff\x66m<\xe2\x64\xef(z\xc2\x89\xb8\x16" "\x44\xe9O\xab\xa2G+\x35-\x44-\x34\xda\xd7\x10#\xac\x08\x16~\xa6\x9c\xfb\x65@\xa3h\x35v\xd2\x8b\xdc\x44\x34s*\x46\?M\xd7" "\xe2\x33\x94\x11\xfa\x62\x8d\xb8\x16i\x14O\xde@\x38\x41\x8d\xb8\xc0o\xc4\x05\x08#\xfa%\x8d\x38\x1b=\xda\x1d\xe1\xc1h\xd0\x1bq\x15\xc0" "\x88\xd5\x84R\xbb\xc9\xdd\x17\xd7\xc2\x87O\x17\x0f\xb2'm\xd4\x63u\x0f\xef\xfa\xa2R\xd5\xe2\xb4\x0c\x98\x1f]\xdb\xd5\xcfvu\xff\x66\xc9" "\xc9>\x9c\x8a\x41\x36\x39*=V\x17\xe9\xf8\xaa\x62\xb4y\xc1N\x9b\xa6q%\x8a\x8a\xd2W\x62\xa3\xc0\x30\xb0\xd9\x31\xcb\x9b\x32\xb8p\xf7" "\xcb\x31\xbd\x97\x19\x9aU\xf8\xd4\x04\xe1\x8f\xa7\xe4\x30\xd0\x44\x0f\xdek\x9a\x86\xd1\xc7\xbaN\xd5\xe8\xeb`\"&\xa4T\x8c\x06\x39\x17\xe9\xf8" "\xc6\xc0\xa7\x46Z\xcc,\xf0\xe9O\x9e\x66\x45\xd5\xf8\"\xc7\x88h\x91\x1d\xd3;\x62\xeci\x19^]\x81\xb7\x15'\x33\xf8\x98\x45O)\x1d" "L\x16\x8a\x31\x9dT\xc7\xac\x96\x95\xac\x11\xc6\x1c\xf8\x8d\xe9\x03\x35\x96\x81\x9f\xfe\x36\x8ft\x8dn\x13\xfa\x03h\x9c\x89\x65\x1a\xf1\"\x44\xfb" "\xc4K\xa2\x99M\xc9\x0e\x98\x8a\x41\xc9\xd7\x16\x9a\x86\xbe\x88\x8a\xec\x87\xab\xe8w\xae\xa2_\x02\xd3:\x63\x04\xd0\xcb\xca(\xf0\xcc<#p" "&\xc9\x46\xce\x83\xf3'\x9a\xb9\x93\xdd\xfa\x31\xcfp\\\xe1\x35\xf6\xa4\xc5:~\x65\xcf\xc9\xa1\xf0\x98\x36\x13\xa5\xbfJ:\xf3)%\xf7\x04" "\xa5\x1bh\xfb\x1cL;\xcf\x94\x0b\x17\xa6\x08+\x95\x9d\x05\xe5Yp\xf4\x8cmG\x44\x43\x45=\x63\xff\x45\x19\xf7G\xd8\x31$;\x63\x16" "\x9a\x61'\xa7\xec,:^;i*U\x91\x35\xfc\x8c>\n\xb3\xb8\x80+\xc5%\\\x83\xae\xe0J\xa6\x37\x45\x1a\x1fL;\x10=\xa2\xdd" "\x81\x46\x03\xaa\x1e\xa0\x95\x46\xc5\xe4(\x86\x16\x33\xae\x8e\x9f#X\x9f\xb2H'\x9b\xb9\x96\xe3\xe4\xa8\x8a\xec\xf0\xab\xc6\x41\x99\x88\xf7\xbfX" "\x10\x35\xa7\x99}\x1e\xa4W\xa0m\x39\xac\xf4\xeaw.\xfd\x04\xe7^\x9c;\xa5_\xc9!\xea\x9c\xc3\x05%[\x12\x13\xd1\x85\x9f\xdb\x90j" "\t\x31w\xefL.\x92\xbbg\xe5<\xb7U\xbcx\x98\xa0\x34q&g\x14\xd1\x7f#\"\x86H*\xb2q\x9a\x07|H\x61\x94\xee\xc6\xb6" "\x63\x80h~i\xff\x41\xb2\xce`\xce\x9c\x31\x0f>\xaf@\x94N%gp\xe7\xf4\xcb\x12\x36=q\x39\xb7\x38\xa7=`\x8e\xb8\x0e\xc2>" "\xefs\xdc%\x99(Xp\x31g;\?O\x92\xe5\x87\x89\x07o\xacyx\xf2\x08\xa2\xbeQ\xea\xee\x08\xe8\xe1\xcdi\xfe\x9f\x87\x37x\x01" "\x61\xed\xd6\x99|T\xbb\xd5x\x33\x30\xa5\xcf\xc3\xfb\x02\xb9\rr\xb8\x43\xb6\x1c\xf3\xf0\xb5\x17Z\xb0\x42\x11\x61yR\xd2\xcb\x43\x45\x7f]" "\"\xc6\xf0I\x9e{\"k\x10\xc0\xc6\x92\xfe\"\xa6\r\x1f\x13q\xf5q \xb2Q\x9d\xd3+t\xcejQ\xb8p\xd2\x10=\x0fg\xfc!" "z\x07\xca$\x80\xb2\x65\x34g\"~\xdf:\xb1\x9for\xb1\xe4\xc0\xa1\xdb\x94\x1c\x66\x12\x61\x99\x91R\x8d~|\x03Qj\x10\xe5\xb3\xf1" "\x10\xb9\"J\x7f\x91]g\xe0[\xe6\x99\x46\xa3\xac\x8a\x1a\xed\x07\xb5\xfb<:\x39%g`\xe6\xf0m`\xdb\x38!\xdc\xd9\xe6Q\x9d\x17" "\xab\xe3\x65G\x8d\x82\xfd_SK\xa8\xa6\xdd\xf7\x63\xd7\x64\x18\x46\xe7\xfay\xf4\xf2\xc8\xbe\xd1<\xfaX\xfa{\x8c:\x97`\x8f\x37\xbf\x46" "\xca\xc6'Yr\xe1\xb9\x1c\x01\xe7\x94\xc8\x1d\x1a\x0e/\x19\x33\xcc\xe3R\x13,S\xbf@q\xa2\x9dH\xe9\xa5Q\x44\x0e\xb8T\xe4HH" "\x45\xfa,\xce\xb9X\x41)]v/\xed\xf1;\x32(;\rJ\xfd\x0f\xcf\x04\xd5\x34}]\xeb\xb5\xf4\x35\xb0\x80{\xd1\xc6\xce\x01\x07\xbf" "\xe9w\x83\xc4\xfa\x33\xa7\x07\xf1<\xde\x80\xbb#\xdc\xf9\xce\xb6\xcf\x16\x62RL)-\x35\x8d\xba\xf3\xdd\x9f,\x89\\\xcan\xd8\x9c\x13\xbb" "sO\x9f\xdd}\x95\x44\xa9\xd9\xbd \xbd\xe8V \xbc\xd9!\xe6\xc2\x9c\x1e\xacs\xc4\xf2\x17Z\xe8\xfe\xec\x8a\x9d\x1c\x86L\x13Z\xa4|" "\xa9\x37\xd3S\x10u\xaeW\xa9\xab\x00\xe6\x02%\xbb\xbc+\x0eUV\x41k\x06\xa2.Z\xb1\xad[\xd1\x31\xd9\xab\xe2\x15\xeb\x9a\x15\xdd;" "\x95j^@\xd8\x12\xaf\xa5W\xec\x9d\xac\x38\xeb\xb0\x8anq\xc3\xd1]\x1a\x44_|\xc5\xc1\xf9*\xfa\xd8\x82\x18n\xafhZ_\xc5h" "\x35Wq\x1a\xe7\x61w`\x65\x43g\x1f\x0f\xaf\xa4\xdc\xc5\x99\x0b\x88\xe8\x1b\xaf\xe8\xf8\xbc\x62\x62\x0b\xf1\x18\xbb\x16.\xb4\x43\x7f\x82\xa1\x93" "\xb2k>\xce:\xbc{\xc4:\xfc\xdc\x11|\xa2sG\xf0x\x10Z\xf3&\xb4\x99-#L\"\"\x16x\xc8<\xf4r\xdc\xda\xd7\x88," ".\xe2\xc5\x17\xfa\xe7\"\xda[\x30\x06\xd6\x63Rq\x00\xbe\xf0\x04\x66S\x13Z\xf0\x61\xa1\x45J\x12\xfe\xf0\xfb\xd2\x0b\xdd\xf6\x10_*w" "\x84\x9b\x17\x96p\x62\x38\xdb(g\x18o\x8bx\x83\x0b\xa0\x1b\x9e\xe3.q\x42\xb3^\t\xadr\x36\xfa\x1dG\xe7\x03\x7ft\xdd\xacl\x90" "\xc5T\x95h\xb6h>G#\x9epZ\x03y;\xbb\\\x89\xc4\xf3\x62<\"|\xb9\x07-\x94p\xee$\xb0\x9e\x80\x30w\x42\x16@\x0b" "O#<\xa7~y\x0b^m@\xdb\xc0M\xf8\xc1\xcf\xcd\xac\x96;\t\x8f\xb2`j\x05\xa6\x8b\x64\x9b\x9c\x81\xb5\n\xf8\x42\xb6j\xe0\xe8" "\x1d\xb4&\"w\x82zX\xf8sn\x8c\x8b%\xf2\r\xdc\xe2\xfe\xa5\xc0j\x99\xac\xb7]\x93/$\xda\xca\xd2;\x8b\xe5\xae\x42[\xe8\"" "\x34\xfb\x88\xd0\x9a\x17\xa1\xb9\x97\n-\x88\x65.\x1bX\x15#\xb4\nZ\x88\xf7(\xc4\xef\x02\xf7\x1eV\x91]_\x11sY\xd0V\x95\n" "\xab\x33\xc4\xbbtQ\x1a\r\x66\x35\?\xb0]\xc3\x64.\x07\x9a\x39'|\xca]\x44-\x03m\x30\x8cl/Ih\xeej\x61\x1az\xb0*" "N@\xdf]L\xc4\x01\xcf\x30(\x90K\x10\xd9:\x9b\x0c\xba\x45\xb4qV.\x8b\x95`\xc2k<\x30|\x12\x84w\x8f$\x12\x16\x0e\xe3" "\x42\xdb}\xf9@\x98\x05r\xd9\xf8\xb2\xfe\xf7\xad\xc1\xbdNh\xc1" "\xbe\x85\x66.\x11\x0e\x86\xfe\xea\xe3\x39\xb2\x44\xbci\x83\xdb\x0b\xff\xd6.}\x8a\x31S\xae\xc0\x97T\xc0\x1er\xc2\xb5\xd5$\x05\xac\x05\x10" "Z\x08 \xa1\xb9_\n\xcd\x1e/\x9c\?\x38\xd1\x03\x12q\x81S\x04\xabS\xd0v\x1c\xce\x15\x30\x9c\x15\x16\xcf\x9c\xd1\xf1\x95\xd4\xa0\x30l" "\xe2\xc0\xf5#\xda{\xd1^k ^K\x81UL!\xcao@\x33\xe3\n\xcd\x8c+|y\x04m\xd3\xc7\\\x01\xe6\x11\xa1M\xea\x0by" "\xde\xf8\x16:\xdaM\xe1\x03\xae\x8evS\xc9v\x33W\x0co\xee\xc9\x07\xb0g_-\xc2\x32+\xb4\xae\xb1r\x03\x0e\xec\x94\x45\xec\xfe\xa7" "\x63\xd2\xa1S\xad\x19O\x9f\xd0l\xd2;w\xc6\xfa\xe9,h\xce\x41\x1b\xf6\x1bY\x65\x9c\x85\xa8K\xcf\xb0\x12\xc6\x18\r\xc7X\xb0-\x9a" "\xcd\xde\t\xcd\xeeo\xe4;\x38\x63#t\x86\xe5\x93\xb9\x33\xd6\xb9g\x1a\x63#\x7f\x0f\xb1\x8a\x8f\x62\x8b\x16.\xfc\xc1\xcd\x62%[\xee\x0c" "\xd6\x61\x61\xe3\x84\xcf{\xb6\xfbP\x17\x8d\\\x19\xeb\xf1\x85\xb6\xb0J\xf9N\xf2\xb8-\xedSn\xc0\xcd\xb9sw\xf4\xc8\x02R\xfe\xddZ" "\x9e-\x63\xc9\xbcrI\xae\x41[kh\x84\?\x9c\x88h\x12\xca\xb0S(\x07`\xe1\x14\x34;\xac\xb0\x44\xdd\xec\xb1\x46\x36K*J]" " \x1d\x43\x38\xde\xdb\x01\xf4\xa7)\xe6\x12\xd1\xf6vs\xed\xe0\xeb\xf0!Uq\x05\x96\xf1\xb8\xf0\xc1\x11V\?\xc1\x01\x7f=\xb8t\xee\xfc" "\x01\xd0\x30\x97\x83o^\xd9\x42\x18\n\xd7\x96\xd2\x65\x84\x87\x11\x66^\xc0\"\xae\x8e\x35\xd2\xca\xbe\xd3\x1f\x8c\xadw\x19\xd6Y\xe5\x15x\xf9" "\x11\\\xe4Y\xbb\x96\xd9\xb6\x97Y/\x96\xd9\xb0+\x03\x19\x81X\xffH\x34\x9b\xb4R~\x83\xf7x\x62\x84\x39\x12\xf6\xaf\xc2\x89\xf4\xca\xbe" "\x62\xdb~\x44\x0e \x0b\x96\xe1~\x9a\xfb\x7f" "t\xbd\xf9V*\xcf\x0f\xee}\xeb**\xa3\xf3\x80\x8a((\xa8\x88\x32(\"\x34\n\x17s\xec\x81\xbf\xde[x\x93\x80\xc7\xef\xe0\x45\x89\xc4\xef" "\x31\x9c\x34\xae\xeb\xf3\x9c\xc8\x96\xe2$+\xec\xfb=`\x93\x08\x63\xf8\xab\x05\x19\x13Z\xfc\xf8\xe2\t\x1c+\x84\r<\x01\"\xa3\x14\x1b\xf1" "\xfe/X\xb4\xda\xa9\xc1nP\x63m.\x17\xc5&+\x8f\xe6\x9fm\xe7Ql\x62\x90\xa1\\\x80\x07\x87`#r\x32\xe3UL\xc6\xbf\xc9" "\xc7\x1cQ\xa5,\x81\x8dr\x13S\xdd\xc5&\xb9\xc2%\xcf\x82\xcez\x1bS\x94\x42s\n\x14\xda\x62k\xe1\x63\x1f\x8eS\"\xda\x82\x01\xa3\xfc\x8a-" "l\x9b\x63\xda\x36G\x9dJV\x87*\xa6\xd7:\x83\x8a\x8d|,\x81\x43t\x8a\xf1i\r\xfb\xa7j\xc2\x15h\xce\xb3\x42\xf3\x87\x14\x62 " "\xdc\xe6@\xd7\xab\x43\xe1+h\xbb\x63\x1a\xa5\x10\xb0\x1c\xb4\x31\xd1)\x44\x91i\xdb\x16`\xdb.\xb2\x39k\xb3\x14\xb4\xb3\xc2\xa1<\x11\xfc" "WLK\xbe*\x1b\xed\x17\xc4\xcbl\xf3\x8d\xb5\xb1\\J\x08+N\xe7oq\xcd\xe1\x45'\xde/\x91-\xb0\x38r\xfe\x45\x87\xd9\xedM" "N[\?\xde\xb9\xa6Q\x04\x31:\x85\xf6\x1d\xc4\\*\x46(*&x\x43&\x36\xbb\x7f\x30Gt\xe2\xa3\xeaz\xb6\x44\xa8\x30\xd5x\x65" "\?\x43g\xb2\x9e\?\xad\xcd\x8f\x1eZ\xf4\x04\xd3_\x91\x9b\xc6\tG\xcb\xb4\?w\x11+\x18\x45\x1c\xf3\xd9\xf0mvX(\x94p\xbb\x11" "\xf1\xe1\xc5\x89\x85+\"\x0e\x1b\xc9\xd7!G\x81\xaa\xad\xa3{\x9a\xcb:\xc9g\xd9\xc9\xd1\x9e\x88\x15\xb9\xf9\xf5#r\x34-\xe1\x91\xe0\"" ".\xbc\xfdq\xc6{#\x17\xb3\xc3\x0f\x88++\x7f\x9d\xact\xb7^^{\xb6\x66\xcd\xa9\x13\x41\x31\x8b\x9d\xf5\x15\x9es\xdd\x38ZG\xdc" "\x85P\xb4\xfe\x99\xfc,\xdbi\x42\x9b=j\x00m\x1c\xd9gq\xe9\xa7\x16Q\xa5\xd8\xcfj%p*#\xe4\xad\xec\xdb\n\xe8;M[" "\xef\x7f\x8b\xad\xbfy\x89\x62\x9d\xec\x82\xcb&h\xc1\x10\x8a\xef\x31>\xedw\x8e\x1c\xdfi\xb7z\x8fK\x33\xd0\x66j\x85\x87\xfc\xfb\xb1\r" "\x07\xdf\x93m\\Rz\xccX\xdd/\xe2\xc1\x00\x44\x15\xfd\x9e\xdc\xbf\x81\x16\xe2\\\x88\xcf\xe4]\x9d\xe5n&\xd9\xb5\xbd\x91w\x84\r\x10" "\xda\xfe\x9f\x46\xb5\xe0\xdb^)\xa2\x99\x15[\x88Q\xd3;\x65\xc7\x7f\xaak\xc5\x8f\xcb\x34\x0fL\xb1\xd0K\x88\xce\xca\x34\xfe\x9e\xc8\?\x88\xf3\xc0u\xb7\x1b\x0eXZ\xceL\x93\xed)" "\xb8s\x00\x96\x96 \x06\x86S\xb8\xdc\to\xf9w\x94K%{ S\xect.|y\x05m\x02\x46\x38\xe0)\x06<\x05Z\xab)\xc7" "\xf7S\xc4\x08\x16\xee\xdd\x81\xe6\x42%\xac\xee\x90-\xb0\xd6\x00\x1b\x33g\x32\xbc\xc0\xac\x8ah\xdd;\xa7\x1a\xc5\x19\x02\xfa\n\x0b\xb8q\xb6\x8a\x33\xf6\x8a\x66p\xec\x34\x66\xbf\x13\x88\xcb\xb9\x93\xad\xc3\x0cs\x8c" "\x46\x84\xa9\x15\xd1i\xee\x9c\x42\xf4Vg\xb9\xe7\x13q\xd3\xb9\x32\r\xbf\x99s\x18\xe6\x1d\xcd\x39\xe7\x11\xe6\xcc]\xa5Z\x36\x31\x94Wm" "\xf3\xe0\xa6!\x37\xe7v\xdb\xcf|\xa2\xf9\?\xb7\x37\xe7(\x61\x8e\xdd\x12\x85\xb0\x30\xcf\xe3\x0f^\xc2\xa2\xa4+\x9f@\x9e\x33i|\x38\xf9" "\x44\xf3\xe4v\x42k\xf0\x1cN\x80\xc2\xe7_\xd0<\x9b\x95\xf6\xdd\xcf\xf9\xae\xe6\xff\xbc\xab\x39G\xca\xf3\xb4\x8ekr\xcc:\xe7;\x9b\xf3" "\x9dyn\xcf\xe1\x42W\x9c\x33\xd7\xe7\xb9\xc7\n\xbc\xc6\xa9\x99\xfb>V\x98o\x32\x39\xfa\x9b\x9d\x90\x97N\xce\x8b\x88\xf8L.h>\x8f" "\x38\xfcUJ\x12\xed\xf7\xd4h\xb7Sm\xfd\xb0\xbb\xd1.\xe3\x9f\xddp\x95\xf9\xa5|w\x1b\xed\x8a|\"G\xe4\x98\xb5[\xc4w\xaf\x64" "\x45\x17\xe5\xa8k\xc1\x31 \x89\xe0tg\xd4\xf8\x07\xe8\x80\x9a\xd6\xfd\rw\x1f\xfds\x9f\xb6M\xab\x92\x8f\x89\xa6G\x89\xa5\xc9\x10;\x13" "\xcew\xa8\x96\x7fh\xd3\x36'S\x8dv\xda\x08\xfb\x97*\xbf\x9d\xe1\xec\xb6\x83\x8d\xf2\x37<\xe3\x0fo\xcf\xf6\xa1\x15\xc2\" \xb4\x17\x1e" "\xc1\x0fYy\x0f\xe2;P\xb2\xfc\x9a\xf8P\x08\xe2\xe6\x9eU\x1b\xed\xb3\xe6\x33m\xfe\x89\xc5\xbc\xa6\xb1\xd5V\x91\xed[\x84\xbd\xe7\x95_" "\xe4T] \x99\x85\x41K\xce\x17\x90\x39\xf5\xc6U\xb6J^\x0bu^\x04\xbfg!\xc6\xfa\x11MKJu\xb0\x1b\xbcp\xc2.\xa2!" "\x33\xc2>\x1b\x46\x0e&#l\xb9!<\xb8t\xa6\xdb_X\x07V\xe4\xa2^\xa3g\x38\x44l\xb2\xae\xda\xc2\x99}\x8d\xe0\x9a\xaa\x11`" "N\x9c^\x88\x42v\x1e=\x86\xa5\x9d\xa6iVm}\x06\xad\xd4@@\xfd\x9c\x16nU\x12r\xbf\xbb\xd8\xcf\x89\xf9\?\x34~\x83\x88:" "G\xc5\xa4t\x8c\r\xed\xa0\xf9J\x62hh\xfdT\x0cK\x86\xa1\xc1`\r\x91Q=\xa0\xfd\xbe\x85\xb8\xda\x08xS<\n\"L\xc1\x11" "\x07\x1b\x11G.\x11\xad\x1fQ\xb8\xd5\xb3m/\xb9\x88\x87#\xbc\x0c%\x37<\x45\xe3\x37\xf9\x1e\xb3\xc3\xa8\x1a\xcd\xbd*\xcap<\x1e\xde" "\x07m\xb0\x42@\x41\xd1`RS\xd2\xae\x14\xd1\xbb@)\x1d\x35\xaf\x16\xa0\xd1\xa6\x18q\x90\x1b\x85\x12~\xcb\xdb\xbb/\xc4G\x15\xe9\x91" "R\x43u\x80\x85\x43\x42\xff:\x1e\n!J\xaai\xe1\x0bx\xe4\x0f\xfdm\xf0\x33\xb7}\x16\xaa\x08\xd1\xa5\xda\x33\xe7}#\x0e\xd2\x95R" "\xa5\xb1\x66\x35m\xc6\x63\xbb\x45g\\\x9a\xc2\x83T\x35\xbe\xc6\x97\xdd\x90\x8b}\xde\xc2\xe0\x8a\x9c:\x43\xde\x8ft\x16=|\xc6\xa3s\x35" "\x80x\x81\x18]:\x43>\x8e\xf9\xce\x31\x00\x8c\xe2\x8fsg\xb8\xe8w\x9b\x64V\xf8\x63\xcd\xf8V\x66\xf4T\xfe:\xe2\x83\xfd\x1c\xf9\xb3\xc2\x03X\x39\x0fI\xe5\"Yr\xc2\xab\x17\x62T\xcdi\x32&\xf6\x46M" "\x35\x8f\xb2\r\x8d\x35\x8d\x8a\xac-U\x84u\xda\xc4\xe0\xa9\xa1\x9aW\x03*^\x84\x93 \x82\x83\x89^\x18U,\xbe\"\x64/\x34\xdf\x8a" "U\x35\xff\xe5\xb5\xbf{,>\x16\xd6x\x08z\xce\xca\\\xa3\xef\xf5\x80\x85\x66\x39tQ>M\x8eYL+\x1f\x04\xf1xs\x0c\xab+" "\x88\xde\xe0\xa8\x36\x9fx\x91\xd4\xe0.\xf5n\xb8\xa3\xf3{oTT\xf4\xdd\x15L\xf3Z\x0b\x62x,\xd7\xbc\xe6\x0c\x39t\xc9\xcb\x35\xf0" "Q\x61\x19\x89\xb0\x83/\x9a\x63 \xa5v\x11j|X\x18_\"\xce\x97*\xbd\n\xd0\xa9\xd3\xa3Yr\x1b\xb4\x64\xfc\x0b\xd7G\xd3\x10\x8b" "\xd0\xc4\xf0:\x44\xf4\x03z\xfc\xd9+\xcf\xdf\xe7\xd1}\x94J\xec\xcd&\x1c/\x92\xea\x39\r\xb7\xd4\xb2\xe3\x82k\xd9t/\xfc\rs\xb5" "J\x8dhQi\xbb\xc6Y\xf1\x88}g%\xfc\xeb\x45\\\xa0\xd9\x94\x8c\x05\x97\x9d\xdc\xf9\xb3\xadmN*\x44\xd9.J\x86\x94&\xa7\xbf" "{\xdd\xc6\xd1w<\x32-\xdb\x89\xb2\xbd\x13j\xef\xba\x05\rk\xa1\xac\xc4\x1f\x97x\xb2\x92\x8c\x39\x90\xe9\x9c-V\xc6\x83\x1a\xa7\x0c\xa3" "\xac\xf2\xeb\xd4\x62\x31\xc0+\xe1\x94w\x44\xa7\x8f\x08+\x94}G\x35#\xc7\x88\x14\xf3\xbb\xf5ZZ^\x64m\xe5\x1f\xa3\xd0\xdf\x16\xbcR" "\x8d\xea\?\xbfUq-\xd7\x43Q\xad\xce\xd8\x0c\xa2\rz$\x1fx\xc8\xdf\x8c\xaaq\xe9\xd4\xfb\x31\xda\x94\xd6\x06\x1b\xed;[m\xff\xcd" "QYz\?\x06!-\x94\r\x92\xcf\x38\xe5\xbd}\xa3\x98p\xf0\xad\xd4\x98\xbf\xec\xbe\xaa\xc6\x0e\xa5\x8a\xcb\x41\x36\x61\x8e\xb3\xf4\xd1\x15)" "\xca\x96|O+\xbc\xcb\xf5\x16\xde\"\xd6\xf0\x0b\x31\xc5\x1c!N\xa6\xf1o\xd5\xf6\x66\xca\x87O~Y\xa1W\x8c\x61[g\x11\xaf\xb6I" "\xf4\xa5\x11w\x43\x89\xccZ\xdf,\xc3\xa1\x30G\x44\xde\x91\xd0\x01r\xd4I\xa6\xa8w\xd7w<\n.\x8f\x11\xa7\x1c\xa2\xf0\xeb\xc7\x43o" "JT\x64\xd7\x64\xdd\xc5\xbb^\?!\xbf\x11\xd9K\xd8\xbf\xf2\x8e\x32'\xce\x17\x08\xc2\x64\xd4\x1d\xe0\x61V^\xfc\xcd\x8fi.\xa2\x9bn" "q\xc1\xc1\xc8\x82\x83\x90\x05V'\n\x31\xbf\xa8\x64!Z\xb0\x83\xbd\xc0\n\x43!\x8c\x7f\x0b\xac%\xd4\xb5\x8f\x9d\xf5\xcfY\xb6\x37\xa7\x36" "\x02\x7f\x9e\x38\x01\x44\x31w\x13\x92\x90M\x9a\xb4\x02.\xb0TPxX\x03mI\xa0\xd0\xd6\xfd\t\xbb}\x8d\xcc\x61\x8e\xf7\xa2\r\x9d\xd7" " Z\xe1\x45\x02\x97\xad\x45\x12\xd9\xfb_\xe8j\xe1\x8b\x0f\xba\xac,\xb0\x84\xd7\xc8\xba\x64\xc1\xcas\x91>\x1c:\xe3\xf3%V\xa4\x17\xe9" "\r,\xfc\x81\x8e\x88\x03\xc6\xf8h\x9e}\x1d\xb9\x96>\x8f\x82\x86\xafy\x91M\x90\xa7\x9eN\x8f\x90\xc5\xfa\xf4\xde\xb9\xbe.\xad\x7f\x0e\x83" "\xf6sH_\x8e\xc5\x1a\xbd\xf3\x05\xa2\xb6\x19\xd7\xb3G>\x86\xf7Y~\xe8\xbc\xf2\xfb\x87^\xde/\xeb\xf3_\xc4\x9fPN\x41\x34\xb8\xbf" "\x9c\xe8\xfd\xa5s\xf0/_\xe9o|R\x01\xd1\x62\xff\x62!Y\xd1\x07\x06\xbf\xb1t\x1d\xd0\xf1\xfbM\x0eK\xce\x10\xac\r\xda\xfb\x13\x82" "\x14\x99\x16v:\x30\x8d\xed\xac\x8a\xd9p\x89\x65\x8b\xa6\xd1|\xf6\xcb\xf9j%]\xb6~\x11\x9fGh\x8b\xa8\x85\x16\xda\xa3\xf8\x9b\r\x9d" "\xdf\xa0-UT~s\xac\xfb\x8b\x90\x9f\xc5_\xdd\xf8Xm\xb9x\xd8\xf5\x93=\xdc\xea\x0f\x46\xa0\x95\xfcs\xc6G\x43v\x39UKn" "\xcb\x41+-\xc0\xdb\xfd\xe4\xee\x8a.L\xab\xf8q;\xde\xe6\x1a#\xd3\x92\x9d\xb7\xe4\x61\x1b\x1a\xb2l\x85\x65\xb2\x42\xf4\xd9W\xf4\xffP" "\xb2\x9d]\x61\x8d\xac\\\x0fm\xc4*\x41\xad\xb0\xc2\xbaT!\xba}+\xba\xae*\x39:Z\xb1\xcdU&\xb5\xe2z\xbe\xa2\x06Jk\x94" "][m\xba\xe2\xcc\xe5j}\xf3\x8c\x9a\xb0\xb4\x85O_h\x35\x65i\x0bmZ\x89N\xe5\x46\xf9\xea\xe3\xdf\xb1k\xba\xd2!h_\xe4" "\x37hq\x86\x95\x91S[\xa9z\x03Z\xb9\x82\xfaO\xc5\x13\xf2\x03\xac\xb5\xc0#^\xd4\xaa;\xe5\x14\xb4l\x34\xc6W\x93\x9c\x08\x33\xb6" "h\x36L\x12\x8e\xc7N\xb9\x06\x16\x05\x9a\x96n\xf7\xd1O.\xd1\x65]h\xd3\x8f\xa5-l/\x62\xf4\x87O.\x9f\x31\x34\x11\xb1\xb9\x0f" "\xda\x02#\xa3\xda\x45\xac\x82\x34M\xfbT\xd1\x19\x35\xdcnr\xbf\x0bZX.\xa1u\xe6K[\xe8U\x0b/\x91\xe7\x30\x06\nm\x8e\\" "hU\x63i+\xdb\xba\x90\xfb\xc5\xcc\xa9k\xd9\xd6\x0b\xb4\x42\r\xbc\xdb\x01\xc7\xb8\?\x34\x98\xa5\xadu\xe1\xd0\x99\x95\xee \x9eW\xc9\xa1" "S\x1ep}\x1a\xb9\xa6\x35\xcd\xc5\x1b\xb4\xfa\x0c\xe4\x9b\x42\xdb$\xec\xbd%\xf5'\x88\x36\x01Y\xda\xc6\x0e\xad\x42\x0b:W\xda\xc6$\x81" "\xd0\xd6\x03\tm\xf6\x41\xb8\x00\xb3z\x0f;\x16\xba(\x1f\x10>~I\xb0PL\xa5\xed\xf5\xe9\xc2\x19\x1fu\x92\xadWh\xb6\?\x97\xd0" ",\xf0\xa5\x02*\xb6R\x81\xe5\xae\xc0\xe2R\x80\xf1\xb4\xb4\xaf/\xc8\xbe&\x13\x31.R\xf1\x86\x8c@\x9b\x1e\x34\x62\x8b\r\x11-\x1a\x98" "\xb2\x0f.\xae\xc0\x9f\x1b'\xbe\xb9\xd2>\x0c\xdc\xca[#**\xe1\x36\x0e\xe5\xf7\xa3\xc4L\xb0\x89p\x16\x84\x38\x1a\xbb\x88\xfe\x86\x8aU" "\x92\x31^U\xfc\xd2r\x89\x07tmP\x82\xb6\xbfG\xd6\xc0\x62\xe4\xc4`W\x44\x33\xbc\x1b\xd3\xe7\xd3\x94\xf9\x83`\x9c\xca\xba\x13\xf3\x64" "%:\xe8+\xfbN\xcf/x\x0b\n\xf1\xd1*\x31Ml\x62\xd8]O\x34\x33\x02*\xef\xc0\x1a\xef\xd3\x86\x1e\xc6\x10\xdc\xc3\xe3K\x1b\x11" "vO\x44\xdb\x83Lh\xb6\?\x65\xd5\x89\xce\x82\x8aW\xf1\x01\xf3\xf2\xa8\xec\x84}G\xc5\x13'\xfa+*\xf2\xe2G\xcc\x19\xb3\x89\t\x8f" "w\xd1\xec\x94\xb8\xcd\x85\xf0\x96\xfa-\x1f\x98\xaf\x1c^~\xc2\x0eO\xd5\xe1\xab\xb6\x1e\x99\xf0\xa5\x07\xa2\xb6R\x86\xac\x10\xb1v)\x17\xc0" "\x08\x97\t\xdcR\x1b\x9a\xbf\x80\xf7\xe3\xa4\xb9\x03w\x01h\xd1\x14\x0e\x84\xa6\xc9\xef\xc3\x06\xd8H\xa8L\x83(\x03\xc9r/\xff\xb7\xf3/" "t\x90\xa0\xd5\xf7\x82\xf8\x1en+\xac\t\x30\r\x0b\xa6M\\o\xd7\xff~Z\xb9\xb3\xc1\xc0\xa8\x62\x9d\x15\xda~<`\xc1\x1d\xf0&\x86" "<\xd3\x90\xa5w\xb4\xed\x0c\xefv\xc4\?\x8d\xb7H\xbe\xe3\x31\xefn\xcc\xab\x8cYx\xcc\xba%\x9c\xf4\x9c\xe9\xd3\x02\xbb\x94\x89\xa6\xab)" "\xbft\x8d\x07\x9a\xb3}X\xbc\x84\xb6\x32\xd5\x18\n\x98\x88\x16\xcc\x1f\xa2\?\x98\x88\xd6`\x42\xf4\xb7`\"v\x17K^\xda\xd8\xb6\xd9\x93" "\x93\xeai\xbahjh\x89J;\x97\x9c\x1e\x0e\x61\x88\x0c\t\xb9\xac\x45\xc2\xefI\xba\xb8\xf5\x84\x10\xe8\xdb\x34\r\r\x61+\xdbL\xcbV" "w\xea\xd9\x99\?\x9e\x0f<\xe3mG|\xde\x88\x65\x32\xf2\xf4\xa7\xf0\x89\x44OX\xc4\xa1\xe2\xfb\xdfO\x19\x81\x9dMK*\xf5\xa0\xb1\xa6" "\x14\xc2.\xa6\"\xdf\x89\xe7\xc6\xcf\xd1\xa6\xae\xde\x87\xdb\x9a\x90\x35`\xfc\xcb\xc2`\xd3g\xc6\xe0\xf1\x98\xd3\x42\x86/\xeb\xcep\xe9\x65\xdd" "+i\x0c\xb7\x95\xcfN\rq\xba\x8br\x84\xbe\x91\xf2$i\x0e\xd3\xe5\x9c\xda\x37\x89\xf7\x08\?:\x65\xd5\xf9\xb7x\xc4\xcah\xd5\xf8\xab" "\xea\x9e\xd3\xeb\x88\xa4\xca\x43\xaa\x8f$rR:U\xe8\x92\x8ax\x88\xca&\x39\xe6\x1dY_Y\x88\xb6u\x1f\x11K\x8c\xc1\x83\x01\xda\xa2" "\nOT\xd3\xe0\x8d\x0b\xf1z\x93\xca\x97\xa8\"\xb3^\xc4\x10\xea\t\xda\xe7\x0b\xa6kLKov\x65\xbc\x8d\x08\xdeHh\xcc(\x8e\x9c" "Im'\x66\xee\xc2\x41\xc2h\x41\x30.\xa9u\x92\xc3\xd1\xdf\xac\xe3Z\xb6,\x04\xad\xfe\x46N\x9d\xea[\xc0\xaf\x0c\xb6)\xe5}\xfe\x0c" "\xa2\x9d]\x05\xed\x1a\xc5\x04v\x30\xe5\xbdS\x9aW\xc4\x1c\x36-\xffnX\xe3\xc2\x9c\x63T+{\x1b\x9f\x9b\x7f\xfc\x42\x9d\xc3{\xec\xbb" "\x16\x02P\x43;\xb9\n\xa2\xe7\xb1\x88\xbe\x46\x1eZ\xeep\xd6\x61*\xceJ\x41\\\x15r\xf5\xad$x\xd5'\x62\xda:O{\xe1G\xa1" "\x10\x89h\x8bvUl\x82-\xbe\xb0\x16\x1f\xa0\xcd\xc7j\xb3\xb0\xbcw\xd7\xaf\xcc\xad\xf7g'\xcc\x88\"\x0e\xbe\x9c\x18K\x8ah\xb1)" "\x95\xe7\x64\xdf\xa9\x61LJ\xbf\x41\x9bW\xd9\xdd\xddW\x83\xf4\xc7\xbb\x8b\xb0\x99\x89\xf8\xb1\x00\?kN\x18\xa8!\xb2\xe1\x11\xd1\x1b.\x15" "'-\x17\xd7\x0fu\x38r\xda\xc6\xcc\xe4\x43\xbe\x84L^I\xbeg\xb6G\xc2\xb0\x15\xb3j{\xe9\xcfU\xb2\xf3\x9e\xd3\xb2K\xd4]X" "\xca*\xf4\x32<\xdbK.jI\xe9$hW\x43\x44\xcb\x90>\xce\x36^\x87g]Z\xc2{g\xc7[)\x9d\x11\xac\x1c\x16\xed\x08\xd7" "\xf3\xf2`\xbb\xcb\xe2\xa2\xe9\xf9U\xbc\x37\xc6zJ\xd5\xee\xe3\xf7\x07o\xd6\xb5\x99]\xec\xa6\x0b\x9e\xf2\xa2\xe6L\xdf\x9e\x82\xc8\xec\xf5\xcf" "\x11\xabT\x84\x1d\x64\x03l\xb2\xc2\xa7\x85\x33W]\x88\xe6}\x39\x15\x37=\n\xd5X\x94\xb5\x11\xdc\x42Y\x81)\xd7zx\xcex\xb5\xe7" "}Y\x18x\x85/\x87Nov\xb0\x1f\xab\x12\xd5\x0b\xb6\xa6\x33\"t\xaf\x88\x83:\x89\xa2\x0b\x37^#\x42Z\xa9\xc8\x8d\xf2L\x0c\xf7" "\x37\x0e\xbd\x1b\x15\xd9|\xa9\x9dw\\\xc4\xe6\x0f\xd0Xj\x44\x94\xec\xf7\xee\x87\x1a\x80\xf9\x39\xa9\x38\xe1y>N\xc3\xd9\?\x17\xd8]@" "\xc4\x88\xb7\xe1w\x1c=\xe3g\xd4VNo\x0c\xe1ql\x0c\x1b\xb7\x42\x63/_\xc4\x10\x07\x36\xa7\xc1\x64i\t\x1b\x91\x19\xb7\xc4\xd7\x9b" "m\xd5\xe4\x83\xf2\x81\x05\xec\x31\x42\xd6\xd7!j\xa5\x88\xec\x43\x0b\xbd\xf3\x0f\xd1\xfb\x92\xb0,\x19\xb1\x95&\xc4\xde\xa7\x8c\xe6\xb1\x8b\x80$" "HQ\x96\x9e\xfbm\xd0\xb2\xc2u\xd0\x0e\xd1&\x66'\x18\x65\xc8\xd7\x94\xfb\xc2\xb2\xabK\xa7W\xc7\xd9-o\xa3]#\x91\xd3\xd9\x03o" "\xe4\x31\x30WR\x45\x0b\x06lh\x9b/\x03\x01\x35\x8d^\x9f\xfb+\x90\x81\x9a\xbfI\x1f\x06h\xf0\xda\xc5#\xd6\x39\x42\xf3\xe0H\xa6y" "GZ\x44/\x19^X\x10\xdeY\xc8JQw}\xf0\x93\x0f\x99\x9b#r\xd2$Q\xa2\xb2\xaf\x02\xc9\xbf\xb3>\x12&\xe5\xb7\xf5\x05\x33" "\x9e\xa3\x41!\xc2\xd7\x94\xb8\xe4U\xb8\x0c\xcc\x8d\x34\x45\xf3\xefW\x44\xcc\xf3\xa8\xd8s\x86\xa4U\x43\xc6\x04p\xa2P\rm\xf6zk\x9b" ",\x93\xa8\xe5\xbd\x8f+\xcc\xdd\xddz\xfb\xd1\xe9\x05\xc3\x07\x34\xd8S\xd1\xc8!\xb3\x8a\x9e\x39*.\xab.zS+\xa2g\xb0\x88X\x90" "(\x62\xf1\x90\x44Q^\x9f\x96\xc8\xba\x06w\x62\xa7\x14\xa6L%\n\x1d\xbc\x13\x8c\xdeO\x15\x31\xd7\xab\x85\x81\xdd(\x03M\xef\xc7\x41\xf3" "/\x38<\x14\x0c\?\xfb\xd8p\xc2\xe8-\xe3\xfa\x9a\x37|\x8d\xd2\xb3\xbe\x39wz\xd3+\xa2W\xcf\xfe=\t\x43R\x9b'j\xe3\xf3\\" "\?\xa0\x46\x45X\x0b\xe1\xd3\x91\x13\xb1vL\xf4\xbak\xfdt\x1d\x1f\\\xc6\x63\xfb\xda\x8bplS\x1e\x38\xe1\xca\xaf\xe2\xbbS\xfbQ\?" "\x95\x9c\xc6\xd1Y\x31o\xa3/\x15ig*\xc6\x18\xc7+\xc3<\x85i\xbc\x87\xe2\xe6\xb9\x8a\x88R`\xd4m\xb3l\x33\x35\xd3\xd2\xe7m" "\xf6L\x8aX\xd6j\xa4\xa5\xa7\xc8\x61\xbd\x92\x9f\xab\x8al\xf6\x8b\xfc\xfe\x8a\xb1\xed\xae+\x34\xaf\x1b\xa1m\xb0\x65\x64U[\xa4\xb1\xa2\xc8" "\xe1\xb4Rn\x82\xef\xa8\x88\xf9\x02\x63\x38\xe7\xf1IX\xbc\x0b\r\xa5\xac\x18_\x8d\xc1[>=\x06\xe0\xc5\xf0L\xf2xG\x43\xd6X\x45" "]\xc0\xd0]\x05q\x18\xc9\xd7\x0eW\x64M\xf8\x01\xc7\xbc\xfa\xfc\x33<\x37\x06!\x45\x0eg\x8a\xf1\n\xa7\xe3X\x43\x89\xb8R&\xfa-" "\xb0\xd9(rM\\>\xc1\x1d\xcd\x34" "\xe9\xcc\xb3\xde\x34M\xb7\xed\xeb\xc0\x43\t\t\xb0@\xa9\x98T\xaf\xd2\x8b\xeb\xa0\xa1N=\xc9\xef\n\xe8\x1a\x9b\x18\xd5\xe0\x91\xee\x62\xfa\xfb" "\xfa\xaf\x16\x87n\xbb\xa6\x65\xefzg\xb9K\x66\xc3r\x36\xf8\xc9]\n;\x8fP\x8b\xc0\x05\x1fz\x89\x87\xa6\xbd\xfb\x04^\x98\x42\xf3\xe7" "\x33\xea@\xef\x9dG\x1d\x1f\x81\xa8\x41N\xe2\xd6\x0ehk\x1cK'\xe1\x38>\x18;\x01'Ii@\xae\xc0\x43\x9d\xe9`\x1f\xec\x84\xfd" "\xc4\x13\xf8\xf5\x0b\x61\xb7;\xf1'\xd0\x9c\xe2\x89\xb1\x05\x66\xe9\x44\x1az\xf2\xc6\xe9\x87\x64%\xfc:s\xfd\xfd\x89\xed\xfc\t\xdc\xef\x85\xc3" "\xb2\x9f\x1b\x01$J\x8c\x18X:\xa5\xb9\xfe\xd4\xd6\xd9I\xd7\xa6\x46\xad\x42r\xcft\x15#\xd0&\xc4\x85\x98\xec:\xe5'\xc5M\x87\x8d" "\xf9T\x14\x9aS\x9a\xc9O\xe1\xbb*\x44\x9bw\x8a\xedO\x85\xb7\xd2\t\xf9\xa0\x35\xfeT\xb7\x62\x9c\x45i\xf9\x01\x1a^\xfd)\x02\x7f\n" "g\xd4#.\xc1\x15\x11\r\xcf)\x96\xa1\x08\x61\x18S\xfa\xfd\xb3\r:\xa5%\xeb\x14qs\x85\xb6\xb3\x80\xf2\x85\xfc\x04\x0f\x99\xee\x91\xb9" "\x45l\xe2jI\xeb\xc7/\x9c\xb4\xf7\xe5\x1f\x45\x9e\xe0\xe5\x35\xfc\x15\x16\x99SL\xa1\x0b\xf1\x12N\x93/\xfe\x04\x9d\\\xa5\x0ct\xd7\xd7" "\xbc\x43[\xb3V:\x65Kv\x8a\xcd\xe1\x85h\xd1N\xd3\xea\x1b\x88\xe1\xf2i\xee\xa7\x9c\x05\xe3\x16\xc7\xc2\x16.,\xa3PVi\xf4\x30" "\x11\x62\x34z\x8aH,\x42\xde\xb3\x90\xdf\xcc\xa9\x39\x01\x31\x15\xa3\xb3S\x84\xbd\x16\xf2^\xb0Z@\x88\xda\xec\x94\x43\x90S]\xf0\xc4\x0b" "\"\xa2\xadp\xc5\x9f\x98;~\xe9\x94]\xf2S\xf6l\xeb\xec\xd1\xd5Y\xd0\x84K\xd0|\x88Jj\x41\x07\xcd\x41N\x06k{\xba\xdd\xc4" "\xba\xbd\xa2\xd6%\xbf@\x14\xc7:\xe7\x65\xea\xda'n\x8e\xb0\xcaS\xb4\x32\xcf\x81z\xbf\xce\xaf\xbf\x0e\?]\x1b\x08\x62\x18\x18\xb4\xd1v" "z\xb9\x0f\xad\xc9\x33v\xfa\xff\xa7\xb0H\xcaW\xd2\x43\x92\xde\x43\xf2\xc9Su\?\x41\x94\xda:v\x65\x36n\x06{\xaa\xe9\x1a\xa6\xea)" "\x35\x9er\xc0\xcb[\xf0`\xe1\x8c\xe7`\xd6\xa8\x43\xa9o\x46\n\xcd\xddK\xc3\xac\x93\x90\x0f\x8e>X\x9d\xe5^\xe9\?\xc4\xa6*\x42s" "\xe5\x13\xc2\xe0\xaaL.\x9e\xe2\xc7>\xdb*\xee\xf1,\x84m\xb2\x8e\xb8L\xc2[<\x05\x9c>\x85=\x9e\xc8\x96H\x0bGG\x88\xd9\xc0" "\x39:&$\xad\"\xb4\x8f\x05\xad\xa7>\xfbQO\x0f\xabi\xf4\xcaj'hU\xd7\xa4\x38\xe5\xfe\x66\x1a\xff\xd6\xc1\xd3\xa6\xddK\x10\xa5" "\xb8\x9e\x32\x17\xd4\x1b\xf0v\xben\xe0\x9dx\x06\xf8m\xb1\xd7S\x87\xcb\x93\x91\x96N\x15\xb1+\x61\xa9\xce\xda\xb4\x0e\xe7$!\x46\x36\xf5" "\xf5\xcf\x61\xb6U\x83_\x89n\xf6t\xc2\x19\xf3\xab\xbf\x9f!\xf6\xe8(]\xc5{\xe5\xf4\xed\x8d\xe2\x1b\xdf\xeb\x95z\x01\xa0\xb8\\\xc5\x87" "\x37\x34\xe1\\\xc5\xf7\x11h\x0b\x05\x94=\x84\xd9\x10\xd1\x1c\x94\x84\xcf]\xf9\xa7\x43\xdd\xces\xf6\xbc\x83\x95\xa8\x92l\x0b\x15\x94U\xe7\xa6" "\xda\x12\xad\x65\xff\xcf\xc2.S\xaaM\x63LZP\xc4:W\xd3\xb0\xe7\x97\x89\xd9\xd2\x0f_\xae\x1b\xdb\x10G'p\xd8\x16q\xf9\x1dn" "pU\xc0n\x1c\xa5\xab\x64\xfb\x14\xbc\xea\x83\xd7g\x34o]%\xc3=p\x82\xfb\xa4\x1b\x81\x92\xee\x02W\xc9\xf4\x8c_\x0e\xc5\xf5\xdb\xcf" "z\xbb\x0e\x07\x11I\x43)\xb8Jm;m\xe1\xd3\x1e\x39_\x9f\xb7!\xdaZ\xd9\xd2\x15_\xf6U\x66q\xa2\x84\x93\xaf\xbf\x05~\xbd\xde" "\xc1\xadZ\xb8\xdd&\xc4\xe6)\x42>\x89\x38\xb7\xaf\xf1\x1aQ-\x94\x11\xb8\x38$\xed\xf3\xb9\x8e\x8f\x9f@\xf4\x0c\xaf\xe1\x98%\x1c\x94i" "\xb6\xba\xc6\xf2Q\xe5=\xb8\xdaS\x1f\x18\xe9(\xc0,~\x9dl\xe1\x9cI\xad\x08\xda\x42\xf0\x12\xb7\xc8\x16\xbew\xd7\x37V\xef\\\xa7\xe7" "\x37\xe4\x0bi\xa5\xed\x9a\xbd\xfb\xebl\xf9\xb8\x86{\xc0\x35\x96o\x97n\xd8\xb8\xdf\xf0\xceo\x38\xd1\xae\xd4\x35\x0fh\x8bo\xe2\xed.\xb8" "G\xaa\x93\xfb\x83\x8b\xf0h\x86h\xae\xbe\x10\xcd\xefH\xc4\xd2\r\xc9\?Yl'\x61\xb5\x08\x9a\x8b\xa1p\xc8\xe3-,\x8e\x10#\xd4\x1b" "]\xc4\xff\\\xa5h\xd9\xcch\xdd\xc2\xdd\x43\xa7\xf9'\xe3\x66\x93\xd2\x32\xaf\xa1\x1e\xbf\x61#\x7f\x83\xfd\x62\x8cl\xc4T\xb4-\x64\x17\xf1" "\xde\x38>\xad\xb1\x86\xb7\x64\x0b\x87\x64\"\r\x9f\x37\xf4:\xb9I\xee\xcf\x9d\xf1|\x8aM\xe8L\xd3%\x91\xae\xa1\x83\xaf\xb4\xd0\xc9+h" "(\xe2\xca\xe4\xf6%\x1b|S\xb3\x0f\xff&-\x94@t.l\xe7J\xd4\x64\x37i\x63\xe2\xcc\x9d\x0e\x1eJ\x42t\x96zr\x15\x44\?\xeb\xefm\xb2\xc5\xe8\x45\xd0.\xe7l\xcaT\x0b+\xc1M\x0b\x0f" "#\xa2;\xda\x97\x1a\x32\xaes\xb2\xa7\xd4\xa0\x85\x45\xc9\x19\x06\xee\x14n\xf4\xd3\xd0\x15\x44\xe9\x37)\x62\xf8\xab\xed\xbdi\x94W\x91\xdcj" " N\x9d\xae\x9a\x7f\xfe'Y\xde)\xe7\x9b\x1b\xb4\x33\x35\xd4\x04\x34\x99@\xbc\xc7\xab\xe3\xe7\xa9\x0c\x97{\xae\x86\xcb}\xbf\xe8\xe0\xfb\x9b" "\xcf\xb4\x88\x9c\x9c\x19P\xd1\x8f\xe5\x87\xdd\xe0\x9ck\x43\x37\x93\xbd\x8f\xe0y)\xda\x39\x9e\x14\x01\xb1\x84\x97#g\xael\xa8\xb6\xb9m\xd1" "\xc2\xc9m\x9d\x99\x11K\xb6J\x8d\xb4\\\x63S\xd2`\xbf\xb8\x41#J\x83\xb3\x35J\x7f(\x11\xfd\\\xb9+\xd0\xf6\xdf\xc8\x9e\xb7\x9d\xfe" "\x18\xecx\x35\xb4\xab\xebG\xc3|\xde\xc0\x02/\xa3\x97\x18\x15\xd1@\xaa\xe8\xe7P\xb1\xd9\x86\x33\xa9i\xb4\x16\x98\xd8\t'\xf3\x1bS\x91" "\x9f\x1c\xed'MV\xf1\xc2\x02Y&+\xe4\x33\xf9\xee\x64\xdd\xcd\x18_\xc2y\x13\xc4\xe0\xaf\x89\x80\x81\xcas\xb2\x43\xf2T\?\xfc\xfb\x8f" "\xbd\xa1&\xdd\xb5\x9a\xf1^\x9f|'\xbf\x9d\xd9\xf3.\xf6\n\x11m\xffz\xbd\xd8\xe5\x80Y\xb4\x37\x10\xddu\xa5N\xc5X@\x44\xd1J" "\r\xe7\xc6\x8fK\xb4\x45R=\x90\xc1sR\xa8\xb0+\xd2\x0c\x31\xe1\x45\xb4\x18IJ\xfe\t\x8e\x8f\xcd\xf8\x9c'm\xf0\xa4\x8f\xbc\xfd\xce" "\x11\x39\x01Q\xe0\x95\xf4\xb2j\x62\xa3\xa9$\x07\xc8\xc8\xe4\x10\xef\x9c\x8e\x04M:\x12\x34\x93\xab\x16\x89\x1cH\xd0\x94p" "\xff,\x61\xb3\xfb\x37\?`\x13\xdd\xa4\xfd\xb3I[g\x93\x9dv%\xdb\x91&\x82\x19\x19\xa5H\xb3\x9ak\xd2\t\xb1\x89}\xd5\x85\xb6\xd6" "\xbd\xd4\xc4\xc2&!\x8c\x38Mv\x13\x9a^\xce\xb4\x91\x9bWS\xb8\x86n\x34\xb5-l] X\xc7\xbf\xc9\xe9\xc5Q.\xd9s\xcc\\" "\xb2\x1a\xff\xfd\xe1-\x32\x32\xe5kK_\x90\x85\x9c\x80UJG\x98#\x19\xd5\x82\x03\x35\xb5\x91\xbfU\x8e\x88\x9b\x9c\xfdT\xca\xd7\x12\xfe" "*\x9a/u\x35M\xdex\xeeo\x9c\x00\x37\x11\x1f\xae\x89\xd1\n\xab\x37M\xcb\xb6k\xe9\xf3(h\xc3\x05m\x85\xaam\xa6`\x44\x43\x91" "\xc9\xdax\xed\xac{\x94\x32\x88\x63\xfd\xd8\x64]\xd3\xc4:\x12!\xfc\xc5\x9a\xb4\xe0\n/\x9c:\xd9\x06\xab\x87h\x0b\x10\xb3\xaeM\x0e\xc6" "\x9b\x1c\x8c\x37\x11SQh\xbbI\to\?\x9c\xba\x35\x10\x0c\xc8\xaaI\xcf\x8b}\x7f\xd5\xd6\xe7\xd5\xac\x62\x7fk!\xfa\xa7\x10\xd3\"\xc2" "W\x10\x1d\x91\x16\xed*\xad\xe4|\x0e\x8e-GZt\xbci\xa5\x83-\r\xebi\x01\xf8\x44\x9bok\x38\xe2\x81}<-\xce\xe4\xb6l" "\x8d\xc0\xb7\x8b\xcc\x45\x11os\xc7\xd2\xe6\xdc\x61\x45\xd8\xa1\x01\xb0#\x9d\x07\xda\xed;XzY\xea`G*#m\xa2\x1d\xdb\x97\xa5\x0b" "\x11\xee\x11\x1d\xbaq*\x39\xd6\xee\xd0\xc5\xa1\x83\x05\xa9J\xab':pr\x17\x62&\x43\xc9v\xc0\x44\xb8M\xaa\x98\x15~\xc3\x1f\x30\xc6" "Vn\xbc\x30\xb8\x05h\xa9\x83\xf8\x8c\x42\xd8\x61:\x34\x91v\xb2j\xd7\xf9\x37\xeb\xb0-\x33-:I>\xc3\xdf\x34\xfa\x1a\xf3\x41\x34\xf5" "Y\xd9\xee\xbb\xb6\x9e\xd1/\x1e\xda\xe2\x04\xf1r\x44\xc3tu\x87\x16\xea\x0e\xcbN'\xfb:\x07\x97\x36\x9ax\x41lH!\xa6\x1b^\x38" "\xc5\xc4u>\x42T\xcc/\xec\x83\xbc`\x87\x8b\xd2K\xd2\x9a;\x39\xfaSq]\x1f \x98\x44N\xf3\?\xd3\x02\xf6\x42\xf7\xb9\x17Z\x9f" "\x94\x34T\xbdp\xc6\xa0\xa7\x8b\x61`\xbe\xe9\xd1\xbe\xdd\xa3!\xa9\xc7\\\xea\xfd-\xb6\x92\xc6O|x\xcf)$I\xb8tnL\x35\xaa" "!\x1e\x94\x89\xd8\x93\xd4\x44\x04\xcf\x82\xd8\xae\xb1\x35\x15\xad\x93\\GXZ#\xda\xcf\x10\x41lLL\x17\x13,\x46.\xf5\x62L\xdf\xf4" "\xe8\xe7\xdf\xa3\x1b\x7f/\xae\x9e\xc6g\xa5\xf5\xe2*\x1cx\xf4(\xf5\?\xdf\xbbj\xd8\x33N\xc5\x8e\xee\xa8\x63\x91t\x44\x83Gy\x8f>" "\xfd\x0c[)\xc4xG\xa9\xb1\xecG\xbc\nL\r=\xba\xdd*\xe3\x9fJ\xec\x7f\xed\xf2\x37\x98\x39U\x86}\x36r\x9a\xe7\x63H\xe0 " "\xdd\x12|\xef,\xd3\x92\xf3\x19V\x90\xa8\xb6\xc4\"\x44\x11\x87\xc8\x98\xf0\xa4\xa3\x95\x93>}=\xec\x0b\xa9\x1c\x90\x63g\xee\r\x89\x96^" "\xe3\xd5q\x44\xa1\xd4\xdd:-\x1c\xa3h\x98\x1e\xee\xd1,\xac\x64\x07\xbb\xc7\xf9_%=\tz\xac+{R\x43\x85\xa3\xd0\xd2\xf6\x38<" "\xef%\xb7\xaf\x1c\x06\xf5\x38\xd9\xdfS'\xb6\xe7*\xbd\xc7z\x08\x0bh\xe4\\\x94\x8a\xe9\xfeQ\xd0\x86\xe7\xfe\xea\x44\xb4R\x19\xb4\xdck" "\xf5\x17\x96\xd8\x8a'\xe5\x12\x84'\x97\x32\xdc\xb6\x88\x17\xd7\x34\xf7\xf5\x10_LX\xee%_\x38\xd6\x0fL\x0f\x1b\xe9+\x93\xd0\xe0+\xd5" "\xfd\xef\xbb\x1b\x1f\xcf\x13\xbe\x0e\xdd\x0c\xdc\x7f!\xa2\xbc^\xb4\xa1>\xeb\xa7\\\x37\xf6\xb1\x1f\x8ch\xb6\xbf\xac\x91&\xcf\x1e\x62\x9a\t\x9f" "v\x9d\xd9\xe5\xc8s\xc0\xf3\xd6\x9c\xa8\xdc\x99\xad\x87\xf5\x37\xc2\tO\x1b}\xaa\xa1\xf7\x12\xf9\x9e\xfe\x8ct\t\xe3\x39\x8e\x65\x1f\xac\xc7)" "\xb5\x1e'\xc9\x84(%\x1c\xca\xf4\xb2\xa5U\xb1\xbd\xf5\xd6\r\x1d\x98{t\xab\xe8\xc9\xa9\xe4\x84i\xf9+\xaf\xa1_\xdb[\xdf\xec\xc7\xb7" "\x38\xe3\xba\xb1\xe7\x65\x07k\x03\x8d\x9e\x8b*N\x1e\xbc\x18\xcb\xb7+/\x90\xeb\x0fz^\x1f\t\xff~\xa6\x9c\xc1TMj\x0fj}\x1a" "\x9a\xfa\xf4\x19\xee\xf3\xc3\xea\xd3\xe2\xdd\xc7\x8e\x1f\xd2\xec`=\x44\?\xdeY\xf8\xa1\xbc\x8c\xf0[G\xf4\xb6\xf8\xde\xb4\xb8\xd6\x62\x46\x9bv" "\xf4\xca\x97\xa1Z\xbaS^\x9fw\x82V\x9e\xd3\x85\xaa\x8f]\xdd\x84\xc5Hw:{\xdcv-\xb9\x8d\x92&\x7f_\x92\xce\xc4\xbb\xfc\x83" "\x06\x1b\x92\x92\x66\xd2>\x1b\xfa>-\x01}\xb6\xd4}\xda\xd8\xfb\x1c\xaa\x0b\xbf\xc0\x33\x9e\xea\xb2\x02\xa2\x06\xeb\xb3\xe6\xea\xd3\xbc\xd6\xe7\x12" "\x82~\xfc\xb0\x07\xa2\xf1\x15\xbe\xc6\x83\x07\x96\xda>\x1b\x9d>v\x64\x12\xe6\xfe\x84.\xb8R\xfa\x92\x1c@y[\xde\xf7\xdcJ\xb6\xba " ":\xe8\xfd\x64w[\xfd\x03\x31\xbd\xdc\xe7\xd8U\xb2\xe0,)\x8f\xe8\x39)\xda#\xf9N\x0e\x41\xf4y\xfbI\xb5\x07\x1e\x1d;\xfd\x05\x62" "\xf7\x37\xa3\x8c\xbf\xb2\xe2$h\xd2\xec\xc0\xa2@\x8d\x43\x43\xd7\xce_\\\x0bK}MK\xca[\x9cOTM\xfau\xe1\xe2\xa2]\xac\xc2" "Y\xae\xf8\x0b\x18\x1a\xfb\xb6;y\xcf\xf3X\x8d\x94\x93;\xcer\xaa&\x97\x0b\x19t[\xd6\xd5\xdb;-\xd7\xd6\xf7\xdcR\r\xda\xe3\x61" "\xd0\x9a]\xbd\xa1m\x94\xf2\xa4u\"\x45\x34\x9e\xdd\xe6\xb4\xa4^\xa7\x86\x32\xe2O,\x43\t)\xe4\x10\xe1Q\xda\xf7\x07\x46\xb4'!\xfa" "\xfd\xfd\xb4\xb9\xe5\xaf\x8c\x46\xb1>;\xd9\xfd\xf4\x1d%\x8c\x0e\x97\xee\x06\xd5G\xe4r#\x1d\xf0\xfb\xd8\xf0\xa2\xd4\xcf\xb6~\xe9\x8e\xde\xcf" "\n\xedl\x38\xf1\xf7$\x1a\xe2q\x8b\xb8;\x03\xf9\xb2\x38$\xef\xb3\x9f\xd4\xa7\xa7\\\?\xfb\xeaK\xcb\x8d\x99\"&\xe0\xbe\xb2\xa5u\xee" "\xfa\xf4\xfc\xea#>\xaa\xf0\xf1\x30\xf9\x1e`W\x11\xd1^\xf1\x16\xd7\xf3N\xfc\xdeY\xc3\x12\xa6\x9a<&\xb5\x01-`\x03\xae\x90\x1ap" "\x18=`WL\x38pr\x89\x8f\x89G}\x88\xe8\xa2\x0f\xe2*\x7fU\xbb\x06\xf1\x05\x0f\xf8\xe5\r\x34\x0e\xc3\rOt\xa7\xfe-\xe1r" "\x9dgl\xc8 \xe2\x80\xe7\x44'o\x10\xff<\x83\xa8\x36\x07\xf6\xc1l\xb3#\x37\xe0 `@\xbb\xe8 \xad\xe3h\xbf\x8c\xd0\x1f!m" "\x0c\x9c\xba\xbb\xb0\xed\xc5\xe5\x1a\xcb\x00\x35\xc4\xbb\x16\r\x93\x9e\x03)\xa2\xc9\xa4\x9e\x15\n\xd0\nm\?\xa5\x8a\xa8&\x06|\x97J\xbf\x36" "v\xf8\x35\x86\xa3\x30O\x31\xa0]u\xc0\xd6\x63\xb0>\xfb\x00\x31\xd6\x18x\x66\x08\xd5\x98\x8a\x17\x39@\xb0U\xa3\xdf\xc1\xfag\xc1s\x8f" "t\xefM\x9c^\xa7\xb8X+\xf9\xfc\xd6(l\xad\xa8\xe2;\xbd\x17G\x9c^\x18\xb1p*\x99\xb3\xdc\xd6J\x88\xa9\x0e\xa5|\xc6\xd2\x39" "\xc5\xd6\xa0\x9a\xb0\x00\x61L\x1dq:u\xa4\x1d\x44,\xc6\xe2\xc6\xe4\x42\xd4\xb0J\x35\x0c\x62\x18:\xa2\x9d\x44I\xb3\xfb\x88\xfe\xfe\xa3x" "\xb4\x04-*\x9c\x91\xee\x02#\xf6\xe0\x46\xec\xdb\x8fh\x00\x1a\xd1Qq\xc4N\x97\x32\xfb\x1d\x42\x44\x7f\x63\xa4{\x9b\x61y\xca\x88\xfd\x30" "\x65\xbcu\x9d\x13\xa5\xe5\xe2g\x37\x62\x8d\xc6\x1d\xbe\x8d\xc9\xf9T:+\xec\xcdX\x02\xc6v\"\xbe\xc1\xb8M\xc7\xb2\x91\?Qr\x7f\xec" "OO;\xc9\x88\x43\xb1\x11\x82\x8d\x1as\xd9*Z\xf8\xc1\x0c\xf7\xcf\xf9\xfb\x91\xee\xb1\x84/\x89\x62\xeegRr\x39\x17M\x31\xff\x37\xb8" "\x92\x8f\xd2\xa5\x0cZuz\x9c\xdf\xa5\xdb\x0bv\x39\x94rw\xd9\xb8\rm\x88\x1bg\xbb\xb6\xc8\x07>V\xad\x07\xa2\xdc(" "\x35\xb0\x18\xda\xbe\x05K\xcf\x02\x61\x90\x95\xb8\x02\x17\x1b,\xb2\x9d\x9a\xfc\xcf\xd7\xb2\xc8\xf0\x81)\xf5\xde\x61}^p\x95\xa6\x32\xae\xbc\xb2" "Q\x34\xed\xfd\xe9o\xder-\xdb:\x8e+\x9f\x41+\xca\x91\x63\xd7\xd6\xa7\x8b\xb4u\x0e\r\xcbN\x95\xac\x45\x16\xd9\r\xde\x10\xad\xa7\x8b" "l\xfa\xb9\xde\xda\x89\xc7\xb8,\x17=\x85\x9b\x14\xaa\xc3\xcdV\xd3\xb5\xf5\xd9;\xcd\x10\xa6]\xec\x04m\xbe+\xa3\xfb\xf5\xdc\xbe\x63\x8d\xae" "\x84\xf1\x44y\x0b+x\xca\xdb\xc9\xe5\x33|i\xca\xdbX\xc1Q\xde\xc6\xe7X\xde\x41\x44\x02\xa1\x35\x1f\xe5\x1d,\x99\x31\xa2\x8d\x84\xf8{" "\x96\xfb\x43rQ\x82o\x97ii\xe3$\x39|\xceiiS\xbf\xccr\x01\x03\x65#*Z\x11\xad\x8c\x1a\xd7\x36L\x12\xd1V\x1d\x18\x31" "K\x65\x62zq\x9d-\xfb\xd0\xfc\xb7V^\xcb\x05\x0c\x9f\x85wM\xcc]\x94\x0b\xf0\xf8-\x17\xc2\x30\xb7\\X\xb7\x17\xce\\R\xb6o" "\x0fQ\xc1\x97'\xb4\x01Z\xb9\x82y;\xe5\x02\x34\xd3\x81\xf0\x90:n\xb2\x12[_\x44h\x61\x82\x84\x36\xe0\x17\xda\xa6x\xe5\n\x8a\xbf" "\xd0\x82\x8e\tq\xaf\x95\xe4\x62\x02^\xce\xf5s\xb0\x39\"\xd1r\x1f\x87h#\x1c\x83`\x62\xc2\x9b\x81\x13=\x0f\x11\x1f\xc9\xf1\x81\x11\x63" " \xa3\x0e\x9d\x46\xb8I\x94<#:\x90\"\xda\xdc\xa5\xf2&w}/\x7f]j\xcbP\x1a\xcb\x95\xf5\xd9v\xfc\xb4\x83Y\x34\xd5\xf6\xd2" "\x37ny.\x9a\x8d\xf8\x8d,\x46\x1c\xba\x97kh\x7f\xca\x35\xd4\xd6\xc2\xc5>\xea\xdbr-\x1b\xe9\xc7\xaf\x83\xbc-'V\xa0@\xb4\xe5" "\\\x10\xcd\xf2\x06\xd1\x1c\nL\xc4\x04\xb1\x8b\x61O/M(\xc3\xba\xaa\xe2\xc1\x9fmWh\xa2\x8c\xd9\xe3#N\x0bj\xc2\xa5\x33~^" " \xa4\xbdh\x36=\x66\xd4Zxu\xf5\xaf\x16\x1f\x1f\xaa<\xaf\xc2\x65Q\xff\xd2p\x86\xdb\x14\xd1o\x33j\x84\xc1\x62\xf9 \\\x39\x8a" "\x92\xd6/\x62H\xe5\x34=\xf7\x62\xf1\x37\xbf\xc2\xae\xc0\xf2\x97\xc5\xbe\xa4!\xe2\xa4k\xb0\x8e\xa8V$\x1f\xc9\x91zv\x1d\xf3\xael\xec" "\xa9\\\x38\xf9\x62\x0e`\x46\x17\x9a\xf7\xa3\xf2\x16\\\xf2\xc1W\xed\xf8\xe8\x1b\x1d\x31\xd5\x86v[#\xd3\x10\xc5O\xf9\xa2\x17;\x38\xc9i" "\x88\xc8\xab\xda\x12\xb4^\x95p\xaf\x80UM*\xee\x83\xfb\xb8\x05\x7f\xce\xb0M\x16\x44\xe6\x1d|\xd5\x8d\xd9^\x94\x13\xd3\x9d\xc3\xbc\x36\xe1" "\xc9\xe4\x9f\x66\x00\xffV\xb9w\xc6\xa3\xdf\xf8\xa7\x90\xd3R\xbf\xd3\x83\nl;\x10;\xb7\x1b\xb1\x97\x13\xc3\x83\x1cT\x92\xebZN\xcc\xfd" "\x01^s*\xf6\x9dpZ\x11\xf1p\x8f\xc4\xab@\xe8l\xe5\x07x\xccs\xfa\x9d\xcb\x43|\?\xc5G\x9f\xae\xc1\x39\xdc\xc4\xf4\xbe\x91\x36" "\x98\xbd\xc7'I\xb5\x1b\xb7\xef\xd6[\x37\xa9\xf9\xb0H\xda\xc9\x8f\x33\xff\xd2L\x8b\xb7\x0b\x39-\xa9\xf2\x17\xb6\xbf\xb4\xf0\xec\xc5\x19\xee\xfb" "\xec\x65}\xf5\x05\x13\xb8h\x8d\x96S\x7f~\xc7\xbc\xf2\xec\xb3\x9dh\x84\xe6\x97)\x34\xdb\x8f\xf2\x82\xe4\xf1\x9dg/X!\x8f;\xcc\xb1" "\x0e\xdfz\xf7\xc8\x89\xdd\x12\x44|\x62\xce=\x9f\x83}\xe6\xd8\xf0\xd4\x99\xbc\?\xc1'S\x35\x66\xc2\xe8\xca\x19\xff\x8e\xfd\xb3\x46P %" ">\x14\xd8\xe6\x84^\xe8\xa4\xefS\xba\x42\xa8\x33\xd5\xde\x9d\xe9+K\xa3Y\x12\x85KTZ\xc9\xd6\x45Z\xfd\xc9\x89\x9a=\xee\x8f\xa3i" "MM(|R[\xc0\x80\x0fq\x81\x32\x9a\x14P\x42\x92]\xfei\xf7(\x1bR,\x1d\x91+'k\xee\x03\x8cR\x8d\xc9\xed+\xbaW" "\x39\r\x13\x03\x9e\x00k\xa5k\xeb:\x32\x14\xdb\xad*[\xe9\x8a\xcfp\x88\x82\x80\xb9\x19#\x9b\x46\x15\x83w\x9ej\xc8\x9a\xe4\x84wz" "\xbe\x8a#\xbc\x65XH\x84,\xb8\x98\x08\x17\xd6\xab\xd2\xeb\xa2\xd8r\xe6j\xe4\xa0i\x96\xd5[I\xb3\xeb\x95\x16,\x94\x42~\x80\xc9\xf5" "\r\x39tjl\xc5[\x66\xe8m\x89\x64\xa6\xdc\x36I\xfe\x9d\xc5\x15\xe6M\xe5R\?\xae\t\xea\xd9\xe4~\x0cS\x91\x88m^\xbe\xcd\x03" "\xdf\xf8\xc3\x37|\x84\xc9{M\xab\x64\x8b\x86\xa7Z\x07\x1c\x94s\xd5\xb6\x37S\xff\xb6Q\xc9\xb8\xec\x84\x93\x8d\x88\x1f|\xc7\xb3=}\xfe" "\x37\xe6\xd0\xe2&]\xf1u-\xf0\xc9\xf8'\x94\x16\xf1u\xb1M\?\x80\x87\x99\x31\xde\xef\xc4\xef\xbf\x41;z\x8b\xcf;\xd4>\xd0\xd7\x16" "\xf1\x16\xef\x35\xbd[\x38\x31\x88\x13\xf1\x91\x9e#\">\x9f\x38\xe1\xd1\xa6\"n\x18\xe6%\xe3\xdf\xac\x08\x33\xa8i\xd9\xea\x16\xeb\x42\x45\xeb" "\x45~\xfb\x30\xb3*y\x9a\xc9\xb3>g\x13Y\x89\xfe\xb9\xf0g\x8b\xbc\x92\x92\x8a\xa1\x8eh\xe6\\g\xc4\xbc\x92\x88+\xbc\x1b/\"\xd9" "\xce\x03X\xc0\x17\x9d\xed\x9e\x90(*\xd9\x1e.\x90\x15w\xc8\x1f\x7f\x46y\x81^+#\xd0\xb2\xb0z\x94m\xa3\xba\xc1\xba\xa7\x32g\x1e" "\x84]\x64\x33\x82\x1d\x1b\xd5\x07\xef\xf8=,\x8f\x95\xb4\xa1\x34v\x33\xd1\xa4\xe9\x0b\xce\x98\x96\x9c\x8c\x8b\xffI\xf8\x7f\x1c\x17\x9c\xe0$\x61" "\x82\xd7\x87\x39\x33\xe5$W\xc4\xb2/\x1e\x35\x45\x35\x93}\xf3\xd1\xe7\xa8\x03\x30n\x15\xfe>\x39\xff\x66\x8b \xce\xab\xd9\xd3~N[\x97" "'\xae\xc9G\xb5\xd1\xde\xc8\x01\xc9\xf4\x65\x89< \xe7No \x31^\x36\xc2\xe3@\x45<\x08\xe6p\x8c\xf1|\xb5\xbe\n\x9a\xce\xcf\xa2" "\x0fn\xda\xedk|p\x1b\xb4Y\x94\xd5\xf0H\xeb\xed\x41\xae\x39\xf3\x66X\xa8\x9d\xe4\xf1\x8e\xd4]\xc9\xc1=\x0c>\x9a\xfc\x1e\x1f\xae\\" "\xc4\x1a\x1f\x11\x8b'N\xbf;\xc4\xb5T\x0e\xbd\xc6\nG_\x14\xc3Q\xf5\x17\xa7t\xef\xbd\xc6W\xadz\xfa\x1fM\xeeR\x64\xc9\x01o" "-\xb0\xdeWx\xcb\x13\x37\xa9\xb7\x91\x7fX\x02\xae\x44\xe5\xb5~\xba\x44\xcc\x1f\x11{\x63\xa7\x7f\xb1\xeb\x9f\x85\xf7\xb2\xbcT\x0b\xd7x\x37" "'\x7fK\xabLN\x38\x00;\xc1\xde\x61\x42\xb3\x33\t\x31z\x39\x81\x83\x91\x06\x65\x65\xfa\xefx\xbdUp-\xd9z\xd1\xc1\xf1\xeb\r\x34" "\x0c)Ol\x87\x85=\x84G\x16\xadz\x1e\xff\xf4\x30\x8fl\xda\xba\xf7\x1b\x34\x33\xde\x1b\xd9{>\x41\x41\xc8\x42!*~\xdd\x1d:=\x9e`T,\xda\xd7(\xde>\xe2" "\xbbU-\xbb]\x64\r\x1e\x89O\xe4\x04\x91P\x84\x16\x82[hQJ\x85\xe3\x1f\xec\xc7(\x62\xb4\x00\x7fW|\xcb&\x8eqkk\xdb" "\xc2\xae|\x0e#\x8c\x10\xdd\xbe\xf3\x38\xda\xc5\x44T\xf9\x1c&U\xa1-\xb3)\x9fg\xcd\xc3\xe4\xb4\x97\xddZ\xbdt\x0e\xa3\x92\x10\x63\xaa" "s\x8c\xfe\xcb\x97\xf1\xfe\xa7\x8e\xbf\xcc\x31H\xb4\x41\x1f\x0e\xe8.\xcak`\xfe^\xc2j(\\\x15\x34\x64\x98\xeds\x08\xed\xa3\xeb\x1a\xfc" "+\x85\x16\xf1\xcc\xc8\x31\xe5%\x42\x7f\x95/\x61\xf1-_\xcaO\xf4\x87\x85}h\xe6\xa9g\xf4\x1b\x80\x98\xbb\x01I\xc8\x89Y\xf1\x15\xc6" "Hh\xf5\xa3\xf4\xa8\x05\xedy\xdf\x89\xf9#\x15\x1f\x41\x8bhS\xbe\\\x17+ >\x0e%\x0f\xbd\xcdv\xcaY\xbb\x9b^Zmt\x17" "\x9b/l\xb9\xcb\xceJ\x97%\xbd\xcb\xd7\xd0\xc5\xe4\xbe\x31L\x14\x99\xc6\xe6\x43\x45\xa9o\xe1\xec\xacZ\x17\xc4\xdb\xeb\xc6\x17\xbb\xe0\xe3'" "\xd8\x89\x9c:|\xb3I\x15\xd3\xa4\x1b\xa4\xeb\x39\x35\xaa\\/]\x94X\xac\xba|%]\x0e\xff\xbb\x1c\xcaw\x37\x43\xf9.\xdc\x35\xca\xf2" "\x86:I\xe7p\xdd\?\x83\x66\xbb\x08\x18\x35\xe0\xf1\xcd\x80\x83\x9f.\xbc\xbc\x84\x37\x38\xf3\xbaX\xe4\x8b\xeb\xb2\xe4<\xc3\x04n\x64\x0f\xeb" "\x99\x83\xbeg\x0e\xfa\x9em\x95\x8f}\x33\xcf\xb4x<#\xf4\xa4\xf0\x80\xba\xc5\x61\x11\x9ag\x9b\x10}\xfe\xe7\xb8\xd9\x00\x1f\xac\xf7\xf3\xcc" "^\xecs\x82\x9a\xf9\x99\xbd\xf7g\x98\xf8\x8cp\x46\x17\xb1\x85K\xc0\xbeW~\xc6:\x30\xa1mQY\x66\\g!\xfa\xb0\xcf\xb0\xfc\x96" "\xe9J.\xb4\x39\x06\xe1\x82\x7f_\xe0\xf7p\xfa\x16~\xd7H{[\xcf\xfc\xa4\x9e\xd9\x45y\x66\xd5\xdb\x63\x61\xe9\xfd\xfd^;\x83S;" "\xb4\xc5\x37\x96s\xe4\x34\xcc\x9b\xe7\x12\xb2\xe7]\x04:\xb0\x34\xdd\xd1\xd1\x0c\x85\x1b\xed\xe5_-\xff\xe7\xc1\r\xc7\x03\xaa%\xe7\xcbx\xb4" "\xcb\x1a]\x13`\xe1\x34\x31[\x1e\xcb\xdfL\xc3\x92\xear\x0f\xa1\x1b\x85\xa3I\x32\xa8\xb2\xee\xec\xf9oR\x18\xa6z\x98\xbb\x10\xa2\xdb\xd4" "\x63%\xd4[o\xd7\xc1S\xfc\x0e\x41\xff\xcb\xaf\x7f\xb5_\x10y\xf3\xfa\xb7\xb2\xbc\x7f\xe5\x87\xf4J\xdb\xd9k\x08w\xad\x62\xd1\xc9g{" "\r!u \xfe>\xb0\x14\xbdZ\xb4\x9a\x15\x44\?\x16\xdf\xd8+Mj\xaf\x98\x1c\x11v&!\t\xb6\xc8WX\xaa\x85\xe6\x33\xad<\x0f" "g\xf9\xe1}\xfd\xf6\xc8\x31\xb8\xb4\\{M\xb6\xa7\xf2]\xc4\xdd\x19\x34\x98\xe5^\xb1\xf6[\x88\xefRH\xfd\x12\xb9\x81\x38\x8b\xc6\xb4\xcf" "=\x01\x44\x1b\x36\x9c\xb4\x80\xbd\xa6\x85\x46\xd6]q\x90\xf8\n\x93\xb4\x10\xf5\xdekz\x8f\xd3\xa5\xad\x03\xd0vU\x15>W\xb3\x63\\\x01" "\x41q\x8c\xec\xcfS\x64'\xea\x35]V\x9c~}\x04\xbb\x31\xfa}\x88\xa8\x61\x65\xcc\x97\\\x34\x14\x82W\xb8~\x1a=\xf7\x45LG\x14" "\x97\xc8\x65\x38=\x94_Y\x7f\xbc\xaa\xa5\xf4\xb4\x86Y^\xd1\xcc\xad\xa1\xcc\xa9\xde\xb2m\xa3\n\xeb\x92\x8aX\x93o\x62\x62\xf1NLL" "\xbb!\x15^g\x10\x7f.!\xce\x9f`\xf8\x16\xd1\xfc`\x94\x9d\x64\xf7>\xed\xde\x61\xbb\x66Mxv\xf2\xbbT\x91\x85|\x18\x96\xff\xab" "\x38\x05\x7f:\xb4\x0b\x0c\x43\x9c\x37\x11Q\x8a\x87\xf1\xde'VM\x88X\xdc\x02m\xe5\xa1\xb0\xb6`\xaf\x64\x88\t\x12\xe1\xe1\x1eV\xbd\xab" "\xb8\n\xe2\xd1N\x36\xaan\xb4\x03\x9a\xbe\x45\x9c\xd1`M\x11\xfe\x0f\xa6\x85\xc3\xf9\x10R\x9b\x86\xa4\xc6\xaf\xd4\xb9\xf1\x01\xb5\xdb\x91\xae\xa6" "\x99\xf1&[\x64g\x37\x1c\xde\xb9\x0c\xe2\xf3y\xb8\x84\x89\xe1\x0f\x83+'-\xc2\xc3\x98\xf9\x8f=\xbc\x85\xe3\xadp\xf4\xf7]\x10g;" ".J=\x84\xcd\xb6T\\\x38\xff}xM\xf8\xee\xca\x88\xcfsn\x63\xe0\x30\x11v\x7f\x13\x17G\xf9\?\xc0\xf2\x61\"\x0b\x03\x44\x16\x45" "\xd5Xv\x87\xecg\n\x9fi\xc4\x19J\t\x43|!\x11\xebG\xf1^\x81\x36\xc0!\xdb\x9a!\x42+\x18\xd9\x8d\x16\xb1\x1d\xee\xfa\x1dY" "\xa2\x81\x65<$Xy\x98\x16\x18m\xce\x45\x8b;\x8e\x0b\xca\xad\xcb\xb5\xfd\xf7\x32\x86\x06\xc3\xcc\xc6\x90=\xf3\x61z\xbb\xcd.\x04\xc5\xf8" "\xfe\xd0\xdf\xa5$\x84\x33\xb4\xce\x9dio\xea\xefP\x9a\xb7p\xc0\xe6\x0b\x90\x81wH}\xbe\x92o&h\xfd\xeb \x46\x81X`%\xe2" "\"\x94\x98\\\xdeK\x16{\x41H\x7f\xf9\x14\xb0\xfc\x0c\xbd\xa0p\xd8+\x03\x9f%\x88\xef\x7f\x98]\xcf\xc1\xc1\xc0O\x8c\xed\xa4\x94\x07\xe4" "\x89\x9f]z\xea~\x94\x0c\xc6\x82x\x1dJ\xfd\xfa\x61\xdf_\xa7\xbf\"\xc4\x8e\x30\xfag\xb2~\xda\x0f\?\xe8-\xd7\xbdiN\xf4l[" "/\x8e\x92\xe9GZ\xdf\x63w\xe2\x83M\xd7\x07\x87}\x1fl\x9f>\xe2\xda\x1e\xfb]\x1fls>\xd8\xd6|\xd0\xcc\xf9\xc1jL\xa9Q" "\x96\x9a\xc7\xd0\xd0\xb6|`u\x84\xf0\x00g\x61\xab\xf1\xc1V\x43\xc9\x91\xc8\x07\x1b\x90\x0f\xd7S\xd8\x15>\x30-)\xc4t\xc8\x07g\xdf" ">\x10\x33[\x88^\xe0G\xfa\x42\xe2\xcd~\xa4\x0b<[\xb6s\x93\x96\xbf\xe0n\xacZ\x1b,L\xc1\xbd\x31;\xde\x1fYq'm\xdc" "\xc7{o\xd0J\x07 Z\x8c\x8fM\x8b\xf1\x81\xf0\x9c\xc2\x87\x03\xb9i,\"\x11\xcd\x82r\nm\x7f\xa6\xf2\x07\xdb\x84\x0f\x44\xd2\x12\xce" "\xda\xe9\xae\xfa\x41\xa7\xe5\x06\xbb\x04\x1fk\xf4\xaa\x7f\x11\xad_\x88\xcc\xfd\xc5\xf6\r\xe5\xdf\xf4\xb5\xe0\x64\xaf{\x15\xdb\xfe\xda\xc2\x9a\x19o" "W\x34\xcd\xaf\xb2\x07\xd2\xbc\x18\xcb+\\\xbeR\xc2\xa5\x94\x11h\x11\xfa\x85\x17\xaf`\xa7\x97\x36.\xf1\x36U\x9b\x38%\x15\xce\xad\xa2Y" "OI\xf8\xc3sy\xb8\xf0JI\xfa\xb0\xd8\nP\x44\xabv\x84\xd5\x03'\x96\xc8\x8aX\xdb\x41X$\x11\xefq\x05xQ\x08\?\x1f\x92" "\xcb^\xf2\x85\xbb\xc1\xcb\x16\xb6p\x0e\xbc\\\x61/J\xca\x9fXOT)\xc1`%\xe4\xfd\xc1P%\xb4WP)\xe9\xf2\x89\x8b\xd7\xf8" "\xe2\t\x9a\x8d\x84\x84\x8f\x87\x9b+\x9d\xc1\xed\xc4\xb6\x46\xfd[\x1c\x62\xc0\xeb\x1aV\xd1\x9a\xa6\x35\xfc\xe6o\xf1q\r\xd6=l\xa9Z|" "\x85\xbb\x17\x34\x33%\xa9\xb8\x00-\xe6\xaf\xf1oV\xc1\x96\x7f\xa2\xfd\xb4\xd6\x36%T\x61\x08\x01\xa1\x9f\x7f\xd5\x34\xc6[\x36\xebrP\x81" "\x66\xfe\x8b\xca)h\x0b\x36\x84\xba\xa7\xc3\n\x93\xa6\xaa\x35\xc0\n\xcfq\xc4_\x37\x46\xe9{\xf5o~\x44m\tZ\x41\x16\x36\xa5\xfb\xb9" "\x82\xf1Y\x34\x0b\xde]\xd1\xd0\x30jJ\xb6\xa1\x91ki\xef\x1b\x9aY\x16\x8c\xb9'\xd1\xc0\x87\x16\xa1\xc5\xc4\xf4\xad\x00\xc3\x9fh\x03\xde" "\xce\xe8\xd7\xa9;\xdf\x1d\x8c\x83\xf6^M/\?\xa0\x8dKr\x33\xe1\x42\xe3R\x36h\xe7\xb4\xf5\xf6Y\xd0\xac\x17\xad\x9c\x80\x11o\xca\x33" "\xe3\x87\x8fg\x8d\xb1r\xe0\x94\xfe\xd7\xbax\x00\x8d\xd9.\xbd'\xb0tJ^\x81\xe5-]]\xc9\x8cL\xaag`m\x9b\xec;\xd3\x65" "g\xdd\xd8\xa5\x16\x91\xbfiu'Y\xe2\x05'\x07\xcf\xe0\xe1\xa9\xf3\xef\xa7\x0ewM\xd1\xceQ^\xe4\x35\xfc\xcd\x8a\x98\xdc\x31M_o" "\xb3\x08mp\x93M\x1e\xa4\?\rmt\xee\xc4\xbe\x93\"\xda$\x8d\x90\xaf\x01\xcb\xbc\x84_\x87\x7f\xf3\x66\xcc\xdb\x82\xa3\x9c\xf0\x02\x37\x96" "\xde\xf7@\x9eX(_l|\x85\x92\x86\xf5z\x95\x06\xcc\xbf\xc2\x83\x63\xf0r\x37)\x1f\xa4\x97(S\xfe\xaauO\xbb\xd5\xc9\xdf\xfc\xf0" "o\xb1\xcd\x84\x11h\x06\n\xe1\x08\x05W\xbe\x93\xbf\x45\xd7\x8b\x35\xe2\x42\n\xe7\xd7\xb9\xb7/\xc3O\xe9\xca\x63{\x1d\xd1\xb6\xcfH|\x96" "\xe8\x7f\x18%\x83\xe0\x1c\t\xad\xf3\x1c\xc4\xe1\xdcK\x30\xc6k\xc2+<\xcf\xfaZ+\xe4JS#\x8c\xe0\x43h\x62\xb0/\x34\xff\xb6J" "\x33\xde\xbfu\x62oh\x11mP*\x34\xdf@\xe5=h\x8e\xb1\x42\xdb|\xc0\x88\xaaZ\xc4\xd3\x1ah\xce\x04\xc6\xa4\xd0K\xf0!\x9bV" ":\xcdi\xeb\xc5m\xd0\xf0\x99\x35\x31\x33'\x34\?\xdbJ\x33\x31+\xa4\x10\x65\xb5\x89\x81\x43\xa5\t\x8fZ\xe1\x1d~\x0f\x1f\xdaJ\x33\xbd" "^\x66\x83_x\x0bT\x9a|\x13\xcd\x10\xb7Y\x44[n\xa8\x1c\x93\x13\xe7\xe6\x90%\x38\x42\xde\xc0\x34]i\x62\xcf\x34\xe1\x1e\xee\x85\xd9" "\xdb\\_\xe3^\xa4\xcb\xa1\xbc\xd3j\xd3\"\x07\x98\x88\x61\xa4\x46\x1e\xa9:\xd1+\x81h\xb3\xa0&&\x17%\xd8\r\xa0\xdd\x46\xd8\xbe\xa3" "r\x87\x06\xda\x18\x9c\x9eM\xc3\xb4\x31\xc4\xdbQl\x03Ih\x9d\xdd\x8d\xf8\x9ct\x7f\x82\x66\xe1ZL\x0c\x13M\xd0P\xa8)\x66\xbf\x03" "\x8c\x8a\x90\xb0\xf9\xbd.j\xb2n\x97i\xe6\xc6\xf4\xc2\xf2`\t\x83%<\xb6\xa1M\xe6\x10\x8b-\x19y\xc5\x83\x90\x05\x9e;py\x15" "\xda\xeaY\xe1S\x17\x44\x61P\x86\xd9\x44\xd1\x06\xbc\xc5\xdc\x89\xbe\x99\x17\xd2<\xfb\x39\x97u\xcf\xf1\xc0\nN\x8b\xb9\x46\xa1-K\x10Z" "\xbf\xabr\x87@\x04\x42\xeb\x00\x0b\xefW\xa0-\xb7TR\xb7\x15\xe4\x95;ti\x85\x66&\x11\x9a\xbb\x45\xe5\x0e\xdb\x39\x1ay\x83\xf7\x08" "\xbf\x8c\xcdvU\xbb\x01\xcd)Oy$%\x35\x1d\x9e\xe4\xb4\xec\xb4\x0c\xcd\x46\x89\xd2*Z\x84\x1b\x63X\xbf\xab\x9a.\x61Hw\xe9\x87" ".\t\x66\xe2\x30&\xdf\xe3\x64\xee\xda'X\xc5\xedHk\x9e}\x1d\x61\x83\x15\xd5\x0e\x9c\x61\xc9\xa9h\xd2\x44\xfa\xb2\x36\xd1Z\x17\xf1\xdd" "N\xb8JG\xc6W\x87\xb0\x01\xa8\xd6w\xc2\xfd\xc8\xc4\xac\x36\x85\x38\xa8I\r\x89h\x9c\xeaR\x31\x96\xcb\x84\xf3\xd8P^\xb8\xfcv\xea" "\xaev~\xec\xf2;\xcc\xecT\xee-\x02\xf2\x01\x36\xe8\x31Mo\xd7v\xafr\r\xa1i\\[o\xef\xb8\x96\xbb\xbejQ\x9f_\xf0}" "r\xbe\x04-\x32\x44\xe5\x1e\xc6\x45\x61\xb5n/\"\x82\x86\xafQ\x19\x37ZX[\x63\x9aTZ,\xf4\xaa\x65\xcb\x33\x18\xbe\x44\xc3Gs" "\x9f.\xf0\xd2X\x62\xee\xb3\xad:h\xeb\xdf\x8dp\xe7\x34\x11VS\x13\x61\xd8\x83\xf8\xd2\x86y\xcc\xb4\xf4q[\xfa\xc1Im\xa8\x0fY" "\x38\x42\x0f\x1e\x7fYv\\\x84\x9d\x03\xe2\xf0\xc0\x45\xb8\xc4\x43\xb4\x65s\"\x16\x1f\x41\xd4t\xf7\xd9\xa4\x9b{\xcb\xfe~%'sy\xa6" ";{J\x9f\xef\xeb\xc8\xb5\xe4\xb6\xc1\x9e\x85j\xf2\xc8\xd9\x89\xddn\x8b\x8f\xd6\xc2\x18\xcb\x88\xc1\xb6\x88s&\xd9\x9c\xad\xf2\x90l\x90\x03" "\x32\xd2/\xc3\x02\x92\x88\x66\x41\xda\x8c,\x15-\xec\x8d\xa6\xec:\x63\xdf\x9b\xc5\xb4\xe4|\xcez[\x35\x8d\xe1o!+T\xfb\x06W\xd6" "\?m\x61\xc5\xbb\x91\xadi\x0b\xf6\\\x63|WM\x7fO\xb0XT\x12\xf6\xbaN\x36\x16\"\xce\x11\xde\xdb\x45l\xb6!\xda\xfe\x05y\xeb" "L\x9e&\xf1\xcf<\xdd\x19x\xc2\x46l\x91#'\xdf=\x83\x83\x18\xff\xe6W\x1c\xe3\xa8\x86\x45\xc2&\xb2\"k\xb1\x87/\xe4\xe9\x34X" "\x42\xcf\xc5\xf4\xe9Hn\x0f\xcb\xe4\xffM\x08\x13h\xff\xb7\xe4\x64\xd2H\x9a\xe5\xf4~\x1a\xfb\x16\x32\xffs\xd4\xf7\xdd\x7f\xd2t/\x93\xef" "\xae\xfc\x18Vt\xfb\x63\xb6S\xcd];\xeb\xae\x36\x1a\x1f\xda'\xf6U\xe4\x8b@\xad\xd6\x82w\xbe\x11\x81%T\xfcp\xc2\xfa)\x62\xf5" "\x94= \x8a\xfc\x90\xa9\xa9\rm\x30\xcd\xb6\xcf\x65\xcc\x9bK\x46\x44\x45\xd1\x0ex\x1b\x87U\xe7\xba\xc8Ww\xc8;\xf5,\?\xfaN[" "|\xcb\xc7\x65\xecH(\x62\x83W\xb3U\xd8\x42s\x9d\x36\x86\x15\x8b\xa2\xb5\xef\x9c\xe1\xbe\x1f\x98\xd4\xb9\x44\x64\\\x15y\x45/\x91\xf2*" "\x42\xb7\x1f\xdak\xc8\x1ci\xe1\?\xe6\x98hV\x8d\x45\xaa\xcb|z\x66\x8e\x0c\xae\x9c\xc9u\x35-}\xe5\xb5\xe8\xd9\x35\xf9\x66\xb0\xbc\xd1" "\xb5\xdc\x91\xaa\xa1\x91hq\\\xaa\xf4O\x18\x91X\x85\xc3}\xa7\xba\x1f\xdc\xec\x06\xad[O\x0e\xa5P\xd4\xe3\x83#\xe9\xc4\xc0\xcbJ\xfe" "\x32\xdav\xca\x35\xb0\xbf\x82j\xe7\xf1\xf1n\xfa~\xee\x1a\x1bo\x11\x97\xac\xdbZ\xa1\xe4}\xdf\xe5K\xf0\xf7\x1d\x16\x81\xe5\x8b\xdf\xf7\xdd" "\x7f\x8b\xe4w\xd7\xc9vY\x45vIL\xfc\xe7\x0f\x1aG\xc8,\x87\xd0\x42_\xcd\xb4\xfa\x34\x8e\x8e\\\xcb&\xb3\xe4\xea\x0c\x9ag\xec\xcf" "\x45(;\?\x91S\xea\xfdtq\xe6Z\xaa\x11\xc2\xa7\x39\x8d\xdd\x91\x16\x07u-m$\x31`UQ\x1a\x36\xecgi\x1a\x02\x84\x98\x88" "]\x08\x44\\\xe1X,\xf5\x36\xea\x8e|\x15\xd7\x16\xe0\x36j\x36\xb8\xe9\x0b\xd1\x06(\x83\xd5Z\xb4\n\xaa\x9d\xa4Z\xd6\xff/\x87\x41\xeb" "\xbc\xc2\x35\t\xda\xf7$>\xeb\xe6\xff\xec\t\xd2H!\x92+\x92g\x17I\xa9\xf4\x9f\xe4\xf4\xf7\x82\xe2\x9b\xe7VR]Y\x9f#\xcai" "\x1a\xbd`\xfe\x99L\xaa\xeb\xb3m\xaf\x98\xf1\x97\xf4\xa6\x88\x99\xca\x7f\x13\x34V\xea>\xafr\xce\?\xa3\x31o\x61~LXg\xfa\xd5}" "\xb8\xf4-\x1a\x1fL\xdc\x1a\xe5\xb2\x1c\x9f\xb6\xe0\x16\x66\xd4\xd3\x7f\xa2^L\xee\x9a\xc9\xf7\x02\xe1\xd3\x44\xbb\xe7\x31\xad\x62\xfa\xbet\x11\xd3" "\x19*\xfe\xe8*\xd3n\xf1_\x8d#\xd7\x96\xd7\x04\x1c\xfa*u\x12\xef\x93\xa7\x1c=\x38\xe5\xdb\xa7\x38\x01\?\xae\x9d:(\x98\xf1\xed\xf8" "Q\x1fsL&\x43\xe4\x37 \xa2\xdc\xf7z\xbf\xea\x1a\xfc\xb0\x44\x64\xcb\xa2\x66p\xff\xd9\xa7s\x94\xfe\xd6s-\nV\x87)\xf9\xacS" "^\xda\"\xd0\x18\xc3\xba\r\xd3t\xcb%\x0c\xd0\x44\x63q\x9c\xa1\xb9J\xe6\xabp\xbd\x05\x7f\xf0\x83\x8c\xe0\x90\xbe\x85\xe5\x8e\x46\?T\x44" "\xc4^\x15q\x0f%\x16\xb3@\xca\xb9\xb7\x1c\x10m|\xf5\x8a\x84\xa3wg\xfe\xfcG\xef\x1c\xc0\xb4\xd2s\xb4\x03\x32\xb8\x84\xc3\xb1\x88\x37" "\xbb\xec\xfe\xaa\xe8\x45\x1e\x0bK\x94\x97N\xaf\x1e\xbd\xd1\x31\x83\xeb&\xac\xaa%x_\xc2\x1b\x15\x0e \x82\xb6i" "\xb9~W\xd0\xbc\xcf\xc3\xfe\xbb\x32\x1b\xbe{U\x83`\x41\xc6\xf5\x19\x32\x1d\x13,\x46\xac\xfd\x11\xf1\x0e_\rv)\x12\xf6\xad\x83\xd1\xa6" "\xf9\xa8M\xab\x45\x9b\xfd\xdf\x36\x16\x7f\nm\xfb\x1c\x63|\xb8@\x44<\xd1`/m\xc3\xbb\xcc\xf8\xb7\x90s\xbd%\xf5\xa3\xacZ\xd7\xff" "\x8b\xaf\xc9\xc7\x02\xbey\xf6\xf7\x9c\xf8\xbf\x7f\xeb\x82\xe6\xc8\"\x34/\xd0J\x9b\x95|\x1b.\xbe\xca\x37\xa7\x1a\xffz'\xae%\x95\x13\x44" "\x37\x10\xcd\x42\x16\x0b\xd1[i\xb3rk\xc3\x8f\xb6\xd2\xce\xcc\xc9Xh;\xc0W\xdaX\x41Ty\xa4\xa9\xfb\x31\xae\xac@XM\x1e\x39" "\xae~T\xab\x31N\xf1\x18\xcf\xb6\xd7\xbd\xf1z\xeb\x38\xd3\xb9U\x1e\x66\xb1@*\x8fI\xeb\x95\x9csh\xf8\x88\xe8\x7f\x95G\xf8\x0f\x08" "\xcd\xd1\x45\x88\xc1\xd2\xa3m\x9f\x37\x83\xb8\xb0\x07w\xdb\xd7#-\x97\x8f\xd9\xb0\x0e\xa2\x12y\xc4\xd6\xa0\x46\xbf\xcfl\x35w&\x97'\xf2" "/hW\xef\x1c\xe7\x31\xac\x9a\xd0\xe2;\x61\xbd'\x8a<\x36\xa4\xe9\xc2\xdd\xc7\x97\xb4\x0b\x31\xea{\xc1\x84\xbd\x32r\xc6\xab\x42\xfc\xf3\x94" "\xd3\xd6\xef\xbb\xd0~\xea \x32T\xc9\x9e\x9e\x8ap\x83\xa8\xbc`\x0f\x03!\x46@\xf4\x9f\x31r\xa4n\xa2Umqk\?$\xf0L\x66" "\xb8\xef\xb8\x88Y/\x13\xc3N\x7f\xa6!\x08\xbe\x8a/\xa4\x8f=^\xf8\x9e_\x10\x16Xx|\xc0n\xea\x0b\x16))\x91M\xb4\xfe)" "i\xe4\x31\xd1\x82\x8b\x98\xa8=\x9e\x8d\x86X\x16\xd0,\xce\x93\x11\x93\x94.\x86\xbb\x80\x66\x9e\x30\xa2\xd9z\x0c\xe1-\x9f\xe0v\xa4\xf1_" "mQ\x85hO;\xf1\xd1\x0e\xbfJ\xd5\xb2\xddq\xbcw\x0e\xcd\xf6\x02V.\x9dpw\xaf\x30\x34\x61\x45\x43\x13\xd2\x0e\xfd\"\x63Z\xa7" "\x16\x81%o\x16\xb3\r\xca\xf8\x65\x0c\xf7,h\xab\x03\x96\x65\xd5\x92\xad\xaf\xdc\xdf\xd6\xaf\xc5\x8d\x86W\x8a`\xa6\xc6\xb8\xd2\xf3LU\xad" "\xb1\x84\xd7)\xb4\xf7\xabx\x87\xab\xed\x91\xb0\xb9\x41\xd5~\xc7q\xe1\xc8\xb5\xa4\x31\xc1Jw\xd3\x64\x80\x8f-\xd8LSW-\x18\x9bU" "\x93\nP\x07-\xb6\xdf\xb1&\xf0\x0f;\xc8Q/\xe0:'x\x1b\x92\xc2\x12\x66\xd3\x82\xb8\xcb\x03\x30i\xa8\xd4P\x1a\xbb\x37\xae\xd1\xa6" "\xa3\x62H=\xe0\xf3\x9d\xa0\x98\x63\xdb\t\x8f\xc5!\xec\x1c\xb0\t\xa6\x18\xfb\xde\x93\x92\xc0\xb2\xcdZ\xfd%Y\x9c\xc0-[\xc4\x1f\xab\xdc" "^\x10\xd2R\x88.\xcf\x8b\x9fK\xf8\xf7\xf3\xe3\xa2T\xe0\x9c\x35x\xf9\xf7\n\xaa\xf1\xe3R\xd1vV\x80\xc8K\xab\x18\xed\xe6\xff\xb0\xaa" "\xbb\xe8\x45\x00\x62\xees\x41\xc2\xba\xfb\xc1\xbe\xb9%\xd8:\x16\x88w\xdb\x41\x1c\x9ez\xe6\xaa\xf6\x11\x1e\"\xf9\xde\xc2\x1e-\xa6\x61\xd3\x17" "\x88\xf5\xbd \x46\x9dt\x31q-\xdb\xdd\xc9v^\xa1\xc1\x86\xf7\xa2[\x62\xfbs\x9c/\x9cR\x8e\xbc\xce\x11\xed_\xd1\xbf\xc2\xf4\xf6'" "\xf8\x66\x88\xd6\xe4\xbd\xbf\xe1=\xb0'\xf7\x92\xed\x34=\xffi\x16T\xb2\xff\xf2\x82=\xcb\x8c\xf1\xcf\x99\x8bp\xec\x84hn\xcc\x10\xaf:" "\x41\x94.\x15_\x89j\x1f\xdd\xa4\xf5\xfdoZ\xd6\xde\n\xe2\xf2l\xa3\x9d\x38\xd3w\x94\xcf\xec\xa0\xed\xb4\xa5\xe6\xbc\x9fg\xf9@v\xb0" "\x1c\x44\x35\xa6\x62N\xe2\xc5\xdf\xa1.m\xf0K\x0e\x0f\xc2N\xe4\xa6I_#>\xc2[\x83\xe7\xab\xd0\x1f\xfa\xf7\x8d\xe4\xe9\x96\xbbN\xb5" "\xf0\x9f\xe2\xe1i\x02T\xc6\x83R\xb2\xad\xbb\x1c\xc1\xb9\xd2\xd2\x38\xc5\xa7\xa2\xdf\xce\xba\x8e\xf3\xad\x9b(Q\xde\xb6\x08\xb5\x42\x64\x45\xf5\xff" "\xfd\xd8\xd5\x19\xf4T\xf9\xec\xe4\xb8[\x45~\xa5\x0c\x89j\xb4u\xed\xc7\x39M\x86\xde\x92 m {\x18=\x36^\xbdxo\x02\xa2\x87" "\xd9\x63\x33\xd5\xdb\x64]o\x93\x1d=\x36\x18J\xd6k=\xb6\x1d\xbd\xf8\xf4\x13|\xd9\x06\xdf\x9f\x9c\xd9\xe4\x1bK\x8fL\xc3\xc2\x05\x11Q" "m\xf7\xe2\x99\xd5\xf7\xbd\x64\x07'\xe4x\xbf\x87\xb8|\xc6\xf8\xa7\xc5:\xb8\xc7\x99\x61\xc6\xf7\x34\xc2\xfb\x45\xc4\x43\xafl{\x9c\xcf\xedq" "n\xae\x97\xb4\xb7$\x13\xb2k\x9ey\xc0\xdfNK,\x13\xbdt\xff\xdcs\x00;\x35\t\x61\xecP\xfa\x33\xc2\x62\x13\x1c\xc7*\x8c\xa2)" "\x34\xcf(\x61\xf4\x98\xbb\x0e\x9c\xc4\xa4\x85\xc0\x30\xa5'\xe3\x87\xb0\xc5\x80i\x88\x12\x13\x9a\x90\x1eV\xc0Tz\x08\xe4lL&\x8b\x18m" "{\x8f=\xde\x1e\xb6\xb0\x11>\xde\x39\xfd\xb9\xd9\xf3\xa5\xdbk\x30\xc8)\xd5\xe4l\xbb\xba\xaa\xf6\xcav\xfbu\xd3_\xd8$]M\x42\xd2" "\xe8<>+\x65_\xf6\x31\xbf\x86h\xa7\x95\xd7\xb4|\x9d\xben\xfb/\xd2\xb3\xa7x\xaf\x9a\xed\\\xa6\xb6]\xb9$\x44\x9f\xba\xb4\x91\x1a" "\xb6!\xac\xf4u\x12\xbcq\x07\x17#\xd7\xe0\x12$\x9a\xf9\x32W\xfa\xbc\xf1>h\xe0\xfb" "@\xf8\x00!\xe6\xeb\x85\xe7 ,J\x1f\xf4z\xf9H\xd0\x08~`U]\xe5\x83\x93_\x1f\xd8N\xa5\x42\xff\xaf\xca\x07\x42\xf3\t_\xa5" "g\?\xc2\x1a\xa7\xca'=k>\xff\x16[\xecg~\xc2\x87N\xf9\x44\x43\xc8'+\xbcOz\xf8(\x37S\xc7\x9ft\x85\xf8\xa4U\x8e" "\xce\xf0\x46\xd6\xb4\x9fX\x61`\x8cg;\xec\x7f\xa8\x46\x9b\x0c]\xe6\x8d\x7fQM\n$;\x14H`X\x03h\xf0\xc0\x1f\x44!\x61\xd5" "\xa4\x41\x93\xda\xfa\xba\xe7Z\xbcw\x13\x44X\x63\x37\xee\xf8.\x06\x8f\x7fO\x90Ntx\x34\x1d\x02|\x07\xf1\xb8\x84\xa5\xdb\xd0\x06\x37X" "\xa8\x05m\x38\xa7-\xcc\x34\xdb\x9b\x11\xe2O\x44[\xc3';\x86\xb6\xc0\x0f\x1a\xcc\xb7&\x9e\xcf\x11\xd4\n\xda\xc5u\xbc\xb7\x08\xda\xe5\x08" "\xebw\xa1\xd5\x37\?\x82\x31\xd3\xc4\x97vV\xdbh\xa8'\?\xad\x33s\xafM\xde\xe6\x91\x91@{\xb7%\x44\xaflpU\xe3G\xf5\x89" "\x0eL\xeewYq\xc2\xda\xc0\xb4\xe3p\x17\xd9\xf3\x63r\xbe\xc4J\r$|\xed\xb2\xb7\xa7\x1aV\xe8\x41\x44[/\xe2g\xfaP\x93\x7f" "\xd0\xee\x0b\x9c\x39\xfe\xd4\x30\xdc\x18p|\xc6\xcf\xe7\x1c\x36}\xb2\xb5S\x86\x17\xfa\xdd\r\xcf\x88\xf6\x44\x19\x87\x01\xa6j\xd9\xc3{\xb6\x42" "\xc1\x8d\x7f\xe7N\xf5\xb6\xb6]\xec\x45[\x15\x9c\xf9\x62\xbb*\xa4\xbbO\x88\xb9\x62ZV\r\x9a|\x8cYw\x95|\x0e\xa0\xa1\xff\xfe\x89" "H\xfe\x46\xcf\x16\x36\x9eJ\xf6v\?\xe5\x63\xca\x0e\xc7\xfeI\x61\x85\xb4\xf0\x05\x85\x06q\x95\x84,\xe9\xba\x65\xd3O'\xb3 \xd0\x92[" "\x05\x94\xa0\xb4x\xa1\x9b\x33\xa3\xf1\xfaL\xafPJ=#\xb1G\x8cp\x32t\xea\x06H,}\x9c\xc5\xfe\xd4}\xe5\xeb-\x44Kp\x8d" "\x35\xe7'\xc2\xdf\x18\x31\x0f\x1c\x34\x1d\xc4\"g\xb1\x89\x91\x31\x04\x45\x87vT\xf3\xa7\x12\x8d~\x86&\x46\xad\x34\xe2\x05\xa2~.s\xd7" "[\x15r\xe6\x94\xde%\"Z\x88\x86\xce\xce\xe7\xbaQt\xe6.\x88}\x0f\x85p\xd3Y\xa9\xe7\xe3\xac#\xe3\xc6\x9c\x46W\x82\x95\x99\x32" "\x1a\xac\x31W\xf0\xe2\xa0\x39\x89ZRk\x43\xc3\x43\xae\xe2\xad\x65r\xdb\xc4N\xe5\xa2\x61\x04\xb9\xe2\xf4\xeb\xca\x62\xb4\x1f\xb1\xcf\xb8\n\x81" "\xbeM\xcc^\xb6\xd8\x30\xa8\xb6~\xe3\x1fP\xb8\x94\xf2\x99\xc6\xa8\x9bWZ\xa1\xfc>\xd0Gt\x45\xef\xc6\x15g\x1a\x95\xf1\x8a\x61\xb7]" "\x0b\xa7\xc6\xc4\xc5\xca< \xc3\x93\xb1\x85Y\xc9\xf0\?mM\xd2\xfe\x1c\x1a*\xf6\x15\xd6\x01\x08\x61@[q(\xbe\x92N\xe3\xfa\xf5\x04" "\x0b\x1b\x45+o\xc9\x01\xd8n\x41\xb4\xfa\x11\xd9\x8a\x8f\x0e\xd6m\xdc\x61\x32\xa8\xa8\xb3\x13\x1cOVl\x0fW\x34\xa6\xad\xd2\xdd\x11\xd8\xfb" "\xd6{\xc3\x08\x8f\x1a=\xf5V\x1c#\xad\xb0\x61W\x65\xb5\xb6\xdd\xb9\x85p\xbeZI\x13\xados\x0f\x39\x41\x0f\xd8\x95:&\x34*p" "\xbf\xac\x16\xe2\xbdQz\xbd\x88m\x12[\xb5\tX\xaaK\r\x99L\xf7`\xd0\xd7\x84\x1eX-\x38uS\x15k\x83\xaa\x0c=$l\x44" "\xcex<\xc6x\xcd\x34,\x38\xad\x16t\xa2\xeby\x1f\x9f\xafh\xb7\xdc\xd7R\x44\xb3\xbe\xcaI-\xcb\x8c\xf1\xd1\x15\xcc\xea\xd0:\xcf\xb0" "\x34T\x0bYy\x00[\xae\x88\xfc\xd9\xbap\xc8\x33\x15\x11\xedKh\x43\x96j\x31\xdeoi`\x1bkVU\xfb \?\xc1\n\xd3\xa5\x8d" "\xe9\xdc$[/\xd0\xac\xc5\xad\xaa\x1f\x66\xb2s\x80\xae\x88j\x38\x33\x42X\x18\xa5\x7f\x10[\xe0\xd5j\x11\xde\xda\xc2\xda\x89S[\xe0\xea" "\x1e\xb4s\xdd+\x0b\xdb\x35\x8av\xc1\x63.\x1e\xc0\xcbz\xf2>\x8f\x97\xb8\x0e\xac\x14\x42\xb3RT\x8bi\xad\xe1\xd4\xfd\xe6\xf8\x1b\xd1r" "WW\xed\x63\t\x1b\xbeh\xe7\xdfY\xeb!~*\x42\xb3=Q\xaa\x45\x34JJ\xab\xad\xcc\x13\xb3Z\x84/\x8bQ\x63\xd0\xd9R\xadj" "YGl{S\xf4\xf1\x44\xb3\x9d\xfft\xa2\xb3\xe1\x94\x93\x30\xa7\xcb\x08\xdb%\x94\x7f\xd2N\xff\x30u\x43\x94\xd3j\x15S\xc7\x42\x9bM" "\xafV\xd1u\xacr\xe6]\xd8o\x81V\xc9*\xad\x30\x1c\xb3p\x1cg{\x15'\xec\xda\xd5ST\x1f\x42\xb3\x1a\n\xcdw\xb3z*\xff" "\xd0\x61\x15\xd1\x9c\x17l\x43\x0c\xe9(!\xbe\xbeh/\xd2\xc5\x9e\x42\x8c\xee\x8c\xf0\xa7\x14VN@k\x99\x84\xba-\xeb\x03\x0b\xed\x46\xc3" "\xec\x82$X\x87[h\xbe\xec\xea\?q\r\xda\x97\\=\xc5\x1e\x04\x46L)\x99\xc8\x97q\x8aI+\x63\xf6\xd8\xc1\xd4\xa4h\x8b\t\xbf" "<\x15u\x34\xc3\xabg\xbb\x97\xa8\x89\xaa\xa7k\xebo\tmi\x81\xd0L\xce\xc6\x64\xe7-\x9e\xe8x\xa5z\tO\xd5\xea\x15\xec\xcd\xd5" "+\x44\x8d\x15\xdaV\x8a\xc6\xd8\x1b\xd0" "\x96w\xf1\xea\x00\x95i\xd0\x96\xb8\x9e\x34\x8ap\x84\x12\xb1\x84\x42\x9c\xf1\xeb\x43=\xab<\x05Op\xa9\xac~\xe4L\xbb\x33\xb4k\xa2]" "\xe3\xdb\x44\xd8|\x63\xfa|\xe0\x1fJ\xf6P%y\xd4\xc3\xd8\x19v\x0e\x14\xcd\xef\xe4q/\x04\x9f\x37-i\x1e\xfbG#\x1a\xe6\x8c!" "\x32\xdbT\x64\x0e\x89\x08\x83\xad\x8a\xe4\x08_J\x36~\x45G_\xc4\xafs\xf2\xdb\t\xffJ\x11\xa3\xbe\xd3\xbf[\x8cu\x84+\xe4(\x06" "u\xc2\x1d\x14\x02xS\x19\xfd\x02\x30\x0c\tOQ\xbc\xd7g(\xc8h@\x85u|\xf9\xeb\xe6)\xdc#\x44\xb4\xb0\x14\xca\xc8\xf3m\xbd" "\xbc\x86\xc5\xa5\xb6\x8f\x15\xac\xb5}\xf9\xe7\xd4\xf5\n\x16-\xcf\xb4xu\x1d\xdb\xbe \"\xe2\x95\xed\x07}u-\x03J\xd8\x65j\xfbi" "\xad\tZ\x84\xf2\xda\xfez\xdb\xbe\xbcR\xdc\x9d\x38\xd1'\xab\x95\xa4\xb4\xf3\x83\xa0(\x97\xfc\x9b\x37\xf1\x7f<\x9f\xe8&\x02'\xbf\xf9\xbf" "\xe3\xa5Q\x43\xdc\xb9Z\x89<\xc0\x9e#\x35\xe9G\x1f;u\x00`\xc3u\xd3\x42T\x36\xd3\xb2\x9a}$G\xe9\xd9\xadS\xd7(\xefX" "=s,\xc7\x18\x11\x0c\xa5v\xcc\xc7\xbbX\?]\x82o\x43]\x0bW\xb0\n\xfd\x92\x15\xfb%\x46\xd5\xc6\xbfy\r\xfd\x04\xd3\xe2\xefq" "NK>\xdb\x08\xd5\x62Z\xba=J\x0bo\xd0l\x9a\xc1\x98K\xd5urr\x98\x85\xb3\x14m\x7f\x01\x16#\xfb[\x17\x9am] \xb4" "yH\xa1-n\x14\x9a)\xd1\x88\x85\"&\xb2\x90_\x62\xc5\x94\xf0\xa1\x00\xda\xf6\?\xc2\xa7}'\x82\x04\x42<\xdb\x0e\xa2y\x17\x41\x9c" "\x95\\\x84\xcb\xae\x89Y\xe9\x0e\xc6\xeb\x1a\xc7\xbc\xca'\xe7\xdf\xaa\xad\xbb-\xda@\xc9\x12\x42<\x0bh\xbe\xf2\x05\x9a\x85\xd4\x86\xaf\x12\x12" "j\x97\x41t\xe7\xce\x9c\x06\xcf\x1e&\\\xe5\x0f>.\xb1U\x32\xcd\x9f\x46\x44\x1b\x87\x41t'\xf9\x9c\x06\xfb\xbd' \x02$\x34\x7ft" "\x11\xdd;\x07Z\xee\x16~\xe6\x88&\x01\xcd\x43\x88\x9b\x86)\x1e\x17\xe1\xb5\x06\xadt\x1c^\xa8jW\x39\x31\xbc\x61\xd7\x92\xc7-\xf5\x1c" "\x41\x65\xc5\x64\x19\x05\xe4\xee:\xb9\x9c\xeb\xb4\xf3\xe6\xa6\xc2>\x32\x39M\xbd\x8dl\xad\x63.m}\xf5\x81\x99%\xa4\r\xcf\x33\x8f\xee\x80" "\x04i\xdf.\xeb\x41[mi\x90\xf3\xcdy\x43)\x13\xf1\xe5S\x86\n\xb9\xe7M\xdf\x9e\x30\x98\x81\xf6\xb9\x08\xa2\xfb\xb1\x98\x96\xedtY" "\x37\x9b\x66\xb6(\x88\xa5W\xb8i\x99\x86%\x61\x10/\xb6\x82\xf8\xcf\xdd\xafo\xb7\x92\xd1s\xc8}\xf3>Uv\x9dX*\x01q\xbc\xe5" "\x62\xc8\xc6\xf9GR*\xe9wxX\x8em[\x8e\x1a\x83\xce\tm\xdc#\\\xe2\x89\xbc\x94\x61\xc0%\x34+\x8aQ\xeb\x82\xa3*\xb5\x89" "SR\xd7\r\x94\xc1\xe4\x92\x7f\xadw\x9d\x16:\x1eY\x99\xf0\x1b\x92\x17\x9e\\<\x42\x1c\xe1\xd9\x83'|\xed\x12\x33\xdb\x42\xbe\x9c\xb4\x8e" "o\x18\xe1\xef\x8di\xb1\xe0\x19\xab\xda\x12\xd9\x84\x9d\x93\x85\x1f\xaf\xce\x64\x8c\xcf\x32\x8d:\xce\xdc\x37\x02\x33M\xedR\xde\x13\xb8{\xe6\xf4" "\x97\x9d\xed\x1d'\xb7\xbf\x9aq\xdd;\xac\x0e\x90\xb4\x06^\x1d\xdb\x64%\x16@\xd7\x18\rO\x38\xe1!h\x30/\xb1\x88\xafv)\xa3\x00" "\xf8\xc4\x8bx\xdd!{N\xcd\xde\x0e^\xc2\xfa\x66\xdf\t\x83\xa3\x88\x8d\xa9\xd6\xbe\xccw\xecU#|\xad\x39\x61@\x80\x88\x1a\xae\xce\xaa" "\xbd\xae\x03\x1f\xd4\x8eu\xf8\x31(\xdftK\xae\xda\x42\xf7\xfc\xf1\x05;H\x8e\x9e\x93\x66\x41\x03;]\x9d\x61\xf6\x8b\xc9:\x8f\x0bwH" "\x44\x39\xb2\xe4x\x9f!\x42\xa1\xe5\xbc\xcf\x90p\xc2iRh\x17\xfbj\xd9\x9a\xe9.\x08\xf9_\xd9\x62\x30\xe9\x8b\x66;\x1f\x1c^l\x92" "\x65\x90\x95|~\xe2\x37\x9b\xbf,\x35\xae\x0e*zK\x08#\x10\xd3:\x97:\x46\x1e\xbe\xff\xfb`\xff\xa3Y\x41\xf8oZ\x14\xfd\xf7\x46" "\x66%\x9d\xf6\xf9\xf7P\xe9\x45\x9e\xbe\x87%L\x96\x06\xcb\xd7\xff\xa4\xd5\xbb\xb9\x0c\x08\xeb\xbc\xa1]\xdf\xe4\xffv\x9d\xcf\xaa\xa4\xd9\x86\xbd" "\r\xda]\xfd\?\x37\x9b\xb4\x66\xa8\xe8\x10\x94(\xf7\xaa\x92\xb1\xba\xae\x85}\x94tW\xcb\xeb\x63]p~\x34\xf3\x43\xd2\x42g=\x0bo" "I\x9d\xee\xbev\xff\xbd\xf1\xb4\xb6\x62\x97\xc5\xb4\xc3\x61z\\\x90\xae[vw\xf0\xef\xbb\xe0Z\xae\x7fnM\xdd\xf5~\xc7\xffs\xbe\xf3" "/\x8d\x1b\x89\x16\xd9\x12\x9eO\x92\xca\xd6\xff\xfc\xd0\x96\xba@|{\x43\xb1\xe5\xab\xfc\xe7\x64\xd2\x42g\xf3\xd2\xff\xa6\xbdJ\x1f\xe8\xff\x96" "\xa6\xf5m\xa7\xf7\xef\x95\xb2r\x94_\x96\x86\x34\xdb\xe5\x83\xe2{\xf6\xf2\?\x37\xc7\xb4\x7f~\xa2\x9d\xd4\xf9$\xf7\xde\x10\xd4\x15\xa2g\xb0" "\xad\x98\x35\x86\x42\xba\x38\x0b\xe2\xcf\xb1\x13s\x45&J\x33\x88\x08.\xa2\x99#\x9epiuR\x1d[Q\x1b\xfd\x1c\xf1\xfe\x05V\xb7\xa9" "\xf8\x46\x8e\x92I\x15\x62\x11'\x8a\x0f\xb8\x33\x85\x8am]~\xd2\xec\x62\x9d\xca\xbf\tl^\xea\xbauK\xf4\xc4\x1ej\x9d\xf5P=>" "\xba\x8f;\x63\xd8\xfcU\xfb\x00O^\xc0\xc6]\xfc{\x8a H\xaa\xfd:u_\xd5=\xde\x87\x45\xf3\x16\xde\x9f;\xff\xe6Lj\x9f;" "\xc3\xb3\xb5\xaf\x9c!\x89u\x19\x16\x64\x1a\x39\x14\x33\xb1\xbb\nO\xee\x9a\x46K\x88\x9e\x64\\\x9e\xda.\x0c\xfa\x17|\x85\xf1\xcbvx\xdc" "\x41\xd9\x99\\\x0f\x92\x8b'jUg\xdc\xd0p\x34\xd2\xa6\x62\x95\x9d\xa4\rO\x61\xa4\x13q|\x41\x0e\x9d\xe1n\xc7\x43\x44\x14\x33\x11\x61" "\x89U\x1c;\x11(P\xc4\x8f\x06\xc9w\xf2\x81\xcf\x15\xcb\x30\x8c\xe1%\xd8\x17\x07q\xb6\x13\xae\x84.]\x1d{\x9a\x08\x97[\xa4\xf5\x16" "\xebIi\xc2\x81>\x45\xff!\xed\x1c\xf5\xa4r\xe1\x0c\x7f\x42\x33\xac\xfc\x9b\x15\x12\x98\x62T\xd3\x1d\x13\xae\xee\xe3\xe1\x8f~\x63\xee\x99o" "\x7f\xc9\x1d\xe4O\x0b\xcf\x02\xa3W**\xb2\x64\x8b\x98\xab\xc0U\x0b\x8d\xf4\x46\xcb\xd5_\xeaJ\x38:\xd1Hr\x9b\xefS\xd2\xfc\xf3\x15" "q\xbd\x13R\xd7\x0f\xfb\xf0\xb9\x17\xad\x81\xc2\x8a\xf0\xf2\xc6\xf5\xc7-\xc4\xbbm\xa7\x17S\x15\x61SQ\x31<\xd4\xddv\xba_\t\x62\xf5" "\x98\x62\xdd\x19\x1e\xe3~\x92\x15P\xaa\x11\xb3\x43\xf8\xf6\xec\x0c\xb9\xf0\xf6\xccz+\xf7x\xe6\x62$\x1c\xf3\x46\xc6\xbc\xf4\x18_\x93\x97n" "-\xd7\xac\x31 \xae\xaf\xb6\\\x0b\xd1\xfd\xa1\x8d&^\x36\x44\x63\x87U\xc5\xf5\xf5\xfe\xe6\x14\xcb\xec\xee\x33\xbb\x63\xa8,I\xf8\x62\x96\xc0" "\x10\xa0\xccJ\xa3\xb5\xe7\xc3\xd7\x37\x1c\xf2\x44\x9c\xf5\xfc\x33\xc0\xde\xa1\xc6\xf0\xea\xe7\x97!KV\xf8H\xd3\xbdN|P\xcfV\xc8;\x44" "\xc5\x17\x96\xc6N\xf5\xbe\xdc\x43\x43\x91Vw\x41\x8ct\xeb\xe9%\x1a\xfd\xf4\x01\xe5\x83\xe6\xa3:\x82\xd4+WN\xafT\xfe\xfd\xf2\xd3\x08" "\x85.]\x1e:i\x0cV\x31\x99\xa0\x88\xc0qUX\x45\xdd\x9d\x1d|\xfb\x1d\x65\x87\xe3\xac\xf6\xf5\x7f\n\x0b\xa9;t\xd9lY\xfdZ" "\xff~\x9e\xbc\x1e\xe1h[\x88\x32\x81\x19\r\xe1\x14\xc5\x86v`\x65\"\x65\x13\x03\xccz\xb6\xbcXo\xed$\xdd\x1bj\xd7\x9a\x43\xcb\x0b" "j\xbc\xf2r\xee\xa4\x61\xa8\xae\xbb\xa1>\x9f\xfc-.\xff\xd5\xc2\xbd\xc0\x64\xa0\x94\x12\x91\xbe\xe3\x30yq\x1a\xbe\x84\x45p\xbd\x83\x36w" "\r{\x80\x8f\xbd\x94\xb9\xafR\x34]\x15|\xf4\x0e\xdfV$\xcc\x97\x10\xf9\xaa\x35\xd4:k:\x11\x93\x45\xfb\x7fV\x8aIr\xfd\xc5\xe9" "oG\x44]\xdbv\x8a\x16t\xdd\xbcs\xfa\xab\x80\xfb\x88\x31}\x1e!Z\x86h\xe6Y.\xd4\xcf\x1b\xd9\x03\x1fI\x61\xefm]\xaci" "\xe4\x03\x36n\xf9\x84\xb0\xf2O\x92\xdf\x8f\xc0\x08\xe5\x18\x01S\x8d\xac\xe1\xaf\x99\xcd\xd7|K\xcd\xd8\xe2%\xb0\x0f\xdd\xe4\x85\x9bp\xfe\x14" "\xa2\xbah\xf2\xc3P\x62\tR\xad\xc5\xcc\xe6\xa6\xf6\x35\xae$\x36=\xad\xbe\xc5{\xdf\x39\x8d\x1f\x46K\xc6\x36\"&\x97\xd6\x97o\xad\xb7" "\x8b!\xf8s\xad\xfd\xb7\x92/\xf0\x10\x8b\xe8jm\xedN\?\xed\xd0\x82\xd1N\xcaSg\xdaY\xa6/\xdf\xd0`K\xd2\x85w\x1a\x96\xcb" "\x9c\x66k\\R'\xfc\xb2\xbck\xa7\x03\xa4\xeb\x66\x99O;|\x9b\x8f\x1aY~\xc6-\x86\x44\x43\x66\xe8>\xbaj\x85;\xb6\n\xe1\x15" "\xbe}\xca/\x10\xf5\x8a\xf4\xbc\xbeu\x13\x13\xf3\x19\x13\xed\xfb\x01\x9c\r@s=\x31\xae\x1b\xfb\x08\xbeR{Ml\x37I\xe1m\xf3\xef" "\xa7\x82Mij\xaf\x34\x34\xbf\xc2\x81Xx\xff\xa9\xfb:!G_S\x8b\x14,\xecY.\xbc\x66h\x18^\x33\x19\xba\xcc\xab\x88\x12X" "{\x65\xc3\xf0JS\x18\xe7\x92k\x03x\x36\t\xcdy\xa4\x36\xe7+\x9e#\xee\x9dpo\x0eW%\x11\xcd\?\xc2\xa8\x97\xaf\x16]\xd3\xff" "\x9f\x82\xa6\x61\xeb~_\x93\xad\xad\xf4\xf4\x39\xde\x9b\xc2\x03\x03\x7f\xb9-\xc3\x31\\\x35\xbb\xd9\xb9~Z\xe3\xcf\x64r\x07\r\x43\xeey\xb6" "\x65\x37;\xc7v\x85\x42_Z\x0b\xf1\xe0\x02\x8b\xa6k\x11\xc7y\x11\xfc[\x8cX\xbe\\\xd3v\x85#\x83\x88\xd3\x42\x11\xad\x33Jm@" "GG\xd8\x87\x10\t\?[.\xb2\x13\x17\x61\xb6W\xd9wr\x33\xc9\xc2^\xbc\xff\x15\xd2\xcc\xb3\xc1\xc4x\x38\xc7\x46\xe7\xa6\x65\xbf\x1a\xf4" ".\xfd\x39\x83o\xb4\xa4\xa1JQ\x9a\x1f^\x15\xda!/\x07\xcbJ\x44\xf3^\x84\xd8+\xc2\xfb{\xa7\xda\x03\x61lT\x8d\x63u\x15\xd3" "\xc5\x11\x0b\xf2\x46\x63\x07\xc1\x12~O\xd2\xc5mN\x63U\xbc\xd1\xc2\x8e\xc5\x96\x86\xba\x0b\x9a\x05\xf1R^\x82\x16\xc9\xa3\xa6\x1b\x80\"\x38" "\x80\x88\x83\xa2\xeel\x36\xe3\x83\x8f\x99\x91\x63{\xa7\x11&\xff\x8dl\x98\xa3\xa4\x8e'\x43<\x1e!\xda}\xee\xab)\x44\x31\x88\xfcU\"" "\x32H-\xca\x06\x03\x9a'#\x9a\xd7#,\x90\x10\x62p\xa9\xa4\x65>\xe2`%Z\xdf\xd8\x1d\xdbV\x95\x16\xe2K\xc5\x33\x10\xb5\xdd\xe2" "\xef\xa7\x83\x05W\xb5\x05|\x34\x8c\xc1\x37\xc1\x34\x9a\x16\x16X\xda\x1bv\xbc\xb6\x04\x16\xb4\x05g'\x17\xd8\x01\x44h\xee\x81\x42\xf3n\x13" "\xa2\xeb\xba\xf0\xfb\xe0+R\xb2$\x43<\x63m\x07\xcd\x07\x9d\xaa\xc5\x07\x37\xe1\x64\xa2\xe5\xc4\xcd/\xb4\x32\x95\xb1\xe9\xe6\xdc\xc9\xe3\x16\xcd" "%\x1b\x8d\xdd\xa2\xc5\xc6\x8e\xb7\xd8\x0c\xf0\x16\x88\xd3\xa2\xe4Y\xcd\x1d\xc4\xe3N\x0b\x61\x33[$\x65\x1cG\x8b\x9d\x32\x97kp\x30\x16^" "\x92R\x03_\x9c\xc4\?xR\x96\xb7\x05\x96M\x08Q\xe2\x94\x1a\x07\xf3\"\xa4z\x46\xc3g\x41\x08\x43\xd9\xc2_\x19\r\x66J\x0b`\xb7" "\x17\xb4\xdf\x33V\x7f\xd4\xe0\x9e\x03m\xd5\x8c\xb7\xbb\x39\x8d\xf6(\xd5\xa4\x87\x1f\xae!\xda\xf5K\xf2\x30rM\x9e\x30\xdc\xc7\xa5t\xca\x8e" "\xe0\xce\x00mq\xe4\xf9,\x1am\x61*\xb2\xef\xb8\xe0\xa4\xe2\x02\x1e\xcf\x42s\x36\x36nz\xf4\xa6\xc9k\x42\xad\x1b\x9e\x9e\xf6h\x33[" "I\x1d\xf5\xb4\x08\xda\xe6nU\xbb\xd8\xe7\x14\xafi<\xa5nj\xcd\xdb\x61\x1b\xbd\xe0\xab^\"\x36Nm\x89\x45\x01\xb5\x15'\x64V\xac" "\x86\x94\x7f\xab\x36\x44\xd4\x05\xab\xf8w\x9c\xc9\x18\x04\xf6\xd3\x15m\x00\xab\xe4\xd2:\xfb+N\x06\xae\xb0x\xdb\x98H\xfb\xcd\xa3\x45[\x9f" "o!@-\xb4\x9b\x63\xfc\xed`\x1b\x01\x13\x8d\x7f\xb3\xd7 Z\x0f\xc2\x44\x44\xc9\x82h\x9f\x12\xc4q\xe5oV\xd6\xef\x64\xef\x05\xf5\x83" "%\xa3\x8f\x00\xd1\xfa'.\xfe-~]\x43=(\xa2\xad\x45\xd2\xa4\x82\xf3ov\x89\x8d\xda\xa8m\xc4p\?\x85\xe0\xb8\n\xcdL\x02\x10" "\xc3\xdd\x15\xe2\xf7s\xec\x12\xa3Z\xd1\x89\x06\xcb\xc4x\xaf\x1f\x1f\x14P\xa1Y\x42\xba\xddG\x8b\xe1\x1a\xbc\x46\xf0\xbb\xd9\xabNS-\xb6" "\xfe\xe6\xfeH\x65\xe7\xe6\x1e\xcb\x9b{,on\xa5\x0c\xeb\x34\x45\xcf\x9c\x32\xd6\xdd\x42\xb4\xd5\xa2&\x66K\xcf\x91\xf2\xfa\xfa\x8b\xe2\xc1\xba" "N\x8f\x03\xd5\xfcj\xff\xe4\xbbt\x0c\xf6t\xa1\x17\xb5\xc0|v\xaa\xb6\x11\xfdV\xe7\xcdp\xab\xf3\x66\xb8\xbf\xa8\xe6\x0c\xbf\x31\x31\xbcR" "\xd1\xfc\x0cQ-\x14\x10\x11\xad\xb1\x87x;\x82g)\x34\xbf\x8a\x88\x83~\x10-\xaa\x0e\x16\x94 \xe1g\xcb\xc5\xa4V\xc4\xa2\xb5\x9c\x96" "\x44\x85\xf4\xb2\x1d\xd2\x36\xa7\xcf\xdd\xb9\x88\x18\xc1@\xbb\xba\x87\xad\n\xda\xe6\xfe\xf3\x45\x32\xaa\xa1V\x83h\xed\x1f\x44\x7f\x33&\xc2\xcf\xdb" "\x34\x19\x64\x85\xcfG\x34\x19 m\xb4u\xf1$-\x87\xfc\x93\x61\x04\xbc\x1e\xa0\x99\xb9N\xc5sg\xfe\x15\xa9\x96\x17\xe3\xe3J\xd2\x9e&" "\xe5\x33\xf4\xb5\x91\x1c\xf2\xfd|\x93\xa7\xe7\xd8\x9f\xd0\xc4P\xde\xa2\x0f}\xa5V\x31\xab\xe6\?[\x39\xe5k\x88\xf7\n\xffj\x1aK\xaf\xf3" "\x1az.\xff\x8f\xbf\x84@j\xf2\xf7\x05\x33\xfeG\x43\xe4\xf0\xb3\x66q\xf8\xe5\xc3.W\xfe\xbdzI\xf1\xeb\n\x31\xc5\xa0\x62\x95|q" "\xca\xff\x18\x36\xab\xd6w\xe6\x32\xcc\xb4\x8d\xc8G\xd4O\x9b\x39\xa3\xe2\xc7v\x10Y\xb8\x44\xf4\xf2\"\xa2\x1a\"\xc7\x65\xd7\xb2\xd2[\xf2\xfe" "\x94\x95\xfdT\xef\xce\x7f.\xfb\xbe\xb9\xec\xfb\xe6\xb2\xef\xb9\x1c\x15M\x17\xdf\xdc\x7f\x62\xe9)\x12\x1a\xbf\x39\x31\xb9\xea\xa6\xcf\xd5\x90\x10\xee" "\xf8]:y\xd9p+h\xe1\xfe\xdf\xe5\xfe\xe1\xa3k\xda\xe6\x11\xde\xd3\x02W\xa5\x99\x16\xe2\xb8\xb9\x06_!\xd1\xf6\xdf\xb2\xbd\x8a\x7f\x03" "q\xb1\xe5\xcc}\xd9\xba\xc1\xaa_\xd1\xf6Z\x85\x37\x86h\xfc\xb2\x85\x88\xe4\xe8\xa2\xb7\x1f\xae\x15\xfe\xd1\xcay\x8d\x15\x13\x35V\x32\xae\x9d" "\xe7\xb4\xf0\xba\xa9\xbd\xe7\xb5\x83\xed\xbc\x66.\xa6\xa6\xa9\x85z\x15\xae\x1e\x37\x46p\xeb\x87\xd6\x39\x80\xff+\xb5\x9bl\xf4\x10\xb4\x41\x33\x9b" "|\x05m\xb5\x87u&\xa6%W\x87i{\x10\xb4\xcf\x17\x04K\x83\xb6h\xe7\xb4\xb4\x31\x83\xcf\xa5iYy\x14\x7f\xbf\x04m\xb5\xe7\xad" "\x89\x16\x8a\xe2\x41\xee\n\xaa=\x87\xac\xd5\xc5\x13{\xfc \xf8\xb9\x33_l\x9c\"<\xe6YO\xf0q\x85\xe7o\x34\x42\x99\x14\xd1\xcb\xa4" "\xd9\x90]\x0c%\xa6\x61\x01\xac-\x12\x8cj\x13\xad\x35l\x14\xa0\xda\?\x05\xb3\x85\x8aT\x32\xcc+\x8ep\xbe\xce\xb3\xceR\xee\xb1H\xdb" "\xa4\xab\x11~r\"\xbe\xd7\x9d\x18\x9c\xbb\xf8\x37\xbb\x85\x89\xd8\x13t\?\xc8\\\x42g\x92\x13\xb3\xbb\x08\x41\xfd\x91\xc0jV\xc7\x41w\xd3" "\x9c\x88\xe0/\xd0Z\x45\x17S\xdb\xfc\xd8\xc4\xac\x32\x46\xbf\x0fZ;\x7f\x19\xef\x8f@\x84\r%h\x9b\xc3\xd6\x17\xa8\x12\x65L\"%\x39" "\xed\x31\x8b\x07\xbc\x8f\x11\xf5q\x05\xf4\xafh\x36\xfb[\xf2k\xf4\x9c\x61\x65-\xb4V\xf9`\xbd]\xf4\x04\x19\x35\x63\t\x03\x34\x0f\xa0\x03" "\xedi\xc7zX\xdd\x90\x30<\xc5\x96\x42\xa6%[\x17\x7f\xd1\x05\x96\x61\xe4\x13\x16\x9f!\xe1\xf6>\x88\xad\x93\xe4\xf6\xe5_M\x63\x9c\x99" "\x1c\x8a\xcf|\x12\x42\xa2\x98\x86\x01\x9f\x88^\x93\xfe\xa0\x0eI\xb6\xa7\x16 \x16U\x1d\xe6\xf4\x8d\x9aQ/\x9f\xd4NI\x94\xe4\xa4\xba\xca" "\xff\xb5\xba\xd2\xea\xde\xb5ZQ\xa7\x11/V\xd8\x19\xc9\x12\xb2\xd5\x9d\x7f\xde\xc9\x41Y\x7f\xda\xc4M\xc0\x1e&\xbc\x44\x97\xca\x33H\xa8\xd9" "\x35\x9a\xa0QT'-\x36\xbf:K\xbau\xb1\x8e\x16\x9e\x37\x92\x90\x8dJ\x14\xf1>\xbd\x42\xcc\xf5\x13\x44\x0c~V\xaa\x95s\x9d.\xcf" "Z\xaf\xa0\xb1\x87\xac\xb0\xf5\xbd>g\xb6tQ=$\xef\xdd\xac\xf2\t\xaf>\xd5\x16zg\xe7\xf7\x41\x93'sm\x80j)YL\xbc" "\x07\xe0\xfd\x46]\x98+\xad\xfb;\xbe\xda\xf4\xe2\x15\x61(\x44\xac\xef\xe9\x19\xea\xf8\xe2\xd2\xc6@\x43\xfb\?\xef\xebY\xcaU\x35\x8d\xd5P" "\xd6\xe0\xe0\xa8\xe4)\xd8KJ\x97\x15\xfd}\x19Zv\xd0\xd6\xd7\xbc\x8f\x63\xa5\xd6\xf8[\x8d\xe1\x85*\xda\xa6\x13\x84\xc8\xea\xc2\xe9\xa7\xd3" "\xcf\xeb\x1fW\xae\x93\x04\x33\xb1\xd1\x1b*\x88\xdeP\x41\x83\xf7\x8ci\xb9\?h\xac{\xbep\xd5\x46G\x39-\x1d\xd4\x31\xbe\xa5\x86W\x00" "\xd7y!;\xfb\xea\x1c\x38\xa9\x62\xc2]\x34\xbe\x1d\xd8}\x8d\xde\x61\xd3\xdd\x04\xef\xab\x18\x9a\x89v\xcf\xbd\xa1\x44l\xcf\x9d\xd2M\x81\xab" "MN\x0b\xce\xe3\x92\xf6x(\xa5o\xdd\xa0\xf6\xd3\xfa\x8b\xca\x30\x19\x9a\xa6[l@+p\x98R\xc0p#\x88\xf3\xd1zg\x41\xad\x44" "\x36u\x80\x62\xcb\x1a\x44\x9b_\xe9\xe6\xba\xaf'\xd0\xa2}\xfd\x88q\xff\xa2\xf5\xc8\xc8\xb9)\x00\x05V\xe8\xd2\xb1\x93\x0b\x16\x93\xed\x17j" "gzv\xf3\x90\x12\r\xcf\xae\x84!^\xc5\xa9\\\xe2\xcf\x8c\xc6\xa2\xe1\xfd\x15\x36=\x9f\x02Gu\xc2\x06,\x8c\".\xf5\x96\xd7\xed\xc8" "\x35\x39\x83k\xec\x12\x16\x64\x84\xa3\x9d\x31\xf4!\x0b~\x32l\t\xaf\xac:Yp\x0bjj\x34\x63\xb5\x8a_z~\x9b$\x16\r\xadM" "\xc1\x9a\x9a|jru\x86\xe5T\x39MG\xb2\xa3}\xe9) \xca\x9b\xfc\xa5\xb4\xa5\xc3\xc3\xf2\xf6\?\xda\x31\xb5}'\xfb@\x85\x7f\xfa" "@\xa6\x31G\xb4+\x31\x8a\\\xc4\nz\x13\xb1\x18L\x44\xbek\xfe\xe1\xc0\xd9\x06\x8f\xf4\xbd\xfe\xff" "t\xbd\xe9VjM\x0f-|\xebv\xd8\xa0\x80(\x9d\x8a\x02\xd2\xa8\xa8\x34v \xa0\\\xccq\x35\xfc:\xb7\xf0%\x99\x33\xc5\xda\xcf{" "\xbe\x31\xf6\xd8s\xa6X\xae\xa6\xdaT*\x95\x82G\x9eK\xe9\xcf\x9cR\xcf\x31\x39}\xc1\x66pH\?\x43/k\x91\x36\xbbu/\xd5\xa8" "\x34\xd2\xbb\x35\xa6\x94\xbe\x1c\x61\x06\x05\x9d\x33\x03\xce\x1f\x1d\xa5O\x08n\x1fH+\x07\x0c_T^\xe9\xad+|\xa5J/+\xdd\xdc\x39" "\xea\xe1\x0c\?,\t\xb3h\x1b\x66\xaa\xa3\x0c\xb4Z\xf1\x96\xa8\xfaQ\xffH\xfe\"\xde\xa1\x34\xe8\xeb]\x07\xfd\xac\xc4J\x1e=\xac\xedJ" "\x96\xd7\xa3\xfe\x1d\xce\xa0u)\xfc\xf6ZQ\x17s;\x11T\xa5\xba#\xe2\x0b\x1b\x65\x0b\xdfW\x07!i\x14\x18\xaa\xf6\x43\x41z\x1d\x99" "\xee\xc1\xb3\xdf({\x0e\xa1\xf4\?V:u\xd4W\xed\x96\x33\x12{r\x95`\x9a\x16\xfa\xb6\xeb\xb8\x35\xa1\xec\x63\xe1\xc8\x30:\xaeg\xa4" "\xf8\xbb\xe6\x34\xac/\x99\xb4\xc9\xf1\xb1oO\xd9\xc7\x9a\x04\xdfk\x91\x66V\x15\x8eY\x06s~\xc6\xf7\x87\xa3U\xb4\x1fH\xe6\x12$\x88" "\x61~_rR\xcb(\xff\x45I[\x35\xce\xae\x17i\x17O\x41^x\xce\xc5\xc5Gm\x83\rt\x61\xde^\x05\x37\x1d\xde\xa4\xf6\xad\x7f" "\x86\xaeZ%;\xc5\x83\x12\x06r\x45\x9c\x85+\xf4\xb6\xac\x97\x9f\xffP\xea\xe8\xfb\xd8Z\xacH/\xf7\xfa\x65\xb6\xa1\xa8\xb0/o\xa9o" "\xc7\xb2\x87\xe4W&\x97\x03G\xcflPo\x9bRI\xb4\x1aY\x08j\x91\xd8)i\xbf\xc7\xe6JU\ts\xa3\xfd\xe4\xa6\x94\xda\xd1\x39" "\x42\x9b-}\x10\xb4\x01\x97\x30\x83\xd8O\xee\xa7Qk!\x03\x18\xa4\xc1\x83\xe7:\xd5m\x45\xeb\x12jY\t:,%o\xfa\x94Xo" "\x44RO\xb9\x39j}\xf2T\xf7\xc2\x96\x0f\xce\x34\xaa\x64\xacK\x06\xb4\xb6\xec{\?\x9a\xbc]`K\x88\xd0\x85\xe6`\xf2\xf1L\x89\xcf" "Z\x96\xf4Y\x05\xder\x39\xcc\xe6\xe4\xaa\x96\xb9\x65zUv\x34\x63\xe1\x34+\xb1\xe7\xb5\xe3\xd0\x8f\xe0\xe6#\xd2\xe7\xb3\x63\x94\x43\xbe\x88" "\xee\x80=\x0c\x42\x7f\xf4\x38\x17Z\xb9(\xc1K\xdb%/>H\x08L\x14$h\xd5*\x65\xbaI\x8d\n\xab\x81\x85x\xe5\xaf\x8e\x11\xd8" "\xd3h\x92V\?J\xeaz\x33\xdfIs\x95\xc8\x86N\xbd#[\xba\x37s]\xe6\x95w\x30\?\x0fH\x32!m\xf7\xfe\x95\xe2\xc5\xbe\x1e" "\x9cq\xbd\xeb#=\x7f\xe9\xd5\x32\x12V\xf1M\x82\x43\x08h\xf9\x07\x11+ =,\x93U\x43\x95\xc5\xc5:\x39\xf9\x0c\xc9\xe3\x83\xcdw" "\x0eg~Z\x42|\xfe*\x9as\xdc\xbd\xf6\x84$\xff\x9dys\x84\x9f\x30\x9a\x16W\xc9\xefw\x90~\x7f\x33T\xc3\x14\xf7\xae\x11\xc5;" "$\xaf\xef\xe5_\x46\xda\xec\x86\xdf\x36;\xbb\xff\xbe\x86\x0f\xbc\x46\xc3\x43\xfe\xb9\xa6\xec\xa8\xe5z\xbc\xccHqq\x96\x91\x92\x97\xec\x95\xe9" "x\x11$\xc9\xc7\xd7\xf3\xac\x84\xd9\x18\xa4I\xe6\xeft\xdd\xf1!\\\xa9\xe7X\x0e\x1f\x83\xb4\xcaGs\xcf\xad\x32\xa7\x11\xe6}\x38\xd8\xcd" "H\x1a\x66\xe2{\x02\xe9\xe2\xc1Q_\xbdTv)\xee^\x38\xd5\x89\xfd\x07\xba\x81\r\xc7\x43\x41\x1d\x81\xf6V\x19iS@\xc7\xb1\xa9^" "h=\xe8\x36 \xd5\x1f\x33\xe3\xcf\xa6n\xebh\x36\xfdK\x1f\xd0\xe6\x37\r\x34_\x0b~q\x84u\x94 ]\xb3$;\xac%\xf3V<" "\xcf\xc3\xc1U=\x7f\xeem\xe8<\xc2\xeaW\x81\xa1$\x04m\xb7X\x81!%\x04\xed\xfc\xd6\xc2\x11mKG\x38\xad\xa1\xc0`\x12\x8ak" "`\x01\xd7#\x02\x81!\xb6\x85\t\x35\xd7]\xc3(\xd7\xc7j\x9eI\xf1i\x33\xb6`l\x85#\xda\x0e\x14\x39\xfc\x1e\x61\x05\xc5\x90z\xc6" "\x11\x16\xc7\x0c%\xbf\x11\xeb\xa6@\x07\x10\xc5s\xe0\x37\xe5\xef\x1c\xf1\x1dh\x31\xfa\x0bG\x88y_\x38\x82\x9f\x99\xa1N!,\x8e\x8eH" "\xf5\xba\xe3\xdfr\x88M\x00\"\xb5\xf1\xf9\x08\xfd\\\xf0\x01\xfc(\xb6\xb5V\xc1\xafG\xe0\x1c\xdf\x81\x98\xe2\x82\xb0\x10\x1cq\x66\xa5\x98\x9c" "\x1c\x83./i\xdb>\xc2\xb9\x9a\x82\xb9_\xe0\x11\xde\x38\x9d\xec\x03\xcd\x1fJpm\xe5~\xb4\xd9\xc5\x97\"\xf8\x89\xa1g\xb6P\xce\xfe" "\x95\xa6\x16m\x42)\xff\xe0\xb9\xe1\x98\x1e\xf1\xfc\xe6\xc2\xf1\xdf\xca>\xfd\x18\x01\x36\x04-\xee\x9b \xeey\x1c\xf5\x9a@sWT\xfc\x00" "\"\xe3\xc3\xf5\xec\x88\x15q\n\x90P\xf4\x8b\xc7\xc9\xe9\x08\x88)\xf1q\x8a\xd9\xe4\x31\"H\nZt\xef\xc2\x31\xbcu\x14\xf1\x08\xc4\xd8" "\x33\xe4\x10p\x8c\x9dY\x82\xe8[\xf2\xd2*\x88\x35\xe2\xd0qk\xafUI\rX\xff$pz/\xf4\x35\x35O+\xa1\xdf\xef\x08\xb1\xee" "\x34\xed\xec$\xf5#$,\x16\xe1\x99\x46\xb9\xa8\x90\xff[\xf6\xd9\x8c\xf2\xd8\x34\xa4\xf8\x03\xfc)\xca\x34\x86&\xff\xbc\x86\x41\xab^\x45=" "\x9f\xe4J\x42G]\x64m\xa3u!\x9f\xb9R[(\xec+y\x99x#\xe6\xb9S\x04\xf1\x12\t\x33\x11;\xac\xde\x36\xe7(]\x02\x33" "\x61\xcb\x44\x42\xf7\xa2\x18\x9f\x9e >\x9cH\xd2\x82\xd0\xdb\x0b\xed\x03\xcf\xf3\xecJ\x85\xde\xd9\xff.=\x02/\xe6z\n\x01t\xcf|t" "\x89\x9c\x8f\x9a\x87\x8e\x08\xa3n\x94\x33\xfd\x05\x15\x41Q\xf4\x39\xa7\x32]\xc1\x31\x66\"uw\x1d\xe3i\x8b\xca" "t^\xf2.\xdc\xa1W\"\x36\x1duy\xcdv\x1b\x9b\x14W\xdf\xac\x0b-\x44\xe7\xfb\xd8y\x96I\x8e\xd6\xfb\x61\x43\x9a&\?\x10\x9f\x88" "SjR\xdb\x0c\xd1MK\xbc\xf7\xa8\xc1!!\x1f\x8dW\xb4\x14\x90\xc6\xc5\xfb\xf8\xf3\x94s%O\xab|I\xb9\xc6\x9e\x0f\x96\x96~\xe5" "\x92\xbdo\x44\x97\xb4\xb4\xe4\x12\x35G\xcf\x41Y.\x32TKmT\xd3\x8d\x10\xcd\t\x93Kli\xf9h\xda\x87\x1f\xa4\xd2\xa9#\xa7\x14" "\x46=\x9b\xa7S\xaf\xe2\x9c+(\xca\xf8\xfe\x37o\xaa\x1f\xeb\xf1\x10>\x97H\xbe\xf9\xd9\\\xe5\xc2J\xb8\xa5\x65}\xe9%\x61\xd6\x97\xff" "\xd3\x31k\x1bl\x9a\xf9\x90\?\x98\x17\xe5\x43\r^\xedp\x12kTk\xf7\xbbKl\xf0\xa4\\\xe2\xccG\?\xc3\x90\xef\?\xfc.\x0b\x06" "+yq|\xee\xb5=>\x1e:\xea\xc0\x02}[\xa5\xb4\xf3\x0czrIl\x00Y\xf5\x35\x34\x13o\x8f\xb3[\x15\xf1\x98\xb8x\x11\x1d" "-\x62\xbfW\xf1\xd1\x32\x9c\xbfU\xc6i\x11\x9fJ\x83\x93\x62\xa6\xf5\xcb$\x32\xb9\xe1\x05\x98\xe6(\xda\n\x95K\x13G\xad}\xf5\x07\x97" "\xf4\xff \xa1jq \x12l\xff-\x1e\x36\x8d/\x8e!\x9a\xc0\xfe<\xcf\xd9\x91\xa2w)\xa0\x99\xc2\xd3\x04s\x9b\xa1\xc4\xcb\x1a\x45y" "\x03\x9c\xa5k\x92\xfe\x7f\xcd'^\x9d\x01]\x66\?)\x88\x93\xd0\x41\xd9\xbe\x85\xe2\xdc\x03\xa5\xcc\xb6\xe6\"\xbe\x9fx\x99\xcb\x0c\x8d\xf6\xd2" "<\x15\xf0w\xbd\xd9\xc5_{\xe9\xceY\xb4h\x65\xa4" "\x84\xaf\x46\x43i>\x39l\x39\"\xb0\x89oK\x10\xbc\xfcrT\x97\xe5\xcb\x42T\x1a\xd1\xac\xa0i\x38\xa2\x41h\xa5\xe5\xa8\xd9\xe6\xf7\xbb" "\xfa!\xa2\x1f\xf5\xc2\x97)\x9fV\x1b\xcc=\xf2\xc9]\x11\xa8\x07\xc1\xe6i\x9c\xc9\xc3\x8bX\xf0i\xe1\xf8\x37Gi$\xaf\x1aH\x1d\xae" "\xa4&\xa5\xc5gx\xfb\x8b\xf4^S\xbf\xbf\x01\xf2(Y\xe7\x10\xabW\x1a#\x66\xb9\x8a\xd1\xefy\xf4\x88\x1aO\xcd\x42Q:\x34\xf8\xad" "\x89\xb4\?\x8d'\x8f\x1b\x8b\xcf!\xd2\xc1\xf4\x8fU\xcb\xfb\x88\x34\x37\x45\xc0O\xa1\x87\xcd@\xed\xbc\xc7\x0c\xf5\x12\xd6s\x81w\xaa\x38\xe9" "\x41\xa4\xd3\x81\xe5\x94K\xd3h\xcc\x07\xd5\xd0^\xd3;\xb4\xb9\xb4\x33\xf1\x1a\x93v\xe7\x8e^\xb0\xb6\xeap\xe5\x94\x86\\\xa1\x87\x08\xb2\xa7" "\xf4\x02\x38+\xe1\x14n\xa5\x63\xc7\xbf\xf5\x88\x13*\x95t\xf7/\xa6\x05&\x05\x8bn\x1e\xfb\xe5\x0cm\x11\x66\xcf%\x84\x8b\x17\xfa\x33 " "~\x10Q\xe6\xe9\xef\xb1\xa3\xf7%p\x96\x36\xf4RV\x8b\x37\xc7\x14\xa1\xde{lvJ\x8e\xd2\xf2\x9c\xa6\xcc\xbf\xcdN\xc5\x31S\xb3\x37" ";\xd7\xfa\x82\xb0\x63\xe7\xe1K\x64\xe8}\xa6P\x8d\x10\x01\x93V\x1e.\xd5\x86\xe9h\xc1\xa9v^\xe6\x84\xfe\x1d\xa2\x61i%\xab\"\x8b" "tS\x91\xfc\xbf<\xa0t\xefh\xcb\xb2\xe8\xbc\\\x37\xd1\x05\xedG\x34\x8bM\x1f=#\xf5\xca\xbc-]\xba\x12#\x1dL\xd3\x31\xec\xd9" "\x83\xe4N\xde\x90\xe6\xc7\x1c\x7f)\x65w\xbeY\xda\x7f\x36|i\xdamZ\xbe!\x95)\x45\xdd)\xbd\x35\x8alJ\x8a\xff<\xcc\xf1\x07" "\xb8\xe0U\x0b\xa6\xff\xf0\x46\xbf\x8f\x8ez\x03\x7f\xe8\xef\x63\xf6\x15\x44z\xa8\x84\x93\x1b,\x01\x0eY\x46\x93\xfc\x17\x30\xddv\x19\x08Z\xa8n\x41\xdb\x38h\x98" "\xfc\x98\xe2P\xe5\xf2v\xd5\xcc\xf4_\x81\x62\x06P\xc5\xa2\x8c\xa8\xee\xd4\?\x35\x81\xed^)\xfdi\x95\xa6\x1f\x0f,=\x91\x1co\x1dm" "\xde\xb3\xa6\x34t\xa4\x8a[\xc5\xf1\xe7\x82(\x88*\x35S\x45\x1c\x83\xa6\x94\x0f]\xbc\x39\xaa\xc1\x1b\x8a^\x95\xa5\xaf\x18-\xf2[\xea\x7f" "\xb3HN_h\xe3S\x89V\xc8*\x1d\\\xab\xb4\xeeU\xff\xb0\x16\xea=\xbc\xa2\x86\xe8\x81\x95\xa1\xba\xf5\x83\x30z|\x14\x9d\xf3\xdcj" "&|\x05\xfa\xcf\x0flxJ\xd3\x8fV\xfa\xd1\ro\xfbS\xc8\\\x66\x9b\x12\xc7j\x12\xc8\xa4\xdd\x1f`\x1b\x9dJ\x97\xc4\xa6#\x07\x8a" "*\xb6\xf3\x17\xaa\xd1N\xc1\xaf\x02\r\xe7Hy\x42\xba\xf7\xe6\x19\xea\x9f\xa2n\xba\x30\x82+\x65\xc7\xa4ts_\xa6}^\xa4S\x84\x11" "q\x1a\xe7\xeb\xe1I\xb9O\xd1\xb7\x38\xfd\xae\"\"\xa1\xa0m\x10\x13\x15=\xe5X\xdb\xc1\xdd)\x93\x91\xff\x9c\x37)\xfe" "}\x97\xb8\xd7\xa0\x8a\xa8{\x82_-\"\xd3g|K\xd8S\x15\xb9\xa3\x46\xa9L\xc6\x39\xdf\xa8\xd2\x9e*\xf8\xe8\xe8\xdd\xbd\xd0\x10\xb4X" "\xa5\x91\x63\xf8\x1b\x18X\x15\x35\x9a\x04\xb5\xc1t}\x17\x17\xfb\x88\xe3T\xa8\xe2\x38\x37\xc1\xcb\x17\"\xbe\x1e\x31\xef\x04\xabM\x8d{(\x8d" "^\x9a\x01K\xd9\xf5<\x41\x1fT\xb0IS\x90]\x96w\x93\x1b\xe6\x12m\x9c\xd5\xadG\xb0Q\x66\xad\xcc\xf4\x62\xa7\xf0\xbf\xa8\xd2_X" "\x31\xea\xd7\x02\xe5(\x88=\xa0\x82]TS:\xf3V\x37\xdf\x07\xd1\xb8\x13\x1dY\xa6\xd6t\xad\xc4\x62\xe4)]:\xc6\xd3\xbd\xb4\xd0\x85" "\x84\x95\xd9\x1a\xe7\xbe\x35\xfa\xaa\xd4\xe8\xd5Q\xa3\x46\xa9\x88\xb3K\x85\x42\xa7\xad\xfd\xadK\x8e\xe9y\?\xb2\xd0\x06\x90:gYi]t" ")\x82SrM\xb2l\xf3\xb2\x8c\xfa\xef\x90P\xc5\x15\xfd\xa9Q\xee\x45n\x89\x80\x9c*\xbdS\xafQ\xca\xcc\xab\x45\x87\x13\xce\xa0k\x88" "\xf9n\xe8/\xa7.\xb8\xdf\x93$\x9f\xa7\x84\xaf\x12]PSOn \xe5\x03\"\xd4\x85\xd2\x16\xf1\rh\xbb\xc3\x05-\xa4\xa0`\x99/" "\x88\xe5\xa9\x1a\x17\x16kQ\x65\n\x84\x81\xa8\x46+\x83\xe2\xb6\xde\xa9$YO\xc5\x93\x92\x17\x84\x46\x10\xfbX\x81\xf6\x1e\xa8$\xd6\x34p" "u\xa1\x86\xd3]\x45\xea\x97\x89\xbc\xfb`\xa9\xf9\xe8y\x33:#\x36$\x15\xc7\x86\x04\xe9\x94\xefg;\xfe\x0b\x16\x82\x11\x0e\xb5\x35\xae\xbd" "\xd6\xa8i\xd5\xa2\xd5\x81\x63R<\xc0q\xd5&m\xba\x45\xaf\x02\x90\x36\x43\xfe\x06'\xbd\x1a\"\x34\t\x42\xb1\xa9y\xcd\xa3\xb5\xb4\x86\xb3" "\x05\x15\xbf\x1d\xc3Qm\"\x35\xf8W\xcd\x17\x84[\x10:{v\x8c\x9ek\xd1#\xb2\x07\xd1\x0b\n\xb5\x64\xef\x35\x81{K\x8d\xe3hM" ">:\xfdlx\x86\x88\x94\xc9\x9e\xe4\xb4\x1e\xef\xbd \x8e\x95I\x32~\xa5\x87%\xea\xd5\x9a\x90\xee\xe1}\xb1\xcdZ\xf0\xa6\x41\x44\xf5\xd5" "\x03\x8f\xe0\xa5Q\xe3\xa8V\xe3Z\\\x8d>\x63\x35\x04x\x96\x12\xc3\xdaZ\xcdk\xa8\xdfZ\x30$\x61\xb7`\x8d\x83v\xcd\x0e\xc4\x42\x85" "\xa4/L-\x85-\xaf\x86\x63\xb7\x05\xbfr\x88\xd2X`\xd4\x46\x43\xaf\x15\xda\x81\xe6\xbd\xfb\xa9m.p[\xdd\x8e\xc0\x1c\xd0\x02\xc4\xdc" "\xa2\xb6\x99\xae\x38u\xa8\xcb\x9cZ\xcf\x8bG\x03\xa8\xebv\xe2\x87\x0b\xd6\x85:\xedN\x82\x13\xe2\x37\x10\xdb\x46\x04+\xf1\xdb\xf2oq\r" "\xd7\x00\x35\x12u\xcaj\xe4\xef\xf3\xdep\xa4\x62@G\xc3lt\x8c\xed\x8eP\x44il\x66\xe3\x07\x16\xfe\t\x87\x18\xa4i\x1bG\xca\xfc" "\x9b \x35\x86S\xee\x7f\xe2\x12\x16\xfe\x1f\xc1\xff,\x8d\x43\x86\x45\xc0\xdb\x1b\xa9\xfa\xf3\xcf\xcf\xea\t\x39m\xe9\xa9J\xd8\x0e^g\x37\xc8" "\xf8v\x85z\x94\xcb\x39nWV\x18\xf5\xae\xb0\x8dzW\xd8\x46\xbd+\xf8~\xb6m\xd4\xbb\x02\xa3\xde\t\xc2(\xa2H\x63M\x9d\x0b\?" "u\x8b|\xc6\x38{\x90\xd0z\xea!\x46\x18(\xf4\xdfz\x08\x1a\x65\x34\x1d\x8dh\xd2\xad[\xbc\xa3u\xa0\x16\x99H(\x36\xc8\xf9\x1b\x86" "U\xee:\xbd\xf3\xea\xb6\xc8\xf1\xc4\x16\xad\x12\xd7\xcb\xea\xfa\xcf\x43\x9c\x14\xfe\x1b\xab\xaf\xf0\xff\x88\xd5'i\xa5\x17\xe2\x1b\x10s\x90:\x35" "\x85zx\xd5\njW\x36N\x9fI[\xfaJ\xfcq\x0c\xa1\xfb\n\x0c\xdd\xa7\x38\x04\xb6\xf8)=~\x65\xef\t\xe7\x96\x19\xa5;\x89\xd0" "\x61\xf4\xfd\x1e\n\xa6\xdf\x8f:w\xf1=j\x89L|\xb3\xa5<:q\x0c\x31\xf8\n\x8c\xc1\xa7xM|\x06z\xfc\xbd\xc2\x36\xde^\x81" "\x91\xf5\x0c\x33IQi\x9c\xd8!\n&%\xadu\xe6\xb7\xcd\xf5\xb9\xd7\xe9\xe8\xad\xe2\x18.x\xab;n\x93n\x1c\x11\x88\x8e\x12\xb3\xee" "\xed\xddq\xfb\x07s\xe0\xec\xd6\x31\xfc\xe4%\x38\xbb\x0b\xf5sv\x17\x1d\xb6\xa5zS\x62*\x1c\xfc\xb6\x01\xff\x94\xb2T\xd9\x17\xe8R\x65" "&\x33\x17\x07\x8e\xe1\xcev\x90\x9f \x9c\x81\x14\x33\xad\x93\xfa\x0f\xe3\x05\x1a\x46\x1e\xa0\xd2%\xaezPJG(\xe1\xf8\x18\x7f\x89\x00\x82" "\x82X\xd4S\x8c\x06\xc7\xf2\x0f\x12\x66\xe7u=\xc9\xea\xf4\x84\x83\x64ht!\x36\xa0Q\r\x1c\xdb\x0c\x17\xc4\xbf\xef\xf1\xbc\x82\xe8rj" "-o\x03\x1bg\xe9\xe7\x8c\x1a@\x9d\x8b\xf7\x8a\x9e\x03R\x87\x36W;\xd1\x98\x12\xa6h\xa1i\x0bz\xcd\x12\x1a\xdf\xef:\xdd\\\x1d\x07" "\xfa\xd6\x0c\xf4\xe7\x9c\xf4\x91\x0b\x85un\x37\x08=\x84\x86\x0c\xf4G{\xf4@P\xf6\x02\x1aH\xf0\xe3-\x43\xa3\xe0\x02&\t]`k" "\xac\xf6\xda{\x94I\xdc\x39\xcfT\xd6\x10\x30\xae\xc0\xa0\x82\x82O\r\xeb\xa3\x98\xe1/\x0f\x8e!\x33\xb1g\xb1\x1eO\x8f\x88\xcc\xaf)\x86" "\x07.\x80*\x86\xc7\xbc]m\xf7\xb1\xd4\xe3\xf7>\"\xbd\x15\xea\xde\x86u\xbb^X\xb3\xb6\x08\x83\xb7'N\xffgL\xd0\xb4\xcc\xdd<" "\xce \xa4\xcf\x8a\x63x\xf8\xe7\xc0\xd1\xab<\x17\x64\x15\xb7W\xcd\x42N\x64\x02\x13\x42\x1a\xcf\xc3\xd3<\x36\x61\xa1\x1ej\xcf\x1c;\xd2\xcd" "\xe2:\x1d\xe1Q\\\xa3V\xd4\xcf\xdb\xb9v)\xf3\x41\x9b\xa3#G)\x01\xdd\xc0\xfb}\xca\xce\x8bi\x19):\?\xf8\xef\x15h}\xe1" "n\xf5\xa5\x46\x89\xe1sUZ-\"\xf8^PJG\x93\xac\xe4W\xde\xa0@\x36\xefg\x8eR|\xd2\xa9I\xa5\x8cno<\x8d\xde\x01" "M\xf9\xc7}\x98\x42\xdb\x8et-\x11:\x00\xf6\xf4\xc2\xb8\xb1\x82\x34\xca\x01\xa7\x44\xe8\xcf\xfa;\xae\x85\x84@\x08\xcd\xa4\xf2\x06|\x1d\x01" "\xb1V\xdc\xe4\xa2\x43\x93\xce\x15\xcdM\x1d\xbfs_\x9c\xcc\xeb\x9f\x80U\xab\x98-\x66z\xfbo\x9eg\x8f+\xf4tK\xb7\xe7\xf6\xa8\xb4" "\x8c\xc6+\xe9\xef\xd9o\xb5i\r\xd4\xb8\xb4Q\xa9\x1b\xef,\xb9\xec\xd5\xfe\xb3\x43\x31\x0c\xb9\x9b\xac\x1d\xfe\xe6\xa7\xc0\xd8I\x46\x61\x11n" "\xe3\xd0;\xc1\xdfu\x34\xb2/m\x33\x46\x80\xe0\x31\xf1\x45\xcb\x36s\x01l\x86m\x9a\x00\x15\xd9n\xda\xcc\xe1\x36\xb7\xae\xb5\xb9\x32\xdc\xa6" "\xeby;\xf3\r:|\x61\xecV\xcai\x84R,\xca\x43\xc2\xd8\xd4\x8e\x9e\xf8J\x13k\x35m.\x04*\xfa\x93\x39\x8dk#\xd2\xb7!" "\x9b\x9dQ\xb4Y\xa3\x88\xfb\xa0\x94\x65\xda\xf6|\x16T\xe7\x8b\xf9\xab\xee|\xe4\x1bk\x1a\x06v\xa5\xec\x17\x8c\x62\xa1^ix\x87\xe6\t" "\x1d\t\xdat\xe3os\"\xd0\x8e\x97\xd6\xdd\xb5\xb9\x00\xd5\x66\xb0\x95\x36\x95\xbb\x36\xbdH\xda\xac\x46\xed\xcd\xfd\xa1#\xad#\x46\xd1\x65\x1b" "\r\xf6\x41\x95\xf8\x06\x9d\xbf\xf9.\r\xfc\x1d\xba\x38v\x64\xa4\x65\x9et\xf8!\x9d\xbf\xe5)\x17\xef\x84^\xd1k\xa6\xc3\x82\xe9\xb0Jt" "\xa2\xdc\x97#\xce\xec\x33\xca\x15\x98\x0e\x82\x1e\x0b\x1e\xe6\xa2\xd6\"\x43\xe3\xfb\x9c\x9e{\x12&\x10\x1d\xfa\xb2w\xa0r\xd3\x61P%\xb5\x84" "\xa0\xaf\x32\xa9w\xbd\xed\x9b\x35\x81K\x66\x9d\xe8\xac\x0b\xbc\x94N\x07\xdf\x14\xd5/\xe8]\xd0\x89\xae/\x81\x18=;\x38\xf9P\xb0S\xe1" "\xa8\x46\xea\x1fo\xd2\xf6\x39\x1d\x1d(\xd9\xa7v\xa2.\x11\x93[\x45\x06\x90\xe8\xe0\x10\x31\x41L\x02:\xd1\xe8\x97+\xa9\x9d\xf0\x9cI\xe5" "\xff\xec/u\x33[\xee\x94\x03\x9a\xa6\x45\xf9v\xf8h\x91\x66\x1f\x1c\xcc;\x18\xaf\xe9!\xa9R|R\x0c_(\x12\x86SR\xb9gZ" "\x9c\x46\x37\xedm\xdaX\x06\xd3\xa8x\xe0\t\x1c\xe2;\x8c\xae\xd0\xd1\xaf\x84WPG\x1e\xea\xa8'P{y\xcd>\xd2\xfd\xbd@\x8bS" "\xd0\xf9\xbe\x16\xf3x\xf1\xaf\x14]\xd4\xa2j'\xa4\xf5\x8f\xb6WT\x89,\xee\x15\xab\xcf\n\x45\x1b\xef>\x01O\x8a)\xcc[\x1d\xcf\x80" "X\x8f\x08\xdf\x91\xf7\xb4\xd0\xa1\xcf\x9e\x46\x1b))G\xb8\x0e\xcf\x80o\x9cQ\xdd\xb0\x84\xd7n\xf6\xe2\xf9>\x02\x85{\x42<\xae\x64\x1e" "%\xd3!\xa7R\x46\x7f\?\xe7Z\xba\xc1\xdfV\x93\xff\xefj\xfc\x7fW|\r\x84\x34\xe8H\xce\xa7\xeb\xa1\xbc%%\r\x18\xafu\x13\xe6" "u&p\xe4\x36i\xddv*\x43r\x88\x36\xfeo\x82\xd4\x12\xc9\xed\xb8\xb1\xc7_\x98Q.w\xca\xf2\x89\xe1\xc5\xefs\x7f+\xbe\x0bv" "\xfat\xe2\x37\xfe\xc1\xfb}\xba\xf3\x15.\x14\xa9\xbf\xd6\xb3!\xf7N\x92\x46\x0fi\xa2\xef<\x36\x9dR\xd1\xe8p\xadT\x31\xb9\xb9 \xfd" "v\xf4\xda\xac\xf4g\xa5\xe7\x9c\xfb\xd9\x06\x92v\x39P\x95KT>(T\x1d.\x04t\x92\xd7\x8a\x37Hn\x99\xed\xe0\x84G\xc1\xc5\xbb" "\x36\xb9\xdc)\x82w[\x82\x9eS.\x1a\xea\xc3\x45&\x41\x0b\x30\x9b\xc6'\xfe\xd4\x35\xbb\xd9>u\xbe\xcb\xcf\xb5\xa9\xafu\x8c\x9dp\xb8" "\xb9\xd1\xb8\x8ez\x9c\x9e\?Z\xe5\x9dx\x0b\x96\xdc\xf1\xaeN\x33\n\xa6\x16\xa5\xa2\x31h{\xaa\x1e\xe3<\x37K\xd3m\x42\xac\x91\xe9\x03" "\x9a\x98L\x45\xbd\x1d{\x1f\xcbM\x9f\x1d\x0e\xe6\x9d\xcd\x05\xde\x93\x33:\xc5\xb8U\xfa\xfb~\xdf\xe4\x86\x9e\x90~X\xcfp\xaf\xa1w\x90" "U\xf7|\xc3{T\x13\xa7I\xe5\x9d]\xe0=\x9b\xfd\xbdZ^\xd1\x9c\xee\xa3\xd1\t\x9f~\xcf\xdeYQ\xbb\x81\x9b\x1c\x9b\xcc}\xf4;" "\xdcZ\xd8\xee\xe3\xfa\xc2\xff\"\xbe\x7f\x05vG\x88\x8b\xee\x94\x9d$%\x1ap\xee\xe3\xd7\xc1\xe6\x92\x37\x81\x1b\x87\xa2\xbc\x01\xcb\xe5\x9e." "\xfc\xf7\xf1[\x8b\xeb\x02\xa4\xdb\x9d\x19\xf7\xf1\xfb$\xc6j\xdd}\xfc\x39\xa2\xc2~O\xd3\xd4}\x92{``\xa6\xfb\xa4\xdcr\x14\xed\x18" "T\x66\xe8R\x42\x30\x66\xdck\xc9\x32\xc7\xd8y\xf6\xfe\x96\xdd\x64\xdfr\xa1\xc7\x15\x03\x45\x8e\xd6=;\xbb\xeb\x0b\x14\x16\xf5^\xd4\xa5\x8c" "M\xe7=\xaa\x0f=n\x46\xef\xc5\xd3] \x82\x66\xf5\x92\xca\x04\x08\x97\x8c\x1e\x97\xadzi\xf1\xc7\x31\xd9}M\xbb{\x90\xec$Z\x41" "l\x66S\x64\xa3\xed\xa5\x37\xa7@,\xfe\xf7\x64V-\xb3i\xa3\x9b\x8bG\xda\x95z\x9c\xa2\xf7\x36s\xfb\xce\x01\xcbp@ms@-" "\xf3\x81\xcbP\x0f\xb6\x05\xe0$\x43#\xf8\xd9R\x8a\xef\xaa\x90\x30\xc4\x0bZ\xcby\x88v.\x80\x18\xcc\x1f\xe8\x42\xf8@\xe5\xe7!zX" "\x03\x11h\xe0\x81\x8e\x9e\x8a\x16\x9f\x8e\x7f\x85uRw\x43{\xe0j\xe7\x43\\|\x04\xd6\xeb\xf1\xeex\xb3\xba\x84t\xd7\xa4\xde\xf7\x10\xf7" "\xf0\xb8\x18[\xf0\x14u\x8f\x14V\x92\x1ep>s\xe1!\x39]\xe9\xd9\x85\xf0\xccx@\xf4i\x43=+\x99/\x94\x62\n\xf7\x90\xd6\x86" "\xd1\xe4\x36\xdd\?\x84\x84\x8d;\x8ai\xbd\xc4\xba\xf2@W\xf2\x07\x36\x62\xc5\xcd\xe5\x82\x14o\xec\xf2\xe6\x66\x98\x34\xdb\x9b\x66\x13\xd2\xea\x32" "\xda\xdd\xe7^\xd2\x07\xbf\xddvg\x83\xd1\xde\x43r\x98O\xce\x9e\xff\xd6\xb7q\xbe\x97\xf9\x45\x1d\xbf\x0f\xbe\xfeI~\xe6\xae.\x45O\xc2" "\x01\x0c\x82X\?P\xa4r\xf7L#\xda\x33\xb5\xe2g\x9a>\x9e\xa3~\x95\xdb\x14\x9e\xa3\x89U\x82\xe7\xf8\xb8\xe0\xe8\x37\x16\xaa\x96)\xa8" "\x82\xcf\x88u\xae\xd8\x07\x9e\x9ep\x0cx\x8e\xfd\x92\x46\xeboQ\xc6\x31\xad\x90~\x07\xd1\x38\xfc\xe6o\x63\xf4\x37\x43\xb9\xdb\xcf$h\xf3" "p'\xb1\x04\xbe\xba\xa9\xe4\xd7:\x0f\xf1\xb3\x87\x32\xe7\x11\xfd+\xfd{\x05\xf6N\xbb\xb4\xdd\xa0\xf1\xcc]\x45\xcf\xbaS(\x18\xfe\x9f\xe3" "\xcf\x0f\xe0\xb2\x93M]>:z\xee\xa8\xd9;\xf7\xc2y\xb2[\x82\x14\x43\x88u\x93\xd4%\x16{\x18L:\xed!\xd2>\xa4\x62.\xd0" "\xcc\x35\xd0\x82\x8d\x8e\x1a\xd9\x1f\xe0p`t\xf6\x1b\xe8<\\\x8ex\xfc\xa0\xb7\x1d.\xe2\x9a\xd4=\xc9P:\x00\xaa\xc4%J\xa3\x95G" "\x0e\xa1&\x65\xa8\x9f\xa5\x03\xe9\xe7\xcd)]\x9e\x8c\xc2\xeb\xc9\xe8\xe8\x17Gs\x9a\x44k\xa7Q\xf8\xf9\x18m\xbc%\xb5\xe7 \xc1\n\x02" "\xfa\xc5\xad\xf8\xcfI\xf5\x8a\x61,\x9f\x93\x96u>\xcf)\xa6\x91\xcf^\x9e\xe9/>\x8b-]\xd1k\x38k\xed\x38\xca\xd9\xe8\x33\xe6\xb6" "\x93q<\xb0\xdf\xc7\xf4\xbd\x9bp\xce\x33\xe1.\x83\t\xf7\x81Lh\x83\x9c\xd0\xd9}\xc2\xcc\x9c\xb0\xf2LX\x65\x15\xe3\x8f_Px\xce" "L\xe8P\xa5\xa8u\x0f\xe6\xe8\xad\xc4y\x9e$\xcc\x1c\xb9\xd5\xc1(\x1c\x1b\x95\xe2\x88OP\xb8\xc6\x18\x45\xed\x30\x8a\x1dv\x46-\xf6\xbd" "QV\x02\xa3\xcd\xf1\x96\xfa\xcb\xcd\xe8\xed\x06\xfa\x14h\xf6Ug\xff\xf3\xaa\xecQ&\x32\x35q\xe4\xc8\?\xa1\x0f\xb7`\x8fZ\xef\x84\x91" "\n\x14\xd9\\&:y\x0f\xc3\xffV\xa2%R\x13hl\x9e\x30\x62\xcd\x84\xd1\xe6&\xd4\xd4\x14\xe9\x88\x31\xa1\x8f\xb5\x62\xf8\x30(j\x8a" "\xdc\xe1\xa0\x34\xb9\x61\xd9`:\x33\xe1v\x41\xc5\xf0\xfa\x46u\xb3{\xee\xda\x13\xd8\xa5\x1a\r\x0bv&\xdd\xfc\xe8<\x35s\xe5\x64%\xba" "\x1fU\xf6\x7f\x12\xc2\xe7,t\xc5@\xa7\xb9\x32\x8f\xba\x1dl\x1d\x10\xf4\x97\xb8\x32\xa6\xea\xb5\x95\xfe}\"\xb7I\x92\xe2\xf8\x1cHv\xbb" " \x85m\x85&=ut)\xa7]\x0e\t~|\xdaV\xbb\xb3\xe4\xb7\xf7@\xb1\xd2\xa7\x14N\xa8\xe9\xcd\x91'\xfc\xe7\xc4\x32\xa4\xdd\x1f" "\x38\xc5\xa6\xc3 \xbd\xac\xe2\x1e\xdf\x12n\xe3\x13\xb6\xe3\t\x03\xd0\n\xe2\xb1q\xde\x03|x\xa0z\xc5\xcc\xf7\x8b\xc4=\xea\x13\xda\xab&" "\xb4\xbcL\xe8\x8d\x39\x89[h\x30\xf4\x1e\x9el\x17\x42\x95r\x46\xac\xd4\xcb\x03\x94\xce\xa9\x94\xd2G\xd4[.\x91*r\xd9\x64\x42-l" "\x12\xbf#w\x39\x15\x9ax+J\x8ax\x18\x1dG'I\xbd\n\xc4\xc6\xc9\xf2+=\xe5\x37\xf8\x8b,~\x80\xec\xdc\x38\x92" "Nh\xb1\x99\xd0\x9dJ\xd1;#\xa5\x98<(\xe5\x36\xc1\tW\xf5&\xdc\x34\xaa\xe8\xed\x92\x46\xda\t\xfd_'\xe9\x84\xf7\xc4&\x35\xc5" "\xadW\x9fJ\xde\x9d*\x9dM\x19Sg\x82S\x35\n\x93\xcd\t\x1a\xf2\xe6\xe2\x8e+\xa6\x42G\xc0\nZ\n}>'\x1a\xddut\x9f" "^\xf7(\xd9\x8d\xa6\xd2\xa1K\x66\x44\x85OJ\xf6\x16\xd3\x08\xc1\x03\xa7\xd1\xcd\x04\xd8|\x8c\xeb\x03\x1c\x44\xa5\x92\xa7N\x36O/\x9cO" "n%\x16\xdb\x94\xaa\xca\x14\x07\x94\x0b\x0e\xf6T\x85h\xbe\xb9\x94yp\x34zw\xe4\x06\t\xa5\xe9\xf8\x80N\x97S\x0e\xf6\xd3\xe8\xed\t" "\x88\x08,S\x1e\x91\x31\xf5\xbf\x8a\xf7\x89P\xa1\x15\xe3\xca\xf7\x66\xa7\r\xc9\x8e\xa2\x11\xac\?\x84\x0b\x8cr\xcf\xf6\x94\xc5\xa4\xa8Q\xcb\xa1" "\x8f\xab\x14\x1f\xb4@\xe1v\x30\x8dG\x87\xc0O\x1b\x08\xa6\xc9\x0b>\x12\x0b\x0e\xf1\xd9.\xa4\xd3~\xe6\x93\xd9\xac\x14\xf5\x7fT\x12\x95\xe2" "\xd7.\xeb\x98J\xe9\xce<:\x7f\t\xd2\xa4\xcd\xe5\xa3)k\xefT\xe6.\xd9k\xb0\xa1s\xcaH\rS\xc6NT\xd4\xd0\xcb,\x0c\xc6" "\x63S\xe4\x10\x64\x14\x03\xa9R\xcf@\xa5\xe8\x63\x94r\x44$\xcd\\\x9e\xbe\x0e\xa2r\x9e\xb3\xad)\xe3\xbb\xbd\xff\xcd\xef\x89\x0b v(" "\x0b\x36\x1c\xe5\x7fn_\x11\xa9G\xecG\xb9/\x8dh\xf8}J\xdd\xe5\x9d\x13-\xc1\xb5#\x37\x83\xbc\xff\xfd\"\x89\xcb\x9d\x8a:\xe9\x81" "\xbb\x98J\x32\x02\xc7g}\x97\xb4\x44\xfc\x37\xb4\x9ew\xcep\xdf\x39T\x0b\xe2\xce\xdc\xab\xf2\xce\x30\xb1\xef\x34\x85\xbe\xb3\xc2\xbfG\xf7\x94" "\x07{@\x44\xce|\x8f&\x87\x8e\xf1m\xffo\xce\xf7\x9a\xf2.\xb3\x37 t\xaa\xf7h\xb5\x0f\xc4\xea\xdf{|\x8c\xb7\x89O*@x" "\x16\xbfs\xf3\x8e\xe0\t\xb0t!\xff\xd3\xfe\xfd\xce-\x32\x82O\xc4/\xc7\xcc\x1b\xeb\x81\xcb;\xbej\xf5\xee\x39\x18_\x05T\x15\x18\x9e" "\xb7\xef\x1cJ\xdeY\xfc\xef\xf1+\n\x33^|mm\x97\xe1\xf9\t\xdc\x92\xdf\xd9\x11\xbf\xb3\x33}\x97\xbe.\xe9\xa1\xf4\xd3\xfbg \x0e" "\x17xg=~\xdf\xc0\xb4\xfb\xce\xa1\xfe\x9d\xfb}\xdf\x37\xdfk\xdd\"{\x65\xd9\xf6\xc1Pj\x1f\xacKV\xc6\xd2\xb2\xb0\xc5W$\xfb" "\x9b\x0fN\xc0\?hk\xff`Q~\xd0\x01\xf0\x83\x86\x9f\x0f\x16\xe5\x07\x0b\xe3\x83\x0b\xcd\x1f\xcc\xec\x0f\x66\xcd\x07\x33\xe1\x83\xbbn>\x38" "[V\x8c\x96_\x0c*\xf5\x41_\xdc\x0f\x46\xda\xfe\xe0\x97~\xf0K\?\xb8\x95\xf5\x83\xdb\x17>\xd8\xbb\x7f\xfe\xcd\x8bI\xeb\x9d\x0b\xba\x9f" "\x0cU\xf6\xb9\x8dO\xa6\x94\x01\xf4\?\xb9\x1b\xef\x93&\xf5O\xaa\x06\x9f\x38\x42\xd0\x30\xd9+\x06:\xbc\x05\xf5\x1b\xfd\xdc\xb3\xed~r{" "\x91n\x02\xd8\xee=\xf9\x8c\xb1|\xfc\xc9\x99\x9a\xe0#m%\x9f\\Z\xfd\x64t\xfa\xcf\xa4;K\x0f\xf6@\xdf~\xfd\xf9\x99{q\xbb" "\xcag\xba_\xf4\xdb\x31~\xcc'\r:\x9f\x8c\xe6\xa2\x18\xdd\xe4\x9dr\xc7\x8d\xd2\x34g\xc5<\xe3\x0c\x64&\x33g\x43\x9a:\x66\xdcv" "\x39\x8b\x0e\xcf\x80\xc7\xfb@\x38;\xcc\xd8\x96\x15\x19\xf0L)\x87v\xa1_)t\xdfYt>\xdfn\x43\x9d\xb1\xa9\xcf\xa2\x66K:L" ":\xb4\x89\x34\xa1\x43\xd2\x8c\xe7-\xb8\xb7\xd5\x8c\xf1]\x66\\$\x98\x45\xd3\xbd\xf0\xaa\x33^:\xe7\xab\xcd\x0fi\xa0\x14\xda\xa0IS\xe8" "\x95\x63\xfc\xf9\x94|\xefR\x1a\x00\xe1\x99\x38\x63\x38\x06\x45\xda\xc2\x66T\x1b\x65\x46\xf3\xe2\xc8\xe1j\x16W\xbe\x80Y\x43\xd1\x8c\x0e\x7f\x33" "\xd6\xe9\x19\x0f\xa2\x98\x31\xde\xe9,\xfe\x34\xfd\x66\x96\xec\xb7\x1c\xa9\xd7\xcc\xa8\xd6\xcd\xb8\xca\x36\xb3M\xbe\xf8\xca\xe4\xa5\xc2\r\xb1\xb3\xe4\xf5" "\x02\x08K\xf5\xccs[\x30\xdcs\xb1\xf6\xe2H\x96U\xe0\xea\xc9\x91\xcb\xb0J\xfd\xeb\x84\x32\x9e\xb3R\xce\xb3\x66\xe9\xf1\x99\xe3\x36\xa6\x8f" "J\x81vy\x61\xf7\x1b\xf8\x39!\xce\x1c\xbdp\x19tH\x31\xfc\xd5/\xff\n.\xf0\x33:;\xcd\x36;(\x85\xcd\xe5\x82\x01NH\xe5" "\xf6\x1cYg\x9b\xce\x12\x08\xcd`\x86\xa3\x35\x0bsV\xe4\x39-\x8c\x8a\xe9\xf1\x37(\xe2\x98\xce\xb9\xb8;\xe7\x16\xdby\x04\xa7\x87\x39w" "\x37\xcci\n\x9e'\xb9\x1eKz\x9et\x1f\xe3\xdb\x1dz\xe9\xcc\x19\xc4`\x9e\xee=\x39\xb2\xbd\xcc\xd3\x83)\x10\x9f\x38\xc7\x91\x9b\x8a\x0f" "\x8e\xfc\x82\x39\xedxs\x46\x93\x9ao\xaez@\x84\xc6Zl\xfa\xd6\x14\xd6\xf2\xcf\x31>.\xc7\x38\xe1\xc4\x8fRZ\xeb\x44\x10\x06\xff\x35" "\x95\xfc\x35\xec\xb2\xc5=\xec\xa9W\\\x02-\xc6gq\x0f\xd6R\x41\x8b\x39R\xa4_\xaf\xa0-s\t\xda\xe1s\x82\x16\x14\x44\xd0\x46\x35" "\x41\xab\x95\x82\x16\xb2X\xd0\xda\xa6\x62=\xae\xef\x82\xdaz\xb5\xa0\x19\x05\x8a{P\xf7\x04m\xadH\xb0\xdd\x89\xcf\xf6\x36\x17O\x90,\x36" "qq\x0f\xe7\x64\t\xb6\xd6\x8e\x7f\xab]\xd8#\x44\xea\xad\xe2\xd3&\xa8M\x46\x8a{\xc8]\x41[\xe2(\xee\xc1\xbe#x\x84\x1b\xc1\x9b" "\xc3\x10\xdb\xe8\x61\r)\x1e\xe8\xb2\x9dyT\x15\x0f\xa2\xd3\x8b\xe0\xce#\xd2\xa4\xe2\xa8sg[#\xccHI\x91S\x05\xa4\xcd\xf7u\t" "\xd3J\xa0x\x10V\xa8\x8a\x07\xeal\xa9\xcb\xc1\xb8W\xf2|\x9a\x9c|\x87\xa5\xbd\xe2\x01\x8e\xd8-\x1e@o+\xe6\xb0+\xa6\x98\x83\xad" "\x41\xd0\xb4m\x43~\xa9R~L\x8ey\xc9\xe0\xf2\x82H\?\x44M\x37\x64I\x1e\xfe\xd9\x36l\xc3h\xd5\x8fn\xaf)\r\x80\x16J\xdc" "\x30Z\xd7\xd1`\xb6\x12o\x66m\xa5x(\xff\x1c\x65\x8c\xc7\xf4\xd7%\x0c\xb7\x41\xb2\x80Y\x90\x9a\x8f\xd8\x87\x0eI\xa6\x1c\xa6\x88\x9a\x94" "\x9e\xff l\xbb\xfe\xd1\x9b\xa3\xbf\x84Q\xce\xc3 }\xe7\xd2u\x33H\xbe)\x84\xd2\x02\x83\xadIp<\x03\xcd\xf8\x32!\x41\xe6\xf3\x1a" "\xec\x33{gI\x93\x8b\xfe\x93\xf6:\xc8PV\x66\x93\x32\x14\xfb\xcaG\x0bO\x80\nO\xba\x94o\xd7\x11mU\ti{m/\x0e\x95" "\x0eJ\x99\xe7it\x0f\xb3 @\xaaM\x10\x44\rR\xfd\x0b*!$\xb3\xa4z\xe9h\xc2\xdbzs\x1b>>\x39\x39\xce\xdc\x08V\x00" "\xa3\xe9\xfe\x19\xd4NH\x0f{\x19\x8a=V&mv\xeb\x88\x9a\xe1\x12\x66\xba\"\xd9l\xd2\xd0+\x17\x9cY\x0c\xe3\xb7\x87\xb8S\x86\x34" "\x65\t\x9a\xaeV<\xf4\xaa\xa2\x11\xba\xea\x33\xcf\x01\xa8\xcb\x82\xe6\x0coh\xb6\xf0\xba\x64\x98\xe7\x8b\x7f\x08\x06\x0e\xc3\xb8\xb9\xf3\xf7S\xf4" "\xf7\x85\x91\x45\xd0\xd6\xb8\x8a\x87\xd8\x9b,h\x81%\x0c\xd3\x1d\x9e>\xa4R\xc9\x31\xf3\xba\"I\x9f\xce\x86x\xc8\xb6}\x88\xe9Z\xf1$" "\xca}&\x0f]\xec\x31\x87\xf4\xd6\n\x92\xad\x17\x0b\xda\xdc\xb9x\"\x35]\xe6:\x30\x06\x8b$\x9a\xda\xcd/NS\x35)\xbe\xf9\x88," "\xac\?\xa4\xe9\x9e\xff\x86\xa9\xa7\xa0MH\r\xd3\xfc\x1ev\x84\x14O\x36/\xd6\x87\x9f\xb2\x61\x9c\xb2\xe4U\x17O\xee\x8b\xa0\xcb\tq\x06" "\xfc\x61\xba\xf9\xc1\x14O\xa1\xa3\x1bZ\xc0\x96#\x97\x64(\x87\xae\t\xa9w\xcd\xb2R\x89\x95\xf9\x14[o\x0c\x31\x06*=\xc5v\x36\xa1" "GL\x42\xb7\xaa\x18\xfe\xd0/\xc9\xdfh\xd4\x37S\x42 \xad\x16\xb0{\x9a\x14n\x9a\xbf\x81\xb9\x06\xd4\x14S\xa3\x9bJ\x0e\xb4\xc0w+" "\xe0+\xe1\xa1\x65\x88M\x94N\x31\x02\x8bT\x9a`_\x88P\xf3\xadQ|t\xd4\xb0T\xb6\xec'\xd2-\xaf\xba\x1b\x01[\xbc\xb3\x19N" "\x04G\xb7\xc0\x31\xff\xda\x42\xfd\x18\xc2\x02,t\xc6\?\xb5\xb0\xe3\x82\xb6#\x46p\xc9|Y\x8d\x89\xfc\xdas\x14\x11\x62\x0e\x0b\xa2\x8e\x9e" "\xc6'\xb8u\x9c/;\xc2\xf2!\xf4\x34\xc7q\xf6\x34>\xeb\x01\xab\xa5\xa4\xf2\xb9i,=w\xe3\x66\x81\x88\xc7`i\x45\x11Y\x12\xdf" "\xe1K\x10]\xc6\xd0s+\x1e<:\x86\xbb\r\x1e\xc3\x8d\x30\x92)zR\x62\x9e\x37\x82\x16I\xc0\x10\xab\x05\x46\x83\x33\x82I\xdbQ\xf3" "\x14\x06I\x45T\x8f\xe4\x1a\x39\x08MW\xb0\xfd\x01\x64\xe5N\x1e\xf0\xad\xd0q\x05\x17\xdf\x44\xbc\x37\xb4Y\x43\x7fo\xd5\x66\xfd%\x85\x8e" "+N\xf5\xe0\xe0\xf7j\x90\x9e\x16\xfeY\xb4\x1a\x31\xf7\xbc:\x89z\xeb\x19\x07\xd3\xa3\xe0\x45\xd3\x9f\x92V\xf0\xb1X\xa6\x30\xf4\xa7\x42\xa1" "S\xfc\x88\xfa\?^\tU\x62\x01\n\r\xa9\x66>\x32\x84\xb2]<\xdd\xec\xa0\xc9o.\xe7\xc0\x46\x8b\x88\x9c\xde\xdc\xa2=#\x84\x98`" "\xe7\xcb\x11S\xc6\xe2\x19\xe2\x9f\x1b\xb2\xab\?\x8b\xec\x34\xf7\"\xc3\xc3\t\x9a\x19\xa4x\x86#\x81\x14\xbf\x1cu<\x9d\xf2\xc8\x63I\xb0-" "W\x82\x16\xafX\xd0\x62\x13\x0b\"\xf3\x04]~`\xdbW\x9a\x96\xac\x37;K\xf6\xf1\xb8\xd4\x82\xfc\x08Z$\x83\xe2\xd9&\x37K\xce\xf7" "\xa3W\xdd\xc2\xea\xd7\xea\xa9K\xf9\x06\xa2'\x88\x64\x66\x89\x62\x15k\xfb\x82\x16\x1a\xbcX\xc5\x8aR\xb1\x8a\xd9N\x91Q\x06\x8a\xf5\xa8o" "\xc5\xd6\xc0\xd1P\x82v\x82\x92\x62\x07\x38\xc2\xef\xf1k\x17h\x9b\x8d\x8b\r\xf8\xdb\x1a\xc6\xef\xf7\x46q\x12\x45\xf1\x1a\xf3\xa3\xa2\xfa\xea\xcb" "{\xc3\x7f\xbfx\x1d\xe5\x96\"\xa5\xe5\x17H\xb6\xe7[\xb0x\r,\xf5\xe4Wx\xf7\x8b\x64\xee\x1a\x86z\xd4\xa6\x05\xa9\x10\xe9\xfeI\xfe" "\x81\xf6j\x98~\x08\xb5\x18\x88\x82\xe8\x97\xae\xd9K^\xe3\x30{\xc5\x99\x1e]r\xf2\x94\x95\xcc\xc1\xc4$\xd1\x36\x38r^\xc3\xc7\x46\xf0" "\x00\xbf\x62-\x46\xb0z\x03l:~\x00Q\xcd\xaf\xe3\xd7\x9e\xa3~\xef\xcf\x8a\x92~/,\x0b\"\xad\x90'p:\x17\xb4\xa9\xaa\xa0." ".k\xa4\xf9\xa4\xb9\xeb\t\x98\x88\x80z\xaa\xed\xc0V\x1c\x39\x62\x82-\x14]\x80\x62z\x30\x0f\x17\xf4\xf0\x16\xc9\xe0\xc0Q#\xcb\x9aG" "\xb4H\x0f\x63+\x19\x94\x17\xab\xc4u\xb2\xbc\x80\x11\xa0x-wr\xf4;\xa6\x87\xcd\xb0\xbc(\x92Mm\x05Y\x9e\xac\xa0\x8a\x9cU\\" "\xc3\xa7Kp\x82\x42M\xdf\xce\xe2\xd9\x14v;\x91>\xcf\x81\x36\x89U\xfc\x05\x42\xc9\xbf\x86IU\xd0\x0c\xc3\x82\xf7M\xc7\x10\x91\xaex" "\x9b\xec>\xdb\xb7\x0cM\x12\xd4\x95\x81]\xab\xd9-\x98\xe0\x14\x97@\x14\xb3\"\xec\x66\x42\xa1\xb4)\xc2\xaf\x01\x14\x13\xb6\x16\x66\x9a\x82\xcb" "\xbe\x63\xb8'\x46\xa8\x16\x95\x87\x16\xf5\xfd\x16\x0c\xc0\x8a%G\x9c\x8a\xe1\x14\x0eG*]\x12\x9b\x8e\xec\x39Z\x38'\x44\xd0\x1c\xb1\x05\x8f" "~\xa8\x61\xb4\x10\xcd\xd9\x90\x9a\x8dR\xf6\x1fJ\x65\xce\x04\xf7`\x93\xd4\x88j\xb6\x01H\xf5\xd1\xe6\xbe\x41\xe9\xc6q\xfb\xc7=\xa0Y\xa6" "\x0c\xa9\x8b\xb4\"\x0f\xd3\xa6\xf4\x9f}\xa0\x92Pl\x89\xc2I\x9d\xb3\xa5\x36\xec\x9d\x87t\xad\x07\xa3\n\x89z\xb4\xfe\xcb/\xe7\xbc\x41\x99" "\xaf\x8d\x16\xde\x82\xa5\xd3\x90s\x02\xba\x95\x14[^\x0c\x61\xc3\x93\xd1t^\x82\x95S%\xa6\xa2\x05\xb4\x10~\x45\xb0\xcb\?\xb4\x30\x9b\x82" "\x0f\xa7\x8eQ\xee\x05\x61X\x33\x92\x9e\x9e\xd6<\xa1.\x66\xc9\xa5\x42\xb2\x34\xdb\x1b\x87\x63\xeeLJ\xf6N\xb6t\x9e\xb9wr|\xf8\xaf$\x1a\x8c$ \xf8\x04\xd2\xfe{g\xf5\x16\x0e\xb3\xca\x7f\x12\xa4\x9e" "\xb3\xaf\x46\xf2\x45\xa0/!\x0f\x61\xf4v\x1a\x9d\xd5\x32w\xd6\x84R\x99*\xd9\?\t\xf0\x61\x42\x9aWO\xa1\x66 \x07\xfdx\x84\xef\xbf" "IYz\xd1\x02\x1d\xb1\x0e@\x37\x17\xe4\x8bNv\x1d\xd5Y\xcf[\x9d-\xac\nN\xd9\x17\xd8j\x8c\xe0,`h\x0b\xdfl\x41\?\xf7" "\x8e\xf1\xb8\x8aU;i\x94l\xd6\x1c\xcbZT\x95\x05g\xc9\x14M\x11+\x35\x82U<\x0b\xcb\xec\x8aW\x8eR\xe1\xb0\xfdJ\xa4:o" "\xc8\xae\x13\xe6Y\xc5G\"\xba\x80\xf8\xf6<\xdc\x00\x33\xd0\x16\x36Z\x0b\xb6g\xc4\xb9\x63\x88\"\x95\x91\x10P\x1d\tn\xad\xcfH\xd2\xca" "\xa3\xdf\xd1\xbf\x7f\x08\xafJ\xa1\x1d\xb4\x1d\xb8J\t\xbe\xa0\xad\xe3 \x04\xd0\xe9\xae\x63\xa6\x1b\x82\x83@\xb1\xc5\x39\xb2\x62\xd2\xc2\xed\x93\x1c" "\xdajr|\xe8\x18\xae:\x39&>\x39\xfa\xb7{G\x80S\x8c\x0c\xc3\xe1\x37\"\x9d\xf3^\xd0\x0e\x14iU\x32\xca\xb1\x01\x8eg\xe1\xe6" "\x95V\xe6\xa3\x95\xb6\xd6\x19\xc9\xb3\x00\x1e\xab\x8aS\xe2'\x82\x66\x0b\xbd\x41\x1d\x10u\xd7\x9b(M\x86-\x44\x17\x15|@\xdd\x80O\x80" "\xe2\xda\x91Z\x42\xcb\xabO\xf2\x36\x02Z\xdc\x31\xc1\x8f\xfb\xec\xdbz\x14\x32\xa5\x0f\xc4\x35g\x94\xad\xe4\xc7\x06\xec\x16,\xc1\x82\x98\xcc\xb7" "\xd2\xd3\x12\xc2\x84\t-\xa3S\xc5!v\x82\xf7\xcf>v\xd0|\xd9\x92\xe9.\x0eUVzO\x44\x81\xc3Q\x41\xf1\x84\xc8\xbb\x8do\x81" "\x13\xde\xe2\x8d/\xc0\xdc\xa3z\xd3\x82Q\xb9\xd8\xc2y\xe3\x82\xd0\x46Z\x9b\\\x81\x88\xe2\xc5~\x37\xc1\x06\xea\xd1\xc6\xc2\xe2\x17\xef\xa3U" "\x89\xd3\x99{\xda\x1d\x07XI\x31\x0c\xbb\x64\x8a\x8f\x38\xe6\xb5\xf8Hu\xfd\x31*<\x03\xcdIG\xd0N\xa1\x10\xc4(\xf0\x88mL\x86" "\x34`>\xf2\x01\x8f\xd8S*\xd8\x32\x95\xe2\x31\xc1\xd4\xe4)\xdd\xb3\x66\x38\x8a\x46\xf6\xa7#,\x64\x0b\x9e\x97\x80\xd5\x17\xf9\x9f\x8a\xe9\x08" "\xc1\x64\x04g\xf6\x42#\x1c\xd4!hn@\xc5\xd1\xa6\x62\xf5t)\xfa\x07\xbf\x61\xc9i\xd3\xf2\xef\x9b\x07\x11\t\xc5\x14`\xf9\xb7\x1a\x46" "\xaf\r\x9c\xe3(\x12\x94\x1d\xc1\x36\x15\xda%V\xca\x8b\xcbh\xf7\x1a\x98;\x81/\xb6\xd2\xaf\xe4]\xaaY\x15\xd2\xd1\x0f\xf0\xf8\x02\x0b\x12" "\x42\x61\x80_\"\x88\xb3\"\xefU\x98J\?\n\xaf\x1c\x91l\xb9\x42\xb0Ts\xd4\x15\xfb:\x1f\x62Nn\x86\xba\xab\xce\xfc\x34\x45:/" ";\xea\x0c\xd7\x62T\xa8\xf4\x00T\xff\x31\xde\xec\xee\xde\x11\xb1$\x85vyG[\x01\x15\x84\x16\xa2g\xaf\x44\x93\x05\x0e\xa2W\x89\xcf\x1f" "\xf1\x89\xe8\xf8\x15u\x17\x1a\xfa\x9a%m&KZ\x05\x15\x39\xcdY\x62\x1d\xde\x30\xc2\x64x\xc9\xb9\xe8\x32>\xf9\x05\xe6/\x81\xa7kG" "v\xc9K\xac\xd5(R\x16\x95\xda\x82\x05+\xc5W\xc6\xd7\xc8\x83\xb8\xf9\x1c\xfd\\\xb0{_J\xf5H\xf7\x9b\xb1\x45\xe0P\x89\x7f\x8e\x1e" "}I\x0b\xc9\x12[V\x04m\xcdNp\xf2\xe0\xa8\xfd\xf8{M\xfeG\xe4TK\xdb,\x96\xba\xacz\x8f,@\xe4k\x43\xcfS\xa1\xc9" "\x1b\xdf\x18\xa6\x08\xc1\x89\xfc\x9fTPm\xe2o|\"u\x7fM\xc7\x35\x90\xcc\xfdN\xd0\x96\xc5\x05\x31\xa5Y&\xcdSG\x1a\x16\x96I" "\x87\x37\xe8\xee:R\xcd\\\xd2N\xbaL\xde\xeaR\x87\xb0;W\xa4%\xde\x8b]\xd9\x32\xcd\x37\xa5\xc6\xa7%\xfc\x39\xe7@K\ri\x9e" "\xc7\xb7\xb0\x8bYR\x33_\xc2\xaf@po\xe8\xa8\xf9\x8d\xe9\xf6R:\x18\x1c\xe0&\xd4\x16\xb8\x04oP\xa1\x36\xefV\xfd\xd7\x9c\t\x08" "R\xb6\xb0\x12\x82\xe6\xa8\xa2h-g\xcdu\xab\x35\x9b\r\xe3\x10\x08\x9e\xe7\x89\x05\xe0\xcd=\xbb\xec\x35U\xf0\x35\xcd\xd8kV\xfb\x35u" "S\xc5\xbf\xef\x01\xbc\xc3 \x41\xe3]\xb3Z\xaf\xb9$\xb3\xa6\x1e\xb3\xc6\xd6\x12\x41;O\x42\xd0\xf6\x02\x17\xd7q%$\xc1\x9dQ\xd1\xea" "\xd0\x9a\xea\xc0:\xb1\x63\xc9\x0c\xd5\xcf)\x87\xab\x10\x45S\x90o,\xe8\xcf\xa0\x65x\x9d\x8e\xad\xc6\xac\xb9\xf0\xb3\xc6\xa6\x61\x45\xad\x33\xa5" "\xbd\xbfy\xd1\x11\x93\x00\xa3\x98\x8d)\xed\xc1\xb5Y\xa8\xad\x37\x95\xf6\xb0\x33\xd3\x30\xca\xf5\xffV\x05H\x96\xad\x8amGL\xcd\x8d\xfa\xed" "tW\xe0\xed\x13\xa2\xe5\xa9\xf4\x0b\xb4\xe3\xe5\x04\xe5!\xab\x42\xb8\xa3m\xa1\x31\x84\x62)\xd4\x8emU\x1c\x03m\x8dQ\xd0N\xc8\x31\x94" "\x17\x46\xb1\x99\x94~L\x82\xd4\xe7=^\xaf\x80:|~\xc1\\\xa2\xd2\xda\xf1\xcf\x8c\x00\x42'\xbc\xb9\x45\xf2\x17\x34s\xad\xa1\x9e\xa3\x63" "\xb1\x1eL\xdaT\xae\xb0(U\xda\x8b\xf7Z\xc0\x63\xbc;\x96\x1e\x05+kG\x1c\xbeg\x34\x1d\x8d\xc2\x0fU\xbc\x65|\xbb\x07\x34\xc7~" "\x41[\n*\xed%\xb9\x07\xc7ht\x87\xb2\x35\t\x1a\x07\xa8\xf9\x83\n\xb5\xd3\x00\x05\x9b(\xb0\x64\x80\xccOw\xf6\x1d\xb1\x98\xe7\x14\xcb" "m&\x45\x17\x8f\xe9\xf8\xde%\xe8\xc4N\x93\xb3pYPs!}\x1d\xe3HL\x93\xfc\x35\x84\xa6\x9f\x07\xe1\xb2=|Pz\x36\x07\xd6" "\xf8\x07\xb6\x0c\xa8\xb8\xe7\x88\xd9\x9bQQ\xd2\xa3\xf1\xca%\xaf\x45\x38\xa3\xc1\x10-\xce(\x46/\xa3^\x65\xd3\xd1:\xdclr\xea\x18\xef" ",\xbd\xf2\x8b\x84\xd5_\xd0\x90z\x01\xfc\xbcq\x0c\x8f\xfe\x44\x35O\x7f'Q\x61\xbc\xb1u\x0e\x93t\xa5\xaa\x89\xda\x89\x00\xa2\x86\xb0\xa1" "(\x45\xe5\xdb\xe4Pp^\xa1\x05\x93'\x46\x89\x17\xa9\x82\xbc\xda\x34\xf0\x30\xff\x8c\x8d\xf9)\x0b\x0e\xed\xaf\x0f\xe5\x1f\xd1\x8a\xe7\x18\xf1\xa4" "\r\x11\xf3\xde(\x16\xba\x94\xe6\x89\x05\xcc\x02\x95\x16\x89\x0b\xe0\x92\xb2\x99zJ\x8c\x9cP:\xc6\x0e\x01\x41\xdb\xb4 h\xca\x84`)O" "|&\x8e\x81\xd6\x87\x1a\xfa\xad\xa3\xf3O\xf9\x7fS\xff\xa6\x44\xb4\xd0n\x82\x97\xaf\xd9_\xcd\x1a\"h\x93*\xc1\x1e_\xc3\x42\x93\x08\xf6" "\xf1\xfap\xe5\x13\x1c\xf3\xef\xcc\x0fGp\x35\xcd\x64\x01\x14=\xc1<^\x16>\xaf\x82\xe7w\xc0\xca/\xb0\x81\x97\xc7\x94N\xf0\xb6\xef\x08" "=N\xa8-\x07\x08\xbe!K\x13\x0bo#\xd8\xc0\x83\x93\x07\xe4\x0f\xa2\x1d\t.\xee-w/\x33R\xba\xb7\x86\xb4,\x11\xad\xb0\x8f\xbd" "L\xe0\x8e&h\xeeh\x82#\xdc\x0b\xb3m\x41s\x8a\x91\xcc\xe2\xf5\x9b\xdb;\xa2\x65\xda\t\x8b\xf9$*u\x81\xa6\x62\x95xN\xa1\xa0" "\x39)\t\xda\x84\xb9t\x02}Y\xd0t!\xc1;\xeb\xfcO\x12s\xc6\x35\x44\xa0\x62\xa1y\xfe\x84\x0e\xfd\x04\x81\n\x04'\xb8\x14\x87\xbe" ")\xae\x81x\xd5\x13\x8c\xf5\x82\x36\x17(\x9d`\xfaP\xca\x63\x83J)\x0f\xff\?\x43\x84\x30\x12\x8a\x9a\x96\x87\x87\x64\x89\xa7\r\x1a\x8a&" "\x89\x89\xa3I\x98\xe1\x1b\x95\xde\x10\xbe\xfb&mn\x1e\x41m\xe6n\x88\x65\x9fR\x9e}\xa5\xa2\xcc\xd5\x10jW\xa4\x97\x03\xe2\x8b!\x8e" "\x0f\x11\xb4xQ\xa5\xfc\xa6rj\xe7\x45W]\xd2\x05[\x97\xeax\xd8\xc6\x8cQ\xa5S\xb6\xf7\xd3\xbf\x95\x65\xfe)\xc7\xca\xd3\xa8P\x02" "\xd6p\x1dk\xb2\xa2\xea\xdd\xe6\x0b\x02i\xd9M;\x8f\xec\xb4,\xe1g\xcd\xbeG\xa5p\x44\x10\xa4\xb3\x45\xa0\x1e{\x11R\xf9\x31P;" "\xaf\x39H\xad\"\xf4\x03H\xbf;\xac\xec*\xb1\xfb\x32\xea\x01\x33M\xd2S\rz\xe1\xbd\xd3\xfe\x01\x8e\x19\x82\x34Z#\xe6G\xe9\x34\xb6" "\x43\xfe\x04\xf7\xf1\xbap\x82/\x9d\x62jU:\x85!\xdc\x30\x9c:o\x92\x86\xc7\xf8\xcei\xec\x45\xf4\xbf\x96\x66\x12~\ti\xa6\xcf\x1a" "\x95\x06\xc9\xceY%\xa7\xd8km\xf8\xb7\xbeUWi\xdf\xee\xa1i\xc8\x36\r\x0c\xf9z\xceJr\xc6\x9eSp\x02w<\xa1\x66'W" "|\x07\x9a{\xbd\xe2\x1bq\xe1(\xed#\xea}\x07\xc9v\x65\x1a\xc5\x9c\x14tYv\n\xf7\x45\xa3\xec\xf1\xcf\xa0\x9c\n\xae\xca\x8e\xf0\x11" "\x16j\x1b\x42Kg\xd1N\xc1\x11\x96\x91\xd2\xd6\x9bN\xe9\t\x96\xd4\x94>\x12\xfd\xa7w\x98\x9f\x85\x1e\xcd\xb1\xb7V\xe9\x12h\xae\x98\x86" "\x38\x11\x43h\x61\xd7\xf1oq\x16\x36\x31[\x02\xd4w\xa1\xb6\xea\xa6x\x85\xa9\x88Rnor\xcajy\x86\xa0\xc5\x82\xe7\x05\xc7\xf0\x37" "\xe7\xc5\xe8\xa4\x10\xe5>\x35\x98\xe3t\x87i\x65G\x84\x9bwI\xc6\xd1\xf8\xf4\tR\xf9\xd1\x11\x07\x89\x1a\x8d\x9b\x34\xf8\x89t\xc9gU" "\x8e\x1c\x43VU\xca\xba\x1b\xbb\xcd<\xac\x35\x1d\xff\xe6\x1fl\xc7g\xd0\xf4\r\xc3\x37u*\x8e\xe1\xc3\xee\xef\xe4\xff\x90%\x36\xe3U|" "O\xa6\xcc\xdc^!\xe9\xf2\xe3{\x1f\x38\xfdR\xa8-\xd9\t\xfa\x9d\xfdP\x0e\xa7\xe1P\x0e$,\xf8I\xaf\xfeg<\x81\x43)\x83y" "\t\x1d\x9d\x10\x7f\x43i\x8b\xd6S:\x43 p\x91\xecH\x0e\xc1\xe9\x9e\xa3\x36\x8b\xdc\x34\x9e\xfe\xb0\x63\xb6\xb4\xd9\x07\xbb\xa1\x33\xb6\xb3\xb3" "p\x42\x87\xd0Y\xdf\x11\xb6\x33\xa1\x18O\xce\xe2\x9d]\xe2\x03N\xc1\x10z<\x8c\xbbx=\x8e\x32\x8a\x1c\x7f\xcf\x38.\x9f\xe9\xaa-\xdf" "-\xce\xdf\x13\xd1\x1c\xe2\xd3s\x62\x9f\x88\xd7\x88\xcf\xd0\x16q\x14\x86\xa0\x85\xdf\x16\x84\xf6|\x46\x65\xf3\x0c\x0e\x83\x86\xd1\xf9\x19\x8c\xc0&" "y+\xf0\x46\x86]\xbfv\x1e\x8b\xe3\xdf\xcfUt\xf2\x8f\xb4\x1a\xb8\x14\xe7o\xd4\x35\xcco\"\t\xa7S\xf8{\x42z\xed\x66.\xe6\xa8" "\x43\xfa\xefo\xe1\x16\xe8s\xcf\xc2\xc1\xb8\x42\x31\x9e\x9f\xc1l,\xd8\xe2\xdb\xb7\xcaq\xad\xbe\xc9\xf1\xcb\xdb\xb9p\x41\xbb\xe6\x88\xc2\xa7\x34" "\x07vr\x30\x18)\xe5\x9bvP\x82\xf1\x84\x1f\x8f\x61\xdc\xd6\xe2'\x1f\xa4\xe3\x64\xf7\x15\xee\x16&\xa5\xf9\x97Mn\xbe\xb9h{\xc2\xe6" "\xf0(\xdd_P\xfa\xd0 \x38\x87\x33,\x1a\xc0\xa1\x41\x92}\x03\x9aP\x36\x66\xac\x9e\x1bz[\x42h\x30\x43\x0b\x32\xf2\x1c~\xb0\xa0\x96" "\x86\x98\xd2\x0b]\x0e\x1c\xfd\xaa\xe4`\x00s\xb4\xd0\x13\x34\x33\x9c\x8d\x61h\x07\xdd\xa2#\xd0\x93\xc3\xd9w\xc1\xecl\x18\"\xa1\x88t\xf5" "\xab\x15\xe4\x02\x05\xc2)\x91\x62\xd4\x9b\xc2\x04\xa6\x12*\x46\xd2\x9c\x13W\x8e\x30\xaa\x18M\x1f\x0eq*\xbdHw\xef\xd1\xc9\xd0s\x35\x1c" "\x7f\xa1\xf4\xdd\x1b\x8e\xcc\xe1}L\xa1\xfex\x06\x1fm\xc3\xb8y\x93\xae\x9b\x38P\x43\x12\x46\x1dG\r\x32\x38G\xe3\xa2\x1ev\x16\x8e\xc3" "\x10\xfa\x8el\xf5J\xa8\x35\x90]\x64\xb2\xbc\x0b\xa9+~\x87\x9f\x02\x0c\xca^\x0c;\x04\x0c\xc3\x81\x16\xd2\xed\xed\xa0;\x85\xc5\xc7\xd0{" "\x07\xce\xf1\xce\xe0\xd9,\xb8_$\xde\x39\x86$s\x97\x11\x84\xcax\x46\xa5\xeb,=\x42/\x95\xb2\tJ'\xeb]\t(L\xd1\"U" "\xf3\x88\xcb)\xb4s\xe6\xe8\x1f\x16\x0e\xb5\x10\xfap@\xbcpL\xf2;\xa4] ;\xcet\x8c\xec\xd7s\xf9.x\xcfO\x34T\x9cR" "!\xb8x\xf6\xee\x1b\x61\x13\x0ci\x38\x39\xc3j\xbe\xa1\x1e}\x38\x39vi\xab\xb7\x99\x14\x94\x35\x95\xb6\xca\x96J\xe9\xc7\x92n\xe6\xad\xc8\x02!\x8b\xdaG\xce\xe1i\x33\x7f\x45\x8cH\xa1\x16\xce\"\xed\xee\xa5\x93\x99'\xc0\x66V*\x30\x1a\xbe{$h\xc2" "\xab#\xab\x85\xd0\x37 \xf4H\x45\x8e\xe0J\x39\xe9(p\nT\xb0\xd3\x91\x07\x38\x89O\xa4\xc5\x45\\\xb8']\xb0\x1d\x92\x62\xd1\xc8$" "\xa9\xda\xff#\xb1\x11\x14\xfeV\xed\x64\x44\x8f\x35\x91|\xd3\x8cS\x38\x35\x88\xf4\xcb\xe7{t\x0b\xa5\x0f\xc4\xcf\xa4\xda\xcf\xd0\xb0\xdd[\x12" "\xd6V\x86\x05x\x87*\xfen*;\xa0\xb0\x85(\xb2\xb7\x32\x8a\x32,`\xbb\xb9\x61\x38\xd9U\xa5\xa9\x63p\xa5\x36)\x1auq\x44^" "\x46\xf2O\xd6\xcd\x82\xfdS\xd8\xc6U\xfar\x94\x8c\xd0\xa9\x99\xce\x06\xf1qp\n\x33\xa4\xdak\x94Y\x10\x92\xb6\xc5)\x35]\n\xde\x33" "\x0fN\xaf\x8a\x05\xc7\xb0\xc4g\x92\x17\x10'\xad\x05\xe9\xea\x81\xfe\x84\xfc\xa3\xa3\xdc\xd9+\x88\xb9\x96\xac\x33\xd7p\xa2T@\x8c}\x45\x46" "#Q:\x03\xbak\xacR>\x14\x36\x98\x82\xfe\xeb\xe9\?J\x37\x8e\xd9G\xc2& \xf8\xee(\x0f\x15u\xc2\xcbU\x12\xd2\xf5yx\xdf" "\xf3\xe3\xc8\xcc\xcdJ\xcb\xc4\x17\x19\xe3\xe1\xa7,R\x99\xcf\xbexqT'\x61\x7f\xca%\xdf\x05\xdd\x41\x41tp\xdd\x39\xfe\xf8\x93\x91\xd2" "\x11j\x18\x0eH\x11\xbc\xe2\x9dn>\xa2\x93\x35h\xb3\x1b=\xf1\xd7\xe6\x84\xddy\x01\x07\xb5+\x0e\xe0\xb3\xe7T\x63\x45\x9aK\x85'$" "{\xac\xab\xb7\xcf\xc0\xbb\x03\x9c\x38\xe2\x34\x94sk\x91\xdc\xf2\xd5=\x1b{\x05uK\xb0X<\xc8\xdf\xd5\x02q\xa4M\x62\x37j\xb4\xde" "\xce\\\x96\xb4+\xc9\xd3\x97K\xe9x\x97\x9a\x43!z\xe5\x03\x46\xf7\x7f\xf3\x05|\xb2\x44\x1a\x1f&\xed\xddPJ\xe3o\xc7\xd0\\\x8cR" "=P\x89\xdd\xa4Q\xaf\x36\xe3\xefP'\x85\xf6\x1f\x03}\x98\x38\xa5\t\xa1\xc0\xce[\x31\x9b_\xff\xd0\x10z\x46\xa4\xc9\xee\xa6\xc2\x07\x42" "UW\xe4\x34\x14\x34\xf4/\"\x85.@h\xfe\x91\x43\x9cIg\x8b\xf8m\x99\xd4\xea!\xe1j\xfbG\xd3\xbd@W\x0fN\x43\x0e\x0b\xb5" "\x88<\x41\x82)\xce\xe8\xfb\xbdS\x38\xda\x80\x16\x8f\x02\xad\x85\x8eP\xa5\xc5\xda)u\x01\xa5\xa1\xaf\x12\xea}\xd5l@\x1c\x39\xc2\x05[" "\xa8m\x8a\x32\x44\xf6\x44K\xff\x81u\xe0\xfb->\x61\xb6/J\xc4\x8a\x63\xf8l\xf7Vr\x9a\x1c\xed\xcb\xdc\x45\xe6\xf5\xf0\xac\xf3\xe4\x34" "\?\x0e\xd2*\xdcM\xd4T,\xc6\x41\xaa\x7f\x65(\r\x0b*\x85<\x11\xba\xff\x1a\xa8W\x95\x45%T\n\xa1\xeb\xd6\xe6\xe2\xd6%Q*" "\xb8.\x62R\x85\x97-\x17\x34\xbc\x17\xc2\xcb\xacJ\xe9\xc1^\xba\xc7n\xcf\xeb\xd0\xea;[\xa3V\xdf\xa1\xed\xfeT\xc3\xa1k*M\x43" "\xe6\xaf\xd1\xb4\x10\?Rp\xf7\xdc\x31\xde\xa9\x05\xba\x1d\x87\xe2=\xe4i\xbc\x9f\x83\xeb\x93P\xcc\xf2\x14}\xbc\x85\x17\xbc\xe0\xf1\xb1\xa3v" "S\xec\xf7\xb9\x46\xa3\x18\xe7\xeb\xfei\"\x65z\x42\xea\x07\x05\x9b\xbe\x16H\xcb\xc4K\x62\xc3Q\x83/\x62Y\x43\xa4\xe7\xd4\\\x88\x95~" "\xa7\x63\x34\x1ey\x8e\xa3g\xbe\xcc\x82\x1d\xbd\x89\xc5\xc5\x33\"\xbf\xac\xf8@|t\xf4\xc1\x80\xb6\xec\x02\x8e\x63\x14\xac,\x1d\x65\x88\x46\xdc" "\x34\x93\xe4\xb3\xa2\x9f\xef \xd5y\xe7\xca\x9a\x36\x9e\x42X\x82\x14Z\xed\x86W\xa9\x1d\x61s\x9e\xd2&\xa7\xa6J\xbd\x31\x85;\xd5\xbf\xe0" "\x7f`\x94\xb3\xa8\x42\xdch;JI\x45\x87\x9f.\xc1\x9bL)\xb3\xab\x81\xbe,n\xbe\xa4\xeb\x46T\x64\xb9\x35\x17\xa1 n\x9b\xa2\xb7" "\x85\?\xc3\xe4\xb6\x10\xb3W\x15\xd4\x05\x8f\xf6\x8cR\x1f\xc1o\x94\x0e\xe0.#tTs\x84\x33\x94\xd0\xf1\x05\xa2#(\xad\x38\xbaj\xa4" "\xdb\x16\xeaN\?\x1c\xd5!\x02\x96\xc2\x82\x9e\xd6\x35\x9eG\x33\xe8\x30\xd2\xd3h\x80\x45/\x7f\x97\xb2\x95\x96\x1d\x36g\xc1\xdc\xe6%\xc8\x8e" "R\x90\x93,\xa5\xe9\xc9\x11\xe9\xc8\x91\xd3\xe8\x42\xbc\xde\xe1RI!\xd9}\xf6\xba\xc0%\x42\x45\xef\x03\xa5\xb1\xc3\xb5G)J\?\xc9\x7f" "G\xbd\x61\x46\xdb\x82W\x95\x37\x06\xef\xcd\x05\x63\rY\xb8\xeb]\x96&\xb0/\xc5\xe9\x90^\xdc*q\x00\xc3\xbe\xa0\x92O&\x14u\xb0" "[\x1e\xb9\x14\x1f\x9fo%\x14!\\\xbc\x15W\xba@\x35\x46\xaf\x98\xb4\xfa\x81\xb6y\x41\xe7V\x8f\x43\xda\x0e\x38Iw\xd7G\x89\xe0l" "\xeaT\x95@,@\x15\xe0&\t\xfa\xb4H\xef_\x9dn\xae\xd0\xa0\x93\xe1\xaew\t\x42\xb1\x95\x44\xe8\xdb\x45\xf8\xac\x65Igl\x9e_" "K=\xd0\x8e\xab\xb8\x05\x1cOQ*\x88\xe2\xe9\xe8u:\xdd\x45\x96\xa6\xfb\xb8\x94S^\xc1\xb9(\r\xb4\x92\x17\xd2\xdc\xb9\x63\xb4\xd3\x89" "\x96'.\xa5\x1fhY\xe9\xf1$\xd3\x9b\x8a\xe4\x15\x03\x34\x9au\xd2\xe3\x61\xf6\n\xcc\x9c\x05\x17\x88\x9d%\xf4t\xea\x08\xef\t\xa1\xd7U" "l\x95\x10\xda\x81\xea\x95\xde\xef:\x66\x34\x43\x91\x32\xfd\xa1\x34&\x84\x02W\xdaH\?Z\xae\x1b\x43\x82'\xbaHZ\xf5\xf9:\x83\x43G" "\xae\x64\x15\xb8\xd4[\xf0Q\x18!V\x04\x61\xbb\x10\xe4\x13\xd8\xda\xd3\x11\xaa\x15\xbc\xda\x0c\xbd*\xc2\xc1\xcd\x90\x8bT\x05\xf8\xba)\x36\x1c" "\xb9\x42Q\x80\xfb\x9b\"\xbf\x18\xf3~\xc5p\x43\x99\xfa\x1f\x7f\x05\xfa\xcd\x42\xfaP\xd7\xf7t\xbfI\xe9\xd1\xab\x46\xfa\x31t\x84\xdf\x8e\xd1" "P\xa6\x9f=\x19\xfa\xbc\xd5\xa6\x9f\x13\x9c`(t\xc6*\x31\x83>\x8e\xdd(%L\xbd\xbb>GL\x17/\x1a>\x91\r\x04\x12v\x84" "\xbb\x14>\xec\xe7\xc5Q\xc6\xd8\x0c\xcd\x0c\xb7\x92\xc0\xc5\x1e\xa5\x89W\xa2\x9f\x97\xady\xbd\x90\xae\x8f\xc2\x35\x46\xbd\xc8\x36;(\xc5\xcd." "rl\x93\x9b\x45\xc7\x65\x19\xb3\x92\xee\xa3\xba\x91S[\xd8\x1c\xe2Yjw\x80\xab\x46\x61s\x89\xc2t=\xd2_Y\x10G\x64\x1b\xd5\x12" "\xc0\x32\x46\xc1\x35\x18\x41\xaf\x10J'\xc8\x93\r,o\x8a\x99J\xea\x9a\x9b`\xd8\xd6k\x12\x36\xaa\x19\xd5\xc8\x63\xf0\x10\x30i\xdb\x02\xb7" "\x0e)\xa4\x99\x89\x13\x13\xb6\xb3\xd1l\x42\x92\xfb\xd1\xf9 \xa7\xa5\xf8%\xd3\xdd\x33\x61;\xc4\x32\xa1s\xecJ\xde\xa6\x83\x01\x61\x33`^" "=\xbd;\xbaz \xd4\xb5\xa7\xcd\xf0@:'\x84T\x17\xe9\xb9\xe1#\x03\xc2t\x94\xca\xd8\xb1\xaf\xf8\x00\xc4\x34\xb8\xcc\x95\xac\x32\x1dx" "\xca\x38\xf4^q\x44\\\xe8\xce\x94\x9d\xdb\x8c\xc4ZG\x89\xe5Z\x46H \xc5\x9e#\xc2\x81+\xfd\xe2\x34\xa5\xfc\xb7\x1a\xa6\xc3KP\xdb" "U\xaa\xd8t\x64\x9f]\x46\x14\x42\xc3\xf0\x87\xeb\x0e\xd7\x8c\xca\x9cJ\x94\xed\x10P\xb5\x85s\xd2\xb1M\xa0\xa5\xd3\x12\xb6\xbfQo\x35\xea" "[\x46M\xf2\xc7\xea\xb9\xad\xa8\x1f\x65*\t\xe5\xe8p\xe6\x18\x1e{\xd4q\xfc\x9b\xffR#(\xd3\x04\xa7\x18\x9f\x1d!\x62\x8eI\x9b\x9d" "k\x19\xb1(\xfd\x00\x61\xceW\x64{.s\xa0.\xb3\x33-\x87=&\x46U\x65\xc3\x90Z\x0eg/\x1bM~{\x38\x0c\x44$,\xc8" "\x97#;\x98^\x91\xafY\xe0\x17\x94\x66v\xe6i/H\xf3\xfd\x8c\x14\xd7~\x82t\xce\x9c\xc1\n\x8a \xef\x08#]\x39\xaa\xe5\xd3\xf5" "\x1d\xfd\xaa\x44\x42\xb9G\x8d\xa2\xfe\xc3\x82\x97H\x9e\xda\xd8&}\x01\xaf\xa6@\x8b\xd4\"xw\xea\x08\x17^\xa1\xfe'\xdd\tu\x0cR" "\x38\xcf\x99\xc4^\xb9\xccU\xd6r\xd4\?u\xd4\x90\xab\xab\x45\x90\xd6\r\x0eg*\xd9\x89\x06\xfe[\xcd\xf1o\x39\xe4\xbc\xa5\xcc\x95\x38\xc1" "y\\nl\xae\xcf!Y@\xde\x92\x1eX\t\x1c}\x39\xa6G\x1f\xd1\xf8\x0c\x12T\x63\x45Z\xff\x8c.\xaa\x81zm\xb4\t\x31\x62\xc5" "\x41\xf2\xea#\xb4\x34\t\xd4\?^hs{\xc1\xeb\xc0\xa9(M\x38\x86\x16R\x98\r\x9b\xb4\xfd\x0bU\x96\x65z\xf7Z\xc9\xdc\x90\xd6\x82" "\xb2\xcd\x90\xbf\x03\xf5\xfa/\x14\x66\x64\xa5\xecq\x84\x32\xc7\xa6\xa7\x8e\xa2\xe8&\xa7sJU\xc7\xf0\xf5\x46\xb7~\x06\x9a\x80\xe0\x0c\xa0\xd5" "\xc3@\xfb\?N\x45\x83\x0f[\x65,!\xb9>\xf8\xf7\x16\x30\xa5\xe8\x9d\x31\x39\xd4\x34j\x0e\x46\xbfN\x43s\x99\xf5\xd3\xcf\x83\x0c\xe5\xa4" "\xa4LW\x87\x32\xb6\xf5\x19RMT\x1a>x\xce\x0f\x9e\x33\xcb\xbf\xf9\xeeK\xb6`\xaf\x34+~:\x1ch\xca\xd1\xaf\xa9-\xe5\x18\xb6" "P\xc1\n\xb1O\x44\xf7\x12\xefJ\xf5y%]\x01\xf7\x90\x9b\x1c\x82\x14\x11\xad\x41\xe8\xc1.\xb1K\xec\x39\x66\xaa|\x8cq\xad\x1c\xc3\x9f" "\xac\x1c\xb3\x0b\x8b\x8f\xf8\xcc\x63Ti\x84\x1d\x32\xd4\x1e\x11~T*\xc9\x05\xc9\xf2)H\x93\x32MR*\xa5\xf3J\x04\xa7 \x93\xbe\x8f" "\x83\x94\xe7\x97\xe6k\xc4\xbe\xa3w\xe1\x42\xbdN\x62\x83\x8d\x61\xd2\x1c \xa6\x94\x07y\x13\xf4{\x16y\xcf\"Z=\xbd\xb2\x14\xd3\x8f\x19" "v\xb0\xa8\xb4\xb6\xce\x8byS\xed:z\x9b\x12\xba\xd9)\xd1\x9eP\xa6\xdf\x62\x99\xeb\xc1\x65Z\xe1\x14\xc3\x8bJ\?v|\x83\x18\x83\x90" "X\xf5\x84R\xb9W\xeam\x45\xa8\xd7\x97\xb8QrL\x9e\xdb\xea,\x31g\x45h\xf0\xd3\xaePQ\xe2k\xf4\x32\xd8P\xaf\xc8\xdf\x39\x64" "\xc6-V\x98\x36\xdf\xb6\x8d&\x8am<\x86\x9c\xc8\x95\xe3.\xcb\xb5\x8f\xfe\x34\x1e\xf0\x43\x1f\x45#\x44u\x94\xac\xa2~S\x86\xdf\xb9\xe0" "\x84\x0f\xc0\xf4\xb5\x1cO\xeb\x8e\x88m.\xf4\x8d\xcf|\?pTs\xe1\x94o\xfc\x1e\x90\xf6v\xa5\x38R\x42\xe8g\x9eK\x33\xe5xq" "\xeeH\x7f\xdb\x32|\xd1\r\xbd\xef\x41\xe8\x33\x45\x0c\x32\x88\x37\xa5\xf8\xe0\x88\xe3\xcf\x94\xf2\xaf\x61\xb9R\xfc[}\xa4\x9d\x9dhR\x8ao" "\xd7\xd1Q)\x9a\x94\x93\xe5JM\xd5\xbf\xbb~\x89\xf7'\x42\xe9\x61Y\xe6\xaa\xb0\xa2\x17`rr\x8f\xa3\xaa\x95\xa2x\x93\xd3=G\xce" "\x46\x84\xa2j$\xc5\x89\xa3+'\x42\xc3\x1f\x16'\xe1\xb6\xc5I\xd8\x63*\xd2\xf9\xbe#W\xb9\x94\x86k+-G\xef\x46\x95\xc2\xdd\x10" "\xb4\xe8\x94\x06\x7f\xa3\xfe}\x95V\xc8\x66\x99\xbe\xb3\x92`\x07\x9f!\x42\x82\x81\xb2\xa4\x8d~\x87l\xa9|\xc6\xf9\x1dN\x10!\xf5\x03\x65" "\x03\x0e\x1b\x00\x8d\xea\xa6@j+\x1a\?\xc2\xefS\xe3\x1d\xea\x39\xc7\xf0:\xf5\x0b\"\xff\xaa\xceR\x86\x82_N\xae\xba\x44\x8c\n\xf0p" "\x17l\xbd\xban(Tz\x7f\xba\x85\x95\x93N\x31\xaeM\xe8z'\x12\xba\xb6\xa4\x1b\xb4\xb6\xa4\x7fG\xefJ\xa1}\xc7\x90S}\x66\xde" "\x80\x97<\xf0\xd5\x1f\xd7\x8e\xb4\xa5\x96\x93!\x0b\xf1\x99\x97\xbc`\xc4M^k\xd1!\xcf\xa7\x10i\x82v\x8c\xbd\x19\x8a\xfc+j-\xc9" "\x07\xeb\xf0\xe2\x9e\xf8\x99Q\x1b\x93%\xeb\xd9\xf2\x92\xc8\xac^\xf2\xf7\x1f>\xe5\x07\x35-\xdd=\x8d\xcf\xc6\xe9.\xa5\xbd\x37G\x35\x9b\x9c" "\x8c]\xf2q\x44(,;\xaeI\xa4\xfb;\xc4\x1a\x11\xdf\x9a\x1e\x1c\x12\xaf\x89\xd3\xa8\xd4\xdd\xfc\xac)\xfdz/\x82`\x0c\x82G\x43G" "u\xfb\xe0\xe8\xec\x43\x1c\xbd&\xcb)\\y\x14}\x9c\x16\xeau\x03\xbb\xf7\x05\xcfy\xd5\xc5\x95\x63\xf6#!\xf9\x35\x97\x98\xa0\xa4\x15\x64" "+\x8d\r\x8a>\xe0+\x65_\x87\x83\xea\x05\x9b\xa8J\\\x1fU\xf4!@h\xd4Z l\x03\xa4\xde\x91(\x92\x9c\x41[\xc2\xac\xef\x33" "\x17s.\xd0\xe0\xc4tr\xd0\x04o\xcd\xeam\x00/r\xa3l\x1aJ\xef\xf9\xca\x1d\xff\xf5Q\xb5Z\x8e\x46\x1a\x61\xf8\xa0\x44\x07x\x93" "jG\x88\xab\x0ciU\xa1%\x44\xa5trL\xf3\x45\x39\xfc\x05\x9cL\xcat\x63({\xcf%(\x9dJ\xba\x37\x0e\x92\x7f\xf0\xe3\x8e\x0f" "m\x42\xbd\xde[\xf4Z~\x08\xa7m\xe9\xeb\xc0\xfb\x03\x1a]\xca\xe1\xe1\xe3[\xef\x85\x84\xd2Q\xa5\xac\xf1\xa7\x39\xcbQ\xfa\x8bQ\xca\x87" "&\x41\xef\xda\x84\x66ti\xc4\xb5\x33\x0c\xef\xf8\xc1\xf2\x83\x0fq\xd9\x82}\x0f\x02\xf5\xab\xe6y]\xc9=\x64\x66\xcd\x87\x99\x86\x45\x63J" "\x99\xcem\x82.\x33\x43~)\xff\xfe:\"\xfa\x81S\xd7\x04T\xf2\xcd\xf7\"\xad\x8f\x42\xf6\xac\xcf\x89\r\"\xc6\xb7\r\x06+\x65\xab\x16\xea\x33[\xa5\xecy\x84\xfa" "\x00\xa5\x94\xfd\x93\xd0M\xff\xcdu\"\xba\x65\x94\xb1\x87S\xf0\x02\xca\x01\r\x34\x8a\xe1\x05\xeb(\x0b\x99(\xc9t\xe9\x8f\xfa\x30\xc2_\t" "\x36y\xfb&*+\"\xcd(\xa2\xf4]G\xd0\x10\xeb\x9c\x1aml\x0b\xaeO\xf4\x44\n/~\x8f\xc1j\xd3\xe5O]\xbel\x7f\x42K" "\xbdP\xbe\xcc\x80\?=\xa3[\xda,\x88\xb4\x86l\xe0x[\xf9\x9b\x1f\xb3\xd6(\x8dQK+\x7f\x16[I\x10\x8e\xdb\x95(\xf7\x02," "U\x80v\xf6\x9e\xe2\x17\xf0y\x0f\x08\xc3P\x05\xe7\xa5\x97*q\xf3\x85\xcb\xf6\x15\xbfu\x02\xfb\x61%\xc1\xd4S\xd1\x7fJ\x8f-\x43k" "t\xdc\xaa\xd1\x42S\x43\x98\xdc\xbf\xf5m\x46\x42\xa0\xb4\x8c\x94T\x1e\xc1\x93\xe7\xd7\xf0\x0b\xd4\x84\x1a\xfd\xdfkl*\x35l\xa7\x16\xf4[" "\xaeo\xa3\x9d+l\xc2\x37is\x94\xa7\xa6]\xe3`[\x33\x43L\x91k#\x35\x84\xe1\x10\xdc]\x03\xe1g\xa1\xa8Q\xca\xf0\xcd:\x1a" ":\xfa\xabP#\xaf!\xde\xa8 \xd4\x97\x1a\xbd\x80k\xdb\xbd!\x35:\x17\xd4h%\xa8\xf9'G\xb3\x07\xa0m\xf2\x34T\x0f\xfc\xa3\x0f" "\x97\xa2\xd1]\\=v)\xddo\"\x9eN\xa9\x16\xc3\x03\\\xd1\xdf\x07\x41\x83\x05\x31\xe1\xa8\xe1\x30\x02\x45\xdc\x0e\x01\xee\x0c\xd9Lk\xf1" "u\r\x08_\x83\x1a\x15\xf7\x1a\x17\x98\x14\xe3\xea\x84\xfd|\x8ds\x14\x45\x36\xee\x1a\x07\xa1\x1a\xabu-\xfe:v\x44\x10/\xa3\xc9`\x97" "\xe6\x18\x93Pok\xd4\x9b\x05\xc7\xb4^\xf2\x44'\x41\xac|\xd4\xb0{X\x10j\t\x37\x63\x1a\xaa\x8b\x8f\x9d\x86)\x12T\xa1\x1a\x15\x0b" "\x41W`k\tV\x9ej\\\xb5P\x94\x1a\xe3\xb5\x91v\xee\x1a\x07\xfaZ\n\x1b\xbf\"\x87\x8f\x1aG\x85\x1a;p\xc1o\xa0\x45p-" "\xd5\xd8\x13\xd6h\xbb\xac!\xe4Y\x89\x07R\tV\xd7i\xa7/\xea\x1d$\xec\xff\xa9q\xdfSMz\x10\xe9\x13\xa9\x17\x8a\x84\xf7\xe7\x8e" "\xbb\xba\xb6\x14\xf4\x89u\x04\xf9T\\\x02\xf1\x05\x8aq\xf3$>x\x80\xe4W/\xf8+\x06\x88:\xbb\x85:\xa2\xd7\x08\xc2\xca&\xd8s" "\xe4\xbe\x07\xa3\x16\xb1\xcf(\xfb\xc5:\xc2\xdc(^\x12\x9b@\x8c\x0b\x82\xb7\xe1\x19\xd2\xe4\xae\x9b\xc9M\x39\xb9\xedJ\xf1\xa5\xa3_\x99\xcf" "\xf2\x97\x8e\xe3\xf6\xe2\xb9\xa3\?*:\xc4;\x46G'\x44\xca\x16\xd0\xd5\xd0\xffZ\xa6\xb5\xfe\x05tLR\xf4L\x10\xbau\x87\x32\xa9\xff" "\xc3\xe5i\x93~\xa6t\xdfQI\xa3\x92\xdc\x96\\Ro\xc0\x87p\x97\xcd\xd5\x39WJ\xea[\\\xc4\xeb\x1dPL\x15\xea\xd1)\xf2\x1c" "\xdb\xcf\x05\xcf\x8b\x7f\xcb\x06\x9bL\x1d\xe1\xf0\x05\x61\x7fW\x94\x66K\xab\x63\x1d\x07\x19\x18\xc6\xfb\xfc\xcc^\x0b\xd8g\x36\xf4y\xdb\xccG" "\xbcV\x81\xa3\xb6\xa3\x46\xf4\xb7\x98y*u\x88\xef\x8e!\xdf\x46\xef!\xb7\xb1\x66RG\x94\x12\xc5|\\\xe5\xabN\xf8\xaav\x1e\x63\xa9" "\xce\xd1\xb7\xbeuU\x30\n\xbbL\xdd\x1f+\x18\x9d_\x92\xb6\x1d\xfdq\xf1\xfeS\xf2\x83\x9a\x8c\xe3\x45\x04Ox\x35\xbc\x0b\x14\xfd=\x85" "\x86\?<\xdb%>;\xd2\x9f\xa0\x1e\x17Z\x8eQo\x1a(\?\x9b.\x05\x8a^xq\xe9\x03xY\x90\x89\nh\x65L\xdd\xa4\x1eW" "\xf9\x41\xd5\x32\xf1\nxM\x19J@\x9d\x1d\x44\x9d\x1e\xa8\xf5\xf8\xe5>]\x17I\x7f\xc3'`J\xa1H\x93v=~[\xb2\xc7\xaeo" "]\x85\xd4}'\xfa=\xc5\xf1\x61\xe1\xd6\x1fuG]\x8a\x39\xe7\x0b~\xdd\x02\xb1(ROv\x7f\x1d\xb7J\x9cJ\xe1\xa0]\x91`\\" "\xa8s[Y\x9d\xfdk]\xa7\xca+\xe4\?\xe7\xb5\xf5\xa4\x31\x04\xde\xe4\x1d\xd5\x13\xe0\x33\x17$~\x9a\xd0\xe8l\x98\xf9\xc1\xcb\x8a\xbbq" "\xeb\\(\xa8#\x44\x99\xe0\xe0\x80\xc8\xeb\x9eP\xb1\x38\x07\xadS{\xab\xb3\x93\xaf\xdb\xe8\xfb\x19\xa8\xbf\xcf\x07\?\xc9\x0f\x05\x32\x1a\xdf\xb6" "HQ\xec^\xcb\xb8\x66U\xe7\x12\xb5\xa2g>\x1d\xb4\xeb\xe9\xe9\xc0Q\xfe\xa7\xae\xa7\x92\x7f\x0f\"\x94\x08^\x9d;\"\xe6\x9cQ\x1aT" "\xeaig'\xfc\xc1\xe8\xc9\xd1_\x31\x1d\xbd\x12\xd7\x8e\xe1\xeaq.\xba\xb8 -\x10\xab\x8e\xdb\xab|\x36RO\?\xd6\x8e\x34\xa0)\r" "_\xfa\xb1\xbd\xf3g\x89\xd8v\x0c\?\xfd\xa2\xa5 \x38\x81|\xf6.\xbeq\xb3\x87^-\xd3\x03n\x1a\xe8\x41\xe9\x45\xa0\xb8]`\x10\xe9" "\xdc\xd1\xdb\x97g\xa1\xc6+\xc4tUi\xb2\x18\x46\xebO\x97\xfc=\x36\x37G\x8e^'\x85\x86_\x9bMo\xc7\x9b\xdb\xbbp_,\xdf" "\xd7q\x86\xb2\x61\xf8\x83\x61\xddQ\xe3\x96`\xb4j\xfc\xcd\xcb\xc4\x05\xf0{J\xfc\x05\x62\xc4P\xa4O\x41\x03\x01\xe3\x14G@\x8b\xc8%" "\xb8j\xd0\x11\xa2\xc1}I\r\xae\xfc\x35\xfe\xfci\x18\x1b\x1b\xf4 np[[\x83z\x66\x03\x11P\x04\xa1g\x36\xb8(\xd7\xa0:\xd9" "\xa0\x13\xba\x62\x88 \x04\t\x33!\xa5T\xb7\x1a\\`k\xe0\xc8\x10\xc3\xbf\xf9\x11\x8d\x39\x90\xa4\xe9\x9e\xba\x14\xf5\xae\x33\xbf\xb1\x43\x37\x1a" "|;)\xd1\xa9\x81\x12[\xaaJi\xf1\x39\xdc\xb0\xc0\x87\x16\xf8^\x85\xa9\x9ek\x8emZ\r\x04\xa0\x35\x64\xc5m \x06\xa4\xe2\x12X" "\xda#\xf6\xa4H\xc2\x0b\x9c\x17\xe2\xc6\x65\xf4\x80\xdc\x44\xe0&\xc1\x0b\xfe\x8a\x9d\xb9\x8a\xf4\x65np\xe0V\xd4\xc0\xd7\xf2\n\xba\xd7\x94O" "\xef\xf2\x9a\x1e\xbf\x15#\xae\"\x82\xd1\n\xed\x97\x1c\xb9\x39\xaa\xc1\xe5\x9b\x06\xe7@\x8dh\xc4\xdc\x18\x31}\xc2\?\xc1\x14\xa2\xc1\x8d}\r" "n\x0fQ\x44TR\xa5\xac\x05\xdf\xbc\xf5\x37\xbf\xe7{\xe9\x98-\xa3\xef\x65\xb6(\xbe\x97\xd9\xec\xfe^n\xba\x45.\x89\x35\xa2\x45\xcb\x32" "\xfb\x96\x12\x8b`\xb5\xe7\xa8\x0b\x90\xb9\xd3\xcdM.\x9e\x94\x92\xfa\x91'\x87\x42\x17\xda\x1e\x92\x1e\x10\xa7\x44V\x44,\xff(\"\x38\x93\xd3" "\xa4~\x9f\xd4~=\x41\xb7G\x1c\xb3`\x31\x8di\xd8\x34\xa6\x10\x9d\x9f\xb9\xa4\xee\xc3\xb7{\x41\xfa\x1d\x85g\xfd~j\x18\x1c/%\x98" "\xd8\x1a\xdc\x30\xa4\x18\x05\xb7R\x93\xd6\xfb!V\x9c%\xf8\xe7\x64P\x8d\x0b\x18\x41\x1a\xf1\x81\x1b\x92\x1bq\x0e\x1f\x13\x1f\x97\xbc\xf1p\xe9" "\xa8\x11\xe7\xf3\x88\n#\xb4p\xef\x18\xfe\xb0p\xcf\xbeN)\x02\xfa\x19\rG'\x8a\x64\x91\xd5\x0c\xb5\xea\xb2\xf8\xbc~r\x8d\xa6\x81\x08" "\xb1\x82u\xbe+v\xbf\x34\xe8\x02\xdf\xe0\x64\xac\xc1\xd5\x94\x46\x0c\x33\xb1\xe2\x66\xff\x11G\x39\x8a\x64\x01z\x0c\xa3|\x9b\x0bV\rN\xdc" "\x14\x33\r,\xbe\x65>`:\xa7\xc8\x99V\x83jK#\x64\x86\xe8\x1f\xfe\xd3\x07\xff:\xf8\xc4\x35\x38\xca\x0b\xf2\x95g\x1d\"\x8a\x91\x8e" "~\x82O\x8e\xdb\r\x04&\xc1\xf7\xb9\x81\xf8=\xa5\x46\xb2\x8b\xbc\xa0\x62\xd2H\x0e\x06\x8e\xe9\xec\x36\x43\x37\xd5&\xf7\xf7k\x42V:\xe5" "_\x16y\xa7J\x93\xd8J\xf7\x1a)<\xe6\x1b\\)P\x44`\\\xa3\x34\xf6\x37\x18\xd5\xa0\xc1\tX\x83\x86\xf9\x06]\xf6\x14\xa3\x93~" "t\x92w)\xfez\xf4\x91 \xb9\x43\xb7\xcf\xa9\x9d \x1a:\xad\xf5\x8a>\xae \xd8\x9a\xe0\x13\x1aV\x32\x44\x83K\xdeP\xd0\x08\xde," "\x08\xf3y#Y\xf2\xef\x38\xd2\xa4l\x0e\x1c\xe5\x1a\x34\x64\x0b\x96\x88x]\x1f\xbc\x04\xb5\x1a\xb2\xd3\x12)m\xf6\x9dr\xe1\xd0\xe8/r" "\x81[\x8d\x14\xc3\x13\xa0\x13\x35h\x89n \xea\xab\xe0\r\xb2U\x83\xb4\xe5\x1f\xe1\xdf\xef\x63\x90z\xcc]\x1fq\xd6\xdf\xa0\?U\x83{" "\t\x1a\xf4\xceT\xdcz\x36\xaa\x84#\xd3\x84~\xce\xd2\xf3\x87\xe8\x9e\xef\x84\x99k\x83\xa6L\x41\xd4\xc9t\xbd\xeb\xa8\x87gu&\x94\xbe" "\xa3\xd6)\x15\xe4\x06N\xebVl\x39\xfe\xad\xda\xfe\x9a\xea\xf2}\x15h|{\xe8\x34\x19M\x9dn\xfd\x00\x1b\\\x37U\xc4I\x95\x42\x61" "O\xf4X=\r\xae\xda\x34\xa8(\x35\x42\xc4q\xa1\xb7O\x8eq\xfd\x8b\xb6\xaa\x06\xed\x84\rn\xecR\xa4\x8f\x8f\xd0\xa6\x97\xa2t\xf6q" "\xe5\xfbo]\x0fR\xe3\x32H\x30\xa1\x34h\xfa\xbb\xe2p\xa7\xc8\x31L)\x1d\x04\xaf\xc2\x31\xf5N\xa9\x95R\x62\xff$\xd2\x33\x10>\x18" "\x8aj\xfa\x87\x12y\xc5]\x38W\x91\xc5\x1b,]q\x45\xffJ\x63\xc4Z\xe4g\xa1\xbc\x11;\xb8+\x9a\xff\xaf\xe2\xc9\x1c\x88\xbe\xe6\x8a" "\xa5\x7f\xc5\xdav\x45s\xfe\x15\xeb\xcc\x15\xb7\x13^\xa5\xeb\x89#\xfbw\xa3|\x8aR\xdeP(\xefu\x43\xddN\x91\x1a\xb1R\xff\x95\xbb" "M\x14\x43\x12\x02W\xdc\xc8\\\x06\x08\xad\xe6&\x82/\x9b\x62r}\x90\x34w\xb9U\xf0\x86&t\x45\x7f\x02\x03(\xdd\xe0\xc0\xcf\xd2\r" "=\xf4o\x38wT\xf4\xc7\xd1\xeax\x93\xc0\x05\xc7\xc3\xed\xdc\xa4\x1f\xd6\x1f\xdf\xe0L\x1f\xc5\x43G\x7f\x8aP^\xdd\x66\xec\xa9\x36\xa2\xfe" "\x0b\xc2\xc1\xb0M_\xc4\x36\x15\x98\x36\xf7\x07\xb4\xd9\xfd*\xb2\xbd)\x45\x38t\xa1_\xfc\xf5\x9b\xf2\"\x1f\xdf}\xd1-\xa6\xcd\xd1\xaf\x1d" "\xfd<\x39r\x92\xd9\xa6\xdf~\x1b\xa7\x0f\t\xb6\x9el\xe2p\x00\xc9\x02I\n\xfe\xd4\xe3\xa9\rSmNp\xda\\\xf3h#\x46{\xa9" "k\x96\xae\x33v\xad*\xe9>\x10(\x03].\x1b+\xa6\xd7\xbd\x14\xfeV*mn\xce\xd8\x0e\xbat\xf4\xeb\xd2\xca\xe8N\x8c\x82\xabx" "\xef\x05\x91\xc6\x44\xfa\xbdq\x64\x0b\xe8r+`\x97\xb6\xa9.\xc7\xc0.\x62\xa8\x95\xdc\xeb\x42q\xbb\x62\xde\x8d\xce\xea@\xec\x03ST\x8f" ".h\x31*\xc9P\xe1\xaf@K\x64\x37\xc2\x32\xb9\xa2\?<\n\xcb\xe4\x42\xcf\xe3\xf1\x45r\x30q)\x91|+\x96)=\xab\xba:\x1a" "R\x9a'\x37\r\xd2\xa5\xa3\x8ezy\xe4\x0c\x35\xe6nt\xf9\xe8\x18\xbe\xea\x8aIpR\x93\x97\xde\x05Z\xb8\x37\xc5\x0fG\x06\xd9Q*" "\r\x8e\x1a\x97J\x9c\xbd+\xa5WqW\x8f\xce\xdc\xe6\x32\x95\xe6.\xe2\xb5\x0b\x8e\x0f\xd3\xdc\x37\x43o\xf8~\x8b.Uh\xc1\xeb\xbf\xef" "w\xae\xa9v\xa3\xb7\x39\x10\xda\xb2\x62z|\x96\x1c\xf5!\xad\xf8\x16PL\xbb\xac\x91]\x04HV\x64V[\x9c\x44\x43U\x18\x31\xa8w" "i\x8e\xea\x9a\x39\xeaL\xdeN\x97\x93\xb1\x86\xdb\xe5\xfe\x99.M\xe8\xdd\x18\xfb\xa6\x15\xb9>\xc9r\x8aO\xaf\x80\xc5\x63\xa0L\x95N\x9f" "\xbc^\x88\xb4\xd9\x1d\xc5\x18<\xbbq\x43O\xd3\x61\xf4\xa2.\x8eO\x30\x94\xd4\x8c\x14\x7f\xbd\x91\x8e\x81p\xa2\xe9\xd2t\xd4\xa5\x89]\xf1" "o\x89z\x17\xc3R\"\xf8L\x9c\xeb\xf1*\x9f\xa8\xfc\xd4\xdf\xba\xf1W\x11\x38\xe3Us\xde\x08\x81\x08\x14\x19o\xa0K\x7f\x95\xae\xe4t" "T\x39\xf2\xdc\xa7\xa3y\x37\x39\xc7\x1f&\xb5\x11\x10\xeaR\x97\xcd\xbe\x9b`\x1cS\x14\x9d\xd1+\xbeH\xe9\xcf\x0f\xed\xe2]\x04}\x14\x84" "O\x42\x97[\xf6\xba\xdc\xb9\xd3\xe5\xce~\xc5\xf0\xb8\x37>\xee\x83\?\x41=\xea&\xcb&\x90\xc5\x9f\xee\xbc\xeb\x1c\x82U\x34\xcdU\x1c\xfd" "\xab\xd2\\\x95\xf8\xed\xa8v\xf3\x97\x37\x97\xd2\x66\xd3\xeb\xa7\xd7\x44\xc4\xbd\x17\x44`\x0e\xc5L\x1dO\x1b\xbc\xba\xd9\xcc\xd4\xed\xb4\xb3\x13\x37" "\x87\x9e{\xe9\xfd\xa9\x63\x34\x90\xc9\x36\x9a/\xb7\x02(r'\x8a\xd1\x46_\x06x\x97\xc2{\x8fw\x88\x65G:>ui!\x12\xbcq" "L^*\x7f\xabsJ\xaf\x8e\x32\x02H\xa7\x9b\x8e\x0f\x39\xbakZ\xfc\xd6\xa2\x8e$\xd2\x87N\x38\xfd\xa3\xc7\x9fZ\x37\xe1\xac\xd4\xe5\x30" "\xdcM\xbf\x0fp\xfe\xbbP\xa8\x61]\x8e\xcc\xdd\xed\xc0\xdb\xa5_@\x97\xfb\xf3\xbb\x9b\n>\x9f\xcaN\xd7\xbfo\x33\xb8\xa2K\xbeQ\x44" "o\xe0\x19\x42\x82\xab\xa5\x63\xb8!\x1c\x34\x14u\xa6<\xcf\x05i\xf5\xf5\x87\xf5i\x95\xe4\x87\xb8\x7f\xed\x92\x9eN\x8f\x65\xd3\xde\x1f\xdcp" "{\xb6\x41'O\xdd\xa3\xc7M.=\xae#\xf6\xa8\x41\tV\xb5M\x63\xc3\x65\x8f\xe3J\x8f=vo\xbbW\xbd\x87#,\x0c\xd5u\x13" "=\xa8J\xd1\xcd\xaf\xdctss\xc8\xf9\xa5\xa5\x61\x1c\x36:)Q\xcfQI\x1dx\xbf\xf9\x64h\x87\x8at*U\xca\x90&\x46\x7f\x9f" "\xb6\x1b\x42z\x34\x37)R\xcf\xeb\x45\xb9\t\x97\xc2\x84\xce\x1d\xb7;\xa0L\xf2\xb3h)\x9d\x07\xfa\xd3\xe4\xc2\xb3J\xea\x86\xf8\xb6\xd4\xb3" "\xa0>\x8blY\x96\x1c\x86\x02\x93\xb0\xcdKi\x38\x96\xdb\xa4p\xc6\xb8H\x87_\x8e\xd4\x1az\x11\?I\x46\xd1\x08\x03\xa8R\x84\xff\x14" "\n\x95\xa6\xe7y\x10\x9d\x9f\x88\x8a\xc9M][\x89\x11\xb0zT\xfa{\xd4\xca\x34$&\x42\xba\n\xb5\x18\xc5\x86\xec\xe7z\x8cz\xd4\x0b" "\xc7t\x81\xb6\xf9\xab#\x02!\xf5\xb6\x81\x90z\xd1\xfd\xa5\xe3\xdf\xfc'\xfa\x99\xba\x84s\x31\x9c\xd2<\xd0\x8b\xe0\x94\xd5\xc3\x91\x89\x82," "\xffh\x94\x03N*I\xe9U\x1a\xa1p\xf9\x98\xf8\xed*\x46\xaf\xa9\xbf\xc8\xa7qJ\xd6\x8b\x66o\x99\x1a\x12\xcd>\xbc\"j\x10\xa3\xdc" "T\xcf\xb0\x80\x46\xab\t\xba\xa3o\xc5\\\x99\x33\x0b\xe6gi.\x9f\xa1\xec\x19z\xdc\xcd\xdb\xa3r\xd7\x8b~w\xb4\x36\xc2\x8a\xd0\x63g" "\xa5\xe8\x0f\x8c\xf7\xcb\x7fK\x64\x8b\xee\xb0l\x32\xf5\xf4\x84\x86\x84\x1eG\xc6\x1e\xd5s\x45o[JY[\xb5\x02\xc1Vi\x94\xd9\x02\xea" "\x35K\xb7\x62\x62\xe6\xa0T\x63\x63\xbe\xde\x07)\xcc\xcc\x44\x1ak\x01\xf5\x9e\xff\xcf\xfe\x32\xea]on\x66\xff\x93\x1c\xd7~\xb4\xaa\xdc\xcc" "\xe2\xf7\x9f\xf8\x86\xefY\x9b \x8e\xb5Q\xee\xff\xee\xd1\xde\xd9\xe3\xd4\xa5\xc7\xa8|=\xfa\xc9)\x86\x9c\xa8\x7f\x45;\xfc\xd6\x06s\xe4\n" "\x05\xc4\xb9W\x0f\x07\xc7\x08z~\xea\xd1l\xa1\x18\xe3\xdb\x89N\x9a&\x95\x8c\x94\xa9\xd1\x38m\x46\xb0\x35v\x8c\xdb\x65\xa7\x1cG{\x92" "\xa4\x86\xd2&\xf3\xa2\xfd\xad\x87\x34\xc2\x62\xafR\x02\xd7.\xd2\xa8\x36\xd3=\x9e\xc5\xc7t}\xf3_o\xf3\x9e.M\xed\\\x85\xcc\x9f\x9e" "x\x1d\xf1N\x10\x07\xb1J\x45\xdd\xd5\x03v\xbdn$\xfb\?\xc9\x11\x32+\x39\x39\xf6\xa2\xa6\xc9\xa7\x97\x9c\xe1#\x92\xe2\x93\x63\xb4@\x61" "sx\xef\x85X\xf8\x46\xc3\x1f\x66]\xf9\xb6\x12=\x95,\x81\x1d\xc5v\x9f\x66\x0f\xb1\xf0\ruK$\x36\x38\xf7\x92\xab\xa5\xb7\xe8\xe4\xa6" "\xbe\x99\xa3\xa4\x93\x36\x1aL\x02\x07\xe3^\xc2nKP\xb5\x88o\xbe\xdc\xeb-\x10\x11\x65z\xc9\x82_\xcd\xfeU\xe6\x34\x1c\xb2z\xb4\xce" "\xf4\xd2\x83|\xdc+\xc2\xec\xe5\xef\x9f\x1e\xa0\xe0\xd2\xdc\xaf\xbcJ\x88\x63/\t\x98\xe4+\xca\xff>T\xa5\xe5\xae\x63\x0c\x9f\xf5^Z\x41" "\xad\xe3\xe6^\x45\x9c\xe0(\x14{\x04z\\[\xeaq\x17\x61\x8f\x93\xac\x9e\x0f\x0bth\xeby\xb9\xe2\xd4N\xc1\xc9\xbe\xce\xb4\xb0\x9bR" "%\x8d#\x15\xa4k\"\xaa[\xfav\xa6\xbd\x04\xab\x0c\xdd\xc0zT\xee\x14\x93\xfd\xd7t\x0f]\x18\xe3v\xf6\x36Gg\x99\xbe\x84\x8e\x11" "\xbd\xcd\x65\xd3\xd1\x33\x61s\x93s\xf4q\x8bZ\x43\x8fZ\x43\x8f\xb6\xaa\xbe\xfe\x1b\xdd\xf1\x8b\xfa\x9c[\xf5\x39\x9f\xe9s\xea\xa1\xa8{I" "\xb0\x90\xd2g/\xd3\xa7\x41\xac\xcf>\xafO\xfbl\?n\x1d\x00G\x9f@\xd4*\x45]j\xb9;wI}\x18\xb1W\xb7OG\xef>" ";\xfc\xbe\xbfQ:\x36\xed\xa0\xbf\xd9\xc1\x33q\xdc\xae\xe0\x30O\xddq@'\xfa\xc1\x36\x80\xabR\x46\x86V\xca\xbe\x88\x94\xce\x65*%" "\xd5p\x39M\x8aJ\xc3\x05\xd0`\x06\xdc\xba\x36\xe0\xde\xbb\x01\x87\xfb\x01\x8e\xa6\x16\x84\xed`\xc0\xd0&\x03\xaa.\x83\xe8\x11\xd7G\xaf\r" "G.\x98\rp\xb6\x89 <\x0f\x06\xb4w\x0c\xa2\xe9\x31p\xc9\xeb\x10)OQ\x15\x30\xbe\x18\x97\xe1\x06t_w\x87\xcb\x01N\x8e\x17" "\x84\xd1]p\xe4(\x97\xb0n\r\xb8\x07}\xc0\xa5\xc4\x01\xd7\xdf\x15\xffV\xbb\x38\x43H$,\x84\x0epR\x87 \xd4\xbc\x01\xe3\x96)" "\xaa\x31\x17\xcb\xb6\x94\xb8NmR\xf3\x34\xfc\xf6\xcc\xd4W\xdc\x99\xfa\x9e\x62t\xe6\xcb\xf5\x03\xae\x33\x0f\xe8r\x34H\x10\x06u\x90`Q" "~@'\\\xc5ht\xc2\xad\x1f*\xa5\x0f\x07\x9e\x9b\xea\x36\x1b\xb6\xd3\r\xe8\xeb*\x98\x93q)~\x41\x9e\xb0/\x1b\xe0\xbc\x0b\xc1\xf1" "\xccQ\xf7\x45\x62\x98\x1c\x30\xe4\xb3\xa2\x1e\xfe\x85\x36;\xa0\x91\x45\x31\xd9;\xc1)\x11\"\xfd\xb6\xd2o\x9e)T\x1a\x30\x82\xf3\x80\xde\x0f" "\x83\xcd\x95\xa5\?\xd2\xd1\xfcQ\xfe\x01/\xaa\xc0J\x1b\x88\xa5\xdcG\x86\x00y\xa4\xa5\xebQ\xfa\\\xc5'\x86\xe6|\xa2\xfd\x44\x90\x07\xe6" "\t\x85\x91\x41\x91\xcbJO\\\xe1y\xa2/\xc8\x13\x83\x89\?qk\xc1\x13\xf3\x46\xd4\xdf<\x10\x61\xab\x05-\x97\x9e\x18\xd4\xf2\x89\x1e\x9d" "O\x9b\x46\x01\x88\xd6\x37\xdc\xc6\x88\x1e\xea\xa4\x1fk\xde\xa4\xdc\xc4>\x64]\x1frS\xab\x62\\\x97\xc6Q\rR\xf3v+\x15\x89\x0f\xc0" "%\x65\xec\xb9\x1a\xb2\xc9\r\xb9\xd4;\x64\xf8\xb1!\xe7Y\xc3\x08\x83\xdd\x30*\xb4\x81\xa5!q\xec\xa8\x07\xe0\xf2n\x41\xd2\xde\xba\x34V" "\x37\xe7\x15\xff\xee\x86\x08\x35`H\xb3\xdf\x90=\x9e\xa2N\x99J\xe7.\xc9\xcc\x8bj\xfa\x90\x31x\x86\\\xa0\x1c\xb2\x95\x0e\xd5/\xaaP" "\xa5\x89\xc5\xa4\xd7^\x90\xd0\x82\x87\\\xe7\x1b\xc6;UG=Yk\xed\x96\xad\x61\xbc\xff\x0e\x44T\x11\x45\xb9i|\x1aR\xe3Kw~" "RI\xcf\x9a\xf4\xdf\x10\xc3Z\x90\xb7\x46'\x31\xf4\x62\x62\xf3\x1f\xc6/\xed\xbfy\x93\xc3\xc3\x10'\xf3\x19j_:\xfa\x92\xd9\xae\xcek" "\x8f\x0f\xa9u\x0c\x63X@\x87tP\x1cr\xe1iH\x05\x65\xc8\x0e\x43\xd1K\x17\xa7I\x08\xa2\x9f\x18JK\xd5\xf8\xcd\xe8\xbe\xb7\x92\xfa" "\xa9\x82/\xce\xfe\xfd%n\x0e\xff\xf3\x0b\xac\xfc\xc3\x04+\xac\xc3\xe4\x17\x1f\xcb\xc8\xd8\x43\x46\xc4V\x8c\xf2-\xd1\x61\xb9\xbe\x36\x64\x03P" "\x14\xc5O\xb4>\xad\xbb\xc2\xfd\x9c\x32\xf9\x85\xc5\xaa\xee\xeeR\xc8\x18\xea\x87\xe9h\xee\xa8'J\x8d\x1aq\xe5\x97n\x97\x43\xce\x42\x87\x1c" "\xb2\x86\\r\x19Z\xe0\xbf\x1e\xa7\x38\xc3\xf4g\x64\xed\xc4\x1a\xe8P\xad\xbb\x9dn\xday\xd6s\x01,\x00\x1f\x92\xe1\x04\xa2\xe8\x99\xb7i" "\xe2}p\xfe\xbc\xe2/p\xde\xd9\x06\xf7T)\xf9\x1cQz\xe6p\xf8\xcc\xdb>\xd3\x1e\xfcL\xef\xc3g\x36\xabg\x36\xabgv.\xcf" "t\xfe{\xe6\xcc\xe2\xd9\x0e\xfd:\x07-\xd4\x1ci\x9eU\x9a~<\x81\x42\x7fx\xa6m\xf6\x99\x93\xc9g:\x06\n\xf6\xe5\x1fh\xa5\x07" "\xacR\xae\xe5\x1d\xc3\x8dk\xee\x02\xf5\x1c]w\x89|\x80_\x82\xbe\xef\x99\r\xf5\x39\xbc\xa6\x1dk$\x88\x01\xf5\x99\x11\x96\x15\xc3\x9f\xa2" "\xafy\xe6\x18\xfb\xcc\x36\xf8\x8c\x83\xee\x05\xb1'\xef\x99s\x8egN#\x9e\xb9-\xec\x99!\xcd\x9f\x93\xa5i*\xcf\x34\x17+\xfa[p" "\xd5O\xd1\xca\xfc\xd5\xa5\xed\x06\xe9g\xfa\xbd>spy\x66g\xfa\xcc\xe1\xfa\x99\x1b\xe8\x15\xd5\xd2\x99\xef@\x42\xbc\xffgv\xd4\xcf\x38" "\xabU\x10\x61\xcf\x9e\x37\xc3=\xe0\xdc\xae\x7fQM\xbc\xf0\xceOy\x89N[@\x94\x81\"\x33\xfa\x85\x0e\xd5\x8a\xdc\x85\xf0\xc2\x0cR\xdc" "N\x06<\"\xc4Kr\xfc\xa5\x11v\xa0\"\xbf$}k\x1f/~;\xb6\xb3\x17\x0e\xb3/\x9b\xabOGZ\x02^\x36\x37\x87\x8e\xac\xa7" "Jy\x83\xd7\xc8\x8e\x01\x13\xac\x0e\x92\xd3:(v\x87\xbd\xb2 _\xb9\x1b\x63\x44\xd7\xd5\x91\xfcs\x94>\x98\xdd\xb0J\t|\x1dGQ" "\x99\x17^\\\x13o\x88/@\xd4\xd6Q\xd4\x98\x02\xaf\xbe\xf9\xacQ\xb8\x9b\xdc\xd8\xaf\x12\xca_\x93\xe2\x9b\xa3\xff\xba\xb9\xdc\x07\x62$\x1d" "\xff\xcd\xf3\x0c\xde#\xb4\xe0\xa8\xff\xe3\x00\x05J\xec\xc0\xc6v\x88\xd2\x98\xb4H\xbc\x64\xdf:\xe6\x10;\xd6\x45\x63\x8c`\x63\x9a\x89\x04\x1b" "\x8e\xe6\xd2\xbc\xc8H\x9b\xeb+J\x13G\x36\xeb\xb1zl\x61O\x90\xd0\x63\xe2\x89#\xcb\x1et\x11\xe8\xef\x13)_\x30\x84\xa2\x1ck\x34" "\xee-\xa5\xfdsL/j\xc5\xf0\xba\x08\x91\xae\xa8\xa3\x33<\x66\xc7\xac\x0f\x63\xaa\x03\x63j\xe2\x8a\xdc@#\xb4\x1b\xdf\xacI\xfb\x8e\xe1" "\xcb\x84\xae\xcaI\xab\xeb\x12\xa7\x30\x46\xd1G\x81\x96\x03\xad\xdd\x06\xba\xfe\xa1\xcb\x9eJ[\xfd\x41\xa5\xe4\xa8\xc8PS*\x85,[z\xd8" "\x13\xd0\x99Sj\x85\x46w\xd7Q\xae\x10\xa4!\x9f,\r\x0bM\x65\xacK\xeb\x88\xb5\xa7\x94\xeb\xb4\x46/^\x03m]:\x65\xedW\xba" "\xc1vr\xa1\x13\xf6\xf4J\x19\n\x45\xe8\x9c\xfd\xbbR\x9c\x63m\x94\xcb\xed\x63\x8e\n\x63\x9a\x96\xc6\x1c\x1d\x04y\xe9\x8f_\xb7\x0e\x15\x10" "\x0b\x80\x8a\xd1\xe1\xcd\x36\x95y\xb8\xbe\xe5\xdcG)\x1d\xff\xc7\xd8\x42\x12\xe8\x15o\xbe\xee\x38\xd2\xa9^)\xdd\xb0\x94\x86\x8cXw\xc2s" "\xd6\x9d\xf4\x93\xf5v=\x62\x00\x46\xa3\xfd\x1f\xa7\x8c\xf3\xa5\x94\x9e\x7f\x46W#\xa7\x38\x00\xaf\x34\x66\\R\x41\x14k\xb4{\xc4y\xc5\x98" "\xc3\xe3\x98\x1bZ\x14\xbd\xfa\x45{\x8f\xfe\x89Q\xae\xecu}k\x37\x1ek\x0c\xd2p\xc1\x34\xde\xeb\xd2\xe9R\xa4\x15\xe7\xcf\xe3\xe8\xb0\xe0" "H\x97O\xa5\xdc\xe8K\xea\xb5\x8d\xdb\x66\x14\xc3\xeb\x1d\xbe\xb3\xab\x36\x8a\xbd\xaa\xe3\xe8\xe8l\xf3\xc4G\x1d\x95\xe8\xc0\x34\xc6\xeeg\xa7\\" "}\x18S\x8d\x1e\xeb\xa2\xec\x03\x9fs\xc4\x9f\xd8`T\xf3\xc3\x82\x87Q\x18\x1a\xc6\xdbx\x37\x46\x31P\x8c\xb7\x93|\xa5\\\x98\x37:\r" "\xd4\x9b\x8cPN\x95\x84\x1e\xe1\xa4.\xa5\xa2g\xf3\xe5\x8f\x9f\xbc\xbc\xb7/\x30q\xf4\xda\xaf^\x45\xd8\xc4\x37\x8e\xf2\xb7\x8e\x9c\x91\x8f\x39" "\x43W\xa4G\xe1\x98\x46O\x45\xafYJ\xcb\xcc\xc7\xb3\x45\xf8\xf0\xb3\xa5\xa3W+\xa1\x38\x63Kh\xe1\x08\x07h)\x65\xbe\xb2+\xe5\\" "\x44\xb0\xc3i\x85\xd0It\x8c\x86Io\xce\x31\xce\xbdw\xea\xad\x32\x1c\xb4(\xb4\xc4o\x08Q>\xc7\xdb\xb0M\x42\xcb\x8e\x9c\xbb\x8e\xb7" ";V\xc7\xdb\xfd\xa3\xe3\xed\xa6\xcf\xf1v\x63\xdd\x98{+\xc6\xdb}_\xe3\xed\xa6\xaa\xf1v\x1f\x95\xd2\x90M\x61S\x92P\xff\xb5\xe1H" "\x95\x91T\x83\x9f\xb1'\x8a\x82\xff\xa3\xd2\xed\xcd\x1a\xf1\xbc\xbe\xd9)\xe9\x19\x00\x8f\x1d\xda\x9d\xc6\xf0*\x93\xf6\xc1\x05\xf6\xf1\xd6\x0fll" "\xaeM\x07\xf4\xda\x1bs\xc1\x43\x31\xb2\xd1o{p\xc7x\xab\xe1\x8c\xb7z\x86\xd0\xb1\x63t\xb0\xe6\x86(\x95\x34\x0c\xe3\xe7\xec_\x89\xe1" "\x9b\x35\x01\xe7\xb6\x1bM\xfb<\x13\r\xd2\xd4o\xcc\xe2\xe1\xc0\xa2\x01\x06\xbe\xd9\x9c\xcf\xcf\x1c\x43\x06q\xcc\x89\xce[\xe9\xf8\x93t\xe0\x98" "\x8e\xf8\xde\xe7/\x8e\xde\x17\n\xf5\xa1\":\x9f\xd3\x9a\x33\x66\xd4q\xc5\xd0\xb4.\xd9\x1c/w\xa3\t\xdb\x44\x8d_\x8b#,\xc6Q\x83" "U\xc2K\xfc\xe6\xce\xbbQ\xa5\xeb\x43\xa7\xe1\x31\x37\x1f\xc9\xb2\n\xda\x64\xd1t\xca\x8e\xa1T;\x65\xbay\t\xe5\x9d\xef\xef\x42+\x0c\xa7" "\xf1\x8c\x35\xd2\xed);\xca\x1e\xff\xd6\x1b\x99\xf7+\xaf\x8dPKG\xfc\xc6\xd1\x35\x17\xe0\x94r\x8e\x61\xf4\x96_<\xba\xe3\x1e)\xa5t" "h\x1coO\?\x1b\x87\x9eWj\xd8\xda\xff\xfc\x9b\x36(\xa5\x9c\xe7\t\xfd\x89w\xf9\xbd\xe3Vh\x41\xe3\x65x\x14\x87jZ\xf0\xc6\xdb" "\xfd>J\xb9v;\x0e\xf9\?\xcd\x39\xfah\xab\xc1m\xbc\xdf\x9cV\x43\x0e\n\rg=\x8c\xa3\x8f\xa3p\xd3\x19/\x98\x0f\x38s\x18k" "\xec\x1e\xef!\x17-\xae\xed(\r\xbd\xe9\xf2\xcb\x91{\xfc\x95&\xcb\xd7\xf0\xb4\xe5\x97+\x01z\xaa\x8aw\x8d\xab\xaa\xa3+\x0eJ\xfd\x83" "W\xd5\x18\x93\x0b\xa5\xe1\x05V\x8bt\xcd^\xfa\xe7\xc2\xd1\x35\x43\xa1\xa1+\x14:\xbdsJ\x8f,\xa5\x61\x64\xa5\x16\x12\xfdT\x43o\xf5" "\xbb\x1b\xea\xa1\xd0\x66\xc1)\x0e\xddU\x9as\x0c\xcf\xf1\x0e\xec\xb7\x1e\x86\x8d_\x0c\xfe\x34\xbe+\xaa\xc3\xcd\x01\xcb\x63]\x08\xdd\xda\xba\x90" "\xee\xb0\x16\xae\x7f\x18\xd9|L\x1b\xcd\x98{\xb6\x04\x9b\x8e\xae\xaf\n\x8dr#\xf9\xe7\x12\xedr\x46\xd9vi\xc6\x1f\xc7\xbb\xfb\x44\xdev" "\xf7\xde\x9b`\xbc\xfbH\xfc\"\"\xeb\xe3\xbd\x17\x1c=i\x34>\xdb#\xc5\x98\xcc\x8d\x63\x8a\xf4^\x17\xcaW\x84\x15I\x91\xe7\xb3\x19\x65" "\xbe\x08Mw\xceh>\x1d{~\xc4\x07\xadmRh\x01\xf1!r<>\xda\xf3~I\x17\x08\xd8\xc1k$\\\x7f\xe4\xc9\x83\x37\xba\xf8" "\xe4\x89\x31\xa0H\xe3\xf6Q:\x9alW\xba-\x99\xf3\x98\xf8\x64\xed} -X\x82\x65W\x8f\x94r\x00\xd5\xe8\xb7\xa5v\xa0\xabR\xda" "\xe9\xf2@\x32I\xb8\x8es\xfc\xb8\xfc=\x37\xa0\t\xf5\xfb\xf6\xbd\x32\xc7\xf9O\x06\xd8\x15\xfa\xcd\xfd\xbe\x42\x7f\xbc\xe2+=\x9f;\xf5\xfa" "\x16\x9f\x1e\x46\x05\xa6\x9e\x9ex\x13\x8aO/h\x13\x18\xc7g\xbb\xd2\xcc\x32\x34\nq\xb0\xc6\x0cr\xa4\xe8\x43\x37ms\x82\x35\x9a\x0e\x84" "\xf6}\x8c\x8f\xcf\x82\xd6\x12\x9f\xfdx\x97\x1d\x17N\xe2\x02\xef\x08\xab\xb8\xa2\x37}:\x14*z\xad\x06\xf5\xa6/R\xba\xe6\xfd\x8b\x9e\xf4" "\xe0\x8a\x93\xd0\xa4\x93#}\x8c\xbe\xd7N\x19\x0e\xdd\xe8\xe7\xa9\xd3PQ\x8a\x8fi\xe1\xef\xe3s\x97t#\xbb\x99^" "\xa2\xc2\xfb\xff\xa6Q\t\x8f\xbd\x82\xb7\x99s\xed\x39\x97\"\x84~\x87\x46\xf7(sX\x36\x95\x17\xe6\xeb\xeb\x99\xfe\xff\xce\xc2\x42\xc8h\x45" "Q\x8f\xe9\xf0\xa1R\xfa\xcb\xc1`Rq\x0c\x1f>y\x08t\xcal\x9a\xb2{\x9f\xb2\x65O\x7f\xc2%o\xe7\xf1\xe7\x07i\xc7\x31\xd4@" "\xce^\x04\xe3\x83\x63\xa7\\\x8a\x1bs\x97\xac\x62\xfc\xc5/\xfa\xb8\xe3Y\x1f\xe3\xf8s\x97\xben\xe3\xd0\xf2\?O\x43\xb5\xf8<\xa5\x17\xbf" "\xd0\x39\xcf.\x1dk\xf0\x02\x7f\xb1\xaf\xe3t\xa7\x1e\xe8\xc7\xb7\xd3\x90y_o\xe1\xda\x19\xb4q\x99!\x44\xb9\xbe\xd3p\xd3\xefux\xea" "\xe2\xcb\x31\x93\xe4z\x30\xe3\x9e*\xf2,\x1e\xa1|\xd8j/\xfe\x44W\x94\xec\x9e\xc5\xb4t%\x87\x07\t\xa2\xd5\n\x45\x41$G\xfb\x8e" "\xd1\xe1\xc4\xa9\?\x8c\xe7\x14\x8e\x93\x93\x45\xc2\x99q\x82\xf8\xfb\x63\xd1t\xfd=|\x42o\x31\xba\xf8\x87\xec\xfc\x92\no\xc0\xf6#\x18\xef" "\xf3\x12\x1c\xc9\xab\x98\x99m\x8b\x14\x1e~\xb5\xc4\x39\xd2\x42\xa5\x45\xb0\xc3O\x9a\xbb\xae\xb0p\xb9\x45\x91!\xaa\xc7\xb4]\x8f\xbd\xc3\x16\x0c" "\xb7k\xf5}\x90W\xca\xbe;i\x33\x1f\xc2\xb6\xfeq\xd2\x19y\xd3\xfd\xff" "\xd8z\x0f\xec\xe6\x99\x98K\xb3g'\xbd\xbf\xd9\x84\xb3\x95\xad\x1c,\xc9~\x9d\x93\xa2-[Y^L\x9bi\x17\r\xe0^P\xfa\xfe\x99" "s|\xfc\x00%\x8a\"\x8b\xc5\x8a(@\x63}\xab\x83\xed\x1a\xb5<=\x37\x8e\xa3\x97\x62\xc8\xceL\xf4\xf2H\xf2Z_\xd6No\xd5\x44" "\xdc\x1f\xad\x62zM/k\x1f\xf0\x46o\xbfNn#V\xd1\xcb\x04\xddZ\x8c\xd5\x97\xa5\x9fiX\xf7\t\xcaht\xe4\x45\x8bV\xb2\x32" "\xa8[\xfb\xcb\x18\xad\xfey\x65\x1a\xad\xcfh\xf8\xaf\x62\x04\xbf\xe3\"\xd6$\x35\xbd\xa6\xf5-W\xaeT\xf4\x37*Z\xbf\x84Y^\xe1z" "\xa6[\xcf\xd3\xc3g\xde$\x44\x9b\x9a\x8f\xd6\xbc\xca\x46s\x43\x91\x17\xbb\xbb\x0b\x61\x66;\x8e~\xd7\xb4X\x1d{\xf5\x15\xb3\x13*\xa4\x93" "\x32\x11\xd7\xce\xbf\x45\x9e\x06\x65\xe3\xf8\xb8\xee\xf4\xde\x9f\xcf-\xab[\xb6\xd4\x9f\x9cj~\xad*\x62U\xd0\x44\x18%\x8e\xe3\x8bW:\x02" "\x1b\xd3\xbd\x87\xd2\xe7\x99\xe3\x8c\xc7\x11\x1a\xcb\x88\x8e\x8b\x16\xe3\xb8\x34w\xd2\xcf\x8a\x89\xec\x93\xa7_\xb8+\xa4\?m\xe2>\x16\x8a$<" "y\x33\xa5\x86\xe3\xec(\x89\xe8\xa3:\x15\x39\xf3\xc3\x38\xb8\xe3X\x8a#\xa7\xc9\xe2\x07\x0f\x06Nq\x1f~z\xcc\xc5\x41\xa5\xd7\xa4\xde\x39" "\x17\x9a\xb1H\xc5\x35.\xdf\x9b\xc8\xfe.\xad\x85\xb4qJ\xaf\xfe\xe5\x42\xdd\xdd\xc1t\x45\xb4\xacW\x9a^\x05\x08\xd3+{y\xf0\xb9\x62" "\x13\xd7.\xfa\xe4\xa8\x8a\xd8\xcc-\xa2\xff\xe4\xb3\xbf\xb1\xdeT\xc6\xa3;ol\x45\xf4\x62-]g\x1a\xd6\x8c\xb9w^\xe9+\x08\xd2\xfb" "\xf2\xf7Zj\x8e\xf4iHW\xfc\xd7\xcf\xf4I\xae|\xd6\x96\xf6\x12\xe3T\x1f\x1fs\?\xc2x\x1f\xab\x46\xc4\x33\x9f\xef\x89\xc7\xd9x\xb4" "\xa1\xd8`\xfci\x11\xa7t\xc8\x31N\xef~<\xdb\x7f}\xe6\xa3\xba\x34\x43\xc6\xeb\x34w\xc7k\xf5\xf7\x94j;\xef\x86sK\x9c\x32\x38" "\xee\xa5\"\xdf\x31\x11\xe9\xb0G\x44\xd4PtR\x39\xa6Kt%w\x9e\xaa\xe8\x33\xb4\xf1l\x96\x16\xb2\xd9\x37\xc9l\x83\xd3X\x61\xc9\xe9" "\x9d\xb7\xf8\xfb\xc6'\x82\x44\xe4\x66\xaf\xb1\x8f\xd5\x85^\xdb\xe9\xfe\xbc\x31K\xd5\xcfy\xfc\xc3\xa7\xce\xb5\x11\xaf\xef\xd4\xf7z\xf1>(\x17" "\xfe\xb6\xc5h\xf6\xcf\xd3\xbc\xf6\x14\x31}\xc0&\xeas\x61\x17\x37\xde\xae}\xfd\"\xde\xd5\xbc\x05U\x91\x9d\xbdx\xf7\xeaS\xaa\"\xfap" "\xcbkK\xe1\xfe\xd3\x37\x1f\x34\xa9\xcd\xb4\x17\x66\x11\xbd\x18q\x1aV\xfd\x9e\xb1\?\xcbuL!\xdf\xb6\xdfnz\t\x1a\x95\x8e\xe7\xb0\x90" "t\x14'i\x91\xf8\xdd\xa6o\xe4\xef\x36\xc6*\xf6\x38\x39:\xf2LN\x8eN\xbc\xe9\xe4\xbe.\xe5~k\xb3j^P|\xed\x65\xef\xac" "\x9e\xe2\xdf\xe2>\xd8\x9cz\x42r\xb7\xa4x\xe5\xd7\x89iI\x8a\xd7Nz\xacWQ*\xbdT\xbc)\xa6\"\xab\x35\x15\x99\t\xc9q\x8b" "&&\"~\x07\xa3\x0c\xc5t)(\x39\x19\xd1\x16l\x9c\x9c!\xc3\x92\xcbKgz\xaf\"r\x8eJ\xfd\xe4_\xf8\x81\x45\xafg\xbd\xef" "\x95T\x9f}\xd5\xc6\xc7J\x42z\xe8\x16q\x9d\xd4\x16\t\x8c\xd3\xc7I\x0b\x45)i\x7f:\x83\xe2G*\xfa\xb5\x8a\xb8\xbbs\xd1'\x99" "\xe8\xc2\x42I\xaf\r\xe3\xbd\xdf\n\x11\x1f\xe9\xf3\x66\xbcwG\x31\xde;\x9e\x18\x33\x00\xb9r\x1f\xcb\xda\xb4\xfdr\x91h\xe9\x43\x30Q{" "T,v\x9a\xf0\x93\t\x8f\xd1\xd5J\xee\xcf|\x81P\x44\x9f\xe9\x12\xd1\xebL\x11\xbd\xda\xa4\xcbo\x65z]O\xa3\xbd\x38\xf5\xda#y" "\x1b\x07\xe7k\x17\xbdvJ\xde\xbe|\xbdH\xc4\xb0\xc9\xf3\xbf\xed\x12\x36[^\xdf\t\xd3\x1b\x81+\x8d\t\x37\x82)\xd5\xb4&s\x91T" "o=\xc1\xfe\xe7\xa9\xa5\x0c\x8a\xc7\xc1r\xc6]\xa4\x92\xd0#\x87\xe0\x66LK\xc8\t=hL\x82\xb3\xdf`uv r\xad}\x12\x64" "y\x80\xee\x14\xd0\x08$\xea\xdf\x01\xb3\x83\x9a\x16\x16\xe7\x1c\x83O\x82\x62\xcb\xc9\xe0>\x14\xe9\x19{\x12\x94.\xc0\xf2\x18\xc4\x46\x9a\t\xbb" "~\x13vK&\xc1-\x7f\x1a\xf3\xbb\x93\xe0y\t\xbeW\xc1!\x7f\x10n.&\xb4\xdc\x98pvp\xc2\xe0\x8a\x93`~\xe3\xdc{\xe5" "\x99\xa8\xd9\xbe\x9f\x00&\xfa\x13\xba\xec\x9e\xd0\x1d\xc5\x84\xed\xf5\x84\xf6\x1e\x13Z\xab*\xb5\xb1\x86\x41\xf1\x84\x8d\xe8\x84\xeb\n\x13Z{L" "\x38\x95\x34\to\xa7N\xff\xc1p\xf8\x04No\x9d~Y\\G\x98\x84\x8b\xb1\x33\xdc\xe1\x19\x85\xcb\x1d\x42z\xd2*\xd6\x12\xae~\x92\xcd" ":\xc6\xdb`\t\x65\x8f|jZ\xef\x96\xb6\x0f\xa6=\xbe\xd0\x1a\xda\xb4\xe9\x34>\xcb\xa6\xdag\x37\x15\xb7\x35z\xd1P\rn\xba\xa5\xbf" "&\x1dU\x39y\xd4\xbdM\?\xf9\x9e\x07\xf0\xd5\xacZT\xb0\x1ax\x12\xe1\x9d\x9a\x30\"\xee\x84\x86\x83J\xf6,U\x0cQ\xd3M\"\xf8" "U\x9d\x44\x18\xddO\xfc\xf4\x11l\xac'\xec\xfbO\xd8\xf7\x9f\xd0g\xca\x84\x9d\xd3\t\x1d\xa3N\xfc\x9e\xe3\xa7_'\x37\x9aL\xd8\x92M" "\x38\x97\x30\x61T\x8f\t[\xe2\t]vN\x92,n\xc0_\xaa\xa4\xfa\x45\xae\x41l\xd7\x9f$\xed\x63\xb5\xa8\x85\xb9\x9bhx\xca\x9cp" "W\x06\x15\x8a~\xc8\x43\x89\xbb>\xa7\x41\xb9\xea\xdc;\x10\x99\x06\x95o\xb0z\x46>:\x0f\x8f\x82}\xc1\x34h\xdd\x1e\xa4\xb2#\x32\xa5" "\x95\xc8\x94\xe6;\x9f\xac+\xd4Qo\xb4\xeesO\x80h\xcb\xbfm\xd7\xc5\xe8\xf9j_$\x34!\xb9\xfb\x65\x39\xf8\x64\xef\xfc\x33\xfd&" "\x1a!\xe5~\xdb\xd4'\r\x99\?Y;(\x39\x93\xad\xa2\x9a\xa9w\xdc\xf5\x04\x12>]\x8c\xa4\?v\xe7_~\x01\x8b\x35\xf0\xf5\x98\x15" "\xfa\xa7_\xdb~\xdb\x81\x8a\x61s\xc9W\xe0\x93\xee<\?\xd9\xa3T\xb2\xce\xffL\xbf\x30\xbe`\x80,\x15\xb9{\xe9\x33\xc0\xf6\xfd\xcf\xf0" "\xa8\xcf>\xe4g\x98;\x03\xaf\xca\xd8\xb3\x12\xcfvZ\x45\xf2\xcb\xec\xfc+\xa5\xd1\xe7\xf8\xebSM\x1b\xb3\x1e\xd9\xf4\x33\xec\x8c\xe9\x16\xe1" "\x33\xfc\xfc\x90\xdf\x8aK\xf6\xf2\x7f\x46\xb5g\xdd\xbe\x85)\x65\xd5\xe2]\x97\xb3\x37\x9f\x1cm\x7f\xb2\x8c\x7f\xd2G\xeeg\x34=\x8a\xc6\x97" "\x14\x91\xbf\x11\x8c]>\xe3\xcb\x07\xb0z\"\x97z \xcaU\xff-\xebR\x91\xf9UK\x32\xb7\x01Q<\xf8 \xce\rt\xc3N-\x13" "]\x1d!\r\x03\x93O\xce\n|\xb2\xb5\xfc\xa4\x9b\xbbOn\x63Pz.\x8b\x18g\x06\x14\xfb\xe4\x10\xdcn\xc1\xdfw\x46\xb7\xf8\xe4n" "\x85On(\xfcL\xb0)\xeb\x33Yw\xf9\xe6~\xb1\xe0*i}\xff\xc5\x06M\x99&\x61\xb3\xb8\xb4\xa5;g\xd8[\x99\x61\xaeo\xb1" "\xfb\x32\x63\x82>\xaa\xcc\xbfu\x89\x1b\xf3%\xb9\x05\x66\x8b\xec\xad|\x05p\xcc\xfa\x15\x66p\r\xb4\x95U\xea\xda`\xa6\x03\r\x66z_" "~\r\x0c\xd4\xa6\x64n|\xb1\x42\xff\xdaW\xe8_\x1c\x04+\xf7\xb3\x30_\x11&\x82\xbfh\x14\xff\xc5^\xf9\x17\xeb\xb7\xafh\x34\xa4\x81" "\"\x45\x06\x32\xfe\x62|\xec/\x46\xc4\xfe\xa2\x07\xed/\xc6\xb4\xfe\x62,\xeb\xaf\x38\xf3M\xce\x41\xbcl_\xf1}\x15|!\x31Z\xf8\x62" "\x14i%+\xab/\xffIVm_\xc9\xdd\x37\x89;\xa2I\xf7\x37'\xf3\xbe\xb9\xe2\xf5\xf3\xb7\xe8\x82\x9b[\x16=\x13\x61<\xf2\xc3\xb3" "\xff\xd0\xf9\xad\x32x\xdarS\xc9\x0f\xdf\x90\x1f\x19\xf3KO\x14\x62\xf1Nz\x17Q\xf9\x8b;\x88\x0e\x12^{\x9e \xaf\x1a\x12\xd2\x83" "\xae\x1e\xa4U\xa4\xd7\xf4\x9f\xa0\xf7\x90t~ \xf6[\xd1\xf2\x98\x81\xf9~\xb8\x0b\xf1\x87\xcf\x45\xc9\xf2\xa1\"\x9br\x15\x19\x36\xe0G\xb7" "\x0b\xee\n\xec\x36\xfd\x30\xdc\xe6\x0f\x97\xaf~\x42<\xf4\x1f\x19\xff\xd3\x89\xdfOx\xd3 \xfb \xb6\xb8\xfc\x84\x93\x45t\x9a\x81(\xa5\x05" "\x9ev~\xb8\x1fW\xc9-\xdf\?\x07\xe4<\xd9\x0f\xdb\xda\x9f\xa8\x82\x8b\x8a\xea=:\x37\xff\x89\x1e\x37\xc1j\x08\x11\xdd\xc6\x9fhu\xcf" "\xf1\xdfO\x84\xc9\x65\x65z\xae\xf5o\xf4YM\x45\x1e\x18#\x8e\xe7\x0f{\x08J\xbf\xd7\xf8\x1cyJg\xeb\?q\xbe\x0e\x62\x35Q\x19" "u\xbb\x14\x91\xbbq\x91g\xc1\x64\xf8O\\\xde\x06\xdb*\x43OP\x8b^\xf2\xaeI\xaf;\xd5\xb0\xfc\xf9\x13\xf7x\xf2>\xcf\x84\xcd\x1d" "Jy\xef\xc3{\x94\x1a\xa9\x97\xe9\x38\xe3\x87\x9e\x61~\x92z\xc6\x9f\x04-^\x7f\xd8T\xfe\xb0\\+\xc3\xe6\x36>y\x82v\xd3\x06\xe1" "\x0f\xe3\xa0{\x35g\x8c\xab\x39\x8d'\xe7tq\xa1\x0c\x9eO\xd8\xddt\xb7Ns\x46z\x9a\x07W\x1f\xe4\xc0IG\xa5\xf3\xa0\x36\x04\x1b" "\r\xb0_J\xbf\r\xc3\xd0\x39\xb7\x04\xcd\xd5\xed\xc4\xd5\x1b\xbb\xc6s\xd6\rs\x16\xdby\x30\xae\x06\x8dM\x82\xad\xaesi\xdb\xd8\x0b\x9b" "\xb3\x46\x9b\xb3\x46\x9b\xb3\xb3:\x0f[-\xb0K\xfd\xc9\xaa\x95\x39\xa3\x64\xcci\xaa\x81" "\x88vx\xc1~\xb1\x92\xc6[\x8b`U\x03\xe1p\x66\x11\x62\xb5o\xc1\xecZ\x84\xd3G\xceq,\xd8iQ\xb2\x95\x33q\xff\x8b\xb6\xcd" "\xed\x87\xc3\x0e\xd3\x46\xe9\x07\x1aj\t;yL\x83_R\x15\xa5\xa3\xcd\x8dR\xaay\x9e@\x64\x91\x37\xad\x63\xa5}\xc1\x08\xbd\x8b\xe8i" "\x08\xc2\x13\x96R\x1a\xa3\xf0t\xec\x9anjpm\xf5\xeb\x97\x18\x1f\xdb\xa3_$\xb5\x12\xc8\x8c\xe6\x16L%g\xfdht\xb5\\" "\x17\x05\xdf\x13tY\xda\x8f\x18\xf1\x62\x46m\x98]\xaax\x0fN\xb6\xea\x02\xd8\xb3u\xc1[\xb7\xe5\x06\xa3\x17\x0b\xb5\xcd\xe2\x93\x17\xd1\x1f" "\xb7\x8a|\xdc\xea\xa9_\xb7\xd0\x0c\x61\x15\x83\x84\xdf\xcb\xe0\xf1\x1a\xda/O\xfd\xfb\x91<\"\x37\xbc<\xc0T\x43h\xc6\x0c\xc2&\nj" "\xd8zK\x0f\x15\x91\x99\x00\xcf@\x42\xab\xa9\xca\xa7\xd8\x94,\xbc\xc8i\x9d\x36]JK\x1d\x9f^ -{\xef_\x93\xba\x1b\xf3\x89\"" "\x96&\x61\xa6\x9c~P{\x96.\xa0\?\xbd\xa8\xb3M\x0f\xbb\xbe\x84\x33\x1e\x11\xfbG\xd1}\x0b\xe6\xa4\xa2\xbd\xcd\xc9\x15\"\xc0@|\xf2" "T\x9e\x89\x45%=\xc7\xa7\xee)\x8b\x46wh\x7f%\xc1:\x80J\x94\xa5h\x87\x1b\x89\x35\x8a\xc8\x80\xe2\x39x\x82\x1c\x42\x8c\x1e!\xb3" "\xf8\xe0\xd1\x99\xeb\xe6r\x90\xfb\x82V@I\x41wP\xf9H\x8e\x9d\xfez\xc5\x95V\x1a\x8e\x42\xb4\x17\x8d\x8b,\x97\x10wPN\xbd\x16" "\xd2\xbd\xb7,\xba\xf1\xf4\"\xfd\xf2\xf4\x02\xd1p!N\x91\xed\x1aOw\x8d\x12\x14\x7f\xcf\xbd\xac\xc4[\xdb\x37#\x37z\x37\xf0\x04\x7f\x08" "\x98\x83\x37\x62z\\\x45\x14^,\x1b+Q\x90\x92\x8b\xbc\xf3o\x95\xf5k\x12-\xccg\xbc\x9a\x92'\x15\x65\x06\xe8\xd0\xa9\x86j*\xa9" "w\xfc\xfe\x93\xd6\xa7\xfft\xd2\xfd\xf1w\x31\xe9-\xa2R\xde\xcb\x9c\x97\x83\xf4\xc0\xa7\xa9Sj\x30I\r\xab\x15X&[\x9a\xbc\xdb\xb0" "\\\x30M\?\xeb\x1f\xb9&\x65\x02~N\x45{\x46!O\xa6\xda\r,\x9fi\x99\xe8.`{\xec\x1aV\x8bR\xcd\xf6\x39\xabvM\xbe" ";\x83\xcb\x35\xac\x05\x44\xc3\x13Q\xca\xf8/\xe8\xde\x63\xd4\x61\t:\xa5\x98\xd5mh\x32\x10O\xba\xfc\xb6\xcd\xc2+\x1f\xc0\xcdq\xfa\x03" "\x36\x43m\x0c\xca\x03\x84M\x30M\x1a]\xd7\x82\xf3\xb9S\xe7^\xcc\xa0\x42\xb4\x8b\xae\xf4\xc5\xb1M\x1fZ\x01W\x85\x45\xaa\xf2Y\xaa\xdb" "\xc6\x7f\x65\xc3\x7f\r\xa6\xf8\x42\x8bm\x66\x8cn\x7f)\x92\x1a\xee\xe3\x08\x9b,U{ \x17\xc1\xf9\x0fzK\xa2\x99\xc9\xb6Q\x32\x15\xb3" "\x05\xd0\xdc\rp\xf9\x0cns\x8c\xc8.\xd7R\xef\x32\x41\xd5\x82\x43I\x7f\xf1\xfc:\xddO'\x87\xd8\xa0\xc0\x98\xdeIo\x82Y\n\x11" "-\x9a\x84\xf2\xe5\xf0\xd6\x9f\xea\xfb\x96P\x35\x9d\x92{\xcdS\xe3\x85\x0cy+\x36\x91\x66\x94\xffl\x04\xce\xb0\xb5]\xb9\xd5\x1b=\xdd\xba" "&\x99\x61ZX\xc8\xca\x8b\xef\xbb\x34\x44\x93,J\xf7l\xc8\x91S\x66\xd8\x94\x39k\x13\x8f\x42\x9b\xad\x17.\x98\xbe\x44Q\x82\x45\xaa\xf2" "\xca\xa9W\xf3\x8fW\x63\x03p\xa1\x34\x08\xe7\?\xc1\xa8w\xa0\xc1\xdb\xac\x1c{\x44\xf2\x0e\xd2\xf4l\x8d|\xd1\x88/\xe3\xa2k\xc1|\x8a" "\x65}\xd3\xf4\xbeR\ry\x1b\xe6\xaa\x87\xc7\xe4\xb3\x7f\x8b\x65p\x31\xc0H\xf0\x30\xe1\x0bO(,\x1c\x1f\x1e_\x41q\xf3'\x95z\x98" "\x10\xb1u\xe5<(\x0b\xa2\xa5qy\x45k\xef\xb4\xdc\x35~]\x8b\x9enX\x1d\x9d\x85\xbd\x0c\x99u\xa6^\xa0M\x0b\x8a\xa7\x18\x62\x9b" "&\xe7\xf1\x87Nm\xd7:\xd0\xd2\xdf\xb0\x85\x31\x61\x9f\xd7\x63\xee\xf1\x8c\x61\xa6-\x83\x04h\xffx\xed\xff\xf8)\x1f\x11\xb6\xfd+wN" "-\xd6\x35\x66\x86-\x33H\xc1\xc6|\x99%\xa4\xb9\xc0$\x36\xaagp;\x63L\x17\xff\xcag\x88\x1em\xf4\xb2\x03\x91k\x17,\xf9^" "\x0f\x08\x0f.N\xb4\xd4\xdf\xabh\xc3:h\xbb\x8e\x84\xab\x17\xa7\xbe\x86/u\xd7\x92\xfb\x0b\x18\x02\x8b\xb6\xc6{\x86\x95\t\xe1\xe5\xbbS" "\x06\x18p\x30\x97ju\x64\x15\x66N\x85\xfc]u\x41\xb3\xbf&L\xd9\x19\xbd\x12T\x1f\x16\xba\x87=\x7f\xa0\x61&\xdb\x35\x18>\x42\xdb" "\xd7\xce\xd8\xcb\x63]gp\xce\xa3v\xc8Y\x8c\x1a\x8d~w\xe9\xe8Q\x44>\xffTo\xa3\x1c\xc8\x90\xd2\x1f\x32\xe6\x06\x95Kr'\xff" "U\x94V\xb9\xae\xbd\xcfsk\xaf.\x82\xca\x06\xb4M\xdbJ\xeb\xab\x64`\x11\xa5\xcc\x91\xc5\x30\x7f\xcf\x36\x30\xb3\xef\xcb\xab\xc8\x36,\x83" "\x01\x9cpYr&G\xebxW\x81\xb6*\x98W\x64\x1e\xbb*\x39\xd5k\x14*\x08\xd1n\x41\xbcS\xca\xc3\xeflZ\xac\x94)&\x9d" "\xf3\xe8q\xe7\t\x07\x62R\xfb\xe1\xd3\x12\xad\xe3\x64\xebg\x62\xda\x90\x65\xb0\x17T\x88>\xac\xb0\x06'\x11*\xf6\x9c\xe9<\x36\x34=\xc3" "\xcc\x35Li\xa7\xda\x45\x0f\x0bk\xd0l\x05\x1d\xa2Y\xacQ\xa4\x8d&\xb4\x06}\x31\x98\x96\xde\x86\x89\xf0\x33\x97&\xfcG\x63\xc7\xcf\x44" "w\xfe\x65\x9a<\xf5\xa8k\x8dQ\x46\x1a+\xf0\x12\x17\x88\x90\xe4\xca\xce\xdf\xe2\x11\xa6\\\xa2YP\x39!\xc6\x02\xc2\x1b\x90\x97\x1c\x14\x8f" "I\xdc\x18\xf6\xf1(\x1f\x9c,H\"\xe2\x86\xad\?~\x45\xb1\xe0\xc4\xf4\x12\xc4m\x8fo\xa1j\x9eO*\xa6U\xb0i\xf3\xa7T\xdc\x9c" "\xb8\xc8~\xbd\x8a\xf1\xec\x05\x0b\xc6\xa2\xd5\xa7N\x7f\xaa\"J\x37\xc7\x45x!\x13\xb1\xdb\xfd[v\x82\xc9*={\x17O\x13[\xa1\x84" "}<\x0f\x8c\xcd\x85h\xb5\x85ON/M\x08\x92 |\xe3/\xda\x1c\xa0\x90\x65:\x18\xbd\xb3K\x91\x61\xcb\xad\x84\x17\x1b\x11\xa7\xcc\xe9" ")/}\xdew\xb2\x86\xcc\xa8\xa7W>i\xec\x42\x33\"p\x81\x89\xe9\xa7+\x66\xee\x9a_\xdc\xf0\xca\xb6Sg\xd4\xe8\xc0\?\x8d\x86\xcc" "\xf5\x01\x9a\x8a\xfe\x0es\x04\x96\x81\x0fk\xa3\xfc\xc7./\xd1\xcep\x46X[\x1b\xe1\xab)\x1e/\xe2J\x17!\x41\x90\xbc~\x80\x0b\x1a" "\xd3`r\x0f\xf1\xf1-:\xfb\t\xdf\x18\x41\xd8\xd2\x30\x0b\n\x91\xaf\x8e\x8a\xb7\x35\xac\xf1\x41\xfbW\x89\xcfNR\xed\xbf\xdf\x9f\xbc\x1e\x88" "^\x36T;\x10\xcd\x06\xda\x0b\xba\x86\xbe\xce\xbe\xa5\xe2\xed\x17\x62 S\xfb=\xfcl\xba\x0e\xba\xab\xe4\xe2\x32MX=\x46\xeb\x99k\x9e" "\xf7*\x16\xc7\x07\xdf\x63\xbf\x05\xe2\x30\xb8\?=\xd0\x30\xd9jZr\x9e\xde\x05\xec\xfb\x45\xcc\xf2\xb7l\x8eXh\x06[J<\xc6\x30\xcf" "\x33\xe7\x99\xbf\xa5\x82\x33\xaa\xa1\xccq\x90\x9cI\x33\xb6\xf5\xe3\xf4\x62\x89\xd5N#\xdb|\x15\xb1\xfd\xd8\xc4\xf4\xce\x44\x1c\x1f\x1f\x88\xfe\x0e" "{\x11\x0e'u\xb8\xb8P\x91\x19\x33\x45=\x9e\xe6\xbfN\xa4\xbe!n\x12\x34V,*.\x86\xec\xdd\xab\xe6\xaf\x8a\x8a\xf5\x1f\xce\xdc@" "\xfb\x85\xf9\n\xb4\x66\x0b\xde\x0c\xa0\xf5O\xbd&\x83v\xf0K\x36\x01\x9a\x0f\x8f\xfa\x07\x35x\xf8\xcd\xfb\xf9~\x8e\xae\xfe\x61\x9f\x9ai\"" "\x46\xb6\x05I\x34\xf3\xed \x45\xff\x1c\x17\x14\xf1\xa9\xf8#\xf6W\x42\x83n\xf0\x66 \xca\xdb\xc7\x91\x80&\xf8\xfd\xa8\xf8}\xecu\xb4Z" ">\xcdn\xc3v\x06\x85\x35\xac\x07\xa0\xfd;\xa1x\xe9\x0c\x1b\x85\xe0wG\xadM>\xec\xcf\x34\x07\x31\x33RP\xd7" "SG_\t:\x8e\x05\xcek\x14\xd8'Wr\xa8\xb0\xdf\xb8\xe2\x62\xea\x13\xc8\x12`J\xa2\xe2\x95\x93\xdd\xba\x02\x97\x19\x84\x1d'\x07\xa7" "*rZ\xaf\xc0\xe9\x96\xc2\xdf\xee\xdd\xa9!\x12\x31'\x61Z\xba`\x61\xda\xe8\x0e\xbbxM\x0b\xb3\?\xd8\x96\x07\xed\xe1\x08v\xc6\xa6\xc5" "\x93\x36\x8c\xd9\xcb\x85\xe0\x14\x0f\x19\xce\xe1\x85XH\x12j\x1f\x97\xdd\xba\x82\xb9@:\to\xce\xfe\xab\xf9\x8f\xc3\xbcV\x98\xd3\x9d\x83i" "*\x86\x01\x05\xdb@\xc9\x38^\xa6\xc9\xd0%\x1a\xf2\x33\x8b\xdaj\x0c\xae\xd4\x32\x1c\xa1V%\xa1t\xeb\xe5\x84K\xcd\x05\xd6\xe1\x05.\x35" "\x17\xf8N+\xf5\xff\x0b\x7f\x15\xb3\xd6\xc2-_\xe3\x02\xa7\x41\n\xf0\r#\xb4\xbd\x36\xca\xad\x97\x01\xd6\xf8\x05\xaeU\x14\xf6\x0b\x14\x05x" "\xee\x31\xfa;%\x62r^\xf4\x97\x16\x36z\x42\x16\xbc\xe0\x9e\xa7\x7f\x98\x38\xf5\xd5\xac\rSM\xba\xad\xabz\xaaIq\xb3=\x90\xa6\xe9" "\xb2\xd6\xfe\xb3t\x7f\xa4iI\xe7\x0c\x9b\x37\x44{\xe4\xa3x\xe4\x15\x61z|\x9f\x0b\xc3Vx\xc7'\x8c.\x81\xf2o=\x80\x88\xbe\x9d" "\x92\xfd#\x13\xb1`$\x62\x8b|t\x86\xb5\x62\x98\xc9\xb8\xe6\xa5\x38\x18\xf9\x17~\x11\x0e]\xc4\xe9\xb9\x33\xcd\xda\xe9y\xfa\x85)\xb3r" "\xca\x1c\xfa\x44\x01\xe5\xac\x93\xad\x1e\xd9\x32@r>\xf0\x84\xff\xa1I\xb9\xc3\x9cU!X\x30\x43\xb1\x00\xa3\xe4\xb2\x9c\x8a\x32LK\xcb\xcf" "*\xe7TG\x65\x66\xef\x08\xad|&\xd5g\xaa\xc9\xa9S\x8d/\xc3\x8a\xb9\xbb\xe1\x93\xddV\x9d\x1a\x92{\xb2u-\x1c\xe5\xc2\x9f\x93\x03" "-\x39\xe2\x33\xc4\xbaO!\xd8\x1d\x39\x83\xc5\x42\xeb\x64L\xa2\x17\xd8\xa1T\xea\x7f\xd6\xac\x07\x0c\x8aW\xfe\xc6\xab\x96\xceI\x42\xdb\x7f_" "\xb4\xde\x45*.\x7f\x0e\x0e\x0b\x9b\x43\xf6\xc0TK\x96\xbf\xfb\xcfZ\xce\xb4h\xfc\xb6t\x80\x85\xf9\x8b\x02\xa2k\xa6+\x82\xca\xf0\x38\x7f" " jX\xef\xd3\x17\xce\xbd\x31\r{\xc6]\xf3g\xaf\xfb\x9b\xf6\x1fh\x80\xc4\xe6\x93k\x88\xf8'\xe2\xf1\x8f\x96\x7fs\xd3\xe0\x1a\xf6\xc8" "\xa6\x1aV\xe3\\\xc3\xdco\x81\x93sJ\xcf\x39\x11\xd3_\x46\xe7\xb6\x80\xc8M\xc2\xcc\xaf\xd3\x9b\x45\x38 \x14\x9a\x1b\x01\x61\xf3\x12\xa6\xdf" "*\xa2\xb2\x0f[\xc7\xc1\xc5\xb9\xd7\xe9\xaa=\x36\xf7\xda\x95\xd3+\?\x0e\x0c\x94Z\x14_\x8f\x0e\x35\x16L\xce\x42\x15\xd2x\x7f&\xca\xb3" "\x83\x87\x38\xd3\xd2\x9co\xd1\xc3\x91\x89\xe9u\x63\x35\xa5\xc0\xf5\xb4\x02\xd7\xd3\n\xe9\xa1\x98=,p\x45\xac\xc0\x15\x31\xa5\xbc\n\xf1\x8c\xdf" "\x66\xbd\xce\xc5\x92\x82\x97M\x8d\x01\xca\xfaP\xc4\xf4\xb7\xee\x32N\xb8\x02P\xb1@\xf2.\x06<\x11\x66\xc4\n\xf0\xb9\xac|r\x06\xb9\x7f" "ix\x45$\xb0\xb5P\xb1\xf8\x81@\xa7\xd0t'\xf7wz'\x92p\x7f\xc3\x15\x1f\xd5\xd2\x0c\x1a\xaa\x97~iv\x93\xf6O\xe0\xa5\x44" "\xd2\xf6\xdf\xd3\xb1P\xee\x35M`\x87\x44(\xafw\x94\xe1\xa3\x98\xd4\x0fK\x99\x8c\x35\x7fo`\x19-\xda\x94\xd7\xf4\x89\xf6H\xe7\xaft" "j\x8f\xf7\xea\x65\xf1\xbb\xa4\xab\x19/\x95\xfdh\xcc\xd2\x0e\x34\x8fq*\xe2\xaa\xec\xf4\x0e\x12\x17\x11\x0b~\x45\x42\xad\x99\xfc\xd3\xccO*" "\x32\xf3\xa3<\xde\xaa\xe8j\xe8\x0c\xf6\xb5>\xa7\xe5\x94\xfej\x44\xf5\xb6>\xfc\xfcs\xaa\x95\x0b\x07\xda^\xbc\xd5\xea\x12\x83\x85\x82\x37\xdf" "\x30V\x36j\x46\x1d\xa1\x45\xc5\xb6(\xa3\xf7\x1a\x45\x44\xbc\x44\x88X\xa7R\x31\xda\xde{}/\x9a\xbf\xa4\x1c\x32\xd0I\x93\xf0\x1fO\xf3" "\xc2\xbb}\x41\t\xe6P\xa2\x10\r\x9e\xb5.|\x62\xea\x30\xeb\xd4\xad\x38\xac\xde\xa8\x95.Rm\xbc\x84#-\xd3\xe4%\xc0\x0e\xc1\x03\x8d" "\xe6~\x05\xef\x82\t\xf7\x8b\xc0\xaayo@\x44\xb3@Y\x1ch^l\xa0\xd1\x12\x46\x35\xae:\x16\xb8*\xa6\xe4\xc0\xba\xe0\x1dH\xa1W" "\x1d\xda\x91\xdc\x9cH\xcb\x91&\xb0\x19\x12\xc6\xe3\x33\x0e>\x0b\x1c<\x15\x38wY\x88~\xcf\xb9\xc8\x65\"o\x00\x1b\xcf\x8c\xc1\xf9\x19\xb6" "(\x8a\x96\xb1g\xcb\"+\x9a\xd4J{\x8d\xc7`\xd1\xb7 #\x9e\xe4\x0e\xefL\\\xed\xe8\x82.\xa6\x10\x44\xfbLj\xc7\\\xaa-h" "\x44\x33V\x83\\j,\xec\x17\x86\x0b\xf1}\xd1\xa9\xc5\xfd\x0b\xa5\xc1+\x42lsW\xe6\x9d^.\xbci\x10\xfa\x9b\x8e\xad\xea\x42\xff\xe5" "\xb9O)\x89\x88\xa1P\xbc\x9d\x39\xa5U\x0c\x36/\xaei\x44\xdf\r\xca\x43\xbc\x43=&M\xb5\x34\xd8\xde\xb4{\xcb'\x94\x91\x8e\x9fW" "\x34\xbf \xe9\xf8\xc9\x9b\x81\xfd\x19\xfb\xae\t\xed\xaf\x94\xf2\xec\x0e\x06\x06\x1c\xfc)\xf5\x35\x86iG\x81+\xd4\x05Np*}\xac$\xa2" "W\x05\xc9\xedw*\xc2\x64\xae@\x33\xab\x42\xb2;s\xf2\x1a\xddRU\x19\xb6\xfe\xc5\x9dkj\xc5 ;\xc6\xf6\x33\xd3\xc2\xe1\x83\x86\x05" "X\x14\xf9P\x35M_\xa6\xfd\x11\xf2U\xec\xa6s\x8d\xcf\xb3\x08O\xf2\xd1\xfaj\xff\x31O\x81\x01\xa0\x92\x03L\x13\xd7s\x04\xb2\x37M" "\xdeyN,\xab\x16\xcf\x9e\x99\x17\x45x\x8c)\x17\xd3\xfbX\xad\x02\x0bI$\xe2\xba\xa4\xab\x14\xfe\x81\x45U\x15n\xda\xce\xfd\xbb\xa9\x1a" "|&\xb9\xf8\xdf\xcft\xee\xf6\xbfi\x18\xcf\xd1\xcd\x96\x0c!\xce\xaa\xe4/x\x81\x9b\x86\xb7T\x65\xcb)\xc3\x9d\xb8p\xeeZ\xf8\xdc\xe3" "\xcc\x95j\xd1`\xc0\x41\xbcj\xf2\x81\xff\x0e\xdf\x1a\xa5\x8ct\xd8\xd1\x30\r\r\x12\x1d\xe4*\xa9\xcb\x63SS!<\x97\xa0\xf0\x8f\\\x83" "\x45\x64\x11\x36\x0e\x94m/#z\xd7\x45l$S~\x90\x9f$\x32\x1cq\x97\x85\xe6\x41T\x08#\x86\x62\xd0y\xc7\x64\x01\x34\xb4\xfc\x45" "\xb8\x83\x14\xde\x9c\x38\xd3\x8d\x95\xa6%\xfdj\xfa\x0b\xb7<\xf3\?\x1e\xfb\xf0\xe1\xa4\x8d\x8c\x8a\x1a\x9f\x18\x0bN\x45\x0e\x91\x94\x32\x02\xa3\xe9" "\xa1i\xd2\\v\xde\x0f\xb4\xb0\x30N\x35\x8cuT\x8c\xf2\x9b\xb8\x85\xb2\x17<\xd7\xc0\xf7\xaa\x14qZq\x89\xd6\x05\x31V+\xf2-+" "\xaa\xe7\xb3\xd1\xcd\xdf\xea\x8e\xda\x33\xe8\x99m\x11\?\xe5\xadp\xcd\xa2{\x8f\x0f\x34.\x33\xb9\x96\x1e\xc9\xbc\x9b\xb0\xcc`\x11[\xa9\xdb\xd1" "Q\x17\xaa\xa6\xb7\x87\x85\xed\x62`\x31\x07\x8d\x32\xe6\xd6\x98,;\x16\xc4\x05s\x83/\x83\x30u\x93_.r\x85\x42\x38H\x63\n\x9a\x16" "t\xbb\x1c\xb9\xba\x86\xc9\xad\"\xd7@\x8b\x9c$/\xb2\x8bU\xe4x\xaa\x08\x87\x62\xc2\x7f\x97\x07\x8f\x94}\xc2\x62\xf8J\x0eH\xab\x46\xbc" "\x0e\xa1\x11u\xd1\x9f+\xfb\x35\xc5p}\x17<\xbey\xcd\xc4%\x44%\xb6k\x94\x8b\xd8\xb6&\xb4\xed\x80\x42\xcc\xed)\xa3n\x95\x62\xc1" "y\xf0\xfa\x8a\x16\xc3\x04\xb8\xc8\xa6T\xb8\xf4\xba\x04{\xd2\x84\xf5\xb5\xd3\x9f\r\xdbH\x65\xb4<\xa6\xa1u\x91k@\x45\x7f\xae\x42l\x61" "\x81\xf8\xef\x12\x31~\xcaVU\xee\xdf\xca\x34u\xcc\xcb\x9e\xa0\xf2\x88\x36\x13]\xdf\xc5\x04 \xb5\x04\xf3\xcd\x45\xf8\x8f\x34\xa6\xf1\xb1\x44\xb3" "\x1d\xb3\x42,\xc3\x14i\x8b\\\xc4\xbe\x39\x61y\x1b\x0c;^\xa0\xb8RX\x8c\x31\x31]\xa4\xfdT\x31~\xe0\xb7\x31\x30Qz}\xc6!" "\x88\x92\xcbl\xc5\xf8=\xeb\x0c\x8a\xd7\xfe\xb2\xa6\x9aN\x18\xb0\xf2\xd2\x34\x98\xdc\x9b\xc8\x17P\xc5\xff\x1c\x13\x66\?\xbc\xdaP\x8d\x19\x18\x8f" "\xbeH\x14\x16\xb6i\x45\xec\xd6\x15\xce\xbe\x9dqq\x1c\xf6Qt\xd4\n~\x9f\xd1\x88\xfbQ\xd6H\"\xf1\xf8\"\xbcnQ\xbb\xf2\x93\xb1" "\x9dU\xfe-\x9a\xec\x89\xa8\xa6\xee\xf0Rm\xe6\xe4\x9c\x63\x11.\x42\x84\xbd\xcb\x83\xd7\x88\xad\xadR\x46T\x08Y\"\xda\xdb$\x39.\xc7" "\xbf(m\xfa\xa6\xee\x8b\xb6h\xc9\xf5\x8eu\x44I\xabQ\x8b\x10\xa6\xa2\xb6\x92\xd8\x7fm\x9an[\xea\?\xb1\x37Q\xe2<\xac\xf0q\x9f" "\xb4\"\xd7\xe0\x92\xdf]\xa5\xd4\t$T\x1b%\x36\x8e\xca\xbf\x65;\xb8\xcc\x42[\x17\xc9\x36\xf9@>\x91\x13\xa7n\x33.\xf3\\k\xfe" "\xe2\xe6:P/\x81\xb7\xaei\x98\xd3\x03\xad\x97=\xd0\xe4\xb6S\xed\xf7Nw\xd6\x61\xbd\xa0\x84\xad\xcf\x65\xee\x18\x14\x9e\x9f\xb2\xbbS\xa2" "\x19\x43)\xb8\x18\x90\x9f /\x9fmm\t~\x95\x95\xfc<\xf7\x1b\xf5\xf2\x7f\xbfW\xd0\xf2\x8fN\xb5Q\x43\xf3i\xdao\?\xb9\xee\xb9" "\xc6\x9a\xcc\x44\xd4\xf3&\xda\nj\xaa\xa9\x8d\xc2\xce\x35\xdds\x7f\xfa\x95j\xb9#\x38\xda\x84\xf6\xd5\xe0Z\xbcj\xa9\xc7\x16h\xa3;\x0e" "\xb7T\xd3\xf0{\xe6z\xc9\x34Z\x30\x8a\xb8\x43\xfc\"\x11\x61\xce\xad\xa4\x91\x98\x89\xbdU*>\xf6\xf6\xe2\x9b\x8b\x61\xa7\x90\x8a\xccx\x11" "\xe1\xec\xcc\xc4\xf4\xa7l\xf7\xb8\x91\x63\x85\x12<@\nK\xe7$\x33\xe4*\x43\xaa#Z/S\xaa\xa1\x42-\xc1\xd5\x98\x92O\x0cs\xb1" "J\xddy\xd1\xe7\xe9\xfd\x36\xd4\x82\xae\xe8\x85,\xa8\xf0z*\xfc\xf1z\x19l\xa1P\x06=\xfex\xbf\xec\xe4\x08\xae\x84\xa8\xe3\x46\xbe\xb1" "\xa5\x34O\x1f/\x39\xbe\x34q\xf9\x99\xde\xf6\xe3\x65\x34\x9aR|s\xca\x8b\xaa\xf1l\x97\x65\xb5\xdfX\x96=\x99\x63\x8a\x12\x37\x84\x94\x82" "\xa7+\xb6\x87\xa5\xe0\xf9\x94\xe4\xe5\xbd\x32\x0b`\xd7\xa6L\x8b\xb6\x97\xab\x91\x0c\xb2\xdc\x46N\x34\xe6\xff\x84_\x9c\xec\xd2/LyNt" "\xd9J\xac\xd7K\xc1\x9c\xbfm\xfe!\x8d\xda\xd9\xbc\xe3\xeb\xb0\xe0u/y\xb1+\xbe\x08\xfe\x90`\xe3Q\x82Wl\xe1\x96g\xc5\xc0\xbf" "\x04\xff\xce\xc2\xe3\xa1\xbe\xf5G\xc8\xaf\xf0\xa4\xee\x34\x97\xa0\xb9\x03\x8dV\"\xae\xfd\x0eSm\xdb\x38\x38R\x9dL\xec\x35n\x17\x31\xb1\xf4" "\xb1\xff\xe0\xc1)\x87s\x37P\xc9\xdf\x33\xce\xcd\x95RG\xcc\"\xc2\xa6\xae\xc4\xe9\xba\x12{\xb9\x07" "O\x0b\xe4\x82\xc4;\x00\xe7R\xc6 \xbf:\x10=S\x45\xe3\xc0\xa3\x44\xe3\x37\xe1\xc2\xeb\xbf\x18\xd6\x10%x\x05\x11\xb2&\xe7\x12\x7f)" "\xc6n\xa5\x12g\x1eJ^\x03\xc6,\x9d\xc2\xf4J\xef\xf1&\xc5\x0f\xa8\xc6\xe2\xa7[\xf2\x37\\,\xe0)\x46\xb4\x97\x63\r\x16\xc5\xb7\x8c" "K\xa1\xca\x80\xcfT\x44\x38P\x12\xd1\xbf\xc3\x1e\x01\x42I*\x8b\xe1\xf4\x32\x8d\xb4\xa2\t}\x12\xcf'\x9e\xa1<\xc4\xdf\xdf\xe4\xdcy\xf0" "\xb2\xc6s^ \xa6\xafJ\x34\xa5+\xc5\xdbg\xbd\xc4L\xf5@\x83\xcf'\xd3\x38\xa5U\x82\x43\x14\xe5\x88\x64:\xa6\xb3\x84\x45r\xe9L" "s\xfd\xb7\xeb\xd4\x66\xear\x95jWmI\xd8\x7f\x8c\xfbO\xb0\x1fIx\xec\xdc\xaf\xb4\x8bvJ\xe2\xbdK\x8e[N.\x07\x95\xbc\x45" "\xe6\x16P\xa5\xb7\xe2\\\x8f*\xd1\x8c\x42\xe9W\xc9\x9e\xbc\x32\xcc\xd6\x64\x84\xef\x9a\x46\xa4v\xad\xfd\xe9]\x1a\x84!U\xde;\x35\x8a\xe9" "\x31\x32\x95\x96\x84%\xce\xc0\x96\xe0\x1b\xc6h\xdb\xf9_\x0e\x34o\xa1\xa0\xc5\x9d\xca\x7f\x34TG\xb4\xd9(q\xc6\xa7\x94\x0cQ\x15$\x9b" "\xb5wni\x9c\xa8\xa4M\xd9\x15W\x0c\xae\xe2S+\x38W\xcc\x98\xf2\xdf\xa2\xef\x94\xaa\x38\xc2\xccy\x19\x9b\xe9\xcb\x65> %\xab\xb1" "r\x90\xb9\x8e\x0b\xcb\xf0\xb6\x0e\r\xb6\x32\x65s\x06\x30\xa3\xb8\x00k\xab\xf0\xea\x0e\xfe\xf5\x45\xab\xef\xc2\xcf\x0f\x88\xd8\r]\xe6\x44H\x99" "K\xb1\x65\xf8\x8b,\x97\xc3\xc6y\xb4\xfa\xe2LZ\x19.P\x84\x18\xdf+\xc3\xec \xc2*S\xd9\xcf\x19\x9a\x97\x35\xa5\xdd\x66\x99\x99\xaf" "\x8c\xb6-Vh\xe5\xa8\xf6\x9c`\xbd\xb7\x1c\xb5p\xfa\xe8\r\x17\x11\x99\xa7j\xa1\xb9\x80\x14\xae\x7f\x10\xde\xaf\xac\x9b\x92\x65 \xc1\x1eL" "\x39\xce\xe2\x80\x38\xff\xecw\x1c\x37N\x9dQ)\x1f\xf6\x90\xa3q\x0b\x19\x16\xdf\x1d\x81\x63\\r<\x99\x87\xdf\xc8\x94\x04o~\x39\xe9}" ":\xa3\xde-\x97\x12\xcbr\xa9\x88\xa1\xec\xe2\xde\xf2\x91\tQ\xf7\x82\x83\xdd\x8aYJ,)\xe6\x9c\\\xc5S\x31\xcc\xd6S\x11][\x13" "\xb1\x93_\xc5\x08;\xadL\x34\xa7\xd6*\xa6\xa4\xb1\x9c\x8a\x07\x9fr\x17o\x05n\x13\x8d\x41\xa1\x95\x8a\xc5T\x64G\x44\x45V\xa8\x15Z" "\xd5T\xb0{O:\x01\xf0\xd3&\t\xd2\xb1\x83m\x41\x05Q\xd1\x84;\xfe\xe4\xee%\xbd\xcb\xdd\x0b\xdf\xacJpR\x84\xb3+\x11\xe1_" "\xa0\x12\\\x9c;i\x95W\xa1\x8b\x81\n-\x45\x94\x1c\xf4\xa9\xe8\x37\xa5\xe2\xef:>\xdf\xb9\xc6*\xa9\xe2\xf7\xa5\xde\x1d\x99\xe7\xea\xd4\x91" "\xf7\xe5\xb7*L\x93\xae\xbe\x9c\x61\xbe\xec\"\xeb\xceJ\x80\x19\xd0\n\x9a\xbf\xf4\xf7\xd2\xca\xb5\xb2\xaf\x39*\x41\xed\x1d\xecM\x38X\xa8\xc8" "h$\xee\\s\xd5\x94\x1a\xa2\x02\x89\x86)\x04\x65z\x86\xc7w\x38\x31\x11\xf1\x89\x97\x87\xce\x46\x85\x9b\xf3*\xc1\xe7\xc2\x0bN\x30\x7fv" "\xa6W>\x7fN/l>\x0b\x96_\x61\x89\xd7\xb4\xfc\xd2z\x0b\x15g\x85\x36\x06\x15\xbe,J\x8e\xa3*~\xe5\xf0\xbb-\x84\xd1\x64%" ",\x9f\xf8\xef\x86\x30\x8eQru\xb2\xa2\xc3\xfe\xe1\xa3\?~vU\x95\xe9\xe9ZO\xb1\xf9\x06\x14\xf1z\x04\xf6y\xd4\xbfK\x10\x9bt" "+\\\x02\xf6N\x81\xd2\xb3J\xc5\xcf\x85\x8b\x9ek\xac\x44\x94\x7f\xcb\x1b\x36\x0e\x15Z\x18\xfa\x36\xf1J\xf4\xb8\xd3\xd9\x8a\xcd\x11\"\?H" "\xc2\xea;\x9cO\xd3`$\xe5\n{\x30\x95\x38\x93\xfe g\xcf*\xdc^\xac\xf4\"\x04\x9f\xbe\x46/\xeb\"\xb2\x01\xabp\xee\xa7\x92\xa0" "\xa5\xa8x\xba\xfa&\xc1\x00\xb2\xa2V\xaf\xfc\x19\xae\t)\x35\x96#\xa6]U\x93>\x07\xed\x42*\xb4|W\xb2vQ\x91\x46\x86\x95\xe4" "\xfa\xdc\x19\xe5\x07\x88\xb1`\x9a.\xd7\xb9\x86Z\xa0\xa6u\x10V\xbfj:\x8c\x33\x1f\xae\"\xa2-\xa9\xb1\x12\xae\xd1\x16\xad\xe6\x9f\x07'" "k\x10\x63\x99ZP\x1f\x80\xed\x36\xd8\xe7\xf1\x18\xd3\xd6\xb8\xf1V\xa9\x81\xd9rv\xa7\xb5\xb0\x8d\xa3\xb8X\\\x8b`\x93\\\xe3S\xaa\x45" "\xff\x66t.Q\xa3\xef\x94Z<\xb7\x12XK\xda\xf6\x95\x86.H\xddZ\xc9o\xd0\xe4\xbd\x11\xdc\xdd\x04\xd2\xde\x34\xc7Z@\xd0\x63k" "\x04\xa3lr\xdf\x0e.\x1f\xa9\xe5\x9d\xb4\x39W\x91s\xca\x8d\xe0\xf3\r\x84\x7f\x0e\x65\x98\xc1G\x9c\xebnp\x94\xd3\x08'W\x61\x9bN" "\xbd\xca\x8d\xb8\xda\x01_\x32\xe0\xac\x8f\x00#\xe5\x66\xd0\xf8\x01[\xf6\x06\xb6X;\xb4\x82\xc6\x9d\x33\xfa\xb4\x92\xd8\xfd[\xcc\xc8\xb5\xf3o" "\xe1\xd3T{\xed \xe1P\xc4z\xb9\x8a\x61\x9d\xbe\xd0\\\x63o\xc2\x34L\xb1\xaa\x18}\xe4\x83\xd1\xfb\x7f\xb5\xf4\x84\x98\xa2\xed\xea\xa4n" "\xff\xf9oq\x0c/t\x92\x80\xde\xbaR\xcb\x0f\xa6\x88\xf7\x9a\xba\x1dy\xd3\xf5\xac\xe4\x66\xb8\xff\xa4\x18\x8f\xee\x64\xf8\xa4[(\xe0\x80\xc2" "\x92\x97\xf9\xbf\xd5\xe3\x7f\xb5p~\xa7\xb6\xe5h\xa8\x35\x99\xb6\xdb&\xe6^\xa5\xdb\xa2%\x35\xf7\xca\x91\xbd%\x17\xaf\x10z\x01\x1as\x41" "\xc5\xfes\\\xbc\x93\?$`\xbe\x44\xc9\xd7\xa6\x1b\x9e<\x83\xcc\x92\xa8\x84\x93r\x62\xbd\xcf\x16\xaf\x1fXL\x17#\x87\x10*\xd2\xf4\xb9" "\x0f\xb7H\xe5>\xed\xd9n\xd8\x08\xdf\xfc\xad*\xfb.\xc3M\x90}\x02\x61\x89(,;\x35\xf4\x00*]\xd5X\x05\xdc@K\x0f\xabn" "\xc1\xce\xc0\xb9\x37\x90T-Z_p\xdd\xfe\x86/\x9e\x32\xf8\xf5u\x16\xd5\x92\xa7Q\xaa\x61\x17\xe4\r\xa2j\t\xf3\xbfN:\xcc\xb8\xa1" "\xb7\x98\x1b:\x1f\xba\xe1\x18\xfd\x06\xd1@\x84'\xc3ps\xc1\xa1\xc8\r\xbb\x9b\x37\xd1\xf4+\xbc\xab\xe8{\xd3\xe3\x61(\xdb\x37q\xe6V" "G'<\x39;\xf3\x37\xb4x\xb8\xe5\x44\xdfmP\xbd\x02k\xcf \xec\x30\x95\xcc\xfa[u\x62\x98\xf5z\xe3\x96\x1d\xa2[.\xa7\xdcr" "\x85\x80\x61\x04\xcb\xb7\xc9\xfd\t\xf8P\x92s\xd3\xe8\xc9\xb4\x8d\xbb\x14\xf8\xc7U\xcf\x7f\xf2\x07\"\x03\xffI\x8d\xfb\x1fmz\xa0\xf9w\xf9" "\xd4\xff%\x9d#\xb0\x7f\x63\xe1\xd9\xed\xea\xa4\x37MV\xc7 \xea\x82\xbb\x30\x9f\xd5\x16\x04\x1bV\x9e\x11\x05\xc1\xc8\xa2\xf8\x9c\xc6.\x35\x91" "\xb7\xfe\x0c\xb7\x9d\xc2\xd2:\xfc\x9a\xb0\xdd|\x66\xe9\x7f\xb6H\x80\xf9\xff&p\x61W\x45\xb6\xc0*r\x02\xfaY\xa7\xe5\x31\x03\xf5\x1c\xde" "\x1c\x1f\x9c\x12Z|\xf9\xe5\x9aNx\xc0\xe3\xc3s\xb4\xd6\x9d\xcf\x07\x9a\xb5,\xd0\xe0\x36\xdf\xc8k~\xe1\xb4\xefKP\x7fq\x1ej\x16" "\xbeZ\xf8\x64\?\xf5\x12\x66\xdbNO\xe2\x12\xcc+k\xa4\xd7\xe0|\xc0\x46\xf4\x95\r\xe4\xab\xf6\x01\x98\x44\xc3\x97\xb7\xa0j/\xce\x07\xe7" "x>\xf8.\x7f\x04\x17\x8fN\xe9\xc2rR\xf5\x43J\"\xf9\x11}\xe5\xe4\x0fZ\xe5+\xb9\xde\x86\x93\x05\xb4\xda*\xd9\xd4\xe2\xf3%\xb4" "\xc6\x45P=\nv\xc7\xd0`\x0b\xfc\x11\xdc\xdc[\x9c\xbc\xf5\xa1\xb6\x9b\xba\xa6\xc3$\xd8~\xa9\x16\xb7\xae\xb8\x93\xe2\x83k\x8a\x1f\xc1\xe8" "\xe3\xf0\xacS~\xd3N\xe9\xe7\t\xd1\x0e\x7f\xf0\xd5\xfdP\xb3\xc5\xb3,\x9c\x12\x8a\x06\xcb\xc5\x8f\xd0|U\x0b-\xf6\x93\xb0\x97u\xb2\x86" "\xf9\x08\xc7<\x11\xea\x04\xe1\x8b\x93\xfe}>X\x11+\xd9\xc3S\x31=\xc1g\xc7\x19L\xce\x38u\xac\xda\xfe\x80\xa5\x93-\xebG\xf8\xf5" "\x0e\x62\xbaZ\xa9S\xb3\x8bsh\xcb\xdf\xf4j\x36S\xee\x34\xfe\x88.\xf1,\xb9\xd2\xfb\x11\xb5\xce\xfd\xda\xa3\xaeW\x98\x0c\x41/Lw" "\"\x7f\x44\xf7S\xf2\x0b|\xc0\x8f\"V\x86\x10\xae\xa3\x94\x7f\xcb~\xf8\x95u-\x38\x7f\xe2\xa0\xe1\x43*\x34[%^\x41\x63\xd1\x10\x1e" "\\\xb6h\xea\x30\x66w\x43\xad\t\xa6\xbb\x9c\?\"\xffhw\x43OQ\x1f\x08\xa7\xc5\x91\xe4G\x8c\x8d\x66\x1fq\xfe\xc6\x19\xec\xce\xd9\x43" "U-\x1c|\xee\xb5\xa9\x16\x92\"\xee!\xae\x9d\x91\x9b\xfd\xd6\x9c\x8f\xb8\x81\x1f\x96\xc1l\xd0\x9c\xfb\xd5\xc7\xbbn\\X\xd2Z\xef#\x39" "\xaf\xb2r\xfe\xf0\xe7\xedy\xc9\xeaY\x99&\xa1\x87\xf3\x81H\t\x46\x1aZ}\xd0\xd5\xd1G\xf2\x34\x93Z\x35\x18\xf2\xc0\xc5\xb3\?\xb0\x64" "\xfb\x1b\x66\x66\x9cZ\x18 \xd4\xbb\x91\x63<\x15\x43\xf3\xf2k\"\xbd\xc9\x98\x88\xd1\x1c\x45\x9a\xf5\x0f\xb8\xbe\xa9\xfc[\xaf\xf7\xda\x33\x88\x0e" "\xec\x80\xab\x9f\x03\xde\xbd\x32\xac\\\xb0k\xa7\x9a\xc6J\xda\xf0\x8c\x16T]\xd9$\x99\x0e/\x1aJ\x1a\x8f\xfb\x8e\x97\x01\xc7\xba\x83\xbf\x1d" "i\x41\xbb\x8d\xf1\xe4\x81\x1d\xa3\x41p\xd4q\xa6\xa1^\x45;\xc6\x39\xb4\xd4\\\xbeGg\?\xa9\xf6z\xa4\xd6\xbe/'*\x63\xe0\xed\xc9" "\xffM\xbb\xe0i/\x87$\xee\xd1\x33\x94\x1d\n\x65\x1at\xcb\x34.\xfb\x9b\x08\xab\xc0\x41P\xe2\x39\xe1\x91\x42)\xb5\x88\?\x04\xf3\x05\xb5" "\x84\xbblh\xd3\xcb\x30\xf7\x04\r\x83\xe2\x81u \x8f$\x83\x38\xbd\x39@\xa4^\x61\x65\x0b\xdew\x38/\x44\x91\x83\x33\xd5\x38z\x1b\xe8" "\x8a\xdbz\x9d~\xe3\xf1M\xf7\x17\xec\xb5\xa8>\xddk\x33\x10]\xd1\x01\xdd\xee\r\x02\xbf\xa1\xd1\x9d\?$\xe9t&\xef\xbc\xe3\xcf:\x38" "\x1f\x81\xab\xe7\x34\x07\x30\x44Qz\x31T\xa7z\xcc\x01\xb8\x0cU~\x81<$\xcc\\\x91\x15\x12\xf7\x44W\x38\x03\x84\xf5\x13\xa2Q\x1d\xb0" "\xb6\x18\xb0\xa2\x1a\x44O\x37\x08\x8c.\"\xd6\x00\x06p\x31[\xf6n\xa6R\x37\x1c\x63t>`\x95\x01\xfb\x03\xd5\xa4r\x17-~\xb9\xc0" "'~\xc1\xf4^\xa7\xf4w\x81\xe3\xd7\x01w\xbd\r\xd2\x43_\x8e\xb5/\x34\x99\x86\xedq\xd2}\x65\xda\t\x99u\xd2\x84\xd5\x44\xcc\x43\x0c" "\x10\x16I\xb9\x01\xc7\xc7N\xcf|\xce\x82+i\xb5=\xf0\x02\"\xf4\"\xa0\xa2\xe4\x37\xfaU\x03\xba\xf3Qj\xb4I\x16\xf3x\xbc\x03\x31" "\x15\x30\xd8{\xbb\x1bp@\x31H\xea\x38\xd4\xb3'ig\xc0k\x64\x31\x07\xbdJ}\x16h\xd8\x06\xff\x9f\x9bWK\xb3\x03\xed=%w" "\xeb\r\xe5\x0f\xac\xbd\x80\xb8\xf0!\xdb\xad\xd1\x9fyk.\x8fh\xe7;\n\x96\x96O\xa3\xa8\x95\x89\x33\xe5\xa8\x65G\x8d\x39\x01\x37\x66\x1d" "\xa5\xd6\xa8Q\xb3\x12\xbd[\xde\x32\xb2\xa9\xd1\xfc\xe6\\\xbb\xc6\x91\x8b\x89(\xfc&.Nh\x02`\x61\xdbS\xe3\x03\x06\x44\x37r\xaf\x18" "\x45\r\x63\x39|\xf6\x04\xf6\x0cM\x84\xb7\t\x8b\x90\x8e\x32\xc8\xa0\xe2\xc2'\x9e\x61r\x0c\xae\xea\xd1S&\x82\x37\xc6\x31}V\x8e\x83\xdd" "\\\xdd\xfa\xf2r\xb8z\xa2\xa4\xed\x18\xa3\xfc\t\xef/\xc1\xc7\x95\x93\x66k*\xfa%\x89\xe8\xd7\x11=\xe3\x17\xb8\x86\x35\x46\xbc!!\x1a" "&%\x87\xc7\xe9\x00\x1ai\xbe\xce\xa7\xda\xde\xc9\xcf\x38\x36\?\xd1\xc2;\x9c\x9f[\xbf\x84\x38o\xd2\x1a\x82\xa8\xe7\xa7\x1c%\xc8 `\xea" "\x44\xdc\x81~`\xbd\x0e\x9a\x17[\xfb\x16\x88\xe3\?\x83\x9a=\xf5\x99\xce\xda\xb6\x7fy\x93\x33\xc4" "\xb9\x31\xb2,\xcc\xe0*Z\xb9\xe6\xc0u\xa6~\x81\xfe\xe5!\xee\x06\xc1\xeb%\x97\x9bT\x8b\xb7\x63\xd7\x82\xf3\x99\xd3O\xc6\r]\xb3\xa0" "\xf6\xe4\xa4\x85\xa6\x8a\xd1\xfb-\xc4v\x96\x35\xd7\x8c\xe3\xed\x19\xa7\x07\x66j \xd1\xe6\x17\x1eg\xe1\xd3u\x30\xd9\x41\x43y\x15\xde\xc6\?" "\xe7\x10Gm\xce\xf5\xcd\x82I\x0e\x84\x89\xe3L\x8bty\x19\xc1\x1c\x62\xa6\xb6\x36S\xdc\x65\xf0k\xfd\xd9Y\x98\xfd\xe5.\xf2Y\xd8\x18" "\x84\xf7\x35\x88\xe6\x03\\\xd8!\xb1\xf8\xa7\xd7\x01N\x16\x41\x86\"\xb6\x66\xcc\x42l\xfc\x9fI\xedL\x13\xc4Y\x94\xed\x06\xcd\x36Gx\xaa" "\xa9\x01\x96k\xa5l\xf4\xf1\x8f\xa2<\x99\x66\xe0_\x32-i\xe1nY\xcag\xda\xba\x63nj\x16\x17\xa6\x31\xea\x84\x99\?\x00VgJ" "\xcfx\x84>\x33\xc2\xcc\xde\xb5\xfd\x64\x93i\xb0\x38\x11q\xc3\xee\xcd,\x39y\xf6\x87\x91\x34.\x83\x91\xbd^\xdf\xf2\xe7\x0c\xae\xe7\xf2\xe7" "Z\xd2Z\xca\x1f\x34X\xf3~\xa7\x9f\xe2Q}\xb3Y\xfc\x0e\xfb' \x36\x92\x7f\xb3\x01\xfb\xe6\n\xf6\x37\xdf\xd0oV\xc5\xdf\x08xh" "\?\xe1\x64\xa9\xf6)\xeb\x05\xdb\xa5\x05'\x17\x17\xc1\xf9\x31\xf9\xe4\x64\xef\xdf\x44\xb4\x1e*\xf2\xb7T\x64\xcf\xd4\xc4\xf6\x11\x44t\x83\x94\xe9" "w\xd0#Z\xb0G\xb4`/G\xa9\x61{G\x43j\x0f`y\x04\xde\xcbHr\x01\x91\x97\xce\x65\xb0\x45\x00Oz\x0b\xe9Z\x90mg" "\xfa\x9b\x93\x36\xf7\x0c-\xb8\xe3o\xc1\x66`\xc1\xcd\xfdJ>\x38\x15\xd3\x8b\x13\xf1\xb1I\xa3w\xd3\xf0((\x46\xdbJ\xb4\xeey\x02\xa7" "\\T\x64\xf3\xbe\xa0\x8d\xb8\x92\x13\x80\x0bs\x01\x94\xa5K\x12\xd3\x98\xaf\x10=\x13U\xe3\xd5\xab\xb8\xbf\x08\xd5\xb0\xafY\x45\xd6\xcb&\x62" "\xc3\xb9\x8aty\xb4\xe0\xa8L\xa9^\x9e\xda;\xd7\xfc\xa9\xb1\x91T\xa6\xbf\x36\xe1\x19\xd1\"+=\x37\xd8\x18-\xc2\xef\x0b\x04M\x10\xd1" "\xa2n\x1b\xfdR\x38w\xab\x64-\x66\"\x66\"T\xf4\x1f\x8fN\x87\xce\xf4\xbb\x30p^p\x8d`\xc1\x92\xad\xf4lR\x97\xc4\xcc\xe8\xa8" "\x8f\xeb\xe2pR\x19\x0c\xf9\xc5\x97\x31\x88\x1e\xe5\x82\xcb\x92\x0b\x44\x94\x10\xf2\xfa\x85\x08x#\"\xd6\x19\x95~\x85\"rVq\xc1\xaa\x61" "\xc1\x01\xd0\x82#\x32\rT\x17\x61\xd5x\xc1U\xef\x05\x97\xb3\x95~\xd1\"\xfa-\xaa\xa8~\xbb\x32\xe9g\xfe\xf5\xbb\x1fZ\xca\xf8\xbe\xa3" "\x05=\xef.\xf9v.\x39\xe5\xbf\xe4*\xdd\x92o\xe7\x32\xb8p\x1f\xc5K\xbeqK\xb6\xaaK\x0e\xd1\x96\xea\xce\xae\xc6\xa4\xab\x1f\xbe\r" "t\xcb\x92\xef\xec\x92o\xe1\x92\xbd\x95\x65\xb0\x9d&\x8d\x13\xbe\xc1K\x9a\x8f-\xfd:\x84\xb4\xfb\x13\xf1\x03\xcc\x9f\x80" "\xc5\x17\x10\x93\xa4\xcb\xb0\xc6\xf4\xc6\x03\xf8\x90\xfd[\xe7\x83\x87/>\xf8\x65\x38\xee\x86\xd3\x93\xa8\xd2\x38\xd4\x9a\xdf\xae\x45\xb3\xfbT\xe3\x9d" "\xe8N\xc2\xd3\x1e\xe7\xbf\x97\xdc(\xc6(Q\xca;\x10^\xc1\x97\\\xfbZrvV\x38q\xee]\x98/\xb9SP\xb8\x01/\xce\xc0l" "\xd7\xa9}(\xd8\xbd\xab&\x0f\x01\x61\x10L\x8b\xb0\x62\xb7\x8c\xae\xa7j\xaf<\xfd'\x8d\x12\xdf\xdb\x65\xf4\xb1\xe5\xa4\xfc\x32\x1at\x9d\xac" "\xbfT\x64!_\xf2\x15Qz\xee\xb2\x9dW\xfe-}Nx\x19}\xfd\xd3\xbd\x43p#\xb3\x44\xb8]\xe5\x9d\xd6\x84\x37\xeft\xea\xb5\x8c" "\xcf\x91_\xf1=\xee\x9c\xcb\x45K\xbe\x41K\xbe\x41\xcb\xe4\x18\xe5\x88\x33\xf2K/\xc1\xda\xe3g\xf1L\x36\x35\xde\xc3\x9a\x8e\x94\xd7\x34t" "^{\xba\xf4\xae\x8dQ\xcb\x9e\xc3\x86\xe5\x7f\xc3\xae\xe0\x86\xad\xc5\x86\x9b\xc2\xb6Q\xd6j\x98\x1d+\xfb\x1d\x82\x81\x08\xe1\xa0\x61\x17\x9c\x9f" "\x81\x98n\xda\x31\xefwt\xd7\xa3\x94\xc2\x1a,l\x84\xbb\xd3h\xd9\xcb[\x9d\xb6\xfd\x19#\x01\xbb\x18w\x34\xe5\xd9\xd9\x1e\xb4^t\xab" "\xa5\xb0r$\x7f\xc6x\xbc\x82\xf7\x9d\xca)\"\x84V.t\t\xd4\x06`\"Z\x1b\\\xb9\xc0\xc2\x9e\xb0r\xe1\xc4U)_\x9d\xb8@" "\x11m\x10n\x94\xff\x30\xee\xaa\x30\x18\x94\xd0\x9c^\x41\\\x30\xc9z\x13\x95\x0b\x0c\xa3\x85}\xfc<&\x06\x84\x66\xbeW\xb9\x80\x03>\xa1" "\xad\xf0\x0b\?\xc8\x01\xae!\xce\?\x85\xbdW\x18{\x88\xf6\x82\x8b\xc5\xc0Rh\x06U\x15:]\x35\x06\xc5\xcb\xf8G^\x81_$\xd8\x92" "S%\x83P\xf5\x15\xda\x34)\xb7 \xee \x03\x97\n\x95\x0c\xe6:\x84\x66\xa2)\xb4\x1ek%\x13\x15\x46\xa0\x45\xc5\x35\xfa\xa9\xe0(I" "h\xf6\x9b\x95\x0c\xe6\x66\x85\xe6\xe2]\x38\xb3k\xcf\xc0JJY\x05\xdb\xe7$\x03\xfb\x8ah\xf3\x83\x42\x33\x46\x12Z(\xcdJ\x0e\xdb\x05" "\xe2\xf2\x16\x9a\xcd\x80\t\xad\x90\tmJ\xaa\x92\x0b\x8e/\x41+\xcc\x46\x19-`(hZ\x30\x9a\x61\xb0\x0em\xff\x01L\xff(\xf6S" "\xd1\xa6\x31\x45\x34\xef\xf7\x42\x1b_\n\xad\x1a\x17Z\x98\x65#\xde\xf6J.\xa1{Ri\xa0\x39\xaa\x34\xa8\x37\xe5O\xd9\x86" "\xc9\x82\x11\x61i\x44\xb4\xf5\n#\xf3\xaf\r\xbb\xc7J\x9bw\xa4\x84\x85[\xa5\xcd\xacl\x63\xe7L\x85\xce\xcc*]t\xd8\x85\x16\xf4\xa5" "\xd2\xc5\x14m\xa5\xf7\xb7,\x05\xb5\xa3\xa0\x66\x19\xdf\x0b.\x1e\xa5\xca\xc5\xfa\x8dh\x95\x1e\xb9q\x1e\x1ek\x8b\xa7\x42\xab\x9b+=>\x0c" "\x46\xb5\x34\x46\xadY\x64\xebL\xa2\xe1Q(uQ\x15yz\xcfj\xe1>X\xd8\xb9\xee\xb1\xebK\xb8\xae:\xe1\x1f\xa7\xf2(\x7f\xa0\xad" "]V\x9e\xe5O\xf9\x8aM\x9e\xc6\xc0\xbc\xf9\xa9\x98u\x06\xbb\xb3\xf4\x80%\xbf\xb0*\x90u\xd0\xb6\xe4\x08\xf1\xca\n\xff\x45\x95.\xc4m" "\x8f\xf9\xf7\x1a\x9c\xbf\x92\x03X\xf5Q\x1b\x82\xe6\xbcX\x39\x01\xf3\xa7\xe0\xd5\x83\x33\x35[\x83\x66n\x95\x45\xecv\xc9\x99S\x9dr\xf4\xde" "\xc2N\xc3\x13\xa2\xd2\x18^Z\xa1\xf9\xfc\xa6h=\xfe\x9a\xd9\x89)\xdf\xc0\xd1\x31\xf9\x80\xc5\xf7\x8a\xb7/\xaf\xacK^\xd5\xea\xda&\x05" "\x44\xfc\xe4\xd1K^\xc2\xea\xcc\xc9\x42\xf5\x8a}\x0c\xc2\x1d>\x92\xea\x07\xf6\xd3\xd4\xd6\x98\x81\x17\xf1\xf8\x91|\xc3L\xa2\x88\xd9*:\x38" "\"\xe6\xda$\?j<'\xf7\x65\x88\xcdK\xbfT\x44KT\xf2\xa8v\x8d\xbcM\xdep\xc3\xa1\xad\xd7\x0b{}\xf2\xd6)\r\x0e\xd6/" "\xa1\xed\xf2.\xb2\xee\x37q\x7f\x00\x1c\x01\x98\x88\x39|\x88\xa8\x97\x44|'\?\x9c\xe1Y\x36\xf8\xa5\x66\xbe<\x8c\xfe\x64\xc3\xfe\xe4o\x83" "\x62\x16\xfe\xabx\xd9\t\xef\x8f\xc3y%<\xba\x83\x36\xe4\xc9\x87\xcf\xe9-\x9b\x18\xbc\x0cX\xf5\xbf\xea\x8c\xcaj\x0e\xd1\x9c\xf2\t\xcd+" "\x80\xf0\xe7\x39=j\xd1\x87\xc7\x7f\x15\x17\xce\xd4\x33\x99i\xbaK\xda\xe6/*\xaf\x08\xf0+,]\x92y\xcf\xc0\x08o\xbaR\xba\xe7\xc9" "\xfa\x0c\x96\xf6\x92P\xe5\xb1<\x63\xd4~N\x96(\x8b\xd8\xa9)\x44+\xf1\x1a=n\xc0\xb7\x0b\xbf/\xe9\x64\xf8\xe5\x63zGh\xd6\xc2" "\xc2\r\xca\x02\xe6\xd8\x31\xea\x35-x,\x06/\xf8:V\xca\x85M<\x06l\t\x11\x8e\x91\xc5\xb0\x92\x10n\x07N/\t\x1a\xbf\x9e\xb7" "\xa9\x41\xeb\xbf\xcf\x30\xd2\x33\r\x83s\x8aL\x35\x13\x33\x63<\xda\x61gS\xe5\x35\x39\xc2\xc9\xd0\xc7U\xe2m\x97\x9a\x39\xb9\xdb\x61\xb2H" "\x34s\x81R\xf9\x08\xca\xaf\xce\xe4|\x04\xb1\xf2\x01\xd6\xea`\x8b\xba\x99\x93U>\xc2\xb1\xbd\xe4S\xf9s\xa2\xc7+\xacU\x41[\xd2\x17" "\xb6\xaaN\xe9\xe2\xb1\x93\xf9\x89~\xb0\x31\xa8\xbe`\xc6\xa9\xf2\xc5O\xbf\xd4\xfb\xc8\xf5&>\xcf\x1dj\xbd;h\x9d\x42\x38}\x84h\xbb" "H\x85\xcf'\x87\x07<\x9fHo\x30>\xc9\x43\xb3\xe5\x9d\xca\x17_\x9d/\xf8\xbf\x16N\x8f\xc1\xef\x1a\x38\xc7\xb7\xa3z;\xda\x95 \xda" "j\xa8\xd0\x1c\x31\x08=}W\n\x8f\xfa\xd8OZ\xf9\xc2\\\x8b\xb0\x81\xa3\xb1L\x62\x8c\x7fo\x93\xaa\x95\xd3/\xf4\xff\x8d~\xd5*\xe2" "\xe2\xbe\xff\xb6\xdd\xe4\xfd$z\xb2\xa2\xfb\x1d\\M\x41\x33\x8c\x14Z\x00\x01\xe1\xc3q\xd2\x1a\xb1\xae\xfc\x66\xcf\xe9\x1b\xbe\xac\x85\xe6\x0cI" "\x38\xf8\xe7\xc4`S\x44\xb4\xd9\xdf\x11\x1e\xc5w\xf4l\xf7\xfe\r\x8b\xdd\xca\x8f\xfc\x39u\xb3\xe9\xc6\x8a\xd6\\\xfe\x8c\xd8G\\\xe1\xc4W" "\x45\x86@\xb7N&m\x30\rm\x64\x85\xb2\xf9[\x66\xd2\x98\x08\xaa\xe5\x83\xe2\x17k\xd6\xbd\x16\x16\x9e \x63\x9a\xc0>\t\x07\x9f\xec\x38" "o\xa4\x46\n\x97M\x17\xd5\x86\x0e\x37\xb2\xd7\xe0\x35\xe6 !.\x66\x83\x12\xd2\x30;\xa1\x9c\x38\xfd\xe2\xfc\x07\x82\xe2\xbd\x86\x06\xeb\x66\xa1" "\xa1\x04+S\x17\x85\xa6\x61n\n\"\xefX\x44\xf6\x9a\x36\xd8\xd0\xa8\x9c\x83\x16G\xce\xc8\x96{\x83\xc5\x1f\x63j\xa6\x65Zz\x66\x9f\x0b" "\x33Q]\xbf\x98+Th\x36@\x86\xf8\xb5\x8e\xd6\xb7\xae\xa5\x17 \xe2\xe4\x34\xce\x9d\x1c\x9c\x8d\xe5m\xc3\x1e\xd0\xc6z@\xd3T\xf4\xbb" "\x90\xbf\xc7\x97\xa8\xcf\x1f\xa8\x16\xc2\xef\x37\xb8\xe3U\r\x8f\x04\xf3-\xca\x17\xe7\x7f\x34\xfe\xa4y\x82\x10\x36\x9e\x9d\x87\xa2\xcd\x96\xab\xb8p" "\xa6\x97 \xe2t\xca\xa6{\x13`T\xb5\x61OW\x99\xde%\xde\x82M\xd0\xe2/Y\x1c\?\xe3^|\x07\xafK`W\xc6\xd3y\xec\xcf" "\x81\xf6\xc0G\xd3\xe3\x8f\?\xa4\x0c{G\xc9G\x1b\xda\xe3[\x98\xbbO\x8f\x19\xf2\xb9X\xc4\x15\xe1\x8a\xfa\xeaZ\xfeG\x1d\xde\x11:\x1a" "\x1b\x38g\x15\xe6\xb3~\xd3p\?\x66\xf4\xdf\x0b{y\x9d\xf0\x35\xbf\x90\xae\x61\x9f\x97j(\x9b\xba#O^ \xbe\x18R\xe1\x06\xf9j" "\x64+\x62\xa2\xb1\xac\xe8\xfc\xcc\xb6\x87\x19\x19\xd3\xe4\x7f\xaa\x95\xac\x83\xb6\x89\xaf\xad\xbe\xd8\xe8\xd2\x66\xfd\x11+\x99\xa2mj\xba`\\\xa7" "\xb5\x44\x65\xab/\xfe\xf2\x1c\xbbGUk\xea\xabh\xa6\xf6\xaa\r\x9d\xe1\xd7+\xcc\xc9L\x63K\x45\x1f\x88\x42\x9b\xcd\x30\xa6\xebl\xd0\xf0" "\"\xa8\x08\x13\x34\x88\x18`\xaa\x08\x43\x06\x11\x7f\xa5\xdc,\xfevV\x31m\x83\xe2\x14,\x17\x9d\xd8\xdb\x0eq\xb5\x17}Y\xd4\x34\x8d\xe9" "\xb7I\x35\x0e\x87T\xdc\xbf\?\xaa\xb1\x64m\x83\x9et\xd9\x9e\x83G\x1e\xc6\xdb\x83\xe5T\xc5;\x65[\xceK(\xd9\xf9\xdf\xc2\x8fY\x65" "\xab\x9e\xb1\x30z\xd9\x62\xe6X\xb9\x00\x07\xf6\xa4\xb6\x1c\xf3o\x61l#l\x9e\x81\x63\xe4\x46\xfc=\x93\xce\x0bL\x8e\x44[^\xaaG\x37" "\xd4}t\x42i\x0c\xeb\x0b\x84H\x85\xb6\x7f\x18\xf0\x16h\xd4\x10\xbb\xfd\x39\xb4\xfb\xb6\x33\r\x1b#\xda\x9b\xbe\x10\xd5#i\x33\x95'h" "}\x8d\xc1\xe6,\xce\x14L\x0b+z\x07\xd5\x33\xf9s\x86G\xefX\xa0\x36M\x86<\xf0~kZr\xc4\x95'\xd1Z\xb7\xce\xbf\xdd/" "\x02\x9fT/\x82\xda\xc8\x89\xd7\x00\xa2\x34\xd6\xdd\xb9kx\"\"Z=Q\xcd\xf3\xbby\xd4\x62\xc2\xee\r/ \xcf\xcb\xe4Nl\x63|" "\xbb\x84\xb8\xca\xffY\xc7\xca\x44\x0c\xe4U\xfct\xa6\xde\x43\x45\xb3rR-\x04\xe7Y\xed\x66\xd8\xcc\xafhUu\xdc\x86\xb7L\x34{V" "Uz\xe3\x34\xe2qWi\xb3_\xa5\xf3L\xa3v\x46\x32}hoYp\xb4\x0cO\x9e\xd3\xd3M\xae\x9d:\xa3\xbc\xb9\x81\x66\xc1\xc2\x84" "\x8bS\xa9\xb3\xe2\xef\xae\xce\xf4\xd9\"\xa0\xa4\x99\r\x81\x31}\xad\xa0\xd9\xb0\x1a\xe2\xe6\x1a\xf1\x61M\x0b\xce\xa7\x18[\x1dh\x32lL\xee" "\x96\xd2:\xc2l\x14\x9f\x64\xde\xd0\x1a\x41\xcbu\xd1\xc5\x84V\xbc\x42 \x00hW\xf9\xf4&\x45\xf3\x88\x0c\xa6\x85\xfd;\x04I\x80\xb6\xa9" "\x63\xaf\xbfij,\xb7Mo#\xfa\xb8\x81\xcbrh\xeb[\x8cq\x0f\x34\xe9\x04\xa1\xdboi\x32\x9e\x81\x35,\xb4I&\xc8<\xa6\xda" "\xef\x65\xb8\xb8\xdbk\\\xc9\x37M\x43;\x99\x81\x01\xb4\xcb\x42*\x1e\xa4.\xf8\x33\x1b\x66\xd4\x86\xb7\xe0Q\\\xa4\x10\x9c \t&<\xc2" "\xc6\x03\x36n\xa8\x88\xc2\x80y@\xa1\r\xf6\x84\xd7(X\x30\xb0T\x16\xc1\x9b\x96\xc6\x05\x61\x19\x08\x1f\xf2\xe0\xb0\xe0\xc4l\x89\x8b\xfe\xe8" "\x35Z\x80\xc5\xb2\xb0\x12\xe9\x8c\xea\xb7\xb1y\x86\x31-\xbe\x9c\x61\x8aQ\xb4\x19\xee):\xc7\x85\x63\xd6Kxu\x0eV_\x92\xeb<\x02" "r\x88V\x9f\x38\xd3\x41\xbei\x88.`\x62T\xc2}\x44\r\x9e\xa1\xdbV\x63\xdcK\x1e\xdb\x7fv\xaa\x83#\x16\xb9\xe8\xae\x01\xbe\x1e\x85" "_\xb8\x30/\x1f\x98\x01\x10n\x90]\xe8S\x1b\x31\x66W\x11\xaf\x31\x06X\x41\x19w\xa0\x8e\xbd=\xd4\xaah\xf5\x8d\x33\xb8\x1a\xfb\xab\x1d" "\xdf\xcdS\x9ft\xa2\xbd<\x38Y\x33\xa9\x88\xd1\xb4\x89\xd1\xeb\xb9\x8b\xacxL\x9c\xf1\xe7Y\xbe\xe3\xd1\x44j\xe6\xe0\x96\?l\xf6\xe4\x42" "\xbek\xf1\xa4\xec\xd4\r\x0f\x97\x33\xd7\xd2\xdf\xd9\xed\xfe\xcf\xe9:\\\x9c\x07\x8f\x1f\x96\x90\xf4;$\x1e \xd6\xdf\x84w\xb8\xc6\xe4\xbe'" "\xc5\x0e\xae\xf3\x44{(\x39\xff\x16[\xcc,\x98\x16\xad/\xd0\x96\xab\x86\x32\x8dm\xa3\xd5\x12l\x9b\xab%\x35\x15[\xd5\x31\xcf^-\x45" "\xf5i|\xf9\x8e\xe5\xee\xeaUp\xd5\xc1|\x94\x8aK'\xbc\xe8\x89\xe8\x1f\xc9w\x98\x84\xd0\x82U\xdd\xe4\xe2\x84\x17\x12\x11Q\x88\xaf\x98" "\x37W\xf1\xb7UiWI\xf7];\x11\x16\xed\xa5Z\xe5\x8bR\x85\xa7\xabj\x35\x1e\x9f\x93\x43\x63rT\x06\xdf\xb5\x9fU\xad#\x10\xb4" "\xd0\xc6\x93\x46V\xc0\xf5\xa0^\x01[\xfc\xe8\xda\nS\x1d\xd3\xbf\xd5\x06:\xf2J\xea\x36uhL\?\xaa^\x93;\x04y\x15\xb1\xd6\x07" "m\xe0*\x44U\xc1\x80\xd1\xc6\xf4\xd0\x91\x65Y#\xac[=\xd7@T\x82j\x33\xa8\xbd\x39\x31\xbe\x34\x11\x81\x33\x44\xb4\x1d>\x46xO" "\x81h\xce\x14 \xda\"\x35\x44s\xeb\x01\xd1\x66\xdcL\x44\xdf\xd0\x44\xd8\x32\x43\xdc\x9f\x9f\xc5\xc6\x44\x1b\xb6\x41\x9c^\xb8\x08\x9f\xb4.\x62" "\xbc-Zs\xea\xf4\x93%\xe6w\xafz\xcd\x8c\xea\x07\x36\x90\x35\xf2\x31\x38\x1f\xe4\x0f\x34\x13\x03\x19\xcd\xa3\xc2\xe2\xa8^h\xab\xab\x46I" "\x82\x91u\xf5\x05k\xeb\xd5W\x44@\xa8\xbe\xb2|\xbc\xc6\xe3{g:\n\x33-xQ\x9f_l\xb0\x35!\xf5\x65\x46m\x85\xfd\x94\xd5" "\xb7\xc0\xb6\x84W\xdf\xf9\xb0\xdf\xe5O\xf9\x11LV\xce\xbf\xc5%[\x05\xd5\x82\xe2\xe9\xa1&\xfd\x7f[O\xab~\xc4/R\x1e\x9b\xc9\x9b" "=\xee\x01\xa2\xa6S\xcc\x83\xb6\x34^\xa5Q\xb1\x31\xca\xb7$_\x61\xcc\r\x63\x31I\xde<\x82\xb6\xb6V\x1d`\x19QX\x1d`&\x44" "\xc4\xc6\x08\x44\xafl\x80\xed\xd5\x46>&\x15\xa3\xde&\xd5\xac\xebW\x35\xd3\xd4\xab\x1e\xba\xa7\xd5\x01V\xa0\x85\xc8N\xa5\x9c\xd1O\x06\x1b" "\xd4\xfd\x8f\xea\xf4K\xe6\xd2\xaf\x12\x8b\x98UZ\xa4\n\xefK\xa0\xb9I\x33\xea\x17\xac\x03*\xda\x0e\xf7\x14\x1f}\x85\xbdo\x88\x99\x82_" "\x9d\x88Z\xdd\x98\xb9Ku\x90T\xb3r\x15\xb0\x15W\xcd\x9e\xcfP\xff|\x0e\xa9\xca\x38\xec\x42<\xb5\x31\x0c\xeb\x8c,i\x63\xec\x9b\x31" "\x1e$\xb1\x44\x8dYS\x8cY-\x8c\x83N\x1d\x44\xf5\x90~\xc5\x8f\x87\x87\n\xa1-\x65T\xa7p`-\xb4=\x9a\xd5)\x42\xdb\x08m" "\nZ\x88\x9at\x8a\xe9\xd3\xea\x34\x32\xf7\x93\xd5)v|V\xbf\xd8(~\xa5\xeb-\"\xda|\xbc\xb0\xbeS\x0b\x18\xb4\xbb_\x41k\x0b" "\xe2\x82\xbex\xe2/lj\xaf~\xc1\xfd\x8d\x10\x17\x36\x93\x9c\xc1\x7fh\xe8\x8c,\xfe\x16}\xec\xfew\x91\x07\x88\x66\xa7Y\xc0\x9e\xcf\x88" "\xc1\xab\x88\xb6\xafJh\x13\xed\xc6}\xcb\xbfH\x9d\xb9\xabh\x95\xde\"\x94J\xe2|\x00G\x13U\x1a\xe5\x18\xe1\x07\xd6\x44\xcc\xd1\x88\x38" "{\x92\xbf\x03\xd1/\x08;v\x85\?o\xa0\xcd\xb5\t\xf9\xc5\xa8\xf0\x8e\xf5t\x11-\xb0\xb3\xb0k\xad\xc1\x82\x35\xee\x02N\xec\x84]\x1c" "\x07O\x1b\xc6\xa0\xd0\xc2l\x07\xb4\xe2\xa1\x96\x8a\xed/\xe7\xc1\xfd\xea\xc2\xea\x1d.\x18\x1b\xd1\x8c\xba\x9f\xdb\xe6g\x45[\x0c\xf9\x83kL" "\x87\x08\xf1\xcc\xb6\xac\x00\xb6\xac\x00\xb6|\xb3\xb7\x41\x33\xeb\x8cNJ\x10\x31HP\xa6I\x66\xae\x61\xf4$vm\xb6\xae\xc7'\x96y[" "\x19\xa9\x63\x06\xa8\xfa\x8b\xf5{\x61\xf5\x17\x34\x9b\xd1\xda\x91:\x7f\x98\xbeG\x1fKh\x36\"\x12Z\x9d\x63\xc4\\\x46\xed(\x38\xff\x0e~" "\xcf\xe1>P\xb4\\\x1f\xb4\x17N\x39'q\xa2\xa0\x9c#\xc7`%\xe7\x0c\x46;tlU\xdb\x80\xb5#\x32K\x0e\x9di\x15#Z\x1d" "\x17\x15\x34\xf8-\x9b\xaa\x11>\xf0\n\x1f\xa7\xe0\x1b\xcf\x32\xc4\xcd\xe0\x1d\xac\x1d\xc1]\xb4\xb2O\xbe\x82\xc7_\xe4\x02<\x19\x93\xf8\x9d\x90" "\xf7\x1c\x9e\x1d\x93\xb7\xc9\xdd\x16\xce \x44\x33#P\xe1\xfdk\\\xa5\xf9\x93h\xd6\xaf\x11\x8e\x8f\x93\xf7W\xd8\x1d\x88\x66k\xd0\xca[)" "k\xf1\x37Sm/u\xed(ju\xc1\xeb\x33\x9d&n<\x63\xe6\x43\x12nq\x01\x08hS;\x42\xef\xd6\x9f\x91_\x08\xa6\x07\x84\x45" "\x9cN\xbd_=\xbeh\xa4\x80\xdfSlq\x94\xb4q\x96,\x92-\xd0\x96\x31kG\xc9\xe2\x81\xfcM\x8e\x8b\xfe\xe8\xa1!\xb2R\xed\x18" "\x9b\xe7j\xc7\x98X\x11Z\xbd`\xd4\xad}\xb3\x35\xb4\xc7Y\xe2\xdc\x33\x44\x1b\xcb\xd4\x8a\x30\xadP^i\x90\x8aU\x05Z\xed" "\x14\xec\xf2\xa8\x1b\x9c \xe1\xcf`qN\x88>Z\x11\xc6l\xb5\x12z\xf6\xcag\xb0v\x0b\xd6\xed<\x65\xfdk\xcc\xe5\x0f\x1aH\x33\x9d" "Z\x05\xeen\x8cX\xaa\x13\xd1\xe6)\x8c\x1a\xca\xc1v\x1f\xab\xf6\x01\xd6*`\x8f'\xc0\xd3\xa9\xb0~P\xea,\x38\xfaM\x15VY\xca" "\?\xf3\x17k\x62P>M\xd6gq\xe9\xf3\x7f$\xfc\xde \x61\x63\xa5\xae\x12\x9d\x8cH\xeah\xc9+\xd6\x92OY\x97\xab\xa6.]\xcd" "\xf1\xa6h\xeb\x0c\xbc_\xd6*p\xd7(\xc4\xfbU\x89'V\x14+\xcc\xe8J\xd2z\x85\xbfO\x11\xd7\xed\xf0\xe4\xcco%\xb1\t\xe6Z" "\x15\x93\x02\x42\x14\xf2\x9a\xfc)\x39\xbd(\x34\x0b\x17\x63\xd0x\x0f\xcc\x61\x9b\x88\x38K\x43\xfe\x94-\xa9'\x83\xab\x66\x30\xfa\x07m\xd3:" "\xd0\xb0\xd8!\xac\xb5@t\t\x94:\x61\x84\x33\xb5\xd2\x05\xf1\x1a\xfd\x8f\xd5ZR\xe9\x1a\x99%-\x66\x46O\xff\xda\x99\xc0\x36\xac\xd6\xfa" "\x98\x96\xac=\x61v\xc2\xc8\xf7\xee\xe9o\xf3\x8c\xed\xeb.\x46\xabw\xd7\xac\xae\xbd\xfe\xaf\xb6o\x91\x0e\xd2\x96\xbf\x61u\xa8\xc6\x81\xe6\xf7" "\xef\xe0\x13\xa9\x37\xd8\xde=\xf9\x0f\xea\xbc\x16/\x03\xe2\xdf\x32\xcb\x9a\xfcI\xfb\r\xfc\x41\x04\xba\x85h\x1b\x07\x85\x16\x65N\xf8q\x02Z" "\xe0]\xd6XO\x1a\xba\xec@\x94\x06\xef\xfb#*\xf4`\x1a^{\n\xb3\x35m\xf6\xcc\xdcO\x34\x8d\x80\xfb\x92\xac\xe9\xdb\xdb\x12\xfc\xe7" "\x44\x94Z\xf5\xf0\xb3\xde\x00\x8d\x14\x34\x8dp{} \xaa\x8fiT\xcc\x9e\xa0\xde\xd2\x91\x90\xbay\x30\x11k\xd5\"v\xb6\x08\xe6+\xe2" "\xb6\xf5\x87\xde\xbb\x8aq\x0e\x17\x1b\x1fq\xc3\xb3\x88i\x93\xf2\xf4\x9f&\xe5\x19\x96=\x42\xbc\xe6/\xa1\x85\x61\xaf\xd1\xa7IM\x0e\xfd\x06" "\xd1\xb4\xbd\xb2\x10q\x93\xaf\xd1\x93\xb0\xcb\\\x98=\x02\x1f\xac\xbc\xbf\xb2\x42{\x45\xa8\xd3\xda+k\xa0\x37\xfdK\x8b\"\xb4\t\xbbO\xaa" "\xc9\x8d\xb0\x1d}\x93\x8b\n\x87\xefp\xeaV{\xc7\x42\x9d\x91\x8d\x83\x8a\x1c:\xbd\xef\x93V\xe0\xaa\x0bZ\xc0\x15!r\xe4=\xdd\x66 " "\"\xee\xf5=\x38\xbd\x02\x99\xce\x32\xf7\x1e\x94\xab\xe0\x83\x1a%\xa9\x7f\xb6\xab\x32T$\x9b\x19\x94p\x44}\x39\x93\xff\x1c\x02\xbe\xc3O\xb5" "\x30\xbb\x03-\xf2\x98~\x9e\x05->\x99\xd0\x62Q\xd4\xdeY;\xbdG\xb6\xf0!\x34\xd3@!\xef\x0f\xb1\xa3j\xefp^+\x34\x0b*" "\xe1h\x01\xee\xf0}\x36\xdd\xca\x43\xcdv\x66\x19\xf9\x04\xdf\x61\xc0_\x1b\"R\xb1\x91ON\x45i\x9d\xe2\xb3\x85k\xa9\x88\xe6w\xf8\xb7" "\xb1\xf2\x37\xc4|\xa3\x10\xb5\xfa\x90\xf3\x37\x43\xe9O\x83\x18\xa3(\x83\xc6\x86\x33.\xc3\x03\xa6\xa2Y\xdb\x08\xef; \xca\x96\x32\xe9]\x32" "\xa7\x87\x07\x0csK\x38n\x11\xcd\xe6.k\x43N\x80(\xb1\x98V\x1bJ\xdf\x0e\x44\x9b;\x64\x9b;\x8c^\xe8xR\xc4\x37\\\x32\xab" ">\xa5>l\x9e\xd3o\x1c[z\x84\x15\xa6\x63\x06\x64\x88\r\xa6\xb5!\x36\x96\nm\xe9H\x88Vu\x98\x86\xc5\xad\x8d\x82\x66\xdb\x89\xcd" "\x02\xb5\x11\xdb\xe0O\xbe\x94J\xf5\xa8\x61>,L\x63\xdf\xe0\x93u\xa6\x12\xdbH nk\x1c\xde\xab\xf6\?\xe2] \xcd\xc2\x06@\x1c" ">#|\r\x34\x94Y\x15\xd3@\x01\xa9\x66Ny\xa1}\x1f\x1f|)\r\x14\x00mP\xe7HN\x35\xc9\x18\x84\"\x80\x36>\xf3#\x61" "\xde\\\xfb\x8c\xaf\x0b\xc1\xd8\x92VpH`L\xbd[\x43\xb3\xd5'\x13\x61\x8cj\"\xa7\x34(\xfe\xf7\x1b\xd8\xbaX\x93l\xc3\x31\xcc\xec" "\x95\x7f=\x1c\x17\xfd\xd7\x38\x93\xb3\x61\x19\xde\x04'\x03\xf0\xecw\?\xd6\xdbp\xf8\xa7\xfc[\x15\x10\x03\xa7\x46[\x33\xe5\xc6\xa9^\xa3\xea" "LM\x39%\xe7 \n\xf1\x86\xb3x\x1b\x96>\xa5\x1f\xca\x82\xba\x61\xb9\xe2\x1cnm\x8b\r\x02\xc2N\t\xb4\xc1|\xfd\x18.]\xea\xc7" "\xd8\x1b$\xb4*\xbf~\x1c\xd5\xb5\xa0\xd7/`\xe8P\xbf\x90\?#\xce_\xbf\xc4\\\xb1pu\x97l\x7f\x03\xdb\x15[\xbf\x0c\x8a\x13\xb0" "\xbc\x06\x1f\xa8\x9b\x63G#\xaa\x1d\x15\xdf\x8c\xe1\xcd\xbb.\xb1\x64+\x07Z\x98i\x9b\x16\x9d=\xab\xd6\xe8\x43\xb3\x9d\x31\xc2\xda\x03\xb8\xba" "\x97\x9f\xc6\x02i\xfd\x32\xbe\xb8\x02\xcd\x88\x46h\x41_\x84/\xb8\x34\xf4\xb6\xea\x97\xf0\x32,\xb4\x37\xc1\x88 \x8b\"\xde_\xfb\xb7\x92'" "\\\x38\xe6x\x8dQw\xf1\xb7\xeb\xbb\xc6\xafg\x31\xb1,\xb4\xde\xae\xd0\x9a\?\x61=\x0b>L\xe4\x10t(\x44{\xd1\xd2T\xbf\xb2\x86" "\x89\xbd*\xd1l\x8fg\xbd\xfc\xb7\xc8\xc6\x36&Uq\x88\x80\xb3*\xce\xc2N\x1eq\x8f\x44\xb3\x96\\ho\xb8\x11n\xc0\x45\xb4\xbd\x13" "\xc6\xf4\xbb\x9bql\x0f\xbc^\x0eN\x9b\x9e\x1a\x9c\xbe\x80\x19\x19m\xd9\xec\x8a\xbd\xbc\x92`m\xb3\xf0\xea\x11\xbd\x0f\x17\x31\x36\?\xd0`" "\xfb\x95&\x98o\x34\xd1jG\x81M.\xaa\x98\x8d\xae/\x31q.\xda\xe3{\xfa\xe3&\x86}\r\xc0\xa1~\xceZ\xa3`\xbc\xc4'\xa3" "\x63\xbf\x15\xb8\xb0\x34\x06\xe7\x1f\x87W\x38J\xefM=\x39\xa6\xe2Oz\x85\xa3\x1f\x98\xc9\x8bh\xab\xf1\xc2\tow:M\xe7;\xa0\xc9" "y{\xda\x1c \x41zi<_x\xfc\x96\x9cn\xb1\xe8 \xda\xe5o\xfa\x41\xbe\xabM\xf6\x18\xa7\x08\x1b\x83\xf4\x83\xe6\x65*\xb6Kr" "\xe7\x14\xd3\xa7\x08\xe3~\xe5\x07\xd8/\x1d\xdcz\xf8\x80G\x87`\xf4\x42\xadP\xf9\xc5\xd1\xa5\xe7i\x38\xb9\x42\xad\x62\"\x36\x1f\x8ahs" "\"\x42\x1b\xc5\xd5\xcb\x98w\x11\x96\xce\xfc\x1c\xd8\x02 \xac\xf6\xc0~zG\xd1\xdb\x45*\xbe\x1f;u\x83\x96M.\xd5\xe9}\xda\x88)" "\x08\x17\x65\x30\x1e\xcc\xfb\x61g\x84\xb4u\x11^:\xea\x65\xe9-&\x36\x64\x13\xf1\xe4\xd4\xcf\x8eI_\xe1U\x33\xae~\x42|\xc0\x03\xc2" "l\xbfQ^\x81\xa8\xb3\x83\x1f\xf1z\x39\xb9[\xf9\xd7u\xae|/\xc2\xac\xdc\x45\xc9\xcb\xd0\x1a\xb1z=x\xda\x46}\xcb\x97\x7f\xc1\xd5" "\xabS\xdb_\xb3\x02Um\x03\xd6\xff\x39\xe5\x80\xf4\xd8\x96U\x43\xff\x42\x0bYT\xff\x17\xffv\x44\xc4\x64M\xfd>\xa8X\x81x\xe4\xbb" "\xf7\x88\xf6\xa9\xfe\x08WW\xc2K\xa4#\x92\xb6\xd0&\x06\x84#|\xce'\xf3\x88\xf1\xb6\x91\xd5\xe9#\xfcI\x98-+\xecZU{\x41" "/Hh\xc6\x1e\x42\x1b\x37y;\x61L\x0f\x91\xbf\xe6\x17<\xad@s\x17-\"\xda\x14\"\x0e@\x85\xfc\xe2\x84\x37&#\xe2\xa5\xd4\xdf" "\x61\xceT\xe7\xf2\x7f\x9d\xeb\xfb\xf5\x01\x9c\xe0\nm\xa8W\x37\xdfN\x37Ul\xe6\xaf\x8f\xfe\x16%p\xf9\x8c(\x66\"\xda\x44w}\x84" "p\x87\x42\x64\xcf((\x36\xc1r\xc9\x99\x9a=\x88\x66\x9e\xae\x8cjP\?\xbc\xff\xef\xb1\xd6\x8d\xaa\x8f\xb0^\"\xb4\xa1\x82\xd0\xd6\xf1\x84" "x\x81\x46h\xd1\x85\xe6\x61\xd2\x88\xe9\x03\x88\xbc\x42\x15\xcd\xbe\x8b\xe2\x0blX\x44\xb3m\xad\xc2\r.\x19;)\xeb\xa3x\x84\xd3\"\xc8" "\x9a\x11\xce\x1f!\xe2\xb4\x63\x8c+\x8c\xbcN\x9as\t\xd1\xdcj\x0c\x43\x30\xf3&\xfdx\xb8\x66s\r\xc6\xdd\xae\x61mN\x34\x0f\x15\xa6" "\xe2.\xca\x0f\xe0O\x46\xb4\xca\xf6\xf0\x14\xa6\xc1\x39\x99i\xe9\x97\xea\x63\xa7z\xc8,\?\xbb\xa6;\xa7\xc7<\xe6\xb9\xe3\xd4\x0fN\x9a\xd0" ",\xda\x98\xd0\xecV\x8c\xa9\xc9\xe6\x81\xc6\xa2\xac\t\xd2K\x84\x87-\xd3\xd2+\x10q\xf7\x16\x8f\x8f\x61\xbd\\\x1f\x87\xc7\x65'\x63\x11\xa9" "\xc1\xf6\x14igW\xc1o\xcb\xbf\n\xff\x63\xc6\x83\x9f\x16\xed \x1f\x44K\x0f\xcf\x16\x35K\x16\xc8G\x0c\x90\xea\x63\xe9\xbb\xfb\x01,\x1e" "\xca\x83\xf3\xa5\x9a\xdf\x8a$\x1c\xdc\x8ah\x07\xdf\xff\xef\xad\x44y\x64x\xda\xa3\x15qWr\x1e\xfc\x86g\xaa\x8c\xba\xfc\xc0\xd8\x82\xf4\xe8" "\x83X\x83\xb3G\x63R\x9d\xeeK\xc3\x94\x1d.\xe1\x9a]\x9a):\x9e\x42\xd4\x43S\xbe`\xd3 w\x0b^\x15\"\xb4}\"\x16\x61\xf5" "&\xa2\xad\x8f*\xf9Q\xb5\x00\x36\xaf@\xd4Z\x34\x11\x11\x8e\x97R\xc6\xe1\tN\x34\xdb\xedZ\xa7\xe1\x88\xf0\xd7\xfa\x89S\xff\x1c\x1b\xb1" "\x84\xbd\x01\xb9\xfa_\xff[\xa9]\xd6\xff\xe7\xff\x45\xcf\xd5T\x66\xf2\x14\x31t\x84\xc8\xca)<*\x1a\xd9\xdaM%w\xe5\x9e\xfd'\x10" "\xd2Y\xd8\xd9\x62\x34%\xa2\x99\xa8\x0b\xad\x43,\xbcG\x0e\xf0\xf5\x9f\x46\xc3\x65ry\x05g\x9e\xee\x66Wh\x63\x30\xb5!<\x01\xc7\x45" "\xb2\xe5\xf4\xdf\x62\x95=\xc5\xf0\xac>\x45\x84[\x61\x35\x03~\xb4=\x7f!\xf2\xd2\xbf\x83vW\xb7\xd4^\r\xd5\x66\xabv\x93\xa6\xa9%" "\xd7P\?\x41\xda\x42\xfe\xa4\x9c\xf2\n\x36\x41\xd3\x1e\xf6\xeeokW\xbc\xc3\x1eg\xa1\xc5\xa3\xa8\xef`Z\x62\x0c\xae\xc6\x30\x80L\x35<" "\x19\xc6\xb6\x30\x86\xed[\x8c\x63\x44\xfb\xf9t\x62\x0f\x98\x89\xf1\xb9\x95\x9c\x9d\x33\xe9\xdf\xc7\x97\xef\x98\x17s\r\x8e\x45\x44\xb3\x11i\xfd\x17" "\xdb\x64\x84\xb6\x8a`\x84\xd8\x38\x0ej_\xa0\x35<\x46\xb4S\x8dS\xf4_\x1b\xa7\xd8\x04\xd2\x38\x85mW\xe3\x14O\xaeq\n\xd3v#" "\xd6g\x1a\xa7I_\x8b{\xe3L\xfe\x8c\xe6\x1a\xe1\xd6\x44Xw\t\xff\xcd\xc0].Y>'\xf6\xae\x35\xce`\xf4\xd0\xb8\xf8[\xb4\x9d" "i\x07P\xb5kgj\x94\x07ms|\xf0\x19\x06\x07\x14\xd3oj\xf8u+[\xd0\xcc\xd0\x1d\xe2\xaa\x0e\xebs\xd3P\xfd\x43t[>" "h\xafw\x98}\x33-\xca\x66\xf0\xbe@\xb3\xed\x9d\x10=v\x1e\x34\xdf\xea\x01m}\x05\xb3`h\xdb\x8a\x8b\xf1q\x01o)\x34\r\x37" "\x9d^\xb7:)\x37\xb7\x04\xd0\xbe\xcf\x0e~\x17##\x17\x31\xc1\x03\xad\x46\xa7\x9c\xa2\xd9V\x05\xe5\x90\\\x39QZL<\xfc\x82\rJ" "\x1a\x17\x98-k\xa8'\x0e\xb4\xd1\x8d\x8b\xe0\x1c\x97\x8c\x1d\x11\xca;'\x1e\x88\xe7\xb7$\xc8\x31\xf2\xd3h\xac\x91P\x9cHQ\x82\xe9\xa7" "%\x84Sy{\x86\xf1\xd1il\xfb\x38-\xcd\xef\x08q\x0c\x84\x36\x9b$,wY\x0e/\x10\x39\xd5(\xc3\xf3\xe4\xb2\xe8\x8f\xcc\x12\x1e" "\xc3\xe2\xfd\xa1\xd6\xae\xf9}h\x82Gr\x36\xcd\xcb\x89\x8a\xdb\xfbxz\xe7\xda\xc1\t\xd1[\x81\x98\xefI#\x82\xe8\xb3Hx\x38\x82\xe7" "\x0bh\xdf\xc7\xd8.g\x9a\x06y]\xcfS\xcdv(\x41\xac\xdf\"\xb8+\x34\x33\xd1\x80\xb8/\x1cj\x04q\xf2\x84=\xa2\xd0\x66\xaf\xd8" "\x12\x01mW\x43\xbb\x61ZR\?\x92\xbe\x0c\xb4\x06\xf3\xb6\xcb,\xe8\xf1\xa8[\x9e\xf7\xf6\x96\xfc\x07\x9a\x33k\xe1\x33\xca\x1e\xa6\x98\x8c\x88" "\x42$\xe2\x88\xb7\x64M\x8b\x90\xef\r\xa2R\x08\xe7\x37\xce\xf4\xd9\xaf\xf8\xe8v \"\xd1\x08\x33m\x12\xf9\x82m\xec\xc2<\xae\n{\x19" "\x84-\x1eo\xe3/%\xce\x0b/\xe4\xc2\x7f\x97N\x34\x8c&\xa2-R\x31\x03>\x1c\x39\xfd\x9a\xc3g\xfe\xf0\xa4\x42\xce@\xdb\xc8+\xfc" "\x44v\xa4\xa7\x9au\xc9-h\xd1\xdd\x1a\x17^[\xf8[\x1f=\xee\xc0'\\(\xe6K\x8c\x92\x8d\x08<\x0c\xad\x9b>\x1a\x38{\x16N" "\x8f\xe1\x13M\xc4\x15\xdd\r\xa8\x88\x07\x01\xcf#\r\xf3\xa4\xbai\x07\x99\xce\xdf\x1a\x97\x16\x1f\xd7\x41\x8b\x1e'\xe4\xbb\x8bH\xb8\xc2\xd1\x1d" "yO\xbe\x92#\xa7\xbf\x16\"\x62K\x8d\x89hh\x45\x9c\x9c\x92\xc8\xcex\xf6\x46.H\xdc\x33l\x32\x1b\x17\xc9)N\x91\x9c\xe3\x42\xbc" "\xb8&\x35\xe4\tv\xbc\x08o\xce\x9d\xc1U\xdbs:y\xe8\x04\xbb\x32Z\xec\x46\x0e\x13\x33\xca\x05h\xf3q\xca[\xb0\xce\xe3l}\xb4" "\xc1\x38S\r.\x46\x34z\x98\x04n\xf4\xe2\xab\xad\x05\x17\xb0\xa7\xdc\x63\xd3\xd2\x93$%\x8d\xdf\x1b\x8f\xe1\xcc*\xd7G\x98\x1b\x19\x83\xd2" "\x89\x8b\x61\x7f\xec\"\xccH(j\x97\xb7\xf1\x14\\\xb5@k\xaa\x1bO\x98\xd4\xf5\x85\r#o\x9c\"\x36\xbb\x37\x9e\xf9\xbc\x64\x9cgU" "\x81\xc6\xcb\x8bN\x9f\xb1@\xdax\xc7\x66W\x65\x15\xc4\xe9\xb8.(l\x31\xddL\x8a\x85\xb8\xf1w,\xe5\x37>\xb0\x01@h\x06\xf5\x8d" "\x41\x90\xb1\x96{\x04{\xef\xc6HM\x37\xca\x37\xe1\xf8\xce\xb5\xe4\xb1\x9cj\x36}\x66L\xa7YM\x83\x9d\x1a\x44\x9b\x8dmL\x30\xc3(" "\x34\xa3\xa5\xc6\x04\x06\x0e\x8d\x89\xae;\xa4\xa9\x9f\x41\xd5^\x87Y`\xde\xbf\x1b\x33l\xbai|\xcb\x9fr\x8e\x85\xf5\xc6\"\xb0\xc9Y\xa1" "\xad#\x0bm\xfb\x9d\x91\x37\x98\x32\xb6\xe1{\x63\x81\xc9\xf3\x06\xf7L\x37\xf6[\xa3\x45\xb4\x65\x87\xc6&\xd5\x1f\xdft\x9d\xa0\x07-\x1aT" "\xa2\xeb\x8b\xa4o\x95\xd7&y\x92'\x39\xc7\x8ch\xda\xef\xd9\xa1+\xd4<\xfa[\x1f\x39\x83\xce\x0f\xcc\x15\xa0y\xcf\xc4\x34\x98\x81\x98\x86" "~\xba\xd0\x9e\x9f\x11\x97!\xa2\x94\x04\xfb\x0f\xady\x19\xb6\xa5\xc1\xad\xa4\xd6\xcd\x87i\x36\?\xf6\xdf\x04L\xe2!\xcd\x16\"\x45\xb4\x42 " "\xec\xdd\x46o\x17\x10\x9f\x66\x30\xb7\x10\xd1O\xb2\x38\xf5\xab\xd3\xd9\?\xf9\x9fmG\xc7\x1f\xfe\xb1\xa4\xa9\xf1\xcd\xc9s\xaa\xfd\xe7\x12\x34\x61" "JG\x18\xae\xa5\xee/$\xa1\x39\xf6\xdf\x83(\x39\x03\x8b\xbf\xe6Q\xf4\x92\x8fK%\x88\x1a\x8fm\x0cs\xeb\xe6Q\xb2z\xc6\x86\x95\xe6" "\xb1\xfc)O\x10\xd5\xb9y\x82\x99|\x61\xf3\x04\x34\x7f\x44\xcd\x93t&\xbfy\x12\x15\xde\x41\x1b\xf6\x37O`\xac\xde<\xc1[.\x34\xa7" "\x81\xcdS\xf8\xcd\x31\xa6~sLS\x87\xe6\x07\xda\xe5{\xaa\xd9&\x85\xe6\xd9\xdf\xc2\x62Q\x9b\x63.\xd5v\xa0u\x42\x84\xd6\xabR\x96" "\xc8\x15h.\xda\x85V\xa8\x8d\xea\xe1\xddv\xf1\x36\xcf\xe0\x39Z\x98\x31\x87\xea-\xa6Z\?\xc4\x88\xddg\"\xdaj\xbe\xd1\xcf\x8c\xf9\x14" "\x63pt\x1b\x0ev\xa9\xe6\x1e\xdc\xa1y\xda\xef:\xd5\x31\xf8\xee\x15" "\x1a\x33G\xa8Q\x41'%T\x83\x9ap\x0b\x66x:\xdb\x08.\xcc\xe1R\x61\x0c%\xec\x65\x0fS\xad{,\x64\x0e\xe9\xd6\xc4\xdf\x92\xe7" "\xa2\xe7\x14\xdap\xe5\\\xa3}[GH\xb4!\x9e\x04*\xb8\xfd\r\xc3\xdb\x8a\xd0\x16\x45\x8cQ\xbd\r\x17\x15\xcd\x33L\x1bX\x46:\x0f" "\x32\x14Z\xbc{\x83\x66\xed\xa4\xf0RW\xa9\xe3I\xde\xb5\xe8\xaa\x18V\x90\xf5\xb1M\x65\n\xcd\xec:\xc2+\x7f\x86&\xa3y\x86\r\x85" "\xc6\x83\x92\xe5y\xa6>\xf9\xcd\x02\xbb\xc9\xd5\xb7&\xedQ\x95\x33p\x82\x9b\xc2\xdeM\x63r\xbd\x43\xc8\x18\xd5v\xba%\xff\x93\x97\xe9\x97" "\xbd{\x43\x0f\xd0\x44\xbfQ\xeck\x10\x9e \xbb\xbc\x88\xc9@\x44\x83\xc8opI\xc9\xfd\x89\x66\x92\xb9\xe4\x16\xcd&J\xdd[\xa6\x11\xd3" "|\x10QM\x9a\x88\xbcV\x11\x63g\x88\x37\xef\xa9\x38\x99\xfd\xe1\xedW\rKM\x10m\x86\x14\xa2\xf5\x83L\x44\x9b\r\xf1\xa1\xb3\x17\x1f" "!Z\xd3(lw\x9d\xc1\xaa\xe3\":\xfd\xcd\x8c\xfc)\xb3\x81\x39\xbe\x36\xc2\xd4^\xc5-h\xabt\x46,\x38\x89h\xd3\x33\x46l\xab" "\x30\x11V\xa3M\xba\xaeo\x66\xe1\x93NX{\xf6/\xfa\xd1\xfe\x1bQ\xeb\x05\xb4\xa0\xca\x42\xebh\x1a\xfd,\xbc\xe1l\xb4\xb6G\x93\xc5" "\xda\x9a\xd0\x16t\x9bY\x8c\xaf\x84\xfcu\xff)>\x96,Z\xd4\x66\x0e}\xaa&\x9d\xf7\tm\x30#\xb4\xa9\xe5\x66\x0e\x11k\x8c\xa9\xc7" "\x33\xd3X\x36r\x18\xa1\x08\xcd\xa5\x97\xd0ZU#\x1fr.\xf5^\"\x62\xab\xe6\x44_J\xc4k\xfc\x62z\xb4uR\x85\xa3S\x10\xc5" "+\x07\xbf\xa8\xcd\x1c\xa6#\x84o\xf8\x1e<\x04\x36s,\xa4\x39\xcc\xd7\x37\xf3\x98\xa8\x31\xa6n\x66L\xd3\x1a\x19oQ\x1e[\x9e\x9a\x15" "u\xcfv\x35\x85\rH\x93\xf6j\xcd:\xfa\xa7\x42\xeb\x87\n\x9b\xd6\xb0\xb6\x11\x42\xc4\x88I'\x17\xb1\x96x\xa0\xb1nh\x07\xe5\x63\xf8" "i\x11\xd1L\x03\x84\xed\x36\x16\x17\x45\xc4\x9d\xb7\x43s\x88+,\x90<\x9d\xd6l\xc8\xbf\x36K\x7f\x9b\x99\xa0\xf4\xa3\xa2\xcf\x16\xc5\x8e\xbc" "\x9f\xea\xd3\xcd\xf6\x1f\x36{\xea\x84R\x46\xec(\x9c=\xbd\x36\xa9\x85\xcc\xa2\xc4\x35l\xd1\x11\xcd\x96\xd5\x94S\x10\x8d\x1f\x9d\xbb\t\xd7\x1a" "\x82>\xe9\x14\xa1\xfdZQ\xeb\x05\xe7\xd9\xf0\xb1\x88\x1e\xa4j\xf8\x9d\xe0\xa2\x9at\x98t\xf1\x89\xd8\x99\"^\xaa\x65\x39\xbc\xf7\x89\x96\xe9" "\xe8\xf6r\xeb'\x8a\x66\xfd\x41\xa1\xb9\x8bU\xde\x82\xe5[\x38\x01\x12\xb1\xd9\x0b\x07\xf7\xf2\x07\xad\x9d\x05{\x13I\x82\xc1\x88h(\?\xbd" "\xe0\xb5\r\xa2\x9c\t\xf5\x0f\xe2\x88\xd7hk|\xca_p\x82\\\t\x16\r\x92\xd7\xb9\xe4\x15-\x17 ^\x9a\x1e\xab.\xa5\xf4\x0f\xb0\x97" "\x42\x34[\x8b\x13\xfe\xbe\x04W'\x41\x31g\x1a\x02'\x19\xd3]S\xa6i,\xfa\x05\xce\xcbv\xb3\x07G\x00\x42\x34\x88=\x36y=\x44" "\xb9\x35\x06\xa5\x42\x88Z\xa2'\x85\x0c\xe6\xde\"\xde\x1c\xa7\x91\x16U\xc3\xedz~i&\xb9\x1fu\xd1\x86\x05\xc9q\x8c\xff\x45\x43\xd1Q" "\x86\xb3\xbc\xfc\xb9\x16u\x33\x98o\x12\xed\xe0\x83u^\xfeL\x84\x37_\x61\x06\x85\x46\x37\n\xa8}\xf7\x39\xb4\x0e\xb2PN#\x7f\x10\x65" "\x0c$\xdd\xf2\x1e\xbf\xd6\xe3inq\x8f\xd1\xd3\rh\x36:\xc6\xe4\xbe\xc7J\xa0\x17\r\xbf\xc1/\x9ev\xf7\x98<\xe0\x0b\x18*\x0b\xf9" "\x18\xe2\xd2\xdc\xf9\xb7\x98\xc0\x37\xb9h]\xfc\\<\x1a\x83h${\xf1\xfc\x14\xdc\"\xeb\xe3\xdf\x63\xcd\xe5\xe9\x39\x35\xab\x35{\x18;\n" "\xab\xb8W\x84\xfb\x30\xaaG\x90\x17\x14\x1fl\xff\x13v\x8fH\xe4\x1f\xeb\xe0\x9e\xdc\x0f\xf8\x84,H\x9e;\xe1Q\x0f\xae\x0f\x9a\xea_\xe7" " \xffR\x8d]\xf4\xff$p\x94\xd0K\x96V\xc6\xfa\xb0\x17R\xe6\x41\x94\xd3>\x1c\xe5\x08Q\xa9\xf7\x03)\x83\x66\xe3\xa1.\xb3\xb2\xe4" "\x10n\xb4\xa0\xa1\xa5\xee\xc3\x37X\x93{\xaf\x85\x8f\xb7\xa0\xad\x04\nm\xe2Y\xe8g\xdb\xbe\xf9\xa1p\x18&\xc4m\xf5\xe1\x30Lh\xcb" "\x86\x42\x1b\xae\x37\xfb\xb0\x85\x13\xa2\x46\xeb\x63\xc7\x91\xf0\xe9W\xb7Z\xa2\xb9\xea\xb3\x9e\xed\xb3\x92\xa7;\x34\xe1\x45\xd6\xe9\x37\x9b\\\xf2\xd0" "\x96UO\xb7\x30\x03i\xde\xc2\xee\xb5\xf9\x82\x98\x04\xcd\x17\xec$\x14\x9a!\xadQ\x86\x02\xc9\xfb\x35\xec\xcb%\xe1\xfa\x81\x9c\x83\xa8`^" "\x02\xf5|\xb7\x42\x90\x8f\xe6K\x98\xb5\xfb}\x41P^\xa3v\nQ\x95\xbf\xc0V\xcc\xc8\x8cyI\xda\xf8=\xf9%%\x17\x86}\xfd\xb7" "\x39\xd7\xad\xb5\xa8\xab\xe7\x87\x41\x1c\x9bs\xb6\xb4J\x18\xb1\x9b\xc8zw\x0e\xdb}\xe5\x03h\xeb\x12\xc2\xe6<\xb1\xb5\x43\x11\xdb\x33'\xd6" "@\x44\xb4\xa9\x15#<\xb4\x8bx\xff\n\x9a\xe9\xa3\x90\x17\xc3zt\x1eL\xce\x9c\x30\xbb\x87\x38\xba\xc7\xfc\x9di\x87\xe2\\\xae\xb2\x1f\x98" "\x8dVs\xceR\x31g\x63>\x0f\xabU\x10\xdd\xbdyx\x87\x1f\x65u\xa4\xd4\xbd\x07\xb9W\?\xa3%<\xa4\xe2\xe6\xea@\x94\x9a\xe0\xe0" "\xb0\xb0\xa4\x01\xd8\x83\xd1M\xf2^\x80\xb1\x19\x92\xf7G\x44\xeb\xcb\xbd\x36s\xfa}\xab\x38\xf4\xab\x98\x85\xd3\x7f.\x1e~\xcdS\?\x97\x7f" "\xab\x06\x44s\xaa\xa4\x44\xde`\xda\xc9\xe8\xd9%\"\xab\x99y\xf8}\t\xfe\x9c\x90\x05p\x9ew\x86\xdf\xbc\xb4%\x1eY\xb8:wz\x89" "\x08\x37\x17N\xdc\xb5i\xd1q\x81\xfcp\x06\x19N\xd0\x41\xe3\xf5\xa8\xd8\x7f\x86\xed\xb0j\x63\xf0\x94\x07\x9e\xe5@\xbc\xa0s\xf6<\xe7\xf0" ")\x65L\x9d\xe8IYk\xe0(/\xb4\x42\xff\x99\xc4\xf6\xa2\xee\x8b\x63\xb2Y\xf3\x35Y\x06\r\xcb\xb4\x65<^\xc1'\x64s\x8d\x95\x91" "\xe6\x9a\x63\xca\r<\\\x34\xb7\xb0\x1e\x16\xa2\x38n\x61\?\xdc:\xc3\xfe\xfd\xd6\xb9z\r\xb3\t\x9e\x16\xb3Gh]\xd3\xd6yX\xbaw" "\xa2\?\xd5:\xc7M\t\xdd[l\xeb\x1c\x1e\x15[\xe7I\xed'\xba\xfd\x85h\xd5|+\x1bts\xa0\xfdv\xab \x7f\xca\n\xfc\x1b\xb4" "*\x98\x9chq\x12\xa8U\x45\x95\xe3]]#\x9a\xbdV\rm\xaa\x11\xef\xa2\x88\xd6<\xb4\xeap=\xd7\xaa\xa3\xc7\xa0|\x07\xad\x06m" "\xd5#\x8b\x02 \xb4\x89:!\xee\x41h\xa7\xac\xa3\x01\x14\xdaV#\xe1X\x1f\x64\xab)\x7f\xa0\xcd\x8d\tq\x95\xec\x30\x19\xd5k\x80\x35" "\xd8-\xe9U\x1c\x39%\x15O\x41\xb4\xc1'\x88,\x66\xa3/l\x9d\xfc-\xf3\xfe]\xd1\x0e\xce\x14\xf5\xfe\x81\xfd;\x18\x46\x89x\?U" "\xf7\xbd\x16\x8d\x36\xd5>\xabi\x18\xd9V\x0f=s\x63\xd8\xbf\x88\xaf\n\xd0\x66\x96\x35l\x87\x8d\xea\x00\xab\xb2\xa5\xb6P\xc3\xd2\xe5\xa7\x1f" ".\t\x07\?\x43\xed\?\?\x83i\xa4\x16\x9d\x19\xb4n\xc3\x93\xbaS\xfb\x65W\x39h}u\x1c\xc9\x63\xef\x30\xc2\x11\xb6\xee\x9c\x07I\x98" "\xd3\x85\x88\x0c\x36\xd1\xf6\xa7\x98\xa8VQ\x66\xc1wp\x00\xca\xc7\x03\xd6\x36\x85\x66\xd5\xdbz\xc0|\x8b\xb0\x46\xdd&\xe6\x84<\x1e.\x89" "\x0f\x8e\xdb\xd9\xe7\x8f\xf0\xb2g\xfc[\?\xc1>\xb9\xf5\x08W\x86\x42\x0bO\xd4z\x44\x0f\xab\xf5\xc4\x8b\xe7\xceU)\x8f\x36\xfd\xde\xa2W" "\xd6\x16\xbd\xb1\xb6\xe8\x8d\xb5\x35\x86\x61l\xeb\x0bu\xb4Q\x63\xe9Z\x10Gh\x95\x06\x1c\xfd\x9b\x16\x9f\x97\x63\x8b\x13h\x9a\x1c&\t\xa6" "\x1d\xf0\xe0\xfb\xe4\xb7\xfc\x61SMk\x8e\xc8\xb8\xc2\xd6\xdc\x19\xec\xce\xe1[\xba\xb5\x45s\xa0\x1c\x82\xf2\x87|\xdd\xc1\x42\xb6}\x04#-" "\xa1\xcd\xa7\x0b-`\x8f\x31\xf5\xd7\x03\xcd\xbe\xd8>\xd2\x89\xed\xf6-\\\xf1\xb4\x8f\xd5$T\xa7\x62\xbf\xa0\xc9\x9f\xb7\xda\xed\x0c:\x07\xed" "\x0c\xa2\x14\x19u\xa3\x82mq\x36\x8d\xa7\xcc\xc2\xca\x44\xb8>\x06mY\xa6\x9d\xc5x\xc9\x98\xce\x33\x8b\x66\x63!\x61\x1e\xdf\x82S\x38\xe1" "\xc3\x07\xb6\xea\x8ah\x86v\xc2\x11O\x34\xda\x81\xd6Q\x34\xc2\xad\x97\x88_\xefp\xa3\xe2\"\x16\n\x45[\xce\x10\xc9\xd3\xc5\xf4\xaa\xac\x33" "\xd5\x36\x8fN\xbe\x8d\xa7\x9d\ro\xaf\x92\xeb\x0b\xec\x33hg\xe1\xc8Xh\xde\xc0\x84\xcf\xb8\x80\xf8\x04w\x14\x17\?\xc0\xd7\xa3tZ\xcb" "\xb4\xf0\xf2\x37\xd5lG\x83p\xa2\xf3\x8e\x18\xf1\xb5\xb3\xc9\x39\xae;\xe9|;=\x63\x44\x44\xec,\x11\xa7\xf8\xfd\xc4\xec\xab\xda\x05x>" "o\x97\xd0\x12\x08m\xf2]\x88\xa7N\x9b;#^(\x88\x93+\x98\xfe\x8a\x88GU\xc2\xeb%\xb4\x9dh\x46\xd4\x0f\xedR\x98\xc5\x39t" "n\xddV\xab\x44\\<\xf8\xa7\xa8\xef\x85\x36\x1c\x93\x01~\xfd\n\xb4\x81~\x9b\x03}\xe1\xb8*\xbdS\xf8nk\xb7\xc3\x9b\xb1\xc6\x1b\xb1" "\xddhm\x0e\xfa\xdb\xd7X\x35\x91\x42h\x86\x85\x46\xb5\x95\xb4iq\xd1\xac\x15\x37\xf2^ \xf6\xd3\xc3\xe5\xaf[\x97\?\xd7\xd0\xe3H\x0b" "\xf5m\xfa\x11\xae\xe9V\r\xd5\xad\x7f\xd8~\x94\?\x63\xb2x\x08\xa7'\xc1\x95V&\xed\x17l\xd6lO\x31\x19\xd0\x9e\"\xc6q{\x8a" "\xa0\xc9\xed)\x9a\xa3\xf6',L\x84\xb6\xd5\xde\x88\xd6\xb6\xfd\x89\x18H\x42\xaby\x8c\xe9G\"\x9a]|\xfb\x33\x1em\xc1\t\x8e:\x0c" "\x9e\r\xcd\x83g\x8b\x66\x16/\xed\x19\x46>\xca'r\x08\xda\"\x84\xf7w\x85\xf5K\xd0:\xb5m\xc6\x85\x13\x8e\x97\xbc\xfbY\x30\xe1W" "\xe6\x33gz\x94y\x34\x37\x06\xbf\xa7Q\x17\x07\x84\xc5[\xb0o\xe5\x7f\x16\x95\x91\x1e\xd5{N\xb5\xaf\x33_\x1b\xa2\x99\x93w\xa3\x9f\xd6" "O\x14\xdd\r\xc0\xd7/\xd0\x62\x8e\x08\xcd\xa4\xb1=\x83I\x95\xd0\x8c\xcc\x84\xdb\x31h\xdb\x81\xda\x33\xbe\x98\x33x\x81\x16>\xdb\x93\xfb\x41" "\x05/,o@\x9b\xdf\x32\xf2\xe9\xff`O\x8e\xb0\xfd\xe3L\?\"\x31\x63\xd8^\x62;n{\xa9\xf3\x38\x66U\xd9^\xf3UXK\x43" "\n\xb6\xd7\xcet\x97}{\r#\xb1\xf6\x9a\x39\xa0\xd4\xa7\x8e\x9bZ\xb3L\xfc\xc2\xf3\x8d\xb0\xadO\xacS\xc4\x14\xbdQ\x03\x8e\x1ek\x19" "\xe9\x94\x30\x92\xed\x94\xf0\x8b\x42\x33\xa5\xef\xd4\xe1\x84\xa9\xd3\xc2&\x0e\xa1\xbb\xeb\xed\xb4\xc2\xefw\x63<\xff\x32\xc2\x88\xa3\xd3\xc6s\x97\xe3" "\xac\xf9\xeb\x30N\x43\xa7\x87\x45\xce\xce}\xfc[\x46\xad\xd8y\x94\xa6&j\xdd\x43|\x98`T\xddy\x8c\xf3O\xf2\x42\xc7}\xad\xa9;" "\xaf\x98\xd9\x11\x9a\x8b\xde\xcekp>\x07-$\x9e\x31\xde\xbe\x85\xed\x13jmgX,G\x05\xae\xcb[\x42\xf4\xb2\x0eGMh\x93\xab" "\xb0]\xc3\x04J\xe7\x35\xec\xe3'\xc2\xfb\x89\xf3o[\x0b\xad\x1e\xe8p)Wxm\x19\xf8\x1a\x9bO\x01\xe1\xec\x15\xbd\xb8\xcekrY" "$\xaf\x9c\x88''\xe2\xe6_r\xbd\x0bs\xda$v\xde\x02\x9b\xc1\xeb\xbc\x61on\xe7->j\x81\xe6#\xb6\xc3\x05i\x63\x38\xbd\x0b" "ok\xa6\xa1-\xec\xbc\xa3\x43k\x8c\xbaZ\x64;\x1f(\x19\x1d\xf5\x44\x66L\xbb\x62\x9d\x41|V\xfe\xdb\x36\xd0\xe5\x32-\xed\x80\x99\xa6" "\x8b$\xaeY\xf7\xce\x88\xe5\xb7\xce\x00}\xb3\x0e-$;\?\x7f\x8b\x1d\x36\x33\x89h^T:\?\x41\x89T\xaf\x06\x1f\xb0`\x13\xcd\xf7" "\x39\x8bh\xcbL\x42k/\x84\xed\x07\xb0\xf3\x03Z\xcd,\\\x9c\xa6\xe7\x94l\xe7\xcf\xa0OgT\xf3\xfb\xc7\xeb\xb0\?\x11\x41\x9a\xfb\xf0" "\xeb>\xc8\xe0\xd4Q\xa9\x0b\xff\xe0.\xfa\x65`\x85T\xd8\x33}\x1d\x94\xdf@\xf3=\xd8\xd9\xc0\"@h\"\xb4\xeb\x8b\xe8V\x0b\xe3u" "\t/\xb8\xd0\xd6\xc2\x85\x8d\x86S[o\xa6\x62\x9c \x03\xfd\xe6\x1c\xb4\x87w]\xc3\xc2\xf2\xf5\x03\xcf\xf2\x10\x98\x9f\x15\x63\xeaW\xc5\x34" "\x1d\x32\x9f\xd9w\x1e\xc2o}\x87\xaf\xe7\x41.\x03\xe2\xbb\x0c\xf1(\xc4\xb9\x39h\xbc\x9e\x63\x1e\xe4z\x13\xdc\xbf\xea\x10\xd2\x82\x1b\xaa\x9f" "\xb8\x32\xd9\x32\x46\xa7'\xa0y\x82\xbb\xde`Q\xc3\x88\x07k\"\xb6\xd7\xba\x07~\xe1\x03\x03:ws\xa8\xf6\x8d\xc1U\x13o\x82i\x87" "\xe2\xee\x06\x9e\xc1\xba\x39\xb8\x06\x11\x9a!w\x37\x87\xb0\xf5\x42\xebR\n\xcdoV\x37\x87\xf5\x99.\x03\x00\t\xad\xad\x16\xbe\xad\x64\xf8\x11" "\xceZ\xa6\xc1\x85\x96\xf0\xf4\x1a\xbcx\x07\xcb\x8f\xd1\xcb\x18\x61\xca\x45\x33/\xf9\xc2\x89\x16\xa1n\x15\xe1\x10\x84\x35\xcd\x31o\xb2\xbb\x1c\xd5" "u[\xe1\x42o\xbc{\x8d\x66\xb7{\x8d\xa9\x0c\xa1MM\nwU#\x0c\xd8\xba\xd7Q\xf6\x1e\xcc\x8d\x41\x9b\xe9\x17\xdan\x80\xeeu|" "\xf7\x00Z\x7f\xa0{\x9d<\x37\x83\x9b{\xb8\x07\xedj m\xc4}qQM\xfbl\x8d\xda\x13\x82\xab\x62\xd2\x7fS[\xf6\xfa\xef\x7f\?" "\tO_\xe1\xa2Z\x13.\xc9\xbc\x13\x8d\x93\x8a\x45\xec\xc1\x35\x31\xcc\xb7\xe0\xb4\xdf\x34\x98\xe6\xa9\xd8t\xaa\x9b\x64\xf3\xe4\xa3\xda\xbb\x93\x99" "\xa1\x62\xd0\xbf\x0e\x0b\xc7\xae\x45\xa5\x89\xee\xb1*\xf8\xf7\xfd\xd4\xc3\xe0\x9c\x81k\x44[v\x82\xdbUR\xdbO\x15h\x1a\x7f\xd9\x96\xfd\x8d" "I\xf7\x02s\x38\xa2\x99\xaf\x08\x63zg\xd2\x31.\x1e\xef\xc5S\x17\xa3\xce\x8e\xe2P\xf7GY\xfd\xd4\xed\xa6\x17\xbcZ\x05\x8b\x11\xc5_" "p\xdd\t\xef\x98\x37\x66\x91\xa9\x9c\xe8w\xaf\xb2\xd4~\xc8\x39\xb9\x05\x37\xcc\x46\xbf/\x1b\x35*kN\xcd\xec\xfc\xe3\x7f\x35u\xd0\x30\x99" "\xab\x9c\xb9\xb0O\x82#|/\x38\?\x85i\x9e\x8a\x1f\xe4\xd0\xcf&\"\xd6\xe1M\xc4\xbc\xac\x88~\x8e\xcc\x85\x0e\x36mw\xc5^\xcb\x1e" "j,V\xaa\xad\xea\xd8\xcc\x07m\xfd\xee\x62P\xfcp\x11\x16\x63&j\xf3\x31\xf8\xbf" "\x8c\x9d\x87R\x33M\x0f\xa5o\x9d\x8c\xc1\x18\x93\x83s\x02\x93\x1c\x00\x03\xce\xbe\x98\x65\x82\xef\x62%\x9d\xa3\xf6\xf0~\xffVm\x15\xc5#" "\xb5\xed\x99\x9e\x9e\xce\xadV\?R\xbbwJ\x13\x94\xd8\xae#\xd1\xf8\xba\x85\xea\xbel\\\n\x9a\xfa\x8d\xc6\xeb\xf0\x97%\x0c\xb1Tqw" "#\x1en\xc4\xa3\x8d\xf8\x12\xc4I\x35\x88\xfe,&&\xaf\r\xcc\x1d\x31\xe0j#N]\x0ci,\xa2\xa7\xad\x8a\xbd \xda\x01G\x10\?" "<\xaa\x1e\xb9\xdd\x10\xb9\x62#\xbc\x8f\xe2wZ`<\x8b\?\xce\xe4\xea\x0bs\x92\xa2\x9d\xe5X'\xa8\x88u\x1e\x15\x19\x91\xf3''\xce" "T\x82\x38qq\x0e\xdav)%\xc3\xcb\x0bg\xf4Qv\x31\x31'Z\"V\xda\xe9\x90\xa1U\xbe\x9a\x16\x9f\xa1\xbd\xedL\xcf\xba\x18'" "\xa9\xc6\xec\x66\xb6(\xc6\xe8\xe1\nG\xe1\x98\x16\x8f\x66\x98\x8d/s\xcd\xd0\xf6\x44:\x7f\x17\xba`\xaf\x1e\xf8m\xc8\x8b\xfd\x92\xc5s\x9c" "\x00\r\xed\xac\x80Q\x05\xb4\xce\x33\x0c/MK\xa4\xfd|\x9e\x06\xad\xcc\xe3\x06\xa1I\x96\xb3\xd3\xa6\xa1-O\x61\x38\x62\xda\xba\x39\x63\xfd" "_\xc6\x8a\x80r\xe4Lw\x98\x35\x1ex\xdb\x87\x45\xf0\x15^\xd6\x03)\x43\x0cz\xcc'\xbd\xb6S\xdb\x12\xf3w\x0cm\xfa\xe8\x62\xfc\xf5" "\x13\xb7\x1b\xae\xc1\xbf\xae\x8b\x98\x45\x11\xad\xcf\x18\xf6\x99\xb6\x43\xa6\xe9\xb0\x08O\xcd\"\xbe\xb3\xd0\xbd\x1f\x83\?UIUy\x81\xe9\xa0\x17" "\x46\xf9\x0c\xdel\xbf\x0c\x01\x9b\x8f\xd5\x43\xd3\xf1\x83k\xd9\xa4\x9b\xb0\xd4N>\x9d\x92\xdd\x31\x9e\x81\xe6S\x1c\xaa\x31\xd1\xa6\x97N\xad\xa4" "Y\x01\x63\xc1O\xc9o/\x7f\x9cR<\xb1\xa5\xaa\\\xc6r\x82\xf2NOv\x61\xee\xa4\xc6\x38\xc5Gy\x8c!\x44\xcc\x1f\xc6'x&" "\x1c\x95j\x94,\xb7\xde\x42\x36\x8do&\xcc\xd4*\xba&\x94\xa7\xf0&R\x35>\x82\x8a\xc5\x61\x46\xcc~\xe0.\x86p\xa9\xde\x83\x8b\x18" "\xf0\x88x\xbbM>\x38\xe1\x37\xd5\xc5\x8d\xd6%\xdf\x9c\xf1M\xde\x45X\xab\xaa\xf8\xed\x94\xc8\x66\x42u\x42\xae\xc3\x87\xbe\x43\xbe\x8dY\x9c" "\x31\x8a\x36z\xa3\x82\x1dY\xc2*\x1a\xc4\xb8\x46w\x83\">\xa0R\x80\x17\x0b\x63\x34\xe1ml\xa3\x90pX\x97j\x37\xb1\x33\xed][" "_nQki\xe9\x99\xce\xd6\xfb%\x06\xf0\xb9\x86\x03i\x92\x93\xdd\x81kz\x89\x16\xb2\x0cv\xce\x1a\x7f\xc7S\xcf\xdb\xaa\xc9\x0b>\xd8" "\x97\x32\x1c\xed\xef\x45\xf3\xba\x07G\x85\x43\xcf{Zh\x8eV\xdeP\x89&\xa5\x36\xf3\x99\xfe\xf4\xf0\xc0\xb5u\xfbn]\x0e\x17_\xcfO" "\xe3\x0f\xbe\xa5\xf1\xbeS[\xc0\xd1\xcc\xb5L\xa9\x86\xa5\xa3\xd1\xfb\x11X\xa4)\x97\xe1\x94\x42\xb8\x83\xac\xa4\x1b\x0b\xde\xd1 '\xa7\x03'" "\xb6\xfb\x88\xc8\xbe\x83\xd0k|\x11\xbd\xa0H\x9a`\xd9[\xc4\x87\xda\xef\x18\x11\x84\xcf\x10\xe1\xfbL[\xd0\x1e\n\x04\xfc=\x1a\xd5Q\x44" "\x1f\xfd\xb4\x64\xb6G\x8e\x9c\x92\x41\xbc\x16\x14M\x44x\xc2*\x97\xb1\x9cn\x8c\n(\xd5\xf0`,\xdc\xc5\x43\xa6{%g\xb4\xbfp\x31" "\xaeT\xbd^\x14\rn\xb7\x44<\x44\xca\xa7\xb9\x82\xf6\x97\xf6\x91\xe7Sv|\x84\xd8\xd9%\x62\xf7\xc2\xa9\xedY\x63;h\xe3\x45\x10\x17" "-\x17\xe3\xfa\xbb\xb7\x88\xa2\xc1\xcaK\xc4\xa7\xadp\xbd\x01*;o\x99\xbc\x8f\x99\x32g\xc1\xc3\xa8\xf0\x07\xaf\x03\x06T\xc6\xf5\xf3\x1b{" "\xc9\xd0\xde\xfd\x85\x63\xc2\xc5\x18\xa2\xb2:\x37\x62V\xc1\xa8\xdd\x9c\xe5\xd2\x35-\x94\xae\xed\xcc\x9c\x1a\x9a\xc3\x0b\\\xef\x1e;\xd5\x33P\xed" "\x82\xda\x93\x13\xfb\xf7\x44<,\xc0\xa5\x04\xc4\x87\"\x45\x64\xf4\xf5\xedS\xbaXy\xbc\xd7,\xf1^y\t=\xb9\x44\x94\xbb{\x1d'Z" "\xfcP\xc2\x1e@\xd1\xea\x9fN\xafI\xd6\xcd/r\xe2\x94^\xb4:<\xf2#>\x34\x8c\x0f\xf8\xfc\x16_]\xa4\x13\xcbm\xb5`#\xa9" "\x62\x95\x9c\xf1z\x35\x96\x18\xa5\xee\x1d:\xa8@\xb3\xf9g\?\x7f\x45\xd9!\xdf\xc0\x45\x1b\\\x35\x9d\xda\xb4`\xccT\x83\x65R\xb9\x16\xed" "\xef\x93GN\x19\xbe$v\x44\x80i\xe9\xea*\xa3\xc1VN\xc4\x83}\x36\x1e\x35\xd8-\t\x0fgN\xcc\xd0\xa8\xb8\x00s\xfc*\x32G" "M\xaa \xf2\xda\xc9\xe1i-:= \xeb$\xaf\x8a\xf1\x66\r\xc6\x89\xca\x39h~r\x8d\xea\xaf\xcc\x0c\xde\x44\xbb@\x1a`\xe2Wx" "{\xf5\xbbP\xd3(h\x36\x9d%\x44\xd7M\x89]z*\x32\xc6\x36\xfb/l\xbe\x82\x32(/\xf0!\xda\x81Q\xbf\xc4\x11\x45-\xea\x38" "\x9f\x9d\xe1Xoj\xc5\xb8\x32\xa0\x36r\xb2\xff\xab\xa2\xee\x96\x45\x8d\xaa\x1a\x0c\x65 \xfe\xf0g\x0f|\x45Ow\xac\xe5k\x81\xef\xef\xd1" "\xd6\x05[\x82Z\x34\x66\x1a\xd9\xc1\xce\xca\x1b\x10\x8dm-\x9a\x1d\x83\xb6\xe2&\\\\\x38\xa3\xf1\x63\x10'#\x17\x31)\r\xd1O\x83\x81" "\x36\xe5[[\xb4\xb0\x97T\xc4\xd5\xae\x1e\x9eh\xb6\xb8\xaa\x1d\x38\xa3\xc5\xb5\x8b\xacXjp\xb4#\xcc\xe1\xdb\x30nU\xb6\xc9.\x89\xb7" "\x80S\?\x8dzt\x0b*\xf2\x1a\xce\xdbS\xa2\x04\xc5\xf9\n\x89\xdc\x16\x9b}\xbc\xb0\xc8\xbb\x14\xf1`\xb0w\x32\x86\xcdp\xa6\x61\x8b\x1a" "\xc4\xd7{\x8aK\xf0\xfa\xde\xc9Y\x05\x11\x91\xd7\x38\xf4S&\xb3\xc3\xf5\x15\x12\x12G\x90\x1a\x7f\x17\xf7^\x66\x44\x8b\x8e\x1b\xeb\xad:\x16" "\xfe-\x80u\x97\x8a\x9c\x44\xa9\xb1\xab[\xc3\x32\x88\x10=\x8e\x9a\xd7\x15R\xb3\x83m\xde\xc4\x96\x03\x8c\xec\x66\xd5`\xb5!\xc4\x88\xa1\x16" "\x7f!_\xe1\x94O\xe1\x14\x99\x0b^\x8e\x8c\xfe\xf8\x30\x8a\x10\xee \xdf%\xfb(.l\x95kX\x34\x16\xa2\xab\xaf\x94\x17\x0b\xa7\xd8\xaa" "\xa1\xf2\xc2\x9a\x87\xb0\x82\x1b&\x35\xd4\rX\x1a\x13>n\x91{N]&\xdf\x46z'Oy\x12\x39\x85\rq\x8dS\x35\xb5\x04\x43\x04" "\xa5W:*\x0e\xf0\xd0\xc9\xf4\x81\x9cx\xf6L\x66\xd7$\xaa\xd9\x64\x85\x0b\xa4[\xdb^\x98\x30\x83+\xdci\x38\x65`\x8b\x93\x41\xa1\xcd" ";X\x82\x32-\x1a\x8cq\x88\x83ii\xa1\x19>\xcb!\xdf\xa5G\x03\x18\xae\x89x\xc2\x8b\x14\xf0\"q>\xb8\xf0\x11\xc5\xc4K=\xec" "\x12\x84}\x94/\x18\xf0*Qp\xd2/TO\xe9\xcf\tyN\x0eH$\x17\xdc\xe6\x0b\xd1\xd6)\xd7W}\x8aoNN/\xa8\x18\x15" "\x8eq\x32/\xb4\xc1\nN\x08MK^\xce]L\x17H`\xd8\x9c\x19\xb5\x06\x63\xb6L=MW(\xae\x38S[\x89\xa7[o\xe3\xa9" "\xd6;}\xa7\x36N\x43~z\x88k\xae\x8f\xf9\xe9\x15\x7f}\xb5\xef\x8c\?&.\xa6\xcc\x9c\x30\x16\xd9T\xe4l\x9ek\xd2\x86\xc2\x1f\x8b" "\x8aK\xa7\xb4\x32\xf0\x05\x06\xed\x1dy\x82\x1d\xe1\x1a\xcc%\x85\x8f\x39\xf2\xc6\x19-\xb7\xbc\xbd\x15\xcd\x1bhm\xcck/\x14y_[u" "\x13N\x98\x06\xb3=M\x42\xf3NX\xae\xa7{\xe7\x8cp\x9dl\xc0\x98\xc7(\xfdU\xf9\xd3N\x83\x9d\x44#\x61\x66\xac \x9c\x06\x46\xb9" "o\x9c\x08\xa1\xda)\x39u\xfe\xf9t*\x43\xc0\xcd/\xa7z\x30\xee|\x07\x1a\xaa\xe4\x06\x8c\x00\xca\x8d\xc8\xfc\x02\x18\xa3\xed\xc3\x04\x99Q" "\xb5\xb8\x7f\x94\x9a\xa9\x94i\xd2\x15\xdd|\xf6\r\xe6\xa4\x81\xbb\xc3\xb1\xf6\xa2\x1d\xaf$ \x1a\xcc\xa1\x9d\xee\x81\xb6\x43Py\xc7I\x34\x15" "\xb1\xc0\"\xe2Y\x61\xdd\xaa\xca\xd8j}\x7f\x86\x80\xfb\xd3hZ\xc7\xaa\x85h\x95'r\x98y\x38\x9d\x0e\xe8u \xf6\xce\x9cQ-O" "\xf1Z\x1f\xf6\xb9\x04mX\x8c:\xef\x9c\x1bQ\xcdN\x08\xfe\x13\xd0\xdd\x0e\x1a\x9a\xca\x06\xac\xe7\x8c\x32t\xc0~\x13\xd1\x96/\xce\xa8z" "\x96\x0e\x06\x41\xeb\xe7\x38\x14m\xc0=\x88pw\x9f\x1d\xe0\x06\xfc\x80\x08\xcd\x33\xa4\xd0N\xf0R\x9e\x44\xc5\x9b\xf4k\x8f\x1a\xd2\x46\xbdj" "\x8ew\xd7\x1f\xdb\xb0:\x93\x00\x0c_\x95\x99$\xe0TN#\xae\x9e\xc5\x37\x0b\xb6O\xa2\x35\x7fg\xdf\x92\x94\xf0+/\x01\xb5\x8a\x33\xda" "\xff\x84\x9f\x10\xa6\xd3\x1a\xeaMzq\x9e\x11\xe3\xe2\xd9\xef\xb2\x8c\x8d\xda\x1e&\x37\xe5\xf0\xa0\x01\xcf\x8f\xc2[\xa4R\xf2\x30\xd6\xb2" "\xf1Xt-Z\xde\x06\r\xa3\xc3\x46\x32]`\xf7\x9d\x8b^&\xb0k\xa9\xdc\x90w\x0e\xb6^\xc9\x1e\x38\xea\xfdN\x90\xee\xeb\xfb-\x18" "\xcc\xa9\x98\x8f\x86\xefI\x1f\xafKw\x06I\x0e\xf9\xc1\xfb\xd5\x45\xf6\xb3\t\xdb\xc8\xa6\xfc)\xed\x80\xa4N\x1f\xe2\xac\xcdi\xe7\xd6\xef\xfc" "\x9e\x9c\x83H.\x65t\xd0\x88\x0e\xca\xae\x61\x81\xd2\x44\x8e\xfbL\xfc\xc2\x17\xb4\xf3\xef[\xda\x44\xb3\x95\x65\xa1m\xa3\x36\x46\xe5\x11V}" "M\x63\r\xdf\x8a*\x07N\x8eTZ\x9c{l\xe9\xde\x9b\x0f\x06=\x9c\x83\xdd+\x10\xe5\xa9\xa5\xb3,\x1e\x84\x1e\x61\x0b\x66\x0b\x42\xb3\xa5" "*\xb7p\xc4\xaa\x10\x1d\xafV|\x35\xe0\x98\xac\x15\xdf\xde\x92\x0f`\x05\x0f\x88\x9d\xe0\xe5VR\xd9\xf6\xab\xc3\x92Ph\xc7{\x0b\xdf\xf1" "U\x9c\x7f\xa5\xbc\x00\x31no%\xb3]rO\xfa[\x14/\x9d\xe1\xec\x37h\xd3\x8b\xe8\xf8\xd9\x35\x19\x43x\"\xaa\x36\x34G\x35~\xd2" "\"\xc2$\x99\xf9\xeeX\xef\xb5\xb0\xcfV\xb8\x87t\xc1\x31\x0f\xc2\xc1\x1e\xb9\x04G=\xd2\xf2\x61\xcbS\x02\x1b\xc2\x84\x18n*\x93\x8f%" "L\xf9\x45\x43s\xd5\x62\x13\xd4\x82\xe1NYW\xc5\x9c\xd1\xfb>|\xe0\x9b\xc6\xdeN\x87\xd1z\x8d\xca_\xce\xe8\xac\xc6\x45%jq\xcd" "\xaa\xad\xde\xefx\x9b\xb4\xa8\xf7\xb8\xb6\xd7\x8b\x30\xf1\xc0\x93\xa2\xcb\xdc\x84&,\xaf\xc0\xca.\x99#\x87 \xe6\x9b{\xcc*\xbdh\xb0\x03" "\xce\xbb \xea\xbd\x1ek\xb4^\x8c:\xbc\x17\xd7n\x41\x64\xf1\x1e,\x9a\xcb=\x9c~(\x44\xe7\xae\x97\x1eM\x9d\x9cY\x35\x11\xdd\xb4^" "\xda\xb5\x84\xef\xad/p\x17&\xf0P\x06Z \x9a\xc5!\xab\x80!K\xc6\x30\xdaz\x04\x31\x1f\xa3L\x8e'\xf1\xcd-\x34\x34V\x43\xce" "\xca\x0f\x39\xef.\x43\xbd\x1ch\x0e\x14\x84\x32\xcci\x36\xd3{+\x34\xc3x{\x0e\xee\x9e;u\xad\x0e\xcd\x85h\xaf\xa0\xd9\xc1\x0bQ\x91" "\x0f\xd9U\x1e&\xf5\x87(\x7f\xc4\x02\?L^\xee@\xf4T\x87\xb0\x8a\x11\xaep\x15\x0e\xc1\x87R\x1d\x39\xa5q\xf4\xa7U\xcb\x04s*" "\x61\xe2\xfa\xb0\x00\x43\x06\xd1\xcc\x45\x7f\xf9\x9d\xfd\x8d\x11\xa7\x0f\x46\xf0\xc0!\xb4\r\xc7\xa1\x02\x19\xb1\x84\x8c\xa2}\x12\x99\x65\xc4\x61\xfe(" ":Z\x81\x18L\x8f\x82\x05\x91\x88\xe5!\x88\xfc\x32\x62\xdb=\x62\xbe\x19\xc1\x17\x87\x11\xe6w\"\x9a\xbd\x86\xb0\xf6\x08\x62\xfc\xad\x8c\x8f." "\x39\x62\x1b\x45\r^\xa0\xf1\x05\x9a{\xdc\x32\x8d\x8f\x84\xef\x88;l\xff\x85\?KP^\x96yK*\x8f\x38\x1d>\xe2\xa0q\x14\xe7[" "\xe0I\x13\xc4\x94\xc4(\xb6\xfd\xea\xc2\xab\x99\x93\x45n\x14\x37p\x17\x66\xdf\x11G_\xa3\xb8g\x99`\xc4\xf1\x92p\x92\x89{r\x82'" "\x82\xb3'!&\x62\x46\xcc\xec\xa3\xc4\xb6\xa6\n\xf1\xda\x95\\\x91\x1f\xb1\xd9\x1c\xa5{\x37NO\xeat\x7f\x08\x87\xe3\x14\x91z\xe9\x41\x35" "\x46\xa7\x64\xc4\xb5\x9d\x11\xdc\xb6\x0b\xdb\xf7\xe4\x04\x34\xf7`\x42\x0c\xc9G\xeb^\x31\xbe>O\xbf,\x81'\x91\x39\xf1W\xda#M\xb9\xce" ":\x65\x03\xa6\x94\x8a\x93\x85S\x35\x98\xcf@\x9c~g\xbe\x96\xec\xf6\xf4\xd0\xdd\xd5\x96N\x30\x61\xd0k\xc1\x87\xbb\xf0\xed\x02\r\x0fL\x11" "\xfb\x93\x33Z\xe6>\xea\xc2l\xb4\xb9\xca\xd5\x17G>S.t*\xb1[\x43\x44L%)\x37k+\xd3\xa8\xd1\x01\xbby\x10\x05\\x" "\x44\x96\x9c\x1e_\x11\xe3\xaboN\xcc\x9a\xf6~\xc8\xc1\xb2j\x9c\xc0\x36\x91\x0f\xa2\xa2\xc4\r\xa3\x37\xd5\xd2\xfbR\x9c\xaf\xa7\xabZ|\x1a" "\xae\x92\x0e\n\x9cu\x36\xedk\x8f\x45\x92\x1a\x36q\xbb\xb6><\x87\xb6h\xf9M\x62\x0c\xab\xa6\x9c-Q\x46\?\xef\x1cJ\xaa\xc6\x8c;" "\xa5\x11\x80\x32\xfb\x05\xbe[\xdd:~V\x80\x0f/\xd3\xfc]\xaax\x32\xe0\x90u\x1a\xfc|\x99\xb8n\x9d{\nx<\xe3\xde\x83\x9d\x33" "\xc8\xab\x0f\xfbN\xd8$\x89\xf8q\xef\x64K\x30\xcd\xe4\x15.|N\xb1+]\x88r\x32\x65\xdb>\x95\xc2 I\xcaIM\xd1p\xf9\xf4" "\xe8\xc3_w\x9a\x7f\x90\x44\xe2\x12\xc2t}p\xe8\xe4\x12\xd7\x14\x8e\x05\x84\xf7\xf6\xe6\x17\xbf\xe3SNi\x89xIv\xc9\x9es\xb3x" "\x46\xd7\xaa\xcaGp\x9aw\xca\x80\x1d\x9b\xaaT\xeb\x90]'\x33\xa7\x8a\xd8\x1eS\xe6\x41\xed\xc2\xf9\x36yG\x96\x9c\xec\xc2\x9b\xa8N\x1e" "\x1f\x83\x86\x35]\x15\xd5s\xcd\xf9]\x46\x63k\xb8`\xb2.~\x97\x8fl\xba\x16\xd1\x16n\xc9)\xdf\x05G}\xc2w\xe7\xef\xb8\x13\x61" "\tJ\xb5\xcd\x80\xc1\xb4\x83}l\xba\x84\x16\xfaR\xa6\xf9\x39\xbc\xa2\xa1\xbdP\x46\xfb\xb9tU\xd6\xcd\x42X[\xb2\x30\xf4\x1dL\x94\x1e" "&S\x43\xb5\x85\xf4sW\xae\xe9:\xe5\xf4(h~L\x38\x34\xd8\?\xa8\x08OR\xf1\xd6\x8c\xb3x\x16\x36\rWIs/Ym\x34" "\xc6\xd9\xd0\xa6\xd1R'{\x9f\x32\x98{ur\xae`\xc1\xe9\xdc\x05|~)\x9bN\xa4\xbakQ\x61\x15\x44;$\xd5\x35\x89\"\xab\x35" "\xd3\xde\xb2\xdfT\xb7\x65\xd7\x1b\xedz\xc5\x35)\xd3`\x9b@Q\xee\xaf\x43\xf4\xd3\xfdlXq\x18O\x96:\x33`\xfe\xc6\xf4s\x98\x41" "\xf9\xe7\xe5\x85\x16]\xab]\x92\xf2yRm\xc3=[\xf6\x10W\xffn|\x33\\\xdf\xce\xfe\xd7U\xf4\xe8)\x19{zN\x42\xd8x\x10" "/\?\xff\xf7\x9d\xfdqV\x32\x00H\x9b\x43h'\xccK\xa7L\x08\xdb\x96\xa7\x1c\x86\x84\xf5\x04\x87\xd9\xc6\x82\x63H!_\x00K\"\xf6" "\xcc\x19\xf5\xa8\xcc\xfd\xa7\xbfZ\x88\xa7\x07\xb0\x33\xbe`\xefN\x19\x9c\xd4\x41\xf3l\xd2~\x35\xdb\xca\x13h\x9eY;\x37![\x8b\x98\xc9" "\xb7\x9d\x9b\x64V\x84\x07\x34\xd5\xbaN\x19\x04\xa6\xcd'\xd7\x42\x99zx\x08\t\xde\xbdtr\x99g\x11=\xa1*PK\x88\x32\x93\xc6\xac" "\xff\x8c\\\x1b_\xb0\x31\\\xe8\x83\xf9\x63\xf6\x8f\xc2\x03\xf6\xab\xe4\x88\xfcv\xea\xde\x8bi\xf7wU\x65\x17\x08\x61t\xf1\tm\xd6\xe6\xa2" "\xa2i\xd2\xc6\x63\x88\xa6Z\xb4\xbf\xcb\xe9\x30ho\xd2\xf3\xdeh\xd2\x9bl\x06\xed\xa0l\xee\xda\xb4\xb0m\x62\xf8'\xf8\x7f\xe6@\xf9J" "\xee\x39\xb1m\x64\xd4\xbei\xe7\x61\xda\xd1@\"\x1b\x8d\x37\x37=\xd9\xc4\xa6x\x1e\xbd_\xdb\xe9\xf0\x13-\xd6\xff\xb9\xae}\x1e>\xfc\x1b" "\x0c\xdf\x82\xff\xfdMy\x19<\xf5!\xc0\x8c>\xb2\x0fT\xdb\x8bozh\xa8\xff\xa6\xa3\xe4\n\xed!\xe0!\x33\?\xe8\x1fJ\x85\xa4\xe7" "\xda\xdb\x31r\xc9\xe2\x63\xf3\xc9&\x0f\xbb\xf6\xe7\x87\x7f\xf2p\xff;[\x1f\x8avs\xa8._\xff}\x02\x06o.\x83\x80\xf5\xd1H\xbb" "\x36\xff\xf9\xf6\xed~<\x1eK\x82G\xdb\x87\xec*Y\xb0t\xd5\xf7\?\xb3\xda\xfdS\x46\x83oHh\x8d\xc3\xe8\xf0@\xed\x06o\x0e\xe1" "\x82\x30\x93\x97\xf0\xa1\x1a/\xfc\xef\x37\x8f\xcf\xb3\?x\?\nu\x82h^\xe3\x8b\xf8\xf5\x13\x8f\xf2\x99\xa7\x82\x07\xa7\xbf\x19\x32\x39\x1dh" ">\x97\x66!\xf3\xbd\xab/\xa9\xc6\xb5\x06\xec\x37\xffs\x7f\xf9P\xfa\x17\xe1\xec\x1d\x84]\xdf\xeb\t\x11\xf5\xa9\xf4*\xfe\x1f\xd1N:K" "\xd1\xfe\xbe|~\xd5~\x16\xc2\xd8\x15P\xd1\\\x1c\xb2t\xfc\xe7z\xb3\xcbL\x8a&\xb3\xba\x66\xce\xcd#h\xee\xe9<\xff\rP;\xdb" "\?\xd1N\xdb\xdbQ.\x14\xf0\xffG\xeeN-\r\x82\x66\xae\x15\xd1\x38\xc0\xa1\xa3\xfcOn^\xff&\xe0\xff\xca\xe9\x32\xc8\x94\xde\xaf\x9e" "\x82\xd1=\xff',\xb3\xb9\x18\xc1w\xf5 \xb6\xebZ\x15\x14\x06v\xf4g\xa6I\n\x37[:\x43\x01\x1c\x9c\x38\xf5\xe8\xdc\xf9\xd4\x35]" "\xf2\xea\x1f\xb9\x06\x7f\?\"\x0e\x0f\xd4\x8a\xd3[\x0b\x33\xe0W^\x45+_\x43]\x44\x63\xe6\xb6\x31;.\x63>\xc2\xf4\x80\xb3V\x0b\xda" "_)\xa3\x1cSx\xcaN\x8fWMs^{\xfe.Q\xe1:\xf4\x02\xbb\x0e\x85\x98)[\xc0\xff\xa3\x31\x1c\xb0.Z\x0e/\x84\xcb\x9f" "\x8b\xf8\x18\xcf\x1f_\xa1\x31\xe2<\xb1O\xee.\xc2\xefn\x42\x83\tG\x91J\x34\x14\x38^\xc7\x9a|gp\x0ckZ&\xb3\xa8\xc6J" "\xf4\xff\xa3\x87\xc0n\xfe\x82\x8b\xd9\x8b\xb8\x8e\x8c\nW\x94\x46/\xbf\"\xa6\x39\xc6\xaf\x81~\x19\xc7\xca\x8b\xb8{\xe6\x8c\x1bHo\x1aV" ",t\xfcp\xe4\xb3\x1b\x8b\xb8\xcf\xcb\x0e\xcf\x9d:\xc7\xca\xc6O\xdf:\xdbT\x88\xd2\xbax\x06\xd3\x00v\xe5T\x94\xb6x\xbe\xf9\xe6\xb0" "\x98\xb9\x04\x07:\x10g\xdaOg/\x12\x01\x9b\x31\x9f\x05\xfc\xa3\xad<'\xa8\xe6\x07\xe4\x9a\xf6\x9fN\xa9\x86\xb9g\xd3\x8c\x16\xbc\xdaZ" "X\xaaG\xd7\xbc\x66\x1e\"\xf8\xa7\x34\r\xdd\xd5\xf0`\xac\x10\xe3\xcf\xa1\x33S\x10\x44\x43\xcd`Z\xc2\x61\x04\xad+\x85\x0c\xc7@K\x88" "n\x19\\y\x1a\xfd\xf2\"z\xc7(i\x8c\xb4O\xc0\x66\x1eg'\x0b\x9f\xf0L\x38\x92\xd9h\xa6~\xb7R\x1fHn\xde\x98\x46\xf2\x13" "\xe9\xa9J\xb0\x64\xa1\xbf\x9f\xc4w\xcbh\xd5\xf0\xbe\xae\x04\xe8\x8a\xdb\xf0*\xfb%\x36w\xc2us\xe9\x43-N\x15/\x12\xac\x0b.\xa4" "\xc6\xf4\xb6\x0b\x0e\xc9\x8cZ\xf3\xb3\xd5\x82\x9f\x66%\x9e\x99\x96\\\x0b\x9ak-\xd2\xdc>\xf9\x02\x1e}\x38\xb5\xe6\xed\xae\x32\x1a\xf6\xea\x8b" "v\x8c\xe1\x13v\xb8\x0b\x8b\xc8\x17\xe9\xd9\x83\x33S\x04\x45\x8b\x0e*\xde\x7f\x14-\x93\x33\xd2s\x14\xb1\xb4\x81\xc7\x81\x07S#\xb2\x15\xb4" "\x41\xcf\x19\x7f>\xc1\x02\\\xcd\xc1\xde\xde\xf4\x90;VG\xf2\x61\xb2\xb8\xd5\xa3%\xd9\x83\x84\xef\x7f\xe5\x98\x44\xde\x94\x62\xef-\x01v." "\x95\x17p$\"\xdc\x45\xe5\xc5\x99\xc3\x85\xe7\xcd\xf5\xdd\x87\xd3\xf3\xa3\x8a\x9b\xce\x9bjv\xf0\xaak\x7f\xb6\x1eX@\xf7\\\xbe\xe1\x37\x46" "\x80\xe6\x17\x1c\xd7\xfa\xa7\xde\x91\x0f\xd5\x43\xf2\xd3V\xf0\xc8\x8b\x30L\xb3\xab\x98\x19\?\xa9\xd6\xda\xa3\xf1\xfb\x02\x07S\x1a\xb1\t\x92\x62h" "\xc1T\x9b^\xe8\x82\xd7\x42\xca\x64%\x1b\xb6\xaaq\xf6\r\x01\xd3\xb8\xba\x8bNJ\x08\x9b}\xa4\xb0\xdc\x36\xcd\xd6p\xd4 P\xc6\xc5\x1e" "\xf3{\x1d\x01\xaf\x9f\xdf\xa5U\x8a\xaa\x65\x9a\xa9 \xf8\xcd\x07\xf7\xd0\xbc\xc0\x41K\xd9j\x9a\xf6.u\t\xfd\xfb\x07\xb3J~\x42\xebS" "h\x61\xa8\x1e\xb4l\x82IX\xee\\\xe7)\xa4\x96\x19\xd4\x37K'\xfc\x44\x82\xff\t;\xfe\x94\x97\xf1O\x98\xbf\?\x15g\xc9\xcdmp" "@\x8e\xb0\x42\x31\xfb\xe4\x85k\x9aHm\xb4\xec\x33\x9f\xaao\xf7tw\x91\xe9\x44\x66\x83\x33=!\r\x96>\xf3\xe4\x13}\xaa\xec=\xdc" "\x45\xb9\x17o\x86\x65\xbe\x61}\xf4\xe8\xec$)\xd7\x43X\xe7\xc6\xa7hL\xeb\xa6_\x8f\x1b\xcdz\xe6\x30\xfe\xb1\x80\x07\xcd\xa5\xd9+>" "\xd8\xf9\x84'\x93h\?\xffO\x46\x95\x0f_.|\xde\x45\x35\xc9\xcd\xd3\xe9\xdf\x64\xf1&G\xc5\xdd\xc1/\xd6`M\xb3\x89\x88\x64\xf1\xa2" "#\xedi/\x04_Ig\x7f\x10\xb4\xeb\xa1\x9e*&\xf9u\xf3\x38\xda\xdd\x9e\x37\xd6[\xa5\xb4\?\x80\x17\x66\x06\x0f\xe1\x9a\x03\xda\xed\x43" ",\x63\xe1\xe2]\\\x1ey\x8d\xae\xc1\x92t\xac\x89T\xfb\x93\xbf\x37]\xf6\?\x99@\x1ar\xaf\x34U\x63\xdb\xad\xa2\xb4X\xd2\xe8\xfc\xfd" "\xb2\xb4[\xb7\xa3\x7f\xc2\x36Y\xfd\x9fG\xfd\xbc\xce\x64W\xb5\x63\x9e\xe6\xff\xf9\xe9x_\x8avp\xd3n\x61\xc9\xd1$\xf3\xfe\xa0\xfd\xfd" "\x15\x66\r\xff&\x9a\xee\x05\x39~\xc0\x14\xadt\xc8\xd2\x41\xeb\?\xefr\x33\x7f\xbb\xd1\xf0\xb3tx\xf7\?\x7f`\x83\x81\xa0u\xb7\x33O" "\x9a\xbc\x65\xf3\x90\xba\xc9\xdd\x1f\xfe\xd5\xd2\xef\xcf\xe4l\xf7w\xf5\xfe;\x39\xf3\x91^\xf8\x30\xd4\xbc\x12\x30m\xe9>\x98\xdem\xa6\x63\x63" "\xc1\xdd\x8d\xf8\x95\xfd\xfe\xdf\xb4\xf8S\xcf\x41\xcb\xf4\x08\x43\x98T\xf9\\M\xb2\xb0\xe5\"\x1e\x94%z\xff\xa9\xdf\xfe\xa6\xaat\xfah\xf3" "\x0fM\xcb\xd2\x7f\x7f\x82\xe0\xd5\x99\xbap\xffS\x36\x32#\x17\xd5\xba\xdb\x99\x0c\x9c\xbe\x37\xbd\x0b\xa9\xda\xa8+\xbd\xf7\xcc\x18\xeb\x9f\xb0\xbf" "\x0f-\x9f\xe8\x46\xe5Y\xdb\xe7{,,\xcc\x05\xaa\x66\x89\xff\xdf\xa8~\x7f\x66\xf2z\xfa\xf3\x99\x89\x82\xdc%\xad\x15\xfe\xa6\x1d\xed\xc3M" "\xac\x7fz\xc7X\xb5\xe7%mi\x17\xde\xbf\xe5\xc2\xef\x82\x0b\xbf\x8buo\x07\xb4\x33\"\xcaKn\xb4Z\xb2\xe1R\xfe.*lS\x97" "\x9c\x9f^\xd2xH\xa9\xeb\x8e\x8b'h\x98\x9fVJ\x19\n\xbf\x99<\x46\xfb\x63\x38\xdc\x85\x96;\xe0\xd4\xf8\x46\x63\x9e\xb5\x80\xe2\x39\xcb" "\x99i\xbdpM\x0e\xeaL\x0c\x66\t\xaa%\xe5>\x8d=M\x0b\x13l\x1b\x8d\x33\xa2\x16\x30\xbf\xa1\x89\xa0ji{\x9f\x96\xc9\xa6\r\xf6" "~\xcd\x85\x1e\x34\x19x\x62\xadh\xa3q\\hs\x34\x87\x87\\{\x37\xcd\xa6\x37\x82\x96\xf9\xda\x63\xf6\xee\xaam\x9eH\xb4ll\xa7|" "j;\x1a\xc2\x08\xbf\x1a\"\xa2\xc2^r\x9b\xa6R:\x0bq\xa1\xa5\x66\xa9\xf3\x10\x16\xdc\x11\x9b&\x1dm)L\xf2@\xb4\x34_\x46\xfb" "\xbb$\xafv\x80\x1b\x46\xb9[\xf2\x99\xfc\x06\x0b\xadh\x7f\xe2\"Nx\x17\xb1\xcaoW\x65\xe0\xd0\x64'm\t\xbf\xc4J<\x1dv\x66" "\x1b\x39\x9a]\x06z\x84\xf9\xce\xb8l\xaf\xc4\x91z&\"\xf6\x32\x12\x08\xb1\x97\xb0\x8c\x86\xd5\xe9%\xce\xb6\x17\xa2\x97\xb3\xe4XU\x19M" "\xbe\xd3\x93\x1d\xd7\xe2\xe6\x81\x8b\xeb\x32\xc5{\xb4%\xafg\xddx\xa3\?!\x0c&\x94+\x30\xff\xe6I\xa3\"\xe3\x14\xe7\xdf\xc1\xbbS\xcc\xbf\x8a\xc8\x44\x80\xd5\x8f\xd1" "\xa3\x14X/\x92\xefN\xf4\x9bM\xf4\x87\x13\x11\x06\xf1&\"\x43\x88hm\x92\x31\xac\xbd\x99\xb6\xf9\x02\x7f\xd3\x42\xf2\xc5_\xe7\xe0\x37\xf5" "i\x05\xa7|\x8b\x38\xe3G\xb3\x92\xfcQl:\xa3\xfeIH\x04\xd7~g\x33,\xfeY\x98\x04\xc0/\x93iR\xb6\xa2\x03\x64\x08\x98\x04" "\x08w\xcb\x9e\xaf\x92\x03|\x11\x95\x8d\x90\x8f\x06\xabz#\x0eM\x33\xd1\x1f&)\x36\x9c\xfa\x12\x1f\xf5\x18\x65\xcc\xae\x63\xd9\xdb>\x91\xde" "%\xc4\x33\xbc\xc5\xe4\xbc\x0c\xdes\x32\x42\xc4\x12^tR\xbe!\xef\x9c\xe9\xd6=\xc5\xa5\xa7|R\x45\xf1J\xea\x9f\xd8\xb3\x02\x91Y\x36" "y\xb9\x05\xcd\x82\x45\xd8\xbbp\xfa\x05\xd2]\xdc\x06\x8bV\xc2\xfd\xc9\xfa\x03\xef\x1a\x33\x83\x46\xec|\x10\x91\xb9Z\x88\xe3\x1cU\xc4\x35\xd3" "\xe1)\xf8\x85\xac'u\x11\xa6'*\x07\xb0\x17\x15^\xe0\x9e\xeb\xab\x07\xa7g&\x11=\xf9U\\\x84/\xca\x9d\x31\x0c\x32\xcd_\x85\x88" "\xe9\xf1{\x34-R\xc3\x8bY\x97\xaf\xc1j\x0b^i\x45\x64\x16\x13\xae\xef\x90T\xeb\xd6\xben`\xfd^R;p\xa6\xb6\x93H\x44\xff" "\xed\xe3\x8d}\x11\x19\x65=\xbf\x84+\xb7J\x0e==\xa1\x19}\x0b\xcd \xab\xc2#\x99\x85\xb6\x02),\x34@\x94\x33\xa5\x64\x37\xe6\xb8" "\x1cl\xad\x8c\x61\xbe@\x34[\xc8TN\x41\xdb\x82-\xc4+\xcd\xc1\x1aJ\x88\x1a\x33\x17wp/\xbf\xaa\xa4\x10\xeb\x92\x1c\xf3k\x0ev" "\x19\x95\\\xba\xf3\x00\xe2\r\xe5\xe0\x62\xb3\x92[\xdf\xe1\x12|\xee#\x18<\xb8\x99w\xe5\x98\xbf\xab\xff\x8e/\x31#\xaf\xe2\x1d\xd9\x03\x91" "\x19\xea\xfci\x1d\xfb\x15\x84\xe6\x62\x46\xc6\xb3\xdb\xf8]\x94\x1bj\x33\x85\x8a\xa1\x8e^\x93\xf0\xb8\x86\xfe\x80\x88'\xfb|R\x11q\x8d\xa8" "\xf0\x8a~\x9e\x89\xf0\x36\xa0#\xe4\xb1\x33,\?\x8a\x66{\xcd\x84nqV\xa9\x33\x99\xcd\xb0\xc8\xcc( \xe6\x9e\xa5\xbb\xa4\xd9\xd8\xe6u" "\x11\x66.\xf4M\xc4\n\x64\xd0\x31\x8c\xbfL@\x11\xe3\xcf\x07\x17\x31\xd1\xad\x62" "\x89|q\x46\xc7\xed\x64\xb6\x0fm\xd4\x82\xfd\xb8\x8a]\x12\xf9\x1ag&\t\x0fO\x32\xb9\x10#R\xe1\x9d\x0c\xff\xf6\xb1\x89\xc4\xb5\xf4\x84" "\x9f\xdd#u\xd7\x95#l\xe5P\x11i\xcf\xbeu}\xdd>\x65\x97\xa1\xee\xa9\xb6\xee\x35`'/\xe2G\?\x88\x9fx\xbf\xebqS*" "\x0c\x38^\x11\xcd,,\x8d\x9e\xfe\xeb\xe5}\x94+\x30#\xb6\xd9\xec\xb6\xf9pm\x18\xf9)\xaf\xe2\x0f\x06\x99\x9d\x9fr\n\x9a/\"\xe1" "\xfc\\\xfe'h\x95\x44k\x90\x83\xa8SJ\x1e\xf7\xa2N\x37\xb6}|\x12\xb6\x38\x88\x86s\x8a\x97N\xec\xca\x80h>}\x45\\U\xb1" "\t\x45\x45K\x88\x36\xe6\x1a\x94]p\?\xbf\xfe\xd8\xc6,@\x46\x83\xd3\x19\r\xe0\xcf\x0e\x07\xc9y=\x39\xfb\x84v\xfc)\xad\xa6\x1e=" "\xf5\xc1\x00\x9b\xcc\x17\x16Z\x32\x62\xfc\x9d\x96\xfej\xe1jg\xe4\x65.]\x96\xe1\xcfR\xb5#\xb8\xf5Q\xf1\x03T\xbf|\x1d\x88h\x1b" "\x95z\xa5\xcb\x07\xd7\x92\xa3\xfb\xa0U\xcbN\xec\x8a\x12\x11\xcd\x8fp*\xd9\x43\xa7\xfc\x87s\xf5\xc2\xe0\x0f\xda@\x62\x45\xcd+\xb6\xff\xed" "\xa8\x85\xa4T\x8fr\xea\xdbt/\xab\xf9\x8d\xe4U,O\x33\xa2\x9a\t\xdd\xf7\xe3\xda\xad\x0e\x94\x07W\xfc\xa4\x8bs\xd0\x44\xd4s\xd0:" "rSl\x9a\xd0\x80O'\xf6R\x99\x98\x8ejp\xbb\"\xda\xf3\x08\x44%\xd2Vk\x1d\xed\n\xdcjj\xdf\xf4\xd8\xaeYp\xa7$\xcf" "$\x0f\x82\x45J\x84-\x7f\xfe\xe7W\x97\?\xeb\x0f\x46`|-\xf5\xa7\x96\xad}\x64\x43\xf6(\xda\xd1\x62\x42\xceq\xce\xa4\x8b\x1cn\xb6" "\xb1S\xd9\xe8\x99S\x44\x0e\x98\xdbz\xe7\xfd||\xdbKGUx \x43X\xe7%<\t\x46\x85J\xcf\xaa\x98\xe6\x11\xe6\x90\x13`\xba" " \xbc\x46\x9ct\x82\xa7\xdd\xd7\x34n\xcc%\x8d\x93\xe9\xa7\xa7#>\xd1\x96\xe0\xef\x87\xfe~\x63T\x17m\xccM\x08\x31\x38h\xe3\x80\x35" "%\xa2\x8d\xd3\x08\x85=\x44\xd9\x8bXl\xc6\xc9\x46\xf5t\xd2y\x0eQ\x96\x80\xcf\xa1\x8b\xba\x81\xbb\x11>PO\x83\xb9g\xcf\xfd\xd8\x33" "mLl\x1a\x42\xc4\x11\x63\?\x42\x02\xc7\x8b;]\xf8\xc9_\xe8!o\xafx\x66\xec\x05S\x0e\x93\xda,\xe9\xcc\xd9\xeek\x80G\x02s" "P\xc6\xf5}\xe1w\x8c\x1b\xc9\xf0\x30|\x01\xbd\xd6\x36[Q\x1e\x83),\xf5\xa3\xba\x9e[\xa7\x05\x62p\xa0\xc5\xbd\x84\xa8q\x08\xd7\xc6" "\x86j\xe1\xc3\rYs\x66o\xe5\x1a\xe7\x35\xda\xc9\xa8%y\xde\x1f=hZim\x92\x08\x87p\x1a\xa5\x32\xc1\x84\x1a\xb4\xd5\x30#\xfa" ";\x94\x37\x8a\xf3\x61\xb4V,:\xa5\x46\x82%\x0b\xb4\xc2\x63\x10;\x37\x9e/u\x15\xbc\xff\x85m\xd1\xa6I|\xd9\x9dT-\x1du\x32" "\xdf\x14\r{\xdc*\x9c\xd7\x12n\x9f\x38\x43\xd0.\x32\x12\xdbX\xe1\x8f\x14y\x88\x45\xe4\xad\xf4\xecIRVg\xf5:H\x06x\x00\x14" "\xf6{\xe0\xe0\x96\xac\x39\xa3\xa3\x42\xd4\xb9\x0eZ\xa1\x19\x44V\x99*\xae^\xbd\x19\x11\r\x86.&&\xd3\x96\x8b\xe9\xd6\xb6\xb7'\xaa\x99" "\x11\x81\x89\xeb\x16\xd2>\x1d\xf2.\xa3\x8e\x13\x33\x8d\"~\xbdj\x16\xcc\xaf\xfej!\x06\?\x83\xf8\xee\xd2_J:\x65R\xadP]\xac" "\xcb\xa8'\xd7\x9d\x33'\x07\xc9m\xb5\x17\xd8\x14\x07h\xe9`\x1a\xb4\xe3r\x46\xc3\xd1\xb0\"\xbe<\x39\xa3\x93\xb6\x8bI\xdf\x1e\xe8I\xf7" "\xe3\xe5\xde\xd4\xee\xe9\xe0\x0b\xbb\xd3\x10\x86\xd1\xa2\x89\xe6\x31\x46\xc5\x63'&\x8f!\x9a\xbf\x02\x13\x39'\xf2\xb4\xb9L\x1e\x33\xe6&n~" "\x93g\xa7P\xc5\xcd\xc5\xf3\x9b\x9f\x17~'\xfbIi/\x1a\x1e`\xe7\xba\x86\x9d\x92\x37\xce\xe4\xfa\x64\x13#\xd5\xd2\x93\xdd\xb0\x1dJ\xc3" "J\x64\x65s;.\x87\x9b\x88\xc5 \x11'\xbc\xf4\xd4\xf9\x46N\x93z\?~\x39\x0b\x8f\x33\xdb\xc2\x19\x33*\xde\x38\xb1\x0fM\xc5\x99\xf3" "wq\xfdOz\xceK\xe9\x30\xc7Q\xf3\x13\x0b\xca\x13\x96\xdf\x8d\xf1\xed\x37\xfb,O\xeaG\xd6/i+\x37J\xcbGO\xd1\x36\x1e)" "\xda\xcf\x39\xa3\xa3\x02\xc5'\x35\x10\xf9\x93\x02\xda\x1d\xe6-\x43\x90-\x64\x08s\xd5\xd8,\xb4U|\xf5\xfb\xc1\x1b\x8c\xf2\xdb\xc9Q\xc1S" "\xb8\xcfQ\xc1\xd3\xc9\xca\xd9\xc8\x45O\x63\x11\xb1:\n\x91\xaf\x34:~\xd5Mo[H\xfc\xa8p\xbc\xde\xba\xa2\xc8\x8b\x15\xa4\x41\xfe\xa1" "\xf8\t\x9e\xed\xc9\x45\xc3\x15\xceN\x92\xde\x11vO{\xb2\xc2\x88\xcf\x18\xbe\xe6.\x01M\x8c+\xaf\x10/_\xc0\xf2\x66\x87\x03\xb4\x8d\x18" "lP\x44\xab\xf0\x01\xa4\x7f\x14\x82\x86\xe1\xae\x95\x61\xbc\xb7\x92w\xa1&(g\x07q\xad\xca\xe0)X\?\x85\x37$\x11\xfd\xea\x1d\xba\x66" "\x31\x31\x44U\x9d\xfa\x95\xe2\xeb\xe1\xdf\xbc\x02\xff\x34l\x8eT\xc3\xcd\xa4'\x94\xac\xe6X|\xd4\xe0Q\x88\xd9\x03\x13\x1e\x95\xb1:_V" "[\x1c\xdb\xa1\xa0Z'\xbc\xfb\xfek\xc8\x0e\xfdo\xa7\x1e\xc8\xe3\x9a\xb4^\xb9\xc3\xf8\xf3\t>\x62$`S\xfet\xd6\xfb\x90y\xe7\xfd" "}\x8d\xe1\xfc\x13\xa7\x00\x9e\xb0\xca\x18\x62\x44\x8d\xf7\xfayL\xfd\xcd\x9a\xf7P\xe1\xe4\x93-\xf0S\x34=v\x86\x9fO\xaf\x43Z`x" "\xfa\xc4\x19\x80'\xf8\xc4\x0cW^\x30\x16\x8by\xc8}\xcb\x9c\xfa<|\xcaG\xd3\xc7p\xbd\x65.\xa9\xf7\xa4:\x91\x42&\x65>$\x07" "k\x82h\x05=\xde\xaa\xc6\xbb\x9f\xfe#\x38\xc0\xa9\x84\xa4\x88s\xe7\xf2\x03\xbf\xb3h\x38\xfa\xcb\x45O\xa6\x38\xf7\xe3\xd7W\x91\xef_:" "\xd0\xeaGj\xb7\x92\xd1`:\x16\x34;\x0e\xd3\x34\xdd\x35\xba_\xa0\x16\xaaG\x9c\x39$\x34\xe3\xbc\x10\xcb\xe3\xb9\x13.s\x45<\xe9\x80" "\x45^\xdf\xa6\xb4\x42\xc4\xd1\x0b|R\x03U\xdb\xce\xe3)-\x01\x92\x42j\x9f\x36\x19\xf9\x8b\x86\x93\?\xe5\x43\x34\x1e\xff}\xab\x08K\xae" "\xea\xf1h\xb6\t\x43>\x8a\xef\x1e\xe0\x18R\xc4\xfbR\x88k\xe9\x36|\xb1\xb2\x45\x96\xc9*\xf9\xa6\x35\xf9\xf4%\xa4\x61\xe5\xcd\x0b\x0e\xf6" "\xa5\x1b\xd5\x9a\x19\x33\x10\xaa\x05\xb1\x89J\x31~k\xc2\xfb\x87\x88\xbd\x8e\x33\xdc\xba\xa7\x07\x8bxm\x46\x8d\xd5\x08\x34\xd8\xa4\x99\x96\xf9@" "\xc6\xbci\xda\xf4\x42M\xec\xf7\xe0\xb3@\x97\xb7\x7f~\x97]\x8a\x13\xbf\xbd\x88\xd1" "p\t\xb1\xc9\xab\xb7\xd0\xb4\xe8Qo\x05J\x00\xe6\x18\x95\xe1\x06\x1fo\xe0'\x9fy\xf4l\xd9\x93)\x33\xe6\x0f\xc6L\xc4\x31" "\x7f\x35\x61\xa4'\x9fN\x1dM\xc0`\x42\x35\x36\xc3\x14\xbd\x8a\x8c&+\x1d\xf9>\xf1\x35N\x99\x85`\x90\x31\xe4\x12\xbd\xf5\x1e=\x37\x89" "\xe8\x11]L$\xbf\x42\\\x05\x46g\xe3P\xd6\x44\x9b_g\xb4\x64\xfa\xc6\x45\\s\xdc\x32\xe0+X!_\xe8\x61\xb1\xa8\xe4\x87\xf1\x39" "\xa2\x07\x63k\xe5\xca\xe9w\x37\xdb.\x17'\xceL\xe9Q\xcf\xd6\xdb<%\x17\xda~\xc9_\xadj\x07\xe5 \x62\xf2\xdd\x44\x8c\xa4(j" "\xa7\x82\xb5\x8f\x06x!\xdf\x13\x8c\xf8\x84\x35" "T\\\xb0\xe0S\xf2\xd1\x1ah\xc4\xe2\x16r\xb8n<\\\xa0\xd2\x89\x1f\x91'\xe2\xee\x02\xec\xa1\x39\x84\x43m\xe1\xa0I\x0e\x9cq\xfe\x66" "\x8d\xe5\xe8\xa1\xb7\x80\xf1G\xdd\t\xef\x81\xba\xf0\xce\xa7\x1b\xd5\xc0/>\xe2\xf8\xd9\xe9m=\r\x84\x84%\x1a\xd7\x0c\xe3\x39\x92\x95\x43h" "\xa5m\x0f\x41\xa1\x85\x0f\x18%\xee\x05\x0f\xaa\x46\xa9\x9f\xe1\x1b\x33\xa3\x45\xa7;!\x80yK\x44\xdd\x8d\x8a\xb9\x65\xd5\xd2\xdd\x45\x10\x83\x45" "\xc0\x90\xab\xae\x43\x7f\xe1\xb4\x61\x19&\x30\xc8Rr\xa2\x7f\xe8\x31W\xfbr\x96\x42\x15\xd9\x18\xa9\x88\x91\xae\x8a\xea>\xc5#\xe2Z\x94\xbf" "\xc3\xf1\xa0\x08\x43\xef\x0c\x62\x97\x8b}\xaa\x05\xcf-\x19\xed\xefO\xb3\xde\\\x32\x01iw'\xfe\xcaG\x85W.\x9d\xdb'\xedmv\xe5" "L\xeb\x9eg~\x85T\xd0K\xff\xfb\xab\x8du\xd0p\x13\x95\x03\xce\x9a\x9a\xb8(\xc0s\x88iQ\xf5\xcc\xf3\xe3\x9fx\xa9\xc8Y\x0b\xd3" "X\x0cm\x36\x66;\x88Rtv\xf7]S\xeb\xad\xd6nt\xf0\xa9\xdeZ\xfa\x8c\xf8\x65\xc5\xc9I\x99!\xf6\xd8\x19\xc3\x9dok\xce\xf8" "k;\x1e\x32\xfaw|\xadw|K%\xc6\xba\xcc\xd4\xc7\xe4\xff\x90\x8b\xddJ\xec\x9e\x35\x91\xe3\x90\x61\xd2\xdev\x86\xd7\x9dI\xd8\xf6v" "x\x1e\x11\xfdM>\x30^\xdd\xba\x33l}T\xad\x43\x0e\x9cp\xe6\x1c\x8cX\x86\t\xd6\xc3\x86\\o\x1f\xe2\xb4\x08\xe5\x93\x93\xbd\xf2!" "\x97\xe0\x95^\xdd'\x1fKx\xcb\x13\x91\xbd\x35u\xd4\xce\x46\xc8\xdb\x94\x64\x86j\x03\xee\xfd\x8cq\xee.\xb9~\x08\xda\xd5\xca+\xa8\xa0" "\x85\x17\xbc\x38\xd7\xe3.\x16|\xabK\x14\tu\x04\xdbyN\x0b\x17\xae\xa5\xf7x\x9et\xa7\xe3\xf4x{\x91\xc4!\xe3J\xb4\xf1\xe9\x41" "\xc5\x99>\xba\xad\xdd\x10&\xf7\xc6\xe4\x34\x9f\x16\x9f\xd3\xb3'\x0f\xc8jX\xda\x1f\xe2\xec&!\xd6\"\x86^\x17\t\xbdR\xd3\xa5\xcbO" "\x64\x08\xb9\x8f>\xcc\n\xcfJ\xb3\x39\xa5\x36\xc6\xdfxI\x34\x0e\x18z\xfb\x97~\x9c\x38\xa3\xe2]\xba\xda\x0e\x1aS(\x1d\xb5\xc8'\xe7" "\xef\xa2\xc2\x41\xbdj\xc1\xf9\x13\xb4M)W\x8doR\xc5\xccw\x36\x45J\x35\xe6U\x15\x65X\?k\xff\xd5\xc2#[@\x46\xd3\x95\xdb" "\xfa\x43\xd0j{\x32\xc0wM\xf2\xbd\xf4\xeb=\xeb\xeb\x9evV\x0c\xe9\x17\xea\xe6T\xaa\xe9<:+\xf0\x63+=\xcb-|\xc5k\r" "!W\x36\x87\xf0\x44/\xc4t\xd5\x10\xe7\xda\x0b\x31\x65\xad\xf4Jz}\x89\x02\xb5\xbez\xc4\xb9\x33\"\xde\xf2\x06\xf7\xe8\xa2\xaf\xcb\x81\xde" "\xa3W\xb1\x12\xc4p\xdb\xca\xa1\xd3\xc7Q*\xb2\xf4\xaa\x07\n\xffy%tG z\xf2\x06/\x15\x10\xc7\x9b\xefL\x8b\\/Q\xcd[" "\x41\x15\xed(\x99\xcc\x37\x93\xdd\x9cw\x9b\x44\xe3\\\xa2\x8a\xfa\x19K\xa5j\xad=X\xc8\xab=Z\xcb\x89*\x39>}\x08n\xb4\x11\xcc" "\x8e\xa7z\xd3\?\xedr\r\xc0\xb4\?\xa3Y\r\x90\x11 \x07\"\xa6\x8d\x82\xf8q\xb4\xbe/\x04m\xfc,\x91\xf4\xcc!\x01\xc9\xf6I\xcc" "\x41\xb2j\x9b[g\xfa'\xaa\x95\xbf\xbdu\xa6\xc9\xc8\x90\x46\"J\xda\x38\rq\x30L\x65\xca\x16\x93g\xdaW\xa6\x1c\xfcM\x39\x0f\x35" "\x85_\x00!^\x8b\x32\x9a^\xc5[\x0f\xd0`T\x35\x8d\x30=\xa1\x94\xae\x93\x1e\xe9\x80^\"\xb7\xdf\t\x31\xae\x99\xb2uU\x66/\x83" "z\x87\x9eX\x85s\xfc\x8a]\xbc)M(\xa6\xec}M\xe1\xa9\xb5\x32\x65s\x33M\xee\x17 \xeatnp\xacL\x39\xd4P\xb2\xa3\x36" "\x65\xe3\x35\xc5\xfe\xda\xca\x94\xe5i\xca!\xf4\x94]\xc3)_\xf8t\xdd:\x07m\xa7M\xf5\x10'H)\x0bN\xd4\x96*\x9e\x92S\xd0" "\x66\xa2\x84\xe6\x81P\xb8\xac\x1a\xb1m^\x98; o\x41\x1b(\x0bO\xb6\x9c\xe8\x16\x8bh\x36\xb1\xc2\"\xbf*\xd5Z\x7fJq\x00\x9a" "\x07\t\xa1\x1d\x0e\xa7\xac\x81\?}\xf2\x03\x34O\xb8U\x9e\x86\xa3<\x02\x0b\xf8\x1e\x46\n\x42\xf3\"/\x34\x93Y\xa1\x8d\t\x84\xb7\r\xf2" "\x01\x33\xb8\"Vx\x89\xca\x0bh\x9d\x63\x63\xb0\x32\x15\xed\x63\tN\xf0\x98\xe8:\n\xad\xdaU\x0e\x9d(=*\xbe\x83\xe5\x31\xd8\xe5W" "zGN\x0c\x35L\xf4\xc4\x42#j\x94\x87\x44\?\xa4z\xe8o)m\x36\x9d\xd8Vk\xa2\xffV\x44\xb8\x37p\xcd\x93Y\x45k^\x44" "l\xe1\xbd\x62\xc2R\xd8\xc7\x83\xa1\x35Q\xf2\xf3%\xc2\xd7\xdbxPx\xac\x14V\xf0~\xd7M-r\xd5\x63\xe4~#JY\xf5\x18\xc6" " \xd5\x63T\xb3\xd5<|\xc4VO\xd6\xe3\xban\xb9\xb6\xf9\xc1j\x01\xd3\x18\x42\x9bT\xad\x16\xe2\xedo\xcd\x8e\xb6]\xb4\xca%\xc5j" "!\x99\?\xa3\x0bY=\xfd\x9d^\xeb\xbcR\xf9\xde\x34\x14u\xe3\xaf\x8dS\x45T\xbb\xce\x39\x44\x33\xb8U\xfe\x38\xc3!\xc4\xa6\x45\x9dR" "\x9a+\x43\xabOp\x06\xa6\x88\xcd\xabh\xbc\x9b\xaej\x7f\x35\x19p\xa3\x33\x91\t\xc3\xe4\x99\x07H;\x84\x85y\th\xe7@=\xc0\x32" "+&\x95mhH\xb1\xd3h|\x1d\xee\xbb\xfcq\x31\xbe;\x00Gx\x12\x35\xd4\x9c\x0f\xd0\x42\x65\x34;/n\x86%\x9d\xeai\xba\xf3" "\xec\xf4tIGU\xec.s\xf1wY\x8c\xf6.~g\x97\x30\x93\xad\xca\xc0\xb2\x02\x93\x0b\x11\xad\x13.\x34\xf7\xa3\xca\xbcS\nk\xf4" "\xb0\xd8\x04L\x9d\x99\xaf\x85\xf3{\x44<\xd9g\x0c\x8a:\t\x65S\x31*\x96\xc1k\xdc\x07\x93#\xd5\"&\x63\x84\xfdox\x63\x16q" "\xcc\x0b\xd9\x1c\x82\x31\xa9\xcc]\x84\xf7\xffj\x91\x39\xbe\x18\x9b\x0b\x7f\xa1\x39m\x15Z{T-&\x37\x0b\xb0\x84\x1b\xe0\xb0\xa1j\x31\xdd" "[\xa2+-\x62\x19\x91\xc7\xf4\xa5\x11\xc3i\x11\xadK&\x1c!\xba\xf0\xbd`\xf4_\xaf\xb7\x8aNO\x34\x11\xf5N\x33\xfc\x16\xab\xb5\xd5" "\x33\x34QU\x1a\x12(\x0bQm\x07&<\xd0\xfaGp\x9c\x65Z|\x35\xc1|^\xd0\xcc\x15\x99i\xc9\xcb\x43\xf8\x1d\xeey\xc6\xac\xaf" "\x94\x81\x1a\x8e\x39Q\xedU\r`m\xb6G\xb4\xd9\x43\xb4\xdc\x8f\xed\x94\xe0\xa0\r\xee\xa1\xd9r\x91p\xc1{.W\xacW\xce\xa2\xad\x0b" "\xd0,\x1c\x85v\x1e\xb0\xf0\xe0G\x9a#x'\x16\xcd\xcc\x06\x84\x36\xadS\xe5\x8e\x1b!j\xb6\xb3\xa8\xd0u\xda\xb3n\xff\xd1\x8e\xa0\x9d" "^;\xa3\xda+\xc4\"\x7f^\x1c:\xc3y\xe7\xa2\xc9\xa8x\xfa\n\x37\xe3\xa6\xa9\x8f\xa9\xd1s\x46\xc3\x0c\x9bj\xe7$\xa3q\xbe\x05^" "#\xfd\xe0\x14WX\xe1\x43\xeb\x44\xf1\x41\xfa\xb5\x0b\xcdl\xf1\x85\x1e\xab\x16\xef\xd1\xe1\xd5:\xefN\xdd\xaco\xbe\xdfMK\x8f\x06p%" ")\xda\xc3\x02\x34\xf7$\x42\xf3h\xaa\x44\xca\xc3\xa2\xde\x98T\xf2\x32\xac\x81\xcf\x63\x0b\x90W\xfa\x37\x00\xbb]\x44\x64\x86\x89\xa6{\xe0\x92" "\x8f\xb5\xdc'\xf1\x93xk\xcb\x0cjp\x8b\xd8N*\x13\xdap@x\x45\x1d\x8d\xa5\x32\x1e_\x61\xc2\xbc\xaa\xa7\x18K\?\x08\xfb'\x44" "\xab\xe4\x9c,\xea\">%=\xbc\x02\xd8^\xfa\x80\xdd\x08\xdbv\x13\xc3\xe1\\\xd0\xcc\x13\x86\x89\xe8\xe8\x8b\xd8\x41\xb4\xb1\x66+\xfc\x62\xf8" "\x0c\xe9\x8f\xe9\x14\x61\xb1\xe7\xc4\xc6\x37\x11K{\xac\x93\xce\xe0\x93T\xf8\x80w\x99\xa9\x45\x18\x16\?\xfd`\x05!\x1a\xc0\x33t\x96\xabg\xd8\xb1" "!l\xd7<\xef\xaf_\xce\xc9'g\xf2P\x83\xf1\x61\x46Kn\xad\xee\x38g\x65v\xce\x17z.\xcd\x15h\xbdy\xa1y@\x17\xa2q" "\x17\x9eK+\xc9\x86\xf2\x9c\xd9\xf2\x1c\xe7I\xcaG(\xd2\xe7\x31\xb2\xc5\x39&\x14\xed'\xc6\x04\xe9\x7f\x8e\x19\x91\xeayzq\x1f\xe7%" "RVr\xce\xf9\xf6\xce\x31\xc0\x14\"\xfc\x16\xb3q\xd5[\x36rJ=\x8clP\x86v\x30\x04\xab\xf8\x36\x0e\x43\x13\xda\xf2\x42\x95[\xa5" "\xab\xb7\xc9~\x07\xb4y\x41#\xa6\n\x45\x9c\xe1\x06X\x00\x34\xfa\xb7\xb0\xd5\x45h;\xf2\xaa\xb7,T%\xcd\xc2\xc5\x01\x96\x04\xaa\\+" "\x34\xea\xfb\xed\xce\\\x83)j\xb5\x84m\x90\xc6\xe8\xec\x11\xeel\x44+O\x9dl\\UL\xb7\xce\xd8\xc3-\xa9\xd3\xef\x9fw\x1c\xd2*" "\x9aM^\x19\xe3\xf1>\x96\x8a\x45{\xdcq&\xed\x33\xec\x04\x31\r\xdb\x00\x45\x44\xed\xa7\x8c>n\xd9\xea\x94X\x17*\x33QV\xd3\x07" "\x8fI\xbf\x06\x0e\xe7R}\xb0S_\x62\xdf\xbc\x84\x01\x97Q\x93\xe2=\xe7Z\xbcW\xc4\xf4\xa0h\xab\x82\xd3No\xb6V\xbc\x14\xe7\xf0" "]\x38i\x16\xe6/\xc0\x93m\xa7\xae\xf9\x9e\xce\x36Z!>\xcc\x65\x35\xdb\xb4\x61Z\x38O\x0e\xda\xff:i\xce>Q\xeb\n\x94:\xd1" "\x06N\x7f;\x31:\xd1%XZ\x0bQ\xb5*\x7fg\xdb.\x62mK\xc4\x81\x15\r\x1e\x9em\xf4TI\xae\xd4\xebS\xb4\xff\x05\x8d\xef" "\"i\xbe\x81\x18\x8c\x94p\x1c\x83\x30\xff\xe8\x8c\n\x97\xec\xc4\x94R\x94\x19\x65&\x65\xa1\xf9\x93\xaf\xeb]\xe7&\x65\xcb\xf2\x97,\xce\x12" "[t\xae\x96Y\x36\xcb,\x93\x65\xa9!\xf5z\xe8#T\x31\xbc\x16\xda\x32\x9fr\x01\xe2WU\x18\x45T\xb9\x03\xb1\xca\xed}\xca)h" ";\r\xaau\x96\x32nR\xab\xd6\xd3\x13\x8bK\x83]\xaf\x06\xcbn\x03\xd3\xa5\x42\\\x87\x87\xd4T\x1b\xac\xb6\x1a\xd8\xb9%\xb4\xdd~\x42" "\xd4t\x8d\xf4\x44m\xa0\xe3)\x35\xd4\xd7\r\xec\x81\x17\xda\x8e\xabj\x93Wm\xb2\xec\x37\x19+%\x07HM\xbe\xa2&\x0bv\x93\x83\xc7" "&\xd6\xef\xabMV>\xcd\x35\x06\x9b\x9d\x04M@G'\x0eQ\xef<\xfe.\x9e\x39&x\xc4\xce\x03#\xdf\xb6\x8a\xac\x96U\x0c\x33," "\xea\x8b\xa2\xc4\x81\xc6\x63\x64\xbb{\x8c\xba\xef\xe1\x66\xeb\xaf\x86\xb3\x41%\xa0\xca\xeb`\xec\xf4\x18o\xe1\x8b\xf1\x11\"\x12\x37\xcf\xe5\x07\x1c" "\xfc<\xc2O\xb8Q\x1a\x90\xd8\x36\xc5\x98\xa6\x13+\xf9\x07h\xb6\x61_h\xf3\x1e\xc6\xdf\xd9i\xd4\xa7\x66\x16\x9c\x42\xdbx[}Lw" "\xc7\xa0\xf9\xd8\x30\xca\xc0\x05\xa6\x83\xa2\x99\x85\xb7\xf0\t\xb1J\x07%\xa7\x0c\xbb\xd9\x1d\xa2\x06\xb7\x04\xaa\xe1\x0e\x30\x8b\x11\xde\xe7\x9ci\xf3" "\x07;\x1b\x44\xab\x18\x9f\x98\xe0\x9c\x15\xaf>G\xf5\x12(\xe3]\xb3\xa2\xad>\xe3\x0c\xac\xea\x0b\xb6pV_\xe0\?\xdd\x08\xef\xc1\xd5\x01" "\\\xf4W\x07\xbc\xca\x00{#\xab\x03\xb8N\x11>\xe1{I\xc3\xaa\xf8O\xf6\xf3\?\x31\x43)\xc3\xd5\x9a}\xdfG\x89s\x1c\x43^\xdb" "\x41\xd6\x16Z\xd6\x96q\x45\xe1\x1d\xac\xe1s\xb3\x15\xe5:\x90i\xd1|\x90\x9aw#\xd3\x64t\x8d\xa1\xa3h\x43\xfe\xd2\x62\xa6\xbcs\x46" "goXq\x15\xcd\xceI\x16Z\x0e\x16\xae\xf0m\xe9\x8bh\xbf\xd9\xac\xb9\x44\xdb\xab\x83Gy\xa7\xf5\x90n\xa1\xe5\xdf\x45\xc3\x02\x80h" "'\x88ilk(\x46\x35&\x32\xcb\x1f\xd1|+\xb8\x88\xd5\xa7\xd8*\x31\x11\x9d\xbd\x99\x33>i\xc7G\xa7\xd0>\xdb\xe4\x0b\xf8}\xea" "\xfc\x1d\x1f\x45\xc3\xa9k\xf1\xdbG|~\x97\xd5\x66\xb8+\xbc\x00\x08-\x87\n\xcb#gtq\x92\xd4{\xe9OU{\x44g\x8b\xd0\xd9" "\xc1\x87\x93Ou\xd4\xc3\x08K\x00\xda/\x88g\x95\xc4&\xeeM\xcb|\xe7\x7f]\x08\xf3w\"\xfa\xd7\xa6+\xecI\xaf\xed\xc0I\xa2\x92" "\xba\xadi*O\xc0\x63\x1e&\"\x62\xfb::\xe3\x84\x82h\x03\\\xd3/\x84\xb9\x43\xe1\x05\xb2\x0e\x36\xa5\n\xed@\x36\xe1\xab\xd6\xba\xb5" "\xdd\xa8\xb2t\xa2\xc2\x85h{\x8f!\xba\?\x1dh\x66\x17\x65\"|=\x98\x98\\}\xe1\\\x39h\xe6\x93\x00\xa2\xed\x44\x30\x31\xbd\x0f\x37" "L[\xf9 Z=\x66\xa2\x9eHg\xe5\xa8\xb6\x07\xebx\xf3\x1f\xe7\xfc\x9d\xd1M\t\xbc\xca\xe5\x9e\xe1R\xc2\xb4`[\x05\xaf\xd0\xd6\x87" "\x87\x38z\x8e\n\x37\x41\x33/\xab\xc1@)\xe3\x42\xfa\xaf\x16\x96\xe4%\xccV\xb0kry\xe3\x41T\xfd\x06\xeb\x96\x65\x0e\xd6\x36s^" "\xcb\xc3;\x87\xd0\x16\xa8\x85(\x38\xc2\xd7\xf5\xedK\xda\x1f\x46\xab\x03\x16\xe2<\x1cq(W\xe0\x9b\xbd\x01\x1e@)\xbc\xc2\xb5\x12\xab$" "j\xac\xeakyt\xb2j\x17\xe8\xca\xd5.\xb0\xb4,\xb4J\xa5v\xb1.Y\xa2]\xb2\xd2\xb8\x64\x1c\xca\x98\xa2\xa8\x95\xd1\xbf\xae\xb1\xb5" "\xaeU#;\xa1\xa8\xd6\xa4\xde\x8a\xcd\xa5L\x8d\x8eKj\xad\xf5\xdd\x0e\x88\xdc\xcaM\x61\x35\xee\xd3\xa9=\xc2\x16\xcf\x18\xfduL\x8e\x30" "[\x36\xac=\x62\xc0)\xb4\xd6Qh\x87\xb6\xd6\x1e\xe3\xfc%\xd8\xb7\x17\xf4\x88\xd5\xbf\xda\x33\xfc\xfd\x08\xa7V\xbe_\x19}\x65\xb0\xf3\x11" "m\x66%\xfb\x35\xb2\x45$\xa1\x1d\xa9+\xb4\x81\xac\x10\x0f\xf5\x8a\x95\x0f!\xea\xbdW\xb4s\x42\x1b\x8c\x18\xd1\x04\xa8h\xb9\xe2\x15\xe3\x66" "\xa1U\xde\xc2\nn\xc9\xf7\xf5\x1a\xd7\xbe\x41\xbc\xb7W\xf8\xd2\xa9\xbd\xb2Zy\x65\xfa\xbd\xa2g-,#\xaa\x18\xc0\xd6^Y%\xbf\x62" "\xe4(\xb4\x05L#\xbaq\"\xda\xc1\x31\xca\x37\xd0\x66u\x85\x1d\x86[\x97\xa5\xf6\x8au\x31\xe1\xab\xdd\x82\x87H\xd5\xfa\x98\?\xaa\xf5\x31" "\xbf\"\xb4\xc1]\xad\x8f\xf9\xb4\xda\x18\xa9S\xdf!wu/\xa2m/u\xf1\xff\xec\xce\xe2z\x31].\xe0\xfbJ\x82\xa5\xc0\xf9>W" "\xd1\x8e\x1b\xe9\xea%Yv\x42\x80u<\x92[\x19$_ \xa0x\xfc;\xde\x8d+\xb9\xe0:\x01\x61\x36\xf6\x33\x31*v\xd4\x42\xcb\x96" "\xd1\xfe\x06\xa0\x00[\x18\xb6T\x43\xb4\xad\xd4*\xde\x83\xe5\xc6\xbaR\x80\xdd\x88h\xcd+\xb2\xf6\xbb\xda\x8b\x07W\xe8\xb2\xfc\r\x08W\xeb" "\xbc\xea\x34\xab\x8d\xfd\x44{xH\x16\xb7\xd8\xb1\x85\xdd~\x85[\x9d\xb1\xcd\x04tJ\x98\x36\x80\x36\xbe\x46UoZ\\\xe1\xb0/\xa3%" "\xd3\x0f\x38!\xb1\xb0\xe4\xb1\x88m\xf9\xd0lW\xad\xa6\xef}_\x97\x1e%Qs\xcf\xfe!\\\xea\xb9\xa8\x36lg\x07\xc8\x13\x12\xf6\xce" "T\x19\xef\x62\xf9\xdc\x45X\xbd\x8a\x36\xbf\xc5yS\"\xda\xf6X\xa3\xdcI\xfd\x18\xe6\x9e\x93\x62/\x13,o\x30#jtn\x06\xd8_" "\x96\tKr\xef\xbf\xf3G\x11\x30S\x66\x9f\xc8\x38Z\x02t\x9f\xb5\xf5K=\xcc\xef,\xb9@\xb2\x8f$\xba\xf4\x1a=\x05\x35g\x30\x01" "`\x80k\x0c\x9f\x8a\xf8\xf1\x99\\_\xe9\xae\xce\xa3\t\xbe\x8c\xc9\?\xfb\x30=\xd9\xdf|u\xa0\xde\xc0;\xa5\x8c\x96yu\xb8@t\x99" "\x83\x31\xac\x07\xc8;\x81\xd6\x98\xeb\x1b\x32\x33\x42\xd1\xda}'\xb6Q\x9b\x98L\?\xd3\xafWh\xdf\xfb\xeb\xbbU\xb8\xb6k\xa8\x96\xea\xbb" "\x1a\xc9\xe9'\x1c\xe0#\xe0\xec\x33z\xaa@\x94\x04\x1f\"\?\xa6\xc5\x0f}\x99\x97\xdb\x9e\x41\xd3k\xdc_\xcaOTh\xa2\xc3\x97\xd1\xfc" "\xf2\x92\x39\x99\xb5\x0f\x63\xab\x0c\x8c\xa8\x43\xebyT\xf1\x42kn\xeay\x0cy\x84\x07\x1d\xd0\xcc\x42\xea<\x06RhU\x98\xb0\xf3\x1co" "=\x61\x08\xa3\xda\xc8\x19|\t\x9a\xa6\xa3\xc4\x89\xa5I^\xbe\x0e\xbe\xe3\x37\xf1\x87\xe5\x84<*\x33\xa1u\x61\x8c\xc9\xcd-\x66\x05\x45\x33" ";\x9fz\x1e\x9e\x13\x8c,\xd4y\x18\x64\x08m\x61\xaa\x9e\xc7\xc1\x16\x46\xec>\xab\x9f\xf2\xe9\x94\xba]\xca|\\\xaaV\xe1\xe3\x9f\x62q" "\xde\x98\t\x8a\xcd\xe5\x8a\x8a\x33\xd0:\xe7\x42kw\xeb\xa7\x38K\xc1\xe8\xbf\x12\x11\xf3Z\"\xda,\x94\xf0\xe4\x36|*\xe2\xf2\x0cS\xa4" "\xaa\x31\xd4\xb6\x04\x08m\x9a\xd5\x18>\xb2\xeaWX\xa6n\x63\x44%\xc3\xebu\xf8{\x10\xb1Q#\x11I\x38y\x31\x62\x19Z\x44\x9b\x83" "Q^\x83\x1e\x8e\xd7\xa6\x0bM,\xfa\x14\x43\x34\xac\xe5\x35\xb2\xbe\x35q)\x9d\xda\x9b\xe4\xf6\xd0\x03\x30>\xa7\x38\x85].\x34\xd4\xc9&" "\xba\x17\x0c\xd3\xd4R\x0e\x15\xbei\x66\x32\x9c\x36O\xd4\xc2\xe7\xa8\xab\x0e\x65\xcd\xf4\xc1>\x0c~x\xa0\x8d^\x33\x97\x41\x33\x8e\xb5\t\x0b" "\xc0L\x97\x88\x66\x89*\x9c\xf1\x8d\xcd\xa6\xcepi\xf3}&\\ \xf5Y\xf7\x9e\x62P/\x34\x43\x45#\x8e\xb9\x13\xd1\xe6\xb4\x84L\xac" "x\xa5\x43\x10\xd8|\xd4O\x93\xfcY\xd2Y\x62\xd1L\xb4>^\x07V\xce\x8c\x9e\xaa\xea\xc6\x94Q\x86\xcf\r\xdf\x0c\xa8\x44~\x64\x8br" "j\xcb\x85\xf8\x15,V\x84\xcc\x66\x42Ow\x88\xe1\x84&\t\xb0\x8e\xbd\x31\xea\xbc\x63g{\x46\x8b\xfb\xda\x0c\xca\xd3\xc0\xe9\x86|rw" "O~\x90\x9fN\x8f\xf4\xba\x64\x15@\x11\xfd\xd5\xfa\x15\xfa\x84\x46\x16\x8f\xab\xa4|\xe6\xf4 >\x87\x92\xf1\xae\xb3&Q\xc6\xc7\xad\xf8\xf3" ")h\x95\x82\x1e\x41t\xbf\t\xf8\xe4VT\xd1\x90\x63\xeb\xda~J\x03T:\xc4\xae\xabP\n\x1a\xcc\xca\x9d\x0c\x19\x87\x11\x46\xdf\xf5\t" "<\x93\xd6'\xd1\xfe\xcc\xa9&\x9f\xb6\x39\xc6\x34L+\x99\x18\x8e\x02\x80\xf6\x1d\xc4\xa4\xb4\n\x62\xb9\x8f\x65\x0c\xd3X+M\xa2\xfc\x05{" ":\x13\xbf\xb1_\x97\x39l\x12wpK\xbf\x03\xb6\xa9\x1b\xc3\xe6\x63\xd3\xe4\x87\xac\x61U\x93\x38\xa1\xc3o\x1a\x96\x38\xea\xf4(\x81N\x95" "\x06L\xb1\xa5Y\x88:\x90\x87\xfe)\x7f@T\x62S\xd8g\x08\xcdY\xb4\x11\xfds\x11\x8f\x1b\xecJL\xa3\x62\x1e\xb4\xb3\xac\x8d\xba\xfb" "\xc5\x1c'\x99\xa6\xcb\xbev\x1e\x35\x34\xf7/\t\xad\x16~\xcc\x9a\xc0\x44w\x9e\x04mz\xe9\x62,}\x36[\x30\x83\x66\x9b\x18\x83v\x35" "\x81\x91\x18\xb4\xfa\x65z\xf4\xa1G\x1b\xcdw\"\xdbZ\x8e\xe0\x0f\xf5g\xee\x1a\xce\xb1\x80\xf8\xb2-\xf1\x0c\x9a\xd9\t\xa9\xc8\xc7\x45\x1a+" "\x31\xc3h\x62\xbc}\x16om\xdc\x66[\xd8_M\x1d\xe4/\x9b\xd0\xfcwh\x39\xa6\xecYL\xd9x+\xd9q\x99\x66\xa7\xa6\x45{\xdf" "q\xc2\xed\xb7\x88\x1fL\xfa\xf1.s\x92\x88'i\xff\xe7wr\x02\r-\xea\x14s\x1f\x42\x9b\xe3R^;\xa5V\x84!\x82iX=" "I\x8f\xa5>\xbe\x8f\x0b\xf5\xdfy'|\x32;Hwk\xc9=/<}\x64\x1f\x64\x8a!\x8c\x10\x15'O)\x14\xe6\x8f\xd6\xf5Gl" "\xe1\x12\x8dO!\xc4\x94\x8e\x88\xb7\xc8n\x18\xeb\xd4y\xae\xa0\x11\xe3/LtK!>=\x0c\x9a\xad\x05\x43t\x87\xf3\x7f\xe7\xc3]\xc3" "\xfc\x01\x34\?N\x02Z\xa7\xa4\x07#u\xd5t\xc3\xb3\xb1\x06\xbb\xf3Gj\xa5\xec\x05~\x1eph\x37\x34\xdb\x35\xec\x1a\xe6\x63 \xdeL" "\xb0\xad\x0c\xda\xe3N\xb4\xfa\n\x1az)*\xc2\x18\r\xa2\xb4\x65\xfdi\xd0\xae\xbe\xd2\xc2O\xd0\xea\xe5\xa4\x1cn\x93|\\p\xe0\x64\x1a" "\xce\x13\x91\xf6n\x99\xf7\x30I\xd6\xf8=$T\xfa\x33`\x37I\x35\xf6\xf1M\xacl\xc1NG\xb4*\xbfP\xa3\xde<\xd7\xf2<\x9cS" "\x43\xe6\nG\xaf\x88\xf8\xc9\xe4\xfa\xc2]\xfdI\x30\x99,\xac\xb6\x9dQ\xc6\xe1\x11\x02\xea\xa7\x41\x34\x37\x35&\xc2\xda\xc4\xc5\xbf\x1f\xd8\t" "\x30\xb3\xe0q<\x04\x8f\x96\x19\r\x96\xe2\xd9\xb0\x9b\x61\xb8(\x46\x31\xba\xd3\xd6\xe9\x19K\xc5Y;\x1d\xb6\\\x8bN\x66^\xf1\xa8\xe6\xa7" "Y\x98\xe6\xafX\xc5P\xdb\xab\x96y}\xaa\xb9\xd1:\x34\?\xd0\xc0\x34\xc9\x30\xb1\xd9\x8f@\x1b,]\\o\xd5={\xabv\xdb_\xb7" "P\xfb\xc0\x64O\xc8\xb7\xc8\xe6k\n\x37\x8a\xc2=\xc4\x0fN\xae\x84\xb6\xedSy\xe6\xaf\t\xf6W\x46\x18*\x8bh\xd3\xd7\xc6\xcd \x66" "\xaa\x9e\x9e\x1as\x8a\x88\x1a\xa6\xf2\xd4\xb9\xfaI\xf4\x33\xf2/\x06\rG@\x62\x33\xb5{\x65\xcf\x9c\xd6\xf0\xd7)\xbbh%\x94%/o" "k\xbe\x19\x18\x13\x36vt\xb8wv\xa4\xddI\x1b-\x36v\xf0\x9e\x84v\x39\xa1\xf9\xadm\xec\x44v\xac\xbbp\x7f\xcf\x19\xcd\xeb\x10\x8b" "W\xe0\xd9Q:\xd8\xf5\x0b\xc1-\x94\xb0\xfa\t\xda\x04\x97\x31\xee\xb5\x63\xdbWn\x9a\xf4\x14\xe4\x0f\x9au!\x84\x0f\xfc\xed\xe3\x04\xec\x1e" "o\xc4\x33\xb0G\xf6[\xa0\x19l\n\xa7x\x30\x8f\x1cl\x0b\xe4.\xfb\x88\xbf\xdfJ\xfb'\x83\x93\xdf\xf1\xc2\x35\x89\x11Z\xb6\xc6N\xba" "u\"\x01\xf0\x0e*\x9a\xe5\x99\xc6\x0e\xfc\xc7\x0b_\xef\xa2\xd9Q\xba\xaa@\xb3\xa5\x8d\xc6\x01\xd6\xb3\x84\xd6\xa4\x0bg\x08\xc7`Mh\xee" "\x65\x85\xeagp\n\xd1\x06\x0c\x46\xad\x9c\xfb\x1eZ\x06{\xdcr\xdb\xa0\x83\xe0\x06\x1d\x04\x0b\xcfp\xed\xf8j\t\xba\xd3\n\x11\x1b\x39\xb0" "\x99K\xca\xb9\xe8\x10\x37\x85\xed\x45\xe3 \xd9;\x06-\x17\x08m\x32Qh{\x0c\x8c\x91T\x9e\xd6\xbe\x98\x86\x16\xc2\x44Lt\x89\xf8\x66" "\t|\x80\xe2 <\xc6o\xd3\xf6\xbe\x7f\x05\x13V\xc2U\xcf\x88\x1e\xa6\xf2\\/\x64\xd3R\xa2\xd9\xb6\x43\xe1\xeb\x9d\xa7\x88\xfa\x8b[\xfe" "\x44\x36\x9f\xd5\x38\x44\x01\x13\x9ag\xdd\xc6\x39\x86\x46\x8d\xeb\xdf\xe9\xf9\xda\x1d\xf3\x37\xae\x99\xc0\xd7\x18\x13\x34\xae\x93+=\x18\x1c\x13\xdf\xa2" "Y\xa3\xdf\xb8\x86\x8b\"#l\x34\x44\xb4\x35\xbf\xc6\x35\xd6\xfa\x1aM^\xb0\x89\x11\x65\x83k~\x46\x9c\xd0\xd0\xe0\xe4\xa9p`\xc9\xd2L" ":Z\x7f\x37:\xf0T\"\xb4\x45#\xa1\x9d\xa2-\xfc\x18\x1bu\xa8\xff\xfe\x99\xe6\x8b\xd0\xa6\xbb\xce\xb4\xb4\r\xb7\xd4\x8d\x0e\xd6\t\x85\xd6" "\xbf\x17\x36\xbf\xf5\xc4\x14[\x45l\xbc\x04\xbb\x46\x11\x07u\xcc\xe7\xb8\x18\x15\x8e\x31P\x93\x00\x9b\xf8\x14\xae,'\xbf`\x65\xd8\xa8\x87R" "\xdaJp\xe3%\x35s_\xe1\xd9\x13\xea\x17\x17\xa3\x9f\x1a\xb4{r\xb9Ll\xebi\x63\x88\x11s\x43\xb7g\x62\x35\xb1\x31L+\x97\xe8" "\x82\x34\xbe\x30\x05)\x34O\xba\x8d/\x1c\x61.<\x92\x11\xd5\x0bZ\x17\xd1\xec s!r\xd5\x97\\\xcb\t#h\x11m\x64\xdc\xf8\x8a" "\xedX(\xa1\x1d\x1a.\xec\xe1\x82X\xfdR\xe2R\xd8#\xd6\xf8\xe2{\xfe\xc2\xf4y\xe3\x0b\xa3\xab\xe6\x1e\xccK\x9a'\x98\x65\x10Z\x44" "\x9b'\x30\x88\x13\xda\x9c\xa9\xd0\x8c\x12\x84\xd6\xb3\x97Q\xae\x99\xac\nm\xfaWh\xd3\x32\xc2\xf6\x17\xb2\xa3\x88\x96\xe1\xdc\xc0\xbcy\x82\xe5" "=\xe1|\xe6\x44~\x91\xc6\xdd\xcc\xee\x84\x36\x18\x34\xc2\xa9\xb4\x88\xd6\xff\xd6u\xd7m#\x9a<\x63\xd8\xfa!Z\x0e\x17\xc2,\xb5\x31\xf8" "\xf4\x81v\xba\x13\x44o\x42\xa1Y\x8e\x30\x11S\xd6\x14s\x41\xbc\xfc\x0e\xa2-\xdb\x41,_l\xc4\xbb \x9a\xb7N\x13\xd3\x9b=\x34m" "\xd0Z\xf9 \x8et\xc5\x0b=\x9c&\rw\x84\x36\xa7\xd8," "\xa0^\x97\x80\x05^\x13Vu\x85V\x95\x19\x93K<\x8a\xfa\x65\x34{o\x17\x83!\xc2\xdf\x00\xd4t\x16\x86\xc1\x18\xc4\xeey\xb8\xe6\xcd" "@\xdf\x8a}\x39\x1e\xe1\xddh\x03\xb9\xfc\x81\xad\x9ah\x35\xbc\x13\x16\xe0+L\x15\x35\xaf\x92m\xa4\?\x96\xe6\x84\xf2\xce\x99\x30\x12K\xdc" "\x05\xda\xe2\xd6\t\xaft\xcd+\xe6\xd1\xab\xd4\xe6\x42\x85\xab\x97\xc8\xb6\xf7\x35\xaf\xd6;mu\xc4\x91{\xfe] \xea:\xdb\x8b\x62\x41\xd1" "#\x00-)\x1f`\xb4+\x01\xb7\xfcZ\x13\x31\xc2\xcaO\xf3:\xaa\xdbs\xdd\xa1\xbd\x11Z{\xd3\xbc\x8b\?\x16\xce\xa8P\x84%\x96h" "\xe6\x80\xb6y\x87\x16[x\xffn\\O\xb4Jo\xd6~\xc7\x87q\xf1\x0c-\x81j\xc7\xa0U\xe5\xcd\x1a\xdaW\xe5\x0fx\xb0o\x63\x95" "+h'\xb7\xe0\xe5\x43\x32\x1b\xf1\x85\xd5P\xc1\x0b\xad\?'\x44=X\x43[\xa7\xcb\x05W\x98X\x35\x11\xa3n\x17\x99\x9bkX=\xd1" "\x37\xbe\x9f\xd7\x84\x36\x17\xa7\xff\xfd\xf0\xe2\x64=;G\x8f%\x13\x8c\x11\x0c\x46O\x99\xe0\xcd\xcf\xa7\xa0u\xa9\xd3\x8b\x1d,\xf8H\xc0\x12" "\xb1R\x8f\xd4\xb9\xe7\xd8\xd6\x44\x45\xbb|\x44\xbfY\xc4[\xa4\n\x36\x9a\x08\xbf\x1e\xb5\x10\x33\xed\x62\xa6\x1d\xfa[\x46\x36\x38\x35\xe4\xa0\xf8" "\xe8NOL\x61\xe2\xa1\xd1\x12\x9a\x97_\xe1\xf4\x93Y\xa1\x06\?\x39\xcaQ\xf0\x13(\xda\xfc%\xfc\xd6\x44]\xb6\x31\xbf\x90\xeb-\xdc\x39" "YmG\x9dwti\x32\x9a<_R\x7fXWkXj\xc9|\x92\xec\xfd\xf3\tl\x11\x8cI\xf9v}\xb9\x0b-w\xe2w\x86\x18" "\x96\x03%\xe0\x1c\x89\x06S\x46!S\x39\x1d\xb5\x41\x34\x90\x35\xf8\xabo\xd6\xd6\xf5G\xc9\xe9X\x7fR\r\xf7[\?\xd8;\xe4\n\xb0\xd0" "N\x8e\x13ZG\xba\xc9\x35_#\xdb\xceW\x66\xcdW\x66\xcd\xd7\xe8\xe0\x1e\xb4mL\xcao\xd0\xfcu\x08m\xb2O\x39\x04\xcd\x14\\\xd8" "\xf8\x02\xad\?\x62\xc4\x14\xa7\x89lsU\x44\x07W\x45\xfe\xd0\xec\xc1\x85=\xdepp\x00\xda\x1c\xaf\x31m>`\x81\xaa\xf9\x1ao\x0f\xc0" "\xdc\x99\xd3\xbf\x88\x9e\xbd\xf0\x18O\xe4\xf7\x64\x37\xe4\x15Vk\x42\x64\xacW\x8f\x08V\x9d\x85\x66\"o\x94\x1b&sj_V\x19q\x81" "\xd9\x08\xc7yz\xf2\xde\xfd\xc2\xc3\xfeh\xb8\x1e\xb6\xab\tm\xc6\xa8\xf9\xba\xb6\xa9%\xe1\x15\xe2\xe5/\x8b\x15\xd2\xeb\xda\xfa\xce\x46\x36\x02" "oH\x64\xdd\xa9\xbd\xef\x44u\xa0\xe2\x17\xe8_\xb1\xd5\x88\xd6\xae\x7f\x8e\xcdt\xad\xdd\xf5\xb6\xd6\xa0\xad#\xac\xa8\xb4.\xf0\xfeZ\x17\xd8" "\r\xde\xba\x44\x8f]\x39\x03\xad\x45k]\xc2.\x41\x88\xeb_\x62p$\xb4\xf2\xa6\xb2Yl\xa1-&\xf9\xe2" "\x92r\xe4\xc4\xb6Y\x88\xe6r\xd5\x44\xa9\x08<*\xc8\x82\xc2\xdb~|;\x80X\x39J\xe6U\xb5\x0e\xae\x1c\xa1z\x90\x30\xeb\xe0\tm" "\xc2\\\xf8\xc9\x9f\x99\x95i\xeb>\x19\xbc\x83\xd6\x65l\xdd\x63\xd6\x44x\xfc\xee\xd4\x8a\x13IH\xcd\xe3\x96\xb6\xef\x41\xdb\x63-\xfc\xb1\xf7" "~\xaf\x93 \x9b\x87Rm\xbe\xa5\xc7\x88X\x18\\\x96K\xb0\xcdt\x18u\x1c\xff\x8a\xa4\x94\xc1{<\xb8\xf6\xc8\xeb\x10^g\xe1\xed\xb3" "\x9a\x1a\x92]\xc8\xb5\x1e\xa9M\x41;\x9c\x44\xd9u\xca\x7fl\xaf\x30-=\xde\x81\xd3^\xd5\xf0\x1b\xd8\xa7(\xe7N\xec\xd5\x17\xd1\\\x18" "\x19\xe3\x9f\x19\x86\xb6\xaa}\x81\x87\xb8Y\x94;&o\xc9\x06\xf9\x0c\x1e\x37\x9c\xe1\x1e\xc7\x8d\xe0\x35\x00\x9aM\xf8\x9a\x88j\x42\xc4\x02\x83" "N\xf3NTp\"Z\xdd(\x34\xe3\x39\x61\x9d\xf1\x95!\x89U\xb3\"\xda\x44\xb9\xb2\xeb\x0c\xbf\xb6.\x84q\x13\x34\"W\xe0\x8ci\x33" "\x0f\x94v\x19\xc3\x1ch\xe5\x16\xec\xe4\xa1\xf9 \xc7\x34\xdb/]\x86\xb6\xb4<-M\x33\xee\x13\x17\x90\xd6q\x11\xf7\xf3\x37#\x94\x37\x03" "\xb3\x1e\xd1\xaes`\x05\xc9\x0f\xfb#\xa3z\xf2\x99^\xc1\xf6\xcd\x02\xb0<\x04q\x1f\x91\xc5\xf4\xa6\xf0g\xe6\xf4\x34\xc5\x82\xbd\x91\xd5\x87" "\x0c\x8cW\x9e\np\x66(\xb4\x8a\xd5\xe8\xc9\x99\x94s$\xde\xb5\xe7\x90\xe4\xa9\xe1\x0c_\x9d~\x82s<\x63\xba\x8d\x97\x84\x9e\x9c\xf0\x10" "\x9f{vJo^\xc0&\?\xb7\xc9\x31#\xe6\xf8U\x1c\x92x\x32\xcc^\nG\?\xa0M\xb7\x0b\x97H\x30\x34\xda\xc6\xa8HG`\xad" "\xdaz\xeb\x88\xc4\x63\xae\xcd\xd1\xa5\x90\xf9X\x18\x15w<'\x62G\xb3\x11\xbb\xda J\x9e\x61\xf9\x11\rs\xb1&\xca\x45\xc3\x07wx" "\x30\xb4\x33\xad:\x66\x92ZO\xbf\xe3;\x16\x89'\x34\xfe\xc2\xdc\x39h\x9e\x91\x85\x36\x9a\x12\x9e\x15\x41$\x37m\x7f\x85\xb6{\xc1h\xc7" "\x9c\xed\xb9\xa6\xa6\xc3\x41\xab\x92-\xf2\x1bT\xdb\x9f\x37\x17\xd7\x17V\x88\x9f\xb0\xb7\xcb\x88\x45[\x11\xef\xf1\x03LW\x18\x31\x08\x83\xc8(" "\xaa\xd8\x0e_\xc4\n\xb6\x89\x18\x9b\xbb\x88\xb9\x08\xd1\xde\xb7\x9dq\xe5\x05\xe3O\xd5\xea\x18\xc3\xb6\x9e\xd0[\x10\xda\xcep\xe1\xc4\xde\xf5\x13" "\x66\xde\x84v\xa2\x9e\xd0\x06\xf9\x42\xd4\xc2OI\xa3\x04\xbeN\xf4\xcch\x1b\xda\x88\x66g^\t\?\xf8\xebQK\xab\xde\xe1\x9c\xda\xc0\x99" ".\x97\xbf\xb3N\xfc\xb5\xcd\xf6\xfc\x89u\?\xdd\x44\ng\x81\xcc\xb1O,sO\xe9\xde;\xe8\xe1\x45\xbc-]\x92\xbf|`\xfdJ\x8d" "U\x14\x35\x7f\x38hI\xfeMO\x39\xf7\xd3z,\x18\xde\xbb]Tgx\x9fx\x32\xf8\xe9\x36\x66\x12r}]\x01\xf9\x0e\xd7\xe6\xad\x41" "h\x1e\x8aZ\xcf\xd8\x38\xd8\xa2\xc3\x43\xa1\xcd\xb0\xb4\xb7\xd1\x80\x1a\xb1u\xab\xbd\x1d\x1d\?\x83\x66=\"\xb4)\x45\xe3\xefx+\xbe\x19\xba" "\x16\xb7\xfb\xbf\xe3\x07\xd3\x62\x9b\xa5\x11\x1eS\?\xc1\xb5\xa4&\xc3\x86y\x11\xad\xedU\x9f\x32\xdf`\xbd\x42\xbe\x83\xcf\xa4\xed\xeejo'" "\xdb\xa4\x99\x17\x0b\xcf\x10\x63\xe4\x03\x61\xe3\x06\xb4\xc6\xd2\x18\x15v\x7fg\x35h\xf6\x16\xdb\xf4\xd2\xa2\xc4\xd5\x61\x8e(\\j\r\xd1\xdeG" "\xefLh\xbd\xe8\xb6t\x32uO\x1a\xde\x43\xfb\x1c\xb6\xb5\xed\xf3t\xa8y\xb3}M\xbd\xc3_u\x64<\xaa\x94\xee\xff\x04%[\xc5\xa9" "\x0cM\xa2\x9fw\xc9$\x98\xff\x93\x30\xcb\t\xedW\x34\x9c\xc2\xe3\x32S\xe1\x35\x32\x93R\x61q\x10W\xb7\xb0\x8f*]\xbe#L]\x34" "\xbf\x42\xb4S&\xda\xb4\x19U>\x62\x35S\xc4>\xe2\x10\x8ds\xa8&\xdb\xaf\xf1u\x91\x31|\xc5\xd0Oh\xd3\x07\x46t\xeb\x44\xec\xcd" "\x10Sh\x66\xfc\xa2\xb4\xd7\xf5\x8as]\xda\xdai\x96~\x16\xce\x94l\xbf\x45\x85\x1c\x88x\xbc\x45\xb6\xfb\xa7\xfd\x16\xe7N\x8c\xc9\x95\xc5" "\xf3-]\x0e\x9d\xd1V\x0f\xdb\?\x35\xb7l\x93\x0bgX\xdcP\xcd\xee\xd1\x8f\xb6\x1f@\x9b\x9f\x36\x62\x06L\xc4\xf6\xabSM\xa1\xf7\xaf" "]\xd3s+]\xb3\x06_h\x93\xa3\xc2\x1f^n\xc2\xcb\xd9\x64\xa9Q\x93\xdb\xdc:\xa8v\xeb\x8c\xd4\x34\xe6\xdc\x35)\x63k\x9b$k" "\xf7\xe1N\x43\x38\xbc\x8a\xcej\xf0\x04\xd2\xee'\xbb\x39\xd0\x36z\x0b\x9b\x88\x07\x8e\x15i\xf7\xb1\x43R\x98\xc7\x1d\xb0\x8bQ\x88\xe2\xd6\xc7" "\xc0S\xf8\xf5#_\x65\xc2\xf6\xd7W\x8f\xe0\xdd\x15\xf9\x89\xf6\xb5=T+\xb3\xc3\x19\xcc\x7f\x44\xb3\x83\x04\x8c\xa8\xe8\xdbtTi\xd4\xb3" "\xa0\xb7,\x9f\xd0\x1d\x65\x9b\xfe$\x8d\xf1\xfb\x44\xfe\x82\xf6\x45+\x89\x36\xa7\xdf\x84V\x9b\xb6\xe9\xf8QX|\x05\xcf\nNu\xf2\x65{" "\xc8\\\x83\x87\x1a\xd3\x92\xfc\x1c.\x9c\\Ko\x8f\\[O\x8e\xb1\xe2\xa2ZM\x93t\xc5o\x9e\xe3\x81\xe0\x36Rx\xf7-\xe5%y" "\xed\x41\xb3\x06\xb1M\x17\x8b\xc2\xa7mg\xf6\xde\x36\x03m\xf4\x44\x81\xfb\x1a\xe1\xf4Jn\x16\xbf#-#\x9b\x18m\xd3\xb1\xa0p\x89\x07" "\x85g\x15!*!s\x92\xee\xc7\xd4\x8av\xf4\x06\x9a\x03l\xe1\xc9@\xcb\x15\x13/>%\xad\x8f'\xb4\xde\x9c\xf0v\xdb\x89\xa1\xb7\x89" "\x32\x38\xc5~V\xd1l\xc3\x9d\x11\xee\x10L\x44\x63#\xa2\xb9\xab\x16\x0e\x90.,\xa8\xca\xa4<\x8e\x8f\xaf\xb3\x1a\x1fO\xa8);\xe5\x37" "\?[N\xdd\xe7\xb8(\xb8\x96L'\x14_\xf4\x84\xf1\x31\xd3\xe0\xeb\x05\x9c\xe2\x85\xc0;\x9dP\x8a\xfd\xd9\t\x66@\x44\xeb\xe2\x45$\xef" "\xb3\xe4s\x86M\x08m\xfa\xe6R\xe2[\xf0\x1e\x62\xf4w\x83\xe3\xaf\xda<\x45\xcc(\x37\x8fN\x8f\\\x0b\x8ekLK\x8e\xdf\x30\x41\x04" "-\x7f\x1b\xb4.\x7f\xf1\xc4\xef\xbe\x1c\x39\xe1\xe4\x01\xe2\x03#\xd0\x7f\x02Q\xea\xe8\xf3J\x89\xbc\x88\x9e\xa5Q\x1d\x88\x0ew\x31\x62\xb1\x00" "\xf9M\xb8\x89h\x8b>\x8c\x00U{\x07\xdfQ\\\xd2\xe5\x33\xb8\x42\xba\xa2\xc3\xd9\xa6\x1b)\xe1.\"\x81\x8e\xa7\xf0\x96\xba\x1dhnL" "W\x87\x98\x30\xa0V\x89/\x10\xe1u\x65\xec\xa5\xd2_\xc1Z\x8f\xe1\xec\xba\x98\xbc\x9d\xc3\x81\x97j_NOu,\xa1\xb7\?\xd1\xa1k" "\xf3\xd0N\xa1\xb9\xebl\x7f\xa2;\xd8\xfeL\x8eN\x9c\xe1\x10s\xd1l\x92\xb9\xfd\x89\xd5$\xa1m\x98\x11\x8e\xaa\xa4=\xc8\xe7z\xf7\x14" "\xa7\xb5\xb5y\x06\x84\x31\xbe}\xc0&\xfe\xf6\x37\x0c]\x85\xb6\xb8\xd6\xfe\x8e\xbf\x0et\x36\r\xe9\xf3\xad\xc6\x89\x93\x65T\xed@\xb3\xd9\xbc" "\xf6\x04\x87R\xb6'\xe9\xe8!\xfe\xde\xc1\x34Ig\x0fGr\x18\xd5}\xba]\xc1\xb4`\xe2\x03\xed\xf2\x03I`Z\xbc\xb5\x8d\xce\xbah" "\xb6`n\x8c\?\x87\xd8=(\xda\x34\xef\xcc^\xc7\x96\xc9\x8d\xbf\xf3;T\xa4\xa6\xad[\x07z\x1a\x86\xfb\x06\x96\x30\xf3Y\xd4\xd9\xc3N" "g\xa1-^*\xcf\x41\xdb\xd0+\xb4\x39g\xa1\x34\x83\x87\xd7\xeb\xf2\x16\xb4\xd6.h\xcd\x9d\xd0\x96\xd4\x85\x0f\x9fN\x38\xc1\x83hV\xd1" "&z\xa2\xa8h%\xd0\x44,M\x41\xb4\x15J\x11\xed\xb5\x1b\x93.o\xda\?\x8a\xb7\xaa\xd8\xbe\xa7Z\x07\\\xed&\xdd\x41z\x8fh\xa3" "<\no\x9e\xc9\t\xd8\x9b\x39\xfd\t\xb1\xbb\xce\x37\x66\x19\xb5\xb9]\\\xba\x86u@\x88\xf7O.\xc6{\x45\xec\x92\x84\x66s`&\x86" "\xca\xc5\x34T\x8a\x10\xa5J\xb1\xd1\xb6i\xc1$\x46\x34\xdb\xa4$\xecn{\xa4\x12&J\x32\xab\x85\xa0\x45\xc9\x19.\xba(\xc1\x44\x45\xc5" "\xbe\x11+%\x9d=\x0c\n\x85\xafw\xebI\x05\xe6\x14\x9d\x43\xd4\x98\xca\x02\x16 :t\xce&\x34#I\xe5\x02\\\x14\xa2\xfd}\x8c\x31" ";\x87\xf0\xf9*<\xae\x81\xe6t\xa4\x43\?U\x42\x9b\xdf\x10\"\xad\x0eQ\x8b\t\x1f\x1f\xc0\x1e\?\x1fV\xd3\xa3!vP\x43[\x96\x83" "\xb6\xbas\xc2#s\xe7\x30\xb6.\xb5\x30\x87\x8f\xe2\xe3/\xb0 #\xee\x02\xfc\xbf\x9a\x06o\xa9\"\xda\xe4\x46\x87\x9e\xaa\x84u\xdc\x1f\xa7" "\x1et\x0e\x61l\xdb\xa1/*\xe3\xef\xf4\x44\x1d\x33v\x46\xd1\xf9\\]\xf0\xde\x87O\xfc\x61\x44\xc4\x61\xb1&Ju\ns\x07\xd3\x98\xfe" "\x87L\xff\xc3\xd4|\xca+u\xdb\xb6\xdf&\xdd\xc2\xf3\xf8\x0f\x31\xb3 \xb4N\xb5\xd0\x8c`\x84\xb6T!\xfc\xc6\xe7\x98\x08\x10\xda\x11G" "\xc2\x07\xbc,\x34)\x42\x9b\xfb\xee\x14~'\r\xa7n\xbb\x43\"\x14\x30\xc7/\x34k%\x63\xd8\x8eg\x1a\xf3\x91\x8a\xeb\xf2K\xba\x35\xa3" "\x46\x9a\x8d\x92\x10U\x45\x01\xde\x12\x94\xf6\xa8\x05t\x7f\x85\xfb\xbbNT\xf4*\xbe\xa7\x8b\x1e\x45\x0f\x1a\x39\xd1I\x36\x11kH\x10\xad+" "g\x62\x38\xe6\xc7\x34\x8f\xa5\x88h\x7f\x44<\xb8w&\xc3U\x10m(%\xe2!\xaft\x38#\x17`\xee@\x8f\xb6\xb6\x89)\x06\x1c\x93" "\xcf\xe4\xb7\x93\xef\xde\xc4\xfb'\x17\x31-!\xe2\x31\xd2\x1b\x33\x7f\x46\x96\x1f\x15Y\x19\xa8\x18\xa2tZ\x07m>Py\xe7\x0c\xe7\xbbg" "\x34X+i@\xc7\xe9o#*\x32\xd5\x8b\xbc\x9fy\xe6\x33\x62\x42\xdb\xc4\xec\xbb\x10-s\x0b\xd1r\x1d\xec\x05\x85\x66=<\x88\xf3\xf0" "\xfb\xb8z\xe6\xb9H\xb5\x41!s\xb5\x64\xdaI\x66#\xd7\xd2\x9d\x87\xcc\x37\xb1\xa2\xe1\x62\x32j\x64\x02\xa4\x13\xb1\xd1\n\x9b\x08\x31I\xcf" "\x98R\xe7wN\xa9t\x30 \x35\r\x07\n\xab\xc8\xb7y\xf5\x1e\xd2\xc2\x8e\xadW\xf2\x9am\xe6P\xebl\x08\xbb|\xb0g\xa6\x61\xefL" "\xfb\xabK\xbe\x13\x34\xb7\x85\xa8\xcfl\xf9\xc3\xab\xba\x1d\xad\x88\x33\x46\xc3V_\x8cj\xd6\xe9\?\x9c\x17\x93\xe3\xed \xceo\x42>Z\\" "\x80K\xa4q|\x8cg\x83K>\xa3\xaeR\xa1\xc9-\xc4\xe7$S\x46\x88\xa9\x1e\x88\x9b\xd8\xa8\xb6hy\\\xd8\xb4\x15\xe0`\xc7\xa8\xe3" "\xf1\x9ekH\x02t\xd9\x85\xcc\xc1j\x8c\xbc\x08\x19>\xae\xee\x38\xa3\xe3O\xec\x0b\x85\x66&\x35\x10;%\xcf\xb5\xaaM\x1f\x33\x62\x30\x18" "\xb5\x00\xcc>\x9b\xb8i\x0c\x0b\xac\x8a\x0b\xf0\x94\xad\x64\xbc\xfb\x37\xf2\xee\xd1\x41\x33-)\xe3\xed\xe1PK\xe1h\xe6\xd4\x03T\x0e\xca\xb0" "Z\xb7\x00\xb5\xe8\xb6uRh_\x10\x93\x43\xd4H\xc9)R\x12\xd3\xc5\xca/\xf0\x1eY\x08\xdb\x35\x94xJxO\x13v\xe6\xba\xa3\xc0" "&\x1cT[\x82\xdd\x82S_\x1c\xdf\x92h\xea\xa4\xd3L\xfc\x44\xeb\xe3M\x63\x34)\x9c\xa2v\x62\x03P\xc0\xa1+\x42\x19\x35\xec\xa3\x1e" "\x86\xdd\x9a\xf0\x8c\x1fu\x91\r\xe0\xfc_\x89H\xa5\x83=\xf2\x98\xe4%\x07\x33\xa7\?'\x9b\x93\x82t\xfe\xa5\xdc\x62\xe0-\x1aS'\x9d" "\xe4\xf4p\xdf\xe5}\xd0\x8e\n\x41[ {\xa4\xcb}/\xf1^L\xd2\xd5\x15\xd9#\x91\x00l\xa3\x94q\x13Q_\x1f \xdf\xe3\xe8\xf4" "N\xa8<\xb4\xff\xbfh\xb9\xe8\x95\x81t\xfa\x63\x17\x9f\xed\x8b\xc5\xdf\xe9\xd5z\xb7\x07\x9b\x1f\xd1\xd0\x16\x08;N\xd8\xd8\x9b\x98\x9e=@" "\\\xda+(\x46[\xf7p('\x62\xaeJ>\x83\xa7\x07\xe0\xf5\x01N\x8f\x14\xb1\xfd\x9a\x9e~@\xec\xf0[:\x42\xff\xc9\x88\xcc\x61\xae" "\x99\x15\x9fk\xd8\xb4\xf8\xcf\x9em\xfdp\x17\xec!\xeaj\x92\xf1\x33\x62mV\x0c\x97\x18\xe3[X\\\x31\xca\x7f\xe6\x33\xa9\x61\xde\xe2q" "\x03\xe2\rw:\x89x\xfb\xe0\x8c\x8a\x83\xe4\xbaH\xed\x9b\x65\xb9\x88S\xa2\x84\x35\xae\xf8\x89\xd8k\x63\xd6L\xc4\x0f\xa4p<*\xc3\n" "\xca\x44\xd8\x88\xb8\xa8V\xcb\xf9\xdd\xf4h\xf0\x37\x38\x36\x8f\x84\xae\xad\xefV\xd9S\x16\x35\x18\x11Kv\x8e\xa2\x83\x37\xcc\xb3\x8avPw" "\xaa\xe7\xe5#$qr\x9a\xf7h\xea\x1e\xa2\xf9;\xe6\xc8\x45\xab\xe0\x81\x93G\xdc\xd9\xd3\x02{\xc9\x84\x1fV(\x8a\xe9\xd6\x1dx\xf8\t" "\x63}\x88(m*\xfa\xa3\x07\xde\xbf\x62\xceR\x06<\x32<\x86\xf7\xa9L\xf0\xdf\x30\x89\x1cn\x06\xcd\x1d\x62\x9b&\x1d\x43\xf8\xb7\xcbh:\xf6\x9a\xe6\xd9\xd5\xb1`;\xb8\x05\"j}\x13;\xdd\xf4\xb0\x1d\xb4\xde#\x9c\xf9\x42" "\xb3Y\x66\x8a\xdf\x41\x9c\xca\xd8!\xc4P\x9d\xac\xd8$,\xb4\xab\x15\xb6\xd1@\xabL\xb1\xbf\x01Z\xf6y;Z\x08\xcc\xe5-\x34\xb3\xa3" "\x30\x31\x1d\xe6\xe1\xb3\x1d\xda\xb2\xc6\xaaJ\x35u)\x84\xdc`Z\xfb\x14\xb3[\xaa}\xa8\xb1\xc8M\x91\x1a\xd3}\xbeM\x36\xc8\x8e\x93m" "\xba\x88\x63\xd0\xce\xf5\x31\x62\xbe\xdf\x44\xf8\xbbqQ\x0fz<\x99\xfe\x13`\xf3\xd5\x1a\xc0'[Z\xa1\xba\xc1\xfa\xbarJ.\xc1}\x35" "\xc1\x81\x89\x41\xd0\xf6W\xd4\xde\x9cQ\x8e\x1eyU\x1bK\x7f\x9c\xe3\xfd\x1b\x0e\x1eo\xd8/Wr`\xa4\"\x9c\x8a\x42\xec\xaf\x64X\x0c" "-w\x10\x7f\x9e\x64\x44\xac\x19\xabv\xa8\x0ei\x97\x13\xb6$\x12P\x92\x64\x8c\xebW\xd0\x30\xc2\xbeQ\x07\x85U~\x01\x63\xd6\x1b\xec\xb1" "R\x36\x9c\x98\xa9\x36q}\xbf\xc7.\xfc\x8dgY\xdd\x8b\x89\xde\xa8\x8a\xf0Ik\"\xa6\xc5T\xfc\x04\xf3xG\xd1\xc9\xbe\x93\x15\xc3\r" "\xab\xed\x1b\x7f\tQ\xa1Hr\x97\x97\x8a\xfc\xca)#szM\x32\x31Y\x06\xe0\x17\x45\xa8]\xe9\x13\x8e\x61n\xe0\xb6\xd3\x08\x63g\x17" "\xc3\x11I\x1a\xf0\xc6\xf9\xa6\x1bx\xf3\x34\xc6\xc7\xd7\xea\xc5\x65\xbe\xcd\xba\x41\xc3\x92\xfc\xdb\x7f\xc3\xca#u\x82n\xdf\x46X\xb9\xe1\x64\xaf" "\xef\xc6\xb3\x14v\xce\x18\x7f\xc7\x97^\x00U\xc3\x84\x06\xc4i\x46\x8c\xde\xf7\x7f\x17\x32\x30\xd8\x66\x0fU\x83\xc3\x44\x1e\x34O\x42\x11\xaf\x0f" "\x32\xbf\x8e^.\x38\xe4Q\xedO\x04\xa9q\xe8h\x01\xb7\xfb\xf1x\x9c\t\xd0SK\xec\xcc&\xd3\xd4\xa5\xed\xac\x1e\xb4\xc1\xde\xe6\xc9\x16" "\xf0qK\xb1\x17\xc4Qx\xa2\xe0\xf8\x46\xb4\xca\x81\xe6\x46\xf4\xc9o\xe0\x41\x45\xf9\xe4L\xbf\xf7\xd3\xef\x63j\x43gx\xaa\n\xe9\xaf\xb2" "\xce\x44\xf1\xec]\xbf\xf2\xba\x9a\x63\x03!\xdf\x86\xd9\xf6\x0b\xdb\xcc\xa7m\x66\xce\xce\x0b\xec\xd7T\xe4[\xeaP\xb7\x89J\x61\x97\xa9\xf8\xcc" "\xcc\xf1r\x01\x62\xf2\xed\x86\xb3\x37\xc2{'g\xf8(\x62\x92\x16\x9a\xff\xa6\xcf\xd2\xd7g\xd9\xf0\xbc\xd0\xb7\xb3\x65W'\x19-\xfe\xe1{" "\xe8\xb3\xc2\xe9\xf3r\x83=vi\x45<\x04\x87\xc5P\xf5\xbc\xef\x38\x83\xdbT\xd5\x98r\xef\xd7\xce\xe0HS\xb4\x0fV\x45\x1f\xcc^\?" "]\x8d\xcd\xeb\x11\xb5\xbe\x93\xa3\xab\x9bh\xbc\xed\x8c\xbf\xb6\xd7[,\x15\x63\xdez\x8c\x1a\x39\xf2\x9a\x63\xce\xbal~-\x97M\xb7\xf9\xd2" "\xe6\xbc\xe9\x9c\xdfV\xe7\x8b=,\x88\x8b\xe6\xf5\xd8\xa2\xe5-'\x8cq\x94\xcc\xcf\xcb\xa6\x1eR\xec\xd5\xf4j\x97\xb4!\xd3M\xbc\x83\xa6" "\x30\xde\xb3\x8a\xf0~J\r\t\x17\xe7\x10\x65\x38\x18S\"\xa3\xc6';z\xfe+\x1fS\n\xb8\x93\x83\xe9\x1bX\xc3\x19\xb1\xc9S\xc4\xe2" "\xc5\x46\x44r\xc7g\xbd\xec\x65\xd8$\x62\xa7\xa2\x12U\x16\xcc\xfb\x8c\xd8\x1b\x01\x91\xcd\x7f|S\x81K.\x15Qp\xb0\x1a,\xbc\xab;" "\xbd\x88\xc4w\xc8$\x38#@X}p\x86\xafT\x1ft;\xc1\xf7\x91kj\x82\xc2\x92\xab\xda\xa6\xa6\x10\x8d}R\x8a\xecp\xaa\xe6u" "\x85\x8a\x83M\xe8\xe6:^\x03\xc4\xb5\nl\x0b\x45\xac_i~\xf2\x34\xaf\x33j\r\x14Y\x8e\x8fn\xe2\x37\x14Y\x8epot\xe9\x8b" "\x99\x19\xa6,\xc2\xf7\x43g\xb4\xf3\x14u\x36Zn\x1c\xc4\xf1\x8e\xd7\x17\xa2\xc9#q\x32\xf2&\xfe@\t\x89\?\xf9\x94#\xbe\xfb\x11\x13" "\xfck\x9b\xe4\xeb\x19\xdf\x92L\xd2\xe9\x19\x89\xac\x19\xcf\x98\x44\xab\xad\x64\x84\xa8'{\xa8\xbb\xa4\xef\x19\rq\x97\xe4t\xe0\xed\xbf\x97\xda" "\xe4\xea\xc1\xe9\x15\x06\xc4\xe8y\x15\xb4\x97\xcf\xe8\xf1\x90\xda\x13\xf9\xe5\xc4\x0e\xad\xce\x8dw\xb6\xf4\x34si\x34\xb0\xdep\x93\xdc\"\x01=" "\xf9\x39\x90\xbf\xc1\x39\x02\x42\xb6\xd9\x38\x85X\x39\x87\xd5\xa3\x88\r~\xf4p\xe3\xe4(T\xc5\x04\x83)\x11y\xa1\xee\xb9\x33:\x99\x85\xc7" "\xf3\x9d\xb1&J\t\xc3v}\xd5H\x0c\x03o\xbc\x02\xe6\xb4\x80R\xe7Y~\x1e\x82V\x38\xf5\xcc\x1b\xd2\x90U\x96\xd0\xfb\x1b\xc9\x02\xef" "\x01\xa7\xe4tn`pi\xf4\xf6]\x45L\x92\xde\xa4;((\x9ct\x16\x96\x38ih\"\x33\\\x9a\x43.O/\xee\x9d\x9cu\xbc\x81" "\x01\x80\xd1#\xa7\x1eJX$\x45\x94\x64Mv{\xeb\xdb\t\x03\xda\xe4\x93\xd3+\xb4\xb4\x85\xe7\x86)\x81\x31|\xd4\xddI\xfbK\x1c\xcd" "\xa2\x1a\xdeN\xca\x96\xc0\x9b^/uX\xf5\x14~\x30j\xa3\x16\xd9%\xb9%X\x45\xfe\x64\x34v\xaa\xbb\x04\xbeX\xd1\xf4H\xef\x62\xdb" "\xb5\xf5\xd6\x81W\xff\xaa\x31\xc5UlN\x37\x1f\x30V\xac=\xfev\x95<\xab\xa6\x63\xc6\x19s)\x37\xd8\xb4\"\\N\x9c\xde^\xe2\xc8" "\"%\n\x1c\x0c\xc1\x95xL\x98h+\xf1v\xd7;\x8f\xfe&<\x86\x42\x9c\xd9\xe5\x9an,g\xc5\xaaZ\x7f\xe9\x95\x87j\xab\x9a\xd7" "\xf4:,\xb9\\n\xb4\x9ew\x35\xd6\x17\xe8.\xaf\xaf\xb6\x9cX\xfeU\xf1\xde_\x90\x0fi\xbc\xd9]\xdf\x05\x86\x98qP\x06\xf7\xa0~" "\xa0\xbb\xe4^V\xb8z\x96\x8e\xba\x84>r\x8d\xf3\x86\x37\xeb&\x12\n\xee\x8c\x84/\x65\xf2i\xfd\x32\x87\xf8z\xa7\x06\xb8|\xfb\xeb\x89" "\xbd\xf2{]>=\xf0\x61\xdf=\x97=\xeeum\xa1S\x89\x06g\xd0:\x15g\xf0PLm\xca~\x8fj\xd1\xc9K\xe6\x33=\xff\x1c" "\x03\x9d\xfb\xe8\xf5\x04\\\xed\x46\xcb-X\xe3\xa8\x06\xc6x\xb1J==`;h\xd1\xf2\x36h\xa8\xca\xee\x39\x93s\x1f\x9b\xe5L\xe7\x1e" "[\x36:\xa5\xdf\xf1\x96\x0e\x82\xc7\x05\xdd,\xac;m\xb6\x38\x16\xff\xf3\x89Tm\x7f\?\x81\xf9\x0c\xc4\xc2\x31\xc5\x43\xd2\xf5\x17\x92>V" "T\xe4M\xcd\xd4X\x99#\x8f\x9c\x9b\x81\xbaiX/P\x91\xefK\x45\x36\x90%\xec\xc7Q\xe6\x9d\xeav\xaa\xeb\xda)Y$\xcf\x9dR" "X\x98\x85J\x9cJ(q\xc8\xa0\x0cw\x9aN\x9d\xbf\xf3R:\xcc\xb1w\xa9\x01z\x42(\x86\xf1%\x38\x34T>\x90\?\xe4\x8c\x63\xbb" "\xd2\xef\xfc\x18;nT,\xb1<\x8a\xf8\xe8\x84Yv\x87\xd6'\x46N\xf9\x8axO\x96\x9d\xe1ZK>\xe9\xb2\xcb\xec^\xfa]!\xf1" "\xe5\xfdp\xb4\x42\x31\x9cr\xa9\x01s\xe7\x66\xad\xa6\x84sz\x8dQ\xbf\xe6I\xca\xe5\x36\xa5\xee\xc4~P\x87\x05\xe9\xdeN\xba\xf3\xb2\xde" "\x1f\xfb'\x1c\x33\x99\xd8\?\x8c\xfa\xf7\xaeyJ\xaah\x93\x8a\x9b\x15\x41\r\xe3\xa8G\xc5\xf5\xfe\x80\x62\xc9\xc9\xca\xd3\x44]n\xaa\x64\x02" "\xd6[G\xb0\x8b\x13\xed\xf0[\xf2mt\xc6\xab\x62y\xa3\x04\xa3{%#\x93\xe3\xb3\x1f\x97\xd5u\xc9\x8cO\x87\xc1\xba\xd2\xb2w\x39\xfb" "\xe4\xc7\xb5\?Z\xdd\t\xa3\x1d\x17\xd9\xfe\x94\x38\xce/\xd9~\xba\xa2gxN\xe7(\xe1\xbfK\x45\x8f\xc9\xa7S\xff/\x19_\x16&\x1c" "\xcd\xa4\xe4\xb7\n\xc8T\xd1\xe9\x41\x34\x19\xd1\xe0\xa0\xc4\x05>\xa5$u\xd2|\x93$\x0e\xf7)\x9e\xe3\xd8\x94\xb0\x92\xa2\x0c\xaf\nm\x91" "R\xfd\x31\xb7\x87\xaey\xd9\xc2\x01PJ\xff\x88\x89\xaf\x07Xn\xa2w\xc6o\x9f\x31\"g\xaf\xe4\x1bhv\xa5\xc2\xcb\x9c\x33*\xd7\xb8" "\x8aX\x82[\t!\xcb\xa2\xd0\x8e\xff\x39qm\xfd\xf0\x1d\xb4\xf2\xc2\xb9\x19\xb0\xab\xc6^N\t\x1b\x82\x94L\xc9&\xdfm\x9bQ\xc2\xbc" "\x62\xc9\x8b\x9a\x15\x96*NO\x32Ms\xd1\xf0\xdc\xb5\xa4|\x1cr\x07\xb4\x9b\xf0{.\x88\x97\xb8\xe2\xa7Lv&!\xabt\xf8\x82;" "|\xaa\x07\xc6\\\xaa\xd1\xa3\x32N$Pm\xe6\x0c\xf9\xba\xbbr\xea\xff\x05/\xf3\xc4\xf7\x19\xe6\x1f(\xea\x8c\x43\x9f/\xe9\x95\x89\x84\xe1" "\xb0R#\xfdX\xa4v\xe5\xd4|\xe8\xb5@\xef*\x14O\x11\xc3\x12\xacj\xe9\x35_P\xef\x16\xcegT|\x64\xb7T\xaa\x87*\xec\xa9" "U\x64\xd4\xfb|\xc6\x41\x93\x9c\x38q\xb4\x99%\xaf\x13\x36\xa7.J\xba\xa8\x01\xf5\xed\x43&\x8c\xc3,\xd5\xe2\xca\x91\x14LjW\xce\xb4" "\xd9\x87\xf8\xbe\xe3\x8c:\x85\x8c\xc8\x85#h\xdd\xe8\xf4\x31h\x8b\xe7\xf4\xe8\x43\x06\xac\xba{'\xf3\xd4\xef;\xf0\xf6\x05\xf1\xad\x99\x11u" "N\xb0v\x16\?\x35\x39Q\xa2\xc1^\xe1\x62\xbb\xaa\x31l\xd0\x16\xed\x63\x1b\xfc\x64\xe9\xf9ypJ\x45\xc6>\x9cj\xa1<\x8ax\xff\xe4" "\xa2z\xac\xc3t\xa6h|G\?\xa3t\x97\x17\x9f\\GG\x0c\x9d|\x86\x02\xea\x89\x9aI\xbd\xc9\x88\x83\x87\x12v\xf0\x08\xe7\x93\x90/" "\x17-'G\xd4*\xea\xb9\x82\xf7\x0b\xf8\xa9\x62\xd8\xb3\x33\x9bG\xbd\xbe\x92\x9e\x86\x17\xa8\xe5m|\xc7\xfc\xe8\xd5\xdf\xea\xd5)\xa5\x80\xe3" "\xa3R\xbcU\x05wQ=\xc5{\xdbN)\x64\x9cJ\x30M\xf2\xf0\xad\x7f\x87\xa1Gy\xad\"\x30;\\\x82\x33\x39\xa3\x86\x1e!}`" "m/\xcc#\xae\\\x00/q\xe1\xab\x04W+\x42\xb6|\x42o\xeau\xb1\x9b-\x90\x8a\x30SSOW\xda_\x1b\x9cP\x9b\x38\xbd\xb9" "V\x9fU\xcc\x0f\xf1m>\x62\xb3\xecYZ\xc8\xd5P\x11\x9f\xe3{^\xff\x96\xb1\xb9;U\xc7\xfel>\x82\x96\xf5\r\xa4\xc1|\xfc\xfb" "~\x64G\x61\xb8\x18v\x12X\x00\xfc\x0e\xa9\xf8\xedu\x85\x88I\x93i\x88\xf9\xc1R\xacG!mR\xab\xcaKW\x91\xe5\xe1\xc7\xca\xe8" "\x99S\xcf\xb5\xe8#\x37\xc4\r\xba\x81P\xf1\xc7\x19\xbe\xd8\xf8\xf1:\x85\x0b\xee\xc2\x85n\xeb\x93r\xdcX\x44\x39\xde\x12\x63\xb7\x12\x9c\xeb" "\x1b\xa5\x30&\xec\x89\xa9\xc6:\xdc\x8b\x61\xdc\xebh\xfb\xcc\x16\xdf\xabP\x1c\xc3\x9d\x11\xb1\x30\xca\x80\x81\x0cM\xd2\xfc\x80\xda\xc8\xe9\x1d\x04" "l\xbc\x31\xc2\xdd\xa0\x88\x1fsN\x92\xaa\x18\x7f\x32\xe9\?[\x38;[\xc4\x11\x13\x61\xc4\x88\x8c\x1b\x1c+\x95\x38\x89Q\xc2\xf6\x0c\xa5\x8c" "\x84J\xeb\x12\xbe\xc8U\xc3R\xb2\x8bjH\xb7\xc6_\xdc\xc3\xbb\x92h\xe7\xf7N.\x98\x96\x92\xcbvzQ\xa1\xc8\xdf\xb0$s\xda\x42" "\tW\x36&\xe2\xcc\x04\x11\xafy\xad\x1b\xd4\xb6^~`\x86\xaf\rY\x7f#\xa2\r\xe5t\x05]X\x0b;\xa8\xdb\x93\x87\x9a\x33\xf6\xab" ">\xd4\xbc\xcf\x06\x91\xb3V\xa1\xa9\xe1\x84\x96\x32\x93\x43T\x63\xcb\xa4\xe2\xa6\xbe\x11M\x1d\xe5\x61M]\xb5`K\x9c\xd1\xe2\xab\x01\x8e}" "\x91\xb0\xd7{gp\x1e\xa8\xda\xc0)\x63\x8d\x64\xd6\xf5\x9aT\x02\xa4\x41\x82\xa3\x36\xd1`-Q\xe2\xea\xaer}\xfb\xe1\xadv\x82)\xdf" "R\xf2\xfe\xe9\xd4\x82\xb8\x9f\xcfj,\xa4\x41\xfb[H\x43\xb0\xe4<\x38\x1a\xb5\x30\x1fi\x41\xd4\xc3\x95\x8eN\x18\x80.\x00\x8e\x61\x34\x86" "\x64\x32q\x63\xcfRJ>o\x9c\xde\xc1S\xd1\xaf\x30\x62\np\x10#L\xb6_\x93~\x8f\xda\n\x0e \x45\x9c\x1d\x38\xbd~\xa7K\xc2" "\xab\xbaw\x0c\xe0\xae@\x89\x42\x83\x1d\x1b\x1d\xb7\x03\x15\"\xfa\xe9v\x88\x15\xbc\xb9)\x17N\x9c\xd5(\xe2\xee\xa9\x33z<\x8e\x9e\x1a\xd4" "\x34\?\x63\x03\xa7j\x35o\x8c\x64l\xe1\x94\x31\x06\xc4\xfdi\xf0\?\x89\x80\xc3\x1d\x1a\xbd\x95h\xda\xc8##\xb5R\x63\x44X\xb9y\xef" "\x05;\x95\x85\xc5\x8f\xdf\x19rMz\x31\x8e\xd9\x9fP\xf1\x9d\x31\x97Z\xe4T\x06x\xc8\"\xb4\x13*\xa5\xee\xbeN\xc5\x13;\xb9\xed(" "Z\xed\xab\xb7\x99\x01\x12\x8b\xd6\xb9J\x1fwr\xf2\x42\x19\x62\xde\xbd\x08\x0f\xda\x45\x1d\xe8\xd9]\x33z\xee\x86\xf6\xb1\xa6]\x0f\x93\xe7\x1f" "\xd7\x92\xc9\x36\xb6\x14\x88\xc6\xfc\x9b\xf6\xc7\x36`\xe7\xdd\xd8o\xe7\x1c\x16\xdd\x63\x18\xc3-\x86\x61@\x96\x0e\xf3\xda\xd4\xde\xf0;\xc3\x96S" "\xea\xe1\xdf\x31\xde{:j\xc9w\x38\x0b%\xda\xbb\x96\xa5\xd1\x17\x35Th\xe9\x17\x1a\xb3\xf4\x9bO\xf3\xfd\xe9\xcct\x35\x45\xf3\x9c\xcai" "+%\xd7\x1bT\\o\xf1t,\xd1\x16O$:x\x9c\xc7\xb2\x35Xw\x83\x02\xcd\xc6\x84\x41\xf3\x64]N\xa4!\xc3^n\xd3\xd2\xd1" "\x38\xbe\xbb\xfc\xab\xe9P>\xd7\x61\x18\x1f\x0f\x36\xcb\x32\xb0\x44Zy\xbd\xae\xde^:/p\x12#\x1a&\x9bJ>\xf6]\x1f\xe0\xb1\xd7" "\x87\x87\x64\xc1\x99\x19\x99\xa8\xf3\x1c\xa6;\xe7\xb6\xd4\x90\x1a'\xe9\x8ax\x91\xf3vq}\xf1L\xbegR~}\xd9\xa5\xc1_\x89\xb3\x64" "%\xce\x87\x95\xd6\xb7\x33\x1fm\xa8\x38\xe7\xd1\xc4\xa6\xe9\xc1.\xab[\xda\xf1k\xc0\xfa\xee\xde[\x05o\x97\xf4T\xbd\xfd\x91\xd7U\xeb\x32" "\x9f\xae\xfc\x42\xf2[\xec\xda\x08=#\xeb\xfc\xd9Q\xde\x45\xcf\xe9\xb4\xbc*\xd9\xce\x8b\xec\xf4\x8d\x06l\x44/\x94\x10=\xe3\xae\x9b_\xe4" "\xc4\xe9\xcd\x04\x44\xe9\x64y\x35\x96\r\x80wY\r[\xd2\x1e\xbf\x04\x17\xfeJ\xea\xedS\xb2\xee\x95\xe7\xfa\xf1\x1e\x07x\x89\xf8\x8a\xd1\xf1" "z\x61\x89Z\x31{\xfc\x0b\xae\n\xda\xb4]\xee\x8c\x96\x42\x15\x9c\xcb\xcc\xd9=\xd5\xd6\xb7=\xb6\xc2\x95\xdf\xd9\x83\xae\\\xa3\xd3\xa7\x9a\xb4" "\x44\xffhwsh\xc8\xb7\x15u\xdc\x84I\xb2\n'&\x95\x9c\xa7R\x91\xf5\x8f\x89\x98g\xa8\xb0\xffR\xa1\x15@\x85\x13\x06\xca\xdf\xf1" "Q\x8c\x95\xf1JT\xe4\xe5POV\xb0%Y\xd8\xe1\x9d\x31r\xadll\x37\xa5\x87\xf7\xe5\xe4\x04U%\x1a\xae\x98^\x15\x0e`*\\" "\x8b\xac\xd0VH\xb9\xbe/\xb0\xca\xa8\x44S{\xc9\x95xk\x46\xb3\x9a\n\x8d\xe9+q\xbe\x1c-\xf7\xd7\xfb\x17\xe1\x83\xbb\xd3\xa4\x88T" "\x65\x97\xb8\xc2\x45\xb6\n\xce+\x11VrRq\xd3v\xab\xc2Q\x8d\x12\xfe!\x44\xac\xf5@,yU\xe2\xef\x1c\x88%^\xa5\xf4\xec\xd7" "U~\xdb<\x17\x1b\xd9\xb7\xa9$'\xafN\x36\xbd\x15\xb8\xf6\x12J\xfb\x84\x15\xac\n{L\x95\xa4|K~\x38=}\x92:\x7f\xd5\x99" "\xc7\x95\x02\xc4\x87\xda/\x9aR\x11\x91\x45\xb8\x32S\xe1~\x93\n\x9b+\x65\x9a/\xa4\x8cLz\xcao\xa1\xfcU\xb8\x32\xa2\xa4q\x8b\x8a" "\xacRL\xbc\x9b\xe3<\x01\xd3\xd2\xd6k\x02\x1b\xc6J\xda\x42\xach\xe5\xa9\xfc\x9d\xbd\xb8(\xdd$\x0eyU\x0b\xfe\x9fM\xc3\xc6i\x11" "\x99;\xd8\xacTh\xff\xa9\x8c\xf3\xcbu\xf9\x9b\x1a\x63:\x44\xfa\xa7#\x64tx\x0b\xeaT\xd6\xe8\x04(\xa5\xcd\xf4\xcc\x07\x07\x00\x42\xd4" "\x66\xca\xb8\xe5S\xa1\x15\x1c\x11\xaa\x1c\x39Y\xfdV\xd6w\xe7\xce\xcc\xeb\x15-)\xa2\x30HM\x16\r&\xf0\xd3\xac\x1a\x62'_\x94\xf2" "\xe1y\x03Z\xb8\x37\x34\xbf\x30v@T\xb8\x03\xa2\xa2\xb5\x45\x85\xf7\x86\xb5g\x65=\xe1G\x13\xabq\xeb\xba\xff\x02\xfd\xd1:\xa7\xa5\xeb" "j\xd1\x85!n\x9d\x93\xabu\x9c\xca\xab\x9c\xc6+|;:\xfe`y\xabs\x7f\x8b\x92Y\xae\x1e\x9d\x97\xc9Og\xf8\x36,$\xebL" "\xb0:\x93\xb5.\xe3p\x8f\t\x36\x8fv\xea\xf1^\x91\x83\xeez\x8c\x89\xd1:\x07\xbfu\x0e\x43\xebq%\x0f\xdf\xe3*\xbe\x81\x8d\x43\x38" "+W\xd1^h\x9d\x83\x8fzR\xeb:=\xa6l\xda:\xac\x62:\xc9\xfc\xce\x19_m\xad\xef\xed[\x0f\xbf\xe6\xfd\xa2\xf3\xc0N\xcc\xc3" "\xba\x65)\xdd\xe5,Q\x17\xd3\xb0.\xb2\xf7K\x91\xcb\x1e\xa2m\xd3\xd0R\xc4\x1c\xf6\x82\xbb\xa8\xb5\xf3{N\xfe\xd3lM\x82\xfd\x9bG" "\x9c\xcb\xee\x66}\xc4@\x9b\xbaX\xd0\x99(\x8cZ\xec \xe4\xdcm:\xd9\xcah\xebV\xe3\xaf\x46\x13\x8f.\x17P\x30\x1f\xa1\x9a\xce\xaa" "\xc2\xc6Z\x35\x35\xa1j\xbf\x06\xad\xfe\x42\xf1\xd2\xc9\xd1\x9d\x8a\xeb\xfb\x16\xeb\x33\xb7\xaa\x14\x96\xb1S]\xc5\x8a\xd3\xfc\xa9\xbd\xa7\x85\x36\r" "\x7f\xba\xe1\xa0\r\x15\xfd\x16/\xcc/&\xf6<\xb5{\x9b\xa5\x44\xd5\xa2\xc2\xe9\xe6\x97=NsQ\x94\xc6\x96\x46\xf2\x16\xe0\xa7T@\xeb" "=n\xe2\xaa\xda\xe6\x39\x86\xe4\x18>ZU\xf4\x1b\xe8i\xa0\xf0~\x65Zt\xb6\x1b\xdby\x0c\xa6\x89\x08\x07\xf7\xd0\xae&\\\xc6\x35m" "\xb5\xc5\x19\xf5\xcd!\xeb*.\xd8\xbf\xefr\x8a\xa0\xfb;\xd9\xff]U\x33\x62\x94{\xa6\x39M\x97\x0b\x10\xca\xe8\xb0\xcc\xad\x8d\xaa%\xdb" "\xbd\xdf\xe9\x07\xb5\x93\x34_\xd4\xb7\xe6\xefwr\x02\xdf\x11*\xde\x91\xae\?\xea\xe9\xef\xaeM\xf3N\xcd\x05\x9f\xc7\xf1\xf7\x8e\x07\xa8\xab\xd0" "\x61\x31h\xa7\xb3\xa4\xde\x0e\xda\x64\xc4&^\x35\x1c&\x63\"\xbbt\"\x32\x37\x61x!\xbc\xa2U\x81\x8a\xe9\xf7\x32\xfd\xf9\xc4\x61\x18\x16" "@\xeb\x8c\xae:\xd0\x9b\x30Q\xa6~\xfd\xa9S\xfb\x33}=\xc1[\xe4tu\xe8\xc1\xd1~.\xbcH\xd1\x30\xbeU\x91=z\x15\xd3\xfb" "S\xae+t\x7fg\xdb\xd9t\x9d\xf1\xb5\xcc>\x38Q\xde\xa5\xad\x63\xf7w~\xeb\xfc\x9d\x37\xb0w\xd7\x34N \x99\xf8r\xf1;\xcb\xbb" "\x16\x17~\xb8\\mZ\xb0Lw\xad\xf7\x18\xb4\xf7\x05\x9b\x9b.\x8e\xac\x37\x86\xcc\?/\x39\xe1\xbc\xda\xc4\xf8\xf8!:\xd7\r\xf7R\x9f" "\x84T\x99\xf3\xc1\xe7\x1d]\xb6\xc2\x10Q\xb5t\xef<\xe9y\xc4\x1e\xe3\xeb\xc7\xcd|\xaf\x04\x0c\x9c\xa1\x8c-\x9c\x97N\xae\x8c\xaa\xa8\xd5" "\xc3\xe6\x03=\x98\xfai+h\x03\x9f\xc1\xedr\xf1\xaf\xcb\xc5\xbf.{\x8e\x42&\xec\x62\xe5\xe4\xd8_\xc5\xf5\xe3\x01\xc4%+\xbc%\xb3" "\xc5r\xe5\x8c&\x1f\xc9\xe1\x83kI\xf7\x0en\x9b\x44[\xed\xc1\xa7\xf9\x66\xa9\xae\xcb=xJ\x19\x17q\xa5}\xa3\xb1\r\xed\xb2\x91S" "\xaa\xbd\xd5+n\x1a\xed\xcc\x92K\xc4\x1a\xe7\x46\x0b\xf7w\xffS\xa9k\xd8x\x9f\x62.\xa9\?x\x81\x8a\xf6\x9f\xc8\x37'W\x7fL\x64" "\xde\x84\xb8\xbe\xf7+\xbcq\x12\xd8\xc4\xdb\x46\x82\xe1y\x97\xfb\x03\x95\xea\xf2\x8b\xd5\x1aw\x0b*\xcd\xa5\xf7S\xd0\xfaG\xd1G\xef\xaf\x96" "y\xeb\x9b\xb0\xf7w\x1c\xff`\x61\xeb\xdb~\xb2x\xd1\xc3\x32\xc7\x39\x86}\x39iW.\"\x1f\xe1`\xdfIS\xcb.\xb7\x1b*\x65\xd0" "\x44\x33!\xd5\xd6W\xdb\x1c\xffv\xd9\x0fT\x86\xc8\x1cT\xb8\x1f\xc4\xc4\x8a\x87~\x90(\x81\xd1\x61\xd3\x99|\xdc&u&\xd2\xe1\xd4\x19" "\xed\x7f\xc7\xef\xb7\xae\xd1\\Z\xc5\xff" "\xcb\xd6{h%\xd3\x34]\xc3\xa7n\x16\x44\x41\xbd\x90 `&*IQ\t\"\x07\xf3;\x81\xb3\xf8\xabj\xefj\xe6\xfe\xdeg-\x97" "\xbb\xf6\x00\x13z:VW\x90\x45\x14w\x0e\xbaQn\xcf\xd1\xdb\x95\x88\xdbZ\x39\xaet\xc9NhOl\"[\x84\xa6\xe0\xbc\x39\x0f\x05" "\nO\xe3.w\x66\x15\x11\xf6U\x45\xe6\xe6r\x31\x14n\xfe<\x82\xf2L\xc4\x0b.}M\\\xcc\\\x8cK\x97.\xd2\xe5Y\xc4\x41\xb8" "\xe5<\x1a*-\xb7-.\xf3\xd9\x03\xe2\x99\x81\x95\xaeh\xcci\x8c\x83\xb6\x8a\?{\x99\x0f\xe2\x62\x8f[*\xc6J\x97\\\x45\x1a\x0b\n" "K\x63\x93\x19\x97\xca\xca\xb8\xf0\x10\xb1\x15\x1e\xea\xcc\x0f\xdd;J\xa7\x84\xc0\x92\xc6\xe2\xf1M\x86!\xb8\x96\x8a\x0f\x8e\x08I\xeb\x43\x95\x8f" "\x90\x82j\x97\x98\xcb\x39K\x0fZHM\x04\x16.\xef\x8f\xb1\x89\xbe\xdf\xe9\x81\xaf,\xce\xef\xa5_~\xe3\x1b\xf5r)\xf5\xd3K\x9e\xbb" "p\x9a\x16\xda\xf1\x1e\x0b\xf3\xfc\xd8Q\xfe\xc7\xa5u`\x0b\xd6>v\xda:\x00z\xbd\x38\x7f\xd0Y@\x85\xf7\xe3\x95\xf8\xe2\xd0\xf1o\xee" "\x66x]\xaeq\x15\x11K\xdc\xc4\xf4\x37\x17j\xd6\x45\xc9{\xc6\xe8\xa2\x12\xea\xfe\x05\xeb\xfa\xc5\xab\xe3\xff\xcd\xa9\xe7\x87\xd3\xfcoR_" "\x45\x0f\xe1'\xe9\x65[s\xcarjH\xdf\xdb.\xcd\xe6\x15\xc3\x93\x14\xf9\xf4\xc5\x8e\x63\x34\x39\xa1;\x83\xb2\xf8\xa1\x10\?\xb1>\x14Y" "~\xa5+\xc7hT\xa2N]Y|\x9c\x8b\x0f\xde\x9dm\x1b\xdf[\x18\xc8v\x91\x98\x41\xb1\xea\x18\xbf=\xa5\x9b\"Y\xcd\x31\xbc\xfeR" "m\xdb\x62\x03\xc1\x66\xbf\xe2\xdf\xf2\xc6\x45\xea\xdfT\x44l\x32\x15Y\xba%\x96Xi\xac\x13\xdb\r\x1f\xb0\xf4%\x8b\xce\xf4`\x99\x1c\x14" "\xc3\x81V/\x88\x8f\xacP%\x96ki\x1e\x9d\x34]\xf4\xa9@ty\xe8\xa8sm\xce\xfb\x94-\xcf\xa3J\xcb\x99\xfe\xdf\x31Mk\xe7" "}\xcf\x65.*\xb3o\xb8\xcc;\x66\xfb\x11\xce\xba\x05\x43\x8f\xaa\x62\xc7\xc5P\xd7\x44\xcc\xf4\xe5\xc2&%\x9fy\n\x93\x05S|\xc8\xd1" "\xe2\xf2\xc2q\xfbS\x94\?\xb2\x62\xe8\x81\x44\xf4\x1e\xe8\xb2\xc8\r\xc2.\xa2\xd5)\x36\x10\xd5T\xc5\xbb\xa8\xfe\xb6\xd3\xbe\xcb\x01Y\xac\x33" "\xb1\x84\xb2O\xf9O\x13G\x61\x01\xb5Y\xfd\xf3[[\xc4\x1f\x37\xe9\x1do\xfb\x8a/\xfe\xeaGo\xdf\xdf\xdb\xd5\x8f\x46=\xe6\xdc\x45\xaa" "\x31\xf0\x1f\xab\xce\xbf\xb6\x63\xf4\xc2\x0e\xfb\x1f;\xe5\xf2\xa5\x63RP\xf7\x31\x86\x32\xd0\x03\xe9Y=\xfd\x97\x0f\x63\x8c\x1cho\xa2\xfb{" "\x9f\x9f\x46\x95\x33\xc7l\r\xaa\x34\x1d\x35vK\x93]\x94\xbf\xdaJK\r\xc8\x9ey\x86*\xa6 \x34\x07\xf1m\x1c\xc5\xb8~\x1b\xba\xc0" ":\xeb\xe8-\xab\xd9\xed\x0f\xb0\xc1s\x37\x9e\"o\x33\x1e\x8dR\xc5\xa1\x63\xa8\x15>uP\xef\x91\x30\xd7q\xe7\xca[g\x1a'\xber" "\x9a\xfd\x86\x9f\xbdy\xe2\x0b\xaf\xa8\xc9\x06\xd6\x9c\x38\x86\x37\xae\xe2\x32\x9a\x0f\x03[\x14\xe2\xe1\xb9\xb3\xa8q\x17\xd7\xda;\xf6\xeb\"\xf7\x1a" "M\xfc,pq\xbd\x63>\xf1\xd5$Y\xcb\x8d\x8b\x08\xf4\xa4\xe2r;\xe7\x0bh\xb1\xda\xb4Ji\x83\xbdy\x8b\x9dO\xab\xea\x18ZW" "\xab\x9a\x9d\xba\tk~\xfa\x12\x1d\x01\xca\x05\xb9:\x14\xcc,\"-\x85\xf2R\rO\xc6\x8b\xf8\x9a\x39\xb3\xedp\x46\xcc,%i\x00\xda" "\r\xe9\x1eM\xf4\xa5%=P\xba;\x0f\x14\x11_\x1c\xc3!\xce\xe4\x11\xf7\xd3\x10\x39ST\x64\x42\x0f\x15\xf9\xc3'\x96\xe8\x33\x1f\xdf\xab" "\xdd\xb3\xe5\xd3\x38X\x38\x0buW\x44\xa9\xcc\x19\xe6U\xeey\x92\xf9zR\xf9\x95\xf6\x16\xd8[\x38;\x82(\xb9H\rZ\x97\xaa\xd8." "\xed\x91\x14\x93\xd6\x1e\x9d\xc1\x95\xa5\x97\xeb\xe8\x89\x35\xff\x85\xaf\xfd\x85\xe3\xe7\xcb\xad\xe3\xce\x10M\x19\xb5\x39\x14})\x03\xa6\x41\xbaN>" "\xe9\x84)\xc7X\xdb\xbc\xe5k\xff\xa0\x7f\x81I\x37\x32\xf1\xcbv\xa5/\x0b\xdd\xd9KWn\r\x99V\x8c\xc9\x94\xc7\x17\xa3\xd2\x11\xfaR" "\x44\x44*\x87\xbb\xae\x9a\x89^\xa6\x8e\x1a\xf8\xd8;\x81\x97\xa9L\x31\x32,\x9d\xf9\xad\xcd\x1c\xd5\x14\xf6\xb2\x98\x39\x90\xd4\xee\x83\xe8\x35\xe9" "\x65\x86\xc0K\x10g\xe1\xbbH#\x46\x31\x1f\xc4\xa9\x97t@\xa4J\x14\xb1]qL|\x9a)\xa2\xb7\x86v\x85\x66\x1c]\xba\x32\t\xce" "\xff~~\xa2\x8d\x7f\x61\xed\xe8Z\x00\x11u\xbb\xdb\xa7X\xed\xb5\xbaN\x1f\xf3^:\xbc\xbd.\xdbW\xf7\xca\x31\xea\xd5\x82\xe8S\x9c." ";\xb2.\xab@\xb7\xe7\xb8;Q/|\xdbO\xd0\xffr\xf4\x95\x30\xcd\x8e\xbb\xd1+\x1b\xcf\xb0\xea\x18\xd6L\x43VU\xef\x64\x86\x9d\xd0" "\\\x45\xf4\x39\xb1\x88\x66\x14\x86P\x43\xda/\r\xce\xfd\x13M\xaf\xe6\xcf\xb3\xd3\n\xa9\xf3lu\x16\xc4\xa7\xa3\xf0\x9d\x11\xdb\xea\xe8\x18\x89" "\xd9U\xf5\xe8\xc9\x15\t\xd1h\x10\xde\xfeh\x16\xd6:\xa3/\xc7\x8c\x86\x41G\x8d\xe5\xd0\xc5mu\xc9\x08R\xc6\x9e\x8b\xe9\xf9\x61`\?~" "\xca\x45\xe8\xd7\xc7\xe7\xda\xbc\x66\x9f\xce\x92\xcd\xbe\x8b\xe9\x94\x03\xde\x98o|\x93R\x46\xa9\x11M\xae\x92\x1c{\xcb" "\t\x9b\xc5\x94\x97\x98\x96\x42\x07\x31\r(\xd3\xe0\x30\xfaM\x1f\xe2\xd6^\x46T]\x1a\x35H\xd1t\x1c\x32\x37+\x0b\xa8w\xb2\x63\x61\xf4" "\x9cN\xb9\xc5\xa3\x62:\xd1x\n\x1a\x11\x35S\xb7\xa7\x9b\xf0;\xaf \x1f\x8f\x88l*\xe2\x37\xeb\xc4\xf7S\xe8\x63\xbe\xbb\xba\xf4)\xb0" ",\xbe\x39Y\xff\x66)\xcc\xf9\x9a]\x97\x31\?Is\xec\?]\x1b\x30\xcf\x45\x07\xfe\xe9\x65(\x8a\xf9\x65\x32\xe6\x45\x17\xc7\x8e\xe1%\xf9" "\x42j\xf1\x9e\xe4\xfb\x0c\xd6\xd1\r\x45\xbf\x98\x45\xb9Vx\x85\x8b\x19u\xf0\xddhy\x14&>\xcb\xa3\xa4\xc7\x1eo\xc9*\xb2\x64\x43\xf0" "\x8b,;\xba\x66\x1b-\x9c\xc5\xd3\x01\x9d\xb9\x94\xa5\xd3}\xee\x96\x0b\x1b\xca\xea\xd7\xb5y\xd1\x92-v\xf9\x1b\x16\xf7+\xb6\xc9\x9f=\xc7" "\xb8R\xd8\x89\x0b\xa9V\x1a\x97\xae\xda\xf3\x63\x32\x00\x86\xe5\x9e\xb0\xd5\x86\x96T]\xc6\t\xea\x46\xd4\xcb\x45\?\x0f!\\\xa7\xb1\xf8\xfc\xee" "\xef\xe7\x32\xb0ju\xeb\xbfX\xb3I\xacW\xf2\?>\xe0\xef\x7f\xab\x8e\xb4\xd8\x17q\xc0\x90[\xdd\xb0(\xdc\xf0^\\=\xb5\xa9\xea[" "\?\x62\x0f\xb0\xa9;\x86\xb1v\xa3\xf1li\xf8\xa8,\x33s\x8a\xf7\xae\x89n\xcf\xd3\x8d\xf7\xfb\x8e\x99\xab\xc6\xfb(>\xbfW:[\n" "v\x88o\xc4w\xc7\xe8\x9a\xe7\xe6JJ\xd5\xe7\x32\x94\xe6\xdf\x03\x9b\x94\xe2\xbd\x01\xd9\x95\xa3*~\xbb<\xf9Q\x89x\xeb\xa8]\xc0\xfe" "'\xd9\x46&\x96i\xb5\x94Y\xfd\xcb\"\x35{\x13\xb2\x64\x95\xa7\x80\x95S\x37>\x41\x8b\x41TX\xc5KGWp\xc4\xd4\xfcpkX" "\x91\xf1\x0c\x44\xbc\xf7!\x81\xdb\xea]\xa4\xd3\x10\xa4\x12\xc5,@\xbb\xa9\xdfl\xbe\x80\x98\xd6*^h\x1fT\xe6=\xe6\xff\x45\xa7\xcb\xdd" "\x8f^\xb7\xf5\x17\x8a\x0bG\xef}\xe3\x33\x96\xdd\xd9\?\xa2\xbalz\x37\xcf\x30p\xdd\xb8p\xea+'\x11iT*\xe2\x9b/xU\xfc" "\xe9R\xe4M\xfb\xb7\xce_\x19\x8e\xa9\x1b_\x9c\x10o|^\x13_\xf0\x04\xc5k\x9a\x46v]\x8b%\x18\xed=\xba\x98\\\xce\x32\x62\xb8" "\x41\x63\xe1Q/\xef\x1c\x35\x82\x84\xb3+^\xf5\xea\x34\xcb\xfei\xd4*W@\xc5\xe5_\xb5\x89\x86g\xbc\xb1\xa2\xfb\xa2:\xfb\xdd}\xf3" "\xe7\x80\x96\xc1\xca\xb4\"r:\x1d\x97\x37\x8e!\x95\xab\xb1\x64\xf3\x93~\x34|\x10\x8do\x8e\x89\xe7\x8e\x32v\xf8\x06\x9a\xc6\xbb\xe2\xe4\xde" "\xa7\xb6j\x8f\xebqku^z\x9a\x36\xf8\x42\xd9\xb1\x08\xc6\xcd{\x17i\x64\xd2\xa5}w\xd7U\x93\x08\xd4m\x13[G\xd5\xd4\x86\xd3" ".\xe8\xca`\xa2\xf4q\xeb\x86zK\xce\xdbt\x90\xd4\xc3\xe9Q>T\xd2j!\xfe\xe2\xeb\xa9\xf2\x0b\xd5*\xf1\x81\xf1r\xd4\n$\xea" "\x1c\xb8N\?\x66\xa7\x17W\xa7\x8e\x9a\x05\xb1\xf9\xcf\x99L\x89\xb3\x07j\x45\x46\x12\x12\xf1>=\xe3ms\xd1\x18\xd7\x86\xa1\xe5\xd5\xc6\xf2" "\x7f\xdb\xe2+\xaa\xfd\x46\xbd}Z\xbe(K\xdaw\xbe\x03&,]\xbe\x86\nS_:\xea]z\xc3\xaa/\xe3\xe3\xae\x8b\x99\xbe\x8f\xc6" "\x19\x8a\xdb\x63\xf6=\\\x06\x0b\"W\x03\x44N\x37\x18\x1d\xb1k\x86\xfcK\x06'\x30\xa6\x96\xf0Kg\xa6k\xca\x32\xdf\xf7S\xd6^\xd3" "\xbf\xd1\xd8\xfc\xdcW\r\xca~\x8f|\xde%,\xb3z\xd5L'\x8d\x33_\x66i\xba\x93\xe7\x1e\xf2\x34(\xeb!\x83\x9e\x8a\x83hs\xfc" "\xb7\xfe \xf3\xcb\xbc\x45\xbb\xa9\xa2\xa6\x1e\xfe:N\x1a\xb5P\x0b\x9ao\xb4Z\x15\x91\x17o\xedi\xb8\x95:\x9f\xbfu\x90\x1c\xf6]\xf4" "\xc9\x19\x44\x9f\x31\x32\xba\x8b\xa2\x94J\\zt\x16W\xf7}\x99%,)\xbc\xb9JU-\xb7\x33]\x1c\xd7\xf1\x82>\x11\x8c[\x95(" "WO\?uK\x0f\xb2\xeb\x0bi\xde-\xe8\x37\xb8\xf1Y\xaeo-\x0b\xfaJ(\xbe\x63\x37t\xc7\x91\xe3~\xc6\x88o\x14\xd5\xea\xa4\xbc" "\xf1\xa9\xf7\x7f\x8eu\xcb\xd1U-\x34s\xfb$\x9c\xf6\xe1\xca\x31\xdc\xf1\xc3U\x66\xaa*,-=\xa4\x97\x1c\x43\x1e\xfc;\xec\x1f\x1f\x16" "\xd1\x31\x9b\xef\xe3\xb1L\xad(\xe6\x1c\xd3\xce\xfe\x8e\xf1\xf5<\xb2\x65S\x03\xab\x16&\xb9\x16\x63\x86u\xe3\xe7=\xba\xcd\x8b\xe8\x87\xaew" "\x31z\xba\xf1K\x11\xa9\x80\x44l\xf3.\xda\x98\x46\xc5\x9d\x03\xc7\xe8\xf8\xcb\x45\xba@t\xe3.\xfb\xb5\xe0\x35\x62\x62\xe6\x61\xde\x30\x97\x42" "\xf6\\\xc5\xb6\x63\xfc\xb9O\x83\x7f\x65\xf2\x36)v\x1c\x43\xe1I\x87Xz\xce\x88\xe1\x85\x8c\xd8y\x8c\x38v\x8dX\xe5\xc6\x65GY>" "\xfbR\x98\x06\xf5\xddx\xc2>\xd9\x32\xae\xb9(\x1d[\x46\xfb\xe5\x1b\xa2\x1a\x45`\xaf\x1e\x44\xaf\xd2\"\x1e\x87/\">\xba\x8b\xbe\xe5\x42" "\xc6-\x17\x65\xde}\x88\xe8\xcf\x18\x62\x14P\x8c\x1f\xe6\xe9\xf8\xc6\x17\x98\x1a\xaa\xfc\xd6\xa3\xdd\x18\x9b>\xc6\xf7\xff\x9c\xc9\x64\x8e\x41\x07\x8c" "\x35\xae\x90j\x1b\xec\xf9\x38\xf1\x61WX\xf0\xa9\x17\xd6\x8d.\xd9\xe1M\xf8\x85i\xde\xf1\xff)\x04\xee\x90\t\xc6\xdf\x85\x98\xf3\xcdxz" "\xef\x18\xed\xb7\x65\x89\x45\xb3';pQ\x45z=\x61\xefn\xe6\xdf\r\x39(U\xf4\x43\xec\xe0\xdf\xf9\x02\xde\xd7\xaa\xa0\?\x18\xd1\xcfG" "\x0f\xfc\x87m\x1c\xa3\x39;\t\x04\xcdP\xf4%\xae\x8a\xb2>Z\xf1\xee\?\xd6R\x81\xd2\xcf\xef\xf0\x38\x9c\xe4\x0b\xfe\xcd\x87\xe9\xd1\x99\x33" "U\xea\x35'\x8c\xed\x62\x07\xd6\?\x0c\x66\xa2\x0c)\x19]\xf4\x99\xb0\x30_\xe4\xfb\x32LP\xfa!\x86\xde\x35\x66:}g\xa1\x85\xcd\xee" "\xb6\xb7\xbf\xa9\xb7\xdc\xd9 \xbc\x88p!V\xd8L\x03\xf9\xec\x84\xab\x98\xe8v\x12\x81\x85\xe9\xd9'\xfb\xb2O\xe7\xdf\xf1\xc5]\x98\xa0\x08" "{\xf7S~o\x7f)~u|\xab&\xfe\xfe\x46\xc2\x06\x11\xb9\xb8\x13\x8c\xe6-\xd7#\x0b\x8b\xab\xec\xf2\xe7\x8f\xa1]\xce\x1f\xc3\xab\x9d" "\xb3kX\x98\x66\xfd\xfd\x43]\xcb\xce\x97\x0c\xad\xf3\?\x0e\xefL\x9c\xbb\xc8\xd3k\x18\x1a\xff\xa2\x12\x9a\xfb\x92\xdf\xa2\xd9\x88`:=\xf1" "\x45\xa3\xb0\xd0\x01\xaf\x1e\xd3\x19\xef\xe2\x87\xdd\xe7O\xd9\x15\x95\xa1.\xfe\xf4\xc3\xac\x06\x66\xd8\xdd\xf8\x17S~\xdcj\xb2w\xe5\x0b]\xdf" "QT\x7f\x83\xfd_\x8a\x43\x64'VqL\xfc\"\xfaW~u\xd6\xc5\xf5\xab\x30Z$w\xa5j;\xca\x0c>\xbd=s\x8d\x16\xc3\xcf" ")\x46\x8d)\xc5!q\xa1\x06/\xdc\x96I\x8e\xef\x32\xe3prr\xc6\x90\xdf*\xba. \x39)#\x7f\x8a\x88\x9e\xb9\x16\xe2\x03\xef(" "\xc7K\xe4x\xdf\\\x8c\xf8\xa4\xc1\xd5\x83I\xbeN|\"\xbe'\xb0\x9c\xec\x32\x9c\x61\x37\x39{\x0bwP\xb8N\xe0\xbd%\"/p\xde" "\x97\?\x8a\xafr\x8b\x14Y\x1a\xdc\xebM\xd8\x91&\x45~\x95\xabU\xda\xaav\x13n\xaa\x31\xaa\xb8\x62\xf4\xde\x0f\"\xa2\xfe\xa9\x98\xd4\xd7" "\x9a\xa4\x16Yr\x33\x87\x61\xb8\xad\xa2OU\x92\xf2\xbd\xe6\x45\xdb\\\xfa~\xa2\xcf:\x92\xf2\xc4q\x17\x63Q\x99\xeb\xeeU\\\xe8\xce\xd0" "\xee\xc0\xbb\xa3\xd7\xc3\xa4\xfc-\xff\x19\xa5\xc5\xd8\xf0\x32\xd3\xbf\x66\x0f\xd0\xed\xc4\x8eI\x1f\xe6\?\xe1\x82\x31\xa9\xb0\xbeT\xf9\xad\xda}\xa8" "\x16\x88\xbb\xaa\xf8\xb7\xd4\xad:W\x81k\xfe.n\xdc\xa9\xab\xa3T\x8b\xb3\x37g\xae\xe5Q\x91\n{\x11\xb7\xef\xbd \xb2\x8d$\xf5_" "\x1d<\x8e{\xbe\xb3H;\xc8n\xd2\xe0;h\xb0\xe2\x36*\xde\x33\xcb\x04\x32T\xe7\xc6L\x63,Ns\x64\xf3\xcc\x34\xd6\xf7\x02T%" "\xd2j\xb8H#{\x13g\xe1\x0b\xdb\x9b\x66\xda`\x99\xde\x7f\xf8\x8e\x8e\x88>\xffI\x1e.\xdc\xf6!y`\x13\xf2J\xfe\x30\x43*\x08" "\x13\xd3\xcd\xb7[\xc7$O<\rU\xe4\x1a\xa1\x96\xab\x31\xb5o.\x34\x83\x08S\xe7.\x83\xd6*z\xef\x94\xb4\xdb\x8e\xdeK%\xed\xa1" "[\xee\x30\xd2\x8d\xe2\xdf|\xe6\xeb\xe0\xa4\xa3\xca\xc7\xe8\x84'\xed\xb0\x01u\x0b\x8e\xd9\n\xd7\x65\xb1\xbf\xb2)\xbc\xf2\xdb\xdc\x7f\x11\xf4\x15" "\xa9\xa6~\xf0wI]\x81\xa0\xee>\x9f\xb7\x9d\xe9\xca\xe7\x65\xed\x0c\xe9\x90T\xec!y\x85\x88\xc3\xfc\xf6\xb5\xe6{m\xc9\xe8\xd2\xb5\x86" "t'\x13$\x1f\xf3\xfd\x8f\xbf}\x82M\x9f\xb2.\x9d`\xbat\xf8\x12\x44w\xcd\x80\x17\xdd\x9d\xbfW\x37\x99\xbd\xa6\x17'Q\xa1\xe0\xab" "\x99\x64\xd9\xd0\xeb{\x7f\xb3|r\xc4\x97\x9d\x85\x44\xe5\xca:\x8e\xf1\x15\x8b{\x39p#X\x88q\xf5\xcb\x95\xfe\tM\x1f\xa5\xebN\xa8" "\x86\n\x37\xb3~\xa2\xfd\x7f\x37\xf9\xc5\xa2;\x45\xec\x18\x45\xc6qS\x11\xc9\xacLL\xde\xab.\xd2\xb7\xa6\xcbh\xf5]:\x90)jH" "\x08x\xa8(\x93%\xb3\xeb\x8f\x61\x11\xb7\xfb\x0c\x05\xa8\xd1\x66\x1a\xf7\x14o}\x8d\x91\x1e\x9c\x38\xc6\xe5\x15\xe3\xb0+s\x45 \x44\xdf\x38" "N\x0f\xfcg\xb7^Y\x45\xf4R\x83\x98T\xef\xb2,\x04\x37\x94\x03\x0f\x8eq\xeb\x84\x61[\x95\xb9M\x84\x8a\xf5pt\xf7\x85G\x37\xdc" "\x45\xe2#\xc3\xa8s\xe4K\xde\xf4\xd0\?}tL\x9b\x07\x14Q/\xd3\xa3+\xc7x\xb8\xa2\x8b\x9a\xb1q\x39\xaa\xac\x9c\x85\x1b\x11\xf1v" "\xe4\xb3h\x61\xae\x32K\x8f*\xf6\x84\xc7\x64<\x8a\x10\xa5\x82\xa6\x9b\xa5\xd6_X(\x98\xe3\x05=\x92\xba\x8c\x89\xa7\xb8\x1d\xa0g\x64\x84" "T\xc1\x81[\xd4\xa6\xa7\x33\xc7\x8c\x45##@)\x86\x33\xe7\xce\xbd\x07Hs\xff\xcf\x42;\xcd}\xba\x9e\xc2\xf5\xe8\xae\xd9I\xcf\xa6n" "\xb7\xa2)G\x8fP\xc5\xd3\x42I&\x0e\x14\xa7\x8e\xd1\xc5\xadt\x1cn\x17\xa9\x07v\xf3\x36\x61R\xaf\x34\xd4\xbc\xacJ\xfc\xd8\xf9!\x83" "L\x8a\x38\xa3\xbb\t\xc5p\xdb\x17y\x06\xda\xef\x32\xb3\x82 \xba\x97\xb4\xf8\xed(#\x44x\xb7%\xc7\xe9\xf6\x9dwr\x19\x16\xe6\xe9\x15" "\xef\xf6\xba\xe9\xc8l&\xdd\xf4\x1f/S-\x85r\x81g\x90 _I\xe3\xf4o\xce\x12h\xa2\xbbO[\xbf\xe9\x1d\xc6\x97\xf4\xee\xc2\xe7" ";\xe9\x1d\xcf\xf5x.\xabV\xba\xb9u\xff\xbb\x9c\xdf\xc5\xdd\x12\xb1\xea\xa8\xa3\xef\x37\x9f\x8bZJ\x41\xef\xf6\xd2\xa7\x82\x63(\xa0\xa7\x82" "\x8f\x96\xe9\xf3\x81o\xa9\xa4/|}m^\xa1\xbdq\xf4\x15\x92\x8a\xfe\"\x44\\\x9enk\xe1;\xbeV\x81\x98Y\xae\xe0@\xe6w\xca" "v\xf6=<\xb0\xdb\xd0\xc3\x81\xffu\x8el/\xd3\x61\x37G]\x94`\x38\xa1\x88\xdc[I\xbbGt\x65\xa7\xa8{V\?/\xf1\x9e\xad" "\xcai\xc5\xe2\xeav\x37\xf4\xd5\xeem~\x11s\xb2\xa2.\x9e\x8d\xf9v\x80\xa1\x9c\xde\x11\x82\xef\x44^\x93\xdaX\x1f\xce\x04\xb7\x83\t\x45" "V\x84\xc9\xa1\xa3\xcf\xdc\xe8\x95\xa3\xa8\x8e\xe7\x81\xb1\x9f\x98\xbc\x39\xaa\xda\xdf\x1b\xef\x64\xeakzYI\x38\xa6\x87_\x41\xbcm\x86:\xc8" "!\x32\x9d=\xb9\xda \x9d\xbd\x38\x66\xec\xc4}\x83\?\x9du}hT\xb7R\x44\xa4\x15q\x11]\xf5\xc2\xeb\xf9<\x92\xf9\xe7\xb6\xf6\xe5" "v\xcdt\x35\xed\xfa\x1e|\xfa\xd9q\xccX\xfe\xca\xaa\xd6\x9a\x15k\xc1W\xc1\x37\x8a\xe8\x99\xdaM\xbf\x0f\x91\x06U\xc5sG\x9f\xaa\xd2" "=U\x91\xce_*\x32\xde[\x37\x9d\x97\\K\x13\xee\x7f\xdd\xd1\x18\xdfk^o\xfd\x16\x9eu=q\x94\xffQ\x95\x45\xb4\x9e\x39\x86V" "\xb2\x9e\xf9^I\xfa+\x93\x90\"=_\xbb\x0c\x85/\xd8\xd7\xdd\x1a\xaf\x36\xbf}\x99\x38\xa6#\x36\xa6_\xb6>\xda\xee\xbb\xad\xbc\xa0\xaf" ":\x35\xd9+\x15%*\xca\xbd\xd0\xd8\x97\x1e\xda\x8a\x91\x87\x9b\x8dv\x1b\xa3r\xd8\xd6\x0e\xed\xcc\xb1\xed\xde\x89\xa3\xba\xb1\xb0\xf3\x10&#" "\xf7\x8e\xe5\x89\xb7\x8e\xde\x64T\xa4\xd1\xe4v\x0f\xef \xfcj\xff\x9f/^\x18\xdd\\p\xea\xe8\xafG\xc5\xff,-\xe8\x11\xa6\xc8T\x42" "*\xd2G\x92\x62\xa6\x13\xd0\x03\xff\x65\x1cw\xb6\x87\xfe\xe3\xb5\xcf*\x44\xdc]\x65m\xd1/\x33\xbf\\\xbbV{{|\x1d\x8d\x66.\xba" "vU\x44\x1f\x9b\xb6'\xa7\xaa\xb3\xad|\x92\xf1g\xf0}S\x0cW\xe1n\x94 \xfb\x8f]\xe7!\xc7\xb0 #\xc3\x10\xc1\xe0y\x82\xf7" "\xc4'\xdf!\xf2\x19\xec\xb6|\xec\xe8\xc3\x8f\x88\xf4k\xeb\"\x05\xbc\xa1\x06\xd9\xdf\x31\xe4\xdeS\xf1\x85\x38\ng\xbe\xb9\xf1\xb1\x64{\x33" "\xf1\xb5\xc5\xf6\x66\xf3\xb7\x42'\xea\x9b\xba\x82\xae\x04\x11\x11\xf9LU\xf4LT\xc1\xceQP\x8d\x86\x46\xe8M\xb6\x1cy\xb6\xb5\x81\x63\x44" "\xf5\xc6\xb6\x36\"n\xdc\xfc\x65[\?q\xd4\x18m\xdc\x18\x17\x16]\x9e\xbb\x8d\xa5\xb2\xcc\xbb\x13\xc6\x65\x92\x89\x8f\x41\x9c\xeco\xcb\xfb\x19" "\xdd\xaf\x1c\xa3\x93%\xc5\x8c\xceS\x0f\xfc\xf7\x9bw_\x41\xfc\x39H\xba+g\xdeW\x8b\xe8j\xb1m\xfd\xd2\x31\xb3\xfa\x11\x16\xe5&>" "O\xf2u\xf8\xb6>\x88\x46\x8f\xee\x36\xb0\xbd\xbd\x8c\x9b\xadP\x63\xa8\x34\x11\xd4\xa1\x64\xb8\xda\xb1\xddY\x1b\xfb\x8e\xd1\x63\x99\xe2\x91\x63\x34" "j\xb9jx\xdb\x38v\xf4i\xb1\x88\xd1\x65\xc3;*\xba\x87+\x46{\xbf\xbe\xccU&k\xa7\x0f\xff\xec{\xf7\x35\xde\\\xf3\x34\xa5!" "\xf6\xd6\xdbL\xeb\xdaWO\xdbV\xdd\r\xd1\xe9\x66\xde\x45\xa4\x46\x17\x19\xdc\xd4\xc4\xa5\xff\xa6\xcf\xb4<\xdd\xed}\?\x33\x93\x13\x16O\xae" "\x32,\xcdy\x34j\x61\x1f\x32\x98@|\x64\xbd{\xe4GO\x35\x35t\xa1\xa6m\xfb\xc4\xf6\xff\xc4\xf7\xc6-\x34\xf3\x7f\x08J\x44\x65^" ".\xcf\xc5\xf8\x96\x85\xfd|'\xe3\x0b\x45V\xe3\x17~\x8b\xeb\x61\r\xa1Wz\x66\xbc\x14\x65\xba\xca\x0f\x0c\xf3=\xb7\x95\xd6\x94\x17\xffr" "\xae\xa5W\xf6\xfc\xea\x36\xdd\x81\xc5\xad\xa2\x1f\xd0\xa8\x02\xde\x1e\xfb,\xfd\x01\xab\xca\xe0\xd6\xb5\x97\x32\x65W\xdf\x17\xce\xff\xc3\xd9\xa7\?\xf2" "\?\xf5\x96\xfd\xce\xee\xea}\x1d\xbe\xf0\xc1Z\xf3q\xf7\x7fo\r\xc7\x96\xab\xec\xb1\x39\x0b`\xfe\xac\xe5V\xe6\xfd\xccY;\xe6\x9b\xf4\x90" "\x45\xb9(\x39\x86\xdf\xd0\xb5\x62\xcb%\xac #\xb1P\xdc\xa5\xc4\xb1\x03M\x17W\x8e\xd9\x1bY\x86%\xb1\x88\xa1\xe3\x35\x31\xd4t\x61\xfe" "\x9eWG\x8e\xbe\x02\x13\x31\x9c\x8cKJ]O\x9e\xe6\xff~\xd8\xc3p\x9a\x9bY}\x33YZwK+{\x41\xad\xf6\xd0x\xf6\xe9\t" "\xa6\xa8\x1e\xcc\xd5p\x34\x91j\xba\xbcw\xb6]^\xefX\xc1QM\xa6\xb1_\r\xb6\xa4\xe5\x0f\x19\x1d\xa5\x9c\x65\xbei>\x8c\xf2\x65Y" "\x65!\x01\x36\x0e/\xc3\x99\x35]\x1a\xd6\x95\xc6\xd4\xa7o\x9a\x65\x99o\xbe\x0c\xa2\xc5G`\xebkZ\xbe(S\xbf" "p\x8f\x9fL\xfb\xa7\xdd\x89tk\xb5\xfa\x90=\xe0\xd9w\xc1\xde\x1fu\xa7Xz\xb7\x9bg\x35\xe6\x1b\xcdhJ\xfd\?>L\x86\x9f\x99" "\x0f\x93\xb7\xb7L\xb9l\x7f\x8a\x31\x36.\xfa\x96\x8e\xb0\xc9\xa8\x36\xca\xe2\xbd\x1b\xb3\xd2V\xc1\x8f%\xab\x16\xf7\x33\x84i\xb4\x64\x66\xd7\xea" "s\x86\xdb\xdf\xf9\x9fR\xe4\xbc\x81\x8c\xfa\x32g\xbf\xe1\xc7z\x9f\xbf\xe5\xe4\x97\xef\x7fQ\xd8\x0e<\xed\x64\x9f\xaa\xc4>#@\xf4\xe9\xac" "!\xc8\x37\xba\x1c\x11\x97\x8ez\x02L}\xfb\xe6\xb7\xe9\xc1S\x8d]\xe6\x42\t,\x97\x1a\xf1\x0e\x91\xc2\x94i\xd0\x95[\xb2U\xd1>\xde" "\x90\xd5\x34\x17\x0f\x9c\xb7\xfb\xf4\xe5\xec\x33\xa6i\x9f\x93\xac>\x43\x97*\xca\x1d\x30\x81L\xffo]\x8c.gq\x9b\x05\xb1\xbe\x8a.\x7f" "\xf5>\xee\x97\xb4\x12\xef\xd3\x19\xb2o\xce\x90\xae\xee\x35\x86\xb0\x04*\xaa\xaf\xd5\xb0\x13\x18\x86\x11\x13wG\xe3\x9f\xb2\xfa\x12\xed\x0eh\x30" "u\xcc\x1fw\xec\xff|\xbc\xb3\x1f\xe9\xab\xed\xc1\xa2\xc0@\x94n\xbb\xac\xb8\xfb\xd1\x46\xbd\x43+M\xaa\x1b\xf4\x80\xb4\x1b>\xf5O\xd2_" "\x44K>\xf5\xa6\xf5\xb7h\x45\xd8\r\xees\x82\xd0\x8f\xf6O\xa3\xc6\x83\x97\xa3\xb0L\xa9rx\xeb[\xe8\xd4%\xc5<\xb1\xcc\xdd\x02\x11" "{\xc4\x37\xc7\xffV]=\xf0\x1f\xa6\x1e\x00\x98O\xf7\xb9O\xde\xa7\xeb\xa1\xa2\xfe\x87qh\?:y\xd0\x19\xd1\xb4\x43\xf6\x16Oz\x8c" "i\xa3,-\x8c\xff\xe6\xf5\xbf\xe5yz\xb0\x66`V=\xbc=\x9e\x30\x04\xa1\x30\xd4\x07\xce\xb4\xfb\xealw|\x01\xf1\x8c\xb7}Q\xb5" "YW\xd5\x19U\n&\xca*-|\x80\xbe\x8f\x1b\x9a\x8a\xea|}\x31v\xe6]\x89\x8a\x98\x34\xf4\xa3\xcb#\xd5\xde\xc2\x82GX\xd1\x91" "\xf1\xc1\x64z\xb0G\xe4\xbd`\xba\xa0\xa8\x16#l\xca\xf4\x8b\xe9G\xffP\xf7\xa2\x1b\x34JN \xfa\x1cV\x14\xbdq\xeb\x13\xbd\xcc\\" "\x8c\x0f\xde\xbc\x11\xa9\x1f\x46\xf1\x88\x63\x87\x32y\xdd\xde%\x46P\xe2+\x86w{_\x64\x96\x82\xbe\xf7\x14\x11l#\xfa\xd1\xa3\xba%m" "\xeb,\xe0G\x9e\xff\xf9\xc5Q\xebm\xee\xbf\xec\xd5YR,p\xd3\xb9O\x9f\x01\x45\xcdP\x80\x04\x19L\x65nh\xcf\x42\x86]\x15\x39" "\xdaw\x8c.\xaf|\x90\nO\xfc\x62\xdd\xcd\xf0\xc8\x99*\x90\x9c\xb5\?\xa4\x13\xa6\x1b~\?\xea\x9c\x32\x64\x92\x88\xd7i\x61\xca@\x8d}" "\x86\x8fT\xd4\x05'\xac\x14\xfb\xde\xffi\xa6\x44\x19-r%.v\xf5\x80,\x1dh=.\xac\x8aN\x9d;\xba}M\x00\xd2\xab\xd1\xd6" "\xbdO\x1br\xc5\xd0\xaa\x46,\xe3Q\xde\x91\xab\x13\x8a;\xcb\x62\x1e\xd0\x17\x83Y\x98\x1f\x90\xf5\x66\xd3\xcf\xc6\xfa\x32\xf2\x0b\xb6\x88\xaf\x8e" "\xde[\x45\xe3kG-\xe6\x13\xf4\xc9\xd1\x84\x05\xea\xf5x:\rw*\x62\xf0s\xedG\x1f\xbcIv\xe6\xd1\xccj^\xeb'\xc3\x98y" "\xa9O\xcd|_\xd3\x88\xc8Q\xe8\xda\xfb\x34\x36\xd6\xd9\x31\x10\x66\xc6}\xee\t\xf7}\xf0\xf6\t\x89\xa0\xad\xe8y\xce\x05\xfb\x02\x0e@\x82" ">\xff\xe0ZLQ\xab\x9e\x37\x15l]\xf5i\xac\xdb\x0fU\x7f\xb3\xeb\xe1\x10\x0b\xb4O\x63X\x45\x1dv\xf6z\x64\xa8\x89\xb4\x8b\xedK" "\xd3\xd2V\xc0\xd6\x15\x1f\xa0;\xa0\x91\xab\xa2L\x94\xb8\x8f\xd5\xd7H\xa1\xd2\x18\x0fy&\x98\xb3\xf6ix\xda\xf7\xaa\xa7\xe6\xa1\xa7K\r" "\?Sx\x89\xda\x05\?\x46\xd5Z\x9fJ\xe3~\\\xe0\r\x14s\x8eZ\xac\xc8\x10\xd0W\xf3I\x61\xb0\x45\x13\x66\x8d\x08\xe1y\xfa>\xcb" "\xe1\xc4\xb4\xef\r\\\xa7\x43!\xff\x92\xb1R\xf8\x42\xd4\xba\x8c\x1fv_\xe3\xd8\x03Qg\xcd\xfe\x0c\x38\xc0\xb1K\xd9\xf8\x87\x31\x84\x94\x99" "i\x64\x35\xb0\x66\x43j\x01\x03\xf8\xe8\x01\xaa\x07L\x84\x06\xbc\xef}\xa7\x1a\x39j\xd8\x1e\xbc\xbd\xb8Zp\xcc>\xa5N\xcf\xce\x19\xc9J" "\x19\xe6\x46\xf2\xf6\xa9-\xeb\xef>\x9b\x12\xbf\x1c\xb5|r\xfd\xff\x32\x9d\x12\xb0\xeb\xa5\xb1\xa9`\xc9\x31\xfb*\xc1n\xab\x19\xe6\x13W\x19" "M\x92\x87}\xef\x9a\xe2\xfa\?\xdau\x8b\xc8\x43\xfe\x33\xcc\x10\?\x0b\x32\xc1\xf7\x89\x15\x43J)\xea\x36\xf6\xb2\xaf\x89w\x97,\xfc\xe6\xab" "\xcc\xec\xb9\x1a\xe8\xd3yM\x11\xa9\xfb\xe2\x8f\xa3\xf8\xa7\xf4\x7f\x8e\x31\xed\x80\x1d[^m\xcb<\x17,\xfc\xfa\xd4\xf1\xf7\xe3\xbb'G\x1f" "\r\xe3\xbb\x89\x0f\nT\x91\xf4\xb9u\xab\xe8\x8dG\xc4\xe4\x95/\xe7\x89\x85\xfe\x8c!\xc9\xbb+\x1a\x66)z/\xa4\x62\xf0>R\x06W" "\x30g\xc9\xd9W\x96\x15'T\xe4\x1ak\xde\xd3\x9dI\xd9\xf6\xe9\x88\xdb\x84}\x9a\xe4(\xee\x94*}ZJ\t>\x00\xdf\xf9tP\x42" "*\x86\xaf~\xb0\x0c\x66mhl\xfe\xe6\xff\x42\xf9\xcc\xda\xff\x43\x15\x89\xc3Y\xb6\x0b\xf1\xa7LS\xc1\\\x1e\xca\xe2\x37\xbd\xbb\xd8%\x1b" "\xe8\xc7_\x63\xc7\xe8\xfa\x35\x9a,\x03\x93\xba\xdd\xbdv\x16\x8f\xcb\xdb\x83U`\x9f\xdf\x99\xcf\xd4\xec\x35\xf3\xb1\x1a\xf8\xb4\xe3z)\x30)" "\xd1&k\x19\xc7J\xc1\xcc\x88,\xd3T\xc7\xd0\xcf\xac\x9f\xd2\xd9gz\x88\x61\x93\xd6\x33\x82\x9f\xcc&\x43\xd1\xa7\x88\x34\x98Q\xd4\xf0+" "\xd8\x36W\xa6\x85\x0fU\xb3\xb3\xe1\xda\x99\xccvi\xf2\xdf\xd7\xfc\x98\xac^T\xed+\xfeqT\x10\x31:\xbeH*\xaf\x81\xc1WR\x45" "\xb5\x80\xe5\x04HY\xeb\x80\x99\x12\x8c\xc1\x62\xd4\xc4\x87+\xc6\xec\x34\xc6\xaa\xab\x62\xff\x91\xdb\x05\xc6\xc6\xd7L\xe6\x63\x8cu\x15\xa2/s" "\x94\xc1\x44\xca\x44\xd8'\xa9\x98\x1cw}\xe9\xa3\xecy\x7f\x8b|\xd9\xc6\x42~h\x65\x32o\xa4\x81\x80\xb2\xed\?L#\x92\xd3\x9bP\x08" "\x39\xde\x12\x0cz\xfaI\x1es\xb3\xa4Pu\xa4k\xb5\x88\?\xe1W\x85\x1fo\xaf\x1a)\xce\x8f\xc2*G\x31|Z\x44\x07\x43\x83\x1c\x45" "_\xd9\xf8\xf2\x44\xb3NJ\xaf\x01/\x1b\x65\xbe\x8c\x84\xb8\x33\xcb\xb3\x03\xb5\x61\xb4\x9e\x64\x98\xfc\x65Xx\xa5\x97'\x99\xf9\xa6Z\xf1\xdc" "\xfe\xee\xae\x30\x0b\x37,\x8b\xb3\xda}`\xd7\x18x|z%h]\xd5^`\x93\x97P\x98\xe5{Y\xb8\xea\xd4k\xcc\xb3\"iR\x9f" ">;\xfd\xa4\x32\xa5)N\?\xb9\xe5y\xbd\x42k$,\x0f\xaf\xd3O\x9a\xf7\x8e\xaa\x0b\x38\x18\x04\x36[\xc5\x1f\?\xce\x92\xc3\x83\xf8\x87" "\xd5\xf2\xbe\xad\xb3\xeb{\xd6\xacv\xcb\x91{\t}\xc6\xd4\xe8'\x1d\xdez\x87\x8d\xab\xfb\xe2\x18\x9e\xb9\xcf\xdb\xef/\x1d\xd3\xdf\xcbhr" "\xc4\xd8Kr`\xe3\xa3Y\x32`\x95x\xe5o^\x97\x8eI\xfe\x91\xc9L\x95\xa5W\x9f.R\x11\xd4\xa7\x03]\?\x19\r\xc3\xa5\xc7\xac" "qS\xd6]\?\xbe\xdc\x38\xca\x84\xd2\xe7\x94\xc9\xaa\x64\xbe\xe2<\xcdO-:\xbd\xf2\xd5\xaa\xb2\xf6)\xb3\xf5\xf4\x93\xf5U\xbc\xff$\x7f" "\xce\x92\xfd\x89\xfc\x91U\x1d\xb5\x08\xd7\xac\x9c\xebG\xc7Po\x91\xe3IQ{G\xce\x12\xd4\xb8\x83\xfd\x10SI\xf7\xd3\\\xa8\?)\x42" "\xa9\xf4}\x16\x9f\x9e\xb5\xb9\xc5\xd0\xf7u\x80\xe0\xdf\x62\x1a\xb5\x1e\x9c\xd1@\x44\xc5\xa4z\x1cs\x96\xac\xec\x1dO\xca\x9dt\x45\xbd\x11X" "\x99\xf4\xd3+L\x45\xd2\x7f-\xc7p\xd5\xdb\x1bG\xc6K\xec\x07\x84\x66T\x31\xdc\x33\xa7\xd0\xe9\xfd\"\x1cz\r\x61\x9c\xdd>w\x33\xfb\x1a\x46\xb7x\xc2\xb0\xa8}nJ\xf6\xb9\xcb\xd8g" "\xec\xdc\xfev\xef!\x33\x87u\x15\x81\xa0N\xe3\xa8y\x13\xa6^\x16\x9b\x9a\xb3L\xa5R\xa6\x93\xc0\xf7\x0c\x63\x44%\x65\xdb\xe3\x37\x46#" "\xedo\x0f\x9e}\x82 \xebP\x1d\x1f\x61*\xdb\xa7\xe1_\x9f\xb1\xa2\x14\xad~\x1fg\x98\xbfm\x32\xae\x64\x34*\x64\xb5\x1d\xbe\xc9\xe5\x9b" "\xae\xccN\xde\x32\"=r\xfa\xdbZ\x9e\xc8\xdb\xa0vl[\xbf \xa2G\xdb\xde\x96\x32Z/y\xb5\xba\xe5\xcb\xb9\xa5\xe6Q~\\\x32" "\xcd\x62\x7f\xdb\xbav\xa4\x9d\xa4\x8a^\xff\xb6\x8f\xfc\x16\x36\x13\xfaj \xb2[\xd9n\xfbo\x9a\xb9\x8c\xbd\xcdv\x80w\xccX\x41\x8a:" "p_\\\x65Y\xf1\x36\xc3\x42!\x90\xb5\x9diN\x81\xddg\xd9\x82\x36\x96\xe4\xd6\xce\xa4;\x96\x45`\xf8\x32r\x81\xf4\xb7\xf3\xb5\x37\x80" "\xad\x17\xad\xba\x9b\x86\x43\x34\x38V\x31Y\xb1\x00\x16/\xbb/\x84Y+\x95\xee}\x9f\x98o\x91\xdc]\x31:~\xe5\x06\xad\x31\xfc`@" "\xb5\x82\x62\xb4\xa9\x31\x42\xa6\x32\x0e\x1c*j\xcfs\xd9 \xbb\x88\x0eK\xdc\x45S&K\x38n\x95\n\xabi\xbd\xc5n\xc1\x80u\x64\xf0" "\x87 \xe7\x8a\xf4\x8d\xa2\x18]\xf0\x8b\x08\n\xa2\xa8\x91\x1f\x30W\x1d\xfc\xad\x8b@\xb8|\x0e\x18@p@g\xdd\x41t|\xcc\x66\x37\xa0" "JN\x31:\xfe\xa4\xc1\xbd\x32\xfa%\xa9\xb8\xbd\xfe\xc7M\x83\x1d\x93\xea\x96\xee\x1d\xab\x62\x1f\x91\x9e\x07\xd4\xa3\r\xa2\xd3/\x46\r\x1d\x30" "\x8d\xfc :_\x01\x11\xfch@[\xa3\x01\xf3\xe5)\x32U\xbd\x8at\x91WQ-X\xb0$U\xc6\x01Z\x45\xf6\xce\x03\xa6\xf8U\x64" "\xe6h\x15\xc3\x33\x41\x9d\x36\xf0\xf2\xe7RM\x91Sx\x15\xb9k\x38\xa0\x01\xe9\x80\x91)<\xb6\xab\xe0\xc0\xf1o\xc5\x13\xb7O\x89\xeb\xf0" "\xac\x9d\x43G\x86\x92\x17q\x01\xec\xf3+\xd0\r\r\xcc\x1ex\xe1\"\xe3\xb3\x98x\xb1\xaf\xde\xecH\xb4\x62\x07\x32\xafnx\xb9[y\x18" "\xc3\xfcr\xc0\xb5\xc4 \x1a\xe5\x88U\xe2\x1a\x08\x97\xf9\x01]\xe6\x07L^\x33`^\x17\x45Yzj\r>\xeb\x45M\xbe\x18\xe4\xed\x1b" "P\xf5\xa2\x18\xbf\xb0\xea\xc0\x34\xcb\xb7L\x14M\x9b\xbb\n\xccoQ\xc4\xa0\x80\x34\x86\xad^\x13\x17\x1b\xc6\xda\x31\xf6\xfb\x98vs\xce\xa4" "\x43\xe6\x98\x62\xeci\x1c\xc4\xc9,\xf9\t\x17\xa7\xf1\x14\xc5\x9d\xef\x81\x1f\xb8\xeaq\xc8\xf0\x03\xc1\\\x8a\x07\xe2\\\xedo\x99\xcf\x1c\x80\xe5" "\x9c\xcc\xc7\xa9\x0b\xd0\xc3I\xa3\xf1\x37\xaf\x04\xb6:\x66\xc4\x08\x65\x9c\x19\xa8\xc8q\xc8\x44\xf4\xea\x10g\x41\xfc\xd9}\x41\xba\x8f\x17~\xb0" "\x64M_\xb2\xe9\xfc\xf0\x8c\?,\xc2\r\?\x87\xbei\x10\xc3\x05\x61\x10\x1f\?\x01\xe1\xa3\x31`\xd0\xe9\x01\xf3\x9d(\x46\xf9\xab \x62\x0e" "\x41\x91\xe3\xb7\xb2\xb8\x80WHw\xb1\x01w\xdd\x07\xf1\xd7;\x17\xbf\x03\x46\x18\x1e\xb0\x0bU\xe4\xc0\x31\xa0m\xfa \x39\x41\xb9s\x19\x32" "H\xce\xd1\xd8\x92\x32n\x8a\xb6\xeb\x8aT\x16\xaa\xc8\xd9\x9a\x8a\x9c/\rhu>H\x1a\xb8u\xc6\xa1\x1e\xa8\x05x\x8b\x87\x10\xd5\x64\xc0" "l\x02\xbe#\xae\xc8I\xb9\x8a\xde\"\x44\xdc\xf9\x63\x1b+>\x31\xf3\xa1\x31X|\x9b\xf8\x34\x0c\xe2p\xf7uVu\x15\x7f^\x33\x1fP" "\x37\xaf\x62\x9a\xbb\xcb|\x90\xe6\xa6;q\x11\x44\x9d\x96M\x9c\xe9\xc6\xfa\xee\x33\x65\xec\xe1\x92\xd1\x1e\x10\xe6\xc6\x83\x04\xa6Z\x83\x94o\xd7" "\xbf\xa7\xe6\x8e,H\x88T\xb5\x0eh\x96\x38`\xec\x8d\x41\xba\x1e\x13\xf1^iY%x\x45\x44'\xcaP\xff\x03Nh\x06\xdb\xda\x87#" "\xa7t*r[\x87\"\x15<`\x1e\xc5\xd2\x18\x1c|M\x94)\xc0Q\x38%=\x07L\x84\xa6\xd6\xc4\xdf\x11L\xc5\xff{\x16\xaahL" "\xac\x66\xc4\xaf N\xe6:~^\x86s\xca\x9a\x8b\xdb\x35\xca\xe8\xac\x03\x31\xfc\x88\xc6>&\x1ew\xd5Q\xf5\xf1J\xe3\n\xbe\x7f\xf8@" "\xae\x9f\x94\?\xbd\xf6\x07\xc6\xb9\xbe\x1d\x30G\x85\xc0\xe0-`\"\x96n\x14\x65\xd1\xf3\x37o\x64\x0e\xa4\xa3\xc7(w\x1d\x0e\xf4\x43\tp" "m\x06\xb1\x15\x44\xa8\xcbM\xdc\xfc\xb8H\xfbi\x8a\x99\xbb\x12\xf6\xdf\xfb\xa6\xe5\x9d\x89\xb6*t\x46\r\xaa\x89\xbb\xe7\xa0\x8e\xd0\xc4\xf9\xee" "\x0b+\x8f\xd9\xb3\x63\xdc\x87\x1apR\xaa\xb8{\xe5\x1a\x08#\xbe\xf7km\xa2\xbdk\x46\x8f\x34\x16\x1c\x83\x07\xb4\xf6\x19p\xf6\x38\xd8\xbe" "\xefok\xfb\x19\x91\x1e\xe8\x83\x9d\x95\xc3\xe0\?V\x0e\xafl\xee\x8a\xe9s\x9d\xe9\xc4_\x19\x63\xf6\x95\x03\xfekT\x9e\x46\x9dS\x99\x1f" "\x83![\xb2\"\xbb\xe6W\xa6\xaeS\x8cJ\x17\x0c\xc3\x64\x0c\x01\x45T\xd4(\x81y\xfe\x12\xd9\x97=\xc0\xbe\"\xfbp\x15u\x36\x87\x81" "\xc0\xf5*\xaf\xd4\x9a\xbe&\x97\xc7\x9am\x12\xa9\x46^\x35\xceug\xc5|\xdc\x64l\xb4\xaf\x82\xca.l:\x34\xa4\t\xc3P\xfe\x0c\x19" "y\x61\x18\?\x1e\xc6\x9f\xffh/\x33L\xeem|\x18\x31\xe5\xcaH\x93P\xa2\x97\x1e\x45\x08#\?\x8a\xae\x80q\xbe\x06\x84\x31\xfd\x88\x9d" "\xcaH\x63\xe8\x07\xd3\xd3\x11\xb3\x03\x8f\xa3\xe3o \xe6\x05\x63\x0b)\xbb\x84\x88,Z\x63\x06\x80\x1bSm:N\x1e\xec\xce\xc7\xdb\xc6^" "t\x9c\x93\xeeM\xd9\x94\x9b\xe6\x8a\xbaT\xc1\xb6\x82\x32\xba\x85\xa9H\xef\xa8)\xfd\x08\xa6\x9cSL\xe9\x39\xa1\xf8\x37ono\x8f\xff\xcb" "\xe2\xf2\x97\xd6\xba\xc7\xab\x18K}\xfb\x64\xf9\x92\x9e\x1e\x38\x8b.\x0eY\x89\x94\xc5\xe3\xd7\xa8X\x03[\xf2\xcc\x08\xfd\x35\x65o\x37\xfd\x83" "\xea\x63\xaa\xbb\xed\xf0\x1bQ\x91\x46]S\xa6w\x99\x32\x94\xf0T{\x43$\xd8\x9ar\x7f`J=\xf5\x34\xba\xb8!\xce\x80\x08I\xaa\x18" "\x1f\xc9\x42\x00\x37L\xd3\xc2)\xa7\xa7S\x96\xf6\x94:KW:L\xe9\x04\xa4\xc8\\\r\x10\x1b\x0cy\x38\xd5\x30\x64\xc7\xe7\xf2\x07\x86\x61" "p\xca\x89\xa1`\x93xG\xe4i\xfd\x36\xc6\xbc,\x86\xbd)w\x11\xa6\x1a\xa5\x46\xfe\x63)\x41\xc6@\x0bS\xfa\xb8\xc8\xa7'~K\x31" "\x96\xbe\x82u\xe0\xfe!\x11\x85\x1d\x1f\x94\x81\x87gq\xfe\x1f\x95\xbbSnu\xc9\xfd\xe3U\x30-\xe8\x94\x1e\x13\xd3\xb8\x98'v\x89\xfc" "\x1d\xd2;*\xaa\x42\x9b%\x17\xdf<\x13\xdf\x80\x18\x38\xa6\xdc\xa3\x99rm\x33\r\xdfG\xa5\x9e\xc6w\x37\x44\x14\x15\x1d\xea\xa7\xcc\x19\x30" "\x8d\x9fyWoO\xc4_\xe0\x90\xdf\x83\xc2`J]\xf8\x94\x91g\xa6\xd4=*\xc6\x85\x06s\xbaL-\xfc\xd1K`\xc8\xc8\x31\xa5V" "q\xca<-\x8a^\xb4\xcc\x85\x30M\xeeP\x8d\xe8\xd4\x36\xe5\xd0\xa3\xa8\xba\x1d\xec\x63O\x13\x18\xfcO\x93\x01^\x00\xdd\xc9\xa6\xb4\xf4\x9c" "\x32\x89\xd8\x94\xdb\x0f\x82\xb8Y\xf5\x65z\xb9\xe0\x1e\xd4\x94\xda\x32\x41\x14\xb8\x8e;{\xddx|\x1d\xe5\xd1\xc0\xe8u\xe3qz\xa6\x34\x32" "\x99\x32J\xd8\x94\x63\xb4\"\x33\x1fN\x19\x8ay\x8a\\T\xe9\xecuw\x00M\x8b\x9b\xe6S:\x0f\x08\xbe\x10\xd1\x02\x98\x11J\xd1\xcb\x86" "\x66\xbe\x82\xf3L\xebO\xc7\xab\xf0\x85\t\xefg\xf6Ll;j\x38~\x8b\xe9\x63\xdd\xc3\xc5\xee\xb0\x9b\xf5\x18[\x1c\xfe\xaf/\xc5\xb5\xf1" "\xff:\xec\x9d\x19\x97\xd9\x8a;\x9b\xb9i:\x1f\x38\x86/._\x1di\x89\x32\x65\x44\\\x41\xeb\x85\xa7\xdb=\x14\x1f\x07\x19\xc5h\xfc\xc8" "$\xbcS\x1a\xadL\x39\x9b\x9b\xd2\x04z\xba\xad\xe2Z\xdb\xba#\xcf\xd6z\xe2\x30\x36\xe5`\x31\xe5,`\xba\xed\xbf\xc9\xc0\x43\xc3\xae\xe9" "vx\xe0\xf8\x37\xefz\xed\x12\xb6\xabk\x33\x1ag)\x46\x8d\xbb \xe2qU\x64\xfa\xc3\x19'Z\xb6\xde\x1c\xe5\xb9\x10\x9aq\xe0\x9aq" "T\x9f\xd1\x36K\x91\xda\xb6\x19\xb3\xc2\xcc\x18\x10_#\xd8%\xa3\x9b\xf8\xa6\x91\x61T\x38\xce\xa4\x87\xe6Ri\x16\x1d\xe2g\x9c\x88*\xa6" "GW\x81\x1d\x37\x81'\x0f@\xac\x61\x66\x0c\xef\xa4\xa8\x11\xf5\x91tr\x16]\x9c\x45\xb0*\xa1\x18N\x03\xbfz\x45\xc6x\x63@\x94Y\x9c\xc3W\x65\xd0\x88\xefP\xc0\xf1\x39.\xcb)\xc7\xcc\xcc\x0f\xf0\xd8\xdc\xa8" "W\x94\x89_\\\xbf\xc9\xb0\xa4\xd9\x0f\xac\xf9\x93\xfdL\xd8m\x35\xc3\xa8\x05P\xa6\xfe\x8b_\xbd\x0c\xcb\x9c\x45\x9d\x16\x0f\xf7\x32l[\xe5" "\r\xc2\xc3r\x16\xaeQ\xbf\xc9^_\x98\\\xd1\xef\xd4X\xb8\x62\xfd&{\x45\x63\xe1\x1a\xcd\x16\xad\\\x44\xbc\xe7\x30\x35\xe3\xde\xb4\x62\\" "\x99l\xab+\xb0\xa7'\x9d\xb9\x62\x18\x9a\x85\xefNX\x96\xac\xd0I>\xe7\x98\x39\x13\x83\x07\xcc\x92\xb3/GM\x91\x8a\x34\xf5\x9e\xb1w" "\x96T~\x1c\xb5T\xa0\x38\x98%\xd5\xeb\xf8\xb2\x9c~\xf3;\xd5\x86\x63t\xbe\xf2:,L\xdd\xfb_\x66\x9aw\xcf\x64v\xa8\xfaI\xb2" "\?\xd7O\x8en\xf1\x1b\x0e\x44\xb3\xa4\x8e\x36\x96\xdc\x8e\x1c\xbd\xd2%\x8d\x32\xb1\xe2\xc8\x65\xa9\x8at\x00\xf5h\xac\x33y\t\x99\xe2\xa6:" "\x62\xa6\xfe\xe5\x8f{\xf4<\"\x63\x88\x96Y\xd2\xe6\x19^\xdb\xdb\xf5&\x9d\xf2(\xfc\xbag\xdcIS\xdcY +\xa3\xda@\x44\x96\xf5" "\xe8\xc2\xd1[p\x32{\xa2\xcb\xf5\x8c\xbe\x03\xb3\x04\xb3U\x41\x96\x08\x1b\x04\xfb\xed\x99\xd7\x05\xa6\xad\x14\x9cS\x85=\xa3\xff\xad\xa2\xe6V" "\xe7\x0b\x01\x0b\?\x13\x06\xb3\t\x15\xd5\x44\x00\xc6\xb0\x64\x0c;\xa4,\x19\xed\xc9\x44\x37j\x34\xd2\x83'=\x01\"+\xce\xe8\xc6\xaa\xe8O" "\xe1\x0f\x9a\x9e\xbf\x01\xa1\xc6\x9d\xa5u\x1e\x87\x89\xe0\x8cv\x0b\x8a\xd1G;\xfa\xac\x05\x36\xf3\x8d\x62\xad\x11\x1a\xb8\r\x31\xb1\xc8\x38k\xb4" "\xda\x82-\x9e\x19\x95y\x33\xef\xfc\xbc\x08\xb8\"\x98q\xb8T\x94\n\x44U\x89\xb1\xaf\x8f\xc0\xaesI\xa5J\xdd\xf8\x8c\xfeH\xb3m\xed" "\x13X\xc7\x45\xb9\xa8\x9d\xd1M\x65\xc6\xf5\x82\xe2.\xdd\xccl{\xcf_\x61\xb3\x65\xb6}:&\x9e\x10s\xc4\x16\x10\x63\xf2l\xdb\x46\x07" "\x46\x87\x8a\x99WV\x41N\xf4\xbf\xd5\x44~\xf1\xc1U\xc3\x37\xc7\xd2o*j\xbf\xe3\xdc\x08\x88\x8e\xe7\x9b\x81h\xbe\xb9\xcd\xf7\xcdr\xfd" "N\x10\x96\xed;)X\xc9~S\xa1\xf9\xbd\xad\xf7\xd5\xde\x1e\xb3;\x61\x9f\x8e\xec\xb8\xe7tk\x98s\x8c\x9b\x33\xf6\xf9\\\x43\x37W\xaa" "[\xf4\x18s\x8eVs\xb3\xc8/\xd0\x0bT\x99\xee\x31\xeeXR\x38\xa0\x38w\xd4/\xc0\xe1S\x99z\xd5;\xc3x&\xb8\x00\x62\xf9\xa6" "\xc8\xd9\xd5\\\xf3I\x8e=\xea\xad\x32\xdd\x31$S\x0b^\xder\x92\xfbJ\x37kj\x9c\x94m\xf7.\x03\x43\x10\x94y\xf2\x82\xc7\x65\x0e" "S\xb9\x91=\xa0L\x8c+U.\x93\xe6\xe9\xd1\x14\x38\xbe\x03~\x02\xf9\x1a\x17\x7f\xf3\x43\xf9\x1f\x1d\xbf\x92\x9d\x11[Iq\x95\\\x1f\x82" "\x61k\x61\xf1\xb7\xb6\xeet\xc1\x02\x16l\x13\xbf\x81\x08\x13\xb0\x88\xf2\x03`\xa9\x0e|\xbc\x63\xc3[p\xa8w\x0f\xf8\x85\x0c\xd0\x0c\xf3\xba" "\xa0[\xbd\x62\xe6\xdaj\xc4i\xe1\xe3\xe3\xe7Q|W\xb5\x9c\x34\xc3\xf0\t\xb6\xa2\x16\x1c\xa2\x17\\\x05*\x86\x0b\xc2\x80\x63\xc1\x10\x95\x0b" "\xea\x81\x16\x8c\"\xb9\x88\xcb\xb8g\xe6m]\xc4\x88\xed\xbe\xa0NK\x91\x96\x35\x8b\xf8\x39\xcf\xadl\x11/\x80\x08O\xb5\xa0\xaf\xd6\x82\x31" "k\x16\x1cp\x14\xe9\x17\xb8\xe0\xb8\xb2H\x1a\x35 \xd6P\x0b\xaa\xb1\x17\xc9\xeb\"~\xc4\xbdR\xe1\xba\xe0V\xf9\"=p|\xa2\x66n" "\x91\x1e\x9e\x03\xd1q-\xfc\xc6\xd2\xa7#\xa2\xfa`\xef\x9a\xbb\x1c\xb8 \xe2M\xb3g[\xa4\x88\xdc\xa4\x98y\x17\xec\xa4\x14w\x19\x31<" "\xf0\xa4 ny\xdb\xb1J\xbd\x64\xfdp\xd5\xf7\xf2om\xcf\xb1\x8c\xa0\xf1\\rV\xbb\x8c.\x88\xd0>,\xa3R\x05\x08S\xf2%\xa7" "\x99\x1e\xcfP#\xfc\xab\x7f\x35\xdc\xf3\x97\\\x08.\xb9\x02_R\xa5\xb5\xa4\xb1\xe7\x92\xf1\x85\x96\x1c\x35\x97I\xf3KW\x90\x18\x1f\x97\x34" "\xe9_\xca \x14_<\xb1\xd3ZR\x1d\xeey\xba\x96\xcc\xf0\xb5\x94\xbe&\xf3\xdb\xedp\x9f\xa8u\xa3\xad\xe1\xaf\x81\xed#G\x9d]\xdb" "L_\xd8\x66m\xa8\xa6S{\xe7[\xcb\x11\xd8>\xfd\x9b_\x39\xaa=\xb6\xc5\x8cS\xb6\x06\xda\x18\xac\xb8\x04\xfe\x14\xe3\xef\xd7\xe8\xbbK" "vo\x88\xf2\x34\x84m\xaf\x88\xe6\x8b x\xba\xc6\xccR\xc4<\?:\xe3\xaf\xce\x06h\xb0\"\x16\x88\x17U\xc4_h\xd3pV\xf0\xe9" "\x90XW\xebvS\xa2\t\xb3]&\xc1\xf6i\xbc\x37\x80\x8e\x44\x98\xff\xd6lM\x04\xa5%\xca\x98g\x13\x35\x61\x1f<\xe3\xac\x01\xe4S" "\x44\x8b\x15py\x97tJi\xfe\x17\xcc\x66\xd1\x86\xa1\xeb\x06[\xac\x90+\xc4\x18\x14!&\"\xde\x8c\x88\xeb'\xb9!L\xf8\x94\xf5\x81" "\x1b>\x87\xf5\x7fz\xdb-\"\xee\x1d^\xc9\xc2m\x8f\\\xf1\xc3\x11\x8b\x08\x11m\xd5#x\xb6\xe7\x98y\x19q\x01\x8f\x05\x85O\xfb\xd4" "\x8b\x1d\xa6\xc9\x86\x9a\x41\xf0\xb3\xe4,\xb9\x9a\x44\xa5\x36X\xed\x44\xf7\x95'\?\x7f\xcb[Lv\xfe\x9f\x63n\xbf#\x87-\xd8\x96`\x93" "\xf8\xf0\x88H}\xedS\xff%\x06\x02\x43\xaf\x0eI\xe9\xc2Q\x8bp\x84gO\xae\xee\x80\xff:\xf2\x07\xb1\x8a\xcb\xc0\xfaQp\xc5\xaf\x9a" ";\x8d\"*\x62\xf2\xfbh\x98\xeei\xbcg\xb8\xc6\x0b\x63!j\x94z\xb9\x0c+\x89N\xb8\x85]\xe4\x33,uv\xd5w\xcc~\xe7i" "\xe8\x88\x01R\xc4\xe7\x63}\xddM<\x07\x62\x44(\xe6\x88\xcf\xc0\x1e^M:\xae\x12y\xa2I\xceQ^\x38\xec\x43\x95\x15\x88\xef\xc0w" "\x14$\x62\x10\x18\x46\xa5q\x34\xe5\x1d|\xf1\x1a\x8b#t%\x10\xa7\xa8\xbd\xe9\x66\xe1\x98\xe6h\xcd\xe9\x86\x63\x82\xd5\xdev\x7f\x1f\xc1\xb9" "\x94\xad\x1c\xe5n\xbc\x8d#\xc1k;\xf7\xb7\xbeq\xd4\x34\xc7\x43\xa9\xee]\xa8\x98\xdb\xb9\xb8\xf1\x63\xc8W\x9cK\xac\xb7\x16\xb4\xa8G\xed" "\x1c\xec\xc4\x0c\x61\xb1\x07\xd1\x36\xb6M\x8c\xab_\xb0\x64h\xe7\x31\xa6\x1b\xaa*\xe4tM\xb6t\x8c\xdb\xdf\x08\xb5\x61\x0c:<\x11\xcd\x8c" "\xc1\x30\xceo`P\xd9\xce\xc3\xa2\xc1P}\x1b,\x86\x88\x31i\xb9\x91\xed\xd1\x82\x8dr\x98\xa5\x1a\x8b\xf3\xdd\x1d[\x01\xcfZ@\x0b\xa3" " X\xe2y\xaf\xce\x88k\xc7\xa8\x00\x7f\x1b\x1a\xe3H\xde\x9a\x99}\xe8\x01\r\xf9" "\x9e\xac\x07`\x1b\x9e\xdf\x8c\xd7\xda\xf9\xad)\xd3\x05\x65\x42P)\x44\x87]\xb0\xfa\xc0\x31\xcaM\xe0\xd9\xd2\xd6\x1c\x9d\xdb\xc7_L\x81\x9c" "\x41\xab\xd8\x66\xc0R\xc3\xe8\xe4\x1dI\xda\x8d\xc5\x85\x9f\xd8r;\t+\x9c:\xea\x44\xee\x38G\x96\x07\x9a\x8e\xcb\x30\xf8S\x81\x35~\x61" "\xaf`\xcc\\\x14\x02K\x17\xb9\xa8\x88\xdf#\x42\xba`\xa5\xea\xa8\xbe\x0c\x18\xbc\x95\x65\x9e\x44\x98j\x64\x1eN\x9d\xb1T\x0b\xf1\xb0#\x35" "*\xeaY\xa1\x30Z\xba\x61R\xf9\x85\xc7i\xbb\x90>\x1d\x38\xc6\xe5\x1a\x42\xf3\x18\xd3\x15\x83\xcd\xba\x84\xed\x30*]\xc4gUg\"\xc2" "(\x04\xcc\xac\x1eL\xd4 w\x98`(S\xd7\x9b\x0b\x94\xac\x97\xb0\xa0\x46\x37\xb6\x8d\x00\x61\x9b\x63\x62\xc3\x11*\xbfv\x01[\x62\xed\"" "|\xbc\x0c\x39\x84\x17\xa3\xa9\x95\x46\x11\x9btm\xfa\xd5\x19\x62\x91%\xa2\xd9M\xb4K\xf0SU\xb4\xa7.\x45\xa7\x63\xe2\x12\x88YH)" "\xfaw\x01\x34+\x96v\t\x1b\x88\x82\x16\xa7]\x10\xc3i\x89\x15\xbb\x84\x90\xd8\x82\x16<\xba]J*%\xa0\xd9\xce\xb4K|\x13\xa5\xf4" "\xb8\x0c\x34\x63\x63\x41\x0bW\xd1.m\xe7\xcf\x8e~*\x88\x91\xe9o\xdbW\x88\x1d\xa6\xb8\x00\x62\xeau\x85\x8c\xcdmZ\x06\x1bj\x0c\x00" "\xf3\xfdl_\xc5\x17# J\xe4\n\x1b\x36\x82\xefu\x34'$\x86m_%\xbd\"p\x34\x04\xa2\x39+\xaa\xe3\x89\xa9\xab\x8c\xf1\x41L" "\x94qh\xbeO\x66\xe3\xf2\x95\xb4\xf6\xcc\xd5\xd3\xf1>\xf1\x10y\x80\xda\xe5\xbf\xb9\x35\xc5\x32\xe6\xd4\x82\x16j]\x10\x1dh\x19\n,\x43" ",\x89\x44l\x97\xb1\xad-\xa2\x19\xf6\x08\xb7P\x02\x82\x16\x36X\xd0\x1cJ\x14qV\xe8\x95\x04\xbf\xec\xbe\xcb\xc9`\x9fh\x85XN\x8f" "\xf1{\x0e\xe8\x65\xcc\xab\ru\xdf\x13\x45\xaaLs\xaa\xa1\xfe\x19\xeb\x1cp\xccR\xa6\x46\xed\xe8\xfe\x85\xe1\xae\xd3\xef+Gu\x61\xdc\xbb" " \xfb\x00\xae;qs\rK\x9avyk\xa1\xf0\x14\xe7\x32\x9b\x89&\x35\x30SS(N\x88\x36\xfa\xde\xfcYz\xb1\xf6\x8d\xfc\x19\xa6" "}\x1b\x90*\x7f\?\xb5\x64}\x1b\x9d\xd9\xa7\x95(\x37\x07\x9a\xee\xcd\x30\xb8\x35\x81\x99\xd7\x84\x89q\xf5\x98\xbd\xb1\x32\xac$\x44\x44\xb7U" "\x81\x35\xaf\xa1\x9c\?>\xbd\x06\xf3\x9f\x97G\xc0\x61'\xfc\xf0\xb7\x8a\x8d\xe7v%\xb6\xa8\xe7\x86\x99\xab\xc7\x85\xb2\x8e\xb4\x98\xefV\xe2\xf3" "\x05\xb0X\x01Z\xc8|\x41\x8b\x9e\xe3\xc9\x97\x0c\xe3N\x13\"\xa6\xce\x15\xd8;yR&\x41sP\x17\\\xdb\xc8P\xe1\\\xb6\xb2\xc5\xd8" "_\xf1;\x14\x64-\xaf \xfa\x8a\xa0\x85\x01iW\xd9-W\xb1\x06\x85\xe8\x99\xdb\x45\x34=\x82\xa2\xddH\x95\x15\xb3\n}\x82\xa0%\xc5" "\x11\xb4]l\x43\xb6\x92*\xd2\x62\nZ\xeeH\x41[\x42*>\x10\x9f\x1d\xff~\x1b\x10Q\xa7\xabXU\xb6\x99\x97M\xd0T\x11\x82\xa6" "\x8ahW\x91\x14\x43\xf0\xfc\x00x\xf1\x04\xc4\x04\xbf\x8a\xac\x07\x82\xe8N\xaa\x9c\xa3\n\xdek\x32\xec\xbd\x1f\xb0V\x1e\x38\xb5\x0e\xa2\nu" "\xb5\"\xce\x96\x9c\xed\x03-\xdc\xac`\x19w\x95tq\xb6\x64x\r\x1cU\x89\x8f\x8eX~\x8b\x88\x46Y\x65\xc5\xaf\"p\xa5\xa0\x99\xe0" "*Z\xf3\x90\xc1\xea\x86\xd8\x05\xe6\xdf\x1d\xfd\xae\xa0\x36P|u\xf4\x97\x91>\xa1\x64\xd3\xe7}\xe2\x31\xb1N|\x01\x9a\x15q\x9b;\x36" "\x82\x33\xe2\x37\x1e\x10\x06\xf4\x82\x9b\xab\xbf\x45\x91\"\xde\x0cL\x80\x04\xab#\"\xde\xcc\xb6\x45\xb4 \xef\x82\xa6\x92\x14|\xc1\x9b\x62\x9bV" "\x8c[\xf6\xd1mt\x33G\xbeh\x11\xdb\x33\xa0\x39\xdc\xb6o\xb1\xef\xdb~\x80Q\x45\xfb!\xba_:\xb2n\x9a\xb8\x1ap\x64P\x16\x1d" "\xcf\x39\xa9S\x06\x15\x8d\x89\xac\x87\x0f\xd8\x91j\?\xc4\x9f\x45\xb8*\xb7\x1f\x12S\xf4\x08\x9aS\x61\xfb!\xfd]\x44\xcb\xa6L\x37\xa2\xb5" "\x35\x8a\x07.=\x1f\x90\xe2\xa1\xfd\xc4\xc5\xff\xd3\xdfo\xce\x91\xfd\x81\x8a\xd2\x8dql}\x92v\xf1\xb7\x19\x42\xad+\xec\xc2J\xf1\x89+" "\xd7\xa7\xb8\xf6/\xf3),\n\x04M\x9b&\x88\xd5\xf8\x93\xac`\r\x13\xac,\x9e\xb8Rz\x82:T\x10k\xfa\xf6\x1f\x06 \xc5tr" "\x19\x9f\x8f\x11.K\x0e\xacl^\xda\xb6)\xe3\xc4\xc5\xb8\x90O/\xbe\x35r\x8d\x45>\xc6\xb1\xca\x38Y~ \xff\x8e\x1d\xd0\xf8\x91\x15" "\xee\xb2\xe9\x81\t,\x9bM\x0cI\xc4\x84\xe5\x64\x1d\xb7\x44\xa6\x31\x65t\x31\x17\xb1p\x1d\x9d\xe4\xc2\x15\xces!>\x91\x07\xc2\x15\xbc\xe0" ")\xd1j\xdbj\xb4]\x19\xb3\xc8\xdb\xe1\xdb\xee:\xeb\"k@;z\xbc\x83\x85\xaf\x89\xf0\xf1\x11\x91\x85\x12uO\xd4\x7f\xca\xfd\xca\xf4" "@\x19Z[\x11{\xfbH\n*\xe2\xf8\x44\x1f\?W\x04\x9b\x94\xa3\xef\x99,\xec\x03\x9b\x1f\xa6\x9f\x15.\xe9\xec\xc0\xef\xb7|\x1c\x1e\x7f" "R\xe6\xb2\xae-\xbf\x63\x1do\xcb\x8f\xb0\x43 \xe2\xf2;:\x39\x0e\x17[~K)\x43\xfc\xfd\xfe\xdb\x8c\x42\xc1\xfd~#\x9e_\xbb\xcd" "\xf9[;.\xcd\x80\xe8\xca\xda\x96\x8a|\xdf\x45\xe4\xf4uQ\xa7\x1b\x87%\xa8\xb2q\xac\xb7\x9f\xfe\x36\xfe\xcb\xb6\x8d\x13\r\xf1h\xe9:" "pxs\xed\"\xd7\xae\x14\x33\xafJ\x0fL\xf7\\L\xfeuP\x04~\x00\x61\xc7\x44lV\xc3\xd1;\xe9\xf0\x17\x7f\xcb\xdb\x0c\xa3\x8ah" "\xc7\x34\xbb\xfb\xc1;\x02\n\x64\x0e\xefV\x62\xbb\x63\x08\xbd\xedo\xee\xff\x1eNVG\xc9\xea\x34\x9bm\x43\xbe\xf5u\xcc\x01\xaf\xad\x8a\x16" ">\x9c\x8a\xcd\xaa\x97o`\xaa\xc2\xffx\xf4\x63iq\xea/\x85\x0bx\x41\xfe\x62\xfa\xf1\xf7\xb3vQ\xfd\x9dYk\xe4\x16\xe4\xfa\x14g" "\xe9\xde\x97\xb7\x15jR\xda\x1a\xbd\xb3\xd7\xf4\xf3J\x85\x82{\xbf\x8a\r\xaf\xb7\\\x19+\xfa\x63\xe8\x33z.P\x63\x30\x65\x36\xd1\xabK" "\xba\x19\x38\x66\xea\x13\x35\x1e\x32\x0f=O/{[K\x9b\x65L\xad \xf9j\xb6\xf5/\x8eJ&.q\x1e\x04\xb4\n\"+\xeev\xd5" "`\xcf\xa7\x62\x8a\x65\xd9\x87\x1a\xe4\x61\xba\xf3\x01#\x0c\xc3\xbfy\x8e\x13]\x65\xd1\xa4\x9b\xe6\x9a\xce\xd2\xe9 nM\xc8\x96\xf1\x41'\xfa" "\x9eJ\xf7\x0c\x1fM=\xe6g[\xb1\x91S\xa4\n\x43Y\x14\xae\xb4\x82>\\\xc4\x45-:{\x44\n`\x65\x1d\xe0\xf2=\x9a\xdeQ\\" ":jL#S:\x1b\xa3\xfaP\x45\xec\x18\x88h^\x33\x82\?<\xdd\xcf\x38\xc9}R\x9c\x01\xd7\x45X\xbd\xa8\xf8\xec\x18.\xf2{\x41" "\xdc\xfd\xf0w\x03]\xbe\x88\x9b\x11\x14\xf5.\x62\xc3\xc9\x19\xc2\xdd\xb5\?\xa2\x03\r\x86\x0e\xf1\xb0\x04\x83i\x11\x31\xce+\x46Ou\x17\x39" "\x97\x30[j\xcc\x8bT\xf4kS\xdb\xfc\x11\x9d~\xc1\x1eN\x44\xac\xef>\xa2\xf3\x15W\xfc\x1f\x30\x36\x14,\x06\xc4~\xa8\x88%\xfe\n" "\x8b\xf8\x0f\xb8\xcd(\xce\xb9\x92\xfa@\xaei\x43\xeap\?\x42\xdc\x41\x15/\x88W\xd1\xf8\x07\"\xe6\xce\x1f\x9a\xf5\x96\xef<<\x10\x34\x93" "\x8a\xf0\x98\x81\xf8S\xa3R\xe1\x03\x96\x8c\x82/\x15N\x07\?t\?Ps\x37\x0e\x93\x9bz\x38\xb0\xde\xb8\x18]\xecG\xc7\xafp\x13\xb7" "\x03\x32\xf0\x66\xbe\xb9}\\\x45\xaf\xfb`\x98\x87(noQ\x35\xa2N\xc5\x11N\x63\"\xf6\x0e\x89\xef\x8eH\xf2$\x62\x9f'\xe8\xf3\xea" "\xfe\x42\xd4\x41\xe7\x06\xc1\x35\xc0J\x07\x9a\x19\xacu\xe8\x07t\x87!\x7f!\x35\x45\xf3W\xa1/\xfd\x08Y\x46M\x0c\xefj\xe8\x0bP\x11" "\xfb\x8e\xa1n\x0c\xfb\xbb\x8b\xaa\xe8u\x1c\xe1Z\xda\x1f;\xfe\x05\xa3}\x11\xc7\?p\xd1\x17q\x82\xea\x8fp*\x86\x9c|\x8b\xd8\xf3:" "\x1e}\xf3\xae\xe6\x07\xe1\x1cs\xbe\x1e\xf3\xa9o\xd3\x64\xdf\x90z\xd8\x8fh\xf1\x8e\x1dt\x11\x97Uo\xaf\xb0\xcdQ\x64\x45\xfdY\x86\xcb" "\xfc\xf2\x31\x7f\xd1\xd0\x35\x42\xd9\xeb\xfe\xb6\\Gp\x1f=\xd0u\x0c\x06w\xc6\xa8\xa3\x34\xb1x\x1e\x63\x13\xc6\x18+\xa3\xd9\x0e\xbe\xc5g" "W\xce\x38\x91\xfd\xe0\xa6\xc3\x87&)l\xa1q\xcb*\x83\x9a\x87\x8f\x38\?J\xca\xdf\x9cW\x7f\xc4\x85\x86\xdf\x62\xaco\x17\r%.\xf2" "n\x8bh\x97\x1a\xf8\x8c\x85\x83x#\x82\xd0\xc4|\xc4M_h\x7fpi\xa2\x98\xe9\xcc\xbc\x82\x08\x66\x1f\x90}(\x12\x43\x19\xfak@" "Z%\xc1\xe1\xb9\xa3\x1a\xb2\xf3\x9d\x0b\x0bw)\x15\n\x63\xedG\xfc^\x87\xcf\xa1\x88P\x1a\x08~\x87O\x7f\xca~\x37I\xbe\xebO\x92" "\x9c\x8d\x81\xe7\x45\x7f[\"\x86O\x8b\x05G\xce$T\x44\xdc\x30\x11Y\x91\xcd\xd3\xbe\x42\xed\xc7\x07WU\x82+\xbf]\xaer\?\xfc\xee" "\xd4\x87\xd3\x03`\x80\xb1\xb2%\x8d+\xaf\xb0\x89\x14\xe9\x88w\xd1\xe4u\x9a(\x93\x44V\xe8\xec\x44\xfc\xe1\xd4\xea\xd5\xf2\xe7\x89\xf8\xca\x13" "\x8c\x1e\xc3\xf5\xc7\xe8\xa6\xbc\x87\x95\x89\x86\xbe}\xac\xd1\x84\x95\x10\xcc@\xc5n\x9c\xdf\x84\x82\xf8\xa9\xa4\xbfx(o\xa8i\xee\xc2\x11." "J\"\x62i\xf7\x91\x16\xa6\x88\x44J\x11\xef\r\xb9\xbf\x04\xb1\xca\x13|\xe3\xc2\x0f\"\x8frT\xf1\n)(k\xbf\xe4\xa7\xe5/\x82+" "\?\xc5\xedu\x95\"\x9e\x37\x65\x31\nzG+\xa2\xbfj\x15\xc7(\xbet\x34\xf2\xda\x95\x8e\xab\xfe\x90\xe9\x18\x63\x12L\x63\x05\xdf\xcf\x1d" "\xd5\xe5\x39\xcf\x1b\x9b\xa1\x9c\xd3\xaf\xe3\xf0\xc3\x35\xaf\x8b\t\xcf\x87\xb7\x65\xb9\x46\xa6'Vo\x66\xb6z\x8d\x9a\x8bu\xfe\xc7\x96\xed\x06\x0e" "$\x82\x1c.\xb7\r\xbc\x92`&+\"\x16\xa2\x1f\\\x88~l\x07W^(\"z+\xd8\x0e\xaa\xe1\x32\xaf\x35\x1f\xd5\xbd\xa3\xdf\xae\\" "\xc5\x38\xe3\xb4`\x66\x89\x10\x1f\xa3\xc6\x03\x99\xdd\x97\xaa\xe9\x10Q\xca\x45\r\x95l\x1eIr\x00]\xd1,\xb2\xe0\x62\x82\xfd' *\xd9" "\x8c\x15w\xc6%\xe7\x0c\x36\xf0\x8a] \x8a\xd2\x07$\x45\x8e\x99\x14-{x>\xca\x85\x8f\xff+R\xf7\xa4\xccO)\xa2\xa6(\xc1\x34" "s\xb6}j:\xca\xbd%\xad\xcb\x0cK-\x8di`\xa8\xb2\xc6\x06\xb7\xd8\x90o\x7f\x45'M\xe2\n(\xd7\xc4\x9a\xf8\x0b\x36\xb1\x82\xc5" "\x03 z\xdf\xaf\xe8z\x0f\xe8\xdf\xfb\xb7\x0f\xa7\x19\x11\xf1j\x15\x39\xa4}q\x9d\xf0\xc5\x81\xe8K\xfe\x80\x96\xf0[\xd0\"\x9f\t\x62\xdc" "\xfb\xe2\xa8\xf8\xc5Z\xf3\x15\xd7\xca@\xe8\xd5\xbe\x90\xe7M\x10\xaa\xf3\xafx\xfa\x02\x34s\x45\xc3\xb4\xd4\x84\xed\x9e\xb1\xed\xfc\x31m\x14\xc0" "\xbe\xac\x08\xbe\x90\x81\x44\xb1\xe1\xe8\xb7\x89\x88\xd7\x82\x16\x08\x44\xf0\x96\xd8\xc5\xe5\xe1\x01(\x88\x61\xf1\x0b>\x8c\x82\xd8o\xfb\x82\x0b\xb0 " "\xb6\xc7\xbf`\x93\xd7\xfe\x42\x00\xfa\xf6\x17u\x11\x82m\xe2\xc0\x31\xd9\x7f\x45\xa4k\x61\x8e\xb2\x38\x81\x02n\xce\xbal\xad\xed\xde\xdc^\x44\x34\x7f\x7f\x43Kg\xbcO\xd6!\xf2^\xcc\xe0G\x31\x1f]" "~\xba\xc8\xed\xf6\x35w!\x15\xf5\xb6N\x97\xb0\xdc\xc3\x81\xf0\xa6\x94\xc9\xda\x36y\xee\xedX\?>\x18:\x63\xc1\x8b\xd8 \xfa\xd9\x97\xff" "\xb9\xc6\x92\xea\xec\x35\x32{\x08\xaeY:\xe8O\xd7\xd1\xfe-\xf0\x10\x8f\xa8\x61;\xe7\xc7T#\xac\xa3\x93k\xbe\xaa\x35\xd5\xce\xeb\xe8\xf4" "\xc1\xd1K\\\x44\x8e\x05*\xc2\x87\x00G_\xfa.RM\xb3\x8er'\xd4\xb3\xac\xe1\xfc,x\xd6\xa0-\xc6\x1a\x89\x81\x15\xf1\xdc\xc1\x96" "_\x44l\xe1\xac\x39\x8b[s\x91\xb4\x46\xbaQ\x41\x0b\x80\x64\x18\x9f^\x87\xc7\xba\xbc\xe0*\x46\x44\xff\x62\x97\xf8\x46\xfc\x44(u\x11-" "\x8a\xa7\"\xeaM\xf4\xef\x94\x88\x82G\xbcN\x45\xbc\xf1\xa8r\x14\xbd\xe6\xd9\xd4\x94\x89\xb8\x63|$\xbe\xde\xa8\x86\x37\x45\x45\xfb\x1aq\x0c" "\x0c\xb5\x1e\xe4Pg\x34\xd1x{\xcd\x15\xf2\x1a\x66\xb3\x86pJT\xf1\xd6\x31\x14\xbfL\xd4*M.\x35\xd7\xa1\xbc\xdc\xf1\xc1\xc4\xdd\x19" "\xf9\x9e\xda\xa7\x8e\x32\x38!\x39\xa2\x19\x61\x1f\xf9\xe1hrK\xeb\xa3\xf5\xceph\xed-J\xff\xfc\xecZir\x9ci\x1a\xd3t\xa1\xac" "$\xdd+\x0e\x19k\xd8\xf3+\xbeP\x07\xbc\xe6\xf4\xd2~ \x45\xb0\x17X\xfc=\xa5\x65\xd2z\xb7\x1aS\x11jr\x44\x66\xd2\x03\xbe\x00" "[#\xda\xa8\xe2\x17\\OT\x0c->\x1a_s@\x16\x91\xd5h\xc2r\x9c\x1f\x84\"\x9d\x8f\x38YYs\x8a\xa1\x98\x9c\xf2\x62\xe6\xfd" "/\xf8\xc3:\xf2\xc3\xa2\xc2\xae\xfa:\xfa\xad\x86\x13\x89\x08\xad\xf5:\x94\xdb\xe6\xd0\x9b\xa8\x46\xa8\xdc\xd3\n*\xfd\xc4\xb6\?K\x0fZ\xe9" "\xc1\xee\x13y\xf9\xecl\x84!\xf7\x93\x1c\xda\xbb\xf1\x37\xa3\x0b+\x16\xbc\xd7\x34\x41\xbfL|\x88Z\xe2\xe7\x10\xf4\x82\x84W\x97`\xae\xe4" "\xa8y\x38`\xe0\xb6\xe6\xbe\xff\xda\x0b\x80\xebg\x45o'q~\x91\x8ey\x13\x30O[\xc3\xff[q\x8a\xb0\x9a\"^\xa2\x05\xc7\xe5/" "\xc4\x92\x14\xd1L/\x92\xfa\xaf\x9cI\xdfs\xf1\x9c\x87\x9f\x89\x33\xb5\xf0\xc1\xc2\x63M\xc3\x83u\xf0|Pq\xed\xf8\xb7\xb8\x94V\xe6L" "S\x0e\x1f\xb2\x84\xaam\xaf\n\xf0\"\x34\xa4\xd6\x64Ms\x31\x45\x35\xb8\xb8\x61\xf9\x85%\xe1Z#X\x42\xc5%\xe2\x9bw\x9f\xc8\x8c`" "\x18\xb5\xee\x32\"\xf7\x42\xd6\x88\xe4`\xe8\x9d>W\x85\x8a\xaa\x30\xf2\xb7\xf6\xf0\x1d\xc4\xa7\x0e\xf7&T\xd4\xb0i\xcd\x93\x0c\x0b\x85\xf6\xcc" "\xdby\x41\x7f\x1d\xf7\x1e\xffV\xbc\xef!_\xf2p\xe5\xa8\xc5\xda\x39Pu\xe7l\x05\xd3Y\x39\x0c+\xca\xd0\x99h\xdc\xbb\xf9itq" "\xe8,\xd4#U\x34\x8f\x34\xe0\x1a\x8cv\xe4\x00\xda\n\xed\x1c\x15\xad\xba\x16\x02[\xb3v|\xe5h\x1a\xb2\xf6\xdf\"\x61\xa4\xa1\x9f\?\x61" "\xcf\xec\xedX\xf3\x8a\xe8@\xf7\xedL{M\xde\x34\x97\xa6k\xd8\x03\x0b\xb2\xd4\x34\x12;[\x97,;\x81\xadS\"\xc6\x1b\xe9U|\xd8" "J^\xc7\xf0\xe6\x10\x11\x33\x96\x35w\n\xd7\xb0\x1en\xaf\xd3\xfd\xdbL\x1d\x44\xc2,\x43oJ\xe9\xd1\xaf\x97\x9c\xcc\x33tJ\x00\xeb\x33" "\x65\xc9}\x13\x16\xefm\xc6]\x32\xcc\x8c\xde\xc2|\x84N\xcfQ\x1d\xd3\xe2\xd4+\x91\xc6\x83\x90\xaa{\xcc;\xe9\xa0\x12\xd1jOQ\xff" "\x63\xc3p\x9d\x8e\xfa\xc4\x91\xcf \xe0^\xa9\xb8\xa6\x89\xd0\xda\x1b&L\xf3\xdb\xcc$ig\xd1\xd0\xe1\xd8\xfe]#\xa8\x88\xa1\xd4\xa1\x0c" "\x93\xaf\xfb\xcbR\x66y\x9a\x44\x9c\xec\xc9\x9bI\x1a\xfc\xda\xa4\xa0\x03\\\x65\xe8L\xd3\xe7\xb1\xb2\"\x12\x8c\xa0\x17\xeeg\x85\xc8;\xfd\xfc" "\xf6\xb6\x94\xb2\x17\x44\xacW\xc1_>\xdf\xe6\x94x\xe9\x18\x8a\x7fs\x99\xbcu(\xa2\x9b\xda\xee\xe9\xc4\x36:\x43;\xa2\x9aw\xcd\xe9\xba" "\x62:\x1bp\r\xb2\xe6\xfe\xa9\xa2\x66*\x7f\xbe!{'\xa2\x11\xf9\x34G\xd3\x01\xf3V\xb6\xed!\x42\xf4#p\x8b\x1c\xc0\x86\xd7\x9a\xbb" "O\x8a\xda\xf0.\x0f\xa3\xc6\x9d\xfa\xb0`\x0f\x62\xad\xa1\xb3\xce\x1e\x11\xb6\xc3\xd8v\xd0\xc8\xb2\x45\x33\xb0\x39Z\x04\"Yu\x0e\xe0\x9f\xa9" "x\xe6(K\xcet\x33!+\x10/\x1c\xa5\xbe\x42W\xa1\xacH\xac\xe9\x9b\x19>\x91\x35\x89\x9a\x0c\x31\xea\xf8w\xd5\x1d\x11\xe1\x83\x8d\xe9" "\x80\x1b\xae\xa9\x0c\x41J\xc0\xe6g\x81-x\x07K\xde\xefr\xb9m\x8f\xb0\xb8\x13\xb6\xe2\x19V\xbc\x93U\x1bh\xa6\x9c\x86\xaaq\xb5\x19" "\x84\xb2\x07\x43\r[\x7f~\x0cs\x02\xcdk~\xe4\xa8\xff\xcd\xb4[Y\xdb\xd1\xc2\xc2i[\x84I\xb6g\x42\x37\x94\xb2\xf2\xb3#T\x9b" "\"\xca\x0e\x06W\x86\x16\xce\xfb\x39\xc3R\x8b\x1f&,w\xaa\xe6\x91\xcf\x05\xb2\x16\x30\x8f\xd2\x86\xbe^\xf0\xf2\x9cX$\x36\xa0\x83\x13\xd1" "\x42\xf8\x08\xda\x14O\xb0u\xa9\xa1y\xfdh\xebr{\x9d\x8b\xc7\x8f\x64\x0f\xc9\xe1=\x32\x43;\x0b\xdf|\xb8\xd1\xf4\xc2\xa7\xe7r\x00+" "\x14;\x96\xfd\x86M\xa6\x04-H\x80\xa0\x05\xc9\x14\x9c\x92O\xdbxy\x81\xb9\xc7\x91\xb1T\xe6\xad^\x30\xdf\x9d\xa8\xf4\x81\x61_\xed\x8d" "\xe6\xc0\x9f\xc3\xf8\xa6\x15MYL\x16\x16)\xf3:,\x9c\xbd\xe2t{[\x8a\xd6xu\xd2 \xa1\xcd\x11\xd1\xa6\x1f\x86\xc9\xa8\n\x9f\x0e" "\x63\xdb\xc3\"\x82~(\xdb\x38J\x45\x89\xf6\xc9\n\x1aY\x36=\xc3\xfb\x8e\xcf\xf7\xf5\xfers\xb2\xd3t<\x8f\x8b\xe7\x64y\xe0\xcd\x31" "q\xe2(\x93@\x98z\x0b\xb3m:\xc1\xea\x83\xa3T\x14\x0c\x65\xca\xda\xbaq\x66\x33\x66\x63q\x65\xe1\x05\x0e\x16]\x9c\x92u\x81\x35>" "\x61\x8dwX\x1b;\xc6\xb9+t&\xc6\xd0\xbb\x8ah\xf6\x35\x8ayG\xad\xa6/S\x32\x94(zG\xc3\xbf\x35\xcb\xe7\xae\xe9\xe8\r^" "\x66\x08\x8eR;\xd3n>\xc3\xe0\xe8\x07\xd6\x39@\xd2/\x63\xf2\x10\xe1\xb3\x37\xd4=h\xac\x15_\x1c\xbd\x65\x8b(\xf7\x10n^\xe6\xea" "\xc3<\x1c\"\x8d\xa9\xdb\xc7\xf7{`\x9e\x64\x13lS\x87\xdaY\x19\xcb\x81=\x43<}\x89\xdf\x0f\xb7\x8d\x41`\x1f\?Y\xf6y\x9a\x61" "\xc9\xfey`\x1f\x37\x8e\xf1\xc7#\x94m\xc6\x34\x1f}`\xcf:\xf5\x19\xf3\x1egh\x18\x31\xab>\x42<\x18\xea\xb7\xce\xbf\xb2\xec\xe2\xc7" "\x99\xf4\xf0\xdb&\x9aNr\xb8\x90\xc1y\xfb\x8e\xd2O\xcc[U\x30\xdfHg\xf7\xf0\x42\x14V\xf8\x91\x61\x35\xad\x17\x9d%\xf9.tG" "\xc2\x8a\xb8\x13\xcc\x64\x14\?\x89(\x93\xa4:\x93\xdf\xfa\x0b\x12\x96y\xb1`p\xaas\x16\xbey\x8b\x37\xa4q\xb2;\x07p\x17\x31\x63n" "\xe0h(\xbdN\xf4\xc3\xf3L\xcck/\x87\xd7\x0c\xe3Jy\xde\x43Y\x1b\xfd \xca\xb1\x31\xbd\xf2\x8e\xc5g\x37;\x86^\x34==\xd0" "\xac$\xe7h\x03\xe9\xd9\xb5\xcc\x37\xe0[\x05\xd6\xec\xed\xd8\xd4Q\xaf\xc1J\x0f\xe6%\x02\x86H\xe5\xc6\x32\xa5\x95\x16P\x8f\xd2s\x94\x16" "\xc6R{G\x99\xb7\x98\x16\xbf\xd3\xd3\x0f(\x0b\x9cyK\xd7\xac\x8f\x07\xc7\x88\xc2\x04\xf6[\xcd\xb0\xf8{\x95\x61:\xd9uv\xbb\xbf\xad" "\x1f\xa5'(\xcf\xb4u\xba\xdd\xbbLO\x87\x81\x65>{\xc4\x1b\x85\x93\x98`\xf7Y\x43'\x1d\xa0\xce\xa7#\xf4RR\x13Q+\xc9\xaa" "\x99w\xef\xed\n\xf3%\xc1\x45N\xc3\xe5\xf9\xd3\t\xd3\xeaO\xb6\xb9\xcc\xf4v\x99\xc6\x05o\n\xab\x18\x99v\xaflW\x91\xc0\xbc\"\x91" "Ug\xce\x32}\xc2\xf6\xf4L\xbdhg\xf7\x64W\x99\x17&\xc3\x15&\x98\"VW\xd2o\xaav\x42\x9f{\xdf\xfaP~r+\xcb\x8a" ":\xe6l_\x98\x05\x10\xed\x1c\x46\xaf\x65\xa0\xad\x1c" "\r\xb1\\\xe8\x1c\x62Z\xaf\xd9\x92\x0b\xdb\xc6\x39\xb2\xacx\xee\x64\xc1%\xd1L\x34;G\xd1\xd9\x83\xa3\x0eR\x16\xba\xc4\x98\xcc\xcb\x31k" "W\xd6\x03\x9aM\xa6 \x86\xf2\xa3h\x63\x35\xfe\x08\x8b\x42\x43\xbe\x37N\xb6\x05\xa7\x07\x8eXUt\x8e\xb4\x02\xf7\x37\xd1\xe9\x86\x0c\xe7\x86" "\xb3\xab\xa0\xf9%u\x8e\x64\xa9\xe2\x18M\xce\xe0\xd3k,-\xbd\xa7\x15<\x13\x96\x1d\x86z\x37\xb6\xd8\x17\x36\xe6\xa7\xe3!q\x06\x9c\xe4" "\x92\xf6\x1c\xe9\xe3:'Q{\xdf\x30\xce\x8f\x80\xe6\x18\xd2\x39I\x0e\xec\x95\x9c\xc0\x8d\xb6s\x8a\x34\x92\x86\xd1\xf9\n[I\xc6\x10\x43\xb7" "\x43\xcf>\x43\x8d\x0b\xb5\xdaw\x86\xbdm\x11W\xcf\xd8\x44\xe9\x9c\x46G\xd7@\xdb\xe5\x31\x0c\x1f\xf9\xde&\x44K\x38g\xa2th\xdb\xc7" "\xaf\xe8\xe2L\xcd\x0e\x31\xdc\x9f\x62\x63\x8c\xaf\xe5T\x35U\x85\xc3\xd8ls\x84\x99q\x81\xe0p\xe9\x98\xdc\x9e@\xef$l\xf1\xe3\xa8\xb6" "\xad\xfb\xed\xff\x32\xec:tN\xe3\x9b+\xbf\x31l.wN\x11\x9d@\x90\xcf\r\xf7\x15\x45\xab\x89\xa7X\xc9\x18\x06\x9b\x99N.\xba\x1e" "\x00m\x17\x46\x10\xf5\x35\x87\xc5\xb1\xa0y\xc1\t\x9aYZ\xe7\x0c;\x06\x82\xbd\x07G\xce\x62UL\xc7\x37\xf0\x95\xeb\\\xc0\xd2\xa8s\x91" "\xdc\x8e\xa4w\xc0.S\xe7:z\xcd\x03\x37\xf6\xad\xebx\x1f\xc7\x39\xab\xbb\x96\x1eJ\r@\xcc\xcb\xa5s\xad^n\xa3\x0f\x38\xd0\x08\x9b" "\xbd\xc8\xcf\x39~\x18\xdb\x9cgXR\xf9%\xfb\xc7\xd7G;\x1c\x41\x8b\x0b\xd6\xa9\xb0*T\xa0\xb0\xeeT\xa2\x93/ \xbe_\xe1\xc3U" "\xa2\x1e\xbe\x1f\rn\x81\x96\x8d@\x30\xe3\xf8\xd8\xa9\xc0\xc6@\xd0\x8cP\x04QT\x15\xac-\x05\x31\xc3\xa8@}!X\x9e\x9a\x11\xd4\x0c" "\xec\xdd\xdah%\xcd\xe3\xdal+\x8a\xf1\xa1\xbc\\\x9bkT\xf8\xd2*\xd8\xdc\x10<=\xcf\\\x01\xe1\xfb\x04\xd1\xde+\xf0\xb2r\x13\x17" "\xc3\xed\xdb\x0f\xef\x93\xe6\xd6\x9d*\x62\x14u\xea\x9c\xfa\xd5\x91\xf6\x83\xd7\xafs\xfeZgY\xd5\xe1\x41)h\x9b|\x8ay`\x65%\xdd" "M:|\x03k\xf6\x90\xd6\x97S\xdc:\x97Pu\xa8\x99\r\xd5\xb8\xc7\xcc\xa4\x84u\xea\xc9\xc9YT<\x91\xa5\x31T\x0e\xd2\xd7\x9a\x32" "Q\x10\x9dU\x9d\xeb\x06\x45\xdb\x42\xb9v&+\x62N\x91\x95i\x30\xce>n\x35.>\x45\xe3Ut\xfa\x05\x66V\x1a\x82\xf5%\xd4!" "\"\xde\xed;\x42\xa7&\xe2\x33\xaf\x82\x97\xa5\x98\x16\xdf\xa3\x8b\"\x9c\x9f\xe5>/\xf1\x45\x36\xfe:\\\x8e\x0c\xa5\xa3\xe4\xdc\xa4\x8e\x88Z" "\x82\x66<.\xb8j\x39\xaa\x83r\xf5\xcb\x99\xba\x07\xb2\x64\x35p\xe8\xfc\x98\x13\xe6:\x92\x84\t\xf6\xf6\xd2\xce>\xdf{\x1d\x9b^\x8a\xfc" "\xcdx\x8f\x38t\xd4\xe1\xb7\xf4\xe0,\xee\r\xa0\x0b\x33&\xd3\x88\xed\xd3\x65`\x9b\xbb\xf0Ms\xb5\x34\x94_\xc4\x66\x19\xe1,\xfc\xfe\xd7" "\x46\xc7:\x92>v\xee\xe4O\xb1\xcd\x91\xaa\x1d]\x94\x80\x97\x1d z}\x45y\xdb,\x37\x63\xa3|\x62\xc1(\x8d\xe9\xd4\xe6\xe4\x03\xac" "\xd5r\x84\x33\xa5\x88\x9d\xb6\x63:\x9b\xc9\x1f\x18\xd6\xa2m\xf8\x30\t\x9a\x92\xd0\x10\xca\xf7N;\xb9\xba\x43\x9c/\x11\xf1\xaa\xda\xfe\xeb\xad" "\x45\xcf\xeb\xf4\xa2\xb3{\xedN\xd0I\xf4\x44t\xe4\xc8\xd7K\xcc\x10\xc3\x10\x8a\x45\x13\xfdS\xae\x03\xfa\xec\x15\x46\xd2h\xfe\xbf\xc3\x95\xda" "\xac\xff~\xc3:U\x8e\xa1\x8d\x8d\x92\xd5,\xea\x1d\xbb\x88l\xb4\x9dq\xd4\xb3w\xfd\x8e\x9d\xc5\xce\x02\x9b\xb2\x82\x16&Z\xd0\xec\xcd:" "\x8c\xd1\xd0Y\x41q\x66\xa8\x31\xc4\xcd:M\x18z\xabU\xd4\xf9\x05\xfa\xb7\x65\x8a\x31z\x34\xef\x95\x36\x0f\x10-v\x9a O\x90\xd8w" "\x39\x63Y\xc9o\xfc\x07i\xce\xee\xf3\x17\xc6\x8f\x9d_\xf6\x87\xf4!\xec\x9e\xfc\x99\x62\xcd\x10~L\xdd\x13\x8c\x1b\x82\xdf\x33\xf9\x83]t" "\xf7\x44\x8d\xd3\x37\x8c\x91-\xcc&\xf9\xdd\xb3\?\xdb\xf5\xec\x9e\xe1\xb1\x05\xed\xb1\x05\xbbg\xc0\xf5\x35\xaa\x41\xb7\x80h\x91\x82\x8bi\xb2\xca" "\x45\?\x87`\x16\xa5\xd1\x30\xfd\xfa\x80\xceJ\xd8\xba\xf9\xb7\xb9\xc2[\xea\x16\xd0\xbf\n\xda\xe0\xdb\xa5\xd7\xa2!\x06O\x11G\x38y\xb4Z" ":\xfa\x99\xe1j\x62\xa8Ki\x0b\x9d\t\xd6\x1c\xec\xd8\x04\x11\xa1M\x84\xc9-\x44\x8b\x14)\x62\xd3\x9e\xaf\x80\xa9\x8a`\xf9\x1e.\xc1\"" "\xdaV\x84`\xbb\xe2\x08\x8d\x1f\xc4\x39N \x8f\xec\xa8:\xa4\xd9x\xc7.\xe2\xd3\\\x96\x99\xe9\x14\xd8\xa6\x85\x10\x1b\xc6\"\xd7\xf8u\x0b" "\xa8\xf0\x82\xa7\xb8S\xf8Ju/\xf9:.\xffVo\xa8h\xdd\xcb\x0c\x62\xdb\\\x44\xbc\xacK\xbe,\xc5\xa4\x34\x84\xd8\xbd\x04\x9a\xee\xa6" "{\xc5\x13\n\x96\r\xf9\xd3+Xz\x18\x06\xd1\xb2\x9a\x18\xea\xce\x8di\x08\x8c\xe9\x10\x92\x61\xe3\x9b\x1d\xc3\xc9#\x9b\xde(\xb6\xe5\x0f\xa2" "m\x03\x1a\xf2\x01L\x1c\xf1R\x16{]\xf0\xf5\x00h\xcd\x45\xd0\xa2\xa3\x0bN\x8e\x64\xa5\x8bN\xb9{\x85=\x07\xc3\xe8X\x9a\xda\xdcY" "\x08\xff\x63\x8c\xb5\xcd\xc4\x8d\xb4\xcc\xa9\xb3\xed~\x35>x\x06\xb3q\xb6{\x85,=\x8a\xdf\xc4\x05p=\x8a\n\x1b\xf4\xec]\xa9\xbf\xfb" "\xfe\x05\x34\x43\x41[\x14v\xaf\xd5\xf9\xd3v\x8d\xbb\xff`z\x63\x88y_\xf7\x1f\x8cV\xbb\x65t\xcb\x82\xab\x1a\xb1M\\\x39\x62\xe6\x02" "qu\x1f\xbf\x87\x0f\xf8\x38\xe5\?\x33\x63\xef\x96\xa3\x93\x63\xe9O\x63\xf3\xa0\xcb\xb0\xa4\xf0\x96\xbc\xee\xc2\xa6g>\xd1\xd4\x10GW\xc9\x41" "\x31\x04R\x90\x0f\xf1\xdc\x65l\xbcwi\x7f\x98\x31\xf1w\x31\xe4:\xb7\x03\xd8\x42\x13\xd1R>\n\xca\xdf\x34'\x7f`\xfd\xbc#\x36$" "(\x0e!\x8e\x1a\x44^\xd2\x7f%'\xb8\xea!\x07\xa9\x31\r\xd8\xe8l>\xd7\xc0\x8d\x36\xe5\xec\x96\xe1X`\x08\xdb\x0b\x88\xa8\x1d*\x62" "\x36g\xa2\x97\x1a\xfc\xd2\x0c\x65\x19\xe5\xe7\x8dg\xbf\x86\x18\x8d\x04\xcd\xc1\xbb[N\xf7q\x85\xf4 \x9f\xd6\x8b\xe9\xe2\x0c\xacq\n\x44W" "[\xc6\x46\x41\xb7\x0cS[\xc1\xd3\x8b\xf8\xec&\xcdO\xc0l_\xcaP;\x81\xf3\x31\xd8\xa3\x95\\U\xfe\x1cU\xe1\xb6\xb1\xd6Y\x63k" "\xac\x61\x9b^\xd0:w\x41\x8b\xbe\xd0\xad!\x16m\xf7\x16\xbe\?\xdd[\x99\x8f\x45+\x8a\x1aY\xe3\x10\xa2y\t\x0b\xae\xec\xben\xb7\x8d" "\x41t\xf7\x00qu\xb4\x1d\x96\x92\x99]\xa6\x89\xac\\\xdd\x66t\xf5\x01|\x98\x00=\xe1\x84\x8b!\xb5\x84\x1c\x90\x11\xcc,\xb2\xbaM\xb8" "\xf9\n\xa2/m\xc6\x16IM\xf1\xc5\x10\xf1\x98\r\xd3:\xbe\x92\xdc\x33\xac\xb8\x88\x66\x8c%h\x46X\xdd\x66zV\x00nj\xaa\?\x95" "\xa6v{\x94\xfeZ\x33m\"O\xb9\xa0-\xc4\r\xb1\x42\x97y\x8ai\xfc\xbb\xcf:\xd1\x9b\x8d\x11\x41\x41\x98\x05\xb4\t\xddO\x9b\xddO" "\x9b\xcd\xb7\xbd}\xb7\xa2\xe9\xb1;\xec\xb1O\xea\x45\x96\x45\xc2p'\xbe\x02\x43\xcf\xd8\x63\?\xd7\x63\x7f\xdb\x63'\xdb\xdb]\xb0\xc7\x0b\xf6" "\xd8\xb3\xf5\xd8\xa3\xf5\xd8\xe1\xf4\xd8\xe1\xf4\x92\xb2L\x85\xbe\x31]\xe8\xf6\xd8\x9b\xbcj\x96\x1ds\x46\xe9\xbe\x61\x06\xd1}\x8b[\xbf\xe9\xb9" "\xf5to\xfa\xa9\x05\x98\xec\xbe!\xfdSw\x14\xf5\xec\xb2\x0b\x9eh!o\x38z}\x86\x35mw\x05G\x14\x45+\xb3\x15\xa6=\xdd\x15" "\xe2\x99t\x37\x08\x84,h\xde!\xdd\r\x0c#\r\xa3\xfe^\xd4k\x1a\x43\x89\xf7\xf6\x31\x13\x11\x34\x97\x41\xc3hX\xc6\xfcY\x98\xc5]" "\x36\x8c\xf3\xaf\xd8t\xe8\xedG\xa7/\x9a\xf8\xe4w\r\x66^\x66\x86P\xd0\x9b\x08;W\x11-\n\x82\xe2\x06h\x66\x9d\x86R\x0f`\x9a" "!\xcc\x94T\x8a\x05\xa0\xf5\xba\x8a\xff\x1c\x31\xed\x34\x11\xdd\x80\x88\x96\x39K\xf0~\tOG\x11\xcd\xee\xdf\x10+^\x17\xb1\x9d(L\x83" "\xde\xd4 \xca\xc4\xb5\xd8\xc8\x88\x1a\x98\xc1\x46\x9c\xcc\x01\xd8\xb6\xca\x81\xd1>\xa6J*>\x11\x17\xc0\xc9\x99\x8c\x16\xe9\x8c\x0f<)\xcb\x15" "\xd1\?\x1aK\xf2\x8b\xed\xe1\xa3\xb3\xed\xde\x19\xc5\x9fPZ&\x46\x37'\xe8\xf4\xe4\xc0\xf7\x1d\x02\x8d\x8a\xb8\xca;\xca\xd4\x37\xe9\x94\xd4\xdd" "k\xf9\x91\x39\x96\x16\x8br\xbdx\\\x46\xbd\xb0\xc3z\xba\x07^\xd2v\xe6{\xfb\xf1\xf1\x95\xa3\xbc\x12\x64\xc0\x31\xa6\xc9\xdf\x46\xb8\xae\xba" "@z\xaax\x61r\x92\xe5\x37L\xee\x33\x0c\xbe\x89~\x00\xeer\xc6\xe2\x1bu}T\xff\x30\xcf_.\x87-\xde\xba`\xf3\x82\xc8\xaf\xdb" "P*\xf8\x8c\x42\x8b\xcdx\xc8P\x17\xc7\x36\x88\x08\x9b\x94\xe2\x8f\x9e\xbc\x01\x7f+\x01\?\xbf\x1d\x11\x13\xa2\xb7\x8f\xb0\xcf\x86\xe8\x95\x45<" "\xc4i\x90\x1d\x43\xb0\x18\x30:\xd6\xc8\xdf\xb0\xb1\xb7\x03\x99W\xff\xdf\xf7.\x45\x9e\x94\xa7X\?\x18\x0bv\x8a\xbd\xfdt\xef\\\xfd\xa2x" "z\x8d\x80u\x8d\x9a\x91\x1e\xee;\x66\x9a\x82\x30\xaf\xc4\"\xc2R@\x44\xdbx\x10\xec\x9e\x00\?\xf1@\xd8VVt\xfe\x9a\x39\xd7\xd6|" "\xb0\r\xb3GOQ\xcc\xdb\xe6\xa9\x63\xe6\x85\x42Y\x61\x98i\xbe\xc2\xa2\xd3\x86\xfc\x39\xcb\x34t\x61I\xbb\xbd]\xa2\nl\x07v\xd6\x43" "t\xaf\x82\xe6\xcf\x63\x88\xbe\xc8\x44\x38N\x99\x88u\xad\x89\x08L\t\xd1\x8c\xee!\x9aM\xbb\x89\x18\x91zT\xdf\x86\x1f\x30\xb9\xbd\xa0\x65" "\x0c\x12\xb4x%\x86!\x81h\xef\x08\x8b#\x41\xd4V\x45\xff(\x39\xb4k\x9c\xf2\xaeO\x31\xa8\x08V\xcb\xc0\x0e\x39\x9e\xe6\x14\xaa(\x41" "[t\n\xbe\xf6\x81\x16\xba]\xf1\th\xb3@\xc3\xa4\xf8\x9e\xd8\xa2G\x98\xa5\x93\xe9\x9d\xa2\xd3\x15<\x1c\x13'\xc0\x93\x1e\xf0\x1eW\x87" "\x62\xc9\x30\xba\xd8G\xa0U\x61\xabYlY){\xa7jQs\x38\xf6\x9b\x86\xda_p\xf9\x44\xfc\x04\xda\x08\xa9x\x07\xdc\xe0\x66\xa1\xeb" "\x12\x9c\xe1{\x18r{\xb2t\xe9h'n\x03r/\x07\x17\x0e\x43v\xad\xf9\xc8\xb2\xbd\xf4\xae\x34\xf5_\xe9<\xb6\xe4\xe2\xc6(\xfe\x93" "\?\xc7`\xeegLS\x1a\x99\xde\x19\xac\x34\xce\xb0\x10@\xd2\x98\x06\xd8\xb1\x1d\xc7^\x8d\xf5\x87\xab\t\x43,\x87\x44\xec\xf6\x80\x36\x06\x1b" "\"\xff\x83\x89\x88\x89\"\"\xaa\x89\x62t\xd2\x80h\xcb\x11\x43\x99\xb4\x9b\x08\x8b:\x41<\x44-\x39\x18\x19\"\\\xeb\xeelX\x0f\x08v" "\xf6\xa3\xd7}v\xcb\xcd\xe8\xb1\x0c\x17N\x11m\x14\xed\xdd\xcb\x9f\x61\xd2\xd5\x95_\xef\x39\x32\xbb\xb3^;\xb1\r\xe2^\x1f\x96\n\xbd!" "\xe6\x14\xbd)\xdc\xdc\r\x43\xaaY\x63\xac\xad&\x36\xb3\"\xdc\t\xc1L\xab`\"\xfb\x11\x13=\t\x8b\x31\xe4\xeb\xeaMy\xcf\xd3\xed\xbe" "\xbd\xe2Yl\xd1\x45z\x33\x64\x0e\xeaQ\x41\"\xd8\xb2\xa2\xfc\xe2\x0b\xf8\x82!G\xef+\xcaM\x80h\x1d_\xd1\xe0\xc3\x11\xd3\xd8\xde\x0f" "\x66'\x82\xce;\xff\x80(\xf7\x9f\xc8\xbc\x80|\xc6\xd1\?\xc1\x8b\x14\xec]\x11k@\x9bT\x19\x06\xb5\x38\x98\x9dH\xd0\xae-h\xef\x38" "s\xdc\x8a\xaf\x7f\x82YX\xff\x04.\xc1\x86\x08\xb4\n\xf1s\x14Y\x8e\x16\x63\xb0\xcfv\x11\x8a\xe4~\x1e\x36\xfb}\xddX#\xf2x\xaf" "\x0f\xb4\x35P\?\x1f\x17\xae\r\xb1\x35\xd3g\xe0*Y\r\x99*\xd7\x30\x9d<\x41\x15\xe9\xcb%_+\tN\x9e\x80\xa6\xd4\xe9\xe7\xa1\xee" "\xeb\xe7\x91\xfb\xaf\x7f\xc6\xe7\xbb\x89:\xfa\x9e\xfb\xb7\x88w\x63(\xb5P\n\x1f\xcc\x16I}Z\xf0\x19\x46\x17g\x61y\x65\x07\xe2\xca\x04" "k\xc0\xfem\x64\x1b\x8c\x82\xc7s\xa0\xed\x1d\x18\xaa/\xdf\xe3\x39V\xb1v \x9d=\xe9\xa6\xce\xf1\x1b\x82\xef\xc8\xb1\x12\xae\x01\xf3\x18\x45" "\\\x1b+\x45\x43\xa4\x98\x80h\xfe\x08\"vW\x8e\x7f\xab\x42\xb2\xba@\x1d\xb6\x03\xd1\x31\xd3\xec\x80\xb9\x9b\r\x98\x07h\x36\x86\xe1\xd8\xc4" "\xa4\xbe\x82\xce\xda\x98\x19\xf0\xad\x32L\xc6\xe7\xc0&\x87\x88\x9b'\xec\x95\xcf\x30\x9a\x01M\xff,h\xe6\x9e\xfd[\xbfqXm\xf4o\xd5" "\xabN:\x0f\xab\xd4\xc2,$\x86\xa0\xc6\x1f\xe3\x17\x86\x9f@\xde\x31\x62\x42\x1b\xc6WG\xd1\x1a\x0c\x1d\xa8\xa0\x85\xeb\xeb\xdf\"\x45\x80\xa0" "\xe9t\xfbOp\x88\x12\\\x37\x43J\x9d\xfe\x13/\xfb\x04GZ\x41\xcd\xdf\xee\x9f\xd2\xa1\xc7P\xc3\xac\x17{\x18\x37q\x00\xb7o\xa2\xa9" "|ML\xce[\xf1p\x95\xac~\xa2\xcb\x1c\x94\xb4v\x38\xf3;\xf8y\x89hN\?\x82\x8b\x1f^\xe6\x13\x9d\x9a\xe0@;\xd2\xfe\x17\x8f" "\xd3_H\x10\rV\xf0\x0b\x88z\xfb\xc5v\xf8\x8d\xb1\xa3\xbf\x88\xcc\x32\xbc\xbfH-\xdc\xb2\xa0%\xd4\xe9/\x11\xb5S\xd0\x96=\x86\xe8" "\xfe\x44\x44\x39,\xe3\xa5\x9erp\x8d\x12\x10\\\x15\x1c\xa1\x0e\x30\x11\x65-\xa2)\xa7\r\xe3\xb3\x36\x9c\xa5\xc1\x8a\xed\xa8\xf4\x9cn\xeeT" "\xb0\xe0\x1ev\x38\xd4\x19\xb0\xd1\x66[\x1d\xc5\xc5.\xd4'\x83k<\xaf\xa0\xcd\xd0\x04\xedy\x07\xd7\xb0\x8a\x16\xbc\xff\xe7\x88\x84\x1c\x83k" "t\xbb\x83\xebt\x86\xaf@\xaf\x38\xb8\xe5\xfd\xdf\")\xe4\x80\rG\xd0&\x1b\x83[L\x13\x04\x0f\xaf\x0c\x91GV\xf0\r\x1c]\x88\xfb" "\x8c\r\xde\x31\xce{\x1fl\xc8\xbb\xfd\x84\ny\xf0\x8b\x8c\x36\x83_\xa4\xe5\xf6\xd1K\xfa\x8fS\xa2\x15\xb1\xa0m\xd1\x19&\xa3)\x44\xeb" "\x62^\xf7\xa5\xb4\x0c\x93\x42u{[\x42nk\x61\xa6\x9a\x33\x84\xf2\xd6\x45\xbf\x02\x82)\xbd\xee#\x17\xed\xeb\xfev\xfe\xb8\xdd\xbb\x94\xff" "\x81\xdd\x96\xc8\x0e\x42\xed\x16\xd1\xd4\x84\x82V\x8d^\xa5\xf3\xbdv\xc4\x0bV\xa7\x8c\x1eQV\xedkl{\x80\xa9\x61\xe2\xa9\x31\xdd\x9e\xb4" "\rL\x65\xe7\xb0K\x17\x34\x45\xb6\xe0\x06\x1c\xefPp\xdf\xf1\x0bxR\x04\xfe\xd7|\xfa\xf5\x1cNS\x82\xe7M`\xe5\xca\x91\x0f\xa0\xa2" "\x7f+=h\xc7\xe7WI\xad\x03\x36{Mr\xd3h\x8cKoo\xadxJ\xd1\x9b\x36\xab\xd7\x32\xb2W\xbe\x96\x11\xb0\xe0\xb5\x82\xf1S" "\xb0\xf7\x03\xb4\x89\xa6\xe2\xc6\x90\xc5\xfa`!\xfc^\x92\xe5\x9b\x31\xd4\x84\xd7\x07\xe1jG\xb9\xe9\x1a\x43\x04\xc5\xd7G\x0c\xeb\x82\xa6Yx" "}\xc4\xba\xec\xf5\x91\x65\xfd\x88&+h\xaa\xb3\xd7G\xf4\xcd\xaf\x8f\xe9\xb3N\x84^\x9f\x11\xa0\xdcP\x97\x0cV+]\x13\xf1\xda\x81\x9e" "\xe2\xb5\x1f\x95\xec[\xfd\xf8\xae\x05\xb4P\xd1\x86\x61\x8e\xfe\xdaO\x8eG@KN(h\x1b\xde\x8a\xbc\x00\xcd\x39@\xb1\xe9\x88M[\x1f\x9f\r\x35\xdb\xfd\xc1\xbb\xb3\xa4\x98\x8f,\xf9\x9f\x30\x94\xf5%\x36\xf7\x04" "\xf5\xaf.\x7f\x64\x01\x65Z\x13JI\x98\xaf\x31\x94\xb5\xa4\x84\xe3\x63\x16\x81\xe9\xb6\x15_\x1d\x35KY\xfd\xdcYtr\x9c\x11\xb7\xfb\x9b" "hx\x83\xe1\x06\xc7,\xac\x18\x44\xeb\xff!\x0e;.&\x07\xc5 \x16\xc7\x41\xac\x86\xb3\xa6\x07\xe7I\xed%\xb0\xa3itw\xe0\x0c\xc9" "\x0b\\\x0cw\x35\xe5\x17~\xee\x1d\xbd\xa2\x88\x88\x35\xba\x8a~h\xe1\x18\xbd\xec\xc4y\xf8\x34\xd9\x7f\xc5\xdc\x61x\x89\xfd\x1a\xc1\x1cJ\x17" "\xaa\x42\xc1\xc6\xc4\xd1\xdc\xddQ\x83\xe3g\xd4\xa8\xb8\xf7\x18\xd9\x8c\x43\xc4\xf1\x85_O\xc4\x38\xff\xec\x35T\x98\x9a\x82\xee>K\x0e\xe6\x19" "\x96\xe6\x16j\x46\xf7\xfb\xcf\x0f \xa6\x9a\x88\x13^k\x86\xda\x80\x10.\x82\x37\xa8>I\x15\xef-\xa9\xbf\xca$\x17\xd3!\x61\x16\xf0\xd8" "\x30\x32\x9bv\x11{\x05\xa4Q\x11\xb1\xbf\x44\x64\x0b\x11\xcd\xdfX\xf0\xfd\x9a\xf8\x0b\xb4\x1c\x9a\x10W'\x88\xda\"\xe2\xfa\xca\x31\x9a\x96\xd2" "\xf2:y\xc0\xdbO~\xf1\x02\x91Z\xd4\xf0oq\x0eK\x62\x61M\xbc\xaf\xb4{\x04\x1c\xfd\x46/\xb8\xd1t\xf6\x08\xfc\x46\xc1\x63\x83\x42" "\xf0\x14W\xc2\xf6\x8d`\xe3\xc4\x11\x01=\x45\xbcGk\x41\xac\xc2!\xc7\x62\x41\x1b\x0e\x86W\xf2\xe7h>\x31y\xb2\x7f\xc0\xf5\x34\x1a\xbe" " \xc4\xcd\xf0\n\x43\x81\xa1n\x91\xda\xae\x89\x31\x35\xe2\xffm\x81\xd9\x8c\xcf\x30s\xd4\xbf\xbb\xdd\xd7.xX\xfe\x9b\xd7\x88\r\x8c\x43*" "\x36\x81\x8b:\x94k\xc3\x32\xfb\x95r\xd4\x64\x88 \x11Q\x83\xca!\x1b\xa4\x88;\xd4\x80\x92\x66~\x04\x36\xfa\xc2\xbaK\xd9\xbd\xa3\xfao" "\xa3\xdf*\xb3\xfd\x95#Y\x87\?\xf5\x10\xe5S\x98\xa9\x16\x14q\x43\x91M\xdb\x87\x65\x8c$\x82\x37u\xe2\x04X\x19\xa7\xb3\x16r\xd5)" "[\xc0\xe7\x41\x44\xdb\xb6\x31\x44\x62T\x11\xef\xf0\xfc\x1aQ\xb7\x99\x87\x62\\\x98\x85z\x18\x96\x31\xf5\x13\x34k\x35\x41T\xbb\x32{\xdfr" "zw\x61\xe8\xf7\x8f\x95\xac\xe0m\xdd\x11N\x62\"\x36\xf6\x1c\x11%\x06\xe2\x8f\x8c:%g\x08Qg\x62R,\xc4\xcdV`\xf7\xbb\x0f" "V\x1b\x17\x61\xc2;\xbc\xe1(s\x83\x65\xa4\xe0\xe5%\x10}\xae\"\x86\xc4\xe1\rV&\x82\x9b=\xf8\x62\x0fo\xd8\"o\x92\xbe\x95\xc4" "\r\xfbo\x45\x98-\r\xab\x1c\xe4\xaa\xac\x8c\x8ap\xa0Q\xb1\x03\xb4\xe9\xbe\x61\xd2\xb0\x36\xc9\xb0\x9a\x82\xb6i\x66\xc8\xe6P\xc5\xc2W\x10" "w\\\xc5t\x44\x10\xe3U\x15\x31Z\x05m\x8d+h\xa6]\x82\xa8l\xd5`Y\x33\x64\x38M\x41s\xd8\x30LJ\x0f\x30\xb0\x15\x36\xe1" "\x0f\xcdT\xc1\x30\xdc\xd6\xe2\x06\xb8\xc4\x9d\xc3\xcb\xc2\x90\xd5P\xc5\xd8\x9c\x7f\x86U\x04\xde\x1d\x32\x1a\xa7`\xe5^nvk)&\x85\xd9" "N\xa4\xe0\xc3\x37q\xe1(\xcd^\xca\xc4\xefN\x0e`\x07\xca\xc4\xed\x9e\xacp{\xec\x8c\xaa\xf1#\x9e\x08\xc1\xd0\x05\x87\xcf\xe9q\x19\xce" "\x8b\xc2\x46\x9f\xc0\xf1\x85\x63\x38\x93t\xbb\x8fK\xf6\x92;\x16\xab\xf1\xf7)\x8eM\x03\x46\xb9\x97\xb8\x32\xfc[\xad\xa2\x33^\xc6\x96uR" "j\xb6-.h\xa6\xd4\x43:\x95\x08\xa2\rT\xfd\x36\x05\xbd\x08\x93\x1e\xf1\xad\xe3\xe8U\x45\x44\x7f\xd9\xachU\xc4\x14\x36L\xc6\xff\x32" "\"\xfb\x8bj\xb2\x42u\x43\x02+\x41\x9b\x30\x1bz\xb1\xfb#\xa7,\x85t|\x45\x1c\x02'\x87\xc4&p\x86\xda\x91~\xb7\x80\x1b\xbc\x18" "\x38\xcb\x1b\xa6\x8f\xe7\x1cU\xaa\xec\xb5\xab\x81\xf3\t`\?m\xe8\xf5\x9e\xbdxu\xfb\x84\x1b\xd8Zh\xad\x61\rz}\xc5%\xd0V\x65" "\x8a\x8f\x8eqy\x1e\x1d\x7f\x04V\x19\x42\x37\x05\xd6\x1c\x44\x17Mg\xf2\x41\xb2\x1a\x82\xa1}\xd5\xa2\x83\x9e#\xe2&\x42\xac\xef\x8e\xa2\xcd" "\x9a\x38Z`O\xc9X\xfc\x90\x83h\xae^\x82hs\xb5\xe8\x62_\x63;,m\xff\xa1\xfe\xcb\x63\x37\xc4o`\xa9\xe2(S\x0b\x16O" "\r^X\x86!\xa0\x93\x31\xec]\x89\xe8\xf7\x32:\x07NJ\xf0x\x17q\xc9+\x38\x37\xbd\xe1\xb0\x16\xe7p\xc5\x38_\x8bN\x87\xd0y" ")\xeb\x02-j\xb7\xe2-\x10\xad\xb2\x16_\xe1\x82\x88#m\xe8\xd7\xe6`\xae\x18\xed\x97\x10Q\x42\xd9=\xf0\x1e\x85\x11\?\x94\x1cY\xd5" "jl\xcb\x35\xb6\xe5Z\xfc\x98#>\x03\xdf~\x1d\x39\x16\xaa\x18\x9d\x9e\xc8\x1c\x81\xd3\x80\xff\x1c`[\xb4\x63,^\x11\x93\xc9\xc6\x45," "\xac!\xfas\xbf\xfd\"\xff\x95\x88\xb3\x95\xa3\x9f)\x39\x46\xa9`Y,\x88q\xb0\x86\xe5\xb0 Zp\r\xc1Z\x04\x31\x13\xa8\xc1SW" "\x90\xd7N\xdeQ\x8a^\xd7\xb0\x85\xe6/\x11Z>\x41\xde\x13\x9b^\r\xae\xa8\x8a#G\xaf\x86\xe9\xec\xdb\xd1K\x89\xf3\x8d\x1ag\xac\x8a" "\xd0\xa9\x43\xe4\xcb\xf2\xea\x8a\xd4\x62\x86\xc9\xfa\x12\"\xa6K\xb5\xed\xb3\xbd\xb9\xba\xaa\xea-\xfb\xbb\x88\?\xb2\xb6\xb6\x06Ug\xcf$\xab\x88" "\x19\xb0u\x0b|\xe9\x46\x16q[\xc4\xf6\x87\x63\xf8\xb6\x07\xb9\x13\xd1q\xf0\xe1\x08\xf3\x04\x88\x18Q\xeb\xec\xb1\xea\xb6\x84\xfb\x84V\x14l" "t\xcb\x81I-y\xb7\x07\x39\x88\xfb\xfd\xf4\xf3\x9b\r\xa4\x1e\x1f\xdc\xc3VW\xc5\x0e\xb0r\x8a\x16\xa4\x81\x1a~p\xcb\xd8\x8e\x15\x1cv" "\x1c\xfd\xb2\xf1\xf8_\xfcl\x9dj=\x39\xbd\x89\xba\xb8\x65\x84v\x1e\xd2\nWp\xd5\xc5\x9e\xec\xb0\x9e\x9e\\\x39\x66\xee\x37\xa4i\x10\xd1" "\xc2\x08\r\xeb\x1a\xf5\xd7\x34\x46\xc3\x06T\xac\xc3\xa6\xfc\x39\x86M%g\xf1\xde\x43`\xab\x36\xbc(\x8c%\xf7+\xf9\x33\xc6\x39\xaa\x62j" ")\xd5\x86-\x96\x44+\xba\xa8:\xb2\x37j\xf1\xed\xb4\xf8\xa8\x8a\xb2\xe4\xe3\xfa\xb0\x65\x33\xef\x97\x0c\xd3\x91\xce\xd9\xa2\x0c\\\xf1\xe4\xe8Q" "Z\xf2\x1e\xf4\xbe-s\x86\xb0\x83s\xc7h\xf3\x00S\n\x61\x16\xba\xc1\x30(G\x84\xe5.\xe1x*\xa2\xe5\xcc\x10\xac\xf1\xe7\xb6w." "+\xd2\xf2\x37\xd0|g\x04\xcd^\xdaPs*`Hn\xa5\xa6Q\x14<\xc0-\xc1\xf6P\xd1\xaa\x64\x8b\xd3\xc7\x16\x36\x1dt\x46\xc3\x04vH\xd7" "\x99\xe1s\x64\xc9\xbe\r\xb1\xb3/\xa2m}*\xbe\x01sg\xc4\x16\xf0\xb2\x88\x00\xb8\"\xbe\x94\x80\xb8\xec\xb3\xf6m\xae\?\x14\x36\?\xd4" "\x45\x9e\xe5\x9cS\xb6\x33\xd8\x13\x66\xfb\x1f\xc3g\xc4\x0b\x11\xac\x11\xcdpl\xf8\x0c\x63(\x41\xd3k\nZ\x82N\xc1\xde\n\x88z\xfb\x9c" "\xfc>r\x45\xf4\x9c\x1e\x14\x80\x98\x85)\x46\xdf\xa3\xbf\xd5\xb7\x33\xecw\x42\x9c\x1d\x41wg\xcc\x9f\x1cn\x01\x82\xc5\xd7\xa4\xfc\x01\x8f\x1c" "\x61|\x00.\x9d\x9f\xb7\x8d\x9e_\xd2\x7f\xa8\x06\x0f\x93\x32\xcb\xf2\x45=\xbcO\x8b\xdb\x85-\xd5_\",O^\xa2\xc3\x15\x10}\xb8\xa2" "&\x81\x46\x07M\xc6\xb9\xb2\x32\x38\x16\x98\xc8\x05\xe9\x0b_\x8c\xe2\xdf\xba\x89\xf8,\xc6\x42\x96\x16\x63\xf1\xf7\x94S&_v\xbf\x44\xff\xf6" "\xf8\x8a^\xd8\x04\xa4O\xda#\xf2\x38V\xf1\x8aI~\xc1\x91\xf7\x05\xe7\x08\xa7\x19}\xc9Mr\xf2\xf0\x12\x8d\x0f\x88\xd7\xc4GG\xe9\?" "\xc2\xb7\x30\xe6\x31h\xb9\xa0\xc5W\x17\x94U\x8b\x9cy=\r\xac\x34\xc8\xb2\xcb\xb3\xc0~\xad\x33z\x89\x0b\x97\xc4\x32\xb0x\xbe\xbd\xfd\x45" "\xde\x12\x61\x96\xf7\x44\xf0\xa3\xa7\xae\x1b\x45{\xeb/\xb0\xe5\x16<;K\xbb\x9d\xbf\x05\x9e=)\xbc\x39\xda\x34\xb2\xe2L\xba`\x19\r\xb9" "\x9a\xd2\x03\xecgM\xac> ,\xb8\x31*\x80^\xbc\xa0\x04w\xcd[\x99\x97+\x44\xe4\x07\x31\xa6\xfe\xe6\x96\xf9\xdbY\x38\xab\x30LP" "M\xdc\xfd\xc2\x1f\x82\xbd\xf2Kzx\xe2\x18\xe2W\n;\x95\xe6\xb7\xf6\xcb\xca\xfc\x42\x9d\xfa,\x13\x85\xb0\x42\xc7\xf1\xef\xe7\xebou\xe8" "l\xdb\xf8\x42`s\x61\xe8\xe3\x15\xa3\xef)<\xbb\x9cq\x16\xfa\"S*\xb5U\xe2\x33\xc3\x45T\xf1\x15\xb8\x0ch\x13\xf4\xa5\xb3\xcc\xab" "\x85\?\xbc`\xbd\xe0(\xf5%\x1cm\x9c\xab\xa9\xca\xa8\x42VJ\x8f]\xcd\xf4\x82\x34`\x86\x41|\xad\x39\xea\xc3\x9a\xbb\xad\xb0!\xea%" "\xb6\xcf\x14\x7f\xf5\x12l\x8e\xca\xcc\xdcT\x8d\xc4n\x1d\xd5\x07\xdf\"\x97h\xa0\xaa\x02\xb1\x42|p\x94\x35\r\xfbM\x65Qn\xc5rU" "\x16W\x16\x9c\xa6\x18k]\xc2'\xc1\x18,\xefM\xe4\xfc\xc5\xc4\xd1\x63\x94\xbb\x06\xb3m\x65\xc5%p\xd5NOg\x30\x41\xd6\t\x96\xac" "'.\xd2\xcfGg:\xdf]\xf1Z~\?\?\xb7\xd2M`\xf3\x41\x98\x85t\x33\x94Y\x31\x8cr\xc1\xe4\x05.x\xcf\xe6\xa9*\xb8\xb1" "q\xa8\x13\x1d\xe7\x90g\x42\xc5\x15\xf0\x84" "\x1a^\xa5\x61\xdd\x31\xec\xc8\xecT\xa6q\xc9}[\xd7\xcd_(M\xae\x03\x15\xfd\xdd\xc2\xf6\xd2\xd0\x0bG\xfb\xe7j\xc9\x45/~\x15-" "\x17\x84\x33\xeaoM\xc4:\xdc\x44\xf7\xaeV\x16P'\x89\xa7\x33\xb2\t\xf1\xdd\x11\x46\xcc\"\xfa\xa5*%yx)\x02\x30\xdb\xff\x15\xb4" "\xc0\xce\x82-\x34\x8f\xe4\x05\x45\xc5I\x9c\xa2tYT\x87+\x93g\x87\xeb\x84\x32>%k\x8f\xa0\x1a\xbc\xb2/V\xf6Sr\xd1_\t" "\xac\x1d\x05\xa7x\x81\tT\xda\x1d\xef\xdf\xa5\x8bv\x0c\x01\xee\x9c\xa9\x8b\x46\xae\x9e\xac\xcb\xe1\xd8OM\x0ex\x97\x0e\xcfo\x41s\xfc\x12" "\xcc\xf1\xc7\x39\\*\xcd\xe3\xc6\xd2\x02\x1e-\xad\xa2\x35#\x07\xbb \x1fK\xd0\xdf#\x82\x7f)\x0e\x89(nu\x8f\xd8=\xa9Wo\xc4" "\xe8R\x44\x85\xf2\x9e\r\xce-\x8a\xe8\x30\xb8\x87\xa4\x18\xfc\x84\x84\xb1\xcb@\x90-\xc1\x1a\xde\xc8\xb6~\x9c\xb9\x16\xe7\xb4\x8a^\xab\x45\xf4" "\xe6\xb1m|o\xcb\xa8\xd5\xdb\xd6]\xa6W\xe2\x84\xbb\x03\x43(\x43\x35T\xe2\xcbP\xc6\xe1\x06\xe2\xee\xb3>\x9c\xc7=T\xbf\x87\x89\x34" "\x84\x91(\x44\xff\x96\xee\x17\xcf\\\xe4K\xef\xc7%\xfc\xc6\xcf)\xc8\xdf\xd2\xfb\xd6P\x03U\xfd\xec\x98\xfb\xe0\r\xdf\x90\xb2j\x38\xd1x" "-\xc3\tl\xea\x84\x41\xa3\x37I\x0f\x35\xf0\x1d\xb2\xe6\n\xb3\xe8'\xc3)\xef\x62\n\x93\xe0\xe1\x07\xa7\xb0\x1f\xf2g\xc8\xeb~\xc2\x30G" "\xd0<#\x0c\xa9\xdc\x32\xb1\x19>\x65O\xfe\x19]|:\x86/NhY\x33\xfc\xe4\x98\xf0\xc9>\xed\x13\x11\x98\x87L\x0e\x30\\\xb2\xf4" "\x96\xb6U\?\xe6~\x96\x32\x84\x64\x0e\xf3P\xc6\x83\x14\xfc\xfc\xe6\xeaj\xcd\xfd\x9b\x35\x8b\x63\r\x97\x93\xe1z{\xab\xc7G\xfb\xd0\x44\x1b" "&\xc5|\xf2T\xfc/\xb3\x64\x13K\xcd\x86\x63\xa6\x8a\xf6\x89\xdc\xb6&\x30\xc3'\xf9\x06v\x61\xe4\x93\xc5\xa3\x61t\x92s\xc4\xc2y\x44" "\x0f\x12\x41\xd3\xe8\x08\x96\xc6@\x1b\x66\x05\xefq\n\xacp\r\x93\xe6\xbe\x8b\xd2\x34\xe3\xf7\x15\x66,r\xc0\\\xaf\x14y\xae\xd1m\xfc\xfd" "\x18\x7f\x9c\x81}w\xa2\xc2&*}\x80\xcdy\xdd\x1f\xfe\xd6<+\x0c\x83\"g\xb4\x8fHX\x82\x96\xc2^\xb0\x86\xbb\x89m\xd6,\xd8" "\xc4\x15\xa1jS\\\x39\x06\xcf\x07\x61\x66\x41\x63\x18N\xfc\x8e\xdb\xc0\xea\xc2\x30{\xd9\x19/g^(\x86^^*\xfe\xcb\xa9\x93I\xb5" "\x14\xad[\xf2\x9f\x65\xe0\x9f\x7f\xe2\x39\xe2U;\x1e\x17\x12>]\xd2\xbe\x83q\x9b\x88~\xe8g)\xc5\x11\xaf\xda\xce\xe4\xeb\xce\xd2\x03\xbc" "\x84\xf4\xba\xea\xe8\xe7\x87\xa3\x83\xa0\x05\xa2\x14\xfc]\x00\x37\xa8\x34H\\\x65\x18\x34\x97\xc2l\xdbN\xb0\x86\xc7\xde\xd6o\x88\x9f\xc0V\x85" "Xw\x94\x91(\x9c\xb3\x43'\xb0\xd1!\x9a\xf9\xe8PV\xb3\xb2>\xc0\xee\xe6\xe8P\xd6\x9cX\xf3\x8c\x0e\x11\x01ht\xcc\xa2<\x86\xf3" "\x83\xe0\xfd\xd2\x31\x1c\xb2\x15\xb8\xa0\x35\x11\xc1\x65\x07}\x81\x88\x9b\xc3h\xf3\x10\x15o\x8d\x41W'\xf8\xf6\x06\x34\x9d\xc7\xe8\x18\x03\xc1\xe8" "x{\x30\x07\x1e\x93\xdb\x66\xae\xa0\xf5\xad\xa3\xd3hTw\xc4\xe4\x19\"\xea\x0c\x45\xcc\x61\xc1&G\xd8&&\xab\xb9\x88\x89\x99\x89\xc9\xfe" "+\x12t\x82\xc9\\ w\t\xbd;\x0e\xb8\xc1\x03\xd8\xeel\"&\xf9~X[\xfb\x31]\xb8\x1d\xae\xf1\x89\x1f\x46\nk\x88\xbb\x33o" "\xf7\xee\xa1\x32\x02{\xbeK\xcd\x1dw\xc4\x34\xe2\x82\xf5Q\xda\xdel\x7f\xf1\xc8in\xe0\x88q\t\"/\xae\xa2%\xd6\x32\x11\xaaQ\x13" "\xe1j>\xca\x61\x65\xa8\xd8\x05\xae\xd6@K\xc4h\xb8\xad}\x42\xfc\x1d\x03M\x33k\x88\xc1j\x94\x83>\xc8\x10V\xf7\"\x1e\xe3WX" "Y\t\xda\xcaJ\x91_\xb5U\x93\xa0\x39\xba\t\x9a\x63\x92!\x66\x16\"\x16\xef\xc3\xb7K\x1a\xe8\x0c!\xef\x85Y\xcfn(\xfd\x03\x42\x0e" ")\x9b\x00\xd1\xa1\xe5`\x10\x62(\xe3\x36r:\x80\x05\xb1\xe9\x18.\x39l\x01G\xbc\x9b\x31\x9e\x15\xf9j\x04\xdf\xf7\x81\x66u!\xf8\x8b" "\xcf\xe3\xfdkG\xe9\x13\xa3\xdf\x02\x98\x8d-\x82\xee\x8a+\xe2\xd9\x8b#\xc2\x97\x89X\xc0\x33\"$\xa5`\x85\xbf\xb6\xf8 \x82\xd5\xae#" "&\x10&\x86\x13VQ&\xb1\x85*\x15\xc4;\xce\xc1u\xcc\x30\x39{\x0b\x62\x63\x0e\x95\x8c\xb0\x87\x41\xf4{\x1c\x99\x0b\x87\x31\x19\x9d\xa0" "\x95\x11\xa6\xea\xd3\x0bY\x99\x65X|\xfe\x90\x61\x89\x19\xad;\x43\xb6o\x65\xab\xa8r\x04\x9d\xb9\xe7\xf9\x36\x0cw;[y\x91\xc2\x03M" "\xf0\x1c\xaf+\xb9<\x64\xb3\xce\x61j+\xd8_\xc2lJ\x44\x34\t\x45\r~|qK\x36p\xf4\x32W\xf5\xfe\xef/vh\x84\xa1/" "\xce!\xd6\x90\xa0iL\r\x33\x0f\x08\xe6\x8f\x94v\x8f\x92{\x94Q:\xc0\x93 \xbf\x88\"M\xce\x45\x44w\xa8\x18\x42\xb9\x19\xd3,\xdc" "\xce\xd6\xb8i\xcd\xbf\x35\xca\x43y$\x8cO)\x88I\x86\x89l\xbc\x39v\xd0\xea\xaa\xa8\xd9q\xae\xeeS\x34{\x9au(\x16\x1c\xa5\x13" "\xc5\x02M\xd9\x45\xb4\xa9\x45\x17S\xb2\x1a\xb1\x89,\x83.\xfe\xcd\x8b\x9a\xd5\xae\x98\xd7\xb4\x8d\xeb\xbez\x1f\xda\x9e\x84|\xbe\x38L\x37W" "\x14\xfdP\xc1Q\x1e\n\x1e\xfe\xce`\x39\x30\xa2)\xa9!\x07\x04\x15\x39J\xab\x98\x0cZ\x14\x1f\x81\xb6\xebn(\xab\xa1\xed\xed\xb1\xb3\xa4" "\x38\x81\x9d\x83\xb2W\"\xcfh\x31\xb1\x14\x9f\xd3\xdc\x1d\xc5\xb5\xe3\xae\x39\xe6\xff\x36\xb8X\x64\xe6\xa6\x86Z\x8e\xf5\xc2\xdf\x1c\x8f\x84\xbc\x94" "\x08,`L\xe6\xdf\x88\x02\xa2\xac\xe7(\xc5\xa4+\xfd\x8b\xa7l\x34\x00|\xb2i\x45\xb6\xea\x30\x16\xe5^\x91z\x15\x8c\x05\xa0\"\xde\xa6" "\x89\xcf\x1f\x41\xb4\x44\x62\x10\xd1+\x9bh\xfa\x62\x88\x66\x42Hq\x1d\x44\xd3\xaf\x98\xc8\x01\xca\x44S\xd8\x42,>\xef\xc4\x01\x42\x86\x83i" "\xc0\xd8\x42\x86\xc5\xfb\xf5\x0cK\xebw\x81\x35wg{\xde\xc3\xde;\xd8\xa4\x8c\xfd\x15\x63\xb0\xcd\x82X\\%\xd7\x87\x81\xc9\xbay\xd9\xdd" "\xb1O\xb8&\x83\x35\x7f\x90\x64\x04\xac{\x15\xc4\xb7\x37\xc4\x00\x01\xfb\xf8\xff" "\xd9z\x13\xad\x64\x9aX\r\xf7\xec;\xd9\x97\xea\xac\x88\x8a(\"\"\xa0 \x38~\x02\r(\x33\\\xcc\xb1\x07\xee\xe2$y\xdf\x14\xfc{" "\x9d\xb5\\>I\x03=T\xd7\x98J\xa5\xe6\x98\xe0\x87\xb6\x0c_\xcb\xf6\x0e\xb3\x87\xad\xf6r\x8c`=\xa6\x61\x64\x06\xf1\xbe\x8b(z\xd0" "*~\x62\x7f\xd7\x8c\xbd&\xe2\xd9\x89s'\xef`]\xb6\x10\xfd\xe5\x1c\x36SU\xde;\xc3\x0b\xbe\x64\xac*\x88Q\x94\x1d\x31{]\x36" "\xbd<\xc5\x97L\r\x16I\x61|\x32N\xaa<\xf9\x15\x33j\x81\xe9Y\xd0\x08\xda\xd8\x44\x43\xb4\xeb\x9c\x13[#\x8ax\xdb\tg\x36\x91" "\x15\x37\xe7\x05\x95+\xb0\xf6\x64\xab\xe5\xaa\xaei\x84\xc3\xf5>\xb5\xefp\x92Z\x1fSo\"\xd6\xaf\x9d\xd2 $=\xe6\x90\xa7\xa9\x33\x98" "\?M\x83\x9f\x0f\xc4.\xcat\xfc\xfc\xe3\xdc\xbd\xf6\xf3O\xec!j\x45k\x32\xaf\xb5\xab\xce\x0c\xed\x92\x88o\xe9]gG\xc4\xa6\xf6\xae" "q\x34\x92\x83\x01\xb3\x8b\x08\x93}\xcc\xb6\x98\x96\xbe\\\xb3\x9f\x9a\x43t&\x65W\x43\x1f\xc9\xf8\xa5\x30H\xe7\xa3\x9d\x63\xff\xadT\xb1\xd8" "\xce\xa8\xdf\xbfl\xc6g\xf7\xba\xf1\xaa\x1f\xee\xee;\xc3\xbb\x97\xae|\x8e\?\xee\x1e'>Y\xa6ZN\x9b\xfen\x35h\xda\xc5=t-" "}\x1f\xca\x9fkR\xcb{\x45\xbf\xfd\x45\xd5\xebH=\x8f\xe7\x42\x15g\x41|l\x61+g\xd3\xd8\x90\xe4\xd8\xb3U\xee&\x7f\xf7\xd7\xa6" "j\x82\x96]/\xe1\xc2\x03m\xc4\xf7\xdb\xbb\x88\xfb\xe7\xd9\xe5\x8bk\xbaX\xe2\x63\xbc\xa3\xb1\xdd\xca\xc1\x07\xdf\xb8{\x99\xe8\x38\xdc\xa0\x88" "\xe3N\xfa\xce\x82\x1f\x45\xf1\x80\x45j\xc0\x07\x9fL\xe2\xf6\x11\xa6\xd2\xa1\x45\x9d\xa0M\x87\xcep\xbe\xd9\x89s;t\xcb\xb1s\xacL\x1e" "\xaa\xa1n\x9c\x8d\x9d\xbb\xdf]\xdd\xc0l\xa0\xe2\xbd\x86\x81\x39\xe0\x8fW\x63\x8e\xe3T\xc4\xcaw\x13\x31\xb5j\xe2\x66\xc0\x97\xbf\xd2\xadr" "\xe2\x8by\x30\xe6\xd8\xb1\xb0\x45\x1c\x34{p\xa9\xdb\x92\xf3\xbd\xff\xf3\xbd\xf9,\xfd\xd6}\xe3$\xc5v\?\xf1\xac!\xb9\x44>[\"\xc3" "%\xac_\x35\xba\x0f\x0b\xb6\x88\x1c\x1c\xab\x98]\x8c\x10\x89\xdd\xb4\xff\x8a\x08\x80\xed\x9a\xd7\xb3\xd0\xb2\xa3\x03h\xc7}'\xc7\xab&v\xca" ".z\x0b#\"\xe6\xbe\x45\xcc!\xcb\xc1\xb5K\x89\xe2\xeeu\tv\"\x34\x06\x17\x34\xd1\n\xd7\xe9mM\xfd\x18\xc6#\xdd\xdfx\xb5\xda" "=\xcc\x36/)\xf0\xa7%~Z\xe6\xed=.\xc8u\xd2\xa3'\xb0h\x8d;\xa7\x06\x63\x66\r\x9b\x92/" ";h\x83\x36\xa5\xd3-\xb0\xcbZ@\xe4g\xe1\xac\x0b\xce_\xb0\x82\x42\x44\x9b\xce\x32\xb2\x86Q\x31}\xec&\xcf\xf6j\n\x08\xc0-\xb4" "\xa5\x9f\xc2\xf3'\xe6\xea\x02\xdc\x35\x84\xc5\xe5\xdf\xbc\r\x11\x83\x32\xe5v\x90S\x88_p]\xc4$\x17\xdaz\xban!\xd9\xff\x00\xd1\r" "($\xb9\x7f\xe0\xc5\xa9\x9f\x30\xb9;\x03\xd1\xf5/`\xf5\x88\x31]X\xa5T\x08\x01\x0e\x45l\xed;u\x95\xdb\x63\x0b\x9a/\xdb\xeb\x16" "h\x81V\xfeM\xca\x98w\x36\xcdo\\\xc4\xb0\xd2\xdf\xb4\xb4\xdb\x64Q\x34\xcd\xf7\xa3\xdc\xd1\x98\x0b\xf5\x80\x86\xc7\x36\x9f\x17h\xfd\x43\x39" "\xd7\x8e\x46\x63\\\x81\xc6\xef\x02\xdb\xca\xc2\xe6p\xa9\x46\x1a\xf4\x19n\xb1\xee\xbb{\x07\xff^!\n\xdf=\x82Z\x18\xd9^\xa9H\xc3\xdf" "=Vr\x0b\xe7\xd6*\xdf\x63\x9d\x99\x10V\xcc{V\xf3\xf7qyO\xfa\xa7\x10k/\x34q\xab\xc8\xba\xf1\x1e\xb1p\x84\xb0k\xdf\xc3" "\xdf\x44h+\xdf\x8c\x7f\x93J\xdc\xb2|s\x8f\xf9\x41#\xedu&\xce\?Y\xb0L[\x37\xfd\xae\x34\xf4\x17\xde\n\x45\x36L\xa6!\x1d" "M\x34G\x1a\x13\x93\xd2tS\xff\xd8jk\xb8\x94\x43\x1b\xde\xc5\xb3o\xd7\xb0X\x08\"^\xec=\xdc\x19\x94\xef \x13K*G\x10\x06" "[%_\x39\x45\x8e\xb9T\xd3\xcc\x61Q\xfb\x45\x83\x35Z\xb9\xedX\xdc\xa7\x9dg\xf2\r\xfc\xb6\xd2w\x9fY\x0c\xd2.\xa3V\ng\x17" "l\x8e\x19\xbdR\x88\\^\x81'\xab\xd0\\\x97\x94\xd7\xe4\x1a\\[\x0f\xa8\x12\xef\xdd\x80\x87U\xe7\xf6\x46L\x9b>\x63\x46\xdb\xb4\xec\xe7" "\xe8o\xf6\xb6\xa9\xfc\xc2\x85\xc1\x8f\xc1\x9frG\xdb=\x07\x8a\x62\x85\xb3\x19\xca\xe0\xc3\x61Z\x08\xd0\"\xda\xc9\x05\xf9\x08\"\t+\x08-" "#\xbc\xec\x83W\xc7N\xf5\xf0\xb1\x35n\xa2\x15\xf8L\xa8\x45*\xd8\xdb\xd6\xc8)\xb9\n\x8d\x8a\x15\x84\xdf\x31J+\x86\x38\x07\xa2\xd5x" "z\x94\x0f\xa5ZJ\xce\n\xae\xa5W}i\x05\xb0\x66\x44\x0e\xb4/\xe3\xab'\xda\xc5\x19\x0fJ\x89\x97\x83}v\x8d\xe9\xe3\x84\xf3\xd4\xd4" "\x38\x85Q\x41\xc0\x05\xa5\xff\xe6\x35\xc4\xed\xefV\x02#>\xfd\xb8\x0b\x9a\x93\x98pQp\"\xa2\x88i\xc9\xe1q:\x9b`{\x06\xd1\xce" "\xd6\x9b\xbb\xb5\xdf\x0b&\xd8\x8d\xe9\xdb>\xe2X\x88\x86Y\x12%m&*j\x30q\x0b\x32$\x1a&\x44*\xd8\xe7\xd4\xe8O\x0b\xdf$" "\x63R>M\xbf\x9e\xa1\x35\x0f\xc0\xef\x96\xee\xdb\xde\x44\ny>\xd2\x02\xf1z\x90\x1e \x7f$\xe6\x45`T\x97\xef\xb3\x8akl=*" "X\\-,\xf5\x9d\xb4\xf2TR\x0b\xf6'|\xc0m\xa7\xafxjy\x38}\xad\x18\xfeT\x10;I\xf8Y\x04\x99w\xd3\x39rQj" "\xae\xf2\xddJ\x08\xcf+\"_*\x1b&%k\x19\x13\x31O\xcb\xe0]\xc2\x33\x94K\xbf`\xf6P\x92<\x97\xe6\x91\x18p\xb5Q>\x80" "\xe8*V\xe0g#\x84\x19\xa9\x92\xb1h\xc2\x63\xc6\xf8\x37{\xdf\xec\xa1`\"\xfc\x9eQG\xd8\x05\x9c\x83\xe3\xa8\ngw\x19XWX" "\xc1\x9b\xda\xd4\x91u\x36\x1d{\xae\x07\xb6\x08\xca\x14\xedS\x95\x95l\x95\x93\"Ul\x19\xa0\x9c\x81(\xc7J\x44M\xe8V\xd9\xb9\xadr" "\"\xa2\x8a\x89\x88\xb8\xcf\x13!y\xabl\?\x18\x91\x46\x88*\xa9\xca\xa9\x80*\xab&%\x9cJT\xac\x91k\x10\x33RUl\xc7+\xb4" "\xc0\xdf\xc2\x93G\x8eq\x45|\x66\x82V\xe3\xd3\x13\x12\x17\xa4\x91\xba\xca\x19\xd0*k\x93*\x1b\xd4*\xe7M\xab\xf0XW\xde\x83\xd7\x97" "NO\x04\x11\x99\x8b\x44,:\xd5~{\x30\x08Z\xfb\x83\x93\xd8\xaa\xa5g'\xe9\xf3\xc8\xb5\xec\xf7|s\x8a\xc4\x62\x15T\x8d\xcb\x95\?" "\x0cG\xabZ\xb3`\x94\xa1\"\x87\x10\xd5\x18SxU,\x0b\x36\"\x94\x88\x88m\xdeV\x87\xbf\xfa`\xfa\xa0T\ny\r\x38\x9bT\x11" "\x07[\x18\xf1\x94\xb0\x43*\xe1\xd8h\";\x86\xd5x\xc0\x1b\xb0U.\xc2\xc9\x04Q\x83\x44\x9c\xf2+\xe8\xfdT\x63\xbek!{\xde\x8c" "v\xa5|\x05\xd1\x1eW\xd9\xd7\xae\xc2\xb9\xdbH\xf3\x99O\xf6Vi\xd0Sz\xd2\xb0\xbf\xac\xd4\xad\x9f\x1b\xd7\x41\xf3\x45\xd2\xa6\x85\x90\xa2" "\xa2\xc1\xfeW\x45l\x30!&\x44\x94Xm(\"\x8c\x81U\xf6\xcf\x95:\x13\x0fS\xbcj\x9e\x1fu\x0fX\x0f\xb4\x65Z\x88\x0f\x61\x1a" "\xc2\x41@\x84\xc9\xae\xca\x39\xe4*\x9dn\x18\xeb\xcb\x18\x1f\xbcg\xb7G\x41\xf3\x35\x96\xa6\x85\xc7\xac\xf3\xce\xd0WV\x86{\x41M[\xc5" "\xca\x7f\xa1\xad\xd8\x14\x62\xbcVM\x46H\x44\x9a\x44\x94\xac\x41\xab\xc9\xbc\x98\xc1lT\xf5\xd7-\xfc[\xec\xb3;\xafZ|\x85w\x41\xab" "[\x35\xcd\x9d\x91\x1f \x13\x9b\x1d!%\x16\x46\x43\x64\xc6\x17q\xf3\x80w\x94>V\xb0\xc8N\xc5Q\xf8\x42\x1d\x65\x0f\xd1\xce\xbaUZ" "\xd1\xaaX\xb2#\xc4\xa8\x46\xe9o\x8b\x03\x1c\x46\x41S\"\xad\x38\xc0\xa9\xb2\xd7^\x45\xf0m%\x1e\x95u\xb8\xd2\xab\x1aV\xe7UV\xd8" "U\x84$\x16\xe6\x91\xe3\x65@O\xae\x9d[\x43I\x15\x0b\x1b\x94\xfc\xd6\xdbM\x38\x01Z\xca*\xa7s\xaa\xc1]_\x45\xfe\xda\xdc)\x85" "\xfd\x43\xa7\x17\xd7\xac\?\x04Go$\xbf:\x46\n\xd0\x7f\xa9J\xa3\x96\x92MM\x95\xaeLU\xac-\x35\xea\x9c\\\xfd~G\xf3R#" "\x1a\xbd\x7f\xaaX\xc2+\xbc\x41\x42l`\x18\xadn*(\x34\xfe\x12\x37\x0f\x9f\xe4\x0f\xc9\xef\x61\xb2H\xb9Y\xe0\x35`\t\xabr\xe6\xb5" "\x83\xbf\x41\xa1\x8c\xb8\xa5\x97\xe5\x35\xb0\x1c\xf0\x17\xad\x62\x18\x10\x99\x36G\xean^\xae\x38\x31\\\xdd,\xec\xbb\x8f\xb4\xc4=\x86\xf0m\"" "Z\xfc\x44\xe1\xdc\xce\xfc\xc8\xec\xab\x8ck\xef\x88\xb8\xd2}\x84\x83\xa4\xb0v\x03Z<\xc4n\xedo\xd2\x07\xd1\x90\xd5\xd8T\xd5\x62\x98\xf8" "klojX\xf7',\xd7\xf4\xbf\xc5q\x35\xe2\x18\x34\x18\xf4j\xbcI\xf9\x62\xdb\xfe\xffRs\xae\x9c\xdb\x9cU\xa3oL\x8d\xf5r" "\x8d\x8d\x9b\x92\x86\x13\x15\xe1\xdc,\"\xb2\x45\x8d\xf5s-\xb9\x1b\xa8\x97\x1cl\xf9\x35\x0e\xf2\x94\xfe[\x15\xb7\x17\xc3\xea\x39\xe3\xceQ\xc4" "\x13\x35\x86\x43\xe8\xcd\xd5\xb2\x9c\xd5\xa8\x35\xe6\xb5\x1a\r\x91\x8c\xa6\xde\xad\xffM\xbe\xd5xk\xdb\xea\xa9\xd6'\x97\xcc\x65u\x8eW\xea," "\x86u&k\x1d\x81\x32\x84g{Nu\x31G[\xa3ZR\xfb\xdcjS\x30\x87s\x62\xf1\xbe\xb0@\xa2\x9a\xac\xb3\x0f_\x8f\xebs\x10" "\xbd/%\x9fK\xc5\xacP\x83\x88\x06R\x19>\xe5s\xf0\x1d\xd4\xcd\x8b\xaf\xe9\x62\xfa\x31\xa3\xcbK\x9d\xa6\xe6:\x87\x1f\x42^\t\xf5\x93" ".\xb0\xdd\xdc\xeesn\xb3\xce\t\x98z\x62\xb1\xd5\x84\xa3}g\x88\x93%\xda\xc4\x32@\x9d\xb5n]W\xd7\xa1h\xd6\xe9\x11S\xc7\xf6" ">\x42\?~\xfb\xebWT\x0f\x82%n*\xb5\xe0\x0e\xca\x1b\xb2\x0c\xa2\xe0*\x39\x8e\x37\xf1\xee\xc4\xc5\xec\x16\x8f\x8f\x08}\xddz\xd8w" "Z\xc4\xe2Wv\xfe\xba#\xa6\xd5\xa3\xf4\xad\x42g\x8e\xba\xff\x32\xc3\x10\xb9\x9e\x8d\xeaN\x8e\x01UL\xcb\x0fi\xe5\x83\xda\x1b\xf9\xe3L" "\x8e\x18\xc4\xc0\x34\xf5\x15\xb2Pv\xdd:\xe2L\x0bs\xc8:\x88{m\xdc\xda\x65\xea\xd8g\xc5\xc8i)\x15u\xee\xce\x35\x0c\x36\x1a\x7f" "\x93\xab\x10\x10G\xb5\xaa\x93\xe5T\x45\xb6t\r\xf6\x01\x1bX\xdb\x65\x64\xab\xae\"\xa7\x92\x1a\x34\xf4*\x93\x88\xfb\xba\xaa\xd6\x06m\xc3\x0e" "\xe5\x18\x44\xa7H\xc9!\x97\x89\xe8\x92\x9bh\xab\xcd!\xce\xee!\xa2\x97\xd4\xa0\xd1\xb8\x11\x1f\x16\xc0\x93\x1fg\xbc\xbc\xdb\x39*\x1a\xebi" "\xd5\xa4\xceKn\xbe\xa1\x9d\xce\xd4u\x65\xef\x1aZh!\x1a\xec)\x37\xe8\xc8\xa1\xdc\x8e\xe4\x1b\x9e\\\xc2\xad\xd5\xc4\x34X\x31TL\xe7" "Ol\x03U\xdb<\x1e\xd1\?\xb5\x41\x0bi\x03{\xf5(\xef\xb7\x86\x83\x06\x82\xd8\x19\x43\xa8\xb8\x1d\x8dmh\x83\xbe\x1e\r\xf6\xd0\x95l" "R\x1a\xac~\x95\xecL\xa9\xc8r\xd4\x08\x61;T\xec;uK\xeb\xdeS\xd0\xbak\x44\x44\x17\xad\xc1\xa4\xb6\xb5P\x42\x8b\xe0 \xec\x30" "\x39\x31\xe3\xd1`\?\xbb\xc1\x31\x7f\x43\xe3\xb6\xfd/\xa8\xdb\xa9\xea-\xfd\xcf\xee\xbd\xf1\xa5r@\xafT\xaf\xc0\n\xf2\x02\x1d#\x1b\xd8\xa1" "\xc0\xe8\xb9\x91}\xce\x06\xcd\x9c\rZ\xe5\x1b\xec\x30\x37\xccV\xbd\x15\xab]\xd7<)\xd8\x19\x16\"\x0fs\xb6\xa0\x41\x0f\xa8\x06\x87\xdd\x8d" "$wI\xde\"\x06\x9d\x88\xe7\xba\x35\xd7\xa6\xb4\x07-\xcf/Xl\x12\x61\twH\xabj\xc3_\x9dn\xa3\xcc|\xaa\x1do\xd4\x46\r" "\xfaU)\xe3\xf3\x06m\x65\xaa\xa5\xf3\x13\xcf{\xa2q \xd2\xc0\xae\xcb\xca_g|\xfeL\xe3\xbdj\xc9\xf9\x1e\x16\x99\x41\xbb\xbd\x94\x01" "\x64z\xd5\xf3\xd7\xe6\xa5\x30y \xd1)o\xd0h\xd7\xe0\xcc\\\xc3\xf3/\x16Gu\x1b\x9ek\x84\x92/\xb0\xe2\xc7\xb4\xadM\xb1\x91^" "\xf5\x9d\x1c\x85\x35\xe8\xca\xdb\xb0UJ\xa1\xd4\xa8\x36\x1f{\x62\x88\xe6\x99K\x44\x7f=*n\x1f\x45\x35\x38\xd7\xa8(\x43y\x44G\xear" "\xf3\x33!\xbc\xc9\x1aX\xef.\x9c\xaa\x93\?M\x9c\rl\xd6\xa0\\\x83s>\rl\xfb\x8dl\x0f\x99\x87\xfd\xe3\x46vP!Q\x42u" "\x8b\\)WK\x9c-\xbb;\xdc\x39\x37M\x39J\xcf\x9b\xb6|\xcd-\xaa\x8d\x10u\x43\x44X\xc6\x1b\xd8hZ\xf8\xbe\xa7\xbe\xb3\x45\xdc" ";\x16z\x19w\x12K\x34/\xa7\x1c\xd5\x37h&Q\xda\xff\x11\x35r\xf4\xee\xa4!\x43\x45OW\x11\xb7.m\rv\xab\x1bX\xc3&" "\x1c\xff\x38\xb1\xa5\xa1\x89\xba\x15\xf7\xcb\xde\xe6\xf3\"\xad=I\xb7T\xda\xb8\xb8\xd4\xd3U\xe2\x32\x14\x83\x81\x41\xbf\x95\xce\x0b\x9c\tR-" "\xdc\xb3\x88=_\x80\x11\xca\xcc\xe6\xe1\xd8\xe9\xf7\xa8\xeb\x9b\x1e\xfb\x9b\xea*h\xad\x06m\x37\xa6\x05w\x16j\xb4P\x9a\x36+y\x46\x13" "\xcd\x9fT\xc5\xc3\x63o\nT;*x\xa2\xaaV\xfa\xc5\x32\x7fh\xbe*\xd2\x34u\xcc\xb7\xf0;\xa6\xe9\x9b=\x0f\xa7\xdfI=\xd5j" "{\x9c\x36l\x84[g\"\x08\xc3\xb3\xa9\x18\xde\xa8h\xb4x\x98\x88)\x00\x8aR\xfb \xb2\x31\x0e\xec\xce\xc0\xe9\x81\xf0l\"\xe6\xf6\\" "\x64\xf6\x62t\x93\xee\x33\xfb\x16\xcfX\xca+\x9cZ\xa1x\xe6T\xd0sr+\xa9~K'\xe8\xe7\x14#\xbfg\x16\xf1\xe7\xec\xf4\x05\\" "\x45Z\x15[\x84\x0c\xd3tvn\xab\xa9_\x05\x34\x19\xd7\xb5\x9d|\x62\x15\xb1\x94\x0c\"\x1e\xd7\x44<\x8c\x89\xc8\x61&\xce\x82\xc8\x9a\xc8" "\x44\x0b\xd2\x64\xe2vzI\x35>\xb0\x8a\xcc\"\xcdp\x35\xb4KM\xdaw\x85U\x10\xad\x9a\x92\x43\x9a\x66<\x8e\xe2\xd9k\xd0\xd0\xc6\x34" "\x39+\xa1\xb4\xca\x15\xa7O\x8e\xaf\x9c\x1a\xae\x1d=\x9b\x66\x92\x9b\x82%\xb2\x8c\xc7\xd0\x1f\x06\x63\x9ai\xb3\xd7\xa0=\x0e\x36\xf5V\xd0\xe0" "\x13\xab\xf4\x44Rq\xd7\x41X\x0f$\xcf\x13\x96\x34\xd5\xfc\xf1\xb1~V\x39\x01\x61\xff\xf0\xa1\x63\x93\x66\x02\xa5\?%-\x05\xca\xed\x0cL" "\x93v\x83&'\x46\x95\xf1\xfa\x8b-\xa1j\x1a'\xa7p\x1f\x34\xdf\xed\xc0\xb4\xb4\xb6\xe0\xbc\xa5j~o*\xa2\xb6\xa3H\x33\x8bi\xbd" "#\xf6\xfa\x9a\xec^\x34\xd9\x43Rz:\xa8\xc8\xcc\xa2\"\xect&\x86\xaa@\x35\x9a\xaaU\xf4\xbc\x90\x61\x0e\xa1\x89\x65\xd4\xca\x1e\xd8\x9b" "\x83}\xeb\xb5\x35\x11\xcdO\x88y\x02\xa5\xdf>G\xfdM\x16\x66\x86\x81S\x0e@\xa4g\x8b\xe3\x37\x9f\x62k\xc5\x97k\x10\xd3\x31->" "L\x8b\xc3\t\r\x34\x93\xae\x1a\xc9\xef\x07\x34t\x9a[\xec\x80\xb5\x38\xcb\xd2\xc2\xda{!\\\xbb\x95\xac\xf3[\x9c\x39l\x31\x7f\x0b[I" "\xbf\xc4y\x84\x16+\x93\x16[\"\xa5\xdfi\x88\xc5)\x62\xc4\x9b\x43\xf7\xaa\x15O\xba\xe0\x8c\x97\x43&Q\xea\x04\xe0\x95\xe5\xaa\x16\xeb\x9e" "\x16\xdd=\x95\xdb\x8aW\xb5\xa4v\xc9.\xedV\x0b\x1bl\xec\x1c\x93q\xa9\x64\xb8\xa4q\xf4\xdf\xc3t\xba\xc6\x81\xd9\x8e\xb8\xfdU\xe8\xc7" "\xf0\x93l\xd9\xfb\x83\x95\x43\x0f\xa4_=\x8ax\x07\xb4\xb5\xb5\x38W\xd3\ng\x85\x45\xb1\x85\x00y\xc2\x16\x7f\x87\xf5\x05-OL\xa1\xa7" ":\x96\xe7\x1biVj\xd1\x15\xa1\xc5j\xb3\x45s]\x8bk\xa0ZX\xd9\xdcmq\xb5Y\x8b\x06\xb6\x16\x17^\xb5\xb2j\xdb\xc9\xceo" "K\x17`}\xfcSO\xe1\xc7\xef\xff\x1e\xc8\xce\xa3p\x0c\xa5\xaa\xf5\x9f\xd9uh\xde\xc2\x98\x36\xcb\xb3\xbb\xaa\x1aGT&^=\xc5\x8f" "\xcf\x41+\xf5\xcc\xb4\xbc\xfb\xd3\x10\xe9\x0fZ\xe8\xacS\x63\xdb\xad\x9ag\t\x15\x43SkZ\xbd\xe9/\x46\x8b\xbeu\x1b\\\xcb\xde\x8eh" "\xdd\x36m\xf5\xa1\xfd\x03\xf4{[\x9e\x43\x39\x0enq\x90\xaa\x8c\xafZ\x14\x91Y\x39'\xa4\xd4\x08\x95\xb6\xce\xd7\x34\x7f\x41\\\x90\xd5\xda" "tp\xce\xcd\x87\xb5\xef/\x1a\x86\xfd\x7f\x41\xe9SZ\x9d\xf9\?\xaeNY\x85\xaa\xc6\x99W\x13Q\x8a!\xbe\x07\xd1\xf6\x86\x86\x18\xaa$" "\xd3\x30\x36\xb1S\"\x85L<\xefpn\xca\xb4\xc2u\x8a\xd9 \xd3Js\xb6\x08\xa6y\x30\x04h\xb5pK\x9c}\x37\x11\x8e\xb8*\xb2" "\xceR\x91\x65\x88\"\xeb\x43\xd3\x90\x18/l\xaa_\x98!\x94\xb4\xf2\xbc\xc4\x85\x07\x1a\x62\x45\xfc\x07\xa2g\xaa\xf4\x8b\xd0\x96\xf7\x12\xbf\xe3" "\xe1iqS\x86\x13M\x0e\x9d\xe9\xf3\x88s_/\\\xa9\xfb\xc2N\xc8\x0b\xc7W/\xf4GQ\xfa\x35\xe8\xef\xf0\xc2^\xe3\x0b\x97\xe9*" "\xe9\x9d\xfe\x92\x44\x39ph\xb5\xc8\x0b\x9dk_\x38%\xf5\x82\xd8\xa3\xc2\x39\x9e;;\x46R\xd0*\xad\xf4\xabq\x39\x96\x92V\x39\x13W" "\x8f\xd2\xdd\xdev]\xf5X\xdc\x8f\x38\x42PM;\xe6~\x36T\xbb\x42\xbc\x35\x36\x34/|\xdfm\xf6\xa5\xdb\\\xd7\xd4\x46\xacr\xe3\xce" "\xa1\xec\xe5\x38\xc1\x8c\x90i\xdd\x15\x1b\x45\xefI\xb5\xd9\xa8\xb4\x11\xda\x45x\xcd\xe3\xc8\x9em\x04\x36\xef\x32\x46\x95\x91Uy['\xed\x0f" "\xfe\xa5/\xd7\xbb\xda\xd2\xd2\xae\x9d\xec\xdd\xc4\x93\x03\xda\xed\xdb\xea\x19\xbe\xf7\x96\xf4n\x38\x15\xd5N&\xf6\xc2\xdaii\xe6\x8c\xa7w\x9c" "qogk\x8dI@\x33<\xb5\xcd>.\x83\xc0\x1d\xddW\x1a\x0b_\xd9\x66\x31\xd2\x86Q#\x7f\x61-\xf5+\x02\x8au_\x37{%" "\x10\xaf\xfau\x83\x39\xeaOzK(\x99\x9b\?i\xe9\xf8\x44\xb0\x10!\xaa\x11%\xbb\x0e*\xca\x1f\xfd\xe3UK\x1f\x8b\xc9y\xfb\?=" "\xacO\xf3@\x39\x62W\xf1\x93\x46^%\x87\xc1*\x86\xd8\x1b\xa2\xa1\xe0~\xd1Y\x88\x9bhX@z\x10\x0b\xc6\x94\x9bI\x13\x01\xa2<" "@\xbd\x31;\?\xd0h\xcb\xb0\xcf~\xc5g\x45\xf0\xee${\xbb\x89W\?\xd8\x15N\x0e\xa0\xac)i\xb7\xfe\x8a[\x0f ^\xf5\x17_" "\xf5\x17v\x81\x10\"'~\xc5\xa3+g\xf8\xa9\x88\xd7\xab\xa4v\xef\xda\xe6\xb3\x00\x11}\x31\xa5$$\xedN\xaa\x65g\x8dlj\x95\xcf" "Wr\x85\xeb\xd1V\xab\x44\xac\x07\x11\x87\xcb\xb8\\\xe3\x92\xab/\xae\xe5\xfaJ\xcfN\xb2\x83\x9c\?\xbbh;)\xc1j\xec+]X\xce" "\xfa\x62\x93\xf6\xc5\xea\xe7\x8b\xf9\xe6k\x63\x91\x0e\x84\xc8\t\xc2\x08\xac \x11\x10u\xdf\x98\x9cO\xb9\x80\xa6\xff\x37;s&\x95\x45\x8c\x16" "\xbc\xcfw\xd4g\x96\xe9\xc7\xc8\xee}\xfa\x9b\xf4\x13L-\xf7\xd3\xdc\x80\x1e\x64}\xda\x12\xfa\xe9\xcaj\xc1>\"\x91v\x87\x9c\xeb\x1fr" "\x8a\x64\xc8S+u\xc0\x64\x91UL\x43\x90z\x13\xb1[kw\x18\x1f/\x41\x0b\xac.,R\xc7\x94\xc9\x90\xc3\x97!\xd7\x8f\ri\xd6" "\x1a&{w\xe4\x1b\x88<\x33\x94\xc6\x81S\x66\x43v_\x86\xd8\xb2@\xf8\x38I\xf6\xea\x41\xb3\xa8\xce\x42\xdb\xefJ\xd9\xd6\x38\xec\xb0\x0e" "\x0f\xb3\xd3s\xf2\x13\xe4\xed\xfa\xe7\x88\x05\xd6\x1d\xb1\xb6\x62\x10\"#+\xa5\x91:\x46O>\xe8$\x38\x62\xb2\x8e\x38\xc6\x1b\x65=\xcb\x63" "\xa3\xcd\xcb;\xd8\xb1V\xfc\x87\x0e\t\?\\\x35\xfd\x43w\xd4\x1f\x04\xad\xeb\xfe$\xf7}g\xfc\xb8\xe2\x12K\xd3\xd6o\xb1\xc5\x80\rZ" "\xbe\xedZz\xf4\xea\x9f\xa5\x18\x9c\xff\x64\xcd\x17\xf9\x80o\xf0g\xb3oG\x19\xbbMyN\x16\x9d\xba\xf4\xb5\xd0\x93\x62\x86][\xfe{" "\x8cm\xd6/\x42\xdf\x19\x63\xa9\x30W]jU\xb2\x43~\x83\xd3k.\x83\xf8\x65\x8d\xa8\x64\xeeQ\x91S\x30&\"\xdb\xaaH\x03\xfd/" "\x1b\xa7_\x0e>\x7f\xd9\xb0\xfer\xd0\xc0\xdd\xe3\x42\x87\xff\xd7\xb2\xe3^\xfa\x9d\x83\x36\xdf#O\xc0\xc5\x03\xc9\xc7[\xbe\x80k^m\x1d" "\xe1\xec\x87x(\xda\x14~\xe9\xf2\xf8\xcb\x95\x82\xbf\xf4h\xfc\xa5W\xb3\x92\x63\x9d_.\x92\xfc\xe5\xa0@\xe9\xf7\xae\xfd\xf9\xf3!\xebS" "\xd5hn\xf9\x65\x1f\xe2\x37.\xf0\xf4('\xbf\xf4\xac\xfc\x65\x93\xf7\x1b\xdf\\\xfcMN\xb5\x93\x8b\x89\xb3\xdf\xb8<\xd7\x31\xc1\xc3-\x34" "t\x96\x7f\xe3z=\xe9\x8f\xd2\xd2\x0f{\xe5\xbf\\\x80\xf8\x8b\xa8\x66\x42\x8c'~\xc3\x0e\x9d\"vx\x46\x0b-\xa9\xfb\x16\x9e\x93\xd7\x64" "\x91\xe4\xb5\xde\x98\x02\xb6oI\x97;s\tmK\xa5\xae\xfb\x85\xfd\xb2\x45R&\x93s\xae\xfa\xf9\x8d\xbb\xc7\x64\x9b\xe4\xd5\x31\x82S\xea" "s\x9d\x8d\x83V\xcb%\xb5\x7f\x9b\xea*^\xff\xe8l\x13\x82Z\xfc\xb2\xe0\xfcrl\xf7\xcb\x31\x85\x32\xa4\xa9\x88\xdd\x35\xc7#\xbf\\\xf8" "\xa1\xfc[\xad\xd9IV\x8d\xc3%\x15\xb3\x8b\xdf\x9d\x0f<{\xaa\x18\x9d\x64\xc7|\x00\x0b\xec\xad\xfcvz\x86\x37q\x8ep\xca\x41\xf3T" "\x15\r\r\x88\x89\xcb\x9a\x97\x1a\xd1\xe2\xd3\x19W\xc1\x98v\xf6\x1b\xc4\\o\xf7k\xb5>\x1d\x82L{=\x65\x63h\xda\xa2\xe0\xa2:\xa0" "\x17+\x41\xcb\xe5\xb1j.\x1c\xb8{\xa0\xf7\xadi\xd5\x11\xe7tL\xfb=\xcb\x46Sv\x14\xf5@z\xdc\r\x8f\x03\xa7n\xe1\xab\xbc\x9d" "\xac\xf7\x03m\xc9L\xb1\xba\xd1\xd5\x1dp\xe5\x37\xed\x65\x1fq\x1f\xbb\xdc\xd2\x46\x88^\x8b\xd2oP\x45\x66\x13v\x82\x7f\x39}\xf0K\x37" "[\xe5\xd6r\xa3\x1a\xf6\xd1T\xf1\x39>\xf2\xd8*\xb6\",\x7f\x1c\x34\x98\xfb\x7f\xe5\xf1@\x98\xfd-\x33\xdd\xd5\xe3I\xf5\x0f\xab\x8d." "\x0f\x39\x41\xcd}\xe4\x84\xe8R\xfd\xa6\xfbx\x0b\xe9)u\xbe\x15\xba\x07\xfe\x32\x1c\xc4/\x36*\x13^ \x99R\xb8\xe5\xfd\xd2N\xa0\xd4" "u\xdc\x0f\xbbZvT\xa4\x86\x44\x44\x84#\x61\x15uMZ\xe3\x35t\x34\x31\x43\x64}\xd3t\x8d\x94kX=\xf3KG\xe1\xdf\xf4u" "\xe9\xc4^V\"\x62\x1a\xf5\x17\x81\x93t!+\xea\xe7t\xd4s\xee$@:\x7f\xd0v\x1b\x86q\xd5\x92~\x31h\xeb\xb9\x94[.\xac" "\xfe\xe5|\xfc/\r\xa7\x42k\xf1\x61\x8eWm\xa7\x62\xc2\xa6\xa6\xc2\xea\x39\x89\xe4\xcc\xea(\x16t\xa4\xf9\x65\xd7_\xf8M\"\xaf\xd0\xdf" "\xf9\x37\x1b\xb5\xc8\xceN\x92\xe8J\x32\xe9\xda\x8f\xee\xa9-\x34\xc0k\x05\x35g\xf6\xb3'\x35\x66\xc6g\xa5\xf5\xfc\x97\x1e\x96\xbf\x1c\xa9(" "\xff\xe6W\\n\xa3\x9a\x14\x81\xbf)r\x1e\xbb\x65\xbf\x9b\x1b\xbc&\x0e/\x95\xec\x0f\xa8\xe8\xc5U\x45\x16\x42\x11\xe5\xb7\xe9\x13\x1e\x85\xbd" "\xb9_\xdd\r\x85\x8d\n\xc2\x92\t\xd9\xd4\xe9\x36u\xa7W\x9b\xc7\xdc\xae\x36\xadQ\xfbv\xa6\xf3\xb5\x8c\xfb\xb7\x07\xf0\xc6\x11\xf0\xb4;\x65" "}>\xd5V\x1b\xbd\xa8)\x9b\xc6)\xed\x95\xca\xf4\xe8\x8e\xf3\xafS\xc4\xd6\x36J\xd5\xc2\xce\xfd\x34\xbe\xbcJ\xe7u:\x95Oi\x05\x9d" "\x32\x03O\xd9\x45\x9f\xca}\x64\xebS\xd6ZS\x1a\xdc\xa7,\xa5S\xbf~\xbc\xbet\xfaG\x9c\x86\x9c&g\x65\xf0\x1c_\xe5\x14\xa8\xd2" "\xefO\xc5\xdbo\x17Y\?\xa8\xb8)Q\xfc\xb6L\x31\xdd\x16\xb0i\xcaoI\xf1`\x62O\xb1;\x80\x31\xb9;\xa3\x8f\xa2j\xccsS" "\xce\x96)i\xdc\x9a\xa6\xf0h\x9a\x66\xdd\x0fr\xe2\x64U\x32\xcd\x06\x17 \xd3\x80\x66\x98\xe9\x7f\x1c\xaeL\xc3\x02\x15\x15\xe9\xb0\x31\xf5\x07" "\xd8\xb4j\xce\xb8\x1dq\x44\xba\x64\?{\xc9\x95\x35\xcb\xbfy'^\x1d\xf3].\xff\x96\xf6\xdb%\x63@-\xb9\xccj\x19\xe3\xfaK\xce" "\xb6/\xd9\x93X\xc6\xd7\xbaZ\?\x8bx\x14\xefo\xb9\xf5\x9fZnG[K\xde\xaa\xf2o\x32K\xf6\xf6\x82\x36\xdf\xe7\xb4\x89\xad\xd8\x0e" "\x8e\x97\xaam\x1d\x01\x96q\xb7\xe0\xd4\xaf\xe1\x95S\xdb\xf8\xfdu;\xe4\x14\x8cx<\xba\x03'\xfc\x15\xfcL\x85kg\x38\xa1\x13&\xb7" "\x65l\x11\xe1\x84\xcb\x88\x83\xa2\xa5$\x18\x08\x63\xecr\xebOJ\x91\xb9\x63\x99\xec\xe3\xb2\\\xd2\xbd\xe4\x32m\x65\xfay\xc4Z|\x99\xdc" "\x35\xc0\x32\x12(\xb9\x1f\x83\xf5\x95sk\xac]&\xc3Gp\xf4\xe9\xdcI\x0eh\x9e\x1c\xa2\xa9Y\x80\x9a'rz\xb6\x04\xf3\xdf\xe0\x85" "\x06\x1d\xe2*\xa1\x65Z\x9a\x38\xfd\xcd\xa5\x08\x10\xb1\x94{\x06\x61P\\\x62\xafn%\xbf\x87\x35\x33K\x66\xf0\x65v\xf8\xeb\t\x9e\x31\x05" "\x32x-.\x39\xd1\xbb\x44\x10\x7f\x61\x0b/\x99+(\x97\xac\xba\x97:\x86\xe7\xa3\x61\x1b\\!\x8a\xcd\x12\xfb\x64\x08\x7f\xf8\x39<\xa1\x96" "\xd9\x12\xc9J\xaf\x46%#\xb5,\x37\xb7\xbf\xd8\xb8\xc8\xc5\x9d\x97\x8a\x03Z\xda\xe1\x8e\xbb\xdcTJ |\x15\x95\xf4\xcbYnZ'\x64" "\x11\xecX^Y\x61\xd3/\xe5\xdc\xa9{\x8d\x63\xfd\xc3\x8a^/\xab\xb8\xadV\x14\r\xf5\x83\x45\xd8\xff\x39\xb0\x8dY\xf0\xdf\xc3\xb0\x0c\xae" "\x38\x14T\xeaN\xa1\xb6'\x9di\xe9\xa3G-Z\xb1\xf7\xbb\xa2\x1f\xdf*\xfc\x16\x15\xe7*\xa9\xe5\x9d\xc9\xbcI\xa3\x96j;\xe7`\xbf" "u\x95\x34\xf0\x44\xf4\n\xf6\x41\xe3\x8a\xfe\xe4+\xfa\xd9\xae\xa4\x61v\xea\x62JL\xee\xaf\xb2\xce\xfa\xbfO\xcaI\xf7\x15M\xd3J,\xcf" "\xd1v\xd2\xb6\xaf\xea\xae\xe8\xfe\xb7\xda\xd8v\xae\xdd\xb5\x8e\x07O\xda\xec\xc2\xaf\x99\xb4k\xd6\x63k.\x32Y\xc7{\x33\x10\xab\xff\xd6\x1c" "\x0b\xaf\x39^Z\x33x\xd9\x9ayZ\xb9\xf5N\\\xd3r\xa0\xe4\\\xfb\x9a\x95\xd9z[\x99\xadiOXs|\xbd\xc6\xbe\xa6]\xed\x65" "&\xf7o\xe1\xca\xfd\x13\xa7\x1e\xbd\xe4Q\xbc\x04i\xc6\xad\xaf\xb2\xc6\xb6\xad\xc2}\x12U\xc6\x9a!\xc6\xd6\tr\xdf\x9a\xf3.kV\x06" "k\xfa\x94\xac\xd3\x32t\x04\xac\x0c#\x11\x65\xd2\xc1m\x61\x87\x33!|y\x95\x9c\x1b[\xd3\tn\x8d\xed\x04\x84\xd1\x97\xd3\x1f\x96\xcb\x46" "\xd6\x8cL\xb3\xde\xec\xe5\xc1\x63<\xd0\xe6\x04g\xdf\xc0\xa9l\x8dy\xfc\xde\x01\"\xf1+\x1b\x64\xc7\x98\xee\x7f\x83\xe6\x41\xdb;\xd0)o" "\r\xbb\x30\x0b\xda\xf7<\xdd\xef\x9b\x86\xc5\xe6\xbd#\x98\x12\x94s\xd0\xacQ\x46i\x89\x10\?M\xb5\x36\x39K{\x11z*:)\xca\xc1" "\xbb\x89\x18v\x88h\x41\xf3\x84\x36\x32\x37\xfa\xb7\x30\xc2\x16\x9eR\xb7\x38\xe2\xc2\xcb\x32x\xc5\xcf\xad\x07!\xb4\xd1\xb3\xb0\xd4u\x62\x12\x43" "\x44s\xe1\x14\xda\x18Jh\xa3V\x65\xc5\x89>\x05\x44\xcbV\"Z\xb7\xd4\x18\xee\t\x99\xeb\xb9\xe9\x1a\xdc\x01M\xc4\x1b\x17\xd1\xb6\x03\x13" "\x46\xc7\xce\xcc\x06\xe6\"N.$\x91PT\x44[\xed\x19\xd1\xf4\n\x0f\xf1\x83$Wq\xfau\x11\xec\x43\xc8$\xc6,\x9f\xb0\x87k\x62" "\xc0\"\xe4\xed\x84\xed\x85!\xba\xc7\x87i\x9e\xf4*\x9a%\x0c\xa2m\x0f)\x62\x15\x0f\x8f\x19>\xe1\x1c\xaf\x1e\xc6\x33%\x92\x10\x35\x86p" "\x84G\xcb~\x9e\x9dp\xf2\x13q\x86\xb3\x63\x17z%\x1e\x02\xdb\x96\xf5\x8e\x36{\xfb\xe4\rh\xce\xe9\xc2\x12\xd2\x03\x81\nz\xc7\xf1\xf5" "\x61|\xd9\xc3:g\xd1\xd6oZ\x11\x1f\xde\x99\x96\x94z;\x9f\xc1q\xacw\x9c=X\n\x9f\xd0\xa6\x65U\x8fi\x9b\xbd\x02\xba\xe3\xa2" "\x99\xb5\x46Yt\xea\x17\x1e\xdf\xa1\xd9\xbaJ\xe5/h\x63\x00\xa1M\x89+\xd7 \xf2\xed\x89t\xab\xd3\xa5\xc6\x41\x92*\x16\x95\xab\x1c;" "]\x82g\xa7\xce\xb0\xf6\x11\xda\x65\x01\x13k\xd0to\xbd\xa0%W\x9d\xec\xed\x35h\xc3w\xb8\xf0\xb9\x06\xd7\x02\xd3\xd4\xc9\xcav`s" "-[\x37\\\xcb\xf6K\xba\x89\xe8\xaa\xfd\xb7\xb8\xf7\x63\x9b\xe3K\xac\xe4\x17\xed\xa2.\x7f\x10\xaf\xf0@\x98~QN\xb2\xa3\x08\xa2\x7f\xdb" "&\xcc\x8c\xcc\x43'\xb0\x86\t\xbb<}\x97\x8f\xde\xe5-t\x91\x8c\xf0\x19\x36\xfeM\x1e\xffl\x1b]\xd3v\xef\xc0~\x16~)\x7f\xd1" "\x01<(MKrW\xf2\xe7\xda\x66\x36\x97\?h\xfd}'\x66u \xa2<\x9bX;sQz@\x41<\x8b\x82\xb8\xba\x8e\xfbG\x30" "Z\xe9\x81R\x32\x38\xc4\x9a\?\xbd\t~\xcd\xe6\xfd\x94\xfc\xd6\xec\xd5\x89\x39\x1e\x13\x31\xca\x90\x9b=\xdf#;\xa0\xc5\xfbQ\xb6H\x1e\xb7" "\x11\x8c\xb0|J\xf6\xc0{\xdc=\xbc\xc8\x85m\x64\xbb\xe4\xf3\x1a\x0e\xee\"~\x9f\xa2\xedq\x31\xf4T\xc2\x81q\x63G\x43\x84\x30\xd1\xfa" "\xfc\xbd\xd9>z'\x1a\xd0\xb0\x86\xab\xc0\x44\x61\xc4\xea~\x11\xb7\xfc[\xd7\xb1\x8e\xd5\x34V\xa1\x10_]\x84K#\xc5Y\x10\xfdR\xcf" "\xfbrjO\x13\xd1\x36%\x9e\xddv$\x15\x32Q\xe1\xc8\xa3\x9c\xc6%\xf6\x08\x45\x9b\x93\x0b\x64\x18\x86O\xef\xbe@;\xc5\x39\xb2|\x01" "\x63y\x17=\x19\xa0\x61\x0b_\xd1.\x90U\xe0\xbd.\xec\xac=\x39\x45T\xadW\xfa\xaf\x16\xce\xe3\x07\x10/Y\x0e\x98'\x8e\x12\x45(" "\xeb\xed\x91<\x35\xaa\xca\x93\xac\x7f\x46\xe6\x9d^\x8eX\x15\x9eln\x90\x36\x9b\xd2\x8bt\xea\xb1\xd4\x46\xb4\xfbog\xbc(\xc4\xabO\x1d" "~\x9c\\\xc6\xc5\x45|=\xd1m)\x0e\x66\x61\xab`\xfb\x96\xe7m\x15Go;\xda\x86\xf9j\xf3\xb0\x17\x1f\"\x8d\xe1\xabk\xfc\x9b\xdd" "\x61\x0f\x61h\xcb[\x17\xe1\xc2j\"\x9b\x95\x9d\x02x\x8a._\x8f\xee\x92\xbd\xd3\xa4\x64\xed\xd7\x05\x82\x46\x18\xe3\xe7\x83\xb4z\n\xcd\x17" "\xb1\xabx\xe5L\x0e\x87\xf0\x64\xef\x31X\x8apyHZ\x19\xb9\x88\x8f\xfb\x1a\x8b\x12%\xe2\">\xa9\x39u\x01\x14r\xe3\x85\xc5\x1bg" "<\x1f\xd1\xae/\xc8/\x10\xb5\xd5\xf6\xf3\xc7\x65\x08\x64\x05m\x31\xc3\x44\xachO\x37q\xfb#\x9c\xf7\xe5\xcb\xc9\n\xc1\x44\x8b\xa0\xe6\"" "\"\x99\x85\xd5\tv\x18\xaby\x45\xfc\xe0\x95m\x63%\xa1\x45\xc9\xeb\xd1\xa9V\xd8\xd3}\x9a\xc3\x93\xea\x1e\x63\x97\x1b\x1b\xdd\x89\x36\xae\xb3" "r\xbe\xd0\xa0`\?\xe5\xd4\x1c\xf3\x44\x33\x9fN\xe1\x8c'Y\xcc\x9c\xe9\xac\x8d\x18~\xa2\xad\xee\x93\x9f\xfd\x64\x80\xdf`\x61\xa7\xf0\x10\xbf" "\x85\xed]\x98\xcfY\xe8\xa3\xd9\x7f\x35t>\xe5@y\x01\xa2\x81\xbdH*\x1d\xc4\xd4\xe9q\x7fi\xa3\x86@\x31\xbfp\xd1z\xa5\xf4*" "\x8f\xe0\x10\xa2\x31\x89\x85\xc1\x80 \x1a*\xdc\x8b\xf4\tO\x97\xce\x86z\xb4\xc0\xa3k\xdc\xa9\x86-\xeb,\x31\xae\x11-\xd7\xc3\xc2Z\x15" "\x07\xb1\xc5\xc8\x14\xf1\x0e\xcf\x8a\xd1\xaaQ}\xb3\x98\x45\x44\xf3\xc7\xcc\xa2Op\xf4\xe3\xd4Y\xcd\xf1\xd7\x8e\x96\x1d.w\x0e\xc8 \x91\xfd" "\x16\xd3z\xebl\xef\xd0\x35l\xa7\x12\xb4\x9f.\xfb\x12\xaa\x61j\xd2\xc4\xec\xf2\x05\x91\x31\xa1\xbd\xdd\xb8\xb8\xd9[x\x66W\xed\xf3(h" "\xbfx;\x88\x38%\x44\x85\xa6\xc4\xe4\x9a\x88%~T\xe1W\x9b\xf8)\x86\xbe\xbdk,\xb4\xec]#\x9eS\xef\xe6\xcf\x66\x30\x8c|\xa9" "\x37\x7f\x0b\xab\x01n`\\\x12\x9a\xe1\xd0\xb8\xb9\xff\x94\?h\xb6\xd3\x9b\x31;>\x87\xbf\x8ej\x63\xb0\x30\x66'\xf2&.\xbf\x39Y\xe3" "\xdd\xc4\x0fm\xf0\x85_\xb1\x81\x9a\xf2\x03\x1c\xf2{\x66\x95\xf0I\x46\xa1\x19r\x8c\x9b\xe3\xc9\x66\x61\xf5\xcc\r\xa6\x87\x85\xe8\t\xdd\xc0\xc9" "\x46\x88.\xab\xb0\xe8\xf4G\x12\x11\xc1\x37\x45\xac\xbdK\xae\x45\x34\x37\xd1\xea\x1d\xfd\x1az\xe0\x37I\xeb\x18\x44K\xa6L\xa5R)\x14\x83" "\x36\x9c\x07q\xf6\xb9#j\x8c\x9a\xff~s\x66\x1b;\x14\x97\xff\xe7\x13\xdb\x92R\x88\xd6W\xb9}\xfb\x37\xc9P\x63\x04'{uh\xe6" "\x8f'\\\"\x35\xd2\x43\xa4RZ~\x02\xefO\xc9)\xd8\x42\xaa\xa6oy\xf0\xd3\xaa\xc8\x9bl\xefN~\x9a\xed!\x95\xe0$$\xc4\x30" "\x85KY\x85\xe7Q\xf2P\x85[\x80hy\xa4@V\xcf\x39\xff\xe6\xf7\x98)\x17\xcd\xac\x43\xbd\x1b\x84\xce\x17\xa2\x39\xb9\xd9\xd4p\x07\x9b" "\x16\xde\x37\xfb\xd8\xca\xf8l\xb6\xf9\xe4\xb7^p\xff\x1b\xbcm:$\t\xd1\x0c\xdc\x62\xb6U\x88\x81\xd3-\xdf\xb3\x32\x19G\xf0\xc2q\r" "\xe6y\xd1\xccQ\xbcG\x83q\xef\x16+@\x85\xe6(\xac\r\x0b<\x35\xa7y\xcc\xdb\xf5n\xe1\xd6\x64\xdc\x39\x84\x45\xf8=\xdb\\S\xe3" "l~\xbb\xb6\xd9/\x62\xd1`\xaf\x8eY`]\x96\xd0&-W\xd7\xd3jW\x1e\r\x13\x31\xbdz\x96\xffJ\x1awX\x91+\x9a\xf9\xf8" "\xf5\xeaXP+\x44\x1a(q\xa9\xa0\xad\xa3x\x16>\xd3\x19P|\xd6\xe0\xf8\\\xbe\x9e\x93\x0e\x46\xfch\xf9\xe8I\xfa\xe4q\xa1\x0f\xd1" "\x9c\xbf\x8dj\xc7\x35\x8f.\xd3\xa4\xe6\x0c\x9a\xf4i\xa3\xfb\xf4\xf1\x9a\xbd\xc0'iI\xd4\x15\x1b\xb9q\xab\xb1\xa1y\x92\x82\xa8{\xe0\x14" "\xed!\x9eR\x33P\t\xcdv.'~\xdbO&\xe7\x9bh\x41-\xe7\xe4\x10\xfdI\x13\xf4\x8dNW\xa2\xa1_\xf4\x84\xc8\xd5\xc2G\xd2" "\xdc\x8f{M\xad\x81\xef.\x38\x42\x91\xe1\xbf\xb4\x7f\xc5\xb8\xc0\xcfP\x42\x9a\xfe)\x42\xb1\x0b\x8b\x43\xd0\\#\x8dq\xe3\x08.\xea\xa6I" ";\x03\xdb\x98h\x1d~\xd7\x66g\x85\xc8_J\x18\x10\x45\xb4mV\x8d\x9b\x41-\xdb\xc3\x0f\x93\xfd\x0f\xb9\x15\x38\x8f\x8a\x86\xe1\xb9r\xf7" "\xe8\x1dn\xd4/\x9d\xfck\x81\x18\x99\x37\x61\xd9\x31\xea\x99\xff\xa3\x61g;\xd1\x90%\x9b\xae\x0b\xe5\n\xfe]\xec\x86\xd7kK\x65\xae\xec" "\xd0\x80\xa3\xb4\xeeN\xdf\x35]\x38\x87\x8a\xd7\x34i\x9cN\x9f\xa1\x99\x07|\xaf\xa3\x46\x9d\x87wX\xb0\x44\xbb\xb6^\xd0;\x8d\x39\xef\xf0" "\xba\x12\xa2\xcf\xd3\x8d\x8f#\x10\xbd\xa5n\x1c\xd9}\xf4\xe3\xae%\x63\x1fk\xcez\xfd\xac\x61\x9fO\xfe&u\x8byo\x15\xc9\x44\x03\xfd" "\xf4g\x1b\x18`&\x1c\nO\x30O\x61\x44\x08L\x11\xcbG\xd2\xc1gy\x9e\xc0i\xdch\xbb\x36\x7f\xb8&'\x83\xb1\x0c\xda\xfa\xf8o" "\xc6\xdf\xd7\xfa\xfaY\x9b\xdf\x44~\x98\xb0\x05\x99$\x05\x1c\xe7\xeb\x99$\x0f\x63pg\x07\x33\xd5\xde\xe3\x41\x11v:\xd1:\xfc\x8e\xc5=" "\x35j\xac\xfb\xd7\xf9\x8e\xe6w\xa6{rUW\x88\x83\xef\x1al\xe9\xbdIZ\x1a\xeb\x9d!\xf7M\xd2\x87%[\xcaI\xfa\xd6\xdb\xdc\xb6" "\x30\x33\xdb\x9bx\x42\xc0\x95\x89\xd9h\x82\xa9T\xd5\xc6\xce\xf8\xb8\x83I\x04\xd1\x8a\xc3pM" "\xdb\xdfN\xc8w\xcd\xd2\x34\x8d\x1b\x37 \x8a\xbfr\xf7z\xa2-\xf6h~Tm\xdb\x7fW\r\xf1\xebp\x1b[\xfb\x83~\xa2\x96\xa7y" "\r.\xdb\x38\xb0s\xaf\xae\xfd\xcd\x07\x99y\x91\xec\x1c\x63H<\x33\x86m\x7f\xfe\xa6\xde\x1a\xf5\x0e\xfc\x0e\xf4\x00\x89\xbaj\xcaq\xd4t" "\xf7Po\x9a\xb6\xf8\x88\xb6\xbc\x46\x38\x98\x80\xc3\x07p\xdcq\x86T\x9a\xf0\xd7S\xbe\xfb\xd9\xb9tZi\x15TM\xc3T\x04\xad\x04." "x\xfa\xc5\x19\xb8\x62\x9e[\xdd{!\x61u\xa4\xf4+%\xfb\x38\x94\x9c\x15w\x1e,\xc9\xe5I$\x15\x66\xcc\x8d\x9e\xc5!\xa6O\x8f\x88" "\xe8\x64\x07\xd2\xe3\t\xfc\xcdL\xa3U\xc1\x44\x0bH\xad\"J\\r\x81\xe4N.[ \x0cQ\xd3\xe4\xa6\xe1\xa4\xe1\x66\x9a\x94\x90\x05\xd8" "\xc2)\xc3\x89\xd1\xe8(\xc3\xf2m\xd3\x92\xf2\x14\xa1\x84\x45+O\x9dR\xdc\x93\x7f+\xf5\x85\xe9\xd5w\x8e\x65\xa3\xe9\xee\xb1{\xdeI\xe5" "\xd9\xe9\x45]\xc4xq\x80\x35\x35;Z\xf8\xf8\xa1\xf7\xb7h\xb3y\x9e\xd2\x44>\xa5\x15z\x9a\xd4{`\x13o'\xf9\xe6\xe3\xc0\xbe\xa3" "\xa4-O\x45\xaf~T\x9c|\xec|\x10\x36\x90\x34Mr\x37G\xd0\xa6\xa1\xa3\x33\x45%\x98\xe5{\x7f\x93\x07\x04\x95\x96\x63\?\xfbN\x1a" "\x33)n\x9a\xbf\xae\xb1\x83\xaf\xa2\xe7\xad\xe4\x17w\x9b\xee\x7f\x81G\xb8\x93\xf4\xf8\xcd\xa9\xdb\xe8\x62n\x45\x35\xbfq\x11\xfd-\xa9\x88\xc1" "\xcfT\xf7=[L\xd3k\x64\x32\xac\x65\x16\xde\x9f\xca\x19\x10\t\xdb\x34\x19\xad\x04\xcd&\x14\x85\xf5=,\x1e\x14\xb1\xf9\x95\xbe \?\x63" "%\x82\x31,\x82\x32\xcd\x33\xa9\x88X\x13\x07\xf1y\x84\xd5\xc8\xd0|#(h\xab+\x17\xb3%\x8f~\xcc\xe2\xfeQ|:wMR\x81" "\xf6\\\xd5t\xa5\x8etQoy\xe0+\xefL\xe7O\xf0\xd4\xde\xd1\xc2\x82\x1c;&\xed\x07\xc4\xef\x1cYr\xaao\x11\xdf\x95Wpi" "\x7f\xed\xd4\x98\x1d\xcfx}~\xc3\xd8\x8aQxx\xe8\xd5\xbf\xbe\xfa\xd9\x85\xeeK\x89\x01\x12\x0fx\xb3(\xda\xe6\x04\xb9/\xbb\xf8\xe7\x15" "\x41\xf6\xb0r\x62\xddKo\xea\xaf-k\"\x0fg\x9d'\x10V\xff)m\x08J\xcc\xf5\x8b\xd8\x1d\x38\xbd\x00\x8b\xb8S\xbe\xb0\x00\xdb\xa8" "\xa3SL\x96M\xbd\xb5\xd9~\xab\xee\xc5J\xc4\xa4y\xe2\xa2g*\x15{\xbc\x61g\xff\x90\x44\x9e\xcd\xa2\xa6\xd3\xb3\x43\x36z%\xf9`" "\x63\xe4\x32\xf8\x04\x08m\xf7\xc8\xde\x14\x8b\x16\x95\x37\xf1\xf2\xd6\x8b*\xff\xcf\xb7\x83\xb8\x1aKy\xa2\x8dv\x81\x05\x04\x42L\xf4,\x10\x86\x46\xc8\xc7\x93\x8e\x30\xf8\x8c_\xab\x13;\x1f'\x19" "<\x91x\x0c\xd6\xc8\xca\xf0\xab\xdf\x41\xf8\x36\xf2\xfc\x82\xd9r\x91,\xac\x0c/\xd8h*Ss%\x85\x88\x9ar\xc1\xd6V\xc9\xeai\xc1" "\x89/\x65\x38\xf4\x38`\xc1[\xa4\xe8\xa2*\xe1P(\"\xef@\xcdL\xb6\xad\x17\x44\xdf\xe5X\x34\x98J\x16~Q\xceN)u\x1f\xce" "\x19~\x8e\x9d\x08\x8dp\x92\x36q\xf3\x38\xa6\xc9y\x41\xcb\xc0\x02N\x30\x42\x8c\xef\x17X\x83'\x1cQ\xffi\xff\x31\x31\xe0n\xa5\xb4\x0c" "\xb9\xe0\x14\xc4\x1aq\xba\x8c\xb4!\xafu\t\xd7\xc3G\x08G\xd5[s\xd4\xa4\x84\xb7\xaa\x88\xfe\x91y\xe4\x08\xd1\n\xae\x39\x83\xb1\xd6\x18" "Y\xaf\x05,z\xeb\xad\xf9\x8a\x95\xf1x\x10\xf7\xf1\x9b\xa4\\\x04\x61yX\x63\xcf<\xa1m\xa3$l\x1e:\xe3\x8b\x63\x88\xd2+\xb3}" "\xa2\xa0\xcd\x9b:\x19\x63\x1b\xd7\xf4\xd6\xe9U>\xae\?\xed\x88\x08\x94&\x1a\x32\xe0\x9a\xd3\x89\x32P\xf9\x01\xe7g\xce\xe4\xfb\x05\x8b\xa6\x82" "!\x7f\xcdv|M\xe3\xa6p\x05\xc2\x61\x66\x9d\xad\xf0L\xb4\xb4\xaf\xe1\x7f\xa6\xfc \x7f\xe2\x8b\xcb\xf8\xe2:h\xed\x88\xa6\x83\x35Z\xa8" "\xfe>\xba%\xca\x1cyNV\xc8\x19\x38\xbb\x00m\xc8-\xb4\t\x14\xa1\xb9\x19\xf4\xf7\xb1k\xa4\xd0\xaa\x14\xe1\xc9\x1c\x34\xfb\x8a\xf0\x0c\xd7" "\x41\x32\n-\x80\xb2\xd0:(\xc6\xac\xc6S\xd9\x80QX\xc6-\xc1\xf2\xa2\xe4O\xda\xb8%,\xd3\x17\xbe\xce\xb3\xcb/\x8c\xaeL\xdbT" "\x46\x41\xfb\xc6\x63`\r\xa4Q\x9dg\xad\x83#\x9aM\xd0\x0b\xedm\x1a\xb3\x83\x01&\xf2\x44\x9b\xf0\x1c\xd6~\x08\xe7\x33',S.\xc2" "\xe2\x66Z\xa8\x93\xa0\xe5\x06\x08O\x04\xad\xf6\xa4;u\xe5\xf6\x34\x8c\x8d\xb9\xc5\xd8\xe1\xb0\x9d<\xb5\xb7 \x9e\x9f\x63\x34\t\xed\xfe\x17\xb3" "\x93\xa6\xa5\xed\x15\x1c\?v\xb4\xdd;Y \xb5\xb1\xfd\xa4\x11vt\x11\xeb\xfc\xa8\x8e\xd4N>\xafQ\x81\xf5\xb9\x1f\xafp\xf0\xb0\x93\x0c" "\x98L\x36&|\x13\xc9\x10/\x39\x99 \x13\xa0Z\x13Z\x80\x64\x61\x0e\x99+-\x9f\x80U$\x02\x62\xbf\xf5\xf7\x31\x05\x64L^k\x41" "\\\x94\xfc\xfe\xb1~L\x89\xdc\x92~\xaf\xc0\xc5\x11h\x1b\xca\xa9\xd7\x44\x33]\xf5\x92\xda\x97k\x9b\xfd\x42\xd0N\x91Z\x98\x64\x16\x32{" "\x65-\xa4\t\xf6\x99\x31\xc2&\xae\xe2\x14\x8c\xee\x36w\xeb\xec\xf1\x14\xdaO\x81|\x36n\x0epq\xcc}\xf5\xe9+`\x44\xa5*\xa2\xf4" "\x07\xffW\x13H\x43\xe5\xfd\x8f\x1d\xf8\xb6\x03\x36\x61\xfe\?\xfe\t\x0e`\x00\x01\xb1\x91\x0f\xe2\xa2\xe0\xa2\xe7\t\x88\xda\x63\x8a\xf6\xfc@Z" "\x66\xa4w\xd1X\xa4\x31~\x33\x86`\xf5\xfd#\xf4\x15\x65\xf0\x62>M\x42\x14T:\xb1\xf9\xa0\xc6\x88\xa5m\x10\xcdn\x62\xa2\x0e'm" "\xccnZ\x88skZ\xd6\xfdN\xe7\x87\x41\xf3\x35\xbb}\xba\xc6\t\xad\xc3 \xb4\x61\x8d\xb0{\x01Z\xffJh#\x39\xa1\xf5\x12\xfa\x8c" "tk\x8cO\x65\xb8}\xf7_-\xdc\x96\x1c(T`\x32\xe8\x1f\xc1\x44\x61\x84\x99I\x44\xe4\xf6\xa3\xa4\xb1\x0f\x9a/\xb4\xf0g\xdf\x19\xe2" "]\xf5\x8f\xb0\x8aVh\xdb\x98\n\xad\xf5\x35J-\x9f\x94O\xfd\xba\xda\x1c\xd7\x1e\xb3u\rk\x65\xe5\xc0\x1d\x9e'}\x1an:]\xac" "$\x16\xed\x1d\x37\x84\xcd\x87\x85\xb6\x32\xd5\x88v\xda\xf7.\xee\x1f! \xac\xf0\r\xafg\xb3\xf7\x04\xde\xe4\x9cI\x03\xf7\x8e\xc1\x86\xd0\xaa" "}\xe1\xe3]\x96\x8f\x36\x8fGXT(\x07Z\x45g\xfc\xf0\t\x0b\x1e\xb4\xe9 \xc9\x05\r=*\xd7\x32u\xc1\xfa\nZ\xff\x30\xeb_" "\xf3\xe3\x13\x36\n'\x88\xc8\xad,\x91#r\x06Z_\xba\x7f\x02\xeb\xaap~.\x99$.\xb4\xa9\xf9\xd1\x32\xe9\xc7; *\x34\x61\xcf" "\xa9\x8b\xa3l^\xa5O\xbf\xb6\xbe\xfa\xb5\xc9\xff\xd4\x1a\xee\xfeI|\xfcK\xce\x41\x8b\xd7o\x44_\xc2\xc4\xec\x80\x01\xa9\x45\x43\x86<\x89" "\xcf\x9f\x92\xf3\n\"\xf5\xba\x86\xb1\x9eiY\xb3\xb3\xab\xfd\\\x85o\xe6\xdb\xf2\x19\xb6\xf9u-\x9d_@\xbb\xe2M\\S\xbf\xe6M\xb6" "\x1a\xa0M\x36\x0b;S\xd0\x42\xc6\n\xbb\x87\x64\x05\xec\xf1s[u$\xb4X\x9c\xc2\xf5\xa1\xf6>\xd6\xf8\x36\xc2K\x0b\xcf\xaeI$+" "\"\xe7)o\xd9\x0c\x9cHK\x02^\xe0\x91\x10\x8eNh\x1e\x12\xca:\xf9Ow\x37\x39\xfb\xa0\x36\x93;\xc0\xe8\xcb\x35\xb8\x91\x89V\xef" "\x38=\x13\xc0\xf7T\xf8\x92\x07\xffQ\xffn\x93H\x1d\x98\xb7\xe4\x15\xe6\x90Ji\tO\x89\x1dU\x84\xb6\xfe[\x38G\x1a\xc3\xafS\xf8" "\xb0\xda\xdc\xdcn\x86xJ\xec\\.\x44K\xa1\xf4{\xd2X\x45\xdb;\xc5\x46\xb8\xfd\x93\xcd\xfei\x96\xeby\xe2l\x0e^\xc0\xd2\x83|" "\x17\xc3x\xd1P\xb2\x94:\xfe\x31\xf7l\xd3\xb4\xc5v\xcd<\xfa\xfb\x39\xbe\xac\\\x62+@\xfb\xb9\xf4|\x1f\\|;\x99\xe7r\xd9\xfa" "\xc9\x99\x98os\xff\x1c\x8b\x94\x95\x33\xd0\xc6\xe6\x42\x94\x91s\xcc\x38\x0b/\x8b \xbaI\xc2\xb6\x1c\x92r\x45m\x0cZT`\xa1u\x85" "\x85\xd6\x15\x16vr\xa0\xad\x99\x35\xda\xdeO\x97\xd0t\xdb\x8a*v*Pm\n\xf6\xab\xe0\xe8\x14\x1cGz\xc5\x19\xee\x13\xa3:\x63z" "\x16!\x18\x9fi\xea&\xb2\x7f\xeb\x9an\x36\x66\x13\x43\xae\x85\xcf\xa6#\xb9\xc0\x06\x65\xf9\x1c\xd1,\x84\xc8\xd2\xe7\x98W\x17\xde\xe1\xe9\x61" "\xcc\x13\x9a\xc7M\xff\x1cK\xfe\x8cz\xf5\xe9\x82\xda\x31x\x89\x34\xca\x46m\xa9,X\xa1\xaa&\xdf\x85s\x98jV\xa3\x9fo\x8eo\xa4" "\x66\x82s\xa3h\xa7\x97\xce\x10\xc0\x87\xda\x8c\x39\x46\xb5\xff\x13\xe2\xc7\x8e\xe9\x64\xb4\xb9\x90\x8av\x87\xa7\xc2r*\xe1\xc7\n\xb4\xe9\xe8~" "\x81]l\xa5n\xed\x66Q\xe9\xa1\xcd\\\xbc\xd4%jg\x0f\x7f\xd3H\xde\x13\xbc\xf1\xec\x30,\x96.\xc2>\xa7Z\xd1\x99\x8d\x87\x89m" "\x10\x64\xda\xf6\x8a\x15\xb2\xca\x1e\xab\x88\x35\xc4\x14W\xb1\xed\x64\xf6\xa2\xb8=\xff'\x39q\xc2\x08\xdb\xd7\x88~\x9a\x93PS\x88V&y" "\xbdi]\xfe(\xf2\xd9l\xe2M\x99\x8b\xaf\x7f\\Lro.\xb2\x37Q\x80=\xca\xa8\xb1\x0e\x9b\x1f\x41\x33\x87g\x13\xe3\x8b\xf2\xf6|" "\x17\xe4\x15Y K\x98=S\xb1\x9a\xceO\xe0\xfb\xac\xda#\xe9\x97\xfe&\xfd\xfa\xb3\xed=\xcf\x42R\x98\xb8\xfb\x81\xcd=\x43\\\xdd\xc7" "\xeb{\xd7\x98\xd3T\x94\x0c\x91\x9cU\xe5\x0f\x07\xe6L\xee\x39\x7f\xe9Q\xefU\xe4\xcf-:\x80\x31\\X\x44T#\x05\x36\xef\x85\xbf\xe5" "!\x1c\xc8T,\x38\xe1o\"\xe2j\xed\x64\xf3m\x62\xb7\xe6\xe2\xce\x17\x93\x32\xaf\xbb\xae\xc7oL\xcf\xf5G\xc8\x0ck\xeb\xb5\x17\xe2\xfd" "\xb1\xd3\xefJ\xc5~\x01\x06:\xd1\xfc\xe8\xd1:\xbd\x1f\xc0\xf9\x07\xda[\x31\x88\xf3\x82\x8b\xd9\xd1\xb5\xc6\x9f\xb9{\t\x07z\xdf\x41\\\xf6" "\x36\x9f\xefpQ\xb3\x03\x9b\xd9|\xe7\x84\xd0\xc2\xaeX\xff\x39v\x8a\x03\xc7GX\"\xae\xe2\x19\xe6\xaaU,\x91\xff\xbc \xa8q\xc1\xfc" "\x08T\xd4\x30\x1a\xf1\x80wq\x8c\xec\x89@T\x46\x7f\x03\xf1\xc9\x83\x13&\x34\x13\x11\x83\xd7\x45\xb8W\xa8Vs\xb2\?\xad\x62\xd8\x64K" "\xb5\x41\xfa\x89\"\xcb\xc1\xb1\x92\x9d \x8a\x61O\xc0>Vs\xd6]\x44(\x1e\x15yG\xe8\xba\x15\xd8\xbd)\xc4\xb9K\xb8+\x8ax\xfe" "\x0e\xef}\x11\xf3\xbc\x91\x0b\xa6\xef\x85\xeb\x33\xec\xa8\"\xa2\xcd\x1f\x1b\x61\x03U\xb1\x90\xce^=\xc3\x63\x99\x92\xb2\xec\xc4\x64\xa8\x8ao\xf0" "@\x12\xd1\x36qP\xbe#.\x9c\x8a\xccN\x05N\xd6\xabX\x84\x1f\x90\x8a%gH\xed\xc2\xbd\xd6\x82\?|\xa2\x42\x85\x64\xbe)\xf0\x89" "\x0b=\xf2\xd7\x99\xd4y\?\x05\x66\\\xf3\x07\x31\"\xd6\x9e\x8ag\x98vV\x91\xae\x8b}\xee\xfa\xa6l\xc4\x0f\xff\xa4\xd2\xc8\x0e\x1b\x38 " "\xf5u\x9f/\xe6\xe6\x1fx\xbb\xef\x64\x33\"\x62\x07\xbc;qz\xad\xa2\xdb;\xf9\x0fL\xdc\xcd\x08r\xa0_\xc8\x46\x1f\xae\x05Q\x06\x1c" "\x05\x66\xcar\xcd\x19\xb3\xce\x8c\xef\x99\x03m\xda\\\xc8\xd2.\x0c\xef[}jn\xd3\xc7\x33h\xe6\xfdk\x94\xdc\xbb\xb5\x16\x14\xc2\xab}" "\\\xaa\x7fP\xbf\xe8Zz\x85\xba\x18\xeb\x14\x8c\xe1\xe5\xd4\xce\xd2+\xa6\xbcg\xefz\x01\xbb\xf3\xa9\xc8s\xd4\xef\x9d\xb4\xe2\x88X\xc5R" "\x41\x11\x1by\xe7N\x65(\x1a\xc2\xa4\x41\x1c\x8f\xd8mV\r\x86[\x88~U\x11\x9fj\xc9G\x14\xb4\xe7\xc9v\x64\x63\x07\xa2%\x9c\xdd" "LS\xb7\xf3\x1d\xcd\xc5\xa7+g<\x61\xd6}\xe6[|n\xc2\x13\x41\xc4\x17\xe6\xc5\xf6QZ\xdf\xe3pS\xb4Z\xf2\x38\xa0\xd8\t\t" "\xd4\xfe\xe0\x90\x45\x45\xda\xaeL\x34\xe7h\x13\x37S\x96\xc3\xf6\xa7\xfcQ\xe4\xdb\xec\xb0\xbe\xec\x94\x11\x18K\xc5\xfbP\x96:\x43g\xb8\x9e" "\x8a\xcc\x37\xaf|\x82\xd7\xb2\x93#O\x11\x99\xa1_Y\x02\xdf\xf8k\xaf\xa9\xdf\x8a\x08\xa8\x02\xd1\xcf\xfd\xf6\xee\x0c\x87\xde\x0f\x9d[\xb1\xe2" "\x0c\xdf\xfa\xe0\xfd~\x0e\x35P\x88\xb7\x13\xfe\xe9\x37\xcb\xbcW\xa0\xdf\xf7\xd9\x8a\x39\xed\xfb\xd5\x19\"\x85@{n\xba\x18*w\x7f\xec\xef" "\x0f\xc4\x36\x31q{\xb1\x8fp\xbd\xeei\xdc\x65}\xd9\xe5%\xbb\x15'\x36\x9eS\x91\xb5\xacG\xe6T\xf1\xd7\x9b\xe6\xd8\"\xcb\xc0Y\x16" "\x1a\xfb\x0f\x1a\x9f\xa2\xf5\x86\xbd\x11L\xdb\xb0\xb9\x0e\x61\x0b\x44t\x17M\x15y\xa8\xcf\\\xd6/\x38\xd5\x85\xe9}\xcf\xb5p\xf3R\x45\xf4" "\x98\x37\xfa\x65L\n\xaa\xc8\xa2\x1b\xed\x87\x64\x30\x31\xb9\xef`w\x38=p\xa6k\xe7\x17l\xac\xa3\xbc\x33\x9c:\x8a\x9c\xde\x63\xd4\xfd>" ".\x8e\x43;\x11\x45\x88\xc6%\xe2\xe0\x91\xfcH\x46\xccK\xc3\x66\xd6gM;\x66\xda\x8d;\xce\xd0\x12\x8c\xdf\x9c\xe9\xd5 -\x30\xbf\x8d" "\xbf\xb2\xb7}\xedJ\x8eY\xc8\xc7l%\xc6|\xd6\x31\xcf\xec\xa5rr\x10*\xa8\xc9\xa1\x93\x36\xbd\x02M\xb6\x05,\xe3\x16NY.\xa7" "\xc3Pt\xa6\xa3P)O\xd7\x98\x01\x12q\xc6\xc7\xf3\x37>\xbb\x0f\x8d\xe3l\xec\x0c\xe1\xaaM\x0b\x8b\x17\xa1\x05\x8bl!\x9ek\xe7\x98" "\x66\x39\xd5\xa4z\xc8\xfa|\xdfs\x9eu\xc1O\xbd\xb3\xb2x\xda\x8a\xcc\x38\x8b\xa9\xd3{\xe0XH!\\\xf2\x8d\xad\xf6\xf4Ju\xa6\xb6" "yu\xf5\xb9\x0e\x07\xe2\xfa\xd0\xe9\x63\x08\x15k\x8b\x1d\x31\x94\x14\xd1\xd6\x0b\xf9sM\xee\x19\x01\x98U{\xd6\x9c\t\x63\x7f\x41\xad\x90\xfc" "\x11\xe2J*\x91\x90\x88\xeb\xaf\xfc\xd0\xc6\xbb\x87\xb7\xaa\xae\xd1{\xc8\x1a\xc9\t\x7fpV \xaf\xc9\"\x39&\xd7N\xcf\xa7*\x32\xf7\xea" "n\x82\xf7\xc8!In\?\x8bN(\xe6\x9dZ\\\x8e\xaa\x41\xb3\xd8\x43\x1c(\xea\x01,`R\xf1V\xfeo\xd8\xc3\x44`i\xe1\xf9\x1e" "y\xe4\x0c\xcf\x0bSJ\xc1[\xa2$\x7f*\xcd~\xf8\x34\x7fJ\x1b\x8b\x88\xff\xbc\xff\x11\x0e]\xf2\x36\xd9\x33\xd3`\xa4\xd7\xa3\x1d\x31\xdc" "\xbfh\xdd\x88\xe2\x8d\x37.I\xf1\x04\xbb\x9f\xabx\xee\x0c\x97\xbe\x41\xc1\xc1\x44\x97\xd1\xdfxR.n\xc5\xfb\xb4\xc7\xbb\xba\?\xc6\xc2y" "\x15\xef\xc9\xd0|\xe9z\x9a\xff\x05m\xae\xe2\x7f\\\xe0\x31L\xf7P\x0c\xf7 \x1aK~R\xe1\x1dV\xae\x12\xf6U\xb1\xdd\x8fQwG" "\xe0\x38)\xa9|\xc7=\xe4\xea\xe4\xe1\"\xbe\x44M\x1f\x9e\xf9q\x10N\xceN\x08\x8dV\xc2<\x96\x84\xaa\xf8\x8e\x19;\x88o\x17\x14\xff" "\x39\xb5\xa8\x1e\x15\x82\x36/`\xa5\xbbj\x33\x9aU\x0b\t\xfb,I\xbd,\xbdjt>!{\x17\x34\xa9\?\x39\xd3s&\x45\xbdG\xae" "R\x96\xf7\xa4\xa1\xa5\?}\xe4\x8bm\x30i\xd9w\x97\xaby\xe9K\x9e\xf8\x8a\x9fO\xe1\x1c\xd2gP)\x63\xf8\xa1\x8a\xfc\xed\x33\xdf\\" "\x93\x0f\xd8\xe4\x43\x34y\x33\x1d~\xde\xe1\x05" " \x13\x11\xae\xc2\"\xb2\x16\xf6\xa6P\x18\x32\x45\xbf\x94\x1d\x87\xa3\x9b\x7f\xbc\x9b>S$zv\xfe\xbf\x87\xf3\xf4\x61\xa5}q\xbfz\xd4" "\xf6\xc6h\xa7\xd7\x96\x0c\x1e\xbc]\xc2\x34\xbcr\xe8\xf4z:\x19\xe6\x9cz\xde\x99n\x95\xb0\x39\xbc\xe2\x31>\xd2\xb0\xe5\xe4\x0c\x85\x88\xe4" "(\xef\xcc\x8a\xbc\x05\x36p\x42\x35\xcd<\xff\xfcWK\x06\xfa\xa2\x11X\xda\x0fg\xcd\x8e\x66\x9bQ\x43\xc6\x1aX\xb1\"\x9f\xfc\xec'}" "V\x37\?\xcck\?\xe3\x64\xbarq\xf3\xc8\xea\x66\\\t\xa9\x39\x39O\xf6\x7f\xdc\x62\xc4y\x36\x65xZ\xb6\x08\tM/\xc9\xec\xd3\xc9" "\xb9\x8d\x42\x32g\x82/Q\x33\xa4{\x45o\x32\xd3\xfd\x0bLu\xab\xf8\xe5\x84/\x8a\x8a\?\x98\x9bwQJ\t\"\xf9\xe9\x81_r\x85" "\x9d\x17\x44<\xc8I\x19\xc5&N\xaaM\x9d\xde\xf8\xc0\x35Pxr\xee\xe4\xfc\x8c\x8a\x08Y\x06q>\x8a\xfb\xc8-XZ\xab|t\x62" "\x1d\x8b\x8a\xf5\xed\xd1\x0f\x37\x0b\xa9\xc8\x31\x39\xdc#\x8c\xe1:\xf9{\xb2\xebyM\x45\xff\xf4\xe2\x93\xfcrzOR\xc4p\xdbW\xa1\xc7" "\x94^}\x38\xbd^\xf1\x16\x17\xbb\x62)\xd1 \xa6\x1c|\n\xc3\xfd]\x1frJO\xc5\xec\x1e}\x08\x44\x65\x12\x96j!\r\xd9\xc3\xd5" "\xed\xb4\xfcVM\xf4\x96l\xa7^KK\x63\xa7\xf7\x04\xd3\xbb\x62\xbc\x8f\xf2\xee\x05\x38}X\xba-\x44\xdd\xfe\x8f&;\xa2W\xb4\xaa\x15" "j.z\x37\x36\x35'\xc0\xf8\xf8\xdd\x8d`r\x00\xf1\xc2\x45\xac\x1e\x91\xa7\xf1\xa4N\xb1\xeb\xbdG\xec\x00\xa6\x64\xe2=\xde\x38\x43z>" "\xa2x\x63=\x8f\xf2\t\x81\x46T\\\x64\xe5#\xce \x9b\xf6\xc6\x9f\x63\x02\xbb\x90\x36x\x13O\x43g\x38\xed\x33\nG\xdazr\x86\x8f" "\xda\x0b\xa7w\x16\x45L\xf2|\xeeN\xd9G\x08i\xa7\xf1\x37g\xde\xef\xb0\xc8\xbc\xedo\xa7\xf0\x45\xcb\x63\xef!\x15\x61\?\xc0\x96\x82\xc2" "\x0f\x94@\xac{S\x32q\xbc\x30}=\xa4\xf3\x43\x37\x38!\x30\x9e\xf0_\xc9\xc9\tH\x11\x17!\x35\xbb\xf7!\xb5\xd8GH{L\xe0" "h\xe8\xe4\\p!\x1d\xb0\xcc\x0c\x98h\x83\x95\x14i\x88\xb3Vx\xf2Y+\xbb\xba\r\xe2u=\xbe\x64:\xb0\xa7\x9c\xce\xd6!w\xcc" "\x8f\x9c\xde\xdf\x15q\x37\xb0\xb3\x1dH\xff\xfd\xa3k\x89j\x34\x8d\x17vL*\xd8\xfc\x42\x39\x84+\x94\x8a\xbc\xda|\xed]\xf4t\x31\x91" "\xbfpm\x0e\x42\x84;\x87\x42\xdeX\x9d\x87*\x62U\xdd~\x17\x03\xaelo\x1fk\x9dU<$\x8f\xc9\x0b\xa7\xe4o\x88\xfb\x9fn\x99" "\xdaN\x1e\xaa(\x8d\x63v\xf0L-\xf0o\x32\xf0\x9a;;l\xc2kH;\xa0\x05o\xfc\x10kq\xdb'\xf5\x92\x97\x1d\x9f\xa7\x87\x8f" "\x14\xa7\xe4\xda\xf9\xb7\x42\xd6\xcehK\x44\x18\x43\x63\xb8\xa5\x33\xde\xfb\xd9%\xf9\x44\xf6\x33V\xa1\"\xba\xb9\xd0\x1b+\xa1\x0f\x44\xc3\xb7\xe0" "\x1f\xa2\xe4\x9ct\xc1\xdb\x03]\x88\xf9R\xf1N\xb6h\xe1\xee\xcfu\xf1\xa3\x1b\xbf\xd5\x85\xb1\x83\x9eR\x96/`\x9d\x80\x8b\x9e\x0f\xb3\x8b" "\xc3\x98=\xa3L\xc6\x97\xec\xcdg\x17\xa3\xcd\xeb\x03\xc5_\xefS\x61\xd9\x91\x90\x95\x91P#\xeb\xb2,\x8b\xe6y@\x44-\xd9\xaem\xb3" "\xaf\xf4\xf2\xa4\xac\xc0\tK\x34\x36\xeb\xd9-\xcfP\xe6\xcd\xb2G\x03wg\xa3\x97$\xba\x80\x14\xb2\x1aO\xf8\xcc\xf4k^x\xaf\x16\"" "\xd6\t\xabv\xeft\xe3.\xbc\xb7\x8c\xd9\x0bO\xcb\x8e\x9b\x0f[\x85^\xcd\x66m\xbe\x86\x0eO\xffv\x94\xbc\x37)\xf2\x05\xd0V\x83\x30" "g\xcaW\xaf\x13\x39\xe9Y\xc8h\x84\xcezw\xceM)\x9f\x9d\xf3[\xbd:\x39r\x62\x99\x8a\x88}\x66\xdd>\x33\xbf\xbf\xf4\xe8$\xe4" "\xb8\xe8$+\xa1\xc9\xc2\xc6\x8aJ>\xfd\xd6\xb6\xe6\x36L\x44\xe1\x11\xfe\x1c\x39\xa5\xfd\xdaT~S\x36h\xbb\x07\xfe\xaf\x1f\x93|\xd8\x46" "\x30W\x15\xc7:\xabH\xab_\xf6\xcbw\x35.:\xbdk\x0b\x0fn\xa1\xdf\xc9\xf2\xd5\xeb\xdbl\xd9\xdd\x1e]\x07\x91\x36\xa7l\xf5\xe5\x0c" "yi\xf5\x15\x1e\x1b\xee\x00\x85\xcd\xde\xb3\xf4\xbb=\xcfp^S)\xbfI~\xcf\x38+o\x07\x8e\xc7.&\xe5\xfe\x86\xcd<\x82{\x86" "\xaf\x1d\xbe#\x08\x90\x8aK\x37r\xc0\xd9\\y\xe3\xf4\xa1\x9a\x86\r\xd9v\xba\x37\xa7W\xb6\"/\x82\xeb\xbf\x1e(\x90\x45'v\x05\x15" "\xf1\xa6\x41\xb6\xd2\x83n\x10\xd9=\xd9\xdc|\x38\xfd\x89\x11\xf5Hx{\x18\xb3\xe7\xb2\xb9\x1d\x84OK\xc7\xe4\x03\xf9\x42v\xbd}\xf2\x82" "\xc7i\xf5\x82\xd7\x42\x42o\x10\x36\x95\xa1\x0f\x0b\x37\x95\xb5\xdb\x19\xe1\xe2\xael\xc7m\xe4\xe0M\xb5\xe4\x03\xfeM\xf5\x41\xba\xde^\xd1m" "\x1e\xf7\xdd\x18\x86\xe5\xbb\xca\x13\xb7uo\x1e\xb9\x0f\xa5\x8a\x36G>\x41\xbc\x19" "\xa0/\x80@\xf3\xfd\x02\xe2\xe4\x9b\xfe\xb7\xaa{#\xec\x03\x42\x8d\x08\x1b\x44\xf4n\xdd\x82\xbd\x99\xf6\x9dn\xf5\xd8L\xd7\xce\xbfi\x94x" "\xee\xe3\\\xb7P\x9a\x99P\x8c\\\xf3~\xaa\x1c\xc8\x0e\xab\xd9\x39oG\xfa\x13\xb7\x35\x17\xc3\xcd\xcf\x9fu\xa0\xed\xb9\x82\x16\x1d\xafH\x37" "Z\xc0\x99\x62\xab\x07\xa7\x0e\x30\xfd\xdd\xae\x1eX\xe3\x17\xa5Y\xe1\xbcW\x91.NJN\x31\x17\x43$[\x13\x93\xc7\x11\xa7\xa8UK\xe7" "\x85\xadV\x03\xa7yg\\\x38\x8b\x31L.r~\xba\x88\x10t\xca\x37\xd0\x16\x9c\nm\xd5G\xbf\xc8\x9aGi\xcb\xf0q\xce\xf8\xf8\x8c" "\x85\x87\"\x9c\xb2\x45;\xbb'\x1f\xc8\x39\x08\xf7\xda\"\xa2<\x08Q\xcc\x8b\x9c\x87(\xc6/]\xa7^\xe6\xfc\x13\xe1\xb7\xed\x00v\xdf\x10" "\x11\x93\x0cJ\x8e\x86T\x8c\xbf>\xb0\\\x1d\xda\xb0\xef\xe2\xa6\x36H\xff\x15\xd9\x35\x90\x03\xbf\xb1\x05\xfc\x10\xd1\xbf\xde\xcd\xc5\xf9u\x36\xdb" "wM\xb7~\xdd\xd1z\xf9\xa0\xc1(.\xcc\x91\x05\x92O\x83\xf2\xab\xb4\xfd\x9e\x7f\x83\x86\x1c\xab\xa2\xce\x39\xa3\x43m\x9a\xa4Z)\x1f\xd2" "P\x0eX\x88\x04\x13\xe9\xd5\xaa\x62z\xdesQ\xfa\x8b\x34M\x16\xe9\xa6R\xa4;U\x11\xbb$(\x8fI\xbc\x04\xff\xbe\x86>oW]" "\xd4\xb5\xed\x18\xed\x15\x93\xdc\x0b\x89\x14\xa6\x11\xb1H\x83`\x31\xb9n\x80\x18O\x14\xb1\xbaU\x08\x9b\x9e\xd2\x9fP\xfd\xd8\x8f\xab.&\xb5" "K\x8d\x8b\xd9\xae\xee|S\x43\xda\xdc\x17\xfe\xabq\xa2s{ \x44\xb6\xc4\x31\xbey\x04\xd3\x11\xc2\xd4VL\xeaMu\x1d\x87G\x8f[" "\xa6\x94\xb4\xdc\xa9\x98\xe4\x87\x41\xfc~\x8d\xcf\x91\xa6\x9c\xae)\"^\xb9P\x86\xaf\x8b\n\xc7\xb5\x45\xc4\xb5U\xfa\xa7\xe3\x9d|\xa7\x63U" "\xcc\x86\x15\x39\xc0,\xd2\x37\xac\xc8\xd1[Q\x46\x62\x16\xd9`\x00\xedS\xc3\xa8\x61%\x97h\xdf\xb8\xf9\x14\x03\xb9\"=.\x95\x9b\xfb\x81" "\x97Z,\x87\x10\x62\x8cW\x94\x31\x00\xe7\xca\x8a\x19\xdf\x92\xf6ko\"I\xdc\xf8\xbc\xe1\?\xa3\xf3\x30\x43!\x18\x35\xf5\xf7>\xa9\xe1=" "\xb3;V\xe4LL\x11K\xe1\x8c\xbaZ\x10\xdd\xb0\"\xa2:\x0b\xd1\x1dS\xfeM\x66\x7f\xcb\xa1kzi\xb4(\xc5l\xc4\xef\xfc\xf4\xe3" "\x45\x8f]\x9d\"v\x91\x17\xae\x91\x8f\x36{\xc8\xa8\x9b\x63T\x66\xec\x15\x14\xd9\xa2\x17\x11\xc7P\x88\xba\xb3(\xad\x30+^\x13\xe7\xfc\xf6" "\x03\x9e\x66\xd3\xc4\xdb\x61+V\x62\x16,\xc5\xd7W :#%z\x1ao\x8f\xdb\xd6S\xfd\x12s\x61)y\x9c\x82\x98\xae(!R\xac" "\xd0\x16\xd3i\x1c\x90\xbaS\xa3\xa2\xa0\xa2,\xa5\xb5}\x10\xaf\xb3\x84p\x8f\xc2\x87\x46r&\xa9s\x06\xadw\xa6\xda\x43\x83\x9a\xb5N%" "v\x08\x94\xc9\xe4\x83\xd3\xf4%\xac\x87\xeb\x97\x39\xee.\xd3\xfb\xa2Lo\xa6\x32V\xd7+\xe7\xe0\xf9\x19\x08\x8f\x03%'\x82\xcb\xf1\xdd\x04" ",\x9f\x83\x98\x93/sN^\x99^\x8c\x32[qkZV>\xe2\x88M\x35\xb6\x64\x65\xe9\xad`\x7f\xec\x30\xb1\xa7\xa4\x8d\xb9\x1c.\xf6" "\xd2\x8f\xef\x16\x88\x45.Z{\xe4\xcc\x30\xcb^\x66\xd7\xac,\x7fN\x16\x9cr\x0c\xab\xaa\x92\xe5\xbd\xcc\xaa\xbb\x1c\xdb\xe6W\xfd\x32\x62\x18" "\n\xc3\xc4\x85\x88\xf8U\x82\x91R\x99\xdeX\xe5\xa4\xc5\x9f\xb4o\xc0\xc1\x43|\x83\x44L\x66\xb5\x04\xd5\x65\x39\xcd=\x80\xb7/ \x1fQ" "\xc8z\xa8\x8c\x38\xd1\x42\xdb\x43\xd0(u\x1e\xad\x1e\xaa\xa5\xb6o\x8a\x88\xb0\x89\x94\xb5\xf0\xc2\xb4Q\xf6\x8f\xb2#<\xb5\x0c\x17\xe3\xfa\xe7" "\x8e\xe8\x0f\xca\xc1Q\x19K_\x8d\xf2j\xe5M@\x83\x83uyS\xbav\xd2\xfd\xc0\x44\xa6\xbd\x88In\x9a\xf5\xf8\x9b\xca\xbe\x34\xbc\x9c" "\n-\xfb\xab\xa3\xdf\xbd\x92\x06\x9f\xf2\x66\x31\xf7\x97\x42\x9f\xc7\n\x36\xaf\x11\xa2&\xa9 \x32\x97\x10\xa3\xe8J|\xda\x04\xab/ Z'" "\xe5\xe6\xa5\x81\x15l\xa2\x35Z\xce\xf4\xed.\x1d>\x43{:t\xea\x0ev\xb6\xa3\xadi\xd9\xf5\x12\x01\x30\x45\xeb\xf5\x41\xac}\xa9`o" "\x8a~\x85\x16\xa2\n\xc2\x04\xf7+\xd9\xc1\x0c\x44\x1bU\xc9,\xee\x8d\xb0\x61\xd5k\x05\xd1|\x85\x9d\xef\xe4\xf7 \xb5\xe5\xb2\xfd*\xbbO" "\xd5\x10\x42H\xc5\x12\x38\xa5\x0e\xfb\xa1\x92\x35\x8d\x8a\xb4\xd4WY\xedU\xe9\xd6S\xc5&\x88\x42\xdb\xdaZh\x1b\xac\x08g\x38+\xdb\xe0" "*\x8d\x10U\xec\x9e*<\xbeK\xea}\x88\xe5i\x9c+\x06\xb1[\x0f\x9a\xed\xea-\x84;t\x95\xcd\x9d\xf0\xd3)\x35\x39\x82o\x88\x06" "\x97\x84*m\x94U\xac\x1b\xefW\xe9hZ\xa5\x39\xbc\xba\xa9\xed\x81\xcd\x39h{/\xf5\xddZQ\x93\?\x65\x9d\xdd\xcb:\x17`\xd4\xe9" "\xbaU\xc7^\x07\x42[x+\xec\xd7\xc9\xa5\x13\xd1\xc7L\x63\xd1\xacg\x87'\xce\xf8\xf2-+\x7f\x42\xc3\xf8_\xc9>H\x9d\xe3\xd8\xfa" "\x66\x80\xdb\xd8,\xaet\x31\xfa\x91%g\x9b\xfe\xc8m\xfa\xe4\xb7\xf9:\xda\xf1q^\x46\x9e\xba\x9d\x04\x46,m:\xde+\x99|*\xd2" "\x1b\xbb-Ui\xfc~\xfc\xff\x1eJ\xee\x7f\xc9\xae\xbe\xd2\xd2\x90\xae\x80\xfa\x89\xc6\xa8,\xf3'\xe7\xcfN\xd6\xbe\xed\xf8\xb2\x19\xd7_w" "\x44\xe9\x99\xb3\xa4\xb5\xe3\xfa\x15\x08\x07\x97\xb6V\xe6\x37\xaf\xe1\xd4\x0b\x1e\x45\xbb\xd3\xe6\xb4k[\xd7m<\xae\xfc\x92|\xc9\xca\xb4\xe4S" "\xc2mN\x9f\xb4\x39+\xd9\x96\x8f\x8c\x99\x85\xb0\xea\xeb\x9ezr\x02y\xa0\xbf\xc5\xb9n_\x89\xc9\xec\xb6\x0e\xaf\x9b\rm\xeb.\xefq" "\x00/\xbd\x93M\xb9\x01Q\xff-n\x7f\x64g\x35\x04\x91\xe8\xbf\x89h\xdc \xd7(YO\x45\xb4\x9e\x46\xcc\xf2\x11\x1d\xa2\x94\xea\x87\x8c" "\x9e\x9dj\xf1\xd3\x14\x1b\x94@\x93nu\xb7J;\x8b\x1eHj\x33\?\x95hX\x18j\x62\xd8\x43[\x34\x14\xc6Hj\xa1\xac;\x63]" "\x14\xfd\xcd\xe7L\x90\x08\xee\xa3\x9cU\x8d\xb0\xeeWoM\x86w\xe5p\xb4\xd6O\xbe_\xe8\xe7\x10\xc5\xf5\xe6\xdf$\xbf\x81\xc9;\x62y" "\x8d\x98\x39\"\x8e\xc2#\xacq\x34J/\x93\x1d\x90\x08\x61\xcd\xfa\xda\xc5\xe4@)\x92\x04K\x1bs\xd6\x8eQ\xf2r\x99\xe4ni\x1a\x8d" "\x92\xefv\xbal\xfd-\xf0\x19;xQ:\xb7w\xc8\xcd\"\x8d\xf1\xf1\x84]\x45\xd5\x92\x45\x89=\x30\xd7\xd0\xe3\x8a\xb2\x8b\x43\xf0\xa1\xba" "\xd9_\xd3\xbb;\xcaz\xe7$\x1e\x1e\xd1\x03\x84XQ\x10m\xda\x96\x0c\xa3\xb8ou\xf2\x04\xb1\x82\x8c\xe9\xe8\x99\x9fN\x38\xe9\xa3\x8cs" "\xe5\xe4\x65\xcf\x35\x0e\xd7M\x94Z&g\xcd\xc2$>\xfc\x01\x31S\x37\xc1\nU!\x7f\x98\xbc\x7fn\xf6/\x11i\xb2\?\xa1\xf3\xfe\x84" "k\xdb&\xb4\x35N\x10\xe0\xba\?\xd9\xc0\x03l\x82@w\x46\xa9\xd4\x62\x38\xcf\x8a\x36\x01\xbf\xad\xe0L\x93\xe5\x32\x46\xab\x38\xe3j\xb1\x99" "\xc6<\xf3\x90\xfa\xa6\xa5o{\xf4\x88\x9f\xc5\xe7\xef\x34\x99\xcc\x34\xc8\x19\xaa\xb7\x19\xb3\xfd,\xeeM\x9c\xb6\x8a\xe7\xc9\x35\xdb\xec\xe7\xc2\x35" "\xa9\x8e\xb0\xdd\x87h\xd2\x37\xe9M\x38M<\xd3\xc8o\xe5\xfbt\xf0\xe4Z:\x1f\x66\xbfyh\xd3\xe3\xdd\xb3\xc0\xa4\xe0%\x64\x86\x08Z" "\x88.%Z]\xdd\x9c\x11\xddN\xb4\x61K#O\xf4\xad\xf5\x9c\xa5|\x12\xf9.\xa2R\x41\xb3\xc8\xc2\xfdY\x86\xd9#\x65\x86\xc6n\x86" "\xcd&\x8c\x7f\xcbZ\xcc\xa3L\xddyvv\x92v\x1a\x34\xbf\xcc\xb3\x65wG\xd3%%H\x99\x39\xbf\xce\xad\x0e\xb0i\xc3\xf9s\x92\xcf" "m'h\xf5\x18Mz\x0b\xec\x8f\x63\x44h\x7f\x17\xb7vR;\x80\x11\xfd\x82\xa7\x82\xb9\x64\x11\xe7o\xc2\xef\xaf\x8e\x34\xde-*\xc7\x45" "\\h\x63\x1b>\x11o;\xf1\xec\x8e~\xcb\x0b:\x82/\xe8\x11\xb8\xd0\xea\x65\x35\x66\xb7t\xabq\x10\xc0\x03\x9b\xc1~\x38\xa0\xf1#\xcf" "!\xa2\x87\xb9\xd0W\xd9\xa9\xca \x12Q\x94\xed@Z\x1a\x88\x90\xdc\xdc\xf0\xc0\x45\x1a\r\x39LZ\xc4\xb6[\x88\x92\xf7*W<\xee\xef" "\x88\xbb\x36\xe3M\xfd\x83\xcb^\x16\xac\xe2\x95\xc9\xb4,\x19\x89\xe3\xb1\x85\xfa\xb5`\x90\x42\x91\xee\x03\x0bN\x82/\x64(\x92.\xef!\x36" "\xf1\xdc\xc9\xf0<\xfc\xc6\x44\x7f@h\xf1\xb1\xd4\x9do\x1c\x82\xfb\xb1\xe0\x31\xcb\x03\x1c\x87,\xd2\xabG\xf0\xad\x18\xa2\xb0\x8b\x16\r\x63\xcc" "\xf9P\x64\xb7;\xdc\x8a\xd0o\x34\xfb\xf9rn\x06xm\x9b\xd3S\x10\x83\x1c\xa5\x7f\x9b\x06/\xe5\x1f\xe6\x63UL\xae\xbfi\x80Xr" "\x41\xdfR\x97q\xd8\xb6\x17\"\xce\x66i\xf5$}\xea@[\xe8J\x11z\x12,\x63\xdb:M\xd9\x89\x97\x0cN\xa9\xda\xbb\x93\xd6\xa3%" "\xb6\x05\x34\xea\x64\x9am\xee\xa1\xda\xafS\xda\x36:z\xa9\x86\xb5\xd0\xd0\xd0\xfbQ\x66\xa3\x17i\x88\xa0\xf9y\xcf\x1f\xe5\xbf|\xe0\x9a\x45" "\xd8\x9e\x41\x43OQ\xc9\xae\x98\xd6\x62\xf2\x9f\x05h\xc9\xf6T)\xd7\x0cwo{MI\xd5\x94\xf5\x91\x16q\xfb\x89\x8cH>\x0b:\x1b" "K\xdb\x45\x65\xc6\xe9\xf6\x65\xfc]\x07\x17\x87\xe0:P;\x1b\x8d\xfd\xa0\xed<\x85i\xe1\x0c\xa6\xb1\xb1R-\xfd\xfa\xde\xf9\xa6hY\xaf" "J\xed\xd9\xf9\x9f_\xe8\xde\xd6\xf4\xddV\xed\?\xbf\xb7\xec\xb2L\xf6\xf6\xe5V\xe2\xd7Kjo\xa0\x05\xa4\x32j\x32\xd9\x1eJ\xdb\xfb\xa2" "\xf1I\xa9\xce\x81X\xfc\xce\x08 \x42i\x96\?\xc6\x08\x97\xab\xda\x07\x88\x41\xca\x12\xa1U\x8c\x1a\xe3\x13K<\x96\x08\x14*\xac\xec;u" "\x11\x0f\xef\\\xb4M\xe3\x39\x9b\xfd\x83V\xc5\xdd\xa4\x8f\x95\xedr\xce\xa5gK\xdap\x94\x1a\x15\t+\x0b\xf5\x45\xe3\xa5\x9b\xe6\xe9\xa3\xcd" "\xff\x36\xcf\xd0l\xb0\x44\xb8\x0b\xe1\xf9\xc1N\n\xd3\xdf\x96;\x06\t{U\xfd\x14S\xa2\xdbs\x8c^v\xde&W\xe8.\x37\xa7\xe7q" "\xee\x32\xfe\xba\xa0\x86T\xdct,\x17\xad\xb8\xacz\xc5\x81\xe4\xca\xf6\xb4\xba\xe4\xeao\xd5\x64\xd8\x10\x34\x34\x10+\xfa\x43\xaf\xe8\x03\xab\xdc" "\xd6\xf5+\xda\xf4W\xf1\xe2\x99I\xb8\xe2\xcbY\xf1\x35\xac\xb8\xa0\x7f\xc5q\xfa*\xf9\xf7L\xae@Tl+\xb6\xb5\xca\x64\xf2\xcc\xb9\xac" "\x15=\xa2V,\xfd+\xae\x8a^q<\xbfJ\xcf\x7f\xd9M^\xd1\x90\xb7\x42\xa0l#\xa7\x9bV\x1c\xd2\xafR\x18MW\\\x13\xad\x64" "\xf5\xb4\xa2\xab\xe9\x8a\xf3\xcc\xab\x0cN:\xab\x0c\x43R\xee\xfd#\\\xe3\xa7\\g\xb2\xe2\xb4\xd8js\xbfr\xb2M]m\xaa\x05\x10\x63" "r\xe1\x0f\xd8$\xfd{\x43+\x12j\x63O\x30O\xb1\x8e+o\xf1\xdd/\xc4\x17\xb2\xcf\x8f\x46\x1f\\_\xb4\x66\x03\xad\x8c\x1b_\x10\xe1" ";\xbc\xa6{\xde\x9ak\x93\x94\xfe+\xfa\x9f\xad-\xc0\xda~\x32\xaf\x42\xfb\x1d\x80\xcb\x11\xc2h\xf6\xd7\xe9\xc1\x1dXzJ\xba\x66\xed\xc0" "KY\xd3\x89\x86\xe1u\x84\x16\xdc\xa5\xbf\xce\x0e:\xe0\xd1\?Pr#\x06\x8ek&\xeb\xdaO!L\x0f\xae \x62\xf4\xb8\x46\xfc~\xa1" "\xad\x18\x8f\xb4jG\x33'\xa2Uh\x46u\xa4\xb3\x08\xb9\xd4\x38\xb4\x8f\xf6\x10\xa2Jx\xbev\xa6\xef\x43X\x1a\x44\xb3\xb9\x06\xa1--" "\x32\"n\x83\x88\x16\xd2\xd1(\x97\x44\xa0\x34h\xbcz\xfcV\x02\xadH\x44{\x98-\x8e\xf6\x90\x05\x8c\x32`L\x1f\xcf\x83vQ\x0e\xa2" "\xdb\xb4M\x43\xa5\x07\xf1\xac\x82\xd8\xac\xa6\xe9\x8eR\xad\xc3\xa0\xad\x1b\xe9\xfcV\xee/\x9d\xd7v\x8e\x65\xa3\xde\xce\ttk\x81\x93\xdc\x7f" "\x35\xec\xec\x11\x31\x62\xab\xf0\xe1\xda\x89\xa1\x8c\x89\xe1$\x66\xbc\x12v\xee@\x33\x14\tgs,\xad\x8c\xf6\x31\x18\x8b\x34\xa3\x18%\xb7 " "\xe7\x98\x06\x93\xb9\xd0\x9cH\x8d\xe8y\x8bhv\xebh\?;h:\xb3\xe9\xc0\?\x85\xb5\x39\xda\xdf\xb4\x9e\xf1_\x35\xee\x0b\x16\x1d\xf0M" "\x1e\xc4\xa7\xba\x99\xb6\xd4\xf0\xae\xc5\x85g\xd8\xb8\x45\xbb\x1c\x87\xaf[\x37\xc7\x18/\n\xc9\xd5;,\xcav\x00\x95\x8f\x88\x05\\\x82\xef\xfa" "\x80\xafR\x99\xbc\x37\xb1\xf6\xc7\xf7Q\x31J\xcf\x15]o\xd3\xcc\x64\xd5\x08\xda\xfa[\xfe\xa0\r>\xc0\xe1\xabS.\x15\xff\x1e\xb8&_" "\x0c\xda\x04\xdf\xc1\x44\x8b\xd0*J!\xef\x11S\x19\x42\xf3\x98\x15\xda\x9au\xa3\xae\xb7\x33\x0f\xa0\x88\xd1\xf7\xa2\x03\x18\x64\x85\xd6\x62\n\xdf" "z\x9e \xcc\x9f\x07:\x0f \x37\x63&\x1d\xd3\xf4\x66\xa8\x61\xb0+\x44\x1e\x38\xd8|\xe9X<:\x46gL)\x63\xf1\xcf\xadv\xa9K" "\x8e\xad\xb7\xe2Zv\xf1\x43\xed\x8d\xf4O\xbf\xb3\xfe\x61\xbc_\x83\xa6!\xc5/\x11!\x41\x34\x64\x42n\xdc(\x9cK\x1e\xe2\xf8_\x34\x1b" "\xb3*\x0b\xce\xf0\x83%\xd7\x07\x42\x44\x61V\x11&\x02\x88\x16\xba\xcf\x44y*lq\x19\x1d\xfb\x8d\xa0\xdb\xa8|\x97\x96J\xf7=\xb7\xe1" "\xa8\x1f\x10\xcd/\x1f\xe7H\x1b&\x1a\xb5\x9a\x39\x18\xb8\x16_u\xfe\x16\xe1\x33i\xccw>\xd3\x08l\x16\xb2T\x34\xde\x30\xa6 \x84\xb6" "tLh\x1bg)\xab\xa4\xb5\xc2\x16\xf5U\xb4\xce)\xf8V\x82\xe1\x44\x44\xdb\x0e\x43\xd8=&s\xc9^=\xbe\x8c\\\xcb\x1e\x8a[\xad" "\xe2\x8c\xbbg\x30\x87\xa8\xd6&\x7f\xc1q\xcb\x19\xeer\xc6\xfd\x91\x44\\\x1f:\xd5\x8b\x38\xd7s-.\xfc$\?y\xd7\x36\x0f\x1f\xc9>" "\xce\x87\x65\xbc\xc2\xfbg\xa9pw\xb4\x44\xb2=\xea\xe7\x63\x66\xe7\xe3\xe4\xfb\x05\xec\x17\x9d~\x0f*\xee\xf8\xee\xd9\x01\xec\xbf\xfc\x37\x1f\xcb" "\xb0(\xb9\x38\x65\xa1\xd1O\xe0\x98\xea\"\xab\x16\xd5\xb2\xd1\xb7\x46{\xb6\xae\x11\x0e\xcc\xbe\xfe\xe6K\xcf\x1f\xfe;\xf4\x04\x85\xd6\xdc\x19\x93" "\xfa\xa1\x8b\xe1\xdb\x66\xb2\x31\xc6\xed/\xcf\xb8\x9e\xbb\xd2\x7f\xff\xc0\x39\xb2\xacgG\x98\x03\x8c;\xbf\x62\xa1;\xde\xb4N$;j\xa7\x9f" "Y\xce\xf3\xe2N.\x14\xd1\x33\xa0\x94M\x0b\x35\x9d\xdfj#jg\x1a\xdet\x31\xf9\x9b\x9cR\xcb\xc3\xda\"\xa2\x05o\x10\xdaR+\xa1" "\x99~\xa2\x33\x04/\x33\xc2V!\xe2\xd5\x93\x13['\x43\x9c}\xc6\xeb\x1f\x38|\xc8\x01\x1b\x98\x18\xff\xd6=\x04\x03Q\x8d\xb4X\xf1\x42" "\xe4\x9c\xb3\xc4\xa6\x95\x8c|/g\x30\xd4(ou\x03\x94\xfc#\xb4\xf3\n:V\"^\x9c:\xd5\xb3\xce\xech\xa6\x85\xf0\xed\xaa\xe1\xf6" "\xb0V@X\xbbt\xb2\xa6\x38K\x1ax>\x44\xf8\x10\xea\xc8\xfb\r\xe2\xcf\xbe\x8b\xd9I\xdd\xc9\x17|\x96\xe5\x86i\xe1\x1b\xae\x7f\xa2Y" "w[\xc8\xe4\xccVxR\xc4Q\x88r|\xac\x1c\x1b\x92s\x04\x1e\x89\xce\x31[-\xb4\xde\xafpn\xb9^*\xc1s\x8d\x8du;\xa2" "\x96O\x1a\xbf\xf0\x38\x34-},o\xb5\x39\x38\xbd\x90\xb6\x0c\xbb\x9f\x46\xba&\xd5\xc8\xb6\x31\xcfJ*\xcf\xca%\x8f=i\x84h\xe0\xf2" "\x18\x30\xfa\xb2:\xa1\x85\xa3\xdf~_.\x0f\xb6p\xde\xe4\x13\xdfKK\x38Ovt\x0e\x9e\xe1:\x98\xb7\x8a\xf2\xcc\xd8J\xe6\xea<<" "\xaa\"\x46\x8d\x35\xc2\x91I\xc4\xe6\xaf\x93U\x90\x8al\xf0T\x94n\x61\xfch\xef\xff\x02\xc6\x81\xe8*~\x19\x62\xfe\x45\x44\xeb\xf2\x46W" "Y\xf5'k\xd8\xfb(\xc0\xb1%\x62\xb0\x81\xa8\x00[w\xc4\x65\x83\x42\xdb(\xd5\x88\x9d\xb8\xd2\xf7|<+\xf8\x31]\xcc\x64\x11\xdb\x44" "\xb3\xc1rT\x80\xf7\x9b\xd0\\\xb8\x85\x36\\\x8e\xe8\xd6\x16\x15\xd2\xb9\xdd\x17W\xe9\x08KKgj~\x32\"\xda\xc8Sh\x13OQ\x01" "S\xde\x11}\xcd\"u\x1d\x03\xab%\x12\x0f\x81\r@\xa2\xeb\x38\xeal\xf6\x9e\xf9mz\xe7\x44w\xb0)\x08Q#\xdc\xb1\xe9\xbe\x83\x9b" "\x8d\xb2\x0f\xda\xe2w\xe1\xd5\x31X\xe0q[\xe3-\x34\xf7\x33!\xde\x80p\t\xda\xe8\x41y\x02\xdaj\x42\xa1-\x62\x10\xda`\xc9\x08\xe3" "\"\x44\x9bX\x8f\x38\x85#\xb4\x45\x8b\x42\x0b(m\x44\x1c*\x15\x9f@\xbc\xef;\x04\xd9\x11\xda\x82\x05%n\x34\x35\xb3\x8br\x91\x9d\xdd" "\x04\r\xefI\xc9\xe6@\x45\xac\xef\x36\x91u\xed\x1d\xf6\xed\x15\xae\x8f\x9dRGn^\xac\xbfv\x97\xbd\x1d\x90gN\?\x9d\x88\x9e\x46\"" "\xfa\xe9\x44\x64\xa5w\x87)V\xa1\xb9\x34\x18\xe3\xc2%\x1c\xa1M\xcb\x8eW\x89-\xd7\x88\xee\xd8\xe9T\xfa\xf9\x45\xf4\xf3\xb3#~\xb7\xa9" "\r\xc0V\xcd\xa9\x9b\x88\xfc+\x42\xc3u\x1f\x98\xef\x1f$\xeb+\x1b\xac\xec\x1b\x98\xae\x15N\xa9\xcf\xae\x9c\x08\xe3\x64\"lZQ\x03\x01" "\x04\x94\x05\xd0\xdc\xb4\x84\x36P\x17\xa2\x17\xd5\x88\x1b/I-\x97\xed\r\xa1\xa1\x9f\xdb\xe0\xfbm\xc0\x12#\x34\x87\x05!^O\x83\xef\xbb" "\x01\xc7\t\xe1\xeb\x81\x34\x17\x10\xff\x35\x93^\x89\x43\x87\x86\xae\xd8z\x9d\xb3\xdeh\xc0\xe1_h\xce\x33Q\x03\xf3\x18\x11M\xd3\xd1\x33\xe2" "m\x45\xcf\xf0\x83\x10\xe2}\?\x63M\xbc\xb0\xfd\x05\xbe\x96Y\x45K\x8f\xa3\xef\xf4o'g]r\x0c\xd6\xf7\x9c\xe1+\xf5=\xbe\xf1g" "\xedY\xfc\x1e\xfb\x99\x31\x62\x36\xa6\xffJ\x08w\x1b=\xeb\xb6x\xc7\xf8@\xad\xe7\xed\xb7\xb8\xba\x80\x66\xf6\x03\xa3\xf6u\x17W;\x1a\x96" "n\x46\xcd\xf8\xe0\x1fx:K\xf3\x07\xb0\xef\x88vn;\x81\x94\xa6\xd4\x9e\x41\x9bq\x15Z\x9c.!\x12H\xa9{\x94\xd9\xa2L\x11\xe7" "\x33\xe9(\xb2\x83\xd0\x44\xd4Z\xa3~vq\xbf\xa3!\xc6\xb1h\xe8\xe5(w\xae\xca\xb7\xd9\x64\xe7L\xf9\x37\xc9\xa5w\x96\xa7\x9b\x88|" "h\xd4\xdf\xd8\xd6\xf2\xae\xb1Z\xe4\xce-\x46\x1d\x17\x0cp\x35\xcc\xf5\x1a\xf5\xbb\xb6u\xb7h#\xab\x42\x9b\x1b[\x9fk\xd4\xf3\xa2K\xd9" "\x91\xc1\xc0\x66\xff\x96\x83\x81\x0e\xac\xaeQ'>\xe9\x83W'N,\xc7\x32\x11!\xc0\x45\xc4\xd8J\xa9\x63\xc0|\x39\xc9\xe7\xe0\x9em\xc7" "v\x44\x38ZG\x1d\xccU\x0b\xa3v\x36=\xc3\xc2\xb3\xa8\x83I\x01\xa3\x34\x1f\xd2\x07\x84\xefr\xd4\xc9\xcet\xc3^\xf8\x17\x8bV>\x92" "\x06\?\x19\x9c\x41\xb3%\x90\xc6`\xc3\x36M\x17\x13^\x87\xcf\xb2\xde\x8c\xaf\xbe\x93\x8d\xad\x14t\x34\xae\xac\x94\x9b\xf6\x18Z\xad\x16\xd7\xab" "\xfe\xc0\xa2\xa5O\xfe\xf8\x32\xaa<\x8fs\x45\xf9oZ\x36\x8a\xb2\t\xe3G\x45=\xf8\x0e\t\x1b\xafNiT\xd9\xa9\xee\xb1\x07\xd0K\xd0" "\x92\xf7\xe0Z#\xac\\\x80\x36\xdbl\xf4\x9f`\xeb<\x63\xd8\xae\x42\xb4R\xdf\x89\xe5\x46\"\"S\xf5\xd8\x1d\xe6\x0e\xb3\x46\x39\x84\x35\x13" "Q/\x33\x7f\x31\xa1m\xa5#l\xde\xeb\x44\xb5-\xa6\x8fzl\xf6zp\x0b\xd6U\xff\xe7Nx\xe6\x44\xdc\x1cYy)\x95\xaen\xe5" "\x88\n\x99\x07\xb2qo{\xa0\x42\xd6\xc2T=\xb4\xf0\x1c\xd4\xe0\xa2\x0bm\xfd\x05\?\x10\xd3\x92\x16W\x17\x98\x86\xed\n\xff\xf3\xebog" "\\{\xc1\xd4\xb7jS\xd0\xefx\xf6\xed\x64\xa2\x46\xec.\x45\xec\x88Gl\x46\xa2\xf8\xe4\x0c<\xc5)\xd8\xb3\x8bh\xc7\x8a\xe0\"\xec\xae" "R\x42\xf4x\x94[\xe3\x92j\x1a\xb6\xfd\x82\x9fY\\\x1a#\x82\x81\x9b\x88U\xa5\"\xa2\x0f\x18!$\xa0\xb0\xb8\xd0\xdf\x9a\xfb\x98h\x1e" "^\x46\xc4[\xde\x8ay\x90\t\xd1r\x44l\x39\x94\xfeTz+\xd7\x17XO\x65\x9a\x0c\x84\x35\xcf\xa3\xb4\x45q\x9d\x1f\xa0\x93%\x1c\x82" "\xe6$\xa4\xbcr\x86'j=\x80/\xbcK\x33\xf3+G\xce`\x88\x16\xads\xe6\xdc\xdc\xac \xda\xe4\xa1\x90o\x13Q.\x8c\x98\x19\x33" "\x91U\x83\x8aX\x41(\x62\xc4\x14\x8f\"\x1d=\xf4y\xbd\xc1\xbd\x33\x9cq\xc0t\x82\x15(\x42\xd4&%\x9fn\xc8\xa7\x1d\xbe:\xd5\x8c" "\x02[T\x84\x19I\xe1\x88\xcf>*\x93\x1fNM\xd5\xfa\x62G\xcb^\x0ev\xb4\x8dm\xd3\x64\xda\xe6\xe6\t^H\xa2\xfd<\x62\x95\x92" "\x88\x63>\x89\x85\xc2\x10Nx#\xb3#\xd0\xdc\xed\x8c!\x9f\x88\xe8)\xbf\xc2\xb7\x92\xe2\xa9\xde\xc8\x39\x92\x0fq\xba\x84\xf7\xdd\xe4\xbe\xb7" "#rH\x14\xe9*\xfb\xfe(}\xdb\x83\xf6p\x07\xd6\xf8\xf3\xda\?\xe7\xdf\xac\x14_\xee\xc7\xc7H\x34,yW\xf2\x8b\r^\xa7\x81g" "Il\xda\x45\xf8\\\xce\xfa\x63,@Pm\x82\x15n*\xa2\x00\x05\xbdy\x86\xe9\t\x15\xaf\xfd\x9dq\xc0#|w\xfa\xa3\x8b\xa8\xfb(" "\x32\xfb\xa8vr\n\xb1}\x03\xefH\x11;x\x01\xc9\xeb\x11\\}\x44|\xdf^\xd2\xbcG\x85\xbd\xc7\xe4\x15\x19\x93\x66\x8e\xc8\xb3\x91&" "Mi\xee\"\x36\xd4\x13\xd1\\\x0b\x94\x43gR\xb9\x95VZ\x92Iz\x62\x61\xf3,\xfb\x04KY\x44\x1c\xf2\x12\xc3N\xbc\xb7J\x86\xfc" "\xc2\xa8\x41~:\x93\xea\x08\xbe\xf7\xaa\xf1\x39\xa4\xc0\x1f\x0fw\x44/v\xa2\xd1\x98\x11%\xbfL\xbd\xc9\xf1\xce\x0b\x65S\x19\x61\xdd\x8e\x30" "O\xa2#\x1c\x61\xdd\xb2\xb0p\xe9\xd4+\x14\x87;\x1a\xdb\xd1(-\x36\x9c\x88\xa5)\"Z\x99(}|\x92/\x66\x9f\xa8,\xe1\xae)" "\xec\xf0\x07hp\xa2\xf4\xc3\xe2\xa0\xf4Q/\x61I\xab\x31\x88_\xc8\x14)S\x07+\x31\x8dXG`\xa2\xe7\x93\xb0\x80\x13\xe2\xfc\x86\xe2" "\x05i\x03\xa8(;\x18mN\xaf\xb2\x12\x8e\x86\x35\x96.zN\x87\?\x8a\x91\x86\x9f\x88\xa3\xea\x08+/\x85\xc7}\x12w\x89-r\x84" "\xe7y\x32\x02\xf3\x97\x9e\x7f\xb3\x8b(\xbb\x9eP\xfcu\x86/^\xf2\x9a\xb0\xdf+\x11\x06K\xc4+$\x65Vl\x66\xd7G\x14\x7f\xc0&" "\x1f\xa5\xb3\xc6\xa2\x1b\x88\xdb\x46O\xbd\xe4\xb6\xcd\"\x02\xec\x08\xa3\x13/s^u\x66\xcc^p\x06\x17.Q\xb4\xb2\xd5\x8a\x16\x8a\x08\x33" "@\x46,\x9dP\xb1\xa3\x65\x61\x8d\x82\xbe\x39x\xe1@:\xe2\xa8\x41\x99\xceZ\x14Q[z!\xd0\xb8\x86;\xbf\x45g\"\xf2\x04GX" "\x62\xa3g\xf0\r\x1b\x33\x04\xa6W\"\x11\x10\xf8\xc0\x98\x46s\x8aw\xe4{\xf2o\x90\xd4;\x1a*p\xde\xa4\x81>\xda\xd4\xd1\xbd\xa0\x95" "\x43\xa9\x81\x17\xd8\"nZ\xb7\xba\x61^\xbd@\r\x95>\x87\xfc\x11\xed\xedJ\xb9\xfd\xbf\xe5\xd5\x8e\xc6\xd9\x1b\xd7\xfc>\x45\xfb\x19'\x63" "\xbc\xe8\xcd\x37\xda\xbb\xcd\xe4)\xdc\xed\xa4\xe9\x84/\xb4\x89\xd9Y\x83\xe3\xf1h\x33\x63\xca/\x9e\xf9\x9b)m\xa0\xdc\x1eh`\xdd\xfc\xb3" "\xe2\xdf\xe4\x8aZ_\xd7\xa1\xbc\x97\xa0\x99\x8f\xa8p\xde\x41\x1fM\x44\x8b\xca\xa8\x9c\x18\x11\xc7[h\xa6\n\x61\xed]W\x36\xd9\xc2U\xd1" "z\x37\x1a`\xb4\x90w-\xa9\xaf\x92\xa7\x02\x34s$\x31\xc6\xd3!l\xc6\"\x8eq~Xp\x06\xfb\xb0\x03\n\xcd\xca\x66\xfc[\xe8\xba" "\x65h\xb6\xa2\x46\xf8P\x05\xab\xf8\x35\x82\xb5\x18\xd5\x90o\xad\xbbi\x61\x33#hR\x8d\xfeT\x82\xb6\xe2,\x85i\xba\xe7\x94\xb9Y\x9a" "\x96Ms\xd9\xf8\x8a\xda\x97S\x17\xf2\x9c\xf1;\xe6\xfb-\xec\xe9\x16\xd5\xe9\xc3\xdc\xb4\xd4lh\xc2\xf7\x92.\x0f\x9a\xe0Y\xe0)\x38\xd8" "\xcf\xba\xcd\xbf\xe5\x03\xc2\x37\x0f\xf6\x91\x81\x85\x95\"h&$\xa1Y\x8a\x07\x07\xf0m\x36&{\x9f\xf1m.h\xe6\xe3(\xe2\xd2\xde\xd6" "\x41\\\xf8$q<\xeeN\xff\xe6:\xb5\xb9Y\xac\x10\xb5@\x8e-\x9e\xe2\xebG\x14\xef\xc1\x41r\xd7\x02y&\xddr{^\xf6K\xa8" "\x43\xdbw\x1b\xb3N\xa2}\xe3\xbb\xf0\x89\x18\x1c\xc0\xe9\x65p\x80\x65\r\x83\x0b\xf9s\xca\r`\x92\x62p\x1dG ,\xf1\x83k,&" "\x16\x8e{\x98\xdf\x1f\\o*\x35\x34\xcb\x83\x62\xdc;\x00\x07\x45p\xfc\x01.\xbf\x8d\x18\xc0\x0cJ\xe8\xf4\x0e\x18\xb2Q\xd8_\x81\x66\xc7" "\x1a\x94\x10\x99]\xe8\x61|\x44\x34\x1b\xdf\x80.X\x42\xe4\x86\x12&\x34\x07%\xac@\x16Zu\x66\xf4\xab\xa0\x1a\x33\xf2l\xf7\xe8\xf4\x0b" "\xe7\xfb\xc9\xb0\x85\xad\x93\x44\x33\xf3\x9d\x11\xce\x44\x18t\xbf\xd2%>\xc3Rj\x65\x11\xb4\xb9W\xe5q\xfa\x31\xc2\x1c\x99i\xa1\xb3\xa7\x1a\xbfk;\x14\n\xcd\xd9" "\x41\xb8\xe2\xb7m\xfa\x61\xf0\x01+\x89\x91\x99\xe8#y\xc9\x81\x83\x07\xedV\x14\x7f\xd4\xbc\x63n\x0b\x1e;N\x88\xb7\xaf\x44\x90I\x15O" "\x9c\xe8\xe4\x9b\x18\xbe\x38y\x01mky\xa3\xf6\xd1\x91\xe7\?\x30\x43+\xb4\xee\x9e\xd0\x42\x8e\x08\xf1\x1e\x95~\x19\x0b\x13\xf2\x1a\x44&\x45" "\xda\xc6\x65\x10\xb9\xc3\xa8\xde\xab\x36\x8d(Z\xc4\xd3\xae\x90\x08\xe8n\x08/p\xd9\xac\xf8\x0f\xb4%h\x83/M\x1f$\xc6\?\x18\xf3\x07" "\xdf\x30\xa6\x1b\x99]\xbe\x31\xba\x14\x8e\xed\xc1\xbf\x93\xbc\xfd\xfa\x9b\x37\xfd\x8dvk\x10!\"\xc9 \x62\x8e\xd3!\x0fO\x11\x61o\xb0\xc1" "\xf0\xcf\x02%\xca\xf1\x66\xc5\xc9\xaf\x0c\x31\x0f)\\\xdd\x87\x35W\xd2\xe3}\xe8\"\x82\x90\x88\xe6\x00*\xb4\xf8L\x83\x61\x8a\x32\xa3\xf4\x8f" "\x10\x39Zz\xc3\xd2\xb4\xfb\x38\xd8\x34\x96\x17\x8a\xff\xfd\x00^\x9d\xa2\x99uXhM\xa2Q\xd7}\xd8Ro\xd3\xc2\xcf\x44\xc4#\x8e\x9d" "I\x64\xcd\xcc\x84%j\xc2\x9c\xccMu\x07\x13l\xd8\x34\x98\xa0m\x35J%\xc1\\\x31\x41\xd7\x66\xb0\xe6\xa7J[\xf4\xfa\xeeZ\x9a\xff" "\x87\x8d\x62\x86G\x18\x15\x1bq\?\xc3S\xfd{\xaf$\x87z\x92\xe1\r\n\xf1\xf0\x06\x11\xb5\x84\x66\xe2\x1f>\xa0\x39\x1f\x36QY\r\x9b" "\xb8\x65\xa1\xad\xd5\xf6\x10\x89\xde\xde\x19\x43;)\x9a\xbd\xfb\xe1{|\xf2\x1c_V\x31\x66\x14M\xea\x14\xcb\?\"\x9a\xc5\xce\x88\x44q\x11" "\x31\x03L\xc3\x12\xcc\xe1;\xcc\xf9\x46\x18GL\xf4\x9fIj\xf0\xa4\x9f\xbc\xd7o$\xe7Pr^\xc9\x88\xe0\x65\x43:\xe6\x0c\xfb\x30\xf1" "\x08\xcd\xca>\xec\x63g\x30\x63\xb6\xbaU/\x91\xf3'\x34\x43r\xec\xb1\x11\x8c\x43\xa2Y\xc5\xaa\xec\xc3G\xcc\x45&n\x1f\xc3\xe5\x61\x1f" "\x13\x17\xf2\xd1\xfe\x17&S\x44\x9c\xe1\x07\xe8\xeb\r\xe7\xb1\xb9\xc9\t\xad\xf2\x16\xda\xd0\xdf\x18\x8fN\xf9xs\xb9m\x63\xb2\xd7\x01m>" "~\x38\xc7\n\xb2\xe1|S\xf9\x94Z\x01\x46\x92\x11\xf7J\x31\"\xa9\x46\x07\x38\x91\x11\x37\x39:\x91\xd7\xec\xe4\xa1S\x18\x41\x84\xf3}\xd0" "\x42#\xcam\x98\x17\xa2\xd0&\x05\x85\x1d|\x0f\xdd+\xa3\x9f\x02&\x1f\xbfs\x63x*\xd1\xcc~`\x0c\?\x18\x37\xc8W\xd0z\x87\xa3" "S\x44-\x32\x86\r_L\x83\xb5]\x44\x8b\xa7/\xb4\t\x05#z\xed\"\x9a\x8f\x8b\x11\xb9\x02\xa2Y\xf1\x44\x94\xa1\xf0y\x11\x1d.\xd1" "\xcc\x98\x65\x8c\?\xab\xfe\x84\x98\xcc\x15vz\x46\xdd\xf1\xa3[\xc8\xba]\xd7\x36\xf7\x43\xd7\x30\x36\x10Z\x95\x66\x8co\xf7Q]\x9a&\x9d" "\x1cl\x86\x34\x92{(;\xa5\?\xbe\xa9h\xd5;*!\xa0\x95\xb0\xf6\x1d\xb7\x0b\x10\x7f\xfe\x81\xe3K\xa3\x1a\x43,\xe2\x98\x88\xfdI|" "|h\x62v\xdd\x06\xd7}\xe3\xc6|#\x85\x13{j\xae\xf6\x14ZYP\x16\x41\xb5\x30\xe6\x61\xee\x17\xcd\x9a\x41!^\x45\x19\x9bV\x8c" "\xca(\xdd\xa3\x32&\x9d\x46\x8f\xda&\xed]`\x93\xdd\xd1#\xca\xd1\xe8\x91\xfakl\xde\xdc\xa3\xb7\xb4\xf4\xa4\xf5\xdd\x83\xdd\xf7\x07v\xe6" "\x11\xda\x82\x33\x61\x9d\xc7m<\x63\xd4\xb8\x89\xe6\x00&\x9a\r G\x1fI\xf1\r\xec\x1e\x80\xe6\x44!\x9c\x1d\x82\xc8\x0et`\x14Zp" "\x8e\xd1\x07,\xc3\xc2\x17\xfc\x0ek\x96G\x1f\x30p\tm\x92\xc5\x88\x05\xbc\xa3\xef\xbf\x99\xbd\xc5ol;=\xfa\x86=_\xf8\x30\x32\xa2" "~\x1d}oj\x03]\x95j-\x9eh\xd6)\x1bqK\xae\xd1\x08\x9bG\x8d\x96\xd0\x7f\xce\x91\xed\x84\x96\xa4\?\xe7\xc9\xf0\xde\x19\x16Y" "\xfe\\`\xde\xed\xe7\x02\xc3\x9d\x1f\xb5\xf3;\xd1\xbd\x11\xd1\x8c\x00\x42[\x0e+\xec\x80\xd8IXh\xd5\xe2\x0f#\xdf\xfd\\`N\x43\xf9" "\x01Z\x04\xb7\x9f\x8bl\x8dK\x62\x1e\xe2\xa7\x81\xf2\xf9\xf3\xe1\x44\x91\xf9\xf9\xb7\xdb\x8c\xfc\xf4\x62\xf3\x9a\xfd}\x88\x87y\xf0W\xd3o|" "\x0c\x93\xe3\xf8\x12\xbf\x36\xe2\x89\x45\xb4\x9f\x08-\xe3\x8e/\x91~\xc6\x30>\xb4Z@\xaa\x00[h`\x8c\x0b\x07\x10\xcd\x37Zh\r\x91" "\xd0\xca\xa3\xd0l\x9b\xe3z\x12\x9d:Q\x81\xa8\xf8\x04\x0e\x1e@\xebT\x19u\x18\x63\xe3\x00\xd1\xe6\xa7\x99\xbd\xf1q=\x35\x03\xb5\xf0\xab" "\xa7\xe1o-\xbe\x81h\x66\x17\x18\xd7\xb3s\\\t\xa6O#&\xc4\x45\xe4\t\x84\xf1\xf1\?\xf4\xe5\x45\xb3\xfe\x83\xd0J\x8bp\x84\xa7\x43" "\x44\x94q}S\xc3-\x63\x66R\x38/m\xa4z\xc0\xaf\x1b\xf0\xc3\x10\"\xf9\x38\xd9*\x34\xff+\xa3.\x1e\x36[\x99h\xd6.\x8e\x1b" "\xd8\x99I\x88\xe4T\x06+\xcb\xb8!\x15\x13\x1a\x35\x11W\x96~\x8d\xcd\x61\x13<\xc5\x0f\x61\x1a\x10>\xd8\xe5\x9b\xc8\x89\xe3&\xc6\x12\x42" "\xdb\x10\xd5h\x31\xfa\xaf\x35\xb1\xac\x61\xc5\xb1\x8byj\xe6[h>+n\x9a\xb4M\x08\x1f\rmQ\xc2 ^\x34\x33\xbc+\?\xc0." "\x7f\x63\xcb\x11\x85\xd1\x1d\x38\x9d\x80\x0b{\xb8\x66r^\x05/\xef\x9c\x88\xa3+\xa2\r\x17\x85\xb6\x90L\x38\xca;\x33\xf3j\x10\xf1'\xff" "g#\x63\x11'\x38\x31\x36\xae\x1c\x37Q\xc9\x0b;xh\xec\x0fi\x0c{{\x8a\x66u\x92\xd0\x06\x97\x46\xcc\x80\x9b\x88\xd6H\x44\xa4}" "\x13\xeb\xeb\xc6\xcd\xcd\xde\xdc\xe9_Q\xf1l\x1a\x44+\xa8\x10\x97\xaf.\"\x98\xc7\x98\x1e\xd2\xc2\x03<\xd0\xa6\x32\x00\xcd\xec\x33\xe6&\xb9" "\xe3V\xbc\xb7\x8a/\x7f\x32\x9b\xef\x1f\xd3\xf6.\x34\xd3\x84\x31\x8c\x81\xc6-&ZK*S\xf9M\xfa<\x82\x66=\x65\x63\xe8\xfe\x8e[" "\x18s\x08\x9b{\xe0\x07\xbe\rs\xa8\xd2\xee\xb3\x95\x1d\xad@\x94\x96\x16\x02\xd5X`\x62\xe7\xdf\xe4P\xfd\"=|\x11\x8e-o\x61H" "\x35\rn\xce.j\xc0~\xeb\xd6\xf3\xc0,\x88(\x86&\x9a;\x04\x44\x9f\xa1\xa4\xb6\x0c\x62(\x10\xa6y\x94uh\xb6\xd7\x9c\x89\x1a\xe2" "\xd5\x66qLK\xaf\xfa\x7f\xf3\x97\x9d\x1b\x42\xcb\x04\x11\x85\xce\xc4\xfbp+Yw\x85\x88\x18\xa6\x61\x04\x0b\xf1\xa1\x1d\xf7+\x41\xf3\x15]" "\xa2\xcdx\xb9\xd9\x95\xc6\xa3\xf6\x1f[h\x08\xe5\xcc\xf9\x37\xff\xe7\"\xabJ\x15u\xe5\xaf\xa4\x92\x85z\xc1\x81\xfb\x0e\\\x81MKg\xcf" "R\xa0\x98\x8f\xf4@\x36\xfa\x41[\x07\xcd\xb7\xb1\x33-\x84,\xdb\xd1\xa4\xcd\x94\x1a')\xdf\xeb\xae\x36\x97\x05\xd6$\x1d\x84$U\x8e\x41" "[\xa8j\xc4\x32`\x15\xabN\xfdo\xd1\xa3\xa0M\x07!\x61\x16\xd5\xb0o\xabjm\xa7\xa4Jrw\xecZ\xbc\xcf/X\x33\xa8| " "kN\x0c\x9b(~\x07Q\xd2\xaaX\t\x9a\xdf\xf4\xb2\x16\x32\x89\x88\x97\xf4\x85\x82\x66=s\x88\xc5\xf7 \xd6\xb6Gk\xdb_\xeex\x95" "\xe2\x80\xe7\x30\x11\xbbm\x17Y\xd2L<\xef\xc4\xc5p\xa3!\xa5T\xe4\x42\x61h\xb5p\?\x32.M\xb6W\x64k\x46\x11{\xef\x99\x96" "\xe6\x0f\x82\xf8\x15\x12\x07\x01\x45 \xf6\xc3M \xbc\xa5\x89\xac\x8cLl\x86\xa7\xc5\xb2]\x88\xdd~\xbc>\tZ/\\^\x17\xb5\xce\xc2" "\xd3\x62I\x10\x44\xcfk\"\xd6[\x41l\xe4\xff\x9f\xffUq\xdd\xb4w\xff\?\x90\xb5\x32\xfa\xdf\xad\xe8\x87={`\x10&\x64~\x87K" "\x82r\xec\x0c\x93\xb5\xd0\xa6\xaf.\x62\x82\xdb\x44O@\x15\xeb\xcd \x36~\x83\xf8\\p\x11\x01GM\xdc\xdc\xe0\xf6\xb1\xcd\x8d\xd1+\x32" "\xdd\xf1\xc6\xef\xe5$\x64&\x15\xc7]\xecS\x63Z\xbaj\x63\xdf#\xd3\xb2\xfdR\xfa\xf8\x44\x8d\?>;q\x86g=\xe3m\x99\xa3\xb1" "\x31\x39\xc8%\xacm\x10\x82X\xc9K^\x1d\x38\xe1\xe1)\x62!O\x32\x91\xeeN\x9c\xe1\xf6m\xd7\x16/\x19\xaa\xf9\xde$\xd4\x82\xe8U" "\xa3\x88\xf0z\x32\xd1\xeb>\x88z\xaa\x97\xafp\xa0\xdb\x84\x19wGK\x9bw;\xdf\xc0\x9e\xbf\x10\x9b\x17Ii\xfd_\r\?\t\x17\x66" "\x33\xa1;\xba\xec\xbcj\x96G/\x8c\xc2\x10\x02\xdf\x0fxy\x82\x07\x96Q\x1d;\x46O\x1a\xd8v}\xe8\x35\xab\x1c\x86mK\x45\xfe\xa2" "\xc3w\x66Q\x9a\x84o\xbc\xe1\xf7(\xec\x45*\xda\xf7}\xc8!,\xf7\x42\x18{\x44\xec\xbexI\x88\xfb\x33g\xd6g\xee\x1aw\x92\xbb" "Qr\xc7\xeb\x8dQ\xe9\xea\"\xe2\xe8\t\xdbO\x8b\x36\x63\xa6\\Z/\xa1\xe3\xd5\x08\xfc\xe0\xf5\x04g\x64\xd1_\x18&\x32\xec\xdc`\x19" "U\x81W\x34\x98\xe0\x18s't\xe5\?'\x82+\x88\xc8R\xe1\xcd\x63\xf2\xc2Sw\xf0\xf6\x93\x7f\x03]zz\xfc\xeb\xedV\xd2\x45V" "\xc6>\x11\x42\x8bH\x37\xee\xc0\x16\x62\xdc\xc9]\xa2I\x1b\xea\xaf\x0f\xc1\x84\x95h=\xbc\x42\x13\xea\xf6\xd8\xd5\x9ak^\xd8T|\\\xed" "\x88\x9e\xf2\xaa\x35\x8b\xfe\xbc\xaa\xa1\x9b\x63\xe2\xcew&g.\xee\xb4\xd4\xa2y\x8d\x93\xbe\xe3\x95\xc3\x94\x62\x84\xa1U\xc4\x39ru\xba\x18" "\x39=\xd1\xcd\x30\x84\x34M\xba\x0b^\xf9\x89\x06\x03\x88\x88K>\xa8\x45\xee\x1aw<\xa9\x11\xa9K\x88\xc1G\xc7\xcb\xab" "\x30\xb9\x45\xbe\xf0\x12\xb4\x31K\xfc\xf8\x95\x8d\xbc\x32)O)\xe6\xc9K\x84}Q\xb1\x82\xf1\xab\x88\xb6vI\x88\x8e\xe8+\xbc\xa3\xc6\xaf" "\xd2Qv\"\x94\xc8\xf6\xb5\xe9\x31\x36\x8b\xaf\xf0\x89VN\x9c\xba\xba\xbb\xd0\x84\x96\xbb\x8c/\xbf ^\x8e\xc1\xc2\xd0\xf9\x37i#\\\x0e" "\xb5\xd9\x8e\x16\x1fG\x88\x05\x03-\xbf\x82Y\x13\x9a:\x43\xdf\xba\x86\x39\x07\x13\xb3\xd6\x8d\x8b\x9b\xbd\x16VW\xb8\x96\xcc\xae\xa1]\xe3y" "\xe3\xfb[\xd8\x1e\x44\x94\x42\"g-\x0c\xa0}\xdf\xb3\x96{\x8d\xbb\x35\xbd@\x8dO=\xe0#.o\xf4\xebK\\\x0b\x41`\x8c\xfa\xdd" "\x43\xdc\xa5\xdfT\x92\xcf\x91\x1d\xf0\xe2L\xbfU\xc0\x85\x93\xab\x0b\xb0p\xadG/\xce\xa0\xdd\x9c:\xfd\x0e\x93\x92\x0c&\x87\x98\xa2\x14\x8d" "/\x36\xb9\xe7\x45l\xf1\x8c\xd0v\xd5H\xdfxt\x84\xc4L\x1f\x17`\x8d\x34\x7f\x16\xa1-\xcd\x15v\xbf\xfdy!nJ]hk\xfc" "\x00\x0e\xca\x42\x14\xe1W\xf8P\x08-\x0e\x8b\x31\xad i\xb2\x93=}\r\xa7\x07\xd0\x02\x87\xfe\xd6\x33\xdb\x1b\\\x89\xdc\x00\xdf~#\xdb" "k\x11\xed\xad\xe6\xf9[\x94\xe0W\x7f\xb5\xb0'\t\xd1\xcfz\xcd\x46\xc8i\xd9\x0co\x0f&g\x65\xd7)\xef\x02\xbb{@squl" "Y\x89\xcf\xb8\x9a:\x31\xa9(\xe2\x9aWX#\xc3p\x84\xa9L\x0e\x8b\xec\xb4\x98v\xbf\x0f;\xaah\x07s\xa7\xa6\x83\x39~\xba\x46K" "\xc2\xab'/\xfc(\x8c\x30:\x8b\x88\xde\xe0+\xd6)+WN}\xfd|\x91\xd4j(\xf0\x98\x97\x1e\xbf\x61^\xda\x18\x17zR\x17\x42" "\x43\x13\xf4\x46s\xc5\xdb\xdf\xe2S\xbf\xf0z\x90\xe4\x1f\xb0\xec}\xcc\x38\xb5\xcaq\x16}\xc6\xe6\xfd/\xdaq\xde\xc9~\x16\xc5\xec\x88~" "\xc0\xff" "\x1f]\xe7\xa1\x95L\xb0\xb4\xeb\xf5\xdf\xc9\xb9T\x13\x92\x44\x30 * &\xc0\x44R\x14\x18\xd2\xc5\x1c'\xdd\xc5\xa9\xaa\xf7\xad\x91o\xef" "\xf3\xaf\xe5\xf2\xa9\x1a`\x42O\xc7\xea\xeaj\x39`&@#S\xad\xcf\xdeW\?\xac\x9e\x85\xdd<\xc7\x19\xa2]\x39w/\x81\xba\xb4\x9f" "\xe9\xcf\x81\xee\x8c\x66{\xc7\x88\xd6\xcb;\xa5^\x90\xda!j\xdc\xc7\x93\xaf\xdf\x45\x39>(\xf1\x93\x1b\x10\xa3\xdf>\xf6y\x9a\xf5Y$" "\xfb,\x84\xfd\x08UO\x9f\x43\xd3>\x8d@\xca\xb0V\x41(\xdfY\x1f\x11\xf9\x8c\x92>\xf1\xb8\x0f\xcd\x1c\x87\x8d\xbf\xcbg\xb8\t\x99\xa6" "\xc1\xad`\xdf\x31m\xe7\x17h\x32\xfb\xc9\xa8\xf0_I\x8d%W\x46\x8d\x9a\xee\xe7\xde\xdc\x91V\xe1\xf5S\x8c\xe5\xfa\xe9\x9b\xdd\xd1\x0b\x16" "\x99\t\x83\x17\x32p\xc2\x9ek\x62R\xb0\x9c\xff\x12\xee\xe1S\xc4Z\x12\x9a\x63\x91\x10o\xe6\x05[(\n\xd1\x82\xbc\xb0\xf3\xfb\xb2\xbb\xd7" "\xa1h\xb6\x32\xd7\xc8\xb1\xc1\x0b\"\xf4\x18u\xc7u\xff\xb9\x06\xdf\xcdS\x9c\x82\xdd\x39\x88\xac\xf9\x82\xe5\x93\xc2\x11\x9e\x87\xc6\xd0\x97p\x81" "\xe3\xd1\x05\xeeH^p\xda\x9a\xef\x88\xd1\xa4\xa8\xfb\xee\x9d\xe4\xb2\xf5\x87\xf2\t\x1a\xbc\x17l\x92#|(\x80\x16\xd5@\x88\xf1\xdf\x0b\x36" "Y\x11.\xf1=l\?\",|\xc3\xe9L\xc4\xe2M\xfa\xf9\x42\xf1\x15\xb4\xd9V\x63\xd4\xa1\xdf\x99i\xe9\xf5\x37\xc4G\x9e\x8e\xcfH;" "\xcf\x0b{\x43/\xec\x02\xbd )\xb3=J\xff=\x90\xf4\x8f\xe3\xf5Y\"\xa3\x1f[\x89\?{I\xce\x1a`\x33\x0f\xe7\t\x88\xbcO\x38" "\x92\t[]\xb0sN.\x9c\xd9W\xefyh\xca\xb3\xa0{\xf2\xc2\xea\xf0\x05N\\J\x64\x8e\xb4\x89\xdb\x45TO\xe1\x1c\xa9\x8b\xb0\xcd" "\xc6l\xde\x43\xb4\xf5\xd6\x13\x0c\x13\x03\xb3Wv\t^\x7f\xd1u\xe1L\xb7\xb0i\x99\xe6\x15\x8e\xea\xb3Wl^\x30{G\x0c\x31\xa1\xed" "\xc2 \x84\x41\\)=\x11\x44\xe7\x36-\xf3\xe3\x33-\x9a\x36\xe1\xc7iZR[G\xdf=h\xe6\xe9+\x44\xb7\xf5\x9d\xfd\xc2w\xf8\xa6" "\xcc\xde\xe1\xb7\x38{O,H\x80Qk\x10\xbc\xbd\xf7\x04m\xe5P\xd7=\x9aK\x8c\x8b\xac\xce\x44+\xea\xe6\xe0\xcd&\xb5\n\xd6\x0e\x9b" "\x18\xf7\x96;\x62\xf6\x8b\x45\x39\x8bJ\x65Z\x34z\x0fO\xaf\xff\xd5\xc2\xe7\xc9\xff\xf2\xbdX*\xe8\x65w\xf7\x93\x80\xb7\x18\xf0\x1eP\xf8" "\x87\xff\xf1\xad\x65\x17\xbfO\xc6\x1f\xff\xf9\xc9\xcc\xc9\"\x32\xc4\x8e\x94\x32\x0c\xc7xz\xc8\x8e\xabR\xba\x16\xecg\xfb }\x18\x96\xee\xc8" "\x17g\x16U[\xb5O\xb0\xcesX\xdc\x1c\xa1\x85\xe1\x33\x62\x41\x93\x8a\x41\x16:G\x34\x8c\xd9\x86\x08\x9bl\xf4\xb4\x65Q\x1f\x46\x30\x1a" "*\x39\x8c\x18\xc2-\x61\xc6\xe8\xd4\xb3\xa1\xbf\xb5\x9dW\x86Pw\x42\xf4\xe3\x87\xb4\xf0\x0c\xd9\x63\x1d&\x43\xfc\x04k\xcc\x94#\xd0\x02\xb8" "\t\x31\xd9\x32\x84g\xe3l\x98\xeeu\xb0s\xa3\x88\xfbO\xa0y\xd1\nQj\x94\xe9^\xf1wn\xf7\x34\xc1\x86\xdc\xc2\xa0K\x06\xa0-" "\xac\xd1\x8d\xd4G\xe0]\x39\x39h\xb3\n\x98\x84\x33\xaby&\x32v\xd5Y\x18\x0b\x66\xbc\xa3\x85\xe5mt\xb5\x96\x66\xdc\xcf\xc6N\xe0\x84" "\xbd\xd3\t\xc2U\n\?>\xa3Q\x39\xfb\x96i\xf2K\xd3X\xcbM\xe2\x9b+\xf0\x0b\xc4R\"\xa1\xad\xb9\x9dM\xd2\x1c\xce\x99v\xbbz" "\x0e\x9c\xeb\x13\xcb\"\x85\xa8\xb6\?\xd9\xa7\xf8TS^>\x90\xd1\xa8kQ\x9d\x1e|\xb3\xcf\xf0\xf8\x0b\xd1\xb4U\x9c\x81\xaf\xb7\xe0\x90\xdc" "X+\xf8\xa9\xf1\xb2\xcd+^\x44\xd8\x35\?\xe1O\x38\xfb\x8cm\xd9\x92\x10S\x63\x9fpz\x33\x32\xaf|\xc2uz\xf6\x89]\\\x84\xfd" "}\xcd\xce\x37\xd6g\xfb\xe2\xa8\xfe\x0b\x0e\x91\x1aH\xa7\xa8k\x10Q\xac\xa7Yhw\x13\x93\x43\x06\x81R\xad\x45\x0e\x9c\x7f&\xff\xe9\xef" "\xe2\x12\x0c\x02\xa7\x86>\x44\xb9\x9b\"v\xa6pU\ns\xe3\?\xdb\xba\x1c\xa8I\xdf\x01\xe1\xbfT\xd3\xce}\x64S\xc2\xa6\x65\xa1\xc1\x66" "\x16\xbc\xbc\x8c\xfb\xd2\xae\xd7\x33w\xa8\x32M\x97\xc7\xa0\x9b\xa3Zr:\xd9\x11\xd3\x8b\x1fv\x9b\xa7\x1c\x43)\x31\xed\xaf\xe2;\xe2\xb8\x89" "X\xac\xc4\xc3\x06V\xa5\x88\x86n\xde\x34,\x9fGW#\x84\xdf\xdc\xd1\x10*\\\xc6\x1ajn\xd3\r\xf3\x8e\xfe\xfd\x1c\x66\xf0\?[\xb5" "~\x92\x9c\xbe\x43\xac\xf0\x31P\x11*\x31\xa5\xab\xe2\x16\xbc(HR\xb9\xc8\xb9\xbfix\xd9w\xeej\xed\x9e\x34\xcd\xd9\x19:\xc1\xee\xfd" ">\xf0\x12\x16\x91sG\x0c\x87O\xecp\xe9\x81x\xddH\x0f\x9e\\Ko\x8f\x11\x02\xdc\xb5\xec\xb3\xa7w\xa7n\x15^\x9dg\x9a\x45\xc4" "\x32\x91\x63<\x13\xbfgl\x90T\xa3\x99y*\xfd\xa2\xe8\xf4\x11\x9b\xff\x88\x36\x1csz\x61\x9a\xdd\xa0\x46\x92+kL\xfd\xcd,;p" "%\x1d\xce=N\x36\xd9\x81\xe7\xdb\xb8w\x94\x9c\x1c\x64\x07\xd0\xdd\xa5\x98\xad\xba\xf2\x03Y\x9c\x1b;\x10\x15O\xd9\xa3W-\xbe=\x8a\xce" "^]\x93qJ\xf8\xfc\xaei\xd8\tx\xcc\xc2\x11V\x1e\xc3\n\x1f\x66\x32q\x86\xcf-\xb6\xd2\xaa%\xad=\xb6\xcb\xa6\xfd\x94\xe0\xb8\"" "\x9a\xcd\xe3+\xa7N\xdd\x1e\x0eV-\xd3J\xef\xf2\x97i\xcf\xb7\x88\xdbg\x9a\xc6\xe0\x31O\x46\xd1\xe6\x87\xba\x8f_\xf9H\x8a\x86\x1f\x90" "{\x8b\xae\xc6\x61\xfe><\xce\x65\x65\xc5\x0e\xc7\xc1\xfa\xbf\x0eg\x89,\xe2\xf2g\x37\xdf\xcc\x0fu\xb1\xa2\xbf\x8b\xf9I\xf6\xcd\x80\xd7^" "\xf3\x1d\xaf{\xce\xe8\xfb\x15k\xf4v\x34\xce\x31\xff\x1d\xe0\xc8\xce\x0e\xcc\xae\xb2\xb3n\x66.\x46\x05\xd4/ry\x7f)*\xb6\x06\x99\xd8" "\t\xd4\xeb\x01\x66Y; \xff\x99>\xa2%\xdb\x37\x8a\xdb\xa4\xf4\xe1\xa2\x97\x19\x88p\x61s-\xd9\xd6\xe0j+\x07`tP\xb2G/" "\xa2\x8e\xed$\xbbi\x04\x42\xbfGLW\xff]V\xb2\x87\xdf\xab\x89\x1c\xcb\x98Vy\xf8\xfb\xd9\xc8\x33\xb1\x88\x9a:\x7f\x1f$\xe7\x07\xfe" "^\xe0\x34\"l\xf4\xa2\x36^\x00\xd6\x35\x0b\xdb\x1b\x84\xb7\x12\xf1\xae\xe1\xa4\x01\xc1\xc4Y\x8f\xe2(\x1c\xee\xff\x99\xa5\xa6\xd1\xfd\n\x11\"" "]\x44\xd4x\xd3h\x32\x9e\x46]\xde\xc0\xe8\xd2\x19\xf6\xba.\xea\xfd\xd6\n\xb4\xd7M\xa3q\xd5\xa9\x8b\x96\xab'\xb4kO=\x0b\x08\xe3" "\x8b\x9e\xe7 \xd5X\x89\xb0\xef!|\x97\x9e\xab\xbfG\xb8\xa3\x1b\x35O\x7f\xf4\x92\xdc\x46\xc7\x37,*\x92y\x41\x66}\xa9\xa2\xb0\x1f\x88" "\x89\x9e\xf8\xc9\xde\x8f\x0e=Y\xac\xbc\x82MZ\xa8\xd9\xe8[\x31\xb5V$\xc8\xc4\xd5-|\xafL\xdbi}tyI\xe1:)\xe0\x06" "\xe0\xfc\x63\xdc\xa9\xc6\xb1\xf9\x93\x31|\xfa\xca\xc4\xc9\x9d\x8b\x1c\x89M\x93i\x1b\x8dWx\xda\xc9\x36q\x91\xc3\xdf\xb8\x45o\x18\x35\x32K" "\xfbyG\xf4\x16\x00\x9a\x46m\x87\xe1\xce\x0e\xb0\xac\xfa+\x11\x46O\xc3H\xb7\x32\xc4\xdd!v\x99\xf0\x9a'i\x9f\x83\x9d/-\xf0\x92" "Mw\xce'\x83\xba\xe5\x83\xc6Z>[\xf9\x81\xf4p\x10\x1d=\xf9+\xc8\x0e$\xe7\x37\x61\xf5Y\x63\n}.\xff\xe3\xc3\xee\xdd\xff\xf7" "\xc3\xc7\x03\xcf\xb5\x1aZ\xe0j\xcf[\x85L\xf3:t\xf7\x00G\x38S-\xaf\x9e\n\".>\xd3\xdc\x9bk\xb4\xfcOu\x19J\x8b\xde" "\xe4\xa2-O\x9d\xfe\xa2\x45\x94\x36*~\xde\x64\xda\xf9\t\xa7=L\xfb\xeb\x82\x88\x16/\xedr\x33\xda\x30\x66\xb4\x34\xce\x38\xfcT\xeaj" "\x61\x8c\xe8g\xe1\xca\x1a\xfb\x19\x07\x82\x33\xe6&\xa5|+\x19\xdb\xd8k\x46\x0b\xd9\x8coz\xa3\x86\xe0IG\xfd$\xb6\x87\xe1\xe0:\x1d" "T\xd3\xeb\x1b|\x32_\x39\xb5\xc7\x35|M\x1f\x96\xf0W\xb5\x63Iy\x92\x36\x8f\\\xdb\xf9\x0c^\x16\xf3}\x8c\\\x84\x36\x46Q\xf2\xb8" "\x39\x03\xcd\xf7\x31k\x32\xdf\xd7hY/{\xf1\xe5\x35\xb4\x0b\xed^\xce\x0f\xe0\x1f\xad,\x91\x65\xb2\xf2\x1b\x9c`\xc0\xa4\xda\x33I\x7f\t" "\x88\xe6\xe9.\xa2\xb5\xff\x46\x1d\xc9m\xcew\xb4$\xff\xe4Z\x38\xae\xe2\xf5\xa8\xf6\n\xfa\xf9\x37\xd0\xe1\xd0\x64\xd4\xa0\xc4\x16\xa0M\xb5o" "\xd0\xc6\x66\xca\x1f\xf0\xa4\xe1w\x93\xb1\x92'\xff>\xaa\xdc\x63\x18$\xa2u\xb9\x94[\xb0V +\xa0\x99#\x85\xad\xc0\xe9w\x08\x11q" "&\xa8\xad\x31\xe4\x81\xe6>)\xd0\x36M\xac\x83\x85\xb6}\x80#\x99i\x61\xfe\x18\x1e{\xd0\xcc\?*\xd3J/\xd1\xde~\xa6\x99#\t" "\xc4\xca\xbd\x46g\xf7\xc7hq:\x08\xe2\xf0\x16\x0e\t\xa6\x45\xa7/\xe1\x62\xebZ|:\x42\x44\?hW\x9f\xc9:\xbb\x91\xf8\xfd\x0e}" "\"h>\x0f\x0bm\xb1\x9fT\x9e\x32mY\x8d\xbeO]Kj\xa7\xf1\xea\xf5O\xeb\"\xe8\x08\xb4\xf1!\xbc\xaa\\\x43x\x0ch\?\x65" "\xac&\x37\r\xd3:\x10\xa5\xdf\x34\x39\xf8W\xfb\x37]\xd2\xc7#\xc4g\x98\x33v\x9e\xb0\x7f\xe9\xfc]\xf4\xe0Q\?\xd7u\x45\xa0\x85\xda" "\x16\x8e\xf9\"'\xbc\x45\xab\xa9\x85s&\x8am\xcc!\\\x36\xc1\x15r\x32\xe2\xc1*\xef\xc1\x02n<*\xf3x\x19\xdf\xc7l\xb4\x11\x0e" "\x46\x10\xcf\xae\x33\xd1g)\xa1\xf1r*.\x03l]n\x1a\xb6G\x9d\x33\x1a\x9f\xd0:\x1cJ\x94\xbb\xa8q\xbfS\x1a\xb1m\x8c\xd0\xf6" "\x92\x17\xda\xea\x18#\xa6\?L\xc4\xd6\x81\xa6\xe9\x1c*\xcb\x0cv\x12\x11\x36\x0b\x9e\x9d\xe0\xdbn\x94\xb1\x0c\x16\xe4\x8a\xd6!\xfb\xb8%\x18" "\x8a\xe7Z\xb3{\xf1\x81\xf7\x8fp\x89GG\x83+t\x17\x42\x13=\x35\x92\xcd\x95\x17\xc9\xf4\x10\x95\r*G\xa1\xcd\xed\t\xeby\x12'" "\xc2\x1c\x9f\xf0\x06\x17\x80\x85n\xcex\x81\xc2\x07$\x08\x1c\xdb\xa4\xd7k\xf1\xbb\x95\x65p\xb9\x87.\x97\x88\xab\nyG\xf6\xb0\xb1\xb2\x88" "\xeb/t\"\x45\xdcX\x89>\xd4Qjo(\x1d\x13\xed\xb7\xdd\x0eu\xcc`]\?\xfb\x04q\xc5\x45\x14" "\x9a-I\xd8\xc3-\x86\xfd\x1a\xf8\x82\xdb\xc1\xba\xd5y\xc1o\x36\xbb\x36\x86N\x1a\xc1TG\xd4\xb6\xf4\xdd\x35L\xd8\xcf\x0b\xac:\nQ" "q\x0b\x8epO\xb0\xc7\xcc\x0bX\xa4jL\x1f%\xa7\x36\xf9z\n\xd8pRx\x89\x8bIw\xefw\x1e`\xdbS\xd1\xd0\x97+\xe8\xa6" "\xf0\xb9o\x19)@\xb3m\x80\x8c\x7f\r\x80i\xee&\xe6\x1a\x1c\x19M\x8b\xea\x37\xc9\x41\xf6{\xf9 \xfb\xe6\x03\xee\x04\x13\xb1\xf3\x02\xcb" "z\x01\xafM\xde\x1f\x34t\xfe\n~\xdf<\xf3\xc9\xef\xfcJg+-\xa0\x8bh\xb6\xcaP(\xc5\xd4vOt\x11>\xbd\x99\x86r\x46" "\r\x66:\xd3\x30K\xe0\xe2\xdf\xc3\xf1\x00&\x08\\\xf3\xdf\x85\xc7{\xa0\x39\x15\n\x9f\xab\xe9\x41O\xad\x14\x36\x8b\?\?\x41\xdc\x64\xa3\xe4" "\rl\xb6\xe2\xb6T\xa3\x9c\x8f\xed\xbfj:\xcc\xed\x9f\xb1\xdc\xd9\x81U#>\xeb \x66\x94\x1d\x88N\xcf\xe1\xd8i\x1a+\xc0\x93pS" "\x46\xf0\xa8\xf9I\xb4\xd7\x66\xdby\x92YPML\xea%\x17Y\xc6)jS\x63\x35\x8b\x9f\xcd\xaf\x8f\xed\xbc\xf4\xe1\xdb\x63\?\xf0k\x1e" "\x03&\xea\xde+-\x86\xbe\x9cs\xe9\x98\xb2\xe9\xdc\x39\x94\xd4\xd6\xf1+\xbfx\xbf\xca.`\xa2\x9e\x04y\x94\x07\xe2\xd3\x65R\xe4.\xda" "\xd9\xb1\xcf\xf3\xec\x00\xc6\x86'\xd1\xe7\xa1']\xf4\xf5\xa8\x8f \xcf\x0b\xcb\x83\x1e\xf8\xeb\x31\x9f \xe8\xd0\xfc\x44\x9b\xd6\xf2\x39\x44\x9b\xfa" "\x16\xae\xeb\x64\xc3\x7f\x9b\xec}\xed\xbc\x95$W\xf2<#\x62\x38h\xb0|\xa9\xe6\x99\x02\"\x87\xe7\xaa\xf9\xcbP\xb1{G\xb3\x85i\xeb" "\x86Z\xad\xfe\x39\xe6\x99)\x39\xbf\xd1\xdd\xd3\xd6\xafR\x85z\n\xa9\x45r\x88\xb4\xd1&\xef\xa2\x11\xd6-W\x32\xa2\xec\xbc\x46\x33\x8d\x90" "\xdb(\xcek\xb4\x99\x08O@\x0b\xfd'\xac\xd4I\xea\xe6\xe0-\xc4\x08Z\xb8\x00\xfd<\xb8p\x8d}\xe5ZhSzJ\x9c\x07\x0e\xdd" "\xca-X\x19\x82\xe8\xef\xd4\xe0\xfa+\xb4\x99\xf5y\r\xbe\x44\x42t\xb2jXR\x30\xaf\xb1\x16\xa8\xc1km^\xc3v\x93\xcaW\x10\r" "\x66\r\x8e_\xf3\x33,\x9c\x9b\xd7\x7f\xe7k\xe4\xd0\x7f\xca\x42]\x87jx\xc2\xba\xa4\x04\x8bZ]\x46W`u\x0c\x7f|\x17\xe5] " "\x34\x80\x1cx\xf0\xa1I\x9diP\xd7\xe9\xa0\x8b^r~@m\x95\x19\xb8\xe7u\xcdn\x98<\x43\xafX\x0f\xc8\xcb\xd5\xf7T\xc1Y\xa2" "jMN\xc8\xec\x63\xda\xe6\x63\xe7z|\xc9uL\x12\xec\x88\x36\x03{\x8e\t_\?\x16\xe6\x06\xea\x7f\xf7\xef\x31>\x9c\xdc\x91\xee[\xf5" "\\uM\xef\x01%\xdf\x35\xff\xec\xef\x61\xe2^\xd5o \x9b\xd9p\x31\xb3\xbe\xfa\x01]\x85l\x86\x62\x39\x30\xf5\x9e\x16\xc5\xa8\xb5\xf7\xbb" "\xfa\xe7\xc0W\x1d\x9bm\xcf\xebI\xed\xc5\x93K\xae\xeb\x17\xe1\xa0\xa0\x0e\x83\xf5\x8e\xc8~\x44\xa6\xe5\xa1\xbd~\xf0k\xdc\xbfu~\x15\x9d" "\x9fk\x89\x1d\xaf\x92m\xef\xbf\x0e\x84\xc5\n+\xfd\x7f\x0f\xd7N\xb3\xc3\xb6@\x46\xf9\x02\xcf\x08\x17\xb5s\x35\xb1\xda\xf3\x9a\x97R\xb2\x37" "\xa2\"\xbb\xff\xd7\xd9\xa1\x39\xbf\x85n\xf5\x35\x0bG\x93Wj\xc2\x63{\xde\x8c\x31\xf0k\xc2\x1b|\xde\x84\xcd~\xde\x86\x63\xbb\xd0\xbc\x1c" "\x85\xb6\xc9\x8f\x10\x16\xbc\xf6\xef\xf6\x88\xb4r\xde\x66M\xd9\xc6|\xb4\x10=\x90\x36\xe6\xa9\x95<~\xb5\x01m\t\x9b\xf1o\x94\xfd\xa7\xc1" "\xef\xc3\x0e\xe8\xa2\x89\x9d%\x08r\x0c\t\xd0\x66vm\xd3\xb6\xd5\x66\x9f\xad\x1dM~\x38\x02V\x11\xb3\xf4\xf3\x36\xab>\xe5\xefj\?]" "\xe4\\\x0b\x0by\xc4\xbc\x81\x36>\x46\xb0]\xd3\xe0\x9e\x07\xd1\x96\x38\x88xk/\xbf\x9dlp\t\xec\x06\x39\xa7\x0f\xf7\x9c\x8e\xdb\xca\xb3" "\xb4\xb1\x84h\x01\x06\xe6=\xbe\xd2\x1e\xcd\xaa=x\xff\x1b\xd5[\xde\x9c\xa0\x44;\x9e!\xc2\xb1\x88\xb6\xa6TX\x38\xa6\xa1\xa1\x87\x30\xd6" "J~\x84\xd1m\x0f.=\xc2\xd3\x0e\xd3N\x44\\\x1e\x13'\x42s\xfe\x13\xda\xaaW#\xab\xd2\x1e\xd6\xa9\x0b\x9fxvXP\x94\xac%" "L\xf4%\xec\xa6\x85\xb3\r\x44\xbc\x8e\x1e\xb6\xd5\x12\x0e\x91 \x98T\x36\xd2\x9c\xd6\x93n#{\x90\xeak\xed\xc9\x81\x9d\xcd\xe6=\xb8R" "\x0b\xaf\xb8Y\x81\x46\xa2-\x44\xa5wx\x0f\xaaV\x04\xdb\x35\x12\xe9\x08\xef`\x61\xe7\x08\xbc\xcf'\xa3\x63\x88\x03\xefY\xf5\xd8\x95\xefi" "\x90\xca\xf2\x15\x96\xb2\x8b\xf6\xf9\x15\x9e\xfa\xf8\xae\x17\x17\x9b\xd2\xce\xc5%\xbcJN\\(i\xef\xd6\xb5\xbf^\x41\x8fU\x87zr#\xb2\x98\x88\x16_\xd9\x88^\x88\xbc)u\x97\x32\xf7\x0f\x39|\xaf\xfb)\xd2\x94\xa6\x9a\xde\xa3" "\xdf\xe0\xf4\x1d\xee\xac*\"\xbf\xc4\xc1\x63v\xc8v\x42\x17\xae\xdf\xd4M\xb6\x84\x64Ss\x06\xb3\x04\x16^\x18\x7fWgX~(\xda\x13" "\?}\xae\xf9\x99\x10\xcaI\xf8\x8d\x0c\x81\x85\xdc\x46OO,KPZ\x41\xe8\xa5\x98\x10\xe8\xe9\x1e\xcdg\xb8w\xa9L\x34\x39\xa7\xef\xd0" "lU\x91\xf0\xf2\x86\xc4\x39S\xbe\xde\x94\xaf\x17Q\xbf\x85\xeds\xbf\x1d\xec\t%|\xc4kM\xbb\xb8-\xc4\x99\x14.\x8f\xf8\xd5\xben" "J\xb4\xb4!\x42\?|~\x63\x1f\xbd\xafS\xcb\x16M\x41\xc4\xa7=\x1dp\x06U\xac\x82\x98\xf7\xb1\x83\x92\xb0w\x15\x0eu\xfdk\xfc\x61" "u\xe4\x80\x45z`\xb1u\xbd\x43\?`\x01\xb7X\xcc\xb7\xf9\xe8\xf6\x8a\xda\xd8\x62,\xdf\x42\x43-\x39\x08\xf3\x0f\xe1p\x1f\x61\xff\x44\x43" "\x1fo\x80U\x15\x46u\\\x44\xff\xd3\xb4\xe0\x36\x9a~\xba\xa6\xdb\xb0!\x87\x0f\xe0\x82\x01G\xa6\x45\x1dK\xcbM\xd3\xad\xfaP\x1a\x06\x34" "\x8b\x0e\x98\xf1\x06\xe6\xba`\xc9\x33\x88\x1e\xb9\xe2\x41\x44\x0b]-iT\xad\x84\x9b\\\xb2\x7f\rmx\t\x8e\xacL\x0f\x10\x18q>\xa0" "]{\xc0\xae\x0e\xfd\x18\x85\xcb+pu\x43\xde\x82k\x1b\xb6\x0e\xc3\xbd\xf3p\x8b\x8f\xd8\xeb\x13~\x80\xf9\x1f\xd0<\x14\x95\xaf\xce\xa8S" "\xf3\x0b\x88\xa6v\x45\xccr\x0c\xc3\xd3\x17\x10\xc6\xe0!\xc2\x44\xcf\xdd\x62\?\xc4\xc2\x36!\x1e}\x18\x0e\xdb\xe9\xde\x01\x44sL\x17\xa2\x1d" "\x14\x0e\x41\xde\x1e\xc2\xbf\xcf\x87p;W\xe2\xf6\x10\x00|N\x9f\x45\xe3\xdf\xd4\xd9\x10\x8e\xac\xf3!K\xf2\x30\xc9]\x82\x30\x80\x08\xf1\xb0" "\xc9\xc8\xd2q\x98\x36>\x9d\xe9\xf9\x32\xca[>\xe0\xf4\xadpN.\x8e\xc8K\xb2\xee\x0c\xf3[N^\xce,\x9av\x05\xb1\x04\xe7s\x04" "\x1fT\x06\xe0\xa2\x06\xc2\x90\x30\x87\xbf\x9f\x92\x9f\x9b\x87\x9br\xe9\x94\x06\x36\xdb\xd3O\x0e\xe0U\xce\xb1\x65\x84\x31\x19\xf2\xb7\xb6,Y\xb9" "\x05\x37\xbc\x86\xc5\x33\x9c\xcf\xd9\x36\xcd\xd9\xb1Wj\xf7\xdf\xfc\xf0\xa0\xb9K\x83i\xbb\xcb\x8c\xed\x00n\x04\xda\xa9\x13\xb7\x19^\xb5\x41\x0b" "\x00\"\x44\xa6W\x46\x93u\xb2\xee\xb1\x86\x9b\x87\xcfy\xa7\x16\xd0|\xc1\x35\x36\xb6&Z\xf8\r\x13\x11\xf9S\x44\xcc\xd2\xcd\xb3}\x84\x44" "\x1c\xee\x93\x8f \xaa\xe0\x39\xe2z(\xef\xc0\x39\x9f\xde\x36\x84PN\x9d\xbbw\x00\xed\x8ai\xb1:\xf8\r\x9e\xb5=\x35\xe7N\x39`\xfe" "\x94\xca\x7f\x1cz\xf5\xc0\xcc\x99y\x31\xce\xe7\x9c|U\xea\x12[\xf4\xf9L\xc3Xo\xce\x11\xfd\x9c\xf3\x83\xf3\x08M\x9a\xf0\xc2\xb9ss" "\xd8L\x46\x88N\xc6\x1c\x9e\x97\xc2\xeb\xae\x33i<\x43\x44%=gOu.\x35\xd4\xce\xedG\x9d\x0b\xa9\x87\xb1\x9c]\xb4\x11\x12\x35\x9a" "\xbf:\xa5\xbb\xe2\x8f\xac\x1a\x46\xcc\xf3\xf8\xb8\x03\x96\xf0\x36\x38\xc1;go\x43\xc9\xfe\xaa\x89\xb6\xc7\"\xc4\xd1\xc2\xefYzm\xf0\x30\x15" "\xf1\x89;\xd7\xcc\xb9\x85\xb4pY'\xb7Nx\xc0@|\xae\xf8]\x89\x96^_\x86\xd5\x1f\xda\x37\xe7\xd8\x11\xc0\xe8\xf9\x46\x45\xdf\xe0R" "\xb4[$m\xf2\xf0\xe0\x64gx\x9e<\xbe\x83\xfd}'\xbb\x03&\xde\x1e\xb9\x98m\xef\xad\x9a\x1f=\xa2\xb1\x97\"\x8d\x06\xa6\rz\x9c" "|P-\xbdh\xc1\x07\x81\x63\x80\x39<&\x8d\xd8&\xdb\x45u\xd7\xee\xae\xfd\x00\xadZsN\xef*\x33\x17Q\xd5x\x32\xf4\xa4\xe6\xd9" "\x99\xc6\xc8\x33\xc9\x37\xf5\x35n\xc4\xcf\x86\x45\n\xc2\xcb\x07\xddm\xbd@\xad\x31t\xee<+\xfc~\x8c\x9e\xbf \x86\xb9w\xda\xe2\xe6\xe9" "\xc3\x02\xc4l\xc1<\xed\x0e\xb1\xb5\x84\x88\xafK\xe7\xdf\x8d/\"\xdb\x86t\xce\x8dr\x65\xf8iKht\x18\xca\x30@s\xee\x0f;g" "\x1c#\xa3\xdc(\r\x93\xeb\xd0\xb6\xbb\x94\x41<\xfa\xa5k,\x1d\x16\xbe\xe1\xdb\xd1\xa7\xa5\xcc:n^:\xd9\x95]\xc7\xef\xb8V<\xac" "\xf8!,\xc4\x13\xdaJ%\x61\t\xf7\x80\xc5k\x8b\x03x\xc5,t\x8e\x1aYy\x91\x43\xb3\x66L\x36k\xc9\x8e\xd0\xac_-\x1c\x1f\x39" "\xf1\xc2\x45\xb4\xb9\xdb\x45\x0e\xcd\xf4\xe2\x04\xcf\xb5\xb8\xcch\r\xcc\xa2\x8e$\x91\xd6\xe4\xf0\x16\x34k\xb7\xb2\x0f\x9a\xb9Xh\x83\x36\x63t" "Q\x89mOg\xd3\xe4\xe6\xe3\xef!\x34\xeb\x84\x18\xb3\x0e\x8ah\x96\x97\x16\xdc-G\x39\x03\xad)\x13\x9a\x63\xc1\xdf\x15\x10\xc0T\x98\xaf" "\xa7\xabSt\xe7\x16ut;\x84\x16^k\xc1X\xab\x8b;\xbc\xb7\xc5\x03\\\xca\x8d\xd1\xc1\x65t\xd0\xc9\xb4\xcb\x05L\x9e\x8bG\xf9S" "~j\x0f\xab\xfe&\xed\n\xba\xe7z\xa0L\x9e\x82\x8b\x02hS\x01\xca\xb2\x13\xbdG\x15\xcf\x92\xcb\x35\xe6\x1aT\xeb\x93\x9f\xe0r/;" "\xc7\xb2\x01Z\xd8\x10#\x96\xb5\x8bh\x8d\xa4o\xeah\xe4\x63}\x66\x46}\x11m\x03\x8b\x05\xfd\xee\x85\xf9=\xe7\xef\xb6\x86\xc0_\xa6\x85" "\x85\xd7L\xb3\xda\x46X\xfat\x86\xc7\x9f|\?\xa6U\xf6\x93\x9f/h\x95\xed\xef\xba\xee\x8f\x08K\x9b\xb0VI\xf3\xf9\xe4\xadH\r\x0f" "\x11\x9e\xf3\x37\x17u\xb0\xde%W\xd1\x62\x1b^\x0c\xa0]\x37\xc1[$'\x66\xe5\x85]\xde]\x0fI\x13\xf6[\xa0M-\x08\x87'\xe0" "\xf8\x98\x64\xfa\x8c\xf9;s\x96\x34\x66\"\x9e\xdc\x93\x64\xd3p\x62\x9c\x0c\x91\x97\x45\x0c\x41\x65\?\xfa\\@,\x14\x9c\xc9z\x1d\x15\x90\?" "\xa2\xe2~\x32\x39\xc6\nU\xd5*\xe4\x45x\xe7\x87\xc6N\x0c\x8fM\xc4\xfa:\x13\x11\x18\xd5\x44\xf4\x42\x44<\xe1\xa1S$i\x64\x43\x1d" "\xa1M\x87\n\x1b\x13g\xd6\xaa\x9b\x06\x07\x11\x15\xf1N\xa3\x1b\xde\x44\xbb\x46\xf2\x44w-\x92z\x07I\x84ZS\xf8\x98\xf3\xdc\x85\xad\xdd" "\x84\xd3\x06\xe9\xfa\xd2\xf3\"\x96\xdf\t\x7f\x8aN\x44\x93\x32Qz\xf0\x30\xb1\x98\x16\x9f\x8e\xb1\x0b\x91i\xd9\x03\x8b\x38\xf4\xa3\xaf$^h" "\x34gZ\xccy\x8b\x8b\xad\x33\xae\x1dj/ \xe8\xc1\xd4*\xc7l\xf2z\xf1\x19\xcb\x18\xb2\xd5\x91\xf7\x82m\xce\xe4@\xbe\xeb\xc4\xae\xad" "\x10o^\\\xf4\xf7!\x62\xfcv\x96\x89\x43\xa4s\\X\x90\xc8\x1d\xe8h\x08k\x87N\xdc\x08\xb4\xcbo,Y\x12\xf1\x9a\x87\xae\x91\x1c" "\xf1\xcd\x13\xd8Z\xc1\n(\x62{\xcf\xe9\x99.\xbe{\xc3\xc2m\x11m$ |\x44\xc6\x8a{G\xe0\x07or\x80$\x8f\?\x9d\x43'" "\xe6\xbc\x45\xfc\xc2\x0b\x63m\xff\x19/y\xd3\xbe\xf0S\xc5\x0b\xd0\xd6>\x1a\xc3\xdc\x97\xff\x30\x39(:\xe1w`\x62\xda]Q| q" "\xf3\xc9\xd1\xb1s\xa7\x92\xd1\xf9\x80\x03\xa4\t\x06\x87\xc6\xf0\xfe\xd8\x45\x7f\x01*\xde\xfd\xb8\xe8\x8f\x05G\x01\xe1\x15\xd2\x31\xb9\x7f\xf4J(" "y\xd8\x43\xdc`\x13\xe3\xc6\x0b\x45$\x34\x62\x1c\n\x07x\x11\x30\xc6\x0b\xc7(\x18pt\x16N\xdb\x64\x9f\x44:\"n\xa3\x11\x83i\x11" "gx\xf9I\xc0Sm\x99&[$\x66\xbaW\x05\xf7\x91\xa8\xe9\x01^\x15<\x01\xdd\xcd\xd7\xe8\x45\?\xcd}\x63\xfa\x45\xc4G\xbc\xe0\xb4" "\x8b\xfa\x31\xed\xf1l\x9f-\x16\xda/i\x92@\x1b\xab)\x1f\xc8\t\x18<\xf3\xda_lk\xbe\x30|\x13Z\x8c#%\?_\x8e\xc9\x19" "h\x46\x0e\xe5\x1c\\\xf3\x92[\\\"\xdc\xcf\xc3\x32+\x62n\x9f,\x82\xf9\x8c\x7fu\x92hU\x92'\x30\xd7V#\x8ct\x10\xfb\x65\xd8" "_\xa0!\xa3\xaa\xc8\x1e\xc9\x17l-\xca\x17\xf2\x15\x44\xcf\xe3\x0b\xfby)\xf9y\x85\xdf\xaf\xf0s\x33\xf2\x1b\xa5\x35\x93\x96\x18\x41\xae\xed" "\x80\xee\xdc\xd5\xe2\xddV\xf9l\xd5&\xf9\x94\xa2\x15\xfb\x42\x00,#\x96I\x43\x64z\x85\xe7'`k\xec\x44\xacI\x8a\x81\x8b\x92\x8f`" "\x34\x35Mz\xab\x08\xc5\x01\xed\xe9\x34\xfa\xe2\xf3\xb6\xf3N\x8c\xcc)\xd2\xd2\r\xcd\xddtM\x63\?\x90\xa2\x1a\xa2j\xc7\xd9\x81\xdc\x44\x32" "\xc2\xbf\xbfV/\xb6\x9f^\xa6\x15\x0fR\x7fS\xa2U\xcft#\xc1\xf1\x14\x63R\x1c{\xd4p\x88\xba.\x32\xf8\xfb\xd5h\x8bpm\xd0" "<\x30\n\xb4\xc5\x14\xe1I\xa0m\xca.\x66\xcb\xba\x33\xed>{\xd6\xe8\xf2\x07\xc6mh;_kt\xe5\tvn\x31\x1aUmH\\" "\x66\x1f\xef\xef\x18n\x34;\x36\xbe\xc4\xf0\x91\xda\xee#\xa9\x03\xc9x\x9a\x65\xb1v\x1e\xeb\x45L\xfc\xe7\x41k\x64\xdb\t\xc7P\x15\xf9\x95" "\xbb\x32\xdcI]\xd4\xf9\x96\n\x8a\x14;\x34\xc2KxQ.\x18\xa3[h\x61i\x8cp\xeeS\x91\xcf\xfc\xcc\xc7\x42\x97U\x99%\x87\x88" "\x83\xa7\xe4h\xeeZ|\xb3\t\xfb\x17\xae\x61\x9aQ\xc4\x1e\x13rXt\x86'\r\xaf\x18T\xab\xecj\xe6y[\xfe\xd3~~\x97O\xae" "\xe9\xdc\x9e\xf9\x33\x99\xb6\xf3#L\xb8/\xb8\xef\xbb\xb2\x1d\x37\xaf(\xde\x81\x32\xcc\x38`Y\x1b\x33'O\xf6HnY\xaa\x62\x9d\x9c\x38" "\xb3\x1a\x64\xd6v\xfe\x1d\x62\xd2\x62\x94\xf0\x05\x13\x8a\x91\x9d\xec\xaf\xec\x35\xe3Q=\r\xec;\xd9\xd7\xe5o}\x11\xae/\\\x8b\x66\x0f\xf2" "\xe7Z\xfc\xf2\x85\xb0G\xa6\xa5\xed\x1b\xf9\xa3\xc6w\x12\xd4\x9d\xf0\xd1\x31\x31\xbd\xccQ\x64\xde\x08\xe6N]&\xb0)\xb8\xa6^\x37]\x66" "\xfd\xed\xa1S\x63\x07\x0f\x03\xd7\xe4\x92\x98wP\xed\x1d!\x83\xe4>\x31\xea\xf9\x42TV\xe5u\x16\xa5H\xb5\xad\xd3\x13L\x45\xd6T\x30" "T\nKg$^]\x64.\xb7\xc2K\x94\x01\xc4\xca\x32JW\xca\xeb\x35,@\x36\x86\xb9\x0f\x7f\xfd\xaaU\x0e\xe3\xc9W\xa6\x9d^\xef" "j\xd5\x8a\xae\xb8\x1a\xdez-\xf0w\xec\xef\x80\xae\x04\xb6\x63\xd9\x81\xfb\xecR;\xe7J\xca\x13\xcf\x46\xfe\xaa\xd9\xd7U\xea\xaa\xfc\xc3>" "v\x15\x96\x03\xd7\xbc\xbd\xebS\xf2\xc2\x99l\xcf\xbcI\x84\x06\xd7r\xd5x\x03\xcd\xb6\x34\xb3R\x1a\xe1\xfa&\x07ZL\xdd\x16\n&\x66" "\x0b\x95['\xfb\xbc*\x62\xea\x07\xe2\xe5\x37V\x81\x9a\x96\xbd\x42\xb6\xe5\xec\xeb|\xc1\xf5\xcd\x98\xbd\xb4>\xaaVl\xe1\xad\xec\xee\xb4\x17" "\xd1\x80'\x42\x87\xe6+{\x80\xf1\xd9N}\xa0\x93U-\x34}\x88\x00l\xcc\xae\x30\xe9H{\xe4\x8d\x02\x36\xb8\x12N\xbb\xda$\xae\x99" "\xfc\xdf\xfb\x30\xb3\x99\x18\xaf.\x30_\xa3\x1a\xf2\xb9\x97\x18-<\x7f\x39:\x9a-\xc1\x05\xaa\x03\x84\x66\x30zw\x05\x41:\x8c\x30\xc9\x99" "\xa8\x17\xa9\xe7\\K\x0e\xf8\nm\xf7\x11)\x93\xe8\x8a~\xc5\x45\xbc\r\xf8x\x19u\x41\xf7\xfe\xedoP\xb5 v\xc8W\x31\x33q|" "\xb3v\xaa\xeb\x34\xcf\x8fx\xd8J~\xab\xc5_\xf5q\xef^\xfa\x31\xc3\"\x1c\x14\x9d;m\xa9j\xc1\xb9wH\xa0\x61\x39\x85i;\x1f" "\x64\x9b\xdc\x98\xa6\x8b\xaa\xff>\xd3\xc5\xb9_u)\x0f\xd9>\xe5\x38\xeckW\x44\x63!\x88'\xbc\xdb)\xaf\xc1.\x1e|z\x85\xb6\x8f" "\x96p\x85,\x00\xaf\xa9\xc5Wr\x80\x8b%\x87\xa8\x8f\x12\xf6\xc4\x92\xc2\t\xa6\xc7\x44,!Sj!k\xa2UL\xaax\x9f\x98\\\x34" "\x66S\x95\xa6i\x8cg\x18mLk\x36\x33o\x0e;\xe0}\xb9\xe4\xa1\x42>\x38\x31\xd5o\"\xec\xd1\x10\xd9m\x12\x11\x36U\x88\xa7#" "\x17\x39\x64\x34\xb1\x8f\xa4\xc1\x04\xa4\x11\xfe\t&\xc2_g\xc1\xad+\x84\xfd\x63gt\xbd\xd1\xdd\x8dox)\x0c\xde\xbf\xe0\xbb$\x1c\x1f" "\x92\x33\xa7\x37\xf8\xc9\xf7\x38Z\xbdKI\xa4\x36s\x86\x7f\xfd\x04\xdaJ\xbe\x64\x9c\xe0\x1d\?\xc4XPRg-\xe0\xad\x01\xc2NH#" "\xc3\xa6\x35\xdd\xc7\x05\x38t\xf8\x42\x04\x17%\xf5\x8b\xc0)\x99\x37\xac\xa2\xbe\xf3\x96G\x88\xa9\xec\x05\x37\xaf\x33z\x0f\x03\x81\xf8\x95\xc8G" "\xe9\xcd\x31\x89\x37\x94\xb6\xafH\x9e\x95\xfd#\x61\x98\xbf\xff]\xd7\x33\xed\xe4*\x13\x61\x34S\x31j\xfa@\xd3\xb4\xaf\xec\xc7\x9e\xca\"\x62" "\"[\x44\xe6;\xef\x05\xe8\xc6\xe5\xec\x00\xa4\x0f|\x42\x98\xf4\xbe\xd2\xcf}'k/\x8d\xe7 }y\x8a\x65r\x00.r\x1am\xc5\xe6" "\xb8T+#|\x85\x88\x41\xd9\x19\xce>\x11\x8aO\xb5\xbe\x93\xddh\x15\x35&\x04\xb2\xe8\xf4\xaf\xef\x39\xfd]\xf2L\xe8\x1e)\xb1\x0f\x15" "\x44\xd4\xcaS\xdb\xb5\xab\xec\"G\x8e\"\xae\x41\x98\xf7\xa6\x98*\x12\xc2\xb6\x37\xf5\x8b\x63\x62]h^\xbb\xca\"\xf9\x05\x1e\xe3\x1e\xc2\x42" "\x89l\x93\xafN\xf6\xed\xa7\x34\xd1N\xfdI\xc2RG\xc6J\xd9\x05+\xa7\xa0m\xf7+\x84\x01w\x8a\xb0x\xca\x19X\xe3\xf7./\xc1" "v\xde\x89\xee\x36\x96X\xd9\x01i\x96\x11v\xc9\xbb\xe2\xd9g\xcf\x15mR\xd1y\x9a\"\xce\xb9\x91\x43\xdd)\xfb\xbaJZ\x96\xa6!\x8c" "\x42\xc2opt\"O\x12\xae\x02j\xfc\xd6\x98\xe9\x80\x36P\xa9q\xc3:\xddL\x1b_\xc6M&\x80\xadu\x15\"\x43)\xe1\xc5,\xe2" "\xec\x33\xdbkL\x34\x94\x97i\x98\x8d\xc6(\xfe\xc7S\xf9\xf3\xc8_\xef \x1a<\xbb\xa6\x1byY<\x66\xd7\xd2\xde\x1e\xb5\x95\x93u\xd9" "\x94=I\xe1-\xd9s\xca\xcdy\x36\x11-\x0b\x94lZr\xf0\x80\xeduw\xbe\x91\x0c\x1f\xc2\xc2\xb9k\xe9\xe3Ql>\xd8r\x07{" "K\xcf\xe7\xec\?N\xd9\x7f\x9c\"\x30\xb6\x30\x1b~\xf9`\x63\xca\xce\xd5\x14\x0bj\xf4\x39\n\xe4;\xc8\xac\xcd\xde\x9a.\xb5\x87\xe7\x89\x88" "\x1fxw\xec(L\xa3\xd9\x44\x87q\x8b\?\xadU\xc8\xb4%\xbe\xeb\xa9\xcav]\xf9oI\x84\x9f\x99\xd1\xf3\x08\xe6\xe8\x84\x32J\xc9\xad" "\xa3\xfa\x13\x35\x64\xaa\xb8_\xa6){\x8a\xc5\x87\xc2/\xa4\x36[N%g\x0c\x44|\x03\x97\x05\xa7Z!r\x95L\xeb^\xb9(\tJ" "\xbb\x99j\xc9\xe8\x88\x9d\xd7)\"\xa1.\xa6\tZ\x35\xe5\xaf\x8c\x33V\x13\xd7\x34\xa0\xde\xc3\x38\xd3\x9e\x19)]\xb4\x12\xf2\x1c\xcd]S" "\x9a\xbb\xa6\xb4oN\xb3_\x31\xc3\xc3\xa9Lh\xdb\x1d\t\x61\xbd\x9ar\x1c>\x45\xc0&\xe5\xd2)\x45\xd0\xab.\xd5\xd0 \xa9\xa8\xe5\xea" ")\xfb:+w\x13\x33\xd3\x95j\x9a\xad\xe7\xd9\x8fv\nV\xb2\x46\xe5\xc6\x36m\xaa\x91\xb0+%\xe9\x8b\x66Z\xf5\x39~\xd9sM\xa7" "\x82.\?\xa9\xf9/\n\xbb\xe9\xb4=\xfb\xe7\xf7g\xff\xfc\xfel\xe7\xf7\xe9\xde\xc6\xb9\xf3\x1d\xb6\x95\xd3\xb4\x88\xb7\x41\xa3\xc0\xd4_\x35\xf6" "k\x11\x36Q\xf7\x61\x32\xd1\xe8\xa9\xe2\x15S\xda\xe3\xa9zH\x14o\x37\xd4{t\x33\x0bK\x83\x1d-=@M\x95\xaey\x39\x18\x41\x94" "\xea\xa6\xbd\xd9\xcf\x34\x98\xe2~\x10\xc3\xd1\xa8M\xc5\xe0Y\xa3\x1e.\x1f\xd8\x8b\xb0}\x46Z/\xbf\x8bS\xd7\xb0Z\xc2\xc4\xb8\xd3\x8c\xd1" "\xf2\x9a\xa6]\xcf\xeck\xd8\x94I\xc5K\x32 \xf9\x03X\xf6~\xe0\x8c!\xc4P\xec\x87\x8d\xa6W\x04\?\xb4\xbc\xfd\xb0\x00\xfe\x84\x15\xc6" "\r\x17\xd1\x96\xe8\x19i\xcc\xe6rK%n\x92\x63\xd2\x1fx\xdc(\xf9\x93\xda\x1d\x88>\xd3O\x38Z\xf8\xbdK-\x0c\x62\\\xfe\x03\xd7" "\x03%n(*\?\x82'\x45\xf0\xf4\x1c\xbc\xc2\x03K\xcdOv\x65,\x8di_\xd1Z\xfc\xb6\x45\xccZ\xd0!O\xf8P\x08Kw\xb4" "\x95\xfd\x44\x9f\x0f\xd9\x17\xb7\x96\x8d~\xe0\x43\xa0\x9c\x80\xb6LX\xf8^&\xf1\xa4q\xc0\xcf-&\x95\xf2\x06\\\x9f\x39\x35\x9d\xcc\xe3O" "\x35\xa4\x32\x1b\x80\x1f\x84Y\x15\xa2\x93\xaeT\x43\x00:\xdd\xaaY\xbc\xfck\xd7\x44\xc4\xcai\xd1\xf8\x9e\x93\xfc\x12<\?HN\x91\x82\xd9" "\xcf\xa5\xcf.\xf9\xe6\xe0\xca\x35\x7fK\xda\?\x7f)\x63\xdd\x85i\xd2x\xb0\xb9\xf8\x81\xef\x81\xb0\xb7\x0f\xf6\xf9\x1b\x18'~\x12\xf3v\x17" "N\x07\xe0\xfa\x85\xfc\x00\x31L\xfcI\xf3\xc8\xde\xe9\r\xb2;\xf6\xaa\x34\xfe\xb5\x97\xaa\xc9\x38\x9c\xbd\xb3\x9f\xf4u\x93\xaek\xe9\xab\xa5\xe8" "\x9c\x9d:\xba$)\xab \x1a\xbdy\x88\xdaY)y\x88\xd3U\xf3\xb0\xbc\x05\xafZ &\xf6\xe6X)\x65\x64\xe2\xcf\x39\x13\x38g\xde" "\x98\xc7\xfb\x9b\xdf\x45\r\xe1\x02\x45\xbb\xc4\x65\x62\x18\xe2\x95\xec\xe5\xcd\x11wLh\xb1\x1f\x84\x16\x0f\xd1\xc8\xc6I\xc5\xa8\xb4\x66\xab\x31g" "\xa2\x04\xbf\x8b\x82\x06\x89\xb0\x98q\xa2\x05v\x9a\x00NJ\x42\xc9\x1f\x1d\xcb\xe4\x01m\xe4\x41j\x61\x62\x8c\x7f\?\\\"\xda\xe7\xc2+\xeb" "\x65X\xfb\x00-\x14\x82\x10\xe3\x30\xe1\xc4\x89m\x98\x45\xdc~\x93k\xdd\x31\x0fu\xe2\x12\x91\x8c\x8d,\xef&\xc2`\xad\xa2\xf4\xee!\xc2" "\xf6\xb2\x64\xb7`\t\xe7\xe3\xc5\x12\x41\xdb\x8c\xd1Q\x87\xa2\x7f\xe4\xc3!\x15\x39\x91\xb4\xcc\x88v}\xc9\x41\xda\x92\x43;%'\xec\x96\x9c" "\x36\\\xc1=h\xb1\x62\x12+\xc3\xe6\xc0\xc5lQ\x96i,\xbd+\xc4\x43\x15\x9aO\xab\xb0z\x96\xad\xaa\xd9\xd1\xd8u\xf9\xe7\x00G\x81" "+x\xa0+\x37\xec\xc1\xad\x10\x08_h\xcb\xdf\x84\x98\x32\x15\xf6\xa4)\x65\xf1[\x85\x16QHy\x06Z$\x12!z\x8e+\xebM\xf1" "\xb6\x30\x8d\xbf\xe2xx\x85\x05\t\x42\xf3&\x14\xa2\x37\xb6\xd2m\x61\x8b{\xd9\xa7\xe6j$\xbc\?#-\x1f\xaf\x62\x0c\xb3Vq\x0f\x0f" "\x1f\xbf\xdc:=\xc1\x44\xf4k\x8b\xc8n\x08\xc4<\xc4w{\xd1\xdeS]%%\x9c\x0b\x0b\x9c\x85\x37VM\xac\xd2&\x1e\x12\xf1\xa8\x84" "h\xf6\xd6,\xa4\xeb\xf0p\tZ\xac&\xe1q\x17<_\x83\xcd[gXm$\x9b\t\xb5\x05\x88\x84^\x87\xaf\x45\xd0\x96{\nm\xb3" "Z\xa1m\xe5#\x34\x9f:\xe1\x82g\xe5]\x84\x9b!\xb8\xb5\xfe\xd1\x1a\xde\xac\xca\x17\xf0\x10\xbf\x8f\x8ep^Z\x0c\x95\xe1\xea\x80\x13~" "\xeb\xe8\xb6\x01\"\xc5\x94\xe1\xe8\x18\x81\x0f\x44\x83\x63\xcb\x1a{\x46/\xd6\xf1\xfe\xb7\x93\x85n\x1d\xdb&W\x42\xd4\xa9kx\x93\t\x37\xb8" "\x1c\xb3\xda:\xf9\xb1\xfa\x64\x9d\x1e\x1c\x82\x98\xd4\\#\xee\x91\x31\xda\xaf\x45\x87\xfd\x7f\x35\xbe\xb3\x35\xbc\x45\x85M<\x15G\xf2k\xda\x45" "\xd7\xe9\x00\xa9\x96.\xaf\x9d,\xe2*\xb2\xdc\x9a\xb8<\x8b_\xd6\xae\xb1\x88\xaaHK\xc9\xd6\xb6\x32]\x66k+p\xe0\xf9*\x19\r\xf4" "\xfft\x9e-\x37\xe4'\xafj\xddZ\xdd\xfe\x19\x1d\xf5\x30|\xbc ~\xcft\x87\xc1\x7f~\x15\xf7\xcft\x11\x66iO\xea\x98\x64\xff\x04" "\xbb\x14\xed\\/\xa9\x8c\xfe\xe3\xc0\xdf\xcd\xa5\x1d\x9f$\xdd\x62\x03h\x65\x00\xfa\r,t\xba\x12\xdei\xa6\xc1\xf5\xcf\xc4\xb8\x39\x97\x8e\t" "[<\x39\xd0v\x66[\x93\x89\x66\x8b\xd5\x8d\xcc\xeb*\x46\xad\x32\xc7\xd2[\x04\r\x37\xea\x83\xd9\xa6_\xaa\xdd\x83\xa8\xcc\xb6\xd8\xabP\x88" "\x89\xcc-'\x30\xb7Xr%<\x45\x82p\xf4\xa7\x44\xcc\x03\x13u\x95^\x65\x9ci\xed\x07\x44Y\x36\x8d\x35\xec\x36\x0b\xa0\x61\"\x16\xc6" "\x43\xb4\x1d\x1fX+mu\xd3\xe0U\x83\xd6\x64\xc6\xeeS\x06N\xcdk{W\xcck~\x00Y\xf1O\xcb>\xeet\x38\x8eV\x91}!" "\x8a\x9e\x82\x1a\xe3ry\x1c\x35\x98\x00\xb6jO\xd9wj\x00Y\xbf\x1fI\xc1\xdc-\x1d\xdcL\xcb\x06'\xaa\x65\x1b\xcb\x98\x96\x8c\xb8\xab" "\x98i\xd2\xafg\x8d\xbb\x85k\xae\xb2\xe8\xfc\x9b\xb2V\x8d\x05n\x8b\xf5\xcb\xc2\xd1\xf9\xef\xf2\x86\xd5\xbbj\x9c\x0e\xdb\x62\xa1\x90\x91&\x42" "\x13\xfd\x91gw\x16Hj\xa9y\xf4/S\xcb\xe1l\x37*\xd3\xb0\xb5\xc5N.\xd6=\xe9\xfe\xca\x08\xa7\xb9\xb6!\xe6\xb4\xb6\xb4\x0e\x08" "\x07\x36\xf6\xe7=\xda\"$\xa3\x9c)K\xdc\x95\x34\x13\x95\x1dM=\x39\xff\x34y\xd0L\x33O\xe1\xc5\x36:\x1f\x38%s\x62\xcb\t\xd3" "\x38\xd7n\"_\x80\x8a\xe7'\xd2o\xd2\xa0\xac\xad\x8a:\x65\xc3\xa6j\x9fH\x92\xc2\xb7\xc5\x34T\xd9&\xfa\x0eU\xa6\xed\\\x01{\xa6" "\x98(\x1d\x65\xce\xb8\xbb\xb6\x9e\xe8LJ\xffX\x86\xdd\x9c@\xfc\xcfO<#\xe0\x30{\x12\x7f\xda\xee\xc7/\xdbL\x64\x9e\x84\xe8\x89!" "\x9a\x8c\xc5\xb1\xb2\x13\xda\xf0\x13\xe1\xb6]\xf3Z&\xaa\xdf\x81\x98l\xda\x46\x1d\x9eo\x8c\xbc\x16M\xf0\x12\xd9\xb5\xd8\x46_M\xa7\xbe)" "\xcc{\x9a\xe6\xe1\xd5M\xf3Z\x08\xbb\xf1\tY_\xb0U\xd9r \xa1\xdcI\x90\xb8Y\"\x87\x34zl\xe3{T q\xbf\x92\\\x1d" "\x45\x97\?\xd4\xf0\x9c\x34`(\x93\xe2(^\xe1\xb5\xea\xaa\x90\x33]\xb3\xc2\x8a\xc6\x83\xa0\xda'\x1a\x14\x7f\x81\xaa-y\xbc\x92\x41o\xfa" "\xbe\xa4\xf6\xec\xd4\x89\xa0;\xdc\x30\xad\xef\xca\xf0\xb8\xe9\x65L\x34\xc4i\x34\x91Q\xf5\xfc\x33\x18\x8a\x95\x34\x14S\xa4}p\xcb\xf9\x86-" "\\\x8b\x85\xb0\x82li\xfd\xd8\xd2\xe3\xd5\x1c\xb1\xad\xc9q\xcd\x13\x95&p\xa5_\x34\xbd\xf9v\x66\x87\xd0|n\xd3\x0e\?\xeaj\xda\x05" "GX\xbf\xaf\\\x1aQ\x18\x94/\xce\xe8\xb1\x97\xb4\xf1m\xf4\xb4\x8c\xd9\x0f\xac\x1e\x11\xda\xca\x00%\xbe\x8a\x85\xc7\x42\xcb*\x42\x8b\x66\x1f" "\x1c\xc5/+',\x13&\xe2\xb9L\xf4\x1f\x42\x44\xbf\x18\x9a\x65>\x88\xee\xaeg\x1a*\x9a\xe0\x08&\xaa\xe0\x08\xa3\xb4\x80\xeb'\x94g" "\x46\x34K\xca\x39h\xfdg#Z;\x11\xcd\x86,\x34\x1b\xb2\x31\xba\x1a\xc3\xe3O\xb4\x0e\?\x95\n\xb8U\xc4\x9c\x95hV\xf1*\xa7\xe0" "\x88\xdf\x1e\xdf\x64>\n\xd0*;\xda\xed\?\x9f\xdd\xfe\xfbY&Z\x17P\xb8\xc0\x1d\xc7\x05\x33\x9a\xd8\xa8pGK\?\xf7\xd3\xdb\x8d\xd4" "\\\x30\x37\xc8'\x97x\xb2\xb8\xdbv\xfa\x13&SK\xf4\x63\x64\x1b\x63\xd6\\\x04\xf9_\xab@\x82|Tzv\xc2g\x37\xc8\xc7]{" "\xd1\xf9\xc4\xb6\xc3\x11J\xae/.t\x64\x61V\x9b\xa0\x04\x87j\xa3\xb6\x41\x41\xa6\x45W\xeb\x1d-[\xbf\xa0Z\xd9\xb9\xfb\x0b\x9b\x31\x14" "\xda>>\x41\tK\xe2\x85\x66\xbf\x17\xda\xda.\xa1\x95 #\xe6\xad!vZ.\xa6\xf9\x33\x38\xd0\x8a\x86\\Z\x42@v!\x7f\x80\x19" "k\x61g\x02Z\x44|\xe1'>\x8f\?\xee\xc9\x0f]\xf5\xd6\xc7}\xc7\xebW#\xf6\x91\x11\xde\xe0\xd7\x30\x33\x08\x9f\xbb`@\xdd\xdc\xdb" "\x83\x12\x66\xba\x82*\xbaq\x42<)\x17\xdf\x19\xf9\x90\xd5\x8c\x35~\xc5|\xc6\x83*\xec&\x42\x33i\x0b-\xba\x81\xd0\x06S\x46\x38\xb8" "\x8bh\xc3[!u\x34\x00\x41\x15+\"\x02\xae\x64\x12\x8ep\xf5\x64\x66o\xa3\n\x63_P\x43\x13)\xb4Y,#\xb3\x89\x8aq\xab\x93" "\xb6\x1fyN=\xb0\xab!\xdb\xd6\x30K\x1f\xd4\xb0\x8dLP\x63\x9e\xab\x65UUp\x81P\x15\xc6\xcc\xa7\xc2\x34x\xd0\xaax\xb1\xfb\x81" "\xc5P\x36\x62\x36\x30\xb8\xc0\x1az#\xefT\xc5,J\xb2iI\x61\x01\x8b\xa9h\xb6\xcd\x93\x10\xb9\xea\x02\x61;\x8c\xe1\xc3\xa5\xc6\xb1\xf8" "\xbc\x41\xfb$\xc7\xcc\xbc\x62\xc4,\x15\x44\xe4^\x15\xe3\xd3\x31,\xb3\xa6\x61VM\x44\x8bg(\x34g\x17#V;\x42\x1c\xaft\x14`" "\xb1\xd8p\xc0\xfa*.\xb2R\xa4\x16\xeel\x05\xea\xc7\xb2P\xe1v \x8bjl\x9a\x94H\r\xcc\xebq\xb3\x34\x90\x92\?\x9f\xef\xb0(" "\"\x42\x33\xf1W\xf0\xb0\x11\xb6^\xc2ZM\xcbs\xe5\xf0w\xdd\x8c\xa6w\x38\xfc\xf2\x80\x8d\xa8\x45\xb4\x18\x11\xc1\x05\x82\x05\x08\xab{X" "I(\x62@/\x45\x11WVI^ \x02\x84\xd0\x96\x04\t\xd7\xf8*\xfcl\x8c\xbak\x94\xb9\xb3\x8bv\xc9O\x1f\xbe\xf9\xde.\x31\xb8" "Qn\xc0\xa0\xe0\xc4\xc2=\x15O\xc9gp\xb9o\xf3\xa3\x13j\xfc\xd4\x86\x86\xc6,\xd2\x85i;\xa2\xb4\xda\x61\xef \xd3\x9e\xea\x7f\x1a" "/\x65\x9d\xbc\xe0\x12{\r\t\xcd\x63T\x99#+\xe4\x19\x39#\xe7\xa0y((\x1b\xe4\xd8\tO=\x15\x7f\xc0R\xd3\x89\xa1\x8a\x8aw" "\xe4=X\xee\x80\xb6\x64O\xf9\x05\x9en\xf5=Zt|\xd1\xaa\xbc\x17\xdb\xbcH\xc9kW\xaf\x9d\xd9\xb5\xaa\xd7\xeaL\x62\x1eQ\xa6\x65" "\xd3T\xd0P\x1aULo\xab\x91\xdfU\xf5\xc3\x19\xe6\xba\x08\xd6\x08\xad\xfb\x95\x1e\"\xf1\xa5\x02\x63S}\t{\xb9\xb2\x07\x9a\x9f\xa9\xd0" "\xbc$\x84\x9dS'\xab\x87\xcb\xf0\x91\xcf\xfd\x34v\xc2H\x13ho\xe8\xd7\x43\x07\xbb\x86\x91\x95kp\xb9\x30M\x9e\x1c\xce\x9d\xa6\x45\xc5" "-\xac\x9b\xd0N\x0b;\x9f\xa5\x0f\xc1\xce\x39\x45\x63\xcd\xea\x9a_\x61\xb4p\xeal\xc5\xeb\xcc\x35\xb5\x03\x7f\x33k\x8c\xf9\xca\xc7\xa5\xa8\xce" "\x94\x1a\xf3\x42\x93\x92\x33\x1a\xd5m\xd3\x61\xbe\xd0\t\x1fx\x8e\xec\x87\x89\x03\xe1\x66\xdf\x89n\xaf\x89\x98\x04T\x11/\x16>\xf7\xc6\x30\x1f" "\xc0\x32\x0em\x93\xf3g\x14-:}\xc3\x04\x83iq\xae\x8f\x65T\xd0J\?\x30\xd8\x89v\xf8\x1a\xaf\x91\xdb\xd9\xec\\\xc2\xe1N\xc9S" "\x17\xf1j\x31\xaf\xa1\xec:\xb1\xf8T\xc4\x32\xde.\xa6\x38\x8c\x98R\x17\xf1\xb4\xeb\xc4\x02r\xd7$\x11\x31|\x10\xadZ#\xa7\xe0\x19\xaf" "t\x39\"\x7f\x9c;\x85\x1b[\xa9\n\xaf\xba\xc9\x94\xb7\xca\xf7(\x94\x8e\xbf\xa7\x37&\xa0\x84\x37\x19=\xbb\x62\xf2\xc4(\xaf\xedO\x0b\xd4" "\xd9\x89%(\xd2\x88\xbc\x65\xac\x64\x15\xad}\x98\xee\xdd\x66\x9f\xdd/\x10mG\xc4\xaf\x17\xec\x1a#\xe2v\x0f=\xf7\xe0\x12\xf6p!\xef" "\x05\xf6]\xa3Wl\xdaY\x9a\x1c\x64\xa2{n\x43\xdb\x1ej\x38\x90\x41\xcf\x0f\xc0\xac\x94i\xf5\xf1\xeeg\xe8'\xa8(\xc5\x02S\x44\xd0" "\xcc\"\x95i/\x65\xf8V\xeeh\xbf\xcb\x32\xdc\x66\xecX\xb2\x1e\x61\x8b\xe5L\x63\x0e\x15M\x37\x36\xdf\x9c\x65\xda\xe3\x35\xc5\t\xf9\xed%" "\x03{*\t_\x91\xd4\x1a\xa0\x81\x35X<\xb8t\xee\xe4\x02\xd8%\x95_N\xcf\xfb\x92\x45\xfd\xad'{\x87\xe0\xfe\xb5\x13\x36\x13\x11\x0f" "\x91\xdf\xb1(]\x88\xae\xda\x65\xd2\?J\x16\x85\xb8\x83\x9a\xc2\xab\x39\x35!u\x02\xec\x84\xae\xda\x98\x9c\x93\xbc\xdc\xa8H\x96\xc8*Yw" "\x66\x06|\xd3\xb2\x9b\x19u\x9d\xb0\xd5\xa9\xe8\x0c\xc8\x8d\?`\x32\xed\x38=/\x0b\xbdx%ST=\xc9\xf7,\xbb\x9f\x35*\x1b\xaf\xe3" "\x84;\x39\x1e\x1a\xbc\xbdT\x43R\xa5{{\xe4\x81W\x39\xe9\x1eN\x97\x1e\xec\x39\xb5R\x99\x0f\x32\xadX\x81\xc7\x84iY\x84\x06\xd1r" "\x1fNX\x16\x44\xcc\xe7\xbd\\!\xf2\xb4\xb0\x81\xec\x9e\xde\xe4vn\x0fQ-\x84\xb6u\\\xc0\x65\x9a\xca\xb2\x93\xf5\x33W\xee\tm\xbd" "\x87\x10\x1d\xd7:/TGl-!\x9a\xdezh\xa6n!\x06\x10\xf5\xd0v\x64\x14>\xcf\xd9\x19\x62H)\xe5%h\xebL\x85(\x84" "u\x44P\x10\xce\xf9=\x33\xa3\x04\xf5\xa8\x84\xef\xb1[^\x8fZm\xd8,T\xfc\x00\x31\xe4\xa8s\xc8Q\x8f\xee\xaf\xb4\x66\x19\\\xb2\x41" "\xd3\x03\x92\x08l\xb4\x44\x9b\x91+\xc4\xc0\xfcW\xe3\xb0\xba\x1e=\xe0\xd9\xa2\xc7}p\xf0\x08\x8e.\xb3\xdf\xa0\x1bZ\x8f&\xfc\nzv" "\xf5h\x85\x9f\xc6\xfb\xb8>l\xab\xca\x02y\x42.\xd8\xfd\xae\xc7\xe5\tX\xe7G\xe6t*\xbc\xc7\xa9\x61\x8a\x12\xbe\xe3\xd2\xf1\xe7\x1bh" "\xee\x9cJ~\xbe\xc4\xa5\xb1\xcc\xca=\xce\x85\xb6n\x46h\xae\xae\xc2+\xfc\x1e\xb3O\x42[\x63 \xec\xe2M\xc2\xba\"\x9c\xe2\x35p\xa0" "U\x87uL\x88\xbe\x66=\xbd\xde\x03o\xf0\xdaX\x9f]!\xf4\xb4Q\xb7\x8c(Z\x7f\xe7\n\x11\x36\x82\xab\xb8\x18`\x03\r\x11\xd1\x31" "j`\?%\xe5\x12\xb4\x98\x1f\x46\xd6\x1d\r\x8e\x14\x1a\x1c\xb9\x35hQi\x84\xf7\x07\xa0\xd9\x84\x03\xeeL \x84\xc1\xa4\x61\x81\xf6\xedv" "\x1b\x88l\x1b\x34\x38nj\xf0\x31\x1a\x88\xb8-\xbc\x38$\x03\x10\x8f\xa3\xcc\xac\xea\xa2\xd9\xf2\xc9\xe0\x06S\xce\xca%\x08K\xc0\r\xbb\x07" "\x37\x1cj\xde\xf0\x06o\xd8{\xbc\t\x87y\x10U\xd2\r\x8d\t\x37\xbc\x9b\xdb\xb0R\x00Q\x66\x94\x1a\xdf\x14\xad\xdfm\x38\xca\x81s{" "\xdc\xdb\xa8\x80_\x61\xb2\x35\x90\x0e\xcf\x17x\xa3+\t\x10\x96I\xb4/|;\xd9X\x39j\xb1\xf4\xb7\xf8\x0c\xba!;{\xc9-L\x61" "\n\xd1kl\x31][\xe1x\x01\x62\xc4\xdc\xc2^\x38\xc2\xad\xf5\x91Z\xd1\xa7%\x43K\x86\xf4\xe0\xd2j\xf5\x16k\xed\x16\xe6\xad\x82V" "z`\xc7\xefX\x35\x08\x17`\xe9\x1e\x61(\x45\xec\xf0\x90\x99\xf7\x03\x8d \x65\xbb=\x06\xd0\x30\xaeS&\x0fv\xed\xbb\xa8}\x00\"[" ")\xd3\xb7\x06\x0c\x9e\xa2\xfd\xd8\x9d\xde\x61\x45\xb7Q\xa7\x01P!\xdc\xc5\xad\x62|\xb3\x66\x97\xde\xb4\xdb\x0b\xf8\xf0\x04\x1d\r\xa6\xbfw\x12" "V\x17\xd0P\?vh^\xe8p\xc0\xaa\x94^\x12|\x1cL\x83\x83\x9a\x88\x66\xd9\x16>v\xc0\xf7\x07p\xd4\x0e\xb7\xd7\xf0:\xc9\xb4\xe7" "\x9ak\xd9\x07\xab\x43'oV\x44{\x39\x1d\xac\xf9\x15\xdaZ_\x61\xa3\xef\x94\xaf\xc2\xb3K\xb5\x1f\xd0\xe6~\x85\xb6\x80W\x88\xcaL\xc9" "\xa6\xb3\xc3\xca\xac\x03\x8b\xb4\xf0\x13\xcf\x1c\xfd|\x82s\xcb\xd4\x9d\xf8p\x10\x16^\xd9\xa3\xea\x30\x45\x95\x96NH\x17\xbfY\xe1\xeew\xa5" "{\x64+\x65\x45\xb4\xed\xcd\x85]~\xf4\x8e\xa7@\x98i\x63<\xba\x80\xb8\x44Z\xc0\x17\xc6\xa8\xe3\x02\x9e\x33\x39\xc4\xf5Y\xcfu\x92\x86" "\xf4\xac\x87\x98\x64\x11\rm\x64\x07\x31&\x83\x0e\x62\x43\t\xf9\xde\xd2\x8b\x96\x33><\xc8\x8e\xde<;\xd5\x16\x8d\xee@\x07\xf1\x17\x85O" "\x1dyY!\xcf\x9c.\xed\x0c\xf7\xf0\x8e\tz\xf0\xc9\x35\x32\xb7\xaa\xc8\x34\xeeI\xc9\x92\xb2\xac\xeb{\x90\xe5{\x1c:\xf4\x10\xa0Py" "\x05\xda\xf2u\xe1\x98\xe7\xd8\xcc\xd2|\x95\xc3\xc6\x1e{\xe8=\xb6\x89=\x96|\xa5\xf6\xec\xcc\x65\x35\xd3l\x32K\x34\xd8\xaczq\xd1*" "\xf6^\xd2j\xc1I\xd3\x97\x45\x07\x0c\xb5\x65Lo\x37\xf0\"\x0ez\xb4\xbd(Y\x1aU\x84\x83\xbe\xae\x16,\x39i\xa7\x86\xb8\xa1\x38\x00" "Q^\xfa\xf0\x44\x11\xa2\x1f\xd1\x87\xdb\xb1\x10\x0f\xd6\xd7\xad\x90/\x06\x14g *\xf9>\xbb\x16}\xf5\xfa\xc5\x08N\xc5\xd4\xf6\xdd\x16\xd1" "\x42\x33\tQ\x63\xf6\xd9\xab\xe8\x63\xbaR\x89\xb3\xaa\xbf\xefk\xb0\xa3%\x37\xb7\x99\x86\xb1w\x1f\x0b\r\x8d\xc9z\n\xf1\x39\xe7\x94+\xf9" "\x45\xe0\xb9\x1a\xf4\xa5o\xa1\x0bh\x46x\x16\xbe\xeb~R\x98\x80\xb6\xb4Y\x38.\x38\xd9N\xf4i\xb8\xe9\xa7\xe7\x1d\xf0\xcd^\x04#\x82" "\t\x97\x96\x11\x07\x9c\x1cP\xb2\x89\x18\xb0I\x19\x30\xc3\x0c\xe0\x01\x1d\x0c\xe0t\x10\x0c\x92\xe1\x80\xb4R\x33\xa0\x91n@\x8b\xbe\x32\xdb\xc6" "\x44\x35\xbb\xd0\x37\xcf\xfa\x1d\x9d\xbd\xd2\xae\xa6\xa2<\x41\xb2\xed\x61)R\xf0\x03\x1f\x43!\xea\xc2\x9f\x30\x7f\xef\xf4\x8f\x10\x99IX+\"" "\x38\xa8\x88H\xb3\x1f\xcc\xef\x05\?L\xad\x1f\x8e\xfa\x7f\xd8I\x9d\xfd.\x0e\xd3\xde\x0b\xc5\x9a\x13\x0b\xe8U\xdc\x84\xc3\x86\x06\xb3\xb4\x00\xc3" "v n\x36\x7f\xd1\x12\xce~\xd7_\xa0\xed\x37\x19\xcc\x42[\x1f!\x44I\x9c\x85\x17\x45\x8d\x83=\x38\x81\x66k'\x95\xb7\xc9i\x31*" "\x9ej\xb4\xdf\xef+v\xee\x66\x61\xb7@\x33#\xc5ljV\x0e\xd8\xcc\xb0\xf2\x16\x84\xadM\xf9g\xf2W-iT\x33m\xf1\x45n\x11" "\xacY\xc4\xe0\xc8\xa9\x13\x1f\x98\x9a\x98\xc1m]\x88Vn\xa6!\x8d\x97\xd3h\xff\x15\xcbx\xe5\x80\xc7v\x17\xb1\xdc\n\x9b\xf7\x10\xcdx" "\x19\x8e:;Zr\x82\xa4\xcc\xbcq\x45\xc4\x30m\x16\x31\x05\xa3\x9f\\\\>\xcaN\xed\x1a\r\xcd\xb3\xf8\xf8\xc6\x19\x0e\x1a\x34\xb9\xcd\xfc" "mi\xb3\x89\xf1\xe3LG\xbb\xbc\xe1\xe4\xc1\xf2\x98\xd4Xy\x44\xe7\x16\x11\x15\xed\x0c~\?\x81:\xeb\xfd\xaeW\xf2\xe7Z|{\x1a[" "h\x8f\x80\x31\xc4\x8c\xf2\x1f\xfet\xa6\xe9\xfc\x9f\x45\xc9\xd8\xd1\x30\xc7(\x07\xd0\x07Q\xfe\xaeO\xe1\xb2M\xad\xc5VZ\x35\xb8\xc0\x41\xbc" "\x1cI\x83\x94\xad\xd0\xb2\x63\xd1\xe5V:\x31(\x18|\xd7z\x98\x45z\x8e\r\x8a\x8dQ{\xcf\xef\xd3O\x8f\xd0\x66\x42\xb9\xe9\xc7\x13\xf9" "\x33\r\xa1>\xec\x90S\xab\x1d\x0c\x9a\xe7\xd2%J\xb6M\xb9+N\x19l\xb0\x82~Y\xc4\xc8\xcb\x88\xc6T\x44[\x8d\xb1,\x62W&" "\xe1\xb0\x65\xc4\x1c\x9aQ\xf7\xf8\xb2\r\x19\xa0\xf9\x9e:\xa2\x99\xa7\x92\xd0\x16\t\nm\xfe@\xf8UL\x86\xafh\xf2\x45\x9b\xee;u\xd9" "\xa6\xe5Gh\xdd\"\xe2\xc0\x9b\xa6\x16]\x1b\xb6,\x8b\xd2j\xc6\x1b\xce\x17\x89\xd6$y\x0f\xc9\xde\x12\xdc\xb6\xa4\x66\x81;\xf4\xb2\x98>" "\xac\xd5\xb2\x93\xef\x41{\xd4\xdav\xc9\x19\xab\x65\t\xf9sY\n\xdb%gV\xa4\x96\x9cm\x12\xda\xc4\xa3\xf2\x06\xbfz\xc3q\xde\xf3\x45" "h\xf3\x0c\xcb\x8bh\x9e\x33\xa2\x12^^\x45\x9f\xef\xd1\xa7\xfd\xa4\x8b\xd8\x06\xcb\x1f\x18\x84\x84V)+-\x99\xe9\xb6l\x84Yi\xf9\x83" "\xedK\x94\xf8I\xd8~\x83I]\xc4\x61\xd1\xf9w\xbb\xaa\x45\xf5\xa9\x0c\x17\xb2\r\x42\xecX\xfc\xb9\x41\x00n\xd5\xea\xa0Mm\n'u" "gvU[\xd9,\xb4\n\xc4\x88\xb5\x91&\x66\x97\xb2v\xde\x18\x37K\xd9\xe9,\xda\xd0\xf2\xc7\xcf\x05+\xa2\xb0\x8c\x87\x87\x9dPX]" "\x83\xb5}\xd0\xfa\x8d\x46\xb8j\x98\x18\x9d\x1d\xc1GT\x34kg\x8c\x99\xb9_\xb4)O\xb7\xc4\xd3\xc5\x87\xb8,zk\xc2\xe5\x80\xfc\x06" "W\xb8\r\x98\x95\x8cQ\xb9\xe9\x37\x93\xe4\xf1\xc0\x88k&\xb4\xdd\x98\x8d\xd8\xf3yI\xf7\x62\xe1\x66\xe1\xdcI~\xd5\xbc\xd2\x86\x36\xc3}" "%[\xdc=Z\x45#\x06\xd0\">\x16~\xe7\x9b\x64\xfe\x9di\xab\xfdL{\xb7\xdb\x9d\xfd\x06\x45]\xb4V\xb2\x9b\x9e\x85\xe3\"\x88\xad" "xm\xceV\x34\xf3\xc6Y\xce\"['\xb7\x9c\x61\x10\xb4\x0c~\xe7^\xf8\x02\x66\xf9\x00\xcb$\x95\x03\x10\x39\x32\xc0\xdc\xcb\x92\x93T\x46" "i\x0b\xe0|k\x1a\xd6\x81\xa8\x38&\xbf\x41\x8b\x19'\xb4\x05_K\xc6\x97\x17\x96:N)\x81~Yj\x01n\x06\xf3\xf4\x46&\x63\x10" "\x9e\xf2\x32\xb5\x93\xdf\xf9\x1e\xc6\t\xd0\xa4n\xb5}y\x45\xb3\xca\xcf\x98\xad\x64\x33-\xbaZ\xa4\xe7\x05h\x1d\x9e\xef\xe1\x1aS\x8c\"v" "\xf9\xb3>\xaf\xde\xe7\xc9\xad\x81U\x16\xc1IYW\xcf\x96^YJ\x03\x98\x8b\x84\x66.\x12.\x98*\xc1\x0c\xdc\x80X\xbb\x64\xf4\xc7\x11" "\x31*\xd5\xb1\xc8I\x35\xff\xe2\x16\xb4Iy\xe1%\xf5\xab\xbc\x33\x9c#\x39\xe1\xc3\xb3\x0c`\xb8\x16\xb6kN\x9dU\x64\xb2\"P\x9cQ" "j]u\x13\xac\x1d\xa3\x96\x97\x63\xe6\x82\xab|\x00-\x0c\x8d\x12O\x15\xbd\xf0\x38*\xe6\x00\xcb\xa3\x85\x66XZ\x06\xf1\xc5\x88\xb4\xe5$" "\x13$\x1e\x96/\x0b[H<\xac=\x30JO(\xcc\xbd\xb8&\xf7\x13\xae\xa4\x37\x7f%\x39,\x0b\xe0\x63\x9f\xa0\xa5S\xf1\x06\x1c\x9c\x39" "\xd1)\xa5x\xeb\"\x0b\x97\x89\x33\x06\x41\x86\x36/\xb8\x08\xd3\x39\xc4v\r\x03V\xd3\xd8\xb2\x99\xb8yv\x31\xbb\x07\x11=^\x35\x34\xf3" "@t\r\xf1|!\xb6\x1f\xe1\xa9$\x9a\x8d\x12\xa5\xe1{\xc0;\xc2\x94\xbc\x36\x84\x43'\xd6\xfe\x9a\xe8\x97\x62\x33\xa9\xf4\x42(\xa2:\x34" "\xed\x05\x99v\x9a}\x97\xb5)\x45]\x93]\\`\xcbx;\xb6sV\x98\xcb\x44\xfc\x46.K\xf7\xee\x9d\xfe\xad\xf4 pz\x0e\x45\xb0" "o\xe1\x35\x32\x35:\xed\xc2\x9e\xbd~i\xe6\xdf\x13\xdbOQ\xc4\x66\x13\xab\x30W{Z\xb3|<`\xa2Q\xb5\x92\xd3\xfe\x97\x31\x42V" "\xf1\xd6)\xdd\x39\xac\x8a\x83&U\xa5\x35p\xa6\xe1\xf6T|\x03\xad%Q\x9e`\xdc\xa3\xe2)y&U\x34\x06\xa1\xaa=\x93\xc3\xec\x37" "\xd2\x10\x7f\x9f&\x16\xa0Y\xb5\x06\x39\x03W\x35\xf2\x86\xbcu\xc6\xdd\x42\xdc\xf5o\xdd&\xc3\x17\x14 \xd5\xee\xc8\x11\xba\xc2.\xaa+\x85" "Y\xdf\xe4\x80\xf5Q\x84[\xdcn\xb8w\x8e\x01\x97\x88\xe6\xaf\x64\xd4\x01\x81\xd9\xadL\xcb\x06\x13\xaa\x15\xc8\"\xd9%\xbf\xc0|@n\x9d" "\x9e\x66\x61\x61\x8f\xcfL\xd5\x16o\xab\x15\x38\xd1\x36\x98\xb8{\x17m^\xea\x8e\xe5\xa2s\xea\x84\x91\x45\xc5{\xf0\x9e" "\xbaM\xed\x08\x9f\xde\xb3\x87|\xfa\x01\x9f\x8f\x9c^\x0b\xc1<\xa1l\x65\x65\xef\xb9\xef\x8c>\x17\xd9\xc3\?\xbf\xc6o\r\x17\x93M'{" "\x86\xe7\xd7t\x7f\xfb\xa7\x31\x1bwy\xde~\xd9)\xdd\x0e\x98\x93L\x0b\x87w\xd9\x8b\xed\x97\xd1\x9d\x85\x38\xbaL\xbe\x9b\xae%\xb5\xae\xd7" "\x87\x98\x98\x32\xafhp\xd8\x90Q\x13\x06\x87\xa2\x8d\x98%\xc6\xfb\xce\xac\xa3\t\xcd\x42\x8e\xaaXuz\x45&\x62\x38\x1b\xba\x18\xef\xf3^" "\xd4\xc3(\x0fq\xc2\xec\x34\xe1o',j\xe6u\x65\x8c\xbbWhQMK\xf6\xf6\x63O\x81\xc9$]-\x33\xed\x93\xb7\x37\xeb:w" "*y\xdd}\xf5\x94\x97\xf4\xd7;g\xfe\xb6\x66O\xb8\xa8;w\x7f(\xda\xaa\xea\x62\x32\x62\x32/\xbe\x9cY\x42,\xa6\xce\xac\x1b(Z" "\xc0\x37\x1b\xf0\"\xab=\xa7n\xff\xec\xf5\x84g\xca\x15s\xdc\x86\xdf\xda\xf0\x99\xfc{\xdb\xc3\xdf\xf9<\xabP\xe5\x04\xebG\x17\x61\xa4\x32" "Q\x9a\xa4\x64t\xebZ\xfa\xe8\x1f\xbc;=\x43\x46{{N\?\xa9\x8a\xcf}\x04O\x34-\xae\xe7\x10\nN\x34\x33i\x08s\xb8*\xd6" "\xa5(\xcf\xc9kr\xe6\xf4\x9c(\xe2N\x85\x83\x1e\xa7\xd1k\xe7\xa8x\x41\xf2\x1a\xe5\ny\xe1\x44\xbb\x90iw\x65\x17\xbd\xe1\x10\x31\x1b" "_\x9a\xe6\x15\x64T\x46\x06\x8f\xd8:\x44\xa7\xbc\xd1s\xbc\x15X\x95\x95\x1b\xe7N\x16\xa7\x36\xef\x65\xda_\x1d\xa1\x9a\xef\x12\rmU\x95" "N%,\xf7\xd9\x81\xf5Y\xbcl\xf9\x81\xecn\x45\x0cj\xbf\xcb'Lt\xfa\x81\xff\xd2\x32\xe7\x08;\xa6\x9e\xfa\xb3\xecn\xff\xbd\x14\x34" "\x19- \xd0\xa2\x1c\xab\x93W\x65'\x06N*\xa2\x9a\x8a\x1a|W\xd7\xa7\xce\xdf\xf9\x05\x86M\xd0\xa4\x01{zw-\xac\x35\x31\xe5\xa7" "\xda=\x89\xac\x1e\xdd\x0c\x61\x39u\x31s\xb1\xb4\x03Q\x9d\xe9w\xc3\x17\xde\\\x65\xfe\x94\xa2\xb5\x1a\xe4\x07\xc9\x14m\x1f\x93\xbc\xc8\xdd\x1b" "\xf9\xe3\xf4\xe2\t\xe3\xb5\xb0\x8f\xfa\x1e\x31h\x84\x63^p\xc2\x84\xb2p\xf6\x10\?y\xe8\xf3\xcb\xe9\xedn\x34-;\x93\xca\x33\x45\xa6\xe6" "\x0f\x8b\xc3\x9c\t\xc0\xd6V(\xa9\x0bw\x14\xd5\xf8\xc6\x97\xe8\x83\x45+\xe6\xc1\xd5W\xd8z\xc2\x66\x39\xab=\xcc\x93+\xf1N\x11\xbeI" "\x89k\xc8\x38\x41\xc7o%\x9c#.\xe1\xdc\xf1\xe9\xab\x97P\xec\x62)\xac\xa1\x8a\x88\xa5\x94\xb1/\x80\x15\x10\xab=\x44\x8b\x12^!-" "\x35\xc6S\x9b'\xbc\x45\x81\x44L:\xe5\xb5\x33\x9a\xe4\xbd\xc6\x44\xa8U#&\xe9\x45l\xa3\xe6\xc0l\x96\xb0\xfb\xe2\xc4HH\xc4\x1eo" "\xb6Wuz\x89\x8a\xfbH\xd1\xf8\xad\x42\x36\x9c\xde\x17\x11\x11\xe1\xc2\x45|gZ\xbd\xdf\x90#\xa7\x17\xf0\xf8\x03\x89\x1b\x0f\xf8\xc8\xa3\xbc" "\xf3wU\xf2\xa6\x12\x86\x0e\xe1\x92'Z\xae\xc9m\x96\xfe\xab\x36\xc9;]\xd7\x9c\xb0\x06\xa9\xd8p\x66\xdb-\x98\x96\x19\\\xa0\r\x9f\x30" "\x02S\xed\xd6;\x9f\xf1\x1a\xf9\x37\x61%\x90\x1c\x1e:\x11\xd2\xc2\x44\xc4_W\x11\xb9\x1c>\xe1\xca\x89SN\x04\xc7\x1d\xd5\xd0\xf7\xc1\x1e" "\x19\xc2\xe3\xa6\x33*\x96\xa3\xf6\x18\xb3\xcdr\xa0\xc0\x8bs<\x84H\xe9\x46\xaf\xfe\x45\xf4\x12\xa0\xf1#\xd4O\xfanG\xf3\x46\x46\x34\xc4" "\x8f\x15\xb1\xcc/Tx\xcf,-\xd8\xf8\x41x\x86\xe4J\xce\x91\xe8\xde\x06$\x0f\xa8\xe8\x11\x7fVy\x0cO\x0c\x11\xbb\xbc\x83>/\xc1" "tL\x86\x9f$\xaai\x84\xaaU\xde:u\xdb\xd0\xdc\x87kq\x93;\x03\xa8\xc6\xdfL\xa8O\xbb$\xde\x98\xf7\x8c\xb0\x1f\x8frJ\xa2" "~\x44\xb4\t\xa3\xee\xf2X\xe2\xb7Y\x15g\xbb\xf6\x98(\xe3\xa7\xf4\xb2\xec\x9aW\x65^\xe9\x08\xb3\xefn:N\xcf\xc9\"\xa6{\xb7\xd9" "y\x37|S\xdb\xef\x44\x9c>\x15K\xe4" "\x99\xd3Kwz\x8e*\xdf;\xff\xe9\xe5>y\x44\xe6\xc8'gx\xd5\xce\xee\xa0\x8e$\xf5\x0e\xafP\x86m^T\x44\x8b\xaaWq\xb3" "\xe1\x9aW}*\x06\x8f.\xca{\x44\xa0\x82L\x63\x0f\x11K~\x8d;}\x35\xefV\xa4\x8d\xb9S\x1bT\x36\x05X\xff\x64\xf4\xee\xb5\x88" ";\xd5\x1b\xcc\x0f\xc2\x9bgg\x98\xbb\x8d'\x95L\x1b\xf4\x32\xad\x89j\x35m\x31Q\xda\xc8\xd8\xde\xef\x42\x8c\x14\x61\x8f\xdf\xeb\xa1\xaeU" "\xf3U\x15\xb5}\xca\xbek\xba<\x63\x87q\x9fy\xfe\xe0w\xbe\x1f\x1f\xce\\L\xca\xa3\xdf\xf9M\x9a\x9b\xf3\xc0Mz\x9c\x87\x88\xce\xfa" "\x01\xe6!\x8d\xe1h\x89\x38\x9e\xaa=\x38\x99\xf5\x0e`\xf4T\xf2\x07;\xbb\xa5\xa8\x36\x8c\xc6/\xd9u\xfc\x37\x36\x97\xad\xbcp\".\xa1" "\x88[\x10\xd3\xdc\x42\x98\x19\x0e`\x8f\x35\xc6\xc5\x05\x0b\x93io\xfb\x99\x86\xb1\xfb\x01\xc7\xee\xcal#\x34\xd1*\xc5\xb0\x9bgU%\xda" "\xb7\x33\xac\x9e$\x87w\xc9!\xee_\x07\xac\xb5\x13\xb8t\xbb\x96l\xeev\x34\xc4R\xfb\xd3x\"\x8b\xbb\xa2\xc4\xb3q\xe8y\x10\x9e\x8f" "\xc2\xc6\x1b\x44\x8c\x42\x0f\xcc\xc0{\xe5i\xa9\x06\xde\xc3\x1c\x16\xa2\x9b\x96>\x9d\xd2`r\xc0L\xa5\x8c\xf6\xcb.Jm\x94\xee=\x42\xbb" "\xe3\xd1N\x07\xf4\xfb\xc6\x38\xf2\x80\x83\xc7\x83p\xd8\x96\x87\xc7\xc6X\xa2\xcd&N\xdd\x94\x06\xe3\xf3\x03\x7f\xc9\x1c\x0b(\x39L\x11\x11\xaf" "\x93\xe3\x87\x03\x38\x61+\xfbN\x7f\x97\x1a\xc6_\xfeN\xbbI\xbf\x97\x1d\xe0\xbd\x43\xcc\xe6\x0b\xed\x80\xae\xfc\xae\xe1\xc2\x30\xcb\x1b\xd5+\x1e" "#\x9c\x03\xf8&\x0b\x0b\xa5\xdf\xe0$>\x1c\xb9\x16\xbd>\xb0]\x13\r\x8f\x89\x99\x42\xe1\xe5\x36\x1a\x96\x41\x9a\xa4" "\xb6\xecyU\xfa]XI/i\x9f\xa2\xf0\x8a\xa0Z\xa2\r\xad\xa0\x94\"\x18\xe1K\x98\xe5_\x95\x10\xd2J\x88^\x42Ij<\xdd\x66" "\x03\x19\xa5$\xa3\xfc\xf8\xaa\xca\xc6\xcb\xb4\xe1[\xa6\xad{\xf1\x66\x0e\xbf\x36\xd3\xd2\xd7\x35\xb5\xb2\xd6k\x63)\xd5v\x8dr\xf4\xf2\x96\x45" "k\x11\r\x86\xb8r\x16g}\xa5\x93\xef\xbf\xebz\x94\xab\xefh\xf1\xc8\xf2n\x99\x63\x31%-\x1cUv\x15\xaa\x88Z\xb5\xaa\xb2/v" "\x06\xf7\xfd\xd5\x19\xbbYg\xec,)y\xe8\x02\x9b\xd5\tq\x8a\x0b\xb9K\xd6y\x17\xa1\xad\x03\x37\xb2\x15\x15\xf1\xd5\x99}\x0b\xdd\xec\x0b" "\xf6\xb6.\x62s\x37\x35\xfaWT\x44\xaf\xf0\x42\x9a\x12\xd0\xfcT\x84\x18\xf3\\`\x15\xff\xea\x42Z\x1dl\xe3\xec\"S\xa4\x0e\xa7\xc5\x15" "\x9d\x35\x94\xae\x07\x61\xae\x8b=\x13M\xcb\x96\x01\xba\x86\x05\xf3\xa6\xc5w\xaf\x99\xb6,\x93]\xa7\\\"\xb4u\x64\xae\x45\xc7\x9b]\rV" "}jph\xcb\xb4\xca\x13\x34\xf3\x18\x13\xa2\xcb\xa5\x0ck\xf4\x97Xq\xed\x94\x10\xd3\xd0\xca\?\x83\x35WT\t\x31\xbb\xac\xa4\xf1O\xc5" "\x64;\x63\x87\xac\x1e\x1e\x7f\x81h\xae\xea\x61\xe1\x1d\x84\x11\xa6\x9e-i\x36\x11\x01\xb5U|\x01\x31\x33[G\x0cp\xe5\x0c\xac\x9d\x39i" "\xd9\x13q \x83r\x38\xc9\x8av~\xeaL\xf2nl\x33m\xfa\x94\xd8\x66\xed\xd0\x36w\xec\x14\xd4\xa5\x97\x15\x16\x96\xb1\xedn(\xda\x15" "R,|\xe7\xa7\xc8qu\xce\xa7)\x39\x33\xac\x62T\xcc\xfb\xab\xcf\\\xbf\x45\x44\xabV\xe7\x44P\x9dMX=\xdb\x92mU\xc7rP" "\xe1)\x92\x31\xba\xc0m\xb3\t\xa8\xd3r^\xc7\xfa\x07\xe1\x03\xf5\xf1\xd4\xa9\x8e\x12\xb0\xa6\xd8\x96\x36\xf2\x1e\x1eo\x32\x8dw\xa2\xe2\xac\xcb" "\xa9\x64\x86\x01\x14\xa2K\\\x8f\xe6\x0f\xa4U\"\\\xfe\x65\xf4\xeb\x8a\x18\x1f\xf6\x99\xefM\x43\xc7\xcd\x44\x18\x66\xeb\xf1\x01\xb2S\x9c\?\x04" "m\x91\x9d\xd1\xdfQ\xec\xdb\"\x99\xa8\xa3\x0e\xb4[\xf5\xect\xe5\x86>\xc1\x88_/\xafT\x33\xd7k\xd1l\xe5\x88Q#o\xdc_\x41" "\xab\xf1*\x97/\xce\xb0\xdau\xd1\xd3\x11k\x8b\x8c\xac\xc8T\xe4\xc8\xa4\xcev\xaa\x1e\?\xe3\xadp\xecU\x97\xa1Ux\xb6\x8aZH\xb6" "\xec\x39\x83m\xfc\xba\x85s\x98h\xcb\xaa\xbc\x44\xce`\xbbV\xe5\x1d/\xbf\xa2\"w\xfa\x80vz\xeeZ\xb2\xa7QK=\x7fK\x1e%" "\x91\xde\x34\xf6*\xd9\x97\xa8'\x15\xe4\xc0\xe4\x46stX\xc1\xab\x90VJ\xf2\x12'\x37\xb8*N\x88\x41\\\x9d#\xb7:\xddO\xea\xb4" "\xb9*\xd9\xb6\xd5=\r\x92\xd1\xc4\xe9/\x83\xd5\x9d\xf2\x37(r\xf4\xa7Z\xb2\x1e{\x01M~\xbe\xa2\xfa\x19\xa2\xc2\x8a\x86\x31Z\x9d\xd6" "\xd2:\xcd\x9cJ\xad\xde`(PM\xe3\xe7\xd9R\x1f\xd3\xb2\x65\xca\xa6\xa9\xcf\xd2s\x9e\x9aU\xbcu\xac\x45U\xa2\x04\xd1\x38YO\xd1" "I\xae\xa7\x97\xdd\xb0\x10`\x19\x82h\x8f\xc7\xce\xcc\tR\xb5\x82\x33\xac\x36\xa2\xc2\x30\xd3\x64\xfc\xe3\xda\x93\x8c\xa1\x17\x9e\xff\xa5\x81\x96\xc2" "\xc5.\xa1\xe4K\x37\xc5\x43\\\xb8\x98t\xb7\xf0\xbd\xdf\xd1\xfe\xef\xe1\x32\xec\xf8\x9bo\xe8z\x82\xf1\xea\xd7\xa2\x9f\xefh\xf0\xea\x94\x03\x0f" "w\xd8W\x44\x44\x8b\x31\xb1jh\xd0\x8dN\x10O\xbe\xe8%\xa4\x07\x92\xd2\x39\xc4V#\x9e>J\xffL.\x92\xb6*z\x33\xe6\x34(" "\x9f\xdc\xaf\"\x8bq-\xe2\xb4\xa9s'\xfe\x81j=\x8d\x9d;\n\xe4W\xbf\xebW\x19\xe5\xfaM\xcb\x87\x61\xf9\\\x1d\xef\x31\x9dg\x07" ",\x46\x88\x89X]\xea\x9f\xc5\xb6:\x44\xb8n$'/\x1aV\xe4\xf9\xdd\x0f\xc8\x37\x11\xb8\x62G\xf3gLN'\xe1\xcb~xz\xe4" "W\x95\x03:\xa7\x84\x96\xb5\x91\xd4\xd6;\xb7\x9bl\xdf\x10;\x64\xa5g\x91\xeaR\xff\xcfO\xfe\x0e\xcc\xfe\x97\x03\x9a\xec\xbe\x91\xbc}\xc2" "y\xcb\x06\x1f\x82WS\xad\xb9\x82\xd8\x9c\x39y\x16\xbe\xe3\xdd\x03\xe9\x83\x95\xfck\xf8\xc8\xae\xae#\x34~\xd7Q\xf1\x03\x84#\xd6\x35\xbb" "\xf1\xd7,n\xd7\xcc\xa6Mz\x06(i\xbcS\x91}\xf5&\xb6\x99^\x35\x39\xe5\xd6\x84s\xf1\xaa\x83\rTW\x1dl\x93`\xfc]~" "@\xc4\x98\xbf\x83\xc8\xac\xc2\xb7/g\xf6\x11\x1a,%\xf6L\x16\xd1\xc2\xaf\xae\xee\x13\x8c\x94\xee\x7f\xe7\x45g\xd4>\r-\xd0\xb9j\x0b" "pQ\x66\xb5r\xff\x1b\x9c\xa4\xf3-\x44\xdb\x04H\xb8\x1a!\xf2\x8e\x88\xebV\xda\xb2\xca\xf8><\xec\xc7\x8b<\xc4\xdcGX\xd3\xb9\x30" "=u\xee\x83]\xe6\xfb\xf0X\x46\t\xa7Q\x61\n\r\x9d\x00%<$\x45\xbav\x91\x1d\x9b{\xba\xea(\xc3\xca!\xc5\xd7x\xbb\xa2\xf8\xc6\xb7~\xaf\x91l-\x8e\xa5\x89Iq\x04\xd1\x9cx\x95m" "\xf2'\xbb\x0b\x13\xff\xdc\x0b\xf4\x00\x9bM\x15\x39\x03\xa1\"-\x12\xf7\xe1$G\xb3\xc1}\xf8\x39\x01\xe7L\xad\xa0\xe1\xccN\xb7\x9c\xb1\x99" "\xbbg\xef\xe1\x1e\x0b'\x95\xf7\xe0\x96O\xb4m\xd0V!\x99\xea\xc1\xe9\xf7\x1e\x1d\xde\x33s\xdcG\x05\xa4$s\xeb}T~\xe5p\xe1" ">:\x41N\x88N\xaf\x9c;\xcf\x16Uy\x14\x8e\x08\xca\xf8r\x19\xb7\x8a\xd4x\xf1+-K\x16N\xbe\xbf\xa1\xdd\xe6\x9d\xe1\xf3$:}\xdb\xd1\x38\x0e\xbcg\x37\xfe^\x92.,q\xefS\xd1\x30\xb1}\xcf" "\xa9\xa8\xfb\x38\x18\xb1\xfa\xbfG\xd4\x46\x65\x83%\xf6\xcd\xaf\x9e\x14\x83\x64\x8c\x1f&\xe5.\x87\xb0\xf7X\xd6(\xb4\xe5\xefj\xdf\xbc\x8d\xbe" "\xd6\x10\xa7(*X\x0f)l,\x11\x88@\xc4\x16\xee=m\xdf\xd0\x35\xf3>\xed\xfc\x44\?x\xb2\xf4\xe9\xce\xa9\xfb\xfd~~\x65\x07\xde" "\x8c\xdc\xeb\x62\xd5\x65}\xab\xfc]\x37]L\xaa\xafI\xed\x05\x9a\x85\xc9\x17\xe2\xbaJuS\xc2l:\xb5\x64|\xeaZ\xdc\xbc\xe2\x1cL" "\x97nk]\xf5\x16\xdb\xaf`\x9f \xd1\xd6\xf8\x34:\xc7\x85\xb1)\x86\xb0U q\x17\xec\xd8v\xe9\xc5\xd1\x8dV\xef\xce\xe8\xba\x83 " "\x80\xabn|\xd9\x05\x31\x63\xd1\xa5\x17\x41\x97s\xde]\x04\x08\x11~\x37\xd9\x84w\xa5\xd7\x13W+\xc9\xf4\x1b\xda\xb6\x07\xdf\xecU\x37\xbd" "\xd9sr\xaa\xa9\x87\xe5\x80\x46v\x83U\x84\x17\xb8\x8cU\x0by\xbe\xb3\x9e\x7f\xca\xe9$]S\xab\x16\x18\x8bw\xe2\x1a\x07\x8b\xd4h\xbd" "\xee\xb1\xaeWJ\xd6\x35\x91\xa5\xb3\xc7$Q\xd2O\xa3\xc7!R\x0f\xfby\xacz\x99\x7f\xbf\x8aS\x10]]]\x42\x9e\xae\xbc\x38\xf7\xd8" "\x8e\xf4\xfc\xdb\xc9\xe8[W\x34\xa3\x9e\xa2\x96lp\xbb\xc9\xb4\xcd\x96\xbe\xe7w)\xf4GL\xe7O\x7f\xc9\xd1\xe7\xc4\x9b\x92\x9e\x1c}\xac" "\xce\x13\x62\xbc\xde\xe7\r)Y\xb1\xf6\x93\xaa=\x46\xdfu\x1d\x81W}\x62\xa9O\xef\xe3W\x9aQ_\xe9\xa4\xe7\x86\x80W\xceS\xbf\xd2" "t\xf3\xc6\x0b\x0e\xf8\xfd\x41t\xf0\x04\"\x8b\r\x92\xb1u\xe9GX\xfb\"\x84Mi\x84 `+\x86\x08\x12\xc2\x85z\x14\x36\xef@\x38" "~\x8e\xcc\x66\x7f\x01\x11ok\xc4K\x8e\xb2\xe3\x30z\x8e`\xf4\xa4\xdds\x44\x03\xe6(*\x0e@[\xbd\x93\xd9\x45\x95\x9cw\x34\x91\xe7" "Tq\xfd\x88\xc8\x0b\xa6\xc5\xaf\xeeJ=\x62\x96P\xcaw\xd2\xbd*\xc2\x90\xca\x81\x9fO&\xdb\x88#\xa2\x11\xc2\xe0\x08\x87\x0f\xfe\x11\x8d" "!\xca\xf4u\x45\x13\x89hx\xfe\xe4\xb8M\xe7\xcb\x11\xf3\xf5\x88\x83\x82\x11G\x8f#\x0e\n\x46\xec\x1dM`\x45\xa7\xe9W\x35\xe9\x08\xd1" "\x90:\xb1\x9d>Z\xf4V\x99\xfcM,S\x64\xff\x61\x82\xc0\x90\xab\x89\xf4.\xc0\xd2\xd6\xa9\x31\x93\x61\xdf\x98p>i\x82\xa0g\x42L" "\rO\x38\x9f;\xa1\xf9z\xc2>\xda\x84^\x8c\x13\x84\x8e\x12\xde\x04N\x8d\xbdo\xa1\xe3W\x13\x0eh't\xd8R\xaa\x1f\x9fm\x62," "Zs\xfe\x1b\x9c\xef\xdcx\xfc\x38q\xfau\x38\x14\x9b$\x07\xc5p\x15\xd0@\x37I\x30g\x38\x41\xa0_!|^&\x9c\xd7\x9f\xb0\x06" "\x99\xb0x)\x93y\x15\x31\x65\x44\xc3\x84\xd6\xe2w\xde\xd6\xb0\x0e\xef\xae\xcd\x9dZ\xb5\xa0\x92]\x30}\x16\x92z:\x31\x8c\x9c\xbd\xa0\x89" "\x42\xc9\x19\xd1\x05\x93[\x19\x9e=\xba\x88\xa8\xa7&&\xf0\x9a\x10q\x03\x9e<\x81p\x98[\xd0\xe1~!\x43\xa0\xdf\xe5\x15\x44\x8b\x05%" "\x44\x81Y\x84\xed\x33\xf0\xe9\x0b\x44\x01\x12\xe2\x11\xc2.\xef\x05\xa5HI\x87\x96\x05=\xa1\x17\x88]\x66\xcc\x1e\x42\x44\xd4\x36&\xfa\xcax" "\xd7\xb0\xe6]\xb5uT\x9dr\xdaH\xb5\xf8s\x98i\xa8\xe7\x16,\xae\x0b\xbe\xbd\xc5\xdf\x34\xbc\x8a\x9a\x34\x98L\x33\r\x39\xce\xc4\xac\x38" "\xaa\x16\xbd<\xb0=^ \x1a\x9a\x91M\x05\x45\xbf\xe1\xe8$\xef\xd4\x65l']\x16\x64; \x8d\xc0\x9f&\x95\x0c\xdb\xe8\x05V+)" "\x9f\x7fW\xe3\xdf\xf9\x33\xb5.\x88\x00\x02\x30>,\xa2\x9f\x03\xec\x43\xb7Z \xe2\x8f\x12\?\x8f\xabx\xb7tPT\xd2\xcbp\xc1\xb6\x62" "\x11\x37\xea\xcex:\x92\?h\xcds\xb0\xbd\xc7\x02\xb2\x90*(\x19M\xd9s_\xc4\xefW\xd9\x19\x06\xfc\xee\xb8\xef\x64\x35\xaa\"\xdd\r" "U\x44\x18\x0c\x88|\xe7*\x62\x80\xbe\x88\x03\xdc+\xa7\xb8\x17\xf4\x61[ \x82~&\x06\x17.\x46\?\x85\x04\x06\x05\xd5\xfc.T\x1c\x66" "g\x90\xc6\?^\xde\xd0yq\xc1\xf9jw\x85Ypi\x85\x92\x05o\xc1ZM\xe9WUq\xb4\x12!\xd3V\xd5\xdd\x03\xcc\x08\xe9\x45" "\x43\xde\x8b\xbf\x89\xb4iO\x15\xd8>H]\x18n\xb1\xe5\x9b\x1e\x1b\x44M\xdds\x8d\x32\xda\x34\x15uq\xf9\x7f\x1d^\x8c\x9d\xf2\?\xac" "\\\x41\x83I:\x30\xbb\xcc^z\xbb\x81\x66\x91\x1b\x84\xb6\xa5\x83\x10\xcd[\xf0W\x81\x05\xff\xd4\xbc\xa6}\x9c\xd1[*\xa0\xcd\x38\x08\xf7" ":\xe0>n\x98-<\x17z\n\xf3KN\xads\x8d\xa7\x91%\xca\xc4\x62\?y\x38\xe1x\xda\x0ex\x80\x42\xd1xi\xado\x0e\xf9\x63" "\x0b\x82i\xa4K\x14\x45\x7f\xca\xb0\xf4I\xf2\x06Q\x30\x95\xb4v\x05\xb6\x98}\x10/\x0f\xa1Ux\x46\xd4\\\xcah\xef\x9c\x96\xa1\x80\x33" "\xf1\xca\x64\xf2\x16>\xf3\"\xd5\x31\xdb\xad@\xc3\x8a\xfb%\x90\xe1\x83\xb0\xc9o\x35\xd7N\r\xa8\x82\xc6Q\xb5pt\x82\xa8\x12\xa2\xc1\x8a" "\xa3\xcc\x9e\xe0i\x88\x9d\x62\x44|\x66:\xf9u\xbbs\xa7\x9c\x80]\x44\xd5\xe2\xd2(\x13\xd1\xd9V\x91\xcdM\xc0\x1a\x34`u)<\xd6" "P\xa9\xf3\xb2\x86\x37\x97\xd6\xd0\xdf\xd5\xf8Xr\xd2\x7f\x1f^|:\xb5I\xbck\x43\x43\xff#`\x65)|\xd5^k\x8b\xc9\x66{\x9f" "\t\x61\x10\x0ft\r\x84\?\xd3\xf6\x90\x16U\x11+\xce\xe8\xe0\x93\x33\x8e\x41tPqz\x92x\x06\x17J\xcd\xc7\xee<\x35\x04\x0eR\xed" "\xc2\xf9\xf7u\xa4JTz\x04\xcb\x45g\xfc\xf0\x91}Z\xe6\xf5N\x91\xed#\xdb\x1e\x44\x88\xce@\x10\xdd\xe2\xb5\x46\xcd/P\xc7v\xcd" "\x1d\x91\xad\xabh\x1f\xda\xdc\xb3\xe8\x8a\xa6\x91\xf7Y\x96h\xdbU\"\x84\x03\x34tw\x02\x44p\x13\xbe\xe0\xdd\x45\x83\xa5\xfe\x9f\xf2[\x13" "\xa4\\\x34\x45\xd1\xa5\x35\?\xe0\xa0G\x19M:\xb4\xf5\x07\xf1\x61\xc1\x19V+\x88UjZt\xb4\xe5p\xc9\xb4R\x83v\xde\x00\xb1\x32" "\x8c\x7f\x0b\xdf\x02\xf6r\x02\x0e\x96\x82\xf8\x16\x99\x87.\xa0J\xcfj\xd8\x39O\x39%\xff\xed\n\x05\x92\xda\xceho\xdf\xb3\x8ej|$" "\x11u\r\x30k\n\xf6\x9c\x82\xf8i\xdf\xe9\x35\x86g\xe9\x64\xff\\{\x8c\x05\xbc:Z\xc3\x95\xf4\x64T\x31:+\xf9\xf9\x93\xc7\x01\x08" "\xcb[\x80\xb0\x8e\xc6\xb0r+\x03\x65\xd7\xa2\xe9:\xd3\x46\x15)w\x9cu\x08\xb0\x97\xae\x10}[\xa5\xd4y\xec\x0f\x04\xc9\xa6\xa6\xfd\x0b" "X%\x44\x43\x45\x43w`\xe1\xbb\xd3s\xb4\x88\x61\xe9\x8b\xb6u\xd5\xb2\x07\x34\x31<\xb0P\x9d\x8d\xfc\xce\x31\xf9\xb3\r\xd0\xb2\x13\xec|" "\x9c\xf4\x0f\xb0\x11\x96\xf4*\xf7P\xa1\xb3\xf7\x18\xb0\xf7\x18\xd0\x04\x10\xa4\x9d>\xf9\xe5\xfc\xebM\xaa\xc6\xc5\x87\x01;\x96\x81W\xf9^\xe3" "\xb1\xdb\x1a\xa4\xaf\x1fiw\x18\x8d\xa7\xde\xa4\xa4\x9b\x1b\xed\xe1\x9fjwS:s\x98^_\xef\xc1|\xb3>GGY\x19\x80V\x7f\x0b" "-\xd6\x8c\x11#i\x11\xcd\x83U\xb8i\x93/\x46\xcc\x41*_$o\xc3\x91\x46\xb5\x0f\xd0\xfc\x63\x84\xa5\x8e\xd3\xaf\x81*Zh\xddR" "\x63\xd4\xee\x86\xb9!\x34\xb3\xf9\tm\xaeQx~\xea\xccN`\x31l\x8c\x7f\x87\xd6N\xe4J\x11-\x04\x94\xd0\xcc\x1f\xc2n>}\xd8" "\x44{o\xd0\x86\xfb\xe4\x0f\xb9\x05-\xee\xaf\x11{\x16\x41\xb4\x1a\x43\xc4\xd9#\x39\x01\x17\?\xce\xe8\xf4\x1cQ\xbd\x44\xdb\x1e:\xa5\x45\xc7" "\x64\xb7iR\x43\xeeh~\xa3\xd1\x1e\xd2\x01{\x10\n=V\xa9\x88LULH\xae\x39\x8d\x65\x94\x04\xc6N\x63\xa6\xa9\x89\xed\x1f-\x39" "\?\x80\xf6P \x91\xac\xba\x98_j\"+*\xae\xc1\x0ehZ\xda\xbb\xfa\x9d_\x9b\x16_\x8eI<+\xe2\x04(;N}\xef\xe7w" "\xae%\xdb\xcbLk#{\x61\xeeS\x38Y:\xfd\x8d!\x82\xacQ*{\x94lh_u\x17\xb3\x38\xb6\xa2-/\x9c\xd9\x19\x96H\x14" "\xd4|\xc6\xec\xa3\x35\x32S\xb2\xb7\x9fT;\xc9\x13\x9e\x08\xd3{\xc2.\xdeu\x32\xde'\?\xfc\xa2\xb0/\n\xad\x83 \xdc^\x92\x38\x05" "\xe6\xd7\x85\x07o\x9ap\x83'\xd7\x92\xf5G\xd4l\x41\xbb\x46\x02\x61s\x42\x65\x85|\x06ok`\xf3\x98\xfc\x41\xab%\xe2\x03\x8a\xa3\x14" "g]\x9b\x66q\x30\x45\xb3\x05\x35\xeb\x0b\xf8\x08(\xcb\xe4\xe5\xef\x32\xc7wy\x01\xcfG\xa3\x8e\x32mLn\xda\x8e\x18\x15+\xa8\xf0\xa1" "I\xd7\xc2\xcc\x39\xaa\xbd\x91\x03\xa7\x8cp`^Y\xd3\x14\x65\xd4\xe0\xe4G\xfdLk\x15\x33-(;Q\xaf\x9a\xc8r\xa9\"\xb3;\xc5" "\x64;\x83&\x15\x8d\xb4\x1d\xc3Wj%\xa7\xdc\x1f\xec\xfa\xa6\xe9\xd0\xc9\xb6\x80\x35-~\xde`\xb5\xacjON\x44\x36\x30Q\xd7\xc2\x1f" "y\xd9\xbe@\xf7Zh\x9b\x1a\x19\x65\x84\x8a\xfd\x0e\xa1\xf9\xe6p\xa2Y\xd7{}\x81]\xb3\x85\xfb\xb8\x8e'\x05\xd6\xf9+\xbf\x41\xb3\xe0" "\nm\x96\xd5\xf8\xbb\\\x62\xf1\x99i\xd9\xbe\x44\xa6\xc5\xa5\x9f\xf0\x98\xbf\xf4\xef\x94\x1e\x34%-\x62\xb8h\xb6\xf9\xb8\xf2\x0b\x44u\xa8\xcc" "n\xe1\x02\xef(\xac#\t\x65\x0c\xef\x89\x0f\x31\xfb\"\x13\x9f\xb9K\xe9\xaf\x46[\x85I\x0e\x1d_\xd3\xa2\x06\xf7kT\xcd\xbf\x13\xec$" "\x93\xae\n\?\x1dg\xda\x13O\xf9\xccG\x43%\xab\xd4\x1b\x30!\xb2\x10\x00*\x0e\xc9\xa9SG\xd4O\xe7\xae\x89\x88]*M\x83\x8dP" "\x45\xde\x46\x97O\x31\xa8\x91L\x91\x41\x0f.\xee\"\x9a\xb3\xad\xf2\xc7\x99=\xe8P\x37\xa5\xc5\xfaK\xd3\xb2\xd3\x0c\x7f\xd4\x04;}\xcc\x34" "\xebS\x89h\xcb\xab\x8d\x9e\x65!z\x96\xc5\xeal\xe1\x82\xcf\xb3\xe6]\xb0 \xca\x1f\x66\xe2\x45\x44Kp\x01s\xa2\xd0\x66`\x84\x97[" "\xa7_#\xba\x1a\xa8\x37\xeb\xd5\xc0\xb5\xb0p\xb3\xabU\xbe\x32\xad\xd1%\x7f\x9c~\xef\xd1\rr+\x8c\x8d\xca\xc0\x99\x85G\x17\xad}\xe8" "\x44\x9f\xcc\xc4\xec\x46\xda\xbc\xb7\x0e/\x63\xae\x7f\xc2\xd5%\x1c[\xd6\x17\x08\xe3i\x0c\xab#\xb8G\x89Vl\xea\xa4\xa4y\xb3\x89V\xc5" "\xc5\xd8\\\\\xb0I\xb8\x80\x87\xb2\xf0\x15\xb7\x16OQ\x7f`\xdd\x92$\xdd\xdeW\xb2Y\xa0\x7f\xb3\xa6\x0f\x98\xf0\x14i\x8f\x95q\x42\xe9" "\\\xe6\x03\xb8\xd7\xab\xc6\xa3\xa3}xH\xaf/\xcc{\xe2\x18\xe2z\xea\x0c\x9f\x8f\xbc\x86\x43\x7fp}\x81\xe8\xda\xc2}\xbc=\xd8\x05\x8c" "\x32J\xda\xd1\xa2\xef\x0b\xaf;\x11\xefW\xd8x\x91>=\x96n\xab\x96U\x98\xf0\xbf\x13\xde<\x66\x87\x9ax\x45\x30\xe8\x1a\xd3\xd5\x85\xfc" "\\\x85K\x64iy\xea\xb8_\x8c\x0f\x9b\xd0^\xed\xdd\x30\xe2\xf6\x9a\x61\xb6\x85\xa8N\xea\xbf\x1b\xfb^\x1d\xeb\x87\x8cXpm\"_\xbd" "\x8a\x30/\x41\x34\x33\x12\x44\x0b\x32\xbb\xa6/\x99r\x02\x9ai`]\xc7h\xdb\x88y\x00\x13\xd3\xbd[\x35\x8c,x\x1d\x94\xcd:\xe2|" "\x19\xc3\xcbIv=\xd1\xfc\x86\xd6\x93\xec\x86\xd6\x13\xbf\x34\x86\x89\xc2K<)\x86(\x42[\x8d\x61\xf4_\x61\x9fV\xa3\x9fS\x44\xff\x14" "\xfdg#\xf3\xa8\x89\xfc\xa2\x88;_\x94\x01\x0c\?\xb8\xc2\x62\xa7u#\x42\x8b\xdd\x88&\x32JZ\x32\xc3\xb7\x31\xd3\xben\x63\xff\x1d\xa1" "Y\x06\x85\x43k+\xdb\x98\xb8\x16\xa2K\xd7No\xbe\xb5\"\xb7\x05\xfd\xebG\x36\xd6\xc2\x33\xed\xf9\x99\xe3\xbfh\xe6\x06%\x0cN\x99y" "\x1f\x61\xf4\x11\xa2\xfaP\xb2\x87\xfc\xc8\x37\xab\xcc\x0e\xe1\xed<\xc2\xa4\x62\xfc\x9dw\x43\x8b\xc9\x64\x9a\x06\?\xb1\x80\x10\xa6\xfd\xf5%U\x93" "\xe1\x08\xeb\xc5G,\xae\x35\xeak\xaa\xbe\x41\xab^\x93oz\xd4\xbf\x63\xeb\xbd\x8c\xc9\xcd-V\x92\x9a\x96\xde\x9c\xb0\xa3\xf4\x08'\r\xa1" "\xb9\xc1\t\xd1@(\xb1\xdeM\x44\x64\x96GL\xb7\nm{\x1e#,|\x10\xf1N\x1e\x61\xfd\x36zR\x9a\xb8\xf4$Ts\x9e'\x8a" "\x86\xa7\xba\x85G\xabi\x7f\x1d\xc7G\xf9\x93\x94\xf6\xc4\x66\x46U\xda\x94\xc7\xd2\x35\x1d&\x63\x80\x43\r!W\\K\xb6\xeb\x1d-\xbd\xad" "\xeej\x0fxt\xac\x14\x33\xfa\x1d\xeb\x00[\xf7\xe7\xee\xc0Z\x8f\x03\x66\x9f\x34\x11[\xb4\x9a\x88\xd9=\x11\x8f\xaaQ\xf9\x0b\"\x1a\r%" "\x02\xd4\x9a\x88\x95\x1d\"\x36x\x35\xd7\xefW:\xef\xd2\xc3Q\x98\xd7\x84\xa5\x1f\xa7'\?\xdb\x8aG\x16\xb2\xc7\x18\x65\xe7\x11\x41\x14\x84]" "\xbc\x80\xb8\x8f\xef\x63\?j\xa3:=\xf2\xee\x33\xed\?\x02\x63\xca'\xe6g+\xb4p\xfa\x42\x94\\\xa5\xbf/\x15\x9f\xfb\x30[\x9a\x86\xa0" "\xa5\x99\x36\xcf\xc1\xc7\x42\xb4O^\xdc\x96*\t\xb7\x0b\xa7\xb4<\xf1\x15\xdeqz\xb9\x97\xbe\xbd`\xcd\xbbh|\xa0\xf4\xcd\x1e\xf0\x19&" "\xaa\xf5\xb3\xfc\x19\xe3\xe1\x43\x62\xd6\x9c\xf5+\?R\x46\xd7\x17\x98\xd0\x16\xcd|o\xd7\xaf,~\xaf\x61\xfeY\xdex\x8aJ\xe3\x15\x1bW" "\t-&\x92r\x06V\xc9+\xf2\x01\xe7\x66\xb7\xe7\x95\xef\xf0\x35\x9cm@\?\x9f\x19\xa4\xd7\xaf\x88\xe2!\xb4\xad\xe7\x85\x8d\x06\x89\xef\x45" "\xd7\xf8\x1d\xe2\x10\x08\x9f\xac\xad\x7f\xc5\xe4\xad\xd0\x36s\x11\xda\xe4\x81\xd0&\x0f\x84\x17\xb8\x1f\xd8\x90\x8c\x98\xdcR\x11\xc9\x80\xb9\x43!\xda" "\xe6W,\x07\x10\x0eq)\xc4\xd9\x16.yJ\xdb\xc8I\x89\xe3|\xe5\xaf,\x65J\xbej\x13\xd7\xde\"\xa8&\xb7\xb9\xab\xfd#\xb2\xad" "\x34\xcd\xb6\xe0\xdc\xd1\xfc\x9e\x33\x8dU:\x0e,\x33\xb1y&\x9f\xb1\xaa\xd6\x03\xc9\xe1\x8f\xbf\xa1\xe4\x06)\x9dX\x04\x07\x61\xb3\x0c\x62l" "\xfc\x9a+\xc2\xcd^\x38\xea\xd0\x8c\xa2Z\xb2w\xe8\x1a\xbb\x8c\xca\x64s\xc8\x1e\xe6\x98\xc5m\x8c\x45z\xda\\\xdc" "\x82h@'\xac\x1c\x94YH\x0b\xd3\xa4\x8fIk\x86j\xb4\xbb\x30X\x84\xd0,\xef\xca\xbe\x13\xf1\xfa\xb4\xb9\x1d;\x11\xbc\xc6\x44\x1ag" " \xf2\xd2\xe6\x9c\x62\x84\xf1\x1b\xe2\xa6\x80)\n\xd1\xd0\xfd\x9f\x84m~j\x81\xba\x84\x66\xc3\x15\"\x17(\xc3\xe3\\z\xcd\xa3\x36#\x61" "\x0c\xc7U\xac\xd5\x14\r\x9d\x89\x89\x96\xe2\xe5X\xfeL\x43\x18#!zN\x13m}\xf8\x84\xd8\x01 +\xf3\x93\xbfr\xed\xfd>\xa5\?" "\x0b\xbb\x96\x9co\x37\xfa\xdd#\x46\xa2\x10\xc5Q\xe9\xa9\xc6\x36\x65\x92\xc0l\x31\xe1\xd0l\xe2II\xd3\ng\xe9\xd7_\xbf\x81\xa5\xd8\x8c" "}\xad\x19\x1c\xa6\xd6\xb3pS$-\x7f/\xd8$)\xc3\xd2\x0b\x1b\xd1\x05\xfb\\\x8b\xd0\xc2u\xac\x17\x34\x16-\x62\xf3\xe0XsK\x43" "\xa1m\x0c\xbf^j\xc3\xa8\xff\xad\x36Yr\x88\xac\xd4.G\xeb\xde\x35\xdd\xe1\x38\xd3\xa6\xfa\x7f\xbc\x81\xe6\x84\x45oi[\xe3\xd0\x13\xc1" "\xb4\xe8r\xc1\x9e\x9ai\xf3\x1cMK\xa6m\xb8\x62\xcd\xb4\xf8\xb3\x88\xb5^\xa6%\xfd',\x0cY/\xa3\x83\x0e\x88Q\xde\x92\x36\xb1\x65" "\xda\xbb\xda\xb9\x03\xf8v\xafW:^o\xfc\x44\x83g\x08\x38\x86\x82\xb0\xfa\x45Gm\xa5\x1b|\x17\xce\x42[\x81$\x9a\xf9\x86\xacW\xe1" "\xde\x83\xfc\x0c;\xcc\x89v\x39\xd9\xd5\xcc\x83\x46\x38\xbe\x84\xe7\xb3\x88\x16\xa1\xdf\x08#\xbc\x88\xab\x43=/\x46#+\xac\xe6\x30\xaa\xa9\x05" "\xe3\x10\xd3j\xa7\xbb\xda\xfd\x83\x8b\x9a\x35\xcdU\xce\xb4x\xdd\x90\x9e\x06\x1c\xbf\xed@\x9a\?\x89o\xed\xd9W\xea\xfe\xfd|\x0b\x91\x0f)" "w\xeb\xcc&\xfdM\x0b+U\x8e\xc3L\xfb\xfb&\x36\x65\x14\xbe\x0ft\xfb\x80\x66\x01\xda\xc0\x32\xda\n\x46\xac\r\xe3m\x1a\xe3\xc2\x87\x8b" "\xc8\xe9*\x96\x9dq\xcb\xc5\ny\x45\xb6\x9cp\xda\xdep\x03\x65\x61\x90\xd1\\\x13N\xa1mp\x34\xcc\xfd\x44\xc5=\x8c\xd9\x45\xb3Mr" "\x36{\x30_\tOp.\?'Z\x17\xe5\x17X;u\x62 +\xa2\xb9\x90\x08\x9f+\xce,~\xf5\x86!\xfd\x8c\xfe(\xb0\xd2\x08'" "H\x03\x44\xa1\x13\xcez\xa0\xb9\xcbl\x18\x1dn\xc3\xc8n\x46\x8dL\xcf\xa7\xf4;\x89\x0e\xf1\x04\xb0\x8al\x98=\x85\x16\xaf\x64\xc3(X" "\x46\xdd\x97\xce\xc6\xea\xa2uW\xfe\n\xa2\xaf\xae:\xcd\xcf_M\xc3\xfc\x9b\xb0\x89\x8b\xc3\x82\xbd\xd1\x80\x41\xba\x83ni\x81\x15\x83r\xc0" "\n\x8c\xd1\x13+\x19\xf2\xd0\xf6\xd2\xa9\x9b|m.\xa8]\x93\x0b#\xdaV#\xb6i\x10\xf1\x8fX\xfc\xb8\xd9G)\x13Z\xd8S\xe5=" "\xb8}@+\xbb\xd9\x0f\xf7n\x9c\xe8\x9d\xab\xd8\x01s\xc7\x64\x85\xfcv\xa2R\x13\xb1\x80\x0b\x85\xb6\x83\xa0\xb0\xcc\x9f\x9a\x87\xb6\xf2\x8c\xfc" "p\xc2\x9ej\"\x46\xdb\"\xd6*\xba\x17\x9a-/\xdd\xec\xc3\xe0(\xb4`\x05\xc2g\xf2\xf5\x16\xf4\xef\x8d\xf9\xeb\x39osU\x07\xd7s" "\xd0\n\xfb\x66\?*TH|\x1f{\r\n\xebM\xa7\xda\xb2\x03<\x90\x8f\xe4wR)\x42\xb4\x00,J^x\x83K`+P\xe5" "\x82\xc4\x33\x46'\xb8Wl\xd8)\x44\xe1\xc9\xc1\xe8&l\xfc\x84\xc3\x02\xf6\xe6\x33\xcd\x86\xf6\x9b\x1d\x8duy.j\x15\xb4\xb6;}\xa4" "\x16\x38w\xbf\xd3\xc1\xdd\x45#\xab\x94r\xfe\x82X\x86r\x88\xe9/\x44\x19\xc9\x61\xabH!\xcaJ\x0en\xdf\xc2\x1e\x9e\x8a\x65$\x87\x35" "tJ\xfc\x0ek\xd3\x94\x38\x9e\xda:r#\x0c\x1d\"^\xf2+M~\x64\x0b\xd4\x36y\xf5\xab\xd8^\x33\xf9T\x8b\xf7\x07\xd8Q\\\xb4" "\xe6\xfa\x37x`\x0b\xa5\x9a|\x13^\x06\x9b<[\x1a\x65tW\x44'p\x93\xf7_\n\xb3\x00\xf7\xa6\xe9\xee[\x36\x19n\xda\xbf\xbfH" "\nw\xfc\x66\x81\xcdP\x81m\xbe\xb0K\x06\xa0\xb9\xfbo\xb8\x0b\x90pm\x95O!\xdc\x63_H\x44\x1b\x8a\x08\x8fs,\xd1\"\xce@" "\x1b\xaa\n+\xefl\xd9\n\xe1)N\x04\x7f\\\xe5\xc8\x19\xed\xd5]\x44$\x1b\x11m\xac!l\xf3\x1a\xcf\x15l\x9e\xa6\xe2Uv\xb9\xe7" "['\xcb\xae\x8al\x8a\x39,\x11vy\xce\xe1\"\xba\xbe\x80h.\x31\xc2\x31O\?>s\xc2\xa7\\\x44\x9bn\x11\xce\x91\x10\xa1\x05_" "\x10\xaex\xa1\xed\ri\xaf\xa9\x80\xd0J\xc2\xa3\x8e\x33\xccM\x11\xbf\x46\x34\x8b\xc3*\xcc\x97\xa2\x83K\x88'g\x61\x91\x62\xe3\x15\xbc\x46" "\x9a`>\x45x\x8b\xb4\x42\x0c\x7f\xe3N\x1a\xa9\x36\?\x81\?\x0f\xb4\xad\xe7_\xd5\xd4hW/\xb8\xa6\x61\xd8\xd0<\x16\xe0\x61$\xfc\xe4" "Y\xbf\xf1\x84\x11\xb2\x66!\x42W\xa3\x80%k\x42\x0b\x07!l\x34\xfd\x61\x11\xe3\x41h\x31\x1e\x84\xafx\xef\xf1\xdb\x11\xf8\x85\x44\xc0," "\x8b\x12\x0f\x06\xcb\xe3\xa6\x90\xa0\xf8\x14\xfcQ\x92\xa3\x63\x12\xef\x03\x41\x1b\x84\xa8\x83\x0bI\xff\x08\xce\xe9\"\xae\x97\xe0\xf6\x8cl\x91\xb8\x64" "\x9a\xaf\x38=\x31\xb0\x92\x44X\xc7+L\x1b\xb8[\x38\xad\x18Y\xbe\x0bi\xfb\x86\xbc\x63\x7f\xb0\xa0;\x42/y\x82.R\x08!\x36\x84" "\xb6Y\x8cQ\xde\xb5\x8a\x45,\xc2\xdd\x94\xd9Y)\xb3\x82*\x87\xb5:\x88\x44.#N\xb2Q;\xcc\xa5\x07l\xe9`\x07\xa4\xfag\xa7" "\xa2\x8c\xd1\x88\xf0r\x0b\xa7,\x11\xcd\x10'\x44\xb9.\xc3\xb0\xba)\xc3\x94+\x1ci\xa6\xa9\x9d\xc2M\xb2v\n\x0f\xfcMMg\xdem" "O\x08\x11\xb7V\xf8k\x61\xae\x88\x38\xde*\x96\xc1\x93\x87\x64\xfb\x06\xd1l\xeb\xc2\x97\xeb\xb0R\xe2+\xab\xe9\x1a\xb8I\x1e\xa2\x19S\x8c" "\xd9\x42\x32\xd1\x36\x35p\xdb\x88\xce\xec\x9d\xd5\xa2\x83O,)\x14\xd1\x46\xee\x42\x8b\xba \xb4\xb5\xed\x42\x9e\x33\xb2y\xb2MM\xb7rz" "\xc3\x8d\xc7\xddQX\xc1\xaf\x11\xa0T\xb8\xec\xc7\xf5O\x88\xe6\xa1\xbd\xa9\xc1\xffkSK/\x8a\xa0\xb9p\t\x31\x10\x39\xc7(M\xa9\xb6" "\x14\xf8M\x8a\x86~\xed\x39\x06U\x9bsl\xdb.,\x9c\x81\xa5/\xa7v\xf5\xcc\xab\xc8\x35\x44\x9e\x17\xedl\x65{\xf3\xf2\x33\xdb\xb2\\" "\x38\xa8\xd9\xff\x1bj\xe4\x30\xa7\x8d\x80M\x00\x88\x86\x36\xf5\\\xeb\xec\xcb<\x96;\x8a\xb6\xe2\x99\xd6\xf6\x82\xcf\xe1\xcah\x8cj\xd5\x30\xbf" "\xcc\xb4\xfbUt\xd5p\r\xd6H\x88\xaf\x01\xac\xf9\xaa]\xab+\x36r\xe5y\x64\x8b\xc8\x10@O\x34T+J\x19\x9e\xed\x1c\xdd\xfd\x0e" "\xde\x93\x32j\xe4\x98\xc8\xa6}\x0f\xb1\xc6os\x8eyY!\xaa\xfas\xf8Y\x0b\xf3o\xd1\x61\t\xbb\x61\x89\xf6\xb4\x02\xa7\x8b\x9d\x87\x15" "m')Y\x42\xcf\xd3\x9b\x82>\x03z\xd4\r\x8d\xe5#\x89\x66.\n\xaa\x95\xc8\x8a\x33\xdc\xdf\x86\xcf\x93L\x43/J\x45i\xd6w>" "H\xbe\xab;Z*\xedq\xa6\r\xc8%\x18\x04\xec\xaa\x99h\xb3\xe9&\xaaS\xa6\x99\xbeL\x93n=K\xd4\x9f&\xa7\x84,\xed\x39>" "\xb1\xf9\xb5M\x43\nXR{\xc1\x32\xa9\x1d\x8d\x65H\x0e\xfc\xe8\xca\xdc\xeb\xbekR\x1f\x84\xc8\xca\x8d\x30\x7fL\x06`\x81z\xe1\x95\xc4" "\x03\xfb\xad\xc1\xffY\x89g\x80\xc7\x9b\xb0\x8a\x94\xe3\xbbm\x84\xb6^z\xa3\xd1p\x7f\x83SO\x0c]\x93W\xfe`s\xdd\xf8;:\x91" "\xce#[Y\xd5\xa4y\x81i\xc8\x34\x9d\xb9\xaa\x94\\K*O\xd1\x1d\x1f\xd4\xec\xa5\xc6\xec\xc7\xdd+\x0e\x88\x1a\xd8\x1dLy\x0f\x8e\xe6" "\x1a\x03\x62\x1c\xb8\x16\xed\xb5w\x34\x8d%\x90i\x0bp|\x89\rkU\x0c\xf0\x35h\x9e\xee\xdb\xc3l\xe3z\xd5,k\x36X\xfe\x95:" "yz\xb7\xef\x9a\x66\x34\x33\x87\xbb\xc6\xa2\xe3\x1a\xc6\x44\xaa\x45\xc5\x0f,\xb2\x85\x36-#\x0e\xb5i\x1a\x10\x15\x85\xc1\x34iL\xf2\xfc\x9d" "\xdc\xc7\xff\x01\xe5\xae,g\xfd\xcf\?\x37\xf9\x7f\xfe\xbd\xe5\xff\xf9\xf7\xbb\xaa\xd5\xcf@\x16\x0e\xf5\x39\xda^#\x96\x9bh\xe8\xfb\x34\xa2\xd6" "[\x38n\xb3\x80\xab\x16\x35\x37\x99\x06\xd3\x44\xc3\xbc\x1f_\xb4\\H\x89\x9cu\x39ZnH\xd9\xd6(\r\x03~\xc9\x36_\xdc\x34l\xdd" "\xe0\xab\xbf\x42v\xab\x1b\x88H$\x44\xf9m\xc0\xdb\x42\x88\xeex\x03\x33;\xc6\xff" "G\xd7\x99h%\xd3\xc4Z\xfb\xd6\x65\x06\x01\x01\x07@\xc5Y\x04Q\x01\x05\x45@\xe0\x62\x8e=p\x17\x7f\xb2w\xd2\xf6\xfb\xfd\xe7\xac\xe5" "\xf2\xc9n\xa0\xc7\xea\x1aS)\x46\xa8\xde\x9a\xc3\x30\xe8{\xd3z\xfc\x63\xddSZ\x9c\xa9J\x9d&\xeeqO\x1c\xe3\x01\x83\xcb\xeb\xb0w" "\x95\xa8\xc7\xb9u\x01u\xac\xf0\xeep\xa2\x86pW\xfa\xfd>\xa5\xa7\xc5\xb6\xb3\?\xe0\xb7\xac\x9d\xa8\xd4pK\x87|w\xf6\xe7\xa5\xd4\xd1" "\xf6\xfd/k\xee}\x9f\xd2\xe6\xe6\xf7\x1f\xb9\xc7\x11\xa6Rn\xbb\xc1\x16\x17{\x1e @\x94\xf0\x1d\x37\xe1\xdcnY\x8f\xbd\xbb\xdb;]" "\xce\xe6t\x63\xd9\xd5\x9d\x95\?w\xbf\x08\x84\xb4\xbd\x0b\x8a\xaf$\xdbzw\xd6\x15v\xc7\xe5\xfb\x84p+\x03u\x66;\x1f\xce\x9d\xd5\xe1" "\xee\x44s\xedq\x31\xc7\x05\x86\xd0\x14srL\xfaG,I\xee\xac\x16q\xc7\xc9\xe1\x42\xbe\rwto\x17\x62R\x8d\x10~\xf4 }" "\xa8\xc5\xfc\xb8\x91\x06y\xd0\xf8r\x15\xad\xee]Y*P\xea)&\x95\x9a\xbb\x98\xedY%\xd7\x0f\x10\xf3\xf0\x9d\x0b\x84\x8a\x39\xe1\xd9\xc6" "\x9fMr\xc3\xaf\x30\x94\xb6\x90%\xf6\x9du\x17(\x7fW\x1f\xd6\xde\x1c\xb2\xcf|;\xb2\x8e\xc5\x11\x07`@\x0e\xe3\x88\xd9\xac\x87\xb7w" "\xd6\xdb\xa3*\xbazH)i\xfb\xa5\xd5\x64\x9bV\xf3\xbfo>L\xf7\xe7yk\xff\x8c\xa4\x36\x18|\xbf\x85\x88\xcf.\n.\xb7`\xf8" "\xdd\xb4\x1a\x96*\r\xa4\xe9j;r\x06\xed<#\xae@\x89i\tk\x14\xbe\xdeI\xe2\xf7_\x84\x1f<\xff\xe8h\xe2\xfc\xdd\xec\xec." "\xab\xb2\xb4\x02\xb3Q\xb7\x46<\xd4\xf9\xdfw\xa6\rk\xc2@%\x1d\xa4\xaa,\x1d\xa8\x99\x44w\x82\xe2R\x03\x34Y\x8d\x34\xd3\xda\xbfP" "\xec\x7f\x19\x45\xcd\\\x62\xf2u\x1f\xb1z\x1e/\xcb\xae\xc4\xb4\xfa\xfa\xc8\xbak\xde\x82\xcd\xd2\xa9\x01v\x07\x38\xb6.\x92\x1c\x7f\xcd\xac\xa6" "\x63\xca^TQW\xce\xf8\xee\x80\x83\xc2\xaa\xde\x38\x8e$\xe6\xf2H\xeb-|\xa1\xc6\xbf\xab\xa1\x15\x88\x63\x8e\rl\xc7\x9c\x89\x04\xea\xda" ".\x83\"\x03Z`\x43\x12\x86\x06*\x19\xe9\xa5\xba\xceK\x99ku\x41\xdd\xa0\xbe\xf5\x93\x9b\xbf_W\xc9\xa2}\xa1\x64\x87+-\xc9r" "\xd1\xa9\xeb\xcd\xda\xc5%\xcazK\x19H\x35\x31\xc3\xf6\xd2:\xfaT%kG\xa8\x42lx\?W\xbb\x44kW(\x39wT\xccZ\x9b" "N\x15\x62\xd6K\xc6\x0b\xa7u\xe9\x8c\x39\xc7\t\x8c\xed\x96\x32\xe4\xa8\x90\xb9\xf8\x98S\x64\x41{\xbb`N\x33\xf1\x43!\xb8\xea\xf8\x06\xeb" "\x89QSO\x37\xdfr%\xfb\x8d\xc6\x9d\xe4\x63\x0c\xb7\x80R\x88XJ\x35\x95|\x87\r\xaa\xb1\?YN\xee\x04\xe3\x62\x8f\xe6\xb8\xe2\xe4" "\xba\xebj\xda}\x9f\xfcx\xea\xb0\x06\xbdR\xca\xa6pr\x1c\r\xec\xb4\xa6\xce\xae\x33\xb9\xf9\xef\x05\xeb\x01\x1fs\x98X\xc8\xc6\xff\x98\xce" "\x12\x42\xccpR\xda\xe7[\xbb\xa6\xe4\x65\x1d{\x32\x94\?.\x39\xb4\x1d\x87\x88\xfd)\x64\rX\x19\xbc\x9f\xf9\xbe\x44\xd9\xbb\x36\x0e\x8f\x06" "\xe4Y!Z\x17\xad\xe0\xd2\xb0\xa9\xd2$\x8f'|\x18\x96G\x8f\x39l\xac\xe4\x1b\x14\x62\xf4\x1f\xe4\xd0'L\x0e\xb1\x8b\xc9\x1e\x84\xb1u" "\x46+\xb5\x1f\x88\xd5xW\x1c\?\x18s\xe2\x96r\xe5\xf4\xc7\xcf\xb0\x9b\xa0\xd5\x80\xc6\xd2\xfc\xe4\\*\x35\x35Ltr\xf4\xd9\xbdS\xab" "\x92\xab\x9d\xab\xd4\x1b'\x8a\xcbg\xd0<\xfd\x94\x07\xef\x8f\x30\xe4\x90\xc8\x38\\\xd9\x85\xb1\x89\x36\xe6t*\xfe|\xa2" "\x8f\x63\xa7\xb5\x37\xd4L.r\xc5'\xc2\xe8\x99\xa0\xe7\xad\x62\x06\x87\xb7\xd6\x0e\x1d\x63\xd9\x08\xa6\xec\xe8\xe7\xd9\x19\xd4\xef\xdc\xe4\xec^\x98" "\x89\x83\xcbv\x1cg.\xa2\xec\x1d\xc7\xb6\xb7'y" "\x1b~W\x8fr\x9e\xe1\xc1\x9a\xebN\xe3\x13\xd9\r\x9d\xbc\xa8\xde+\xf1\xd1Q\\\x1e\x45\xcf\xab\xbf\x14\xa7\x9f\x30\xc4\x04\xa7\x9fp\x9d]" "l\xde\x17\xbe\xb9\x12\r\xd5\xf3kro\x44\xad\xd6Q\xdb\xee\x1b\xdcp@\xeb\xa3[\x04\xfd~\xd0\xb4\xc8\xd9\xa2\xc6v),O\x95\x41" "\xf6\x41\x1a\x15\xe1\xf9\x64\x7f_\x12\x43{r>\xd6\xc9\x33\x92\xcf\x13s\x19\x14~\x18\xc1O\xd4\xf4P\x1aS\xd6\x03\xbb\xe0\x92\xd0\xcak" "\xa7\xd4\xa0,}.\xfe\xe9\x34T%\x37\xc3\xea\x88\xba,\xb1\x06\xa9\x83\x9b\x9a\xa8\xa5\xdd\x30\x38\xd6\x0b\x7f\xec\x34\x37#\x1b\r_H\xdb" "\xc3\xd2\xfb\xc2\xea\xb8\x8b\x30w\xebL\x1d\x07\xad\xf8N\xfa\x89$k@\xfa\x87\xf2x\x7f\xbf\xd7\x41\xe1=\x38\xaeq*\x8b\x7f\x12gN" "\xf7\xd9\xa7\xff\xed\x93\x64\xc1\x34\xd9\xc0v\x9c\x32ug\xd4\xc7\xa3PU/\x90\x93'\xdf\xc0P\x06\x62\x9e\xee\x9c\xd1}\x8b\x66\xdb~\xd6" "\x9e\xdap\xfb\"\xec\x66\x8dv\x9c\xf3\x95\x65\xf5\x66Z\xdf\xfa\xc2\x06\x04\x16\xe1\xed\x0f\xf9\xce\xa7\x1c~\xe4\x82\xc7\x86'\x11N\?\x16\xce" "\xce\x34\xf1W\xf8\xd6\xd9\x10\xf4\"\xfc\xd4\xae>\xcb\xa3\x17t\xec\xd9.\x38\xb7\x42\x38\x9f\xc8\x1b\xcb\x38y\xa2\xd6s]%p\x83z\xd5" "\x82n\xdf\xc2\\\xcf\xaf\x8f\xf3\xdf\x84\xed\xbc\xdc\x94\xa8\xddp\x15\xe7\x36\xfb\x0f\xa6_\xbf{\x9ag\x1f\xde\xd0\xfd\x96J\x12\x18{]\x17" "\x0c^)\x9c\x7f\xfe~o\x38\xb7o\xbb\xe0\x32\xb4\xa0\xb5\xff\x16V\x9b[$!\n\xc5<\xe6m\xa7\xdb\x9e\xf0\x42\xea\x9e\x97\x92^S" "\xca\xd3\xad\x06\x03\x64}g\xc1\xc0\x89~\xa5\xa2\xa2\xa7\x86g]\x89\n\xef\xcaVV,t\"\xed\xd1KlY\x9d\x46\xa8M\xedv\xdd" "\x62H\x42\x37\x13\xff\xbd\xedO\xb0\xc4\xbb\xbe\xa1\xa3\x99\x10N\xbd\xc2\xfb!\xc9WHi)y\x13\xd0\x13g\xc3\xb5\xd4\xb6\x9b\xa8R#" "_\x90\xee\x37\x96\x33l\x38\xcdY\xc8\xbb\xb7\x61I\xa7\xab\x13\x1e:\x99\xbd\xa9Y\x35\xd6\x9d\x41o\xc8\xe5,\xa8V\xa7\x9c\x18\xa6\xea\xcd" "\xa9s\xf3\xd0\xe2\xa4\xeaU\xfeU\x8c\x87-jy\x97x\x0b\xa9z\x32\xbe;\xd5kh\xb5\xa6Z\xd9\xb7V\x97$Z^:\xaf\xf5\xd6" "h\xfb\xc4\xa8\xa4\xf2\\\x63\xd3\xackP\xec\xbb\x15\xc2\xcb\x08\x64+\x42\xcc\x12/&(\x97\x8cy\xca\xb2]\x9a\xa8" "\xfc\x85+\x8d\x96]\xf2#=\xc9\x1f\x03\x08\xa9\x1a\x90\xd9'=\xde\xc1\x9d+\r\xe4\xd8\xab\x9b\xfa&s\x05'}!`\x86\xf9\n\x87" "\xe2\xa1\xe2\xf2\x31\x17\x8eTu\xe8\x94\xb7\xcfS\x05UrxQ\xb9\xa2\xa7\x1f*\xba`$\xaa\xd0J\xab\xd4^\xfeR\x93\xa9\x7f\xf6\xb9" "\xbf\x7f\x34\xe5[g\x92\x93s\x42\x91\xa8\xbc\x9d\xbf\xa5\x10!\xa7z\x89\x89\xe9\xcd`X\xa9J\x8b\xcb\xd5\xfe\xea\xfeO\xd5\x9c\x18\xb5y" "\x37u\xa6\xbf\xd8m\\\x45\xaf\xa7\x7f\xeaS\xd3G\xc9.\xd4/\xa3\xbcs\xca\xf9z\xa6\x1eV*\xc6*\xc2\xa2\xf1\xcdg\xfc=p\xff" "\xd4\x8e\xb3v&\xd5s\xcd\x8f\x1f\xd3*z\xb5\xfd\x1c\xd9\x45\x36\x8dV\x16\x86\x9dZ\xd8*\x31~\x8c*\r\xb3\x9b\xdc&(\xf6\xf3\xaa" "Z\xa4S\x05\x95\x95\xc1\xba\x42I\xef\xe7w\x35\xa6:g\xb9\xcd\xe8\x80\xc2^\xc5)\x05\x62\xcaL\x12\x13\x14\xdc\xa6.\xd9\xd7\xea\x9b\xa3" "\xccgtx\xa0\x8d\x8c\xec\x92\x0b_\xe8\xe6\xbaS.\x30\xa5\x90\x00\xed&\xf6&N\xcd\"\xdf\x1eL\xd9\x89]\xd9\x93\xbf\xb2W\xe9\x9e" "/n\xf2\xbd\x31r\xab\xdbyJ%\xe9\xcb\xd3\xe7\x44G\xb4\xd9\xdc\x16\x35\xb5\x07\x33g\x45!\xfc\xb4[\x61\x99\xb3P\xcb<\xbf\x30U" "\xbb\x44m\xc6\xcep{\x14.s\xaet\xd2\xee\x0f\x1f\x97\xbf\xcc^L\x08\xb5\x86_\\\xa4\x94'(*\x0e\x82\xaa\xfatz\xd5JL" "\xf5\x02\xb2\xb4\xa4\xaaR\xe5j\x39T\x8bw\xf6\x8d\x8a\xca=\x39Si\x9b*(v\\\xc5\xe7\xad\xe4\x33\xc9\x01\xa4\xe8\xb3\xb2\x94\xdd/" "`*G\x32\x65\x39\x12'j\x81Z\x95\x1b\?\xb8\x92\xf4%u\x1e\xaa\xb2\xed\xbdz\xebL\xdd\xfc\xa8\xb6\xd3\xd1\xccgV(\x38\xa0'" "\x44\xdf\x16\x98\\\xb8\x98\x1e\xf9\x07\x8a\xf5Z\x9aV`\xd2\x64\x97\x1c\x94\xbf\x9f\x62\x46m[Q\x96j~\xcb\xeeL\xa8xrHW\x19" "Su\x46\xe3\x87\xdaw\?\xbc$\x8a\xac\xf6%L%W\x06\x17Q~z\x15\xce\x0b\xf2\xa8\xcd*\xa5\xd7_\xa2\xce\xb1s\x7f\xb1\rk" "\xb7i\xd5\xa8\x98\x62\xad\x31\xba`\xca\x62\x10$\xa5\xeb\xb1\xd7\x93\xe9\xcd\nj\xde\x61\x99\xb7\xaa\xee\xaa\x1b-\x35\x8f\xae\x9c\xc9\xb5\x8e\xed\xa3\x0fi\x83\x9f\xfa\x9b" "-JK\xab\x87\x7f\x94_\xfc\xba\xe8\x44\x1d\xd1\x9e\xe4\xdan\x02\x62\xb7(\xaf\x93\x07\x65\xed\x08\x61\xfa\xaa\xd6\xa3T\xdb\x43T\xfa:\xb6" "\xccX\xe2l\xcd)\xb9Xpw\x9dR\\\xe8\t\xcak\xf1q\xf6\xcax\xeb\xf4\xc7$\xa6\xdfl\x31\xbdt\x13\x93\xddrj\xaet\x32" "\x43\xb5\xe1\x99\xab\\\xb1\xf3w\xf7\xeeO\x88\x8ak\xf2\xaa\xfav&\xab\xa6\x42\x45\xd5\x37\x7f\x06T\xfb\x0b\xbe\x19\xb1\x15\xc7\x42\x7f'\xd5" "\xb4J\x9d\x98\x61\xf3-\xbc\xeb'\x63O\xdcv\xfa\xa5=\xc2GU\xdf\x10\xb5\xb7\x8c\x9eK\x65/\x8f\x9a\x83u\x38n\xbb\x92*\x8a\x46" "\x31\xf7\xdf\xa1G\x0f\xd4 t\x96\xf9P\x05\xbb\x41J%\xfb\x86\x92\x83\xb9\xd2\x9e\xdd\xbf\xcf\xe2\xc9\x95\x9b\xba\xfa\x9f\x7fP\xcc\x46\xe5\x11" "\xa3[\x42\xc5\xd9\xbb\x38\xcb\x1c\x8eq#\xc1\xf0\xe0\xd8\x93\x8e\xa9\x9f\x83\x94\xa2\xc3\xf2\x0e\xeb\xc7\xfd\xb5\x1f\xe2\xfa]\xaa\x94\x36\xd5*\xa5" "\x14'\x87\xb9\xf2\x8ap|~\xaa=I\x93\x0bS\xc6\xeb\xba\xbeLV\x1d\x8e\xef\x0e\x9cRrz\xb1\x95\xf4\x94\xbb)w#\xb9\xdf\x0f" "L\xc9\xb1\x7f\x61l\xa9\xc1\x8f\xe3\xf7g\xfa\xa8\xb7\xe8\xcaR\xef|\xa2\x0b\x8cw\xfa\xa6$#\x62\x99\xc8\xa1G%\x33\x07\xba\"\x0b\xfd" "T<\xd1n\x98\xa9\xc5\xbb\xeb\xe4\xa7;>Z\xce\x08\x10\xe6\x98\xea\xf7\x96K\xb3;\x1cL\xdd#\xf6\xd8\x80\xa9\xfe\x03\xaax\xfa\xeeJ" "r_\xcf\x96Um\x8f\xe2\xe6UP\xef\xf9\x06\xbfJ\xf6\xb8\x08\x35Ht\x8b\xbe\xaa\xa2:\x1f\x9a\x96\xcf\x1a\xa6x\xeat\xf8\x04\xe3\xd2" "H#\x8bX\x0f\x01\xe7\x19\t\xadQH\x37n\x30\xf5\xa8\xa8\x38\xabM\xd4\xf3T\x14'\x0e\x41\xa5\x32\x61\xed\x0c\x92vV\xf6#\xa5<" "\x1f\xd8\xbf\xf1\x05\xb5\x1c\xa0`\x1d\x30\x05\xac\x19\x33\xe1,\x9a\x44M[\xff\xaahm\xeb\xde\xf9\x36.\x88N%\r\xab\xc5\x07\xd5\xf2\x46" "\xc3n\x35m_\xe8\xbd\x06\x93\xd8\xc0;\x9b\xaa \x44\x07\xd6\xce\xe6)\x80\\\x94{W\x08\n\x65]\xa9\xac\xf0\xc5~\xdc\x9d\xcdY\x10" "\x1e\xd7\xe4\x7fX=\xa1\x42\xbf\xa7\xf2\x9d\x64\x0e\x63\x13\r\x84\xd3\"\xc9\xcaQ\xc1\xda\x85\x85\x30\xf3\xa6\xff\xcf^\xa9N\x97$\xfc\xa2\x85" "\xac\xe0*\xb5k\x1fK,\xba\xf2#\x99\x33#\x42\xf4@\xe9,>\xf8\xa5@\xc5\xbb\x96\xe5\x30\x05\xcb\xb6\x95\x9a\xb7tx\xc6t\x66\x04" "\x91\x37U\x13\x65\x37\x07\xe6\xdcO\x45SL\xf9\x91!n\xa0\xacq\xa7\x66t\x64\x81\xa8\xa8|Mv\xa8x\x90\xb7\x36\x31\xd4x\x95\x98" "_U\xfa\xed\x89:}w&\xc1\x43\x45=\xdb\t\xb2\x98S\xa6\x1e!U\xf2\xdd\xb5\xa4\xbf\xafp\xfcI\xb5\xe1\x15\xd0\xa7\n\xa4W\x80" "\x9aW\xa0\xefo\x7f\xb7v\x32\x00\x16\xcd\xbfO\xe9\xeb,\xc9%\xe3\xc9\x88\x1fqi\x8b\xd4#\x85\x63\xca\xaeH\x8f\xc7]\x91\xeeq" "\x42\xd6*\x8bq\xf5I\x63\?\xc0\xb1\x1d\x8a\x8b\xf7\x89\t\x17\x32!\xd6\"\xdaU\xc2\x03T\x1cl\xa1\x18\x61yM\xd6\x8c\xec\xad\xab\x31" "\xee\xab\xf0\t\xe9\xae\x16\x66\x86\x64nL\x32\x93\xad\xc5X\xdaO\x88\xdeX\xe1\x16\xc7\xa9\xd1\xf7I\x88\xc0\x8a\xbb\xbau\xc5\xd6\xb5\xdb\x61" "\xd3\xa0\t'\xf4\xdd\x9f\x86\x13\x37\xc8\x30\xeaPt+\x13\x62\x9a\x85\xf0\xfa>\xc8,\x38\x46\xbe\xab\xa3\xdb\x85\?\xb7\x0c[\x19\x8cgV" "\x89\xaf\xdb\x03\xac#\x46\xdb\x84\xc1Y\x45\xb1\xd5\xa5\x0c\x9a\xd7\xd6\xffW\xb7J\x95R\xda!\xd6t\xa8\xd3'H\x88\x11\xed\x9d\xcd}S" "\x36\x9d\xd6\xd9Z\xe7\x42u`\xea\x1cU\x35_\xe4\xbcS*\xc2\xa8\xeb\xce\x02\xb6\t\xb7\xef\xce\xf4/\x45\xa5~\t\x95\xfcr\xfb\x1e\xbe" "g\x83\xc2\xd0U<\xbf\xb1r\xa2\xbe\xef\xf7u\x91\xa8\xefyJ\xed\x31\xb2\x04\x15\xd6\x86\xa6\x1a\x9c\xbb\x01r\x14j\xd7\x0c\x30\x0f\x01\xfc" "\xab\x1a'\n\xc9\xf4\xd8j\xb8mz\xf5\xef\xda\xd6\xe1\xd4\xe6X\xf0\xae\xc3\x8evN\xe5U\xb5$\x11Up\xd7\t\x8a\x1f\x61\xbb\xc3\xa8" "|\xa2\x9a\x35\xf5`\xc4\"\x1b\xaaZ\xe4\xc9\x01\xc9\xbe\xdf\x0e'z\x81\x41\xdd\x8bW\xa8\xcb\xcb\xb0\xbdt\x15~\\r\xb2\x90\xa8\xab\x8b" "\xbfzv\x87S(\x41\r\x95\xc7\x01\x02u\x14N\x46p\x12\xc5\xe2\xb5\x43\x1f\x02\xe1r\x97\xfe\x0e\x9d\x63\xd9:\xefX\x33Li\xfd\xff" "\x30W+\xce\x62\x83\xe2`\xb4\x9b\xf4x\xa3*^\xba)\xad\x7f\xcbtTY\n\xebX*U\xea\xca\xb9+\xde\x19\xed\x03\x90\r,_" ":\xd1\xd9y\x84\xa0\x45\x34Wh\x0et\x38\xd0\x85jY\x12\xac\x42\x14\xe6\xee(g\xa9k\xd8\x8f\xf2i\x85r\x9c~\xc0\xbb\xae\x95\xdb" "]v\x16\xd2\\\x1e%\xf3\x9e\x45\xf9V\x16+\xdd\xa0\xf0\xc2\x38+\x30\x19\x18\x44\xcd\xaf\xd4o\x82\xfa\x9c<\xb3/N\xae\x82\xd5\x8d\x65" "\x14]z(\t\x97s\xe7_\x95\xda\x94\xf5\xbf'j\x93(\xff\x1a+\xfd]\x44\x8a\xaa\xa6\xb6\xa6\x7f\xccRS\xc9)\x81\xbb\xae\xf5\xb8" "v-\xd3\xe8\x86\x99g\xa7\xba\xc1/+\xae\xe2\\-\xad\xe6\x37\x89\x62\xef\x66\x37,\xb7\x9c\x7f\x05\n\x94\x87\x31\x84\x8a>\xb6\xd6.\xed" "\xeah\xb1\xe4\xff\xf5wW\x92\n\x12u\x64{\xef\xd8y\xf5\xf8x$\x9f\x88\xcbu+#\xba\xbe'\xce\xa4\xdbu\x39P\x06\xfa\x63\xd2" "\xd0\xc0\x93\"#\x14\xc1\xf7;\xf1\x1c\x17\x85\xd9\xd6\xbb\xee\xfe\xb1\xe9T\x1fyV\x41\xa1V\x37\xa6\x34$n\xbc+Y/\x18\xd5\x9b\x99" "h\x87\x66z\xa6|\xab\x8e\x9bY\x85\xc6\x14W\x17\xa2Z\xac\xad\x17\xe8\\R\x97\xd1\xf4\xca\x34_\xd8s\xbb\x93\xe7V\xdd:\xb7\xd7\xe0" "\x9c\x33 ~W\xba\x38\x8d\xef\xc3&OH\xae\xffs`I\xe0\x9c\x93\xdc\xc0\xe8\xbe&\x7fP!\xbbJ\xce\xad\x13\xee\xdcJ\xe5s\xcb" "\xfa\xcf\xfd{\x42\x86\x35\xd9\x9d\xdb;z\x9eh\xb8l\x0bw\x97\xba\xfb\x12OW\x17`\xcb,l\x80\xe4|\xdf\x41^tk\x89\xc5\x82" "\xee\x82Q\xbfm\x35+Uq\xa6\xc6\xf5\xcf\x45\xb1G\xe0\x96\xb1\x94v\xb7\x41\xb5\x44\xd6\x35\xbb\xd2q\xff[\xfb\x00\xf3\x1b\x84\xcd\xcb\xf0" "\xb0\xef;\x13%\xe5X\xa2\x30u\x15\xb4\xf3\xbf\r\xde\xae\x9c\xbf\xdf\x8fV\x9c\xa8\x8a\x0f\xb3~\x9eT\x8c\xc1-\x8a\xc3\xf2\x62Y\xff\x8b\x95\xd0/\xf6\xce\xbe\x98'\x82\x05o\x07\xff\xf9\x96*\xab\xd4\xbfXK\xe7\xc5\x32\xa1\x17\xaeo" "\x02\x86\xedg\xc9\xab\xad\xab\x91\x1b\xde\xfe\xd9\xf0\x62\x9c\x92\x08\?\xa3\xb4\xed\xd2\xba\x7f\xe1!\x03\xc4Y\x13\xb2\xe5\xf1\x62\xc5\xfaK\xc0\xd1" "\xfa\x17zM\t\xe1$$\xd4\x99Y\x17\x34w/N\xe4\xff\xbcKV\xb0\xbdp\x02\x33\x98\xf8\x46\x89\xc2\x04\x66%\xcf\x8cSH\x84\x87" "\x87\xc6>\x89\x95\x14\x84\xf5\x85S\xea\x9bVYV\xb5G(\x02\x31Oy\xc9V*\xbe\x30\xfe+h\xd5\xe5\x97\xf0z\x44\"\x80\x85\xf0" "\xad\xefTW\xba\xee\x8d+\x46-\xa1\xb9h\x99i\xbb\x9f'\xf4G\x17\x62\x1e\x1fMv\xb8\xbc\xd0\xaf\x15\xf4\x83\xdbp\xc9\x0b\x9d\x9e\x84" "v\xbf\xad\xb0{\x61X\x19\xe1\x80\x17\xccx\x85\xc2\xb2\x93\xbb\x8c\xe1\x16-\xbc\xabY\xf6\xfc\x62\x8d\xe9\x97x\x39\x37[\xc9\x63Xw\xc3']\xfew\x9f" "\xf6\x98\?\xad\xb6\xf7-\x7f\xe1\xc1\xb3\xfc\x41\xa5(\x95\x62\xf3^\xf8\x0e\xbb\xd8\xd7\x9an\x9e;\xf3\xd2\x14\xaezN\xfa\x8c\x89)\x7fI" "\rVg\xa6\xe1\?n\xf1\xc6.\x7f\x63\x63\x9d\x1bNj\x11\xb2k|\x13\x34_\xc9\x93!\xc9\x0e\xa7M\xb0x\xc2\xb7\x66TX\xb2S" "\x88\xd9\x10\xc2]\xc1*#\x62n\x9c\x7f\x39\xb8\xaa\x30{\x1br\x98\x64\x93\x90\x63T\x1b\xeb\x65\xdb\x44\x99\x37\x32g\x64'\x9d\xd2:r" "\x37\x9c\x0e <\xeb\x93\xef<#{/\x37\x36\xae\xbc\xe1\x34\x1f!o\xfd\xc6\x8a\xec\xcd\xbe\x33\x32\xae\xc9\x8b\x66j\xaf\\iK\xf8\xd2" "\xd5\xf3\xa7\xdb\xd9\x66\xff\x91\x91j\x10\x1d\x02w;\x9dS|\xb7\xb5\xfd\xed\xe4\xcf\xa9\xc9\x88\xbeY;N\t\x11\xb2\x7fh\x17\"\x96\xe3" "n\xa7\x9d\x8a\x9b\x9e\x15\x85\xbb\xf8Yn\x19\xfcX\xdeH]\x13\x43\xa9\xfe\xd6\x64p\x9b\xa5\xb9\xcb\xe3\x66%&\x1e\xbfz\xbd\x64\x18X" "H\xcd\xe2\x63x\xf8\x1e\xbcs\xa7\x41y\x15\xfe\xbc\xe0\x8e\xaaR\xdf\x65\x12\xee\x93\xf0\x97y$\x9f\x0e\xc9\xb7\x33\xa7\x9f\x10\x46\xce\xc0\x8a" "Q\n\xfb\xc5>\xfb\xe4j\x9f\xc9 \x64\x98\xaa\xed\":k\x04\x43\xfb\x85\xbe]\xc2\x30S\x35\x0e\x9d\xfa&\xeb\xebH\x85\x1a\x37\xcc/" "\xa7V\n\xb3\x97\xae\x90\x8c\xd5T/\n\x65\x45{\xcb\x10\x90\x85J\xafY\xd7\x98V\xa5\xa3=\xa4\?\x0cUg\xb5\x64'\xfa\"\x93(" "\xff\xd4\xec\xf6\xc9\x1e\xaf\x31\xbcj\xa6\xf7x\x65\x9f\xde\x9c:\xfd\xfe\xc1\xe3]\xd9\xb8\x95\x1f`\xf5[U\xadm\xd8\xb8\x8bZ=\xaa\x63" "\xa9\x7f~\x61.\xac;\x93\x91\xda\x93].\xb9\x42\xcb\xdaLu\xcd\xa5\xe9\xb7\x46M\xad\xbe\xa8\xd9\xbb\xd1\x63\xe9l\x02U\x9a\xed(\x9f" "\xf2\xe4\x9a\xc7\x81\xe3\x93\xf2\x8e\x37=\x9e\x0f\xf5W=^\x30\xaak\xea!\x95\x39I=L\xf4\x1d\x81\xad\xe0:\x1b\xcd_\\\x85\xd5v" "\xa2N\n\x61\xa3\x19>\xde\xfe\xa9\xbb\x7f\x95\x9f\x19\x02\x44\xa5\xbc\xb0\xd4\\\xe7\x7f\x37\xcf\xb6\xab\x0c\xfa\xbe\x11\xbf\xf8\x16\x01,\x10\xb9\xb8" "IN\xf3\xe4\xea\xc9\xa9S{t\x0c\xc5\xd4\xcb\x04\x9e%\xa2\x10\x94\x39<\xc8\x86\x19\xec.\x87\x0c#<\xc8\xa3\x8f(<(\x84\xbc\x85" "\x05K~\x85\x30\xd7%{H_\x05\xfb>:\xe4K#\x34\xc5MU\xfb\xa6\x8a\xea\x33\xd9\xfa\xc1\x12\x04\xaa\x1e\x9fUi\xae(\xca~" "\x7fh\xc7Q\xfe\xfd\xf2\x08\xfd\x44\xe0\x88\\\x96\x9d\xa8\x7f\xd2\x44\xf4'\x33m\xad\x05S\x1ao \xf9Z\xd8\xbc\x46\x9d\xc4\x14/\\M" "K\x05G\xc9wu\x00\x43\xe8\xfb\x45\x87\x92\x92\xe7|\x14\xf4\xcb\xc6\r\xdc\xea\xae\xa8\xa6<\xe7\xf0\xec\xde\x89N\xe9#\x94\xa6\xba\xc1\x8e" "\x88^X\xa5\x9d\x0c\xbc\x0e\x84\xf0\x9aR\xea\x10\x83r\xc2\xdf\xedW\xd0r\xa0\x86\xd3\xcb\x85\x44\xd9\x9bj*\x64\x92l\xd8\xcd=\x66w" "\xc5>\x83\xdf\x1f\x07\xc5\x0f\xc4\xd3\xf2\xe1\\\x12[oM-\xc8\xe6\x89\xd1\xb6\x37\x7f\xc8\xf6\xa1\xf1\x8a\x1c/\x9d\xe1\x9a+\xa2\xaa\xda$" "\xf4\x86\x9b\x0e\x12\x33\x1d\x1d[~\xc2\x41\x63\x65\xbbO\x8e\xe7N{{\x8f-)*S\xa7n\x8a\x89\xca\xd4\xbe\x97\xa7z\xbfq\x06\xd9" "r\x90\x9b\xfd\xcd\xcc\xa8\xad\xfe\xafOX\x1c\xe0\x93\xc7\x41\x30\xbb\x8b\xa7\x8b\x64\x83\x7f\xf6uI\xea\xf0\xae/|GJ\x86\x1f\xe5\x06\xae" "Rg\x06\x17\x17R\xf2\xab\xfd\x66\xe7*\x1c\x8e\"\xe6\x98\xaa\x10\xd1\xbc\xe5J\xe7:\x0f\x90\x18\x8f\xe3R\xd6\x17\xac\xf8S\xdbs*\xbb" "\xa9\xfe\xdd\xfd}O\x43\xf2\x1f\xf2V\xeeG(\xf9N-\xd9\x9e\xa2\xb5\x0b\xe2\x65:\r\x0fp_Ou$\x36\x8f\xd3:\x8d\x9b\xf8\xe9" "\x99\x46\xd8\x38\x38\x0b./M\xdd\xcb\x43\xb5\xdc\xe5\xcc\xde\xaf\x33\xb4\x12\xf4[\xc5\x05\xd9\x18\xc1\x39R\xfe%\xecNHm\x45\x90\xf1|" "\x64\xe9_\x15\\\xde\xd5\x9c\xe2\xa9\x9f\xd9\r=\x43\xf5\x45i_\x85\xcf\x91R\x07\xb5\x95w\xaf\xe1\xeb\n\xa3\xeb\xaa\xe6\xc6-\x1e\xd3\x99" "\xf6\x94<\x17iV\x9f\x9c\xa9/\xee/\xb6\xbf\xdf+\xf4\xa9\x86\x07\xe7\x61&gL\x15\x9c\xaeN\x91\xb4/u\xf4\xf2\xf1\xdd\xeew\x0f" "\xb5m\x61\xf0\xf6\x18\xe6z\x08\xa9**\xcc<\x92|\x8f{\x61\xaeGV\xea\x64{\xaa\xb1RY\x80\xf6\x30\x0c$\x8c\xe7/\xf2\x45\x04" "\r\x32u\xf6\xeaj\xfft.\x9fY\xc1x\xa5oqi\x85\n\xb9\xaa\xa5mUO\x10:X\x41\x35\x83\xe2\xd4\xcc;'\xbc\x1f`\xbe" "\x93+\\\xc7UP\xec\x93%~\x35\xe0\x99*\xa5\xb2\x80\x08\x9eT\xd1\xb8\x93(\r\xa6\xa9lt\x8d\x8f\x64\xb7\xf2\xfb\xbd\xa1\xf9\x94\r" "g\x95\xf0\xab\x96\xa8\xaf\x9al\xa0z\xbb\xd1\xce\x45\x96\xd1WX\x9a\x05<#wm#*\?WV\xf9\xb9\xb2G%\xbcqrV\x63" "pt\x13\x94\xcfm\xdb\xcc\x89V\x91\x99\x98\xbb\x94\xa8\xcd\t\x46\x35\xa8\x82Z!\xbe\x7fOT\xe3#\x31\xc7_\x89\xb9:q\xd3\xea\x18" "\x30\xf3\x8dxRLT\xbb\x03\x37\x01W\x0c@L\xe5>yT\xfb\xbb\r\x96\xd6V\x95\xb7\xb3*\xd8w\xcb\xbc\x9f\x08L\xa2\x64\x65U" "i\x99\xd6\x95U\xb4\x94\x61\xcfn\x04\xdf\xb0\xabp\xd5$\x99\x33]\xa5\x9c\x35u\xfc\xb6\xc8o\x63\x1cW\x39h\x91\xf3{\xa7_\x9c\x98" "\x96\xef^Y\x65\xe8\n>`\xa5\xa0\x9e\x33\x35w\x86g\r\xf4^\x98\xb2\xde\x0b*\x39\x04\\\x19\xa8\xa4H\xc3X\xa6\xf6u\x1d\xe4\x9c" "~ \x31\xf7\xf7]\x33k\xe8\x9d|\xd2\xd5u\xc6\x45\xdf\xa6\xd1\xb9\xee\x98\x9c\xd4\xbb\xe8/q\xa9\xfaK\\q\xad\xe0\xf4{\xa6\xa6\xcd" "jSu\xce\x0b\xc7t\"\xe5\x94\xe9+\x9e\?j\x32\xfd\xe6\xa5\xc1)\x80L]\x62\xbc\x1d\xfat\x45\xa8gr\x97\x31\x96\x9c\x41\xfd\x30" "\xba\x41\xed\xea\n\xe3\x96\xe1\xc1mp{\x46.\xfa\xe4\x0eo\xcam\x98\x9b\x92\x05<\x88;\xcbS\xef\xe0W\x42\x06\xdf\xc8\xc5\xef\x30\r" "\x41h\x65\xfb\x9d:k\x66\x9f\xec\xb1\xddYI\x7f\xc7j\x98\xd5\rL\x05\xc3\xf7\xb4\xdavR\n.\xbf\xaaXJ\xf5\xa5\x91\x8b\xe5\xd0" "`\x62\x8c\x63[H)\x8cMS\x85\xd5g\xf4s\x43\xbd\x39%\xc3\x86\xb3\xb5*\xd6\xa6\xfaV^\xf4\xd1\x41H\xda\xab\n\xb3{\x63\x99" ">\xd4{\x16.:P\xbe\x9b\x95\x66q\x97\xd3\x94\x42<:\xaa\xb0r\x80\xf9\x07\xaa\xd6_$\xdb\x46J\x8c\xc0\xc3\xe4\xe5\x05\x85\xf2\xfe" "\xb4j\xe6\xab\xd4\xdf,\x17\xed[\xad\xa2oM\n\xe1\xd2\x8a\xdc>\\r\xc9\xd4\xdd\xd1\xc9w\xbb\x16\x82L\xfc\xa9\xa6\x7fvG\xd6\x8a" "\xf2G\xb3n\xfb\x65\x85\xabo\xb9g_'/\xad\x1fi\x36\x7f\xac\x82\xd5\x0fZ\xbc\xb1\x41w.\xff\xd1Q\xa6\xea|\x44^\x35\xc8\xfe" ")))\xf7\xef.\x32\xa4t\xa2\xd8\x14\x10\xbe\x63\xbe\x9b\x9a\x8b\xb9\xfc\xd1\\\xd9\xa5\xfdL\xc8m\x46\xbd\x02\xcf.M\x15\x8c\x1dr\x87" "\x8c\xb6\xcf\x83x\xe8>\xdb\xf0\xb7S~\xf3\xef\xcb\x03\xa7\?Q\x35\x7fn\xc3\x9b\x13+\x96t\x83U.\xd4\x0c\xa7S\xae\?\xac#x" "\x93\x63\xdf\x1c\x15\x06~\x31\xaa\xfe~\xaan\xa2\xd9\xa3\x44\xe5r\xffn\xd8w[\xc1t\x9bl\xc8\x1d\x62\xfe\xab\x9a\x15^txx\x62" "\xec\x1b\x37\x64\xb5\x62\xac;\x13\xf3\xac\xe5\xf4\x9e_\xaa\xa0VH\xccV\xd7M\xac\x93\xad\xe6\xf9$(U\x31\x00M\xa5\xf3\xb1\x13\x65\x37" "\xe7\xaa\xafm\xef\xcd\x65\x9c\xbf\xe0\x86\x37;-\xd6\xa1\xfaVt\xf6\xadTS\x06\xd5\x12\xba\x39\x13\x85NN\xaa\xfd\xf9s\xb8\x66\"\r" "\x97<{O\x1bQ\xe1\x9a<\x1d\x1a\?I\xbb\xb7\x18\x30P\xb2\x9d\xd2\x87\xd7\xb5\x92\xcd\xa5~\xf4\xb2\x8c\x96\x19\x04HP\x35\xbe\x13\x85" ")O\x9a\x66\x33]#\xaf\"\xceW\xa2\x9f\x13\xf8\xda\xa8*,}\xe7q\xed\xd5i\x95\xd0\xbe\xe5\xf4}_\xa0V\xcd{\xe6\x30\xe8\x10" "V\x8eyI\xf1\xe4\xd0\x89\xd9\x61\x30\xed\xab\x9f\x8f\x1a( \xffmjj\xfc\x32.\xa2\xcby\xccl\x98}\xe1\xca\x95\xed~\xf3\xea\xf4" "W\x43L\xf9\x01\xfa\x00U\xd9\xed\xc6\x62\xb5\x42\xbf\xe1{V\xdc\xfa\xe8U\x06\xf9\xce\xed\x33<\x90\xe7\x1e\x9e\x81\xc1\xb5\x8b\x84\xf3\x96\x99" "\xb6\x42\x05\x95/\n\xa0\xca\x92\xae\x30\xbc\x98#\xe2\x01\x14\x9f#\x98\x85\x85\x93\x33\xc6\xbe\xd3\xf2\xed\x81u\x30*\xfdt\xad^\xae\xf4\xd3KvTnZ\xb5s\x10\x1e\x1e\x90\xb5\x92\xdf\x9e\xf0\xa8\x1f" "\x0fx\xbe\xbe\x04\x9a\x9a\x16\xd1%\x31SiN\xe3\xc3\xd8\xfd\xd2\xd5\xc2sv\xb4\xdb\x1f\xa7\xd6P\x9a\x65W\xc9\xe9\x0cm\x7f\xaf\x1f\xce" "T\x9a\xb6\xae\x85\x41\xb8\xbe\xb3\x9a\xd0 \xdc\x1dX\x1f\xdc\x00\x33\x95\x94l\xaa\r\xa4L\xb2\x06\xc9\x00\xa1\xe7\x95R\xdf\x99\x33\x39\xba\x97" "\xf9_\xe9\x34\x88\xba|\x44\xd1\xcd\x1b\x86\xb0\xd4|\xca\x04;&\x1f\xab\x85\x0f\xfe\xaa\xca\x83h\xc8\x93\xd0\xe0\x46\x39\xbc\xd5\x03\xbfR\x61" "\xfcU\x88\xb6|K\xe3\x02\x1f@\\\xe7n\xe3\xf3\xa6\xd3\x8a\xed\x81\x65\xa3\xc9:\xd8\x30\x99\x94\xac\x45\xa2\xb4\xa6\x92\x9a\x92\x38\xad\x1a>" "@ `\xe5\xe8\x02\x31\x99\xd4L\xee\xda\x90\xfe\xd2\x30\x03\xa6\x89\x61P\x90lg\xb8\x7f\x39\xa1j,I\xbe\x04\x43\xab\x86)\xb5\x83(" "s\xe2*\xba,[\x65[U\xbc\xd9\xfc\xab\x92o>>\x07\xd3GK\x87\xaa\xf4\x7fo\xea*\xfd\xcd\xfe\xcc\x19v\x16\x08\x06\xa8j\xfa" "H\xae\xf0^\x0c\xc3\x83\x1f\x92\x9dQ\x43\x8c\xdd+\xcb-\x92U\x81\xa1ur\x0e\xad\x1a\x32\xb4\xe4\x32\xfc\xa7\xefi\x18\x33\x9f\x1d\xc6\x95" "-\xc9j\xf1PN\x0b\xb4N\x8e\x91u\x66\x8e\xfen\xdf\xc8\x32\xdf\x91]\x9aR#\x8eLO\xff'\xb7\x0e+\xaf\x92\x32|\x31\x14\xf9" "\x30\xc8\xad\xc9\xc2\x86,O\xc9\xc3Ki\xd8\xc3KKU\xe3T\xfe\xcc|![\x33\xf2\xa4\x42\xf6\xca\xe4\xc3\xd4)\xff\xed\xe2\x46\xf0t" "V\xfe\x64\x9d~\x9a\x08\xd5\xa3\x64\xf3|\xe4\x43\x85\xfa\xeb\x83\xa1q\xe4\xb4z\xc3\xc8j\xfb#\x8c\x84+\xafxX\xeb\x0fUZ\x1e\x36" "\xb2\xb7U\x99\xfe\x82\x9d\x19\xa2V\x91\x88k\xa0&\xdf\xb4Qt\xde&/\xbf\xc9\x1b\x1e\x33\x1at\xc9\xd7\x16\xb9>'\x39\xa0\x30\xb2\xbe" "\xf5\x91\xd5\x13\x46q\xef`\xbf\xe6\x63\xb2\xf7g\x14\xb3\x33`\x64y\xde\x08\x93'\xc0k\xa7\xba\x15\xaf\x1bT\xd3\xb2\xf1\xd5\xf8\x41\xbe\xf3" "\xca,\xa1\x8et\xca\x46r\x65/V\x44O\xb0\xb4\xafR\x9f\xc8\xc4>\x9d\xe8\x12\xbc\x07\x13\x04\xd5R\xc5{\x35\xb1\xcc}\"\x7f${" "T'\x61\t\xc9q\x62}g\xca\xc4\xe4\xf0\xc9\xc4\xee\xd2\xc4:\xcc&\xfb.\x9e\xe7g\x98;\x33\xa2\xd2\xfei\xa7\xf5\xa9\xbd\x95\xb9\x43" "\xab\xe7\xae-\x1d\x0b\xd7\x92w\xd3\x64\x87\x98\xf0\t\xde\x81j\xb2m\xa1\x0c\xf8\xba\xa9i\r\x62u\x31\x80G\x38M\xcc\x63Q\x93\r\n" "\xe1\xc2\x99\xfc\xd6\x16mV\x93\xdd\xf3J\x44\x02>\x42\x88\x16\xdb\xf0s\x81\xd0\xc8T\xf1\xf8\x0e\x33\x1aTmN\x9c\x96\xe5\x99i\xbd\xec" "\xaa\x34\x9a\xce\xfb\x81+\xed\xc7\xb9K~\xac\x8b\x9f\xb1\x8f]\x95\xde\x90\xdbR\xa2\xd8\x15\xc5<\\\x37\xe8\x9c\x85\xf2\x31\xd5\xf6\xd2\xd2\xdc" "\xda/%\xc8\x0e\xfd\x36x\xf4\"\x98\xef\xc6O\xb2X#\xcb\x45\xa3\xed\x85\x83\x12k\x1b\xf4I\xee\x8a\x06\xdb`\x93\x63\x1d\xd4\xd6Xh" "K\xcdz\x03\xbe\xd5\x30\?\xf7\xeb<\x66\x46\xa9:\xca\x92\x8d\x84\xf1\xb4\n\xa7\x83\?\x65w\x12+\x10\x80S\xe3\xb7\?)\x9a\xc9\xcfX" "\xfe\xae\xad\xafP\x19TS\x9f\x1e\xc1\xa3\x1a\xa6o\x1aZ\x7f\xa6\x9a\x9e\x0c\xac\xab\x63\xadq\x39\x98\x13\xaf\x31\tU\xf9\xc8\xbb\x0e\?M" "\xa5=\xaf`\xfe\x1c\xae\x98<\xad\x8f\x45\xe9)\x45L\r!gI!\xf8n\x92\xcb\x0f\xcb\xd8\xc4\x9ci\x0f\xb7\x1f\x84}~kx\x63" "(\x7f\x0e\xac\xca\xa6&\x96\xadP\x93}\x97k\xcb\xcb\xd7\x96\xf3\t\x99\x1a-\xdb[[\x87\x86\x12\xde\x0f\x34#\x36\xca\xd6\x61\xd5\x36\xd5" "J\x61\xad\x9f\x32\xfd\xae\x85\xb5\ny\xc4\xf7)ll\x9c\x41\x61\xe8\xd7\x1f\x9eN\x9c\xf0\x11\x85\xf9\x85\xa5\x83i\"\xf0\x30\xcc\xb5\x13\x01" "\xd2\x61\xee\x9c\xf2&%\xc7=\xdd\x45om\x9ag\xe7\x36\x8a\xae&\x16\x99\x84\x39u\"x\x90\x9a\xed\xe5\xfe\x98\x37Y{$\x66\xb6\xff" "\xae\x9d[\xcf\xae\xa4\xb7r\"\x88\x9e\x9aW\x45\x84JU\xf3\xf5.\xd9\xf3;\x1f\xb6\x36\x63\xed\x85\x89ro\xfe\x1aY\xadl-U\x31" "\x8d\x99\xbb\xb2/\xb0\xe1\xa4\x8c\xef\xce\xe1{\xa3\x8a\x45\x91\xd2\xd7\xe6\xa5\x92\xe6\x36\xfc\x93\x12\xe5\xd9\x81(\x31m\xf0z\x1d]\xb6\x8c\x63" "\xa7uY\xafSY\x41t\xc5\x1c\r\x91\xa8\x94\x03^\x87\xb5\xff\xd7\xd6\x03\xb3\xc6\xfc]\xf0\xcei\x99\xba\x9a:\xdf\xfb\x31\xef\xca\xca\x8b" "u\xb4\xca\x1a\?\x8cv\r\xeb\x86S\xf3 K\xe2\xa2\x92\x1b\xb1>q\xfa\xeb \xe6_#\x41\x95u\xd2\xc0<\xec\xc3\x9b\x97J\xa7\x45" "\x8dj\xa6n\x9c\x92\x17[\xff\xb3*\xcc<\x30\xf3q\x80\xe5\xbaM\xad\xfc\x00\x37\xb2\x15K\xd6\xa8\xfai;\xb1\x04\xb0\x9a\x1b;/y" "\x34\xf6\xf2\"\xf6\x9bP\x07\xc2\x86\x07^\xbc ^\xbe\x92u\xe2u\xdc\xec\xebr\x45\xf7WT,\xb0\xd7\x36h\xbf\xc6\\O\xb0@>" "\x99\x1e\xe4\xad\x9e!\x66\xd9x\xect\xbf\xfe\x44YK\x62\x1d\xdb\xd3\xb2z\xc0\x1a\xcb\x1f\x82L\x31\x31\xc7\x7f\xd7\xf1\x9c\xe5@\xfc\xb9H" "\xa5'\x9f\xad\xa6\xe6\x62\xe2O/\xde\xf2\x66\xe8\x82l\xf5\x33\x33\x99\x89\xfb{\x88\xb9\x37\xa4\xbf\x04\t\x8f\xfb\x41\x8dI\xcb\xb3\xea}\xf7" "\xc0\xc8\xe7\xe3\xe5\x80\xb9\x13\xac\xf7\xbd\x03\xac\xa9\xa5\xe6\xd5=\xe2q\xaay\x9f\xf7\x34\xb9\xbf/z\xa6Hs\xffTt\xf5g\xf2\x86\xef" "\x1f\x8e\xb0j\x94\x9a\xfe\xd1\xac\x0e\xd7\xb4\x30\x93\xe1X}\x86\xab\xa9\x08\x63]G/\xcc\x64\x43]\xbe\x8a\xf4p\xcf\x61&\xc7\x9b#\xfc" "Y\x05\xa5\x1a\xeb\x36P\xe1\xeb\xca\x15\x07\xd2\xc0 \xfb\xc1\xda \x94T\x95\xb1\\\x88\xa9\xb3v\xea\xb3\xe8\xa6g\x9fUY\xcb\xceT\xd9" "H\x10\xa2\x66\x97\xa9\xb2Q\x07\xea\x94\x83r\xdd\x95\xaew\xe2\n-]!\x86k\x84\x7f\xd1\xe4U\xfdQ\xd7\xe8\xc2+'J\xc3\x8d(" "o\xcb\xa4\xc6\x45WN\xea\xce\xd4\xb7\x99\x9f)yVv\r\xca\xa8\x9aMLTt\xc5\xf4M\xd2\x00\xcd|\xb1sP\x94\x7f\x8a.:" "\xe1K\xdf\x37\xc5\xf9\x8b\x7fM\x8e\xbe\x64\xb8\x0c\x8ar\xfe\x12\x66\x1e\x39\xf4\x98(\x0c\x9f\xca\x8d(\x1c\xc7s\xa9\xb8OR\x8a}%\x89" ":|O\xd4n\x61\xaa\xce\xbe\np\x7fqJG'Q\xe8v\xcb\xd4i\xa6T\x98\xbb@\x38\x01\x0f+@\xca\xfe\xb0\x10\xb8(VH" "\x41\xcck\xbfq\xb5/\x1e'\n\r\xa1L=\xae\xf6\x9d\x7f\xc7n\xb2\xf2*\xdc\xe5\xd9\x05\x99i\xb2=%\x44\xb7\x0e\x98|\xd4<\xfa" "]U\x82\x42\xd9\xd4\t\x89\xf6\x94\xf0\x91\xfb\xe4p\xb7\xd2u\xdb\xd7\xdbN+\xbb\xe1\xd8\xb0\xaar\xb4\x82j\xbd\x61\xfe\x0f\x85\xb8\xb7\x89" "\x62w\nM\x9b\xcc\x45\x85(\xc2\x89\xc9\xbeS*[\x99\xd9T\xe7\xefkR\xfb['J{W\xff\xf6\x16\xdf\xbf\xb1:\x00%\xb9\x45" "pyO\x85\xa6\x00\x18X\x08\x13\xaa\xe4\xc4r\x83\xe4\x18\x85\x9a\xf3\xf7\xbb\xc4.\x12Q\x9d\x45\xf2\x05\x0c\xf3\x83l\xb8\x99i\x9f\xce\xce" "\xdc\x8cu%W\xe1\xfe\xe6\xd9\x37\x61\t!\x32\xd9\xf4\xcdS\xd8\xc3\x1d\x02\x0c\x9e\x96n&\xc5\x35\x14\xa2 \x86\x99\x63,\xd7\xa5\x44\xf3" "$s\xcc\x61I\xe5\xadz\xf7\xc2\x63J\xd4Q\xd5\xc9\x1e\x39\x31Q\x8d\x06Y\\\x8a\xf9\xfe\xee\xe4\x00\xa3\x98\xba\x16\x92\x12m\xa5\xcc\x31" "|\xafI\xf6\xf4\xc3\x84W\xac\x99h\x8b\xc3\x64}\t\xe6\xfe\xbc`\xa6\x7f\xb1\x1f\xd4\x0f\xe1\x9bO\xb5\?+\xd1\xfc\x98\x39\xc3\x8fsV" "\x9c\xa0\xa2\x9a\x1d\xed\xfb\xd9\xe9W\x12.wN\xdf\x84\xd0\x0f\xca\xd3\x1b\xe7\xef\xf7[\xfc\x99\xff\xfd\xc9H\t\xab\x35R\xdb\xb5\xe6\x37\xff" "(\x8f\xe8\xa9\xea\xad\xe2\xe4Hp\xe6X\xee)\xc2\xdf\xa8Y\xb2Mp\x81\xc9\x9c\x84\x39\xa4\x8f\x33{#\x95\xbf\xeb#v\x19\x41\x05\xfd" "\xca\x1e\x43^P\xe1\x91\rH\x65\xce\x30\xcf_\xb9x\x0f\x1a\x87\x96\xab\x9b\xb2\\\xf3\xcc\x9e\xd1\x19\xbbt@\xed\xf0G\xd7L\xe6\x8c\xcd" "\xff\xccY\xacq\x91\x85\xfb,\xb7\xab\x63Hr\x0e\xe7\xf1\xf9\x8b\xd3\x92\xebU\x84.\xb0\xcc=\xd6\n \x83\xa3\x1bK\xeaP\xcdz<" "\xaa$\xea\xfb\x9b\x1d\xaaP\xac\x34\xc1\xd4\x1b\xcc\x14\x08\xc5'\x7f\x8f\xb8\xb2\xa4\xfa \x31\x31\xde\x07, \x94\xe9\xad\?x\x1f\xee\xe5\xcf" "\xe9\xe1\xac\xc4\x8c\xa7\xc8\x41\x1et\x66K\xe5\x80\x9d\x9f\x99\x07+\xc4\x94\xd1\xea\x33\xd9\x8a\x8e\x03\x30x\xca\xb3\xaf\xd0\x95=ZU\xda\x8f" "\xb8\xe4^\xb1\x30\x9a\xd2\xf6\x10]\xdd\xeb<\xe8\x1d\xbf\x1bg\x8b\xce\xf4\xd6\xbb\xda\x9fz\x0cj\x63\x12U\x62\xe1\xdb\xa3v&\xc1\x93\xc6" "\x95\x15>Z$\xd1\x33\x86\xea\x8e\xc4\xe2\xee\x61\x66h\xc9\xe7\xafS\x12&k\x88\x62\xa2\xe6\x08\xb2\x8b\x92j\x65[\x99t\xb4\xf7\x12\xa1" "&N\\%}\x99\x19\xeb#T~\x91\xbc[\x43+r\x87\xe1\xe7\x42RM\xc0\xb3\x1a\x46\x97\xdf\xd1M\x1f\xcb\xd2Q\xc5\x83\x8c\xab\xfd" "\x01\x7f\xb9\?\xd1\x99\x39\xd2\x06\xdc\x1f\xe3\xd1=\x63n\x99\x92\xa7\xf3\xfc\xcb\\\xfa\xf9w\x87\xcc\xe4\x19\x33\x8f\x41\xd3\xa5\"\xd9\xac\x05\xc5" ":\xc7\x98\xa0\xa4\xea`u\x8b\xe7\xe0\x66\xa9\x8b\xb7\x14\xaaX[Y\x37\x0c\x33\x41\xe1\x07\x91\x06L-\xbf\xfeU\x1c\x07t\x85\t\x88\x7f" "\x8a\xe9\xe0\x19\xeb\x0f)\xa7\x45\x39K\xb6\xce\x45\xbd\xeb$\xd6P\x1d\xc5U\xa1\x11\"\x44\x7f\x89p\xcb\xed\xec\"\x14\x32\x15>#\xf0\xb0" "\x92\xc5\xebsX\x9e\x93:\xd3\xa7\x12\xad\xaf\\iT\xd0\x44M\xe2\xcf\x97\x64\x8fv\xfe\x42\xfa\x14\xd3\xec\xdd\xe8\xdak\x9d\x46\\\xed\xfc" "\xc7\xbd\xcf>\x37\x7f\x10Q\xb7\?\x88`K\x13\xfe\xe9jNN\xb5\xc7\xf9q@\x35\xb3\x83,\xf4\"Y\x1d\xcf<[m\xed\x39\x82\xcb" "\x61\xe6\x39.\x36\xc8\xf9\x36\xbc/`\xa5YU\x9fM\xa7\x06\x62\xcf\xa2pz\xd6\x90,\x83\xd6\xff\xe4\xa4\xa9\xb0\x84\xf7=\xb6\xd5\x7f\xbf" "\xbbV\xa2\xa8\xd2!v\xaa\x11\xe6l\x92\x92j,k\x35%\x8d\x19\xaa\xe9\xc6gw\x8a\n\x0b\xc8\xd7\x46{\x8c`\x64^\xac\xe6\xf2\xa2" "\x8e\xd0\xe7\x17\xf4\xdb\xcc\xbcXn\xf8\x8a\xf0\xa9+\xf6_$\x8a\xc9\\\x95&\xe8\xbf\xcf\x34\x36\x16z\x38\x32\xaf\xec\xa7\x11\x32\x97~\x45" "\xf0=R\xdf\xb7\xb1\xa9\xd9=\x89\xa1\x38\x30\xa8\?Y\xd6\xa1J\xa3\xfa\x31\xd3\x31\x95|\xf6sKnq\xdf^\xad\xf6\xf7\x8a\x18\x8e\xca" "-\xae\xf2\x35\x9e\xe2I\xbdr\x14V\x99\x35~\x93\x97\xfc>\x42\xd8\x84\x99\xb7\xdf\xd5G\xc4\x02\xde\xcc\xa0\x7f\xf6\xdb{\xe0\x86\x35\xf6\xf9" "\x86\x45\x9b\x95\xcdWR\xe3\x05\x90\x41\xa3\x15\xc3qJ\xd4\xcd\x91\xd3\x12\xe0\x9b\xd5\xdd\xde\x42\xcc\x1b\x00\xc3\xb3W\x04jQ\x13\x0el\xd8" "\xe4\xd4\x8c\xeb)\xfbW\xec\xe0\xebw\xad\xf0\xfe\x84\xaaW'\xefp\xf1oQ\xff\x8a\x84\x1f\x16\xc8\x1e\xe9\xcc\x9bV\xe9\x1e\x9f\xd9\x9a\x16" "\x35Y\x90\xd3\x63\xe3\x93qH\xceW\xce\xdf\xcd\x0c\x0b\xdbPi,\xed\xa7\x01\xd5\x8e\xd7\xb7\?\xb8W/|\xf8\x83\x8a\xba\xc3/'\x96" "\x8d*\x83q\xc6r\xaf\t;\x30\x33\x13\x8e.\x08gS\xbb\x37\x13\xab\x97N\x30\xb9\x43\x99\x99\x38\xd5\xff\x15}l\xae\x10\\QU\xf1" "\x99\x84\x7f\x9c\x10\x83\x89\xf2\x15\xe6\xf0\x13\xab^L\xb0\x82\x96\x10\xb1t\x41\xfen\xbf\xee\xeb\xe2vp\xf2\x10\xf5\x03N\x39~\x90\x99\xb2" "\x33I\x08\xbf\x1f\xe5\xd4)\xed~\xf6\xc3\x88\x42\xcc\tz\xe6\x65\xa6\xec\x10\x00\xf5\xac\x1bu*\x36u\x94\xba\x44\xddz\x93R\xec\xc3\x15" "\xb5\x18\x90\xdfg\x1e\xc9_\xd5\x86\xe7\x14\x66\xa6\xce\xd4~\xe5/.\xf3\x8b\xf2\x14\x94\x33I\xb4\xec\xca\xc9\xcc\xec\xbcg\x61\x8d\x9a\x8d{" "\xd0.QMky\xcc,I(\xfdS\x8eW\x80\xbeO\xac\xdc\xa0\xee\xaf\xcb[\x92\x8fY\xf9\xfbs\xebQ\x32\xb8\x41\x93\\z\xc3\xca" "\xa9\xe1\x8fZ\x87V\x31\x92\xdb\xd1!\x37=\xbaS\xb9ig\xf6\x85\x45\xaa\x94;~\x11\x0b\xa3+K\xfaG\xb3|I\x1e>\x38\x35\x8a" "\xeeI\xdd\xd4L\x9e\x87\xbd\xf1\xa2vV\xb1\xff\xe2\xbc\x1d\x61\xa3\xa2\xfe \x9f\xael'\xcd\xba\xd3\x9aPj\x86\xdd\xb7`\x33M)+" "\x0c\xbf\x82\xd3VpVI\x99\xfb\xc2\x98\xaa\x33\"\x1f\xecgO%\xf2\xd9\xae\x03#\x88\xc2i\x8b\xfc\xc8\x90[\xdb\xce\x12\xed\xcb\xda\r" "_\x1c\x61\xcb|Y\x35\xf6\x0b\x83\xf5\\\x42\x87*j\xdfH\xc5\xd3j\xa8\xd8\xd0}t\x33\xce\xeeRJ^\xa4x>\x88\x8b\xc3\x38w" "\xc0m\xac\xd1|\xe9\x61\xc6\xd7\x98S\x9e\xcc\x12\x02\xa5\xea\x8fy\xe1\xa6\xd6\x0f\x08\xec\x00u\x43\xf2]\xfc\xb2\xf2\xff+\xac\xdb\xf6\xe6\xb5" "\x33l\x97\xfc\xce\xb3\x7fY\xd8\xe6M\xd4PS\xa9\xdf^\xf7\xc8\xfb'\xa7\xa5\xcd\xaf\xf0\xa1\xeeL\x36\xd9}\xe4\xd0\x98rN\xbe\xf3\xa9" "\x84\x9f\x87\x46>\x0f\xfa\x38\t\x0f_\xc9j\xc7x\xebLL\x8d\x99\xa7\x64U_\xc9qr\x31\xd9q\xf2\x05\x0f\xa0\x16\xa7\xce\xa8\x62\x62" "\xb3\x0e\x87\xafh \x99\xd0wtY\xa6\x1a\x9e\xfeGm\x46)\xa5\x93\xf5]\xcd_\x82\xc7U\xd8\x43\xde\xf8\xe5o\x44\\zs\x86\x95" "\xd6\xfeg\xed\xcaZ\x38j\xc6\xf9\x13\x9a\x65\xbe\x7fR\xe1\xf1\xb3\x8f\xcf\x8f\xf6\xfd\xfe~\xc9\xe4h\xd5\x37\xe1\x83\xfcGH\x14\xaa\xe8\xa3" "\xf3\x8f\xbaJ\xa9\xb8\xf1\x91V\xa7\xaf\x7f\x8a\x8f\xce\xea\x0fJ\x9f\xa6N\x15\xfe\xbcp\xf2\x01T\xfc\\\xf6,%\x1e\xd9\t\x8f\xed\xbb\xe8" "\x43\x05So\x19]\xb8\xc0TRT\x95:\xca|\x12\xae\xef\xfc\x16\xea\xdd\xfc\xbb\xd9\x08\xc3\xaa\xdc\x35\x8d\xa8\?|\xed{|`~n" "\x1c\x98\x17\xbe\x9d:=\x9d\x89i\xfd\x95\xdf\xc1\t\xce\x66)\x7f\xca\x15\xd6\nTn\xf0HV\x61\xb6\xe6\xf4\x98\x38\xaa\x8e\x91P\xd7\xe1" "\xc1%=\xf4\xa1\xac\x06\xb3\xde_\x34\x9d\x7f\x9f\xfe\xd0=_\xc8k\xfc\xb1\x62\xf2\xc7^\xd8\x1f:\xee\ty\x37\x95\xf0J:v\xa5\x43" "LP\xd9<\x33\"\x0bj@\x32\x83\x83\xc9\x1a\x83\x98\xd2\"{\x98\xb2\x18\x16\xf5q'\xca\xbf\xc6s\x05\xf9\x35U\x15\r\xfa\xbf\xbe\n" "\xd1\xcd\x91\xadH\xed(\x98\x1e\xfenwT\xd3\x1fR\x17\x38\x31\x13\x97\x06\x86\xe5\x31\xf3\x64\xaa\xc9YJ\x45/o\xae\xd8\xb5\x90\xad " "\xa6\x9br~\x1f\x9e]\xc5\x1a\x97\x9cJ\xd7\xc3\xa0\xaa\x61\xe6\xb4\x30\xba\xd2\xbc#[G\x10\x13\x65m\x44>\x99\x46\xf7\xa1\x10\xa3\x86Y" "\xedK\x00\xed\x12\x95\x9c\x93\xaa\xea\x18\x91\x1e\xc8\x64\x9e\x95\xab\xf0U\x8b\xe0\xec)[\x9d\xa0\x14\xdf\x41\xf9\xcaU<\xe9\xd3\x44\xc3\x13\x84" "\xeb\xf4\x61\xa2Vwi\xb5\x39K\xa9`\xf1\xc1\xc6\"\x14\x42\x8b%\x9f\xc9\x07\xf4*\x87\x8a\x8f^\xfc\xb3\xe0\x99\xbf\x08\xbe\xc7 S\x0b" "\xa8\x9eg\x18&\x16\x85\xdeQ!\xb2y!&\xb6\x08\x1fx\x9e\xccP\xb3\xa7\xec\x19\x01\x99\x13\xd1\x94\x36T\x1b\xcf\x85\xab\x85\x92\x98l" "NS\x1d\xcbw\x8d\x94J}]\xdd\xcc\xe7\x38\xf3\xb6\x34\xad\xf5\?\x46(\xb3m,\xde\xa2<\xc7~\xda\xec]\x14>\xfe\x90\?\x38\x97" "\x36s\x0b!|*\xb2m\x84\x32\t\xb3\x17\xf6\xf8n\x38\xcc),\x1d\x18W$\x93\xd4\rG\xe6\xb3\x37,L\xb3\x37\xd1\x33\?g'" "\x41\xf6\x86\x63l\xd9[\xf6\r\x66o\xe9'\x03\xfeG}\x7f'\n\xbd\xd6\x36!\x9bL\xfa\xb2\xa1\xe2\xfa]\xac\xeb\x81\xa9\xaa\xe0\xbco" "\xed|\x95\x1e\xfd\x92*q\xcbw\xc5\x16\x8c\xa8\xab\x03'\x1b\x8f\x62\xf2\xa6\xdc\xfa\xce\xed\xa6\xdcrRj\xf6\x96#\x41\x42\r\x0e\x44\xea" "\xee{H\x14\x0f\xf4}\x10\xc2\x39\?\xfb`/\xfb\x03k\xba\xc2m\x07\n\xef\xde\x83\xa4\x39\xf6Y\x89\x89\xc1\xdb\xec\x03\xcb\x17\xd0\xd2\xc7" "\x43t^\x03]\xd3\xb9\x15\xfc\xfd>\xa2_\x03\x95\x0f\xad\xa5\x94\x8e\xd7t':+\xf7\xed\x41G`{U{\xa9\xf5+:\x99-\xf3" "\x98V\x95\xaf\xb4\x42\x17\x0cT<\xc8\x04\?\xb9\x94\xd2=\xa2\x9f!\xfb\xc4\xec\x34\xfb\xa4\xce\xaf\xc3w\xf6\tg\x9f\xd8\xae\xca>\xb9\xd6" "!\xdd\xe1\xbb\xe5WOl\xc0g\x9f\x10\x92\x87T\x07\x0b\x34\x06\x45\x61\xe8\x43\xb8k\xe9\x10\x1f\xef\xbc\xf5\x44\t\x97\x37$\xef\xf1\xf0w" "\x8d_\r\x39\x8c ,\xf2{\xf4I\x15\x1e\xadI\xb8Y\x64\x87\xf6\xac\x86\xc1U\x93\x44G\x84\x10\xed\x0e\xe1\x64I\x32\x37\x1br\xe2\xa9" "\x90Ih\x88\xa8%\x42: \x08\x31\xb9\x44\xd8\xe0\xfe\x38\x1e/\xe4#\x1dr\x90;;\x8cj\xbc\x0e\x0e\x96\x0b\xafy\\{M\x86t" "\xba\x16\x62HS\x88\x91J\xa5\x36\x95\xb3\xaf\x88\x8f\xa5\\\x91\x88\xd6\xa5\xac\xb4\xc8\xe6!\xc9\xeb{\r\xae\xb3N\xd6i`\"~\xb4\x9a" "\x0f_\xce\xf0\xf3\x88\xc3\x37\xa2\x1e\xe7\x41y\xc5~\xcb\xb8\x8aK\xf3\xdf\x35\x0f\xb5\?~\x66\x8dP\xcc\x93\x9c" "\?\xd8\xfd\x05\xd3\xc7\xfe\xb2\xee/\xc1~\xd9\x8a\xce\xb7\x1c\x0b\xce\xbe\xfdj\xd8;\x61\xd0\xc4\x95O\x38\x95\x34\xfb.U\x46\xe5\x87V\x34" "\xa4T\xe5\xd6\x0f\xd6\x90\xb3\x1f\x41)o\xac\x90\xe8\x1c\x10\xa2\xc9\rZ\x11\x08\xf3\xe7\x94\x0e\x63P\xd1\xcfj\x7f\xbe\xa0j\x38\x97\xe4\xf1" "\x86<\x39\x30\xda\xeeQ\x31\x16\x9e\xfd\x90\xed\x9eS+\x1e~p\xaa\xe5WJ\xc5\xa5YJ\xd1\x37\x01*(\xfc\xa4\x95\x9f\x37\xcc\xe4\xd4" "\x1f\xc6\xc6\?\x17\xe1\xac:\xe3\xca}\xb2\xac\xfe\xc3\xb2\xf1\x0f\x04^\x04\x0b\xc6\xa2qH\x66\x9c\xdf\x46\xde_N\xe1U\xf2\xd2\xac(\x11" "\x0e\x9d\xbe\xe2&Up\x9f\x63@\r(M\xe9\xefv\x64L\xf3T\xde\x18\x1f\x9d\xc1\xddK\\\xe4\xf9\"h\x98\xb2\xc5k\xb4j\xa6\x32" "h\x96\xc3\xb3\x07W\xd1\x93\x39\xd9\x89z\xab\x39\xb5\nj\x0f\x43TXX\x84\x05;\xcf\x19\x7f\xc9\xe9\xc1`\xf8\xfa\x61\xef\xd3G\x34@" "I\xfb\xc1\x81\x16\xe1\x1d\x1f<\xd6\x15%\x93ql\xa8\xe0\xa8\x66\x19\x31\xd4\xe3\xbb\xe5X\xaat\rl\xbb\xcb\xa6\xa6|\x06\xf1\xc4~\xbf" "\xe5w\x11\xa0LY\xe0=\xdf\x7f\xe3\x1c\xe7\x41\x1f\xaf\xd3\x37G\xa5\xb3\xdf\x61\xfe\x81\xbc\x45\xee\xb8\x96\?\xd0jQ\xd2J\xc2\xfb\xfa\x13" "\x9c\x66H]J\xeb\x9d>|\xaa\x90\x89\xff\xd8\x9b\xf3\x63u\xcd\x1f\xbbk\?v\xae\?q\?\xcf\xbe`\x31\x31t\xa2\xec\x90h\x66\xe5" "<\x80\xb8\x46\x17\xa5\xd2\x8c\xf6v\x94R\x88)\x9c(\xbe\x96\xaa\xaeH\xdc@\x65\x35\xac\x1c\xec\x8foL=\x91\xe8]S\xae\x9cQ\xef" "G\x03<\x96Vq\x7f\xc7!\x8e\xd4\x66\r\xae\x94\xda\xbc\x36n\xce\x34|\x95\x9f\x15\x1a\xc0\xe0~\xf9\xb4\xb7\xe3\xb3\xae'\x44\?\xab\xb0" "\xf8\xe9\xe4\xbc&\x98\xe1\xbb\r\xeb\x88\x42\xb7\xa5\xf0\xd0~\x88\x19\xd2\x42\xcc{\xa1\xf7\x0c\x94.}\xf2\x35s%\x45\x12s\x63\xaa\xf7\x1f" "\x96)\xa2Z\xf6\x9d\x33\xdbo\x8f\x97\x8c\xf5\xd2\xc8px\x87\x45\xb5U\xc1y_\x88\x46\x9c\xf0\xed\x42\xc7$\x91\xfa\x45\x61*K\xae\xc0" "\x37\\\x99\x31^\x19\xfbN\x34\xc1\xaa\x89Z\x15\xdd\x0c\xcfW\x1c\xf0\xd6uO\x1a\x46\xd7/\x46^zxx\xe6L\x9d\x04U\x38\xdf\x98" "\xea;\xd5\x99\xb8\xfc\xe5\x8a\xd9,M\xd4\xb3i\xbe=%\xe6\xb8\x9b\xfe\xce\xfb\x41\x62\xba\x9b\x1e\x14\xbb\xddhV\x92\xef$\x93\x66L\x99" "S%\xd5\xc3\x01\xe7xS\xb9\x03\t\x15\xa6\x8c\xc3\x64\x46\x46\xd3\x9d\x44L\xdd\xd0\xed\x8dj\xd3r\x33\xfe\xcc\x87\xedsW\xf4Us\x93" "N\x97\xa2\xd0\x35+\xf4\xbd\xb7KN\x1dQ\x44\xfdI\xd4\xf9\xc4\xa9%\xc3\xb5\xfd\xe6\xa2M^\x32\xc9i\x98Wy\x07\x8fn\\\x45\xd5" "W\x7f\x93\xfe}#\x10\xd1\\\xf9j\xbf|\xb3\xa3ON\x35\x32\xcf\xd5\x05\x15Jr!\\\xc3\xc0\xdf\x9f\x9f\xd4Vi\x85\xb0\x1eK\xf5" "\x94M}\xa6\xcf\xfc\xf3\xc4U*\xb9\xb3*%,s\xaf\xec\xfe\x16Vy\xadl\xe0\x82:\x66\x8c\xb0)\x39\x46\xafWv\xf8\x9a\x30\xcc" "\x10\xa8i\xad\\J)\xf6\xf3\x8b\xba\x61Z\x43P=\xe5\xe8\xc9\x19\x94\xaf\xb0.G\xe2Z\xa6\x1c\x39\xd9)K\xf3\xac\xc8\xce\x16(\x39" "W\x7f\x87\x44\xe9l\x9f/>\xc6\xe8\x87\xa9\xce\x9f>\x0boPOo\xba\x31\xc5\x93g\xddPx\x98u\xfe~\xf7\x39j\n\xc5\x42=" "\xa7Q~R\xd9\x46|\xcc\xc4(-\x37i\x46\xb0\x63\x31Q\x93zZY\xae\xac-\xbe\xc3K\xc6\xea\x32\xb5\xfbW\x61\x39JU\xc8\xcf" "\x95\xcc\x1aX\x30)\x0f\xc9O\xbe/\x08\x63M\xca\xad\xa1\xf3\x37Tt:\xe4\xecLQ;\xa6\x82\xfd\xc1\x36\xf5\xdc\xf7\x39\xa6\x94\xfd\x45" "\x43\xc7\x44v\xfc.\x03\xe1\xe8\x92q\x05g\x12\xda(g\x81\x8fr\x87R\xa0\xeeG%\x8e{\xa8Z\x91\xab\x84\xc8\xbe\xb6P\x9c%)" "\xe4[\xac\xf4/\x06\xe8\xd2\x12\x62\xce\x8fr\xe9\xd4\xf2k\xf1\xe1\x8a\xb5;\x31\x31$,l\x15\x8d\?$jq\xa0\x9c\xad\xa5\xdc\xc3\xe0" "\x36\xcb\xca\xab\x98\x98\xf6\x04j\x93\x18\xde\x9d\xa2\x30II\xf8]\xd6\xb3\xfa\xe1\xe5p\x0e\x91\xf2\x44\xa7\xed\xc3_K\xd5SZm\xed\xbb" "\xa8\xb3\x81\xb2\x07\xac\xf4\x41\xe5\xeb\xe5\x89\xa2\xa7\x9d\xb2m\xec\x1bG\xc6\t\x99i:\x13O\x34\xa8h\xf7\x43o\x31Q|x\xc2\x0b\xe3" "\x8d\xf1\x9b\x84\xe7\x9b\xf2\xcb\xa9\x35\x9e\xa3QJYjW\xa5\xe3\xd6\xfeY\xde\xce\x12\xfep`\xfa\x97P\xc9/+u\xa9\x8e\xc5\x95\x99" ")\xdeMvN\x08oyo\x38\x38\"\x44\x00\"P\x12\r\x07\x39r\x87\x88\xbd\xa7\x44\xabJ\xd8\x61\x1a\xc0\x92L\xe0\x63\xea\x99\xf8\xb1" "\xe2\xcbRP\xe8#\x44\xb9\xaa\x1e\x9f\x1f\xa7\xc6*m;K\xf9\xc3x\xc2\xbb\x11\xa3\x9fP\x88\xd6\x91rj\x64\xb2\xe2Tj\xa5\x1d\x65" "\xc3\x33\xe7\xd8\xbc\x92O\x99\x33\xa2\x95;\xb2\xc8\xa4\xbd/\x95R\xf7\x83s\x81\x85\xe7Ls\xfbK\x1e\xc5\xd3\x03'\x44\x83\xa9\xfb\xc1\t" "\xd1\x42t\x04\x08G\xbc\xb6\xfd[\xd6\xa9m\xc4\xf1\x85\xab\xe8\xf4%Q\x96*\xf7\xdf\x38\xaf*\xeb\x8f\xb9\x96V\xf7/;\x1c.\xccq" "q\x39%\xefi\x8bn~\x39\x0b\x38\x97;\x0b\xe0\xff*\x44\xe8\x9e\xdc\x99\xbd\xecg\x0co\x12\xa2\xbf \xd7\xb5\xadJ\x1d'\x66\xc6\xd0" "M\xc7N\xcbu\x35\x9b\xb4\x10\xe7\x61\xee\x32>\xc0[\xd1\x63\xd7\x91\x10=\x9c\x42\x8d\x15\xab\xbc\x1fr\xbdV\xaa\x94S\x95\x86)\xfa\xde" "w\x91I\xf7t\"\xae&\xc8\x1aU\x07\x87\x87\xf7\x41\xae\xc7\x86;\xa2\x0e\x31\x02\x11\xd5\x13N\xb9\x97\xf6\xc5\xca\xf5l\x7fW\x61\x06\xb7" "\xe5\x06\xcb\xee\n\x83\xc2\x17Y~\x0e\xbb\x13V\xc9]\x31\xc4T\xa2\x98\xdcL\xed\x11^\x44Tk#\x8a\xae\x18\xae\xd8\xf7&J\x63\"" "\xdd\xc4Y\x64\x00\x37\xf6\xa2\xdf\xc0\x1b\xf7Y\xaay\xe8\xb1\x7f\xe7\xb6rKj\t\x01s\xf9\x1b\xf6v\x81\xf1\x44'\xaa\xd1\xa1\x34w\x13" "U\xb9\xe3\xe8\x63\x9b\xba\x04;\xc0\xed\xefw\xcf\x38'W(\x62n\x83\x62\xcfIg\xa2\x9cu\xd6\x0b\xe1\x14\x02&\x1f\xa1\x0f@\xd9%" "\xe1\x1b#\x84\x87\x0f\x98|\x15^\x01\xb9[u\x10\x80\xeb\x16L\x86JTs\x43\x9e\x8f\x9d\xc9\x1c\x32Q\x97s\xfa\x30\x89\x89N=!" "\x06\x9c\x95<\x7f\xf6\x04\t\?\x8f\x9c~\xe4(\xf3\x89\x05\xbc\xd5\x94\x34\x98\x9d\xf8>\xe4\xe0\xc1\xd3\xf8\x7fr\xeb\xdf\x9f\x96\xaf\xf2-\x9b" "\x99\x98\xe3\x39\xcf\x8c^\x8f\xc2O^j\xbc\xeb\xb1+'w\x8b\x45\xd3\x95\xdd\x99\xd3\x8f\xa9\xa6\xbb\x63\x89\xc2\x08L\xee\x89\x8d\xb7\xdc\x13" "\xfb\xd8rO\xec&\xca\xd9\xdc\xc2\xdc\x13]Is\x03\xac[\xad\x84#vn`\xc5\xc3\xc0\x32\xd7\x41\xe2+\xac\xee\xca\r#\xdeT\xb8" "\x0b\xea\x1a,\xcb\x94\x42\x44SUl\x92\r\x83\\\x83,\xc8M\x1e\xd3\x64\x9bih\xb5\x98\xa1\xbd\xe0\x43\xc6sQ\xbe\x90l\xd2\x0c\xb1" ",\x8e\x92\x35\xe4!V\x30]\xb1\xd3\x42\x14\xeb\xbe\x43\xab\xb3\x0e\xd9\xe1\x97\x33\xdf\xc2\x9c\xcd;\x16\xc2u\n\x8c\xd6\r{\x83\x86\x88\x17" "\xab\x64\x36\x32\xe4(\x16\xc7\xab\x44\x1d\xda\xd6\x0e\xcf\x00\x91v\x95\x18\xb5\x16\xf6\x8d\x98\x19\xab}\x16W\xea\xb6\x31\x99\x9a\xda\x05\xd3\x16{" "\xb8\xa0\xc2|&Z\xa1>\x33\x64w\x81p\xce\xf3\xd8\xc3\xd3\t\x44$\xc2oW\\\x91\x94\x8a\x15\xc0gm\x37\xe6\x8b\x96m\x9a\x8a\xce" "\xb7\xae\xc2\xf2qJ\xc5oO\xae\x34\"\xd9\xa4\xcdy\x85\xa2\x30\x07\x12L:(\x44\xb1m\xf5\x1c\xf4\xdb\xe4n\x17\x8d\x8e\xad\x1d\xf0L" "\xffM\x30\x38\xbc\x62(\x01Q\x98\xa6)\x44\xcc\x1b!\xa6\x92\x82q\xa1iWh.U {\xa1r\xcf\xf1\x04\x0f\xfa%\xc0\xe4\xef\xdc" "\x0b\xd6:\x15\xd2\xc1$\xf7J\xa7\x9e\xdc\xab\xd5j^\xad\x9d\xfaj\xe9\xf0-\xcc\x63\?o\x96T'\xd6,\x9dX\xa3\x63\x42\x87\x98\xdc" "$\xc8,\xc8\xc2\x9a\xc4\xd0\xa6\x10\x01\x85\x84\x08\x06$\x64\x39=\xa1\x03:\xe8\xbb\xb2SVZy\x01s|\x11\xd8\x31\xd4{\x64\xc6\xdd" "\xdb\xf3\x32/+!\xdf\xcc\t#\x9a\t\xd9^\x9a\x30n\x87\x10>\xa3\xa0\xffTM\xfb\xb6\x98\x1c\xcb\x17\xf3\xb2\x43\x8ep\?&\xf1\x1c" "\xd5\xcd\x89\xbd\xcaS;\xc9)\x83\x32p\xb6\xae\x07rS\xd6\xe9\x99\x45\x93\xcd\x1b\x35\xad\xda\xa1&\x1d\xc6\xc4\\\xda\x17yGgV\x8c" "\x08\xdb\x46<\xd4\x99T\xa6\xe9@(\x66\x86\?\xb5\x17^\xe9G\x16\xd3n\xda\xcc\xfaO\x66\xea\x1f|u\x8d\xb5\x01U\x61\xb0Qh\xe7" "'\xc4\xfa\x44jVtL\xd9\x12\xedL\x12\xab\xdd\x97\x19G|\x34\xc2^\xce)\xa5\xd7~Y\xb0\x06\xc5,\xf9M\xb3i|%Y\x07" "\x9fq\xd6}n\xc6!!\rXg\x17\xc0T\x30\xb3V\xd9\xcc\xefT\x32\x46Ms\x39w\xd3\xf2\x8e\x99U\xc2\x95\xc9\x85\x88\xe9\?\xdf" "v\x92[\xb5+\x18\x91\x11\xce\x38,\x02r\"\xa5\x98p\xb9\x17\x1e\xf2\x16\x86\xed\x65<\xde\xfa\xb5SY\xaf\xc2\x8c\x1d\x88\xa0\xd6\xe1J" "%*\x16<\xca\xd4\xddJ\xf6\x30;\xb3\xf2t\x66\xc9o\x66\x05\x84\x90\xbb\xb5\xe6\xb1\xd2\xf2\xda\x19''\xe4\x66\x08s\xad\x64\x9f\xdd\x8c" "\xb1\x9f\x85\x13\xde\x14N\xd4\x07\xfd\xc1\x8b\x19\x9d\xf2\x1c<\xbdqr\x1f\xcd\x1dO\xda\xd3\x9f\xd5YgX\x95%\xcc\xcd\xe5\xcf\xe9\xeb^" "\xa9\x62\xcd\xfe\xcb*\x30_\x9c\x9a\x64\x9f~I\x9b$\xadr-\xe3\x97\xd3\x16\x30\\\x97\x39\x95$\xf7\x65\xf5\xe9\xa5\xf5t-\xff\xde\x8d" "\xa5\xd4\x87\xec~-\xad\x64S\x86\xd5KK\xc2\xaat\"G\xa2V\xce\x80\x35\x44\x98\xb6\xf6\x32\x95\x0e\"\x31#\x33\xc5Q\xd4\xdc\xd2\xde" "\x86\x65\xd0\xde\xf8\x31\x83\x61>\x31\x99\xca\x96tR\x11\x66~\xc8\xee$u::\x1e\xfcw:Z-t\x93w|\x19\xf6\x7f|\x8f\xe1" "\xe4\x92\x64\xb3\x64i=\x30\xcaH\xea\x01+W[\xd9\xbf\x95xK\xc6\xb1\x12\xba\xee\x7f\xcb\xa7\x61\xbe\x98V\xe3\\J\xc9\xef\xa9\x36\xa3" "\xd4\x37\xa5\xe9\x14V\xcb\x9c\xea\x46\xf5\xb1\xfdWY\xf3\x44U\xf4\xd1M>\x63J[\xfa\xf3\xd9\xaf\xd6vkW\x0c\xcd\x9a[\xc9\x9f\xd3" "\x03\xd8Siu\xfd\x9f\x8fu\x18\x9cM\x94Ux\xa5g\x99\?\xe0;\x9d\xcf`\x61/R\n\x9a=j\xe1\xf9\x0c{\x9d\xc0$X\xaf" "\xa8\xf7\xf7}g\xc1>.Q\x08\xe4\x99\xcf\xb0\x33UJ~\xd4\x9d\x41Mx\xefg\xae\xc2\xd9\x88w\x13J*\x06L\x07\x89\xfa\xe7\x33" "\xc6\xd8\x80\xda\x9f\x66\x92\xcfV\xf7\xac\x61P\xa1\xa7\n\xf4\x95\x86\x45\x61q`\xf2wy\xc5\xe8\\P\xd2\xa6\xc1\x8a\x92T\xc9\x00\x9a(" "\xd4Q\xf2\x19,v\xa2\xb4\xab\xdf\xdf\xf7\x9c\x7fWR\x64|\x98|\x91\xce\x0e\xf9\x32\x9d\x66\x84\x88\xd6'\x44\x7f\xaf\x10\xb3~\x94\x03\x12" "\xd9\xafPW\x93V.p\xf5\xe5\xb0\xd1\x90\xffX\xa4T\x15\xc2i)'\xc6-\x89\xe4\x0c\xca\xff\x94\x89\xe5G\xfe\xd4\xb4\x95R\x8c\x8c" "+\xea\xe7\x14\x8a\xbf\x8bN\xf9\x0b\xce\xf2\xcf\x97\x39\x64/\xa7\x00g\x90|\x85.\x01\xf9\n\x83G\xe6\xadtSV\x9d\xea\x83\x8e)\xed" "\xf0\xfft\x32\xc3\x30s\x65\xa6\x11\xd5.\x30\xd9\xdd\xb2\"\x15\x61v\x31\x42i\xf7(O\xa1\xc1z\xa9\xad\xd9N\xaa\x1b\x18\xbaH\x44\xa1" "\xae\xa2|J\xf6\x0fw\xe4|\x83\x85\xb3\x10\x85\xb3\xb0\x30w\x46\xf3{K\xec\xaa\xf6\xddV\xd4\xe0\x89\x04\xe5\x92.\xb7\x84R\x90j{" "\xfd\xa7\xa6\x64\xed\x96\xac\xcf\xc8\x66\x39\xe9\xe8W\xd5rr\xa4\x06&k)\x62\xb6\x66\xce\xd4%\x8a\x62\x41\x04\x93\xde\x8c\x62\x32\xe9\x35X" "v\x83\xbe\x9a U\xf4zJ\xd7\x10(=\xefG\xde@\x36\"\x84\xae\x1f\xdb\xfe\xb2\xb0\xa0+\x9a\xb0\xf2.\xaa\xa4\x13\x37\x39\xa3.Q\x05\xfb\x45" "\x65\x9a\x94\x81\xda\x0f_\"O\xbb\xe8\xaf\xb4#\xb6mk\xfb\xdc\x89\xde\xdb\xb7\x94\xf2\x87\xa9\xf3\x9a\x32\xcf\x1c\x8a\x15\xd5\x61\xe2`k\x45" "\x88\xf2\x0c\x0c+\xaft \xa3\x9aW\xe5\xcf\x95\xd4\x7f<\x45\xa8\xba\xfc\x0e\x0e\xb6i\xc5|\xcb\x94'mQ\x89\xc3\x99+N\x96\xa6\xda" "<\x87\xdd\xac+)\xc2,\x17l\x84_v'\x16/\xe4\xfa\x8e\x0bW\x42\x45\x87K\xedT\xb3\x97,z}\x32\xbeJV\xee),\x1a" "\xf3\xed\xb0\\\xbe\xc1\xee\x32\xe1\x19_i\x46n\xc8\xdbz\x1c`\x12\xd5\x8d\xca^\x45\x9dU\xf7q\xc3\x1a\x17T\x34~O\xcc)\x1f-" "\x03\x34\x83\x9e\x06\xd4\xdc\xdc{\x9aJ\xd4\xfe\xbe\x18\xdc\xdc\xf8\x36\x06\xd6T\xb3\x65|\x33\xdaINO\xc8w\xa6\x65\x0e\x1b\x08\x37\xf0#" "\xba\xbc\x86\xf2\xb7\x46\x97\xed\x91\x64S\xdb\xa5T\xbc\xc5\x83\xb0^\xc1\xfc\x85\r\x30\x33\xef\xba\xb0\x07z\x61\xef\xb0R\x87Ml\x95.\xd9" "\x10\x14\xf2\xc6Wg\x34X\xb3+\x89\xcaV\x7fT\x05\x8fX!\xf3\xe4\x8b\xe0\xc9~\xfbv\x45\xfe\xe4\x9d\xf6\x30.\xe8\xdf\x9c\xbf`\x05" "O\x88xR\xc2\xea\x39\xd9\x1d\x38uY\x38\xd4\xb4\xa1\xe2\xe6\x86\xed\x16Q,\xb3\x94I\x1c\x19U\xb8s\x17Z\x1d\xc8V\xac\x02p\x11" "\xbd\x0eI\xfb\x96\x9f\x07\xd6\xa9\xcc\xc5\xe7-)\x13l\xe5j&\xb5\xbfO\xfe\xd6\xb4\xfe\xef'\x61\xb9\xfd\x9fO\x8ey\xf6\xf1\xed=\t" "\x8fx!\x93\xda\x05\x87\x9c\xf2\x17\x0c\xcf-<\xcf\xe3v\x95L\xf1\x99\xec\xef\x36\xe4\x30G\x62\x1aG\xfe\xc6\x9e\xd5\r+\xcaq~\xeb" "*\xce\xca\xdfUZ\x15ZT\xeb\x43,\x9drJ\x05\x0f\x1e!\xfc\xa3\xf2\x37\x41\xa1\xe2\x0c*\xd9\xc4\xc4\xd4_\x98V\x10\xc1\xbcjZ" "~\xa3\x8a\x61\x01h\xae\xbe\xdd\x64sK\xcd\xb9%\xd7\x9b\x00\x1d\xee \x83\x08\xc2\xdc\x1f\x1ch\x88\x9d\xe2GrX\xbe:\xca}\xa6\x13" "\x16y\x65\x1c\x80\x02\x93\x33\x61\nSrp\x1a&\xe3\x8f\x88\xc9<\xe4\x86\x11`\x41\xcb\xf8\x61\x9e\x0f\xddLv\xd7xu\xfe}q\xe9" "\x0c\x1a\xfd\?s\xe1&\x07\n\xcd|\xa3\xd9\xacI# \x39*&,\n\xdb\x37\x64j\x08K\x14\x82\x89\n\x11xS\xb8:u&'" "\xb8:\xd5\xf0\n\xf2\x1b\xb8\x44\xa4\x36\xd0\xbd\xcf\x37X\x1e\x02\xb5\xda\x31\xde\x9e(\x16j\x37\xec\x0b\xca\xdf\xf8\xb5\xea\x94\x9d\xf1\xa3\xe5W" "\x37X\x1c\x96\x94\xaa\x03\x9d\n\xa0\xc2\xf2\xdc\xea\\\xa6\x38i\x08*\xae/\x12\x95\xe5\xc5\x85\xf0Y\x02\xad~v\x83\xc1\x66y\xe1r\x7f" "\xca\xcb\x0fU\xb1\xd4\x84Y\xfe\xdeX\x19z\x43w%\xa5\x9dj\x61\xe8L\x62\xc2\xbb\x8a^&\xae\xa2\x99\x85\x84\x13\x85Y\xbd\xc2\x43>" "\x83\xf0\xe6\xc4\x99\x44~\x83\xf2\xc7,\x66r\x63`\xc6\x85\x65\x88\xee)l\xe0|\?\x98\x96S\xdc\xd0\xcbI\xb8;pj\x96\xca\xa2H" "\x95.\x82\xf7u\x96\xa8\xaf\xb3p\xd6I\xa9\xfd%\xf2\x61\x0b\x93\x07\xa6\x9e!\xc3\"\x0b\x99\xd3)\xfdTu.\xec\x80O$\x42S\x33" "\x7f\xe3Z\xe8w]L\x7f\x8b\xd4\xb4\xdf\xaai\xa9\x8a\xa6';Q~\xfdjN\x92\xafK\x9e\xcehOPt\x8aW\x93\x99\x82\x65`" "\x37\xf1\xf4\xde\x89\x65\x15i\xb2\x37\x38\x7f\x43'\x35\x90\xc3\xe2\xf9[k\x10\xde\xb2Q\x9e\xbf\x65\x8f\x64\xde\\\xc4\x85\x1b\x1c\xf3!\x38\xfc" "`\x0f\x98\x98|\x63\x1e\xd4\xfb\x32\xbf\x93\x1a\xa3+\xf9\xcf\x30\x85\xa2\x96\xdc\r\xdd\xb8\xf2\x0fV\x33~\xb0\x92\xe9!Yu\x44~\xc2\x92" "\xf5\x31\xb5.\x18T;x\xa9p`\xdc\xd5>\x8b\x8a\xc3\xa3\x65'\x8f\xc1\x04/\xf4\xa3\x9d\xfb#\xfd\xf9\x84L\xb6\x8f\xdc)'\xa2\x8b" "*\xd8\xa7%\xfeZ\xc3x\xba\x0f\x9e(\xa6\x9eG+\x95\x95\x1a}\x8aM\xe2G\xbb\xc8\x81\x0e\xdf\x9d\xdd\xb3wW\x14\x9cs\xf2\x83\xe0" "\xf8\x88\x84kv~\x10\x1e\xd4I\x9e\xcf@'Xtn\xed\xb6\r\x42t\x45\t\xdfqm\x83\xa8}\x41\xa2\xab>o\xc3\x17\xc2O$" "\x83\x01=\xda\xad\x8c\xd9Y\xfdw\x97\xe8\x35\xd2\xcd\x8e\xdd\x64\x42\x66v;\xf6\x19\n\xd1\x03\x9d\xdfYy\xbe\x43\x13\xae\x9e\xde\x80Q\x08" "\x61\xaf\xce\xbeR\x35q&\xbb\x08\xf1\x1d\x85k\xd2\xde\x38\xa5\xa4\xee\xfd\xf1\x33\x15[\x9b\xbb\xf8\xb3&\xfb\x88\xb7\xb8\x37;\x8e\xa6\x14\xca" "\xbf\xcb\x9a.\x9ax\xb2r\x15\xefN]\x31~\xbe\x10\x19\xb3\x10\xdd\xf2\xa0\xce\x36\x45\xe8_(vl\xc2\x0c\x0f\x37\xec\xe1\xa7r\x7f'" "\xa8\xc4{I\x14\xa2\xeb\n\xdf\xce\xa5\xb2\xc3\xfe\"Q\xb8\x19\x85r\x88\x88\xc3\xa0NvG\\>Q(@\xc0\xe4\x8b\xef\x36=\x44L" "\x0c\x99\tu\x31t\xa1\x46\xa4\x9f\xf0:\xe8\xf0\xa3\xe4iJ\rG\xcf\x06\x9d!\x89\x42}G\x14\x42\x93\n\xfb}\xf2\xa9\x91\xc4\xe2Q" "\x35p\x06\x8f#\xd6\xa7\x44\xbd,\xc1}\xef\x8d\x44\x37\x46\xa1\x66\xeb\x30 h\xae(\x34\xad\x85xs\x85\x9b\x9e\xd6\x80\x10\xc9\xa7PK" "\xc7`\x12\x85\xb9\xf5`\x62\xa2\xaa$\x44;\xaaP\x63\xd7\xa4\x10mt\x30\xe9\x94\x84J\xfd\x36\xacTu\x91j\xc4\xac\x87\x92\xff\x89Z" "\xbch\xe2G\xe5\xc5\x15\x43\x08\xb8\xb2;\\\x0b\xbfWz\x45\xb9\x43(\xe6\x14 s\n\xd9\xe5T\x9d\xc1\x7f\x7f\xb8+\xf5\x86L\xae\xe4" "H\xdbV\x8d\x32#\x1f\x88Z\x91\x9c\x1b$\x44\xe9*\x9cJ\x05~\x88U\x17U\x19\xd9\xbc\x04\xa3\xe2\r=\xc0\x0bG\x1c\x19\x16\xa2\x97" "Y\xb8.\xeb@\x39\xbc\x66\xa1|\xe9^*\x1d\xb5\xff\xfb,\xdem\xfc\x33\xd6\x35\x0b\xe6\xd6$\x9c\xf2[\x8c\x95'\xc4\xe0\x18(/ " "\x0b\x64(]#\xc5\xce\x65\xdf\xfd\x08\xafz!\x42W\x16Z\xf4\x0f)\xb4\x38X_\x38Kj\x84\x62\xc2\x45\x01T_x\xf4\x31\x89\x42" "&/\x9c\xfe\xb0[\xaap&\x37\x9dSm\n\xf7\x92J\x38\xbdH\xcd\xaa\xfd\xe6\xde\x17\x08V\x13\xb1\xdc\x84LY\xf7\x0c^U\xb8W" "\xb7\x12\x64\x81\x62\xd6\xda\xac\x33\x8a\x89\x61\r\xe5u\x80\x19\xc1\x62\"\xeb\x13\xa2\x83^xs\xc4\x85M\n\x1a\xf2/(\xad\x82\xc5\x80\x1d" "\x32\xbe\x41\x43`\xcf\x07\xdc\x80\xb8\?\x05[\xa3\x06\xf4\x13\xc3L\xe8\x1f\x66\x9c\xa6,\n\x37\x95\x9b>QKL\xf7\x1a\x11\x13\x13\x63@" "K`\xf7\xa9\xb3\xff\xf7\x02R\xd7\xf0\x9f\xfd\xc9\x9f\xdd\x30\xf9\xe3\xdc\x19\x98q\x61+\x7fT\x15\xdegz\x33\xea\x0f\xee~\xbf\xaf\x38\xcd" "\r*\x38\x1a\xa7\x94\x8e\xf7\x37\x8bi\x95|\x66g\xa9\xeb\xfc*\xdfx`\xf6z\x0b\xa5\xea~\xcd\x43\x45\x18\xb0\x16\x36\xdeH\x14\xbf\xc2" "\xf9\x84Q\xff\xe4\x04\xf9~\xa6O\x34\xeeH\x33\xf7\x83\x63u\xa2\x98n\xef}\x45^\x35\x99\x43\xde\xb3\xc8\x16~\xf2\x9e\xd0\xed\x07\x64\x19" "!&<\x7f\n\xf7\\\x0b\x01\x0c[y\x86\x80\x10u\xd6\xe3 \x96\x9a\xb8\xaa\x81\x65\xb9X\x9b{\x31\xb0Wr@\xd7\x1a\xe1-\x12\xe8" "\xc0\xb2\xd1\xc1~\x8d\xfbo\xb1\xc6\x0b\x36\n\x0e\x06\x85L\xcc\x8c\x19J\xaa\xef\x85\x8c+i\xeb\xfbg\xf1\xe0\x41;,\xd1\x65Z\x98\xfe" "\",U\x61\xca\xbe\x1c!\x96\xff\x10\xc2\xbd\\\x38\xae\xb0\x35X\x98\x86\x87\x17N\xbb\xd8i\xf4\x8e\xfb\x32\x8d;\x15\xa7\xbd\x9bS\x39\x0c" "\xc9\xb7\x7f\xcaq!\x90\x15\x34\x98t\x30\xa4\xc9\x0c[M\xd6=\x61\xc6\xf7U\x9a\xdfw\x9a\xd3\xa1\x16Y\xf8\x64\xcfU\x61\xf1\xbbn\xd3" "U\x90u\x1c\x9f\x01\x00\x06\xd3w\xb6\x1b\xa0\x92\x99\x03T\xf5&k\xbdTR\x1d\x46WS\xa2\xd0\x11\xe4\x8a\xbd\xcdP\xba(\x05o\x1c" "\xd4\xe7 \x30hL\xc2#\xfe*\xba\xe4\xb7\xe9\x13Q\x1c\xb2.+|/\x06R\x08\xe3\x46\x15\x9f\x99W\x08\xd1\xe4\x13\x62\xe5\x11\x90\xcb" "\xcc\x14\x9f\x39\xa3\x1a\xa4W\x42\xf1\x95\xcd\xb2\xa2\x05\xb1).\xec\xd7\x0b;\xc3-\xb3\xfd\xe2\x96WZ\xb2\x98\xeb\xa5,\xbd\xc1\x85(\x9d" "KY\xe6\x30\xa5,_\xceR\xd6\x97\x95\x0eK\xe5\xe0\xe7\x12\x0c\x11\x11J\x88\xd5\xa5\x84\xb8\xc9\xa5\xc3\xdf\xef\x01h\x87\x38\xe4\xf0\x9b\x30" "\xcb\xcf\xc3\xa2\xbeJ\xa5\x16O\xb1t\xcc\x32T\xb9\"\x91\xd5\x97\x8e\xd9#/\xf4\x11m\x31\xf1j\x08y\x96\xca\xb0\xf9\xc6\\\xactl" "'tl'\xa4\xc4T\xf5\x81+\xbe\x46\x34\x11\xd2\x42LLz\x11\"\xb2\x83\xd0;>K\xc7Q\x8d_\x89\x0b\xdc\x9d\xff\x84m\xaf\xd2" "\xf1\xfey.\xb5\xd3\xe8\x61\x18\xbcKy\xbf\xe3p\x8al\x1eYr\x10\x13\x33\xffKO\x9c\x63 \x44\xb3\xb7\xf4\x44\xff\xd1\xd2\x98\xa5n" "I^\xaf\xac\xf1\xd3)\x9b|\xab\xdd\xa7\x1d\x97\xd3+\xed\xd8\x89[.j\x43\xa8\\\x64\xe2)\x17\x99\xa8\x84\x88\x0e\\.\x07\xf2\x0e\xbf" "tY\x98\x88\xc2\x84\x44P\x03\xf8\xa1.\x43\x85\x00\xd1\x30\xe3\xfaq\xa2\xf0(\xc1`!/\xdd)\xaf@\x36l\x17\xea\x9a\x85\x1e\xd1r" "Y\xcc\xb0Z\xf1/\x87\xd7\x1dr\x42\x1d\xddh:)\x1f\xfe\xaeN\xf7\xc5\x12\xcc\xa0^&O[\xc9\xa6\xebj\x9c\xbd\x62\x8a\x16\xf5\xd8" "#\xf1\"\t'\x05r\x31\xd7pYO\xfd\xfd\x31N\xfd\x30\x44,\n\x30(\xbc%\x11\x11\xb8\xa1\xd1\x65\x82\x81\nOwt\x9b\x82\xc2" "\nr\xb8'\x87Qn\x41\x9e\xceH\xb4\x97\x84\xb3\x36\x89\xc8y\xe5\xc3x\xcb\xef\xdb\x19W\xe5OY\x63\xa0\x1e\xd9%\x82}\x94\xeb\x01" "\xa2I\n\x11\x1d\xab\\g\xb4_!\xe2J\x95\xad\xc6\x05\x06\x07\xfd \xf3\n\xc5\x1e\x9d\xb2\xd4\xfe>@\xbep\xca\x07\x12\x61\x85\x85(" "\xe7\xcaG\xfb\xa7\x36\xf9\xfc\xea\xd4z\x15\x32\r\xa8\xd4\xbe\x45i \xc5\xafIJ\xedQ\xed-\xdb\xe8\x9b\x10\x43\xa2\x42\xd4Q\xcb\r\xad" "$\xe5\xb9\x89\xdeg \xbb\xddh\xa2\x8d\x04\x93\xaf\x16L\xbbyj\x32\xa2\x85\x98\x08\x35,\x44Z\xce\x9d\xfe\x1a\x8a)\xcf\x33\xf4\xcb\x11\xb5\xce\xbb\x99$\x1d\xcc\xa3\x14" "\xee\x98>,\xdf\x16\xae=\xa3\x62\xd8u\x30\x95\x44\xc3\xca\x89q\xe9L\x82\xda\x8a\xc2\xb0\x85\xf0\xe8\x98<+;\xc3\xee\x96\xae\x11\xaa\x98" "l\xac\x90PZ\xa6\xaf\xe6\xfe\xe0\x96\xe3<\xaa\x96\xce\xe4\xac:\xf6Q\xb7\xb8\?\xc9$g\xd5\xb3s\x65\xf1\xa2\x94\xe4NgY*\xac" "\n\xe3*\xbc\xfd\x66\xe0{(\xf9 QWM\xa7\xd5\x9eR\xec\x39\xd9\x0f\ts_\x99\xd3\tS\xd4\xed\xc2\xe9\x85\x81\x1c\x87|{\xf0" "\x34\x1f\xbe\x31\xe3\x0e\xc7v\x1f\xc7\x9f\xe4\xe4\xd4\xf3-u\x84\xddN\xdc\x64\x44J\x31\xdf\x99~\xb8\xee\x18\xe8\x89:\xfc\xber\xa6\xee\t" "\xbd\xd7|\x39\x36P\xf2\xb4\xf8!\xeb\xca\xb3\xdf\xe8t\xea\x94\x97\xc7\x8a\xfc&\x17\x31\x13\x9e\xb7\x8d[\xdcR\xa6\x97\xe8\xa2\xaa\xad\xce\x32" "\xdf\xc8\xc8\xf7\xd4\xe3\xab\x14\xdd\xec\x9c\xf2&\xb0\x1fM\xd4#\xf3\xbe\xe8\xb9\xe3g.i\xdeh\?|Y\xaa/L\x8e\xb7-\xfa\xd8\xa6" "^\xa4h\xc5;\xe7\xa9Y\x18\xef\x9a\xecv\xf6\x85U@.\xa1\x43\xb3n\xae\xae\xa6\xce\xdc\x0c\xdb\xcd\xe4\x83\xed\xa3S\x8e\xc6\x15\x14\xa0" "\xb0t\xc6yJ\x05\x85\x8b\x94\xf2o\xc6\x07\xb9h\xb0\xe6\xd0\xb7\xa8\xb2m\xad\xb0\x98\x8b\xeb/\x46>\x15\x36Z\x84\x97L\xdaV\xbdl" "Zm\xa5I_\x08\r\xf0\x9a\x31\xf2j\xb9t\xb1pr\x65|s\x06\x85oz\x04\x41\x85G}NuS\xc5\xbc\x81.\x0b\x65\xf3k" "\x07u\x11\xc5\xd5M\xa2\xca\xcf\x1c\x00\xa7\x42\xd8K\xa9\xc8p\xfe!\xb7m;\x9c\x8c\x04\xa5\x05\x84\x65\x36\xfb\xdc\x46W>\xd2H\x0c\xb6" "\x14\xa1l\xb3\"Vh\xb5Z\x35\xfd\x99\xef;\x63\xae\x37'\xe6\x03K\x17\x46\x33\x01\xb5\xab\xb9\x30\xe4\xf4\x8dr\xd3\xaf\x44\xb8/\xd4-" "\xbbm\xd9\xb1[\xbf\xeb\xbe\xd5\xa2Z\x0c\xb6#\xdc!\x19\xb4\xecQ\xb5\x82\x93>\xc9\x02\x43\xa9\x15\x0f>,U\x41\x33\x1fv\x1a\xe9m" "O\x65r\xd0$\x31\xe6/\x64\xbe\xdd\xe2\x64\x13\xe5\x9a\xc4\x90\xa9\x10\x63&\x42\xe6Y-\xab\xe1\xb6\xa2\xf2\x37\xc9\xeak\xcb*\xe6-\x8e" "\x9e\x08\xa5\xba\x04\xefz\x31\xefj\xfa\x05,\x43(j\x90Q\xe7\x9a\x83\x1e\x15z\xdc\x84[\x9e^\xbc+q\xa7QU\x03\xc7\x30\x66J" "YZq\x15\x8d\xf4\xc0\xf7\xb0\x65I\xb4\xb5\xbf\x82>\xfe\xfd\xee;\x19\xdb\x04\xa6\x15\xecj\xea\x34n\xfe\xe6\xd8j\x98\xc7\x41\xf9\x80\x44" "\xc7\x98\x10\xe3M\x42\x16\xbd\xc7\xc1\xd5%\xc9\xd2O\x19>\x8c\xfdH\xa2\x92\x19\xc6\xa2\xfa\xf7\xc1\xbc\xc4('\xa2\x98K\x1e\x07S\x1e\x9f" "\x91\x9c\x84\xcc\x07-\x98\xbe\x12\xaf\xc8\xb1\x95Q\xc7\x9c\xa1)\x44\x9f\xbf\xb0\xc6#\x87G<\xc3\x10\x9d\xcd\x42L\xa3\x01\xe9\x9aP>\x8e" "r\xbc\xb8\xa8\xc2\x8f\x18\xc1\x41\x08\x7f\xac\xf2\xb1\x15\x8f\xb6 \xa8\x90o\xe7\xb1\xbd\x85\xc7\xf1'\xf5\xbe\xc0\xdf\xef\xcfy\x17\xf7\xa3\xbcS" "\xbf\x85\xf5\x64\xcbg\\\xf0\x14\xd4z\xf1\x16O\xf2\xcc\xaa\x80m\xc6\x8dR\xae\xc8\x65\x95\xe3>\x62\x62\xae\x82\x10\x9d\x93\xe5\x36\x17\x01S" "NI>\x83\xb6\xb5\xa3\xdb\x41\xf3\x89\x64\xad\xa6m\xf5\xefv\xf0x\xa1\xff\x99\xb2\xdbt_\x15\"\x64\xadn/\x1a\xeds\xd6\xaa\xdb\x1c" " \x14v\x9e\x8d_\x64\xf7H\xff_tLMH\x44\xae\x83\xdf\x8d\xd3w`\x39\xac\xd2\x9e\x9d\x9a\x96\x0f\xb4\xadXhs\x1e\xbcp\xc0" "\x8b\xb3g\xa0\xf4\x63\x88iyY\xdb^\x9bv<\xc6k\xd5\xa6\x93x\xb9\x63YIW\x07\x92:\xd5\xf8\xfb\x93\x8a\x89\xb8\xcb!\x32\xe1" "\xaa\xe2\xd4\x18\x65\xc7\x35\x8e\x11\x63\x43P\xbe\xb2\x12\x11J\xeaS\xeb\x07W\x7fi\x18\n\xc1\xf2\xdc\xe4\x9c\x18\xa8xn\x61\x7f\xa8>O" "\x03Ls\xa5\xda.\xa3\x9fn\xe2\x16\xc5m\xbb\x8d|\xc9T\xd5\xd8\"\xb7\xa6\x11m\xab\xdc\r\x30h\x01\xfe\x99\x0b\xb2\xc8\x8b\xb5\x37U" "\xd8\x89\x99P\xba\xea\x05\xca\xaaq\x37`u\xae\xcb.\x64%\xaf\x35\xa8>\x92\xcc\x05\xba\x1c\x1cR\xda.\x10\xfd\x43\xc8\xb4\xd9\xb5\xde\x02" "\xaf\x82+\x7f\xbfs\xfb\xcb\xbc+I.~\xe7T\xf5^R\xa6\xd5VU\xf9m\xb0\x1e\xb1\xae\xd5;\x94\xc9Z]P\xd1:\xc7\xd8\xd2" "\xa2\x1e\xce\x9ct\x88V\xd3\xf6\xcf\xecG\x19\x1c\xfcX\x9f\x01\x94/\x90\x07%\xb9\xafu#\xa9\x8a\xc7o\\\xd6L\x95\xd4\t:\xc9\xc9" "\xf0\xd5\xe8\xb2\x17V\xb8\xb4\x03o\x96\xff\xdc\x8c\x7f\x1f\x88\xfe\xddv\x38\xc5\x43\xcc\xc3\xb6\xb1O\xb6;NM\xa4o\xf7\x89\xf2\x35\x0e\xa9" "\xb6O\xc1\xe4&Q\xbb\xab\xfd\x45\xcfUP*\xfau\x42\xad\x38|LU.Z\xd6\r\x65OY\xcdZ;\x31\x8fn,+\x81\xb2\xdb" "\xa2\xe6\xaa\x61\xed\\U\xf6\xb2\x9aio\x1c\x94\xafVGu:\t\x1b\xf3\x44\x9d\x9d[\x99\x02\x65OS\xcd\xab\xbb\xf4\x07O\xd9\xd4)" "$\xa1I\xa0\xac&\xa6\xa6\x65\x02\x30--\xd3\x8c+\xc9\xf5\xc7\xd5wOv\xaa&O\xa9;-\x35\x43\xcb_T\x31P\x89\x9b\xa9\xdb" "$\xa6\xb5\x84\x44\xd9\x45w\xec>hxz\xa9\x8bTS\x8a!~T}\x39\x83\xc2;V+\xb6\xe9\x88\xdcV,\xec\xbb|\xeb\xc2\xde" "\xc4I\xbf \x98V\x97\x80\x39\xf9\t~\x96\xae\xa4\xc1 \r\x04k\xa4v\x93\x9bxm\x87\xf5\x94\x85\x81\x1c\xe5\x9a\x64\xe3\xa9\xcb\xf1@" "\x30Z-\x38\x1d^\x94\xe5O\xd1Y\xdf\xe9\xa7\xa2\xa6/\xe4\r\x15h\xd8\xc1R\xa2\x8a\x33\x7fKU\xf9:\x8eT\xbd)\x97p\xa4z" "\xec\xa7\xf7\x62\x97\xa7\xe6\xdf\xe5\x89\xf2\x84\xa5\xe6\xdf\xbdQ\xe5+\x08R\xdd~K\xfa\xb5\x0e'\xdb\x90\xba-\xba\xe1\x1f\x15U\x9e\x19\xcc" "\x83\xcaW\xe6\x83\x8a\x9f\x32\xfeRSq\xc4\x9bj\xa3\x1e\xb4\x7fj\x1a\x65\xbf\xfd\x9e\xcb\x06I*\\\x8f\x8e\xaaTO\xfdt\xdf\xfd\x08" "\xb6w\xc1\xc1\x9d\xd5\xcb\xbb\xf4ZP~\x93+\x66`\xd6.\xe9z\x82\xf6$\x14\xeb\xa4z\xdb\x64\t<.s\xf7\xd6\x04\xe8\xc6\xf7\xbc" "\xbf\\\x43Z\xc8\x8e\xcb\xaeU\xe3\xbb\xd6\x03\xdd\xddw\x86~\x63\xd5\xb4\x0b\xb0\xfe\xe8.\x43\xdf\x97/\x02\x04\x96\x16\x32\x7f\xbf\x08\xee\x0b" "\xc1\xed\x34\x65Z\x01p\x11\xbc\xe3J.\x18\x9cL\xd8\xc1s\xb8\x88\xd6\x03\xfa\xa7\x96/\x18\x42\xa5|\x19\"\x36;\xa8\x81y\x30\xdc#" "&\x8b\xfdKzRY\x46w\xa9\x81\x05\xce>\x82\xe2\x34\xa5\x18\xb1\x00j\x7f\xfa\x99V\xdf\x0f\x89\x42H\xce\x32\x96\x1f:\x38\xb6\xce\xdf" ";+\xd0\x95R\x84\x33h~\xf9\xce\x9a\xe2\xf7\xfb\xd9u(\xed\xce\x1d*Z\xde==\xe2 \x64y\xc4\xc9j\xca\xb5\xd3n\xda\xc8*" "V\xa3\xa0\xd1\x8a\xce\xce\x83\xf1\xd6T\xdb\xf8@\xc2\xc5Jxi\x9f\xdf\x9d\x92\x18\x66R\xda\xde\xa6\xf6\xf9\xbb\x1d\x18\xf3*\xcb\xa3\xb0\xcc" "\x13\n\x31[I\x39\xb3>\xbf\x91\xd5\x61G\xe1\xe9\x17\x89iN\xa0%\xf8\x91\xdd\xd0\x11\x1d\x15\xcb#\xbb\xdd#\xce\x03\xe7j\x66\xa2\n" "\x8f~Q\xf4\xe6\x12v_\xc8\xcb.y\xc3}\xeb\x1a\xa9\xab\x86\x99;\x92\xa9w\x14g\xef\x9d\xf6\xb6\x8e\x18\x07Hx\xb4 \xbf\xb6\xfb" "\x83l\xf0\xde\xa7Z\xa0\"=\xda\x9f\xbd\xc8\x61\xf7\xd7o\xa6v\xf1]\xdf\x8f\xc7@Q\xc2s\xde\x06\xfa\xcc\x97\xc7\xf4\x86.\x8f\x83\xf2" "\x8a\x64\x19\xa6\xd4^u\xb6\x06T\xe9\x02\x38\x7fj\xbf\xf1^\xacqt;'\x9fq\xfa\x63\x06\x0e(\xcf\x92\x11h\x35\xbd'~\xa6\xeb" "\xaf\xb9\xc9\x43\xcf\\\xcb)X\x87\xdb\xcc\xce\x62\x16\xd4\xb9\xaf\xe0\xf8\x8c|\xc8p\xd4ZL&\x30\x9d/\xeb\x87Q\xe7\xffL\x8d\x8b\t" "\x95g\x61\x13W>\xb3\xf3\x9bY&\x31\xb3\xf3T\xc6\x93\x33.\xb9Y\x9e\xc5\xf9\x43\x86\xfet\xd3\x9a\xc7\x33\xbf\x9cx\x87S\x9a[\x36" ">\xb7\x41\x80\xb9\x35\x1b\xe6\x41\xa6\x44OI\x31\x8b\xb7\x64\xa3\x15\x34_\xb8\x06\x97\xa8\x66\x9d\x0e\x61\x62\xf6\x8a\xf2\xec,\x63\x9f[\xc3\x61" "n\x1d\x9cJ\xf9\xd4\x32\xd0\xb9\xa5o\x65\xb0\xd8\xba\x19O\x8a\x9c\xe2'\x8a\rt\x61\x9f\x61\xff\xd4\xdc\x90\x98y \x1cW\x82\x61/\x65" "\xea:,O\x39n\xe0\xc0\xe5\x9c\xf3\x10\x41\xbb\xb5\xf3\xb0R\xdd\x9fMh\xb2\x63S\x19\x1e\xbe\xd0O\x44U\x45\x1am\x1a+\xef\x8c{" "\x0f\xef\xb2~\xf1Q\xe5\x9e<\xe7~\xa3\xcb\x62\xd8\xbb\xf4k\xa4g\t\xe8\xbf\xa5[\x82pP\xb1j\xee<\x82S\x92pm\xb1\x36\xdc" "\xe4\xea\x88P\x8c\xd0\xa0\xe6.u\x8bT\xd9\x05\xd1\xf4k\x92\xb6\x83\xe4 V\x0fW\x15\xbdT]Y\x31\x31\x8f\x1b\x87N\x86\xa8\x11\x93" "\xc5\x83\xce\xe6\xb2\x16\xc0|\xff\xd2\xe5,\x11\x98z\x08\xa6\x63Wv\xc0\xfd\xf7\xdd\xbeP\x8f\xdf\x91j\x17\x9c\x04\xa8\x44\x9e\xb7`T\r" "\x61\xb9\x13MG\xd1\xcf\xd0\xd4\x0b\xc9\xbcO\xc9\x10wn\xd2\xc1\x0f\x8aSp\xc4\x64O\xfe\"hi \xab\xf0\xfc\x84\xea\xaa\x44\x62&" "\x14\xf8W\xfd\x33\x7f\x08\xe1\xd8v>Y\xaa\x8b\x03\x9b\xa4\x0b\xf9#Ow\xda\x45\x89H\x86\xa2\xd8\x8f\xbc\x08\xaf\xef\x9dZI\xbb\xfdW" "!\x65/\xa2J\xcd\xc8\xa3\xd3sG\xb8>\xd7\x19\x1a\x1c\"[\xd0\x8f\xa7\xbc\xb0\n\xa3\x32\x98^X+r\x61\xfdZ\x0b\xcb\xb8\x94:" "\xbc\xc3\x97x\x63\xf5\xfb\x8d\rin\xe9~Q\xdeZ\x1f\xd6\xce\xee\xf7\x8e\xa1\x65\x94kr\x65\xdb\xd9.\xd9\xa1:\xf9\xf6\xbb\xae\xfe)" "\xff\xe2 \x9e\x64hr\\n\x17 x\xad\x90\xed\x91\x9d\xbd\xa9J\xdf\x9d\x98\x36\x00\xb7\x0bnV\x64\xbf\x65\x9c\x93L\x1f\xcahp\x43" "s|o|$\xdf\xab\xce\xd4\xc9\xd9 \x84$\xea\x36\x89\xe0i\xe5]X\xe7\x0e\x19m^x\xc3\xd3\xb6lm\x17\x8e\xec\xf3\x15\xc9u" "\x08\x41\?\x97\xe8(\xbf\xdf\xe6i\xda\x39\t\x19u\x46L\xf6\xe5+\xad\x89\xb6\x93\xac\x92\xc4\xca\xadJ\x9e[<\xad\xaa\x07%\xcb\xd1]" "<_\x38\x93\x15\x0cUq\xb7V\xa3\xda\xed\x8f\xf9[+\xa9\x84\xbcQ{,\xc6$\xc4\xca\x11\x95\x03v\xe1(W\xe4\xb2K\xa2\x11\xaf" "|$\xd7\xb6\x1d\x19\x34\xc8R\xbbr\xc0\x92G\x88\x82\x43\xd9s\xa6v,\x15M\x12.\x38\xc2\xe2\x39Y\xb2\xcf\xd1xSN\x31\xd7\x30" "O\x05W\x34P=qK\xb7T\x88\xa2\xa2\x34]\x37\"\xabQ\xb6\x9c\x8c\x30\xa6\x66\xdbh\x87i\xf0z\x38[\x16\x94\xacx\x7fu\x97" "(\x39\\\xa5\x9eR\x0c\x06\t\xa5\x01\x1f\x92o\xbe\x90\xad!\xa7Y\x88\x89\xde \x61\x9b\xf7!\xb8\xb4S\xb8\xdc\xea\xdb\xbc\x19R\xf5\x12" "\xa6\xaf\xb7\x37\x0c\xeagl\x96P\xf5\xec\xc7\xfe\x85G\xbb\x8e\xc7\x0bgtt\x99\x32\x7f\xbf\x8f\xe2\xcbm\xd8z\x0e\xd1\xdb\xa9\x9b\xedt" "P\x8c\t\xdf\xec\xca\xd1\xd5-\x1c\xdb\x9e\xde\x0b\xc6kg\xfaT\xbe-\x9e\xb8\x9a\xf6\x43\xcc\x93P~\x93k{\x92\xc8\xf1\x84\xdb\x8c\xb1" "\xe3\x8c\x86G\x30\xe9\")\x44\xcf\xb3\x10\x35\x15\xe5\x8e\x44\xf5RX\xe9\x1a\x1f\xc8Z\xc6X\"\x1bM\xa7\xa7\xa3\xb0il\x33}\xb1S" "\x0f\x64.\x44s\xb5r\x93\x65\x01\xcc\xf0*\x97\x98\xb7\?n\x46\x96\x06\xb5|>($\xe6Nr\xddKS#\xf2\x9e\x37&|\xbd\x35" "\xf2\x06qi+\xe1|\x0b\xd2\xe7^\x88\x66m\xc5\xa8\xf0\xb4\x62\\\xa6\xce\xcfnp" "\x86N\x38\xc2\x07\xee\x8d\x8d\x04\xe1\x12\xd9x\x36\xec#\xdd\x97\xec\x65-\xb1\xaeX)\xb1\xc2%\xac\xd9v\x14\xb8\x42\xde\xa9Rx}\x16" "~\?\xc7\xf7\x38Z)\xca\xbcH{\x33\xfc\xf8\xa6\xc2t\x32\x90m\xdbJ)\x9e_\x91(:+%\x36\xe6@V\x42\x61\x46\xcd\x39M" "\xf4\xd2\x83Q\xd6\xa2\xb6\x88\x1a\x99\xa3n\xa5\xcc\x99H\x95\x8a\xbd\xc5\x95\xfd\x9d\xf6\xfcV\xaal\xeaT,\xa2\x33(\xedK\xceu\xac`" "\xa9\x9dL\x8f]\x93P\xd1p\xe6\x66\xbc\xad\xd3=\x05j_:\xfcSoN-\xa0\x98{\x41%y\x99\x45`\x15\xa2\x06X\xb1uL" "\x84X\xd8NIm\x97Z\xe5\xd0\xb3\xf2\xdci\x89\x45MLI\x7fI\xd4\xf6\x99s\?\x45\x95s\xc6\xa9\x33\xacZ\xa0\x10S\xbb\xb4:" "\x39N\xa9\xa8S\xe0\x30\x94\xaa/\xa7=\x66\x31\x97\xf6h\xccy\\\x39tJ\x41\xae\xcb_\x9f'\x1b\xc2\xda\x9d\x99\x1f\x46\xbb\xb0\xaa\x1d" "\xa1\xc6;\xce\xd6\xb0\x92\x37\xd3^\x41\xa5\?*\x98u.\x12\x05\x15\xbcu\xdc\x94\x8a\x05\xfbwT\xad\xc8~\xc7\xc9Y\xfd\x62~\xd5\xe2" "\x16\x9f\x7f\xb0\xe8;\xe9\x32\xe3&\x87\x37\\\xd1\x15%h\x96\xd5\xed\xe0q\x9b\xfe\xe4q\xfb\xfbs\xc1~Z\xa9\x96Z\xf6\x65\x1fZ\xc9" "\xe4\xea\x33\x1f\xf6^\xd9\x10\xc1\xb6\xe4\xb6\x8ay\x38Kn\x9f\xa8Z\xb2\x17\x0e\x97\xd0\x94\xbd\xacV\xae\xc2\x13sg\x82\x8a+\xab\x94\x99" ":\xf9x\xe2g;\x30\x9a\xfe>#Wg\x9e\xf6\x19\xd7\x43\xb9$\x37v\xbbv\x96\x8av\xe7\xce\x38\x7f\xc1\x9e\x32ULy\xe1\x41_" "Z\xba\x7f\x8a\x87\xb3:\x84\xcd\xdf\xf2\xdf\x84\x65\xbe\x46t\xfa\x01\xe5!\xb2_I\xd5,n\xbd\xc4\x87O\xa6\xbe\x9c\x61\xb5-\xf5\xa7\xe4" "k\x88)\xa7\xcc;\xe9\xa6\xa3\xe6\xa1\x93s\x65\xd4<\x89\xb6\x87\x0c\x88&Jv\xe3\x1fT+\xe9\xa3\x89\xda\xb8yj\xec\x19\x17\xc6\x9d" "\xd3S\xad\xd5\x80\xaaV\x03Rz\x42\x46l\xd4y\xca\x8c\xb3\x17\xfeV\xeb\x06\xb9l\xf8\x8b\xaajY!(\xa6\xf6\x36\xef\x0f|\xaf\x9b" "\xe4\x64\x8fjN\xcb\x33\xc5|\x30\xda\x1d\?\x1a:\xa3\x87\xc4L.\x8au\x33\x65r\xf2\x8d\xa6\?y\x31\xa3\xd3Oz\x9aS\xd9\x1b\x13" "\x36\xdf\x82R%|\xb8\x30\xb5JN\xa8Ur&\x87h\x95\xf6\xc7\xeb\xc4<\xc9%\xa6\x64\xceM\xbb\x15\x1d\xbb\xb4\x8e\xc6\\\xda\x9f$" "*\xfa\xb9H\xcfH\x91m\xfeH{o\xc6\x89\xd3Z\x02\x30\xed-Q\x13MV\x35-\x99\\\xb5\x8d;gr\xff\xafv\xe9G\x7f=" "\"o,==\xda\xee\x9f\xe6\xfe\x46\xd0\x0c\x8f\x16\x9c\x8a'\x1b\x86\xcc\xd6\xe8m%\x9c\xda\xad\x9bZ\xda\x99\x9d\x19\x37\xe4\xc2^\x8fu" "\x0b\xb1`\xcaP\x91\xa5\xca\xa8\xcc\x33\x88*\xb6\xbd\xf2\xe9\xf7\x99Ku\n\x9b\xbc\x9dV;\xadZ\xed\xb4\xca\x99=`\xf4vl\xe6\x9a" "\xdd\xad\x62\xb6\xb7\xa9w\x33\xea\xd8\x17\xce\x99r\x18\xc2\x13\xf4\xccI\xc3\xbb\xd8\x8d\x66\x37\x96ph\xfbz\xe5\xa5\xb1\xe3J\xb8\xb2_\xaf" "x\x8f\x38\x61Vyo|sZ\x8d\xb1jU`!\xca\xf8j\x9c\xed\x92\xb9\x9a\xf1G\xbd\x89s\xf6i\xbem\xa5\xb8M\xe7\x01\x93\xf8" "\xd8\xa2\ng\xce\xe4\x8b\x62Z\x9a\xa6\xa9\xafZ\xad\xc3\xb1 \xd9\x86\x19\x17\xc2\xf2\xb5\x1ehi[-\x0f\x15z>\xcb>\x31\x90\xabL" "\x88y\xcf'\x12\x8f\xef\x8dLzt\x9c\x12NmoS;\xab\xcf\x45P>\x88\x9bL\x00V\x7fT\xaa\x9f\x9b\xd5\x33T\xad>RJ" ";\xbd:\xff\xaaR\xa2<\xf6\x37\xd5O\xd6Z\xa1\xaa\xd2w\x45\xef\xe0Or\x13\xed\xe5\x8c\xb1\xd6\x91r\x62\xe4\x9b\xca\xb9\x0b\xc2\x1di" "\xd5\xef\xaaU\xbf\xab\x9cS*\xf0\xd3z{\x92\xf3\xfc\xc5\xda\x08\xa2\xe0\xa7[\xb1\x05&+" "\x16{\x02\xd4u\xb3}\xcfl\xea\x0bw\xc1\xd3\x90q\x0e\x44m\x17N\xd9#G]+uk\xdb\xd7\xe9\xf4(\x64Z\xab\xd3\x13\x46x" "\xce\xf3\xb1\x86y\xdd\xba\x15\xeaV\x1f\xac[\x86\xa6\xc4:\x92\x35W\xban\xa3]\x8bu=\xd5\x39 \x8ch^rY\xe1g!Q\xdb" "\x45\x8c\x19\xf9T\xbb\x0e=\x87\xa0\x18\x03\xccU<\xbe\x63|\xa0\n\x16\x88/\x8d\xcc|\xd3\xd0S\x1f|\x46\xd1\xe0@\xe3\xe3`:\x8b" "\xa8\x31\xb7Z\x95\xabn\x8d\xe6\xba\xbd\xd4J\xa9\x30\xa4\xb6\xca\xcfi\x9en\x10\xa5\xc9~v\xc7+\xb3vJ\xddj\xd2\xca\xd4\x95\xc6\x1f" "\x35\xa7\xdc\nz\xfa\x8b\x9aO~W\xb5}\x81wP\xde,}\x04GL\x9c\xf2\xe3\xe0\xbd\x1c\x8c\x91w\xd4\xb5\xfb\xbc\xf0\xc2\x8e]\xa8" "\xd4\xd5\x8b\xd2\xf9\xfb\xf6;\xaap\x8e\x94u\xa4k\xf2\xf0\x41\x1c\xfd\xfe\x1c\xfek\xda\xb9\x99\x62\\nU\x8f$\xbb\x01\x8f\x82\x82\xbej" "\x92'\xd1\xad\xa0\x62\x13\xda\x95\xd3\xe0}\x42\xf3\x8c\xbf\xe1\x8cL!\xbc\xd3\x85\x98\xec\x08j\x8d\x02\x83\x45\xa2&\x43r\xda\x88\xb7/\x66" "\x9e\xc6\xdb\xad\x65\x1dGV\xc5>\n\xbesV&\x1f\x05\xcb\x1a\xa7kW\x8e\xac\x80;\xb2\xdc\x98\x19\xbc\xa8#g\xb2\xa6\xb4\xa8\xda\x03" "Y\xe7\tq\x0e\xaf\xf2'\xdat\x38|\x92R\xc1\xfb{\x9c\xe7U\x86\xaf\x03\xf9\x1f\xed\x32\xa6\xf0^\x1fq\xfc\x46X\xb3Y\x65\x62v" "xUV\xea\x1dI\x83\xcf*\xa9G\xd6\xb1s\x64\x05\xdf\x91\x15|G\x1a\x91\x87\x9doG\xf1\xc1,\xec}\xd2\x44tN\x61\x93W\x1f" "\xf7\xf3\xe4g\x85\xc1\xd7\xc5\xdc\xbe\xf8\x61\xfd\x66Z\x01u\x64MuL\xf3\xaa\xd4\x38\xdb\x07j\xff\x91I\xd4G\xc6\xf6\xd4\xb2\xa7\xdb\xd2" "\xce\xdd\xb3\xf3\x00\x01s+-.\xef!\x84\xaf\t\xc8\xd1\n\x98\x1c[\x13\x93]t-k#\xb6\xac\x19\xd2\xe2\x90\xb5\xb0i{;\x19" "\x90=\xfb\x9c}\xa0\xad\x10\x8e\x33\xca\x13\xf2\x8c\xdf\x0f{\xa7\xcex\xb7\x88\x9e\xb8\x37\x86&\x07\xc3\xb7\xc7\x88]\xc4\xad\xf0\xe1\x9d\x84\xb3" "\x83\x10q\xfd*-k\xc8\x0b\xdf\x9c\xf6~\x8b\x39\x89/\xff" "\x1f[\xef\xa1\x95\xca\x13\xb4\xfd\x9es'\xdf\xa5\x9aP\xc9\x12\x44\x14\x14I\x82\x81\xb4\xc5@\xbe\x98\xcf\t\xdc\xc5\xa9\xaa\xe7\xa9\x81\xff\xfb" "\x9e\xb5\xf6\xda\xbf\xaaq\x98\xd0\xd3\xb1\xba\xbaz\xcb\xf4+\x61\xc3\?\xe1\x34\xe7L\xc4\x7fi\xd0\x66\xed\xd3%yo\xf6\xffJX\xa6." "\xbc/\x38\x93\?\xfd\xe0\xd7X\x01)\xb4\r\xd9\x85h\x9f\x94I\x38\x04\xdfN\xdbx\x38Z\x66\xca\x96\x99R\x65\x84\xb7\x81\x38Y\x81\x36" "s\x9f\x66\\s!\xcc\xc3\xe5\xf0\xc6JG\x39:\xc5O\xa3\xcc)\xf8\x30\x06-\xec\xb5\xf0\xdf\x1b\x88~\x66\x19\xe1\x65\x84h\xee\xcb\xfb" "\x32\xae\xa7\xd5\xc8\xef\xeb\xdf\xa6\x00\xed\xb7MZ\xb2V\x38\xb2\xaep \xa8\xe4\x03U\xd8\xd8*\x99\x31L|\x1a\xbb\x88)M\x13\xe5\xe6" "I\xa8\x38\x1c\xb0P\xc6&\x32\x1d\x45|s\x46\xa9\x01S\xb3\xf2\x97<\xc8\n>\x9e\"\x62\xa8X\xa1\xc5NxK\xf6\x9c\xf0mPq" "\xe9\xdc\xbf\x9d\x61\x95\xa6h\xb0\xf8ThR\xa9p\x8e\xa4\x82)\xae\xb4\xba\xe0\xf3k\x88\xc8G^\xf3\xda\x1b>\x03\xc6\xd7\xc2Ir\xea" "\xee\x11\xeb\x02Ul#X\x98\x0c^Q\xd2*\xc1)^\x38H]\xef\xabY\x8ai'\xf6\x9fW\xb1\x44V\x99\x7f+\xac\x85\x95\xc1\xe5" "O\x30~\x87v\xf9/\xb9\xcc\xe5Oh\x8b\" \x62\xa8\xa2\"\xb6.\x11\xf1\xaa\x17\xe6\x9f\x30'h\x9aTn\x07m\xe9\x0cn\x32\xc9" "\xbd\xae|\x14W\x81\xc7\x8a\xf1o\xc1\xb5L\xa6\x05\x97\r]\xc3\xe7NSv\xcc\xb6\x1d\xcb\xbb\x06\xfbG<\xef v\x92\x1c\x43\x07\xab" "\xc2\xfa\x84\x1b\x97\x19\xa3\xd6grm\xed&\xcd\\\x8c\xde\xf9\xa0\xcc\x62\x41\x86\t\x90\xed\x45\xb9\x31\x42\xcc\xa9\xb6u&\"\xc6\xb0J\xb6" "-\x15\xac$Q\xb6\xc9\x17r\xea\xe4h\xd1\x44\x8c\xcdU\xc4\xc6g\xc9\x03\xea\x01\xbf\xe2\x94u}\x85\x95\x62\x85sY\xca\xf0\xee\x9b\x9d" "Y\xd1\x9eI>\xb0\xf9\xf3\x18\x39\xcf#\xe2W\xf2\xcdK_\x9c\x93\xa8`\xb3$\x63p\x8f<\x17T.\xc8\xcb\xe0\x8eoP\xb9v\xfe" "W\xf4\xcc)\x62r\xc5J\xde\x19\xdc\xe4\x93|Z)q\x98R\tn\xbf\xc0\xda\xa7\xfc\xa3\xf8\xe3\x0c\x1e\xf8\xb9\xef\x1e\x9d\xc9M\xeas" "g\xf0\x43\x11\xf5g\x45~\x95\\\xa3\xc1\?\x35/\x03O\xc6\xe6u\xf2\xeaM&rs\xba\xaf\xf8_\xc9G\xde\xf9\x91\xa7\xb2\xaa\tZ" "\xd9\xbf\x35\xff\xd4Z\x46m\xd4:\xd8\x46^h\x9b\xb5P\x9c\x90s\xe7\xbe\xfe\x95\x88]>j\xbf\x9a\xbcP\x9f\x19\xd4\?\x11&\x61\x95" "I\x66\x18U\x93\xcc\x30\xaar\xecS\xa1\xddQ\t\x97WZ\xb1>\x0e\"\x7f\x33\xae\x63K\x15\x13\xe3T\x35\x11'L^\xcc\xf6)\x8f" "\xaa@\x19\x8cK\x41@\xf4\x14\xd7\x30\x0bm\x9az\x38\xb1\x06\x94\xb2\x17~\x15\xb0\x8d\x8ej\x0b\xaf\xf4\x44L\x32\xfb\xd4\x96T\x97\x32\xae" "I\x8f\x19\x1e[\xa6\xc9\xe8J\x12\x04\x8bI\xf4@\r\x9c\x9d:\x11\xee\xd5\x44,\x97U\xf1,\xfc\xa0\xf8\x8f/\xf5\xd3w\xfe\xad\x92\x43" "\xc1\xcb\x02\xe2\x82\x39\x8d\x95\xb9\x30\xc9\x12\xeb\x13\xa7|\xcc\xe8\xed.\x9e\xcc\xff\x96\xe3$\x85\xd6\x8b\xe4\xcc\xed\x9d\xd3\xc2\xb2\x33\?\xef\xce" "\xb1\xa1\xa5i\xc9r\x43\x11\xcfS\xd2*\xfc\xed\x90\xa6\x1aI\xce\xff\x80\xe9L\xa5.\xacG\x37\xa6\x62\xcb\x19\?\xbd\x62\xc4\xde\x03J$" "T\xe8g\xf9\xdf\x13Kv\xe5`\x41\xaa\x1c\xac\x01\"\x96\x9c\xec\x86\x89\xf8\xee\x0c\xf2\xef\x34\xe4\x98\xc6\xb4\x13\x31\xf1[WmL\xe2;" "\x86\x99LrK\x11Y&\xe0\x14\xae\xac;\x39=+\xe2,\tZ\xa7\xda\xe6\xef\x97W\xca\xe6\x9d\x9e\xb6\x61\xb6\xe1\xf4:)\xcc\xce\x9c" "\xda\xbd,\xf2>Y^.\xcb\xb3r\xcb$]\xf3ONx\x9e\x8aXH\x93\x1d\xf2\x35\xcc\xa0\xdd\x82\xa7\xb7\xf0\x06\x35yX\xbaL\x1e" "\xa6r\xe6\x99\x17\xd1;\x94<\xbb\xc6\xb4\xc4\x10J\xd8$\x99\xecwYg\xf2XwY\r\xe1\x91hw^)\x86u&\x61\x9d\xc9\x7f" "\x7f\xeeL\xce\xbeG~\rY\xab\xb1\x17+^\x93}'\x62\xf8\x8a\xe8\xd9\xe3\xe9\xdb\xa9\xae\xea\x63^\xb3\x45>\xb7\xb1" "\xe2S\x45\xe7:I\x93\xf6\xab\xd3k\x97\xb0\x9b>\x88yg\xf2\x03\xd8l+\xe1\xcb \x39\x34|s\x46g\xcc\\#\x1e\x1a\xad\x9c\xe1" "\xa1\?$Z|r\xca^\xb2hk\xe9\x87'%\x62\x82RN\x03\x81\x92\x06\xc8\n\x1c\x96\x8c\xe1\x9a\t\xf5o\xe1\x44\xbcH\x11\?\x99" "\xb6\x9f\xa8I\xc2\x39S\x0b\xd6\x14\xe1\xa5\x33y\xcd/\x16\xaa\xefk\xa7ZSYm\x86\?L\xb5\xdf_\xef\xd7\x84+\xfe`\xf5\xe0\x0c" "\xcb\xe5\xf0\x13y\x97\xa3\x0c\xa5\xdf\x41+\x96\xd6'\x45\x64\x41O*\x38k\x1b=\x41\x45\x94\x41:\xe2\x41\x88v~\x46\xa2\xaa\x8d\xd8!" "\xe2\xd8Kx\x1f\x96\xcf\xbc\x19\x15-\xcaL\x8e\xb5>\xb2\xb0\xf7\x63\x85\xe1\xc7\x92^\x12\x95(\x87\x8f@;p\x05!q\x84\x15\x14\x00" "\r\x34\x9a\xe9\xbb\xe8\xb5'G\xb5\x95\xe8~\x83\x45l\"\xb2\xa6\x8f\x1eP\xbc\xa3\xc6\xc2\xe9Y\x99\x63`\x65X\xdd&\xef\xcf\xbc\x1f=" "\xe5\"\xbfVk\x94\xfc\x46\x44V\x63pJ\x35\x06\xbf\xbfX\xe9\x66Z\xf8\xef~_Mi\x64\xaa\xeb\xa9\xb7\x04r\x38\xea\xdc\xc9\xa0\x99" "\xe3\x66;\xb0|\x0b\x36\xc9\x9f\xe3\xf1\xf4\xa0\xfd\x86\x19\xd4$Q\x87\xe9\xd1\xbdM\x9e\x06\xb3\x1e\x15\xef\xa7G/\xfc.\x83\xac\xb7\xfe\xd1" "p\x95|\xe9\xe1\xce\x99|\xceq\x9e\xbcsz\x43\x19M\x07\x34\tWh\x06\xa8`\x8b\x08\xe5'\x36)\x15q\x83\xec\x16m{^\xd6" "\xa3\xdd\xca\x19/\xdf\xbdy\x8eO>}|\x10\x9f\xed\x9c:\x42M\xa5\xe2s\x37{W\xe2\xf3\\\xbc\xfc\xa0X \x9b\xce\xe4\x62\xb0\x9d" "T\xe2,\n\x10\xb6\x62\x34\x62{\x46j\xe8\x1e\xd1 \xad\x94\xf2\xe9\x99\x8d\xae$\x15:\x05(\x93\x1f\x34\xaely\xd1\xca\x35\xad ~" "\xcf\x83\xc9/\x0f\xa0\xc6\x8d\x9b\xf8\nq\xfbN\x9a\xdd\x80\x65\xd1\x13-\xee!\x39\xe2\xc9\xd0\x19\x16\xcb\xd1\x00\xe9\x15O\xf9r\xd3\x19\xf9" "\xe3\xf4\xd6P\x44\xffrX\xae \xfc\xca\x91\x35\xb2\x43\xf6\x92$\xf9\xfaq\x1e\x8dP}\\!\xf4\x82\x12\x7f\xbbq\xa0\x82\x10t\xca\x96" "w%\xe3\xc5K\xf2W\xff\x1e\xcb\x8f\xa3V\x91\xc3\xee\n\xb6\x14\x11n\x17\x9c\xdbQ\x91\x06\xec\x8a\x0f\x8bi\xf4\x11>\x05l\x18\xb1\xad" "\xa5\x31x>\xf3\x1f\xf8\xe0Y\x08\x17U\x88\x98s\xaap\xca\xb9\xe2\x9d\x41\r\xc4\xd8x\n\x96\xc8 XQ\xaa\x9cy\xe5\xbb\xbf\x44I" "\xde_\x15\xe8\xb8\xa6\xa2W\xe8\"zQ\xf7\x41\x1f\xadR\x15\x04hU\xe2\xfbp\xde\xae\x82-\x8a\x94H\xd0\xfd\xed\xce+\x01\x11\xf7'" "h\x19\xe8\x13S\xa1\xcf\x8e\x12+PT\xfc\xe1\x04@\x05!p\x84\x8d\x37\xcf\xd8\x88\xa7\xac\xe4)\x8f\xdfN\xcf\x16p\xa0T\xee\x9c\xfe" "\xa5|\x80\xbc\xef>y\xce\xa1kK\x65\xdf\xef\xc7y&\xcf\xeb\x87\xb4o^\xe3I\xce\x05\xdf\xebN\x8d\x90\xd5{\xff\xaf\xe6\x95\x30\xc2" "\x7f\tg\xe4/\xaf\xff\xdb\x8e\x39P\xd9\xff&\xfd\xce=\x1b\xa3\xe4\xeb\xfe\xa7\xe7\xbd_o\x9d\x34uU\x39\xb2\xa9\xd2\x14R\xe5p\xbe" "\xca\x11v\x95\x16\xba*\xfb\x19U\x8e\xae\xaaX\xf7\x9c\xae\xb2\xf7U\xe5\xe3V\x11}\x37]\x65\xfe\xab\xd3\xa4R\xa7\x1d\x45\xc9\xe9\x81:" "\x1dL\xeb\x81\xc5\xc9\x13\xe2\x1d\x94\xa1-}\x16\x31\x95\xa5\x43\xa0\x8a\xfb\x93\x0c\x44<\xa3-\x14M=\xf8\x95\xe9\"Z\x0f\xb2\x65\x04P" "u\x31*\x64]\x8b\n\xef\x10\x8b\xbc\xa5\x39}\x0b\xdbU\x1d\x18\xf8\x89o\x65\x10U\xa4\xb0\xe7\x0c&\x17X\x43\x9e\xd6\xcf\xa4\x9e\xf4\x9f" "S\xd7\xe8\x1cR\x0f\x16kpi\x45\xb1\xee\xef\xabQ\xce\xf2\x0f\xb4\xc2\xd5\x93\x98g&\xd2\xbe\\\xc7\x12\x1a\x63\x98\xdey\n!R\x82" "\xd0\x96\xfa*\x87\xc9oM\x0c\xf8\x14\x9c\x87\xae\xb3\x37Xg\x0bQ\x87\x0f\xb3\xf2\x05\x9c\x37\xe2\xdc\x10\xae\xd5GZ\xb2\"P\x8fYV" "\xa9#\x10\x87\x10^h\xca`R\xc1\xbe\x36\xaa-\xc0*\xcf\xc2\xbc\x62\x9dMZ\x9d\xedy\x1d[\xb2\n\xe1\xc7X\x87+\xb4\x31\xf1\xc6" "\x87\xd6\xe4\t\xc8\x46\xf5\xc4\xd8n\x9a\xee\xe8\xca\x9c\x11[\xccP\x61\x61\x46\xc7\xd8:\x62\x63)\xf1p\x98\xb2\x64\xcdP\xc7^\xdc\x42\xf8" "\x08*u\xf2\xe3\xd1Z\x85:\xc7v\xca\x30{\x89P\xcf\xa2\x95\xbf\x9c\x7f\xbb\x31\xe7\x02U\x0bl\x35\xbf\x88U<\xcd\xfe\xfe:(\xd6" "\xa4\xab\xe8\xc9\xb6\x7f\x42V\x92\xa2\xef\x9f\x16\xe2\xff=_\x05\x95k\xac\x35>:\x86mS\x35T\xbe\xa9qzkK\x04\x17\xff=k" "_\xdf\x05\xfd\x02\x16\x97\xf9\xe1\xc3\x37k\x04\xbd\x41\xb2R(\xdd\x90\x7f\xa0\xc5^I\x37\xf8-\x1al\xaf\x1a\x87\x8a\xb4\xb1_\x17\xc2l" "\x95\xa9\xdc\xa5\xc5\xb6\xcb\xaa\xa1\xcb\"\xdc\x65\x41\xeb\x62\xe3\x88\xc0\x02\x1b\x8b\x66\xe1u\xd3\x0c\xbd\xae\xb4\xb6\xc1k\xa4.\x1b\x95n\x80\xfa" "\xbe\xcb\xc2\xdb\x65\xf7\xb9K\x93^\x97\x15N\x97\x66\xban\x80\xc2\xd8\xa5U\xacK\xabX\x97\x15P\x97\xed\x66\x97S\xa0]ZX\xba," "\xb4\xdd`V\x88\x1a\xd5\x44\xf3\x05%\"\xdaV\t\xc2uQ;\xb4\xb3gh\x18\xf8w\xb5\xaf\xff\xd9\x65\xcd\xda\xe5P\xbc\xcb\xe1n\x37" "\xcc\xac\x9d\x9e\x1a\"\xb2.\xed\xb2.\xecr\x04\xd7\r\xe1\xcd\xdb\xe5\x94P\x97S\x42]\xfa[tYgv\xb1\xd6M\x88\x16\x42\xe9\xa9" "\xc7\x8f\xd6\xa5\x1bu\x37\x9a\x8c\x41t\x10\x95,\x99\xddh\x8d\x04\xa1\x1bR\x37\xee#\xe1\x62\x9e\xca\x86\xb6\xcb\xd9\xf4\xee\xde\x82\xc5\n\xe1" "\x87\xa7\xa4{\x66\x97\xb9\xb7\x8b\x90'\xe9\x17&\xdd\x0b\x93\xe3\x45\xbaU\xca\x01\xbd\xda\x84=\xdd\x9d\x01\x86\xf6\x01\xd6\x86\xa4\x07t\xbf\x1b" "`\xf1\xa6pP\x65\x11\x1a\x04\x93\x35h\xbbL\xa4\xb9\xe3\xad\x10]\x45\xe1\x16\x84K\xd2 \xac\xee\x9c\x08\x92\x02\xd1v!\x30Q\x83-" "\xad\x8b\xae\xf1\x83\x98x\xbe\xe1l\xfc\x00\xc1N\x84\xad\x89\x46\x1b_\xdf@\xc3\x10Q\xa9\x9e\x7f\x16\x02\xc4\x34\r\x9f\x8d\x12\x61\xda.u" "\xf4\x37\x19U\x1d~\x87\xa3\x88\xfcg\xe4\xc7\x92/\xd3\x90N\x38\x44[\xc5%\xc4\xf7\x1c\xd0\xd1\x45\xc9\x8c\x34\x88VH&lU\x8c\x05" "\xf0\xa2\xa1\xd3<\xe0\xdc\xb1RJ|\xc0\xa4V\x8d\?W\xd1\xd7\xe4\x9b&\xc9\x1d\x94\xea\x9e\xe2z\x80\xc9\xa5\xd5\xdey\n\x01\x18\xa0\xd9" "\n\xf9\xa3\?{\xfai\x30\x65\xf8T\x0c\xe8\xc8=\x88\xb7[\xda#\x07\x08,h\xd4\xce\xbb\xc5\x8cM\x0f\xb0|\xd2\x18<>\xefo\xdf" "]\xdb\?\x14\x13\r\xbd\x94W\xae\x14\x91V<\x05Z\x38;\xa3\x46\x64\x41\xa7Q\xb5X\xdb\x89\x32\x34\x98\xda_\xb9\xf2\xe3\x35\xe8<\x39" "u\x36\xd7\xb6!\x13\r\x93\xffJ\xa6\x00\x45,}\x36-H}\xb3\xc9\x30\xed\x32\x9f\xc4\x04\xc3\x81\xab%m\xed\xa6\xe1{\x98\x08\xc3\xad" "\x8a\xec\xf4\xa9x\xfc\x63\x18y_\x11\xc8\\h[\xf7\x19Y\xcb\x99x\x93w\x91\x0e\x8d\xaf\x01\xea\xd2W\xae\xabPJ\x15\x1d\r\xb3\xd0" ",\xe0\xaa\xf1P\xe9\x1f\x34~\x34=\x90\x04\xec\x10\rK\x32^i\xe4R\x86\x9f\xf6\xe5_\xe9\t\xf6J\x97\x8f\xd7\x08\xcb]^\xe9\x41" "\xf5JK\xeck|\xfe\xeb\xaf\xbc\x87\xdd\x42yt\xc8S\x61\xdf)\x39\x65\x08\x81\x80\xd1\xe9\xb7\xa0x\x16\x14.\x39\xc5\xf6\x46\x7fO\xa5" "\xfa\x13\xd9V-\xa6\xc5Wo\xec\xbc\xbf\xc5\xf7\x33\xdd\xcd\x02\x39\xeem\xffp\xaf\xabz\x36\xf6v\xef\x9c\r{\xe7\xd0\xf6\x9d=\x91w" "\x36+\xef\xc1\xf5\x98\x9c\x82h>\xde\x39]\xf2\xce\x0e\x86\xd2\x1c\x1e\x36\x89\xb6\x9b\x1dir\x39v\x1cT\xd3@\n\x16uR\xb4N\x05" "\x9c^\x90[\x10U\xa1\x12\xab;M\x8c\x8bM\x88\x30\x90\xbe\x87\xd7;\x10>\xa4J\?;,<\x83\xc5\xa2\xf3\xcf\xb6\x1e\x33\x91\xa9\xfd" "\x8e\xd5\x83\x42Ly+\xf5\x35\xb6H\x1c\x04\x0f\x12\xfe\x42\xe7\xd4\xf6{T\x9dJ\xba\xf8\xabG\x16\xd6T\xd8L\x1f\\\x87\xde\xa3'\xbc" "P\xf4:\x8f\x32\xa7\xc1\x92\xbf\xdcX\xf5#\x03\xf5\xb6\x33N\xe1\x1d\x64\x10\x0e\x0e.\x41xy\xbds\x04\xfa\xcev\x45y\x98\x41Q\x8d" "\xd9\xe5]\x46\x61N\x8em\xdf\x39\nS\x06\x8f/\x34j\xab\xc6\xba@\xc5\x98_V\xc5\x34o\xb5\xbap\xda\xd0\xed\xc9\x35\xe9\xe4\xb1\?" "\xf1\xc1^\xcd\x07[\xa9\x0f\x84M\x15\xa2\xd1\xfe`qT\x06\x37\x05z`\x99\xd6h`\xafQ\xd3\xc2\xfa\x16\x11\x44]\x0b\x06\x15hp" ">\xfa\xb0]\?J\x88\xfd-\x1alo\x1f\x1cK*\x43\x17\x31\xbd\xa4\xe4\xd7\xfd\x08\x86\xa7\xce\xf8\xe4\x84^\x65\x1f\xfc\x42\xcap\xd6r" "q\xff\xc9\xfb\xfd<\x91\xb3}\xf3\x1f\xe2\x1f\x8a\xf6{\t.\xda\xba[\xed\xe8,\xd1*>\xf2\xff\xe0\x10\xee\x83\xad:w\xee\x33jH" "l\x34\xc9\xaa%;\xf0\x89&\xaf\x86uR\x1f\x88\x39\"|\x41\xe2\xd0\"\xab\xe4\x94\xebG\x38\xeb\x1d\x16\x62|H\xae\xd4\x9f\x7f\x65\x12" "Mw;\x82\x46\x7f\xbc\x0f\xec\xdej\x0cnnh\xf7\x35\xad\x9f\xdd\xdb\x9eM\xa6\x85\x99/v\r>\xa2\xe7\xb3\xf8kJ\x83\xeaG\x34" "(\x45\xaby\xd0\xbf\x82\x86\x9a\xf3\x83v\xbf\x0f\x16\xc7\x8f\xb8\xf4\x1a\xe6&\x31\xd6\xf5|\xb0\xa2\xf9\xa0\x45\xe8\x83\x1d\xe4\x8f}\xe5\xfc\x30" "\x92\xfe\xd8W\xbb\x61\xbe\x9bh\xb7\x9fN\x8dO\xf8\x33\xa1\xb6sJ\x05\xc6\xaa\xe7\xe3\x38\x90\x80i\xfb\xd3]\xa2\x35\xf0\x15\xd9j\x8eX" "L\x46\x1c\x8e\x0b\x8bN]\xb5\xdb\xb8>\xd2h\x8bRM\x1a\xbf\xe4o\xb0\xab\x8f\xd8\x1f\x1f\xb1\xc2\x1c\xb1\x82\x1c\xb1\x37\xa4\xd4\x85\xf2\xa8" "\x98\x46,%#.\x8d\x18\xf1\xd9G\x1c\xf6\x8f\xd8\xdbV\x06\xd7\xef\xfb\xf6\x02\x1a\xe6\xd5\x84\x13\x10\xb9\x64\xc4\xd9\xaf\x91N[\xa5G\x34" "\x94\x89V!GN,\x00\x37\x31\xcc\x17\xe5\x1f\x34\xe7\rO,!\x31\x38!\x33\xe2\x44\xcc(\xac\xcb\xe8g\xc9\xe2>\x42\xb4\x66\xa3." "\xa4\xc0l\xca\x88\x93\x0f#Z\xa9G\xec\x80\x8d\xa2\xd6+\x38\xe8\x91\x03\x44\xa8\x11\x11\x1d\xe6\x11\x8d\xaf\xc2''\xdb\xd8\x11\x9b\x46\xa5\x9a" "W,\xd6\xb7\xbe\xe8/h\xb1\xde\x85\x83r\xb4\xc5\xbb\xd3\x81r\x44\xe3\x9d\xf2o\xb1\r\x1e{\xae\x05\xb3\x13:\xac\x98\xb6\xe9p\xb9\xea" "\x88\x8e\xfa\x63:\xb7\x8c\x39\xbe\x1asU\xed\x18!\x81\x85H\xfbqx]$o\xc0u\xd5\xc9\xa7\x1fG\xd5\x1f\x10\x9d\xd2\x31}\xb4\xc7" "\x9c\x64P\x46\x0fW\xf4u\x1f\xd3\x00\xc5P@\xca,\x88,:\x61\x46\x9b\x30\xa3M\xd8\xf2N\x98\x85\xd4g\x9eM\xc6$\xb8\xab\xb0\x32" "\xd3h\x42\xc1\xef/\x44\xe4\xc1\ts\x93;\xd9O\xf8\x06\x13\xd6O\x13ZN&\x1c\x66M\x98\r&\xac\x88&\xe1\x8f}\x94\t_k" "\x42\x7f\xa6\t\xb3\xc2\x84\x9f~\xc2\xb9\x83\t\xcd\xfb\x13\xba\x8fM\xa2\xd7\x65\xf4\\\x62\xc7\x62\x12M~\xe4\x86\x11\xc6\xbe\x13\x44 \x15\xc2" "\x01{\x42k\xf2\x84u\xc5$\xd9\x63]\x44X\xbe&t\xe3\x9fp\x91\xc2\x64\x7f\xf7\x0f\\W\x82\xde\x92\x0f=\xa5+\x92\x92\xbd\xc0)" "\xcb\xe2\x34x\xb0kO\x39\x39;\r\xabu\x10\xeb\x00\xa6\xbaS\x1c\xec=S\xf6\xbcl\x0f\xd9\x93\x32\x07\x8f\x9f\xf4\x46\xf2\xc5\?\x9f," "\xcc\x9f,\xcc\x0c\x01\"\xc4\x07\xf8\xe4\x07\xf0\t\xeaO\xf5k\xe7\xa5\xe8x\xa0<\x1c\xb2\n\xe5\x93\xc5\xe5\x33\xdaXO\x88Q\x61\x8c\x1c" ")\x98\x88\x39\xfc\xcf}\x19\xf7\xa2o\xf6\xa7\x06\xc9\xbc\xbf@\xfc\xea\xf4\xf7\xdf\xe2\x15\\\xd5\x10\xc2V\x44\x64\xafov\xc0\xbe\x83\x93m" "\xf8U\xc0&\x08\xa2\xa5VN\xe6n\x13\xb1\x16\xe0;\xc8\xe0r\x41~\xe6T/\x88\xc5\xb1\x86]hM\x0b\xb3\x93\x10\xa3)\xd3nK" "\\\xc7m\x9a\xdc\xf3\xa0\x45\xbbu\xf2;i\xef\xcf_\xd9\xde\x7f\x07\x9d{gX\xfa\xc5\x86\t\xa2\x39\xfb|\xae\xf5L\x1e-\x84\xc3\xae" "j\xd2.\x06k\xdc\x39<\xed\xd1\x90\xf8\xcd\xef\xf0m\xeb\x45\xf0r\\\x0c\xf4\x1d\x16j`\xf1\x02\xc4R\x19\xa5\x64w\x16\xd5\xef\xf0\x19" "i\x17\xb6y\xc1\xce\x04\xf4\xab\xc1\xd5\xea;\x1cu\x9d\x41!\x8b\x8d\xebL\x8b\xfa\x8d#m\xbfj&\xda\xbf\x16\xf8\x9b\xd2\xf9\xda\x39\x1e" "\x34:\xfd\x02\xe1Q\xf8\x8d-\x97\x85\x30\x0b~\xb3$~\xb3$~G\xe3[\x10\xcb:\x84V\x84\xbe\xd5\xcew\xb3\xa4\x1d\xf5;\x86Q" "\xe0\x9b.(\xca\xa3\xaf\xc1\x12\xf8\x1do\xc6\\<\xf7\xbd\x7f\xca\xeb\x8eo\x16KJ\xb4\xce\xb3\xa4\x9ag\x01\xce\xd2}\xef_\xf0\x08{" ",\x96\\\xfc-;\xd2\xbc\xc7\x16\x17R\x34\x0c\xc4\x16,\x41\x0b\xfa\xde-\x82\xd4;\x1ds\x16\xc1\xd5\xa5\x93\x0b-U\x64&\\\x04\xd7" "='\xbb\xdd&\xca\x00\xb5\x39\xc4n\x88v *L\xe5\xd8\x61\x34\xa7\xc7\x92K\xc0\x9e\xbd\xa0\xe1KI{\x8b\x89\xfe\x64&\xb2O\xa6" "\x1a\x97\x92\x98\xf8{\xc6~\xa7j\\u\xc1MH\x85\xb0\x63/\x82\xcakp\xfb\x16\xdc\xf2\x1d\x1a\xbck\xef\x82\xd3\xbf\x0b:\xe4-\x02" "\x18m\x17\x08\x90!\xac]\x91H\x11\xce\xfe*Y\xb3,\xe8\xc1\xb3\xe0\xcc\xde\"\x9c\x34\xc2\xd9YT\xfb\x82\x36\xe3\x05>\xf1\x64R\xa1" "!\xd6\x62z\xc1\x89\xf0\x05\x17\xc0/\xa2\x65G\x93\x0b\x35\xfb\x82\xd6\xe1\x05G%\x8b\xf8\x06\x17\xe0\xe2\xf4\x05\x82\x8e\x19\x35\x38\xc2\xd5\x9b" "\x86\xb6\xfd\xcf\x61\xae\x45R\x91\xd5\xae\x89\xb9+\x16\x05\xd5\xfc\x43\xd0\xdd\x66\x41\x43\xda\x82k\xd4\x17l\xcb\x17\xfb\xf3^\x30YGo\xc8" "H\x9c\xd7R\x1eL\x02\xaa\xc9\xcf\xfe\x16\xc8\n\xfb:\xae\xbc\xef\x64\xc0n!\xd4-\xa9\xaf\xa1\xbd~\x82\x16Z)\xbd\x66\r\xb8\xa6\xb3" "\xe3:\xb8\x19\x85\xd9\x0c\xd7\x33\xad\x83ZZ\xf7vr\xcd\xb6\rI\xafi\x82T\xf2\x35\xd6\xfc\x06kM\x65\xdci\xcd\xc5Mk.Y" "Z\xc7\xfdVX\x18\x04\xe5\r\x34,\xf9_\xef;v\xb6\x46\xd2\xe6\x98\x98\"[\xbcm\xb2s\xb9\x89,\xdc\x14\x83\xdc\x9dk\xc9\x1e\x0b" "\xaa\xbd\x81\xe8\x43p\x43!\x65\x83\\\x82+\xab\xe6\xb6\xc1I\x8b\xb6\x98-\xcb\xdd\x96\xfd\xd9\xad\xdfY\xa3\x88\xf0j\xc1\xb5\xfb\x0bm\x83" "\xe2t_\xffN\x34\x64\xee-\x1b\xc0m\x30Y \xcc\xb4\x8a+\xf0\x9f\xdb\x8c\xb7\xea\x66\x86\xce\xd6\x96-\xe4V\xdd\xc2\xf8z\xf4\xde\xda" "\xca\?\xd0\xc2+\n\x9bKZ\x9c\xb6\x9e>L\xf9\xad\x64jux\xc5\xca\x1a\xd5\x34\x94\x90k\xa8\"\xb7~\xf9\xa8\x33w\xfa\xd3\xd3\x0f" "}\x1b\xbd\xe5\xfd;\x44\xebG\x7f\xda\x38\xf7\xe1\xf4\x1f\xc4m\xdc\x9f\x13\xd0\xdbxz\n\xc2uw\x1b[\x98\xd6\xf4v\x7f\x9a\x07\xcf\x90" "\xc4\x9c\x82\xddr\xeau\xbb\xef\x8f\xa2\x0e>\xe3~\xb9\xc2\xb6\xf2\"n\xec\xc6;\r\xb0~\xe3\xbd\x42\xd5t\x01\x88k\x8b\"\x88\x89\xac" "\xdd\xdf\xe6\x1c\xdc=\xf2\x13\xef\xd8\x8f\xdd\x05\xa9k\xb9\x0c\xfb~\xffK+\x39\x93\x9f\xa5JR}\xd0\r\x43\xb4_gr\x02J\xcbN" "\x9d\x81\x8f\xae\x84JU\x99\x9c\x98y\x62\x9d\xa9\"K\x8b\xaf\xbeU&'\xe6R\xc9\x45\x45\xf4\xdf\x88\x98\xd8\xe8T\x8bV\x45\xae\xcb\x38" "h\xf1\xbc\xab\xc6\xd9\xc3\xaf\x8fn\xf3\xbf\xff\x86\xde\xcb\x8e\x96\xce\x9d\xd6\xe4\xfe\x34\x88\x65\xa3L\xc2\xc3\x41\xf3g\xf4\xbd\xaaM<\x18\xbf" "wtv\xdb\x31\xeb\xef\xa4\x32g\xefL\x45\x35p\x8f\xa9MI\x64\xf9\x1d\xa7Kv\xb4I\xee\x18\xeb\x65\xc7\xa5`J\xb5\x97\xe5\xf8W" "\x98\xf7v\x9c\xf3\xdcq\x81\xf5\x8e\x81)\x94\xba\x8f\x1d\xac\xd4\xa6\xf1\xc1\x45\xf4\x34Q\xd1\xd2\x04Z\x01i\x19\x16\x37 \x16\x8f\xed\xc2\x8f" "\x8e\x33\xca\x8d\x83\xb7\x07\xd7\xe2\xcbG\xcf~!\xfc\x14\x18\x8c\xc9\xe8\xf7\x13\x11\xf1\xe3\x44\xb4\xa8Z\xc2\x95\xd5\xd5;l\xbfn\x0cR\x9f" "\xb4\xeb\xef\xe2\xce\x08\xb4\xe0R\x46\xb6\xfb*J\xb5\x89\x00\xcb\xa6\xf9\x9b\x88(\x65(\x9eL\xa8\xbd:\xfd)\xb0\xbd\x9f\x31\x39\x34\xe7}" "\xd0\xba\x08\x37N\xff\x96\x9c\xc2T\xfa\xaf\xe8\xa7\xb1\xe3RJ\x65\x30\xc2kp\x8eR\x99\x9c-\xe2\xea'\xf8\x19\xbb\xa6\x33\xe9G\x1a\\" "/L\x64.W\xb1\xd1I\xc4\xe5\x9d\x8bq\x32\x01\xb5\xe3\xf8u\xb7o\xf3.\x98=\x12\x36\x83\x93{\x44'\x17\xad[\xd0\xc8\x42V\x81" "\x65N\x10\xfa>s\x82\xd9@\x61!\x1bm{\xb1\xedk\xe8\x1al$\xa2\xd5\xd3\xa0\x45O\x16\xda\xec\xa5Q\x97\x02Z\xe8z\xd3\xe2\xf9" "/\xc5\x81\x33\x31\x04\x8a\xf6{m\xc4ZV\xa1ug\x84\xb6&\xd9\x88\xfe\x33\xc4\x65\x0f\xce\x82\xd4\x96(\x35\xd0\x36M\xbc\xbbiZL" "\xcd\xd0\x0f\xedpZP\x1e\xc6\x93N\xa2\x1d\x1e\xd5\x82\xea\xf6\x0e\xe2w\"\xaeO\x92\x0e\x9b\x1d@\x1f\x05\xe2y\nNx\xd0<\x1c\r" "\x34\x19\xb0\xd9\xcc\x1a\xb4\xe2\x1c\x03 h\xb7)\x04\x65\x86\xf6|\x85\x86\x14\xda\xa6\t\xeb\x9di\xba(r\x92\xfc\r\xfeS&\xc6\xdd\x14" "\x96|\x42\x1b\\\xc4\xb9s\xd7\xf6\x8f\xaf\xe8P\xba\x86\r\xd2\x44\xf3\x97\xfd\x44\xda`\x81\xb8\xf0\xf5\xc7\x88U\x93\x46Ov\x11\xc3.\xa3" "T\x89\x66\x8b,\x8d\x9e\x44\xfe\x81\x35\x84\xe0\xefI\x34\xb2\x0fx\x1e\x9e\xbd\x80\x66\x19\xcc\\\xa0x\n\xad\x33\x9f\xb9\x08R\x1f\xa0\xc5\x39" "\x31\xf2+\xa9\x88\x32+\xa2\x45%\x13Z\xb7[xS\x80yO\x44\xeb>\x08\xad\x17\x93\x61'Rh\xae\x83\x99\x0b\x8c\xd7\x84\x16\x34\x42" "\xd9\x07\xab\x38/\xac\xbd\x82M<\x08\xe6\x87\x33\x17\x98\x80\x11\xda\x42\x10\xe1\x06\xb7\x46\x0c&\xa1U=\x42\xdbN\x41h\xc6$\xe1\xae\xe4" "\x44\x93o\xa2\?-\x0cG\xc6$\xaa\x97j\xcf\xa0\x8d\xd2\x85\r\xfb\xd2\xe9\x30\xfb\n\xda\x1e\xb2\x42\xa4L:*\xdd\x86\x85\xd7\xa8\x64\x39" "'\xf3\xb7\xb1_gx\xbbL\x90\xba\x08\xd6-\x8a\x9f`\x86\x7f\xb2\x86\x46h\xf3\xf2\x42s\xd3\xcfpS>\xa1\xf5T\x95\xdf\xe0\x94\xbf" "\xb3\xdd\xda\xdc\xf9<\x93\xc1\x96\x15\xc2k\xeaH\xe4\x0c\x46\xc2\x46\xdb\xe9\xf9!\xd1\x36<\xd1\\\x14\x85\xc5\x36\x89\x07\x81{\xb7\xb0\x85\x1b" "\x61V^Xxu\xea*\x64\x64\xa2L\xd4\xc0\xd5\xa2!^/\x9a\xebh\xd2\xaf\x81%\xa0\xc2\xab\xb3 \xd5\x87\xc9\x42\xb4\xeb/\xb0s" "\x66\x84\x9b\\\x86\xbd\xe7\x0c\xf7\xf4\x15\xf6G\x41\xf1}o{kg\x64pW\x05m!]\xa6\x84\x1e\x81\x31\xd9\x8f\xc6\x34l]\x0c\xf1" ">\x39\xca\x9aH\x45\x66\x65\x15\xf7)^\xc4\xbc)\x8c\xc9o\n\xd9\xe4\xc4\xf6S\xd4\xcd\xc0k\xd3,\x11\xb0J\x98\x16\x9e~'\xb3\x1b" "\xa2]\xd7@\x9b+\x30\x06\xf9\xab\xfd}\x9e\x35\x94\x1e\xc0`\xd4\xc4}{\x17\xda\x06\x98\xa2\x65J\xa0-\n\xf7i\x04\xa1\x45\x06\xcep" "\x07\x91L)\xb6\xe5\xdf\xc6\xa3\xd7\x8e\xe7\xb8\xdf\xfe\xfc\xd4\xa9\x1d \x33\x1f\xbb\x86\x1e\x8bi\xc1\xa4\x8d\xfe\x81i\x88o \xa2M\x12\x64" "\xca\xac\x00\xca,\xe2\xe5\xd0\x1c#\x85\xd6i\x31\xc2\x81\\\x44\x9b\x05\xc9\x94\xb1\x31n\xa6\x82\xd8J\x19\xae\x1c\xccpy`\x86\xde\xec\x19" "\xae\xee\xcbpU\\\x86\x0b\xd5\x84\xd6t+[\xf0\xf4\xcbpyY\x86\xcb\xbe\x84\xe6\xe7iL\x82\x1b\x8bV!\x9bSgr\xad\xde<" "\xcc\xd5\xe0\x61\x90\xe1\n\xa3\x8c\x1aXY:u\xa1\x8d\x46\x12_\xf3Q\xa4\x99\xf4[[[\x9f\xe1j\x97\x0cW\x9c\x64\xb8h\x43h!" "\x82\x84\xb6\xf7\x90\xb0p\x02\xa2(q\x65\x44\x86\xee\xea\x42\x14\xa1J\x94=\x03Q\xc7\x0b\xf1{\x0cj\x84O\x05\xd0,\xb0\x46\xd8\xcc\x45" "|]\xb2\x66\xa0\xf3\xb3Q\x1a\xcb\xbf\xc5\xb3kGo\xa9\x9a\xaf\x8d\x13\xcd\x66\xe4\x32\xea\xf2,\x8f\x0e\xd7\x30h\x37\xd5\x44;\xcf\x31\x33" "U\xe2\xcb:\x98\xbd\x63-UI\x46M\x19:\x31\x0bQ\xfbV\xe0# \xb4-P\x32t\tVNI\x9e\xe7+\xae\x33t\xc2\xcd\xd0" "\xa7UX\xbfp\xfa]\xf6\xe6\x89/|\xb7\xaf\xcf\x38I\xca\x11\x88\xc6\xeb\x16\xfb\xda*o\x9d\x1a\x46\x0c\x39\xf9\x16\xe6\x05\xe5\?\xe7\xfe" "\xf1\x19\x0e\x37\xa2\x99\x39M\xb8{t\x32\xbf\xaa\x88\xee\xaf\x8a\xf6Qu_\xf6\xc8\xb6\x02V\xb1\xef\xd4\xc8T\xc8\xcb\xaa%\x16%\xd3\x12" "\xfb\x86j\xdfI\xc0I\xd1\xcc\x8f\x43\xe8\xbf\x44\xefN\xc8\xbf\xa3T\xdc\x32\xeb\xdf\x06\x37\xd7\x64\t\x44\x43{\x1bt\xbf\xc1>\x8f[x" "\x38\xe1x\xe7\x64\x15v\x1b\x98mG\x38M\xc8\x1a\xf1\x36\x98\xcd\xa2\xb7&\xe6p\x45\xb3\x15\xee\x46\x98\x14 \x8ex\xe5_>\x89\xf5p" "\x85\x36G\xaa\\\x38\xd9gP\x91\xe5\xe6\x16\xc1\xac\x8c\xba\x11\xfd\xee<\xd1l\x06\xdf\xc4\xe0\xea\x19\xfb`\x1ei\x08\xd0\x81\x03\x16\x96\xdd" "\xc4\xd0Sx\x33\x43\x8c\x1d\x13\xd1\xbb\xce\xdcJ\x65%-z\x98\xc1\x1d\xc3\xeb\xebx\xfc\x8f]\xa4[\x7f\x1ev<\xa4\xe5\xfeqz:" "!\xec\x88\xf1\xe8\x63\x62\xcb;\x65\x0e\xb4P\x9a\xc2:r\x9fn\xd6\x94\xe9G\x37kjK\xe7\xdf\x62\x1a\xe4k\xae\x05'\x65x\x36@" "+\xd6\xd8\x03\x37\xcd\x46\x12&&\xcf\x82j\x41\xb8\xd6x\x35\x16\xcd\xcb\xb5\xa8VrM\x9e\x13\xcb\x83\x44{\x42z\x62\xaf\x04\xa3\xe7h" "\x11\x93\xeb\x9a\xd9[\xd8>\xd7\xebz\x62\xb4\xcf\x45\x84\xc3\xa7j\xd7N\xf5\xeb\x61\x9eM\x34\xf3w\x34z\xae\x8b\xa6\xc8S\xd1\xbaN~:\xe5K\x46k\x14\x93\xf8\xe4\xdc\xe9\xf7\xc3\xa4\xad\xf0\x1c" "w\x8a/\x8b\xd2\xf9\xc0\x02-\xd1P\xed\xdfJ\xa7M\x06NR\xae\\SW$~L\xd5\xf2\?\xc9\xdf&i\xa7\xd7\xa1\"&w\x9b" "<\x80_\x17\xff\xcf\xff\x01->\xf5\xff\x0bY\xbf\xc5\xff\x39\x88~\x18!\xac!\x36\x9e\xb4\xcc\x31\x81\xedo\xdf.J\xa7\x18\xbe\x9a\xd0" "\x32\xfd}\xea\xe3\xe8L\xffr*N\xab\xe1\xb4\xe1\x9a\xe4\x46x\xc8\x99\x96<\xaa\x88\x83\x0b\x84\x1b\x33m\x7f\xe2\xe3\x01\xd3<\xe6\x34\xb4" "\xc3}\x35(\xf2=O[\xbe;\xbd\xc5\xc2\xfeW;\xca$\xf1\xc9MT\xfd'\x9f&\xee\xef\xc2\xa7;I" "\x9d\xb8\xd4\xf6\x37\xf0\xcb\n=\x31\x45L\xac\xf5\xa2\xf9\x89\xc5\x9c\?\x90\x8a\x9d'\xe9\xa8\x1d\x1d\xa0MM\x45\xb9Y\xd4~\x0c\xaa\xa5\xe4" "\x00\x13_\xc4\xe4v\"\x1e\x32\x15\x96\x61\n\x8f\x0e\xb5Q<\xe1$m\x64\x1bq\xc7\xc6\xee.\xde\xbe:\xd9\x9dP\x31\x39\x0b\x03\x9f\xbb" "\xfd\xc9\xa5\xbf\x98\xd7\x15\xfb\xe6\x95\xd3\xdf@\xc4\xe4,\x11\x0f\xf9\x32\xd1\xe0\x99N\x43\xa8\x1e\x8eV\x95\xf0\tU\xd2\xfe\xf1\x1e\x81)\x33" "\xdcG\xd1\xa8\xeb\xacm\xb1{\xa6\xce\xa1\x94\xf2\xd0V\xd4\x31q.\xb4\xb8<\x42\x34\xddu\xb8/\tSi\xb2\x04^\xfes\x06\x85\x1c" "\x62~\x43\x9b\x66\xfev\x85\x44\xdb\xb6\xff,Z\x9ci\xe1p\x93\xfc\xcd\xa2\x89g\xb8\xd1\xa1\x91\x63\xc0z\x90\xcf\x80\xb6\x13\x94\xf2\x8e\xac" "\x93\xcfNZ\xc3T\x84\xf3\x86\x8ax\x11\x0e\x9e\xea\x1c<\xd5\x39x\xaash[\x0f\xfa\xfc)\x06\xa7J\xb6\xb4u\xc4>\x13N\xf8@" "\xa8\xed\x95l\x1dU\xe4\x37R\x91}\x0c\x13\x97\xc9o\xb0I\xb5\x8a\xbc\xac\xed\x8d*\xfc\xe5\x1d\x17L\xc2%\xdf\xd7\xdc\x05\x33u\x38x" ")[\xce\xf0_:\xfcw\x0f-}\x45v\xc1\xcc\x17\x08\x83R=\xcc\xf3W\xb5\x91\x33,\xe3\xdb\x85w\x03\xa7\?\xb1\x88\x98W\x13\xb1" "\x81\xc7\xc1\xfe\xdb\xca\x0f\x10\xf5J=|z\x04[\x9f\x61\xf5\x04\xbe\xa3\xa2\xb5\xcf\x9cz\xb4\x85|\xe0\x1f\x03K|\x32\xf5(\x85\x14\xe5" "\xd8\xb3\x8e\xcd(\x8c\xfe$\x34\x8a\xd4\xb1\x38^\xd8\x45J\x63\x8d\x9c\xd0<\x12\x85\xe8\x1e\xd7\xb1R\\\xc9K\x8e\xf1\xbe\xb4\x16{sS" "G\xc0S\xa1\xcd\x43\x65\xea\xf1\t~\xc7no\x1d^\x89\xc6\xbf\x65\x95&\x1c\xd5\x82\xfc\xd5\x41\xc3k`\xb1\xb9Q:_\x9cpQ-" "\xd8\xa6\x8e\x34\xa9q\x8f\xb4x\xb2\x62/\xac\xce\xfe\xa2\xf0\xc7yT\x04\x45\xc3:\x39\x13\xf7\x8b\x97\xbd\xff\xa1\x8bO\x1f\x0fP\x16\x63\xbe" "\x32\xfb\xdf\xf5\x64\xb9\xb4\x88\x1b|\xb4x;#\xf1q\x35\x16\"\x8bW\xbc\xab\x92H\x30Lk\x0b\x8f\xfcq\x45\xb3`\xed\x19.#\x15" "\xae\x32\xce\xf0\xe4\x31\xacW]\x8bw\x9b\x44\xc3\xc0\xf0\x01\xdeg\x46\r\xf4\xc2+\xa8\x86\x11\xd2\x43\xe2\x8b&\"l\"\x0f\x41\xb1'\xd7" "\xf5\xbb\x04\xa3^x\xda\x0b&mh\xe3S\xd0|\xba\x85\xb0h>\xd0&\xfe\x10l\xdf\xc0\xa3\xe5\x12\x99\x07\xb9\x80\x93\x8d\xf0\x43\x88o" "\xad\x64\xe9U\x91\xb5\xb4\x8a\xc9\x89\xc8\xdd\x0f\xb4\xfc=p\xee\x44\xa9kZ>xV\xe9\x95\xfc\x05\xd1\xd9}\x08;\xa7\x61\xbd\x12\xb6p" "\rlr!\x34_n!\xccO\x0f\xf1\xd9\?\xf0<\x07\x7f\x15h\xcb\x8f\xa3w\x80\xb3\xa4\xf1\xef\x37-\xdf\?\x9c\xe3G\x98L\xd4\xcd" "\xd4\xb2\xce}\xd5\x46V\r\xd6\xd4J\x8e\r\x1b\xec\xc3\x37\x82\xfc\x1c\x44\x9d\xd8\x08\xaa\x63\xb0\x37\xdf\x37\xff\xd1\x94\xd2\x08\xde\x1e\xb0\xe4N" "\x44\xd4|Jv\xfd\x1a\x07\x0bR\x83\x43\x80\x06\xad\x41\r\x19\x01\x06\xf9_ir\x13m}\x9eh\xb0\xc1\x34\x42\x0bi$,\xa4\xc9\x1f" "\xb0\\\x06\x31\xbei\x84s\xe8~/!K\xb4\x8a\xfe\xa8\x34\x1f\x34\xb4+u\xf2\x02\xf1\xb9\xe6\x0c\xd6\xb7\x11o\x03gV\xe1+R\"" "Zu\xfd\xb7\x34\xb5\x36\xb0,]h\xee!\xc6\xa0\x7f\x87\x35\xaf\xa2!\xbfr\x99\xa8\x10\xc3\xb8\x86\xe4\x18yK\xf8\xbf\x8b\xc6o\xb0\xff" "\xdd\xeazYs\xdf\xcc\xb4Xu+uWz\x98\x38U\x0b\x1e\xd6\x88\xdd\x90i\x45\xcfg\x92\x9d\x43\x8c\rZl\xb9[~\xee\xfe\xe5" "^\xfe\x8a\xb0\x8a\xd2W\xc6\xe7|\x0e\x46w\xfcP\x14Y\xc4\x9fu\x15Q\xae\x16\x9f=\x1ck\xe7\x36:z\xa6\x91\x99\x0b\x80\x8d\xfcY" "\x9bmq\x1b\x81\x86\x84\x16\xda&\xd3\x8e\x9a\xe9\xe8\xbd\x86\xed\x1a\x33\x1d\x1aU;,\xd7\x9d\xbf\x1d\x8e\x07\x16Y\xdb\xa8\x1d\xfeQ\x9fZ" "\x1a\x84m\xb3\x83\x30s\x46\xda\x9aT\xc4\x06\x30\x10QOw\xb0\x95\x91\x10\xe3\xcd\x0e\x96\x8c\x08\x31\xcb\xd8Q\x8b\x7fi\x8d\x8d\xdf\x44\xeb" "\x94\xc1\x1e\x1e*x}\x00\xc7\x39\x10&\xfd\x0e\x9b\xf8\x0e\xb3\xa3\x12\xfek\"\x16p\x43NKv\x10T\xd3h\x9b\x1e\xe1\x61\x0f\xe6\xf5" "\x8e\?\x7fh\xa1\x1d\x85+<\x8b\x64\x46\xce\x8ft\xe0\x99'\xc4g\xea\xb0\x8f\xde\x89\x06\x96\xb2\x1dx\x35\x18u\xc6\x16\x99S\x35\x66\x80" "\x0e\xad\xe9\x1d\x44\xc6\x10\xa2'\xd9\x81\xaf\x83\x0c`N\xf0\x9e\xfb\xdb&\x9b\x00\x1f\xd3(\x0f}\xc7\x8e_P\xfd\x0c\xfc\xc4n!\xbe~" "\x63\x9b\xd4\xfb\xc3\xecj\x0f\xfb\x33+W`\xfe\xdd\x89%\x46\x10\xd1\x0bQ\x11[\xf0\x8aX,\x39\xffP\x41\xab\xc8\xfev\x8f\xe3\x42\xa5" "\xdc\t\xbe\xda\xa6\xb1\x01P\x91\xa3[\x8a\x1c\x7f\xaav\x18@\xf4\x02\xf3\xa6\x14\xb6\nN\xda\x1f{\xc1s\x0f\x34g\x63#\x1c\xc1\x45\xc4" "XHy\x38\xf4\xee\xc4\xfa\x14\x11m\xdb\n\xe1\x94g\xdbv\x45\x42[\xa9\x63\xe4\\\x66\x0f\xd1g\x33=\x8b\xdb^wq\xdfl\x42\xc4" "$l\x0f\xde\xec\x42\xde\xd3\x7f-\xa4\xadG\xc5}\xfd\x1f\x87\x93\xbd\xb0\xe5\x63\x86\x1e\xad\xb5=:\n\xf4<\xc9\x84\xf0I\x12\x11\xe3\x1c" "\xe5Qz\xe9:\\X_T\xe2\x92I\xbc\xb9u&\xc9\xb3" "\x45V\xf0\xb7\nO\x90\xbe\xe1\xe9+\xe8;~\x8a\x98\xc6\x93r\x90(\xc4O\xfd\xf3\xd2\xbd\xa5\xcf\xd6N\x19\xf5k\x9eL\xb4\x9f\xf7\xe1" "\xe1.\x34\xdf^\x61\xbd\xef\x64\xa9\xeb\x63\xa3P\x61\xf3\x43\xcd\xa5\x83,\x34T\xde}z\xf8\xf4Y\xc7\xf5\xd9\x92\xf6\xc3\xae\xd5'}," "\xb9\x16\xa2j\xedG<\x1f+\x19\x84\xe6\x82-\x1c\xe0\x81X\xdf(=\xbf\x89\xe8\xf9\x8c.U\xfd\xe8\xed\x11|\x7f&yU[@)" "\xc4\x64g\?\xfa\x44Q\xe3HRy\xf4\x11U;\x94\x00\xec\x30'\x84%\xac\xcf\xf9\x95~|\x8a'\xf7g\xc0\x1a\x32!\?~\xec\x9b" "\x9e\x8b\x38\xf1\n\xaa\x8f\x10-J]\x8b\xcaO\xae\x85Y\xee" "unZ\x34>\x39h}g|\xf6\xc8\xbe\xf8;[\xd7wi]\x41\xb4\xa7\xef\x9c%y\x8f\x96\t\xe5\xfd\x82\xcd+\xb4\xf5i\x90\xce" "x\x62\xc9\xe5\xe4o~\x45\xd5\xe4\x16\xff\xd5\x98\x64\xa2\xc9(\xef\xf0\x37\\-\xce_\x86\xb5\xd7\xb0[\x87v\x83/\xc6y\x98\xf7\xb8\x93" "\x0f+\x37\xfe\x9c\xf1\x00I\xb7/_\x63\x8b\x39\x11m\xcd\x86\xb0\xf9\xcfy\xf4\x82\xd8\x1cT\x88\xde\xe7\xfb~\xb9r\x1e}Yh\xfe\xd2" "\xa2%{L\x43\xbb\x65P\xfa\xcc\x07\x42\xa3\x1bu\x8f\x17\xc9\x35\xb6\x96@\x0fl\x41\x34\x8b\x1fl\xd8\xd4\x0b\x0b\x44\xceS\x62\xd3\x9c\xcc" "\x87\xfc\x03\xf3\x03\x10S\x64\x1f\x9cL\xff\x08\xbb>#\xff\x81@\x61\x42|\x9f\x0f\xda\xa2>\"T\xf8\x1fL\xcb\x0f\x0e%\?\xe2n\x1a" "\x44\xef\x9dK\xa7\x8dG\xcf\x1c\xc3\\\xa2\x64\xcb\xf1\xb1\xaf\x9f\x82\x16\x04\xcd\x82\xc8:i\xf4\x98\xd1\xc5j\xf6\xb7\xea\x05\xe3\xeb`\x9b\xa5" "\xd6\x07\xe1h%l`}q\x66\x16\x9c\x16\xb1+\xa5\x88\xa9O\r&\xdez\xa4\xb6\x02\x0b/ J\xeb,\xe8\x9c\x87\xa7\x13\xf6\x37g" "L\x39\xa5N\x11U\x46\xae\x45w\x8d\x63m\xfd\x8a\xe5\xcf\xa6\xed\xd7\xcf\xd1[\xf3H\x8bm\xa7\r\xd1\x06\xd5`v\rqt#\x63Z" "\xb8\x63\x9b\x16U\xebq\x85\x8f\x36\xc2\xfb\xd3\x7fQ\xf8\x18\x9e\x9c\x44\x30\x08\xcf\x92+\xfc\x9e\xc7\xf3\xdf\xbf_\xfc\x86\xcd\xde,<\xbd'" "]\x1f\x46\xabk\x0e\x14\xa9\xb1\xdb\x37\x43\xa0\r\xe1\xe5\x16\xb4\xb8\xc4\xac\x95\x66\xb4\x02)\x8f\x0e\xb1*\x9fq\x94<\x63g\x7f\x16\x96\xaa" "\xa0\xad\xd5\x37\x1e%\xbdn\x44x}\x93hO\xb7`\xefY\x1dW*\xbc\xe2\x88\xbf\x1cg\x9d\xf2\x89#\x38\xaaQ\xdb\xd7\xf1vQ&" "\x13\xcc\xc7\x10\x31\x85\x33\x63\xee\x9c\xb1\x9d\x9b\x45\xff\xee\xd8O\x9e\xa9{\xe6\xc9I\xd8\x9cS\xc3[\x33{\xcfh\x02\x9d!z\xa5\x31\xc2" "\xa0n\xc6z`\x16W+\xd2\x37@\xc4S\xd1jo\x87\x42\xe9\x1a\xb3\x1b\x82R\n'\x0f\xfa\xf0M^g\x9eP\xf3\xf2U\x1b\x1a\xca" "\xc5\x8c\xc6\x94/\xacwR\xf6@[\x1f#\x44\xae\xfe\x62\xb7\xf6+\x38i\x91K\x10\xdd\xdb/\x04\xccQ\xe6\x41LR|!\xc8\x96\x10" "\xbe\xa3_\xd8\x80H\x88\xe9\xdb/\x0e\xf0\xbe\xd8%\xfb\n\xb6w~KN\xcd~!\x8e\x8f\x10\x66w\xe1'\x98\xb9sr\x96\xea\xeb\x30" "u\xfb\x65\x33^)\x8ak'\x07:*\xd2\"\xfa\x95\x84\xcb\x82\x38\xff\xa1\xe5\xfc\xa0\xe9\x62[t\x13\xbe\x38\xc3+\x1c\x82\x39>\x63\xbe" "\x03\xc2Z\xa9T/\r\xf8\x8c\x88\xc6_\xa1\xb9\xfa\xe2L\xf0W\x38Z\x45O\x65\xceO\xaa\x16O_\x13m\xc2'\xfd\xc6\x35\xa2\x34\x9e" "**\xdd\xc6\x8b\xeb\xfd\xc3=\x34\xcc^*\x83k\xa4$\x62w\t\xd1\x33\xfb\xa2U\xe7\x8b\xc6\xb5\xafx\xf0\xe2\x0c\xcfS\xd1\x8a\x7f\x9d" "\xf3\xa8\x85\x15\x15~\x7fj\xc0\x08T\xd0\xd4\xa2\xe6s\xa2M\xaf\xe9T\xf6\x15o\xf1`\xb4\x8f|\x61\rW\xe6\x8b\xbd\x9b/\x04\xab\xcc" ",\xa4t\xcb\xa8L+\x1b\x0b\x31\xac\x07\x32\xa4t\xfd\xb9\x41\x8bi\x34P.X\xdf.h\x1c[\xd0\x1e\xb5\xa0=\x8a\x01\x89\x85\xbf\xf6" "$\x0b\xf9\x07\xf2\xf7\x88\xd6`\xcb\x18\xb1\xa4\x11\x1a\xca\xea\x02\xf1\x41\x85\x9fo\x61\x31\x1d\xd9\x46\x36\xa2!\xb9\x17\xfe\x90\x9c>Y `" "\xba\x10\xe6\x8c\x45\x34<\x41\x9c-\x11\x61\x1bT\x86\xb5M|\x61\xbd\xa2\x05\xc7\xcb\x8b\xf8\xa2\xe6\xf4\xe7\xf5W\x8dsH\x19vv\x94\x1a" "i\x01sQ\x0b\xc4\x01\x15\xc2\xe0\xba\xd8\xbf\xdc;\xfd\x8e\"\xeeQ~\x16\x08`\x65\x64\xb2\xad\xf8\xc3\x35\xd3\x99\xf1\xe1\x32\\\xbd)\x65" "\x01\r\xf5\x1a+\xd1\x84hn\xd6R\xe3\x83\x16HH\x88\xa2\xb9\x96\x66\x30\xe8N\xf7\xad/h\x30J\xaf\x83\xad%\xe7\x9a\x93\x61\xeb\xb0" "\xd5\x04Q\x8a\xd6XR+\xfcw\x8f\r:\x44\x84G\xda\x9a\x66\x8d\x35k\xcf\x35\x16\x45\tW\x38\x8f.\xcek\xe6\xcd\x35\x62\xf2\x08\x31" "\xfeWr\x44\xba\x66\xdf{\xcdN\xdf\x9a\xbd\xd1\x35\x9fv\x43\xa7\x96\r[,\x65\x90\xee\xc7\xb9\x01\x35\xcb(\x1b\x44\xae\x30\xb2\x1a\xd9\xe8" "\xfe$\xf8l\x1b\xda\x94\x37L\x37%\xdf`\xc3\xd1\xf8\x86\xf6\x9e\r\x16\xca\t\x91\x63\x37\xf4\xa4\xde\x04\x37\xbf\xa0-h\x15\xfa\xae\x12\"" "\xc2\xf1n\xc3\xc9\xd2\r\xdd\xab\x37\x41w\xec\x0f\xcf\x0f\xb4\t\xfa\xbc\x1a,\xac\x1b\x0ev\x37\x88\x16%\x9c\xa5\xc1\xc4\xbfz\xc3\t\xcf\x8d" "T\xaf\xfe\xf8\x9c\xeb\xdc \x08\x8a\xd0\x9e\xc1\x1f\x83\x15\xdc\x86\x15\xdb\x86\x65j\x83\x1d\x35\x95\x65\xf0\x86\xfa\xcd\x0b\x89\xa4\x0c\xab\x93\xe8\xbc" "\x05\x11Sy\x9b\x83\xfdv\x13>\\\x81M>\x0br\xc0\x86\xa3\xd3\r\x42\xc1\x1b\x65`zt\x34\x9e\x9e'Z\x97\xbf\xb1\x90<\xc6\xe4" "r\xd3\xb9\xf3\xe8\x10\xa2\x8c\x99H\xcf@\x15\x35\x66%j\xa8\x8d\xd4\x08\xf2\xcc\xc9/>\xbb$~\x46\x97\xc4\x8d\xbf\x96\x9e\xca\x37\x13\x91" "M\xc8\x06Q]\x84|#\xd6\xc2\x9b\xe8\xf5\xce\x89\x98\xa9*\xe2\x46\xd1(\xeb\x94<\x89\x18!\xaam\xc1\xf1I\xf4r\x81\xd0\x01\xa2\xa1" "\xff\xb0\x89\x96\x33r\x07\xaex\x1b\x38wm\x38\x18\xde\xc4\xe7\x05\xf9\x82\xd8\xd4:\xe3u\xd3&\xce \xa3\xc4\x45\x64G\xed\x46xT$" "\xd5\xf0\xa2\x1c\xbcl$\xcd\xc1Y\xdb\xf9\xb7\xea\xd2\"\xa1Z\xb2\x9b/\x34\x38\x01\x99\xd8j\xb9\x18\x9e<\x46\xab\xf9\x41\x1b$\xe2\xcb\x19" "\x62.\x42\xc3,\xac\x8a\xf4r\xdf`\xabu%o\x88\x0e\xe4\x66_N\x87\xd9*\xf6\xe7\x16\r\x83\xa1\xcd\xfe\xb1\xbcO\xe5i\xfc\xdf\xb0" "\xce\xdfp$\xbd\xd9\xaf.\x82\xc9\x82\x7f\xdd\xb1\"\xdc\xb1=\xf1\xa1\xc0.\xfcg/\xba\x43\x0f,{\x86\xd2-\xb4\x97\x14Z\xa9\x16\xda" "\xc2\xd4\xec\x19\xb6\xb8\x10\xda\xc0X\x39\x02\xcd\x12\x93=\x8bR/\xc6\xb8\xddM\x82\x30\x89\xd6\xa9\x39\xff{T\xb5M\xf9H\x43_-{" "\x86\n={\xc1\xe7JiSikW\x44\xb4\xb5\xa9\x42s\xac\x37\xa2\xba\xcf\xa6`\xfe\x13\xda\xdb\t\xad\xe2\x36\"\xd3\x8a\xb8%\xadI" "W\x0e\x8c\xa1\xc5\xf4\x37\x06\x45\xe9Y\xdd\x1ek\xa7\xb8\\x\x35\x06\xd3;\x30\x9b\xe2s\xa6\x10\xeb\xd7\x88\xa9\r\x88\xcbL\"\x9a\x0f\x89" "\x89\x18\x12\x8ah\x45\x37\x9b\x42\xf9\x31\xfaS\xc5\x66\x31\x13N\xf0\xce\xe8\xd8\x1e-\xcd\x15q\x87\x87\xda\x37\xde\x82\xf6\x13\xbc\x95\xa9\xbd\xff" "W\xc3\xcc\x85h\xee\x31\x9a\xbd\xc4\x84\xae\xb2\x19t\xee\xa5\xbb\x14\xf7w\x98\xd0\xb0\x63\x38\x00\xcdZX\xe1\x1a\x7f\x45\xa7Xh\x1e:\x1a" "\xad\x17\x7f\x87#\xba\xf2\x17\xc4G\xbe\xc4\xd2g\x61\xe7\x1e\x43\x45\x11-\x88\x87\xd0&@\x84\x33<\x0c\x1a_\xa1M\xf8\x66/\x43[\x10" "!\xbc\xc6q\xd4\xcb\xca>X\xdd\xa2\xe5\x15\xd1,\x31\x42\xf3=\xc9r\?\t\x61\x9b\xa7Np\xabp\x8e[G\xe7g\xa1\x15q\x11\xad" "[)\xb4\x92\x62Tk\x16\x9f\x31\xea\x94\x8e\xb5W$\n\xaa\xa2\xec%\xbc;\x84\x36X\x13\xf6\xd5\xb9\x41\x12\x10\x9a\xf5u\x94]\xa7\xbf" "\x1a\x9ay\xe1\x0e\xcf\x85p}Y\x46\xdd\x14\xdav\xd3\x46X\x45 \x9a\xf3J\xf6*\xfe\xb6\xb7\xbe\x86g\x42\xf6\x9ag_\x87\xb5^X" "\x1e\xfd\xfd\xf6\xa0\x99\x01 {\r\x63\xa9Q\xe7~\xcd.\x05m;\x86\x8f\x81i\xe1\xf9\x02#\x33h%\x86\xe9v-\xf9\x9bm+k" "\x94\x42\x82\x15\xcf\xd9\xeb}\xea\x37\xb8\x39\xdf_\x66\xa1\xd9@H\xe8+n\x44\xb4\x1e]\x36\x8d\xf6\xdd\xc8\x42\xab\"\xeaQ\x88\xbem\xb6" "i\xb0\x01\xbb\xc8\xcf\x00m\x11<&\x9a\xfa\x00\x9a\xcb\x82i\xf1\xf5S\"Z\xf4\x10\x15\xd3\x1a\xdb\xaa\xd1\xa0\x96!\xb3N\xf4SU|" "t\xc2%[\xc5\x37\xcc\xe3\x8a\xe8\x0b.\x44\x44\xb9\x10\x16\xd1\xb8\xa9\xd8\xc3\"\x36\x15\xc7$\xff\xb4:\t\xf2m\x8d\x15\x9ey\xf6\x03q" "\xe1]\x0fX\x94[\x39`k\xd8\x94\xbf\xce\xc4\xdb\x16\x9aG%\x13\xcd*\xf3l\x1a^s\xc2T\x36l\xec\xf6\x97W\xd4\xfa\xe4'l" "\xcc*.\xf4n\xbdw\r\xe7\xdd\xc2#\x05\x97\xd7\xe0\x15u\xd4\xfci\x8c^\x85\x99\x86\x13\x36\x64\x13\xe3/\?\xca\x43\x16+\xd8\xc8O" "\x9d\xd6\x98\x0c\xd6OQ\xf1Q\x1at\x88\xf9\x66\xd8\x7f\n&\xbcY\x81\x0fvs\x81\x08\xdd*^'\?\xf3\xa0\x65\"\x96\x66\xc9u\x1b" "O\xbc\x12\xdf\xb3\xc9Ghr\xf1\x9a\x8a|\x9aG&\x90\xb9H\x1b\xff\xb6;\x17\xc3;\x19w\x37uS\x80\x87qr\xec\xb1\xed\"\x86" "\?*\xbe;\x83\xe7\xf6\x91\x98\xf8\x30\xdb\x81\xb0]\x8a\xe7\xdb`\xba\xf6\x03\xd1\xe6.\xf9i\xbf\x80\xb8i*\"\xb7\x06\x83\xcb`\x9cN" "\x8e\x0e.\xe5\xfd\xe3\xe2\?\xcd\t\x36\xc1\"\xc7\x46M\xd0V#(\xbf\xd5\x8ais+\xd4\x90\x45\xe0\xf1g\x91\xec\x35\xec\x62*Km" "\x1d\x0cS\x07\x91\x17\x9b\x15@\xeb\x82\x1b\x93\x84\xff\x99#\xd6\xb9\x88\xbf\xe7\xf6\x0e\x0f\xd4\x98\xaa\xbf\xb7\xc9\xb9\xbf\xe3hU\x61[@\r" "\xfd\x18\xd1\xcct(\x44\xa3\x97\x46<]u\x1a\?q\x06\xbf\?\x98\x7f\x82\xb6,\x1ei\xba\x31\xd6\x91&-\x66\x66\x97h\xed.\x82\x19" "\x99\x16\xff<\xc2\xd1\x46\xb5\n\xb8\x65\xea\x32\r\xd9\x64\xa4\xbd\xe0J\xe1\x07\x99\xee\x38tt\x34|<\xc3\x96O\xa6\xc1\xd9@\xc5*\xd9" "!\x37`\x81\x97)\x97\x31\xdb\xab{\x08\\\xc9\x17\x08\x32\x9f\xae!P\xbc\x8a\x37\x9e\xaf\x45\xf4\x94\x86\xdf\xa4m= \xc9\xab\xfb\x17x" "\xacz;\x16\xbd^\x86\xddq\xa2\xc9\xd7\xcd<'\x7f\xbe\x1f\x63\x02\xc1\xc4\xd0\xb7/\x10\x36x\xc7\xe6&,\r\xc2'\x1e\xf5\xd7z\xbc" "t\xb2uL{\xa6\x87G\x99\x10\x9d\x98t\xf8\xbc\x0e\x9b\xf4\xdd\x87\x36\xe1\x0b\xb0JL\xf4\x7f\xf7\x89\x0f\xb9h\x9f\xb7\xc9\x83}\xde\x62" "\x89\xb1\x89\xf1\x17\x8a\x43\x38\xcfz\xe1\xd2x\xfbr]y\xfb\x43\x61\x8a\xb2\x17\x9e\x89\xb1pKx\x83\xec\x1aU^<\x11\x45\xdcW\xf1" "\x18\x89\x0b\x8c\x88\xf7\xc8\x10^\xa4\x85\xfevQ\xa3\x96\xfc\xb6\xc1\xcb\xa1\xc7\x95\xc6\xf2,\xe1\xa0\xb4\xffw*\xc5\xe5o\xf9\xc0\x03\xa8\x38" "\xa2!O|\x43\xfe\xc2\xf8\x45\x38\xe6\xb5\xa7{\xf0\n\x8f]*\xe1L\x32\x89\?=\x8c-\xc2\xc2{\xf2\x9b\xe2\?\xb6\xe0\xe9" "\xf8\x66(I\x13\xb1\x65\x41l\x45\xe1\x04\r_\xccg\x97:M\xbf\xce\xe3\xcb\xfe\x8c'~\xbd\x87\x8d\xb5\xa4QH\x9e\r}\x1eS\xacY\xee\xfa+\x44\x8f\x46\x99\x9c*\xa2\xb9\x42\x98\x88\xc5\xa3\x10\x9b<\xa1\xc0" "k\xd8\xf4`\x96\xdb\x90\n-\xac\xb2\xf0\x95{\xfd\xf9\x06\x84\x42\x34gyX\xc1\x85\xd2\x02!]\xf2\xc1\xee\x1d~\x42\xd9<<\xe7\x94" "\xf8\x15+p\x65P|\xc7\x12gh\xbc\x93\x86g\xcc\xe6Y\x0eT\x8b\x06S\xb9\x9ek\x1c\xf6\xe5\x61\xf9\x31\xc2\x90%\x62\x16\xef\xcd\xca" "<\xefO\x13\x96.@s\xa7\x32J\xc1\x86\xf3\x80i\xe6m\xdc\x83\xe6G\xdb\xd7\xf2x\xd1\xea\xd1\x35\x1d\x38Z\x1c\x64\xd3\xf4\x99\x0e\xda" "\x61\x98+\x9a\xb5\xeay\x7f}V\x8fyx\x8d\nm\x8d\x85\x11\xcb\x9c\xb3\x8c\xf0&|\xc6\xe3G\xcb\xdfh\x8a'\x45\x1c:\xe5o|" "\x61\xa5#\x0f\x63\x8a\x11;~\x9a\xc8T) \n\x42\xb6\xc0\xc7\xb9\x61\x86\xbc\x61\x96\xb8\xe1g\xbe\xc1T\x82\x10\xdf\xf2\x06~i\x42\xb3" "\xdf\x1a\xd9K\x33\xb1w\xe1\x62\x62\xf1\xcd\xde\x84\x8f\xb8&\xdc=\xb3\x37\xb0\x31\x65o\xe0\xa2%\xbc\xa8\x39\xfdZ\xfeS\xa1_\x33\x9e\xcc" "@\xd4<\x37\xacVn\xf6\xa8\xa0\xcb\x98\xca\x34\x86gU\x44\x17\x82\xe6\xbb\x38@+\xf4\xb1\xde\xc3\x34\x8d&\x65s@\xa2-\xb2Nu" "Y\xb5M\xb4\x44\xc3\xe7.k\x04\xa2\xfc\xb9\xd4L\xba\x9e\xd1\xff\xc6_\xfa\xf5\xd8\xdd)#|\x83\xd0\x1c=\x85\xb7\xb8{X\xeb\x83M" "<)\xe6\x30\x84\xb6\x80Jh\xc6\x30\xe1\x8a\xc7\x91\xa9\x94G\xef \x1a\?\x62\x19N!\xd9r\x9c\xba\xd9\xd7\xffq\x8cP\x96\xeem\xbc" "k\x44Y\\\x34\x46WQ\x99\x38\x97\x89\x36\xdf\x81_U\xd0\xbc;\xb2\xdcPY\xd8l\xc9\xdb\x44\xb5Kh\x63\xfe\xd5\xe2,\tm\xb2" "\x35\xcb\xfd]\xb3\xdc\x10\xd5\xc8\x16\xbd\x82\xfd\xdb\x61\t\x85\xe6+\x88\x44\x43\xdf\xaa\x82\x05 J\x9e\x35\xb6t\xad\xb0(p\xb3;\x65\xd9" "\xc9\x37\xd7\x1d\xee\xd4w\xc9\x36Y\x10\r\x63\xfdJ\xfc\x93u\xeeG\x45\x88\xb6>![\xfd\xfb\xbd\x8a\xc7K\xec#\rm\x33>hY" "\xf2\x11\xc4\x00\x8f{r\t\xafO\xd4\x42j\x36\x38\xd3\xa2\xc6/\"<\xb9\x16~\x15\xa0!!\xaa\xac`\xab\x41\xfe\x34\xe8\xcd\xfe\x96\xd5" "\x44\xdb\xde%\x1aJX\x15Vs\xa1\x99\xc2\x8d\xc1\xc9\x03\xa6\x93\xa1\x15\xcf\x8e\xb4\xb0t\xc5\x81\xa3j\x87\n\xa5\x1a\x8cS\x1a\x12\x10\x43" "$\xd5\xf6\xdd\xa7\x44\x9b\xd6\x9c,\x61:\xfa\xfc\xfb\xdd\xee\xd7\x05\xd7\xb0\x1f\x91k\xf1w*\xf4\x0b\xe3+s\xcb\x31\x61\xa5\x03\xd6\xa6\xfb" "\xce\x65`\xbb\x80\x8a\xd6\xfc\x08\xdaO\xe1\xf2\x06\xda\x63\xdf\x1c\xc7\xf8K[]*|.\x05\x93U\xf8\xbcp-,\xaf\xfd\x65\x92\xa3\xe6" "\xd7-\x44\xd7R\xd8p\xc6\xbb\xa7\x38\xc7\xb3`\xd8\xaa\xfa\x33\x86\xdfx\x36L\x19\x1b\xa3\xcd\xcd\x91\xe8\xaf\x1d\xa5\xef\xc1\xcc\x89\xbc\x07\x8c" "\xbd\xa2\xc1\x02T\x65\xe7\xaf\x1a\xcdV\x92\x00\xd1\xb6\x07m\x8d|\x91\\q\xe3\xd5\xa1\x8ap\xeb\x14q\xdb\xd3\xb9\x92\x19\xbe*\x9b\xa5*" "G\xb3U\xac\xec\x31\xc2\x32.\xa2\xc5\xd7\x35Jn\x62\x0f\xa6\x1a\xe7R\xfe\x92*\x1e^\x99\xa5\xa1\x1a\xa3\x81P\x1e\xdf\x0f\x1a\x9f\x18\x81" "\x10\x85\xa5/\xc9\x66\x08\xf3k\x9a.\xd6z\xea\x42\x63\xd2\xc1\xd2,\xb4\x19\xcdlu_\x96\x8e\x15.\x83\xd5\x06\xc2{\xea\x36\x85 \x44" "\xf7\xa8\xc6\x82\xa3\xa4\x45S\xfb\x11\xc7\x1a\xba;\x35\xcc\xa3g\x35\xf3\xe9\x80\xd6\xb6\x8e\x12\rm\x0eW\x80\x0b\x61\x87\xa8\xd1\xfe\xc0\x15\xe1" "\xc6\xe4\xd0M\x86=\xcd\xda\xc1TP\x63\xd1Q\xb2\xe9\xae\x61\x8bq\xe1\xf3\x19\xd8{Mv!\x11\xcd\x02 +\x8f\x06\xd8\x32V\xd8r" "\x90\\\xc3\x64\xab\x92\x37\xc3\x88V)]N\x84\xac\x83\xe6\xd3=\xa6\xb1z\xaa\x61\xb2\x31[\x0bS\x1d\xd0\xa2s\x08\x31\x08\xad\xd9Pm" "y$\x06\x85\xb3#\x8d]\x9f\x1a\x0f$\?\xaa\x85\xff*\xf2\x0fZ\x8e\xbf\xb0\x9d\x99\x8d\xd8\x99Y\x44\x8b\x35\"\xb4\x89\x1b!\x46\x87\xca" "\xe4\xae\x8dOv\x86L\\_\x42\x84\xddP\xa9/\x81\n\xaa\xe6I\x1a\xb6\xe6\xc1\xd3\x99t\xa7\xa1\xd9\xa6\xf4\xf6H\xe4\"\xaa \x91\x30" "\x65lT\xe7\x38\xe6\x05\x1a`k\xe1\xc2Z\xbfZ\x94\xfe\x8a\xe6\x1d\xb8\x11\x8aV\xfd\x39\xca\x19\xa2\x85\xb9V\xa2\xa1\xdfS\xc3\x8a=\xe1" "\xbf\x37p\x8e\xcf\x10\xadx\x1e\x46R\xb5\x18#\xc3Z|\x85\xe3p\xdeV\"}\x38\xb3P\x63\x8bZ\x63\x8f\xa2\x16\x7f\xf3|\xe6\x30!" "&#U\x44v\xa2\xe9\xbd\x06\x87\x92l\x8d\x43\x93\x1aKoMR'Z\xb6#\x8b\x98-\xda\x13\xbe#\"\x0b\x0b\x97\xab\x30\xbb\x61\xde" "\xd2H\xa2\xec\xc3\xdc\x31\x07*\xffVV\xd6\xe8\xe1!\x84\xb9\xe0\xeex{\x85\xec\xdd\xfe\xde\no\x1d\x41\x1f\x84\xb6G\x91pw\xa7N" "[\x30\x13\xd5\x83\xc6\x03\xb9\x03-\xf6\x9bp\xb3\x00-\x30\x43\xb6\x1e\xda\x9e,\x42s!\x31\xb2\x06\xa9\x87Y\xfc\x34\xcc\x35\x9c\xacJU" "\xd4\xd9\x82\xf6\?h\xe8\xf4\xd4\xd5\xfe\x91\xfe\x82\x8bs\xa2\x99\x33\xabh\x8f-\xa7\xc5\x8e\xe3\x39\x8f\xbc\x9eMu\n\?\xfb\xce`Z\x64" "\xc5Y\x97\xcb\x80\xe8\x34)\x11\x33\xc5\x44\xac\xef\x11\x11]\xa9:G\x95u\x38\xf2\x66\xb9\xf1\xa1\x10\x66\xd1:\x02\x8e\x0b\xa7\x38/\xde\xd9" "]\xee%=\xe3\xe1\t&\xe5\xb2\xf7p\x07\xca\xde\x07\x99.X\xec\xee\xcb\x8f\x88l\x95h\xb6\xbf\xa1h\x18\xb1)\xa3\x8f!Gl\xf7" "\x1a\xf7\xa0\x31\x82\x88^\xce}\xf8m\xe5\xee\x9e\x9f\xf2\x1e\x11Z\x84\xb6\xeeTi\x8ft\x1f\xe7/\x41\xe4\xd6{\xe6\xd6{\xb8x\x65\xef" "\x11\x41\x30\xfb\x80\xa8j\x42\xd4\x9e\x0f,\xb6\x0f\xf0=\x12\xda\xe2\xb9\xec\x43xS\x04G\xf8;\xdb\xad\x87\xd8\xdc\"\x95\xf6<\x0f\xac\xec" "\x1b\xf0\x95R\xb6\xd5\x8aQlP\xfbG.\x9d\x41\xad\x89\xa0o\xa2\x61\xf4\xdf\xe0\x44\x98\xf2o\x31\xe5H\xa4\x11\\\x36\x8e\x35\"{\xfd\xae}\x9d\xfdG\xe3\x1d\xd1\x06\x34h\x11T&!\x8f\x45\xf3\xa7\xff\xe4\x8bn\xc6q\x0b" "\xef\x88\x85`\x46y\x8c\xa8\xff\x9bh\xf2\x66\xae\xd9v\xe9\x46i\xd4Y\xbcT\x83+\xbc\x89\x34j\x34\xe0\"\x66L\"\x82\x8b\xd6@\xfa" "\x63\xc1\x9b\xd0\xaf<\xe0\xd9\x1f\x8c\xc9\x99m\xc0;@xZw\xfa\x87\x14\x91\x93\x1d&\xe6\x8b\xf1\xf4\xdc\xbf\xb7\x1c\xd0&\x18\x63\x15\xd5" "\xd8\xa8\x37\x38\xe5\xa7\xc4\x1a\x12\x13\xe3\xc9<\xac\x17\x92\x03Ws\xf0xV\xad\x11\x37\x91\xd2\x88\x61\xac\x1c\x83\x18\xd2\x36\xe0\x8e/\x44Q" "T\x46\xb6\xda\xde\x44ik\xe0\xac\xa4Z\xcf\x99\xac\x0f\x37MKh\xa2\xcd\x9dQu\x05\xf1\x8b)\xf0\xc5\xfb\xec\x90\x98\x32\xce\xd5\x1f\xb2" "\xcc \xc6\x8f\xf1\xa8\xc0\xb3\x9ai\xc0m_h\xce\x06\xc6\xa3\x37\x84\xb6o\x0c\x13M>:\xfa\xe2\rl\x64\xe3\xbb\x61\x65\x9b:J\xf9" "}\xe4\xa7h\x32\xd9\x9b\xd6q\\\"\x0e\x9ch\xfeW\xdb\xedT\xb8\xb1\xa7ir\xdeK\x19ooi\xe2k\x06\xd7\xef\xe4\x14\xccu\xc1" "\xfc\x33\x36T\x13\x11\x63\xf4&'\xa5\x9bX\xde'\x44\xff\xb0\x89\xfd\xe5\x84\xbdWv\x12\x9bX\x65\xa3\xec\x80\x16\xad\x41\x38\xd5\xf9\xeb\xe0" "\xe4\x1e\x1a\x9f\x18;(\x08wVR\x9a\xd8\?Y\x89g\x63\x17\xb0\x99\x84\x62\x15\x31\xdb\x04\x31\x02l\"\xea\x9b\x10\xf6\x81&\x42n\x0b" "\?-\x91\x9b\x1a\x63\x03\xad\x1f\xe3\x1f\x1b\x93\x43\xb0\x83\x37upzx<\xac\x98S\"\x1d\xa2\x41)\xc8\xbc\xd1*~\xd0\xa4\x8b\xa4o" "^,i\x08\x8a\xd6\xd2\x93\x80\x8do\x93mN\x33\x1e#\t\xe2\t\xee\x15O\xcb$\x92(\x9e\xe3\x63\xc6\?o \x1a\xc7&\x1c\xd6\x8c" "\xc9\xfa'\xd1\x90\x31\x94\xba\xfc\x01O\xda\xe2\x14m\x8b]\x1b\xa5V@\xc8\x08\x8c#n\x64\x1d\xa4\x62<\x38\x83h\xde\xf9\xca\x15\x88Z" "\xa3\x05\x97\x37!\xda\xca\x16G\x1c-V\x02-\x84\xa7\x17\xe6{XO*\x62\xb1\xe7\xfc[\x64\x93\x0b\x89\x06\xcf\x92\x16\xe2\x7f(K`" "\xf3\x12\x84yR\x19Tg\xfe\x90\xa2\xb1W\xd1\n^\xfa\xe0\xf0\x15\xc4\xdc\x41+\x98Zm\xd0\n\xcd\xcbO\x88\x19\xf0\x16\xfc\xbd\xb3-" "Z\x06[\xec\x30\xb4\x62\xe4\xcb\x16k\x13\xa5T\x63\xc1)\x9e\x94u\x8a\x32J\r\x10tZ\xb4)\xae\xb1\xaf\xef\xb4\x87_\xd1XP\xcc" "K-\x84i\xcdv\x82\xd4\x0c\xc4,k\x87\xd9\xb5\x43\xf3m\x07\x91\x81\x85U{\x8f\xae\x94\xcd\xe8|\xc0i\xfe\xee\xdf\xae\x8d\xe0\xdaY" "n\x39\x9c\xe5V\xc2\xd9n\xf4o+\xff\xc7g\xf8\x19+\xa3n\xbc\x99\x44\x0f\x17\xe1\x07\xce\xdd\x9f\xa4\x9d\xfcy\x9f\xc3\xc4>;\x15\xca" "\xa8\xf0\x1aL\xae\\\xd3\r.\x1a<\xd7\x16\xfb\x1a\xff\xd6u\x44\xc2\x32-\xba\x9e\x61\xc1\x81h\x37+\xf0\x99\xd7k\xf3\xac\xcd]\x90\xba" "\xde\xbf\xce\\\x0b\x7fS\x1c\x9e\xa8\x16\xef\n\xaco\xfa\xe1\xf5\x1c\xcc\xf4\x9cl$\xfap\xe9\x37&\x87r=\xa7\xf6z\x9f\xdf\xa0Uw" "G\xcf\x94h\xc9rZ\x39\x86\xef\xae\x84\x17w\xb6\x8f\x9d\xd2\x85(\xeb}\x8e\x8c\xfa\xd1;\x8e\xc7\xdf\xf6\x89\xfa\xfb\xc6\x36\xda\xad\xc2O" "\xcb /l\xbc_h\xfe\x7f\xc1\x12\xf9\xecK\x88q\x91\x92\xe3\x42\x15\xf9\xd8/p\xfa\x16\x9a\xabk\xd6\xc7q\xca\xe0y\n\x11V\x18" "\x65\xf0\xf8\x08q\xfe\xe6\xf4\x43\x1c\x96\xbd`\x15\x80\xb0r\x01\x62\xfeT\x99\xac\xdb\x37\r\xd1\x19!Z\xf0W\x11\x31${\x91\xef\x11\"" "[\xbe\xec\xeb\xf6\x36\x03v\xe5\x06\x34S\r\xa4\xf8`\xc1\x82\x88\x98J\x18`\xd5\x85\x34\xd6\x1c)\x0e\x38\xa8\xf2\xb9\xff\x01\xa7\x41\x07\x9c" "\xbe\x1b`\xd1[v\xf8\x1f;\xe1\x90\xe6\x8e\xe1\xdf\x62\xa6\xf1-m\xcbG\xd3\x82\xd4<\xfc\xb7J\xb4\x62\x1e\xbb\xd9$\xda\xe1o\xba\x81" "\x92\xed\x88\xe4\x1a\x96\x38\x9a\x16O\x1a\x08Y&\xda\xb2\x14\x96_\xd9\x9c\xaa\x16=.\x38)\xab\x9aT\xc7\x07\xad\x07\xc2\x16\xed}\xaa\x61" "py\x07\xa2\xe0\x0fY\x98\x86\xc1\x35\x89\x9e\xd8\x90\x99m\xa8S,\xe8\x0b\x0f\x39\xa3\xa3\x64o\xcb\xc4M)Z\x35]\x8bwO\xf4\xc5" "R\x8d\x35\xc7\x10!\x8f\x84\xa8\x31\x86\xb6\x02g\x01\xf1\x87g\xe3+\r\xe9\xc0$|\xd1\x65z\xf7|\nL\xdf\x0ci\x37\x19r\xee\x66" "H\x13\xc8\x10\xfe\xba\x42\x38\x7f\r=\x9d\xc3\xaf\x37\x44\xc8\xc8\x0e\xd9\xebPr\xbe\x61\xf8\x1f\x0b\xe0\x90\x93h\x43N\xb0\x0cu\x07\x42\xe4" "\xfe!\r\xef\x43\xda\xd5\x87\xd2\xbb\t&\xab\xb8q\x05\rV\xe6!\x42\"\x08\x1b\x43\xf9H\xf2\x39\xa0\xc1&\xf6*\x19\x8d\xcc\xf3]\x45" "\\\xe9\xe6\xd2\x18O\xbd\xf2\x8b)\xd5\x07\xb2\xe8G\x97\xc7\xe7\xac\xebN\xed-\xfd\xbbs-\xd8\xdc\xd2^L\x8do\xa3\x9aN\xa6R\x0b" "l[\x34!\xbe\xf6\xab\xdf%\xb8I\x93%\xd0\xc2\x8b\x1b\xa5\x06\xa5\x19@\x35}\x16s\xb6u\x8d\xa3\xcfW\xda\x9c\x17\xd7\xd0\xd0t\xbd" "\x62_l!\xa6\x96_\x39\x9cz\xa5\x11\xe3\x95\xb9U\xc9\xbc\xf1*\xc5X_\x1f\x93;\xafl\x83^\xa3\x97\x62\x30n\xd2\xb7\xecU\x9a" "\n=\xe7\xfe\x03\x1a\x06\x06\xaf\xd8\x1fI\x88\x19\xfa\xd7x\x62/\xf3\xc1v\xe2\x83\xf9\xf7#hh\xb0{z!\xa9\x16\x66g\x1c\x88}" "\xb0m\xfb\x08\xd6\xf6\x80\x1f\xb4\x36\x7f\x44\xcb\x97\xf8,G\xd1\xf2\x0b\xb7\x04\xcdrkN!^`\x84u\x18\xc2\xca\x0b\xf8i\x35\xdf\x08" "\x61L\x8c\x7f\xab\xfe\xdf\xaeu\xa4qxI\x8d\xbd\x16\xd5\x34\xba\xa4\x05.\x30M_\x9agr\x34>\x0e\xf3v\xd5\x89\xae\xd2I\x7f\x63" "\xbb\xbc\xec\x04!\x44l\xfb\xbc\x64\xbb=h\xbe^*\xcb\xf5|\xd9\x19k\x80\x19V\xd0\x08m\x87(\xa1\xc5\xdf\x10\xc2=p\xc6j{" "\x16tRNNl\x8b\xf8\n\xda\xf2\x10\xe5\x18\xc4g\x9f\x05\xb6,\xd7\xf8\xb7^\x43\xb4\x65\x9c\xc2\xdd\x39\x62\x89&\xdf@\x19\xdc|\xd0" "L\x61\xda\xd3Y\xdcM\xceI\xa2\x8e\x42\xbb;\x65r\xcd,$\xc6/\x62T\x99&\xc9\x95\x9c\x89\xe6w\x86X\x63\x42\xbe\x14\x1b\x8d\x19" "\x62&\tQ\x96g\xe1\xdc\xda\xfeY\x94\xf9\x06\xcb\x03\x10\r\xea\x0c\xe1\x43\xb3\x33,\xc0\x34\x46\xebW\xce\xb6\xce\x12\xa2\x65\xe3r\xb3\xec" "\x8c\xbd\x86\x19\xfb\x0b\x8c!-\x84\xfd\\\xc9\xc4\xf8\x64\x9b\xac\xe4\xd0\xc4\x44x\x7f\xd8\x62J\xa4\x96\x89\x93*\x9d\xf0T\xd3`\xb1\xfe\xb7" "G\x1e\x85\xb5R\xa9\xf1\xc3\x31u\xfb\xc9\x11\xca\xa7\x9f\xcdJU\x19_<\xc4\xbf\x1dh\xd9O\xa7\x8c\?\xe2\xcb%\x34\x98\x90\?\x99\x9e" "\x9f\xb4|\x7f\x86\xdd\x32\x88\xee\xed';&\x9f\x9c\xf6PJ\xfd\x46\x97G\xd5tT\x82J\xe7\xd3\xdf\x81\xa9\xc4]\x13\x85\xe8\xa6\xccY" "\x36\xe7\x88n/\x44'g\xce\xc6y\xce\x46|Nw\x90\xef\xc0v\x04\x13\xa2`~\xd3'\xf6\x87\xef\xf9\x83\xb8;\xd9\x1f\xb6\x0c\xde\xa8" "\xfd`u\x81p\x65\x05\xe2\x87\xde\xb2\?\xf1\xfc\x11\xc4\xd4\xa1\x92\xad\xd7\x0f\xc2\x66\x19\xf9\xb5\xb8\xeeH\x88\x62\xb6\x46\x94\x94\xec\x1a\xfbk" "\t\x31\xe4P&{\x12\x89\x86\x01\x11W'\t\xaf\xa7\x01<\xb7\xd7\xac\xb3\x95X\x12&\"\x66\?\xd6\x81\x85\xa7\x14\x62\xe8\xb1\x66\xd9Q" "\xfe\xfd\xa6\xf7\x16_\xd9\xb4\x00\x43\x05\x15\xe3\xf1\x90\xbe\x13k\xc4:\x37j\x07:\xf5\x03\r\xae\xb5J~\xcd\x35\xfbMk\xe9\x96\x81Y" "\x12M\xfe\x9a\xa6\x44\x65\x12\x8aW\xb4j\x19\x44\x9e\xe1^x\xca\x9d\x33\xfc\xfd\xa5\x9b\x87jG\x0f!Z|\xfe\r\x11-\r\xf7\xcd\x33" "\xea\xffsj|\x44~\xccu\x94\x46R\xf0\xa3\xae#\xb4\xb9kurN\x66\x83\xd6\xf4\xd2^s\xdc\xba\xa6\x8d\x64\x9dl\x1f\x9b\xe5\xb2" "\xab\xec\x1a\x61\n\x8c\x9e\x32\xec\xde(\x0f>\xca\xaa\x1d\x1c\x93U\xdb\xd7\xbf\xc3\xb1\xf5)\x36\xcc\x0c\x1b\x66i\x35\xf9'\x8b\xd3\xb3\x1b\xc9" "\xfb\x7f\xbf\x9d\xf8'\x07\r\x13\x9e\\K\x93\xdd\xc4'\xf7\xc9V\x9eY[-\x92\xad!\x1e@V\xf7\xe7\xfb\xdb\xdc\x07\x98\xdfQM\x44" "l\xd0\xeaZ\xf8}\xeb\x9a\x88Gg\x46\xe9\xfb\x10\xae&\xdb u\x0e\xc2\\\xb2\x65\xcb\xb6\x65\xcf\x42\xc9\x41\xc0\x96\xde\x95JV'\xdb" "\xd0\xe2)\x66\xb7l\xb2\xb7\xd1r\xe0\xd4^\x03\x8a\xc3\xd6/\x10[\x14x!\xe6\xf0\xb7\xac\"\xb7\xf1\xb7\xf5\xdc\xb6\xfb\xd3;\xa7\x06\x07" "\xb4\xa5\xc8\xae\x61)\xb2hj\x35\xc8\x87u\xdc\x07+\x06\x85\x1e\x8f=\xbb\xe3Mw\xec\xa0\xef\xe8\n\xb2\xb3\x95\xc0\x97\x07\xd1'\xd6L" "\xcb\x0c\x13q\xfc ]\x34\x9a^w\xc7\xe2\xa2\n.\xf9\x33\xe9\x96\xe7\xd3lSL+\xb6\xf7(T;\x1a&\xb8\xdc\x46\xb8\xbb\x88\x66" "\x96ov,\xe4\xbb\xa3\x07P\x11\x19o\xc7\xaf\xc0-\xf2\xb2\xba\xfd\\\xb2\xd3\x8fh\xf8\x36;\xba@\xef\xe8\xd7l\xd1\x94Q\xdb\xab\xc8" "\x86\x65\xc7\x92\xbe\x63\xbfl\xc7\x1e\xe8\x8e\x9fQ\xa9Y\xbe\xaa\xdf\xd3\x13\xcb\x1fI\x1b\xe0\xfe\x86\xc5S\x35\xf6\xb7v\xd8\x16\\y\x0b\xc2" "\x0f`\x17\x96\xcb\x81-\x14\x16\x11\xe3\xd3\x9d\xbf\x13\x42\x1c(\xbdV\xde\x45\xc5\x91\x8cM\xe8\xd9\xbb\x63Gu\xc7L\xaf\xdc\xff\xb6\xc3I" "#\xd8T\xfeV=\xc4\xda\xd4\xc3]\xf0y\xfegK\?]\xfc\xbf\xe7:\xba\xd5\x37\xc2\x84\xed\x0e\xfb\x04\t\xff\xdd\x85\xb9\x16}+\xb9" "\x43\xb8Q\x03\xe3\x61\x91\xc2\x8e\xdd\xfc]\x9c\xaa\x1e=\x92h\xfa\?\x0c$;\xec\x42\x92\xf5\xd5Q;]<\x86\x01\xf0N\xc6\xa4\xfa\xff" "\xd7\xb9k\xd2!\x15\xcd\x92\xffW\x37~\x41-m\x7f\x19\x9c&\xe7\x61\x92q\xc7\x02\xb0\x8bw%\xfa\x41\xed\x10 S\x88\x12\xa6\x0c\xca" "\xb5\xe0\xb6\r\x8d\xdf\x16\x11\x19\x85\xb6\xe5\x9e\xed\xbe\xe4\x0cnr\x61u\x07#\xdd\x7f\x0f\xa0\x18\xfa\xb1\xa8\x99\x45\xfd)\x07\x16)\xa7\x8c" "\x65\x11I\xd6\x34\xb4\x35\x10\xcb\x39xv\x9b\x86\xbe\xbc\x8b\xd2\x61\x46\x38\x61\x1c\x30\x37L\x13\xe5\x43\xc0\x18\xa3Z\xd6)\xbd\xdd\xf0\xb4\xec" "\x9aZ\x34n\xfd\xfe\x37\xd2\xaf\x93\x31;\xfa\x90\x39\xae\r\x31\xeeow\x08\xfc\x95;\x85\xedGh-\xa2Q'\x10Vw\x89\xb6\xbe@" "\x9f\x44\x34\xbe\x41\x90o\xfb\xc5\xd0k\xdew\x9e\xa1\x15\xf3\xc1\x64qt\xcf\xe0\xe6\x45\xfd\xfc\x8e\x0e\x34\x36p\xb9\x11\xd1\xe6L\x95\xcfQ" "\xb5\xb5\x7f\xbb\xa0\xf6\r\xfe\xf2\x07L'\xa1%'o\xbb>\x83q.w\xaa\xd1%j\xa5\xa3[\xf8&\xb8\x87\x03\xb5\xac\x13\xfb]\x41" "\x33#\x90\xd1_\x46\xe3>\x1c]\xd8\x8a\x9a\x31\xb1\xa2\x88\xd6\x99\x82\xaf\x37\xd1\xf4\rS\x8b\xa2\x8d\xbaZ\x91\xe6\x9e\x8f\xb4}}\x07m" "\xd5\x0e\xaf\xcbQ\x03o\x8b\xe6U\x98\x46*\xc0\xf6(\x34\x63\xb3\xb0\xa6Urp\xf9y\xac\x8d\x91\x31\xe5\x1a\xea\x0f\xfb\x89'\x88Z\xf8" "\x1a\x32\x0e\xd3\xe5z\x9b\xbck\x41j\x85\xa1\xb0kp\x44\x81V\xac\x05\xe3\x45\xa2\x35\x96\x92\xfa\xd0\x46\x0b\xa9s\x11\x9aW\xb4\xd5\xc8\xa9" "\xefUK\x34\xcf\x02*v\x9e\x30\x39\x0fm{\xed\x39_\x34\xcf\xd2\x10\xc3^^^W\x9b\xca\xcc\x37l\xb0\xff\xfd\xcb\xff\x38\xec\x8e\x1f" "\xa6i\xae\x1f\?\xa8\xb3\xd6\xe1v^\xf6\x30o\x64\x0cR\x32:\xfd\xa5\x36\xf9o\x9e\x8b\x9f\xdb\xe1W\x16\x0eM\xa2\x31\x0b\xc5\xd3\x61\x98" "*\x1c\x9f\xc6T\xc2\x18Y\x83\x12\x9d\x84\xeb\xe2\xdf\xef\x15\xb5\x0c\xc9);\x11\x91m\xce\\\xc7\x30Y\x39\x05-\xb2\x92\xf0\n\xe7\xc1\x33" "Th\xd5\xbdr\x1a\x9e}`\xe6N\xb4\xc2%\xb9\x02m\xb0m\x44,\x38\x13\x61\x01\x36\x31\xb6\xf5w\"\xde\xe0y\xd1\t\x15Z/\xdf" "\x18\xd4\xe7\xfe\xdc\xd0\xd0\xf3\x16\xed\xf1\x39j\x94!ZH\x34\xa1\xb5p\x42\x0b\xdf#\x9c\xf1\xad\xcc\xa9\x42\x99r\x46\x0f\x17Qo\x8b\x99" "$=p\x03.rh\x92\x44\xb4\x39\x05\x8f{$\xdc\xf1\x1a\xb6R\x37w\x86\xfd\xc9\x84\xd7\x38\x1f\x16Q\xa1\x35\x80J\xa4$:\xbc\xca" "\x11xG\xfd\x1e\xd7\x83yI\xf8\xd4$\xbf\xc1\x0f\xa4|\x38\xe1ump \xb4\xd9\x19\xe1\x8a\xc7\xd7xG\x16J\xe1$ZU\xfc\xa9" "\xfd\xcb\xe8T\x10/\x0c_\t\xe1#^ \xea \xed\xe1\x30#\xb4\xb0O\xca\x01\xb9s\x46\x35\x8e\x02\x44\xdbr\x33\x41\x17\x83|-\xca" "\xde\xc5gx\xfb\xf8\x14\xf7\x8d\xcf\x1e\xe4~\x9ev\xf1\xd9\xb3\xe4\x16\x84g\x12-\x83\xaf\x16\xdf\x97@szV\xe2\xe3\xa3\x31\x14n^" "H\xdc\x0fn\x36\xb9\xb3}\xb9\x45\xbe:\xd1\x31\x12\xb1zJ^\x80\xb7\xc8\xce\xe8\x1e\n\x1f\x9fI\xbc+\xdc\x0e\x84\x16\x14)w\xa5\x06" "\xe1\x89\xbc\xd2)\xb5||\xde\x44\xdc\x1f\xd5\x9a:\x38\xee\xfb\x99\xcd\xa8\xba:\xd2\xe2\xc9\xe3\x7f\xb4\xf9\x41[\x82\xd6_\x34\x62|\xa0\xe2" "\xbf\x30]g\xab\xc7\xcd\x93\x84\xab.\xd9sJ\x39I~\xb3\xea\xb1\x86\xa2(\xcdtp]\xf6\x03\xd1\xe7*Z\xb5\\\x63\x92^\xfd\xf1" "\xfd\x30\xfe\x14\xa6>\x31\x8b'\"J\xf8\x15z\x9c\xc2\xdc\xdd\xbe\x8c\x37\x0e\xf2w\xce`\xfc\xee\xa2$\x02\xac\x44\xa6\xf1#\xa9x\xf8\x19" "\xafT\xc0\x0bk\x90\xedR\x1d\xd1\xd9\x44\x43\x91W\xeaJ\xda\x41\x85Z\xc9)\xc3\xb2\xc8\x1c\xab\x44\x43up%\xcd\xae\xa4\x62\xfcVq" "M\x92\x1e\xb3\x91\xa6\xc9\x1f\x98\xd3\xa8\xc1\xb2\x08M>gr\xe6\xdc)\xf9\x05q\x8a\x45\x1b'\x64\xdd\xccm[\x8d\xe8\x0f\x43\xf4\r\x10" "M\x83\xcb\x07\x44w\x44\x30M\xe3\x94\x9f\x7f\x1e\xb4\xe3\xef\xa3\x07.\x8a\x98\xe9\x84v{\x1f\x16\xae\x13\xad\xb6H\xd2p\xb2\x86\xab\x83\x89" "G\x0f\x16O\xb6\x10\xcdy\x37\xa7n\xbfZ\x02\xbb\x43\xd7\xe4\x85\x13\xcd\x0c\xae\xca\x05\xb8\x45\xbe\xd6\xa5u|\xfc\xf0\x1a\x8f\x8a\xfe\xbeQ" "\x1e\x16\x06\x1b\xd3\xa4;z\xacI\x96\?h\xfb\xf6.\xd1\xcc\xbc\x62\x94K&W\xcd]\xc9\xef\xd1\xa3\xb5\xcd#\x9c\xc9\xc6l\xd0,\x10" "\x8f\x89\xec\xca\x99\xe8\x8f(\x62\xbb\x9a\x88\xa3\x97\xfd}'\xd1\xc6\x87s\xd0\xf9R\x11>\x38\x10\x0b\x03\xdd\x8e\xf3P(\xf4\x98t\x34k" "\x8b\x83\xb6\x44|R\xd7\xe0\xe4\x01\r\x9dG\x15\xff{\t\xff *\xa6\x97\xb0\x7f\x41\xcb\xf6=\x43%{\x65\x88\xc8o\xac\x81\xdc\x8b\x13" "\x8c\xa8U\x43\x31\x0e\xfd\x45K|(t\xa7\x94I\x1a\xa0\x1eS\x06W\x9b\x63\xad\xb5\xc4\x34:\x34\x8f\x1cnZ\xd8l\x61\x08&Z\x8d" "I\x7f\x97P\x1f\x64\x9brMZ\x33\x84S\x35-\x31\x35\xab\xf6\xedy\x12\x9e\x08J\xbe\xaey\"\x08\x9f\xf9\xed\xdb%\xa7\xfa\xbf\x0cn" "\\\xdb\xbf\x9d%\x9a\xad\x18\x14\x8eP\xc7i@\x92\x46\x0b\x33m\xa2\xa1\x91\xb9\x82\x01V\x89\xe3\x9e\x83\x84\xe1\xac\x05\xe7p\xd3\xe2\xddO" "\x38\xc7+IG\x8c\xfd\xd2\xab(\xf7&\xb7\x8c\xb2w\xd4P\xec\xb1\x86PX\xba\xdd\x9f<#\x8a\x94.\xa7\x1f\x92\xff\x9c\x9e\x07UL" "\xbf%\xe2\xee\x9c\xad\x8cj\x88\xa0\x64\"\xc2(\xbaxt\x0e\xdb\xb9+\x38\xdc\x08k\xc8\xc5X\xb6/|\x90\x1e\xd9\x12^\xe6\xaa!\xdb" "\x45\xcdu\xf4\x88\x84\x65K}\xa5;s\xee~\x10\x0cN\xb4\xde\xd2)-\x05\xfc\x07L\xe3\xd0\xcb\xc4\xfb\x61\"\xb2\xdd\x10\x11=V\xd7" "\xb0\xbf$\x44\xf4\x16 \x1eN\xf8xI\x44\x37\xe8\x99\xe6\xb9\x1f\x81P\x85\xafKi\xfd\xb0\xec]\xb4w^w\xb9p\x62\xfd\x87\x88+" "&\xba\xf9\xce\xe7\xae\xa4_\x00\xa6\x16\x92\x12\xf0\"t\r\xb1\xd4M\x0b\xd2\xff\xe2\xf6\xce\x35[n\x95\x9c\x19wO\xe3>\x32.\x46\xe5" "\x42\xf4\x33\xaf\xd8\xc9\xbc\x8a\xe7]\xa7\?y\xfc\xc3\x07\xf8\x99\x38%w{\x8ax\x86\xd7\x80\x93\xe8\x65]\xc1\x00(l\x9c\xea\x37\x43W" "\xf4\x8a\xdd\x89\xab}{k\x0b\x84\xe6\xc7\xda=n\x85\x00\x34\xc2\xdf\xf6Q\xa6\xdc/vr\x1dv\?L\xdb\x34\x13mi\xb9\xfe\x9a\xc3" "\xc8k\xf9g\x8c*\xdf\xba\x17\xa3\xc5\x00\x32-\x98\x16\xc3{Kt\r\x61\xa0\xa6\xb6\xc1\x05k\x1f\xc6\x32\x30\xc6\xa5\xf7\x38\xf3\x12~\x8d" "\xa5\x63\x15\xd9\x32\r=\xdc\xc3\n\xea\x1c#\x17\xe4|$\xa9\x0c\x1e%\x11}@\x95\xc6\x96\xdd\xca\x1f\x10\x63\x86\x34;\x15\xe9\xbf-n" "\x05\x37,!\x86\xe5J\x8bo\xb6=\xd2``S\r\xd7\x84}+\x97N\x8eg>\xffVu\x44\x89\x35-\xb8\xbe\xdc[\\=h\xc5" "Z\xf2\xb7\x02\xefZh!\x64\x92\x89\x87\xc6\x36m\x81\x9e\xbb\x88\x41\xab\x1aoP\x93\xfe\xc8\x08\xa2\xad\xd5\xd4\x81\xb3\xf4\x86\x0e)\xa7\x86" "\xf0yg\xffV\xfc\x8f\xd6\x87\xd6\xe4UP\x32\xd3\xc1\xf3W\xf0r\xc6\x0e\\\x9a\xd6\x81t\x80\xca-\x1dLZNO+\x38\x84\t\x97" "\xb8|x>\xf1\xe4\x0b\xaf\xf1\x16l\x8a\x95p\\V\xb1\x42\xe2\xc2lm\xd3\x61~\xe9<\x8c\xed\xd2!\xdf\x0f\x1b\x85\x18\x31\xdb\x63\"" "\xdb\xb4\x34\x9b\x02\xe1\x07\xf9\xed\x0c\xc6\x39\x8en\xd2\x18\xd0\x06\xa9k,^\xc8\xd1\xce\xa9l\x39\x83M\x19\xcb\x44\x44\x63\x9e\nG=\xb2" "\x1fLg\x91\?\xd0\xa4\xea/\x8b\x05\x8e\x46\xa9\xa0\xd8\x1dWM\x17\x8d\x1f\xce\x39\xfa\x9c\x88\x88m\x44\x30\x61\x11\xab\xff\xfe\xd6%\xcfn" "ZGO\x1e\x13\x8d_(z>\x05\xdf\xb3\xce`\xfc\x16\xfe[!\xbc\xb4\x1c\xb0\xb5\x32\xc2%\x9fh\x89\xe3\xd8M\\\xf8\x90\x01\x0f\x39" "\x04\x61\x04\x85\x87\xa7\x8b'K\xeb\x0c^m\x0c-\xfb\xe2\x44|" "\t\x11\xdbx\x0eO\x45\xcc\x88\xe4jpq\x11Z\xdcT\x15\x1f\x82\xeb+\xd0\xfc\x96\x8cqz\x12\x36\xa1!\xd4\x92\xf0\xd6\xda\x33n\x80" "\x95{\xc0\xd6\xbf\xb9\x06\xc2\x03\xe6\x9e\xfe\xd6v\xb5\x96\xfa_\xb5s\xb4\xb1\x98\xe7p>\x1dL\xad\xa6i\x05\x97\xd3pv\x16\xfe\xbe\x42" "\x33\x7f`\x61\x66\xa7\x13\n\x18R\xb5\x98\xa1Z\xea!=\xbaQ\xa7\x9eU\xcf\xec\x14\xd9\xffu\x38\x9e\xfc\xfem'\x38\xfc\x9e\x03\x8f\x16" "\xd3\xe6Z\xec\xe9\xb5\xb0\x42\x44xJZ\x90g\xe3\xbeq%O\x0c\xad\x99\xd5\x35\xb3\xa9\x07h\x8f\xe7\xba\x32\xd8\xe6\xabl\x8e\x0b\xf3]" "\xa6\xc5\xf3\xaf\xa3\xbf\x89\xa6\x9b|\xc1\x44\xfc\xccJ\xf2\x99&\xe4g\x38s\xe4\x9e\xb1\x33\x9e\xf0\xae\x0c\x36\xe6\xd2SM\xfejk\x61s" "\xcf\x08\x13\"\xc4\xe8\xeb\x99\xb6\xb8\x36M\xf9m\xf6\x45\xda\xec\x30\xb5\x11LN\x88o\xd9\xc6&\x37\x42\x94\x90v\x98\xbd\x04\x91o\xda\xac" "\xfb\xdb\x1aH\x61Y\x81\x38|\x63\xcd\xd6\x66u\xd6\x66&V\xfa\x0fX\xd1H\xe7u\xc4QM\x9b\x9d\xfc\x36MUm\x96\xec\x36\x66\xd8" "\x84\r<#\x16\x31\x18\xfdqu\xcd\x02/\xac\xdbY\x16VQ\xf9\x1c\x9am\xb6\x92\xeb\xfe\xfdZ\x35\xd3\xa5\xf5\xac\x0b\xe7\x8b\x1c\x03\xbb" "\tm\x8e\x35\xd7\r\xd3\x05\xd0\xd6\xf4\t\x61\x15\xee\x62n\x34\xd7\xe5\x08\xb7\xcb\xea\xb5\x1b_\xcc@\xe4\x90.\x9f\xb5\x8b \x1e\xea\x33\x9c" "q\xb2\x86\xeb\x61\xfb#!\n{\x8f\x36\xa9\x1e\"\xf3)\xfb j\xc8\x1e\x1f\xb9\x87-\xaf\x84\xe8P+\x93SxiZ\xe7z\x41\xf9" "\x16\xc4W\xed\x61=\xad\xb0\xff\xed\xf4\xbb\x8bH\xe3\x85\x8a\xacuz\xc1\x64\x01\x9a{\xae\x10\xc9\xd3\x63\x05\xd9\x83W\xb4\x31,\x96\x11h" "U\x44T\x97=\x04`\x15Z,i\x61\x32\xdb\xd2\x63:*\x8f\x9e;|\xc1s\xd2\x66\xde\x93&\r{\xfc\xa8\xd8\xf0\xa7\x8et\xea\xec" "\x82\x19G\xb5p\xd9\t" "K\xff\x92\x9fH\x7f\x19\xf5\xb3\x0cVx\x16\xac\xaaJ\xf9\x9f\x43\xd4\xa1\xf6\x9b\xdbOl\xbd\x86X\x06/\x44\x61N\xce\xd2\x1d\x80`\xb3" "\xa2\xcb\xb6Q\xe3\xa7\x62*\x8b\xda\xfe\xed\x8c\xda\x02\x44\x1d\x30\x0cm\xdf\x05\xa1\xb9\xd2\no\xe7`\x8d\xb7IJ\xffP\x43\xf2\xf0\xc1\x39" "\x02\x1d\xb2\xc0\x0e\xe1\xa3i\xf4\xd7\x14\x31\xbc\x19\xc1M\x13Z\xe5\xe5\x7fh\x16-*\xd1.\x93K\xc5\xbb\xc3\xef\x30:\x92\x81\xdc\x08\xfc" "\xc5\xabr\x9aR\x99\xdc\x10%~\x88XW\xb9!<@\x8d\xfb\x93\x1bO.\x1a\x93\x86\xda\xd0\xac\xd3\x34\x91\r\xf7\xfd\xbe\x06\x92\xc7\\" "\xd2\x30!\xd3\x0c\xa1\xcfso\x88\xf4%\xdc\x34\xffV\x35\xda\x34\xdf\x10\x9bU\x88*\xe1\x8d\x85\xfc\x8d\x35\xfe[\x30\x82uW\x34\xcb\xdc\x0b\xf6\xb4\x17\xc1\x46\xc3\xe7\x07\xa9\xc5\x91\x46\x43\xd3\",|\x80" "\x16_\?\xf7\x9f\x9d\rr\x8b}\xcar\xd6\x92\xb6\xc8%\x82\xaa\n\xd1K]\x06W\xdf\xe4\x12\x44\x1d\xb9\x0c\x1e\x1f@\xf8\x17,\xf9\xc1" "\x84\x1f >\xe8\x92\r\xd1\x92\xb6\xb5%\xc7\x1eK\xac\xe6\x17\xa2\x32Z\x46m\xfc.\x1aP\x87Qji\x01{\xa6\x08\xc6,\xda\xf9\xaf" "\x33\xb8\xfa\xe5<\xa5jZ\xfb\xb8\x86\xfe\xe1\x92\xb5\xd0\x92)\xb8\xa4#\x88R'q\xf8>\xac\x80\x96\xecr,\xb1,/GO\xd4\xdc" "\x06\x0e\xb7\x39\xeex/\xac\xce@\xf3/\x34\x46\xab\xa2.L\xca\xb7\xe8s\xb1\t\x16\x85~\xb0\xb0\xb6\xe1\x0fR\xc1\xf0\xc2\xc5\xb0\xbfv\x11\xdb\xde\nm\x35u>\xa5\xb1\xd6\x9ag\xa8" "&\xf3\x97h\xbd\x85x\xc0K\x18\xe0\x8cpg\x17\xd1z\xda\x42\xcb\x81\x42\xeb\x38\xe7\x19\x03[h\xe3\x8a\xfc\x65\x34\\\x61\xd5\xb5\x88\xd6" "\x45\x15Z\xdb \x34_\x17#&*\xf3\x8cO-\xb4\x94\xcb\xd3\xa2/\xe3_\xeb#\xe4\x19\xfbWh%Oh\xeb\xe9\x8dv\x34\xe7Z" "<\x38\x45xW\x1b;\x07\xe3\xfa\xfe\x8a\xe1\xdc\xed\x00\x06\xd6\xd0\xcc\x92&\xb4\xb0u\xc6\x30\x7f\x8b^\x94i\xf1n\xe3\x1a\xc2\x8b\x18\x83" "M\x19\x31\xf5\x44\xcb\xdf\xa2\x9e\x11\xb1\xf4\xebL\\\xcc\xf2\xe9\xa8\x38\nN\x39\xda\xcd[\x30\xd0\xc6\x0e\xfe\xe2\xa2Y\x65\x98O\xc3\x83S" "x_\x08+\xe5\xb8\xd1\x82\xd6\x36\xb7H\x8b<'Z\xbf%\"\x1c'\xa1\x1d\xfd\xcd\xdd\x37\x0f\xef\xcf\xd4\x88w\?\xf1\x1d\x92\xf1x\xaa" "G\xb4\xf5\xb3\x0e\xc9m\xe9~>\x1b\x9f\x7f\xc6\x97\x19\x88Wg\x61\xb1\x80^\xafh\xf7\x85}{\x05\xd1\x32\xba\x91\x19I\xc5\xc3\xb9y" "\xac\xce\x31\xa2\xfc\xe4\x0b\xf0\xb3\xca\x17\x82\x94-\xe1\x30\xe7\x0e\xd1\xcc\xb0`\x8c/\x1e\xd0&\xe7\x0b\x18,\xe5\x0b\x30\x62\t\xd3\x96\xa9\n" "\x1a\x14\x10\xf7+\xaa\x03Y&\x83.\xb4h\xeb)\x88|R\x84\x45\x44hK\x0e\x84\xb6\x91\xa3\x10\xe5\xa2\xc8\x8f]\x64.-\xeaR\x9d" "|\x91\xb7+\x86\xe6\xfd-\xcc\x17\x9d\x61z$\xffL\x63\xc9+\x46\x9d\x02\x38\x98\x90x\x86\xf8\"\x13\xfe[\x45\xb5;\xd7\x12\xe7$\xbb" "\x03\xee\x06\xed\xc8wW\xb4\x12\x7f\x61\xb5G\xbe\xb8\?yv\x32\roP]\n-\x8c\x9b\x91\xd9\xf7\x06\xf1H\x84\x92\x96\x99\x36&\x95" "\x44\xb3\xd1\xbe\xd0\xa2\xa9\x18\x83t\x1e\x36\x1e\xd1v;\xdd\x8a\xbc\x64\xcfv\x83\xbe\x93\xd1/*\"\xeb(\x15\xfd)t\xc7\xad\xc2\n\xeb" "$\xf2\x37\x18P\ts\x63\xa7\x9f\x88\x19\x02\x61\xb5\xe5\x0c\xc7i\xcck\x88\xd6\xc8\xc0\xfbG\x44\xdb\x88\x43h\xd3\xaf\xf9\x1bt\x61\x85\xed" "\x13\xa7_\x33\xfe\xe2!\x8b\x9e\xa2|v\xaa\x07\xe7\xe6\xde\xb5\xe4\x07\xcb\x89\x33\xf4\xadM\xa1\x8d\xcb\xfb\x97Z\xa2}\x15\xf6\x0f[\xd7\xe2" "\xafy\xa2m+\x46X}\x85W%\xdd\xb8\xc9V\\\x89\x66\x66\x8f\xfc\xed\x9f\xcd/I\x05`+\x03\x95s\xd0\xb6}\x11Jm\x92\xdd" "\xb1\xfeP-\xfa\\%\x9a\r\xaa\xf3\xb7\xe1\xf5\x0e\x44\xf6\xb8\x65-s\x1b\xa2\xde\xbc\x45\xcc,\xa1\x45P\x11\xe2\x0b\xdc\x46\x39\\'z" "\xd9\xf0\xc3\xdd\xb2\x16Q\x62Z\x46\xc4\xfb\x62\xf0\xef\x95\xe2;\x62\xe5\xab\xb8\x05\x1f\xafXw\xa9\x88\xb8&\"Z\x90\x14\xab\x05\x93H\xfc" "\xa6\x1d\xeaI\xd5\xe4]\x0eZ\xcb\x89\x31\xb9\x88\xb3\xb5\xd3\x1fO\x44\xf4\xcc\x45\xfc\xf7\xeb\x84\x99W\xc4\xdf\x96\x33\xb6\xf9\x1a\x11-P\x94" "\xd1\x1fSk-\x33\xda\xe4\x9fP\x17@\\\x9d\xb0\x86x\x62\x61y\x62\x9d\xf0\xc4\x36\xe3\x89m\xc6\x13\x16\x06\x08QW\?\xf1\xf5\x9e\x10" "\xdf\x31\xff\xc4r\xfeth\xb9\x9e\xb0&<\xff\xc4\xa2\xfa\xc4\xe6\xe9\x89\xb9@\x83@H\xae\x86\x85\x35\xef-K\xcb\x62\x84\xe4\x83\xeb\xd7" "\xe0g\xe6\x07\xfe\x87&\xa5\xe2X\xfb<\xd2\xe4\x82G\x9a\xcej\xb8\x66\x03\x15\xe9\xef\xa4>\xe4h\x84\xd6@\xb4/\x19\xb1\xc0N,\xda" "\x65\xe3X+\xe2\xc1\x10m\xde{J\xc2\xf1'\xf8\x33\x93\xe7\x62\x81nI:\xe8\xe0\xaf\xf9\x0em\x82\xeb\xcb\xe3\x38Yz[,\xbd\xad" "\xd8\xe6\x43\x8cXu\x63\"\xf3_\x8b\x05\xb5\x45\xbd\xcd\xaeJ\x9b\x9f\x85\x86\xd6|;\xb4\x00\xfd\x42\xb4\x01m\xb8\x91\x1a\xd9<\xb4\xe1\x89" "\"\xc4\x17jK'&:\?;\x12\xfd\x44~\x9f\x0e\xfb\x31\x1dX!\x8c<\xa5\xf3\xb7\xa8\x83x\x9c\x0e<\x37\x94K\xd0|\x1d\x8d\xc9" "\xe2\x44\xd1\xcc\x8a\x9c\xef\xc0\x64)\x44^\xeb\xc0\xfbX\x88<&\xd4}l\x31\xd7*\x9aY)\x85\xd6k\x15\xf6\xa9[px\xe1\x08\xf7" "\n\x66x\\\xac\xa0\x16\xfe\xf0.\xbf\xbc\xea\x82w\x41\x92u\xe0\x03\x92\xef\xa8/\x1fj\xbd\x0e\x1b\xb6\x0e\xeb\x14\xa5\x0c\xd4\x42\x8b\xb0&" "\x9a\x19\xb1\x8d\x18\x19\x88h{I\t\xcd\x94)\xb4\x30\x1e\xca)x\xd7\x0fN\x7f\xe0@ \xda\x63\?\xf9\xc1\x33\xd2\x18\x91\x81\x8d\xc9\x35" "-\x08\xa6\xd0\xcc)J\xa4\x03\xb6\x1dS\xf6\x9c\xea\x08\x9f\xef\xc4\xf9\t\x0e\xcc\xf1\xe2\xd1\xf9\x88\xc5\xbd\x83I\x62\x65\x8e\xbc\x07\xd1\xc6t" "X\x9ft\x10\x42M\x88\xd6\xb8\xc3~U\x07\xbe\"\xc2%\x12\x04\x1e\x9c\xc2\xadU\xd0\x9d\xf8|\xe3\xb7\x62=\xd4\x89s\x1f \x9f\n\x8b" "\xc9\x8d\xf0<\x12\x11\xfd\xd4N<<\x81)T\x44\x14\x94\x0e\xe2\x92\x0b\x37\x86\xa3\xfe\xd1\xb3\x05" "\xbdZT\xfdJ\x36\xd1\x96\x03\xb6\xc8\xc8(\xdf\x0e\xd6\x01\xd5\x9e\xc8.\x96\x37\xe4\xc7\xe1\x19\xde#\x80\xcf\x88\x1c\x03\x97Xz\x90_\x61\x32\xcc(\x95\x04\x1c\xee\xf3t$\x10\xda\x8cK~%\xff\x9c\xba\xf9(" "j\x99UxS\x61\xcfw\xa5\x0bP\xd7\xc9\xcf\xa2\xbetjW\xac\x7fW\x36\xd6\x64 \x06\xd1\xac\xb6*\x9c\xa0\xbbU\x38\x81\x81Y\xd8" "{\r\x8b#x\x98@\xab\xb5\x13\xcd\xfa\x17\x85\x13\xf4\t\x84\xdf\x39\xa3\xe4\x19t\x39\x44\xb4V\x42h\x35]\xe1\x64\xdf\xf8\t.\?\x11" "\xa4\x46\xb4n\x41\xaa\xfe\xf0K\xeb\xbb\xc2\x19\xe6V\x0bR\x1b\x9f\x91W`\xad'\x35\x12v\x01\x33\xcdv\x9a=h\xbe\x43X\xe1\x0c}" "\xc7\xc2\xd5\xdf\xa2&\x8d\xd9\xdf\x0e\x1a\x8c\x42\x46\x18\xb0\x45\xb4\xa6\xaep\x85\xce\x64\xe1*\xbe:\xd1v\xc3\x36\x14(\\\xe9\xde\x1a\xd9-" "\xc2\xdd\x16\xae\xff~\x0bNl\xf0\xa6\xe2\x83Sj\xda\xf0\xbc\x04\xcd\x8a\x95\x11\xce\x85\"\xda\x8c\x97\x11\x39G\x45^\xceJ\x83Q\x97\x91" "\xb6.\x8e\x34\x1d\nI\xe5\xffrv\xf8\xfbo\xd5\xff\x1e\x14\xd9\x62\x8b\x66u\xb9r\x05Zm]\xb8\x0e.\x9f\xfdv\xfc\x8e\xd7\x41\x36" "\x0b\xda\xac\x99Q\xa7\xdf\xac\x37+\x9a\xd9\x01\x84\xb6;\xa9\xf2\xdb\x88%\xe3\xc2t\x36,\xce\x43>\x32\xa6/\x95<\xcb\x97\xac\x86\xb0\xb9\x05:" "\xdf\nm\xf0o\x0c\xa6\x33t\x06LK\xfa\x30\x85\x34\xba\xcf\x05\xba\xa9\n\x9f\xde\xd0\xc1\x10\xd1\xe6|\x0bii\x7f\xfcy\xb0\x90U\x38" "\xe8\x81K\x1c\x8f/\xeb\xa0N\x83\xe4\xf7\xed-\x34>\x8fP\x8a\x1f\x1c\xe4\x44\x33#\x9a\xd0\xdc\x00\x84\x16-\xac\xc0\x8dn\x8c~;\xf4" "U\x0b\xdcV\xaa\x90\x41\x03S`\x98\x04\x63`\x41\xa2MT\xc7\xf4\xe2\xb3kR\xf6\xe3\x8b\x92k\xf1\xe0\x0cn\xf6\xaa\x8d\x9cX\xae_" "\xc8\xf9u\x61\xd6/p_\x19#\x1f%\x87\nSX\x18\x82\xe6U)\xecN\x9dZ\xe7\x64\xf8W\xab\t\x8d\xe8W\x8b\x88\xaf\x9c\xc3\x1e" "\x98\x42[\xd4\xa2\x9c\xfb\x35\xc2\x62\xdb)\xfd\x9f`\xf2\xeb\xda\xd1\xbb\xc0\x85Z\xf8\xc8\xcbY|\x39#\x86\xa3\"\xb6\xafu*\x81\x1a<" "\x18\x95\xdf`\x61)\x1d\xcd\xf8\xaa\x9bh\xb6\x34H\xc4\"\xd2%j\xe0\xbe\x08\xfa\\\xc8\xc5\xd7_N\xd6%\x39\x44Z-\xe4\xf6\x15\xe8" "\x98x\x17\x9a\x0b\x7f\xa1\x10w\?\x35\xf4~\xc7\xea\xd7\"\x33o\x91\x99\xb7\xc8\xcc[\xc4\xe0Th\xb6)\xe1\xee\\\xfe\x8f\xcfp\x36\xe6" "\xfe\x85o\xad\xe8m\x07\xd1\"\x97\x0bQ\x34\x8bqj\xea\xd7\xc2h\xa6p\x83n|\xe1\x46\xb3|\x61\x85\xdd\xa9\x0b\xdco@\x38\xadI" "\xae\xdb\x9bW\x8ch\x16\xfc\xa0p\x03'q!\x9a\x97\x1b\xb8\x1c\t\xcd$^\xb8\x89N\xa1\x63\xe8&\xb4\x11U\xe1&\x9eX}_\x66" "n,\xebL\xaay\x64\x17\xcaL\xa8\xf2\xdf\xaa\xe6\x84\x19J\x44\xdbO\xafP\x46\x90\x31!\x8a\xb8\xf0K\xba\xa9\xd8\x93Z\x34\xa4Y\x99" "\x39\xb3\x1c\\\xdf\x39\x83\x9b<\xe6\xeeM\x13\x11.\xf2\xaaM\x41\x9b\xce\x35\xeav\x62\x36+\xa0\x9a\xff\xf5\xcb\xc9\x32_\xc6\x44\x84\x10\xb5" "\x62\x19+\x0f\x8d\xe1K\xd3\x45\x98Y\x44l:\xf9\x88\xb6\x08G\xd8\xab\x91s'\\n\x44\xb4I\x19\xe1\xe8\x06\xc3P\x15\xf9\x42\xe3s" "O\x19\xf4w\x95\x1d\xd0\xa6\xca\x94[\x92)\x37\xcb\x92\x33\x19!\x05\x9f\xed#\r\xae\x16\xd0\n\xd9\xe4]m\x32H\xe8)\xb5,\xca\xc7" "\x64\xd3\xa0\xda\xfeNz\xbeuh\xe8l\x94\xfdS\x06;\x19Yu\x61\x85-\x94\xc3\xb3\xaeh\xd1\x12w\t/N\xa3\xe7\x39\x82\xc6\x88" "\x86\xda\xa4\x0c\x9b\x87\x30\xd7v\xeeOZp\x17T\xad\xe7\x64\x86+\x87\x45|\xb0\xb0\x84O\x85\x1d\x08\x8c\xb0\x05\x88x;\xdfox\xd9" "Z\xdf\x19\xac\xcf`\x85\x13\r\xed]\x19\x8b\x98\x85\xad\xbeS\xaa\x8c\xfd\x03>#\x8c#\xc6\xe3G\xea\xe2\x95\x11\xc6MY\x05\xa7\t\x11" "\x62\x1f\xe2(\x39\xca*\xa2\x0c\x83\x8a\xf1p\xe2\x1c~\xb6\x10\xff\xb5\x12\xd1\x86\xb1&\x1e\xfdg\xc2~\?\x82\x8bmx\xc7\xc7[\xe3\x42\x11\xba\x08\xe5\xe8l\x0c\xa6\xf1\x1d#\x8bqgL\xe2\xf6\x8a\x86z\xb6\xcc\xb6\xb4\xcc\x8a" "\xae\x0c\x0b\x91\xf2\x1e\x1c\xe1.\x91\xad(\x16\xa2\xf6+\x63\x07<\xa1\x39(\x14\xca\xf1\x45\x05\x34\xc7*\xe1\r\x8a\x13\xcc\x44\x46/\xc5\x18" "\xae\x0b\xd1\x45)\x63\xcaG\xf8\xf5\xb3\xbf\xdd\xb1\x95-\xefOq\x96\x7f\x05,\xa4\x10V\xf1`\x88\xd0`L~\x92\x10\x05\x0eN\xc9\xc6" "\xbf\xdf+/<\xa2\x1d\xe5X\xcf\x93\xc9_\x1f\xb6G\x45K\x1aS\xb0[p\xfa\xc7\x61+S\x66\x81\xa8\x61\x32Mh[\xb3\x08-h" "u\xa1&\xff\x92\x39\xeb\x42\r\xbe\x44\x05\xee\xf9\xa0\xbc\x05\xd1\xb7\xad\xb3\xc6\x15\xeeX\xe8\xea\xacP\xebl\xa8\xeapR\x33\x62\xe0\xa3\"" "Oy,\x81\xe6\x04o\x64\x1b\xa0\xa2.|>h\xd2Z\x06\xd3_h]<\x04\xab<\x61/\x9c\x9d\x61\x96\xa1Pg\xa9\xa9\xc3\xdf\xdc" "\x08\x97\xf2\x42\x1d\x91\xf5\nu\x8ew\xea\xec))Y\xaa\xeb\x08\xb4Yx\xd6\x8e\xfd\"\x8b\xfd\x11\x0b\xcf\x30\xca\x19u\x8a\xce,\xba\xa2" "\x15\xff" "\?\xba\xdel+\x95\xa0\xd9\xfe\x1d\xfbM\xf6\xdb\x9d\xcb\xff\xc5\x19\xe7\xde\x66!\x08J'\x82\x08\x36(*\xb8\xa4QQ\xe9y\x98m\x35" "\xbc\xc5\x89\x88\x39#\x61}\xfb\x9c\x31\xd6X\xbf\x98%PUYY\xd9\x46\x46\xd6\x9d\xcc\xf7\xf7\xbc\x33\x65\\[ \xe0\xb7([Si" "\x64\xe1n\xa6\rG\x9b\xc9\xc2\\M\x36\x90\xef\x31'S\xbc\xd7\x98\xfa\xe5\x37\xac\xe7\x10\x65\x03`\xc5{\xbf\xb0\xf4\x8ft\xb2:\x08\x8f" " \n\xdd\xc4{\x36Z\xef\xd9\x38\xbc\xc7\xbc\x8e\xd1\xcf$&\xcf\xf4\xc0g\xca\xc1s\x63t\x98u\x33\x1dn\x30\xf3 \xca\xe6,\x8c|" "\xd8\x0f\xec\xd3p\x08]X\xb8r\xc2\?\xd7L\?\x93\xff\x10\x13\xee\x41W\xe1\xa0\xb4T\x93\x99\xf6!*\xbf\x39\xc3\x17\xc5l^\xb3\x63" "%j\x04\xfa\x19Z\xf9\xdd#x`M\xaa\x94\xff\xd9\x02\xdc)\x36M\x1f\xb0\x43\x9e\x31\xe9\xff`G)Sr\xc3\xe9q\x9b\xeaIW" "\xe7]\x97\xa1\x06\xa4\x39-\nm\xfd\x9dr\xe1\x0c\xd7;\x66r\xccV\x1a\xdf|=t%\xa7J\xbf\xda\x41\xed\xfd\xf8\xf2H\x43\xd3\xf1" "\xa2\xb0\x17\xb9\x10\x0f\xf6\x01~\xae\x46\x16X\x0fX\xdc!\xb4\t\x30\xe1U\x91|\x02\xdb\xfc\x8a-\xa3V\xbe\xc5\xf3\x11\xf6\xca\x32\xa5\xee" "\\\xae\xee\xf8\x9d\x0e\xbf\xf3~\xe4\xf4;\xc2\xf8\x96\x11\xeb\xe9\xcd\xf4l\xa0&\x9a&\x0f\xb1t\"&\x0f\xecR<\x84\x33\xccq\x43I" "\xe6\x85M\xeb\x87$\x8f\xc7,\xb7\r\x36p\xa6\xa4\x85'\x86q\x44!/.\xb9\xdb\x38\xfd\xa2\x92\x17\xa4\x41\xd2\xffvj\x9c%\xb4\x80" "L\x61\xa0\x43M\x66\xfc\x07V\x1cJ\xbf\x91\x04\rs\x65\xf8\xd4\xe4\xc1O\x82\t\x05!:x\x0f\xe9\xcb\x89\x93\xdd\x89\x87t\xd8s\xee" "\xda\x44\x0f\x08\\/\x1c\xe1\xe7\xd3q\xd1\xd3\x0b{\x80\t\xbf\xda{y\x00+\t\x8c\xe1\xe4\xe6p\x65\xf4\xec\xc7\x97\xfa\x01K\x94\x94\x9f" " *\x98\x07\xc4\x8b\x34\xfa\xaf`\x9c\xd2\xe8\x99W\xcc\xf0WT\x1aJ\x1d\xc0\xe0K\xa5\xfd\x32^\xad\xbf\x98X\x41,|\xcdG\xeb\x06" "\x1f\xf1#\x87\x8b\x1e\xe1\xc3\"\xdc\xf3o\x31\xb5m\x7f\xf0oO\xba\xc6Og\xedn\xa8\xf2\x64\xc1\x89y\x43\x35\xcf\xc1\x39\xff\x34\?\x93" "\xbe\x91|\x9d\xaaK\xce\x41\x8c\xb0(ySO\xec\xd2<\xb1\x36z\x62'U\t\x37:\x33\x11\x16\xd4\xcd\xf4\xa7\x42u\x0b\xda|\xa0\xef" "\xddh\x44 ~\x33\xa3\x61\x87I\xad\xca\xcf\xcb\xeaV\x19\xf7:\xd8\x34^\x94y\xb2\x18\xc3/\x94sp\x37\x30\x13\xa3\xd5\x30Q\x8e\x99" "\x89\x81\x02\x35\xd3\xd2\x19\x1c\x17M\x61-\xa7\x9ao$\x12\x00[\xb9\n\xdb\xfc{\x9bw\xffpL\xf2\xd6\x1f\x91\x80,+\x9f\xc2R\x46" "\x33\xe1\xe9&&\xea\xd7\xa7\xc8\x46\xb3\x8d:\xd3w\x9d\x85Zg\x9c\xcc\x33\x66\x0e\xbbn\xc2q\x04\xa6m\xae\x63\xa6'\x14\xdb\xfd\xf4\xc5" "\x17\x16\xab$r@\\\xc2\xa5\xc1_\xc2\xc8\xfcH\x33\x39\xfc\x8a/K\x18l\xc5\xb1n\xdf\x13L\x14\xdb\x1aj\xfa\xd9\xc5\x0cgom" "\x9c\xe1\x10\xd3,|\x91YQ\xb8=\x38\xc4\xb6\x82\xa2n\x91w=\x13\xb1\xfez\x62\x63\xfe)\xfe\xe4\x66q\x62N\x16\xe4\n\xb4\r\x1b" "\x8bOX\x01)\xe4\x33G\xccY\x65\xdf\xb9\xbdl\xc3\xb4\xa0\x12\x42\xb4~\x95\x9e\xe7\xd9\x10~\xf2T\xd6-k\xfa'\x34\xbf<\xa9\x92" "\xd6U\xf8\x42k\x18~\xd6\x96\x9d\x14\x19\xca_\xf8\x80\x8b\xc7\x1e\xbf\xc2>\xb2\xad'\x1c\xfb\tO\xd8\x64\\\xb9q\xfa\xa3\x17\x13q\x8e" "\xcd\x0c\x17%\x66\x0b\t\x95,\xce\xb7\xcf\xcd\xe4\x98\x7fX\x0c\x9c\xe9\xc1\x99'\xb5\xa8\xfd\xcf,\x91\xd4\xc9\x1aI\x0c_\x62\xa3\xc6\xf9\x65" "\xd6\xc5<\xaf\xd1\xb3\x30\xfcg\x84\x95\x86\xd3\xcf\x90v\x90\xf6\xe9\x83\x46\xd8\x8a\xa6\xfc \n\xab'\xac\xbc\x36jp\xa6\xd3\x91+ON" "\x31\xa5\x86H\xae\x87\xc9Q\xd1\x0f$\x7f\xf2\xc1l/=\x89\xe1\x07&\x1c\xe3\xcd\xc7\x84\xb2\xf2+\xae\x1d p\xbb(\x34\xd4\x9e\xd2\xe9" "\x97S\x03.\x1f\xf5]\xed%\x0e\x14\xf6\x97\x13\xb5\xe2\x15\xf1]\x65\xad\xf0\x04\xefT\x65\x8b\xf4\xbf\xdf\x86pu\x45\xcd\xd0\xe4\xb5\x13+" "\x43\xc4\x44\x35\xf2\x84\x19n!\n\xff'\xec'g\xf4\x0c\x8eUj\x42t-\x94X\x98\x63\xa6\xbfO\xdb\xb5\x65\xa2\x17\xc4y\x10\x9a\xa7" "\xbd\x05\xceq\xb2\x02\x30\xd3\x86\xd0]q\x46\xc0L\x8b}\x0c\x13O\xc3L\x14\x37jj\x80\x1a\xb4\x41L\xa1j\x86y\x12L\xbc\xb5\xff" "\x04\xed\x31\xc5\x42\xc0\xcc\x61\x38\xe7\xf6\xe6\x01\xeb\xf3\xa0:\x33\x98\xa8\x1e^\xf6#@\x88\x32'\x45\xa3\xff\x18V\x1d\n\xeb\xf8\x62r\xb7" "\x02\xf1:\xbd$+k\x7f\xbc X\x9f\x31\x04\xeb+j\xb4\rpt\xea\xe4\xab\xac&\xa6\"\xd5<\x07'\x03p\xddw\xcaK\x12_" "]\xb8\xd2\r\xa7,|\x63\xf1\x65\xdb\xb7\xcf\xf6\xa4:\x8d\x86\x97\x98\x9d\x34\xa5\xablvj{\xb5\xd8\xa9<\xd9\xd6\x85\xad\xb6L\x44\xd5" "\x9c\\\x83\x18\xa0\xef\xb1\xd2V\"H\xbf\x9a\x1d\x8d\xa8\x38\xb8\x82Z\x14\x9c\x08\x95'\xa6\xcdn\x17{\x98\xbd\x37\xearl\xe4\xfd\x1e\x87" "\xfb\xb8\xa3\x84\x30\xd7#\xf9-\xd4\xee\xdcY\xc2\xb8w\x88\xf9\xa5\x17V[\x88y>!\xa7Ny\x96lG\xf4\x38\xb4\xd7\x8bJ\xb8m" "\x44\xa7PV@ti{\xbb.mO\xe7\xde\xf2\x0f\xaco{,\x9cz\xd1K\r\x44\xdb\xad\x87=@\x95\ri\xaf\xc3WM\xd5\x15" "\x89\xb4`\x87\xa2\x87is\xe1\x98\x97\xf1\xceoO\xb2\xce\xa8\x9b\x65\x89\xd0S\xff\xafR\x9eY\xa4\x87\xed\x92\x8dRm\xc3\xbf\x46\x14j" "K\xae\xa9*rg\x0c!\x86\xd9\x95\xc9j\x08\xef\x8a\x62/\xb6\xe5\x1a\xc2\xe3L\x94=\xc1\x44\xba*\x9c\x0f\x1b\xd2\x08Q\x81\xf7\xe0\xc9" "Q\xd4}\x33\x38j\xd0\x83\x0f\x64\x91k\xae\x94+'[\xe6=\xce\xa4\xf4\x38\xaa'\xe4W\xcb\x1d\xf2\x15\xc4\xf0s\x8f#\xf9\xc2\x0f\x10" "\xe3zJ\x7f\xe2,\xe4\x94\x9e_\xb0\xbb\x95r\xaf\x13\xd4\x63\xc1\xd0\xf3\\\xa6~Q\xbb\x87\x1f\?\x1e\xec\x9a\xc3\xbdxt\x94\x9e\x97\xb1" "\xdf\x99(t\x90z\x1c\x0c\x13>\x44\xf9~\xbcn\x43}\x15\x9c\xfe\xe2X\x07\ti\x1f\x7f\xb7t\x91\xd1\x17\xef\x0b\x1d\xa3\x1eG\xc5z" "I\xf6)z\xcf\xc4|z\x98\x1d\x17\x32\xed\x35:\ts\x30\xbbK\\\x89&\x44\x37\xa9\x87\xe8l\xc2\x17\xdc\x06\xfb\x46=\x8e\xc3\xf7\xd8" "\xd9\xe1\xbe#\xc2u\x37)\xbc\x61\xc9\x95(\x8c\x90\xd8\x36\x19\xb3\r\xbc\xa2\x44\x1d\x16\xd4\xf5\xfd\xa2\x12\xd4\xf3IP\xb6T\x44\x98\xbbs" "\xfe\xce\x8b\xdb&.X\xd2\xcc\x89%\x42\x30\x31j\xa0\xa6\xdf\x0e\xc7\xdd\x84xR\xdao\x38\x38\xc4\xd6\n\xa2P\x41s\x85\x94\xb2ON" "\xc9\xb9\x93=\xb8\x1e\x16\xe6\x1b\xa3\xe9q\x38\xa3\xa9(\xf3\x16\x94\x34NO\xfb\xaev\xad\x30U\xba\xe3\x83\x9fX\xd4\xee\xc5HG\xbc\x95" "\xd1\x84\xc4\xe3\xc2\x96\x64\xc2\xbd\xad\xf2\xa8\xd6\xd8\xf6\x04jV\xdeW\x8b\x85\xbf\xb4\xa2\xe4\xce\xd2\xe3UP\x9b\xd6\xde'U\xed~s{" "\x90\x0f\x9f\x44\x33\xa2\xc7q\xad\x1e+h\x65H\xdf\xd5\x10\xdeTPh\x35\xf4\xe0\xd8\xa0l\x39\x11\xe6\x0b\x66~w\x94\x45\xa8\x98qm" "\xb6\xbd\xe9\x07\xc5\xf2O\x87\xd0N\xc3\xd1pV\x31s|\x84\x1b\xe4\x0f\x36=z\xf0\xc8\x16\x66\xf1\xc0\xb7\x17\x19\x36i{\xdb\xda\x81\xd3" "_\?\x31\xb1\xba\xa4\xd8\xf3\xc2\x45(\xd5\x42\xdc\xb9t\xa5y\x96\xf5\x04;\x66\xbd\xed\x15\xeeo\xdb\xcc\x39\x35\nz}\x1c\xd4\xf4xO" "\xa5\xd9IP\x8fw\xe9\x0b\xbd\xe2\x8a\xf4l+\xd2_\xbf\x88\x9ds>\xb1\xeb\x8a(\xf4\x35\xfb\xec\xda\xf5\xa3\x8cn_)\x45\xb3+]" "\x86\xeb\xea\xfc\x07\x44#G\x99\x1ew\"\x94\x82\xfd\xe8\xce^\xb8~|\xf8\x1d\x9f\xbe\xf1\xd1\x9b\x9a\?p\xc8\xaf\x8f\r\xc0\x8cL\xf1~" "\\$\x1b\x8d\xf8p\x04\x7f=QW\xf7N\xed\x1c\xbcl\xa0P^\xf4\xe3\xfb\x1f\x96^\xfd\xf8\xc3^\x8e~R\xb9L\x1b\xa5\xa4\xbe\x86" "\xc2\x10\xb0p\xa8\x0e\xdb-|M\x9a\xb8\xfe\x35\x96<}i\xc6l\x9f\xc6\x1c\xa1\xec\xcb\x65&\x8b\x1b\xec\xbe[\xec\xb3\xcd\xae\x8c\x0e\x7f" "\x10T\xc8T\xd2j \xd0jP\xbb\xbf\x61\xbd\x1aTm\xe5\x64oYMv\x7f\xfbX\x11#\x9ct\xa3\xe7\xaa'\x17\xe7\x8e\x95Q\xf7" "\x9d\x13\xe7\xaa\xb4\x31\xfd\x89\x64\x97\x0bvz\"n\x97\x0b\xa7^\xaa\xad\x61\x33\xa5\x97\x83\xd6\xf5+[:\xafl\x02\xbe\x46\x85.\x88\xa7" "\xf9\x8aH\xf9J\xcb\xf4\xaf\xf4\xd0x\x65\x1d\xa9\xd4\x9c\x81\x66\x05U\xba\x19@\xd5WN\x8b\x64\xd6\x82z\xc3\x19\xe1\xf1j\x0c\x01&M" "\xa5\x8f\x97XP.\n\x39\xe4\x95m\x42\xa5\xfe\x12r\xa5\xaa\xe8\xe7%\xc2}\xbd\xb2\x04P\x32s\xc3\xdc}|}\x1b-\xb9\xa4\xb0\xf8" "\xba}h\xff\xce\xea~ZQ\x61\xcf\xca\xe2\x1b\xbb\xbeo,q\xdfX\n\xbdm\x9f\xec\x92\x87\x1c\x46\x18\xb3\xb1\xa1\xd4\xc5\x93\xe6\xa9Z" "\x1c\xc7\xe8\x65\x8d\xe5\x9f\xf2\x93\xaf\x98\xb9\x02\x16\xaa)\xfa\xcc\x9f\x1c\x41\xff\xc4\xbe*\xc5Ov\xf1>\xf7\x17.\x15\x7f\xd8\x8f\xf8\x61\xb5" "\xff\x03Wm\x61{\xac\x11\xe0o\xca\x41\xadt[\xc8\xa4xJ'\x02=\xa6\xae\x86\xae\x96\xb3\x64`\xed\xd0\x9f\x18\xcf\xe1'\xbem'" "\xad\x1c\x0b\xd6\x1f\xf6#~\xd8\?\xffI\xee>\x35\xbc\x0f\x06\xd2~\xd8\"\xfb\x61\xd6\xfb\x41\xf8\xb2\xe2\xcf\xf6u\xcc\x86\xe0\x8f.\x85\xd8" "\x9c\xb1T\x9d\xb2\xc9\x31\xe5_\xa7\x11<\x98\xa6X\x9c\\\x9cn\x8f\x9e\x9d\xba\x42\xb6h\xef\xcd\x9c\x83\xf4s\x44\xe0P>\x81\xe8X\xcd" "\x39\xe8\x34\xe7\xa0\xd0\x1c\xae\x96\xc2\x9b#\x10\xcfm\x1e\x7f\x34y\xe2y\xfc\x63w\xc0\x95\x9c\xc5%\x07\xda\x96\xc9\xfc=\x9aj\xf6,\xfd" "\x91r\xc9\x08\?\x85\xd2\t\x9a\x94\xa5S\x9cUxv\x00\xda\xd9\x85v\xf6\xd2)\xe6w\x85\xe6\x15',_\x80\x16\x46N\xf2\xc3\xf5;" "\xd8\xfe\x8a\xf3\x33x\xd1\xa8Z\x82\x96[\x84\xd6\xba)\x9d\xc2\xf1\xb1t\x8aw\xdd\x88\x89S\xdd\x07\xcfN\xa0\x99\",v+\x95\x90\xc9" "K%l\x8dS\xa2{\x85\xd0\x42\x83\x0b\xad\xebX\xe2\x9a\x32\x61\xa9\x04V\x38N\xaa\xe6\x0c\xb4\xf2O\xf8\xd3\xf1_\x43\x0cN\x61\xfbT" "L^t\t!\xaf\x85\xb6O^\xa9\x94Z\xc0\x87R\t\x41\x1c\x84\xd2*\xc8\xcd\xa3\xac\xa6q\xa9\x8c!O\x63\xd8\"\x46\xd5\x1a\xb4\xbe" "\x95\x92\x9f\xb6\xc1@#\xba[\x62\x9a'\x94r\x01\xda\xc6\xd8\xc6\xdf\xe5U:\xd1Vp\x94\xef\xf8\x31ltm\xa6\xbc\xd7p\xb0\x80\xb2" "|\x62&o\xbd\x1c\x1dt\x9c\xe1P\xa6\xb0\xcd\x9e\xa1\x81Z\xe2\xda\x36\x63\xb4\x98\xa3\xa3\t\xe5\xbb\x06\x98\xc2\x06\x04\x41\xe5\x1b\xfb\x7f\x13" "\x65\x9dWSI\xed\x13\xbb\x89\x9a\n'\x35\x87\x0e\xe5\x98\xfc\x06O\xcf\x9d!\xba\xa0\xa9\x38\x7f\x89\x35\x05\xa6\x34\x42\x65\xee\x84\xaa\x12\xbf" "\x37\x30\xa2-\xea\x8c\xbf\x7f\x9eu\"\xf8\x83\x9a\x97`\x11\xa9\x8a\xc2[Yw\xa2\x06\x11\xb3|\xee\xc4\xf0\x83\x99\xe1\xda+y'\xca\x38" "\x35\?\xc1\xfa\x82\x99Jz\x18\xdf\xce\x34\xff\x0c\xb3{\xed\x44\x1b\xbaT\x0e\xe3\xb5\x62\xbe\x9c\xfc\xcf\xf1\"Y\x35\xa2\xe1:\xae\x8fp\xac" "\xcfo\x0c\x98\x10\xd6\xefV>G\xebNT\x42\xd6\x89\x86|\xa8\x36\x84i\xc4\x36\xdf\x62\xce\xf8\x91\xbd\xa7\xb7\x39v\x46\xe5<\x82\xad\x43" "\xb5{\xa8\xfeJ\x65\xa9\xee\xd0`\x16\x93\xcf\x00\x35\x9f\xb0p\x9a\xbc\x7f\xa6\x85\x12U\x8d\xc4\xb3\x41\x0cR\x61\x11\x89\x8aP<\xc2\x32\x12" "J\x63Lv_\xf7Ly\x98\x9e\x16xM\x8a\xf8&\xeb\xa2\x0e\xbcv\x8d\x61\xafOQR\xbe\x87\x82\xa9\x83\xe9\x0b\x61+\xbb}" "\xad`#\xedRg[\xed\xff.\xa7\xd8^Lw\xac\xebI\x1a!\xd0I\xc9\xe2\x1e\xda:zU\x8f:\x9f}\xf0\x90n\x8aP\xed\x9e" "^s\xf6\x0c\xeai\xaa\x1bS\x9d\xad\xa1\xd0\xd7x\xc4\x10\xb4\x10\xe9\xa6\xe4\x1b\xfc\xc8\xee\xc4\x63\x41[&h\xf4\x13HO\x10\x9b\xac\x8ai!j" "J\x13\xd6\x04\xca\xe8y\x16\xccq)\xb2m#\x44\x99\xd7r\x89\x9e\xd7\x42[\xdf%\xb4H\x1d\x46\xdb|\xbd\x10\xd4\xbc\x8b\x00\xfc\xa6\xc2" "\xae\x1e\xa2JR\xf1\x1d\x62\x33\x1aQ\xe6\xdc-\\\xcc\x41\xdb\x31\xa5\x34\xf1_\x42\x18##/_W\xf1h\x38\xae\xa9%\xe0\x04\xf3\x36" "\xc2\xb7\x9a\x34\xa8\x93\xbf\xf7\xae\x92\xbf\x05\xb6\xb0U\xe9\xc8\xe7\xd8\xeey\x82!\xb1\xd2\xb7\xf4\xd0\x95+\xd6L\x0c$$\x34\xdf\xc5\xd2\x8a" "\x1d\x14\x65\x32\xffL'\x1b(sY(\xad\xe0\x00'\xc4\xeb\xbfJ\xd7\xb5x\xfd'\xb6}\xaeJk\xb8\x13\x96\xb8\xed\x64i\x83\x98\xe6" "\xa5\r\\^\xcb\x07p\x0e\x15\xda\xdf\xcb\x07\x18\xa8\x10\xda@\x85\x12\x7f\xc7\x10\x41\x99\x45\\\xf9 >\xfd\x06\xad\xf8\x12\xda@\x85\x11\t" "!\xa6\x8dY\x94\x0f\xa4\x31\xa8\x1e\x94S|\x00\xd9\x43h\xafu\xf9\x00\x41\xcd\xcb\x87xs\x94\x8c^_>\x44\xcd.\xb4t\x11Z\x93" "\x43\xb8n\xf8GP\x97\to\xf1\xa7\xf8+\x63\x44\xe1!\xb4&\xb4\xd0\x86\xe4\xca\x87\xbaT\x8f_\xd1M\x87\xad\xad!&\xae\x89\xe1\xa1" "\xca\xdc{Lh\x65h\xf9\x08S\x1b\xc2\xf2\x11\xf8\x30\x32\xf2,GX\x9b!|\xb0\x44\xca`\xa9\xb8\x11\xc3\x46\xe5\x0c\x66;\x85\x36\xe4" "\"\x44z\x66\x98\x9e\x99\xe8n\x0e\xbe\xe3\xef\xf1\xe9\x18,\x9c\x39\xfd\xa7\xc4\x44\xed\x0e\xd3\x86\xb7\xc4\xbc|\x04\xbf\xf2\x64\x85\xfcI\x36\x8b" "\xf8\xfd\x0e\xca\x06\x8d\xca\x19\x8c\xd1\x08m\x0e\xa9\x9cI[\x05\xffy\x8c\x9f\x96\x0b\xfb\x85\xbb(\xcb\x93\xe5\x02\x06q\xcag(\x85\xcb%" ",\xdf\x10\xe2\xfeJ\x08 ^\x66\xe4\x1d\x63\xdc\xb8O\x06u(+Q\x85H\xb8\xd2\xf6\xaf\xb1\xccoK\x1fR+\x8d\xf2\x05\xf5\x05S" "\xe9\x02\xef\x8f\x10\xbf\xaaL\x7f\xe6h\x9c\x98\n\xab\x65\x83\xb2\xa6\x86(\x1b\xc2\x12\x96N\x41<\xfd\x0b\x04>\x10\xae;\xc6\xe4\xe3\x34j" "=\xc4\xedwWq\xfe\xce\xd5v\xbe@`\x8fr\x8d\x39\x42\x19-\xff`\x9c\xdeT\x9c\xbf\xc0\xf8\x39T\x65\xea\n\xc1\x93\x8dI#\x0b" "\xf3\xe6@\x14\xc6\xc8\xcbR |\x86U\xc1\xa2\x8e\xe8\xaf[\xae\x61y\x9dq\xef\\\xa2\xd2\xe9]:\xb3\xec\xd1\x46M\"\xcc\r\x41\x1b" "\xe9\x10>\x65\xe3\xfc)\xaaTS\xe6\x1a\xdcu%\xbd\x1d\x0c.\x8b\xb2\tl\x63\xf8\x31\x31q\r\x66./\xe3\x8b\xa2+\x94}\x30W" "#\xcc\xa2\x94\xdb\xf1\xe9\xdb\xef\xe2\xcf\xb6Y\x08j\xfd\x12\x94\x45\xc8\x13Z\xafMh\x05\xa9\x11n\xa5\x62\xda|\xa8\xf0~\x16\x9d\xd6\x10" "p\xc2\x94\xee\xa3=\xe7\xd7l\t\x87\xd0\xa6s\xcb\xed\xa4P\xd6\xd5\x11\xffm\xa6<\xcb\xff\xfa\xbf\xff\xcf\xff\xf5\x7f\xfe\x1f\xfc\xc9\xa6M" "\x8d{\x17\xaf\x1e\xa3\xb7#\xec\x33\x63\n\x13\x91\x62\xae,+\xb4\xe5O\x92\x8c\x08\xab'\xca\x46\xad\x85VH\x0b-z\x83\xd0\xda\xae\xe5" "\xf6\xb6u\xe2\x84s\xb8\x99\xe9\xe8\x19\x8b\xbd\xca\xe6\xc2\x63\x85\xb0\x98\xb3\x33x\xd6\xa8\xf9\x0e\xda\x18\x61\x99\xb1s\xca\x8c\x99\x63\x64&\xbf" "\x45T\t\xa1\x85V\x16\xde\xf1\xa3O\x38\x01:,\x42[#]\xbe\xe5\xd3\xbe\xe5\xcbr\x8b\n\x42\x88w\xfe\xd6\xaf&\x39\x9d\xc5\xc3|" "\x64\x01\xe8\x45Y@\x06#\x42I\x8a\xf9y\x07.p\x8div\x00\xe6\xdf\x11\x83\xc4M\x34\xe4\xca\x8c\xceS\xbe\x85\x8bR\x99Qz\x84" "\x35\xdc\x34\x16J\x97\xefu \xe3\xa7\x93v\xecz\x9fYT\x8b\x01\xa2\xfb\x08\x97Mr\x02\x9a\x07\x99\xd0" "\xc6\xac\x8d\xe8\xf5\x95\xd9\n\x16\xda\x82\r\xa1\xadr\x11^\xe1\xab\x91\xcd\x01\tm\xa6G\xd8\xe5q\xe4\xff\x01\xe6\xaa\x84\xd3!\xb8\xc0\xef" "\x31\xff\x0f\xf8\x1e\r\xb0U\x8e\x30\x9f\x0f\x87\xcc\x64\xf6\x1d\xc4\x85S\xd0\x96\xb3\t\xcd\xad\xd5\xc8W\x62\x10[\x34\x16!\n\xaf\x01+\xe0" "\x41\xd8\xc0Z\xcc\xbb\x12\xba$\x62\xda\xf0\x97\x92g\xee\xf0\x07\x1f-\xa9\x07\xe8\xc7\tK\xf8U\xb8\x8c\x08/\xf1=l\x04&l!\x65" "\xe0]Y\x1e\xc0\xd9\xd0\x03\x16\x97\x07!\x90\x9f\x99\xd6#\xfd\x86\xb2\x05`J$\x1d\xe2\x0c\ns\xb8@\x38\x62\x1a\xc3\x0ft\x1a\xd1\r" "\?\xc5\xcbM\x1fq\x99\xe9\xf0\x15\x1c\xf1\x32lh\xae\xcc\x96\xber\n\xf2\xc1\xa6\xab\x05\xfa\x92\x65v\x02\x84\xe6\xdaX\x1e \xd4\x9e\xd0" "\xf6\x9e\x11VqG\xccN\x9f\xe8+\x97'\x18V\x31\xea^\xbf\xa8}U\xc5\xf5\xfe\xf6\xf9\xca\x95\x86Z\xc3\xdf\xb4\xbf\xaa\xe3\x98\xd6\xb3" "\x87*u\x82\x42\x66\x9c\x63\x62_\x38\xfc\x8e\xa6\xcf|\xe7\xa9\x92\xf6\x0f\x94\xc5I\x34\x62\xe5\xb5\x99\xac\xf6\xe6\xd1l\xe9\x94\x16pj\xbd" "\?Q\xd6\x33SZ\xf2r\x17w\xa3\xce\x64\xe0\x95\x31U>\xc3\xd0(\xd4\xec\x9bO\xd4\x95\x7f\xd2\x96:\nm\xc8\xbb\xcc\x9d\xd8\x84\xb5" "\x1f\xdd\x0c\xcc\x82\xa0\x8a\xe2\x15\xcbU\xc8\xb5\xf8\x95\xa9\x92\xcf\xb8\x9aX\x06\x98\xa3\xff/|\xae\xabw\xb3\xb9\x37\x95W,\xfdV,\x8d" "V\x08\x16P^\xe9J\xa5\xfc\x0c\xaar\x88\xf7\xc7\x88\xccR\x39\xdcVO\x9d<\xf4\x07\xb1\x07*\x7f\xa2\xe3\x92\x13/\xac\x99x_\xc4" "\xb4\"\xda\x88\x61\x46\x31m^\xc8\x98,\xfe\xc0\xb4\xa0\x96\x42\xbb\xbe\xca\x1f\xb4j\x84\xd6.\x17\xf6\x0e\xe3\x8b\x0c\xc2{\x8a\xb2\xb1\t\x63" "\xe4\xa7\x11\xd3\xee\x11\xe6\xf0;\x98\xe6\x96\x07\xd3\xdc_\xcd\xc4P+\xcd\xf0\x0bx[\xcd\xc4\xe3\x87yX\xdb\xfb\x91t\x38\xf6\xbf\xa1\xd8" "\x11\xe6\xbbi\x66\xbeg\xa6G\x1b\xf8\x1a\xc8\x81\xda\xc6\x99\xd8\x1e\x0b\x62\x8eKN\x0c\x99\x98\x19O\xfb\xa2\xb0 y\xff\x80\x8d\xe6\xd9\x01" "\xff\x1b\xca\x0e\xa1\x8d\x13\x1a\x31xT\xf9\x83\xac&\x1c\xbf\x63\xf9\x8c\x98\xef\xf8\x01t\x0b\x85\x83\?\xf2\nn\x07\xda\xa6\xaa\x64\xa2\xcd}" "\x88\xdcX\x61LZ\xe5+\xe8\xad\x18\x31\xad\xe6U\x16\xa2\xe1m:\xfc\xd8\x1e^\xf0\x42NP\xac\x0bm\xfeO\x39\x96\xf2P\xfa\r:" "\x88l\x15\x9c\x1c\xb3\xeaWh\x45\x7f\x85\xb1m\x8d\xea\t\x62\x33\x84P\xcfu\x66\xac\x13\x9d\xf6\xaf\xe0\x8aP\x03\x08_\x36\xcc\x04'(" "\x85\x85\xc3\t\x38^\xc7\x15\xee\xf3*\xcaz+\x42\x1b\x12\x17Z%\xad\xb4\x0c\xc7\x18\xba\x42{q\x8dX\xbb%\xa6\xbd\x1b\xc2\xca\t\x99" "w\xfa\x39\xc5L\x87k,\x11\x10uq\x04\xffg\x31m\x99\xb3\xd0\xd6{\t\xbd\xb6\x10SZO\xc1\\\x82\x16\x94N\x38\xed\x80\x0b\x10" "\xbdL\x61\x7f\xbe\xf7\x03\x18\xd0\xad\x9c\xc0\xa7\xcf\xa8\xbb\xd8#\xfb\x9aj\x8d\xb1\x94\x44\x94\x35\xe0\x8c{\xbf\xe0w\xa8m\xb9\xbd\xa3\xe7\x1d" "gT\xce\xc3i\x42T\x05\x0fS\xee\xd3\xc9\x17\xff$\x1d\xbf;\xc3!\xebmWN\xa4\xb4G\x19*\xa6u\xf3\x85\xe6H$l\xf4\xd0" "\x95\x14\xf3\xaa\xe6\xc4\n\r\x31\x9f\x90\x80X\x00+\\\x37\xf5\x0b\xb6\xf6\xb6\x92\xc5P\x81\x10\xb9\x30\xfb\xbb\xb2\xe4\xcd\xa2\x1dX\xe1>\xc6" "\x15\xee\x63,\x44n\xcb\xa2\xef-\xb4(\x00\x42\x8b\xdd.\xb4\xb8\x1d\xc6\xed\xf2\x02\r\xbb\x90w\x94\xbf\x16\xcd\xcfL\x64\xad=\x85\xc9:" "\xa8\xe6qP\x16\xfe\x45\x38^\xff\xce\xa4\x65\xde\x86\x9a\xf1\xa7-\"\x9c\xd0Z\xee\x95l|\x82_\x8cO\xb3\x64\xc1\xa9+\x15l\xf2L" "T\x1e\xdf\x42\\\r!r\x64\xd6^Q\x86>\x86\x9a\xcf\xdd\x64\xde\xc9\xee\x1e\xb7\x98Y\xa7\xdf\">\xb0\xfb\xbd\xac\xdc\t\x36'\x87z" "\xfb\x88lG\x02\x31\xabK\xb0\xd1p\x46\x95rT\xe7\x95\xf9w\x9a\xc7h\xb4\x89\xd9\xfat\x46\xddkt\x62\x45\xdd\xf0T(\xc4\xb2q" "\x37\x03\xf6g\xe0\xe2\xda\xf9;+\xbb\xe9w\xe0\x37\x85\x19P#\xa6_\xcc\x44+\xa4\x92M\x0f\x90L\x08\x1fn\xdcV\x17\x30s\x38\r" "\xf3z\x16\x81Z*\xdc\x36Tx\x8d\xfbI\xdbxn\xe8\xf3\x19\x35\x06~\xe9\n\xcaO\xb4\x42*\x62\xcaPX}G\xa8\x1d\x31/\x8e" "\x9d\xf1\xe9\x05\x9c\xfd\x44=\xd7\xc3\x08\x85\xa8Y&\x1e\xb5\xf8\xe8s\x88\x1f\\\xc9\xc1W\xba\x92\xc3:\xf3J\x1e;>\t\xcd\?\x45\x88" "R\x31\xcfW.\xcf\x8a\x35\x1f\x99\xcf\x84\xd0&\xcc\x84\x97\xd4(\x18\xb8\x63{(\xbb\xf2\xd1\xbc\x01\xa2\x44\x64\x0bYX\xc2\xdfY\xdc\xe5" "\xe3\x66\x15\xb4}x+y\x96vy\x44\x89\x94\x02\xd0\x1c\xfa\x8cQ\xb9\x18\x8fJ\xe9Q'i\xe5\xb0\x07\xb1\x1c\x9e\x38\xf1\x35\xa6]\x1e" "\xeeV\xca\x96\x11\xed\x42\xa1\xf5 \x85\x35\\\xd6v\xda\x41 \xc4J\x95)\xc4\xe0\x13\x15\xae\xc4\xaf\xd4X*\xd4\x30\x82,\\\x82X\xa5" " \x44iP\x63]S\x43\xf7Z\x88;\xaf\xf1\x65\xac\x61\x16@\x88\x82\xbf\x06\x17u\xa1\xf9*\tm \xa0R\xc3\xc0\xb9\xd0\x86\xd2*" "\x35,\xe8\x16\xfe\xdc\x31\x91\xc5\xb4K\xb8\xe2\xa5]\xfd.KQ\xa9\x82%\xa4\x95+\xec\xc9Q\xe1\xba|!Z;W\x98\r\xa8pQ" "\xbe\x31\xee\x1c\x45'\xf7TO\xceh\xb4\xc0\x30\xb3\xa8\xa7\xa9|\xed\xd7\xda\xa1\xa2\xde\xdf\x93\xcc\x10\x91\x42\x44\x99\x37\x98\x91O\xfd\n\x83" "\xdb\xc2U \x9b\x31W\x98(\xa9\\\xc5\xf9\?$\xce\xc7\xe4\xb8\xe2\x03\xbfJl\x63\x00\xe1\x12W\x99\x1e\x9f\x44\xa7m\xff\xb6\xf4.\xc1" "<>\x95\x16\x66\xf1m\x1b&\x8a\xb3\xab\xd4\xf6\x95\x11\x8ep\xbb\xe8\xa4\n\x37 \x9f\xeb-\x66\x30+/Q\x66\x1c\xe7\xaf\x30\xe9%\xea" "\xe6:\x1e\xbe\x62\x9f\x10S\xa9\xba\x14V\\m\x9b\?\xac-^$\x31\x30\x0c\n\xb5i\x44\xef\x39\xac\xc8\xa9\xbc`\xeb\x11\xe1\xedH\xcc" "\x34S\x0e\xaap\x1a\xb7W{*\xfcmX\x00\x91\x0b^t\x8f(\xfd\xa6]\xf3\x8b\xee\xd3pZ\xc7\xec\x92)\xdd\xaf\xd9\x15\x92\x42\x19" "\xd7\xff\xc6\xe6\x0f\"j\xfeW\x32\x10\x86\xfa*/\xdbZ\x61w\xe5\xdc@N\x38\xef\xfd\xae\xca\xffs\xbcH\xd7k\x0cVU\xfaQ\xfe" ">\xdd\xbc\x62\x83\?Q(\xc8\x94Q\xb5\x1e]RY\xfc-\x84\x92\x17U\?\x95/\xff.WP\x16\xee@\xddq\xfaNi\xa4\x46\xc5" "\xe7=\x15\?-]\xed\x99\xac\xdc\xfbQ\xaf\x02\xa2\xceV\xb2\xe2QS\n\xfb\xe4\xe2\xf9_\xb5\xff\xe7\xe1\x35\xc2\xcf\x98\x8a\xefg{\x66" "\x88$\xa2\x07\x96Nl\x85.\xe6\xa4\x0e\xae\x7f\xb0\xc4\xb1\xd2\xc7j\x16#\x46\xb5\xdc\xd4X\x94\x36\x85l\x07\xd4\xef\xea\xf6xO\xa1\xdf" "o\x8a\x35\x82\x99(\x9ah&\xd7\x7f\xe0\xc7/\x07\n\x9f\xf1\xc5\x33\xe6o\x45\x9d}\x80\xa5\xc1\xb6y\x00\xb3Z\x05y\xe3\x42\xcc(\xc3" "\x44\x8dh\xe6 |\x00+\xb2\x61~.\xb0\x9d\xbb)\x36\xf5\xd5\xd4\xc5]\xbb\xdf\x81'\x91\x98\xe6@\x66\x0c\x37\xc2t\x14Jn\x89\x96" "\x8dm\xf6,n-\xfd\x98\xdc\xc8\xeft\xc6\"\xb9\x1f\?\x0c\x9c\x08\xf7\"\xe6\xa4\x15]\xd8\xeb\xde\x97\xeb\x82\xb3\x94\x98\xcd\x85\x33*\xde" "\x45/\x05\x7f\x8e\x08\xc0%\x9c\x7f\x86\xaf\xadGN\xf8OT\xfa\xe8\xe2\x1a\xa3\xec\x02\xab\x1a\xa0\x9e\x8f\x30\xc9l*\xac\xac\x14U(y" "\xa6J\x8b\xc8\xa6i\xb9\x87\ro\xc4\xbc\x9b\x85\x9f\xb6\xa9G\xe3\xef\xbc\x96,J\xae$o\xb1\x13\xa4J\x9f\xe1\xde\x81\xd1\xb1\x33\xea\x9f" "h\xa6\x30\x9f\xbdJ\x1f\x8b\x15\x8c\xfeS\xdb\xce\xb7\xb4\xe1\xfd\xba\x44\xa5\xd9O\xd6\xdb\xae\xf0\x37\xdd\x61\xc8\xe2{[\x0b\x65\x80h\x88\xb6" "%\x05\x1b+\x34u\xc5\x36\x9a\x88\xd3({\x42\xce\x41\xd4Ot\x30\x16Z\x94\x1b!*\x93\xa9\xb5\x43\xc3\xcf\x61X\\\x88\x1e\xcc\x34Z" "\xf5\x9dp\x10\xabL\xb1J[hQ'\x84\x36U'\x44'l\x1a\?\xbe\xffN\xbbQi\x04\x65\xa3\xc3\x95i\x92{\x93\xa6\x16+\xc1" ")K\xfb)\x02<\x08yz\x9d\xc2\xb0\x91\xc4t\x93\xc5\xc6qr\xec\x7f\x1d\xb0qx#[VSl\xa5,|\xe0\x8c\x92\x98\xe8\x92" "N\x31\xefT\x99n\x0fJ`\xa3\xb7w\xbf\xba\x82\x04M\x9d)\xc2\xdc\x0b\xa7\x9d\xe8\xf0\x07{k\x88ZT\x9c\xfc\xe0\xecw\x01\xc2S" "\xc8\x88\xa1z\x31\x31\xe8 \\\x80\x16;Lhs$\x95Y|Z\x84\xbb\xac\x98\xb6\xdf\x83\xd0\xbc\x8c\x85\xb6\x12\xb0\x32K\xf2\xf8\t\x38" "\xe6\x08\xd1\x32\x9bG\x16k\xa1\x42\x97\xee\xca\x9cm\xdby\xd2\xb8\x04\xd1q\x9b\x63P\xafz\x84R\xbeJ\x1f\xa8\xea\x11\xda+UN\x42" "*\xc7N\x34\xc6\xaaGh\xa4\tm\x8f`#R\xb3z\x94\x9e\xdb\xb7\x33\x18\x44\xad\x66\x30\x46W\x65\x9f\xa9\x9a\x45\xee\x12Z\xe3\xa2\xca" "\xbe\x90\x10\x9f\xcf\xf2w\xb2h\x15\x19\xd5\xc9\xd9\x9c\xf0T\x1d\x1b\xd1\x18\x10Z\xa6\xa9\x66\xd1\t\xadJ\x03\xe4\x16\xb4\x89\xd4j\x45Z\x9d" "\xe8\xe5\x89)\x95H\xe1\x0fo\x86\xbb*W+\xf0\x82\x11Z\x87\xc0\x98\xfe|\xee\x99\xf0\xa4\x13\x65#\x9b\xc2;\x9c\t\xad\xb1*w\x19" "\x14J=|P\x85\x37w\x95[\x13\x0b\xad\x8d&\x34\xcf\x05\xa3\xff\xc8\xef\x99(P" "\x45\xe5\x0e\xc9,\n@\x37\xa3\xee\xdf\xf0\x99\xca\x45|\xf6\x08\xf3\"\x87\x92\xdfM\xa9\xed\xa3\xf3\xc6\xff:\xb0\xbd\xb9\x8d'\x1f{\x87\xa5" "\xd9\x10[\x04\xa6*\xbd\xe1\x84\xbd\xac\x33:\xaf#\xe0\xab)\xf9\?\x31\xf7jQ\x1a\x1a\xed\x8e\xe6\x06\xb4\x81\x95*\x63\xcaU\xe9$g" "\xd4\x97\xd7\xea\x30\xa8\xf9<\x1a\x8d]mk\xa5`\x36\x06|jU\xbf\x19mn\x99\xeb\x9f\x99{\xe9\xa3\xea\x02I\x14W\xf9\x01[\x89" "#l<\x83\x16\xa6J\xf8\xf6\x80\x62@\xcc\xd1\xb9.[\x9a\xbf\x62@\xeb\x9f\x03\x85\xbd\x03\xd2 \xfd\xf7\x13v\x80\x9f\xe0\xe3\x80O\x83" "\xd0\xd7\x61\x88\xf9\xb9t\xaa\x63\x9e\xf5\\\xa1jk\x7f\xa0\x18\xca\x91\x94\xfc\xf3\r\xde\xe0\t\"\x88\x43\xf5\x1f\x37>Q\xab\x8a\x33l\x8c" "\xa4\xaa\xe1\?\x93\x1ew\xe2n\xd5\x33\x1b&p\x84\x19\xdcoZ~\"\x91\x34\xe9(\x87\xa8\xf2P\x63\xfc\\\xfa\xae\xa3^\x98*\x13\xf5" "U\x07\x37\xcf\xd2>\xc0\x1e\x82{\n\xee\xda\xd5\xea\xf6\x10\xd7\xbb=^\xa5\xa3'\x7f,\xdbL\x35\xb1\xc6\x88\x98Y\xfc:\xeaR\xe1#" "\xf2\x8b\xee'$\xb9g\xf6\xb1\xa7\x12\xeb|T/\x99\xc6\x97,\x9a.\xa3\xea\x1bh\x1d\x34!\xf2\xd6%:h\xd5K\x0c\xd6\t\xad\x8e" "R\x8e@\x14J\xdc\xad\x45hM\xf4\xea%\xe2\xed\x0bQ\x18(\xb1\xf9\x97\x9b\xc9\xf5\x10\xcazr\x46\x8c\xa3U\xb9 \xa1z\x89M\x8e" "\xabM\xec\xa6T\xd5\x8dP\x34\x10\xbb\r\x66U\xb9*\xab\xcaI]\xe5\x1c\xb4.h\xf5\x96\x45\xfa-:\xe9\x42s\x9a\x30\xa2U\x08S" "z\x87\xe7\xe3\xb4\xd3\xe3\xc9yL\xb7\xc6<\x1f\x87\x63\x39~\x1e\x89s\x1b\xbe\xdf\x65\x04l\x31\xe7\xed\xe8\xe4#\xfa\xb9u\x95\xf4\x37\x41" "!-o\xb1\xf2V\x88\x34\xbc\xc5\x92m\xe1\xe0\x95\xc4\x15\x32\ro\x99\x86\xb7X\xf6i\xc4\xa8z\x95\xbb\xb7\x08\x91\xbc\xb7L\xc5[\xac" ".\x10Z{Z\xb8)\xf3-\xba\x45o\xbfz\x8b\xb0HJ\xa4#\xfc>\x85W_z\x07'\xfc\xd4\xab=\xf7.S\xb7\xfb\xbb:\x06" "\xd7\xf6l\xba\x91\x8d\x19(\xbf@|\x8f\xbb\x1bW\xb9\x05\xb0\xd0V\x98\t-\x98\xbe\xf2\x0c\xfc\x19\x82\x16\xff@\x38\xb3\x1b\xeb\x62\xb9{" "\x95\x41,\x85\xb7\x9e\x81\x05\x1c\x8f\xaf\x46I\xed\x0es\xd2\xa2,\xeaX\xb5\x9f\xb6\x8f\xa2\xd3ZzS\x0c\xaa|\x9c\xb6\xc6\xae\xe2\x42-\xca\xe1" "\xf7Y\xe3\xf5\xb7\xb6\x0fM\x95\xb3\xe9\x42\x64J\xce\x81W\xdf\x62\x1b\x35\x14>\xda\x13zK^\xed\xc9q>\xba\xca\xd5\x87\xd5\x37>\xf7" "\x37\x96\x1a\xf4\xa2\xacr\x86\xb8J\xff\xc8*g|\x85\xb6k\xa6\xd0\x1a\xbf\xd5\x41|\xf8\xbd=l`\x94[\x94\xadz\x13\xda\xc8\x85\x11" "K\x93\xcd\xc4\x38\x87\x98\xd6Y\x13\xda\x18\xbd\x31\xca\x35\x30\xab\x62\x8ao\xdc\x00\x8eU\x42[\xa2[\x1d\xb0\xccV\"\xbc,\xcd\xb9\x9b~" "\x06\x31Y\x44\xd3\xc4\xfe\x65\xa2>\xef\x93\xf6\x08+\x92\xab\x83t\xf8\x01\x9a#\x8ep\x85\xcbG{\xb8:\x80\x8b\xa9\xd1\x7f\x19]@\xa3" "\xdf\x99\x9a\x16_\xa5\xca\xd5 \xc2\xd2#\x36\xe8\x14\xd3\xda\xa2\x42\xd4Y\x43&\xdc\x30i\x95\xd5\x01\x1f\x95\x1a\x15\x42\x1e\x89\xb2:)\xba" "\xe0'-\x1a\x46u\x88\xd1\x9b\xea\x98\x35\xc2\x18mk\xa1\xf9\xf3\x0bQ\xa8\x8f\xd1j\x16\xda\xee\x36\x46^\xfd\x38\xe9m\x9c\xcc\xb0\x63\xff" "\x13\xba\t\x42\x1b\x03\xaa~\x31\x03|\x31\x43}\x31\xe3|!\xfaW\xf5\x87\xadX.\xc6\xac\xce\xe5j\xb7\xd3;\xbe\x1cs\xde\xe5\\;" "\xee\x85\x07\xac.\x14\x65K%\xaa\xdc\"\xab\xba\x64\xe6]Z\xfb:\x8b\xf1\x10Q]}\x8b\xd8\\U\xb5mg\x83z\x7f\x97\x97\x01\x63" "\xbc\xd5\xa5\x30\xbd>O\xaf{\xfb\xca\xbaZ\x17\x07\x16\x94\x46O\xebs\x42\x46\x44\x32\x13S\xceqP\xc5\xaf^\x1cm\xab_\xa0\x8d\x12" "\x1b\x93\x41k[{t\xb5\x9d>\x62\x35\xe2\x45\x06\x8b\x30\x84\xe6]\x61\x8cz\x87\xc9s\xc9\x14\xaa\x19\xa1\xa5\x8e\xd0\xf2\xa6\xd0\xa6\x08." "\x32qm\x06\xda\xc8\xa6\xd0\xfcK/\x32p\x37\x11Z\x81\x66\xd4\"\xc8\x8aKQk\x9c\x13\x43{\x17\x19\x38\xd8\x0b\x1b\x9a\xab/\xce\x11" "\x80\xc2\xa8}\xc0\x83'(\\\xa1\x12\xb5\xa4\x99L\x0c\x33-\x03\xc3\x34\?\x1f\x33Q\?\xc1\x1cz\xb6\xdb;\xc7\xbe,\x42\xdb\xe3\xc0\x88\xc6\xac\x9aY\x92\x1f" "\xb1\"]\xf9\xe9\xd4\x90\xee\x36{+\n\xa9}\x1e\xdd\xbc\x82\xc3\x9c\x33n\xdc#\"\x9b\xa8\xf7\?\xe0\x06\x37\x83\xa8\x91\x46].\x33\xc4" "\r\xa3{$,\"\x39\xe2\xfa\xcb\xef\xb2\x1c\xdf!\xc5\xe1& \xb4\x91\r\xe1\x14\xd7\x07\xf7\xa1\x8bs,^\x13\xb6\xae\xfcV\xb0\x0cJ" "\x38\xffr\xfa\xb3\xd0\xfdr\xac\x17\x66&\x06\x11\xcc\xf4\x64U\xd3w\x44\x17\xb5\xc0\x85\x63\x0ft\x8c\x43_\x9c\xa7\xb9W\xf2\xcb\xe9\xf7\x82" "\xf1{\xa1\xcdJ\x0b_\xae\x9d\xf1\xdd\x05\x36X\x17\x65\x81{/\xce\xb1\xef\xbd\xd0\xc6\xef.\x8ax/\x8d\xea\xdem\xbd@SR+\x63" "l\x17j\xf7\x87\xa4x\xeaJ\x97\x43\x94s\x18\xb9\xbb(\xa2\xc1rQL\x0b\xe7\xc9\xe9\xd7\xd6|\x0e.\xb8\x8e\xe9\xa2\xaa[y\x0e{" "\xf1\xb5%]\x15Qq\x84\xb6/\xdd\x45\x95\xe9V\x85w\xa0\xb0Y\xd4\x8d%m\xf3PQ\x93\xa5\x33\xca\xe4\xf4\xe3\x36\xc9o\x07\xf6\xd4" "v\xddL\x96\xd7X|q\xd1H\xa7\xf9\xb8\x90g>\xb8\x8arU\xd0J\xbc\x8b+\x8c.\\\\\xa5GgQ\x8eq}\x44]\xe8\xd8" "\xc1\xc5\x03\xd6\xc0\nK\x95\x38\xbf\x82o\xa3\xa9\xed\xf5\x1a\x63\x89\x17\xdc\xafK\xf8\xa6\xf5\xca\x45w\xbb\\ \x9e\xf7\xc5\x33\xdfH\r\xa0" "\x86\x46\x8e\x8e\xd1\x9e\x90\x45r\xe8\x94nZ\x62\x91\xd0\xa1\xac\x0e\x12\xd3\xda\xb8\x17\xcfQ\xe6\x14\x0b\x1a\xcd\x84'\x94\x98V=\x08\xb3\x07" "\xa0\x7f\xc4\xda\x64>(\xaa#\xa2\x65\xf0\xfd\x10KT\xc4\xb4\xce\x82\xd1\xbf\x1d\xe7\xea\x11\xd2\xf0\x19\x93\xa1\xc2\xc2\x80\xfc\xd4\xa5\xe8x\xc4" "\xaa\x92\xc7^P\xbc\x37\r\xf9/G\x0b\xb8pm\x87z\xb4\x08Q\x36\x66+\xec\xf0;\x8f\x0c_-\xa6\xc5\xe8\x16\xf2\x9e\xe0:,\\" "\xe3\x42\x93\x63\\\x02\x06x\x84\xd7\xc3\xed-\xae\xd2\"p\xbc\xc2\x44\xae{\x46\x33Y\xf8P$\x1b\xe8\x44\x8bi\x0b\xe6\x85\x1f\xb8^\xe9" "\xff\xf9\x35`\x10\xd5\xb8w\xd1\xf0\x03\xd3M\xeaw\xfe:\xa2\x32\xd7\xd8VRL[W*\xb4=\xa0\xc3\xd7\xd6\x33g\xf8}\xfe\t\xed" "K!o@\xf7J\xbb\xfd\xeb&K\x02\x0e\x41\x0b}\xac\xadv\x80\xac$\xb4\x65\xa5\x46\x1d\x64\?\xb9s\xb5=\xbc@<(Q\x8b\xbc" "\xaen\xb0\xa1\x36\xa8Q-\x36'\x00S\xe9K.\xfc\xcd\x96\xc5\xd7\x0e\x90\xcf\x85\xb6\x7f\xa2\xd0\xf6\xd7\xac\x1d\xa0\xeb'\xb4y\x1c\xa1\x05" "\xa2\x34\xa6\xb6W\xa7\x86\xa2\xe9\x61\xc0PL[\x8bg\xc4\x64\x8c\x9bR\x05\x63\xd5\xae\x1c\x18\xe1:\x92\xdc\x1bh\x83\xdf\x46\xdc\xbd\x98\xf6" "$\x85K\x9cT't\xf2W\x98\xd0\x11\xd5\xe8\xea\"\x8cJ\xcb\xd5\xb6\xf9'\xa8\xbb\xb5~\xb2s\x04\x35zsn\x9b\?~k\x18j" "\x13~#\x41\xa5\xfb\x14\x9d\xbf\xa4\xe6x#j}\xb9\xa7\xe4\xa7\x9d\xba\x37\xcc\xe4\x0b\xea\xef\x15\x82\x17\xbaJ\x16\x17\x41}\xde\xca\x87\xb1" "\xe3\xbb\xa8uS'J\xb2]W\xf2\xb7\x7f\xd5\xf6U\xab\xf1\xdai\x92\xe9\xa2\x85[\xab\xfeNO\xd3\xc3k\xec\x9aU\xe3\x16\x06\x35n" "\tP\xab&\xd6\xf2\x31\xa6\x85g\xf4\xb3\x45\x8d\xed\xf9U\xe5\x8b\x46L\xef\xd6\xae\xf6#w\xd7\xae\x10\x14\x46\x88\x33]\x61I\x8eQ\xf7" "\xed<\xc9P\xfd\x90\xf8\x94\xfc\x33&\x87k\xd0:\x19\xc2\xb5%\xe0\x15\xe6\xff\x8d\x61\x03{S\x61\r\x93\xa8\x87#\xa7T\xf6\xdb\xd5\xc6" "U|\xbaL\x33\x97T\xb8\x9a\xd4\x42I\x0b\xd7 ^\x99\x1a\x03t\xd6\xfe\xa2\"\xa9\xfd\x45\xebK\x88\xeb\xfc\x1b\xe7\xd6\xf1\xe9Kr\x66" "Y\x81-\xf1\xda\xe8wZ\x8c\xbf\x0e\xd3\xc7\x1a\x94\xb5\xaa\x85\x36\x96l\x44\x88\tW\xd1y\t\xad\x38\xa8u\x63\xefoq\xe3)\x98\xd6" "\x45\x35\x93\xb9v\xc4\xcb\x12\xda\xcd\x8d\xe0,\xa3\x64\x14\x43\x31O\xda\xa0\xb5\xba\x85\xe6\x87\x65\xc4\x1a\x65([h\xa5|\x45\x11-\xa6\xb9" "\xf6\x0b\x8bwX\x11\xe0\x66z\x34G\xf4M\x39\x80\xe4\x10~\xc7\xa7\xdfI\x1dW\x13\x95\xd7\xce(\xf3\x8d\x35\xe0\xa2\xae\x18\x32\x41\xcc\x97" "\x9a\x13\xe1\x07\xc5\x64\xd2\x61\x41\xbc\xd0\x96\xcc\x08\x7f\x9e\xc9!\x38\xe7\xa5\xcc\xf9\x13s~\xde\x66\x8f\x84K|/>,\x93#\xf0t\xe3" "\x44g\\L\x8b\xe3$,\xb4\xc8\x1eh\xed\x33#\xfa\xac\x66\xa2%h&\xdc$`\x9e\xf6\x83i\xcdO\x33\xfd\xf1\xb0\xe4RJr\x63" "\x8e\xc0T\xf8@\xb5\xe2\xc4\x64\xa0\x99\x18\x93\x30\x33\x9c\xca\x07\xc5\xc5\x44\xc2\x32\x8d\x31\x83\xaa\x1c\x83\r<\x03\xb4\xfa\x84\xb7\x0f$\x7f\xd3" "ZO\xc6\xdf\xf9\x0bv\xea\x12u\xcf\xd3<\xf2\xaf\xccj\x61\xb3\x0c\x37\xfd\xc1\xc3\x63\x44\xf8\xc5\xb4\xb2\xed\x31j\xa3\xe4\xe8\xd4\x1f\xb2_" ":\x9a*\xc2\x9b\x83\xf0\xa7\xa7\x9e\x33\x19\xf3\x90uO\x8c\xba\t\xed\x43\x31\xa8\xd9\x61P\x7f\xf9\xd9\xcf\x85\x13\x1d\x05\x31'\xb8MO\xe3" "\x64q\x46\"y\x30\x45%\xcc\xcd<\x05\x10\xd6@\xd8\xc1G\xb1\xcb\x84\xf0\x0b)\x89`\xe0\xc2\x35\xee\x63{\x84\xbf#\xf6\x95Q\xf7\xc6" "\x1a\xe2\xd3\xf0q\x31z\xa6Qs>w\xd3\x9f\xaf\x98\xe8\x9a\x99\xe9\x19\x61{\xb1\xd6\xc0\xe9\xcc\xd4h\x1f\x0b\xcd\xc1\xb7\xc6\xf0\xac\x42i" "$w*\xf1\x33\x8f\xdar!#\xcf\xf3\xcd\"\xe6\x1b\xeb\xf8\x8d\xbb\?}G\x36\xc5`&z\x02\x62\x9as\x89\xd0\xc2\xf3\x19\xc3\x17\x36" "\x1d\xd6\x0e\xdfX\xe2*\xb4u\x84\x42\xeb\x8b\x1a\xd5\xe9\xd5\xd6\x81\x41y\x80\x02U_\xe4\x02:\x31\xfd\xb7\xe3\xfc\x12,<\x90\xb8\xab\xf8\x1c\xb7\x80\x96\xbe\xb0\x84t\xc6\x84\xa9\x91\x05\xcaw|\x81" "\x07#\xef\x8cS\xf2\x61\xda\xe9\xfc\xabX$\xe9\x81\xa4\x35\x8d\xf3_T<\xdf\x65\xce\x99\xd4\xae\xb1g\x84\xaa\x96\x13\xfd\x1c\x98\xf3\x12\\" "\xa1M\x61`\xc3L\x8d\xd2\x82\xa2X\xd5\xb6VH\xf3U\xa8z\x96\xe4\x35\xb4y\xc9\x37L\xd9\x9b;\x92\x17}\xc3\x94|[;\x43\x8a" "\xbe\xad\xd1\xbf\x87\xe9\x89\xebqs\xc4\x1c\x16\x92\xa5\x34\x32\xbf\xa9.\xc0w^\xc1\x07\xdeH\xcc\xf3\xd6\xbe\x93\x0c\xf2<\x9c\xcd\x8d\x08\x64" "\xae&\xde\x39\x44\xca\x31z\x1e\x44\xb4\x12\xa3\xf4\x61Y\xfc\x99\x32\xcf\x0b\x98\xd3\x32V\x1d\x99\x62\x05\xf9\x8d\xfd%\x94WN\x44\xb5\x11\xb3" "\x8d\x82.\xe9\"KH\x05\xe1\x37-\xa6\xdfi\xf2\xc2O\xbd\xf0\x82m\x07u\x63\xf8t\xaf\x18>-&\xdf\x35L\x04\x0bQ\x97\x7f\xc3" "\xd7H\x89l\x04\xb7\x37\x65\xdf\x89\xae\xb3\x99\xe8\xa5\x9a\xe9\x0f\\L\xe9\xc3\xd3\x9c\x80+\x64\x0b\x0c&\x18\x31\xa2l&+q\x35\x31\xeb" "$&jl%\x1c\x19`vg\xc1\x1c\xe2\x39\x62\xdf\x0b\xa3\xd6\x15,\xbct\x17\x0c>v\x31=\x8dS\xdb}I\x89\x17\x82\x8d\xb0o" "\xac\xf6\x11N\x9e\xc9\x17\xa7'\x1d\x02Y\x1b\xfd\xb1\xc0\x84K\xbb)/\x42\xc4L\x9f\x0f=\x39\x45\x61\xfd\x07\xcc\x07\?\xd5\xcc\xb9\xfb\x1a" "\xd2;\xfd:\xf6\x82\x97\xb5\xee\x37\x9b\xbe\xdfp\xc8\x11\xaex\x9b\x9b\?$^Gv\x36\xbe\xb7\x17\xdfN\x7f'\xd4\xe4\xb3\x17\xd3\x13\x07" "K;\x8d\xf1q\xc6\xcb)U,\xcat\xa1'/\xc6\x0bS\x61\xf8\xfa#\xf2\x18\x9c\xd7k\xd3(\x63\x1f\x99\xb1\x05\x35\x43(n\xa1\r" "\x98*\xaf\xc8{\x10\xed\xd3\x19\x62\xc3\t\xd1\xf0\x9e\xfdn\x1a\xe9\xe6\x90\xbf>\x63U&\xb4\xc2g\x16\xa1k\x35\x8b\x32\xc7\xa0\x8d\xbc\x08" "\xb3\xf8\x95(G\x9d\xeb\x92\xdf\xa0\r\x7f\x0bKWN\xad\xd9\x17\x1c\x93\xb7\x03\xd1\xea\x01\xcbzLI\xb1\x84\xe0\xda\xa6\xf6>\xa6\x61;" "\?\xce\xa8\x1e\x41\x0b\xb3\x66\x8c\xcf\x1f\xa2\x97\x8b\xa0\xae.v\x8a\?\x86\xee\x9fR\x92\x8c-\x37U\x88h\xe4J\xe3\xdf#\xab\xce\xe0\xb4" "\"\x44U<\xc3\x62\x03\xa1\r\x16\x1a\xf5\xac\xa8|g\xea\xa1\xef\xbb\xc0\x8b\xf2\xb3\xbf\\\xc4\xadI\xb8\xce\xbf\x87\xe0\x88\xd7\x32\xe6m\xa3" "N\x9c\x61\x8d\xa1py/w\x80\x85p\xaa\x9e\xf5<\xcb\xfb\xa0\xfe\xfd\x9b\xa8u\x33(\x39\x1b\?\x19\x1fJ\x03\xab\xe8\xf7-J\x92\x62" "Oi\xe0\x04WG\x35\x10\x39p\x86y[\xe1\xf9\x83S\xde}\xcc\x9f\x99R\x7f)\xdb%\xcc\xd5\xb6\xb1\x86\x42\x15\x39\xc3$\x80\x10\xbd" "\xc6\x19\xc2\xcf\x0b\xdb\x37N\xdd\xfe\x65\xf1Hu\x07\xda\xfa_\xe1\x1br\x1f\xd6\xac\x18\x93\xe5\x9c\x95\xa6\xaam\xad\x99\x8e\x46T\xd2\xf4\x9b" "%\xc9\x1fJ\xcd\xcc\x92n\xc6V\xff\x0cn\xceJ\xe4Y\xcf\x1f\xe9\xfar/\x7f\x04\xdax\x9cQ\xd7v\x94o\x82\xda\xe5\x17U" "\xab\x36\x82 \x9b\xda\xcb=\xa2\xd2\xec\xeb\xde\xdf\xf6\xaf\x1e\xe5\xa2r\xd7\xad\x9f\x61\xca\xad\x36\x43 \x34\x65\x8d\xbcw\xc6\x07\x37\x88\xe6\x63" "*\xe9\xae\xd9#\x9f\xc1\x9dZx\xf4\xea\x94\x16\xa3\xe7\r\xac\x02W\"\xa7!\"\xb5\x91\xf5\x95\x99\xcb\x03\xb6\xaeT\xf9#\x11\xd3\x1f\x89" "\x9a\x9b\x16\x66uj\x0b\xf6s\x16\xea\x65\x64#\xaaj\xce\xc1\x39\xff\x64\x43\xd8\xc2\xa5\xbd\x33\x0b\xecV\xae|\"\?\x9d\xdb\xce\x0c\xd3\xb1" "\xaa\xbe\x9d!\x30\xb4(\x94\xa2J\x36\xb9\xcd\xbc-\xc4\xf7\xd3x\xd5NO\xc3\xc7X\x0b\xa8\xa9\xd1\x98\xef\xc3\x1f\xd8rX\x44\xa7+\x30" "O}~\x0f\xa2O\xb2\x88n\xae\x9dX!\xef{\xd3\x19\xc3\xbeuP\xe6\xbd\x65\x66r\xf9\xb4\xf7\x87m\xb6\x18\xbe<(\xeb\x18\x9b\x05" "\xc0\x12\x65\xb3Q\xc6\xa8|\x96\xd8\xc4\x45\x8d\x1b\x34\x1b\xc3\xd7\xcc\xc4\xcaHS\x08\x15R[\xb0\xe8Y\xb0\r\xbc\x88\x1b\xf7\x9aPL\\" "*\xdeK<\xb0v\xc0\x02\x1b\xcc\n/\x91\xf4\xc9=\x35\x1f]Zx\xd6\xfd\xee~:P\xc3gp\x84\x33\x32\x03-\xe0\x04!lZ" "!\xb4\xe6\x98\xf3\x9ay\x41\x19\x9d\x65\xd2\x87\xf7\xa0\xde\xef\x31\x9d\xb7\xa7\x92\xbf\x05\x9d\xe9\xcd\x95\x7fW-\xffKX\xfe\xa6\xea|\xf7s" "j\x32i\xd6\x92\x86Q\xab\x15\x7f\xfd\xa4\x07g\xc9\xf5\t\xbcw\xe5\xf0\xdcY\x04Qi+w\xfd]U\xfa:\x62\x04\x64\x8d\xf5j\xb5" "\x35\xfb\xcak\xf6\x95\xd7\x1c\x92[\x33\x83\xae\xd9\x1f^G'\?\xac\xf5\xd7\x1c\x9a\xa3\x63\x99\x31\xb8\xa0\xa9\x1a\x83\xe7\x63\xbf\x1fl\x87!" "\x44Oh\x1d]\xf4@T\x99k\xf8\xff\x19\x7f\x97\xd2\t\xcdY\xc4\xe5s\?&w\xef\xa9,J\xf7\xcc\xb1x\x30Poo\xbf\xd3\x83" "\xbd\x0f\x87\xc5\x9a\xa2\x1e\xc7N]Vp\x31\x80\xb2\x65\xb0\xc6\xe8\xe0\x9c\x9d\x1fS\xcd\x9e\x9b|\x7f\xd4\x64\x0b\xd5L\xf7\x8d\x87\xb2\xe9\r" "\x33\xb1\x87\x8f\x98\xe8Y\xaf\xe1Zo\x0c\xb7\x8e\x01S!\?\x32\x9a\x81\x18\xbaVj\x39\x8a|\xaf*\xca\x9c'\xf5\xbf\xba\r\x84\x7fS" "\x8e\xf9\xef\x8a\xb9zp\x93\x8d{\x9a\xd2\xf4J&\xf7\xfb\x07J\x15\x9d\x0b\xbb)\xc7\xf5\xe6\xfe\xe1\xf2\x99\xa4\xd3\x7f|T:\xdbh\xf0" "\xf3\x80\x86\xf4\x42'\xd2\x0f\xb4\x0f\xa2P\xc5\xfa\xb1\xff\xfci)\x8e\xfe\xfd\xddx\xf0\x1c\x12\x17\x07\xde;\xf1\xdd\xc5\xfe\x81\x8f\xf5\xff\xd7" "\x81\xff\xb8\x9a\xc9\x82\xa3\x9a<\x90\x1c\xdf%\xeb\xd5\xfe\x81\x87\"\x82%\xec\x0e\\\xed\xab\x8f\xab\x7f\xcf\x92\x96W\xf2v!jv\x38\xd6" "\x19\xb3\x19\xea\x07\x86\x9d\xb8\xf1\x1d\x0e|,\x12\x0b \x04\x35/\xbb\xb9w\xad\xf0\xca\x86Y\x0c\x97\xa3-\xc8\\y\xff\x63un\x8e\x0c" "\x65\xfbs\xc0\x44)\xad\x66\xda\xfc\xeb\xa6\x94<\x1c\x02^G\xef\x87\xce\xf0\x81\x1f\xbe\xafS^\x11\x86\xc5\xd7\x1c\xdfZs\xa0Y\xb9\xeb" "\x1b\xa9J\x16%\xb8\x85\xa9:v\xb2\xc2[k\x98+\x16\x45^\x08\xd9\xeb\x18\n\xa8\xf8\x00\xbf\x1b\xdbv\xb6\xc2\xe3\xcc\xef\xf4*z\xac" "@\x65\x90M\x31\xf5o\x94\xd7\x35.\x97\xa0\xd0\x1c[\xc3\xbbIxu\xef\xe4\xb8\x8b\x99\xb6\x46\xdeL\x7f/\xe3\xe6\x04\xc4`\x84p\xed" "L\x86\x1d\xf6*\xd6pM\x10\xa2\xbd\xb8\xe6\xd0\xc4:\x1e\x9c\x91\xb8ml\xc8,\x34\xcf@%\x7f}\xc2\x8b\x46\xbb\x7f\x8d-X\x8cZ" "\xe3\xaf\x0f]\xc9\xcb\xb8}\x45i\x10\xff\xe0\xba\xe1\xc0\x64L\nGnz\xaa\x62\x0b\x63\xe1\xf1\x9d\xc5\xd4\x9bQ\r\x9c\xbb\xc1US|" "y\x92\?\x63\xf6i\xd6I\xee$\xf9\xcb\xaf\x9d\xb6\x9c\xd2\xe0\x41\x84jU(\x15\x30\xb9*\xc4h\xc9\x1ak}\x84\x18\xcdX\xc3\xef\xd9" "\xf8;\xad#\xf8\x87\xa9\xb8\xdd\xc2\x04\xb9(\xcc*)\xe3\xab\x62\xd2\\I\xdb\x33\xf9\xcc\xc7\xdf\xbc\xb1\xfe\xdc\xe9I(\x66\xb8\xc7\xf9\x97" "S\xa7\xf8\x0bW{\xca\xd3P\x32|Z\xe2\x99\x97\x17\x64\x1f\x9b\xa2\x8a\xb9\xe2/\x61\x32M\x19\xf5pW\xe9\x11j>\x84\x97\x16\x9eW" "\xc9\x8es\xef\xa4P~RQ\xfe<\xe0\xf2%l\x16\x9d:\xda\xf8\xfe\xeeJ}N\xce\xf1\x44\xd3\xce\x01\x89\x0b\x46\xa8Q\xa3\x05\xb2\xc5" "\x35s\xe0\x42x\xeb\xdc\xbf\x10S\xe1\x42\x46\xb7\x1a\xe0\xf2\xcb\xd5\xfb\xf6\tI\xc6Q\x0f!\x32\x30\x07\x1d\xd6\x1ctX\xa7+<\x9ft" "\x8d\x8c\xcd\x06\xfb\x1a\x0bZ\x95-\x12\xf5\x13\xbc\xf8\x94(#\x38\xfa\xb1\x86\x0b\xac\x12\x37\xcc\xb6\xce\x1a\xdeU\x46y\x42\xdb\xea\x85\xd6u" "\x98\xc7^oo\xaa\xce\xb4\x80\xd4\xdb\xde\x0e\xfc\xa1s\x44\x62\xedM\x06\x61\x32\xb8\xa1y\xeb\xf4\xd7\xd9\xf3\xac\xba\x64\x97\x8b\xe1\x37\xfe\xe2" ".\xb6\xbe\x64T\xcc\xd9X\xae\x1d\x11\xbbj\x1b\xb6\xb1\x37\xbf\x8b\xae\xd3\n\xa6\x03\xa8\xe5\xa1\x33\xca\x31\xd8\x82(L\rn\xa2\xcc\xb5S" "\xfe\xe7\x10\xe3\x46\x83\x34u\xaf\xd9\x83\xdd\xc0\xef\xd5\xc8N\x86\x9a\x1c\x9cSs\xdb|\x80\x89y\xfbMt^r\x46/\x35\x0e\xealX" "\x9bl\x10\x65Oh\xab\xa1\x85\xb6\xe1\xae\xd0\xfcYj\x8c\xcf!\xc4l\xe3\x46j{\x8e\?l\x38\xe8\xbe\x81\xef\xa9\x10\xb3\x8d\xcaxY" "\x0b'@\x15\xa0\x94\xd2\x9f\xf3>\x9b\xc8\xc2\x8f\x1b\xa5#\r\xdfRS\xd2\xf2\x83\x33\x19\xd4I+\x98\xd2\x16\x1a<\x87\x9b\x93\x03\xc3\xab" "p\x33\xa2\x42\x7fm\xa7l\xd0<\xef\xc7\xe2\x83\x05\x9c\x84\xa0\xea\xe3m\x63\x81Hs\x38\xd0\x9e\xb3\xdb\xb3S\xe8y\x61\x86\xecw^M" "\x37\xb7\xf2#\x1c.\xe2\xa7\x10\x32\xd3T*\r\x8a\xdd\xe9t\x85\x65#\xdc\x96\xc6\xa6\xb3\xd5m\xf2X\x8f\x33 \x9aU\x1b\xac\xd4U\x36" "\x9d\xba\xc1*\x33\x8c\x9e\x62w\x65\xacZ\x94\xb6\x41\xc1\xda\xd5\xbf\x9fI\xdaw,\xfe\x36\xf1\x1d\xae\xcf\x33\x93\x90\xcdV\x33\xe7\x05\xcer" "\x41\x31\x9e\x0e\xd4\x62\xe1yM\xd5\xea\x82\x35\x98\xaa\xdd(\x94\xa9\xdc\x37\x9b@\xa6\xf2>\xc6l\xca\x96\x9d\xc2\x94\x0cxy\"\x99\x16\xb1" "\xce\xfd\x98<\x94\xfd\xcf{\xa4\x0e(\x0b\xf2\x0f\x33\xb4\xbeMu\xc3m\xed\x65jU\x83\xe7=\xd3\xb3\x8b\xaa\xe1\xe3/\x06\x97\xa0v\xf7" "\xc2l\x0b\x93}O*\x0e\x89\x99\x9aN\x11\x0c\x1cj\x9e\x65\xb3\xc7\x94m\x30\xa0\x0byl\x41,\x8e\xad\x1e\xf6~k\x37@\xb0S{" "\x37\xc7\x03\xbb<\x1c\x8eInH\x8f\xfe\xf9\xdcj\xb8S/\xc1<\xce\x44'_\x41\xe5\xae\xd8\x9f\x34\xb5{\rT\x9d\x65\xa3\xd1r/" "\xc5v\xe3\x0e\xa6$\xf7\xfd\xfb\xe7z\xe3w~\xbaS>(ij/\xd7\x99\xf2\xb7\x41\x95\x64\xd1\\\x7f_\x61t\xc0\xd4\xb8\x16\x1d\x34" "\x83\x9a,\x38\xd4\n\xb5\x46\xd0iSI~\x14L\xc9'\x9b\xaf=\xc5Z\xcdT\x18\x07\x35\x65\xe3/{\x39\xc1z\xb6\xbb\x0fO\xee\xd3" "I\x38_\x32\xff\xe0\x0c\xb1\xa9\x45\t\x1b\xdc\xee\xa9\xfd\x1fZ\xdc\xa5\xc3\xf0N$\xf2\x88\x7f\x42\x32\xa7\xb9[\x0e\x9e\x9bzy\x8cN\x42" "\xd2\xc0w\x13\xe6\xb8\xb0\xf7l\xc2v\x8dP\?>\xf7njS\xdeK\x97t\xb3\x42\x80GW\xd8\xae\xdb\xd4\xf6p\xb3\xbd\x0eg\xf0\x32" "VM\xdf\xc7\x1b\xeaj\"g\x0f\xaau\x12\xb5\x42\xf6V'\xfcV\xc8Y\x92\"\xd8\xb6Q\x14:\x03\xca\xbd\"\x8d\xa3P\x9bx\x9aI" "\n\xef\xc9\x10\xaf\x90\x97\xafl\xb0m\xfc\x46\x85\x9eW\xd9\xefW\xfeN\x17\x1c\xee\x35\x35/\xc5\xe7w\xae\xf6>.'\xc6&\xa2\xa6\xe4" "\xa7\xb7\xcdrP\xf7\x35\xec\x0c(jx\x10\xe5*\x9c\x8e\x93\x96\xc1\xabS\x8a\n\x84\xfeP\x85\x37\t\x8b\x98\x95\xc8\xa0p\xdd\x17\xbe\x90" "\xc3\x81\x17\x30\x9e\xc9\x10\xc0\xd1\xa8\xef\x39kM\xb4$.\xa5sQ'\xaf\xc9\x05\x38\xeb\x90\xcf\xa0\x35\x0e\x8c{\x87P\xfd\x9b\x19\xad\xde" "\xd1W\x34\xb5g\xa6\xa3\x06\xcd\n\xd9%\xe7\xe0\xb2\xe8\xd4\x1dG\xcd\xcf\xf9\x92^\xf0\x46i\x42\xa0\xe6\x81z\xd9\xc4\xd6\xee\x32\x15\xff\xbc" "\xc7\xe6\"i*\xf9;\x8a\xe6\x7fL\x61\xea\x44h.\xe0\xc2\xd3\x8aS\xe7\x7f~\xde\xa1\x8a\xb8\xdb\xa8\x84\xbb\xc3\x94\x81\xb2\x04\xb6\x06\xe4" "\n\xb4!s\xa3\x64[\x84\x66T\xd5#\xc7N\xbd\x93)\xcfl\xad}\xe1\x1d\xee\x33z@\x9a\x61\xa2T\x38\xcc\x90\xb7\xe4_gt\xae" "\xe1\x8cQ\x15\xd8\x81\xe4y\xbd]\xf0\x12\xad\x1e\x30Js.Z\xf2\xc2\xde\xf9\x63\xcb\?\xce\xf8\xe8\r\xeb\x04M%\xc5\?\xae<\x19\x85" "Q\xf7<-\x9f\x41\xfd\xc1\xad\xc7\x39$X\x9c\?p\xee=\x9e\xd8\xc2\xa7\x1buh\xd0:\xba\xa2\x9ax\xa4\x31o\x39\x1et\xc9'm" "\xf1\x8fq>\x94\x8c\x42\xf3l\x10\xbe \xd9\xe0\xcc,\xb4\x1e\x8er\x1a\xdd\x9f\x98\x99\xf2R\xd3\x03\\$\xb2\xbdp\x88\xe7\x83\x96\xbd\xd0" "\x86\xda\x85\x9b\x99\x11\x83\xd8\xc2\x63<\?\x8ct\t\xaf\xdb\xce\xb8\xc8h\x33\x97\x39\x34/\x84\x36\xefi\xc4\x0e\x8fjn\x8c\xa8\n\x94\x9f" "`\x05\x7f\x8f\xc6\xf8\t\xf4\x32\x8d\xe8\x65\x8a\xb9\xb9w\xa6\xaf\x17\x98\x89\xbd\xcc!r\x8a\x11\x9bX\xc0\x1c\x96\xd0l\x35\x15_\xb1'%" "\xca\xca\x32\xdf\x32\xc4\x88\xf6\xbc:+\xe0<\x98\x91\x37\x46\xb3I\xa8\x9a.s~\x0f\xdb\x87g\xa7T\x0c\xe8\xad\x8bz\xb5$\x39\xc5\xc0" "\xc6\xe5\xd9\xaf\xad\x98\x13\xe2\xf5<\xfb]\x36$+\x44\xa3\x0e\xd5+\x88\x17\xff\x0cn>\x42k\xee\n\xcd\xbdPh\x03\xe0\x46\xb4\xe6\xc5" "\xc4;v\x86\xaa\x46h\x43y\x42\xbc[g|{\xce\xa2\xbb\x39\x96\xd2\x8a\x39\xc4\x35\x45\xa3,\x39s\xa2\x98\x35\x13\xbdN\x31-j\xa4" "\xd0j\x36\xa1\rt\xec\x9dh\xdd@\x8fN\xcc\xcd\xda\xa9\x03w\x0b\x1c\x65)s\xc6W\xe0\x8c\xaf\x80\x32\xb9k\x61\xb4]\x94y@(" "q\?q\xf1\x01\xbc\xd2\xf0\xd6\x36\x10%\x07\xcc\xb1J\x88\x17\xbe\x82\xb5Q\x46\x1d\x98\x90\x0f\xf6\x7fp\xe0\xb0\xefLu,\xad\n\x85\xacU\x41S\xdc\x18" "\x36;\x36\xc5\\\xa6&\x16\xdb\x8ay~\x8b\x16\xbf\x98\xe6Yj\x0cMoS|\xda\x15\xc4\xb4\x15\xba\x1e,\xe4\xee\xb0\xae\x43\x14\n\xa1" "J<\xae\x38\xe3\xf1\xc4o\r\x1d.!\xca\x9c\n\xda\xa7\x42k^\x1a\x93\x8f\xa1\x9b\x9e~j\x9a\xab\x87\x99X\xd4\x06\x13\xd5WH\x39" "\x61|\xfa\x16\x7fL]\x31\x07W\xe0\xecm\x8c\x0f\xbb\xb1\xf9[\x42\xd9\xef\xc0\xa3\x19\x07\xde\xc2'\x35w\xda\xaa[Q\x7f\xae\xe3\xc2(" "\xe6\xa3\x15%%!\xbc\x62\xc4J\xcd.\xf9\n\xfaq\xeb\xb6\xc5" "\xf7\xf6(\x9aQ\xe6\x87\\\x38\x99\xc7\xd4\xe4\x1b\xd1\xc4\xb0\x84\x30\xdfq\xa2\xf1\x0es\xd8u\x33y\xa9\xb8\xc9\x34m\xb2\xacn\xb2vm" "\xb2vUJ\x0b\xc2\xaf\n\x1du\x1d\x96\x39\x07\xfd\"j'N\xb6\xc6\x9a\xe8Q\t-`\xb4\xb2\x04\xde\x1f\x39\xa5\xe5\xcaJ\xba\x89\xe1" "\x02\x61\x97\x97\x61\x01\x8d\x84\x16\xc7Xh\x83n\x97\x0c\xa8\x61\x0c\xdb\xe6\xaazv\xda\xcc\xdf\x87\xab\xd0\x11\x87\x42\x1di&\xca\"\x35\x93" "\xd6\x34$\xc2\xf0\x94l\x90\xbc=O\xba\x11\x13g\xb4t\x86\x14\x10\xd3\xd3z\xb4\xe4{\xd9\x64\xd3\xa1\xc9\xa6\x83\x32\xc9\xfd\xb8)\x9f\xfa" "]\x32!\xd1Jj\x46\x8b\x1f\xa7&\xfb\x8a\xd7\xb5\xe6\xc3X\xdb\xdb\xd4\x84\x87\x8f\xb0\x98s\xfa\r\xc5\x35$\t\xc6\xd0\x84\x8d\xfbh:" "\xf5\xf3\xc3\xe9\x45h\xa3gJ\xfe\xd0M\xc7\x19\x9c`\x44u\xf8-\x1bJ\x17\x9a\xb3\x86\x10\xc5}\x93\xc5}\x33\x9c{\x82w)\x61>" "\xc4\xcc\x8a\xf0\xec=:\xcf\xc2\x0f\x41T\x19y\x05]\x63\xa1\xadv\x35\xfa\x65\xb1\xe9\xd9\x94N\xad\xd3\x1f\x81\xf6s\x17H\xe7\xe4\ty" "\x45r\xb3\xbf\x89\xba\x1e\xbd\x9e\xdd\x33\x31+\xe0\xca\x13\x05J~'Y\xf0\xc3=$p\xf2\x8e;\xc3\xc2U\xa3\?`\x31\xd9\xfcj\xb2" "\xdck\"\x88\x83\xd1\?\x05\xd3\x1f\xbb*\x37\x8f>\x9c\x61\x90\x10\xaa\x98\t\xa6\x8d\xdf\xf9\xbb\xa6\x07\x06\xbb\x8f\xa1{\x66&*m\x33\xad" "\xb2\x0e\xd7s\xf4\xc1v\x96\x99\xf5\x19&\x0e\xa0\xf8\x8c\xc4Lj_l\xd4\x99\xe2\x63P\xb3\x35\xc5\xca\x32S\xe9\xf1Y\xdc\x1c\xb9\xd2\x11" "\x0f\xbe%\xe9\x19\x12\x07\x63\x11\x42t\x9a\x94\xe1\xf4\xc3\x41\xb8\xa8\xd1\x87sw\x08\xf9\x84\xad\xe7&\xe6\x33\x84<\x01\x86V\x84W\xb8\xe7" "\xed-N\xb0]\xdb\t[\xf0mw\?i!\xba\x1e-\xd6\x91\xc2\x15\x88Z\xb6\xc5z\xb1\xc5^\\\x0b\xf3(\x97\x37,\x96o\xd8\xf9" "\xb8\x89\x8a\x1b\x10\x45\xd7\r\x1bm\x37Lp\xe1\xa3\x33\x1a\xe7\xd3s\xaa\xe9ut~\xcc\x06\x8a*\xe9\x9a&\xa5s([Nty\xc3" "\xd6\xd7\r\"\x0f\tQ\xae\xdf$]K\x89\x9b\x34\x87\xcf\x63\xc0J\x88\xf2\xe3\x16+k/o\x31\xadh\x84\x8f\xfa%\xa3\xb4\x18u\xf3" "_\x34\x1bU\xed} \x8c\xb5^\xde&\xb6\xcd\x83\x31~_\xb1\t\xa8\xcaMl.#\x44\x0f\xf1\x36\xbdx\x03\xf9wl\xcdu\xf9\xa0" "S\x38\x8b\"\x9b\xbf\x0f\xd6\x36}\xa0\x39wj\xd3\x33\x93\x83\x32\x9f\x17\x63\x94k\xc1\xd9L\x14Z\x98\x0f\xb6\xa7\xe5\xee\x9b\xa6\xb0\x61\xb9" "\xa8\xcd\x8d\x91#/\xca\xbd\xcf\x42\xf9g\xa3\x42VL\?'\xe6\xd6\x85H\xa2\xf0\xa9\xd8\x42\xec\x18q\xdd\x98\x1b\xb4\x03\xe9\xc1\xd9\x7f\x1c" "\x43\xe7\xed\x81\t\xf8`#\xd0\xe1\xa7\xe1\xe0\x64\xd4\xff\x0bK\xa8<\x8f^\x8d@t\xd2\x94|\xa2\x0fpI\x17\xda\xe0\xa9\x9c\xce\"%" "\xecN\x8bH\x1f\x42s\x01\x14\xda\xdc\xe1\xe5\x03v\x11\xbd|\x44\xdc\n!\x9a\x16\x8f\xec\x04=\x62\xf2\x42h{k\x18\xb7O\x03\x9a\xd7" " \x92\xe1\x11.\x44\x46u\xd6\x31\xe7\x18U_\xce\x08\xb9TMiGI\xda\xba\xc2\x90\xac\x9a\x0b\x10\x9d\xa3G\xac]\x10\x9a\x33\x8a\xf0" "\xec\x15,\xf2s%\xfe`\x9b\x9f\xef\xbe;\xe3\xe1\t\x36\xc3\x11\xf5\xc4_\x41\xa9\xf7\x88\xd9\x34\xa1\xf9\xe0(\xf9\x39\x8cI=\xb2h}" "\xc4\xd2h#K\x84G\xdd\x8d\xa1\xd3\x61\x39\xf2\xc8\xca\xf5\x11\x8b\xfa\x8c|I\x1e\x99\x45\x1e\x31\xc7o\x84[\x82\x98\x9b\x63g\xfa\xf2\xb8" "m\xd8\xfb\xf3\x18\xe7J$\x35\x32\xc2#V\x91\x18\xd9\x46y\x44\xf8\x31\xa1\xfc\x43\t\xf5\xc8\xcaI\xe9O\x43+)\x94\xed\x66.Kn" "r\x9c\xf3\x11\x61\xab\x85\xb6\xa2\x43\x89K\xc7\x12\xbc\xbd\xdf\x1e\x62i\xbe\x30\xb3I\x1f\xbb" "\x30\xcbxp\x08\x90\xa5\xc4\x03\xc4 \xb3\xd0\xdc_\x85\x36)\xaf\xbc\x05'x^p\xda\xbf|\xdc\x1eL\xc1\x0cN\xc9r<<\x1b\x61" "\xfc\x9d\x8b\xff\xd8\xaf>\xeb\xc8\x41\xf1\xf4w\xd3\x80\xc2\xd3T\xb2\x1az\x46\\G\xa3\xc6\x1d\xcbh\x43\x37\x04Y\x92\xc3\xf9\x1b\x10-\xe3" "\xe7\xa8x\r\x62\\\xf5\x39\xfa\x99l;\x9b\xb8\xdf\x89\xef+\xf1m#\xcc\xe6]J\xab\xd3\xd2\xfa\x39\xc9\x9c\x39\x93\xbb\xcf\xe4\xf5\x0e\xea" "\xc6\xb2\xf7\x33\x36\xde\x11\xbe\xbf\x46\x9b\xbf[\x94M;\x15\xd6\xdc^>o\x1f\x8b{w\x82\x38\xc0\x97\xdc\xe1\xc8\x18\x17\x9f\xe0\xef\x63*" "\xc9\xbd\xef\xd4\xb5\xf3wV\xe6P\xcf\x9b\x0e\xb4KY\x87v\xd7\xdb\xef\x62\x0cZt\xd0\xcb\x37\xccG\tK\r)\xc7\xe1Z\x65J\xd7" "\n\x62\xac\xd9\x94\xf4\xf1\xfdo\xe5\x91\x93i\xfb\x16Ur$.\x12>\xb2\xca\xbe\\\x1e\x1b\x8eo\xd1\xd3)\xf8\xd2N\xf2\x33\xcc\x41\x88" "\x1a\x97\xe2L\x11\x0b\xa6.\xdf\xb0\x44L\x88\x41\xb4\xb7\xd8\x96Z\x1b\xfd\x64\xd8\xe4Ux\xb6\x02\x1b\xdfz\x12sZ\x17\x65+\xa3.\xdf" "\x92\xe3;\x30\xf7\x0e\x9e\xe1\x04\x1c\x64{\xc3\"!\xe1\xd3\ry\x0b\x62\x38\xf9\x8d\x63\xc6J\xad\xfd'\xdd\xa0P\xbc\xa8\x19\x1fv\xd3\xc9" "\xdf\xa0\x32\xb9\x88wJ\x35[\xee\xa9\xa4w\xedJ\xaei\xefo\xec\xcf\xbdY\x38\x86\x36\x96\x80\x88*<\xc9%!\x46\x8d\xa8\x33\xa4}" "\xda\xac\x81h\x93\xbf!(\xe2%\xb7u\x32J\x39\xffk\xfbO\x9a\x8aOg\xe9\xe8O|\x96\x65k\xfe-\x1d\?\x38\xad\x06\x44j\xc8" "\xfd\xe9\x45=\xfe\r\xaa\xbb\xdcS\xdb\xec\xf9N\xcd\xc1\xaf{p\x8dt\xdb\x32\xbd\xf8\xb6*\xcdM\xfdX\xfe%\xab\xebp\x38\x8b\x0b\xdf" ">#\xdbm\xdf\x96\xba\xd9\xf9\xfe\xad\x8f\xd5'M\xfe\x9f\x9fQ\x65\xc9s\xbe\x03\x63\xf3\xc2\xbe\x0e&*\x8aq\xd8]\xcdLxI\x99" "\x99\x1e\xb7\xe1)\n\xb5\xc9\x62u\x9c\xaaWpv\xe3\xc4:\x11\x98\xa3jPh:\n\x37\xe0\xe2I\xb7n\x46\xd9hj\xbe\xd9S\xd2" "@\xdcS:\n\xeb\n\xe5='\xf4\x8d\xbf\x9b\x0e\x02\xae\x9a\x62\xe9\xa3\x66\xb2\xaa`\x11\xb1(t\x08\xc7\xd1\xc1\x39\xb9t\x46\xb9\x93\xf8" "\xb6\xec\n\xab\x90\xc5\xccL\xa3\xcd\x15{L\x63\xd6\xdb\x63\xd6\xdb\xe3\xe8\xfc\xd0\xe9\x37$\x66\x34\x9b\xd0<\x06Q\x8b\x0b{`\x85\x44\x33" "y\x1c\xdd\xdd\x81|\x12\x9eV\xd1SV\xc7\x45gxjX\x91o\xf4\xa7\xa7\xe6\xee\xa6\x45\xe9\n\xc0\x87JPL\x02\x35++\x9d\xfc" "\x46\x03\xc1\x0e\x8c\xe4\x16s\xe9p\x8d\x18\x9f\x38\xc6\x34\x15\x33.\xbepP\xc4T\xe3\x1bQ\x04\xa1z\x1d\xac\x05\x32\x95\x9c\xe6\xd4]\x64" "\xd8\x61\xf7\xd4\x8e\xd5\xbe\xa4.\x97G\x95\x0c\x1b\xec\xfb\xf1\x30\xfbO\xaePo\xb9\xe2\x33R\xb5\n\x37\x91\x0e\x1ft\xa1\x9b\xe4\x8a\xdd\x9f" "u\x06u\xd3\t*\\\x9a\xdf\xdd\xf3.\x81\x9e\xb5:\x08\xf7\xf5\xbc\xff\x90\x45\r\xfd\x16\x9f\xa5\xd3\xc7\x9e\x9e\xa9\xfd[|NN\xfb\xbb" "\x9b\xa3\n'\x93\x32\xb7\xc1_\x19\xf3N\xfd\xf1\xcf\xf9\x11\?\xfd\xfa \xb9{\xf2\x37&Z\x37\xfc\xc5\x82O\xc2\xe5\x98M\xa2\x31\x16\xdc" "\x1a\x7f\x17\xdc\x14\x14jy\x9f\xae\xc3g\x38\xe2\x64\x66\xb1\x80\xb5\x92P\xdd\?~\xbd\xaa\xe6\x17{\xa6\xee+\x89\x16\xaf\x1eP\x87&\xe6" "[Ug\xf5\xb8x\x15T\xf1\x89\xbd'S\xedp\xb2x\xf8\x15\xcc\xaf\x43\x37\xf7r\x80*>@\x98\xc9\xa2\xed\n~Z\x66\xee=\x45" "(\xac<\x83\xbaX\xfb\xf3\x0e*\x32\xdf\x85\xbd\x03\xeaLU|JG'Q\xeeor\x1f\xae\x64\xdb\x99\xc1\xb4\xb8^\xc6\x38\x7f\x80\xc5" "\x16P\xed\x39\x36\x89\x11\xc5\xd2,\xae\x0f\xd2\xe1\x9c\xfd\xe8\x31k\xc0\xb1\xae\xa3\xcb|\x63y\x94(\x8cH\x8f\xe5\t\x46\x43\x64\\\xc9'" "\xe0\x1b\xc9,\xe4\xa5'\x1c\xca\x85\xb6M\xa7\xd0\xc2W\x1b\xe5\xa1\x63\x91\x84(\xa6\x9b\x66\xab]\xfeT\xc5\x17X\xcd\x0b\x1f\xd4P\x15|" "L\xf6\xd4\?\x7f\xbe\xf3rR\xd4\xf6`\x91\xae\xf1\x38\x38\x45\x39VWW\xb9]\x8c\x07\x8d\x39\x94\xab\xf4*\x02\x8e\x1c\x46/w<\x85" "\x85\xe1\xba\xee\x0f\xe3\xd3\xbf\x88\xdd\r\x35\x1d\xb9\x99\x64^tm\x37\xb3\x8d\x1e\xf8G\xc1\x19\x42\xcc\x17\x14\xc4\xc9\xfb\xa7\xae\xfd\x38\xc2\x63" "\xe1H\xd5\x98\r\xe0\xb1\x34x\xa5\xbe\xd9~ \x1b\xb1\xcb\x37\x86\x63\x85\x10U\xf8\x98]\xbf\x31\xf6\x8c\x11\x62\x98\x64,\t\x00\x66K\xce" "\xbdt\x16\xa5\x95\xfa}\xd6\x15\"I\xc2\x44\xc7\xc7\xcc\x7f\x12Y\x0e\xf8Y\xd9\x98\x1es\x30\x66\x8c\x05\xae\xc2\x0e^\x13\xac\xbf\x15.\xfe" "\xe8\x46^\xcd\xd5\x9e\x42\\uU\x15\xb9\x99\xdd\xdf*\xbb\xa7\xf3\xc1&\xa9\xf0\x85%\x9d\x98\xdc\xa5\xf0\xf2\x03\xcbY\x84\xa8\x99>\xb0\x96" "\xca\xc8V\xde\x07v\x62\x12\xda\xb2\x11\x61\xf7%|\xdb\xd6`\x08\xc7\xa5p\xe8\xfd}\xdb\xce\xc2\x61X\x14&\xa3\?\xd8\xdd\x13Z\xda|" "\xb0\xa8Rnk\x8f\x88\xaa(\xca\xfc\xde\x85\xf6\x87\xf0\x99g\xcbt\x1f\xea\xc7=\x1c\xc3'V\x94\xadN\x12\xa2{\xf4\x91\xfc\x9d!\xa2" "\xe9\xe5\x87_J:\xca\x39\xa3\x42\x95S\?;\x95\xac^\xfd\xc0\x9e\xe9w\x8dp!\x46\xbf<\xb8\r_~l\xb3\x15]\x32\xc6\x8b\xa5" "\xba\xfbt\x15\xe7Z\xe1o\xd5@vN\xd5\xdcV\x17\x08\x0b\xad\nO\x04\x91$\x8d\x61/\"Q\xe8G+\x93\xfb\xba\x9b~\x85\xdb\xd7" "^t\xfa\xb4\xfd{\x11Ty\x1a\xd4\xf2\x82\x8fk\xc2\xa6\x95\x32j\x8f\x39\x7f\x36\x61;j\x82H#\xcaor\x05\xa2\x97\xac\xd4\xa5G" "\xe6\x46h**\xe7\xd9\x8dT\xb5sW\x80\xd2\xe6\x92\xb4\xfbu\xaa#\x34\x9a\xec/v,\xfe\x8f\xe6\x94\xfe%}\x39\x62\xfd\xa5*\xac" "\xe5\x10\x65k\xa7\x8d\xbc\xe3IX\x97t\xc9\x10\x44\x42\xf3W\x36\xee&P\xb9\xef\xbcQ\xdf;\xbct\x13\xe6\xf1\t[_\x13,\x84S" ">\x81\x16\x88U\x88\x61\xc8\t\xe7H&\xd1\r\?\x8f*}\x82=\x7f\x85L\x61\xf6\xb1\x84m\xe7\xd6\xa2\xb2\xab\xd9\x07\x9f\xf8\x13\x16\xf3" "\x45\x38\xa0\xc6\xe4\xf9\x84#\xab\x13\x04\xcfUN\x9c\xc9\x64\xc4\x9a\x63\x82\xe0\xc7\x42\xb4\x08&X\xec\x64\x8c\xbauN.\xedTt\xb6\xe0" "\x34\xa9\x1e\x63\x05\x36\x89\xe1\xa0\x30\x41\x90>\xe1\x39.)\xae\xdc\x82\x35\xfe\x9d)\x1d[kwO\xa9\xd7\x1eSJ\xfe\x39u\x96\x7f\x16" "\xd4vU\xc6\n{Q\xb6\x06J\x88JQ\xf8\xa2\x33\xf0u\xfe\x1eo\x8d\x45\xfb\x84\x13\"\x13\x84\x83\x13vp\xcb\x1cl\x99\xb0\xf1\x30" "\xe1\xdc\xf6$\x9e\x1c\x82_\x81\x1c\x43\x31sPv\x93\xc3'\x13\x0e\xabL\xb0y\x9e\x10\x95\xe7\x04\xeb>\x84\x16\xdf\x45\x38\xe2\xe7\x96\xc8" "$\xe9\x11^\x9c\xf4\xd4\xc7\xfa'X\xe9\xa0|t\xee\x06\xc9'\xd8\xa8U\xc8\xb7\x45\x18\xad\x33l\xcbO\xd2\xa7\xbb\xa8w\x88]t\x45" "\x61$\x7f\x92\xce\xdf\x92\x62\x16\x1e\xd0\xa2\x30\x02<\xe1\xe0\xb4\xfb\x04L\xe8\xe6\xa4\xf4\xc7\xc2\xca\x42\x07\x46\x9c\xc9K\x1fq\x7f\xa1\xac\xfa" "\xf9\xf7\x98\xbfVt!T\x06\x87OQOo \x9f\xa3\x30\xcaU\xe1\x14n*n\x9f\xf2\xc7~\xd8^\xfe\x91>\x96\x91M\xad\x1f\x8e" "\x10\xfe\xe8\x8a\xfc\xd3\xb7\x08\xa5\xe2\x8f\xfc\x03\x91\x33~\xe8\x8b\xf6\xc3\xd6\xc5\x0fG\xb8~\x10 Q\xd8\x39w\xfe\xceO\xe8\xc0\xa8*\xea" "\xdc\xa6\x93GW\x61\x7fjQ\x8f\x33\xd0\xdc\xd3\x85\x13\xcb\x99\?\xdb\xa6\xe6\xb6\xba-\xdb\xce\xdf\xa3u\x05\x35\x9a\xc1K\x15j\xbc\xc2\xa8" "\x87\xaa\n\xd9\x96\x62\x04{\xda\xa8\x1a\x80\x36\x61\xa7|v\x86\xc6\x33\x94\x97I\xa2\xac\xc4\x35\x46\x0f=\x8c\xb1\x9a\x42\x14Q\x98\xad)\xd6" "\xae\xd4m-\xb9\xf4M:\xfc\xd2\xe2)]\xad\x30\xb6\xa8\xea\xdb\x89\t\x61\x98\xdd\x17\x44\x44\xa0\x9a\x05\xd3\xc2\x0b\x99\x89r\x18o\x08\x0e" "\xdc/Q\x9a@\xbdg\x91\xdfM%\x1fk\x8c\xc5\xf8\xa0\xa9\x31\x38\xa4\x99\x42\x1bJ\xccu\x1f\xdc\x0cuU\xe3\xe1\xf1\xbe\xb2\xf2\xb1\x9e" "\xc5\x64\xba\x11k=`\xdaT\x8d\x99I\xab\n\xd3\xa2\t*\xef\xe1^'\x66\x16)\x8e\xa6\xa3\x11\x99\x0e\xe6\xec\x19\x33:T\x63\x44\x01" "\x86\xd2\x41\xb7\xeb\x9d\xea\xa2\xa8\xa0\x9a\x07sy\x8f \x64\xa6\x34\xc2}v\xb1\xa7\xb0\xbd\x39\x94\xcd\xc5\xc3,\xe7\xfc\xf1\xaaj\xe7\x82i" ">\xa2\x30\xbb/\xba\x82\xde\xe6mp\xa0\xf7\x8e}\x13\xf7\xd4^\xa2\xea\x31\xf3\x1c\x85iS`\x34\x8f\x82\xb9\xcbV\xaa\xa6G\x18\x80\x86" "\xf2U\x19\xa6\xc2\x0c(\x15+\x39(\x8f\xf2\x05\xf5\xcf%`L\x1a\xa6\xfb\xb9\x43\xb9\x9f;\x94M\x62\xc2\xbc\xfe\xf3o\xe2Jg\x15\xcb" "\x15\xa0\xa4>\x1a<\x07\xd5+\xa0{\x0b\x65\xf1\x64`\xbag<\xd4\xaa\x02\xaf[S\xe9\xe9\x1c\x95\x18T>$\xc7\xf6\xb0\x81\xb8,P" "\xd7\xed\xe4\xe1<(\xa9q\xff[\xa7\xa0uN\xfd\xbf\xb4\x9b\xde\x61\x02\xd8\xae\x42J\xe6Jk\x05(\?\x9c\xe9\xd7\x1f\x94Q\xa6\xb6\xcf" "\xbc\x99\x12\xbfPn\x45\xa5)\xda\xa3\xa6\xa4N\x83{%T\xa3\x1fT\x85\x39\xb5\x82\"\x06\xf1\x81\x84\xedG':\xe3u\x86\x31WR" "\xdb\"(\xe1\x03\x13\xa5\xdbO\x9ex\xa1O(\x9a\xa4\x36\xd5x\x08\x9e\x95{\xef\xce\xfd':h\x38\xc3k\x33h\xc0\xc9\x13\xe6\xae\xd8" "R\xe5O\xcaL\x0cs\x98\x8a}\xa5\x06T\xe7\xd1\xcd\xa4\xf0\xee\x66\x08\xe8\xad\xca\x7f\xe7Y=\xbe\xfd\xb6u\x1c\xa5\x15\x32\xb0\xa8\xf3k" "\x0cj\x42\xf9\x03\x10s\xefh\xb8\x08)T{p\xfb\x31\x15\xe6Z\x83\xb2\xe5)\xa6\xf6\xb3\xae(\xcf\xac\x62\xee\xe5MQ\xee\xc3\xbf\xa7" "\x30y\x87\x03^\xb4H\x05\xb0\x97\x05\x45\x8d\xfe\xec\xfd\xfc~.\x14\xb5\xf7\xce\x0fOI>\x84!\xb3\xc1\xf0\x11U\xbb\x98\xef\xefN\x39" "\x31\x62\x66\x9b\n\xf9\x42\xcc\xc7\x61\xdc(\xa5\x85\x86\xfe\x9f}\xd5\x05>\?\xb7\xe1\x8fn~\x8e\x9d\xe1\xab\x9f\xe3\xed%K\xe0\x9f'\x34" "n\xc5\x9c_\x90\xcc\xe0s\x9e\x93\xb5\x41\xb4\xe4\x15\xad\x0f\xc3\xd3\\\xffhi\x9eg)\xb9\x39\xde\xb6.\xb1\xe9\xb4\xbc^\x07\x37$R" " >|\xd3\xcf\xbe\xe1\xce\x31y\xa7,\x93\x1bg\xd4j\xf9S\xa6\x1a\xf2\x97\x98\x39\xe3\xfc\x9f(\x83w,\xe6\xfb\xa3\x81\xed\xf7N]" "\x43M\x07'\x13\x63t\xfe\x17-\xdf=\x15\xdd\xcd\xe1+\x80\x63,W\xe3:\x9e\x89\xba\xeb\xecZ\x04\xd8\xb0Hxu\xe6\xc4\xfaN\x35" "\x8bN\x7f\xe5\xc4\xf4jI\xcd\xf3K\x0c*\x43\x31\x33\xab\x39.\xed\xa9\x90$W\xc5\xa4\xbb\x44h&\xaa\xb5\xe7\xbd\xb8\x39\xd2P\x91\x1f" "(n\xe1\x43\x64\x94J:]W\xbc\x1a\xf7\xd7P\xa8^\xd4\xef\x9d\x30\xfch\xc7\xf6J\xb1\x98\xef\xa3P~\xd8\x9b\x13\xfa\xa0\x32\xbd\x90" "\xde\xaa\x96^g\x43\x61\xb0\x08\xaat&\x1f\x0e\xca\x97\t\x9aJ\x9ak\xcf\xdb\xf1\x30\xef\x8c\xa6\xba\xd3lZ\xea\xc3W\xd0\x8e\xed+[" "\x1a\xad\x9c\x80\xefY'\xa2{\xa9y\xa7\xaf\x36\xdf\x8a\x90\x1e\x1f\x8b\xbd\xec\x88\xa1\x33\xa3\x97p\x62z\xa9!&\x42/\x88\xe9\?\xf3\xf3" "\xae\xd5\x0bK\x01\x38\xb5\n\x8f>\xf7\xb2V\xc2\x34\x11\x06\xf7,UU\xb2\xef\x8cJ]\x38\xb9@\x31s\x61\xa6\xcb\xa8\xf1\xe1\xdf\x17\x41" "\xf1\x39\xa8\xb9\xab\xca\x45\xc5\xf7Yl\xff\n\xf5x\x80Q\x0b\xa8]\xe3L\x14J)xg\xd9\x81\xbd\xc7\x9c\x14y\x61,\xd1\x85:\xfc" "u\x80\\\x85\x95\xee\xc2\x06\x8a\x0c\x44\xd1\x16\xb6\x90\x39\x31\x94!|\xe1\xcd\xbfT\x9c{\x45r\xf2\x82\x07\x8d\xd1M\xe1\xdf{\xa7\x96\xcf" "|\x63\x45\xc5'\x45/\x08U]\xdd\xf9+'*i\xd5\xe1znj;\x38\xc4\x1c\xab\xaa'\x92\x89\xfa\x86L\x92,N\xe5\x1fM\xed" "\xd8\x63}WPs\x9ev\x83R\x10s\xe3\xc6\xe0\x95\xad\n\?\x86`\xb2\x46\xcf\x32i\x16\xaf\x92\x94\xf3\xce\xbd\x8aK\x94\x86\x0c\xcdL" "\x82\xe2sT\x93\x39Mk\x88]\x8d\xa4\xca\xe6\xfd\x82Z\xd6\x30\x0c\x61\xcak$\x31\xa5\x39\x83\x41S\xa8\xd1\x00\xa3\x94\xa2\n\x15gZ" "x\x8f\xce\xf1&\xa6gx\x88i\xf1\xdd\x99\xae\xd7\xdb\x8f\x43\xdd\x8c\x33\xc3\xa9!\x39\xdc\xc0\xb3M[\xc8'\xe8\xb2\n\xfd\xc7{\x07q" "\x1d\xef[::\x93\x7f\x34\xf1\xe4\xd3\xf7Wp\xf2\xe8\x94\x8a'\x9d\xdcQ\xf5\x9c\xd1\xea-Z\xbdQ}i\x64\x37\x16\xf4\xd8\x9c\xdb\x18" "\xd7\xb9U\x90\xa8\x35r^\xba\xc9n\x0f\x8f\xb0\xd5\x11\xd4\xd3\xd8\x15\x42]\tY\x43Z\x98\xde\x8e\x9bI\x1bO\x64\x9b\xcd:\x43\xa8\x00" "UH$\x0c\xad\nk\xcf\xf1\x94\xdfm\x65H\xbc\x1a\xdb\x9b&\xf9@\xe2\xd5\xd9\xde\xbd\xed\xe5.(\xf9\x1f\xea\xb1\xe8\xb4\x8e$/\xf0" "\ty\xce\x9b\x89\xdb)\x92Iz\xca\xc9sI\xdf\?\xebH\xd7\x0bp\xc4\x15\xbeg\xd2\xda\x1b\x36\x61\xabk(\xa3\xf8\xbb\x9b\x36-\x85" "\n\xb1-/\x10\xa2N+`\x98\x44\x89O\xb3[TH\xcc\xd5\xa8^H\x1b\xf6|\x0bp=\xaa\x97\xe5\x1f\x88\x82[\xc9\xdaJMl" "\x7fX/\x63\xc7;\x63T\xae\xf0\xb6T\x85M\x43\x44I\xd9\x61\x83\xb6n\xb2\xaf[N\x37\xaf\xd8\xcf\xb0^\x89\xba\x93m\xeb\x10\xa6\x05" "\xff\xafW\xe4\x1fy\x01\x9a\x13\xaa\xf0\xe6\x08\xfc\xfaI\xdf\xed\xdd\x66ll\xa1\x45\x87\x11\xd6g\xce\xdf\x65\x37\x32\?\x1aS\xec\x93T\xb0" "\x97\x83\xd0\xc6\xbb\x85/\xc7\xe0_~qN\xae\xaf\xc1M\x46G\xa5g\xb8\xa2\xd4\x02\x16\x0bm\x1fy\xa1M\xa8\t\xc7\xf6\xfc*l\xd0" "+\x31\xb7\x65&\xab\x7f\x31\?\x9d\xdb\xe6\t\xa2]\x8b\xfa\xac\x93\x0f\xa0\x85\xd1\xf6\x65\xcb\x46V\xfdj\xb2\x8d\xa4&\x86`\xd4\xb4\x87\xd3" "\xc0\x66t\xc2\xcc\x00<\xad\xf8G\xa2\xf3\xac\x36\x06PKR%\xcf\x7f\xa8\x1aN\x8d\xfa\xe4\?v\xde`\xc3\xaf\x11\x95\x1e\x11\x38_\xcc" "+\xfe\x42{\x0c\xdf{\x31m@S\x88\xb2\xbd\x81\xa5k\x42\x1b>\x13\xa2\x96i\x44\x9b\x86\x33\xbe:\xc2V^\xf5\x86\x14pl\x82\x35" "\x62\xf4\x02\x1a\xd8\xc6\x43Xo\xed]%\xbc\xc6\x8dQ\xf9\xdcO\x86\xb5\x86\xc2;~\xaa\xcf\xdf\x18\xe2:\xd9>`H !\xd3\x16\xbb" "\xdf*[\xce\xff\x99M\xdc\xf4_\x87\xa9\t\x37\x08\x1f\x8f\x1fp\x1b\x08\xf1\"|\xe3/\x0e>\x9c\xf2\x05O\x45(\xb6\xb5\\\xad\xab{" "\x8a-'W\x37\xe5=\x95\xaes\xae\xa4\xfd\xb7\xf7\x9b\xda\x1a\xdc\xfd\x66\xd2\xdf$\xafHNl\xe6%\x34G\x12\xe1\xe2\x46\x9e\xe9\xf6\x1a" "\xb9\x00\x01]\x84\x16MLx\x81o\xa5\xdftP\x15\xd3\x86\r\x95oQ\xe9(\xee\xbd\xba\x92\xba\x17+]\x45\xd9\x34p\xbd\xb1\xcdT" "\xa3\xd2\xeb\x16\x85\xa3\xa9P\xc3\xab\x92\x06\x1d\xc6\x41\x45\x65\xcf\xf5%\x42\x19\xd6\xd0\xf9\xab\xd5s\xbaZ\x41\x35zNv:\x1a\xe1'\xa7" "\x1dO\x66\x31\xd3\xaf\x31\xb6\x04v\xc5\x97\xad\xa9\xe5(\xee\xa8\xc9\xb1\xb5&\xc6\xf9\x8c\xd2\xc3\xe5@T\xf3w\x61\x17\xde\xc4\xae\x33\x42~" "+:[\x44\xe3Jt\xde\x86\xb2=\x0f\x84\xa5<\x88\x94n\xb2W\xdd\xc4r\xd4:W;\x18\x99z\\\xe8 \xb4\xa9-\xe1'.\x87" "\xc3\x15M\xd6\xecJ\?\x37\x36\x1a\x10^\x9e\x45\xb9\xef\xf4\xb8\xed\n\x9e\x43Ph\xf4\x34\xe1<(\xb4\x95Ou\xba\xf2\xd7\xe9\x9co\xe4" "\x80X\x33\x19:-)\x9b\xe9\x01t\xfa~\xe2\x17\x8b\x85Z\x42<\xf2\x66\xbai\xcb\x39\xd3\r~\x13\x9e>u\xee\xed%\xb4m\xa9\x95" "]\x10\x83zJ\x8e\x0f\xb4#\xb4\x11\xdb\x88\x91,\xb4H\x0b\xca\x19h\xc3\xf3\xc2{\xfc\x44\xd4\xa9\x81#\xfe\xdd\\\x46\x8d\x98i\x12\x13" "\xc3Vm&`;Z\xe3#\xf1\x9fG\xe6\x0c\x9a\xbc\xa9v\x9c\xbf\x8cV\xef\x30\xebm\x92\xe1\x63\x61\xda\xb4\x87\x99\x88\xda,\x66\xb3\x0e" "\xda\x14\xa0\xb0\x93!\x9f@<\x86v\x92y\x01m\xf9\xad\x90W\xa0\xdb'\xb5q\x02xU({\xe0\xb0\xc3\xc6\x41\x9b\x15\x8b\x12#\xdb" "\x66\x62-\x83\x99\xe9j\x14U\xfc\xb3\x1b'\x07\x8c\xda~\xb1p\x62\x31\xfa\xf9\xd3\x17<*\xe9\xbc\xed\xa5\x04\xa6\xc9\x84h\x45\t\xe7\xa0" "MP\x0b\xd7\xa7$\xae\x0b\x13\xd6\xf5\x36;v\xedm\xb5\x0f^n\xd8\xa8oo\xafH&\x94\xdf\x9a\x86\x07\xe6\xd9\xb6\x0f\x39\xf0\xb1\x98" ",N\xb0}\xa5([\xa5\\\xbf\x63\x66\xba\xc3v\xb7\xf5;\xf8\xc3\xd5\xef\xb6\xe6si\x8cN>\xe5\xed\xc1\x9a\x12\x1c\x18\x34\x38\xbav" "\xc7<\xd9\x89\x1b\x96\xda\xdd\xdf\xa9\x65$N\x64\x08\xf1\x9e\x08\xbb\xcet\xd8I\xd7\xc7\x41\xad\x8f\x31\x0f_\xefnmn\xa8\xfe\x04o\xb5" "\xfa\x13\x1c(\x85\xb6\xb6[x^'\xbb`\xdd\x46\x16\x9e\xd8\x9cU\xb2r}\xc2\xd2\xc3\xfa\x13|P\x95\x65\x10\xcd\xc1\xa7\xed\xab\x65\xe2" "\x97(\xbb\x61\xeb\xe3%:\xcd\x83(\x43^Xp\xbc\xc4\xf5>hn~\xf5\x97\xf4\xfb\x93=\xbf\x97mUw\xd4IG-W\xf1{" "w{i%`\?:\xf4\x8eW\x1fQ;\x84\xe8\x0c\xf5\xa3\xf1I\xd4\x9d\xc7\x8d\x86\xab\xb8<\xd9\xa9U|s u\x84)l\x1a(" "\x44\x1e\xee\x33{\xf5\x31I^\xef\xc3\xd9>z*\x41\x9d\x9f\xea\x14\x92\xed\x19\"\xca\x02\x9d\x0b[\xd2\xf6.om\x89_\xbd\xbf\xad\x9e" "\xc6\xb9Wl\xec\xac\xea\x61_\xe1\xfa\xfe\xfeN\xed\xa5\x92\x16\xbe\x86\xcf\x8e\xda\x96\xbb\xff&\x97\x1f Zi\x7f\xb1\xaeY\xb8\x1a\xaa\x1b" "\xa6-\xba\xae\xff\x95\xce\xb6|\x07\x8e\xbb\xf5\xc1/\xde\xaa\xc1\xef\xacH~\x82\xe6to\x8c\x9e\xbei^n\x1f.\xa2\xdbG\xaa.\xb8" "\xe0\x17\x17\x8fN\x36\xbc\x06\x9a+\x9f\x8f\xd8\x45\x18 \x8c\x84\x10y\x45\xbb&\xbb\xee\xca\x00\x8eK\xca'\xb0\x8c\x9f\x8dlM\x9b\xf2\x31" "\x1e\x16\xa2G\xfe\x96m\xf9'|<\xd4\xa3\xbc$Q{\x17\xc8\\\xa2\xc4\xbay\x98\xf2\x64Ox\x01\xbc/\xc9\x46\xf2\x34\xa3\x41\x13\n" "\xb5\xd0@w\x86h\xfd\x61\xa5:`\x91\xaa\xd4\x10\x15\xedlP\x18\x46\x34s\xfa\xec\x66<\xab\xbb\xc9Ri\x80\xe5\xd7\xc2\t\xff\x34\xcb" "\xe8\x66\x03\x16\xbaS\x94yk(\xf9\x1b\x36\x41_\x1f\xc4\x07\xaf\x92\x61\x98-\x07\xac\t\x07\xf0\xda\x10\"\xf3)\x93\x85\xfe\x83\xb2\x89\\" "!\xb2\x99R\xee\x8f\x63\x0b\x03\x0e\xc6\x0f\x38\x84\x35`y=\x90&\x9a\xee\xbcT>w\xb5}\xe4\xc2\x18Qh\x10\x0e\xd8\x14\x1e\xb0\x61" "\x38\xf0G\x1bOGr\x86\x18\x95\xc4\x00\xd1m\x8d\x1c\xab\x1d\xc0KH\x89KJ\x8e\x8f\x34\xa0\x36\x06\x9b\x06pW\x16\xa2s\xa4\x8c\x0b" "U\xbe\x61\xf4\xcaW\xe2\x01q\xdc{\x90\\<\xef={\x0e\xb1\x0c\xd8\?\x18\xf8\xed\xea\xe0H\xa9\xceq$U\xf2\x36y\x1eSU\xb9" "\njx`\xbb\? \xa9\xb1L[\x38\x9fn\x9f\x0f\x38\x17\x30\xf0\x87\xa9\x31\xe8<\x8e\x1c\xd4\xec\x96\xa5\xd1 \\\xb7\xe4)\x8f\x98U" "\x0f\x0fG\xc8\xce\xc8@#s\xcb\t\x87x\xf2\xd8\xadP\x89T\x84K\x8d\xd1\xf3\x18v\x34\x17v\xf8\xa7\x87\xbaS[\xc8\xc3\xfb=\x95" "\x34\xc3\xdf\xd4s\xaa\x83\xb7\x1c\xcb\x12\x8c\xf2\x1ar,\xc5\xd4tg.\xe7l\x38\xa8\x8a{\x1dV\x14><\xa2\x64!>\x80\x0b\xb6\x10" "\x15\x99\x92\r\?\xee\xd3+\xacZ\x43\x16s`\x03\xad\x17%\xa7\xde\r\\\xa5\x9d\xa7\xa0Z\x87\xd1\xa0\xbb\x9d\xe2&YM*\xb1j\xa3" "\xce}~\x85\xe8\xc0\x0f\xb6\xaf<\xd5\xe0\xc8\x19w\xab\x30g]\x39O\x94\x45\xe1\xb2]U\x92\xda\"\xf9\xb0\x07=\x42\xf0\x1d\xf6\xb8\x46" "\xec \x8c~W\xfd\xf8\xb6\xe1&\xf6\xa2\xa8\x8f\xa2L\x61\x9b=\xfb\x9d_G\x98\xe0\x1b\x45\xe7\x1d\xe9\x91\xab;S\xf7\x10\x07.\x9e\x9c" "\x08\x44!\x66k\xed\xd4\x11n\?z\xf3\x0c\xf7\x41\x37\x11\xdc\xce\x0f n\x16\xcc\xd6\xbd\x9b\xd8\xc3\xd6\xcd\xff\x39^\xa4\xc5w\xfd*:" "\x0c<\xfc\xef\x0f\xe9:p\x0b`!\xea\xfe\x35\xb9\xfe\x93\xcc\?\x93\xc5\x04\x9b\xd8\xff\xaf\x63\xd1y\x9e\x63\x13#iYr\xb6}\xa4\xcb" "\x43\x98\x18\x30w\x63\xb1<\xa0\xb3\xd8\xb6\xe0\xfd\xdf\x03:\x95\x62!\xee\xfe=\xac\xd1{WL\x86\xa7\x1c\xd8;\x94\xbb\x88\x32\x63\xa8\xe1" "\x1a\x9e\x04\x66\xa6\xa3yZ,\x42\x61\xb4X\x99\xcc\x9f\x93\xca\x1d\xd4\xcf\x04\xab\xc5\xdc\x94;N\xbf~\xc2%\xfeL\xb6\x1f|<\x16l" "\x42y\xa9\xff\xdf\xe1\x61\xeb\x96=\xd3\x36\xcd\x85~\x1f%\xdc(Z\xff\xc8\x83\x14\x15W\xf0\x38\xe2\xd3\xab\xf4h\x94\xfc-HS\x81\xb3" "\xcd\xa3\xb8p\x1au\xff\xee\x99\x9e\x87\xa0\xf8R\xa8\x92\x34\x8e\xc6KO\xfa\xf8\xfc'^!q\xe4\xe7\xe3\xc7w\x64\x30\x1c\xc0\x98\xa0R" "\x9er\xfc\xf5\xc3z\x88\x07\xd2\xaf\xbf{\x07t\xf5,\x66-U\xc5\xa7\x7fw\xca\x0e\xf8o\x99\x9b\xb3\xb0\x39\x94\xdc\xe5\xf9P\x94^\x99" "\x06K\xe9'\xeb\xae\?}=|\xdbHK\x1f\xba@h\xfd\x83\x63w#O\xe6\xf8\xe3\x38)\xbf\xc2\xfc\x1ck\x44\x8e\xf1\x83'\x9a\x1c" "\xf0\x8c\x13OZ\xbf\xcbr\xb8)W!I&-\x0b\x02\x1d\xfe\xac\x37\xb3\x97@{\x07\xa2\xcc\xbb\x46%\xc0\xa8\xea\?\x7f\xd9\xfb\xb1\x7f" "\xd3W\xef)\xdb\x91\xcc\xa3\xf7\xa2_\x18\xf9\x61\x44\x12\x81Y\x38\xb5\xb7\xa0\xb3w@\xfe\xf7\x17Mj\x95hz\x86`G{\xca\xcf)" "\x07<\x1d\x61\xa6\xe3\x1fO\xfc\xe4z()\"\xa5\x03\x42\x1a\xcb\x01y\x35\xc7\x35\xfd\r&\x94.\xc6n\x0e\xc3\x8f\xeb\xc5kZk\xaa" "\x30\?\xa5\x07\xc7\xfe\xfbi\xfeM\x17j\xd9\xc2(W~KR\n\xe8\x95\xf3\x15M\xabG\xfe\xc8\x61\xc6\x8f\x43W\xa9\x45(uSr" "Rt\x91KJ\x07\x38\xc6\x9bJGs\xa7\?\x1a\x8bx\xd6\xd3pww\x9f\xf1=\x92\x46\xae[\xc7\xb9\xcf;\x41\xfdL\xa4|\x8bg" "k\x38\x11\xcb\xb1\x96\xfa\x1f\xe9\xff\xe3\x65\x34\xc2\xab\xba\xedX\x05\xa8\x0b[\xd8\x44\xb4\xd5,Ky\x97oy\x36[\xc8\x92kl\x1f\xee" "\x99\x19\xc7\x9c\xa2\x18\x87\x38\xc0\x30-\xbe\x9b\x9a\x03\xe6\x0b\x31\xc7N\x8eU\x8fY\x08(\xa3\x9f[\xbe\xff\x63\xfa\x7f\xec}\xaa\x13\xb6\x39" "\xads\xfbv%\x7fn^p\xaa\x8b\x01\\[\xc6\x16\x9c\xadO\xb3\xb6k\xe8\x8e\xd9\x16\x16\xbep\xe2\x82\x66\\\xec\xfd.\n\x9c\\\xe4" "\xb1tt\x89}\x14\xf5\xc0\x1b\xdb@\x62\x0e\x34\x34\xd3'Sh>w\xee_\r\xba\xbd\xca\xb8\xf1\x12\x1f\xf6\xf6\xd5\xc9\x9aj\xe1\x44l" "\x0c\x31\xfd\xf4\xcb\xebp\xbf\x62\xda\np\x98\x9e\x46\x1e\xeeS\xcd&\xd9\x06\x37\x1d\x8e\xc0\x8d\xe1%j\x8c\xdbo\xe9\x39R;\xfaS\xe5" "|\xcc\x38\xca\x1c{\xc2\xc0WT\xf9\x44N\x9c\x61\x0f\x45S~\x61\x62\xd2m\xbb\xb5\xda\xfd\xde\x17\x88v\xfb\x38\xca\xdeG'\x19\xbe\xf4" "\xba\xc0'\x39:\r\x66q\x1cLLG\x8f\xa3\\\x9e\xe4\xd7s\xfc\x08o\x35\xc4(\x10\xd3\"U\x1b\xa3\xf2Y\xb4ix\xd2y\x0e\x90" "\xec\xce\xf1\x18\x9a\xfe\xa0\xa0\xe4\xa2\x35\xea\x64\xa8\x8e\xc7\x1a\x16\x15\xe3\x39\x63\x44rQ\xd6\x9d\x9e\xee\xea\x33\x83Q\x63\x31\x1b\xce\x90$\x62" "\x86\x0f\xfa!<\x64NM)\xd5\xf3m\xdep\x15>x^\x8c\x1bO\x9e\xc7\x44\xd1\xb1\x82&\x96o@\xad*n\x62]\xc7\xee\x93\r" "\xad\xaa\xa5\xa0\x42\x9b\xe3\x9f\x03\xf4\x81\x18G\x45^\xa0\x14\xee\xef\x97nr\xe2^\xcd\xf0\\J]\x84\x15ts\xd7\xb0\x90\x03\xe3h\x8a" "\xb7\x87>vJ\xce\x8c\x8d\xa3\xca*\x1c\xad\xa2H\xf0w-l_#\x66\xad\xec\xefrT\?\xd0\x32\xaa{\xbd\xab!\xc6\xea\xec\xe0\xb9" "\xc8\xe2\x13\x1a\xbdL@\x88\x42%/\x16}\xfa\x31\x07\xc2\x84\xfc\xe5\xbb\xa2\x33|\xf5n\x97\xe6\x62\xf2\xdd\xd2}Hj\xdcQ\x1e\xaa\xc1" "LpWs\x86'\x7f\xd7u\x86\x1f\xed\\\x81\x0fL\xe5\x87\x9e\xd4\xb3lp\xeeTx\x08\xdd\x97m\xf3\x84\x66\?\xdc\xc4\x13\x7f\xff\xc9" "\x9a\x35\xcd\xf5\x9e\xc2\x86@\xa2\x9e\xf9\xb5g~\xb6w\x98\x1e\x33m{\xbc\x86\xfe\xb5S\xea\xaa\xf0\x41Q\xc3\t\xab\x37UI\xf6\x32\xa8" "W\xe9\xfdg\x39\xb0\x36\x0eo\xc4@j\xc3Rx\x37\x07\xcf\x9c\xeb\x1e\x9bs\x0fK\x87!\xcf=x\x41\?O\x9c\xa6\x16\x93\x45\x85\xbf\x9a\xd3\xa3\xf0\xad\xe9Q(\xb2\xc4\xf4l\x31=\n\x8fz\xf6\xe1\x64\x87R\xcc\xcfp\xa9" "\xb3\x89Sw\x1a\xee^\x06\xb5\xf9\xeb\xb5\x98\xa8t\xc3` \xa2,p\xa7\x31\\\x8e\x97\x05\xf3\xc6\xde\xa1\x98\x15h\x34\xff\x91\x66\xc7\xfe" "\xab\xb7\xe0\x45.\x0f\x9c\xa1p^\x1e\xc4\x85\x0b\x9a\xfc%\x38,)\xe3\xc2\x35\x07\x03\xc6!\xf6\xb1\x9bX\x06\x03\xe5\xdfX\xff\xb0\xf5\x33" "\xdeM\xd9\x8f\xb1\x8c\xdd\xb8W\xaf\xd1\x1fx\x1cg.\xb7\x87\x17t\xa2\x1a\xdb\xde\xa2W\x34\xaf\xbcL\x42\x88\x02%.\x80\x63]\xc2\xab" "m\xffM\xbbt\xbb{\r+\xcb\xdc\xd4@\"Rn\xf1\x39\xe1\xd8\xce\x97L\x0e\x84j\x13\xfb\x1d+y\xe1\xb5or\x46\xf2\xf4\x98\x43" "\x1e\x87\x38\x46\x62\xc2\x83\xd2\x9d\xbdq\x80\xef\x04Z\x86\x08\x8c\xa2J\xab}\x0e`\x8e\xc3*G\x31\x1b/Nu\xfblm\x82\xda\xd5\xdb" "\xd2\xe4\xf7V\x96\x98\x9c\xbb\x1e\xd3\xa9j\x8c\x90v\xca'\xe7\xef\x32\x1f\xbd\x14\x82Z}\xd2\xc9s\x1c\x37\x8f\x9d\x9e\x33\x11\x9e\xa1\xce\x65" "u\x46N\x0c\xa8\x89\x90H\x66r^Y\xcc\x02\x82k\xa9y\x03\xfa\x16-jV\xc8'\xe7\xef\xcc'\xa5TI\?\xd5M\x0e\x38\x8c\xd9" "\xe4U\x86\x87r\xcb_\xbe+i\xff\xab\xb5\xde\x7f\xd6\x98g\x14\xf2\x32\xdfx\x8d\x03&\xc8\x80i\xe5\xdb\xc2\x88\x39\xac\xc7\xe3\xca\xfeo" "\xd8\x01\xaf\xb6\x39{\x34\xe6g\xf6>\xb6w\xc0\x0b\xa0\xfd\x63\xfb\x39j\xacn=\xde\xb6\xd0\xe8\x02\xcdk\xaf\xa3\x63)\x95\xdf;\x34\xdd" "YX\xcd\x90\xa5\?\xf8|>\xf8'\xcf\x1d\x9fL\xb7\xcf\x15;\x63\x34\xbdz\x88'<\xc3\xe4\xc3\x19\x92\xd0\x1f\xdd\x17_\xc4\xafgg" "\xf8\xc8\xd7k\xbc\xfc\xbb\x7f\xbf_\xaf\xde\x66\xd0\xde\xea\xa7\xeeL\x13n\xe2;\x87\xdd\xc3\xc5\x9c\x06z\xf9\x88\x9dj\x84\xab;g\xc8\x61" "p$\x1dk\\\x0e\x8cH\xd1\xf4^\x00\x07\x03\xc7\xd8\x36\xcfH'\xbd\x31\xc7\x07\xc7I\xb1\xef\x85\xb4W\x33\x1a\xb2p\xd7vW\xc5w" "\x44\x9d\x14Y\x41\xa9\x99oq\xa2\x63\xbc\xf3\xb9V\x33\x9c\xbd\x86\x34\x0e\xfar\xb3\xd7\x12M\xea'N\xad\xe2ZW\x1c<\xd6\x03\xf1\xb4" "/U\x90\xdf\xa6\x1c\xd0\xce_Y\x87\x1d\x10\x15\xd0\x8e\xd1\xc5\x94)\xee\xb9_\xbd\xbc\xa7\xe7\xfe\x92 \xf2\xaf\xf2\xd3s,\xcc\xbd\x37\?" "\xe9\x14\xa3\xdc\x8d\xf4\x33\xa0\xd8\x90S/G>\x81\x9d\xc3\xa3\x9a\xe1\x84\xcf(_\x92\x97\x03\xb2\x82\x08\xc6jr\x15\x8b\x98=\x34~\xe8" "\xfa\x31N\x46\xee\x88\xa6+\x42\x41\x36\xa7\x85Q\xa6\xe7\xed\x31\x8d\xca\x9d\x39\x0e\xe6\x8aW\xb7(\x39\xa5\xd5\x1f\x62\x85\xeb\x81\x16\xc9\x34[" "\xf2\xf8\xeaR\xfa\x98\xbf\x8b\x03og\xec\x1f\xf0\xbc\xce\xe1;\x65\xb8\xbbU#)\x16\xbc\x18\x42\x84\x0b\xe3^Y\xaa\xe1)j=\xafL" "\xd2\xe3\x95gU\x8dsU{\xdf\xcb\xfd\xd6\x1d\xbf\xa6\xf9\x8em}\xd4\xc4\x0b\x8emH\x94\xef:\xfe\x85\x31\xae\x31\xa2h\x19\xfd\xa2\xb0" "\xde\x46\x88\x99\x9a\x31\"R\tkxP\xba\x87m\xe6\x8d\xa3\xab\x63\xacz\x12>\x66\x9c\t_\x18y\xcfuX\x32\xd7\xf7\xcc\xb8\x7f\xc0" "[\x00Z\x18\xf8\xb5<\x1f\"\xb0\xbc\x98\xbe\x1cPL\x0cr\x8e\x43\x90\x81\xfa\xd8\x9b\xdf\x08\xd1\xa3\x1c\x38\x43ZL^H\xfei\xc2_" "\x9b\x30U\xfc\xf2\x7f\x46\x1c#\x1f\xd3\x1dm\xccy\xf3\x31\xd6y\x1a\xbd\xa4\xa7\x37\x9a\xb0\xc6\xf9\xeb\x31\xf6^\x34zS\x8a\xf3\xae\xe3\xed" "\xd1\xbb\xd3\xd3v{\x84\xcb\xd8\x1e\x17\xc9\n\xb9r\x86\x8f\xca\x93\xc6\x34\x08\xcd\xf0\xf3Y~\x37[\xf1ww[\xcd\x85\xdd\xb2\x44]\xf0" "\x17j\xb8\xb1\xad\x94\x08k\x64\xad\x10\x86\xdf\x36\x1dqz\xb3\xca\xcc\x05\xe2&\x61W\x92L\x18\x0bP%\xfdW)\xda\x0e\x16\xc9\xea\xe3" "\xdf\x63\xfb\x07\xa4\xd5\"\x39\x7fy\xbdw \xed\xb9\x33\x12\x0e\xec>\\\xe9yO\x38\xec\x81\x02\xf3\xb5J\xb7\x04Sl\x93\xa8\xb9\x17q" "\xcf\x0ex\xe1\xab&K@\x35Y\xbe\xa8\xd9\xdb\x04\xd3^\xf1\x10\xd9\x9e\xc7\xa6\xc1\\\x84\xf3{-\"&^\xb3\xa0\x86\xe3p\xf2\xabo" ",\x43\x14\x13\x0b\xca\x94\xba\x89\xcc\xf8\x81\x8al\xf1\x0b\x37Ugx\xc8\x0f'\x08\xdb\xa1\x66\xdd\xc9\xc9\x98\x31]\xf1\x94\xd1\x98\t\nO" "\x19\xa5\xf6\x95\xca\xbd\x7f\xdb\x91\xdb\xbfWt\xfd\x37\x93\x65\x1eV\xbc\x1b}\xd8\xc6\xcc\xb9\x9b\x08\x1am\x66\xd8\xa5\xaa\xae\x0b\xc8\xb5\xa4\x18" "\xd7\xf6O\x00\x97\xe8\xd9\xaf\x45\xb4\x34&\xad\x1cW\x90\x88\xaa\x91s\xa7\x45~\xce\xf3\\\xb3\xdfy\x8b\xec\x82\x8b<\xb8:w\x46\xb9." "G\x95U\xb1~T\x93\xce\x11\x66\x8e\xfc\xe3\x1bp\x1d\xa8\x0e\xed\xf0\x43R\xc5\xfe\xd4,\xcaL\xe2\xf6k\xf4\xf3\xb1\xa7\xd2\xd3\x35\xd4\xc9" "\x19\x98\xfd$\xe7\xe4&j\x9f\xc4\xb7WP\x16[MX\x1a\x81\x18\x42Q\xf2q\x99\x89\x84T\x13+I\xcdLs_\x30\xd1\xd6\x9aq" "n|\xc6\xee\xf0\x0c+\x8b\x8d\xf4\xc0Q\x33\xcd\xdd\x06\xf3\xfc\x34\xb9\x1e\x42\xa1\x9f\?\x63/\x63\x86\x88\xad\xc6\x9d\xb7\x1a\xd5\xee\x33\x13\xa7" "y\xaa>\xee+\x0b\x65\x63*.\xbc\xd1G\x45Uz;\x8f\xa6\xbc\xdeg\x9e\xfb\x85\x9f\x45\x89\x39\x0b\x17\x8b\x41\xb1Y\x34\x9a:\xf5\xec" "~w\xa3\xa9$<\x02\xe7\xa9\x9a\x81\x63\xa6\xc1\x98W\xfc\xce\xbf\xff\xf0\\\?|:~\r\xe8O\n/%\xf9\x92\x16\xef\x1a}\x38\xf7" "\x05\x9a\xd1\x35q\xc6\x65\x15\x33\xfa\xe4\xcd\xd8\x66\x98\xed\xdd\"g\x10gqXv\x33\xd3\xe1\xe6Z%z>\xa2\x9a\x39\xa5I\xceV\xb9" "*\xc9T\x9e\xaf\x38\x9b\x31\x63\xe7m\xc6\x16\xd1Lr\x8d\\\xa5\xe4 \xa8{\xfe\x12\xc6\xe0\x95,v\x66q\xe7\x38\x1d\xbc\xc5\x37\x45\xaa" "\x13\xa7\xce\xd7\xfd\xb7\xafS\xfb\xaf\x98+\xd7\xec\x00\xb2k\xb8\xa0\xc1\xa3\x06Q*\xdc\xed\xa9\xed\x15O<\xe0\xe5\x8c\x32 j\x08%\xcb" "T\x35\xd9\x33\x98\xc5\x8b\xc2\xdek\xe1o\x1e\x9d\x9fg\x9e\x9f\xd9\xd8\x9b\xd1M\x65\x96t\xf1m\xc4p\x35\xb2Y\x66\xe6\x32\x98,^g" "l\xa4\xcd\xd8\x32\x9b%\xf0\x9a\x9d%\x0b\x14-\xf4\x9c\x9b\x61\x9f\x03\xe1\x9fi\xf2z\x88\xf8\x17\xa2\x32y\xe7nrm\xc6Y\xe8\x19\xc2" "\x39\nsH\x0e\xb6\x65\x66\x88\xc3\x64\xf4\xeb\xe6\xcc\xb1\x92\xa5\xb1\x99L\x16\x44\xbe\x16\xa2i\x31\xdby\xe2swh\xe1\xf7Z\x9e\xf1\xf6" "\x01I\xcb!\x04!~\x1e\xb1_\x8d\xbb\x06\xa4(\xe4\x9b\xed\x45&\xb9\xc3%#\x90\xbf\xe6*~\x84YK\xe7\x98\x31,h\x66\xf7%" "=\xe0/\xf3\x06\xe8\xf7\x34\x93:$\xb9\xeb\xfb\xa3\xde\xf6\xd7\xba\xea\x1e\xde\xb3K\x0ew,\xe9I\xb3\x64\xf1\xbf\x64\x39\xb1\x8c*\xcb\xe8" "\xe2 \xba\xb0T\\\"n\x66}\x99\x96,\xf5V\xda\xc4o\xb7\xd8\x02\x10U$g\xd1Q\x06\xab\xb3U\xcd\xc9\x05\x88\xd1\xa0\xd5\xef<" "G\x16\x9c\xac\x38W\xbf\x8b\x43i\"p>\x8f\x8a\x93\x61\xae>WT\x38ut\xf4\x06\xe6\xef\x9dQ\xb1@\xa7\x1dS\xabw\xc4'\x11" "u^\xd4)\xbei=z\xd2\xc5\x44q\xf3\x1b\x87\xe1\xca\xb8\x8az\x87 \x86\x84\x95RHp\xd0\x9a\x8a\x39O\xd4-\xf8\xf3\xe4\xdc-" "\xeb\x32\x85Iu\x35\xb1*_\xcd\xbf,\x0cV~O\xf1\xf1\xbd\x13\xe1X\xc5,\xac=\x35\xe2\xda\x9a\xdc\x38\xc3>Y\xa2,\xf0\xbf\xb2" "\t\xd6q\x1b\xba\x90\x8c\t\x18_O\xc0\xf6\xfb\xdes\xe1\xab\xbe\x8a'\r\xa7\xceU\x63\x45\x8c*\x39\xff\xde\x01\x9d\xa6\xcc\x7fr*o" "\x95\x94qm\x36\xd5x\xec\x66\xban\xb1\x04[\x61\x8d\xbe\x91\xbdS\x31\xa7`\x97\x1fy\xc1\x85\xf8\x05%\x1fOi\xee\x9c+\x13V|" "\xd9W\xda\x19\xe2}\xa4\x07\xe5\xc8\xb6\x8a\x11\xf3\xe8\xc9\x99\xc2\x9bo\xc5\x91(%K\xa6\x15_\xeeUZ=\x92>\x05\xbb^;\xc5~" "\xd7*m\x96\xa3R#m\"_\xd2O\x65\x95\x8e\x90\xc0\xba\x0b\x96t\xaf\xe0}N\x85\xa8G\xa6\xa4\xd7\x11\xd4W\x8e\xbc\xf7g\x07\xa7" "\x8f\xc6!^'\xe1\xfa\xc5\x88&\x84\x30\x97u\xa2\xce\x17\xd3\xf2\xa1\x11\xf9WLsO\x16\xfe\xbf" "l}\x87V\x32\xc1\xd2\xed\xbdor\x1f\xd5\x84\x82\x01\x0c(YL\x08&\x82\"J~\x98\xdf\t\xbc\xc5\xad\xaa\xbd\xab\x99\xef\xfcg-" "\x97\xbb\xf6\x00\x13z:TWWW\x9d\xbf;\"\xa6\xa1\x88\x9f\x65\xe0jWw\xc7\xda\x9e\xb0\xcan|\xde\x14\x86M/\xc6\xd2u\x33" "\xb1<\x42\xc2\xca\x03\xe0\xf5\xa7\xdc\rv\xaf\x0b\x33{\x94\xa0\x45\x06\xa8\xe8<\xebo}\x1c\x99\xbf\xb0\xb0\xaf\x9e!\nV\xb0\x8c\xc7\x82" "\xcf\x9e`\x1dW\x82\xdf\x90\xe1\xdf\xec\x13\xad\xc3Xz/\n\xfe'\x98\x19\x8f+\xbbin\x04GW\x11O:\x9ar\x9c\x65\x84`L" "\x82\xf7\xa7\xc1)YY\x05\xd8\xdd\xb5\xdb\xe6w\xbb{\x8e(r\x17\x11\x19\x0bL\xf4\xe5\x02\xca\x34\x1d\xec:\x66J+\x1d\xbf\xc1\x9e\"" "\xe2\x0f\n']\xe2\x81\xe1\x31k\xe8_\xc1\xf6\x38\x43\xcc\xe3\x44\x0c\xd8\x8fk\xfd\x8c\x88\xedG\xce\x36{(M\xa8\x9f\x86\xa2\x86\x85\x1f" "\x0b\xfby\x0e\xcc\x34{\xc1WT\x81\xcdT\xc7\xbc\xca~\xfc\xaa\x63L\xe5 \xday\x35\x84\xb1\xb4r\x00\xcf\xee\n\x93l\t.\xc6\x86" "\x88\x1f\x61h\xdeV\x13gQ\xbe\xe2\xbf\x11\x86\xb0*\x15\xa6\x93\x32\x64y\xe6`\x94\xaf\xe4\x10\x97\x45\xf0q\x07h\xb1\xc8\x04-\x93\x83" "!\xa6\x89\x10=\x9a\x82\x31\x8c\x9f\x10\x1b\x0f\x41\x34\xfd\x0f\x62\xbb\x88\xf9>X\x7f\xfb\x9d\xd1\x8e\x8b\x9a\x0e\xf0\xac\x12Xm\x00\xbf<\x30" "\x8bW\x11\x98oh\x37\x96\xf9\x9a\x86\xcb\xdd\x32\x7f\x42\x15\xf7\x9b\x99\xbb\xd1-\x92\x66\x43\x31\xb6i\x1c\"\xc1\x32\x98-\xabUr\x98@" "\n\xf6N\x1c\x11s\xae\x92\x43O$h=\x89!\xd6Q!\xb2\x00L\\\xb9(\xad\x32\xe9\xf4\x9c\xa1\xf7\x84\xf8\x14\xbe\xe3\xf7\xab\xe2\xc3" "I\x10\x1fs\xd8\x84\x0b\xc6w\n\x8f\x7f\xc1u\x43\xfe\xc3]Y\xb1\x0c\xb4\x00t\x82\xf7\x33G\xb8\xb2\xba\xe8/L\x18l\xa1\"\xdar" "\x9b!O~\xf2\x37]\xe9\xe6\x91\xd6\x93\x31\x84\xad\x36\xc4\x84G\x44\x19*\xd1\xc6O\xa2\xb3#\xe2\x17\xd0r\xd7\x0b\xde\x13\x9f^\x93\x31" "\x7f\x65\xb3\x07\x41\x0bo!h\xa3\xab\xa0\x05\xd3\xab\x30\"\x84\xa0\xad\xfb(\x1e\x10K@\xd3\xf5\x05m\xe6\x62\x08\x43\x38\xc4\x0f\xfe\xda\xd2" "\x8eTN\xe2\xc2\x07\xd0v\x9e\x19n\x1a\x38\x31\xd2\x62\x0b>\x0c\x80\x83\x06\xb2\x33\x89h\x46g\xc1\xc9\xbd\x63\\m#\xe5\x9d\x33\xf6\x86" "\xca\xb0\xb6 \"z\xb3\x13\xe8\xca\x82\x1f\x97@>z\x32[\x02\xe7\xd7\xc0\xf5\xc2\x91MT\x94\xa4\xeb \x1e\xed\x01\xf3(\xc3\xf4x\x84" "\x85I\x11\xe5-\x1d\x8f \x0e\xf7\xb1\x35\x44\xc4\xdfo\xa0m\xc2\x34\x84\x15\xc5\x44\x0e\x37&\xda\xea\xaf\x89!h\x1dX\xe3\x13\xfa'\x98" "\x94\xd5K\x38U|\xbb\xeb\x62\xb2\xff\x94\xee\x15\x02\xc3\xb0\x61\xa2\xed\xf6\x30Qk}\xab\xf8\xb7\xb8\xdbh\x88\xde\xe7p\xb8{\x99\x11\x37" ";m\x7f\xddz\xc0\x36\x34@\xf4\x45\xa9\xca\t\x34k\x45\xbc\xff\xcd\x65\x1fX\xf9\x05\xa2/U\x44<\x35\x88\x66\x8f\xac\x9c\x46\x37\x07\xf1" "\xfeK\xbc;\x01\x33]\xa3r\n\xbfy\xc3\xf8\xa4\x01]\xd0XZ^\"X\x97\x33\xf6\x8b\x64H\x66[\x39\x65_p\x8a}\x14\x86l" "S\xdc\xdc%h\x8e\x31j+=\x00\x9a\xa3\x80\xa0M\xd8\x05\xbbW@\xf4\xc9%l\x94\xa8\x94\xe0\xa9,h\x8bm\x82\x16\x35\xbaR\xc2" "~\x01\xc1\xa1\xbd\xf7\x12\x1by\t\x31\xc6*\x37q\xa5\xe8\xa8\xf6\"\xb4\xd6\xca\x9f\x39/T\x98\xa5\xbe\xc2\x1d\x86\x95\n\x87\xbb\n\x16\x85" "\x05mV\\\xe1^\?\x41[\xd3\x16\xb4\xa9\xb1!\xec\x8f\"\x9a\x93\xa2\xa1\x9a\x8e\xcc\x9f\x42\x98\x85,\x13\xd4\x85\xcb\x1b\xcc\xe1\xc0V\x95" "\x0cS\xbb\x95-\xa6I\xc1\x63\xd4\xae\xc4\xad\x43\xa0\xb9\xbf\t\xda\x9a\x90!\xcb\x94\x9b\xfc\x04\xdfp\xd7\xc8\x13\"\x38\xb7\xe2\xe7\x36\x38\x43" "\x8eg\x15$s\x12|\xc0WY\x1f*\x98\xd0U*\xd8\xc9)\xb8\xb8J\x1a\xbfHQ\xe0L&=\xca\xee\x10\xd3\xc0\xd0\"\x1c\x1f\x65" "\x18\xa6\xc1`:\xb5\xb1\x1d\x15\xe8{\xec\x98\xf4\x44x\xd1\xca\xa2\xa7\x03~\x03\xbd\x92\x1d\x9b\xfe\x46\xb9\x33gq\x65\xf2\x9f\xe7\x38&\x9e" "$\xfd_\x98\x46\x95\xf9/\xce\xe0\x04\xa9\x62\xd1Q\xb7P\x0c\xca\x81-\x9e\xb7\xec\n\xae\xbc*\xd6\x1d\xc3^x\x63:\xb0\xda:\xa2\xb1" "M\xe5\x93\xa3\xa2\xb0\x96\x63\x94\?\x84\xb7\xb6\xb2\x0f]\x8fj\x16\xc8\x66\x8e\xf2\x18\x08\xcd\x00v\xf4\xca\xce\xf9\x0e\x33\x44\x43L\xdbM\x84" "\xa7;\xc4\xa7\x11\xbb\x12\x65\x88N/\xe2t\x9f\xc8\xdf\xcc\x0e\xf5\xff\x82\xb7:\xf3\xa3\x05x\x02\x98\x88H\xf0\x14yg\x36\x0f\x35\xd4\xb7" "WS'\x8d\xa8\xdf\x8a\xcd\x07\xc3\x0eG\xa5\x01r]\x18\xd3\xec^\xb6\x07\xdd\x98\xae\x82\x15\x86\x64~\xe5\xae#Gn\x15\x37\xd5I\xb2" "\xfd\x00LJ\x1f\x93\xbb\x7f\x8e\xa9\x13!\xf5\xdb\xed\xe1\xa8\xb1\xdc\xd4r\xd9\x12\xf2O\xc2R\xad\x1e\xfb\x8c\xf3\xf5 \x16\xaa\x41\xac\xdc\xc5" "\xd7~+\xfe\xd8\xb3Pg\x66\xb3`\x95\x0b\xec\x61\?\xb0\x65\xc9\x45\x36;\x13\xcb}*.\xca\x38\xf0\x9b\xd8\x0c\xdf\xd1p\xc4\xb5+g" "\xba\x7f\xbf\xd2\xdf\xb2\xa9\x8br\x94M\xdb\xd8\xcbj\x63\xc1v\x32,\xe4\xbc\x97\x63\xf3\xa2\x63:\x18#\x41\x1a\xd8\x30\xbf\x65\xacX\xf3\x8e" "\xa3\xb6\x80\xe3,\xe3T\x46Y\x08\x13\x07\xf6t\x06k\x82\xb1\x38\x7f\x1e\x8f\xdaq\x38\xb1\xe5\x37\xedO\xb7\xec\xcbr\xccX/t\x17\x9d" "\xde\xc1\x44\xae\x9f\xf9/~L\xffn\x39\x43\x44p\x88\xdb\xa3I\xe9\x0c\xb1{\x95\xcd\x1d\xc3\xdeh\x63\x9a\xadq\xcd~\xc7+\xf9\xe2\x42" "_\xed\xc7\x43`\x41|R\x07\xab\x46\xce\x19v\xa5\xa9\xf8\xca\x0e\xef\x8eS\x05\x45\xec\xf8r\x31:\xcfG\xb6\xb0\xa1\x07~\x89\xbc\xeb\xe5" "\xb5\xa3\xb4p\xb5+\xdb\"\xad\x1e\xa8\x11\x1b\x1a*\xaa;\x8c\x86\xec\xa6Vg\xe1\x95\xad\x1a\x98\xdd\xab\xd8r\x94\xff\xd8l(l\xddJ" "\xaek.r\xd2v\x87 \xce\x86\xa1\xf2\x8b\x38\x1f\xba\x88\x84 R\xfc;\xf5\xcc\xc9\xa2\x9d\x15U\x8a\xbbh\xb7\x84\x8f\xb3,\x97\x65\x9b" "\xda\x9e\x33\xef^\xa4\xc9\xc3\x9fT\xc5\xb5\xa3&\x62<\x46W\x14\xed\xa1\xfa\xcb\x88\x89lhz\xd2<\"\xc0\xabXp\x84\xd1*s\xc9" "\\\x1d\x97\nl\xbc\xca\x88!I\xbb\x1f\x88\x8f\xaf\xa5\xa9y\xc3\xe5\x31\x38k\xfc\xe7W\x35\x35@\x63\xf9\xcf\xe1wG,t\xab\xe8\x37" "\xfb\xa5\xce\x9f\x98h\x19\xebKQ\xf4\x9c%\x95\x46R\xb9\x0c\x0c:\xad\x89\xe3.\xd2\xf2*\x1b\xa7\x93G\x8as\xef\xc7\xa3\xc3&,\x30" "*\xbe\xeb\xff'>\xea\xe1\x97#\x36\x83\x89xt\xe8\xc3gt\xc4\x17w\x34\x8br\x93\xa8\xc4\xef\x1e\xf1\xa4\x96 \xdb\x10\xc9\xd7U|" "\"\xbe\x38jW\xddX\x39\x43\xe8Y\x11\x0bg\x8e\xe1\xf5\x14\xce\xb0q\xc5\x44\xce\x8f\x44\x1chv\xe9\x32\x0b\x01z\xb1\xa2\x37k\x44\x13" "\x32\xb4\xd4\x87\x15o\x9fr@\xfe\xb0m\x18\xec\x9f\xcf\x34\xf6\xf4\?,]\xfb\t\xe5\xc5\x16\xd3\xfb\x1fg\x08\x38\xa2\xe2\x8b#l\x83&" "\x62\x19I{\x9a\x1cq\xea\xb8\xa1\xce\x00\x8b\xa5\xe2\xd0\x1b\xbd\x88p\xd3\xa9l\xad\xa3*V\xb1\xfe\xa3\x62;\xca\xf3\xba%\x96Y\x89}" "Z\xe9\xcc\x11\x86T\x15\xd5o\x36[l\xa6\xd7\x45\xbf\xa7\xa2\x1f\xf9\x90'\xcf\x8f,\xe8*V}\xa8\x97)\x66\xec/\xa3\x34p\x44\x16" "\xc9\xc0\x64l^\xbd\x38\x8b\x8au\x1fn\x95\x9d\?\xa7\xfd\xa7\xc0:y\xef\x90\x02\x93\xd9Oz\xbe\x44\x82#\x1e.\xc0\x66\n\xf6\xbc\x97" "\xf9\x89\xccq\xbc\xe7\x37\xb6\xe4\xec\xd4\x98\x66\xe6\x0c\x37\x15\x9bj\x95\xb9K\xd1\xa0\xe2\x93v\x86\x85\x12.\r\x92\x65\?\xb9\xb9p&\x0f" "\x93y\x1e\x11\x11#\xc4\x98<\x9a\xab$\x9c\x06(\x46\x1fK\xf8\x88\x82\rK\xd1\xd9\x65\x86!\x66\x04\xd8\xef\x8d\x8bp\x30\x44\xd2q\?" "\x80]]q\x31&\xf3\xf5\xd1\?" "WV\x96\xfe\xbe:K\xbc_[\x99\xd1\xc4\x95\x36\x63\x34\x04\t\xd3\x44\x1c\xae\xf1G\xabJP\xfbV\x15\xadJ\xbf|\xcaU_\x7ft" "\xf4\xf5\x0f\x63\xf7\xe4\xb3\x81\xf5~\\\xba\x8c\xdb_\xfa\x97\?\xdfT\xfd\xe3\\\xd0^\xd7]G\xbd\xd3\x1a\xdeH\xbc\xb3\xe3/'x\xfd" "\x43\xcc~\xa7\xeb\xe8\xd5K\xc4\xb8\xb5\x07\xf7%\x63j\x04\xe9\xdf\x04\x36\xdd\xdd\xb2\x9e\xfe\xdf+\x93\xbd:\x62-^\x07\x80\xf3x\x9f\x17" "\xd8\xbd$\xd6\x88\x03\xc7t\xfc\x03\x07q\x65\x13-\x35\xceV\x84\x61\x37\x42\xe6\"{\xe5\xed\xa1G\xef\xd3\x90I\xd3\x30\xde\x9aQ\xc0\x92" "\x39o\xcb\x7fvP\xf2z\xa4\xa2\x7fW\xc5\x93\xcc\x07\x08\x9ak\"\xcd\x8fw:m\xf5\x0b\x1d\xb4\xd3\xae\xff\xb2\xeb\xe8u\x1b\x9b\x02\x05" "\x8f\xf2\xda=Q\xefG\xa4@\x45\x16}\x9e\xa5\x98_\xc3\xf5U\xc4\xc2\x8e\xa3\xa5\x1e\x9b\x65\x98+\xca\x64g\x37Y\x46U\xd7\xd9 \xcb" "\x38h\x92\xb1\x8f\x04\x8b\x8b\xaf\xd2\x05\"ym\x38\x46;\x07\x19\x07<\x30\x99O\xc8\x84\x86Vr\?\x46+!\x18\xfc\n\x02;\xca\x9e" "\x19\x99\x7f\x9dy\xbf\xa5lv\xe2\xb6+\x65\xcb\x66\xe6\xc9\xb9\x04k\xe2\xfa\x34\xde\xefgX\xda\x0f\xa7\xd7;\x63sQv]\x92\x8f\x33" ",\xd4\xc2\xc2N:\x0c\xcf\xb7\xd9\xd9\xf3\x19\xbd\xb2\xfbU\xe6G\xc2\xb6\x17\xf3{\x63\xd9\x1d\x1f\xc7\xa5{\x8a\x17\xd8\x02\xa2\x62\xc7\xf5\xb7" "\xf8\xf8\x1bx\x92\x43\x8aY\x15\xab\xfa\xbf\xd5\x0e,\x88_\xdapO\x30T\xb8n+\x1d\x99\xe3\xdf\x82\r\xb1\xd8I\x16\xf3\x14\x31T&*\xc3\x82\x9a\xe4" "\xf7\xe9\x85\xa6\xfe\xbb\xd8\xf3\xd5\x9b\x88\xf0\xef*\x0e\x1d\xe1\xbe'\xe2\rOz\x33u\xb4\x10\x83l\x89\x61\xa5M\xc4;\x62\xc7\xd1\x15\x14" "\x38\xc2\x19\xea\x1b\xcb\xcf\x9d\x85\xfe\xa1Zt\xf4IO\\\xd5\xf9\x96O\xfb\xe2\xda\x84>\x12wH\x8d\xa9X\xf1\x41\x07\xdb{\x14\xb9{" "G\xc5\x33\xeb\x95\xba\x19\x16\xf7\xf9Kj\x9a\xe1\xf6\x44\xe9\xf7\x1e\\\xc4\xd5\x65\xe4\xfdL\xf3]\x7f\xe6\xdd\x00\xad\x8f\x9a\xda\xeb\xf4\xc6M" "\xf1\x9a\xc5\xdeG\x82\xe6\xccM\xd4*\x36\xce]L\xf7:\xd8\x42\xa4\xf5x\xdfQ\x8b\xe2x\xed,\x63\x19\x95\n\x8e\x9a\xee,Y\xb0\xc1" "\xb7\xee\x91\xd6\xc1\x45\x9d\x90\x0f\x0f\x32\x07\xe2\xe3\xebM\xed\xcc\x0f `\x9c\x88\xde\xedx]i\xcb,\x80\xe7\xb9;r\x9d>\xbe\xfbu" "t\xc5\xc0\x44>\xf5\xdd\xd4\x11\x65\xa2\xf2\xec<\x84\x9b\xb4O\x90UN\x45\x66\x8c\x10\x91\x13\x83\xf8\x81\xe5\xf5\xf0\x91\xcc\x8f\x42Y>\x42" "[\x14\xed\xce\x95\xaa\xf8\x9du\xf1\x9d_\xf1\x01\x8e\x66M\x41\x37L\xc7\x1f]\xc4I\x13q\xc0\xa7\xe6\xc4U\xd0\xc6\x81<\xe2\x14\xd8\x01" "-\xf0\x7f\x8c;\xbe\x02\xa2\x33\xf7\xd5\xbe\x9b\xe6\xe3\x01\xab\x07\xed=\x82\xa1\xbd\x89\xc8\x99\xab\x8a\xdei\r\xf9\x43/\x88\xe1\x38\xd4\x83\xd1" "=\x9d\x0e\xee\xe0s\x65\xa8\xaaW\?\x1c\x8d\xd6j\x44r\x16\x9f\xd2\xad\x0bLgT/\x81\x35\xd6\xd8\x31\xa3\x8c\xbd\x97\xba;\xf0\xe6\x38" "\xad\xb0\x38\xae\xc5\x30,L\xd8\x97\xfd\xfb\xae\x9c\xfd\xafZ\xee\xd3'\x84\x38\x32\x8c\x1a#\xf5\xac\xe7\xda\x90\x1c\x90\x36\xea\x66\x11\x65{\x1f" "\x41\xcc=Q\xfcp\xdbgr\xf0\xec%\x80\xc0z\x86\xc9\xbc\x84\x1d$\xc2\xf2\xaf\xc4\x11\x11\x35\xd3\xa7\x15\xd8%\xa5\xf8\x42\xfc\xd6\x9b>" "\xdd#\x9b\x62\xfb\x82\x89\xde\xba\x34\xcc\x45\x01\xd5\xc8\x95\xd7\xe4\xe4]\x93\xd1\xec\x92\x9d\xa2%$\xc5\x93p\x9d\xe2\x10\xb1\xdf\x45\x64\xbb\xd1" "@\x8bGK\xef\x14\x95\x95n\x36\x95i`\xac\xe2\"z\x17\xa0\xe2\xf6\xeb\xc1\xf1\x15\xec.\xfc\x32\xa1i=\xb9\xb8v\xcc\xa8;\xc2\x92" "\x1b\x8c\x83I\xb9\xbey\xab\xfa\x32\x95[\x32lwX\xd7\x45_\xf9Q\x65\x93UVw\x80yq\xb1\xae\xeb\x30O\x93\x80\x88\xdbOy" "#\xd7|\x94\x9b\x43G\xed>\x39ks]X\xd0\xb5_\x11\xbd\xbb\xd2\xcd%\x1c\xa8\xc2m\xdf\xb0\x12Ur\x8e\xd1\xc5<:o;\xd3" "}\x13\xbb\xbf\x64G\xe1\x1d\xd1V)\xe8K\x43I\xa5\xe1\x98\x9e\xa0\x07\xc1\x36\x33\xc3\xb8\xbcJ\xda\xe8\x16\xdc\xce\x0b\xe7o\xc5\xbe\xa3O" "_\x45\x0c\xbfm\x62-#\xa1\x85'i\x41+q\x95L\xd0m\xed\x9a\x06\x82\nk\xc8\x08!\xe2\x1d+\x1dV\x90\xef\xe0\xd8h(\x43" ",=\x44\x94\x65\xab\x8c\xc7\xf0\x17\xb1s\xeb\x18^\xae\x89n\x9br\r\xc3-\xc6\xc9s)\x9e\xe4\xbd\x9fH\xb8>!\x18u\n\x08!" "\x0f\x46MN\xc4\xec[\x15&u\x7f\xc1\x12\xf2\xadq\"\xf6\x8a\xc4\xa5\xa3\x06\x1f\xe4\xdc\x93\x8c\xba\xa7O\xda\x05\xdd\xf2\xa7\"\r\x44&" ".\x83\x38+!\x81\x9a\xb1xk\r\x10\xa6\xee\x88\xde!\xbc\xfc \xc6\xb6\x8a\xb3\x8cM\x45\x98\xab\x06\xc9\x9bj\xd9\x19#\x84\x1c\xd8\x94" ";\xff\x1c\x18\x38\x06\xf1\xfd\x99>\x0bw\xa2Y\x46O|G\x1f\xac\x1a#=\x1f\"\xbc)\xe3\xad}\xae\xa2\xb3o\x17\xe3\xc2U\xb4|" "\xc9\x30:T\xde\x85\x84G\"~\xf1|_s\xa4\x05\x12q\xf6\xec\xea\xa9\x0f'\xba\xaf\x88*R\x32\xd3\x91\x35:\xbe\xf5\x15\x99\x64\x36" "\x93\xc1\x10^\xb4\xca\xd6\x8e\x08\x0e\xe7\xa2\xe6\x1dj\xb6\xb3\x07V\xcf\x88V\xe3\x07\x10\xce\"\xb0\xd2\x85\xa8\x05>\xc6\xfa\xb1\x61\x96\r\x16" "\xa9\xf7\xbbv\xc0\x17\x46\xc9\x8a\x0f\xfa\x42\xe6\xff|\xa3\xd8\x11u\xf7\xdf\x93\xaa\xfe[\xba\xf8_\xc7\x36\x32\xdb\xfe\xf7\xd8\xd7\x43\x86!u" "\xaf+P<\x66\xa9]\x35L\xd4\x45\xf5\x8f\xea\x0e>qs\x0eYp\xfd\xe1\x81\x90\xe1\x15\x07v\x33O\xb2\xa8:\xc6[m\xde" "\xe7 \x82\xc8*\xebls\xf9@'-\x61\x33\xc7\xd0H\x96\xba\xd1\xca\xb5\x07\x64\xa1\x34\x8c\x8f+n\x33RV\xec\xb9\xf9\x30Y\xf3\x82" "\xeb\x85\x63\xbas\xbay\xbcu\x86\xb0\xf3\x95\xbbtg\xee\xa8\xedi\xf8\x94\x65+(R\xe9\xee\xb1\xe3\xdf\xb4\xe4\xda\x8f\x32*\x18\"\xa6" "\xdf\x37\x14O\xe9\x89)\x62\xd9\x97\x0b\xd3=]yt\x83\x43\xba\x7fH_-\x11\xdft\x15\x0c\x9e\x92w>\x65\x11\xd4\xc5\x05*\x35\x64" "\xcb\xa9\xb3\xf0\xc1\xc1\x1e\xf1\x38~*\x66\x44\xa9\x1e>\xba\xa5\x07\xa5\x98+\x32t\xfe\xba\xa3\xdb\x9c\xe0\xabW\x8d\x34\?\x8d\x0bk\xa9X" "\xde\xe3\xbb\xea \x98r\x05\x0c\xfb\xb3\x05\x8f\xf7|\xd6*\x62\xcc\xc5\x30z\xdb)z\x9d\x91\xc1*\xde\x45\xf1\xa7\xa7\xbc=\?W\xe9\xd4" "\xd5\x05\xd1\x81|\x16\xe6\x03\xab`\xbc\x35K\x81!q\x8e\xb2\xba\xcf^\xd3\xda\xad\x63t\xda\x97\x37\x03\xc6u\x05\x41W\x05\x44\x0c\xcf\xe3" "%}\xdfq\xcc(\x8a`>U\xa3\x0f\x9b\xa2[n\x10\xbc\xd1\x30\xbc\xcc\x07(\xd7[\?T\x15\xc3=\xd2\xc6\x96v\x0f|\x65\xd1\xd5" "u_\x95\xc7\xd6\x1b\x41\x0e\x39\xba\x19t\xdeq;\xb3n\xb9\xd1\xd5\x8a-\x1bL\xddR\x90\xf6\xef\xa3\xfc\x65\x10K\x03\xec\xff\x35\x96\x0e" "\xf9H}\x99k\xecS\xec\x13\x87\xbe\xc8\x06\x11\x0b\xeb\xe1\x00\x97\x12\xdc>\x92RM\xf7\x41Z\xf0oy\x1d\x8a\x8c,\xfb\x99+Y`" "\xa1\x38\xfb\xb3\xcc\xaa\x63:\xa8\xbbMMz\x0f\xb5\xef\x0c\xc6Y\xc6\x11W\x98.\x16\x86\xcf\xa0\x66\x87\x87\x1b\x16\x61\xef\x8e^Y\x0c\x34" "\xcf\xf8j\xa6\xa0\xfb\x91`\xc3\xb3\xe0\xf7\x01\x36i@\x9c\xf1-z\xf3\xfd\xbe\x89G\xd0t|\x45_\x43\xc6{\x93\x9f\x04L\x97\xf3\xcd" "\xd1\x99\x33\x11}\x01\xc3\xfb^\xdd\x38-w\xfe=\xcc\x30\xfa!\x07\xc6\xf7\x42\xdb\xb0`\xbc\xb5\"\xd3\x05_Q{X\xf8\x35\xdf\xa5+" "\xb6-\xf6z\x82H\x04\xab\xe2\xd4\x11{\x02M\x8c\xd5\xa9#\xe7L\x9b$}x\x34\x61\xef\x63\xd1\xcd\x06\x08\x89m\x18=\xf1\x06\xd6M" "\xf7\x01\xc9\xf4\xd5\"\"\xcd\xb8\x8a\xd3\xcc\x42\xda\x66g\xcfQ\?+\xbe\x91\x15\xe2\x13\xdc\xaa/r\xfa\xea\x9a`\xcc\xd9\xc3\x66\xb7\xef:" "\xab\x88i\x19w\xbf\xd9\x43\xb9x\x39k\x44R\xf6|\"z\x0f\xaa\x62\xfb\x8b\x62\xd1\x95\xbf\xed\xa7\xa5h\x00\x95\x42\x37\x9a}\xf5\x44)" "@\x08\x06=\xf0\x92\xcc\x9f\xe9\xd1|\x87$(\x82W(\xadM\x39O\xac\x39\xa6\x83\x01\xc5{Gl\x30\x37\x31\xf6P_\xc2\xe8>\xe2" "\n\x9c\xa0;z`W\xb9`\xf5\xd3\xd1\xbb\x8dM\xd5\?\x9a\xbbJ\xed\xaf\xce]\x08\x04\xbd\xefU\x91:\xa8\x8a\xd4\x41!\xfa\xfcK\x98" "\x1bx\x44\x94\xae\xd9\x95^\x61\xf0\x81\x8d\x9a\xbdM\xed\x05[\xa2\xe5p\xbd\xe4\xdeP\x9b\xfa\xb9\xf7\x61\x9bzM\xdd\x11\xa6U\xb2\x66\xb8" "\xbb\x06_Ps\xc7\x31z\xaa{\x63\xdd\x34\x9b\x8e\xe1&Z\x35\xd7\xea\xdc\xaa\xe5nJ\x82\xf1\xd6\x1f\x8a>\xd6\x8a\x32\x63\x91j\x18\x8f" "\xda\x7f\xbfM\x99\x17\xa7\xb4\x0fnny\x0f\xfe\xee\xdb\xdf\xae\x62\"x\xa1\x62\x30\xc9n\x1e\x0e\xbc\xcf\xd8<\x1c\x12\xfd\xa3\xaa#\xc2%" "\xa8\xc8;\x87\xe3\xf4\x9d%\xb0)\x44\xc3Y\xfc\xfd\xba=p\x96~\xff\x64\x0e\xe8\xd4s\xcb\xfe\xfd\xcc\xbb\x12\x44\x02\x17|\xc1\xdc\x10\xb1" "p\x05\?r\xa1\x66/\xd7\xaa\x9d\xd8.\xf2\xca\x03M\xd9\x0f\xd8\xc7]y\xa0q^\x91N}\x0f\xb4\xd0\?P\xf3Q\x0c\xbb+\x85\x61" "\xb5\xef!Z\xed\x38\xea\x1c\xe3\xb2HVq\xdc\xba\t)\x93\x17\xc6\xba\xfb\xa0\xcb\x8b\xb3\x93\xa8\x7f\x0b\x06\x0b\xe7\x03v\x42\n\xc2\xc2\xaf" "\xf8\x37\?\x8e+\x1d\xed\xfe\xd7\xb9H\x83\x1b\xb5\xf0I\x8b\x81\xe7]\x94q\x30\xea\x17\xfc\x18\xc2G\x1bj\xd8\xf1\x8f'\xb0\xe3w]\x1c" "\xc0z\xf1\x83hH@\xa8G\x0f\x1cT\x1f\x64$\xa5#\xd0\x03\xabSG\xb7\xd2\xff\x16\xe8\x06\xdd\xa1\xa5WQ{V(\x1f\x1d\x1d\x32" "\xeaGt\xc1S\x96t\xe7\xecu\xc9\x62\xb8+\x08\xf3\x0e\xb2\xc3\xc5\x1d\x45y\x80\xb8\xba\x1f\x98>m\x85l\xa9\xad\xea\x92\x97\x81\xc3\xb7" "\x62\xf4\xf4\x42ot\x63\x9f\xbb\xf1\xcf\xc8\x99\x06\x61\xda\x32\xad\x45\xfb\xe1w\xba\xd9k\x36\x63\x9f\xd6\xe1*o\x87v\x0f\x45vs>Q" "\xefH\xa5\x10\r\x1d\t\xb6\x85\xad\x0f\x1c\xe3|\x95\x9e\xc0\xc2p\xb5h\xb7\xc4\xedy\x1d\x84xQ,\x38\xc6\xdf\xe3\x8c\x88\xcc\x36\xce\xf4" "\x00\xf6\xa2\xe8\x01\xaeg\xaa\xa8\xc9\xb9\x64\xf6\x87\x01_\x0e\xf4\xb6\x17\xe0\x35\x0fs\x8e\xc9\xd5s\x46\x94\xf9\x0e\xd5\x13\x39p\xed\x88\x00\xee" "*\x36\x80XiU\xcc\xbc\x65\x44\xc8P\xe4\xb7\xf2\xbc><\xac:\xba\xfd\x15[h:\x34\xeav\xa2\xb3#-w\xac*\n\xe3\t\xce" "*\x9b\xfd\xfb\xff\xf3\xffT,J/\xf1\x7f\xff~\x8f\x34\x84[\xf1\x10\x1f\xc3\xf5\xa7\x43\xbf\x8cNt\xb3\x43\x9d\x8e\x62\x88M*\x07\x9a" "\xfcN\x93\x05\xd0\xe4\xf1\xd6\x11\xf1<>\xd8\x45\xac\x02\x65\rG\x9d&\x34P\xd5\x10\x41\xd0P\xc3s\x35x\x93\x96\x81t;\x0bPG" "]\xf3\x8f\xe7\x13>\xb1\xf4X\x07\x04\xa3\xdc\x82&\xb8\x0e\xed\xdc\x1d\xeaK\x1d*\xb1\xa2m\xf2\xb6\x86\x07\xb4W\xa9H\r\xd5\x42\x10\x36" "\x16\x14G\x1a@l\xc8\xa7\x1bi\xf5M-\xaa\x81\x30/\xe4\x1f\xe6\x89P\x91\xef\x14\xbb,:\xf4)P\x0c\t\xfd\x8c\x85\xd0M\xc2\xa0" "\x14\x08^\xcb\xc9\xbd\xddx\x03\x95\x0eL\xdf\\\xab\xf3\xef+Y\xefs\xd8\xe9 \xc2\x81\x61\x32\xc4o\x65\xee \xc5\xc0%\xecN\xbc\?" "\x05\xe6\x8a\x99r\xe3\xfa\xaa \xbf\x05\xafq\x86\xe1\x34\xe4|\xa0\x83<\x36\x95\x0e\x02\xc9\t\x62\xb4\xedp\x99\xa8\x83\x9c^\x8a~\xdc\x82" "\xae\xc1\x8b\xa1\xc3\x45$\xdd\xf1)\xbd\x90\xf7\x34\xe1\x36\xf0\xc6\xf8\xf2\xe2\xca\x30ZW\xbd\x11I\xa7\x93\x65\xb5KG.\xf2\xa9\xb8i\xf4" "\xe2\x9f\x13\xb2k\xe2\x8f#\xad\x19\x9d\xb8~\xe3\x98\xe9\xb0\xe2z\xdfq\xb3S\xa6\xad\x8bL\x94\x41\xb0\x46\x33\xdcj\x83\x8f\xc7\x1eRP" ":@\x9a\xea\x8d\xcd\xca\x88]G\xf6\x14n]J#'o\x65g\xcb&H\xd6\x0eV\xdaKW\xe1\xdc\xd1y>\xb9\xec\x06&\x63\xc4" "\xc3G\x96}\xef:\x93\x8b\x65~\x17\x1e_\xc4\x65\xf8\x45\x32/i\xda\xbdQ;\xfe\xfc\xd2\x1d\x88\xcd\xf0\xfdtZH\x7f\x8a\xce\x36;" "\xabt\x1d\x9eK\x35Ov\x8dq\xf3\x8c\xd8\"\xfa\x33\xbdkv\xed\xd9k`\xec\x92\x45\x94\xdeO\xa3\x08\xc3\xed\x99\x07\xa2s\xdf\xdah" "\x07\xf2;\x41\x64\x17\xa5\x62\xb1-\rT\x9a:\x92Xr}\xdf>\xb1H\xca.z\x95W\xf6\xf4\xc2\xcd\xc8\xc6`_\x32\x91\xadJ\xc4" "\xb8\xbc\xd2-gg%\x1a\x99pl\xcdM)\xc6\xda\xb7i\xfd:\xb0\xef\x1f\x17\x61%\x83\xc5G{\xaa\xd2o\xf8\xc4\xa2\x93\x65\x9e\x31" "y\x93y\xea\xf6\x87\xa3/\xa4\xb4\x01\xb3\xb8\x61\xff\xb2\x10q\xc9\x8e\xa5\x07\x17\xc9^\xf8\x46\x9a\x7f\xe5\xc6\x32\x63\x03\x7f\x9d\xef\x9b\xab\t" "g\xf4\xc6}\xb5\x86\xfcL\xd5G\x91\xee\xc6\x0c|\xae\xc8@\xf6\"N\xef\x1c\xe3\xfd\x01\xc5g\xa0\xa5\x62R" "\x0b\xa2\xc8\xbd\xe8\x05\x63\x8f" "\xd9\xaf\x0c\xb7\xc4)YW\x63\x1do_\x13\xdd\xac\xba\\\xdc\xe8\xd2\xbd\xb9K\?\x97.{\xec.\xe7\x43\xdd\x10\xec\xd3\x44\x1d'.x" "\x33\x98Lw\xe3\xda@\x8a\x12Q\xd7\x85\x61j\xdd\x8d\xef\x0f\x11\xf6J\xc5<\x10\x8e$]\x44\xca\x15\xfco!k\xe5\x30\x16L\xba\xf4" "\x8a\xe8\xfaK\xd2x\xdf\xcb\xcb\xe8\xe7\x01,\?\x8a\xfak\xc4\xe2\x11V\xc8\x13\xc9\x65\x84}\xcc\xe9\xe0\x8c\xe1\xbb\xcbu\xed.\xe7\t\x8a" "\xea\x35o)\x8b\x8dm\xea+\x84\xba\x17\x86\xa5\xe6.\xa2\xa1r\x33\x8a\xb0#\xaf\x8b\\k\xee\x86\xc0\xa8.\x66\xca*\xc4=\x15\xb1\x8b" "\xa2\xe1\x16\xaen\x36Vi\xc5w\x99v\xd3\xfc\x14x\x8f\x13p\x13i\x97\xeb\xd6\x8a\xb1\xa7\x7fPV!\xb6\x80\xc3}G\x8e\x8c*\xaa" "\x06\xb8\xe0i\xb1~\xddM\xc7\xbc,\xfa<\x45\xce\x0cM\xfc\xdd\xe3\x9cO\xd8\x80\xc8\x13,\x9f\x1d\xb3\xdf\xc2j\x7f\x17\x89\x9c\x15\xf1\x12" "\xe9\x90\xa1\xc8\xf1\xa1K=\xa9\x8b\x9c\x83\x86\x7f\xf3\x63\xb2\x1e\r\x42=\x9a\xd7{\x34>\xf5\x34ki\xb5\x90\xeeY\xbb\x91\x16\xbd\xc3\xd5" "\xb5\x17\xee\xa4V\x64\x1bU\x91\xee\x00\"~\xc4\xb5:\x44\xf4i\xbe\x11\xeb\x05\xc1\n\r\xd9\x1cU\x94W\x87\x0c\x83\xcax\x0eX,\x14" "\xd9\x9b\xbe\x44\xb9<\xf0h&\xa7\xa7\xbb\xf6\x0b\xb7\xbe\xbf\xb0\xefz\x89\x8e{\xf4\x9f|\xd1\x9cGO/\xe1\xe7\xc5\xb9\xfe\xc7\x36\xa5\x17" ">\xf2\x0b\xcb\xf2%z\xfa\x00\xbe\xe0\xc6\x11\x93^\x10\xa1\x01^\x10\x1a^\xf0\x87\x1cV\x32\x45l\xe7\x04\x43\x44\x96\x17\x7f\xb6x\x17\xc7" "\x39U|\xe1\xd4\xf0\x05\xf1@\x05\xb1\x14\xf6\"\xf3\x42$\t\x14\xb1\xd2q\xd4\xf0\xedO\xfc\x42\xe5\xc5\xd1\x9f\x07\xc1\xbd\x05Y\xd4\x31Z" "\xc3\x0b;\x81\x17N\x33\x14\xd5\xf7qV\xde\x32\xf7\\\x34v\xf7\x9b\xae\xce\xe9\x0f\xa7\x07\x92\xda\x92\x15\xfb\x85\xea\xae\xa2\\\x85\x0b\x13/" "\xdc\x1a\xf5\x12\x7f\xe1\x37^)\x04\x39*\xa8H\x8f\xc4\x97\xe4\x10\xb7\xc1^\xe2\x85\n\xab\xa2\?\x89\xa8\x36\x9a\xdb\x1cM\xe7\x85=\xc0\x8b" "\xd7&\x41\xf9\xcf\r\xca/l\xfe\x8a\xff\xddz\xb8\xfd$\xde\xb3\r'\xff|\x42\x85\xfe%\xe9\xe2\xc5$\xbd\xb9\x63R\x1e\x86\x8c\x1er" "\xbd\x9d\xdd\x64|\x07\x91\x85\x85|\x9c\x82\xf7(\x87t\xd0!\xae\x80\x16\xa3t{\xabj\xd0\xdd>\x06\x9b\xf0\x0b\x17t\x04qST@" "^h\xfb~\xd9<\xa1\x18\x10\xd5\xab\xf2NS\xd5;\x02\x45\n\xa2\"\xbe\xb3\x8a\x31\x98\xac`\xc5q\x02l\x96\x89m\xa2\xbd\x8fw\xc4" "}\x17\xc4]\xbf\xa7\xab+\x9b\xbc\xe2\xac\x9b\xbd\x0b \x82p\xbc\xd3\xfc\xfc\xc1\xb3+\xfe\xfd\x36\x19\x99\x46\x99\x94-Y\xdf\xfe\x06\xf2\xc7" "\xf7\xaa\xcc\x91\x87\x86\xaa^MO\xa2\xe3/gQ\xff\x9b\x9d\xee\x08It\x05\x17\xd6\x44G\xd1\xe1\xd0\x91\xadt\x14\x15\xf1\x15j\x12\xa3" "\xe8\x03\?\x65\x61\x8c\x38\xea\x8e\x62\x98\xf8G\xf1\xdd\r\x10k\xb7\xa3x\xd2r\xfc[\xb7h\x8d\x19\xd1yo\x44\xe7=\x45\x46\x0b\x1a%" "g\x1f\xc0\x32\?*\xe3\xc2I\xb7\xeb\x18\x0e\xa1*\x8d\xb8v:\xe2\x98\x32JO*\xd1\xaa\xc2\xaev\x94\x62\?\xe2\x88{\x1eG\\\xfb" "\x1b\xb1\x62\x8e\xa4\xcfN\x8b\x9f\x10\?\xf6\x1d\x35\xea\x03\xd6s\x46\x9b\xdf\x0f\xb6\x94\tm\xd5\xba\x83!:\x64\xe4p\xb0\xd2\x80Kr\x13" "[\xec\xbc`@\x0b\xb2h\x95\x0b\x0c\xb5\x65\x82\x44L\x8a\x33\xe2\n\x38\xbd\x11\xd5 \x9d\x1e\x39\xd3\x05\xff\xe9M\x86\xc5'\xb5\x0c\x0b\xdf" "\x9c\x9d\x38RoRq\xeb\t\x66\xeci\xe5\x62:\x38\xe0Z\xf1\x84\x1d\xff\x84\xf3(\x1f\xd3\x15\xf5\xc9\xa0\x97)\xd3\x64\x36\xb3\xaf\xc0\xa6" "kV\x12\x65\xb4\xf1\x9b\x38,s\xeb\x87\xb2\xad\xe3\xa3\xb0'G*&\x13\x86\x1e\x98\xfc\x41\x43\x9cP\x89\x98Pu\xf6\x41j\xc2H\x04" "\x13Zx\x14\xff\x16\x8b\xa4\xff\x11\xff\x87\xc5I\?\xd9\xd4\xbb|\xb9\x13\xa4\x45\x12<\xacip\x92\xd5\x19\x99\xf4\x13\x93\x64\x9f\xbf\x80\xc1" "z\xc2\xed;\x13\xaa\xe9\x13\xfa\x7f+nw~+\xe3\xe4n\x42\x1f\x92\t\xbd\xa3\x15\x37;w\xdb}\xa8\x13\x1a\x9a'Q\t\xefO\xd3" "\xae}\xee\"\xb3\x96\xb3\xa4W\x0el:\x0e\x9f\x35y\t\xdd\xdd\x38\xe1\xc2\xe1\x44\x46~\xfd\xdf\"\xeb\x37\x89\xaf\xd4\xae&\xdcK\x37\x41" "\xa0\x65\x41\xecKs\xe7\xff\tM\xbb\x93h\xcaG\x9c\xf1T\xbak\xeb$\xee\x1f;\x93G\xd9\x32G~\x17^;\x82o\xea'\x9f\xb3" ".\xd8\xb7\x04Lh\x9a\x65\xc2\x02\x41\xc4\x0c\x99\xd0\xf3R\x11\xc6qg^Y\x39\xcd\x9f\xd0@;\xd1\xe4\xa7\xf2\x8e\xe6\x1f\x64\xfe\xe9\x14" "X\xe9\x38\xea\xa2\xd1S\x9dl\xe2\xa8/\x8d\xef/\xae\xaeT\x95\xaf\xa3\t\xcb`\xad{\?*\xfc\xac\xd9\xd0\x8d&\xd0l\x98\xd5\xa3\xe2" "\xce\x63\x13M\x8f\xb1>\xcf\x88\xc8\xf4\x1c\x18\xdb\?\x18\xe3UM\x10\xb2\xbe\xc2\xb0\xda\x86\x9a'\xf4\x96\xe7\x81\xbb\xcb\x84\xab\xea\x93\x64\xef" "\x97:\xeb\x84\xa3\xfa\x84s\x8bIr\xf3\x06\xec\xce\x35\x10h\xa9\x1a\x98\xbc\xaa\xf2\x34\xc3\xd2\xf5n`\xeb\n\x37\xbeM\xb6\x36\x98\t\r" "s\x8a\xdb\x98o\xca\x92\x97\xb5\x37\x1c\x61T\xc2\x45\xc4KK\xe6\xa7\xd2-\xa5\xdf\x0f\x64\x1d\"~\xc0\x15\xbf\tW\xfc&\xb4\xb8(\x42" "\x1d\x00\xc3\xe8\x37IK\xa8\xadi\x19\xc5\xe4\x37\xc1\x08\x1f\x8a\x9c\xbc\xab\xe8\x37\x0e\x31^\x94\x03\xb3P\x96\x11\xec\x03z\x80\xb1\xee&\xb4" "\xacL\x90yKp\x80\x36\xc8\xa9\x82\xa2.\xba[\xa2\x15\x65y\x99~\x03\xda\x16\x41\xc1Q\xdb\x91O`\xa2\xb9\xa2UO\xd1\x36\xaa\xa7\xb0\xd4\x0b\xae_\xd5\x03\xc2" "\x94\x83\xea)\xe6\x84\x86\xfe[X\x9a\x0c\x83\x07\x83\x30\x8b\xff'h{\\\xab\x45\xf5\x85\xa9W(\xda\x0f\x8a\xea,\x61\xdcT\x44\x41\xb3" "\x0f)\x16\x1c\xe5'\xf1\r\x7f\x35\xeb;\xa2SWq\xe6\x88\x8d\xdb\xf2ut+~,\xda\xadg\x8f\xa1Y+\x46}\x9e\xd5z]\xc5" "'\xa0\xd9\xce\x05\xd7\xf7\x88\x1a\xa2\x62\?\xbe\xcb\x43m\xcf\x30\xdd<\x39{\xb6\x8c$\xf8\x04\xd3Z\xc3\?s\xc9\xac\x32J\xa4\xa1\xdf\xb3" "\xba\xb9\\\xb5 \x1e\xbe\x03\x8fv\x80\x32\x1b[,`\x06V\xd6 \xf2\xdb\x36N\x08\x9e\x89\x9a^\xd8\xd4\xbe\xc9\x8e\xa2\xfe-\x36,\x1a" "\x93\xdb\n\xac\xf4\x84\x8c\xd8.\xb2J\x15\x31\xa2\n\x9e\x17Y\x39\xb9\x88/x\xf5\xe9\xa8\xb1\xc3,\xae\x89\x30\xcbt#x\x33\x07\x9ay" "I\xf0\x8e'\x34\x8f\xdd\xea\xf6l\xd2I\x9e\x0f\\\x84\xfe\xa3\xe2k\xd2\xb9\x81\xf8R\x8f\?\x1e\x11kI\xd8\xeb\xa5\xb0\xa8\x37!\xab\x03" "\?x\xd1\x8fVx\xda>\?\xea\xdf\x62\xb1O\xc5G\x7f\x97\xd8\xcf\x61(\xa5\x90\xf6\xd7\xce\x92\xeeI<\xe0\x93\x0c\x17\xe9I\t\xa3J" "\x86\xb1\t\xe9\x81Mu-\x83\x86\xf4\xfc\x08\xd6.\xc7\xd0\x81)\xb2r\x17\xa3\xcf\x8a\xbe\xfe+\x96\x82\x19\x1c\x0c\xc3\xcb\xb2\x38\xa8\x86\xf1" "~{\xf3\xdc\x0b,WL\x96ug\x08\xf9YU\xb7SuR\x34\xedH\x19\xee\xd5\x39\x0c\x19\x82\x39\xf2\xfc\xb9\x97#\xac\x9b\x8a\xef\x7f" "\xf3\x83M\x8d\xec\xf8\x81\xd8\x01^\x1c:\x62\xb7V\xb5\x88\xc9\x8f\xa0M~\x0cu\xad\xe5\xf5\x94\x0cu\x10\x33\x1e\x43\xf5@g\xe9\xc3\x17" "U\x91\x99\xcc\xab\x45\xa8\x11\x86\x9b\xf9\x01\x9c\xf9\x95\xbd\x10\xf1\x66\xd9\x01)&\xb5%\xa2\x9f+k\x13y\x8e\xea\xca\x31\xa9\x1f\x44\xa5N" "\xfcu\xad\xfbR\xc6|(\xcbQh\xb8\x15y\x63\xb5!q\xe6h;\x98y>v\?\xda\xa7|\xa1\xf2@k\x30\x0c\x1e%\xc6\xe2\xdf" "\x1c\x94<\x65\x15G\xf8V\xa8\xd8r\xf4\xfe\x02\x16\x35\x43\xf9\xadW\x83\xb8\xc5\x1f\xb4:Z_V<\xff\xed\xab\xa3\x0cq\xe9\xec\xf3_" "&\xdfL\xfa\x1f\x9b\xfa\n>\xbe\xf8\xa4\?\x95\xb9S\xe6\xab\xff\x8d\xfd\xb7\x1f\xe2\x18X\xbb\xe3\x98i\x1e\xda\xf0r\xbf\xd8\xae\xad\xec\x89" "\xf8\xec\xad\n\xfb]\x05\?\xf9\x9a>\xe7\x8e\xc9|\x8c\xd9\xaf\xb0\xaf\xeb\xa8\x7f\xef\xbd(\xc2\xc7+\xde\x01g|\xe2\x15\xca\x1bz\x98\x61" "\\\xe8\xfe\xcd+\x81\x9d\xeez\x99!N\xaf\"\x9a\x61r\x38\xf5[\xc2\xe2\x92`\xe9\xceQ\x66\xaa\x08;mL_\xf1\xf1\xb5\x33\x35)" "\xd7Q\xb1\x31{\x10,\xa3\x45&\xd7\xb8Q\xaf\x8bI\x1d/\x1d\x01\xa6\x15\xfb\x8e\xd1\x42\x37\xde\x38\x93>#\xdd\xc5\x43%\xcd\xdf\xa4~" "\xb5Y\xae\xc9\x16\x8e><%,x\x8d\xe3y\x9dK\x8e\x07\x19\x86\x1d\xa0\xca\xbe\x88+\xc7p\xe8n\xd7\x31\xbe;\x82YJ\xd8}\xdf" "\xd1\xfb\t\xc4\x92\x12|\xad\xc8\x90\x82\x38\x80\xc2>\x30\x06%\xfd\n\x16\?\x45\x9c\xadu\x18\x1a\xa2\x95\x62\x33\x97\x61\xf8\xc2\xfc\x10\x33*" "\x88\x63\x0c]\xe9\xce\\:\x06\xaa\x37\xc5t\x1f\x8dZ\xf4w\x99\x9c\xfb\x1bMk\xb8\x7fu=\xfd=\xc2\xe2\xbb\x32\xdc\x03u\x8a\"\x96" "\xc9\x05\xfb\x0f\x44TX\xc4\xaaT\x44\x9dK\xbfK\x99\x0e\x93\nU\x31]\xf5\x1c\xe3\xea\x00\xae\xbb\xcaV\x8ejO\xe4\x8b\xf6\x61{\xb3" "\x87\xae\x62s\x35\xd3&\xd1@\x1d\xdb\\\x37\x1d\x37o\xd5x\x0f\xe3\x31&\xb5\x86\x1c\xd3K\xc8\xae$\x08\x15\xa5\x14\xed\\\x02m[\x83" "\xe0y\x03h\xc6\xb1j\x89\x03\xa1\xe2\x46\xf4\x44\x9b\x92)\x1b;\xc6\xe7\x1f\x08\xf2\x05V-\x65\x98z\x34\x9c\x93\xf5\xebq\xad\x87<\x08" "\xc2,\xf6Q\xb5$\x7f\x8e\xd2m\x61Q\xc1X\xfc\xfe\x99\x65\x9f\x85\xd8\x92\x83(k\x03\xcd\xabM\x10}\x61)|\xbe\xfdj\xd2\xc4\xad" "\xfb\x89\x04\x61\x12\x95{\xdc\xc5G\xec\xdfKX\x1a\x12\x1c\x36\x81\xeb#,\xd2\xaa\xf8\xe3\xa8\xe1V\x0eQ\\Z\xceGg\x1c\x06\xc8\x92" "G\x14\xd9\xc6\xd2\x17)\xda\xa3_\xc1L\xad\x38'\xae\x80\x33\x1eG\xeb\xba\xfa[\xdc\x39\xc2\x8dJ\xc5'\x18}\x45\xb4\x64\x32\x8akG" "\xb6\xfd+\x18r\r\x93\xee\x9c\xdd\xfd\x15\xdf\xec\x15\x42\x15\x0b\xe6\xc6\x9c\xe7i\xa0&\xec\xe6\x10\xd1\x03\x35\xabx\xc4\x01Q\xd7\x96\xd2\xe2" "'K\xe7\n\xf9\xe3\x15q\xbd\xe8\x64\x9f\x35\xf8*:\xad \x95\xab\x88\x16KG\xb1\xe9\x18\x9f\x14R\x0b\xa7\x62\x0c\xab\r\"\x16O\x92" "\x07\xde\x63\xe9\xc2\x31|Z\xbaq\xe4\x9c\xf1\n;\x9d\r\xe3\xfd\xe3 \x96\xe7\xd8$ol\xf3\xea\xdf\xa9:\x86\xdb-U\xd9\xb1\x88\xf8" "\xbbyy\x87\x37\x90\xb0s\x14it\xc5\xa7\x46\xed\xbe\x82\xf1W\xd0\x8d\xa8\">\xef\x45\xa5\xb3\xb8x\xeaL\xf3\xf2@)Q\x96\xac\xe7" "\xe1\x33L\xb7\xae\xa2~^\x06\x30\xb9I\xb0\x01#\x1d\xa9\x38\x05\xfe\xb2\x9c\xe6\x13\x84\x95Wq\x96\xee\x96!Z.\x03\xc3PX\x8b\x01" "p]u\x84\xcfR\xf5*\xe6\xbb\x16\xc4\xe2\xbf\x88{\x8f\xc0\x83\xb6\x17\x84\x46^\x62\xc5\x12\x91\x9d\xb9\x8a\xe1\x37G\xa8\tX\xd8\x15\x84" "Rv\x15\x1f\xd7\xe3\x1c\xaftrH,$K~\xeb\xb4\xe3\xef\x11\x9e \x86\x30\x93\x9b\xe8\xa5\x1f\x63\x92|\x85-T\x86\xfej\x45\x44" "\x36M\x15\xe9\xc4#\xe2\xe5\xb5\?|\xe6m\xabx\x86\xa6\x42\xf5N\xf0\x31\xdc\x82g\x35\x10\x31\xcc\xc4\xae\x64\x8e\x1d\x1f\xa3\xd8\xa4\x08\xb0" "\tR\xc4q\x63\xf3\xb1\xeb\xed/\xfe\xde\x45$\r\x11'y\x04\x35W\xf1\x93\xda\xd2U\xfc\xf3\x13\x9d\xe7!\xcex\x87l\xe3\xf1\xb2\x8f" "\xed\x8b\"\xaew\x42\x81\xafw\xe0\x64]\xbdJ\x0e\xcb\xf2[\xf8\x30\x08;\xdaw\xf4\xc2QQ\xfe\xe7\x0f\x9dQ\x37\xa0\x08\x8f\xa4\xcc\x17" "\xf2\x87\xfe\xc4\xe1\x8b\x18\x8f\x15\xb1\x33X\xc4\xf3\x43\xbf-o_\xdei\xf8\xebO\xee\xc6\x8e^\xd6\x01\?\xab\x88\xf5-\xe2\x1c\x98\x1e\x8c" "`l\x16\x31w\xee\xe8\r\x46\xc4\x64\?|\x9a\x8eq\x85\xb4\xacu\x1c\xe2=\x1a\t\xf6\x8a\n\xb2\xeb\x11\xf4r\x80\xadZ\x10s\xad+" "\xbf\x7f\xdd\r:\x45uL\x07\x03\xac\x61\x99\x18\xbe\x30\x98;\x86s\x8d\x03\x86`u\xc2\xd8w\xc1\x1f\x44p\x85J\xb4\xd9\xd9\xdf\xec\xfc" "Rl\x01\xa1\xba]m\x0eQs\xbd\xd7\x84\x33\xbe`\x05\x85\xb9\xa9\xfdxo\xbei\x1e\xf9\xeb\xb7X\xe5<\x01\xba\xa7\x32\xebZ\x19\xf1" "\xb3\xab\x65\xac{\x0b\x62\xe6U\xe6\xf4\xa3\xcc\x89\x46\x19Qi\xaa\x65\xb6\xd0\x32\r\x34\x65\xd1\x15\xd4\xfe\x8fOk\xec\xa8\x15\xd5\x9d\xc5L" "\xbf\x9e\x84\xc4\x90:P\x9b\x83H\x9b\xca>\xd3G\x0b\x62z\xdf\xb6],k\xbe\xc3vt\x38\xa4\x39\xa7-svsk\?\x01;\xbb" "\x43\xea\x32\x11\xcd\x81I\xd0\x42,\x08\xa2O\xd5@$\xf0\x63\x13\xd1\x12\xdd(.\x89+\xe0\xed\t\xb2\xa7\x8ah~\xfe\x82\x9dr\xf4\xd3" "\x42\xae\xa3j\x9b\xf3\xe6\x36RL(\xf2\x84\xfd\xb5#\\\xb2\x45\xfcl\x38\xc6\xbeW\x41\xd8\xcf\x98\xf3:\xae\x05\x18Z\xd8\x00\x9e\x61\xf9" "\xe0\xc8V\x64\xe2\xcc\?\xc5!v\x05\x8a|\xcbm\xdar\xdaTG\x14-\xdc\xe8\xdb\xbf\x0c\xdb\xd3\x92\xa3\"\xcd\x61\xfa\x89z\x91\xd8*" "\x94\xb0\x06\x1e\x9b\xb3\xb7\x36l\xbe\x86\xc8(\x41\xb1\x10\xc4\xd9\xe9V,\xbb\x18\xe5>\x82\x08]\xd9\x44\x98\xbfL|zq\x91\x15\xac\x1d" "R\xd8\x88\x38\xe2\xf9\x31\x90\xb7i\x94U\xcc\x94\xa5\xf4\x8e\xea#\x8d>X\xd9\x46\xd3V\x82\xf9s\x0b\x66\x9eU#\x03\xf9\xc6l{l" "\xe0\xf1\xc4\xd1k\xa1\x88^\xfaH\x0b\x63\xa8\xcb\xb2\xd0\xd0\xdb\x9c\xc4\x08\xfe:z%R\x11#\xae\x89\xbfy\x17\xbd\x82\xfe\x33\xa9i\xeb" "\x9e\xb6\x9bJ|\xf6\x90\x61\x1c.\x94\xc9m\x84\xcfl\x39O\x10\xb3\x0e&\xf1\x31\xa4Z\xddNX\xa7\x92\x65\x45\xda\x18M\xbf\xca\xe2\xc7" "\x93\xc0,)K\xb5\x9d\x9e/\xe5;^\x93\xbc\xe8\xd5\xbf\xf3\xa9\x89\xa5Q\x65h\xa5\xba\xb9\xfd\xa9\x86\xbd\x91\xc2\xcc\xa7\xc2\xd0\x1fZ\x44" "\r\xea\xc8\xda\x83\x15\x35\xc1\x35\x9a\x0b\xf6\xca\x1a\xfe\xcd\n\x9b\xe6\xaf\xb3\xb0,i\xcc\x9f\x62S\xcbg\xae\xb6y\x19:\"xH\x86\xc1" "U\xaaz\x17\xed\x97\x1c\x11\xab\x42\x44\x0b\xd6R\xbd\xc3:\xbf\xa0y^\x19\x8a.\x8d%*\x61\xa3Q\x32{\x80h\x89~\xaa\x8c\x03%" "\x08\x1b%\x83\xf0T\xef\xd2\xfbw \x9e^\xb7\xd8\x46\x8d\xe3\xf4\xfc\xc9\x99t\xf3\x34\xb7v\xb0\xa8\xa7x\x86]\xb1\"N\x0b\x9b\xea\x45" "R\xe2\x07\xb3\x93,\xc3\xdc\xbe\x13\xed\x1e\x01\xd1\xf9)\xfeM\xcf\xe0\xff\x65\xccv\xd5\xfc\x38\x8b\x83\x41\xcf\xd8\xa2\xb4\xfd\xe6\xd0\x31\xe9\x9e" "\xa4\xbc\n\x92\x04\x0b\xe6\x0fY\xf5\xb9\xe9N\xf0\xac(_\xc4NR\x65\xbc\x44q\xae\xe6=[\xef\x16vy\x1a\xd7\x06\x9c`t\x34\xc0" "\xf5\x13=\x8d\x85\x39\xb6\xf9\xa9\x85\xd3\x37\xd4\xf3\xc2\x18\xdbQ+\x18L\xb5\x1d\xb6\xffN\xf4\xcc'\xc6ZN\x07\x89\xb5\x14\xbf\x1d\x35\xdf" "\x8c\xad\xe9\x0b\xb3\xf0i\x82\xc3R\x38\xd1h\x14\xe5\xde\x10\x0e\x10Lt\xdf\xf7\x0b\xb0O\xe2O\x8b\xe6\xd9\x8eTl\xcd\xec\xc1w\x82\xed" "\x9b\x8a\x36\x88vh\r\xec\xc0\?\xd3\x30i\x14\xb9l\xd4\x81\x33\x61\x95\x1b\xc2\x0c\x91[\xc2\xc4\xf4\xf6,\xb5\x8d\xcf\xca\x46\xc0\xda\rq" "\x00\xac\xdf\x38\xea\x86o\xcb\x11\xe6l\xf3\xcc[\x80\xb1Kw\xc0h\xc9\x61\xca\xd7\x81\x9f\x95\x61T\xe8\xc2\x01\xc7\x18|{\x44\xbc\xbb\x88" "\xeb}\x8e\xaf\x1d\x38!\x1b\xc6\x1e\xb7J\xd8\xc7\xf3\xe6\xe8\x14\xe1\x1f\x85\x8d\x1a\xc4\xb6\xa3\x06\x08i\xe6\x39\xf2u\xe2\x9f\x91\xe8\x04^\xdd" "\xe0\xa0,\x38\xbf\xb7|(\x63\xb0\xa5YJ:\x89-\?*\x0e\x38\x61\xed \xd2\xb7 \xb4<\x45\xabL;\x64x\xb0\xa4\xcaO\xf9\x1c" "I'\xaf\xdf\x42\x0f\xcf\xdd&\xd5\x0e\xbc\x08\ru\x9b\x00\x66\xa5\xc6\x66\x65\xf6&VZO]\x7fr\x65\?\xcf\xf1\xb0\x94\xf9\xb2\x86\x9f" "\xc7\x80\xbf\x65\xb1;>\xe1\xd8\?,y/\xd3\x98il*\xe3\xcb\xa7\xb3\xcd\xa2\xc8\xc5\x1c\x61x\xeb\xc9;or\x8e\x1bJw\xae\x1d" "\x43\x44\x34\x61\x98Mu\x90&T\x10\x8a\xbf\xa2\x14-\xb6\x39\t\x83\xfa\xa4\xa8\x01\x01\x31\x14u,\x89\xda\t\x87\xe6\x0e\xdc$\x05\xcfP" "\xbb\xd2\x12\x9aRz\x8d\xa2L\xebW\xda\xf8\x1b\xb8\x1c\xfa\x11-\xad\x14>\xe2\xe3\xb7tg\x12\xfd^G\xb3" "\x9f\xcc\x01\xeas\x1f\xf2g\xc8\x9eUQ\x13\xad\x96x\x14\xb6\xd6\x8f\xf4\xa4\x04\xbc\xa8\x00\x61\xae\xf8\x80\xbf\x8d\xe1vQ\xf4\x83\xf3\x90\x8f" "\x90\xceN\x44\x0b\x82Q\xd5\xe4\x1d\xbc\xf1\x01\x0bL\x91\xc5\xc8h\r\xd5\x41tt\x0f,=\xe1\x61\xc9\x06\x1a\x01\xf3\x63Hw\xcf\xf5\x19" "\x0e\x9f\?\x03/\xbe\xfc<\xd1\xb5\xb4\x9aqt\x8d\xb3\x61\xe7\x89\xa0YQiH\x1d\xc4w\?\xfeu\xb8_W\x07\xd2|\x35\x82\x45\xfe" "\x10\xb1\x41\xe5\xeb\xd7k\xfd\xb8\xfd\x01\xc6_\xea-iH\xf2\xc3\xc0<\xc4\\`\xa8\x1e\xc6\x66\x33\x04\xa3\x36\xa6\xe7\xc6\xa8m\xec\xb8\x8d" "\x88\x32`\xa5W\xcb\x95Q\xb7\xdcw\x8f\xe1\xf0\xaa\x02\xc7V\x63q\xe3\x33i\x8c\x9d\xe9\x1ay\xb3\x10\xe5\xde\xe1I\x8a\x63\xc5\x37Z\x8e" "\xedi}\xb3'\xd8\xc3\x1d\r\x7f#\xf9S\x1c\xeb\x34)\xcc\xc2\xc6[\xf1\x1b\xbb\x9e\xaa\xdf\x9c\x46~#\xea\xa6\xa0\xed.\xa9.\xfe\x16" "%\xd5N\xa1\xd2\x91q\x64ZhR\x1e\x61X\xd2X\xb0\x45,\xb2\x9b\xec\x9dQ\xe5\x34\x36\xfd\xda\xaa\x43\x0b\x36\x86\x85\x14\xbe\x36\x18L" "\xa9\x17\x9b\xf2\xb3\x06\x1a\xb4\xcc\x01\xc6\x44\xa4\x82\xbc`\x33ZY\x32\xb3wN\x35W\x9c\xd4\xae\xa8\x96*\x46\x85=\x17\xa9\xa1\xaetj" "\xeb\"\x9eh\x45\x17\x90\x95\x9f(j>\x02\xcd\xddM\xb0{\x95\xb9\x0c\xa7\x19\xab\xa8O\x1c\x8d\xa4\xaf\xe5\xa2\xd2\x8a\x33\xc9\x15\\\x85\x0c" "\xc3M\xc0\x8c)\xd8w\xa4\"o\xa2\x9fv\xd5\x0f\x9e\x46\xc6h\xd2\xa7\xc8\xf9+Y\xba\\R\x61\xb6\x03\xd5\x9c\x1a=\xa0\xa7\xac\xb8\xf8" "\xb7\xa2\x11\x44\x31j\xcf\x90\x32\x45\x18\xdcwV\\I]q\xd9t\xc5:\xbb\x8ak\xcf\xc4\t\x10\xfa\xe8*\x9e\xd8\xc8\xb9Jv\xbf\x81" "\x07W\x44|\x8f\x46\x07\x45\xbe\xd7\x95\x8e\xc3\xe8\xb9T\x8c\xfa\x35\x88X\xa0Zq\x41j\xc5\x65\xa6\x15;\xe2\x15\xfb#\x45\x7f\?*\x62" "\x9d\xde\xc4Q\xc9\xc5\xb8\xb5\x86\x88\x45\x64\x45}\x61X\\S\xa6u'\x30k\xda\xab\x94\xc5\x43\xadTp\x9fx\xea\xb8\xb5>\xad\xe0\xe9" "%\x08\xc5\x61\xa5J\xdb\x13\xf3\x8a\x0b\x43-]\xb1\xcfT\xd4%\xed\xf9\x8b\xb3\xa4\xe0s}\x65\x1c\x10W\x08\xdb\x62(u\x37\x81V\xb7" "\n\x97\xec\xa2\xdap\ti\x95\x8e\x1c\xef\x1d\xbd\"\xd3]j\x95~\xbf\x39\"\x43\x64`\xb3Y\xb8\xd7\xd9\x9b#\xcd\xba+.\x34\xad\xbc" "\xa6Q\xe3R\x44\x13\xa9\xed\xc2\xe0U\xdb\x87IK\xd0\x16~j\xfb\xf1\xde\x1d\xd0\x16\xae\r\xe5P\x38\xaa;k\xf6\xa1N\xd7\xf6\xf1\x86" "\x05\xed\r\xd7\xf6\xb1@$h\xaf\xb7\xc6t\x01\x82\x36\x9d\x13\x9c\xbd\x03\xad\xf2\xd4N\xe0\xb1U\x63\xe6`\x43\x38\xf4\x9b\x18\x36z\n\x33" "\xc7\x1f\x41\xd3;\x05m~$hn\x44\x8a\x05G\x0cZ\"\x0e\xda\xd1\xe1\x0e\xc4!\xbe\x15\xdf\x1c!$\xa7\x88\xb6<.hZ\xbb\x61" "\x18\x03\x85Y\xc8\x34\x43\?\x94\xe4\xbf\x81\x33\xdc\x32\xde\xa9\xe0P;\xb0\xda)t\x84\xda)\x06\xd7\xda)\xb6\xc3\xd4J\xd1\xcb\x18h\x16" "/\xc3\xa0\x88\xd7t\xd3\x36\xbc\xd7\x44\\\xa8\x15\x34\xb5>\xa3V\xc2\xa4\xdd\xe3^\xd4.\xd1\xa1+\x0e\x81\x8d\x95\x63\x62+n\"Z/" "!x{\x0f|z\xc5X.\xa2\xad\x61\nZ\x9e\x13\x41\xeb\xb7j\x97X\r\x10\xb4p\x1e\x82\x16p\x43\xb0~\x83\xe1U\xc4\xdb\x89!" "\xf6\x9a\x08\x36\xf0\x13\xd8\xf7j\x97\xe9\xfd\x63\xf4\x34u\xd1\xbf\xad\x62{\xe4\"\x0c\xd3\x10\xe7_\x19\x91\x85r\xb9y=\xdc\xbc, \xce" "/\x1c\x91\xf1\xc8\x44^\xedJ]%\xe6\x1d,\xdd\x08\x33\x9f)\x41M\xe5\xd8\xc5\xee\xdd\xda\x15\xa6\xa8\x82x\xc8+\xac\x9f\x0bZ\xf7S" "\xe3\x12\x81\xe0\xc9\x08\x08K\x8dY\x1e\x85\r\xaf\r\x37(\xe0+Ux\xfb\x9c+\xd4\xae\x91\xb7\x43\xd0\x16\x1fj\xd7\x18\x90\x05m\xdd\x43" "\xf0\x62!\x7f\x10\xf1:\xae\xd9\xae\xae\xb3\x8b\xa6\x35\xe6w\x16\xb4U\x1b\x41S\x65\x05\xcd\x89\xb0v\x8d\x15N\xc1\xaf\x63\x43l\xce\x11\xc4" "\xcd_#\x04\xa4!\xb2\xe8\x88h\x1b\xb6j\xd7p\x97\x16|\xab\xf2%\xde\xc4U;+\xb5x\x43\x38.\xaax\x03\xc4\x13\xd5\xa1\x9b+" "\x36\x1c\x63\xdfH\"\xcc\x8c\xf3\xb5:\x9c\xbb\x05\x33;\x16\x85\x99\x0b\x96 \x1e\xae\x0e\xeb\x85`\xaf\n|\xa9;\xea\xf6<\xdb\xa6&\x0c" "mWp\x0c\x34\xc3\xb9\xe0\x14\x1c{\x12\x05m\x32+hS]\x45\xf2\xda)q\x00\xb4\x18/\x35\xe6M\x32Lj\xa7,\xa5z!\xb4\x65\xed\t\xc3\x62\xed\x19*\x88\xa0-\xe9+\xb6\x80\x36\x11\x15\x9c" "X!<\xa7\xeb\xe9\xa6\xfd\x0e\xab\x9dN\xf3\x1c\xc7\xda@\x07\xe7`\xa5=y\xc3p\x37\x08\x0c\xa5\xdd\xc3R\x85\xe0\xd3\xb5\xc6\x9f\x31\x8f" "\xbfZ\x8f\x15\xa7\x87\xcd\xab\x82\xe6\x9a`\x18\xf5\xeb~&V\xab^\xdcx&~\x02\?\xacz\xf5\x92\xbd\x63\x35\x97\xe2\xe1{|\x99=" "l\x9e\xab\xf5X\x88\x8a\x1aMhq\x05\x86\"\xed\xb1\x33\xe9\x61\x18\x16\x44\x91\xf6\xd9\xf8\x14\x35]\\\xeb\x11\xab\x9ev@\x44\xb6\xb6>" "\x87\xcd\xfe\xdf|G\xfa{\x84\xa5\xa8\xf5\x61\x9c\x34\x44\xc2k\x11\xf3\x01\xd3\xe1\x43z\xda\xc3\x1a\xc9\xbf\x07\xa2\xb3\x37[\xd5\xd1\xe0\xd1l" "\xa9}\xcb\xa7\xf9\x8b\t\xa1\xb1\xe4\xe3&\xea\xdc\x38KOs\xf0\x34\x14v|\xf7\x37-\xc3q_\x98\xcd\xef\r\xa1Z\x9b\x18\x36\xec\x82" "\x35\xdf]\x44\xea\x12\x13\x45\xad\x65\xd5\xef\xc3{X\xf0\xe9\xc5\x11\xcbQ\x10\xd5;.\xb0\xe8\xfc\x34\x42O\xd5\x8f:\xf2\x04\x0b\x88P\x03" "\xfa\xecJ\xfa\xf0\x02\x14\x1c\x1c\xa6W\xef\x19\xf1\x7f\xf6\xe7\xea;\xd9j\xc2\xf9\xd1\x0f\xff\xc7\x31\xd4J\xc5\x64\xff#\xb9z\xd6\xe0`\x37" "\x03y\x43\x38\xfc{\x8a\xc5\xde\x1a\x9d|\r\xff\x16\x15v\x19}\xc4\xd5\x12<)\x38\xfe\xcd\xea.\xc6\xa5s\x88\xb5\xbe\x94\xb7\x17\xb9z" "\xee\xf1]\x41\x8c~\x7f\xb1\xa7K\x0e\xdcV\xf4\xf2\xe7\xbd\x7fY\xd8\xfc\xeb\xc7\x36\xf7\xeb\x7fY\xf6\x1b\xb6&,x\x87\x12\x8b\xef/\xd2" "\xe5\x9a]\x42\x1fi\"\r\xa3\x61)Y\xd5\x93\xd5\xb1\x1fH\xdeN\xe4v\xe2\xf7{\xac\xe9\xd8\xb1\xcdQq\xf3\x82r\x85\x65\xcf\x30\x04" "\xe0\x03\xdbV\x82x=\xaf\xc6\xe3\x86\xd7\x31\x44\xb6\x11\x1c\xf2\x8b" "\xb6\x97\xca\x30-\xbd\xa4|\xe7\xe9\xb7\r\xc6R\x61\n\x8e\xc8\x81\x61u\xc8\x31l]\x00\x9b\xcd\\\xd4\xf4\x9e\xb6\xe3\x08l\xbd\xaf\x31\xd8" "\xb7\xdf\xcc\xbc)\x65\xc3\x0b/\x33\x65|\xbd\"\xea\x0e\xf3\xda\n\xa1Mp`\xef>\x88\xdd\xcbM\xe5\x15\xde\x80\x38`nW\x10\xbf\x9f" "\xe2V/\xb0\x65\xb8n\x30o\x80\xbdU\x93\x8f\x82\xdcV|w\x1f\x9f\x34t\xdc\xcd\xf5\x34w\xe7\\WL\xa5 \x61R\x95\xef\xee\x9e" "\x39\x62\xd9\x05\xe2G\x15\x8em\xc6\x30\x43v\x31\xda=J\xfb\xabp\xc0\x93\x9a\x81\x15{\xd1t\xedL\xbd*\xfa\xb3\xc0\x44s\x80\xaa\xa9" "\x0c\xd6\x0e\x88\xdd\x03\x44\x62\x05\xeb\?q\xd6\xd2\xdf\x1c\x9dJ'\x9d^\xee\x61\xa7\xaf\x1d\x88\xf2G^m\x37\xb5\x1dGxl\xabx\xe6" "\x18\xdd\x34\x61\x8b\x05{\xea\x66Xrq\x0b+\x9c\xb0\xc6\x8f\x36\xc8\x9b\x81\xae\xdb\xf6N\xfc\x98v\nw\xf7\x19\xe6\xdd\xc1\x46\xf7\xcc\x36" "\x33\x62\x88t\x63\x07\x64*\x0e\x0b\x02\xd8\xe3[\x46\x0cu\xe8sWN\xc8\xa7\x18\xf0l\x8a\x9c\x97\r\xfe\xe6\xc5\xbf\xd9\x05\xb2<(\xb3" "\x8ek\x00\xb3\x8d\xe0\xe1\x37\x10s\xa9\x01;\xfa\x01\xbbm\x45\?\x91\x88\xc9\xf5'\x96\x83\x84\xa1\x90\x06\xb6\x38\xc5\xd8\x65\xc2\xdc)\xbd\x36" "\x88s\xd7@\x8c\x9b\x03\x1d\xd8\x8e\x9e\x10\x1e\x0elv\x88\xc5\x1c\x63\x9b\x99~\x0c\x86\x06\x38\x88\xbf\x86\x8e\xd8\xf3 \xe2\xf8\x15\xf8\x83\xab" "S\x45\x1c\xc0.\xa3\x88\xdbO\x9eKX\x66\x13\xd1\xa2k\xd5\x06\xc8L(\x08\x35}\x80\x19\xbf!\xb6^\x82\r\x7f\x1c\xa3\xbdG\x99\xe6" "\x44\xcb\xd6v\xd3\x0cK\x42\?tq\x84\xdfmvq\x03\x9b\x07\xc3\xb1\xbe\x46\x88\x32" "\xb0\xef\x13l\x9c\x30\x96\xbc\xddrH\x99!\xb1\x9e\x61\x94[H\x97\x1bX\xe9\x34\x30s\xdc\x14\x84\x9a\?\x8b,\x66\x9e!\x0c\xce&j" "\x8a\xb4[^\xb0y(\xbd%v\x9b\x0bk\x1d\xe9\x1d\\\xf3\xf2O>\x83\x9bi\x82ku\x88\xe8\x06\x36<\xd9\xb2\xa5\x46\x85\x1c\xf3\xf4" "\?<:\x43!\xb1\x7f\x9f\xc5\x96\xef\x41\x30\xd7u\xfc\x9bu\x39\x36*K\xc7\x0f\xff\x1e\x80\xbb\x88\x88\x98\x04\xcc\xe0LR\x9b!\xff\x94" "`\xe9N\xc6\x11\xa4/\x14\x66\xab\x10\x82\x9d[\xbfi\x04\r\xad\x31\x85\x8f\xa1\x46z\xab]\xfc\xcb\xa2uN\xe3\xec\xfc\xee\xc0\xfeo\x9f" " H\x95\x89\xba\x95\xa6\x86\xb7\xcb\xb1w\x86\xc4\xa8\x8aKG\x98I!>u\x63[_\x33\x16\x17N\xd8\x12\x94m\xbb\x16\x65\x8c^\xfe" "\xff\xf8\xd9}'\xca\xc9\x9d\xfe\xdf\x0c\xed\xfd\xf3\x61\xef\xdf\x0f\xf9T\xfe<\x03\xbcr\x84\x16\x37L\xd7G^\x31\xe5R\x8e\x1a\xc4\x19\x63" "\xc7l\x63Q\xef\x04Q\xd4+Z\x9dV\xb4.\xad\xb0\xb1\xd3\x10\xa6\xa3\xbaNq\x89\x65\xe0,O,\x02\xe7U\xe2#\xd0\x9c\x17\r\x61" "LU\xb1i\x08S\x85\x62\x1b\xb8\xcb\xe3\x39\\\":\xc2O\x91\x0bP\xf0\xf8+\x1e\xfe\xc2=P\x98\xe5\x8f\x17\xbc\xe5\xa7\x1fUG\xf4" "S\"\xda\xe4\x42\xd0\xc2\xb6\t\x9a\x07\x64}\x0f\x31\x1c\x04m\xe5\x44\xb0\x80{\x8dO\x0b\xc0s~^\xe6\xf7+\x01Q\x9d\x45\xac\xe2\x9e" "\x11\xf4L\xf0\xfb\xc4\x10\x95S\xb0\xdc#\x8e\x80\xd7\x83\xe0=j\x00\x02\x89\t>\x9d\x87_\xb3\xd5\x42\xc7P\x1c:j\xb6\x61Vt\r\xae\xeb" "\xe7\xee/\x89\xe4\x03\x14%\xdcq\xeb\x15\x04o\x33\xd4\xf9\xcb\xd7\x03\xd9\x1e\x82\xfe\x89\xb8\x8bg\x44\xac\x0b\x45\xfe\xc0\xec\xa9\x86~-/" "]\xcc\xa3\x05\xcd\xff\xcf\x30\xb9)y\xeb\xd8L\xed\x0e\xee\xe3\x86\rv]Vn\xc5(\xf7\x05\x95]X\xdd\x8e\xf6\xa2\xb3J\x30\x9d\xd5" "{\xd0H\xcd)\xf0o\xf6\x99\xe6\xed:}\x8d\xce\xd8lqx\xebG\xa5O\x61|\x45}\x84\xec\x17l\x34t\xfb\xad\x39y\x0b\xb3u" "\r\x41[\xd7\xa8\xf7\x35Tk\x93\xd1Z\x85Uq&\xac\x62\x18\xc6\xf7\x17\xb1\x85u\x00\xeb\x9f\xb0#\xec\xeb_\xb3\x85%L\x11\x1b<" "\x9f-!\t\x62\x84\xea\xdb\xb0\xf4\x9c\xee\xe3\xee\x61Q\x33\x64\xd1\xa9\xd5\x1c\x16t\x63|\xdb\x8a\xe9\xc9Yz\xfa\x06V{\x90\xeb \r" "Y\xbd\xaf\xa1\xf7\xe5\x81\xd0\x43\xf4\x37\xcd\x0f\xe0\xe2*X\xc0\x85\xd9\x84\xa4>\xc6^\x38\x41\xdb\x96X\x1f\xf3\xe6\x35\x38\xcf\xa6\xf6\x8d\xf8" "$\xc2l\xb6\x63\x88,\x95\"\xda\xfc\xc6\x30X*\xc0\x66'\xc8\x8blLU`sn\x05\x83N\xa3\x62\xd8$\x63L\x94\x1c\x18g\x9c" "\xb1\xe7\x1agp\x03\x05\x63\x1cY\xac;\x41\x9b\x45\x19\"\xf1\xbc\x88\xe7%\x62\xc3\x31\xc4\x93\x17\x66i,\x04m\x9dUpp\n\\\xe1" "\x84\xd8\xc4%\x98_\x39\xc6\xbb\x8fI\x0b\xdf\xc6>w\xc1k\x9c\x1bz\xb2 ^\xe8\x38\xee\x1f\xa8o\\\x01%\x15\x0fj\xc0\xe1\x85\x63" "\xe6N\xe0\xf1/\x38\x46\t\xc4\x93\x9e\xa3\xfcO\x7fp_\xc9~\x9e\xf8\x01<\xea\x00\xa1g\x8e\xb1\xb6%h\xeb\xfb\x82\xaf\xbb@\xf4\x91" "\xe3\xb4V\x8c\x0e\x07\xec\xe8\xc7\x88\xf4g\x18r`\t\x83\xce\x39\xc6\x46\xa0\xed\xb5\xd3\x9f/\xc7\xe8y\x0f>\x8e\xc2\x66\xbb\x8e\x99\xa3\x30" "\x34\x18\xaa\xf7\xc5\xee\x8a\x8c\x9f\xdaj\x8a\x61\xb0\xd6\x82y\x06.\x63I\xa3\x1f\xdf\x1d\x81\x41\xcdQ\x0c\xa7\x36\x31\xcd\xbfo\xd9k\x10_" "\x9f\xb6_k;\xea\xffN\x1fl\x8b\xd9\xef\xacj\x8e\xf0x\x34\x31\xe9Z\xd9M\x61\xb2\x36\x64\xbf\x38\xddX\x82\xc6\xfaJ\xfe\x80\xef\x9f" "\x30\x11\x35jh\x35\x82\xba\x06\xf9\x84\xf9\x81\x31\xdb\x44\xf3\x64\x0c\xfe\x36\x8d\x1aZp\xa3\xc5\xdf(\xc2<\xd3h\xa1J\tZ\xdf\xd0h" "\xa1\xe8\x04\xbf\xf6\xe5\xd6\xb0\xd7\xa9\x31J\xca\xda\x93\x34>\x11\x37\xb8\xf1\xc9\x13}\xcaT\t\x8b\xca\"\x9a\xc7\x86\xa0\xb9\xb6\x0b\x96\x88\x17" "=\xa0m\x66\x13\xec\x1c\x01M\x39P|\xdeT\xd7X\xef\x12\x36\x02\x87\xfb\x44\xbcN" "\xd8\xd6\x1a\x9f\x98\xe6\x08\x1e\x9d\xc6'\xe7\xfe\xf6\xbc\x0eo\xaaM\xc7\xe8\xa3\x1c\xcdj\x64x\x65\x9b\x66\xc1\x31\x1e\\\"\xa6\xae\xb0\xd6\x8d" "\x63\xf0\x13R\xf6\xe0\xe8O\xbey\xc8\x63\xb6\x06\xb1|\x01\xf1\x11\x45\xb4\x61\xdd\xdd\xbcU\x1d\x35r\xe5\xe0\x1el\x36O\x8b\xf6$_l" "z\x8a\x08p(\xe2p\x15\x7fu\xe2\xc9^`\x93=L\xcb\x84-\xae\x1d\x31\x7f\x13q\x89\x33!\xa8V\xe3\x0b\xb6\x83\xc6W\xfa\xb8J" "\x8a'l\xf2\x63K&\xb6\x13\x8d\xf6`\\\xd2\x03g\xd1*\x87 \x08\x81Y\xa8\x03\x65\x33\xe0\x8c\x38\?\xd4\x8d\xd0\xb6L\xa9\xec\x11\xb8" "\xb4\x82\x94\x01\x7f\x02\xb4\x9c\x1a\r\x0e\xb8\r\x8e\xb2\x82\xe6}i\x18\x97\xa7XWjpR(h\x41)\r\xa1\xc9\xab\xf8\x06\x34\x93\xb6" "\xe0\x02\xb7\x81X\x34\x82\xe6X!\xd8\xe7O\xa5\xf3\xf8\xdd\xe1\xf3\x8f\xa5+\x36\xff\x65^\x66:v\x84i\x42O\xc7\xfb\\<\xdb\x96l" "\xb2U.$\xf8l\x8c\xe3]Z\x95\x45\xb4\xdd\x64\x86\xac\xb6\x63\x84\x95\x34\x0c\x87n\x86\x8e\xec\xfcT\x94\xdfxi\t\x43\xa4i\x11m" "\xa6%\xd8X\x03\x9b\x85\xa4\\\x0fg\xe2\x0b\x8a\xdf\xef\x81\x1f<\x81\xadR\x18\xea\x86\x92V\xcd\x99z\xde:\x43\x17\x39\x86\x12(x\xfd" "\n\xb4\x44\xda\x8dq\xba\xdf\xd4\xdd\xa5\x1f\xb8}\x98\x14\x0c\x31\xc3\x15\xd1\xfc\x1a\x1b\x1a\x94\x30S\xa4`\xc8Q\xa6\xcc\xea\xe2x\xb3\x83\xf7" "\xab\xfe\xd7\x0f\xcf\x30M\x81-J\xf1\xf0\x17\xacz\xe1\x98\xb9i\x8do\xb1\xd3\x85\xfdS\x98\x19\xb1\x1aSK\x18>\xa6x\r\\\xd6\x92" "\x37{\?\xd3\xe8\xf0\x13\x98\xafG\?-\x88\?\xb7!\xc4Y\x63\n\xaf\x0f\xc1'\xe2\xa8\x85\r\x15\x8diR[\"\x04\x98\x88O+K" "\x82~\x02\xf6l\x35k\xba\x41yMuS\xda\xf1\x14\xa2t\x00g\x45\x88\x1fV\xaa\x0b\x8b\xae\xc0\xd5\x31\x61W\xf9\xa8\xf5\xec\"\x16\xe1" "\\\x64\xbf\xb1\x80\xfb\xa2!tO\x11\x1f\x87@\xf4\x10\x82\x1d\xe4\x03\x16\xd1v\xc0\n\x9a\xf2+\xb8\x9cg\xaf\xe7,Y\xdc`n+\xc7" "V\?\xd1\xc9\xa5\x8b\xf0\x43\x30\x31\x39\xb7\xb6\xa9\xbb\x91\"\x9b\xd5\x35\x16\xd8H\x63(}:\x62\x62\x18\xf3;KOJX\xad\x16\xf1\xec" "'-\xca\xd8\xfe\x85\xc4\xde\x9b\xda\x03\x0f/\xa0\xd5\x88\x38\xe4\xefW+\xff\xd1\xa6\xb6\x13\xdfV\\\xf4;Pq\x19\x8e\xa6g\x05\x17\x37" "W\xd6\xa7\xaf`\x63R\x9c\x01\xcd$,h\xdb\x0c\x14\xe7@\xb3\x32\x37V\x08\x86!xt\xb7m\xb0+\x64\xafS\x1c\x02K{q\x8b" "\x11+\x85\x99\x37\x9e\xa0Y\x0b\x05\x1b\xcb\xd4\xe2\x41\x89h\x8b\xc9\x82O\x37\xea{l\xcb\xe7\xce\x92:R\x8fT\x11\xc6q\x13\x35\x92\x82\x65\x1e\x01\xb3\x19Q\x63\xadQH\x45I<\xc9!\x9d\xb6\x1fH" "w\x96\xe1\x00\xcf\xa6\x81\xde\xeeO\x31\x43\x11\xd6\x99\x02-\xdeh\x63\x1d\xef\xf5\x80\x66\xfd\x15\x96\x19YR" "\xb8\x0c\xcc\xf4g\x11-G\x98\x62\xd3\x11;\x96\x44\x34}P\xb3.\xdf\x38\"\x0b\xb8\x89\xe1\x04O|\xa0\xa7\xae\x63(G\x11\xd5w\xe4" "\x0eSQ\?\xa0I\\Mq\xc5\x81S\?{\x37st\xb3\xd3\xc6L\x0bl[;\x84%\xe6\xd3\"\x62\xe7\x97\xb8t\x0c\x1b\x45\x84\r" "\x0e\xa3\xbb\xc3\xa4\xcb\x62\x1f\x96\x1c\xa5\xcfG\xb6i\x63\xe1^\x45\x94{\xdd\x39\x0b\x37\x81\x03\xba\xa9\xed,\x1c\xf0{\x1d^\x10\xc9\x7f\xf8" "\xa2\xa6\x63\xec\xb8\x82\xd8\x62i\xdb\xa2\x8a\xa1w\x00\"\"\xfb\xac\x88\x0b\x96\xf6\x62\xe6\xe8U=\xd4\r\xd3\xb2\x9b;\xd2\x30\x11\xb8J\xc4" "\xdd\x1eq\x12\x1d\?\x42\xdc\xbf\xc3\x1e\r\x17\x45\x7f\x86\xdb\x8a\x1c\xc8\xe1\x65\x85\x88@\"\xde\x0c\x1d\x31\x8d\x37Q\x63\xf4\xec\x0e\x9c\x41=" "\x36\x31\xfc\xac\xd2%\xa2\x98\xa1\xd5\x0b\xd6P\r\xa0I\x0bZ\xd6n\xc5\x02\xf1\xcd\xd1\x9b\x02\xd4g\x43\x44:\x80\xd8\x81\x08\x03\x99 k" "\xa3\xf4\x06\x30\xd8\x8aX\xc6\xb5\x92\xeb\x1c\xcc\xd4\"\xb6\xf9m\x8bp \xf8\x82\xf6\x9a\xbc\xa3\x9c\x34P\xf8\x19^\x43\xf2\x85\"\x44`;" "\xc5\xbc\x63\x34\x9d\x87k\xcc\xf3\x32\xa9\xc7\xfcG\x19\x9a=\xf6\x37\t\xee\xbe\xc2\x95\x45\xc4}\x94y\xba\x1c\x10\xe7@\x16\x98\xa0\xe8M\xb0" "V\x1b\x13-\tS \x65MGo\xd5\"z\x7f\x99\xaeq\xa3\x9b\x9d=G\xef\xb4\xcc`\x8f\x06\xb1\x39:\xf3\x1e\?\xf9\\!\xba\x8a" "\x1f\xf5\xdb\xf7J\xb9\x31+\x97\xa0\xa5\x45\x37\xf4\xdb\xc4\xb4\xd8PG\xf4\xe1\x45\xfc(M\xa8\r=\x33{\xf8\xeb:s\x0c\x8e\xca\x10Y" "\x9fU\xfc\x1a\x06\xd1\xb2\xf5j\x42x\xf6\xd9z\xcc\xef\\\xe6\x1cwG\xd1\xd1\x61`\xc3\x32\x16\xa0\xc9\xc2\xe8\xa2\xec\x9f\xeb\x66\xc6\x1a\x65" "\x1ck\xd4\x8f\x91\x65\x07\x97\xc6 \xce\xba[\xf1\x15\xb1\x61\xc9\xc2x$Ln\x13\xf1\x13\x9d\x65n\xda\xdb$\x36\xc9x\xd4\x1e\x43\x44\xf2" "q&U\x04j\x05\xd8\xf1(\xf3\x99\xee\xf3\x0e\xec\xc3Q\xedZ\xf7{`\xd3\xe7\xf4\xfb\t;u\x34\xa9\xed!\x91\xd7\xb2UZ\xc5\xae" "#\x0cP*\xf6\x1d\x11\x05\xc9\x44Q\x8d\xb1\x43\xcf\xd8\xa6\xc2}\xd7\xc2,Z\x87\xe2\xd2\x31\x04\xeb\x36\x06s\x97\x88\x16iNpm}" "m^\xbaK\xa9\xbc\x30\x07\x0b\xf3$\xdf\x1a \xb5\xe0\xa8\x11>L_\x35\x86\xad\x44\x10\x9b\xe1\xbb\xf0\xa8\x32\x11+\x64\x10=\xb2\x8d\xb1" "M\xfd|\xb3\xbbK\xd6!\xf6\xc2\x05-\xd3\x80\xe0\x11\n\x9b*J\x1eI\x90\x14[\xc4\x17 \x0b\x1e\xe9\xb8\x15\x8b\xc0\"\x7fg\xdb\xbb" "\x0c\x93N\x0f\xe2\x39\xbf\xd2\xe4W\x9a\x43u\xb5\xb4\\\x92\xc2Z\x17\x44\x14\x11\x66\x96\x1a|\xe2\xda\xd1\xa2Q\xf0\x36l\x33\xaf\xe1\?G" "\xc7\xfeJ\x32\xef\n\x9bv\x04_\x0e\x39r\xe6\xa3\x37T\x90\xc0\?\xce\xb1R\xa0\"\xafoV\t\xc3P\xa4\xe6#\xa9\x19\xb5\xf9\xbe>" "Y\x16\?\x1dG\x38\xaa\x89\x38\xe3]\xa3Y\x31\xa1\xb4\xa0m\xc1\x15\\\x1d\xfcS&\x1c%\xf2\xd8\xe1!X&/O\x1c\xfd\xa5q\x44" "\xcd\x63\xa5[\x33)\x17\x1d\xb5\xaaT\x17\xce\x34\xb2\x8fY\xbf<\xbf\xb2\x61\xbas\xaa\x39M\xefw\xe2\xc9\xb3\xca\r\xbc\x9c\x90+Z\x44" "s\xc3\x34\xc4\xf4N\xc5\x32\xb1\xa2\x8e\x15\xbf\x39\xb2W\"\xca%n\x91\xb3\xf9\t\x46\x87w\x41,M\\\x8c\xef.\x32\x62\xf8\x00J\x85" "\xa2\x37y\xcc\xdf,\x42\x30\x10\xca\xb7\"\x66\x65\x9a\xccV*y\xcd\xdb\xb2\xb0\x10:\x45n\xbf\x10\xd0\x0b\x1e\xd6^\x43\x84X\x34\x11\xbe" "\xdc*\x1e:\x62\x15\x46\x45\xb4=\xec\t\x36\xcc\x14\x41\xd2\xc8;\xca]x\x63J\x1a\x9f\xd8\xa5\xa5\"Zz\xd2,X\xa0'\xbc\x1do" "\xaf^\x45\xbd\x89$]\x9e`\xce\xd3\xceK\x8e\xf0\xe3\x82\xf8\xfb\xec\xa2\xf7\x01*>\x16\xe2\xbb+\x32\"\x94 \x45m%\xfd\x13g\x9a" "\xf6\x91\xad\x90\x63p>\x85\x62\x90\xc7\xda\x8b\xe0\x31\x9e\x17\x99q\r\xff\xa6\xa7\xd1\xf5\xc2\x99\x1a z\xaf\xce,\x36\x17\xfa,,\xc8\x0b" "\xde\xf0\xd3:*!V\xdd\x35\x89\x30\xea~\xfay\xaa\xfd\x39\xe6\x10\xce\x66(\x10\x64\xa4\x10\xc4X\x94WW\xbd\xdf\x0fl\x38k\xe6\x91" "$V\xb0<\x97\xe6\x89\x84\xb2\x96}\xde\xcb\x15\x46\x61\x45\xbc\x8f\x95\xe2\x66!*\r\xa8\xbf\xa8\xbf$\"K@\xb4=\x88\xf0\xa2\xcc\x1f\x9a.\x16\x95" ".\xc0\xd8\xd5\xdbg%Mg\r!\x1c\xc3\x15M\xecT\\T{\x8b\x19[\xc0\xcc\x92\xaa\x62+\xc4JU\xf6\xa4\xaeO\xe8\xe2\n\xc8" "\x84\x9b\x14\xa6|\xc1\x05\xceq\x0b:\xc7\xb5\xddn\x9aL\xb1\x80\\V\xcd\x82\x16\xf8\xf4\x44\x17\x37\xd4\xb2s\x86\xedQ\xf2\r\x8c\xa1\x8a" "\xe9~\x91\x62\x81#]\x81#k!<\xee\xac\xc1\x96\\\xd0]\xde\x98\x1e\x17\x90\xb0U\xf1I\xa3\x61\xdd\x9f:\x8b\xce\xbe\xb6\xec'\x1d" "\xec\x46\xf9_\xb2%G\xe6\x02\\\xa9\x0c\x11!\x06ly\x8dh\x1c\xce\xe4\x39\xa9\xa5\x15\xa2\xdd\x80!\x1e\xad\xb1\xb8y\xe6O+,]" "\xbe\xa7}\x14u\x94\xfbr\x14-\x17\xa1\x1b\xc0\xce\x0f\xa8X\x1a[^!\xaf\x96\xb1\xb8\xbc\xa6]\xc2\xd8\xcd\x94u\xad\x10\xdc\x32L\x0c" "~\x8a\xc6\x64\x86\xcb\xaaj\xcc\xb7\x91(\x9b\xe8^\x17+~\x95-\x0e\x97\x1dN\xf2\x13x\xe4\xea\x61\xbe\xdb(\xf7\xab\xff\xcd\x42(x" "\xf4\xa1\xc9\xad\xce\xf0N\xe4h\\\x9e\x32M\xe6\x9d\x30\xcd/qR\xe0g\r\x7f\xf5\x1c\xd7\x0b\xe6\xac]tQ\xe3\x9b\xd8\x12\x9a\xb1\x90" "\x11\x0bL\xfe/\x8e\x03k\xdd\xc3\xa5\x41\xd9\x9b\x63\x38\xd5q\xc3\x31.\xbe\xc6\x37Kg\xfeZ\xa3\x63\x8d\x46\x98\x1e=\x06\x36\x9b\xd1\x08" "\xa4\x8c\xb3P\x11\xef\xf4!\xc2\x8f\x8c\xfd|\x92\xf9w\xb6Op\xec\x1f}\x39z\x05\x16Q\x43\x9atn\x9c\xc9\x7f\xb8\xce*[;\x86" "\x1b\?\x39\x92K\xc1\xaa\x0e&M$\xc3\xcc\x42\xdc\xd4-\xfb\xe1\xe9\xcf\x46\x34\x84H\xb7p\x06\x7f \x15\xdd\x34$\xe2\xa3\xde\xbd\x39\x1d" "\x39\xf3\xea/,\xa9\x1f&\x0f\x17\xce\xb4\xc3\xce\x1f\x66\x18\xd6\xb5\x02[\xf9\x95>\xb7\xb3\xa3\x42t~\x1a\xef\xe7\xc2\x15\xce\xcf\x1c\xff\x66" "\xf7\xa1\x46\x9d\x9f\xe9]\x64\x98\?\xca\xf9\x19\x62\xac\xa8XL\x7f\xda\x14\x9f\x89oX\x87\x36\x31\xbd\x62\xffw>\x80\xc7\x89\x88\x17_\x8e" "\xb0R\x8ax\xb5\x1b\x8e\x8ah{\x14M\xc4v\x05\x11\xafy\xdf\x30\x9e\x14\xa2\xea\x38[\x42\xc2>\xef\xd3\xeb" "\xed\xfe\xfdv\x82\xb8\x66\xaf\xffv\x9a\xdc\xf0!t\x19\xa8\x9a\x1c\xb0_\xfc(#\xfa\xa5\x8a\xcf\x8e\xa1\x02}<\xc3\xfe/\x62\xbfN\x9b" "\xaa\x88-$\xc4\xd5\x9e\xabp\x16=\xb1\xcc\xfa\xb7\xd8/\xa3\"\x07\x84\xfe\x97\xa3\xf5\xc8/\x19\x46S\xab\xb2PqL\xdc\x9e\x64\xa2}" "\x41\x87\x05>,\x39\x62\x9b\xbd\x89\x61\xe4\xf1\xd1i\x94\x83\x8f\x95\x8ay\x1d\xd0\x17\xbc\xb9\xd1uh\x02\?\x0f\xb1\x9f\xec\xa7\x8f\x90*\"" "\xfe\x9e\x86\xda\xfc\xfb\x8c}\x00*\xf6\x43g\x0b\xd3\x8b\"m\xaa\"\xf2\xe4\xb3\x92\x63\xe8\xf2\x66l\x8d\x33\x16\xea\x82\xf7\xbc\x38\xd6\xff^" "\x12\x8b;\xfb\xcf\xeb.\x46\xb4\x42\xa8\xff@\xb8\xdd\xe5\x83\xa3\x34\xcdt\xa7\xe2,\xc4P\x06\xfb>\xe0\xec\x9e\x0c[\xb8\x95\x8d\x1c\x43\xdf" "\xb1\x62iI\x9d\x95\x66\x97\xe7\xe0\x63\x19[\r\xc3\xa8\xb2\xaa\x38\xaa\xee\x35(;\xcb\x36\xbfU\x1f\x9e\x12*\xfe\x84n\xdd+\xf0z\xdf" "\xf5\"\xf5\xff\x97J\xe0\xc3\xcc\x9a\x91hT\xac\x38\xaaj\xd3\xec\xa9\t\xf4\xad\x1a\x8eI\x93\x7f|\xcb\xb0t'\xa7\x99\x18\xde\xda\x08\x85" "\x82\xc3~\xc7&\"\xdd\x88\xb1\xd0\xc9\xaf+\xff\xfe\xe2\xbf\x9d\x45=\x7fs(\x36,\xe4*v\x1d\xe3\xd6\x1e\xbc\xac\x8c%\xe5v\xdc\xc7" "\xcb\x8ew\xf7\x1d\xb5n\xb2\xe3\xf0\xaa\xd5l\x39\xda\x04\xbc\xe3\xcc;S}G\xabK" "$w\x32\xc6\xe5\x43\x11{\xdb\x93\xf5\xe2\xbb\x9c\x8b^\x38X\x0f\xd7\x43\x33Gl\xa2\x35Qm\x04\xfe\x94\xc2No\xa2\xf3\xbc+\x07<" "@%\x45Yi\xc0\xe5\x38\x63\xe7\xf9\xd0\x1b\x35g\xa1\x06\x8a\xd8\xbe\no\x44\xd8\xb0\xef\x62\xe6\xc4Iq\x9e\\\xee\x07v\x9f\x0b\xe2\xe3" "O\x46\x8c\x0e\x9b\x16\xb1\xf2\x03\xe1*\xfd\xb0\x30\x04\x17\xf4\x03\x9b\xdc\xef&\x37\x08\xf5\xab\x39K\xf7:\x99{p\x05G\xc6\x93\xad\xb8\xef" "\x18\xde\x9a\x8akx\x92\x81\xf5v]\x94\xff>s\x8b[\xf7\x8e\x1ash|\x1c\x18\xe7\xa8\"\xca\x7f\x9a\xfb\xb6,\x34\xd7\xd6}\xe6\xb3" "P\x87[\x1d\x9a\xb7\x45\\\xeb/\x38V\xc7\xb7-\xbdxi\x12\xd8\xcf|\xcb^\xc3\xd7\xda\x07q\x8bu\xb2\xcd\xd7{w\x04\xc7\x63\x15" "\x1d\x7fu\xb5\xb1\xcf\x9f\xdfM}&\xaf\x62\xb3\xb0\x65\x0b.\x34\x16\xe2\xfb\xbc\xbcv\x04\x46\x11\xf6\x38\xcaV\xa9w\x36\xa3\xf7{W\xc8" "\xe2wv\xc7\x1f\xdbq\xf2\x63\x9e\xb1(\xc5\x83\\(o\x7f\xa7\x83\xcbP{\x06\xfeQ\x83\x36\xf3\x42h\x01\xc3\xb2\xcf\xf0T\xfc\x08G" "\x33*\x8e\xb2\xcf\xfb,\x1b\xaf\\\x0c/~X\xe6\x02\x91\x88\xddh\xb7\xa3^!T\xd3\xe4@\x46\xb4<\t\xfe#\x0eU\xa3=\xc7\x30" "\x04\x98\x18\xd4\x87\xd1\x9e\xf4(>#\x17\xa6\x01'\x02\xbb\x0f\xfd\xd8\xa7v\x01\xf1\x37\x8b\xfb\xf3>\xb4\xe1OV\xe1/\x35:\xfd\xadZ" "\xce\xb4\xed\x65\x98L\x05\x02{\x08uH\xe7@|\xf6\xef\xabPZ\xb6N\x0c\xefT\x61\xbf\x8f\xf1\x9c\xf5\x63\xba\x0e\x85;\?\t_\x9f" "\xdbT\xc7\xd9\xa2\x14\x8f\xa9\x02-\x9b~\xf6\x64\xf7{\xf3\x81\x92\xf0'\x12\xe4\xf2\x88\x89\xf0\xc1\x30\xf1\xf2\x37\x88\x9c\x04\x88\xe8]\xaa&" "\x83(\x37]\xe4\xc2l!\xd9o'\x39\xe8}\xdeg$\x85\xa9\x37\xd9\x8c\x9d\x31\x39\x1e\xe8\x36\x86:\xba!oV\xda\xd8\x8e\x96>\x92" "(\x93^\x8e\xf5Y\xd9V\xf4z\xb7]\xb1\x36q\xfbK\x1d\x34\xdb\xed\x0c\x43\xf4\x0e\xb0\x9b)\"\x8b\x80\x89~GuR\xd9\xb6\x31\t" "\xc3N\x64\x13\xe1\x94\xad>\xab\x96\x18\x97S\x1c\x0b\x15\x1al+\xba\xfbhk\xbeR\x46\xb5\x46\x35`\xbe\x31\xb7\x35\xaa\x83\xdbq;#" "\xfaH-,<\x9d_\xbe\x0cM*\xb9>u\xa4G\x8c\x8a>\xa2\xc8\xb4\xd5\xf5Z\x11}\x36\x9a\xdcT\\Y\xf1\x96)\x88lS&" "&\x15\xd6\x8d\xca\x11\x42\x42\x88X]\x39z\xaf\xaa\xb1q\xf2/n\xfa\xddq#\x9f\x1e\xee\x7fm\x0fs\xb6\xc6\x45q\x8b\xae]^%" "\xed\x87\xc0\xb6\xc3\xae\xb2*\xabM\xbd\xcf\xa5m\x11G\xde*\\\xb3\x10\xf4\x36+\xa2\xcf\xfe\x45\x34\x1b\x15_~\xe3\xdck\xbe&\n\xcc" "\x8d\x92\xd6\x34\xc3\xdc\xa0I\xf6]\n\xecy/i|:S\x45\x62\xfb\xbb\xf0\x10\x8d\x45h!\xf6\x01\xc5\x85\xa3\x1a\xac\x07\x87\xf1\xd7\x10" "\x01]\xec\x98\x1b\xf0U\xf4\xc6'\x62\xe6r\xcd\x85^\xae\x84\x9e\x18!\x46\x15\xdf\xbc+M\xd8u\x0b\"\xea&\x44N\x34\xe0\x0b+\xf8" "\xb8\x1b\xce\xff\xb4pL\?YQ\xb0\x94\xa4\xe8&\t\x88\xe1\xb5v~\x35\xe6\x18\xf5\x8a\xe4yW\x9d\xc8\?\xf8\xba\x9eK\x8e\xf2\x9d\xbf" "\xd9\x9b\x33._\x15\xb0\x03\x43\xf1\xc5\x87\x11\xc4[\x11|\xdd\x45`>\x11\xdf\xee\xd4\x62\xbc\xc2\xba\x07\xf6X\t~\x14\xe8\x31 \xe2M" "\x42#_\xf2)\x13~\x9e\xe1\xb3\x1a\x9a\xc1\xe7*<\x88\x89\xa1\"\x7f\xcd\x93\x39\xdb\x10\xad\x07\x82:-\xce\xb1\xc6\xcf^]u\x0c\r" "\x66\xb6\x8e\xa4\xff\xbc\xfcp&\xca\xe7\xa6\x32G\x08N; \xad\x8d+\xae\x64\xd8!\x1a\xd8\xa0\x95\x61\x1a\x8a\x8a\x96\xa3\x64~\x90p\x15" "#\x99\x1f\"`\x8a\x8aG\xa1\x42\xcf\x8f\xe8\xdc\x15lP\xc9\xbc\xe4\x8a\xb8\x05|i\xba\xe8\x96\x1by>]\xb1\xffx\xce\xccZ}\xcd" "\x44P\x9b\x1d\rx`n'L\x16\xb3\xd0\xc3/\x66\x9b\x1a\xdf\xc5\xf2\xd5QU\xa0\x65\xddY(\xea\xe5k\xa8\x1a\"\xae\x8f|V\x98" "\xacs:\xe5\x7f\xe4kX\xa3\xaa\xf9w\xd3\x9d\xf3\xbfi\xd0\x0f\x84\xf9lV\x44\?u\xba\xab\x9d\x84\x8f\x05\xca\xb6\xca\x9czgs\x39" "\x04\x19>\r\xf5\xff \x30\xefV\xd3\xfd{\xd7|\x35p\x88_\xf3\xa0\x10\x14\xe7\x83\xfa\xdf\xf4\x39~\x19\x39\xdbT\xbf\xdc\x8c\xe8V\xcb" "\xf4\xe8\xd5_[\x08\x99\xbf\xb5\xd7\n\xaa-\x81\xd5[\xd8\xe6\xe8\xc2\r\n\xfe\x62\x04\x91\xed\xcd\xc4xk\xbfR\xf3\x00\xdfrz\xc2\xab" "\x9e<{\xef$\xa2\x8c\xe8:\xb3\x87O\x85\x1e\xc8X\xee\xd3\xb3\x37\xb7\x42\x89\xfe\x1c\x8aN\x44\xf6\xe1\"\x66z\xe5\xf4\xbc\xe3\x33\xb5\xf4" "\xe6\xd5\x95\x9d\xf4~G\xff\xef\x15\xc8N\x1d\xb5~\xfc\xf2\xf6\x1fn\x42)>\xee\xf9\xdcL\x45N}\xa5\xcb\x0c\x85\xdf=\xf0\x65\xa4\x10" "\x1aL\xc5\x42\xbc\x87\xc6\x17\xee\xbe\xb7\x93i|[O\x93\x82\xee\x9e\xa6\x46\x1bN:\x38\xcc\x98\xab\xd2\x41\xc5\xd5N\x15i\x31\x90\xa6\xa6" "\ty\xa9\x01\t\x93\x19\xdf\x96\x05\xcct+\xc6\xce\x42\xa5\x18\xf0\x9a\xc3+\xe2\xc8\xd1{t\x99\x14\xfb\xe0\"\x62\xb4\x33s\xd1\xa7\xca\xe9" "\xf8>\x39\xedS|p\xc3\x61:~t\x84\xa7\xbe\x88\xdf\x07\xbe\x66\x91~\xdf\x38\x86\x93\x7f\xff\x84\xda\x35yt\x0c\xb5\x62z \x1a\xab" "\xabL\xc2|\x46\x94.{\x8e\xda\xf5,Y\xc5\x96\xfd\xf0\xf2V\x41}\xcb\xb4\xd6t\xcd\xd7\xb5nh:J\xaf\xde\xeb\x86*];|" "Y\xeb\xa6\x8c\xdb\xf4M\x33V\xdb\x8a\x1c/\x37;\x85\xbf\xdf\x95\xb7R\x8d\xcbw\x82[\xf4\x35\x04\xc1(\xf7\x13\xc4U\x10}h\x17\xd1" "\xb5;\x11\xd3\xd5m\x94\x43\x0b\xdc\xe4.\xfd\x8d\x8b\x98\xbc\xb6(\xfez\x99l\x8e\x8a~\xe3\x9b\xc2\x38\x63\xaa\xdc\\\xbe$\xf3g\xb7\xc5" "s\xd9_\xd1uy\x11\xe3\xed\xb4\x0flS\xf9t&\xbd\xc6\xdfr\xbdy_\xc4\xc5\x1eR\x9f\xca\xe1\xf2\x0e\xc2\xce\xaaX\x8b\x86#l" "v\x02[\xe7\x92\xd9\x1d\xd9\x00\xe9\x0f\xf4\x84\xee\xe9U\xc8,\xd1\xcaH\xa2\xd3\x08x\xbf\x15\x34\xc9\x04\\\x9e\x44\x1c{\xc3\xde\xd4\x0e|" "\xfd\xc3U\x37u\xbe\xcd\xedg\x44\xb7}\x18{\x8fJ\xbf\x81\xb1\xcfQ\xf1\xec:\xfb\xa3s\xddO\x9e\xf9\x38\xc4\xab\x34\x86t^&\x9a" "G\x45\xc9\x99\xeb\xc5\x9bz-\x63&\xd0\xe5\x84\xad^\xb0i\x1c\x84W\xd1`\x81\x35x!\x9aO\x37\xf7\x93M\x87\x8fz\xcfZp\xcf" "\"|\x38\x88r\x87.\xba%\x65\xf3pJlz\xc3p\xe3\xb8\xae\xe1{%x,zs\xd9<\xd7\xc2\xd1\xf7}\xd7\x92\xb0\?\x41\x97" "\xf7\xc9\?\x0e\xbc\xf5o>r[\xb1\x9c\x11\x11\x14K\xc4y\xc9{\xd8\x8d\x46\x0b\xb5V~,\xca\x05'\xb8'\x08\x9f\xa9Xw\x0c\x9b" "\xd1\xc1\x06\x65l\r\x16V:q\xfc\x9b\xbf\xbb\xa8\xa1\x1b=\xde\xab\x1ex\xfd\x93\xc9\x18|\xaaO\xe4\xc7\x9aT\x83\x0cq\x8b\x9bg\xfc" "\xae`\x17\x88\xb5\xe9\x33\xbaQ\x9c\xb1\x43Q\xdc*\x1cg\xac\xfag\x7f\xf3\xa2\xa3h\x02\x1b\x0b\n\x65l\xd3\xdc\xa1\xb9L\xd8\r\x92!" "\x88\xb8,\x46\xbbuN\xef\x64\xd6\x8a\xafG\xb9\xefh\x39\x85xx-U\"\x85\xc7\xeb\x19\xcdX\x8a\x1c\x81\xdcY\x42\xf1\xef\xf7\x98~" "\x0b`\xf5 \xf2\x96\x45\x8c\xf2\x43\x1a\x31\x8c\xc1]\xcb\x44\xb4\x13\x13\xb1\xc4o\x62-\x9c\x8f+\xb4&\x62\n`\xe2\xef\x1e\xc2\xda\x80M" "\xd7\xd1\xc5qtV\xa2\xef\x89\x1e\x8bwv\x39\x32\x83u\x33\xa2\x45O\x08\xb7I\xcb\xbb\x89\xa5\xf3\xbfU\x03\x01\xe1\x32\x07\x32\x0f\x1d\xc2" "\xc1\x19\xc3\xce\x43\x88o\xb5 ./\\\xcc\xfc\xf2\xdf\x8b\xca\x80\x8a\xbd~`\xe3\x1e\xd5\x1c\xb0\xa9\x8b\xdc\xf5`\x62\x35\\KZ\x18\xa7" "#gQ\xff\x14h\xdb\x30\x05\xfd\x05.\xa7~m\x44\xea\x36\x94o\xf9\x17Y\xd7}\x89_\x31:\xbf\xc5\x0ez\x63\x9b\xa7s\xc4\xcaV" "\x36\x8e`~>\x63\x07u\x16\xcf\xf1\xfe\xd9\xc9\x9fqz{\x46M\x93y\xed\x04\x0f\xf1\x96\x90\x86\xcaP\xc6+\x7fX\x04\xf3\x36\x8c\x8a" "{\x41\x64\xf9\x8b\x98t\xf1n\xd2\xf1\x18\xb8\xba\"\xa2\x66\"\x62\xa6 |\xb8\xce\xd8\x17\x95\xe9\x30\xaa\xc8\xcaV\x8e~\xec\x61\x98\xb1T" "q\xc2YK\x99N\x8e\x65Zw\x15\x33\x87\xe8\x02]\x66\x37\xa5\x18\x1d\x35\xa2\x43\xd3\x13\xae\xd9\xc5U\xa2\xf3\x36\xb0{\xe8\x88\xfd\xda\"" "\xc2g\xbb\xc2\xde\xbf\x82`\x95\x86\x1a\xb2\x1e\x03K\x05\xc1\x80\x9b\x0c\x19\xdc\x64\x18\x05\xc5oG\x44\xce\x36\x91/\xb7\x82$\xb2\xcd\x86\x65" "\xff\x19\x66\x44\xea\xa2\r\x8d\xef\x32=\xa1\xa5\xa3\x81\x98\xdbM\xf7\xc4j\x44\xb9I\xba\xf7\x92\xee\x9f\x66\x18\xfbo\x65\"\x86\xcfx\xf6\xa8" "\xf8lV\xd0g\x32\\\x9e\xcd\xb8\xc1rop_\x8b\xe0\x1b\xdd\xf0\x1aQ\x87\x1f\x41\x83Q\xd4\x45\x31\x38\xa2\x90Q\x01$\x43\xc4\t\x61" "\x16\xff\xda\x10!T\x45\x1cV\xb7\x8eh\xca\xd4\x14q\xd2\x0c\xac\xf8\xe6\x9fI\xa1\x9b\xe9\xa6@\xf6\x01\x84\xe7t\x83\x95\xa1\x81\xf8\x34\xe1" "\xb5\x37X\x13\x1aq\xab\x94\xdc\xce\x11\xaf\xc6Yz\xf9I\xb6\x06>\xe4\x64\xea\x1c\xff\x8e\xc1\xe0\x45\xd8@\xe8\x03\x41\x8b\x8b\x66\xa8\x11\xdf" "KSg\xf1\xfe\xb1\x33\xb5\x10\x0c\x0f\x93\x97\xb5\x33\xcd&\xef\x0c\x16\x82\x86\xa6\xac\xcb\xe5\x39\xfc\x36\xc2\xa7/k\x8d\x35\x84\t@\x03)" "\x61\x0c\x33\xd7Rv\x36\xc6\xee\x66\x63\x9ak\xef\x1a\xcfOo\x66\x45\xb6\x93\x46z\x7f\x1f\r\xa6Q\xff\x08\x0c\x1a\x61\x83&\xe4\x46:@" "\xb1\xa6\x43<\x1e\xb7Y(&\xb7\x07\xd1\xd1!r\xb3\xd8\x81\x7f\x45$\x04j\x36\xb0\x99R\xb0\x62\xb1\xbe\xeb\x8b\xc0\x06\xf7.\xea\xc6P" "X#\x84\xcd\x45\xcf\x8a\xf2\xb8\x1d\xb6\x41\xc5\xe8\xca\x1d\xa9\x94\xc5\x85u\x8c\x41\xc8\xd8\xf1\xdb\xa6u\x1f\x98(L\xd0\xc1\x94%W\xcf\xb4" "\xe9)SU\xf8{\x98\x61\x1b\x8bm\x1d\x18\x9c\xe4\x9dY\x34&\x8b}\x84\x38H\x64\xc7\xc4\x13G\xde\x66KM\xc2\xeb\x16\xbd\xd6\xc9\x90" "\xc8\xc1\x98\xc6\x97\xdf~\x16\xe9\x46\xdc\xc0\x34\xd8\x66\x86i\x08QgMG\x8d\x64\x64\x91\xb6\x95}\x38\"Y\xa2\x88S=_\xbc\xcf\x9f" "\xcd.\x10\xea\x08\xcc\xf6\xa6*>\x12\x9f\xf4\xbbP~\x95i\xa4%\xb2(\xf7\x90\x39\x0fW\x1e[\x96O+\xfc\x82;\x00Z\xeaIw" "\xdc\xa3\xde\xd4\xe2^\xbdVtV\x94\xef\xb2/oq\xe7^+\x9b\xe4@\x99>ojIH\x95\x11\xe1\x12\xdf\xc2\x96\x66\xc1\x46\x43\x63" "VY\xec)\x61\xcdGG\xf6\x87\xa1\xac\x05\xb5Hw\x9e\x9di\xb2]\xe8\x0f-vN-z\xd3*\xb2\xf2\xcb\xb4\x93g\x86\x45OQ" "\x66Ot!o\x45\?<\x1dv\xb2\xb4\xe2\x9d\x96\x95\xccW\x86\xd1\xb1Y\x99\x96\xa1\x7f\x96\xc7k\x62\x1f\xa5(\x37\xedW\x41\xa8\xa4\x66" "\x8b\xbdR\x8b\xbd\x92\xe2\xd6\x61TY\\^!\xca\x18\x98Y\xb0\xc0jx$\xaf\\\x88\xb9#\xa8\xf1%\xc2[\xb2h\x0c\xe1\xbdR/" "`\xc4-\xc3hp)#\xa9\xa6\xa5\xd0Lh\xfbH\xb3j\x9f >\x17X\xab\x83H\x61`w\xbf\xdbyP+~\xd8\xb5\xb8^'" "\x19\xb6\xa9\xe5\xc1\xde\x1f\xf4\xddY\x82n\x61\x96\x80\xc2P/\xb6xv\xa6\xe7\xde\x32\x0e\xf0\xbe\xae\xaa\x98^\xbdG'\xfb\x64\xbf\xff\xb3" "\?\x8fO\x07\x7f\xbf;\x1b\xb8 \xb7hZm\xa9\xed]\x83\x96\xe5\x33\x0c\x1b\x9c\x85\xa1Sm%\xddg=\xda\x41uM\x66\x9f@\x99" "\x1fX\xf0\x33\x63\xf4\x43mi\x17)\x45y\x82\x82\xd5\x44]\xc2\xf6\xc6Y\x36\xa8\x39\xd3\x96\t_\xf9\x16\xa2\xbd\x08^\xa0\xda[\x62\x9e" "\xf0J\xbc\xfd\nZ\xc5\x46\xf5`\xaf+\x88\xc2J\xc7\xa8T\xe9zW\x35_\x18\xf1[\x36\xf1\x0fg\x42\xb8G\x45\x94\x43\x36g\x87\x30" "t\x8e-\x9d\xa8\x66~\x03\xc6R\xd1\xaeV&\xf3v@\xe6\x84I\x1b\x0f\x8e\x10\x32\x86\x7f\xb3.uX\x65!\x64\x8c\x31\x0e%*\x86" "\x8b\xb1\xb7\xa1\x1e\xc9\xf8L\x86!\xd0\x1a\xd8\xac\xea-\x7f\xd3\x46\xa3\x94\x89%\xb0S\x96;\xda\x9b\xea\xbb\xfe\xd4\xa7\xf5\x96" "]]\x38\xac\xa1\xf8\xfb\x83\xec\xe1\xd9\xcc\xc5(\xf7\x46\xf3\x85\xb1\xc3\x06\x35j\x63\xff\xf4[z\xe0\xec\x18\x01*\xc0\x9e^\x91\x96\r\xec" "\xa3\xc2\x8d\xab\xca\xe2\x9dy\xd2z\x44\xde\\\x1c\x08\x13p\x63P\xfaL\xf4\xe4\xe4`w\xbfH(\x03\x36\xbc\xd0\xb0p\x16\x19\x0e\xbb\x01" "\x35\xd5\xcb\xe5)\xb7\x9d\xdaW\xbe\x7f\xa2\xaf{gI\xe7\x46\xe3:t\x1f\xa5O\xf8\xf7\x8a\xc9G\xcb\x45\xea\x90\xad\xcdR;\x7f$\xb9" "\xd2\xfc\xec\x1f\x8e\xc8\xe4\xd0t[X\x1b\x61(\x04\xa1i\xb6\x11n\x38\xf8\x9b\xb4\xb9\x03LQ\x33\xaa\xef\xd4\x9d\xe9\x9a\n\xac\x1f\xc6\xfa" "\xbe\x64nl\xfc\x80H>\xcaZ@\x8c\x17mz\xd4\xb5i\\ls\x8b\x93\xe0\x0f\x10+{m\xdbX\xe4\xceTmjgmSv" "\?\\\xa4\x43\x0e\x93\xd2\x1b\xa6\x85\x95\xfc\x91\xbd\x39\xfa\x43\xd3\xbe\xd5\x8e\xefJ@\xac\x45\t\x1e\x01\x31\xc7i'\r\x9c\x98\x1bs\xdaT" "~\xdb\x34\xe6\xb7\xfd|i\xfe\x95\x38\x05\xf6\x7f\x81\xe3\xae\xa3zk\xf0\xd7\xca\xc2,\xb6\xcd\xcd)\xee&\xa2\xe8\x65\xbey\x38W\x8b\xa9" "\x85\xf8m\xea*\x87\xb4i\x36\xf6g\xf9\x33\xe4\x9a\x15\xe3\"\x1a\xa6\x03\xab\xb0\xbd\xbf\xdf\x06p\xba\xff\x87\xd5;\x8at\xd7\xe9\xb1\x89(" "\x8a\xaeN\x83O/\x42x\x04\x45\x44G\x33\x31\xce\x97\\\x44\x18`\x88\x18\xd9{\xc8\xdd\x63H\xb3y\xcfr\x8c_\x04\x11=\xac\x8a\xec" ".z\xb4\\)\"\x9e\x85\x8asG\x1a\rT\xd4I\xe8\xd9\xd0\x19\x32\x44\x8bX\xe0\xc9Oo\x38\xd1\x10\xf1\x0exv\xcf\xc9XOz" "\xcc\xf0ii\x92\xb6x\xd2\xf3K \xac\r=\xbe\x8b^\xd4\x42\xc9\xd1\xf4 x\xe9\x88\xdc\x05*\xbe\x01\xefo\x1d\x39\xaf\xe9\x45\x8f\xbc" "\xd0\xd3\x80\x38v\xf4\x92\x36O\xea\x1e}\xa6{\xba\xdf\xd0\x62\x8d\x89\x38\xe2\x15G<\xd7\x88_\x19u\x80\?\x01\xa3\xdf\xbc\x8b\xb4k\xa9" "\x88\x10\x63*~J\x63I\xf3m\xb2\xaf,\x9b\x1d\x13\xaf\x81\xcb\x87\x64w\x18\xde\xfbz_\x8a*\xcdY\x15\xeeQo\xe9\xc5'x\x88" "\xb8\x88\xa2\xa0\xaf\x0e\xd3K\t\x86\x1d\x83=z\xd5*\x86\xcc\x93`\xc3\x31\x32\x10*[\x8av\xb6i\xe0\x06\xe2\xd6!\xf1\xdc\xd1_\x45" "\x8c\x8d\xa0=\xfa\xf0(\"\xe0\xac\x8akG\xaf\x0c\"\xd2\x9a\xdb\x43l\x1e\x45\xbck\xe4\xedS\x1c;\x46w\xbc,|\xb0\x14\xb9X\xd8" "\x63\x8f\xd0\xe3\x1e:\x45.T\x8b\xb8\x88\x8b\xaf\x10\xefy\x82{>\xf9=\x9f\xf5\x9e\xd7|\xe0\xbd<\xa0\x46\xc4\x8f\x05GnzT\xd1" "\x9b\x87\x88\xde&\x10_O\x91\xa5\xfdX'\xb2T\x9ex\xc7O\xbc\x81\xee)\x91\xb7\xdf\x43\x85\x96\xd7\n\xdc\xfbp\xf4\xa2J\x0e\x9e\xe3" "\xcf)\x45\xdc\xae\x37h\x46&P\x0c\xdf.\xa0\x0fI\x8ew\x1c\xb9\xcc\xd4\xa3\xef@/\x39\x1d\xeb\x44\x13[<{\xdcY\xd9\xe3\x86\xc9" "^r\xd5$>\x03-l\xb1\x62\x1fY\xa7\x44\x64\x03\x15T\xf3\xe8\n\x8f\x9e\xbc\xa1\x45 \xae\x9f\xe2\x02\xf8\x81\x37\x94\xf4yGP\xbb" "\x15\x45\xc3\xf4\x16\xedu%\xf9\xe4\xcd~\xae\x80_\x37\x8e\x9b\x43>\xf5\x8c\xa5\x01g\x9b^\xc8\xc3!\ru\x07w\x96\xee\xd6\xfd\x87i" "\x0e%\xedm\x8a]~\x8f&\xed^z\\K\xafp\xcd\xd4\x62J\n\x16\xaf\x88\xfcJ\xe9.=o\x41\xbc\"\xde\x0c\x1c\xe3\x9f\x1d\xbf" "\xe9\xb4\x86\x87H\xef\xa6\x8e)\xac\xef=\xae\xf1\xf5\xd2\xfe\x8f\xa3\xcc\xa2\xb9,\xa7l\xbb\x63\xbe\x97\x8ePY\xe8W\xa5\xe8#\x80\x88\x88" "\x08h\x62zZt\x91\xe6G\x11Q\xea\x1c\xf0{t\x41V\xf4N\x9b\xaaUo\x93\xeb{!y\xd1n.\xf1 \x9b\xf2\x13\xb1G\x1c" "\xfc\x7f\xb6\xde\x44+\x95\xe6g\xfb>u'\x10\x45\x19\xb6\x38\x32\x83\x0c\x02\x32(*\"\xc3\xc1|\xf6t\x16_\x92\xebJ\xcb\xfd\x7f\x9f" "\xb5\xf6\xda\xbf\xa4\x85\xa6\xbb\xba\xba\x86T*!q\x63\x1c\x36\x0e\xbd]\x10z\x83'\x62\xf8\xde\x0b\xda\xa8*\t\x1b\x66\xce\xcb\x86\xc8\xda" "\x65\xfc\xb3\xe2\xab\xc6\xc9\xd8\x30\x19\xc9\xadl\xc3:\x1e\x16\xa2\xa3\tWmg\x90\xf9\xa1\x81k\x98\xac\x7f\x92\x1f\xeeQpq\x9a\xb4y\xfe\xcb\x96\x93\xf5n\x44\x7f\x42%\xd2\xa2\x8bx\xc5\xd3]\xdf\xa5g\xbe\xae\x39\x83L\x8e\x0e" "<\xa2\xb5\x9c\xfe\xa0\x44\x64L\x0c\x11W\x34\x18\x8d\xfe<\xd2\x45\xfc\xe1\xf8\x61\xa4\xe6\x11\xec;\x19\xd1\x96)\xbcN^\xfc\xaf\x65'\xbd" "\xfcU\x44Rk\x13\xe9;\x64\xa2\x17t\xf1\xde\xc9\x9d\xb3*\xfe\xedzQ\x8d>\xf3*r\x04o\"\xdaM\x15\x93\x07\x16V\xd1\xafm" "\xe6\xd4=\x66\x96\x8f\x1eZ\xe9J\x86\x04j_\xc3$\x64\x44S\xef\x88\xb6\x9cQP\xde\xa6\x87\xfe]\xd1&\x37\x42\x84:\x61\x03o\x99" "\xee\xa1\x43P\x83Q\xf0|\x96^\xd3\xf3\xd4\x99>\x0f\x11\x11\x93\x41\xc4\x15\x02]\x8a\xd8\xbb\xa0\x33\xde\x88[\xc9\x46\x41\x9f\xcfg\x90w" "\xfe\xed\x17\x1e\x05\xc3Og\xe0\xf5\xee\xe5\xc9\x89`\x9d\x10\xfd\xaf\xaf\x1f\xe0\xf4\x82\xa3\xa3\x11\x17\x65\x94\x32\xc1\x89~^]\xe3\x04\x66\x94" "\xbeT\xd3'Z\xa6!\xe6i\x92R\x8d\x16W\x11\xdb\xe9]\xcf\x9du\xe7\xe1\x95\xc3\xcb\x61\x84(\xc3\xc6\xdfu\x9e\x61m\x46\x8c\x13\x30" "\xe2\xfe\x8b\x11\xe3\xbf\x8c\x82\x9f\x35[\xf3Q\xfa\xcam\x8e\xd8\x33\x8c\xd2\xe4K\x10\xfd\x99l\x8e\xc2\x0b#\xdd~" "\xe5\xf7\xb7;&Y\xe3\xf6\x19gX\xbbp\x91\x03\x8f\x11\x8d\x64#o_\xc2\xb3&]\xa2G~\x42\xa1\xc6\xe4\x9c\x95]\xf3\x96J\x45" "\xb8S\x9a\x08\xf7L\x8a\xde\xa8\x42\xa3\x85\xd0\x34l\x18S\x11\trM\xe4\x1e\xf1Qxq\xc3\x9d.#nr\x13\x8e\x19\xe4\x41\xc4o" "o\xf4T\xcc\xe1=\xd2=)|\xf7\x38\xc5\x1f\x85W\xe7\xfe\x98\x91+Gx\xdd\x64\xe0/\x11\xbbQ\x07\xd5ZjM\xfa\xc1\xc2\xd0[" "\x9c\xb0\xf0\x12W\xf0 \x91[\xd3\xe8\xad\x96\x8al\x14\xc2\xe2+\xed*#\xce\x9e\x95\xde$z'\xa0\x9by\xf8\xc6\x8a\x98\xd4_(\xe2" "\xbd\x0eo\xcb\xe1\x07\xaf\xe6\xb6\xe3\x8c\x35J\x32j\x32\xc7\xfb#\xee\xa8\xd0\x08M\x32[\x46HU\xd3\x38\xe6\x18\x85U\x9e\x91\x8f\x99." "\xb2\xca\xdf\xd5\x13\xf7=\xa9\xc6m\n&n\x8a.\x86\x97G\x9c\xcd\x98\xb6\xdc\xb9\x18\xb5*\xd1\x0b\x7f\xbbu\xee\xa4s\x91\x8a\xdeH\xd0" "\x17g\xa4\xb6\xc3\xce\t\xc5>\x17\x1aG\xe1\x0c\x15\x33\\\xa2\x62\xfe\x19\x31\x46\xe1g\xcek}\xfa\xacW\x19\xe4\xcd\x10\x11\xb6\x00%\xd7" "\x88T\x8c\?Ys\x37\x15\xef\x0b\xa2\x63\xbc\xed\xea(}~\n\xf1\xf4!\x39*R\xfc\x46tg\x11\xcf\x9e\xd2\xb8\xd5\xaa\xe1\xe6\"\x19" ">\xb1J\x8a\xe8}\x8e\x88\xe9\x19\xfc\xaf\xa5\x0e\x9dX\x46\\\x31T\xd2]l\xe4\x1d\x8e\xba\x18\xb3\x39\x10\x31=\xdd\xe3\x0f\xb2]\x88\xc8" "\xceJhQ*\x8e\xff\xb4s\x39\xe0\x9an\x07+\x8cR\xedv~ \xd2\x1d\x46\x35\xae\xeb\x8e\xa2\xf6\xd4\xab\xb4\x88\x31\x0b=\xea\xcc}" "\x18%\x62z\x31]\xa6\x44\x16\x91Mj\x34\xf0\xbd\xc1\xa3hx\x94\x9c\xf3;/\xfb\xf4;/\xfb\xa4\x8eW\x34\x1a\x37\x9d\xda~\x62+" "\xdf(z\xad\xc4X\xb4\x13q\x17\xbc\xde\xfb\xdb\x1f\xbd=\x44\x17\x1d\x8a;\x46\x0b\x19\xa9\xf7\xa8_\xefz\xe6\xd5\x00\xd9.\x85\?g\xde" "\x0e\xfd\xb9^\x8c\x18\x8e\x45\xa9\xd1)\xb0i~\xa4\xd3\x86:\xafhs\x83\x08\xac*\xdeyU\x15\x31\xde\xa1\x19\x8b\xb6S\xeb'\xf1\"" " .\xa6p\xff\x83\x8c\"\xb5\x91\x8c\xde\x65<\x11\xb7Q\xda\xf1q\x85\xd6\xec\x11\x37\xc8)\x65(\xf7\xcb\x9bV\xad\x7f\x12\xf2q\xa8\xb6" "\xbbO\x8ep]q\xa6\x14/\xf1\xa8\xe3\x8b]x\xf7\x8d\xe0\xc3\xa2]\xa1:r\xbf\x9b\x92\x81\x10\x46>\x96R\xcf\x85\xef\xe9\xf0k\xdd\x82\xad" "\x43\xa3\xcc\x93\x97\x19\x97\x91\xc6\x08\x04.\xc4\x9cg\xcc\xa5\x45\x65\xf4t\x1e\xac\xea\xd0\xd0\xd6\x8f\xb9\x7f~\xcc\xc6\x63\xcc\x1dR\x63\x96\x9c" "R\x43\x06`r\x39\xe6\x32\xe0X\x33\x1f\xaf\xae\x43\xc4hUM\x07\x14\x96\xb7@\xb4\xfe\x89&\xd5\x86\x11zLk\x9c\xb0\x1f\x9f\xe1\xe4\x66\xf2\x17zh\x82\x1c%\x42\x38L\t\x9b$O\x81" "pQ\x13\xba\xe4(\xa5\x39\x64\xff\x37\x61\x37\xe4\xae\xa5\x13\x9d\xa5I\x65\xdf\xf0\\%\xfe\x06\x9c\x1b'\x9c:)\xf9\x8aL\xf8JN\x82" "{\x94\x82\x86\xa0\xad_\x1e\x88\xd1\xe0\x88\xb1\x8f&H%\xa8\\\xcb\xbb\x11_w\xa9m\x9dt\xab\x86\xb8v\x91\x13\xc6\xf4\x39\n\xd9%" "S\x8c\xb7\x33\xee\xdd\xd4\x03\x1c%N\xb8_s\x62\xa1\x04\xd7.\xfe}s\x9e\x16\x66m\x8e\x05*\xdd\x44U\xe7%\xd6\xf8\x37\xd8\xfa\x95" "\x32\x0f\x80\xd8l\x81-\x16\x12\xdc\x08&l\x62&\xdc\xa4=\x61\x90@%=\x0f'H\x34\xa0\xfct\xa6U\x62^\xd4\x98J\xcf\x83\x43" "m\x37\xa5\xb6\x41\xaau\x11\x11\xb6\x43\xc8\x32\xc6\xa2\xe4\x84\xdel\xca\xf4\x10\xeb']\xfd\x85\xd3\xb8X\x83\xf8\xad\x41\xa8\x90^^\xb5\xa5" "\x33\xbdPx\xd2L\xb8&\xa0\x8c\xa7m\x8e\xf3L\x9b\x9frO\xa9i\xbb\x12\xb2\xfb\x89\x86\x06}\x42\x9f\xe1\t=m&\x32\x05L\xdf" "\x02\x11=\x9f\x8bhXh\x98\xd0%S)M\x8b\x0c\xf9\xa0!\x14\xc4\x84s\xc2\t\xe7\x84\x13.<\t\xcb \x9c\x36\x85\xdf \x66]" "\xcax:\xfb\x13\xd3\x8a\x7f\xd0\n\x85y\xd4\xab\xb0\x32\x8b\x1ew\xec\xb7&\\\xa8\x9d\xd0\t\x43\xe9\x15\x91m\xfe\x84\x1e\x46\xc2\t\xf8\xe0" "\x8b\x8d\x13N\n&t\xa6\x98\xfc\x1d\x1f;\x83\xa3\x7f\x11\\\t\x45\x9b\x38\x0fZ\x1c\x34\x14\xdeV\xe8\xbfu\x89+&\x13\xee\x06W\"" "\xbf\x34\xb4:K\xa3\xeez\xcf)\x15\x9b>\xa2\xa2\xb9\t\x85\xa2\x34\xca\xc1\xecJW\xe9\x32y.\x94L\x90\xbc\xb4\xe6\x46\xca\t\xfb\xa8" "I\xb8\x62i\xfa\x85\xb0\xdd\x16z\x8b\xc3\xb9\xcb\x84\xdd\xd6\x84&\xb6\t\xbb\xad\x89\xfa\x9b\xf1\xb1\x46\x15\xd4(\xdd\xc5\x87X)\x13\xee*" "\x9b\x44\xb5\x63\xa7\xbf\xbet\xd3\x98p=\x7f\xc2\x05\xd8\t\x97L\x94\x1c\xc0M\xe8~;\xa1S\xed$\x9a\x9c\xea]^\xcb\x00\xfa\xd5\x9f" "p\xb4\xb8&Q\x0f\xe8X\x33\xf9\xdbN\x36\xe1\xde\xb4\x89\xf7N\x11,\xc1\x13v\xb0\x13\xba\xb7N\xe2\xe3+g\xf0\xd5\xa3iv\xc2\x61" "\xb9\x32\xc8\xbeq\\:\xe1\x9a\xc0\x84\x9d\xef$\xbe\xe2\xf1\xeb\x0bg\xb4~\xf3\x87\x15\x97\xf0\x08\xe9.\x32\x61g<\x41\xce+\xe1\xac\xe7" "\xd4\xc1>\xf6\x46L\x38n\x9d\xd0\xb8\xaf\xf4\xbeV\x44\x7f\xd5\xd4\xb8\x9f\xee\xb8\x9a \xca\xbe\x90\x95\x32\x39\xe9\xfa\x33\x81\xe8\r\t\x87-" "\x93\xbf\x00u\x13.\xdaL\xb8\x0b\x63\x42W\x8a\t\xe3\x08O\x12\x84\xa8\x9e\xf8\x30\x80>\xa5\x13Z\?'\xf4\x17z\r\xbe\xed\xee^\xc3" "\x8b|\x9ck\x30\x88\xc8\xab\xae\xb1\xe5/\x82\xd5\xa9kQ\xb9\xe1\x1a\x87\xf6\xaf\x1cO\xbf&/\xd2Y^q\xe2\xaaZ\xf2vLm\x46" "/\x83\x19\x87\x8f\x33z\xf0\xcfX\x7f\x66|\xbf\x95\x34G\xa8\xc8\x92\x9e\xc5\x1fV\xb6\x8b\xdf\x95tNO.r\xa0\xbaP\x7f\xba\xcb\x87" "pP\x85\xb6\xb7\xc2^\x04\x99\xe3\xe8$K\xf1\x34\xfa\x97\x87\xa8q\xf4\x9e\xa4Uw-\x18\x66 \x16\x9e\xe8\xf6\xbb\xb0(o\x37H." "\xad\xda\x33\x37.,\x82\xcay\xd8_\xa6\x7f\xa8\x9c\x1f~L\xb4\xb7\x0b\xf6\x61\x8b\xa0\x33\x04\xd1\x31\t\xdd\xc5M\x03k\x06\xcd\x35\xc4\xef" "}\xf8\x36\x82\xb8>G\xbe\x15\x11\x37\xfd\xa8p\x11uK\xa9vW\x8c\?yS\xd8\xde\xb3`[\xbb`K\xb9\x08\xbb]\x10\xcb\x8e\x0b" "\x06\x98^\x84\x1b\x94@\x94\xad\xf8\x8f\x46Y|\x35\xaa\\G\x9d\x01W\x01\x45[\xb0\xd9Y\x44\x8d\x9f\xf4\xb3\xe8g\x17Q\xef\x38\xf9\x37" "O\x45\x38\x82-\xb8\x10\xb8\xe0\xea\xd8\"Z\x8e-\x1e\xde\x18\x1a\x62\xd4*\xd9\xe4\xa8\xc8\x37p\xa1i\x44\x61\xdaY\xa4\x87\n\x17\xfe\x30" "\xe2vW\xf7\xbc\x63\xb9\x9e\x1a\xa3T/\xe2\x19\xaeMw`]\x17\xc2\x19\xaeP:i\xaf\x19\xc9\xed\xad_\?\xdf\x11\x65\xf4\xd3\x45\xaa" "\x45\xd1\x1e\x8e\x93\xfa\?z\x07/\x92\xea\x11\x88\xa5\xe2\x45\xd2\xa9\x39\x0f\x1e\xa8h\xc9\xf7\x33\r\xb0\x0b\x0b\xc1\xbd\x85h\x89\?\x95\xf6\xea" ".\x83\xdc\x11\x88\x0c\x08K\xd6\x00%_\xe2%+\xf8\x92\x86\n\xa5n\x0b\x44`\x9e\x65\x98\x7f\x04\xb1.\xad\xe9\x98\xe2\xabL\x88\xf5H" "M\xca\x14\x65\xf1\x01\x64\x61\x13\xb6\xeb \xd6\r\x95\x81t\xa7\x17/\x7f\xfd\x99\x1d{\x1e\x30\xb2\x8bj\x07\?(Z\xf4t\xf6\xff|%" "\xbe:!\x87\xf8\xfd\xe0\xdf\x15\x1d\x66\x96\xba\x9c\x39{\x92\x86\x1d\x1aZ\xba\x65\x02_\xc3\x0f\x8e\xab>\xe4\x9f\x31\xe9\x94\x9c\x7fn\xc6k" "\x36\x8ak.\xbd\xac\x61>\xe7\xf6\xb9\?M\xfe\xa9\x9c\xbd\x66\x87\xaa\x7f\t\xef\xf3\xf1\xea\x83\xda+\xb8\xb6\x95\x03\xecl\\#\xc1\xb3\x10" "+\xc8k\x0eQ\xd7\x9c\x66(\xff\xeeT\xb5\xa0~\xce@\xea\xa6\xad\xfaj\xf2L\xed\xd9zL]\xe2\x31T\xf0\x18\x30\xeb\xdf\xfd\xd4\xc9" "\x19\x80\x89X\xafZs!O)\x9d\x12\xdd\x90U\x0b\x32O\xc1\xa0\x92j\xb9K:\x66\x98\xb6:\xa5\xff\xbbi\xdfol\xf0U\xe3\xb8" "\xca\x44K\x08l\"\xd2\x1c\x9a\xc8\t\xe0\x9a\xdb\x01\xd7\x9c\xc9\xad\x39wZ\xb3\r^s\xc3\x90\x92\xd3\xde\x35;H\xa5\x66\ny\xaa\xb9" "\xc6\xa6\xcf\x44\x0c\xdfM\xc4HS\x45vh*r\xe5\xdd\x44\xbf\x14\x13\xe3]\xd6\xb5\xe4\xe1-\xd8\xf1\xe7\xfd|\xb0\xab(us>\xb6" "\x99\xaf\x39gZs\x1e\xe4QG\xd7\xc1\xcdKtS\x43\xc6)\xd1\x1e\x87N\x8eT(\xf2\x1dS-\xbd\xfd\xc7!\xfd,TT\xdb\x1e" "\xd6\x30T\x93\xee.^\x15\xd3\xab~\x64\xbeN\x11kk\xa7\xd6\xdd\x02\?Pg\xf9\x63\xf5{\xcd\x85\xc2\x35[,%\x8d\x16k\xbe\xff" "k.\xfe\xac\xbd\x8a\n\xd3\xa2\x13\xf1\xee\xdc\xeb(\r#\xeb\xb4\x1e}\xf1S\xablZ\xc0p\x38Z\xd3}Hx\x43\xf2\xa3\x18\xd7\xaf" "\xe9\x32\xb4\x0e\xb1\xc5`\xcd%\x83u\xf8\x88\x9b\x42\xc6\xa7t\x1b\x95\xf2o\x45\x42\x35\x9dj\xdc.\xa9\x8d\x9cH_\xa4\"O\xd7\xc4\xad" "\x85\x9d\xb9\xf3w\xd3\xf2*%\x9a<\x01\x1a#L\xe3s\x87\x18\x64\xab\x07Z\xf8\xda\x0b\x32\x1f\x07\x07t\xa0\x83\x01\x8d\x1d\xe0k\xa6\xe2" "\xff\xb4Wv\x0c[\x99M\xe4\xf3W\x91\x05\t\x91N\xb3\xae\xb1\xd2@\x63H\x12\xd3X\xc4\"\xfa\x63\x82\xc8\x81\xa5i\x17\xe9\xc7\xff\xc2" "|\x99\xc6j&\x62T\xf9\xd0\x96\xdf~\xd7\xdf\x65=\x8c\xd8\x11&\xfeU\x44\xd1\x0eNO\x8b\x06\xc4\x1d\xd7\xf4M\x93\x81\x11\xd6xL" "K\x43\xed\xa8\x86$\xc9\"\xf2\x12\"\x8c\x8e\xd7\xdcn\xb8\xf6\xab\xe4:\xe6\x9aqM\x94~y\x1c\xda\xfb\xe6\xfb\x35=w\xd6\x9c\xb3\xae" "\x39\x10W\xfe\x45\x03^\xd3\x16\xaf\xf4\xf6,\x82\xd9\xd1\x03L\xaf\xa3-\x8f\x63#\xec\x9a!\x0c\xd6\xf1\xd1\xad\xd3k\xb8\x17\x03\x9d\xdf\xd6" "\x8c\x82\xbe\x8e\x61x]\xd3\xa6\xad\xf4x\x96#Q\xae\xdc\xf0\xba\xe6\x30[\x19L\xb7\x9c\xf0\xaf\xfd\xad\xe7\xe0{\x8d\x1c" "\x9f\xca\xad\xf3\xa0\xfc\x45K\xaa_\x1c\xf2\xae\xa5\xf0\x8d\xcc@\xb3\xe6\xc2\xe5\x9a\xdbS\xd6\x32\xa8`\x00\xf3u\xd2\xb7j\xbf\xe5\xb2\xe3\x36" "\xc4\xea\xba\xf2\xcf\x01\xcf\xb4\xef<\x37_\xa9\x16\xbe\xfe\xd0wlk^S#\x9a\x62\\\x43X\xddm\xd8\x1a\x85\x8dYz\xce\xee\xc3\xc1" "\x39\xa3S{k\xb6\xf4Z\xda\xc6{-\x9e\xfa\x91\x46\x8b\x39\xcb\xca\xbc;\xd5r/\x07\x9a\x94\x66\xaa\x99\xb3\xa8\xa7\xb5\x33j\xf0\n\xb9" "\x02\x0b\xc1\xe2\x07\x34`\x41\xfb\xe8\xf0\x80\xba\xc5/u(g\x06!;\x1c\x1c\xef\x83\xf2\x36\x9c\xb4\x82#)\xbe\x07L[\xf0\x97\xfeI" "l}\\\xaa\xd9\xb4\xcc\xb5\x64\xfd\xe3\x9a\x46\xb4\x39\x1e\xa7\x9a[\xea\xa1\xb5s\x07\"\xaa\x86i\xd1\xf1+\x36\xf8\x41\xb3\x9a\x04\x31\x9f~" "\x39\xaa\xe6\xe0\xb4\x0f\xcd\xa6\x98&\xc2v\x01\xf1\xf3\x12n\x1c\xa2\xd9\xee\x13\xe1\xa6\x44>;\xd1q\x9a\x88\x06\xa4\xceL\x63\xf5#\xac\xb1" "\t\xad\xb7\x10Zj\?\x61\xff\xc7\xa9\xb1\xb0\xcc\xc3@\xb4\x17~\xea\x15\xbf\x81x;\xc2\xd9U\xf8Q\x88\x97(\x86\xe0\x1b\x0f\"\xd8>" "h\xec@~\xd6\x7f\x39\xb4 \x10\xca)h-\x97Q\xa6\xd9\xc1\xba\x82\x45J\x39P\xb8 [\xa0\x85;\x32\xc6\xe7K\x04G\x11\xad\x86" "j\x80\xdd\n\xc2\xd9\?gj\x0f\x14\xcd\xf6\x89\x18\xe3\xccN\xfe\x99\x86\x45Y\xa1-\x9e\ns\xf8ttQ\r\xa6s\xac\xbc\x89v\x35" "r\x1e\x1e\xad\x34\x9d\xbf\xab\x42\xf0\xbcN\x35y\x65\xcc\x83<\xd5,\x63\xb2h\xb5&\x36}\xd4\x99\xdc\xa8\xae\x99 \x91iJ\x44\xfeI" "(\x43\x34/\x03\xd1\x10!\xcf\x44\x34\x66\x10\x97(\x94\xf8\xb1\x10\xde\xbd\xc4\xd5&\xb5\xb1\x33\xfd\xda#\r\xf8\"\x36\x9a\x61=\x9b\xfeP" "\x63\x9d~\xa6\xf5\x9d~\x46\xe6\x37\x9b\x17\xec\x9b\x15m=v\xca\x8d\x44\xb6\x37\xdd\xb4\xe0|\xed\x05\xa0q\xd7r%\xf4|\xa9\x66I\x17" "]\xc3\xb0\t\xda\x65\x0fv^h\xb7\xe5T\xdb\xf2\xf7\xf7U\xa7\xd6\xa0s\x14+\x82T\x08\x1f\x9f\xfd\x9a\x91\xeaK\xd8-`\x94*\xe2" "\xcb$\x9c\x1d\xa3\t\x15\xcd\xdc\xf8\x8c\xba\n\xf7s\xed\x9a\xb6\x33W\xcbT+\xde\x05\xd7\x1f\x07Z\\\xcd\xa7Z\xe9\xe6\xf0\x93\xd3y\xf2" "\x9dq-:\xb9<\x38gt\xa6\x81\xba\xb4\xde\xe4\x8e\xd2\x63\?\x8f\xf2\xed\xa8\x96\x9eN\x1b\xb1\xbf\xd3%\xa3\xf3T\xdb\xb4X\xfe'\xbf" "\x32\xe8\xae\x9f\x04\x99\x31\xb4\xef\x85S\xa3\x43\x99\x11\xcb\x34\xd6\x84\x13\xac\x61xx]\x63\xea]\rm\xc9\xd4\x9c\xa6\xc1\x61\x17\xa2\xf5\xa8" "&\xc6'o\xa9\x86\xf7\x45\x89\x99\x93\\\x8b\xd9t\x84\xb6\xf6`\x0c\xaaU\x1d\x80N\xf1Y\x0c\xe1\x8d\x18\xde\x88h\x9b\xa4\x84\xff\xae`" "k\x36\x11\xf3W\x17\xd3\xf3\xdb\xca\x81\xf0q\x04\x9a+\xa0\xd0\xb2\xdc\t_H\xff\xb9\x45\xc6\x99\x1a\xef\x45\xf3_\xb6\xbcp\xc2\xf5=h" "\x0b\x7fJ\x14\x02<\x01\x8c\x30\x1f\xaah\x8f\xff\x04\x9b\xa1\x85\x96\xf0Mh\xb6\x65\xa1y\x37\x1b\xb1r\x01\x11\xed\x8e\x8ai\x32J\xd1\xf2" "WN\xbf\?\x98\x45\x84U\x94\t\xfa\x45#\x8c\xacuMp\x93\x8a\x13\\T\xf8v\x03.\x7f\xc0\x0f\x94Rt\x8aG\x8blQ\x46\xff" "!\x15\xb3U\x8a\xfe\xa9\x17\xac\x35\x88X@\x05\x63\xcbr\x82\xe4\x33\x42\xdb\xfd#\x34\xb7#!k\x82PsT^\xee]\x63\xfb\xad\x62" "\x94\xc7\xc5\x46\x43~\xe7\r\x85\x1e\xbd\xa3\x04\xa3\x0f\xe8\xf1\xd1\xb5\xd3kO|\x82\xe7\x14\x9f\xf1O\x17(\x15v\xafJ\x64\xd3\x32\xd1\xeb" "\x80W\"\x0c\x35\x85S\xd4\x11\xa4\x89Q.\x41\xdb\x39\xa5\xfc\xc2\x36\n\x17\x61&\xd2\xb0\xa1\x03'\xc2\t@\x64\x65\x11\x31,_R\x1c" "\x92\xa8\x37\xc9q\x1d\xcc\xe0\xba\xb1{Q\xd9q\xfas@\x08\x15\x61m\x05\xb2\xda#\\\xa5\xb0\xcdS\xa2\x91U\xa6\xd1~L\x63I\x9f" "\xfe\xae*\xa0-\xf1)\xad\x14N\xb1\x80\xa2\xdc\xd9\xf6\xb6;\xd7\xd2\xd8\"\xa2\x65\x32\xa0\xad\x1c\x1a\x39`R\x31\xf5\x9e\x34-|\xbf\xe5" "@\x45\x35\x1d\xc6\xda\xa6\x06\x8f\xa8j\xd4\xa4k\xe6\x15\x06M\x1a\x96\x42\xcf\xb5 \x97\x45\x38\xb8\x03-\x8d\xba\x61\xc7\xc2\xbb{\xec\x44\x83" "\xe6\x06\t\xd3\xa2\xf5\xd7\xdf\xdf\xf6\xa0\xcd\xc2\x8dI%\xcfN\xe0\x34\xbdQ\x0b\xe7j\xd4\xc1Xw\xec\x9a\x97\x1b\xa6\xb7\x46\xed\xb5^\xef" "\x0e\x34\xb8~\x8b\x66>\x0e\x42\xb3\x9f\xd4O\xb1\xa6%\xb4i\xa9\x06\x8a\x9d\x81u|\x9b\x9d\xf8)\xbc\xcc\x84\x93\xb7([\xc4\xe4\xb6~" "\x8a\x80u\x42\x8bQX\?\xc5:\x80\xd0\xa6\x0e\x46\x8b\xc2\x9d\x85\x66[G\x85\xae\xb7\xdbN}\x36\x9bK\xd7\x38\xd0\x33q\xfb\x93\x9c\xa3" "\x1a`\xbe!\x9c\x39\xf1\xec\x30\xb3\x10.\x46\x1a\xff\xd6\?\xb5\xe4\x8f-\xad\x95;\xf5\xb3$\xffz\xe4@\x83TnK\xd4\x16\xfal\x1f" "P(\x30Y\nm\xf7Y=\xcb\x1a\x9e\r,\x97\x43\x9d!\x87\x85\x1b\xab\xc9\xd9\xd0\x1c\xff\xeaY\x38(\x18\xd5\x9f\x00\x03\x8el\x34\xb0" "\x96(\xd5\x85\xb1\x19.\xeb\xcc\xb1V\xbf\x08\x16\x8b\xc0\x9c\x9c\xea\x17l&\x95\x30\x9a\x88\x88\x36R\x89\x95\xfd:\x37\xcc\xd4/\"\xdb\x63" "[\xbf\nl\xbb\xa8\x10'\xbcJ\x1e\xadJ\x14\xa4\xfa\xaa\xad\xeev\t\x07Q;\x10\xdd\xd4`\x07W\xed\x0e\xd9\x0fT\xdc\x46\xe6\x42)" "\xe2\xba\x1c\x0ck\x14\x9f\x92\xef\"\xc5!\xf8\xd3\x65\xa5\x31\xb1}\x1a\x9c~@\xdb<\x85\x0fW\x14g\x88\xc9$\xe2\x9e'\xddO\xe3\xa5" "\x15\x44!\x38;\x07\x33\xa7\xe1\xc3%\xc5\x1c\xbb\xa3\x82&\xe7\xc3\xb0G\xc4\xae" "\x42\x30=&y\xda\xe9=\x87\x92\"\xd6\xe5\x12(~\"\xf9\xa8\x88\x32\xf1\xb0X~\"\xce\x8b\x88\x0c\xa2\x62%\xfd\xdd\xb7'\xd8\xf6\x45" "\\]%\xb5\xeb\xf8\x92\x65\xf0\xcd\x62\x91\x91\xce\xcc\xc5\x35\xbc\xa1\x44\xdc\xc8\x8c\xe8\x1a\xe2\xb6\x1fL\xf1\xe8\xb1\xe2\x61\x64],\x04{\x1b" "\xa1\x15\xc2#\xa6\x16\x15\xd1\xd2\x17\x08O\xea`\xae\x84lw\x10-\x00H\xdd\"S<\xa2\xf0\xbaX\xb2Ro\x93\xdb" "\x12\x45\xa9\x31\xbc\xbe\x87\x9d\x97l\xf8X\x01ku\x36\xc3\x05\xbe\xa8\x05)\x91\xa8\x32\x86\x88\xb7R\xb8\x81\xe7\xbf\x88\xf3\xa2\x13{\x90\xa1" "-\xea\xe9\xa5\xbc\r\x9c\x1c\xd3\x15\xb0.'|\xdf\x86=\x94|\xb8\x1cq\x04\xa7\xe9\xf5\xb0H\xa6\xe2%\xc9\xab\xfb\x46\x05\r\x31\x92(" "\x44\x18\x87\x14\xa2\x0c~\x36*\xe0\x19\x44\xe5\x06\x87\x45\x05\xf5}\xdd]P\xdc\x92;\x8e\xca\x0b\x91\xc6K\xc0\xbd\x45=<\xd5h\xdd\x8f" "\xca<\xcd\x9a\x9f\xfaY:\x65\x00\x9c<\x1eQ\xdb\x07U\xd4\xd6h\x83\xa2\x82\xd1I\xc8\xca\x83\x9d\x64\xc2\x93s'vP\x8ax>\xf2" ":\t\x31\xfe\xf8\xe2\\\xab\x10\xe7j\xecJ\nq~\x11\x9c\xa1\xda\xc9[\x1a\x1e\xbfP\x44S\x12/p\xed\xf1rM\xe2\x0e\xa5\xc6\xfa" "K\x1f\xef\x1b\x61\x1d\x8d\x08\x92\xdf*\xf1mMl{\xc5\x43\x18\xab\x17\xd4o\x90\xaf]\xf2\xc8O=\x65\xb1\xd2%\x62u\x14\x1c\xf3\xaf" "\xe8>\x0b\xc9j\xcf\xd9K\x81\xedh\x91/\xb6\x12\x8b\x18&\x86\xad\x95\x8b\xf1\"\x1bg\xec\xd6\x8bl\x1f\x8a\xd8\xa5P/\xf2\xedS\xb2" "\xb2\x14Y\xe7\x8a~\x02Z\x83\x8aX\xfa\xab\x17\xe3\xb3\x19\xb9\x92\xb6:\xceL\xa1\x61\xf8Y\xc4\x16K\x63\xf0\xf6z \xfa\xe9\x35\x37\x62" "\x1d\xbf\x90T\x87\x61g(\x9d\x03\x34\xb3@\xd6u\x35I\xfdU\x30\xba.\xc1\x31\xde\xa8\x43\"\xb3\x05\x42\x33\xab\x31\xc4\xbf\xa3\xd1\xa0|" "\xa0q\xccY\x8a\xee\x34\x07\tL\x83\xa2Y^\xedz\xc9\x9c{\x37\x30\x01\x8a\x86qjI\xc6\x07\x9a\x44\xe6\x0e\x17\xa3k\x82\xcd\x1e\xb2" "=\xd7\xcb\xbf\xabK\xf5\xb7{\xe8\xb1\x8c\xf4\x80<.\x88\xe8.\xcaX\x9f\x11^\\\xeb\xff\xb6\x32.\xbcl\x80W\? lV\x65\xce" "\xef\xca\x9c\xd9\x97\xe1\xea%l\xef@\x0c\xd5\xca|i\x94\xbfr'x\x8a\xaa%\xe7\x05\x84\x02\x13\r\x16\xa7\x32\xb2S\t\x07\x65\xb2\x82" "%\x32\x11\xfd\x8b(\xa3r\x30\x1b\x82\x32\\\x98]\x61)S\x34_\xa1\x12q}\x06\xda\xdaP\xbd\x1cV\x66\xf0\xfa\x13\xd1\xbe\xeeg`" "\xaf\xaf\xfe\"\xe1\xfb%,\xa6\xa2\x61\x66X\x8e\xc6=\xf0\x35/\x97\x9f\x8c\xf0\x1d\x38\x83\xd4\xcbq\x0e\x37\x8f\x88\x1e\xc2\xd9\x31\x16\x39\xea" "\x65\xec\xc3W\xa2\x1c\x39\xfd(\xf3\x07nx\x43\x37Q\xe9\x94\xf3\xc8\xbb\xe0\xfc\x07\x34O&\xa1m\x06\xc7v\xfb:\x83\xb3\xd6k\xbf\?" "o\xce\xf8\xf4\x13\xe2\xe6R\x17\x44m\xc1\xbc^\x0b\xb2_ps\x10\x11\x0fK\x19\x94\x1a\x9cV\xd7\x98\x44\x0e\x13)\xd5\x34\xba\xb0%L" "\xa3V\xff\x1f\xed\xef\x93q\xf7\x1b;\x1b\x44\xb3\r\xee\x46\xe9l\x65\x9a\xc6'\xad\x07,X\x08\xb5!/\xc5\xc2\x46\t\xe7\xf2L\xbd\x0f" "\xfb\xd3\xe0\x31\xa4\x07\x9e\xb0\x62/\xe2\xea\x34\xdaJ\xdd\x1f\x07\xf3\r\xe2.\xca\xb1\xf5\x17\xb8\x9b\x86\x99\x02<\xb7\xeb\x35\xc4\xce\x11\xfe\x9b" ";\x39n\xaei\"\xd3\xc9#\xc5\t\xabx-\xac\xef\x9cR\xac\x88\xc6&\x1a\xde\x8dZh\xde\x12\x42\xf3y\x11Jw\x9aY\x1f\x88l" "\xacj\xe1\xaa\xe4\xb4\x85\xc4\xe9\x81\x16\x63t\x65\xda\xe3\xb3\xff-\xc2\x1c\xb8\x16\x95\x46\x88\xfd&\xe2M_\x87\xfc\xcdSh\xe8\?\x95:" "\xf9\x35\x87\x07\xd1\x06\xf9`\xf8\x80\xc0\x38\xa2\xc1t\xa8\x94\xb7\x14\xde\xf7\xf5Z|}\x94|\?\x43,\x14\xf4u\xc3{]\x8bow\x1c" "=\xd4\xe2\x07\xdc\?\xa7\x1b\xb5\xe4\xa4ON\xd5J\tsl\x8d\x63~\x65\x1a\x96\xd8\x34\r\x16v\x31N\xb5\x45\x31\xde\x7f\xbb\x16>\xf6" "\x0f\x34\xe9\xa8\xfc*U\x9bw\x90\xd5L\x34\xcc\x8c\x95lWk\xd8\xa3+|;N\x7f\xd9\xc4t\x35M\x0e|\x9f:\x83\xdb\r\xad\xfa" "\xa6\xe1MT\x11\xbe;&\xb2-\xa7x\xf0\x87\x64\x65}j\x43\xd7\x03tO\xc8\xc0\x35\x11\x39\x13h\xd0\x1e\xa9<\xf8\x8c&\xdb\x38\xf8" "\x8cL\xb3\x65&i\xf1q\xeb\x0c\xf0 \x9cj\xa6\x39lq\x13m\?`-l\x84\x98\xf7\x37\xc2\xce\x8d\x96\x33\xba.\x35\x0ck\x8e\xf3" "\x87\x63h\x16`\x45\xb8-\x82\xb6\x9co\x94\xd2\xc4\x16\xc5z\x93\xf3\xf1&\\\?\x8c\xc1\xfc\x38X\xa5G\xb1\x9bO\x44\x92\x43\x87&m" "\xecJ\r\x66{\xf3\xefP\xc3\xd4\x89Z\x84&\xd7\xb4]\x86\x46u\xd7\xfe>\x19\xde\x1f\xc7\x83\x93\?\xad\x85m@\xaeq\xceM\x8ds" "n\xd3\xeaMxs\x89V\xbf\xd3\x04\x0bh\x80\x9bQ\xfe\x15,\xcc\xa2\x65\x07\x62\xb3\x63\xd9\x19\x1f\xa0\xc1r\xd3\xf4\x0b\x14\xd2\x64\xd2\x8c" "OW\xe0\x19u\x8b\x37\"\xc4t\xb4\x89]^\xc6\xa8z\x0f\x1f\x35\xd1`\xb2Pj)\x9b\?\x9di\x07\xa5 \x9a\x85\x06\x9f\x1eh\xfe" "\x30\xd4\xda|\x32\xa1\xb5\xb9\x65\x1b\xc0\x8fX\xf5Z\xb4\x02\xb7\xd8\x0e\xb6\xb8\xba\xd2\x62]i\xb1\x9fh!\xc4\x85\xf1\xcf\xe8\xaf\x9a\x66\x9a" "ZZ\x89\xb4\xa2\xb1\xbdX-\x38w\xd6[\xc9\x8d\xbd\rm$\x94\xf7t\x35\x46\x1a\x7fT\x0cr\xebp\x7f\x94j\xc5k\x38\xe6\xa6\x9a" "\x39\xf6R\xeb\xa5\"\xbaK\x15\xc3\xfe\t\x96g\x45\xdb\xe1\xac\xd8\xb6\xad|\x07s\xd9hs\x1b>\xce\x0f\xb5\x46\t\x9a\xc5J\x31\xa6\xfb" "\xb7M\x93\xde\x06\xbb\x95\xea\x0c\xdb.\x44\x65m\x07\x30\xae+\x11\xb9\x15\x9am\xca\x34\"\x37\x9b\x89\xd1\xf9)\x87X\xa6\xd9\nv\xbd\x1d" "^g\x41\x0b\xe7_\xa7\xa3\xb2\x10&\xd8\xb6\xe6\x9a\x1a\x9d\x62\xe9Q\xb5-h^\xb2\x46\xbd\\^\xb9j\xcf\x83\xf8k\x96\x1c=IO" "\xc4vJ\x0f\x87\xed,\x42|\xa8\xb6w\x62\x65Z\xff\x8a\xbb\xa3!\xb7\xad\x36\x10\xd4S\xee\xd7\x35\xea\xa6'\x18\xe0\xda\xd1-n\x1b\x41" "\xd7\x85\xe6\xf1)\x44\xb3\xd1\xf6\x9b\x83\xbf\x93g\x1a\x32\x46\xbb'\x88\?\xf6\x42\xb7\xb9\xfc\xa3Q\x64\xc1\xa5\xb5\xfc\xed\xe4\x1f\xca\x90\x46\xcb" "v\xf2n\?\xdd\x93\x06\xde\x89\xed\x39&\x62\x07)\x44\xdb\xa8\xab\xe2\x9d\x13\x9e\x00*\x8e\xc8%\x88\xc6ZI\xe3L\x0f\xe1\x0e\x8cj|" "\x81Q\xa9\xc7\x81X\xefw\xcdH\x0b*N\xc8\xb5\x93\xa6&\x15u+\xe8\xf9\x16\x1a\xea:=k\x85{\x9c\x00\x01\x0c\xea\x8c~/\x34" "\xb7\x34\xfd\xde\x33\x89\xef\x63S\x95\xd0\x92\xfe*\xf7\xce\xe0\xfc\x33\xba\xaa\xba\x16.\xbe\xe5\x1f\xb4\xeb\x82\x33\x9e\xee\x91G\xc5\x93<\x19\xed" "\xde\xf8\x99\xc2\x8f\x33\xb8\x92>\xce\?\xa3\x99\x93\x62\x16\x98h\xda\x41Z.\x17\xd1`\xea\xec\xc1\xc5HX\x1a\x80\xe5#\xd0\?Wm\x38" "\x0f\x7f\xc7\x35\xaei\xeb\x01\xb8L\x88\xe8\x87l_\x82\xf2\x1a~\x33&j\xf8x\xdb\xc7\x03m\xcdr@;\xd5\xa3\xfd\xa5\xc7\x8e[\xb8" "\x03\xe7\xbc\x9a/\x96\xdf\x37\?\x8f\x86\xa3\x17l\xff\x81\xbb#g\xb8\x62\x8ct\xd5\xee\x9d^\xc7T\x9c~{\xd5\x80W\xbf\x10\xddU/" "\xbc\xe4\xf1\xfc\xde\xef\x98\x66\xe7\x1e\x17\x83{|\xb5\x99%\xcc\x98\xc6i\x10M:\xe4\xed\x82\xa2\x1f\xea\x61\xaa\xe6\x9a\xa6\xe1\xc6\xb0\xdc\xb4" "\xd7n\xaa\xc9\xe8\xf1\x87\x17T\xef\x39\xe5\x96\xfc\xee\x90\x8d\xcbx\xf8\x9b\xaf\xa8s\\r\xee!\n\xabp\x85\xe2\x86\xc7\xbc\x11\xe1\xd5\x44" "\xdc\xa2R\xd1\x8f@\xe9\xf5\?\xbah\x82p\x11P\xea \x82w\x1f]\xe1=\xe0Zl\xcfk\x15\x43\x8d\xc9\x00+\xd9\x30\xbc\x9a\xd1\xbe:\x0c\xef" "\xae\xc0Z\x8e\xd6\xd1!\xcdx\xc3\xb0QG \x1c\x11\xd1\x03)\x39\x8aV\x91\x0b\xef\x43N\x98\x86\x61\x1b\x17\x18v\x32NNw\x87~" "\x95\xe1\xf2\x38\x9a\x8d ~\xf4\xc1\xaf\x05\xc2\xc3\x89\xb8;\x83\xe7l}\xa8\xbe\xe6\x30\xc8\r\xa3\xc7]\xb4\x9f\x1f\x88\xba\xe2\x8c\xf9\xffP" "S\x10\x61\x35x('\xf1;\xa0\xf9M\xa6\x1fK\x9a\x62\x87j\xb5\x99/\xb9.\x34\x8c\x1f\x0b\x08\x44-\xe2\xf2\xc3\x0b\x36\x39\?\x0f\xfa" "\xb8\xce\xa4R\x02\x61\xd3Rr\x9e\xf2\xc2\x96\xf1U&\xd7I{\xaf\x9b\x12\xbes\\\x42}\r\xbe\x1a\xe1\xf7\xce\xc5\xb8T\x0f\xae\x65z" "v\x1d\x64\x96\\L}\x8d\xf0\xba\xbd\xc6'V\x87_\x93\x8a\xdd\xc8\x8c\xf7\xad\xd4\x95*\x8c\x13Ts\x11\x01\xe5\x84\x18+\xcd\xb0\x11K" "\xb8\xb9\x89\xab\xe7l\xdb\x66\xe1\xc5\x03\x38_\x46o\xff\xa2\xb7\xa6kq.\x8bH\x02\xd0\xb6}\xd7\xb8\x42\x33\x8b\x8a\x37`\xb5H>\x44" "\xf9\rv\xc4\xb8\x16\xdf_@{\xb5\xfa:\x8b\xcbU\xb0z\x9eL\x36\x1c\x00\xcf\xe2\x81\xf4\xd5\xcf\xd8X,\xda\x07>\xa3i=r\xb9" "\xa8\x99j\x1a\x99\xf2h\x98j\xc3\xa3p\xd2q-\x39\xbf\x0c\x32\x1ft\x9e\x99\xab]\x63q\xc1Vs\xfe\xbb\xad\x06\xe6\x7f\xa7\xa2=\xdc" "\x39\xcd\x02\xca\xff\xef\xf4\xe7w\xd3\x0fo\xfb~\x80\x35O\xc5\xe4\xe8\x12\"\xa6\xb2Ju\xa7\x42\x01\x9b\xf6\xd3\xc5\xde\x8e\xba:m\x62\xdb" "\xa0\x88\x18\xba+\xe5\xec\x9a\xf1\xc7\xf6i\xc8\x81^\x81o\x32\x45\xf9s|\x32K\x37\xe7\xc9\xe1\xcd}\xfa\xa3\"\x9e_\xfd~W\x82\xa2" "=\x94\x39\x9c\x85\x8d\\M\x98G\xe5\x86S\xf7&M\xf3H\xab$\x07\x16\xf8\x19\xae\xe0(\xd5\x8e\x37\x19H\xa7\xc7I\xbd\x1e\x0b\x30\x31" "\xa0\xa8Ws\xb1\x0b\xe6\x95\xf8\xd2\xea\xd6\\~\x9fo\xaf\x89\x38\xe7\x9b\xfcS\xbe\x07\xd9\x1eh\xf9\xd2\x8d\xc9\xcf\x19m\t\xef\x96\xf0q" "\x1d\x9d\x36\x0f\x34\xb6\x8e\xa6\xed\xdb\xd8\x98g\x1a\x12\x14\xba\xa6M)\xaa'\xb5\x83\xef%\xcdw\x8e\xdc\xa8\x61o\x1e\xb4\x83_\xaf\xbf\x83" "\x16\x46\xab\xfe\x8e\r\x65\xc2\x9a\xbdw\xef\xf1\x95=\xa2w\x44\x8c\xado\xc2\xe6S\x90\x61\xf4\xfe\xfa\x06\xae\x93u\xddV\xaf\x36/\xf4\xc6" ";N\x91\x94i&\x15\xd3\xd4\x39\xd6\x1c\xb8]\xd3\xcc\x07\xee\xa2+\xc7\xbe+i\xb4M\xd1\x30Z\xde\xb1\x45\xde\xc1\xe9U\xf9\x06z\xd8" "I\x15\xef\x9dlKv\xd8\x9a+\xc4\xb8hwpyj\x65{(S\xfc\x04kM'}\xddv\x81L/\xbe\xef \x36\xa6`\xbb\xc2" "!\xc3.\xe8\xb8\xcf\xdd.\xa5\x45\x94\x36\xa6\x17\x61\xdb\x43\x95\xaf\xce\xf4O_\xcb\xe0\xe6\xfc@L\?\x8b\x99\xda\x0e\xd1\x1c\x94U'\x12" "@\x88\x88\x15\xf1\x1d\xdd\xdav\xe1y\x0e\xc4\x90nG\xa7\xbe]x\xdbu\xca\xab\xc8\xd1\xdb\x8e]\xf3\x8e\x9d\xd1\x8e\xa6\xba\x1dn\xd4\xef" "\x15_K\xcf\x00\x83\xca\x8e\x0e\x81J\x9a\xe8T\xa4\xedn\x17\x36\x8bN\xb5\xdd`=\x43\xb5\xa0T\x80o\xaah\xe8\xd1v\xec\xd1\x94\xb4" "L\xee\xc2Y\x95\x93\xab\x9d\?*.\xe4\xed\xe0\xdd,|G\x61\x84\x9f\xa4\xed\x15\x14\xfe\xf0\xce\xb7\xd6H\xef\xa2\xfc\x34\xc2\x1a\xe4\x0e\xe1" "\x10\x85\xb6\xfdQ\xc8:\xc3\xf7u\x17\xbd\xb6\xf4\x62/q\xb1\x11\x8b\x98\x96\x10\xa5\?\x90\xe8\x87_\xd8\xe0\xc6\x91\xec^xv\x42\x66I" "\xd4\x03\?\xa5\xa6*\xe3\xe5\xd3t\xa1\xf4;\xd3\xd4\x65p\x86\xdb\xc5WxQ\xb8\x96\xb8\x43\x88\x42\xa3\x06$>\xc2K\x12\xdf\xe2\x61{" "\x15\x96\x0e\x17\xfch\x04\xdfo\xd8\xaaw\xa0\xb1\x9b\xdd\xd1\xf7o\x17\xef\xb6\xc1\xf7\xbb\xbf\x1d\xc9\?\x9c\x0cq\xa6\x85\xb5\x37'=\x32w" "\x89m\x9b\x12\xf6Q}\x92\x17\x94#\xe7\x95\x42\x14\x8f\x34(\xc9q)\xd9\x9d\x41\xc3\xe2\xf3^W\x41\xfe] \n\xa1jy\x10\xd3\xd3" "=\xad\x1c\xfb\xc0\x36j\t\x61\x17P\x86\x8d\x33l!\x30M\x93\x81\x62N\xbc\x87\x03\xb4\xb0{\x0c\xe2\xf5\xdb\x63s\x95\xf0\xed\x05\xb4\xbd" "\x12\x42\x0c\xfb\x94t\xa9\xd8\xd3\x32\xb4\xc7\x06\x1b\xe1M\xdf\xc9\xf7{\x1f\xde\r@\xb4\x06{\xc4GU\xb6\x9d\x34\x46\xeci\x9fP\x06\x99" "W\xdd\xf6\x8a\xa5\xfb}\xd8\x38&\?\xc1\x16\xee\x0e\x31K\x95\xb8R\r\xd5\xee\x87P\xd8{\x04\r\x14\xa2\xe2\xec\xc3\x1f\xdc\x1c{\t\xe1" "\x33h\xdb~\x95(\x14\x0e\x39\xf6\xac\xf4\xfb\x88w\x86`\xa2\x42\x8b#/\xc4\xc2\xdd^\xa6$H\xcf'\"\xde\x8b}\xd4\xba\x03\xd7<" "n[\xaa\x84\xbb\xad\x9f\x35>\x45!\xf8W\xe3\x9bz\x08{\xcf\x9eV\x91=G,\xfb\xe4\x06\xe5\x97TP\x03\xd4\xaa\rG\x30\x8a\xc1" "\xb1\x06\xed\xe6\xb2\xdf\x1e\x1b\x91\x84p\xe7\xda'\x18\xbb\xed\x11J\xbdq\x0c\x63\x8a\x31<\xa3[\xafiQu\x15\r\xe6\xd4j\xe4\xda\x19" "\xac\x1bX\xe1\x33M\xd7Z\xcdqG\x34\x8b\x88o\xd4\x80\x17\x36\xe3\x33\r\x66l\x11\xad\x13RN\x41s\xe9V\xbe\x1b\xe1&&<-" "\x82\xe6\xab\xa1\xfct\x1e\xfc\x1c\x1c\x63\x94_\xe0\xf9\x1a\x8b\xa3\"\xda\x92T\x83\x99\x45\x85\xb6i\x46y\x0f^\x93\xb6\xcdPX\xa4n\xfd" "\x9b\xf2\xdd\x99\xe6)\x37\r\x9b.\x44\xbc\xe1\x35T\xe7\x98\x98\x8bh\x1b\xe7\x95\x43r\xeeT\x1f\xee\x45\xdb\xb5(\xcf\xd3\xd5y\x97\xf5\x12" "|\xb4\\\xc4\xbe\x66\xd1\x9a(\x36\xf8\x14*\x07\xce\xb4\xa4\x9e\x07\x08G \xa2Yy\x85\xd6\xb4\x08\xcd\x12\"\x9c\x17\x9d\xe9G\xe7\x65'" "\x0c\x8e.\x62\x92m\xda\xdfgyZK\x19\xa1\xc4\xb3\x43\x43.\x34\xaf\x94\x06sT\t\x37\x0b\x92\xa7\xb2\x36L\x39u\xa6W\xb4\xe7\x95" "\xb2\xe6\t\x11}\xa5\x41\xc7\x38\x63R\xc1\x17\xc3\xe3Ogp\x89\xc7\x84\xd8\n\x46\xf8 \x89x\xb9\xf5\xa2\x0e\xcd\x43\x45\xf8\x80\xea\x8eH" "n\x46\xaf\x17*\x16g\xf0yS\x8d\xfb\xcb\x44\xb4!\xbd\x31]\xd6Q\r\xf7\x8a\x15{\xe1\x04\xd5M\xb7\x95\xb6y\x95_\x0bg\xd4\xaa" "\xc0\x00-\x9a\x99\x1c\x85\x9b\x13\xaf\xfbHn*<\xc5\xcd#\x8b\xb1\xf0\x01\xe5\x18U\xab\xce\xf0\xfe\x13Q\x18T\x9b:\x65\xc6\x88\xf0\xf1" "\xaa\xad\xe0\x82*\xa2\xb9\x19\t\xdb\x13\xb0\xd7@r\x11\x11-\xa6\x8e\xf1\xe0\x9e\x44;\xa8\xe2\xd1\xf4(\xb8\xbe\x85\xb8\x9cyu\x88~\xb2" "\xfe\xcc\x10\xe0\xbbq\x1c\x9f\xf4\xe2S\xbcT\x32{\x05\xef\xf0\xa4\xe3\x16*\x1e&\x01\x42\x8b\xff(\x9c\x0e\x83\x02\xda\x04\xcd_\x99\xcb\xc2" "\xf4.\xda\xf2\x03>~\"~\x66\xc0-\xcf\xb9\xc5\xab\x10\xefp\x0f\xc8\xf6\xa8\x44\xb3\xe4\xdf;h\x16\xbc\xe2&\xf7K\x1d!OQ\xcc" "p\x08\x14\xf2m\xc5\xbe~\xe1X\xc7\x38\x8d\x33\xec\xa7\x15\x9a\xff\xba\xd0\xec\xb6\x8d\x33\xec\xa7\x13\xa2\x05\x39\x83\xd5Sh\x96}\x61\x8d\xba" "u\xb6\x42\xdb\xd3(\xfc\xb1\xa2;\x0b\x8f\xea\xe4\x30\xde\x37\xfcl\xac\xb8J\?\x11\x16\xbe\x8c\x30\x12\x89\xd8\xc0\x35\x44\xaf\x65'&\x81\x8d" "\xb3\xd8\xd2\x36\x18\x61\x62\x30\x11\x43Z\x17\xc3\xb3\"r\x95z\xe7o\xf4\x1b\xd5\x88\xc7\xb5y\x62\x13\x13h<\x8f\x88\xe9\xa6\x38\xd1,\xf1" "n\xe3<\xac\xa7\x8c\xb3\x45\x17\xb5\xd7\xf9\xb2\?\xc8+\xf5\x0e\xca\xd4 _\xc1\x8a\xbch\xf3\xb5z\"Y\x98\x31\xd1\xbe\x16\xf2\xaa\xb0V" "]\xb0\x65\xb8\x08\xf3\x99\xf8\xf1\t\x8e\x19\xa2U\x1e\xc0W|\x87\xf7\x64\xb9\xe7w\xe7\x91\x45\x61k\\`\x62\xd5\xb0\xcc\xe3\xfbS\x8c+" "\x1a\x9a\xb4\x39\x8d\x44\xd8\xb8\x80S\x8a\x31\xa8\x9c\xfb\x15\xa9\xf6\xd5\xc3\\\x19\xda\x9e^\xc3\xae\xf9\xd9\xa0\x61)\xd0\x34\x35\xb6\xa2\x91\x87\xf6" "\t\x0bm\x43\x13\x83\xea\x0ej\xdeW\x62.%\xc2\x17\x63\x9e\xef\x96L\xc5\xa6N\xac\x37\x88h\xb3\x1c#\x0fq[J\xa3\x84\xc9\xbf\xb0" "x\x07\xd6^\x7f\xb7\xd9(\xf7\x01m\xa7\x61&`J\x86\xb6\x9c\xf3\xfd.\x85\xb3qpq\x17\x14\x1e\xa0\xa1\xfcJ\xd1]\xd9\x19\\\xb5" "\xe3\xf9\x04\x9am\x9a\x12nn\xf5\x85\xac\xe3\x1a\x92\xd1J\x1aM^\xf7-k\x8c\xf0U\xed\x86S\xab\xd0\xb7\xd2\xeb\xc6\xed]`{\x97" "\x44\xb3\xa9\x9f\x10\xaf\xc1-\xac@\x42\x33\x42\x19\xb1\xe1\x08\x62\xef\xde\x45\x8c\xfbL\xc4\xa6\x61\x11\xfd\xafo/\xe1\x66\x81m\x04\xa2}\xed" "@\x1b\xc4\x18\x31\xbc\x14\xd1\x66p\x8d\xdb\x30\x97\x93\x0e\x34\xaa\xbc\xa5\xda\xac~\xa8\xcd\xeb\xc8\xcd\x0cm\x97\x81M:\xd5\xcc\xd9\xd0\xb4p" "\xc1\xd5\x33h\xef]\xac\xe0\x9b\x96\xf4\xa6\xe9Y\xd0\xd3\xdf\xca\x90\x13\xfc\x90\x06~\x81\xa1_\xe3V\x97\xd1\ng\xe1k\x1f\x63h\x39\xd0" "|\?\xb8\x1f\xec\xc5\x14\x96\xcf@\xb3Y\t-\xdd]\xe3\x16\xbe;\x8d{\x8c\xf2\x8d\xbaq\xc8\xa6r\xae\xb1\xe5u\xcd\x02 \x42\x1b\?" "\xc0\xe4\xab\xda\x93\x33(\x64R\xd1\xa2\x31\x99\x08\x0f$\x17\xe1\xd2\xa0\xda+\x39\xc7\xf0Y=\x98\xfb\xf0\x98\x15\xd1\xdc\x18\x8c\xba\t\x19-" "\x87i\x18\x17\xdd\xab#\xafL\x8c\xdc\x00\xaa\x07\xb6`\x36\xe3\x64\x8d\x17\xb1\x46\xb6\xc8\x37\x30\xf7\x18\xecJ\x10/\x66\x87'\xb7Y\xbf\xf0" "\x9a'\xb0)\xaf\x10\xa3\x37\x65z\xee\xe2,\xa9]`\xeb\x99h\x65\xdc\x1c\xbc\x1b\x8d\xe9\x07\xd1\x8e\xdf\xc3\xb9I\x88v\xfc\x1e\x91\x82\x85" "-~\xae[\x06{\x39\xf0\x95W\xe8\xf7\x39\xfd\x8c\xf6\x0f\x10-\xb2\x95p\xc5\?mQx\xc1\xeeK\x03\x15\xb8\x39M\x0eH\x0b\x64\xc6" ",\x15\xb3\x08\xab\xdf\xb8\x0f\x8f;p\xe8\x15\xf1\x1e\xd7\xcb\nwo\x1e\xe6YvI\xf7\x18\xee+{\x91\xd9\xd8\x44\x94\x7fG\?\xf2\x0f" "\x9a\x99\x16\x85#T\x89\xf0\x03\xbf\x8by\x7f\xe3\x1e\x8b\x38\xea\x0c\xbb\x02\xab\xe4\x18\x65\x10\xad\xed\xd5\xbb\x8fO\x66\xce\xe4\x14\xc5\xc1\x01\xf7" "}|Yw\xa6[\x9c\x44\xcb\xe3\xca\x10(Hx=v\xea\xc0\xd5\xdc\x86\xa9}\x1fj\xe8\x18TL\x8f\x16P}\xe2;\xdc\n\xc7\x16" "\xf7|[\x94\xfe$\x11\x91R\xf8\x90\xf2\xe0\xc7`\x39Q\x32p\xb4\x88\xf5\x7f\xc8\xeb$\xe2O\x35\x32sO\xe3!\x38\xdf\x83\xb5\xac\x88" "\x88\xfd\xd1x\xfa]\xed@K\x33\xdcx\nl\xe7\xb2\xd0\x02\xa7\x37j\xba\xa8\x94\xf9\x64\xefT\xe3\xa4\xa9\x06\xa3\x9b\x91mV-%*" "\x7f\r\x11\x41\x95\?`\xf9\xdd\x19\x9f~\x62\x85I\x34\xbc\x01\xb5\xe0\xf6\x19\x44\x45\xae!\x82\x82\xb0\x7f\xa2\xa9/\xcd\x01\xce\x34\rwk" "\x96*\xd1PS\x95\xe9\x8f\xbc\x96\xa2\xfc*\x15\xab\xe9\x07\xe0\x62\x46q\x91\x8a\x66\xcf\x10\xd1\x8c\x03\x46\xb5j\xfd{uM\x86\x8c\x91-" "\xe0\x8b\xf6\xc6\xa3h\x9bk\xb0\x0e\x08\xf9i\x44g\x16\xf2\xeat\x15\x94\x45\x82\xd4\x96\xc2\x07\x9c\x8a\x63\xdf\x1ak\xbf\xd2\xef\x1b\x81*\x85" "\xb6\xd7\xa5\x41\x97\x38#l\x0c*\xe2\x06\xc3Y\x06\\\x1c;\x61=\x35\x91}~-\\V\x9d|}U\x8c\xef\x8b\x1a\x44\xed|\x14\xbe" "\xfd\xa4\x87W\xd6\xd8\xd4\xa2\xb3y\xf4~\xcb\xd1|\xcd\x9f\xbc\x10\xbeh\x07\x0f\x00\x13~\xa1\x99\r\x84\x96:\x44\xc8\xfb\x13\xa6\x81\xb0\x44" "{\xb9\x07\x17xV\x08\x13$\x64U@\xda\x12\xe1)~\x11\xde\xc2j>\xc4\x95\xc4y\x14\x38\x36\xa2\t+\x13g\x92Y\xc9\xbf_T" "\xff\x1a\xac\x84\xc2\xfa\x39h\xe9\x35\x1a\x35\xaf\x03^\x01\x92\x0c\n\x32\xe9}\x80\xfd\x0c\xacY\x8d\xfa\xef\xcaNQ\xe7(@\x19^|\x46" "w\xc5\x03\r\xeb\xa5\xa2\xd9z\x96\x11\x8bn\"\x62~[\xe7`\xa1\xce\x9aZ\x87\xef\xb4\xd0\x1cj\x1a\xf5\xf0\xfa\x04\xb4\x15u\xe1#~" ".\xac\xe7\xc8\x36h\xa1\x0f\x95\xf5\xf8\xf2\x04\x96\x43\xd1\x9a\x33\xb0\xdd\x02;\x03\xd0l\x87\x8d:\xac=\xc2\xef\x63\xa7\xa6X\xba\xc2\xb7\xfd" ",j\x7f\x1c\x32P\xb5h\x95\x1b\xd0\x02\xfd\ng\xd7r\x08\xd1\xb8\x1au\rL\xbb] \xa3u\xa3\xc1\xea\xdb`\x1dm\xc0J\xd8\xe8" "\x04\x8d.\x38\xcb\x62k^\xa3\xc3\xda\xa8\x94\x99Zxk\xf5\xa7\x13\xad\xad\r\xecp\xa2\xd3\xe1\x1c\xa9\xcb\xe2\xea\xc2\x85X\x88\x99w\x97" "\?\xd4\r\x9f\xe7\xe0\xbb\x15[\x17\xfe\xe5\x8d./`\x18\x0f\xac\x7f\x1a\xfd~_!=\x8a\x88\xb6\x13\xbf\xc1\xf4\x19\x42s\xf5\x35\xc2[" "H\xc4\xdc\x1a\xb4$U\xca\x11\x88Nx\x14\xdc\xd0\x43\xa7\x31\x82#\xaf\x10\x03\xbb\x11/X\xc9w~\x14\xcc\xef\x9c|\xda\xa3`\xf9\x02" "n\xac\x42\x8f\x90\x43\xc2\xe3\xa7(o,u\xe7\x92\xd6\xa5\x11\xd6\x14\x85\x97\x97N\?}h\tZ\x84U\xea\x35\xea(\xe8Qh\xce\x04" "\xca\xac\x33\xfd\xaao\x1a\x13\xb1q\xef\x94\x8b\x42\xe4`\xd3\xa2\xe9\xeb\x9fV'Q\x1cl\x99\x46H\xb0\"\xec\xa0,\xc2\xfe\x32\xbd\x31s" "R\x14\x62\xa4>\x42L\"\x63\xb2-%hg\x46\x88\x45(\xac\xe1\x11\x61\x85Rh\x0b\xb6\xc2\xd7\x7f \xe6+\xa3\x38\x8b\xbf\xc3\xa5P" "h\xce\x83\x8dQ\x02\xab\xc8(\xb1\xdc\x61\r\xc6+n\x8cY=\xc7\x61\x9d\x44\xed\x19'\xfdG\xff\x93\x8a\x38*\xb7{\x06ZX\x0e\x63" "\xf4\xbc\xfe\xddX\x01\xcd\x10@J\xb8\xbdI\x13r\x35\x66\xfc%%\xd2\xfe\x88\x88\x46z\x16X\x1c\x32!\xde\xf8\xd9\x61&/\x8f\xcb\x61" "\x0c\xb2\xd7|\xf7T\x43\xe4\x8eT\xf3X\x1f\xa6\xc9\xc7\xb0@`Zr\xd4\xc1\xf6\x0f\xd5\xb6 \x9e\x94R\xe3\x63\xf9_q\x83\xca\xd4;" "R\xb5Q\x1as\x44\x34L\x42g\x9c\xa2\xce\xe0/\x63\xc4\xc6W\x13\xd9m\xcd\xc2O+\xf0Yt\xdes\xfe~\x17\xd9\xbf\xab\xa6.\?" "\xae\xc1\xf8\x33\x8b\x46\x0f\xe0\xd8Z\x92Y|\xd2\x02\x61\xbf\x9c\x61\xef\xb1\x31\xddM\x65Zt\xca/\x14q\xe1\xb1m\x8b\x30\x46\xf7\xd6\x01" "\xce\xd8h\xcf\x38\xc1\x98%\x8b\x8d.\xd9X\xb0\?\xd3\xc2\xcfUl\x9b\xa7L\x93\xaf\x61u\xd3\xb4\xb8]\x81\xb3\xabh\xb6\x8d\x44i%" "\xf6\xce\x31\xc8;G\x07\xef\x1a\xdf\x05\x97\xf9!\x97\x1f\xef\x1e\xe4\x1f\xb4\xcc\xb7\xb4\x89\xd8\xd9g\x9a\x1ao>\xed\xa2>\x39\xd7\xd4\xce\x13" "\x8e\xc5\"\xae\xaf\x92\xd3\x02\xf2T\xa9V\x00\xf9W\xf8\xc3\tm\x35\x42\x08+\xe8'\xdfY%\xd6^L\xe4\xf3\x34\xd1l\xea\"\xda\xca" "`\x83\x9e\xa4\r\xe9\xaa\x1e\x38\x9f\xfb\xa4\xc1\xf0\x13\x01\x9e\x8c\x08l\xa4\xe2'hK\r\x42\x0b\x32*\xfc\xf8\no\np\x1f\x32-\x39" "/\xfb\xe9\xe0\xe2\xd4\xe0r\xafQ\xca\x92\x03\xd3O\xc4\xfd\x14\xaeq\x43\x08|.\x9c\x17\x64\xfc\xe9\xdf\x61\xe7\xfc\x89T\xcfJ\x1b\xca\xcb" "\x84\xa2\x9fT\x8e\xe1}\xd6\xf8\xa2\x9d\xf2+\xa9\x1c\x91v\x05\xab\xd0\xb6\xb6\x19Y>\xab\xf0\xe5\x81\xd4\x07\xd0<\x0b\xf2k\xd0\xbc\xca\x85" "\xf6\xb9\xe6\x19\x32\xfb\n\xcd\x30*\xb4\xd0\xe0\xcd\x33\x18\x1d\x9ag\xf0\x91\x16\xda\xf6\xae\xe6%^\xf6\x66Q\x06\xcc\xe6\xaa\xff\x00\xcd\xc6\xe8" "\xcd\xa2L\x0f\xe3\xc2\xc2\x45L& \x9e_\xe9\xd4\xf1\xfa\xf4w[\r\x97\r\x1c^\x16\x9c\x41.\x17\xed\xb6\xa9\x66\xdbh\x9a\xc5\xd0\xb6" "\x05\x08\x65J\x65\r\x8b\x8b\xc1\xcd\x1b\xe6\x65r\xc0\xde\xdd&\xf7\x61\x19\x7f\x37O\xd8\xf0mZP]\x62\x31\x0c\xda\x81hK\xea\xe9T" "\xd6\x8e\xc9\xfd <\x83hr)\x36)or\x43\x97\xf0\xed\xdb\xa9\x91\xd1\xbe,\x9f\xc3W#=\x66\xbe]&j\x66/jq\xae\x99" "\xae\x9c\xa6\xda\xe8\x06\x9a\x0c:\xea\xbb\xd0\x92\x1b\x89\xf6\xef\x44S\x45\x99\xbb\x94h\xbb-\xdcL\x9a%\xa4\xb9\x30\xc2\xd7\xd5\x44]\x7f\xb8" "K\?\xa0\xbe\x83\xb6\x1c\x04\xed\xfe\x13\xd3%\xd5\xf8\r\x8b\xcf\xa1\xac:\x61\xd8\x32\x31\x9d\xdc\x99vx\x32\xff\x8c\xd9M\x85\xd6\x10\x36K" "\x88\xef \x34\xbb\xa9\xb0\x44\x1d\xf5\xab\x84y\xb7\xd0|>\x95\x03\xf2\x05\xb4\xbdVM&\xc4i\x96`rS\xe2w`\x90\x13\xda$X" "\xd8,\x81\x16\x9a\xafY\x82\xc1\xb4I\xab\x90pp\xed\x0c\n\xcd\xa0\xdar-<+\xc2\xf4\x66Z\x34\xcc\x63\x41\x43\x34\x1b\x80\x37K\xb0" "\x93\x08m\x9f\xa3\xd0\x82\"\x34\xb9\xd5\xabY\x0e\xad\x05\x12\xda\x1b\x65\xc4\x34\xc5\x44\x8c\xa2\x9b\x37h\xe0\x94O\x64]k\x87\xf9\xd4\x36o" "\x10*\x46xu\x87mw\"Z\xaaP#\x06\x08\"\xfa\x9flS\x85\x31\xfd\x62\x1d\xa7\x87k\xa7\xd0V\xb0\x85\xe6\xc8\xda\xbc\xc1\xee\x1b" "\xa1Y\x9b\x95{\xd0\x06U\xc2\xabs\xa7\xb4\xb4\xc9\xa6\xe0Z\xd0\x38\t\?\xa9\xd9|\x46h\xcd\xa3\xd0l\x80\x42[w\x11\xf2\x32\xa3\xbb" "\x1dh\x1d\x8f\x90\x9f\x8f\xea\x63\xd0\xc6\xa1\xc2\x1f\xfc\x66\xb4Y\x81\xfb\xb9Tu\xac\x98\x36o`\x61\x30\xc2I\xc2\xc5\xe0\x88\x01>\xec\xc0" "\x81\x18]t\xf8\xecT\xc3v\x43\x11/\xf1\x00`\xcak\xde$\xc7\xd7`\xb7\xf0\xfb\xdd\x42\xe6\x91\x66\x45\x9a\x1d'\xdfX\x15\xd3\x84\xc5" "\xcd\n\x96$\x85\x96\x10\x45\xd8\x9dk\xa0\t\xb4\x00\x15\x9d\x7f\xe7\x9e\x82R\t\xda`\x1f\xad\x17\x10GO\xe0\xf8\x05\xdc\xf0\xf8\xfeT\x44" "t\xc5\xcd\no\xa2\x82\xb8.\xc6\xdf\xcd\x06\xc3\x0bh\xbbV\xfa\xd9\xd3\x8c\x9c\x14I\x1d\xa0\xcd\xb2\xf0\x46\x36-\xfa\x99\x1f\xfc->\xbb" "\x80{\xa7h\xe7\xfd`\xd6\xc6\x1c[\x34\xcb\x08,\xb4\x01\xb1\xd0z\x0e\xa1\x0c\x8a\xc6/l\xc4\xa9\x61z%\xda\xac\xea\xc4\x9cI\x44\x1b" "\x03\x34+\xd1O\x16\xb4U\xa2\x66\x45:\xfe`\xb6\xf2\x1f\x13M\x1d#m\t\xdc\x35\x64\x88Q\xed\xd9\xef\xd3\xb6\x8b\xe6\xa5\x1cS-\xf7" "\x99j\xa8\r\x95\xf8\xea\xfb\xe0.\xe2\xeb\xb2\xee}]\xe3\xee\xe1\x9c\x61\x94j\xc2VS\x35\xbe$*\xa6G\xf7\x32\x81\xde\xc6{<\x15" "\xf4\xc5\xc2\xe6\xc0\xe9\x8f$i[\xfb\xf6\xf0k\xe9\?\x9a\x0f\x98\xc6\nm-]i\xad\xc1\x03\xfb\x80\x07\x19\xdf;\x61\x10\x16\xf1\xc3\n" "\xe7!j\xd9\xbd< \x8d\x80\xf0\xe9\x16\xec\xd8\x35=``\xd5|\x62\xc3\xf2\xc4\xae\xab\xc6\xa6\xa3\xc6\xa6\x94\x06\x9d\x66\x8d\xefp\r\x63" "\x12!~\xaf\x16\xbeX\x1d\xab!\xe2`\xb3\x86\xe8\x80\xcd\x06o\x41\x19\xfd\xd8K&s\xd2\x02\x88G\xd0\xf0\xe3\xbc\x34%\xbf\xd5\nG" "\x13'\xef\xd5\xc4\xf6\x45*\xe2\x1c&\x9a\xad\x05\xe2\xc7T\r\xb1\x97\x9f\x18\xac\xda\x31\xf8[\x98\xc8\xe7j\xa2%\xf1\x80x\x9d\x9e\x15\xd6" "\x07\x17\x83\xdd\x08^\xb7\x38`\xce\x33\xcd\x1e\xe2\xc9\x35{p\xaf\x8cgk\x19M\xc0\xeb\xd0\x8e\xc1\x91\xd1\x44\x38\x30\xaaX\xc6\x62\x9b\x88" "\xb6\xde\xd2\xe4\x86\x0b\xe1%\?r\xd9\xd2\xa0\x04\xf7\xfcT\xfe\x01,~\xf1\x31\xf4\x82\x9b!\x88\x1eLX\x03-\x9b\x82\x91-\x62\x0f\xe9" "\xf4\x94O$\x7f\xc3\xe2])\x7f\xc0\xf9\x31YI\xaf\xdf\x44u\xa6lm\x92\xea\xd7\x7f\x8f\x45\xf9\xb3\xb0\xba\xfc\xefG\x93\xf6\x1e\x9am" "\xfa\x34\"\xe4S\xb3\xa7k\x1arK\xbbgx\xc9\xe9\x01|\x36\xb4\x14\xe3\xc2\xcb\x33\xb2\x07\xe6\xdf\xc1\x42\x07\xb4\xf4lM\x9b\xb9L\x1b" "\xe1\xf5\xd4\xb5\xf0\xf5\x99\x03\x81\x1e\x1c\xe3\x8c\x41\xe6+=\xd3\xe3\x94MN\x0fY\x18\x84\x66\xa0\x13\x9a\x61\x41\xb8\x42Q\xc3\xa4&\x34g" "p\x61)\xab\x83\x30T\x43\xd3\xa6O\xc8\xb6\x0emU\xe7\x98\x82[\x04\x84\xbd\xa1\xd3o=\xea\xa3\x64\xb1\x8e(\x1c\xe2*\x91\x92M\xb8" "\x41\x1d\x41\xbe\x19\x61\x01\x45\x8d\\QJ\x9c\x12\x19\x9e\x84\x96\xa8\xb1I\x17\x7f\xe1\xec\x98\xec\x38\x7fW\x37\x18\xd3\x9b\xa6\xbbX\x66\xb8\x05" "\xe4O\x13.\xfb\xa0\x39\xef\x37{\x08\x1d\xa7,\x82\x37(Qx*\x0b\xefQ\xde\xc9\x03\n*i\xf6\xfd\xd1'#\xab`/\xac\x9b/" "\x98\xfc\x0bm\xb2\xd3\x9c\x04\xa5\x65p\xd3\x8b\ny\x64wh\x32\x85\x89P\xba\"\xdb`\xee\xa2\xee\x62\x9a\x97\x83\xcc\x13\x8e\xd9n\xaa\xe6" ",\xb8\xbeW\xd7\xe2\xe3\x1b\x0eyg\x08\xe5+\x44s\xa8\xe4\xf8p\x06W\n\xe1\xbc\xa2\xcd\xf9k\xed\xbf\x1a\x8c\x64\xcd\x19\x07\xe4J\xde" "\xc5,\xecv\xb1\x85I\xc4\xb7\xc7\xa0w\x9e\xe6\xc2m\xca\x44v\xf8\?\x07l%@h\x31\x45\x9b\xb3\xe4\xe4#\xd8\xdbk\x35g\x03\xb9" "\xe0\xb8\x61\x11\x34\xf2\x9c\x1f,\xb0\x1b\\h&\xc7\xe6\xc2\?\x1a\xfc\\\x82\x36\x1b\x14\x9a\x31\xca\xe8_\xc5t\xae\xb9`\xdf\xc7\xf5\xbe\xe6" "\x02\x06\x96\xe6\x82#\x62\x46\x44\xd7\x1c\xd0\xc7\xcep\xceT\xc2\xaa\xd5\x41\\\xdb\xbb\x46\xc9\xc1\xd4\xea\x1dNJ\x46\x96\xe5;\xfc\x95\x8c\xe9" "\xa1\xe2'\xf6l\x9a\xc8\xb1\xd5\xbb\xee\x36\xbe\\\xc0_]\x34\x8c\?\x95\xb0\xb5\x8aX\xeb\xea\x16\x63\x0b\x13-\x1a\x1e\x9b\x12\x8bh\"\x8e" "\x9e\xf4\x0c\x0f\xfc\xc3k\t\x41\xe5\x44\x9c\xf2'\xa6\xf7\x88\x10$\xe2W\xc3\xf9\x37\x31\x10\xedK\xfd\x30\xdb\xbc\xe4\xed\x42\x34,\xc6\x34\xdf" "\xc3\x9c\xfe\r\x8b\x8c\xa2\xe5K:\?G\xdb\xfa\x1e>\xdd\x1f\xfcr\xaa\x05\xc5\x9c\xceT\x30\xbe\x7fgg\xf8\x1e\xd6/\xc8\x06\xd9v\x62" "k\x1d\x44\x0c\x83M\\m]\x0c\xdf\x9a\x9aO\x14\x63n=\x10m\xee\\\xc4\x82\x92\x88\xa8\x96\xef\xb0\x12\t[\xfc\xfd\x97G'{\xb7" "\xf7p\x96\x41t \x11\xe7+\xd0l\xca\xc2\x37\xab\x1b\xef\xd1\xa9\x1a\xa3\x12\xd4\xa0w\xe4\x12\x17\xf2\xa1\t\x35\xa5\xca\xf8.\xd5.*\x07" "Z\xbc\xea\xa4\x9a\x85\xa9\x13\xfe\xec\xc3\xf6)\x07\xd0\xaa\xe9\x33u\xcd\x02\x63\x35\xdf\xb1\xa7XX\xc0\x63\x41>\x0e#\xa7\xe1\xef\xc9\xe3\x95" "\x8e\x9b\xcc\x83\xc3\x35\x7fn\xae\xe1\xa4\xd8\x42\xd3\\ZT\xf9\xb1\x46o\xb0\xc8)\x9e{^\xb8\xb0\x36w\x19^\\\x80\x66\x84\x15\xce\x8e" "\xa3\xe3W\x8e\xa2T\x93\xf1+\xd6\x15\x45\xc3\xd7\x62\xc4Z#\xe6.\xad\x0c\x0f\x65P\xd9\x85\xe6\x13+l\x15I\xfbj&\x9a\xe1\xf3\xb8\x96\xd6\x39<\x84\x85\x36@\x12\xda\x66\xf1" "\xd6\x39\xdc\x91\x84\x96\x07\xd6\xf8\xbb~I\xc5\x9f\x1e\x9c\x0f\xa8}\xba\x08\xf7L\x88\x99I\xd2\xfeJ\x35[\x91\x86\xe8y\xbe\xa0Y\x7f\x04" "\xb1\xb2\xc0\xb8\x0f\x9a'\xc9\x82\xf6<\xd0=\x0c\x85\xf4G\x83\xf9Z\xe6\x0f\xa9\xf6\xd5\x8b\?\xce\xfe\xb4\xa9\x8b\x30\x06\xb8\x88v\xc8\x35\xd8" "\x37\xa0=N\xd1o\x41\xab\xa7\x37\x8d\xcd\xd1\x10\x87m,\xfd\x43[\x7f\x86\x9fo\xaeI\x8b\x1f\x64\?\x0e\x34\xcc\xb0\xa0U>\x90P\x1a" "\x9ag\xd7\x34\rn\xbc.\xf2!\x99\xf6w\xeb\x07\x97\x89\xa8\x8b*\xf2>\xaeY\xaa\x45\x16t\xe9\xeawS\x42\xa6\x33\xd5X\xca\x15\x16" "\xc7#\x9e\x39\xba+\x63z\xa8\xc6\xa7\x30\xe5\xe3\x9f\xf3\x07\xcc\xc7Wh\x66{%\xaaK\xb0\xa1n\x93\x63#v]\x42\x9c\xe0S\xe1\xdd" "\\#\xd2\xf2r\x44\x93\x17\xee\?Z\xe3@K:\xd9`\xb6\x39\xd4\xfco\xd6\xec\x0b\x1fq\x1b\x30.('N,T\x8a\xc8\x07\x87%" "\x16%\x9e\xbe\xf4\xb9 \x0b\x18\x1e\xe1\xc2>n/|G\x31 \x9f\x8a\xd0\x06\x98\x46\xb9\x17/]\x84)\x15V\xf8\xe9[\xeaOx\x88" "\xf0\xc0\x14\xb6\xf0T\xb0U\xd5\xe8%\x02\xdfi\xa3\x0cn\xd5\x03\x88\x0f \x1a\xef\xc1W<\x1b\x38\?\t\xd7<\xfe\xf3@\x36\x8d\xf0\xef" "\x11N\xe7N\x35Z\xa1\x15\x38\x87s\x9f\xd1\x7f@\x44\xbf\x08\x11\xbdz\x1d\xd0\xef\x0e\xa1\x1aZ\xe7\xf0\x9fT\x16\xc9\x32h\xfb\xef\x85\xac" "U^=\xbdn\n\x31\xa9\x11\xb1\xf3\xe0\x84\xbf\x03\x44\xdd\x41\x9fw\rs!\x13\xf5\xb1\xdf\xff\xa4Z\xab\xe8\xa2_\xa5\x88\xba\xdb\xea\x1b" "\x37\t\xff\xccV\x0e!\xffZ\x39x\xa7\n\x65\xbc\x81\xba\x98\x0b^\x1f\x82\x93!\x8b \x17,\x16qn\x04\x17\x17\xd1\xcc\x95\xa4\x95\x0b" "\x8f\xf3\xa0\xcdt\x84u\x12u'\x07;\xbeQ\x86~Q\xeb\x18\x03\xc3V.\x1a\xd8\xa3\xc8\xc1\xf0.\xb4\x1e\xa8\x95\x83\xa9@h\xe1P" "\x84\x36\xdak] \x08\x8f\x31yo\xb0\x8d\xa2\x86\x45\x02\xd1\xe6\xd2\x11Z\xb9_\xa8K\xd7[\t\x8b\x87\xad<\xeb`>\xe8\xc8\x0b*" "\xff\xf1\x85\xcdk~\xa6\xfe\x02\x0b\xa2\xa2\xd9\x00\xd4h\x91\xbb\xad\xa0\x18\xc1\xaeU\x84\xe3\x96\x10\xado\x11\x0eW\x42\x33\x94\n\xcd\x43O" "h\x01\xafZ\x0cP&\xb4\x11o\xab\x88\x8e[h\x8e\xe1\xad\"\xdf\xb6\"K\xac\xc8\x12+J\xf7\x62\xe4\xfbP\x86u\xc2\x98.\x9c\xa9" "V%\xdf\xb0\xa0\xda\x62\xfc\xaeVY\x86<\xce\xe8\xaa\x13\xe5\xdf\xb0=J\x0e\x98\x1f\x98\xf0\xfc\xc2\xbf\xa3\xbb\xd3\xcc/G\x44\xb3I\t" ";/\xa0\xf4\x19\xf9*\xbc\xdd\xa0\xb5\xbe\xe1\x84-\xdak\x05\x34\x0f\xacV\x99\xf7Z\xc6\x36\?\xe1\xeeK\xb3\xb8\xd8v'\xd1l\xb9\xb1" "U\x0e\xcfq\x61\xa1-\xfd\x0b\xd1\x02\x94\xd1\xe5\x1b\xb1\x14`\"\xa6\x01\xeao\x92\x03m\xe0h\xc4\xfa\x84\x8au\xa7v\x1a\x8f\xfc\x02\x1a" "\x90\x32\x36{\x08\xd1\\\x95\xb1\xb2\"\x9c\xbc\x85\xc7\xb3\xf8\xe8J-\x94\xab\xeb\xe0\xb8\xe6\x87\x93\xfa\xe3\xdf\x61\xdb\x1f\xfd\xff\x1c\x0e_y" "\x92\xc5\xb1\x13^\x16\"\xda\xb2\x8a\x10\x1d[\x39\xca\xe2\xc1\xf9\x8d\xa4\xe1\? \xfe\x64\xe3S|!\xba~\x05\x9f\xa6N\x98\x97\x45\xec\x94" "\x9d:\xdc\xda\xe0\x01\xc2\xd6.\x1c\x92\x16\x8b_\x38:v\xfe\xcf/\x8c\xf1$\x38~)\xc3T\xd8*\xc3\xc7\xc5\x08s\xae\x88g'\xce" "\xf0v\x89\x38%\xa6\xc1\x8b\xd4\xc4$\x83;\xc6\xa2\x8a\x91m~\x39\xce\xe3)\xc1#\xcd\x08\xfb\x8d\x88\x05\xfeh\x99'\xba\x9b\xc1\xf7\x46" "\xc4\xea#X\xe3\t\xdb\x0c\xdb*\x62'\xef\x05\x89L\x18\xad\x32\xe6<\xc6\x83\xaa,\r\x9a.o\xadrqIS\xb0\x05\xdb\x7f^\x01" "\xe4/\x7f\x35\x99\x0b\x05\x42[\xe8lqi@h\x33W#\x1f\x13\x1du[\x37\xc8\x07.\xc4\x03R\xc2\xb0'\xe2\x8f\xb5\xdb\x37I\x85" "\x1b\x37ZwXI\x15\xe2\x07\xee\x10\xa5\xbcu\x87\x1d\xb1\x46\xff\x88\x88l\x8aT\x84\xbf\x85\x88\x96\xb9R\x88\xf7\xe2\x8e\xd5\xfc\x8e\x15\xfb" "\x8eu\xf0\x0e\x13\xe3\xd6\x1d\x9c\xec\x8c\x1c\xa2\xd1{\xb2u\x1f>-\x41\x34\x62\xf7\xfa\xa7\xeb\x45x:\x30\rNU\xc2\xb7\x7f\xac\xa4\xf4" ";l\xdd'\xff\x1e\xb1\xdbT\x44\xd4\xba:v}\xb5\xda\xf0Qm\xb5\xd3\x84Q\"\xa2-ls\xbc\xdb\x46\x16[\xa1\xd9\xfa\x8c\xea\x1b" "n\xcb+\xaa\xb5\x41\xb3\xf9\x19\xf9\xde\xb7y\xfdm\x44\x19\x14\x16\xf3N\x8e\xad\xdb\x08\x38(,\xf3\xdb\x16\x88\xdd\x98^\x8eM\xcf\x85(" "\xdb\x36|O\x85\xe8\xd8\xdal\xa2\x95\xe1\x92\x89\xe4\x45\x9b\xf2\x84S\xfe\x90\x19\x0f\x8dlZUL\x7fV\x44\x8b\xa7n\x62XK\?\x00" "\xbb\xa7\x88\xf3\x0bp\xc1\x32\xb0)\xb3p\xcd\x32\xb2\xf5\xd6V\x1b\x16<\x61\x05\?\x87\x35\x45\xe1\xfd=h\xd9\xb3\x95\x13\xd0\x42\x8d\x08\xbb" "\xb8\x19\x44\x83Sv\x9d|\xfa*\xfa\xd5\xf0\xfdlG\xd5\x32h\xf1;\x84\xb6:.\xe4\x43\xc5\x8c\xbd\xd5\x46\x44\x43!\xfa\x9b\x36\x66j" "\xc2\x32~\x85\x43\xefv\xcc\x07\x17O;N\xbf\xd0x\x8a\xa7\xc0\x9e\xbd\xcd\xa1P\x1b\x41U\x84\x98\x44\xb5\x39\x04j\xc3\xec\xa6l\x82\x8f" "\xd4m-Q\x88!R\x9b/r\x1b\x36\x39#\x02#\xb5^\xe4\x9fSsv\x99\x43\x8bi\xea\xb4\x62\x31][\xa3`\x9a\x03\xd1/+" "\xa5j!\xce\x63k\x84@\xb3\xc2\xa5\xd5\xb2Q\xfcU\x07\xcd\xf4\xd5\x1a%Gv\x96\x37>\xd5\xb7\xb0\x65\x17\xc5\x10\x8c\xad\x65\x38\xb2\xa7" "\xf2\xc5\x99\xe1\x17gw_\x88\x9c\xd5\xfa\x62k\xf5\x15\x64\xaf@\x0c\xbb\xbe\xe0\x80j\x84\xf7\xb5\x88\xe8W\xbe\xf8\x34\x95p\xc2h}\xb1" "\xa9\xf9\xe2=\x08\xad\x88\xbeX\xf4_\xac\x8e_\x16\xa2k\xcb\x11\x07\xbd\x17\x8c\xb0=\x89\x88\xca\xf4\x85\x10U\xad/\xce \xbfX=\xbe" "\xa2\x91U\xc2\xaf\xf8\xed\xca\x19\x8dg\xacj+\xed\x0f/^\x38\xbcX\xe9N\r\xdc\xed\n\x39(\x94k\xd0\xfct\x95_\xa0\x19\xe7Z" "\xab\xe0\xf4#\xbc\xc2\x9fX\x30\xab \xd3\x03\xb3U\x04\x36Uq\x82Uk\x11\xd1\xc0\x08\x8b\xe4Z\xf7\xc5\x14\x06\x08\x0c.\x07r\xd9\xb8" "{\x02\xd1\x36\x9f\x18\x13\xff\x38\xda\xa3U\x9a\x41\xce\x45\x19\xd9\x46/k\x19<\xc6\xb6J\xf1w\xf8\x9b\x1a/\xae\xd0\xc4\"\xad\x88\xc5k" "\x38\xef\x41\xb4 j.\xc2v\xa3Z\xd9\t\x1f\x15\x17\xd9\x12\xae\x34\xb7\x9c\x19\x42\x45,\xe5\xb0v\xac\xa2\x06\x66\xfe\xfd\x41\xb1\xb2\xc1Y" "\x05\xd5\xaa&\xc5\xc9,\xc2\xab\x19\x0fl\x11\xfa\x44\xc4\xda\x1ck\x17\"\xd6\xcf\xd3\xabm\x9c\x61!O\xc5<\xd8\x61\x01<\xdf!\x05\x18" "\xb5\x01\xec\xd5\"\x0e\x8f\x9d\x61\xa6| \x1e\x96\xa2\x1d\x08+{\xc4\xf6\xb3\x03\xf1)\xbf\xe7\xa7\x94\xca\xea%,\xe2\xd5\x0f[x\xd3\x0e" "\xca\xeb\xb5\xf4\x37\x8dS\r[\x06\x45\x9c^\x04\x19\x1e\x45{\xbc\xc2\xa2\x8ep\xf6\xed\x0c\xde\x1fSqU\xe2\x88Y\xb4\rV\r\x45\x9c" "\x17\xd3\xba\xb6(\xc6\x15\x9e\xdc\x83\x39\xb8\x08\x17\x04\xd3\x90lM\xc4u\x93\xc3\x80Uz\xb2\rs\x7f\x8a\xb8\xbdIK\x03\xa3[\x65\x1a" "\xb8\xcf\x34\r\xc8\xb3~u-\xdd\x03)\x13\xd7\xd3\x0c\x1b\xfd\x15\xfcw\x8c\xc8|`\x62xw\xefW$\x1a\x32\n\x88\xf8\xf7\xaa!\xcf" "\xaa\xd0\xf2\x91\x18\xb1\xd0\xac\"\?]\x18\"\x81\x8e\x88\x15\xd4\x12\x84\x45\x10\x36{N)\x1f\xac\x62\xaa\xb6\x00\xdb\xa7N\x7fm\x35J\x32" "l\x04\xab\?\x33\x8e\xce\xbf\x9d\xfe\x00U\\\xa3\xb8\xc3m-\x46\x63\xb2\x82\xef\x9c\xd0#\xf5\xb9(\x15]\x06\x87\x1c\x63\xf2\x98\xfc\x8f\x90" "\x05r \x97u\x46'\xab\x03Q\xa3\x37\x62,\xb8\x92g\x94~\xbftJr\x17\xbe\x88|\xeb\x0e^\x39\x11\xa3\xeeq|v\x81\xdd\x30" "\x38\x30~t\x31\xbe\xfe\x62s\xb9\xd2\xcd\x9f\xeb\x7f\x07\xcf\x34\xea,`\x03\x15\xb1{\xec/\xe2\xbe\xa1\x43\xf3\xbf\x16'\xc9L\xfd\x41x\x81\x08\x0f\x0e%\x19\xbc-\xf0\xf1\x13\xde\x0f\x91" "\xc3Y\xc5)\x8d\x32\xab\x34\x61\xa8\x89\xe1%.\x32y\xd4\\Z\x10y{\xc9\xcf\x19\x9f\xeb\x37G\xfd\xdf\xec\xea\xbe\x39\x1f\xff\xa6u\x82" "\xf9\x97\x85\xddi\xea /\x9a\x0cR\xef\xb6H\x96#\x1a\xda\xd7o\xf8u\x0b\xbf\x06\xe6\x90\?\x83\x06\x43\xe3\x37\xc7\x05\xdf\x61\xbe\x02^" "\x9d\xb3V\x7f\x63Q\xd9hv\xe8K\xf5p\x81\xf1U\x8f\x05\x99/\xf5\xed\xf8\xef\xb1Z\xfaU\x19\xf6\xb1\x39V-\xa9\x1d\xc5\xfd\xe3\xe0" "\xdfU\xba\xd7[\x0e\x17p\xa1\x61\xf1\x1f\x88!\xc9\xb7%\xb2\xbft\x11\xeb\x16\x10\x61\xee\xfa\x0e\x9b\x1d\xd0\xf6\x66\t\xcd\x1b\x46hK=" "\xca\x1f\x10\x36\x08\xe5\x41)\xa9Vkrh\xa9\x9a:\xf3UQ\x9e|=\xbe\x11lZ\x88\xb9\x8e\x32\xbe*\xb8\xc8\x16\xf7\x1b\x81\xf3\x84" "\x0f\xcfN\xb8V\x88\xf8\xc2/\xbe\xe3R\x10\xda\xb8\xf5\r\x1fM\xe1%\xca\x80\x93\xe0o\?{|\x85\x32\x88\x8b\xba\xeb$\xaeL\xb0w" "\x44\x0e\xf4\xf6p\x15\x10\x11\x86\xabo\xbf\x8c\xe4\x11\?\xcfQ\xef\x46*\x8f\x66S\xc3\x30r\x83\x88\xaf\xc2mVW\x66\x32\x38\xca\x8a\xb5" "\t\x32\xf3p^\x94\xe9\x31\x8bY\x0f\xf0\xe6U\x8c/'\x1c[n\x82\xdc\xbd\xce\x9bs/\x08\x62)\x07\xd0io\x02\x8b\xd9g\x8cg" "\xeb`uJ\x03\xff&(>'GO\xbf\xb6\x9c+Z\xb9\x03\x62\x46\xb5\x61\xf5T\xa6\x7f\x92.\xbe\xcbT\xed\xa6qL\xb9\xc1\xfaK" "\xfa\x31\x8d\x1d>\x0e\xdf;\xe9\x85\xce+\x9c\x00o\xb0\xa9R\x88j\xad\x64]R\x91\x8b#\x9b\x34t\x8a\x8b\xd1\x1d\x1d\x44\xec\x00-\xa2" "*\xc2\x05N\xc4-\x7f\x9b\xa5\xaa\xdb}g\xb8\xb8\xf0\xf8\xe5\xef\xe1l\xe0\xe1\x62\xd4\xe2\xbe\xe9\xa5\xda\xe2\"\x18\x64]\x8b\xd6\xefX-" "\x37\r\x9b\xf3\x44\xbc\xe3)\xe5\x9b\xbc>\xbf\x31\xcbhy\xcd\xdeJ\xb5 \xbfO\xb5\xc6\xbd\xd3\x9f\x16\xb6GZI\xd1i\x16\xc7\x64<" "\x86\x97\xe3O\xfb[\xa0\x39\x38\x66K\xbd\x87\x07\xfeg-\xc7\xfe\x32\xdf\x1c\x9e\xcc\x34\x8d\x98\x9e\xd3\xdd\x43\xc1u\x8e&\xf5\x83\?\xfe\x1f" "'Q/\x98\xe2\xabk\x87\xc5\x82%\x04\xa5\xed\xe8\xeb\xb9\x16Mxm\xcbj\x9a\xda\xe4@\x83'\xb3\x1d\x90\xb3\xc1\x9f\x41\xb4\xcfL\xf8" "\x66\x1d\xe4\x86\x63\x35\x65\xf4\xf2\xc5!\x81j\xf1\xf9\x32\xc2xg\xc3\xf7~\x13\xbd\xe2\xa9z\x35\xf0[\x8a\xb6\x65\xf2>\x98\x1e\xd3z\xb4" "\xe1Z\xc1&.,\xa2]!\xe8\xa1\xb2\xa9\xbb\x04\xdf\x08\xec\n\x14\xceQ\xc5\xd5\xd5\x9ao\x93\x8a\x83\xec\xc1\x83\xd7\x30\x82\xb6|\xec\xa2" "\xd7\x30\x0e\xdf\x95\x1a\x08\?\xf7\x81\xa5R;\xa0\xc1\xe6\x07]\xddz\xceg\xae\x06\xad\xb3\"\x42\x35\x88\xf6v\x1c\x94.\x90\x66\xfe@\xe3" "\xdcK\x0f \x90]k\xcb\x61\xc7\x16\x61\xf3Z[Z\x8a\xb7\x41\xf3\xdb\xf9\x37\x92\x34\xcd\x13\x08\x9av \xd2\xac\xb0\xe5\xfb\xbe\xa5}i" "\xcb\xc6{\xcb\xf7nKK\xa5\x92\x9d\xb3\x88\x03\xf0\x07\?\x1e\x9bo\xa5\x10\x96\x86m\xfcq\n~\x35\x39\xda\xder \xbb\x83W\x85\xd0" "&\xe5\xed\xa3\xf0\xf6NW\xa0_\x66\xa6\x45\xd2\xac\x95Z\xc1|\x00\xcd\x16;\x85\xeb\xae\x31^\x8e\x92Q\r\x83\x97\xf6Qr\x94\r+" "\xbb\xf0\x18\x7f\x93\?\x38uJk\xa9@]\x43\xf8\xbeT\xe3o\x89\x96<\xedR\xedG;\xf2\xf6\x31\xb6\xf8\x18\x83\xdcQ\x62{\xa3\x44" "\x33\xc3\xbe\xd0\x96\x17\xda'\x88\xfc\xd3>\x41\xf7\xdf\x66\x36\x45\xe1\xd5}\xfcy\xa9\x1e#\xb6\xc5S\x0e\xd4\xb2\xa0\xbcxRS^\x1f]" "K\xba\x0f\x88s%\xdat\xac\x8e\xf2\xe6\xf9$\x9am=l\x9f\xc0y[hm\x88Q]=\x1au\xd7\x30!\xc3\xb6\x38\x1cp\x37\x13" "\xd5\xf8\x31{\xa6\xca\x8d\x11\xd6O\xe1\xfb\x8f\x0c\x16\x93\x87#h\xeb\xcf\xe4\x16\x37\x86\xbd\xca\xca\x85\x11\xfb\xe0\x84\x16\x44T\xa6\x13\xdf\xf9" "\xe0\xf9U\xfe\x41\xb3\xc9\x45\xfb\x14\xc6:\xe3\xef\xea\x42\xc6\xbe\xf0\x16\xb7\x03\x87\x9a={#/\xf4\x34x\xfe\x06\xad\x12\n-\xe8\x83\x31" "\xfd\x88M\xce\xda\xa7hp\x85\xf5\x82S\x1b\xde\xa1\x34\xbfy&\xd3\xf9\xbeL\xff\xb2\xbe\x08\xfa\xd7\x07\x1aLG\xa6!\x61\xc6\xff\xf5\xad" "\xf0\xa7\x9d&\xdd\xb3\x03\xc9\xf1\xf5\xff\x1c\xb8\x1f\x62\xfb\x83j=M\xfa\x63\xcb(\xa2\x35\xdf\x0f\x7f\x13\xe5.\\\x81\x8b*\xd9\x04\xd7%" "'\xfcM\xda\xa7X\x9bt\xc7\x15#\xdcW\\\x83YW\xc4]\x43\x33\xd8L_L\x83\xd1Jh[\\-\x15\x0e\xd2\xe2@\xe3w\xd4" "\t\xdc\xd7\x16\xa1y\xfe\x62\xd3\xa2u+\xb2l\x1cm\xa6[\x30J\xeb\x03\x7f-\xd3l\xfe;t\xcdoH\x45\xde\x8bz\xc4\xdc\x9d\x05" "\xe5m\xaaMg\xa9\xb8\xc7g\x34\xf0\xe6\xf0\xe1@\x44l\xbc\x36\xb7\xd2\xb4\xcf\xc2\xbe\x15g&X\xd9{\x93\xe1O\x66\xb0\xd2&\x1c\xda" "\x39\x33X\xa7\x16\xda\xaaq;\x03+O;\x83\xa5\xc6\x36w(\n\xcd\xaa-\xb4\x15\xff\x36\xb7+\xb6\xb3\x18\x01\xb7\xb3|\xb1\xb3|\x41" "\xe8\xed \xb4\xedk\xed,\x12\x8c\xb7\xb3\xd8\xd0 \x85\x66\x36\x41\xa1\xb5\xcci!\xe6\x30\xa8\x33\xa2\xddl\xe7,\xf8i\x13{+\x44\x33" "\x63\xa1\xf0\xfa\x0b\x34\xbb\x92Q\xc3^\x9d\xe0\xf4h-\xdb\xcc\xa0'\\\xe3\\pz\x17ZP\x93\x36\x97h\x85m\x9c\x35\xb2\xac\xde\x42" "\x0b\x9c!\xb4\x01\xb0\xf2\xedwS\x86+\x8bh\x66\\\x11Z\xea>\xe5\xdc\x08\xc7L\xe5=i\xafs\x0e\x1b\x18\x85\x36\x0fj_\xe8\x66" "\x65sKj\x33S\x9f\x10\xfa\x15\xc6r\x46L\x19]\xd4\xf9\xb8\xe5\xee\xd4\x03\xf8\x03\x9f\xcdU\x90\x1b\xb3q\xbb\np\xfd\\\x31\x12Z" "@\x13\xa1\r\x39\xdbW|LW\xf0\x83\x15>g\x9cip\?\xd1VV\xeb\xafX\x39\xae`Mh_\x61l/\xdc\xe1\x62Y\xab\xff" "\xd2\xd6\xba\xe8w!\x9a\xb4\x90\xf0\x34h\x17\xc2\x8e\xf6nm\x7fS\xb9\x9d\xa7]\x62s\xa6\x44\xef\xdc.\xf1\xfaK\x01\xde\x89R\x9a\xf3" "G\xc4\x66\xd1\xc9\x46\xae\x14vn@\x14\xa2\x92\xe5Z\x66\x08\x61s\x36ik:'\x8c\x97\xda\\\xe2\x15\xa2\xc9\xd5\xca#\x83\xfbp^" "\xd6M\xf8\x83\xae\xf4\x88\xc9\xc3\x07\x46\x43\xf2\xc7z\x1fq\x34\x44\x94\xb1\xf4\xfa\x1d\xe2\xec\x0c\x66u\x11\xbf\x96\xce\x38\xd7\x80\xb8\xbaM\x7f" "v\x33\x88o&\x91M\xea\xda\xb6 <\xafh\xb0\x66\?\xe5\xee\x0b\x83\xeav\x39\xbcx\xd0q\xd2|\x83\xb1\x90\x1c\xc8\xe3\n\xb0%I" "\xd8\xe8\x44\x37\xd3\xe8\xe2\x0e\x1a\xef\x92\x05P\xc6\x90\x43\xf9\r\xf6\xb3\xce\xf0i\x8a\x15i\xd7\x90\x1e\x1aZm\x9cj\x1f\xb8&\xc4\xde\x14" ">n\xd9\xd7\xe9R,\x46\x89\"\xa2\xb5)G\?\x8f\x1a\n\xd5\x06\x7f\xedr|\x84\"\x8d\xcbONV\x8b\x32|\xfc\x85\x0b\x66\x63h" "\x97\x93\x93.x\xbf\x0c\xf7S\xd6\x98\x1b\xf6\x84J\x38\x8b\xb6o\xe0\xd7\xd5\xbe\x91\x7f\xc6\xa8\xa0\xe6\x8cv\x85u\xa4\xc2\x42\xa8\x84\x16\x99" "]h+_\x42[\x96\xd6\xc7\xd5\x01\x7fl\xac\xc1\xed\x1d\xed\n|\xe0\x84\x66\xf4k\xb7\xb0\xb8.\xb4\xb0\x42\xedvp\x39\xc4~\x96v" "\x1b\xfb\x61\xda\x1d\xac\xed\xb7\xbb\xbc\xad.\x1b\xa3.\x1b\xa3.\xf6\xa5\xb7\xb9\xe8\xd4\xee\x62{\xae\x10\xcdL\x97\xaf\x9d\xf2w\xd3\x8aw\x37" "\xc1u\x91-\xa8\x1e\x0br\xd9$s\xcd\xfe\xda\x0e\xe0\x39\x9ah\xe3]\x88\xb6\xd6\x06\xd1\x66\x83\x14\x1b\x98\xe2\x42\xfbY\x63\xa1\xdb\xb4\xf0" "\xe8\x07[\xb6\xa1]\x0c\x90\xd7\x05Z\xed\x1a\x8b\x90\xa6\xc5\x1fg\xb0K\x42\xdbN\x12s\?;\xd0\xd4\x13\xa6x\x17\x14/\xe5\x8c\x98[" "\xd8\x1f\x93>\xc5\t\xce\x85\xc5\xa2\xf6\x33;\x9eg>\xa5\x1e\x1f\x34\xbd\xfe\x94\x35'o\x9cI\x1f\x84\xadk\xd0&\x0c\x42\xf3\xc6h\x33" "\x1d\x83\x91M\x89\x8a\x08\x9e#\xe2+\?\xbd)\xc6\xba\x35\x96\x83m\x39`\x33\xdc\x36s%\x18\x61\xab\x15\xd1\x0c\x33\x46\x8dS\xff\t\xd1\xae\xf6\xa2\x37{\xe5zp \x37\xfa]\x62" "\xc5Z\xb8\xc5\xdd\xc8\xfb\xc0v\xb5\xc7v\xb5\x0f\x8fl!\xca\xb2\xcf\xb2T\xf2\r\xec\xb3\xe1\xef\xb3x\xfb\x08\xaf\xd3\x1e\xb2y\x1b\xf2\xa6" "\x87\xd8{\xd7~\x81]M\x88\x1a\xfa\xa2\x11\xe0\xdc\xd1\xa8=\x0e\x9f\xad\x66-\x93\xcdMT]\xc1L\xd8\xfe\x64\xdf\xff\xc9\xda\xfd\xc9\x12" "\xfe\xe4\xb9\?\xc3\x81\rU>\x31\xa7\x14V\xadu\xfa\x44\x82\xa1\xf6\xa7\xb5hg\x18\xf9v\x8eQ\x01\x8c\x41\xa9\x8a\xebP'\xa3\xbe\x31" "(\xcd\x10\x9eO\xc4J)|\xcc\xabU\xa1<\xb8\xe8u\x38\xb8\x36\xc6\x19{\x04" "Y\xf9\xa7\xbc\x81\x63\x86\x91\xcf\xf9&\xdcZY\xdd -\x63\xe7\x06Y\x16;\xf7p\xe2\xe9\xdc\x87\x16\xf6Kh\x43\xf1\xce=\xc2l\x0b" "\xabK\xd0\xbc\xd5;\xf7p-\xeet\xd0\xbc\n\xed\x35\xeft`\x85\xed\x30\xd4K\xa7\x0f\xe7\?#\x46p&\xc6\xb3\xa5\x08\xd0p\x61}" "\x84\x0b\xed\xf4\x83L\xd6\x19\x65/#k\xef\x44\xb3\xd5\x65\xe1\xe5{\xf2z\x82`\x95\xa2\x95o\x9c\xb0\xab\x88\xd8\x39\x05g%\xe7\xefO" "\x0f\xc9\xd8\x45\xfb\xfeq\x86\xefm\x0cqL\x8b~\xce\x90R\xcb\x34xlu\xfa\xfe;\x42\x35\xba\xf1\x1a\x34\x44\xa6-\x1f\x8bx\xf7*" "\x97\x83@\x93\xae\x85\x9f\x38\x0f\x06I\x42\xde(\xc6\xc9\x46$\xbd\x30\xd1\xaf[\xeeUg\xf9w\x35jM\x19h\xa0\xdf\x10\xcd\xf6\xc6\x08" "'\x95\x34\x86\x88h[\x46\x8d\xeb\xf4\xa5\x83\xf6S\x8a\xe8\xa7\x8c\x07\xc7\xe4\xc5\xc1\xc9\xb0\xd7K\x89\xef&\xc7\xf7 *\x82Rz\x12\x84" "&\x32-\xae/\xe3:nW\xee.\xe9\xb4`\xfcR\xed\x9c\xb4G\?`\x13\x32\x38\xdc{\xd3\x19\xc0\xf7\xca\x88\x1d\?\"\xb6KN\x36" "\x9e*\xa2\x93\xea\xc8\xcb\xaa\x01\xdb\xb1@\xdb\x19\xfe\xee\x17\x41\xa9\x85<\xc0\x1d\x46\xd9\x32\xaam\xc7\xd2\xbc@\xdb\xd0\t\xd9\x34\x38i\x88" "\xe8\x87\xcc\xe7\xa4\xc3\xfe\xad\x33\xc4zn\x87\xe9W\x8c\xbc\xdc\x61\x64+\x10\x9d!\x42\x8av\x86,\xed\xe1\x7f\x1a\x92\x61\xd2\xb9\xd4\x04\x9a" "\x9fVu_\xf9\x33\xca\xd8\x0c\x82&\xb2Uz\r\xbe\xf0)\x44T\x16Z.\x9e\xce+\xdc\xf1\x85[:\x99u^\x93\xdb;\x10_\x9d" "\xfd~\x37\xd9\xe0\x32y\x89\xf0\xc0\x99X\x34[\xd2\x11\xda\xdc\xc1\xa8\xe9\xac\xde;\xd0\xcc\xeao\x94\x91\x62|\xd2\x86\x86\x42\x98\x85\xc7/" "\xf2\xff\x81\x98.\xcd\xcb\x01\x1b\x82\n\xd1\xa7\xcd\x30N\x33\xea\x98\xd3\xdcK\xa0=\x34\xd3\xf3\xa1\xbf\x63Z\x14\xa1M\n\x84\xe6 \x65\xd4" "\x8c\xe0\x36\x03\x17\xed\x07\x9f\x86\xcf\x92\xd1/\x37y`\xe8\x93\xce\x1c\xae_\x42[\x1b\xef\xcc\xb1\"\xd0\x99\x63\x1d\xa9\xf3\x8e\xc0\xf2\x42\xb4" "\x42J\xfe\xc0{`\x43L#;q\x13m\x34\xdcygq\xbe\xc3s\x44\x98\xef\x80\xdd\x0b\xd0\xd6\xd0\x84K\xfb\xc1w\x8c]\x85\x33+" "\xe8\xf7\xe4\xd6j\xd0\x07\x87\x1a\x1f\x32\xb6\x8f\x97\x8c\x36&\x9a\xd9\x45\x84\x96~IxS\x46\xc6\x41\x11\xcd\x1fG\xb8\xaa\x07Yk(>" "\x10MKh\x66\x06\xa1\x0c\x62\x66\\\xbe\xea|\x44\xe6r\xd8\xf9\xd0\x65\x39~\x01\"&\xc2\xa2\xe1\x45\xfe\x88\xe7U~`\x13\xd6\xed]" "\xde\x87\r-\x9e\xee\x11\x62\x04\x1a\xd1\x08\x8bh\xf9\x18\xbbG\xc1i\x11\xf7\"\x62\x06\x9f\xc6.\x0f\xa1\xc5y\xe8\xf2\x91\tk\x64\x9c\xbf" "\xdb\xbd\x8bxS!\xb2\x44\x93G\x14\x9c\xbc\x0f~O\x96\xec\x06\x37\x0f#\x99\xd1\x1f\x9ez\x41\xb8\xd7\x14\x34\xde\x81\x88\xac\xaf'H\x1e" "\xd1\xbd\xc0\x9e\xd7\xee\x05\x86\xd6\xc6X&\xad\x66N\x11\xcd\xbc\x42\x84\xe6\"'\xb4>\x42h\x13x\xa1y\xc6\x08\xcd\x06 \xb4hr\xbe" "\x64\xab\xdc\x1aY\xd3.\xb0INx\x10\xfd\xaaK\xa3\x9e\xb0\x8do\x85\xdd\x7f\xe0\xac\xea\x8c\xdb\xe3T\xec>S\x9c\x19\xa3\xe3q|M" "\xf1j\tS\x83\x88%\x9c\x0b\xf9!\x84\x15\xdc\x9f\x1ah\xcc\x61\x43\x44s\xb9\x11.p\x91\xd8\xc8)\\w\xe2\xda\x43\\\xad\xba&-" "\x17\xac\x30\xaa-\xc8\x15\xb9vzY\x88\x88\x8e\xcd\xc5\xbf\?\xf0\xd2\xfc\xaf\xf2's\xddT\x11w\x1cYp\x97\xee\x45|J^.\x9c" "R\xb4h\xb2M\x93\x91;\\\x08\xa1\xb1\xc0t\xc7)oN\xc5\x9f\xf4\xe8\xc1\xf9\x62\xcb\x9e,\xe2\xf5\xcc\x0b ~\xc2S\xc6\xcet\x61" "\xe7\x8c\xbcN\x7f\xb2\x83\xfb\xf7\xc2G\x63n\xf4\xa2I\xd6\xb8\x1e\x19i\xfd=\xdb<\x9b\xd4<\xef\x34\x8f\xc0\xf7\xc2z\xd5\xa9\x1b\xd2," "\x89\x9bh\xdd\x31\x88\x9f\xcd\xc3^#\\\x9d\xca\x04\x43\xc6\t\xa6\xc1\xf3Mh\x93t\xa1\xaf\xcfvi\x04\xef\xe6\xb1\x84'\xac>\x38\x61" "j\x17\xd1\xdcu\x85\x16\x43\xa8\x9b\x8f/\xd6\xa0\x65\xa5\x14~\xe0\xca\xe0{,\xdc\xe3\x0e\x92\xa3\x8ezk\xf3\x37\xb1\x07\xaa{\xcd\xfa\xa6" "\xc4\xb2k\xd7\xcb\xec:\xac\xdf\x81x:\xff\x10z\xb1\xfbO>\x8a%\x38\x11\xb3s\xf0\xae\x0e\xa2T\xfe\xa1\x37\x17\xe2TJ\x18\x39\\" "\xe4\xcf\xfe\x0b/n\xc0\xfb\xbc\x16\x90\r\n\x44\x33gu%\xbe\x9e\xa6\xf9\x10\xb1\xfb\x8fU\xe4_\x38\xb8\x02\xa7\xf8\x31\x96\xe1\?\xbe:" "\xff\xd2\xb4\xf2&\xa6\xf1\xe7\xa9}\x41\xc4{\xf9/\xear\xa3\xf0\xdf\xe9\xa3u\x1f\xa9\xf7\xba\x8cS\xd2\xbd\xc5`\xa5\xcbH\xe4\xdd[\x0b" "\x14i}\xcf\xad\x45,\xfd\x81\xd9\xd6\xb4 \x33L\x35\xb4\x0f\xb7\x61\?\xe7\xc4x\xd6\xc4\x83\xbf\xc2\xa0m\"\xc6\xd2\"\xa2\r\xb9\x65k" "q\x8b\r!\xc2\xe6\x34\xb4\x81\x97\x88\xf3rt\x85\x0b\x82\xedSh\x63\x33%.\x18\xae\xedJ\xeb\xdao\x61\x13\x15\xde\xa4_M\xeew" " \xba\xb9[\x84\xe0\xeb>\xb0\xc2<\x84\x16RT\xd8\xb3S<\x44\xb9\x11\xf8\x34\x95r\xc5\xfax\xf7\x01\xfbT\xba\x0f\xc9\xe6'\xa9\xff" "\x93\x66\x18&\x90\xee\x13\x8cJ\x42[\x9e\x15\x9a\xd7L\x97\x01i\x84\xb6\xd7[\x88\x96\xf7I\xddX\xd0\xc4\?\x61\xbf\xb3\xd0\x86\xb2\xc6\xd4" "\xdd\xa6\xfb\xc4j\xfe\x84\xd9\x8f\xd0V\xb2\xba-\x16k\x0b\x99\xec\x85]\xbb\xfe\xae\x88\xc6\xc4\x36\xfbt\xa7\x9al\xee\xae\x16\xd6\xec\xd5\x9c" "\xfe\xe2q*\x83\xeeq`\x41_\xbb\xd3\xd4\xcc\xdf\x9d\xc2\xb8`T_\x00\xcb\x64\x08\r\xdd\x95\x8a|\x89U\x8c\xcf\xca\xd1I!\xd5\xfa" "\xd9\xa8z\x87\x8c\xd2r\xc0\xcc,\xc2\x8f/\x35\xf5\xd8\x34\xa1;\xc5\xc6\x14!\x1a\x0b\xe5\xef\xea\x1c\xf9GL\xd3\xbc\x97\x16\x19\xc4\xb4T" "\xdc\x15\xd8\x05.~\xb7t\xfc\xed\xd2\xf8\xd5\x65(\x8a\xee\x02\x96\xad\xee\x02\xd9\x93\x95{p\x63\x15|\x81\xb4\x1a\xdd\x45R\xe9\x39\xfd\x14" "\x1c\x1c|\xf0\xcd\xa5\x03u\xf7\x83\xe5\xfc\x11\xbd\xd9W\xd7\x98\x0f\n\xf1\xee\xae\xc3gk\x38\x7f`\xf0z\xce\xc0\x1e\xf8\x9c\xc1\xe2\x93\xd0" "\xde%\xa1u\xbd\xcf\xb4p=g\xc2K\x1c\x8fO\xf5\xb9>g\x11\x02\xe8\x39\x1b\xe7\xb5p\x9f\xf3\xd8\x31\xf4|\x8d[\x15\xee\xeb\xc6 " "\xf3\x14\x97\x18\x8b\xe5\x99n\x36\x46\xadQ\x9eP\xdb\x0e\xa0\xce\x8aX\xc3\x99\xf0h\x85vG\xc6\xe4\xa8\xf5wt\x44~;\xe1\xd4(\xe2" "\x1c_\xf0\x13\n\x31\x94q\x31\xdd\xd6\x8d\x03\xfb:\x9c&M\xc3\x84\x18\xa2U!\x17\x61\xa1\x30\r\x86~\x17\xa3^\x03\x19yq\xe0\xed" "\xdb\xc5\xff\xfe\x0c\x36\x19\x43\xec,Rq\xfd\x8c\x0c\xa1\xd0v\xcf\x07\x62\\\xda\xba\xa6\x9b\xdeN\x46\xa9v\x85\x1b\xc5\xd2\x90\x11\x9e\x32\xcf" "\xd7\xf0\xf7\x13>\x8e\xfd\xf2\x45\x44\xdf$\xa2u\xbb\xcf\x05>\xa4\x82.\x86{\xe6\x83\xe7\x42tQM\xba\x43\xf4\x99\xcf\x05i:\x34\xd5" "\xf8\xee\xc4\x34\xcd\xb4\x62}\x9f\x88\xb6\x1a\xf3\\\x92\x7f\xca\x7f\xd8o+\x34\xab\xa3\x11\xe3:\x11Q\x18\xff\x10\x83\xe1\xf9\x95\x85\xfb\nw" "\x12#/\xe5\xd5\x62\xb0s\x7f\x08\x34\x9b\x05\xbb\xa8\xdb\xb6\x32\x13L\x36\xedXX}\xc3\xdb\x02\xcd:\x0b\x13\xa3\x81&\xbb\x31\r=\xcf" "\xf3\x1c\xfd\xc5\xf3\x1c\xe1K\x8d\x7f\xe5>\x0fz\x9f j\xba\x12kW&\"\x44\xf6\xf3<,\x9e\x81\xa8\x7fs\xb4\xbf\x42\xdc\xe2\x1c\x91" "\xbf\x9e\xe7\xf0\xa7\x34\x62\xb4\xf5\xbc\xc4+(\xac\x93\xa8\xd0\xf4Xz\x66\xaa\x34!\x8e\xef\xe3\xd2\x42\xb7\xd7\xda>\x17\xd1l\xedNhM" "N\x8f\xebn\x42+\x1f\xa3\xccs\x31\x85\x34\r\xd5\xbeW\x41\xff\xdb\xa3\xf7U\xef\t\xce=\xc2\xea\x93\xae.\xd8\xd6\x05\xd5\xb6\xa0y\xd6" "\n\xe7;\x8d \x64\x03\x06\xd1\xcc\x02\x65\xc4\x33\x15q}\x86\xd1\x90\x88\x9b\x1b\xfd\xdf\xe2\x0e\xf6\x9e\xc2\xa3#\xff\x43\xf8\xb4\x8cgU\xe4" "\xd9\x31-\xa9\?\xa6Z]\xd7\x15\xe0\xc8.\x9au_\x46\x0b\xa6\xdevM:\x31\xbfp\xd5\x8a\xb3\xf0\xa8\x06\xcd\x36\x99\t\x17\x17\xe9V" "\x05\xd1\xde\xde\xe5\x00\xde\xb1\xde\x93_G\xbc\xc3\xe5#\x94\xb1\xd1\xefH\xc5m\xfd\x7f\x42\xbe\xcb\x61\xe9\x12\x06}\xec/\xec\x35\xd0\xfd\x08" "m\xb4#\xb4}\x94\x9ani\r\xa2\x98\x34\xd2*\x62\x36\xf7\x1a\xa1\x99\x16{\rx\x0b\x08\xf7}'\x66\x41\xbd\x16\xea\x83Pz\xcd\x1b" "\xf5\xa1\x8cj\xc7\x38`\xeb\xc8\x46\x96v+\x1a\xdb\x63j\x61\x05\xcb\x08\xfbn\xaf\x0b\xfb\x63\xaf\xcf\n\xc1\xd5\xe1\xde\x34\x39>\x89/\xb4" "\x35\xe8q\xebW\xef\x0b/Y\xef\x8b\xb5\xe4+\x1c\xda)V\xa8q\xbd\xef\xf8X;\xbb\xde\x06\x9d\x81\x32O\xfe\x90\xbb\xe8q\x17\xda," "M\x34\xdbJ\xd2\xdb\xa0\x83\x13\xdaX\x42h\xde\x0f\x42\\\xfb&\xb0P\x62J\x9c\x05]\x97QN\x81]\xf5\xaa\xe1\xacX\x1a\x13\xb6N" "\x9c\xf2\x30\x30\x95\xee\xd1\xab\xb7\xc7\x61\x86pz\x0e.\xf8\xe9\x15iv-\xa5U\xf6\r\x1a'\x61\x9d\x34\x03\x9d\x11\xeb!\x14\xe7.\xc2" "uT\xc4\x17+\xf8\rV\xd3\x94\x0f\xa0\x35\xd1\xbd\r\x42\xdb\xd6\xd2\?\x89\x8f\xae\xc0\xc2X\x83H\xb2\x08\x11=_\x38\x38\xfe]\x1d\x61\xed\x41\xb5\x13\x12\x05\xec\xbf\x81\xfc\xec\xc2\x37\x9e" "\xcb\x66\x19\xfd\x33\x0c\xbe\xfaY,\xb8\xa8\xd1\xf3\x13\xd9\xc4\xd5\x7f\xa3\x1e/\xb2\x08\xac\xa1\xfe\x1b\x43\xa7\xbc\xf5\xe8\x64\x44\xb3\x8e\xc2\x98\x1a" "\xef\x45\xb3\x37Nh\xf6_\xa3\xff\t\x13I\xe1\xb6\x62\x8c\xaf\x9f\x8c\xc9\xbf\x05\xf8\xf0\xee\xe4W\x38W\xe9_\xf0\n*h\x8f\xfa\x15\x38" "\x9e\x08\x07\xf6\xb9\xdb\xd4S\xb1\xcf\xc9\x8f\xd0z\xeb~\x15\x1e\x1f\x46\x0c%\xfb\\\x14\x16\xda.\xb7~\x15\xc6}\xa1\xa5\xe3\x14\xf6\xab\xc6" "(/\?<\xc2\x66\xe1~\x15s\x18\xe1%>\x8dt.\x42K\xe7\xd2\xaf\"\xe6" "\x35\x8c\xe1\xe2\xd0\x1f\xf3\xb2\xc7\xd8\xbf\xe3\xd9\x00\x8cH\x00\xd0_\x86\x9d\xbd\x93\xc5\xccpX\xfd%\x92\x04\x19\xfdO\x89T$\x9c\xe3G" "\xfe\x61\xe5\xd0\x39\x38>\x8c\x8f\?\x38N\xda\xdf\x9a\xb5\xba\xaf\xcd\xd6\x80\x1ei\x83+\x18\x0f\x06W\x18\x1c\x0c\xe8[\x36\xb8\x92\x41]\xf8" "\xd6K\xc6\xda\x98\rJ\xa8$\x03\x06\xa5\x12Z\x08\x05#\xea\x91\x88\x37u\xd0\x86'\x42\x0b\x9e\x32(\x61\xbe:\xa8\x46W\xfbh\xb2\xc1" "\xac`PU\xf3\x91h\x16\x64^\x34\x9b#\x0ejp\x81\x1d\x34\x61x\x1fp\xc1Ih\x9d\xf1\xa0\t/J\x63\xb0\xd8\xa7\xa2u\xa3&" "\xf2:U\xc4\xf2\x12\xc4\xde\x1e\xbb\xbf\x06\xafx\x31\x06\xaf\xba\xbb\xcd\x06h\x83\xb7\xd4ml\xf0\x86\xc8\tJ;\xcd\x16o\xfa`\x0b#" "\x93\xd0:\x36\xa1\xf5\x14\x42\x8b\xbc,\xb4\xe7=\xe0\x00\xce\x88\x34\xc8*V\xc0\x35>\x8a<\xb3\x42\xfe\x9d\xb7\xbe\xc5\xc4|\xb0\x45\x10\x9e" "\xe1%\x8a\xc0\x88\x12\x1e^J\x81\x81\x16)\x63x\x8f\xab\x35\x06\xebUh\x9d\xed\xf0>\xfe\xf7\x06\xdas\x18\x36q\xc7\x42\xbb\xa7\x61\x13" "\xe3\x10\xe3\xaf\xad\x97\x9a\x88\xc7.\"\xbe\xd5\x86\xff\xa7r\xef\x84\x85\xcd\x44\xd8\xd7M\xc4\x03\x15\xd1\x16\x97\xa5\xe3\x38\xea\x82V\x64\x46\xde" "R\x1b\x31\xbe\x84\x16\x8d\xc6\x88\xee\xc1\xc5\xb4\x9b\xc2\x81\xeb[\xc4\x1c\x84\x66Vv\x13\xd1u{\x1f\x65L\xbf\x66m\xad\xd0\x1e\x84\xd0\xbf" "\xe5[qLL\x43L\x99\x86}\x00\"nq\x99\x98\xa2\t\xf3M\xe7\xef\xbe\x8dQ\x89i\x30\x92\x9b\x18Vv\xba\xdf\xe5\xef\x00v." "K\xc7%\x1d\x12\xda\x0c\x39l\x1d\xde\xb0\xed\xbf\xe9\xd7\x0f{\xc9\x90Q\x13\x84\xdd\x85\xf3w\xf5,#\\h\xc3v\xf4~)\xffL\x43" "\x46\x10#z[\x15\xbf\x9dh\xb0\xed\x0bN\xdd\x34\xb0\xca\xb8\x86)\xa0\x89rU\x07\x9a\x17\xa0\x88\xc9\xd1O\xbc+\x43\xb3ww\xd8\x46" "L<\xe1\x15\x9eG\xbc\xc7O\x62\x8c#\xb4\xe4\xc8\xc3\xd1\xef\xea\x34\x1a\xdf\x05\x99\x31\xb5\x0b\xd5\xcc\xce-\x9a\xc5\x98W>\x80\x36\x04\x15" "\xee\x06\x46\x44\x43\x0c_G\xd0\xb2\x8f\xe4[T]\x86\xff\x1a\xd0\xce\xf1;\x08\x82i\x0c\x9e\xd7Qn\x41\xed\xdc\x89\x91\x95\x8a\xf7\xa0\x39" "h\x1a\xd3\?]\xb6\x9c\xd2\x15\x84\x9f\x17\xae\x85W\xe7\xf1\xb2\x0b\xedj\x07^\xf3\x1aK\x65\xa7\xfa\x37/n]\x93\xf9~\xf8Q\x90Q" "\x33\\\x1c\xec\xd8\xa1\x86wp\x94\x66\xfd\x15Q\xa6}\xc3\x11_\xc6Q\x30\xdd\x82\xf3Ur|\x9d\x9c\x17\xa0-\x16N\x8c\xf1\x45|\x9f" "\x83\xab,\x06\x9c\"~g\x9ci\xdc/\xd1\xd6\x83\xf4\xa7v\xc7\x32\xe3\no\xf1\x1c\xb0\xed`\x38\ns#'\xe6\xcd&z\xe9\x84\x17" "\x63gp}\x8a\r\xb8\xaa\xe1'\xc3\xcb\x07\x92\x9f\xca\xdf\xc9\xe3\x0b\xf3\xb8\x89\xf0\xaa\x9cl~\xf8\n\xfei\xfat\xaf\xca\xe8\x02\xf5\xf0" "\x0c\xe6^\x11\x0b\xff\xc0\xf2\x1a\xac\xec\x9c\x98\xba\x8ah^\x1b\xc6\xe4\x9f\x1fzu\xea\x8a\xfd\xd9\x85k\xe1k\x0f\x63p\xd3\xfe\xce\xf0\x9a" "\xde\x9b\xe5\x18\x13Z\x00\x1a!\x9f\x0e|\xf1\x95-\x12\x65\xee\xe5\x08\xa7\x43\x61\xfb\x18n\xfc*\xa2\xa2`\xea%t\xd3\x9d\x88\xbd\xae\x33" "-\x8a\xc1\x65\xfc\xc1m|\xaa\x35\xc1\xd7\xee\xc1\xe3\x91\xab'Q\xd5\xc3\xe9i\xd2m\x44\xbd\x15\xb5\x8f\xc3\x9b\xb5\xb8\x63\xc2w\xde\xd8\x07" "\xaf\xe2\x83\xa5\xb5\xe2\r\xac\xf9\xf7\x9f\xa1\x13\xd3#\x13\xa5\xe7\xc1\xf2\xcdp\x14\x1d\xef\x0e~,\xcaM\xe0\x97\xea\xb9\xaf\x8ci^,\xd1" "\xeeQ\x95\xe0\xb9$\xac]\x38\x83\xec\x17\x0c\n\x07\x9aV\xa4\xe7\x31\xb2\r\xd8\xe1P^ys\xdd\x37-\x1a\xe7\xff\x34T\x12\x44\x1e\x14" "\xba\x45M\xc5\x95\x33\xa9\x37\xe4\x82S\xad\xfb\xa7\r\xca\x07%\x8a\x34*J\xd4r\xc4U\x35\x06\x97\x8cP&\xda\xa4\x42\xf2[\xafy\xb8" "\x42\x88\xf8\x86\xd7\x10\xab\x1f\xc2\xf5\x1b\xf9\xed\x8cOXN|\x93\x10\xc4\xca\x88\x34>\xf2\xaa\x9f\xa0p\xe2l\xce\x89=\xf1\"^_\xa8" "g\xd2%\xca\x38\x66!x\xd9k\xc0)\xdf\xab\x63\x9a\x8e\x96\xf7\xe9\xdf\x0e\x9aG\xd1\x92\xda\xca+\?\x82\xba\n\xa7<\xdfl)\xb7\x8c" "\xc9\x8dh\xcb\x0e\x89\x97\x41*\xe6\x41\x99\xc5\x9f\x97\xe0\xd7\x90\xe4\xa7\xd6k\xa7\x16\x1f\x9b\x45\xb8\xcc\n\xf7x\xb4\xc9Q\x96\xc4\xad\xfb\x15" "%\xc7x\x65\xfd\x15\x86g\x8a\xf0\x11\x45\x92\x96!\x66\n\xb0H\x89hK\xb4\xc2\x8b\x63\x30\?\x04-\xe2\x86\xb0\xc8\xcf" "Y\x38\x1e\x63|>\x42\x02\x04\xd1\xeey\xd4\xe2\xf5\n\xad\x30\x84\x16\x99k\xd2\x8ar[\xd0\x1c\xc6\x85\xd6m\x0bm\x84#\x1c\xe2{\xd1" "\x66I\xe2\xa6\xe5\x9a\xfdZ\x11\x65[hy\x11\x94\xdf\xe0\x07N\x89\xdd\x19\x93\x96\x97\x10\xf6-N\xdai\xda+\x15\xf3\x18\xa9\x89\xf8\x9d" "\x07m\x01P\xf9\x14\xb5\xc7\x1a@\xe5_\x0b\x07\xac\x81V\xda\x63h\x63\xa2\x39\x61\xb0@\xa1\xcdu\x85\xddy\x1a\x42\x08\x9a\r\xb5\x44|" "\x1e$\x8fY\x88=\x9e\xc3\x02\xa0M\x38\xf7\x9c\x30\x66\x9fp\xc5s\x7f\x9f\x90K\xd0\xfc\xb5&m\xd8\x45'\x9c&\n\xef\xce\x31WU" "\xf1\x91\xfc&\x37\xa0\x39.\x08\xad\xa9P^$\x8f\xa5t\xf5\x43\x0e\x98\x35Q\x38\xe7\xb9\xe7\x33\x44\x94\x11q]\xd2\x11\xa7\xcd\x45U[" "\xfa\x1f\x30\xc6\x33\xc2Ti\xa2\x8c\xa9\x82\xe9{\xaa\x35\xf7\x18P\x8bV\x9dzqG\x13\x9c,z\xc5\xaf\xc3\x1f\xd5\xe8\x05)\x62\x98\xdb" "\x07\x8b\xbcL\xa5\xe3\xe5\x97\x06z\xb4\xd9\x31\xfer\xf9\x11^n\xe4\x30+\x94\x1e\x93\x86+\xe0\xdd\x89v\xf8\xb7\x1f\x14\x1bl\xba\x42\x9b" "\xf0\x08\x97\x03rL~\x39\x0f~M^\x88\xe4\xbc\xe8\x17\x08\x8fG\x61\x1d\xf7\x94\x34\xdf\x93\xa3&\xc5\x0f\xb0m\xec \x36\xb1Q\xc3\x8d" "[\x46(h\xb6\xfc\x34\xe9 \xb2\x99\xb0\xbcq\"\x07\xaa\x89I\xf5(\xfe:\xfd\xd3\xbe\x30\xf9\x11\xcdv\xb4\nm\x86\x63\x0c\xb2\xcfX" "[\x16\r\x97\xddI\xcf\xd4\x9dG\x93\x32oY\xb5\xc3\x33\x99\xdf\xabQOR\xe3\x37\x86\x0bg\x30\x96\x81\x64-j\xf2\xcb\xd6\x65)\x97" "\xe4wx\xd2G\x8b+\x9a-pM\x98TK\xb8\?u\xc6\xf9^\x94\?\xa1\x36&\x7f\xe2\xd5\x65z\x83\xfb\x9f\x64s\x03\x87\x8cI\x07" "\x89\xfa\x84g(\x32\xde#o\x37\x9ct\x9d\x07g\x10\xed\xa0\xc0T;\x38\xdf\xeb\xd5\x41\x11\xc0\x1b\x43x\x9b\x01\x65\xb2qG\xf3\xb0h" "\x16\xb9\x63\xd2\x89-;\x84Q\x93\xe3\xb5p\xf5q\x66\x07\xe6\xef\xa3\xdc\x02\x9e\xc5\xaa\xf5\x82\xefw\xbe\x0c\x1d\xbf\x86\xf8\xeb\x1d\xfc\xee\xff" "~/Rm_p\xfe\xfe\x30j#\xb4\xcd\x93\x8bRU~W\xcbTk\x9c M\x0c\xb4\xe9\xf2\xe0\x93\xe1\xa9\x34k;\xd7\x10tG" "\xc5\xd5\xc1/\x62\xfb\x9f\xd1\xbf\x89\xf1\xa9\xf0\xfe\x1b\xecX\xd1vY\xc4\xca\xbfG\xa6\xda_\xd1v\x83\xef\x15hI\\\x85{+\xd6n" "h\x93\x15\x65\x1f\xb4\xa1\x97\x10\x8fK\xa9\x16\x8e\xebT\x93\xde\x02\xcb\xbe\x93.\x1f\x89\x32(o\x31\xd2\x34M>\xc3\xb7\x88\x9a_!\x35" "\xff\xbe\xb4\?\xc7\x9f\x98\xff\x8a\x66\x91\xac\xe4\x07>\xacp\x07\x88%\x62\xfck\x83U\x83\t&\xc8,\x34T>\xfa\xc7\x01\x96\x0f\x84\xb6" "\xa6!\xdc\x30\xf5\x8c\x88\xfc\x08[~%\xec\xac*.\xd2\xbf\x9e\xb7t\xb7\x06\xae,\xd5\xbe\xa0\xe5\xf0\xdbl\xac\x07\x41\xe9\"l\x97!" "\x0e\xb2\xce\x34\x61\x91iq\xf5O\x34\xc7\x64\x88\xb6\xce%\xe2\xf4\x82\x0fU\xc5t\xdc\xacZ\x1d\xfcZ\xa6\?\xf1\xb5L^&\x10Q\xef" "\x94r\x85\xbf\x36\x12\?\xd0`\xe5\x93\x03\xdb\x9b`kU\x65\x80\xed\xcd\xc2\xbbs'\x36M\x89\xe8\xe9\x32U\xec\x61\x9d\x41\x44\xf7\xe7\x11" "q^t\xfe\xf7\xfcr \xe2\x8d\x84\x66\x7f\x14Z\xa4R\xa3L\x46\x82\xe7ir\xf3\x89i-\x8e}\xe7\xe1#\x07\r\x8d\x32\xc4\xb5\x8b" "\xff}\xa0\xe9\x01\x99\xf6\xb1m\xb4\x63\xb9r\xfc\xda\?(\x30=\x66\x41\xf3\x35\xd1\xdbq\x05iPp\xd8#S\x42\xfb\xab\x42\xaaY`" "\xc7\xdfU!(\xe5\x34\xb6\xde\x7f\xcfg\x7f\xd4\x80\x62\xff\xd7\x1f\x17\x0b\x38s\x98\x16\xd6g\xa9h\x91#\xf5\xe6\xd1\x80\xfe\x1d\x8bZ\x95" "\xe8\xe5\xf3\x7f\xfe\xf2~\x0b\xcf{\xd3\xa2RV\xe3\x96\xb2\x46\xe8\x81\xcaG<\xc8\xfeW\x93\xe6P\xba\x10\xf8\x94\xda\x61\xb9\xdd\xa8\x9a\x16" "\xaa\xbcW\x91\xfcy\xb9\n\x1fn\xfe\xe7/\xb9\x91\xf6\x14\xe6\x00\x8b\x03\xd3\xe9\xc1o\xa5\x1e\xe8\xd0\x96\x83`u\xecZ\xf2\xf0\x86@\xb7" "\x93\x41T<\x42RW\x11yn\x61\x30\xa8\x04\xe5\x07\?[\xb4x\xff\xddl!n\xef\xb1\x35\xdf\x45u\xbe\x32\xfb\xbb\x1f\xf0*\x83\x1d" "y\x46}\xdc\xaf}\?[|\xf9\r\xe6{^\x8d\xe5\n\x92j\x86\xe2{\\\xc2\xcb\x12\xd7\?\xb1\xcbG\x44s\x96\x10\xa2\xd7\x18\xc4\xdb" ">|\x13&\x03}\xa1\xd7\xe7\xf2\x86\xfb\x0b\x80UU\xe3\xef:\x17\x1c\xbd\xa4\x9a\xed\xe7\x30\x91MxZw\x12KH$\xec\x16\xe4z" "\xb1mp\"U\xbe\x00\xae\xb3\xc8\x15\xaf\xe2:\xc8\xef#\xcd\x31\x36\xd6\x8e&\xbfG\xfa\x04\xffKr\xff\x93\xfe\x85\xc5\xff\xf6kq\x16" "'o\xd8\x14&\xbc\xd4\xdd[\xd1v\xf4_M\xde\xc4\xf0\xa4\xab\x31`\xcc\xc7\x45\xfe\x62\x0b\x9e\xc6`P\xf6\x8b\xa1\x66>\x05\xa6\x85\xb7" "\x99\xf4o\x96\xf8\x41xw\x16\x64>\x61\xb0\x17\xad[N\x9ev\x81\x39\xe2\x8a\x86\xd1\xee[\x30\xcf\x82h\x1b\xdf\xe0O\x30y\xc3\x86>" "\xe1\x65/\xb0\xe8\x07\"^\xcd\x34\xf9\xb5\x45o\x13\xed\xe6\x9fS~:Z\xf3k\x35\xfe\xd5\xdc\x37\x84\x36\xff\x12\x9aO\xd6\xe4\rk\xa0" "\xc6\xe8\xec\x89\xb3\x81\xb7\xa8z\x19\x14\xaf\xc3\xeb&\xb5\xbb`\xd3\x0b\xb6s\xd7\xe2\xa3\xabT\xc3\x94\xe5-z\x91\xd1\xe0\xa9\xee\xf8\xac\xe2" "^\x11'Oh\x96\x18\xa3\x46\xdf\xb1\x88\x81\xaa\xa1\x94\x39\x13z\x43\xfc^\xe1\xf0((\xe6\x10\xec\\\xb4\xff" "\x9f\xae\x37\xc1J&h\xb6\xb5\xcf\x99\xc9\x99\xdf\?\tQQ\x11\x15\x1b\x10\x11\x14Q\xc0\x96\x1e\x95\x9e\xc1\\\xab\x9b\xc5\x1f\x11{GQ" "\xef\xf9\xee]\xcb\xe5\x13\xbb\x80j\xb2\xb2\xb2\xb2\x89\x8c\xb4\x65\x9b\x85\x16LR\xd9#\xa7\xd9o\r\xa6\xd2\xc4\xfb[Y\xf9=\x96z\xa6" "\x1eg\xb3q\x15\x9c\xd4\xfe\xdd g\xbf\xdb\xf0\x1b\\\xda\xe3\xf7\x1b\xdax\xe2\xd7\x42\x07W\x1e\xaf\x31\xb8\xa2\xea\x34\xb8\xe0\xe2\x1b\xa6\xe4" "\xb3\xacZ\x97w\xeaV\xaa\x13X\xfa\xd4Txp\x85%\xdcS\xb5\xfb,\xaaW\x31\x12\x0f%{\xd9}\x96\\\xdf\xc4\x1f\x05\xaa\xa5\x1d" "\xe1\x14\n\x85\xb7R\x97\x33\x1e\x9e\xb8\n\xdaR\x16\xdd\xbb\xc2\x18\"\xcc\xe3\x0f\x31\xa0\x96\x1d\xc9zl\xef,\xfe\x36v\x93\x16\x41\xfeK" "\x0e\x00o\x11Q\x36\xea$\xbc\xc0%\xa1\x43\xc1\x98\x39\rQ\xf1`\x00o\x36Q\x37\x87\xe0\xed\x61\xb8W\t-v\x89\xa8\xf6\xab\xec$" "\xc0\x1bM\xd4\xbb\xfe\x9e\xa7\x0f\xc5j\xb4\xaax\x30I\x15\x8a\xec\x05k\x89\xc2\xdf\xa4\x31\xe3\xa3\xb1\x88\xcc+\xd9\x18\xb4\xe7l\xbb/\xa2" "\xd6\x97\x1c\x19\xeb\x94~-\xe2\xeb\x1a\x38\x38qz\x82\xc4S\xec\x34\xfd\xeaz \?\x94\x9f\x43m\xac\xb4]$\x8d\x46\xb0\?N\xea\x1f" "P\x1fU'\x9b\x93j\xfa\x1e\xd5\xb4yr_\x9c\x9c&\\v@\xd4\x1d\x36\xe8\xc8\x12\x1e}\x81\x97\x83`\xd0\x42`%Q\x36\xbfG" "h\x1d\?\x42\x34q\x37\xea\x05\x9b\xf9\x16Z\x12\x1b\xb6\x19\x36\x81\xef{\x63\xa7\xb1\to\x87`}\x0cZ\xf4x!Zv\x1b\x0c}\x08" "\xa7kp\x81\xa3\xb0\xc5\xb9\x89l\x16\x9f\x10\x8f\xee&\x1a\xe2\x9c\xd9\x9a\xdb`m\x1c\x65/\x9c\xbd\xb3\xf8T\x15\xbd.\xd9\x85\xb1\x89\xbf" "\xad\x03`\xc3\xfe\x83\r\xba\x8d\xbf\xb6\xa8\xb4\xf6\x0e\xe0\xfaj\x94\x92\x19\xaf\x34WX\x99\xdb\x94<\x9b\xfc\xec(\xccW\x8c\xa8\xa8\xf6\x8e" "\xf1\xa0)\xef\xc1y\t\\\x81\xc1q\x01\xbc\xbcp\xa2\xbc\x10\xb3\xcd\xaf\x98\xcf\xb8\xd0\x46x\x85\x96\xddz\xc7X\xa5\x41X\xc0!tv" "\xfb\xa2\x82\x41XQ\x35\xd2:\x92\x85\xe6\xb0.\x9c\xd6\xb1\x38\xaa\x86\xb8\x19\x96\xc3\xabw\xbc\xeaz\xc7(T\x85%\x1c\x1f\xfd\x36\xbd\xe3" "x\xff\x1d<\xc4%\xc4y\x9cO\\\xc0)\xc3\xfb\x43h\xce\x30\xbd\xe3\xa4:\x06\x1f\xcf\x41\xf3g\xeb\x15\xfe\xac\xfb\xb4W@\x8fG\xaf" "\x80\xa5\x8a\x85\x65|\x1e\xdd\xda\xfe\x0bq\xcdx\xf6\xb7,\x63^\xb1\x98+l\x42\xbe\x14\x9e\xbc\xa3\xe6/\xa6\xb9\xad\x1a\x31=\xd0L\xd4" "\x9b\xdcLzyL=\x97\r\xa7\xcd\xe4y\x1f\x95vQ\x17y\xb0\x34\x94\x06\x65\xd8\xed\x41]\x36\xc1k\x1c\x1d\x8dr#*\x8b\x66\x86" "\xab\x32\x1e\x84L\x95\xcbL\x8c\x63\x88y[\x00\x1f\xf8\x91\xb5\xda\x8d\xd1\xb2\x82\x31\x42QVL\x08\xbb\x37\xe0\xeb\x17h\x0fU\xef\xccO" "\x95w\xf9,\xe4\xde\xf1\xd8\x18\x13\x9b\x63%\x66\x03\?\x35\xf7\xc3G\xd4\xbe\xa5y|\x81\x1f\x46\xcf\xf8\x61\xd4\xfb\x06q;\xce\xa4\xa2\x85" "\n\x91\x9b\xe8*\xedqZ\xbb\xd0\x9a\xda\xc6\?\x9b\x30\x46\xf3\xdeM\xbf\x05j\x9e\x1f#\\\x07\xd4\x45\xba\x07\xbf\x37j\xb6\?\xb2\xdf\xe1" "u\xc7\x17\x0b=\xe9\xe3\n\xd4`\x8f<'\xab\xf2\xeaK\xf6\xfbp\x8c\x91\r\x16\xc2R\xf9\x42\xe2\x1e\x61\xa6P\xef\xcc\xd3\x44n\x36\x38" "\xb3\xe4\xaa\xa1\xc4\xeb\xd5\xc2\xd5Qr\xb7\x45\x37wO\xdf\xf1\xf0\xdd\x15\xd3:\t\x8d\xf1\xf1\x44^\x10P\xd6\x61+\xe4\xb7\x82\xeb\x89\x33" "\xf5\x1d\x12\x65\xb1\x10z\xcf\xa1\xd5\xcd\x84x\x42\x9f\xc3\x93\x13)\x30\x10\x85\xdcT\x90\x9f\xa2\x11j*\xac\xbc\xa0\xf1&\xaa\xd0\xd7v\xb1" "\xd5-\x45\x9d\x37\x31\x8dTL\xeb\xe3\x13\xdeO\xa3n\x0e\x35LQ\x36\x17\x42\xd8\xe3\xa7\xa3*\x06+\xc4\xb4\xe1I\x63\xba\xc9:\x1e\x8c" "\xe1\xde\x03\x9c\x15M%\x9d~\x32\xb3\x87\xfc\x39\xba]\x61\x65\x05\x31\xab\xd7\x64\xdd\xe9{\x12\x13\xaf_\x33w\?\xa8\x63j\x64\xef\x99\x05" "\xa7\x12\xdd\xa5\x30m\xf2\x88\x99\xe1\xd3\x8d\x9b\t\xd3\x32\x1e\xb6Q\xdb\xcd\xa4@\xfck\xa5\x98\xf6\x66\x84g\x85\xe4\xda\xb6\xbe\xfc\xcdr\xc9" "\xd1=\xcd\x42\xfcz\x8d\x81\x33U\xa7\x64\x11\x95\x06\x35\xfd\x8b\r\xb2\xe7\xd4o\xd9\x42\xbb\xa6\x82\xdfQ\x46i\xb4h\xeb\xe8\x14\x65q\x1d" "\x8d\xda\x00\xf3\xfd\xcd\x0bX\x1a\xd7\xcc\xf0\xb0\x99\x9a\xde\xef\nu[\xcd(y\xa4\xa4\xf9\xc2w\xc5\x0b\x1f\xb4\x17T\xad\x95m'\xbc\x9d" "\xcd\x84G\xb1\x9aR\xf1\x39\xd1\x35S,\x06\x01\x36x\x88\x1eQ\xcb\x0b\xf2\x86\x85\xdf\x0b\x16\x61\x12Z\xf7\xb6\xf2\xc6\tOo\xd9\xd7\xde" "\n\xb4\xf5\x1c\x85\xf9^\xbc\x99{rjt\xe6*\xbfh\xdd\xc2=\xc6\xd4R>Y\x64\xca\xa2+\x8d\x05\x33\xea@\x1d\xff\x90K\xd0<" "q\x94\x35gP\xa2\xe3\xaf\xa8\xc2\xb9\xdf+\x16$\xc2\x01\x39\x06\xadO\x45\xc9\x93\x39\?!O\x31\xd8\xac&\?\x42\x91\xf3\x82\xda\xa0\xb0" "t\xee\xfc\x9b\xb5\xe5@\x18\xb1\xf3\r\x19\xc5|\xaa\xe6n+\x8f[\xe2\x85\x95x>\xe6\xfd%\xbc\xf3\xdb" "\x83xp\xcf\xba\xeb\x0b\xfa\x39z/\xe1^.\x38\x39\xc2\xd8\x9e*\x94\x17\xe8\xfd\x10\xf2\xdb\x92\x46\xda\xc5X\xaeQm\x41\xd4\xec\x84\xb8" "\x46I;\xd6V_\x10\xa9\xc4\x18\x35\x9a\xf1\xe0\x89jHNS\xf3\xf6\x98\xec\x61\xca\x8b\x9as\xa7\?\xd2\x62z\x89\xa4&S<\xacv" "I\xa4\x94\?\xa8\x18N\x34\x06'\x0f\x7f\xb3=\xaa/g\x38\xcb\xa3Q\x06\xb5\x18\x64\xd5\xe6\x30U\x8f\x39\x12\xb9\x18\x0bm\xf6\x38\x41I" "\xd8\x41\xca\x86_<\x1f[\xb3\xc9(\x45\x8d\x17\x82\xac\xe2(\xe3o^t\x9f\th\x8eo\x46\x04\xa8\x15s\xc8M\x63<\x01^\xa2h" "\xe9Q\x9f\xa2I\n\xd5X\xc5U\xde\x1d\x0bx&\x9c\xe1\xfaY\xf5R\xc6\x07gQ\x19\xcf\x0b\x9b\x86/\xac\xf4(\xd9*y\x81\x37\xae" "R\x9dP\xa2\x0b\xee\x86y\x1c\xbd\x03\xca\x37r\x44~;\xbd(\x84\xa9>\xa5\xc3\x43}Y\xf3\x8e\x66\x37\xcb\xb6\xf0\xf1\?\xbf\x8d\xfb\x1f" "\xe5_\xa3\xfa\x0cs>\xff\xfd\x61N\xaf\xab\x64\xff\x83j\xe6\xf4W\x33\x86\xe7\x84,`\xa3V\xdf^\x66\x42\x9b\t\xf4\xdf\xba\x9a\x32ml\x46\xc7\x0bL_\x95" "'\xa3\xa4\x80\r\x87\x1aMV\xde{Q\xb3\x1e\xd5\x37\xe9\xe7\x83\xb9\?\xcf\xaaV\x15\xac\x44l\xcaK\x10\x35w\xcf\x89\x1e\xf8\x92\x1d\xb6" "\xa6\xe2~\x1b=\x0bP\xbf\x03\xf8\xd4@\xad\xdf\xbc\x00\x16\x95.t,\xea\x85k\xda\x88\xd9\x41\xf1\x15u\x97\xe9\xed^ \xe3\x63,\xdb" "\x18\xe4\?\xa3\x1aO{\xd9tj\xad\x9d\x45\x8a\xa9\xd7\xd4\x9c\xa6\xdf\x8d_\xf7\xbdP\x42\x18\x81\xdeK\x9c;#\xf1P\xc4\xacV\xa9\xa3" "\xd3\xf9\x08=#P\xa5\xdb\x8c\x92\x1b\x97\xaa\x33<\xf4l\xe2\xbf`\xb4J\xf8\x8c\x42\x12\x8e\x65\xc2N\xd3){\x0e\x1e.S\xd5/\xec" "\x14\xd2\x0b#\xf6\xc2\xd7\x43'\x1c\x8b\x61\xb2\x94\xd7\xd5\xb2+\x35L\xdcWu\xe4\x0cxW\xc5\xf4\x0c\xa4\xe6r\x82\x11%Q~\xeeo" "X\xb9\x62\xe2*\xb8(\xa4)`\n\x43\xa4\xa6\xf4\x9a\x87\xb8\x0b\xf0\x81\x17\x0e\xce\xbd\xf4@(\x37\x65\x87\x1c\x38\xd3\x14\xe1+\x17\xddv" "\x46\xaf-\x8a\x99y\xc6\xbd\x86\x84\xcek\xa3\xd4\xb1\xd2#\x89\x9a\xe5\xd9\xd3\xa3Jr\xbfW\xb6%\x97\x81[<\x10\xc9^\x99\x44\x36\xf2" ",\xe8\x8f\x9c\xd0\x16\x88\x42\xbd')\x63/I\x65\x1b\xb1\x46\x89\x39\x89J\xbc\xa3\x31\xe6!\x64;\xc2\xab\xc3Z\x39\\,\xd0\xff\x66\xca" "\xef\x81\x98\xea&\xd7X\xa4jw\xcb\xbc\xda\x9a.\x17-\xe6\xf3\x1d\xd9\xc8\xdc\x8b\xa4\x8d\x84\x81\xab\xa6Q\x9e\x82\xf4\x37K<\x8f\xc9\xa6" ")o\xd1\xc4\\\xdazm]*\xa0\xfa\x13\xacW\x30\xb8\xcd\?\xeb\x91\x0br\x03\xce\x39\x97RM{\x0f\xb4\xf9\xf6l\xb3!\xa6\xd4\x62" "\x17\x15\xe0\x36\xebkmL\x82\x11J\xd5g\xbd\x8amH\x42\x14\xde\x38m\xcc-P.\x41\x1bQ\x12J\xb9\xbb^!X\xab\xaa\x41\xb0" "=\x0fz\x43\x9d\xcd,v\x7f\xfe\x7f\xdd\xbc\xe5o\xd1)\xd8\x46\x97\xb6\xb0<\xd2}\xa1\xd9\xd0\x66)\xa8\xd4\x02\xf6\xe6G\x07\x01j\x1b" "i\xd5\xfc\xbb\x39\xe8\xddq\xf0\x00\x39\xba\xcd\x96\x41\x1b#\x32J$\x07\xa2\x9c\x08\xc7\x33'\xcb\x98\xf4L\x10\xa1\xdd\xa8\xff-\xe2\xa2\x90" "Iok\x01v\xfc\xca\x45\x65\xd2\x83\x8a\xe7\x1c\x36\x9a\xac\xc2\xb7\xe1>&\x34\x7fz\xa1\x45\x61\x16~q\xfb\x17\xee[\x88j\x41\x9b\x39" "\xa2\xcd\x32\xaf\xcd\xd7t\x9bo\xdf\x36\xdf\xb3m\xbe_\xdb|q\xb7\xa3\xca\x07\xf8\x8a\xd3\x83\x1b\x9a\xd0\xdc\x94\x84#|\x0fs\x46\x85(" "-\xdbXU\xc5\x18V\xbe\xa2\xf6\n\xaa\xc5o\xe1\xb9oKv\xd0l\x88\x8a\x32\x15\x02\x34\x88\xc2\xa3\xae\xb4\x65:\xee\xa1\x36\x38_>" "\xaemy\xfa\xe4\x37\xc9\xfd\x86j\xea\xd4v\xbe\x05]\x10U\x43\xf2\xa3\xbf\xbag\x41\xd3./\x10\x96M\xd4\xea\xd2\x19\xcf\xaf\xe3_;" "N\x07\x13\x85\x8d\xbb\xc2\xa3\x83`\xf9\x46\x38+\x8aiS#{\x0c\xb8&\x44\x7f\x65\x87%V\x87\xcd{\x65\x34=\xc5|}\xa8\xe5\x34" ".\x0c]\x89\xc9\x8b\x30\xb5^\x46u\xee\xdf\x66\xa6\x08-\xa6\x63\xaf\x83\x99U\xc6\xcc\xe9\x86W\xc7\xe0\xcd\x39X\x19\xc2!\x42\xcc\xdbj" "<+\x45k*TO\x95Qm\xf9\xb7\xb8\xa2\xc2\x45\x84\x8f\x1fN\xf6\xc7vX\x83Tj\xf7\xfd\x65\xaa\x34\xc6\xe7\xc5\x18\xbe\x9b\xb6\xc1" "\x16h\xe6i\xa0\xf9\xd8\x61\xae\xeb \xf8\x9b\xf0\xa7\xc0\xfe\xd1Nt\x8a\xeb\x88\xde\x8a~\xa6R'P\xef\xfbk\x9c\xa1\x9c\xb1\x9c\x37\xe6" "\x0fH\xed\x15\x39G\t\x17\x13\x33\xfd\xbc\xd3p\xa2\x30-\xd8\x15\xccV\xfas\xe6\x98\x8e\xbc\x8e\xd2\x9f\xa1;T\xa9S\x9a\x91\x65\x45\x9d" "\xa4_\xb0\x85i\x8cp\x45\x36\x33y\xff\xc2\x88\xa2\\\xf3\x1eR\xc9w\x8e\xc8\x94\xc2&\x32J\xf2\x61\xc5J\xf7\x0f\r\xdb\xae\x96T\xb7" "\x87l\x99\x8a\xba\"\x37 \xfa\xcc\x18lV\xb8\x38\x63\xfavY\x9c*u\x36\xda\x41\x03\xbe=\xb2\x61Y\x63\x83\xb3\xfbg\x8e\xe7\xc6`" "X\xc2$\x05U\x03'SN\xcd\xa8\x83\xef\x06\xb9\x03)\xc7\xd9q\xd8\x45\x64\x46\xe1I\r\x9ep\x62\xa2w\xa9\x8b\xa1g\x65\xd3\t\xc7" "\x61\x33\x11\x33UL\xb4\xff\xe8\xedi\x94\x92Y*\xef\x1a`\x65\xba\xdb\x66\x01\x05`\xae\xe6\xec\xfeT\x15usX\x0e\x04\xca\xd7Y\x80" "\xe2\x65\xc2\xd4\x05\"\x1e.\xe1\xdci\xdb\xa4\x36\x85\x88\x9f\xa2\x1a\xfc\x91\xc5\x31S\xe2\xba\x39\xa6\xd0\xc5\xbcP\xe1\xcb\xa7\x33X\x37\xdd\xe4" "\xbd\xec\xa6{k\xf3[\xed_gz\xe5\xaf\x65\xf6\xe8w\xb1\xb0\xaa\x31\x9d\x99\xae\xf1m\xb8\x15\xfd']\xf8\xb3*\xf9\xab>\xcf\xd0<" "\x01\x84\xbe\xe3\xd1\x08S\xbb{\x0c\x94\xae\xec\x38\xf9lvY\x06u\x39\x30\xd0M\x93u\xc1TY\xfc\xa6\x37\x66\xc5\x13Z\xdf\x38\xfdX" "\x1c.\xea\"L\x99\x91\xcd\xb4.\x9f\xbe.\xe6\x89\t\xd1\xe8\xed\x86wg\xce\xa0\xf0\x8ep\x1aP\xbcn\x31\xa5\x34\xf7\xfc,\n^$" "\x62\xa2y\xd5\r\x1f\x90\xe5\xe1'%\x1c\"\xb7jT\xd1]\xf2\xa9\xf2\xa5\xd0L%\xd7\xcf\xc9MN\x83\xd6\x94\x66\xdc\xd6t\xa6\?\xb2" "\xa9\x9a\xc2\x85\x15\x66]\x8e\xd0I\xd3\xb2(\x65<\xd6\x8b\x12\x85\x17^\x17\x41\x10z\x8c^,|\xc7\x89\x44\xfe\xeb\x65\xe9ov\xc0:" "\x8f\xaapo\xc9Jx\x97M\x84n|\x80\xe7\x19Q\xea\x8cZ\x18\x32\xc9YtuY\xddW\xca[\xe5o\xf3\x9d\xaa\xa3q\xf4\x91K" "\xd5\t\x63\x65\x43\xf9\xb2\xbc\xa6\xc2\xb3\xab\xb8\x95\xee\x65\xd7Knj\x92\x0f\x99\x65\x44\xc5:\xaa\xdct\x85p\xd7nz\xf6\x89\x99\xae\xb1" "\xe6\x81;\x7f\x18\x44\x65\xbf\x83\x12P\xe9\xe9\x9b\xec\xa3\xd4J\xcc\xbf\xc3\x98~$\xa6\xcd%\xd2\xb5\xa7\x9a\xe4\xb7\x33\xfdV\xed\x9b\xbd\x1c" "\xdd\xe4\x1e\xf9>\x99\xd9]y\x65\x8ey\xe5[\xf5\x35\x18\xdf\x82+\xdb\xeb+\x82\x45+\x8f@T\x12\x94\x7f\x8bV\xb4\x39u\x85\t\x13" "\xbdWV\xf3uVmX\xe8\x61Vm\xef\x9f\x39\xb6\xa2\xccO\xb7\xf7\x01\xe7 !\xba\xf5\x39SUx\x37\x05_\xb7\xe1m\x83/\xe0" "\x0fv\x04\xe9\\Pi+\xb0\xb3\xea\x83\x0f\x91r\xd7\x38\xe7\xd4K!\x86\x1f\x95R[\x66\x7f\xf7\x07\xe6\xeb\x1a\xe5\x1c\xd9\xa1\xf5\x81\x9f" "\xf9/\xa5\xbe\xc6\\\xf1\xc1\x96\xfbGt\xd3\x08N_\x10\x32\xc9T\xfc\xb2\x9f*\x0c\x62|\xc4\x87\xb7\xa0\xcd\x97\x14\x0eO\xa4\n\xc2\x12" "\xee\x43\x9a\x30r\xea\xa9\x32w\x34\xa3^\x10\xfa\x82\xe6|\xf1\xcc\x83\x8d%\xce\x9c\x17:G\xa4\xfc\xde\x32\x8d\x05\xa2\xe6\xb9\x93I\xaa\x66" "p\xd4\x81\xb3\x81\xa9\xb0<\x0f\xf7\xcb\xa9\xaa\x16\xe3\xd9w\xaaz\xcbpj\x06zY\xd5\x8c\x1e\xaf\x32\xbf\x8e\x7f&!\x9e\x35UI\xb5" "\xb7\xfb\xac\xac\xbfk\xac\xa9z\xe1\x88\x61N\x44\xcd\x1f\xa3\xda:\xfe\xbe\xa5j\x66\xf7\xe9\xe7\x89\xf1K\xa5:\x90\x9a\x87\xad\xa9\xe4\xe1\x11" "\xabV\xa9j\x39\xb5\xaf\x04}\x88\xaa\xa4\xc1\xc0\x81\x46U\xecq\x31\xf3\xab\x1c\xf7\xd3\xaf!\xd2\xac\x9a\xaf\xe4\xc2\x99\xa6\xe0\xb2\n\xae\xda" "N\xed\x92z\xac\x64T\\-\xb8\x62\x9dg\xf9\xb7\xc5\x99\x05\x07HKx\xd6+\xef\xc1\x93+'\x16\x81R\xf3\xd3\xa9S\x12\xbaK*" "iK\x31N\x95(\x34I\x96|\xf5/\xd3\x99\x9e\x62\xe2Q^\"\n\x91QnZ\xf8\x80T`\xbbg\x19\\\x9d\xca\xd6\xa0\xdd\xa7\x42" ":\x06\x95\x03\xb0\xce\xb3\xab\?\x81h\xe5(\x33wO\xe7\x8b\xfc\xde\x31\x37\xca\xbe\xa6\x98\xee-\x66\x87\xec\x9f\x80\x83}r\xeeL/\xc4" "\"/\x0b\x7f\x7f\xff=\xbfM\xd5\xa9\x0eS\x16\x15I\xd4\xf6\xc0\x19Hm\xd3\xcfj{\x10^\xf6\x32\x8a\xfd'\x34\xd3\x84\xd9\x1eH\xad" "\xd5\xbf\x86 \xa8\xc2\xc2\x8b\xd3\xbf\x18\x9e\xde\x90O\xe4(\xb2\xd5\x42\x31s\xdb\x36\xc4W\xd5\xec\x86\x0b\xdc\xd5\xd0\xe2q\t=@\x99\x98" "\xd5'\xb9\\\xcf`\xea\xbfx\xf5\x15/>\xb5\xd1\xeeg\"\x8d\xda\\\x35\xd8\xbeRi\xf5\x9d\x03\x01\xcb\xb0Q\xf8[\xd7\xc2\x93~\x46" "\xc1i\xcf\x15\xe6\xf2\xa7j\xd3\xa0j\x92\x0bg|\xf3\x10\x8cJP\x0f\xbc\xd0\xa7+\xf2\xd7\xa9Y\x85\x37\x34|)\x82o-\xdd\xea\xdf" "\x41\xe5v\xf7\xad\x61\x39\x1c\x17\xe4\xcfU\xe6\x81\x66\xcd\x61\xa9y&\xb3\x95\x45\x08\n\x14L\t\x10\xf5\xfd\xeb\x0cJm\x04H\x36\xa5\x9d" "\x87T\xac.(Y\x43\x12\xb3G\x0e\x9d\x41\xfb<:>\xf8G]\xb8\x42\xd4\x18W\xec\xa9Y\xb2\xc5\xbd\x64O\xd0\xd2\x33\xb8\xde\x88\xce" "UrWNU\xef\xce\x8b\x1a\x1dqj\x14\xe4\xc1\t\x06g\xf1\xf4;h\xbc\xb1Z\x8eO>\x82\xf3\x46\xaavi\xaa-\xb3\xf3\x17\x38" "\xb9\x89\xaa\xa2<\xd2\xc4\xf1S\xb1\x39\x66\xca\xbe\xa4\x17\xd6\x03\x14UO)%\x8e\x17\x33:\xa9\xfc\xf1\xc3\x33;<\xe8\x8c\xecIX\xb2" "\xe2\xb4\x64\xc5i\x19}\xa2\x84\x61\x0f\xc1\x12\xd3\xb8\x8d\xd2\xc2\x65\x9f\xf0\x12.\xa3\xc2\x15\?\xc5\x0bK\x19\x1d\xec\xf3-\xba\xf4\\\x18m" "\xef\xe4\xcfL/\xf3\x84\x99\xa2\x11]\x35^\xfe\x41\xf9{\x86\x8a\xef\x06\xf5g\x95\xc6\?\xbc\x01R\x35\xce(\xf8\x9a\x42\xc9}\xe5m\x82" "\x8a\x8b%WZ\xea\xef\xbd\x65\x95\x1f\xef\xe0\x82l\x05\x97xTY\x61\\\xc6\xaf\x87Q\xf3\x9d&\xde\x9fX\x08Q\x39tJ\xe2\" " "\xa8\xa8\xc1Tn,\x9brKL\xec\x13\xfe\x0e\x9c\xda\x85\x87\xae\xa0\x65\xbc^&\xb3-\x62\xe9\xf6\x96\xbaT\xcb\xae\x14\xd5\x35Y\xf6\x0e" "Ru\x8d\xabO\xca\x38-\xf6<(=y\xd9{\xb9LZk,\xb3-\xe6\xfb\x97\x0e\x00N\xcd\x38\xc3\xe3\x95|!_\xb0z\xaf=" "\x8a:\x89\x00\x9d\xf0+\xba\x32(Y\x46\xacXx\xad\xf8H)QH\xf6s\xd9\xfb\x64J\xd3\x14\xea (\x9d:\xc3\xd1\x13\x8e&\xaa" "\xbe\x8e:\x33x\x97\xf5\x0f\xe4\x0f\xb4H\xa5\xfd\xa3`h\xbf=\xd2\xc2\xb1w\x85\x05\x44L\xc5\xb5{\xbc\xaf\xf5M_\x08\xb6w\xe8M" "\xee\x17\xe0\xe8\xda/\xa0\xbfNh\x03\x89\x46\x38\x31\x98\x89$\x12\xd3\n\xa9~\x01\xad\x00\xa1\x45t\x10^}\x39\xe1\xa3\xd0/\xa0\x8a\x65" "\xf4_#\xcd\x8d\xdc\xa4\x61\x66\xb0\x94\xb1\x98\xd6\x03\xd0\?\x45k\xdb(o_\x1e\xe1\x34(\x16\x9dR\x31\x8e\x96\xef\xae\xe2\xb3\x9dj\x36" "\x83\xab\xb7\xe0\xfa\r\xb3\xca\x65\xc3\xeb\x16\\q'\xeb\xe7\xa0[\x43\xc8*S\xe1\xdeG\x46\xc5\x83\xd6\xbf\n\x85G\xff\xd4\x86y\xce\xd0" "Y\x02\xb5\xda\x97\x83\x65\x14\xfa\x04M\xc9\x63\x9e~\xd6[:\xc3K\xf6\xeb\x88\xfa\xd9\xd7\xa9)\xd6\x88v\x85\x19\x36\xae\xd2#\xfd\x8e\xe2" "\xf5\x0c\xa3\x34\xa2\x96z\xe9\xc1\xd5\xc4T\x94\x7f\x94Z+:V\x45Yo\x63\xff\xd4\x7f\xe9g\x8e\xa9V\xc2\xb7=\xa9\xf6\xc0\x61T\xd4" "\xef sLi/\xecT\xf1ov\x07Z\?\x99p]s\xa6\xcd\x34\xa8\xd3-jI\xa6\xc2\xf1&l\xde\xb8\x42\x81\xdf/\xc2m\x41" "h\xcd\x0b\xa1u&\x1a\xe3i\x07=\x00\xa2\x8e\xea\xff\xa8/g\x9c\?\x45\xe7\x9d\xa8\xb3\x0f\xd0^Y\xc2\x12N\x8f\xd9\xad\x18\xdc\xe2\xb4" "\x83G\x1b\xda~\xe1\xd6g\x9c|\xd0n\x80\x9d\x8e\x93\xe9_\x94W\x8f\x33=k\x1b\x02\xea\x33\xca\xbbr$M~\xbct\x45\xd9p\x81" "p>u\x46\xcd\x1eo\x44\x31\xb0\x85\xc4\x8crY\xa8\xef\x8aZ\x8d@\xeb\xaf\x37\xfaG\x98\x85 \xb4R\x42x\x8bS\x86\xfb\xa6\x12\xa7" "\x1c\xd6n\xc1{\x1c\xd6\x13\x06\xc3\xec\xc2\x87='\x1f.\x31\x07\xc1\xd1o\xb4\xcf\x1d>}\x90s\xd0\xba\xcd\x85\x03\xdcx)\x43\xfe\x96" "\x9d\x64\xef\xd1\x95$\x83\xa7H\x38jK\n$\x1d\\yh-W\xa3\xe6\x83\xde\x1aj\x89\xdb\x8f\x66\xa8\xf0\x00\x99#\xca\xbf\x82\xd6\xc1" "\xa2\xc4>\xb1\x02\x82\xb0\x8c\x0b\x85\x9b\xb6\x31X\x8f\x30<\x66*\xfd\xc1\xed\xc6\xe9\x89\x07\x13\x11\x93\xfc\x86\xca\x36T\x38\xc5|\x42Z\x45" "\xe6}\xa2\xe4\xa9}>i\x88\x9f>R,\x1a\x1c;\xb3[m\xacU\xb8\xba\xcdn]-\x9c\xb6\xd8\xfb\x1b\xd4\x66\xee\xcc$\x38\x94'" "\x9a\xaa]\x12\x62\xcc@\xb8\xffL\xe2L\xd1\xf7i\x94G\"l\"#\"N\xb3\xf2'\xbb\x8f\x1a\x9e\x45\xf9\"\x89\x84\x46\x94\xad~\x91" "\xc5\x7f\x11=!\xc2\xfc\x35\xf9\xebL\xbbS\xa0\xe4\xe5\x83\xd7@\x11#{\xc2{<\x38\x88\x9d \xfc\xd0\nS\xff\x1a\r\x9b\xfe\x35\xde" "i\xfdk\x8c`\x08\xa5\x06\xae\xcb\x8d\xb7]\x45\xcf\x17\x88\xac\xd8\xbf\x85KM\xff\x96/+\xe5\xdfl\x89\xee\x0f(k\x91\x9a\x89:\xbc" "\x99:j=^\xba\x62\xde\xae\x86};\xb1{\x16\x41\xf7h\xc1\x18\xa3\xcf\x1e\xc2\x03\xf4\xefu\x1c\xfc\x31\x97\xaa\xda\x42>\xf3_\xc8\xd5" "\x18\x65\x13(%\xd8\x63\x0e\xa1\x11\\\xf9/U\r*\xfeK\xa8\xcc\x37\x33{\x85\xf2\xdf\xc5R-\x9e\xae\x31\xd1\x41\xd4\xe0^~\x97~" "\x36,J\xfb\xc3\x7f\x97T\xed\xa6\x34x]-,\x18\x63\x84\xf3\xb8\x99X\x9d\xb3\xdf\n\xfb\xf6\xac\xb5\xf8\xdem!\x1a\xa0\xce\n\xb6\x84" "\x9f\x06\xb9RX\xb9\nVV\x83\x98\xa2ji\x44\xedRL\xbc\x8b\xa6\xa8\?\xf7\x39\xd8,\xb4q\xa9\xfe\x37\x9a\xfa\xc2!\xf5\xa8\x8e\xa6" "O\xff;\xba(\xc4(^\xbf\xa3\xce\"\xba\xb2\xf2\xe2;>\?\xc0\xc8\x87\x98\xc8\x0b\xdfI\xb9\x86qo\x31m\xc2|\xff\x17\x0e\x9e\xc2" "\x62\x1b\xac\x1c\x81\xe6r.l\xbfkHX\xdc|UI\xe3\x38U\xd6u$\x1c\x9c\x81\xab\xbb\x08\x89\xf4\x8b\x36\x9eQ'\xa0X\x17x" "\xff\x17s\xc3\x84\xfd_\xa7\x1c\xd7\x0f\xad\x7fR\xd2\x98\xdf\x85\xa9\xa8<\xc4\x62,\xa2\x86\xd2\x38i\x30\xbfR!\xf0\x91\xa8\xef\xf7\xbfy" "\x17\xc1\xa1\xe4G(%~\x11o\xa2\xff\x8b\x0e\x42#\xfa\x0b\xc4,L\x9d\xda\x9d\xb3m@Yp\xc3\xfe\x16\x63\xf5\xfd-<\x1a\x84\x36" "\x9a \xb4\xf6\xba\xd0\xbc\x9a\x84\xb8\x31\xe9v\x16\xfb[\xcc\x1d\x1b\xe4\xb4\"%\xf5J\x1b\x85\x1dpU\r\xe5\x85\xd3\x06\xbe\xbbP\x96K" "\x06\xb9\xe0\xe8)~\xd9\x8f-\xf6\xa1\xa8\x87\x12\xd8\xaf\x06m)\x0b\\\xfd\x44\x8b\rj\x89\xaeP\x8fS\x35\x07\x97\x05\x39v\xbc\xb7\x84" "Z\x1d\x80\xd6Yh\xcc\x9c\x19^w\x42k\xd9\x0bo\xe7\xea\xc6\xd6\x38r%\xaf\x05\x84\xbf\x13\xf5\xd0I\x7f\x66}\xe6\x83\x1c\xca\x1b\xa3" "\x7f\x04S\xf2\x36\xaa\xde\xb2\xe1\xa6\x1b\x95\x97\x81\x39\x8d\x89Z\xe0\xa2\xe1\xe5!\xfc(\x90\x37\xe0\xa0\x08\x0e\x91(\xf2(\xc9+\x14n\xf6" "\xa2\xb6\xb8\xc4\xe4\xba\xf9\x37[$\x37H\xce\xa4\x86\xefJ\x05L\n_Ln\x1b\xec\xcb\xf1\xe3\xfd\xf7\xf0\xea\x1d\n\xc9\x9a\xc7\x03>\xc8" "\xc3\x1d\xcc\x18\x1cM\xa8\x8aX\xb9Px^\x01m\xf0\xc4\x88\xca\xa3\x98\x16\x8e[h\xad\xc1\x81\xbc\xf0\xeb:s\xb3\x33\xcb\xaa\xae\xdd-" "y\x97\xde'\x9fw\x18\xbe\x17\xb5]I\x93\x02\x91\xad\x06\xc5x\x81]'\x8d=\xd0\x42\x63\r\xce\xffl$\xc5\xf8\xb7|q\x33\xb8\xdd" "\x0f\xf2\xfc\x82\xc5-\x33\"Z\xa7\x98K\x1d\xec\x95\xe6\x39\x94\r\xb0\x0c\xce\xd1\xf7\xa6\xe4X\x85\x9ak\xd0\x43\xf2\x8bi\x39XX\xe7G" "\xed\x46P*\xc0\xecL\xc8\x1f\xd0J%\x63\xf0\xb8\xaf\xfe\x61\x87M\xd4\x32\x65\x9b\xc5\xaf\x1d\x9c\x33\x1b\x9c\x87y]%>\xe8=@Y" "\x65\x42x\xeb\xe4\xb7\xed\xb1\x19p\x31\x61\xa1zz\xfe\xd0\xdc\x82\xd6y\x63\x64\xae;\xc7\"`\x03\xae\x15!\xfc\x41\x8a\xc0\x01pp\x8e" "H\x92\xc2\x42\x1d<\xc5Q\xb0\x64\xa1\xb2\xef\x97\x12\x9d\x61\x17\x88\xc0$\xb4\xe5\x37\x84\xd6\?!\x34\xa7\x03\xe1\x64\xe9\xf4\x13\xd4\xa1\xc1\xf6" "\x06\xd5\x1cQ\x0b\x9c.\x06\x00\x06\xe7\xf1\x9e\xbc\xad\x90\xb2\xf1I\x9e\x1c\x92#\x12\x89\x10\x37\xf6\x41sI\x10Z\xb3@\x38\x85\x46\xd3M" "x\xdd\x04\xef\x37h<\x8a\xd9\x9c\x38\xe3\xe1\x01\x1cLL\xc1\r\x41Ls\xd9\x11\xceZ$\xf6\x9d\xcc\xb7\x88\\\x35(\xc1\x41\xd4\x18X" "\x17\x88\x99\x08\xc7\x83\xad\xe6v\x02s\x30KM\xabo\x9b\xc9\xbb\xa9&\xd3K\x07\xac\xf4\x0b\xff\x63\x66\x31<<\x31\xe7\xe7\xff\xfeG\xea" "\x87\x42QV\xea\xfe\xf7\xbf\xd2\xbe\xda&\xfd\\>P\xd3\x34\x13\x35n\x31\x17g\x64\x39=\xa7\xc5;\xb9p\xea\xce\xfdS\xf3\x07\x32\xc2" "qH\xcd\x35\xb8\xc6\xe9\x07\xf9\"\xf9\xe9\xbf\xfa\xf7\xd4\xa4\xed%\xff#\xeb\x41\x31\xc5\x9bS\x62\tR\x82\xfb\x8c\xf0,O\"\x8d\x82\xf3" "\\\xba\xc7\xf3\xd3\x9dYI\x0fm\xeb\xb3\x0bK\xb8\xac\xe0\xf2\r\xbcJ\xa9In\xad\x05Q\xf5:\xfa\xe3`\xfa\xee\xea\x8f`\x83'\x83" "\xc7\xab\xe4w\x12\xed/%\x7f\xda\xe6\xeflq\x18\xa1\xb9\xec\x08\xfbH\xa9`X\x82\xab\x90\x98\xe6k\xaa<\x05g\xc8\x11\xc1|\xa2o" "\x0b\x0bY\xbdKj\xa1\x66\x15\x94\xf9%x\t\x08\x99\xcd\x30\x12<(!\xac\x95\xb0@]@Z!\xa2\xa8\xf0\x16\xf9\x80\xb9^\x19l" "\?\xc3\xd3T\xb1\xd0\x31\xf3v\x88\xfa\x9d)uz\xed\x0f\x32\xdfL\xf6\xfbYUi\x64U\xed\xf2o\xc9\x33\xa9~\x91\?\xce\xcc=\x85" "J\xcf\xe6\xae\x89\xba\x98\x98\x36\x03R\xc8\xac\x99nopw\x0f\xb8k\xe8\x64\x16\xf2.\xca\x9f\x11m\x32\xe1\r\x0e\x1b\xbd \xf3\xf8S" "\xe5\xf9M\xe8\xf9-\xfa\xb8\x02\?u\xe1\x03\x39\x7f\xac_&\x1b,\x62\x8bp\x84\x93\xc6\xb4\xc1\x41\t\xab\x9b\nOq#u\xedn>" "\xd5R\x05\x8e\x37\x87h\xbf\x88ZwI\x9c|\xbc\xb1J\x41\t\xee\x8a\xc6\xbf\xf5\x44v\x13\xecI\xa9\xff\xc0\xd7R\t\xcd\x1b\xe1\x1dN" "\x10\xd1 \x85u\xfe\xdc\"\x31)\x7f\xc9\x39\x89|\x9f<#\x0fJ\xb3J\x9btx\xcb^\xcb\x83\x88\xeeJ\x31m(I\xb9\x00mn" "\x9b\x31\x38\xbb\xc5H=\x14^IjJ\xbd\x35|\xd9\x83\x42\x05\xe0\x1a\x8e\xaa\x42\xeb\xb1\x30\xc6\xd3\xf7\xd4\xfc\x1e\xc2\x0f:\xa3\xe0\xe0&" "\x1b\xf0:T\x46\x36\x1e \x66\xf7\x18\xb4\xae\n\xa3\x1e\xd5\x86\xcd\x07\xd7\xcc\x9e\xd7\x98l&\xb4\x89\x03\xc6`x\x8a\xd5\xb5\x07\\\xa3M" "\x88w%Wg\x13>\xf6@\xbc\xed\xaeY\x11\xb9\x46[\xc1\xe8W\xaa\x83\x14'H\x30\x44O\x14\xe2\xddx\x1d\x9d\xe0\xd7\x08\\\xae|" "wz\x92\xc9\xeb\x11\xd1\x01\xc5\xbc\xce\x38\x9a\xdas" "~\x8d\xf5\xcb\x85'g \x8f\"\xc4\xf4+\x35\x07\xce\xb8\xd8\x45p\?Q\x17OpS\x11\xb3\xc4\xdfVp\x13\xe0\x61%\xac\x1f;\xa3" "\xb3:\xeb\x37\xa2p\x46\xe9\x02\x8d\x62>\x1c\xff\xad\x1e\xddLw\x63\x8e_\xc2\x61\x91\xfc\x05\x99\x15\xe2\r\xce\x04\x8du\xe1\x35~\x97<" "\xe3\xb4\x92\xce\x37\x88\"\xee&x\xff\x05\xb5\xeeS\tz\x96\xd8\x65-\xb0m\xae\x83\x9a\xa7\x18\x45\xfeW\x99]\xc4\xe0\x16\?)\x62\x64" "\xf3\?\?\x38\xc7lI\x35\xef\x9c\xc1p\x45s\x01Z\xe8<\x65\x17\x44\x0b\xa4\x8c\xd9\xd7\xc6x\xfb\x91\x31\xc3\x11\x63\xd8\xcb\x86\xe5^p" "<\xe0+P\xd4-\xd9\t\x36{\x7f\xcb\xa5\x46(\xa9\xfe\x04{\x35\x34\xae\xf4\x93_p]\x97\x36\x1a\x46\xacT\x35\xc0M\xd1\xf9\x37\xeb" "\xf1iW\x95N\x9c\x82j\x8f\xe0\x0b\x07\x35\\\xb8\t\x37\xf3\x41\x19}\x97\xc2\x1c\xae\x00q\x9b\x94\xd7\xe4\xbbS\xddY\xf1\xe6W%\xb5" "@\x66\xe0\x9d\xf2\x93\x94\xb7u\xbc\xd9\x44\xcb\x93h\x7f\x1e\xd6\xa7\x1a\xa5\xa6\x83\x8b\n\x8a\x92\x07\xe6\x81<[\x9b_\xdf\x90\xd4\xf6\xd2\t" "\xec\xb2\xe1\xe2((\x8d\xc3\xc6\x9eT\xf1\xc3\xe1\x14\x1eP\xbay)o\xbd\xe0\xf2L\n\x7f\xb9sI\xed\x1c\x9bK\xa7\xa4k\xee\xd6V" "\nJ\xf6\x91\xf4\xc1-\x12$x\xb8\xf7;\x1a\x34\x0f\x82\xfc\\\x63\xec\xacx\x11\xcd\xc5\xee\x33\x35\x11\x13WTgN\xf2\x12l\xc2\x9e" "\x11\xc3\x37\x62\xbe\xe5X\xfe\x95\xe5\xf9\x8e\xbf\x7f\x30\xcd-\xa3\xe2\x9f<\x36\x98\xbb\x98\x92;\x1d\x90(u\x94\x1a\x8b\xa0~\x1b\x9f\xbd\xf9" "\x86\xe0\x9c)\x33*\xaa\x33\xf4\x30\xe7JG\xae\\\x8d\xadm\\\xe3u\xda\xea\x1d\x03\xaf\xb8\x95\xad\xbe\xb0\xfbt\xf5$\xff\xb1\x9a\x84(" "\x1b*\x37\xfa\x03\x80\xc0u\xf2\x15)HO\xae\x11\xe7\xc0\x94\x34\x38w\n\t\x8eu\x00\x94H\xbb\x10M\xbc\x32\xdb\x41\x65\xcd\x15\xab\xbd" "p\xbeq\x85\x80\xfcj\xa6\xf4\x64\x0c\x1f\x8e\x10\x37@\xcd\x0e\x88\xe2\xb2\xec\xcf\x39r\xa6gN\xf9\x8b\xee\x8f\x30\x41\xcb\x15\xdb\x9c\xe5p" "n/\xbert\xd0\x03\xad\x83VXxW\xc7k\xb4\x66U\xc5\xdbG\xbe\xcc\xcb~n\xd1\xd9\xa7^*\x1a\x1a\x65\xf8}\x08\xcb\xfcV" "\xbd\xef\x94\xdf\"\xa0\x84)\x8c^\x89\x89WL\x19K\x16\x0b\x97H+i\xa9:\xa5\x1a\xca\x16\xab\xaa\xecn\xb6\\\x05\x04\xe6\xfa\xd2\xbf" "\x86\xb0\x13\xc6\xcc\x35\xabZ\xbe\xc2\xd5\xc6\x94\x8e\xb5\xa1\xf6M\x85Y\x88\xa6\x92\xfbR\xfa\xcd\xc2\xd8\xa9un\x9b:\x65\x8a%w\x39\x46" "\xfdX\x19\xde\x36\xb0&\x93\xa9\xa4\x83\x8b@\xcc\x14\xe1\xe0\x90\xac\x90\x33\x90wR\xc8z\xb2\x9a\xe9\xd4TSRly\x62\x62\xfe\x80p" "\x83\xd2*\xa9l\x35\t\x9a=\xdf\x8a\xae\x42\x9a^\x1dS\x95=\x7fQ\xb7\rL\x9c\x83\xaa\xbd\xb9\x19\xe6\xd3\xad\xe6_\xd1u\x05\xefS" "\x33%\xb9\xd8\x81\"\x45\x07nv\x92\xc7\xbd\x43\xacX\xa3'\x11\xeb!\x65\xac\x10\xad\xe4Wlq\xda\x41\x05S\xe3\x8d\x41~\x86\xb1+" "(i\xd7`\xb7\xa6\xd0S\xa0\xa6\x9e\xd8q\xcf\x15\x02\x8f\xc0\xb4\xd1\x03\x33\x35,,\x92\xdaT\x7f\x81\xd9\x1aT\x1b\x9e\x9c\xa9\x41\x8e\xef" "\xa9\x8a\xbc\xa7\xfcl\x82\xfcOp\xda\x44WY\xb0\x9es\x1byZ\xd7\x31\x32\xeb\x64V\xf5\xc4\x1c\\\x81\xfb\xb7\xd0:\xc4\x85\xfd\xed\x9f" "M\xe1\x10S\n\xa8\xdf)\xd6#U\xb5\n:\x1d\x38\xd6\x66\x14\x82P\x0f*\x61\xae\xa7\xff+_P\xe8\x44\xaa\xe8\x37\x0b\x1d\xf9\x33\xe5" "\xd7\x1a}\x82\xf1\xfe-\x88\x9a\xb5\x32u$\x15\x65\xd1\xa5\x84\x9bMp\xa3\x31\xcf\xf8R\xaa$\r\xcb\xe1U)\x07\x82\x8e\x95/\xd5x" "\xef'x\xbb\x82\xb9\xb5\xa7\xaa\xca\xdb\\\xe3\x8b\xbc\xc6N\xc3\x1a/\xb4\xc6\x9bS\x63G^\r\xe3W\x83Z\xd6\xbd`PO]\xe5\xd4" "\xac;\x31\xca\xaa&\xbb\xff\xcd\xc4\xc0\x9a\x9b\xd1\xe2\x43\x17\x11\x43\r\x8f\xdb\xe2\x41\x0f\x43\xbb\xba\x41\xde\xa2G|\xa0\xa9\x82\xd3V\x46\x85" "\x16\xda\x13jU\xe1\x83P\xff[Y\xe9[\xe7\xdb\xbd\x1e\x1c=%(\x0f\xeb\xc1\xf1\"h\xbc\x45\x9bS\x1b\xc4\x38\xc5\x36\xbc\xe4\xeb\xf6" "\x1a^\xb8\xc9\x0e\x13:\xc8+\x7fI~\xc5\x06'\x8di\x80~\xa8\xd5\xcaM\xac[\x92*\x35[\xce\xb8X" "\xa6\x89\xf4\x0b'k\x04\x12qS*/\xc9\xb8!\xd5\x65\x9d\x19\xd7\xec\x44\xf7\x87\x1a\x41\x8f\xf9\x17_\xc9<\x0e\xd8\x90N\xe3\x94\r\xd3" "\x62\xf8\xcaK\x9d\xf2\x9c\x66\xd6\xda\xa9\xeb\x42\xf3<\xb7\xe8\xe0N\xfe`\xa2i/\xcf\xda\x1e\xf9\xe3\x64\x7fm\x9d}\x91\xf5\xe8\x62\x19]" "#\x15\xa2\xab&&\xc4\x88Y\xc5\xf3\x13\xd5\xd6N\xc4\xaa\x14\x13=yJ\x36\x80\xcc\xb4\xc1\x1c\x33\xe3g\\\x17\xa6\xf6\x0b\?\x1e\xc0O" "$z\xf4\xc5\xcf\xd1gP\x8f\xfa-\x0c\xaf\xab\x89g+\x9a\xe0.\x46\xdf<\x16\x1f\xbft\x45{\x33\xd3\x65\xecUm\x9dX\x30^\xcc" "\xe5\x91\xd3\xb3\xa5\x98i\xbc\x03\xa8~j\xc6\xad\xbd\x9d:v\xb2\xbd\xae&\xdb\xb0j\x62\xd9\xf1\xb8\xc5t\xb7%\xed\x8d\xd1\xc5;\xd6\xb0" "\x82J\?\xc0m\x8c\xf7\x91\xa3\xe3\xfc\x90\xdc\x86\xe3\x1a;K\xb9\xf4\x9d\xf0\xac\xee\xc4z\xe1j\xfe\x90\x33gj\xa2u[\xc7Jj\xbb" "\x8c\x1a\xd7\x90O\xe2{\xa4\xac\x06\xd3\xa9.h\"\x81\xe2g\x64Q\xf8\xe9+\xdb\xa0\x45SRV\xc1\xd1\x11\xc9\x13\xc5X\x42=\xde\xcc" "\x9d^\x0e$\xb9}\xa7\x86\x82\?G\x9eM\xf6o\xfe\x66\x38\xcd$\?\x43\x18$\x31-\x04\x99Q\xeaQ\xf2N\x64S\xa7\x0eO.\xbe" "\xb0\xea\xac\x61\xd4\xe1\xc3\x65\xc4\x08\xbf\x98\xda\x35\x8d\x62*y\xe6N\x9f\xef\xd3\x85\xcb\x45\xbd\xe3\xe2u]\xba]\xc1**\xfa\xec\x66\xd4" "\xae\x1cm\xb1\xfc\x64\xe1\xff\x63\xdb/u\xcay\xe3(i\xfdP\xfe\xcf\?J;\x98\x61\x08\xa3/{" "X[L\xf9V\xf2\x30\x05m\x44w\xf0\xc1\xa3}\xc2\xa1\xdc\xf8\xb7,\xc2\xf3\xdc\x94\\\x13\x66\xbc\x41\xf5\x9f\xd9\x1d\x63\xe3\xed{{\xd1" "\xed\x95\xab\xe8t\x1e\x8f>SU\xa9\x61P\x1f\xaa>\x63\x13\xe8\xd3\xe6y\x8e\xe1Y\x0f%\xcdO\xb4\xd5Lm\x9b\x99}&{t)" "\x12\xb5x\x03W\x38\x37\xb6\xdb\?\xa5\xee\xb6{\xcf~\xb2^\xf4\x19\\\xdc\x39\xf5\xf0\x16\xf1\xdf\x14\xc2i\x42\xe1u\xa9\xcc~\x07\xca\x9c" "\xb7\x45]\xbd!\xda\xc7\xe0\xd3\x93\x8a-\x46\x65\xd0\x9c\xbb\xc9\x97\xe3'\xe2\xc5\n-\x16\xa4\x91\xbd\x99\x66\xa2\xdf\xf8\x33\xac>\x39u\xe6" "\xd9\xf1\x34U\xcb_V\x11T\xed\xba\x0eT\xc9]\x61\x39m\xaar\x82\x80\x15POs,\x8e`JR\x30\xf3MQ\x98\x39m*\x93" "\xa4\x61\xe3\xd3\xa9\xf5\x05\xd4\x39>\xf9&\xfa\x94\xa2\xdf\x08\x87\x19!/\xc3\xaf\x41\xc8\x36\xa5\x99\xc3ir\xf3\x83\x05\xe1\xb1\x61\xf4\x98U" "L\x44\xac\x05\x35\xf8\x64\xff\xd2\x80\x89:`\x83\xef[\xfe\x94\\\x9ap\xb0\xc6x\xd5\x30\x8f\xfc;<\n\x87z\x7f\x87\xe7\xa1\x35\xd3\xb5" "\xbb^s\x83zt\x9c\x07O\x1f\xa8$\x42\xf5\x0b\xf0X\x35\x15UJ\xe8N\x34\x15\xe7NQ\xa7U\x35$\x17\xc9~\x17\xfd\xd7\xe6\x1f" "\xe2L_\x8e\x19\x05g\x10l\xf0\xb9\xafP\xdb\x83x[\xc7P\x99m\xc0\xd0\xa4\x9b\xa8\xca\xb9\xc2\xfb\x14\xca\xfah\x61\xd6\xd7\xa9i^" "\x64\x30\x97\x8bp\x36\x08\xceK\xb2\xfb\x34.\x32>\xd9\xfc\x66~\x12\x96\xe7X\x1c\x80j\x0b\x17\x16\xa8\x87\x83\x8c\x89\xbb\r\xb5;\x11\x0c" "\xf4\xfd{\xcdrH\x9b\x87\x9b^IR\xd7\x35\x65Q\t\xc5\x86\x87\xf7\x34\xe5m>\x87\xfa\xd4\x14\x9d\xd9\x83\x89j\x9d`\\\njR" "\tl\x35\x66S\xd1\xe2)Z\xfc\xba\x8a\x07\x85\xb8\xbfJ\xd5\xf4\xe5o\xc9kYv\x92\x17\x1d\x17\xc7\xb0\x8eoHo\x9e\x85\x87\x1d\x32" "\x30\xac\x11\xd5\\\x35[p\xae\x1b^\xc1%\xd0\x98\x06\x30\x82Z.\xd0\x84\x31\x15\x17GX|\xdb\x14\xfa\xfa\xc5\x63\xf8]L>\xce\\\xc5\xc3\x83\xb0\xd9\xa1\xc2\xdd\xc3\x80\x9e\x12\x17*\x0f\x9c\x13q\xde`" "\x32\xcb\xa9\xb9\xcbj\x36o\x1c\xa9\xe8\x85\x98\x30\xf3\xe8\xa5J\xcf\xd6\xfaZ\xb0m~\xe9\xd9P\x14\xc2\xcb\xa3\x61\x88\r,J\xcc\\\x04" "\xcd&\xd6\x87O\xb7]\x9e\x65\xbf\xc1\x0c\x02\x13\xd3\x07\xa0|*\xa8\xabx\x9b\x0b\x36\xb5t\x43\xe6\x33\xb9\xa2\xd9}\xaa\xe6\x13L\x46\x80" "Z\?\xc3\x7f\x08\x8a\xcf\xa3\x98\x18(\x82\xe9\xcb\xc7@=\xecK\xf6H{\x13\xb0\xed\x7f\x97\x31\xbam\\\xd3\xb9\xd4\xff$VT\xfc\x42" "\xd7\x1a\xd4\xff.\xc9\x64\x9b\xae\xdap\x34\xf9Wy\xa9\x88\r\x99\x94\x82\xfa\xf7T\xe2\x93\xc7x~\x92\xaa]\xd9\xa0\xea\xf1\x1c\x0e\x44P" "\xaf/\x61y\x83\xdaz\xba\xcd\x63\xd4\x43}\x1f\xfe-^\x93\xbb\x1ftw\xf9\xb6\x34\x1b\xd6x\xd4\x06O\xbf\x81\xa2&=\xdf\x87\x83\xec" "\xc5\x35\xf9+\xf3\x18\x11\xf6\xce\x9ch\xda\x8a\xd9\xd7\x17\x05\xbc\xd8L\xc5\xd3g\x7f\xd8P\xa7\x13N*N\xc4S\x14\xf3w\xa2\x05\xe8\x05" "nqtT\xcb<\xa3\xfe\x12\xd5\xd8m\xbbs\xd1y\x35\xc7\xc5\xb0\xf2\x90\xaa\xfa\x1a\x9d`\xa6\xe4\xc9\x8c\xf6{\xae\xa4\xd8\xdc}\xf3\xcd" "\xf9\xe7+\xf1\x98\xca\x64\x31Q\xba\x1c\x81/\x8a`\x1b\xe2\x13\xae\x99h*yy\x84\x93\x8d*<^\xd1\x1d\xde\"\xfe\xd6\x14\x62y\x07" "\xa8\xf7_\xa7\xa4Hp\xd6\xcf\xaa!r\\\xd4+'\xfb/\xc1\xe4-\x64\x81\x1c\xd9:w\x46\x7f{\xc2\xe1kx\x15\x1f\xd5IR\xa7\x15\xa8\x85s\x01Z\xd7\x87\x31,\xbc\x87\x95\x17W\xe8\x1e\x81\xd9\xe5|\xc8\x61\x39\xd8\xab\x39\xd1#h" "\xa6\xd6\tp\xe7M!\x1di\xf2y\x30\xb5\xda\x87\xb3\x8a\xa9\xf0\xfe\x36\xf3\xa3p\xf6\xce\xba\x84*\x39\x38\x62\x35\x8a\xda\x1f\xeb\xecj\xeb" "(\x17u\xa0\xae\x44p\x00\x16\x95\xcfK\xd9\xcd;L\x95|\x1cR\xe9\xba\xa3p@\x13u\xf4$\xcdm\xf8\x94\xaa\x1a\xcb\x9f\x9b\xff|" "ml\xc3\x93UWI\xe3\x30\x1c\x15\xa8~\x9d\x1a\xc2\xb1t\x1e,\xca\xc1\xd3\x11\xb6\x1d\x9f\x65\xbfy\xfc\x80\xf0\xc8\x62\x16x\x98S\x1e" "\xe0\xb4\xe9\x8cn\x19\xadS\xd5\x9bs\xf7\xc5\xb7\xa0\xf6\x81@\x32P\xab=it\xedT\xc9\xcd\xf0\xe2\x95\x19\xcc\xd4\xe4\xdb\xcd\xf8\xea\x33" ">\xed\xa6j\x9d\x9aI\x95\x37\xe1t\xeb\x94\x0b\xf0\x1c\xa1\xaa_\xfa[\xf9\x89n\xc3\xd1\\\xfeR\xf5\xfd\x8e\xf0N\xa6\xa2\xa3R\x94[" "\xa5\xea%\x1fYG\xa8\xa8\xb3\x98\xc5\x87\x03\xaaiZ\x02XW\xa2\xb0\x7f\xec\x0c\xef\xf6\xe5\xcfU\xbc~\xdf\xa9\xfb" "\xa8\xf3\x88@\xf7\xa2\x06|~<\x13,\xb8\xc7\x45\xd7\xa9\xe5\xdaq\xcbU\x98{\x96\xcc\t\xb5\xa9:\xe5\xb1\x0f\x97\xfc\xce\xf6\\RQ" "\xee\xa3)\xc4iPv\x9c\xea\x9f<{\xcd(O;V\xfd\xca\x08=n\x0c:\x87\xf2\xe7\n>\xfbj\xe2\x8e\xb2\xae\xad\x64\xd5\xb2\x1c" "\xe6\x91;\x43\xf3\x90\x1arh[X-\x92xP\x33\xc9\x13\xde\xf1\xf0\x36\x12lL\xae\x9bI\x17\x17\x87\x08\xa0\xca\x0f\xf0\tw\x35\xec" "\xf0\x1c\xba\xdc\x0b\xfa\x10\x94\xfe\x1c\x87\xa8:\t\x91\x8d\xc2I\x8b\x44\t\xc1\xea\x41\x19\x8b]+y\x88o\xdc\xfe\xf0\xe7$>\x38\n\xda" "\xdc\xdb\xcf\x99\x64I\xcf(\xe1\x0f\xf7\x65\xb1\xcf\x85\x8b\x1f/\xf1`\xfem\x34\xf4\x08\x06\x62\x65\xdb\xf2\xca\x0b\xacp\xc9;\xb3l\x65\n" "\xebp\xdd#\x91I#\xde\x83h\xbf@\xa2\xc4\x8a\x0eO\xc9\xa1\x33\xb8\x7f\x81\x37\xa3))\x8f\xd8\xf6.Gy\xdc\x1e\x7f\x91\xb1\xc3\xa6" "\x0c\xd7>\xa1\xd4\xf8v\t\xc7*Y\xd9\x9f\x34\x84n\x17\xd6\x8f\xc8\xdb\xcc\x63\x83\xb8\x9d\xc2\x06n\x03\x06\x9f\x85\xefH;,\xd1*\xfc" "\xe2\xf7\xbe\xf8\xbd\xde\x35\xc8\xa2K\x18\x9c\x1c\xab\xd7\x43\x63\xe0\x1b\xc2\xd2\xb5\xfe\xdfm\x88\xf6/R\xb3Z\x08\xcf\xea\xae\x12s\x95\x16s" "\xcc\xa3-\x1f\x9c:\x62\xb7\xe0\x31VH\xbbx\x7f\xeb\x8cn\xd7\x30\x0f\xf6\xc8\x0b\x92_\xcd\x97I\xe4\xb6\xf8\x18\xe5\x1c\x46.\x95\xdc^" "\x38&\xc7N\xb8\xbe\x88y\x8a\x8c\x89%)\x84\xad=\xa7N\x10=\xe1\xd6\x01\xce\x38\x1e\x9e\x66JXt\xaa\x1b\xff\x66\xc7\xc1\xf9\x81\xab" "\xe0\xfc\x13\xb3\x00\xa1\xd0\x90\x35\xb3\x34LM\xbeZ\xd4\x64\x45\x04&[ T\xec)\x33\x35\xdasS\x83\xf3\x9dv\\\xe9\x1aI\xfd^" "\xaa>kn\xc6\xaf\xfb\x88\x66\x96Q\xd9\x8f\xfb\xe9\x91\x92\xfa/\xc2\x84\x89\x9a\xbe\x91Z\x92\xc8\x0b\tj\xddg}\xba\xccjo\x19\xab" "~+\x37\x99J\x05|\xd0\x87t%\x10\xf2\x85\x93\x94\xf3$\xb2;\x42R\x1a\xbd\xd2\x86\xa9TJ\xdc\xde\xe4n\x8f\xc4\xd3\x9c\xd4\xf8\xf9" "=.!\xa9o\x82\xfcyt\xfb\x99\xaa\xc2~j\xf6y\x98&J\x91\xa4\x8b\xd2\x43\x9e\xe4L)\x9c\xf4\xf0\\'\xb3\x17\xa9\x12\xc3\xb5" "\x42\xd4\xea\xc6I\xf3\x96\x85\xd4-\x1f\xf8;i\x43)k\xd4\xf5\x00\xef\xa2\xa6\xfa\x94\xa1\xc0l\xb2:\xa1\x0c\x87\xcfn\x62x\xc3\xcc\xc4" "\x96\x04\x82\x89g\xbd\x99\xae\xcb'\xf9\x1f\xd2\xf5\x0c\xf1\x8f\xc5\xb4\x85\xd2\x86\xedph\x05H\x97\xc9#\xb4\xab\x7f\xfd\x9b\xd7\"\x8b\xa8\xe0\x66\xb4" "\xff\x95Ux\x1d\xec\x94\x7f\xccj\xb7\xa7\xa2\x92yX\xcd\xd0\xa2u\"\x61qI\x99\x34\x36s}\xe9\x66\x1c" "\xc3\\\xe0\xa4\xf9\xd5>\xaf\xa7\x8f\x03\xbb\xc9\x13\xe8\xef\x12\xb1\xcf^\xd1>\xf7\xdd\xff'\xff\xf4\xe3\xfd\x0ex\xda\xe1\x17\x06\x88\xfch\xdc" "\x95\x44\xa2\xe6\xa0\xe4\xde\x83\xc1\xce\xfc\x85\xb9\xb4\xd7\xf5\x80g\xa5\xfc[\xdc'\xe5\x96+\x16~\x83]\xe1\x34\xd8\x9d\x85\x99/\xbfn\xc6" "\xc5\xae\x9b\xcc\x9e\x83]\xc9\x31\xd8\x15\x1b\x83]\xf6\x1c\xecr\xdf`Wv\x0cv\x99m\xb0\xcbl\x83\xe0\xbc\xc2\xd7\xdb \xb8\xc5U\x05" "\xfd\x42\x92\xef\xc3\xfc\x1d\xfb\x05\xca\xbd\x0eJ\x83\xa4Q`\x36\x19x\x12\xf1\xfe\x0c\xc2i.\xf3\xa9\xe4\x07O\x8f\xa8\xda\x86\xf7\xbb\x98\xcf" "\xa3]\xcf\xdb@.\x93=\x00\x03\xbd\xa3\xff#\x8c\x0f\x16v\xec\xff\xfe\xff\x30=@\xb6\x14q|\xde\xeb\xc1\xae\x0c\x1a\xa4\xab\x99\xd3\x44" "\x42\xecN\x62\xc8;\x30\xdc\xa5\xf9p\x97\xd0\xc3]:\x0ew\xe9\x38\x64\xeeW\xaa\x1f\x85\xb9\xce\x0f\x87|\xb4\x86xxx'\x86RT" "\xcau\xf2\x0c\x87r\xee`\xd1\xae\xdb\x0b\xd4\xe1\xee\x8c\x87\xbc\x17\xde\xfeR\xb2\x07I\xcd`\x94\x0fm\x42\xb9)]\xa5\xacp\xe7j\xd7" "\xed\xabj\xd7#\x39\xc5\xac*\xa3\xbc\xaa\xa2\x93#\xd6\xb8\xb9!\x1eT\x38\xde\x30\x45ph\xa3\x8eI\xd5|o\xbd\xf0\xbc\x80Y\x37T" "\x8f\x19\xa5;\xb4\xd0\x03\xa2\xfcL\xd1o\xa5\xd4!\xde\xceU\xaa\x16\xed\xd8\xd6\?\x13\x85\xce\xaa)\xa2\xa5\x19y\xd7\xd5\x0c\xf2\xcb\xb0\x7f" "\x9b*\x64[\x33Q\xa1\x83\xe9{\xe8\x83\xb6\x06\xa8\x11\x91\x05\xd4\\;\xd9\xe2\x9d\x62&\x98\x11K\xb3\xaby\x03n\xea\xe0\xf6\x05Q\x0e" "\xcd\x64\xab\x61\x1a\x1c\xe0\x8e \xf8\x9aQZ\r\xac\x1e\xab\n/:l\x9fL\x39\xce\x37\x85s\x8c\x10\x9dS\xc2!\xc9\xed\xc7{\xc9<" "\x0f\xdf^UGN\xb6\xae\xd4\xf4\xdb\x10\x1c\xaf\xc0\x93#\xa7_\x13&\xed\x18\x93\xbd\x95_\x06\xc7\?\x95\xcc\xe6\x66^\xe4S\x13uh" "\x33\xd1\x93g&SX\xcd_\r\xdf\x9b\xaa\xb4\x7fSU\xf8\xf8\x1c-\xd6\xaet\x0c\xc1\x42>\x9a\xc2,%\x35\x87\xe1\xecI*]T" "\xbf\xac\xa0M\xf9\xc2\x9e\"\x02\x9d\xf0\xb4\xee\x0cJWX\xfb!\xa3X\xff\xb6\r~\xce\xa7\xf5\xec\x31O\xebZ\xf1\x44g\xea\xd4\x1f\x03" "\xf6\x81M\xd3\xab\?g\xea_\xf0\xe8\x17\x45\xa7\?+\xf2&pz\x16\xe0\xfb\x62\xba{\x61M\x83k&\x11\xbah\xa6\x01\x9f\x06\xc4\xa5" "\x35Z\xa4\xa3\xf3Tm\x1f\xc2\xb3\x9c+i\x95\x07\xed\x91\xab\xec\x65\x34x\x82\x0f\xbc\x9f\x0f\x0f\xe4Sj>\xf2\x90M^k\x93\x87\x34" "\xd7l%\n\x84\xe0\xf9\xcd\t\x87u\x31_x\x06/<\xca\xcb\x8fSZ\xc0\x30}\xdd\x08\x35_\x93\xd1*\xcd\x61\xedw\xf5n\xf5\xcc" "\x8e\x8e\xc0);\x87\xa6\x41\x9f'\xd5\xe7\xed\xedo\x35\xc8\x64\x9bW\x35\xe0\x1e\x31\n\x34\xe5\xf8\x86R\x1e \x8e\x84\xa8\xca>\n#&" ">\x86k\xa7\x1c\xc1\x16\xde\x39\xc3)\xbf:\x63\x8e\x98W\xc8\x89\x33}\x8a\xe6\x13\x38\xcc\xc1\xdc\xae\xdc\xc4\xac\x37\x98\xeb\xa9\x9b\x88\x8d%" "\xe6\xe2\x86\xac\x38\x83\xa3\x9a\xae\xa5\xf4\xb0\xf5\rZ\x16\xde]xq\x88\rp\x33\x81\xba\x9a\x65>\xb3\xe5G\x98\xd1\xd6\xef\xce\xf4\xfel" "\xf6\xfe\xd6\x17r\x0b\xd8k\x33\x65\x45N\x19>\xbcy\x99&*\xb9/\x61\x19\x03U\xe4\xfe\x0b\x88\xc1\xe6\xa9\?t\xba\xb8\xce\xf8\x9d\xe6" "\x1d\xf9\xeby\x9b\xc3tJ\xf6\x80M\xe1Gn\x94\xec\xc8\x37\x7f\x66\x08\x85\xa6\x17\x18\xba*z\xda\xaaW\x15\xbd^\x65\xbe\xe9O\xae\x98" "\xc9\xf3!\xdb\xdf\x0c\xc8\xa1\xec%\xb5#vmLu\xfc\xb4\?r\x13\xbe\x62j\xfa\xa6Q\x94\xdbx\x0e\x13%\xadk\x8ejO\xd9q" "\x30\rk\?N/\xd3\xc5\x64\x0f\xba\x99\xfdO\x37\xd9\x65\x34\xd5\xa1\n\x66\xb2\xb0\xde\xc0\xb4S\x35\xc7!\xcb*\xb9\x7f\xf1\xeb~\xb2S" "I\xa5\x01o\x61W\xe9\x9di\x30\xb1\x1e\n\x64\xc7\xf9\xb7\x9ai\x1awz\x62\x07\xab'vk\xeb'R\x02\x04O\xc3\x8c\n/x\xbb" "\x1e|o^\x8b\x9d\"\xa8\xb2\xf0\xb1\xea\xf4W.\xbc\xb2\x8c\xc1\xc9^jV\x8e\xdc\x44\x1c#\x33=\xc3\xa9\x89Z\xb5\x9a\x98\x84\xa7&" "sT\x93W\xf5\xc4\xaf<\xf1\xa0-&g\x17\x95\x85\xf0\x15\x8fs\xf8\xf6\x81\xd9+\x62\x0e\xce\x9d\xe9}\x18\x9c\xeb\x44\x99\x1a/\x00\x35" "\xc3i\xc8wM\x38z\"[N\x84>P\xf3\x43\xfeh\xf2H\x63\x66\xaa\x31o\xfb\x98wur\xe8\xd4\xe2wU\xca(\xac/\xa0\xaa" "\xe5\x8cP\x9b\x9dr\x04\x42\xd8q\x06gO\xa9\xc9\x97\x85\x98\xf0\xe4\x34\x93\xbd\x64Sv\xb8N\xb1\xae\xa4\x92\xa7\x38\xcd\xc9\xbb\x1e\x91\xaa" "U\x31\xe9X\x64\x85\x18\x1a\x9d\xa6\x0f\xfawN\x63 \ry\x1e\xdf\xfc\xd5\xf7\x91\r\x07\xf2\xac\xbe\x8f\x9d\xfe\x9a\x08\xbf\xaf\x9dX\xd4\xd0" "\xcc \xff\x96U\x97\x17;\x35%\x99\x9b~x\xb7~\x98$\?orY\x1c\x8d\x9b\x86\xbf#'{\xec\xd5\xd4n\xb3\x03\xde\xf7_&" "\xc1,\xaf\x0e~#^\xd2\x8c\xb7~\xc6\x83\xce\xde\x9d\x1c\xde\x99\xfa\xdbN\xa8\xef\xc5\xd3\xb6\xab\x34[/\x98\x97\x17\?\xce\xb4(\x14\xf3" "\x07/\xa1p\xc9\xdd-\xa7N\xa9^\x44\xef,\xc6V\x05\xf9\xa3\xc9\x8c\x80\x8e\xe8)\x02\x80\x1a\xcd\x65o\x9eQ\xea\x32\xfa\xcf\x06,\x14" "o\xca\xdc&\xdb\x19\xe5\x65\xad\x86\x04\x1d\x94i~;w&\xf2|t\xd0t\xb2\xabXM\x38\x8f\x8b\x99o\xfb\x43\x11\xe5\xfbq\xdd\xb7" "\xf6=\x61\xa3\xc2\x19Ywr@\xd8LV\x07\xa2\x02\xf2Pt\xcek\xbd(\x90\xf4z\x17\xb3\x84;\xe3\x05\xa0\x30\xe0K)\x9d\x98," "\xe6\rw\x84^\x36\x65\xc0\x9a:\x1d\x30\x94\xd2\x94\x8f\xcb_X\xffH\x37\x0c\x9d\x31Kz\xaf\xca\x65*q\x1a\x35`:w\xd3\xab\x8a" "Q\x85\x97\xc7W\xc3n\x04UM\xac\xb9\xa3&\x32\x65T\x45&UG|O\x84\xfa>y\x44\"\x97G\xcf\x37\xe4\xab\x06\xdd\x7f`\xca" "\?sG\xcf\xbc\x39/oN\r\xc5\xd8\xfet\xe5\x65\x0cLz\xe5\xa8\xf2\xaa,\xc2\xa3\n\xbbx\xf2\xa3\xd7=\x1dL\xb8\xe3\xfdx[" ":\xbdr(\x15\x1e\x8d\xb1\xc7JP\xf4\xc9\x35Y\xd5$\xbf\x98\x0f<\x97\xf4\x90\xe1\xd9M\xa3\xf4\x37\x16L\x8e\n\xa9\xe2H\xb0\x9a^" "\x8b\xf1w\xaa\xfa\xc3\x66r\xf0\xb8\xe0\xf4\xd7\x41\xc4\x32\x0c\x61\x9e\x94<\x1fV\x9d\xa2%\xef\xe5\xd2\xf5\x36\x9b\xa2+\xa6\x37\xfa\xd7\x84W" "N/\xaft\x8a#\xcb\xcdx/\x97\xb0\xde\x16\xefU\xfcN\xb3{\x45\xb8 \xb7No\x85\xb1\x83\x45\xb8vzy\"\x66\xbc^\xc7'" "\xcd\xbf\x45W\xed\xee\x91\xd8\xf8\xe4\xb0@\xe2%\xc0\x31\x0f\xe1\x44\xd7\x93:\xa9\x65\n\xb0\x98oO!\xfb\x84\xa6^\xed\xd5!\x10\xb9s" "l\xff\xf9[_\xe8O\x44|\xca\xab;\xe7W\xce\xafI\xdc\xb9\xf8\x82']\xba\x8d\xaf\xb9\xcf\xcbsr\xed\x0c\xd6\xd7\xfeN\x15%\xf9" "\x0c\xc1\xf2\xa1\x98\x07v\xe3\xffS\x84\x45S\xf2|\xaeg^\x92\xa8\xc9w\x66|\xc3\xcb\xab\xcc\xfdq\x8d\xab\xb8\xdfq\xed\"\xbd\xf8\x1a" "\xf7Q\x63\xc2\xdf\x33\x31\xee\x91k\x10\x0f\xc0\xe8\xa5\x81\x98\x98\xdf\xa1\x66\xcf\xc9\xfe\x95i\xdch`\xce\x91\x9a\xbc\xb9\x8fy\xa7W\x0e\xfc" "\xcd\x10\?\xa3\xaa!\xb7N\xe7:\x94y\xab__\x9c\xec\x95\x9d\xc6\x63<\xec\x88\x02\xa8|s\x66\xaa\x0e^\xcc\x64ZX\x88\xac+\xe4" "s\"\xf4\x36(\xd6\xd0\x36z%]M\xbe\xe0\x31\xf9\x43\xb8\xe5\x8e\xb6\r}\xcc\xaf\x8e\x33\xca\xab\xd0\xc9^N{\x06\xb6\x17T\x05\xf2" ">\xca\r\xbc\xb3\"\xc9\xe5\xc8\x1b\xa7W\n\xd5\x64)\xec\xa5\xa3\xd7\xcd\x12\x66\\\xa1W\xfc\x38\x66\x34M\xaeq\xa2\xecv\x9erx\x44" "\xe9\xad\xed\xd4U\xdeL\x0e\xc3L\x93\xf2\t\x89{\xcc\x41&\xa5\xae\xf8\xb5\xfcq\xe5\x95\x35\x0e\x35M\x93;^\xc2]Y/\x9e\xf5\x06" "\xa9\xd0;\xff\x66m\xba\xd7\x99Z\xb4\xbd\x12&\xca\x1bt\x62\xea,\xcdZ\xaa\xe8U\xa7\x66\x9c\xf3q\x33Q\xa8\x46$\xf7\x8d\xe8\x19\xf7" "+\xa9\xff:\xbdXN\x30>\x38\x95\x32\t+\xdd\xa8\xf9\xec\xf4.\x35\x33\x8b\x34QwH:\x0b\xa7\xbfO\x10\xf9X\x38\xb9\xf5r\x00" "\x33\xb2\x95L\xfa\xd9G\x32\x43\xd5\x34\x99\x33\xf1\xe6\xfc\x35\xdcV\x95\x08\xe2\n\x93\xed\x66\x35Y\xfa\x85\xfa\x12\xb3j\xeb\x0c\xb3\x61\x8c\xc1" "Qj\xaa\xbb\"\xee\xd0\x0ck\xb8\x19\x83\xfcO|:q\xa5\xd3-\xd0\x8c\x9e\xd1\x37{\xf6g\xcbJ\x19\x83#\x7f\xf7\x98R\xa7\xedI" "\xaa\xd2\x0e\x45U\xac\x65\xa9\x19\xbd\xe4\xd8Y\xac*\xae\xdd\xebk\x1b\x0f\xcf\x8c\x9epJ[\x06y\x06\x65\x41\x96\x85K\xfel\xf5\x94\x86" "{\x16\xb5} -\xff\xcf\x82\xfc\x14\xdc\x9d\x1c\x96,\x10\x9e\xbe\xf1\x01\x9c\x05\x97\x05\xe7\xce'v\x46\xd7\x1c%\x1b\xb2\x33\xacH/\xbc" "+\x38\x93\x83\x16\xcc\xc7}g\xe6|\x44i.\xb1\xa8\xcf\xa2P}\x9aI\xdb>]]O\xd5\x9d\x33\xfb\xcb~\x8e,\x38\xf9,\xce\xd8" "W\xadL\xcf\xb5\x7fO\xc7\x02\x35\xf9l\xcd\x82\xc1\x16\x84W\xfa\x0ck\x00\x19\xd3\x1f\xfe>\x82\xbcY\x08\xe2 \xc4\\\x85Y\xb0\xd9#" "\xa9\xb7\xd5\x34\xa2\xcfp\x16\xe6\xae\xc1[\x64\x07L\xfd\x31\xfe\xad\xae\x10\x01\xdd\x94\x98\xc1\xf3\x01\xd4\xdd\x19\xd9\x01\xed\x0b\x9e\xb1\xe4OJ" "\x39\x44t\x14\x35\xe1~\xbf/\x9c\xac\xf1\xcf\xd8\xe8\x99\x45\x98\\\x30\xe3\xcb\xd1VW\xde\xe5\x61\xcd\xd6\x33~`\x01)\x84\r\xec j" "\xe2\xec\"\xf4W\xcd\x10\xefO\x0e\x7f\xd0 q#\xe2\xab#\xb9\x85~\xb6\xf1`\xcfI\x7f\x94Y<}\x0c\x8e\xf2Q\x37\xef*yx" "\xf7\x04\xf1\x0bI\xf6\x90\xf2I\xb9\xa5\xc9\x07G\xdcY\xf2p\xeb\xf4{\x9b\xb4p_\x92w;\xdb\xf9\xdf\xd2\xde\xb1\x9c\x33\x34\\\x87#" "+\x01\xd6\xd1\x81\xe5\xe2M\xb8\xd4\xf3\x1a\xed\x61I\x18\xa1-\x64$\x9cR[g\xf7h\x0f\xb5\xabQ\x0e\xe5\xce(\x17\xda`\x89\xd0\x9a" "\x39\xa3\x1c^m#\xc9\xbb\x85\xb0\xd8\x08\xcc\x39\x45\xd5\x12\xb4H\x34\x46=}s\x9b\x32\x15o\x8f\xe1\x18\xa5\xea\x11\xb4\x18R\xc6\xe4\xe1" ")(\xf1\x97Vy\x34\xea\x1e\xba\xfb\x62#z\xbel[\xe6\x34\x1e\x88=\xd0\xaan\xc1\xf5\x93\x31\xb0\xb5\xd1\x94+\x30\xf7\x03\xe6\xdf\x9c" "r\"\xe1 \xe7J\x97\x80\xb7\x35\xb7T\xfd\xc8\t\xa0'R\xd4\x31\xce\x01=\xd6\xc2\xc2Up\xb2\x44\xedM\xd4\xe9\xbb\x13!>\xdd\xf4" "SG\xb0z\x63T\xc3\x39\x62\x8dz\xe5\x1dh\x81\xfa\x8d\xf2\x34#\x44\xba\xaa\xf3\xa0\xbdH\x8fzy\x9e=\x87\xcc\x92\xf5\xa2lqz" "\xe1\x35\xf7\xd3>\xd6\x30~~\x02R\n\xfa\x01\xcc\xd4\x63\x0cK\xe9\x61\xcco\x46\xf8~\x0fZ\x96Q\xf2\xe4\xecmo\xd4\xe9w\x0f]" ",j$\x1b\xfc\xe8s\xee\x88\xf7\x37\xdck`U\\\x31\xad\rj\x94sL:\xb8\x05\xe8\xfd\x33\x66\x32\x02<\xd7\x94\x38.\x82\xb7\x18" "\xe3\x62'\x9cM\xa1J\x64\xe5\x04+\x81\xab\xc9\x1fZ\xf0,\x9d\xab:tJ\xfb\xc5/\x13\xc1H\x84\xe6\x66 \xec-\x9d\x99\xbc\xa9\xe1" "\xe1\x0f\xb7\x98X\x30\xd2\xcc\xe6\xf4l\x85\xd2W\x38\xc5\xcf\x11o\xd2\x08\xc7\x1e_\xf5\xc0\x88=\xa7G\x41\xd9\xe0\x9fh\x91\xe3\x9f\xf8\xd9" "\xe8\xd4\x80\xfe\x04\xd3\x06L\x85\x87\x9c$\xa2j\x98T\xfb\xf1\t\x92%j\xf0(\xcd\x8e\x33\xfc\xc2#\x84\x46\x9fQ\x17\xa8\xb4U:\x44" "uK\xce\xa8;\x41\xbb_\xd4\xeb\xc0\x89\xa1\x1b\x31\xdf&`\x8f_\x19\x93\x16g\x63\xb4\x8f\x15\x07\x8cX\xfa\xc7L\xbfz\x94\x83\x46]" "\xc2\xe6\x04O\x14\xbc\xdf\x85\xe7/\xc1\xf9-&_\x89j\xe1\xdc\xb1\xae\x96\xf2\x05\xe4S\x19\x0fp\x87\xe3i\xdb\xa9\xb1\xb1lr\xa1)" "-\x10\x98\x31\x44\xe9\xbc\x88\xddg\x99L\x03\x87t%\xce\r\x41P\x84u\x94\x05R\xe0\x80\xcc\xa0\xba\xc4\x44\xf9\x32\xdeGzH\xf3#" "Z\xdd\xa1\xfbtt\xac\x31K\xa6\xcf\x92\xc1\x93\xfa\x11\x46Xl\x9bTY\xb1\xd2\x9a\xaa\xa1\x33\x38\x99\xb9\xf9\xcf\x17\x16\xa0\xc5\xf3\x10." "\xef\xc8_\x63\x90\xbf\"; \n \xa5\xef\x02\xc1\x85\x94\x38\x16\x86\x81\x84\x16\xfdQh\x01o\x84\xf6\xea\x36\xe2\xd5\xad\x66\x1f\xb4W\xf4" "H\x9e\xbf%\x88\xa7\xf2\x18\xdd\xe0\x46\x96 \x66\xda\x04N\x33\xc3U\xd9\xcf(,>\x93H\x9c\xb0\x32\x05\xef\x9e@[\x07\xd6\x98\xee\xeb" "k\x83\x08\xbb\x62\x0e\xf9\xedI\x81\xe4^\xac\xe3\xd1\x88\x05\xd9\xc5\\Y\x99s\x0c\xb7L\xe5\x1c\xb4\xb0G\xc2\x0e~\xca\xec|\x1c\xf5\xab" "\xa0\x8d\xba\nmYm\x63\xf4V\x0c\x16%W\xe9\x04$U\x38\x9d\x38\x87K\x45\xa3W\xd8\xc2\xbe\xd1`\x13\xfe\xe2\x18h\xdb(q\xbb" "\x10\xe5\xd0\xc8\x87\xa1\x80!k\x63Z\x43\x14\x65\x01o\x84\x0b\xea\xe5mT\xcd#\xf8\xbf*{\x08\n\x41\xfe \x30gn\x31m\x15L" "\xa1\xcd\xa2\x14\xda\x90\xa1r\t\x9eW\x9d~\x8c\xc0\x1a\xf5\xc2\x12\xf7\x66~\x8a\xc6\xf4+\xe5K\xb0^GmT\xcc\x87n\xe6LP\xef" "\x34\x46\x85\xb9T\x80Q\x9f\x95\rO-'\x62\x9c\x9a\x19\xd9\x80\xa5\x98\xd6\xa7%\xb4\xb8\xc8\xc2W\xea\x1e\x8f'\xd5\xd8^\x15\xadkS" "\x61\xb3\xa3\xffQ\xb2\xea\x06\xbdKO\x39\xaa\xae\x13\x83:\x66\xa2\x33H\xcc\xfe]\xf0\x96\xc3@\x9a\xaa\x97\x34\xc5l(\x45\x38\x38\n\xd4" "\x19\xba\x9bQ\x88\x36\xa9\x8a\x1c\xae\x42\x0b\x19\"&\x1e\x97\x02\x86\x99\x8c\xbeG\x98\xc1\xc9\x1d*\xaf#\xc6\xf0\x11V\x17X\xe6R\xcc\xbb" "\x8b\xf4\xeb\x16\x17Qh\xc3\xacJno|&\xbd\x12&\xcb\x8a\x32\xd7x\xa1\xae\xa6\xc9M\xd6\xe0\x31\xc2\xdbG\xcd)\x88JZ!\x1c" "\xaf\xc1\x05\x12\x14}\xcd\x46\xbf\xb7\xd1Y\xdfw\x18\xd5\xd6\xe8g\x15\xb3[\xf2\xb3\xc6*\n\xa3\x02\x1cn\x85\xc5\x91\xf3oq\x1d\x0fp" "\x12\xf1\xe5\x9b\xd4\x17\x30IL\x94\xcd\xd7\xf3\xb4O\xbf\x33\xe8\xc9\x9b\x03\x61*L\x85\xc5\x15\xc6\xa3\xa0\x30~\xe9\x01\xa1t\xdb\x02\xab\x95" "\x8a\x39]YH\xc3\x36&)\x8e\nX\xeb\xc0\xe8W\x92\xdc\xe1\xe2\xa5\x05\x1fun\x33\xa6\xdc\n\x84\xce\x1b\x9d\"\xf8\xf3\xe8\x82\xb5\xda" "K\xb4 \x8c\xcc\xb2\x15i\xdc\xee\x9e@S>\x9dS\xd4\xd0\xeeU\x95\xaf\xa5\xaa\xbcU\xe4\xcd\x80V\xb8(\x1b\x46\x1eU\x43\x0b\xc1 " "\xb4X\x00\x42\xdc\x95j\x38\xed\x84\x16\x36U\xcdu\xbc\xdf\xc2P\x94(\x14\x63\xca\xf0\xfb\x00k*\x41-\xd9\xfd)\n\xf5\xe8*\x06&" "\x46U\x04\x84\x13\xae,\xff\xea\xf4\xa0 \x9f\x0f\x9fp*\xe8\x1c\x37\xf2\x61\xaa\xa2\xabxT\x45\xe7\xa1\xd0\xe2m*\x37\xe1\xd3J\xa3y" "X[H\x36X\xcc.\x61k/\xe8\? \xa8\xba*\x1c'n\xef;Y\xd5\x17\xb3\x99\x9a\x16z}T\x45o\xaa\xd0\x62\x95\x08\xb9\x17" "\x61\x1a\\i\xa7&\x19\x85u\x81L\xd9\x62\x42\x93\x8c\xca~V\xf4\xdf\xd5Yu\xe4Z\x07\xa3\x06\xef\xed\x03\xcb:\x65\xd8\x38\x41\x1c}" "Q(\xaa\x1e\xd0.\x1d=`Z\xc4\xe8\x01\x0bv\x8f\x1e\x98\xb1\x1e\xd5\?\x08\xa5\xdb#\xfa\x9d\x84\x97',\xc1\x1f\xc3\xc5\xd4\x89n\xe6" "Q\x13\xdd\x32\xca\x86\x93\x99H\xcd\xe8\xe4'\xb6\x89\x1eP\xc5/\xacW\xad\xaa\x07.\xae\x42\x39\xa4\xc5\x31\x1f\x35\xa5\xf5\xce\x17W\x33\x38" "\xab\x82\xe7\x17\x98\xbe\xae\xa6o\xf2R\xdcL\x8d\xf2\xfc*\x95`\xdeq\xdb\x96\xe6]U\xba\x9c\\\xba\xb7j\xd4\xc0\xf9\xa8\xc3\xa8\xf5\xde" "\x89\x89w\x80p\x02\"\xb1\x94\xe9\x81\x9a\xbb\xd3h\x97\x9c\xe9\xa7\xe6\x38\x64L\xfd,\x44\xf5\x1a\xce\xdd\xa3\xa5\x8a\xc5\x61\x13}\x11\xc6\xf4" "\xd3~.|h\x61^\xa8\xaa\x02h\x93;\x8cZK\x66\x8a\xaa\x9a{\xfd\x9d*\xcc\xbd\xb9\xd2\x10\xda/\xe9\x37\xa5\x15\xa3\x8b{\x36\xbe" "\xcc\x01\x61\x13\xbd.\xff\xfd$z-\xfc\xe7'R{\xb4\xc8\x64\xae\x30\xd6`*\xbc\xbb\tx\xcb\xa1\x64\x1f\xff\xaa\xa8\xbb\xf7\xbf\xf6h" "\x33\xea\x8d\xe9\xe5\xe2}\xd2\x64\xb6T\xee>\x62\x1a\xcc\xc7\xce\xf4\xa3\x39\xef\x93y\xd1\x1b\xa5\xa6\x8c\x81\xc2Q\x13\x13\xec\x85\xe6\xb9!\x44" "\x39\xa4\xdd\x17\xe0\xa8\xe0\xf4\x1d\x62HZ\x39qJ+\x0b~\x0eP\xd5\x0e\x8b;S\xf3[L\xea\x35\x15\xfb*\x94\xaa\x90\x06\xe1\x64\xcd" "\xd7T\x33\x9c\x16%\x37\x46u\xee\n\x05\xa1\x32=\x36J\x41!\xcf\xe1\xbb\xeb\xf4\x1c\x97\x1eL\xd7l.z\xce\xb6l\xbdHM_\x16" "\x0bj{\x90\xbc\x0f\xe5\x45\x9a\xdcq\xaf\xa8\xd4\x36\xe5\xd4\x9d\x1a%\xc0\x46\x1aLi\xeb\x1b\xed\x32U\xd2\x1c\x61\xe5KU\xf2Q\xf5\x87" "\x8b\xafT\x65z\xf0\x35v\x8d\x10]\xc2\xd2\xab\x13\xfd\xd5\x62Vp\x1c\x84\x81\x31\xa2O\\\xcc\xad-\xf7\xb8\x97U!\x33J|\xf3\x04" "\xa2\x82\xd9\x8c;\xdb\x38\x8f\xe2&\x1e\xdd\x83<\x38:\xf8\x95\xf6\xaaj&\x07\x17Z$\xd8\x30\x9d+\xb8\x66\xa8\xe2\xd6\xfc\x99&\xe7-" "r\x31:\xf7\x84\xe9\xab\xb5\xc9Wk\x13\x8b$\x0bQ\xbc\x37\xf9rj\x62\xdc\x65\xf4\xc4\x32\xf0)\xf5\xf6T\xb3\xa7\xa5\xbay\x9c\x8d\x9e" "\x10\x1aPh\xee]#\x7f\x39=\x31\xdb\?\x61\x34\x66\xf4\xc4\xac\xfa\x84\xde(\xe1\x18\x07\x90\x96mP<\xe6\x1dy\x82\xb3\xe9\xe8\x89\xd7" "\xac\x63_\xfa\xe4\xdb\xfaz\xae\xd8|U\x15>V\xd9\x36S\x15}\x31\x34\xa9\xa9$\xd7K\x7f\x37\xb7\x12\xb9\xa5\xab\x13H\x31\xe8@\x99s\xdb\xa8\x85\xd0w\x42T\x08\x38\xa0\x63\x64\xca\xaa\xc9\x9c\xa4&\x93\xc9\xcc" "\x8b\x01:\x34\xa1\xde\x17\xcc\xa2\xaa\xd8hh\xf1\x05\xc5\x30l\x46\xb8\xdc\xc1t'\xb8\x8c\x82\x17\x88m\x80\xaf\x8a\x99Q\xee,\xb4\x15\xa5" "\x44M:\xce\xf0\xfb\x34\xdd\xf1\xf7)\x88\xcaG\x8b\xef\xa6\x96\x9foT\xad\x80\x36\xdegL\?\x1a\xdb\x9dn\xc5\x65\x9c\x98\xb4\xa1\xe4S" "\xc4\xdc\x10\x65\x8b\x7f\nQoh%K\xfbV\x9b\xaf\xdcvpZ\xe7\x39\x88\xf9\xe4\xe4\xfdW\x33\xda\xb4\x11\xd9\xd8\x94\xd4\x62\xa2u\x15" "\xaa\xc8\xef\xa0\xd9!\xac\x81\xe6\x19)\x44\x8b\\\xd8\x03m\x35\x1b\xa1y\x13\n\xdb<\xec\xeb\x91\xf3\xff\x1c,\x83|\x31\xc8\x0f\xe5\xf1\xfb" "w[\x32\xce\xb1\xba\xccm\xd1\xf4\xf9oq\x1f\\\x1c%\xb5w\x04*I\?YW\x83\xfe&\xf3m\x84\xff\x36S\xb6\x86\x0f\xe9\x07\xff" "\x8f}${\xa7\x30\xdf\xb9\xb0\x9f\x98xy(\xf5\x08\xaf{\xac\x46\xb4\x31\xa5\x41X]\xb0\x44\xa7\xc9\xec\xd7\x96\xc6\x07\xeb\xca\xed\xb0\xd6" "g#\xa3\xad\x0b\x9d{\xc4\x10Q\xbc\x01\x08\x16\xaf|r\xea\x1a\xf7\xa8\"\xb4\xf9\xa4\xb6\xd9\x44o\xb3\xbe\xda\x96\x16\x45\xb2@\x92G\xf5" ";\xf0\x19\xb7\x08\x61\xab\x84k\\\x06\xc2\xbb\x8f\xda\x98.&\x44\xa9\xd3\x66)\xd3\xc6\x1aj\xcaU\xd4\xb3\x82\x88S&\x84#{\xae\xdf" "$u\xd9\xf6yg\xa7\xec\xbb\xfc\x81\x63+\x90>\xb4^\x86s\xfe\x08*\x33\xf8\xda\x8e\x18\xca\xcd}\xb4\x84\x16\xbf\xcb\xa8\x95*\xbcw" "T\xe9\xdcr\x8b`mJ\xe3\x9c\xe4^\x32\x8a]\x41\xaa\x92\xea$Ux\xb5}`L\x61\xf4\x11\x8d\x37X\x33j\xa4\xab\x9a\x87\?v" "\x31\xc3\xb0\xfa\x1a\x9e\?\xb3Sr\xcc\x9e\x93\x31\xbb\x80\xc7,\xc2\xc7\xac\x06\x8c\x83\x95=s\x63&\x81\x12.m\x62\x8e\xc6\xce\xe8\xfeX" "\xfeTMY\xc6N\x43[\x64i\xf4\xc3\xc2\xfa\x87\xb9G\xa9\xb1\x45\x1b\xc7\xa9\x92\xca\xe3n\x43|\x61\x8f*\xe7\xd9\x0b\x7f\xce\x9c\xe1\xe6" "\"\x9c[Y\xb5\x66\x63}\xcd\x8e\x07%\x1c\xbf\xcd\x84\xcf\x15L\x94\x0fj\x62.\xe2h\x1d\x96.\xc1{\xfc\x16\xa3g\x42\xf3\xe4\x13\xe2" "J\xd7\xac\\(\x31w\xcd\xcc\xf4\xdb\xe3yrt\x0c\xd3\x06\xbd\x85\xdf\xf8!\x86\x8aG\x8c\x8b&\x34\xaf\x19\xa1M\x81\x35\x32\xd7\xac\xe1" "\x06\x32Z\xc3\xd1\x43X\xc0.\x31\xe0n\x64Yj\x66\xe9\x17~MPR\x1f>y\x97\xf6\xdd\xdfR\xae\xa1\x90\xd4.\xd3\xc5\x95\xf0\xf9" "\xa8\x12\xbfr\xe9\x43lX\xdc\xb8\x19\x9e\x94\xe0$\x04u\xba\x07\x17\x19\xa8j\x1e\xde\xa4\xa6\xa2\xfd\x99_}\xaa\xd2\x81nl+\xa6'" "\x08\xa7%\x33Y\xd7_\xb3\xc2\xa0\x84w\xba'`\xea\x38 \xe6\x16w\x04\xf1\x9d\x95\xd7 \x9e\xd0\x35\xc6\xda\x85U\\\x1c\x66m\x8e\x36" "\xbcS\x1b\x16:\x1b\x16\x98\x1b\xfe~\x83\x46\xd6\x38\xa7q\x32\xa4\xcajn\x32\xa9:\xdc\xb8\x92\x0f\x62\xeb\xe1\x1c\xe7\xd0\xc3i\xcc|\x07" "\xc7\x11\xda+t\x9c\xe3~\xf7\xd1@\x1a\xef\xf3s\x65x\xd7\xc1\xb3.j\x8co\xf1W\x07\x7f\xab\xaeS\x8b\xf3\xdfi\\\x1a#v\xfa" "\xf8\xc0\x42t\x0c\x62) \xec\xf5+\x1b\xac\x95\xa9\x1c\x82\x36\x8b\x46hQ\x38\x85\x1av\xe0\x33\x63\x06V\xbe\xba\xd2\x00\xf2\xd6'\x66\x1b" "\xe4\xbf\x9br@\x39xx\xf0$\x46X_\xa5\x9b/\xean\xc6\xa7_(\xa0\x45\xd9\xa3<>\xe0\xf5\x1d\x44\xd6\xd1.\x94\xdf\xf2+p" "\x62\x1bK{\xe0\x1c\xdcl\xd0\xdd<>Hl\tp\x63\x1a\xd0Q\x94uv\t\xadk{\x9c\xe7\xbe\xf3(O\x8d\x7f\xf3\x87x\xbfh" "\n\x35\xc1\xf1Q\xb4\xf7\xe2\xd4\xf5+\x90H'Xs\x42\xb8\xbc@\x07\xd9\xf8\x44\x1a\x9e(\xd9\xdc\xc4+HT}\x8d\x95\xe3\xc5l\x9f" "\x93\xaf\xf2\x66\x41\xef\xa9\xa8\xc1\xbe\x11k\x37\nq\xfbN\xd2\xd7\x98\x98\xbf{\xa8\x31\x98\x89\xa2\x05\xa6\xf9\xef\x88\xb9\xc0\x17\xd1\x9e\x1c\x9f" "\xc4\xf9\x61\xb8\xbeK\xben\xa0.\xe6\xe0\xd5Q\xd4\xc1\x41\xe3\x61\x03\x83t\xe3\x13LM\x16J}\xf8\xa8\xee\x87L\x1ej\xe0h\x15_" "\xae\x93z\x0ejy\xe7\x0c\x06-\xf4\x17\x8f\x0bh\x31)\xcf\xff\xd6%&R\x01\x9d\xfa\xca\n\xb8\xfb\x88\xb9\xbd\x10\x1c\xb5\x9d\xf1\xc5'" "\x82\xfa\x8a:~\x00\xcf\xef\xa3\xe5\xc3\xdf\x8c[/\xee\x33\x87\x0c.\x9bN\xf3\xc3\x98\x64\x14*_\xa6tmv\xff\x0c\xc9\\@|\x0b" "\xa1\rt\x19\x33g\xc6\x9b\xa0\x0c\x8e:\x08tlJ\xae\x38U\x0f\x17\xe1w\?\xb2\x19\xa2\xa2\x06yP\x9e\xc1\xf6\x39\xefM!\x34\xbf" "=\x65\xcb\xa9\x93\x9a-~\x97\xaa.\xf9Jr\xcf\x16WX\x39s\xf2.\x15\xe4\x66;\xf1\xe6\x34\x13]\xc5\x66\xa6G\x9e]\x06'\xf7" "\x08\x80\xaa\xea\x05\x9c_\x38\xc3\xdf\xcf\x64o\xe6J\x8a,t\x63\x88Z,\x9c\xe9Q\x97\x37\xe1\xa4\x8eH\x83\xaa\x1e\xc1u#{\x88\x35" "\x92;\xca\xfd\xfc-^\xe3z\r\x8a\xa7\x13\x95g\xf2\x07\xf3v\nZ\\\x07\x63\xb8\xb7\x87\x95\xa4U\xad\xc0\x87=g\xb0\xe0J>\xaa" "\x90\x8e\x18\xd6\x30\xfe\xad\x1bp[\x32\x85\xd9\x13\x30g]\x37\xd3\xb3x\x43\x02\xc3\xc9R\xb8\xca\x93\xf6\x84\x14\x30\x86m\x8c\x9e\xa6\xc9q" "\x83j\xee\xd4p\x94\x15\xfc\x06\xa3!\xc2\xab\xaaS\xae\x04\xabp\x88\xda\"\xad\x92\xfd\x03\xf0 \xe7\x94\x12(<\xc3\xb7\x92\xa3\x82\xd3\x93" "\x1a\x01\x85\x8d\x99|\xaejx\x95Q\xe9\x9a\x92\xa6\xe2i\x33,\xe2\xb4\xf8\x18\x17\x30\xa4\xa7\xa4\xae\x1f\x06\xa5\xb6\xdfqQ\xe1\xfe\x18\x81" "hT\xf1;x\xd8\x95\xd9\x63\x8b\xca\x1c\xbb\xcb\xef\x64\x0b\x84\x02\x0b\x04\x65\xe6\xc9\xfb\xb7x\xd0G\xe7n\x80\xae\xc5q\t\x41\xa3\xc7\x97" "\xa8\x96\x8d/\xc3\xdc;h\x95\x18#\xe6%\x9a\x89\xba\x90\x99\xa8\xd5\xc0,\xbf\x61\xae\xa1)\x34\x17\x61\x9a\xb3\xa7\x99XQ`|\x19\x9d" "M\x83\xa3\xa7\xe0\xa8\xe2J\x17\x03\x38zJU\xeb\xc5UR\x7f\x0b\x9f\n|\x8b\xde\xc8\x9f\xb2\x96\xae\x16\xa0\x66N\xa7\xb5Z\xed\xcb\x14" "\xfa\x05\xd4\xbc#{\xe0\\{\x8a\x92\xbbmX,`\xc5\x1a\xd9\x86\x62P\x89nH\x31\x37\x0f\xf2\x36\xe6s\xb4S,\x82k\x7f\xdb\x43" "\x63p\xf0\nJ\xa5k{\x02/\x7fQ\xd2\x38\\\xe5S\x65\xcd@\xe5-X\xda'\xaf\xc8\x19x}\x16X \x38\x31o\xf8\x91\x35\x43" "\x84x\xf3\xd7\xf8\xe6\xaf\xc1\xdb\\\xf8p\xe5\x0c\x1f\x8eh>\x90-\xb4#\xdd\xf4S\x0f\x1e>\xd2\xef<\xf1\x37\xa8\x16\xd4P\x03\x1d\xab" "\x93\x1d\xa6u\x89\xd9\xb9\xc0J:\xba\xfc\xc4p\xc5\xaaHM[\x8c\x92\n\xab\xd3\xf8\xfb\x13\x1b\xder\xac/\xd4\xd0\x9e\x11\xf6\x7f\xc2\xef" "\x06\xcc\xe1\x9d\x33h\xbf\x87\xbe\x93\xe1\x1dV'\x17s\xc4\x34\xb1X-\xcaw\x92i\xf3\xcb\xef\xcd\xf6\x9d\xe9\xf5\xac:\xe0\x06\xf7*\xdc" "o\x06\xc7{\x30m\x1d\x00\xe1\xf9\x63\xfcs\n\x13u\x82\x7f\xa2P\x8a\xe2i\x84\x8d\xaaS\x03]] \r\x30\xa9\xc2\x98\xf5\xa1\xd5\r" "\r\x12\x99\x06]m\xca\th\x33\x08\x85/w\xce\xc0\x82+\x88i\xbd\x9d\x46Ou\xbei\x94\x92\x0b\xfd\xf2\xe4\x35\x12-\xa7\x91\xce\xaf" "\xc4M\x43\xf3P\x39\x06\xbf\xf3\x18\x02\x11\xd3\x16\x07\x32\xa6\?_\xbe;\xe5r\xf8\x9c\xaaJ\x1e\xb9\x1b\xeb\xb1U>\x39\xfdQQs^" "\x8c\x8a\x97\xae<\x07\x8b\x19z\xb0;S\xd1S\x39zG\x9a\x44(\x98\x95I\x1e\xc9\xc1\n\xad\xf2\xdf\xe7.\xbb\x01\x1d+\xd8\x36\xce\xc1" "<\xc7\xe5\x44\x97\x1f\x9e\xb7\xa2\x9b\x36\xd9M\x37\xa1\xb6Y\x43\xbf\xb8\xb0\xc2\xa3\xdd\x1f;\xe5i\xc5\xb0\x99)L\x66\x13\xb3~\xe7\x0c/" "\xde\x30x/\xaa\x81r#\xe2=\x8c\x9ex\x12\xcf<\\\xe7\x16\xfe\x83\x62~ _\x44\x63\xe4\x13\xcc\x04\x1b\xd7\xe2\xfd\x07\xbf#\xf1\xe1" "\x95\x17\x44|\x63\xd5X\xc8\xd6\xe0\xd9.\xac\xe1\t\x8a\xefQ\x08\x61:\x8b\xb0\xb3\x45W\xad\x98S\xe4#\rs\xff{\xc7\xd2\xba\x96\xb2" "\x9cw\x66\xf2\x02\xbaR\x8d\xe1\xb0\x84)\xf6\xa6R\xb3\xce\x9f\xf1\xfc\xe0\x92\xab\xc4\xf3\x04\?\\#\xc6J\xc4\x64\x1e\x81k\xeeX\xd7\xb5" "\x88\xcawI\xc3.\x9b\xc3I\xe3\x66p\x94\x07\x91\x05\x9b\xc1\xcb\x15Y\x01\xdb\xf8>\xcb\x89&k}M\xcc\x11\x1d\x37\x43\x0b\xbf$\x34" "\xc7\x1b\xe1+\xf5x\xeb\xe4\x45\x36\xc3\xe9'\xf8\x8d\x43\x86\?\xaf\xa0\x45\xf1T\xda\t\x37\xd9Hi\x62\xf5\xbcq\x13^\xd4\x46\x9d\xe6\x61" "\xcd\xd2q\x33%\x92\xae\xc9\xcbmi\x9c\x00\xfd_\xa4:\x0f\xef\xe9\xb3\xa1\xea\xd6\x99\xfa\x8e\x9aJ\xee\x37;\xd5\x03Q\xebn!\xae\xa6" "\x91\x17\xa2\x66X\xd8\xec>\xb8 \xdb\xe4X+\xa9\xa8\xe4\xb4\xf8\xa4(\xa5v\xec&\xa2\xf1\xb9\xb9\xdb\xef\"\xb1\x05\x38\xc5\\\xee\xfdY" "lN\x31\xfdg\xdb\x16\x86o\xc6-V\xfb\x85=\xff-\xe2)\x1a\x31\x9c.\xe6\xf1\x91\x33\xfd\xd6\xf1\x13\x46\xde\xc4<\x39\xc2J\x9d\x30" "W{\x34\x87\xa0\xf6\xa7\x96i>\xb2v,\xe6\xd8\x99\xee\xb1T%\xef\xc8\x17\xf0\xf2@\xfe\x63v\x9a\xaa/\xd0\xba\n\x85\x15^\x80\x85" "\x44\x12\xdaR\xb2\xca{\x38r\xab\xf9\x1a\x96\xe7\xe9n\x45\xc9\xff\x61\x89j\xaa~\x1a\xa5\x99+\xf9/\x0f\xef\?*\xfd,\xfd\xa0s\xf2" "\xb7\xe6utx\x1a\xfd\x82\x98i\xaa\xf6\xcf\x9c\x99\xfb\xcf\x8c\xde\nV\x87\xf1!\x0f\xbf\xbe\t\xea\x8f~\xff\x83\xf5\x08\xdcT\x11\xadu" "\xac\xf7I\xcf\x01\xdd\x15\xaaXN\xb5\xa4\x9aNr\xed\x97\xb1\x85\xe9\x92\x84\x32\x87\x13U\xbeu\xe2\xb7\x42\x43\x64\xa3\x31%-\x1f\x9c\x80" "\xd4]=\x9b\x86\xa7\xa7`q\x9b\xfe\xc0\xe6\x91\x18Ymo\xb1\xe1\xdc\x82\x63\xa3\x92_\xadv,\x91\x1aP\x16\x05\xd9\x08\x1f}\x33\xf5" "\x11\xaa\xbc\xc8\x86\xa0\?\r\xfc\xa8\xb2\x99\x97o\xe6\x02\x93\xfd\xa0vY\x37U\xfa\xb4\x95\x06pV\xb4\xcd\x99l\xaaj\x97\xc5L\x8dY" "\x19\xda)\xcfn\xba\xe1&\xe7\x8f\x8f\xaa\xdf>\xfc\xe8\xa1\xd6\xcf\x08\x91g*]\xca\xc1U\x9a\x8e\xa2v\xc7\x8b\xca\xcdx\x7f,'\x87" "\xa8\x0c\xb6M\xf2\x0f\xd6\xc1\x81z=\x8c\x9a\xef\xa9\x1aL\xd3\xe4y\xe8\x38\xa3\x32\xb2\x41\xe8\x01R\xc7\xad\xd0'\xe7\x8b\x89\xe6k\xcb\xd2" "\xfc\tk\n\xabJ\xe9\xd9-=\xafI\xc5\xee\x0c\x8f\xfa;\xd2\xff(\x38[\xe8\x1d\x16.\x1a\x9e.\xd1\x41\x0f\xee\r\x62\x96\x9b\xe4\x1b" "\xf9\rV\xf9\xf9}\?\xf3\x80\x44\x8d\xa2\xe7\x1b\xac\x0b\xac\x0f\xed\"\xdd\xedx\xa3\xed\xa4\xf5{\x46%\xc7\xc7\xae\xe0\x16\xaa\xb9\x97\x61\x61" "\xd4,!\xba\x8a\x98\x9bG\xa7\x1e\xf0\x18\x19UW\xea\xf3\xc9\x05\xa2\x98%\xe4!\x8dz\x45\x9a\xf7\xe4\xcc\x89\xb3v\x15\xbf\xe6\xbcT\x8d" "\x0b\x03\x7fz\x31(`\xc4\xa8\x86\x98\x97k'__-,M%|\x45\xbe\x88\xfb(\xb4\xe3\xc1\xb9_\x33\xe2\xf8)\xd3\xdb\x1c\x0fG" "\xce\xf4[\xdf\xec\x17\x17\xf3\xe7\xc5\xe9\x19\x93]R-[l,}\xd1\xc4\xeb\xa5\xfcg\xfb\xb4\x15\xe3\xbd\xdc\x8a\xb7\xc7\x99\x62Y\xd5\xae" "\x10\x64\xf3\xb6\x85\xc5q\x84\x65\xfc\x46\x03\xe2\xf1\x44\x92j\x1f\xcb\xb2\x8b\xd9\x42\xd6O\x9e\x8f\xd0i,\xe6\xcb\x85\x9f\x13\x42.\x0b\?\xde" "\xfc\xf1J\xd6\xdb\xcc\xe9\x89\xca\xbc\x07\xa1\xc2\x89]\xc8\x0b;\xf9\xda\x08\xca\x32nG\x63+\xaf\xda\x98\xc1\x38\xee\xf0s)M\xa0\x35\xda" "\xe6S\x45\xeaV\xae\xc2\xd3\xcf\x7f\xd4:\xde\x7f\x82\xb2`\x8a\xc6\xa0\xf4\xce\xbb\xd9Ij'\xc9\x61\r^\xbc\xa2l\x18\xd9\x98\xdc\xec\x45" "M\xbb\xf2.\x42\x9f*\x17\xa0\x05\x89\x1cw\xf9v\xec\xf2\x99S\xcaW\xfd\xd3\xf0\xdb\x8e\xd0\x8drV\x94u\xe3\xfd\x33\xd9\x94|\xde@" "!\xcbt\xd9\xe8W\xb2\x66\xf4\xca\xbe\xd4\xd7\xb0u\xe5\xd4\xc1p\xbc\xa0^\xd9\xfb\xf9\x8a\xc8\xa3\xc6\?[r\xc1L\xdf\x07\xc6\x87\x8c\xba" "\xbc\xfd\xd8\x7f\xf3+;\x63\xd5\xd8\xd4\x1bG\x82L%\x39\xbai\x89\x42O\xb4\x12\xae\x0ej\xdaN>\xe0\xd1)\xec\xe7\x30\xc5\xc2\xcc]" "\xf7\xe8\x07[\x63\x1f\xe1\x43\xcf\x99\xf9TK\x98\x19\xcch\xb9\n\xcf\xec\x19\xff`\?\xc4'\x33\x1bW\xe7\x19\x7f\xb2\x90\xed\xb1\x1f\xbd\xcf" "[\xd1\x0f\xa7\xd0I\xce^T#\xfb\xb3M\xa3(\xf7l\x64\x8dz\x62\xb1p\x17\x88p\xa9\xaa\xe1\x8c\x8a\xfd\x8c\x19\\\xae\xa8z Z" "#\x13\xd6['\xc1Y\x15\xf1\xb3R\x0f&\xdb\xa6/\x36\xf3:\x86\xb2\xd0\x12\x30\x9f\x39\x1aj*z\xbd\xd2\xa1\x93\xccO\xcf\xabLX" "\x33\x1f\x9e\xd2/\x9f\xff\xf3\xd3\xf3o\x36\x39\xa4\xf5W _\x9c\xbc\xdb\x13\x0c\xfe\x0b\xd1\x82\x9f\x04Om\xd0\x9c\x1a\x84\xa8[+\xc3;" "u\xec\xca(\xbe\x1d'\x41\xa7\nJ\x1b\x1eu~\x9a\x92+\x02\xf4\xf0\x31\xe4\xb1\x31\x98u\xa3'\x1e\x1d\xad\xf1\t\xfb\x87&\x18 \x12" "\xa2\x06\?\x61\xc5\x66\x12x\x8a\xe2\xd1\x9b`\x02\x8f\x10\xdd\x15\x13\xb6\x8f'\x18\x0e\x14\xa2\x86\?\t-\x42\xb2\xf2\x1b\x44\x11\xa0\xc4\xd2N" "\x7f\x8bJ\xbamT O=\t\xf9\xc0L\x30JlL}\xbeTmt>&j\xf1\x13LJW\xe2\xd6\xc0\xf9@\x38\xad\xf3M\x30" "\x81\x9f\x90\xf0;\xe7\xd4p.\xe3\x33\xbf\xb3\xec\xdd\xd0\t\xd0\xfa\x84\xd5J\xae\xa4\x94\xfb\xdbr\xff\x33\x9e\x0b\x9e\x84\t\x9b\xe8\x13>v" "\x13\xb8\xc5*\xdf\xc1\xd5\xa7\x9bQ\x11\xa9\r\xc7\x1d!^\x8d\x93\xe8\x13\xe7\x85\xf9\xe7\x63\xaf\xf5L\x30]|<\x61\x01:\x91\x82G\xbd" "z\xe6H\xfb\xf8\xfe\x0c\xb4\xa5\xaf\x84\x9d\xad\x93\xdd\?\x34\xd9\xd8S\x15\x7f\x0f\x83%n-[N\x13\xf8\xfc\x18\xd3\x05\xd4\x45\xd9\xc4\x45" "\xe1\x86;\xdf\xe2\xea\xd8\xa2\x9ap\xa0g\x82u\t\x84w\x38)\x0c\xaf\x0b\xcdGS\x88\xb6\xe8\x84\xfe\x33\xb7\x1bWq~\x9e\xaa\xd5\xcd" "\xdf\x82\xbb\x43\x03m\x16\x94\xce\xa3\xfa\t\xdfw\x33\xe6\x90\x19<\x98\x8c\x61\xe1\x0b\xd1\xce\xc5\x34'\x81\xf1\x0c~$\x42\x1b\x17\x16\"O" "r\x39\x1a#\xb3\xb5\x9a\xc9\xb5\x9d\xe8\x9cu\xaa\x39{\x0c\xe7\x98\x8b,\xb4Y\x11\xe3\x39\x66\xb6\x1b\xb3\x66i\x90\x14\xa6\xaet\x34\xc2|" "M\xa0V\xd8#{%\xe6\x88\xb0\x65\xc4P\xa8\x98\x36\xda\xab,:\xd3\x8f\xd0\xd5:gG\xa1R\xf6\x8du\xecM\x45\xc5j\xaal*" "\x92\xf0\x81|\xc4\x35!\xee\x95\x10\xbdUs\xb8\xa1\x08\xdb\xb6\xaf\xc3\xab\x7f\xd4\xccU\xa4\xbd\xd0\xdc\x03\x1e\xc0\x39\xbc\x90\x85\x43\x9e\xd5\xf0" "\x16+\x08\xaaI\x8ex-\xb6\x90\xa7\xd0\xc6\x9f\x95\x95\xe0\x65\x02\x13u\xc3\x39\xa6\xd2\n\xcd\x93\xc4\xa8\xe3\n\x05~Z\x45\x62`\x99=" "\xe5\x06\xb4\x11{\xe5\x00l^\x91[\xb0u@^\x92\xb8\xda\x10\xbd\x13\xf3\xb0=\xf4\xcb\x61\xb1\x34\x0f\xdf\x0f\xc3\xee!\xcc/\x1e\x65p" "\x9e\xb4\xbe\xd9K\x39O\x97\xf6T\x93\x44Sw\x9e\xc6\xceV\x13\xf7\x88\xc5\xd3\x1c\x91z\x94t\xfd\x10\x13]\xeas\x96\x46sx\x11\x08" "\xcd\xf9\xc9\x98,\x96\xecI\x9fs\x00I\xc9\x9e\xc8\x39\x62\xc5\x08\x99\xc1\x10\xd9\x45\xc8\\&\x44`\x1e\x98(\xbf\xe7pNP\xe2L\xa3" "\xfdkr\xe6\x0c\x1a'X\xaf\xda\x14\xbb\x9c\xcc\xccl\xfd\xa2\x89\x96\xdb\x1c+$\x1au\xf9\xec\x32\xb7\xe6/\x9c\x1a\n\xe7\x38U\xe9\x9e" "N\xf9\xb3\x33\xa4\x35G\xf3\xe6\x88\xa3\"\x64z\n\xffVS\xc4)\xe7\x86%\x88\x8a\xfd<\xaa_&\xf9QrT\xa4\xba\x03\xf1\xa0\xcf" "Y\xe7\x9bGO\xc8\x91\x88_\"\xec\x90o<\xb3O\x64\?\xc4\x8dP\"\xf5\xe1\x42$\x1c\xf3\x34\x17L\xac%\xf7\xbb\xa2^_:\xe1" "\xc1\x31\x9e\xc7{U\xf0\x10\x87\x8e\xf3\x1a\x03\x1e\xab\xc1\xa8\xc2\x8e\xb1\xd8\x8c\x10\x1d\x87s\xbf\xedq\x91\xbf\x46\xb5G)\x0f\"\xebS\xf3" "\xf8\xe2\x02\xb1\x33\xc6\x8cR\x61\x8c\x46\xc8\xcai\xd0\x0b\x31\xab\xdc\xfd\x0b\xae/=\xb9\x35R\x0f~q\xe3y\x92\x1f\x90\xb8\x1e\xcc(\x12" "\x32\x0f$\x65~\x8e^\xb3\x39;\x96\xe7\x99\xe7#\xe9\x0cI\xdc\x61\x8eW\xcd\xd9\xe5\x38O\x30R\xa2\xf4s\x86\x37\x9e\x34\x62\xf1\xbe\xb6" "\xe9\x8f\xe8\x62Y\xb2\xcbM\xf8 \xd9*|YQ\xbd:\xff\x96\x17\x7f\xdb\x1e\xd4|\xe4\x0c\xf2SV\xd8M\xf5\xeeR\x65\xf3\xea\x8d:" "$`\x8b\xd5\x8d\x97\x88\?)\xb4\xb8\x93\x42[\x87\x62\xccu\xfe\x8c\xbaT\xe1\x10\xa7\xa9\x35,i^\xdb\x1aO\xaa\xee\xc9W]\x43\xa9" "\xd8\x89\x0e\xa4\x00,%\xe3\x06\x36\xf3\x42X\x8fX\xc2\xc3\xdc\x88\xa5[`\xfa\x92\x63\xa6\x34\xba\xbdyT\xaa\xfa\x01QG[\xb2\x9c\\" "\x86\x87'\xe4\xbd\xfc\xc7\xa4sQ\x85=\xb0\xf1\xc1\xe6\xfa\x92\x43\xddK\x04\xef\x34j\xfb\x39\xf3\x41\x0fi\xc0\x07k\xc9\x92k\xc9\x8a\xf7" "\xd2\xcf\x44\x18V\xa6\xf4\xdeP\x95z\x8e\x8a\x32\xc7m#\xc2\x83\xc0\xe4%\xa7\xb1\x89\xcc\x8c\xf6/\xa2*\xce\xc5\xcfQgxU\xaeX" "\x15[\x46k+\x1f\x97\xd2\xde\xf3/`\tZ#\xe6\xbc\x89\xb9\xb5l\xb5\xc4\x1a\xd5\xe3\x15O\x7f\x85\x88\x62\x46,\xa8m&\xc7\xd2h" "r`z\xc5J\xd7\x9a\x15m\x65py\x1a\x7f\x14R\x35\x1fgT\xb2\xbf\x97U\xd7\x37\xa9\xb2\xd0\xdd\x63u\x1c\xc3\xe4\x90\x31\x83\xec\x8c" "\xd5\x93I\xbb\xfb\x1e-\r\x37l\xf2o\xfe\x16\x63\x39\x07\xf6\xf1nt\xbd\xa1\x9f\xfd\xf8\xc7\xd2{\xc3\xaa\xc4\x86\xe3/\x9b\xa0l\x89\xb5" "\x41\xec\x41\xa1\x39\xf7\x1a\xb5\x1f\xda\xa6\xe2\x42\xcd\x9f\x98\x08\xaa\xd2\xa5pL\xd9\x14\xc3n\xf8\xb2\x17\x36;\x98\x9c\x36\xa6\xf3\x94\x10\xaf\xa6" "\x8d\xfc\xe9jk\xe6\x9d\xed\n\x41\xec]\xf9)\x62N\x90\xd0\?\xdd\x82\x98\xff,_=\x1d\x85\x07s\x96L\x1b\xb6\xd0\x37q\xa7\t\xa2" "\xde\xb8\xe1\x88\xd1\x96\x89\xb2\x95\xf3\x07Q\x96n\xff\x30\xc6\xe7\xfd\xff[\x36H\x94\xbb\x9a\xfe\x16+\xf0\x8e\xb7R\x35\xf0/\xb2i\xb0\x65" "\x0eV\xb2Q\xb6\r'\xcfq\xff\x8d\x37g\x1bN\x0f\xc1\xef\\\xb8\x18\xa4[\xbfs\xd9\xef\xa0\xc9\xad\xd4\xa5\xd8G\x95\xf0\xe4.\x42\xf7" "\xb3m\xdb\x9d\t\x15\xf2\x96)\xb4\xf8\xcd\\\xed\x85\xe5\x8d\xcei\x41+Z\xb7\xe9Z\xa1h\xf4\xa9\x8a\x96%\x04\x87\xc8\xa8\xcc\x9e\xb9\x61" "\xb7\xf3\xf8\xe4#n\x9d\xb1\x10\xda\xb2\x19\xa1\xf4\x1f\xb1\xffN\x19\x1fO\xfeP\xb5\xdf\xd2\xab\x63\xcb\x36\xfe\x96\xce\x13\xdb\xb8\x45>\xf7@" "\xb4\xeb\xb7\xbcYJO^\xcc\xb6\x17V\xdf\xc2\xc2\x1d\xe2\xe8\x88\xba\xfb\xe1\r\xdf\x62\xe9\xae\xc9!\xea\xcf\x93\x43\xf8\xc9\x08\xad\xfb_\x38" "\xe0v\xabWO\x0e\x43\x9b\x8b \xb4\xa9\x34\x42[L\x46\xd8\xbf\x8d\xf7\xb9\x66\xe1\xf4J\xa1\xb9\xbe\n\xad=i\xf4\x9f {N" "\n\x18\x19\x10\x36'R\x85\x88\xf7\xed\xea\x0b\xb8{\x93S\x04o\x9e\x9c\xa2\xf8\x13Z\xc7\x9d\xd0\x02\xaf\x08\xed\x91\x9a\x9c\xa2>m\xd4\xc1" "\x1c\xab\xaeONQ\x17\x11Z\x65\x61r\x06w\x90\xc9Y\x30\xdc:\xe1sk\xa6\xb4L\xa3\x65\xf3_\x15\x1e\x36Q\\M\xce\xe0\xa7=" "\x39\xc3t\xc0\xc9\x19\xba~&\x65^k\x19\xdd\xb6\x93\nJ\x03\xa1MI\x16\xda\x38\x81r\xe1\x94\xab\xe1\x85\xa9\xd2hUO+\xa8\x65" "\x1b\\q_\xfc\x16r\xae.\x97\x38t\xc2\xd9\xc3M\x0c\xfa\xbb\x42\\\x82\x8c\xd2@\x13\xb6\x42P\x66[:/=\xb3-\x1e\xe4\x82\x93" "\xd9\xdf\xa2\xad\xf3\xb1\xecU\x9c\xfd\xd0\x1cr\xd3m\x9b_\xf8\xe6\x9b\xca\x98\xa8\xb9\xc2\xb4\xf5\xe1\xcd\x94\xf6\xb9\xbc%\xe2\xfd\x31\x9c\x41|" "\x9b\xce\xff\xb5*\x8ao\xc8\xec\x08J\x9d\x39\x9as\x84\x98\xf8wsx{\x19o\?\xe0\xc1\xea+I*u\x44\x1e\xbe\x14\xa2\xac>$" "<^H\x35\x07\x95>Q'\x35\xf2=\xfe\xae\xfb\x8d\xc1\xdb\xc6\xc8\x35u\xfb\xedt\x83\xbd\xcb`Z\x08!\x98\x1e \xdbT\xda\xe5\x66" "*~\xdd\x87\x43\x1a\xd4\xfa\x8d\x0fv\x05\x83#\xc6\xb0\xca\x19\x39\xaa\x1e\xc9\x16X\xbcN\x93\xc2\xa6\xa4\x1bQ!\x11\xf3\xfc\x02\xf1@\xc4" "\xf4\xd3)\xfd\x82\x97\xcc\x32\x97W\xa8\xfb\x8ai\x41\x61\x85\x35^~}\xfd\x37\xdb\x0b\xf2\x9f:\x11R\xfe\xcf\xa7\xe9$\x06~x\xa0q" "n\xff\xdd\xe6\x89$\x15I\?\x92\x98\xe5\x81\xad\x42I\xd7\x14lk\xbf\xfe\xfbS\x44\xe7\x31\x33|~\x45K\xd6T\xba\xa4\x66\x46\xa5\x0e" "\xe0\xd8\x96Y\xbd\xf4\xdf\x9d&\x95m\xf8r\x9e\xaa\xccg\x9e\xbfZ\x65x\xfb\x88\xd9\xbeu\x86\xb7k\x44\xb7\x11\xd5\xe3\x89x\x9a\xf6\xba" "\xc1\xf9=\xa2]@\x65\xcc\xfe\x8f\x9bp:\x17\xb3\x7f\xe7\xc4\xa0\xa0\x9a\xf7NI.\x0c\x31\x9a\xd2\x14\xde\x1c\xba\x8a\x96\xaf\x61\x61\x9b&" "h\xff>\x9e\xbe\xb2\xe0\x14\xf5@\xf2\x80\xc3\x43\xbc\xe8\xd4,\x07\xe7:.\x0e\x35zt\x06\x8d\x9e.&\x61\xf1\xa0\x65\x83\xef\xc9\xe2\xad" ")y\xf1\x0b\x66\xbf\x05/w\xd1s\xa6K\x0e\x43m\xde\xe3>\xcf\xcd\xef\xdc\xaa\x14\x17\xc6\xf2L\xa1\xc6#\x1b\x36\x45\xa7\x17w\x62j" ">\x7f\xc9\xa5\xca\xd3\xd5\xcc\xf4\x82\x36\x45]\xa6\xc4\x9f\x81M\x11q@\x61J\x05\xef\xa1\x99\xf9,]\x8d\xdbT\xd2\xda`\x81yi\xba" "\xf0\xf1\x16\"|\x8f\x99X\xc8\x0b\xe6\xd7\x17\xcc\x32\x12O\x03\xd7\xb4\xf1\xa4\x86,\x04\xc2:\x9e<\x84\x13PVI\x84\xf2\xac\xc0\xa5\\\xd4\xfd\x91\xe7\n\x9d\xb2_j\xeb\xa9\xb7\xca\xdc\x80\x9c\x94\xe8\x9c\x0eK\xc0\xaaT" "\xb7\xe0\t\x31\x61\xc8\x04!j\x90U\xd6J\xea\x7f\xcb\x17\x16@u\xb4\xc7\x8c\xe8:\x13\xf3x-\xd5\xa4\xf0\xf1\x12\xea\n\xbf\x41\xa4\x9b" "\x89M\x8e\x37\xb7=\x33\x11\xdfQL\xdc\xd0:\x86\xc6\x84\xb7\x03}\xfc\xda\x9f\xbb\x44\x97\x17Z'\xde\x9b\x84\xf5Uv\x9b-\xac\xcd\xe7" "\xa1.\x7fN\r\x61\x66.\x43\xa6$\x7f\xc5\xc3\x13(\x8bK`\x0cO.\x31/uRGX(\x61IW\x7f\x85\xc7\xa7)\x8b\r\xb0" "\xdb`\xbe\xff\xc2g~\xbd\xf3\xe8\x64\xb1V\x8f^\x91\x30\x08H \xdc\\\x38\x33\xe7-\xcd\xc5\xe8\xf0'\xf3\x33\xb8v\x0b\xcd\xcb]\xe8" "\xdb\x07K\x10\x8fz\x1d]O\xc2\xd4Yp\xb7\xd3\xe4\xe1\x31\xab\x9aH\xf8\xe4\xd9\x9e\xbe\x07\x16\x12O\xf2\xa7li\xc4\x31T\xc2[," "\x66[\xac\xa4\xb4\x82\xcbW\xd0\xe6\xe9\n\xbb\x8f \xdej-\xf8\x33M\xe8\x9c\x33Q\x8f\x19\x8c\xc0\x88\x89\x37\x30'\xc3\nm\x42\xa2\xd0" "\xa2\xaa\x1b\x31G\x04\xa6\xaf\xf7\x64*]\xf1\x08\xca\x63\xa8\x9b\x42O(L\x8f>\r\xe5-\x43U\x1c\xba\x10\xd3\x02\xb3\x1b\xa5\x15\x99t" "\xe9\x90h\x1b\xe0\xc2\xed&\x9b/\xaa\x32\xdf\x89\x16\xbc\x32\x9b\xe2 \x9c\xbd\x63\xb4\x44Lk\xde\x0bW\xef\xe0\x06\x87\xf2\x33\x44 \xf8\t" "=\x42\x8c\xac\xd4\xb4\xa2\xf5;\x1f<\xfa\x61\x08m\x8c\x45x\x86_\xb3U\xd5\x42\xe7\x9f\xf0\xee*.\x1d\xc3\x9c\xe2\xae`\xa8\x41h\x13" "\x31\x85]+\xa4\x9f\xe5\xc6\xcb\xf3\xf1_\xff%\x0f\xb9\x34\xc1\x35\x02\x90T\x0e\xf0.}\x96\x37\xbb\x34\x03\x30\xc5j\xf2\xcc\x87V\x19\x8d" "W\x91\xcd\xeaV\x35\x64\xcd-\xdf\xd3%\x90\xe7\xd3X'\xf8\x17\xd2\x0fQ\xa9P\x93\x35V\x33Q\x45\x34\x13\xc5\xd1\x33\xaa\xec\x98\x92\x65" "\n\xcb\x62\xc3\xb4\x31o\x35\xe7\xac\\\x9b\xf9\xe0'\xc6YW\x62\x1e\xafY\xc6<\xebj\x31\xc3\x95V\xf2\x17\xf7\xd8`K\xb2\x18\xd3\x45" "\\L\xa1\xff\xcfL=w\xbcO\x9e\x83\xd2\xa9\x93i\xf7\x1c\xdct\xb0X\xad\x98\x8fH\"\x8c\x1f\x0b[\x8f\xc1\xd1\x17LT\xd2\x94r" "\x02\xe9\xd1_>\xd1\xcf\xe7\x66:\xc2\xed\x1b\xe4\xd9\x8f-\xe4\x8al\x90\x86\x81\x14\xba\xd2\x88\xb2\xee\x16lX^\x04\x97\x87P\xbd\x17\x10" "\x8d~\xe1\xca\x89Nv\x31\xadj\x96\x9a\xed\xfb\x8c\xc9\x66\xa3\xa9\xd9\x01\x9c\x8b\xa1\xe6\xe3\x8c\x99v\xc3\xc8\x86\t\xd3tv\x16\x8d&\xe9" "%\xcd\xba\xce\xc8\xa6X\x8aiN\x32\xcaI\xf8\xfd\x81\xa9\x17\xa2VU\x9d\xdd\x86\xc2\xe8\x39X\?;\xe1j\xa0\xe6\x08\xdc\xfc:\xa3\x32" "\xae\x1cS(\x8c\x99\x14\xd3N\x92\x7f\x12(<\xbd\x03\x8b[\xb8\xba\x8b\xc9\x8c\xc0\xf7\xb1\xd2\x33\xa3\x66\xb4\xdd\xadIUp}\x96,\xaf" "\xf4V\xdet\xd4g|\x31\t\xf2#\x9dU\x80\xf6\xe0\xee\x8b\x9e\x1fu\x43\xda\\T\x85\xe8\x84\x30k\xfdtj\xf9\xbf\x1b\xb4\xef\n%" "\x8dm\x9eo\x32\x66&\xd1\x65\x43t\xf6\xe9\x66\xcc\xec\xa8\xe6\xee\xe8\x1a\x84\x39\xbd\x8a\x39+Z\xcf\x61\x35\xe7L\xfd\xde\x45\xd9\x02\x97\xc2" "\x87&\xd9\xe1\xdb\xfb\x39|\xe9\xc7\x17\x37\x34GX\x89GL\xf3\"\x10\x8e\x9a\x88\xed \xa6'\xf7\xb4\x1e\xfe\xe4\xd3\x8b\x33\x07\x1b#\xeb" "\xe7\x66\xf2>\x8b\x89\x31\x62\x33\xb1\x32\xa7\x98\?ug:!\xd9T\xf4\xf2\x8b\x95\xe5\xa0v%\r_\x45\xcf\xe1\xa6\xe1\x0c^\xfa\xc9]" "\xd9\x95\xd4\xe7\x10\xde\x0ej\xf7({\x16\xd7\xd2M\x0b\x9c}W\x08,\x37\xa1\x83\xa2\x11.\x1f\x66\xfaY#\x42\x82p|\xfd\xb7\x38\xd3" "\x65\\Y`\x44\x0b'\xf7\xbf\xae:\xa3\xfb\x43\xcf\xef\xf2\x0eg\x0bGM\xad\xa0\xec\xb2\x9en\x18\x94u\xb2\x13\x9f[,\x89+<{" "\xf3\xe2\r\xe6\xdf\xea>\xee\xf7\x33\x1b\xb4Yz\x85<\x11\xf3I\x87\xc7\xbb\xef\xdb\xb3\t<\xe5\x94\x63\xb9\xb8x\xc0\xef\x0eqv\xf1\xef" " \x93\x8a\xc9\x1e\xf2\x06{\x06\x9e\x11N\\\x88:\x9c\x12\xdd\xbejzM\xd7\xcc/\xecV\xaa\x8dl\xf6='\x8d\x0br\xe6\x0c:\?" "|\x65={\x99\xca\n\xc7s\x32\xb3\xdd\xbeh\xe8\xc7.\x63\x36\x9aJ{\xb9U\x9d\xebZ\x42\x36\xdd\x63\xf2\x02\x1fS!\x35\x46K'" "/\xac\xcb\xbf\xe8R\xc0\xe7\?\xf1\xd1\"U\x8f\x95\xf0\xe4$U\xed\x0b\xb8\xd7@\xfd\x34\x03[\xeb\xdaT\xf4\xb6N\x9e[P\x83\x02h" "~\xceJ;\xef\x0e\x9c\x9f\x8c\xc9\xfd\x65p\xb2\xa0\x9a\x81(h:X\x07\xc7Wp\x11\x96\xdaN\x0b\xf5{\xebJk\x61\xd6\x9d<\xe9" "`\xae\x92\xd0\x9c}\x84\x8f\x38\x62\xd0\xbar\x86\x8d\xb7\xa4^\xa1\xba\x03\xdb\xf7\x7f\xeb:_O\x1d\xd6\xb9\x84\xef`\xff\x04\x34\xc7\x02\xe1" "\x98\xdbm\x00[\x39\x05\x91\"\x1d\xd6\xaf:X\x65Jh\xc1k&\xf4)\x34\x62\x18\xdc\xcc\x64\xaf\xc0\x36_\x07\x03\x1f\xc2q\xcd\xf9\xb7" "\x1d\xb1\xca\xd8\x41(\x18\xe1\xe4\x11\x44\x37\x32W\xb5\x11\xfe\xec\xc7R\xdb\x39\xc2\xa5\x85\xbfH\x1e\x0c\xd3\x0b\xd7Hr\xb6\xf1\x94~\x1d\xda" "\xf2{\xbau\x13\xd3=\xc4\xdc\xef\x39\x63[\xd9^\xcc|\xdb\x89\xa1,\x31\x35\xfaZ\x87Ok':\xfb\xd0\xb9\x31\x36\x44,\xea\xa6\xeb" "\xd7\x89\xf1\x38\x61\xfd\x08\x0e\x43\x30\xd1\x96\xed\xb0\n\xa9\xf4\x8b\xf2\x13\x82;\x91\x10M\x30%;O;q\x9e<\x99\x87\xb3\x16\x0b\xd7\x0e" "k\xf3\x9d\xb8\xf4\x1e_\xbe\x65LuH\xe2\r\xe0\x86\xed\x31\x06\x66\x64\x03\xafY\xe8\x89\"\x66:\x86,\xeag\x12\xfc\xbey\xc6\x84\x17" "\xab\xf0\x18\x99*\xb9\xc1\x31\xf9Xv\xa4\x9a\x88P\x1f\x62\x8e\x90N\xc9\xc4\x9e\xab\xb7\?\xb4\x85\xde\xe0\xd3i\x64\x37\x9e\x99\xab\x92\xbc\x04" "\xf9\x9e~\x0b\x8e\xce\x9c<\xb2\x9a\x41\xe5\x08\x43\xa7\xa6\x10\x18I\xcc\x63~\xc1\x06p\x84\xc8\xefo\xec\xc3z\x0b\x86\x87N\x36\x06\xcc\xf4" "\x43\x0f\x0f\xb1X\x89\x99,\x03\xd4\xc4Jhn\xb2\xb7\xfe-\xb4y\x03\xc6\xbf\x45\x31i\xcd]\xc1\xf3\x1a&\xba}h\x46\xab\x45R\xfb" "U_\xe0\xd3\x37\x0c\xb6\xe2\x13\x9b\x46\x61\x66\xd4(\xa6\xa6\r\t\x89y\xcb/\xdaZ,\x42s\xe7W\xf2W\x43\x9e\x8e\x8d\xfaM\xde\xa2" "[\x9cVT\xb7\xa2\xfe\x8d\x15\xfe\x37\x66\x89\xb7\xd8\"\xda\x18\xfd\x12\x11NW\x88>\x02\xa9\xc2\"\x99\xf4L\x99\xfa\x89\xf9y+\xcf\x9d" "\x41\xff\x31\xac\x9c\xb8\xd2\x9c\x82\x9e\xd9\xb7\xa4\x8c\x33g\xb9\xac\xd4\xfa\xfd\xaa\xe4J\x83x\x0e\xce]\xb1\xb7\x41\xcd\xe8\xab\xcb&\xcb\x07\x9f" "\xf7\x8f\x7f\n\xf3\x0f\xe6\x00%\x1f\x80\x0f\xb6)>\x34H[:\x36\xf3\x91\r\xcd(\xca\"\x65L>\x98VJ)\xad\xe5\x0f\xca\x9d\x7f" "&\xf4\xcf\x35\xa6\xc1\x17\x45\xa1\xb6\xfb\x01O\x9e\xc9\x07\xfcv\x85x\xab\x7fp\xb4G\x19\x1e\xe6\"\xdc\xa0\x0f\xd6\xa3\?\x38\xb4\xf2\x01\xdf" "\x91\xc9\x07\xaf\xe5\x93/\x9b\x01\x1c\x9a'\x03\xb8.O\x86p\x9a\x9dx\xb3g\x88\x35\x06\x84\xa7O\x1c\x10\x19\x06\xc5k\xf0\xfc\x94\xbc " "\xa5>\xbc\xe0[{\xc8\xd7\xec\x10\xd1\xbe\x85\xa8\x64\x0ew\x1d\xdfj\xa6\xdf\x46]\x41\xa9\x93L\xf3\x45\xde\x89\x61\xf0\xfa\x85p\x0f\x62Z" "\xa0>\x65\xc1\x89@_\x66\xa6\xc7\xeb\xef\x96\x39\x10\x85Q\xc1!\xa3\xf4\xf9/U\xb5\xdc\x0c\xf2\?\x89\x05\x83\x85\xd2\x00\x11\xd5\x9dZ\xa4" "\xe6\x45\x31\x38\xff\xce(\xb8\xc6\x43\x95\x06\x81\xcd(\x33\x15>\xe7\x10\xeb\xcbT\\\x94\xb7gz\\\xa9& \x34\xa7(\x8c\xf0\r\x99\x37" "\x87\xda\x42\x98\x1d\xb0\t\x31\x94\x37\xbd\x9f|X\x9c\x80x\x18\x87~~\x61\xad\xed\x64\x9b\x8d&\xc7L\\\x8d\xf9\xf3\x87\x8e\x33\xb8\xec\"" "\xb0\xb2\xab\xf0\x11i+\xd4)\xd8\x97\xb8\x1b\xd2x\xfe\?\x07\xcb\xbf\xd5y\x80Z\x9dnHO\xaa\xd7uzZ\x32O)\x83\xf6!\xc2" "\xea\x43\x8d\xf2\x19\xa5N\x03\x45\x9c\x8a\xb6\xaa\x30\x1e%wm\xf3+\xb5r\xdc}V\xcc\x86\xec\xde\x1c\x46WM\xa7\xb6\xed\xd0m\xa6\n" "\xce~\x62\x8e&~\x62\x30\xffV\xa7ZS}=\x8a\xce\xeaq\xed\x42\n\x99\xb0\xbc\x89\x96\x87\xd1\xf2\x38\xf3-|\xf8\x9f\x9b\xa5\xe1\xc4" "\xdb\x90\xdd\x80@\xae\xbe\xcd\xb3.+\xcd\x43\xf4\xe6\xc2\x15\x45\x94y\x13N\x18\xae\xcb\xa8\xcd\xbf\x43<:\xfe[\xa9\x8b\x07\x15\xdc\x44\xc4" "\xcc\x13n\?\xa2#\x8d\xb6\xb9\r\x86r\xe1\xdc\xb8\x83>\x06\x46\xad.J%V\x1c-\x8b\xe3" "\x0e\x8f}li\x64\x41\xc4\xc1\x17\r\xde\xf1\xa0zS\xb5\x17\x1b\x1am\xf0\xa3m\xddQi:t\x91\xf6Y\x11\xb1\xc0j\xb4G\x07\x12" "!l\x07\xa3\x12\x0b\xc8\xa8,\xa3\xb7\x62\xef\xd8\xc4\x99\xee$\x0e\x0f\x1f\xd1\xe0G\xa3\x9c\x91\xf3\x07\x90^\x8d\x42L\x8a\x83:\x95\x08\x17" "Xh\x9cU\x80\x18v\x43\x17\r#=!\xdc\x13\x95\x43\xb2~\xc9\xafH\xc4\x66\x9f~w*\xce\x9c\xd9\xf6$\x85\x8b\xa4h\x8f\x33\xe7" "\x1a\x9b\xcd\x8a\xf8j\x97i\x8f\x9c\xe9\xe5\x0f;\xdf\xa2\xbdY\x9a\xdf\x9b\xe4\xc7\xae\xfc\xa3\xe8\xa7Hk+\xc5L\xf7\xc6\xec\x85\x03.\xc6" "v\xae\x65\x85z\x98K\xcf\xc0o\x89z\x61T\x66\xed%\x84\xe5K\x88\x46V\x88\x39L!Z\x18\xe1\x0bs\"\x83\x0b\xab\xf0\xfd\xcc\xc9" "\xb5\x81\"\xba\x9b\xb8\x88\xbdo\x12\x8d\x92\x10~\xdd\xc2!\xd3\xc2\xc9 P\x03\xd3\xf6J\x1bZ\xf1\xbe\x13\xb4\x65\x9d\x1d}hR;\xb0" "\x82\x80\xa6%\t\x61\x92T\xe3;\x63\x07R\xf9\xe6\x34\x1f\xb1\xf9\x96:\xaa\x9d\xf0\x05\x30\\\x91\x10\x93\x35\xc2\xf9\x0e[\x94Q\x99\xfbz" "*\xfbN\x8em\x45\xdc\xe5;\xa3\xa9Tx\x36\x32\x8e\xf3\xb3\t\xc5\xcb\x88\xac\xdd\xd0\xdc\xa7\x62\xc2vH\xc4\xdb\x05\xed\xfb\"\x36n\x8c" "\x31\xf9\xb4\xed\xc5\x88\x93L\x42L\xad\x08G\xdf\x45\xf9\x34\x88\x15K\x8c%]m\xce\x18Z\xa8h\x7f\x98\xbc\x32\xca\x85\x88\xf3*\xe8\x9f" "\x08}\xc5@\xfd\xbf\xcf\xb3\x8a\xc3\xbe\x91\xef\xa8\x38.\x1b\xe5v\x0b\x8a\x96\x02\xb6\x14\x42{\x0e\xee\x17\x08r\x34.\xe2\xc5\x0fW\x18\x88" "x\xc9\x1c\xb3j\xa0\xcc\x06t\xe3\xc6\xa3\x17\xe3;\xb9\xe0k\x63\xa4:\x61\xe9\x64\xa3\x08\xc9H\x97m\x80\x88\x17G\xc6\x17\xa3\x1d\xbf\xdc" "v\xe6]\xfb\xabK\xbe\x9a\xf5\x15\xb3\x97u\xae\xf0\xed\xd6\x1f\x82^\xfb\xa0\xbd\x84\x0bN\x8d\t\xe1\xad\x37\xba`\x33(\x44\x1b!\x84\xeb" "\x81\x90\x9f\xd8\x45v\xf4M\xa2\x81\x03\xad\xea\xbd\x80\xff\xeb\xcc\x45{\xc4\x0b\x19\x89\x18\xe7$\xcb\xf5\x05\xc7\x91\xa3\x0b]\xb5\x02\x17\xd1\xd1" "\x45\xb1\x37 \x99\xf7\x17\\N\x39\xbaXo\x9d\x92\xdb\xf8P\xeb\xbf\x31\x32\xa5\xce\xb8\x65\xa0n~\x82\xe5\xf9\xa2\xb1\x9d\xa8\xa7\x88K-" "\x64\x0b!<\xce\x1a#z'\xaa\xf6\x95\x9eM)\x1e\x7f;uY%\x9cj\x44\xc3\xe2\x1c\x61\x35!\x11\xc2\x07\xb4\xda[\xc5p\xf1\xd3" "s\xcb\x11\x13\xedSP-\xbf\x0b\xe7XQ\xa7\xb8t\x91\xde\xff\x10\xad\x35\xa8\xa7\x0f/\xe9\xc9\xca\x9a h\xbd\x84\xc3@h\xba\xfb\xcd" "\xcd\x8bk\xf9\xe8%h-K\x04\xa2\xf0\x08W\xbbY\xe5\x85\x1d\x00j\x93Vq{\xee\x9a\xfa\xf8^\xf7]SG \x38\x14\xbb\x66\x35" "\x92iV\xa0\xeat\x45\x06\xb5\x11\x9f\xfe\x04\xcd\xf2\x45\x44n\xef\x41\xb1}\xc4\x1dz\xa0\xb1\xcbIq\x12\xfe\x92\xdb\xd0\x42\xe4\xba\x31\x11" "\xab\xcc\xaa\xec\xf2\xcd\xc9n\xaa\x88p*\x04\xd3\x19\xd3k\xb5m\xfd\xafG\xa0\xa2\xe7\x31w\x94\x16\x8e\xed\xda\x93\x43g\x38[\xc4\xdb\x8f" "\xec\xfe,h,\xca\"\xb6\x9c\x7f\xe7\xb6\xac\xcc\xab\xc8M\xd0)\xfe\xfd\r\xd7\x1aQ\xc4\xda\"\x88\xdc\xe5\x18\x62x\x98I+<\xb2g" "Hl\?\xcd\x07\xe4\x62\x8f\xc4L,\x18\xfe\x64\xd5sz\x1erK\x35\xe1>\x13\x9e\x1f\x30\xa9\x0c\x1d\xaa\xfc\xf4\x14\xe5g\x07\x1c\xc5\x88" "x\x39\xf1\x0f\x86\xfdg\x61s\xce\x38\xc1\x14-q\xb4\xb5\x81\xfe\xb8*\xdak\x15\xd1\x33=\x7fy\x34\xf2)\xf2\xd6\xdci\x9d\x10\x15\x43" "\xaa\x07,;y\xb2K\x62\x19\xc0\xa8.\xd9\xa4\x8b*V}\xd3\x86\xd9v\x87\x86,j\xe5\xc1\x9f\xc6\x0f\x95K\xc3\x85\xbb\xbc\x12W\xb5" "\x8dlG\n\xe5\xc0\x18;\xbd\xb4j\xdc\x06K\x0f\x45\xe4\xc6\xc6\x81\x1b\x17=\xff\xad\x66\xads\xe4\x04\x32\x1a\t\x45\x8c\x19(\x46\xed " "Z\x99\x15\xd1\xba$\x10\x8f\xb6\x82X\x0f\xe7z\x16\xabx\x1f\xce\ri\x12\xd1j\x14\x11\x43\x9a&\x43\xa7\xe7\xb9uK\xebV)+\xbd" "|s/\xaaQ\x9d\x1b\xaf\n\xd9\xc2\xd4\xd7\r\xbe\x00\xff\xeau\xddQ\x9b\x65z\x9d\x9c\xdbY\x8d\xdf\xf9[q\xf2\x41q\xf1I\xe3\x01" "\x44\x8e\xeb\x65\x94\xbf/M\xe8\x0f\rI\xd4\xa4\x0f\x8d\x11\xb7h\x98 \x17\x9e\xf6\xe4\x1f\x45\xf6\x1c\x95\xf4\x94\x16\x11\xc6 !\xc6\x0e`" "\x98\x61\x12->\xa1\x39@\x44\xbblvT%\xef\x8f\xf2\xc7\xc9\x86(\xc3^\xdaK\xc2\x81\xe9\xb5\xf5\x9a\x1b\x34y\t\x61\xca\x15\xc2X" "\rZg\xaa\x41\xeb\x8a\x90}\xae\x86n\xa7\xfd\\\xdb\x10\xf3\xadsk&\x1brqO\?\x45n\xaa<\x32\x8f\x9a\x91\xb9\xcd\x8c\x1a\xeb" "\x1a\xe2\xc8\xd8-l\xcc\xa3\x0c\xa6-h\x61\xbf\rh\xf9,.\x46\x63jw\x07$\xe2\x41\x80\xf6g\x0f\x9c\xf7\x01\x8b\x9d^>\x41\x86" "=X\xc3\xf4\xc0%\xf0\x42\xd8\xb0\x85\x18\xe7\x82\xea\xf3\xcc\xe6\xff\xc1\xda\x93\x07\xbb\xf9\x03\xdd\xf1\x85\xbdG\xa7\xda\\\xb1\xab\x1a\x34\xdd\xaa" "\x10\xfb,Q\x83]Z\x44\xecQ\xaf\xecp\xb4.\"|l\x84\x0b|\xb6\x0f\x19v\xd2\x12\xf2\x93P\xea^\xd1\xbb\x8d\xffj\x8c\x36#" "\x07n/\xc9\x11\xf2\xf3\x41\x7f\xfa\xbbu\xfe\x39\x32\xf2\x62\xf9\x17\x93\x9b\x63\x1b\xa6\xd1\x83T)\xd2\xf7\xb6.\xf0\x03\x03\x45\x80y\xbd\x94" "'\xbc\x32\xcd\x34\xa3\x07.h\x16\x1e\x8d\x9c:'\x86)\xb0\x91\x85\xb6\x18\xb5\xad,\xb7\xad\x44\xb4\x39\xf2\x1d\xe9t\x95\x94\x89\xf5\xe3\x1b" "\x35L\xe8\x8e\xda\\\r/\xc4\xceI\xc2\xa1\x11\xeb\xd0\xc1\xdf\xe9\x19\xa7\x36\xa1it\x1a\x0e\xc4\xdaV\xfc\xda\x9c\xca\x16\xb2\x62n\x17o" "\xbc\x66\x31\x42\x8a\xde-\x65\x1fVl\xbf\xb8~\x19\xe4\x46\xb1\".\x90H\x0b\x30!\xac\xdc\xa5X\x33.\"\x16\x8a\x0b\x31M'\x64\?" "\xf0\xcbJ\xf5W\xb0\x98\x8a\x08\x97\x0b\x61\xcc\x1b\xa4\xb3[\xae\xfe\x1f}\xd1%\x42\xf8\xca\x9fhJ\x1c\x99\x81\x1c\xe4\x92)\x8aI-\xc3" ">\xa1\xd0\xf2\x13y\xa3\x0b\xd7\xe8/&\xa2\xef\xc0\xa3\x62\xa0'\x85K\xfd\x85\xc3\x46\x38\x34\\\x38\xad\xe8}Y\x99\x31+\xbcp\xd2\x30" "\xde\x93\xec\x13\x7f\xf9\xf9t\xa2\x13\xb2\x88*\xf3R\xd5:\x84_\xf9\xc1-\x89u\x03\xe0zq\x66\x9f\xd3\x97np\x8f\x1d>U\xecq" "I\x34\x44\x46{\x1a}\x31\x36\x9c/]\x11\xee.\xb2\xb2m\xe6%Z\x89\x17]_\xf0\xc1\xe8\t)\x44\x44\x37\xd0\x06t]\xee\xb9\x03" "\xda\xb3w\xadP\x0e\x32\xcc\x18\n\x61Z\x19\xfd\xfc\xc2\x1b`\xf4\x63\x9f\xe5\xcf\xfav\xdf\x99\xf6\xe6\x9c\xc5\xa0\x36\x9f\xea\xfe\xda\xe1X\x62" "\xc3\x05[\xab\tZ\x07Y\x45\xda\x9dU\xac\xfc\xe7\x87\x8a\xfc\xbf\xb9\xaf\xe4\xc8\x02\x16)g$\x8cL`\xf6\xba\xc5\xb9#\xd5\x1a\xe4\x12" "\x9fq\x92\xee\x9e\x92{\xa6\x1f\x1e\x18\xfb\xce\xdf\xe9}Z\xd9\x96\xff\xfd\x00]h\x45<\x62\xda\xacJR\xaa\x07\?\x66\xeaT\xfbpZ" "\xb5i\"\xa7\x99\xa9\xcd\x66\x34\xbe\x43\xd3\x95\x32\xac\x14\x13\xbai\x05\xb1r\x9c.\xc3U\xd5\x30\xc2\x96\x1d\x1a\xbf\xa2$\xb8rQ<\\" "m\x88\xe9\xa0\x1c\xb4\xa3\xa1u\xb6\xa1\xd5\xdb\x41l\xfcp\x95=\xb5\xe7\x13k\xa5U\x0b\xa1\xa8\xa0Y\x81\x11q\x18\x9e\x91\x16\x1e\x65\xf0" "\x63\xa5\xc6\xfe\xad\x8a\x9c$\x16\xf1\xd4{\x62\x89\x35\x14\t\xd7\n\x80\x7f\x16\x1c\xdd\x96\xda\nw\x42\xafJ\x10\xa1\xf2\x8eM\xeb\xe7\xd8\xd3" "M\xc4G{\xa6\xe7\x07g:\?\xd5\xd1\x94\xef\x65\xed\xc7\xd6\xaf\x0f\x1b\x07\x18\xf7\x14\"\xf7\x61\x14\xb1}n\xac\x93\x9d@\x19\xc0Y\x8f" "\x16\x9a\xef\xaa%Z\xd7\n\x07\xad\x45\x89\x99\x05\x13\xb3\xb1$\xfe\x66\x84\x9e#\"\xea\xa2J\xb8\x1a@\xe3|\xbd\x88G\xcc\x14\xe9W\x30" "\x84\x8e\x88X\x07'\x64\x35\xa5L;\x37\x8c&@->\xcb,\x61\xa2\x15\xa3h\xe3\xb7\x62\xbc\xe7\xc9\xf4\x8f\xc9\xfa}\x89\xd9\x9el\xa5" "\xee\xc8V\xea\n\x39\xf4I\xe8\x1c\xac\x9c\x93#~j\xd6\xca)\xad\xf2\x16q\xac\xffW\xf9\xd5\xe4G\x87\xce\x8d<\xa3\xf5Yx\xc2\xd7" "\x1f\xce\xbe\xe4\x13\xe7\xb5G.\xf3W\x91/\x9c\x01\xaf\x84\xf7,\xf0R\x88\xcc\xba\x94X\xb7G\xf9\x9b\xdc\x9a\x05%\xc9\xdfX\x94\xac\xc9" "\x15\x36\x9dtO\x19%^\xfa\xac\xd7\xae\xf4\xaf_\xc4p\xf4\xe4\x1f\xe9~\x08\"\xd2\xa8\xa0\xcc:/\x0cv-\xda\xfb\xb6\x19\x41\x12\xfa" "\x31\t{\xf7\x46\xe6w\x31\xb0\xe3#\xbbP\xb4\xeb\xdc\xf8\xe6\xb9\xc6N\x38}\xfb\x9d\x0e\x8a\x88\x9f\x8bu\xa6\x13\xeb\x1e'\xfe\xf5\xad\x9f" "\xc7\xe4\x80\xf7\x96^\xda_\x96\xce\xad\xb3\x35\x97\x7f \xc3G\x8d\x16\xdc\x32Z\x88\xe5M\x42,\x45\x1a-\x8a\xde\x0b\t\x97o\x90k\xde" "\x44\x1c\xa1\\.\xd6\xf5\x44\x1as\xeb\xd8@\x9b\xcf\x38\xed>\xb2\x65\xc8\xa0\x46p\xe6\xf7\xb5\xd4\xca\x19[\x12\x8flkT!\x96\x8f\x80" "\x36\x82_\xd2\r\x0fT\xfb%G=K\x33\x35/\xb9`LH#\x92\xd2*\?\x88R\x15>\xecQ\x83\x43\x94P*\xe1v\xdb\xc4\x15" "I\xbb\xf3\xd2\xd3\x65=P\xa5T\xec\x36\xb6Yr&I\xd8\x9b\x92K\xde\xc6\xbe\xdd\xa5\x34\xa1\xc5\xc5-\x9d\x35\x45\xbb\xe6Y\xf6I-" "\xcd\x8a\xba\xb4\x02\xac\xb4\xe2\xae\"\xb7\x8e\x14q\xc8\xc7g\xfcO\x30,\xd4\x17m\xf5\x14o\xee\x91\xf7,\xc3\xf9#_W\xfe" "\x96\x38\xe5\x03\x63\x33\x06-\?;\xe3\x06\xbd\xd0\xd6\xdb\xb6\xd7\x39\xb5\x97\xa7\xccS\xf1Qvr\xed\x00\x44z\x10\x8a\xf8\xd5t\xe6\xc7\xac" "\x15\xf3\xd9\x94\x0e\x90\xe3m\x7f\xaf\x42\xae\xde\x10\x31\x61\x16q\xad\xe1x\x9bVM%\x8bk\x81mj\xc1\xdf\xb8\x44\xe7]hi\x65w" "S;\xab\x32\xa6\x0e\xb4\xfcv\xb9\xa1I[\xc5My\x45+\xf3nt\xd7\x06\x37\xaa\x96\xe2\xcc\xaew\xb6pj%\xb1=\tZrM" "O!\xd1\x9e\xb7\x9c\x61\xdb(h\x61O h\xba+\xcb\xcfpS\x8b\x9f\x82\x36\xee\xa6\xd8K\x94\xda|'\xad\xb4\x36\xb4\xec~l\x9a" "_\xed$\xdbjk\x1f=\xb9,\x0e\x9a\xf9N\xf5\xef\xf0\xfb\x86\xf8;\xbd\x95\xcc\xd5\xd0\xb1\xff\x39\x03\x9b\xdao\xd1\xa1\xde\x8fI\x35\x95" "\x1e\\l\x1c\x90\xbf*\xf6\x8e\xd7\xdf\xff\xff\r\x8a\xfdn\xb1\?\xdb<\xf6\xf4\x15\xc4\xb7\x66\x10;'\x8c\x94\x08\x8dK\xa9\\\xf4\x12*" "\x1ag<)\x9e\xd7\x83\xd8\x0b\x89S\x9f\xc7\xe9\x99i,Z\xc5;\x8b#\xf7\xfd\x00\xd3\xc3RQ\xfd.\x16\xc9\xef\xea\xd9\x8f\x65\xbb\xe7" "\xbf\xf3\xbak\x45\xf3.\\\xf5\x63K\x87]\xd7l>\xd8\x0b\x16.X\xc3q\x03\x63%\xbfi\xf6x\x95\r\xe3\x83SJL\xb1\x62\x9d" "\xc7 \xec`z\x18\x07\xf1\xaf\x1d\x16Mg\x84\xba\xe3\xa0\xc5O\xb4\x88@+\x46S\xff\x94U\xfbk]\xa9m\\\xc5\xbb\n*\xbe\x1c" "x\x13\xb9\x46\xe8\x66\xa5\xeb\x8f\xec\xfe\x8b\xb8]I\xf7\?h \x17\xadt\xb2QU\x87\x8b\x95N\xc3\xe9\xa5\xf3\xf5\xe5\x1e\x87\xc7\xa2\x35" "\x7f\x9c\xdesY\?\xda\x33\xbcV\x7f\x17\xb7\xde-\xa2\xb6\xf1\x9b\x34\xe2\xb4\xb0\x43\x93Oo\xe3L\xd1h\xb5r-\xdf=\xdc\xd0\x8a\xd9" "\xfe\xa6\xb6\x9a\x9a\x66\x8f\x36O\xbc\x85Q\x91\x35\xa9\x46\xa8\x65\xb4\xda\xffh\xf8\x8cl\x1b\x01!\x06\xac\x42\x0cq\xc6^\x0e\xf7\xd3\xfe\xbd" "\xd3\xeal\x88\xcb=k\x63\xf7\xad\x33\xa1\xd4]\xe9\x31\x04\xa7\xd6yU\x1f\\\x0cP\xe5@|R\xac\xce\x33\?y\xc6\xa3\xbaL\x82\xd5" "\xde~v-\x8dx\x35\x45(l\xd7\x8a\xeeh\x43[\xef\x9fP\xbb\xb9\x34.\x9d\x1at\xa3\xc4K\xd3\xa4\x31\xb6\x18-\xe3}\x46\xbeV" "v\xb9\x16\x41\xc5\x88\x8c\x9e\x8dv\xd3\xd9Y\xd8\x8cP\xb4\xe4\xd3\x99\x9d\x94\xf2\xd6L\xae@w\xf0\xf1>G\xb6\x42\x38\r\t\x31'\xa3" "\xbc!\x1f;\x64k\x9b\xfc\x62.\xe6\xff\xce\xc9\x19\x33\x8f\x31\xe4@\xfb\xda\xf7\x8b-&\x32\xe8\xb0(\x08/\xef\x9d\xe1\xa7\xeb=\xf2}" "\xdb\xa9[\xfe\xf4\x0e\x36\x34\xc6\x0b\x87&\xa7\x87\xdf\x30\x81\xa2\x9c\x91=\x66\x16\x07\x95\xc2\x15\xd3I\x8fl\x61\x8d\x99\xb8\xbe-\x93,\xfa" "\xfb\xf2\x95\x91\x88x&L\xf6\x9c\x9eH\x06x\x03\xad\x39S\xd1~=\xb0\xb7\x7f@\xeb\x8a\x10\xf1\r\x85\xd8\x08t|\xc0\xc9[\xe1\x84" "\xe7\xe7\xcf\xff\xc8\x9f+rxL\xc2+\x44\x89\n\xe6@\xaa\x66\x12\x83\xd4\xf1\x81n\xb1U_\x15\xb0\xe1\x42[\x37+\xa6\x95l\x38V" "\n\xfe\x80\x63\xdb:\x44\x08k\x96\xb2O\xb6\xf8\xbb\x9fg\x1d\xa4\x92%\xb3\x94\x61\xd5\xd8\xb8\xc4}(\x84\x97M\xdd-x\xf7\x89Z\x07" "YQ\xb2\xbeZ\x89\xf3\x87\xe3\x12]\x1c\x84\x97\x31\xf9Z\x95w\x65u\xc2!-\xdd M\xbb\x63\xdb\xab\x0c\xb4\x43\xc7\xd6\x94\x1f\xd3\x9e" "\xa5\xdb\xea\xd6H\xf5\xb0\xdb\xcf\xd8\x89<\xce`\xf4V~\x91\xcc\xd6\xe3\xb0y\xd7\xf8Xz\x01\xf9\xc1)-\xd8\xa2\x8d>\xd2\xd2s\xfa" "\xbe\xa2\xb6\xdc\xa7\xbf\xfd\xf8\x98\xce+\x42\xd7\xbf\xf4\x44\xae\x1d\x19\x97\xa5\xff\xc9P\x63\xe3\x32w\x8f\x11rl\xa8\xb4\xc6\xaal\xb5\x66\xd9" "\x86=JN\xad\x43\xb4J\xb7\xcch\xa8`\xee\x87\xb0_\xa9\x90\x83#\xf5I\xb3\xfaJ\x45i[\xb9`\x0e\x9au\xa7L\xdc\xfc\xed\xb5" "\x1f\xee\xc6\xa7-\xa7\x9d+\x63\x9d\x84\xa1\x01\xb4zL\x44\x0b\x8c\x38.[V\x97\xd3\xe5^\xb8\xd0\xd2\xfep\xd9\xa5\x89\x16\"\xe3\x62@" "\x0c\x8f.\xa2\?\xccj\xd7O\xc8X\xc3\x95\xb3\xea\x8b\xf1\x9d\xbcn\xfa\x1dh\xcd\x10\xc2\x8b\x17\x0c\?\xd5'\x9eJ\x8d\x46j\x97\x97\x7f" "$+\xb9\x32#\x87\x82\xfe\x87\xd6\x41.\xe7\x08\x65\"\x94^\xab\xff\xd4\xe5\x03\xe5\xd8\x63\x0c\xf4\x9c.\x8e\x98\xe8\xa2\xb7g\xbcr\xfa\xbb" "\x17\x31\xbd\x38\xc9\xee\xcf\xe4\xf3N+\xa7\x66y\xc0\x61\xbb\xbe\x88\xb4@\x42\xb4\x16\xa6\\\xf4\xab\xe1\x12\xfdj\x38\x17s\xc0`\xf8\x35\xba" "\xdf\xf8\x95\xd6\x62\x11\xd9-)\xfb\x8b\x12\xfa\x1f\x88\xe8\xe9W\x31j\xd3\xc1\x14\x9a\xbf\x05\x15\x61l\x86h]\x0f\x15=y*\x1e\xf2\x35" "pwR\x61\xb3\xe4\xafV\xd7\x9e\xdc\x06\xd1\xdf\xb2\x99J\x94\xd2\x35\xb5j\xae,#\x32gH\xd6\xf7\x8d\xbf\x45\x11\xed\xcf\xbd\xdf\xae\xd4" "\n\x05\x81\x16\xa1\xa5'\xcfV\x14\xa0u\x8fh\xbfs\xcd\x06\xb6\xa6\xd1\xb3\x1dZ\x08\xba\x08-\?\x1cl\x9c\xa9\x1b\x31\xf8\x99\x08\xc1\xa5" "\x9c\x39\xd3\xc3O\x1b\x82U\xe9i+<\x36\xbdR\x0f\x33\xd7\xa2\x35\xfa\xd9\xd1$\xad\x0c\xa8\x61&\x1f\xdc<\xa7wQ\x8c\x0f\x0bl\xef" "#\x1a|\x91\x41\x1b\xcf\xa9\xa8\xcb\x61\x0f\xd5\x87V\x43>\xb2[XM\xe7\x83\xcdk\xcf\x07\xeb\xdbV:\xe7\x35\x65\x00@\xca\xf7P\xee" "y\xce\x89\xa6]\x66\xfb{\r\xa3\xbdw\xc7\xb8\x14\xa2!\xc6\x02\xa8\x13\xdapP\x81\x96.\xfe\xa5\xec\xfbV\x39}\x36\xae\x16\xbbZ\xa5" "[\xb1\xa9\x16\xe5\xb7l\xab\xe9\xe9\xdf`V\xae\xc9o\xae\x31v\xc9\xb8\xca)\xfe\xf1\xa9\xf5@N\xad\xbb\xae\xb4\x32\xa3\xa2\x95\x33\x88\xc1" "\xa0\xa0\x9a\x15\xe8S\xbb\x8c\x8f\x9a\xfcMz\x9d\xab\xb4\x96\xe9\\Z\x11]\x19\xce\xca\xf7<\xad\xde\x91Xv#\x44\xc8+\xe1\xed'\x89" "\x1d\xca\x85\xadO\xbf\x96\x88\xd6;\x38\xe7\xcaS!\xfb\x88\xe7\x66\x1f\x39\xe7j\x66\x61\x93\xe7Y\xeb\xa8\xcc\xce\x63\x9a\xbd\x45\x1b\xd4\xc3\"" "+\xd5\x1e\xc9\x9f\x13#\x1f\x85\xdb\xc0+\xcf\x9d\x92\x38O\x9f\xbd\x84s.\x41\x01\x35\xd2\x07\x8d\?\xa6Y\xd7\x82Z\x85\xbbu@\xd3\x00" "~\x96R\xb3\x1d(\xad\x03|\xce\xd9\x04!\xd6\xb2\x0b\x1b\x65\x12\x33\x02\xc2\xd9\xb7\xf3\x37>\xb6>\x83j\xd9M\xaf\xd8=pMW\xa0" "`\x41\xff\xf8\\\x46\x0b\xf9\xc5\x43N\xbb\xd6\xa5\x99\x64.\xed\x15(\xd3\xfd\x11\x37\x00\x11\rn\xc7\xa0\xaez\xa3\xe5\xf4\x32\xc5V\xcc\xa0" "\xf4U\xb3\xe3\xa9k\xc5\xd1\xf0\x7fip\x63v\xadx\xdd\xfc\xcd\x46q\x97\\:!\x64\xbbui\xb6\xa4K\xb9\x92\\\xdd\xef\x95=\xef" "\xea\xf5\xee\xab\xd4\xd8\x0f\xbb\x64\xa4\x13\xe1\xf8\x92\x64\xc7\xe1\xd2\xba\xd0\x97\x36H\xb9\xa4\xf7\xb0\x10\xb3\x41\xc2\xe6\x91S\x1d\xa0\xb1\x86M\xb4" "\xf7\x9egG\xfe\xf1\x44\x62\xf7\x0f\x90\xab\xdc\x45\x64\xe7\xf8\x32\x9f\x7f:\xad\x86W\xd1\xea \x15\xd7\x97\x18\xec^J\xba\xc9\x13^\xa0\xc0" "\xfe\xe7\xc2W>(\xf7\x01\x15\xb2\xefr\xc9\x35\x0b\x63\xb5\xd3\x39\xfdRkZm.\x19\xc1x\\\xb3/NiU\xd7-\xe7\xd7\xc7\xb7" "\x0c\xa2\xa3\xdb\xaa`i\x1a\x0e\x84\x10\x10\xa6}\xa6\xa7}\xff\xd9z}\xb7\xc5\xf8\xd5\x19\x36\xd3\x18\xdfq\x95-\xc5\x18\xc9\x7f\xb2\xcf\xe9" "\x35m#\r\xaf\xd6\xd9|\xa5s\xa2\x10n\x80\xe3W\xae'\x12\xb2/\xac\xe4\xac\xcf\xf8\xd5\xba\xc1\xaf\x36\xea|\xe3\xf2\?\x30l\x93L" "\xad\x39\xe3\xdc\xcb\xf8\x8d.\x05\x42Z\xd2\xdf\xc2\xee\x14\"\"\x9e\xe5\xf8\xcd>\xe2\x37.\xa5\x17\x62}\xea\xf8\x93N\xb5\xbe\x8b\xbd\xf0\xd4" "\x8e\xc3\x9f\x44\xf8\xb6#\x05\xc5*\xc1O\xc6\xa6\x1a\xdbv\x91\xe0\xfaj\x95vn\xa8\x8d\?\x9d\x45\xe5\xd9lR\x9fY\x34'\xb1\x81\xcb" "\xf8\x33\xa7\x8d\xe1\xd3*\x06\xa5\xb6\x93v\x45\xd1\x64\x34\x1a\xb4#\xa6&\x9fn\x93\xf0/\x94\xcb\xf3\xcb\xff\xf4{\x30\xd8\xc0\xd8\xd6\x83\x06" "\xa3\xe6WZ\xb1X\x41\"r<\xf0\x65\xaf\xe6+\x1c\xef\x9c\xc9\x18\?\xfc\xea\x9a\xd4\x08:\xd3V\x41\x63\xf0\x95m\xff\x43\x80\x81[j" "\xe5\n\xc9!\xc7\x17g~\x85X+%\x64\x97\xfd\x8b\x8bO\xc7\xe6\xb7\"\xc4\\\xa9p\xfe\xed\xfc\x33\xf9\xab\xc6\x19\x7f\x11\x11\x89k\xfc" "\x65\xc5\xcb\x96\x8a\n\xf9\xb8_\xc5\xdd\x16y\?\x91k\x16\xcd\x1d\xd7\xf2\xf2N\xd0\xfa\xf6\x37\x88\xca \x1cM\x9d\x66\xbf\x87X\x9f\xd0\x1d" "\x11\x1a\xb7\x88\x87h\r\x9b\x8ajJ\xb9\xb0\x8b\xad\xa6NmwX\xb3\x9a\x96Mz\xaeI\x61\xa3O\x0e\xb4\xe2\xacR\xc4\xcc\x11\xcf\x41" "\xa1Z\xa3\xb7\xffQ\xe3P\xac\xab\r\xba\xd4<\x1c\xa8w\x39\xfd\xa9\xbc\xb6.m\xd7j\"\x65\xda;\xa1k\x1d\xb4\xacyo\xe3\\\xd5" "\x8a\xda\x82>\x18\xe3\xaeNoU\x9f\x38\xbf(\xda\x41\xdf\x99/[\x14K\xb1q\xe6T\xf3;\xdc\x34\x44\xe3\x84J\xd7\x86=\xca\x10\xcc" "\x08\x9a\x46\x15\xbc\x1a\x15\xbb'\xf4\?\xd9<\xf6\xba\x9f\xf3\x35vm\xbaK\xf9\x9b\x44\x66\x83\xef\xc2\xe9\xc4|-\xa8\x45m\xae\xb4\x86\xa6" "\x31\xdb\x38\xfc\xe9\xa6\x15g\x95\xac\xde\x93g\xc7\xc6\x8aS\x06\xa3!\xcd\xa2\xdd\xde\xfdW\x63(l\xd1\x1a\xf6\x97\xac;\xbb)\xe7]\xba" "\x66Z\xea\xda`\xba\xab\x01\x87\x96Q\x88\x18)\x07|\x93\x36\x15\x63'\x37\x01\x16\x91\xdfTW\xb7\x99\x1dJN\xed\x07M\xff\x37\xad\x7f" "\xe3\x0c\xa7\xf7\xedJpNVZ\x9e\xfcX\xae\xff\xd8\x33\xcc,\xd5\xf3\xd3\x62\x1c\xe9\xee\xce\xac\xff\xba\xdcO\x0f,\xb6k\xf9\x8a\xa7\xd3" "\x87TX\xe5\x65\xedsu\xcbP\xd7>\xd7.\x9d\xfc\x84\xact\xbaV\x89w\xb9)\xb9\x92\xcfN\xc7\r!\xcdT]\xfb\xcc\xbb\x0c&" "\xa1\x8c\x9d\x7f\xf3\x91\xaa\x85\x8d\xce\xa1\x85Il\xd1hp\xe9\x32\x16\x9cp\xbe\x43\x62\xee\x1a\x94\xbe\xa6u`\xbb\x36\xab\xa2\xb4~\x8b\x8a" "\xc5\xea\xcc\x46~\xdd\xbc\xc4\xcb\xf8\xe5\xe9\xb7\x80\xbd\xd7\xb9\x0f;\xb5\xda\xa3\x33\xdd\xefX\xb3\xa3\x9a.\x8b\xe6\x00\xd1\xb4\xec\xe5\x8d\xda]" "\xd7_\xban+\xb7x\x33\x43W\xd7\xe6\x62\xba\x66\x66U\xea\x8d,\x9f\xd5\x81\xdc\xff\x0cq\x14\x94,o\xf9\xea)\xd3Iu>P\xb1" "\xb3r\x9a\x85\xbdk\xdd}\xe1\x34\xbd\x7f\xa0\xc8.\x43W\xc3\x96K\xbdr\xc5\xb2`U\x62\xb7\xb0o@\xa8\x15\xe8\x0bs\xc4\xccn]" "\xb3\xb1w\xfdi\xe9:\x00\x66\x8d\x1f\xeb\x34\x8b\xd6\xd1o\x64i\xf7\x1b\xbd\x18\?\x8cv\x16\xdb\xc2n\x31\x63\xb1\xa1\x43v\x30Y*\xd3" "\x97[\xb3nu\xad&\x19YS=\xb2\x11\xcb\xc8Z\xd2Q\x1a-I\xec\x89\xad\x44\xed\x37\xca\x1e\x9b$\xbf\x89\x91\xf5\xe2l[o!" "V\x9c\x83\xd6}\x19\x99\x65s\xc4u\x01\x42\x44h\xf7\r\xbf}\xb7o!\xa7z\x94i\xbb\xcc-\xe3\xa1\xe9\x08)h\xaf$\xfb\x63\x91" "U\xc6\xca\xdfY\xcb\xa6\t\xfe\x34\xb3\xdc\xe8\x81\xb4]\x62Phj\xfd\xedum;h\xd1\xf3\x1a\xde\xff\xd0$=\xe9\x61\xdd|\x1bp" "\xc0W\x37\xbaV,/M\xab\xe8v\x41\xc3\x97\xa0i\xec&\xd7\x9a\xce\xbf\xc1\xaaj\xdcNN\xc5\x8e\x33\xab<\xd8\x0c\xb3h}\x92\xa3" "\xe6\x08\x93^\?\x8c\xec\n\x8d\xcb\x03(\x0e\xb6\\\x0c\xc1-U\xd3\xe9T\xc6\xe4V\xed\xddi\xf3\xff\x11\xa3\xdc\x81\xba\x9e\xbe\xd4\xa3w" "\xbd\x1e\xe8Y\xb5\x1c\xd9\x44O\x94\x62\x1d\x9cr\xe8\xd4\x98\xbb\xf0\xb1\x81\x96m%\xf9\xe2'h\xd8\"\xc0\xb5\xf5\xae\xb9\x0f\xaa\x36\x32." "\xc8\x83}\xa7\xf9\xa0@\xec\xdc\xe4\x8f\xed\x94\x66&=\x90\xd5\x9fRl\xed\xa8Z\xc3\xa9\x9b\xec>=\xffi\x9d\rM\x1d\xffii\x85" "\xd6z\xdf\xfc\xad{\x13\xc4\xfe\xf9\xc6\x0f\xf2\x10\xe9i\xcc\xf8\xdf\x38\xe0\xe1\x90\xc7\xe1\x00M\xe7*\xcaS\x05\xf1\xf6@\n&\x97\xa8\xca" "\x81\xc3Y\xc1\x11U\x94\x96w\x19\xec\xcc\x45\x7f\xff\xd6#Vj\x97\xbe\xf2\xa7\xd1n\xa1\x62Q\?\xcd\xea\xa7\x34V\xfc\x1d\xb6\xbf\x0f&" "\xb0H-%\xe1h\xfdo\xb8\x00\xed\xa7\x11\x44\xbf\x42\xa5\xce\xb0\xa5\x10\xff\xcf{T\xfa\x8c\x83*\x62\xd5\x1e\t\xfb\xcf\x83\xe9\xc8\xde\xa0" "\xbf\xfb\xf3\x1b\xf3Z\x88\xe8Y.\xbc\x64\xe1I\xaf\x62\xa7\xbay\x8f\xech\xc3\x32\xc4_O\xd3\x42\x87p\xe3\x03Oq\xd3\xc2$\x8a\xc8" "!\x82\x32<\xe8\xa3\xa5\xebq\x16\xb2\xe1\xc9\xde\xda\xb3\xa5\xcb\x8bS\xeb\xfaw\xf9Q\xec>\xb8\x16\x36}\xa5V\xa9\x86\xbb\x8b\xd6.\xd9" "\xbc\x85j\xd9\xf1\x95ux\xa0\xd5\xf7mjX\x35\x33\x35\x46\xe9\x9b\xdd\x86}\x85(\x64~\xd7\x12\x8f\x00\"J+\x38\xfd\x9aS{." "\xfb\x96\x07\xfd\x39\x83\xab\x8b\x38(gQ\x92w\x82&\xa2\x1c\xa0\xe6\x99\xf3\xd3\xe0\n\x00\x88\xd9\xab\xdd\xe2\xc7^\xc3O\xc7\x18;\xb3\xe3" "VZ\xf9\x0e\x05\xf4'\xf6\nQ\xc4\x42\x43no\xfe\xc6h\xe8\x10\xd7\x37\?\xe9\xd2>\x8f\x61\xe0o\xdc\n\xd7v\x8d\xb9\xbaY,\x87" "\xba\x17u\xa6\xee\x45:;\xbbq\x38lo\x01-,\xa6\x81\xf6\xe7~\xa1\xda\xe6\xed\xbdp\x46\x0f\xa1\x10\x44\xf6\x93g\x45,\x83\x8b\xdd" "\xec\xec\?\x1a\xd6^\xab\x66\x37\x9c\x0e\xc3\xa3Om/\x39\x11\xd9q\x8bl.Q\x99\x1d}\xa6V\xf3\x07\xcd\xda\x61\x1c\xf8\xab\xa9\xa9\x31" "\xe6\x12\x34\xddw\xc7\xef\x31\xb3\xa8\xc5\x10\xd7w\xef\x66\x34\x8c\xb8\x1f\xbcp\xc1*\x97k\x8e@\xee-\x04Q\x03\xde\x35:\x41\xf3\x8aj" "\x89\xd2\xf3\xa7\x85\x18+\xe3(\xdb\xfa\"\xd9N\x46\xd9\xd1\xb6\xb1\x44ZV#&_m\x43\xf4L\xcd\xcav\xb4\xf2`\x64\xb9\xe0\x42\x02" "\x61\xdd.ps\xe2u\x61vSM\?\xec\x36V\x8a\xb8\xb1!\xc8\xed\rM\xeb\x39\xf3\x1aKt\xd6\xb8u\x86\x14\x34\x0f\xd5\xda\xc7\x1e" "P\xc4\xf5T\xcaW\x63O\xdd\x81w\xf9\x92\xb3\xe7\x33\xeb\x35\x44\xfe\x15\x08\xcd\xea#\xe2\x93\x93N\xcf\x10\xff\xfe\xa0\xcbm\x7f\x83\x17h\xef\xe7\x1biPw\x0f\x1a}U\x33\xb3\x02\xc4\x66\xcc\x38\xf3\x63\xc4\x13j<\xb9X" "\x94\xad\xa8\xd0I-\xb2\x39\xcf\xc8\x46VQ\x36\xd9q\xa6\x8dQ\xfa`\xb7\x9aXq\xa7Y\x45h\x89\x8d\xb6\x9c\xd2\x06J'\xd4\x1b\x36" "\x86\x9f\x00\xc3\x8b\xb5^\x83v\x19*\x03\x1bG\x42\x0b\xbe\x84\xd1\x66\xecTh\xf2\xd1\xff\xce\xec+H>\x9c\x7f\x9d\xfb\xc8\xfc\x10\x94\xde" "q\x36SN\x64\x16\xbf(/\x31\xb7\xf3\xa3[\xe7\x46\x9f\x32\?\xe2#\x31X\xa0\xd2\xfe\xba\x1c;\xd7Vk\xd2\xdf_X\x61\x05\xa6\x61" "Y\xadv`<\x32\xd0S\x9f\x9f\?\x38\xcd\xe3K\xc5|\xf1\xe2}\xb5\xfc\x9a\xc5*\xbfM\x8cK\xf3\x97\x8bl\\\x11\xd9\xb8\x42xn" "\x86)\x11\xeb\xce\x8d\x43\xea\xd5\x18\xdb}\x1b\xb1S\x46\x86\xf9{\xef\xbf\x9a\x97%n\xf8\x07rY\x8d\x88/vi\xfa\x65\x44\\\x99 " "|\x33\xfds\xe6\xf4.+\xc5\x8d\x9ei\xfe\xdds\x86\xa7\xfeg\x97\xff\xc7z\x98\xeb\x99\x85\x33\xf5\xb2\xe3\xdaU\xd5\xd8\xbe\xe4\xc9\xd8\xf9" "\x37\xa4\x87\xd6\xbd\xf7\x1e\x87h!`\x38\x34\xaf\x1eU\xacY\x42\x82\xd3H\x64\x13\x10\x11\x37\x03PN\x8c\xcc\xbf\xc2\x1a\x08\x1b\x63G\x66" "\x83\x8e\x8a\xf3\x7f\x46&\xa9\xa0\xb7HT\xdc\xb2$\x9bM\x30*\x1aU\xef+\x15\x8d\x87\xe2\xfe\xd2\xc4V\x10\xe9\x34#\x64M\\<\x8c" "\x0b{K\xdc\x8d@\xf8hii\xaf\x9c\xde\?\xd0-h/n\x35x\xbftk\xff\x8f\xce-#\xd4\x83\x7f\x36\xc1\xa8\xf8\xbatJ\xcd" "\x99\x37XN\xb9q-\x98\xda\xf0I\xf7\xb0\x1d\x0eM|\x36N\x9d\xdc\xfe\x01\xa2\x8ey\xac\xb8\x33X\x87r\xee\x64\x94\x32\x11#\xbb\xbf" "}\x85\xde\xf5\xe2\x66\xb8\xa0\xb9\xf2\xaah&R\x13\xcd\xfa&\x1a_\x94\x8d\xf3#\xef\x62H\n~W\xc7\xde\xf0\x99\x8f\x64\xe4\xed\x0b\xf7" "p\x17\xda\xc0l}S\xd3\x15\xbbVh\xb9\xd9\xae\x92\xcf\xca\xed\x07@\x19\x98\xa6\x07\xcd\xac\x7f\x1e\x82\x9e\xe3\xb0\x97q\x11\xf3\xfd\x9f " "\xfa\xf5n\xc7N\xff\xe2\xd7w\xfb\xc6\xa5\xd3\x8b\x98\xb9M\x45\x32\x42\x36w\x8a\xc8\xdb\x42\x8dy\x44\xabn\xb4~`\xcd\xc0\x18\xe3\x42\x1a" "\xf9\"n\x0c\x0c\x9a\x87{\xb4\xee\xec\x14\xcf\xdf\x14\x39\x85\x18\x99\x9b\x91\x92\xfb\xa9\xa8\xc8\x11\xc4z\xb8k\xe4\x17\xbe\x8e\x1f\x8d\xec\xfa\xac" "\xa7v\xa9\xa5\x65\xe1\x12\xbf\xc7\xb6\xe6\"\x66P\x30!\xbb\xbc\xb1\x8c\xa1]\xb4\x15\x0b\xb1Ys\x63\xae\x0b\x13\xd2\x0b%\x36\xbb\x66\xac\x9e" "\x1e\xe3\x98\xe1%\\\x63\xbc\x45\x39zS\xc5\xff'\xd4\xd8PZ\xdc\xb3ql\x46\xc1\x98Q\x1a\x85\xc3@\xab\x1e\xe2\x8c\x93>r\xf9\x37" "\xe7\xef\xb4\\\xf4\xbb\xa6\xfd\x90\xd8\?\x16\x34\x03M\xcc\x10R\xc2\xd9\x84Lxm\x33\xb3\xc5\x8c\x12\x00\x32\x36\x92\x88\xef\xbc\x8ay\x66\xc7" "V\x0b\xc4\xc5\xa2G\xd2\xbf\"\x36\xbf%\xa5u\x15\x16\x19Z\xf5\xc9\x0eM;\xc2\xe9-\x89%.\x42\x64\xb3\xb4\xbc\x07<\xce\xbc\x14\x1e" "\?\x91X\"!\x44\x9e*\xfb$\x9aO\xa1G\x7f\x17q`\x7f\n\xc3\xae\x10\xeb.';\x9c\xe3\x15\x62\x38\x0f\xfa]\x44\x64\xb6\x88x" "\xc9\x84\x66\x35;\xeb*\"\xaf\x99\x30\x46@\x15\xe2U\t\xf1\xaa\x84\xa8@\x84\?S'\x8b\x10\x44\xae\xd9\x81\xc8\x9dx!\x32\x1f\x45\x84" "_\xa7pl>\xea\"N,\x19~\x36\x62\x07Ov\xb8\xc4\x10\xc4\xc6\xb7\xe7\x1b\x1a\xe3\x88\x88\x86\xe1\x81\xb0\xc6<\xe3\x1b\x15\xfe\x30\xe9" "t\x32\x9c\xec\x14{\xfa\xe0~\x94M\x06\xe8\tg\xb7\x42\xf8\xc6\x44\xf0\xfdNv\xe8Y+\xbc\x65\xcer{W\xd0st\x1d\xbf\x19\x99" "^z\xfbM\xf6\xb3\xf7]\x30g\x36+\xd9\xed\x9d\x98\xcf\xe4\x44}%\xe9\xd7.\xe2\xa3\xfd\xf4\x8aW\xb7\xcf\x18\x8b\xf9\\\x1b\xe5\xc9!" "\x17>M\x0e\xd3\xed&\xb9{\xca\x45!\"\xee\xef\x92\xa8 \x85\xe8\xa4\x83:\xf7\x0f\x0f%h\x96^\x88\x98v\xa1x\x16\x33$\x1f\x34" "\x96\x61\x8a\xf8\x9e \xd2\x8f\x8a\xa2os\x07\x8d!W!\xb2\xf6\xa6\x88\xb9\x65\x13\xed\xd2,\xd3\x87\xe9i\x9d\x44 p\x30=Yq\xf6" "\x8b\x1a\\@ J\xbd\x11~h\xd9\xb3\xb5\xec\xf1\xb1\xe2\x07\xb4\xaf\xea\x30\x9d#\xf7\x0f\xb9\xc6\n\xa4\x91\x1c\"\x87\x8f\x14\xef\xdb\xecM" "\x43\x93\x82\x44\xa3\xeb\x86\x16\xd6\x39\xe3\xd8\xba\xde\xe1:]\xd1\xf6\xb6\x9d\xc5\xfb\xeb\xba\x1e\xb9\xb6.\x1dg{o\x1bZ\xf8\xad\xc2\xbc\xf2" "\x97\x95\xdd^\x91w\xe7\xe4\xc3\xb6S\xba\xef\xdc\x62\x9e\xda\x62\x90\"J\x1f\xb4l\xcb\x62\xf7\x99\xf6\xc4h*\xd4\xfe;\xdf\x89\x63\xc1\xfe" " Z\xa7\x64|\x0f'\xf4.\x9c^&\x44\xe4p\x45\x44\x0c\xaf\x85\?v\xf6\xd0\x32\x14\xa5\xcf\x0b`\x16\x8f\xc8\x19_p\xbe\xfd\x9d=" "]\x9a\xd8\x31.\x9d\xeb\xed\xd5z\xe7\x8b\x1aV\x06\x80\xf6\xf1\x42\xb4\x9b\x89\xc8\xe0W\"\xee>\xaa\x43\x13\x66\xb5T\xb3\x8b\xde\x30\x1b\xc2" "\xd2Z\x11_\xb7\x9d^z\xb8\xbf\x35\xa8\xce\x81\xfbG\x1b\x1a\xc7O\xa2\xbd\xd9\x9f\xcd\x86\xce\xecj\xc4\xbe\xb9hs>\x0c\xb7\xaf\x06\xfd" "\xdbP\xf1\xf0&\x88\xd5\xa3 >\x95\xd2\xd2\x81k\x9e\x62\x15k\x1f.\xae\xed+\xe5\xd4\x8cpw\x41\xb2J:\x64;#|\xe0\xcbg" "\xc8h!\xeb\xde\x43v\xa5@Ny\x66'%NZ\xe1\x98$_\xf7\x8do-\xc3\x81\xcb\xed \xde~\xd0\x8f\x8a\x9a\xaf=\xa0\x16\xef" "p\xac\x05M\xcd\x00\xd3\xa1k\xdc\x1c\x9c\xa2\xba\xed\xed\x05\rS\xbd\x10\xadI\x31\xf1wu\x9f\x1do\xfe\x16\xcck< \xe3Y\x36\x31" "\x87\x98\x05\?\xfd\x13\xcf\xfd\xb9\xd7[[\xc6{r\x9b\xf9@o\xec\xc9\xa1\xa7\x9d\xbb\x1e\x08\xeb\?N\xff\xec\xd9\x17\x04i\xf3\xa5h\xdf" "\xb2\x8a\x83-\x17\xbd\xec\x8a\xc8\xd9\x00\x88\x85\x15P\x15\x17o.\xb2{\xec\x62\xb8\xf4m\xcb\x99\xf6\xa6\xe9[)m\x0f\x19\x19\x86\xebX" "\xe5\xfb+\xde\x0f\xd2\xfd\x7f\xb9}\xc8r\xe2\xc6\x37\xa9\xda\xdf\xe7(\x9a\xe7\xa8\x88\xebZo\xbd\xb0g\xba\xfdL\x1b\x33\x9a\x8c\x45\xbb\x63" "=\xc6~\xa7\x90m\xc8\x61p\xbf\x14\xf1\xf5\xd1\x19\xf2\xa5\x83\x9b\x1c\xd1+\x10\xcc\x9a_\xf4\x8d\x15\r\xf3\x36\x93\xa3\xb4z@\"\xba\xa1" "\xf0\xfe.\x1d\xb4\xa5G\xb7\xa1\xad\xe1\x92&Z\xeb\xda\xf9;\xdf\x66\xc7\x1fZZ\xb1MH\xa9\xf9\xe2\x61h!\xe8\x04\xb4\xb0\xcb\x93h" "\xdf'NZ\xb8'G\x9c\x87\x16\x62\x17\xbd\x89\xed\x10\x0b\xca\xb8\xdaz\?\xaaY\xae\x1d\xc1\n\x15\xce\x61GX\x44\x0c\xc3\xc3\xe9\xd8\xb1" "vr\x94\x9f\xf0\xbe\\\x8c/\xc4\x08vr\xe4\xd7\xa2\x83\xa2\x90\xad\xa0pNN\x86N\x8d\xab\xcdj\xe5\xc8:\x0eG\x9e\x37\xd6\x1bP" "Z\xeaO\xac\x63x\x62M\xd7\t;\xd7\x42t\xae\x85X\xcd+\x64\xf6\x9cX\xe3y\x42Wo!\x46\x07\x42\xac:\x9d\x9cpU\xb7\x10" "\x1bX\x81\x8c\xff\x33\x39\xa1\xe1G\xf9\x45\xb2\?t\xc2\x19\xec\xc9IQ\x1a\x92\x98{\x15\x62\x15\xd3\xa4j\x19\\\xe5\x14\xfd\xa4\x9a\xdfu" "\x8b\xf1\x35#\x86\x89v\xbf\x65\xe2%#\xe9\x08\x1fw\x9d\xea\x1a\xca\xfe\xc5\xa5\xfc#\x11\xd0\x1dL\x17\x17t\x99\x9d\xd4\xe4\x9f\xf2*\xc5" "\x32\xd7\xc9U\x36\xac\xff\xceZ\x1c&\xb9\x66\x0f`\xda\xfa\xe5\xcc\xb5\xec\xe3k\xe3\xb7,\x91N\xe6\xc0\xb5|\x36\x96\x9fM{\x35\xba\xfe" "\xf5\x9f{\xa8\x66\x1do\xd7\x1ev\x36\xb4\xbf{\xa8\x46/\xb9\?\r\xb5\xe9\x95\xb1\x61\x9d\x9a\xfb\xb4\x8bL\xbd\xb7\x06\xf0\xc1\x32\xf3\xc1\xba" "\x1d\x8f\xa6[\\|\xa1\x1f\xc7\xda\x1b\x8e\x33\x45\x9b\x7f\x39u\x1c\x35\xc7\xb5\x9e\xd3J\x44^\x1b\xb1\x02\x19\xe4\x30i\xf2L\x93\xb9\xb0^" "v\xfaY\xd9SL\xc2O[\xc8\xa7\xb3\xad\xce&\xcf\xc5\xed\xb7\x33\x9f\xfdP\xc4\x08\x1f\x94{\xaa\x01t#L\t\x0eo\x88\xc5\xc3L" "\xee&W\x0fqKxx\x31\xfa\xef_qx>y\xb5n\xd1k\x36!\xe9\xba\x36i\x31\xde\xb0\x90%\xdf{\x01\xad\xecj\?k\x8c" "\x18\xb1Q\x34X\xce=\xbe\xa0p\xc0\xe3\x8c\x1a\t\xea\xbaM\xec\xc9\xe2Zn\xe7\xe6Ow\xe4\xfb\x42\x8f\xfa_\xb0\x37\xa3\xa4\xa5J\xc4" "\xc5\x17\xd7\xbeNZ\x85\xa5\x8a\xf1#'-\xab\xf2\xdf~\xe3{\x12\xeeK\x93\x37\x06\x46\x12\xd6J\x36\xecyK\xaf\x8fH\xecm\"\x84" "U\x07\xb4\xf7\xfd\x46\xf7%!GHo\x1c\xb4\nY\x81(\xadyP\xd1:#\x10\x39\x0cS\xd1\x8a\x80\x8a\x32\xe2\x81h\xb5\xd9\x1b\xa3" "\x02\x82\xda\xc5]\xaeLk\x39\x19\xbc\x12\xa2\xa7Z\xc4u\xb3\xf9'\xfe\x98\xc8\x04[\x97\xe5\x8dS\x8d\x93\x37k\x92\xdfl\x88$\xc4\x03" "\xbd\xa7\xaf\xe7$\x46\xf4\x13\x8b\xcb%\x64\xe1{g\x98\xf3\xc9;\x8d\x62\xa0\xe5\x89zu\x81\xd2\xeb\xa4/\xe0\xc4\xb6\x1e\x11\xb2\x92\xfc`" "\xd8\x0c!|\xb9\x84\xf0\xaf\x14\x62{\xb3\x89m\xdb\x31\xb1m;\x84,\xcfJ\xfa\xfdL>l\x90\xf8\xc1\xe5\xbc\x42\xac\xba\x06\xe5\xc6\x32" "\x46\xfb\xeb\x63\xe1\xd8t\x7f}{\xc6\xe5Q\x93\x0fz\xf0\t\x61\xc5\x99|r.y\xf2I\xef\xdf\xc9'\xe3\xdeM\xbeh\x33\x07\xed\xe9" "\xbeh\\\x02\xff\xbe\xfb.\xad\x1c\x93\xae\xf4\xa8\xb9\xe4l\xd2\x15\xd2\xf4\x38\xe9\x19\x7f\xacY\xfd\xa1\xdf\xf7\xe4'=\x88H\x8e\xfe\x94\xd6" "\x05P\xd1\xfa\xf4\?\x0cl\xa4#s\?\x00{\x1e\xa8\x31\x30\x8e\?\\K+\xbb\xd9u\x8b\xfb>\xe0@V\xeb\x65\x0f\x7f\x1a\?\xe4\x9f" "\x0c\x61>@\x06G\x84\xe8W\x87\x38\xa2x;q\xa6\x83S\x17\xb3\x9b\x65\xde\x9a\xfdW\xf3\x64s}\x88\xb0o:\xec<\xc2\x81\xdd\x92" "\xc5\xe9\xc7\x8a\xd1\x0f\xad\xc3\x93\x1f\xce\x98\x0b\x39\x36\xfd\xb1\x66\xfb\x87\xee\x46\x93\x1f\xebo\xfe\xd0\x32\x37\x19[\x0fll\x39\x39N\xf7\x13" "\xb2\x8b\xd2\x31\x66\x0cX!\x1c}\x41{U\x63\xc6Q\x13\x62\x42w\x32\xe6nl\x42\xder\\\\\xa2\x0c\x8c\xd7uT\xbb\xb1\xc6\x84\xdf" ":\xc9\x62\xe4N\\,o\xd5\?\xf7\xa1\xb7\xa1\xd1\xca\x17\xb4\x9f\xb2k\x1a\xc5\xfe\xef\xb7\xfc\xd3\xec\x81\x13\xb3\x1fOVkT\x17\xd1\x96" "N\xa7\xc1\x45\x34\xda\xe2\xac\x00\xc8\x8a\x41\x44\x8c\xb3\xc0\x62\xef%\x88\xc8\x1a\x88\x1c\xb0G{t[\x16\xc2p\x0f\xf2\xa9\xa3\xbd\x02\x13\xfe" "\xd1\xbe\xfd\xb4\x9f\xc1m=\xda_\xbf\xea\xb0\x32:\xf8\x9d\x0e\xc0l\xf7\x9c\xbc\xd7\x9a(*\x65Q\x99\xc4\x14\x0fh\x97,\xb3'\x14\x95" "\xd3\x83\x1f\x12{\\\x81\x34\x43@\xa4\x8b\x16\xc5\x9bV\x10\x91\xd9\x14\xdd\x38\x41-\x39`Y\x30\xed\xd2\x45\x96\x8c\xa8\xccq\xb0\xb0\xcf\xbb" "q\xb2S\xc8\x84\x96Y\x03\x0bg\x13\x1a\xda\x44\x9c_:\xd3\xfe\xa2(\xf1\x0f$\x61\x05\xbc|\x44\x84\x9f]Tv\xbd\x18\xf7\x41\xae\xf9" "\x88N\xd8\xf3\x88\xac\xaf'\xf4\x30'\xd1\t\x43\x43\x08\xd1U\x89N\x34\xe6,\xc5sv\xd5#]\xe4\x92\x9e\x35X\x07\x44\xe7\xf4\xb8\x8e" "\xce\xe9\xfc\x1b]s\x62<\xba\x61\x00h\xe5\x8c\xec\xde\x33j\x82\x8ax\xe9\x37\xf4\xbf\x16\x62\xa5\xb0\xd0\xfeT\xfd\xce\x11\x1eJ\x44\xb4\xa6" " \xeb:\x88\xc5\xb8\x41\x11\x61\x32\x94\x43\x12\xb5\x96\x30\xba\x01\x39\xab$\xfc\x64\x1a\xf2\xee'\x39\xe0\xf9\xf9\x0f\x9e\xec\x86\xc6\x7f\x61\xe9\xdc" "\xc9\x1a\x1a\"\xbb\xe0\xd1\xad\xfcS\xde\xeb\x0c\xf6\xd4<\xeb\xa2\x07~\x91\x42^\xeb\x99\xe3|\x65\x9b\x84\x81U\xc8|\xb0\xe9k!\xaa\xe8" "\xc8\xf6#\x01i\xb2\xf2\x15 W\x85P\xc3&\x9e\x42\xac\x85\x14J\x19\x82\xf1\x32\xd2\xa8\x10 \x9d*\"\xdb\x16\x17\xb4\xcfP\x45\xee" "\x1b\x41\xb1\xf1\x15\x44|\xc2.\xe6\x83\x84\x1a\x96\xf3\x82\xe9\x99\x45\x9e\xa1\xd6\x0b)\xe7\xfc\xad\x10\x15\x8f\x10s\x97\xd1\xb3n\xa8\x86VY" "\x44t\xa5\xc0\xb0\x43\x8dhh\x95\x84\xdf|\x32\x8d\x33\xef\x7f\x80V\x10\x0c\x87\xb0\xfa\x04\xf4\x43\x81'\xbc\xe8\xd7\xb4\x94~sP+\x44" "\xb0\t\xe5\x9bq@\xce\xc6 #\x1e\x0b\xe1X\"\xfc\xe2\xdf\xa7\xd1;\t\x0b\xbdp\xc5\xf3\xe9\xd2&\xc4\xbe\xf0\xc2\x7f\?$\xcb\xd1w" "~\xd2&\x61\xe0\x16\x62\xab\x0e!\xfa\xb1\xa0\xd4\xed\xb4\xf2\x88\xb6<.\xeaxg\xdf\xec\xac\n\xd1\xa5\x17\xc2\x05L\xd8\xabHZ\x19\xeb" "\x02\x9a\xf6\x80\x83vo\x34}\xc4\x87+\x96\xe4z+&\x61\xcb\x13\xb2R\xfb^\xdf\xf3^\xec\x03\x81y\xed.\xdf\x61\x12\xad\x42\xf9^" "#tn\xf4\x8f\xc1l\xc0\xb0\xd3\xb3hO\xf8H\xff\x85\x89\x94\xc8\x16*\x80\xd6Pt\x19\x63\x30\xb2X\x9f\x91\x05\xf8\x04\xadVTq" "\x1d\?\xe7\xc7\xff\xa8\xc1\x8d-\xeaZ=\xd5\xcd\x30\xd0\x05-\xeb)\xde\xa4\x8b)\x35\xb6N]N\xcaG]\x0eU\x94#\xa7'\x46\x45" "\xef\xb7\x45={\x63\x03\x35\xfa\xb0\xb5\x18\x98\xb7\rV\x1f\xab\x36#\xe1\xac\x05\x66\xc3\xb1\x89-\x12{\x33\x81\xea\xf9\xb9\xfd\x41mn\xbf" "\xc2\xa7\x15\xd4\xa9\x01\x96\xd0\x81\xd5vJm\x1e\xb0\\\x02Z\x88mIM\x03J\xef\x04\xad\xfb\xc0\x98\xa7\xd0\xa4\xe3\x65u$\xb4\xf1\xfe" "\x86\xa6S/\x08\xa4H\xed\xa9\x96\x7fN\x82\xb6l\x31\x84\x8aj^\xf3\x0c\xd2\xd2\x94<,\x19\xfb\x05\xdc\x05UL\x9c\xf6\x92\x07\x32\xf8" "\xa6\x31[\x44\xd6\xcf\xca\xac\x36\xe5\x46\x05\xa2U\x8f\x34\x02\xc5i\xc7\xb4;g\xb6\xf7\xc8\xe5{\xaa\xadH\x18\xab\xc0\xe2\xe0\xde\xc4\xbaS" "\xe3#\x63h.\xda\x99%\xe4|\x9e\x9e\xc5\x14\x9b\x43\x1d\xef\xdf\\r\xb8\x87\x03\xe9v\x1b+S\xee\xfd\x80\x15#\x88\xf0t\x11\xf1\xfe" "\xdcI_\x08\x11\xe1\xe2\xacl\x92m{\xc0v\x9c\x46\x1f\xf9\x89\xfd\x61w_^\x32=TT\xfb&\xb1\x42Q\xe8/k#\xa6\x08\xb5" "\x7f\xcf\x41\xdc\x08/\xc2\x03\xf1~\x36\xdavm}\xb3_\xf4\x92\xf5]\x33\x7f\xa9\xd8\xb1\xfd\xbc\xbb\x15^.\xec`\xa0\xf4'\xb9\x9c\t" "\x9an\xce\xfb\xe0\xf7\x1b\xacK\xd5\x94\x15\xeb\x80}M\xa5\x9d;\xb5l\xb7\x12\xcd\x39\n\x90K\xff!\xae\xef\x1f\xb8,@\xb4\x65\xdd\xb9" "YV\x97\xf5\xac\x7f\x1e\xb4\x15\x0b\x46\xb6u\xef\xcc\x0f\x1e\x39\xe6\x86\x66\x9d\x02\x88\xab\x66\xf8\x61\xfb\xcc\xf8\x61\x9c\x38\xf3z#\xfd>\xda" "\xd0\x36\xce\x11-O\xee\x37\xb4\xa2\xc7\xaf\x95\xe1\xb8\x85V\xc4\x84(s\xa7\x1bZ\xd1\?v-\xfb\xb7\x64\x14S\xd1\xfc\x1c\x44|\x13z" "\x80\x17\x11\xad\x84g',\xc5\xfa\x66\x8f\x1f\xd3\xe3\x65\xd0\xce\?\x38\x1f\x41-z\x0f\xc9\xb9\xa9J\x61\xe1X\x45\xb4;\xe6\x63\xd6\x18i" "\xb4]+\x66\x9c\xaf\x05\x65\x30\x43\x83;\xb4\xf4\xec$$\xa6y$\x62\xf1\xfe\x66Z\x83|\x9a\xa6\x8dY\xf6\xf8\xb2\xa1\x15\x17,\x80\xd9" "\xeb\x95\xd3\xbfp\x1a\\\x84\x9f\xb7\xe1\x90\xd5~:u\xf0Xw\x91^x\x10\xf3\x9d\x98Q\xf3\x44\xfb\xb1t\xfe<:\xd5\x9e\xfcp\xb1" "\xa9\xbdn\xbb\xa6\x81\x01\xfe~S\xcd\x7f\x1bZ\x32\xe0\x9f\"\x1c\xdb\xab\xb2\n\xd7\xeaz\x65\xda\x18Y\x17X\xb5|\xf7\x31m\xb0\xf0g" "\x91\x31>v\xeaR\xaf\x83\xbei=rj\xf9\xb4\x11\x1dG\xb4\x05\xeb$N\x44\x81\x9e\x1d\xdc\xeaJXo\x38\xb5xYI\xb3^\xd8" " o\xf2\x41\x18t\x42\xf8\xce\x84\xe7\x1f\x0b\r^\xba\xc5\x0f\xc2+\\\xebJ\x0f\xf2\x11k\n\xeb\xb0\r\xfe:l\x03\xeb\xb0\r\xfe:" "l\x03\xfaH\x46\x03\xc6\xd4\x01\xf3\xe3\xed &\x07\x34\xc9\x8bV\x1a\x15\xfd\x17/\xbc\xfe\xe7\xf4\x96\x12^\xde;\xc3O\xf5S\xa7\x86\x93" "\xbf\xbd\x0b\xda\xaa\xb9\xde\xb6[\xd8\xd7\xc9\xc0\x10\xe0\xe6M\x9e\?\x34\xd4\xd3\x01\x8b\xbf\xf4\x13\x9d\xe1\x16\x1f\xac\x8a\x65\x0c\xbf\xf1\xa9\x17\xbd" "\x83M\r~\xef\xca\xb2S~\xcdO\xa2M\xed\xaa\xbd\xa1\xfd\xfd\xa5\x9d\x33\xb5\xbb\xad\x98\x13\xf4\xe9P\xde\x19\x9f\xc8\x1d\xbe\x10.\xa0\x10" "\x1e\xb0Tr\r\xb5\xf0\x8a\xb9\xaf\x33\xc6\xf2\x35\x95/\x36\x34\x06\xeeP\x8d/\xd1\xab}\x86\xba\x8d\x86\xf4\x43\x88\x86\xd6\x06\x0e\xad\x9d\x1b" "Z\xff\x65\xc8\xb8\x02\x42\x04\xda\x8d\"\xe9\x65\x18\xaf\xa5_\x45\xb7,\xd5\x66\xce\x10\x13\xc0\x35\xcb\xa7\xc8z\xac\xb6@G\xd9rZ\xad\x1f" "\xd1\x43\x45\xc8\xa2\x11m\x06P\x88\":\x1c(\xf7\x8dm\x63\x42\x96\xeei\xa8\xa4\x88\x95\x8f\"\xc2^\xa7\x9c\x90\xa7v\n\xc2\x30\x08\xcf" "\x0e\x9d\xd6Z\x44\x98\xcc\xbct\x31\\S\x44\x84\x62\xe5\x94\x1c\x0f\x9c\x9e\x64G\x7fg\x9e\xf6\x83\x08\x63\x12\xc5\x87r\x36Xl\xfeQK" "JR\x87\xfb\x03\xe3\x80v(\x1e\xc3U\xe8\x43\x43\xb1zh\x86\x13h\xeeYM\xcdg\xed\xa8\r\x87.\x9a\xc9\x05\xa2\x46]<\x93\x42" "\x9cwm\xcf\x18>\xe7\x8em\xde\r\x8d\xf6(\x15O\x8c\x9e\x0b\x15\xce\xdc\xa9\xf8J^\xd8)\x97vJ\xd3\x9e\xb2\x63I\x8e\x8dln" "#\xebk\x45\xfeH\x1a^\x10\xc1\xf7\"\xf3\xb7\x17\x96y\xc9\xacz\x41\x9euH\xcc\xcd\x44\xea>\xefW\xb7\x66\x46i\x9d\xe4\xc8L<" "J\x7fl\x1a\xe7\x85\xfd\xf7\xbc\xb4\xeb\xcf\xa9\xcd\xc3K\x10\x43\x64\x0c\xd1\x06\x0f\xe4\xcf\x89\x93\x1e\xd0\x91:/[\?\x39\x62\x64\x0c\xf0o" "\x38\x17\x65\xd1\x81\xf3\xbfG\xb3\x9b\xde\xfa\xfe\xc1\x35\x9d~\xc5V\x39\xd0\x64\x30I/\x1c\xd5\"\xa7\xe7\xb4\xf4\x38H\x9a\x9c\xa2\x10$\x43" "\xc4\x1a\x33\x9b\x1e\x62\xc2\x19_h>\xc7\x97\x1bq\t\xbd\xf0\x82\xcf\xc9 \x1a\x42\x0e.\x95~)\x8d\xb3hW\xb1\xe1Y\xc4\x85\x94\x42" "\x0e\xc1\"\x86.\x15\xce\xec\xaa\xab\x92\xb1\x61\x9c:\xa5{\xcb%yQ$\x35\xd6\xc6\xf3\xad_\xce\x9d\xfe=\xd8(;Z\x7f\xa1\x84L" "\xcd\x00\x37\x35\xb3\xdf\x34\xab\xff\xcb\xea\x91\x19\x35\xa6\xdc\xb4 \x9aZ#\?\xa5\x8f\x9eP\xfe\x30\xde\xa2\xc7\x8dh\xcc\x88\xa9\x8d\xaa\xa7\xf4" "\x03\x11\xc2\xa5N\x08\xebh\x94\xfc\x62yT\x64[)\x08Y!%\xbf\xb4\xd0%V\x9f\x08\xc7i\xe9\x34g\?.Ii J\x18\x0b" "\\\xf9\xe4\xb4\xefO\x45+}I\x9a -I\xf6p\xaf'\x9c\xf2\x1a\xea\x9dv\xfc\xb4>(S\x43x\x18!\x16)\t\x31\x43\x10%" "\xdc\x37JX\xda%\x9f\xae\xf5\xca\xf0\xe2\x12\xad\xcb\xd4r\r\xbap\x85\x02\x9c\x98!$)\x9e\x99\xfa\xa2\xbb$\x11\x18;J\xe8@&" "l\x9b>K\xf2]\\r\xce\x12\x13\xef\x87\xc0-*\x1e\x1a\xfb\xc6\x85\xf3wu\xccq\xb8hp\xee\x05\x35\x18\x35\xe6\x61T\xeb\x1ag" "$\xf2\x15\xcc\x1e\xdb\xdc\xd5T\xb5W\xa7\x46\xa2<\xe5}\xd3\xed\x95\x33\xdd\x9aq\xe7L\xd1\xf6\xef\x8c\x43\xe3\x98\xc4\xa6\xe5\xca\x86\x31\"" "\x61\x80T\x1e\x39\x39I\x05q\xdd\xee\xb2:P\xed$-\xd9\x35`\x96\x17\x1e\xde\x93G\x96\x12\xac\xcd\x07\xc3\x12\x41\xd5\xae\xc8\xeaU\xda" "\xfa\x36\xf1\xd1\xc9\xe1\xa0\x88\xfeT\xa7\?\x61\x41,\xb4\xfc#\x9c\xb0\x86\xc5O\xc4\xb3\xc6\xef\x92\xd9\xc9\xeaU\x88@\x8c \xed\x0e\"\xd6" "\x99{i\xf3\x15\x91\xe1Z\xa6\x31\xa7\x39\xd5(|\xac:i\x1d\x10\x11\xab\xfb\x84\xe8\xab+\xbfR\xac.\x87\x98\xb7\xaf)vn\xe8t" "-\x62\xf7\xc6\xa9\xbb\xe6^w\xd2\xee\x44\xde\x07[m=\xdc\x08O\xd9}\xe0\xd6\x7f*Z\x02\xba\x96'\xb0p\x83:\x46\x41s!Z" "\xff\x06\xd1\xf1\x46\xd4\x30\xa8\x03\xb9 M\x44\xb4\x1f\xc2\xe9\xd0\xa9\xc1\"\xae,[\xa6,\x8b^\x92\xd2\xc4\xder\x62o\x7fiI\\\xda" "U\x30\xb0\x03\xd3\xde\x33\r\\\xd0\xa4\xfb\xeb\x8f\xc3\x88\x15\xc2\xa3o'\x87y*\xdaO\xe5\x03'w\x8f\x10\xd1\x43\xbe\x8bxu\xebL" "\x97|hN\x13\x83\x1b\xdf\x8ch\xba\x15-\xac\xa3\xb1\xed\x1d\xa3\xfc$o\xaa\xfc\x90\x45\x44U\xa9\xec;\x39\xbe\x15\xb1\x31M\x87I\xb8" "u\xb3n\xbc\x37~;uXk\xe5\x39{|\xca\xbe\xecI\xd0\xdd\x07\x83K\x8chO\x96\x94'{\xb8\x36\?\xba\xec\x1f\x8bm\xd6\x39" "I\xdfn\x8b\xc3\x07\xd3^\x9d\x92\xff\x0c\x0c\x1e\x34\x98\x00\xe2}\x7f\xc3\xa1\xd1\xa5\xd8\x9b\xb9Hk\x06\xc4\xe2\xf9\x96\x1e\xf5\xd0h\xaf\x16" "q\xf0hl\x39\xf5\x15\xfau\xfd\xcf=\x04#\xc4p\x19\x88\x7f\?\xf0\xfb\xa7\x8f\x8a\xf2\xc5\xf8\x45z\x9a}\xff\x42\x8a'\xd7\x41\xac|" "\x33\xc0\x02\x35\x7f\x39\xba\xc5q\xdb\xc5\xe2\xa5\x1c\xc4\x85\xbd\xaa\x91\xbd\x1c\xdf{J\xc4\xb1\xdd\n\x9d\tP\x07\xc8\xe1\xe8\x9b\x33\xa4}\x62" "O\?y\x37\xb2\x08\xd3\xfa\xae\x91%\xf7\x9d\xf2\xd2\xc2{\x8b\xd5\xcd\x97m\x30\xa2O\x32\x12%\xb5)+Lz~\x80\x1a\x9c\xa7i\xe5" "\x63n%}\xb9g\xfb\x45H\x14!\xfcT\xe3\x33\x9d\x8cX\x0c\xd3\x97]j\xec\xdb\x9dq\xd3\x0f\xe1\xcb\x03\xd9\xba#\xb1\xb6" "\x43\x38\x38\xa4\xdb\x95\x88\xd8\xfaU\x89\x17x\x96\xed\xbf\x90\x18\xc2\n\xa5Q\xc7\xa4\x38\x44\xce\xfa\x8b\xc8v\xf0\x8c\x61\xb1\x85\x18\xaa\n\x31" "\xac\x17\xb2-=\xa3\r]\xf8\x63\x1c\xdb\xef\x91\xe9\x18\x11\n\x63\xbb[\xc2\xe3\xf9\xc1\x1e\t\xf7I!\x62\\\xc7g\xdc\x63MX\x1an" "<\xb6\x86\xb9\x97\xff\x99\xabg\xc5\xcb\x37\x39)\x93\xabs\xa7\?\x34\x07u\xf1\xd9\xfa\xb6\x42\xa3\xbe\x88wL\xc1\xba\xf9\x93\x7f\xf7\xd2-" "\x66\x37g\x42\xe3s\x06\xb1\x89k\x9c\x9d\x14r@P\xb3zR\xa9\xde\x98\x98\x43\x86\x96.\xeb\xae\x31\xfa\x91\xd0u\xb6v\x35\xeb\xcc\xd6" "\xecs\xafq\x46S\x88\xe5G\x42\x36\xa3\x35.\xb4\x17\xd6V$\xab\xfe\x1a\xb7>\x14vN\xc8\xbe\xe9\x83\x86\x33\x9cj\xc9\xa7\x99\x35\xae" "Y\x93V\xa3G\xae\x10\x33\x87\xc2\xe4T\x0eYo\xbe\x46\x43\xaep\xb5\xed\xdcxH\xd1\x36\x1e\x92\xe1\x8e\x94S\xa7U\x35\x35:\x36\xc6" "\xb5\xf5\xc5\xa7\x93\xe3\xf2\xd8\"\x1d\x82\xeb\xf9-\xa3\xa8\x89\xd6\x8cI\xea\xd7vV\x9d\xf3yq\x9d\xe3V!G=u\xce\xb3\x80\xd6\x63" "\xa8\x87]} \xd2\x13I\x44\xf6r\xea\xf6y\xd4\x39\xa3\x14\xdb\x82\x03!\x66\xf1\x84\xecw\xd5i\x37\x17\xb2\xcbR\xcf\x10\xf7\x05\xb4~" "\x11\xc4\xd7\t\xc5\x39\xef\x92\xbf\x30\xb9\x36\xc4\xac[\x61\xab\xd3\xda\t\xd2\x1b\x0c\xa2\xdf[\x44O\xb1\x88V\x03\xdc\xd3\xce\x10\xdfs\x1a\x36" "\xbe\xb7\x94)\xad\x18=Y\"\x9fh\r\xf0\xcd\x0c\x84\x1d$\xfa\x39\xdd.\x91\x08\xad(\x44\xa0\xc0\xf8\xd9\xca\xc6\x33\x83\x88\t\x31\xd7 " "\x1c<:\xc3l\xadh\xec\x82*\xc3\xee\xd5\xd0t\xd3w,S\x13\x8d\xd5\xe5\xb3\xfc\xa3#x\xfcl\xc5\x41i\x9f\xce\x33\x17V\xc4\xe6" "\xef\n\x86\xb3VL*\x17z\xc5\xaf\x34i\n\xef\xeb\xe4\xd3\x01\t\x03Y\xfcJS$\xc8\xcd\x1e \xae/'\xd6gy\xb5\xce\xf0k" "\xc6\x91\xf9+\xf7\xd5\x8c[\x96R%g\x17\x45\\\xb6\xb3\xe7s.w\x8e\xdb:j\xe4x\xf8\xf3w\xea|\x32\"q\x9f\xe9\x61)\xbb" "\xee\x31\xbe\xa3h|\xa3\x9f\x34'\x0b\xcf\x1eH\x0eq\x95\xf6\xa6!\"\\\x80\x88\x97m\xbf\r\x45\x86\x36\x11\xed\xf3\x88\x44`\xca\xd8\xc2" "V\x82\xe9\xecQ\x9d\x83w>\x36~\xcb\xae\x0e\xd3Y-h\xfd\x1a\xcd\xb9\xaaM\x38\xa9\xaa\xe2\x8a\xec\xcf\x19\xd5\x42\x44L}*\xf7I" "\xc4\x85\x01\xad\xf2\xf9\xb4\x41\xab\x46U \xe3\xdd\xb4_\xe3\x1a\xfb\rM\xaa\n\xb5\xdc\xed\xffK\xe7[\xf4\\\xf2\x1f\xb9\xf8\x16\xda\x9fh" "\x39\x88\xa0*\x1e\x9d\x01\xcc^z\x1b\x1a'\x33(\xc2\xf9L\xc4%-\xe4\xccm\xcfR\xce\x1d\x82i\xf7\x8e\xb3=\xd0\x8a\xbd#\xfa\x85" "\x8av\xb5\xef\xcc\x1f\xdb\x36\x66U\xad\xd8:\xd9<\x80\xedH\xc0t\xef\xc2:\x44\xd0\xe4Y\xfe\x34\xb5\xc9\x62\x31+\x34\xb9\xc4\xdfo=" "\x7f\xce\xec\xee\xda\xa9]\xcb\x9b\xb6i|\xf7\xd9\x63\xcd\x99]\xbdy\xb9\x61h\?!\?\xf4O\xfb\x1a\?\x83\x33$\x45\xf7\x86P\xad\xe5" "\x0c\xabi\x45\x1b\x1e\x39\xcd\x46\xf2I\xa7;\xe1\x84\xf9\xcb\xd8\xec\xc2\xe9\x8a\x01\x97(\x62{.\x8a\xf6\"l,\xf3\x99\xef\x9b~\x34\x95" "\?\xa0\x0f\x9ch\xd7L \xfd\xf1\x84l\x34>\xb9\x1e\x12\xfc]u\x8a\xee\xa7k\xe9\xaa\xb2\xa1\x65\xdb\x1d\xf9\xf9\xbfZ\xf8\xb9\xc6\x0c." "\x9e\x98\x8f\x34\xec\x82!\x96\x81h\xef|\xd4\xa2\xc7\x87\xb0J\xe4\xd3z\xcd\x9f\xfe\x62\xac\xf7\xfa\xb9~\x66\xc6q\xc1\x8e\xb0=p\xca\x08" "\x97\x9b)\x89&\xd5\xda\xd1\x90\xf1\x94\xa9-z\x7f\xda\x87\x33;=\xa3_\xadh\x9fx\xe0\x8e|\xc5\x61\xe1\xbbju\xe7\xdfK\xeb\xd8" ";\xe9\xfc\xd9\xad:\xf6\xc2;V\xd1v\xac\x8f\xd9\xa1\x9b\x0c\xe8\xa7J{\xa8\xcey\x98\xb6\x0f\x1a\xbf\x80\x1e\xf7\xa3\x15\xceZt\xafP" "q\x46\xb2\xf5\xeaqZIx\xc0\?\xb1\x61\x9f\x92\x0b\xb5 r\x8eM\xe3\x8d\xd4\x9dv\xff^`\xa5\xee\x0c\x87\xd8\xc8\xf4\x42\xfc^\x8a" "\xf2\x98\xacOz\x9c\x32\x12\x62\xd2\x45\x88U]\x42\xec\x38)\x44\xdc.\xe5\x13\x89\x15O\x42\xb8`\nix\xeb\x85\x94\xb2\xc2\xec\x31\x14" "\x98\xd2\xee\x43\x9bQO\x17\x84\x35\x0f\xe9!\xaf\x1a\xdeQ/\x1b\x1c\x93\xac\xfc{\xd9r\xe8\xa4\xd9\xdb\x45\xad\xd1X\xf5\xe2\x80%^\xc5" "\xb3\x13\xfa\xbcR\x0b\xaf\x16Z\xd4N\xdf\xf1u\xf4\xf2{\xe6G\xb1\xc3<.\x0ey\x85\xa2<\xf8\xb3\xa9\xf5\n\x1a[{\x66X\xee\xad" "w\xba$\xd6,\n\xe1\xd6\x0c\xfam\x18Z\x00\x64\x08:\xd5~\xac\xfbm\xd1\x87\x8a-\x14\xa1\x11]\xe0\xe2\x11\x17w\t\xf7\xafH\x38" "%\x80\\\xce-\"& \x84l\x19\x46~|\xfd\xd5N\xdb\x35\xabU\x62\xae\xc3\x00\xd7\xaf\x0f\xf9\xb8K\r\x1e{ \x63RQ\x64/" "\x37\xa6\xcbNl\x31\x10\x94\xe7\xd9\xee\xb1=\x46l\x65T\xa9\xf1\x9a\xe1\x9d%Zr\xeb\xb4\xe7V\xb1\xe8\xd5)\xd2\xea\x10\xff.\x9f\x9c" "\xeb\xafs.(\x8e\x63\xc6\x11\x14\x96\x12\xa7_\x43\x44\xce\xc6\xb9\xc8\xcd\x18\xa0Y\xa7\xd5\x44+\x9dqz\xb8\xeb\x84\xcf\x07\x93\x45/~" "\x30\xbd\x34\xb1\xcc\x94sQ\x1fh]\xb9\x98Kl\x84g\x8f\xf2\x04\xfe\xc0\x9eS\x42\xfa\x91\x88\xc8\xdeMl&\xf8\xd8\x8a\xbc\x32\xeb\xc8" "\xbf\x36\xb5\xde\x9c\xec\xdb\x85\xe0\x64\x04\xe6Uo>\xe2\x14\x9b\xc7\x0b\xe7\x65RM\xc3\x97\x66\xa5Rm\xfdUv-;\xf8t\xfaK\xa3" "\xe7\x1e\xf8\x1b\x1f\x65\x37\xef\x41\x9b\xcd\xb8\x0e\x0f\xda\xc6\xe9\x1a\x14\xb7\xd7w-\xfb\xfb\xc1\x86 *r\x12\x1d\xa2g\x8e\x8a\xaf\x7f\x62w" "\x99\xb6J\x41\xeb\xd9\x8d\x8e\xca\xce\xb4\xbd\x30\xf3\x46\x9c\x1d[\x12\xb1W\x89\xd0^\xa0\x35\xb7\x31\xd7\xec\t\x9fJN\x8d\xa9m\xb9\xa6\x9a" "\x8b\x1c>)\xd5)n\xeb)h\x1b\xdb\x31\xc6\xb1\xe7\xac\xf6\xc0\x39\x06\x88\x39\x17\r\x86\xa7\x1c\x0e\xc3\x1f\x88\x88X\xa4\x14_[.\xae" "\xaf\x9a\x41\xe4\xdcH\x9cs\xf6\x43\xe9\x05\x44\x44/\xb7\"z\")\x9aQ]\x35\r\x62\xce\x46%\x36[\x63,\xefU\xden\x46\xd3S" "l\xb6\x85\x98\xbb\r\x82\x9c-\x37m\x41\xbe\xf3W\xeb\x91\xc7\\\x98\xab\x9c\x39\xbd\x98\x8a\xc8\r')\x36\xc3\t\xfe\xd2\xe9\x18\x0bz^" "\x14\r\xbb\\sG_\xec\xfd$h\x08\xfeM\x8d}w\xa5.R\x81{/\xb4p\x91\xe7\xbaSN\xa0_\xa4hX<\nz~\xa9" "\xc8\x9eM\xcc\xd9^\xa1\x95%\x61H<\x44\xeb\x30\xab\x16\xee\xd3\x1b\x85M\x35\x45\xeb\x1f\xea\x96\x98O\x96/\xac\xa9\x63\xae:\x10\"<" "\xb8p\xf9\x80\x30\xbcv\x17v\x45\xe2\xf5V\x83\xac=\xa7O\xacI\xd6w\xfc|\xb5\xc6\xe2$\x9f\x8a\x1a\xc5\x14\xf1\xfe\x44\xc3\xe2\xe1\xd8" "\xe6\xed\x41\x35\xd4\x61^=\x9e\xc9\xa0\x44\x9d,\xb1H\x38\x9e\xd9[\x9c\xa5}\x94\x87\x19J\xec\x8c\xdb#@Sk\x1c|Z\x45\x8bg" "\xc5\xc9\xb7\xcd\x84\xce\x02\xe1T$|\? i\xc8\x9c\xd1\xa6\x32\xdd\x93v\x90\x1d\x13\x17\xa5:(\xde/\xb2\xd1\x0f\x8e\t\xd9\x10\x8b\x08" "_\xad\xe9Q\x86\x0e\xd0\xb4\xc2\rR\x84\x18\x43\x0b\xa7\xda\xf0O\xabl\x07\xa6\x35Z\\\x85\xb0\xfdOkt\xdb\x9f\xdan\xee\x42|\x07" "\xd3k:\xc5\x80\xea\x39\x89\xb1\xb5h\xe8\xc3\x80l`\x44\xd4\x80\xa9\xef\xb4\x1d@\xd3p\xcb\xed\xd8\x34\xbb\xd8\x46\x18T\xd1\xd0i\x01\xc3" "\x45\xd0=\x11\x62\xf8#\x84\x85P\x08\xdb\xf6\xf4\x9a\xb5\x80\xf0g\xee\xf4\xabqY\x81r\x41\xa2\x03\x07\xfa\xed\x19\x65mz\xcd\xd1\xa6\xf0" "\xaa\x46\xfe\x33&|\xd6|\xc9K\xf9\xd3r\xe1\x1e\xe8\t\x65<\xa8\xe9\x35\xa3\x37\x81~\x17\xfa\xb9Lo\x18_\x18\xb4\x9fn\xec\xafo" "\x38\x9f,\x44\xbd#\x44\xf3%\xac\xd4\x43\x1fV\xb4\xb7].\x63\x10\x11\x41\x9e\xa7\x37\xd9\xf3\x8e\x14\x11+\x12\xaa\x85]%Tk;\xfd" "~\x1c\xc5\x08Y\x38\x94\xa1\xcb\x34\xbd\xf1\x8b\xe7\x98)\x9f\xdep\x62P\xc8\xc7U\xae\xf7v\x34n\xd7_\x9a\xe8\xb6\x31\xbd\xa1\xb7\xb8\x30" "\xa9\x39\xff\x92\xd2\xb0\xfb\x36\x36\x87L\xd4\xe2\xc3\xe2\x64W^\x19\xdd\xc3p\x8c\xc6\x31\x11\xf9T\x8d\x30\xdb\x36\xb5\xa0\xbe\xd3G\x9a\x63\xa6" "\xb6\xb0xj\x0b\x8a\xa7\x8f\xfcH\xa7\xdf\xeb;\x64O\x97\xe6NP\xbf>\x04:\x9bv\xe9\xa7\x31\xed\xd2s\x61\xba\xfc\x65\x9a\x97V\x88" "\x97\x96;\xcb\xbc\x8a\x84,\xed\x9d.\xff\xde\xe9r=\xd4zG\xc6\x66p\x00\x10\xc2\xbdZ\x88\xd0\x45\xa0\xa5q\x95~\x1e\x90\x98\xc0\xf4" "\x91\x9d\x0f\xeb@\x36`\x14;\xe1(G\xdd\x14\x31\xea\x9e\xae\xb8jI\x38ysr\xf2P\x44_\xc6%\x62|\"\xffL\xfc$\xe7G" "\xf2\x0f\"\x87\x91\xc2\xb3\xdd\x30\xe6\x17\xed\xfa\xd5\x38%\xe1%&\xbc\xe3\x83\xb2\xe9\x14\x62\xb6^\x88\xb0P\xd3\x15\x8di ]j\x44\x44" "\x80\x9f\xd9\xae\xba&\x1d\x9e\xb1h\x8b\x06\xa7\x17\xe1\xacZ\xdcms\xb9\xfel\x97u\xae\xd0\xceJ\x0f\x86\xe4\xfd=\x89\xc0\x0f\x42\x38\x98" "\xcfv\x33L\xc9+_\x41\xbeJ!\xc2\x8c\n\xaf\x9f\x9d\xb4I\xccv\x19]S\x38j\x83\x9c\x03R\xea{\x98\x99\xeb\xbf\xb0\xbfG\xce" "\xf1\xfb\xbe\xdd\xc2&\x95\x85\xb0\xae\t\x87srt\x41\xa2J\x12\xc2;u\xb6\xcf\x45\xb5\xc2q\xc4>\x8f\x88\xab\x18\xe4Pxv\xc0)" "\xd7\xd9\x11\xeb\xda\xd9)\x17'\xcf\xce\xfeg\x37)\xc6\xd7\x9c\x62\x9c\x9d\xb1\x66\x16&\xaf\xf9\xd3\x36\x44K\xeb\x99\xc6\xf2\x87\xbb\x84\x88\x8f" "U'\x0b\xa7\x88\xb0,\xce\xce\xb2\xeeq\x36Z\xa6\xd8\n@\xb4\xbe\x1a\x36\xf9\xbd\x8a\x36(\x39\xfd\xcf\x38\xaa\x10\x8ey\x33\xb8\x0eos" "\xfc)\x1a\xe6\x91\xe9\xe8\xe2\x1a\xe7\xb0\x83\x86Y\x61\xd1\xf0\x31\x82Z\x04\xae;\x1b\x1a\x1d\x82\xa1\x65\xcd\x7f\x9c\xff\x85\xa6\xcb\x44\x99[g" "\x9c\xc9\x05\xb5\xb2\xb8\xe7\x1ds\xf8\xa6\x08\x1b|n\xcf\x12\xdd\xb7n\x86\x02wV\x94\xbe\x9c\x9ew\x0c\xf3\x30\xd3\x39\x89\xbfg\xb9I\xf7" "\x0f\xc3>\x1f\xb3\x1b\xba\x46\xccn\x18y\x65\xd6\xe4\xd2\x31P\x1b'\xc4{\x10\r\xa5{\xd6\x64\xfb'\x84\xc7\x34\xc8>\x17\x44\xf6Y " "\xae\x1fx\x19{gM\xfa}\n//\xc8\xa6]\x10\x9d\x06!|O\x84,\x7fM\xc6\xd9\x11\xd6\x07~/\x9a\x86\x85\x18\xaf\x82\xf4\xd7" "\x83\xc8\r{\x45\xc4\\\x89\xfc\x84~\x87\x10!@\xe5\xf7\x9d#\xe3\xa7\xb3\x38\xe0\xbd\xb8\x0f\x96\xf0\x90i\x61w\xea\xef\x92l\xdd@N" "\x19\xa8\xb8$\x61U\x9f\x35-o\x9b\xeb\xe7$+W\x18\xdao\xf6\xc8\xde\xc8\xec\x91\xfd\xf1\x99m\xff#\x9c=\x92\x08\x62\x35{\xa4\xef" "\xe0\xec\xc5\xde\x9bR\xf7(\x46\r(\x1a\x1cm\x84\x0b\x9e\x95n\xcdI\x66\xad\x32X^g/\xf6\x81\xbe\x64\xa3/\xda\xe0\x45\x64\x91V" "\xa6\x9d\x9a\x8b\xe1WLv\xcd^\xf2%oN\xfb\x96\x10\xdd\xc6\xd9\x0b\xa7-\x66m\xee\x8e&\\\x1d\x83\x1a\x0f\xfe\xec$\x65\xc1\xb0U" "\xfe\xb3w\xce\x92\xcc\xbe\xd8\x9b\x01\xd9\xcc\x8b\x88\xf9NP{\x98\xd5\x13j\xe8\xdb\x80\xe1\x44\x38\x42\xcc\xbe\xec\x9a\x16\xf8\x43\x08\x87\x0c!" "VZ\x82\xf6\xf5\xaa\xc8\x19\xe7\xd9\x17\x83n\xcel\xc3\x9e\xd9\x17G\x88\xc2\x64\x8f\xde\xed\xb3\x1e\xe3\x95\xcczl\x98\x85\xbc\x81\xf2\x37\xb1" "m\xef\xa0\xa5\xcb\x9d\r-\x1b\xfci\x7f\xcc\?-\xde\xeel\x84\xa5\xf7}\x17i\x1a\x84\xb8\xbeX\x06\xf1r\x42\xb1r\xc5u\xd8\xb3\x91" "=\xe7(\xaf\xfd\xe4\xbbH\xf4h\xbd\x1f;\xe9t+\xe2\xc5G\x0e\xd7\xcb\xd9\x84\xd3\xdc\x42\x96\x97\t\x87\r\xb3\t\xa7\xa4\x84h\x15\x85" "\x98i\x12\xc2\xd9Z\x88u)\xa0%y\xc2\x16p\x36\xb1\xf6\x62\x62i\x99\xb0\xef \xc4\x9aw!\xa6\xb4\x84R_\xf9\xa9\x88\x9e\x31\x9b" "X\x8d\x35\x61\xe8V\xe1\xde\x8b'H\x44N\x11\xe4\xd7K\x9a\x66\xe5\xd8\x89\x9d\x86\xd0W\xa0\xc6\xb0\x82\x9b\xadh\xcf[\xce\xf0\x07\x88\x89" "\x05\xda\x8b\x83h\t\xd7\xdd\xe7,\x41\"Z\x9eO,k'\xeb}\xcf\x9c(\xad\xaa\xbdi\x36\xb3L\x9b\xa5l\x84gi\x17\x1f\xe7\x8c" "\x46'\x61\xef\x96\x64N\xcc\xb8\xb6\x63\xb6`\x0c\xb7\x64\x9b~x\x42\x14\\\x0f\x44\x03j\x8f\x1fk$\x45\x9bj\xcd\x04\x0bRR\x62\xdf" "\x37)\xb1\x83\x9b\x94X\x1f$%.\xe9\x10\xce\xf7\x41.\xb1H\xcat\x93K\xcat\xb1\x07\xb9\xe4\x93\"\xac\x62\x10\xf9\xb8\"\x62\xa1p" "R\xce\x8e\xfa$zH\xc2\x84\x17\xa2+UR.v~\xc8\xe3\x05Y\xbbt\xae\xef\x96\x1c\xa6\x8a\x86\x9e!\xc8\x92\x44\xd1RP\x8c\x66" "N\xcb\x8a\x32k\xbf\xe4\x9c\xab\xdd\x95\x95\xb4\xf6\xcezZ\x34T\x11\xc9y\xbau\x41\xa2\x94\nQ\xaf\x83l\x38\x44\x44\x95\x06\x16\xd1\x39" "k(\xd1\x0e\xed\x44X\xba\xc0\xec\xfc\x93\xe1,\xa1\x15\x8bQv\xc4$\x30h\x92\x10\x41\x93\x84\x98\xb4S>\x93\xe8\x1d\x08\xd1\xce$\xe7" "\xa1}\x11\xf1\xfe\xc0\xc8K\xd1V#|\xe9\x91h\x7f\x84\x1f\xbc\x14m` [\x8c\xc4\xb6\x81\x04\xc3U\xb0\x98N\x88\x0fN\xc8Ws" "\xee\xb9\x13\x1a\x34\x11\x13\xa6\x9d=o!z\x9f\x42xR\x0b\xe1\xd5\x02r}\x82\x88\xb0\xa3\x08\xdf\x8d\x1f\x0b'\x87\xac\x10\xad\xdc\x41<" "\xb9\x0e\xe2i\x8f\x9bs\x43\xa3\x91M\xc4o\xa6;\xdc\xe1gI\x62k{\xf0w\xfe\xe0\"m\x96&\xce\\\xa4\x93\x34\x44\x7f\xb3*\xfa" "\xb6\x34\xc9\x39\x37M\xd6\xa8\x35G\xc6\x01\xc9\x02\x7f^\xa0\x43\xac\x64\xce\x14\x87'\xe4\x19\x1f\x8f\xd6\x19\xd0\x0b\x89\xbf\x82\"j\x91\x8b\x37" "g\xde~`\xd8M\xd5\xba\xce<\x61\xee\xb2\x9dK\x42i\x93\x81[\x8ap\t.\x86\xf9g\?\x90o\x7f\xebU\xbf\xf9\x62\xe9\x00)\xbc" "\x61\x89Z\xdfVH\x98\x10@\xcf%\x15\xadX\x88\x98\x8f^\xc2=\x1b_\x9eQ*\"\x06\x30\xc5\xbf<\xe3@\x1a\xf4w\xb3\xb6\x02\xc1" "X\xe6`\xfa\xf0\xed\"\xcd\\I\x8d\xb1\x89\x41\xe9\xd4\xd1\x85\x07\x9an\x12\xf7\xa7\x89h\xd9Z\xcb\x30$\x04\xf5S\xee/\x36\x34\xf6h" "]\xcb\xbf\xff\xa3\xa1\x7f\x9b\\Y\xbdp\x45\x1f\x12\x90\xad\xb3\x88\xac\x35\xaf\xb2\xeb^\x31\xbag\x10\xa4\xe4*\xaf\x96\xd7\x37\xf8>\xeeh" "q\x11\xc2O\x36\xb9\xb3Z\xe3.=\xdcr\xda\x37\xad\"{u\x89m\xcf&\x64\x66\xdd\xfd\xa7\x8a\x80\xc6\xef\xff\xee\?\xb5\xc5\x9d\xd5\x12" "w\xec\x8d\n\xdb\xa7$z\xa5\xe0\xe6\xd9\x98\xea\x16\x0e\xec\xac\xb9%i\xf1\xc9U\x1f\".\x99\x34\xfa\x04\x08\x9bLOv\xff\x44>\x0e" "\x36.h\xd5\x85\x92\x43>\x11\x31\x91*\xc4\xc6%\xcai\xbe_\xa5\xc1G\x34\xd6\x10\xc2;\xa7Tx)\xf6\x46\x86\x16\x06\x12\xc9]\xbe" "\xfbm\xec\x90\xa7O\xce\x8d$\xb0\x07-\xbcl\x86^\x39\x34\x19SrU\x8ch\xf7|N\xab\x7f\xee\xb8\x0b\x99\x10k\r\xe5\xa6\xfc*" "\xef<\x13\xd8oVv\x8d|L\xf6\xa3\x85\xfc\xe2\xee\xd8yN\xee\xb8'\t\xb8\x91\xb2\xf5\xe5+)_\n\x13\xf9\x90\x9eUI\x44\x82" "H\x1e\xb2\xe6#\xfd\x38\x12\x0b\xba\x96\xd8\x33m,\xcaO''q \xe6\xd3\xed\r\x8d[\xa1$\xe6\xc4\x04j\xfc\x06\x04\xf4\x11\xad\x63Y\xd9\xb7+\x0e,\?Ym<" "\xeb\"\xfb\xed\n\xdd\x66\x45\xfb\xd9&\xa3\x07'\xc7\x41\x14\xad\xe4\x88H;\x9c\x88\xb0\xa0)\xad\xb0`\xed\x90p\xf6\xee\x44@\x0eK\xed" "\xe2\x32\x45\x07X\xc4\xd5\xae\x33\xfb\xf7\x92^\xb3\x0cr\x66\x06\xfc]\x85s\xb8\x64WxT\x36^\xca\xfft\xd4\x16\xad\xdcp\x32\xe2\xb1" "\x8b\x45\xff-=\xad\xe7\xd8\x15S\x8f\x31\x45t\x66\x11\xd6\xed\xcfoz\x64\xf3\xd0x\xe4\xe4n\xab*V\x8cvyV\xdf\x42\xfb\xd3g" "\x96\x90lp\xe4L\xf7\?R\x18\x1dU{\xf4\xd7\xca\xb9\x01\x30m,\\\xf4\xbcT\xb1\xde]\xbf\xb0\x30\xd3\x84\x03\x86iq\xd1\xfcJ" "\xc9\xb3s#S\x35Wn\x13z\"Q\x63\xa7\xed\x99\x61\x8d\x44\xc7\xe8\xe8\?g\xf9)\xdc\x10\x44yh\xbcq\xe6w\x07\xdc\xb4O\xb5" "\xae\x33\?\x1b\xe6g\xfb\x41\xbb\xee\xe6\xf5\x8ak\x45\xe5 {\xe3k\xe1\x9e\xd3\xc2\x17\xe6\x37\xd7\xb0\t{\xbc\x12\x63\x8d\xfbs\x15{\xe7" "\xc6\xd8\xa9\xdbV\x1e\x0f\\\xc3\xbe\x84/\x41{\xad\xd2#[\xb4\xfd\x9aS\xaa\x86t\x35\xd8\xd0\xe8\t\xe2\x1aGu\xaaM\x9dR(\xf2" "\xef'\xd7\xf2\xa3\x97\xf5\xd7]\xd0\xcag\xf9\xf5y\xd0\x92S\x06j\x14\xed\xf0\x64\x33m\x87\x63\xf2\x99\xcf\xe9\x15W\xf1r-\x15\x0e\x1d" "\xbe\x45\xeb\xb1P\x14\xa3\xc7\xa2\x12\x99\xc8R\xc4\x90\xae\xa0W\xd5\"\x32v\x82\x88X\x83\t\xea|\xf2#\xbf\x8c\x62\xb1pJ>r\x9e" ",y\xa6\x8f\x84\xf0\x62\xe0\xa9\xb0~\xa1\x32;\xde\xcb\xaeY\xadX/N\xb9\x91\x46\xed\xd3\xcd^h\\\x13\xed\x05\x15H\xcb\xf4\x96\x35" "\x0f\x16\x1eS\x88]\x18\x84\xac|\xcd\x0b\x34\xd1\xb0\x99.\xd2|&\xc4\xf6\x96I\x8b\xb1\xcf@y\x9dr\xdb\xb0\xad\xae\x1c\xe3h\xb4\xc5" "\x35:`\xb8\x0c\x46\xfd\x42~\x19J\xff\x89[\xcd\x08\xb1\x41\xa7\x10\x1eWI\xcb\xba\xec-\xa9\xef\x39\xb5,\"\xdb{\xa5\x0c\xd5\x65X" "\xef\xa9\x61\xc0\xc3\xc4\"k\n\xe1 \x93\xb4\xb9\x46]\x38G\x37\xac\xcd\xc8^\x42\x98\xa2\x84\x87\xe7\x64\xe5\xc9\xd8'O\xed\xf8\xd9i\x31" "\xde\xa5\x8dX\x34\xecw$\x84\x1b\xba\xb0m\xc1\x83T\xf4\x61R[\xce\xce\x06\xd2\xca\xf1\x0e\xf4;\x17\x62\xe1\xa1\xf0\xfc\x98\xbc^\x90\xac" "\x9f\xda\x19\xbb\x46\xca\xac\xfeT,\x9b\xd4`,\x17\x62\x83\xea\xa4M\xe3\x06\x98\xdd\xef\xd2\x88\x01\xad\xd8>\xe1\x8eN\xa2=U\x9c\x1bO" "\x9e\x7f/\x9c\xe9\xfe>\xa3R&\xed\xe2\x9dOR\xf4\xf9\xb7\xdcR\x35i\xd3]@\xf8\x85w\xf3\x46\xd7(!\x8c\xab\x89\xedG\x90|" "\xfc\"\x9a{\xf2\x61-\xe9G\xb0\x9e\x8b\xc8\x66H\x19\xe6\xaa\x92\x0f\xee\xce\t\xd2\xb5I\x44\xd8\xce\xc0p\x96\xd4\xa6>\xeb\xa5\xfb\x39\x45" "\xce\xb0\xe1:\x34\xe9\x06\xe6\xd7\x07\xe1\x00\x8cy\xa0\x1f\xe2\x84$\xf8\?\xbb\xc9\xfa\xfe\x9a\xd1\x0f\xe4\x80\xadG" "\xf1i\xad\xb1\x92\xbb\xa4\x41\\\xdf\xa0\x92\xf8\x64\x0c\xb5\xe4\x33\xef\xbf\x93K\xfe\x35\x1d>\x92\x91\xd9.\x94\x66U\x19\xd9w\x37\x32#\xc8" "\x88\xf1\xe0@\x46!\x14\x11\xb1$\x12\x33\xe1\x81Z\xb5\xc2\x07\xdb\xb5|\x39w\r\x33\x42\xfd\xffh\x89k\\qL\x91\x1dm\x13\xf3\xcf" "U\xd0>W\xe1\x37\x84\x61\x14\x62Y\xb3\x90\xf6\x85\x91\x19\x13\x94\x34V\x43\x0cG\x93\x91\x33\x9b\\Q\xf4\xc4\xceO\x8b\xaensh_" "\xf8\xc8:I#k\xc1$\x81\x13\xd2R\x90\xc3\x96\x0c\x32\x14r\x32\xf2l\xc9W(\x88#\x1b\x19\x8c\x18\x95\x0c\x64\xdc\xbb\xc4v\xcfM" "\x46\x36\x04V\xda\xfb\x1f\xad\xf7/\x34\x13ix\x18\xe9\xbc\xe3\xcd\x63z\xdbt\xad\xd8\xd2\xbd\x00M;ur\x92pn\xdb\xae(\xbbN" "\xf6m\xe7;\xcc\x0f!\xa6q\xe6\xb6\xf3\x8a\x10\x36\xa3\xf9\x0e\xf7\xa5\x13\x62\xeeKx\xdf\x66Q\x98\xdb\x9e(\xc2^\x45\x46-\\%&" "\x1a&\xd9\x85\xd8g\x0e\xd4:\x0e\x05\x7fn\xab\xb8\x84x\x33`\xb8\x9c\x88\xc8M\x88\x1c\xfa\xab\xd8u\xfe\x9d\xd8\xfd\xfb\xd5.\x8b\x05M" "\xca\x19\x89\x19.P\x9e\xd5\x1f\x9b\x8b\xf6@\x16_\x88,\xa6\x10i\x43\x98\xdb\x16*\xc2\xa7%\xf9\xceL\xa1\xdf\x8c\xf0\x8c\x17\xa2m@" "h\xc9\xe0\xe0m\xbe\xc3\x65Y`q\xf9\x8f\xd6\x01\xd5p\xd6\x01\xbf\xd1\xb9|\xed\xfb\\\xf5\xa2\xe2\x13\x89\x62&\xc4\x82N!\xfa\xb5\x42" "\x84\r\x9a\x1f\xb0\n\x16\x36\?\xf2\x99\x1dz\xf8\"\xb1Y\x14\xc8\xad\xac\x44\x44\x87P\x88\xc5\x94\xf3\x03n\x36!\x44 =\xe1\x1d\xf2\xe5" "@\x1b\xf3\xb3\x07\xee\x35\x33\?\xe0^\xd3\xf3\x03.\xb0\x01\x35\x9e\x1b\x9cm|\xcex~\xc4\xa6mnS\xbc\xf3\xd3t\xfb\x8e\x44\xfb\xac" "l\x92\xa8/@\x16L\x11\x0f/\x8cu\x12~\x9d\xca'\xb2l\x7fR\xe9\x92h\xd2\x85\x30\x01\t\xb1\xaa\x43\xd8\xb2[`'\x14!\x1a" "\x30\xa5]\x17\x36\x1a\x30kH\x9d\xc7\x04s\xe4!\xc4\x92\x15\xe1\x12%\xf1\x34;z%\xb1M\x8a\x10\x9dx\x61\xf5\xc8\xd8\xe6\x90[\xc4" "\x1a\x13\xc0\x8e\x04\xf8;;w\x91\x81\xc6\x45|\xb4\x0b\x61\x86^\x39r\x16\x8b\x7f\xd9\xf8\\mO\x98\?\x9a\x9b\x0b\x9e\x10\xab\"\x84p" "&\x00u\xcc\xd5\x9c\xb9&\xfd#\xcf\x61\xce\x42\x80\xba\xbb\x9c\xe5s~\xd9\xcd~v\xf3\xbd\xb7u\x89\xb9\xc3\xed\x16\x85\xd7\xccM.\x38" "\x15\x62\xc4/\x9c\xdf\x1b\x99<\x7f\xb1\xc2\x10\x8c\x17Z\xf0x\x92:q\xaf'-\xef\xba\xcd\x07\xb4Z\xe6\x94\x9e\\\xc2^\xcf\x98\x90\x30" "}\xccO\xd9\xb3\x11\xde\xdd\x92\x18\x8e\n\xd1\xe1\x9b_\xb2\xf5\x9c\xd7\xe8H\xa2|\"\xd1\x1b\x99\xd7\xec\x11\x95V\x1a!\x36\xfb\xac\x8c\xa1" "Y\xc5P\xa3y\\\x08+\xaf\x10&^!\xd6\x17)[\xe9\xf1\xfd/|\x30\x45;\xbfqJ\xd3\xc8\xb5\xaa\xa2\x61~\x19\xa4g\x9d\x88" "\xb0\x8d\t\xef\x1b$l\x63`\x38\xa5}Jg\x64\x8a~\x65\x11\x61\xf8\x83\x18R\xd9=!\x61!\x9b\xd7ho\x06\x7f\xe7s\x17\xe9\xf1" "\xa7\xe2\x19y\xbc\xe5\xa4\x11U\xc4\x8b\x8e\x93N\xd1\"\x36V\x64\x93\xb9\x99\xc1\x8d\x04\xfc]u\x39\xfc\x14\rk\xec\xe6\x35\xba\xca\x0b\xbb" "u\xa7g\xb7\x06\xec\xf1\xb3\x92]\x63\xd5\x19\xce\x12q~\xea\x62V\xfd\xe0zjj\xf6\xe7\xfe\xd8tY\x04\xd5\xab\xd8\xb2\x08\xae\x8a\x87" ".\xd2|$\x62\xf7\xc7\xe9\x39,\x62j\x0f\xa3\xa2\x65\xab\x88\x9e\x1b\"\x86[\x89\x88PJ\x10\xb9w\x81\x88\xf0\x02\x04\xfd]\xa9\xe8W" "\xea\x8d\xc2\x95z\xd2\x92\x1f\xb9\x18.\xcaj\xfe\x8a]G!v\xd1\x98_\xe5\?\xf8\xc4\xae\xec\x85]\xd1Uo\xfe\xa4\xb6\xb1\xfd!\xcd" "\x08\xf3'\xfb\xab'\x06\xac\x9d\?\xd1\xb0\x03\xca\xe8\x83\xae\x06\xf3'\xba\xfb\xcd\xa5\x8b\x86k\x7f\xdaG\xf2\r\x8b\xf2\xa9]\xeb\xdbZ\xef" "on\x89 <\xad\xd0\xc2\"\x62\xb3\x1f,\x37\xa2\xfd\x31=\xb9g\xef\x90\xda\xf3\xc3\xa6\xb6H\x36\x34^\xc5\xb5\xbcq\xbd\xa1\x15o\xdb" "\x9c\x83\x87\xb6\xde\xael\xfc\x16,\x39\xd4^\x1f\x18\xb1\x41\x34O\x1b<\xa2\xc1\xcds\x61\x98\x13\x62\x87\x9e\xf9\xb7u\x39\xbe\x65\x10\xe1\xcc" ":/\\Y\nM\xc7\xfbw{\xaeI\x17\x9a\xf1<\x45\xc3,\x14h\xef\xec\xdbz\x08\xca\xb0\xcf\xach\x18\xc3\x0b\x31(\x01\xd5]\x97" "\r\x8bhL\x08;}s\x0b@\x0bZY\xf9\xa6_\xe0\xfc\xdb\xea>\x0b\x1f\xab|\xd0\x37\x85\x99'\xd5\x46$\xd6\xbb\x0b\x31\xf8\x93{" "\xa1\x9f\x87{:\xd3\x9fm\x9a\x80\xa0\xf9\xe3q\xf0\x32\xef\xd0\x39\x62\xde\xb3\x32\x34\xa0%\x14\xb4\x1e\xcd\x80\xdb,\xcc\x07\xd6\xd3\x1aXO" "K\x99=\\\xb1\x9f:\x1frH#\x9cR\xa7\xff\xd1|\xc9\x08\xf6\xf3\x65\xb6\xd2\xdf\x17\x07\xd9H\x13\xb0(\xb1g-\x84\x8b\x13\xa8K" "\xc1qm\xd1\xa6\x37\xe4\xa2\xe4\xcc\x93\x03\xd6\xef\x8br\x86\x95\xc9\x8bJz\x7f\xec\x0c\xc3(\xd1\x30\xde\x02\xed\xd0M\xfa\x38\x63\xfd$\xe2" "sM\x1a*\xaeh\x12\xadu\xc7^\xae\x8b\x1a\xf7\xadq\x61\x07\xbe\xd2\xfd\x32\xb7\xba\x16\xed\x33\"\xbbv:\x32lq\x93\xdd\x7f\xe8|" "\xcf\xfd\x1b\xb5\xc1\xe3\xfa\xf6\x80\x9d\xc8\xc5\r\xd7\xfd/\x10t\xbb\xfa\x43Q~\x1d<\x86\x13P}\x80\x9e\xd4\xf5\xbfK\xa9\x96\xb9\x43\x04" "\xb5\x9f\x43\x46z]\x34\x39z\x12\xc2\x19I\x38\x0f\xe4\xec<\x45\xac\x05\xa2\x08\xc3\x1e\x44\xf6@\x17M\xce\x0b\x0b\x31>V~\x18W\xe4" "\x89\xf1\xb4\xcfzN\xc4\xc6R\xedw\xf3*\xb5\xe6\x87S\xae\xc1.\x18\xb5\xca@wR\x82\xc7\x00\x0f|l\x17\xbb\xdb\x41\xfb\xba\xf8M" "\xca\xaeyz\xf9\xe1\x82\xeb\xbb\x33\x0e{\x45[\xbc\x84\x1d\xecT\xb3sPG\x81\x34$-\x9a\x99\xda\xd4\x0f(\x36\x1bN\x9a\x44\x44\x44" "\x07\t\x64\x93\x0f\x91s\\\x14\xd1RPl}\xd3\x15\xe2O+\xb9\x46;\x04\x45\x04M\x83\xc8\xce\x1b\x44\xd6\t\x14\x8f\xc2\x9f\xd1\x9f\x91" "\xe2\xeb~\xda*\x65\xe5k\x9d\x12\xed\x0e\xc2\x61\x9fx\x84\xc6\x85\xb4\"\x0e\x8c\xf0\x0e\x11\x62\xcd\xc1\xa2i\x1fGS\x37\x43\xf0\xa4\xa2\x12" "\x12&\xe5\xec\xae\xce\xaf~\xd1\xe4\x64\x94\xb0\xfd\xb0Nn\xb8x\xcc\x35\xd6+\xa2\xf9n\xd8*&N\xb9\x08;\x36\xd0\x34\x16sk\x16" "\xb4\xe4\x66\xf3\x37\xd1\xfe\xf3\x1b\xdb\xa6\x45\x93\x9b\xaf\t\xb1\x65\xb0\x92\x37\xf4\x8c\xa1\xfb\x85\xb0\xf1\x98\x36\xfai\xa9\x45\xedy\xcbx\x42\xbe" "\xef\xa5\x87\xb7\x14G\xcc!\xfa\xdd\x0bg\xdf\x1a}\xb2\x1doh^T\xe8p\tj\x05n\x7f\xb1\xbe\xe3-\xd7_q\xfe\x15\x8a\x93g" "\xf7zy+\xdfGq[u--\xafhKZ<\xe7\xc0\x84\xd8\x03\x01\xcc\x8e>\x65t\xa6\xa1%\x92\x66\x38\x86\x9d\x63\x43\x64`\x39\x36\xdev\xa6\xe5\x12\xeb" "g\xd5\x8e\xe5v\xac\xd7T\xe3\x0b\xe3\x66\xd6\xc2\xdd\x43\xa7\xe7 \xf7\xb6\x15\x62g\xe0\xd5\x16\x8d\xb0\x42\xcb\xad\x62\xf4\x95V\x8f~Q\xee" "\x44\x1b\x9f\x1a\x1f\x8c\x11\x89@\x61\xc2\xe5'\x89\x31<\x18\xf6\r\x86\x96\x1e\x1e\xb0\x32\xa2\x66\x89\x10\x31\xeb\xbcq^\x64\x43\xfb\xef\xc9\x8c" "\x1d\x02\xd1\x13\xc7\xbd\xa4VG\xdc\xe0mu\\\xfc \x19\xe7\xb4\xa4\xad.\x38\xeb\x04J\x1dL_\x31jO#\x46\x32\xa2\x96\xdcs\xdc" "+\x1a\xfa\xd2\xa0tU\xd6\xf5\x0e\x34\xe9\xcd;\x43\x00\x06h\"\x32\xf2\x04\x34\x19j\xcb\xe8W]\xbfZ\x15\xfe\xc2\xba\xa0\x18\xc5\xd9\xcd" "\x65\xd8\x99uu\x41\xc7_!\xc6M\x42\x66\xe3\x05\x1b\x8a\xd5\x05#\x37\xad\x9eX\xb1\x83\xac\xe6V\x16\xf5\x66\xf5\xcc\xe9\x01\x61\xef\x9b\xfc" "\xf9\xe6\xce]\xd4\xd0/X\xe9\xc6&j\x66\xc4\xb0\x14Z\xf6|N\xef\xf4\x95\x35\xda\xab^\x36x\xfe+\x32=\xf9\x07\xe6\x8d\x36\x39\xff" "H\xe7\xd3\xf4\xe0\xc9\x35moX\xac\xa0\x8d\xea\xc5\xd6\x30h\xab\x1e'\xb8\x37\x88)\xedUo]{\xfbM\xdax\x31\xf9V\x05\xed\x86" "R\x33\x80L\x1b\x0fY\xfd\x14\x8f\x99o\x9d\xc3\x34\x9fo\xdd!g\xf2\xad\x06*\x45\x65\x8f\x44\xad\x9do\x8d\xb1\x86&\xdf\xe6\x8e\xa7`" "\xd9\xd8 \xb5\xb3\x02V\x8d\xe7 \x46~J\xadP\x94\xb8\xafP{\x19Jm]\x95-\xb5\x0e\xa4\x1a\xf6G\x35\x8d\x82*\x84\x8f\x1d\xe9" "\x37\x12\x11\xc1\xcdU\xc4\xc3\t\x87v\xf6\xf0\xc3\x19\x0e\x8d\xec\xd4\x31\x93\x97\xc5O\xe4\xec\xc8\xb9q\xc8w\x1d\xa3\x86\xf1\x95\x8a\xea\x1d\xa2" "\xd4\x37&\xcc/\x9b\xf0\xd7\xe2\x15\xd0\xafT\xaa\x07\x86r\x30\x84\xa3\x9f\x88\xd8\xa8\x91\x44\?G\xc5\n\xaf\x81OP\xa9\x9e \xca\x15\x9f" "\x0e\x0b\xa9\x94\x07\xbc:\xca\x8e\xf2\x11|\xc0\xd2G\xd2r\xf2\xdb\xde\x88\x32=~\x82\xe9\xdd\xb4\x39w\?\xd8\xd4\x10\xa3\x97\x07\xb2qi" "\xe3\x64\xc6T\x36\xad\xe3LO\xaf\xb3\xa7\xbai\t\x39\xbb\x32v\xc9\xf9\x83n\xe4\x30\x7f\x32\xad\x65\xc4\xab\xf9N\xb7n\xc9\xbd\x15\xb9\x7f" "\x64\x8c\xc8\x03\xa9\x17\x8e\x10#Y\x35\x1d$\x83\xe7\xce\xecq@Q\x1d!\xc1/\xf2\xb8\xe1\xf4\xae\xfe\xa6\x96Vw\xc2\x81\xe6\xa1\x8b\xb0" "\xb0S\\\xefW\xe0$\x01\xcd\xd2\xa6\x95$\xc8\xf8O*V\xbe\x31\x41\r\x91Y\t[\x95\xf2\xf6\x83l\xf6\x9d\xde\x7f\x84\x36sJ\xc7" "<\xed\x1eJ\x15\x8b\xc8\x0fz\xec\xde\x9e\xee\xe9\x80\xd4\xce\xa2\xf2\xc5\xf2J\xf7\xbd\x04\xbf\x8d#\xa7\xbfk\x9d\x07\?\xb0;\xb5G\xeb\x9f" "\xed\xb5\xba\x9a\xa9\xf6u\x41\x0e\x10\xe7\xf1\xd5\xae\x30\x18\x38\x61\x90\xa7\x18\x9e\x44\xc4\xe6\xe3\x9f\xc8]\x31L\xd3~\xa4\x89\xfeh*~\x06" "\x31\x0e' @P\x14\x34\xdb\x14\x9a\x1a\x36\xd6\x30Q\x1a\x9b\xd3\xf3\xffj\xbe-\xa7\x1d\xd3\xf9J\x13_\xaa\xe9\x80\x0e\xf6z`:!" "\x17\x03\r\xf2\xc3\xef\xf3[\xfa\xc8\xd9\xcd\x63z\xc6\xe4\x61\x39\x38\xc8\\\x44\xa7\x41yx\xe6\xf4\xe4\x8b\xc8\xebS;>v\"\xf8\xa3\x8a" "\x65\x66VV\x61\xd9\xcf\xaav\xcd\x9a\xe9\xf6\x46\x85\xe8\xd2RLW\xdf\xf0P\xa7\x96]\xa8\x65\x1a}\x64;p\xcd\xdc\xcd\xee\xf8Z\xb3" "\x46\x13]\x64\x15\xad\xd4`\x32\x94\x84\x97\x9e\x8a\xf6\x1d\xc0\xd1\x93\x84\xc9P\xc5\xa7sg~\xf6\x05\x0f*j\x1a\xa7\xcc\xb5W;WG" "\xccJ\xfb\xd6\xb3\xf1+[\x00\x15#\xa7:\x62[\x91\xc1\x10J\x39g\x61\x45`\?\xb0\x93\xef>\x66\x93\x43\xd3\xf8\xc6\x10\xfe\x0c\xbc\x32" "\xfes\xfa\x83\x88Xt\x9f\x31y\n\xad\x63\xec\x1a\xa7\xc6\x05\xb9{\x08\x8b\t\xc4\x86S\x06\r\xe8\xb6\x42{wZ\x93\x03\xd1J\xb9\x88" "\xfa\x7f\xa9\x1a\xb4\xe6Q\xd6\xf3\xeb\xd8\x93\xecv\x9cjj\x8b\xf8\xdc\xf9\xde\x9d\xb1\xef\x0c\x17\xdd\xeb\xa7\xd7\x91\xf4\x66\xbd\n\xd0\x03\x03\xff" "\x33\x19m\x1f\xa1\x1f\xae\xda>k\xc3\xfc\xd0\x32\xef\x98\xe5\x38/\xb3,\x62\x35\x88\xd2\xaa/\x37S\xa8\xd8\xb0\?i\xce\x9d\xea\x08{\xdf" "\xf8\xafV\xf4\x0e\x34@\xef\x36\x8bT\xceV\xe2;\x7f\xe2K\xcb\x9f\xef\xc9\x17K\xdd\xab%X\x43u(\xdfY\xa9\":\xa3\xb2\x13y" "\xcd\x97w;N\xaf\x03T\x9cO]\x0coL\xc4\xc3\x03\xe9\xe7\x85\xdc\x90\x03\x1d{\xbb\xdd\x98Tk\t\t_\x61\x88\xfe\x13+\xdf<" "\xb9p\xc2\x38\x05\xd1\x9e\x66q\xe6\xf4\x66\x04\xb3\xbb\xc2\x62k{m\x15P\xb1u\xa5\xe6Q{\"j\xc5\xd6G\xd0\xc6\xdb\x7f\xbf}\xe8" "\xf2\x82-\x16\xd1\xc2\x8a,\x8cV\xa4\xb5\xdb\xdfX\x9a\xa2\xb4\x34\xfb\xc7$\x84\x9b\xba\x8a\x65\xb6\x8e\xd6\xae+\xb1`+\x88y\xed\x0e!" "I\xf5\xc0\xf9\?\xa7\x37\x0f\"\xfa'#\xa2WhX\xdd\x01\x36\xe4\x1f\xc5\x66\xbbh\xf2\xcb/\xee\xab\xfe\x92\xb0\x8cTio\xc8\xab\x1d" "\xa1\x37\x1aX#\xf3\x11\x44+]\x85\x35}\x1e\x1aQ\xc5\xe5\xab\xd3\xc5\xf5\x16\xbf<\xeb\x94|\xaf/\xf8\x64\x98\x01W\xaa\xc5\x1b\xe4\x37" "\x02\xb7H\xe5-\xebW\x8c\xd9I\xcf\xe5\xf5\xb4\xe5\xf4\xdc\x44\x84&\x12\x1b\x05K\xcd\xf2;{\x36\"\xe3;\xd6Ru\xe0\"\xa1\xec\xc7" "\xe4\x0c\xcf\xdb\x81s\x83\xf2\xea\xc4xK\xaa\xd5W\xd9i\x39uy\xf4+\x1e\xab\x63U\x99\xd2\xcan\x07\xdf\xc0\x05\xc5\xf7\xed\xb4}\x04" "\x37~h\x15'\xd6\xd5\xf8(\x87\x94\xca\xdf\x9a\x1b\xd5\xe4\x1c\xbfqq\xc2\?\xc7\x1e\xb2\xca\xdbog\xda\xdd\xa6\xb8\x42\xfew,\xf3\x94" ":\xb5\xd3\x8e]\x93+\"J\xbej\x8f\x43O)\xf6s&\xf5t\xd6\xbf\x9d\x35\xbb\x61J+\x91=\x84\xd2\x02;\xe4\xfc\xce\x88\x12\xdc" "\xb3\x1eY\xcfz\x64\x8c\x9f\x46\xfe\xc6\x15\r\xb0\xbf\xffn\x07\xec\x84\xfb'\xf2\xb9\x46\xb2\x9b\xd2\xb3\x12\xc7\x00i\xca\x99\xfd\xdd\xe2\xd3\x38" " Ys+\xed\xa3W\xd1>\xfa\x1eV\xea)\x1f&$\xdb\xbd\x1eV\xec)\xd9p\xf5\xb0g\xb4\xd0^\xa2\xf2\x37.\x61>\x93Z\xae" "\x8dL\xd0\x8a\xe5Q\xbe\x7f\xe2\xdaZ\xc6;\x37U\xd3\xf8\xb8\x30\xd8(\x1b\xa7$\xab\x44%vG\xa0h\x05T\x45+\xbe\x10_[." "r\xdc%\x62\xd7\x92\x37{\x91\xaf\x07\x9by\xa9\x66Y\x61\xfd\x0b\x61\xcf\xe9Y!\xa2g\x85\xdf\xc1\xea\x98\xbf\xe3\x95\xa3p\xf6\xd5\x31y" "\xcb\xa7)\x1aKgvt\xeey\x03\x8b\xb3\xb2\x8f\xd4\xeb{M\xafKi\xed\xdd\x35\x8d\x02\x10\xbflh\xd8\xbeL\xc3\xd1\xb3p\xf4S" "\x36`}\xdd\x8b\x9c]\xc5\xbe|\x93\xeb\xcbm\x8a~Hz\xa5\xcdG\x38\x9bojVi\xdb\x01xIS\x93\x07\t\xda\xfby\xfaq" "\x43\xb1\x1f\x88\xfd\xe9U\x64\x87M\x99u\xcb\xbf\xb1\x9d\xc0\xaf\xbf\x9f&\x97$\x0b\x96\xf2\x37~\xc7\x32\x87\?\x8d\xfd\x1e\xd5\x32\xf9\xb0\x17" "\xbc+\x36\xdfS\xbe\xde\x91\xc3\x36\xc9\xd1\x62\?\x8b_\xc9Y\xd3\xe9\xa2\xe5m\xdf\xcaO\?\xdf\xfdG\x1e\x1c\x93\xec:\xf6\xf3\x93*\x36" "\x30U\xb1\x32\"o\x17NkY\xfa\xf9\x8b\xfd\x64\xbb\xbd\xf9\xfes\xa4|Q\xd6`\xf4\x11N\x80\x0c\xa2\xed\xe3\xa6\xe2\xf3+\x66\rU" "l\x9d\x39\xc3\xaf\xa3\x0fr\xdc\xca\xeeM\x9c}\xebN\xe1_\xae\xf5\xd6\xf7\xcf\xae\xf9\xdb]_\xc6\x41\xac\xf5\xb3>K\xcd\x9a%\xado" "\xf5P\x7f\xfd\xc2,\xd3p}\xbb\x8f\xb0\xaf\xa8\xc6\xea\xbe\x8f-\x80IO\r\xfc\xf2H+\xe8}\xab\xbd\xc6\xf6\x82\x85Sg\xda|\xb5" "\n\r\xda\xdbm\xd0\x16\x15\xe3%\xb9\x44\x61\x1b[\xc9\x1d\x63\xf5\xa0\x92\xe3\xc7\xb1\x8dI\xc6V\xcd\x8d\xd3\xf3\x05\xf9\xb4\x43\xb2V\x1b\xa7" "o\xb7\x64\xf7\xde\x38!{\xa6\xf7\xec>\xec\xf8\x8d\x31\x37\x07\xbe\x93\xb3\x63rn\xd7]\xa1\xbc\x8c\xad\x9d\x10~\x91\xdb\x9fN\xd8\xddT" "\xdc{$\xaf\x0e\x8d\xa7N+\xf2*\x86\x0b\x35~H\x96\x10\xa5\xfa\x39\xda\x63\x66\xf7|\xcc\xec\xe1\x05\xeb\x64U|\xfctz&\x88h" "]\x87q\xf6j\x97y+\x91\x1d;\xce\x0fh\x9c\r\x1b\xe4(q\xaa\x0f\xc3S\xe4ZH\x97\x88\xcdYH\xc7(\x91\xfb\x17gmj" "\x34\xb9\x8c\xf3\xa3\x13\xe3\xed\xef\xeal\xbdX\x99\xc6\x04\xe6\xc7[Ny\"\x19\x19\xc0\xb3\x81\x07\xf2\x46\x1c\xb4\x93o'\x1c\x90U\xbc`" "\x1a\xf2+\xbb\xfe\xdd\x9e/\xe5S\xed\xb1m\x1c\x92\xff\xf8\x88\xd6G\x19\x17\xc7|\x95^\xc4\xa4;\xa6M\xec)\xd3l\x95\xe9\xb8\xe8G" "\x98\x07U\xd1\xf2\x0e!\x83@\xa6\x0c\x33\xe3$V\xfa\x98h\x89\xa4\xe8\x66N=\xd0\xd8\xf2+\xae\xbf\x98T\xc4h#\x35\xde\x9a\x9f\xd8" "\xd9\xd1\xf0\xe3_\x15\xd7\x32\xdb\xa8V\x35\x8e\x96&\xbf\xf1\xf1\xfa\xeb\x0e\xab/\x44\xb3\xc6}\x02\x07]%_\xfc\xc4\x06\xcd\x13k\xbb'" "\x98\xa7R\x1e\x7f\xc3z)\xa2Ut\x13\xc4T$svG&\x36\x36\x99\xd8p\x42i#\xe2\x89\xff\x35\xc2\xa5(\xd9\x15\x9c\x9b}h" "n\xa3\xf4y\xbe='\x39\x8c\x9b\xdb`l\x8e\xdd\x36\x85\xc5\xee\x89\xfc\x64\x95\xcc\xbc\x38ZJK\x14~{\xdfv\xca\x18\xc8\xde\xea\xd2" "\xcc\x62KLH\x90\xb0\x62\x9b\xd8\x1bQ<\xab:\xd7\xa5\n\xf6\x18S\xadi\xec\x0e\x9d\xd9\xd5y\x36\xae\xba\xb6\xbe\\R\x9c\xf2\x32\xd9" "\xce+I#\xc3\xd2\x1e\x7f\x99uw\xc9>*\xb9\xa5u\xe7\x96\x45\x05\xed\xf6r}\xb7t\xda\xf7\xa2\xa2\xf5\x41V\x88\xf9\x44\xca\xb7\x65" "\xfd\xa7\x15\xa6\xa2H\xdd\xaa\xed\x1aopU\x94\xdb\xbe\x80\x31\xdf\xd9\xc2\xa2W\x19Q\xd0N\xa4\xbc\x07\xf9\xfe\x85\xa8\x05\x85\xe8P+\xfb" "\xe4=\xff\x8e\x03\x0b\xa1:n+g\xc7\xc6+\x10\xbb})u\xcd\x9e\x12\xbd\x34\xe1\x33\xcfg\x83\xa9\xfc\x04Yx\xc0\\\x1b\x97\x0b\xd3" "\xfa\x46\xfeu^\xbb\xe1\xb7(\xa2\xae\x93S~\x31\x41yw\xdf\xd3\x84\xc0\x01\xca\xe7\x7f\xa4.\x39\x16\xb2\xe3,l\xf2\xd9XX\x84\x1a" "j&\xdf\x39\x46\xc4\r\x12\x9e\x37\x14s\xdd\x85Z\x44\xcb\x99\x63\xf6\xab\x85\x1a\x44^\x98\xfd\xdc\xfe.\x9aX\r@m}\xb5\x43k\xea" "\xce\xb1=\xd5\x31\xe2\x10\t\x8b\xd2\\\x03$\x1f\xdemh,\xa4;\xc7\xf2\x46\xd6o\x35\xbbN\xf5wv\x87\xf5n\"\x62o\x01R\xea" "&L\xaa\xa9\xd6:%\xf9\xe2\x94\xeb\xdb\x31\x44\x16\x14P\xfd#\xd5\xcbP\xb5;\x64TU\xfe\x91\xbb\xbc\x13\x1c\x89\x84ly\x41\xc9\xc8" "\xb4\x83\xf7w\xf1;\xed\xcb\xffi\xe5\x9a\x9a\xae\xc7W\xfd \xb2\x84^\xc0y]y\xb2\x45\xda\xa9XO\xa1l\xf6\xe1v\xaf\"Z\xc6" "\x9d\x0b\xd6\x1d\xc2\xc6\x88\x1c \x05\x17\x96\xa2\x0b,\x39W\x0e\x86\xe4\x0f\x32\xe0\x02\x91\x8bI\x8eT\x45\xd6\xd0\x98\x9c|\xc7\xce\xda\xe5\x63\xb1\xd5\x17\xbe\x33\xf9\x34\x98\x80VUw\x39\xfa\x15\x8e\xf0\x31v\x31s\xa9<\xec;\xd3\xd6\x35" "\x96\x82R\xcbj\xab\xbcsM\r\x8d\xa0\xf0\x99\xb9\x85yM%:YJ^\x63}Q%/ym\xce\xae\x08\x97R\xf4\xa7\xf0\xf0\xcb" "wz\xf2\xcf\xa9\x1b*\xa0\xa3\xb2\x33\xd4\xcd\x12\xeamk\x34\x87\x34\xc8\xef\x0c\xf5\x87\xd2J\xfe\xb9\xb6\x9e=\xaeg<\x87\xc6gP>" "\x08\x38@\xaa\xb6w\x65\x44\x06\x0f\xed+P\xa6\x95]\x0e\xa2\x45+\xb7\x37\xeeV\x9c\xd7\xc9\x1a\x9a\x8b\x08[J\xe5;\xf1o\xdc\x32\xc6" "\x96\x8d\x31;K;\x31\x16'(\x31\xce\x06\x8b\xc1\x81\xb5\xc1\x7f\x9a\xbdv;\xc0\xce\x84h\xf7\xa7\xe4\x43\x97\x64)\xd3\x9b\xb0S\xa6\xbb" "\xb9o\x19\xa7\xe4\x12I\x8c\x39\x65\"\x84yMx\xdd!\x9bL\x0f\x66\xd7\x95\xbdm\xf2g\xea\\\xb3h\xc5\xf9\xd3\xff" "\xa3\xeb<\x97ZY\x9a.=\x11s#s\xa9\x80\xbc\x17 \xac\x04\xc2\xc8\xe0\xe4@\x80<\x17\xf3\xd2\xee\xd7\xdc\xc2\x64\xae\x95\xd9\xe8\x9c" "\xf7\x9b\x88\x1d\xfb\xc9\xd5\x12\xad\xee\xea\xea\xb2YYs\xf2\xa1N\xbe\xdc\x90\x98\x9f=ZH)\x08\x87\x16\x35\xd1\xdc\x16\x9eO\xfc\xda\x11" "\xe1R\x98\xe4\x66N+\xdf\x17V\\.\xb0\x1aMi\?h\xc5\xe7\xc2\xefM\x18\xfd\xe4\xdc\x8c{\xda\xeb:ZZ\xb9\xcf\xcdr\xc1\x9e" "ql\\\x39\x39/u\xb4\xb4\xd4]Z\t\xb0\xe4\xfc\x1b\xc8&\xa7\x98\x05\xe7\xda\xf9\xbb\xbe\x8c\xe7\xcb`\xf9\x13\x1c\x97\xfdXz\xc6\xc2" ":\xaa\x17h\x16\xa7\xbf\x8bU\x38zp\x15\xd4>R\xc5\xa2s\x19\xd4\xec\x0cL\xa7\x65P\xdf\x91\x98LS~\x93\xcd\x9a\x13\xbb\xba\xd2" "\x8c\xa6\?\xa9\xb9\xbb\x8dw\x33\xaa\x96\x11\xf3\xec\x42\xd6{\xca\xe0\xe4\x08+\xd6L\x9d\xd2\x1f\x9c*\xac\xb4\xe1\xad\xa9\xaa\xbf%\x99g\x97" "X\xb5\x46Z\x36Y\x62m\xadr\xb2\xe4\xf4\x8e\x98\xd3\xac\x91\xe9o\x39p\xc9!\x1c\x10n\xf6\x62\x62\x31\x91\xb2\xc2K\x0c\x1b\rN\xee" "\x8by\x32\"[_\xa4%l\xc8J\x63\xc9\x31>\x61\xf7\xd4\xd8'\x1f\xf9k\xd8\xd7J\x39\x9d;}\x85\xaf\xaa\xb9}{\x91#\xd7s" "g<\x39\x63\x0f\xedhi\x65\xe7\x32\x1d\x44\xa6\x39j\xa5\xe6\xe6\x00\x9e\x95P|r\x9e\n<\x99\x9f\xd7Z\x93\xca\xf4L\x99.\x16\xe7" "\xa9\x99\x65r`+\x63\x65\xd3\xd8\xfa\x44\xe8\x03\x98\xccvV@/\xe1|\x0f\xb6\x9d\xda\x30}\xb3K\xeb~\xa8\xcb\?;\x0cK{O" "\x97\xd6\x02[Z\xe1\xbe\x44`\x1d\xe5\xb3}\xfe\xccl\x14\xbdtH{p\x42+\xd8\x96\x08\xfc\xa5\x64\xc3\x66\x99\x1eg\x1f\x61\xc9n\x9b" "\x32\xef\x0c\xeaL\xe2x\xc2l!W\xa5\xd7vz\xe8\xca\x9a\x1d\xcb\xe4\xa4k\x64\xbe\x95\xaf\xec\xdd\x44r\x99\x33~:%\x1br\x64\x88" "\xca\x1e-\xcd=o<\x1e\xfb\xd7\x81v\x1e\xc1\x15\xd5\xbcy\x88\xd6\xa7\xa9z\xb8$\xfb\xbc!\xcf\n\xc9\xdb\xc6r\xc3\xda\x1e\xe0\x86#" "X`\x90{\rj\x03k\xdf\xe8\x01\xab\x9d\xd1u\xe8\xbc\xd8K\"\nw\xba\xb1\x46\x83\x92\xbe\x0c\x62\xb2 \xd8\x88\xe6h\x8c\x98\x8d>" "\xd9\xb7o\xf3\xed\xdbpT\xeah\x63%\xb2\xd2\xcf\x12\x65\x07N\xbf\x98\xa8\xc2oG\r<\xf4\rV\xff\x08-]\x95~\xb1\x34\xe9W" " \xea\xe4\xc1\xe9\xa7\xb7\x87\xa6\xdc;\x64\xbf\xb4\x85_\x1c\x38r\x46tK\xc0\xdc\xad\x1c`{w\x1b\x61\xde+s\x18\xe9R\x0e\xa5\xe4" "\xd6\xcf\x43^\x90\xf4\x8a\xe7[R\x37\xf5\x13\xb2\xa2\x12\xa2\xa2\x12\xa2\xb0\x05Y.\x89\x89\xbaJ\x38\xbbg\x17\x42L\x8c\xf6\x82\x1c\xf0\x15" "S\x17Pix\xac\xa3\x05\x89\x46\xbc\x85\xcb\x02\?\xc8\x0f\xfe@|t\x17]\xf2\xa3\xb8X\x65\xe9)\xa6\xc6nP\xea\x0e\xa0 \x7f\x90" "\xe3\x43\xc2|\xc9\xa9-\x11\xbb\x0c\xa6\x9c\xf0\xe1\x46\x9e\x8d\x9d+#\x0f\xdd\x43h\x8a\xe2\xd8Q&\x13w\xb4v\xcb\x14\xb5\xf2\x99\xdd\xd2" "\xc4\x33\x01\x83\x87\xd3\xd4\xdc\x15X\x1f@\xb1+\xe9&v\x06Q\xd5\xffp\xea\xcc\xc0\xeb\xe1\xef\xaa\xcaI\x1d\?&]\xba\xfd\x63\x18\x1a" "\x14\xfa/#\xb3\x81\xac\t\xd5\xfcq\x62=\x81\x9a\x18\xba\xcc\x14\xe1\xdc\t\x0e\x9d\xec\x86\x88\t\x37\x08!\xfa\xb4\x99\"\xdf&\x30X\xbe" "\xd3\xf3\x01*\xeat-+\xa8\xe2\xf8Oz S\x94&\"[\x89\xa2\xb2$g\\\x32\x45\xff)\xac\x43T\x62|\xca\x9d\x0c\x32\x65;" "\xcb\xa5n\x1eS\xba\xc4\x12\x36Q|\x19\x85\x1a\x12\x82\x64)\x91\xb9\xb4\xacw\xc9\xde\xaf\xb0tI\xa2\xce\xc9\\\x32\xe7\x0b\x33\x97\xc6\x9e" "\x93\xfe\x04\x30Y^\x88\x99\xbd\x32\x0e\xc8\xb7\x8d\x93\xed\x0f\x31\xc7\x33\x12\xfe\x66\xc2\r\xb2\xea%\x87\x45\x84\x33\x64\xe5+\xfaP)\xbfH" "\xf8/\x65\xaeXK\x80|\xa9\xc5\xbc\x38\x03\x39\x0e\x9f\xb9\xb2\x9cx\xc5\x36\x95\xb4x\x31\x96\x9e\x31\xdf@!j\xe9L\x9b\xfd\n\xa1\x46" "\x0e\x13\xda\xf3js\xc6\x10\x94*\x19\xeb\xaa\x45\xd9\xd9\xdb\x9c\xb3\xca\xdcpl,s\x93\xac\xf1(\xba\x1c\xab\x12\xae\x8e\x7fwm\xc4G" "\xa5\x92\xae>\xab\x34Q\xbaVS+\xc8\x9cQ#\xd2(k\xdfNK\xa7.K\x1f!/Z\xe9\xcb\xf5\xa0\xbeHL\xd6\x0b\xd1\xd4\x01" "\xd3\x13\xb4g$\x33\x41\x97\xado\xa1n\r\xaf|\xb4\?\xd5\xadO\xc1\x0e\xa7\xdf\xd4\xb4\xb3\xb1\xf0\xe9\xb2\x39 \xc4\xd4\x96pv\xe8\xe4" "\xe8\x87\x98\xef\xd7r\xab\xc1\xfb+\xd5\xf2\xcc\xc9\x46\xb9\x98\x18\xce\x92\x06\x41\x96\x97\xc1\x86\x01\x18v\xed#\xb8\r\t\xbb\xbcr:\x06\t" "\xa7N^\x06<\xa1\xc9\xf0\xf3\x19\xc1&\xa8\x92\x93Sl\xb9\xae\n\xc3\x19\x19.\x1a\xa4\xa7\x8f\xbe\x13\xba\x96\x95J\x1e\xf6\x9eJ\xda;" "W\x96\x0b\xbal\x11\xb1\xa3\x0f\xc5yw\x35\xa7N\xcb\xbc]\xce\x9e\t\xe1\x30#\xcc\x37\x9c\xc1 \xef&\x9ctz\xfb\xaaPO\x95\xe5" "\x10\x35\xd1\xee\x11\xf3\x92O\x83~R\xc2{\xde\n\xbd\x61@\xc4\x62V\xf3\x85\x0f\x84}Y!\xf3\xac\x92\x1d\x0e\x31Y\xf4v\xfd\x92\x39" "~#\xb4K\xe5\xbcV\xa6k\xd9\\\x19\x1c\xacR\xd3r\xa3\x9a\x9d\xbf\xa3,y\x61N\x9eR\xf3\xfb;\x35\x17\xe9\x9f\x85\xdd\x8f\xbd\x0f" "\xd8\x9c\xa7\xf9^\n\xbb\x1f{*Y\xb7]i\x10\xd5\xab\x07Wl\x17\xd1|\xac[\xe1\xd6\xe5\xb4\x32\x88=\xd2\xd4<\xb1\x9f==N" "\xdaO\xd1\xdb\x1d\xd5\x39\x9f[|\xcd\x97\x0e\xd1\xb0H\xf6\xc6\xc4\x94\xb6\xdc\xcb\x35\x96\xd3\xa9\x9a\?\x83X\x1f\xac\x64\xe1\xdb\xdd\x0b\x02\x43" "\x85`\x0e\x30\x99\xb6~:,\xbd\x05wN:\xd2\xd2\xdc\xf4\xad\xbeV\xc5\x01O\x98\x9c\xe8\x14\xb3\xd3\x10\x85\xe5\xaeP\xb7\xce\xe8\x62\x13" "\x9d\xefRuun\xe6\xc8h\x1f=\xeat\x86gkQ\xbas\xef\xdan\x85\x05s\xcfj\x84\x9eU\x03=\xab\x06zV\x34\xf6\xec\x65" "\xe8Y\x35 \xbc\"\xd1\xd8\x17\xb2\xa0\xef\xd1\x03Lx\x9d%\x31\x0e.\x64^\xeeY\xa9\xdf\xb3\\\xa7\x0c\x1a\xa9\xc9\xfe\x31M\xbe.=" "\x8d\t\xd9;\xd1m\x05\xe1\xcc$\x07NoH\x0c\x9c\x66z\x96\xaf\x95\x41\x35\xb7gZ\xcd\xd6\xb3\xd2\xbf\xc7\x9e\xb4\x12\xc9\xc3\x15\x86J" "\xf4\x9d\x95\x15#\xfen\x10\xe4/\x8c=\xb2\xfc\x41^\?\x92\xbd\xe7\xf0p\x43\xb7\xd9\xcc\xc0\xea\x92\x01\x96\xd7V\xcc\x44\xf5\x31\xc0\xb2\x0f" "\x65\x89_\xe5\x38\x8d\xf0\x06Y`\xc0\xb6\xa2\xb0\xd9t\x06\xa7\x8c\xa9\xa0\n#\x0e\xc2\x39*\xb9\x01\x82]\x92\xf2\x11g\xf1R\xb5\xbb\xa5" "\x9a|\x93+\x14\x07\x83\xe4\x82\x9a\xd3\x35\x99\xa1G\xcc\x85\x87!\xeenhu\xe3\x10\x91:\xc0/\x92i:\x64\xa3]X\x33\x36J\xf6" "\x0c\x87V\xf7\x0c\x39\x42#\xecV\xc8\xde\xb7\x15\xfa\x43\x44\xd6P\xda\xaf\"\xea\x8b\x92\xd9n\xc8~\x33\xc8N\xac\x98p\x9d\x17\x62\x10G" "\xc8\x04V\"\xe2\x8c\x98\x96Y\x95V\x16\xc3\x84+\xa6\x98l\x44\x0f\x39\xd7\xa3\xb4\xe3\x37\x13\x92-\xe9!G}\x94m\xd2.@\x17\x32" "\xfb\x0f\xbd/\x8c\xbc\x1d{\x1b\x86\x9c\xf5\x03=\x1duN\x90\x35\x9b\x9a\xd1\xb9}\xc1\x92\xca\xaf\xcd\x8a\x7f\xa5\xe5\xf9!g\x0e\x95\xf6\x15" "t\x94\x95\x03\x32g\x7f\x82\xf1w\x61\xde~\xa5\xfa\x42\x9e~\x19\xbfI\x36\xb5\xd5S\x14{`\xf6\xa9\xf8\x1e\x0e\xe9Y)\x64kkh" "u\xc9\x90\xa3\xcc\x42x:*y\xe7V^(\xa3.\x8a\x86\xa1\?\xfe\x38\xc7\x0b\x8d\xabYk'\x0c\x11\?_\x89i\x42!\xba\xd0\x42" "\xbe\xbb\x43\xc4\xd5'\xd9\xab\x15\xd3\x36\x63Q\x93o\xf6\x90k\t\x32\xde\xac\x1eZi:\xe4\x94\x88\x92\x89\xcb\x91G\x30\xact~\xb7\xf6" "W\xaf\x97\xe9\x07\x33\xfb\"K\x80\x61\xc2&\xfc\x90\xe3\xe4\x99g+\x42\x9e\xed\xc4\xafV\"\xd8\"\x80\xcc+G\xa6\x32\xf0Vw\x13\xdd" "[!s\xe7+\x07\xb0\x41\xddt\xabl\x8aY\xec\x95\xab\x37\x32\xe6x)\x64\xb7\xe7\x95\x63\xc3 \xfd]h\xde \x81\xcd]Q\xc8\xb6" "\xfc\xab]\xe6\x88\x1ep\xa0%\xb8\x9a\x9c\xa9\x10sYw\xee\x99\x41\xf9\x9d\xe6\xaa\x17\xd6\xec\x34\x9b;l\x8d\xa8q\x31\x0f\x8c,\x04\x46" "\x41\x61K\x16\xf3X\x00\x0c\xb3`\xfcr\xa6\x7f]\xaa\x06p\x80\x10\x13\xab\x19@+\xbf\xcc\xf4\x8d\x8c\xf6\x0f\xd0\x15N\x0ft\x83\xed)" "\x62!@\xddq\xd6V\xcd'I\xe7\xf8\xfe\xde\x14o\xc1J\"\x65\xfa\x1b\xb5sg\xc0\x36\xff\x08\xdbL\x93\x08\xbd\xa4&\xc6=\x94k" "\xf2x\xe3L\xcd\x13\xbb\x8f\xb6\x39\x42\x8a\xc9\xe6\xb2n\xc3\x15_O\xe3\xce)\xd5\xfdq\xfa\x85^\x16\xc1u`>\x93\xa3\x1b\xa3%\x9e" "_\xe7\xf8\x1a\xab\xf1`.\x9d\xe9\x9dO\x96\\ \xa0\xe6\xc6\xc9\xa1U\x31\xa7YN\x10\xa9\xd9J\xbav\xc6\xf7\xb6\xd3\x37XQ\xb5\x18" "\x38\xff\xfa\n\xaa\xd2\x33,\x06\xd2&\xe1\xfa#*iG\xc1\x8f\x9fj\x66\?\xbf|\xf7L\x97>\xbd\xdd\x85\x93\xae@\x1aU\x35\xe3\xb4" "\xbaSMN\xa7\xc2\xf4\xac\xa9&kq\x46\x62\x05\xd1^\x18\x85\x87L\x16: \x80\x41\xee\x83\x0b\xa1\xa8\x8e\x9f\xacjR\x15\xd6\xfb\xc1" ".\xfd\x66\xf8\xb6\xdbW\xf3J\xc8\xd2k\x44\xdf\x39%\x9f\xa1\xae\x99\xc0\xc4\x9d\x9a\x97\x64\x89\x0f\x34\xac\xf1i\x86\x8d\x93\xb0\xc2T\xa4\xbf" "\x12\xe8\xcfZLi\xe1$\x97kS\xdf\xe4\xa5}\xb1S\xd4\xa0\xbc\r;s\xa7m\x64\x9aH\x0f\xc2\xaa\xa2Qx\xb7p\xa6S\xe0{" "\x8a\x0bjp \x1c\r\xacO\xad*>\xbc\x96\xb3\xef\xff\xc9\xa4\x85\xb5\xd3\xa9\xf9\x9f\xccZ\x37\xed\xdc}\x07\xd3\xf4\x1b\xc1Sn\xcf\xfc" "\x1f\xbe\x31!]O[\x1c\x94\x85\x19\xe7v\xf2\xcf\xd4\xdc\x99^\xd3t\x1e\xee\xee\xdd\xb4*HMkS\x8ft\xad`\xd7R\x18\x13\xca" "J\x16.\\\xca\xa7\xf1\xba\xcf\x8c/\xce\xa8]\x8c:v\xae\x0f\xcb \xf6\x66`)!h\x17\xf3\x65W\xb2\x62I\x88\x98\xc6\x1c\x8es" "\x86\x9d\x1b\x7f\x31\xad\x1e\x16\x9e\x38\xf7\x8a\x0f\x8eg\x0b\x33\x45\xa3\x0fw\x8c\xb8\xc8\x42\x39J.\x96\xf2\x8f*\xcb[\x8b\xf2o\xd1\xcf\xda" "\xea\xa3\x11v\x63!=\xe7\x63\x87'%\x9b\xc7X\x16~\xf8\x95\x9a\xecT\xc1\xb4G\xef;\x8e\xd2\xdc{\xb5\xd3\xa5\x15\x62\xda\xcbl=" "\x06\x61)\xac\x32\xcf\x61\x91\xaer\xb0v\xa6\xa7\x63\x97p\xc4\x05\x0b\xa0\x8e\xbdOX\x62\x61\x01\xb1r\xcb\x64\xf5\xf7\x15\xd1\xe7\x41>\xbc" "\x38\x9bw\xfa\xbb\x11gK\x41\x9e\x45\xf4^\xa6\x89\xf3O\xe9\xdf\xb2U\x30\xe2\x04\x99\xf0<\xebI\x86\x00&\xa4\xb4\xb5\xd2\xbf\xbd\xef\x1b" "\xbf\x9d\\\x96\t\xd3\xd3\x36~\xe0\xa3\xa1\xf7\xb2\xd0j\xacxlz<\x36\xda\xa5O\xf8\xc2p\x42\x16\x8c\?\x99l\xf1\xd6n\x65\xbb\xb5" "v\xc9(\xde\x35\x39\xc9\xa3\xa6\xad(\x10\x93M\x94\x91\x87\xa0\x81y+\xaf\rg\xf6%\x93\x1c=\xfa\x8b\xe9\xc5\xbb\x30\xa8\x9dq.\x1e" "\xca\x06\x94\x46\x1c}V\x32\xdf \xc2\?\x98\xfb]\x94\xa5'\x15_\x1f\xc5\xd7\x87{\xc7\xfeq\x80w\x97\x9c\xd9\x1f]<\x39m\xb8v" "\xe4\xb9\x35\x61\x7fw\x64\x63\x86#\x1b\xc7\x18%};\xc5\xc0G\xca&\xf4+\x11r\xb0\xe0;\xe8\xae\x9cq\x65\xb2g\x46\x8f+\xe9\xec" "&'\xc8%\xdf\xe1t\xe8\xdf\xb4\x33,m\x84ki\xed\x86\xa5\x35_\x97Q\xf9-\xbeh\x04\x1b\xa4\xf2\xd2\xb2\xc6\xd2\x46\x9c\x95Vg" "\xaai\xe3{\x30YX,\x93\xfe\x8b\xd3\xbf(\x66\xfa\xe9\xee\x8a^\x0c\xaa\xb6V\x14(m\x10\r\x66\xbb\x1dsLh\xbb\xef/ \x8a" "]\xda-\x86\xce\xfe\xbe\xa3\xdd\xff\x9a\xf5\xf6\xb6Q\x41\x93V\x32'\x44\x83\xc9\"" ",\x90\xe9!T\x39\x42\xd4\x42\x42\xcc\xb6\x0b\x31\xc6\x96-G\xa5\x07r\xcc\xe3\x88\?)\xe4K*\xbc\xe7y\xb8\x66\x46\xd8\xc2\xf7\xaa\xec" "\n\x65\xabl\x43g\xcf\xd8\x30\xce\x9e\xd1\x85\x00L\xbd\xfb\xa0t\xc3\xbd\x42\x19*\xae\xf4\xff\xd4\x39;> [\xf8\xd9s\x36\xc4\xb3\x17" "\xf6#W\xec&\x66\xcd'H\x39$su\x12.X\xd9\xeb\xdf\xe5\xc0\x19\xdc\x1c\x07\xd9\x13(\x36\x18\x41\x96\xff\x62\x0e\x8e\xd2\xc5)\xa2" "\xa6)\xc3\xd2\x1b\xbb\x92P\xfeui(i\x1f\nM\x07(\xf5SjM\xf7\xd5Y\x85\n\x9d\xc9\xec\xb5]\xe1u\xd4\x9cK\x8e\xa7\xfb" "\xb8\xa8\xbbk\x30\xce\x37\xa2\xf5\x30\xbc\xfa\xa6*v\xa3\xbb\x39[\xa9\xa2\xca\x37I+\x1b\x63\xe5\x8f(\x14R\xd9k\xbe\xb3\xc2\xc1\x95\x33" "<{\xa3\x1f\x08Tr\xff\x15\xf5\x36T/O\x7f\xb7\xf1\xc0nZv@\xe7\xb8\xec\xc0R\x43\x9a\x15/$\xda\xb7\x98\xa8\xe1\xa4\r\x15" "S\xdc\x86\x35\xc0\xa0\xfc\x81`X\xa2\xd8\x9b\x14\xa2\x03.\xc4\xb4\xbb\xf0v\x42NZ\xe4\xfb\x95N\x32\x61TO\xd5\x92\\ \xd7\x0e\xd8" "{\xf6\xe9;\xe5\x95q\x64\xe4\xf7\xd3zSLt\x86\x85\xe8\x0c\x0b\xf3o\x61\xf9\xcc\x7f\x80\x03)\x42\xcc\x03\x08\x1f\xec\xf8\xc7\xb9\x13\xa1" "\x0f\xc5\xa4'\x8f\xf0\xea\xd8\xe9\x11\x45\xa8X\xa9\x8a\xf9\xcd[\xe6P\x8a\xc6q\xd5U\xbc\xfe\x8b\xf4\xda\x10\x32\xc3\x0e\xe8\xa5\xa8\xc4i\xa7" "\xf6\xc2\xda\x92\x8e\xac\xad\xb6\x10\x96\xf1\x96|\x61\x9b\x14}\x39\x8aW$\xdcy\xb3_\xd1\xc7]\x94\x1b\xc6\xe7x\x44_\x92\xbfHxU" "g\xbf\x12\xd4\x87\xb9\x9c$\x7f\xd8y\x85\xc9\x34TnH\xe4\?\x61\xf7\x83\x19\x01&\xc7xs\xe5\xf8\x13\x7fU\xa5O\x1f\x18|\?q" "\x82[\x94\xc6n\x90W\x8b\x39&W\xe7S\x16N\xe7r\x88\xce\xa3\xb9:\x9bP\xca\x85\x93\x0f\x18\xa6\xd4-\xec\x89\x89\x42\x89/\xcc\xbf" "\x91\xa5vX\xb2\xbf\xad\xbe\xb8\xa9\xaf\xc4Q\x99k\x36\x44\xa1\xf4\x11\xc2\xcf\x11\xe4\xd4\x08L\xd6R\xb9zr\xfaN\xa2\xd8\x10\xf6W\x46" "\xfb\x1c\xdd\x98\\'\xcauH\xde\xd8\xed\xef\x16\xc9p\x1bLw\xe4\xaa\xab\xebiP\x42\xe6n\xd5/\x15\x05y\xce\xbc\xc0\x95\x13\xb2S" "\xfa\xb5\xad\xefT\xa1\xc1\x0c\xa6\r\x1eQ\x1awN\xc8\xd5\x31\x42\xbc\xa3\xc2\x37~\x9b\x93\xa9\xca\xa5s\xef\xc7\x45\xc5\x15{\xeb\x44m\xf9" "]\xed\x9d]\xe1\x12z\x0c[ \xc4\x80\x8c\x12\xc9\xd2\x0b\x8e\x9e\xd8\xd0\x10\x13o\xb8r\x45\xa2y)\x84s\xb4\xf2\x82\x44[S\x88\xf9" "\xd0\\\x8f\xb3:\xc2\xd9\x91\xd3n\xb1\xc7\xb5\xe5\xc2\x15\x7f\x95\x93\x36\xca\x1e\x89\x0e\r\xc8i\xa7\x1c\xb7sP\xda)\x84~\x61\xda\xc3\x38" "\x9c\xfc\x99_\xa9\xc9\\\x0c\x13\x8b\x65\x61ru\xa8\x98\xcc^=:g\xe7lLZ\x39%\xed\xafY~\x80R\x0b\xfe\xc2\x11:g#" "\xd5\xb9^Z\x10\x89\x89n\x8e\xb0\x65'\xe8.\xf8\x62\xab\xf9\xe3\x64\xc0\x08\x98\xd8\x7f\xdaL\x39\xf3\x8a\xe9\xcb\xb1\x34\xa5M\x94\x89\xf9\xc2" "\xf4\xe2p\xb7\xf0\xbd\x94^%\xa6\x0b\x84\x1f`n\x1bO\x66$\xbau\xb9" "mr\x39g\xd3Z\xcc\?\xa6\xfe\x90\xf9\xec\x1fGNN\x0f\xa8\xa9\xaf\\\xbe\xac\xfd\x1c\xbc\x8d\xf9r\x80\xd5\x90\x42\xcc\x9a\t\x31\xef-" "\xfc\xc9\xc4\xb3\x65\x9c\xc1\x1f\x96u\x18\x12\xdd\x64\x31u\x8bi\xa5n\xb4N\xb2KH\xd3\xfe\x9c\x8bq\x41\xdd\x10\x93\x97\xa4J\x9e\x00[" "z\x62V\x16\x64\xf5\xd5\xc9w\x46\xcd\x39\x89\x95.`\xb0\xd8\xd2\xbc\xb5^\xab\x98\xe8\xeb\x0b\xd7\x8d\x64\xd1\x8dZ\x1f\x7fj\x96<\x14\xa9" "\xb6\x0f\xe8\x37\xf5M\xcd\x9d\xba\x15\xfb#\x7fX\x9a\xd6\xf4\xa4\x12\xd3nX\xc8\xd9y\x31sS)`\xe2\x0co[\xcc\xfd\xbf\xec\xe0v" "\x1b\x1c+\x00\xd9v\x81\xc9l!&\xfa\xe9`\xd0<\x65\x97Y\x14\xde\x8a\xbc\xc5S\xc9\x37\x38\xea(|\xc7\xdd\x35\xd8ut\xa7\x8a|" "\x83\xf9\\\x98kj\x10,\xdd\xb7\\\xd5\xc9\xc2\xc9>\xb7\x98\xf7\x8fv\xed\x8d\xe4\xea\xcb\xa9Mo\xe4\xd8<\xf7K \x83]\x93\x93X" "\xa2\x06<#\xebh\xd0\xf2M\x8b\xbdz%\xf2@\xcb~\xc9\x9aG \xbb>\x62\xa2\xa3/\xc4\xc2q\xd0\xd2\xb6\xe5\x1b\x64\x9b\xb9\xdf\x63\xefr\x31Y\x9e+_I\x8c\xe8\xe4m\xe1\xa8\xd2\xba|" "\x30\xd9\xe5\x13\xf3\xa9\x45\xae\x33\xce\xb4\t\x0b\x65\xaf\x97\xf9\x03\t\x33[\x8d\xf0\x8f\xa2\x14J#\x15\x62Q\xb8\xa8\x1a\xd3\x80\x95\x84\xb0\xb9" "%\xaf\xec\xdb\xd7g\xe4\x30\xef\xd4\xdb\xb9YR\x8dyu\x88=\x0e\x8e\x8c\xdf\xc6\x35\x39\x65J`\x33-\x32\xde\xae\xd9.N\xd5\x8e\xdf" "\xa1Kj\xde\\t@\xd6\xbd\x62\xa2\x1f\xaa\xe4\xc5j(\x92\xbf\x93r\x10\x14\x0cV|r\xac\xb3\xf2w\xf4\xd9\x15\xa2\xfb(\x44\xf7\x31" "\x7f\xc7\x16\x44\xfe)X\x9c\x93\x98\x0b\xce\?\xb1S\x94\xb7\x98}\xf9'{@O\x9c\xe5\x15>\x9c\xd3\x9d&\xff\xc6:^\x88\x46\xb0\x10" "\x8b\xd3\x94\xe6\xb6'&\x0b\xb2\x37\xcb\x1fo\x61{\xae\xe1\xd7\xec\x8b!<\xef\x94\xc8\xfao\xf6\x62\xbeq\x44L\x39&\xd1\xe9\x16\"\x62" "\x92\xf0\x89g\x8d\xde\x91Y\xde,{\xbc\xb1\xc3-\x44=\x9e\xff\xe4\x8cp~)\xf7\xa6\xf9\tK\xee\x45\xed\xf4\xac\x85L\xd8\xda\x39\x93" "[\x8b\xa0$\n\x39\x17\x0cr\x99\xdf\xf5W\xb4\xcesi\x1a\x8f\xa1\xefHs\xf7\xc2\x90QP\xec\xbb\xc0\xd4\xb9\x0e\r-lj\x9d\x65" "\x01\x08\x15\x63Z\x85\x66y\xc2N\xac(\x0c=\tov\x92o\x38\x00(\n\x9dN\x30\x9d_\x81\x8a\xb7\x63\xb6\x42\x45\xf9\xcf\xbe/\xfd" "\xd4\x1aN\x06\xee\x03\x62\x1e\xf1SV\xaf \xcbi\x9aWO\xa9\x89i\x06\x9a\x9b\xf4o\xd2y;(N\x8c\xd1\x44\xfd#\x66\xae\xe7\x94" "\x62\x93\x85\xa8(\xc4'\x11\xa2\x45.,\x1f\xe8\xcc\xf9\x87}\xb7\xf5$=\x33>\x1aQ\x9d\x92\x33u\xf0\x10\xe5\xe7\xff\xb8K\x63\xde\x88" "\x9a\xdf\x39\xd9p\x95\x96\xdb\x01\x13p\x7f,R\xd4'\xc9\xea\xabPg\xdd\x01\"<\xcf+\x14\x83\xd6\x14Z\xfb\xe3\xac\x85\xb3\xdf\xd5\x9b" "\x33-'\xa9,\x8e\x33U\xfa\xc1\xee\x31\xae\xaf~\x7f\xec\x83\x9f\x81*\xcc\xaf\x14\xce\xf8\x12\x08\xab\x17\xe4Y\x36\xba.p\xd5\xaf(\xdd" "%U\xd9{\xd1@\xefX\x9b \xaaoG\x07'r\xa6\x10U\x8c\xa8g\xa4\xce\xdb\x03\x15\xda:`|\xdf\n\?\xfa\xc1\xed\x89\xb6\xa8" "\xb0\x9aK\x0e\x8fK\xc9\xe2\x99#\x17\xa2\xa6-\r\xfe\xfc|mj\xe7\xc4&\xb1\x66\xc2m\x03&\xc7\xf4`\xc6\x37\x66\xa2\xae\x06\xd5+" "\x04\x0bJ\x44}\?\x38\xe9TNsU\xa7\xb7l\xe1,\xba\x1c\xc8\xeb\x11\x1f\xf5\xa9\xd0\xf3\x13\xda\x45\xf2\xd5\x15\xae\x34\xc5\xb0I\x85(" "\x0el\x82r\x34\x38\xdbPM\x46N=z\xbc\xd9Wg\xffPXN'\xea\xf3\xd3\x99\x64\xb6\xd2\x00\xc5\x06\\z\xe0\xeb#\xfaX\xc7" "\x13\xdezr\xcd\?N\xda\x07\xce\xdf\x65\x35Y\x96]\x05\xbd,\x43\x91\xa4\n._T\x63\x9d\nI\x16\?\xc9\x32\xab\xcd\xbf\x9f\x0b\xff" "\x84\x93$\xff\xe3'\xed\x45<_\x99:\xfc]\?\x62\x83\x63U\x0f-\x9dz\xc1L\x88+v\x66R\x85\xc6\xab\xa8\x99]\xf3j\xe0\x64" "/\x99&\x93\xf5\x8em\x93\x42\xdf\xc9z\xb1`\x63$`\x38m\xc0\xe4X\x44\x61\xc8\x41#\x90\xa3\x37\x85\x31\x1b\x0c\x42\x38\x94\x80\xda\xcc" "\\\xe3\xba\xc6\xecZ\x83\xda\x01\x41l\xd4\x62\x9eK\x66\x84h\x9a\x14\xf3\x1c\x44\x11\xe6s\xcc\x19j~;\x39\xd1\xe7&_\x18Q\xa8X" "<\x32%H\x9f\x1c\x86\xa7\x44\x93\x95\x66\xf1;\x35\x31\xca\t\x93\xe1Y\xc5\xc4\x92^!r\x85\x10}\xcf\"\x37\xbe\x13\xb2\xa8\x17v\xf8" "s\x0c<$\x44\xb9+\x44\xa8\xd9\x62\x9e\x1d=\xe5\xc2)M\xac_\xddQ\x88\xca/\x8e&K\tSO\xff:`\x97\xa2\xe3\xccv\x1b" "j\xc2\x05\x1c&\xcbL\x9a\xd7Ym\xbb\x9c\x15\xfdz\xb9\xdaL\xd9\x0f\x06\xdc\xf9OU\xbd\x14\xcd>\xe8\x94\x85\xd0\x7fN\x8cw]\xbb" "J\xbd\xbf\xa1\xd8\"\x83I/k\x31_\xedW\xde\x98\xe8\x1c\x85\x10\xee\x9d|\xf3\x1c\xdcV\xf6\x1d:\x8a\xf9\xf8\xe8\xda\xe9\x8f/\xce\xd4" "\xc9\"\xff\xcc\xff\x9c\x43\xa0\x42,$\x05==\xc4\xf4;\xf7\xfb\x62\xdcS\xa1=\xcd\x04\xad\xf9\xe2\x8b\xfd\xca\x0b\x97P\x08O\x0bN\xe6" "n\x98t)\x82\xc9\xe2\xa3\xf8\xc2\x62S\x38=\xf7s\x44\xa5+g\xda\x83K\x15V\x43\x8a\xd2\xed\xce\x95\x98\x8f)\xbe\xc4]-\x42\x8b" "o\\\xb5\xaa\x44RZk\xa8h\xad!!\x86\x05\x84\xb5\x02\x89\x16\xae\x10\x63~\x42\x14\xab`\xf8U\xa2[\n\x14\xdfU\x9a\x18\xc5\x12" "\x13='\x90\xd3\xc8\x62\xa2\xabX|\xe3\xb2\x02\xe5\xc6n\xf0-|\xf8\x08J\xad\xb0\\\xa2\xfa\xf8 \x99\x9bmJM\x88\xf0\x97\x42\xd4" "\xb5`\xfci\x1f\xbd\xfe\x90k\xfe)\x03<*/\xf6N,]\xe4\xb0\xd9\x8a\xd1\x46\x13u\xd1#\x11T\x0fL\xa3\xe9@\xb1g.&" "\xfc\xd1\xc1\xfd/\xdcW\xf7\xbe\xe0I\xc0\x86\x9c\x12O\xf3M\xfa\x81\xca\xd9\xef\xe2\x10;\xcf\xc2,\x1bk\xc1O\x8d\xd3\xb1P\x62Z." "\x17U\x37n\xd9\x83r\x93{w\x05\xfd\x42\xf0\x90\x61\x83\x1e\x9fH\xef\x86\x11\xb6\xa1\xe2\x62-\x18\xbfRI\xb6\x18\x1c\x31J\x95\xaa\xa6" "S\xfe\x61\xab\x05\xa8\x01\x89U\xcc\xca\x95\xd3\xb2\x1d\xcc\xfe\xd6\xb2\x1b\x94\x9c\x14\xa1N\xa1\xb8\x42\x44\xcc\xf5\x39\xb9\xb1\x33\xa2]Q\x9c\x31" "\xc0\xa8\xf2\x9b\xc4\x16UV\xd0\xba\x9a\x66\xe9\x1b#\x07\xd0\xcd,\xce,\x43\n\?R\xb3\xf6\xca\xd1q\x35\xed\xdb\xf5#\xbd\x1a\xf8\xbd\x89" "\xc2\xe4\x82\xf2\x8d<\x1d\x91\xe7L\xc6\xa0}\xa7\?v\x33\x30\xb5uz\xfc{*\xf9\x1d\xddN\x1c~&\xc1P\xb7\x44L\x7fV>\xdc" "\xfb\x39Q\?\x19\x37\xd3\xa0\xc5P\xd1\xfb\x8e\xb3PP\x96\x43\x66\\+-\xec\xf7\x83Z}\xcf\xc4\x46\x35\xa6\xa6\x1b\xdd_\xe3\xd3R\x0b" "]\\\xe5\xdc\xb8uJ\xfd\xc6n\x10T\xfa\x13p\?R\xeeH\xbe\x66\x1a\x8d\x99\xfdp\x31\xc7\xc6I\x35x\xad\xc6s>X+\x41\x84" "\r\x63+\xc8M\xf7L\xcf\x1aT\x41n\xa6\x17\x80\x95\xec\xff:\xe6\xe9\x8a\x63\xe9\x8d@Y\xe9&M\xb3J\xd0(K\xf3\x65Oq\x1d" "\x9d\xa8\xf7\x0bgx\xf6\x66\x95\xc2,M\xa1o\x66\xdc`\xb9\x0e\x33v\xf7\xbbog\x9a\xaa\x30\xff\x93\x91\xce\xea.\xac\x94\xb0\xbbPz" "\x38\xc8-\xf7\xd5{{O\x45\xf5\x8a\xc6\xce\xf8;&\x19&|\xcf\xd0q\x0f\x07\xa2\xfa;M{\xf4\xe1\x41\x87<\xac\x18\xf9\x8c\xc3#" "\x66\x33\x8e\x90\x82\xc1y\x07\xfb\x19\x99\xda\x1dJSV\x03\xae\x15\x0b~\x8c\x8d#\x35;\xceh\xb7\xa5\x9b\xbc\xa8,\x1fM\x98;#\xf3" "ug \r\x80KS\x45\x66\x95\x10\x01\x9b\xc0\xbd\xf7W\xd5_\xa1 J\x43L,\xec/\xca\x65\xe3\xb5\xb1\xe7\x0cro\xf2t\xe3\xf9" "\x83\x15\x81\x33\x8e\x1b\t\x9b|\xa2\xfa\x62uW\xe1\xf1\xf3\?\x95g\x1ai\xd5\xc7\xc3\x92\x14\xc9T\x17}\xb9\x33k\x88\xcc\x42\xac-\x12" "^]\xff\xae\xecl\x18J\x14N\xda\x41\xa3\x16\?\xb2 \xf5\xa2\x46\xc8\x89V\x9a\x83#\xcf\xe4\xa2\xc2\xa7\xfb\xb8jO\xe6\xfd\x8a/\x93" ")\xe6\x16\xdd\xfe\xb0nW\xb9\xae\x38\xe9\xd8\xe7&\xbb#\xa2l\xc3h\x31\xfd\xbe\x19\x91QX/\xf9\xaf\x46\xf5\xb6Sr\x9c\xee=[" "Z\x86\x8f\xf6g\xf6SQ\x9d\xaf\x92\x34\?uW\xc4\x66\xde\xd4\xdc\x19\x9e\x17\x38\xf2\x45\x65o\r'\x82\x84gW\xe1\xdd\x92\xf3*\xaa" "\x98;\x38Q#\x64\x65=\xe3p\x14\xc8\x11m\x31\xfb\xe7\xfe>zy\xe4\x1b\xa9\xc1\xb4\xabz\xb9\x61WG\xcc\xd7\n\x36\x86Q\x93m" "\xabY\x34j\xed_\xf3\xf8\xde\x99\\\xbcs\xf4N\xd4\xae\xee\xe4:$u\xc4<\xd4\xb1\xe6\xed\x9d)\xe6\x46\x1d\xd5\x1a\xae\xad\x39\x31\x8b" "k\xe9+\x1b\xd7K^\xdd\xc5\xf5W\xad\xbb\xca\xcf\xae\x82\xe2s\xb4\x9e\xfbK\xa8\x07z\x43\xed\xbc\xfd\x64\xe8\xee\x8f\x63r\xe6\xf4O\xc6" "|G\xe3I-\xe9,\xcc\x9c\xef\xdd\x12\xc7\xbb\x84\xba\x1d\xa5r\xfe\xe0\xdc{;\x62{\n\xf1\xae\xe4\xf4|'\xe5\n\x63'\xb8\xe9\xe5" "S\xfc\xd3\t\x0f\xbf\xb0\x39\x08\x94\xb4\xc8X\xac%'\xb3\xbdS'\x17\xcc\x1f:\x61\x65\xd9\xc8\xcb\xbf\x64\xd9\x0bzR\x8d\xe2U\xb1 " "\x95\xc5O{\x7f\x95V\x93\xab\xc9.(Liy\xfa\x07\xd1\x00O\xe0\xebw\xd1G\xe0\xae\x1bS+\r\xdcr\xdd\xa4\x42|\xe4\xe2W" "\x90\xe3w\x39\xd1-\xe4\x05~Y\xc5\xf3\x65W\xf7\x15\xe6\x8a{\xe7\nY\x8c)\xe3]\x91\xe6\xf9\x92\xc4\xb4\x8a\x10\x13G \x87v\xc5" "\xbcm\xea(\x00\xd3\xed+\x9c\xd4\x9c\xfa\xb4\x8f\xb7\xc1\xcbI\x30\x38\x14\x9b\xeb\xad\xfc\x93\x84\x05)\x94]\xb4\x98\x41\xa3\xcaP\xcfT\xba" "\xc9GM\xd3\x1e\x13\xcf<\x36\xbet\x33<|\x0e*(\xcb\xbe\"\x36\xf3-&\xa1\x90\xaf\xc0\x17}\x03@\x1d;\x19\x7f\x31\x0e\xb3\xce" "\x81\x1c:%\xad\x82M\x97\xca\xee\x9a\x83\x9f\xc5\xef\xdf\xf5\x9b\xd3\xdaM\xdf{\xf4O-\x31\xbf\x39\xaaR\xfc\x66\x34\x44\xe1n\x19<]" "r\x10\xb4\xe8\xddL\r\xa8&G#\xc4\xaa+.\x82\x01~q!\xff\x94K\x0e\x82\x0by|\xc9\x18\xb8\xc5\x65\x04\xa7\x86\xe2\xd6\n\xae" "mp\xd8'\x11\xcdT\x08\xff(\xe1\xb1\xf7z\xb7v\xaam\x00\x07\xdc\xa2\xb6j\xa4\xf6\x62\x9c.(y\xab\x39h\x0b\x15\xcf\x0e\xff>" "\x43\xae\xdcZ\xf7pk\x35\xd4\x36\xe4\x33\xde\x86\x9d\x0br\xf4\"\xff\xcc\\\x87\xc5\x63\xffi\xeb\xbdn\xe9\xc3\x08\xc6\x85\x17\x06\xeb\xa6\xaa" "\xf4S\x85\xdf\xf3\x9f\x8c\xcer\xa4]\n\xe7\xc8\x85\x18j(n\xe3\xa3\x9euS\xb6\xf4\x9c\x16\x32_m\x19\xbaV\xccR\x81\rr\xe5" "\x88\x44\x30\t\x30\x39\x1c\x33\x1e`\xa9 mX\xbe\x1f>\xb3\x0f\xb2U\x08\x93\x63\xc2\x30\x19P]\xcc\xe2\xda\xc9\xd0\x89\x62\x62\x34\xb3\xf4" "w\xae\xf3\xac\xb4\xb6\x42\xff\x14\xe3)\xee\x30 \xc4\xe8\x97\x10\xdd)!\"\x0f\x97\n\xeai:Y$WY\xaas^xx\xc1K\r" "\xef\x1a\xe4\xf8\x13\x64\x8b\x42X\xe6\xe7\xd1\xe9\xc0)\xfd\xf5`tI\x85n#\xa8]\x13\xdd\xe3\xfbO\xfd}G\xab\x01xI\x42\xed\xff" "=\x1e\x82p\xca\xd4\xe1\x43P.\x9c\x41\xe3\x85\xf3\x34\xa5\x42\\\xfa\xf0\x0f\xf8H@m\t\xf9\x17\x9e\x0e\xf6\xbf\x0e\xc5\xa6#TX\xbe" "\x64\xdc\x91R!=:\x19\xe9wv\xbc\xf0\x04\xa1\xd7\x85g\?\xce\xb0\xf3\x8a]\xc3\xa9\xe2\xf3l\xaa\xb0\xc6Wx\xf3\xe0\x0c\x36+z" "\x45\x43\x31o\x8b\xf9q\x1b\xd4\xca\x91\xee\x12J\x15=\xd4=\xdd\x92\xd5\xda\x1eS\x91\xbeK\x42\x14\xdc\xa5\xa2\xe5\x83\"\xdf;!\x16$" "\x0b\x31\x9a.\x84\xd7\xb0\x10\x01\x66\x84[\x9e\x87\xed\xcbR\x91\xe5\xa9r\x42\xde\x64\x9c\x61\xe9\x80\xfe\xceP\xc9\xfd\xa7\x99M\xf2\xed\x1e\xe4" "\x80\xb4P\xce\x99\x1b\x05\xb5\xc3\x00\x01R\xf4\x00\x7f\x89\x61\x1d\x84XJ-\x1c\x1d;\xa5\x08\x8aJ\xf6m\x34>J\x45.V/\x15-" "\xbd\xaat\\\x12\xf2~\xab\x41uG\x36x\xdc\x32{\x95\xbe\x89\x42\x04g\x12\x32\x9b+\x19\x87XL\x44\xca+U\x19\xb7I\x88\xce\xb7" "\x10\xceW\xa5\xaa\xddI\x95\x91\x03\x85\x43\x9e:\xfe\xc4\xf7N\xe2)\x32\xc5\xb9\xbc\xcc\xd1K\x9f\x9eX::\x32\r\xcaw{&\xdb\xa4" "\xae\xb8\xda\x99\x07\xfc\x83\x1d\x12\xe6J:\xa7\x1cgT\xd3\x98\xe7\x99\x18\x9cPX]\x93\x18\xdf\x11\xf2)_\x05\xc7O\x0c\xabI\x13\xad" "K\x31\xb1H^\x88\x38\x10\xc2\xae}\xa5wN\xf6/\xc8g\xfb\x1e\xd3\xe8\x8a\x31$\x95H\x80\xab\x30g\xec\xbcq\xf4S\xcdU\xf0m" "K\x88K\xdaX$\xef\x99\x06\x61\x8f\x17\xc0\xa8\xc9\xca+\xa7\xb4\x05\xed%\xba\x62`S\xe1\xf9\x87q\x43\" \xa9\x10\xfe\x95\xa0\xdc'" "\x83[\x89\xb2$\x8a\x1e:\x64\xdf\xce\x82\x41tPR\x89\xcd Q\xa3o\xe3\xce\xf9\xbb(\xc4pk\x80\x8a\xca\x07\xfb\xaa^\xdaSI" "k\x90*\x16\xe0W\x1c\x37\x00\x39\xf1%&\xfc\xe9\x41+\xad\xaf\x38\xe7&\x64\xe6\xb5p%\xc2\x46\x35<\xe7\x65r(H\xc8Lw\xe5" "\t\xcb\xfd.JWI\xa1\xe4\x87\x92\xf6\x19iw\x9e\xf4\xf9\xf0\x93\xd7S\xf2\x9d\x8f\x8fQ\xa9\x85h,\x80\x96)\x34\x9a\x96\xfa\xb0\xa0" "\x63\xa7\xea\x83\\\xb7\x9c\xf4\x16\x81\x19\xdf\xbf\xa6&\xa6\xddKm\xeev\x05\x06\xa5w.\xb2\xa5\x9a\x36\xe2\xc9\x19\x15\x16o\n\x1b\xfcs" "\xab_\x94\xffY\xa6\xa6\x16\xf0\x93\x65\xf2\xfc\xc6\x30&\xff<\x66\xef\xb8\x1e\x0b\x8aOn\x86\x0f\x17n\xb2\x37\x04s\xff\xeb\x08)\x05\x32" "\x62\x05\xcchTJMx\x87\xc3\xe4\xd4\x94\x98\x98%\x15\xb2\xd6k\x07\xb3\xac\xb1n\x9c\xf9\xcew\xaa\xe6\xdb\x34)\xe0\xb0#\xf4{Z" "\xea\xa5\x30\x42\x45\xa9m\x85\xb7\xb9\?\x0b\xeb)\x93^\x93\xc1\xc3\xa8\xe0\xfc&&\x9fi\xdb\xea\xd1\xb6\xbd\x41m\x0e\xb7\x0b\x9f\xba\xe4\xa4" "\x65l;}\xc3w\xaa\xd4\x9c\xda\x17\x31\xf7\t\x86\xc5nj\x62W\x08\x31\xe7}\xa7\x15\n\x30}\x16\x0f*\xda\xf1\x8e\xa5s\x18\xad\?" "\xa5\x42\x8f\xb3\xc7V\xb2\xb4\xc3\xd5\xbb>\xc3\n\x13\x31\x42G\x1e\xb4\"\xa4\x1d]\\:\xfdo\xc4\x64\xc4S\x31/y\x45\xd1\xd5\x8e\xe1" "m\xc4\x84\xe7\x12\x18]=\xa6&\xebm\x35\xed]\x82\xd9\xe0]\xd0\xfbI\x88%J\x34G\x15\xf2\xfd\x85\xdc\xd9\xa5\xd9\xcdpU\x80\xf0" "\xa8\xe4\xfc],\xdc\xa4#\x1eLN\xbf\xc3\xf4|\xc6=\x1e\xc0\xe8\x9c\x99<\xce\x1e\x19\xcb\xe9\x19\xb3\xe7NO\x8c\x38\xbb\xf3\xc7\x12\xe7" "\x9e\x8d\?\x64\xfe\xc6I\x1f$\x31\x0bv\x89\xd8\xd3\x07L\?*\xd6\xc8\x13\xbe\x81\x31\x1c\x36\x85\xed+\xf2\xa6@\xde\?\xeaR\xe3\x0f\xa6" "\x63<" "\x9d\x98\xaf\xbc\xc4\xe8\xcd\xce\xcc\x92V\xe9\t\xa2O\xb7\xf3g\xda=\x8a\x99\xfe\xf4\xae\x9c^\r\x0b\xe8\xa1\x15uJO\xafxv\x16\x34" "\xdf\xe8\xa1T\x1aZ\xa1\x32L\n)=\xc1\xed\xbdQ\xfa%\x88i\xbf\xf0\xacYH\xb2z\xf1\xca^\x93g{\x8eJ\xeb\x8b\xc0\x1c\xdf" "s\xecQ\xd5\xc8\xb8v\xfe\xae\x1f\x63\x0c$\x41%WMy\x9b\xd2\x03\x18\x9cT\x0eI,\xe0Q\xf6#\xedo\xae\xe2\xf9gz`\xb6" "\x8e\x0f\xed\xe7\x31W\xae\xfcvj\xf1\x82U\xefP\xd6O\x81\xf9\xdd\xe7\x9a-\xa8t/J\xaa\xd6\x32\xb9y\xfeS\x16\xa7\x9a\xea\xf1\x80" "!\x65\xa1\xf6oq\xfd\x1d\xdf\xf7\xe3\xf9\x9cj\xd3\x0br_\x9ck\x14\xc5\xf7\xe0\x99;\xa3\x82V$\?s,\x1d\x8c\xd6\xf3\xb8\xc4\x8b" "\xe0\x88\x32\x98\xce\xa3\x89\xaa\xd5\xd5\x91\x17\xbb\xd3\xa8\xe2]\x07\xcd\xac\xae\xb5\xb2\x94\xb5\xde\xda\x33\x17,\t\xa7[\xbd\x90\x96\x9d\x01\x9b^" "\x08\xb7'\xea\xa5\xe4\x7f\xb3=\t/\xfc%|\xe6\xb6\x04J&>\xe7\x41\x84\xb5\x07\xa9{\xa2\xa1}\xab\xfe@\x9e\xd9\xa7\xe7\xbc\xb5\xf0" "r\"\x39&\xb9\xb9\xa5\xba=\x94l\x12\xdfOS\xf5\x93\x0b\x1a\x35S|Z\xd8\x84\x9dL\x37l)\x99\xbf.\xb8\x97\xc8\xd6\xf3}\x46" "\xde\xb0\xe8,\xa2\xfcS\x1d\xa3/\xbb\xa9\xdb\xb0[\"\xabJk\x41(\x8f\x87\x42\xd5\xb8\xf4\x04W\xb5\xf7\xc1h\xc0\x39\x43*\xac\xf5\x82" ")i\x63}\nU\xd1\xf9\x05\xfd\x18\xa9\xd6\xa7\xe1m\xd6U<)\xdbH\x8f*.;\x13\xb3\xdd\xdeK\x97h\xb0\x96J\xc2\xf3\xb4u" "\x8e\xb1\xc3\xb5_\xca\xb0\xa6\x31\x7f\x10\xb6\x41\xd4\xab\xae\xbf\x0e+\x96\x14\x96\xc7\x38\x90\x0fj\xf6^\xe3\xe5\x7f\xa6\xe7\x9a\x30\xd7\xd4\xc9q" "\xf6\xe5\x9e\xe3\xc2\x8bgIi#\xc9\x95\xf8\x33\xb1\xa6\xe1\x33\xe3\x00\x80i\x8c\x01U\xab}\x35\x39\x34\x8e\x8c\x33rvOZ\x02\tu" "\xf8\xe9p\xf4\xd7\xe8\xc0\xb1\xd5k\xd0\xb8p\xe5\x99M\xcdZ\x37\xbdjQ\xe7\x05\xce\x8f\xed\xa9\xe0\xa4\xcai\xda\x7f~\xa8s\x00\x13\xe6" "\x9e\xf8\x33\xeb\xd4\xb8\x92X\xcc\x04\x15\x1c=\x05\xbd\x42\xaa\xac<\x10\x33\xc9\xf0j\xb9\x46\x45x\xd9\xd1)\xaaqiO\xd1\x93\xba\x64\x31" "\x90J\x13\xab\n\xdem\xec\xe0\xdd\xde\xbdw+\xf9\x95\xd6z~\xb7^\xef<*!\xf1\xe6\xf1\x10O\xf6S\xc7\xce\x1a\xc7\xf1\x81:)" "\x04\xb9'.\x61\x96\xc3\x08\x38(\xc4\xea\xcb\xd2'w\xd4\x16r\x98@i)\xf6i\x05\x88mr%l\x16\x93\xab\xac\xd5j\x9f\xd6w" "\xfc\x0c\x38\xc2\xf2\xc9h\x37\xc2\xcd\x99\x33=\x81\x98WOn\xd2[\t\xa6\x35Q\xd5\xb4\xfc+\xa6\x7f\xba\xda\xff\x31\x8e|)\xa5!\xcc" "p\x18\xaa\x90\xaf\?\xe9&\xa1\x9c\x18y/\x61\xa5JV\x8f\xc8\xfa#\xf9Ur\xd2\xd9\x05\xa6\xa5\xfd\xa7\xa5\xfd'z\x98\xb7nZ\xe3" "XM\x1b)\xf8\x8cn\x0e\xd8\\\xa4\xdb\x89\x1c\x98\xf3\xf7m\x00\x42iu\x9c\x9a\x61s\x64=\xc7\xcfh]\x36~\x90\x1b\xde\x90\xd5\xcf" "\xca\xb0\x92\xb3~\xf0'\x36\xfc~\xa7\x9f\x12\x14\x92\xc0T\xf3\x46\xea\x06z\xf5\x89\x62\xdb\xe9\x93\xb3T\xa5OO_\xee(Q\xfa\xd4\xfe" "`q\x1a\xbe\x7f\x84\x97xG\x17v\xaf\x0b\xab\x95\x97\\\x0c!\x64W\x63i\xd5\xe4\xd2\xea=\xa5\x65\x45\x35\xad\x8f\xb7\xa4\x43\x9dps" "In\xed\x38\x07;\x96\\\xbcWZ\xd2\xb3\x63\xcfT\xd7\x80\xc2$\x1a\x1e\x8b\x9dnw\x9d~\xc8^\xbc)\xce\xd5\xaa\xaa\x91\xf9\x9c\xb4" "\x10\xb9|W\xd5\x15\x89\xe5\x8d%\x8b\x9d/,\x96\x8d\xcf\xc6W\xe7\xef\xa2\x9f\x14j\xa9Z\?r\t\xa4\xa9uP\xbe\xb7T\xc3\x81\xcd" "\xb5\x15\\\xaa\x82\xfeyj\x8e\xa5\xd9\xfb\xfe\xa7z\xa9\t\x9f\t\x9a\xe9\xd8\x31\xd4.\x97\xc0\xff\x05*\xccv\xe3\xe9\x43\xaa\xca=\xabq" "\xa0\x1a\xcd\xf0mg\x83\xbb\x38p\x39IM\xd6\n\x66\x06l\xfd\xab\x8a\xef\xab\x1a\xfd\xa8\xea\xf7\xffJ\x97\xa3\x92\x85\xfe\x00\xfd\x11\xca=" "\x92\x15\xbb\xec\xaa\xdd\x97\xffuu%\xd5z<\xdeQ\xd5\xec\xd3\xda\xab\xbd\xa4\xbaY\x00W\xe8\xab\xd9\x8b\xfb\?\x1a\x36l\xda\n\xbe\xe7" "<\x86\xed}\x84\xc7\xf6\x14\x30\x91\x08\xea\xb2\xd2\x9b\x8c\xce\xd9Z\x1e\t\xdaS:\x43\x96l\x1aK\xd8\xb3S\xf7\x86N\x1b\x41^\xa6O" "\xa0\xdf\xb7\"\xc2\xb6\x0e\x10\xbeV\xc9\xf1\xb5S\x1a\xb8\xf4`\x87\no\xee\xad\x39g\x1b\x06(\xed\x61\xcd\x8a\x36<\xb8\xb4\xd6\xfd\xd2Z" "\xffK\xee\xbc\x07\xea\x1a\xd9\xcc\xd6\x95\x95\x96jZ\xbd\xa4\x66rP\xb2jt\x99&\xd6\xee\xd0I\xe7q\x9a\xcd\x63+\xfaTY\x0b[" "\xcd\xf8\xb0\x95^\xf4\x8f\xfd\xc4\xcf\xab\xf3wq\x9a \xf4\x35\x94\xbd\xe7j&G\x63\xff\x80\xce\xe8\xca\xa1\xf1\x85\xcc\xdc\x39\x83\xdc\x87\x35" "\xabU\x31\xc4\x9d\x98Y^PX\xe2\xdb\x65\xf3\"\xca\xf0\x38\xcb\x9dW\xa9\x36-n\x82\x05\x15\x7f\x7fp\x1bXU=\xa7g\xa6\xb0R" "\xe2\xbc\xbe\x9b\x9c\x1ew\xe5\xef\xb7(\xcd\xd0\x92\x8f\x96\?\xd6\x31\xf1\x63\x92\xb1\xcaw\xffu\xe0\x9f\xdfS\x9f\x80\x1eSIZ\xde\xa4\xbc" "\x46R~\xb0H\\r\x1b\x44\x90\xab-\xd4l\x44\x03\xbb\x63\xf9\x62\xa5\x44\xf3\xf2\x34\x9e\xf3\xb5\xb2\x19\x95\xa5\xbf\x8a:\xb3r\xf9\x15Y" "\xce\xe0Z\x33\xe1\xbd\x9dy\xd4sJ\x43\xc6Z\x11\xaa\x92\x83k\xba\x63\x88\x1a\x97\x9d,kR\xe5\xd1\xd9\xa1\xf4\xf1\xb0[\x0cU\xd8Z" "W\x02\xca^V\x31\xd3\x07,\x66&\x17\xe4\?\xe9\xd2\xc9\x03\x7f\x45\x8a\xaa\xb4\xc7\x01uv\x15\x1f\xbd\xbb\x8a\xde\x06\xfez\x89\x8a\x07\x87" "\x8c\xb4\x42\x35\xccZ\x03KU\xd2\x39\x90\x8f\xa9\xe6\xed\xdfMy\xcf\x0c;O^\x99p\x07J\x30\xcd%\xdf\xfc\x01\xae\xeb\x10\x66\x98q" "\x31\xf5\xc8G\xe0\xb7\x1f]\xdaGl\xb4*\xb9Y\n\xcd\xef~\\Z\xb9\n\x8b\x97\xbf\xab\x92\xab\xe8y%%\x1a\xdd\x19q nZ" "\xfc\x01\xaa\x91-\x93\x86\x92\xd6\x19\xf7\xfaQ\xc5\xc4\x8d\x9eX\x04\x44\xaf\x95`\xba\xe1\xee\xeb{J+\xad\xde\xb5\x94q\xc1i\xdf\?\x89" "*\xe6\x16*jTrJ\x41\x91\x9aV`\xd9,\xa8R*k\xeb\xf6.=+\x45\x1c\\Z\xaa\x9fj\xef\xda\xeb\xca\xf8\x90\x89Gw" "\x64!\x9b\xd2K.\xe5\x13\xb2-\xbf\xe4\x32z\xe5\xc2\x19\xd4\xca\xc1\x64\x63-r=`s\xbe\x30}\x07M(ks/\xbd\xb4\xf7\x1a" "\x8b\xee\x30\x42+\xdb\xe2O\xfb\x31{\x9f\xe2-K\xc2x\xc7\xb2\x43\n>\xe3\x05y\xf8\xe8\xf4tN\x8e\x0e\x9c\xdaU\xbf\xe7\x89\x93\x0c" "\xaf^j\xf5\xf0j\xeco\x61\xd2\x62\xc5n\xd3\xb6K\x9b\x9a\x15~\x87\xef\x19\x37\xe3:_\x32\xc9\x98\xe4\xfdR\xef\xce\x1a\x07\xc9\x80i" "\x9f\xbc\x1f\x06]\xf3\xdb+\xad\"\xa6\xe2\xea\xafu\xad&\x03\x11\xc2\xb4\x87\x03\x13\xe3)\xe5\x03\x36#\xca\x07l\x36\x81\x61\xa7\xcd\x89\x05" "Q\x98\xf9\x15\x62\x98\\\xca\x43\x8c\xe9\x96\x0f\xe8\xc5#\xd4\x31I}\x34\xe5\x43Vq\x42\xc4M\x10\xa2\x31-\\\x8d\xc2\xd2+\xb7Gq" "\x95\\\xec\xa0\xc2\x9bs\xf2\x1d\xa7;\xb4\x8b\x38\x64\xdc\x8c\xf2!\xb7\xa0/\x1f&\xa7\x43\x12}\x05\xe1\xcd\x1b\x89\xa8.\xe5#\xd3Y\xbb" "<%\\\xab~\\\x85\x17\xe3\xf0\x42\xb3\x9eO\x15\x94\xcb\xf6[\x35\xb6\x0f\xcb\x35\xd7\xc9\xd5\x01\x1d\xf8\xcau;\xd4\x30\x9e\x30Ps\xf9" "\x84\xb1$\xca]\xce=\x81\xac\x63\xcb/\xf6\xd5\x37\x1d\xf5\xe9u\x82\xe6\x1d\x14\x17\x32\x81\xa9\x13\xae\xa8\\\xeb\xf7g\x16N\xae\xa8\xfc\xbb" "\xcd;\x1ds\xc3\x0b \xea\"\x17\x0f\xed\xeb\x18\x0f.\xeb\x92>\x46\xb6.\xbf\x85\xc5:y\xf6\xae\x8b\x0f\x11.\xa4\xfc\xc6iOP\xfa" "\xfd\xccnP\xc1\xf7\xf8wu\xe2*j\xdb\xa6\x92\xa6\x16\x0c\xde\xe1\x8a\x8d+\xa8\x64\x39\xa5\x43\x80(\x14]\xca\x63\x90\x05#\xa8)\x8e" "\xa1\xc8T\x31\xb9\\\xa1\xa5\x94\xaa\xe5|_\xa1/\xe4\x8a>\xa6\xa9\xc2\x32!W\x8cJ\xee\x8a\xc5\x43\xaa\x10\x7f\xcf\x15\xa7%\xa1\xe4\x84" "\x1c\xaf\x81\x92\x0f\xf6\xaeL\x14\x37\x61+\xbf\xd9_L\x38,\x02\xeaz\r\x44\xf3VU\x31\xd6\xfe\xbeP\xa3\xa7>L\x46x\x10\x13N" "\? \xe3\x07\xa8i\x7f\x8b\xaeSy\xc2\x00'\xc2\xa3\x35\xc9\x8c\x34\xe1\xec\xa4\xf0!\x43\x62Q\xa6rh\x8fQ\xccg\xb9\x12M\xb3\x9e" "\x46\xdbN\xba\xfc\x85`w\xe1W%\xa6_U\xf0S\x05\xc3\xec\xa1\xb1\x41\x16OH\xb4\x02\xc0\xa0T\xb3g:\t\xed\xafY\xfb\x0b'" "\xf6m\x34\xd0\x41\x16$\x62~\xf2O\xa2s\xe3\x05\x8fG\x03\xfe\xa0'\x80\x30(\xe6\xed\xd5\x83j\?\xfcn\xaeR\xc5\xdc\xae&\xa3\xd2" "\x9a\x39\x65\x33\x08\xca\x7fR\xcd\xfb\xaa\xbd\xb5\xaat\x1b\"T\x8c\xe5\x89\x7f'>\xa8j\xfc|,G\x80\x92\xe6H\xaa\xca\x16|H\xcc" "\x61\x96\x84s\xb8\xf0\xa7\xe0g\xf0\xe4\x16\x32:\x8d\x98\x88q.|\xe8\x38\xc3\xdb\xc3x\xdap\x15W\x06\xa6\xa6Q\x05\x19\xec+\xc8\x65" "\xc8\xfc'\x89n\x83\xf0q\xca\xe1[\x31\xd1\xc8/\x9b\x0b\xa2\x90\xa7\xf8\xe2\xc8\x62\xf9\x8b\xa3x\x42\xccI\x96\xbf\x18\xfa@h\x7f\xcf\x11" "%\xe1;\x9e\xf5wx\x84\xe3K\x9d{G\x98\x66\x31\xb1h\x01\x64\x0b\xb5,}\x9b\t\t_\xfd\xb2uH@v\x94\xd5|qZ\xbe" "\x85\xb9\xb9\xe6\xf2;\xa8\xa0\x9eO\xcd\xc6{j\xf6j\xfb\xcb\r\xfe\xeb\x98%\xb2\x1e\x0e\xe1h\xe5\xe6\xde\x99\xb5\x31\x8c\xc9UQ\x03;" "\n\x37\xac\xf2\x92\xcb\xa1\x95S\xb2\xf3\xa2{\xc3]\xe1\x9dZry\x9d\xb0\xbc\x8cg\xaf\xf2\x8f\x8a\x19t\x19\x17xSq\xa5O\xc2\x33" "\x0b_uj\xd1\x8d]\x8cRU\xaa\xed\xab\xf1\xb5+\xdd\x95\xca\xbf\x89&\x15\xc8\x36Ny\x99\xcc\x36\xf2*\xd2;\xafr\xf4\xbb(\xc5" "\x93\"\x9d\x92\x44\xe9\xf2\x94\x19\xfdZU\xcdH$\x33\x18^\xf4\x39\xf2!\n\xbb\xe0\x08\xe1\xb0\x0c\x32\x01+G\x01\x9a\xba\x42\x38\?\x08" "\x9b\xdd\xf8\xe0\x30j\x1f\x9b\xba\x33.\x8d<\x11Wk\n\xcf\x16\xe4y\x87\xec\x99\xee\xb7\x8c\x1f\xc6yx\x96\x63~\x14\x05\xb7[\x10>" "\x8c\x43*\xec\x8aR\x39\xf2oq\x13#!\xcar\xe5#\x99\xf9p\xd2\x1fJ\xcc\xe2%\xdd~\xc5\xc4\xb4\x92\x10\x1b\x19\x08\xaf\xe7N\xbf" "\x65.\xb8\x05\xe9\x82\r\x93\xad\x19\x31\x31\x1fU\xb1\x37\\\xf8\xd5\x0e\xbe\x9f\x18\xda\x17*y)\xfc\xa9'r\xcdt\x65\x80_\xe1\x8e\xc9" "\xc1`\xbd\xca\x91\x93\xe3\xdb\x30\xfdz\xe0\x61`&\xa6\x97\xc0\xf4P\xeb\x99\xbc\xc8\xf9\xc3\xa5sv\xe5\xc8O\xa0[\x92\\\xe4\xe8\x8f " "\n\xf3P\xc2\xce\x91\\'\x97\xfb\x8az\xe0%\x30\xb7\n\xb1XVy\x63\x64:\xc5\xdfU\xa3\xfd\xc6\x37S\x9b\x31\x06\x85\xdb\xa9\x33\\" "\xf7\xb9v\xb2r\xc4)-\xe1\x05\xf3\t\xfd\x41\x85\x8fu\xa7<\x00zzP\xbd_\xb9\x99\xbc\xf4\xfe>\xf0\xa3Wi\xf4ZQ\xfd\xb1" "SO\x02\xff\xdaJ\xf6w-m\xbf)\xcd\x9flp\xf0\"u\x30\xdf\x9bJ\x36\xc8\xbd\xb1\xe6\x11\xf3\xfeVW\xb4\xa1\x12\x10\xd5\xefs" "+!\x37\xff\x93Y'\x97\?\x62\x30~\x61%\xab\xfd\xee\\\x85\x66{n'\xac\xb1\x64\xad\xd4\x83\xc1\xa9\x33\xc8\x7f\xd1\x87Z\x14\xc2i" "\x08\x37\xc8Mu\xae\xd3\xa8\x34\x7f\xd7\xb8\x9d\x66pX\xd0\x65\xc0O\x87\xae\x92\xc5,\xc0\xe0\xa6(i\xc1I\x0b\x85o\x61\x33(\x8c\x92" "\xcd\xdd/<\x1c\x45\xf5[\xa2\xb8\r\xa0\xaa\x0f\x12\x93\xbb`T\xfd\t\x11\x90\x17*\x19\x15\xe8\x65]\xb1\xf8/\xc2\x8et\xc2.\x82\xdc" "\xf5\xbe\xc2\xf2_Q\xa3\xbe\xd3J\x11\x31\xd7r=\xf4\xbe\x80\x92N\x02\xe3\xb5\x88\xdav\xf6.\x8d\x11}@+\\\xd4\x0c\xa6;\x8er" "Q\xad\x86n\x32\xb0\x9c\x98U\xfb\xb4\x66\x44\x99\n\xa6%\xa1\xa8g\xfb\xd4\xffj\xd7\xdb\xbb\x8b\xf8\xe8\x9b\xc4\xa2@\xe5\x88\xbc(\xed\xa5" "\xb2\x45\xefqu\xc3\xd4\xe6\x02\x19\x30\xda\xb5\xe2\x87sW\xf1\xc9\x15[\xc2\xae\xe2\xea\xc2U\xb2K\x95n\?\xd8\xbf\xf5\xe7\x9a,\x1e\xe5" "\xba\xa2\xf6\x85+)\xafY\xf5\x89\xdah\x1b\xdc\xca\xb4\x13\xf9\xa7\xbcH\xc3\x31\x89\xb9\xea\x05/\xbb\xb8\xf8\x46\xb5n\xd1\xaf\x15&\xfb\x84" "j^\xe8\x32\x42t\x42\xa0\x82\xf1\x65\xaa\x98\xec\x17\xc1\xe1\x37\x32I\x86\x8a\x89\xa4\x64\xc2Q\xc1'M\x1f\xfd\xa3t$\x83\x66S+\xa1" "\xc2*\x9e\xdd\xb3\xa1\xaf\x9f\xbc\x92\xcd\x0c\x1d\xc9\xd4\xbcs\xa6\xbd\t(\xf6\"`&\x37\xb7l\x16\x8b\x42\xe3\\x\"\xfd\x0f\xdd\xa9;" "@\x9f\x19\x07\x18\x62\\\xcc\xcb\xf9\xff\xef\xf7\xd1\xd5\x03u\xbf=\x38\x0f\x88z\xba\x94\xfe\x80\x15\xd2\x17\x9c\x88\x15Nw\xd1z\x14\xbf\x1f" "\xb9\xb2\x12O\xcc\x9f\x18^\x17\x62\xc2\t\n\xd4&\xee\x81\xa5\n\x66\x04\x94u'\xe7m\x61J\x91\x43si\xd7\xb2\xbd\xd4\x36\x39\xaay" "WV\xfa\\\x84\x07})\x19\xb9\xe8W\x14\xdaj\xca\x9f\xf8\xe0\xc2\n\x8b\x8b\xb0\xb5\xd4\x96\xfe*\xbf\x97\xa8\xf4\xb5\x05\xe5\xb6\xa2\xf7q" "z\xc2\xe7\x02\x89=\xc1$W!\xac\x96\xb0\xf8\xe6\x19#\xaa\x31\x41\xa3\xfa\xb3\xf4\x15=U\xa2\xd6\xb7\x95\x0c\x17\xec\x62\x83q\xbe\xc1\x81" "<\xe4\xcf\x64\x61\x1e\x36T\x7f\xd9%\x1a\x1e\x90/\x37\xc6\x81S\xc7\x95\x37\xf6\xe9\xbb\x9d\x17\xa9N\xc7\x43Q\x96\xb9\xe8>\xa6\\\x45\x95" "\r\xfb\x61\xa2\x32ygP\xcd\x31.\x96\xa8\xdc\x8f\xd3S)\xaet\xe3\x9b\x02\xc7\\\x44]\xdbIo\x98\x1c\x0c\xbe\x0e\x06\xe7\xdf\x9eK" "\x34\x14\xfbw\xe5OU\xf7\x7fx\x96OO=\xe7+\x12\xffl\xf7\x1eKr\x30\x96\x16N\xc2\xf2\xf7\"y\xb8Kw\x88\x13\x65O\x43" "\xc8]\x02\xc4\xdc\xeb^\x42i\xc3\x1b\xa3$\xa2\x66\xfc\x81\x64\x89\xb7\xe7\x8a\x9b\x12\x83\x1c\x95\x83\xc9\x89\x38\x31\x8b\xa8\x62n\xc3\xc3/\xf5" "\x0f:@\xe1s\x1bU\xcd\xf7R\xcdW\x92\xf5\xfb]\x80\x15*\x42\xf4\xed\x84|\xc5\xeet\x94\x8d\xc5\xec\x9d]\xd7]\xba}\x45\xe5." "\xcc\xd6\x35\xba\n\x06\x0c\x45\x61\xe8\x46X\x36\xc2\xd1H\x88\x19h!z\x66\xc2w\\\xfa\x9d\xfcS\xde\x07\x39\xe9\xa3\x96\xa2\x97\xae\xa9\x96" "S\x8f\xb2|v\xf5\xf7\x1d\xa9\x31\xe2\xd2\x44\x1b/\x99\xe5\xbf\x8eI~\xb1\x63\xd2\x84\x92>\xb1\x35\xa1\xee\x43\xc4 \xab\xdcG\x08\xdd." "\x84W|\xe5\x9e\xfdr\xe1\xa4HN\xdf\xc9\xcfs\x12\xae\xe7\x95\xfb\x64\x8d\xeb}\x8e\xaax\xc1\xde\xa4\x84u\x86\x17w\xbf\xab\xaa\xa9\x17" "'\x87Y\xc4\\U\x7f\xd7\x8f\x66\xbe\x1aW\xf6\x42\xbcqp\x10\xe4\xea\x8a\xca\x1b\xa3\xc5\x83(\xc6\x37\xae\x82\xaa\?\x06\x8d\x16\x80\x1f\xfe" "r\xa5\xcf\x05\xa3Y\xa2\x8am'\xa7\x80\x61\xda\xb3\xb7\xf8\x02 z\xe6Y*\xff\x62\xed\xcei\x8d>\x98\x9fY.z\x80J>ls" "T\xaaM!U\xcd[\x12\x1bQ\x83\x9c\x1e\x12\xf3\\\xdaJ_\xb1\xdd\xbf\xf4\xe4\x82\x8dt%\xeeu\x05\xdc\xe6\xc8\x9a\x35o\x01\xd6I" "(-!\xfc\xe2z\xaf\xcepzl/\xdb[\xd0o\x38\xady\xae\x66z\xd5#;\x17\xa6\x03\xc0pv\x14\xc3\xa9W\xd5 \x98\xdc'" "\x17k\xaaq\x31z^\xd1SN\xd5\x97\x33ju\x39\x05K\xe5#\xb6\xa2\xa6\x65g\x90=\xe1\x42\x10Q\xb3\x9c\x93\xa3UjZ\x92\xcc" "\x66\xce\xf4\xca`r~\x46\xd4\xbb=\x00\x04\x39\x01\xb9\x32Y\xcc\xed\xa9\x01\x43U\xee\xa7\xe6\xdd\"\x1a_\xb8\xd2" "\xa5\xf4\x7f\xbf\x97\xde\x8a\x98\x85\x17k]\xa9\xd2\xc9S\xf8HR\x9d\xac=\x33\xab\xbax\xe2<\xb1\xa8\r\xb3\x93\\\xb1_\xae\xd5\xc5\xca" "\xb8\x32K\xda|}\xe3\xec\xb5\x93.\x94\x34o\x99\xbd\xac\xa6~\xe3h\x07(\x8f\xd7z\xa0o\xd6\x61x\xa3[\xfc_\x36\xd4\x61\xb5\xdd" "\x9d\x9bR\xb4pr\xde\x95uO\x10\x16\xe4/\x8b{\x01)\xe4RT\x98:_\xbf\xea\xec)\xab\xa1\xa0n\x32n\x46\xeb\xee\xde\x07\x9e" "x\xea%\x9e\xdb\xba\x99\xde\xde\xf0$\x41 Z\x31u\x61l\xdf\xcc\x91s\xefPz\xa6\xcf\xac\xf3ws\xc8\t\x33U|\xeb\xbd\xe4\x14" "\xa6\x63UP\xe9\x9fs\x44@\xc9\xe9h\x31w\xddxY\xe6V\xb3\x95\xb7$\xc7\x94K\xe3$\xc1\xd4\xd4\xb1\xe7\xc9\xbd\x45\xc1\xf4\x0b\x9d" "\x85\x13\xfbX\xf0\xb5J\x1e\xf2\xe8M\xf3\n\xad\xd3\xfc\xe6\xaf\x81\x90\x1e\xce\x95\x91]\xa6R\x07\xe9'\xcbx\x8c\xa7:\xe2\xb8\xa1\xf2\x9c" "\xc4\xbc\x64\xc5\xb6\xec\x12\xf2\x9au\xaf,:\x38T\x46\xf4M\xaf\x8c\xa2\x17~\xc4%\x45\x95Q\\|\xb1\x87=\x8a\xa7<\x0b\xa3\x1a\x82" "\x1a\x43\xf9\xe0\x81\n\x9b\xf9T\x46\xfemN\xfb\x0b\x31\xb5%\xbc\x46\x8e\x18\xffnk\xd1\xfc.\xe9\xa1p\x18\xdb\x38\xd4\x98K@\x84\xbd" "\xb9\x86\x02\x44\xac#\xa8\x64\x99\xa3\x39j:\xe9\x17\x0e\xd3j\x46\x98\xac\x01\xcc\xb4\x62\x1f\x8a\x35\x8c\x9a\x61\xb3\xa1M\x9d\xd5@\x1aU\x41" "\xee\xc9*\x65|r{\xc1\x1d\xbe\xa1\xac\x9b\xa3\xa6\xbd \x34\xdf\xdc\xa4\?\xbd\x98\xd2\x83\x61\x8fp\xaciY\xaf\xa8\x8b#&\xc1+\xe3" "\xf0\xa3\xc4Y\x7f\x31\xb7#\xa7_<\x9d\xfb\x85\x83\xec^rh\xbf\x97\xd9}l\x39R\t\xbf\xd0\x07\x46@\xafL\xa5]\xe9\x94\xa3\\" "\x87Z\x99\xd1Q\xb8\x32\x0b\x10\x35S\xd8l\x90|\x11g\xf4\xdd\x91\x42\x83\x8f\x63\x46\xbf\xf3\xca<*#\x05\xbf\x7f\x11\x19\xa2\xf2M\xaf" "\n\xe9\xf3\x33\xbd\x17\xd6\x94]\xc4\xac\xcb\x17\xd6\xdc\x96\x1e\x02\x12x\x1dUQSo\xb8\x65\x80\x12\xc7\x37RgH\x1f\x9b\xf1hTm" "\xc8\xe6\xad\xde\xe2\xc9v_]\xbdQ\xb1G\xb5\t\xae\xeb\xce\xfd\x33\xb4m\xf3\x03\x31{\xd7\xbaP\x86\x45\xe8\xc6\xb2\xc0&\xe8\xb7\xe2\xd9" "\x19\xf7&\x86\xfa\x1bq\xd1\xc8K\x92\xac\xd6\xb6S\xa5\x1e\xdb\xa9z&\xd3\xee\xe7\x46\xf2\x0f\x17N\x88\x39\xb7K\x95\xa7\x8b\x9e\xd1\xbe\x62" "Y\xb9\xb1\x96\xb7\x10I\xb5\xe1&\x00`\xba\xb7\x8f(v\x90\x95\\\xb6'&\x07\t\x37Q\xa5\xe8\xd4\xfe\xf4\xdd\xcb\x9fZ\x05\xd8>\x46" "\xd5\x05Ym\xebx\xa0\xfd\xa4\xf5$\x37\xd1\xf9\xd8i\xd5\xd6\xc6\xfa\x90\x1b\xab \x37\x96{\x37\xf1\x05o\x32\xe6\xf0\xf3&\xee\\\x92\xf3" "\x97\xbf\xfe\xe4\x86\xb1\xc4\xc1\xbf\xd1\x9dM\xf2\x38\xdc{|\x92iSU\x95\x04\xd1\x94\xaf\x16\xb8T\x03\xe4KX\xad\x33OT\xeb\xec|" "\x80\xbc\x1d\x31\xb1\xacO\x39%\xedO\xb8n\x44\xd8\x31\x8d\xa7\x0c\xa6g\xeb\x17@\x96\xaf _u\x37\xa5\xe3\x1b^v\xb9\xbe\x1d\xc7\xe2" "\xc2\x11M\xf4\xe3\x84\xb5\x33\xf2\xe6\xc0\x19\xad\x1e\xa4O\x18\xd4\x0e\xc3N\x91\xcd\x1e\x39\x8c]\x8c\x84\xf0\xfb\x03\xd9V\xaa\xd6\x39!#\xc4" "\x93\x04\xfd\x1a\xfc\x0e\xd9\x9f\xa9\xd6\xe3\xd2\x07Y\xe7Y\xe3\xc7\x1c\x39[\x82\x0cvX\xb5\xb0\x03\xc2\x45J\xd6\x41\x62.\xa7\x46}\x87\xab" "gQ\xe5=\xc8\xf5\x83\x45\x86]\\\x39\x80Q\x39\x30\xbc\xcf\xb8\x99\xbc\x1c\x07\x9d.g\xa3\xab\xe7\x9c`\xa8\x9e\x07\x88\xe8^=\x0f\xcb" "\xaf`\x84\xad\x06\x84\x30SU\xc3]\\\x44\x88\x91YmK\x35\xc5\x18,j\x1e\x1ak\xc9\xe5;\xcd\x65\x8d\xc4\xeci\xb5\xcd\xb2L\x98" "\x7fw\xda\xbd\xb4\xd9\xc3\x06\xb5\xea\x43\x84rQ\xe8YW\xad_U\xb5\x15\x9d \xebL\x31\x11\xafM\x88Y+!\x42`)\x17\xe4\xc9" "\x1b\t\x1f\x04\xe1\xc3-\x89y\x05\x61\xcf~\x02\x05\x9c\xb2\xa7\xe1\xca\xfc\xdb\xd8\xce\x41\x99'\x97\xbc\x00\xbeU\xc2\xe2\x07Y:\x36\x9e\x1a" "G\x64\xd9\xb4\xdd@\xc8\x8c\xd1\xa6\xc3\x87\xb2\x66l\x1a\x99\x42\x61\xd5>\xaf\?\x19\xbf\xc9\x86}\xff\x98\xd7\x13\x9e\xf0n\xc2\x16\x93/<" "\xb3\xeb\xc3*\x02\xe1\xcc\xce\xf3\xc5\xf3\x30\x98\xaa\xf0\x88\xa9\xc3\x89\x0c!\xa2O\x80\xc9\xc5\x9c\xa6]jT^\x38\xe9\x91.\x66\x87\x8f:" "\xba\xe3\xd5\x44\x03^\x35\x43\x32\x0b\x11\x07O\xf8\xc0T\xe0\xdc\x83p\xc5_g|\x38%\xbfO\xd7_\x61\xdex\xc5\xf3j\xdb\xe6\xe0\x85" "\xdd\xd5j\x07\xe3}\r\x33q\xe2\x0e\x1d_\x85,.:\xf4;\x12\xc2+R\x38Y\x92\xf0\x43\x12\xee.\xd2\x43\xbb\x0b\?\x1b\xa7\xc2\x95" "\xf8\xd9\x0e'\xa2\x84\x95\x94\xda\xfe]\xf7\xa8n\xaf\xc9\xcf\n\xb9X\xb0\x1dZ\xed\xc8\?\x12\xe5\x63\xb5\x13O;N\xcb\xae\x1dN\x1eW" "o\x02L\x82\t\x11\x33\xb3z\xc3\x30>\xd5\x1b{\x10\x37\x9c%\xaa\xde\x46U$\xf5\x83\xbc\xdb\xca\xfe\xef\xea\xd3)yP\xa7M:\xfc" " (\?\x82\x11\x0b\xb1>\x37\xf6\xae\xf6\x39\x17,\x44\x64\x88j\?\xb9\xaa\x90p-\xaa>\xcb\?'\xeb;\x31\xb1\x93)\xc8\t.\x98" "\x1c\x1b\xab\xbe\xa4\x43\xdd\x30Y\x8d\xa8Y\xe1t\xa6\x98X\xc3\rr\xa9&L./\x16\x13\xc3\xdb\xd5\x97\x00\xfbKUm\xd8\x46\x98{" "\xa5\xeb\x81\x98\x18\xb3\x16^\xf2\x84\x41\xbb\xack.\x98\"/\x01\xfc\x8f\x94+\xb2g\xdfz\xce\xb3M,&\x46\x32\x41\x8e\xa7\x89\x89q" "Z!*p\x30\xfd\xe5%\xbf\x12\x1e\x99\xa3\xabo\x10%\xac\xcc\xb8\xb9\xa2\x98u;\x84\xce\x99\x10\xcb\xa3\x85\xd3y\xf8q\xef\x17\xc7\x35" "\xce \x17\x36\xc3\xa4\x1b\x9a\x98\x9f\x87\xdc\x15\xd6\xcd\x34\xd2\x96\x1cX\xf2\x9a\xad\x9ex\xc1\xa4\x42\x8d\xf3\xdb\xa2\xaa\xf7\x64\xcd\xbeu\xc9\xd3" "\xb0V\x17\xbe\xdc\x91o\x1b{\x8a/\\\xcf\"\x44\x85_}\xe1:\x63\xe1Q\xc9\xc9=}\xd4\xbc\x36\xde\x18\x99\xb4\xecI\n\x11\x06O" "\xf9\x93\xfeu\xb1j\xac\x19\x99\x0f\xe2\xca\xa9\x91\xb7\xc1q^\xe1\x12\x05\xe9Kr\xbaKw\xac\xdcS\x9e~\\.&\x64\xad\xf7\x92\xbc" "\x65H\x34\xb0\xab\xaf\xf6\xcc\x94l\xe0\xc3\xe4\xe8\x80\x98U\xfb\x94\x19H\xc9\x39\r\x31O^\xc8\xd3Q:Hl\xca\x06\x90\xab\x7f\xdf}" "\x9cZm\xfb\x8a\x1e\x87\x1d\xf5\x06\xa1\x98\x18\x65\xaa\xber\xb2\xb3\xfa\xca\x31}\x61\x91\?\xc2\xc6\xbc\x90O\xe7\xd5\xafO\xe8\x37 &\xbb" "\xf9\x62\xde\xb4S\x13n\x36\xd5W{VJ\xce\x1b\x88\xc9g \x64J$\xed\x1d}H\xc5\x9c\xf1\xf4rW\xba\x8e\xb8s\xe7\xea\xafh" "\x12\x85\xe7\x33\xa6'\x90\xf2\x98\xc4\xde\xa6\x42\x84 \xaf\xda\x46\x30\xc2\xc6$l\xffH\x0e\xdcS\x41s@u\\$\xd1%\x15\x62\xfe\xa6" ":\xa6\xe3\xb4\xb0\xd6$\x11\xb2Zx\xc5s\xea)\x1a\x13\?\x0b\xe7\xe3\x85\xe3oz\xe4W\xc7Vn\x8e\xb9\xa9\xa0\x10\x81\x34\x84\x18\x18" "\x12\"\x02\x8b\x10\xf3t\xd5\xb1\x35\x1e\xc6\xf4\x8d\x15\x62\xa9\x8a\x90\x99N\x99~\x45L\xf8|\x8a\xf9\x64\x9f\x62$\x1a\xdc\xfb\r+/\xc7" "\x9cG\xafZ\xbf\x0b\x94\xd6;\xdd\x90\xa1\xd2\x00\x97P\xe9\xef\xb0\x98\xb5=i\x84p\x32\xaf~p \xa8j\x91\xf6\x41\xce\x82\x8a\xc9\x02" "L\x19\x37\nnZ\xb6\x9b[\xe6\x14>\xa7\xe6r\xeeL\x03=H\x0b\x0f=\xb5\xaa-\x9b\x15\xb2\xf6\x9a[\x66\x9c\x33\xee\x81\x15\x37s" "\x8d\x64\x30\xaa\xf8\xd5XY\x31\xf7KJW\xd9\xbb\xc9\xb0\xb5U\xeb\x06Vm\xa1OU\x9e\xe7\x17\xc3\x86\x88\xc9\xb7\xe7\xc7\x1a\x9d\?Q" "=\x43\xf2\xdc\?\xc9\xb2'_\xe5+S\xd3\x9e\xbav/\xd0[u\x15g\x8f\xa9\xf0#\xb5\x13\xb6@jw\xec*\xd5\xde\xe2\x99\xb6\x44" "j#\xbeV\x42\x64\x8f\xda$y\xd3_\xa8\xcd\xf9\xf6\xd4v,\x84\xeb\x99\x08\xc5\x41\x1d\x41\xbd\x1b\x45\x31L\xd5\x41\x06\xb4\x01\x83\xc1\x15" "\xbd\xc6\x45\x35\x8e\xc8N\xc6\x19\r'\x11\x1a\xc7\xa2\xfa\x97\xc6>\x89\x88\xf5\xa0\xb4\xbc\x99\x1d\xa0t\xe7\x89\xe7oWq\xfd\x95\xad\x05Q" "#\xfb\x0bL\xbb\x82\x1c\xf8\xadg\xd9\xec\x10\x9e\xf1+\xba\x43\xd7;\x7f\x97n\x0e\xa0^+\x86\x18\x45\xd9\x39\x34\xbcsu\x95\x9a\x08\xc3" "\x04\x33\x9e\?\xa5\xfb\xb8\xe0\x80\xf4\xf2\x91\x18\xbc\x8b\x08\x8d\xcez\xd6\xef\x9d\xaf\x9f\xb0\xcb\x0b\x89\x86\x97\xcet\x10L\xd4\xec\x83\xfb\xa3\xd4" "\xb3q\xa3K\?\x66\x31\xe1\x62%\x9cV\x82Uz\x85\xf1O\x07LnN\xc8u\x36\xfaY\xc7h\n\xd4\x0b\xbf\xeb\xbe\xf6h\xe1lQ" "/\x04\xb9\xa2\xf1\xd3\xb8\x95Z\x80\x19MTG\xf7\x02\x08\xd7O\xae\xa4\xa4\x0bV\xf9T\x8ds\xec\xc0SmOR\x05o\x1f\x30,\x36" "\xb9\x81\x17\xd5i-\x1e^S-\xf8\xcb\xd2\xa0\xfa]\xaf\xe9\x08Y/\xb0%&l\xcd\x82\xda\xa9\xff\xa5\xa8\xf0\x62\xc8\xad\x33]\xa5\x9f" "!\x00\x9b\x10\xe1\xf1\xeb\x05.\x85\x14^\x9a~\xe0\xf5\xea\xcc\xe3\xba\x9f\xbc \x0f\x95\x38R\x02r\x30H\xcd\x95\x33h.#\x44\x33\x16" "\x85Q_\x65\xdb\x88\xe7Z\x62\x37\x1a\xfc]t\xd8\x1fR\x35u\x32\x02\x1aL\x96\x90\x62\x16t\xb3\xa0\xf0\xabH\x05\x7f^\x61m\xac#" "\xfc\xf6;\x41\xa3\xa2\x1b\x8f^\xe6M}\x39\xf5\xe8\xed\xcd\xbe\xeaN\xa8\xb0\xecQxw$G\x39\xa4\x94*x\x03\x8bz\xb4\xf3x\xa8" "\x01\x31\x31\x17 \x1c\x17\x9cQs\xc3\x98W\xa2\xa6\xab\xa4`\x31\xe2\x44\xcd\x1aN\x46\xf8Ts\xe6\x0c\x0evlX\xbbJ\x1eNS\x35" "\xcd\x07sK\xb1\xef\x1b'\x07\xf8\xd5\xbcu\xda\xbbT\n\x16m\xa3}\x1b\xa3\xa5\xc2\x9d\xa6\x0b\x0b\x9bz\x89[\xa5\x80\x41\xee\x8b\xde\xbc" "\xae\xb8\x94XT\xc9\x8eV'\xf2\x97,(\x45\x35[,\xfa\xc5\xbc\xcc\xeb\x07\r\xfb\xda\xd5\x38\xee\xff$\xd7L\xf8\xb0\x33\"\x31\xd5\x03" "\xa6\x41,T\xdd\xe0/\x99\xa8,\xa6\x41\xbf!\x31\xe3\x8b\x86\x34\x15\xe2\x82\x34\x45\xd7\xe9\xe1\xfe\x46\x1f\xdc\xf8gO%\x97\x87\xffPW" "T\x08\xad\r\xa6\?\xfaQ\xe2\xcc\x9c\x98\xf3\xc3 \?\x65$,Q\x9fv\xcd_\xef\xfa\x04]\xad^\x9c\xfbW\xbe\x9e[\x41S\x62X" "\x33\x61\xa9\x18\x8c\x1f\xdd\xa4W\xab\x98\xf5\x89\x91\x7f\x18\x35x\x41\xd1\to\x85+\x02\x84\xd7\x05\xa7\xfa\x38\xd8S\x13\x45\xa7\x35\x31\xdb\x97" "\xa4\xffl\xf7\x43\x9b\xd8\xc5|\xaa~\x66\xe1\xf1pO\x45\x99\xb7}\x85\xe6\x30\x94\x46oy/\xed\xa9\xbdo\xaa\xfa\xfb\x66x\x35\xa1\x93" "\x84\xa8\x87\xba\x33j\xdc\xa5\x7f\xffP\x97\xb7\x92\xfb\xaf\x43\xe9\x8b\x39\xae\xec+{M\x39\xd3\x05\xfe\xae\x46\x1cXS\xb5$\xa7L\x65)" "\x9f\x9d:\xe2un\x11\x92p \xfc>\x88\xfcgg\x1f^.\xa8\xf9VI\xcd\xbd/\xbc\xf7S\xf3\xe3\xf0\xcf<\xfb\x33\xcf\xfd!\xa7" "\xfb\x0e\xd0\xbc\xed\xa6\xe6g/\xe9\x94\xa2\xcc$\x41\xe8y\x1c\xe3\xe4*M{\xcd\xa3\xf9]\xd4\x62\x41\xa7\xfd\xce\x0e\x7f\x8e\xb3U\xc2\x02" "_Sv\x33\x84\xe8\x8c\n\xabL\x04\x8d\?[\xe5m\xc6\x9d\x03g\xb2\x66\xa1\x11\xdf\xb3\\\x65\xcbO\xf8^\x95k\r\xc6L\x38\xa9%" "\xf5}n\x33\xb7\xc5\xdb\x89|\x16v[\xae\xf4\x01,\xf8\x00\x19\xa4\x05L\xce\x98v\xc9\t\xdf\xca\xe4\x8c\x99\xd4\x0b=\x9d\xf6\x61\x03\xa3" "\xc4`i\xc2\xce\xbbS\xbau\x92\x03\xa8,\x33J]\xa7\xc1\xdd\xee\x99\xfd\x93\x97'y\xad\xe2#\xfb\xbdW\x96\x62\xdc\x44\x44\xb8\x65\xaa" "\xb0\xbf\x0bz\x61(\x66\xd2~\xb1\"\xb1\xf2\xbb\x38\x0fr\x39\x33\x97\xe4\xb2\xc4\xf9}\x35\x07\xf4\xa6\x15\x13+\xfb\x85\xeb\xab\xb8|\xb3g" "\xc6\x9f\xdfV\xf1W~\x37;\x12q\x0e\x95\xba\x8b\x9d\x15\xcc\x95\xdf\xdd\xc4\xa9\xa1\xb2\x11\x9e\xbe^\xd1\x00\x1d\xd3\xbc\xa5m%\x38z\"" "\xed\x9a\x82\x9c<\xc8\x89\x99\xafN\xee\xfe\xa8\xe6\x9b\x13\xd1\x8eW\xae\xe2\xf9\xe7\?UX\xbc\xdeW\xe8\x16\x89\xca\xb7\x93\xce\xad\x99w\x64" "\xb9\x1d\x8c\xedS\xc9\x00\xe8v\x88\x89\xa0\x61\x42\x34\xee\x85\x8d\x96\xa7\x0b\xa3\xcc(\xdb\xec\x8a\xfb\x94.\x18\xad\xe7n\xc6\x87\xd7\xbf\x9b\xeb" "\xb0t\xc0\x03\x8f\xaf\xd1\xa0M\xb3\xf7\x92\x9e\xa4\xa7Q\x9di\x0e\xec'\x9f\xf3\x41\xed<\xc2.\x61\x08\xbc\xee\xe4Z\x8a`\xf5\xa5\xc1\x13" "\xa4@\xc1\x62\t\xfd\xe4\xca\xa9\xc9\x92~\xffj\?\x15\xc6^\xc2\x99)\xed=\xae\xcf\xd0\x03\x97\xc6[{\xdb*\x9c\tR\xba\xfer\x06" "\xb5\xf4Ptl)\x39\xd9\x90\xd3\x06\xb7\x41q\x33\xbc\xa9'\xf7\xab\xbd\xec\x12\xbc\xcf\x62\x16\xad\x95`Q\r\x46]\x9aK\xbb\xb2U\xc7" "i\r\xa0\x8a\x35\x07*\xc1\xfa;\xcd\x30k\xdb]\xa1\xae\x8eZ\x01_\xbfJx\x36 \xed\x41s\xd1\xa9r$\xcf\x89\x66\xa7\x65\x64\x66" "\xe6\xc4\xb2\xb0\xcf\x8c\xc0\xd0\xcb\xa0\xfa\">\x31U\x38\x82\xa5\\\xf8\xcfJ\x95\x99\x64\x98[=\r\xc3\xf9\x8bg\x0f+\xfc*Q\xf1\xd3" "\xf8M\x96x\xa5Q\x95\x97\x13\xb5\xcbN\xab\xfe*~\x8b\xd1\xdd!\xd9\?\x8f\xe7=\x33\xfb\x41m\xc8=\xcf\x45\r\x96\xc1\xa1}\xc7\xf2" "[\xb4{\xf7\x8c\x14\x1f\x1c\xfa\xbb\xab\xf1\x99\x9bL\xfb\xf8\x88\xb7\x1bWX\x0e\xc4u\xe6\xd9\x18\x0b\x31\x84X\x8f$<\xcf\xee=\xb1x" "~\x1fl\x96\xfe\xaepi\xa3\x10\x13\xb8\xc2\x93\x01]&\xc5\xb4\xfc\xca=_\x94\xbc\x97\xe4~\x17|\x0f\x82\xc6G|P\xd5x\xb6k" "\xbeO\t\xdcq\xebun\x1cP\?\x8dN\x91\xa0\xed_\x44x\x04\x19\xa3\x1e\x66\xf0\x94~\x1a\xd7\xdf\x35\x9e\xfc\xc3\xc0\x8a\xce\xf6\xefO" "\x33|\x43.i\x07\xc5g\xff#z~\x0b\xfb\x85\xb0\xf3I\x93\x99Xi\x8d\xeav\x30\xdd\x90\xbb\xef\xa8\x89L\xa8\xa3\xf0\x41w\x45\xcf" "\xdeT\xd9I\xd5\xe5\xb3\xff\x43\xb3\xcd_\x0f\xef\x36rQ\xf4v\x11\xf5\x8e\x87\xd2\x8e\x8e\xaf\x9c\xf1\xfc\x86\xe6\xcb\xc0\x19\r\x1aV\xc2\xb7" "\xa3\xd5\x07\xdd\xce\xdd\xe4t\xb0+\xabQ\xdaq\xbd.W\x12\x9f\x1cQ\xfd\xbcp\xfdH\xbdmUK;i\xe7\x9cV\x0c>\xff\x62W" "@P\x9d\x82\xb0m\xac\xab\x08\x0b\xf1\x45!\x36z]\x37$\xf8]\x0c\xb9\x65\x84(\xecP\\\x7f\x0e\xb0!:\xa8=\xc4\xb1)\x8c\x0f" "\x80\xea\x31\xbb}s\x45\x8f\x45\x9a\x37\x8d\xd4\x1cWSsw\xb1\xf7\xf5\xa8\xff\xe4\xa6V\xae\x95\xb6+\xae+\x10\x33g\x97\x91\xfbv\x32" "V\x19Ml\x92\x08\x93\x93o\x30\x39RJ\x13[\x9e\x8bY\xb7\x0b\x38\xfe\x30\xda\x65^\xd9\xef\x63ZG\xc9t\x0bz\xb3x\x61'\xf4" "k\xf7[\x87\xcf\?\x18Oj\x9c\xee\x16\xf5\xb3u\xc6\x87\xd5`\x8c\x86\xd9\xb3u\x19\x95\x9e\x62\xd2\xe4\x8f\xb1I\x85\x98\x1d\xfe\xb8\x95." "\xcfV\x8e\xa9\xdb\xdf]\x31k\xf8#\xa0\x0f\xaa\x10+\x1b\xeb\xcf\x1c\xb8R\xd6\xc8\xd2\xca\xe9\xf7\xb2\xf7\xc8\xe2v\x81\xc4\xea\x12\xe1g\xc3" "\xc8\xe7\x96\x1c\xf2,\xf6\\_\xa3\xe3\xa9\x33u\x9a\xa2\xf2\x99X\xaa\xf7\xf4\xeb\xd6\xb2\x83\xc9\xf6\xe4\xe4\x17\x9eO\x42\x04\xf1\x11\xfe\xdc\x38" "\xff\xc6%\xfe\x94\xdd\x91\x1e\x08n+\xa9\x89\x10\x45\x30\xc3\xf3\x0b\xce\xfe\x41\xa5\xbb\x41P!:/\xcd\xed\xbb\x9b\xd6\x93\x9fX\x0b\x61\x62" "\x85\xf8\xc4*\xc8I\xc0\x9e\xff\x84n+\xa0\xb6\x45\xe0\x18#\xea\xee\x33n\x0em<\xc1\x16p\x82z-\x08\x1d\x01\xc5]wR\xd5\xbe" "\xe3\x06\x8aT\xdb\x19\xb7G\xdbS\xf1$\xfb\xbb\x99\xfa\xb1\xb0\xd6\r\xc6\x1f\xa9\x9a\xdds\x07\x11*\xe6\x38\x98\x8bgN\x86\x41\x45\xed\x63" "\x1b\x98\x82\xfaK\t\xdd`\t\x1b>\xed%\xb0\x1e\x1b\x66\x03L\xd2@%\x85Zt\xb8K\xd3\x42\x1a:\xcb\x8fp^\xf9\xa7\x92WN" "\xaa\t\xeb;\xff\x1d\x96\xcc\xae}r\?\xcc\x86\xcc\xc4\xda\xad\x13zg\n\xfd\xf3\xa5\xdd\xc0\x86\x39\x80\x91\xe0\xc1\xfdt\x16\xe5'\xd8>" "\xa4\xe1\xc3\xa0\xd2\xef\xec\x98\r\xc2\x62Y\xba$\x34K\x8f\xa4\x65\xb7\xf0\xf6\x30\xfc\xba\x0f/x#\x0cs+\x9c\x0e\x7f\x97WQ\xe6\xdb" "\x95v\xac\x11kU\x15\x1f\?\x1d\xb1@k\x8fO<\xe9\xb5\x31\xc7\x86#\xd6\xc8\x16t\xa1j\xbc\x1d\xc4\x9f\xbcQ\x46i\xab[\xdc\x0e" "\xe1\xa2'\x66\xb8\xdc\xfdu\x98'\\\x95T\x9f\x44\x99\x8c\xf1\xdb\x99\x1e*\x7f\x39\x83\xe2\x85\xb5\x02'\xd6\x81V\x46\xf3\xa1\xdfn\xd4\xcc" "\x38=[\xab\x39\xbeV\x8f\xac\x8fu\xb4\xee\xfa\xb1\xf0\"G\xdf\x16S_\xf4x\x14\xd5\xe3UG\xc3\x03}\x98+\xa6v\x34\x66\x46\xb5" "\x12\x66\xc2\xf8P\xc2\xf5\x99\x33\x39\xe8z.\x8c~\xee\x9c~\xa3\xd6\xed\xd1\xcd(\xb9\x31%\x15&W\xea\x13\xae\xe7\x03\xd3\r\xc9\xf6\x94" "\xd5\x92\x13\xbf\x62uI\xb4\x0b\x88\xb1\xf9\xbc\x10;\x04\x0b'\xbc`\xcf\x1b\xd6\xd2\x99$\xa7;\xf2\xac\xe3\xef\x83uX\x85L`\xfa\xc3" "\x08\x31OU\x9fr\x05\xb8\xf2\xdci\x89\xa4\xa6\xfc\xff\xa7V$\x86\xf7\x85\xab\"\x89\x18Y\xcaG\xe7\xdf\xab\x07\xb5j%\xf7\xcb\?\xb5" "J\xcd\x9fq\x38\xfa\xd7\x97\xed\x81\xc2\x64\x93\x0f&\xdf\x1e\x98\xf2\xaa\xfc)z\x33\xd0\xccvS\xb3\xf8\xf7\x85\xb4\xec\x86:\x9f\x06\xd9\x13" "\xab(q\x00\xa1O`\xd2\?\x0e\x66\xba\xf8\x9a\xcawgQ\x65i\x81\x30[\xca\x35\xb9\x35w\xf2\xfa\x94!\x83\x84\x19^\x03\x17I\x0b" "\x0b\xbco.\x96\x12\xd6x\xa3\xc1y\xc7*\x8e)\x97-\x83\x41\x31\xcf\xe9\x1c*\xbb\x61\x31\xc3K]\xd0\x1d\xd4\xd7\xc9I\?\xa8^\xd9" "\xe1\xa9q\xe5\xa4\xe3\xb0\x9b\x0c\x89\x05%O\xd3\x32\x8b\xaa\xa8=\x0fO\x46\xae$w\x31\xe0\nTR(\xc4\x63\xbbVV\x46S\x1d\x95" "\x99\x9b\x89\x65\xcb\xca\x81\xfc\xcf\xa5\x1d\xa2\xc6\xb7\xce\xbd\xc7*\xca\x9f\x93\x9a\x88|\x93\xaal#\xfd\x1a\x33\xf5\x94\x1e+\xca\x19\xc9\xfao" "J\xa7y\xe1\xb7%\x17&\x93\x84,R\x85K\xa7t\xa0=\x9f\xd9(\xa7\xd2\xaa~\x35\xb9_\x8b\x9a\xbc\x43z\xbb\x08\xdd\xc5W\xcc\x0b" "\xe6\x12\xfa\xb1\x83:\xaa\xddxL\x95;\xdf\xaa\x62\xb2\x85o\xccN\x92\xad\xc9Y\x81\x64Y:\xf5\xd4\x8b\x8eN\xf6\xb2@\x94\xe9\x91," "\x11\xa6V\x16N\x19\x35@\xc9\xe7\xeb\xa9\xccIY\xe1\xa3\xe9\xb7\x63\x1b\x11\x9a\x32\xb0k}\xca\xe8\xb6\xc2\xfb\x94\x1aO\x8c%\xd7\x94\xb1" "\xc7\x38oHuW`\x44\x36(\xe9\xc1\xd3\xb4\xf4\xe2\x42\\!\x9ch@+]\xd4\xa4\xab\xae\x98\xf3\xa1\xd3_\x0f\x35=\xf6\xa2*\xa6" "\x39\xe7%\x41\x39\xb3'\r=k\xea\xd3\xa4\xd0\xd0\xcdk\xd9P\x9ar\x12\x12\x0c\x8e\x9f\xac]\x0e\xd5]\x45\xf7\x07\xa9Z\x34\xdd\x94\xfa" "h\xefkT\x0c]\xe3\x07\xe8\xcf\xbb\xa7\xf6>\x96\xaa\xd7\x66\x80\xa6\t\x07i\x85\xcc\x86\xc9\xe5\x17\x37\x66\x11\xb3\x7f\x66\xc4\x1d\xbd[\xf7" "\xf0=\x82K\x0c\x18\x94Zt\xd2\xa9\x7f\x44\xc7\x87\xce\xe0\xf1\xc3M]\x0f\x80\xc0/\xf5\xef\x90\xe9\xfa\x1d\xef\xf0K+nHQ_K" "GQ#\x19\xf5\x7f\xacg\xb7\xe6^Z\xa9\x9a\xfe\x30R{]g~\x38\xf1\xee\x66\x1ah\xb3\xbe\xb6\xb1\xd2ut\x92qr\xb3.\x9a" "pj\xa1\xc9\xd9\x13\x35\xad\x14\x86y\xf5\x14]\xff\xa4\x8a\x93\x0e\x34\xd3\xf3\xe9\x12\x14\xac;\x84\no&\x7f\x66\xfa\x97\x61\xb7\x93\x9a\xef" "\xafnZV\x87\xc9\x61\x45\x98\xa7\x7fG\xef\x8e\xfe\xcc\xf4\xa2\xb8\x91\x19M\x0e\xfa\xc2\\\xf5l\x9c\x81j\xf6g.Rs\xf3gr\x16" "JM\xa9\xaf\xe9w\x46\x85\x10J\x30\x93\x13\x94-ku\xa5\x44K\xafq\xc0\x9ep\xe3@\x9e\x8bv\xf1'\xad`Q\xd5\x35\xdb\xed\x97" "\xb8>\xc3'\xcc\xb4\x8d\xa3h{\x11\x95\xb4\x92l\x94\"L\xc3\x82\xe1\xcdQ\xf8\xad\xefZ\xa3\x1c\xd4N\x41\xc6zo\x94\xa3\xe3k\xa7" "\x14\xf5\xdc\x0c\x95\n\xadJ\x98lg\xd1\x84\x33\x36L\xa6#M\xb4\x9dh\xa2\x95\x03\x93u\x0cML{\x37jr\xd1\x41\xbf\xaf\xbdy" "\x14\xb0\x8d\x1a\xc3+\t\xe1\x8f\xaa\xfc\"\xe1%\x01\xca\x85\xa4;\x12\xcb\x01\xc4\xdak\xd4\xb8\xe5\xa1\xf0\x38K\x62\tX\xa3\xc6\r\xbb\x84" "\xe8\xd1\t\xf1\x88\x41\xe6;\x98\xc1\xb4\x11\x9d\xbd\xc4\xd5lz\xe0=\xfdz\xf8\x90K\xcd\xc5\x64\xcf\xdc\xbb\n\x39\xc0\x99\x03\x98v\xa3\x30" "\xe7\x37\x7f\xe6\x93\x9bt\x88\x16\x13\xae\x7f\xa0\xee\xcb\x9a\xfbS\x9b\xa3T\x61\x1eY\xf8t\xe0L[n\xa2\xe0\x31\xd1\x90.v\x83\x44\xeb" "L\x88\x30\xbe\xa0.\xe3\xb1o\x33\x88\xa5\x10\x1dr\xe1\xa0\xe9\x8cvu\xf6\xfb]%\x03-\x32\x1b\xcd\xa8\x99s\xda\x1d\x1c\xb3\xac\x11\x9e" "\xe0\x61]\x85\xf7\x38\xcdm\xf0=\xe7\xb2\x11I\xdb\x45\x89\x31\xa3\xd4\xc4\xb7\xef\xd8!\x16\x62\xefV\x90\xaf;Ly\xb0\x8c-\xa1jJ" "\xb6\xe7\xd2\xae\x65\xc3WT'\x8f\xb9\xb1\x01\x15\xdf\x84;\xcb\x17J\xee\x8e\x43\x13\x43\x1e\x30\x39\xb8\x41\xf3\xe7.\x39Y\x9bz\x95'\xc3" "I:Q\xb3\x99\x93\xadh\x31\?\xec\x1a\xe6\xe7$\xd6\xfb\x0b\x97\xef\x98\xa0\xc4Kr\x17^\x9d;\xfd\x0f\xc3q%\x9d\xac\x12\x85\x06\x94" "\x10}\x1b\x90)\x13\xce\xdf\xfd\x00\xabsLi\xe9\xa9\xdf\xefSu\x32L\xcf\x83\x1e\x0e(GY\xb9H\x96;\xe4\x45\xda\x9b\xad\x44\xec" "\xa6\x95+\xdd\xd7n\x37\xdcS\xc1Q\xcd\xd4\xb1\x33\x38\xf9\x08\x10\x1d\x44\xd4s>\xec\\p\?\xca=\xe5i\x11\x8d[\x46\xa6\xae<\x19" "\xedw\xa0\xf7.\n]\x11P\x0b\x9d\xf5\x18*>l\xc9\x05\x33\x38\xa5(\xb8>\xa4\xaf\xc2]\xbc\xd3[\xe6H\xa6\xa8\x9fK\xf9\x62\xf8" "\xc9'\xcc]q\x1a\x8fQ\xfd\"jj\xe7\xa5\xd1\xd7\xda\xb2r\x1e!\xa8P\xe3\x99M\x8f\xc6\x88NY\xca\x35\xdb\xc2\x62\xae\x0fH\x34" "\x41\x1b\xa3\x00\xf3$\xc2rW{\x8e\x18vQ\xa5WJ\x1f\x07U\xf7\xce\xf4\xcfj\xa7\xdc\x62S\xcc\xc6\x94\xc4\x18\xb1\x10;\x16(w" "\xe9\x9e\xc0\xa2\xb0\x11\x93\x90\xb9s\x44\xdf\x08P\x87\xf4X\x44\x8d\x02\x0c\xd9\x37\x46\x61\xb1h\xfc!\xcf\xf8\x1bl\xc9)\xf9\x1b\xdc\x89\xab" "\x31\xb2\x07\x33\x42y\xd5\x32s\x44\x0er\xce\xe0\xbc\x10\\\xda\x17\x31'\xa0|\xe1\x88\xa5\x9a\xfc-\x46\x0f\x04\xb9\x88\xa5\x31\x8aky." "|r%\x8dt\xc6UO\xd5\x05\xcf\x17\xdfk\xf7\x86k\x32\x45\xcd\xed/\xbe\xec\xbb\xdb\x81qL\xee\x8aN+\x02\xc4\xdcI\x0b\"\xd9" "\x32\x95\x38\x31\xd8\x18\xf9\x85\xe8\xec\xdf&\x1b\x9e\xf3\xc7\x92+\x9e\x36i\xe7\x38U!\xe6\xe0*\x18W\xb8\x06@\xd4\xf3\x9b\x16qp#" "Q\x85\xa3\xef\xe1\xa5v\x93\x9a\x19:;\x0b\xf1L\x9b\xd6\xc2\x90\xae:.\x45\x98\xcf\x91x\x7f\x85\x35[\x84&&<\n\x94S\x12\x81" ")\x85\x9d\x95S\xceJ\xd7\\Q\x37m\xf2\xe1)\x39]$\xa8\xc7\x44!G\x08G\xbaQg\xea\xab\xa9\x07\x1eIT|\xc2\xef\x31\x89" "g&\xdc,I\xf4,\x84\xbb,]\xee\xc4\x84wN\x33\xc3\xde\xa6\x10]M\x61\x89\xd7KO\x42!\xdc\xe3\x85\x97\xf6\xbd\xab/\xf2\x86" "WL\x1f[\xa5\x1d\x7f\xb4\xef\x63\x45M\xd3\x1a\x46\xa0\xa7Z\x1a\x36\x0b\x66\xdc\xae\xe8*S\xbc\xcc<\xb0\x9d\x30r`\x33\x43\xc7\x39\xe1" "\xe5\x8e||\n-\xdd\x18\xeaN\xf8\xda\x37\xf2Q\xd0\xd7M\xf8~\x92H\x8b\x0fm\x08Qh\x82\x34\x33\\\xae)\xcc\xb5\xe8\x00\xab\xe6" "\x8c,\xf1\xc4qy\x1b\xb5.\xe3\xd3\x1b*\xac\x15\x01\xf7\x8f\xfa\xdf\xa2\x05\x02\xfa#\xe1\xed\xd0\xbc\x7f\x34\xda\xb7>\xf9p\x39\xd8!\xdc" "\xce\xc3\x12\xaf\x9a\xf1\x31\x94\xdf`r\xc0\xd4\x66\x17Wx\xc1\x04I.\x0f\x8c\xf6\xf9\xcd\x83\x33(\xdc\xfdn\xcf\\\xb1I.&z\xbc" "\xcd\\\xf0tH\x1f\x33\x31\xb1\x37G\x33\x17\xd5\xef\x9d\x96o\x61\xa2\x1a\x13\x13\x35\x36(\x65#\xab\x17U\x65\xd0\x1eW\x1e{\xc8_r" "\x01\x0b\x94\x14O\xec\xef\x8b\x82#\x0eh\xef\x8d\x9a|\?\xd5l\x18W\xa4}\xc5^\xa9<+x\x61\x81\x9f\xd3\xdf\x0b\x64\x9f\r;\x1f" "\x38\xd3\xa1Z\xdd\x01\xe1\xd8\xc9\xad\xb5h\xf2\xb5\x83\x89\xf2\x94&\xaax\x98\\\x0b*\x66\xd3>=_\x93\xedU\xb0=\xe5\xc8\xb1\xa8{" ";\r\xbc\x86|\x83\x05\xee\xae\x80\xf1\xec\xbd\x8d\x16`\x46\xf7g{\x1fP\xe9\x36\xe8[\xa6\x11\xbb\xbb\xa0\x94\x31\xf6N\xe6\x83Y\xd1)" ")\x46/\x46(I\xdaT!\\\x34\x98\xee\xd0\x05\x45\xaf(\x31\xd1[\x15\xf2\xad\xcb\x33v=\xf6{p\xfe.\xea\xf2\xfa\xff\xe3\x80\x8d" "u@\x45\xdd~<\xc9\xbb\x8a\xc7\xbdT\xc1M\x12\xdc\xff\x8b\xcc\x87\?\x11\x35\x31\xd4J\xd3\x92\x43L\xba\x63\x89Y:@\xb0\xb6\xa5+" "\xb9Z\xbfPU\x7f)N\xcf\x65_\xc3\t\xb2\x1a\x82\xc9-\xae\xc5\x9c\xb6\x9cr\r\xd1\xc5\x94j\xc1\xe7\xbf\x97+\xa2\x16\xb3jt~" "\xe1\xf4\xfc\xa0\x63H\xf2\xe7v\xc6\x08\x41K\x85\xdd\x11\xd9\xbf\x65\x9bHLK\x61\x0e\xd6\xfb\xe3\x8dV\xdf\xf1\xf0\x31Z\xf3&\xb8\xb6[" "\x88\x90\xb9 WP\x89i\xa7\x11\xb2\xd5\x41Sn\xf9\x63\x9d\xaa\xddMX\x1b\xbb\xf2\x64U\xd3\x87\x0b\xa8,\x65\xd5\xc4&\x30\x1c\xbc\xc3" "\x81\xb0Z\xa0\xa7\x00\x15\xc6\x07\x61\xeeo\r\xc2\x03\xd8\xa7\x84\xe6]+zN\xcf\xa9\xed\xae\x8fu\x30\xbe\x65\xf5\xc9\x63su\xd5v\x95" "\\\x8c\x93\x07\xbe\x12\xf1\x84\x0f\x88\xdbX\x83\xe9o\x88\xe9W\xfa\xc9\x07\x65\x65`>\xfe)\x38\x35Z\x06:\"\xcd|r\x8f$*q" "\x80\x1c\xe4\x1c\x32L\xcbZj\xb2\x13\t\x33\xf5\x0b\xa1\xf2\xe0\xfe\xa2N\x32\xce\xe0\xbe\x95\x9a\xab+\x37\xb9\x1dm\xb3i\x05V\x93\x8d\x38" "\xe1q\x93\x9c\xee\xb4\xc9\xaa\xa3\x15\xb7\x98m\xce\xa3\xe3\xaeS+,\x84\x9d\x86\xd2\x38\xdb\xcd\xea\x9e\x8a\xa7\xcd=\xc5\x30OT\xbd\xd9" "\xde\xdf\xe9\x30\xdf\x9f\x12S\xbe\x0c\x65o\xe3\xdc\?\xe5\x8a\x04\x61\xabg\x64\xc2\xd1\x31W\x88%/\xcd\xcf\xa8\xf9\xe5\xc4\x1e\r\x33W\x1c" "\x05\x85iM$\x98X|\xd2\xfcL\x96(\xaa\x36\xd6ZUr\x0e\xac\xb9\x61`\x15!\x02\xe2\x0b\xebp\xb8\x43\xb0!Q\x8di\xe4\xbe" "\xbf\xae\xe8\x89*\xeaN{\xcc\xd1]\x95\x8a\xad\x83M\xda\xc9\xa5\x89\xc1\x34\x31\xd1\xcf\x15\xc2\xc3\x15\x94\x17\x34\xf8\xc0\xeb\xb4\xb1\xcc\xa3\xe4" "\x96~\x62\xde^\xa4.\xb3\xae\xaci!\xea&r\x9fgW\xe9\x37\xe1\xb1\x08\xee]\x38]\x81@:\xc0\xba\xd2._\xaa\xf0\xfam\xa2" "\xe3\xb6\x91\xe7\x8f\x46\x9f$\xcb\xef\r\xe7\x15\x9b\x1b&\xc3\xf1\x99\xfat\xe8\x8c~i_\x1dw\xa0\"\xac\x0c\x15\xba>\xee\xfc\xaeN\xe2" "!\xff\x32:\xd7\x33\x1f_%pV\x39\xbe\x8e\x9a\ru\xef\xc0\xbb{\xdc\xf1\x33\x9dQm\xb6`\xd4(\x82\xf1\x8f\x66\xe4\xe3[vn" "\x85\x18\x31=\xbe\rry\xe3\x82\xed'\x98\x1c\x36Q\x93\xdf\x96\x9a)\xfdTZ\x1dy\xdb\xb1\x95\n\x9b\xa3\xc3\x0c\?\xce\xb8}\x9a(" "\xec\x11t|\x1b^VIl\x9d.\x9c\x36\xc2\xee)G\x16]\xb1\xd4P\xd5r\x46\xfd>=\n\x8eo\xa3\xca\x98|\xbep\xb2\x04\x17" "\x13\xbb\xee\x1e\xdf\xfa\t\x62\x84{\x06\xe9\x80#\x66\xf3\xc9\xa9{\xb5\x94y\xd9,\x9c\x84\xed\x17\x12K\?\xe4m\xdc\x64\xd3\x97L\xde\x46" "\xbc\xde\xa0T\xfa\x61\xf9\x9cj\xf3\x0c\xca\xb7P\xd6h\xe7\xecxj\xe9:\xfd\xdd\xe0o\xa6\x1c\x30\x14\x62@H\x88q\xc1\xe3i\x98m" "\x44\xcd\x01\xdf\xbe\x63y;po\xf0\xd2\xc1\x1a\x95\xe3/}g$\xbf\xc3\x8f\x0f*\x39\xfd\xe2\xc0\xd0\xf1\x97\x66k\xc9x\xc8\xba\xa2\x66" "w\xce\x34\x93\x42%\x97\xf9\xb8\x62\xdf\x41&\x05\xf9\x96\x1d\x7f\xe9\xf4\xac\xe6\x8b>\x94\x14\xcc,\xa4U}kG\xf5\xe6\x9e\x81\xfeO\x0e" "\xa2\xc3\x1f\xf2\xe4\xc0\xf8\xe4\x0cz+\x96\xd5'\x07\\\x04{R\xe0\x18\xceI=j\xe8+{\xd2\x34\xde\xc2\x93\xfc\x98)\x8e\xa1\x17\x0c" "\xad\xdcR\xa1\x10\x38\x19\xf2m\x38\x19r\?\x19\xe1\x8f\xb6\x04N\x9e\xd8t\x13\xf2\xf3'\xbb\x82'\x36\xfeN;\xbf\xeb\x43\xe3#\x18\xe4" ";$|\x15\x41\x8d\x34W:\xa7*\x9d\xab\xf2\xcf\x30\x45\x08j\x97\x1dk\xb8\x45\x61\xa8\x04\x8c\xb3\x0b\x33/\x82\xe2M\xfag(\x91@" "\x16\x89\x62\xee\xbe\xa5\xbe\r\xaf\xc6Pr&]s^\xbe\xe3\x66\x8bz\xe0\x87k\xdd\xc4\xbc\x41\xbcK,hVuO\xde\xf2\xaa\xb9)" "\xefi'\xcaw\x9d\xf1\xc9\x11\xd7\x61\x8b\xc2\xa4\x85\xf0\xb4G\xb6\xa6Nu\x0c[}\x04\xb3~z\xe0\xefG\x44\xe9\xaf\x62J[\xd4\xf5" "\xd8\xc9-\x99\xc5\x1c\x0eItw\xc1\xb8\xf5\xc6\xfd\x91N;\\\"*\xcc\x32]\xd2\xe3M^\x45\x8c\xd2O\x08\x17\x37\x61\xeb\x94\xdc\xed" "\x82\xda\xbd^\x95\x34\x84\xdf\xdb\xffuL\x83\x01\x63r\x12\x87\xd5[\xef\xb4\xe8\xcf\x80\x07X\x95\xed)\x66\x96S\x1bk=\xbd\xa3\xa3\xed" "\xa9\x05\xdc\x01\xed\xea\x1e\xc2\x8f\x8dS\x43\xaa#p-\x94\xd4\xe7\x11\xe6\x01\xa1\x10>\x1c\t\xf3\x10\x1f\xbf\xc6\x95%Mt\xc5O\x1f\x39" "\xd4q\xfa\xc8q\x87\xd3\xc7\x18~\x19\x42\x66\xb2G\xbe\x34\xa7\x8f\xc9\x87\r\x15\xd0\\\xe9{x\xda\xb3\xab\xea\xd9\xd5\x0e\x82\xdc\x13\x89\x92" "S\xf9L\xc2\x35LX\xbe\x0bo:\x41\xa3g\xea\x45#\xde\xb6wT\xd5;\xb2\x96\xe1\x14\xac\x98M\xdd\xb1\x93\x01\x61\x44I\xe2MZ" "\xd2\xf8\x63\xe3\\\x0e\\=\x39\xe3\xeb*\xd7J\x88\xc2\xea\x42!\x62\xc4\t\xe1R\x03\xa6\x97\t\xa7'!\xba\xa5\x42y|\xdd\x15\x87\xc4" "\xa8\xd0\xea\x84\xc9\xb6%M\x66p\x35\xf5)#\x36\xef\x9e\xe2\n\x00\x39\x30\xb3\x0f\xde/\xa4\x12\xa1\x89\xde\xa7\x10}\x36\x90\x0e\xb9j\xce" "\x92]\x97m\x12Q\xf2\x96\xa1@\x86Iw\xce\xd3\x01\xdbq \xbb\xe0\x62\x62\xdcR\x88V\x82\xee\xce\xc2$\xd3\xe4\xcd\xf1\x8a\xc3\xc7U" "\x34\xc9'\x1b\xdek\x88\xa5~\xa0'\x83\x98\x9c!\x93\xfc\xc2\xf7n\x80\xbb\r\?\xa6\x41\xe5$u\xb3\xc5Qu\x99\xbe\xf8\xe2h\x18\x0e" "\xf8\x05\xa8i\xbf\xad\xbb\x8c\xdc\?\xa5\xa6\x7f\xb7l\x9f\x62\xf9\xbe\xf0\xee\xda\xb8s\x32\xf2\xa9\x98/\xc7\xc1\xdd}\xea\xb8 \x07\x98\xe5\x06" "\xd1\xb6\xe9\xd4\x62`\xb0\xfe]\x9d\x05\x8dGn\x65\xab\x87\xcf\xe2\xcfi\x00\x87\x94\xd3\x41\\\x9a\x30$\xa2\x98\xf5\x19\xfb\x30\x62\xf6\x7f\xfc" "\x01\xd3\x8c\x0f\xbet\x33\xa2>o\x9c\x1dOP\xea\xe4\xf0,U\xbaV\xe8\x63\xbc\xaf\xbe\x8a{\x8a\xab`\xa8:].\xd7\x82\n/\xbb" "{g\x11\x95<\xf2\x01\xc4\x9f\xaf\x92\xd9\xb4txgv\xd2\rU\xec)&\x85\x8en\xf6\xb0xt\x95\xb4\xbfS\x85\xd5U\xa7\x63i" "\xa6\xeaw\xb0\x63\x34TX+\xb9\xb2\x8c=\x96N\x84\xfc\xcf\xa6\x86\xa8\xdes|w\xcfZR\x14\x1a-\xc2\xe9\x36\xbc\x99\x30<\x88|" "\xf7q\xe5\x8c\x8fQ&\x8d\xa3\xd2y\xb4\xfe\x08oQ@\xd8~\xe1\xa7\x63]I\x92\x9fp\x32\xed\xd4\xdc\xe0N\xcd\x0b\x0c\x64\x15|:" "\x89X]}\xb1y}\xfa\xc5\x41_\x61\x83\xc7\x19+\x41xs\x17M_\xc2\xf2%\xd5\xfd\xad\x93\xf3\x46\xa7\xb6\x97\x80\x90\x65\xf9\x17\x87" "\xf2O\xbft\xb6\xe6\xef\x0f\xa3\xf6\x91\xf1\x9c\x64\x96\xb1\x1d\x06\x94\xd7\xe4#/\x83K\x1b\x95\x45r\xb3\x96\x8b\x8fg\xf8\xd6\x37\xe7\x18O" "\xbf\xad\x88\xf9\x0e\x30= \x84\xa3\xcb\xe9w\xb8\xc1_\x7f\xdb{\xf3\xcd\x99k!:M\x42\x16\x46\xdf\x9c\xbb\x16>\\\x90/\xc7\x46;" "\x8ei\xe9\xd3\xef\xa4P\"\xb1\xf2\xa6\x95\xe5>x`|\x90\x89'v\xb4_\x08\xb6gl\x65\x89\xc2\x0b&\xdc\xf2\xd3\xb0\xa4\x33\xb9\x0c" "\x08!\n\xe1\x87\x85\xb3)\x18\x65\xa4\xa4\x9a\x45\xe3\x03*\xb8\x94\x08\xd7\x1b\x90\xde\xc2\x42\xfb%\xba\xd2\x0b\x31|\xdd:\xe6\x33\x10N/" "\x35W\xa2\xb4j]\xea\xb6\xd5\x08V.\xa6\x94\xd3\x83\xa3\x18\xc1\x41]%h\x1b@\xc5\x95>\x07\x1c]\xa5\x9f\x61\x35\xbf\xf2,\xc8\x15" "\xa3\xd7Q\xaa<\xf2\xa5\xa8\xcd\x31\x18 \xd8\n\xa8\x61\x9b\x90\x8f\x44\x15\xf3\xc9u\x83\x65\x90(\x84\xfb\x01\xd9\x88\x81\xf9\xdf\xeb\t\xe5p" "\xc3\xbe\x89\x19X\x30(\x1d\xb9\xc9\xc6\xbb\x98h@\t{Y\r\x18\x82)\x41Q\xa3\x8e\x33=\x1d<\xab\x85\xb3\x9c\xbe\x93\xf0|\x14\xe5" "\x9f\xfa\"M\x35\xe7,\x88\xc4\x44u\x00\xea*\xd6\x66-\x8d\x89(\xc7P\x05\t\x31\xc8\t\xee%\xb0\xee\xb3\x99\xc9\x85\xa8~\xa1\xa2\xdb" "\x63\xb6U[\x97~T:\xf7\xac\xa3\xc4\xact\x9cr\x17\x0c\x85/\n\xa3\xe4\xa0:\x42|\xf2\x62\xc2\x9b\x1d{\n\x62>j\xbcmn" "G\xe7\x8as\xfbP\xc9\xe1\x45\xaa\x46\xeb\xbd\x07N\x0fT\xe1\xf4\x89\x9e*\x62\xce\x0e\x8dL\x10\xfaO\x83:\x39\x9b=\xdaSIn\xe2" "*\xbc;\xf5\x87\"j\xef\x83\x04\x35\xab\x98X\xeb\t\x06\?\x39\xcf\?\xe1\x9c\x9fj\xcb\xaa\x32`\xb3MT\x8b\xa9\x10}\x9c'\xf9\x02" "\xcd\xf9+\x0b\x36\x31\xd7\xbc\x7f\x36\xbb\x41\xdd\xe3\xcb\xae[N\x43\xd6\xf8{q\xa3L\x62\x8a\x03\x0cn+r\x61~:\x39\xb0\xdf\xc8\xc4" "\x81\xd4l]\x38\xc3\x05sq|\x66\xe7=\x9f\x38\x93\xf5q\xba\x16R\x0e<\x1d\x04\xf5\xeb`q\xb8\xa7\x18u\x82\xaa\xbf\xe5h \xd5" "\xf7pO\xc9\x9d\xb0\xaf\x0b\x15w:\xa9\x9a\x32\x8f\xc5\xf3\xd7\xdf\x65\x93\x93'P\x92\x99\xd9\x15H\xd5\xcf\xc5\x9e\xa2\x43k\xeb\x92mN" "P^\x41\xce\x41\x8a\xea\x9c\x1b\xdf\x9d\xdag\xf6\xefv\xde\xf7\xd2_Tj\x0et\xa5\?'\x36[\xd7\xbf\xd8s]\xb9\"\x97\x45\x92\xe5" "\xc5\xf5\xef\xb6\x9e<\x1c\x9b\x89\x17\xf8:\xb8~\x94\xe2\x89\x63\xc4\xa2\xb0\xc4\x46\x39$\x11QR\xc9\xbf\n\xbe\x9fH\x84\"\x13\xee\xf0\xf6" "\\\xeb\x86\x9f\x93\xa1\x95\xb1\xd7\x61\xf1\x9c\xe4\xcbq\x1d~#\xbf_\xc7\x88\x05$,|\x38\xfd\xca\xd8\x92\x10n\xd7$\"\n\xb4\xae\x93" "\x13#\xf6\xfb\x04\xed\x0etT#\xde\xe1\xaf:\x1a\x9e\x82Y\xab\x63\x05S\xe7\xaf`\xea\xd0SGx\x39\xd7\xc7\x88\x88\x36\xa2\xd0\xe2\x15" "\xa2\x39+\x94r\xa2\xd3\xa1\x89)\x08!K\x91\x8e\x15k\xd2\x1b\xe3\xcf\x85\xcf\xa6\xa7\xfc\xd3p\xde\x0f\x11\x01YLx}\x08\xd7\x95\x10" "\xa1\x15[\x1d\xee\n(\xcc\x14\x39\x36'\xe6i\xc7\xc9\xc6\x9a\x98\x7fW\xa4\xff\x10\x1c\x1e\xa6^\xb2]Wz\xf4\x8d)\x10\x8d\xect|" "\xf9:\x8c\x19#\xb4\xb4\x10\x46h\xe3\xb4\xacs\xd6JO\xb5wV\x8e\xff\x82\xc1\xcb\xb5\xe5r\xa8I~O\xfd\xbd\x0f\xaa\xa4\x87\xb3\xf7" "w\x7fo\x07\xd4v\x92\xaa)SP:\xd7\xa4=\x30O\x88\x04\xf3\xa2\xca\x85\x93\xddJ\x9aR\n\xf9\x1f\xdc<\xa4\xdf\x85/\xb6\x10\xe3" "s\x42\x96\xbb]\xf6\xd7\x94\xb5\xe4\xe0\xc1\xaa\x36S\xf1n\x9a\xaa\xc3\xc2\xdfg\xd7\xc6\x1b\xe3\x8a\x44\x0b^\x83T\xe7\x9dI\xabh\x66\xc5" "\x19\x96\xa6\\=\xa8\xaa\xee\xfc\xdd\\\x86G\x8f\xae\x82\x9f\xa1()\xe7\xd5\x1e\x97\xe8\x19\xed\xd1\xaf\x41{\xf3h\x9e\xca\x15q\x1e\x86\x07" "\xdcg\x16*\xdd\x36sO!\x62\xf3u<\x38L\x0e\x8et\xfc\x84\x1f\x95\xdb\xdco]\xf2K\xba\xc5\xa5\x7f\xb2g\xfe.\xea\xff\xe3\x99" "\xcb\x1f\xdc\xb9\x85\xaav\xc6y\x44\xaa\x46M'\xd1\xee\xf2\xe9\x01\r\xaa\xdc\x89z\xbb\xf4\x00\xa6Ghj\xef\xf0\x38U\xd2\xdb\xc6\x84\x32" "\x95\xcf$\xf1\xd7\xd4\xd1:\xf7\xf6\xaf\?\xf8\xees\x99\x18\x14'\x10\xddL\x37\xf0\xb5\x03k:\x92S\x15\x9bt\xa9\x33uIO\x12\xaa" "j!\xbc+\xa4\xea\x34\xbd\xb1\xf0|I\xbfq*\xdfL\x97j:\xe7rV(\xfa\x19\xd3\xec\xedt/\xac\xbf\x07\x16\r\x9f\x83Uz" "\x96\xbd\xdf\xe5 =\xcd\xccv\xef\x31h\xeb\xea,\xbd\x65y\x90\xd6\xe0\x83\x1a\xef\xc2\xf3\x34\x35\xe3\xf9\xa3n\xaaZ\xfc\xfa;`\xbb\x8a" "R}\x66\xad\x98\xfaS\x61\xe9@\xb7u\xdb\xfb\x13\x0f\x38O\xf5S\x08\x30\xbf\x04\x45G_\x9a\x7f\xcf)y\xb0W\x63\xb5r\x86_G" "\xd1\xd1\x88\n!\xe0\x94\x96\x04[\xc9T\x05N\xc2\x88\xc2P]\xab\x1b\x64\x98\xb7\x38\xee\x01\xc6G\xef\x8c\x06\"*W\x32\xbe\xd1\xc1\x39" "\xb9\xdfj,\xe0\xa3\xa5\x95\xcc\xf2\xc9\x87\xb6\x94\x10\xb0R\x95\x9d-\xcf\xbc\x11X\x8e\xe1\x1c\xbe\x90Up\x97[v\x81\x41\xa3\xc2-\xd6" "\x44\x95\xdb\x1c^P\xf3\xc9\x19\xce\xd7\x1c\x17R\x65\x17iOU\xe7\xfd\x31\xc3\x08S\xe3\xee\\\xd9\x9f\xd5N\xe8S\xef&\x03\x34\x89\xc2" "\xe2\x44\x61\xa3\x46\xbf\x17\x35\xed\x1a\xd9z\xee\x32\x32\x8f\x10S\x8f\xca\"=\xef\xd5\xac\xc6\xf7;\xbd\xdf\x66\x95S'z\xec\xd6)W\x1a" "\x94\xfaT\xc7v\x92\xe3\xad\x13\x8b\x42'\xae<\x9b\xa9\xd9\xbcK\xae\x0eRu\xfc\x44\xcf-\xaa\xce\x93\x94N\xe9~M<&m\xb8\xbb" "o\x7f\xe7\xf4\x80\xa7\x81\x98\xd8@\x97\xe6\xee\x90n\xeeP\x61k\xc1X\x08PR\xf8HS\x37\xfeY\xa6\x07|\xd9\x19\xd5\xdc|\xeb\xa8" "\xecU\x11\x33\x9e\?x\xf1\xa8\xeag\x99\xfe\xc2Y\xcfi\xd5G\x37\xf0\xbb\xe8\xd8\x99\xd8\xef\x10\xda\xaf\xdeX\x62X" "\xf6'>\x0ex\xf3\x1d\xcb\x9d\xf9\xc0\xe1\x85jK\x16K\xe5\xc0\x80\x07\xd1\x8f\xcfV\x31\xe5\x63\xe8\xfa\x63\x93\xaay~\xe7\xd1\xde\xb5\x1c" "\xf8\xd5\x06\xbf)}G\xac\x32Wt\x96\xbf\xfd\xa7;@\xd5@-\x45X]\xeaxNY\x61\xe6\x0e\x04_\xf5\xf8\xf9\xef\xf7\xfc\xa5u" "\?\x18\xe5\xdc\x31\x34\x8e.\x8f`\xe5&\x9b\xbd\x86\x97\xba\xb6J%\x0e\xc4jXr`Ho \xd8\xb7\xdd\x81\xcf'+\xacY\xc5n" "\xf0\xdf\xbb\x1b\x0f\xfcV\xe2\xefXpK\xfe\xed\x30\xa6\xdc\x41\xfd{\xa3\xa2\xe2g\x9e\xb6\x65\x30\xd3W\xc8\x03\xb8\xe8m" "g\x45u$\xa7~\x11G\x30\xdf\x97\xb8\xfb\x8a\x95:\xe1I\x03J\xfb\x00\x89^\xea\xcb\xdap\xf0\xba$\xc4\xdc\x31\x31\x31\x7f\x87L\xed" "\xc2 \xda\x9b\x8a\x12\xe8\xa0\x89\x34\x19\xc0I\x16Q{\x08\xb1\xf6@h]\x12l>\x14\xed=\x90\xb2:\x17\x9b\xe7\x84u\xf9\x90\xb2\x94" "\xc6\xa6\xbe+\x36\xed\x0b\xd5\xb5U\x9a\"\xad\x62\xf3\x06\xae\xd4\x66\x1d\xeb\xcf\xdao\x46\xb8\x64 \xf3]/\x85\xde\xd2.\xbb\x39\xd4\xfc\x36" "\x9a\x1f,[\xc6\x02'\xe6\xd9\xc8;\x9cn\xf5\x11Ou\xae~\xc8n\x0f\xa5\xbe\xa6\xe3\x11\xf7=>\xf4\xc3i\x9bj\xddX\xf4\x8e\x63" "\xc7g/\x9fT\x95U\xe6\x8d\x9a\xc2G\x32\x31\xff\xde\xcc@v\x62\x11\x13.\xcb\xd8\xec\x19\xb1X\x9b\xcd\x1d\x88\xd4\xc1\xe4\xdf\x62\xf4J" "\x14\xba\x61G\xee\";\xfd\xa2;\xbe\x33\xf2\xf5Q\xb4\xb0\xbatr\xb2\xe2\r\tQ\xeb\x1a\xfd\xed\x13\xd1\xee\xa8\x66\x45\xd9\x07\x65[\x18" "\x61\x94\xca\x63\xa5\x10o/\x95Q\xae\x8cn\x43IQ\xec\x12R&\x95\xb0\xfa\xf5\x33\t\x8d/#\xed\xeb\x1ci\xa4\x19i\?\x16\xb1\xa8" "\x9c\x81H\xb5Lm\x0c\x8a\x99\xcb\\\xcc\x8a\x9a]\xe5\x02\xcc\xeb\t\xd0<\x1ay\x0fz\xcb\x8f\x05\xe5\x10\x44\xc4\x1ey\xa5\x34X\xc3\xbb" "\xc5\x94#!&\xac\x90\xd9r\xe4\xa7\x14'|\xac\xf4\x42-}\x12\xf1\x1c\x46|\x9f\xc1G\x1a\x99\xe8\x88\x61\xea\x10\x13\x99\x0f\xde\x43\xcd" "\xebi(\xf4>\xbc\xe6\x8b;SOo\x01\xbdx#M\xbc#\x8b\x42Z\x94\x8d\xbc\xd9\xd1\xc8\x63\xbdv\xfdu\xdf\x08\x97\x98\x64\xcar" "|\xe6\x00\xdc)OU\x8b\xb4\x64Z\xb4\xd4q &\xc5\x36\xf7\x02\xce\xd7\x61\x66\xaa\x43\x9c#-\x31G\xdaY\xc0\xfc;\x96-\x80\xb0" "Y\x91\xd0\xbbkR\x16\xe2\xdd\xa6\xb0\x30\x45\x8f\xcd\x82\x63\x31\xd8\xb7\xfc\x42_G\xe8\xff\x39\xcc.\xbf\xfe\xfd\xe4\x31\xef\xccI\x43k\x64" "\xac\xd8\xa1\xc1\x30i\x8a*;\x9a%\x88\xfa\x9aRK\xc3\xeb\xa5\xdd\x01\x34,G\xb2G\xd2\x8f=\x38\xe6M\x11\xd1-\x31\xf2\xb3z\xfc" "^\x7fX\xd0\xabUT\xa3\xd6\x35\xc2\x9aK\xa1%@\xbf\xbe\x8b\x9ew\xe1LO\x84\xd6:\x13N\x8e\xd9\xec\x1b\x63\x89\x08\xce\xdf\x88\xdf" "\x88q\xfe\xb8\xa7\x1c\x18\x65Z,\"\x87\x8f\xd9\x17#\xcd\x1aGZ\xe6\x8e\xe0N\x84\x88\x36\xc2(H\xe1,\xdai>\xd2*\"SK" "\xd8\x91V*\x46\xf6\xe2\x31U\x8a\x38y\r>\xfb\xf0\xefKJ\xb6S.\x8d\xb4\x44\x18\xc1}\x08\xf1\x06)\x35\xbc\x45$\x0f\xef\xf2\xbc" "\x86\xb7\x8as\x87\xf9\x8c\xd7O\x63\x66 +$]\xfe\xc2]\xde}\x07\x45#\x33\x16nZP\x32\x63\xd9\x96\x16\x94#- \x89\xbd\xbf" "\xfd^\xab\xa5#\xcb\xc0txy\xa4\x03\xdb#,\x85)\x8d\xa2\x44I\xb9\x61\x37\x41\xe8\x89\x1aY\x38\xc0\x8b\x87\x90\xf2+\x0bPL\xe7" "%VU\xb7;\xe2\n{g\x8a\x17U\xe9+\x82\x0f#\x62\xef\xd1H\x99\xa0\xfe\xf2\x43\xa3\xda\x87\xc6\x93\x0f\xcd\xdb>\xb4\x07\x9aZW" "\xa9\x90*\xe7\xff\xcbm\"R\xdc\xe8\xfc\x1f\x33\xe2\x44\xb6\xf0\x81}`\x88\xb2\xdf\xb5\x30\xbcMhM\xf9\x43\xe3\x31\xd3/\xdc\xc3\xb3\x86" "\xa8\xe8\xf5\x8c\x9dOH!N\x7f\x84\x37s\xe5\xc6~\x8eI\xb6\xc4\xb7\x8a;\x84@\xfd\xd0\x41j\xab\xd9\x7fj\xf5\xf1\x1b\x0b!J\xdf" "XK_R\xc7\x65\xa5o\xad\xaf\x8c\xfd\x07\x39\xcf\x18\x8e\x39J\x63-=g\x7f\xc8\x95\x88-\xe5\xd8H\x95'\xaau\x99\xc2\x14v\x36" "\xf7 :\xcc\x89\x1fJ\x89\xa1\x33\xecm(\xd4\x86\x04\x9b\xd8\xf2\x42Ln\x61\xa0\xc4\x9ai_\xba\xfaG\"\xca\x0cP\x62\xf7\n|\xcd" "\x83\xbd\xaf(]\x08\xd1\x46\x9c\xe9+\x98y\xfd\"\x38I)\x7f=\xd9\xc2\xc8L\xed^\x99y\xd3\x89Q\xeb[\x33}}Lwh\xa7" "\x17\x97\x89\xc0\xc4\xd3\x8d\x11\x0b\\\x61\xba\x31\x8b\x99\x66\x46\x33\xcdX\x66\xd8\x10\x8b\xb8\xc5\xb9\xa9>\xc8\xf3$\x64\x11\x05)YpK," "\xe3\xee\x83!\x9e]S\xf6,\xd8\xfd`\x16\xa9\x99:#i\x16&K\xe0\x1d\x02\x03\xee\xd1\x85X\x9f\x42\x66\x07\x0f\x1a\x8a\xc3=&\xee" "\x37K\xa6l\x93" "X\xfa\xf1n\x95\xd9\x0eX<\x62!\x31\x99\x32\xaf\x9e\xd8\x7f\x00\x65U\x1a\xbd\xb0\x0c\x8e\xc3W\xa6\xd0\x93\xdd\x0c\xc5\xd4Z\xf5\x8f_\xd1" "O\xab\x03\xee\x90\xe9\xe9\x17\xd0\x92\xfe\x81\x83\x15\xe6\x33(\xbe\xbb\x89\xe8\x03\xfd\xd1\x98\xf8\x83]\xaa\x88(\x1c\x7f\x34\xde\xfch\xae\xf5\xc3" "\xcb\x97\xc1\x1d\x38\xcd\x18\x35\xf3\x63\x93\x9a\x08p\xef\xc7\xeaK\xb9T\xae\x8d\x97\x1f\xac\xb5\x80\x62S\xdb\xca\?\x9a\x33\xfe\xc0\xb1\x1f\xf1\xa4" "\xc7O\x1f\xe0\x19\xa1\x86\x85\x87\xc4\x37\xdcq\xd4\x97\x08\xb8\xd2\t\x05Lx\x62!s\x9f\xd3\xfeq\x36\xb5\x7fz\xa5o\x66\x05\xbf\x82\x44" "\x94\xf3Lm\x11\xaf\xb4\xb3\x83\xa9\xdd\xed\x62\x8a\x63\x17\x31\xb5!\xb2\xfa;\xbf\x62;\\\x98v]\x32]\x85\x84\x95\xf6\xf5\xb3I\rV" "\xad\xee\xae\xe0k\x9c\x88\x1a&\xd3o\xb5u\x82++\xe9\xa8\xfd\x82\xba\x9di\xcd\x9cM\xb8\xc2\x62S\xcf \xbb\xc6\n\xff\x0e=\x35\x8f" "\xe0]\x42YT\x8e\x94\xb8mm\xad\x33\x9dw\x45Q\xdaR\x11S\x9f\x8bMz.\rh\xeeJi\xed\x34\xa5\xb1\xd2\x0c\x42\xcc\xa3^" "-\xdb\xd5~:\x35\xf5m\xafx\x91\x1f\xba\x1dVZ\x45\x65\xea\xe4\"\x31\xdd\xec\x36V\xf6\x62\xc8\x0c\xef\xb6\xce,~\x85\xd9\x81S\xc7" "o,\x90`\x65\xe7\x39\xdbK\xd3\xfa\xfd\xea\x32\x96\xc5\xa6_\xae\xff\xab\xb4\x13r\x85u\x63\xccw\xcd\xe9V\x94\x06\xdd\xc3\xe6\xd7n\xed" "\x8d(\xde\x98\xfe\x63\x06%\xfe\xda\x99\x39\xe3\xdf\xee\xe9\x32v\xc7\x07\\(\x90\xa9\x31\t\xae\x89\x88\x8f\x19\xedI#s\xab\xe3\xaf+\xaf" "\x98\x05KI\xe5\xdc\xa8\xb5\x30\x36](q\xed\x45\x43\xa2\xa6\x9f\xda\xc5\xeb#\x17\x12\xf5\xd1\xa5\xbb\x63\xe5\xd9o_\x35\x06\xbc\xeb\xfd\xbc" "k\x14\xc3\x8c\xe7\x95\x0b\x8d\xf1#\xcf\x41|N\x9a\xf2\xe6\x65\xf7\x81\xc5\x10\xde\x94~p\xf9z\xd1\x99\x9a\xf4\xd8\xc4\xd8\xb0\x9aX\x17\x07" "\x45i\xc5\xa2\x39\xefS~\xad\x33\x0eU\xd1\xdd\xffs \xe3\xde#/\xf1\xa8P\x83#v\x17^\xf9\x16\xfe$\xa0\xfe\xfdi'\xc7\x9e" "\xa2\xa6\x07\xcb*\xf8X\xec\\\xe3\x81\xce\xfd\x14\x35y\xd1:\x89\xa8\xe9\xf6\xf2\xf4W\x31\x13\xcb\xd8\xa0\xd6\xff\xdc\x88(\xb8Q\xb7\x03:" "\xf0\xc8J\xc7\x0b\xc5\xcc$.\xe6%\xc2\x90r\x43\x87\xa2\xee\xa7^jI\x85\x0bo\x83\x32\xe9\xb9\xc3\xe5\x99\x9f\x9f\xfc\xedz~\xfe\xcd" "\x1d\xab\xa4\x63\x8f\xed\xd7N\xdei\x02\x0f\x45\x38\xd0jR\xc5\x32~\xa0\xdd\x8d\x99\xc1M\xd6/\xf4\xdd\x01\xf4@\x89\xb9rQ\xc0\xb9\xdd" "\x17\x85}\t`\xc2-\xbd\xec\xd4\x84\x03\x8fKgR\xd9\xb1v\xcf\xe3\xe2-\x99\xe2\x98\x16\xa6\x0c\?:\x17;\x38\xf6\xb1\xd3\xf6\x9d\xa8" "\x89{\xbd\xe8\x12\x34\x15\x0b\xb9p<\x80G\x62(j\x11N\xaa.\xc9\x8cm\xfc_\xcc\xe5P\xd7\x44\xb0\x8a\xae&\xb1\x80\x83\xa2\xc2\"" "J$\xfdV>\x16\xaf\xb4\x9b\x63\xe5nr\xb2\x35\xba\xe4\x37\xd9j\x1f\xd2\n~\x61\x84.\xe6M\x0f.\xb7\xb4\xcc\x91\xb2\x41;\x1d\xe6" "M\xac\xbc\xdd\xc0=\x14\x99\xf6\xe0\x87\xa1\x91^U\xccto\xed\x38\x37z\xd4\xd8\xd7\xc2\tJ\x87\x39\x44\x65\x86\x31S\x07\x9e\x44\x15G" "\xce\xc4\xb8\xbd\x98\xfd\x8a\x33\xc7U\xf8\xa7\x87\x9a\x1e\xfc\x43\xc9\xa9\x98\x63\x1c\x39\xe0\x17o\xf8\xbf\x85>\x99\xa5\x93_{\x89\x1f\xa8\x37t" ".\xca\xea\?\xbey(\xe9\xd4NV:^-\x66\xdf\xdd\xa1\xae%\x61\x13>\xa5J+\xed\x80^\xe9\x9c\xd3U,G\xf6\xf5\xf1\xb1k" "\xb9\x90\x1e\xc6.\xe9g~\xfd\x37\x44P\?[\x35\xba\xdfR\x99\xa8\xe5\xb7\xd6\xd7\x98V\x62\x92\xe9\xdf_Y\x15\x81\x95\x9d\x34\xdb\x8f\x12" "\x8d\xa0\xab\xbf(\xc8ZN-\x41H\xc5\xca\x13\xbf\xa0\xf7-\xfeiJ+\xad\x81\xae\xb4[y\xe5\xd7\x11\xe6~\xa3\xe2\xee\xa9\x65\xdc\x19" "\xa9\x19\xe9\xf2\x33\x9d\xde\xb0\xb9\x0b\x93%\x9e\x9f\xae\xa1\xcc\xdf\xda\xe0\xc5\xc2\xaf\x1c\x13\xe5\xa8\xdfI*\x35,\xb5*\xe2\xbf\xea\xfdk|" "t\xe1\xf4\xae\x8f/\xfe\xe7\x88=\xbcx\x1d\xd5]iW\xf4\n\x9e\xa2\x9cy\xc9\x0by\x96\x13\x86\x42V\xdaM\xbd\x82\xcf\x06\xe2\x8f\xde" "\xc3\x8f~\xbe\x44\x45\xc7\xf2!\xa2w\xd8\xe9\x80\x05+K,lj\x62\xf1\x37U\xbf\xf3\xa8\xe6{p\x95q\xa6&\x1d\x9d\xaf\xc0\x44\xad" "\xc8\x05\xed\xee\xd1\x7fx\x82\xdb\x1cQV\xe9\xf1\xf7\r+\x1a\xb1L^\x18|\xd5\xd5\xfc\xd2\x9em\x35\x63\xf5\x9f\x00s\x02\x98\xf0\x95\x03" "\xb3;w&\x06\x9f\xd9\xd4\x96\x14\x99\xfa\x45\xbd\xf5\xe0\xba\xae\xe3\xad\x64~)\xc7\x46\xbby\x32\xfd\xa9^L\x1f\x94\x33\x08\x8d%\x41j" "\xa8\xad\x86UpK\xad\x1b\x44u\xec\xbf\x42|@\xf0\x63M\xaa\xd0j\x43\xc1\x33\xa2w`\?\xa9TuL\x61\xa5\xad\xeb\x95\xe5\xe5\xf6" "Ry\x43@\x8d\x03R\xc9\xd5\x9bz\xd1Gxw\xf4R\x07\xca\x33-\xed\xf2\x01\xad\xaf\xb2Y\xff\xb4Z\n+{\x8cw\x9bv+\xe6" "v\xe1g\xdcw\x38\xcdk\r\x97\xd5\xfd\x34\xcc\xbf:\xa5\xf1\x8a\xcdU\x92\xb2\xe4X\x1d\x98\x8e\x39\x9f\x61P\xcd\rU\xeax\x65Gi" "\x64\xc7\xc2\x9b\x8cw\xbbp\n\xed\x1f\x31O\x8f\xd4|\x36\xe5\xde\xd3\xbb\xfe\xb2\xa7g\xc5\xd4G\xa6\x15\xe4lj\xbd\x82L\x1d\xba\x10\x33" "v\x46\x8b\x61X\xeb\xc4\xb4\xfc\x08\xde]\x99\x1a\x95v\x1b\xab\x8e\x05;=\x97\xc6^\"\xd5t\xcd\xb4\xe4\x1f\x1c\x1c\xadZH&\xfbV" "\xba\xfb\r\x87\xeflX\xcc\xd2\xfa~\x98H\xea\x30\xf8\xcaj\xd2v\xdb:\xfa\xc3\x94\x85\x35\xdc\x62\xc4\x14J\xbf\xbc\x84\xc3\?\xfd\xb0\x61" "\xe5\x04+\xb7\xc4\x87\x95\x65\x16\x64\xfa\xcfy+\xc3XU\xc6\\\xed\xca|\xf9\x0f\x0fv\xcc\xed\xf2\x0c\xe5\x66k\x8a\xda\xd7t\xb8V\xd4" "\xb1\x18\x33\xad\xf2\x00\x65u\x13R\xe1t\xac\xcd\x62Q\xc7\xa9\xd5\nX\x9dR^\x36\x36\x8d\xecr\x8c]K``\xefr\x8c\xea\xdd\x96" "\x15\xfd\xc7\x31\x0e\x9a\x7f\xee\xcd\xea\x8a:\xb7\x84\xb8\x36\x86\x89\x81\x0b\x37S\xb1\xba-\x1d\xb3\xba\x86\x65\x81\xf0)-\xfc\xdb\x10\xd0\xd1\x8f\x14+k" "\x1eg\xc5\x19\xc9\xdc\xeb\xec\xb5\xf5\xdfn\xe1\x61\x35\xbeu\xf2\xadu:\x11\x66\xb9\x88\xda\x7f;S<\xf7\x8b\xe9}\xdc:\x13\xf3U\xd8" "\x0co\xdb\xec\"\xa1\x95\x89\xf6\x37\xba\xf8q\xfd\xb7\xd7o\x1e\x0b\xee\x0eNy\xf0<\x89\x92\xcfT\xe7\xd7i\x43k\xefj\xa8\x13\xfd\xd6" "\xde\xf5\x83\xd6\xaa\xd6\x1ai\x98\xbc\x08\xe3\xe7S\xb6\xf5\xdb\xc3U\x33\x1d\x46w\xeb\xda+\x38j{|\rW\xd2\xcc{\xf0\xd1Q\x97\xb3" "\xdb\xe4\x93\x35w\xce\xf4\x7f\xa2\x06\x9e['\x9c\xad\xc5M\x0b\x1eZ\x07=\xd6\x9a\x9a\xd6^\xaf\xa2kT\xd6\xdc\xd6\xa5*\xc8G\xc3T" "\xf4\xbaw\n\x13\xcc\x98\x97\x95\xa9\xa2\xdc\x30\x8f\xa8\xed\x8fV\x17Y\xf9\x85;\xef\xa1*\x33\xcc\x16\xee\x18/~\xfc\x32\xc5\xfb\x66\x62!" "\x82\xa9\xed\xc1\x94v\xc8\xaf\xbd\xd1\xb5R\?\xfah\xf0\x95\x46\x99\xb8\xfaJ\xaaZ\x82\x9fO|t\xa0G\x11\x9b\xd6\xd2\xdfs\x30\xd3\x05" "\xb8\x98\xda\x0e\x13\x45\x8f\x14S\x16\xb2\xe3G\xad>\xaa\xe9\xcb\xa6\xb4P\xf3L\xcc\xe4\x1ds\x37w:\xad\x89\x8f\x05\xd3\t\x1c\x9a\xb2\x1a" "h\xce\xb9\xd6\xc5\x62L\xf6YPsG]\x44!\xd3\xee|\xd2\xe3\xe7\xd1(z\xe1\t\x9c\x65\xf9\xd3\xbc\x06$\xea\xf8k\x1d@\x65\xca" "{\xd2\x17\xb8\xd6\xdb\x42\x1f\xd8\xdaO\x94\xbdT\?*\xd5\xe1\xe4\xae\x64\xd3\xdf\xd7q\xaf\xc0P\x97T\xc6\xab}Q-\x12\xb3p\xef\xa3" "m\xc0JG\x8c\xd6\xb2\xdc\xf9\xdb\xcf\xe2\xa6\xd8\xa5\x0b\xbd\xe0\x85^#\x33\x61%\x0elH\x15\x90\x8c\xb9\x63\x14\x8d\xc1\xb5\x45)_\x43" "\xc5o\xe5,\x11Pi\x03~\xbf\xd1\x39\xd4m\xc7\xfa\xd2@_\x63\x43X\xa2\x86\xb3V\x97\xd7\x1a\x43\x35\"\xeb\xb4\xa2u\xd0\xacJl" "\x42\xb4\x80Sq\xe2\xe4\xd5\x02\x39\xc0\xe4\x88\xb5\xc5\xf9\x90\x02\x8c\xae\xbbO\x43\x61\xd2\xc1Z'\xe9\xae\xed\x99\xc2\xf7\x1ex\xc2\x03\xd9\xeb" "\x8d\xda\xb6\x42u\xcdn\x13\x34'\x81\xa9\xd5\xae\x8d\xce\x10\xb1\xd9.\xb6R\x66\xaf\xe3\x8a\xc4O\xafu\xab\xe6\x98\x12\x94N\x1e\xd9\xeb\x64" "\xcc\xbdN\xe1\xd9\xeb\xb0\xfe\x9e\x9a\x93\x42\xec\xe8\x45\x44\x04\xdbkg\xf7\xde\xbb\xbd\x07\x31\xb4\xbd\xf7\xee\xb2\xca\x19\x88\x8e\xe9\xbd\x97O\xea" "\xe8\xd3\x1en$\x89\xb2\xc5\x19\x11\x65\xca^\xcb\xcd\xbd\xdd\xa0v\xdb\x10y\xfb\xb5 \xf3\x16W\xb2\x43\xae(vj\xeb~\x39\xe3\x91\xe6" "\xdf\x9cS\xe9\xcf\xa8\x8e\x90\x80\x97|\"V'\xee\xe1\x1f_\xa8\x41\xb9w\x37\x88\xf6\xcc^_\xe3\xde\x9b\xe9\xb3\xcd\x8e\xbcP\x10\xbd\x15" "\xd4\xd4\xd1\x10\x41G\xf2^\xd3\xce^\xe7\"\xee\x35>\x12\xf5\x42\x98&\xb0\xd7N\xa7=\x9c\x98\x11\xf7\x1a\x62\x98\xed\xb4\xe7\xee\xa7\xe6\t" ".\xe9H\x61\"\x82\xecl\x34\xad\xfa\xd7\x38\x87.G\xdck\x17\x0e\xf1\x00R[\xbfy\xd2\xf6\xc8^{\xc3\xf6Z\x0b\xd9ks}\xef" "\xbf\xe4\xa2\x66\xd9\x7f\x43\xb0\xfb\xaf\x08n\xd2|\xf4\x05\x81\xe7O_\x41\xd4%\x98\xceY<\xa9%\x02\\+\xcaL\x8b\x18\xc1\x33n\x1c" "N\xa0\x88\x65\xdd\xc8\x8fL\xa4\x9b\xbd\xce\xf1\xdf\x07\x98\xf4\xcc\xfc\xdb\x9c\xfc\xd7;S\xde\xe1\xc5/wL\xc1\xc3-\x99\xa8\x02\xed\xb5\x17" "j\x1f\x8c\xf4\xb4\x98\xd6N\x1c\x80\xe3\x8a\x91\x1b)\x98u\xb7\x87\x93\xb7\xd2\xde\xdd\x0c\x35!Q\x33\xd9\x87\x37WQ\xf9\n\x1b\x37\x93\x42" "\x11\xb3\x0f\xf3{\x19n\x41HS\x33\x91\xd7\x43P\\{\xc8\x07\xf3}\x90\xfd\xfe\xff\x1e\x46\x1f\x32\x1f\xe6\x15\x05\x17\x15\xffI\x33\xed\xaf" "\xf7\xe1\xef\x8f\xa9\xb0Xu\n\x19\xe9>\x9c\xb5\x94\x88\xe6\xbc\x1c\x10\x9ey\xc8\x94,`\xaf\x95\xd7}TK\xfa\xad\x39\x9c\xdb\xb2Zj" "\xc7\xe9^;\x12\xf7:\x41\x64\x1f\xbd\xae@\xfbj\xff\xe0\xa5RQ\x1f\x81\x19\x9d\xea\xee\x41$}U\xedpp\xb5\r\x90vN\x91\xac" "\x05+\xa7\xd0,/\xa7\xbc\x87:(\x13j\x99_\x42\?\x91\x00\xc5\xe7;\x31\x93\xf0\xbf\x17h\x8c\x92\xaa\xee@\xe9\x01+\xeb\xea\xe1\xb2" "nV)\xf4\xab/\xa8\x41\x92\x9a\xdd\x19]#\x83\x94L\xf3/\xa7\xa2\x44\xc3\x18\xfb\r\xfc\xd1\t\xedV\xc9\x44>#&\xb6k#\xb3" "/\x0ft\xff\xb7-\x80;\x10\xee'\x88\xb7)\x94\xbe\x64J\xb4 J,$J\xfe!t_!S\x62\x17\x99\x32%\x81(Y\x07Q" "\xfa\x45\xcaZ\xe7*\xdf\xc3k\x05\xf1\xf5\x03\x14\x37x\x94T\x64\xc1\x00Q\xc6\xbb\x89]=.Nr\x88\x12\xc7\x99\xdf\xe0N\xb5^\x17" "\xdd\x38\xe5{\xe4z\x42n\x1e\x0co\xa0$*\x10\x07r\xef\x05\xcc/\x14\xca\xe4\xfb\xb1(\x9f\xe7\xa5\xe6|\xf1\xb7P~P\x9f\x66\xd2" "KR~@_\rQJT\xe6;\xf8\xf8\x0c\xf6>\xfc\x64\x0f\x0b\x44\x45Q!\x1bW\xdd>\xa6\xd4\x90\x1a%)\x9a\xc0\xc1\x17)q" "tL<\xce\x39\x07_\xcd\xa0\xce\x12#\x1e\xfc\xc4\x14\x94\x15\xdc\xc4\xf2\x37(\xfd\xb3\xc2p\xf9\x89\x42\xbb\xfc\xc0\x7f\x87\x0f\x38\xef%S" "\x66\xe7\xcb!#\xd7\xee\xf5\xe9\x82\xe3\xa7\x91]w\xe0\xdd>\x84\xc5\x8d\x31\xf6]\xcc\xb1%\x8a\xb3\\\xa2\xcc\x06\x13R\xbe\x1c\xec\?M" "\x85\xb9.\xfc\x0b\x92\x1aT\xf8\x39\x66\xa7\x98\x42\x62/\x97\xfc\x07yWu\x9ej/sZ\xd9\x34~*\xc7|\x03\xe2n\x82\x94\x94\xcd" "\x44\xd9l\x88(\x33\x01\x88\xb2\xc1\x32\xb3\x8e\xd9\x9el\xb6\xc0\xb3\xa4\x97\xba\x97jx\xd3.\x66\x95\xb1\x9a\xc1\xcb\x0e\x99\xb7M\xef=\x19" "]\xed\xa0\xd2J\x44\xf6:Jq\xe2=\xae\xe8\x15\xae\xe2\xa7\x91\xea-\xb3`\x0f@&\xda\xc5\x64JU\x84(\xe5%s\xe6\x8f\xfb\x30" "\xdbm\xf0}\x66\x44\xd3\x9f\xcc\x1e\x02\x05\xbe\x18\x84~\xe9\x37h\x66U\r\x8c\xfa\xb6\xebp\x39'\xc4*\x04\x36\xdf\x94gpv\xf0\xe7" "\x9fj\x9e\xbc\xb5^\x41v\xd4$\x8a'\x45\xa2\xf8\x62`\xce\xc1\x93~~\xaar\xcdk>w\x0f\x82\xdc\xae\x8e\xcd\x31\xcau\?\x99\x33" "r\xb3\xec\x0e\x81\x82\xa2\x9ax\xf3`\xb4\xd0\x44\xe9-\x44\xa9I\xa6\x14\x85\xc2\xd8[\xf4_^\x8d\xb1`\xb7P\xc4:\x43\xe2\x0f\x1e\x00" "\xfbk\x12\xc5\r\x65\xb9\xaeyI\x1ds\xac\x88%\xdc\x7fP-\xc3\xad\x02\x99\xd2\xdfM\x44\xc4\xafk\x62\x61z\x8f\xdf\x30\x87y\xa3\xdd" "V\xf0\x81w\x85\xf9P\xc4=\xe2\x12z,\x84X\xd1O\xa6\xb8\xb2*\xd7\x31\xa7^\xe8%[\x61\x05o#\xccR\xcb\xe3\x1a\x9ep\x45" "\x05\xf5\x13\x16\x19\x92\x92^\x30\"J\r&\xea\x33\x30\xdb\xaf\x17\xf3l\xa6t\x1aqo\xf8\xae\xf8\x7f\xfe\x17\x0csy)\xcb\xfe\x87\x1e" "\x35&\xf9\xfbS\x44\xc2P\x83K\x93\x65\x1d\x1e\xab\x85X\x95.&\xef\x62\x31\xc5\x0f\xa3\xa4\xf2\x1a\x81\x17=!\x06\xa2/\x84\x88|\xa1" "\x8eM.\x88\xfd\xb1\x12\xc1\x43I\x0fS\x46\xc9\xfc\xc0+\x44\x15\xa7\xdc\xc0(\x46\xb9\x11L\xe4\x95\x36\xbd\xae\x1co\x61\x42\xb8PK\xb1" "\x16\xfc\xe6\x10\x65\x80\xa1\xdc\xf2_$\x9e\xb5\x82\xcc\xd0\x88\x9eh\x31\x31\xda\x00\x13i\x88\xcc\x05\x88\x84\xd4\n*_\xa0l\rXVO" "\x66\xc4SV)\xaf\xa9\x15^\xf5\xc1\xbb<\xbc\x99\x96\xfbh\x65\x94\xfb\x18\xab\x64\xbdS\x9e@\xe4\x46}/u\x07\xca\xbc^\xa2,]" "\">L\x41\xe9\x9c \x36\xf1;\xae\xeb\x9fV\x98w&\xca\xa7\n\xb1)\x99\xe0\xc1\xc4\xb5\xb0\x96\x88\xf8\xa5\xe7\x90\xca&\xce\x1dNo\xd9u\x46\xf5\x45\xd5X" "\xb9T\xee\x8dh\x63\x90y\xd4\x43\xb2\x10\x85\xa9'>\xeb\xcd\x9c\xf5\x02\xe7\xadW\xe8j\xa6\xd8\x8f\x12\x88\x30QZ)\xbd_\x44\x99\xeb" "N\x14\xf7\x80\xc2\xd8\xa3\xb0\x42\x05M]{\x13\xc5\x35z\xf9\x13}w\xe5O\xf4N\x13{\x1f\xec#\x04\x19\xd6'\xfa\x1e\xca\x9f\x18h" "\x16\xc2\x65\x9f\x98\x98PO\x66\x9b\"S^\xe3\xe4\xa7\xdf\x93\xe2\xe0\xd3\xbe\x88\xe5\xcd\xc4\xee\x8f\?X\xc2\x1c\xec\x8cX\x0e\x41\xe6\xee\r" "\x03\xa7\xb6\xa7\xa7\x10\xfe\x33\xd5\xec\x99I\xdf\x45\x87\x87(\xb8\xc3#\x33_\xf2;m\x98\x0f\xb8\x34\xdc\x61\x12\xd7\x8e\x98\xf8\\\xfe\x8c\xae" "\x06 \xea\x81\x0b=\xbe\xd4\xf0XzO\xbc\x90\xd2;KZY\xfa\xb5\x12(\xb3+\xcb\xba\x0f\x44y\x83\xf9\xb6\x44\x99\x18-\xc4\x1c\x0f" "\x31\x31\x83\x88Li\x92\n\xb5\xd8\x12\xf3\xa1\x88\x16\x30\x14\x32\x97\r|\x0e\x30\x87 \xca\xc8M(\x9b\x46\x10\x8f\xd4\x30\xdc`WP\xa2" "l\xfbR\xde\x06\xa5\x9d\x11\xcb/\xca\xe7PJ\xe1\xca\xad\xf7\xf8\x00\xca\xb2\x16\xe6\x0e\xec\xaa\xeen\x84\x98_Q\xc9\xa3\xd2Yy\xe0\x12" "\x99\x62\xbct\"\x42\xcdr\x31\x45\xad(\xa7\xa4v\xc5,\x18\xa3\xda\"\xbc\xbf\x16\xe5\x65>\xc1\xdc\x93\x11\xae\xf1\xc8\x94)i\xcc\x39(" "\x61@\x9c\xc8\x9e\x1f\xb9\x9a\xaa\x06\x38\xbdU\x1e@i\xf6\x13\xcfG#{\xc6\x91Z\x83(.\x32\xa5\x8eSy\xf0S+\xff\xa6\x11=" "\xb5\xa1\xd2\xb8\x15\xaa\xa9\xff\xed\xab\xe8m#%\x9dk\x44\xd9Z\x93(\xfe\xb7\x85~\xe1\x13\xb9\x15\xa9\xb6~*k\xc1\x84\xc1\xe4\x13m" "wR+\xdc\xab\xbf~\x05\x0f\xb8\x9b w\x05\x16\xf0\xc4\x98\x85K\x94\xdc\x8dX\xd1\xef\xc9\xd8\x30\xf1\x80;\x95\xd5%y\x0b\x1f(;" "'\xcf\xc0\xb7\xbd\xb8H=\xe2\xfe\xc2z\x07\x1c\xe2\xee\xb1\xe2\x80\x38\xcbQ\x06n\xd7\xe3\x45\xe4\x97'\xe7\x1d\xa3\x66\rw\xa6\xe5\x1b\x45" "/\xf7\x99\x64G\x95\x07\xb4\x17\x89\x35|+\xaa\xdf\x80\xef]*\x9e\x35\x34\x8a(\xbf\x88\xf8u\x91\xbd\x43V_\xb0\x00\x37\xa6\xc8\x46[" "\x15\x15\x61\xfe\xa4\xa8\xdcy\xb9\xf3\xdfQ\xfe\xc4\x86\x07\x04\xf9\x84\xfeG\xdf\x07\xa8\x83\x92\x07\xd9\xae\xbc|V\x14\x16\x31\x10\xa5\x43\x82\x98" "\xfe\x05\xa5G\x9e(\xf5O!\x95\xdd~\xa3j\xa7\xc3\x81\xb8\x12\xe7\nl\xde+q\x66\xff\xba\xa8\x1c\x82\xd2\xf5R)\xa2\xc6H\x94\xa9" "\xed\x44\xe9\x65\x13\xf7\xbb\x41\x35\r\xb3\xdf\x89=\x00op\x36L:\xf5)\x11\xbf\x88\xb2\x81X\xc7\x65\\ \xfdWP\xe2\x13\xee*\xf9" "\xcfO\xa2\xea\xc4\xf8\xb7\x7f\xc7\x92IQ\x9elg\x42\x66\r\xcf\x82\xda\x96\xd0o_\xd9mr+l\xf8\x1e\x8cK\xa6\xdc\xa6\x63r\xf3" "\xb8uV\xa5\xa0\"\x17\xd2\xc5\x80\x95\x8a\xea*&&\x0b\xfd\xf1[Pm\x8a\x42\xadK\x88\x11\x16\x31\xd1\xd5R\xa9\xc2\x0b\x17Q\xba\xa0" "\x89\x32\x9eo\x03r\x95*\x9d\xdb\xcb\xe8\x46\x1b\xa4\x64\xe8\xbdR\r\x65y\x41\xa5\x8a\xae\x98J\x9d\xffj\x1f\xf4\xa7j\x03\x42\x37\xf8\xb5" "VNh\xc1Wt\xe7\x62\xa1\xde\x62\x97\x8aY,\x32\xa8\xa8\x83\xbbJ\xd7\xff\xed\x61\x36^\x85\xe2\xec\xc9\xa8\xb1\xc3};lH\xfc\xd3" "]\x30\x88\xe2\x8a\xa4\xf2\x8e\x95\x1b\xc4\x95\x84_O\x63I\x8f\xda\x11\xa0l\xfc#\x0cZ\x07\x14\r\x95\xbe\x86#\xd5x:\\\xa3\x10\x1f" "\xaa\xe6\xfe\x43\xc8n\xb4q\x33}\xbd\x83~\xd8\xec\x85\xdd[\x98\xab\xca\xe5\x0b_(^+_(N\x88R\x8f\xa8|\x05\x95\x17\x10\x8f" "\xf2\x15J\xdd\x9e\x42Y\xba%*\x13\xba+\xb0z\xa5\xcc\x1b\xdd\x1e\x64\xac\xe4\x41\xa6Z\x02LQ,\n\xf5\xcdN\x35\xa5NQ; " "\xcaP@\x45]\xffW\xa6~\xfb\x0e\x94\xa2\x9b\x37\x63k\xea=M\xd1\xefG\x44\xe6\xc9\xb4\xb3\x91\x19\xde\xd9\xa7U\x90\xfe\xea_\x01\x02" "\x64\xea\xce\x81h=\rjz\\\?G\x1b\xa6\x32\x45\xfd\x89\x88\x08\?\xf3z\x92\xb9\xce\xb1[N\x65\x1e \x42\x32\xdd\x34\x93\nU\x16" "\x1e@\x94xL\xaf_\x42\x07M\x65\xe1%\x06\x46\xce\xbc_>\x9d\x42\x30-\xb0\xcaX\xe8\xe6\x1e\x41\xd9|\x36Q~'\x89\xde(Q" "\xfa$\x0bO\xf6\x03$\x36g\xa0t\xfe\x11\x0f\x92\xe5,|\x99\x16&\x8c]\x9d\x14\xda\x18\x64\x96\xdb\xe0\xe2Y\x18\xd4\xaf\x41\xf1\x1f\x41" "\\J\x1e\xb6\x08\x8f \xb6\x0f\xab\xfch\xbc\\i,^\x61\x1b\xad\xca\ns\x1e\x88\x33y!\x1b\r\xfa\xad\xbe\xe1\x03\x9c^T\x0e\xec" "\x88\xe0\xe7=\x94\xfd\x14+\x07l\xfeN\x94\x9e\xa8\xca\x01\x63J\x44$\xc6#\x66\xb5\x11q\x36n\xdd\xfa\x37\xbd\?\xe9\x05$%}k" "\x7f\x32\x1e$*\xcc\xf5/J\x42\xf0\xe4\x15\x0f\xe0\xfb\xcc+\x64\x30V\x04\xd5\x1b\xba\xcf\x06W~\x35\x17nV\xa6\xa2\xe6:(\x41\xf9" "\xc9_j\x1ay\x95\x1b\xa7.W$\x15\xbb\xa2\xa6\xd1\x93_\x18\xba}\x45IIo\x83\xcb-\x98\xf4\x05\x9e\x92{\xf9\x0e\x97\x0f\x9fI" "tS\x89\x8a\xden\xa8\xee\xf4\xcf\x37\x9a\xfe\xf5\xc8OH\xa8\x9c\xe0\x64\x81\x88\x97~\x42\x1b_\x18{\x46RQ\xf2\xe8\x94\xf4\t\x12\x7f" "\x7f\xa8\x19\x89\x61\x11Rk\\\x13{\xdf\x12\x9bk\xe9\x30\xcbz\xaf\x1d\xf8\x19\x89\x1d\xf3\x0b\x1f\xee\x98,T\x10z\xd9\x05\xfc\xd9\x8b\xf2" "\x33_T\x07\xc1\x0er\x38\xd0X\xc2k\xbb(vY\x1eS\xdd\xfe\xbf\xbf\x8e>{\x97\x8f; rj&\x05\x82\x85\x07\xa9p[\x87" "\x37^R\x1f\x33\xa3\xac\x94L\xab\x9a+\xf9\x66\xaa\x37\xa1\xf4\xbeWS\xe8\xa7%J:\x64\xe6\xbc\x64Z\xcd\x9d\x11\xbd=\x64\xeey\x93" "\x08/\xd5\x87\x92]$\x88R\xbd'\x8a\x33\xe9j\xcaK<)\xeb\xa0\x9e\x10\x9b\xc6\x31\xfb\xe1-\xd5\xd5\xf0+\xefv\x05\xca\xba\x15\xe2" "}\n\xd9>\x9b\xb8\x03/\?\x07\x0bz\x82\xc2=\x1c\xe9\xb2\xd9\x35\xdamp\xd3P\xb2v\x31\xb1S\x32L\xc9\xe8\xd8\xe4\xad\x15\xfc\xec" "\x11\xbe[\xe9\xc0\x83\xde\xf8\x43QYS.\x94kP\xaa\x66\xc4\xa2~^\x1e\x80\xb2\xf4X\x88\x14\xae\xa6}z\xf4'\xd7h\x43\x90j" "\x8d\xe2\x0f\xdf\xd3[\xfa\xd4 \xb3\xdf\xc8\xa8!\xf3G\xf9\xab\xdc\x82\xbb,x\x98\x1bQQ\"\xf3\x94TV\x85h=\t\xc3+j\xcf" "WT\xf5\xff\xb6s\?[\x46o,\x1dHn\xe9\x0f\xa6\xa4]\xe2u\xca\xc8mY\r\x1c\xde%\x83\x12\xfe\xbd\x9e\xe7\xe6\x0e\xbc\xc3+" "\xc3V\xeb\xc4\x16^\x1d\xb7\x83\x07W\xdc\xe1\xa9\x91\x82\x37\xee\xbb<\xbf/y\x31S/\xfd\xaa\xa7\x1b\xe8]\x8d\x95\x13\xbc!\x94\x36\x42" "\x0b*\x98\x16@\xac\x0eT\xf3\xef\x63\xd8\x46\x0eXl\x80\xe9V\xe9\xba\x03\xff~\xf9\x46}\x83\x8a\xc2N\xbb\x62\xfe\xfb\x35\xca\xb3Q\xfa" "\x90\x9a\x15\xe9\x35\xa1\x01'*l\x66\x9d\xda!:`\xce\x32\x31\xab\xa4r{\x33\x44\x02&\xf5xk\x44\xef\x97\x98\xf6\x80q\x8fl\xa6" "\xec\x65\xcb*u\x97 %\xc0>\xe9OUZ\xd9\x04\x65\xc4\x94\xa8\xcf\x84*#\xf1[\xef\x62\x81\xb0\xb5s\x87\x37\x19P\xdc\x91\x10\x35" "%Y\x32\"Z\xf4\x84\x1b\x66\xe2\x0e\x1f\x45\x89\x84\x12\t,\xba\xc2-\xa1\x8dN\x94\x9a\x10Q\xaa\x18\xc2\xe0\xf0\xa2\xbfN\xff\x9d\xa6\x46" "\xf4\x13V\xd3\x9a\x95\x30\xdd!\x99\x44PMk\x90\x32\xf5\x45\xa7\xb1\xf1H\x35\xad\xb7u\x17H\x43\xb5\x9a\xf1\xc5/^\x35\xab\x91\xf6\t" "\x35\x19\"\x42\x8a\xf8\x64\xf4\x65\xaa\x01\x99\x8d\x1bO\xa6NTKh\x64V\xb5\x92\xcf\xe4\xfa\xa4\xf5\x7fW\xcb\x98MW\xad\x61\x17\xd0j" "M\xbfG\x9c\x83Ro\x64\x96\xc1\x9a\x04\x42\r\xf5\xccj\x13U\x13\xef\x9c\x37\xe5\x7f/\xd0\x9f\xcaj\x0cR!\x9f\xea\x63M.\x15\x00" "\x62\x46_\xcfP\xb2\x10\x92x\x97\x36R\x04s\xdf}\x1e\x1b\xa9\xed\x8c\xc1\x12Q\xfe*\xe9\xff\x96\xa1\x64\xcc\x83\x39\x37\xf2\xd6_H\xca" "Mo\xd2\xf0\x13m\x8dMM\xef\xb8g'GW\xbb\xb8J\x15M\xc5\xef\x0b\xb1\x9c\x19\xbfwRwi\xf8\x14S\xb5\x8f}\xe6\xaa\x45" "\xa2\\\xd1\xc7\xea\xcb\xe8\xafs\xfe\x01\xd7\xe0\xf9>\xee\xfd\x36\xfd\xe4H\xf9\x0b^\x95\x94\x07P*Z\xcc\x0f\xf0\x06\xa1\x8c\xb1\x14\x62\x46" "\xcf*+\xf2\x88Y\xf6Y\x80\x61UR\xa5\xad\x97\xc9G\xed\x0e\x94,\x45&\xbe\xac\xc1~\xc3\x88`\x80\x9a,\xc1i\x32\xfe\xdbi\x92" "*\xb4\xe1\x34\x07\x45\r\xab\xcbg\x1a\x17\x99\x41S\xfd\xff\xb2\xe2\x07\xb7\x30\x08\xaa\xb8\xbf\xe0\x65l\xf4\xab\xbf\xde!\x0b%n\xa7\xabM" "\xec\x04N\x94\x8a\x12q\x98\x01\xa5\xbeO\\Jv\xdf\x44\x35\x86(\x43\x0b\x42\x9ewx\xaa\x43}J\xec\xed`\x13\xc0\xaany'\x0c" "K\x92\xcc:\xc1P\xd2\xed\x1b{\x85\x14\?\xb1\x64\"\x8d\xf4\x34-\x0c\xf4W\x43\xe5\x08\x15\xc1*\xd5\x46\xfb`\x45J\xd6\x99\xff\xfa\x0b" "J\x93\x94(\xb3\x94\xab\x33\xecI&\xd4J\x82\x98H\x99\x33\xac\x03\xa8\xce\xc2\xf3\x9a#\xcd\xa7\xa4\xa4\xb9^\x8b\t\xef\x8b\xd5\x85&\xfc" "\x85\x06\xa0\xf6p\n\xe9\x7f\x30x\x30\xc5\xbb\x0e\x88\xeb\xe7\xea\xd2\xbb\xda\x83\xc5[\xa3\x9f^\xa1\x07_\x94\xe6\":g\xb4\xba\xd4x/" "\xfbI\xf7\x7f\x64\x65]\x97\x63\xb6\xcc\xd1\xc3\xe1\xc1\r\x66\x35\xa8J\xf3\x15\xff\xf3Kt}\xfb\x12:>\x89(\x98\x97v\\\x66\xb9\x8d" "\xd0\x8c$%\x93\x39\x88\xb2\x13Lu\x89\x31\x16\xe2ym\xe4\xcc\xe5J\xe2\xfc\x32\xba\xc5\x95\xd0\xea#\xca,\xc7\xea\x16\x9d\x64\xd5\xc3\xdf" "V\x32\xc2\x83\xbe\xc9\x43P\xe7tXK\xa0K\xa3\x96\xf0\x7f\xfa\xe0\xbe#\x44$\xa8%\x90zk\x89\xa8\xcd\xef\xa4&u\x86\xe3\x0cM" "\x87Z*\xa8\xf0\xd5kY\x84\x15\xb5\xf5\xabo\x46\x0c\xda\xd6x'\x66\xaf\x9b\xc3\xd0r\xad\x86\x35\x8e\xb5:\x92\x85\x10qGM\x0e\xfa" "Z\x33\xa8p\x42\xa8u\x31\xfc\xc4\xdc\x82\xf8j\x17\xfd\x34\xb5\x17\x0e\xe7\xab\xbe'\xbeOj\xeaI\x8e\xb8\x9e\xd3Q\xc4\x85\xda\x0b\xb5\xba" "\xbd\xe4\t\xdb\xd7\x91*\xe1;!\x1e\xe0\r->\xa2\x64\xe6\xb5\x1e\x92\x45M\xf7\xed\xac\xf5\xe0v\x9f\x88+\xf7\xb0\x0bhm\xa0g\x1f" "x\x99,X\xbe\r\xea'oz\x0f\x85_\x0f\x30\xbe\x44\x94\xea\x1dQ\xear\xb5\x01\xc6\x10\x89;\x10n\xcb\x88\xb5\x17\xe5@\xf9\tJ" "\x91_\x1b\xa0\x97H\x18,N\x30o\xb2\xca\r(\x85om\x80x@\x94}T\x89\x9f\xa3\xbf\xc3\xef\xdf\xfe\xda\x14W\x9d\xbbK\xa7~" "\xeb\xde\x0f\xc7\xca\xdaGx-\x0f\xf1\xf9\xb7\x91\x8b}\x62\xf9u\xed\x33\xecP\xa2\x1a\x8a\x19\xd5\x39\n\xd6\xbe\xe2\xfaG\xe8\xb7>\x85\x91\xcc\xd9\xa9\xeb\\P\xe6\x12\xdc\xd6@\x19\xbe" "'\x8a\x17\x89\xfa\x1eU\xd3\xbaN\xe9\x14\xc2\x01\x11\x99\xb2\xb0\x46\xe8\xe7Z\xde\xec\xd6Tp\?\t\x33;S\xe1\xeb\x08\x8biI\xc9\x90" "\x1bS\?m\x37\xe3\xbf\xec\xea\xd1\x97+\xba*ZP\xa4\xc4\x31\x1fq\x96\x04\x65;`!\xdd;:\xe9\x45\xa1\x82\rs\xf6\x80\xcd\xd2" "\x45\xf9\xed\x8a\x33\x7f\x33\xb1_\x84\xbc#\xed\xd8\xa9\xdfl\\\x99\xfb\x31Q\x98uK\xe6\x62\x03\xfe\xcc\x8cQ\xe2\x05+LIm\x1e\x41" "\xd9@M\x08\xdf\x07\x64\xee\x36\x46\xde\x65'\xa3\x81+\xc3\xcb\x42\xff\xf5\xddL\xb8\xd7#\xf3\xa4\x8ej\xea:\xb5\x93(\r\x18\x62\x15\xcf" "\x8ami\x84\xe1\xdd\\\xcd\x9d\x91\x43\xf1\xe1\xdd\xa9\x98\xb9\xcf\x62\xf5\xab(\?\x93\x0b\xf6\xe3\x7f\x95\xdfm\xd9\xeb\xe5\x63\xb1/\xcb\x84\x41" "\x31\xb1\xbaRL\x14\x36\x62\x62\xe2\x03\x99\x1a(\xf6\x03\xb4Z\x88\xd2j!\xca\xa4\x35\xa2\xcc\x66\xa8\xef\xe1\x1a\x83\x38\x99\x19\x31\x9d\x18\xe6" "\x63\xfe\x62\x8e\x9cY\xac\x39S\xaa\xbe\x62:\x97\x9cP\xb3\xb3\x99h\x18\xc1|\xd5\x93,\x07\xa0\xccV\x61J\xfa\xdfGI\x04\xbc=\r" "\x91\x62*\xd6\x11\x91\xaa\xdf\x1a-*\x93I/\x01\x93\xff\x44\x85w\x33g\xca\xc4X\x32\xdb\x1f\xe8\x02\x84i=\xd4P\xd6\x36&\xf5U" "\x33\xb2\xcb\xdd\xe2\xc1\x14\xbc\x1c\x98\n\xaf\x8fp\x43\x07\x95\xfe\xc4\xbc\xfd:O\xd3\xd4\xdb>\xfe\x89#\x00\xe1\xdf\xb9\x8a\xa9P\xac\x32\xbc" "\xa9\x9e\xf4T\xb1\xca\x19\xd1_\xc3\x66\xde+.\xbc\xa7\xa1\xaagp\xfb\x83\xbd\x33x\xf2\x8c\xfe\x46\xc6\xb8\x84\x7f\xbb\x05\x66;\x89rg" "\"s\xdc\x43\xf7\x17\x14\x92\xaf\x98\x8b\x0f\x33\x39N\xb6\xdc/\xe0\xdcYLLyT\xf3\xccg\xfd\xdf\x7f\xe7\xee\xfc\xcf\xbf\x33{\xe4\x43" "=\x91\xb8\xca\x11\x62\x12\x94\x99\x9e,I&u\xd4\xe7:\x36\xc1\xf3\x8d\x91\xf7u\xb7\xae\xff\xfa\xd1K\x36\xc0\xebU\xd8(\xc3L\xddy" "\xb9\xb4\x9a\x19\x65I\xa9\xdfN\xcd\x8c\xa8\xa0\x98\x89\r\x8e\x44i\xb1\xc2&\x66\n\x90y\x9b\x8a\x1az\xf4\xb6\xa9\x9c\x61\xf8\x8f\xcct\x02" "\xbc\xbb\x36\xc2\xef\x06\xcc\x97\x03&\r\xb1J\xc3' \x99\xd2\xd5#\xd4\x82\t\xa6\xde\xbe\x0c\xec\x30\xf5\x61\xf3\xbcW=UGU}\xb9" "\xbb\xc8#\x10\xbd\x82\x9e\xe3\xa1h\xe4\xb1\x91\x44\x32\xda\x17\x61\xdb\x61\xbf\x35\x8f\xdeZ\xa6\xb8\x15$\x43\xd7P\xbb\xb7\xd8g\xf4\xfa\xe8/" "\xa6\x62\x9fQ\x05\x34|\xfdR\xd5\xa5\x16\r\xd6V\xb0z\x37\x62]\x32\x99\x8f\xd7\x46\xfe_i\x43\x95\xd2\x11\xb2\x64:\x94\x31\xfa\xed[" "\xf4\x88@M\x9f\x30\xff\"\xf6\xb3\x9a\xd5\x38\x8e\xbc\x91\x35\xb2\xe2\xa3{\x97m\xd5\x9d\x0f#\x66\xab\x89\x89\x45\x1e\x30w\x1a\xc0\x32WI" "\xc8K\xf8,\xb8_\x10K\xb1\x34U\xe8>\"s\xaa\xe6\xbb>_O\x83\xa5\x37\x0c{Wj~\x18\xf9\x05\xb8/,\x8d\xdc\xe5\xf0\xb0" "\x35\xe5%\xcbp\xef\tu\x37\x8b+{\xa3\x64R%\xb1\x32sJ\x13-\x99\xf1\xb7H\xea\xec~\x8cYk\x30\xb7\x85\x8b\xa9'\xe9\xeb" "\xa9\xfbz_\x03\xbd\xfbQ\xcd\x05\xec\x97>\xc8X\x63\x30jsGo\x92\xc1\xecL\x36\xbf\x8c\xc1\xa9\x17\xe6\xf4\xae\xe6)x\n\x63\xf3" "\x0e\xf3\x64\xd8\xccy\xd3'\xcb\x08\xdd\x13p=\xa1j&V.\x88\xc9[\xcb\xce\xf4\xde\x96\xe9`\x80\xac\x0f\xcb\x37\x98m\xf7\xfa\x36z" "[\xb2M\xb8\xd0\xc5\x92\x9d\x66\x0e\x87\x84;\xd7Y\xaaSGL\x89\x15\xf2\x44OTUX\x85\xab\xf5\x45=+K\xca\x9ar\x8a\xb9\x17" "\x62\xc2\xe3>\x99\xd9>V\x31\x90\x99\x43\x42\xc0\xfaq\xe2\xe3\x18|\x42\xb6\x0b\xaf\x1b\xcc\xa2\xd1\x32\x02\xbfz\xc3}\x04O;U\x0f\xde" "\xe3\x96\xfe\x42\xcd\xcb\xfcjU\xd9\x37\xf2\x9e\to\x03\xa7\xf2i\x8b\x80\xa4\xdc\x05\xc9\xbc|'|}\xc7\xce\xe7P\x36\x45\x80TMY" "\xbf\xf6\xeb\xd7j>\x07i\x84\xa2\xdf\x18\xa1\xf1\x46\x66\xabj\xf4&I\x33)\xe8\x30'\x83\xd5\xc8\x88\x41\x1d\x36\xa7J\xbc\tL\x12\x15" "\x06\x9a\xe5\xf9\xed\x91\x11\xfbx\xb1y\x36\xb2\x97r\x8d\x9a\xa4\xb0\xae\x84\xccN\xcbh\xaf\xdd\x7f\xd1\xd7\xf0z\xa7\xd4G\x7f\xd3\xd3\xbfg" "\xdc\x9b\x1a,\xad\x44\x43\xcfx]\xb7\x8e\x10\xa2\x03@L\xad\xde\x93\xf9\xc5#\x81+\xbd\x0f\x8dU\xbc\x31R\xfd\xd7\x99\xf3.\x95\xfe\xc1" "\xcd\xef\xdf\xb9\xedg{\x96}\xc8\xeeI\xfa\xda\xe6W~R\xdf\xd2\x1c\xf9\x8d\xbf\xa8\x1b\x31MLLl\x8d\x00s\xdd\xf7n[\xee\x64" "\x8bz\xf0\xac\x8f\xb5\xf8R\xfe\x18\xe1\xb2\x98\xcc\x9f#\xb8\xcc\xf9\xeb\x84\x9a\xfa\x98\xd2\xa9\xca\xcc*\xf5\x1dh\xd1\x8cM=\x88W[\xe5" "\xd1\x08\x0f\x1b\x30\xcd\xe3H]\x07S\x85V\xc0\xa1\x35M\xbc\xc5\x35\xb0 \x89\x98\x43\xf0\xd9{\x0f\n\x19\xa3w\x9a`\xccW\x94_}" "q\xea\x61l\xb4\xf7\x1c<\r\xe3_\x7f\x1a\xc6\xbf\xfe\x34\xe4r\xaa\xad\x17|\xd6\x87\xaa\xbe)\xf1\xde\x82z+\xa8L\xcd\xb4w\xacm" "\xc8\xe3\xa5UG\xa6>}\xe3\x46Y\xa4\?\x35\xeb\xca\x89\x11\xa3\xc3\x62\x62*\x17\x99M\xfd\xb4\x89\x88\x17\xb4\x32~\xee\xc7\xccp\xd5\x83" "S\x13V\x8e\xf0\x92\x62\xa6{\xea\xee\x04\x8b'\xd9\xfc\x31\x06/\xdf\x96\x38\x82\xae^\xf2\xe5\n\x1b\x12\xb3\x89\x1a\x0e\x16\xaa\x30\xe7\xfe\xfe" "#\x66Z\xb4\x82\x43L\x62\x1fI%\x18^\xbb \x18\xde*\xf3\x46\xabZ\x04\x13\xc4-\xec\xe4\x42\\\x64\x8c\x96\xaf\x05\x0b\xc4|wG" "\xbc=\x17\x32\xa7`\x37Wn\x8c\\pj\xa9\x83\xb5\x33\xc4\xfd\xadQ\xfb\n\x8e\x98\xd9N<\x65\x8d\xf0\xa5#&\x36H \xf3\\\xc0" "&\x8a\x62\x62\x91\r\x9b\xb8Um\x82\x1c\xb5\xf1O\x44\x94\r\xaf_\x31\xc7\x94\xcc\x9b\x39w]\xf5\x7fU\xe1.\x31\xf2-\x14\xa7\x13y" "\xa7\xb4\x16\xcb\x0e_\x65\x17'\xa7\xaey\xe4\x17\xce\xa4p\xc0vq\x12\xc5{\x85|\xd4\xad\xd6\x19\x66\xf5\x84\xd9v\xb4\xdb\xab\x39R\xda" "W\xe6q\xb3\x99\x8e\x99\xe1\xdd\xbd\x35'\xe8@t|\xc4\x84\x43Vx\xc1\x61.g\xe4\r\xe6\xefoT\xa1\xc0\n\xef\x35T\xee\xe9#" "\xe4.\x18\xb4\"\x16\x16\x46\x38\x91\"\xf3!\xabl\x19\xe1\x93O\xcc\xf8\x9e\xf3r \xbe\xe7\xbc\x1c\xc0~\xd5\x64>\xb6\xbd\xbc\x1e-\xbe" "\x86\x8f\x37V\x31\x0f\x9f\xea\xf4\x07\xb3\x84\xec(\xd4\x64\x1bV\xf5}\xd5\x0b\x46\xcc\"\x64S\xef\xbc\xbe\r\x97S+\x31\xc3\x06\xca+\x17" "^\xcd\x34V\xea\xb0\x99\x31Z\x66\xe6|\xfa\x92\xd9z\x35\xfa\xb5\x02\xc6\x02\xa0\xda\xb7\x96\xf4Xi\xc1\x45\xa6\xbb\x81\xd7\x84\xb6\x43\xc5\xd4" "\x14\x11\xbe\xde[\xba\t\xd1\xd7\xc0\x64\xcf{\xf9\xb3S\xf9\xb3\x65\x18\xacz\x1f\x7f\xc7\xcbg\xd4\x94\xbe|\xc6q\xe9\xdd.\xf7\x1e\x0c\x13" "\x31\x15k\x8b\x85\xef\x1a\x8c\xd3\xb6\xd1*#\x64\x62\r\x05\x99\xf3\xdb\xb0\xa4\x91n\xa9\x91n\xb9\x35\xb2\xab\xceY\xc9\xa9R\x1a\x9b\xbc\x43" "\xd9\x46 \xa4V\xfa\x1d-P\xc2u\x91Z\xcf\xe1/\xb2.\xf8\xdc\xa8\x1f#\xad\xed\xc2[\?Q_yt\x9bS\xe2\x45\x44\xe9\xfb(" "\xf1\x10\xec\xdeT\x15\x8d\xbc,_k\xa1P\xd1\x35\xdeS\xf4\xa4\xdf}\x1aQK\x15\xa6\xb6J\x88\x96[\xb3\xe9>M]\xcc\x96\xf2\xd7" "hy:\x99\x96Y\x46\xe5O%J\x13LW\x15ZI\x17i\xad\x00~\x66\x85\xf4\x86\xb1\x93\x80\xa8X\x41\xc2j\xb7\xb6\xa6\x39\xa9\xa8" "\xf6\xe3\xd7\x10k\xa3\x96\xde\x90\x66_\x44\xba!\x0c\x66\x8a\xb2\xd2\x01\xebH\x89o\xb7\x46v\x97\xa7\x19\x35\xa9\xa8\xf6\xab=<\xa4\x90n" "\xb1k\x11\xb1\xaf\x61=\xa8\x18\xf9\x8di\x86\xc5\x8a'\xab_\x9b\xf2\xee\xab\xeevH=\xde\x63\x8d\x16\xd4\xa5\xb9\x42\n\xb3HMQ\xac" "\xc5\xc2\n\xa8\x8f\xb5\xa5%Q\xbb\xcbY\xea\xbc\x43\xd5\x0c\x39\x1cz\xcf\x85\xd6\x06#\x33(\xe4,\xe9\x91\xe2\xc0\x9d\xbb\xafG\xed\xce\xe5" "G[:q\x38[\x9b\n\xcf\xe9H\x8bm\x0c(\n\xd1\x93/\x66\xf4\xaa\xefMk\xc6<+U+\x9cp\xcf,\xe4y\x37w\x1av" "\x0b}m\xe8\x90<\x46\?y\xab,\xc3\xc5\t\xb3\xad\xec\xb8sl\x35\xc6lSJ\x8d\x36\xdb\x9e\xd1j\tl\xbei\xf4\xdd\xea{\xda" "\xeaG\xbb\xbd\x0b\x85}\xd1\xc8noj\xc8\x14#\xcd\xe0\xa2\xc3\xe5\x8b\xa7:\xd5\x9d\xe0r\x41\x14\xdd\x92\xaa\xd3\xdf&m\xc4RG\x98" "[\xdeo\xc2\xcb_\xc3\x8e\x64\xf4\x0e\x9f\x1c\xdd\xef\xbc\xc4\xc5\x44\xb7\xa0\x9a\x1a\xe7.\x8a*\xe9n\xff\x41\x1c\x9e\xdek\xeb\x95U\xb8\xfa" "\xf2R[SQ\xf3\x06\xf3\xaeM\x05\xb9\x89\xaa;\x63\xf0u\xd6\x46\xf6\x89\x1d\x93l\x12\x18t\x37\x15\xdc\x1d\x63*J\xda#\xe6\xbd\xa7" "\x9c\x33{s\xfa\xcc\xa9\xe3sL\xf9\xed+\x35+\x46>\x8av\xae*x\x61\x83\xa2\xa4r\xf7\x11W\xeeN+\x31\x93\xdd\x08\xca\x44M" "V\x16\xd4\x63#\x0f\x64\xa1\x0b\x80\xd4\x89UJ/\xb0}\xc4^/\x64\xeer\x7f\xe7\xb9\xb7\xeb\x9a\xe2\xfd\x0c\xb6\xee\x33\x9e\x87\xf8\x98\x31" "uI\x88\xac\xc2\xe3\xdeO\xbc\x9a\xd2\x62\x93\xcc{\xdeIw>w\x8a\xda\xe5\x0b\xbdG\xf1wG\xdc\xbf\xb3\xc3r\x34\xdcY\xf1\xee\xf6" "\xe8\xcc$\xa5\x01}\xf8\xe5\xffg\xbd\x9c\xc5\x11Yr\x45<\xb5\xe9\?\xdc\xd9\x38\xf5\xba\x83:\xb7-\xec,>Q\xf6\xc6\xdb\xc8\xe5\x11" "\?\xbc\xd4\xb5\x32\xa7\x1c+W\xde]\x15s\xcfY\x1d\x8d\xec+\xfa\xae\x03\x95~\xb1\x90\xd6!\x94\x13\x36\xff\x12\x62\xdf\x0c\x33\xed\xf5;" "\x45v\xec@Ly\xb2\xff*L\x99\xdb\x06s\xe6.\x00'\xbe\x30\xa7%\x33\xb5q%\x66!\xed\xcc\xcby\xb5[\x9c\xcc\x8f\xa0\xd4\x8a" "\x99ZN\x9e\xbc\xac\xec\xee\x36\xb8\xe2H\xdd\x46\xd8\xba`\xca\xeb)\xf3\x19J\xb6\x61\xf1\xc3\xa9\xc7/\xed\xab\xe1\xf8\x15\x8bs\xde\xc3{" "X\xf8\x82\x93tQ\xb2\x1f\x84\x86\xce\xc3\xaf\x31\xf8\xac:s\xa2\xe7y\xbc\x33j\x16\xc3\xa6\x8e\x31\xb0\xa9UU\x35\xa3\xbe\x06\xc7\xa3\xbe" "_\xcd,\xbc\xc7o~\x1c\x99\x8bH\xeaY\?-\xeb-Tn\xbcq\xfbo\xb3\xc3R\x45>P\x8f\xdfoS_q\xf3\x8d\x17\xe9\xa0" "\x1b\xf6\xe4u\xb9\xff\x14\x03\xc2\xa4^V\x41\xe3\x16K\x1eI\r\x9f\x95g\n!L\xec#\x35r\xf4\xca=\x17\xd2\x9f\r^\x0e;\xd2" "\x30\x1d\x97\x8c|\xf4\xae\x19S:&y\xc2\xbe\xcf\xcc_\xa3\xa5L\x36w\x19\xaf\xd8\x8a\xa9h\xf3n\xca\xdd\xd7\xe4\x37\x9cn\\\x80Z" "t\x9a\xed\x62\x99\x1d\x16\xe7\x0b\xf9\x39\x65\x61\xa4(\xbe\x93\x61\xceT\x98Hj-\xe0\xe4\xad\xdbT\xc8j\x43\x9f\xd4\x90\xbf\xf9\xe1\x14/" "\xf8\x30\xb5)\x83\xdb\xa5\x91\x97\x65i\xe6\xc9\x8a\x93\x45#\xa6\xdc\xf5\xa1\xfa\xc7\x98\xf2\xbb\x37\xa6.\xbd\x9e\xa2\\\xaf\xa7\xa8\xde\x10\x1e\xd3" "\x44\xb9\x9d\x41\xa0^\x8a\xee)\xb6\xcbp\xf6\xe8~\xa7\x39\x93\x65\x84\x44\xca\x16\xb1\xc4\xd5\x94\x97Z\x9a\xf2R\xeb\xb8\xea\xa5\x63\xdf\xf4N" "\xa9\x7f\xd5\xe5\x9b\x03\x38r\x16\x93\xfe\xbb\xe8M\xaa\xdb\xd7*\xec\t\xd3\x85\x84\x7f\x9b\xa6\xd6\xd1H\xe9m\x9f\xeb\x46\xe7\xd5\x41\x94\x14\x37" "\xa6Vt\xbb\xda\x03\xc3\x8a\xa2\xac)\x8b\xa4\xbe\xcc\x04\x14\x62O /\xf5\x8b\xf5Xv,\xae\xb6\xf6\xe3\xb6\xae\xf6\xfa\xcf\xefs\x32r" "\xeaS\x89\x12\x1e\x93\xb9\x84\x7f\xbb^\xd4\x44Z\xf4S\x65#\x16\xfb\x9a\xf9\xb7\xc9\xc0}\x1b\x1d\xb8{P\xd6\x8c\\\x66NnMy\xfd" "\x34V\x8b\x89\xa2\xffX%K*[\x33\xf2\xddj\xc2\x86\xc2L\x42R\xf7\xc5X^\x41\x45[\xac\xcc\x87\xf2k\xd3\xb8:<\xc4\x14\x66" "`\x9b\x82_QQ\xbc\xaf\xda\xf9>\xa6\xac\xc4\xe4\xde\xa5\x41\x32\xf6Y\x98\xcc\x86\xab\x8a\xaa\xbe\xd1{\xfa\x31\x33\x16wy\x83\xcf\x42N" "\xfb$\x44\xed\x97Z\x43\x66\xa5\x8du\x31\xd1\x9a>i\xc7\xa6N\xf1\x17\xf2\x35\xa9\xcc\xce\xa5\xec@\xf0q\xd6>SR{y*}W" "+$\x43\x1f\x43N'L\x1f\x13\xd2\xff\xe8\xf3\xde\x94\x8e\x12\x9c\x02\x99\xc9'\xe4\x9d_\xd1v\x62\xe5\xdd\x35\x9c\x99\xbf\x8eJ=S\x14" ",\xeek)\xae\x17\xbaS\x64\x90\x1dk\x43\xf7\x14\x34\x11\x1b\x82V.\xf6\xbex\x31\xd2z\x64\x89\x39x\xd7\xef\x0e\x1e(i\x86i\xc4" "@\x89\x31\x9c\xde\x9a\xa2V\x84\xfb\xe9\xd7\x34\x16\x85I\xc5\xd2\xbav" "^\x31\xc3U\x13K\x17H-\xf4\x81\x97_\xfc\x88;}\xe0\xdd\x8a\x03\x43k/\x94\x07\xc1\xaf\xf4%\xfe\x12\xa9\x82\x86\x89\x7f\x31\x45W" "\xc6:\x41:v\x83p\xa5\xc6\x33g\x94\xef\x33S\xf6\x46\xc2\xbb|\x94\xce\x87\xf7\xc3\xb8\xfa=\xa8\xfa\x36zwI,\xb2\x83\xeag\xfc" "\xcc\xd9\xa9\xf5\x12\x33w\x45Qz\xf1\x30\x92q\xd2\xce+\xe6\x65\xe8\x8b\xd5\xa5\x0b\xff\x64\x05\x36\x91\"q\x98\xf9\x31\x05\xd7!\x30\xfb\x15" "\x33\x83\x66\x13\x8b\x65\x45]z\x9cN\x16\xb5\x89~\x07\xe9\x11\xb3\x8a\x98\x0bx\x8d\x10S{\x41N\x61\xefW\xbb)NV\x0e\x10\xb9\x94" "\x45\xdbS\x15\x96\xf1\x99\x82#)R\xd3},\x92\xf1\x82T\xfa\xcc\xce\x82\x06\xe0\t\xfe\x85\x84\xdc\xdd\xf2\xb0q\xaal\xd3\x07L\xed\xaa" "NQ\x45\xba\x30\x88)\x9dG!\xca\xbe\xf6\x9bU\xfe\x18\xf9\x66\xaeWNms\x61\xfd\x8b\x1d\xe2 \x17\xfe\xcfO\xc2\xf4\x8f\xa4\xe3\xcb" "'\xbb\xaf\xbf\x63\x39\xd4\xd4L\x8a\xf3iU\xf0*GL\xdf\x1bu\x1e\x8b\x98\x9c;&L\x85\tJ\xa1\xd9\xbfm\xdb\xea\x86\xdc\x9f\x32" "\xa8\xabY\xb4w\xcd\xeb\x39\xa9\x19s=P\xb5wuK\x38(\xe0:\xfa\xcaj\x7fT]\x0f\xa4\xea\x0e\x65g\x1b\xd4-\xe7\xa2\x98L" "\x19\x9e\x97\x46\n\x8aN\x37\x46v\"\x36=\xab\xe2\x62\xd0\xafs\xa8\x37\xe8\x42\xdc\xdb\x89.\xdf\xc6\x15\x86\x11\x1aW\x98\xab\xda\xb8\x42\xa7" "\nQz\xe4\x88\x8d\tz\xdb\xc8\x94<\x86(=\xe2\xcc\x13(\xbb\xce\x37\xae\xc2|\xc3h\?\x41!\xd5\xb8\x8a\x1a\\;k\xdcx\xcf" "}P:\xce\x84\x98\xf8\x41\xa6t\xe9\x36n\xb0\x45j\xe3&x\x9d\x18\x43\xd9\x15\xb8q\x83\x0e\xb5\xc6M\xb4/\xf8\?ox%T\xcf" "\x94\x65i\xcc\x1d(\xdb\x19s\xfdSn\xf3\x16\x8dZ\xa2\xb8\xd8 \xca\xba\x17\xa2\x94\xa8\x42\xf6\x86Xi\x41\xad\xf1+\x38\x80 \xd6\xf0" "+\x38\xb5\xa0*\xc2\xcd/\x88\xf0\xb9\x45/\x0b\xf1\x03W\x97\\\xeb\x07K\x08\x1a\xb7\xe1I\x1e*\x8d\x89g\xc4\xdd\x82\x17\xd6Hv\xdf" "\xd0\x36}#\xed]\x8d\xc0\x14\x8e\x63\xf2\x01\xf3\xc5H'\xe0\xb0\xa9\x15\x30^!\xc7\xbc\x64\x9a\x8a\x32\xaa:#i\xe0Xz\x17\x64\xee" "\xfeU.\x43\xa4\x63\xb2\x16\x89(\x0eg\x88R\x93\x14\"\x83\"\xb3\xab\x87\xc4\xf3N\x43G:\x85\xf0\x45\xea_S}mM\xe1\x02\xc7" "\x04\xf6I\xb8\xec\x86\xb9\x01\x65\x1f(n\xe4\x30\x9fV\xbc\x15\xb0\xfa\x34\xba\x8b\x92)\xb5n\x31\x31u\xcaL\x7f\x93\xe2\x8f'\xfa`\x32" "\x46H\x94\xb2J\xe8n\x97\xcc\xf9\x94\x1b\xe8\xe2\x44\x9b\x0e\xd8)'\xfa\x88\xd2q\xc9\xfc\x35\xb2+\xff\xdc\x13\x35\x11\xa9z\xeeo\x36\xec" "Z\xce\xb2(|>\x1e`\x8b\x05Q)" "Y\xad%\xe4\x17X\x99!\x07\x96\x03\xe8\x9e'S\xf6\x06m\xa4\x31\\I\x94\xcds\x85<\x31\xa6\x86\x80\x41\xbd\x86(\x8e\x85\x1a\xe9\xa0" "\xf4\x65\xf4V\x1f\x66\x46\x65\xbc}\xfa\x03\x65\x03P\xe2\x1e\xb7\x1b\xd5W\xa0t\xdb\x35\xee\x90\xb5\x08\x31L\xd3\xc8\x61\x0eO\xa3\xe0\xc9\x88" "\x61\xa3\x80\xf9v\xc4\xa5\xdcH\x41\xa3~\x81\xfe\x8c\xf4S\xbf\xf6\xec\xcb\xca\x15\xeblm<\xd1\x1f\xf3YO\xf0\xac\?|\xd6\x8c\xe3\x19" "}\xa0\x42\xd7\x43)\xca\xcd\x85!%\x9d\xf1\x42\x8e\xfd\xad\xcd\x45u\xe3\xaa\x35\xc7\xee\xde\xa2\xc2\xe6\t\x9e\x15\x1b\x15l\x92I\xcc;J" "\xff\x8d\x64:\x95\xe0gO\xef\x36\xaa%LQm\x32\\J\x8a\x9e`\x8a\x98\xd0\xff\x19\xc1{\xbf(\x8cO\xc2\xdc\xdf\xc0\x97)\x8fG" "J\xcdK\x9cv\xc5\x14\x8fp\xcf(\xd7\xc8xW)|\x82x:\x31\x8dN\x65\x62*\x07\x97\xdb\x30\x65\x8b\x42\x36\xd7\xe0m*v\x13" "\xde\xdd\x13\xa6\xd7\x99\xe9\x9f\x13\xbc\x8b\x46\xb3\xe3Ws\xb1\xc3Q\xbb\x8e\xd1s>\xf0k\x84\xff$\x32\xefS\xc6K\xfcg\x85\xeeZ\x33" "\xd1\x06\x66\xf5\x02\xe6_=\x19\x9a \xb3\xd0\x00\xc5\x39\x19si\xf4\xd6'\x98x\xf7\x13\xaf\xf3\x05v\xaf\xdd\xaf_K\xf0\xc4H\xa6l" "\"I\x14\x97\x82\xcc\xadQ\xd3\xf3\x04~\x96\x89\xa6'\x1dpV\xf2\xdf'j\xee@q\x35(\xe4\xf9}\xbdy\x38\x1d\x63\xe6\x97\x1c\xc3" "\x34g\x33\xd9\xef}\xbe\x8b\x85\x01|\xac\xa8\x9c\x83\x32\xf1\x45\xf8wx\xc1\xe4XQ~\xe6\xddLL\xa3\x84y~\xa4,\x1f\xa3\x33|" "\xe0\x08\x1e\x12<\x87\xfd\x65\x19W\xfb\xf8gQi\xac\xaa\xea\x8dn\x30\r\x9f\x95\x86\xf8qn\x44k\x8f\xca\xe4\xc2\xbd\x45\x1c\x0cT\xf3" "(\xf8\xab\x11\xdd\x84\x32\x30\xce\x97Z\x0eU\x9d\xddo^\x7f\x8d\x16\x9e\xfe{\x06\x9c\xe2\xe2XnH\xccl\xbd\xf4\x94\xb2\xa6\xe0\xd4\xc3" "\x18\xaf\x1c\xf3s\x19\xf4\x0c\x92\xba_\x1a\xed\xfc\x18\x8a#V\xf0\x1e\x03\xd9\xb9\x97\xa8I\x07\x83j\x42\xa9\x98\x7f\xc5\x14j\x41N\xcd\x10" "\x7f,\xf4\x82\xd7\x36\x88\x9a\xc5\x04\xeb\x45\x84\xf4\xa8\\\xb1\xb2\x03\x63\xbd\xbb\x31\x42\x0c\x9dh\xc4\x1f\x44\x31\x8c\x84\x33q\xcb\x18\x9c\x16\xca" "\x32\xf4\x81\xaa\x9eQ\xcbp\x31/wI\xca\x42\x8a\xcdj\xca\x99\xfa\xc8l\xa2\xd8\x12sQ\r~\xea\xa6\xc2\xab{\xba\x9c\xa5\x1e\xcc\x33" "%\xde\\\x19\xb1\xcb(\x9b\x1b\xa3\x05\xb1\x65\x00\xa8V\x12\xf3z\xff\x8f#KU\x98\x35\x45\x44\x91\x33\t\xdfn\x94z\xfc]\x1fn\xba" "\xf3\xee\xd2\xd8\xc9\x8d\x94\x46\x17\x8cJ\n\xb1\xf9&\x99G\x64P\xe1)k\xb4\xcb\xa3\xa2L\xa4Zq\xad\x8f>\x31QQ\xed\xe7\xa2\xf2" "\xe0\xd3\x00~\xb5\xc8l\xbf)\?\x8c\xe8\x88\x64\x13o<\xea\xe4\x8c\x96\x05\x45\x32\xdc\xad\xa6\x9eh/\xcf\x36\xf7\x1e~\xfd\xef\x61\x98\xdd" "\x42\xad\x97pv\xd8\x98\xa3\xb7\x83X\x94 \x9d\x63\r\x0c\x11\x05\x05Ss:\x36\xe9\xcd\x38s[\xc7|\x11R;\x9c\x16\x9e\x34\x1bs" "\xac\x8f!\xf6~\x8d^\xaf\x01S\x16\xed\x10\xa5\x07\x90x\xc2O\xb1\xe0\xbd\xb1\xc0\x1a\x0c\xe2\xbb\xbc\xec%\x1c\xa4\x34\x96\xd0\xcd+\x9e'" "\xdb\xbc\x45\x35\xa4y\x45\xed\x30\x9e\xd9$\xa9\xa9\x99\x42\x92\xa5O\xa5+\x8bjw\x89S\xf0<\xc1Z\x65R\x12\x41\x9a\xea\xfa\x8b\xf8r" "\x05\xbe\xd6@\xfd\xb5_\x9f\x82\xe2\x13\x99\xf8r\x04{yP&M\x11WK!\x16g\x34o\x31MN\x88\x98O\xa6\x44\x02\xa2Th" "\x9a\xb7\xd1\x13W\x32\x9aw\x7f\xbb\x07\x63\x98\xfe\xa4\x1a\"\x94\x0cO\x34\xef\xbc\xf4\x06\x35\x03\x32\xef\xeaR\xb9|P\xf5\x01\xe6\xaf\x83\xe5" "\x14#\x65\xa6\x02\xe9\xb7'\x35\xdbq\xce\x81g\xbc\xb3\xf3`\x7fz\xa2\xf4!\x10\xf7\xaf\x46\xfe\xf6\x93\xdc\xee\x1d\xfd\x19\xb9\xcbJJH" "Q^k\x84\x39\x44\xa2(\xda\xba\xcfZ\xbf\xe0\x64\xce\xf7\x30\x19\x42M\xd3\xac\xa4=\xd8\xbc\xc3\xac\xcb\x66\x96\xf2\t.P\xa4\xf6@J" "<\x8b\x34\xb3p\xf8G|\xc8)\x8b\xa0,\xcd\x92\xb5\xd7\xf4\xd8XoO\xaa\xa7G\xa5\x05'\xf4\xf6\xbf\xe8!&%{\xb7\x37\xb3(" "\xc8\x88\xd5\x17\xef|\xef_O\xa0\xa4\x9dG\x94\t\xe5\x42\xe4\r\x64\xea\xe9\x31\xb5\xa0\x99\xa5\xf8\xcb\xfe\x93\xa4\xc2\x43J\xa6R\x10\x87\x94" "%\xe9N\xdf\xa4\x66\x03z/\x1a\x64Yx\x16o\x66\xe1\xa6N\xe8:\x37HI[\x8e(\xdd+\xcd\x02\xea\x14\x44\xc9\xe0\x9b\x05Tp" "\x88/\x07,U\x31\xd3\x7fz\xa2\xd2\x04>\xf1\xfe\xeb\x18\x1a\x14v\x98\xf2\xb7\xd8W\xd1\x1c#\x36\xafx\x92\xae\xf4i\x99\xf2\xcb\xdc\xa4" "m>`\xf2\\S\x37\xb9$\xca\x8cU!\x66\x01\x8a\x89Y\x80l\x8e\x41\x99]\xc3\x94\x64\xf1\x88!\x1a\"\x9e\xf5\xd1\xcb\xf7\xc0\xe2\x0f" "X\xd6\xcf\xa5\xc1\xc3\xd4\xef\xb5G\x9a\xe2\x1e\xd1\xb4\x62\x96\x8cv\x03^\xb7lt\x17\x90Z\x0cs\x0e\x8awu\xe6\x12\x14\x07\x33\xcdG" "\x8d\x05\x8f\xd8\x7f\x85\x89\x07\xd0\xb8\xcb\xf4\xb7\x15\x33\xa3\x44\x06\xf3\xa8\xa0\x64\x0e#\x99\xb2U\x1b\xf3\xe8~\xf6\x93\x01\x11;\x1e}\xaa\xce" "\xde\xebi\xb6\x8ev\xb3l\xea\xd3\xc1{\x00Q&\xbf\x35\x1f\xb1\x08Qh\xdf\x46\x8f\x81\xd0\x82K\xcc\x99\x99\xfe\xf6\x1cWv&\xf1\xc7" "\xd9|\xa4\x92\x13s_\xc9\x44\xce\xf3\x88\x99\x46\x44\xc9\x66\x9b\x8f\xf0L*\xb4\x8b\x62'i!\x45\xa0\xbf}\x91W\xfc\xca\xee\xd7r\x8c" "\xfe\xc3\xb4\xbd\x64\xc8|N\xc2+$\x99\x32\x37\xa4Y\xfc\xdb,y\xdai\xb3\xaaj\x1fW\xb2>\x84)\x31\xa3\x88\xe5\xff\x44i=\x12" "\x91\xad\x15Q\x15'\xe6+\xca\x19(\xfe\x66\x85\x18\xb2'S<\x32\x10\x11\x99\x8aT\?\xf6\x33\x43t\xed\x91\x1a\x96@\x99\x9b.\xc4p" "\x98\x98\xb1;\x43[U\xa8\x89\x89M,$\x82)\x1b\x14\x89\x89\x82\x1c\xa6\x38< \x13\x31\xaf\x08w\x19\xc4l\xcfh\xa7#\x13\xedR" "\x36\x0f\xa0l\x83(\xb4\xc7\xf1Kxr\xbf\xdb\x37\xdaM\xf8\xab\x9c\x11\x1b\xa4\x35\x8b\xd8\xef\x80\x89\x13\xc1'[S}\xb2\x11\xc5\x01\x85" "\x10\x9e\xc8\xc8,u\x95\xb8`\xd0~\x37\xda\x9d\x92i\xd7\x64\xf3\xd9}\xd1\x82\x8eLw\x07\xedw\x34\x8a\xc9\xec\xeb\x17\x65W\x14\"\xe2" "\x08\x93w\x9e\xd3WJ\x8d\xc1(\xf1\x02\xf3 \xe9\xa8\x18&\xae\x8dv\x0b\x64\xda\xc5\xb0z\x88\x38\xbc\x35\xbao\ro\xed\x46\xd9\xd4 " "\x64s\\r\xe6<\x05\xd7\xd7\xa2\xec^y\x33\xad\xe6\x1a\x0e\xe2I\xfdJ\xbc/\xc2\x0f\x08\x11\xe5\x14S\x1c\x33\xec\xa1\xf0\xae\x9f\xb4N" "\xa1\x8b\xf0\x84\xd8:VL-\xe0\x9f\xd0\xd2\"J\xf3\xa8\xf9\x84\xb5\xec\x42^\xcb\xd7\xfd\xe1\x8d\xfc\xf4\x33l\xea\xd1|\xc2\xcc\xa7\x66\t" "\xb5,\"\xaeP\nJ\x0b#\xaa\xd8\xcd\xca\x85\x15\xa3\xd7\xfb\xfc;\xb7Mq\x89'\xcbXH\x89\x0f \xa2t\xfb\x11\x11\x1e\x15\xad\x06" "U\x30\xc3\x85\x88TV\xd1|\xbe\x82\x65\x99\x44\xdc\x8e.\x82m\xaa\x17<\"\xcaH&*\xab\x64\"G&\xe6@\x94\xc3\x15\xb4\xf3\x84" "\xee\xaa\xc8\x9c+\xfe\xdd\x44\xf9\xa3<\xdb\x05\xd0\xa3Hl\xe3'~W\xf9\xbe\x33z\x93\x86\x66@\xac\xc8\x84\x0bMRR\xc3'.^" "\x41\xa9=\x12Wi\r\xe6\x8aV}*T\x42j\t\xc1\xa6\x9d\x0e\xe3G\xccm\xb0\xc3\xad\x61r\x04\xf1\x19\xb7\x0e\x8f\xd8\xc4\xb7*\xf8" "%\x11\xbb\x12\xde\x8f\x8c\x98\x65\x41&\xa2\x45%|\xfb\x02\xa5\xd2K<\xe3\x94\xd1\xd5\xc4\x02@\x63_\x85*\xfa\x94\xcd\xfa\xe5\x99\x46\xec" "\x8a\xddw\xf4)u\x94\xea\xdfn\xc0{H\xc9x/\xa9\x83\x04Z\xd5\xcb~\x81\x32\xab\x9d\x88<\xb4\xaao\xb7\xea=\xa8~\xcc\xfb\xdf" ";\x8d\?UO\x36\x46&\xbe\xe1l\xdel\x63\xd4\x34S\xf5\x13#\xde\xb0\x07i\xaf\xea\xdf\x16\xe2\xaaP\x03\x65\xad\x03q.!R\x45" "O\xab\x10]\xb7\x62\xda\x19\x35\xbb\xaa\x06\xf7\x05\x10yR\x15\xbe\x08\x88\x9f\xd7\x46;\x31\x99\xeeW\x64\xea\x17\xb1H\x94\xb8<\x80+<" "k\xf4\xd4u\xfe\xbcH=_\x1b\xe3G\x65\x8a\"Q\xba\xfb\x88\x9f\xb8u\x38\xc8h\xd6\x34\xb9\xd7\xfev\x35\xf0\x30\x03\x91\x8aj\xda\xa8" "\xa8Q\xbc\xd6\x97\\\xf3\x32}P\xfa\x90\x85\xfeL\xbf-\xd3r\x88(\xaejX.\x46\x44\x1a\xd3UOL\\M\xa3sM\xcb\xa7\x9a" "\x37;\xb0\xcb\x12\xe9\xfb\"\x85\x8aO\xcd[\xb7\xc1\x8d\xfez\xf7\xac,+\xf5\xfb\x07\xa9\x34\xd7\xfc\xfc\x04,\xe3\xaa\xe8\x13\x13\xfa\xcd\x05" "\xda\x81\xa2\x34\x11\xd4\xe0\x0c\x98\xd8~\xb1;\x44g\n\x11%U\r\xbbU\x30\xb7\xc6\xe0\xe3\xd7\xee\x80\x14\xef\x01%\x93\x38\xa1\xaa\x13\xf7" "\xd9+\xee\x16;\xed\x12gK\xee\x7f\xce\x14\xa1\x16\xf5`\x92\xc0T\xdb\x66\rS\x95\x9a\xba\xc9#\x31\xfbk\xf7\x88\x9d\xf2\x88\xed\x04\xfc" "\x06\x90)\xe3\x30\x42\xce\xc8\x9b\xbb\xb8\x92\xdd\x17\x44\xf9\xaf\xc5\x30\xd7\x31\x15\x64\xbf\x83\x0c\xde\xbd&\xecZ\x30\xc4\x8b\xc4\"\x65\xa2x[" "#\xcaN\x1b\xc4\x89~\x0f\x45^\r\xc3\x9d\xcc\xb2\xf2\xc7\x7f\xd1\x43\xd2\x63\x45\x94\x0e\x82\x66\xcdn\x35\xbc\xc5+\x0c\xa7x\n\xac@\x66" "\x0e\x95x\xf0pu\x0f\xae\x11\x31\xc2\rn<<\xe3\xb5hvP\xa3\xd0V\xe2<\xf0\x95J\xac'\x8cp\x15M\xe6;.\x81\xb9|" "\xc4\x81\xfe\xf4\xe3\xdb;L\xbd\x83\x9e\xf0\x03\x61i\xe9\x82\xa7n\xa2\xde(\x66~\x88\xb9\xefM\xf1wt\xae\x85\xaf\x33U\x15\xe5\t\x44" "\x15\xb0\to\xf5\xcco\x10\xed\xf8&\x66\xc1\x37\x9bp\x30\xc0\xdc\x80\xe2NN\xc8\xb3s\xd1\xa2l\xc2\xb9\x1c\xf1\x31o\x94~\x65*\xb4" "\x7f\xbdI\x87\xe7\x8d\xc9\xc8\x98|\x12W\xa5G\x10YkS\x8b\xba&|\x62\x32\x87\xc6\xf0\xae\x63\xf7\xe6\rn\xc1\xf1;(\xde\x7f\x88" "[\xa5\x8c<\x0b\x35_o\xf2\xc6\x10\xc9*\x1c\x44\xb3Z\x1by\x06\xc9\x8f\xde\xcc\x39\x15\xd6\x8b\x16`>\xf2\x93&\x9c\xc1\x08\xfd\xef\x13" "\x36\x9a\x10\xc5\x8f\x91\xc7\x05\xe1\x01\x9aX\x42\xe0\x62\xfd\?\xb1\x86W\xa1\x1d\x18M_\x86\x1b\x84\x41\xff\xce\x9b\xea\x15Zy\x65\x17\x94\xf1" "%!\x37\xfa\xed\\(\xe5\x99T\xb5\xd7\x0c\x9f\x95\x97\xbe\xbf\xa8\xa5\xd1ymn\x36\xe1\x83\x9e\x38^\x19\xe9Q\xe1kZ\x14\x0f\x88\\" "\x14\?\xd7-\xeeH\xab\xefM\x0b\x13\xa2\x97Z\x62R\x15\xd4\xdd\x87=\x05)\xe9\x07\xad\x99\n\xf3\xef\xe1i\x0e\x85\x8aU\x33\x1c^\x81" "\x9f\x19p%\x89\xa6\x19\xbdw\xbd\x42\x06\xc3\x9f\xa4P\xbe\x36\xa3\x81\x9f\x31\xcd\x8d\x94\xfe\xca\xafVy\x9c\x01u\xa0n\xa0\xa4/\n\xe1\xb1\xbd\xd9\xf7\x97U#\xdc" ".\xc0\x94q;\x31\xa9\xc4\xc4\xf8\x07)\xf1)\xd3\xecS\xb9\xc6S\x65_*P\x9bU\x90\x1c\x63\x1eys\xa2\xb5\x46\x1d\xb8\x11z\xf9" "\xa4\x86\xf6\x44\xfa\x97z\x41\xfb\xcb\x94\x37\xb8\xd1Z\xb7\xa8s>ho\x63\n\x1d\xbc\x17\xe5\xbe\xe9\x37\xd2\xbe\x38~\x32\x85%R\xa2x" "\x13\x03\x99\x33\x03\xf5\xd9\xc7<\x0e\xa8}=v\x16:}\xec^x\xd3\x81M\x32\xa6\xb0\x32\x0b\xea\xf8\xed\xd7\x97\x31\x85\xbd\xa8L\xc5\xce" "\x19]}^\x94]w\xcc\x93\xaf\x10\x93'\x8e{\r\xa9\xe3\x39z{\x84\xcf\x80\xe6\x04k\xfa\x85\xec&J\\#\x41\r\xae\x82\xab\xef" "\x98\xc2\x62\"S\x98\xf9.*\xe8\x8e\xfdU\xcaTTz\xd4\x36\xef\x44{\x66\x98Z\?\x82\xf9\x13U\xdd\x07\x94\xb9k\xc5`\xa2\x39\xe0" "\x04[{\x08\x31K\x97\xcc\xfc\x8f\x7f\xf7\x18NWP\xc5[v%\xf8t\x05\xc5\x33\xe3\xdc{\xa4\xda\x05\x7fV\xd4{\x15\xb7#\x42," "\xb2\x16\x13\x13\x15\x9a\x13\?\xc1#\xfc\x18\xeb\x66U\x8a\xfd\x12s\xd3\x84\xec.n\xb2\x81\xca$\xfc\xd6\xa7]\xcb\xcf~\xf1*\xe7\xec\r" "\xd4}\x9a\x33\x14\x19\xba\x64\xc5\x9e\xc8\xfd\x1c\x1e\xc5\xaf\x8c\xa3\xf7N\xb4\x39;\x35\xbe\xd2\xa6\x99\xa8\x9f\xcbg\xa8\xa8\xfa\xd8\x19y\x13\x16\xd4jT\xc1\x33\xa3(\x8f" "\n\xc1\x95\xde\xebg\x99\xe7zl\x10\x8c\x61\xae\xef_}[\xe8[\xd6I\x8c\xdd\xab\x45\x41\x0bKmUO\xd8\xb3\xdb\xae\x84\xd9r\xcd" "\t\xd6\xaa\t\x39\x41\xdd#\xa3\x8d\xca\xd2\xf6P\xe7$\x44\x34O\xa6\xd8#\xa3\x39\xf5\xdf\xa4\xf7\x62\xaamV&\xf6\x97iN\xf5\xb2\xf3" "\xa0%\xb9\xf4<|\x95\xc8\xb5\xd0S\x31\xfdl\x36\xb8n:U\xdc\xc0\x05\xa7\xa8\xa0S\xd0\xb6\xd3\x02\x9e\xf5\xdcg\xfb\x02\x88t\xb2\xc0" "\xd8\xb0\xd0\xed\xfcJ\n\x95\xc8\x85\xf7\\\x34\xfa\xe5zx\xb5\x80\x92\x91\?\xa2\xcco!\"\xd7_\xc0\xcd\x02\xb5U\xc4\x39\x02Q\x96\x0f" "\x12\xdfs`\xefl\xb7\xa1-\xff\x05\xb6\x12l.\xb4\t\xa1>\x38\x89U\xfcT\xc7\x35\x16Z\x16\xd1\x35\x64\xa2\x1f\x0el\x1f\xb5\x0e\xc1" "\xcamg\"J\x93\x04\x9btJ\xad\xd7.\x30 &\xe4\x1c\x05\xef}\x11|I\x85l\xa1\x39<\x93k\x88xw\x8b\x30\x99\x33Zh" "\x84W/\x46\x1dJZhG\xee\x02\xee`\x88\x9f\xc5\xd8+\xc0\x32/\"\x8a\x9c\xa5\x16\xf9\xcc\xbf]\x31j\xdd\x98\x8a\xdaOp\xd3\xc3" "*\xa7\xcc\x83(\xa0\x97\xdaM\xbb\xc4\x34@\"\xea\xe4K\x9ejQ\xd9\x62&\x02\xab\x85\?\xfa\x84\x8f\x87\xe6\x12\xfb\x97\t\x83\xc2L\xb3" "\x94\xa5\x96VK/w\xa2\?\x98\xb2,\x44\x88\xd9\x00\x62R\xc6\xef\x14\xc6\x7f\x98ZMgS\xfb\x82\x96\xd8V\x92\xb9\x06\xc5\x1f\x12Q" "\xfc\xa1\x12+\x35\xad\xb9\x92\xb9\x07\xfb\x19\x37\x15\x9a\x95~\x8a\x16\xf6\x12\x33G\x98z\xf9y\xc7\xe8\xe5\xcb\x98\x88&J\x19\xd9\t\"\x32\x1dV\xe1\xf5&L\xdf\xaa\xc2\xcb\xf5sy" "%\xc2\x9aJh\xe5\xce\xe8\xcc\xfc\xbb\xd1y\x12\x65\x85\x37\xe1\x17\xf4\x87\x05\xbd\x38\xaa\x82\xcc\xf8\xad\x15\xfa^\xa1\x8b\x99\x86P\x0fW\x9a" "W\x8a\x9a\x9c\x34\xf7\x13\x35\xdd\x62\x66#\xd4q\x8e%\x39\xa2\xfcl\x39\\\xdd\x38U\x18i\xa1)\xaa<\xd3\xae\x0eQ\xddg\xbfR\x37" "\x15\x8c\xdc\xc5\x82\xaf\x8e\xc5\nV\xfb\x07\xccL\x17\x15^\xf5\x63\?\n\x97\x1b\xac\xb5S\xb5\xd5.+Q\xe7\xa6{\x41\x85~\x94\xc8h" "\x93W\xd4\xdb-\xf6\xf2!\xf5\xa0\xc1\xf2\x94\xa2\?\x35;\x46JI\x94\x9eT\xe9\xf3\x97\xf5\xd5R\x92k\xea\x19k.\xcd\x90\x19K\x33" "\x98\x8bIl\x8d\xa8\xa9\xa5]\x82K\xed\xaa!\xf6\x39\xb2\x15\xf6qu\x42\x34\xd5n\x9b\xa5\xe6\x92L^\x94UZ\xb9S\xaf\x92\xd8." "\xc0L\xca\xc6\xddg\xe2\xb7Rh&\x16:\x12\x35\x36`\x66\x1b\xb1Q\x89%\xc2@\xa6\x43\x11[\x19#\x17\xc2\xc8;\x97ZV-\x03" "M`\xfc\x11\n\xee\x65\xf0\x92\xb4\x84\n\xcf\xa4\xc4\xaf\x9cQK.\x36\x43\xf4-.\xb1n\x96\xf8\xb3\x37\xba\r\xc7\x45\xb9Yn\xa2\x82" "~\x05\xab\xbb\x44\x85\xaf\t\xec\x00\x45jw\x36z\xd9\x97(\xd1\xb5\xbc\x89\x0ep\x82\xfd\xf7\x98L\xd8#\x9eSZ\xba,u\x63#M" "I\x9a\xbd\x33-\xa9_rz\x31\xeb\xf7\x66j)\xb1\x0c\xd3\xc8|\x42M\xf2\x61\xf6\xca\xcb.,\xb3\xc3\xe6H\x42\xcayx\x13\xcf&" "\"\x99\xc5\xcd\xf0\x1d\x19\xb4\x96gK-\xfd\x97p\x1f,\xb4\x0c\x08s\x93\x85n\x39ML\x61\xaf/\x39`\x0f\xcc\x66\xfbQ+\xc4\xa2" "\xf4%\x61\xf7\x06!\x37\xca&\?\xa6\xbc\xdc\x39\xae\xf2sw\x9f\xa4\x1e*\x41\x7f\xe3T\xf1\x88\xddy\xa0\x64\x9fmS\\M\xbf\x9c\x85" "w\xf9m<:\xd5I\x86\xb3\xcb\x37\xc7oZ\xbd\x82z\xd7j\x95\xa9\xcb\x37\xc3\xd9\x0b\xf6\xfb\x80Z\x9e\x62\xf7\xc2k\xb3\x17\xfa\xea&" "\xfa\xfbiRYT\xb6\x95\x88\xe2\xe1,\xe5\xf5\x1aZ\xd5[\xba\xeb,_\xbd\xa2\x06\xe3J_\x0c\xba\xe5\x88\xfa@\x1a\x99\xc3S\xc5\xa8" "\x95\xba\xa5\x0e`-\xb5\xf3\x8f\xd8T\xe2T\xf0\xd7\xceL*\x33\xca\x86\x31H~\xc1\t\x82\xa8\x8b\x89\x14\xa8\xbd\x89Ln\xe5O\xb6N" "\xed\\\"#\xc5\x1bR\xe8k\x8b\x9eqK\xda`[\xeah\xc6\x12\xf3\xdb\x89\xe8\x92]\xc2\xc1\x00q\x80\x80\xc0\x06\x16\xcd\rO\xf2O" "/\xd5,\x18y\xb1\xa5l\x39\xc3j\xac\xdcQ\x83\x17S\x8a]\xff\xcf\x46\xab.\x1b\xcd`\x88O\x46jyin-\xea\xdc\xa6\x37\xe6" "O\x93\x41rl\xc7\xa8X\xd7\xec\x01\xea\xa0\x0f\xccJ\xd3\x04\x9bT\xc0`\x91\x1aT\xb7\x19 [\x66\x15\x9e\x32\xbe\x38\xed\x15\x45\xed=" "\xacH\x85\xaa\xeas\xa1Z\xc5\xc4z\\\x36\x17\x46\xf6K >;I\xed\x35\x00\xf6g\x10\xfd\x90\x1b\xed#%\xea\t\x65\xab \xa1\xa6" "I\x36\xdd\x1d\x1f\x0e\xda\x45\xbe\xd1Z\x0c\xd3[O\xcc\xd4\x84M\xe6s\xf8\x9e\xc4T\x38R\x32\xedY\x18\x0f\xfd\xb3\x1e\x45\x9d\x9e\xa9\xf1" "\x80\xcdK\xc3Y\xd4\xa9\xf7w\x90\xda\xe8\xc6K\x34\x62'Qu\xc0\xef\xbc\x64\x41Y\x06\x65\x03\x00\xf6\x8d\x9eS~+\x7f\x8c\x9a\xdd\x88" "\xa9\x61O\xa6=\x30\xbf\x46}`\x32\xb5\xaa\xbd\x81\xd7P&\x82\xdaK\xeb\x65\xd0x\xdbx\xd9\xb6\xf2\xc5\xc8\xde\xe7\xd1<&\xa5'\xbc" "\xdf\xfa\x65=Q\x81\xd7\xa5\xc0\xf3\xa6(\xef\xe9K\xb3;Q\xbd\x0f\x1fuoV\xdc\x1eO\xbf\x98\nJ\r\xf7\xbb\x87\xbc\xd1\xdd\x34\x99" "\xcd\x8d\xf6\xa9\xe8\xbe\x8b\x44\x8dH\xd8\xffT\xc8\xa3\x18\xbd\x1bS\xde\x63^[G\xac\xe0\xb7\x9e\xcd\xa2\x91\xb7\xdf\x41'\x13\xa9\x8dr\xef" "\xce[\xd4\x9b\xb5\x97T<\xba\xa0\xc3\xc4\x9d\x8d\xce\xc4\xdah\xd7\xe6\xc6\x85}\xb7`\xd4\xd6\xdc\x46\xe7\x33m\xb0\xa2\x8ch\xf7\xd9\xfb\x32" "\xfa\x65\xeb\xab\xd9\xc0\r So\xab\xaf\x17\xf8\\`s`\x32\xd1#\xa5^\x06\x99\x19\xa3t\xdfi\\\x99h\xa8N~\x95[\xa3\x8b" "\x1d\x64\xb6_\x31\xc7\x9c\xd4tk\xbc\xb4I\x45\xed\n\xce<\xe6\xb1k\xb1(/\xf3\xf1w\xac\xff\xed\xd7\xd8\xff\x1d\xc7\\\x37\x8e\xa8\xe9" "\xadv\xec\xb2r\xd7%SS;\x9bm\xdd\x30\x15\n\xa3\xc4\x62n\xcf\xb1\x1f\xbb(\x41\x66\xab\xab\x35[V\x9c\xe3\x8e\xdc\x15\xb5\x44S" "\x33v\xc5p:\xb5\x84.j\t'\xcdPh\x1f\x8bi^\x8d\x45\x45_\x35w\x0b\x18`\x64\xba\x37\xbb\xd6\x8f\xec\xbck\xe9\x00\xee\x35" "L\xf9W\xdf\xfe$\xebT,\xe2o\xf4\xd5m\xf4\x97[M\x89\xdb\x1fLr%sW\x32\xba\x8d(I\xc9\xb6\xbb\x44\xb4\x1d\x98\xee\xf5" "\x88\xe9\xdfU\xb8\x63\xf3r\xcc{\x98j\xfd\x46\x94\xdd\x1c\x9b\x43\x33\xc3\xe1\x8d\?z\x35\x15\xd5\xcd|\x33\xca\x36\x19\x0bS\xdc\r\xb8\xbf" "\x8f)\x9d`\xb7\xd1\x46\x1c\x93\xb7\xc4\x99\x9cL\xd1;r\x89\xf8T\xf5\x93#\xbf\xde\x30\xc5s\x14\x8f\x1a\x1b\xcey#\xe7\x8a\x9a\xb6\xfc" "\x44K\xd9\x36Zj\x91\xdd:R\x66jO\x33\x9b:\xa9P\x37R\x65\"\x92\xfbW\x15\xf0Z\x7fu\x9d\xfd;Luv\x85\xcbh|" "\x0c\xb8n\xe0_\x92\x39S\xeaY\x32(\x85\xa8\xc1\xa5\\\x81\xf7I\xa3x\x35\xd1k\xa3\xd5\xb7\xf1\x1f\x1e\xbd\xadM\xaa\xd8hKg\xe3" "\x97\xbf\x63\x61\x05\xe7\xb4L\xfdM\xf5\x97\xc2\xce\x62\xa4\x95\xa7\x44\xee\xd6\xfe\x45\xf1\xe4\xb7\x9a\xca\xa9rg\x8c\xffV\x94\xd6MLi\xba" "\x61\xf5zo\x39\x07\xab\xe1\x95\x65\xb6:\xe3w\xe3\xbfj\xe0\xbe\xeb\xb7\x34\xa1\x12\x31\xceh*<]\xc3\xc4\x04\x98\x8d\xbf\x38\x1b\xe9\xa6" "\xb1\xd9\x02\xa9\xf5\xdah\xd9\xaev\"\x33y\xd0m\xf1\xe5\xd4\xbeo\x8a\xaa(\xfc\x1f\xfdU\x1b\xac\x8b$\xa6\n\x7f\xc7\xb2\x9f@\x98\x05" "\xb7\xfa\xa9\xd6\x1dt\x80\x9c\xa9\xfd\n\x1bm\x8a]NT\xea\x06\x97\x62\x96[t\x05gj\x33p\xa3}\x84\xea*I\x18\x8b\xc8\xbc\x07" "\x35G'\x44\xd5\xe0m\x66\xb4\xf7\x1c\xf4\x90G\x62\xb3W\xe2P\xbf\x32\x42\x38\x06\x1f;\xab\x15\xe9X:\xd3\xc2\x06\x9bW\x0b-#\x84" "\xdbn\xe2|o\x0c.\x15%\x1dG\xdb`\xe5\x02\x11\xe3\xf0Lw\xce\xfd\xd0(\xcbL\x91\x32\xac\xa4\x0b\x93%\xa3\xd5\x04\xc3$\x9e\x15" "\xdb \x10s\x08\x89\xf0\xd5\x88\xea\x89\xf6\xae\x30\x63!\xc4\xaa\xfa\x82u\xf9\xacn\x8d\x61\xe1+J\x98**\x9f\x94x\x8a\x10\xe3|\x44" "\xfd\xf5\xe4\x43\x89\xa7\xc3\xe2r\xa1\xd5\xc1\xb0\x16\xa4i\xdd\xb3\x9bpqo\x64\xf7\xf9\x98\xe7\xbe\t\x31]\x64\x83}\xb9\x89\x1ay\x43\xcd" "\xc9\x88\xb1|!\x94\x9c\xcc\xd2Px.(\xf5\xa6\xb5\x42\x18\x9e;J\xc4\xd9(q\x65\x41\xce\xa6\xe6\xeb\xda\xf0 \xbe\x19\x63\x81\x45*" "\xc8\x8d\xb5\xfd\xb3\x81\x7f\x0f\xe2\x15\xee\x92*\xd3\x46{\\\x32-\x62X\x43\x80\xda\x1b\xbc\xa6\xb3\xb9\x31\xc5{\xac;\x85\xa8\x16\xd5{\xca" "O\xb0\xf1\xa0\xd4\xbb\xd4\xd2(z\xdd\xc7j\xad\xa4\x62\xe1\x10\xbd\x9e\x8c\xb1r\"z\xa7\x34y\xf6\x36x\x31\xd1@){\xec\x34\xb7\x9a" "\x10\x0f\x1e\xd6\x0f\x1ct\xd2\xcf\xc1\xafuy\xad\x1e\x19\xad\xbb\xbf\xdd\x04\xc7\x90\xbf\x1d\x02L\x10:i\xb9t\xd2\xfe\xcf\x13\xbc\xec\x0b\xe1" "m\x92L,\?\x38\x61\xba`+\x89\xec\x89\x39V\xee=\x33w\xfa\xd1N\xbf\xba\xdb\xf1vg\xd9\x0e\x94L\xe8&\x1ej\xca\x06x:" "\x83\xe7*\xe5\x95\xf0\xc8\xc9\n\xe7\xf4nS\x46t\r\xb3\xd9\x44\xb5\x41L\x38\xdf\x62\x93\x87\xc0\xe0/\x9c\xd4]\x31\xac\xdc\xf8\xe5&T" "\xd6\xb8\x30\"\xd4\xc8\xb4\x33\xc9\xe4\x07\xa2\xf4\x63\x31\xf5\xf3\xc7k\xba\x15\x34\xf1Hu\xde\xc1.\xee\x12\x13\xdb\x88vk\x32\x33XHm" "\x46\xec. \xca+\xd6\xecyQ\x9d\x16\xa2\x9b\x99L\x19\xcf#\xce\x1e\xa2\xa7\x39L\x99\x19\xcc\x44\xe8\x61.\x30Q\x1a\xe9\x42w\xeb\xd2" "\x39\x46<\xe9\x89\x65\x84\xa1\x95\x44!O\xbc\xc2\xd9}YWJ,\x9d\xed'~%\xed\xd7\n\xf6\x86\xd0%\xc9\xdc\xd2\x9b\xc0V\xa1\xa6" "\xb0\x84\x81\x94L\xe0 ~/\xb8\xc9!\x99\x06\xa9\x05\x42\xcd\xdfL\x85\x18\r!^\x0f(\x17\x85+HR\x1a\x8a\xc4\xf0\xf7'\\\xbe" "\xa9Z\x81\xd2\x02\x62\xf6\x8d\xd8qY\xcd\xb5\x99\x9c\x97\x9bj.\x8d\xae\x03]T\x30y\xb5\x37\xc8N\x34\xf4\xb5\xa0\xa0 ~!\xa2\x06" "\xf3<\xa8q\x08\x63\xb7\x42\xfb\tR\x66K\x07r\x89\xcb\xb7`T\xb0h\x86\xde\x13\xa1\xbd\x18\xcc\xd1i%\xd1\xc9\x41\xbc\x1e\xd9\xe9\xed" "\xdd\xf2(\x99\x06\x10\x36\xd0i\xdd\x04\x32\x84\x42\x94\x84\xc9\x94\xa0\xd2\x99\x12\xad\x34\xf6\xf8i\xa5\xe9\x8fy\x17\xc8\xc2\x9bV\xc6\xcb\xb3\x9f" "\x42,\xb6\xb5\x85T\x42\xf6\x97\xd2\x98\x87\x13*\xff\xb3<\x64*\x35t\xfa\x64\x92\x06g\x15P\xaa\xe2\x44\xd9\x63\x84xH\xb0G^Y" "\xcbGJ\xb2\x07\"\x62\x14\x13\x8b.[\x19\xecv\x46\xd4\x1b\xe1~\xdf\xd6\x41SO\x46\x1a\"\x63\xa7\xdep\x1a\xff}n\xc4RW\x32" "\xbf\xdf\x62\xd7\xc3\x1aH\x61x\xfdJ\x35S\xae\xbc\x64\xb3~\xf6\xd9\x0eG\xe2\x80\x86\xcc\x1f\xfd\xfd\x86\xfb@\x83\xa1\x44\xb0\x0c\xba\x43\x85" "\xdc\x1d\xbaI\x39ux\x41\x35U\x14\xcf\xab(\xe1\xd6\xd0),\x8c\x7f\xa7u\xe0\xfd\x30\x8e\x05(\x19\xa7\x17r\xdb\xf8\x36\x15W\x32\xcf" "\xc2\x14\xfa\xf2H\xc9\x80\x1cQ\xba\x87mU\x1b\x31;\x8f=-\n\x0e\xa1\x85*\xba\"\x99mP\xfa\xb3\x84\xec\xc0\xe4N\xd5W\x8d\xef" "Wo\x0f\xf5s\xe2^\x02/'\x03\xc9\x39\x33Q\xd5\x62\x33k\xd4\xd7\xa2&:\xf7[\xb9\xcbo\xf2\x46v~\x80\xf0\x81\x1a;sK" "\x41\x65\?\xcb\xc3\xd5\x9c\x98\xb1\xa3\xd8\xeb\x0c&^\x44\x0e\xd3o\x9c)#\xda\x30\x91\x66\xd4\xbc\xdc_\x9e\xddp\xb8;\xd0\xcbK_\x1c" "Q\xe6\x9f\x33\xf5\xb1w;\xe3\xe5\x9d\xb1r\xd5qR\xfb\nx\xd0s\"\x08sp\x99\xd6\xcay\x89{Pjg\xc4\xf4\xad\x12\xe7\xc6" "\x30$\xf1\x1ew\x08W,L\xd5\x0f\xfa\xf9#\xce\x8b\x41\x7f\xa2ti\x10\x65\xe0R\xc8Q,\xad\xbf\x46\xaaU\x87\x62\xc4\xb1\xfa\x82'" "S\xfa%\x84\xf6|\xbc\xd8\x84\xca\x42Yil\n\xae\n\x44\x61\x45\x86\x98\xa8~\xb2\xa9\xd7\x91\xb5\x0fL}:w\x8e_#\x96\x39\x8b" "\t\xaf\xba\x64\x1e\xf4\x84'=\xdb\xa9j\xb4W\xc2\x0e\xb7,\x84\xa8I\xaaq\x80\xcd\x8d\xfb\x8d\xbdx\x36\xf5\xc5\xb3\xa9/\x1e\xa6\x96\xc9" "Px#\xfe\x15\x42\x8c\x87*\x65\xae&\x9b\x38\xbf\x45\x30\xbbg\xd4,\x89\x99\xa4\x32\xa7\xc4Y\xb1z\x46h\x61\x89\x9d\x8e\x98\x88\x0f\xec" "\xf7q=\xb2\x18G*L$\x9d\xaaOy\xcd\x1er\x88\x1c\x9a\xb9\xcc\xa6r\xce\xae\xe5\xde\x86P\xed\xbe\x91w\xc0\xbe~\x88)T\xa2" "I\xbd\xac\x8d\xf6\xb6\x31\xa7\x80\xf8\xab\x0f\xad\xc1\x87\xa9\x8f\xad\\p=\x8e\x64\x0f\x42\x32\x65\xa1\x37\x11\x45j\x8e\xdbY\xb2Z]L-" "\x35rh\xd0\xb7\xd4s\x02Q\xaa\xac\x44\xcd\x14\x30\x14&\xe4\xc9\t\x93WSQ)\x65\xb1\x13\x0b\xc0\x85\xc1\xee\r\xb3\xa2H} P" "\xddo&\xaf\x16\xdd\x1c\xb3s\xa3\x85!{\xcc~\xbc\xc6\x8c\xc8\x98\x8a\xd2\x0f\xf1^\x62\xfa\xa4\x88\x38\x86\xb9g\xad\x9c\x45\x1e*|\xb1" "\xa7G\x8b\xb7\xb2\xb0P\x0e\xd7\xb8S\x0c\x33\x30\x91\x1a-r\x85\xe2\x95\xae\x95\x8b\x12\x08\xc6\xe8\x9a\xf7\x1c\xb2\x30\xc0\xe2h\x62I\xbfU" "\x1d\x19-\x9a\x90\x19\x64\xbf\x9d\xa9\t\x03{\x15\x12_\x91\xb8\xb5\xe6\x9a\x8b\xd7\xd6M\x85w\xab\x7f\xd4\xd6T,s\x62u\xfc\x8e}\x33" "\xfa\xf8\r\xa6\x88$\x94\xc7\xbb\x9b\x39J\x64\xc9\xff%%/\xeb\x62[j\xe6\xa7ro\xc4\xe2\x08\x32\xa5\x03\x92\x39\x00q\xc5.Z\x05" "-;uW\xb2\xce\xd8\xa7;-W\xbb\x18\x1a`~\x1a\xc5\x35\xa5\x84T\xd7K\x1c\xf4\x45u\xb1y\xb7\x30j\x9c\xdc\x17\xaepK^" "z\xecM:\x18;g\xc5\x93\xa9\xb1\xee\x82\xd4]\x82\?\xeb|\x9a\xa2\xff\x17\xa5.\x46\xd9\xd4\x0b\x64\xbb\xe8\xf4%\xf3\x31O\xbf\x84W" "IV\x05J\xa6^v\x84&\x1c\x1f\x18\xc8\x84\xc4>\x94\x34\xbb\x88\xe2\x8b\x83X\xb9\x41_\x30\x99\xed\x07\xf0}\x66\xf4[\t*k\x31" "\xb8\x44\x07\xfaiv\x1f\xf8\xbf\x62\xd2i\xfe\xc7;\xdd\xb1\xc1\x07\x82k\xca\x8c\xfe/\x7f\xb2\x9e\xf0w\x83\xd7\x32~#[\xcf\xc8\x86>" "\xf0\xcc\x46\xa6\x38\xd0\x10\xa2O\x15\xa6\xcc\xbe`s\x0b\xae\xf5\xa3\xe3\x07\x9a\x81l\xce\x41\xd4\xc6\x98\xf2\xc3\x87\x7f\x15\xe6\xd5\xc9\x01\x0e\xc3" "\xcb\xc7\xe1\xb4\xf1\x8fj\xc7L\xf6\x00v\xfb\x14\xd5\x11\x66v_\xf0\x96\xd8\xb2\\\x8f\x19\xbb\xa2\xa9\xae*\x84\x92\xfbT&\xe7\x08\xf9\xf5" "\x8c\x11\xf5\xa8*\xc7j\x8b'\xf2\xef\x11\x41\xed\xedj]\x84\xa9YV\x97\x32\xda\xbf\xe3\x8bS\xe2}\xeb\x12\x33\x88|\xba\x03\xc2\x0c{" "\xa3\x08\xddN\n\xac\x0e\x46w\x9a\xf7'P\xa6\xdc\x0b\xd9\xe3U\xef\x44m\x34\xd7\x61\xcf\x87\xf5\xa6\x17\xaf\xbc\x97\xe2\x9d\xde\xe4\xee\x17N" "\xbb\xe8-\xdf\xe1\x8d`\x41\x12\xb3\t\x16\x10K\x31\x41\xcb\xba\xd8\x85Z\xe4\xb0\x89\xeeK\x31\xb1\xf8\x93\xcc\xf2'\\\xbc\x93\xd9\x98\x18\xb1" "\xfe\xad\xd5\xd5\xec[\xfa\xd7z\x43\xcc}\x10\xe5O\xcbQKo\xa9\xd5\x35\xf2\x96\xce\x9a\\\xd0\xd1&\x0c\x92\x07\xcdN\xbbp\xf5\xd5\xd2" "\x8dN\x89\x1f;\xa3\xff\xb3\x32S\xb3x\x36\x43\x33wx\xd7\x98\x89\xd0\xea\x86W\xd3X\x1a\x0bSYPV\n\n\x03\xf4\x08t\xd1K" "*\x84\x8f)\x31\xf9\xbfL\xcb\x61\x36\x94m%\x42\x30\x9c!\x64\xb5\xf4\xec\x86\xab\xebX\xe6\x81\xedH\x89g\x44\x04m{u\xa3tV" "Y\x34ru\x34Q\x0e\x92_\xdc`\xb9\x1e\xfe\xd7\x61\x38z\xfc\x8f\x63\x97\xef\x05\xd7wt\x00\xaa\x8e\x44\x41\xed/mwt\xb1\x89\x35" "q!\xd9\x36\xaf\x95\xf4\xf2\x43\xf8\xc7o\xbdP{\xdcm\xcfKJ\xa6\xb4\xb6^\xd8\xd3`~\xe8#\x8f\x11\x35\x39;%\x1b\xc0\xb5\xde" "\xb0r\xbe\x35\x08\xda\x12:#t\x44\x13\x65Iz\xcbj,LLRo}\xfc\xc9\xdaH\xe2v\x0e\"\x8f\xff\xc0\x64\xf3\xd6\x87\x7f]" "\x04\xebr\xea\x0f}\x04\x66\xd4J\x63\x19\x1b)\x9c\xf8#\x94!\xff\xd6\xd4u\x37\x91)]\xe4\xcc\x03\xd8\xd6\xaf\x1c\xe4\xcdM\xb5\xf4\x9d" "\xa2S\xae\xf5\xa3\x37\xb6\xe2\xe6\xda\x8f\xbc\x96\xb5v`\xac\xb5\x8f\x63\xed\x9d%\xd2\xad}\\m\x8d\x11\x07\xa2\xf8Q$\xa2\xd1\xb7\xd6\x64" "\xb7\xa6\?\xa3\xf3\xde\xdfZky\xac\x9e\x85[;\xad\xa2\xed\xb4Jy\xd0\x86\xce\x01\xad\x11\xee\x8a\x93m\xee\xec\x80\xcc\xaeU\x37\x81\x38" "\x66\x33\xffY\x8d\x8d\xde\xdd\xce\xcc\xa0R\x12\x17\x38\xf1\x63\xd1S&\x66\xfe\xc7\xc7(v\xad\x01\xa7\x33\xf4\x88x\x35L\xbf\xfc\x10\xc9\x62" "\"(\x99\xda/\x66\xd0\x1d\xc7\xcc\xd8\x07\xf4t\x18\x85\"u\x9br\x93\x43Y=\xf1\xde\x11\xe2\xac\x88\x14r\x65&\xfb\xda\x96y\xb0\xa4" "\xd0\?\xc6\xd4\x46\xc8\x41\xa3\x18\xd3\xcf&\x30\x1e\"\x8a\xb7\xbf\x94)\xfd\xdc\xda\xcf)\xf7h\xf3\x43\xa1G\x80I\x15\x46m\xa6\x1d\xb0x" "\x9a\x88\x8e\x07\xe2\t\x9ck ,\xf4s\xf3\x1c\x43\xe6\xa6\x06nu\x36-\x99\xbb\xb2\xd1^\xa3\xf6Q\x1c\xb4t<`\xbb\xf3\xd6\x41<" "=\x9f\xd5t\xc4\x9a\"\x32su\xb0\x9aT\xfe\x82\xb5\x82\x91\xda\x0f\xee\\\xa2\x30\x15\x91\x14\x92\xcc\x01.\x9f\x89(`\x0e\xda\xcdqp" "\xd7\x90y\x99L=\xfe\xf3i\xe4\xa9\xad\xab\xa4SK\xddl\x82\x14J\x96\x83\xf6\x0f\x1d\xb0W\x0b\xf1\x16\xef/\xc8\xde\xf0\xfc'\x8d\x31" "n\x9d\xa2\xed\xa7\x14\xdbL\t&\xd2\xc0\x41\x9b\x0b\x07\x0c\xd2\x30W\xda&=h\xb7\xdb!\xa8,<\xf1\xd6\xdf\xd2\xdd\xbb\x85\xb1@\xd0" "\xc6\xc4\x41\xcb\x9d\x83\x16PL\xefy\x0c\xbf:PvQ\x31-\x8ej\x06s\xc0\xa4<\x66\xce\xa8Y\x07\x99+\xe5\xafr\x03\xb6\x93\xf4" "\xa7\x66Q\xd9\x34Z\x8c\n\xda_\xda\x7ft\x08:z\xcdN\xc1H\x39\x1a&\x42\xb3z\x06Q\xec\x31\xb9\x17\x43#>\x14|\x0c\x93\x92" "\x89\x44\xcc=\x38,\x1a\xbd\xfb\xbd\x0bNR\xa8+\x1c\xe2\xb3\xf5\x45qR\xb4w\xf4q\x0e\xaf^\xfc\x8a\xbe\xd2\xcf\xb6Q;g\xacg" "\xe8\x00W\xbc\xcc\xb3\xd1\x45\x8c\x9d\xee\x0e'\x66x\xab\xb7w,\x86\xb7-\x35q\x31\xad\x35\x32\x83\xe5\x0bU!\xa2}\x11\x36v\xa6\xa6" "O\xd0@\x63\xfaOVP\x88:\x0e\x62*\x38\x8c\x63\x8a\xc2\xd1\xe2$\xbb\xc2m&\xdcg\xf9\xa9\xd1\x12\x00\x1c\xdb\x08\xc3*\xc2\x0f." "\xb0ZV\x05\x39h\x0e\x8c*\x31+\xed^\x38`\xa0]\xe8\xa5x\xf4\x86W\xa0=~{\xa9/x\x63\xc2'\xbc\x96\xf2\xe6\xff\xf3\xc9" "\x93\xd1\x42%\\\xb7\xbd\xc9Q\xcd\x1f\xa3\x65r\xdc\xf7\xa0q_k\x62\xd6\x39\xc3\xa4*\x39\xbc\x8a\xf3\x46u\x1a\xb7\x31mR\x08\x87\x9d" "\x62\x62xTL\xac\xc0\x85\xd9\xd4\xa3-\xfdMk\xe1\xb7\x13\x98ZI\n\xcd\xc6\x43\x34\xc8\x19\xc3\xab\x46\xd4G\xa8\xf2\x46\xbc\x19\xed\xa7" "\xe2\x46\xbaxZ\x63\xa3\x87\x03\xbb\xdbH\x32V\x36\xf5;\xb2\xfa\xa9\x9d@.@Lg@\xc9\xe3\x99\x1d\xe5\xc2}\x45\xe6\n\x12\xa5\xe5" "@\x94\xbd\x04\x89\x32\xbd\xa6\x9d\xc0\xeb!J\x9b\x96\xb8\xcb\x82\xd2\xb0\xa6G\x91\xd1\x62\x62\xf2\x00J\x15\x87(M\x01\x62\xea\x1e\x94\x1e\x19" "!z\xd8\xc4\xa4\x8c\x1a;\x01\x91*\xe3\x06\x30\x30N\x94\x0e\x91v\x02U.!\xca\x13\x31\x91G\x92)\xbe\x88l\xe5\t\xf3`\xb4@" "q\x39*\x99\xfc\\s\x38\x9b\x64\xf5\n~#\x14\xe1\xb3\xaf\x9d\x80\xe3\x37\xa2\xa4\"\xa1\x9d\x8b\xfdJ\xcb\xce\x66\x64J\n\"\xca\xf4X" "\xa2\xf4_\x10\x65\xb5\x16Q\x06N\x89\xa7\xad\xd1\xc2\x1ck\x8f\xda\tt\?\x08\xed\x02\x64\x62|\x43L\xcc\x98\x17\xd3\x1e\x01;\x42\x0b\x31" "g\r\xa6\xccU\x10\xd3}\x11q\x83\x17\xdez\x0f<\x01:\xaa\x8e\x9dm\x9f\xb8\xc3v\xcc}\x35\xf6=\xd4-\x84.\xf7%%}\x83" "\xc2\xd8Q\xe4\xf4\xed\xa4\xfd\x16\x19\x30R\x0e\xe7\xe4\t\x65R\x88\xbe*\xa2\x64\x99\xedkOv\x1fm\x17\xc3\xd4\x0e\x33\x96\xdb\r\xac\xf3" "\x12r=\xef\xeb>\xa6\xb0w\xb0\xa9@\xb2\x15S\xd8\x06I\x14/\x11\x96\x96\x17\x95\x17O\xf2\xfbWq\xfc\x9cQ\x33\xa7\xcc\xa3\xeb\x89" "Lq\x10\x45\x44|{\x45'\x1eQ*P\xc4\xfc\x9d\xfd\x9a\xaa\xef\x32\x8d\x35\xf9\x8f\xd2\xcf\xa4g\x98\xd8\xec\x04\xdf\x07\xf7\x0b\xe9\x07&" "J\x99\x43\xdc(\x91\xb0^\x91\t\xb6_\xb1\x1f\x02\xb3\r\"\x41\x31\xa9\xc9\xea\xaf\x9e\xa1\xd2Ov\x62\xd4t\x88-\xdc%\x36\x46%\xf6" "R\xe0\x66\x83\x62\xbc\xfd\x8a\x1a\x05Qv\x1b\"VS\xc8\xaf\xc9\x94v&\xb1\xf5\x62\xe4\x90\x11\xc7\xdf\xaa\xc6\x66rZ\x9a]\x9b\n*" "UM\xb3\xa2\xa4\xd6&&:\x05\x61\xdaU\x10=\x98\xfe\xf5\xce;\x7f\x42!z\xbc\"sS\x13\xaf\x02\xe5\x35\xf1T@k\xa6\xfdj" "\xa7\xc5\xc6}\x44}{\x9a\x10\x99p\xb6H\xe6[N\x89\xa0\x81\x1bv\xa6~\xae\x41\xa8\xf1\xf0\xd5\x1e\x17\xed\x18!:\xea\xdb\xaf\xd1\xed" "\x13\x88\xe4\xf5\x8aUQ\xed\x37\x8d\x02op\xd2&\x44\x13\x87\xcc\x8d|\xe5\xfdO\x1a)\x42\xff=\x01/\x17\xa2\xf4I\xde\xb1\xf0\x9b\x88" "l\x9a\x38\x07\xa5~\x41\x94\xa1\x62!\xa5\xc5\xa8vQ\xb3\x87@|\x31\x8a\xc2\xb8\"\x9b\x07#\x96\x90\x93\xb9\xc6\x45\x31q\x8e(\x63\xc1" "\xc4\xbd\xdc\xea;\x36\xb4 \x66\x1b\xa0\xcc\xbbo\xbf\x87K\t\xd3\xf7\xe8$\xd7\xec\x63\x88RH\x15\x1c\xf4\x00\xb6\x07\x18\xfbo\x0f\x34\x0e" "\r\xc2\x99\x44\xe9\x01\xe6[\x08\xfd\xd2\x39\x18s\x9d\xad=\xd2\xc4\xaf\x15\x37!\x1cL\x8a\x89\xdaM\xfb\x0bS\x10\x84\xd8\x80\xb2\xbd\xe5\xbd" "Q\xbb}}\xdd[\xbf>\xfd;\xf4\xd0K\xd5\xe6\xe9\x8d\xff*/\xb5\xf4\x65\xe5\x9fS\x97\xcf\xa8\xad\xa9\x91\t\xaa\xad\xea\x88\xe9\x81\xed" "#\xf7r\xed\x06\xe8\xc1i\x1f\xe9O\x88\t*\xed#&w\xb4O\x7f\x9b\x8d\xd1\?'\xb0\xb9\xb7(\xcd\xc3\xc4,\x9d\xa2\xd4\xc4\xa9\xcb" "w\xech\xec\x0b\xca\x33\x9c\n\xb6\xcf\x98\x93\xdf\xb9\xc1\x88\x94\xf0o\xffi&V\xeb\xc3\x94\x02\x41L_\xf6 \x65s'\x44\xd2\xea\xa4" ".\xfc\x16\"\x14\x89\x92yv\xee\xb0\x1d\x65'\x87|\xbcs\x8f\xf4\xd7) =RN\xfe\xb8\x05\x65\xd7P\xcb\xd9\x85n\r\xa7)l" "\x06GJ|\xc4\x10\xa5\xca\xd0\xa1\xe6\xd4\xd4\x88\xed\xa6\xc5\x84\xe3T\x32\x65\xc0\x97x\x9f\xc6JT\x32\x0b\x33\xf0Q\x1e\xaa\x10\\M\xc0" "\xfb\x16\xd8\xc2\x85\x30]\x8cx\xa8\x18\xa9\x86\n\xe7`\xd4\nH\x66\xc1\xf4\xa7\xd7\xdb\xc0\x94\xcd\x93\x98m\xe5\x12\x94\\\x8dy\x07\x1e%" "\xb4\nQ\xa2\tV\xa7J\t\x8d\"*=\x9d\xa2\x86Z\x11\x8b\x92;O\xbc\x44\x92\xeall\xe4\xec\x80\xb8HR%\xd1\xad\xf3\xe4=" "\xdf\x80\xbd\x0fo\x33\x46ML\x94_\x1b\xc6\x14\xe5\x42h[\x90\xa2,\x84>[\xcf\x45\xa1t#\xae\xf1\xa9\xbe\xe4'^z\xfc\xf8\x8c" "\xad\xfe\xa0J\xdf\xa6\xf4\xc5\?!\x8b\xeb<\xc1IQ\xe7\x19Y\x61\xa7\xeb\xea\x04\x9d\xae\xc6\x8d\x17\xafx`'(\x32\xbe\xd9y\xd1g" "\x65\x06\xfbgl\x95)\x8a\xa7\x34I\xd2\xee\xf4|\xf1\x02\xd9\xe9\xa3\x96\xd6\xe9\xeb\x99\xfa\xfa\xf9\xd0\x8d\x04\x93\x89\xb0\x18\xfe\x1d\xe5m\r" "\x35\xe2\x0e\xdd\x98\x61g\xa8\x8f\x35t\x15Y\x31\xddp\x15\xa9\xceP\xa8\x97\x19\x62\xf0\xa7\x33\x8c\x06u\xf4\xfev>\xd0!\xd4\xd1.\xaf" "\xce\xa7\xc6\xebO\xd4q\x98Kz\xd9\x98\xe2\xde\xf9\x14\x1f\tm\xbd[\xad\x0f\x11q\x1f\x9f\xc1\xa9!\xd4\xa0\x64\xdaW\xf4'\xdf\xde\x43" "\x91;\x7f\x90HX\x85\xa7G,\x0b\xed|k\xe0\x30y\x97@\x99'\n\x45\xb5\x17\x99\x1e \x8a\xf7\x07\xb1\xcf\xa4\xa3\x42\x88\xdeX\x98" "\xb1SV\x7fy\xad\x98\xccY\xec|\xa3\xfd\xd3\xf9\xb6\x93\x11\xdd\x36\t\xa2\xb8wk\xb8\x87j\xc9[\x1d\xc3\x37_g\xac\xe1\xc4\xc4\xc0" "\x36L|:\xfb\xdb\xc8\x19gp\x1e@\x94\xfe\x84\xceL\x7f\xf5\xa3/\xf3\xe7o//\xe2\x07\x1d@\x9d\xfd\xdf^N\xb5\x87\x03<\x62" "&\xef\x9d\x8f\x1a\xa3X\xf1\xdc\x37S\x14\xfd\x93\xb9\xa8V\x87\x92\xee\xc1\xce\xde\xcf\xb5@\\i\x8f\xe9\xa0\x9d=:\xfe:G\xee\\\x1e" "\xdc`\x9d\x64\xe7\x18\xd5$r\x9f\xbd\xd7\x1a\x16\xcav\xce>Nx\x0e\x86\xba\x01n\x37\x1f\\'\xc1n^\x18Ir\xecV\x31S\xa8" "\xdb\x44\xdf]\x97+\x8fX\x97\x43\xa6\xd4\x06\x84\x94O!\xbat\xb5\x37\x42\x88\x62\xab\xdb\x44\?\x91-\xe8\x11\x8a'\xaa\xa1S\xa7\x9c\x99" "Tx\xc0\xdb\xa7(\xf6\x87P\x9f\x44\xc9<\x06\x64\xec\x18\xbb\x01\x9f\x64\xe3\xc7l\x45\x86\xa8px\x13;#\x46\x19`R\xac\xd6\x93G" "\r\x0e\xb3n\xcb\xcbv\x39w\xc2S\x8a:<\x62\x41\x86(\?y\xedM^LQ\xae\x89\xc5\x9fP\xcb.\xda\xb0\xa6\xb0\?\x10\xa9\xc7" "\xbc\x37x\xc2\xaeSP_\x19\xa7$\xd7%\xf6\xd3tQ\x94\xb1\xa4\xa6\xaf\xde\xb8\x17\xe4\xbe\xa1\xd6\xf3\xbf\xfd\x1e%\x9f(\xba.\xf6\xd4" "\xeb\xb6\xfcL\x9e\x1a\xb8v]L\x12'\xd6wr}\\\x83\xfe\xfe\x36\r\xf8\xc3 \xb5{\xf1K\xbf\xc1\x61,\x8a\xbe\xc3\xf7-\x95x" "R\xcb/\?\xe9\xae\xcb\xaa\\\xf4\n\x37\xaaV\x42\x34\xd0\xbao\xec\x12\x64p\x15\x35G\xaa\xf2\x61\xbd\x81\xc5\xe4\xdd\x37\xef\xe1\xdd\xe8=" "\x0e\x30\xc3V\x94\x9f]\x61\x17-R\xad\x91\xd1;\x0c\xd0\xe3\x43JN\x89\xa1\x41R\xb3\xa3\x97Z\x61\x83:R\x32\x01O\xc8-\x8a\xf9" "]L\xf9\x32\xea+\xca\xcf\?\x86\xbb\xa9(^\xb0x\xb9+\x0c\x92\x11\x65\xd7\x9d\xbf\xdd\xbd(\xe4\x82\x44\x19\x63\x10\xba\xcc\xc6)\xf1\x41" "\xdc}\xc3p\r\xf1\x38\xc0\xce]\xdd\xb7H\x16\x38u\xfb\x32\xcb\x88\xfd\xee`\xd3\x1d\x39\x80U\xa8l\xe3Z}\xcc%\x12\x86\xd3;_" "v\x85\x62O=\x32\xd1G\xbc)\xa9\xda\xc1\xb0\x03\x41\xa9\x81\xd5\x15N\xc9\xec\x43s\xf2#\xe4\xa1,I\xf8\xa2\xc2\xe9m\\\x9dN\xa8" "\xb0\x39\x65\x9f\xed\xf4\xe8N\xaf%\x8b\xe6\xba\xba\x87\xb0\x90\xdf\xb3,\x33\x82\xa2\x16\xa6t\t;%=\xe1\xa2\xbc\xbb\xba\xf7\xbcp\xaar" "\x43\xb1\x36\xa6PS\x87:\xa5\x62\xe7\xf4+\xf5\xcb\xf5\xf9\xc9y\xc3\x63\x84\xa5\xb4\x0e\xe4\x30%[L#'\xb5\xcfz\xf9\x06\xdc\xfe\x91" ": `\xa8\x18\xbe\xbc\x03\xb2\x35\xc8\xdd\x61z\xea\xff:\x0c\xc7\x39\xf1\xc3\xb7k\x0eG\xe9\xd0\xe3WY\x06\x65\xe6$\xf1\x31o\xe4\x87" "\xd0'\xe0\x04\xbd\x1b\x38\x93w\xf6\xc3}\x62l]\xc8\xcdtq_\xa6\xea\x11\x1e~\x44Q\xd3\x18\xe3u\xa4Z\x33\xfeo\x9f\x8d\x1f\xc3" "\xc2\x17O\xce\x93\"\x85\x0eL\x32\xde\xb9\xe6\xfd" "\?\xb6\xce\x44)\x95`\xe9\xd6\x37\xe2\xbe\xc8}TQQQ\x11\x07\x14Q\x10\x64\x1e\x64PP\x19\x04\x1e\xe6\xb7\xa7\xb7\xb8\x99k\x65\xb6" "\xecs\xfe\x88\x1d\xfb\xcb\xd5\x36=V\xd7\x98\x95\x95\x7f\x37\xd5\x30n\xc9i\x41\x97\xc0\x42\xa1\xadj#\xdfv\x34\xb7}\x10!T\xf9\xee" "\xd4\x64\r\xef\x04(\xfd\x7f\xf3\x63\x8a\xef\x90\x63\x0b\xca\n\xb9\xf9\xd9\?\xc2\xf6 \xc9\xcd\x19\xc0I\xd5\x18{L\xa9\xec\xb5\xa5\x8b\xf0\xc0" "\x0c\xd5\x1f\xec\xc2U\xda\x1d\x06\xc5\xca\xa6\x9aY\x9d\x05,\x05\xd6.+w\x80m\x96\xaf\xb7\xb9*\r\xa8\x1f<\xeawP\x62\x32\xe4\x9b" "\xabtO,\xa5\xa0\x1c\xa9\xf7\xfe\x8eo\x95\x8d\x1d\x10^|\xdb=\x95\x1eU\x94]\xb9\xb6w\xae/\xfdZ\x45\xb1\x65Js\xdc\xe2L" "\x19\xaa\xc9\xc9\xbe\xfa\xfb\xe6\xd8\x8dWk#\x90R\x9e\xeb\x43\xb9J\xef\x12\xca\x32\x98\?\xc5y\xd6\xba\x1f\x82\x32\xff\xaf\x7fI\x8f\xf0\xa5" "\x01\xbb\xce_\xa9\x1e\xef\xe2\xd7K\xcb\xb8\xda\x61\xf9\x8e|\x9e\xd3=R\xcc\xcaJwG\x35\xcaU\x34`\x02Ww\xd5R\x81\x41\x0b\x44" "\xd5\x97{\xc9!\x1c\x35\x98[i{\x13k\x9eq\x8dG\xf9\xcb\xc4~=\x95t\x91\xa1'\xad\xa8\xd9\xbd\x33:\x9f\xb8\x8a\xb2|\xa9\xd1" "\xfdN>\?\xf6\x64\x88z\xf8\xd1>G\xfb\xfc\xa4.\x12\x8c\xcf\xb8\xca\xf5_\xe6\x16\r\xebLpT\x9b\x01\xb9}\xd1\xbbY\xf3\x85\xfb" "+\x62\x06\xec\x0f\x35>X;\xe3\xdd\xcd\xef\xf2*\xb8`\xfag\xfd\x1e\x64\xaf\x30\xcd\xd6\x83\x9bq\xb7\xc9\x86\xb6\xaf\x35\x08\xfe\xae\xba\x8c" "X\xb7\xa7\xfc\xfe\xf4\x62\xcel\x89\x03\xaa\xcb\x87\xd4\x1cW\x19:\x94jr\x62\xc5\x1d\xd4\xf4=|\x9c\xc8Ux\xb9\xa2\xdb\xbe\xdbQ\xcf" "\xd6\x94\xe6\x86\xbf_\xfb\xc7\xa1\xe6\xb3-\x32\t\xc5\x61,\x9a\xc3\x97\xf8\xf3\x39U\xeb;\x86R\x81\xb2\xda\x10\xcc\xafs)\x64\xf4\xff\x42" "\x9e\x03\x01\xd8\x9cTo=\xeb\x82\x62\x86\xe2\t\x9d\xbd\x42\x9e\x12\x98*\x98\x42\x17\xd4\xae\r\x35\xd4\xf5\xf9;\xe7\x45U\xd4I\x96]\xcb\x62\x9e\x1d\x90\x98\x0b\xab\xec\x92\xf9o\xab\xab" "\x8f\xfeh\xbf\xc6\x00\x90r)\x17\x17\\g\xa8\xb0\x92\xb8rM\xb2\xc6\x35\n^\x9a\x9a^\x0e\xb6T\x18\xb6S>X\x32\x1bi\xc4Y" "{\x14\xc1\x64'\xb7\x93\xfe\x12\xf3J\xc0\xe8\x63\x1b\x1e\xe6M\xd9\xd5L\xb7t\xc6\x80\xc9\xf5\xa6\xcc\xdc\xa5\x66M\xd7\x35J\xecIq\xda" "\x92\xf0\xdb\xee\x63\xf1\x1d,\x8b\x34\x97\x33\xba\x12\xd4\x46\x8c\xaf\x06\x86\xb9\x31M\x0cs\t\xb1T\x81\xf0\xc1\xf4\x43K\xae\x86\xe3\x9d\xa2J" "Z\x92\x86-\x9b\xa0\xa7\x1b\xbe\x82\xc3\x1e\xc3W\x42\xc5\x93\x91\xe6\x0b\xe3i\xb0;\xf1m\xd6\xb8\x19\x85O\x87$|\xe4@\xce\xe6\xa0Y" "[\xc6\xe3\x91\xab\x34\x00\x14T\xfc\x92\xdfW\xaf\x97V\xa9\x81\x1a\xbf\x06g\xb7T\xd5\x07\x92-\xaf\x91\xb5\xfcG\xe1\xab]m\xa3\x94\x34" "\x1f\x63V\xab]\xdd\xbdQ\x35m\xeb[\xdd\xc8\xb7\x19\x8e.It\x91\x0b\xd9\xf6\x1d\xd1\xab\x04\x94\n\x34=\x05\xa0<\x31\xd3\xf1\xa2\x36" "\x8a\x8ej\x9c\n-\x66\x8e\x0fUj\x1a\x9e\x1c\xac\x39\x38\xa2\x63\x11\x18\x9c\xd6\xadJ>\xfag\x07\xbe\xa8\xa8\xce\xb4\xc8\xa8\xd5\xa0\x9f<" "z\xe3%r\xbe\x97pr\xea\xd4\xca\xfa\x84o!\xfa\xb0\x8bY\xb5\xa2\xb5m\xf2\x03\xacvR\xad\xa0o\xae\xa8u\x8dkQ\xa9)\xa5" "\xe6G\xc8\xba\xb8\xa8\x19\xf9\xb3r\xeaz\xb6\xfe\xb3\xed\x32\xb8^&\x1b&\x61.\x45,\xcc\x8e\x8d;gty\x45\xb7nQ\xa7<\xa2" "\?\x15!\xe3\t\xa8\xc9\x34\x1b\x37\x1e\x8c\x15\xb2\x99\x35\x96\x8dL\xa2q\xeb\xda\xa9\x95\xd5lo_\x8d\xf9.\xd9\x39\xa9<\x31\xde\xd2u" "T\xcc\xf1(*\x8c\xcc\x9c\x18y\x9b\xf1\xe4\xd8X\x32\x8e\x9c\xf4\xc8R\x93\xcf\x8b+<+\xab\xf4\\\x81\x19\x7f~\xc7\xd7\x9b\x34\xb0W" "\xcd&\xc5\xd6\x46\xc9\x41\xd1\xc9\x95\xf4\xa8\x8a\xf6WKP\xfe\x32\xaclVrz\x35\xcc\xe4\x91\x1f.gv\xd5\xc6\xbf\x8bg'\x03\xcb" "\xab\x39pr\x18\x9c&\xb3k\x0b\x92[\x1b\x07|\x17\x63\xab\x41\x8e\x83\xfc\x39\xe3\xd0\xd5\x34\xea,\x87/\xc5\xacL\xe3\xcb/\x9a\x8d\xb2" "\xb1\xefL\xcd\xe6\x98\xe3,\xb5\xb1\x9f\x46\x88\x19\x38\xab=\xc5)$P\xeaU\xf2\xf7\x37]U\xed\xa2\x18LO\x38,'\xdb\xa6\x05\xe7" "_~\x39\xe6\xc2\x14\x42\x8c\xdf\xd6\xc6\x1c\x86\xad\xd9\x12\x81\xc2\xaa\xa6N\xae\xff\xa3\xaa\x17\x36\xb2\x66nI{\x42\x0c\x8b[\x1bGw\x15" "\x92\x1f\xdf\xd8\xbe\xce\xb1}\x84\xe3\xa8{\xa2\x81\x87\x98\t\x8e\xfd\xc0\xd1\x8c\xb7\x1a\x1f\xf1\xc9I\xda\xd7/\xfd\xfc=~>\r\xce\xfa\\" "\x8d\x8a\x9b\x37\xa5\xdf\x9f\x17W\xf1\x45'\xbe\xe5\x15\xc7\x97W\x61\xe5=\xaa\x1f\x32r\x9bl\xd0j\x1d\xef\"Yr\x1fi\xa1\xd8\xbb\x9a" "i\xa7\x0f\x96\xeb\x16\x93\x35\x8a\x19\x07\xca\x85'gN\x8e\xa5\xab\x39\xb3\xda\xde\xcc^\xf2,\x38\xcb\x84\x35\xfb\xc1\xd9\x8d\xf1\xcb\xb8&/" "nI\xa6\x07\x65puh\x66\xdd\x19\x61\xda\x86\x98\xf9\x12\xddI\x61\xda\xf3T\x93\xbe\x1ajN\x9d\x96\x63\xcc\x82\xabZ\x98\xbd\nZ\x83" "\xe4\xc8\xae\xae`\xfb\xdc\x1eX\xb3\xceL\x0e\xe7\xa6j\x61\x97\xf1\x38Ow\x83\x99\xeeV\xee\x39\xa5\x18\xfa]\x37\xa9*\xf6\xd7\xaa\x9d\xad" "j\x17Y-\x91\x35\xdb^\xb3\xfd\xea'\xe4k\x91\x64z\x9f\xd1M\x07\xd4\xc0\xe9'\xdf\xe9\x8eM\xbb/\xb9\xa3\xbb\x8c}\xe4\x33\xeb\xaf" "V\xfe\xcf\x41&\xc8\xe9\x87\xa7\xc6\xe2\xc8\x37\xcb\x06\xfb.U\x45\x99\x61R\xccR\xb5\xedm\xf1\x1b\x9a\xed\xef\x38n%\xa7\x37\xc1\xe5\xd8" "\xd4\x17\x17\xd5u\x33]\xa4L\x36\xbc_\x39\xc3\xa6\xa7xQ\xf6\xf6\xfd\x01~\xd8v,y)\x9c\xfd\x1d\x80u\x8a\x99\x34\x07\x13\x7f\xdb" "X\x34L\x88\x85\x01\x85[;\xf9\xf6{\xff\xcewG\xce\xb0\xd2\x63t\xbc\xdaLJx]\x82\x1a\x03K\xa2.\xb2\xc6k\?_x\xc1" "K\n\xef\x1b\x8c\x11#\xe6\xc3\rG\x34\xd5,\x1b\x9f\x9d\x41\xab\x12\x64s\x1c\n\xd6\r]\xe3\x92,O\x9c~\xb3\x61\x45*\xce\x39\xed" "\x02(\x65}\x43|hg\xaf^\x1bo\x8c[\xe3\xce\xc9)\x64\x30\xb9x\x0cL\xbfk\x7f\xc2\x42\xeb\xd0S\x33i^\xe9\x05\xf8-\xbe" "Lt\xad\xd2\x03\xa6\x97\xb0\xf6\xeeL\x7fQ/\x18\xed`\xaf|\x07\\U\x43\x88\xd5K\x41]\xefl\xd6N/\xa4\x99\xdb\x37\xd3\xb2~" "\xc6\x65v\x84m{\rm{\x9e\x9d\xb9\xd3\x93\x99\x98\xfe\x01\x8bi\x1d\xd6\x33y\x62\xfb\xef\xed#M\x95\xf4\x1c\x00\x83\x8b\xc7\xf0\xaa\x91" "*\xc9\x31\x46\x9d}\x65)I\xd5\xfdIjV\xa6\xd6\x83\x05\xf5\xdd\xb6!\x04(\x0f\xa2\r\x15\xe6\x1b\x1a\xe4\xff.\x93\xbc.\x39\x8a\xc8" "\xcd\xac\x9a\xa9)\x85\x83\x9bq\xe5\x35\x35\xb7w\xc1\xa9\x06\xe3I\x43\x9a\x61sr\x62\xe7\x99\xd9\xc3\x9c\x33\x03\x0b\xbf,i-\xeaN\xce" "\xf4t\x93\x91\x04U\x31gQ\xa7\xb8\xe2'\xfd\xc8UM\x9d\xbf\xcb\x99\x9b\x9e\x8d\xaa\x99\xbfJ\xcd\x8f\xbe\x9b\xf4\xde\x84\xe9\x8f\\\xcd\xc1" "\x8d\x9b\\\xa0T\xcc\xc3\x91\x93\x13\x14\xdc\xf4\xd4%\x8a\xf1Nh\x62r=L.\t'\xe6\xd1\xa1S\x97\x04\x7f\x61\x9a\x8a\xb2-\xf2\xd4" "\x0e\xcaZ\xeb\x8c\xb3l@NY\x85\xc9\x99\xdc\xba\xc0\x8am\xba\x18;=\x61\x44W\xb9\xf0\x91/\x36*N\xe3\xf3\x19\xa7\x8e\x89z\xb6" "\x1d\xea\x97\xc6\xb7\xf4\x37\xf5\xb9\x8e>\x1e\x9d\x9b\xe2\xeb\x8c^\x87\xc1\xf5\x99\x35\xfbgQ\xe3\xd4\xe9\x45\\\xd4\xb0\xc7\xd4\xb8\x33\xda\x9bi" "\xd8\x43\x65mQh\xcf\xb0\xcf\xef,}\xbc\x83\x1a\x39\\:\xbd\x38\x13\xd3\xd3\x9a\x9a]\xfb\xc1\xdb\x85\x91i/\xfa\xb0\x97\xcf^\x8fY" "\xb4\xfe\x34\xda\x89\x30=\x43\xb8\x61\x8e\xc3\x15\x63\xa4\xc5t|\xe3\xdf\x0f\xe7\xef\x08O\nN/\xd4\xd5l\x94=\x0b\x12\xe5\xa7Ss\xfd" "\xcd\xa5\xc7\xa0<\x91\xc4\xa7\xfc\xbc\xe3\x33>r\xad\x8d\x1c}\xa5\x66\x81\x95\x86\xf8\xa2h|w\x06\xf9\x96\xfa*g&\xe9\x06K\xa2\x62" "\x86\x39\x9b\x1a\n\x15\x1f\xe7\xdcLn\xf9\xf8\xe2\xc2\x43|\xfb\x41\xf3\xd6Nq\x7f\xee\x8c'\xf7\x8c\xe5#\xaa\xccO\xc0\?R\xbflO" "\xa1r@\xffv\x92;\xa6\xea\xa4\xc8O\xd0\xcb \xac\xe7\xc6_'\x8fN\xde\x61\xf2|o\x64\x66\x65]\x61\x33.\xc0\x0ezq\x92|" "\x8cS\xf3\xe7\xce\xe9_\x92\x98\xd6 \x9eY\xaf\xc9,])\x87&\x93\xed\xc2i_\xeeZ\xfe)\x37\\\xee\xb1\xb6\t\xcb_\xf6\x39m" "\xa4\xac\xb1\x62g\xe3\x9b\xecW\x1b+\x83\x94\xbe\x8b\xbd\xb4\r\x1d\xb9\x85S\xdc\xd2\xc6\x1e\xd4&]\xc9Q\xcc\xdb\x86\xd3\x0f\x9c\xdcU\x39" "\x89M\xcc\xfb\x8c\x99[\xbb\xa8\xad\x9dvg\xfd\x8e;\xcbw\x95\xd1\xba@W|Uk\x92y\x8d\xd2\xc6]w\x0c\x8f^\xdbk<\xaa" "\x19\xad\x7f\xf4\x63=\xebs\x92\x34\xb6I+\x9e\xeb\x64\x8a\x62\x99\xbe\xb3.\x80\x9d\x8d$(\xad\x17\x63g\x0fxg\xf5\xcd\x9d\x15\x01;" "\xab\xb1\xed\x38\x1bZ\xe8\xfb\xbf\xdb~,\xdfwV\xce\xec\xec\xbb\xd8Y\xfb`g\xed\x83\x9d\x15\xb8;+\x45mv\x8a\x30-@vV" "&(\xd3\xbf\xcexT+&v\xe1\xe7\t\xc9R@i\x35\x41\x35\xd3\x63\x8b\x89\x12\x1a\xca\xbe\xab\x9d\x35!\x94V\x44\xaai\x39\x81\x9a" "\xd1\xe9\x91\xd5t\xa0\xd2r\\\x95},;{\xf1;\x7f\x8fZ\"\x15\xbf\x12\xad\xce\xac\xd2\rn\xd6\xf9\x88\xac\xcd\xb2\x8b\xfav\xb8w" "\xbe]\xcbPv\\\x8c[i\x1a\xb3\xae\x85\xa5\x02i\xe7\xe6\xa4\xef\xda\x8e~\xfb\x42\x36Vw\x1c\t\xaa[\xfd\xbd\x9e\x61\x90\xd2z&" "\xc8\x1e\x91g'\x41\xeb\x89\xf1\x15\x45\xa1n,\xc4\xe7S\xb7\x18=\x1e\r\xba\x9e\xe1RH\x42\x8cl\xd5\x33\xec\xb0\xa8g\x98\x0b\xd5\x35" "\x8c\x0bk\xed\xf5\x43\xfa\xbb\xd4\x0fY\xf7\x17\"\x91\x0b\xb1\x9c\xb6\x86\xcb:!y\xaa\x43\x66k\x42\xd4\xc3\x85;\x32\xbc\xc8\xc5_\xe7\x34" "Q\xcf\x13\"\xb0\xa0\xf0\x93\x87\x88\x8e\xdeHx\x1c\t\xf1\xfc\x85(\xad\x84\xad;\xb2;I\x13\x9f(,\xc8.\xc4\x82\xec\x42\x64\x85\xf5" "\x43\xc6 \xa9\x1f\xea,G;\x10\xeb\xff\xf5K~*\xf5K\xc6\xde\x02\x39\xf0#&\x1a-\xc2\xda\x8a]-\x62\xa2}\"\xc4\xd7P\xb7" "p\x85\xc2\xca\x10\xb4\xa3_\x46XM\x08\xe4\x87R\xbf\x8c'\xf9\x30_\xe0\n\xa6\xa2P\x93\xad[\xf4\?!\x96\x06\x16\xc2\t\x05\x64\x9f" "\xaf\x9a-\x90\xeb\xe6\tQ\x07\x12\xa2\xebU\x39%\xe1\x8f-\xc4\x64o\x61\xabk)$oi@\x19=\x8ci\xfe\xd8\xaf\xe1\x8f]\xcf" "\xdb\x9d\xe4\x19II\x88\xa9<\x42\xf8v\x08\x99\x9c\xf2\xacz\x0bk<$k\xb1\xc2\x11\xcf.\xcd\xfb\xe0\xec\x94\x85\x9f(\xac\x88^\xbf" "\xb1k\xbe\xe5<\x91z\x91\xf1\xfd\x84\xab\xb7h}\xc4\x95u\x45\xed\xc6Nz\xf4\xc2\x64\x9fQ\xbdh\xc7(\x06\xa7u\xa9\x00\xc7\x9f\x95" "T\xbd\\\xb3r+\xea\xac\x65\xfcr\xd2\xd3\x0e\xa6\xdd\xa3\x9a\xf6p\x61\xeeN\xd9\xe1'\n\xb5\x46!\xba\xac\x85\xf7'\x1aH\x14\x1e\xbd" "\xa2\x10\\\xa4^\xf4\xc3\x84\x17\x35\xf2\xc5\xf4\xeb\r\x16\xf3y\xa5\x62\x12)\x86\xdf\xefq\xe7\x88y^\xbd\x18\x35x\x06V\x92@V\xb9" "`\x32;\xa2YY\xa5\x66\xf5z\xef\x0f\xcc\xf1i>\?\xba\xa9\xf7\xf3\xff\xd4\xd4\xa8\xd0\xff\x37\xban\xe8\t\x44\xc7\xe3\xde\xffIn\xd7" "\x62q\xcf\xfe\x97\x0e\x12\xf0;\x84Z\xad\xfcQ\xab\xfayr\xd3\x1f\x9b\x9a\x85|\xb0*\xda\xc7\x8d\r\x7f\xbf\xe0\xd2Z\x34\xddK\x9bJ" "\xda\x18\x9b\x8a+\x9d\x08\xf3\xf2\xa7\x10\xc8\x85\xe6y\x9bqt\xa9|m\x08(\x0e\x32\xb9\xc9\xd5\x64\xa1\xfc\xe5\xa9)\x85\x9e\?\x9b\xfe\xd7" "\xde>\xba\x80@\xcd~\xff\x91\x33n\xe3\x8b\x0e'\x1cPu\x8e\x82v{O\xfd\xfb\xb7\xb8|\xe3*\xb9\xed\xb3\x87\x96\xean\x11\x14>" "RU-\xfb\x9e\xba\x30\xef\xff\xb3\xa7.o\x81\xaf\xc3\x1e\xbf\xbd\x13{)\xfe\xa4\xe3\t>\x9b\"\x97\xb7\x97\xdc\x02\xdd>u\xeb\x06\x12" "\x32\x0f\x12NH\x66@\x0f\xec\x07\xa9\xdbR\xb3i.\xf3\xc0\xe2W\xc8\xfc\xd4V^\x15\x32\x63R\xfa\xae\xac\x97\x83,\xfc\xd5| W" "\r\xcb\xdb\x1f\x38KH\x88\x1e\xc9\xfa\x03\xeb}\x42\x8c\x1e\xd7KQ\x13\x7f\xb7u\x38\xebO\\\xf0\r\xd4\xff\xb1z\x9b\x10\xde\"\xca)" "\xc9\x64\xf3\x64\x19\xd4\x13\xc3\xec\xfd\xed\xaf+Z\x36\xbf\xd8\x11#\nK\x89\x0bQ>\xd7\x9f\xec\xa6\x9e\xb8\x0c\x38\xa8.\x30M\xfe\x36z" "\xbe%y\xcbO\xf1\x01\xae\xb8\xca\xde\xfdz\xcd\xae\xb4\x11\xa1\xb7\xbb\xde\x34\xdd\xd6\x31\xae\xfa\xea\xf7'Ou\x9d\x0f\xa4\x12\x8f\xf5\x37\x45" "-\xa5\x95\x31\xe3\x98_\xbd\xcd\xba\r\xa8\x83l\x98\xedZo\xdb\xf9\xdar\x10\xa7\x1e\x04\xa3]\xae\xfcx\xa6\x30\xc0G\xb5\xce%OY" "W\xe1\"\xbb\xb7\xa7\x46O\x31\xa5K\x17\xb4s\x0c\xf0M\x35>\xdbS\xb2\xb3\x1fS\xa8y\xcbu>U\xc3\x0bS]{\x0b\xb6XJ" "\xbdky|\x97\x8d\x9fz\x97\xfd\xdc\xde`\xac\x8f\xa2\xcc\xc2I\x1f\x31\x31y\xb3\xa3\xe4\xf6\x8c\xe4O\xa6\xc1\xe9\x9a\x41\x46\xc4\xac\xa4\xd4" "\x89Y\xbe\xd5H\x9fi\x30\xddT\x07\xe7\x1a\xeb\xb0\xf5\xce\x8a\xaf(\x0c\\*\x8b\xc6W\xa3\xff\xbdk\x05\xb6\x9a\x96\x35\xcc\xa5\xd0\xe4\xec" "\x43\x31\x37wV\xe7\x99\xff\xc2wT\x9a\xbf\x88\xa6\x07\x86\x0f\xfd`\xca\x33\x04'S\xa7\xd4h\xe2\\\xc1U|\x36\xfd\x33\x97\x34\x11\x17" "\x1c\xe4\x18\xa9\x98\xa8\xb1\x83:}\x05!,U\xb5\xc9\xbb;\xf2\xf9\xd9\x19\x96\xba\x66n\xe4\xa6\x18\x34\x42\x14\?<\x65\x90\xb5x\xb0T" "\xe7=\xfbt\xe7V\xc4+S\xd7\x14\xaa\xf3g\x37\x39\xa6L\xb3TO\x32\xa5T\xcd\xd7\xf4\t\x81\xf2\x07\x66u\xbc\xb9\x65,\xca\xa4\xf9" "\x62u\nQ\xf6\xc0\x30\xfe\x8a\xfe\x83\x38\x7fK\x13\xfd\x15`\x1a\x8d\x19*\xc8\xbf\xef\xa9\xf0\xbe\xc9\xb6\x0fT\xf2\xb6N\xafz\x62O\x1f" "\r\x8d\xfa\xdc*\x8bsN\x1c\x13\xae\xca$+,s+}\x85<\?\x17\xdf\x05\xed[\x9b\x87y>\x42\xab\xcb\xcc\xc3\xfb*i\x0f\\" "\xa8#V\xf5\x81+\xf9\x36\xe8o#\xaa\xcc\xf7\xc4\x99\xef\x42\xac\xa3\x0c\x32\xf4\x89\x98h\x9c\x08\?\xed\x00_\xf7Nu\xf7\xc4\x44gQ" "+\xde\x07#\\\xd5\xe7\\\x36\x41xt\xe8\xdc\xbb\x08Q\\\xb8V\xcc\x1cO\x13]\xcf\xa3u\x35\xf8\xe9P\xddu\x82\xc9\xad\xe5\xd9\xaa" "\x92\xc6\x1d\x43v\x8a*\xea*\xf5l\xb1\xa9\xfa`\xd4\x18\x31\x9f\x8e\x8d\x63\x12\x33\x97\x84\x08|\x05\xca\x89\xd3+\x62\xdd\x44\x19\x16'\x1c" "\\\x83J\xaf\xa8Q\xd2\x1b\xba\xe1\x87\x18\r\x97\xea\x0b\x89\x05\x65\xa1\x82\xf5*\xba\xb3\x03\xaf\xec\xaaW\x03\x8e\xdf\x89\xb9\xde\x38\xa3\xf2\xd6" "\xaa\x17s\x8es\n\x37\xd7{\x87\x8e\x8fN\x9c\xbf\x8bn\x32:t%\x8f\xc0*/sN\x63\x15\xda\x17\x19_\xf1\xe5s\xc2*\x18\x9e" "\xd9\xa6g\xdb\xe5\xb5\xe9\xe4,\x42\x31\x9b\x87\xce\xf0\xa6\x1f\xca\x63\x65\xc6\xa6\x1bR\xb3{\xac)\x9bUWQX\x8b\xa1r\xf2\x8f\xf2\xbf" "\xd9\tX\x07\x9c\xa7\x01%\xea\xb6\xca\x89\x92\x8f\x35\x9eV\xacx\x9b\x33Z(\x18\x64\xf3Q\x66k\xaa\xed\xdcK'\\\xd5X\x08\x37S" "\xe1\x86\x0f:\x39\xad\x84\x1f\xb9\xf8\xac\xf6\x8f\xe2\xbe\xc9-\xd3+\x1dZ@\xc9\x35\x92\xdb\x92+\x9d\x95\xcb\xe6\x8f+\xbb;S\x1b~i" "\xec\x15\x02\x35\x62x\x96\xd7G/#!\x62\x04\x83\xba\xfc\xde\x8eO \x61\xd3PW\x31\xf1L\x98\x81 \x95\xb8\x9co-\x42\xb1\x34m" "\xfd;\xb8|\x08\xa7\r\x37\xd9\x80\xaf\x7f\xa7\xfd/\x62\xae\x8f\x93\xbbL\x84\x65\xed\xeb\x0bk<-\xac\x88XXKi\x41\x7ft!\xb3" "\xc9\x45\xd0\x9a\x90\xcc\x42\x16\xe1y\x83\x64\x9b\x65\x11\x62%\x9a\xfa\xc2>\x84\x85}\x1e\x0b\xfb \x16\x9c\xfdS_X\x9bQ\x19\xe4\x1f\x92" ";\xfe*i\x8f\xb8\xec\xb5\x94\xe2R\x85\xe8\x36\xb9\xb2\x9c(\x1d\x46\xeb\x84\x1fH\x45\xab\xf0\xec\xec\xefok\x8eg\xd6\xb7\xd6\x90\xdcZ" "S\xd9\xfa\x8b^\xb3\xfa$p\x17\x62\xa2@x\xcd\xa6\xfd[\x62\xf6_\xd9i%\xe6G\xd9\xb8\x04\xd3\xaem\x31m\xefT\xa3Q\xfa\x9a" "\x65\x17\x18\xc8.\x30\x31\xedh\xec\x02\x03\xfd\xb4\x62\xf2\xc5\x8b\x39O\xc9\xeb}\xcd&\xd9k\xe3\xc2\x19Nk\xc9]\xd5\x15\xdf\x9c\x9b\xe9" "\xc8\x83oH\xfbm\xb0!\xb9\xad\xa7\xe6\x1d\xaf\x8c=n\xa0\xdf\x0f\x1f\xbc\xb2jWt\xca\xae\x17\xa9\xe4`\x1dr!\xde\xe0\xeb\x35\xeb" "\x99\xaf\xf7\x0c\x19\xf4zOGo\x30\x18u\xd8q\x02\xc5\xb6\x06\xcd\xbd\xc6\xc7\xeb=\x9d\xb0\x41\xf5o\xc4<\xfcT!\xb8\xfd\xeb=\x9b" "\x36\xe0\xef:K\x8f\x1d\xa8h>\x91\x7f\xaaJ\x0cH\xf5Z\x8a\x31\x03\xe5\xb5,\xff\x94O\xac\x35\x80\xec\x92\x13\x13u\xfa\xd7*\x87\x33" "\xc0t)\x1e\xa8\xa8\xf8h\xaf\xbb\xca\x81T\x30\xbe\xc0\x99\xaa\xe1\x14g\xaa\x46G\x35g\xf0\xd3\x0e\x7f\x86\x7fj\xc9\xb9\x1eP\xe1Z\xea" "\xd5OT|WUK\x30\xd5\xa8\xf1N\x36y\x92\xf8\x88\xb4\x97\xad\xdc\xbb\x94\xbf\x97]\xc5\xab,\xff\x99\xf5\?s\x9b\x9aw\x9f\x7f\xe6" "\x17\xcd\xfb\x01;\x02_\x87\xbf\xeb\xa6\xfc\xff\xf7\xe3\xa1\xe4X$\x1f\x8a\xf2\xef+\x18\xa6\x19\x07M\x0c+\xc0\x64\x1e\x42\x93w\x43s\xe6" "\x66z\xfcK\xfb\xa0\xcd\xcc\xa6\x66\xf1\x92&\xfa\x06^\x87\xe1tj\xf7o\xa6\xdd\xb4\xa9$\xcb+\x62X\x1a\x61\xf3\xdb\xeeth\x8fQ" "I\xcf\x02\x9ah`\x89\x89V\xea\xebP\x1e\x32\xfd:\xc4\xbc\xe8\x90\x88%\x87\xc7\xe1\xfc]=\xf9\xe5\xa6\xca\xcf\xb3wM\x7f/\x62\xff" "Y\xc2|\xfd\x33\xb7\xa9\xf9w\xc8\x04n\x1a\x66V\xff\xcc\xf4\x14\xfe\\\xd4\xbc\xb7\x9f\x9d\x9c\x92\x9e\x45\x8b\x89\x1e\x81\xd7\x37\x66\xd1\xc2u" "\xc9\xf8\xe5T\xe7\x39\x34H\x44\xa1\x33\xee\xf5\x8dK\x0e\t=\x14\xe2\xab\xcd\xee\x02\x39\xf7^\xcc\xfc\xab\xb1K\x16l\x97*\xcf\xc1J+" "\xc8\xca&L\xfbX\xdf\x18\xf9\x43\x88\x45\xb2\x41\x36\xb2i\xc2\xddU\xcd\x11\xb9\xb4+\x42\xc5\x06\x64!\xaf\xa6\x9d\xfe\x87\x17\xcf\x8a\x37\x18" "\xde\x9c\x87\xf3\xad+\x9d\xbc\x86.$Q\x08\x17\xa2\xe4\x19\xc3\x8b\x07\xe3w<\xaf\x9a\xf9\x43^\x36\x8d-\xe3\x8a\xbc\xea\x91\xbe,\xa2\x9a" "\x37\xe4\xa3\x1d\xb5R\x32\xda\xae\x08\x63%\x44\x30\x41\x61\xe3\x44\xfe\xd1\x44\xd8@\x61\xff\x95\x95\x45\x98\xf6y\xbd\xd1\x41O\x88Q`\xe5\x9c" "|\xcf\x39\xfd\t\xfb\xfdr\xa4Sx\xc5]t\xed\x0c\x66\xa9o\xac\x95*y\"v\x63)m\x65h\x35y\x02\xce\x45\x05\xb5\xef\xd2\x7f" "\xe0q\x42\xc4\xf4\xb1<\x31\xb1\xae\x84\xb0Qs\xb2\x13M\xcd\xa9\x33\xdd\xab\x99I\xcf\xfb\xc6\xbb\x62\xaf\xb1p\xb5p\xb2\x45,\xe6\xfa\xce" "\x88\x8f\xe9-\x46\x34\x65\xe1\x91\x11]\xfa\xa0}\xa4\x66\xda\xd7\xf7\x16g\x99\x8e\xe8\xaa#\xec\x30\xd5\x31\x8e\xbep\x32\x92\xcb\x61\x94\x42U" "\xbc}N\xd4\x16\xb2\x98SJ\x45\x8d!\xff^\xdft\xf9\xb9y\xd7L&\x96\xe4\xb0#\xffh\x96\x98\x08\xd8Q#|\xfdr\xc6\xdf\x37" "\xac\x37\x8a\xb2\xf7\x9f\xb4\xed\x00}^\x1f\xdb\xf3\xa0\x15Gjr\x18\xefu$y\xb5r\xfc\xbb\xbc\"w\xa6Q\xeb\x03\x35\x36\xd4\x03\xae" "s\x1c\x9c\xee\x9c\xea%\x8f)\xb9\xa2\x10\xbf\x11\xb4/\x06\xe6\xde\xcf\x10 Z\xf9\xe4\xdc\xff\xf9\xf8)\xfd\x99\x98\xf7g\\\x31\x43\xd5\x8b" "\x33\xdd\x01\xbdL\x42\x66/\x63\xfb>\xc6\xba<\xbbN\x18\xc3\xb7\x38\xe6o\xfc\xe7\x9c\x37\xfa:\xe6\x8cG!\xea\x88 \x9b\xccj\x9e\x83" "I\xf5%|\xbc\xb3\xc3|\xdb\xfb\xff\xf9+|~\xa2\xabut{\x44\x93\x15\x95\x1f\xdf\xeb/\xaf\xfe\xb1\x9a\xce\x0f\x33\xe1\xc6i\x88P" "\x82\x8d\x1c\x83\x30\x35r\xf4&i\\r\xc6@\xe3R\xfe\x39\x03I\xa9\x98\xf7\x99*\xf4I\x41\x61\x66\xd1jOq.\xa9+\xae\xaf\xa8" "\ng\xc9\xf3\x36\x1ay\xd6K@\x9di\xb2}\x81\x62\xbe\x05\xca\xff\x1c\x15i\x98\xc7\xb2\x10\x83\x35\xb2\xfd\xe8\xc8\x7f\xee\xbbp\xcc\n\xfc" "]_\xd1\x45[T\xb5\xc1|\xa3\x61\x11\x18\x1aW\xc1\xe1\x1b\x89\xce\x18\x90\xed\x18\x31\x1f\xe7\xbe\x37\xb3x\x90\xad(\x31\x9b\xf6\x83\xe9\x82" "|\xbfq\xb2\xb2\nS}\x92\xba\x13\xbb\xe0+\xf6\x35\x80\\\xf2U\xcc\xdd\x91\x34\xfd\xd8\x00\x95v\xf0\x19\xcf\xc7\x9e\x04!\xfa\x9a\x85\x18" "\xef\x11V\x0b\x1c\x14\x13s\xd4v\xfa%\xb1\xc2\n\x32)\xd2\xbc\x9fs\xb8\x42\x15\xaf#\xba\xfe\xf9]\xbeGv\x12\x66s\x42T\xc3@" "v\xbe\xc3\xe4\xc8\x91\x98r'\xf0\x0b\x11s\xb5p\x32\xc7k\\\xc5\x87\x39'G\xeb\xc4\x44SW\xb8\xd2\xba\x06\?\xf0\xc6Ur\xbb&" ";\x0f\xd1\xac\xc2\x66\xa5\xa8\x41O\xf6\x31u\xf3\x0bW\xb4\xc6\r\xdd\x16\x85\x97[\x12\xb3#\x85(\x01\x41\xbb\xf5\x1bN\xf0m\xdcph" "_\xf8Rr\xb2\x9a\xdb\xb8\x89\nw$o\xf3\x86\xfe$\x8d\x1b\x66\x89\x8d\x9b\xe4\x8egM\x1e\xe7$\x16\x0eh\xdc\xb1\x8b\xbb\xe1/\xbe" "\x14\x62\x06\x86\x10YW\xa3\x14\x61\n\x96\xf2\x91l\x94\xe2l\xd1\xcc\x9a\x33\xdd{\xf4\rrU\x30!\xe2Y\x35J\x0c\xba\xd0xL[" "\xa7\x62\xc2\xcf\xa4\xf1\x98~\xd9\x30Y\xa9\x32s\x9b\x9a\xa8\xd2\x36\x1e-\t<&\xd9[\xe3\xc2\xc9\xef^\xcc\xdb\x1e\x87\xac\x1b\xd6\x35-" "\x44\xed\xa3Q\xb3_\xd7\xe4\x96\x38\x88\xdc\xe8r\t\xf2\x46\x97\xcd\x33\x90\x0em\x8dn\xf8z\x44\xbeu\x39\xb4.&\nj\x30\xbe\xc8\xd3" "\xf5]\xd4\xc7\x92\x95v\x31\xe1j\xdf\x30\x9f\x33Pg\x89\xf9\x8e\x1b\xbc\x82\xae\xa5L\xe1\x8a\xbc\xf9\"\xd1\x11\x0f\xaakm\x31O\xc5l" "\xa0\xcb\xd2L\xc8\xe7\xa6\x64\x65\xb7\xd1M\x99\xcf\x39\x83\xce\x61|\xf9I\x85.\x1cP\xea\x8f~/\x31\xaa\xa1\xc2\x97\x15\x83\xaa\x89\xf9z" "\xe0\xfc],\xd9\x33\xd4\xd0\xde\xe6\xe4G\xfb\x17\xe9%\xa6\x1b\xceI\xe6\x31S\xf6\x13\x34\xa6\x1cQmL\xd9\x99\xdb\xf8\xeb\xbc\x16\xf3\xcc" "\xe8\xa1\xe4\xc4\x44o\x82\x10=\xa4\x8di\xba+\xcaG\x90\xa3:\x62\"\xc2u\x63\xca\x8eH_\xdd\x0bL\x0e\xea,\x8e\x44\xf1\xe9M\x43" "T;\xa5j\xd2\x98:Y<\x8bi\xe7\x12\xd2/\x19\xa6_Q\xb4\xe3u\x33\x42\x87\xb0\x9b\x31\xf2\xd7~\x14N\xa9S\"yM\x93[" "\xab\xae\x89Y\xe4OXKh\xbc\xb3\x9a-,\x0cI&\x33\xa5\xfa\xc2\xa2\x61\xa5jj\\\x91\xb5\x94\xba\xa4\xebk[\xd7q\xc5\x42\x91" "\xd8\xb6g\xee\xff\x01Ui!:H\x41\xfb$\xde-\xb7T\xfa\x05\xa9i\xd7\xa2\xe6\xf4\x31\x41\xc8\t*\xe6\xefjZ\"Qs\xefz" "\x43T)\x84\xfc\x1c\x94\xe1\xd2\x8e;S\x87)\xba\x1d\x88\x9a\x97H\x84\xa4l\xbcG'\x45\x92_\xdf{\x9c\xe5\x8d\xb2\xf3[\x38\xb9\xe7" "\xe0\x83\x98\xa8\xa3\x35\xde\xffN\xfb\xf1\x97Q\xcc\x82\xd3\x02\x97wo\x98\xb3\x37\xc8\x36+\xcctG\x31_\xb3n\xb2\xfa\xd8P\x37n{" "\x63\x33\xd6\xd4\x85\xd3\x86\xba{^\x9f\xf9/\xed\xe6\x94\xff\xf1\x87w\xbc\xfeYt\xcc\x83\xb1\xa5\xa9\xdc\x92hn\x82\xac\x83\x34\x66:\xb7" "\x13\xce\xe4\x8d\x19{x\x94S{\xcdj\x86\xd3\x89\x99\x0b\xa7\xbd\x85\x19\xba\x80\x8a\x7f\x66\xc3rHWh\x42\x42\xd9\xeb\x9e\xa5\xf5\x64\x33" "\xeb\x7f\xe6\x36\x35\xff~\xc6\xe6\xa6\x98v\xb1\\\x41\x19L\x9dx\x44=\x15\xd9\x85-&\xe6\x1d\x37\xe6\xf6\xdd\xd8\x10K\xc3k\x13[\x06" "\xfb\x15\x32\x39o\x83\xea\x39\xe9\x7f\x1f]\xdb\x37k\xa6\x15\x61\xdb\x00\xfes\x8dm\xd8\x45\x61\xb1\xb5\"g\x1b\xd5\x9b$:\x10\x85\xcd\xb2" "\x1f\x8b\x63\xc0\xc2\xf7\x99\xd3\xca\xecm\xbc\xe9\x92\xf8\\\xe5\x8b__\x30Q\x89\x89\x9a\xab|\xf9\x07[\x46\x00\x15\x33SH\xcd\xec{x" "\x39\xd9\x33\xa5\xda\x42\xb7\xc6\xa6\xad\x0f\x06\xd2\xb3\x07&\xdb\xae\x30\x99\x03\xa8\xc9S\x31y\x82\xac\x39\x88\x99\xbf\x0f_\xcc\x81H\x95\xfd\xd6" "[\"\x62\xfa\x8e\xb8\x13\x30\xf8Y\xf1\x03\x17\x85\xcaZ\xd3<\x91\x84\xa3\x8e\x93\x83G\x62\"\x96\x1b\xc8Q\x96\xa6y\xd2\t\x17\x1dg\xe8" "\x87\xff\x39\x0c\xe0\x89\xde\xb4\x05\xc1\x9a\x19\xe6\x18`\xb0\xb9g\xa0.W\xec\xc7\x87\x8a\xee\xbei\x1e\xbe\x85\x9f\x63\x9a\xc7\x35\x36\x1d\xdc\xdc" "\xbbr\xd9\xe0\x0f-\xbc\xea\x46\xf6\xd0\xd2\xc6\x86\x98O\xbc\xa5\xb0Z\x33\xda./|\xa8\xfcX\x85\xd3\"\x63G\x8b\x39\xb3]P\xf2\n" "\?\x33N\x7f\xcb\x34\x83\xc2\r\xd7\x0f\xd3\r\xbcV\xd6\x07\x84\x88\x88,\xbc\xe6\xddGw|\x8c\xbe\xbfzJ\xdb\x43\xd6\xa5)\xed\xb1\x89" "\xe9\xb7\x10=\x94\x9c\xfe\xee\x98v\xc1\xf4\x34\xcf\x8f\xd2\x1e\xd4qG\xdf\xa7\xd6\x37\xf2\x89\xb2>\x05\xa6'\xf1\x33 \x93i\x66\xfc\xf9\xb1" "\xd5!\x44\xd4&\xe1\x39\x13\xac\xa7pVk\x85\x1b\xd3\x1b>Y\xae\xc0\xae|rr>}\xd3\x96!\x13\xde\x9e\x19m\xd7[>Y\x36" "\xa4@vG\x89\x89>\x9a\x66\x96K\x11\x37\xb3v\xd3\xd9\x88I\x33\x1bu[ \x63\xd2\x35\xcf\xe5\x9fS*#\xac\x97Pm\xbe\x62~" "\x07\xe7\xbeU\x88\x15\xa3^\xf7T\xb4\xcd\xb8\xd2.\x63L\x97h^\xd0\x31\x1f\x64\x8d\x01&\x9b\x95\xcd\x8b\xf8[\x33\x8d\xe6\x35\xe3l\x36" "\xaf\xed\x61+u\xbc\xedo+\xeb}\xcd{\xfb\xae\x94R\x89\n\x31\x0b\x1e\x8a\xe1(\xc5\xfc\xe6\x0e\x9c\x9b\xda\xbcg/\x39(\r\x9a\xe0" "\x91\x7f\x65,\xc1\xf8\x9e\xaa\xaf\xc8'+\xa9\xab\xd5\x39y\x95\xfb]\xb7\x93\xd7\xb5)\x63\xc1\xf6*lH\x8c\x89\t\x8b]\x92\x0fJ" "\xc9&\x9a\x9b~O,\x37@z\xf4\x8a\xe9\x7f\xc2\xc8=\xc8\x31\x17\x31\x97v\xc1+\xfb\xd5\xb6\xe4O\x84\x93\x89\x9b=\xcb\xd5zl\x86" "\x82\xf6]\xf5\x38\xec-\xbc\x98I=\x32\xc4j]\xa2P\xe1\x04Y\xd9\x85\x99\x1e&o\xcbw\x88y\x65\x87)\xe4\xe2]&\xa9\xf6\xa9" "P#\x05Y\xbbu\x97\x34\xf7GSg\xb4O\xb9\n\xfb\xe4z\x9c\r,\x9c_\xf8\x1dr\x9c[\x88\xd5&\x84G<\xa6\x65*=K" "|\xe6\xbc\xa6\xdcj$\x87'\xfb\xab\xbd\x45LL\x30oO\xaa\x8fR\xeaQ*\x1b\xd0\x8d\x02\xa6\x9d+P\xec\x0cT\xb3h|P\x0f" ">\xcc\x0cP\x35wj\xbf\xc6\xd9\x65\xaa\xfe^i\xaa\xfc\xd5\xd1\x9f\x07\xdcK\x34:\x86\xe7\xbe>\xa2P\xd0\x83\xfe\xa0\xd4)o\x39\x92" "\x7fT\x98\x0c\x01jvT\x7f\xa2\xb2\x97)\xa4\xc3\x17\xcc\xf4\x08k\xbb\xad\x35\xdf\xa4\xc5\xa0j~\x9b*\x91g\x97\x96\x01\xf4\xe2\x02\x1f" "\x62\xfc\xc4\x64\x14O\xbfY\x07\x14\xf3\xfd$\xce\xf2~ty)\x96\x41=\xbf:\xabq\xf4\xd8K#|\xfd\x8aOg\xf1\xe2\x93\n\x61" "\xb7\x9bo\xd1\x10{\x9b\xa3K\xf3\xdb\xbe\xcfo\xab\x31\xfc\x8d\xde\xc2\x64\x8d\xae\xf9\xcd\x00\xd7J\x1b\x98\xa4\xc9;\xffN\x37\x31\x83\xfeN" "]\xadi\xfa^\xbc\xe7\xef\xf8\xb0M\xa2\xbbUX\xc6\xf5~\xb3n\n\xc3\x06`\x9a\xd6\x0f\xd7\xfc\x1b=v\xd3\xd2\x90*+|\xbe\xd3" "\n\xa8\x99\xf5\xd4\x44\xad\xd3\x87p\x9a+\xbb\xd5\x15G\xc2\xc0\xa0\xbc\x0e\x8a\x37\xae\xd8P\x80\x19\x1f\xa3\xec_\xf1\x42Z\x19N\xfbS\xf6" "\x41\xb6@\xc0\xf0\xb1\xc6v\xbd(L%\x02\x39\xf5\xa2\x65\xa5m\xcb\x9c\x8b[\x15\xe3\x8b\xb1\xc5\x0c\x04\x64\x86\xddZ\x31+mi\x82%" "\x7fJ$\x1c\xa0@\x1d\x61\x83G\\k\xc5\xf8\x86\x42,\xb3+\x44\xec\x66\x61/\xe3\x0c\x17\x0bz\x96\x41\xb1\xa8\xa2\xb9\xbb\x66\xcdQ\xd4" "\xe4\x90\xfcy\x07\x99\xed\x80|,\x62\"`\x8b\x10\x31\x98@\?\xb9\x06~\xf6\x1f\xdcO\x99\x63\x8b\x89\xd6\x95\xb2\xf1\xb7\xa9\x91\xfe\x66\xd6" "`}\x03&\xfd\x1bZ+\xae\xa1\"\xcc\xf1\x64\x11\xe2\xab\xb6V\xf1\xe5\x91\x33\x1dO\x85\x92\x1b\xa0\xaf*\xd5\xe5\xcaM:\x90\xc0\x8c_" "{\xe1O\x91\nU+\xe1\x62\x90\xb6\xcbZ\?\x88\xc3\xf1\x11^\x9dQ\x61\x9d%\x30X\xe7\x18\xaeH\x95\xaej\x17\xdcj\x8c\x05\x06\xe1" "\xd3m\xd7\xce`\xdeg'\x83(\x44\xc0\x15\xa2\x1f\xad\xf5\x13\x9c\xd4I\x38\x36+\x17$\xe2\x9a\tQ\xd7\x11\xf2!\xfd\xc8qx\xc0=" "\x45_\x1bQ\xc8<\x85\xcd\xa1\\q\x33\xd4\x96(\x84&\x03\x83\x82\x9d{\xfa\x14" "l\x0f\x38\xa8$j\xde\xd7\x33\xda\xf5\xb3\xd6\xae\xdc\x90\xab\xda\xde\xf5\xb0<\x13\"\xdc%\xf8\xbb\x38\xf8\x33s\xa9\x89`n\x66\x16Ss" "=`\xa7\x01T\x90\x1d\xa5&\x9c\xebh\xdaM\xaa\xd9\xea\xa7\xe6\xb8\x95\x9a\x7fG\xe0j\xe3\x62\xde\x97\x9d\xba\x36\x32\xbf\xa1\x1fN\x8c\x10" "\"\x44W\x34\xb2\xcb@\x05\x03\xe4\x1a\x03\x62~\xf0-\xb3\xc3J\xc9w\xc3x\xbe =\xd4\xc4\x64\xd2\xfc\xa1\xaf\xaa\xf2\x91\\\xf3\xa2\xe2" "\x0c\x35\xfd>\x41\xfb\x38li\x0b\xe1\xb8\xefL\xfd\xeeT\xf1\x62\x19(\x07\xd4\x08}\x63^\xa1\xbfk\x61\x1a\x0b\x10*\xbcj\xef\xa9x" "W\xf9\xdd\xbcP}\x1a\xbf'\x96\xb7\xfcp\r\x42P#\xfe\x1d\x17\x18\x46\x12\x1b\x34\xd8\xda\x32\xf7\xef\x86\xbd=\x18\xbd\xa9\x65+Q\x80" "\x92\x88\x18\xf9P\x14Z\x93\xc2W\xcd\xbf\x18>H\x14\x86=Z[\xc6\x33\x04\xd9\x9f\x07\xd3^\xa8\x9a\xf6\x80`\x66\xae\xc3\xa3.\xc7\x89" "\xb9!\x97g\x03\x04\x8a\x01\xb5`r\xddY\x9a\xb9\x15\xbd[\xa9&#\x06\x1b\xc3\xcai\xce\xf4\xcc{\x8b\xa9\xed)y\x0b\xea\xf8\x98U" "\xe7\xd5 \xfb$\x1f\xba:\xbc\xacV\x62Kv+Y\x88\xec\xc9\x89\xad\xff\xfeH\x07\xa2P\xb2\xeco\xe6/\x9f\x37\\\x8ck\xef/\x61" "\xee@\x7f\xc0\x9c`osq\xc9X\xd0\xfb\xdb\xee\xcb\xf1\xe1\xc7_\x1e\xfd\xf7\x17\xc9\x14\x83\xf1\xcb\xffv\x13\xffy\xc7\xd8\xd6\x35G\x96" "\xbdmV\x08\xfcm\x90Z$\x07v\xb8mu\x41W\x1f\xaa]\x35\x9e\x64\xb4\x03\x90/\xd9\xb6qU\xbe=\xf5\xdf{\xfaS\x9b\x06\x97_\xa0\xda\x65\xe3N&" "\x38\x9f\xed\xa5\x91\xf4[Rs\x9d\xce=\xf4\rI\xe5\x80\xd3[\xb8\xe1\xb8\xc0Pz{\xea\xdfS\x30\x19\xa6J\xb2LLH\xa4\x1a\x35" "\xf7.\x34\xd4\x80H\xeb\x7f\xd5\xbf\xb7\xc2m{i!\xfc\x90V\xec\xe9\x7f\xec\xe4>\xceP\xd1\xd5$h\x1c\xa5\xaa(\x95\xad\xee\xef\xa2" "\xa5^\xdaG=\xab\x9a\xe0/\xbe\xd6\xd1\x9e\xe2\x94\x12n\x18\xe5\x38\xf5\x98j\x35\t\x8b_\xf4\x82\xe4\x06\x9f\xcf\xb9\xa7\xfe}\x0c\xdc\x96" "\x46\xed\xc3\x36\xa9U\xed])s\x9d\xbd\x8bH\x1e\xbf\x82\xbf'\x9d\x06\xf0\x13\x85!wPR\x95\xa7\x65\xab\xbb(\x83\xc2M\xf0~\x9f" "\xaa\xbf\x34#j\xef\x8dq\x66\x86\x10sz\x84\xcf\rg:\x93_T\x95_\x0e[\x1a\xa0\xd5N\xb7~\xb1\xfe\x01\x31\xdf\x82\xc9\xd8\x33" "\x42\x96\xab\xdb\xb0T\"\xa7\x37\xfe\xfe\xd8:\x10vo\x9c\xfe\xc4\xa3\xde\xb7S\x0b\x38t\x35Q-/\xac\x9a\xe3j\xb3\xdcS\xf1i\xd3" "\x95\xaej<\xb5\x03\xb3^\xbd\x8d\xd6s+\x97\xb7\xd1\x96\x65\x07\x83\x10\t'|+\x9cg)|\xe4)\x93\x9fzP\xbb\x8a.\xb4\xce" "\xd2>P\x17o\xc4\xb8l\x1f\xb0\x8e!l\xe7@\x96\xea\x42\xfe=\xf3\xbb\xa8\x80\x0c\x8a&l\?\x39\x7f\x17\xdb \x7f\xb6\xafP\x8d\xa4" "\xd2\xb0\xc1\xdb=\x15\xe7\xedo\x93\xdb\xf0\xe9\x86\xbe{T\xabM\xaa\xd0\x41\xdd\xcep}\xad\xb6\xd4\xcb_\x9c\xfe'\x9a\x9cu\xda\xce\xd0" "\xa9S\x88\x15=\xda'|I\xed\x13\xf6\xaa\xb5\xcf~\xd7\x65\xba\x65\x89\x89\x80S\xca\x9d\x93\xd3\x1a`\xf2q\xb6\xcf\x82l\x1e\x0c\x8f\xb9" "WX\x9eG\xedo\xbb\xbe\x33\x46\x34\x17\xd6o\xa4\xf0\x8a~\x1e\xa9\x90\xb6\x41\xe6`\xed\x33\xf9\x8d\x93\x83\xc7\x30\xd3\xbf\x62\xd1\x32\x30\xea" "\xcc\xe8+\xdd>\x8b'\xfc\x8d\x9d,\x17\x9c\xf7\x99\xf1\xb6sQG_j\xfb*y\xd2t\xde\xbe\x0bw\x13\x30\xea\x9c\x83\x0c\xb9\xd7~" "`\xc9\xae|\"\xf1\xa5\x0b\x11\xfd\r\x8c\xba\x8f\xec\xc1k\?\x04\xd9\x33\xf2\xe4\x83\xb1\x9d\xc5\x44\r\x0c\xd4\x0e\xabV\x9e\x85(\x37\\\x1f" "s\xc8\x8cJ\xaa\x05:\x9fH\x17!\x08\xba\x45\xf9\xf2\xf6v\xe5\x66*t*\x0b\xbb\x37\x8c\xc7*\xe6\xa8L\x62\xb2\x88\xf0=K.\xce" "\x9c\x11\xda,\xed\x07\x66\xe1\x42\xac\x30)\xb4\x43\x08\x39 \xdb~`\x30\x62\xd0\xff*\x66\xbc\xe5\xb1\xd8U$l\?\xc8\xa6t\xeb\xbb\xed" "\x88\x1cG\xfet&\x95\xeaR\x30\xe5\xc9\x18\xb7\x0b\? wS\xa7\xec\x82}\x07\xd1\xb0./\x96\x0b\xd0\xb6\x1f\x92\x83\x07M\xe1\x83;" "\xaa\x0c\xef\x8bn\xd2\xc2\x8f\x8c\x93\x99\x8a\x98\x8b\x9a\x93Y\xb7\x98\xdb\xb2\xae\xe7\x00\xcf\x91\xf6s\x80\xe1\xfa\xf6\xb3|*\xe4w\x0b\xa4_" "\x91\x10\xfdo\xca\xa9\x93S\x30\x61r\xad\x37\x31\x1f\xf1\x12\x9e\xe3\xfa\x32)\xb7\x82\xf6\x02*\x39\x1c\x38\x65\xab%\xbfg\xba\xbe\x0b\x31\xe3" "H\x88\x45(\xdaU.\xf6\xd0\xae\x06\xd9\x0c\x83\x43\x89\x89\x99\xa5\xc2\xebg\xf2n\xa3\xff\x97\xed\xaf\x8f\x05\x12\rp\x61\xff\x89\x1c\xcf\xc9" "\xc9\xce\x19\xa8\xe3$\xb7r!y!\?\xbc*\x83\x63\n_\xaa\xf6\xe9W\x19i\xaf]\xb5\x8f\xabj\x9f\x91\xd2\xbe\xacj\xfc\x92''" "\x46t\xe5\x08\xe7+g\xba\xab\x98\xbe\x17\x1c\x83\xdaU\xfa\x37\x80~.\x31}/\x35}\xc7\x06\x1e\xf5\x8b}o/\x88\xa2\xbc\x66\xc5\x88" "\x8b\x15\x8e\xcf\xe2\xb3\xbc+\x8d~\xfa\xc6\xe5Ks\xb6m\xe9\x0c:\x65{[/\xac\x33\x08\x97W\x41\xf6+<\?\xd8S\x96\x1b\xbf\xb0" "\x01\xa1\\\x39u\xb4\x0c\xeerPIn\x1e\x61\xd5\"Q\xf0\xf3\x03\x7f\x17\xa3\xf4\x17\xebr\xba\xa4\xab(\xad:\x1d\x05\xed\x1bSv\xf4" "\x9f\x1fr\x63\xf7\xe0w\xb6y&\xb7G`ptn,\x90\xd9O\xe3\x86\x44\x8c\x31\x90%\xad\x9a\x15\xa7|\xd4q>\xc7\xd6\"\x37\xbc" "|\xed\x99ih*n\x98\xdan\xa7+y\x96\xac\xb1\xb8\n\?\xec\xd8R\x03\xde\x95\x82\x96\xfd\xe8\xfc\xd9X\x33\xf6\xe2\xdcG\xd2|\x31" "\xd5w\xfa\xddj\xedq\xd3\x88\x10\xc1G\x14\x82\x31\x0bQYV\xf2\xedH\xebW/\x00~=\xbav\x0b\x9f\x10\xab\x96\x42\x94\xe9\xc2\xa7" "\xab\xfd\xbd*M\xa7&\x8e\xc2\xe4w\xfb\xc9\xb5\x91\xb1-=\x85\x98\xd7\x97\xd1s-U\x37=\x37\xa3MI\xf2\x13V\x8b\xb9\xadj\xb7" "\x87\xa8\x63\xc2\xd6\\\xceH\x17\x08Q\xedS\xe7\xef\xb6\xfe\xbbm\xba\x8a\xf3\xb7\xec\x1bQu\x16|W\xf7L\x8e\xc5\xa8\xb2\xa7\x8b\xb0\x62" "`\x30\x9b\xba\xa9\xf5\x91/\xbb\xf6N\xd9\x99\x16\xb8\xe8`\xfb\x85\xd5m\x30>\x1d\xc4\x17mS\xba\x1aQ\xf0s\xb4\xa7\xb8\xbc\x1e" "\x94Ng\x9c<\xbb\x92*\xe3\xde\xdf\x44\x45\xa5\xf4oz\xed\xe9\xdf\xaa\xce\x30\x93\x0f\x8f\x9eL\xbd:\x35&[\xe9{O%'\x39S" "]#SSx\xc8\x64\xcb.\x0fp\xff\x88\xc7\xfc|\xc3,\x9f|xv-uP\xcf\x93\xd8\x45)\xbc\xe2\xcb\x0eoN\xb5S\xd5>" "\x64Q\xba\x80Q\xa5\xef*\x19\x1dr\xdcR\xd4\xfd\x99\x91O;|\xd8\xc8\xdd\xc5\xe8\xe7\x13\xc5\x02KX\x90\xe3\xb1\x05,\xaal\xc7\x85" "\x0f\xaa\xb0\x62\xcf\xa2\x32q\xca\x9b\xb7\x1a\xa1)\x86Op\x45\xcf\x03U+\xdd\x33\xfd\x9d*v\xc9\xa6*\xfd\x1d\x94%P\x8dn\x7f\x35" "\x0c\?/\xa8\xaaG\xce\xb0\xb8\x63\x07\x1c\x94T\xa3\xfe\x14V\xdax\xe3\xb7\x1e\xbe\x0c\xe8\xc4\xaa\xa6\x9d\xbc\xceL\xcc\xaa$/\xe1\x98\xc9" "\x90^,`\x90\xcf\xf8\x97\"*\xcc\xbd\xc9\xbfT\xcd\xd7\xec\x61V\x35'\xdf\xed\x45\x63\xe2\xba\xf0\x63\xedy\x8f\xa4Z=^\xb6\xb7\xa7" "\x18\t\xdaUt\xb6\xbf'\xe3\x36\x42\xa9S\x66\xf7\xc0\x14\xea#/t\x1cT\xb2\xf4\x88\xce\xde\x7f\x17\x0f\x9e\x36\xac~\xf7\x62U\xc2\x17" "k\x9f\xbc\x44\x45~u\xd1\xd3qp\xbc\xb3\x96\xc7K\xd4\xe2\x9b\x8f,\xff\x93\x8a\x95\x91\x37\x41o\x1aP{\x15\xaf\x99z\xa4R\xecL" "\x9b\xe0P\x9e\x33\xabi\x0fV+\xd0\xc7\x35\x37u\xb1\xd1M\?U\x7f/\x35\x1a\xf2\xa3\xf5W\xe6\xaf>z\xd7O:\xa9\xd9\xadZ\xe1" "'T\x1f\xcd\x97\x86+\x86\xc1q\x33\x62\xdb\x05\xea\xaa\x96\x9a\x1e\xb4\xdcT\x97\x8e\x1b\xa6\xde\x03\x7f\xbc\xa2\xfc\xda\x61z\xce\xabj\xfc\xa8" "\xabr\x94N}\x83\x7f\xd5\x34\xc3\xc9\xad\xd5*m\x43\xf4\x34\xe6\x82y\xbe!\xee\x9e\xe8\x30\xad\xd5\x1bt[\x65\xc8u\xb6\xa9&\xb7t" "\xcc\xa2\x9a\xf6\xd2\xb1-l\xd0\xf9\x14\x1e\xd8\x88\x1bX\xad\xa5y\xfag>\xa7\xe6\xdf\rG\x83Lj\x8e\xd3\x1b\x97*\xbd|\x36\xa9\x9a" "\xa7\x97\x92zU\xed)\xae\xb4\xcc\r\xdeO`\xea$>zI\xd5\xdf\xe3\x17\x33ZW\xf6\x14]>\xa0\xe2\xa3/\x8e\xc5\xed\xa9\x7f\x0f" "\xc4\x9ep\x9a\xafS\x0e\x31Q\xed\xfdnw\x1a\xde\xa7\xa9\")\x96=\xdb\x82\x1a\xc3\x8c\x0f.%k\xd3N\x83\xd1#\xeb\x87\xfe\xb5p" "\x01=\xe5\xa5\x33\x8d\x8e\x02\xe5\x45k|v\x62\xac\x39\xb5\x66\xd3|\xa1\xa3:\x36\x44\xc5\xcf\xf8\x98\xb7N_WPk\x30\xe7\xbd}\x35" "Y\xee\xa9\xd0\xea\x84\xa6.\xeb\xae\xa4\xf8`\xbc\x04(]\xe1o[\xdaS^\xcaym\x98\x1d\x1a\xc2I\xd5\x19\xdeg\xe9\xd9\x0f\xc5\xe9" "g\x62N/\xf6\x32ZS\xf6\xb5\xc5\xd3{#\x9f\xa1\x17\xb0\xf1\x8e\x97L\x87\x1c\x30X\xee\x38M\x12*\x39\xca\x04/\xb7\xa6\xf8\x84\xac" "O\x41\xe9\xa5\x8d\x98\x0c(\x08SJ\x9d\xf4\x0f\xa7\xa7\xce\xa0}/\xff\xf6\x94\?\x04Q\xd1\xf1\xbd\xb5\xa5Ti\xe0\xbc\x8b\xa2+\r\x03" "m\xf9s\xf2|\xbfW\x89\xf3\xbc\xc3\x1aj\xca(\xb7\x0c\xce\x86\x61q\x1d\x9c\xae\xd9\xe1\xe3\x9b\x65\xdb\xdf\x06}\xd2\xfe\xea\xa8\x38r " "\xaaog\xea\xb3\x0cH\x86v\xafh\xb6x\x9e\xa6\x35\xa0\xd3\x95\xd7\xb6\xb5\x9c\xfd\xcb\xef\xb4\xee\xf9\xb4M\xd5\xe8\xd0)\xe5\xb5\x17\xd6\xaa" "|!s(\xf9\x43z\x8f\xa3\xc3\xa4Q\xa7\x33\x33U\xf3q\xefwz\xb9_\xe7\xa6\x8ai\xb4rQ\x0b\xbb\xbbmY\xf3\xbc\xf3\x9d\xab" "\xf0}\x43\xd7\x61\xa8\xb8\x9bI:\x0fh\x82\x65\x82\xe9\xd6\x36#[\xa9%\x43|\x1du\xeb\t\xab\x07\x88\r)\x64\r\xae\xcdQm\x30" "\xbay\xb1\xec\xde\x94\x15\xafm\xba\x11\x08\xb1xq\xbbM\xe7n!\xa6\x0c\xb4\xdbVj\xb5\xe5'$\x02s\xb7\xdb\xf1+\xf7KV\x35" "\xa9\x36\x07\xa7-Wz&*s)\x12\"\xbcV\xdb\xfc\x87\x84\x18>\x15\x62\xf8T\x88^P\x90\xc3\\j\x36\x8d\xf6\x13\x66\x04\x36\x1d" "J\xb9$Y|\xf6\x18\x1cX\x88q\xc5v\x8f\x9d\x9fJ\x1e/\xcc\x8f\x9dV\?R\x33\x9a\xda_\x31\xc8(\xac\x7f\x1byt\x86\xca\x17" "\xc2\x87W\x38_\x93+\x9e\x35\x1a\x96\xc9\x11\xf7\x63\x04\x34\xa1\x1d\x97\xd3\x96\x84\xf3\xbe_(=\xea\x84l\xef(\xe9\x0e'&\xa6X\xb4" "G\x1c}\x16\xb2\x11;\n\xe0\xc2 ,\xa4\xe4\xc4H\x98Z\xf9\x62=n\x14\\\x9f\x93\x37\x46\xb6\xed\x46\xd6\xb6\xb3\xc5\?\x85l\x81\x8d" ",\xbd\x8c\x38\x44+\x64]\x63\x14\xe6\x86$\x06\x88\xdb\xb6\x64\x42{\xc4\x91Z\x61\x85\x17\x16\x65\xbeH\xa6\x91\x11\xc3\xa5\x08\xdb\x07\xc6\x07" "\xe3\x8bS\x17\xe1\xd2\x66!/\x88\xab\xe9\xb4G\xd6\x7f\xf1m\x17\xfe\xcdq\x45!\x16\x66L\xbb\"\xbf\xa3\x36\x9e\xd0\xb7\xf5l|[\xb7" "\xc6\x42\xf3\xf2\xfc=]$\xa8\ny\xfa\xcfPu\x8e\x19\x87\x1f*,]\xfc\xfdm\xa4\xdd\xa1\xec\x8eYh\xdfr\xa7`\x9d\x8b\x0b\xfb" "\xda\x95:\xd2\x99\x9d\xbb\n\xd7\x45{`\x0b\xcb\xd4\x17\\`\x1d\x94#p\x45\x62Q\xeb+\x9dW\x0eg\x39\xaaV\?)\xe7\xa9\x36\x15" "\xdd\x13\xe1<\xdb\x0b\x39z|\xdd\x65t)Q\xa7\xab\xbf\xbck\x11`}<\xe5\xcd\xfe>\x85\x9b\x64\xb3\xa3\x37\x97\xa8\xe7z\x98\xf9\x8a" "\xba\x13S\x1bg\x38>\x62\x17|[\xc3\x32\x84\xa5N\xd0\xbaOU\xa5\x9a\xaa\x31\x9f\x0e\xfdy\xdb\x8b\xf0\xb0I\xbe\x34\xa3\xcc\x36\x44\x38" "pQ\xfc*\x16rP\x92\xf5\xed\x85\x0e\xe9\xfc]/\x06x\xae\x82\xdd\xc6U|\xf8\x18g\xd3\xbf\xed\xdd\x43\xf4|\xa6W\xdd+R\xd9" "[\x10\xfe.\xa4\x66\xf0\xee*\xb8\xce\x05\xa7_\x7f\xea\xd2\xfa\xceU\x85G\x35\xcb\x64\xa0J\xf5 S\xd8W\xacI\x9a\xda\xff]%\xc7" "\xc1R\xa8\xa8\xf8\xbew\x14]\xf3\x92\xa5\xab)\xce\x9c\x85JtIu;\x66\x97oR\xae_\xef\xe2\xf9\xcc\xd5\xfe\x1d\x0e\xf9\x46\xa2\xf5" "]\x90\xfd\xb4\x41\x01U\xf1k\x96\x11\xcdT\xa1\x1f\xd0\xfe\x16\xb3\xc1\xb1\x90\xf4\x1ai\xf3\xafK\xc5J\xcc\x02\xeb,\xa4G\x17\x95<]" "s\x01/*)k\xd8\x05\xbc` X\x30\xda\x0c\x92\x91\x66\x04\x9d\x03~_\x42\xb8\x1a\t\x31\x85\xacs\xc0\xca\xb3\x30\xb7#\xb1z\x9b" "\x10\xcd\xd0\xce\x41\x8cw\xdb\x39H\xcaz\x97\x9d\x8cv\x1bn\nnr\t]\x31\xe1I \\\xb7H\x44S\x14\xc2\xed\xa9\x93\xe1R\x07" "\x42\x34\x8c@\xdfU\x07}\x91Y\x89\x89\xae\x33\x61~\xe8L\x7fX(\x39\xb9\xf8\x8a\x34\xa1\xe2\x83\xa3\x64p\xc9\xcd~\x04T\x36\x85\xc8" "\xee\x84\x08\xae$lUHy,\xe5V\x84it\x1ds\xac\x17nK~O\xe9\xb2\xc0\x62\xee.\x9d\xac\xd7\xc3\xe4S\xee\x64\x18\x05I" "\x88\x82\xac\x63\xd1<\x85\x98\xe2\xd0\x31\x87t\xe1\x0b\xcf\xcc\xa9\xdf\xc2\xb7\x0fg\xdal\x13\x85\x05\xbb@\x7f.\x34\x99\xb1\x41\x05\xd7\x0b\x46" "\x96\xa0z\xe8\x06w\xa5T\xb5\x1e\x98\xd9@\xd9;\x85\xa9\xc1V:R\n\xc4\x93{yXrU\x8c\x10\x84\?\xb2^\rS\xa7\x34\xff" "\x9d*\xe9\xdb\xf8\xaa\xa8\x89\xdd\xe7\xa2H\xfe\x90~)\xc2\xd4\xcb\x41\xd4%\x9f\x37;\x14\x84v\x32I\xe9\xa4\x34\x45\x1e$\xef\xe3\x31\xe2" "\x63\xe3\xc5\r\x89j\xb4\xb0\xcb\xb7\xe9\xcf:\x9e\x1b\?y\x85\xec\x11\xe8\x64\x38\xad\xaa\x93\xa1\xf7\x85\x30{\xeb\xf4\xa7\xa8\xdd\xe2\x33\xbe\xa1" "\xa4\xc8g\x9c\x94x\xb4\xe4qM\xa2wU\x89;:\xfe]LI\x94\xc1\xc2\x1d\xde\xdc\x31\x17\x17\x16\x9eW\x9d\xec\x85\x13\x13\x19J\xe7" "\x98\xf9\x8e\xb4U-\x0f\x1a\?\x31\xe3\x91\xbf<\xf2\xe0Q\xb7O\xbe\xf3\xe0\x31\x32\xd6\xce\xb1\x9f\xac\xe2\xb6\x0e\x33|\xfbt\x30\xe8\xac\x39>\x05\xca\x03\x8a\xd0I \xea\x98\xef\x87\xc3*\xc2\xfb\xa6\xd3" "\xdf\x82\x98\xe9\x31\xc5\xbc\x9fZ\x65\x61\xcd\xd0\xd9\xc2\xfa\xab\xf1\xc7\xc9~\x18\x31\xe1N \x64\xfdi\x1d.&N\x1d\x8e\xbc\xe2%q\xa1" "{\xe1]\x33>\x7f\xa7\xb7\xbc\xa8*\x9f\x11gJ\x80\xf6\xf1\xad\xf5v\xb3\x39\xf6=\x89\x9a\x33\x35q\xb6\xa2\x10\x83\x0b`Px\x66\xf7" "\xa5(\x38\x8c\x81\xf2\x03\xfa\xdet\xd6\x9eT\xd9o,\x64\x16\xb1\x66\xc7\xa9p\xce\x64\xc5h\x1a\xc2\r\x9f\x66\xbc\xbd\x36\x96I\xfb\xd4\x93" "\x83\x03\xff^\xb9\xba\x63\xc7\xfa!\x85\x08\x9d\x08\xfe.N\x19\xa2\x42\xd4\x80\x9fM\xb2\xd8\xcak\x61\xd7Wg\x43G\x02\x10\x1d\x10\x87T" "\xcf\xd3\xb8s\x62\x19\xf5&h\x17\xe5\xcfI\x06/p\x13\x66&\xc9\xa2\xc6\x85\xfb\x44}\x66\x38X\xd3\xd9\x44\x98X!\x84\xbfMg\xc3" "\xe0\"\x42\xf8i\x08\x9f/H\xb8\xf7w\x36\xecX\x14\xf2\xcel^ug\x1bVz\x1c\x84P\xf3\xcd\xcd\x88'\xdcr\x19\x04!\x62\x42" "\x08\xb1\x0cG\xf7\x80\xb1\xfb\xba\x07\xf2\x85\x46\x85\x11K\?Q\xe8\xfc\x05\x83\x97\xc3\xf8\xb0O\xd5z\x90\x82\x97\xd5<\xaal\x37UxL" "][\x36\x01\x64\x81\xae\x66J\xa6\x0f\x31\x31j\x0f\xfa&\x86\xd8\x01S\xfftQ\xe8w\x16\xa2(\x01\xf9M\x8b\x39\xb5\?\xa1\x9b\x02L" "\xff\x34\xffp\xfa\xe1\xa3J\x8e\x84/@\xf7\x80\xd3\xbd\x18\x8fHT\xee\xc3\x19\x14&\tV\x62\xa4\x1a\x95\x93\x0f>!.\x31\x03\xfa\x41" "\x93\x83\x05\xf9\x8c\xab\xcd\x30\x64&\xa8\xd9&V\x35\x86\x8a\xa7g\x34\x97\x17\x0c\xf2\xab\xe6\x94\x44\xa9\xa2\xb4\xdf\xc2\x91\x46\xd9\x35\xae\x9c\xbf" "\?\x19\xd6\x44\xa1R'k\xa8x\xbcKJ\xe3T}\x1e\xd3\x33\r*\xb9m\x07\x97\x65*\x0c%\x81\xe8\x46;g|k\xd9\xf0\x93\x31" "\xda\t\x10l\xaa\x9b\xe1\x8a\xb5\xdd\x0c;^\x84\xd9'#O\xcd\xea\xb3\xf2\xc6\xd8\x37\xda\xdf\xcf_H\x84\xf3\x07S\xc7mQ\xf9\x07\x63" "\xdd\xc8\x87\x12\\\xdb\xaf\x8a\xbc%\xce\xe9\x15>\xd8Q\xe1\x87\xae\xdc\x92\xaf\xc6\x86\xfd\xce\x1e\xb2|\x82\x64\xef\x87\x44\xce(\x1cg\x8dO" "\xd1\xfa\x8cy\x87\xaa\x96\xf1\xcb\xc9oY\xcc\x89]\xc0\xea\xde_r\xf0\x63\xd7\x80|\xbdk\x93\xe5\xc1\xb0z\xc8\xaeMU$\xfd\x1a\x84" "\x99~\x30\xd5\xfa+\x15\x93y\x86^\x08J^\x01\x9bq \x87\x99`&\xb7\xef\x34/\xec\xafWu\x0e\x8a\x89\xf9`\x64\x32\xcf\xa4S" "\x18h^>\xb8\x19\xcf\x1b\x9e\xb2\xd8K!\x44\xde/\x9c\xf3\xe1\x86\xdf\x37\xce\xe0\xc7\x66`u\x33\xac\xea\x81{\x9b\xb4\x32\x00g\x1c(" "\?\x02{\x06\x84\xcf\xb6\xe3\xf3\xe2\xf7\xa7\xce\xd9[P\x62\xb2\xb3G\x14\x86\xb8\x85\x83jz\xdc\xe1\x85S^\x18K/U|\x66,\x45" "\x84\x1b\xa6\xc4\xf8\x90\x7f\x8fO\x07\xa4=\x92\xf8\xba\xed\xdc\xfbp\xe2;\xa6\x0c.\x07#\x64\x8eg\xdd\x11\xc2\xf1\xd6\xa9\x33\x1c\xd0\xfcV" "\xc5s\xfa\xcb`\xa7\x85p*U\xcegv\xc8\x8a\x42\x39\xa7\xec\x1a\xfb\x46\xbb\xa2\x1d\xef/\x39\x38\x32>\x39Y\xccum\xd6\xbd\xf0p" "\x41\xa2\xb7\x43X\xd4\xb2\xb6{\x64\x19\xb3\x92\xfdU\x62\x62\xc8\x44\xc8\xa7w\x14\x8cm:\xb8\x98\xcc\x8c\x8f\xb8\x8cH\xf7(\xbak\x90X" "\xa6\x44\x88\x92[\xd8=\"\xe1\x13\xd0=\x62\x34;\x61\x9f\x87N\x96\x43\xe3\xd4I\xdf\xb4\xae\x85G\xef\x9e\xc4\xe8\x14\xea\x9e$\xc5\x33\x8e" "\x95w-\x90>(\xb9\x80\xe5o\xa6\xd8\x0f\x01\xa5\x41\xe9\xf8\xf0U\xe9\x08\x32\x16G\xe9\xe6X\xa9\x11\xa2\xd7Rx\xc9\xbd\xa4\xa5\r\x46" "G\xcf\xce\xa0U\xa1\xd3\x86(\x04\x37\x14\xbeI\xbbp\x18\x37\xf2\xa6\x8aN\xd9\x81m\x94n.\xee\x64\xc2\\\xd7r\xca\x1c{\x41\xbb\x17" "\xecV\xea^\x04h\xdcw\xb5\x0b\x82\xb1\xe8\x66K\x16\xa7N\xab\xe2\\\x44-\xfbS\x97\xb7\x13}\xe0\x03\xbb\x88\x0f\x32\\(N\xcd{\x92U\x8d\x0b\xba\\" "\x08\xf3\x39-\xb0\xe1\x63\xaf\xeaG\x8a\x1a\xfau\x88\x92\xf2\xf9\xf0\x83\xcb\xfa\xa8\x32\xde|:\xe3\xfc\x13\xcd\x32\x1fQ\\\xe5\x0b\x62,v" "\x61\x93I\x39\x9e\xf0\xe4I\x89\xb7LW~\xa1\x1d\xda_\x8b\x30xn\x84\xb9SW\x61n\xa8\xd1\x35,\xe1\xeaZ\x19\xff\xaa\xddi|" "\x30s\x95\x1c\x64\xe8^\x45\xd5\xbcM\x10\xa0\x45T\x87/(\x19>\xa6.X\xae\xe2\xc3#WI\xff\x8ds\xd0\x45\xa1O\xb9\x9b\xa7#" "s\xd7Vr\x12\xb2\xb6\x94g\\\xc0n^r\x0c\xd6\x9f\xd5\\\x93'Y)\x7f\xad\x1a\x95g\xf3[\x88!I\xe5\x94\x44\xd8\x1c\x61\xf7" "\xcei\x05\xa6\x99\x81]\x81\x65pJ\xfan\xd2\xf4\xc3\x88\xd9:\xb6\xdc\x0c\n\rX\x98\xe9j\xf3P\x96j\xd4L\x0erl\xce\x89\x42" "\xa3V\xb8i\xd8\x87\x98\xe7`\xb5\x90\x9f\x9e\x92\xab\n\xa5\xdd\x92\xb6\xed\xbf\x95\x95\"\xba\xc1j:j\xa6=\x93T\xa3.\x1b!T\x8b" ",\xa3r\xb9\xa2\xb7=T\x94\x19\xb1K\x1f\x8a\xad%\x9a\x1e\xfc\xa9k\x0bT\t\x31\xe2\x04ZI\xab\xa6\?\x30\x35\xd1J\x81\x99^\x65" "\xc7kI\xf2\x9c\x9e\xa3\xd2#\xcd\xcb\x01yWqJ{\xfc\xbf\x94\xd8\xf1\xfb\x89\x8e\xe4\xbc\xf3\x66\xfc\xf9zrH\x8f\x87x\xb8J>" "ii\x39\x91\xdd\xbc\x33\xde-\x83\xa3\x82\xce\x41GW\x89l\xeb\xf1\xee\xd8$S\xdao>\xec\x18\x33\xdb\xbe\xe5\xc3\xb2T\x9b\x8f\x8f\xf9" "\n-gQZn\x94g\xfbK\x98\xe7;\xb3\x8f\x39\x1f\xa3\x7fS\xf8\xcc\x04\xe1\xb7\xf3\xef\xcd\xd1\r\x46\xb8\xea\xc8V\xff\x38\x92\x15." "\xe3\x86\xf3\x99@K\xc3j\xc6\x07G\xf6\xd9\xdf\xfc\xae\x0f\xa4\xa6\x1cL%o\xa9\xd9\x86\x36\xf9\xd3\t\x30\x86%\xe6\xa6\xcf\xce\xbf\xee\r" "{\xfe\x84g\xfd@=H\xa6\xd1j\xc6~X\xdd\x36$\xf3\x05g:\xfbM\xd5\x8e,\xcct\xec\x1d\x33\xd2\xa0\x82\\>U\xf0L\x17" "\xc2\xe5\xa3k\xcb#\t\xe1\xe4\xa4\x9cG\xe3\xfb\xb8\xb9\xddW\x8b\x17W\xf1w\x93\x43\x43\xa2\xbav\xbd\xbd\x0c\xbbJ\xdd\xb4\x87n\xf3\r" "\x41\xcbHh\xfa\x97\xa3\x8a\xf3\x89\xff\x63\xdb\xd9\t\xfbN\xa8X{\x86\x99\x1f\xb2\x63\x98\n\x93\x00\xe3\xee\xe1\xdf\x86\x8f\xd4\xfc;\xb5\x34" "\x32\x39\x84i\xea+\x35\x97\xeb\xf0h\xe6\xca\xaa;\x34\x07{\xb7\xa0U\x94\xe2.U\xe7\x07\xf4\x07\xd9S\xe1\xe3$z{\xd3Y:\x98" "}\xc9\x8e\xa9\xbd\xbfGW\xd3\xdfus\xef>\x38\x65\x34\xd8\xbc\x33n\x0c\xb7\x95\xc7\xf4\x45\x80\xe2,n\x9aO\xc7\xda\x9a\xc5\xfc[n" "\xa8\xb5\x39\xc1\x91\xca\xd6\x45\x33\xf5\xef\xf4mnK\xbfN\xa8\xf1\xab\xe5\x97P\?\x0f\xf1\xf6\xc6\x95^\xd4qz\xab\x1c\x39\x11\x93\xed\xb2" "\x9b\x34}N\x8b\x41\xcb\xd6\xa9\x82\n\?\x32{\xa6\xb5\xce]}w\xa2\xdd\x8fuS\xfc\xb3\xcdj\x44\xb2\xed'\xfe|N\x13\xfd\x42j" "\xd4O\x34\x97kg\xea\xd8\x05\xa5\x11\xc0\x36\xf8\xc4o\x18s\x43\x98{\x0c\xce\x07\x34\x31\x41\x06L]\x1c\xa1\xe8\xe0\x43\xf3\xe5\"\x35[" "]O,\xaa\xf6&\x1c\x63\x43xt\x1e\x1e>\xfd\xab\xf6\xae\x46\xb6\xf9\xab\x12\x33\xe9\xf0\xc1\xea\x10\xcc\xfc\xd9\xcdh\xc3/\x8fN\x80`" "\x90\x9d[\xab\x45\x95\xa7\x02\x9a\xfe\x06\xc2\x07\xfbYy\xec\x8c'k+\xd2,\xe6,\xf8\?G\xeb\xe0\xa7\x64\x15K\xdd\xe0\x99\x45\x38)" "\xea\xdf\x16G\xf1\xd5\xbb<(\xffH\xc3\xd9\x46\x9f#\xdb\xcd\x37\x1c\x05\xe9\xde\xa8\xaf\xa0\x8f\xf7@\xc5\xbb\x81\xbf\xe3T\xe9\x34\xf4\xdbK" "\xbft.^\x08j\x0f\x33\x9b\xf1\x37Q\x91_\x61T\xb6\xbd\x9e\xc7\x46\xdb^/:\xf7\xde\x8f.\x41\xe8k\xec\x41\xa5\xab\xeaQ\xe5\x0e" "R\xb3\xfe\x1dZ\x9e\xa5k\xcb\xa1\xbf_\xcc\xb7\x37\x92\x65\xc3M\x34o\x84\x1fG\x34\xd9\xe0\x16\xce$\x95\xb1\x63Q\x94\x9fjS\nz" "\x15\x37\xf5\x31\xb1\xfd\x04u\x91\xf3\xc4\x98*M/\xb3W\xeb\xbf\xdb\xdb\xfc\xfd\xe2\x1b\x38\x44\xda\xbd\x89\xd9\xceT&\x96kY\x63\xf9&" "\xbe\xec\xc9\xd5\xe9\x87\x64o!\xbe\x1a\xca\x41\xd8\xa7(\xaa\xbd\x0b\x1esV\x97\xb9\x91G\x1f\\\xdc\xcai\xfeU\xd2\xba\xf4\x9b\xe5\xf0\xa0" "\xf0\t\xe9\xefV\xaa\x35\x31\x66\xf0to\xb9\xb4\x65\xf7\x36\x42\x38\xc5\xee-W>\xed\xde\x32\xc8\x95\x12Wvo\xf5\xac{\xae\xdd\xd2}" "\xb4\x36\x9a\xd2zs`\x8e\xfe\xb6\xa6\xc5\x8e*\xbb\x82G\xce(\xed>ZV\xfch\x15\xb5G\xcb\x43\x1e\xad#G\xa9\x33\xd9\xcb\xad=" "\x65\xb5xU\xe9\x14w\xa8\xc8\x83\x36P\xb9G\x36T,\xf9\x38K\xd5G\xfb\xf0\x1f\xed;\xb3\xf9\xac\x42\x36\x30\x1f\xad\xa3\x45i\xa5\xc0" "#W\xbb\xea>\x46\xb9\x06\xf9v\x46\xc2u@\x88\xd0\xf8\xa0\x95\x0f\x8f\xdes\xd9\xdcSI\x85wK\xe7\n!\xeb\x8e\x8f\x0c\x87!\x9c" "\x1c\x18\x91kY\xc4\xdf;Rs\x01\xe9%&" "\xbc\xceY+\xb0\x63\xe5@G\x1d\xac\xb3_\xc9rG%\xedo\x04\xbcs\x33XT\xffUI\xf9so\x43\xaa\x46U\xeb\xb2\xea\xd0\x95" "\x42\xf8\x31r\xa6\x93\xfb\xa1\xe2\xca\x41X\?\xb3\xde\xba\x8e\xe5\xbdJ\xab|t\x82\xd5H;\xfb\xef\x46\xae\x92\xa3+\x86\xd0\xeav\xc2#" "\x9d\xa3\x1d!.\xae\xa8\xf2\x85\xee\xd9\xde\xec)\xce\xe0\x17U\xa9\x1a\x87\xe4k\x97l\xdd\x92\xed\x9f\xb0\xfd\x64\xa5\xbe\xaax\xdaH\xd5[" "\x43\x0e\xc6p]\xa2\xdes\xc6:\xc9\x86\xa7\xd2/\x99\xd1\"\x84\x39\x9e\xc4/\xd0\x1f\xa6>;\x96\x08\x9d\xa8\x7f\xe2\x8f*\x62\x86\xda\x61" "\x14x\x61\x8e\x37\xc2\x65\x87\x41\?\x81.x&m\xfe\x43\xfe\xd0\x1f{R\xb3\x65L\xba\xb6\x64\x66\xb7\xcbQI\x90\xd1\x1d`rN@" "\xb7ku\xc9.W\?\x10\xb2i\xd5M\x16\xaf\xe4\x16\xc5\x45\?X\x15\x9c\xbf+\x9b\xdd\x00\x65\x63@}\xd9\xa4\x9dM\xf3s*\xc4\x32" "\xe8\x0e\xe5\x9fq\x41\xf2\x63\x1dq\xa1\xb6\xee\x44\x7f\xf2\xbc`\xc0#Q\xcb\xac\xb1\xee\xd4)\x84\x98K\xe9\x8a.\xa5P\xda\x65\xfe\xa7t" "\x62\x42qI\x05\x9fZzu\xa8\xbaqr\x19\x82\xee$\xc0\x30\xb1\x10K\x37\x08\x39\xf0\xa2\x0c\n\x8f\x1c\xb0\xa7\x62\x11\ts\xb1\xb0\xde" "\x04U\x92gq)\x66\xaaN\xc5M\x9dN\x83\xd9\x42\xa2\xcegN\r\x87\xf9\xb0\xa5\xca\x7f\xfb\x15\x31\x9a\x33H\x7fL\x98\xba\xa6\xfb\xe7" "\xb1\xa9'i*\x04\xfc\x16'\x41\x81\x8f%x\x38v\"\xcc\xeaW\xb0\xcb\x86\x95\xdc\xef\xa6\x1c\xacN\xd2\xbf\xfc\xa3\xacg~\x12Tj" "\xfa\x0c\xd9\x95=\t^\xec\x46[v@\xac\x07&\x9c\x16t/\xb6!\x45\xdd@=Q\x61*\?\x18\xcd'\xd6Y\x39\xb1\xf1\x9b\tg" ";\t\xb7\x63\xf9\r\xa3\xbd\xab\xfav\xcao\xac\xbb\xc9\x14\xfd\xf5\x44\xed\xba{\x0f\xc9\x46x&\x61\xe6\xcb)\x37\x44gjQ\x1c\xd9\x99" "\x84\x45\xa6\"\x7f/\x9c\xe3)|\xc9\x38\xd3\x45G\xa9\xb0>\xb4+\xab\x04\xc0\xfc\x1c\x84\?\xc3\xbf\x96\x96nK\x1e\?\x82\xed+\xd5+" "o\x33|\xe3\x1b\x08':\x88\xc0\x85)\x44\xb1\xf7T\xa9\xf5\\\x36\x8e'\xe1\xf7\x01\xb9\xb0\xd3/\xfa\xe4\x9a\xc7\x64\xc8\x7f_\xe1\x43(" "\xe5\x43\xfd\xc4\x8a\x97\x89.\x8d\xf9\xfeN\xdf>Q\xac\xf7M\x38I@\x08\xffo!\xfbP,\xe2\x15\xf8\x37 \xa8\xcaoQ\xcd\xc9m" "\xaa\xb6\x1b};g\xb5T\xf9\x82\x8c\xddI\x9cyr\xfa\x95\x89i\xa5\xfa\xc4:g&\xba\n\xc2{zz\x1b\x07\x9a\xc4\x0f\x83\xe0\xaa" "jY\x9f\xaa\xe4\xb4\xe0\x0f'~\x9d\x86\x0fS:\x9e\x8a\x9a~\xcb\xe3M\xdav\xb4\xb9\x1dg\x8en\xf6Ir\xaa\xab\xaf\xc4\xbb\xa2\xa9" "\x1b]\x9d\x8e\xd9\xda$\xb9k\xe8]N\xf8\xdd'\xcf=\xff\x98\x92\xe7\x81\xd3z\x41&\xba\xdc\x8d\xbc\x90G>\x1cz\x8cvm\x8d\x05" "\xe5\x8a\x44X\x14\x30\xdd\xc4\xba\xf0\xf4w\x8b/o\x1a\xf0\xa1L\x83\xec\xb1\x14S\\\xfaY\xd5'\xc9\xaa\xd5\x94\xf3o\x94K\xf2\xe6\x87" "\xe4\xf7:\xb5OhJ\x07#\xe1\xa8\xa5G\x9b\xbcR\x8d\xbf\xe4#\x0eKu\xaa\x9f{\x92\xd5(\xa5_\xb7\x8d\x8d*\xd5\x8d\x91\x43\x0f" "\xaa$\x65\xfd)\xbc\x83\xa9k\x06\xdc\x10\x62\"\x96\xf0\xa1\x15\xcez\xbf\x8b\x16\xd5\x33\x92\xe2\xd4\n)\xa5\xfc\x9fT\x16Tl\x42M#" "~\x0cSz\x8f\x08\x11\xbd\x08\x94\x46\x12}\xd9\x44\rr\xe4\x98\xbf\xb6Z\xf2\x34\x9e\xde\x19\x1b\xe4\xbc\x15\xe7\xaf-\xe7\x9fZ\xe5l\x1a" "\x7f\x16\x8c/$\x9b\xa1S\x46g\x91k\x62%\x61\xca\x30} \x63l\xabi,\xb6\x34\xa2\xf5\x8a\xcf/y\xe6\xb3\xf7\x9b\x61P\x8f\xee" "\xc2\xaa\\\x0b\xbatt\xd7\xbf\x8bJ\x30}\x97\xa6\x9a+)\x04\xf6T\xfc\xdaN\xd5\xca~\xc1N\xf1\xf5\xefO\x99\x84\x03\xb2\x12ig" "\x1d\x1c\xfc\x30\xa2\x86\x98\xac\x83\xaf\xad\xd6\xb5\xb6\x04\xb3\xe6\xd2\x1d]m\x1d\xe9\xd2r\xd5S\x1b\x8e\xfdg\x43xy\xca\xb5\xc6\xb8\x19\x0e" "\xbanj\x61\xc3QT\xdd`\x9f\xb7\x9a\xff\xfe\x41\xc7_[\xe9!\x92\x83\xa7\xdf\xddk:\xc7\xb5k\xdet\xc2\xeb\x1b\xb2\xd5\x0f\xb6\x65" "\x1b\x97R\x15>\xde\xa5jT\xd5\x10W\xbb:\xd5x(\xcfI\x32\x10*\xb8\x19\x81\x96_\xac\xad\xa4Q\x06\x07\xb7\xd6;\x01\xc5\x42]" "\xcd\xf0{\x9d\xfe\x01\x1e\xd8]s\x43\x13\xb2\x9a\xb0\x66X\x85\xee\xda\xef\xd0\x86\xfa\xcd\xbd+\xcc\\P\xb1\xb7{\xcd\x88\xd1\x42\xfa\x8c\x08" "k\xeau\xc7\x1e\x98\x35|\xfa\x66\xf6\x9d\xad\xe9|*\xc4\x8a\xa3J\xde\x8b\xf5\xc1+\xd3\x93\xb6t\x31)\xeb/\x84\x62\x13t\x1d\xf6\xa4" "\"\xfen\r\xd5\x35WW\x12\x8e\xed\x88\xd3\x1b'\x17\x8e\xa6\xf9\xddv\xd3\x9fU\xf8\xf5\xc1)\xce\xdd\x35\x1d\x44\x85l\t\xad\xb9\x94\x98" "p\x83\x8cr\xcd\x19Z\xc2\xf3\xf7\xf0\xaam\xc5\xde\xda\xeank.\xe0+\xc4\x9al\xc2O&\xb3\x18\x1e\xe1\xc2\xdd\xa9\x91\xfb%\x08\x44" "\x01jk\x9aN&k\xc9\x9fI\x36\xeb\xd7\xc9\xeb\x92l^\xe9\x1a\x62|\x7f\x1b\xeb\x80\xdep\xa1\x8a\xee\x86.\xd9\xdd\x8d\x95\x1d\x1b\xab" "xll\x90\x7f\xc3\x39\xb9\xdd\r\x17\xf3\xea\x1d\xd0\xc5\x10\x94\xfc\x97\xeeX\xae\x82q\xd5U$\x05\xb7\xa9\xe0\xae\x1f\xdc\x95\x82\xfb\x0eU" "\xa5\xe6\xd4)\xf4\x98\x86\x0e\x95.n\"\n\xf9-\x18\x14Z\x0c\x65!\n\xcdX!\xde\x8f\xf0\xdb\x16\xbc\xee\x1d\xd0\xf1\x03\xdc;\xa8\xe6" "\xce\xd3\"\xbfi\xa8\xbdSp\xfd\x42\x61u\xeb\x94\xda\x01'|\x8b\xc2\xba\xb1\xc2U\x45\xfe\xc1\xf4S\x45\x0f\x05\xf2\xf9\x9a\xd1\x97\xc5\x44" "\x30O\x30\xbc\xc8\xb1\xa7\x08*\x8d\xeb/\xea\xe3\x91\x0b\xbf\xa8\xc9\x83G\x33>\t\xc6\xce\x15\x62\x39g\xfc\x8a\x44)\xd4;HN\xcf\x8d" "\x97\xeaVh\xb7\xa3\xea\xef\xa9\x8a\x8a\x66\xe7\xe1\x17\xaf\x31i\xeb\xbb\xeb]p\xae\x65\xef\x82\x15*!\xda\x04 \xcb&\x98l\x08\xd3\\" "\xdd\xb9\xc9\x8f\x88\xe6U\x97#+T\xf8\x88`\xb2\x37\x8b\xe6x\xcb\xf0\x1bT\x1e\xe1TU\xc7\xa9\x1d\x37\xd7\x97T\?\x05g\x1a!\x19" "\x8a\xfd\xe3\xe9%\xfd\xec\x1fJ\xae\xc3i~\xb9\xa8\x36`\x43:\x30@\xb5\xf7\x87\xca\x8a\x41\xac\xa1\xd2lV\xd4\xe3;Yy\xd7\xfe\x7f" "\xac-\xd9\xc3\xe0\x38\x82g\x8biW\x15\xd5\x9f\x38\xb2\xdd\xbbH\x0e\xcf\xc8R/\x1a^\xb0\x02#\xaa\xcc\xc7\x9b\x34\x9cH\xa8y\xba]" "+\x07t(Ss\x45\xc2\x1f\x44\xb8\xb9\x32\xe2\\\xf9\xe0\xa0L\xa2l\x14\x9e\xd7\xc9\xc2\x84\xbc\xe6\xfe\xac\x99(\xbb$\x1a\xd0\xc2\xe1%" "\x39\xce\x05\x17\xbbx\x95q\x15N.\xfe\x94\xed;\xb5sL\x1fH\x34\x8a\x85\x88\xaf,\xc4\xba\xa4\xca\x19\t\x37\x62\xe1\xd6\xf6\x43\x95\xa5" "\x97g\x87\x91\x30\xcb\xdb\x0eO\xcf\xc8R\xd7\xd8w\x86\xa5/\x9aO%\x92\xdfm>\x1c\xe1\x83\xcf\xb3\xd3ZX\xe5\xe3\x62\xcc,\xe5\x88" "\xec\xf1\x89\x32\xe0\xa8p\xf5\x19\xe4g\t\xfa\xde\x45\x61\x05\x8e^>>\xe0\x8d\xc6G\x1a\xfa\x39\x1a-\xa9P\xbf\x11\xee\xf0\xd9\xe5\x93\x83" "s\xe7\xde^\xecI\x15\xbe~\x93\x98$\xd2\xbb\x62\x0fT\xef*\xc8\xce\xc8\xb3\xb2\xb1o\xfc\"\xe1\xc8)\x44\x14R\xd0\x12\x33L\x94'" "\x30\xd9\xa5\xde\xb3\xb9N\x42\xcc\xb2\x13\xa2N*\xbc\xb6\x03\xf1\x8d+\xe3\xdd#\xab]\xa2\xfc\x98\x35\xfb\x35\xba\xfc\x84\x63\xdb\xee'\xe2w" "v\xc5\xce<\xa1\x9d\x35\x44\xd8G\x30\x92\xc2pk>\x83\xb2\xa1\xf8\xe5L\xdd\x00\xa0\xd2\x80\xa4\xa6lT\x1dJ\xbeX\xc6\x85\xa0\xf2!" ".UK\xe3\x8e\x44\x0f\xa5\xb0\xce\xa7\xc3)\xe8\x42\xe6)W\x9cz\xde\xbb\xa2\xef\xb8\x10\x83\x17\xca\x0f\xb2\xdd#\xbb|\x38,~\x85\x18" "\xaa\xee]\x31|\xbap^\x33\xf2\xfctn\xea]\xb1\xa1%\x44_\xa0\x10}\x81\x98\xe3\xaa\x93|\x0f\xb5\xb6\xd7+\xb1\xf7\\\xc8l\xb3" "$\x0f\x35\x1ds\x82JN\xafl\x9f'\xfa\xff\t\x87}\x92\xbfy\x62\xbb\xba\xf7\x14^\x94I\x8c\xde\x81\x61\x65\x10\x1f\xf3\xaf\xf4\\\xe9" "\xbdpL\xbbW\xd7\x11\x99\xe5\x8e\x11\xf5]\xd1\xd3\xbfWg\xdf\xbd\xd0\xf6\xe5\x32{\xbdz\x84\xb5<{\x33N\xf7\xe6\x14lQ\xfc\x95" "R\x92p\xaa\xd0{-\x44\?\x35\x98<~\xb2+I\x14\x1aO\xbdY\x90i;-[\x9c\x05\xa7'\xd1\x45\x9d&\xda\x1c \xa7p\xa8" "\xc9\x03\x04\xcf+\xb2z\xedLn\xef\x92\xf7\x1fNR\x91\r\xd2\xfc\x99MY\xc7T\x65\xe7\x41\x44\x32\xe1\xf8\xc9\x19\xbc>\xa6\x66\xe3\xc5" ">J\xa8\xf7\x03\x46\x93\xa0Z\xce\xe2\xd7\xd7T\xf1\xc9\xcc\xd2\xf5[i\x1e\x65\x39\x9d\x80*M\xc6\xaa\xa4\xd2\xe3\x8f\x84\xce\xd0\x42\x96\xaf" "\x33\x06\xfb\x02\xff\x92\xf7,\xcc\xdc:\xd3\x1drW\xf8\xdf~\xe6\x84\xc7\xaf\x92\x17\x1b\xde\xe5\x9d\xc1w\x87\x31\"\xa0$\x93\xfaW\x31H" "\x8a\xa8Q\xdb\xa9\x05g.\xefJ\xccx\xf7\x9c*\x8f\xc5K\xf5\xf7\xb0\x38\x64\xdd\x9b\xc9\?\xa7\xdc\x9b\xdf\x1e\x17\x00\xe9\xcd\xe4\x84\xe4\x15" "\x1f\x43<\x9f\x93\x9f|\x17l\xb7\t\x31\n!\xac\"=\x7f\xdb;\\\xb3\xe5.\xc4\x0c%!V\x13\x15\x62\x81\xec\x9e\xcd\xac\xe9\xad\xe9" "*\xd3[\xb3\xfb\x12L\xa3\x16\x89\x42\xbf:\xc8\xc6\xab\x98\x65u\xb5\n_&\xe9\x06~\xf3\xc2.\xd9/\x91\xef<\x13\x87\xcezV\xa9" "V\xbe\xd8\xe7\xb5\xa6\xdb\th\xf9\xf8:~\xe1\x19\x39\x92\xd8[\xeb\xec\xf2\x32o\x89\xfeZ\xbd\x9f\xa8\x7f\xe3\x8csS\xae_\"y\x65" "\xa1\xe5\x0c/'\xbfX\x85H\x14\xd6\x1cGN\n\x86,\xb8\x94\xe9(+Tj\x62\xb2to\x13\xa1\x11\x02\x46G#\x9a\xcc\xd4\x36\x1c" "\xc0\xecm\x92\x06\x35g\xbd\xf7vv\x0b;\xaes\xde\xdb\xd9!mt\x46\x88\x96to\xc7\x81\xb7\xde\x8e\xe3,J\x9cr\xc7\x90\xbf\x42" "\x66\x8e\xbb\x04}\xd9\xfd\x13\xa9kp\x81p\x31\x11\x19Q(\xdf\xeb\"K\xff\x38Q\xdfs\x1d\xf8\x84\xab@\xff$|\x98p\x14\\\xcc" "\xd7\x43\xce\x0f\x10\xb3i\xfc(\x63\x64v\x08\xc5\xeeg\xe1\xbc\xa1>\x08\x0f\x13\x96[\xb2\x01u^\x30Y\?\xb2\xdbqO\xfd\xcf\xd1:" "|\xd3\xb9r\xffn\x0e\xb2#\x36\x43\xfa'\xf1u\x8f\xf1\xa3\xc4\xdc\r@:\x16\xf7-\xfb\x16\xa2>\xd3/q\xb4\xaa_\x62\x9f\x32\xa8" "\xf3yP'\xee\x97\xb8(X\xbf\xc4\x10&\x42\x04\xef\xedO#\xc4\xde\xe9\xcf\xe9\x43!\x44\xaf\x01\x18Lm\xa6u\x7f.\xc5\xa7\xb6\x7f" "\xb6\xb7\xae\x34\xb8(\xdc\x0cU\xcdI\xb4\xb6\x41\xbe\x42\x98Z\x96\xa0\xec\xed\xcf\xe9\x84*|\xd8\x80\x1cq\x11jp\x9c\x42p\xcc\x83\xb3" "G\x45\x88\xa6\x97N\x63\xffr\xea\x92!\xcfuW\x61}\xc9\xf2T\x14\x9a\x88\xfd/\x96\xcb\xc2!\x7f\x1bO\x34\xe9\xf4\xbf\x35\x83i\xbd" "\xb3+UU\x31z>\x0f\xaaOT\xcb\x82\xf1\xd5\x19\x1c\xc9\xf7\xdd\xa2Z]r\x88\xaao\x83t}]\xbb\x87\xfe\\j~:\xb5\xcf" "\x16\xa5\x33T\xb2\xee\xa7\n\x8e\xc5\xc2\xd3/\xdd\x07\xfd\xc7\xae\x62\xd4\xac\x45\x9d\x95\xc3\x83*\xe7\xbf\x8a\xba\x1c\x93W\x35\xb9\x11\xfa\x41\x89" "\x42\x9f\x18\xc8\xda\x8e\x9a\x1b\xb2z\xa3\x83\rk\xde\x00\xa7\r\n[]\x1d:\xe3[\xf9\xd6^\x93\x17\x8b\xaa \xaa\xdd\x10\xf5\x8bP\xc3" "\xae\x38\x63@T\xa7\xac{\x62\x1dVQ\xe3\xaf`r\xc9\x11\x04Q\x93S\xa7\xd6\xbfwv\xfe\xc9\xa5\xde\xcc\xdc\x1e\xc6\xd4\xb6\"\x0b\x05" "\xf7\x1e\xa8\xf6\xaf\x64\xbe\xd8\t+\xea\xbb\xbd\x7f.t\xe1[\xd2\x37\x15`\x30\xdb\x15\xbb\xf7Um\xf4w[{P\x9b\xbb\xbd\x17\x1al" "\xe4#\xdcp\x9e,\x94\xeci\xdf\x84+\xff\x1b\xfa\x32\x85\xbb\xa3 g\x8eU\xaa\xca '\xe7\x81\xe1\xa6\xc3\x18Q\xa2\xae\x06l\x94\x88" "ys\x42>\x9cz\xda\x08Km\xfb,\xd5\x94\x96\xae_\xb0}\x9c\xc2\x37}\xd4+\xdbG\xee\x41\x92u\xa7\x9c\xaa\xb3\xb2\xa7\x02\xdd\xad" "Tg\x64\x35(]i\xc0\xf7\xac/\x83\xc9\x9a\xae\xbaP\xfa\r [\x14\xd5\xbcM/\xe1\xbd\xae}\x18\xf0Y\x17\xb5\xba\x0e\xafz\xcc" "\x35\xa1\xf6\x12Wt\xb9\x93\xb4\xc2~\x1b\xaav\xd1r\?U:\x04\xef\x8a\x9f\x98R\x9e\x32\xeb!\xa2J\xfe\xcd\x7f\xd3%S\xf8<\x36" "\xf2\x61k,\x39)\x1f.\x1f\\\xc5\xdd\xc3T\xf5y'\\&\x0b\xd4\xc5\xc4\xc7\xaf\xaeX\x81\x16S\x83\xf9\xb4\xfd\xbd\xd3\x7f\x02\xa4\xaf" "v\xff;>\xb8\xd4\x05$\xd0\x99%\xea\x82\xdf\xa0$M}\xb8\x93K\xaa%\x9f\x62\xbc\xdd\xa6\xa1\x64\x44\xedR\xea\xe4\x61\xcc\xcf\xeb\x7f" "'\x07\x45g:\xe2\x0b%\xaf\x37|\x1a\xa7\xaa\x32\xf4O\x44\xd5_r\x11\xa5K\x31\x8f\x8eM=\x45O'~\x46\xf6\xaf\x80\xac>\xf7" "\xb9\xccV\xba\x35i\xef\x92\x13\xe6\x34\x42Ov\xc9\xe3U\xf8S\xa0\xb3\x83*&\xac\xa4\xcd\x07\xc0\x00\xda\xc2\x85zZp\xd9\x0eQ\?" "\xf5\xe0~\x1c]\xe0\xd0\xcb\xdf\x05\x92\xd8\x92s\r\x84L\x8eK\xae\x9d\xdd_\x46\x03\x1ck\x19\x1f^\x90\x17x\x18K:\x00\t\x31\x83" "\xa4\xbf\xb2\x32\x63\x85\x38\xcf-\xbd\xb9\xf1+\x1b\x8a\xff\xb5\x8d\x85\x38\x36K\x39\xcc\xba=\xd5\xb8\x41O\x06*)\x07\xba\xd7\x7f\xea\x86\xf1" "\x37\xa1\xa4J\x11\xe9\xb4\x8b\xc5\xdf\x86\x1f\xf6\xa1R\xb5\x7f\x12\x04Q\x86\x8a\x0e\xc7\x31:\xb3\xa1\xe2\xcfi\x80\x9a\x0cT\xd2|\xe4\xaa\xa0" "\xa6,\xac\xb5(\x16\x05+\xf6\xa8\xf7W\xe9v\x96\x89\xc2\x32\x89\xde\x8e\xfe\x8a\xbet\x42t\xa3\x83\x1a\x97\xbe\xf0\xed*(,\x38\xdf\x84" "\xaa\xb6\xb2\xfcw\xc5\x0ew\x61.\xef\xc4\xaa\x11w\xae\xa4\x11\xc5\xce\x03\xa8h]\x65;Y\xd4\x85\x1d\xef\x32\x1b\xfc,\xcd\xe4\xcd\x30\xec" "\x1a\xa8\xa1\x0fNG\xa9zo\x05\x95\x13WR\xf3\x64\x1f\x11\x94\x34\xfb\xf6\x37\\\xdb\xf5\\\xf3)\x07\x0f|j\xe9uW\xa6\xc1\xe4'" "=q\x45\x8a\"\xbe\xd7\xa0\xcaw\xc8z\x32h\x9f\xef\x8a\x93\xfa\x85\xac\x06\xac\xac\xbe\xa0\x0c\x8b\x13\x36y\x45\xd9k\xb7\xbck%\xe9\x42" "'\x13\x15\xec:\xc6-\xa7V\xd8N\xed$X\x35\xado\x8b\x64\x83\xe9\x85N\x96\\\x43\xdd\xcd\xfd\xcb\xc6\xec\x62!\?\xa1U\xf0\xdd\x30" "\xda\x8b\x83g\xa8\xd0_\x87\xffns\xe7L\xaf\x12\x43_`\x9a\x18\xc4l\x94S\xb3\xd5\x8d\x0f\x32\xec\xb6\xc0\x06\r\x31\xfe\xf7\x63}\x33" "\xcf\x8d}\xe5\xefiw\x14\x61\x04\x00\xa6\x1e\x82_\?\xd4\xd5\x87\x1c\x82\x95~n\x80\xbb\x39\xcd\xebj\x90O\x15\xe3\xd4\xf5W\x96\r\x08" "o\x8d<\x18\x1d\x94\xc1\xff\xf0\x94\xe6\xb6\xf1\x97\x9b\xff\xe1\xf9\x8bm\x1c'\x10\xd3\xd2\x00=\xa9@\xce'\x10\x33w\xe1\xd4\x9cys\xeb" "\xcajy\x62\xf2}I\t\x43^\x32\xd1\x84\x37L,\x0c\x1e'\xc4\xf0\x08(\x9f\x98\x7f\x98\xa2\xb8\xa2\x93\xa9\xb6\x91\xef\x91\x0b\x63\n\xab" ";\x7f\xe4{O\x9f\xf3\xe5\x41\x36\xfe\xc4|\xbd\x66;N\xcd\xa6\xd1\x1e\x41\xd3\x9e \x33j\x65\x90;\xe4\x10\x1f\xd5y\xcf*\x10\x7f\x8a" "\xce\x1a\xdcpu\x11\xfd\xf4\xd9o\xcb\r\x85\x07\x06,\xdcS\xeco\xe0\x06K\x15j\xae\xce\xdd\x0c\xdf_\xc3\xda]\xaa>\x33{\xa6\x35" "\x0b\xa8\xe6nZ\xc5\x07\xe6\xcf]p\xf2\x91\xbe\x99i\x31\x9e\x1eq\x9e\x12\xd5\x66\xce\xb9xP\xf4\xcf\xa2\xf9\xb8N\xefl\x66\x84\x63#" "\xa8\x93\xb6\x30\xb4\x02\xc5P!\xfd\x15\xc7\x8b\x84\x87|\xb2VkXq\xb5\x65\xe1\x03\x1f\x1c;\x44\xc1\xbd\xbc@\x14g\xd7\x89\xc9\xda\xc4" "\x8a\x9eg\xc2\xea\x81\xd3\xd3V\xd4\x9f;\x83\x97\x8b \x7f.\x9f\xfa\xaf}\xaa\xda\xda\xa8\xda\xbc\xb4=%\xb9\xab\xba\xa8H&\xc9\xe6\xc4" "\xca\xf3\n\xfdl:\x87\xbf\xcbZ\xaa\xfe\xb2\r\xbb_\xbbu\xf9\x17\xe7_\x19+T\xd4\xd0\xf6\x19\x31)\x46\x96\xf7\x31\xa6\xa4p\xcd\x1c" "\x81\x63!\xc2\xcd\xb5\xd1\x9e\xcf\x8eY\x0eW&\x15\x1e>\x19y}\xf4\xbfR.\x9d\xbf\xdb\x1d;\xb4\xa0\x92\xe1\xa3\xe7\x45\xf1\x19\xcf)" "\x8d\xbf\x88M\x97\x95_\xe6\xde\x15\xa7\x63\x37\x62\x96\xed\x64\x18\x1a\x13\x36Xr\xc4\xbd\x03\xad\x81\xbe\xb6]\xc9\x8e\x1c\x36\x13\x35^\x39=" "\x97\xf0\x32\x44\x83\xe4\xee^\"\xb6\x14V\xecV\x14N\x8f\x9c\x9e\xcc\xc5\xf4\x0f\x42\x93\xa2\xd5\x02\x38\x9b\x1e\xf4\x0c&\x9e~\xffJ\x05\xa6" "\x39u%\xd5\x7f\xce\xdb\x84\x8a\xbf\x66\x9e\xee\xe2\xef\x1b\xa7\x64\x13\xf1\x17\xdf#\x07\xed\x85~\n\x8c;*\xed\x01\xec\xae\x9d\xec\x34\xe8\xaf" "\x18~Wh\xf9\x14\x1d\x99\x85\xa5\x9e\xf1\xc3\x38w\xea$\x1cV\xa0\xa0\xde\x0f\xdc\xf4\xdcV\xcd\xab\x06\x43-R\xcd\xd2\xdd%\xbd'\x8f" "\x9f\xa9*~\xc6\xf9\xefT\r\x99x\x92\xc7[\x63\xd1h\xd7P\xce\x1a\xf3Nk\x98\xae\x92'\xfb)zw\x84\xcf\xfc\x0e\x93W\xfb;" ":\x88\xfb;yX\x61\xf5\x35n\xb6,w\xdcq\xfcLi\xb3\xf3\xc4\x84_\x0b\x18\xd5\xe7\t&\xe7\x43\xc5\xcd\x43\xce\x35\x16\x85\xa9G" "\x42t\xc0\xf6\x35\x85r\xb6\x62\x7f\xc7nI\xe1\xe9\xce\x99\x94\x8f\xe9y-\x8a\xd5\x46%\x03\x94\xaa\xb9\"\x9f_H\xb6Nv\\'S" "\x88\xe9\xdb\xa0\x95\xbdj\xda\x0b\x82\xc9\xcf~g\xc5\xf1\x8e\x83H\x42\xac\x43\tZ\xb5\x14\x66\xb9\xe7\xa6\xa5J\x35-\t\x8a\xc9\x07%\x15" "\xd4\xe4\x85\xcf\x43=\xe4\x31\x19\x01\x66\xfcuN\x7fRQ\xec\x90\x11\x8e\x8d\x8b\xf4RX\x0b\xddY\xcbS\x99^\x15\nv\x98\xe1\xd9\xdc" "\xa8O\xcdZ\xfb;z\x01\n\x0b\xb7\xe4\xd3\x03Ym\x1by\x03!\?_\x65\xd0z\xa0W\x08\xd5\xf6\x80.L\xa2\x98\x8b\xed\x38\xea+" ",\xf6\x9c~\xc7\xea\xf0\xc5\x9cog\x99\xaeR\xaf\xa7\xf4\xe5*\xcc\xdd\x85\xb9\xb1\xab\xf4\x97\x62\x8e\?\xacM\xb7\xe3\xc2\xd1\xc2\xc1\x9bS" "}`\x9f\xf9\x00\xa2U\x43v\xe7\xaaJ\xaaHN;\x15\x9e\xbf\xc7\xcf\xefq\x95G\xa2\xf7\x9e\x90\xf9T\x9a\xb2\x84\x9e\x66\xc4\xa4\x1f\xae" "\x98\r\xe3\x17\x1f\x39\x9d\x0c\x94(\xc3v\xc9\x41\xc1i\x1f\xa8\x9a\xf2\xe5Y\xb1\xaa*\xde^\x07\xd3\x63SL\xa8\xc9\xe9\x8d\xbc\x9e\x84\xe5" "\xd8\x8e\xf3\x1c\xc0\xe0\xe7\xde/_\x94\xb4\x38\xfeT\x8e\xac\xf2\x41x\xfa\xd1\t\xb1l\x33\xee\x92\x1f\xcd\xfe\x07\x07Q_\xab\xbb\x83L\x90" "=\x30\xb6I\x34\x17@\x16\x8c\x30\xe3\xd7\x1eWO\xa0\x9a\xbf\x46h\x08\xa8Z;YH\xd2l\x1e\xb0\xdb\x16\x8a\x13T`\xb2\t\xe9&" "\?\tQ\xf9S\xf2\xaa\xed\x64\xb5\x0b\xa6\xf6q\xa2\xca/\nQ\x0b@\x8d\xa6\x87^[(\x8dW\x85\n&\x14\x1f\xb2\x9a\x8fN\xce\x93" "\xa2\x39\xf2\x83=\x86\xf5\x81\x9b\xe9\xc8\x04\x15z\xc8\x61\xa6[\x11\x0f\x00\x64\x0f\xcb\xc0\xba\xb8\x84\xf5\x16\x89\xf0=\xa0v\x1aV\xedn\xa6" "\?\x9c\x8c\xe4\x66\xb0\x38t\x15\xb7%W{\x82\x62\x18\x1f\xe1\xe3\x96lL\xc2\xf5M\xd4\xdbP!\x00\xdc \xc3\xee_\xd0\xefRL)" "\x46\xfd\x45\x88\x62\x41!\xa6\xbd\x31~\x16 \xdbm\x30\xd3\x9f\xd7\xe7\xfe\xa2\xc5\xe4\x87\x05\x33\xf5\x01\xa5z\xdar\xc0V\x14\xd6%\x18\x64" "Xx\x0b\xbb\x1d'\x9b\x8e\x62\xc2\xa9\t\xe4\xbc&\x31Q\x12\n\xf1Q\x0c\x32I\x86\xbf\x66Q\x32\xb0\xc8\x9a`t\xf9l{\x1d\xb1=" "\x0c\x46\xf3:\x03\xea\x0c\x8e\xa4\x0eK^\xe7\x8doN\xe6\xad\x62>THt\\\x82ro\xbf\xdb\t\x15\x46\x00\x85\xcb\xc5\xef\xf2\x31\x18" "\xd7\xa9~\x8eu\x11m\x8c\xac\x0e\x8e\x18\n\\\xe8\x1a\x8e\xb0\x83#\xd6\x41\x85\xe7<\x96:\xaf\x66\xbe\x39\xd4!\xaa\xc8\xf3G\x65^\"" "s\x1f\x30=\xc0s)\xfd\xad\x98\x7f;\x46\x9b\x01\xcd\xc1\x91\x33\x8d\x11\x42\xb5>I\xd5\xdb\r\x39\x1d\xa4\xab)\x0e\x8e\xe2\xe7\x0bN\xbd" "\x12\xb3\xbe\x64\x99!&\xfc\x0f\x85\xf0\x31\x15\xc2)jp$\x35\x8d\xf0\xaa\xcf\x1cPU\x7f\xefy\x89\x92\xe7\xc5\xf5v\x06\xb6.\x9e\x10" "\x8e\x0e\xc2\xef\xb9\xf1\x9b\x84\xf7\xba\x10\r\x88\xc1\x31\xc7\xee\x84\xe8\x87\x17\xa2\x66\x37\x38\x8e.\xa8\xed)\x1dG\?U\x90\xb9\x93p\xc3\xed" "\xac\x0b\tK=\xa7\x1e\x05\xc5\xd3 k\x1f\xc1Yp\x82\xa3\x9e\xc9\?\xe3\xbdS\xfe\xf4\xf7\xd7{\x8d@\x83\xd1\xe5\xc1YR\xc1\x15\xe4" "\xed\xc8J\x16\xe9\x83\x9b\xe0$K\xa2L\x16Vo\xc8\xeeu\xba\x0b\xea,\x03s\x61\x1b\xdc\xb0p\x1b\xdc\x44\x88\xb5\x35\xb8\xa5\x03\x07\xb8" "\xbf\xba\xc8\xe0\x36\x42\xfc\x90\xc1m\x82\x06\xe3\xe0>\x41\xb4\x82\xc1\x83\x1d\xf0\x81\xce\xc5\x42L\xb8\x1a\x94\xd8\xaa\x10n\xf1\x95\x96\xd8{#" "\xe4\x07\\\xe2\x30\xb0\xb0\xf5@\xf2\x38\xa5\xe0=\x97\x9a\xe8z\x13.\x8b\xa0==\x65\xd8<\xa4\x89\xf9\x9a\xc2R\x86\xc4\xbcu\x30\x38\xad" "\x07\xa7\x07T\x88)(\x44\x33\x16\xf4s\x84\xaf'\xa4\x1f\xb0y\x98\xfe\xe9\xc3~\xc5GT\x8a\xae\xd6\xd1\xed\x11\xcdg^t\xb4z\x07" "\x39\xcd}P\xe2\x8c\x1d\x61\xc9\x39\x97\xa2\x94\xb3\x8a\x06\x36\x8c\x34x\x64\x85O\x88\x46\xc8\xe0\x31\x38\xf9$Y$=r\xf4\x62`\x33\xf6" "\x84\r\xee\xc7Q\xe6\xc1#\x03g\x08\xe1t\x33\xa8X\xc9W\xb1\x92\xaf\x12\\\xe2\xc2+\xec/\x10\xc2\xf3\x62P\xb1o\xb6\xc2\xb5;\x07" "\x15\xce%\x17\x32\xab\xaa\x30\x1a\xcf\xa0\xca\xfa\xac\x12\x39r\x35\xc8T\xb4\x33\x83\x05Z\xd5RR\x35\xb8\xbd!\x9f\xcf\x9d\xc1\xaa\xe6&\xdb" "\xfe\x62\xa2\x03K\x88\x86\x8f\x10\xfdG\xca\x36\xc9gP\r\xd1w+l\xa2\x30\x31\?t!\xc2\x1d\x08\x07U\xa7\x1f\x32>\xbe\xe3l/" "\x35\x1f\xfc\xb2,\xfdU\xe3\xca!\xf9\xc9\x13\xc4\xdb%{\x81\x06U\xce;\x05\x83\x42\xdeMv\x8f\x8ay\xc7\xfb\x94\x96\x83\xa5Q\x33\xc3" "w\xecP\x63\xc8\xac\x41\x8dmi!z\x80\xc1\xa8\x62\xf1\x04\x07\xb5\x98i\xaf\x1e\x9f\"\xcd\xb5\x7f\xd1\x9a\x1d\xb4\x83l/~_\xd2\x44" "\xddZ\x88Y\x93\x83\x36\xd7\xd6\x02\xad\x14ks\x39S!\xa2\x43\n\xd1 \x1a\xb4\xa3\xdc\x03\x86\x01wT\x15\xdb\xca*K\x9b!\x9c\x94" "'N\?\x97\x9f[\xa8\xed\x18\xacU\x39h\xb3\x1e\x38\xe8\x04=\xc9tZ\x34\xd7\xab`\xfb\x9d\x86\xba\x19t\xd8;\"\x1c \xedw," "\x87\xeb\xd1Y{\xf0&-\x87\xbfS\xce\x82s|\xe6\xb3\xf0\x08\x8fp\x16\xcfqi\x8bh\xa0\xdb\x87\x17l(\r-\xa0\x30\x18\x8cs" "\tVI\x1c\x9a+\xbf\x10\xcb\r\x80:\xce\x30\xd7\x15\xb6\xf8U\xe8\xb6{\x63\xcb\xc9Lzh\x33\x1a\xc1x\xbbM\x15&\xc4\n\x91\x33" "\x81\xba\xde\x41!\xe7Jr\x8c\xdf\xcd}\xaa\xd0h\xa3\xd9\x9c\xa6\xe6\xcf!WU\xdeS{\x07\x64\x9d\x84&\xaa\x43\x34o\x8e\x83\xa3\x02" "[J\xe9\x06L\x9b\xa7\x9a\xa7g\x8a\xb2]N\x41\xa7\xf2\xd9\xf5{\x8a\xa1\x00l\xc3\xda\xcd\x18s\x8a\x61\xf2]\xd2\x44Ksx\x41O" "\x42!\x16\x81\x14\x66/\xc2\xb7W\xbfl]\x35~\xb1\xe2,\xb6\xa1\x05r\x1aj\x00'\x66\xaaj\xf2<\x9c\xed\x03\x06\x05i\x8b=\xa4" "\xea\xa1\xc2\xc8\xc3Px\xf0\x17\xae\xe2\xd3\x01W\x80\xa3\xfa\xbc\x62\x1d\x41T\xfe\xd4h'\x44#^x}$\xaf\x38)\x9b\xc2\xf8\x0f(" "\xe9\x83\x9d\x13\xa2JL\x45,\xeb\x41\x84Gzs\xb5\x97\x96<\xbd\xe8\x04\xd9\x65'\xec\xbf\xbb\xd2\xd9iX-\x13J\xfd\x81\xcf\x9eL" "\xf1\x45\xd1\x91N\x88\x81\?\x30\x39\xc8\x31\xc6\x88\xaa\x1d\x39~r\xc6\xc7O\xf1\xb7=\xa3\xf1\xc0\xe9\xaf\x37\r\xf6,&\xdc'\x87\xe6\xfa" "\n\x46\xd7s\x9a\xdbog\xf4\xc1\xa4Iw\xfb\xe1\x85'.\xce\x0bQ\xf2\\\xe1\xd9\xa3\xbf\x1a\x16\x91\xc2\xdc\x30\xc8\x1f\xd1YV\x14*" "\x82\xc2\x87\xa9q\xe9\xf4\x44 \xa6\x0e!LW\xa9\xbaz\xa4\x37\r\xd5\xa6\xe1&\x17\xc7\x80\xb9\xb7\x83\xc6\x82\xf4\x1f\xa3\xcd\x0b\xfe.r" "\x9ex\xd8\xf1\xac\xec\x91\xd5\x13\xf5\x65\xb0\xe4\x9d\xfa\xf6\x88Y\xab\x18\xedO\xafg\xce\xdfm\x87\xad\x32Q\xa3\xa6\xb1\xe5\x0c\x46\x16\x9dZ" "\xd4\xb4\xf0_\xc9\x9c\xc3\xa2 ;R`r\x61\xe4\x7f\xd5\xde\x9f\xd5\x63\x38;K\x15*\xd2\x30\x99\x41\xc3\xf4/\xd2\xdfs\xf4\xac!\x97" "\xa3\ns\x9b\xa8\x92\x8b^\x06R\x30PU\xf9\x46\xb8&\x95p\xb8s\xee=\r\xf6\x8c\n\xed\xf9\xd2k\x07\xf4\xcc\x8c+\xa8\r/\xfc" ":\xe8\xb7\x07\xb2\x31$\xe6\r\x93\x8d\xa7\x02.~,\x1c\xf3\x10\xecm\x1cjHN\x1d\xf9.\x99\x9a\xb7t\xa4\xc0R\x08\x9b\x41\xc2\xaf" "\x99s/\x0bV\x65\x39\xb4\x98\x1c\xb3\x82\x99^\x82}\xaf\x42\xf5\x8aY<\xb8\nsol\xfa@\xe9\xe2\xf4\xdf\xef{\x8a\x65\x8b\xa8\x8d" "]\xd4\x96\x8f\x36\xc9\x94\x82G\xee\x98\x14Y\x18\xd4\xfeQ\xbc\xae\xa4\xfc\x15\x8c\x9f\xf7L\x7fj\x1c\xe3\x01={\xe7\xcc\x08%\xdf\x04+" "k\x43\xf3\x04\x18>X\x31\xf3@\x97\x1b\xe1I\x99\x64:\xb6\xfa/\xa8\x45\x94<\x91\xc5U<\xbd\xe0\x36~\xde\xc2\tk\x86\xc3\x87\xf0" "\xfc\x91\xbc\xbc\xb1\x34\xf1\x10^\xf1\xc8\x9c($\x44\x95t\xf8`\x39\x82\x92\x31\x06\xc5\x84\x9f\x80r\xee\xb4[z`XW\xa5\xed\xca\x94" "\xf6\x10\ry-\x8c\xfb\xa7|&\xd1\xe3\x32|\x88+\xeb\xb8rG\x13}\x45\x42\xbet\xa5.Yxq\x1a^\x9e\xfa\x06ik\x85\x95" "\xcfT\x1d\x9f\x87\r\x14\x12\x0f~\x83I\x03W_\x66%Ry\x61\xb4\x95T\xdc\xb4\x14[\xe6\x00\xb2r\x45\xa2\xc1\xac,\x38}W\xd6" "w\x84'\xcf\x96\xfb\x96\x39\x0bK\x98\xcb;-\x93-s\xb1-\x65\xd3\x38ur\xf0\x44\xcck\xfb\x15\xb3\x80\xb2\xbd\xd4\xb2%\xa4\x32\xfb" "\x1b\x85~\xb6\xb1]\x08\x82t\x0b\x31\xd5I\xe8K\xaa\xb8\x99^\xf1\xb6\x44\x9fK\x98t \x1f\x96\xc3\xb3\x07\xba\xc5\x8ay\xd1 k\x15" "\xbf>\x0e\x9f\r\xcb\xf6\x11\x95\xa3\xdc%\x89\xe1\x1d!_~\x99\xce\x0f\xc2\xea\x81S>\xe9xR\xd5t\x98\x9d\x46\x0f\?\xdcl\xf7\xea" "\xd7\xa1\x0e\x9di\x39U\xb6\xe4Q\xe6\x02>\x42w\xd8\x1e\x96-\xff([rP\xb2GhX\xa6_\xa9\x10\xbd\x61\xc3\x17\x86\xf0\x05\xed" "\x35\xbe\xfc\xaerN\r\xc4\x84\x19\xd2P\x1c\x1f\xa3y{\x19g\x9e\x18\x07\x1e\x1b\xac\x84\x83)\x39/\xfa\xb9\xa9z\xaf\xf6\x31\xa9\xb2L" "\x0f\xe6\xd1&= \xbcw\x87/\\\x94V\x88~\xe3\xa1-\xd5+\x44P\x12P+]p\xc2\x85\xd2)w\xe8\x12\xa1\x62\xe9\xaf\xa6_" "\x8e\x86\x16:\xffJ\x8f\x83\xd6\xa4\x90\xdf\xebK\x88\xd9\xf6\xc3\x97\xe8\xb2\x42\xf2\xbd\xbc\x44\xb5\x91\\\xa0=\xaa\x17.\xa9*\x44\x45|\xf8" "\x12\xe7\x66$V{\x11~>;\xd3\x90+P~\xb3\xec\xf3\x18\xbe\xd0)\x11\x0cr\x13\xf6Y\x42\x85\xd7#\x8e\xc4R\xfd\x1d$\x39\xb8" "&Ou\x39\x1a:\xad\x0ekV\xc7\xae\xd9\x8b\xaaY\xa9W\xfb{\x04\xb5\xf0\xbe\x41\x62\xb0X\x88\xc9\xb8\x42\xe6\x35\x42Trj\xec\xce" "\x00\xfd(\x9c\x1b:\xac\x31\x16\xadr\x46\x32'\xaf\x31\xe6\xc1\xb0N\xf7\x9a\x61]\xaa\x9d\x41\xa1\xcd\x80\xa7\xa2\x30\xa3\x42Xh;S\x97" "JUSgX\xed\x85\xac\xe4\xd6\x39\xf4\x01Z\x91\xaf\x66\xea\xac/\xaa\x39Ln\xcfi\xb6\x06t\x37\x16\x93\xf9\xb7\x92k*\xab)\x9f" "\x10O\xcc\xber!+\x0f\xf5\xe8p\x96\xa0\x91+&V\xb7\x05\xe3\xfcu\xf0\xce\x1f\x30\xae\xc0\xb0\xce\xc1\x62!\xda\x9c\xc2\xf9\xab\xd3\xf2" "\xa7\xba\x95\x30M\x36\x85\x87r\x87}r}\x42\x62\xc4r\xd8\xb6\\OZ\x8e\xeb`\x30\xdb\x33\x83\xce)\x15\\j\x84\x85\x9a\x16\xddo" "+*\x36Z\xda\xec\x37\x1a\x9a\xaf\x1d\x98\xfe`t\x1d\xa1\x17\t&\xa3\x46\x88\t_\x44\xa1]\x17\x97\x19PnH\x04\x11\x00\xd9\x8f," "&z\xcd\x84h\xcd\x83\xea\x94\x33\x43ri\x33R\x8a\x90\x0fS\x1a\xaf\xcf\xd2^\xb1\x82\xb6\xcdp\xca\xcao\xd2\x8e\x19\xf5\x90\x92\xda\xf1" "m\x99\xc4\x18\x85\xb0\x99\x35\xb6H\x8c\xbcr\xf9*Q\x18X\x05\xd3\xb5HU\xf1\x16\xe2i\x93\x44\x97\x8e\xf0\xcb\x34\x06;\x87\xed\xe4i" "\xbb\xf7\xc4\x38\xf8 \xac\x99\xb6+\x10&\xcb\x16\xbb\xf2\x87#\xcb~\x46t\xe5\x04\xa5\x8d\x9fn\xe5\x13\x19\x85\xe5\x95\xfe\xc1\xb6\x9a\xc2\x44" "\\u\xd8\xdbh\xb0_,\x39\x35\x1c\xc5\x65\x1e\x37\x9e<\x39\x65_KO\xaa\xe4\x31r\x46\x91\xa8%>\xbc\x89\x15\xb6\x93_\xc4GP" "\xae\xa4\x82\xcc\xa5\xdc\x87\x93\x00\x93&\x85\xe8\x1f\x12\xe6\xcfH\x16\x8c\x13N\x1d\x16\xb2L\x9aX{g\x62)\x46i\xb5\x85\t\xe3\xbb\x80" "\x96\x8c'\\\x90r\x38\t\x31\xf6!\xbc\x9f\x93\xac\x42Z\\\x07\x30\xfe\xbc\x36\xf3M.\x8f\x8e\x9dT\x8b\xec\x9f\xe2\x61\xad\xa8\x99\xa4^" "(\x62\xb2\x45\x30\xb1\xba\xbfR\xda\xae\x1c.\x1cZ \x87\xe1\xc4\x8a\xcd\x89\x65J\x93\xa8\xf8n\xfc\xe4t\x15\x31Y\x92N,\xa7\xb6\x08" "\r\xc2\xfa\x13\x89\x41\x64\xa5\x9e\xc3O\x17}\xdc:\xe3\xe3\x06M_\xcaXL\x84\x1aS\xf2Iq\x9e\xc9p\x62/n\x12_\xf2r\xe8" "\x7f$\x64\x65k\xc2\x0e\x13\xe1\xa4\x43~\xa2\x92<\xa1\xbb\x8c\xf0q\xe6\xf4\x43Y\x95o\xf9\xbb\xa8\x38\x93\xfbS\x33\xab\xf6\x19/\xa5\xb1" "\x1b\xad\x06\xf6\xb1.\xa5\x39o\xfc\x32\xae\xc9\xcb\x12\x99O\xe9\xc7\xa2\xcb,\x98To\xf7\xcc\xf8\xd9v\xc0H\x85\x10\xc1M\x85\x98\xa8\x03" "\xd2\x41\\\xcc\x96\xe4\x11\xbd\xe0\xfd\x86\x8a/ri\x39\x8c\x32=\x19\xe2\xe9\x08\xe7W\xce\xf4\x18\x8b#\xa3\x1d~\x61\xbb\x32_Z\x86\xe7" "m\x9do\x8f@\x45\xa2X\x9b^Z\xb2[\x86L\xd4\xc2\xba\xf1\xd5\xb8s\x32\xc0\x9a\x98/%\xe7\xef\xe2H\x1a\x42\xa9ZZh\x64U" "U'\x97\xa7\x11\xb3\x95%\xdb\?\xe4\no~i\x1d\x39J\xf6\x9d\x89\x89\x19/\xa0\xdf\x9d\xb5\x00\x97\xd1\xdb\x85\xb1l\xe4\xd1\xa2Q\xc1" "xm\xbcu\x06\x07\xb7\x1a\x1c\x35\xfd\xc3\xb7qK\x8e\x0f\x8cy+\x41\x96\xf4\xb4\x11N\xee\x8c\x1d\xe3\xd8\xa9\xa3\xd4\xfc\x90\x44\xbdGo" "'\x34\xa7]\xf2\x9d\xa9\x86\xd3G\x84\?H\xacK.U-\x64\nUr\xbe\x8d\x9a\xbc\xaf\xf8\x42*N\xdb\xf8\xd2v\xb8\xc4G\xba\xb4" "\x42@\xa9\x11<\xd8\x95g\xca\xea\xef\xaeX\x15_&\x96P<\x99'\x18\x9b\x1d\xae\xec%\nq\xfb\xab\xa0\x30\t_\x1b\x34G\xfc\x13" "'\xf9\x0bY\x98\xef\xd8\x91\x0cj_(\xe6X\r\xcd\xfdM\xda\xe3\xdf\xfa\xe1\xbd\x1d\xfd.\xeeH\x38\xb2\x82r-<\xe6\xdb\x11\xa7\xbb" "\t]\x8f:\xfaW\xd4\xb1\x44\x8d\xcf\x8c\xb6\x17&\x96\t\xd1\xa3\x03\xee\x1fkW\x8a\xce\xde\xfd\xb7\xe1%\x7f\xc3\xb8U\x42\xf4\x8f\xbc\x1d" "\x31\xe3x\xc3\x1c\x13|\xdco\xc7\\\x87\x46h:\xc6\x07\xf9v\xc2\x11\xdf\xb7\x13vm\xbf\x9d\xf0\xbd+\xdf\x9d\xbc\xdb\xb7s\xdb\x64\xd3" "\xc3\x85\x98\xf0\xfbv\xc1\x94+\x44\?\xfc\xdb\x05\x1f\xfb\xdb\r\xd6\xcc\x98\xfc\xae\xa7\xae\xc2\x8f\x19W\xef\x12\x85\x16\xdd\xdbMp\xf8\x41\xa2" "\xdc\x11\"\x82\x95\x10\xe5\x0e\x18\xfc\xb4\x83\x8b[*\x8c\xbc*k\xf2\x8f\xe6\xcdg\x80\x10\xdf\x62\xde\x0e\xe4\x1f\xcd\xbb\x33\xf9G\x13S\xde" "\x85\x8f\xeb\x00\xeb\x1b\x8a\x89\x99[\xc2&/-\x18/\x9d\x9a$\xae\xde\xa8\x36\xb6\x17\xda\x08o\x37\xecR\x13\"\xfa\x04(M_\xae:" "+\xea\xc1\xf8\x62{\xd7\x8e\xc9\x11\xcf\xc9\xc1\x0e\xe1\x17\x1fN\xf4|\xc6\x65R\xc5\xacL\"\xcc\x45\x7f\xb3\xf6\xbe\x10\xa5\xcd\xdb\rG\xb5" "\xc1\xf8\xf0\x89Q\x99\x45\x61\xa0\x43\x88\xe1\xd1\xb7\x1b\x96+J\xde\x07\x9b\x03\xc2\xe3\x85\x93\x9f\x37L\x8d\xc7\xb5\xe3s\x64\xf3\r\x64\rX" "\xccI\xd5\xc9\xcf\x45\xcd\x91\xd1v\x99\xf2\xba\xe3\x8fKr\x8e\x30\xf4\xf2\xa4z\xbcziLH\xfd\x87\r_Q\xa7\x97q\xa9\xc0\xc2\x45" "T\xb5\x91z\xd1\x98\xaa\xb0\x7f\x1d\x8a\x01\xe0\xd5l\x93\xa8O\t\x07\x87\xce\xdf\xf5U\xf8\x8e\x8b,\xb2\xe3\x00\xd4\xd5t\x31\xc2\x06\x15\x7f" "\x65Yg\x14\x85\x85W\xdfl\x01@!\xd6\x0b\x7f+r\xfdm!:k\x84\xbc@\xe1\xadSZ\xd9\xc1\xa8\xc4\xa8\x05\xb2!wN\x9e" "\xdb\x01\x30\xafTx\xb1%\x0b\x17\xc6\x12\x89\x8e\x03\x61\xa3\xe7\xd4\x99\xc1\xf0\xc0\x16\x85\x8c\x05\xb4wS\xe4\x32\xde\xc2\xb6\x1d\x00\x13\xed\x85" "\xa8T\x0b\xd1\xcd\x04\xfa\x8d\xb3\xc1+\xdc\xd8\x9f\xd0\x07+\x44\x95\xf2\xadhi\xb6H\x97\x62!\xfa|Y\xb7\x17\x85\xea\x99\xb0\xc0[\x0e" "\x9fy!!\x86\x8f\x85\x88\xa1\x03\xfa\x35\xaa\xc9\xcf\xbf\xc8`\x86\xc2\x19\xcf\xcd\xd0\xe8\xff" "\x9f\xaf\x37\xd1J\x9dy\xc2\xbdo\xdd\t\x15\x14Q\x41P\x01\x11Qq\x62\x46\x85\x84\xe1\x62\x8e\x19\xb8\x8bSU\xcfS\x81\xfd\xfe\xcf\xf7" "\xad\xb5\xd7\xfeU\x45\x08I\xa7\xd3]\xdd]]\xf5U\x11#\x8a\x0c\x9d\x88\xdf\x65\xd9$@\xb3\x96\x85\x8fx&\x98Y\x10\xf6\xae\xc9\n" "\xd8\xe7)\xadS\x32\xc2\xb0\x11q=\xb4\x1c\x8f\xfb\xa6\xb1\xc6W\x90\x37\xc0\xa8\x33\x1c+<\x01\xdd\xd8\x1f\\\xe8j\x45\xf5$\x1eT\x34" "\xfd\xeb\x02w\x9e\x9e\xe0\x82\xd2\xd3s\xb0\x80\x0b\x81\xb7\x87\xb0\?t\x46\x0fg\xea\x46xt\x95\x1d\xf0\x61\xa3iXXp\xf1\xdfO\xca" "\x81\xb4\xdf\x96\x9b\x81\xe1*\xc7\x06\xfc\xdb\x80\x97;\xe0\xcf\x0e\x0f\xc9S\xd0\xc2\xc4)\x87\x9b\xd5\x1dl*\xd1~\xf9\xe9\x35\xea\xcb\xa6\x8c" "\x9b\xdfTP)\x36m\xfc\n\xac\xde\xaf;\x04\x08\x34n\x16\x17\xb1%\x8b\xfb\xba\x63\x99\n\?\x41\xeb\xbf\xbf\xeaQ\xb1\xcd\x87MQL" "\xfe\xf8\xf1\x04\x46!\x8e\xa1)\xab\xb3\xf9\xac\xb3\x42\xd4\x31\xcf \xb4\xdd\xf7\xc2\xf1\x1dV\xd3\xbf\xea\xe9\xb1\xbd\xc6\x0fp\xe0\x11Z\x02\xa4" "\xaf\x07\xb8P\x08\xcf\x1f\xc0\x8bG\xd0\x32\xb1\n\xf1\x13\x0f\xe9\xe1\x39h+\xa6\xc2i\x07\\\xd9+\xff\xc0\xe6\x81\x43\xe9\xaf\xe7\xc8\x96\x0c" "\xbf^\xa2\xf3~T/\xc0\x1b\xf9\xeb\xf5o\x66\x17\xf6\x8a\x1d%\x46\xccp\x98\x88\xcdS\x10\xd1\xdb\xaa\xc8\xda\xad\"&\xc5\x45\xb4\xc9(" "\xa3\x16\xcc\xc9\x31\xb4\xebkp\x34\x62\xf5~\x8d\xcf\xf2\xe9\xfa#\x1ek\x9c\x66\rym;\x61\xe5\xb0\x99\x9d\x42\x33/\xbf^\x31y'" "\xbcz\x00\xfb\x65p\x14\x66\xd9\"\xbf^\xd3\xdc*\xb2\x30\x08\"\x9a\t%\x44\xedT&\x17V'\xde\xb0\xf2$\xb4)\x36\xe1\x02\xc7u" "\xd7\xca\xd9\x1d\xab\xf9[t;U-\xd7\xdf\xd5\xb6\x7f\x93\xff\x33\xed\xd9\x34\xd4\xe5\x37y\xc2\xa6\xdd\x43\xb3X\x05\x46\x8d\xaaki\xbd\x44" "\x43\x87\xf7\x46k\xe0\r\x03)\xe1\x97\xdd\xf5\x1b\xf6z\n-\xef\xcf\xd7\x1bv\x8c\x0bm\xa9\\\xa8\x1b\xadN\xe1(\x65\x61\xda\x9d\x1a%" "\xc8\x02\xc6R\xfb\xd8\x11\xa3\xd1\x41\xfc\xd5\xce\x0e\xcc\xbdhL\xd3m\x18\xf7[-@\x0cUh\x36\x91\x0c\xd1\x12s\x43\x14\xf3\xad\xf4\x9b" "\r\xdc\xec\x18\xd2\xd2@\xbc\xcc\xbe\x14\xd5\x97\xf0\x16\x86&M\xc4\xa4\x1a\r\xd7\xb4\xc3\xecX+\x90\xd7_\xf7P\xa2\xa9\xb6\x63\x9d\xec\x02" "\xb0\x65\x8c\xe2'\x9f\x9ai\x32p\xb5%\x1dh\xfd\x93\xa8\x7f\xb7\xd9k\xed\x1e\x1b\x15\x32\x11\x46\x9d\x8a|\t)\xca\xc8\x86\x86\x89\x1d(" "\x14v\xff|\xf1\x96m\xb2\xc0\x81\xf6\x0f\x02^@\xdb\x96\xa7\xae\x90Y\xe1\xebT\?z\x12\x1e\xd6\x65\xd4\xe3\xdc\xa6\xf9\x1e]-\xe5/" "\x98'\xc4\x1f\xcdT\x86\x88\x46\xda\x42\xee\xdb\xfe\x05\x88w\xab\x1d\xf1ov\x92i\x96\xba\n\xa2\xc5\xa1\xa0\xb8v\x31\x1d\xb5\x11\x42\x07\xda" "\xef\x80\xfd\x99iK\xff\x01\x7f\\\x87Qq\?\x13\xb3r:\xe4k%\xa2_r\xfe\x9f\n\x46\xcd\xd6\x89\x7f\xb2\x63\xbbU)\x8f\x8d\xcc" "\x10\xb3z\x94\xdf\xfe\\~[Q\xf2X\x85vq[g\xf2\xdb\xba\x90\xdf\xd6\x85\x83\x42\x0b\x8di\xd4\x80+\x18.-\xd8\x82,\x92\xa5\xdd\xc1\"m\xd7\xa2j\x13\x9e\x06_\x0b\xbf\x06\xa1\x9c.\x31" "\x0f\xca\xde\x1e\xb6\xaa\xf5r\x30\x39{y\x33H\xcev\x44X\xd3\xd0\x16\xf7;\xe2\xce\x1f\xd0\xc0\xaaX \x8bH/\xa3\x62\x0f\x9c\xf3\xa4" "\x36s\xa2\xbcpn\xea\?\x14\x03\x30\xac\x92\xbf\xce,M\xb5iY\n\x02\xd3\xb0\xb0\xa9\xe2\x12\\\x16uk\xb5m\xe5S\x8d\x34\xaf\xf2" "^>\xda+:\x31\xacS\xf1\x8e\\\x38\xd1\xca\x88xzL\xf2\xa3\x66n(\xf9\xf7\x8b\x33g\xf6\x95\xd2\xed\?\xda\x84\xc4\xbd \"\xa0" "\x11\xad\xa9\x88WoN\x9d\x87\x10\xc1\x1e\xba\xd0V\x94\x85\xf5\xc7\xe8%\x0f\x37\xa0\x1e\xbb\x62\x61\x83_k\xf0\xd2\x9e\xab\xce\xec\x8b/<" "\xd4\xe7W,\xe4\x9dQ\x33G\x9f\xd6\\\x93\xce/+\x0c\xf3\x12\x37\xca\xd3\x8c\x7f\xf8#\xf6v\xed\\\xda\x8a\x9fZ\xe1\x1c\xb1\r\x88\x84" "\x05\x08\xcdj\xe9qv\xb1\xc7\xd9\x45#\x9b\x96\x8a\x14)\x88\xb6\xa2\x02\x0f\xcc^\x05\x8e\x41\x42\xf3\x1a\x17\xda\x86t\xe1\xf3" "\x02\xec\xe1\xd4\xd8\x80-<\xffr\xfa\xd5\xa6\xaf\x38\x85\x0c\xe1\x65\xf4\x80<\xdd\xaa\xf1\xaf\x83\"\xd9${\x64\xb8\xfbi\x0b\x42n\x8c\xfa" "Sv\xbb\x95t\xf5@\xbe\x91\xefN\xac\x61\x98\x88!K\xaf\xe2\xe7\xd2 \xf3\xf9\xbdL\xb3\xbc\xf7\xbd*lW#{\x64\x88\x81\x8b<" "M\x95/\xb1p\x04Z\xbc_%O`\xdb\x0b\x84\xb6\x12/\x44\xe1W\x31\x05&\x0c\x98\?\xb3W\xc5\x8c\xaa\xf0\xe6\xc5I\x83\x41\x45v" "\x87ULS\tmrQ\x88j[\xe5\x1dT\xb1\x9e\xd6\xbbO\x06v\x96{\xa9\xa6i\xb9\x99X<\xfa\xde\xfd\xa6\xf6\xb6\xa9\x05\xc9\x87" "\xd5\xb4:\xbb\xef:\"\x88\xf7\x38\xd5\xd7\xab\x63\xeaJh\xae\xb6\x42\xf3G\x13\xdalY\xaf\xce\xe2\xac\x63=\x43\xd8\xab\x83\x36\xe9(\xb4" "\xe0{\xbd:\x36\x91\xf6\xeapX\x12Z,j!\xde\xfa\xc7tmO\xec\x89\xbf;N\xfa\x45\xd2~\xe7\x9b\xb7\xff-\x0f\x19\x44\xcdW" "\"\x64i\xef;\xfd\xb2[\xf9\xe5)\x94\xa9\x39\xa2\xf7\xe6H\xbb$\xc4{\x31\xe7\x33\x9d#\xfc\x99\xf0\x8c\x7f\xb7\x84\xea\x42\x8b\xb1n\x64" "\x95\x9aG\xddJ&\xe2\x07\xe6Q\xc8\xb3\xa1k\x9f#\xd5\x9b\xd0\xa2\xfe(\xdf\xc0\x8b\x0f\xd0\x82\x9a\xf6\xe6|\xbas>\xddy\xf2\xb8\x0f" "\xf6q\x1e\xec\x30\xed\xcd\x91\xa6J\x89\xef\xf1\xf9\xce\x31Y\xac\xb4Wq\x8e\xa0\xa5\xc2\xfa\xb1\x93u\xd2\xc4\xef#\x36\xf5\x8b\xa4\xd7p\"" "\x96qo\xc5*\xbd\xa2\x91\xb9\xc2\xf6!\xa1-\x96\x08O\x8e\xc9\x00\x84y\xb7\x42TZ%us\x80\x31J%\x86\xdb\x85i\x1a\xee\xc9" "\x9cx\x44\xb3\x81\x8b\x91\xaf\x8f\x8a\xc9p\r\xf1\xea\x14\x44\xe9\nkN\xb8\xab\x9a\xc8\x1b\x33q\xca\x1f\xe9\x9f\x93\xf7\xe0p\x1f\x9c]\x46" "\x16\xb3\xa1\xb7\xc2\xc0[\x88\xfa \\\x80\x16\xd4\xb6\xb7\x82\x0f\x9b\xb0\xc9\xcf\xdb\x00\x46\x38]!\x80No\x85\xb9[\xa1MZ\tm\x05" "\x43\x08\xab\x43I{\xd3\xc4\x97*\x0b]\x35\xbf\xe8\x64\x39v\xfa\xa1\xd4\x62\x97+\xf1\x33\xe9`\x9f\xecm\xd0O\xac\xf8\xea\xac\x36\x16\x8b" "\x46hN\xb5\xfd\xbd\xffs\x18\x62\x39\xb8\xbf\x87m\x39\xc2\xf0\x8c|&\?\xc8\x10\x34\x9b\xcc\x88\xe2U\xb1\x01\x9a\x83Y\x7f/:>'" "\xef\xc8o\xf0\xf4\xd8\x89\xae@\xc5k\x92\x1f\xb5\xe9\x03\xa3\x9f]\xc4X\xf7\xf0Q\xb3J\x63\x8c\x8e\x8b\xc8\xca\x99\x1d\x38}\x86\xc3\x1f\xb4" "\xc2\x04\xcd)\x34\?\xb1\x88\xc5\x92_\xb1j\r\x66\xa5\x80\xf6|\x9f]Z\xf1&\xce/\xd2\xd7\xfdL\xbb\xbd@U\xa7V\x46\x07\r\xad" "\x11\xc4O\xd9\xf7\xfe\xbd,$W`\xf0\xf1\x62\t\xaf\xa4\xfc\xe5\x82\xe7*=\x93\x63\xd0\x1c\xc9\x85\x8d\xb7h\xc6\xfdl\xa2Y\xb7\xdb\xdf" "\xcb\xca\xc1\x92#(\xabN\xf4\x89\"\x9a\x13W\x7f\x0f\x31\xb3\x85\xa7\x1fr\xdd\x11\x9f\x9b\xdc\x13h\xf5Xx\xf6\x45\xf2\xb8\xf5\xf7\xc2\n" "\xce\x86\x1d\x90\xc6\x9d\xe2@\x36\x05\xa3\\Iz~\xe8Z\x92{\xc6\xea\xb5h\r\x9e\xb9\xd1#Q\xcc\xe8\x0f\x84\xc3\x92\xee\xa8\xd6 \xd6" "o\xd1i\x01\xc7\xa6\x38\x7fr\x80\xab\xf1\xda\x99\xe4q\xfbh\xef\x8c\xba\xbf\xe1\n\xdf\xc2R\xa1\x11q\xd1\x45l\xf5\x9cR\xa3\x93\x90G" "\x1fy\xfa.\x9e\x15\xde\x44!+\x06\xeaV\x32\xdfw\xa6\xcb/\x0c\x85\x45\x0b^\xc9\t\x18\xe2\xa6\xe1\xb3\xa2|\x37\xea\xf8\xe0m\x0f\x66" "\xb4hmT\x41x\x19\nY\x80\xc2\x9d\xeb\xda\xfd\x42\x7f@\x0e\xc9\x00\x1c^:\xe3\xf3\x81\xd7l\xd5&O.\x66\xc3\x00\xd5Pp\xc8" "\x95\xd2\xdf\x83\xdb\x97\xf0\xee\x8c\xb4Z\x97\x43S\xd9/\x62\x45Jhs$\xfd\x62v\xdc\xe2i\xf4\x8b\x88\xc5\x64\x8c\xce\x1f\x33\x31\xb0\xda" "XLl\x30\xd3/\x8a!\xceZ\xc8\x14\xca\xfd\n\?]\x81\xdf\x94\xb2m\x84\x37\x93\xd0\xec\xd3>\xb3T\nG#\xf5\x44\x31\x87\x16\xd7" "`\xdf\x8b\x36\xbbW\xaf\x9e\xa5\xfd\xc2M\xda\xb9M\xea\xb3$\xec\x42\xb3\xcd\xa7\xfd\x1b\x8d\x30\x34\xb8\x41|\xd4>\xd3\xe4(\x99\xe0\xdc\x44" "\xf4\xb6\"\xfa!\xebJ\x84h\x16j\xc8\xf0#\xb4\x9eLx\x12\x38\xe1\x46(\x62\xf1\x15\x34\x63Gh\xfb\xca\x8cQ\xee\x14\xfe\x04\xd0l" "\x45\xc0\x44\x34\xd8\"\x96\?\xe2\xc7yz\x35\x82v\xc3\x33\x35p\xc9,\x88\x1a[\x97\x1a\xfa$\xe1\x90\x17\x31\xe3\xdf\xcd\xe0\x16\xf2\x66t" "\xa3\x00\xef\x87MX\r\x33\xfc\xc2\xda\xe3\x66\xbf\x86\xa0\xea\xa2\x99\xd7\xb5.\x30g\x64\xebh\"\xafW\x45\xcb:\xf3\xaf\x96\x9dZ\x0e\xf0" "\x02\x34\r\xb2O\x04\x98\x06\xb3W\x44\x96\x15\x0c=\x63\x96q\x41\xb4\x19J\x03\xd1\xa5\x8c\xeaJ\x8c\xeaS\xc3\xe2\xac\xd0\x8c@\x63\xf6'" "\xb3\xe6\x85S\x14\x10\x86P\x42\xdbv\xdc\xafm*w .\xa3\x91X\xe8I\xa1-Z\xf7\x9b\x18\xf2\x0bK\x9d$,\x63\xf1\xb2\xdf\xd6" "\xd9 \x9b\x92P\xf1\x85\xec\x39uW\xadM\xe9\xbb\x86}\xaf\xa2\xcd/\x9dp_\x14\x11O\xa1\rg\x61\xe5\r\x19\x80\x36\xe3\xa6\x1c\x93" "\?\xa0\xed\xf8\x10\xae\xed\xfe\xfc~\x19\xd5\x11\x91\x1c\xcfq\x8a\x8c\x66\x9c\x08KU\xb2\x03^\x1e\x82\x8d\x63\x19\x82\xc3uN\xb4\xd6\x45\xf6" "\x45\x11\xeb\x0f\x9a\xcd~{ \x1e\xd4\x37O\x33" "\xa6\x87\x0f \x9f;\xb6\x9a\x08\x0bx\x00\xfeK\xc2\x9d_J\xfb\xb8\xd5t\xc8\xbf\xa2Uj\x63\x42G\xb8\xaa:\xb1\xddS\xc4\x35\x9e$" "\xa6\xa7\x8c^\xe1u\xe6h}\x99\xae\xf8\x07\xbe=\x42\xaf\x81:\x81\xc7v\xc5k\xb5\xf4x\xd8\xda'\xe2\x0b.\x66\x33.\x66\xee\xaf\xa6" "\x89\xc9\x8d\xc1\x84h+\xeb\x90\x9f\x30,\xeew\x93\xaf\x17\xd0&\xc7\xfa\xdd\xb4m\x36\xc9;\x1c\x84\xfb\x1fI\xf9)\x1a\xb5\xe1\x16\x63\x9a" "\x98\x10\x88r\"\x1a\xbe\xfb\xb1\xe9\xb4\xa2\xceO\xfc}\xec\x9a~\xec\xc5\xec\xdc\xcfM\xeb\xe7o\xde\xc4\xfcW\xff\x0b\xfei\xfd/\xac\x84" "\xf4{j\xe5\xca;\x8an\xba\x17=p\xd6@\x44[\xa4\x31\"\x44\xa4\x88\x43{\x9c=v\\=\xb8\x9c\x19\x11\x7f\xab\xdf\xc3\xc4\x98\xd0" "\x96\xa6\x85\x83\xeb\xb4n\xf5\xac\x87\xd1\x97\xd0\x12\x83\t[O\xe4\x04\xe4\x15\x61T\xd6\xefmn\x1e\xc0\xe6\x8f_\x13v\xd8\xf4G\x1c\x03" "\x8d\xb0\xc0$<'\xf1\xb9\x11\x9c\xef\xfa#l=\x16\xda\x16g\xa1\xedm\x14\xda\x0cH\x7f\x04\x9fl!\x8a~\x84\x10,\xfdi\xda=" "\x02\xd1U*\xd9\xd9\xce\x36\x37\xeb\xe4\xa9\x06\xebvp\x0c\xafK\xa1]\xd0\xe0\x18^\xf8\x46\xb4\xb1\"\xda\x80\x41h\x35lp\x8c\xa0\x9e" "\x83\x13\x8c\xa4\x85v\xcd\x42[\x8a\x18\x9c`K\xa8\xd0L\xe3\xc1\t\x66\x04\x84\x16\xb5n\xc0\xe8\xab\x83\x32\xaa\xc7\xe0\x0e\xcfI\x08\x9d\x81" "\x36\x8c\xc9\xd9\xe5\x66\xa6\xef\xfb\xa0\x8dY\xff\x41;\xca\xdd\x83\xe6\x85!\xb4\xbdu\x46\x34\x02\".\xae\x8c\x88\x32\xa2\\\x83\xf6\xf6\x0c\xda" "\x88\x05$\xb4\x9d\x86\x83\x36\x62\xf8\x0c\xda\x9b=\xbb\xd0W^\xd0+/\xe8\x15\x86\xe8\xa0/\x43/\xd0\xe6\xa0\x85\xcd:\x88\xcf\xf5\x31," "\x31&\xd6}\x8ah;g\x07}\x34\xb9\x42\x1eO\x34\xa4@\xe0\"v\xda\x99\x88WR\x44\x9e\x33\t\xbd\xdcG\xd1\x43\x07\xb4I\x63\x61" "g_\xc3\x0b\xda\x1c\xf4@j\x88\xdd\xfc(\xc9\?%\x85/\x35Qs\xf8\x1a<\xe6\x07#\xc4\x8b\x1cp\x66j\xf0\x8b\xael\xf0\x9b\xd4" "\xab\xd8\xcf\x30\xf8\x45\x8ek\xa1m>\x1a\xfc\"R\xb4\xf0\xb5\x1a=<\x61\x12_\xb4\xf7/~\x80\xeb\x9f\x83\x15L\xf4\x01\xa7.\x06+" "\xf4\x34\x83\x15vi\x08m\x32ix\x82\r\x1c\xc2!\xf4\xf8\xec\x05\xb4\x30\x00\x43\xeeJ\x10\x9a\xf5;\xfd[\x14\xa2\x61\x45\x93`\xdc\xf5\x93\x65m\xd3(\xca" "\xff\xc8\xa9!\x7f\x37\xf3I\xb9\x04\xfd\xb8%\xcf\x1bM\x90h\xc3\x45luW\x31\x00\xcdJ\x13.\x34\x15^\xd4\n\xe4\xcc\x38\xb0\xfa\x95" "\x8f\xff-\x06\x88\x98\x33\x9a\xf8\xd5\x62:\x41\xf8\x80\x0f\xc2\x15\xd4\x88\x8b\x44\xbe\x8e\xa8\xfd\xf0\x37;\x89K\x97\xf2\xe3\xa2\"\?\x87\xfc)" ";\xcdW\x17\xec\x9d\xc0\xbf@\xc4\xd1\x33\x38\xe1G&\x15\xecGQ\x11\x37\x99\xe4\xe7:\x0f&w\xdf=\x8e\x86\xf8\xe1\xa4\xf4\x98V\?" "\xe2\x36\x8a+\xa9_\x46\xc5{\xac\x00\x88\x66\x1b\xa0\x85\x16\xf5M\x38\xce;\xb1@\xa5\xe2\xb5S\xeb\xbc\xa5jV\xed\x85\xec;#[\xfd" "\x13\xd1\x86HJ~\xd4<$\x90u\x44\x35\x14p\xba\xb7\xbfY\xe0\x03\xe9\x11.\r\xb1\x9b\x84\x85\x15xV\xd2\x30\x44\xb6\xadN\xb4\x36" "\xca\x39\x1d\xbc \xaa\x9e\x8a\x01\xb6\x36\x89\x38j\x1b\x37\x39\\-\"\x15\t\x9b(\x18X\x13J\x14\x8a\xa6\x18\xb7w\x45\xc4`\x9a\x96p" "n\xb4\x0e#\x06\xa7\x36\xa2\xcfQ\xf1\x1cI\x8bU\xbc _\xc1\x80\xba\x19u\x46\x38I\x88h\xeb]\xc6\xecS\x8b\x05\xe6\x83!Z\xa3" "i\xe2\xa6\xd6\xc7\x30o\x14\x46\xa7\x9f\xa0\x8d\x65\x85\xb6\xf8/\xac\x07\x9b\xe3\x13\x88\x8d\xa1\x94\x08\xb6\x8f\x8a\x66\xdb\x31\x85\x96\xb6\xd1\x98\x0e" "\xa4\xe1\x9d\x99\x16_\xbc\x39\xd1\x33\x89X\x1d\xfaw\x85\xe8sG!&~\x95o;'\xc7r\xba\xd0\x1c\t\x84\x83k\xa4\x8eT\xb1\xe2" "\x94\x93\xc3v\x87\x86J\xa0\x62\xb6p\x63\x9a\x8ch\xe1\xf5=\n\xb5\x93\xc1\xe3\t\xd1S\x0bW\xf8\t$k\x16\x1e\xb6\x11\x89\xdc\x7fP" "\xea\x8a\x97\x80\x8e\xbfW\x0f~\x8f\xe9\xf4MJ\tQ|\x46\x61\x96\xc1r\xc4\xf4\x9e\xc2\xa7+\x8c\xebG\x96\xe9s\xbeV\xef\x88\x1e\x9e" "\xe8\x66\x11&\x96L\xc6\x45\x9d\xea\x0c\x8f\x61\x45\x8f\x16\xc9[\x08Z\xcc\x91\xd1\x32\xeeX\x31-\xf1j\x8c\xf3\x7f\xb3\xa6\x31\xb2\x31\x97\x32" "\x00->\x9c\xd0\x66\xfc\x85\xcd\x02h\xfd\xa6\xf2\xcd\x99\xdc\x31\x45\x94h\xaf\xc7\xc9\x45>\xb9|\x82\x66\t\xd3\x84\xc3[\xd0\xec\x31\xe1\x12" "\xc7\xe3\xfc\x95\x13\x83l\x11m\xb9TX\xc5\xcf\xc4\x8dOgtLWW\xd3\xd0\xc9\x89h\x9d\xa5\x92'\x18\xf3\x8b\x63~\xd1\x8c\xe1q" ">\xc9=;\x91\xe4[\x44\xb3\x44\x85<\x15\xd6=\x8drW\x9b\xf0\xca\xb5MXGtV\xd7\xb2\xbf\xd9\xe6\x1e\x61\x1d\x85\x99<\x1e\x44" "\xe3w\x17\x61\xd1\x8a\xf8t\xe1\xc4\x08\xcf\xc4\x98\x45\x86\x15\x11\x61\xf0\xe4\x44\x63\xa2\"~\x14\x11\xb0\x85\xc7%\x90\x7fO\x0b\xb8\xf7\xf4z" "\x86\x16O\xc4\x46\x83l\xfb\x89\x11:Vh\xab\xae\x63\r\xb6$%\x80\xd5:hO\x17\xaemr\xf8,\xea\xb6\x31\x1e\xcf\x61\xca\x89\xf6" "\x32t\x46\xcf\x1f\xc8\x19\xa9\xda\x02\xfcx\x93\x33!\x34\x8ch\xa1Z\x63\xe3+\xf9\xa7\xbc\xe6\x03\xbe\x46\x0c\xff\x31W\xd1\x8dQ\xe1Q\x1d" "\x31Q\x34\xb6\xacn\x43q\x88\xe6\x04i\xa2\x34\x37xIw\x34\x0c\x85\xe5\x00J\xfd\x1a\x8e#\xc2\xd5\x91\x91\x8fV\x89\xd6J\xc4\xbb\x65" "\xf6z\x88&\xfdO\xb3%}\x8ck\xc9\xd9\">]\x41\xdb~\x0cQ\x10\x85S\\$\xd6>\xc7\x35$\xe4Klg\xff\x98\xf3\x97\xc2" "\xc5\x10\xb4\xa6\xc9\x88\xa6X\xc4u\xc6\xec\xd3kN\xa5\x8dk\xb0\x0f\x8cpg\x32\x31\x0e_\xe0\x8e\xa0Z\x08\x16\x1e\x61\xd0\xba\xb8\xfb\r" "\x0b\xd1\x66\xfc[\x36\xb2\xa3\xc5g\xf0\x02W\x0e\x0bGx\xf5\x04\x96\xaf\xc0N\x9f\x1c:\xe5\x7f\xac%\x88\x86\xa7W\xc3\x86G\xa1_\x84" "\xd9\xbe\xc2u\x46\xf5t\xb5\x9dL\xa6\xc5\xdf}\?\x07\xac\x04\x61\x65\xe5L\xc2Rz\x89\x33\xc5\xf7S\xb0!\x43\xe7\x11k^\r\xdbs" "\x8d\x9a\xd2\xa9\x84\x62\xc2T\x8d\xf0\x15W\x15[PP\x63\xb2*@\xf4\x1f\x9d\xa2\xe0\xe2\xef\x9c\x31)\xfc\x82\x96\x85Rx\x83S!(" "\xbf\xb0~\x1a\xf5O\x31Zv\r\x31\xe2U\xe3\xd1\x06n\x04\xa3@\xa1\x05\xe3\x16\xb6\xbf\xc0'\xdc vQ\x08{\xb8\xbc\xc4w\x44\x89" "\x38\xae\x91M\x12\xa5\x9fL\xeeH\xce\xdb\x18=\x97\xf0\xc1\xe9\?/\xa2\xff,\x36\xc8*\x9f" "\xc0\xfb~\x34{\x65'\xa1ZzU\xcb\x34\x9b\xad\x37z\x19\xa8\xc8\xab\xd6\x00\xe9~\xd2\x37\\\r,\x11\xe1\xf8\x16\x9c\xa0\xc8\xb1x%" "\x0cq\x43\xc9\x02\x9f\x87=%<\xfcq\xb2\xb9Q\xd1oW\xc4$x\x46\x9e@\xd1l\xef\x9a\x11\x01\x61\x44,\x8c\xe2\xc3y\x62I\x8f" "\\\xc3\xea\x86h\x66\x43\x0b\xafjN\xbfjL\xda\x0bY\x80\x42\xf6$\xb7\xc8\xa3i\xc4t\xad\x88k\x14\xeb\xe6\xee\xc8\xc9\x92hH\xc5" "\x8c\x8aUVL}\x85\xf0:\xedh\x08\"=n\xb1kl\xb1\xa0Z\xf0\x9c\x14\x8a\x65\xa0\xe9\xdf\xccJi\xa5\x9d\x1b\xd0\x86\xc7\xe3\xd6" "\xe6\xeet\xfb\xd7g\xc4\x90\x18\?\x63o\xf6\xf8\x19\xcb\xca\x42\xdbW(\x1c\xe5\x37\xe5}L\x8e\x8a\x66K\x37\xc2\x19\xf4\xa4\xf0\x15]>" "\"\xf7\xf5\xf8\x39={\xc9\x92\x62\x8aV\xc2\x99\xe5\x65\x97\x93\x62\x0f\xc2\xf8\x05\x83\x85\xf1K\x34\xbc\x8a\x0e\xbbH]=~\x41v\x17\xa3" "\x34\x8a\x18\x11\x8c_\xd8)\xbf\xe8\x1fj\x8f\x98\n\x1f\x7f\xc0k\xc1\xc8^\xfd#\xb2\x18\xab\x42\xbc@\x1f\x88{,\xb4\x04\xa4\xc2!\xbe" "\x82\x45Q\xe1\xc8j\xcc\x07\xa6}\x84\xbe\x9c\x39\xfeH\xcd\xddY\x88\x8e\xfc#\xad\x1f\x93g\xe0\x12\?\x89\xb9`\xe1\xc9\xd5\x66\xd5\xda\x11" "\xfd\x44\x98\x1b\x14\xda\xc2\xad\xd0&g\xc6}\xf6\xe6}\xcc\t(\xed\xd6\xfb\x11j\xa2\x32\t\x8f\x92\xf0\x04\xda\xf3\xbd\xd4\xbdh\xbe\x86\x36" "\\\xc6\xa5i\x12\x36\xa1\x05\x65\xd2*\x63\x1f\xab!\x42\x9b\xe7\x10>\x9e\x82\x66\xc9\x0b\xcd\x17Ih\t\xc5\xc6}\x04\xa3\x10\xda\xf8X\xd8" "\xed\x80o\x17\xa0M\xf8\x0b\xfbLP=\xee\x63\xcaJ\x88\xf7\x41\x19\xe5N\x31jU\r\xb7\x98\xe9Og j^\x9f\x65\xd6g\xb7\xa0" "\x14\xc3\x83o\x89jX\x97\x10\xf1\xc5\xbe\x30\x8e\x9eg\xd8W\x39\x1e#\x9a\x8b\x31*\r\xe0&;\x9e`\xd0\"\xc4\x1b\xb0\x90\x7f\xca%" "\x1f\xc2J\xc7\xb6\xb9\x97\xe4\xe5\x01\x9a\x8dN\x8d\x32\xcc\xe3\xd5\xac\xa2\\\x9e\xfcv&\xe7u\xf8\x94\x42s\xe7\x8a\x31]\xa3\x94%\xd0\\" "\xa3\x94\? \xde\x61\x65\x94\xcb\xc5\x63j\x36\xdd,,^\x90\x9f\xce\xa8\xfd\xc9wJ\xb5\xf8\x37\xcc\x34\x98\x63+\x44WV.\xc9\x15\x08" "\xf3k\x15\xbd\x9ch\xf6Y\x8b\xf0#\x9a\xc5p\x37\xee\xdc\xb7hRg\xfel\xedm\xbc\xf2\xb2Q\x83zp\xcc\x46}\x15\xd9\xdc\x9cp" "p\xec\xfc\x0b\?hk\xab\xc6\x97r\xb5\xfb\x1d\xf3\x95U\xbe\x90]\xd0\x62G\x18u\n\xc2\xbc\xdd\x45\xf3o-Y\xee\x18\xdc)\x37{" "\x0b\xbe\x16+\xa4+\x14\xc2@T\x46\x85\x11\xdc\x0bT{tj\xd4\x17\x96\x89\xdf}|Pt\x8a\xa9\x85H\xef\xa2\xe5\xcbN\x7f\xd4\"" "\x8a\x15\x04\xdf;\xd1\xce\xaf@\x0b\\$\xbc\xbdp\x46\x8b\xc0o\x46\x34\x8d\x35\xe7\xda\x63\x9b\xaf\xd9*~\x9a\x80\xb0 \x95^\xf0\xf1\xf0" "\ry\x0b\x45\x1c\xf3Sx\xf9V\xec\x8eV\xb1\xc5\xbd\x34\x46\xc5{\x9a\xcd\xabx\x8e\x9a\x83\xd4P\xc6\xa8\xdf\xdc\\\x87\xae\x61\x1eR\x44" "\xf3\xbb\x31\x62\xaeP\xc4\x1d\xc7l\xd7\xe0\x98-Z\xbd\x10\x8f\x0e\x44\xa0\x86\x9a\x90\xb4P\xbb\x93G\xdc\x41\xd2\xee;\xfd\xa1\x89\xc8\x8en" "\xe5\x37'\xa4\x11\x04\x91[\xfbL\x8b\xf6_\xa2\xe0\x37\xd3N\x8f\xe3\x87\xcb\x1dM\x93\xe0\xd4N\xb2\x03/\x37\xf2o\xab-\x33\xb1\xf7\xba" "#\x62\x81\x04\xda\xf4=\x0e\x0e]\xdb\xb9\x30\x35\x83.\xce\xb5\x97\xdc\x9e>\xde/\xc6\x87\xf7\x99\x96\xdf\xd3\x61\xe4\xc9\x95\x0c\xba\x35\xea\xb1" "\xc5\xb1\xc0_\n\xd5\xb8\x9c\xddZ\\l!\xbf\x14\xb4\n\x83O\x41\xab\x9ex\x1dQ-l#\xd3\x94i\xc9\xd1\r\xfc\"\xa1y\xd4@" "hg\x07\x32T\xc9\xb4J\x8b\x83\r\xd3\xaat\xbb\xa0\xb6\xa2\xedm\xda\?\x62t\x1e\x62)\x37;\xb0-&\xd1\xe2\x83N\xa6\xdd\xad\xb0" "\xa1\xc7\xb4\xb4\x38`SkZ{\x88\xb4\xf4\xd0\xfa\x41&N\x9f\x90\xfb\xd3\xb4M\xe5n\xe7\x92\x37O\xc7\xe9S\x35\xd3^\x46H\xa3+" "Z\x7f\xcf\to\n\x8a\xccvm\x9a\xce.W\x06\xae\xc9\xcb\x06G,h\x8d\x00Q\xb5U\xab\x39\xe1\x33'\"Z\xf7\x15\x07=\x42\x16" "\xf7\x94\xc5\x10\xf0\xb4l\x43\xe0\xe9\xa5\xae;\xb4\xa1\x42k\x43'w\x1a\x9c\xe9\x38\xa7\x83T\xf3\xa6\x99\x34" "`\x16N\x1a\xc8r\x66\xdcM\x00\x33i\xc0\xd3g\xd2\xd8\xd8`\x64\xd2\x42\x43\?i\x45\x66\xed\x0b\xfb\x13\x10\x15\xa2\x05\x7f\x00\x61\xd0\xd8" "\x84G\xbc\xea\xad\x86\xc5\xe1\x89\x8cgo\xc0\x89\xf3\xd1\xa9~\xa5\xb6\xc5nG\x43\x8e=\xa4\xb3\x9b\xb4R\xfev\xfa\xfb\r\xceJ\xa0\x39" "\xe7NZ\xc8[&\\\xaeu\xe1\xe5\xf4\x8b/,\x93*O\x1e\x93*i\x13\xf4\xc2\xae]\xc5\xe3\xc6\xfc\x1d\x84\xa8QO|\x65\xdfX" "Jo\xd4\x07\x18\x80\x08Q\xbc\x83ly\x11\xe2\xa4\xb8\x15o\x32\x11\xe7T\x11!o&\x83\x8d\x99Y\x93\x10\x06\x95\x32\x84\xff\xfe\x84\x0b" "o\x13.\xbc\t\x43\xea\x96=PhSM\x93\x10\xbe-\xc2\x13ML\x8c\xd1\xa7h\xa7\x05\xb2\xe6\xcc\xa2\x31\x9b\x86q\?\x44\x34\r*" "\xc6\x95\x95N\x9f\xde\xf9Ij|Z\x61T\xbf\x07\x1b\xfc\xd3\x33\xbf\x33\xc3\r\x44k{\x10!\"\x86O\x18\x1cj\xc2\x45\x37\xa1YQ" "\xc2\xc7\x32\x88r\x0c\x31\x81$\xac\xe0\xef\x98,\x12~\xe0\xba\x31\xe7\xa3\x61 \xcal\x9b\x18\x11\xc2\x98\x19\x98\xd0x\x1f*\xfe\xbe " "\xef\x8e\x06s\xc9\x0e\xc0r\x84x\xc1\xad\xa5\xa6\x89%\x8c\x94|\xd0\xdc\x63\xcf\x34\xd8J*N\xc0\x05\x8a\xc4v\x9d\x16\xf9*\x86\x18)" "\x0bmK\xdb$\xdc\x94\x0f\x9d\xd2\x1e\x64\xda\xd3\xb1\x97\x9c\xceG\x16o\x10\x97\xce\xb5\xf8N\x1b\x91i\x01&\xd8\xb4\x80\x19\xcf\xe9\xa3\xfa" "\xbe\xd6g\xa9\r\xd5Tk&\xab\n&\xb2M\x93\x1e\x17\xfb\xc0\x44\x33\x97\x32\x61\xb8\xb7\xa9\xbcR|!\x87\xc6(\x17\x82V\x17\x85\x17" "\xad\xbf\xf5!\xfa\x7f\xd1J\x1d\r\xcb\x66\x95O\x34s\x08U\xce\x8c(@\xa1-\xda\x08\xcd\xd9RX*\x81\x37\xf8\x8d\xb8\xca\xe3\x35\xfc" "v|\xdb\x8d\xe6\x13\xf8\x9d\x98&\"\x96\x89\x44\xb3\xaa\x32\x65\xe8\x65\xe5\x07\x39u\x46\xfd\x07\xa9\x80x\x10r\xc0\x1c\x33\x95<\xb9\xbd\xdb" "\xc2\xdf\xb6\x11{\x12\x84\xbdopq\x61\xc4\xea\x98\xd0&\xaa\x84\xd6\xbc\x0b\xad\t\x37\x62O\xb8\x89\xf1\xcd]z\xc0/,_uy\x8f" "\x45\x8c\xd5x\xe1\xf5\x13X{\x8bN\xda\xfe\xa8\x36\x35\x94\xee\xe6\xfeRW\x9b\xf7p/\x88\xa7$l>\xc5\x8d&<\x95\x45{\xc2\x85" "\xa0\x0e\x19\xb3$\xd2\xa6\xc1\x02\xf3,r\xc6h\x38\x83\xaf\x96h\xaf\xfc\xeb\xeb\x1b\x1cM\x45\xb4h\x8d\xd3'>\xbf'L\x36\x19\xb1\x07" "X\x8c\xfd=\xfc)\xcaM\xc9_\xa7\xd8\xa7\xc8\xb9+\x9a\x39,+_@s\x9f\x17Z\xd0m%\xf5\x07\x19=\x84I\xf5\x1b\x9a\x98\xb4" "\x17\xf5\x1d\xf1ov\x11\x95O\xe3\xab\xf7t\xd5\xc1\x61K\xb1\x32\xe5\x1e@\xa1\r\xa2\x8d\x7f\xa1\xe6\x17\x84\x83\x90\x1d\x88rs\xb8\xa2\xa8" "g\xbb\xd9*\xff\x1eV\xdf%\x8b\x94\xa5\x87\x17\xe4\x32~\x18`YT\x34\xdb\x06i\xc4\x0e\xb4\xe9\x13+\xf0S|z\x1a\x9f\xe5\x93\xfc" "\x1cn\x32r\xe0\x8c\x1f(\xe2;\xf1\x1d\n\"n\x0e\xb1\xa1\x44\xc4\x36\xca\x02\xb9\x99\xa6O\x98\xa2\x32\x46\x83vt\x35qM=\x82\\" "\xe3\x05&\x62\xbc\xe6\xce\xa2\xb3k\xff=\x1c\xb0\x34T<`\x83\x1b\x61\xf8\xe1\x85\x92,k\xd9_\x97\x35\x34\xf1\xd3\xa7\xb4\x34\x86\xaf\x88" "\x88\xb6Y\x45\xd8\x45\xe9\xa6}~\x64\x8a\x9bI\xbf+NV\xa5\xa7t\x8dj\x80\xd9\x30\xe1\xc1\xab\xb6\xfc\xd6\x46\x8avr\xee\xe7\xfe\xa7" "\x02\?m\x9a\x0f\xd9\x1fZx\xd8\x9b\x97\xefxz\x84\x38\xb9\xa2\xbd\x7f\x45\xa7\xef;\x62\xf6\xf1\xf7/x\x13\xb9\xf8\xef\x1fXS\xbb\xb0" ".\x84\x66M(K\xce\xe8\xe6\x18\x1d\x98iX\x33\x9av#[\xf2\x37\x46\x0fg\x98\xa6\x35-\x96\x91\x91\x05\xb0\x86#\xa1\x1c\xbb\x38\xc3" "\x82\x96\x88u\xfcZ\xd4~\x00\xd1\xa4*\xb3\x81\x97i\xda\xdc\xeeW\x32-<\x41/\x44\xad\x8c\x01\x87i\xf2\x31\x44\x02\x30m\x93+\x66" "\x7f\xb3\x8c\x83\xc6L\x9c\xf1*\xcd\x94\x34\xca`\x03\xe1\x33L\x13\xcb\x18\x9b\xf1\\\xc3l\x02\xb4\x45\x39\xba\xb6\x82\xec\xc6{/\xce,\xab" "(\xb4\xc5=\xb6\xaf\x99\x16\xe5&X'\x85v.\xefi-\xd3\x8a#\x18p\xd0\x82\nR\x8f\x9a\x16_|\xc4\xe6\x39\x62\xda\xceU\xa8" "V-\xc5\x37\x1d\xd7\x64h\x88\x1c\x64\xd0\xea\xc7~\xf3q\x9e\x9f)\x94\xc9\x11x\xfeL\xbe\x81\x16\xbdY\xf9\xe2\x84)`\"\x96]\x44" ",\xb5\xc1\xda\x8b\x93\rH\x37\xa9\x0f@~+\xdb*%\"k\n\x0b\x9a\x65\x9e\x84\xe7\xe4\x15\xf9\xeb\xcc\xc4\xc5;\x89\xda\x92\x1e\xce\xc0" "\xdc\x90}\x46\x37\xed\xcc\x41\xbc\x81\xca\x9d\xd2\xc6\x02\x90\xd0\x92n\x18\x35h\x1c\x9f\x33\x32\x84\x8ah! \x8c\x98\x19\x99~\x62\x66U\xd8\xfc\x80W\x9a\x8b\xda\x98XX\x06\? \x83" "@,\\\xc8\x01K\xa0!\x34#\xd2\x98\x9dG\xc4\xe1\x11V\xafM\xfbW\xdc\xf9\x98h\xd8q!\xda\xa2\x84\\\xad\"\xae\xfa\x91\xc5\xbe" "\x34\x31\xaer\x8b\xd5\xf4\x13\x19\xef\x84w\x03v\xbb\"\xfe\x80M\x9c\x34\xfe\xd8\x03\x07\x38\x01&v\x8d\x7f\xb3\x06\xad\x0c\xd1\xa6\xd9\x17\xc7" "\x13\xb6\x37\x9f\xea\x87X\xc4i\x34;\xf2,\xb7\xb1\xb1\xa3hw\x64k\xe2\x65\x06\x11\xb1o\x44\x93\x1a\x63q+\x44|\xaf\xc5\xddK\x88" "\xe6\x8c+\x34\xa7\x1f#\xcd\x96Oy\xffu\xae\xe5\x13\x8f\x07.\x9b\x46x\x97\xba\x98}|\xfd\x88i\x98\xe9gz\xf8\x83q\x90\x88\xfc" "kZh:\x93\x86\x06\xa2\xa3\x36rj\xf6\xb4\xd9\xbek\xe9Y#-\xe3\x81\xa4g%'\xbc\xd1\x44<\xcf\xa7\xfeS\xc5\x63\xd2\xf5|" "\xd2\xbdr\x31=\x9fQ\x64\xf4~\x11K{\x64\xc3\x19\x9d\xe7\xb0<\x0f\xcd\x7f\xa4\xd4H\xcf\xf0`Rs\xb7\x15\xa2\x93\xfdL\xcb\xbc\x99" "*o\xa3\xf6\x0c>\x15\x9d\x9a\xf2\x16\x8d\xefg:\xb6\xee\xfb\x13>\x63\x46\xc4\xa7wQ\xeaI\\=\x41\x34.;\x96\xe4\xeb\x10\xcb\xb8" "\x46\xec\xd5\x14\xde\x9d\xcb\xf3\x81\x13\x9bh\xb6*j\xc4\xe0o:@\x02,!:\x37\x7fo\x07\xd1\xde\x35I\xdd\x96\x97\x84\x36\xd7g\xc4" "X\xcc\xc4x\x8f\xc3*\xd1\x8a\xdfN\x1d\x1e\x17G\xd0l\xab\x8b\xb0\xd1J\xf7\xef\xe1\xe8\x06\xed\x64\xc2[\x1b \x31\xbc\xb2\x96t\x07|" "\x88\xa2\xf1\x07\x1f\xfa\xa0\x05\x0b\x13\xda\x9e\x45\xa3\xb4l\xd8\xf1$\x1a\xfa\xe6\x81\x98\xc6\x1a\x00\xdc\xc6\xfb\xba\xb2|\xeaL\xc2\x92\x9f!~" "\xd8\x07\xcd\xcfR\xc8s\x08\xf5\xff)\x35\x12\xdb\x87\x8d\xe9\xfa!\x19\x9c@\xb3\x8d=\xc2\xf2\xab\x8e\x03m\xfc\x35\x65\xde\x38\x61w\xe0\x8c" "\xf2\x07\x1b\x16\xa1\xde\xdc\x1e\?\x30\xc5\x07\xd2\xee\xbe\x0e\xd4\xc6\rh}\\P\xfa}\x0b\xfeL\xe2\xd3K\xecG\x11\r\xc3 %\x96\x45" "]\x84\?\xd0t\x80\x1d\xfa\x42\x8b\x1f\xf6}\x0b\x8f\x83\xef~Tz\x03m\xaa\xf1\x9b\x8b\xb0\xdf\xfd\xe4\xf0\x15\xb4\x01\xf5\x37\xb7*\x18\x61" "R|s\xd7\x82\xd0\\\x10\x8cr\x36\?\x61\xba\x7f\r\x9a\x0f\x8dR\x7f\xe0\xe7\x35\x1e\xe9\x05\xfc\xfc&\x16\xd8i.\xb7\xb8\x04m\xec(" "\xb4\x65\x37#|\xcc\xe6\xfb\xd1\x31\xe9\xfb\xfbU\xbc\xda\x9c\x14\xe3\x9b\xfa\x8e\x96\xda>,\xd1l\xf9\xd2\x18\x17[\xf0\xb4R\xed\x1e,\xfd" "\xc0\xedO\x44\xdb\xfb\xae\xe4\x9f\xcc\xaa\x12\x9a\xb3\x92p\xf1\xaa\x96\x83\x15\xbch+=\x07ls\xd1\xd6\xf8\x0c\x16\xb8\x8cq\xe3\x13\x1b\x8a" "MK\x16u\xf8\xe2\xb8\xb6\xf3\xb7\xf4\xf9%\xd3n\xcf\xc9\x16h\x13\xed\xc2&\xff\xde\xaf:\xb1hk\"\x9e\xaa\x89\xa8\x35\xf3\xfd\xe4\xf2" "\x12\xac\xe3SX\xea\x10.\xa0\x63P(,\x34\xc8\x91S\xfd\x9dm\xd0-\xda\x39~\x36-v\x9c\xd1\xe0\x1c\x91\xaa\xa1\xcd\x0e\xe0\x1bk" "\x9a\\\xbd\xff\x9eh\xf2\x1a\xc5\xdf({l\xf6\x9a\xef\xc3\xe7IX\x9b\x83\xf7:\x03\x1a\x1c\xfc\xad\xb5\xce\x04\x8f\x7f\x8b\x9a\x31\xda/\x81" "\x36\xfd+\x34{\xcc\xa8\x1b\xce\xfcS\x96\x80\xd6\x88\x05\x1b\x13\x31\?/\xa2Mm\x06\x8f\xf0\xa2\x13Zh\xc1\xe0\x31\xb1\x15>#\"\x04" "\x89h\x16\xb3\x11\x13\xd3\"\xda*\x8f\xf2\xd1\xa9sx\xb6i\xc8\x35l-V\xed\x43\xde\xea\xd4\xf6\xd3\x06\x8f\xe9U\xdd\x88\xfd\xc1\x42\xb3" "H\x82\xf6_x\xa6\xef\xef\xbe];\xf7\xb1\n\x87\x85\xcd]\x31\x9d~\x9b\x16\x37\x46\xf1\xde\x1e\x9a\xf4\xa0\xbdi^\xc7gUi\x8bU" "{\xd2\xa8\xaa\xe6\x18\xe8\":'\xd5\x8aqg\x94\xdc\x85\xd4.\xe0\xbe\xab\x62\x99l\x46\xab\x1c\x96\x44L\x8b\xefk\x30\xf6U\x9b\x83\xd6" "\xb6++\x9a\xa6\xce\x36\x66\x98&\x35\x31\xae\xd5\xa8\x05\x46\x98\x31\xc6\x38\xa4\xaf\x9fj\xbd\x9do\x62\xe7\x95\xd0\xa6g\x84\x36\xaa\x32\xa6\x07" "m\xf8n\x88\x66.\x06J\x9e\xb9\xb8\x8f\xb7\\\xc5O\xb8\x36\x88h\xa3\x66\x61\xe9\x8a|v\x66_\x64\xc9\x08\x35N\xa3\xf9\xea\x8bv;" "\xdd\xd8&k\x11\x1b-'\x8b\xfeIs\xa9\x9a\xbb\xbb\x8a<\x8d\x45\xb3\x16\xda\n\x8d\x31\xfb\x85\xa7\x37t\xf6\"v\xf8\xfb\x66\x00\x1a\xa5" "(\x10\n\x01\xda`\x1e\x17j\xaei\x46\xb6\xc6 \xd3\xbe\xcf\x10\x8b\xcd\xb4\xe4\xb0\x17\x1d\x96\x10\xfc\x04\x07\xcc`t\x31\x1a,\xa4\x85\xd9" "t\x1eX\x99y\x38\xcb\xc3\xeb\x07`J\x66\xda\xc3Qtr\x8c\x84\xba~L\x86\x38\xc8\x04\xa2\x07\xa6YI>O\x61\xb1@\xb4]\xf8" "\x01g\x37\x84\xaf\xa8\x13Q\xf7*z\x63\x89:\xfd)\xd9\x88[\xf9\x8e\xb5k\x11\xfb\xac\x1d}\x66k\x30\x11\xce\xe2\"\x0e\xda\xd1\xeb\t" "\xba\x1d\xd5\x82\xac\xc8M\xccJ\xdb\x34\x64\xd9Q\xdb\xa4\x94\xd5\x85\x61)\x1d\xf1\xb2\x86\xb7\xce\xa8\xff\x14\?\xf1\xb7\x46#gv\xb2q\xcd" "\x99\x1d\xfa}\x43\x13\xab\xe2*\xab\xac\xbf\xab,s\xb4h\xd6'*\x97Y\x95Y>\xcb\?\x88\xab\x9a\x94\xa2\xbf\x9c\xb0)\x82\xa7\xf8h" "\?\t\xd7\xf1!\xaaw\x9c\xbf\xc2\x1e\x00\x11m\xbf\xb6\xb0z\xe5\x94qQr\xb6H\xaa}\x1e\x18\xc2\x04q\x11;\xa2\x45\xe3\xdb'\xf4" "\xab\x17\x11S\x96\x10\x0b/\x88\xa6\x62Z\x96\x93O\xb5\x17\xa7\x46@\xfe\x44\xcd\xf2\xfb\x16\x66\xe7\xbb\xbb!\x39\xba\x10\xd1\x02\xe6\x0b\x1b\xbc" "\x95\x66\xde\xb9=T\xd2Y\xfb'\xdeXs\x05>h\xa4Z\x84}T\xad\xe1\xc4 Q\xc5\x0e\xf9\x91\xdd\"+G\xfcx\xe5\xc4\x16-" "\x15ygm\x16p\x9b\x65\xd4~\xce>\xdd\xe6m>\xa1\x31\x81\xcd\"|\xbe\x06m\x8d\xd1\xe8\x95$~\xe5\x65\xbdy\x43,\xe2H\xae" "\x08\xe2\xfb\x9d\x13\x03\r\x13\x37\xea\xde\xb6\x16#}\xd3\xac\xfb\x63\x8f\xfb\xbf\xf2\x0f\xe2\xa0\xee\xf4\x36U\xc4\xa8\xd9\xa3\x88\x17\x34\x1b~\x89" "h#\x02\xe1x\xe2\xd4\x14\x31\xc3\x85\x86KX\x36\xe5\x7f\xcd\x41=\x0e\xb1\xc9\n\x7f\xcf\x44\xfe\xc0\xe4\x45+J\xc0\x1a\xf4\xcd+\xf9\xe1" "M.q\x1c[\x65\x8d\xe9\xfd>\xc5\x81\xd3\xeb\x80\x88H\x43l\"\x36\x17\x8ax\x30\xdf<\x95 \x1e\xd6\xc9\xae\x13\x8b}*\xe2.\xb1" "\t\x45x\\H\xce\xf9\xa3\xb6\t\x45Yw\xea:)\x1b\x9d\xe4\x0c\x85/\xe3\x1a,\x86\xabXO\xaeP\xfeI\xa9\x90\\\xa1\x86$\xd7" "\xdd\xe4\x82\x17Zi\x91\xbf\xf2<\x90\xf4N\xb4\xdbW}:\x07\xa8\nX\x02\x35\x46\xd5\x06\xd6\x17\x45\xb3\x05m\x65\xdf\xe9-\x14\xa2\x83" "\x08\x1b\x0bg\xc4\xb7Q\x44\xd8\xea\"\x36\xf7\x90\xbf\x46\xc4V\xdf_\xa4\xa4\x85\x9a\x9f<^\x93\xe8\x16\x92\x0e\x9e\x87wvI\xb7H\xa2" "\xeb\xc5\x06\x16\x61o.]\"\x44Oz%\xe2\x38\xefT;\x80u\x18ZZ\xe7/N\xf8K\xc1\x13\xc9\xef\xfa\xce\x0e\x15y\xbd\xa1\xff" ")\xeb,\x92\xc5\x9b\xd3k~\xb2*\x44\x05<\x38\xcc>+\xdb$N\x90\x1e\x9e\xa7\x8d\xdb\xb4^\xa7\x96\xbd@\xe9Qu+\xe2G\xd3" "\xdc\x65\xe6\xb3\xab\xda\\\x37\xe6\xd4\x61\x10\xa4'\x07\x98\x04\xf0\xa9\x01\xa3\xf4/Y\xa2G;\x10W\xd6\xd8\x91m\x9a\xfa\xe5\xf1\xed\x46\"" "R\x63&\x16\x46No\xf2!z\x1d\xd7)\x00\x1aM\xe9\x19\x9a_:\xb3\x12\xee^{\xfd\xf2^" "T\x88\xa1\xb6\x89I}\x86\xd8\x80\xea\x8b\x8d\xf7<\xfd\xc9\xed\xf4\x96)\x1b\x95t\xc5r\\u\xbc\x9d\x85\xe8\xf5\x36]\xe3\xd7\xb1\x96\xad" "\xbc\x87\x07\x8e\x88\xfb(\xd8\xcd\xf1Y\xfc\x88\xe7\xa4\xeb\x8bw\x9f\x14\x1bNM\xc5\x1e\xa2$\x36\x95s\xf8\xfb\x89x\x8fw\x61\xd3\xc8{" "ym\x1a\xa8\xed\xf0V\x16>\xa0\xe4u\xa1\xf2w\x45\xf1\x34)w\xd2\xf9\x62\x33\xff\xe2\x81\x86\x33i\xbd \x91\xb7ii\xf5\x08\xeb\x44" "\x81N\xee'\x15\x14\xdd\xe6\xe3\xcd\x9b(\x8d\x38;\xe6\xc7{\x95\xcd\x17/g\x44\x8ey\xc5\x41\xe8\x8c\xab\xcc\x01\x1dt\xe2\x8e\xdd{'" "\xb5\x94O\xc1\x33\xc6\xb7\xc1\x33\xb6>\x0bm\xd0)\x34\x37P\xe5\xadS\xed\xfc\x16\?m\x99\t\x85\xe6\xba*\xb4\x85x\xa1\xf9\xc6\t\xcd" "\x1d\x35x\x8e\xd1@+\xb7\x63\x0f\xd5\x10\xaa\t\x1a,\x89g\xac}\x0b[\x15\x10\x1d\x9a\x12\x39\x39\x32\xd7\x12;\xc6\xc7\xf5\x8c\xe9\xc6\xe0" "Y\x1a`\xd0\x96nu\xab\xc2\x31\x39!\xa7\xce\xbfY\xdd\xc5\xa8^\x88'm\x9a\x8ez\x00\x93\xc5\x10m\x07\x08\xc4\xe7\"\xa6\x19L\xc3" "\xe4\x03\xc4\xed\x37\x93\xdb\xe7L\x44\xb5P\x31=\x38Oj\xd9\xcf\x61\x8f\x05\xc4\xed\xdd\x64\x1a\x07\x1az\x80\xd6\xf3\x33<\xef\x82g\x04`" "\x16Z<;\xe5\xc0\x99\xd4\xa7\xd8\x8f\x17\xd0\x39;x\x11\xf3Xs=\xe1Y\xbe\"\xa1\x8f\xd0\xdc;\x94\xafX=r\x91\xbd\xed+\x07" "X\xaf\x08\xdd$\\\xdc;\x65H\x81}\xd4\xaa\r\x9c\xd9\x17\x97\xc7N\x9a\x13\xaf\x08|.\xcc\x9d\x39\x37\x87\x38\x01\xe2\x8c\t\x31\xba~" "\x85\x07\x81\xb0\xf8\x08Z\xb0\xb1\x80I\x85\x94\xe7 \x0c\xbf\xd7\xa8\xf9\n\x62\x94\xf4\xca\xf1\xc2+|`\x85\xfd{\xe7\xdf\xba\x86M\x66\xa6" "\xa5\xdfGi\x7f\xb0\xd9k\x61\xc2\x42\x8e-\xcb\xc9\xc5\x90\xe3\xddW\xff\x64|\xc6\xdc\x96\"\x16\xfb\xe0\xd5\x0c\xbc\xc1\r\xc7\xb5W\xa7\x17" "\x9a\x88~\xef\xb1m^\x10\xda\x9a\xbc\xb2\x05\x36\x33\x62\xf6\xc4\xc4\xb8\xc9\xd8X\xa2Y$\x15\xa1\x45R\x11\x8e\xef\xe0\xde*\xe2\x96\x66L" "\xa3\xa8\x12\xcd\xf0\x8cKI\xaeZN\xbe\xcc\x14\x35\xf8\x41u\xa0\xfb\x05\x61\xd3\xbe\x62\x33\x9e\xf1o\x31\xc4L\x9ehok\xd0O\xed\xf1" "\xf4\x45\x0cp_\xfa\xc2\xe8\xe3\x94\x91I\xdc\xa8m\x87*\xaf\xc9z\xa8q\x0b.\x8e\xe2\xbb\xbe\x66\xc7\xe0\x33\xc7\x61M\xf9\x34m\xee\x1e" "h|\xfd\x85\xfb;\x07\x36\x8d\xa2<\x03,\xd2\xda\x31$,\xdaj\xf9]-\x38\xdf\xd5\xd6M\xcc\xe1\x9b\x16\x1d\xe7\xf4V\x1f\xdb\xd9\x81" "\xd2\xc1\xce\x87\xa3\xce|G\x93O\"\xa4\x83iYZ)\xd3\xd2\xe9\xd0\?\x89\x19-\xe1\x05\n\x35}Y\xfb\xdb\x83PI\x42s\xb0\x13" "\xb2(\xd3\xc1/\x38\x44\x05\xe6\x14\xcc\xeb\xa6\x61\x9f\xeb\xc2II\x43\xb1\x7f\x82\xe6/\x61\xd4\x90\xb0\xdd\x16\x34\x9b\xe6\xf2\x90s\x42\x9b\x03" "\x0e\xbaXQ\x15\x62\x18\xff\x16\xdb\x9ch\xf0\x96\x84\x15\xb5]\x16\xadL[\xf8\\\xc3[\xday\xde\xfe\xed\x83\x06\xa9R\xb3\x08\x37>\xd9" "\x0b\xc8\x80\xe8\xd1\x45x@\x1a#\x9bV\x16\xd1\x12\x1c\x0bmw\xaa\x31K\xf8\x66\x9a\xce\xf7\x63@\xfe\x81\xe4\"\x9eHWh\xf1\xb2\x8d" "\xd1i}\xb3\xf7\xc8\x62\xb5\x03\xcb\x11\xe6uM\xcb\xc4\xd5\x99\xf3o\xf6\x02\xcfq\xd3\xa2\xe7#\xb6\x1c\xaa\xb1\xc1\x36\xf1\x66\xca\x07\xaa\x1a" "\x16L\x44\x34\xdf*#\xdb\x33\x15\x11\x89\x04\xa2\xad\x8a\x43|<\xc8\xc4v%\x13\xcdy\x19\xe2\x30\xfb,G\xb7&z\xd2x\xd3\xd8S" "\x98\xf8\x94]\x03_+\x15\x37\x07\xdc<\x04\r\xb3\x1c\x1f\xf1\xcd\xa9\x0c\xbcY\xeb>\x62\x8b[.\xec\x64\xf4\xe2O\x82\xb1S\xda\x1e\xec" "O\t>\xe0\xd3'\xb4\xa5\xd4@\x1e\xa9]\xc5\x17O\xf8\xc5\xe1\xc4\x97V\xb0\xb0\xc4\x61\xf6\x17\xbb\xfb/v\xe0_q\xefU\xa7Mm" "\x16\x39\xf8\xc2\xb6X\xe5\xda\xe9\xa7\xe1\xfc\xe4\x17\x66j\x83\x9e\xfcS\x0e\x90\x30\x46\x19\x80\xe6#\x1e\x0c\x38\x0f\x37\xe0<\x9c\x92\xe3\x44\x15" "\x13\xdb\xae\x13\x30@\xa3\x10\x8f\x64 \xd5\x8b\xb5\x7f\x80\x05,\x63\xb4\xff\x03\xa7\x11\xd1p\xdd\x03,\xad\x0b-\xd4\x9d\xb0\xf2\xe3\x44\x88!" "\x13\xfdg\xac\x9e\xd6v\x44\x44}\x12\xcd\x9c\xa5\x84\x30\xf2\x99\x32[\x08[\x44L\xf4.\x38\xc5\xcf\xf9\x65$\xc7-\xd0|\xa6\x84\xf9z" "\xf4\xc2\?\x99\x0b\\\x30`g\?@\x9ev\xa3:\xb8<<\x41{\xe2\x17\x31\x46S\xc2QJ\x44\x0c\xb6\x95\x9a\x96\x02\xef\xd7\x80\xf3\xa7" "\x03\x9a\x1a\x83\xcc\x0f\n\x62\xa7\xb5#\x66\xdeP~\x80\xef\xde\x00;\x00\x84!n\x9f\xc6\xc6\x80\xe6\xfa =\xc3\xdfu\x88\xc0\x0bS\x31" "\xc4\xc9\xd9m\x0e\xe0\xc1%\xe4\x43\xdb\x94q\xe7lN\x87\xb1\xc5\xf4\n\x86\xc9\xc2\x06y\x0c#\x66\x64\xc5\x1a\xc1\x97:\xe0~t!\x8c" "\xe6\x11\xa7\xc0\x94\x1a\xc6\x12Uz\x84%H\xa5\x15\xe9\x08\xfb#\x84\xefV\x88#\x0e\x30G\xf0\x82\x0c\x18\x7fLh!\xcf\x84h\xa6G" "\xfe\xebI\x88\xf3\xf8\xf9\xb1*\x1d\x8c\x36\x15\xab\xd3\x63\xf5\x14\x84\x15)\xe2*\xa9\xf7\xe1\x04\x11\x8c\xe1\xcfg\xd4,\xa2\x16\x92>\x18#" "`\x89Q=\x0em\xc7;\x34\x34\xad\x63\xf8(\t-{\x90\x31\nZ\x91\xad\x8c\x04\x63\xbe\xc0\x63\xdaV\x63\x04\xb1\x36\xb2\xad\xa3(U" "\x97v\xc3\x84\x36\xc8\xe4/\xb4\xb7l\xc2:\?\x89N\xf2\xe0y\x33=\x38\x83X\xfc\xe4Xj\x12]\xe6Y\xc0\x13\xae_L\xa4>\xa6" "\xb5R\x0cKo\"m\xe0\xdf\xfc\x30\xdd\x9b@\xeb|\xc6gu\xe4\xf7\x16\xedu\x05\x0e+\x9b\xbd\x02\xc5\x05{\x46\x8a\xd2\x9d \x94\x92" "\x1c\x18\xb5\xd3\x99\xb4\xba<\x15JZ#%mn\xd7pl\n&q\xfe\x42\x1d\xd3~\xa7\xe9\xde\x0fM\x98\tG\x05\x93\xf8\xda\x92T" "Y\x94$\x31\x17\xe2\xf6\x15\x0eW\x07\xe9j\x45{\x63\x82\x08]\xc6\xe8\xf2\x32\xbe\xc9\x41\xe3\xed\xc6\x8d\x37\xae\x89L\xe2\xe6\x30\xfb\x81G" "\x9e\x89\xf7\x8c\x34\xe4\x46\x0e\xdb'\xbap\x9a\x9fk\xa0\"[<\xb4\x03\xe9\xe5\x1b\x44\xdbV!\xb4|'\x42[\xee\x34\xfa\x43\x81\x93\xb3" "q;\x15o\xda\xa0\xe2\xe5\x05\xffr\xe5\xdc\xb9}kU\x43\x44\x39\x88\xa7\xcc\x37\x0b\rM\xa6\x89\xab_\x38\x14\x8a\x86\xeev\x92\xee\xe3" "\xb9\xa6\x85/\xf0\x65\r\xc2\x62\x99\xa4\x18\xe6)\xb3\xd4\xb1\xa2\x61l\xae\xc4\xd6m\x11\xa7mg\xd2\x1d\xa6'\x1dj<\xddw\x1d\xdev" "*~n\xea\x36\x1a\x99lj\xbfN\x0e\?\x45\xc4\xf5m\xee\x8a`\x9dl\x14\xf5\xea\x8b\xf8\x11\x0e\x9f'\x32\xe6\x65\x8f<\xd9\xcc\xec\x04" "S\xec\xf0\r\xbe\x11\xb7]\x19\x82\x16-\x39\xf8\x8e\xf6\x1b\x89\xc6!\xfd\xd9\xd4\xa6\x38pz\xc2\x15\xa2oxs\x0b\xf3\xd5\xec\xd0\xe5\x15" "h\t]!Z\x64\x0e\xa1\x65\xc0\x16\xce\x8e\x41\xb1\xc0\xf8\x11\xf6\x32\xcax\xbf\x13\x7f\x8d]\xdb\xec\x1f\xecj\xb9k\xb6\xa4\xdf\x08\xd5!" "\x34G-\x61\xb5\xe7\x97\x10\xd7\xc7\xf1\x43\x1e\xb1\xbd\x45k\xe2\xd7\x10\x43Q\xf8\xf6\xe1\xfc\x93\xd1\x9e\xad\xc5\xbb\xc6\xda\xac\x9a\xf4\xe7\xc8\xb0" "\x05\r\x9d\x1b\xc5t\xd8\xc8\x34\xdb\x0ch\x62\\\xecmn\xab\xaem\xde\x87\x9b\x0f~\xdfo\xc0\xd6\xf2\x85\x13^'\x66(\xbe\x39\x9d\xab" "\x84g\x81\x89\xecR\xbe\xd9#~\xb3\x11\xfc\xd6\xfdt\x61\x89-\xde\x37\xb2q\x07L\x98\x14|\xcb\xe8\x18\xbc\xbb\x88\x96\xd7\\:\xf9N" ";\x07`\xd7y\n\xa2\xd2~\xc3\x83Y\x38\xe4q\x96\n<\xc2\x84K\x94%\xe7\xc9\xbe\x11\xcb\xc2S\xef\t\xef+`\xe7\"\xee=%" "\x16\xff\x42\xb4\xf7/-!Ky\x1d\xfc\xb0\x07\xfa\x85\x1f\x80\xd0\x12\x07\x06\xbfX\xcd\x17^\xce\x41\xcb\xc5\x10\xfc\xc6\xf9!\x88\xe9\xcb_" ",\x98\x0b\xc7\xd6\xe6\xff\"\xd8\xbaPgrN\x38\x1b\xfaK\xabI)_\xc8>\x1b\xfc\x90\xbf\xce\x38\xff\x85\x98\x64\xd0*\xb7\xf2\xcf\xb5" ",\x8e^\xf0\x8bX\x0e\xc2\x93\x89\x9c\x0c>W\xa2YP\xc5\xe0\x17\t\x64\x83\x19\xb6K\x18\xa5\x08\xb9\xb2\x35\x63s\xa5\x94\xffi}\xcc" "\xfe\x16\xf8\x0e\x62\x85\x0bQ>\x33\xe9\xbcu=zY\x62u\x98\x99\xbbQ\x9f\x86\xdb\x0c\xe9t\x84\xe8\xd8g\xc8i&,\x31\xca\xa8\x88" "\xfeQ\xac\xd8\xce\x10\xa7L\xc9\x13Z\x14\x02!l\x82\x19R\x81\x0b\xdfy%\x1f\xd7N\xb6.\xb3\xc8\x32\xe9\x08\x31=\x35\xe3\x43\x9c\x45" "\x33\xfe\x14\x0c\x87\x19\xfb\xef\x19GN\xb3\xb8\x18\x82\x16\xeb\x45\x39 \xd7N\xec\xa5\x12\x11\xeb\x41\x33\xc4\xccT\xbe\x91\?\xe0\xf7\xb1\x13\x0e" "\xf1\xc1LJ(nM)\x0e\xc8!x\xd8\x02s\xcf~\x0f\x1c\xfe\x08O\xc9s\x10\x63\xc8\x99_\x88\x10;\x62T\xbc\x05[=mu" "nx\"L\xef\xcf\x92\xbe\xb3M\x8e\xc0\x41\x19\x1c\xf2\xf3#\x14\x02\xf6\xe8\x08\x61\xf2\xcc\xd2\xbd}\x64\xa0\x17\x11\xad\xd9\x8c\x93O\x33N" "x\xcf\xd2s\x94\x37'\xb7g\x88` \x1c\xa0\xdc\xd3\xa9\x0c\x91\xea\xf0\xd3\x13m\x85\x07\xb9\x39\xce\xeb>\xc7\x35\nT\x1d\xd4\xff[\xa7" "\x90\xae\x45\x08\x43l\xc6&s\x46s}\x06\xcf\x99m\x65U\x97i\x16#g\x43g\x9b\x19\xbf\x32\x7f \x9f\xc1\x90\xb9^\x82\x39\x42\xb4" "\x19\x35\")\x06r\xaa\xf1\\\xf3\x8c\x16\xbbMh\x99\\\x84\x18\xe3\xcei\x44\xcd\x91\xf4J\x88\xa9\x9a\x39M\x7f%\xa7\x0c\xe7\x88i$" "\xc4hPI\x8b~\xce\x36q\x8e\xac\x43\x46\xff\x61\xc4\x11\x31\x66\x87\xd0\xd6\xcdil\xcfY\x34si\xd3vn\x82\x05\x14\xf0\x16\x03\xce" "p\x05\x1c\xd8)\x11'M\xc5\x35\x88\x0eV\x89M\x91&\xf2=\x36\x11\xef\xad\x89X\x8d\x37\xf1\xf7\x65\xf7\xe3\xa6\xc1\xab\xd4\x0e\x64\?," "\xa2\xff\xa0{\x83\x43\xcc\x66hU\x63o\xa2\xe2\xf6$V\xd9\x03\x1a\xe7\x01\x17\x02\x82M\xe5\xd9\x89`\xb1&\xb2\xbc\x03\xd6\x9c\xa5\x8c\x92" "\x39+\xb4\xd4\xcc\xa7\xc7\x39\x1a^K\x31\x39t\xc6\x08\xc6\x8bj\x1cP-iI-\xa3\xd6!\x88\x66k\xc9\x36\x64\t\xd7l#\x9f\xc9" "\x92\x8b\xce\xcbx\xb2\xa4\x9d\xb5\x14K\x91\xc6\xe9\x12\x89\x35\x8cljU\xccv\r@\xb3\x1c\x37\x10\xb1\xd6j\xe2\xec`+\x36\x35\xa3\xad" "|\xe9\"\xfb\x92\xfc,\xb2\x9c\x98&\xef\\t:\xd3\xdc\x96\xb7\x65\xc4\x1f\xb1\xc3\x9b\x83~\xf6\xa1\xd0^\xf0\xa5\xd8\x84\xf0yu\xf1o" "v\x11\x9f\xe9\x90@\xff\x7f\xbe\xdf\xfd\x0b/\x38}\t\xc9\x35\xbf\xba\x8a\xea`\x62n\xd2\xc1\n\x9b(\x02\x86\x93\x35\xc6\xad\x97t\xf0\x44" "\xed\x0c\xc4\t\xd7\xb4\xf8\xd6\x08\x93&,\xbf\x81u\xeaXi\xf4i\x07\x65z\xfa\x05\xb1\x39\xe0\x33Y\xb3\xebX\xd3!\x66\xcd.\x63\x8d" "\x1c\x95\x42\x8c@\xd7\xac k\xf3\"g\x9c\xa1`\xcdQ\x95\xf2/\xecp\xbe\x41\xb5(w\xc8\x01\x96i'\xcb\xdd\xbf\xc1\xec\x36\xb1t" "\x8b\xe4)\xa6\xc5\xd5\x39\xf6\xce\x41\x9b\x64\x7f\xc8r^@\xf3\x9dx\xa6\xa5\xdd#\xa4\x08\x12\xad\xb0\x8c\x0e\xf6\xa2#\x94\x8b\xda\x89\x9d\x8b" "\xa4\xd7\x84v\xfb\x02\xc2H\\\x63\x0b\x97\xc7(\x13>\xe2>\xe3\xf6Q\xf6S]\x14\x41\xdc\xff\x06\xe1\x08\xb0\x8e\x87\xd6\xf8\xad\xf9\xa2\x30" "\x16\xb4\xb0\xf2\xcd\xbez\xcdn\x65\xed\xb7\xa3Q^\x31\x82]\xd3\x9e[\xb3\x8fX'\x0b\\Pz\xb8\x97\xed^\x14\xcd\"\xcc\x0b\x8f\xdf" "\xe4\x0f\x10\xf9\xf0\xb8z\xa3\x64\xbf\xb3\xe6\x9a\xe3\x1a\x19\xfc\x84X\x46\\g;\xff\x45\xc4[\xa5\xfc\x9b\xe3\x96\x11\x43\\\x88&rM\xdb" "O\xc9\xd7r\x9d\x65\xa1\x16\x11\x33\x05k.U\xae\xb1\x46\x16\xee\x61\xdd.<\xfc\x9b\?:\x31\x41\x08\xd1Z,\x13\xe1\x96\x02\xd1\\#" "M\x84K\x00\x44\xebMM\x84\x17\x98\x88\xe6\xda\xa6\xc4i`p\x19\xfd\xccQ\x01'@\x33+\xb4\x31\x88\xd0\x0cy\xa1\xf9v\x85\x87h" "\x46\x85\x16\x9c\x45x\x36\x01\xad\t\t\x0f\xf1\x14\x85!(\x63\x63\xa7t\xe3\xfemt|!\xc3x\x0b\xe7\x05\xd0\xc6P\xe1\x11*}\xc8" "YV\xe5'h\xeb\x31\x46\xbc\x97\x10\x9f\xe7\xd8\xfc\x06\xcd^\x35\x13\xb3\xd9*h\x8d \n\n\x99\x66\x0b\x1d&\xc2\x9a\x37q\xd3\x9a\x44" "\xe5\"\x34\x9b\x90\x10Z\x43\xa0\xe4\x0f\xda\xd6z\xa1M\x86\x1a\x31\xab+\x62\x8f\x7f\x1a\x9d\x81!N\xcc\xdbV\xa2_\x31Q\xfa\x15\xbf\xbf" "\xf8\xba\x07\xe2\xe1\x1e!\x88\x97\xd0\xe3\xd0\x84G\xb0\xc6\x84\x96\x90N\xf8\x86\xa2\x42oi\x44\x83\x07qY\xc6\x9a\x96iY\x66\x61h\xd6" "p@\xbch!!\x18\x34\xcb\x43\xf1\xaf\xe6\xb7\xa6\x07X\x94\xda\x83Z\x83\x05q\xbc\xde\x34\xdf\x33\xcd\x0c\x0f\x88>%\r\xed\xfbx\xd3" "\xc8\xcbX\x1e\x9e$\x38\xf6\x33v\x31\x8b\xa9\x02\xcd\x63\xaa@\xf3\x99\xf8\x1dm\xe7\x02\xbc\x44U<|P\xab\xf7\x9f\x1fI\x0f\x83L\xec" "\x1e`*\x1e\xda\xef\x00\x16\x87i\xe8\xe4]\x84\x05\x9bi\x35\xfc\xcdO\x85v\x41\xd8\xc7S\xc3V\x61\x31\xe7r$\xbf\x8d\t\x00\xe1\xed" ">h\xc1~\xc3\x1c\x92J\x1a\xff\xc2/\x17\xa3\x62\t\xcb\x86\xa2\xf5\xad\xa4s\xa9\x45\xda\x0f\x8f\xd5\x9e\xea\xcf\xe1\xb2\xa8Z\xd3\tS\xc0" "\x44\x34\xa3\"\x06\xfc\x8eM{kX\x8e\x63\xf2\x84\xbc#\?\xc1\xc2\x1b\xb2\xbc\x86\x8c\x14%\xe4\x0f\xa9\x87\xad\xff\xe9\xf2\x0b\xbc&\xcd\x04" "\x13\x9a'\x82\x31\xce=\x45\xd7Kh\r\xfe&\x1a\x11\xa5\xfc\x8f\xed\x38\xa2=wu!\xdf\x32\x41\xba\xb6\xd9[\xb9\x96-\xcc\x8b\xf6z" "\x00Z\x98\x61\x61\x8fg\x18\xf0\xfc\xe6\xfe,\xb4\x39$\xe5*)N!Zh+\x65\x17\x34\x0bY\xc9\x9f\xb5H\xc5\x42\xf3\x17P\xce\x41" "\xf3\x1b\x30\x66\xee\xeb\xa2\xad\xf1mL\xbb('\xe0\x39J\n\x13}!\xbd\xf1\x85\xb7\x17\xe8\xa8\x44\xb4%\x63\xa3\\\x13\xc6s\xaa\xa1\xf4" "\xd1o\x1a\x31\x33!\xe2\x43\xd3\xb9s\x05\xaa\xf9g\x1f\xb2\x87\r\xcfn\xe1\x13\xaf\xa7s\r\xdaj\x81\x11\xdb\xcb\xb5\xf4\xa7R/\x31\xbf" "\x16\xd2\xe1\x45\xd9\"'N\xcc\x39\x8a\x88\xf7\xf1\x38\xfb\xca\x0f\xeaZR\xfe\x05k(\x41\xf8\x94\t\xeb\x97$J\x30i\x9c\x81\x16\xa9=%\xd5Uv\xe0\xf4\x36\x13{\xafYYH#\xceJ\x8e\xf6<\xbbU\xd1" ",\x0e\xbb\x89\xe9\xc1\x0b\xe2\xd6\xa8\xc6\xdbj\xf3\x0c\x83\x1e\xc9\xcb\x1a\x84Nv\x19\xc7\xe9\xf0\x90\xe4]/\x07\xe0\n\xaf\x0f\xf2\x61(q" "\xa7\xd8@ \x44gq\x8c\xbdJ\xc2\xebS\xddN\xcc\xaaGm\x81\xd7\x63S\xce\xd1,\x38\x66\xbfp\x8c\x10\xa1\x42\xd6\xfd\xcd\xd3\xa9\x33" ")\xe3\x9e\xc5<\x44\xda:\x11\?o\x9d\xd2\xdc\xc0\xa4\x14\r\x96\xd2\tV\x39\x85h\xf6O\xb0\xee\"<\xc1q\xdas'|\xb0\x1c;" "\x0b\xd1,\x9d\xc0{\xd4\x88U\n\x1b:\x83h\x32O\xcc\xd7\x82g\x83mu\x12-\xcbi\x7f\x1d\xbd[\x45\xe0\xd0\xda\xc7\xd5\x42\xf3\xd1" "\xca\x8c\x01\x0e\xb2\x8d[\x83\x45\xba\xfc\xe1\xdf\xba\xcd\x32\x39\xc1\xb6_\xed\xde\xa7\xa0\x45\xb7\x91^\xda&x\x84\xed\x17\xa7\x9f\x0e\x66\xba\xd0" "\x66s\xa4\xa7\xb6\x10\xda\x42\x18\x97J\xac\r\x8b\xb8\xa5\x66\x63\xab\x9e\xb8\x46k\xca\x44\x8b.\x11\x9e\x62\xfdXYM\xcf^\x32\xcd\xb2\xf6" "\x08Q\xce\xa7pLQvy=\xa7\x7f(\x1c\xba\xad\x87\xa7\xf0\?\x12\x1e\xe0\xab\x91\x85\x11\x12\x16kN\xcc\x37\x9b\x18\x17\x7f\xe1\x43%" "\x9a\xed\xeeP\xbe\x80\xf5G\x10\xe5\xab\xd4\x8d\xc1\xe8\\O\x33>\x37\xc8w\xe7\xdf\xfc,\xde\x7f\xdb\xd5r\x37\xae\xc5\x85Q\xf6\x37t\xb3" "\xa7Q\xf7\xcc\xf6\xf4\x34\xa1\xa1\x05V\xca\x83\x44\xe4:\xd1\x86\xb8\x7f\xc4\xd6\x12Z\xb0\x65\xa1yY\x18\x93\xee\x00[(\x45[\xdaK\xcb" "\x80\xc9!\xc3m\x1b\xe3I\x1b;\x38LK\x1a\xbfX^W\xed\xd6\t\x07\x07\x11\x9d\x30\x8fO\xe1\xd5\xa4l\x39\x93\xbbs\x88\x0f\xb8\x9e" "\xb8\x87\xeb\xc5n&\xa3\xb4\xfc\x11j\x99j\x08\x92\n\x11/\xeeir\x94\xcf\x32\x62\x86L-i\xfc[L\xff,\xee\x85iY@\x11" "\xd1\xd0k\x9d\x66'\xfb\xe4w>\x07N\xbe\x14*&\x95\x37\x84z\x35-\xed\xaf\x90\xbaZ\xb4\x01i\xbb\xb0\x8cl\xa2T\x64ks\x9a" "\xee\xed\x93\xe7\xd1sQ\x1e\x16\x34\x9b\x86\x33J[\x90\xc0\xe8\x37m{\xd1\xba\x41}\xfb\x07\xb5\xb8\x82\xec\xcbI\xfd*y\xddw-\xdd" "G\x31n\xf6p#\xd8\x05-l\x87Nu\xc0-\xfd\xc4\xf9\x9f\xf8\xdc\xbe\xc6\x15\xdc\x30O\x83 \xcf.\x39O\x83&\x9f>\xff\x80\xe6" "\x9d/\xc4\xfbZ@\x00\xa4\xb0\x80M\xb4\x61\x81\xaf|\x01\x83v#\xad\x83\x42\xfako\x44\x11\x39\x93\xc3\"\x62\x9e\x18\xf5\xa9\xc2\x62Q" "\r\x0b.\"Zt\xa4\xb0\x98^|\xea\x1a\xb3\xcd\x64\x85\x45\xfe\xf5\"\xcaI\x45\xdf\xe3{{\xc1\xa6\xf2\x82\x95\xf4\x82\xcdVI]\xc0" "\x82\x33i\xa0t\x37\xc7]\xc0\x63\x05\xf5\x83\xca\xcf\x11PV\x0f\x14y\x1f*\xf2\x16)j\xd2\x11T\x90\x12\x36\x10\x1b\xf5\x35\x34w&" "\xd5\x9a\xd1\xf2]}\xbcoWl\xe8Jlh\x94\xfa\x32\xdat\xbdki{\xe8Z\xbaw\x89\xcc}\xaa\xbd\x82\xc1\x35\x9b\x9e\x92z\xe5" "x\xd2[\xd1l\xb1!,!\x1b\x89\x11\xfe\xac\xd9\x14\x10\x8e\x35\x02\x8e\x84U\x8b\xdb\xa7\x7f\x18u\xa9\x96^\x31g\xabh\x96\x87\xdd\xc8" "\xf9\x84Rt\xde\x01\x8b\xaf$\x8a\x01\x99\x97\x8d\x9b\xce\x05\xbb\xbdRT\xaa\x39\xbd\xe8\x90\x92\xd9\xa8\xb9,\xeb\xfc\x1a\xfa,\xe5\xb6\xdf(" "\x45\x96\xa4.,!\xff\xbb\xb0\xbe\xdc)RL\xd3\t\x61m\x96\x10\xb7\xdb\xdc\x8d\xe0z\x04\r\x63\xf7\x12\xed\x12\x19x\xddj\x89\x04\xbc" "\xc3\x01\xcf\xfc\xcb\xab\x9a\xcd\x9c\x1c\"\xa9\xc8\xeaR\x8a\xe6O\xe4\xd4\x99m\xa6\x16-\xe0/\xac\xb6\x37\xbb\xaay=\xe1\xb8\xa2\x84\xc5Y" "\x61\xfe\xcc\xe9\x65\x1b\x97p\xda\xf8\x1a\xc5\xce\xceK\xc9Y\x02\x15\xe1\x38\x05\xed\xf6\"m\x9f\x63\?\xa9hh\"K\x1c)\x94\xd4\xbdJ" ">\xeb'\x19V\xd2\xfd{/\xefx\x8a\x07\x83=\xab\x46N)@\xa4\x37\x00\x34\xbf<\x11\xd1j\x99\x98M;P\xe3\xb4\x03\x34\x46\x8c" "\x36-\xca\x8d\xa2\xcbs\x9a\xd9v\xe0\xf4\xc7\xcb\nZ\nS\xd8\xb4\xbc\x0c\x10+\x99V\xa8\xd3\xf0\x32\xed<\xbb\x10\x1d\x41\x17\xea\xd1\x62" "OS\x9ay`R\xfe\x85\xab\x0c;\xda\xd6|\xb7\x63\xa5\xabht\x93i\x97\xa7r\xb9\x1a\xf4\xc8\x0e\xef\xd4>\xfd\xe3\xbf_\xacht" "\xd6\x7f\x0b'\xaa\x0f\xa3\xa7\xc3Lk\x05I{/\xd3\x9e\x1e\x34*\x00l\x03\x1e\xa0\x11\xb4\xd5\xe0\x1d\x8c\x03\xbd\xd7\x1d\x11\xcb\xe7\xae\xb1" "\x93\x30\xad\x9f\x8fro\x99\x16t\x33q\x11\xec\x16\x91h\xb6\xac\xe0Z\xd2\xc8JY\x06\xb7\x88Y\x03\xed\xf4\x92S\x07\xa6U\xe6\x9c\xe5" "\x31\xed\xe6\x14\x8el\xd0\xaa\x35\xacM\x43\xab\xbd`\x9a\x1f\xda\xed\x31&Z\xa1\x35\xf2\x08*\r\xady\x80(g\xd0\x1e\xb2\xca'\x03\x1c" "\x0e\x03M\x9b\x64\x8f\x65;\xa5\x04m\xe5\xa2:\xc7lo\x32\x0b\xbe\x03\xed\xe6<\x13\x9fW\xeaH^*\xa8\xcf\xdd\xb9\xa6\t\x8dN\xdf" "\xa5<\x36w\xb9(\xf7\x95l\xab_\x16\x38\x0e\x9aG\x92\x81\xe6\x9b\xc1\xa1-\x9fh/\xab\x96\x9e\x8e\x32\xf1\xb2\xcb\x01;\xb4%\xe2\xb3" "@k\x0f\x11~\x00Z\xf7\x88\xf3[\xaa\x65\x89\xb6\xc2\x12\x36\x95\ty)\x42\xda\x02%o\xfb\x11vO\xc8\x9b\x84\x63\xb5\xd0<\xfe\x85" "\x18\x84\x97\x10\x17/:\x9ep\x8a\xa9\x84\x98j\x42Xy%\xac\xdf\x1bi\x00\x95\xe0\x1c\x66\xc4\xc2\x1a\x44\xbe\xf8\xd2\x8a\x38\xb1y\xd7\xc4" "\xcc\x0b\x04\x1aK\x34s\xe0\x84\x88~\xbe\x44;\xa1\x04g\x03\xa3\x35\x33\xd5L\xf3\x00\xcd\xaa\xf1\xeb!\x9ah\x38\x7f\x86%\xe4<\x11\x62" "\x9e\x8aI\x66\x8c\xba\x0bz\xbf\xec\x1a\x16hL\x8c\xf7\x9a\x9c\xbf\x31-\xbf\x86;\xe0\x8e\xe6mXv \x9dv\xfe\xc2p\xf7p\xf9\x16" "\xcb%\xd0nN\xb1\xcd\x13Zu\xceq\x92iR\xe7\x1b\x83\xad\x16\xec\x9e\xa5y\xe8\xe2N\x8d\xcb\xb4\xe8\xfa\\w~\x14\x9e\xff=\xbc" "\xf3-o\x00T<\xf9\xd0\x8dR;\x7f\x9b\xce\xbd\x96\x88\xe6\x15'\x65K\x04g]%\x8f\xf7gQ\x89\x97I# \x9d\xce\x9c\xf2v" "\x44\xa5\xad\x66\xad\xa3k\xd9\x99\xa7sg\\\x19\xd0\xa8*\x61\x35\x44\x88\xa1tis\xf0*\xe7\xf7\x07\xe3\xdf\xddT\xf6\x9c\xde\xad\x8b\xe8" "\x37#\xe2\xf6\x83\xa8Q\x08\x85$\xbc;\xc6\xba\x8b\x8aO\xce\xa8<\xf6\x66\x13v\x87\x45\x0e\xa1\xcb\x95\x1c\xfb\x38w\x8ai\x17\xe5\x0e\xfd" "\x8e\xed\xc0\x10Q\xb4\xa9\x65\xcd\xbaj\xf3\x33\xce\x14\x98\x16\xde\x32g\x0c\x94p\x1cR\xf1" "\x99\x1c\x83\x30.\x84\xb7\xe0\xe2\x8e\x9c:\xa5\xa1\xe3+[\xfe[\xde\x39\xd5\x65\xcd\x9c\xe2\xc2\x32\xdc\x33\x8d\x1a\xc9\x0eS\x64\xd0\xeew\x35" "i\x45l\xcf\x88h\xc7\x43\x32\x04\xf1\xca\x96#\x8b\x9c(\xc4\x32\x80\x32z\xfe\x44@_\x8f\x98g\xa4\xf5\xa6\"\x36\x13\x41\xec\?H\x7f" "\x9ai\xe8\xd9T\xd4\xad\xe6\x0f[m\x38u\x91\xad\x98\x89\x96+\x06\"\x9e\xb9\x89\xeb\x13,\x01\x8bV\x45\xa9r\x15\xae\x0c\xf7u\x61g" "\x02\xb2\x88\x85\xd8\x34\x02\x11}\xaf\x8a\x34\xddTL\xee\x42\xb8\x38\x43\xb3\xe0\x34\x10w\xb6W\xd8\x01\xb8\x11\x85\xcc\xc9\xac\xc4\x83\xc2>\x14" "\x63\x96YM\xb4\xc1<\xfb\xa0\x65\xd2\x36\xa6+~\x16\x33'\x65\xc4\x12\x14\xce\xf8Q\xbc\x43\xe5h\xce\xe2\x9f\xf3\x8e\x02\xfe\xdd<\x96\xc3" "r\xbc\xf7\x06\x62.\xa5\xcc\x97[\xe9\xa7\x10\x91o\x42\x39>\x43)\x62\xcf\xbd\xd1\x1f\x9b\x88l%U\xf4\xe7!\"\xdf\xae\x32\xa7Y\xca" "\\\xac(\x63\xf3\x98Q\xddk\x96\r\xd7\x38\xd5Z\xa6\xc5\xad\x64S\x05\xd1\x9b:\xd5\xd4\x42\xf7_U\xed\x9d\xabg\xa6\x61\x89\xd5\x44\xf4" "\xa0*\xb2%\x35Q\xaa\xd0\xf6\x0f\x1cN\x98xy\xcc\x46R\xb5\xb4\xbf\xc2\x46(h\xc3\x43\x64\x08\x31\r{\x05T\xe4\xe5\x63\x36]\x99" "\xfd\x90\x88M\x9f\xbeV\x8d\xcb\x89*\xea\xf4\x33\x9a\xa8\x32\x02\x31\x08\xbf\xa8\x7f\xf1\xcc=\xd2Kt\x84\xb7\x1b\xc1r\x84!.\x8dSS" "\xe5\xe4\x08\xc5\xc1V\xb9\xec\xb7\x85\x90\xa3\x42\xdd\x1b}\x8b\xad\xd6\xd0\xee\x96\x9c\xec.\xd3\xee+'U\xbc\xe1I\xed\x80\xc4o&u<" "\x32N\xa4(\xfd\x66\xc4\x18v\x8a\xed@\x43\xb2\x9c\xbc\xe3\xa2i\x80+\xb7\xf6L\x39\tx\x1atg\x65T}\x7f\x0bP\xa9\xbd^\xb3" "\x03PJ\xe3\x15\x8f\xd1|$\x8b\xcav\x34%\xda-\xc9\"Y\xa0n\xd3\x44,\x63\x0b\xbe\x11Y\xbeL\xdc\xdc\x34\xe2\xce\x1eG\xb4\x65" "\x9a~\x65o/\xb2\x8c`\"\x9e\x9e;\xe3&\xc3\xc8\x8b\x86\xf5\x89\x32|\x05\x8d\xf1\xc1\x97\x97\xb6\x46\xb7kW\x32\xed\xf9\x1b\x64;\xe1" "\x95L\xe8\xb5\x05{\\\x95x\t\x90O@\xb8\xfc\x02\x61\xf9(\xbdq\x42\x12\xb1\xb0\x8c\x30\x8f\x42\xcc\xbc+u.\x94\xad\x35\x87\xe5\x65" "\xce\xc1\t\xd1[l\xde\x7f\xa5\x85\xdf|X\x11U\xd8\xd2T\xf8\xeeW\xd2\x8e\xf5\x0e\x37j\xd9\\\xbd\x41\xb4\xc0\xd1\xe1\r\x0b@\t\xe7" "u\x11-\xca\x99\xd0\xc2\x01\x0b\x31m\xa1\xe4\x89o\x38g\xa2\xa4s\xc7\r\xf2\x92\x0b-q\x85r\xe0\xe4\xfa\x84\x89~\x02\x13\xfd\x0fl" "\xb6n\x38\xd5q\x13\x9f\x9f\xc4\xad\n\x1f\xf4M\xdc|\xd1o\xd8\xf6[\xd1\x9e\xc4l\xcb\xb3\x1d\x36Mlz\xd4\xe4\x9b\xd8\x9cG\x85\xb0" "\xc1n\xf8\xd6\xdcp!\x41\xc7\xec\xa4\x35\xa7\x37\xe9Q\xd5\xe9\x17\x96\xe6V\xe0q\xd3)\xe6>_\xe3\x1bV\x1e\xe1\x07\x88q\xec\r\xbb" "\x61%;\xae\x9b\xf4\xa7\x00\xc2\x14\xbd\xe1#\x17\x36\x9c~\xfb\xb4|\x95\xdb.\x9d)\x1c\xc3[\xce\xcb*\xa5\xcb\x62\x43s\x1b\xe5~\xe1" "\x32+\"\xfa\xe8[\x0e\"n\xd9\x62*\x39\nS\x31\xdb\xe4\x01\xad\x11\x64\"\x96\x9fM\xc4\xb0\xfa\xd6\xd6\xe6o\x39\x15O\r^\xb6v" "\x14\xc7L\xe3\x93\xbb\x15+\x92\xf3\x0b\xb7\\>Q\xc2\xaf*\xfb\xee\xdd\xdf\xec\xc2\xc9\x62\xba\xfb\x0bN\xc9\x33\x92\x1f\xc1\x90\xf2\x8e\xf5\xf4" "\xeeo\xf9hQW\x1a\xba<\xd9\x38\xe3\x18\xf6\x0e\x0e\xe0\x42\xac\x37\xde\xb1,\xeeh{\xdc\xd1\xfa\xbd\x63\xbb\xab\xfc[\x37\x37\xf7\r\xd7" "\xa2\xbb\x37\xf8\xab\x85w\xac-w\xdb)\xf9\xbb\xe4\xdd\xca\xe6.-\x0e\xc0\x1f\xabh\xf7\x88\xc7g\x8c\x9e\xef\xa3\xeezW\x43\x9f|\x8f" "\xdc\x0b!\xa3\xe2\x84\r\xbah\x34h,\x35\xb2\xcc\x1c!\xd3\x35\x84\rv\xb2\r.\x9b\x37\xd8\x61\x37\x12K\x13`\xd4\xbd[!N\x94" "\xe6\xfa\xce,\xe0H\xd8\xc8\x12Q\x84\xea\x37\xec\xe4 \x44\x45\xe9\x8a\x90\x33\xcd\x0f\xe8\xd6;\xdb\xc3\xa0Z\xd5\xf9\xb7\xe4\xfe-\xd3\x34\xa4" "\x91\xc5\\\x30-\xae=\x62\x83\xa7k\x11\xfa\x45\xd5\x92\xb3\xaf\xe4\xf3\xcc\xb5\xf4'\x97}\x12\x36o\x93\x86\xae\xb0K\xf2W\xc2\xfdhq" "H\xab\xa0\x89\x08\x17\xc6\xdd+\xf1s\xc1\xce\x10N\xc0u-\xd1t\x12\xb8z.\x1e\x34\xd9\xb6)\xf5\xbeK\x97;\x1a\xdf\xb9&\xd7\xd3" "\x9a\xb4\x06\x95Q.O\x33\xb1\x89\x88\x17\x46\x9a\xf2M.\x96\x36\xe9\x12\xd6\x8c\xd0I\x36\xa3\x1a\x7f\xac\xbe\x8c\xfb\x05\x64\xfc\x15\xad\xd1\x91" "\x9b\xe2J\x41\x93\xcd\x66\x33j\xb5\x9c\xd1\xe2 \xb6\xb4\x15\xa6\xc9\x37\x33\r\x93\x85M\xae\xfe\x37\xa3\xe7\xa3\xcd\x1e\xc3\xfc\xa8\xd6uJ\x95" "\xa3\x8b\xc9V\xf3\xf2\x92\x03[\x8f\xb2&\x12\xca\x19\x65\x34H\xdb\xb3\xa9\xf1\xb4\xf5\x7f\xfe\xad\xc7\xdb\x1c\x1c;\xe9x\xa7\x62\xb6\xb9O\xb5" "\xb9sk\xcc\xa9\xc6iL\x13\xcf\xab\x99(%\x88\xfe\xc5\xb4\x8a\xc6\x1b\xfd\xcf\xf7\xb2\xa5\x38j\xd8q\x0e\xed\xdf\xdb\x94\x03\xf3I\xd4<" "\xf9\xf7\x04\xec|M\xdc~\xd2\xfc\xfdj\x99\x36\x94\x01s\x98i\xb3wNGQ\xc3V*h\xf3\xf5\xce\xdf\x92\x46\x8bS\x31\xaam\x9d" "\xc6L\x1b\x0c\xb0U\x1e\xda\xfa!\t{\xaem\xea\?;g\xd9|\xde\x66\xda\xf0J\x1eKR\xb9\xa5v\x1b\x9fU\xb2J\x83\x35\xdf\xa6" "\xff\x06=\x8c\x9al\x95\x9a\\\xd7hJ\x93\x0e\x9e\xd5\xc1\xda\xa3\xf3/\xcc\xd1Ro\xda\xeb\x39H,\xc2\x9aj\xef\xa0\x65\xa3\x10\x36\xea" "N\x19\x38K\xa5\xf3:J\xcf\xac&\xfb\x84&]\x7f\x94\xec\xb7\x9a\xf1\xac-U\x32=\xc5\x63J\xf6q\xd7\x9c\xa1T\xc6\x0b\x14\x19\xb6" "_\t\xe1\xaf\xd8\x94\xdb\xd6\xed\x82\x43\\\x12\xed\xd2&{\xe9&\x36\xf5\n\xbfp\x05I\x0f\x37\x42\x37\x9f&\xdd|\x9aIXrr\x00" "\xd7\xf4\x92\xa7\r\xa9\xe4\xc8\x46\x45\x36\x91*J\x9bO\x1f\x11\xd3\xfc:\x17\xb7\xd8\xbd\"\xe2\x12\r&Wu\x95\xec>\x9b\xec\xcd\x94;" "MS\x9a';+]\x8c\x85\xb5\xd2L\x07\x35\x12\xad\x03\xad\x81\x66\xba\xc6\xdb\x43\xf7\xc0\xa6\xce\xef\x87]\xba\x45\x41\xeb\xedh\xea\xe1\xe0" "Z\xed\xcd\xcb\x7f\xd3|p\xc6\xb7\x65\xf6\xa0\xcdM\xfb\xc7\x99\xee\x7f \x42\x41\xc8\xec\xcd\xc6\xb8P\x43\x1c\xf9\xf0\x81}\x92/\xda=`" "\x1f\x95\xf2\xcaI/Z\x15\x39U\xf4\xa0\x9b\xaa\xaeO!^\x92\xc3\x65zt\x85\\P\xe1\x03\xed\x38\x61\x0f\xb4\x00\xf0\x42<\x61%W" "\xf4U\xa4)\xf0\xe0\xa7G\x34\xe1\xf0\x81\xf3\xd5\x0f\xf0\xf8\x36\xd2ly\xa0\xbf\xd8\x03<\xbe\x85\x18W< .\xa9\x12\xc7\x11\x8a\xcd\xe8" "_\xd5\x61\x43\xad\x0bq{\xc5\x9a\xf0\xda\?\x80)\xac\x07l\xe9\x08\x1f\x36\xe5\x15\xf8j\x8dY\x8b\xde\x1fJ\xd6-\x15\xa5>\xf3Y\x9a" "v\x9e}V\xc3!\x62J\rZ\x87o\xb7i\xea\xe7x\xef\xdav\x0e\x1aZ\x37\x13Ooi\tl\x35\x0c\xb6\x39\x05\xba=\xbc\x1d\xf3" "\xda\xb1\xb3:;\x0c\xd3\xaa\x43\x04%\x81\xf6x\xc2\xf5j\xd5\x92\xc7\xfdL|\xa9r\x39\xc8\xb4l`\x06\xcdg\xd3U\xe3\x83\x33\xd1\xb7" "\n@\xeb\?s\x04\x64\xda\xf7Q\x8c\xf9\x8a\xad\xa6\x41p\x96\xc5\xff\xd7\xb1\xe4\xeb\xd5\x0fk\x9c\xaa\x81u&\xad\x08\xbe\x07\xadh\xff\x44" "\x06\xf2\x10s#\x10\xbd\x9b\x32\xc9\xa6\xa2Z\x34\x86[\xfe$\xb2\xe3\xf0(i\x45\x18x+\xb7\x0b\x94\xaam\x17\tU\xf3\x02\xe6H\xaa" "\x45\xef\xedV\xb4j;ij\xb6\x10\xc5_\x88\x9a\xad\xf4o\xc7%\x94g|\x85\x13\xc7\xb0\x1dZ\x08\x11\xa0\xc4\xcf\xc7\xa3<\xfb\xaa\x16" "\xc7\xc6JNy\xab\xe8%.\xe2\xe6\xf6'\x81\x05\xd5\xe2\xa2WKL/\x10+\x85-\x8e\xdf[Iw\xe8\xe4\x44\x64\x8b\x9e\xe2\xad\xa4" "\x37w\x46\xb9\xc5\xa6\xbd\xca\x34\xd8\x01&\xf6\xf3\xd8 l\x1a\xfb\x83\x16\x17\x89Zt\x16h%\x8b<\x89\x02O\xf7p\xd5\\\xfej\x61" "\xdb\xac\x12\x9f\xe3\x64\x8c\x32\xcb\xf8\x04\r\xee\xe6&\xf2\" \xd2!\xc0\x34\xcc\x97\x99\x98\xcd:\xa9\xa6#G\xf4\xe1\xa6\x65}\?\x35\x04" "N\x82\xc6\xfbHm\xfd\xc4_\x1a\xd5\xeaWI\xb3\x93i\xd9\xac\x90j\\\x19\x31qx\xc8\xd9\x06\xd3\xa4\x06\xa3\?iqZ@\xc8\xcb" "\xc5\x44\xba\xb0\xe7\x94\x07\xb6\xa3\xc9\xff\\\xebh\xa5+\x16\xde\x1a\x65@\xe7\xc2\x16\x62\xc4\t\xd9\xc4 -\xc3\xf6{\x9b\xe6\x14\xc4\x04u" "k\xf3ng\x7f\xd4\xbd\x97\xa3\x31\xf6H\x87Ol\xed\x19\xb1\x38|\xc2\x8e\xc1\x90\xf9z\x42\x86v\r\x9f\xb8\x87\xe4\x89\xfe\xb3\x8c\x96\x18" "\x32\x92`\xd8\x89\x0eK`\xa9\xa3\xces\xf0W\xe8\xd0\x30\xee\x44O\xefN\xce\xa6t\xa2\x99\x35\xa9\x1d\xa4\x15\x14\xa2\xec;\x9c;P\xfa" "\xb9U\xb4\x80\x81&n:\xd6\xcew\xfc\xaf\x9a\xc0\xfd\xe1\x06\x1b\xa9L\xc3\x9e|\x11\xef.\x36\xf5\x9b\xcd\xea\x0e\x1a\xe6\xf1;\xf4*\xea" "\xf0S/\x7f\x96\xf1*|\x61\xa3\xa0\xdc\xba\n\xbd\x44\xfd}p\x65W\xfb\x12w\x46\xa0\x05\x63\x17\x86\xf6\xf0_\xd2\xc2\x17]\xa3_\x38" "\x98Wr\xd1\xfc\x05\xf9\x03\x84\xcd\xaask\xa6\xaa\x16W\xd6I\xcf\xfe\xf6\xca\x82\x7f\x65\xeb\xf2\xcaU\xcfWN+(\x39\x33g\"V" "\x06\xbc\xcb\xe8\"p\x9a\xd0\x8f[\xd0\x01#\xdb\x89.\xdb\xd8.\xa7\xed\x95\xecW\xba\x1c\xaft\xd5\t\xe6\xf3\x8c.r]\xba~vy" "\x65\xca\xecP\xff\x19\\\xed\x39\x35\x0b\xac\xed\xe6\x16m]K\x35\n\x16.)\xce\xaf\x9d\xacl*\xfaO\xab\x88\x36\xcd\x44T\x06\x15\x39" "\x1eV\xd1\xef@\xc5vgs\xfd\r\xed\xee\x37\x39\xbaG&H\xd1\xd0_\x8c>\xdd^\xfbt\xfa\xea#\x64\xa8\x10\x46\x9d\x92\xce\xaa}\x44\\\x0e\xfb\xc9\xfe\x1a\xb4\x98@\x42x`\xf4\xb9\x46\xd9" "\xe7\x13Vj\x8c\xdb\xd0n\xab\x8f\x81\x07\x44\xb4t\xfd\xf4\xe5\x15\xd1\xd5\xa0\xa1\xc2\xf4\xd3\xb1\xddQ\x7fsG\xc2\xf9\x64\x80\xc8\xb8\xa1\x46" "T\x12\xa3\x10Y\xed\xc2\x01\x39\x44\x12\x9bp\x18\xdf|\x81\x8d\xfc\xdf\xf2.\xed\xd8\xdd\x0e\xf9\x18\x94\xdb\xa9\xaf\x61\x62\xf9\x07\x8d\xf8\xf8\x8e" "\xc6o\x8e\xd9\x1aO\x34W\x81\xb4\xa6x\xed'\x1c\xccL\xa2\xdc\x8fX\x9e|\xa5'\xd1\xc5\xcb\xae\xf6\xf4\xe6\xd4\xf5v\xbc\x1e\x93\xe8\xa5" "\x06\xe2\xb5\x98\xb0\x15\x9dp\x43\x9fR\x63\xe4\xec[\xf5\x9d\xc4G\xc7HJ\xb0\xa3\xa5\xc3/h\x18HOXU'\xd8\xc9*|xR" "\xe7_l\xcdr\x8d\xbf\x86\xa4\x97\xc2'\xab\xc6\xccV'\xc4\x90\x64\x62\xf9\xf0p\x81\x34\xde'\xc8J\xa5\xc4W\xb9\xa2\x31I\x7f\xce\xa2" "\x61\x80\xc8&\xe1\x64S\x19\xc4\x8d\x37\xbe-\xd3\xbfy\x8b\x0b,\x14\xb3,`r \xf8\x62\xeb:\xfd\x0b\xabl\x91\xa6\xf4\xf2SJ\x43" "\xc0\x89Q\xd5\xd8\xcf\xa9\x18\x37\x8aQ\xa1\xed\x1a\xcdT\x8d\xa2(\x8fT\x43\x19\xd5\xdfh\xf4\xe8\xb1\x38\x7f\x0b\xf1\x32\x8f\x1d\xe9\x14\x19V" "I\xb5\xd5\xf6\x0f*\xfaU\x41\x63m\x9c\xb2\x61Q\x66\t\xa3\x45k\x05\xce\xe8\x43\xb7\xf2\x8a\xb0\x39\xb9\xe2\x84\xa5\x1e\xde\xdam\xaa\xe9\x86" "\x01L\x10\xa8\x96\x0e\x8a\xf4`\x9djm\xf4\xcct;\x9a\xba\xa9\xd4{\xff\x39\xf6\"\x8f\xeb\xec\?\xc7\xc6\xf5\xff\x1c\x80\x83\xf0\xf6@<" "\x1b\xfc\xe7\xc0\xbc\xfa\xef\x81\x64\xef\x8a\x36\xd4\x14\x11\xa6\x84\xafw\x16o\x95\x9f\xec\x1f\xfa\x63\xd2\x98R\x16\xcb\xc7\xc4\xb8:\xd0|\x85g" "y\x84\x9b\xb4\x63I\xb0\xdcj\x8b\xe4\xb8\x90\x89\x30\x13\xa6\x9cK\x9a\x8a\xc1\x92Z\xa0\xa7p\x1a\xef\xbfGu\xeev\x17\xcd\x82\xb3\x18\xfd" "\xe1\xd3sH\xa9\x93\xb5\x37\xe7\xf2\x34\xb8\xaa\xac\xc7\xfe\xa3\xc1g\x44\x45\xf6\xc7S\xb9\x44\x10\x8e\xdeJ\x7fT\"\xda\xde\xd1g\xd7\xb6\x1b" "\x38M\xeb\xbeG\x41\xc9\x35z\x06M\x39S\x37\xe5\xab\x37\x45\xb0,\xa3\xee`G#\xa1\x1a\x07\x39\xd3\xb8\xc6s\xc0\x82Pjjz\xbc" "\xa3\xd3\xb8\xe3\xae\xe7S\x7f\\R\xae\xce\xf8QS\x42\"P\xab\x1c(\xa1\x1aq\x88\xac\xe4\xea\xca\x94\x83\x1b%\x17\xb8)\x66!wq" "\xc0\x12\xe0\x8a\x08\x8f\xd6i\x62\xa1\xbf(\xe2\x19i\xcb\xcd\xf7\x37\xcd\xe3\xd6\x10\xa4K\xf8\xb2\x8e\x0eN#\xe9\x15\xb2\xa0\xf6\x17\xeb\xec/" ".\x0e\x7f\x41\xec\x99\x9e\xd2\x15\xe5\xfb/\xb0\x97\xf2\x9b]\x9d\x32\xad\x1eq)\xe3\x9b\x8d\xd4\x37gq\xbf#L\xda*\xb7\x0b\x08\xaai" "\xb4T\xac\xe3~\xc7\x87\xd6h\x7f'wK\x44P\x17\xd1\x12\x96\x19y=\xdf\x9c\x1f\xfb\x46p>\xe3\xd6%\x9d\x9a\x9f_\xff\x95\x1bI" "\xf9\x81\x1a\xbf\x89\xcd\x87\xdf\x08\x18*\xac\x1e\x81\x9dy\xd2}\x46\xe0\x0c\xd1\xb0\xed\xea\x9b\x16\xf6\xf7\xe6\xe0\x14<\x39Ok%N\?\x31" "\x86\x92\x10\x46\xb7rk\xd0\x7f#\x00K\xf8\xc3\x8e\x41I\xcf\x9d_zK\xfd\xea\xb6\x19\x94\xe8/\xcb\xecW\x97\xab/\x0b\xb1\xe5\x15\x17" "\r\xdf\xfd\x65\xa7\xf2\xcb\xe5\xcd_$\xd1\n\x7f\xe3\xfc\xf5\xce\xa7\xb9\x0f\xf2\x17q\xb3\x84\x1e\x1a_\x44\x0b\xd2(\xc4p\xf0\xd7\x8f\xa7W" "\x35\x8a\x33\x8e\xcf\x18\xdd(\x9c\xf1\x8a\x66\xac\xd1\x33\x0b\xc7\x82\x8fr\x63\xd2\x8c\xfd\xd9,=\xc5W\x36X|[\xd0\x94T\xc6\xf9=\xee" "U[\xf0\x07\x16\x9c\x0cQ\xca`\x42z\x02\x0c\x94\xd9\x1f-\xb6n<*nG\xe7\xd0\xde\xe9\x41hZ\xe9\xce\xcf\xad\xda\xcd\x31\xb2\xc3" "\x43\xab/Y\x39M\xf3\x88\"\xd0,v)\xc4\xd9!\xfbG\xd3\xe6\x93\xb4\xdd\xce\x34s\xdb\xce\xb4\xd5\xbe\x8b\x34\xcbM,\xbcp\x92\x88" "\x1aWvL\xb3nN\xd7\x43\x96\x45\xb9\x39:\x8a\xda_\xd0\xb0\xa8\xb8\xddXn\x1a&\xa3M\xf4\xbc\xd1\xd0\xb2\xa9\xaf\xc5\xd6=\xc9\xc4" "|\xc0\x99\x61\xd3\xd0\xd9\xa9\xb8\xb9\x1ds\x16g\x11\x63\x66\x66\x41\xfb\x7f\xe1\x05\xcaI\x63\xa5\x14\x10\xa7HTK\x0b\x07\xdc\x33\xbb\xc8\x8e" "v\xf1]N\x9c,X\xf0K\xd6\xc8\x65\\\xb1\x16\x62\x99\x86\xf4\x62.\xff \x96\x1a\x9c\x9aZ\xb3qPz\xb5\xa1{\xd6:\xad\xfc\"{\xa5" "\x88\x18\x63\xe9\x9c\xc6\xdf\xd2'\x39l\x86\x43#\x7f\xb1\x30,\xce\xa5\x11\xb9\xa7\x44\xfc~\x8e\x9b\xd6\xea\xae\x37\x16\x18PX\x39\x05k\x1f" "\xfe\xcc\x37p\xdcY#\x99\x88\xd0S\x41\x88\x88P\x32\xeb\xcdW\x39n\x8c\x10\x93W\x1aW\xeb\x07\x84\x36IjL\x07+L\xff-\xf6" "`\x92\x19\xb3Q\xd0\x62\x0f\xc1\xbb\x16GX\\\x37\xea.\x34{'L\x93\x12\xc3\x8e\x65\xd3\x32\x8f+\xd1,J\xf5\xe2Ht\x11\xfd\xfb" "\xa2\xe9\xb4\xfdV\xdb\xd4z\x99\xc6\xb3n\xcc\x07v\x91\x43\xf4o\xa1m~\x35\xc2J_\xe4\x62\xdb;!\xb4\xc1\xb6\x10\x17\x9fK*\x0c" "!h\"\x42\xee\x99\xa8\xeeR\x07\xaf\x99\x66\xcd\xf6\"\x97\x9e\x1f\x81\xd4\x61v,\x8e\xe3\xf6\xbb\x11\xa3;\xa3v\xfb\xcf\x39\xd7\xd0\xeb," "\xb8\xe1{\xc1\x38\x02\x8b\x63\xac\"-\x8e\xf9\xf7\x13y{\x18W\t\xaf\xf0x\x30gl\xcc\xbe\x38\xb8rz\x99\xa9\xd8\xffqq\xa7\x10\x44\xcb\xbe\xb6\xbar\xee\xd4" "+\xd1\xa2\x93\x00S\xe1\xd0\xfc\x94\"\xda<\x33\xc5\x9fL\xf4\xf5O\xd3\xb2[X\xed\xfeP:(\x62\xdf\xa1i\x98\xee\x13\xd1\x16'\x16" "U,\x32*\x1f\x9d\xe9\xf0\x82}ou\xb3\x8f\x8a\xb5\xb9\xc6#\xc6\xbc\x9d\x10\xd5\xe1\xf6\xcf\xc2\xd4\xab\x9f\x8dU\xa5[,\xc7\x0b/\x8b" "\xd1\xf3\x08n\xe0\x8b\xdb\xf8P\x97\xd9\xf9Xn\x11\x1aIX\xd5 _\x30\x85\x45k\xbc\xc5\xa3\x03\x84H]\xdc\x62\xf1Zh\xa1\xeb\x16" "\xb7\x98&\x30\xea\x88\xf4\x1bg@ \x17\xa1-\xbf,n\x37\xe5\xb5\xd8\x84\xe9\xfc\x04\x1al\x95;\xcc\xd8/\xee\x92\xd0\xbeu\xcf\xd6\xe8" "\x1e\xb3\x00\x8b{\xf6\x9c\xf7\x98\xebY\xdc\xc3\xeb^\x88\x8ay\xbf\x99Y\xe1\x35\xa2\xf3&\x88\xe6\xa3\x81\xe9\x95\x45\x03\x61\x90\x16M\x9e\xb7" "\t\xafT!\x9a\x1f:\"\n\x61o\x35m\xd8\xfb\xea\"M\x86&\x66\xdb\x16Mv\x88M\x36\tM\x36\tM^U\x33y\xff\x05\xbf" "\x8b\xa0\x45{\x30\"\xaf\xb9\x89pg\x31\x11\x8e\xc2*.\xb7G\xf1\x9b\x89\r\x1e\x95U\xb2\x99\xb6_\x10X\x05\xda\xfa\x01\x9e\xe9\xfa\x87" "Nt\xfe\x98\x89R\xef\xf0\x1e\x37m\x81\xee\x94\"\xbe\xc9\xe7\xd1\xc4\x9c\xbf\x91\xf5\xb1\xe9\x1f\x15\xc2\x0bJ\xc4{{\x99[\xd9p\x64\xc1" "\x99\x38M(\\ \x9b\xdb\xbf>\xf2\xc1=\x46\x97!h\x9b\xdd\x84\x36\x62T\xce\x9dY\x46\x62h\xc1y\x94\x63\x18\x0fM\x03`%\xfe" "\x18\x1f\x8c@\xf3[R\x96\xc9\xa1\x33Ks,Z\xd5\x9e\xcb#\xfc\xd5\x84\x1d\xfc\x38\x1b\x9bGx\x97\x1b\xf9\xf6\xaa\x98\x9e_Pl\x90" "\xdfN\xf9\xf9x\x1f\x37\x82\x38\x17\xc2\x0en\x00\x0e\xc7\x42<\xe3'xP\t\xcdGj\xf1\x84\x30\x41\x8bN\x64\xc9\xc3\x16\xcf\x08\xce\xbd" "x\x89\xd1\xcf\xbe$\x0b\xfb{\x37\xb1\xcc\x46\x8b\x37\xd6\xad\x37\x8c\x82\x17o\xbc\x9a\x37\x8c\x62\x16\xef\xec\x9f\xdf\xd9\xc3*\xb1\xcf\x43\xc4\x93" "\x8c|\x94\xef\xd1\xe9\x10\xb4y\x1e\x61q\xe8\x64\xbf\xf4\xce*\xff\x8e\xcd\x04\xca\x15\x88'&\x1cJ\x9d\x41|\x1a\xd1\x9e\xef\xb3\xf0\x86\xaa" "M\x9d\xf2\x7fzt\xf5\x8fv\x0f\xcd\xc2\xbf\t\x87%g\xb6\xa7L\x35\xde\xce\x90\xbf::\xd3<\x01S^\xcb\x12\x37\x8d\xf8n\x46\xf5" "\x99\x87i\x62Z\xd6\xb6\xbe[\xec\x37\xdc\x12\r\xc5w\xbe\x97J\xf5\xe5\xb2\x08X\xa2\xa1\x0e)\xe3\xda>&oL\xdb\xb9hv\xea\xef" "\xf0\xffQ\xae\x9c\xf0\xd8\x17\xd1\xa2\xf6\x1a\xb3\xbc\xc6\xa2\rp\xb7;\x85\x84I\x81\xc5;|\xc7\x85\x30\x8d\x95\x1c\xd6\xa9\x88\rU\x14{" "\x10Q\x95\xde\x93\x87\t&\xbd\x44l\xf1O\x8f\x07l\xda\xde\x91!]\x88\xa6\xf0\x9d&\xe4;\x1b\x8cwl\x82\x97[\x43\x93\xa7\x8cJ" "\xc5(\xc0u\"\x92\xbe\xf0\x10\x17+-\x45Z\x38`sH\r\x9e\x89\xa2\xa1\xc9xg\xb7\xf4\xf1\x17\xbe\x44\xc5\x43\x0c\x8a\x17\x1f\xd8j" ",\xb4\xd8}\x8b\x8f\xf8\xe0Q\xc7*h\xfe\?\xe2\xfcm\x96\xadp\xf1\xb1\x39\x39I\xef\xee\xb1\x45\x61\xf1\x89I\xcf\xc5\xd7\xb6\xcc\xbe\x30" "\xbe_\xf4\x10\x46\x7f\xd1\xe3\x1b\xdbg\xad\xef\xb3}\xef\xb3\xe1\xe8'\x95qt\x91\xe7\x30I\x35\x9d\xab\x87\x36\xe4@o\x94\xd8\xe2\xfb\x62" "\x02\x37\xc1\xc5\x94\xb6\xf7\x14\xfb\x37\x17S\xda\xb0\xc2/\xd0v*\x08-.\x8ar\x06Z(\x13!^\x98)\x8d\xed)\x1c\xd7\x16\xd3\xd8" "\x66\x8b\x84\x96\x9c\xd4\xa8M\x1c\x1e\xe6\x34~\x1a:\xe3\xc2\r\x87\x06S\x0eZ\xa6\xb1mY\x14\xe2\xbe\xa6\xd8u\xb6\x98\x62\xc9]hi" "\x42\x16S\xacX\x08\x43+\x8f)G\x9eSi\x95\xb0\\+\xa2\xad\xdf\x08m[\xcb\x62\nO$\xe1\xd2^\n]\x06\x88J\x83\xf4p" "\x99\xdc\x1f\xc1+\x64\x31\xa3\xf9\xcby\xed\xc5,)\xbf\x82\x30%\x84U\xf0\x91\x84\x45=\x63\x1d\x08\xe0y)\x9c\x97\x9c\xac\xb9*\xd2\x44" "\x0b\xa2\xd3\x10<{\x06\xcf\xc3hx\xc5\xe1X\xc0\xba\xe7\x06W\x80\xcdN\xc2\xe7\x11hN\xc9\x42X\xefJ\xb6v\x01\xfc\x82\x8c\xbc#" "\x15\x91\xe8R\xc4\xf5\xa1\xfe\xcc\x41\xe0\x1a\x66\xcd\\\x64\xb9\x05\xf1\xf1\n,\xb6@\xf3\x1aS>G\xea\x9b\xfe\xec\x9a\xbc\x8b\x99\xd6\x38\x8d" "\x8e\x8b\x08\xa0)\x9am-\x14\xda\x82\x82\xd1K\x81m\x41\x80\xf9@!\x9a\xee\x00\xbb\n\x85h\x1b\x02\x38\x83{\xa0\x0f\xa1yT\x0b\xf1" "R\x07\xf0\xdd\x13\xb6\xf7\xc8\x8e\\\x1c_\xd4\x80m\x89\x10\xb7\x02\x07\xb7\x45\xc0\x01i\x80\xf8\xf8\x42\x0b\x91*\xbc\x43\xb9\x61\xa1\x45\xd8\xc6" "\xd5l\x9e\x9a`GsN\xc1\x93\x61y \x95#n_\x9a\x98X J\x63\xd2-\xa2\xd6P\xd3\xeb_\x1e\x45\xe7}p\xb8\x34\xc2\xcf" "\\\xf8\xd9#\xe7\x9b{\x36\xe8\xa2}Uv\x34\xf4\xa8\x46<\x9b\x65\x0e\xc5\xb5\xcc\xc1\x1cYr{\x9a\xd0\xfa!#\xc2\xbc\x42\xfc\xe6\x92" "\x91i\xd9\xf4\xa3h<\x8a\xea,\xb4\x1a\"\\\xe2\xb8\x9f\x03\x93\x06K\xee\xe0\x37\x46\xf3\x35\xc2\xfe\xaa\x46\x9a\x91\xb5\xe4\xfe\xfe%\x83\xfd" "\ts\rrHN@\x1b#\x0b\xcd\xf6\x14\x9e\xe3\xfb\x98\xb5\x17\x96\xce@\xcb\xe3\xab\xec\x82\xf6\x42\x08\xaf\xab\xa0\xb5(\x42s\x62\x10\xe2" "\xae\xae\xd0\xe1\nG\xbc\x1e\x9b\x99_r\xe1[y\x8a\x19\x7f\x11\xcd\x41\x46\xc9S,\xf6\xd4\xab\xd7\xaa\x01\xb5|\xa6\xad\xf1\x99x\x1f\x97" "\x87\xf9\x31\xe5\x03X\xc3\xcf\x61\xdf\x82\xb0Y&Q\x1cp\x1e\x17>.\x9c\xb0q\x45\x34\x9bTh\xc1\xc6\x85\xf6\x8a\x0b-\x84\x93pQ" "\x8a.\x1f\xb0\x8d\x61y\x85w\x45h\x19/\x94\xd4\x0b\?N\x0c\x63L\xc4\x46S\x11/\x0f\x9d\x98\x62\x36\x11)\xe7\x45\xbc\x45\x19\x61n" "]XGY\xa3\x89X\x32\xd8\x9a\xd0\x06\xb5\xc2~\xdb\xe9\x8f\x45W\x9b/^\xd0z\x99\x96\x8d\xbaU\x1b\x81\x03\x9e\xde\x1c\x02\x95\xbct" "\x16\x04\x8c=\xa3\x8c\xac\x11\x86\x1f\xda\xfa\x1eV\x81iX\xfd\x81X,\x61\xfa\tZ\xff)\x13-\xc9\x84\x8b\xff\xf9\xd8\\\xc6`\x85L" "\x0b*X\x30\x34M\xb7\xb2z\x61\x88\x96/\x9b\xa9\x18\x64\x07|\x93\"\xb4rQ\xd7\x0fvnT\x8e\xd5^\x30\x43\x03\xedKZ\xa1\xd3" "L\xfb.\xa5\xddS\xd8\xdcv@\x43\x00\xfd\xbe\x64\xda\xc5\x00\x9b\xaa\xa0\xb9\xd3/\xb4\xca\xdbN\t\x64\xb9k\xa1u\xaf\xe0 \x04\xed=" "@\x0cgh\x1e\xa2\x65G\xcb\x1e\x99\x1f\xf8\xf7\x0e\xe0*\x9f\x8d\xf9q\xcc\xe3\xfe\xb9\x96z\r\x10m\xd0\xc3X\xdc\x35\xf8\xa3\x41s\xd7" "zh\xeb}\x64Q\x37mS\xde\xc7n\x13\xd1\x96W\x64\x8dl\x61\xb7\xe6\xf2\nv\x9b\xf0\xb8\xe1\xf4\x9a\x0e/T\x61s\t>\xe1\xd5" "\xf4\x82\x82\x0b\xb3\x90\xbf\"\xb4\x00Y\xf7;\xf7\xab\xb9\x41\xe6\x13\x0cK\xa1m\xab\x83h\x99\x1f\x12\xb4\x87\x1f\xccT\x9a\xa6\x0fo\xfb\xb7" "\x9d\x87'\x9a.\x8f\xf2=\xcd\xb4\xbf\xf0\xcc\x1b\x13=\x36\xcd\xfe\xbc)\xaf\xf4\xd5\x61\x8d\x45j\x12\xe1]\xce\x99\x45\xd9\x36-\xa9|\xa7" "\x83\x66\xa6m_\x1bh~\xb7\x99&\xdf\xc6<\x95\x1d\xd3U\xaa\x43\x9e\xb9\xfd\xed\xcc\xf6\xb6\x99\xb6}\xbe\x15Mvtw\x89\x38\"\xcb" "\x8a\xd8\xb0\xf2V\xc6\x17j\xd9-o`\x64h\x66R+\xbd\x1bl\xe8ZrW\xb3\x10\xe5x\x03gS\xa1\xad\x13(K`\xefKw" "\"U\xad\x46\xdc\xc0\xbboY\xd3]\x1c\xdd=\x8a\xd5\xf8\xf6\x9c\x62\xc3\xb9\xb9\x39\xa1\x38\x07\x17\xafpjQq\xa0\xfe\x33\xc1\t\xdc\xbd" "\xec\x00\xdbG\x8a\xff\xe7\x30\xd4\x0f\xed\xbf\xef|\x85\x87\x97\xf5xZ\x87\x9f\xd3\xbf\x7f\xd1'\x7f[\x96\xbf %pz}\xa0q\xec," "n\x86}*=\x7fs\x11\x39\xfd\x44\\\x37\x37\x65\xab}\x35\xf6\x7f\xb5\xe8\xf4\x64\xe7\xe4\x98\x0eVR\?\xbb\x06\x8b\xb8O\x36\xa4\xb5\xa8" "\xfc\xae\xff[\xde\x64\x61\xe5\x98\xe4_-\xb0\xc8\xce\xdfo\xf3i\x1e\xf7\x85M\xf1\x46\xf6\xc8\x14\xe3R\xd5\x35\xf6I*\"z\x8e\x88\x96" "m\xc8\x08\x8f\x1a\x11\xdb\x0fQ\xbb\xa2\x41\x18,-\xab\x1cx\xfeL\x07\x01\xc4\xee\x31\xfb\x7f\x15\x11\xaaR\x45\xde\\\?\x0f\xb7 \x15\xcf" "\xe2\xd1\x33\xc5{\xf2'=\x1bQ\xf4O\xad\xb0&m\xa2\x17\xa6\xee\xeb\xfc\xea\xee\x88\x9aq\xa5\x31\xd2\xdd\xcc%\xde\x80\xfa\xaa\xdd\xb3\xa1" "\xab\xc1]M\x1e\x96=\x93\x82\?i\xacG\x0b\x7f\xa7\xf2,\xe4&\xb4\xaa\xb4x\xf1\x30\x0e\x94\xba\x34\x0eS\xc4\xb4I\xc1\x45\x64\xbd\x10" "\xd1V\x7f\x85\xc1\x91\x93\x36L-\x92\x9e\xfa\xe4\x11\x33\x8d\xa2-\xc3\xdd'\xbe\xaa\x61\xe1\xdf\x44\xfd\xedL\xfb\xcd\xc4u-y\xb1\xfe\xa0" "\x16\x9f\x9c%w\xf8\x41\xb8\xb4)Q\x37\xe2\x8b[\xa7\xbe,\xef\xf8\xed\xf8J\xc6\xab\xc5\xcd\x41'\xd3\x06\x81\xae\x02Z\xc2\xc6\x7f\x0fH" "I\xa4G\xb8/,\x43*\x07N\x19\xab\"\xf9N\xa6\xf9)\x44\xfb\xc9\xedh\xc8\xe2(\x62}\x81\x44\x82&\x62\xe5\x80\xe2,\x13g\xaf" "\xd9Y\xeb\x0by\x87v\xb5\x41\x8f\xe6\x13\x34\xdeP\x03\x85\x12\x37\x87\xce\xec*\x61\x44\xd5\xe2\x61\xc9\xb9S\xee\x18\x65\x08Y\x95\x84\xc8\xf8" "\x01\xf1\xa1\xe1\"\xf6.\x98\x88\x35m\x13\x31\xc1\xab\x62\x0b\x9c\xee'\xa7#\xf5\x1a\x9d\xf3\x8a\xbf\xfbQ\xff\x33\x13Y\xad\xe0li\xf4\xea" "\xc0\xae\xaf\x96\\\xe2\xd7\x93\xca\x90\x44\xb1$\xf7\x07 \xcc-%\\&)v)\xd6\xe1\xaa.\xa2M:*\x9f\xc0`\xe2\xd4W\xe0\xf9" "\xde\x35\xec\xffP\x11\x95\x0f\xab\x10\xca\x12\xc9+X\\\x90\x37\x1a\?\xa8\xc7\xeb@w\\\x43pt\x61\xb1\x13\xb7\xcb\x10/\xf0\x85\xb4\xff" "\xeb\xbf\xc1\xee\xb6\x86\xb9\x0e\xe1t\xc0\xb1\x41M\x06\xc6;\xad\xd3\xe6Zs\xa7\xfa\xc9\x37\x95\x9c\xd3\x1b(\x88\x34\x87k\xf0\x12\x30JM" "\xdf,p\xeb\x9b\xc6\x91\x97\x38\xdc\xe7\x8c\x1c\x34\x99\xc8\xf6H\xb3\x9a\xe5\xbe\xbc\xe4T\x83\xd9h\x62\xef\xff" "\xb2u\xdek\xc9\x43K\x17\xbfu\xe9\xdd\x8a\xa2\x82\x05\x05;MP\xe9\xdc\x8c)\xfc\xf5\xdd\xc2\x37\xb3\xd6L\xcc{\xcey\x1e\x1f\x7f\xb3" "\x42\x08\xc9\xce\xee\x65v+\x65r-\x06\x95O\x1a\xa6\xc2\xb6Q\xae\xe4R\xc1\xea\xe7O\x8dSW\xe1h\x16L\x8f\xbe\x62\xea\xe6lL" "\xce\xd7\xda\x01W\xbd\x89\xae\xb6\xa6\x1a\xc1\xe6,\xda\xbcQ-\x8b\xf4\x84 \xe6\x0e\xef\xe5\x9a\x1b^\x08\xd9\xca\xb8\x66\x07\x89\xf0\x13\x39\xd3" "\xb5U\xe7\xaf\xad\x42~\xcd\xbd\n\x85\x17\xbc\x64\xfc\x43Z\x8e|M\xf7\xe2\x42\x34}\x85\xe8\xd0\xdbt\xb9~i\xf3\xc0\x61N\xe5\x61\xd0" "or\xd6\x8a(t(o\x1e\x02\xac\x0e\x01\x39\xabU\xcd/\x12{\x06\xb8\?I\x90\xdd\x11\x62\x62\xff\xad\xcd\x03;\x1c\x85|\x15\x0ft" "\xd7,\x64\xed\xf6\x81\xcd\xf4\xcd\xc3\x9e\xd5\x18\xa5\x84\x13G\x90\x36\xaf\xd6\xf8|\xa5\x9f\r!\x9b\x99\xaf\x16g^\x83\x42\x85\xab\xa3\xd5\xe4" ")\xd6\x1c~\xb5\x16\xa1\xf5\x83\n\xb1\xa0\x43\xf8\x88\x37\xfcj\xed\xdfW\xfat\xdc\xbcZ\x0b_\xf8N>\x34\x8c<\x8f\xfd\x05\x42\xd6\xe2" "t\x39LP\xbd\xb7\xb7\xf8\xc6\xfdN\x62x\x8aSu\xc8\x15\xdaj^\x87\?\x13\x8e\xe2o\xcc\x15%\xa8\xdf\xc0(\xfd\x06}\x89\xd5\xbb" "\xfd\x15J\xc8\x37\xb9\xaa\x66\xecXV.\x8a\r\xe1\x37\xdd\x66$\xf3\xcd\x85P\xa2\x06\x1bg\xea\xea\xc1\xd8\xae\xb0\x39\xfb\x9d\x97\xd8\t\xbf" "y\x63\x87\xb0\x10K\r\xc0\xe0)k\xc9HUx\x39\xe0Z\x1fW\xec\xab\xa2\xfa\xbb\xba\xaaU\x93}\xe1Pq\xb7n\xed\x90\xb7\x30_" "$\xcb[\xb2S\x91\xaa\x34\x87\x88\xa0\xc2\xe6\x9c\x9e\xd5\x45\x61\xf0R\xc8\x0c\xfa\x8d\xeb\xff\x36o\xdc\x18U\xc9\xfb\x8c.\x18\x82\x9cO\xbf" "yS\xc7\xd8\xbd\xe7\x88MZ\xdb\xba\x1d\x8c\x66\xa3h\xc6\xef\xd2\xeb\x99\xb2\xefL\x85\x44<{t\xee\xaf\xa5\x82\x91\xa3\x42\x1f\xe1\xe6m" "\x7fPL=-\xf7\x89\x15\x0e\x32\xce\xa8\?g\xf7\xe9\x66\xc8\xe1Z\xe5\x80\x64\xe1\xa0\xd4\x19\xc6\xac\x8a\x98\xda\xb7\x86i\x85\x45\xacP\x81" "\xaeQ\xb9p%\x37\xc9\x89\x87)\xa5\x15\xe4\xe3\xc3`\xf7\xfe\xbf\x0es\x98\x08\x87\xe3\xfc\t\xd7G\x41\xed\xdf/\xb9\x7f\x8f*\xbb\xe2\xf2" "\xd0\xf9\?\xaf\xbc\xeb:\xa5\xf4\xb2\x06$\xd4\xdd\x9d\x9b\xea\x8d\x86u\x1fU\xc9\x8e\x65P\xfb+\xa4\xb1\xa1\xa5\xc1!\xa7\xd2\x08\xed\xa6\x02" "t#\n\x31\xac\xa2\xe4W\xadU\x39\xf4`\xe0\x96p`\xf4\x96\t\x8e.\x13\x05\x07S\x30-\x83\x19rT\x02L\x0eI\xac+L%" "\x37\x96\x46\xac\xb9\x64N\xc8\xcc\xe1\x93\x93\x80\x36\x9f\x16\xf1>-@>\x39\x01}\x33\xe3^\xa4\x9b\x45\xc8\xfa\xe1\"\xcalIV" "\x81\x16\x12\xb3\x41I\x15\xc2m\x86\xed\x91m&\xac\xaeI\x9c\xb7\xcd\x44\xc8\xc4\x85pR\"\xc4\xae\x88\xdb\xea/\"\x86\x10\x95\x16\xe1\xe6" ",\xf8*q\xe9\xed\xb6\x1a`\x11\xa2\xb0\xd0\xd7=\x8b\xd1\xb6\x11\xd5\x38\x63\x1a\x13\xf3\xe8\x9d\xc3!\x62\xa2\xe1\xa2\\\x92h\x91\x08\x91\xab" "\x83Q\xad\x45\xc7\t\xa2\xfa\xdf$\xca\x1f\xe1\x82g\x85\x07o\x64\xed\x98\xc4\x88\x96\xf0\x96\xbf\x1d\xde\x97\x8dG\x64\x97wJO\x9f\xa0\xba" "\x14\xea\xbc\x88\x8d]\n\xaa\xc9\xe1\xf2w\x62\xc2\xed+L:\xf9\x84\xc9\xdc\x8b\xe6\x45\x33\x31\xd1\xb5\x46\x13\xdd]\x30\xe3|\x36\x31Q\xea" "\xd0\x44G\x86\x9avh\x9f:\xe9\x93\x19\x66xs\xe2\x66t\x31r\x33\xae.\x12sRtS\xea\x13\xa9oz\xd8\xc7\xcfOq\xeb\x95S" "\x97\x45\xcd^\xe4\x0e\xfc}\xc4\xf3\xa3\xf8\xa8\xc3nlU\xa3x\xc9\xef\xfbsri\xa8\xf0\x95\x61\xcf\x9dw@\xba\x9d\xdd\xd6\xa5\x02\x92" "L\xf3\xde\xd6\xc3\xd6}x^\xe0l\x18Q\x33\x9e\x13} \x35\xd4\xf7\x0b\xc4$\x38\xf7\xda\x1e\xba\x19\xe7:t\x0c\xa1\xaa\x93l\x1e\xaf" "j\xe0\xd4\xd3\x30\x45@\xd5\xc6\x19T_X\x0f\x82\n/\xc6\\\xea\xe5\x07\x38\xd5[\xcc\x45.\\\xd5\xf6\xf0\xa3!\nuT\x65\xcd\xb8" "t\xc6\xe7\x95\xc4\x44\xc7\x15\xcd\xdd]\xc8\x00S\xa5\xbb\x13\x35\x92\xd3,R\x1e\xfe\xae.\xc2\xcf\xab}\xc1N[\xf5\x93\xe7\x43{\x63\x8b" "\xdd\x01$\x36\x9d\xd9om_\xc8\xdd\x35\xc8\t\xbf\xca\xb1\x93\x8d\?\x35\xbf\x9d\x92I\x87m;\x01\x93V\x95\xbc\x05\xa3\xbb\xd4s\xf3" "\xb0.\xe1\xee\xbd\xca\xff\xe8u\xf9\xbf>\x94\xc3<\xe5\?>\xdcnRj\x7fU\xd8\xb7\x8b\x9c\x96\xc1\x63R\xda\xb0h\xa0\x1aK\xa2O" "_\x00\x07\xe8\xd6#}xp\xa9}\x34\xa5\x01k\xbe<\x36,\xe9\xef\xa7N\xfa\x1f\xe1\n\x0f\xdfw\x89j\xee\xb8\x18\x88\xaas\xa0[" "w\xf9\x16Jv\xac\x12\xe9\xd6\xba\xba\x1e\x9b\x8dx\x1e\xfe\xfa\t>\xe7\xf1\xe0)h\xbcs\xee\x1d\x0e\xd3\xcd\xde\xbf\xef\x80=\xd7\xf2_" "\xe3\xd2\?\xf7\x12g\x9at\xf6\xe3j\x9f}\n\xb2/\xac\x1d\xa6\x8e\xfdW\x90\xc7\xb9M\xb8\xb2\x1a\x46\xea@j\x11\x9b\x1fNN\xc2^&\xca[.\x30\xfe]~H\x65\x81\x9d\xa3" "r\x98U\xbc\x43\xfa\xb2\x03\xbd(\xe0\x14\x30\x30|\xcd\x87Oy\xf6\x8f\xe0\x80\x14\?\x89\xc2\x04\x89\xed!WP\x81\xc1\xea\xdb\xaa\x8c\x87" "\xf4\x8f$\xac\x30\xef\xe4\xb4\xf3\xed!]\xb9\n\xaf\x46\xce\xb8\x32\x8a\xb7\x63SK\xf6\x33\x88\xd9\xb1/vn\x8c#'\xfb\x44i\x9e\x65" "\x12s\xd0JL{\?\x62r`\xd7M\xf6sPY\t)\xe6\xfe\x89\x91+\xbcm\xa5\xf2\x90\xf0\xde\xae\xf7\xf0\xe4\xc4\x36\x65\xf6\\\x8f" "|O\xecK\x17\x0e\xecr\x03\x46\x33\xae\r\x10N\x32\xec\xb8\x14\xf3\xafh\x0c\xa7\x15vz\x8a\x39k\x87\x97\xcd`i\x81\x39\xfbt\x06" "\x85\x83\xfd\x62\x9c(\xe4\x86\xff\xaa\xc4[\xd7\x7f\x1d\x0b\x86o\xd1\xfb}\xf2I\xefY\x92W\xa2\xa4\x00\x9e\x7f\xb9\x8aj\x43\x37\xd9\xaa\xa1" "\x39Y\xb8\xf9w\xee\x96\xfc:sZ\xd5UM\x0e#\x89\t\xe7&\xa0']\xa9t\x84\xab\x9a\x99\xacNx\xaa\x13JU):\x39\x37" "\xc5g\x8f\x9a\xce\x1fM\xdb\x07|\xc3\xd1\x15S\xb3Wg\x38\x89]\xd8\x31\xdd\xb1k\xde\x32\xbd\x45V\xa0\x46\xfd[\xf2\xc9\xce{\x66\x98" "r\xbb\x13\x30U\xde\x45\x9f\xa7\xec\xd2\x16s\xf6\xa0\xf5\xad\xed\x36\x9aL\xd9\x8d)\xc7\xac>\xa3\x39l\xf6\xc5M\xfa\xd1\x16\x33\xcb\x1b\x97" "l\x94#\x35\x62V\xecP\x85w\x13\xd7\x8e\x8c\xcc\xa3\xb8hL\xd8}\xd4\x85z\x8f\x8c\\\xdc\x63\x1cL\xe5\xf9\xa2<\x7f\xe4\x44\x43P" ";\xb2,mq\xe0\x18\xd4\t\xac;\x06v\xfc\x66_\x1f\x31>s\x03\x0b\xe1'\x63,w\xf9\x14\xfe%\xedX\x9a\xe9\x9ao\xf2G\xd8" "\xed),\x31o\xdc\x9f\x32\x44=\x7f\xe2\xfa\x32\xa1\xdd\xbd\x30\xf1\x81\x04\xe5\x39\xa7\x9a\x16\x87u\x16\xd0\xf4\xdcM\xf5\x10\x39\xbaq\xc5\xd6" "\xb6\x98=\xa6\x1b\xce\xeb\x16>!I\x99\xbf\xebm\xd3\xea\xefM\xab\xe7\x35\xff\x9aX\xd7Q\xa5M\xf2#\x65X\xcfZ\xe3\xe2&i\x0f" "\xa8\xba\xfd\x9dK-y\xf9\xbbn\xb8\n\xce\xae\x12\xb5\x94J\xdf\xc8\xea\xfb\xe6\x37\x11\x8c\x06\xcd\x08S\x63\x44I\x35\xb7\xd2\x66\xd7\xcc\xf6" "V\xbd\x64]o\xb9JW\x14\x8b\x84[\xf6\xdcmo\xc3\x83\x91S\x37@\x84\xe7ZQ\xe8I\x14\xc2\x97\xa6\x30\xdf\x33>;\xf5\x9a\x98" "O'\xea\x92\xbf\x64\x39\xcdm\xf8\xcd\xe7H\xdd\x12=\xbe\x08\xff\x39\x1a\x1f\xf0\x0b\x16'o\xad\x9cT\xee[\x03KO\xb7\xf1\x17\x7f\x34" "\xdeN\x9c\xec\xf1\x84i\xef\xe6VZY\xba\xa3\n\x03\xe4\x8e\x03\x7f\xe0\xef<\xc3y\x97P\xd1\xe3O\x94\x19[R\xbc\xa3\x93y;\xb9" "\xcb\x9d(\xb7=\xba\x98\x15\xae[\xce\x64\xb7r*\xd6L\x61\xb6\x1f\x38\xad\x90\xaa\xf7l\x95\rUv\x97\x30/J\\k\r\xf5\x97M" "\xaa\x92$\xc3\xc9\x04T\xbe\x05\x38\xd5\xee\x98\xab\xd5\x44\xf9\xcfh\xdf\xef\xc0M\xf9\r)%\x93;\xde\x9c%\x33\x42\xa4\x64\x85\x9f\x34!" "\xa6G\x0b\xb5\x01\xd1ps\x7f\x96\xb7\xf4\xd3\xa3\x0fx\xe1\xe0\x98{N\x8b\tw\xea\xc2I\xc1\x19\x9c\xd6\x39\x03\x12\xca\x1fN\xcc\xe8u" "\xc6-\xed\xa8\xb0\x37&S|pT\xb5T\xd7\x63wtR\xdc+\x83\xb5]\x62\x8a\xe4\xd4\x63O\x1d\x18\xd6G\x41\xbf\x46\xc5Jg\x8f" "\xa3\xd9\xc2{\x06~\x38\x9c\x91\x63\x86KT\x9f\xc9\x1f\x07\x1a\x45\r.\x9c\xa9\x10\xf0w\xc8\x85<\xdb\x1e\xbb\xfc\xb8\x02]T\xc6\xc8\\" "\xb3\x17\x97\x1eI\x46K\xe1\xd4)\x39`\xf0\xc4\xa0\xb4\x8cS\xe9\xef^\xccpt\xce\x15*\xa2\x30x#\xbc\x96\x82\x37\x17\xdc\xf7\xa8\x1e" "\xf8\x0e-\x8bTr\x7f@\x31\x87\x8c)\xf1\x98!\x10\xcfzN\xb9,\xa7[\x88\xc2|\x65P\xf7\x32h\xae\xd8\x45-\x07\x36\xab\xb0z" "\xc9M\x8e\xb6\xbd};\xef\xdc\x1f\x1c\xef\x17;S\x45\x63=\xfa\xec\xcb\x1f\x15V\xe9\n\x1fo\xc9\xd7\x0f\xce\x12\x10\x93IV\xf9\xbb\x98" "pY\x12\x14}\xac\x8b\x39\xe7k\xdao\xaft\xb7tt\xa3o\x9f-i)-\x11>\xeb\x64\xe6\xa3\x39\x9d\xa0l\x9f\xed\xe8\xc8\xde\xdb" "\xc8\xf2\xc7Q\x9c\x43Y\x31\xda\x63\xd9\"\x18\x64\?\xecM\x8c\xed\xb2\x9f\xd1u\xe9w^\xb5\x44\?\xe7\xbe\xe9\xdb\x45PG\xd5y\xc1\x19" "\t\xdb\x45\xdc\xea\x04\xc7\xef\xd1\xb4\x95\xa8\x66\xc1\xd4:\xbc\xc9\x92\xec\x83\xdbX\xc3\xdd\x1b\x9f\xca\xe8j\xf5\x8b\x89\xc8P\x12\x36\x1c!\x11" "u\xd3&\x31/m\xbb\tY\xb3S\x46\xcbo\xeb\xd0R\x65\x9d\x41\x1b.\xcf\x17\xbe\xe5\xa5\t\xb2\x7f\x1d\xbb\x92\x8b&\x8a=\x94\xca\xdf" "\xf9\xd8\xea'\xaa\xc2\xce\x9b\x1cp\x65\xbd\x90\x30Y\x46\x9ai\xfd\xaa\xa6\xfe\xf2\x0f\x1c\x80G\x63\x9a\x18\x19\x86\xc9\xdd\x86\xc4\xc4JQ\xe1" "\x37\x92\xe1\xc6\x7f\x42\xb7\xae\xeb\x35\x38\x17\x43\x94\xfd\x1a\x07\xbb\x85\x18]\x13\xb2SPi\x15\xe5\rv\x34\xe2\xb5\xfd\xe7\xa2\xdd\x30\xf8\x91" "\n\xdf\xc4\x95<\xb9u\x10\x8aZ;SO.J\xbe\xc1\x31\xbe\xed\x86\xabX\x84\xec\x98T&\xfb\x90l\xcd\xd5\x84pQ\x8er\xe5(" "\xc3\xdf\xde\x97\x8e\xe8\xa9T\xccin\xff\xa9W\xda\x65~W\x9f \xfb\xa5\x85p\xb5/\x1cV\x18\xe7\xc5\x44\x96\x05J-)x\xfe\x80" "\x62\xe5y\x97\x91\"\x96s\?v\x05\x96\xff\x42\xb4pv\x05V\xd8\x84\x88\x80\xbb\x02\xab\xfc\x42\x84\xe8\xae\xc0Y\x9b\xc2\xe2\x01\xb8\xbf\xd5" "\x1e\xdc]\x9dM\x95]\x9dM\x12!\xa6\x12\xeel\xa5\xf5\xee\x90q\x63'm\xe9\x1e\x89\x39\xfa\xc2\x61\xc5\xc9:\xae\x9a\xf8\xe8\x9co_" "\x88\xfe\xae\xdd\x39\xa7(\xef\xa4\nW\xdf\xe7\x0e\xd9\x33*j\x9d\x01\x39\x1b]\x88\xf5* \xb7N\x11SrvI\xddH\xd7\xbb\xcb\xb0" "V\n\xeb%\x9aX\t*\xc4|\x8e\xdd%}\x00)ym\xba\xb1\x14\xf6\xaf\xc1\xa8\xbd&\x31!M\xd8\xfd \xff\xbe\xa2\xab\xf0Q\x42" "\x8b\x39\xe2\x9d\x30\xb7\x13~O\x9d\xc1\xfa\x9c\xfe\x46\xa1t\xe8g[\xa0\xda\xbe;-\xe4.\xfd\xbe\x85:\x16k'\xaaZg\xfc\x92\xa2" "\xe4\x92\xf6zM\xd9\x0f\xdc\x05\xbbVP\xc6\xfd\xab\x1fv\xceS\xd9\xdd'\xcdu\x31'G\x16\xf4\xf7\xc1g\x8b\x9c>\x39\x93\x8f\xb0z" "\x44\x88\x15\?\xbb\xfb\xf0\xee\x88\xfc)J\r\x89+\x9cv\xc9\x35\xe9\xe7\x42\x08\xbf\x16 kJ\xbb{\x16:\xc2\x43\xd3GUPr\xf0" "\xb8]\xa2\x89\x0cy\xd7\x15S\xf9jo^)\x61\xc5,\xde\x15\xcb\x14Q\xbbW\xa7\x16+\x65\x9e\x13\xd7\xfa\x61\xae\xba\x9f\xef\xa8~p" "W\x63:\xc5\xdb\x8d\x99\xa9\x81\xda\x11\x01\x37\rP\xac\x8d\xef&\x12\x1b\x95S\xce\x36\xde\xadt\xec\xfb\xfc\xcd\xcc^\x62\x62\x8a\x87\x10\xdd" "\xc0`\xfa\xc4\xe5I\xfc\x64\x9b\xd4\x8b\xc2\xa2(\xe1\xb6M\x62\x9d\xf6n\xc5\x8d\x17\x84\x18\xa5\x14\x62\x8d\x8b\x10\x33\x18w\xb6Q\xa7\xb0\x61" "\x1ak_\x84\xf0\x96.l\x96\x02\xf8\x80\x30\x35!\x99(V\x01\x1a\xda;\x1b\xc4\x15>\\\x91(\x0e@\xcd'\xfd\xd3\xde\xab\xdcq\xa2" "\x06\xc7\x9c\xa3$\xe6\xc8~l\x32q\xc6\xdf\xd5\xe0s@\xf5\x63\xb7\xbe\xb2[G\xbd]\x99'\x31\tj\xb7\n\xb3M\x12\x19\xa3\xb0R" "\xd3\x36\x03\x16\x9a\xa6\x94\xdc\x82\x8e\xad\x1c]z\xd0\xfd\xc7'\x7f\x87\xb7\x64\xb5j\xbc$ku\x63\xc3\xf8H\x32\x8a\xae\x38WMx\\" " /\xc6N\xb6\?\xc4l=s\xfb!\x31\xaf\xf8~\xb8\x92Mx\xd3wj\xc8\xd9[\x10\xa5!\xe7\xea\xce\xce\xc1\xa4\x02\xe1#\x03\x84" "\xbe/\x84\x93;y\xed!\xb3\x87U\xf8i\xf7\xf5y\x95\n\xfd\xf0\x8bq*\xfc\xb6\xa7Y!)\xaf\xa2,\xef\xc7\x92\x86R\xc2\x35\xcc" "\xde%\xaa\xb9\xe0\x82\x41Q\x95\xb2\x33z\xb0\x13*\xbc\x9cGR\xf5\\\x66q\x9c\xcd>!\xe6\xa0\x08\xb1_\x8c\x90\x99\xde*\x42UO" "\xf8\xba\xd4qH\x38\xeb\x13\x35\xa8qq\xa7\x98\xc3\x89>\xd6]'\xa5\xb8\x90#Q\xc3g\xaa\x91u\"\x89\x39\xb6\x43;\x86]|\x90" "\xf1\xa0\x8f\x0f\x18o\xe2\\\x8e\x84\xcf/P\xfb\x14\x86=V\xa2\xe4@\x81\xcf\x1b\x63\xe6\xean\xc5*\x97\xb0\xcew\x16\x37\xcf\xfc\xe7\xe2" "\xa7\xa2S\x37y\x98\xdb\x15G'\xce\x64\x92\x39T\xda\x1c<%\xe6\xf0\xdbMN\xc4\x87\x99\xcc\x8e\x87\x62\x1bOL{\xcb\xdc\xdbH\xf8" "s\xc7\x61\x63\x98\x1et\x9c!\xad\x64\x82\xe3\x90\xbcp\xf3\xe4\xe4\xf0\x90\x9a\xf6P\xbb\x92\xd3\xe3$W\xa3\x83\xec\xd2\x13\x33\xc3\x44\xb0\xbf" "\xe4\xedp\x82\xb5\x90\x85\xc4\xca\xf2\xd4\xd5~\x95w\xea{\xc2,@\xa9\xd3l\xf1r\xd6\x1c\xf0\x16J\x96\xc0\xf2nm\xf5\x86u\xb0\x41" "\x8e\xb9\xd6\xd5\x9ah\xfc\xc2\xa4W\xe9\xdd\xdaj\x0f\xeb\x64\x05\x88\x98\xa8\x32\x81:\x42\x8a\xe1\xf8\xddz\xdf\x9a\xb1\xb1$\xa6~\x37>\x38" "\x08\n\x15R\xab\x36Ju[\x43\xa2lRS{O\x85\xa1N\x87P\xea;\"\xd5\x7f\xe3K\x06\n\xf7\xa5\xd4\x88\xae\xd4\xeeo\x32n" "<\x06\xea\xf7\x42\x14\xba\x8b$\xf6\xe9\x1e\x05\xeaJ\x96&\x96\xf2\xd0\x8c\xb7\x65\x33\x9d\x15'\xfc\xed\xc2l\x84W\xdcU\x02\xea\xc4\xa8m" "W\xc4@\xa8\x81\x13m\x97\xc4\xd4\xeb\x98\x33~=\xb6\xa8\x87\x99\xb1\x99\x37\xc6.\xb9\xac\x1bu\x97_\x38\x06\x80j\x1a\xcf\x8d\x9f\xc6\xa5" "\x33`\xf0\xc0\xd4(L\x13\x8dU\x35u\xf7\x31\xf2\xcf\x9c\x39\x93\xdb\xd7&=\xd8\x8e\xca\?\x34u\x94\x1b\xb4\xe7\xde\xbd\x62\x00\x0f&\x82" ">\x13\x1c\x0c\xa2\xb3\x0e\xcd\xdc\xb3S\xca<\xcc\xbcV\x65\x97\x0f\ny#W\x9c\xc3\xac\x18\xdf\x11\xf9\x12\xf3\xef;\xefH\?\x66n\xb9" "\xe5\x1a\xd4\x87\xf3\xcf\x1c\x18\xbf\xc8\xa2\xddU\xe9\x9e,\x33\xcc\x83J\xc3\xdf\x37\x9aU\xe4\xbe\xf0m&\xc3\x34h\xe4\xc8\x43{\n-\x00" "\x94G\x35\x63\xd3h\x8fr\xd4K\x1e\xe1\xa8\x17\x9f\x30\x90\x82\xe3:\x96r\xc1l\x1b\xedv\x8f\xb7\xe8\xbaUSg@*\xcf\xfa\xe4\xcd" "Q\xdc\xb6\x9f\xd1\xe4I&w\xd6\xbd$\x1fr\xce\xe0\xfe-\xd8Y\xd8\?\xdaS\xf6\xf2\x18Y\x81iO\xd9{v&\xbf$\xe6S\x39" "\x31_.\x13s{\xfa\xbb\xee\x85\xd9O\?\xa0\x43\xf6\xe5\x63W\x1e\?\xd4M_\xe9\r\xbd\x32T\x98\xd1\x03\xf3\xd5\x19\xd6\x9a(\xf9\xa8" "\xfe\xbe\xf9\xe6L^\xa0\x98\xa9\xa3\xaf\x45\x37\xff\xbe\xf3\xeeL\xe2\x41o\xe6\xfc]$\x87\x92\xe8#\xa6\x9fh\xa9]\xf8wh\xaa\xbb\xc3" "\x0e\xfd\x03\xbbR\xff\x1b\xd3|`\xce\x83\x9f\x97pu\x92RQ\xdd\x1e\xb0\xbf\xf1\xe4\x17<\x95\x9c\x7f\x87\xca\xce\xe4\xd7\x9e.\x9c\xd8\xd5" "\x17\xe6\x9bS\xbb\xc4\x9f-\xce<\xdb\x17\x9eO\x92\x17\xf2lQ\xf9\xd9^\x9b\x1f\xf7\x30z-&\x8f,\x66\xea\xa8\xff\xb8\x9a:\x45\x35" "\xca\r\xa2\xecy\x12jrx\x43\xd7VT\xea\x8c\xcc\?{\xb3\x9b\xf3K\x0c\x8e\xf5\xf4\x17\x0b\x8c\x41\x0b^\x82\xd4\x1c\xd6<\xe7@\x33" "\x8fL\x42\x62x+m\x36,\xff\xa6\xc2\xc4m\x98\x0f\xce\xe4\xde-\xe7\x12\xa6\x0e\xc5\x33\x0b\xad\xb1=\x96N\xc3\x07O\x9c\xc1\xe9<\x18" "v\\iT\xfdX\xba\x8a\xae\x8b\xa9\xcf\xe2\xed\x02\x0e\x43Ti\x8d\x97\x94\x38\xac{\x15JI\xfc\x64\xbf\xf1\x63\x37\x37\xb7\x98m\x05\x83" ".\xe7\xcc&\x87\x82\xa1\x64T\xa7\xa6,\x94\x16\x9f\x18\x83\x80\x39s&\x81\xb1\x98y\x46-\x66x\xf0\x1c\xb5\x66\xc1I\x11\x03\x94v\xac" "s\xe7&\?\xfbW\xa5\xce\xc4\xf4\x17\x33W\xba\xc0S\x87^\xa9j\xc7\x9c*>H\x88-\x1b\x9f\x13\x65;\x42\x9b\x92\x02\xcc" "\x92i|\x90\x37\x16\x8cu'\xf6*]I.\"\xf9\x85\x17\x89r\x38\x95\xb5z\xc0\xc5\x85\xba\x17\x9f\x62\xfaK\x8d\xcbLT\x1e\xd2\x42" "\x7f\x1b:\xc0yng\xd5\xed&\x0f'\xc1\xcb\xc4\x1b\x1a\xf0\xe6\xaa<\x61\x18\xc6M&\t\xcc\x88 \x7f\xd7\x8d\xa0\xb0p\x15\x94\xa6\x89" ")\x35\x33u\xbb}\x12\xd7\x1ap\xe0\xfa\xef\xe1\xb3\x7f\x0f\xa3\xd1M\x13[U\xd0\x84\xf3\x64\x9a\xfbS\xbb\xf2u]=\xd4\x1f\xb1\\\x8a" "\xbbv\x63\xdd\x17\xe3\xd8\x89\x1e<\x98\xf6,\xd6\x18\x8c\x9f\xf3\xd1\xdd\xab\x99\xc5$(\x46\x37\x46\x96\xae\xf1\x38\xe7\x94\x12\x07\xc3\x91P\x35" "g\xf8\x33\x89,>\xc6\x63\x0b\xd9I\xd1\x19\x17\x98\xf8\xe3\xd9\x83\x91iSW\xaa\xdf\xdb/~\x1b\xad\x9d\x83\xfe\x01r\x7f\xbe\xf3\xdc\xc3" "[,\xf1\xf6\xd1\xb8pz\xbb \xde\x95\x9d\xa9\x92\x15\x1e\xe3\x85\x1e\x8f\x31Y\x41Y\xe4#`\xd0U\xd9\xecz\xa4\xc1,~\xe5\x15o" "z\xdf\x66=\x61\xdf\xdd\x04m\xfe\xd6\xbeo\x87^\?\x9c\x12-\xf7\xaf\x0bW\xc1\xe5\x37\xa6\x16S\x85\x99\x1a\xa6\xc0SI\x66\xb0\?`" "v\xbe\x7f\xeb;\x7f\xd7G\xe1m\xa2\xd2\xdf\x7f{\xf1:\xe9\xfe\x9d\x45\xd7~\xb2\x8e\x7f\xa6\xe1\xd4\xeeo~g\xec:\x93/\xcc\x9f\x8c" "/\x46\xbb\xc3\x45O\xab\n\x9bWS\x63\xa7\xb4\x98\xd1k\xa9j\x95wz\x16\xbc\xb7j\x90\xd0\xc7\"\xa8\xc2\xda\x45\xd8y\xd9\x37_\x92" "\x03\xb3[\x37\xa5\x42\x12\xd5\xdf\x13\xb5+y\x64\xdd\xafW\xfez\xf7\xd6\xce\x16z\x9bt\xbf\xc5S\xe5\xb0\x18\x00\x1c\x90\xac\x9b\xe4t+" "\x92\x8bQ\xca\xd4i\x8e'U;\xd0\x37~\xeb\x1e\x14\xed{\xaaR\x91,;\xc7\x64\xad\xe7\x0c\xca\xdc\xa0\x95\n\xce\x06\xd5\xac\xdbO\x36" "~\xc8\xa3\x0b\x63\xcfi\xd5Z\x33\xad\"\x0f\xe5\xe6q#(_Y\xae\xc7\x61\x41\xe5\xb0n\xbc$GwNL\x33\xa3\x99~\xb2\xd1]" "\xcc\xf2Q\xcd\xfd\xa5\x9d\xbe\x45\x88\xe6\xb0vY\xd9\x18\x92\x17\xa5\xe0\x36\x9b\x32\xb1JP\x15\xab\xd9\xdc\xb3Ny\?w\xa6\x82@\x14\xaa" "\x97\xafT\xd3\x87\xdf\xd5\x41p\x8fH\x96\xb3\x32\x32\x17\xdd\x37\xc9\xe7\x06\xf9\xca\xe7\xc5\x18\x9f\xd2\xbe-\x0c\x16\x1b\xccM\xa1\xda\xaf:\xfb" "+^#\xae\xbf`\x66\x08\xe7\x04\xe9\x81\xab\x13\xa7N\x08\x38yq\xe5\xafL\xcd\x93\x97\x94\x42\x97\xa1\x9alU\xe5\x30=\x17\xcc\x1b\xcf" "\x9d\xa9\x07T\x65\xef\x94\xa6\xc5G\xa8\x41r\x8e\x95\x46jZ\x9e\x90\xc3\xd4o\xe5\x0e)#\x07\x37\xbc\xe0\x11\xd9\xe2\x1b\xd8\?\xf0\xc5\xee" "\xdf\xf0\xa2\xf3\xc1\x01jPy\xec\x06\xa5\xe4\x8b\xc8\xc7\x07\x35\xa7\xae\x43\x62\xd3)o\xc9\xa2\xf0\xbb\xb8\xd3\xd5l\x0b\x04\x9e\x34uO\xa3" "\xee\xb9u\x10\x9a\xc2p_\xa2\xac\xe0-j\xbb\xe9\xefL\xf8\xbb\x14\xda\xa7X^\xd5\x39\x30\xb3I.\x0f\xc9U\xd5\xc9\x45\\\xa6\xc8@" "\xbd\xba\x95\xb5\x42\x7f\xa4+\xea\xe0\xee\xee\xd6\xba\x06\xeb\x41\xf1\x8b,\xbf\x93G\x65\xd2.\x82\xb9)\xca\x1f\x94Guk\x1f\xd4\xc3\x01\x42" "\xb6\x1e\xdd\xf5\xe5q\xb5\r\xfb\xcd\x0f\xb0\x7f\x38\xf9\x17\x34\xf5\x38\xd7\x91\x9b\xc5P\xb3\x8f\x98)\x1f\xf8\xa3\x98\xc6\xa1\x64\xbb\xa8\x8e\xbdq" "\xe3\x83\x46p\x39\xb3\n\x95\x99\xf6\xc2\x1b\xc1M;\x31\xfbs\xd2\xf5\xf0\x86\x1c\x1f\xf9\x0e\xba\xaa\xd6yr\xab\x93\x8e\xe4\x0f\x9d\xd7z\xc0" "|}%\xa6\x15+\x8dP[\x9aO\x34Y)m\xa8\xa3\xab\xaf\x0b\x9a\xacm\x37\xac\xb7\x45i\x99x#\xaa%\xb7\x19=g\x30-G" "\xcd\x8f\x13\x63\x13\x1bT%\xa6\x9f+\x7f\x64~k\xad\x87\x86n\x98Xk\xbb\x19\x17\xech\xbb\x44\xce\xde\x31\xb8\xa6\xa6\xdd\x15V\x30+" "[\xc8s\xa4\x19Zp\x62\x12\x0fML>R\x93Y\xb3\x32\x18\xad\xb0\n\x42\xd5\x06I\xe2\xd8*\xbc\xc7p\x45\xa0\xb4\x0b\x04U\x9e\x17" "\x1c\xda\xf1\xa3\x96\x33\x39\xe5\xa8\xe5\xbf\x81\x45\x8a\xca\xd1)\xb9\xcb\x39\x83\xf9\x30\xa8\"\xb7\x39\xf6\xb3\xb1\xfb\xaa\xb2\xcak\x86\xad\ty\xc5" "o\x63\x9e\t\x99|\x65\xd6r\x86\xdf=\?j\x8d \x65\xc0$\xab\xa6\xef\x1bM\x05Gu\x34\xf7\xab\xa3\xe4\xb4\xdc\x93\xd1\xae\x90\x1b\x38" "uW\x10V\?\x8e#\x16\x9dJ\x8co\xd0\x0c\xbf\xcb\xf1l\x91\x1c\xe8\x30\x80\xa4\x61 \xb7\x65\xaf\xf9\x38z\xe0#\xc1\xef(\x99\xdc\xf4" "+\x62\xde\xb1\xd4\xc2\xe2\xeb\x03\x9a\xe5\x37\xb2\xc6\xbb\x8a\x1b#\?\xdbO\xc1\x1c \x65\xa7\x44\xb2\x1e\xa2\xc4\xf8$\xcc[\xa7\x7f{\xdf\xef" "\x93\xef\x97\xe1\x1c/\xe1\x34>\xe8\x38\x35\xe1\xb2\x94\x15\xa5\xbb\xb6\x05\xe5\xd7\x94\xc2\x62uQ\xd8\xb8'>\x38\xc7\x88\x32\xf9\x97[\x43M" "P~\x9d\x63\x1bj%\xfb\xb8\xcf\xadI\xae\xdc\xdf<\x44\xcf#*vi\x9ek\x33\xa6\x35t\x65q\xe2\xdc\xaa\xda\xe7\x98g*\xb4J" "\xceyT\xcd\x90M^\x33\x62\xd3\xe0\xdcJ\xb8s\x0c\xe7\t\xe3\x03^'\x1e\x41\xb7,~\xb7\x02\x16\x01\x1ey[\xd6s\xee\xdd\xae-" "\xb8\xa7\x13\xc2\xe7\x1fi\xa5\x46\x0b\xe3\xb8\xca\xf3G'v\x9c\xcdS\x31\xaa\xb5\xe0\x0c\x94L\xfd\x8c\xa5\xf1\x96\x45\xe9\x16\x16,\x92\xd8\x01" "\x98\xa6\xff\x92\xc5\xc2\x96\xc5;\xe1\x97\x33\x39\xe5\xddN\xf9\x44\x86\xd9\x8as\xbco\xac\xb8U~\xf1\xb6\xec\xfc\xcb}\x13\xfa\xca\xde\xc5\x95" "=\xef\x95\x85\xe7\xbd\xe9\xbe\x1cR>\xd9p\x90\x12N\xba\xd4l\x0fHv\xa8\?\xc5\x99\x66x\xf5\xcdi\x94<\xc0\x62\xf7\x19n\xf1\x84" "\xd6\xd6\x7f\xb5kO\xad\xb2\x38\xb5\xfe\x15\x65\\\xc0k\x9e\xda\xeb\x99\x06\x65\xcfM\xa7\x16tS\x1b\x92Pj\xe3\xf2\xea\xda\x95\x0e\xc6\\" ",\xa8N\x37v\x13S\xf8PR\xde\xdc;\x93+\xb2\xb6%| \xbb\xb7$G%\x84S\x92\xbd\xf1\xd3\xe4{\x83&\x39\xbe '\x87" "\xc6#ru\x16\xd5x\xaa%\xb8)v\xcfUV\xfb\x98\xc2\xae&\xab\xce\xca\xa0\xb6\xb4r\x07\xca~&<\x9c%\xe6\xd1\xb1\xae\x84\xe4" "\xc8\x8b\xa9x\x38\xa0j\x65,\xd1O\xc3\xce\x97\x33X\x9e'_\xee|\xfd\x15l\xaa\xb0\?\x17L\x06vxw\x16\xb5\x87\xe1\x8e\x01\x66" "\xddg\xcap^\x08J\x07T\x9f|!\xd6T\x98\x86\xcb\xe3\xe4\xd9V]i\x1c`\xce\x99\xaa]W/v\x87\x06\xdc\x34\xca\xf2\xce\xa2" "\xe2\x9dS\x07\x0f\x46OT\x95\x12i\xa3\xb2j\x1e\xf2\xde\xac\xc6:\x8d.\xb6\x64\x8bo\xdf\xc6P\x95\xdc\x16\x9d\xea\x8eo\n\xce%I" "\xab\x11N\xa3\xd7\x19\xb9|\xd0@\xfb\xeaQ\xb1\x31\x35\x8d\x33\x35\xa7\x84\x91\xf5\x36\x88z\xd3g`\xe5\x61\x1a\xe7\xea$\xb3\xaf\xa9\xee," "\x33\xb9\x35s\x64)x\x1awZ\x46\x86\x83\x36\xd3\xdb\x43\x8f\xacT\x98S\xaf\x8a\t\x43\x89)\xa0jn\x86\xc6\x91S\nI,sR" "\xc5\x06\xb4\xd2\xdf\xb5u\xdc\x0by-\xb8\xe6&}W,(\xbe\x36\xeb\x31\x99\xc2O\x07\xb8rj\x9d\xfd)\x8b}\xe0\x33\xff\x1e\x93;" "N\x1d\xd3\xa7)\xadR*\xbaY\xa4Tr\x66w\xe9\xfc\xab\x00N\x93\xbb\xb6\x10\xd0U\x05\xb6\x1b\xe8\x9f\x1a\xdb\x13\xf4\xf9R\xf7\x1fg" "\xc1\xe1\xd0J\xca\xe9~\xfeH\xb2|\x99\x62r+\xb8rJ\xaa\x87\xd7/S\xff\x98\x16\x33\xbe\xe2\x0c\xca\x85o\xab\xfd|\xeb\x9eh\xec" "s\x33\x13s\xa9\x12\x15\x9c\x1d`-\x90\x1e\x38M\x18\x34\x0eS\xa6<\xb9\x34`\x92\x0b\x9e\xf5\x83\xf1z\xdf.P\xad[\xbf\xab\x0b\x9a" "\xdb\x9a\x8e\x45\x32\xa6~G\xb9\xf2\xef\xbc\x44\xf3\xe5\xd1\x89I\xd0\x89i\x63\x00\xaa\x82\x46I'\x45U\xb3\xc9\x81\xa3\xd6\xfez\x9b>p" "\xb7\xc4\xd6\xe7i%\xb5xi\xb2\x04\x9d\xc7`{*\xa5v\xea\xea\xfc<\xec\xbc\xff\xce/\xfe\xd7\xe7V\xc6\xab\xb9\xbfj\xfc\xceg\xfe" "K\xe8j\xeb\xa8\xb7\xb7\xca\x87\x84\xa9\xef\x96\xa9\x9f\xb0\xab\xea;\x1e\xdd:\x93/\xb1\xb7H\x19\x9e\x9e\x06\x45T\x07\xbe\xf7l\xf7+\xfd" "\x97i\xfas\xef\?\x33N\xdf\x82.>\xf8\xb1\x66\xb3n\r$\xa9\xcb\"\xf2\xdc:\x11\x94\xbf\xcb\x93}'OUZ\x92\xd5\x17\xf2\xf1" "$\xbc\xcc\xfa\xa7\xd1\xe1\x98\x64\x9b\x65\x1eg_\xc9/\xdc\xe0J\n\x36\xb8\xa2\xc1\xa7+\xab\xc2\xaftv\xbe.\xa0.Qm\x91\x65\xac" "\xf6oY#~i\x63m\x33\xe5\xbep\x8a\xa9\x87\xa2\xac\xfe\xbb\tsU\xd4\x92\xcf\xa9\x8e\x33$\xa3\x90\x64\x8f#r\xf7\xe3\x8c\xb3\x95" "\xf0\x03\xd7\xd8\xfd\xaep\?;\xecS(\x94\?\xa7.p\xe1/\x98\xc2\xceJ\x62\xee\xfbk\xd2&\xa5\xc7\x99l\xd0x\x87\xc7\x12\x31u" "\xebR\xf4Kg\xb2\x92^\xc8L\x96lh\x94\xca\x14\xd9\x89\"\x44~\x06\xf2\x9d\x65\x8a\x8c*\x99\x62<\xd4\xbb\xceT\xd9:\x15\xa2+" "SY#\xd5'\xf8)\x36Z\x36\xd5\xbd\x85\xcf\x19*\xdd\x45SW\x8a\x9bz~\x0c.\?Sj\xdf\xfa\x81\n\x8e\xaeHL\x35\x00}" "\xd7HU\xbd\x86:\xfb\x1a\x37M\xbd:Y\xfa\xd1\xd4\xad\x38\xd4\x44\x37L\xa6\x1a^\xd4\x9c:Su\x8d\x07\xaf\xb2\xfc\x11\xea\xa4\x33\xa1" "\xfc\x91h\xc9JS\x90\n=\xb8\x42t\xc4\n\xd1\x12\xcb\xd4\xec\xd9k\xcc\x14\x32\xb5\xe0\xec\xc4\x99:\xc4\xf1Q\x98\xec\xb4\xc8p\x87\x62" "%o\xae\x16\xb5\x11\x08\xb5\x38\x83G\xa9\x63)*\xc9\xda\x93\x99\x03\xa6\x0e\xa8\xe0\xe0)<\xb8\xb7\x8b\xe3\x00j\x1a\x34O_\xe2\xd1\x43" "\xa2\xee\x16\xac\x45P\r\x9e\x42\xf4\x17Q\xfdX\xaa\x84\x62YO\xf3\xfc\n\x8b<\xa8\x38\xb8\x42sv\x8f\xd5gT\xf1\xb6\x80\xddtL" "\x61.=\x66\xb1\xf1\xc0>s\xc6\x9e\x0e\xaa\xcbov\x41Q\xbd_\xb2\xff\xd0\x15\x1c\xb8\xbd\xeb\x04}\xf3\xd7\xa9\x9f\xac\x1e\x13s\xd3p" "\xb2\xcf\x35Sg\xaf\x61\xc6\xfa\x35\x84\x95\x46\xea\xbe\xe1\x9b\x94\xf4P\x14S\xfds\xa1\x96\x0c\x15\xce\xfa\xf1l\xe6*\xe9u\x13u\x64\xb4" "\x87\x61\xef\xa0\xb0\xc7\x07\x08\x86\x65\xa3}\xae\xb3RI\xddm\x8a\x31\xe6O\xf9\xb2'\x1e\x0b\x9b\xdf\xcc\xc9\xa0\xa2\xa7#u~\xb0-\xec" "\x33%\?\xb6\xbf\xbc\xc3z\x36S\x8fwX\xf9\xa2\nSw\x32\xf5\xf0\xb0N\x9e\x8fIuK\x46\xc6\xf5\\\xd0\xe6\x33\xf9\x9b\x66\xbfM" "\xa6\x8e\x85\x94\x64\xd8\\\xc0G\x06U<\xcasn\x94({\x45l[\x80\xba\x19t\x8bO\x14w\x9b$\xd3\xf4ip\xf5\x06Z\x96\xd2" "\xfc\xe5\xb7\x95\x41y\xcc~\x04W\x1c\xaas\x85\x15\x46T\x61\x65\x07\xff\x1f\xaa\x18JM\xf5:Q~\x0f\x1e\xec\xe8\xce\xce\xdd!\x05\x36" "\x83\x42\xd1\x38!\x31\x64&\xac:o\x8d/$\x8ar\xe1Q\x9f\x44;\x07\xf4\x1f\xf4-U\xdd\xec\xb0M\n\xa5n\xf4\xaa\xc9\x37\xe5\xc7" "\xc2u\x33Q\x18^\xa5Y/\xc4\x8f\x0bz\xcc\xf5\x15\xf7\xf6\xc9\xd1\x89\x45\t\xaa\x9e/\xef\xb5\x03\xed\x8d\x64]\xd1{\?\xb5\xb3\xf6\xdf" "'I\xd4\xf1\x03\xc3JPx\x89\x8e\x8b\xba\xac\xed\?>\xe1\x12\xe2\xbf\x03\xd8\x9e\x35\x1ev\x83\xf2i\xb4\xf9L}\"\xe9\x44\xbd&_" "\x94|\xa5\xdd\xdf'\x92\x0c\xa5\xa5xt)\x19\x8a\x0e\xa7\xdfJ\\\xfd\xc0\xa6\x12\x7f\xa7|\xfd\x84\xb3\x9a\xd4>\xff\xeb\x13:\x01\xa6\x03" "\xe5\x7f\x7f\x30z\xbe\x94J\x17{\x1a\xfd\x98\xd4m\xc2\xf1\x89z\x81\xaav%MK\xcc\xfb\x9d\x9fI\x8a\x93\xd7\x07\xd7P\x7f\xe7>\x8e" "YO\xa7\x1a>\xb2NI\xa5\xce\xc1\xcb:t\x82!z\x1c\xd3\r\xe8\x96\xbb\x44\xc1g\xf5\xbfo$\xf5>\x35\x35V>\xd9L\xb2\x03" "\xbb`\xd9IT\xea\x83{\xa9\x8f\xd4\xd4ML\xe3(\x1e\xeb\xf0\x07\x0b\x62~\xb8n\xfe.\x92\xc0\xd7\xd1\xeb\xf6&Q\xff\x04\xb2\x15\x03" "\x30Ko\xc1:\xb9\xfe\xbf\xce\x1a\xfc\xd8\x98\x43\nT\xddz\x12\xa7\x8f\xcb\xfb\x83k)\x8f\xb1\x94\xd9\x0e\x94JQ\xa1\xf7w\xc7u\xa3" "\x05L\xc7\xbe\xc9<\xac\x19\xa8+j\xe5\xab\x45\"\x0c\x1a\nu\xb2-\xa9N'\x9a\x16\xd4\xcc\xac\x95\xbe\xc3=U|\xf2h\xa5\x7f\x13" "s\xf2\xb5\x87 \x37uJy\xe3\xc1\"\x8a\x95.\x98\xbel_\x15&\xd5\x80:\x1f\xd6\x92!\x15[\x8f\xaa\xec\x9b\x15\xfeTx\xc8\x17" "\xc8n\x07!\x33\xc2\x66h\x81\xe5\x81 \xe4\xfe\xc8\x12\x9d\xb0\xec\xd3\x8ey\xc7$\x94{\xb9\x36\x35\x9f\x87\xe5#\xaa\x0f;\xfa\xf1\xe0\xf4" "$'\xa6\x95\x97\x30\xaf\xaeS\x1f\xb0J,\xe6\x98!\xce\xae\x1c\x61\xfb\xce\xc9\xa9j\xb6\x10]\xd9\xb7S\xdfk\xe1\xc5\x02\xdb\xb3\xa9\x9a" "\xae\x9c\xdc\x07:Q\xac`\xa8\x19\x0co\xe1*\x9bJ\xbe\xccISPX\x36k&\xeb\x38\x30m\xe5\xae*\xcb\x85\xb1\x35\x12\x99\x0c\xfa" "@\xb1\x1fH\xcd\x8e\xd3\xca\x44\x98\xbd|\x62\xaao\x8b\x44y\xd0\xa8\x8b\xf5\xf7\xab\xc4\x1c\xef\xdc\x64\xcbV\xcd/\xa7N'\xb8\x18\xb8\x82" "o\x08\x35\xd7v\xdf\x9b\x13\xa7\xbb\x1a\x87\x62&\x83u\x39\x42l\x8c\xa1\x44\xa7\xaa\xb0\x36r\x62I\xa4\x9a\xc7}\xe7\xef:\x63u\xad&" "v\x85M\x12\x1e\\+*\x1f\xf8\"\xe3\x11\xefRR=\xd4\xb9\xa9\xaa\xd3_~<\xb3\xdf\xfb\x62I\x14o\x66\x1e\x82\x62z\xbc\x90\x8a" "\x92\xd3\xdf\xbb\xa4\x65\xdd|w\xb0H\xdd\x05\xb6\?%\xbd\x98Q\x93\x15=\x98\xbd\xe7\x10\x95~\xaa\x9f\xdb\xc4\xdc\xfex\xf6\xa3j\xf7\xbe" "\xc7<\x10\xa8T\xf6&J\xa2\xe6\xef\xae\xab\x8b-\x0f\xaeS\xce`\xec\xc3\xd9sx\xd0\x0f\x0f\xdf\xc2\x8b\x8d\x87\xb4:\xa1\xf9s\xc1\xc3" "\x03\xf2]\xf5\x94\xf8\xef\xd7-\xdf\xd8\x37\x33N\xce\xea\x13\xd3\xd2\xe8\xfe\xf2\xd3iu{\x35\x93O\xd1\x88\xce\\r\x32Z\xe6\x92mv" "\xe1j\xe5\xb4P\xb9\xc4\xce\xa4\xca\x97o\xcb\xcc.\x39\x8a\x97\xb9\x64o*\xe8gG\xbd\x35\xc9\xa2\xeb\x32\x1e!)^\x62\x9b=%\x06" "\x00\x84\x18\x30\xccH\xc5\xfb*\xca\x8dR\x66\xb4\xecI\x93\x38u .\x94\xd3\xc7\x98z\x84\x7f\xdf\x83\x19tO\xd8\x61\xec\x07\xf6\xc5\xd2" "\xbfJ\xf7kj~\xee\x8b\xed\xf4\xe5\x98T\xaf\xb1H\xbe\x85\x45\xddT\xf1W=h\\\xbb\xda\xb7\x16\x96\r\x8b\xb2\x1fY\xfb\xa7\xea\x30" "\x00[\x1c\xea\xeeO\x85\x8a\x33\xe8\xbd\xed/\xa7V\xd3\xd3\x03\xd8\x8c\x9a&;\x93tX\xb1\x66\xbct\xfa\xfeQT\xe1\xe0\xc9\xa2\xf8\xb5" "\xd5\xab\xae\xff*S\x34;\xf6\x16\xaeQ\xfb\xf9\xfb\xb2\x94\x8c\xe8\x11\x84\x19\xe7\x1f\x12\x13N\x88\xe2\xe1\x03\x16\x92\xf0\x18g\xc3\x8b\xd9n" "\x87\xe3\xbbT\xd8\xa6\x0f\xa4\x42XJ;\xed\xee\x62\x81s\xcd\x81;!\x46\x0e\x41lj\xa4\xe6h!\xb9\xc3\xef\xb2\xae!_\x98\xcb\x85" "t\xe9g!\xfd\x96\xd9\xf9\r\xb2+=\xe3m\xa5\xeb\xb0\xc6\xbb\x0e\xcf\xdb\xc6G\xf2\xaaG\x0e\xd6\xa4nn\x35\x32s\x94\xba\xfd\xf0\xf3" "*\xe9\x42\x83\x92r/`-\xfb\xda_\x87\x65\xe3\xd7Q\xfe\x89#\x9cL%\xbdq\x1e\xb2\xa8\xcf\xad\xc4!\xf6\x65\x8b\x62\x19\xa1\xc4V\xb8\x62\xc2!\x80\x32" "o\xba\x96~\xb4\x44\xa5\xee'>\xee\x85\x97\xf7\xfb\xf6\x9b+\xf9\xe5\?\xc5\x88\xa8~\x00\xca\xc7\xfb\x36_\x9dU\x35\xae\xd9s(\x9c\x31" "\xc4%\xfa\x83\xfe\x08\xc2\xf0\xfe\xc4\xef\xe4\xdf\x17\xb8/\x8c\x7f\x97\xd7qn\xe9\xea_\x33}\xa6\xc5\nx\x32Q\xf6\xf9\xebX\x1f\xab\xdc" "\xe0\xf8[Xxv\xc6;\x9b\x64/\xea\xfc\x88\x64mU\x99|$\xe6\xfa\xfbww\xecJ\x12\x42\xfc\xf0N\x9b\x9d\x41\x30\x43i\xc4^" "%_\x89V\x37\xf0|j\xa7\xe5\x36\xc1\xe2\x33Q\xbb\x92\x45\xeb\xb7\xfd\xc3\x85\x33\xb9\x9bl.\xa8\xb7\xd8\x11$\xe6Q\xc3\xe9+\xdeU" "\xe9J\x64\xe5\x30\x43\xa2\x04\x01\x99!gs\x61\xe1\x90<\xff Q\x8d\x10\x62\x1a:(\xd7\xe4N\xefR\xd1\x62\xd7\x46\x36\x87\x05\x83\xa4" "$\x41\xffr\x84\x65\x00\x42\xf4\xc5\x65s\xfb\x1b\x8d\x14\xd9<\x0b\x61\x90]\x32\x30\xb5\xbf\x15y~\xb6h'\x14\xd9\xc0\xcb\x16\xe1\xc0\x8a" "\x0c\x9e\xf2,!\xa0\xc2\xe6\x8a\xfd\xd7\xa2toH\x65\xeb>\xd8\xd5\xc3\xdc\x10*\xbe:&Q\xc2\x83\x13*u\x66\xd8\xa3\x9b\x0c\xaa\xf8\xb5\xccN\xc3l\t;w(\x91;\x83\xf6\x82\xd4\x64\x63\x00\xe6\xfe \xb7\?\x98S\xed" "\xaa\xc1\xd9'LN\x95\x12>\xf3\xeb\xf6\x8eJ\x01z\x9f\xc0\xa4o\x8c\xca{Q\x45\xadx\x14K\xb6\x85pr\xab|\xd7\xe8\xa6\xee\x46" "\x33\xc6\x1b\xe3\x00\xceU\x13\x33\xea\xacu\xb9\x18\xc6\x17p\x0c\xbb\xa0\xc3\x9c\x93\xea\x10^\x89\xec\x1e\x64g\x0bLVU`\x32\xbf\xccV" "\xb0\xfb\x15xo\\\x91\xba\x05\x39\xf8\xed\xe4 \xbb\x98\xf5\x82S\x97\x04V\xce\xa2Z\x8b\x07\x1a\xfcq\xb8\xa1U^\xde\x05\xa8<\x88\x89" "\xa6\x85\xf0\xc6N\xc5(\xa0\x10\t\x46\xb9\xd8\?\x35h\x0e:\xac\x97\x89\x39\x99\xec\x0b\\*\xabj:&\x91\xe4\x84K\xbb\x16\xa6\\\x66" "+\xf0\x97\xa6<\x64\x98\x84\xc7GNv\x1e\x88\xd9y'\x31\xad[\xb9%o[\xfa\x43\x93{S\x1d\xb2\xcb\xdb\x08\x1f\xed\x82\x1f\xfc\x61" "\t\xf4\xf0\xa6\x18\x1f\xd5\xffU\xba\x13\xfd\xec>\x39\xf6\x30\xd0\xed\xae\xaa\x9b`\xf0\xf0\xef\xd9\xc9I\x93\x8c\x93\xf3\xd0\xd5L\x08\xa7\xeej" "~\xf2\x96\xd9\xf0R\xb6\xc9*_\x8cNqm\x8d\xcd|qr\xa2\xa3\x98\xe7|\x14\x8e\xe4\t/\xf9\x03\x9c\xe2\x03\xb2\x97VLL\xc9" "\x01\x83R\x37\xce\x1d&\xaa\xbdu\x33\xcc_\xc3I\x18\x95\xba\xce\x1a\x31\xcc\x39\xc5\x42\xd8\xb7[x\xda\x90\xaf\xad\xa4\xaa#j\xc2\xc8\x15" "}\xda\xa7S\xbb\xbb%\x9f\x35Zm\x9cz\x63hi\x88\xda\xf2\xfd\xc6y\xa6\x12\xf6\xeb\x0b\xab<;\xae\x65\xe2\x33\xde\x14\xd7\xc4\t\x1f" "\xf8\xc6\x38\xcf\x16\x8c\x9b\xab\x94\xc9\xe2O\xd4\xec\xc5\xc9!X\x35_\xc9/\xc6\x99\xf8g\xaa\x83\x82\x39\xa6\"\xce\xbd\xcdV\xe0\x04\x96\xf4" "\x37\x05\x9f\xac\xca\xc7;\xa7\x64\xec\xacQQY\x02R\xcf]\x96\xfc\xe8\xabk\x9f\xe7\xddp\xc4\xc0|\r\x93\x7f\x87\xf8$\x1c\xea\x10N" "\x99Z\xfc\x45\x63\x33\x98\x38[\xb3\x98]\xb3\xe8Q\x83\xaf\x12\xf0\x35\x9a\x8d\xe0\x39\x42\x15\x46U\x41\x0e\x16gk\\,\x04\x62\x13R\x35" "\xf9[J\xbb\\\xdd\xf2\x15\xed\xf5\x90\xb0\x86\x43\x39U\x87wI\x91\x9d\x45\xfe=\xac\xc7Y\xc4\xb4\xba]\xbf\xce\xc6\xbe\xf0\xd2\x8e\xff}" "\x41\xcc\xd4\xc5\xec\x8e\x95\xdaY\x86\xe9iP\x92X\x83u\x9bU\x1d\x1e\x98\xbe\xc0\xeb\x13U\xd2\xa9\x03\x15\x1f\x1fj\xe5\xbd\xe5\x07\xf8\xa3" "\x31\xdf\xda\xd1\xef\xe6\x9e\xeb\xef\xb2G\xc1\x04W\xb0\xe5\x94\xd9\xa3\xfd\x01\x02\xfc\x38.\xe2\x85\x9fYns\xa1\xbb/-\x11z\x17pS" "\x45\xb2\x9f\x17\x66\xc4\x08v\x11\x62\xd4@X\x41!{\xc1V\x63\xf6\xd2\x8a\xe2\xcb\xb0\xde#\x0f\x11\xba\x97\xc9\x38\xbc\x98X\xa0\x90\xbd\x8c" "\x31\xff\x0b\xd4\xba(\xd6m\xba\x82\xc3tQl\xb0\xc3\x19\x35Y\xe8\x90>\xec*&\x7fQi\xe9_\xcc\x1e\x89Y\xcf\xd9k\?n\x81" "\x7fm\xf9\x82\x12\xce\x34\xd4\xb9u\xf6\x9e\xcc\x1f;-\xab\xb8\x8e\x0b\xaf\x46$\x9dk\xces\xc9\xb6\xb9\x96/\xdb\x8e.\x91\x84\xda\x9cY" ".\x44\xaf\x35\x18\xb5gv\xe1\x1b{\x82\x9b\xa0z\xc7\xa6\x8f\x98\xc7sl\xa6&&'\xed\x64o\x38\xbdL\xc8\xf8t\x63\xf9\xe1\r\xe7" "*\x08\x31&\"\xbc\xaa\x93\xdd\x0f+\xee`\xa2\xb5$\xe6\x94\x87\xd4'\xf7h\xce\xee\rU;v\xc2\x89\x99+:\xc3\xfe\x35\xd6\xed\x9b" "\xfa\xce\xb2\xad\x01\x15\x15\x9e\xad\xd2\x00\xd5\x9eG\x85\xe4\xfbq\xae\x9b|\x8f\xf5\xa2\x1bl\xc5L\xa6\xaf\xc3\x8c\xec&n\xf3\x36\xec\x95\xde" "p\xdc>{\xff\xbbj\x92\xeb\x1e\xe7\xf2\xc9M\x33\xac\xee\xad\xd8V\xdao\xdc\x07\x8f\x19\xb2\xdf\n\xb0\xe6!ksn\xb2\xf7\xd8\x36Y" "\xc9\xe7\xbd\x0f\x1fZ\xfb\xcb\x15\xcd\xa4<\xba\x0f\xbf\?\xc9\x65.\xba\xe8\xd2\xdc\x1d\xb0\x9d\x97\xbd\xb7p\xbf\xd7\xe5{v\x33Q\xabL\x32" "\xc8\xef\x39\xfbG\x88i+\xc2\xe9\xca\x32\x9a{v\xff\nW\xa7\xf0\t\x04\xf3\x8c\xa3;j\xdeZ\x44\xbc\x97X\x64\xeck`\xadx\x45" "\x38\x81 \xfd>\xd4\xe4+\x37\xd3*Y\xaa,\xbe\xdd[\xa1{oq\xe9>\xbe\?\xb7\xaa\x36wOU_\xecv*\x9b\xd7\xc2\xcb\x15" "g$\x89\xc9\xec\xafk\x15\x46\xa5NQ/\xd6\x13\xe5\x43\x01P\xba\xfd^\xf9=}l\xa9+\x65-\x33\xedZ\xcdL\xb8q&]K" "T\xaci\xa9\x19v*\xfb\xab\xe3\x7f\?\x8eVG\xe1\x17\x1e\xbd\xcbq\x36\xe5+)\x99q\xbe\x62\xe6'Y\x7f#\xd1\x37(l\xb7S" "\xf7\x62\xf1\xa2\xcbQY!\xe6\xbc\x83\xbf\x9b\x43\x8e\x80g\xbb!Z\xbb\xc2z\x89<\xac;\xb1qH\x95\n\x1d\xbd\x42,:\x04\xf7\xa5" "\x93p\xd4\xe4\x94:\x39\xc0,\xb2\x0bg\xb0\xa4\x64\xc7\xd8\xaaV\xd5\xc7\x96\xc4\xf2&\xa1\x1d\x8f.n\xc8\xabG\x92\x15\x0b%=%\xff" "\xab\xb0\x37\xa7\x1dX=\xb2\x33\x17J\x1e\x89\x63\x85P\x61\xf5\x9c\xa3\x8dT\xf5\x92\xdf=\x36\xa5\x16Z\xe1#\x9c\x90v\x36\xfb\xa0\x84X" "\xf8\"l\x17\x93\x8f\x18M\x1e\xach|\x08\xaa\x38\xe5\xc1\x32s\xeb|\x16\x62\xf1v\xb6\x17\xa0\xd9\x9e\xed\x85\xd3\x36\xf9\x85X\xdc\xb3\xac" "W\x19n\x9e\xb8\x82/\xdb\xb3<\xa2\x07\xa7\xc6\x92(,\x32\xf6\xe9\x0e\"\xdb\x97\x0c\xc1\xea\xfe}\x8b\x16}k\x94\xf5\xe9\x97@\xd8\xb1" "\xe3\x18\xbd\x17>\xbc\xca\x1fM\xac\x0b\x13\x32\xf7SZ\x91\xd9\xb7\x9a\xb9R\x97\xf0\x63\xd5" "\xe7\xc4,P\xbb\x8f\xbf\xd4\xb3\x80\xfa\xfa\xc4\x44Q\x39\xfc\x99#\xd9\x00\xeaG\x85\x1e\xc9\xe8\xda\xf7\xf3\x84\x96\x89\xa8i\x61\xd1\x8f.\x9f" "\x9c\x96\x0f\xf6\xe1\xab\x84\x0c*\xcfn\xfa]\xa8\xc9\xea\x33\xcci\xd7Ml\x00K\x93s\xc1\xc4\xec\x9e\x93\x18\xff\xc9\xd2\xef\xbe\xe6\x42\x8c" "\x11}+\xad\x84}\xe3'\x99\xbbpz\xd0\xc5\x85\x15\xd9\xe7M\xee\x33\x99\xfd\xfc\x91\xa3\xe4\xa2^\?\xe2\xab\x8f\xf8\xf1OmV\x89\xfa" "\xc4\xdb}\xb5\xc4\xf5j/\xe1\x35\x18n\xc8q>\x18\xad\xad\xc1\xf3j\x85\xf8k\xb0\xf8\xe6,\x9a\xeck\xc8\xd6\xc1kX+\xa8\xe3\x11" "I\xf2\xf9\t\x0f\xd4O\xc8\x93\xd7p\x94\xb5\x36\xb9\xaax\xfe\xc5\xb1\x1b\xa9 \x32\xc6\xber\xd0R\xc8l\xe2\x35\xce\xd5\xa5\x84\xe3\xfa\t" "U\t-\xea\xbf\xc2-\x1c\xc8\xdb\x8egwNv\xf8\xc1\xdc\x97\x1a\xec+\xce\xbe\xfaQ+\xf1^\xed\x42\x43+\xcb\x46\x9c\xc8\xa3\x44\x14" "\x1e\x05\xe5\x12y\x9f\x95\xff\x9c\xed+\xaa\xdb\xe4 \x82\x9b\xd6\x16\x1fq\xec\x1c\xe4\x10\x33\xcd\xc5\xf7\xef\xb6\x96:`\x95\xf0\x91o\xb2\x96" "\x98V\xb4\xab\x8awo)\x93N\xf4\x93\x81\xc6\xe4\xf0\xf3)\x15\xeb\x8a#\xed\xee\xbf[\x46\xd9\xb9\xd5\xce\xf5\x00gP\xc9\xcd_\r\xa3" "\xd9\x83U\x12\xf5Q\xf8XT\x9f\xb9_,\x9f\xcfr\x97\x46\xe5\x37\x12\xda\xe4w^\xf9\xcb\xc0'\xff\x14-\x93\xbf\xfc\x7f\x62\x01\xf9i" "O\xf0i\xe9\x44i\x99\xfdg\x80\xb9\x99\xa0\xfd.L\xfft\xb1\xe6\x02\x9e,]\x18*+\r\x12\xab\xc1\x85L]\x9f\x9c\xed\xad|&" "_\x97N\x38~\x17\xd3\x12\xcbg\xcc\x1e\x82\xcf}\xfb\x88\xc4\xaa\x1d\x90\x03\x03\xd9\x19\\\x13\xc7\xd9\xa5\xeer\xb2\xd3\xd9\xfbR\xcb\xb0\xba" "\xfe\xf2\xef\x01\x97\xf0\xea\xa8Lj\x88\xcb`|In\xdf\x38\x91\x35\x8b-\xe4Y\x39XJ\xfdQ\xaaw\x66\xce\x12\x93y\xc1\x32\x9c\xad" "\xac\xd2\xba\xb4\x8a\x85\x32(\xd4\xf6\xed\x1f\xdd\x97u|\x64u\x08\x1c>\xaa\xab\x87\xca\xbf\x03\xfbN%\xfc*&\x07\xec\x17\xb5\x86\x94}" "\xb4\x8e$U\x9cI\xae\xe6\x0by\x65_Hj@\x66\xfa\x15,\x19\x08\xcf\xfc\x86\xe3\xc2\x89\x33\x99\xc3)\x8a\x35\xc7\xe5\xfe\xe0\xda\xea\xc9" "KKR\xcb\xfd\xcd\x95\x87\x19\x9cG\xc5\xd9M\xd0\x38\xe7\xac\x1d\x31\x99n\x36\xda}\xcc*\xf1\x66\x7f\xb6%\x9b\x88q[\xcb\x83\x94\x9c" " \xee\xa6\xb6\r\xd8l\xf6\x03\xac@\x9a\xda\xbf\x9f%\x1f\xb3\xdd\xbf\xfd\xab\xd9o\x83\x36\xaf\xaa\xc3\x93\xc7H\x43[\x0b\xf8\xad=\xbd\x32" "\xe5\x95_\x0f\xb4\xb3\xce\xe4\xdc$\xe8\xd4\xe4\xfc\xce\xec\xd6\xc2m\xcb\xf9\xe9\xd9\x9dT\x9c\x41\xebu\xf2J\xfe\xce\xda[;\xabt\xee\xac" "M\xaa\x94\x9c\x66\x7f\xd5\x83\xa7|;\xc0j\xa5\x9aZ\xc9\xac\xaf\xacGt\x17\xe7\x0eH\xe6\x65;IzpV+\xc7Y\x02\x0b\xf1{" "\xb9\x03\xbe\x1b!\xaa\xb3\xb9\x83\xe8~\x06\xf2\x12\x42u\x03\xaa\xc4\xa5r\x19\xae\"\x03\xb1\x05\x9d\x98\x61=\x03j\xe6\x39\xcesZ\xa4(" "\xdd\x38L*\xbc\xbf\xf3\x1a{\xd4r\xb6\x08\x34\x97\x63\x0b\x41\x08\xbf\x06\x42\x34\x0f\x84\xa8\xbc\xe7r\x61\xe5\x95.;\xc4\xf4\x94&&\xda" "\x00 \xdf\xaa\x98\xde\x1c\x90Zv\x66\xcd\xb8\xec\xd5p\xe1\xc5\x9al\x15\x8cm\x12q\\\xb8:g\x15;\x97\x63\t\n\xfa\xb7\xe3\xfc%" "\x89\x08&,\x9fr~\xa4\x98\x8d\x11\x89\x9e\x01\xb6\x42\xa4\x66\x8f\xd8-\xc4\n\x1c!\xaa\xed\xb9\xf4R" "\x01\x42\xe5\xb7\xb7\x1fh\xc9\x95\xab\x33wT\x36\xb8zO\xcc\x45%\xd8]\xb2\x64W\xf5\x44\xc2\x85\x0e\x18=\xadXm\x17\xb5}&w" "]g\xb0\xceq\xa4\x9ajw\xe9*\x38X\x92\x85\x8a\x93SJ`\xb2\x12\xa3\xe6\x8c,\xd9\xd9\xe8\xa5\x07\xe9G\t\x66\x88\xb6\x02\xcc\x98" "\x01]\x0f\x8e\xdaN\x8bV\xb6\x10\x15\x8c\x87\x43\xf8\x35\x84:!\x99N\xea\xec\xc6\x00\xf7\xa5z\x62>\xdaw\xef\x0eu\xad\x08\xe3\x98\xaa" "\xe0\xe0\x0e\xde\xd8U\xa9#R\x65\xcf\xee\x99\xa9\xa0\xce\x39&\xc2\xd1\x82\xeb\?\xc4\x9cL\x9c\xbf\xf3\x19\xab\x1eP:\x8c\x85\xbeQQs" "\x06\xb5\x84 \xb9\x99\x38-\xc5\xd7Y_\x03\xe3G\x44\xff\xba\xbc\xa8T \xc3=\xa9\xf2x\xe0w\x13^t\x9c\\T\x97S\?\xc7\x1e" "\xde\x61k\x18\xb6\x46~}.\x38\x13\xc2o\x0f\xe8\x0f)\xe6\xfenJ\xa7=\xa2\xae[\xd2\x08\xe5x\xa4\xa8\x1b\xfbz\x8f\x01\x1f>\xd9" "O>o\xc2j;\xfa|\xa3\x1a\xdb\xbdi\xa3*\tR\xdd\xfd\x12\xd5x\x98\xfb\xcb/\x98\\\xf3\x93\xb3\xee\xd6\x9cz\xc0\x88\xab\xa7\x1c" "\x45\x12\xc5\xdc\xbanI\xb1\xce\x8e<\xe1\xcd\x81\x93\x13\xba\xc4|\xe2\xb5\xa3\xc1\x96\x1c\x9d\x19\x87\x46\xfb\xea\xec=.\x8c\xd9>\x16\xb5\xe4" "\xab\xc0v\xde$\xab\xa4\x62\xd6\xfa\xa9;\xa1\x87\x03\xe1\x03\x7f.~\xe3\xe5\x39\xb3G\x38\xfe g|\x1e+\x1a\xeb\xf1\xd2\x8e\x63)\x80" "\x92\xe1\xba\?\xe0\xf3JZ\xd6\xc5\xcc\xaf\x8c\x9aV\\\xd4\xf7\x97MV\x96\xd5\x64\x14\xe2\xc0\xb2\xf0\xe6\xcax\xef\xf4\xb8\xc7\x8e}\xa1\x45" "\xe9}\x7f@\xfa\xd5\xed\xc9\xd8\x17/\\\x9d`\x13\xe9\x38wh\xa5\xf0!\xeb[\xc2-^\xf4\xa1\xc5\x17%+\x16\x62\x62\xa1\xa6\x90\x05" "\xf6!{\xa8\x84X\xec\x9b\xe3\xc6jJ\xf8\xe8\xcb\x1dr\xea\xbf\x90\xf9\x13}l+\x19K\x0e#t\x03\xe4\xb8\x19+\xe9\?\x15\xb5\x1e" "\xc9\xf6%\xc9\x08v\xc8^\xba\xdc!;\xc5\x84\xf0\xb2\x94;\xb4\x00\xb8\xf8]\x1cr\x65}\xee\xc2\xf2\xcc\x8b\x64lO\xcc\x07\x9b\xe9O" "\x13]\x0b\x62J\x39\xc7w&\xe6\x8cU\xd0\x9c-\xb3\x93\xa6\x32\x9a\xf2\x42\xf8\x04\xca]\xb0\x15\x9d\xbb\xfe\x65\xe9\x7f\xcd\xce\x94\xdc\x35\xab" "\xfb\xc2\x63\r\x07\xb6\xb9\x45\x31\x07\xb2\x0en\x65\x93\x64\x32\xbd\xe6PN\xee\x9a\xbe_\x84|\xdek\xb6Xr\xd7\x1c\xdc\x02\xe5\xaa\x16P" "P\x0c\xa8k\x0b\x90k\x0e\x31\x81\\\xb0\x04\x13\xde\xcf\xd5\xdc *Y\x33\x38\xd7Qo\x01o\xf9\x94\x19\xcf\xfaj<\x65xlQs" "\xc2S\xcf\x13\x15\x9a\xba\xc2U\xcb\xb8r\x86\xf9J\xc0\n\x9e*\x9dl\xc0zK\x87\xde\x01s\x1d\xcb\xeb;\xec\x08\x04\x83\xce\x0b\x1b\xea" "P\xe1m\x87=\x36P\x96\xbd\x8b\x39'\x99\x81w\xac\x12\xd3\x61g\x98\x90\x99X\x87\xf3\x1e\x84\xba\x7f\x94rX\x0b\x0eW\x9cq\x90\xeb" "\xd0\xa7M\xae\xe3W\x8dG\x15\xe3*h\xc0\xa5\x1dK\xc0\x8e%\x61\x65P\xf8R\xcf}\xf3\x39;\xc9pLg\x1d\x7f\xd5L\xf5\x9d\xbf" "\x8b\\r\xb2U|:\x96\xe6\x95:/u\xfe\x16\x8f\xe6\xf1I\xfbw\x39\xb4\xc3x\xeb\x1d\xce\x1bS\xde\xff\xce\xd5\xcb\x46\xf8\x35\x0c\x30" "\xb4\x9b\xbb\xa5\x87Q!|s\n/\x9f\x83\xf3o\x9a\x8cT\xb7\xc1\xd3\x82\x84\x93\x45\xe1\xc0\x08Gw\xb9[\xfa\x94\x11~!\x9d\xddr" "h,wk\x91JxM\x32\xee\xdc\xc6X,%\x44sU\xc8\x44v\x0fw\xc8\xa4\x04!\xf6\x32\x88s]+'\x84\x13\x92\xe9\xad\xfb" "\xbbi\x1b;\xfb\x9b[\xabZ\x8a\x42\xa4\xecJ\xd9J\x62\xe0\x08\xd4\x0e\x8f\xad)\xf4\xae\t\x8f\xe6\xbe\x17\x92*\x34\xbf@\xdd\x32\x0f\xfd" "\xad\x89\x42\x17\xb8\xaa\xba\xf1\xd1\xb8p\xca\r\x86\x8dg\xaa\xab\x0e\xd9\xde\x62W\x0c\x35\x19\xa5\x94\xfa\x7fn\x17\x87wN\xe1\x33\x37\xc6\xe0" "\xee\xa7N\xf5T\xf6\x30s\x15I\xdbZw\x94\x38\x08\xab\xd5\xb0z\xc6\xc3\xf0\x14#\x84g\t\xa1.\x1dZ\xbai\x85\xaa\x99\xec\xd3\xce" "u\xe9\x46\x04\xd4[\xceMS\xca*|\xdd\xe4h\xe1\xd9\x32\xeenX\x19\x39u\x89\xf3\xb2\xe3*\xfc\xe9\xd2\xac\x1a\x8f\x0b\xce\xb8=\x8c" "X\x63\x17\xc5\x00\xc4\xce\x12Jx\xbaS\xbe\x90\xb7\x37\xfe\xe4\xd8\xe9\x97\xe4\x82\x30\x9ap\xb5\x07\x93]\xc0\x62\xf6N\x9d\xc9w\xc5\x9c\xdc" "\xba\xc9.S\x33\x93s\xe3\x8b|\x8c\x89\x19\xa2\xbe\xb3N\x8b\x8d\xddp\xfe\x1a^\x8c\xc3&\x92\x63\x37*\x9d\x07O\x43\x9a\xb5\x35y<" "sZ.\xdf\xa5\xbf\x30\xd0\xf2\xf5nt\xf1\x45~\\\x19\x19\xa2R;\xc0\xd6\x01\x34\xe3\x8b\x12\xcd\xf5\x85\x86\xfe\xc1\xbd)\x32>\x38\xe0" "X\xa9\x98\xd5'\xbaNR\xf3\xdd\xc8\x08\x03\xb7\xde\xca\xc6\x86<\xbe\t\x1a\x9d\x94iu\xfen\xdc\xe1\xc3\xc6\x37\x8c\x34\xec\x33\x01u\x43" "\x98\xd1\xc0U\x38\xa9$jTw\xca\x39\x41\xb6\x91R\x1e#\xa8\xe8\xfd\xcb\x95\xb5 TilI\xce\xbc\x31\xfa\xb9\x33\xfd\xe6\xf0\x33\xa5" "\xfe\xbe\x39\x93o\xa6\x94\x36z]\x61\x16\x43\xae\xbb\?\xe0\x13\xed\xf3Y:\xc4\x15\xb3TO\xbd\xd7\xfd\x19\xe3\xcf\xbe\xf9\x14~\x33\xbf\xa0" "[\x12\x61w\x45>\x9cy\xe4\xb1jMw\xff\xce\x87\xe7\x14\x02\x30\x9a p\xfb\x01\xa6\xd0\xe4\x9e\xad\x98~\x0b\xca\xc8\xf3\xdf\xf6W\xda" "\xed\x9f{\xb7\x92\xef\x83\x9d\xe4\xb9\x01g\xfb\x81\x9c\xd3\x01\xd3\"\xc9\x88\x8b:\x41\xed\xc3\xc2|\xac\xdc\xc8\xae\x31\xb6\xdb\x1a\x63\xbf%\xd2" "^\xe5\xd8z%\xc6\xe1\xcf\x81\xc4qk\x13\x8e\xf5\xca\x89y\xe4\xb4\xa6\xfb\xd8\xba\x14\x94\xc9\xa1tW\xc2\x34\xce>\x38\xd9\xf1-&\xfa" "\xaf\xc1\x38{\x99\x32\xed\xdeLIy(\x95\x31\xec\xe4m\xc7\n\xe7\xc9\x19\xa5\xac\x33\x1a\x36,\xc5\xa8\xd2\xabP\xcd\xacr\xf3\xcd\xb1\x1c" "\xe5\r\xc9\xca\xcf\xb7\x35(\xbf\x93\xf3\x30s\xcb\xea&\xaa\xc2\xe5\xb7\x05\xc9\xb7u\xdc|\xcb\t~z\xd0h\x19\xc7\xc6\x1fgP\x7f\xa4" "yx\xe7L\xe6\x61@%\xf3\x30\xa8\xd0\x8f'&\xe6\x11\x83\xc9\xef\x1d\x97\xad\xf1\xf2m\x05\xe7\x37\x36J\x07\xed\xe2\x37v\x1f\xb7\xef$" "\x0b\x95o\x0b\xaao\xf6\xd6\x83\xe1\x62Ks\x9e\x33\xf2Y\xe9\x7f\x36\xf7\xcd\x11\n!\x33\xc8o\xcer\x11\xdeM\xe2q.:\xb9s\xb5" "_\x9f%j\xfc\x82\xed\xad\x61\xce\x9c\x1c\xee\x11sjW\xfc:\xdc\x9f\x99g=Qk\xa4\xb4oN.\x00\x7f\x37\x36\x1e\xa2\xaa\xec\xc4" "\xbe\x8dj\xb2\xf0Wz\xf0'\xf3\x39\xc4\xc4\x90\x9e\xb0}J\xb2\xea\xf4m\xbd\x19\xdf\x96\x61\x7f[n-\xbctz\x38'\?\xb4\xe2\xd5" "\xad\x66\xfaM\?\x8b\x42{\x45t\x65\xa0\xe4\xa3\xc6[\xbe\x94\xfd\r\xf5\xfe\xb6\x46\xae\x8e\xfc\xd2\xfb\x15\xde\xc3\xdc\x8a<\x65\x30\xb4\xbeQ" "(\xf4S\x8d\x13%\x05\xb2+\xf6^\xcc\x39\x11\x46\x88\x11\x02!\xfb\x1a\xe7\x01\x9c>\n\xb1\xeeQ\xc8\xa6\xf0\xdc\xfa \xe7\x92z\xb4!" "\x9e\?\n\xeb\x95\xf0\xe4\xd5\x8e=[\x13m\xce\xd1.!\x9fY\x19\x94K\xc1\xfa\x80\xdd\xb2\xb9\x39WX\x83\xc1\xcdS\xdc\xe8&\xaa\xf7" "\xcc\x65\x10\x89\xc2\xfaLQ\xad{\xed\x82`\x31\x0e\xf5\xefg\x7f\xcf\xad\xbbi\x66\x17\xc1\xc3\x0bU\xa7\xf2;\xbf\xa4gZ\xa8\xf4U$" "@\xca\xc7\xd6\x03\xe6\xea}\x91V\xc3\x96+\x9d\x17\x0e\xaf\xa1\xa2z\x0c\x1di\xe4\x93\x1fv\xffl\xc8\xcd\xad\x0fsn\xd1n\xce\xb9\x13" "\xc2\r\xef\xd0\x32\xdb\xb9\x07W\x9c\x63\xa8r~\x9c\x10N\xab\x94\x0b\xe3\xd2\xf9W\xdd\x9d\xc7\xc5\xb6\xb1\xe3\xb4|r\x1e\xc3\x0b\xa0\x90\x45" "\xee\xdcj\xac\xf3\xb8\x8f\x94\x35\xdf\x1f\xf0\xb5[\xebzn\xbd\?sz\xc3\x10\x62\xd9\xb8\x90%\xef\x9c+G\x84}\x46\x1f\xcb\xf1\xe7\xd6" "n^\xfa^kqNw\x8f\x88s\x37\x9c\xa6\x66j\xedJ>pZZ\xdbX/\x9c\x12\xffk\xa6\x1aN\x0e;\xa8\xb9$\x97\x45\x8e" "\xc3\xabig\x63o\x65\x33\xed\xacU\x9f\\\xdfs\xfe\x19\xcc=\x9c\xc2\xa9\x39wj\x9blR\xa6\xda\xe0-m\x82\xcc\xce:\xec\x36\x41" "\x61\x45_\"\x62\x16\x1b\xc6\xab\xe0\"o\xf1\x02\x13\xb4\x31\xc9\x11\x66\x38\xad\xd3\x64+O\x99\xac\xeeVu\x43\x0f\x87j\x9a\xff*\x31Y" "\x89\x17>\x19\xe7\x61\xf3\x9b\x66\xef\x8e\x1c.\x38q\r\xf7\x9a\xba\xff\xe0\xa7\x1f\xfc<\x07\xf5{*\x8c]\n\xd7\x13\xfc\xb7G\xd8\xd8\xed" "m\x33\x61n\x64]O\x9b\x30\xbf\xd3!\xb9\x11\x9f\xc9z\x8c\x36\xe1\xe1\xb1\xaeN\xb0g\x93,\x9bn\xca\xc4\xbc(\xe9\x7f\x96_\xc2\xba" "\x04\x01g\x97\x61\xb3l\xe7\xef\xb6\xcd\x95(P\x41\x63\xc2\x35\x83T\?}\xce\x39\xa7\xc2:ZW\\O\xea*\xba\x1b\x44\xeb\xe4{\x89" "O\x1a*\xdbj\xd2\x94\xcf\xa8\xc9m\xac\r\xab\xd4\xe5\x16\xf3\xb2\xab\xa0w\xcd\x45\xd3\xaax\xa7:\x02j\xa1\xff\xd7\\\xdf\xa8Oq\xf6" "}\x89YL\xcc\x17\xb9\xd1\x8bx\xf0\x91(y\xf2\xedk\xa2v\xefV\xf3T\x15\x97\xeb\xc9g\xa3\x96\x9c\x19\xb2\xba\xbc\xb1\xfa\xa3R\x02" "\xd8j\x85\x1bk\xbc(uQ\xfb\xf8\xc1U\x30,\x87\x99\xd3\x7fU\xd2\x1a\xccgy\xf3\x42x\xbf\x12.u\xe1\xa4\x14UL\xfeRs" ";\x1c\x45\x98o%&\n(\x90\xddKy\xa9\xc7\xbc\x39\x39\xa9\x1b&G\xd0`\xc6\xd9\x9b\xc4\x44\xdc\x85\xc9Z\x97\x99s\x9a\xc5#\xd2" "\xeb\x1c\x62\xce^\x98\xb4\xb5j\x87\xb3\x8a\xf4#/\x44OH\xbeh\xb7_\x64G\xa7\x10\x45\xb5\xb0i\x1a\x65n\xbeH\x9f\x45\xf9\xa2\xed" "\x98ysmjJ\xe6\x8b\xe4\xf8\x87-\xee|\x91\xbd\x0b\xf9\"g\xdc\n\x91K\xe5+,\x1e\xf3\x36S^\xf9\xe9L\x62\x1e\x15\xfa\xc3" "`\xc6(\xe0\x61\xee\xdb\?\xcc\x43\x44U_\x9c\xc9\xb9\xd5\x17\xdd~\x1e\x8d\x7fQ\xe8\xf2\x13\xa2\x1c\xcdW\x38\x03+o\x33\xd9\x41\xae[" "\xa7i\?\x12^\x9c\x04\x9f\xaf\x34u\xcf)%\x1c\x94\x0b\xd1W\x01\xfa\xd9L\x00\x42\x64\xca\xc2{\xfev\xe4\x9fK\x1a\xf1\x99\xb4\xa2\xb0" "\xcc\x14\x64\x41\x91\xafpTY\x38\xaa\x92\x13~\x11\xbb\x17)Q\x13\x01%\xe9\x31\xee\x42\xf9\x16I\xa2\x38\x11\x34_\x95\xb2\x95\\!\xfa" "T\xa5\x06\xe7\xe4\x98\xa8\x98\x0f\x19\xa7\xbd\x91*\x0bP\x30\x99`\x9dR~q\x39\x10\xd6K\x12\xa6\xe1\xe7*\xbah%\x43\xb7\xff\xfd\t" "\xd2{\xeap\xe2\xcb\t\xc7,]\xa8\x99\xdc\xc1\x1b\x7f\x33\xea\xdfJ.\x42\x13\xcb\xa0\xc0\xd4M%\xcao\x8a\x85y^\x9a\x11\x35\x12}" "\xcd\xdeK.|\?s\x46\x99\xb1\xa4\x07\xffu=\xe0&\xca\xcd|\x43\xe3\xf5\x61\x9d\x03\x8b\xf9\x46\x94\xbdR\xef<\x8c:G\xec\?\x02" "\x39WKL\xacP\xc9\x1f\x05\x85\x61P\xe0!.\x14\xcc\x9b'\x46!\x06`\x84\x98\x61$\xf5\x33\x64\xed\x42T\xa0\x85|\xd7J\xd6\x65" "\xa5\xbd\x85)\\\x42>\xf1\x11\x87\xff\xf2Gl\x92\t\x31q\x41\x88\xc6\xb0p\x99\xe1\xb0`\xfe\x88\xae\x33\xf3\xc7t\xe5&\x44\xad\?\x7f" "\x1c>\xb4\xc8\xd7+\x90\x95\xec\xfc\xb1\xc5,s\xb7\x98\?\xd1\x9dT\x99[\x9c\xb0\xe8\x07\x83\xdbl\xea(+\?j\x0e\x9c\xc9\xd7\xa5Y" "up\x1a\xd6\x11\xcfN\xd8\x38\x13\x16\nq\xf7\x80\x66\xb1\x10\x9cwi\x96\x96\xc9Q\x14\xcf\xa0\x14\r\x96\xa6\xff\x14\x8b\x12\x1c\x08w\x07" "R\x37\xb5\x98t\x12\xd4\x96N\xb6\x80\xc4l\x9c\xfa}q\x82\xb2\xf2\x9b<\xe6M\x62\xc7L\xe5\xdfS\xd1\x43\x9e\xd0\xaf\x32\x38\x96\x88\xbd" "o\x96\xa9\x30\x91G\xf8i\xb7\x89r=\x7f\x82\xad\x44>#t\x07@i\x33\xdfU\xf9X\xe7\xb2'\xb9\xd9I\xd8\xb8\xe3\xdc\t\x31o" "\xf8\xab\x61\xb7O\x0eV\xbfK\x06\n\xb7\x66\x10\xfa\xbc\x1a\x31\x31>,\xc4\x34N!\x33\xa0\x13v\x96*\x7f\xc8\xef\x17\xa3\xdd\xdd\xf2\xc1" "\xc3\x97\x93$@\xce\x03\x86\xb2\xb8\x7f\x62q\xe1\x84}P\xa0\xbf\x39\x35-H\xa2\xb3\x87\xe4h\xf3\x8b\x0bX\xdc\x64+\x0e\xca\xef\xce\xe2" "\xec\x89\x95\x62\xc2w\x32I\xde'\xd1\xb3\x39\x9d\x13sPs\x06\xfd\r\xcdU\x31\xce\xf1\x45%\xd3I\xc4\xcc\xf1\x89\x34\xc3\xb0\xe7\xfcK" "\xe1'\x96\x9f\x9e$\x15o\x31\xbb\x07\xe1\xfd\x99\x9b\x92\x13\x07\x93\xa3\xfdu'u \xba\xd8\xfa\xcdr\xe4\x0c\x94\xfa\x10\xeb\xeaP\xa9p" "\x88g\xef\x1e\xac\xac\xac\x0bK| \xcb\x90\x94~\x36\xdd\x16\x08;%\xb6\xa9\xc4|\xb0\x43\xbc\xe9\x33\x8e*\x0b\x99\xcd\x9c\xe9\xf4q\xde" "\xcf\x99\x05\xcf\x99\x45\x81\x33N\xb1\x12\xf2\xd1\xcf\xa2\x8b\xa1q\xe2\xf4\xaf\x46\xf0 )\xc4\x42&\x9f\xf4$\xcc\xcdIyv\xe6\x19\xcd\x00" "\x9d\xa1\xf9\x0b\x36-\xf3\x36\xa0\x94\xbf\x90<\xc3\xde\x38L;\x8a\x8d\xee\xc0\xb2\xd3\xcfR\x93g\x99S'\x65\xcd\xd8\x08\?\xb7\x1c\x1d\x81" "\xd2\x06\x61\xa2\xde\x9d\xc9\xd7\x31\xc6\x97\xbf\xe6\x8e\x06\x42\x66\x10\xd7\x9c\x8b-l\xf0\xab:\x9a\xfesG\xf3\x96W\x61\x87x^\x97\x65\xb0" ";IL\xf8\xb7\xcc\xdb\n\r!\xba@@v\xb8\x88\xb9y \x31\xa8\xad\xbc\xd2]\x32\x99\xe3_\xd3\x33\x87\xb0R\xc3\xa6z\x30\x1fI" "\xcc\xe4\x06\x39\xf4\x0e\x93\xedM\x31\x31\xbf[\x88\xb9\xbc\x42\xcc\xe8\x16\xda\xcf&W\xbb\xb7\xab`\x94M\x38x\xd4\x10;\x38\xdf\xdf\xd6\xc2" "\xc1\x9b\x1d\xeb;\xe9\xd8\x93&\xebpj\xc6\x9bU\xd4.S\xb1\x66\xa9\xb4\x08q\x1dN\x11\x39m\xc1\xb5\x10M^\x61\x99\x97\xf7\xf3\x38" "\x8e\rJ\xf1.\x06\xd5\x15\x1f\x97+\xca\xf3\xd7V\xc6^\xff\x45\x97\xeb\xb8p\xeeL\x0e\x31\x66]s%\xaap\xc4\xdf\x8e\xbf\xb7N\x0f" "\x34\x35\xed\x35\xf9\x1b\x15\x46/|\xff\xf1\xfc\xc8\x89\xcd\xff\xde\xe8\x8e\xde\x0f\x84\x37\xdd\xd4\x01\xdd\xe7\xc3\xa2\x96(\x0fj\x31\xe9\xb7U\xcd" "\x1b\xe3\xeb\x7f\\m\xf1\x61\\\x93,\x1d\xaf\xe3\xdd\r\xf7\xe2S\x93\xa7Z\x41{\xcd)~\xc2\xf3G\xa7n\xd7xvl\x8a\x0fl\x39" "\xc3\x35G\x7f\x85s\x9b\x12\x91\x1f\x39\xb1z\x1eis\x62\x89\x66\xa2\x13\x61\xa4q\x8d\xe5q\xa2X\xd7P\xc6\xa5\xb5\x99\xcf\xce\xc4\t\r" "\x95o\x88%\x8aIi\xf2\x8b\xae\x99\xfc\x84S^\x94M\xe3\x35\x89\x81O\x61\xbd\x65\xe5\xed$h\xf0~\xe8KX\x88\x06\xa2\xf2\xd1\x89" "\xfe\x99{W\xd1\xf3\x81\x9b\xeak\xdd\xafxz!\x65>\x17\xf9\x8a\xba\x19\x91\x98\\'\x64\xd1\xab\x64\xe3\x14\xe6\xbet\x12\xdf\xd8\x8d\x0e" "nHx\x30\x16~\xda\x83\xccM\x63\x46\xa4p\xcd\x1f\xb7\n\xd6\x84=\x10\xc2\x43^\x87\x0b\xd7\x95\xbc{\xce\x92\xcdO\xfcW\x39\x9e$" "\xec\xda\xe7/]\x12}H \xbb\xf9`r\x61\xa8\x98\xe3\x07\xa7\xb5\xc7\xc4|v&_\x18\?\xeb\\TL\x0bM)\xf9\xef\xef\x9c\xc7" "\xe2\xdaO\xea\x80\xfc\xff\xaf\x93\xa4\x8a\xa1[\x63`\xa2\x91\x1e\x98\x39\xad\xde\xa9\x66\xf2\x44S{\x82\xa9=\xd9\xec\x94\xfc~%\x97v\xc3" "+\xbe\xd7p\xcd\x10\x8a\xb0O\xa6\x30\xcf\xcf\xa3\xa3\x01y\xce\xebX{P)\x81\xcb\xbe\x33Q\xed\x63\xe3'\xd9\x65\xbc\x8d\x1e\xf8\x82\x39" "\xfb\x05\x0c\x1a\x93\xfd\xd5k\xa2\xdc\xbb\x0fT\xe2\xb9\x07\xca\xa3\xa2\x9a\xb5'\xab\xea\xa8\xda\x1f\xdc\xb1G@\x94\xc5\xba\xe8\x65G\xbe.\x9d" "\xdc\x9fJ\xcc\xcfS\xa7\x07\x0eW\xcb\x08\x97\xf6\xad\xf5\xd8\xf9\xbb\xa8q\x8b\x15Q\x9b\x13\xe3\x1b\xb9\x65\xa4\xf3\xfb\x8a\xb3\x8c\x1c\x1c\xa9\x06" "\xd5\xa9\xd3\xea*Q\x8d\x07k\x87@\xad\x8b\xfe\x9e\xe2\x1c\x03\x97\xe3; \x07+`\x86\x8f\x15\x33\xf9\xa2=\xc5[\x8e\xaa\xf4\xb8\xc5\xc5" "\x30\xc2\xe3\x8d\xd3\x1a\xf4\x93\xd8\xa2\xb2\x90\xa3\xa6\x30\xd9O$&\x66m\x81:T\xdc\xdc\x06\xac\x66L,\x9b\x9e\xc4\xb3gg\x38\xc9\xd2" "\xcb\xa8\xaawg\\\x9a\x05\x18\xde\x13\x65\xb9T\xbc\xe1\xe3\xed\xe1\xa5\x08\xb4\x1a\xf0\x64\x7f\xcaWN\xb7\x39\xc2\xab\x9e\xd1\x8e\xdf\xcc\x9c\x1e" "H\xec\xee\x14\xde\x32M\xd3\t\x04\x98\xca`$\x80\x35\xd0\x37\xed\x44\x35\x1e\xec\x85\x98g\x10\xdd\xe0\xb8J\x62\x06\x45~nu\x96\x39W" "\xf4\x08\xf9\x0bs\xce\x45\x15\x32[\x9es\x1e\x8cpyK\xb2\xa2\x30\xb7\x94\x37\xb7n\x96\x39\x87\xf3|\xe7,\xd0/m\x65\xa6\xd2\xca\xfb" "\x39g\xcf\x80~#\x92l\xac\x42\x36\xe7\x16^\xc2\xe5\x83Sw\x85\xbe\x9e\xa5\x15k\xfb\xaaX\x06s\xa7\xad\xbcui\xe7\xad\x33\x1a\xf4" "\x9f\xb0\xc8\x33\x8f/x\xaf\\\x9f\x0b&\xa7\xb4k\xfe\xe4\xdcXI\x08O\xcey\xeb\x9aVn\xa2\xd5\xceJ\xa3\xb9n\x36o\x97\xb5\xc2" "m\xbe\x7f\xa8\x1a\x91qo\x39\xeb\x33\xbf\xb5Xi\xfb\x42\x80\xc1\xc1\x9fys\x94\x98\xbd\xe4\x44k\r\xa8)\xcf\x1f\x95\x90\x01\xd9\xf4\xf6" "\xbc\xd7\xdb\xb7\xea\x7f\x61Q\x0b\x8e\x16\xa6v~\x05.r\x04u\xb9M\xf5\x9c\x8a\xedh\x9b\xd3^(\x32\x9f\x13\xa2\xfd](r \xa8" "P\xdc\?h;\x41\x1d\x1f\xe1\xf3jPxw\x46\x9f}\x9a\x65\xfb\x08\xdbN\x14\xaa!\x06\xec\x84wgl\xa4\x8a\x89\xfa~\xa1\x1a\x61" "\x91\x8f\xf0\xa3I\x62\x18\xaaP\x65\xfe\xa9\xbc'\xd1!P\xa8\xd2\x65\x8c\x10\xcd\xd9\x42\x8d\xb5\x82\x42\x8d\x9d\x66\x85\x1a\xcb\xa5\x42\x8d=\x30" "\x42\x8c\xb8\x16jq\x89\xe7s\xb2L\xa1n\xb7Xg#\x42\x88R\x01L\x0e}\xcdI\xf4\xf2\x83\\X_\xa8s\x19\x19h\x37ZO" "X\xea\x90G\x46\x44'!\xb2\r\x90n+\nu\x0eW\x0b\xa5\xe8\x42+\xb3p\xcc\xcc\xaep\xcc\xbd<\x85\xf0\x8e!\xc4\n\x63\x30\xb8" "\?g\xa6&\n\xb1\x43\x38\x9e\x93h\x82\x17\x8e\x43lW&\xc4\xfe\x8f\xc2\xce\xc6\x19\x1e\xdcp\x12\x8a\xa8^\xc3\xc9\xfeS\x98\xeaKh" "\xb2JV\xda\xf9\xb1\xfd\xd9\x17\xd5\xf0\x82}\x38\x30\xe3\xa7\x62\xd4\xbe`\x8f\x0c\x0f\xf8\x85\x86\x17,\x9e\xc5\x44\xc4.\x1cG\xb9\xac\x33\x38" "\xba\xf4\x13\xd9\xbbZ\x38\xb6\xf7\xa5\x0c\xe0(\x18\xa6_\x99\xf9G\xc1\x46\xbd\n\xc7\x16\xd8\xc7l\xb4\x0b\xf9vm\xdf\x0c\x90\x05\x01L&" "\x31\x9a\x87\x15\x37\x39\xef_\xccY\xdf\x99\xf8\xb1\x81J\xbe&\x66\xeb\x9e\x03\xd4\x83\x93^\xca\xd4\x66m\xf3\xf2w^\x89\x1e\xad!+" "\x9fx\x37{\x61\xc9M\x8e\x85\x0c\x89%{\x9e\x0b\xcb\xc4\x01\x86\x98\x97\xbc\x1e\x17\xbb\t\xbd\x1b\xb8\xb0\x94\xc6\xb1r\xc5\xaag\xc1\x1c\xc4" "\x16Vt\xdfX\xb0\xad\xbf\n\xb6\xbd\x63\x61\xc5\x8e\xb3\xc2\x8a{\x61\x15V\xac\x0c\n\xb1\x96\\\x88\xf9\x9a\x85\x35wp\x15\xc2\xe5v\x61" "\x13g\x07\xce\xa0\xb0q\x93\xbeZ\n[nT\t\xee_\xb7{\xf4\x83\x17\xb6\x1c\xc1\x14\x32\x87\xb0\x9eN!:%\n\xdb\x90\xd5\xa8m" "x\xbf\x96\x14\xab.\x10\x31\x43\xb3\xb0\x65\x63\x15\xd4\x9d\xe3\xd0\xc0-l\xe5\x8f\xc4\xac\x1f\x61[W}\x07\xa5\x1e\xd5\xf0\xd5\x38\n\x0f\x9f" "\xe1 \xe2\x1f\xe7\x16\xf2\xc9\xec\x8b\xf4\xeb\xc1y\x8a\xf0'Gny}n\xa9%|{&\xe1\xde\xb6\xb0\x63k\xa9\xb0\xb3\xecyG\xef" "\x0f`\x34l\xd0<>\xa4\xeb\x9f\x82m\x97*\x64j\xdd\x05\xeb\x91\xc5\xa7\x9d\xbd\xf1\x1dW\xc9\x08\xd1\xd1_\xd8%\xaet\xc4\x44\x17\xa3" "\x30)\x8ew\xfem\x66L\x45\x9du\xa4y=\x9c.\x88\xc2Y\xc5\x83\x38\x37qjK\x01\xf5\x46(\xa6\x18\x9a\xbe\xa2M\x14\xa6\x11\x16" "\xb3|\xa6\x62\x99\xee\x30\x8a\x65\xa6_!\x92\\\xb1\xbc\x7f\xbc\x63\xd9X\xb4i]\xc2\x66)\xac\r\xe2r\x9d\x8a\xbf\x7f\xc4\xd1\xfe\xe2\x11" "\xdd\xe8\x80q\xe9-\x82\x37\x41Q>gM\xcc\xcf\x89S\xbe\xcb|\x15\n\xce\xc9\x1f]\xed\x9bO\xae\xe2\xec\x99\x33\xc9\xe1\x44\x61=\x9a" "\x10\xa3\xfc\x42\xd4\xeb\xc0\xb0\xd5\xa2\x89\xa1\x89\xe2\tk\xd3\xc5K\xee\xdbW\xbc\x64\xf5\x11\xd4\x31:,\xbc\x94\x86!\x9a\x12\x42\xac\x1dW" "\x97\xac\x9a\xc1\x15;l\xf4\x16;\x61\r\x41\x62Y\x90\x10\x13\x03\x84\xbb\x02\xe7\x02\x14;\xac\xdd\x16o\x18\x63@\x36\xa5\xdd\x8c\x9a_t" "\xd5\x83\x03,I\xd4\xe4\x39I\x1dML\xf4\x04\x17o\x98)\x08\x91\x93\x0b[\xa7\x61\xfd\x9eY\xa9\xa8\xf6\x85\xd3\x62\xc7\r\x9d\xdd\x16o" "\xd8\xcb\x0c\xea\x8cRt\x97\x8b\x82\xdf\xb2\xa2y\x02*\xda\x64\x08\x30Z\xe2\xbd\xbc\x30\xd1\x16_\xd8j\x04\xd9\xd3T|\xa1\x37;\xe1\xf7" "\x13\x1b\x03j\xf2\x42\xcc\xe4\x41\xd6\x9fi\x8eg\xecn\x83Ro\xd5\x98\xe0\x07\xc5\xf9\x02\xc5iP\xbc\x62\xff\x91\x98U\xf3'#\xe6\x10" "\x81o[l\x15\xa7\xdc\xf1\xach[\r\t\x07M\x66\xf6\xc5%g\xc8\x14\x97l\xa4\x15\x97\x61\x0e\x11m\x19\x7f!\x62,\xb9\\\x43\xa9" "\x99L\xd1r\xc6\xe2\x8a\xf5\xc4\xd2\x81\xf6\x10\xaf\x8f\xb4\r\xf0\xf2\xca\x03\xe8$\x06\xff=\xaaSmr\x87,YJ\x07\xac\x9d\x95\x0e\x92" "\x89\x85\x62\xa2\xd3\xbet\x10\x9d=\x92\x17\xa4\x7f\xce`\x17\xa2\x08)\x65\x38\x64U\xb2T\xa8|%\xd7\xf8\x89,\xdd\r\x08\xd1\xab,\xc4" ";*\x65\xe9\x0f\x43Y\x05Y\x07/\xe5X\xa8\x97lzP\xa9\xc8&\x1fH\xaf\x96\x34\x91\xa0\xcd,\xd1\x84\xe3&!\x16\xca\x94\x8a\xdc" "\xf7\xa9T\x64\x98\x95\xaaL\xe5\xa5*\xeb\xd8\xa5\xaa\x85]\x9d\xaf\xbd\xf4\x88\xe5\x32R\x06\xd5M\xd5H\xcc\x1c(=\x06X\xb1\"|\xda" "\x92\xbc\xda#\x97\x16\x94\xac;N\x08\x1f=\xa5G\xf9#\xaf\xf4\r\x96\x9e\x39\xf9\x0cT_/\xc8HJoL\x64 \xe6\xe0\xd4L%" "\xc4Q\?\xa7\xe1\x0c\xb6\x05\xce\xd4\xa7\xda\x15\x38\x83\x04J\xa7\x33\xf1U\x88:\x33v\x8coNV\x9c\xd5\\:\x93\xadNT\xad\x9c\x41" "\xb9\xcd\xbd\xcc\xa0\xe8\xa7\x08\x66\x32\xeeK\x35]\x45\xab\xbb\x44\xad\x8e\xe8\xb1\\\xd4\xe2\xd2xo|\"\x97=u\xec\xeb\xe1\xb0\xec\xd1m" "\xbc\x9av\x0f+{l\xac\xf3W\xf6\x93\x9b\x85\xc9\x1d_]\xb1\xcb\x07*\xd8\xb6\x98\x30\x45\xc1\xcd\x14\xc8]\x89\xd4\xb4\x1b\xd9\xd8\xcdo" "\xce\x9c\x41\xa1\x11]\xbc'\xc3\xc7z\xac\xe3\xd4\xa0H\xbe\xd9\tz\xd7\xcc\x88\xa1\x12\xe7\xb9T\xa5\x37N\xea\x13\xb5m;\x99\t\xaai" "\x01\x8fm\x41\x94]'\xeb\xc4j\"\x45\xbd\x05\x19\xde|\x80\x15}\xc2\x02\x43((N\x9d\xfe>\xb8[\xaeP\xd3\xb8\xb9KV\xb5t" "\xea\xe6\xba\xc3oW\xba\x61\xc0\xcd\x9a\n+!\x95\x87\xc6\xb6\xf1\xdb\xe9\xd1I\xcc(;\xe7\xb4\x17Q~\xb4\xda\x0e\xdb\x33\xf6\x81\xa8\xba" "\x35\xbe\x38\x7fW\x97\xe1\xc7\x96\xbd\xf4<\xb0N\xce\x61\x88'\n%\xbe\x9b\xc9T\x0b\x1e\x38\xba\xf8\xf7*\x41s\xa8\xdd\xd8\xa9\x03\x9d\xb1" "\xce\x80\xb4W\xa6\x07\xc6y)\xff\xc2\x93<\xd7:\xe3\x18\x33v\x9a\x99\x87\xa0\xd7HT\xe5;|H~-\xacg\xc3z\xf7O\xfd\x99" "\x87\xcfI\xc8\x88::\xa6o\xae\x94J\xddQx:\x08\x9b\x7f\x1f\xa7>\xb8\xd3\r\t\xd2\x07\xd0\xafO\x33u\x17\x8f\x07\x96\x99\x99\xe2" "\xfc)\xaa\xfe:}\xe6\xa0\x1f\xde\xbe\xa5\x14'@R\x8d\x9b\xf1\xa4\xcb\x1d\rp@\x0b\xf0\xd1M\xa2\x9eV\\\xba@\xb5\xdc\xb9\x89x" "|\x92\xa8\xc7\x42\xb4\x19&j\xf3\xe4\xe6\xfe\xac\xc0\x0eP\xaa\xcb\xcfp\xf0\x10o\x8f\x35\xf0_j\x1c\xca\xd3O^\x9d\xe1\xac%-Y" "\xfa\xa5\xc5\x01z\xadV\xd3\xde\x12\x9c\x00\t\x1b'Nu\rq\\t%)/Z\xbd%*o\x31\xafq\xe1\xd4\xff\xbd\xb9\xa9wg" "\xb2\xac\x8f\xcaSN\xe3=\xde]r\x91\x38\x14]\xf9\xab\x39\r[}\xd6\xb7U\xcd\x93g\xf6@\x39:\t\xaa\xbb$\x19\x88\x1a-\xa2" "\xe7qt\?\xe3\xdcZ\x1cK\xe2\x9b.\xa1\xfd\xb2R\x19\xea:\x1f\x34G\x92\xff%[W\xe8\xe1\x0b\xa7n\x39\x7fz\x98R\\\t\x04" "\x15\x65\x06\x9c]\xf4\x97\xd1\xa8K\xfb\xf3\xb1\x9b\x9c\xbe\xa2\xa6\xbdsl\x30\x0fJ\xf6\xc8\x61QU\x0b'wU\xa4:\xce;\xbd\x8c\x08" "\x8e\xeb\xc1\xe8\x94\xa3\xb7\xaa\xec\x19\x8e\x17\xf2\?<\xb3\xaf\x9dT\x83~-\xa8\x95Lm\x9cz\xe9R\xd7U\x38/\xd0\xc5\x97(\x7f\xbc" "\x33{\x95M{\xc0\x0bK\xc0\x17\xf6J.-\xf7\xeb\x14\x35\x18\xac\xa0\xe3\xbe\x30\xa0\xce\xab(\xdb\xa6\xd1< \x15l+W\x44\xed\x0f" "\x1a\xfbL\?Q\x7f\x85\\\xd0\xb5\xa8\xd1\xcb;\x93H\xd6\xb3\xe7\xe8\xd9\x0b\xe9=;\xad\x0e\xf2\x06\x7fo\x05\x33\xed\xce=\xce\xf5+\xce" "\xdf\xdd\x80\xab\xfd\xa1\xa2\xe6\xb5\x1c\xa0\xf2\xe0~\xae\x39\xe3\xd2\x34ZY\x42|\xb1+\x0e,\xac\x06ONyT\xfa\x9a\xa2\xbaXpT" "\x02*\xb9\xa1\xe1\xb5\x33\x89Z\x9e\xf9\x8fV\xcep\xb0\xe2\x92\x1e(iS\x87\x19+\x12\x46\t\x83\xb5]|\x9c\x31V\x9d^Z\xd1\x1b" "\x8b\xd2\xde\xf9\xc4n\x62\x86\x11\xbd#\xbb\xd7\x1f\xcb;~&\xce\xe4\x8d\xfdL\x92\x92\xeeg\x82\xac\xb8\xe6J\x9e\xcf\x0bL\xb6\x45\x85\x0b" "\x8b\x0f\x0b\xbbK\xcf\x62\x96\x96\t-\xcf\x83\xe3\x13\xaf\x34I-\x32l\xdb\x17V\xf6{k\xbbqO\xa5\xeb\xa5\x46\xa1\xcc\xc8\x95\xfc\xa7" "\xb3w*w=/\xca\xaa\n\x9c%\x0e&\xe9\x1b\x66\x32)X\x0f\xb4\x9c\x12m\x39\x7fZ\xd4\x8e\x11*<\xe8\x18\x35\x9b\x8d+,$" "\xc2L\xce\x99J(\x61\x86\xbf\x46\xef\x1b\xc2\\'\xdan\xd8\xe3\xa2j\x10l\x1e\xa2g\x06\xbeg\x86\x42\x0f\x0f\x31\x93\x46\x8b\xaa\xe7T" "\x62\x17\x15\xac[\x7fj\xe7\xfc]\x9er\xbd<\x94\?\xa4\x98\x1e\xc5\xb8#\xa2\xb0|\xecLU\x31\x30x{\xe6\x35\xba\xb0|\xe2\xfc]" "\xd5\xa2U#Q\x9bNx^p\x15\x64\?\xa2\xce}\xa2$\?\x9d\x9c'jX\xf9\xfb\x45Q\xb7\x1c\xbb\x86\nu\xdel\x31Q\x95\x45" "<\xca'\xaa\xb9\xb0\xea\xbf\xaa\xa8\"\x15\xef\xcf\x44]\xe7=\n\x8a\x8a\xbb/\xa9k&\xbb\x96N\xf9K\x62\xee\x80\x45" "{\x38\xb2\x17\x37>\xe1\xfc/\x31'Yi\xa6\x44O\x16\x14\x9f+\xa7\xb7x\xc4\xe4\x16\x0c\x34\x0fw\x89\xf9s\x9b\x98\xf3\xac\x9b\xec\x91" "\xa2\xd9Y\x06\x85i\xa2\xac*%&\xe7\x92\x8a\xf9\x95q\xd2\xb7\x93\x9b\xc9\x0f~\x65\xa2L=\xb4\xfaX\xf8\x63\xc1\x30\xb7\xc8\xb0\xb4\x97" "\xe3O\xb9\xb2\x10\xdb\x31,\xa2\xfc\xb5\xf1\xdb\x99\xaa\x46\xa9\xd2\xc9\x03\xb5\x44\xd9\x65\xd4\xdc\xdd\x84\xd5\x9e\xdf\x85\x1cH\xb5@T\x95\x8b\xdc" "\x15\x93\xca\xeavj\xa6\xbeq\x34\xfe\x33\?\x13\xf3\xec\xd3KiU\x9dq\xca\xf4j\x85\xaa\xbfs\x1er\n\xa5\xa8\x92\x85\x9c\x35" "\x8a\xa3\x32k+\xc9\x0bl^&S\x18\xa0\xc4\xe4\"\x04U\x9a\xbdI\xdd\xdc\xd4\x8bq\xe2\xd4\xa5\xc3\xed\xcd\x9f\xfa\x0b\x14Q\xcb\xebp" "\xf6\xa9s\xef=r\xc9\x31\xdf\xe8\x8djs\x16\x9e\x35\\y\x1aW\xd3\x1a\xcdj\x1e\xf5\xe8\x11\x82\xean\x99\x32\xb5\x42q\xd5\x63\xff\x37" "\x8f\xf5\xa7\xf2\xae\xb9:\x99\x07|'N\xaay\x36\x65\x06\x9d\xbfkY}V\xcdu\xf2\x65\xa9\xa4$\x81%*\x7f\xc4\x85\xc3)\xf5\xef" "\x03K\xbb\x98}\x9eT\xe7\x8f\xe1\xfa=Q\x96\x9f\xa8\x39>I\x99\xda\x07\xf3\xf7\xe0\xe1t\x9a\x98\xb3\x95\xd7\xd1\xa0\xb6\x89\x39\x1f%\xe6" ":\x1b=\xaf$R\x46\xd5\xef\xf0 \xe3\x87\xa3\xfcY\x62\xfa\xfe\x97T\xf2\x32\x06\xc7\x89\xfa'\xa8\xa2\xf7[oJ\xaa\x9a\xdd\xeb>\xf1" "\xff<_\xb2#\x32\xd5_\x83\x45\xd5\xf1\xc6\xb3\xe0\x44\xa5j\x99z\xac[O\x99\xe9\x0f\x46I\xa8\xc6\xb3\x39=|\xa7T\x92K\xc9\x81" "\xcdHr\x8e\xffH\x9a\xcdI:\x15\xb8J\x85\xf7\xfe\xaa\xf1\x17\xbbW\xc9\x13\x9f_\x39\x93\x8c\xedj\xe3\xf4\x1e=\x31\xbd \xe4\xdc\x39" "\x61\xdbn\xb7=wz\xb9\xa1\xb3\xb7rU\xaf\x0c\xa9\x1a\xd6\x92l\x0c\xca\xcbsURhZI\xa9\xdb\x08\xdc\xb5\xa3\xf6\xd6\xd5~\xb2" "\xe6\x00\xbc\xa8\x8e\xbd\xd6;K\xdcV\x94\nu\xb4\xd6j\x1a\xa2\xb0\x11\xad=[\xf7\xc3K\xf7\xe8\x39\xe3\xd4\x17\x66\xf5_\xee\?\x0c&" "\x8f\xf7\x62\xf7i\xad\x04\x61\xfc\xd7\x9e\x10%\xb5\x31\xae\x30\x10\x35X\x38%\x83\xa2\x0b\x38Q\x8bR:NX\?j\xb4\xbar\xca\x7f\x8e" "\xef\xaa\x62_M\xb4\xbep\xca\x7fn\xe7\xabJ\x17\x31\xc4^ \xaeY\x89\xe0\xc4\x1e\xb9\xc6\xc1yP\x64`p\xc0Hh\xdd,\xc2\xdf" "\xb5m\x43 \xaa\x66\x9f\x36\x18\xe5\xbd\xfbV\xb7\x98\xe9\x8a[\xb9\x88z\xcc\x18\x19\xf4t\x17.|\xb2\xe3\xcf\x45g\xaa\xc9$J\xda\xda\x7f" "\xaa\xe2\xf4W-\xa6\xc4\xd1\xf4\x32q\x1c\x8b\xff\x1a\x41\xaa\xe4\x61\xac]\xa5+\x8f\xe5\xff\x88\x99{<\xec\x19_\xc2\xcfn\xfc\xfd\xe8*" "U\x91\x8f\x87s#\x63*=\x7f\x81^\x1d\x89G\xa7\xbf\xebjX\xbe\x36\xf5j\xb4\x1f\x19M\xbc!\x1e\x8f\x66\xf8\x7f\x63\x8a\x31+\x1e" "\xd7\x9c\xba\xf2\xce\x9a\xf2\xa2RyO<\xb6\x00\x9f\xbc\x39\xbd\x89H\x8f\x63`\xaa\x8f\x46T\xd4.{\xe2\x88g~\xd4\x1eq\x66\xf7\x36" "[\x38\xbd\xe3WM\xc9\x1e\xac\xb2\x10\xcfV\xe9G\xb3\xf2>\xfe\x62R\xf2\x98\xcd)\x30\xa0\xa4\xb6\xa8]M\xd4j\x99\x84\xdb\xf2}\x7f" "\xbd\xf5\xde\xf2x\xf3\xe1\xa4\x13\x0f\x35W\xf8\x41\x8b\xd5\xd6M\x16\xef\xc6\xce\xf0\xa2\xe4u\xa8\xfd\x41\xd6\x9b\xc5\x1cQ\x03\xb5K\xdaz\x8d" "U\x9d\x17\xbd\xb4S\xf5W\xf6I\x43\x92\xab\xf9\xc5\xcc\x30<\xf6\xb9\x63\x8c>\xf0\x45x\xd3\x66_`\x14\xda\x97\xecl\xeb\x8e\xe3\x34i" "\x61k`\x63Vo\xdc\xaeS\xd8\x36\xdd\xfd\x46\xe7\x85]\xb0\xbbu\xa6\xdaS\xa2\xe4\?\xcd\xc7;\xed(\xb4j*\x15\xa7\x42\xb9\xf2\xfa" "\xd1\xde\xd2\x0b\xb7\x04\x14\xben\xd9,\xd2\xd9N\xcfw~L\xcc\xd8\xaa\xee\x9ez\x84\xf1_\x0f\x18'\x8c\x80\xc1\xb6\xc5-\xed\xa0\xfeR" "\xdf\xc0\x06\xaa\x94\xc1\xd1\xc8:ML\xed\xe1\xe8M\x94{K\x14\x13>&J\x03\xebXT\x86\x97\x83`\x33N)N\xe0\x85\x8aw\x1d" "\xee\x1a$\n\xa3\xa0`\x32\x19\xb8\xa4\xebp\xac\xe7r\xc0\xf9\xef\x42\xb6\xed\x06\xba\x31\x38\xcb\xf4\x41\xf8\xc8_\r{<\xd5\x46\x05\x95Q" "\xf1\x88\xae\xd9T=;\x39\x83\xa9\x34\x88r\x97\xf2G\xb3x\x14\x61\xe4^L\x96x\x03\x9d%\xcex<\xb0\xaa\xed >\xc8\xfc.n" "h\x62^\x9d\x10\x13U\x84\x93\x62\\\xe0\xfdp\x19Ri\xc0\x65H\xc2\x37\xfe\x1cg\x46\n\xd7x\xe6\xa9ulMm,lJ\xd7\x88" "\xca\x9e\x33\xe8\x9fX\xe3g\xcaYH`\xd0\xdf\xa4\x8e\xee\xdf^\xac\xd4\x9c\xda@\x9b\x32\xde\xe1\xc1\xa6\xbay|\xeb\xde\xca\xc3\xa9\x15\xd9" "\xcah\xf6l\x39\xaf*\x89\xe0\x89*\x36pS\xbc\x64\x80\xf9\xe8\xa0\xf6j\x32 \xa6\x41\xe7\x91\xec]\x93\x98\n.L\xf7}N\xb9\xdb" "\xa9\x90]\x8dJ\xf9\xcf\xf9/\xaaN\x8c[\x92\xb1k\x1al\x91)N\xd1\x19\x64\x8b\xfeJ\xda\x81O\xde\xf2.\xad\xb5,\\\x39\x35Z" "N\xca)\x15\x66\xef\\\xed\xb5\xf5u\x41\x85\xd9L\xc2\xcf\x33k\xe5O\xad\xbe;\xb5\xc6\x81R\xa3'\x13\xdc\x34\xba{\x0c\xc6\x1b\xf9O" "\x65\x0fg\xc5\xecT\xee\xd1\xa9\x0e\x84.\x9f]ij\x63\xe7\xd2\x34\xde\xf1\x46,Y)\xe5\\\x7f\xff\xba\xf7\xfc\xea\xee\xaf\xf5=\x45:" "\xf5\xe8\x31K\xc8\xca\xd9\xcc\xa2\xc9\xecwun\xec\x93\x98\xbe)\x84g\x16!\x87#g:\xf5\x88U\xedYP\xfcqZ\xf3\x61\x16\x94" "\x36$s\x1e\xa5\xff\x80u\xfd+\xfd\xda\xc1i\x9d\xc4\xdc@\x61\xdfN\x61\xaf\x9d\xad\x38)\xcd,\x37\x99q\xe7M\x30u\x88\x93\x42\xc4" "\xc4\xb6\xe6\xc2\x41\xc5\xb8r\xca\xedY^\xab\xca\xcau\x33\x13\xff\xedr\x00K\xb2K\x33k\xa3\xcd\xb8\xd3\xb9\xf0|Nr\xf4W\xc9m" "\x0b\xc4\xbcJh\x43\x0b\x66r\xb6\x8c(\xbb\xbb\xa8\x7f\x63\x85\xc4,\xceu\xc8\xca\xc8*\xa2\xb3\xe4\xa3\x31\x9f!\x9e-\xc9\xed-\xb9S" "_)Vn\xcc\xf6Y\x84\xd7J\x82\x36\x18\xd6-M\xa9\xda\xe7\n\xd6\x9d\xb3\n\?+\xe1\xa7Mn)I\x41\x88\x94\xba\xe6\x0c\xa9\xd2" "z\xcf\xb7\xba\xe5\xe4\xdd\xf2\x01\x07\x84\x85\x35#\x32\xc3\xf2\x01{\xab\x84\xd8Z\xb1l>\xf6\xcb\x05z\xd0\x13\x62\x1f\x38\xe1{\x96\xe4\xf7" "\n!\x9e\xa7\\\x88\x30$\xaa\xe4\xf7\xe4OY\x64kV\x88\xeaz\xb9\xc8\x31\xf3\xb2\xb9\xb8\x00u\x90\x01>\xb3\xa9~\xfat\xf5\x0b\xc5" "\xfe\n\x9a\xed\x93\xe8\xe6\xd1\x15\x37\xf3V\x65s&\xc0\xe0\xf8\x9d\xb3\x30\xa0\x38\xb5\x89\xa6OU\x80\x62&\\\xae\x07\x95\x13\x9d\x06\x86\x61" "\xd3\xb2\xb9\xf3V\xae\xc8\xd3M\xeak\x9c\xca$\xc4\xe4\x18\x30\xa8\x34\xe8\xb3\x89\xea\xf8\x30\xa5\xd2\xe6\x43/Q\x18\xb9(\xd7\xe9!Hx" "~#\x37\xc0\xfd\x91\xa1\xe2\x83i\x9c\xe1\xe3p\xdd\x30\xe8_\xe7\x9c-\xa1=\x18\xe6\xa3%&\xab\xf5\x30\x39\x43GL\xec\x98Z\xaeK" "#\x80\x44\xd7\xaf\xf0\x86\xdf\x8a\x9f\xf9\xcb\xdc*U\xd8\xe4os\x92(\x98zHU\x7f\x0f)*\x31\xffH\xd7\x18\x62Nq\xab\r{" "\x39p\xc2\x81\xf1\x10\x31Q\")\x97$\x86\x44\xcb\x8d\x00\xb3q\x84hv\x81\\[@\x93\x11\xce\xcc\xe4\x03,\x63\x15\x1e\xf1g\x98\xf7" "\x80\xda\x05m\xbf \xcd\x93`<\t\x1a\x13S\xb7\xe1$\xcb\x85\x42\xa2~&N)P\x93o@Y\xe4\x87Z\x1d\xa6>\x93\xab\xa5T" "\x32\xf6H\x95\xfa\xdd\x9fI\\\x9d'\n=\xda\xca;\xd2\xc2\x43\x87\x33\xa4\x9a\x86\xf1\x35\xaa^#QX\xf1!\xec|\x38\xa5\xb2\xc4\xfd" "Y\xa1\xf6\x07\xc7i\xd5\x1a&j\xf0(\xf7\xbc\x87\x1b\"U\xab`w\xc9\x9az\xb9\xa1\xcbT\x8e.\xd8W\x41\x35\xb8L\xab\xdd%\xb3" "TQ\xed\x13\xf2n\xa0W\xc3\xb6^P\xf2\xfd\xb4\xda\x9c\xa7\x94n\xac\xea\n\xed\xd9r\x83\xf5|P\xc3\xb5\xbdq\xa5\xcep\xab}W" "\xa9\xb0S\x35\xc9\xb2\xf7N\xd4\xe6I\x1a\x00\x01vo\x16\xb5;q\x06\xd5\xae\x64\x99\x89jLSJ\xdf\xf2\x9f\xd2\x66\x91)N\x9a/" "\x1fG\xd5\xaaSG\x8cQ\x9a\x43I.\x15\x32^\x1cs\xaa^\xf9\x94\xebz\x84p\x13)\x84\xcf_\xe1\xc5\x65\x94\xf9\xa2y\xf3\x44\x62" "\x07\x31\xe1\xa3}\x05\xa3X\x42\xcc\x1e\x02\xe9\xc2HLTS\xca\xa7t\xd5'\xc4\x42\x66\x61{M\x32\x37;\r\x1f\x9e\xfc\x06\xc2\xa9\xf1" "\x07i\xf8\x34\xc2\xf8\x99pP\x0bg+N\x16\x15\x85\xe9\xfc\xe5\xd3\x38\xdb\xa3\xf7\x63\x31q\x39\xbf\"\xbd\xa4\x82\x96|\xc5\xbc&_\?" "\xe2/\xbc\xaf\xa6\xa5\xaf\x66p<\x04\x19R\xc1\xee+\xa5,\xdc\\\xa1\xca\x08\xf5\x17\x8a\xcdhz\x1f\x1cU\xe9\x1c\xbc\xdc\xa4sy!" "\xc3\xb6\xcd\xc5\xa9\xe5N\x30\xbf\xd9_\xe1\xd2\x1d\xa9\xb7\x05R\xe3\x46%\x34^;\x39\x07UM\x9e\xc2\xb5" "(`\xfc\x93\xe3\xca_Q\x95\x13\xe3\x33\x89n\x35\xe1\x61\xc1\xe9\x17\xb2rK)\x95W\xce\x42\x82\x8a+\xcb\x94J\xb6,\x10\x85\x46\xa2" "\xb0\?%\x9f\xce\xc8\xe7\x1d\xf9rI\x62\x9b\t!&~\n\xe1\xa5Y\x89\xc8x\xcb\x9eIP\xfd\xd5<\xf2Y\x39\xd6$\xac\x1e\x18s" "\xe4\x45)\xf8y\xb6\x64\x62*\x1e\xd5\x12\xb5\xce\x07\x0f/)\x95:\x33\xbc\xad$\xea\x8aO\xc4\x81r\xe1\xd3@\xfd\xcfY\x18Pq\x1b" "\tQ\x98\x84+\x1c\xcf\xa4x\xe1Z\x15Q\xf0\x1c^\xbe\x8dJ\xe7rn|\xc8\xb0\x88\xcao\x12\xd9\xa3\xca\x15U\xe5J\xee\x80\xce)" "\x44\xd5\x86\x64\xf3\x87\xbc\xe1\x93q\x0b\x43!\xbc\xd0\x97o\xd9\xe5&\xac\xf0\x9aq\xf7]\xef\x86\xe5\xdem\xbc(;\x39\xf4\x0c\xd3\xdf\x90" "\x98\xac\xca\xc1\x94\xe6;\xe7\x31\x8b\xda\xf1G\xf7\xa7|\x19\xfbK\xbe\xb4\xbd}\xbe\x9fo\x35\x00\x30\x39_\x14\x16~\x95\xef\xd4\xbd\xe7y" "\xddr\xaf;+\x91\xee\xb8\xf7\x06\x18m{t(T\xbe\xb3\xa0\xbc\xa3\x43 \x61\x1f)\xea\x8e\x1d``P\x9d\xee\xbb\x88\x1c\x0f\\\xda" "R~\x88\xcbx\xf8\xb7\x00n\xb3\x85\x87O$+Ho\x9cX,\x64u\xea\xcd\x12\xc8\?\xdb\xad\x41%'\x8ay\xf5\x92\x98\xf0\xfaI" "\x13\xae\x02\xad\xa2\xa0\x07\xd2\xe6\xe3-g\xa6\x89\x1a\x96H,\x92/\xdb\xe8\xb2\x10\xae\xb0\x85\x98\x41-\xbc\xc9\x19\x8f\xc9\xfb\x92\x93\xdeI" "\xd4\xe4\x33\xd1\t\x83\xf0\xc3\x38\xfc\"GviLxS\xfe\x38\x39\xe0\x44\xd3\x9e\\\xcd\xde\xf5\xbe\xbbH\xfa\xcdy\x8c\x91\x00\xe6\x62\x46" "\x37pP\x16%\xd4\xb4\x18\x05\x13\x83\xa6\x62\xcey/\xdc\x9fV\x08\xf7\x08\xa0_#z\xe1mqu\x07\xc8>\x36\x9a\xcbZZ\xed\xba" "n&+\x38L}%\xa6\xbd\x16\x35\x07O\x89ioH\x1d\x1dTj\xc9o\x8b\xf2I\x8c)%!\xc5\xd6\x0e\x8f\xd9\x13\xaa\xd9k\xb0" "\xbf\x8c\xea\xa5+\xf1>\x15Nzl\xd4\x88\xcb\xe3\x7f\x95\xd4J\xc3\x8b\x16W=\xf2\xf0<\xb9\xa2%#\x98\x98GHs\xb9s\x33N" "M\x9d\xe3\x81\x7f\x62\x9c\x1e\x90\x1bh\x9c\xbb\xdag\x87\xec\x93\xa3\xf2\xef\xf9\xb5\xed\xc2~\x8f\xf4\xe6R\xb6\x1eh\x90\xcdM\x98\xdc\x43\x15" "\xa6\xbf[v\x86\nw\xc7N\x8f\x44\xecg)\xbf\xed\x0f\xf8\x9b\x9c()\x44\x9fu\xf9\xc3\x32\xf4\x8f\xb0{\x46\x62\x33\xa0\xf2\x07[\xee" "`\x38}\x88\x36-\xb6^\xff=\xa0\x9e\x30u\x17+\xbc\x95\x8f}\xa1\x41\xb6\x0f\xc2Q\x33\xacU\xd8\xf1Q\x1e\xb3q^\x1e\x07Go" "$\x93\xeb\x98\x83+\x42\xd6o\xc7\\\x90V\x36o\xdf\xf2\x8a\x30\x02\xaf\xec\x93\xcc]\xc6\xeco\x17\xbe.\x93\x9d/\x45\xf1U\x8e-\xf4" "\xa4\xec*\x91\x9b\x8d\xd3\xd2\xf9\xd8*l\x63{\x11\x63\xf6\x12\n\xb1\x8c\xa4l.g\xca\xe6'\x46\xd8\xbbH\x86\xdc\x44\xa1;\\\x88\x91" "\xfe\xf2\x84\xeb\x1d\xca\x13\xae\xec(\x9b'\x89\xf2\xc4J\x8b\t\xe7\xaa\x94mO\xf8\xf2\x34.\xaf\x9c\x41#gg\xa9\xd2N=\x38\xb5v" "\x15\xad\x90@\xbf\x38\?\xbd\xfc\xc5\xb1\xfa\xf2\x97\x95\x8fJ\xbb\x99\xaf\x90\xb5\xbb\xaf\xb0\x95!\xb1\x8e\xb4\xfc\x45\x0f@\xe5o{\xa4o\x9d" "\x04\x83\x45\x17\xe5\x1f.g,\xffX.\xf6\xc3\xf9\xb5\xe5\x1f\xcb\xc2~\xa2\xb7\x96\xd3\x1em\x61oR\xf9\xbb\xecq\x9d\xbc\xaa\x9a\xb1\x63" "\x1c\x18W$\x7f{\xc1Q\xc0\xb2\xad\xa3,/\xb8zG\x88W\xab\x9bWr\x8c\x1c\x33\xd7\xfd\xb0\x85\xde\x9f\x8aS\xd3\xdbyxrg" "\x65\xc1\x9f\x8a\xbb\xfdp}\xc4.%\x1c\x8e\xee\x33\xd6\xa8]Xq\xb3\x08\x0e\xb3$\x9bS\x0b\x8b\x9e\x0b\xab\t,\x38\xb4\xa1\xe4\xed[" "\xb4U\xfe\xae>h\xde\xdc\x92w\xf7$|\x01\t{\x17\xc6w\xa3\xfd\x34\xab\x43\x0b{k\x0b\xcb\xc0\x17\xec\xde\x03\x83\xa5\x05\x0e\x0bZ" "%\x87\x39\xc5\xe4\xeb_\x04\xf3\xa2\x33\x39\x1b\x8b\x9d\x85\xcb\xaa\xf1\xdc\x99\x9c\xb2\xe1os\xa4N\x88\r\xc0\x95\xeam\x82\xeb\x37\xa8\x06O" "\xdc\x04\x94\x8ay\xda\"\x84\?\x36!\xcb\xc0\x85\xc5\x1a[\xa7*\xec\x16\x8c|_\xf4\xd1\xa9\xb4\x9f\x61\x41\xb8\x90\x9a\x06\x89\x9eM\xe1\x17" "\x1f\x86\x0b\x06\x84\xac\x11-\xa2\x11o\x33\x9a\x34\x9c\x96\x43/\x38-\\hO\x16\xady\x89\xf8 \xc3~{\x35y\x37\xf4w-\x64\xd6" "*\x9c\x18\xbf\x8c\xdfNi\x8bi\x9d\xa9\xf1\x1e^\xdeI\xb6\x12\xb3\xe6\xa6\x9f\x04\xfd\xbeT\xe6\x83\xea\xfd\xbf\x87\xf7\x99]\xf4\x30N|" "\xb9\xea\x31\xde\xb2\xe5<\xca\xa0\xd6\xf3\xe8\xc6!\x46\xd0_h\xdc\xb6\x1b\xb7\x84\x64\x39\xc7\xc2\xb2\xac\x45\xbc\xb5\xbbg\xbe\xae\xb4rw\xc1" "~s!\xb3\xb2\xc5\xbe\x35'\x99\xa5-,KS\xfa\x33[\xee\xb6\xe5\xd8\x62%\xcf\x06\x7f\xa5\x10W\xb4l\xa9\xa8\xcf\x37\xbe\xccJ\x89" "W\xad\xd8\x12\xc7\xca\x0bW\x87V^\xe2\x8a^\xbd\x32\xfa]\x14\x8c]\x12\xed\xd8\xca(\xa8\xafH$)\xe1q\x85\x44g\x9e\x10\xf5\x19" "!J\x06!\xba\x46\x85\xa8\x15\x81r\x88\x15t(m\x8e$\xea\xdb)\xad\x0e\xbb\xb3\x91\xbc\x12\x66+\x62\x8e\x8b\xe4O_s\x80\xda\x13" "\x15Z\x1e`\xd4\xae&\x37\xb6,:\xf9\x32\xc4\x44\x1e\x02\x86\x9d\xb7p:r\xc5\xed\x36+#v\xb0\x82\xc9\xb6\xb2P\x89{GQH" "%\xc2\xd6w\xea\xd6Y\xee\x08ox\xd3\x61\xd7\x88\x34\x00\xfe" "\?]\xe7\x81\x9dL\xb0\xb3\xe9\x99\x9d\xccRq\x36\x19\x13L\x06\x63\x82#\xd1\xd8\x64X\xccu\xa7]\x8c\xf4\xbe\xaa\x36\xdf\x7fg\xce\xf1" "\xf1#\x35\xd0\xa1\xba\xa2J\xa5\x62\xdfL\xc4u\xc3Q\xc7\x30pvQ\x8d'\xa2\x31V\x88=\xb1\x85\xf5NX\?\x86]>\x0c\xcd\xae" "\xa0\xfcg\x14\x0c\xd1\x46\x07uz\xc0\xdc\xfb\x99\x16&\x32\xfe\x13\xcf\xce\xc1\x07\xa8\x1b\x63\x62\xf9\x8dh\x63\xfbt_\x03]\x82\n\x83\xf2" "\xabK-.\xe1\x04u\x36\x18\r\xa6h\xb9'G\x8d\x01\x87-\xfe\x9c\xc6\x15\x38N\x8b\x0e\x05\xa7\xf9\xab[\xbf}I\xed\xd5~\xb1|" "\xd5\x64L\xf2\xa5\x85\xc7\x99\xa3\x64,\xf6\n\xa8\xbd\x37\\R\x8bv\x96\xf0\xd1\xdd\x83h\x41\x8e\xb9\x90#\xe3\xe4\x8c\xb6\x31\x61s\x46\xae" "^\x1d\xed\x1d\xcf\x18\x61L\xb8\x9a;\xfa\xf5\x91;jI\xa1\xf4\xee\x9b,\x92\xd4\xb2%\xba/P\x1b\xa6\xb9\xfb'\x34\xbf\xb5\xe4\xde%" "\xa2-;$\xd6K%g\x0c %l\x1c\x1d\xe5\xde\xdcUt\x33\xac\xe6\xc2O\xd5\x9c\x16|\x8c\xc3\xcd\x8f\xd3\xe4\xc7Q\r\xc5n\xa1" "\xc1\xedO+)\x8c\xf2\x87\xc9\xe0\x15\x0f\xef\x06~}\xeb\xd7\xf2\xd0\xe8\xfc%\x44\x38O\x61N\xc3X\x87\xd9\xbc\xd3\xc2\xa9\xbc\xb1\xa1i" "]+]\x0b+\x39\x0bN\x42\n\xbb]\xe3\x96\x1c\xf0\x62V\x30\x85Ui\xf5\xb4\xa3\x80\xed\x9ah\xa3\x90\xc3p\x8c\x17\"\xfe\x85r\x44" "n\x63r\x80\x00\x91\xbe\x14\"\"\xe0\xb7\xd0\xdd\x0c\x62\x44\x81\xfe\xe3\x83\xff\x18\x1f\r\xf6\x83`\xbbr\x1a\xed\xeeI\x8b\xcd.\x84=\x1e" "\xb4\x97\x06\xf1\xd0\x62\x97\x08\x9a\xee\xa4\x8a\x45\x17\xd0hq\xa6\x88\x95\x10\"\xa6\x93\x8e\xdet\xeb\x44\xae\xa5\x86\x18\xdd\xf0\x66\xfd\xdc}\x34" "\xbe\xfc\x85\x8f\xa7h\x30v\t\x1f\x1f\x8cu\xb2\xdd\x33\x9e\xc8'\xde\xbe\xff\xb9 ]X\x45\x11\xbf\x0e\xe4\xb7=\x06\x9aN\xe1\x8a\xa7`" "\xc7Mh\x37\xcd\x30\x37\x42l\xdb$,\x30\xcd\x83\xe6\x8dq\xe2h\x15\xf8\x82\xb1\xef\x94\xbc$=y\xdd\xa6\xa9\xa0\xcb\x10\xe1\xd5\xad\xa3" "\x37\xba\xe4\xd8\x1c\x9a\x64\xbb\?m\xebn^\xf3\xe1i\xee\xdd\xbc:M\xbe\xe6\x32h\x98\x94\xd1\xe5\xc0J\x8ej\xba\xfd\x06\xa6\xa2\xa0\xc9" "\x07\xec\xc6\x8a&\xa3\x8f\xf1\x8e\xf1\xfd\x44\xcb\x16\xc9\xde\xcc\x31\x90~\xf9\xb4}\xa6q\x63\x46\xd1^\xf8\xda\xc2)\xdf\x0e\x83\xed(\x9d>" "\xff\xc5*+\x88\xba\xf5\x42\x87\x19\x99\x8d\xb0\xf2H\xdaMG\x37\xbcxt\xc7\x13G\x45\x16\x08\xee\x95-\x64\x1b\xba\x88\xfa\x9d\xa0\x95\xa4" "\xa9M\xb4Q\xdd\x95 \x8ag\x89\xc2m{\x85X\xbd\x9e\xfc\xfa\x45\x80H\xd0\x1bl\xedm}y\xb7\?$\x46x\xc2\xd1\xa5\xee\r\xd6" "\x46\x36\xfb\xb2,\xfe\xa5\x35\xc6\xea\x83\x13p\xc9/z\x45\x0b\xb7\xcft\x34\x15q\xd7\xd6\x92Y\xe5\xc9\xb4\xcet;\x10\xab\x86\x0c\xf5\x65" "\x37\xfd\xe5~\xa3\x19@\x7f\xf6\xe8\xb4\x30\x91p\xb7\x45W\xbd\xe4WtqG\xc2\xc8\x04Zn\xb0\xf9\x06!L\x9a\xc9-\xb7\x99\x10\xa2" "\x83-\x44\x07;i\xab\xc2\x85\xad+#\x7f\xe7\xb5\x9b$\x8c\x8d\x42\xcc\xe4\x0b\x8fx\x13[m\x30\xe1\x86\xe9\xac\x96`l*\xa2\xb6\x1d" "\xd0Y\xdb\xb4\x0f.)\xa3\xb6[y\x89}\xac\x39\x0fT\xd3\\%\x01\xed\x34\xe1\xeaTh\xda\x06\xc0\xa1\x86\xda\xdf\xd7\xb8\x19\x02\xc5\xe7" "+N\xefQ\x1b\xbcX\xbf\x04\xdax\x14\xd5\xff\xbe\xc9~\x0e\xc4\xc3\x33}N\x9d\x46\xe7\x66hV\xa7\x41\xbc\xee\xfa\xddR\xac\xcd\x96\xdc" "/\x9b\xda\xf7\x05\xfd\x43\xa1Y\xcd\x00\xf1\xefn\x38\x03O\xb1\xf7JO;h\xea\x02\xd4\x8b\x93'\xea\xe7\xfc\xa7\x38y\xe8\xb1&\x62\xc7" "\xbe\xf0\x64\xb7\xc6\xfan\xeb\xceOo\x88\xe4\xd6\xba#\xdb\x30\xfd\xe0\xe8\r\xef\xc2\x07\x66\rN\xfa\x0b\xd1GM\x1e\x7f\xd7\x17\xfe\xe6\x91" "\xe2~\x64\xb4\xe8[\xc9\xa3\xa7\xb1nn(\xde\xda\xb6\x81\"\x62\xb2\x42\x88p\xe9\xa0\xd5\xca*\x06\x08\x8a\"\x62\xe9><\xdd\xd3\x7f\xe2" "L\x8bj'o\xb5\xfc\xf7\xb0\x94\xf8\xff>vz\xd7\xd6ry\x8c\x0f\xbb{\x1a\xde\x45\x89\x94\x89\xc3\xa0\x34:\x13\xb9\xc0@\x34\xb6\x8d" "G\xee\xbf)\x9c\x95\xcf\x9fjV\xd6\x61\x46\xaf\xfc\xbbK\xfc{@\xce\xcd\x03\xfb\xa1\x37\xb3/\x1fW\x61\xb1N\x8b*\xb5J|K~" "\xf2!\x1c\x9eh\xc7\x15M:\xb3\xadw\x8alk\x94\xfe\xfa\xcd+\x66\x82\x8b\xb5;p&\x46\xcd\x84W\xb9\x8e\x0f<\xed\xbd\xd9\xfew" "\xdd\xfe\xcf\xd5N\xea\x1c\x7f\xf1\x11$\x37\x61\x8ei\xee\xf7'\xe1\xfc\xdd{\xbdp\xf7u~ v\x11\x96\xc3\xd3\xb2{\x9f\xfe.\xed\xe8" "^\"\x45\xff\xb2\xcf\x61[| U\xb5\xc6\xc6\x1d\x80W\x8a\xd3\xce\x0e\xb8{u/\x39\xb8\\\x39\xc6\x1f\x31\xeb\x1f\x83\\\x33\xd8\x1e\xbc" "\xee\x95\xbb\xe3\xa0\xbe\xf3\x98w\x8f\xc1{\x9b!\xaf\x44\xdc~I\xfdLqg\x17\x39\xe6\xbc!\x9f\x81+\xd8\x84Y>^\x98Kr\xc3" "\x36\x11\xf3\x0b\x39sT\xbap\xaf\x35,\xbcr\x0bN'J:\x06\xc9\xa6{u\x61\xd1\xf8\xdd\x94\xcf\xfc\xc7)\xb5\xd3\xbb\xa3\xf4\xd3\xac" "\xcb\xa1\x1ag\x35\x93\xd2\xeb\xbb\xf6\x1b\x8f\xde\xe4\xe3w\xcd\xe7\x8b\xdaz\x97)\xe9o\xa4\xe4;~\xa7mZ\x9a\xc4\x66\x1a\x42\xcc\"\t" "\x0fu\x12\xeb\x33\x41\xd6\xce\x10\xbdT\x93\xb6Gh\xe1\xf6\xd3i^\x82\?\xf3.\xee\xd8\xfd\x16\x11\x36Y!\x46\xd2\xa0.\r\xc0 \x02" "\x9a\xaeS\xc0\x84\xaehX\xc9)\x84\xf3\x81\x10\x1e\x32`\xd4\xdbr\xbb\x03\xd1Pk\n\x07\x8fgO\xc2!\xa3rI\x0e\xf3\x8e\xd2\x97" "\x8c\x16\x17L:\x1c`\xddH\x11\xee\x9f\"\xa2\xe8\t\x31\xf0S\x8e\x1c\xe9\x0b$\xe2\xa1\x42\x1e\x99\x66\xb4\xfe\x83\x34_\x8bX\xb2\x43\xe5" "\xa9\x63\x1c^O\x34K\x12\x36\xaa\xc2V\xd7\xc8\xc7\xf7\xfb\xf6\xebO&\x0e}\xf0@Z\xb9T\\:r\xf6&\x65{\xf2\x08\xd1l\x81" "qTphQ\x8d\xa9\x18\\\xf2\x8b\xc1\xd5=y\x33pt\xe7\x62!\x10\x16\x98\nt\t\x02\xbd\\\x83y\x0b\x9at\x9c\\~\x10-" "\xecW\x38TU\xed\x9b\xac\x0c\x1d\xdd\xe3\x05\x8fv\xbd\x9a\x11=\x03P\x43i\x64.\xe2\x33\x36'\xb4\x8d\x8b\xd8\xbap\x94T\xe3T\xb5" "h\xf6r\x84\xac\x11R\x97\x0c/\x07\xfe\xee\xd2\xba\xda\xd2\x95~\x1c;{\x0b.\xeb\xb1\xc1\x01\xdd\xe3\x8b\xc8>\x32\x44u\xfeOT\xa9" "\xa1\x05\x04\xa5\xc4\xf8\x99\x0f\xa7\xf9\xdb\xab(\x91pZ\xbc\xad\x32\xb5\xe5\x30\xfe\xacn\xbf\xe8\xf5\x83\xfd\x1bgz\x45;\x0b\xbe(\xda\x8a" "\x19\x99s\x62\x42\xb8\xec\xa6.\xe9\x99+\xb4\x87w\xaf\xd3\x9d\x45\xc3\x39\xed\xdf\x18\tY\xb4\xf7W\x46\xe7s\"}\?S)\xae%\x15" "\xee\xf0\x82R!\x0c\xc2\xc2\x02.\x93\x66\xf0)!\xcbO\x9a\x41~R\xe9\x30y\";[\xdd\xb8\x01\xfd\xfcT\x96\xc3\xfaT\x36\xaa#" "\x61rl\xe5\x41\xda|R\xb9\xb0\x8a\xaa\xc3vo\x07\xbd\xd6+\xc3\x1c\x89\x96\x34N\x35\xbc\xae\?\xeeS\xc3\xd8,U\xa4\xd3.\xc8\x10" "\xae\"\xfe\xac\x65\xb4\x44\x8f\xacTQW\x34\xb9\x95\xe6\xa2\xf5\x90t\x45\xfds\x41\xb4SUNl\x0b\xe1\x81\x00\xd2\x96\x93\xaa\x87\xa5\xa4" "\xa3\x86\xff`\xa1\x82\xf6\xf7\x05\xcel\x42\x64\x0f\x42\xc4\x8aV\xef\xa9\xd6\xef\tuM\xcbK\xe1\xb6[\x34K\x08\x37\xfc\x9cn\xf2\x42\x44" "\x44\x14n\xf0\x0c\xad\x30\x1fS\x17K\x95\xda\xd4\xd0\tO\xb5\xa2\xeb:\xf9\xa6\xbd\xb3T\x9b>\x0e\xa0\xba\x19\xc0$\x0c-\xc8%\xb9\xd5" "\xafh\xa9'\xaf\x34<\x13\xb5\xe7\x88\xf1q|\x00\x0b\x97\x44\xeb\x7f\x38\xea\xe6Y\x98\xeb\x16\r\x33\x9a\xa9vp\xdd\x08+u\x86@\x10" "\xedPs\xb4\x04ik\x07\xeb\x64!\xeaSmn\xfb\n\x32\xb0%\xc5I\xcd\x89V)\xa9\xc8\xe1.\x45\xcc\x9a\xa7\xba\xb4\x05\xa4\xba\x01" "V\xfb\x0b\x37\xd2\x1d\x98\x07\x13\x64\xecn\x88@\x17\xa9.\xc3g\xa7z\xec\r\xa5z\\\x9b\x91\x1a\x30X\xa8.\xfa\x9d\x39J{I\xf7" "]\xd1X\x91+\xad\xfe\x34\xf1w\xff\xce\x08h\xee\x80\x7f\xf1\xa3.\x8d\xf0X\x8c\x8f\xcd\x96\xdck$\x35\xa4\xefPj\xc8\xe8\xbf\xa0\xd4" "\x13\xf2`g\x07\x34\xbcn\xf9\xf3\x9f\x03\x07\x8a\xc5K\x92\xefXi\xdf\x1a\xd1p/\xc4,Hj\x44\xcb\x9b\xb0\xfb`\\:\xfa\xfd\"" "\x45x\xbf\t\x17\x36\x83\xee\xc4\xdfm\xdaZ\xc5\x91\xbf\\\x38\xda+\x1f\xf9\xab\x8e\xbd\xbe\x91\xbf}\x07\x19u\x17\xb4r:\n>\xd3\xc6" "\xba#\xc7u*\x36\xc9\t\xbfj\xe5@\x19\xed\xae\xa5\x1bH\rQ.@\x1a\xe9\x45\x44\xd0O%\xf2\xc9\xab\xfe\xa1+\x94\xfa\xb0s(" "\xad\x32\xf9\xe0\xb6\xcc \xfb\xe6\xa9O{\xb7\x9f\xc8\xfb\x99X\x64\x03\xa1\x62\x1c\xbd\x04\x1a\x17\x89\x88\xd8\x8ci\x8f'\xbd\xffO#J\xd5" "'{m\xa9\x31'\x36\x41N)\xa4\xc6~\xbe\x10\xc1\xf4!\"\x82\xf7\xa6\xc6*\xa2s%\"\xc6\xd3\xc2J\xd2\x91~\x17\x10\xa5\x86\x34" "\xf1\xe8h\xa9\x38\x96\x61\x82\x9dv\x62U\xd1\xc4G\x90\x08\x30|\xb9\xe6\xd4Gj\xca)\xe0\x94\xed\x98\x91\xb2\xd1\x18\x18 n\x61j\xce" "\t\x36\x65\xd6\xef\xcf\xa5kjZ\xd3\xd8&\xd9\x89\x99\xff\xee\xeav\xae\xb9u\xec\x84{\xf2\x84;\x98[\xf3\xa0\xe4p\x1b\xa2\xff\xb4r" "\?Tm\xd9\x39\xd3\xb8\x63g\xca\xf6\xd9\x10\xb2P\t\xed\xe7\xf7\xb7\xc6\x99qK&\xb3~\xeb\xde:\x9csz\x1f\t\xdd\x45\xb3v\x36" "\x0c\xd2\x84\x98|S\xde\x18w\x46\xbb\xdf\xbc\x9d\x1d\xb6\x01\xd0\xbb\xcdP|x&\xb1\xb3\xb5\xb0\x62\x37\xd4|v\xd4H\x84\xb3;\xd3\xc6" "\x8e\xb4N;\xd1\xbb\xfd\xf2\x9e\x06\xf1\xd2x\x39\x0cs\x83\xd2\x12\xa0\x65\xe7oI\x8d\xdc\xf4\x9e.\xad\xb0\xcd\xbdv\xca\xd8t\xb4\xdc\x38" "\xf7:v\t\x84\xfd\x15Ju\xfd\x62I;x\x0b\xeaG\xe9#r\xe5;\x0e\x44\x37\x45N\x82\xab\xb6$\x87\x07I\x46k\xad\xe7\xde\xfb" "\x97\x37\xba\x8b_\xa2{Kn\xc9\x87\x8av\xc1\x89%\xce\x64\xe3(\xa7\t\x17v\x14Ny\xca\xb9\x63\xfc\x30\x8b*w\n\x84HOj" "\x11W/\xe4\xda^\xd3\xda\xd2\x66mw\xb0\xb5$\xd8Z\x36\x43|\xa3\x94\xed\x61\x02\xbaL\xaa\x1bQ=\xb8O\xed\xdb\x07\xbb\xe0\xf1\xda" "h\x9f\x9f\xae\x1c\xfd\x04\xb3:g+S\x36\xc9.\x44\x08g\xe5\xc8%\x81Z\x97S\x7f\xa2]\xc3O\xb1 \x30\xd4\x83\xf2\x93\x41@U" "\xfcr\x0cv}\x06*N\xd9\x36+\xc2|\x91,\x8c\xe9\xa5%\xe2\xe3\x83#\xf7\x11R\x91/\x98>\n\xa0\x97\xbf\x8c\x45\xf6-T\x8c" "J\?\x36z\x9a\xeb\x1a\x93\x7fr\x80_\x1d\x19]\xd7w\xee\xd7r~\xf7\xcbo\xd8Y\xeb\xaf\x9a\x19\x06|{~\xab\xed\xf8\xefQh" "-\xa7Yg\xd6\xf6\x87Q\xbe:Z\xb5\xab\"\xc3\xd8\xab\xf8M\xb6\xed\xdb\x9d\x96\xa3\xcb-\x36\x04SJj\xba\xbc\x44Or\xe5\x8f\xa3" "\xcb\x9f\xdc\xb2Q\xf9\xe5\xc8\xa1\xbe\x88O\xd5h\xff\x64\xe2\xca\xd1_\xaf\xb9\xbc\x99\xda\xee\xc1\xbb\x9d\x39-\x38\xed\x18<\x43\xb4gK\x96" "g{\xa2~\xd6*\xe1\xb9\x35\xa5\x42\xd6\x83\xfe\xc0\xf4\xc1\xcc\x1a\xe6\xb9\?\xba\x8f\x93\x62\x92\x96\x34\x63\xdc*\xd1\xe6O\x8e\xf1\x13,\xed" "\xe7\xdfv\x8f\?\xac\x13\xac\x9dU\xba\x02\xc4\x95\xba\xca\xa9\xa3\x7f\xcf\x06\x83\xf1\x0b\xd9\x01W\x46\xeb\xaeKv\xdd\xd4\xc8Z\x9ah|\x61,\xcb\xd3\xba\x86!Z<\x1b\?" "\xb8\x06T\xc4u\xd7\x31(\xdb%\xd7,\xc2\x91\xf5\x97\x19\xf1\x1ft\x95n\x1c\xee\?\xf5\xa5#\xc7\x0f\x9b\xc1\x16-\x9b#\xd9\xa5\xfc\xb2" "\xae\xd2\x97\xe5\x81/\xbf\x35&\x31\xcd\x9a\xfa\xe2\x86\xd7\xc2\x31\xee\xfb+\xc4\xcc\x05h\xdd\xbd/+\x17_\x36v\xf8\n\x11q\x36\xf5\x15" "\xdd\xde\x91L\x0b\xa5_\xcd\x9f\x89\xba\x39L\xe1\xde\x32\x0f\x8e\xb1:W\xd1]W\x45\xb6\x03\x10]\x04\x1bh\xd1m\x9a\"{P+\x7f" "\xdeu\xb4\x1e\xf4Z\xfe\x1c\x7f\xf7Uk\x39\xd6\x61\xda\xf6!\xa1\x88h\xbe\"\xc2m\x05\x8c\x0f\xcdQ\xd5\xaf\xa3\xda\x05\xc9Gq\xa3\x63" "\x0b\xe9\x91r\xb6\xb5\x83\x37\xc6\xfb;\xd0\x83\x31u\xb0&\xe1\xc0\xe0\xf7\x42V\x31\x07\xabR\x0eV\t\x1cx\x9d\xf4\x05M\x36\xe9k\xfa" "\x13\xa4\xaf\xc3+\xf0\xce\xeb\xd5H\xdc\xb5\x10\xc3j\x19\x8aN\xb4JM\xa7\xd9\x82\xa4\xd3\xbc\xaft\xc6\xdb\xd7$q\x83\xe7\x17h\xfeP" "+\xd3\xb4\x8c\x1d\x86$&k\x85\xd8\x87S\x98\xad\x92\x98\xa2T.It}\xd2Y\x1f\x9b\x9c\t\x31\x9f(\x44\x38m\x30\x38=\xf9\xdd" "<\xb5\xde\x03\xc9\xab\x66i,\x15\xa2\xf7 \x44\xaf!\x9d\xe5K\x00\xfd\x9fKNV\x88\x86\x46\x16\xd4yo\xac\x31\x85\xc6V\x42\xc4\xb7" "\ryzrT\?\x1dlR\x9c\xce\x86X\x42\xa1\xfc\"\x61\xb6\x16\xc2\x8a)\xcc\xf1\xf4\\\x06\x07\xd2%\x10\xa2\xef\xbe\r\xd1\x12Y\xb5" "\xf0\xe5\x82\xcbk\xd2\xd9\xe8\x8aW\x88J\x37$\xb6\x95\x12n\xc6\xc6\x19\x89\x42\tJ\xa7-\xc4\x04\xa1h\x98\x87J\xe7hSJ\xe7\x7f" "\xd7-\x0f\xf3P*\x8e\x8d\x1bG\x9a\x00\x44\xc4Z*\x90U\xa3\x88\xfb\x14\x8d\\N\xf4\x17_gZx*\xc4\x07N\xb8\x91\xbcw\x93" "\x8e\x9a+\x13\xe7\x8e:!<\x98P\xc3\x1e\x63\x42\x98\x12\x85\x99\xaa\x91\x97\xf4\xb2O\xb1\x98\x9fy\xc7\x95\x06\xddu\x07\n\xf7,\x13\"" "\x96\xee\x39.\x11\xf1i@\xbep\xbb%>\x98\xa5k^}\xd7\xe6\xd3\x33\x31>\xd9\x34\x43\x93\x84\x88\x33#&\r\xc1\xf3\xab\x8a\xe6L" "\x80\xd0\xdc\x33\x8b\xa8>\xae\xee\x42\xab\x0e\xe3g\x88x\xba\xd1\x65\x84\x33\x9b\x80K\xe7\x19\x99\x0f\x64}\x0f\x91\xbd'\x88\xd2+\xe4\xdaM" "\xd1R\x43\xee\x1f/\x62:\xe9\xbd^\x30 \x89h\x8f|\x32\xcey\x08k%\xda\xf7\x44\x44\xf7@\xd8\xe6\xdb\xf5Q\x43\x80\xf1GO\xfb" "\xd8\xdc\xe3\x34\xce\xf2\xc7\xda\xf0K:\xc3\x32\xee\xa6\x13\x44|\xf8\x1f\xcdO\xd5$\xd7\x07\xcc\xe8zL\xef\x11\x9e\xaf\xa2\x8d\x87\x9c\x12S" "\x91\xa9\x15\xbb\xd2\x88\x88\xf5\xf5\xc2\xefU\xd4}\xf3\x0f\xcc\x0e\xfe\xf1\xcb\x91\x1d\xd5t>\xc8\xa7\x1c\xffs\xb5\xf3\xbf\x9e\x35\xb3\xd9\x1b\xe2" "$\xaf\x90\x05\x38\x1f\x8c\x98\xed\x82\x17;\x8e\xcd\x10\x94K\xaf{u&J\xfe\xe4\x08\xd1\x1d\x08\x06\xc7\xdf}\x83\xf3\xa5\x92\x43\xbd\xa2\xae" "\xbb\t/\xca\x41\xb3\xcbo\x61\x12\x1dt\x17\x97O\x19\xf5M~\x1b\x1f\xb0\x04\x15Q\xf3\xf9\xf6\x85k\xday \xfb\xcc^\xabi\x1fr" "\x85\xd8\xc8\x86\x63~+\xa1\x8b\xea\xff\xb9\xdf\xd8\x81G\xc4\xdc\x9c\x0b\xf5\x44\x64]\x9bg\xb3'\x1c\x9e\xfc%KR(\x83\x9aZ\x86\xe2" "\xc1\xbe\xcd\n \x1f\x9e\xde\xe5\x04~\x9b\xf9\?\xba-:r\xa1\xba\x88w\x19\xab\x8fMty[w\x03:\xf2)#xW\x08\xab\xaf" "\xc1\xb8\x1c\xde\xa4\xfe\xd5\xb8t\x00\x07\xe4\x17\xf1\xc7\xedN<\x17-\xda.G\x17\x16'\xca\xb3G\x97#\x8dg\xb0\x1a\xc6\xbe\x18\xf8\xd0" "\xea\x9b\x07:\xe9\x83\x96\x31\x8atIK\x17\xe5OY\xa2\t\x10\xb4\xb2Z\xa6\xb9NZ\xd9\x1c\xde\x62\x99\xb6\x83t\x39\xac\x96\x1c\xfd\x41" "\x96\x9d\x00\xd1\xd0\x8dM\xdb\x1e\"\xe9\xaa\xbdL\xdb\xc2Z\x08\xf3T\xbajMT\xd5}\x8f\xfe\"\x42\x98\x64\xd2U\x0e\xfb\x95\xaf$+" "\xdb\xaa\x8c\xbc\x41\x8e\x36\xd2U\x84\xda\xcfr\xc0(\x1a\x46\x02\xc2\x34\xbf\x15\xf6\xcb$\x66\xad\xd2\x35\xab\xbd\x9b\xde\xbd\xb1\x90'\xa7]\xf2" "x\x61\x44\x32\x34\x35:,\xf6x\x85\x18\x15\x9f\xfe\xc4#\x45\x44^\x02\xfd\xf6\x65\xf0\x9a\xa3\x86\x95V`\x90\xd1 \x0b\xdc@\x46\x0eT" "\x9a\xe4\xe3\x90\xc4\x94\x8cpN\x06\xd8\xb7 \xdd\xe4\xd6\x90\xc2iLK\xa0&\xa3\xfa\xa4[\x61\t\xd7\xe8\xd0\xfc*\xc4@\x19\xf4\xfb\x45" "K\xd6\x0e\xb7WMw\xc2\xf4\xd2Q\xa3\x90\xc2\x94\x03-\xf8\x38\x05\x98\xcf\x86\x16.O\xe1\xf7%\xb5j>\x18\xae\xd9\xab\x14m\x86\x06" "\xa8\xfb\xbb.;z\x17+o\x92<\xd3\xac_\xd0\xa5#\x98\x10\x01\xca\x41\x8d\x86\x8d~\xaaj\x19\x12Q\x92\x85v\x0e\xe1\xef:\x11\x35" "n\xa8\xed~\x34\xb4\xd8\x63\xedL\x63\xb0\xdft\xd7_\xe2\xe5u\x83J\xfd\xec;Vo\xf7\xc3\xac\xcdt\xa4\x07\x9c\xd6H\x0f\x19\xda\x46" "Yv\xf4\xcaS\xae\rR\xed%L\\y\xa3\xbei[rg\x9f\x62:]\xf9\x64\x44\xb2\x0f\x19\x9d\xdf*\x85\xa1.\x62N\x0f\xb9\xb5" "\xaeh\xd2'\xfe\x1c\xd1\x80%\x1as\xf0\x90\xab(\x84p\xf0V\x96\xb9 \x45\x44\xb6SJ\xee\xf6 \xe2>!\xbd\x37N\"\xa5\x87\xdc" "N\x43\x98\x31\xbd\xf2\x18}\xee\x19\x1eH\xb5\x99\xe4\x8e \xcf\xa7\x94\xde\x97\xa3\xc6\x30\x46\x9c\x1e\xd5~\xc8ZN\xff\xc3\x32\xa7\xda\x8b\xb7" "\xf9\xb2\x17\x37\x64t\x30\x61+\xe9\xe8'\x13\x92>\xe7\x1a\x62\x98;\x8dS\x9bN\xa3\xb5\x13\xda\xf9}\xb4\x9a\x8e\xc1(\xcf\x85\xcb\xa2\xc1" "@'iv\xfd\xe3\xa8\xb3\x05)\xbdQ\xd8\x0b\xdfi\x99\x97OX\x13\x0c\x83\x63\x86<\xf1\x38\xbb\xde\x42K\x05\xa1\xfa\x0cK\x65\xd0\xe5" "\xab\x8b\xeeR\x1a\xeb\x66\xc9\x9f\x33h\x93\xb0Q\xc0\xa3\x1e\xcf\x34\xc6\x10\x16\r\x0b\x61\x84\xc3\xa1~g\xbd\xa4\xf6\x8e\x07\x18\xfd\xae/\xd8" "\xedWQ\xc3\"qhN\xad\xfcr&Z\x65\x07\xed\xe9\xfd\xeck\xe1\x45\xca\x12[\xb4\xb1nP\x81\xf9\x1d\xd5v\xa4\xd3\xb7I\xff\xe2" "\x87\x31'TK\x1bs\xc6-\x89='\xd2#\xef\x8aW\xe7\x86\x12\xea\xce\xfd@\xb2\x17.l\x1b\xbb\xc6/\x32; \x61\xf3u\x8e\xef" "\xa0\xf7vk\x65_\xb5(qk\x1d\xf3\x11\xfd>\x41kSG\x8c\xe0 ,\xdd\xcb\x1f\x45l\x33.|\xb6s \\\xbb\x32o|\xf9" "\xdd\xdd\xd1/]\xb5%\xc9.\xce\xc8\x9b\xd8Y&v-\xb8H\x08g\x07\xc7\xe0z\x64\xd9\rZ\xb9\xc6\x00\?\xa6\xb5\x62m\xe5\x38q" "t\x89i\x85n\xe4\x1d\x36$\xeb\xfcQ\xfc\xd8\xa7+o<\x08\xa7}\xa7\xf9\x9d\x8b\x38\x41OW\xe7\x37 \xda\xc7\xf8\xfc\x33\xb7\x93J" "Z\xbeS>{\x91\xee\x17\x42\x19\xcbY\xa9VM\xbf\xf3\xa7\xe9\x7f\xa7]\xa4\x8d{\xf2\xea\xc6h\x9f_\xf3\x95\xd2n\xa0\xb4+\x65x" "\xdft\xdd\x17\xb6\x65\x10r\xc1\xbd\xdb\x44\x63\xe9\xb3)[!\x07\x98\x42\xbb\xbf\x17\xbe>\xebY\x8f\xe8\xde\xa0\x64\x46\xb1*X\xe9\xf2\xba" "\x8d\x12\x95\xea\x83\xfb\x33=\xd3hl\x82&\xe3\x39\x1b\xd2\xd9:\x84\xf4(\xb8\xfd$\xef\x99\x1bh\xd3\x07iy\xd4\xa5\x1a|*\xee\x88" "\x97\x1e\xd1\x92+l\xda\xe7\x1f\xbc@\xf0\xc9\x8cO\x97\x06\xe1\x8e\xef\x32\xbcL\xd2\t_\x44\x38|\x0b\xed\xd4t\x82\x03i\xb5\x12\x31]" "\x32\xf6\x8d#G\xaf\x94pi\xf0\xd7\xd0\x8c\x42v\xaf\x85-\xda\x39\x45|\xbc\x0e\xb3L\x91\xb0\xc6Ri\xad\xae\xd2\x15X]\xfd\xfa\x9d" "\x63\xdcG\xd5\xec\x07\x1c\xf3\x08\x99\xca\xe1\x8c\xef\x96\x31\x0b\x85G\xe3il\xa3\xa0\x91\xbb\xf5\xa8\xcaSp\r\x06(\x85\x8c\xb1\x89\x44k" "\xde\x06\x17\x63.\x9eU\xed\xd5\xd1\xbb\xbb\x66\xd4\x82\xf4\x87u\xaf\?\x82\xd6>*m\x03\x36\x05\x1ft\x88IO\x7f\xd7\xf5\xbf\xf1\x87j" "\x66\xe0P\xff\x64:\x32\x89\xb8\xa9\x07WH\xff\xa9\x99\x41\xa6\xde\xe6\xc7\xab\xef\xbc\x02^\xf8T\xe3\xb2\xd9\x07r\x32\x90&\"\x61y\xe1" ">\x12\x31\x92\xc1\xd1l\xfa\xa7\xad\xcf\x44\xeb\x8c\x41\xe3\xf8w\xea\xee%\xba\xecsM\x8a\x88\x1c:\x08'\xde\xec\x44+zZ\xc6\xce\x03" "r\xfb\xe6\xc8\xb8\xcei\xf3\x17K\x63R\x9a\xf6\x05\x15\xb9i\x9d\x8a}\x1b\xb9\xcc\x7f\xf7]\xeb\xcd\xcf\xe9\xdb+<\xa5\x8c\xb8\xe8\xdc\xc6" "\xe5s:\x15\x82~y\xea\xae\xc4m\x37@\xef\xf1\xda\xca\xadjR\x64m<\xa3Z\x1c\xfe\x9eZ\x66\xc2\xe5u\xa2\xc1\x10(\xcc\xdb\xa7" "\x85$\xdd\xba\x9c\xa8\xeb\xe9\x31m\x81\x03\xfe\xa2n\x62\xd6\xf8J\x96\xde\xfe\xd7\xff\x41\x9a\xc8\x38\xf7\x7f\xcb\x7f\x91\xf9\x41\xf3\xe0\x12\x43\x44" "\x8e\x64\x63ms\xf2\x8b\xe3x\x9d\xfc\xd9\xb1\x38\x1a\x32\x8f\x61\x1a\x13\"\xd7\x81y\xd9<\xe7\xf8qL\xf7\xb4\x99L\xff=M\xd0\xb8S" "\xa3\xc2xt\xfe\xbd\xee\x17-\x8bg\xda\xff\xf8\xd5\xa4\xe7\xc4\xf0\xfbZ\xc6\x8c\xdc\x32$j\xbfY\xe3\x34\xf7\xfa\xb3\x30sI/\x1d\xd1" "\x10\xe1\x03\x84\xe7t\xc2iQ\xbf\x18\xdc\xdb/\xd8\x87\x9e{\x93*\x39\xb5\xcb\xb1X\xce\xbd\xd9\xd6\x91\x8e\xdf\"\xce;\x8e^i(\xf9" "\x42\xf7T\xde\x36\xdc\x31\x1d\x92\xce\xe4\xc0g\x1ct\"m\x93\xd9i\x9d\x8c\xf9\x1b\xc8\xce\x19\x37\x05\xf4\xabo\x11\x9b\x8dy\x9c\x9c\xfb\xbc" "\xffv\xed\x8f\xae\xb9\x16\x06\x07t\x17Q\xa7\xc1\x83:=\xe7\x96#\xc2\xf4\rIk\xc7\x9c\x31u\x41u]\xc3\x0el\xa2\xb5\xf9\xda\xfe" "\xb1j\x98\x16O\xff\xca\x81\xd7\x9e\xa3\xb4\xa4\\\x98Om\xd7g\xec\x03\xd1\xd8\x8e\xcf}++\xfe<\xe9\xe8M\x37\xe1\xf4\xc1i\x0c_" "#\"l\xc2\xe9\x39\xc3\xf2\x08\xe1\xfc)\xa4\xe5I\xe9\xca\x9dn\x62}xp\x62\x98(\x44\xcd\xeb`\xfbu\xf6\xf1\xd9\x0buY\x96\x33" "y\x42Z \xe6j;\x90N\xba\x0b\x1d\x8d\x03\x32x\xa6h\xb7'\xa4O\xa8\x8a\x63\xef\xfe\x96\x1ep\xd4\xb0\xa2\x91\xe2\xd8\xfdl\xec\xbb" "P\xaa\xd0\x38{\x07\x31|)R\x44@W\xe1\xf2\xc5\xc3n\xc7\"\xfe\xdc\x38\x32\x96n\xdaV\xdc\x0b+\xbc\x11y@\xc7\xbf\xf1\?\xb4" "\xbf\xf4\x87\x66\xd3\x38\xd0\xd4\x01\x63\x1e\x7f\xd3\x65\x1c\x15\xdd\xfa\x0bh\xd2k\x0f_.\x82\xca\xd0\x86\x65\x38V}\n\xca\xaf\xf2\x0e\xd5\x32" "\xd3\x9a\xc5\x87[\xc9\xff\xe7\xe1\xd7^\x98\xb9\x8a\x35\x19\xd4t\xc7N\x13\xd1\x65\x01\xd1\xc2\xe3=\x43\xd9\x41\x93\x96)<\xdd\xc9\x0b\x91\xfb" "\x66\xacJ\x39<\x46\x35\xbb\xb4\x61\xba\xed]\x9b\xdeXw\x45\xf9W\xecU\xf3\x93i\xaeJ\xa5\xf6\xf4\xf7\x01;,\x10\xb1p\x84\"\xe2" "\xa0\x42\x8c\xf7\xc3\xa4\x86\t<\x8a\x98\x62\x84\x18>m\xc2\x66\xfc\x63k\x62)\xce\x63\x11s\xcf\x14G\x37\xd4\x32\t\x1f\xeb\x97\x33\x17\xdc" "\xe1\x13\xf4\xef\x0b\\K%\x1a*\xa1\xcc\x85\xd3\x85\x9c\xa7\xca\\\x32\xd0\x9a\xd4S\xb0 \x81\xb4\xc3\x88\x88\x8a\x1bU\x18\xab\x33j\x08h" "\x91\xb9\x64Y\x17v\xaa\x8e\x9c\xde\x11q\xfe\xc3\xd9\x14\x11\xb1\x02\x17t\xa7\x65\x9e\x11\x36\x9b$\xbaR\x99\xab\xdf\xdd\xc2_\x99\x08W\xf2" "\xcc\x95\xa6\xfd\xc5\x05\x45\x04.\x00\x19\xff\x80\xe2\xe6\xe4\x44\x8e%\x45\x44\xceS>\x45\xeb^\x84m\x64\x44;\xae\xcc\xce\x89\x41\xf1\xbf\x07" "\xc2\xef\x95\xbc\x1d\xbeW|\x12\x94\x46\x32\xfa\xa0g\xfc\xbf\x07\xd8\xe7\x96\x63\xa7\xaa\?\xe5m\xd0k\x1e\xf4\xdb\x05:\xb8\x88\xf6xg\x9c" "\x32\xe4\x97\x88\xf5\x32\x89\x42\x9e\xb9\xd2\x9a\x63\xc8\xfb\x0fr\x93\xa0\xf0N\xb1\xb2t\x0c\x96\xcf\xdcY\t\x1aW\x65\x8a\xb8o\x81!V_" "\x64\xa4\x18\x66\xbc\xec\x85w\xa3\x0b\xf0\x83\xd2\x33G\xa9\x99k.\x9e\x00\x39\xc3+\"\xda\x17\xd0_|\xd9\xfb\xb8\x66n\x8c\xfd\x35\x33\xd7" "\x9c\x1a\x12n\x9f-\x97\\\x87\x85\xbe\xa3\xbd\xe4\x1b\xdd\x41\x31\x8bg\xbc\xf1r\x15\x12\xed\x30\xc8\xbc+\"\x36\xa9\x10\xf6:\x8eQ\xef\x44" "w'\xd1&\x03\xaf\xd5\x95\x96\x93\xda<\xed\x18\xf5\xec\x10vj\xc8\xdc\xd0\xe1\x43\x08\x37\x95\xcc\r\x03\xbb\x83\xda\xcc\x8fG\\\x61\"\x07" "&\x63G{\xbe\x1b\xdd\x1d\x97Ov\x13\xdeg\xc9\x94\x8c\x7f\x93\x8c\x9b,Z\xe6\xf5\xec.\x38\x37\x99I\x86\xb9\x98\xec\x62;\x91\x43r" "j\xf9Tt\x83L\x92\xe1\xda\xb1L\x8e\x83\xbcL\xce\xefj\x1d\x9a\xc9\x87\x0f\xf8\xed\x43X\xd0\x16\x35S\x91\?Go\xfc\xc0\xd0\xf0\xa6" "\rL\xab\xda\x15\xaa\xf6\xdb\x96\xbd\x85\x16\xf7u\xcf\xb4\xec\x16_h(\x05\x83\x64\x93[=\x65\xcc\x16 \xe4\xdb~\tvk\x90\x86\xd2" "\xcc\xeb\xef\xfaN{g\xe9\xe4/\x82\x89\xc9\xc3\xdf\xde\xb3\xf1\x15\x11\x8e\x98\xa0\x95\xe0W\xff\xb3\xafK\xb1\xd0\xd1\xcb\xbc\x86|\xc5\x1f\xde" "\xf2\xd1\xd1\xd2Y\x45i\xb2\x35\xf4\xc5\x7f\x1dx)k\xf0\x0ft\xaf\x32\x1fj&\x1a,\xb9\x35\x9f\x8c\xcd\xd4\x34\xd2\xa5\xc5Z>\x43\x88" "\xdb\xcc\x07\x8d\x34\xa0\x1a\x31^\xfaN\xf3\x06s\?\xf7\xee\xb4\xd8\xd7\x9d\x9a\x9a\xbc\xce\x35.\x39\xa5\xb6\xdc\xb8\xb3p\x34\x08\xba\xcb\xe0>" "l@\x99\xf9\xa4Q\x42\x88\x36'\x63\xde\"\x99\x31\xe7+\x32S\x8e\xd6\x32s]\xbd\x84\xae\x16\x44\xef\xf5\xc6\x89\xb4i;Q\xd7\x7f!" "\xbd\xd9K\x92\xc3\x05\xbc\x90\xaf\x30\x85\x9aj\x19\xa6P\xeb-\x39-\x06\xd2\x37'\xf3M\xf7\xd9\xccwT\xbf\xe7\x82\xa7\xcc\xcf\xefvL" "\x32\x39\x7f~\x0fuu\x87\xc4\xd2 j\xc3\xf1\xbfZ\x34\x44\xa2\xfc\x30\x64\xaa\x10\x9e\xa9\xc2\xbb'\x12\xae\xea\xca:\x99m\xd0\x80\xaf\xe2" "\xc0\xb2\xd3\x8f\x97\xaf\xbbK\xd2\x1b\x19\xf4[\x1f\x7f_\xf8\t\x10\x95\x00\xa2\x95\x19\x88pR\x11\x11\x86\x1c!\x1cO\x85M>\tg\xb0" "\x84\xf0\x0f\x15\xf6\x7f\x1c=\x04\x01\x14\x11^\xfeJ\xd3\xe7v\xf6\xd5\x91\x84\xbf\xa5p{m\x44>\xfa\xb1z\xe3\x87\xd3\x8c\xc2:O\xcd" "\xd9\x14\x61\xc7\x88u\x03\x42\x36\xa7\?R\x96\xac\x1e\xfd\xa1\x45\x42\x38\x1f\x38\xba\x1b\xe4\x10!\xf3\x13\xc0\xc7^\x99\x32\xba\xe3\x9b\xd8\x45Q" "\xb4&\xef!@\xf8\x08!\xbc\xf2\x94]#\x9f\x89\x31\x82\x95|\x36\xda\xf8\x85\xf0\xf1\x12.\xec\x38\xe2G\t\xf7kG\xcb\xa9\xf1{\xe0" "L\xb8\x92)\xec^\x8a\xfa=\r\xf9\x32\xc2\xea\xab\xfbU\xf8\xcc\xf7\x14\x0e\n\xf1\x0f\x61\x18\x00\xdd\xcb\xe7\xc2\x80\x8c\xaeO\x03\x39\xb8\x17" "\x16y\xee\xa8|OV\x98\xcb\x18\xacQ\xd8\xe0\x63qvQ\xd8\xe7\x63K\x06uT{l\xa2\xed\x34\xad'`\x19S\xcd~;\xbau" "t\xb9\xce\n\xcdO\xf4\xf6\xa9\xbb\xd1Y>\x10\xcd\xcb\x0f\xec\xd6\xd6V\x33\xae\xe5O\xb9\x91\x8f\xfc\x9fo\x06\x34\x17\xedT\x8d\x36\xb8\xce" "\xc6\xefJ/\xbd\xe0\x61\?\x02\xd1\xf8\x33\x65\x34\x9cpV_\xb4\xaf\xbe|\xc7\xc7j\xa9\xcc\x86\xf6!!\xab\xe8\x8dZl\n\x1f\x34\x06" "\x88\x06s'(g\xb0\x36q\x13V\x91\x11\x36\xf4\xd7\xc9l\xc3\x32\xae\xb7g\t\xcfZ\xb8\x65\xe1\x41\x33q\xf6\xca\xdf\xe8\x0b\xcf\xdez" "\x83\x37\xbf_\x63\xad$\x1a\x8a\x80\x10\xf3\xdd +\xde\xec-\xa7\xae\x84\xfd\x9a\xe3\xef\xbaI;\x30\x34m\x85\x13\xe5X\x83\xe7\x1c\xc4\xf0" "p\x38\xfb *\xb5\xa2\xb7=\xb5\x61\x83\x83 'rG\r\xd1\x46M\x7f\xd7\xe3\x9a\x35\xd1\xe6\xbc\x46\x88p\xad\xc2\xc3\x02\x8c\x8aU\x19" "n\x86\xcf\xd7\xe7Z\xbf\xee\x34\x11i\x05\x12\r+\xfa\xb2wl\xb2\xb3I\xfa\xf0\x0b\xb1\xdc\x41\x39r\xa4+\x8d\x88\x46\xef\xe2*\xea\xe7" "\xb8\x11\xb4\xd3\x38\x88\x14\xed\xb6N\"$\xb9\xf0\xbei\xfc\x31n\x99\xa3\xb2I\xc6+\x13\xa2Z\x14\x62\x1a\x12\xf4V\xaf\x61kH-\?" "\x0b\xf2\x63{UI\xd6\x88\x42\xf4K\x84|IJ\xfa.\xaa\xb8%\xdb\xef\x8e~\xf2#\xaa\x0f|\xf7\x41\xc7n\xa9\xf3\xe1\x18\x9f\x1eq" "\xa5\x94\xb7\xe4\xe0\x85\xc5H\xc5\xa5\xa3\x46\xd2s\?@\x84\x65P\?pO\x36\xbd#\xd1\xd1R\xda\x9c\x86\x8aSG\xce\xd4\xaa\x38'\xd7" "\x35\xe3\xd8xp\x0c\xd0\xd7\x16q[p\x8c\xfbUYs)\x00\xdd\x1d\xb0>\x16\xa6\x99\xa6\xec-\x0b\xd1\xee\x0b\xeb\xcb\xb0\x99\xa4\xd8z" "u\xd4\x80\x0b\xb5\xa1\xd3\x18\xc5\x82\"\x02\x9dRl\xdc\x32n\"\xb4h\xdd\xf5n\x0e\xa6}:\xc6\xb3\xc6\xa2u\x98\xbd\x18\x82\x12\x8c\xef" "\x11&jP\xf2\x39}\x92\x44\x83;\x87\xb0o\xb7\x87\x9e\xa8\xf0k\xc8\xf8\x38*\xda\x15\x97{\xf2;m\\\x91\xeb\x37\xda+\x44\xdc\xf5" "\xbc\xe6\xc6k\xa1<$\xdd\x13\xd1\xb3I\x88\x15\xa8\xc2\xfbO\xf7\x42\xe9\xe9,L\x9b\x9e\xbbs\x44\xd4\xe9\xb4\xd3\xbc\xd9\xed\x99\xe6\x97\x7f" "\\\xaa\x88\x86\x80\x88\xf6Y>\x15<\xf0\t\xe8\xc4\xac\\;\xc6WmL\xc8\xeeW\xd8\xe0\xcb\xe4\x1ep\x42\x96\xff$\xa7\xc5\x95L\xa7" "\xe0\x95\xa9\xc8\x05\xe1\xc2\xcf'r\xccL\xc1\x81\xaf\x92\x89\xc5\x35\xabJ\xbb\xfa\xee\xcbxr\x64\x63\x94M\x86\t\x66\x96Xg%\x93\x8c" "\xbd\xe0\x44t\xfdv\x11\xb3\x31\x7f\xb7q\x9ah\xda\xff\xa5\x89iV\x00\xb9\xa9\x91\xb2h\x64\x99\x08s%Gz#\xaa\xc8\xbb\x0f\xf3\x37" "\x8ejUxpG\xf9r\\\xe1\n[;\x97\xab\xe5\x15\x44\xad\x85\x37\x39\x99\xd6\xd7\xcc\xdag\x61\x90Z\x90\x1e\x98\"\x0e\xec\xd1\xe6\xb7" "\x8e\x61\x99\t'\xed/\xdd\x8c\xb3IZ+\xc0\xa0\xc9{\x8f\xee\xec\xa3\x12\x9fI\x46\xfa\x61n\x1b\xf5yZ\xe9\x8ah\xbc\xec%\xcf\x14" "\xb5{g\x35$\xa3\xda\n\xednt\x63\x18\xb7\nW\xb4!\xf3t\xf4\xc6\xea\x86m\x97\x10\x8e\xa5J\xe6\x14\xfa\xb2\x65\xf3t\xf3\xc8\xe6" "\xe9\xe6\x91\x95j\xe1H\x62\x37\xb7l\xc1\xaa-%\xd7\xc0\x88\x88\xa1n\xb6\xe0\x0f\xf0\x08\x05:\x14\x0b\x31\x9b)\\\xa2T\x14\xa2w\xe4" "\xd7\xe2/\xeb\xa5\xe2\xef\x66N\"\x9ej\xb6\xe8]\xedH\xf8,\nY\x7f\x17\xb9!\xb7\xb0\\p\xd4\xb9[\xf4\xa2\xa8\x31\x8f\xa8\xa8\x16" "\xa9\xd7\x83\xd3t['\xa6R\xd1k\xd9\xc9X\xc1\x17\xe9\x92\x97\x35\xf7\x87l\x91\x13\x87\x42V\x9eJy%\xde\x62L\r&X!\x8c" "\xad\xc2\xad\x9d\rQ\xdf\xb3\x45\?\xf1~vK\xb4\xdb\x0b\x31\xaf\r\xaa\xc9\xed\xaak\xda\xdc\xf8\xe3\xe8\x37\x96>\x16\x61\x89\xd6\xe6\xc3r" "\xfb\x0b!\x8c\xf1\x42l\xa1\t\xea\x34Y\x82I\xe5\xef\xde\xc8\xfd\x93#\r\x8e\xd9\x62pq$\xaf\xba\x61\xb9\x64\x85\xaa\x18<\xf2\x16\x83" "\x1a\x7f\x10\xa6Z\xa4}\x1eN;\x8eg\x0f\x04\xcd\xec\x89\xd0\xce\x92Y\xb5%/\x15\xce>\x1d\xcf\xbf\x30\xfb\xd4 :\x98\xf9\xc8\x16\xa3" "\x0b\xa6wt\x95r\xf4\xab+\xcb\xfd\x45\x63\x99\xc3Y\xd0\xfa\x46\x65.\xca\x01i\xbd\x13\xf1\xeb\x99\xfc\x1e\x91\xeco)\xedW\rk." "\x1a\\)\x0br\x13\xe7\xf0\xaa\xe3\x7f\xdfr\xff\x0f\x39\\\xc2\x9d\x37\xd9\xcf\xce\xb6\xfc\x34\xb2jK:\x35^k\x1c\xbc\x8f\xa8\xb5\x16\x61" "\xa9\x1d\x30\xbb\x9b\x16\x62\xf3\x93l'\x62u\xa8\xb4\xca\xb7\x1b\xc2\xc8\x9e}\xb2\x1eQ\xef\x17\x63\x1b\xd0K\x1c\xe9\xa5\x93\xedy\xa3;r" "j\xc4\xcc\xb5\x10v\x89l\x8fV*\x61{\xa8G\xb1lP\xb4N!\x18\xed\xb8\x17\xb7h\xfd\x44\x94\x38\x46\xd5\x05\x35\x18R\x41\xaf\xd9" "\xe1\x36\xba\xa2\xfd\x0c\xc8=\x12\xa9\xc7!\x34\xa8\x1dv\xf8\xd8\x88\xf6\x92\xf6\xb2\xb8\xed\x1e\x37\x94\x13\xdew\x8d\x1b\x12q\xd4\x84l\x1d\xfb" "V\x33\xf4\xb9~\x12\x8c\x9e/M\\\x93\x98\xde\x12\x62\"\n\xf4\xa6\x19\xee\xf9#\xda\xeb\x05\x39\xa9j|%\x18\x84\x44[\xdb\x39\x36v" "\x0el\x65\x0c\xd2\x05\x02\xa2_\xb9\xa1\x11<\xdb\xe7V\xd5\xa0\x65\x84>=\xf3\x84\x08\x8f'\x44\x38\x1f\xe1\xf4\xe6w\xc7\x8b\xaa=\r\x06" "\x93l\x9f\xabO\x41\x7f\xd4\x62@I\xd1\xe0\xe4\x08\xaa#*\xac\x90\xa2\xc1\xe2#<\xf2\x89\x42\x04\x46\x10\xden\xc9\x1c\x13'|O:" "J\"\xd0Z\x43\xcd\x8d\xd5\xcf\x34\x9d\xca\x42\xe8X\x1e\xb3\x84P\xf1\x9f\x0f\x38\x91O\xb1R\xf7s\xf7\xb1\x86\x30\xdd\x10\x83\x97\x19W\xff" "Q\xc3\xbe\x9f\"\x62\xf7\x34\xf0w\x9d\xa3\x8b\x30\x34n\xc1\x9a\x1dp`\x9c\x1d\x04\x9f\x0f\x1c\x41\x8a\xb8\x18\x92\x18(\x65\x07\xe1\ru\xcb" "\xd5\x03\x0e\x99\xb2\x43\xab+\x86\x8c\x83\x05Z\xc2\x8e\xe4O\xf9\x62\x39\x44\xe9=w\x82\xfa\x81\x8e\x90<\x30\x8e\xbf\xe3\xcd\xf3N\xb4\xcc\x0f" "\x11\x0b\xde r\xe5\x19\x45\xc4k\xa3\xb8\xb0\xb3\xbb\x9foPN_\xfc\xab\x07G\x1a\xdb\xb3/\\\xc2\x06ZS\xff\xc2y\x9f\xec\x8b\xfc" ")_\x39\xb1\x00\x06\x98\x0c\xcb\xbe\x31\x64\xac\x90u\xe5\x87\xb5S\xda\xd9\xf7\x66\x17\x1e\\\xba\x44\xdb\xa2\x1c\x7fX\?\xf3#\x38\xe1\xc4\x1f" "\x61\x19\xe5\xfa\x83\x63\xdb\xec\xd8\xce\x32\x65<\x9b\xec\x94\x46\x1e\xa5\xe9\xac\xb1\xa6\x1a\xcb\xb7z\xc3\xd8\x01\xa2\x31\xc5\x94\x96} \"\xb6\x16" "\x44\?\x9d\xb1\x9e\x9d\x99\xbc\x85\x1c\x0fM\x19\x83\x44\x98\xb3s\xe4y\x07\x9c.\x10\xc2\xcc\x93\xb5\x80^\x42\x98{\x84\x08\x06#\xc4\xc6g" "\xd9\xa9\xbd\xaa)}n\x84\x88\x98\x9b\x9d\xc6w\xb1\xbe\xff=\x34\x9d\xa8\xe1\xda\xe0\x62\x03\xcdr\xc9\xd4\xdb\x96\x8cUG\xe9\xeb\xd0u^" "\xb4\xbdy\x85\x66-\xec\x17h\xf5\xda\xd4\xc6\"S\?\xbb\x8b\xbfU\xe1\xa5mX\x62\x61I\x41\x1b\x1dX,R\xe1\xf3\x8c\xec'\x8cL" "\x05\x9a\x8b\xc0\xf8'\xb3%\x17\"\x8a\xf8m\x9f\xfe,H\xcc\x0f\x65mI{\xd6\x02\x95\x82.y(Z\x35\xaf\x9a\xba\x88\x36&\xdc\xe6" "G\x0e\x14n\x1d\xe3_\xd8\xc5\xac\x63\xaf\x8c\x43\xb4\x89\xf6Xu\xe4$\xa8\x8a|\xcc\xa0\xc1\x37\x1a\x34\x1f\xdc\xcb\xe0\x8a\x45!\xf3\xb5\xf2" "w\x93\xb6.\xd9\xd4\x65\x91\xe0s\xff\xbb\x1e\xc7\x37\?\xb6\xdf\xb0\xcb\?\r&s\x92%kJ\xeb\x14\xe8\x12>\xbc\x9a\xc5\xe2m\xde\xc8" "+\xd2\xb3V\x98\xe1S\xb9\x0co=\x32\x61\xcf\x38tT/\xb8\x91\x06\x80\x89\x8f-\xf9\x80\xb4\xc0\x08\xefx\r\xeb%O\xa3\xf2\x98\x44" "\xa8q\xe1\x10M\xca\x8a\xeb~\x41\xabsU\xd4\xc9p]\x02\xf3\xe8\x0e\xd8;W\x31\xc8\xbc\xc7\xa2\x9b\xec\xa5\x06/\x83xk\x00\x1e\xa3" "\xb5\x00\x62\xf7\x8b\xf3`\xd0h\x11\xa6\x88\x85`\x14\x39\x18XY\x41T\xd2\xb4*\"\xed\x0f+\xae\xfa\x01\xad\xeb\xb2\xf2\x66\xe5\xb0X\xa7" "\x38\xefx\x13\xdd\xd1\xd4\xbb\xafrrK\x8e\xad\x96\x9c\xf3\xce\xae\xfc\xce\xbb\x37\xe9\x30.\xbch\x1c\xcd*\x19\xaf\x33\xbb\xe2\xfc\xa5\x90\xdd" "\x9b\x15\xfd\x8d\x84\xb9\xe4\x7f\xaev\xe1\xb2\x1d\x35\x04\x31,]r\xe0;\xed\xa8;S\xc2\xff\x36\xf7\xc1VK\xd8\x95\xca:\xf7\xbb\xfdt\x9a:u\xe7\xde\xcf\xb4" "pV\xa2\x36\xe9\x39\xfe\xee\x1e\xd5\xfb\xbc\x34\xfa]\xa7\",x\x96\xc3\x87\n\xf2\xd2\xd4\xb4\xaa\xa4;\x44\x86\x33\xcb}\xd0\xf9^\xd8[" "\xc1\x9c\xc8/\xb2!\x13N\xde\x8c\x0b\x12\xa1\x8c\x85\xc7W\x7f\x38\x61\xed*\xda\xe9\xce\x91\x8e\xd1\x10\xcf\xcaY\x94\xb8u\x94\xb2\xc3\xbdV" "\x9d\xc6@\xd0\x39\xeb\xb8\t/\xf9\x98Q+\xeb/\x9b\xea\xa8\x35\xbc\xfb\xaf\x03\x88L\xdd\tv\x63\xab*\xf4\xc3X\x84\xef\x38\xe8\x1e\x87" "+\x8c\x41\xba\xd4\x8b\xf8Qs\x0c\xdeQtg\xd1\rJ\xe1<^\x92%\xe2\xa1\xc9~`n\xee\xdd\xdf\x91\x18\x9f\t\x9bO\x9c\x9d\x15" "\x11\x93\xf8\x42\xd8\xfe@.\x43\x86\xc8\xc6\x35g\xfe\x65\xb9\xbf`)\"\xae\xec\x87\xeb+-\x0f\xd8\\ \xa7^\x63\x9c\x87\x43\x36\x8e\x97" "\xe7\x41\xf3\x17\xf0\x9c\x80\xbd\x04\x07,\xf3\x99\x18]\xf1\xe6\xfc\xea\xd6\xcb]\xbb\xa7\xf0k\x97\xea\x98\x85\xe9\x0c\xd1\xa6\xe5\xa8l_;/" "xsw\xaa`\xf9l\xf5\xc2\x9c\xf6\x0b\x61\xe6\xdb=l\x98\xe7I\xe9\xa2\x91\xc3\xcar\xb8_\x8aX\xe3W\x18\x8b\x12<\xbb\xfb\xe8P" "\x90j\xf1w\x9d\xe4j\xa9\xdc\x82n\x11\x39\x0b\xf1-\xc4\xacVn\xc1\xf8\x19\xc2\xcd\xa3\xa3%\xd8\x82-,\xe8\x8f\x87\xf2\xc7\xc9\x1b\x1c" "\x08\x0b\x07\x8al*\x16\xb4}\x82\xec\x19\xa8\xf8\xe9H\x43\x1b\x45\x17\xfe\x46\xb4*\xea\x81\x05W\xd2\x83\xee\xd2\x11:%\xb9\xaf\x80\x45\xe2" "\x8b\x8e\x0b m\xb6\xb9%\x43\x63\xe5\x96tW\xce\xad\xbc\xbb[\x12\xab\x00\x94o\x8e\xd6t\xab\x18=\xdf\x31\x62\xbcj\x33\x32\xffH\xd6" "\x92\xe4\xf0\xd1\x91\xfd-\x8a.\x86\x30\xb4\xf8\x8c\xc3\x03\x17+\x89\x88\x38\x38 \xfb\xf9N\xf4n\xb2\xc1\xe3\x87;\x10\xffR\x44\x17\x91\x30" "\xb7\xf2/ym\xee\x30(\xac\xf0!\xfc\xc6\xf2\xec\xfe\xb9\xeb\x38\xe8\x65\xde\x19I\x1cZ\xfc\x85.\x7fN\xd7\xea\xdc\x8a\xa1,@\xf7\x15" "n\xbb\xaa\\\x92\xd8\xfb]h\x8f\xc1m\xd3\x85\xdfO\x46\x64\xa8\x15#\x1d\n\xefx\x0f\xd1\x33\x13#\x82\xf3\x13\xc8\x39\x9b\xdc\x46\xfe\x94" "\xdb\xdf\xd3(\xb8\xab\xfc\xc2m;\xb7\xf5*{\xd1\xd8\x93\xccm\xb9\x93\x08\xa8G\xd9mQ\xcdN\xb2\xa5\x89>\xb7\x65\x1c\x81\xdc>\x38" "n\xa2\xc5}x\x8d\xa6so\xd9n/\x87\xa4V\xe3|m\xee@#k\xee\xe0\x17;$\\\x01s\x07\xae\xaa\x16\x66M\x87\xe1" "\xc3\xc8\"\x42,\xad\xca\xdb\xb0Y\x88T\x04\xe3y\xa7|\x86\xd6\x30\xe1\xd5\x0f\xe3n\x89\x88\x01\x8e\x10\xe5:\x9f\x89}=\xf2y\x8e\?" "\xf2y\xf6\xc5\xf3\x8f\x61\x11\xd7\xac\xf1\x1d\xe4-T\x62\xbe\x65\x8f\xd7\x92\x61\x1e\xc8\x41\xbf\x10\xbb\x07\x08\x31\x64\x07\x39\x37\x0c\x91q)\x44" "\x84\x1f\x86\x10+%\x95\x33\xe3\x96|\xb6y\x45\x11\xffH\x1b\x8f\x88\x30\xb0\x81\xf1\x0f\x30\x19 \xc4\xf4\xa0\xf0\xc4\x13\xfb\x0f)\x12\x41X" "\x85|q-\xce\xb8\t\xe1\x11!\x84\xab\x85\xd0.\x11$\x9b\x64\x89\x8f\xc5N\xbe\xb0\x32\"\x11^GY$\x9f.X\xd1\x89\x88\x18v" "\x42\xbe\x95V\xf0\xfeH\xda\x83\x30\xa0\r\xe8\x9e\xcd^\x9c\xc5,\x14\x1ey\xd7\xe1\xe5\x92\xc4\xf4\x93[x\xa1\xe4\xf7\xb8o\xae\x30\xc3\xbb" "v/',\x7f\x92\x8fv\xbc\xc1\xa7\x08\x9bur\x66\xe7\x99\xf3)\xc2%\xb2J+*\xdf\x90m>\x15\x9d\x1f\x84(\x96\xf9v\xf8\x80" "\xf3t\xe5\xe5\xdb\xad\x9b\x89X\x88:\x1b\x64\x44\x98|/\xc4\xc2\xd3\xfc\x30,\xe1u\xbd\xf9\xf9\x82#\x9d_ j\x1f\n\xa1\xc5\xa1I" "W\xc5^\xe9[\x08\xe7}\xf0\xf7\x90\xe3\"\rh\xba\x65\x0cL\xc3\xf9\x19\x17\x84\xe6\xe7\xdc\x31\t\xe4^X\xf9y\x1c\x62\x45\x44\xb8&" "\xe7\xe7Q\xe9\"\xe8\x9e(\x96\x33\xb1X\xf9;j\?`\x7f\x07\xb4\xb2\xba\x90\x11\x1c\x1bq\x11\xe1G&<\xf4\x41,\x43\x18Q\x64\x89" "V\xc6!\xa2\xa1\xa9\xb3\\\xaeH\xed\xe5\x93\x44\x9f\xfeL\x64S\x04\xcd\xafO\xe2\x1f\xcf\xca\xee\xc2\xe8\xc8\xfc\x9d\xf5\x98\xf6&\xc7\x33\xd1" "\xaa,\xd3h\x08\x88\x35\xd7Yp\x07X\x35\xab\xb6\x62_&\xbf\xf0\x93Yo\xdas_\xd3\x9d\x80\xed\x03u\xc9\x93\xee\xb8s'\x93\x03" "X\x8e!\xc4\x12^\x61\xaf\xef_\x98{M~\x11\xdd\x64\xc8~\xd7\xcb>x\x93\x0f\xa7\xe9z!x\x04\xe6\xd7\\\xb2\x95_\x07X\x0e" "$\x84'\x12\xc8)\xc6\xfc\x9a\x31\x89\xf2\x9b\xe8\x16/\xe3\xe0\xcf\x96Z\xfb\x7f\xc6\x9a\x9f\"*\xaa\xb5\xea\xef\x9e~h~\x16\x31\xdb\x30\xf6~w\t\xb5\xb0\xb0\xf0\xbcj \xa2N\x35~\x1a\xd1\xce.Z\xbaWs\xd2\xff" "\xd4\xa4&\xf2\xdbW\xf1\x8d\xb8\xc3g\x07\xc2\xe9\xf6\xecW\xd4\xfe\xc7\xafj\xf6\xf8\xf5\x1f\xdd\x33\xe5\xf5\x8a\x11\x1c\xe4\x00\xdaz\x90\x1e\x85" "N\xb4\xb7\x0e\xcd%\x91\x88\xeb+\xafP\t/\xa7\xee\x00{,\xdc\x9e\x83\x07\xbe\x8b\xda\\\xdf\xd7\xe2\x03\xeb\x37\xfaj\x42S\x07\xff\x41" "\xe3_-\x8e\xa7\x13\x1f~y\xa0\x89\xcai\xdc\x83\x0e\x9a.\x19pW\xc3\xd6/\x92\x1a\xd4\\\x8f\xc6\x89\x1c.\x14^u\xfd\x01V\xa4" "\x41\xf4\xef\xef\xd9\xc3\xa4\xd6\xdc\xd3\xfa\x44M\xb2\x83tq\xed\x46\xe4@p\x35\xa6w\xd9\x99\x16\xc7#\x96\x63\x0fo\x8e\xb4\xf4;\x31^" "\x03\x89\x03\x61\xe2\xe7L\x0cR\x9fN\x8b\xb6L\x17\x97q\x35%\xb3=.\x1c\xa4\xf6\x98\xf0\x0e;I\x41w\xc0\x1a\xe6W]\xba\x98." "\xd2\x93U\xb4\xde\x43l\xbe\x16m\xd7\xf3+(\xde\xaf\xd6'yU\x1f\xbc\xbf/H\xaa\xd3\xf4$\xe2_\xdaJ\x9f\x9a=\xc9\xc2\xab\x35" "\xcd\xaf\xec\xef\t\x8bLI\xcd:\x30\xc8\x39Q'\x33\x8eS\xdd\x18\x05\x31\x11p\xd8]\x33<\x8d\x8c\xef\xae\x80\xd0\xf1\x01\xa4YM\xc4" "v\xe7\xec\xce\xd4\x99Z#K\xf1\xddG;u\x1f\x8emp\x85\x39\x9dS\x0b\x08\x9f\x39\x38q\x30Q\xb0\xd0\x97\x85=g\x36\x85\x30\xd4" "\x17\x0e\x0ct-\x64O\xed@\x43*(\x1fY\x85 Z\xc5Q\x8eZ\xb7\xe0\xc0\xe1\xadp\x9fu\xa4m\xa5`\x61\xf5\x84\xd8\xc8\xaap" "\xe0\xf8O\xc8V^)\xfd+\xba\x30\x8b\x06\xfb\x13\xa8\x33^\x08\x15!Z\xde>\x65wM\xf9\xbb)[\xcfH\x35\xce\x9aS\x9c\xff\x89" "\x87\"\x07\xb0\xd0h\x80\xa2\x88\xa0w\x14\x9f\xe2S\xc7\xc6\x00h\x41w\xc8h\xff\xa2\x15r\x8e\xf1\xd4\x15\x34I:\xc6\xd9\x80&m\?" "\x43G\x8a\xc6\x86\xe7\xe0\xb9[l\xcd\x1c\xe9\xdb@\xf1\xbd\x1a\x8b\x63\xbb#L\x62\x0b\xbbi\?\x61\xbf\xedn\xadu\x39x\xcfvhl" "\xdf\x9at\x1c%\xc1,;\x9a\xc6P\x99\xd0\x34\xf6\x10\xf6\xbe\x14mj\xbf\x98\xd5H\x04\xc3\x10\xb2[x\xe0.\x32JK\xac\xbd\xa5\xdf" "\xd1n\xf5\xc4\x17L_\x1c%\xaf\x62\xcd\x8a\xf0\x93L\x97\x1cu^\x0b\xb1\x94\x44\xab\xf2\x9d\xfbu\xde\r}\xe2@o\x9e\xb6\x86R\x86" "\x0c\x15\x63\xcb\xc8\xb7N\x8f`\xa5\xfdj\x64\x9f\x63\xf3\n\xe1'\xd3\xd0\x46\x14\xca ]\x8d\x45\x36G\x07\x7f>\xa0k\xa4\x88_)\xe3" ";\x89I&!\xfb\xc3\x87\xe0\xb2\x62\x64\"X\x37\xf5`]\xa3\x83\xcb\xfd\x9c\x38\x16\xc2W\x05\xf4&=\xff&g\x1a\x93$\xd8\xf2%" "\xba\xac\xce\xe8\x13\xc2\xeb\x86\xa3\xbbPx\x33\tY\x86Mt/<\xbc\x65\x32\xd3\xd2!\xe4\x10\x42\xa9qw\xae\xf3\xba;\x9a\x0c\xf9\xaa" "O\x0c\x0e\xc2Op\xcci\xee\xe6\xad\x1a\x38\xd0\xa7\x16\x0c\x13\x99(q\x45-\xf7\x41\x16\x0e\x8e\x32\x36\xa6\xd7\x05\xb5i\x8f\xb3(N\x63" "\x88'\xa7\xd9\x88S\x35\xdd\xfb\xd3}\xf6\xc0\xa4\x08\xabv\xed\x19sO\xb8\x64\xbe\x08WL\x1a\xdaU\x85\x65^\x81!,\x84\xcd\x0b\x7f" "\x61\x1e\xae\xaa\xbd\x1ay\x96\xa8\xc5\xbc\x1d\xd9k\xb1\xce\x85\x92{M\x88\x38\xbev\x8c\xb3\xe5\xc3\x83\x1a)\x36\xe9\xe8N\xb3\xd7\x43\x95\xeb" "\x18\xc0\xe0#\xcd\xf9&\xd1\xb0\x1f\x1eH/,\x88\xc1\x38\xc9\x18\x0c\xd0X\xe5=Ti\xde\x10\x62N\x13\xd4\xe1Q\x9f_\x64!\x16\xa2" "\xf0\n\x31\xf3'<\xd5\x41\?\x31$\xb1I,\xa8\x1eo\x35;\xfa\xc8\xbb\xe4,\x12\xa8\x9f\xc2=\x46\xb4\xbe\xfd\x06-\xfb\x43\x95\xfdz" "\xa1};x\x99\x39\xa2Z\x7f\xa4\xf6i\xdf^\xbc\xebt\xd3\x80O\xec\x9e\x46\x18/w\x15\r\x39\x0f\xe4(I\x44\xe4\x11!\x8c\x16\xc2" "\x19\x93*\xfc\xe6\xc5\xb8/\x10x\x96^\xf4@\x10\xd6oI\xec\x11\xf9\xd0\xfc\xdd\xd5i\xae\x12\x11\x1b\xf5>\x34\xd5\x0b\x63)\x43\x81\x05" "\x1b\x46\x39\x80\xc5\x65\x42\x34\xe8\x0fM\xd6\xf2\x42iH\x30\xff/\xe2r\xe1\xb5\xdb\x10\x83\x87\x0e\xb6|\xe3\xf9\xe9\xeb\"t.H\x0fM" "u\x91\xfb^\xd1\xfbU\xb4\xdc<\xde\x18M\xb4\xaa\x66\xc1\x87^\xf0\xf5\xe8\xc8\xd8\"\x0f\xbd\xb0p\xed\xc8!\x03\x44\xdal)\x62\xc5\xa9" "\x13\xd9\xf0Q\x43\xad\n\xd1\xef\x36\x62\x11M\x91\x89\xebX\xc4\xf2u\x88\\\x8d@\x31Ygu\xef\x34\xcb\x17\xa6\xd1l\x45\xadp\x45'" "\xd8\x33-\xbc|\x8a\xb7\x46\xe2\x61{:\x8ag\x0f\xc8\x85\xad\x10\xc3\xab\\,Z\xa2\x88\xc8\xb9\xc5\x87>]\xb4\x41\x8e !rH%" "\xe2n\x11\xde\xf3\x8b^\xb6\x44\x0e\x93\xe4n\xcb\xf9\x05\x11O\x37\x0c\x17\xf1\xd0W\xe7\xc2q\x8b\"j\xeb\x87\x8f\x30\x35r\xa4U\x1d\"" "\xfb\x8d\x14WK'r\x1a\x02\"\x63\x13\x8aX.\xd9m\x7fZ\xca}\xd2\x42\t\xd2\x37\xe4\xc1V\x96\n\xbbi\x12\x86\xf2\x87ON\xcd" "<|\x06\xb9\xa4|\xc4\xa5m\xa2\x61\x41\xe0\xc3\xa7\x15\x95Oz\x33\t\x99\xc7\x95RYq\xcb\xf6\x87\xcf\x08qm\x1f\xc6!\x42g\x83" "\x98\x8b\x46&\xb1\xed\x32\x1e,n\x88\x10\x36\xb5\x07\x8bX\x0fZ\x0e\x9a\xd3\xac#\x44\xf8\xdc\x07\x0b\xa8.\xcc\xe4\xc9\x07\xd3\x8b-\xc7\xf3" "u\xe4\x0fs\xc6\xbf}\xd0x\xd7\x32\x12\xf7\xb1\xb0\xeb\xc1\x42P\?|\x85\x15$\xd3\x37\x37\x8b\x11\xfe\xe0\xd9\xbf-Q\xbf\xedrJ+" "\x41\xdf\xb4\x84\?\xfc\x84i\xad\x87\x8a\x97^s\x0b\xea\x08\xe1&\x1d\xd6\xf3\x32\x96\xd6\x03\x32\x14\xb0>\x63\x31-\xf5\x61\x84h\xe0\"\xc2" "\x87\xae\x98\xf6{\x97q\xe0\x93\x62:\xd8~rl!\xe2.\xef\xc4\xa8\x39\x65\x04U\x19\x02\xa1;X\xccpR\xa6X`\x34\x96\x62\x81" "[\x8f\x17\x0b\x11\x66\x1f\x8au\xee\x41#\x44\x1e-Z\xc9\x11\xba\x10>\"\x1e\xf2\xa0w; \x11\x8e\\\x39p\xdf\xa6\xe8\xcf\x1e\xce\xc7" "_\xee\x30g\x31\xa0q\xaa\x97\xe2\xdfw\xe2\x8e#\x34\xbf\xfa\xf3\x8bX\xaa\xd0XZU\xfc$K\xd7\x46]\xc1\xc4\xa1\xb0h\xb5\xa4\x8f" "\x0e\x88\x88\xe8V\x82\xd1\xbe\xc4\x61\x82j\x33\x19\x0eq|'\x1a<\xec\x85X\xf3%\x94\xe6;}:\x13\x39L\x85\xa6s\xf3\xb1\xf6\xce" "\xf1\x84\x8aK\xc7\xf0\xf0\xe9\x15\x1e\xa8\xbd\xb6$\xfd\xc3\x9c\x9d\x1d\xe5U\x88\xfe\xa4\x10=U\x90\x33|\"\xae\x96\x1c\x41\x42\xe4\xcc\xbc\x88" "\xf0%UV\xe4\xea\x1c\xd1\xa9\x66)q\xd8k\x88_\xc4l\x15\xedX\rv\xcb\xa0q\xcdQ\x63\xb1\xee_\xbc\x19\x99`\xd2\xfb\x94\xc7" "\xa6\xff\x8dh\xd8\xcb\xa9hU\x62\xd1\x02\x95+\x87\x64\xed\xc5\x31^\xf4 Z\xfb\xc8\x0e\x85\x88\x18\x42(\xab\\i$\"\x02\xf5\x83\xea" "X\x82 %\xc5:\xa7\xbf\x94\x1b\x46$\x8e\xb5l\x8f\xf1\x63\xcf\x34Z\x91\xdd\x01\xbd\xdf\xc7\xcd\xf9\xb1^G\xc7\xcc\x18\r\xe2\x00\xbb\x35" "\"\x62\xb5\x81\xb0\xf5i\xdc\x93\xd8\x9a\x42x\xd0\xd4qI\xc3\x98\xf8\xc5zx\xc5\x87\x0c\xef\xde\xc9L\xde\xb8&\xed\xc1\xe8\x81\x08\xfen" "'N\x0cv\xb7.\x31tS\xd6\x33q\xc7\\@gg\xe1\x88\x45,\xaa\x31\xaf\xb0\xa7&\xc4\xd4\x90\xd0}\x8e\xa1N\xb1\x45\x17\x64!" "\xf3V\xcb\x9f~\x90\xd8\xbcO\xea)\xec\x0f\x02\xb2\xb6\x13\x91\xcfo\xb3x\xca\xaa\x63pY\x0c/\x93\x1c\xc8\xca\x01>\x9a\x32*\xf2\x32" "\x61)\x19\xef\x7f\x06M\x97k\x61\x9a\xabh\xb3~\xc5\x16\xab\xbd\x62\x37,\xa2\xf6\x18\x87\xd5\x0b\xef\xb9\xf3\xbb\x45\xa1Zh\x88TL{" "\x8b\x88\x1d\xa0\x94/$\x0b\xfa\x82\xd3\xc5\xc2\xd6\xce\x91\xb6\x14\x11Y\x08\x17:Q\xcb\xc7Yh|&\xc4O,.X\xc1\n%\xeb!" "\xec\xbd\x88\xdd/G\xf5Lz\xe1o\xfc\xde\x15\t\x33\x9f\x10\x06\xa2\xe2\x82\xd3\xae\x42\xc4\xc4\x03\x63\xeb\x80h\xa3\xbc\x8c\xda\x83-\xef\x96" "\x9b\xbe\x16\x17\xb4\x64\t\xd1\xff\x07\xe9\x06\\\x34\xbf\x15\x61\x81\x37#\x15;\x18!.\x9e\x10k\xf4\x85\x8d[\xb6\x93\"\x62m\x9ar\xac" "\x66,\x04\xbb-.\x39r+\xae\xb9TI\x88\x45-\x42\x8c\xe3\x41\x8e\xc6)\xc2|\x02\x91\x81\x92(\x36N\xb1\xf8\xb6\xe5\xe6\xe6\xd0\x18" "\xbd\x0f\"\xbd\x85\x8bkw\x06v{\x41\xfas\x43\x94\x9e\xa6_\x31\r\x33\xc7 \xf7\x15\x83\xc8u\xbeN\x64W\x80\xdaw\xfc\x33ZI" "(\xba\x19!h\xeev\x44\xe4p\x45\xc4\x45]\x43\xfc\x0c\xf9,\xfe\xa6\xe6h-\xc0\xda\xdf\xb6\x1c\xe9{\x0f\x91s\"\x14\xd1\xb5\x86\xc8" "\xbe\x45q\x1d\xb0@\xaf\x83\xdb.\xf9\xc9\xfb\x0f\x16U]\x92\xb4`\n\x04v\x63R,\x38\x19%\xe2\xcd\xd1QG,\x65^OO^" "\x1dZ\xcb\xb8\xe6\x8c\xb6\xb0\xcf\x93G\xc3\xad\x91\x17\x89\x46yGw\xc3*N\x06N\xe4\x00\x93\xa2\xdd\x82\x8a\xf6\x18\"\xd2\xb2\x02\x91]" "\x46\x11\x31\x8e+n\xa4+\xe4%\x1a\x01\xdf\xe1\x36\xac\"m\x0e\x9c\x43+\x9e\xd8\xc5\x00\x83\x17\x0b.P<\x05\xcd\x89\xb4\xa1\x61Rs" "\x61\xe9\"\xc4,N\xe9\x9a\x93>\xc2T\x93\xb7\xa9\xe2\xc9Q\xe3\xe2 \xb0'\x34\x11\x99\x1d\x45\x83\x17\x84\xb2j\xfc\x06\x65\xe2\xfcO\xe9\x9a\xfe\x8d\x42\xcc|\x80\xdeJ\x06\x9a\xbc\x83\x10\xd6~\x90o\xb8t\x1d\x95\x0b:" "\r\xf5\xcagQO\xc1Z\xcen\xc9\xb6\xcf,\xa5X\x44K)\xf6\xe0J\x0f,\xc5\x42\x8c\xbdJ%\xeeHSz\xe4\xea\x16\x30\xee\xe9" "S\x83\xe7\x06\x44\xbaQ@\xe4\x1a\xe2R\xfb\xf7\xf8\tr\x66\x11\xd4i\x44L\xfd\x88\x06\x8b\xb7\x10{K\x08\xb1\x96]\x38i\xb3S'" "\xe2<\xef\x8fw,P\xaa\xcd\xc9\xd5+W\xe6\x88\x88![\xa9\xcdx\x1f\xe0\x99\xe8N\xc3\xa5\xe1\x42,\x13\x10N\xcdmT\x44\xac\t" ",\xb5i+\x01\xa3\xe7|,.n(&\xeb$\x66\xaf@\xefn\xcb<\x06-\xc8\x9c\xd8\xb1\xa3V\xee\x9e\x7f\xf6\x92\x8d\x35\x44\x17U" "N\x1ci\x1f\x10\xb1y/\x7f\x14\xbbL\x98\xe0\x65G\x8e\x37\xe1\x65\x8f\xe2\xe2H/z\x11w\xb6\x1cQ\xc5\x93\xe3\xd9\xa1\xb0j\?\xdf" "\xf3m\xe8V\x00U>Ox\x39\xa0\xb9S\xc4\xfbL|\x14\x83q\x90\x16P\x8a\xb3\xfc\xd9U\xd9[\x17\xba\xe5\xd2\"\xc6\x34\xb7\x34\xdd" "\xeb\x33\xe3\xc8\x38\x0f\"\xc2K\x46hw%\x8c\?\x9a\xf1%\x46\xa5\x16}\x42\x44\xac\xbe\xbb\x97\xc7\xc1\x00\xe8Mj\\\x66\xa6Z\x93|" "\xbe\x35\xcao\x87\xde\x8aw\x17\rg\xdez\xe4\xee\x35Z\xac\xc9\x35\x33\r{\x1d\xa5.\xe7\xd3\x85hVK]\xbb\x9f.-=\xa5\x11" "[%\x90\x9d\xe2\xd2\x88\xb3m\xa5O\xae\x45.}z\xe9+G)\xfe\xdc\xfaM\xb4>\xbf\xa5\x8b\x9es\xb7\x11\x02{S\xeb<\xb3+" "\x03-\\\xf5\xe9\xc8-\x1a\x62\x95\x0b\xe7i\xdd\x8f\xech\xda\xda\xce\xce\x1a\xe5\x93\xe6QP\xce\x14$\x1f\x9d\x16\x94&\xb1V\xe9\x93\x30" "J\x0b\xd1\xb8\x83l/\x44\xc4v+\xa5O\xdd\xe0l\xbb\xe3&#\xa2\x8d\x1b\x8e\xd2\x61q\xb7 \x9a|\xcd\n\xb0i\xee\x33\xf6\x90\xd4" "}\xa2\xe5x\xf6K\xd1\xce~I-\xfe,\x37w\xd4p\xa8\xcf|<\x0e\xbc\x84\xf0j\x05\x35]-\x89\xd9\x90\x96>\xed-}\x62O" "\x83\x86K\x12\xdd\xd0 \xdb\xfa\xd3\x8egW\x8b\x46\x8f\x7f\t\xbf\xe7\xb8\xb3\xb4g\x86,\?\xd0\x88U\xb6@'\x42\x0c\x9f\xca%\x0f\xd3" "L \xe7. z\x37\xaf\x1c\x86\x95K\x34}\x82\xb1\xad\xdf\xad\x9c\x16\xc2\xab\xd1Y\t\x84\?)\xff\xad\xe6\x44\x96\x99r\x95\x0e|\xe5" "*\xd7\x87\x95\xab\xb4\x9c\x94\xab\xdcs\xaa\xdc\xe0\n\rP\x06V\\vYn\xd0]P\x88\n\x11\x64\x17\x91\xe2\xe6\xe4u\xbb\xee\x00M" "\xeb\xe5\x06s.\xa8\xbd\t\xcc\xbf\x94\x1b\x96\x08\r\xce\x41\x97{\xbf\xebVX}\xa3\x88\x15\xd8\xc2\x63\x9b^\x37\xe5\x9ews\xe5u\x37" "\x14\xf3\xeb\x38`\xa2h\x1a\x90uK\xf1T\xf5`H(\xf7\xfcv\x8e\x0b\xfb\xca=\xc6\x9c\x00\x99\x0b\xcb=\x84\r\xbd\xa3\x38\xbc\x06\xa3" "\x32\xee\xe2#\x0e{^\xb6\xa0S\xa0\xd7\xceS|\xd8\xcb\x1f\xc5\x96\x64j\xcd\xcc\xe5Ov\x12\x41.\x12t\xf6\t\x90\x03\xcb\xf2'{" "$ \xdb\xc9\xf2*\xe4M(\xd9\x89\x83\xa8\x91\xf6\xc6U\xf6\xc5y\x00\x86\x38\x88\xac')\xba]\xdb\xcak\xee\x04Q\xde\x06\xcd\x35\x17" "\x90\x94w\xdc\xb7\xa7\xbc\x63H\x87\xf2\xde\xde\xc1^\xfe\x94\x07\xe9\xe3\x92\x98\xd4*\x1f\xe8w/\x44\x8b(\\\x37\xbc\xec\x15\xfd\x18\xa0\xc9" "\xf0\x8b\xc1\xf8\xcb\x07\?\x35 \x31\x0c-\x1f,\xff\x1d\xc2\x8bw\x1d\xfb\x61\xc6Y\xb4\xd4\x91\xdc~p\xf6\xabr\xc5\xd5\xd0\x42\xb4W\x95" "+o\xfb\x00\x86\x99kG>\xa0\x88\x18G\x0b{z\xcd\xca=\xbb\r\x95$+L\x90oS\x44\xd8\x97*I.\x62\x17\xc2\xf1\xbc\x92" "\x64\xcf\xa1\x92\xa2q\xa5Rg\xd6\x15\x9e\xaet\xa5\x1b\x1c`\xa0\x05\xdbW\xa7\tu\x1e\x12\x95^\xc5VHU\x9e\x18M\xa9\xf2J\xb7" "M\x30.v\x95W\xbe\xeb\xca\x82\x86m!\x06\xdd\x95\x05\x83p\x0b\x9b\xfa\x96+K\x16\xe5\xca\xd2+|\x90X\x8f_\xd1\x35\x18\xd2\x85" "\xe3\xc4\x63\x65\xe9\xff|\x83\xec|\t\xb1\x7f\x61\x65\x19^\x34H\x44\x85\x12\xc2\xb4\"\xc4\x0c\x84\x32\xef\xc8\xc1\x44\x65\x19\x61\xfb\xd4\x8a\x8d" "\x1a+[\xe3\x91\x46G\x30\xde\x34\x8f\x9a\x89QI\x9f\xff\xf1ZW\xb1\xa0\x93\"\"\x8c\x0b\x42\xbc\x32\xe5\x8bq\x01j\x7f/\xd7\xe0\xb4" "\x88h\xd8#T\x08\x8b\x0f\xe8\r\x1atn\x11-\xd7 \x11\xcb\x44\xd8\xb2o\xf7/\x8c_\xe4\xec\xf8\xbb\xe9\xf8\x89\x16\x35$\xabp\xcd" "\x9b\xe3j{!\xc2\x80\x80\x41n\xca\x41\xa1h\xe8\x1f\?^s\xf6H\x98\xe2\xb5\xe9/$\x44.\x15\xd6K$\x36\x8fPN\xc8\xd6+" "]\x88!r`.\xa2;\x84N\xaa\xb0\x9ftt\xb7\xe5O\x9b\xdc\x05Y\xc4\xc5\xc6\xdd\x34\xe3\xf3<^\x07W\x03\x8e\x44\x44\xbc\xc9\xc5" "\xe2m\x9d\x0b\x8f\x45\xb4+\t\xe9\xe3\n\x91\x63\x36\x15\xef\x8do\xd2\x07\xf3+|\xb6\xe0\xa1\xc3\xb6N\xc4\x32\x93\x92\xbd=%\x1f\x87\xf6" "]\xe1\xb0\xe1M\x8bl\xc7\x44\xdb\xce\x1dilS\x91\xa9\xcaM[\x94v\?;\x1e\x0f\x13\x99\xf0\xfa\xd6\x89Q\"\xef\x12\x32\x36_<" "\xaa}=(\xad\x38n\x11\xcd}\xfd\xb6\xe5\xa8qjWSj\xf7\x19\x32\xbbr\x64\xc7\x1e\"W\x83\x42\xe4\xbe}\">\xf2\xc9\x42{" "\x05\xe1\x64\x46\xc7<\x11\x0f<\xa7\xdc\x15\x9d\x04\x1f\xcd\xa8\xaf\x64\xc6\x8c\x8aL\xd3\xa8Qv\xef\x32j\xbe\x1b\x8f\x64\xdb\xbe\xc2\x97s\x13" "\x95q\xc1<\xc3\x30<\xe6\x39\xa7\xf3\x98\x0f\xd3=G]\xc4\x38\x1b\x38MR$\xc8k\x33\xf4\xd8\xd4\xdd\t\x10:\xe2\xb1\xc9\x8a\x0b\x64" "\xc5%\xe2\xa4\x11\xa2\x86q\xa2\xff\xb8\t^\xd3v\xa0\x1d\x15\xab\x14\xe7\x37>\xb6\x92~\xd4\xbd\x46\xd8\xa8\x8a\xf8\x8a\x04k\x85Y\x9c\x61" "\xc0\x66\xfb\xf1\x9dSM\xe0\xef\xa1o\x45\xed\xfd\xf7\x84\xd7\xf7\xae\x1bI\xa8g\x1cn\xef\xdd\xc7\x36\x9d\xc2\xde\xa5<\x95\xdd\xf4;\x07\x89" " \xf7\xf5\x16\x11\xd3\x9a\x8f\xef\xc1\xe5\x98\r\xb2\x88\xd8\x05\xee\xf1\x9d\x31\xfa\x1e\xdf-\x85\xdf\xd9\x64\x80\x0c|&\xe2\x10\xb7:\xe1\x12\x83" "\xc7)\xfd\xc9\x1em\x45\xba\x10\xd5\xea\xa3-\xde~\x9c\x86\xb9WG\xcbv\xd3\x10\xd6\x34\x90\x9d\xa8\xc7\xa9\xbd\x9f\x19G\xfe\x42ln\xf3" "\x38\xb3\xab\xce\xc2\xdc\xdaQ\x1b\xf5\x42\xc6\x32\xe4Lr\x0e{J\x8f\x33N\x7f\x07\x14\x87\xfc-\x1bT\xe1\xfeI\xba=t\x02\xaa\xe6\xb9\x34\x43" "w\xb4\xdc\x19O\x64\xee\x96\x84\xb1\xa1\xaa\x86\x10\xa9.\x19\xe4G\xb4\x16\xcf)\xfdVG\xb5k#\xbc\xb6hh\xca\x95\xd2\x9e=\xb3|" "\x42\xd3\x90S\xb3#\xb5\xe1\xdax _\xef\xc8\x31\x1fG\xf2\xb6q@N\x33\xe4\xcc~wx\x96[\xa5\xd7s\x35\xcf\x65\xd7\xc2$\x9f" "\xc6O\xf3\xe9\xfc\x1c\x93\x81=\x39\xe1\x8c\xf7\"w\xaa\xb3\x00v\xf7l\xa4\x85\xe9O\x32\x63\xfd:\x88\xdc\x9fN\x44\xb8\x0e\x08\xf9\x86\xf2" "\x81\x1d\xe3\xee\x9fh\xedG\x63\x8f\xec\xf0,\xf4\x36\x15\x0enH\xd4~\xd5\x41" "\x90\xcc\x90\xe8\xae\n'/\x46\xdc\xa5\x45\xab\x11\x62\x81\x8d\xb0\\\x02\x19p\n\xf4n\xee\x39\x02\x14\xad\x33&\x61\xfb\xaf\xbe\xb1\x8b]}" "\xe3\x82P!\x46\x8c\x42Vko\x8c\x66R}\x0b\xa6\xb8\xda\x1b=\xa0\xab;z\xc3Uw\x0c>V\xdd\xb1N\x06\xad\xd8\xee\xce{\xbd" "\xd5\x1d\xf7\x14\xae\x9e,\x33(\xa5\x95\xf2g\x65Zkk\x37^\xaf\x16%\x12\xf4\x15\xa9\xddp\xf5k\xed\x81q\xeb@v%!r\x35" "V\xed\x91\x91\xb3j\xe6Y\\[\xb3n\xaf\xad},\x43\xac\xad\xe9\x05\"|Z\x92\xf0\xf7\xa8\xad\x19\xbb\xbe\xb6\xe7U\xea\x39]\xd4\x80" "\x39\x34\x15k\x8elw\x45\xc4T\xb8\xf0P\nnS!\x86\x05uI\xd4\x8aw\xb7\xf5\xbbu\xd3\x86R\xb6\x83\xe3\x80\xda}\xd5\x9d\x8f" "\xdb\xd3*O$*}\xf0\xf7P\xe7k\x81\xe6\xa7\xcb\xb4\xdd\x41\x8b\x12W\xf1g\xc5\x43\x90\xde{\x85\x0e\xb5\xca\xdaQ\x0bQ\xc1\xbe\x33" "X\x06w\x95\xe8\xb9\x1ck\xc8\x35\x10\xe5\?\xeb]j\xcd;\xd6\xbb\xd4Z\x97N\xe4\xcc\x11\xc5\xfdS\xfc\x1d\x18\x65\xc1 ]\xf0\xb0," "\x45\x34\xe4t\xa5\xed\x61(\"vtS\x1e\x1d\x65\x80\xc3\x8e=\x34\xe6\x1c\x11\xd7\xf6\xdb\x8d\xfd\xf0\xf0\xee\x61\x81j=\xe7\xe7V\xf2L" "\x9c\xac\x15\xed\xf1!\xda\x8c\xa2M\xd2\xb4\xaa\xa3|\x87\x33\xe5\xa2u\xec\xe8x(G\x19\x7f\x45\xb4iQ\x43G\xf4\xbb,\xd1\xf5\\p" "\xff\xceHn*jP\xb0 \xf5\xe9\x9e\xc1\xa5\x94K\xfc =\x61\x9cN\x15\xf7\x64\x45\xcf\x1eu\?\xa9\x61\xf9\xae\x10}\x65\xd0\x9b\xf4" "\x9d(\xb9\x80\x83\x43hg\x0f\x10\xb4\xf6\xb4\x13\x8a\xf8\xb6t\xd4\xe7=\x8c\xa9\xbdw\xcf\xb5\xcf\x11\x89\x82%\xaf\x30\xf1\xe5\xc8\xfe\x84\x88" "W\x99\xb3\xfc\xa8!\xce\xfer <\x1b\xbf<\x0c\xf4\xeb\xb6\xf5\xa2\xf0\xe5\xd6\x31h\xdd\x07p\x42\x84\x16m\x66\x41\xe7\x9b\xda\x92\x19V" "\x1a\x10n\x0f%\xe2\xeaJS\xf7\xe6h\xda\x17\xb7\xd4\x11q\xddq\x94/\xd0Z\xee\xb4\xb0\xfb\x44m\xb3\x08.\x99R.\x8bq<\x01" "J-\xc8p\x9b\xd0\\\x1e\x61<\x45\x90\xcd\x91\x88p`\x13\xc2\x42Z\xcf\x33\x0cY\xbd\xc0\x05\xdeu\r\xdb\xa3;\x95!\x90\x95h\x18" "\xce\x81\x41\xfa\x32\x16\xb1\xf5Q\xbd\xc0\r\xa3\x84\x98\xb5\x13\xa2\x19\xaf\x17\x82G<\xe1\x03\xe3z\xd4\xcb\x0c\xdf\x08\xc6\xf3\xe5\xd0,\x33\xa9" "\xc8\x96\xbc^\xf6\xdenI\xd8\x02\xea\x65\xbf\x82\xdcR\x0e\xa7\xda\xf8\xd7\x1b\x1a\x95\xec\xa5\xcc\xb1\xbdh\x43" "\x39\n-\xf3\x86\x13\xdd\xcc+\x9cLL\x63\xd2\x87\xd3{\x63\xd6\xc8\xc4\x08g\xf7\xf8\xf6\xd6\x34\x16+\x8e\x43\x84\x07\x66\xfd\xf0\xc8kr" "\x89\x9b\xb0_\x8b\xfa\xac\xee\xd8\x35\x14\xbe\xe3\x9dt$\x9b\x33,\x95\x88G\xa4k\xc7{l\x91\x18\x65\x0b\xb7\x65\x46\xd4\xabw\xb8{\x12" "\xc4\xf0\x1e\xdf\xb2\x11[\xfd#l\\P\xcf~\x93\x85+k\xe5\?\xb8u\x90\xf0\xbd\x18To\x18\xfc\x0b\x1a;\xffu\x8bs\x0e\xc6\xbf" "\x81\xa3\xae\x10\xd1\x01\xeb\x1fV\x9a\?\xfc\x45=\xc8\x9c\xa2\xcd\x80\x1a\x46}\xf5\x0f\x46\xa9\x15\xda\xafi\x93\x13V\xf9\xab\xa0\xc6\x9b\x0c\xea" "\x87\xb0\xd5\xa3\x08\x07'!\xdb\xfc\x8f\xf0\x8a\?\t\xef.\xa5K\x16^\xb6\xa9\xb1\xf9\xff\xe0(Q\xd8L\x90v\x96p\x8e\xea\xfa\x83^" "\x06\xc2u\xd7\xcb\xc7\x0f\x1c\x61\xfa\xa6\xfe\xc9\xb8<\x42&\xa3\x85\x1a\xa8\xcf\xc2&\xd2jni\x36\xf7\x06\ru\x18\xaf\x16\xa9\xf1[\xf3" "\xa0\x39\xb1\xd3o\xac\x43\xbb\xf1\xb0\x85\x08(\x95\x8c\xbd~h\x13\x13\x0f\xa8\x14\x36\x9c\xda\x06\xa5\xd2\xe2j\xfe\xfa\x86\xe6\xbe\xfa&\xfa\x42" "\xb1\xdd\xca\x1f\x89\xe0\xf6\xf5}\xd8\x18\x90\x1d\x34\xe7\x36!!\xdc\?x\xe9\x93\xfc\x87\xe6\xdd\xd7\xc9\xe9\x86\xc4\x88R\xb8\x42\xa7\xe6\xc0\xa8" "\x44\x42\xb8\x85+\xdf\xc9\xf1.Hm\xac\xc7m\x9a\x15\x9f\x03\x07\x17\xc2\x1d\xcf\x15^\x1d\xe8K\"\xe2\xe8V\xa3\x91\r\xb2\xd4X\x8b\x1c" "i\xf9\xab\x1f\xbd\x9b\xef\xb0\xbb\xb1\x8e\xf1\xd1\x1b\xac\x1c\xe9\xa6*\"S\xf3Hw\xe9\xfa\xd1\xbf\xc9\xc8\x0f\x38\x61+\x1a\xec\x9a\xf5#\xcd" "^\x42\x0c\x00\x85\xecw\x1eiX\xac\x1f\xb5S\xc4w\x61\"-^\xf5#G\x39\x42X(\x85|\xe5G\xfa\xb8\x34\x12\xdc\x00\x1c\xa4S" "\"\x44\x0e\xba\x1b\t\xd6\xe5\x42\x8c\x62\x1b\x89\xf0~\xc3\xb5\xd1\x8d\x0b\x8e\x91\x1a\x17\x1eV\xde\x37.\xa4O\x1e\xb6l\xbf\xc6\xc6\x05{\xb7" "\x42,\x88k\\\x84\x17\r\x19\x66p\xf9\xaehp\xb8h\\p\x15\?\xc8@\xe1\"\"\x96\xae\xb0\xae\xf5@\xe3\x92\xc5\x17\xf4*Wj" "=@\x87\x44\x0f\xccI\xe4\x05!\x02\xdd\x80Q\x11\x37\x91\xf2R\xcdp\xd9\xa5Q\x44\x34$\xb4pM\x32`\xb5\x10\x05\xad\x91\xb2\x07S" "z\xf9\x89W\xfc\xa4\x86H\x01\x8d\x14\x87\xac\x8d\x8c\x87\x1e\xad\x10\xf3\r\x42\x9e=\x13/}m\x64\xc2\xa6\xd6O\x8dl\x88\xfc\x05\xfa\xf7" "K\x06\x03\xa1V\xdc\xab\x13*\x66\xa7\xdc\x01\xd3*\xb4/\x34\xcc\x90\x01r\x9dy\xa3\xc2\xc9W!J\x65\xc3\x1c\xf8\x85\x93\x36\xad\x63\"" "\x62\xc4\xae\xc4]U\xfc\x1e\xcf\xca\x30\xdb\x8dJ\xd0zr\x64\xafM\x44\xf8\xee\n'\x65\x12\xc6\xfc\x46%\xcc\xbc\x38\xc6\x87\xf2\xbc\x81\x10" "\x45\x44\x08\xb3\xba\x90\xef\xa8\x12\x36\x37\x8e\xcc\xb7*\x1eI\x04\x11\x01\xd9<\x42\x64\x05\xd1\xa8p\x9a\x13\x94\xae=G\xb9\x8dG{!-" "\x63\xdb\xce\x39\xb0\x17\xf6\xe6\xc1|\xdex\x93\?\x19\xf1\xf8\x08\xc8\xd6\x98\x86\rp\x16\xb6\x8a\x8e\xac,)\xa2\x8dn\xcc\xed\x9c\xf3\xb0\xf5" "L\xb6\xf1\x95\xef\xdf]\x39\xc0\xca\xa5\xc6\x8f%\xef\x96\x1d\xf3\x66\x82\xf3\xb9\x42\xb4\x00\xc2\xd3\x15\xcf\xd2L\xb0\xbao&X\xcd\x37\xff\x8a" "\x89\x88\x8e\x8d\x04\xc8G\x15\xc2\xcb\xa2yk\x9f\xdf\xe9\x1e\xea\xd8\x91\x43\x86\xe6\xa8L\x85\xc5\xcf\xdf\xfd\x80\xe2\xe0\x83k\xd2T\\\x92\x18" "\x63\x0b\xb1\x04\x00\x0c\xdb\x13\x8a\xcb;\?\xdd\xa2\xb8\xb1o\x63^H\xa8\x9d\xd6\xa6\xbb\x02\xdd\x10\x85O+\xa3Y\xb5\x45\x44k\x08\xd2\x7f" "\xaay\xc7:\x07\xa4\x81O\xc4\x61'H\x36#\x38\xe3\x89\x86\x17#\xdcn\xbc\xc5\x9b\x13\x39\xe0\x15qw\x8a\x8f\xeeN\xfej\xe5\xb7/" "\xff\xd5\xfe\xeb\x63\x39\xe0\xadG\x38\xc6\xf5\x62\x42x\"\x08\xe1|!lU\x1c\xdd\xfd\xb1\xb5\x10\xb6s$,\x02\xc2\x1f\xdeH\xf4|O" "nw\x8e\xee\xa9\xa5\x85\xf5_\xdf\xed\x07)\x86V\x06u\x05\x13\xbaO\xcdT\x80\xad\xa1\x9bi\xef\xfe\x87\xc6p\x11\xe1\x0b\x0b\xd2\xefQ" "\x44\xd8\r\x85\xee+\xbd\x32\x89z\x43\x38\xfcq\x8c\xb0\x16T\x44\x64\x38!\xdfU\xda\xcftH\xb7\xcf\xb0\x88k^\x88\xcb\"@ov" "r\xa2\xa5\x34\x44\xbe\x33\x15\x43\x84\t\xa0\xb8\x8c\xc5\xe8\xe6'\x16K&\xf2\xf5\xa5i\x1d\x15\xa2\x11\x00\xb9'N\x33\xcd\x8e\x11H\xf3[" "\x33\xcd\xb1\xb9\xb0m\xc4\x14\x8b\x10\x0bW\x84\x30\x32\x82\xee\xa6\x44\x64\xb3\xd4\xccYr\xe4\xa2\xcd'\xc9o\xe7--\xf2l\x15\x9by\xce" "Q\x36\x0b\xf2\xc7\x8e\x9d\x88]\xbc\xee\xb2\x95\xa0r\xdc\xadj\xda\x12\x87\x66\xdd\xff\xc2\xd9\xeb\xc1\xfb\x05\xc9'\xac\xd3oW\x88~\x90p" "\x8fL\xd5\x64\xa5\x0bj\x1f\n\x41S\xa0\x45o\x9f\xe7\x9a\xf4\xc3L\xb3w\xd5\xe4\xb2\x46\x90^\x19\x10\xbdY\xcd\x9b]\x38\x8d\x9d\xbf\x66" "\x33\xc4\x06\x93\xcdN\xd8.\x19\xf1\x03\xdbl\xae\xd9\x65o\x0c\xd4pq\x98YkZ\xad\xd7\x1c\x84\x8d\x17\x12\xad\x8c\xb0\x95\"\xbb\xb7\x8e" "\xde`\xea\x44\xcei\xaa\x88\xfb\x1d[\x16\x99hT\x90\xc9\x82\xe1.\x45\x63zMh,\x10\x62\t\x9fr\x41\xc2X \xc4\xa4\xbb\x10\xdd" "\x18!&k\x9a\xd6o\x14\xf2mM\xfc\xcb,\xf9\xfa\xee\xa8\xa3\x34\xbb\x9a\x95\xd3I\x80\x41ws\xc2\x35\x98\x42\x16\xbbIt\x89\xcc>" "\xa3\xc9\xb5\x39\xe3\x36\x00\xcd\x19\x1b\xaf\xe6\x8c\xf3^\x42\xbex\xa9\xbb\x91\xae\x0b\xd3\x17\x7f\x19\x61\x19v\x90\xad\x36\xde\x66o\x9fn|\x18" "\x38\x9a\xd6\xefjj\\)\x9ai\x9bG\xae\x13\x04\x83\x46\xc9jh\xd5\xc2N\x89\xf1\xf2\x45\xe3k\x38\xf2t\xad\x04m\xe5-\x8b\xa4\x01" "\xb2\x1f\xd0J\x30\xd6\\+\xa1v\xc6\xc2\x13\x1d_\x44\xc3N\xed\x42\xac\x80i%\xe8\x66\xdeJ\x30\xfe\xa6\x10\xc1\x88\x84\xe3<\x89\x9d\x42" "[\x97\xbf\xd8\x30\x41\xfaPX\x8e\xdd\xb2\xa0\x66-\xdb\xf7\x14}+\xf6\xb3\xa8!\x30\n\x18^]\x41\x64,\x14!\"\x8e\x82\x61\"\x43" "k\xb9\xd3\xe8Q\xe0\x34\x06\x06\x14\rm\x41\xeb\x92\x9b\x08\x83\xfe\xf7\xad\x13\xb9\xef\x9b\x88\x8d;\xc7\xf8\x90\xbc\xd4\xf9\x96\xa3\x0e\xd1\xd0\x17" "\x04\xb9\x93\x10\x45\x94\n\x11\x31\x95!\x44\x02\x0bQ\xfb\x08\x8f\xfc\xaa{\xb2\xb0~\xd2U\x9fvK\x0c#\x06\xfa\xcf_|\xa7\xd0X-" "\xa9\xd8#;\xaf\xc6\x0f\x12S\x63\xadK:Y*\xfb\x8e\x9c\xca\xa1\xc8[\xbf\xe2\x0e\x0b\xc2\xe1^\x37\x13\x87\xafZ\xeb^\xf7\x30_." "\xd8\x00\xb7\xee\xc3\x46\xdf\x91\xcd\x89\xe4\x9b\x36\x0e\x15\xa5\xef\xa1\xac\xb0\x1c\x81^\xbe\xc6\xdaX\xb4|\x8d\x44]\xe8\xda\xb1VU\xc3<\xb6" "\xefh\x98k\xe9\x32Z\xd5\xe0\x1c#\x1a\xca\x84\x10;\\\xb5\xaa~\x35M\xb6o\x1d=\x44\xfdiU\xb9LG\x88\x45(\xad*;\x46" "\x42\x14\x37\xe1K\x31\xb6\xffQk['\x43\x34\xac\x05o\xd5X\x65\x81\xac+(\x1e\x9f\x9c\xe8\xa7\xe6\x8c\xf9M\xad\xd6\xe5\x44\r\xb4\xa0" "\xda\x8f\x45\xbe\xdcZ\\\x63\x42\x64\xc7\xa7\xd5\xb0\xd4V\xc6V.h\x9a\xe6\x03$]\x43wR\xfe\xb6\r\x83[\r\xdd/\xfa\xe6\x18\x66" ".\xa9=\xa5\x1c\x39\xfci\x99u\x43\x88y\xd2V\xebwm\x9bH\xb5Z\x8c\xf7/\xf9\x06\x16pP\xedq\xa8\x1e\x44\xeb\xf4\xc9\xee\x03" "\x89\x45(\xc2\xd7y,\x62m\xaa\x10\xbd\?!\xdf\x85\x85\x03\x14\xc2\x39Rx\xe0\xf1\xf0\x66K\xf2q-`\x9f\x10\xf3/\xa0\x95\xd1\x96" "\xe5\xda\x96\xbbm\xcb\xcd-\r\xf6:\xbb\x62G\xb8\xd5\xa2\xfb\x86p\x88\x37\xdd\xb3W\xd3\x63\x35\x0er\x05\x92\x88\x98\xa6T\xeeHL\xf5" "\t\x61\x0e\x15\xb6Lo\xbf:\xb2\x9d\xa5\xc8$\xeby\xbd\x07\x06\xf6n\xf5\xfc\xe4\x88l\xf3[\xec\x11*\xdf\xc9n\x89\x44\xd7R\xc8{" "\xee\xf9\?\x97\xa4\x14.;kp\xd5tT+\xc3\xe5\x46\xfes\x35\x96\x1d\x1b\xe8\\\x16\x16\x80\xc8\x01x\x33\t\xcb|\x10n\x1b \xc4" "\xac\x1e\xe8\r\x36\xb1\x38\xcb\xfb\x8f|\x32Z \x84\x18\xcc\xb4z\x96\xfa\xbd\x30\x35\x35\xceIV\xec=+\x9d=\xf6HZ}\x8e\x33[" "\x43\x8d\x1e\x88Y\xf2\xd6\xd0\xaf\xe1\x19\x87\xe1]\x82\x1b\r\x8a\xd8Z:Z^\x7f\x0b;U\x7f\xb1\x0e\xe0&\xd7\x9aK\xa7\x9e\x8dSk" "\xc5\xf6\xad\xb5\xf2\xb0'\x87\x10\xa6x!\xf6\x38h\xad\xfc\xe6\x82\xc4~\x8f\xad\x15\x1d\r\x84\x08\xd7\xe6\xf6\xee\x02\xed\xf2\xbb\xb0Ur\x94" "\x31\xa5\x34\xf6~w\xee\x0e\xe8\xae\x9f\xe8KP\xe3/\x8e\xe1\x13\x32\xf3\xc9j\x05\xa5\xd6\xfc\xa8\x1bP\xdd\xb0\xea\xa1\x86\x81'\xaa$V" "O\xd4PW\x80\x92\xdcgG\xbd\xe3\xe4L\x63\xdd\x42\r/\xbe-\x83\x14\x9e\x37(\xdb\xfa\x30\x11\x17\xef\x8er\xbf\\\x87\xd0\xbe\xd3H" "Z\xe9j\x08#\xb8h\x98\xc8\x12\x62h\xde\xbe\x97\?G;\x8d\x8a\\!$\x62\xe7\xe0\xc8\xd1q\xdb\xf6\x84\x13\xc2\x95Mx\xda;\xba" "\x43\xe1\x45\x99\xc4\xf0\xa2\x9d\xa4\xe7X;\xc9\x66\xa2m\xd1X\xdb\x99\xb0\x81\xfb\xb5\xc9P\x90\x95\x7f\xdb\xe6\xdb@\x8e\xdd\xdaU\x9a\x03\x85" "\xbc\x81*\xf3\x9a\xb0\xadY\xa5]\x0f\xdbO\x8e\xac[\xdbuZu\xdaO\xd1\x02\x94n\xdf\x83\x11\xa9>\xe1\xe8\xb4=\x33.\xc2\xa6\x66" "\xd7\xf6\x92\x9d\"\xd0\xaf\xdcs\x66\x84\xda\xe3\x83\x13\x19\\\x88\x62\x61\x19\x8b\xb0\x1cS\x84\x1f)\x44\x16\x0f\x8a\xfd\x1b'r\xe8\xd2\xfe\xa1" "\x9bl\xfb'\xee\xfd\x88\x88\x9e\x31h\xbf\xfd\x61w\\N\x8b\x92!\\$\xb5\x99\x45\x01\x93s\x61\xc5\xa7\x10\xf3~m\xdb\xfc\xa4\xbd\xa7" "u\x41\xc8'SZ\xfa\x1d\xc3\x8e\xbe\xf9\xce\x15{\xb7\xc2'-Q\x9d\xe4/\xfaZ\x9d,\xdd\xd1\x41\x19_\xd3mY\x34\xac\xd0\x07\xc3" "\xe5\x94\x01\x94\x44\xb3O\x19\x99G\x88Yk\xe5\x8e\x0e\x99\"\xde\xafI\x34\xe3\x42\x38\x99\x80\xbc\x82\xd3\x38\xae\x16\x11\xde\xba\x42,\x97\x00" "\xe9\x17\xd6\xc9r\xd1^\xc7\x02@\n\xe7w\xe4\xf2\x00r\xef\xde\x8em\x8a\xd0\xc9\xca\x1f\x89\xdd\xa2\x85\xcb)\tW\xbaN\xd6=\x06=" "\x13\x41\xdd\x97\x15\xae\x82\xe8\xbd\xc6\xfd\xdbN\x97\xb6\xebN\x97\xd9O\xd8L:\x06\x95\xbc\x89\x9aS;\xaf\xf6\x95\x0f\xf6\xb7:\xd3\xf0R" "\xdfj\xe7+\xbc\xbb\xf4\x0e%\xaeq\x10\ru#\xe8g+\xb4\xa5\x9ci:\xdek&\xbc\xd6+\xfb\xae\x9d\xef\x10}\xe0\xce\x96\xe3-" "\x90~g\x14\xb1\xc0\x1d\xa2\x9f\xec\xc7\"*|\x8a\x98|\x80(\xdd\x38\xe6\x13h\x34\xfc\x99\xf8\xf5'\xc6\xbf\x8c\xcax\xb9[w\x35\xce" "\xad\x08\x61\xd3\x11\xda\xa5\xfd\xf4\x92\xb4\x8b\xb2{\x05Z>Q\xd1\xcb^\xf9\x8f\x03\xee\t\xcf\x03\xc8\xf3\x10-\x0b@l.h}\xa5\x86" "\xc9'\x8a\xcf\xd3X\xfcNkuY\x8f\?\x63\xb7\x98\"\xe6\x82 r\xa1\x12\xc5j|k\xeeY!\xfe\x1du\xd7\x44\x97P\x88\x96Y" "\xf8\x64\x0f\xe0n\xa4\xf7\xeaO/)Z\xc2\n\xcf\xbe\x18l\x37\xc6\x93#\x1b\xd3\xce\xd6\xddO\xd8\xe4\x1dpQ\x41g\xeb^\x44T\xe4" "O\xa2\x0f\xdc\xd6\x81+\xdd\x41\?\xb1\x63\x31\x86\x46\xb1\x9b\n\xb1Gi\x37\x1dv\x13\x8e\xacO\xbby\x66\x1aP\xb7)\x85\x1f`\xf7\x81" "Y\xaf[\x64\xfd'|\xd6G\xe8\x36\x43\x84\xc3\xe9\xaa\x0f\x0bG\xf3\xffj\x34\x42v\x9f\xd8\xc6\n\xd1\xa7\x03\xc3\xab\x16k\x88\xee\x13G" "\xe2\xddg\x66\xb1\xee;\xab P{*]\xe9\x01X\x98\xac\xee\x38\xecj\xeb\xd4\xdd\xb0\x13\xd6\xdd\xb0\x37\xdf\xdd\x9c\xdb\xf3\xbb\x9b\xe0\xfe" "\x9du\xa5\x88\xa9\x9f\xb8\x9f,ZvI\xc2\xf8\xd2\xdd\x84\x97$\r%\x42\x98W\x84\xa8-\x41V\x1d\xdd#\x83\xe7\x82~\xaa\xe6\xf7\x90" " \xc7\xb0\x95u\xe4\xa0\xbf{\xe4.[O\xa5xv\xec\xa9\xc2p\xb6\xa0\x97\xcc\x86\xa7&\x35\xe4\x63\x30\xdek\xf3\xa9\xc2\x44\x04\x99;" "\x45|\xaa\x90\xe8/<=z\xf3{\x7f~\xf9\x8b\x9d\xbf\x9f\x9a!\x32\xd0S\x8f{m<=s\x46^\xb9\x05\xed\xe2\xcf~\x32K\"" "\xfc\x97\x10\x03\xe7\xa7g\xbb\xf0\x33\x37/\x12~\xf2\xfbt\xb7\x10\xa6\x87\xd8S\xb7G\xad\xc9\xb3\xcb\x9f\xa3\xff\xb9p\xd7\xe0\x44\xa5p\xf9" "\x02r\xc3\xd0\xa7\x89\xb4\x16\xca\x05\x8b\xf5\xd3\xc2\xbb\xc9\x92\xf0\x97\x10\x16\xf8\xb9\xbf\xbc \xb1\xcf\xe0\xd3\"x\xe9\x82\x61\xbaI\xf2\x19\x17" "\x96\xc6J\xf9\x88\xce%O\x9b\xdf}U\x17\x07\xa4j\xd0<\xc4\xbc\x16\x36\x0fR\x15\xd3\x07\x15\x9a\?\xb9\x8a\x35\xd4\xd1\xc2\xf9\x8d\xdf\x37" "WM\xd1\x10W\xf4i\xe3\xce\x1bL\x12\xa0\xbd\x9a\r\xa7\x01\x9fl\x0bo\x90y\xf7i\x1f\xc2\xe6\xd5K\xb0\xceU\x8e\x1dY\xb9\x8b\x08" "\xd7\x61\xe1\x36o\\\x38z\x83\xec/\xbc\xfa{\t/\xb1u\x0c\x96\xd3\x00\xed\x10\x34\xfd\x7fq\x8a\xb5\xd1\x45P~\x15\xd9o\x0f\xff\?" "\x87\x43\xec)#\x87\xef\xda\x8e\x34\x11\x8ax\x7f\x65\x34#\xab\x88\xd9\x19\x99K;r\xf5\xb9\x88\xf9\xb4#;\xd7&\xda\r\xc3\xda\rz" "\x8f+\x66>\xd5\xf8p^\x61\xcd\xd4s\x62|\x86v\x95\xb4\x84\xe3j'\xa1\x8c)\xda\xf6<\xb3\x98\xf1\xc5\x10%]\x88\xc9\x34!|" "'\x85\xc7\xf7 \xc7\xa4\x62\xd3 \xbc\xe7\xe3\xfb\xf0\x30\x13V\x99\xec~\xbd\x42\x62\xd2\rT\xff\x87\x03_\x92\xdf\x99\xba;\xe4\x18K\xf8" "\x14SJ,\x9d\xfd\xa1\xc5_T\x91\xf7\xc7\xe0\xc5\xc2i\x31>\x84N\x02\xa8\x1b\xca\x61\x97\xf9X\x83\x43\xaa\xd3\x02\x98\x01T{\xf1\n" "\x1f\\\x32\x04\xedO\\\x92\xf3\xaa\xa3\xb7\x1arG>\xd5\xf8\xba|\xd4q\x42\x44\xa0S\xbe;J\xef\x94\x1dT\xd1\x96v\x8e\xef\x0bG" "\xdd\xd2\x06\x9e\xef\xd0\xe4\x41\xe9\xdb\xe6\x34\x1aP\x63m\xfd\x14k\xfbK\xbf\xfd\xed\xb4\xf8\x66\x61\xc3R\x96~\xb7\xb9\xf8\xd6\x61\x18\x02}" "\xf5K\xb2\x34\xfaY\x38j.\xdd\x95\x62\xed\xb9\xe3\xed\xb7\\\x7f\xcc\x03\xe3Q,\x9e\xbd\xf3\x9f\x85\x7fQ\xf0\x13\x8fq\xa2\xff,\xe2\xb7" "\xf3\xb3\xd0\x35\x31\x9d\xc2\xbf\x1a\x9dy\xe4\xc0*-\x7f\x14\xd7\x37\x8e\xf1\x65\x44\xdc\?i\xf0x+\x39r >\xb1\x88\xf1\xd1\xac\xe3y" "\x12\xef\xf8\xcc\x9cU\x16\x96Y\xc4\x82*s`P\x1b\x90X\xf3!l\xde:j\xacx+W\xc1\x90\x35\tg\x12\x85\x1f\xa6[\xe9\x14" "\xfa\x0f\xd7t\xcd\x87\x16,\x86\xfe\xd3J\xf7\x63\x42G\x1a\xc7\x34\xae\xb1\xfb\x86\x65\x8f\xe0+\x15X\x0e\xa1)\x45\x88\xe8\xc0\xa0{\x32u" "\xbbO.\x62\xd1\xcd\x8d\x88\xb6\xbb\xa5g\xbd\x8a]G\xc9\x8e\xae\x06\x10\x8d\x0e+\"\xeek\x8e\xde\xcdW\xf0\xb5\x8b\xb5\x37\x96\x06\x36\xc7" "\xa0.\xdc\xd9N\x9d\xe6\xbf\xf6\xdcM\x42{\xe7\x9e\xd6\xd4\xe4\xcd\xedKN\x0b\x9ak\x8e*\x63\xed\xe4\xbe\xf9\x64\x64m\x12^\xad\xc9\xeb" "K\xa3]\x1b#\x13\x30\xc8\x35\x19\x06J\x34{x]\xfa>\x8c\x0f\xb9\xd4\xa1(\x05.x\x99\xba\xac\xc7\xe1\x98\xb0\x14W\xb7\x61\xdd\x1e" "\xd3j\x42\xb6\xe7\xca\xbe\xd1\x8eOY\x16\x43+\xc9\xe1\x92\xb9\x90\xd3\xaa\x42L\x8b\x80g\xd9\x8c\xe1\x1a\x84\x45\xa6kT\xe3-\x33\xb2\x0e" "(\xcf\xc4\x35\xbe=\x8dK\x11\xc7\x9c\xee\xdd\x04\x1f\x38\xf3\x8dz\xa2\xfe\x1d\x8d\x1a`\x46\xe3V\xdf\x65\xec\xea\x7f\x9ann\x33\xdd\x89\xea" "\x65W\xd6\xa8\x99\xa1[\x99u\xfc\xdd\xe5<\x44\x9e\x81\xe6\xe5S\xb4\x16\x42\xf3\xcb\x1b\xef\xa5\x14k\xcd%\x8d g\x9a\xd7.\xfc\xd7\xf7" "\x82\xf2\xfc\xec\x8c\x61\xba\xcb!\x62\xacM\x36N\xe3x\xcd\xc4#\x43KR\xeb\x1d\xffn\xc3}G\xddo\xfcq_\xe3\x34\x32\x95\xf4\x18" "\x8d\x83*\xb6\x8cN\xdf:\xea-}L\xff\x34s\xa8\xa3\xb6\x8d\xbf\xe6\xdd\xdd\xd2i\x06\x9a\x06T\x1e\xbb\x44\xdb\xb2\xb3\x45q\x62\xbf\xd8" "\xa4\xd5\x91\x0eS\xcbN\x63\x0c\x46\xd5\n\xc6\x8e\xd1\xce\xb4\xbd\x35\xa6\x1d\xb9\xa4H\xc5\x9c\xa3\xeeh\xce\xfc\x0c\xed\xd8\x39\xd3\xa2\xe7\xd6\x9f" "\x96\xd7=\xf6\xf6v;\xdb\x87\x38\xc8\xa7j\xee\xe8V\x87\xdb\x37\xaf\xb4\xcf\xf3\x80{\x37\xdb-\xfd\xb6\x44\xdc\r\xc8\xbd\xbd\xde\xbd\xa5\x39" "\xf6\xedP\x9e\x1c%\xf9\x18\xfc\x12Zx\x91\x89\xb5\xe3\xd3\xef\xae\xea\x92\xd6\xbb\xf9\xf6\xd6WQ\xed\xdb\xb4\x1f\xf2\xb6\xe9(]R\xe9\x0f" "\xc6\xda\x36\xe5\x44:\x08\x42\xb4\x82\x08q\x35\xe5\xc8K\xb4\xbb\x1fG\x8d\xc4y\x11k~\xb1\xe8\x7f\xed\x9d\xe6^\x19\xdd\xa2\x41\xc6\x84W" "\xb1\xea\xc8\xe0~*\x32\xc1<\xa9*\xdc\r\xa0\xd3\x0c\xba\x62\x03\x31\xfb{<\xfdiq\x66\x12M\xa3y\xb1g\xa1\x9a:\x43\xa2\xbfM" "m\xbb\xa0\x1f+\xb5}\xc9\xbfyvZ|\xab\"\xde\xbds\xd1\x1b\xb5I\x8f\x9b\x04P;u\x03\xd6\xa4\xa2Y\xca\x64\x1e\xa5;\x10\x0c" ";\xa6\xedH]\x7f\x1eW\x08^V\x86\x30s\xee\x32\x14k\xd8\xa1R\xb4\xfc\xfb\xf9g\x30\x04\x80\xdej\xe5\x95X\x92\xa4\xf4\x86\?i" "\xaf\x90\x31\xcd\xd2\xae\xd0\x95\xb2\xef\x15-\xf9\x1eXX\xbd\x32\x33>\x03\xf5+\x99\xf1\xbdG\xe6\x39N\x37\x08[\x96\xb6\x03\xe6W\xab\xb4" "\xcd\xa2\xa8\x1c\x9c\xdf%\xb5i\x8f\xda\xc4\x12n\xd2\x0f\x46\xf9\xf8mM,\x45&\?\x8e\xba\x1f\x63\x92\x05\x8d\xaeg\xa0\xf7\x90\n\x0e\xd7" "\xb1\x36\x9b\xfb\xee^\x66\xb7\xd2\xa5\xf1\xdb\x96G\x66\xeb\xf0{\x66-\x9ei\x34\xca\xa9v$W\x1ar\x37LX\xaa\x63\x42Ly\x7f\x9e" "\xb9\xb1\xdd\x92\xf0`o\xceJ\x9fw\xac\xba\xdaO\x63^vX{\xf9\x89\xb6\xa6\xea\xe9\xf6L\xf3\xaf\xbeL{!-\xc7\xbb\xc2+\xbd" "<\xed\xb9%\xdaN\xf3R]\x7f\xd7\x33\x8dYUwn\xac>\xb9j\x87\x03'\xd0\xe5l\x15\xb7i\xdd\xa0#[\xa1[=\x8f\xed\x1b" "t~\x85\xe6\xdd|\x06\x87\x45\xac\x65\xb6g\xa2\xcb\xa7\xb1\xc6H\x41\xf1\x81n\xf7L\xe3\xbc\x05\xb5\x7f\xae\xc7\x05\xc9&\x1e\\\xb5\xa4\xda" "\xe0\xda\xbb\xbf\x8d\x35\xab\x99U\x9c\xfc\xfd\x62\x9f\xe0\xc0\x13\x9a\x9f\xd8y\xb9\xd7X\xabH\xf5\x98\x8b\xb5\xd6\x96\xf1\xfb\xa8Y\r\x06\xf1!" "\x16\xbf*g\xe2\xd9\x15\x45\x0b_\xae\x9d\xa6\xdb\x31O\xbbgZ\xd0\xee\xc7\x9a\xf4\xf2\n\xf1M\x87\x7f\x8d\x92j\xd3\x64\x38\xd9\xff\xab\x9d" "]\x32\\\xf6\xb9\xa1.\xb4\xe8\xea\x95+\x45\xa8U\xce\x9f:\xaa\xb3\x38\xd0\xa3\\\x08\x8fr\xe5\xc6UT~\xf5\xc2h\x39\xa6\xfa\xa4\x91" "M\\\x8e\xa9Z~\xaa\x95\x82\xee\x90\xd1\xfbT\xeb:r\x99#\xc5\xba\x9d\xa1\x95\xfc=\xd4\xe9!\xa1\x9a}\xb7\x9ds\xfc\xdd\?\x45\x89" "\x0b\xfa-\xe1\x80t\x42hn\xa1\xe6\xdes;\x17gQ\x11\x0b\x9f\xe1\xa9\xc0mLx\xa0\xf3\xe3\x44.\xd8\xa5\x38\x99;\x31|N\xc7" "\xe2\xc1]\xcb\xce\xf7\xc4\x9a\x98{\x80\x0b\x87\xac\xdc\xe8\x8e!\xfc\xb4\"\xf2i\x0f<\xb6t\x1c\x0f\xb1\?\x35\xabT\x1b\x16\x66\xfc\xafg" "\xeb\xc9g\xfco\xed\"\xd9($\xe3\xafX\xef\xa8\x35.\xd5\xf5Z\xb7g\x9a\r\x42\x33\x34\x14\t\x33L\x9f\xe0\xf1xv\t\x46\x1c\x10" "\xb6.\x8cO\xc1G:h\xb2\x33\xa4S\xbd\xc9\xec\xef\xa6|\xa6q\xdbP\xd1\xac\xee\x13\xca\xf9\x18\xcaV\xb4\xd7\xb4#}\xfc\x45|g" "\x0e\xe7\xfc\xa0p\xc2\xaa\x84\x8e\xbc\x42+\xd5\xae!\x62<\xd9\xad\x9e\xec\x0e\x38n\xc8\xb8\x13\x62\xa1\t\xeb#n" "\x05*\xe4\xa8=\xc3\x80 \xa0T\x1d\x8c\x9b\"Z\x85O\xe9\n\xac\xab\x1a\xa2\x46^\x37\xea>\x31\x7f\x45\xcfvN\x38\xf3\x08\xdf\x98;" "\x19\x9f\xb3g\x13;\x42x\x64\x08[}\x0f!\n\x9c\xe8!t\xa1h\xb3kG\r\xae\xcd\xa6[\x35Nq\xf6\xb2V\x15\x65\xe9M\x0e" "\xfen_\xcc\x94\xa5\x1am\x9b\xbd\xb2\xd5\x0c\x65kX\xcb\x0c\xc1\x0b\xc2w\xf9\x9eZ\x36\xf7{x\xe3\x92\r|W\xa3\xf6\xcc\xcf\x35\xee" "\x89\xd3+\xfb\x17\xaf\x8e\x1a\xb0\x15\xd6M\xd1.\x17\x61\x66\x13\x7f\x86\x95:\xc2\x0e\xf2z\x39\xc8M\xa5\xf9\xb7\xfcZ\x0e\xc6\x64\xc4\x9b\xad" "Z;Y\xb5\\.\x44\xb6\xabZ'\xd1v\xed\x12\x9ew\x9dl\xceX\xc8\xeeP\x95\xeeJ\xc2v\xca\xd1k\x36\xa3\xcb\x9d\xd3\x44\x64\xd4" "\x32\xd1\xb0\xebS\xcf\x96\x95\x82\x8c:JQ.\xc2\xc4\x32\xcd\xca\x01\xb4\xf5\xe5\xd9g\xba\xbci\x19\x9f\xc2\x8aO\x15q\x07\xd6\xf4\x65\x12" "m\xb5\x8aj\xbd\xa8nW\x66G\xa6J_\xcf^\x95q\x04\x84\xf0\xff\x11\xdaS\xf8\x93or\x81\xb7W\xe5\xb6\x16 g\xdc{\x36\xd9" "-\x9c\xdd;\xea\xbd\xb2K\xe1\xb4)\xef\xce\x8aT\x95\xb1tzU+\x06J/\xd5\xd1\xa1\x12\xec\xbfr\xe0\x8ainM\x62\x95s<" "\xa0\x64${Su\xef\xf6\x86\x9c\xd4$\x03y\x93\x34\xb5\x03N^\xb7\x1a\xaf\xce\xdd\xa7zu;W\xcf\x86\x91\xe6*\"\x64\x13\xd7\xe3" "\x32\x1c\x61\x9d\xdf\xb3\xfe@\xcf\x9b\x34H\x38\xa6\x81\xd6\x8a\xf7\xa4\x7f\x16\xdd\x64\xac\x03\xd0\xb3\x91\x99\x32\x8e\x03\xdd\xebq\x03@!\xcb\xb5" "\xd2]Y\x97\x84\xae\xe6\x1e\x82\x0e\x8bV\xfb\xfa\xfb\xd9\x33\xe7O\x85\x88\xd8\xdc\xeb\xeb\xc0}\x92\xe1\xee\x05\xd0\xfc\xe6\x17\x9dY\xa0\x05\xcd" "GZ\xf6\xa1\xc5\xb1\xab\xa8\xbd\xf4\xad\x95V-\xba\xcbrq\x8a\xd3\xfe\xce\x39\xd3\xf0[p\x1evZ\x34\xc4K\x96*\xa1\x45\xde>\x39" "\xcah\x94\x91\xb7\xa9\xedk\xde\xb8\xeb\x34\xae\x95\x80\xe8w\xc6\x41\x36\x1bk\xc3\x86\xfc\xc5\xda\xa2\x10\x64\x96\xb1\xf6\x9d;\xffL\x34\xf6\xe6" "T\x0b\xca\x8d\xdf}|zi\x0cm\xf8\rmt\xe0\x1a\x66j\xbb\xf7h\x94pZ\x1c\x66\x91\xda\xf7\x87\x37\xfc\xd3\x8e\x05\x0f\xf1X\xa0" "\x45\x87\x42|\xf5{{,\x44\xad\x13\xa6\x8f$\xbc\x9f\x95\x96\x08\xd9\n\xf7q\xa4\x96\xeb\xba\x34\x17\x91\x13\x86\"\xc2G\xa7g>@\xc2" "\xf9\x90\xc4\xf2\x07P\xcf\xc1\x31H\xfc\x9a\x38=\x0bZ\xffH\x45\xab\xf3\xfb\x9c,\x16>\xd6\xc9V\xd6\x31\xd8[\x9c*\xd1\xec\x87\xc2h" "\x38\xb6QY\xdf\xef\xf2\x45\xd2]I\xf8\xc6\x17l\xd5\xb4\xd2}%(/\xc8\x36\x93\x33x\xe9\xca\xadr\?>\xd1&\xf6\x43\xf8\x38\x08" "\x97\xcf\xfe\xb4\xcc\xf8\xd4\xaa}\x84\x37\xb3\xc8\x92\xd7\xb4\x1d\x13*\x38\xa6\xa4\x85\xe1\n\xb2^\xdfL\x97}\x86\xff\x10rL\xd1\x37K\x9c" "\xf2\xec%\x86=\xfb\x94\x9d\xc2>g\x41\x95\x8f\x46\xfb\x15\xbb\x18}\xfas+\xedj\xfd/Gk\x90T<\xcb\x95\xa2\x45\xc5\xb7\xf8\xb3" "!\xf3\x9c\xd5q}\xf9\xc8\xd1}\x85\xbb\x02\x82\xd2:\x31x\x90h\xe5{o\xd0\xb2\x1e\x90j~m\xff\xa7\x8d\xd4\xb4\x9a\xed;M\xbe" "\xe9#.\x84\xd3\xce\xbe\xa9\xeb{\xb1S\x13\xb5\xda\xfe\xec\x9b\xba\xd4\xf1P\x8c\xb5\xd3\xdd\xd9\x37\xc3S\xedL;\xcb\x62Q\xed\xc4\xc5\xc0" "\"\xd2X\xd1\xe7R\r\x10\xc1\x9a\xd2\xb1v\xc8\xc7\xb7\xd2\xef\xea\x90\xa2\xdeq\x9a\x86\x16\x98\x32\xf1\xb9\xa4\x11t\x99\xef\xff" "\xd2u\x9e[\xc9\x34\x41\xbb>u\x31 \x41\xc4\x8c\x01T\x32\x06\x18@\x94\x0c\x07\xf3\x39\x81_\xfb\x14vU\xddw\x8d<\xef\xb7\xf7Z" ".\xaf\xaa\x01&\xf4t\xac\xae\xae\xdeu\x1ev\x9f\xd7\x34t\x37\x31KWok\xc8\x34t\xc9ULli\x9c\x8a\x19\xb2\xe0L\xb6\x0f" "\xfa\x85`\x83\x03\xf3Wg\\\xee\x43\xb4Mi\x84\xb6\x88\\hK\xe2\x84(\x81\xed\xdf\xad\x35\?m,\x14W\x96\x65x\x88Y\xc5\xba" "O\xd3)\x39\xe2V\x91\xbd\x46\x13'\x33\xf8\xbcQ\x9b\x43<\xe1\x17Nz\xae\xa7\xfb\x61\x9a\x16\x9e-\xe1\xa6\x07\r\xfd\n\x15\xd9^\xa8" "\xc8\x82\xa6\xa2\xee\x0f\x89\xb6\xc5\x34\xb4\xee*\xb2\xa9h\xc3\x45\xa7\xce].\x85\xd9\x07\x10\xb3\x30\xdcsR\xf9\xe6\x8c\x97\x8cJ\x66\x9a\xf4" "\x98\x43\xa6\xaeis\x17Y\x32\xdb\xd8\xe6MX\xa6\xee\xf7\\\xe3\x63\xb4\xde\x9c\xd1\xf7\x04\xae\xdd\xa2}\xf0[S\xa6\xf2\x06:\xcd\x15m" "\x0e\x8a\xdaX\xe3-,\"\xc1\xa2\xb3\x35X\xe6\xe7\xb6R\xba\xce\xfd)\x95\x43\xf0\t\xef'z\xc5\xdd!\xc2\x97pP\x0c\x07\x39\x9a\x43" "\xdb\x1c\xb7\xb5=q\x39\x63&\x44j\xc1]U\x89l\xc4\xa9\xad\x36\r'\xed\x08v\x41\x65\xb2\xb5\x12\xd0\x86\x33\x92\x30\x7fJ\x9e\x91\x0f" "$\x92\x03\xf1\xa0\x85\x0fK'{Lm\xce\xca\xb4\xb1\x61\xbd\xf0\x05\xaf\x35~\x45\x1aq\x90\xab\x64g\xa7\xcd\xf9\xa4\x36\xab\xd6\x36v\t" "\x13\xda\xb6\x94\xc2\xe5\x83\xd3\xdf\x8f\x88\xf1Gz\x94\x66S\x15\x93\xdc\xf0O\xc4\xeb\x8eW\x07\xe4\x1d\xb9p\x46\xc5\xcd.\x83\x37\x9d\xd8\x96" "P\xc2\xa3s\xa7\xa7\x42r,%g\xc1\x61Q\x9b\x03\xc4\x36gW\xda\x08\xd4\xaf\x9c\x38\xe3\xf5\x89'.\xd6\xed\n\xeb\x07N\xcf\xbd\x9c" "si{=\x90\x34q\xeb\xacl\xdb\x9c\xf4\x16\x36H~\xce\x82\xc2N\xa5pJ\"\xd9\x38Ll\xb3K\xac\xf4\x9c\xcf\x01\xa1\xd2K\x00" "\xfb;J\x7f\xbb\"\xee^\xbe\x38\xc6\x36\xcdv\x9b\x15q\xcb\x04\xc1|~\x9b\xa3\xba\xf6\xee\xe0\x80\x44\xf6\xf1\x34\x85w\x90\xf0\xfe\xc1\xb9" "\x97\xe2\xec=\xb5\xb1HG\xd8\xc0Y\xb1\xf5`\xdd-\xd2=Nw\xf4hY\xea\xd1[\xa1G\x9bZ\xef\x17\xe6\x46\x65\xd8\xb6\x87\xe9\x85" "'\xc7\xce\x10\xdd\xa6\x1e\xfb\xca=\x44\xadS~\x39i\x1c\xeb\x85\x05~\x15\xb6\xe2^X\xbe!\xa7\xe0u\x1b\xb4\xe8\xab\xc2\xea\x8b\x13\x9e" "\x83\"\x36yV\xf3\x62\xafs\x11\xab\xb0\x33\x07\xbb\x05\xe7\xdf\xa1\x0b\xe7\xdf\xa1K\xb2\xe7\x8c\xd1\x65\xee\x61\x35\xa7p\xb8 \x37\xa0\xdf\x00" "zP=\x1a\xfd{\xe9\xe3\xaf\x1bN\x96\x44\x11\x87NN\x86\xa8\x18\xb6\xba\xa9\x86j\xad\x17\x1d\x38\xbb \xaa\x39\xa5\xf4\x92\x11\xa0M\xb4" "\xe3\xb2S\x06\xc5~\x9f\xa2\xc5\x9f\x9d\xdd\xfd\x0fGR=l\x9d'\x44\xdd\xd8\x43\x88H\xa3\\\x07\x31<\xa0\xd9\xea\xedz\x0f\xa1\x45\x84" "\xdf\xbc\xaa\xed{)\\\xdd\x38\x43L'\xa8\xc8\x46\xcc\xc4\xfc\x02N\xec{\x1aM\xe7v\xe0\xfb)\x15\xb7\xa7\x08\xfaP\xef\xc5\xe7\xa7\xce" "t\x1b\x01\xd5\x86\xce\xbf\xe9\x10\xd5\x38v\x32\x11\xd9X\xc5\xe4\xf4\x1d\x11\xbf\x45\x43u\xd8\xc3Z\x0f\x63\x98\x97\x1a\x65\xc4\x19\xd9\x1e\xe2\xe8" "\x08[\x0bgx\xe1\x86o\xd3\x86\x05\x84\x97\x81\xc6\xf7,\xa2\x1c\xf5\x34\x8f\?x\x32\x18\xbfzI\xee\xc4\xc9NJ\xcfv\xb1\x41N\x63" "\xe7\xb1\x87\xb0\xcd\x42T,=N\xfa\xf6X\xc1\xf4\x38\xf9\xab\xdbw:u\xcb\x01T\x9f\xa6\xb5\x46\xf2]N\x37\xdb\x01\xe6:\x11=\xb3" "\xa8x\x37\xdf\xff\x00\xcd\x95\x89\xb3\x93\xe8\x81\xd7\x46U\xc2\xcd@\x8d\xda\x03:\x9d\xfci%\x38\xde\x9a\x16\x96+\xd1m\xfaM\xb5\x0c\xee" "}\x36\x1a\xd1\x41\x44\x35\x35\xa0`n\xd6\xb5\xc5\xcd\x9e\xc6\x31Vow\xc5\xef\\\xe3Y\xb1\xe4\x42\x88\x81\xb7\xd2\xeb#\x15\xb7\xf5\x08\x96" "\x00\xd5\x10_\x15\"\x0cK&\xb6\xee\x10\xe6\x00\x9a\xf9n\xb8\xe6\x89\xa3\xe2\xdd\xa9\xbf=\xd5\xbe\xd2\xcb\x45\x93\xa5N}\xa1\xb1\xe0\x01\xf9" "\xdd\xde\x01\x44\x01\x16\xf1\xe5\xcb\xb9W\xf2vu\xabL>\xc3\xd3\x05h\x0b\xa2\x84\xf8\x9c\x41\xdc\x85\x16\xdc\xad\xfe\x89\xbd-\x85\x18U}" "\x46\xf7vW\x9fXG\xa1\xb4\x46\xf6\x93\xcd\xd6'\x07(\x9f\x1c\x62|r\x88\xf1\xc9.\xf0'\xdf\xe4'S\xf0sW\xff\x06\xd1\xeb\x1e" "p\xd4\x36\x90\?\xa7\x06\x37\x84\x19n\x88M\xfb\x84\xf3\xa2\x86\x03\x82\tl\x08\xefJ\xa1\xedp]\x1f\xc2y\xcfH\xab\xc5\x90&=\x65" "\xf4\x34\xe6M\xab\x86MWL\xe4K\x1e\"\xee\x8f\x91o\x64\x18n\xecn\x86\xd1\xd1\x07\x88\xae\xd8\x90\xf6\x7f\xe1\x1a\xec[\xa6\x1f\xd2\x07" "\x66\x98\xa0\x8e\x1c\x62\x97@#\xab\xa2!\xb6}\x14ns\xa4\x15\xc3![M%\x9b\x38\x15\xfd\x42\xbb\xc6\x35h\x9b\xe1\xd4\xa7\xb4T)" "\xc3\xd9YT}r-:~I\x86\x96\xc4S\xd6\x1a\\PR\x9f\xd2\xe1\x64\x13\x06W\xd1\xf3m\x98\x9d\x42[\x8fl\xe7L\xbd\x64#" "\xa3\xf1WN\x03\x88\x8bsLG\x35\x32\xe1U\x19\xb6v\x11\xad\t\x13\x0e\xca\x30W\x89h\x36\x19#\xcc\x35\x8d\x0cL\x8c\xc2\xfa\xd4\x18" "\xdbj\xc6\x46\x66W\xd3\xdc\xd1\x38\x46\xdd\xd3\x38\x46\xf8\xd1\xc6I\xd8\xab\x1a\xb1Gy\xe3\x44\xfe\x9c\x61//\x7f\xa9\xf6\x36\x95\?\xd5r" "\x89\x8d\xd3\x1a\x45\xa4V\xa3\x88&]h\xfeI\r\xae\xab\x36\xc2T\xd1\xa0\xa3v\xa3\x18g\x0b\xa0MS\x08\xcd\x15\xaf\xc1\xa5\xd0\x8d\"" "\xc6\xcb\x8d\xe2\xce\xc6\xaf\x8d\x12\x9az!NY\x42|\xc6\x46)\xfe,K_\x17\x36N\xd1\xd6\x1c\x06\x37\xae\xe0N*\\\x9c\x1a\x11\x06" "\xbdq\x15[[\xda\xb8\x82\xaf\x8fQ\xaa\x96\xe4\xe8l_\xb3\x9d\xf3R\xed\xf4\x10\x1an\xf9\n\xe5M\xd8\\\x39\x93\xe6,\x31\xf7\x90\xc6" "\x15\xea\xa9\xc6\x1d*\xa7\xc6\x1d\xd3\xe2\x8eo\xed.lW@<\xc8\x1d\x1c\xe0\x1bw\x98\x35\x36\x86\x87%\xb4\x04\xa6\x45\x95\xcc\x9f\x86s" "\x61G\xda\xc6\x1d\x42\xbc\x1b\xe1|\x61\"\xda=\x13\xe1\xc8h\x62\xb2y\x0em-\xbbiR\x33\x85\xd7\xfc\xb1\x8d\x07\x84V\xe9\t\xfbW" "N\xa6\xe5]<\xe0W\xad\x03\xac\xb4\x9fT\xf9\x8cU\xb8\xcb\x34\xaap\x37\x14\xe2\x19\xab|\xc6*\xfa@\x42\xab\xd9\x1aU^\xa2\x8a\x01" "\x81\xd0j\xaa\xc6\x87\x0e\xb4\x83<\x1f\xe5\xe3w~\x8f\xf1W\xe3#=\xb4\xbc#\xdb\xe4\x32\xbc\x64\xb9\x16mu/\x15\x34\xd6w\xa8\xc6" "\xdfn\xbe\xe1\xd2k\x62|\xdbN\xbfn\x9d\x66\x65M\x1a\xda\xf4\x12\xdb\xda\xee\xe1\xcd\x35\xcc\xd8\n\xb3K\xf0\xb4\xec\xf7\x14\xe6Z\xce\xa8" "\xbf\x84\xc7\x87j\xfc\x61\xfe\x46\x1d\x91y)\xe9\x61\x38\xc3|\x61O\xdc\xfb\x82h\xd2+\xc3\xb6Yr\xa0\xf0\x9a^\xc8\xcc\xfd\x46\xc9\xd4" "\x88\x7f\x08\xad\xdcN\xc5\x8b\x19\xa2\xaa@\x1b\x1d\xa0\x92\x87\x66M\xbd\x8a\xfc\xa5\xf5\xa6\x95\xafNi\x02\xd0wV\x8d\x37p^L\xb6\xfc" "\x41\xf9\xf2w\x1d \x92\x9fi\x98\x84\x81\x38\xed$\xf5u\xaam\xae\x92i\xd3\xb5\xa8XH\xb2\x8bT\xbb;\xc5\x88\xcd\xb4x\xd5\x83\xe9" "\xd6\xb4$\xe8\xec\x9d~w\xff\xf5\xa7}\x82\x17\xd7\xe0\x65\xc1\x99\xbe\xa2\xcb\x02\x42\xd5\x89xu\x96\x0c/(\xf2\x87OL\xc4\xda\x63\x94" "\xef\xeen\xf8)\n\xe3\x07\x8c\xa1\x42\x64X!\xf5\xfe\x85\x33\r\xa2\xba\xa7\xc1p/\x07\x06\xaf:\x0fy\xc4{\x62.\x13\xa6\xf7\x36\xf8" "J\xdf\xb0n\xbd\xc1\r\xdd\x45[\x1d\xa8\xe3\x8e\xbf\xe1\xd5\x11\xc9t]\xdf\x86\xe5\xbb\xf4\x97\x9b\x03iG\"\xeb\xbf\xaa\x96\x01\x99{\xc3" "\xedZ\xf2\x34\x9c\xbc\x1a\x1f\xd1\xd1\x17\xb6\x32\x17\x31\x7fM\x36\x9dQ\x61\xe5w\x16\xe5\xb7\xc9\xa0\x95\xfe\xacp+\x05\x8f\xa2t(\x8f\xd2" "\x0f\x8aW\xb6W\xa8\x86\x87\xc4\x10J\x8f\xdd\xc7\xb7\x0f~w\x91$@\x61\x94jg\xa7N\xec>\x0c\x8d\x39.:\xcf\x91\x32\xa6\xce\xa4" "\xbf\x39\xef\x92\xbd\xa4t\x91\x1e-_\xe8j\xc7\?\r\xeb\xc6\x45\xb4 \x35\xc2\x9b \xba\xba\x84\x95V\xb5\x9fp\x30O\xbf~\xb3\xd9\x1d" "\xfc\x9d\xca\xfc\x30R\xedn\xbd\xeb\xdf\xa0\xd3+\x9auz\x84\x66S\x16\xf6\xdb\xba\xdd\xfa\x10\x89\x8b\x05\xa0\xc2q\x1d\xa6!\x11\xbf\xd6\xda" "s_\xa0\xe8\xa9\xfb\xdb\xcd&=\xf5\x14\xd9G\xba\xd1{\x85\?\xceltk\x43\x0b\xb3-\xda!\x99\xcb\xa6_\xc8\xe1\xd5\x62p\xa3\x1c" "K^\rO\xbeS\xed\xf9\x36\xca!\xe9\xe2\xbb\xcb\xf4gO\x97\xd2\xa8y\x1a\xc7OH\x88\xd8\xa6\xf0\x84\x9d\x8c\x13^\x06\"v\x87\x18" "\xb2\x8b\xf8~\x44\xd6\x9c\xac\xec\?\x62\x8b\xba'\\^\x92/\xd1x\x99^t\xd9\x95\xac\x93^t\xfdH\xa2\x84\xa0\x7f-<}\xf7\x04" "\xdd\x0f\x03*\x9a\x8dt\x84h\xde\?\x92\xd6\x45tp\x10\xb3\xca\xa6V~\xa5\x86\x34\xc6^\x8f\xc2n\x33\xbamz\xceL\xde\xf3\xfe\x30" "\x9a\x91Sq@n\xfd\x8e\x93\xe0\x38\xfd\x94\x15\xda\xee@~\xbb\x81\x95\x41\xb5\x0b\xa7t\xcd\xfdg\xbb\x83\x15\x98\xa9HyH\x8f\x1e\x1e" "$\xc1\x34\xd5\xacG-\xac\xe0\xaa;y\xd6\xc1\xa3\xdf\xa1\x64\x01/\xe0pp\x11>\xa1xx\xed\xac\xf5n\xb0JO\x87.\xc4\xc7\xee" "m\xf4\x97{\x35\xf8\xa6z[\xd9\x86l\x8d~x\xbat\x62\x15\x83\x89\xfe]V\xe9}\xa9=\x8c\x91mT'\xb4\xe8\x12\x8d>sX" "\x9f\xdf\x9f\xb0\x9e\x9bJ\?\x90\xb4\xfbZ%-\xed\x14\x36\xa5/Z\x04\xed}\x37\x33\xc8\x93\x42\xf3\xa9T~\x39\xd3\xaf\xd8\x08\xc0\xa8>" "\x96\xadSh\xb6\xecO\xe9z\xcb\x89N\x84\x89\xb0\\\x43\x1c\xfc\x89\xd3\x36v\x41\x37\r\x81\xe5!\xda\x0b\x34\x11^\x08*\xfe\x80\xf9w" "'\xdc\xfc\x44\xf4\x93\xdb\x92U\xa1\x19;\x95\xbcq\xb3|\x0b\xe7<\x85Y>\x84+\\\x10\x36\x64\xa1\x65V\xe1\x15\x1e!\xba\xeb\x83\xa3" "\xa1\x31\xb6\x0e\x9d\xd0\x86i\x46\x98\x62\x45\\\xd5\x9cX\xa5\x02\xd1v!j\x66\xd0\xafl\x1e\"\xf4\x94p}\x9d.\x91i\x1e\x62 +" "\xb4\xe1\x94\xf1w\xd1\x45\xd3\x64Zxq\xf6\xbb.\xc1\x8a\x61\x07\xa2\xda\x05\x86\x8e\xd0\xfa\x1d\x8c\xc8L\x93Z\x08\x9b\x81\x43k\xd0\xb4\xaa" "\x1an\x42\x86\xe8\x08T$\xe2\xd3&\x94\xca\xca:\xf0\xa2\x99QT\x88\xc7<\x64\xf2(\x31\x64k\x1e\x32\xa5\x0e\xa3\xc1\x9d\x13\xb3\x8f." "\x62\x19\xbfh\xe3\x17\x63|\xb8\x02y\x13\xf1\xd5\x02\xb4\xd5\x10\xc2j'|\\!,\x8ch\x0b\xdc\x38S\xf3\x30^\xe3\xce\x92\xe3K\x66" "\xc2\xc3\xa4\xf9\x95\x34\xe7I\xb6\xb6\xaf\x99]U\xb4n\xd3\xe9O\x88@\xb1\x46\x19\x94\xa6\x11)\x9b\x87\xf0vo\x9e\x30\x8f\x9e\xb0<\x9c" "\xa0\x42\x11\x9a\x8f\xb5\xd0\x8a\xbc\xf2\x9c\xe4\xe7\xd6O\x15\"\xff\n\x03\xd0\x66\x83\x9a'\x98\rR>\x82\xe6\x95\x61\xd4I\x9a\xe3&\xb4\x93" "\x36\x39\x05\xb3\xe4)\xae\x82\x16_X\x9a\x39\xe1\xcf\x66\"\x1c\x90\x45,\x07hh\x44\xbc\xbe\x04\xcd\x0bUh\x96\x03#\x33\xd4\t\x0b\xae" "R\n\x06\x86\x14\xd0\xd2\xd2\xa8\x1a\xfc\xc8 \xba\xe3!\xb4\xe5$}\xc8\x16O\xd9\xae\xc0\xc4\xa1\xe2\x1a\xfc\xe0G\x16(R\x38\xe2\xe9\x66" "]puH\xce\xc1M\xc5\xe9\xaf\":\xc5W\x98\xe9N\xa2<\xae\xca\xac\x7f\x82X\x93\xcaOr\xe1\x94\x0e\x03&\xb6\x44\xab!\x91\x30" "\x0bm\x44\xdd(\x62\xaf\xeeT\xd7o\xff\x42\xaf./-\xd5\xfaxo\xd1\xe0\x1a\xb4\x99 \xe5\x04\xb4\xde\x86pR\xc4\xe6\xe8\".y" "Z\x1b\x10\x37O\xb0\xaf\xa4\xd0\x02\xf4\x08\xcf\x97\xf1\x15R+\xe6O\x30\xffm\x64\x45\xac\"\\X\\L\x36\xd9T\xdb\\\xef\x0e\x32{" "\x1f\xabG'\x33\x43|\x17\x38\xc3\xd2\x9dg;,_\x12\xf2\xad\xaamt\xc6\x9f\x9bUT\x89<\x86\x39x%\x1e\x03\x31\xfe\x85\xedg" "I%\xc4\xa5\x33M\xfa\xb4{\x9a\xbc\x9dT{\x9b\x86\xe5\x8f\xa4\xc8\xf3\x0f\x90\x35\xe3\xaf\x02\x02\x95\x88\x38\x41&\x88\xd7\x03\xa7\xe7\xce$" "St\xca\xd5<;\x8b&\xef\xe4O{w\xc2\xa4-\xe2\xc9\x8dS\x7f\x66\xc1\xa6]\x83M]\xb4\x1c\xde\x03\xe6\x89\x84\xe6\x83.\xe4K" "@\x0f\x46\xd8\x1c\x91\xfc\xfe\xa0\xe1\x84\xe7\x95\x89l\xadT\x84\xe5K\xc5\r\xc8\xc7\x13\xa2\x39n\x9e\xa0\x8b+\xe4;K\xd6k'[+" "\x15=\x07\x8b\x98\xa6\xc7z\xed\x39\x19\xd6>\xe1\xf6\x82\xb4\xa6\xfa\x04\xfd\x19\xa1\xd9\x45\x8cl\x11M\x64}\x01\x11\xe3x\xd3\xfc\xaew'" "\xb3\xf0\xba\x1f\xbf\xe1\x06\x31\x8f$\xac\xd0\x1e+\xe2\xbd\xa4\"\x8a\x18\xa6\xdf\x8d\x98\x1e\x84\xc8\xb2/\xa2\?\x81\x88\xfe\x04*\xde\xf4\\\xf4" "\x04\x11\x11\xb6T\x11\xdf>\xbd\xfe\xd3\xf0\xf6\x7f\x95\xd8\xffY\xd9\r\\\x85\xad\xc7\xf8\xa9\x00\x87\xfd\xe6Ut\xfb\xa4K\x37\xcf\xed\xe5]" "%\x1b\xfb\xee\r\xeb\xe5\x9b\xe4\xc8R\xf3\x16\xb1\x62\x9b\xb7p@\x30\xc2~&\xe2\x13i[\xf4\t-\x92\x84\xd1\xbf\x82\x15\xc3\xcd\xdb\xdd" "\xa3\xbd\xef\xfb\xb0\xf0\x14\xdd\x05\xffs\xb4\x8c\x32\x8b\xe8\xcaZ\x90\xfb\xf8\xe6\x43\xde*&(\x44\xb3I\x87\xe6\xfd\xae\xd3\x8b\x86\xe5\xe4\xf0" ",\x39\xcc'\x17\xe7\xf1\xea\r\x36{\xf9\xe4\xed\x33Y/\x93\x43{\x1d\x9c \x10\x8e.\xc2\xe1%\xd6\xfd\x88\x36;JJYl\x38\x65" "\x9a\x88r\x80Z\xc7\x99\xae\xa7\x33\r!\x44M\x44\?\xb3\xf9\xc0*\xf2!\xc9=\x83\xf5O\xd0:\xe7\xca\x16\xd8\xb2\x66\xf2\x81Wl\x62" "\xc0\xdfl\xc1\x07Kh\x66\?\xa1\xb9%\t\xd1\x87\xe0\x8e,\x42\xdc\x93\x12\x83\xd1\x66\x8b\x97n\xc1\xa2\xd4l\xc1\xf9WhK\xf4\x8d\xfe" "\xab\xc4\xf6\xc5\x13\xd6\xdf\xc8\x0f\x10\x05Q\x88\xbbH\x9aY\xd2N\xdd\xc3|w\xb3\x87\xd9\xdc\xe6\x88m\xce\x08\xeb\x00\x84\xb6x\xd0\x08\xff" "\xa9\xe6\x08V@!\xba\xbf\x13\xcc\x45\x34gp\xe2\x30\xa6\xb3M{\x1as\xab\x1e\xe0\xc9g\x08\x04%\x34\x87\x38#;p\xb3\xb0}\x03" "\xda\x02\xc7\xe6l\xdf\xc6\xb0\xa7\xc1\xc6 \x07\xd0\x11\x9e!\x44g\xd3\xfb\x92\xb3\xf8\xa4\x0bZ\xd4j!\n\xea\x0cvM\x61\xe3\x8a\xbc\x8b" "\xca\xe7\xec[\xd2J)\x34K\x8c\xd0\xe2\x82\x37g\xb0Z\x1a\x31T\x13q\xdc\x02\xd1\x0fV\"\x18Vs\xce\xee\xd0\x9c\xdd\x9b\xf9\xef\xda" "\x9ev\x0e#\xaf\x10\xfd\x8a\x39\xb6\x88\x32\xb2\xf4\xab(Y|W{\x83\x86\xf6|\x1e\x9dY\xb3\x34g\xab\x32g\xd5\?Ol\xfd\xa2\x10" "\xd9\x63\xce\xbc\x30g\x45\xe9}:\xa5\xba#Z\x34\x03\xd7X\xf1\xcd\x31G\xde\x9c\xb3\xa2\xdah\tk\xbf \x36[\xeb\x10y\xb4U\x88" "\x0e\xda\xc6\xb8\xa8\xbd\xf9\xd6\x85.\xe5\x31\xd3\xb3\x0cIm\x31\x65\xeb\x02-s\xeb\x02\xfe\x06\x46\x18\xcd\x44\xb4\x90 \xad\x8b\xddu\x06\x1b" "\x13\x8b(Oi\xf1\x11\x44\xb4\x91t\xeb\n\x19\xc7\x88(\xee\xad\xab\xf0\xf2\x06\xbc;N&\x9fX\x65#Z\xfb\x0e\xdc\xbe:\xe1;\xd5" "\xba\xc2l\xad\xd0\xe2\x43\xb7\xae\xe2\xce\t\x02 \xb6\xae\xcc\x01\xf0\x11\xc5\x46\xb4Ik\x97)\xfb\x19\xe5\xe4\xcet\xde\x8e\xda\x39\x06@\xa2" "\x99/\x42\xeb:\xb4mJZ\xac|Z\x8f\xba\xd1\x82m\xf7\xd1z\x89\x97\x1d\x1e\xad\xe3]\xb7\xeaIS\x93\xb5\xd5\x86UQh\xb3Z" "\x42\x33\xa9\t\xf1\xfdv|\x37\x30\xc2\xd9\xb9\xd5\xc6\xebh\xbd\xa3\x1f\xd7z\xc7\x9c\x9d\x30_\x8a\xae;\x88W#\xda\xf9\x12\x94\xbe\xa3\xd9" "'Z\xefL\xfe\x0f\xde\xf6$i\xd9\x9b\xfc\x91\xfa\x1f\xc4\x05\x95\xe8\x96\xb7~\x30\xfd\xd2\xfa\x89-r\xb5Q\x12\r\x95\xa3kX\xeb\xdb" "\xfa\x41\xfb\xd9\xceH\x42(\x8f\xe1\xd2\xa4|\x03-<\x9d\xd0\x62\xe1\x1b\xd1\x1e\xb4\x8f\xa3^\x01\x1cm\x8c\xe8\x0e\xb7\xb9\x9d\x63\xfbxw" "\xff\xe5\xf4\x9f\xec\xbb\xd8\xb6\x9fQ\xd1\xb6_\xe0-!\xb4\xa2'\x34\x9f\x81\xf6K\x64\x13T\xc6\xb0\xd6\xc1L\x36\xb4\xd6\x34\xaaL\xa1\x99" "\x17\x8c\x64p\x1b\x08\n-\xc4V\xfb\x05\xd5\xa6\xd0J\x00\xb2\x7f\xfb\x05\x16\x8c\xf6\x16o\x41Y%\x87\xe0\xfc\xc8\x89l\xa6\xe2\x05Yw" "\x86\xf5\xfb=\x91O\xb3\x85\xeb\xa5\xf2\x93\xe4\xf1U\x10\xe6\xde\xd2O\x37]#\xd6\x62\x18Q\x8eU{\xa9\x80\x98\x9e\xa3\xfe\x8c-" "Z\x45l\xf0\xbd\xd9\x02z\x61\xab\xecL\xbf\xdd\x62\x36\xb5\x81\xb2\xf2\x9f\x84\xb7\xb9\n\x61\xfb\x94\xcc\x39%[\xa4),\xfd\x86R\x17s" "\xd2\xaa\xbd\xe8\x04R\x31\xbf;\xe4\x1b\xf1\xd7:\xc8\xeb\xa2\x86\xf2\xfd\x9f\xf6\xdfL\xe1\xfd[\x88\xad\xbb\xf0i\x9d\x04\xfd\x7f\xbf\x11\x35\xb2" "\xa8\x66M\x8bo\xbeu\x9f\x8e\xffU\xa6\x06yt\x62\x44\x1c\x05\xe9I=\xc1\x46#,\xf4\x84\x37\xa4\x1d\xd8\xfbNTi\xc3\x8f=\xd5" "\xccvk\xdaN\x13\xc5\xb5\xad\xd3\xeb\xa3p\\I\xcf\x33\x66\xee\x1a\xb3\x14~\xf1+_\x43g\xfaU\x8b\xfe&\x94\xd1\x8f\x1f\x9a\x1d\xa6" "\xe2\x9c'Z\x14\xc2\xfc;\xc2\x66\xaa\xc6\x07]L\x9dXO'\xe2\x8aoyUqJ\xc6\x0c\x87\xab\xb4<\xee\x1dH\xb3\xf5\x9a\xe5k" "\xc3\x93l\xa6N\xf9\xa2\x89Q\x0e\x99\x12\x93;\x42y\xc5O'\x88_#\xda\xd5\x95\x64o\x04U\x16\xed\x96G\xefN\xc9 \xd4\x45K" "\xabT[N]\x8c,\xf2\xa5\x8as\xa7W\xd7\xea,tz\x80\x9e\x0e\x34\xd6\xaa*j\x1c\xa5\x1f\xd7\xa2\xe7\x8c\x34\x0ei\x00Y;\x16" "\x17K.j\xc7\xeb\xf8\x32>\x87I-\x9a\xdc&\xc4\xf6\xca\x19\x35:.z\x15\x10}" "v\x9d\xe1\xc5\x31\x62Q\x43\xdbK\x92\xcfn\x92\xb9\x89\x9f\x98r}\xe9\xebT\xc3\x03>\xcd\x80\xb7>\xe2\xcb\x1a\xf1[\xa3Wp\xfc\xe0" "\xdc\xabG\xa3\xf1\x97\x14\x30\x04Mos\xb5\xb0\x90\x35\x85\x30}i\x93\x62\xfa\x9a\x44,\x1f\xa6\"\x33\xa6\x88XZ\x05\xb1\x96O\xc5\x66" "z\x32\x0c\x66L\xc4\xe8\xd1\x44\x04\x36W\xf1)\xf9~\n=\xb1\xbf\x99\x80\xb3\xc0\xe9\x05\x32\x9a\xcd\x30\x06\x83\xe8\t\x38\xbfs\xa6_\x9c" "\xdf\xa5/j\xa3\x0f\xba\xd7M\xd8\?\xe0\xe5\x05&\x33\xe1\t\xde\x45|\x8a\xf4\xd0(\xd9\x01\x32K\\\xee\xc7\xf9\x07O\x15hQ\xee\x1e" "\x9b\xa5\xa4\x07X@\xa8\xf1\t\x10LX\xc8T\x88o\xdf\x93\xf3\xb1\x8bR\xea`\xfcU\r\x15t|\x87\x46\x0e\x83|!_\xbc\x10k" "\xa7T\x9cx\x95\x18w\x0f\x9c\xfe\xd0\x1a\xfe\x43\xa3=\x05\xe1\x8b\x1f\xe0\x15\xde\x91\x93\x11Q\x44\x38\xfarj\xdd \x63\xe5\x93\xf9\xff:" "\xb0;\xaa\xfb\x31\x8c\xee\x44\\\x34\xa2\x17\xde\xc9\x12\xf9 \x39\xf8\xd9\x1d\xa2\xe5L\xf2\xb8\xaa\xf4\xb5\xc2\xf3\x13\x8a\x38/\x8c\x61\x46,\x9d" "\x16\x91\x39\"\xb9\xe8\x45\x97\xe9kJ.\?\xb0_\xab\x88W\x0f\xffs\xb4LrW\x1a\x64\x30\xcf\xf3T\xcaQ\xf0$\xa3\x38\xc9\xd6\x18" "\x1d\xd9\xb1\xf8\x61\xa3!\x63\xb2\xd5\xb0=\xd1Y\xbe\x9bM\xbcx\x0f\xb7\xdfp\xef\x97\xaf\x05K\xa7\xa6\xff$\xd5\xf4\xbfk\xe6\x1a\xadz\xdb\x88\xfaZ" "h\xb6.\x61\x01\x97\x8do\xf9\xb9\x45\xc6\x16V\xf1^P\xdd\tm(\xab\xec\x82\xd6\xef\xea\x64l\x13\x85\x12\x62\x36\x89\x96\x39\x03\x8f\x91" "\x34\x18\xad\x08{\x07\x9a-\x8e:\xae\x85\x9d\x07\xf8M\x8a\x16\xf0\xb7\xb6r\x43h\xdb\xe7\t\xa7\xb8\xb2\x7fow\x85\\\xb7\xab\xe0\xc9v" "\x8fx\xb1\xeaG\xcc\xf7\x02/Z\xa1\xc5\x64\x33\x62\x1a\xa5s\x84\xe1\xb1\x11\xe5\xa4s\x14\x7fZ\xd6\xca\xc2\x92&\x34\xffY\xa1Y\xd4\x84" "[\xe8\x61\xf6)\xaa\x1d \x92\x8ch\x66\r\x31J\x13\x84I}h\xdb\x65\xaa\x99\xf7\x84\xb0:\x94\xa3\x18R\x88\x36\xa8\xc4\x99~\xdc>" "H\xb5\x65-\xb4\xdd\x01T\xe3\xb5\xa6\r\xf5\xf5\x99\x15\xd5p>\x38\x43\xccq;\x1c\x1el\xf6\xb4\xff\xf5q\x14\x64\xf6\xb4\xf8u\xe2\x1a" "|.\x85\xc8O\xd9\xe8\x05\xf7\x18\xbd\xce\xc0\xe1\xc4\x02y\xfd\xb8\xb6{\xdc\xa4\xda\x18w%\x1d\x8b\xb8\xbb\xc4\xa8\xa1\x93\x95\x87\x00\x9f\x0e" "\x35\xbf\xdb\xe8-\xd5\x06yjY\xa7\x1e\xcd\xb6\\\xe3\xabRQ.\x84^\x83jwN\x96O\x15\x99GM\xb4\x15\x08&\xa2\xe2\x12\xb1" "\x86\x84\x84\xbf\x8b\x30\xf7\xe2\xd4\xa0\\\x16\x96\xc6\xb4\x64\xbdN\?\xbb\xcd\x87\xc1rg{\x63\x8b\x66\x8e*\xc2ug\xff\x17\xa6%\xeb\xde" "\xbe\x66\xa1p]\xdb\xe5'\xae\xc5\xcbn\xfaM\xff\x8e\x39\xedw\xb2\xbb\xa7\x9e\xbc|\x44\xb8\x15\x8dw\xad\x1e\xea|,\xb9\r\xb9\x19\xb9" "%\xd7v\x99\n\xb4.k\xdb\xee_\x15\xeb\"\xeaI\xd5\x98\x10]V\xa9\xc6\xb0x\x8ai\xf1.+X\xa3\x85w\xbb\x8b\x0ej\xfa*" ",\x44T\xfa\x89\xcd\x95\x9b\x18\x0e\x9e\x31\x10P\xed\xd5\x19\x9eq\x63<\xd7`\xd6\x81\x66\x35\xab\x89\xe9Qk\xc9\x94\x1a\xaa\xed\xef(\xaf" "\x62\xdb\x1at\x33\xe9\x33\xd8\xcc\x8fQ\xfeG\x0ftmW\xdf`\x9c\"Z.\x1b=\\" "S|s\x86\xba\xcc\x35\xef\x9a=\xb7k" "\x80w\x43r\x0e>\x04\xbag\xac\x39\xe3\xff\xbdl\xe1^\x46\xc0\xbc\x8aQ\xdb\x15sqp\r\x9dMh\x1eH\xaf\xebM\x9f-\x15\x15" "m\xb1\xd8\xd3\xe2\xa3\x9c\xae\x0b\xb8\xc3Y\xe0w\xd1\x65\xc3g\x44\xb9\x08[\xa3\x7f\xcb\x05>\xd9\xcb\xa7\xf0\x8f\x17\x9e\x9d\xef\x9f\xb0\x86\x8c" "\x00\xdfm\x61\x0b\xf9\x16\x41\xd9\x8c\xf2\x1f\x33\xed\xaa\xf5\xc2\xd2\x17V&\x8b\xd6\x45\xe2\xc4\x9f\x97N\xdd\x13\x91I\x85\x38\x9f]\xf3K\x1a" "\x8e\x10\x37\xd2\xb4\xa8|\x85%\x39\xa2\xad\xf1\xfa\x30\xef%<\xc2\xcd\xeb\x84\xc8\xf6\x1e!\x81\x45\xab\x1f\x38\xc3\x61&\xbc\xcb#\xae\x8c\x1e" "\xe8\x81\xe6\x88#\x1c \xb7\x61\xb5\x93\xd1\x9f>\t\xb2N\xac\x36\xeb\xb2\xa9V\xce\x9c^\xc6\x45\x94\xfc\x81^\x83i\x89\x07\xd4\x13m\xc8" "\x9f\x8f\xcf\x92M\x0fs\x08\xa2M\x1a\xd2\x65\xc6\xa2-\xd5Z\x1a\x80\xe2\xf1\xc2\xb5\xbd\x0c\x9c\xac\x91\x12\x98M\x92\xb4=\x45%)=\x83" "\xb8\xba\x82\x13\x94k\x9e\x86pJ\xeb\xb2\xd7`\x0c\xd7\xb7.J\xa3\xb8{\xc0\xc9Q\xba\xd1\x17\xe8\x66\xbcn\xd5\xea\x9a\xefu\xf7\\\xd2" "{y\x43\xcd\x83\xee\xb2\xf1w\xbd\rg\xd9=-\xc9}\xbb&\xbd:\xc4\xf9\x34-Y\x7f\xc6\xb6.\xd5\xb5\xbdo\xee\xde~RM\xa7" "\xd9\x8b\x08\xd3\xa5\x1a\xaa\x96\xdd\xbb-\x95\x0fP\xdc<_\t\xd1#\xe9\x1e\xf2\xde\x0f\xb5i\xb0\t{\x17\xd3M\x96\xe5\x80\xd9\xc2\x8cp" "\xd8\xee\x1e\xb2\x9eU\"\x12\x9ck\xe8'\x41\x34\xc7\n\x11m\xe3\x9c.\xb7\xe1\x32\x46\xc7/\x10\xad\x83%\x44\xadv\x98\xfe$xq\xea" "\xba\xf8\xe6G\xaa-\xdf\xe1\x0cg\x1a\xd6\x81\x41\xbc\xbcO\xc5\xeb\xbf/\x98\x41\xc7\x44\x38t\x98\x88\xf5\xce&\xb2$\x1cj\xd8v\xd1\x90" "\xbb\x0e\x65\x04\xeb\x84M\x14\xe2\xba\x01_\x13\xd3\xa2\xa7\tk\xab\x43\x7f\x1a\xf8u\n\x0b-\xbfZ\x64~\x0c\xc2\xcb\x37'\xd6\x84\x9a(" "\xd5\x9e\x9f_\xb5\xd5\r\x1c\xc3T\x9b\x83\x36\x8e\x16\xde\xbfx*\xc2\xf8#\xac>\x91Z\xd1\xb1\xb4\x1c\xc2\x63Xh\xb1\xd5\x8d\x61\xe9\x03" "\xe1\xd9\xa0\x31\x9d\x44L\xef\xf1\xbb\xe8)\"\xa2\xa7\x08\xec\x42\xc2\x1f^gM\x83\xaf\x88\x9b*\x8c@\xdd\x43,\xf6\x14\x1e\xe2\x86\x31\x02" "\x30\xfa\x89\xe2g\xe4\x34\x16\t\xa5\?\x8b\x7f\x45\x98\xc6\x80\x31M\x97!Z\x1f\xc8\xb5\xf0\xf5{_\xb3\xc1\xbbk\x88R \x9a-q\x14" "\xf2-\x62\xea\xc9\x98|\x97=\xdd\x92\x8b\x35\x36\xb4\x17\xb1~\xf2\xbbZ\xc0UP\xb4n\x0e\x0c\xf8\xa9\xad\xd9\x34\x62\x01\x97\x89\xe9\xad\x8f" "\xcf\xf6\x32\x0c\x66`\x8d\x32\x06\r\x0fV\xae\xa5\x0e\x02\xa6!z\x85\x88\xdbSip\xd9\x80\x1d\xee\x0e\x1e=\xfd\xbd\x08\n\x61[\x33\x11" "&\\\x13\xe3\x8f\xb9\x8b{\x05\x94\xf5\xca\xf1\xef\xc6R\xff\x18\xe1\x15\x8diX\t\xd3\xb0O\x92\x89\x88L\xab\xe2\x83\x13\x86G\x13\xe1\x11" "\xea\x62\xba\x1d\x8e\x1e\xf8\x01\x0b\x35\xd0l\xd6\xc2j\x35~y\x63\x63t\x8c\xad\x9d=(\x85\x91\xbd<\x13\x97S,\x45\x36M\xc3_\xa2" "\xd1V-\xbd\xf0\xe0\x91\xb9\xe3\x38\xf4\xa7\xda\x14\xd3O\xb7\xdf\xf2\x1eY\xa1\x1cG\x66\xc7\x13\x9aK[\xf7\xd8O\xaeq\xc6\xf8H\xf0\x05" "\x14Z\xfc\x07!\xb2\xf2\x31\x86\x08\xc2\x97\x37gx\x9a\x8d\x97_\xae\x89\x18\x36z\xae\xed\xae\xde\xd2\xcfZH\?,\xee\x17\xda*,\xa3" "\x46\xe0\xb7\x91\xaeh\x03\\\x37\xa6\x9e\x9c\x1d\x39\xfd\xd6\x44\xf4\xc7\x12\x31\xbe\xc8\xfa\x9b\xb1\x08~o\xac\xa0\xa9\x45\xfd\x36\x34\xdc\x1c\xefZ" "\xc6\xc6\xfb\x9f\x05\x1f\xe4\x18\x34\x1fM\xe1\x04/'\x99\xd6\x98\xa1\x8f\xd9/=\xdeY\x18\x13\xe1\x61\x93\x8d\xfd\xb1\xb4\x93\x9a\x18\x36(\xed" "\x9e\xc0/]\xd9\x06m\xf7\xe4.\xfd:\xbb'\x91\xe4R\x19\x96\xa0\xc4\x9dH\xb7)\xd9\xae\xa3O\xab\x8bN\x34\x36\xd0\xe8\x90\x9d\xde\x93" "=&\x1e\xe3\xb2+\xc3\xe9\xb9\x95\xe4-\x35\?\xba\x88o\xcb\xbb\x83\x9bT{i\x63\x39x\x37\xcb\xa1J\x16\x43\x15\xed\xb7^|\x42\x66" "\xab\x9d\x65w/\xcb>\x89R\xeb\x15s\xd2v\r#K\xd1\x90\x03\xb3\x88=,<\xcd\x32\x8d\xb2l\x64\x94Z\x7fJ\x16\x35\xeb\xbd\x1d" "`\x8f\xc8\x44\xbc\xe9,\x1b\xc0,\x42\xe0\x1a\xc3\xe3-\xa2\xa2\x41\x9b\x8eX\xcd\xab\x16\xe5\x8b\xf0\x85\x31-\xeev\x92\x9f\x82kI\xb1\x8d" "\x99%h\xd3\xc0\x9f\x44\x1e\xd5\x99\xfa\x8a\x9b\x96t\xf3\x10\xafy_\x37H,\x8e\x34\xb2\xba\xa1P\xe1\x85\x99>\x8b\xc5\x97\x42\x9b(\x15" "\xd6\x91\xd0\xf0\x9c\x33J\xd5\x93\xa0\xe7nZp\x8a\xe8\xfe\xa6\x45\xb7\xb5p\xd4\xfcGK\xbf\x19\x8f\xdfYk\xa9\x96\x94\xf2\xe9Y\xfa\xbc" "\x06\xda\xbd,[\xfa\xec_\x13n\xa2\xfb*\xab\xb6\x02GL\x41\x8b\x14#\xb4\x41\x0b\xfb\xd3\xd9\x7f\x86\x30Y\x19\x30\x84\xd9om\x16Q" "\xff\x64\xd9\x42g\xa3\xd2\x8b\xbf\x7f\xb6\x07Y\x44\xfc\x14\xf6\x97N}R\xa6;\x34\x8eI\xa9\xed\xda\x13h\xc3\xcb\xbd\xfc\x04\xcd\xf3\x13\xdb" "\xc3,&\xd4\x84O\xf7\xe4\x18l\?\xc3\x90\xef\xe2\xef\xfc\x0b\xf3\xc5~ \xfd\x05\xea\x97\xac\x0c\xabv\x95I\xfc\xb5\x44\x64~\x39\xf0^" "q\x86\x85\xd7\xdd\xc1\x0b;\x46v\xe0\x45\x03\x94\xbb&\xfd\x94\xa8\x80\xa7\xd4\xf8Y\x13~m\x81\xc2\x16\xaf/\x61\r\xe9\x66i\x97\xc3\x90" "M\xb5pU\x41\xc9\x82\xec%K\x33\xe6_\x9e\x46\x44\xcf\xb8\x36wm/\xa7z\x86\x14\xb2\"SQ\xeeW\xde\xb0N:O\xbb\xe9\xb1" "\x87\x1e<\xe6\xa0=\x17)\xe2=$\x03\xbc-\x36\xcaY\x98\xeb\x8d^Nw\xa7\xe7\xe0\xcd\x83_\x15\x33^\xc2\xfb\x1c\xf8\xf0\xa6\xef\xc8" "\xb6\xe2\x35M\x1f\xc4\xb5G~\xb7z\x00\x0b\xa5\xe7\x1d\x44\xc0\x34\xa6\x01\x8eM\xd3\xdd\x01\xaf\xfa\xae%\x85\x43\x98\x41\xbb\xa7X\xe5\xdb\xcd" "\x85\x65\xcb\x1a\xb9\xe4\xa8\n\xa2\xb6\xc8\x63\x45\xbe<$\xaa\x81<-\x0cy\x96\x85<+\xd5|t\xf8\xe2\x8c[\x1b\x88\x66\x90\xeb\xe6\x99" "\xef\xf3\xcc\xf1\xf9]\xd6\xd2\xa9\x90t\xcf\x9d:>\x35\xaf\x82\?\xcd\xbe{\xc6\x61\xca\x05\xdf\xf3%|U\x84[\x33)\\J\x8f\x92}" "\xd4K\x36)\x97r\x39\xb8+\x8a\xf8\xce\x43\xe6\x85\xd9\xbdL\xcc\xe9Ly\xc9\xaf\\\xf1M_\xfd\xae\xce\xc1u)\xeeZ\xce\xe1\xc2\x64" "\xa1\x05\xc6\x13\xa2r\xbd\x62\x0e\x46+)Z\x0f^\xd1\"\x9aw\x88\xf0\xe9\x19\x44!\xb9\n;\xd7 \n\xdc\x15\xa2\xb8\x08\xa7\x9bX\x87" "\xc6\x9f\xd0\xfc\x84\x8b\x0e\xeb\xe7\xabpu\xed\x0c\xcb\xa5\xd0\\\x05\x45\x33g\xfe\xeeUT\xf8\x06-\xf8\x96\x91\xb5\xa4\x89\x18\x88\\\xb1\xc6" "\xbd\x8a\x1e+\x1c\xff_\x45O\x63\xbf\x85\xa8\x8a\xc7Gl\x61\xa1\x85\xeb\x16\xbe\x8c\xe0\x8f*\"r\xc8U\xd4:\x01\xdbH\x39\xf8\n\t" "_\xbb\xa0\x85x\xea^\xb1\x80*\xe3\x43$*\xbb\x9e\xca(\?\x90\xb1\x43\x34\x9b\xb1\x44^!t\x82\xd0\xb7\xf6\x10\xd1\"\xe4\n'=" "'\x02\xa0\x98\x08\x43}\xf7\n+\xea\x94\xe9\xbb\x80\xc7\xb8\x12)\x84\x18\xa7\x42\xdb\x17NX\xe9\x91\xef\xd8\x34K\xc4'\xfe\x44\xca\x08\x9a" "\x9a+\x8e\x80\xafv\x16\xe0\\h\x41\r\x84\x66\xff\xec\xdeq\x34S\r\x61R\xa8&\xe8\xefW\x93\xae\xdd~\x13nn\xca\x36\x38/\x93" "\x1d\x10\xbd\xcb&\xa2\xb9)\x17 l'M&|\x93\xadJ\x13n\xbe\x42s^S\x96H\x9c\x1f\xeb\xe3\x8c\xbf\x8b<-\x13\xaa\x85\x85" "g\xb6\xff\xaa\xed*\x03\xc4ZRm\t\x9e\xd6\x10X\x44\x45\xdc\x44\x98\xbfs\xb2\xd9\x33q\xd0r\x91=]\x15w\x8b\xe5\xcev\xa4\x12" "\r]l\x06\x8b\x14\x9e\x17\x9d\xd8\xcfT\x45^to\xa1\xb7h\x17\x33\xd0<\xa7\x84\xb6y\x88\xd0\x1c\xab\x8d\x1a\xbd\xa5\xc0s\xd8\x42k" "\xe5\x04\xac\xf2\xae\x61\xc2Q\"\xce\x91\x8aW\xe4\x1c\x1c\xf2\xf8\x8cO\xb5@*\x87K^x\xc5'\xd9\x38+\xe0\xd6\xb2w\x13\xd1u\x85" "\xa8\xe8\x9a\xd1\xd1%x\x8c\xf3\"\xb4\x42\x97\x61*m~\xd9\xf9gu\x30m\xd9\xc6\x34\x8aiX\xe4\xe8\"-\x8f\xa6\xe5j\x08\n\x02" "-_J\x45t\xdaL\xc4\xa0\xc2\xc4\xe9$,\xea,xX\xeb\xe8\xfe\x17\xc3\xcb\xdd\xfd\x37\x9b\xcd\xff|\x35:\xa8!\xf2>\x34wT" "\x80Vi\xef\x89{\xb7\xc3\x08\xc7\x85\xf4n\xd3\x90{\xa6y\xaePq{\xc1\x11\xbej\xbb\xe5\x65\xd8\x9e\x84\x83&\x66\xd0tu-\xd3" "\r\x66T]mK\xe2\xd5\xc2O\x42\xe8\x0f\xff|L^\x38\xc3\xd3\xd7_\x98\xb8\xfe\x34\xcf\xacv`\x9d\x9e\xcc\x35\x8eS\xec\xc0\"\xfd" "&\xc7\x32*\xa6\x0f\xd0\xe0\xa7,\xcc\x08\xa2.\x64v\x12z\x91\x11\x11.\x0b\"J\x87\xea\xe0*:\xfc\xa4v\x03\x9a\x9b\x8d\x90\x85P" "\xa3\xdeJ\x06\x45_\xaa\x19\xcd\x90\x87\x11\xa1\x46x\x91u\xaa\xd3\xd3\xc5\xa5kl\x03\x19\x99\xd4\xf8\xbb\xba\xc4\xe2\xacT\x43m\xaf\x9a\xde" "\x88\xad\xe3\x86\xb6\xbe\xc2\xb6O\xa6\x45\x85\xdb\xbd\xcfv\xa7\x85\xf4,w\xbc\\%\xef\x8f'\xa2\?^\\\xc1k\xf7\xb2%\x64\x07\xae\x89" "\x15\xe0J\x94n,L\x35z\x92\xc6\xe3\x01\xc8\x84\x8f\xcd\x93M\xb8\xc4\x9b\x8dW|p\x34\xe4M\xff\x1d\xe6Z\x95\xa8\xb5\x92\xe3\x11\xc8" "\xbb\xc2r\x03\x63X\x9ay\xea\xb0\xe3\xd2L\xba\xfc\x34\xb8$'Nv\xdeU\x84\x8b\xbc\x8a\xb8\xfd\x64x\xe4\xf4'L\x86\xa8\x86\xb1\xd6" "\xa9\xdb\xdc\xc1\xae\xd6\x84+\xb0rL\xce\xfc\xce$\x61\x9d~\x16\x11=\xb7\xa9\x98\xef\xd2\xdc\xaf\x9a\?\xf0\xee\xfaH\xfa\xcc\xf2\xdf\xb5\x64" "{/]<\x1c\xf3V\x42\xc4]}\x19\xdf\xf4\xfes\xf8\x86wU\x41\xe2\x62\xbf\x08\x63\xd4\xef\xc0q\x45\xb4G\xe4\x66\x9a\xaf\x9aX*" "n\xf4\xf2\xb6k\xf0\x31\xd9V\xec\x1ax|\xc4\x44V\xa2N\xd9uP\xdf\xed\xde\xef\xa2\xf3\x1eG\xca\xed\xb8\?Wg\xcf\x1b+\xdbm" "\xf9Svt\xb6\xac\xd6\x80sj\xb7\x03\x0f\x07!\xba\x92\x1d\xd6\x16\x9d\xb0\xf4\x05\xa2\xed\xe8\x84\xe5\x02y\xe9\x64j\x9a\xb8\xba\xc5\xfc\xb5" "i\xbaO\x9a\xf9*\x8bV\x1d:\xa5\x0eg\xe7\xad\xc3\xbeX'|\xbfr\xa6\x91\xde\x44\xc3\x80\xad\xc3\xb9\xa8Nt\x80oq,\xd6\x61" "\xe5\xae\x0c\xcb\x81\xdf\x98\x0c\n\xe0\xf4/\xe2y\x17No.&\x17\xadp~\xeb\x07\xd8\xbdR\x91\xa3-\x15\xf7\xbfs\x39s\xfa\xbd@" "\xdc\xfb\x02\xb3IG:w\xc9\xd3\x80\x95v\x87\x63\x43\xa5\x0c\xef\x38\xfd\xd4\xe1\x64\x14L&\x9d\x7f\xa6\xa6:\x9c\x84R\x9a\x81q\x04\xad" "v\xe0\x64\r\xd0\xa1)\xbe\xc3\xfa\xab\xe3\xb7\x0e\x97\n\xa1\xc5\x03\x15\xa2z\xe8pL\xa1\x94[\x61\x87^\x35\x1br\x9f\xb8\x16\x65\x66{" "\x9f\x45G\x85}-w\x91\x04\xdf\xae\xc5\x8fYx\x8d\x98\x96\xf4;{\xdf\xdc\xbd\x9f\xa6\xda\x0b\xb2Y\xdc\xc0\x9b\x8f[\x19\xd0\xbc\?\xc2" "\xed\x19\xb4\xd1\x32\xaa\x64\xb0\x35\x8di:\xd7\x89\xc9\x93\x0e\x1b\xca\x8e\x8c/\x8d\xd8\x07Y\x88\xc1Y\x87\x43\xbbN\x12\xe0\xcd\x63M\xb7\xd0" "\x36\xb5\x16V\xf3\x9e\xc1X[w\xa4\x90*G\xd1\xab\xf5#\x46q`\x37\xf9\x95t\?~W\x65\xccn\xa9\xd3H^\xfd\x9em\xe3\x45" "\xd5\x8aN\x9d\xaf\xb7\x19#s,\x91\x1c\x87)^\xd7\x62\x1b\x0f\x41\x1b\xae\xf7\xbe\x19\xdf\x8c\x10(\xcb\xb5\xc4\x42s\x99\x96\x04u\xec#" "\x00m\xf8\x80\x05\x0e\xd0\xa6\xdf\xa8\x91L\xdb\x1d\x0c\xf6\xce\xa9{\x96\xa5\x9f\xf9\xb9\x17:Sh\xcb\xf4\x45\x9b\x17\x9d\xb8\xa1=M#\xf2" "\xd8.\x62\xb6Z\xaa\xba\xff\x89mU\xea\xda\xce\xa2\x43\x98\x16\x9en\xe5\xcf\x35\xc9\x12h\x1a\xa1U^\xff\?gL\?\xa1\x65\xe0\x9fO" "`\xd8\x86V\xcd\xffG\xfb;{\x32\xcc\xca\x1f\xacsI\xe5\x42\xfe\xd2O\xb6\xa7\xf1\xcd#\xb5\x11\xb8(\xea\x96 \x36\x1b\xaa\x9an\xb9" "\x16\r\n\xd0\x96\xe7\x32\x88\xc3\xc2\x03\xd7\xd2\x34\xb4q\x9c\x31Y|\xa0\x1f\xd4;\x90\x96XN\x18\xdf!\xd5\xd1\x1d\x37\x46\x87\xec\xe9\x43" "\xfb\xba\xf5w\x18\x96\x32\x61\xe7\xf8w\x8eT\x44\xa5$\xbc\xf8\xd4\xd4Y\x9e\xa7\xda\xa0\xfe\xaf\x86J\xcf\x35\xbf+t\xc0\x85wK\x90\xef" "\x16\x13\xfd\xc6\xbd<\x89uP\xc6\xb0\x35\xc2\xce\x15\xd0\xb6'r\xc0\x35\xf3\xe9\xa7\xd6\xaf`\xb7\x1e\x11\xcdv\"\x94\x9c{v\xea/J" "\xb5J/\xd5\xd6W\xbf\x8bsx\x0e\x98&\xf7\xb7\xa7\xe9nyL\xc6p\x33\xd8\xff\xdd\xf6\x04\xcd\x82\x8b\xc9\xde\x36TvLw\xf8\x61" ".\x86\x16\x95\x06\xa6\xa1~\x34\x86\xc3\x32\xfa\x0b\xa2\xf1\xfd\x08\x35ow\x0e\xf7\xde\x99n\x0e\xf3\x97\xdfm\xab\x98\x33\xf8\xf5\x89v\x8f\x34" "\xd7\x8dp%\x15\xce\x91\xaaq\x41\xd7-&\x07_\xae\x45\xd5w\xff\xbd\x0c\x89$y\xe5\x95\x42\xbb\xa0\xddQ\xc4.^\x85N\xa2\xdf/" "\xa3\x83\xbak\xd1\x43Y\xfe\\\xd3\xf8\xa3\x66\rU\xad\x13\x9e\xfc\xf8k\x89\x07\x07\x1a\x9e\x95\x37\x04-\xf9\xc6\xc3j\xadx\xf8\x89\x88Q" "\xbd\x03\x34\x31\x46-N|\xd9\xd0\xbc\xcaJ\xb5]\x45\x43\xc2$\?_p,\xd2O,^'\x93_\x34M\x91\x7f\xb4\xffW\xd1\xd5O" "\xe4\x95\xf8\xf7\x8a\xed\xfd\xfb\x61\xe6\x34\xeb;\xe3\x82R\xe3\xfa\x42\xd3\xe4G\xfb\xda_\x86GgP\x38X\x38\xd3\x1d\xb2L\x83\xcd\xd3\xc4" "t\x83:\xd3\xd0\x43\x12\xd1:\x88\xca\xbe\x13&#\x13\x35\xef\xcf\x66XVm\x07\xe2\xd5\x62\xf7\x30\xa5\xc6\xbb\xb5\x1d\x42\x8c\x1a\x0f\xc8&" "=M\x8b\x9e+\xc9\xdd\xc0\xb5$\xa8\xa5\xd7\x98\x34\x41\xbe#\x38\n\n\xd7K'vk\x82\xb6\xc1[\x96\x1aj\xef\x9d\x43K\xef~{" "\xb9W\x46\xe0p(<\xc5\xa7\xbb\xc6\xab>\xcb\x01\xde\xe2\xee\xe3^\x1frm)\xb8\x81\r\xf1-\x87\x33\xbd\xe5v\xef\x9a\xc3\xde\xba\xea" "xk\xfe\xe6o\xf3\xb0\xf5\xf6k\xed\xa6\x88\xdd,\xf6\x80w\xf1\x7f\x8e\x96\xbf\xf3\x9b\xdfU\xe1\x7f\x1d\x0e\x17\xcfX\x0f\xb1wL\xc6&" "\x32\x90\xc1\x92\x8a\x7f\x0f\xeb\xea\x91\xff\x1e\x96\x1b\xdd;\x1c\xd9V\xc6\xc2\xd1K\x38;\x82g\xf3;\r\xb9\x1e\xc5\xe9=\x1f\xca\xf0Mn" "\xd7\xda\xd9\xf7\xbcn\x66u\xd2\x83!\x0b\xda\xbf\x9f\x05\x43\xd4\x14\xef\xf9\xfd\xc4}/\xc0\x92\xf3^@\x64z\x63\x9c\xcf\xb9\xb8\xbbj\xa4" "\x9amj-\xb4\xe1\xea{\x01\xf1\x41\x84\xb6\xc7\xd6{!\xeei\x12\xbe_\xc3\x1b\xce\xf8;k\xc5\x1f\xc5=\r)oZX.\x45\x87" "\x37\xae\xc5\xeb\x06\x36\x00\x10\r\x37t\xad\xd3\x32\xd2\xd1\xb3\xe9\x01\xd1\x46\xa3\xf8\xe9\x05\x93\xe3\xa2\x99\x9b\x9b\x31\x8d\xf6,\xda\xd6\xee\xe4:" ":\xc6\x9d\xa0\x12\x43\xcf\xeaO\xab@\xe3y\xe1\x93$\x1f\xeckV\xe2\\\xc3\xc6\x46\xae\xed\x1e\xf0\x04\xea\x65\xf9\xf4\x02/\xcb\xf7k\x14" "\x36\xe1\x02\xf7\x1e/k\x46\xd4\x41\x42\x33\x18\x08\xf1\xfc\x0f\xf2'\xfc\xe2;\xd1\xc0\xe7Q" "\xbe\xe9\xf7*\x1a\x0cv.\xa6\x1f\xccp'\xfe)\xeb\xf1V\\M\x19^\xcc\xd8\xde\xaa\xa6\xabLl\xfb'\xd3\x64\x08\x81q\xb7h\x66" "O\x36\xea^'\xc3#\xd7\xe0\xed$o\?\x35\xce\xc8\xe1\x15\x1e\x14Q\x8a\x95\xefN\xdd\x99\x90ZrX\x07\x8f\xf1\xad\xc4z\xc2J$" "G\x62\xcb\x12\xfe\xde\xa3P_,\xaa\x01\xd5\x30Y\x02\xd1\x06\x31&\xea\x9e\x9b\x16\x35\xc2\x34X\x39\x44\x9ct\xc8>\xb9R{m\xff\"" "\xd5\xd6U\xec,$\xda\xf7\r\xb8\xb9\x36\x62\xea\x46h+\r\x07m\x84\x9a\x17\xda\xbc\xfc\xa0\x8d\x05\x1d\x83v\x32X;\xd1\xc7\x15\x31\x38" "&\xad\xea\xeb\xfd\xce\x9f\x41\x64\xbc\x1e\x33\x9e\x12!\xf3 \xdeU\xe1|\xe9\x1a\xd6\xb1@\xfbH\xbf&\xdf\x61\xa9\xeb\xb1\xf2P\xea~\x7f" "\xae\xad.\xc0\xcd\x36\x1cT!n\xcb\x64\xcd\x18\x1e\xe0\x06\xfc\xea\x42\xac\x32\x10\x11\xd9\xa2\x17^\xe0\x1a\x30\x35\x1a\xc3\xd2\xdd\xef\x9c\x9f\xf2" "~\xe0\n&\x44&\xee\xf1\x1d\xf4\x30}\x64\x64\xae\xec\x45\x99\x9f\x30\xff\x1e=N\xa0\x99\x89Qh!\x93\x85\x66H\x14\xde\x07\xbal\xaf" "\x86\x04\xd3!\xbc\xadn\x15\xd1\xb6\x30\x16\x8ep\x05\xbe\x62%k\x18\x15\xd5\xd7\x63\xf0\xa7\x9d\xa5\xdf\x61s\xa8\x62\xfcx,m\x12\x66\xf5" "\xec\x00K\xae\x89\xb6\x87\x98\x89\xbb\x83G\x36M=\x66\xa3\x1e\xbb\xb3=\xec\xff\x35\xe8\xed\x0e\xb2:\xab\xc8G\xc2\xaaU\xa1-IU\xda" "%\xdf~g\xe7N\xbex\x15\x61y\x17q\x91#u]\x9eM\xc4\xd6x`\xe1\x94\x9b\x0f\xcf\x97\x30\xa3\xd9\x81xS\x8fNn\xa1\xd9" "\x1e\r\xca)\xe8\xf3M\"\xa2M\x11Z[\xfe\x16\x9e\xe0R\xac^\xde\xb0\x8eNX\xae\x80\x37\x03\xb0v\x01\xa2\xa9x\x83\x43\xc8\xe0-" "zn\x46\xe7\xbd\xc8\x1c\xab\x07t\\\x36\x62\xa2q\xf0\x86=\x11\x84\xc8;o\xbaO\xeb\xec \x0c\x66R\xa7Q\x46\x1f\xeb\r[\xda\r" "\xde\x92\xa3:lz.\xf2\x95\xbd%\x93\x96S\x12\x8b\xc5\xff\r\xeb\xfe\x85\xf8\xcd;\xcb\xe0;\x16!\x0b\x07V\xc9|\xb0i\xfc`\xd7" "\xe5\x83\x95J\x9fi\xda\x87\x39\x61\xd0\x0fO\xbe\xe3n\x13nN\xaa\xad\xd9\xd5\xeb\xc3\x41^\x88\xaeV\x1f\xfe\xac\xc6$s\x06\xbb\x85i" "\x18\x8d\x0e\xfa\x18\xe6\x0b\xef\xda`\r_\x91\x41\xb6\xb4\x9cX!\x30\xe8\x63\x30-\\\x1e\x39uO\r\x9eN\xb5m\r.\x8d\xa6\xa5\x16" "\x0ch\xad.\"\x39\x43\x33#\x96\x89:s\x63\xae`\xd0\xd0\xa3Q\x11\xbb\x65\x9a\xc8\xd8\xf9" "\x1c\x86\xdb\xac\x13\xce\x97&\xb2\x9f\x65\xa2_p\xab\x8b\x9bY;\xa9\xa6\x33x\xb6\xb2\x0e\xda\xcd\x37\xeb\xe8!\x96\xe5\x19\x11\x9ex\x30\xa4" "\x65J\xe9\x89\x01\xa7\x42\xe1\xd9!X\xe1~\x9f*\xfe\x38\xfd\xeaj\xc5\xc0\xf8s\xc8q\x8a[n\x86q\xbe\x01Z\x34\x08\xa1ys\x0c" "\xdcj\xa3\x64\xd5\xa1\xa2\x8cz\x30\x07\x04\xad\xf8\x14n\xfe\xf9\xb8\xf2\x1a>\xad\x61\n\xc5\x81Z\x1b\xf3s\xa6\xb1y\x19\xc2\x9f[\xd8\xc1" "\xf3%\x16\x35\xc5\xe8\xb7\xc5.\xc4\xd0\xcb\x06\x62M\x1b\x39,\x19z\xfe@T\x81\xc1\x90\x1d\xd0\x31\x0b\xdb\xd8\xbc\x11\x1e)\xbe\x83\x18k" "\x8f\xb1\x8c\xdf\xc8\xbbW\x91V\x8cq\xbao\xb2\x8a\x1d\x10\xd7\x1c\xb3x\x8dY\xab*\xd9\x8d\x19\xb3$)i>\x1d\xb3\xeb=\x0eK\x1f" "\xac\xa4\xc6\x98\xce\x15\x96[\xda\x13[\x16\xa8\xf1\x8b\x66i\x17^t\x41\xd4\xb6\x63\xacp\x31\xda\x8e}\xb8\xa9\xb0\xf6\xe4\x8c[\x1by\x90" "\x34\xfa\xaf\x1c{=\x04\xfd\xbb\x03\x9eI\xfbL\x35\x88h\x63\xc6\xac\x9c\xc7\xec\xbe\x8c\x99\xb7\xc7\xecr\x8e\x11\xba^x\x9es\x46\xe5\x0b" "\x36\xad\xa2]\xc1\x97V\xc4\xf2\x64\xff\x83\xbbS\x8e\xc3\xc6\xcc\x91\xe3T\xf7\x1f\x30\x9d\xa2:n\x0e\x11Y\x8c\x1as\xe1\x96\xd7\x43\x96\x18" "s\x98\xa6\xc4\xee\xe3\"\xda\x9e\x9e\x46\x7f\x8f\xe9\x9e\x9e\x83\x31\xc7s\xe3\xf8\xe9\x9e\xe5v\x8c\x95\x9b\x42\xe4\xf2\xb1\xf4\xb2\x92\x31.\x8e\x19" "\x35!:\xce\xca\xbd\xf7\xc6\x9e\xd3\x38\xee\x7f\x83K\x9d\xe7\xf7[\x63\xf7l\x0c\xd7\x41#+\x9dq\xea\x96(\xe2`L\xe2\xf1\x39\xecQ" "\x62\x66\x46\xc5\x12Ys\xb2\xb0\x8c\xe1h\xa8\xdc\x38\xe1\x9a+\xe2\x10)\xc5\xc2\x32\xc6\xc4\xae\x10%\x64\xcc\x12\xa2\xf4{\x61)Vz\x96" "\x11\x11\xf3\xaa&z\xe2\xed*\xe9\xcd\xb0\x01\xfd\x62]\xfd%#\x14\x9d \x38\xb4\\\xf8\x15\xdfm\xc2\xed\x19\x02\x84\x8a\x66\x9e\x07\x83\xaf" "\xe4\xfc\x43}\xb8l\x39\x9bh\x36\xd9!\x9c\xb4u;%\xdc\xde$\xbc\xb0\x34\x9e\x44}{\x13\?\x88\xe7\x30\x98\x62._\xf8\x63\xfd\xee" "\xa9\xfc)gl\x45\x95\xd1\xf1\x96\xbd\xf7\xd9\xef\xfc\x04\x44\xfe\x9b\xfd\xe2\x9d\x08%#|\x41\xdc\xd6\x93\xbc\xd5\xb2\x33\x1a\"\x94\x61\xa9L" "\x9b\x9bj\xec\xfa\xceX\xf4,\x34\xb6\xcd;\x8a\x88\x8e\x8e\x92\xf5\x80\x8a\xe9*.h\x16\x04\xdd\x44\x8d)h.]\xd0\x86\xfc\xe0\x8d'" "\xf9\xe0u`\xe6\x98\x85\xcbK\x8e\xacg\x98Q\x15\x9e\x9c\x83\x95\x45\xbc\xcc&G\xcf\xd0\xee\xcf\x9cixT\xd5\xf0<\xd1\xf7\x14\xe1#" "\x07\x33\x66\xca\x19o\x8c\x37\x9f\x04\xf8\x01\x02\xed\x0f\x18GQ\x88\x8e\xc2\x1cq\x8b\x85\xb8\xaf\x39|g\x85\xb9'P\xdd\\.\xb1X\xde" "\xb4\x64x\xce\x0e\xed<\tr\x64\x00\x0e\?\xc1o\xeb\x15,X\x33\x0b\x9f\xc8w\xd0\xbc\xc0\x84\xe8|.\xd8\x01Z\xf0\xde\xb4\x9aT\xe7" "[[h\xa4\xda\x39\xf9\x43Z\xb6X\xb0\x02^\x84\xb9\x8aS\x63\x0c`h\xbc`\x0f\x45\x19\x0e\x33\x1c\x99.\x30\xed\xc2\xa9\x95\xc5\?\x93" "\x30\x0b\xf8\x45)\xc7 \xaa\xdb\x45\xf8\x9a\x05m\xcf\x03\x65\x17\x44\xbfw\x81\x05\xf2\xc2\xb3\x8c\xe4\xc9T\x33_!!\x1aG\xef\xd1*\xe3" "I#\\\xdd\xba\x06\xff\x11\x15[\xbf+\xe9\x13\xb6\xa8\xf5\x41[\xc7 \x84yq\xc1\x1ah\x01\x0fK!\x8a\xed\xe2\xcf\xce\xb4@\x14\x0e" "!\x8a\xe4\x82\x96%\x1f\xc6/X\xc1,\xb4\x8b\x9c\xf6\xa6\x17,\x07JV\xad*\xfa\xe5\x44T\xbf\x36t\xdf\x17|\xff\x0b\x8e\xb8\x95\xfe" "x\t\x93\x96\xb6\xb0\x05\xab\xaa\x45\xf2},-G\xb2\xa1\xb6y\x03QQ-\xb4\xfeY\x96\x11\x1dV\xb4\xdb\xad\x1e\xe0\x63\xc0\x13\xd9\xfd" "l\x84\xa8\x95\x16\xbb\xe5\xb1\xce;\xd9J \xd7\x10\xda|\xb0\x62\xc6Z\x31\x63\xad\xd8\xf4\xad\x30\xd5;\xe0\x16W\x42T\xbfk\x1dy\x17" "j\xf1\xc3\x06\x1aZ\xe9\x35-Z\xca\x30\xdfM\x45XJT\x64\?\xcd\x44<\?\x45\xbe\n\xd5\x38\xc3\xa1\x62\x12T\xfe\xc4\x1a\x44t\xad" "\xd7\xcc\xeb\xeb\xf0&\x00\x31\xaev\x8b\xd9\x86U\xe0\x86\x43\x86\r\xbb\xff\x1b\x04\xe8\x12\x62R\x64\xf3k\x9b\x12\r\x36p\\\x12\xa2\x43\xbf" "\xc1\x16\x1a\xc2j\x0e\x91\xd0U\xec\x81\x35\x9c*|)\xfaY\xe0\x85`L\x7f\xd8:\x8d\x1e\x06\x88\x98\x65Z\xba\xbf\x8eh(\x08JV" "O\"N@L*l\xe0\x1e \x44\xc7}\x13\xae^\xd5\xc5\xe9\xdcr\xe6\x06\x8bL\x84\xb9;\xb0\x98\xa7\rr\x13\xc1\x98\xbd\xe1\xc4\xe1" "\x86\xdd\xd9\r\xbb\x12\xdc-\xda\xc8\x97\xba\x61\xd1\xd8\xd0\xe6\xbe\xc1\x86-\xc6\xdd\x63\x35n\xd8+\xdf`\xa5\x99\xb0\x88\x13q\xd4\xbf\xd1\xfa" ".\x7f\x0f\x87\xb6t\xf6G\xc9\x06\xde\x44L\x63\x99\x88\xdc`\"\x32\x99\x8a\xecY\x9aX]`\x61\x8ai\xe9\x42xh\xbd\x62\xb8(\xef" "k\xabT\xf3\xa7Q\xd1W\xd8\x43\x93\xc2\x86~\x95j\x1c\xecn\x64\x34\x41\xc3\xc8&Y|HU\x45\x9b\xd3\x66\x07s\xec\x06\xc1]\x94" "\xd3_\x18\x1f\x37,I[\xb6\xa0J\x19\xc3\"`\xce\x80\xf1\xd1\x07\x8c\xf0m\xa4\x05@\x45\xf5\xba\xc0\xab\xd9\xfa\x0f\x98\x87\xb7\xec\xdcn" "\x99`[\x84\?\x19h\x84/p\x96\xd3\x0e\x1f\x8a\xc8\x96\xe3\x36\x46\x17\x1el\xb1\xaeHX\xad\x81/\xd4\xd1W\x64\x94\xd9\x01#\xbb\x0e" "\xb6\xf1\x06\xb7\xc7\xf4\xda&\xc5\x32\x39\x02Q\x01m\x93\x89\xee\x8b\x87\xfd}\x06[\x8e\xd9\x95\xfeP*\xf6;~\x1a\xd1\xd2m\xc9\xa1U" "_v\x95I\xaayT\x13\xd3\xf6~\xc4\x41\x99\x8a\x98\x8a\x0b\x0e\xc2\xdc\x87\x31~/\x19\x31\n\x92j\xd6\xc6\x1a\x1a]\xa8\x85\x1a\xd7\x44" "\x64\x1d\x8f\x39\x64\x44\x87=`@\xc8 \x13\xe6\x66N\xfd\xc1\xfd\xb5\xff\x46\x0f,\x9b\x98\x83\x33-\r\xae\t\xed\x8c\xc1\xe3\xa0\xd9\xb6@" "\x10m\x82\xd2\xc5\xd4K\x02\x07\x66\x87\xe8\xef\x9b\x16\xbdT\xe5\xf5\xfe\xce\x87j\xeb\xf6\xe9-\xfb\x44\x17w/\xde\xfd\xaeq\x00\x65J\xc3" "\xf1M\x9d\xff\xb9\xe1\xd2t\xff\xfco\x8f\xce\xf4<\x66\x03\x30\x62\xa2N\x9a$kX\x8dq}\x00\xf7o\xd1\xacH\x18=]U\\\x64" "\xff\xc4\x85\x8b\x18\xae\x43\x1c\x9c\x45\xc1\xadkRs{\x1a\xab\x66],\x13\xf1\x82\x83\x0c\x82\xf4\x05\x8c\x9c%|\xba\xf4\xa4\x42\xa4\x0c\xa1" "\xf5\xc2\x82\x0c\xd6!\x07\x19t\x81\x85\xd6\xd4\x04\x19\x38\x1a\x04G\x61y\x04Z\x45\x17\x1c\xc1\x30\xea\x9b\x43\n\xf1\x14\xc7h\xc2\x84K\xe7" "\xd4\xc9GRQM\x33\xb6U\xb5i\xbc]\x15w\x1f\xf7\x10W\xceWr\xe8\x84\xd1@\xc6$\xa7\x38\x1dL\x43\x46\x38\x81\xa8\xd8r\xfa" "\x45\xd3\xfd\x11\x45\xb4\xc6Qh].\x61k\x12^g\x10\x00\xc2\x34m\xe9]\xb3\xbd\x44\x84\xc8rJ\xa6 \xc3\xaa(\xeb\xce\xf4\nZ" "\xe7\x36\xf6\xc4\x38\?\x97\x62\x95\x9el\x8a\xb4\xc3\xbel\xc1\x31V\x0c\x0b\xad\x13%\xb4\x15\x81\x42\x0b\xf4\x18\x30n\x8a\x30\xc0M\xa0NQ" "\"%\x10g(\x38\x46K\x12p\xe7\x8c\x80\xd1P\x84\xe6\x04$\\\xe0\xc1\xb1\xeeLx\x8c\xe3\xc9\xdd;h\xc3\xc3\xe0\x18\xc3\r\xa3\?" "lj\x62UqH.\x9c\x7f\x1f\xa9\xa8]\x46^\x39\x9d\xa9\x31\x11\x9d\x0e\x11\xad\x37\xa1\xec\x93\x13p\x8b\x33\xef\x0e\xf2\xceh\xb2\xc4*" "*\xd1P\?\x1d#\x86\xa3\xf0\x1e\xb9\x66\xf7n\x17\?\tm\xcf(\x9d^\xb4\x9c\x9c\x65=\xa6\x44\xb7\x02\xa2\x99\xf9L\xc4\xa2\?\x9f\x81" "\xf4\xe9\xc7\x80q:\x84\x36$\x31\x46\xf9\x12\xa2\xfa\xa9\xd6\x85)M\x44\x1b\x83\x18YQ\x65\x61\x41\x13\xdaRv\xe1\x86_\xd9\x0c\x34\x86" "\xc3\xa9%K\x36\xb2\x45\xaf\xc6pX\xc0\xdc\x88hw\xa7\xea@\xc2\x93\xaaG\xf9\x30\x97j\x95\x1fL+\xb8\xc8\x32\xf3\xa7I\x41\xfc\xdd" "\x16\xa2\xda\xd0\x0f'\x9b\xcd\xdeOT\xb3}\x0bL\xd3M\x0b\xa8\x61K:]^\xdf\x1d,\xb1!\xa4h\x8d\x94\xfb" "\xbf\xe9Xn\?\x0f\xa5\x12Y\xcd\xe0\"\x00m[\xa7V\x66i+\xb3\\\x95\x11}:(#\xa6zP\xc6\xcczP\xc6\xdcsp\t" "\x93\x9c\xd2\x8e_\x62\x81\x8a\xf0\x94\xba\xd9&\x85\x66\xfb\x15\xa2Gr\xc9\xce\xd9%K\x81\x12\x0b,\x44\xb4y\x03!\n\xc6\x65j\xdb\x12" "\xd1\xe6\xd7\x84\xb6\x04G\x88\x8e\xd6%\xd6\x05\x1b\xfd\x02\xec\x44\\\xa6\x91\x03\x44\xb4\x39\xc3\x80;\xcd\x07\xba|\r\xbc\xc4\xd9X\x8a.\xd9" "\xc5\xbe\x64-z\x89\t\"\xa1y\x17\x04W\xe1y\xdbVn\x16]\x0b\xfb\x0f\xd4\xaem\x19\x96\xb7X\xd7l\x85nu)\x19\x86\x07\xb7" "\xb0Y*\xef\x41\xf4\xfdnY\xbd\xdd\xc2\x12\xa3\xfc\x01Qu\xdd\xc2\x43Nh\x1er\xc2\\\x81\xfcq\x62\xdaO\x44[M-\xb4\x39x" "!\x86M\xb7p\x35R~:\x11\x9b\x44\x44t\xadn\x39\x84\xba\x85\xcdR\xf8\xc6\xab\xa2\xba\xbd\r\x87\xc7\x64\x96\xac\x81\xe8\x39\xdf\xc2\x1b" "<\xb8\x85%\x46\x98\x9b\x80\xf9\xa2\x93u\xf0-VV\x18Y%\xaa\xc8ws\x8b\xd8Q\xc2\xfbW\xb0\x16\x80\xe8\x82\xdf\x62\x8b\x62\xe1p" "\xc2\xd7{\x1b\xfd\x8c\x41\x9b\xdc\tn\xd9\xebV\xa6~\xab\xaa\xad@\x8cNn\x11\x66\x84\x62\xcf\xe9I)\"\xc2\x14\xa8\xf8\xed\x64\x46\xba" "\xc5\xac\x90\xd0\x66\x85\x84]^\xe3\r\x8f\x08oh#\xeb\x8f[\xf8\xb7\x1b\x35\x42v\xff\x36\xd5\xde&\x9e\x32\xd8\x62]\xb8\xb2\xf2z\x9b" "\xe4\xde\xc1\x12\xd2\x00k\x14\x95M\x12\xe7\x66\xbb~\xebYm\xef\x0e\x31\t$\\\xe3}\x63\n\x45y\x91\x9e\r\xb9\xfd\x16\xee\xa0\x46\x84" ",\x32\xd1\xdf\x0b\x8d\x02JO#\xc4\x11\x33\xb2\xc5\xbc\x85Y\x44\xf8\x80w\x0c\x0b\x91\xb0\xf9\xec\x64\x39\xbd\xdd\xb5\xf9U\x8cg\x95\xec\x0f" "\xa8\x08; \xc4j*z~Q\xd1\xedG\xa6!\xf0\x88\x89\xe9\r\x8b\xe8\x9b-\x43s\xbb\xa4i\xb0\xc5\x04w\x98z\x08*\xbc\xb6m" ":W\xcd\xc3\xe8*\x1aj\x45\xa5\xfaW\xd9V\x81\xa2Y\x10V\xa3\xeeS\x66\x16\xf6\x80\xe1\xe4\x85\x18\xc0\x0b\xdb\xb6\xf0\xb7\x02\r\xe3\xb6" "\n\x87*\x15\xf6P*,\xe6\x95\xf0\x64\x02\x62,\\\x81QL\xd9&\xc7 \xea\xd3\n_\x42%\xac\x36\x41\x14\xdc\n{Q\x15\xb6\xe3" "\x15\xf6\x42*\x98\x9c\x35\xca\xc3\xb1\xf6\xad\xa4\xc4\xf8\xa7\x12\x15\x8e\x41T\xc1\x15\x7f\xb6\xa8Z\xdc\x9d\\\xfdn\x9a{\x9a\xdf!\x66\xe1\x8c" "~\x93\"\xfe\x8dG+\xec\x31T\xd8\x63\xa8x\xe2\xd2 \x63\x9ek\x0b\x1f\x96\x9a\xb6z\xfd\xd3\xf8\x1b\x9bl\x15\xa2\x13P\x89\x03\xdc " "\x42\xdc\x04\x95\xe4\xf0u\xb7\xba\x0e/\xe6\xd0\x90\xb5+~\x07\xac\xd8\x95zkh\x84+l\xb7+l\xa4+\x08\xbf\"\xf4\xcf\x31L\xaa" "\xb0\x85\xae\xc8\x33\xcb\x93\xffn\xde\xa1\xa1i\xaa\xb0!Vz\x9a\xef\xea<\x84\x86\xed\x9e\xfd\x19\x65\x92\x19\xc5y{\xf3\xf7,+\xf7\x98" "\x9f\x08\xa4%\xb9p\xb2\xf3\xf7\x08W\x88\xe0\x11K\xb0\x84\xb0\x66)\xc3r\xb0\xab\xbd\x42\x1b\xf1(\xea\xe0G\x1a\xd5\x94\xd1\xed'_\xb1" "i\xfd\xe6\x9e&\xff]\x8b\x32\x17N\xfd\x7f\xf4\x43\xed\xcb\xa9^\x1b\xc8\xde\xfa\xe9\xfe/\xa0\x1du\xa1\xf9\xf9,\x90\xbd\xf0\xec\x11\x34\xa3" "\xbb\xb2\x44Z\x66\x7f\xc4\"J\xe1'\xee\x38\x39\xc5\x15qQ^\xffI\x1b\xd1~\x07\x93+\xaa\x95v\x99m\x32\xb1$~\nO\x7f\xa2" "\xc1\xf1\xee \xeb\x1a\xbc\x46\xa1\r\xd7Q\xed\x80\xdd\xc7\xa7\xd0\x16\xb0\n\xf7\x87\x42OQn\x00>N\xf6~\x89\x08%\x42\x0c\xf5\x94\xe9" "\xee\xdb\xa9\x36\x1d\x43\xfb\xb6T\x7f\xc2V\x1e\xc1\xd3\xee\xe6\xd8\x19\xae\x0e\x11\x97U\x34t/k:\xff]\xb8\x85\?\xc3\x9e\xa6;\x1f\x96" "\xdb\xb4o\xe8\xe1\xe4\xe1\x91\x96\xb6\x1ak&\xa5\xee\x82\x9d\xf3\x9fj=\xf5\xaf\xc6\x0c]\xe3\xab\xaa\x61\x32'\xa8\xb1}\xa9\xd1\x00#\x1c" "\x86\xf7\x13\xec\xe5\xb4\xa7\xc5\x1aw O\xeb]\x8d\x15Q\x8d\x03\x08%\xab\xeeZx\xd6t\xd2\xfaX\xa3\x41G\x86/\x39\x9dy}z" "\xc6\xfc\x8a\x1eh\xa6\x97\x87\xa5\xa7\x06/\x04\x61\x8b\xc1\xd5U|tZ,\x91*\xb5\th\x0b*\x83ZT(\x38\xfd\x9c\xd1\x39.\x13" "Up\xb7\xb4\xb9\xd6\xd8\x61\xacyJ\xfb\xed\x44/\xc7`\xc3\xaa\xc3Z\xdc\xc0%\xe2\xfe\x15\x38\xc4y\xd9\x8a\xd4\x92\xb3O\xa7_\x32y" "X\xab\x87\x42\x1f/\x94=\xbe\x1a\x07\xec\xb5\x7f\x9f\x9e\x43\x84\x1a\x9b\xdd\x1a\xe2\"\x1a\xc3\xb6W@\xaa\xed\xbd=\xf6\xfb\x95\x9a\xf3\xd7\xb8" "\x01\xb6W\x35O\x31\r\x80\x9d{\x44H\x43\xd3tW\t\xd7\xd0\xea\xd6X\xff\xeb z\xe0\xaf\xec;\xbf\"\x10\x95\x91\xd5\xa0\xf4s\xeeu\x13{\x8b\x12" "(\x9a\x39i\x08\x35^\xfc;\x8d'ul\x9d\x11\xd4\x45\x8f\x06\x05\x0e\x9d\xebq\xf7\x9e\xb4\x9b\xa8'\xf5\x9b\xf8\xfd(\xd9\xdc@\x43W" "J\xb9w~\x96\xe8:|\n\x02.\x87R\x8e\x9dr\x31y\xb2T\xab\xbc\xb2\x9d\xa8\xc3\xff\x45\xf9\xe6\x64\x03\xa4\"-W&\xa2)\x33" "\x11\xad\x99\x8a\xcc,&\xe2.\x1a\x1a\xb1\xe5\xe0\x88\xb6{]\x9c\x14\xe6JI\xe9\t\x1a,\xf0\r\x19\xd2\xeb\x9c\x91M\xa6\x05\r\x44\xb6" "\r\xbc#\xdc`\xf3\xd0H\xa7\x87\x82\x66\x32\xb4L\xda\x44pI\xe1\xbd\xb5$nRo\xb1\x45n%\xa7M\x10\x97oq\xcc\xda\x42\xc8" "\xeb\xc0\xad\x87m\xec\xba\xa6\\\x80\xb8\xb1\x36\x87\x1cJx\xf9\x89\x08\x93,\x37\x13\x15\x96\xf8\x15\x9b\xde\x15\x96K\x08\x7f\xa8\x62\x85\xa4\x8e" "\xd1G\x9b\xe6`\x65\x12\x9c@\xbc\xa7\x9f\x94\x88\x30\xcf\xb7\xb1\xf5\x64@\x97w\xa1m[\xab|\x05[\xc7X\xff\"\"\xccHm\x8eI" "\xda\x98+\x16\xda~\x8a\xc2\x19\xef\xcd\xe6\x8c\x85\xe6j#\xc4\xb0\xb8\x1d\xa2+\xa6\xfc]\xdf\xd2\x44\xd8\xa6\x81\xb8\x8d\xf5[\x42\x98\xbf\xda" "\xd8\xa2\x34`\xa4\x42\xe1y\xfa\xa4\xd1\r\x9e\x14k,\x94\xb8w\xf6\xa2\xda\xac\x94\xdaQ\x35G\xe6\xc9\x17\x10\xf6\xcfv\x34\xe6\xea\xd9\xa0" "\r/R\xa1m\xc0\x1a\x30\xa2\xb3\x10\xfd\xa1\x36G\x1cm\xac\xf1\x14\xc2(\xd2\xe6\xecQ\x9b\xad^\xdb\xd3\x8a\x43\xddv\xea\xd9+\xe2\xa4" "\xc9\xfe\x30\x17\x0e\x07mv\xdb\xdb\xd8\x33\x44X\xb7\x07\xeb\xc0\x43\x46Xx\x05\xcd[Wh>O\x42\x8c\"\x19}@\x88~J\x87\x83" "\xfd\x0e\xcd\x7f\x8c# \x84\xb9\xa7\x63\x81x^w\x19\x9e\xdd\x66r\x83Nt\x98\x07\xd1\x65\xed\xd0p\xd3\xc1L\xae\xd0\x02'\x06\x9d\xf8" "\x12W\xc1~k\x01\x83s\t\x97Y\xa7t\xa0\xe0\x92m\x1a\x02`\xbb\xa6\x1e%wx\x0e\x84\x19\x10\xc2`\xde\x61\xa5\xd6\x81\x03\x9er" "\x01\xda\x0f\xfd\xfc\xac\xf2;\x1c\x63u\x30S,\xfc\xc6S\xc3\x05U\x88\x01V\x87\xf3#]\xd6\x84=\xb6\x87=v\xe9\?\xb0\xa0M\x88" ".;\xdd\xff\x83O\x8es\x94\xbb\x87)\xb6\xc8\x13\x8d\x8c\xce\xbb\xe0s\x1e|\xb5\xb3|\xb2\xee\xfc\x8c\xd7\x96\xdb\?\x93\x9bK\xd0|\xab" "\x82O\x04\x8f\xd1\x18\x33\xbaS\x11\xab\x80\xfe\?\xfd\x13\xd3\x8ao\xe9g\x30\xcc*\xe1\x98\x65\xa2\xce\xf2\x61lN\x8dY\xd1\xb4k\xfa\x93" "\x42\xfb\x13\x11\xb6\x1b\x1a\x06S}\x0e\x8c\x94,\x37}Zk\xfb\x61v\x08\x16\xde\xd8\x93\x17q\x0b\x9e\xbf\xf0\xe5\xf4\x39R\xd2\x10g\x89" "\x85;\x83\x06kZ\x1f\xd1\xdc\x85\xb6+\xa1\xd0\xf6\xb1\x36\xfenj\x92(\x1c[\xea\x81\?\xd3Y\x1f\xa1\x12<\xb6\x94\xb0\xf3 \x45\xeb" "w\x85'\xe1$\x64\x9f\x06\xe2>M\xc1}L\xfb\x0b\x91\xa3\xfb\xba\x8f\n\x1f^\x44\xbf\x61\x1a\x86\xfb\x1a\x97\xee\xe9\t\xde\xb4\xa2\xa1\x0f" "\xad\xf4\xdfhH\xa5\x03\xff\x14\x8f\x11\x99\x9f\x8f\x90I\x95\xfa\x0c\x99\x98\x1c\x64\xe0L\xa2\xda\x83\x93\x06\xea>\r\xce}\r\xb9\xb2\xea\xb0" "\x41\xef#\x46\x81r\x0e\x0eo\x9c{\xe9.Z*\x8e\xf8\x03\xb4\x89J\x36,*\xa6w\xf3%\xb9)`/\xc9\xb4\xd7K\x17\xff\xcc\xb6" "}\xda\x8b\x95\xfe\xcb\xf8\x38o\x91\xe4\xa8\xdd\xf4\xd2\x0fnz\x9e\x84\x1cJ\xf6\xd9K\xe9\xb3Z\xeck\xfc\xaa\xbbnx\xb9\xda\xd7\xae+" "{\xda\xee\x9e\xda\x17\xcf\x00kr\?\xc9\x14\x11\x64I\xc4\x13\xa4\x00\x9b\xd1\xbe\xe5\xaa\x42*.\xba\xecI\xa9\x16\x9e\r\x10|\x19\x1a\xef" "\x14\"\xbb\x12\xa6\r\x9e\xd5\xa2\x81\xd9\x19=`\xef\xad\x92j\x32\xac\xb8\xfcr-\x8d\xf0\x64Zr\xb4\xe6,\x8fi\xf9\x05\xbb%\xa6\xed" "m\x9d\x81\x03\x1e\xec\x06\x9a/\x88\x32-\xf5\x61\n\xfa\xfe*u\xb6\x42\x17\xdf\xe4\xa9\xe1\rq\\\xac\xc4\xce\x9b\x41\x9f\xfdW\x61I\xc6" "QX\x30#\x1az\xac}\x1a\x84\xfa\xec\xa3*\xd5\xc2\x8cj\x8eZ<\x18\xb9\x16^\xe4h\xf2\x35\xad\x35\xb2\x17y\x9a\x1e`\"j\xdf" "\xf6\xb8\x8c\xe5\xaa\xd0<\x42>\xb4\xb3S\xda\xacU\xfb\x9b\x66VMm\xea\x83@\xfe\xc3{Y\x8e\xa1G\x1c\xc8{L&\xab$\x37\x87" "\x06\x17\t\x86\xe7\x37\xea\xc6\xb2\xab\x17h\xb0\xdc\x04\x1c\x8f\x05\xd8\xda@\x08\xcbM\xc0\x41z\x80\x15\x32\xc6\xa8\xdf\xc5\xf6\x1c{\xda_\xa5" "\x12\xd0V\x1e\xd0+\x42\x89\x95%\x01\x97\xe7\t\x31\xf9*\xfc\x00\x61\xba\r\xd8=\nl[\xee/\x44\x9a\x31-\x1a\x1c\xfd\xa3\x1d\xa7Z" "\x95g\x44\r\x16\x30\xbb\x05\x7fs\xe4\x01\x16\xdf\t\xd1\x91\nh\xd4Ur\x00\x13`\x7f\t\xe1\xca\xad\xa5\x01\xcd\r\x01;\x46J\xfd\x7f" "\xf5\x0c\r\xdd\xa4 :\xcf\x83~\x1c\x1d\x9c\x00.\xfe\x42\xf4\x81\x02\x36\x39\x01\x87\xde\x01\xbb\xd7\x01\x8d\xb9\x01's\x03\xbf:\r\x9c\x01" "\xcd\xfdJ\x7f\x1c\xb6|\x01\xad\xb0\x01\x62#\n\xd1\x37\n\xd8\xba\x07X\x19m\xe4,\x46\xc0\x99\xf2\x80\x45 `\xd3\x1e\xd0|\x1a\xb0\xa3" "\x14\xb0I\x0f\x10\xa1WX\xc1\xdd!\x38\xad\xd0\x96\xd2\x07\x43\x36\xe9#\x1a\xffG\xcc\x61#\x8e\xccG\xbf\x1b+\xd1#\xe6\x1dn\x81\"" "\xc4\xdc\xe2\x08\xb1[\x94\xf7N\x1a\xf9G\xe1\xf5\x31\xf8\xf4\n\xda\x16\xba\x42\xbcL\xa5.\xc8\xea\xbd\xa5\x9a\xff\x30X\xb1\x35Q\xf1\xef\xf5" "\x8f\xe0S\x1c\x8c\x10o\xdc\xe8\xf7+\"+\x1f\x15\xe9\xbd\xa4\"\xfb(\xa3\xa8x\xe1L\x0f\x95x\xba\xf3;\xa7\x8c\xfc\x93-O\x63n" "\xcd\x46\rV\xcd\xe7\xe7\xdb\x1f\x45}\xdc\x92_)\x39\xca\x80\x16\x97O\xf8\xf0\x81xJ\xc1hw\x80\xaf\xd2\x11`\xc4*s\xb4k\x7f" "\x83\x98\x8aQ\xf2l\\\x94\x63T/\x80\x03{\xb7\xe3P\x9a\x36\x0f\xca\x19\xe5.\xd3\xa0\x9c\x01\x17\xbe\x04\xe3h\xfa\xe1\x64\n\xaa(\xff" "\xe3'\xbb\xc6\x98\xcb\x11q\xc2\xaf\xf8\xdc.\xf7\xc5\xc6\xef\x8bw\x32\x91Q}\x1a\xd4\xcc\x34\x19\x1f \xa8\xa0jy]V\x61QZU" "+\x38\xc3\xd3Wvp&\x08\xe1\x66\xfc\xfb\x42\t\x91\x13(.\xf6\xc4\?\xeb\x87\x1d\x18\x9c\xfd\x89\x8f\xa9\x88\x0e\xf9$\xdd#\xd5\xc4\xbd" "\x9f\x61-\x8d\x89\x1a\x41\xc2\x16%\x99\x86\x15S*V\x35\xb4\xa0\x85l\x36M\x1e\xe3O\xeb\x83\xe8\x1eL~\x17Y\x96M\x11\xcf\xf4\xe9" "=-\xcc\x91T\xb9`\xe7\x7f\x02_j\xa3&\x8c\xb9\x88\x06\x93\x30sJs\xc9\x64/\x61\xfc\xb9\xd5\xa2\x95y\xe4\x90\xd5\x34\x8c\xb1'" ",V\x93\xf4\x34\xe5\x96\xc6J\xe4%\xb0\xe3\x87\x10\xa3\x1a\xe1L.\x19M\xeb\xd0lI\x95\xf1\xaf\xb3\x35\toyi\xdb\x35S\xd6\xcaJ\xe9@r\x1at\xca\xde\xb7\x12" "\xe1\x9f\xa3\xed\x41z\x0c\x35\xf6\x34:\xec\x39\xa5\x42\xc2~\x92\xa2\xa1\xe5P\xfa\x1b\xfa\xf3W\x9c\x62\x41\x99\x31\xfd\x34\xcf\x43\xf9\x39\xfdz" "TT\xc7\xe5\xb3S:\xe7M#&rT\xbe\x08\x07\xb5\x64\xf2\xad\x83\x30\xd8\xc7\xf4\xd8\?\xda\x04\x44\xc5>\x8d\xee\xdb\xfe\x84\xcc\xf1\xd3" "\xe8\x05\xa9\xc7\t\xb5\xa9-\xd8]G\x99[\xd7XZ\xa6R\xbf\xd3\x00\x32\xf5\x9c\x43\xff\x8b){\xfcS\xbf\x63\xe1\x9f\x13\xc0\x34n\?" "\x87\x83yt\x7f\xad)\xda~\xe6\xa4\xea\x34^\xf1$\xb0\xee\xbag\xfb\x34\x39}\xdf=V\xc2.N\xe9O\x42{\xdf\x94\x45}\xca\x11" "\xb0\xf0\x84\x83\x86i\x32\xe1G\xdf\xc8Y\x9c\x9fQ\"\xf4\x98\x88(\xde\xd3\x64\xfb@>\x39==h\xdc\x9f\xb2\xd3:\x63\xd3\x32\xa3\xb3" "\xca\xecw\x13\x38\x39\xe2\x9b\x85\x07\x0f\xa0\x05j\x13\x9e\xd6\xe3\x87\x8d\xffP\x32+\xe8\xdf\x86\xd9\x9cKP\x85\x98\x41\x9e\x61\xe6\x8a&\xba" "\x19g\xef\x94\x1a\xe2\x1dv\n\xd5\xe4\xcc\xa9\x36\xf8`\x32\xcc\xd2\x43\xc8\x95\xb3p\xcc\x8b\xc2\xe0>\xd3\x80\x05\xb6\xf4\x35\x98\x45\x8f=\xf0" "\xc5r\xda\x8c\xa5o\x46\xe7\xe6\x19\r\x35\x33\xda\xafgI\x0eO\x85UU\xc2\xcb''\xb6\xbaw\x91\x8d\xf9\x8c\x95\x9et\xe0\x33\xd1(" "\xbf'\xee\x8e\xea\xd0\x30\xb9\xb1\x08_\xfe\xc4\xfa\x33\x82\x43\x8b\xd8\xfa\x08\xaf\xdb\xf1\xba\x82\x65\x43r\x00K\x01\x16\x61\x37\x8bH\xd2\x08\xfe" ",\xbf\xc6\x61X\xc3\x16\xd1\x93{\xf2\xaa\xc8~%\xc5\x7f\?\xd0)]\xa4\x8f\x1d\xd8\x64\xd8\rP\r\x1b\xb1\x89h[\xb2\x06\x8b\x38\x8f" "\x87\xd1\xcdK\xd7\x15\x88\x9drxR\xf4\x33\xc4\x9bs\xdd\xc6\x9a\x37O\x83\xd4\x02Ks\x8d\xba\xc3\xc4\x01\x8fNj~\xb7\x10\x35\xf4\xca" "\xfc\xcb\x1f\x90\xc7\xfe\xab\xd1\xfb\x87\x07\xd0\xc3\xfd\xf7K\x32z\xc2\"Q\x1e^J\x07\x63\x97)Q<\xd5\xb5\x39\xa8^\x96Xl\xa8," "%\xb9\x12]\xc0\x44\x1b\x93\x0b\xd0\xbf=\xef\x30\xe5L\xc4\xfb]\xd2\xba\xb2\xe4\xc8pI\x9b\x89\xf2\xcf\x12\xb6\x64\x8f\x7f\xc9\xf6\x62\x19\x96" "\xee\x9ci\x80\x0e\xd5\xeaN\xfa\x8c\xa9H\x8b\xc3\x92\xb3\x66K\x9a\\\x96\xe9\x46\xdc\"\xde\x9c\xb2_j\":\x10K\xcev,\x39=\xbd" "\x64'u\x19\x0e\x8e\xc8\x33\?\x11\xb8\xe1\xe7\xdb#\?\x1b;\x9f\xcb\xe8\xf4\x10\x84\x1dlI\xab\xc9\x92}\x8e%\xfdo\x96\x9c\xce^\xb2" "\xfeX\xfa\xad\xc4Y\xdc(G\xb6KN\".\x39]\xb4\x64\xffK\xc9\x41\xd2\x12\xc1\x45\x85h\xfb\x95\xac\x14\x97\x31\xa6_\x97\xaek<" "\x8e\xbb\xd3\x08\xb3\xfe\xcb\xfd\xe8\x1c\xa2\x15q:N,-\xe9\xe1\xba\x64\x9f\x66\xc9Jo\xb9;-\xd1\x1c\xb8\xa4;\xe5\x92\r\xed\x32=" "\xfe\xf2\xa5\xbbS\xc2\x11k\x9d\x0c[N\xdb\x34\xa3\xe7\x1a\xd3L\x45\xd6\xe6*\xf2^\xd7|\xd7\x1b\x8e^\x36\xf4q\xe6\x02W!\xfc\xad" "\x36\x08\xfd+\x84o\xe4\x86o\x9d\xa1\x11\x84\x16\x07\xc3\x98\xee\x43.\x9a-\xddV\xde\x39\xff\x16\xc2\xa8\xf6\xf7\x0eT\x93'\x64Wj\x43" "[\xef\x86\xd6\xb2\xf4:\x1cs(\xff|\xc9\x37\xb4\x8am\xf8\xbe\x37\x08t!\x9c\xe0l\x88\x64.\x84;\xf5\x06\x0b\xaa\x8dt\x06\xdc\xb0" "\x46\xdd\xf0\xfdn\xe8\xec\xba\xf1\xcf\xd9\x35\xdfp\xfe\x45\xc9\xf1\x0b\xd7s\x06[$\xef\x90{\x34\x0c\x19\xf7\x7f\x98\xc1\xf2\xfb!\x97\x16\x1a" "\x7f\xe7\x17\x88\xe4=\xd4U\xdf\xd1\xd1\x17J\xe2\x30\x83R/\xb4\xb9O\xa3\xfc\xc7\xa0i\x98\xc1\xd8\x41hSv\x46t~\x45\xfc\xbc\x94" "s\x44\xd5\x03\xa4\x14\x0eT{\xff\x39 \x63S\x39`#\xe5\x61\x06\xcd\xb5\xd0 JSW;" "\x45\x05j\x07\xa2\xb3 }\xc4\xab\xb3\xdd\xea|\xb7\xe2\xefn\x98\x8e\x37\xa7\x92\t\x92\x1c\xaf\x64\x63\x65\xa3.\xe7\xfd;\xfa\xefw\xe4\x7f" "\xaa\xd9&\xac\xc2\xda\x39l\x38\"\x36x\xa8\xd1\xd3\xfc\x65n\xc3\xa2Y-\x32\x64\xect!\xf2/\x97p\x1a\xb1\xdcR\x44\xdf\xf8Y\xc4" "\xf9\x89\x33}u\xb6\x10\x45hs<\xc6\xf4\xdb\"\x0e\x90m\xe5\xca$_\xe0\xaa\xb3\x97\xf5U[q'v\xd1\x36|\xf9\x1b\xbc\\X" "u\x84\x39\xfc\x16\x41\xf3\x85\x45\xdc\x41t\x86\xdf\x45%\xe4.\xcc\x42\x0b/qM\x8c\x05\x94\x13\xa7\x97.\x11\xfd\x39\x44L\xe7\x00M\xf3" "\x32\xe2Y\x04S\xfe\x46/I\x10\xfdq\x45\xdb\x17\x9f\x1a.\xa6\x43\x03\xd3\xe2\xd7\x1b\x84\xe9\x81\xb6<\xfe\x13\xaf\xb1\x61\x8fi\xe9\xe5\x45" "\xac\xf7\\\xc4p\\\x44s\xbb\x1e\x1e\x61\x84$\x1c\xa3\x81\xcb\x82\x45\x07jQ\x9b\x82\xe6#\x62\x84" "\x01\xc3\x34L\r\x1b\xd3 \xa5\xa6\xa1Gh\"\xd3&\xc7\xf6\?\x87\xad\x8b\x85\xe5\x02\xd9J'P\x44\xbb\xb8p\xda\xbcP\xdd\x35\x35\t" "\x98\x0f\xb3ii\x44\x1f\x9f\xc5\x30\xea}W\x87\xa9\x66\xf3\x1c\xd0l\x92\x42h\xa6\x01\xa1\xcf\x1f\x98\x88\xe1\x8a\x88\xe6\x91>\xcc\x45\x99\"" "\x62.\x8bxt\xa2\x86T\xd7r\xb8\x39O\xc2\x08}\xca\\T-\x62x&\xa2y\xee\ngxj\r]l\x96\"\x11\xd1\x9b\xcc\x31" "\x93(\xc3\x61\x06\x06\x13\xd3\xd2\xfd\xca\\\xc3\xe8\xc5\xb4\xbd\x07\xde\x8f\xd1\x36\xccI\x85\xa1\xd5\x1ez\x39\x39l\xff\xe6\xaf\x16\xfe'\xc6\xbd" "\xdf\xc3\xf4j\x64\x95\xa1\"\x9b\xe3\x1c{\xa9\x39\xb8\x89\t\xbf\x91\x01\xa4w-\x37\x07\x37(\xd1l\xfc\x34\xcc\xed\x0eh\x14\x12\xd1\xdc+" "\x86\x45]P.#j\xd4\x06\x45~\xaa\x94\xee\x31\xab\xaf\"v\?\x31\x32{\x14\x11\x85X\xc9\xaf\x94K\xe4\x9d\x33\xee\x66\xd2o\x95\xef" "v\xb5\x06\xab\x35\xd1\x9e@t\xc3\x8aR\x36\xc0\xa7\xcd\xde\xad`K`\x61\xeb#\xec\xdf\xc0\xe4\xa4\x1a\xaf'\xf9\xeb\xe7,\xfa\xca\x43\x1b" "\xf0Ss_\x13\xda\xe0xX\x84\x1f \xb6\x93\x10\xed\x01\xbf\xc5|\xb0\x11\x1e\x12&\xc2\x17\x00\"\x86*\x45\x18\x16\x87\x45\xbe\x8a\"|" "\x02\x8d\x18\xc3\x41\x44.U\x31\xdd\x9aZ\x34\xb3\xfe\r\x8b\x9e`j\xcf\xbf\x38g\x9f\xb1\xc8\x66\xb2\x08\xa7Z\xa3<\xd1\xee\xa9\xe7\x9a." "\xbf\x46\xcd\xa2Z|\xf6\x94j\xe7S\xd0\xbc\x0b\x8d\xba\xff\x87m\xfe\x31\xf4\x36\xa8\x98\x0c_\xc2\xd9\x34\x9c#\x61\x93I\x43R\x06\x46\x66" "\xd1\xf8\xdd\xdd\x41v/\xb9\x11$Nh\xce\x06\xc3\x12\x8c\x06\x46,\xc0\x19\x9e\xb3r\x39\xc7h}x\xce\xaf\x9c\xc7\x0fw\xa0\xb9H\xf8" "$\x85\xb0\x30\x02\xcd\xb2\xa4\x01\xdaj\xa4\xe5\xd9sL]\x0f\xb9JT\xb8\xc8\xffU\x1b\x65\x8cm\x87\x65v\x8c\xcaI\xbd\r\xe2lR" "\xa8\xac\x04\xfcm\x97-\xa2\xad.\x10\"\x63]`\x9e\x46\xf8\x66\xd9\xe4\x82\xfd\xce\x0b\xe9\xbc;\xf9\x42L|\xf8\x13\xd1w\xbe`\x8dq" "\xc1\xce\xd8\x05\x9f\xf0\x02\xe1}\x86\x17l\xa0/X\xfa.\xd8*_`\x91\xcf\xf0\x82m\xda\x85\xf9\xd5\xdb\xc3^\xf2\x1e/y/\x97<" "\xe5%w\xfd\xb4xH\xa2\xd9\xdc\xd4\xd0\x8b\xdb\x15l\xc9\xc2\x81\x35\xa2W\xbb\x87o\xa7m\x10j\xdf\xba\x86\x43\xc8\x90[\x8e)\xed," "\x37\xba\xe5\xd8\xb2\x8d\x90}\xc3[,\xbe\x1dV~\xd7\x36\x9c\xa8\xb0\xd0T\xa2\x1f{\xa8\n\x13\xb8\x92\x04\xcf\xd1\xe7\x38ZN\xa0\xd9Z" "\xcd\x61\x65wh\x65\xe3^Z\xf8\x34\xca\xd2\xf0\x1e\x86\x87\xe1}\x12\x34\x9c\xec\r<\x44\x0f\xd6\xf8<\xc0Yl\xf8\xc8\xaf>\xf2\xe6\x9e" "\x30\x07\x32|\xc2\xca\xff\x61U\x97'\x98\xddV\xc4\xf5+<-M\xc4&\xd0\xc3*;\x12U\xf6\xcb\xab\xe1g>\xfdh\xf0\x01\x9a\t" "uX\x8d\x32\xf8\x35\x9cO\x8c\xac\xd3\xaaX\xf2\x39\xac\xf2\x36\xaa\xcc\xffU\x98+\x86\xafZ\x35\xdf\x33\xfc\x82i\xf1\xd3\x84\xf9\xe9U\xc3" "\xfdm|\x80\xde\xc0\x66m\x42\xb4\xcc\rl\xa5#\xb4\xf9\xaa\x61\x83M\x46\x43\x32*X\x9a\x80\xe5\x99\xd4\xd6\x1c}\x36\xb4\x05\x94\xffh" "\x01\x1b\x98\x9e\x17\xf6k *\xb8\x06\xa6@\x94\?\xec\x37Q\x84\x8b\x97h\xc3\x9bp:\xe1\x43\xaa\x16\?\xe1\xee\x42\xde%\x36\x64\x16n" "\xadp\x36\xa2\xcc\x1b\x88\x66\xaf\x11\x15q\?q\xe6\x9b]\xc1\x06\xe6J\x84\xc8\x66\r\xcc-\t\x97\x35gX>L\xba\x87\xd0Py\x36" "\x64\xbc\xcd\xfe{\x83\xf9\xb1!\x7fNO\x9c\xe4\xfb\x03\x34\x9f%\xe5\x33\x88\x16\xab\xa1nv\xc8\xaf\r]\xde\xd2\xc2\xb7w\xb7\xdb\x10\x95" "Q\x63W\xcd\xb2)k\xec\xeaV\x11sg\xd5\x61\x13\x0b\xde\x86M\x66\xe8\xe6~\xd0H\xd1\xcc\x41i\xd8\x84\x7f\xc1\xb0M\x8b\x43GJ" "\x8at\x19\xd9\xfat\xc2\xd2%X\xae\xc4O\x85=\x31Z\xd6\xa3\xe2STz\xc1\x31\xd4\x38\x9d\xc8\xd6k\x19\xf7N\xc2\x32\xdeI,\x84" "\x8a\x31\x19\xf6\x10XS\x34\x0b\x02 \x44*\t\xf9-\xe4\xcc\x8e\xfc\x39\xf7\xce\xa9\x17\xbdx\x62\x45\xd5\x61\xb2uv\x07\x05\xe7\xdfw{" "\xec<\t\xad\n\xed\x61\x32R\x19\x80\x97\x39p@J\xad{r.=\x13\xd3x\x9f\xca\xdf\xe5\x39{\x08=,U\x1a\xf6\xe2\xa5\xf4." "\xd6lSz\x9a\xc4'\xe7X\x01#\x9a\x39\xbe)\xad\xc4\xf6\xd8\xe5W\x46\xf9+\x1a\xf3z\xbb\xb6\x95\xf6\x37\xb9K\xdb\xd6\x99[X\x0e" "\xdf\xa4H\x44\xf7]\x16\x89\x37v\x97\x95\xac\x15\xdf\xc3\x11\x18\xe5,\xe5>v\x0f\xf6\xc3Oy\x85\x61\xe9\x08n\xa5\xc3O\xcc,\x0c\?" "\x31;\x64\x94\x36\x86\x99\xe4\x33\x39\x38\x06Q\xc3\x32\x04\x8a\xd0,\xc7J+\xad\xfd\xf0\xaa\xbc[\xbc@\xac\x34\xb1]\x8c\x88\xfb\xfd\xd6~" "\x18\x9c!\xc0\xdb\xb0\x1f\x9b\x39\x7f\xd8\xdf]~\x84/s\x88\xd5S\x44\x1a\x18\x0e\x98#\x03L\xa8\x19Y\x80\x83\xa8m\xd9r\xc8\xaf\x0c" "\xd9\xc4\x8cX\xeb\x8d\x30\x65\x31\xa4S\x9f\xfa\x83\x64\x9d\x34]\x8d\x98\x93G\x98R\x10\xf6y\x1c}\x96\x11\x96\xe9\x0fG\xec\x1f\x8f\xa2\xbb" "K\x10\xe5\x65\x14\xd9\x8a\x9e\xe1(\xce_\x81<\x0e\xaf\x66\xe1\x02\xb7\x42k\x86\xae\x80\xb2\x08\x06\x96y\xe8\xae\xc6V{\x8c\x85S\xc3I" "tk\xfa\x04{\xd4\x18\xd3M\x8a\x87\xdf\xd8\x34x\xf8\xcd,\xff\x13/,K\xfcP\x9f\xfe.\xad\r\x99\x86\xe5&\x88\x04\x9fr\x30;" "\rk\x05\x10\xe9\x39\x45pT\x61\xf3\x0b\x44\n(wW:\x65\x92<|\xe0\xc0\xb4\x06\xa2\xc1\x98\x46\x8d\x8c\x93\x19\x64\x1aI\x0e=\x19" "&G\x8b\?\xcd\xcc)SZ\x13\xa6\xd8\x41\xdb\xc8\xfe\xc2\x94Ym\x1a\xbfU@\x18R\x94j\xc8\xf0\x1f\xc2:\"\xbc\x02\xbfp\xc5\xa4" "\x88_%%|\x9eL\x46\xba\?H\xd6\x8a\xd8t\x37\xd3k\x8c\x32\x98\xc1\x1c\x65\x42\x1b\x88\x1b\x11\xf2G\x44\xcb\x1b\x46\xb8\xf7\x88h)" "'\x34\x43\xa4\xd0R\x44h.Z\xa3LT\xfc\x02\xab\x15#\x16\xd1\x1a\xc3V\x17;\x65\x42[\x1d\xfcG\xfb\xfb\x45\\\xcd\xec}\x96L" "\x02\xf8\xa0\x8c\x32I\xf3\x10\xdcl\x9crV\x0c@G\xd9_\xdb~\x46\xb8\xce\x1b\x91\xd5\x85\x1e\x84\x42\xc4\xfc]|]\x45^\x17\xed~" "\x92~\xa7\x35\x07m\xdb\x16\x61\xef\x1e\xc4\xf3\x65\xc3\xe0\x34\x9cO\x10-r\xc4x]\xa3,,\x81\x42\x8b\x83#\x1c\xe1\x32\xd1\xf8\xc1\t" "\x83\xb5\x8a\xb8@\xf4\x8dkG\xb6\xb1\xa5\x31\x39\xbe\x8c\xfb\x45h\xd2\x1a\x8c\xec\xc9\xb3X\x84(\xbcn:\xe5\x66w'#\xd7\x62\xdbl" "\xd8\xc4\xa4\\u\x31\xfd\xc2\xe3\x01\x39\x00\xbb\xfcvw\x06ZV\x32&\x37\x9f\xe9\t\xc6y\xf2\n\x34S\xa0p\x89\x64JN.\x9c\x9e" "\xda\"\xc2\xe2\x0b\xd1\x06\xd3&\xfa\x13\x42\x0c\xa7\xdc\xd7\xc3\x0e\xf8]\x89(O\xbf'\xfa\xfbP\xad\xce\xdf\x17\x46\xce\xf4\xd3\xc2\xda\xb9w" "\xc8\x1f\x02\xf9^h\xcb\x00\x85\x17x+\xc9u\xde\xe9o%\xb9Y:\xf7^o\x62S\xd9\x46,_\x17\xb1{\xe5L\xaf\x38\xca\x92y" "\xa7'~\x32\x42~p}wZ\x8a:\xd9\xf8\x19O\xba\xab]\x91\xc8\x45;\xab\xaa\x85VS\x8cNy\xe2<\xb3\xcc\x19\xf5\x33{/" "m\x17\xf9tg\x7f\x97\x33\xf1[\xfbX\xa3\xdb\xf8=\x13\x17W\x61\xfb\xc6\xb4\x04O\xf1\xc8+\xd4\xe1}\xa7,\x91\xef\xa0u\xfc\x85\xd6" "\xef\x13\x9a\xcb\xd4\xa8\x1e\x96\xf1\x39<\x88\x84\xcd!z\x19\"\xdat\x81\xb0=\x07\xadq\x18\xd5\x31\xceT\x96\x41\xb3t\x1a\xd1\x44\x89h" "\x9e\x19\xc2\x39O\x81RU\xb7\x05I\x15\x17\xd3\x45({\x1a\x1a\xd7\x11\xb7\xf9\x34\xa6\x13\x30\xa6\x61\xca\x05\xa2\xdf\xd0&\x83IZ\x88\x66" "\x0e\x1f\xd5\xa3\xdc%X\xbcI\x1e\xcf \xda\xa4\xa0\xd0z\xf6\xc2\x66\xd1\x89\xcd\x33\x45\xb4\x19O\xe1\xf7\x34\x19\xe1\xb9\x11\x38\xc1(\xa9\x18" "\xda\xbe\xb8\xa6\x61\xe2\x0b\xe2\xdfQ\x8dl>\x9e\xb9\x96Lz.\xee\x9en\xc3\x1c\xce.\x85\x04]\x65\x11\xab\x45r\xc5\xecW\x8f\x07\xb3" "\xf8<\x8f\x08\x34\xa2-p\xb2\xe4X^\xf2\x35\x44k\x9b\x84\xd5J\x9c\xc7}'\r\x1e\xea \xdd\x30\x92\x1e\xd5\x11>\xd7\x88Q\x87\x88" "\xb6#\x98p\xb5t\xfa+\x14\xd1\xcf\xbd[o\xe3\xe3\xc7\x64\x61Z\x03s\x80\x42[\x42:z\xff\x9dm\xc0U!\xaaUu\x07\xf3\xe0" "\x46\x43\xf4\x99\x03\xc8\xff\xeb\x30s\xc4\xfb\xef\xc6\xf2\xe9;\xe2\x8e\x08Q\x30\x95\x18\xc8\x99\x98\xac\xb7\x30H\x8bV\xfe\x02-\xec\xab\xd0z" "\xac\xca\x01h\xe6\x1e\x63\x38\xed\xc2\xb8$Z\xbb\x11\xddlv\x07\x33h\x83\x13\xb2\x01\x06g\xe0\n\xbf\xc5\xac\x93QN\x8b\xd0)\xa6i" "\xa5m\xee-\xa6\xc9\xe9\xb0\x10@\xb4\x9b\x8dS\x97\xb8#\xb3\xbe#\xe8\xa2\xb0\xf7\xeeL\xa6\xc5\xc8\xb6J\x17-x\x02\x99H\xba\xc2m" ">\x86\x01N\x34T\t\xefqn\r\x9e\xe1\x1c\xf1\x12\xf7\x96\x1cU\xc1\x8b\x1e\xfa<\"\xf6\x0e\x9cr\xdb\xe9Q\xe7\x37\x1e\x32\xd9\xe6\x9c" "v\xab-\xd3\x30\x64\x32&\x93\xef\xe4\xe8\x18\xda\x13\x8fZ\x90\x9c\xd1\x07L\x11\x42\x9b\xd2\x1a} \x0c\x8a\x94ss\x06\x1b\xcd\xd9\x86\xce" "\xd9\x37\x98\xeb~\x85\xb7\x0fl\x02\xe6\xf1\xd9\x07\x08}!\xd5\x96\x33\xac\?#\xb0\x9bk\x98\x86\x87\x66sI\x10\xd7\xd7\xd1\xcf\xe1\x9e\xb6" "\xff\xa3\xf5\xf5\xde\x8f\xa4\xa7\xca:\xc0\xb4\xde\xfb\xdegjQ\x45YVmwz\xce\xa6l\xa1\x1f\x1c\x66\x61Q\x19\x1f\xea\xd0\xe2\xe7+" ".V\xc2\xe1&^\xf6\xedX\x9c-\x80\xf6\x08\xe3\xc3\xa4\x96\x07\x9b\xf7Q\xa9\x81\x99\x8d\xf1!*\xdf\x31\x83\x7f\x8f\xf3\xf1\xd2\x8e\x9f\xfd" "\xaeV\xc6\xf0\xf4\x07\xb4\xdc)\xbcP\xd3\x34\xe6\xd2L\xd3\xe8\x38\x7f\x9an\xc2\xe8\xda\xd5\xd9\xfe\x37\xaf\xce\x64\xe0\xe4\x9a\xd4\x66\x9a)\xcd" "\xb5\x61|\x86)<\xa1\x19\x9e\xc6\x37\xbc\x97\x1by\x46p\xac\xf9hR\x93\x42\x19\xce\x8e\xe0\x89\x39\xa9\xfd\xce\xc8y\xcd\x18\x9e\x14\x9d\x61" "\xf1\n\xc5\x19\xda\x9f\x18\x8d\xf2\xa1Y\x62\x44\xcb\xbd\x85\xa5z\xfc\xb0\x84VxU\x1f.\xdbJ\xd0\xb4\xe4|\x44\xf1\x1d\x9eS\"\x16\xaf" "\xc0R=\xed\xa5\xab&\xd5\x7f\xa0\x1b\xdc\x0eW\x38`\xe1\x08\x8dX\xb8\t\xb1y\xeb\"&\x1aU\x9c\x81\xf5\x1b\xa7\x9c)z\xe2i\xac" "wo\x44\xe5:\x61\xc8\x0f\x63\xbc\xae\xa4'o=&\xb6\x41\xba\x88\xbd\x93\x38\?\xff\x9d\xad\xe5Q\x7fgL\x96^u\xb7\xbe\x90\x87\xfb" "\x37\xf5\xc2\x41\x86\xe4\xd7<\x91\xa4\x64\xef\xad\xb8\x84k\xdb\xebJ\x92\x03n\x7f\x38\xf0u\xab\xcfl.x\x38\xe0\t\x37\xbcI\xce\?\xa2" "\x35\xaf\x31\xc3\x35`u\x31\x62\xab\x44\x11\xad\x33\x63\x0c/\xf2h\xd1\x45\xb3\xe6{R\xf3\x33\xa3;(\\|\xa1\xb3=\xa9%\x99\xed\xee" "\xbao\xe2\xee\xa6#\x9d\xa8\xc4\xec\xb7\xa2\xdd\?\xc4\xe5W\xd8\xc8\x44{\xba%\xa7\xe1l\rq\x9c\xe1y\x9f\x7fg\xf6\xee\x9e\xc3\xd6G" "|\x94\x0b;\xa7\xd0\xda_\xa0\xebx\xe0g\xf8\xfa\x18\x31\xb8\x14q\x62O\xf6,\xbf\x36\xc2\x16$\xec\x1e\xaa\xc5\xd2\x66\xb9M\x8bn\xb6" "h\xd6&\xcf\xbb\xe6\xb9\x8cj\xfc\x9b\xbb\x8f{]\x15m\xf5\xf5\xe4\x45\x97zo\xef\x61\xadR\xed^*\xeb\xd0\xe2\x35\x89\x66\x1e\xe3\xca" "\x32h\x8b)'/\xd8\x30\xd3\x18>_\xc9\x9fk\xf1$\x90\?j+\xd0\xc6\x16\x42s\x44\x11\x96K\xbbN\x8e\xe2\x14|Z\xa4;\xcd" "\xa4\x9a\xf9_\xaa\xb6\xd1\xc7\x42\xd6y\t\xab/\xba!s\xed\x05Z\xe3\x19\xfeQ\"\xb6\xeevG=\xd4\x65\xa2\x8dr\xe1\xc5\x07\xa2\xc2" "\x9a\x96\xd4o\xfe\x34\x19\x9f\xeb\x12\x1bh\xb6RR\xb8z\x0b\xf3\xa5\xdd\xdb\x08\x9a\xd5t\x46\xf4\xfcLL\xb6\x35\xf8nO^\xfc\x42Q" "\xbe\xf4\xbb\\\xa2i\x82\xb6\xde\xa6Z\xf1\xc4\x99\xee\x02g\x1a\xac,\x10\xb7\xa7\xd2\x15v\r!\x9a\x45<\xa3G\x8c\x88\xbe\x0eU\x45\?" "\x34I\xc5\xbb\x39h\xfd\x0b\xa3\x8c\xff\xe1\xf8\x64\x9a\x9c<\xd5l\xb7p\xa1\xdf\x9e\xda\xae+\xe8\"\xaa\x86\x07\x42$\x0b\xa1\x99&\x8d\xa8" "\x12MLJx\x88\xf8\xee\x11|\xc2\x8b\x8c_\xbe\x92\xefI\xc4\x34\xd5\x89{\xff\xcdg\xce)\xcf\x17\x9b\xc1M\x34\x66\x11,z\x16\x9a" "\x65S\xb8\xc5-&\x07\x19\xf5\x63\x9f#\x03!Z\xb2\x31u\rWm\xea\xf4\xf4L\xee\xd4\\\x12n\xbb{Z|\xb7\xd9\xd7*\xfb\xdf" "\x44\x9c\xeeT\xb3)~\xd3\xa2\xdb\xcb\x38\xf3\x01\xcd\xcc*\x46\xcf\t{)\xac\xc6\x16\xeb\xcd\x42\xbc\x38\x0bY\xa8T\x9b\x8f\xe1\x8a\"\x1a" "\xdf=\x42LL^\xfc\x95\xeb(\x88\x99\x44\xc5\x9f<\xac}\xa6I)L\xb5\xc7\x93]}\x1d\x15pj\x0c\x92\x84u\xbc\xfb\xdd\xea\\" "\x0b\x08\x33&\xda\xd4\x89\x0c`\x66\xa0\xd9_\x8c\x18\x65L\xea\x18\xfa\x0bm%\x96\xd0\x9c\xd0\x85\xd6\x45\x14\xda\x36\xbd\xc6\xdfy\x1d\xa2u" "t\x8d\xe1\xb9]\xa8\x0e[\x8b\xf0l\xe0\x84u\x04\x62\xe1\x89\x99Y\x35\xbe\xa0:\xa6\xfb\x84\x66\xe7\x16v\xe6\xe1j\x1e\x66q\xcb\xf0\x1c" "\x11\xae\xc0\xa4\x9b\x07-\xc0\xdb\x84{_\x08\?\xee\x65\x90\x12\x9d\x98\xd6\xf8\x9dU\xc9%h\xdd \xa3\x06\xcaG%\x64\xda\xb6\xb6{x" "sM\x63\x32[\x04\x64\xd3`\xdf\x31\x91w\xd1\xc0\x94\xf0\xa4\x81\x99V!Z\x62\xa5<\xfa\x9fVw\x86\xd9\xd2\xde%\xd2\xf8[\x10\xcd" "\x95\x8c\x62\x17s\x93\xa6\x45\x37\?\x88\r\x61Z\xdc\xe5\x9a\x0fh\xbe\xe5\x8ai\xc9:@\xacQ\xd3v\x8d\x63\xac\xc9Tm\x0b\x9e\r~" "g\x8bxy\x06\xed\t\xc9\xa3KZ.\xd7\xd1\x80\xe7iu\xa5\xd8\xc7\x63\xfe\x12\xedo\x03\xfdz\xe1\x8c\x0f\x65\xc3\xcfI\x03\xdby\x1a" "uY\x0c\x13\x46\xb5\xd2\x08\xee\xd8\xd0\xfe\x9eH\xb5~'\x15\x03\x0e\x86\xa1Y\xbc\x1f\x88\xf3\tLT\xa6i\x64\x17s\xa0u\r\xce\xed" "\xa6I\t\x62\r\xdf\xf0w\x14\r\x1e%\xf5\xb1\x04V\x34\xd4\x66\r\x44\xa4\x30\x46\xcbG\xf9s-\x39;\x8c\x9f\xf0\\\xcc\xb2\r\xf4\xf9" "&\x9cn\x11\x9a\x9d\xd1\x18[\x18!\x11\xf9\xb0\xf1G\x7f\xef\x62\xec=q;w%N\xc4\x1c\xda@\x37[\xb8\xbdp\xfe.z\xec>" "\x88\x36uj\xe7\xd4\xb6\x07\x99\x34\xfc\xf1\xe0!\xa5UK\x8b\\:\x99'L\\\x14\xa3\xdb\x93\?m\xe1\"\xab!\x13\xcf\xfe\x8e\xa2\x1d" "S\x11N\xf2&\"\xfc\xa6\xc7\x13\x32\xa2\xcb-\xe2@\xba\x1e\xef\x08q#\x9a\x85\xc3\x9b\x34\xb1\xceKhvm\xa1\xc5\x10\x10V^\xa3" "J&\x99\xd8s\x35\x11\xbch\xd2L\x16\x9fq\x35\x83y\xa6IS\x63OH\xad\x81\xa6\xa1\x89\x95\x34\x42[\xf0\x63\xf4K\x63\x1a\xe2\xff" "\xd2u&Z\xa9\x04M\xb6\xbe\xf7M\xee\xa3:\xe1\x00\"\xa0\x88(\x08\x0e\xa0\xe0\x00(\x33H\xf1\x30mMoq#\x62\xef(\x39\x7f" "w\xafu\xd6\xf9\x62\x17XT\x65\x65\xe5\x18\x19\x39\x61x,\x61`\xefL\x07.\xe0\x46\xb8\xcc\x88\x99\x1f\x83W\xdf J\xaeN\xd8\xad" "\x80/Kr\xedL\xce\x86l\xe1u\xc2\xcf[\xd0\"\x46\x08\x83K\xd2\xee\xa3\x13\x1d>\x80\xb6\x0eLxVt\x66\x13\x43\x13n\x42/" "\x9cW\x9c\xbf\xeb\xfd\xc8\xf6\x94\x9et\x62\x34v:\xccjt\xfe\x11\xda\xce\xcd\x13\xc6\xfc\x12\xda~u\x46\xa9\xcb\x31\xb6/JO\x7f\x05" "\xb7)Qs~\xc7\xc6x':\x89\x96\xd6\xa7p\xd6QU\xd4\x16\xd1q#S\x37\x85\x64\x31u\x95\xa2\x05\xd8\xfd]\xb6\x93\xf2+\xbc" "\x97\x44\xd9\x8c\xaa\xb2\xe0\x94\xc6\x02\x9c\xeeU=\x82\xeb\x1bp\x9bQ\x87\xcbm$\xc9\x15&\xf9&]\xb8G+'$.\xc1/L\xa8" "u\xf3\x08\xbf+\xe7\xd8\xfd\xdbs\x9c\x9f\xbd\x97.\xb3\x9f\x06\x17\xfb]\xbc\xc2\x0b\x04j\xf5\x98\xa9\xfb\x12\x88\xc7\xa1\xb4%v\xfc\xf5\xc1" ",\xfb\xc0\x7frt\x1c\r\n\xd9\x65\xe1\x8d\x66\x10\x32!\x9e}\x97\xed\xba.V\xe1\tk\?\x61\xeb\x80\xf9\xbe\x1b\xb5\xc7r\x0e\x0c\xbf" "\x8a\xd2\x08:_\xf1\xca\xde\x8d.\x1b\x0c]>\xf1.\xbc\x88'\x0c\xf5%\x9c\x0e\x9c\x61n\x06\xcf\xa4\t\x03\x80)-g\xd3\xa5Ux" "x\x08\x16\x91\xac\x88\x15(|\xdcs\xb2-\x03\xf3\x04\xe6\x90\xdf\x36/\xc5\t\x03\x85M\xbaXk\xa4\xc4Y\x31\n+\xac#\x35\xd2\xe6" "\x37\x38n\xc9\xfd\xc5US/\xd8(X\x88:\xee\x05{R\x0b\xd1j\x7f\x41\xc8\x35\xe5\xd6\x19\xe6NY\xc7\xbf\xb0HW\xb2\x0f\xf9\x12" "}X\x06~\xc1r\x08\xe1\x08\xc7\xd9,z\x61\xcb\xe6\x95U\xf9\xeb\xef\xea\x13\xb4I*\xe5\x1c\xb4\x65w\x93WV\xee\xaf\xf0\xa8\x33\xfe" "\xae\xeb\xfc\x95W^\xee+/\xf7\x95\xb9\xea\x95\xd5\xf2+\x9b\x41\xaf\x18!\x33\x62\xd6KLg\xab\x01.\xf6\x9d\xd9\xa8*\xd4\xaa\x03\x97" "j\xa8\xa0!mu\xb6{\xf4@\x98\xab\xec|\xfcWk\x9aj\xb4\xe2\x8f\x9fL\x35G\xf1k;S\xa8\x43\xcd\xf4\xfd\x92LI\x8d\x08" "\x9f+\xa8\xe9>\xeb\x16U\xc9\xe4#K\x90\xc5\xbe\xc6\x82n\x15w~\x12;\xab\t]\xb7\x66N\xbe*\xafQ\xbb\xe9\xe4K\xae&\xc2" "\xee\x88\xf9pJ\"=\xa3\xa7!\xf8\x8cK\xf0t\x8f\x06\xfc\xd3\x61U\xe3\x93\x0e\x66\xff*\xf5\x66,\x1f\xb2\x43\xf9\xcaj[\x19\xe6r" "\xd8\x35h\xf2\xca\x8aZ\x19Vz\xc9\xe6\xc3\xd3T\x17\xb5\xa1\x66VS\xa3\x62\x07\xc8\x1apl\x16\x36\xdb\xda\xea\xb3\x80v\xa2\xba=\xf0" "\x15\x8f\x1e\x1b\x14\x0b-\xaa\xd1\xe4\x35\x39u\xe2\x16Y\xe2\xbe&\x93\xadS\xdb\x89\x36\xe9.jz\xb0\xab\x36/\xe4\x80\xdc\x80\xa8\xfb\x95" "\xe1\xe9M\xf6-Q\xc5\xc7\x1d\xe5\x97\x92\x1e^\x38\x31L-\xe6\x15\x9e\x90\xd4\x95\xff\x43\x92\xd1\xe7@h[<\t-\x12\xdb\xa4\x17\xe6" "\x9f\x41<\xba\x1e\\!\x85\x8d\x07v\x17{\x1c\x37R&\xe6\x1a(\xe6\xcb:\xfd\xf0\xeeZo\x87\xd9\xdf|\x96\x93\xcd\x08k\xb0\x45Y" "\xd4H\xa1\x39\xf0\tW\xfcq\x34\x34zl\x65\xf4\xfc\xaf\x31\x1f(\x44m\xd9\x43(\x61!r_/z\xdes\xb2(\xee\x45\x1f\x8f\xd9" "\x46V\x93\x1e\x02\n\tm*\xdd\xa8{\xad\xa1\xf9\xc0\x18\x1a\xc6\xf4\xb9\x95\xccq\x11q\x63\xe2\x8c\xa6\x95\xf0\xe2\x0e\xca\x66\xf0\x84\x36\x83" "\x37\xe9\x61:\xfdw{\xb7\xa3\xd2\x13\\&\x86\x88\x8d\x98\x01\x12\xd3\x1c\xb0\x84\xb6r\xce\x88\x99\x81I\x8f\xb9S\xa9=\x00\xdb\x97\xcf\x14" "v\x01\x82y\x7f\x93\x99\x83\xd3h\xffRwO\x0c\n~\xcc\xd3K\xcd\x87\x13,\x19\x82z\xde\xc3\xaa\nW\x08\xc0n*\xfe\xf8\xc0\xbc" "\x15T\xd6]\xe8\x31\x07\xf5\xd8\xda\xea\x65\x41I\xc5\x44\xca\xf5\xb1\xf4\xd2\xa8K\x16l\x12\xdb\x14\xcb\x07\x35\xf9\x37\xfd\xb0:\x00\xcdI\xc8" "(\x95\?\xf3\x8a*\xa9o\xc2\xe2%Tw\x02\xf6I\xff\xd6\xa0.\xf9,>\xb5\n\xa7\x1f\r/\x9d\x1a\xf5\x88\xdf\x11\x05\xb7Q\x33\xd5" "\xf7\n\x9d\x98>\\>'}\xbe[oR\x01\x64\x0e\xe4\xa6\xa2\xdcul\x9e\x0e\xa2\x82m\x38\xb0'\xf0\x16\x1e_&\x45i\xd2>@" "\xa1#\xf7\x16\x16\xa9K\xcf\xf1K\t\xa6\xc5<\x35\x46'\x97\x88u`\x8a)\xa0\r\xe2\xb0\x11\x64g(\x17\xd3\xbd\xf2\x9f*\xc5\xe7\x41" "r\xd8\x85\x32\x37\x00#\x1b\xb2o\xf0\x16\x31\xfe\xae\xde\x11\x85\xd4T\x38\x38\xc3T\x8b\xa8\xa7\x9eS\x32\x1c\x1b\x46\xaa\xb4m\x82\xae\xd2[" "\xf8<\x92\x9f\x65\x19\xf5\xc6\x01Y\xa5\xf6*\x83\x9bL\xdd\xfd\xe8\x84\xc5\xe1\x01\x0f\xbc:u\x15\x7f\x8e\?\xd3\xe9kk\xcc\xc2\x35\xec(" "\xe9\?J\x93\x9f\x83Io\xea\x1f\x1c\x9cH\xd7\x04\xaa\xff\xe6\xcc\x82k\x43i\xc0\x95\x13\xdd,zY`q\xfe\x86\xfd\xae\x8d\xd1\xd7\xa3" "\xa4\x90\xab\xe4\x61\x19n\xf0\xd8\x30\x0fj\xdc}\x66\xa3R\xd8\xf9\xca\xae\xdao+\xb8\xd9\xfdQS\xa9\x85S\x10\xb5=t\x62*\xc2U" "\xf8r\x04\x9f\x61S\xbb\x7f\xbf\xcd\x1e,\xfc\x18\x85\xf7\x87;yHT\xfcv\x08\x17vU\x43\xf0\xe3\xdb\xa9\xc1\x88\xcf\xf0t\xe1\xcal" "\xdc\xf9\x89\xdd\xa0\xe3\xaa\x1e\x9d\x7f\xd9\xddT\xe9\x86u\x8d*\x38J\xc3l\xdc\xc8\x15\x64\n\x63^j\xaaG\x01\n\xf8\x37y\x99\xe4\x9a" "\xd9\x18z\x8b\x0b\xc8\xd6\xf1yw\xe7:\x10\xd4J\x88V\x99\x32\x1c\x8c\xd9\x82Q\x15\xed]#\x9e-\xd4\xfelG\xc5\xd7\xa5\x1d\x95\x9c" "\x16\xb3\xbfk\"\xd5\xe2\xfbG\xa7'\xe8\x1f\xcf\x35`\xe5\x16_H\x8e\xf0\xac\xe1-!\x64&\x96\xa6\xb4<\x01\xcc\x07\x89\x92\x97\xf5\xf8" "\xd2\xdfWQr{\xfe\x96y\x36\xb4\xa1\x8d`\xe7h\xd8\xdd\x64g\x83\x62\x82j\xf7_\xfe>\xef*\xe3\xce\xc3K\xa6\x87N\xe9P`" ")\x81\xa9\xa8u\xe6*=\xba\x05y\x95\x88\x01%\xbc\xa7\x36\xbf\xee\xc9;\x9c\xeb\x8c\x1a\xfb\xdd\x9c\x8aTi\x96L\xf6\xd6P\x16tr" "\xf2\x1eZ\x04~!\xbf\xc5G\xfa\xce\xd2\x43\x19\xad+X\xb1hJ\xaa\xeb]\x35\xf9\xca\x94-\x39\x37r\x64\xceL\xdf\x39\xdc\x14\x1b\xea" "j\"\xe8\x1e\xcc\x95\x7f}\x03v\xc7\x08,#\xe6\xf0\xdc\x19\xce\x07\x89\xb9r\x99\x8a\x0e>\xa2\x41\x9e\xea\x12\xfc\xb1\xe4x\xf7\x1f\x91\xd4" "\x8d\xdf\x0bi\xb5\xfb\xaf\xd2\x02\x06\xad\x8fw\x84:\x34\xfa\x45\x8a\x19\xbf\xb5\xdd\xe4@\xdf;\xc7v\xde\x31\xc7k\xf4\x8b\xc5&\x32\x93w" "v\x82\x94\xd2\x16G\xc0\x63WQu\xbd\xa3\x92\xed;T\x9d\xdf\x41\?\xed=n#\x19\xe2\xfe\xdc\x19m^\xc2\xbdKW\xd2\xf5\xc2R" "\x66Qo\xd6!yG\xe6\x86\xe3\xb6\xa8\x1c.\x13;\xcb\t\xd1GSJwR\xf3\x15^\xa2\xf7\xbf\x9e\xda\xbb<\x41\xa7\xe6\x90\xc3M" "\xfc\xba\xce\x0e\xe8\xfev\x1dW\xf1\xb8\r\xf7\x35S\xe9\xdb\x11\xab\x95w\xcc\xd4\n\xaf\xf0si\xe3\xc4\xb3S\xfa\xd6\x63O\xf8\x83\xaf\xac" "\x12\x0e*\x62\xda:\xe8\xac\xb7\xf0\x01g\xcf\xc9G\x94\xaf\x80\xe6z+\xb4-J'\x1fXR!\x44\x1f\xf4\xc3\xcf\x93\x8c\xde@\x0c\x91" "\x7fH\xe5\x04\xae\xed*>\x7f\x97#'\x87K\xd5\xd4\x61\x0e\xbcY\xaaX\\|\xb2k\xf7\x89\xd5\xd5\x42\x9b\xf2\x15~\x15\xc0\xf5\n\x44" "\x85\xf0\xc9>'\xe3\xe5*\x97\xa0y\x0eM>\xd9\x83P\x66\xfb\xd6\x9a\xc2\x66\xba\x30\xd1\x41\x34\xb3\xf3\x1a^\xbc\x64j\xb9\x65\x9fKU" "tV\x88.zl\xba\xeb\x01\xbf\x66\x35\x9f\n\x99\xe9_\xb0\xc5\x94\xc2.\xf9=\x00\xd1O\xf8\xe4\xd8\xe1\xa7\xf5oWn\xfa\xb5`q" "\xe0\xe4\x13\xfb\xf7\x18\x7f\x17\x9d\xe8\x66\xe5J\xdeGO+Q\xba\x04\xf8\xb3\x0e\x65;*N\x06\x1c\xd4\x1b\xf0\xb8\x12\xeb/\xcc\xc4\x02\xe2" "\xc9 j\xf6x\x8b\x83h\x34q\xfa\x17\xd5\xc4\x88\xb5\x9a\xd1\xd7\x83\x9bl\xe9\x0e\xe4\xf5\xf3\xefJ\x03=^=\xc1\xb4\x05\xa1\x42$\xfe" " ~\xb3\x87\x38HnJN\xff+\x35\xf9\x0bj\x62\xbeWM\xc4o\x37\xd3O\xa3&:l\x03\x36\x00\x87\x08N\"\x34\x97s!Z" "\xd2\x0c\xea*\xdc\xac\x9d\xe1k!^\x9f\xba\x8a\xce^\xd9\x81\x63HS\x61s\x13\x7f\xb7y\x0fT\xac\xa7\x86,\x81\x86\x88\x63\x37\x61X" "S\xa1\x05H\x33\xfe\xae\xf3X#h*\t\xca\xd8{\xcbT\xda\x1f\xa5o\xb8\x32\xd6\xe6\xc3\x64\xcfZ$t\xe0\x34jHI\xfeN\xfa" "T\x0e\xbb\x85\xe8\xb4\r\xf5\xf5\xa3m*\x8b\xf8l*:\xdb\xb2v\x1c\x31K\x8f\x38\x90\xf8\xc5\x97M\x99L\xa6l\xdd\x33\x80\xa9\x10Y" "\xe6\x8b\x63\xa9\xc2Q\xf8\xd5\x8d\x0f>\xa1\xf8\xed\xe8\xba\xa1\x7f\x8bY\x1cW\x16\xd2T\x94\xc5\xbe\x11\xa2\xf0\xfe\x82\xe7\xbd\xd4\x43pi\xf8" "\x62\xb6\xfe\xfa+z\xbe\x7f\x17 |\x66&\x0c\x8f\x39\xe1\xca\xf2\xc9\x84\x0f\x8bq \x85\xa7'\xa0\x45&P\xbe\x82M\xfc=Gy=" "k\x32\xf2\xa2P^W\x0cnL\x98*\x93\xbfy\xdb\t\x02\xca\x1b\x93\xc9\x9c\x83\x14\x13\x0e\xcbL\xb0!\x89\xf0\xe6\x05\xc4\xac\xf3\x44:" "\x61\xf1'\xbf\x8a\xf7\x43*\x64{\x0e\x13V\xa1\xc2\x91\x33;\x84V\xd6\x84\x65\xc0\x04\xf1\xae\x85\xb6.Nh>i\xc2\x1f\xabQ'\xcc" "\x0c\x93\x04\xe5\xf6\x84#\x8b\x13\xac\xc8\x12\xce\xf8\xf9\xea\xdd\x19\x16\xdf\x11\xc1\x63\xc2\x1d\x61\x84[{$\x13N\x9bL\xd8@\x99\xa4\xd5\xc7" "xP\x85y\x8b$\xc3\x1e\x44\x42[\x8b#\xec\xfe\xb0\x35:\xb5U\xa6\xe7\xac\x97L\x95\x86\xec\x06O\x11\x03H\xb8\xca\xa8[\xbf`\xf0" "\x98*\xdc\xd6\xffU\xd9\xc7\x18\x9f\x98\x66\x9b\x93\x8bi\x9b\xe2i\x36\xf5\xe6\xab\x98\x37\xa0\xedP\xa1\xf9\xae\x63\xf9\x96_\xb4=\xe6\x85\xa8" "\xfe\xa7\xcc\x12S\x36)\xa6\xcc\x12\xd3\xf0\xe5\xd0\x99\x1e\x9f\xb1\xc5\x36\xa5S\x85\xd2\xef@\xcc\x18\x8e+\xd3\xf0\x95\xd7\xc7\x84\xc0\x8a \xe5" "\x13\x19\x38YN\x99\x89\x01\\\x35\xb3\x13\x61\x00\x63\x1a\xce[\xd1\r\x37\x9e\x30\x95\x14\xa4\xbfR\xd2(\xa9\xa3J\xb6\x30\t\x9f\xd8\x9cR" "\xf8\xf9\xc2&\xcf\x34\\\xf1\xc7WM\x10\xe3\xd2\xd3h\xff\x16<\xc5\xe7,&\xa7\xac\xf7\xa6\x08\x12o\xe4|\x8a\x9alV\x9a\xf9\x93}" "!\xaan\xe9%\xa2*\xee\x04\x9c\xeaT\x85\x05\x62\x30W\xef\xbf\xeb\r\xd5\x43\xb8X\x84#<\x8c\xa8\x8e\x04\x89Z\x1aR\x86\x05\xd0\x34" "zx$\x7f\xb2\xf3\xa1\xe2P\xb2\xa1\x37\x8d\x16\x43\x10\xa3\xe6S\x0e\xe0L\xb1q\x86\x10\xc3\x62Sy\x33\xb4\x90\xc1@\x31\xfd\xec\x84\xcc" "\x9dZ\x0eI\xe7\xc2\xc2\xd0\xba\n\x31\xe1\xad*}\xaf\xb3\x8d\x33M\xb6M-\x9c\xf0\x86\xa8\x92\xd6\xbc+\xce\xc2+\xb5\xd2\xc7p\xb0\xa8" "\n\\\x9c\xc5\xac\x8f\xc3\xf3\xf5\xce\xd3!\xe7\xa1-\xd9\x17\xa2\x04\x9b\x87\xa8\x16\xe7\x88#\"\xc4x\xf1\x1c\xee\x8e\x42<%/}\x94\xcc" "\x88j\xb2\xf4\x98s.`\x8e\xc5=\x42\x38$,~\xa5\x30\x43\x8a.\xb0\xde\xdc\xf8\xd7\xac\x31\xf5s\xfb\xfb\x33\xc9\xd4\xf6>\xcaw\xfe" "\x86\xaa\xf5\xd8\xdf\xeb\x07\x35\xc6\xa2\x13\xa8\x62\x89\xb9\xdeT\xe9\x19\x9e\xb8P\x18\x1e\x37\x13o\x9f\x99\xcf\xfb\xf4\xfa\x31\xd5\xe9\xee\xfc\xfa\xdf" "\x90\xb5*\xce\xa4\x98\x89v\x9f\x9a\xb1\xc5\x93\x86\xb9>\x8a\xd7'\xae\xb2\xc5\xf4P\xd9\xb0\xb3\xa9i\x07\x8e\xcf\xa6\xd2\xbd\x63:\xef\x98\xc2" "#\x30\xf3q\xb5\xfb\xc1\xd3}\x66\x62X\x65\x81%\x18\x93\xc5\x9f\xb9\x64\x61\xb5\xd4\x97t\xef>\x46gs\xa9~z\x1e\xc7M\x14\x1a\xb1" "Jm\xb3\x0fz\xac\x80\xf4@\x98\x1f\xf3i\x88z@T\x38\x37Y\x12\x88\xfavr\x46\x64\xa9\x0e|\xe6\xfc*\x66\xe9\x99}\xba\xa5\x86" "}\x41\x9eX\x62\xdd\x8d\xb0\xab\xdb\x8d\xd1Qn\x19~\xde\xb3\xfd\xb0\xc4\xb2\xc4\xf0\xea\x34S\xcbo\x44P\xdfQ\xd1\xeb!K\xca\xbf\x63" "q\xe3x\xe7\x18v\x13wS\x9b\xc3\x83;\x8e&.\x39W\xa6\xd4q\x94\xbd\xfb]\x85\x07M\xc5\x9e\xcf\x12\x11\xe9\x85\xc1\x9c\x8e\x8b\xcb" ",u\xb6\x87\x9aVLJi['G\xb8\x91\xa8p\xa6_\x1fU\x93\xd2\x37\"\x00\xca\x31\x8b\x46/\x44SM\x89\x38X\x62\xc2Uq" "\xc9\x96\xd3\x32\x9a\x34\x92K{\x7f\x96\x9ev\xac\x85\x95\xf2\x08\xb4\xed\x8c\x46\xf6\x92\xbeMK\xce\xfb/\xe9\x18\xa8\x64%\xb0\x44\x10\n\xe1" "\x10wk~\x16\x0c\xe0/*X\xfe\xbd\\\xaaP\x88\xee\x1c\x63\x1d\xbc\xe4p\xeb\x8a\x03!\xab\x30\x37r\xd2\xa7\x86&\xb6\xe9\x16u\xdc" "\x88\xb7U\x98\xb6\xacUX\xe4\xdf\xa2\x7f\xbf\nkM\xf0\xb3\x1c[p\x00\x31QW\xad\xc2\xef}\xd0\xdc\xc6\x85\xb6\x36U\x08\x8f\x8e\x95" "-\xe9xt\x93\xbe^\xab\xe8v\xf0\x8b\x12k\x15\x35\xed~W\xfe\x11\x93j\x15\xb7\xbbp\x62\x16\x13^\x13+,R\x13\xa2;\xb8\xc2" "\xea\xca\xc9*\r\xec\x31\xb8s\xc2\x1a\xc3\xcb\x9c\x92Y\xefn\xc3+\xcaVH\x1bu\xa4\x00]\xf0u|r\xed\x34/\xadO(\x0b\x17" "\x61\xfc]\x9c`m\xb0\xa9\xb0x\x18\xbf\x16\x32\xd5y\x65q\xabJL\xce@\xadu\xcb\x8dR\x87-\x8au\x32\x94\x9e\xd2\x9d\x7f\x13k" "\x12\x8d\xf2\x00\x98\xa9\xd7\xc9\xc4\x12\xe3\x07\x0b\xc2&\xb6\xed\xa5\xaep\xbbs\x95\x1c\x1e\xbb\ns\xe4\xc5Z\xcaV\x36y\x7f\xc2Z>*" "\x9e\x89\x01\xd5\x99\xe8\x36\x16\xb6\xbc\xc7T\xfa\xf3\x90\xa9\xcf\xf2\xef\xf2\x8b\x95\xe9\x0f\xdf\x96\x1f\x8cir\xfc\xe0\x07\x8b\xe0\x84\xd4\xf1\xdd@" "\xfe\x97\x16\x37T\xf3L\xce\x17\x37\x7f\xa8\xc8\x37\xdc\x03G\xe0\xb2_\x97_\x92\xdf\x63vW\xa5\xc5\xa9+L\x87\xfdpt\xec'\xb5\xd5" "\xad\x13\xaf\xb3$\xab\x0fY&\x06\xd2l\x93\xb7\x96N\xb6\x41\xd8Y\x86\xbd}\xb6Y\xa4\xb5t\x1f_\xf0\x83\xc1\xdb\xef\xe2\x0cK\x86\x44" "-\xc7\xe1\xc9\x12\xe6\xea\x18K\x37'\x81\x14,\x61\x61\x04\xb3\x36\x8c\xbe\xf6\xb0\x0e\x42~\x0c\xc7\xbe\xde\x9clL\x04\xf1\xc7\x07\x96]\xb8" "\xc9\x8a\x9b\x8a\x63\x43\x41\x82v\xcb\x36\xc6\xb8\xc4V\xbb\xdb\xd9<\xde\x36\x99\x1e\x38\xff=\x1a.g;\x8a\x9d\xd1-v\x17\x9d\xee\x61<" "r\xba\x87\xf9\xbb\xe9!*&\xa1\x8d|\x1b\xb3\x91\xef\xe9!*~\xe1\xd7\x63\\\xf8\x89\xbf\x8a\xa6p\xce\xe9\x11\x9c\x01\x84\xe6\xba\x66\xcc" "\\\xd7L\x85g]x\xaf\x9bR\x7f\xd2\xed}\x32\xdc\xc7X\x86\x1d\x93J\x14\xdd&S\x18\xa1\x80in\xb9xW\xed@Z\x9f\xc5\x7f" "\xbf\x03\xf5\xbb\xb8\x82\xaf\xd7\xce\xb1\xb0\x34\xc6\x92\xa0\x9d\x63\xffQ\xcc\xed|\x92\xde\xf7\x11\x05\x43\x8eYQ\xa7\x1c\x90\xb8Jx\x86\x08\xad" "\xecW\xf6\x9d\xc8X\x62^\x1c;#s=\x12s\xfe\xfd\xbb\xb6$=\x8a\xf6z\xf2\xdd\xb8\x8b\xd3\xf9\x05\x63\x04\xc8\xf8\xbb\x66\xb0\r\xaa" "\xab\xf0\xa0\x97)y\xd5l\xae\xd8U\xba\xb7o\x11\xde\x1f\xfd\x18\x1a\xf7\x30W\xd9\x37\xd1\xae\x80y\x15\xc4rN\x1b\xef\xc7\x81\x97\xe3\xff" "\xb8\x84Wr\t\x36\x1b\xe4\x87s'\xed\x32%\x45\x99\x34\x87\xe8\x42\xb0\xb9\x42\xbbl\xe7s\xdd \xa6y\x86\xb6\xfc\xee\xe1\xb6\x94\xd6\x1f" "q\xbb\x81\x15\xd1\xff\xfd\x93u)\x9a^$\xafG\x98\x66\xdc\xfd|\xde\x95V\xdd\xef\xe2n\xf7y\x46\xd5\x65\xba\xf7\xf0\xef\x17\xa5\x97\x61" "\xbb\x96\xce\xfe\xe3ps\x15\xde\xf6\xb4\x91\x30\xef\"p\xe7\xce\x87Y\x7f\xc2\x8e\xc9\x13\xc0\x80\x14\xd4\xdf=\x84\x17m\x1d\x99y\xa5\xbb\x38" "\x8e=\xb5\xe0<\x00\xd5\xa9\xc1_\x05j\x90]\x44\xd6\xbe\xa4\xba\x37\?\xa1\xddt\r\x83\xb7\xf8\";\xad\xdc\x82\\q\xd4:\x82\x1b\x8f" "\x1d\xfb\xf7\x87\x93\xc1\x63T*\xff\xa9\xec\xe4\x92\x65\x30:!\xea\x9e_x\xf8q\x62\xf1\x9b\x98\xdfk\x8d\xa6p\x86\xfc\x1dMsN\xc9" "\x00\xc9\x66\xed*\xd5-$*P\xcc\xdd\x91\xce\xb6\x35\xd0\x11\x11\xb5\xe2OX\xe7hz\xa4\x93\x35\x0f\x07\x34\x91\x93\x93\xc1\xd0\xa9/\xed" "\x43\xc9\xd5\xce\xa3\x10\x15\xbfV\xa2\xfc^\xa6\x36\xf8U\x96YGX\\\xe7~\x96\xc2\xfa\xd8\x89\xa2u\x9a\xc3\x86\x91r\x07\x05\xcb\xba\xa7" "\xd1~\x07\xb4~\xa7\xb0X\x06\xaf+ \n\xb8S\xc9q\xc6x\?pj\x86\xb1\xd0z\xa2\xfas\xf9\x02&\x41\x44\xd9\xc8\xe8\xf4\x34\xed" "j\xf5\x32\xcd\x63\x08k\x9aG\xefJ\xb9\x02mxJh\x1b\x43N\xf3\xd1\x87\x65\xd3<\xfaK\xd3|\x32y!\xad\x18\xcd\x63\xectZ" "@\x18|\xa1\x85\xbfWR[\x8c\xd9i\x81\x05l\x41WWZ\xd8;\x35\xed\xcd-\xc0\rlZ\xc0T\xa8\x10\x0f]\x89\xb5\xfc\xd3\x02" "\xfcP\xa6\x05\xcc\x99L\x0b\xe9\xcd\xb7\xd3\xfa\xa6\x05*\xcb\x14\xe7\xd8\x61\xc5L\xde\xd6\x39<\xe6\x94s\x10I\xae\x64\xf6V\x93\x45\xf9\x39" "\xe2\xc1\x08m[N\x63X\xaa$o<\xa7\xff\x81\xb5\x03\x85\x36\x14!\x44\x92\x9d\xc3\xc5qz\x1e\xd5n@\x94H\xe7\xd1s\x11\xb4V" "\xb4\xd0zhJ\xcb!\xe7\xf1\xd9\x39h\xe3\x9e\x42kM(\xed\x11\x9d\x33\xe9\xcf\x93)~\x97\x45\xecy\xb2-\xfb)\x99\xc9\xce\xd1\"" "\x16Z'L\x88\xc2\xf3\x1c=\x0f\xa1\x39\x43M\x8b\xe1\xf6&\xfa~\x44\xd7\xc4\x94N\xb6\xd8\x82\xa1i\x31\xda\xb7\xcb\xba`N\xb9\xc0," "\x81\x10U\xcf\x05\x42{\nm\xc8iz\xc1\\y\x81\xf9S\x63t\xd3\xdd\x31\x35\xc8\xfe\xca\x1e\xc3\x05\x66\x39\x84\x36\xd6\x36\xbd\xe0u\x97" "t\x33\x91\xfc=\x06\x9aU\xe9\x8e\x15\x98\x38\x37\x95\xee\x05<\x65\xa6\x66\x99\xda\xbf\xc1\x88\x85\xaa\x0b\x10uY\x89\x0f\xbf\xc4\xcaP\xd8\x8e" "\x37w\xbc\xce\x12\\\xd6\x84\xe5s\x39\x8a\r(\x45\xd5t/\xd5h\x1f\xe7\x0fG\xfb\xa0\x35\x15\x8d\xbf\xcb\x32\xf3\x9d\xaa\xe8\x80\x8ev\xd3" "\x12\xa2\xfa\t\x91\x8dK\x98\x15\x16\xe2\r*\xc1s\xd7h.\x31\x8f;\x8aiI\x05\?\x1e\xaa\xee\x8e\xd2(\x19\x7f\xca\xa6\xfd\x1e\\\xa5" "\xeb\x66z\x8b\x14K\x8e\x16\xa0\xed\x0f'\x9c\x9e\x91\x65\xa7\x8e\xe5\x98\xc7\x83\xa8-R\xcb\x9f\x05\x8bXn\xc3#\xbc\x42Z \xf2\xe1\xb4" "\xccT.\xf3\x8d/\x63hO\x88\x46Y\x19\x61N\x85\xd6\x80\x9e\x96\xb1\x37\x81\xd0\xfc@\x84H\x8fJ\xf8\x65iz\xc9v\xc9\x65\xb4\xd7" "u\x46g\x33L\xb9\x8a\x42\x99x\xc9\x32\xef\n\x8b\x1f\xa7U\x8cs+\x8bX\x39-\xa6\ry\x1b\xd5y\x46{\x44\xa7Q\xbe\x0eoT" "=\xfcJ\xae@\xe4\x92j\xb8\xbfu\x66\x61\x05M\x45\xc5\x36\x36\x88\x33\xc5\x32\xc2L\xdb\x00\xceL&Z\x95Y\xad\x1a\xb6\xde\xc1\x91\xe7" "\x99*\x8b\x87*\x66\xd5\xa6U\x16\x0bU\xbe\x37Ut\xf5\x8c\xba\xb5\xd2'N\x84\x8e\x98\x91\x8f\xb3\xca\xba\xb4\xca\x0c\\\xf5+\xc2@\xb6" "\xd0\xba\xd1\x42\xdb\x12\x44\x88\x07[\xe5\x83\xac\x62\x90\x66z\xfd\xbb\xb1\xd7\xa1\xc6\"\xba\xc6\xb2\xb2\x16>\x8f\x10P\x44\xcc\xfe\x1dh>\x92" "\x42\xdb\xa5\x43\x88{\xa9\x85+K\xfd\x1a\xc6\x0e\x84\xd6S\x11\xd6\xcf\xd1\x7f\x12\xf3\xe1\x11\xe3\xa5\x62z\xd4\x91i\r\x0b\xf4\x84\xb6\x66u" "Z\xe3\xbd\xd5\x10\x32]\x88{\xa9\xa1\xbfk\xc4\x30\x8e\x98(\x06\xebp\xa0\x9e\xd6\x43\x9b\x1e\x9a\xd6\xd9\xc0\xaf\x63^\xc0\x98\x1d\xaa=\x83" "\xf5\x0eh\xee\xc2\xd3z\x62\xbb\xe9\nm\xe8]\x88_\xab\x63y\xb2\xd0\xb6\xb2\x9b\xde\xc2\xf7lz\x9bL\xed\x35\xe3\xdeRJK\xb1\xbb" "\x30\xb7\x66^\xe0\xceZ\x42\x94\x96w\xd8\x8aN\xd8y\x65\xfa\xdf\x61\xca\x46\x88\x8cp\xc7\xe3\r\x9d\x35\xde\xbe\xc1\x44\xc9\xd2`\xe3\xae\x81" "\x61\xe6i#\x34\xefx\x61\xbe\x81P\x34\x62\xa2\x11\xd1`\xad\xd4\x08;%\xa6w\x03\x11\xd9\x85\x9f\xfc**\xaa\x06\x66\xd8\x85\xc1\\G" "\xdc\xf8m,\x30\x17\xda\x06\x38\xc2\x81\xbd/\r\x38\x05\n\xcf\xc8\xcbr|\xf1\x94\x99\xa5\x16\xcc\xdb\x00\xc1\xad\xc5\xec\xe1\xe2\x63\xf3\x7f\x37" "\xfa\x45\xa2\xb3+\xb4\x11\x0f\xa1\xf9\xf3\x1b\xfd\xfa\xc5\x64-\xd5\xc0,\xaf\x31\xfb\xd4L\xb6\x05Mu\xc7\xec\x15\xaa\x42\x30&\x31\xb7'N" "\xdbQ\xeemw\xbb\x0c;\x1cM\xd6q\xb7\xf5\x8b\x32H\x0f\xfc\xfb\r\xdbv\xbe\x87\xd5\xae\xa2x\x41\x42\x7f\":p\xc7k\x12\x13\xab" "M\xc4\x0cn\x13\x9bO\xa4iw{\x8f\xd1\xee)\x97\xc9N\xef\xf9\xe6\xdf\xc7O\xf6\xe0\xefS[\x83\x35m\xd9\xbesK\xb8\x07\x9a\xb2" "\x90\x64\xae\x96\xe0\xc6\xb2t\x8b\x1d\xba\xd6_\x87NM\x8c\x1f\x8bYz\xc6\x9fS-\x9d\xfa\x13\xe6'\x65\nS\x65\x62Z\x1c(\xe1\xf3" "h\xe7\xcf\xd8\x82W\x62~]L\xe4\x8dV\xf4\x89\?\xd0!\x03\x1b>t\xd3\xaf%\xbe;\x01Q\xa8\xb5\xb0\xe2\xdb\xe8\x7f+&\x9bs" "-\x96`\xad\xa4\xbb\xf5\xfbK\xde\xce\xc0\xc1\x02\xc4\xab\xd9\xe2\xab\xd9\x62\xe1\xd6\x42\xc8\xb0i+}:p\xfa\xd9\xd2g\xbb\xe8\x07VT" "J~\xf4\xc0:\xeb\x81\x97\xfb\x80}Q\x95\x0b\x10O\xec\x81O\xea\x81\x65\xf4\x03\x0b\x94\x07\xde\xd6\x43\xfcY\x05\x91\x8f\x1e\xfc\xfcI\xbe" "\x08\xa2`y\xc0^\x98\x46\?\x05\xab\xd1G\x44\xad\x30\xb2\x0cy\x64W\x96\xa1\xf8\x84(\xe9\xb8:N\x88\xb2\xe5\x89\xdd\xb4'x\x05\t" "Q\xa0<\xb1@yJ\x1f\xad\x64|\x46\x84\x04\xa1\rT\x1a\x33\x9f\xa5\xe9s\x84\xb6\xe1\x33\"\xffL\x9f\x99\xc2\x1dL%\x1a\xa5\x92\xc5" "\xea\x05U\x96\"\x1d\xa9\xe8X\xd7\x89Y\x05\xd1\xe1\x14\xbe\x81\xc5w,H\x31\x13\x13\xa9\x62\xda\xc0\xaaQ\xf7%\xc2%u$\xc3\xb2\x65" "g\xe6\xf0\x12\xc3\xf3\xa6t\xdb\x35Wh\xa9*\xb3\xd0h\xa2\xee/\x9c\xbc\xa9\x0e\x86\xf2\x85\xcf\xfbN\x9d\xdd\xb7\xe9\x11S\xd9\x65<\xef" "\xa7\xa5\x1a\xdb\x06\x1d\x0c\xca\x19mq\xeb!\xd5\x8d\x33[r-jT\x42h\x1c\x31\xc7\xbc\xac\xc9>|\x62\xc4\x94n\xc8\xce\x0fJ+" "\xdf\?\xb0\x95\xe5\x42\?\xf9\xf6\x30\xec\x9e\x61\xb6\x07j\xfb\x90\x1c\x1e\xbb\xd2\xc0\xa5\xd9g\xf6X;,\xe4\x94q\x7f\x85\xb0\x16\xa6\x92\xe9" "\x9cY\xa2\xe3\x89)\x8c\x0f.\xe4\x1f\x94\xb9\x10\x1a\xff\xcc\x1e\x19\x80\xfd[\xd0&\xe2\x8dXi,\xe6\x92_\x31\xe7\x9ai\x07\x1e(\xc2" "\x02\x12-\xbey\x02o\x37\x99\x89.\x9d\x32\x9b\x8bU\xf5\x93\x34\x0f`\xde\x37\xd2/$L\xfc<\x07W\xfc\xdb\xf5\x61\xd2\x38\xa1\xa9\x13" "h\x98\xa0\x87Z\x07\xae\x12\xbcZ\x1dO\x33\xa1\xa4\xa0\xa7.TrpO\x85\x0c\x83i\x10\x63\xb6\xfb\x19TP@\xccoQ\x16U\xc3" "\xb8\x93\xfd\x93\x13\\\xb7\x64\xc8\xf8\xf0\xd5s\x19|\"\x85x\xed;\xc9\xcdU<\xae\xa5\xc7'\xae\x32\xf3q/n \xb5\x92\xe7\x85\x33" "\x33;\x65gv\xc6\xe1\x9d\x33n,\xc2 \xb7\xa3\x10\xebO\x14s\x61\x32ywj\x00\xda\t\x32m\x96N\xabw\xa7\xfc\x9e\xbf\xdc\xa2" "\xd2\xe6\xb7+\xf6\x9a\x95l\xf2\xa8\xa9\xbb\x88\x1e\xe7X\xce\xeb\x81t\xef\x18\xe1m\xa1\x1a=\x8c*\x8b\x42+\xb8\x93^\xed\xc3\xd3O\xcd" "\xa6\x33;t\x8b<\x9a\x36\xcf\x30j\x0c\xd3V\n\x98\x99\x94\xcei\"\x11\xd2\xfb>\xb8Z\xa7\x18\xbd}\xc1\xc2\xcd\xe9\x0b\xc2\xc6M_" "\xd8\x16~\xd1\xad\x38\x07]\xaaWL\x38N_\xe5\x9f\x31}j:\xa3\xaf\x1b\xf8\x90N\xdf\x31\xc2\x1eo\x7f\x30\x99\x62\x07\xd8\xd8y\x0f" "s\x19\xfd\xd3\xf0\xea\x9b\x45\xe4{\xd8\x08\xd2\xfa\x16\x03\xf2\xa2\x1e[\xbao\xd6z\x82)\x41\x39\xd0=\t\x17\xd7\xf2\?\xd5\x35\x88\xbe\xba" "\x32|\xea\xb1\xc5\xac\n\xb3ln\x62`\xdfT\xdc\?\xce\xae\xc7\xd5\x7f\x1d\xae-\x14Iv\xae$h`\x43.Q\x36\xd9\x65\x64y\xf8" "\xeeg\xf3k\xd5\t\xc0\x9c\x86\xbf\xf6\x13k\xc8\x8e\x7fL\x38\t\x88\xaa\r\xb5(\xec\xed\xaa\xc8\x1c\x36M\x45\xa5\x32s\xc6\xbb\\\xb4\\" "U\xbaz\xd1\x8b\\O\xfc\xdaX\x87\xbe\xf3\x61(u\x9c\xd3\x82\xd0\x8a:[\x46\xba\x01\xeb\x07K\xb9w\xe9\x1e\xca\x31\xecT\x36\x65\x30" "\x9f\xe9{\xb2\x37\xdeI\xac\xe4\xb0\x9b\xae/`Z\xe4U\xa3^&\xaa$W\x18\x39p\x65K\xd2LI\x33\x86-\x19Sr\x35\x7f\x9f" "\xfd\x15\x97\xef\xe9\xf7~t{\x85\x85\x18\xa6\xd2\xc6\x1b\xd5gh{sO\?\x63\x8b\x8d<\xfd\xe4\x0b\xfb\x99<>gq\x83L\x45\xeb" "G\xbeV#\xf6U\x95\xf0\xc4Q\xb3\xe0\x0cQ\"\xd3\xe4\x19\x46\xea\x90\xf8\xd9\xa5\xb9r\xfe\x9dIM\xacRs\x85\xe0\xd9\xa2\x96<\xf5" "\xf2\x31\xbd+!\xb8\x80\xaa/\x10m\x0b\xa5\xc6\xef\x19\xdd\xd9\xdf\x17U\xaen\xf9\xc9\x37\x1c`\xcc\xcc\xa2$\xab\xe2u\x98\xdb\x87pk" "M\xb1\x11\x13\x7f\x04G\r\xe5\x06<\xce\xc1\xfdYL\x8c\xef\x8e\xd8K\x1a!n\xb5r\xeb\x0cO\xce\xc3\x8b\x33W\xd1\xd7\x32\x9a\x9d\x43" "\xd9\xa2\x17\xe5Mz\x33\xc4\x32VQ\x16\x19RX\xca\x87]\xce\xac\x8b\x42\x0fG\x89\xd9\x41\x35+N\xcc\x01\xb8\x8aj\x9f\x9c\x66\x30\xb5" "\xae\xc8\x45\xfds\xec\x15\x44\xef\x46\xc9\x9e\xe8(\xbc:\x01\xaf_\xc0\x1ao\xd8\x1c\xcb\x85\x18!\x1b\x85M.vT\x93W\xf3\xc4\x9b\x41" "\xfb\x64\xc4\x01\x06\xe1\x44\x9d\x9d\xf9\xf0U}gY\x01\x1e\x10\x46\xb8\x66\x8a\xd9\xab\xb3\xc6\x1f\xb1\xe9\x32\xc2\x0ek\xca{\xf0\x8bg^\xf0" "\xf3\x05/v\x8d,\x84\xd0\x99\xca\x61\xf6\x43\x16\t\xcf\x98\xdd\xaa\x98\?\xa5\xff\x35m\x03>\x0c\xd4\xba#\x84\x8b\x10\xa2\x9b\x37\x8a\xf2\xd7" ";w\xa5\xea\xef\xae\x38t\x30\x62\x7fv\xc4!\xbdQt/\xcf\xe9\x1b\x8e\xee\xaa\xbaNOU\xdd\x06\xf8\xef\xf9\x63\xab\x14\x61k\?~" "\xe7\x99\xdb\xfc\x9b\x87\xb9\xd3o\x07\x41\xf5\x84|\xb5\xa2\xcf\x37\x10\xad\x9e\x91\xb4\x85\xd9\xf7\x1bIM\xc7\x01\xeaQ\xc4\x14\x10jP_>" "RQ\xd1\xec\x14\x9e\x8f\xa6ts\x0f\x94n#\xacS\x16\x16\x90@\xf0\xc0\x12\x9a\?\xbc\xd0&\x8e\x85\xe8\x88)\xe3\x16~L\n\x96\xf4" "\xb9\x15\x63J\x62\x04\xef\t\xa3\xdf\x03\xfb\x64\xa3\xf8\x05\xd9\"~\xe5\x39\xd0,P\xb2\x1b\xa3&\xd6z\x99\xc9\xf1\x65\x35\xd9_\x31s\xc2" "\xdf\xed#\t\x38\x46\xa2\xd4\xb8\x65\xb5\x93\x1d\xc5Ry\x04\xd7\x1d%\xcf\xb8\xa2^\xe3]\xf1\xd3s\x9c\x45\x99\xc5+\xfe\xea\xf4\r\x84\xc3\x8b" "\xd2_\x15\xd6V\x42\x64s\xbfo[\x66\x86\x87\x19\x9f\"%=\xab\xc3G\xd5\xe8\x97!&\"\x82\x88\xc9\x14\x88o\xce\xa2s\\o|" "\xf7\xe5\xf4+\x62\xabw\x9e\x85\x93\x16\x13\r\xe0y\xfc\x80'\x1d\?\x9d\x80\xcf\xd4\xafH\x05\xce-\t\xf9w\xef\xd4\xb6\x94\x41\x89\xdc\xc6" "\xd6\xeb\x1cq\xdb\x84k\x14\x33\xf4\xce\x99\xb3\x14\x9c\x63\x07`\xe1i\x8b\xa4\x46\x89\xca\xcd\x0b\x8c^\xce`\xeb\xaa\xe9\x1c+\x34\x8d\xfe\x8a" "\x89\xe9\xe5\x9a\x98\xc9s\x0e\xeb\x10\x45\xdd\xe1-\x83\x8f\xa3\x10m\xf4\x39<\x9f\x85p-\x99\xb3\xef.|'y\x19\xc3\x33'\xe2\x93\xc1" "\\\xad\xdc\x44\x9c\x1d\x33\x11\xb9\xdf\xcc\xec\x92\x87\x01\x88\xba`\x0e_S\xe1\xbc\xe2\xf4\x17\x42L\x7f\xf4\xd2 \x02W\xbc\x98\xed\x11\x89\x8c" "\x94\xee=\xf8\xcf\xd2\xa9J\xe9\xb9\x42\xa3*\xa2\xd9n\x66\xe5=\xc9\xe3\xc2\xd3j\x8e\xbcs\x66\x7fs\xcb\xd3\x34\x90\xc4i\xb3I\xa2\xc0" "`[V\xd8rr\x46\xd4\xcc\x9f%\x96\x03\x8az\xd1\xa2}\xb6\xff\xbb\xfcJ\xf7\x0e\x93\xa3/\xa8\x35\x8f\x06[#\x46\x1d\x8c\xf2\xb8\xe2" "\xe1\x1c\xca\xba\xe6\x42\xeb\xcc\x1au\x38\xd5\x8a\x9c\xd9>\"\xb6\xcf\xb8\x87\xb3\xd0\x8a\x08#\xf2\xb2\x9a\x33\xd0\xeeJ\xf8\xd9\x11\x13\xadVQ" "\xe3\xa7t\xaf\x8c\x97R\xd4\xf4M\x95m\xcc\x35\xdb\x97\xf7\x31:\xbb\n\xf3\xef\x99\xca\?\x65\xca\x46\xdb\x8d\xf2\x9d\xd4zv\xa2\xec\xbd\x11" "\xf6\xf1[\xf0\x90\x36\xeaVm\xd6\xaa\x9a\xed\x63\x42h\x96\xfb]\xd4,\xbck\xd1UT\xa8\"\xde\x98)\x8dS\xfb\xf3\xb2\xab\xb2\xcf&" "\x18\x30\x11sy\xe1\x0c\x87k\xac\x03\x12\x65>\x15\xc6\xb0[\x0b\xf3\xfc\x39\xcb\x9f\xc6\xdf\xc5^l\x1e\r\xa2\xd6\xf9\xf0\xf8\x01\xcb\x38M" "\xd9,g\xa6\x92Y\xfeOu-\xc4\x7f\xed\xff\xfc\?Q\x16\xa6\xe2\xff\x86\xc1\xa9\x1av@\x63Z\xd8\x01\x0bn!\xdf\xdf\xf0\xc6\x36\x17" "\xd8g\xd6L&M.\xbb\x99\xed\x8d\xde\x9a\xb9\xb4\xcbI\xcc/M\xb8\x7f\xe2\x34\?\x9cK(\xf3i\x15\x1e\x17Q\x0e\x8bi\xbb\x43\x1a" "%y\xc3\xe6s\xa6NV\xd9IO\x1e%\xcf\xf9\x0f\xa2-+\x64\xba\x0b%\x37\xc1)\x07jv\x8a\xa9\?Sq\xeb\x08!i\xa0$" "q\xcaHrl:\xad\xbcR\xa7\x16\xab\xc6\x45Y[^X>\xc5\xf0\xbb\x98\xf6V\n\xafy\x9a\xc6*\xb2v\x99\x98\xed\x95.\x93\xff" "\x46\xea\x84\x8f\x15\x8cm\x88i\xf5\xbf\x31:{\x8fJ\xa5L\xd5\x83\x30\x18\xa4\xd7\xcd\xec\x00\x32+M\x8d\xa7m\x8d\xe5\xec\xc0\xe7\xcb\x8e" "\xca\"\xea\xf8\x81\xb8v\x03\xbf\x37;\x80\xedX\x61>\xf1\xe2;\x35,(r\x33\xfc)\x45\xd5\x99tk\xf9>i\x46@\?\xc8\xcc\xe4" "\xf5H\xeaU\xa8\xb7Kt\xae\xc4\xb4\x66\x8ap\xb8\xc4\xe2Y\x35\x7f\x9c\xd9\xb7\x86\?\xa8\xcf\xdc\xfc\xf7\x83,m\xa4m\xd3*\xec\x98h" "\x39\x66\xea\x8ai;\xaak\x1e\xf0\xa7>\xaa\xef\xbc]\xe1\xbc\x07\x87\x18\x31\x17\x07$\xde\x9dp\x39\x86#\xb5\x98+\xfe\xfc\x8ai\xf8\x93" "Q:\x61p\x95U\x45\x9a\xe3mv\x34\x18\x38\xb3}\xa3\x45muK\x65\x7f&\x88\xd0\"\\\xa6\x92\xc1\x93\?$S\x9d" "\x1ds\xe7\x03\xec\x88\xee\x66r\xf0\x88P\xd0r\xe0\xbd\xee\xf4\x36\x07L\xcd\x36U\xdd\x8e\xcf*\xd0&V\x46\x64\x1f\x06W\xda\?\xb4." "\x85\x1d\xf3\x96\x99\x98\xd9\x9d\x99\xf9\xbb\xbc\r;o\xd2\x41\xf3\x17[\x0f\xfb-Zx\xe2Y\x1e\xe3\x8b\x33N\x9f\n\x83\x1e\xb8\xbd\xd0\x62" "g\x65\xafS>\xccq\xfb\t\x35\xbf\xc0\xe3\x0fg\xb6u\x9d\xe6\xc9\xf7\xa8{'\?L\xb5rJ\x81\xc5K\xce\xc3yJ\xa8\xe1\x8e\xa2" "\xf6G\xd8\xae\x86\xc3^\x94\xd7\x66L\xe6\xd1.\x1f\x17o\xd8\xdcUS~\xd6\xc2\x9e\xdf\x65\x07NW\xe9\xb8\x92~\x97\xfc\xc0\xbf\x7f*" "\xa7S\xcf\xb8\xeb\x8a.\?\xfa\xf7\x13\x1b\x61\x35\x13^\x07\xda<\xae\x90\xf2\xee\xe7\xb0\xc6R\x14\x8a\xb5<|R\x8c\x98\xfc\x87\xf9\xcd\xbf" "}:t\xa2s\xa8&o\xbf\xc3\xab\xed\xf0\x86\xbb<\xe1\x88\x17=\xe2\xcf\xa2u\x96GP\x06\xe5@\xff\xdf\xf2,\xa8\x13\x94;\xe7\xc0" "\x84\xa0\xd0\xfc\xa1\x84\xa5\x92\xfc\x8f!\x14Q\xbcG\x38p\x0b\x9b\xb8}\xe6\xbc<\xc6Q\x8c,Ph\xfa%\xbbz\xddU\xfe\xd3P\xbc" "\tW\xfc\xe1>/\xe7\xe3Q\x0b\x08T\xe1\xa6V\x65V\x41\xf9hRpj\xad`\xb3J\xa2\xa6\x39r\x0e\xce\x91\xcf\xe2\x42\x46L\xb3" "\x89yQ\x08\x0b\x41\x32\x9f\x42\x99\?\x8c\x10U\x62\x1e\xd1\xdd\x84\xe6Q(\xb4Y<\xa3\?>\xcc\xae\tQ\xa4\xe4=g\x62\x11\x85\xb0" "Km\xd1\xa7\x85\x1b\xbc\x14,\x14\xf3,\xb3\xf2\x88\xb7i\x84\x03\xad\x9b\x18\x06\x80\xda\x31Q\x02\xe7\x11\x33]x;\xdf\xb9Q\x04\xde\x14" "\x36\xe6\xd1\xd7\x83\x46\xd5\xf9\xc4\x43\x42\xdf\\\x88\xe2\"\x9f.\xda\x9a\x8d\x1f\xec\xd5,\xc0)\xc1\x98\x14\xba\xe9\xb2\t\x65\xe3Q\x33\xbao" "\x18\xd9\xac,\x84\xc7s\xa7\xee\x45\x65\x9b\x10\xcf\xd4q%\xdd\xdf\x62\x41\xb3\xa8\xb3\x62\xba\xb7\xc7nR\x81\xf5W\x81\xbd{%SL\xdb" "\xed\x7fUL!,\x9f\xa5{\x87\xd8\xf7\x08JN\x99\xa9s\xb2\xe2\xcc.\xb2\xcb\x8b\x44\x06+\xb0\xa9Y\x90\xdc\x9a\xde\x1e\xf9\xaf\xc6\x07" "\x17\xea\xd6\xf7\xa7\xfe\xfdL\x14;\xf4\x85\xd8\"\xd1\xce\n\xc9i\x31\xfc\x39`\xe1W\xc0|\xe1\xac\x80`\x32\x46^@%\x99\x1d\x39\xb5" "\xab\x8a^\xa5\xaa\xb0\x38I\x1f\x83L\xdd\xbc\x87w\x96K\xab\xfc\x8b\x36\x06\x0cgm\xc4\xa4\x9f\xb5\x31'\x38{\x66;\x93\x8e\xa2\x42\xf3" "u\x30\xfe\xfeT\xb0\xd8\xca\x14\x9f\xcas\xd8\xf8\x04\xcd\x1fS\xd8\xb9\xe3\xbb\xf8,\xb7\xa1k\x00\x91(\xcf|_\x9e\xd3\x9b\xb5Sjr" "\xfe\xde\xcb\?W\x39\xfe]\x9c\xa5'\xe7\x98\x7fVU \x8bR \xc3\x0f\xc0T\xfc\xd6\xddQ\xba\x08\xc8\x95\xad\x63\x30j\xfb\xc6\x16\xff" "\x8b\xdal\x41[h\x33\x1b\x63h_x\x8c_\x85S\xad\xf1\xbf\x0e\xb1\x36s\xfb\x1f\x07\xd6\x8f~@\x97\\\xf6n\xa1\x8a%\x12\xbf\x03" "\xa7\\\xe5\x10\xbco\x80\x9d\x36\xf9\x1a\x9d\x9f\xc0\x1c\xf1\xab\x16@@h\xdb\x86\xcc\xc6l\x14\x8d\xa3\xdb\x95S\xf7|\x1a!!\xb0\xaeH" "y\x46~\x80\xf7\xb8^\xf6V\xc6\xd1\x14\t\xc8v\x95R\xae\x95\xc3O\xa6\x30<`&\x9a\x12j\xb2H\x30s;w\x13^\xbb\x62\xe2" "\x9d\x19\xc7\xb6\xa6M\x88\xe2j\x8c}=\x85hs\x8e\x31\xc4;\x1b\xc3\xd3Rx\x82\x8b\xc1x\xaa\xf0\x15\xb7\x9cL;\xa0y'*\x03" "p\x8e\xdfK\x16\xf7\xe9=\xffty\xaa\xbe\xad\x36@+\xca\x46T\x85[\xfc\x10v}\x11\xa2\x90\x1b\xb3\x35\x36\xe6X\xc8\x18\xab\x96\x84" "m\x39\x37}\xd0\x44\xa1\xc9\x34N\x9f\xdb\xbf\x8b\x11\xb6\xfa\x34\x65\x19\x64\n%m\x15)q\xd0\xd9\xa6\x82\xd7\xd8l\xc2\xcc\x39\xc1\x84\xd2" "\x8cQ\xb3\x66\x13\x8c\xfe\xce\xa6\xf2O\xb9\xc0jJ\xa1\x05\xf5\x9d-\"s\xb1\x9b-\x30\x32:[\x61N\x66\xc6\xb8P\xb3\x1f&G\x80" "Y\x17!rJ\x80(\xf1\xc2\x9a\x35\xe9\x03\xdd\x61\r)\x1e`\xb6@\xb8{\x81\xf4I\x34rXRM\xc9*P\xf3\x03\xfc\xf2\xfc\x00" "\x43\x02\x42\xf3\x39\x9f\x1f$\xbd\x00\x9c\xeb(\xc5\xfc\x10\xd3\x9a\xf3\x43\x0c%\nmjKh\x83Q\x42\x9b\xec\x31\x66\x11\x92M\xa5/\x35" "\xb4\xd2\xe6\x87Hu\x63\xbcZ\xf8\x19\x31t)\xb4\x8e\xec\xfc\x30\xc9\x05\xe0\xc9\x18\xb4\xaaUh\x81\xa6\x8d\xd1\xc7\x37\xa6\xdb\x45\xd9\xa0\xb4" "\xd0z\x00\xca\x13\xd2\xee\xe3\x10\x45\x9bQ\xd2$m}\x42\x99\x0f\xe7\xfcH\xfe\x81\x0bM\xa6\xf9qT\x18\xc3\x01\x63\xae\x95I\xb2\xf8@" "\x65\"\xea\xeb+\x9a\x9d\x61\x39\x94+\x94\xa2\xbeg\xa2Q\xcb\x9b\xfdgW\xda\x46\xb7\xe7 \xca\x9a\x36\xc2{\x8dQ\x85i\x63Q\xb3\x33" "\xa7\xfah\xf2\xec\xa2\xa4\xaeM\xf7\xaa\xa6\xd0\xda\x9b\x9f#\xab\t-J\xa5\xd0\xe6\x32\x95\x1b\xf0\x07\xc7\x11\x44S\xb8\xdf\x44\x89\x30\xe7\xf0" "\xaf\xd0\xa6%\x85y\x1e\x1f\\;\xb3\x8d!M\x45\xf5\xcfp\x33r\x95\xee_\xfe.\xf0#\x18\xb3\x12.\xedi\x9f\x63\xaaMy\xe5\xc4" "\x1eH\x66\x46\xc5\xb6_\x95\xa8\xa4\x38\x84Y\xc3\r\xc1\x1d\x43\x88\x64<\xd7\xcd\x0c\xcbtP\x10\xf5\xc0\xa3O\xf6\x00\xce\x93\xa3\xbb\xa8\x38" "K\x0eqr\xe6\r\x65\xb6\xdd\xb5(\x8b\xb2\x62\xdc\xb9\x1f\xcc\xcf\x08g\xfc\x1b\xf9\xc9\xcb\x96\xfcs\xf5\x97\x0f\xc4\xc4\xe5\x32\xf7p\xdd\xac" "p\\\xcb\xd6\x19\xcc\xa5\xc9\xaa\x65\xc1\xbc\xc2GR\xa1\xbf\xe4p\xb5\xab\xcc{R\x94MT\x1b\xe1_i\n]\x0c!\x9eH\x85oS" "%,^\xc3\xc5@Ls`\x10Z\xb4\x19\x61\xf9\x94\xefl\x05\x8d\x11\xa1U\xcf\xc6\xec#s\x41\x14\x9a\x9b\x83\xae\xa6\xa2\xcb\xa1\x9a\xfc" "\r\xd7\x16J\xca\x88\x9a@L\xf3\x32\x33\xca\t\xe1\xa4&\xea\x89_\xb4\x11#\xa1\xb9J\x08\xe7\xbcR\x9b\x9d\x35\xa2/!\xa6\r\x35\x19" "\xff\xe3\xc6\xad[\x30\xaf\xc0\xdbOx\xf3\x85\x32PLk\xdd\x1bwn\x1f\xcdI\xa3\x9f\x1c\x8b\x9c\x85\xee\x9c'\xa6\r%\x0bW\xe5p" "\xbdJ,x\xdc\xbc\x82\x31]!J\x98J\xfc\xb0\x8f\x02UL\xf7\x9fS\x13\xe9\x92\x1c\xe0\x12\x93\xdc\xd6\xe9_I\x1eoH~\xf5\xf3" "\x05\xf1\xa5\xc4\x34\x1f\x32\xe1\x14O\x12\rg\x63\x32\x1f\x63\xea\xccT\xfa\xf4 \xff\xa8\x86\xe0\x06\x0f+\x41iT\x61\xd9U\x61\xee\xab\xc0" "'Ly\x05\xda\xa2u\xa1\r\x13\x0b[\xc8\x7fp\xf1\xf2\xf5r\xc6\xf0\"\x97\x99\xcdS\x34\xcf\xa8v\xccU\x66\x9a\xb7\x8f\x99\x99\xab\x96" "\xa8\xe0\x36\xec\xda\x9d\xdf\xf0'\xb9\x11\xcf\xbc\x81yS!\x12\xab\x81\x11!#\xa2\xed\x8a\x89\xf7\xad\xf1\xcf\xbbs\x8fn\xea\xfc>\xce\xcf" "\xe2\xbb\x01\x9ck\x45Y\xa0\x15#sU\x9b\xd5\x43;s!\x12\xd3|\xbd\xe7m\x34u\x85\xb6}\xb6\xd0\x42L\t\xf1p\x95\x08Q#" "\xe6(\xe0\x43l\x87_\xfb\xc9\xc1\x63\x66\xf2\x0b\x98\xbf\x13Z\x83\x46\x88\\\xd8\xc6\x62\xfcy;.}\x82\xc8\x43\xed\xb8\x37\x06m\nU" "h\x43u\xf3\x36\x13\xa4\x9d\xd8@\x83\xb0\x82\xf3%\xb6\xa7\xf5\xbc\x8d\xf6\x89\xd0<\xf7\x84w%'\xf3u\x9b\x8f\xb3\xcd\x42\xe7\x19\xcd*" "\xde\x14w\xa0P\xd6\xb0\xfb\x8d\x98\xe6\xcb-\x44\x19\xd3\x63\x39\xdf\x0bO:\xbf\xcbzj\x83\xb8\x99\x42\x1e\xeb\xb1\xe4\xe9\x85\xa7{N]" "P\x62\xab\x08\x45\x9d\xf3S\x1b\x44\x30\x66!\xec\xa0l\x44w\xde\xcb\xd6\x8d\x89\x89\x16\x44\x0f\x43\n\xc2\xd7-\xf8\xf9\x82V\xa1\x98\xf3\x96" "\xf6\x00\x0f\x1f\x33\xb5m\x65j\x39\x86\xc3\x9e\x9a\x13'\x86\xee\xc4$\x31\xa2\x66\xc4\x0c\xb5\x98\xb5\x13\xbf\x1a\x34\x89\x95m\xd0\x42t\x18u" "Sgk\xd1\x9a\xca:\xb9\xa2>\xbbN\xddn\xd1\x46\xb2\x44M\x9c\xdf \x1a\x1fJm\xb8\?\xe2o\x62\x0b\x07 \xb4\xb5\x11\x42\x64\x8e" "\x1e\xfa\x97\x46\xff*\xf3\x41\x8f/\x88\x12\x03\x63\xf3^\x36\x85!\xa6\xcf\x0e\xaa\x99w\xc2\xd3ZL\x34\x0cz\xe8\xd0\x0bQN\xf4XN" "\xf4t\xbf\xb6\x1b|\x84`\x89\x46\xe6\xfb\x1eK\x85^\xba\xec\x38\xa5U\x82\x05w\xa6\x92\xee\x36\x42\xa5\xfd\xc6\x1a\xed\r\xed\xd9\xf9\x1b\x1b" "\x13o\xac\xa7\xde\xe0\x62\xa9\xa4\x46\x9d\"\x1c\x45_\x07iw\x06\x65\x8b\xde\xe7oQ\xa1\xe9\xf4\?\x10\x93\xd9\xfd-\xb2\xf0_\xf3\x37&" "\xde[\xdc\xb5\xa4\x66\xdb\xdc\x88\xf6\xba\xaa\x0fyLZ\xa7\xa3\x9cP\xf5W\xa6\x0c\xf9j(\xe5q\xeb(\xfd\xc1\x32jL\xb4\xfbyT" "\x82\x63\x99~X\x8c\n\x41\xba\x7f\x43\xd5\x04m\xac\xce\x18\xdf\x1d\xc7\x36\x45\x39\x1f\x86\xc7S\xd0\x42\x9b\x1b\xe3\x97\x12/\x65\x88\x99\xf8\x39" "\x97\x1e\x18\xf9.\x0cY\x12\r\x11X\xd5\xf8\xf7\xd1M\xb8\xb9\xd7\x10\x9f\xd2\x46\xfc^\x63\xdd\xa1\x1c\xb6u\xbd\x42\xd4\xe9\x43\xac\xdd\x11>" "P\?t@\x14\xbc\xc3p\xb0\x01m\r\xf7|\x88IW\xe1\x0f\x7f\xd9\"w\tm\xa4Ty\xe3\x44\x88K\x35\xe7N\xf4\x06\xcd\x0c\x07" "\xfe\xc5\xb9.\xdaY\x9c\xff\xab\x10\x43t>\x8c\xf6.Y\xc0\x0f\xb1\xb9\x91\xd0\xa2\xa3\x08\xafq\xfe\xe8\x66\x9f|\xd8Iq\x44\xd1\x34\xea" "\x9a%)\xfb\xdb\x87\xd8\xa4\x38\xado\x35\x02\xe2\xe1&|l\xf9W\x30\xab\r\xb3\xb7\x8fM\x9bM\x61\xe9\x8f\x9b\xda\x31\xff\xc9\xc7\xab\xb1" "\xe4\xe1\xb0\xdb\xd5\x1d\x8f\x8bO\xd2\xc1\x11#\t\x34\\\xac.\x41\xbaz\xd9\xf9\x0b\xdd\xfe\xe3\xe0\xf9\xbf\x1d\xe0\xeb`\xc7\xfcNm\x1d\x8e" "\xb0\xc5\x1bh\x8f\xc3\xa7[\xd6\x8d\x43\xf4\xb2\x85x\xcf\x95\xfe\xa4\xb1`^h\x01x\xe6\x43\xb8K\x0b\xcf\x90\xa6q\xf5\xcb\x99\xcdy\xba" "\xc2T'\x14\xca\xb9![\x31\xc3\xd8&\x8b\x84m\xe4\x1ci\xcd\xb0=\x32\x8c\xbb\x9f\xa0y\x45)/\xc0\x37\x64\x82\xf8}\xf8W\xc6\x89" "Z:Y\x83\x0c\x11vY\xb8\xda:\xb1\x81\x8a\x99\xd1\xf5mr\xf0\x9d\xa9\xda\r\xc6\xa5\x45\xd9\xd6\x8c\xca{}\x81P\x98\r\x63\xdb#" "i>\xc4n\xde\xc2\xee\xd6\x19\xfe\xdc\xb8\xc9&\xdb\x10#\x01\x46\x1d\xe2Y\x8e\xffUQ\xa1\xfaO\x15\xf5\xef'g\x15\xf9\x04\xeb\xa1\xfe" "\xa7O\xb2\xbf\xf9\x44\x16\xc0\x34\xec\x9c\x0b\\\x84(P\x85\x1f`\xc0\xcfQ\xc0\x0e\xd3\xbd\x92\x33\xee\x04n\x62\x97/\x8d\x44\x61\x41,p" "\xcc\xf7\xcdQUu\xa6\xfb]\xf8\xf7\xabz\x92\xa7\xc1\x96\xdc\x30\xdd\xe7\x0f\x64\xba\xeb\x94\x32H\x1b\x64\x36x)\x07X\xc4\x61\x98U\xd8" "\xe4O\xde\xf3\xc7\xd0V\x18\xb3\x08\xe4h\x99\x10]\xa2\x31{\x89\xe3\xdf\x9f\x96\x93\x45\x9e\x9a\xd8\x88\xdcL\x96\xca\x66n\xcb\xec\x8f\x8c\xd9" "\xa2P\xfa\x17XO)\xe3\xfd\xf7\xf0\xbe\xe2*=iJGL\xea\xa4\xdd\xc3\xa8\x37\xc6\xea\x1d\x62\xe1`\xd4\xe4\xa9\xd1\xc0\xf7\xca_\x19" "\xad+i\xe3\r\n\xfd\x97\x31\xdb\xa8\x63LN\xcc\x35T(\xd6\xec\x88\xa9{\x9b\xe3\xee\xd9\x03\x11\xda\xf3\x1b\xeb\xa6x(/\xc7\x91\x85" "\xa8P\xe2N\xd8T\x18[/#\xbb\x08\xf6\x94\xc7l\x38\x8c\x11\xb3G\xf8\xc8\xbfz\xdaw\xea\xce\x39\x0b\xdc\x9d_\t\x96t\x0b_\x37" " z\xb4\xe3,\x8c\xbf\x99\x9e\x80X\x46-\x44\xd3\x62\xcc\x16\xe6\x98\xdd-\xe1 \xfe\xc4\x89Y\x35\x8e\xb1\xeaG\x89\xb4\x83+\x93\xd0\"" "\xf4\x0bm\x46\xc0\x88\xa9v\x35qGX\x82\x33\xe7@\x9c\x10\xed\xd4\x31\xc6\xd1\x8c\xac\x04\xd4\x64\xb7\x41M,\xc9\x35\xd3\xaf\x9c\xfd\xeb\x31" "\xdb\xce\xe3\xe4\xae\xe3\xcc\x66\xd7\x45\x35\xf0\xa8\x92{\xa4-[>\x63,\xc0\x11\xf2\xbe\xd9\xd0\x19s\\G\x99\xfd\x10\x86\x63\x84xx\xec" "(\x8d\xf9^\x8e\xd9\xf0Q\xa6\xeb#I\xd0hr\xa3\xf5\xfb\x82\x7f\x8ewn\x9c^\xe2Y\x63\x9a]\xb9\x00\x1b\xc7\xbf\x9b+O\x01\x36" "\xbb\xc7\xe9\xe3\x14|\xc2\xd3\xc5\x04\x86\x10\xed\xa7\x31&\x32\x84\xb6\xd9\xf3|\xcaWk\x1aw\xef@\x34U\xa7\xbc\xdfi\x82\xf1\x80i\xb2" "\xb0<\x45O\xe9\xf9\x9cy\x8d\xce\x98\x42\x1b\xa9\xc6\x92nS\xea\xb0\xe7\xca\x16\x33\x19\xb3\?[\xe6\x9d\xeaUm\x9b\xc4\xceW|\xack" "\x0e\x87)\x31M\xb0\xa0\x0b\xd4\"\x17U\xf4\xee\x17g\x18\xeb\x10\x9aI\x95\xc7S\x30\xea\x00\x95y\x98/\xce\x7f\x7f\xde\x8d\xc9\xea\xc4\xa9" "\x45\xec\xf1xW\x9d\x15w\x95Ug\xa6\xa2\xe6\xdb\xce\x37\xa3\xf5#\xf6\xe9^\x94$/J\xe1\x1c]OL\xa1\xe8Z\x94P\xd6,J" "\xc8\xf4\xa6u\xd7\x62\x1b>\x37\x95\x05\x39\x14\x65\x85\x90\xd0\xca\x17\xa1\x15*\xc2\x42\x1dlR[KTh\x81p\x85\x96\x07\x85V\xcd," "Jp\x19_\x30V\x97\x12\x7f\x87\xc4\x36\"\xef\x89\xd9\xe6W-l\x89\xd2u\xf7/\x11J\xf1\xfe'h\xd3y\xc2\x87Iz\xb5\x9f\xde" "\xdbj\xce\xd7\x1c\x42\xe6g\x87[\x85\x7f\x0f\xe3)\x1aw\x0e\x61i\xb1\x98\xa7-r\t>\xe1\xb7\xb0\xd2M\x38\x1b;\xfd\xfa\x91\xf7\x8c" "\xba\xc9\x30S\xc1o\t\xaf\x93\x12i\x8c\xf1\x06\xa1\xf5Q\x85V\x18\x1b%\xe1\xa2\xa7\x1c\x94m\xc1\x64\xd4\xe8\x66L\x41(\xb4\x8e\x16U" "\xac\xdc\x35\xea*H\x9b\xa8^\xdc\x87\xb9q\x92\?\x80\xf9Y\xc6\x80\xf5\xe2\x9el'\x16_\xce\xf8\x97\xa0m\xe6\xbc'\xf4\x44\x84x\xf2" "J\x14\xde\x62\"\x13<\x65\xda\xea\x0e\x61\xa7\x1f\xfe\x1c\xa1&\x14\x65u\xc4\x82\xc1Q\x16O\x18\x81\x12Z\x87_\x38\xc6\xf7\xe0\xe8.\xb4" "i\x13#\x8a%\x31\xa5\x64\xe6Q>)%JZ\x31m\xdcZ\x38\x1d\x91s\xd0\xa7`\xc4\xc4\xe3x\xfa{\x98\x62\xe2~\x92\x65!;" "\xb4\xfc\x30\xda*<\xfb\xb4\x9bX\x30`\xe1\xd2n\xa2\xff\xbb\xb1\x13\xf5\x99*}\xbe;}\xa6N\?<]\xf2!\xf7\xf9j\xf4\xf9J" "\xf4\xb1\x87\xef\xa2\x8f\xe1W\xa1UV\x8b>sn\x1f.\xfc\xc2\xe3#\x10\xaf\x63\x1f\x03\xb1\x42\xdcn\x9f\xf7\xd2\xff{[\xfah\xcd\x08" "\xdf\xeb(\xb8\x16o\xe1\xc6\x32\xc4\x1b\xa6i\x8c\xc9P\xb7\\W\x35\x90s\x33!\x07\xe4\x10\xe3S\x8b\x61\xb2\xb2\x34\xff\xe2k\x36\xfd]" "\x15\xc2\xa7\x16\x96\xfa-\xa6R\xae$\x07u\x34\x1d\x17S\xa9\xdb\x93\x83~T\xe9\x43Y\x63o\x31\xc3\xcc\xc5\x62\xc5\xf2o\x93\xd8\x18\xb6" "\x31<\x39\x93\x7f\xae\xe2\x02#\x10/\xf7\xa4\xcf\x8c\x95I\xa6\xf0\x42\t-\xd5\x85+}@\xcb\xfd\x64\xae\x37\xb3\xaa\xae\xc1\xc1\xcc\xa9\x8bK*\xc8q\xe1\xf0(" "\xb9\xbd\x08\xcb\xc8\xfd\xf0\x13\x30&/\xfbY\xf2\x7f\xe5l\xff \xa6\xa7\x85&\x11\xae\xda\x92\x62\xc9\xf3\x01\xd4\xcfJ\xf3\xd1\xf3\xc0\x95\xee" "\x00\xe3J>\xf8{O\x44\xc5\xed'\x34\x9bU=\x91_\xff&{\xc0\xbf\xdd\x1e:\x7fW\x1d\xbe\xd6\xae\xea\xfb\x99\x92\x07W\xfbv\xb5" "\x93\xb9ui\xc5\xe9\x06\x13\x9b\xa6$\xb3\xc6O\xb8\x13y^\x61\xee\x13^\x1b\xa6\xe2\xf5=\x8a`U\x38w\x64\xc3\x91\xc2\xb3\x02\xc9\xbf" "\xcd\xbf\xc7\xc1\x06\xcb=\x45]\xe7\xc8[gr\xd8\x94>^\xd2\xdb\xcb\x8e\xdd\xf0\x8c\x37\x0fN\x8d\x10l\xae\x07P\x83\xf3\xe4\xa0\x93\xa9" "\xe1\"\xfe\xb9v\x95^o=\x03\xe8\x9a\x88r\x11\xae\x0b\xa2\xee\xcbN\xf8\xed\x9b\xa9u\x8f\xf9Y\x42}\xeeGO\xae\x1e\xc9\xad\xd3\xf3" "\x89.\x64\x95\xe7\x19\xe0\x39\x44\x03m\xabh\xb7}P\xd8\x39\x10\xde\xdfQM\xc1\x31.\x11\xf5\x83\xb0\x8f\x93\x61\xec\xd1(\xc5\x1c\x1cJ" "W\xef\xc9\xc9\x9b\x46\?Z\xe2\x8c\xc9\x10\xc5h\x32i;\xd3\x93\"\xa2-\x64\xea\xa7\x43\xd5u\xee\x64:\xa8\xf4nL\xf5\x17QM\xd4" "j\x08n\xd6N\x14{\xae\xe4\xbb\xd8U\xc5\x94<(\xcfr\x18g\x14n\x9b\xba\xb7\xc9\x16\xef\x9b\xfa.\xe6\xdb\xf0\xd4\x16\xb5\xdf\xb5\xcf" "\xf0H\xe0\xce$\xbc\xc6\xdd\xa7\xb7sg\xd8X\x86\xcd#W\xf1\xd9\x13|O\x33\xf5\x81\xf2.\xbdoI\xef\xd6_\x8a\xf4\xa5&Y\x03" "\xd3)P\?\x07^*\xa0y\xb1\x92\xb6\xc3\x37\xb8[z\x7f`\x95\xfc\xea\xe3\x9f\x32VU\xf2\xd8\xc3&@\xa2\xac\x9d\xb7\xfa\x88\xae\xca" "\x92\xf7\xb1\x91\x98\xa8\xda(^\x1f\x63\xf3\x87\xd5G\xb2w\xed\xfc]\x96\xd1u\x10u\xf2\x96\x94\xbe\xb1\xe4`\xf5\xe1\xbf\xa9!\x42\x06-" "\xb8\xce\x9a\x92n\xe4\xef\xf6\x13j\xf8\x0cj\xe3\xd6_\xfa\x8f\xc4\xc6\x41V\x1f\xe9\xde\x93\x14\x0cq\xc3^\xa2!+\xaa\x61\xf8<\x06\x97" "v\x87\xc3\xf4M\x1b\x39\xabo\x0b)\x61\t\xfb\x8d \xc8\x42\xebY\tm~\x66\xc5\x66\x8c\xd0\xe6*\x85\xd6\xad\x14\x06\x37\x8c\x9f\x65\xa7" "Q\x39\xc4\x19\xa2\x93Kp\x91\x83\x07\xe5\xea;>\x7f\x97\x7f\x30\xfb\xf8\xbd\xa4\xba\x01-\n\xaf\x91\xcf\x43M\xf4@\x35\xfaV\x1f\xe4U" "&x\x44\xdf\xfc\x96\xff\xed\xea;\xbdy\x93\x7fP\xd6\xcbWZ\"|\x63\x7f\x07\xa1\x85\x95\x31\xa2\x7fj\x7f\xe5\xf4_\x44\xd4\x12\x61\x03" "\xf7\x8d\x46\xbb.\xe4,\x80\xd6\xc0\\\xad\xd0\x13\x15\x16_\x41\xa4\xd3\n#-\x42\xa4\xd3*j\x37\xc1\x8e\x9d\x7f\xc5\xd7z\x85\x66\xde\xfa" "\x10\x43\x9d\?\x07I\xa0W\xbd\xb9I\x36z\x87\x9b:^\xc8\xcd\x0b\x1a\x18\xca\x35h\xed\x1a#\x8a\x19\x31\xad\x1aQ^\x81\xd6\x9b\xda\xbc" "\xf8\xe7\xf0.\x16\x9a\xe7\xa7\xd0\xa6\xc2\x95\x37\xa4\x06\xcb\x92\xca=\xdc\xe6\xa2\xe6\x19&\x0bv\x0e\xeb\x04\xde\?\x87\xb1\xe8\\\xcc\xb3\xa2\x13" "\xeb\xc5\xc5\xb4\xdcn\xd4\xb5\x9a\xe6g#\xea\x9c\x7fp\xfe@\xbe\x81\x17\x07\xe4\x13h\x63\xe3\xc2\xf2\x05\x86z\x35\xea\xf1)\xa9\x13\xbb\xd9" "/ZOIh\x15\xbc\xf2\x1d\xb4\x45\x00\x46L\xf5\x88iy\x7f\xc3h:\xca\x89\x13\xd1\xa8\x34\x96\x32\x13\xa2\xcb\x8f\xac\x01\xb0\xd1x~" "\xe1\xe8\x07\xc1\xeft\xe6\xac\xcd\x1f\x1d\xd5-\xf4\xf1\x12\xea\xeb\x1a\xb4\x89I\xa1U\xe6\x1bv\x8b\x94W$\xbfg\x63\xd7v\x8f\x46l\x32" "\xec!\x9c\x85\xf9=\x32\xef\xc4\xbc\xb8\x98\x45\\WT]kZ\x98\xab\xb6\xa8\x1a\xae^\xeb\xb4\xbd=L\x91\x89\xba\xc7\xed\xc3\x33S\xf8" "|\x07\xf6x\xfc\x83\x1c\x1ck\xf4\xa2\x43\\\x34\x06G\x8cr\x14>\x14\xa2,\xe8\xa5\x11\xe5\xf2\xe6\x05s|\xc2\x1c\xee\x06s}\xc2*" "~\x1e\xf1\xcd\x85\x8d\x1aY'\xf1\x03\x18\xd9W\xe2\x11\xc4\xafx\xb0\x98\xd1\x33\xfa\x9d\xa8\x39\xc0\xc5\xc6o\xb8U\xcf\x80\x9eI\xb0\x84]" "\xf8\xc5\xb3\xac\x8f\x8c\xc9!\xd2\x18;^\tO\xf1\xcc\x30l'\xbc\xfa\x00\x1f\xcf\x9d\xba\xc7\xca\xfeU\xa6\x32\x13\x0f\xd7\xdf\xca\x64\x32!" "y\xc2)\x7fp\x85L\x06o]\xa3g&\x31Qi\x9b\x99\xda\x14\x8a\x9a_IP\xdf\x31\xe1\x38\xaej\xe2\xf4w\x0b\x8b\xbf\x8c\xf2\xcc" "\xfdI$\xc1\xb1\xf3w{\x8f\xa8\xca\xa6\xc2\x42\xc7\xdf\x46U%\x8b\xef\xc7\xf7\x46\x0e\xc4\x83G\xacnT\xc5K\x0c\xae\xc9[\xe7N\x46" "G%\xbey\xc1\xea%!\xd3\x06Sv\xc6\xb4\x91\x0b\x07\xba\xb1V\x98+\xf0\x18.\x32\xbd\xec\x93H\xf8\xf4\xea\x90\x0c\xc0*r\x18\xaa" "{\xe1M\x8f\x9c\x38u\xf3\x9d\x35n\x0e\xce\xd9\xca)\xd8<\x01\x1f\x91\xd7\x31\x83\x61\x8c\x1b\xa7\xd9\xb9\xe4V\xf8\xb8\xd4\x0c\xcaIPr" "\x95\xbe\x9d\xa6\xf5\x1b*^\xd2[\x85\xe4\x9f\xdb\x88\xcf\xe6\x15\xed\xa7\xcd+\"\x33\t\x91\xa4\xaf\xe8\t\t\xf1\xfe\xbf\xa2\"\xd8\xbc\xa2}" "#\xe4\xf7\xa2\xf6\x95\x33;\xf4|\xe6\xcc\x0e\xd9h\xe5\xe6\x15\xa3\x90\x9bW\xc9\xb1\xfe\x91\xfcs\xfao&\x81\x95\x15\xaf\xba\x7f\x02\xbf%" "\x66\xb2\xc1\x95\xa4\x97ON\x16\xb8j\x66_\x14\x13\x65\xc5\xab&\x0bJy\xfa!mz\x08(#lY\xd6\xe8!\x8e\xcb\x86.:\x42" "\x64\x95\x1e\x33\x89\x12\x95+L\x1b;\xdd\xf4\x98U\x94\xd2\xc9\xc0\xae\x92\xa6\xc2\xbd\x00\xfb\xb5\x99\xe2%\xa9\x89\xc5\xa2|\xcf\xf5@rj" "\x39\xa7\x1f\x1e\xdb\x85\xf4\xa3\x8b\x1ax\xdd\x02\xeb\x07N\xf5^\x1f\x9c\xb8\xd2\x16V\xa1\x0b\xf5\xda\x30\xc2\xe3\xc6\xa8NN\xb6\x00\x11j\xde" "s\xa5\x07\xaa\xdc\xaa\xc0T\xb6\xa0XU\x00\xe2}Q\x46\xb6\xcej\xa3\x8e\xe0\x08$\xa5\x66\x8d\xbcs\x86\xc7\r\xcc\x46\x43-\xbf\x31P" "\xa8\x8aG\xcdyGY\x07\xcd\xf9Y\xf9J\x0e\xc0\x35\?\xc7\x1b\xc1\xe8\xfc\x46\xe6\xf1\x0f\xb6\n\x94\x18\x9a\x32\x13\x1e\x63j^\x91M\x30" "h\x90\xf8!l\x8f\x64\xf4+\x16\x13\x8d\xa4\xcd\x07\xc2\x43\x08\xd1\xc2\xf8@\xa3\xd1\x18\x36\x19\xdbU\x15\xb7\x7f\x15\xd3\xc2\x9b\tOx." "\x9b\xc2\x10\x9e\xf1\xe7,\x9a\x99\xb2\xe7\xc4\xa2z\x33\xa3\xc3!\x0b\x12U,\x19\?\xe0\ri\xcc.\xf1\xbc\xe6\x44\xd3\x1c\xe6\x98G\x8b\x19" "\x11\xb7^M^G\xf1K\x1e\x01v\xf9\x10u\xc1\xab\xb6y\x1c\xa3'\x61X\xba\x91\x36)\xf6^SUw\x46\xf9%s\xb2)&\xb3" "\x98\xf1{\x81\x45\x84*i\x9c\xb2\x8a\xfb\x80'\x94\x31\xdbtW\x15\xaf\xa8\\q\x66\xe9)\xe6\xf6\x11\x83\x31\xa6\xb2\x8b*WX\x1f\x7f" "\x84\x95S\x32\x0fV\x91\x61\xc2\x1ao\xa9\xc1\x84n\xf2{\xcd\xa6\xf3ws\x8b\xc9\x88\xcdGv\xc1-\xfer{\x85\xe8Zn\xa6\xcfm" "\x44\x7f\x90\x03\xe6S!\xec\xf0\xb1\xd8\xf2\x30\xe1;\?G\xfd'\xbc\x61)/&\x93\xcd\x66.\x8c\x98\xc6\x17s\xc0\xeb\x1a\x1e\x91\?\xe0" "|\xe0\xcc\x9e\xec\xe2\x98\xe4\x0fX\xe7\x46\xc9\x0bY\x31\x45\xad%\xae\xbc&\x87N\xf4\x38`\xfa\x65\xfe\x0cw\x1f\xe5\x0f\x13\x62\x43\xbd\xe1" "\x39\x02\x9e\x33`>\xda\xbej\xfe\xa9\x31\x31\xb7V/}\x44\xfb\xcf\xd9r\tQ\x07\x0f\xe4\xf7\xcew\xa3\xa3\xfd]\x85\xca\xe2\x83-\x05" "\x65\xe6\xf7'\nM\x44\xa5t\?<;Gg\xfcn\xfe\x88t]\x97\x37\xd0\x1f\x8b(\x8c<\xab\xd9%y\x99\x05\x64#lWo\xf4" "\x9c%\x66\x16\x12XU\xdf\x99\x9d\xeb\x82\x37w\xd1u\x66\x7f{\xf9\xe9\x64\x39\xfe\x81`\x1aJ\xe4\x46\x8c\x7f\nk'\xe4\xcd\xee\xed\xde" "h\xcc\xdb\xb0\xc3\x1f\xbd\xe5\x8d\x30o\xb2\x66\xfa\xc0\x34\x84q\xe7\xd5\xc5\x46\xe1\xc2\x0e\n\x89\xe8\x43{vY\xf2\xda\xb6\x16\xc2\xcfg\x92" "\xe7\xf8\\G\xdf\xed\xf0\xb9\xb2\xa3\xa2\x05\x1f\xdb\x88GG=y\x07\xd2\xdc\xccU\x66\x8e\xaf\xd9\xec\xfb\x80\x33\xb5\x11\x91^\xc5\x9cV\xe4" "N\x10]^\x94\xf9\x9fn>t\xe7\xba\xc5\n\xc3\x95\xa2\x0eP\xfex\x0e\xc7\xf6\x82\x42\xbe\x1cl\\\x7f\xc0\xa1N\x88\x46\xf5\x07\xe2\x8a" "\x19u\x9a\x0cm&S\xc1\x36\xdc\x66\xdf\t\x8b\xe3\xd4\xf6U\xdep:\x44\xd8\xfap\xee\xfe\x65\xeb#\x33\xdb}'\xb6\x00\x10\xf3\x99W" "\xd1]\xec^\xfbk\x85l;\xbdT\x8e_\xd7N)\x61\x63\xa6\x91(\xac\xaa\x84Y\x1dz\x9d&*y=\x66\xd3\x41\x95'\xb0\x9a\xf5" "\xa9\x97Q\x98Q\x14~\x07\xc9\x0b\x37\x8c\x16\xc5\n'^\xa1\x14\x42\xe4\x03%r\xa0\xff:\xa6R\x84\x87N\xbc\x80\x98\xfe\x11\xe6\x46^" "\"`\xed\x8d\xf0tJ\"\xeb\xb3\xf3\xc0\x41\x1b!\xcb\x0c\x8cY\x08\x87y\xb2\x42\xa2\xe0\xc6\n\n\xe1\xa4\xabo~\xbe\xbd\xa3<\x83\x42" "\x65\x17\x35yq\x62\n\x42M\x9el\x8a\xdc\xc9\xf6\x18\xc7\x81\x84\x9b\x17\xa7\xd7(p\xfe\x33j\x10H\x16\xed\xc9\xe6\xc3\xa9\x0e\x84,\xe5" "=#k\xff\xa5\xf9\x1c.\xeew\x14\x82\xa8\x9a\x92\x82(j\xbd\xb9\xfa\xfb`\xe2\xf4\x06\x02\xbb.\x1f\x98\xd9\x13nO\x9c\xfe\xfe\x62V" "\xd7\x88\xdd\xd8\xcd\xf4\x92\x03\x83\x39J\xdc\x0c\xe2m*/\xc9\xb6\x33\x1aV\xdd\x64\x17\xd2Lt!\?\xd8\x14\xfd`\x0f\x44\xe9\x17\xc9\x8e" "\xc2\x07|\xca\x85\xf7O\xea\xd2{\x88\x12$m\xe3\xf1\xa7\xb6ly\x33\xe0\xc0\xcc\x80M\xb0\xc1\xefO\x85\xbc\x05\xd1\xb2\x1a \xd0\x96\x10" "M\x9e\x41xQ`\x11\x36\xe0\x93Q\x86%n\xdd\"\no\xf7\x80U\xf5\x80U\xf5 l\?\x80\xe8\x32{\xc7r\xc0\x0e\xc7 \x44V" "W\xf2\xe5Q\x33\xfdn\x62\x1ek\x33\xe0\x30\x82\x05\x96*\xd4tY\xa4_\x87\xcd\x18\x64\xfdSy\xac\xfbQ\xed\x9dy`\x80\xd5\xbb\xc2" "\"\xbfuS\xc0\xf6\x94\x62\x36\xf0;~\"\xdd\x01\x15u\x94\x9a\xec\xcc\r\xa2\x87\r\x88\xb2x\xc0\xa1\x87\x41\x34\x1b\x42\x94\x00\x03l\x1a.\x1c\"\x65\x92\xe9\x39\x88\x97q\xc0" "wK)\r\xcd\xd0\x96k\x9b\xf2\xf4\xb2\xd2\xe2\x91\xe6\x04\x0c\n$\x9en\xba\x87;I\xfb\x63\xd0\x96uo\x86\x18\x87\x14\xa2\x99<\xb4" "\xc0S\xfb\xeck\xa8\x62\xf3\xd8LwV\x84\xf2\x05(P\?{l\xe6\xfe\xa9\xbf\x91;=\x16\xe5\xf7\x10<\xca\x94\xa4\\\xbcnS\xad" "\x39\xc0\x30\x84\xdf\xdc\x86\x03\xce\xc6\xecR\xcc\x0cu\xd5\xce\xca\x0f\xa8/\xed\xd9i\xb6:\x1b\xc7\xf2=\xcc\xc7\x98Js\x45y\xc5\xd9\xdf" "\x18\x86\xc7k\x10#\x97J\xe6\xfe\xa1\xdf\xa6\x30yv\xb3\xe6\x44@\\\x31m\x94v\xa3\xab\x0f\xf8\x30\xc5\xfc\x0c\x91\x8b\x86\x61\xe5\xc9\x19" "\x9a\xd3\x8c\x98\x97\xe7\xe0=\x7f\x06\x03\x8c\x1cI\x17\x0eZpY\x16s\x84\xfb\n\x17\x87$\xcf\xea\xa7\xc2@\xe0\x90\xed\xd1!\x07\x00\x87" "\xd8\xbd\xca\xc8\x8a\xd0\xcc\x9b\x87\xec\xc4\xa6\x92\xc3M\xa6\x66\xcf\xd8-`\x33\xf4\xbf\xd0I\x64\xf3\xcc\x17\xd3\x46\xa0\x8dXX`\x66Tk" "\x64&\xef\xe5\x8f\xc8JQ\x8b\xe7|\xc2S\xc6\x14\x9c\x10\x83\x81\xc3\xe8\xbb\x0b\x1f\x38\x31\xc7]'K\xcd\xa1\xbc\xb2,\xa1\xcc\x44Sq" "\x18\x9f\x9d\x38\xe3\x06\xfe\x16\xdb\xb4\x1b\xc3\xdeI\xfar\xeb*Z\xf4\x33u\xc7\?\xc7\xf0\xe1\x90\xef\xb3\x32;\xe3\xfd^z\x8b\xbc\x1f\?" "~\x38u\n\x02\xe3\x0e\xa6\xf8R\x88\xa9\xd3\xde\xb5\x8d+O\xa3\xf8\xa9\xed\xe4\xbb\x38\x8c\x9f\xf7\xb3_\x13\xd3\xbf\xf0\xdcs\xea\x9f\x8f\x91" "\xdd\x63\x8b\x38\xb2\xd1\x1d\x90\xd9\x87\x19\xc6\x03~\x84!\xc9!;\x9d\x43)\x61\xe2\x35\xaf|=\x95\x7f\x34\x17\xa0\xed\x80\xb7\x19&\x07H" "\xcc\xe4\xe8\xc0\x89\x1d#\xd5\xbc\xc3\x1c\xad\x98\x39\xe4\xac\xe4\xb8\x04Z\x00\"\x98\x43~\x84\xc6\xc5P\xfe\x19\xd3\xcb\x33\x7fS\x38\x0c\x34L" "\xab#,\xa9\x10\xf3\x1e/\x9ct\xe7\xc0\xee'\x39p\x62\xdbq\x31_n\xe5\x39\xf9\x33L\xfb\xf8Y\x0e\x8e)\xd9\xd1P\xd3\xafW\x83" "\xddo\x06n\x62\xbf+\x37\xb1\x8c_Tp\x8au\x46\x9b\x11\xa6T\x84'k\x10\x83\x01J\x8d\xb3\x62.#\xa6\xa2\xebS\x04\xe2\x13u" "U\x04\x31\x12\x36\x8a\x0f\x16N\x16\x61j\xf2\x19\x8f\x38\xf0\xc3-\x0e\x94\xd4\xb3\t\xb8\x19\x39\xe3\xc3S\xf9\xe7*\xbd;\x96\x7f\xa6v\xe8" "\?\x9a\x36\xe6\xc9\x64\x98\xec\xe1\x36\xd2\x85\xbdN_\xc9\x66\x0c\x62|w\xc2\x06\xc3\x04{\x1aH\xdb\x08=\xfc\tg\x1f&|N\xc2*" "\xe8!\x1c\xc5\x44\x05=\xc1\xd4\xbd\x11+\x16\x37\x93\xe8l\xeb\xc4\x96\xd4\x62\x9e\?\x82\x37\x05\xd6@\x8c\xcf \x9c\xeeG\x63\xcb\x82\x13V" "\xa5\x13v\x36&X\x36$|\xdbwJ\xfb\x0b{-\x8b\x42\xb6\x9e`\xe7\x0b!Z\x18\x93\x04\xaf\xe0\x84U\xde\x44n\xfa\xaf\x07\xc7x" "'\xc6t\xff\x06\xb1P\x36\x33\xc4\x14\xb3xmY\xec\x37Q\x7f\x8c\xd7\xf7\xcc\x1e\x33\x0e\x87\xcf\xf8\xb7\x0bv\xad\x17\xd8\x16Wx\xf0\x03" "\x62\x44\x66\xc5v\xef\xfawQ\x0b\x0f\xbeY\xa1\xac\x11\xdf\xcf\x18\xbe\x1c\x31_\xad\xf5\xaaN\x8a\xec\r\xaf\xe1>nL\x17[\x96\x81k" "\x8e\xf6\xae\x7fm\xce[h\x33\xda\xca\xad\x93\xcd\xaa\x35\x02\xadl\xd6\xe1\xfe\xc5\xef\xe6\"<(\x42\xe5\x0e\xb1\xc3\x97\x9aS\x10\xf9[\x89" "%T\x30\x91\x99\xd4\x8c\x9e/\xdd\xe4`\xea:<\xbd\x05-\x00\x81\x30\xdf\xcb\xe2\x16\x8a*^\xa6\xd5rv\xfe\xac\xad\xb1\x46p\x16\xe5" "sR;\xc2n\x82\xaa\x90,\x61\xb9\x15\xe5\x9e\xc2r\x99\xaaM.\xc1\xcb\x0f\xf0\xea\x07\x44Q\xb3\x0e\xeb\x93\xdds\xa1\x1f\xf1w\xf9\xcf" ":\xe9\xcd\xe2H=\x02\x9c;\x89\xca\x9c\xbe\xe6\x94\xd9:\xdbV\xdeM\x0e\x8b\x9aZ\xbdr\xa4I\x15V\x01\x9a\xf9\xf7\x9dWpq\xcc" "v\xd9\x9a\x83\xd7k,\x8f\x11\xda\xea\x02\xe5\xa7\\\x39\x16\x8b\xb9J\xa6\xbc~>X\xf8\xb5l\xd6\x88\xdc%\x44{V\xa9>\rh\x01" "\xae\x11\xff\x41\x89\x34\x8a\xf2<^\x38 \xcfH\xe4\x82\xe8\x9c\xbaX\"\xf1|\xa2\x0b\xdc\x44T*\x45\xf3G\x8e\x92\xae\xa3\xca\th\x31" "\x1b\x84x\x35\xa5\x93\x8c\xc7-\xe5\x1fyN~\x83\x35\xfe]\x9dW\xd7\\\x85\xb9\x31{h\xaa\x32\xf3\x9e'j\xf3\x8b\xed*\xf8y\xee" "\x94\xfb\x87\x7f\x36T\xe3gG\xfd\x99/N\x0e\xfa\xac\xd9\x66P\"\\j\xf8p\x8c\x03\xdfx\x16\x11Z\xdeJ\x36\xce\xd6\xd8\xd8\x41\x38" "}\x8b\xa6\x03\xf8\x42\xa8\xc2\x03\x41\xbcP!\x46\x9c\xd6\xf1!\xb2i\xcc\xa4\x66\xf9\xc5Mn\x8c\xea\xe5\x82\x81\xf4\x35\\\x15\x85\r$\x19" "V\x30+\xf1X=\x33\xc4o\xd7\xe0\x07\xde\xaf\xf8\x9b\x7f\xbf\xfa\"W\xce\x9d\x1c\x89-\xcd\x95HW\xb6W\xd7\xba\x9b|\xfd\xca\xdf\xce" "\xe4\x08I\x80\x1dr\x95\xfcv\xa1\xbb\xf3R$U\xfc\xb2\xdf\xbfP\x37\x38oww\x14\x87\x1a\xd6\xc9m%\x9a\xe6\x10 I\xd4s\xce" "\x99\xed\xd8hJ\xe7\xe5\xb7<\xfbs=\xbe\x18\xb2\xab\xa8*\x39\xe8r\x9al\x8d\xa8\x96J~\xda\xdbs\x86\xc3G/\xd6\x44\xed\xbc\xd8" "X\xec\x63\xdc\xfd\xce\xe4I:\x05\xbf\xc1\x83\xab\xb0\xbb\xf1'\x01\xc5\xb6\x98\xaa\xe8\xfa\x03\xab^M%\x93\xe9\xce\x37w\x9e \xd4\xdf\x37" "{\xce\xb8=\xf6L\x95\xa9\x9dg\x93L\xf0\xe4\xb0\xfe]\xb8\xc0\xabg\xce\x45\x7fgg}\x91\xa8G\x45!\xfb\x95\xcdK|\xdc\xe6\\" "\x98\xa9\xc1\x1e\x82\x31\xa8\xe2\x15l\xfc\xd3\xb5\xd3KN\xc4\x64\x32\xfe.\xd6\xec\xee\xaa\x92\x16\x0e\x07\xa0Lu\xbe\xc2\x41\xd3U\xfcs\x85" "m\x1eT\x95\x9cX\xe9\xa6\x66%\xfc\xc2[\xc7v\xdc\x1a\xce\x35\xc2\x16\x1e\t\x9bQ\xca\xdf%\nX\x38\xaf(\xeb\xce\?\x13\x99\x11k" "\xd8\x8dROy\t\xc3\xc9O\xa5\xd7*\x62\xfe\xa5\xc2\x86\x13T\x1b\xd6\x9a\x1bv\xee\x94\xff\xc3\x04\xde\xe6\xf7\x87\xab\xb0\xc5\x44\x17q\xc3" "\x39#\x65X\xfa\x0e\x8f\xcf\x33\x85\xa2\x64\xc3\xa1\xdc\r\x66\xe2=\x86i\xfd\x30\x33Q\x35\xd3\x9c\xa0\xd0\x0b\x18\xfd\xdf\x88\x32\xdaL\xf4\x8d\xcd\xc4P*L+\xad\xc5\xb4\xdd\x44\x84\x8b}\xf0" "\xe7\xc7\xa9\x0b\xae\n\xf6\xfe\xe4\x10/RX\xc3_\xa1X\x15\x9a\x37I\x90\xc3@[\x90\xc3\xba\xdf@#[\x87\xd5\x13\x8c_\x9a\xd2P" "\x06\xc1\xbd)L\xf1\x04\x8c\x0bmLO\xf2R\x1b\x65q\xec\x83\x63L\x16\x06'\xd1\xf0@\xb7\xee\xb3I\xf1\xe0\x14\xfe\x90\x01\x63\x85\t" "\xcd\xc3@h\x0b\x1c\x84Vv\x04\xa7\xfck%\xbf\xca}\xdc\x85\x16\xbc\x44x\x81\xe3Q\xfd\x01|\xf8\tswL\xb5\xb3\x38w\xee\xd4" "\x15_\x8d\x01T\xa5\x05\xe2\xc2\xcf\xe2\xf5\xd6\x89\xcd&\x82\x33\xec\xd4\x1b\x9c\xa5\x97\x13\x8c\xbb\xa8\xf9\x93\x99\xbe\?\xb4\x9a\xb3\xcc\xacV\x32" "\xf3\xda\xcf\x94\xe7\xbd\xe4\x31V\x1c\x14\xd1i\n\x8a\xccSJT\x30\x62Z\xd7*(\x46\xcd{\xd0\xf6]\x12Z\x8c\x8e\xa0\x88}\x82\x82" "\"\xbc\x92\x83\xa2N\xe8\x97\xcb\xe1\x95\xdd\xeb\x05\xf3z\x19\x1bH\t\x91!\x94\x98\xc1\x84i\x35\x39\xcc\xe0%\x1c\xb6]\xe9\xc2\x11\xdb\xe0" "\x07\xea\xec\x80\xef\xcc\x9f\xe2\x65\xda\x01\x64\x1b\x33}\xc4\x03\xca\x86\t`\xfe\xac\xd0\xa7\x33\xc5\x37\xc1\xcc\xebRt\xd4\xfe\xe7\xc0\xf3\xce\xc5" "\xa2\xde\x36\x13Qg\x61\xda\xc8\x07\xcc\xbf\xeb\x88\x1b\x93\xe8\xa2\x9b\r-\xd9\xb1\xe4\xe0\x1b\x33\x08P\x36\x12\x0bSz<\x95\xbc\xee\x8f`" "\xab\x0fq\xcc\x46\x00\xcdL\xeb\xdfQ\xbe\x63\n\x03\xb6\x42\xbc\x15\x65\x38L\x06\x65>\x43:\xa1\x05\x15x\x16\x04\x95\xf8\xfe\x05\xec[\xfe" "\xad \xb8qP\x41\xe4\xf4\xe0\x12\xb5]p\x95\xb9n\x07W\xcc\xc7WhQ\x19\xd1\x08\x36\x13\xeb\t\xcc\x44\x30\x7f\x98>\x8co*\x19" "\x04\x61\xe7\xc4U\xba\xd7\x66j\x9bz\\\xc2\xc4\x8b\xa5\xcc\xce~\xb2\xc2\xb0\xa7n\x66\x31u\xee\x1cR\x1f\xc3\xf5\x15\xa2V\xc8\x01k\xd0" "\tmr\x46\xf8\xd4\xcb\xb6\x8a\x12\x65\x8bi\x84\xc3\x63,@\x12\xd3\xb6\xe0Tn\xb3\x93\x06\xf8[\xac\x66\x16Z\xf8\x44\xe5\xc4\xe9_\x8d" "\xbeo\x99\xef\xae\xd0O\x30\xfe}\xaa&\x8b\xcf\xabh\x66\xb5\xf8\x15<\"-t\xbb\xd3\xbf\x82Yl\xe1w\xe0\xe7\x80\xb9s\x87\x98\x65" "\x0e\xae\xd0\x0f\x14\x1e\xdc\x87g\xb5\xe4\xf0\xd8U\xf4\xdd\xcd\xd4#\xee\x04;\xdd\x0bm\xfbU\xa1\x35\xce\x82+\x34\xce\x8c\xba\xbf\xcb\xba\x90" "\xa9\x05\x9e\r|)\x83*\x06^\x83k\x96\x0e\xd7l\x07]\xa3{\x17\xd4XR\xd6\xe0\xb0(\xb4\x31'\xa1M\xa4\x0bm\x15QP\xe3" "]\xdd\xfc\x06\xaf:\x9a>\xb4\xb3\xdd\xc0\xdb\xd0\x88!\x1e\x35\?\x9c\xd2\xc7\x87\xc7\x98)-\xd0-X\x44P\xc7\xe0\xa7\xd0\x06\?\x83\xdb" "\xdf\xe5Wts\x93\xe2%\xb8\x85\xebSp\xab]\xd2N\x9f\x17x\x1b\xdfXN\xbdM\xbf\x0b\xb6\xd7\xba\xe5\xe6;\xf9\xa7l \x08\x89" "Q\xde%\x04\x9f\x10\xb5\xea:\xd3\xfb>\x96`\x89\xfa)\xff\xaek\x91\r\x16\x05\x8d\x30\?\x06\x0b\x1d\xa7\x1c\xc2( \xd4\xbc\x8b\xd9Z" "SR$&{u(\x0b\xe1)\xec\xcc\xc1\x39\xcf\x34\x9f`\x63\xf8\xa0\x11\xdd\x0e\"[\x94\xe5\xa6\xb4+\x98\x95\x1bQ\xf3\r\xb4\xe8*" "\x41#>\x9c;\x31+\x1c\x34\x92\x02\xee#\x99\xdc\x63\x1bz\x31\xedh\xf6\x41\xf0\x0cn\xdf\x10\x9d+h\xa4x\xdf\x1b\x98!\x10\xa2h" "h\x46\xfb\xfd\xe4\xf0\x1c=[\xa8I;S\xe7\xc3\xb8j\xf5P\x13\x8b\x83\x82\x16\xc6\xa3\x95\xba-S\xba\x37p\x95\\\xcc\x99\x90\xa6\x82" "\x00{\x80\xa9\xaa\x91]\r\x0fm\xce\x33\xa6\x34\x00o\xa6\x46z\xb6\xc6\x11\x94\xad\x35\x35\xb2\x92j\xfd\xae;\xa4\xbdO-\x04\x15\x12\x9e" "\xbe\x83\x45\xea\x0b~^\xea\x82\xe6\xd9&\xac\xad\xa3\xde\x1b:'\xa2:w\xd2\xcc\x66\xbb\xb7\xe5\xbf\x81\xd8;\xc2Q^\xb7_,\xf2S" "\x0b;-\x9c\xbf\xca{\x8e\xb5\xe6\xa2\x82\x41t\xd3\x63+\xaf\xc5r\xa5\x15\xdd\xbc&\xdb\x8b\xa8\x36\x82\xc2\x03l\x45_'N\xff)\x16" "\xaf-,\x38\x17\xdan\x83\x41\x0b\xc3V\x42\xdb\x32Z\x38\xd8\xd3\xcd\xafl\xa5n\xd0\xc2:@\xa3'Q\xb2\x8fk\x46\xc4h\xe1\r\xee" "\x1f\x63>\x42s+\x11\xda\xf6\x1b\x42\xf3\xf3\x14\xda\x00\x66\xd0\xc2\x44\xb1\xb0j\xba\xcdnO\x9b\x39\xbb\xad\x11\x0c\x7f\xf6\xe0M\x15\x30t" "\x64\xd0\x8e\xf6g\xe9m\x07K\xf2\x44\xa1\x99\xdfN\xf2sp\xf4L\x42\xa7\x07o`\xa3\xe8\x8c\x1f\xec\xf5|\xfe]^`\x8b\xb4\x80Q" "\xd4\x85W\xa7\x98\x13\x15\xf3\x65\t\xa2\x8cz\x0e\x37\x96\xa0\xcf\x18]\x15>\xe0\xf3\xa8s\xe9\xfc]W\xdd\x64\xf1\xad\x66j\xe1&\xc5\xfc" "\xda'-\x37=#\x98P\xf0\x9c\x1c>\xfa\x39\x92\xdcyRj\xc2t\xe2\x65z\xf6\xb3\x08yn\xc6\x89\x14\"\x1b*\xd9\xf9Q\x33\xaa" "-\x31]\x63J\xfb)\x16\xd0J\x94\rJ(\xed\x95\xef\xb1\xd9\xad\x8c\xea\xc3\xf4\xbe\x05\xd5*\x83xIz\x08\xdc\x13\xf4\xe2[{\xcd" "z|\xe6=lN\x62\xf4\xeb\xc1\xea\\#\xb3\x9a\x9a\xda\xc9\xfa^S\x1d\x93\xd0l\x42K\xa9\xfa\x06Z\xec\xb2\xa0\xcf\x1b\xeb\xff\xddX" "_\x8a\xe1\xf0\xb4\x8f\x91\xfcL\x05-\xa8g~\x1dO\xac\xcf\x1b\xec\x63\xb5\xa6\x91yIM\x1d\xa9|\xe2\x07h\xf8(\xd9tV\xd3O" "\xa7\x66P@t\x01S\xd8\xeb\xc2L\xd6\x9a}\xa6\x61\x9f\xa9\xd5\xe7}\xf7\xd9n\xeb\x33\xd5\xfal+\xf6\x63\x9b\x30\x0b\xfa\xf2\xf7Zq" "\xd9\xf8\xa9(\xb4@\x95|\xc5\xd4\x64\xd7TM\xff\x39&z\x1f\xdb`\x18\xe1\x96`\xa6\xdf\xb7\xa6\xb8y\x41\x88\x89G\xa2\xcc\\\x9c\xa1" "\xaa\x43\xe9\x9a\xe9\x42\x05\x94\xba\x7f\xc7\xb2s\xcb\x01\?\xa1<\xd0\xda\x86O\xb1\xff\xf7x\xd5\x94\xa6\x19\xbb\xa7\xaa\xd2\xbd\xb5\x34\x00\xa9\x8a" "\xe4\x07\x39\x01\xf9\xd4\xd8\xfd\xec#\x42\xae\xd0\xbc\x46\x82wvy\xb8\xb4\x39\x18\xb1\xc9\x38\xc2\xa4j\xc0\xfd\xc4\x84\x16i\x35\x18\xc5\x16\x18" "\x39\x18\x61\x05P\xf0\x85\xf8H\x42\xd4\x0b_\x98}\x34\x66\xc1\"\x02y\x97\xacz\xff\xca\xd6\x91\x9a\x92\xf6\x88(lV \xea\xed\xc0\xc9" "\x07\xb0\x64\x45\xb4\x44\xcc\x33!.v)\x89\x0b\xa2\xc1\xb2\x84\xef\x9b\xd0V\x8b\t\xaf>\x41\x34\x64\x96\xe1\xfd=h\x8eT\x42\xf3\x82\xd0" "\xf3\x1e:\xc3\xe3o\xcco\x42yPWSl\xe8\xa9\x99\xf9\x63\x8bz\xe6\xc9Q`.\xc3\x61\x0f\\\xf0\x34h\x8d-\x11!\\\xf9\xed" "\xd4\xff\?\xf9\xe9\xca\xc9K\xb6\x39\x43\xe1\x06\xb7\xc2\x02x\x89\xa8\xf4\xc2\xeb\x89\xfe_]\x42\xa1\x87\xbd\xc4zg\xa1\x39p\x08\x1f\x8f\x41" "T\x7f\xcb\xe8\x1bw\xc0\xbah\xc9\x17\x66\x89=W\x8c;\t\xa0\xca\xbc\x35\xcc\xf4\xbb\x8fk\xc7\xce\x9d\xe4\x11%\xdd\xfd\xf8\xb3\x06\x65\x93" "'\x42[\x8e%\xc4\xb8\xc1\x32;\x07\x46\xd6\x94\xf0\xc5\x81\xb9s:Q\x1e-\xd7Tv\xc5\?\xf5\xcc\xa7\"X&\x8f\x39\x12\xd7\x9f<" "W\x41\xf3\xb4\x34\x86\xab\xb6\xa7\x8e\xa8\x1d\xd3O\xce\x37\x64)\x8f\x14\x9c\xe2y\x62\xc2Z\x88\x8a_\xb9s\x81\xe9\x11N\xc4\xcat\x89\xfd" "\xf2\x94\xb8\x43\xb6\xb1\x97\xd2\xd1s\x62\xd7z\x98g\x45O\nUW\xbd\xe8l\xcf\x95zt\xa3,T\xe5)'\xa6v)\xd1\x85V\xa5" "!n\xebT\xb7\x39gtZ\xc6\xee\x17P\xf9n\x9as\xc5\xeb@\xe1\xbfL\xbb\xb8K\x38+\x06\x1b\x84\x7f\x35\x86\xc5|\xf8\xdd\xa0\xfa" "\x04m\x13\xbb`\x13\x96\xbe\x41\xbc\xdd\x9bp\xb0\x1f\x96:q\xe3&]\xb4\xb3\x03\xd9\x10\x96\x94]\xa7z\x37\xb6i\xa0\xaa\x31\x88G\xb9" "\x61\x43h\x83h\x98\x42$\xf4\x06\x1bT\x08\xebU\xd2\xfe.\xd0\x10\xa6\xf9\x8f\xb0k\xe5s\xa0\x05\xb9\x39L\x8a\xb9\xba\x88Z\xfb\x98\xfe" "S\xb5r\xc6\xed.\xcb#S\xef\x85\xec\xb3\xf5\xbe\x13\xab@\xd5\xb4\x42>\x08s\x05\x96i\x62\x8e\x92r\x0f\x33\xb5\xa2\xf8k\xba\xbc\xb5" "\x31\x80O\x95+\x36.T\xa5\x8f\x33\xbf\x12U\xef\xf5\x08\xdd\xd7 ,\x36I\xfc \x1b\x41J\xf8\xc5\x8aY\xdb\x0b-\x94\xbb\x98\xb7\xcd" "\xf0v\x96\x62\xec/\x80\xd7\xad\xf0\xfe\x80\x65\x17M\x66\xc7@r\x8c\xce;\xf0\xf6\x42\x0b\xc0'|=\xc6\x0c\xb7\x98\x9f\xfcu\x34|\x95" "\x1a\xd4`\xf0\xb2\xa3\x38\xc0\xa9J'\xdb\xfc\x64\xa3j\x38<\xcf\xaeK\x1a\xf2\xb5\x93\x1d\xf3\xaf\x32\xe3\x01y\xf8\x61p\xf9\xef\x01\xbe\x63" "<\x80x\xb2\xa6\xe2\x97\xd2\xdf\x99\x7f\xb0+\xbd\x98\x16{V\x18\xcc\xb1\t\x8d\xf4\x30\x0e\xda\x91-\xe6\xce:\x1b\xf4\xd5\x37\x66q\x62\x45" "\x15\xce\x10\x11\xd7Lv\x99\x02\x84\xc2\x12\xd6N\x34\xe8j\x36\x82 \x07\x1e\xfd\x02`r\x90\x34\x88n\xba$\x92(j\xdeH\x17,\xfb" "\xee\xfd\xa1\x66\xaeR\xdd\x95\xa4~\xa6\x98\x35\xa2\xef\xc3\xecJ\xcc\xd4\xc6\x82\x05\xef\x0b\x02\xb9\xae\xe4<\xe7\x1fgJ\x92\n\xbe\xc5rL" "J\xb9\xc7*\xf3\xfc\x0b\xee-\x9e\x0c\xf5\x34\x96'\x43\x9b\x93\x95\x63\x9b\x9bhx\x93\x14\x7f\xa0\x02\xe4\x0e\xec.#\xfc{\x61`\xee\xdc" "\xba\x1c\xe0\xab\x17$\xe7\x07\xd2\xf9\x86\x89W\xd6\xe9<\x1c#\x63\x63" "~Y\xd8\xff\x88J\x65\x7f\xa6\xe9\xf7~\x92\xff\xc2\xee\x36[y\xeb\x34^\x17\xb6V\xd9\xee\x63\\JhMZ\xa1\xbdj\xc2\xda\x91\xd4" "pp\x05\x37%\x45\x04\x66\xd2\x45\x35\xf9\x1d[\x92\xa5|J\xdf\xf8\x06\x88\x1a}\x81\x16\\\xc5\xa8k\x08\xac\x1a\x14\x65s*\x42\x1b+" "R\xde\x1a#\xf3/\x33J\x99\xe2\xe7\x8a\xf6\xee\xc3\x46+\xb9\xc5\xdf\x62\xbf.\xa1\x39\"o\xf7\x11\x31\x42\xf8\x9a\x11\xa3\x8d\x66\xa2\x05\xb3" "\xdd\xc7\x12\x01\xa1%\xb8p\x8a\xabOm\xc4Ph\xa1\x35\xb7\x07\xe1\xd1%\xd8h\x39\xc3n\x15\xd1\xc8L\x45\x8do,\xdf\x11\xd5\x61k" "m{\x10\xed\xbdi\\\x1b\x0b\x00\"\xca|\xa1\x85\x85:y\x0b\x9aS\xf6\xf6\x00\xdb\x45\x08\xd7\xf8\x11,\xb9\x16\x9a+\xa3\xd0\xea\x84\xed" "\x41\x92\xc3\xd9\x11UN\x38\x98\x93+pt*\x65t\xa6\xac\xf8\xde\x1e\xa0\xd8\xde\x1e\x61_\x03\xa3\xae[\xb0\xe1\xe5\xed\x11\x46<\x8c\xfa" "\xde\xda\xda\x06Q\xed\x32\x1a\x9a\x62ZGo{\xc4\x14\x93\xbe\x39\x88\xd1\x1e\xa1\xcdpns\xf1y\xc3\xa9\xab\xefl\x8d\xbd\xa8Z`\x84" "\xb7\xbfq\xe7SUO-T\xd1\xa6\x92\xea\x15\xf3\x42\x0e;\xab\x1b\xb5j)\xe5\xa3\x8b>\x1c\xf6\xe4\xd8\xf3\x45t\x37\x41\xc0\x87\xad\x94" "x{\xd2\xfcG\x1bTU\x11\xc3S\x66\x62L\x02\x66\xe7\x0eSM\xaex\x87\xaa\xa2\xc3!\xcd\x1a\xd9\x05\xfd\x0f\x96_\xa0\xf9p\x1b\xd1" "\xbc\x34\x33>;\tO\xd7\xae\x92\xedmt_\x91\x96\xb5\x18\xe1\xea\x86\x87/\xc8Jv\xd5\xab\xaa\xba\xfa\xd4\xfa\x61\xee\x13\xc3\xa6zl" "@\xae\xc0\xf5\x85S\x97\xb6\x0e\xf9-[v\xa3\x9c\x93\x1bg<\xd8\xd3\rZ\xcey\x17\x1b\xfc\xb9'\r_k\xe1\x97\xf4o\xe1\x95\xa0" "j\xec\xd4\xab\xe1\xa5`\x1bJ\x63\xb6\r\xa5*\xfc$\xe6j\x84~<\?v\x62\x1d\xf4Vw>\x08\?\xeb\x08\x96!\xaaxJ\xe6\x9d" "\x98\xdf\x11\xf3\"G\xae\x9d\x9e\xcc\x66\x16\xdc\x0cO\x1e\xd0\x81\x85\xd2XW\xc5LY\xf3\xdcL\x7f\xac\x62\x66\xdb\xda\x8a*\xf1\n\xcbL" "\x93&\x92\x18k\x34\x84\xd6\x7f\x32\xc2\x07\x43L\xeb\x85\x18\xe3\xcf\x00}HQ\x36\xdf\xabl\x92\xaf$/\xad\xf3\x45N\x9cp\x89\x14\xb3" "[#\xf1\xc0\x30\x14\xa1\x9c\xa1\x8f\xa9&\?\xe2\xb3\xc6<\xb1\xb2\x02~=h\xefl\xef\\[uw\?<\xf6\x85\x39\x06\x33\xd1X\x12" "\xd3\x16Y\n\x97\xbc\x8e\xd5\x8bS\x9f\xb4\x8d=\x41}\xbe\xfc.\x1f\xb4\xdd\x64\x8d&;\x16O^\xc3\x1f&\x8cu\x80\x8c\xba\x15\xe2 " "S\x98\xff\x10\xf3\x87)i\x93KJ\x1e\x0f\xf6\x9c\xba\xa5\x04\xb3\x34V\x64\x1b\xb3\x07\x1e\xdc\xf8\xfb'&\\\xc4\xc5\xdc\x32\xf5m\xba{" "{\xc2\xf2\xe6\xc4\xbf\x8aV\x87q\xe7=\xc7\xa4\xb8\xf0tN\"\xeb\x63\xd8JXh\x80\xd7%gx\xd1\xceL\xdf/\xdc\x14\xab\r\x9a" "\xbf\?\x15\xc4H\xf0\x03\xff~\x19nk\xdb\x13\xcf\xd5\xba\x14\x12\x95\xc1\t&\xe8\x8d\xf2r $\x9e\xa9\x64:\x8f\xf9\"y\xa6\x15\xea" "\xdd\xec\xddR!\xd1\xa2\xdbs\x12y\x8f\xf5\xf4\t\x16-\x1b\xe5%\x95\x9e\x15\xd4}\xd7\xe9\xa9\x8eY\x7f\xa1\xed\x1f\xa7\xec:\xa3\xfc\x06" "\xcb\n\xa0\n\xc7\xd9g|\x91Y;\x9d`\xe2\xc6\xe8\x05\x0cLl/\xbc\xa3\x30\x37\xec\x07\xbc\xec\x80J\n\xc3\xb8\xfa\x9d\xe6\x46~L" ">\x96\xef\xff\x32\xf3\xc8\x81\xff\xf8\xc6W[\xd7\x39~\x33\x13|\x8f\x9d\xbbW:\xe1\x95N\xf9\xd0\xe7|Ns\xbc\x8aX\x9b\x64\x0c\x8f" "si}\?S\xa7\xa3\xcc\xdc\x0f\x30;G" "\x34\xe7in\x91^\xe2\xfd\xc0\xde\x8e\xc2\x17<\xb9\xf8\xb5\xe3\xcc\xfe\xb6\xc7\x9f\xe9\x15\x9c\xe8\x44\x9b\xb9\xbb\x19\x0b\x9a\xeaz\x98|\xe3O" "\xbe\xdfj\x61\xcbZ*\xfe\x64*N\x90\x43\xe0\xc8\"\\\xe1\x1d\x8a\xd7\xc7$>\xd7\x38\xad\x87\x1b\x8c\x0b\xa9\x1a\xc7\xaf\x05\xaf`\x92\x03" "\xbc\x19\xc9\x31\xea\x07\x84\x9e\x36z\x95\xcdV\xee\t\xf6\xf7\x32J\x45\xe3\x19_T\xd4\x1eg\x66\x17\xa9\x01_\x33\xe1\x80\xe7`\xf5\x93\x8c" "P\x03\xa0[\xa9\xe4\x45\xcd\x87N//l'\x8a'\xaf\xbc\xb3})\xc4\xdc\xacI\xd4S\t\xfa\x02\x42\x64=\xb6\xf3\x84\xc8-pP" "\x13\x9e\x14I<)\x04\xf0\x16\xa2\xedw\x82\xe1\x19\xa3\xe6#\x36T\x44y\x42\xa4\x37\xc8h\xe9\xddm|\xbbI\xfb\xb8\x1c\xf8\x44\n\xbb" "_N\xac\x03\x13\xd3\x43\xa3\x88i\xae=\xdb\xd3\xdf\xc5R;G\xb9\x82\x86\xd7_|&\x65\xfb\x95S\x39\x80n\xa4\x9b\xb6\x99jU\xbe" "\xfd\xef\x31\x31\x92\x8b\xaf\xf4q\xfb\xef\xe1\xe8~\xa4\xa7\xdc\xcb\xf3\x30Oz\x32\xfc\xfd\xc9\xbb\x89\x45\x35[\xfa\xba\x08mj\x42\x38\x9f\xc0" "\xd9\x44L\x0bz \x44\xb5y\x1a\xd5\x96X\xe4.&\xc9W\xe6T\xba\xa2X\xaf\xb1=\x95\xbf\x46\xcc]\x37\x31\xa8%J\xb7\xbb^\xb0" "St\xca\xc7t\n\xe7\xe2\xed\xa9nh\x83\x16\x06\xcdhmY\xf1\x02#\xbb\x42\x0b\xdb\xb6\xbd`Mt\xc1\x0b\xbf\xc0J\x08\xe1\xe9\xa1" "\xe6l\x1b\xb1\x17\x65^'\x42\xb4y\x94|nj\x46gW\xd9\x9fu&\xf1M\x63G%\xd3\x99\xff\x64\xd8\xd5MH\x7f\xb7%\xa8\xde" "\x0c\x44\x1bI\x18\x38\xd9mR\x33}\xb1\x9b\xb8\x90\x46@t\xb6\x8d\x90\x89.\xb0*Vh!\x0e\x8c\xd1y%;j\x63\xab>Uh" "L\xf7\xf6\x11\xbd\x32S\x37\xafP\xf5\xae\x13\x11\xa8\xc4\xbc\xef:uj\x1fO\xeb\x42\xaa)'\x86\x80\xc4\x1co\x9c~\x88\x65\xf7\x05\x1f" "\xe4\x05_\x30\x65\x32m`\x0e\x63{\x91X\xf8;\xa1\xf9\xb9\tQ\x44_`\xca@\xb8\xb5w\xea\x02\xfe\x06\xc2\xfb'\xa7\xba\xb1\xf3\xfa" "X\xc8(\x99\xb5\xd4\x94\xf6\x0f;_\xaa\xd2\xe7:\xdcg\xb7\xe5\xdf\x65M\xaa\xb2\x64y\x02\x65Ql\x94+\x10US\x99]\x8e\x32\xa6" "(\x95\xf6\x94\xcb\xcc\xf5\xba\xa0\x85M\xd1\x32s\x8cR\x1d\x44Q~\x94Y\xe3\x96\x31\xa1\xe5\xdb\xb8\x18Y,\x9b\x89\x94PS\xc3\x98\xa2" "K\x62\n\xa5\xba\x99\xcdU\x66~\xbe\x64\xe6\xe0.\xb4\xf5\xb8T\x33\x37Y\xa3\x9by\x9a\x9d\x44^\x32V\x0c\xa6\x9a\x45\x37\xb1 \x0e\x66" "\xb7\xc5\x8e\xbc*\x0e \x98\x89\xc6\x14\xccw\x37\x33w\x63\xa8\x93\xec/\x31:L\xf3;\x0c\xfe\xbe\xd3\xca\xae }\\\xb2\x46-\x63\x0b" "T\xa1\x45\xe0\x13\x16\xf7\xc9k\xd0\x06R\x85\x18\x99(\x63\x1c\xd2\x98\r\x8b\x8b\xf2\xb4[\x91\xc8\xaf\x65\x44_\x10Z\x44\x11\x61\xe1V\x9b" "\x9e\xb6Y\xa5\xab\xe4\x0c\xcf*\xba\x38\xd3PJ\xb6\x30HT\xf9\x03\xbc\xe6\xa7\xb5\x8e\xd4\xf5\xccm\xe5\xe8v\x95^\xad\xb0\xce\x41\x14\xf2" "\x62\x99MH\xa5v\xcf\xcd\xd3\x44\xd5\x04\xfc\x1e;\xfd\xb2\x31\xc7\xbb-\xc7\xb9\x8e\x13K\x85\xc4\xb4\xf5U\xc2j\xcf\xa9.\x8e/\xb7\x61" "\xb3\xa7\x83\x44\x8b=\xf6\x1cv>\xf9\xac\xeb\x64\xf7\xbf\x9f\xa0G\xae\xe6\xce\xcd\xf1\x85,{\xa6\x80\xd3\x9d\xf0s\xe9\xd4\xc0\xfe\x87\xcdL" "\xf9\xd2\x39(\x66\x44\x35\x17\xf3py\xf4\xaf\x32'H\x64\xf2\xd8\xf6\x32\x33\xb2\xfcS\x93-\x41\x35\xb5\xf8\x1f_gj|\x8d\xf5\x64\xa6" "\xd4\t\xe7\xe9\x30S\x1f\xfc\xd1o\x64\x1c\xacx\x12\x62\xc0\xa6\xccjN\x19^#\x17`z\xc6\xa8\xf3\xe4h\xf7\x9a\x42\x37\x84\xa6T\xd2" "\x89m\x81\x87\x03\xcd\x15\x1c\x92L\xc5\xf9\x19\xf6\xa0\x83\x42\x81VN\x06\x8f;\x8f\x1fn\xed\x46\xcf\xb5j\xf2\x1d\x16S\xebh\x16\x17^" "@p \xae\xac{\t\xfc\x65H\x38\x30)\x37N)K\x63t\x46\xcb\x99\xab\xba;\xa2\x1b\xe1k\tss\x95]zp\x95\x85\xd9\x83" "\x9aw\xc3\xdc\xdcU\xc4R\x45]\xc3\xd0\xa2\x33s\xcdh\x14P\x9b\x8a\x9b^\x1a\xa8\xc9\x92\xcd\xcc\xa5\x9b\x7f\xd7\x15\x80\xa8\x80\xcb,\xbb" "\xcb\xd9\x92\xf9-\x03\xcc\n\xf9'X\x1c*\xcc\x12\xa9\xa2Yx\x39\xe1[\xa5\n\x33\x1bj\xd6\xc8&\xd9q\xb2\xff_\xf9]\x9e\xb1\"" "\xa9\xc0\xed\xc3\x18\x96\xcf\xd9\xba\xf8S\xf2\x66\xffn\x8ai}\x86\xc9\x46\xfb$m\xcc`\xae.\x9c\x7f\x87\x1a\xce\xec\xb7\xcc\xcc\xaes\xd5" "\xf8\xeb\rW\xd8\xb2Pj\x64\xb9\\\xd1\x95\xb4\xa4\xa3\x01o\x03\xd5N\x05\xd3\\\x46\xf6q\xcc,\xf1\x0c\xe6\xe4l\x84s\x16L\xe4q" "\x35\xe3\xcf\x33\xb8r\x9b\x62\x63\xc5\xcc\xc1#_\xc0\n\x82\xae)\xaf\x9c\xc9\xd0\?\x62\x62\xda\xca\xd1\xadt\xff\xcf\x10\xb4KL\x64\xfdJ" "x\xf2\xf0\xbbx\xc3\x16\x13\xa6\xc2J\xcfo\xfbo\xb8\x8a\xe6\xee\x07L(\x98\xd9\x07\xa7\xfc\xfa\x19\xae),\xbe;\xd9\xacS\x33\xaa\x9d" "\xa4+^Q\t\x8f\x19\xd3Q[n\xa0l\x0c/\xdf\x11\xe6\xc0T\xdc<\x8b\xefy\x32\x8c\xd3+\xd5\x93\x8f\xb7-\xca\xf3R\xf8\xd4s" "J\xd6L-\x9e\x87(t\xc0*p\xc9R.@\xbf\x93\x9d\xdb\xd8\"\xcd\xa3\x83\x97\x64\xdb\xf4\xa3\x88\xca\xb2\xf5\x66X\x05\x0b\x32\x8d\xac" "\x00*Q\x15\xa9\x8bYs\x65\xd7\x99\x9d\xe5\xa6\xeb\xd7\x19\xdd\xf2\xdb\xcd\xd3\xec\x10z\xe2J\x16\xb4j\"\x8a\xae\x9a_r\x43\x9c\xf1\xf8" "S\xff\xedV\xf5\x93\xbf\x64\xc8~\xb9\xc5\x8b\x42\xad\xa5\x94\x0e\x17\xe2r\xec(\r:\x1d\xdcx\x8e\xe0\x88\x84\xd2\x13\x8cm@\xa5|\x37" ">\xc2\x9b\xedw\x00g\x63\xe1\xc5h'\xa7\xc7\xd7[\xdd\xbf\xb4\xc6\xef\xdc\x06;\xa9\xcdQ\xbb\n\xa6\xf8\x85=\xf2}\x98\x1c\xb6\xa2)" "\xde\x06\xc4S\x15\x9e\xe1\x8cX\x41h\x64\xf7\x9c&\xe6\xcd\x45\xd9l\xbb\x91\x33*\xdc\x14Z\xb8}\x97W\x83\xc5+\xb7~\x16\x1e\xe0[" "\xe9\x61\xde\xc9\xda\xbc\x82\xa5\xe0\xc2[\xfc\xa8\x97\x1c\xe9\xa3\xa5N\x15S\xbe\x42\x14.U\xac\xac\xd8V\xf9>\x08\x17\xe9\xfa\x08[\xb6\x88" "\x42\x92W\xd9\xf0QJ\xe2\xb0\x11\\\xc5L\xb8\x10\xcd\xa1*\x9b\x80\xd5\xd0\x16\xa0\x08\xcd\xcd~[\x8d\x9a\x1f\xc9\xb6\x8e)oU\x93p" "s\x89U-\xa2\x1ep=\xd1\xe7sT\xe8q\xec\xbf\x8aYR!\xfarU>\xb2*\x1f\x99R\xa7!\xccOG\xd4\x65k\xe7\x8cX" "\xc4*|\xc2\xb9\x62\x8c\x04+\xe5I'_\xf8=>\xbaj\"\xfd\n\xf9\xdb\xf7\xae+\xb9\xd2L\x99\xd3\xa1\xd0\x96\xa4\nW\x1f\x92\xbf" "\xfd\xfc\xc9\xb6\xee\x0c\x8b\x0fX\xf3\xb3\xad\xb2\xb2\xa9\xb2\x46Q\xb2\xb1P\x85;\x84\xd0\xc2\x85\x08\xfb\x96\\u,\xc9\x32\xb2mT\x87{" "\xa2\x10OK\x89\r%\xd5|\x01\xd1=\xa8#\xb2\x92\xf2\x0e\x34\x9f{\xb9\xa6\xbd\x36\x87\xc7\xea\x88^.\xb4\x18\xdf\xc2\xdc!\x9e\n\x14" "z\x88uv\x17\xea\xe1y.*\xf0#\x0c\xd7*\xb1\x1c\xd9L\x8d\xcdj\xae$\xa6\xe2#\xfe\xd9\x05O\x63\xde\xcb\xca\xa1\xf3wq\x91" "\x99\xe8\xdc\xa8\x89\x05\x03\x62\xa2\x7f^\x0f\xeb\x13\x10\x05k\x9d#\xf7u\xe6\xaa:\x9b\xd7u\x0e\xcf\xd7\xe1W\xa5,\x93\x9f\xa0/\xeb\x12" "\x13\x63\xc6u\x96\x87\xf5\x08\x1d\xe5zt\x8aSp\xa4\xba\x8eh\xd2\xca.\xf9\x03V\xf9\xfd:\xee\x85\x0f\xb9\xce\x89\xbc\xba'\xa1\xf0w" "]\x8f\xf6\xf9-&;\x1c\xbe\x8c\xd9\x1f~\xaf\xc3\xdcL\xaa\\\x1d\xde\xb7`\x64~,S\xba\xf7\x65Q\xde\x11Wx\x63\xa0\x16\xb8\x8d" "\xf8\xa2\x0f\x96\x1e\xc2\xf2i\x34}q\xa5\xef\x9c\x05\x66\x12\x85&{\x9d\xc3v\x9e\xa7\xebX\xc2-\x44\x9d\xac\xf4\x84\x86\x7f\xfe\xb6\xee\x0f" "\x86-\xd7:\x16Y\x08\x87\xb8\x0c\x04\\S\"\x07\xc2\xd5^\x88\xf1\xa5:|V\x84\xcd=\xf0\x11O#\xfd\xa7\x39!z/\x82\xcc\x42\xf1\t\xae\x1b\xef~\x9c~\xd7Z\xbb\xae\n\x1cUk\xb1/\xda\x62\xf6oi\xc6\xe3\x17" "\x0f\xf2`\x62K-\xee;\xda\x9d\x80\x89\xaf\"\xfb\x01\x14Y\xb0:\x7f\x63k\x1d\x9aT\x1d\x8e\xcevl\x10\xfc\x85\x03\xa7\xa2\xfd\x03\xd1" "\x06t\x98W\x94\xec{\xa9\xc8>m\x87M\xbc\x12\xd3\x19!\xda\x1c\x81}\x87\xee\xa4N\xba\xa9\xaf\x8a\x9f\xe4\x17\x08\x83X\xc9\x8c\xa3\x62" "<\xda\x63\x8b\t\xd1\xe0\x7fR\xb2\xfa\xa7\x18\xe4\xff\x05\xd5\x65z\x00\x1di\xf7Iv\xb0`\x99rJ\xe2\xde\xd9\xffPr$\xa6\x13T" "N\x92\x87\x0b\x8a\xb7\xe0y\x96\xe4\xd9l\xa1\x36\xe5\xb5\x93>\x08\x15\xe9\x93RQ'&\xc1\xf7\xd0I\xefVn\x15}\x19\x8a\x98\xc4\x05" "\rV\x8e\x8a\x1c\xae\xe8\xd8\xa2\xc4~\xbe{v\"M\xb4\x8d\xe0T|\x0f;{\x36\xec\xd4\x82\x8bGh]>\xd2\x80'\xb3\x80G\xe1" "\x98\x9fO\xa8\xbf/u\x0f\x98)\xbf\xed\x9c\x95\xc9+r\x06.\x99:\xabG'\xd6w\x14\x31\x1d\xfe\xed\xe8&\xef\xfb\t\xcd\xc9\x0e\x1d" "R\x1d\xfan\x95\x61\xb7\xc2\xfez\x07\xcb\xd0\x1a=\xf1\x44\xf4<\x42\x0b@z\x9b/\xfe\x62X\x10\x95\xe9\xb7l\xadJ!\x9a\xc4\x8e\xe7" "{\xdb&\x95\xb1s\xd0V\xe5\xf4\xaeT[y\xaa\x88\x16\x9cv<\x89U\x63\x0e\xd4u\xcc\xf9\xf6\xd8M\xe8\xd8\xb2*\xe9!\xec\xef+" "\"\x8b\x41\x38\xc7;\xe7H\x65\x87\x36\x66\x87#x\x9d\xe8\x0c\xc5\x84N\xafN\xd4\x39\x05\x61)v\x10\x8d*\x44k\xd5\xa1\xcf\xa2\xc3\x66" "S\xe9\xb7\xe9\x8f\x8fuT\x8d\xf1\xf3\x11\xa6\xd6\x43\x9b|@\xbc;sz\x89\xb7\xf1\xfb\x07\x04X\x9b\xa6;\x8d\xac\xae\\\xf3W\x01\x91" "\xbe\x63j\xc1\xc3\x0c\x11|\x38P\xfa\x89m\x9dhh\x97\?X\xcf\x0c\x9a\xef\xe1\x0e\xad\xf3'\xfaVl\xa6\xb1U\x33\xf1\xf6\x32\x82\xbd" "j\xda\xe6\xda\x93\x45\xf7\xdf\x99\x9e\x04'\xe9\x8d\xfc\x39\x65;\xd8\x18\x42\x38\xe4]!\x98\xaa\x83\xf5\x1c\x84s~o\xfe\xe0\xfc]\xafi" "\x7fthgt\xbc\xa8\xd1\x44R\xea\x30\xf5\r\xef\x06U\x0bk\xa0\x18\x11\x0c\x1d\xcc\xf7\x31\x62\xff\x9d\?\xed\x01\xd3\x00\xa8\x8d\xb1%\x36" "\xb5\xd5\xc1g\x92\x9a\x61\x65\x92j\xe3\x1b\x46\x13\xa8\xa6+\x9f\xfe}\xa6k\xcf\xa0\xbf\x46\x8d#l\xa6uK\xc1r\xe9Z\xb4\x9e\x63\xb6" "\x90i\x7f\xceP\xd5\x92\xc7kl&\xad\xda\x06\xcc\x34\xe2\xf2(\xee.\x0e\xb4\xf4\xc9\xf2u\xf0\x92\xfa\xe5\x85\x9e\x04\x63\x82\x9d\xf4\x0e\x98" "J\x98\xa7*\xbc\xe7\xe7,\xb3XZ\xd0\xc8\xd1\x9fN\xf2\x62\xe5\xbe\xfb\x37\x9c\r\xf1\xfd@\xd3\x1d'\xe0[\xea\xd2\r\xa6\xfc\xf3\x85\xab" "\x16\xcf~(\xfa\xa1\x9d\xd8\x0b\x0c\xf6\xeb\xb2\x61\x13>\x98\x37\x82\xd7\xf4\x93\x62\xdb\xa4\xc7\xec_g\xb7Ks\xa9\x8b)\x95\xfb\xee\x9f\x8b" "\xa8\x8b\xd9;\xca)\x88\x10\xa9nP)\x82\xa8\xfe\xba\xfe\x04\xf4\xe5(\x35\x46\x17\xcdM\x97\x9e\x1d\xe1NLY\x8e\x06w\xd9\x1dQ\xc2" "\x01\xed^\x9e\r]G\xf6\xc9\xc3\x0b\xed\x85.}>\xdd\?/O\x97\xfe\x9c.\xc3\x97\x94:\xc5.\xc7\x9b\x84\xcd\xd5\xc5\x92\xf0\x42\x04" "uv\xf9>t\xab\xc3 \xff\xcc\xcc\xdf\xc5\xfcm!\xea\xfdn\xb0\xb9\x92\xe2\x8b\x05\xec\xa1-\x66!\x9ci\xdd`\x97q\xb2\t\xd7\r" "\xc6\xd2\xbb\x42G\xb1\x1b\x1eg\xd4\xd1\xc0\xc7\x65\x10O\x17kw\tO\xaf@\x38\x44\x94:\x1a\xb7\xe4\xb7R\x17Q\x97.\"\xa5n\x1c" "{R\x87\x96:\x8c\xba\x0c\xa4\xe9\xd2\xc0SJ\xef\x05SUU{u\xc6O\xf7\xd8)\\\x34[#\x43\x38\x9dk\xe4\xe0U\xed\xcf\xa9" "\xc3\x63:UI\xf2\x8f\xed\x90i\xc7\xe4K:\xee\xa1\xb1\x81\x87_\xc5\x61\xa9\x08\xfe\xfbm]\xf6\xfc\xbfg\x9d\x97\x9d\xe1\xf2\x92m\x92" "j\xf1\xc9+kk\xd3\xe6O\x1cg\x36\xcdW\xbd\x85\x96\xba\xc6\xbb\xe1w\xc9\xa9K\xc2\xf8\xb9\x35\\\xe5@[\x82+$\xa0\xdf\x89\xa7" "\x1b}\x1e]\xac\x07\"\x84\x13\xaaK'\x94\x10\xe5\x82~\x8e.]H]V\xd0J]\xd3\x62\xf3\xe3Z\xd4Z\x33n\xcc\xb4N-<" "\x7frM\xdb\x1b\x66\x15\xcc\x87\x37\xfe\x39\xb7\xbaX\x82Gh\xb3X\x8c\x61/\xcbv\xa8\xcb\x86\xaf\x8bM\xde\x94]'\x1dN*r\x84" "\xbc\xcbQ\x93.\xfd+]\xcf\x83\xba\x80\x97\xe4\x62\x0c\x9bQ\xe3\x98@\xd7\xdf\x01\x9b\x12\x65Pi`\x9a\x9fj)\xe9j\xeb\xfe\xc7\xd5" "\xa6Zz\x8f\xfe\x1b\x8c\xa0t\x39\x1a\xa2<\xa8\xa7\xe2/\xe4\x95\xf8;\x9f\xde\xf6\xf7\xa7\x33=\xd7\xa2\xe7\xf4\xe4\x87(\xa9\x9b\xde\x13\x9a" "\x88.\x87'$\x15\xf8\xb4\x88\x1d\xee\x62\x9d!\x61&\x43\x36\x9c\x7f\x43\xcd]\xec\xd3&\x64\xadH\x17`\xf7\xcf\x05\xd8\x65\x8b\xd0\x65\x1b" "\xa0\x34\x9f*n\x31i_:\xff\x06\xd4T;\xc8\x92\x98\x99i\xd4\x1d\x0e\xc7\xf6r{\x98%\"\xc4\xa0oOZ\xf9\x38w\xc6\x02\xdc" "\x0b\x32]\x10v\x45OgK~\xcd\x31\xcdM\xb5\x37\xb0Zq\x06\x93W\x9a\x66\xaa\x31%{\x1cj\xed\x31\xb4\xa4\xa7\xbd\x9e\xc9'V" "\x1e\x30-\xcc^\x1fh\xc9Q\xe1O\x9b\x81\x93W\xf2\x33\x98\xce\xe8\xd7\xec\xe9\"\x19\xc5\x33\xac\xef\x63Z\xd2\xfaJ\x35t\x13\x94\xea\x97" "\x81q\xe2\x1a: \xa2\xe1\xe1\x0f'\x8e\x8b\x96\xbd\x06Ov\xe0i\x13,\x93\xcd\xefh\xdd\xa3K\xae\x87\xc9\x11\x42>\xb6\xf0\xf7g\x16" "\xad^]\x0b\xf6y\x1aY\xaa\x85\xf3\x35\x87\xecU\x13\x33\x95\xe1\xff\xaayr\xa9\xa8\xb6#n\x92\xa6\xac\xd2\xbf\xe0\xa9\x83\t\xa8\x42\x38" "s\x94\xec\xe3\xa8\x18\x95^\x0e\xb4\xb8\xf2\x9ej\x36\x41\xdb\x18\xacW\xd1\xb8\xe6Zz~\xbe~!\xe6.\xa9\xf8\xea<\xb8\x37\xff\x81\xf0" "\xe0\x31\x45\x8b\xb6mv\x0fz\xd8o\xc0\x98~\xdd\x36'\x17\xf2\xadp\x90\xb4'/^\xd9\xd7}\xd2\x7f\xbe\x03\xdb\xd2\xd1\x34\xe9\xc4\xfc" "\xae\xce\x0e\xb4\xbf\xcfN\xc9Wr\xac\?\xce\xe7\xa8}\x80\xb6t\xdb\x9es\xf3\x85\x08\xa1S\xb2|\x99X\xbd\r\xbe\xb3\xae\xb1'!\"" "\x7f\xbb\xe2\x17\xd7\xd7\xe4\x1a\xc4\x00\x90\x32\xa8\x9eI\xa5\x8a\x05\xd5q\xe0\x65~ \xd2\x91\xd0\xe7\xb0X\x1fk_\n\xd1s\xee\xeb\x46\xae" "\x88\t\xe8\xd3\xe6\xe9\x33\xab(\xe9\xef\xed\xfb\r\x07\x95&V\xefQ\x91\x87\\G\xa7\x99\xeb\x08(\xa7\x61\xf7\x1f\xb6!W\xed\x83\xbd\x9d" ">\xbb]}\x86\x1f\xf5\xb1\xbf\x9e\xb2\x02\x36\x8e\x83\xe5\x63\x62s\x1eU\xe3\xd1.o\xca\xe6\x64\n\xd1\xe7\xed\xdb\x0e\x84\xe5\xa8Z\x39\xd4" "\xeaO\x07\x1a\r\xd7>\x66\x98\n\x1f\x98\x12\xb0\x96\x94Q\x8e+\xc8\xedu\x9e\x88\\\x1d\x8b\x19\x8a\xe6\x9b\x32\x9b\xc8\x31{\x8a\xe9\x07\xb6" "\xa1\xac\x10\xf6T\x9f\xc1\xa3}\xdaU\xca\x34\xf9\x44\xf4\xe4Z\xf0[\xcbGg<\xbf\xf7\xf7\x8bM\xcd\x94s\xa7Z-\xd7\x63h\xa8\x65" "\x84x\x97\xb4\xff\x94Ink\xe6\xcd\x30=vr\xe1T\xef\xa6-\xee\xadZ\x8d\xbcq\xca\x7f\xb6\xb1}:\xb3\xfb\x1c\xec\xeb\x87\xe5\x19" "\xe6\xfc\x8ax^'GNv\x94!.R\x11\x41\x11&\"X_\x45\xcc\xa4\x35\x91M\xb6\x89\x18\xe1V\x91\x41\xc8},\xc9*\xbc\x42" "\x61\xe2\xa0\x62\xffoP\xb1OO\xb8\xb0\xa7\x17y\xb8\xa2\xf6O\x92\x92uu\x1f\x9b\xd7\x18mYV\xbc!i\xc0$\xdb\x07\xd5\xefT" "\x93_\xfci\x1a^\xba\xdfP\xe3\x03\x61:M\?|\x46\x89\xc7\x02\xae\x42X\x95}\x06\x92\xf5\xc3u[\xce\x15\xc1\xf1\xd7\xf7\xd4\xc6\xfe" "\x32\xc6\xdf}\xcf\x45\xe9\x1c\xb8\x18\xf6\x8e<\xcd\x45\x8b\xd0\x85Q\x91\xb6J\?\xaa\xde:\xd5\xd2\x65\xfe\x16-\xcaN \xa2rV\x62\x1b" "\x43\x11\xfd[\xf0\xdf\xf7\xb1w\x83\xb0[\x46.\xa1\xd9\xd7g\xdf\xbcO\x97\x66\x1f;!\x0b\xdf\xf8\xf9\xdbm\x34\x7f\x8fJ\xfc\x14\xc1\x35" "}z;\x95\xf2)\xfd\xb6\xd4\xd2\xef\xce\xd6NMT\x84\x94\xf7\x31\x93\xdf\xe8o^\x45\xc4\xc9\xf5\xe5\xe7\xe0j\xef\xfc\x1b\xb7\xec\x63\x9f" "\x19\xe3\x9f\xdbG\x35\xcfo\"\xa6\xc9\xbd\xf6H\x0f\x13\xfdR\xeb\xae\x93~\x18\x11\xc7\xce\x83R\xa6\xdaZ\xcc\xf3g\xdd\x0f\x1c\x1e\x35;" "\xb6\xedz\xa9\x11M\xba\x8e\x31&\xc9\x99V\xdcz\x65\xaa\x9a\xe4\xb1\x65.\xd5JO\xa9\xc8\xea@\xc5\xea\r\x96\x92\x37\x8d.\x19\x13K" "\xfe\xa0\x63\xb6\xc5&\xa6\x46\xa0ik]\x1f#\x9e\xec\xfc@\xfc^\x8bn\x33R\xe1\x85\xac\x93\xe4\x18V\xad\x81\x88\xa8\xe3>V\xc7\x37" "\xfe\xe7y\xbfl\xf6[\xcf\xb5\xbf\x14\xfb\x8a\xbf\x16\xbf\x88\x37\xeaG\x9b#\xa7\x86\xd0\xf9w\xb6(\xa7\xd1\x9eI\xb3\xc7\xbb\x8e\x8f\xf0V" "\xbdj\x89\x8f\xdb\xf1\xfd\x03\xc4\x33\x94\x92\xf8\xee\x8e\xbc\x8f\xef[\x14\xb7:\xadm\x89\xc2\x17\x0f\xd1>\xc6\xf7\x85\xf4\xb7\xf7\x0f\xf1\x90g" "\x1c\xa1\xe8\xf9\x9d\xd0\x05\xde\xc7:\x1d\xc2\xf9\x88|wz\x32\xc7_\x1drH\xf2\x82\xac\xfd\xe3\xe5PJ\xb3\xbf\t\xf6\x9b\xfb\xb6\xfa:" "o\x1d\x81M}v\xd2\xfa\xf1\xfe\x82\xc4S'G\xa5\xf8\xaf\xd1\xc6~\x8c\x46\xcf\xad\"\xfa\xcd\x88\x18\xb1\xb4'\x19\xbc\x11\x86\xd9\xf4\x93" "\x06ZN\x31\xc7\x39\x35\xad\x8f-\xde\x8c\xc1\xe9\x80~.\xd3\xd2\xf9-\xa6]\x15\x0e~q \x62\xc9\x02\x88,\xfe\xc9\x65\x9e\x1d\xb5~" "r\xf5)\xa6P\xbc\xe5\x65\x31\x1a\xd7O\x9a\xfc\x14!\x91\xc2\xb9\xb7\xa1\x92\xe5\xa4\xdc\xa6\x0f\xda\xc2[\xf2\xfc\xa6\xfb\x13\x64QR\x93\x7f" "\x8d\x38w\xc7!\x8d~\x82)\x1e\x03\xbap\x06\xec\xd9\r\xd8\t\x1c`;\xc6\xfd\x80\xa3\x31\x03Z(J\x96l\x9d\x97()\x18V\x06" "X\x41^\x0e`\x00J\x19\?\x65\xe9*\x18p~\xa2\x92\xd5\xd0\x80\x93\x8e\x06\x1c\xaa\x1d`\xb5o\x63\x9c\x1d\xd1+=\x08\xaf\x37`\x93" "\xbf\xb2\x1d\x33\x84_/\xd1%\xee\x86\x13@\x07\xd1u\xcd\xa9\x0e\x02\x38\x1eT\x0b\xbb\xaf\xa9\x86\x31\xa8\x01'\x87\x0e\xe2\xe3\x12\x08\x63t" "\xc0\x88\xfc\x41R\xef\x39i\x03\xaaH\xff\xd2\x80\xd1\xec\x1a\x38l\x91\x99]h\xfb\xa1\xf3\xaf\?\xf6\x90\x1c=:\xff\x8a\xf7\xc8\"++" "\x34\xbd\x46\xc1\xc6J\xd8\x08\x0b\x86\x1a\x0f>\x95\?\xa3\xf6\xec\xba\xc7\x01\x8a\xe0#Vs\xdck\xc3\xf9\xbb\xed@|x\xc5\xde\xcd\xfb\xc7" "\xf0\xcc\xf2\xa7\x0f-\xbe\xfen\xec.^\x39\x19\xeb\x95\x13\x33^\x83\x8b'\xf0\xfe-\x98n\x0e\xc4\xdf\x9f\x8b\xa0\x33\xc6\x81\x11\xce\x11\xac" "\x8e\xc9\x02\xad'\x15\xe3\x66\x35lVu\xef\xec\x8f\xb5\x1f\x0eON\x34\xf2\xff\xf4\x36\x1e\xed\x7fWm\xac\xc3`\x87\xff\xff\x63\xe5.x" "\xfd\xee\x37\x00\xf1\xe0\x06\xe4\x00\x96\xb9p\xd1\xef\x9e\x1a\x9f\x41\xb4\xa4\xc3\xa9\xf6\xfb\x37\x38=\xb1$>\xb4]\x33X|\xb8\x16\x1e\x8d\xfe" ">\x9b\x83\xc8\xfd\xca\xbf\xc8\xaf\x37\xf6\x95\xdf\x18\xb4\xfd\xf6\x0b\xe3\xefM\x37-@\xe3\xff\x16\x9c\x14\x9d\xc1\xf2\x8cY^\x35\xd6-*\xc6" "\x8f\x99\x10\xa3\x86\xaa%\xdd#\x8e\xc5\xbf\xd1\xb0~\xfbO\xbc\xd9\x9bty\x9d,io\x8c\xc0\x7f\xe3\x1c\x9a\xb7\x38\x87\x13\xd0\x90{\x63" "\xc3\xf4\x46o\xc4\x1b\xe7~\xbc%-\xab\xc5\xc6\x0c\x0b\x1c\x63y\x35\xa1\xed\t\xba\xe7\xae\x87\xc2\xad\xb5\xa3\x63\x8e\xcb\x8fi=\x8d\xa3\xc6" "\x63\xd4\xc2O\xb1\xd4\xe9~\x1cW\xee\xc2\xcb\x1d;r\xe3\xf8)\x13\xf6\xb2\xf4\xdb\x8fY\x89\x8f\xb1o\x81\xb0\xdd\x05m_\xb1\xfd$\xb0" "\xfd\x85\xf7S\x96\x9a)=\xb9S\x1a\xd5Sv\xa9\xa7X:L\x88n\xfb\x94# S\xb6\x33S\x8e\x8fL\xd9\xde|\x32\xf8\xe4\x93\x33" "/\?\x39\x89\xe3\x93\xd3\xc2\?%\x87\x82ht>\xb1\x93\xef~\xc1\xce\xa4N\x97\x8e\x06R\xd6.\xa1!|i\xc1\x9aq\xc1\xbc\xb1`" "\x65\xa0\xd4\x89Y\x88:_\xfcn\xab\xe4\xad\x93\xddn\x13\x11\xa9\xae\"\x1b\xd8\x05\x87U\x94\x7f\xbe\x81\x05\xfd\x1e\xcat!.\xd1\xfe\x95" "\xb0\xf2\xbd\x88\x18PTrp{\x11\xfc\xac\x9d\x0c\xecQ\x31\xb6\x05\xfd\x44\xb4\xfd\xc6\x8c\x0c\xd3_`g\x91\xfd\x82N\xb9\x45\x98\xc1\xdd" "\x85\xb9\x9a\x13\xce\xd8T\xe3#\x8b\xc8Y\xb2\"\xde\x80\xddGpH\xa2\xad_\x84\x1b\xdcgt\xd5\n\?\xee<-#\x0cN-\"\xdb" "\x9d\x41\x08\xff\x9a\x32\xcc\xf5\xc2L%\xd5JR\x65_\xba\xa6\x91\xbc-\xa4~\xf4\x89w\x85z\x97\x1e(j\xfe\xe6\x44;x\x8ftH" ".\xe2\xd3\x99\xbe/\x84\xcc,\xe2\x33\xdc_\x8c\x19q\x0b\x8e~/\xd8\n,\xe8@T\xfe\xcd\x63X\xd0\xed\xb7\x88\x97\xaf:>\xf7\xa7" "\xe9\xe2\x15\xb3RX\xfe\xc4\x01\xc9\xeb\x8f<\xaf\xdd\xb2\xdf\x35\xdd\x82J[u\xa3r\xa0\xf9\xfd&\x85\x12x\xf3\xe5\x64\xc0\xee\"\x41\x7f" "\x65\xc1\xe0\x1b\x65\xf0\xb0J\xc6\xc7\xae\x61\x8d\x38\x13\xd3\x9f\x8b\xc8{\xc1\xda\x36\xfb%\xcb\xe9\xd2\xf6&{\x81\x08\xd7\x81\xd2\?\x65\xe9Y" "\x62#\xf8=\xd7\x9e\xf2\x9d\xae\xf7\?\x9c\xd7\xfd\xc3 \xbc-K\xd1\xf6wu\x97\x1c]\x04gMj\x0f \x0c\x93m\x90\xf9\x06\xd3\x01" "\x9f-#\x13\xb6\x01\x06\\\xb7\xf4\x8blijl\x03\xdb\xf7G\x88Zk\xcb\xea\x42\xd8\x02/*z\x41T\xfa[\xfa\x1c\xb7\x34\x42\xb6" "\xc1\xe8\xf2\xe0v\x38\x0e\xb3\r\xde\xd7N\x44\x8c\xfe.\xc7\x8c\r\xd8\x32>\x46\xc8\xebLw \x06n\xb7\x1c\x89\xd9\x06\xfb\x02\x89\xfb\xe7" "\xd4\xf0-\x8b\x95\x92q|\xdb\x30{\xe9\xfc\x1b\x89\x33m{u\xa0\xc5\xe7o\x7f\xda\xc6\x99\x9e\x04\xfe\x84-\xad\xe1mxJ\x62\x8a\x80" "\xf0\t\xb4\x8dj\x85\x37\xbc(\x8c\x45%V\x9e\x11\xb1\xcb\x43\xdd\x7f\xd1\xcb\x82\xc1\x9c\xd0~R\xad\xc7\xc7\x81\xfd\xb0\xe5P\xb2\x92Y\x64" "\xcb>\xb9RZ\xb6\xf4\x87\xa2\xad\xde\x0f\xb4\xe8\xe5\xdb\xd3.\xd5\xe8\x14\xd3\x03\xba\xe4\xbe\x7f\xfco\xf8\xfb\x33\x65\x19U-\xa8^\x63\x87" "\x07\xd1\xc6L\x91w>\x16\x1a\xad-\x87Z\xb6\xd1\xd9\xb9\x93~\xa6-\xed\xea-\x1d\x94\xca\xe0\x44j\xb3\xf2\x9f\x9fG\x8f\x1dj\xf3\xa1" "\x13\xcb\xf5\x89\xb8)\x91\xd6\x8al\xd9\x18o\xb1\xc6\xba\x10\xf3\xe9\xb7q\x05\xf7\x19\x9f/\xc0;~>y \x9fI\xdc\\\xfc^r\xea" "\\h\x98\xbe[l\xb0(\x9c\x8f\xc1\xaf\x1cyI\xde\x92\xdf\xce\xf4\x86\xe0\x0bU\x06\xd5\x05\x16\xc7\x31M\xcck\xac\x8d\xee\x1aG#T" "\x8b\x9f\xf2l\xf5\xa9\xb1Q\x34m\x9a\xf3\x97\x1e\xff\xe0\x95p\xd8\x64\xcbxY]\xea*\xcc\x9fGk\xde\xfc\x1e\x8f&\x05\xce\xc9\xb6v" "\xcbQ\xf0-M\x92m\xd2\xae:\xfd\xfeu\x96]\xe5\xca\xef\x46\xb4\x83{S\xed\xa7v\xa0\xc9\xa9\xb1r\xb1h/\x8b\x83\x42\xa5\xb5`" "\xed\xd8\xea\x44\x8b\x02@xV*Z\xb0\xc6\x9f\xa6\x96\x83i\x65\xa7\x39\xbeU\\\xf1\x8b\xbah\x88q\rn*N\xdf\xe3\xfeP\xb3\xa9" "\xc8v\xa0\xe6\xd4H\xab\xc9M\xaa\x9d|[X\x0f\xb5\xc5\xe8\xef\x14\xb5\xe0\xe7\xc3l&h\x61\xef\xce\x46g\xa0Y*Q\xd4)\?\x10" "\xd3\xbb\xd5\xadX\x95\xdb\x1c\xc9\xbbTg\x97\x46<\xe4\xdb\xe4\x88\xfc$\xbfH<]P\x98\x82\xc5\x95\xd3\xa7=\xa9v\xc2O\xb5\x13\xa4" "\xac \xf9lH^\xa9\xceG\xa5\x46@*\xb5\x0eVvy\x36\xedz)o\x91H\xc1\x0b\xefj\x8c\x04\xb1-\xd1\x8d<>\xcb;\x7f" "WX\xb7O\x35\r\xaeQ\xae\xc8\xed\x8f\xf3 \xa9U\xfbKj\xd5\xb8!\xb3j\xbb\xd6\xef\xb2\x14\x9f \x8dlY\xa4\xb1\x8bRl-" "\x93\xabv\x82\x0bZ\x04\xb1R\xb7\x85\x05-\x8c\x45\x45]\x44Wy\x85\x14\xb2>+#\x45.\xce\xcd<\x36\ro\xc1\x16\xd7\x05\x93K" "\xdc\x8a\x8d\x96(\x99K-\xfcI\x39\xe3=\xe8P\xad\x92\xb7nNr\x65\xee\xc9i\x96\x9e\x89\x63gz\xa8\x84\xb3H\x1b\x07j@\xb1" "r\x84\\\x66\xf6\x97R\xb7\xb2V>\x9f\x93x\xf2h}\x45\xe2\xb1\xa2\xcd\x8bS\x8b\\\t\t\xa8#\x9a\xb3l\x90\xff\xb6~\x83\x1d\xb8" "\xd2\x08\xe7~\x13Z\x06i\x13g\xf9i\t%+\xbe\xd8\x82\xcc]\x1e\x10\x65\"R\xc3V\x02V\xce\xa9\x33\xd9\xe3\xf9\xdcs\xbeU\x90" "\xc6K\x12\x8fj\xc6\x99r\x8f\xfc`\x63\xad\xe0\xc1\xbb\xb7xO\x65\xfb\x02\xd4p~\xe5\xba\x16\xee\x8fl;\xbb\xe4(\x63+\x94\x1aO" "\x9d\xd2\xd1\xb6\x9dv\xa1\x61# j\xe7\xe4\x13\xa8\x06\x90\xf1\x83\\\x39-\x92]\xc5\xf5\x08\xdc\xdf\x39\xd3o\xed\xef\xac\xa5\xd4\x19\xd3(" "\xba\x19\x16\xd5\x0c\x8bh\xc6\x46\x63\x8dS\xf0\x8c\x9f\x9f\x93\xb5-\x88\xc2\x88\x8d|\x8c\x37\xe0\xe4\x8e\x1c:m\xa6\x88\x8a\xb3+\xf0#\x03" "\xee\x8e\x9c\xd2\x88\xb2t\xaa\xe6\xd3\xbbu\x06\x38\x1f\xca|:\xa0\x45\xa7\xaa\x88\xc2\xa2S\xc6}\x1a\xb9j\xd7\?\xe0\xdf:\xd4\xa6}\x83" "\xed\xeb \xb3\x08\xde\xeb\xd0\xba\x15\xd0/v\x8f\x1b\xb2%W\x94|\x96\xf0\x1d\x37n\xf3g\x41\xf3\x84\x89h\x33\x63\x95\x97_`w#" "\x96n\xd4\xc5\xadY\x84=h\x66\x97\x8aO\x65\xdb\\\x41\x45\x14\x8b\x8cM\x02Q\xaeO\xc8*\xd9\xe2\xbb\xb5\x42\x9b\x61\x8e\xc7\xa2i\xca" "\xda\?\x10\x39>\x63\x1dZ\x63\xcfinI\x15\x91\xd3\x95\xba\xd3Y\x33=\xea\x39\x43'\x84\x9eLm>\x05\xb5\n\x9e\x99\x05 \x13\xef" "v\xe0\xfe\x92\xbc!;\x46\x9b\xdc\xa2\x44\x11\xc8\xd8\xca\x12Ji\x86Q_g,\xb0L\xf9j\xf7\x9b\xfd\x45\xcd\x9b\xb5\xae\xb0q\x05\xae" "\xa9\xafGQgi\xe3]\xa6\xad\xc1\xad\x95\x8c\xac\xcd\x35T\x9e\x14\x41\x1d\xb5\x32\xbe;\xb5&\x19\x0f\xa1]\x9c\x38\xfdrl.\x94\x66" "\xc0\xaa\x38\xbe\x61\x15\x9f\xb5\r\xc6\xc0\xf4\x07\x93.k\x94\xacy\x64\x41\x9b\x42\x0f\xf1\xe0S[\x87\x08\"\x9bZ\x13\xb9\xd5\x93i\x8f\xce" "`\x37\xb1!\x03\xd5\xfc\xe1\xb6\x8d\xf4\x64\xbb\xa6S\xea\x44\xeb\xe4\x89\x66\xcb.\x19q\xe7\x61\x89\xc7\xaf\x91*\xcc\xf0Y\xb6\x11\xd9pi" "U_\xd6\xc6\x8e@\x7f,\x11\xfdZ*r\xd3jh\xf1Y.\xe8X\x13\xa2\x8b\x0eK\xc9\x63\x31\xcfZ\x37\x18\xf4\x1f\x9b\xdb_\xf9m" "\xd9\x33\x9b\x1c\r\x9d:\xb1\x05\xf9\?k.p\x90\x99\xd3\xc4Y\x16\x62\x11\x8f\x65q*`\xf0\xfe\xc3\xca\x37k\x1b\xda(\xef\x07~\xd1" "\x64gy^\xf7\xae\x62\r\xa6\"\xab\x86\x9c\xf5\xe2\x8b\x10\x7f\xca\xc1\xc3X\xfe\xa0\xad\xee\x9c|=\x39\x1b\x19W\xa2\x62\xcc\xd1\x96\xc9\xf9" "iY!\xe6\xa4\xef\x97\xfe\xe4l\x0f\xc2p\xc9\xf1\xe5\xe4XG\xe6XG\xe6\xa4\xd3\x08\"\xc7\xe5h\xa0(Y\x99\xa9\x98\x9e\x15\x85\x30" "G\xc3$g\xcb\x46(\xb7u\x10\xd5\x66\xce\x1f\xd2\x36JQ\xe2\xb5\xe5\xc2\x8d\xa5\x61.\xca\xec\xe2\xd5\x87\x45\xad\x42\x93\xb6*\xd5N\xf1" "\xdd\xa8<\x03y\x1b\xd1\xe3\x31\xb9\x06\xd1\x82+}\x8e\x01\x34\xbf\xd9\xe8\xb5\xeb\xd4P\xd7\xe5+\xb4\r\x12\xc4\xa2R\x84\xf1\xf1\xcc\xe9w" "\xa9\xe2\xe7\x95\x8b~\xba\xb8\x82g\xb4\xad\x8f\x94\xa8}r\x36\x80\x63\xe4\xaf\xf9VY\xfb\xe4\x92\xa3\xa5\xd3\x37\x61Q-\x93!\xf7N\x31" "]\x82I\xdf\x35\xbf\xac\x8a\xec\xb5\xa9\x86\x44*\xd8`\x85r\xf3\x08\xa2\x41-\xd8\xdc\x42\x63\x1b<}\x06\xf1\xfa\x0b>\x62\x43q\x9f\xb3" "\xb1\\\xd3\xae\x93\xbb\x15\xcd\xd2\x82\xad\x8b\xaa\xbc\xa8\x39\xc3\xf2(\xb8\xb3\x81\xa3\xc1\x08\xc7\x90\x93\n\x16\xc4\xa9\xec\xf4\xd9\xf2\x14l\xc6\x84" "\xf2\xe1\xc5\xe9\xf1O\xd4\xdas\xf3\xc7@\x93\x37.\xd7vM\x83\xb3\xfe\xbe\xe9\xb1@\xa6-@\x34\xeb\xcax\xbe\xb1i\xab\xaaM\xda\xe9" "\x17\xdf\x7fl\x64T\xc5\xc5\x04\\U\xc1=\xeeL\xda\xee\x83;\nO\x06\xc9\xc7\x12\"\xccZ\xe1\x98\x05\xbf`\xdb[*\x9by\x12\xcb" "\x33\x99\xf8\x9d\xd4\x91\x64\xe1\xcd\xad\x05\x65\xa8\xd8\x1biZV\x9b\xd0`\xe7*\x35\xe8\xfc\x64\x00\xed+\xe3t\x17\x02\x34s\xf0\x9dR{" "\x05\x97/~/\x34\x8a\x35z\x0c\x91\x64\xd0\xd0\xc2\x17l\xf1K\xd0#\xc2\xa0iT\x1bZ\x62\xd3\xf6\xb7\xe9gL=\xa1\xa4\xa5\xa7l" "\xfa\xdd\xbb\xb3\xe0\xa8\xee\xcfo\xe1\xf0\xca\xf9\x06\xdc\xfes\x06\xdb\xab\xa8\x99\x0f\x61\xbb\xf0\x80\x45W\xa8\xb6\xbfp\xda\xec=\x13\xadh\x14" ",\xbcQ\xc9\xe4\xd4\x06\xb9^\xb3\x98\xd4\xe4\xa8\xc4\x64(\xb1-.YH\x96q\xe7\x64\xb3\xac\xa2\xcd\xc2I\x45\x16\x33\xd3\xd0\xfc\x98\xf8" "t\x19\xd4nX\xdd\xeb\x01\xf3|P\x44\x89\xa7\xc8\x1eW)\xbd\x00\xca_\xc9&%\x81\xac\x07J\xac\x94\x85_\xd1\xd3\xbdm\xd0\xa3Z" "\xb1@\xe2\x04\xc1\t\x1e\xc6\x86\xe3\x95\xb0\x61J\x36\xed\x07\xb4x\x15\x13y\n\xf4\x31\xa5{\x45\xbd\xcb\x9f\xf6\x8e\xc0~\x19\xbc\x7f\x0b\xce" "Kl\x13J\x36-R\xf9t\t\x8e\x9b$R\x84=\xce\x12m\xda\x92\x45\xfd(\xb7\xbc\xa1]\x9d\xc4\xefh\xe5\x96,\x0e\x41Y\xc2U" "-\xc2ZY\xbet\x9a\x07\xc4\xc4{\xf2\xc5\xc9\xf6T\x45\x36\x8f&\x9e\xd7Y\x30M\xe3\xcb\x10\x91\x95\x9f\x8a\xb6\xeb\x81\x8au\xbc\x91\xf0" "\x12\xef\xd9\x96\xb4\x36\xb6\xc0\xce\x07\xd8\x45j\xd9z\xfa\xca[\xa4\xa2-$\x0c\x06\xd5lpzk\xdb\x84\xe1\x80<\x8b\xf4\x13\xa3\xd6:" "\x9eLm\xado\x1c\xc6\x01\xd7\xcc\x0b\xac\"\x33\x8a-\xbc'\xa4\x99]\x62\x85V\xa2\x19S\xb2\xbd\xde\x94\xa3g'k\xa5R\xf4t\xe4" "\x8cO\xb3\x36\xb0\x62\x1a\x32\xaa\xad\x1f\xa7\xfc\xf8q\xfa\x43\x45\x1b\xe4\x16[\x88\x0e\x0c\xdf\xd3t\x17-j\x17\xe9\x92(y\x1a\xdatp" "\x65\x16\t\x64\x63\x43\xca\x0b$\xb7\xee\x08|\xf2`\x81\x19\xaa\xbdW\xc8\x1a\xb9&\xf1\xb4\xb4\x06K\x07s^L\xe3\xafy'l\x0bK" "\xb6\xc5\x85\x90\x16x\x89\x16V\xc9\xe2\x44\x94w\?N[\x61R\x45\xbc\xefS\x9a\x80\xa7,\x81\xa7\xf4\xf3\x9c\xda\xa0\xaer\xbaq\xf2M" "\x9c\x06\xfb\xa6\xf9\x17-G\x9dZ\xc0\xb9\x90\x9d\xf0S\x36\x31\xe5\xe0\xd3\xee\xb5\x1c\xe6\x87\x1a\xbe\x07\x33\xa0\x0c\x33\x8c\xd5\xa1j\xf1\xb5\xbd" "\x95J\x92\x19\x39\xb5^x\xb8N\xb5\xe5\xd2\x45\x9d\x11\xd3}>\xd4\x9eg\x87\x1a\x8aR\x95\x9d\xa5\xaa\xad\xe1\x0b\xb2\xcb[\x65\xfb]\x65" "\xfb]\x65\xa5R\x65\xf5Q\xa5i^\r*\xd3\xa8t\xe2\x9b\xc1\xeb\x81\xf3\x32x\xf1/\xfdN\xed\x13\x1c\xd6\xc1\xf1%\x88\xe6\xa9\x1a\xfc" "|\xb2\xdbS\x35o\xb4rko\xb9\xca\xb2Y\xb5\x65\x36@\x9b\x1b\xa8\xe2\xcd\xb9\x93\xdd\x1c\x15-\xae\x8c\"\xaa\\\x15\x35v\xffO\x8b" "\xe7\xcf\xb6\xab\x95j\xe8|Vm\xef\x1c\x90\x35\x83\x8a~W*~\x7f@\x44\xb7\xb6\xca\x46T\xc9\xa6P\xc5\xf4vgH\xe0\xf0\xe3\xf3" "\x97O\x44K\xb3JW\x91\x32\xban\xb2\xecV\xa3\xf6$\xca\xca\x81-\x34T\xa8\xd5h\x65\xbd\x82\xaa\r.\x83\xfe|*\xa2\x02U\xd1" "\xaf\xab\"\xcf\xa8\xf1\xfa\x97\xeb\x03\xf1\xf0\x83\xcd\x8b\xf9s\xa1\xd9\xf8\xa6\x8a\xbb\x01\x08{\xb1jk\x15\"\x8d\xe5\x8fl\xfb\xa5\xd8T*" "-\x9c\x46\xc5\x0eR.\xe9\"\xad\x92;\x1e\xf7\xb3\xbc>;ur\xdb\xfa\x34\xd5\xf2K\xda\x41\x17\xf4\xf7\\\xfc\xc2:\xbe`~\xb3%" "\xd9P\x7f\xe8p\xd3\xef\xaa\x64\x01\xb3\xaa\x95\xc8\xb3&X\x1d\x81(\x18\x17ln\x94\x87\x9f\xc2\xe3\xa2\xb4\x10\x03\x15\xd1\xee\\\x84\xc8\xc8" "\x17\xb6K\xb5\xb2\x89\x9f\xd8\xfcv\xe3[|R\x61\x05\x88\x1d\x17\x95\xffR\x32\x85T\xf4\x15\x7fT\x1b\x8f\x9c\x41\xa5\x18\xad\x9eRmr" "\x66\xbb\tQ\xdb\x0e\xd9\x89W-<\x7f\xb6-uU\x9b\xf2\xf6\xbe^\x93v\x95n\x91\x8bpy\xe1\x0c\x86}\x1b\xa6\xa3\xb6\x1a\x04\x9b" "\\\xaa\xfd\x9dUL\x33\xb8\xf1\xa1\xf1>\xe2\xe2\xd8i\x9d\xbf\x37h\x30\xbbl%\xad\xd2[X\xad\x42\x43\?\xe3\xc2\x66\xd0)\xef\xbe\xc8" "\x1f\x90w,\xd4\xa1\xbds\xcbUu\x1aOu\x1aKu:\xe7\x94\xba\xbf\xcf\xcf#\x34T;\xf5\x00}\xdb:\x9f\xa8n\x33\xd0\x94\xb5" "\x13\x10\xbd\xc5\xba<\x34\xf8\xaf\t\xae\xbf\x41\xf4\xff\xea\x92\x80N\x9d\x43\x8d\x32\x08\r{*\xa9\xd6\xbb\xa3\x9dY\x8f\xba\x1b\xd6\xceu:" "\x94\xea\xf4\x87\xd6mL^\tS\xb1\xce\x16\xa4\xfe\xe7W\xac[\xacGrt\xc9G\xbd\xa4\x9dx\xc9\xcf/\x03\xf4\xbf/\x99W\xb0v" "\x8a\x12>\xac\xa6\r\xb7)\xf1}\x65P\xad\xd9\x90\x1c\x35\xee\xf1\x0c-\xfd`m\x39\xbdI\xf3\xac\xa9;\xa2\x35N(\xe2\xcc\xb6&\x88" "r\xf4\x03n\x8e\xc9+\x10\r\x42\x93Y\xb7\x19\x66\x36 l-!~gs\xa9\x94\xa5\x0ex\xd5\x02\xbb\xf8\xbe\xdf\x92\x90\rI\x33\xfe" "\xbew\xfa\xa1$\x83_'\xcd\x05\x13\xbem\xb1\xac\xc6GpU&\x9f\xc8\t\xb9r\xf2\xdeT\x8cw;\xfat\xa4V\x39\"O\x83J" "\xdb&(\x9a\x96\x32\xb8)\xd9\x9a\xe6\xa6\x8d@\x34\x1fm\x0b\x8aQ\xeex\xf1\xdd\x1e\xdc\x37\x9d\x16\xc7J\xf1\xec:\x15\xa7U\x0eg\xa9" "\x16\xde\x34\xc2\x62\xd6\x35\xdfi\x08\x9aX/\x34\xcb\xda\xcc\xeaJ-&\xa8\xffL\xdb\xf7,l\x07\x1a\xcdh\x13+U\x1a\xcb\xd0\xdel" "x\x99Z\xed&\x15[\xcf\xb4\x35M\xebNi\x9f\x9b\xf6p\x9c\x8a\x13\x31\xd1\x9fS\xed\xbd\xc0\x16\x12\xda\x8fM\xc1\xa1\xb6\x18\x31\xab\xaa" "\xf6\xe7\xf4\x32\x8d\x13\xdd\xa9\xf5\xee\xd2\xa4\x16\xad\?\x8cV[\xd7|\x33Xj\xab\xfd\x81H\xf3\xcc\xb4m\xed@\xb4x\x65hq\xe6\xf2" "P\xbb\x18\xa5\xe2|`\xa1\xa8\xd0\xe8\x15\x33\x11\x46]\xdb\xb6\xd1\x03\xd9\x1a\xb4i\xce\x08g\xe4\xa7S\xec\xf8\xa8TO\xb5u\x39\xce\xee" "~\x61Z\xe9\x01\x8e\x32\xb6\x83<\x0f\x15qi\xdb^\xc0\xd8\"\x1f\xc8)\x08\x63H\xa9~U\x66\xb5\xe0T\xb7\x43\xf4\xdcn{\x87\x82" "l\xec\xda\x9e\xcbtk\x02N\x0bV\xed\x1c\xa9g\x13o\xdf)~\x80\xb0\xa2\xdb\x16\xbfh\xac\x90H\xd7\xa0v\xea\xa4\x85\xab\x62z\xb9" "\xab\x82S\x97l\xf8\xe0\x33v\xf8\x8c\x83s\xf0\x81w\xff\xf0\xe4\x65\x84=\x7f\xa5\xd8n\x16\xb0\xa2\xda\x88'\x18\xf1\x04p\xea\xb5\xff\x9c" "y\xed`\xd2#\xef\xd5\x87\x90]\xa5i=\xf9r\xc6\xdc\x42\xc7\xb4o\xa7\x36T~\xde\t\xef\x62\xc6\xd7\xb9\xe8\xa5I\xb5\xe8\x83\xcb\x1c" "m\xa7v\xe0WX.\xc3\xb3\xa2\x8b\xec&Q\xa4\xb5\xdf\xa6U \xdc\x86s\xdd\xc6\x13\xda\x9a\x89\x88\x06\xa5Ms\xb5Mw\x63[\xfd" "X\x1f%\x17m\x63H\x88\xb6\xe4\x97\x89\xc8\x87R\x89\xc9\xc3\xd1\xed\xd3\xf6JL\x18\xads\x36\xb1R\x35\x0c\xe7(}-\x02\xd5\x30\xec" "\xa9\xf4\x97\xa7\xeb\x9f\xeevt\x95\xb5i\x1f\xb7\xc3V\xc3)\xf9,\xbdT/w\xf8]X\x31\xed\xf0\xb6\xea\x0co\x8b\xec\xf9\xb4\xc3G" "\xfe\x06\xb6\xaf\x92.\x8b\xb6\xaf\x1e\x41q\xec_\x98;\xa3\t\xcf<\xc3\xeb\xb6u\xf3\x94\xb0\x46\xdb:\x00\x04gQ\xdb\x16\x9eS\xa2\xd9" "lG\x99/\xafh\xbc@\xfa;\xd2\x17\xb4\xfc\xb0Q\xcb\xb5\xd7$r\xcc\x0b\x8b\x8a\xe3\x66\x90\xcf\x45\xeb\xe3\x83\x03\xd1\xbfG\xaf\x12\xfe" "\xfc\xf8&\x96\x37\xf4\x14\x9a\x36S\x1f\x85n\xbb],\xe8\x12\x12\x95\xa1\x05t\xf8\x87[[\xd9\xf2P\xf3\xd5YpL\xd7\x9fo=\x1f" "h\x9el\xaa\xfd\x9d\xc8\"()~\x1d\x87\xab\x0by\xdd\xbak&\x1a\xf1\xb6'\x8a\x9ak\x18\xa2jGWx\xcdQ\x93\xec\xdc\x38\x63" "\xe9\x1e\xb6P\xbe\xe9\rUz\x63\xaa\xf1n\xf0\xee\xa8\xe8\xb9\x85n\x80\xb6mp\xa9|\x45\xe6\xb3\xa9-Jt>\xda\x11\x9b\x05\x61\x9a" "\x64\x30X\xda^\x1f{\xbdn\xf1: \x9d\xe6m[\x18\xda\x88\xabJ-\x0e\xe6\x8e\x9c\xf4{\xb4\xe9\xf8V\xea\xb0\x44\xf9\xc6\xb5\x10]" "\xd9v\\\xccZ\x98\x9f\x8a\x18Ri\xd3\x35\xd7\xb6i\?J\x16\xb5\xb8\x8f\x87\xa1\x05\xdb\xb6\xc5\x61o\x93\x9bu\xaa\xf5r.\xd2o\xaf" "\"]*\"\x0e\x9d\x62\x7f'-\x9e\xe4)\xeb\x94\x96\x33\x98\xf1\t`\x18\xb6\xe3\xc9\xbb\xf3\xa0\xa1\x36-m\xa8U\x63\x43\xad\"\x1b\x63" "\x15\xb9\x39\x34\x35\xb8\xbeT\x8c\x1ev\xa9\xf8\xd7\x80\xaa\xc6vR\xc4\x34m\x45\x94\xce\xfdiZ\x0e\xf4\x80\xce\x1cMo\x45\xfes\xb0\xdc" "\xb4\xd6\xd0\x96\x87\x31mI\xa2\xd6\xf4\xbaG\x33\xe5\xe0\xc7vP\x81\xe6+\x9e@\x8b\xdfwn\x19\xd0\?\xd3\xf6\xdc\xea\xf9\x9b\xfe\x9av" "<\xe5\x1b\x99\xa1\x42\xe0(\xab\x32\x92\?\x44\x37\xa8\x16\x17\x9e\xd3\xcc\xe1Z\x9a\x45h'\x08\xbd]\xb3\x89)J\x96Jzx\x84[\x92" "\t\xb8\xcf\xa7I/\xa2\xa7\xf0\xbe\xe8\xa4\x33\x04\x62\x99N+\xd5t\xf5\xe4\xc9$\xd5l\xeb\x19\xd7\xe2\xc9s\x9a\x64\xd2].\xcd\xd3\xf7" "\xbeG\xb3\xc3\x9es\xdb\xc2O\x8d\xf8\xdc_\x83\xd0\x1b\xf3$\x8b\x8b$\xb9\xad\x34\xacI\x16\xcf\x91\xe4+\x36\xf3R\x45\x9a\x36I\x03W" "\xb4\x80.\x65\xf7\xd8y\xd0R\x8a\x96\\\xe1\xe9\xe8ij\xb3\xd7\xa7\xf4Z[\x45\x36\xa2*\xb2\x02W\xbf\xf7\xe9\xc8-\xd4\xbf\x61i\x15" "m\?N\x8a\x93\xf4\x0b|\x9e\x0e\x43\x1f:\xd2\xab\x35\x32\\\xa0\x13\xc3\x8b\xd9\xb1M!\x84\xf2\xa7\xec\xd9*\xc0\x42\xfe\xae\xc7\xd7\xda\x0b" "\x16\x96\x8dz\xcc\xdb\x36\xdd\xf9\x31K\x63\xa7o\x83\xbb\xf7\xb6\xa7\xb0j\xc5o\xb0\\\x04\x9f\x33\xe0\x62\x16<\xcc~\x37Mh\x9bl\xf0" "\xb0\xa4\x83\xb0o;\x00\x81R\x01\xfaQ]\xfc\xe7\xf1\x98~}\xd5X\xe3\xf5\xc3\x0c.\xc1/\x0el\"\xb1\xf1\xd3I\x7f\xb4\x88k\xf0" "\xb4\x0fVk \x0c\xaf\x01\xbd^\xca\x08o\xdc\xc7\xe0\x94\xb6u\x10\x44\x9b\xa2\x03\x31\x46\x42\x0f\xd8\xad\x1d\xb0\x33\?\xf0k\n\x0fn&" ",\x95m\xa6\xaa\x8a\xa7\xb8h\xaa\xc3%\x84\xe9>\xa0>\xe5{\xdd\xc2\xd7q\xc0\xe7\xff\xa8v\xb3\x03\xd1\xa8\x0c,\x00T\xf9U\x06W" "\xdf\xce\xa0~\x1d\\\xe1.\xc3\x35\x9e\x38\xca\xe3\xf1Xz\x07\xd1\xe4\x88\xb4\x37\x32\xb0iqJT\xd2\x03\xfa\xb6\x95,\xaa*\xd2\x06\x30" "\x11\x46\xc3\x80u\xca \x9e\xe6\x98\x05\x07\xc9\x11\x1e\xd0\x16\xe6\x01m\xc2\x17\x44\x9a]&>\\\xd8\x04\x96\xe4\xe8\xd6\x96}S\xa2\xe6\xbd" "\x65\?\xe1\x36\xc8U\xc1\xc2\x19\x08\x1f\xd4\xad-o\xaf\x44\xf5\xaa\x94\x9e\x1f{\xb5\xa6m\x8e\xd9\x41\xbd\xe5\xf8\xa6\x92\xde\xe0[\xfa\x9e\x94" "|\x90\xdb\xa0\x33\xe6\xe3\xddr\xf0\x44\x19\x97V\xe9\xd1\x87\x97\xe8\xadl\xeb\xf8\xaa\x86\xde\x8bp\x0bNg\xe0,\xa5n|\x06#I\x35" "\x9b_\r\xd1\x37.P\xed\xe3%\x1a\xec\xd9\x0f\xbd\xb5=\x86\x41[\n\x0e\"\xcb\xdd\xadm\x1b\xa4\xdc\xf2\x12\xbb\x89\xf4\x9d\x82G\xcb\x1f" "\xb7\xcc\x87JV\x9f*\x46\x9dyx>\x12#!\xfc:\x0f+\x03\x9bX\x81O\xa4\xc6\xa2Qy\xcb\x08\xbf[\xddu\xb5\xb5\x0e>\xa7" "\xd4\x9aNZ\xe0*\xb2\x03\xad\xa2'L\x08\xb7\x8c\xd2\x16wU\x11n\x95[\xbaHn\xfd\x01\xb1[\x36\xc4K\\\xc6\x36\xdf\x01\x7f\x97" "\x45\x8e\xc4\xa8&\xcdm\xb4{\x80\xf6\x86+\xd9\xcc}\xd0\xd3G\xc5\xc5\xc8\x45\xbf%z\xeeo\xe3\x93\x02\xdb\x84[\x9a'J\xb6\xc2*" "\xfaiT\x44\xb8\x97\x89\x62\x02\xfc}\xc7\x36\xf3U\xf1\xecI\xda\xf4h\xc3\x0f\xee\x8e\x9c\x62\x63\x32\xde\xd2\xb4\x9f\x8fh]\x88s}\x1c" "@w\xe8\x96\x63'\xc2{p\x9aRWm\xd8<\xb8\xa6\x13MPM\xaa&]\x33\xf6HU\xf3\x9c\x10O\x1f\x0e\?@s{\x9b\xb4" "\n\x07\x39+\xe9<\xfb\xd7\x93\x0eR#\x19\x99\x1dp\x17,\xee\x9c\x7f\xf1\x8b\x43\xba{\x87\xba\x94\xebn\xcf\x08\x61\xd5\xe2\xf7\x39\xfd\x89" "\xc3\xdf\xbd\xd9v\x43\xa9\xe6\xb5\x8c]P\x43\xbfz\x18tW:\x43\x1a\xae\x33j\xb6\xee\x82jR\x02\x36Gl\x9a\x86\xba\xa0-\x37," "\x12\xcd\xb6I\x11\xc6{\xcb\x66\x43\xf6\x0c&\x36\x9bH\xc8\xf3O\x42X\xceJ\x1dn\x41\xa5\xae\x1a\x1f\xd4\x44\x98\x8d\xdf\xf1\xdeRt)" "\x8dZ\xfc\x9dg\x46Z\xf2\xde\x96L:\x65\x92i\xda\x02\xd3\xaa\xadu*\x9c\xad\xb4%Z\x90\x9f'\x99\x63[\x34G\x35T\x65\xac\xb0jI}\x1d\xbd" "\xcc\xa1\xc1\x7f\xb3\x63\xdc\xde\x8e\x11\x89J\xc6\xe7\xef\xc2[\xbb\x89\x9d\x9c\xc3\xc9\x82\xbf\xb3m\xbd\x94\xcd\x0f\x9dI\x89\x30\xd6]\xd2\xba\x00" "\x31\xba\xb8\x43\xac\\&\x03\xfb\xd4\xa8\xcbPY\x31\xc9\x30 \xd8\x18\xbd\xac\x10\"*\xda\x45%\x38\xdb\xdb,\x0e\xd5\xb6\x43#*\xe1\x0c" "\x83\x43\x8d\x08\r\x10\xd1\xfa.\x42\xfe\x44\x18n\xbb\xfe\xc3\xc4\xba\xce\x42\xab\xbf\x32Y\x98\xa5\x19\x86\x80\x66\x34\xea\x1b\xb4\xee\xb1p\x92!" "\xdb\xa0\x99\xd0\x42]N\x45i.\x66\xa3\x9a\xd2\x16\x14\x99\x39\xe0\x1e\xbc\x39\x03u\xf5!\xa9\x8bl\xcaU\x92)\xa2\xc4\nu\xf5M\xe5" "*\xa5T\x35\xe8Y\xa8\xb6\xd2\xbe\xbb\x45\xa0\x65\x8a\xa8\x43\x95+\xd0\x02K\x85\x13\xbb\xa3\"|XJ|\x1f\xa3\xb1\x19\xec\x17\xa8,\xbd" "\x84g\x19\xde\?v\xdf\x13\"\xecG\xf8\x84;KZ/\xa0\x85\xa2\x19Q\x37\x43\xb4&\x38S\x61\xaaU\xe0\xec\x37&\x9f}\xb4\x81\x99" "Jp^\x00\xab\xa7N\xe9\xe2\xdb\x12\xa6\xaa!\x85+pk\x1a\xa5]\xb1\xdd\xb5T\xb3n\xbc\xd0\xacR\xe1\x32\xe7T\x37\x81\xf9N\x33" "\x95\xf8\xe9\x04\xb4\xb6Y\x88w_I\x8av_U\xd4\x34\xc6\xf0r\x1f\x8d-\xdbU\xa5\xdf\x11\x96\xfe\x61|P\xb4\xd3\x1ah\x81\xba\xc2" "\xe5\x45r\xf3\x11\x9b\xa7\x37S\x85w#s\x81\x11\xb6\xcc\x45\x30\xbd\x94\xaa\x18\x1d*\xd1pW\x1c\xe6\x14n\xa8\xef\x9dM\xa3M\xa1S" "\xe6>\x41\x8b\x11\x37J[\x10\x0c\x06\x87\xda\xbd\xa5\xde\x85-\x9d\xa7\x1c\x95@\x33\xaf\x84\x16\xa4\x9d\xb9\xb0\x65\xec\x94\x16\xb1(\xdc>\x83" "\xfb\x17\xa7\xaeY\x8e\x37\xa3Z\xd4.\xc0\x8f\x65Z\\\x63ki\xda\xc1\x33\xb1\xdc\\\xb0\xb0\xd6P\x9fgj\xf2\xa7\xac\x07\xa7V\xce\xea" "\xba\x38\xe5\xfd\x04\x15@\xa6\xf1\xbb,\xe9t\xe3\xde\x91\xed\x38\x63\x07N\xc9\x8a\x33\xb8\xd0Y\xadQG\x9arl\r\x84\xc3\x61y'M" "\xb7k\xf2q\xfa\x99\x8d_\x19\xd3\xb3i;z\x84\x18`\xd5\xaa\xa0\x35\x0f\x42\xb3\xe8\xa4\xf3\x9f/\x39\x83\x65\x8f\xe2\x02,\xe2\xab\x98\x65" " \x34\x1b\x41(\xb5\xd6\xf5\xbb\xcd'\x34\xef\x41)\x18\x95\xd1\xc9\x14\xcd\xba\xf5\x46\xf4KT\x9c\x82\x17'\xf2\x8e\x31,\xa0\xda\x99i'" "\xd4\xfe\x85\xdfY\x8c\x61\x99\x96\x1c]\xa6Z\rO\x10\\w\x41sn\n\xbb)\x83\xd9y\xc8\xe7\x62\x11i \x36L\xd8;\x07\xef\xf9" "\x10\x36,o\x84\x87^\xc5\xb9\xae\xd7>\xdd\x41\xd3\xad\xe6\x95O|\"\x1b!T\x32\xc1\xcc\x30\x10\xda@\x80\xf0\xfdN:\xf0\xc1\x18\xaf" "R\xf3\xfc\x1d\x9f{\xba\x95g\x8a^\x16\xae\xe9\x08\xacY\x00\xa2Y\x63m\x94\xf3\xc1\xf1,\xda\xc7%h\xb6\xbdp\x85\x37\x19\xec\x16N" "\x7f\xb9\"\x06\x9d)\xc2J\xa1\xf9\xed\xec\x16\xe1\xc7#\x66\xa0\x98\x16\xcdo\xe3\xf9s\xaa\xad\xab.\xc2\x9b\x08q\xf2\x00\x87\x1b\xb4\xf9(" "\xe8\xa5_S\xaf\xcc\x14\x8f\x8e\x11O\xa1\x65+\xd6q\r\x0c\x61\x08m,\xd6\x88\x90\x39\x11o\x90\xf8!_\x15\x9c\x31\xc2~\x13\xbd\x1a" "\x11o\x37\x61\xb9\x04\x0b\xed@\xfb\x9f\xdc:\xd1M\x97\xcb\xc9\xcd>\xaa\r\xf0\xe1\xbf\xbb\x64x\x1b\xea\xd2\x11\xaa\x8d\x91qm\x33\x05\x61" "T\xc2\xe5mit\xe5\x45\x81\xdc\x38\xfd*\x10\xe5\xbe\x11~&\x07Z[\xb0;p\xc2)\x66\"W\xb7\xf0\x03\x03\x9e\xff\x96\xdf\xbd\x45" "\x36\x8d\x86\xa4Yq\x42\xa6\x34\\\xa6\xb6\xf6\xa3-\x43q\x0c\xad<\xd2\x45\xeb\xde\x97\xf0!\xc9\x01\x16'\xf8\"\x84\x43\xd4\x05\xba:\xfb" "\xfb\xdc\x16\xe7U\x8d\xef,\x9e\x0e\xc1\x8f\xb3\xe0\x63i\x0b\x87\xa8\x36G\x86\x86\x97\xd2h\xd3\x32&\xa9\xb6{:\xd0\xd2\x61U\xd1v\xc8" "\x97\xb6\x86%\xf8\xbb^\xc3R\x31MW\xfejO\\\x93\xba\x31y\xc5\xab\xa4q\xa0\xf4\x02\x8fR\xe8\x05\xd1V\x42\x01\xbd\xc0%u\xbc" ":[\xda\x46\t\xfb\xa5\x81)\x03\xc2\x16\x9e.y\x44YM^\x9f\x7f\xd7-\x36\xf1\x8d\xe4\xed\x46\x17\xe1\x9f\xae\xfe\xab%\xe3K\xc8\xbf" "\xcb\x13\xff$\xea\x9c\xda*\xbcRg\x62\x9a\xa7\xf2:*\xff\xb3\xc5\xb5\xa8q]G\xd5l\xbc\x42\xb8\xe2\xa7\x36\xf8/\xd4\xe5\x9c\x41\x96" "\?\x13\xf7w\xb6S\x08\x34t\x1d \x8e\x1fS\x31M\x62\xd5`\xd7\xba\x18]\xef\x30\x92\x62\x07\xc4\xd4`\x31\x35\xcd \xec\x46\xc4" "\xf2#xv\x07\x9e\x97H\x9c\x14\x11\xf0\x46\x16\xcdIz\x96\xe6(z_@l\x37\xc1\xd7\x0b\xf0\x83g\xfb\x1c\xf9\x85\xa2\xdaU\\\xc0" "\x13\xd9\x1aRJ\x0b\xd8\x33\x62,\x42\x44\x9e\x30\xda\xf5\x9d\xec\x33N\xe2\xdc\x12<&+o\xe0\xe5\xd6\t\x7f\xb5\x88\xa8\xd0'\xf2\xe7\x94" "\xe7\xf1G\xc2\xe4\x32!,\x0e!\x1e\xd1\xb6\xba\x02\x7f\x37}\x17\x83\xe5\xd6\x45\x7f\x94\xc4\x02\x19\x85\x16 '\xec\xf0\x44\x36\xc0#\x44\xed" "\x34\xb1\xdai\xcfO\xe7\xc9\x91\xa5\xec\x97\xf6\xce\x36m\x0c\xe6\x9a\x96\x86T\x89\x66\x13i\x95\xd6\x8e}\x05\xf9u\xb0\xcb\xc3\xc5\x64\x9a\x46" "\xf2\xb7\x1e\xa1\x99\x17Xh\x03\x41\x46\x9a\xa7\"\xaei\x03|\x61>\x9a\x10\xbd\x62%\xdf\xe3\x17\xa6\xb5\x19\xa3\xd5\xab\xed\xfe\xac\xda\xcer" "\xfbW\x88\xd4\xf9\xd2]\x9d\xe4\xba\xbc\xa8\xae\x64}\xbd\xa5}\xfa\xc5\x06Q\x19\x96\x9e\xd2\xa3p\xda(\xe5\xd4|\xb3_\x34}\x61\x61|" "\xf1\xbb[Z\xad{z\xb8\xf6\xf0p\xd1\xa0\xd9\xff\xc7\x32\xdbk_\x36\x37\x08\xd5\xb7\xe0.\x92\xbd-,\xa5\x44\r\xb0\x87\xb3RhS" "*\x94\xdf\xc9\xa5n\x9f\x1c\x14u\x63\xb6\x30\x37\x85\xcfO>)~\xc7\xdf\x65\x38\xf2\x45\xeb\xd5\xa4=\x43\x98\xbchog\xe0\xf8\xca\x89" "\x80\x30\x13m\x1f-\x88\xb6\xce)\x44,\xb9 \xa2MV\x34\xca\x35\xe3V;\xd5\xa6\xb3T{\xe7=\x98\x0b]h\x13\x46\x95\?N\xb9" "!\x88[\x1e\xda\xe3\x96\x30\x06,l\xd7\x9c\xda\x7f\\\x1d\xbb\x16\xe7\xba,\xf4\xfbh\x38\xb5\xdd\x1bZ\xd0`\x64(\xe5V\xe8\x1d\xd9#" "\xee\xc4h+_\xab\xb8\x35\x87\xc5\x9e\x8bjMO\xa0\xd9R\x0c\xcaO\xd0\x82\x16${\xcb\xdf=\x36\xb0W\x31\xfb\n\xa2\xd7\xa0\xd4\xe7" "\xb6\xc8\x34\xd1\xe0$\xe3\xa4V\xa3|j\xdb\xe3@\x63\x01\x36\x91w\xf3\xe7H\xf3\x92$\\\x38\xd9\x8c\xa9\x88)\x87v\x37N:\xc5T" "\xc4\xe9\xb2G\xb6\xb8\x94\xf2t\xe0\x0cg\xd9\xf8\xab\xeaZ\xfc\xbeH\xb5\x0b\xb9\xf9\x63[XJ\x34\x34\x36\xd9#\x84\"\x65\x8f\x30\x83H" "hU\x96\x11\xdes\x13\x11\x91i\"n\x1f\xa2\xcd\x04\xca\x1e\x61\x9c'\x9bM\xf0\x91R\x1a\x39\x34(\xa9\x66\xcdJ\x96\x36\xadp\x42\xdd" ":\xe9\xd9\x1c\xa6\x08\x64O\x82\xc2H\xfeL\x44i\xca\x9eH\xc7R\x37w\x33\xabY\x34km\xb3'\xf2\xa7,\x07V\xf6\xb2\xe5$\x33" "\x04\xads\x96\xad\x45\xa7\xff\xa2\xdd\x43p\xa1\x66Y\xb6!\x65\x0f^X\x15\xb7\xc1\x45\x07\xe2\xaa\x1d\x9b\xdfK\xc5I\x38\x7f\x35\x11\x01\xf2" "\xc2i\x15~R\x17\x35\x98\xd2\xdc\x61r\xc0\x42 \xb3\x8d\xb0\xdc\x30\xc6\xd9wp\x8fs$\x43\x1d\xaeR\xf1\n\xf1\xcd\x42\xf3%\x1bQ" "\x41\x66\xaf\xe4O\xd9\x44$\x9f\x91\x1f\xb5\xe0N\x31\xa2v\xc9v\x82y\xce\xc9O)\xda\x9a\x9fI\x96\x0b]\x18\xd3Z\x38{\xaf}\xc9" "\x93\xb5\x8b\x08\x37W\xb1\xe2\x0c\xcau\xb8\x11\x0e\xb4\xe8\xbc\x0c/\xab\x1e\xbb&_\x9d\xa8\x9fT\xfc\x00\x7fN\x9c\xb6\xcb \x44\xdf\x9f\x10" "\x1a\xe6\xe8\x99\xe8\xfb\x13R\xb3\xce\x9c\x88\xfe]\?\xc3\xaa\x03[\x00\xa2Y\xed*\xf2\xd2\x36+\x41\xc9\xbb\xe4\xf6\x84*n\xf1h:\xad" "\xf5\x06\xcf\xe5\x1f\xf9\x86\x84*\x9eO\xc0\xea\ty\x46>\xd8\x46\x66*\xdaZ\x12\xc2\xeb:\xd8k\x92w\xe0-R\x04\x05S\x89\xdb\x85" "\xe3*K\xb3Y\x39s\xca\r\xc1\t(\x9au\xc5\x85\xd6\x15\xcf\xde\x87G\xe7\x92\x1a|\xd9\xa2]\x81%<\x8c\xfa\x90\xaa\x17q\xa5\x84" "\xc9\x1fr\xa0\xf6\x82\x45\x15\x44\xbc\xc4S\xca{\xd3\x00\xd4|\x99\x1a\xde\x34\x0c\x1c\xe5\xb7\xd3\x36\x36\xa4h\x43I\"\xde\xf4H\x9e\xab\xf3" "\xe1<\xc8K\xaa-\xb3\x10m`\x41\xf9\x1c,\xe6\xc1\xf4\xf2\x7frk\xdd\x81\xe2\xebMT]\x0f\xd5\x42\x34\xf5s^\x80\x89\xe6\xf9\x00" "\xa1\x05\x42\x8bI\xce\xde{\xc6\xc4\"\?\xc2sy\xfd\xd5\x03\x11\x31\t\xa2\xb5\x91\xda\xf0\x66\x0b\x9f\x90\x42\xbeq\xa2\x8a/\xab\xf0\xa3\x15" "\x36q\xd3\xb6\xc0\xb8r=\xf7\xb4\x41\xcc\x91P\x17\x9dT\xbe\xf7\x9c\x9eU\x30\x1a/\xdc\x15\xc8\x1fr\x17\xe6\xf1n\xb0\x97\xa9\xbfO\xac" "u%\x44\x05t\x0f\xd7\x8f\x90;.\xaa\xb8\xdc\xc3!#\xe2j\xeb\xf4\x0c/\"\x13\xe7\x11\x33y\x8c\xe1\xf8>X.\x61\x16\x65\x1fY" "(\x1f\xe1\?\xcd>\"\xf6Sw\xd8\xb6\xac\xf8\xaa\x05\xf8\xe7\x43~\xe3Zxuv\xa0Is\x9aj\xba\xfb\xbb\x30\xc8\xad\xc1\xcb\x7f\xa0" "\xb9\xf3\x84\x36\x88\xa1\xb4\xf7\xf3\x8a\xa6\xda\x18o\xe7\xfe)\x9c\x0f\x42\xebW\t\xf1\xd6_\xa3\x0c~\x05\x1b_\x38\xea\x93\x96{_\x31\xe0" "\x9d}\x65v\x7f\x45h\xa3r\xee\x0c\x36Y\xc4\x8b\x88\x36\x1f\x82\x0b\xe8\x88\xfc\x13\x9a\xa7Nh\xd6\x9d\x91\xafO\xc5p\xfc\xf7\x85\xf1\xa5" "\x33x\xb8\xe6Q\xe9\xa9\x8c\x41\xd4%\x13\x04'\tm\x94@x\x96'\xa9[\xb7\xd4\xc8Vp\x82\x88U\xa3\xba.,\x16Y\xb5+\xd0" "V&\x10\xa2\xccL\xc2\x93\t\xf9\xe9T/\xa4\xf5\r\x45\xb3\xa0t\xe1\xe5\xde\xa9\x33\x36\xcc\x17\x63ZpR\x0f\xcb\xcf\xa9v\xb6\xf2\xeb" "\xa9\x66\xf1\x0c&\x1e\xdc\x08\xa6\xd4\tm\xfd\xad\xec\x04!\xd0\x46\x04\xc6\x98\xe8\x0f!\x62\xe2\x93h\xa0!KO\xa2\xd6\x35\xc8\xd3\"\xce" "Y\x38\xae\x83\x13\x9e\x80\xf7*\xc4x\x92\x88\x1b\xfc\x14\xbd\x44\xe1)\xbe\x12\x0f\xcb\xe0|L\xf2\xf3\xaf\x63g\xb0\xf8\xc0ru\xa2\xe1\xc5" "OX('\xb6\xc1\x95\xd2\xd6\x1d\xc8N\x10\xaa\x66\x94\x64\x41\xc0\x37\xb4\x1aN@\x13\xe5\x9d\r\xe7\xbb\xef\xa1!\x62\x62=\x31\xe3_M" "g\xda\xf8\x11\x33\x0c\xb3\xf2\x34%\xd6g\x33\xdbw\xc0\xee\xf5\x13\x1d\x14!\x8c\x81/\xb8\xb4\xb3_\xf0\xc0\t\xcdk\x9a\xfd\x42W\xcc\xf8" "w\x85\xaf\xa4S\x01\xefoh\x84,\xb4\xd1\x44\xfe]\x06\x13\xcb`K\x66\x8a\x65r\x63I\xff\xc3k\xfe`\xde\x88\xd0\x1c\x95\x42X*" "\?\xbc\xf6O\xb4yN\xb6\x17\xd1\xdc*\xdf\x9f\xf8\xce.\xf0\x93\x0c\xfe\x05\xa3\x32\xc4\x8fL\xeaz\xca\xae\xd9\xac\xae\x7f-\x04:\xbb\xe6" "Mr\x88@X\xfd\x04Q\xff\xac\x31h)\x34\?\x8e\x10M\xde\x1a\x01\x33\xc2\xc5#\x88\x46nm\xdb{({\x38\?\xa6\x33\x08m\x9c" "(\xbb\xb6\x9d\xcb\x95=\xfc\x0eQ\n\xc2\xf2{\x82R\xb9\x8e\x9f\xea *\xe2\x35\x82\"\x8c\xf1{%\x19\xd6\xa2\xf3\xa2\xc6^\xf6\xed%" "\xac\xa5R\x04Q\x1d+u\xabr[\x33%\x97\tl\xd8T\xd9\x04\xef\xfa\xc6\x30\x8b\xe3\xb0\xc8\x84k\x1c\x87\xe3M\x39\x06\x9f\xde\x41\xdd" ">\x42\x88(\xb2\x9c.S\x85\x99\x9e\xb9L\xa2\xcbY\x83\xba\xa6\xba\x45,\x99\x16\xbc\xdf\x85\xff\x86\xae\xc5\xb5\x99\xfc\x41+\xd6lq[" "\x15\x9b\x63R\xd3'\x97O\xda\x9a\x7fs\x45\xdd\xd9\xb8}\xa1\x1b\xa5\xda`'w\xd6R\xda\x8b\x12\xda`\xa0\xf0\xbd\x1e|t\xa2\x9bG" "\xd3`\xed\xe7N\xa3\xf2\xc6\x88\x11\xf2\xdc\xb9\xd8v\x30KU\x1c\x83\?\xe5\xdf\x65\xd1\x44\x98\xc9\x42\xcb[\x42s\xdd\xe7\xce\xc5&\t\x46" "\x9f\xc1\xd3\xfe@\x8b\?\xce\xa0uO\xc2\x65\x1e\xd9J\xb5&x\xbb\x89\xb6W\xa1X\xd1\x1f\x38%\x42!r\xe7\xd1\xd9\x1b\xd8\x99\x44\xd7" "U\xac[&\x9a\xb5\x16\xb9s\xb1\xaa\xa5\x03\x8fn\xa9h'\x9a\xb7l\xfd\xe6\xdf\x9fi\x30\x1b\xa5\xda\x8a+\\h\xc8\xddi\x90\xc1\x07" "\xea\x61\xb2Y\x89\"Vt[N[G\x35\xd5`\xe0\xb8\x86\xb9*\xa6\x85w\x35\x34\xdd\x39\xc6Q\x19\x7f\x97\xe5x\xb4\xb7]\xc8\xf4@" "g\x1b.o!\xfaY\x17\xfd\xe0\xe1\t\x03%\xa2\xfd,\x83g\xcb\x42\x35\xddx\xe2\x94\xe2\r\xc7\x8e\x44\x1c>\x62\xf9\x90\x9c\xe4\xdb\x63" "\xd0j\xd7\\-\xbe\x97\x9e\x38n\x0e\x1dO\xa3m\xce^>\xd0l\x7f\x93$\xd7@M\x90\xeb\xc1I\x90\xebI\x91\x42\x45\x94\xbb\x43\x8c" "\xa6\x10\x99\xe5\x0ev\x9f\x10\x99\x45\x89\x18\t\x11\xcd}\x92\xbb\x83\xcfT\xf8\xb1v\xea\xac\x46\x0b\x8b\xcc\xdd\x45\xb6\x12\x41\xee\x0e\xc3\\\xb9" "\xa1X\x33Q\xf1\n\x8dvn\x18\x9c\xdd\x86g\xa3\xf0Zm\x97\xdc\xa3\xb4\x92\x41\xe5:\xa8\xda/\x9e$\xf1\x94\xcf\x18\xb4\x12\x9a\x85#" "\xb4\xb6W\xb9u\x62LI\x44\x0b\x9fT\xde\x80\x66\xd7\xe7\x9e\x11\xd7\x64\xc4\"l\x10\xbd\x66\x35MwY\xa9\xe2g\xe9Q\x9b\xe7,\xb4" "\x45S\x84\x36~#\x34\xc7\x63\xee\x19\x35\xa7\x91\xef\xff\x99y\xe4\x39\xec\xae\x30\x9bQ\xc4[+\x1b\xcf\xb6\x13\x8dr\x85\x9b\x85\x9b!\xf7" "\x8cq\x04#\x93V\x45,\x83\x96{\x66\xba)\xf9N(\xc2\x81\x66\x9a\x9f\x11\xe2\xe1g\x66\xe5\x18\xe5\xc5\x62PV\x34\xf3\xeb\x1a\x83\xf5" "\xca\xf6nQm\x98q\x62\xd6\x15\x34\x1b}\x34J\xbb\x1c\x9e\xd7\xe1\xce\xca\x8d\x99\x87\xc6\xda\xcf\xb5\x10'\x11g\xf9\xa4g\xd9\x65\x1c\xb6" "\xbe\xe5\x0f\x62o\x17\x1d\xdf@\x9c.m\x8dh\x15\?\xde\xa4\x93\x0e\xf1\xd3\x8a\xf0\x38>\xcb\x06Gj\xfb\xe5\xdey\xf2\x39\x9aIiW" "\xa1o\x7f\xd7G\xda\xe0\xfd\xccu\xc1j\x0bu\x96\x63H\x15\xa5\x8e\x35Z\xe0\x82j\xef\x88\x62\xcem\x83\xfc\x14<;\x02+]\x84\xee" "\xe5\xb6\xe8\xba\xc8!\x1b\x9a\x17\xf2:\xc1\x83\xda\x92\xc1S\x03\x9aM\xcd\x10Z\x14\x89Pr\x37\x8a\xc3\x36x\x1f`\x9cV\xc5\x1fpZ" " K\xa0Yr\x46\x34\x99\x10\xffnU\x34\xd8\xea.\xfe\xe5K;`\xebv@\xb4q\x38\x13\x99\xdf\xb6\xc1\xaa\x1f|\x8c\xf1\x30\x39|" "\x31<\xbe\x07=\xa2@\xc4\xe6-\x9f\xf7\x0c\xec\xcc\x31\xd6'\"*\xd0m\x38\xa8z\x82\xa9O\xe1\x16i\x06\xa3\\\xd8\xc3\x39\x31\x1d-" "\xb7\x65\xf9\xdd\x62\x1eQn\x9b\x34\xce\xa5\xa0\x63\x99\xd7\xdc\x8e\xc9\xa8\xc4\x83\x1c\xcb\xf3>\"\xd6\xf7\x38\x1bT\xda\xa0}\xcb\xe8\xdf\x12\x8b" ")xh\xe3\xae\x0f\x34\xed\x99Y\x97\xf7\xe0X\xf2v\x83~\xad\x1c\xb3\\r\x9c\rK\x37\xe8\xad\x1d\xeb\xe2\x81\"\xa2\x8bp\x9c\x45M" "r\x9cM\xba\x15\xe9\x43\xca\x07\xb0!\x8e\x8fy\x0b\xad\xdf\xd5\x17\xb9\x02\xcd\xe3\xaa\xb4[m\x05\xa7\xf7\xe0\x45\xcf\x19\x14\x9d(" "\x9e\"\x8e\x9a\xcet\xa9\x12h\x1e\\\x61\x9a\xce\xee\xd0\r*\xa8\xf9\xc8'\x34n\x9an\xda\x16\x1c#\x1dPw\x19\xd1\x9b\x30\x11=q" "]\xea\xb2\x0fZ\x44\x96\xd0\x8c\xbb\xbc\xee&\xe3\t\x8aX\x7f\xe5\x05\x39'q\x36,\x0f&\xbc\x18;\xfd\x42\x98\xe5\xa4\xfcq\xa2\x8d\x11" "\xb1\x85\x9b\xf7\x44\x08u\xd7\x0c\xe5\x84\?\xb5\x89P\xf9\n\xe6\xda(\xbf\x9c\xe1\xa0\xeb\"\x66\xe8\x42|\xc3\xb5|\x0f]\x15\x9f*\xce`" "|\x8f\xe8\x44\xd5\xa6\xe0\x18\xf7\x1d}^{j`\xc1\x12\xe1\n\x37\x81%J\x8c\xb6\xe1\x89\x8a\xdb\x89\x33\xbc.z\xe6\xc2\x62\xb8\x42[" "\xdb\x44Xyw\xc2\x06\x34\x11n\x02\x11\xab\xb8\?\xac|\"\xb4\xbe\x8cp\x8bW\x87\xc1q\x63\xba\xb8\x84i~\x02[\x14\x17I\xea\xd9" "\?\xa9\x8f\x82\x33\xdc-\x96+UR\x1f\xe0\x9d\"\xf2Z\xf8\x80\x17\x99\x8c\x90\x10\xd2\x33T\x9e\x63\xd5\xe9|\x95\x35\x43]\xb7O/\x94" "\xcc\xa2^\xc5\xc5W\xdb\xbb\x43\x0f['G\xd9\"\x1f\x9c|\xefu\xb4\xdb\xca\x39h+\xb5\xe7\xeb\x41~\x14\x9f\x9c\xc1\xa1\xa2\xda\x9c\\" "\x80'\x9f\x61\x37\x10" "!Z\xb1\x19\xb3\xda,\x9c\x65@\xbc\xaeY\xd4\xe8\x82\xe6\x33\x16\xa2\"\x9a\xb1\xe2\x99\xb1R\x99\xb1\xa2\x98\xc5\xb3\x82\x33\xce[\x61\xe3\x38" "W\xfe\x8b\xcd\x88\x32\xb6\x61U\x13\x93\x42\x11\"\x0c\xc2/,\xe7#\x44\xca\x7f\xf9W\xe3\xa7\xfbt\xcau\xfe\x8b\x85\xfc[\x17\xfc\x85\x99" "\xf2\x8d\xae\x62\xfe[w\x98\?\x9e\x85\xefV\x90\xbeYi/\xd8\rX`\x95\xc0\xfc\x02q\xc4\xc2\xc2\x02<\xa9\x39\xc3\xd3\x9b\xe8\xfe\x99" "\xda\x14\xbc\xe0\xb7Q\xd9/lO\x45!\x06\x65\x84\xd2\x81-\x97 \xb6q\xa2\xb0\xcf-\x12\x44|\xb7\xb4]\xc0]\xac\x1c\x83\x16\x63\x9b" "_`\xda\x9f\xd0\xa6\xc6\tm\x44Ih=\xef\xfc\"\xb1)-VO\x86+\xc9\xc1\xc3\x03-z*\x43\x43VW\xb2\xacptP\x08" "\xfb\x66\xf9\xd7\xc9Z\x06\xa3o'\x1b\x44\x15\xd3\x1f\xa2\xbb\xb6\xc4L\x45\xe1\xa6\x1au. \xda\x08_~\xc9\xa6n\x19\x16\xeb\xe0u\x31" "\xc8\x14\x93\x02n\x86\x66\xc7\x32\xecw\x99\x9f\x96\xb4\x31\x96\xb6\x9d\x96r\x98w\xda\x86n*\x8ep\xd9\xf0\xf9\x0e|i\x81\xefu\x44\x44" "\x8b\x08\x0b\x64\x19\xce\x9b \xec\x8a\x65\xf8\xfd\x42\xf2\xc2\xabnh\xf3\xe9\xf3\xcb\xa8\xd4\xf1\xa7\x8d.\xbb\xce\xb8\xfc\x18\xefpG\x91mN" " lv@>j\x34\x9c\x39\xe1P\x84\xc8\x34\x61\xbeZ\"\xc2XX\xc6\xf1\xf8\xbc\x01\"\xdb.Y.\x96q\xed.\xbe\x38\x86\x88\"" "\xb2\xc4\x86/\x42\xd4q\xcbx\xd7!\xef\x9d\x81\x18\xb7\xb3\xc2\xaf\xcdW\xb2\x03\x9eV\"&y\xdc\x9f.\x95\xf2\x80\x94KP\xe2\x84\xef" "\xe4\x12\x44\xeb\xb9L\xea-\xf2\x96\x44J#\xe8H\x88ZuI\x8b\x64\x0f\xef\x7f\x9e\xee\xe0\xfc\x9e]\?\xa5\xd4\xb2\x08\xb6\x12--\xcf" "{]k\x15}\xa8\xbd\x7f\x1aw-\x01\xf6\xc9\xd1\xad\x93]!\x15\x11\x0c\x65\"+M\x15\xd9\x46\xee\x0f\xc8z{\x8fz\xacP\x44\xe6" "\x16\x9e\xb7\x41\xab_\x0b\x45\xbc\x17\xa1\xad\x93\\(\xa2\xbe+\x14q*\x63\xf0X\x44m\xa0\xda\xd2\x99\x36\xb0\xaa\xed\x41k\xfc\xa5\xeb\x63" "\x31\x06\xda\x05*\x90\xf6\xebR`\x06\x8dP\x37\xa5SZ\xc7\x44h}\x44\x61\xf7\x1e\xb4\x42\x63\xc4\xe4\xc8\x42\t\xed\xb0\xd0lv\xe5\x00" "\xec\xe3'\x98\?\\(\x45\x85jT\xc0W\xa2\xcb\x81\xb4\xd6\x98i,\x9a\xc5\x95\n\xf7\x19\xa7\x0e_\x1cW\xd5\x98\xea>\xf3qK\xd2" "\xa2\x8b\x41m\xfb\xc8\x8b\xe6G\xcd\xe6\x99\xa1\xff\x00\xcd\xbbM\xa2\x15J\xe4J\xfe \xbe\xfc\x83u!\xe2\?\\\x16\xde\xa3\x42\x19\x13\xff" "\x8c\x30\x99\x44\xc4\x9b)\x07\xbd\x0ej~\x11\xcd\x64\x13\"!\x18\x1b.\xbcm\x82_\x0b}:[jU\xb4o\x9c\x13\x36\xbf\xd0\xec\xed" "\x42\x99/\xabl\xb5\\\x0by\xdc\x34\x94X\x88\xab\x07\xccX/H\xc3r\xe1\x8c\x32gX\"\xb7P\x43kQ\xa8#~\xc9\xa8\x86\x8f" "\xf5 \x45\xc3\x1b\xae\x87\xd9\x01hN\x63\xa1\xcd\xe7\x32\xa2#Y\x90~\xca\x04\xb4\xc0\x13\x61\x87z\x87\xfe\x95\x42\x9d\xef\xa8\x8eX\xa6\x42" "\x1d\x39\\x\xbc\x03\x9fJ\xa0\xd5\x91\x05\x35\x94\xfd\x42|S\xb4\x7f\x0bm\x66\xeb\xb6\x94P\xbe\xa0N\xd0Y%\xb6\xee\x8b\x88\xd6\xe8\x17" ":h\xf4\x0b\x1d\xa6T')Xn\xba\xe7\xaf_\xd1\xe9(\xcc\xb5s\x66n\xc0\xc2\x1c\xde\x46\x7f\xd7\xc5\xe2\xef\xcf\x14\xdc\\\x18\x03\x0b" "\xaa\x10Z\x84\xb6\x31(]G\xf5>\xb5\xa9\xceg\x38\xad@\xb3\xb5z\x84\x45\x9c\x0b\xd5\x86\xd0l\x04\xe1)\x7f\x65+\x8e\t\xcf\xf8=" "[\t\xdf\xa8S\x04lm\x66\xd3t\x17\x02[\xf0\x42\xb4\xee\x94\xe4o\xee\xa9\xdb\xfaR\xc5\"V\x9c\x17Vp\r\xac\xc3\xa3\xbcq\xa6" "\xeb~\x88V\xe3\xd1\xfa\x02\xbc\xfcv\x62\x46\x92\x88\xe6\x98\x12\xb6qs\x18\x41\x16\xde.\x9c\xe9W\xefK!o+\xfch!\xaaU\xc5" "\x1f\x63\xa4\xbb\\*m\xb5x\xa1M\x9f\x31\xfa\xed\xa8\xb8\xc2\t`\xe0\x08\xcdY\x63\xf4G\xc6\xb2\xf2\xc6\xf4\x87\x83}\xfa\xe9m\x36\x15" "\x9f\xf0>\xa2\x97\x95'q\xb4\xfat\"\x17\x8ah\xfe\x1b\xe1\x06\x0f\x88\xdaOh\x13\x1a\x84\xba\x94J%\xbc~\x83\x66\x36\xbbQ\xab\xfe" "N\xd3\x35\xec\t!\xe2\xd9\xb7\x13\x9e\x42\x11\xcf\?\x10\xe0!\xe2\xf5\xab\xf6\x39\xf7O\x07Zt\xbd\x83\xd6\xed\x62\x1a\x8a\x88\x93\xbd\x33\xe0" "+Rq\x96M\x45_\xbe\r\x1a_\xbe\x88\xfeT*N\xa6\xa9\x66\xeb\x85\x08\xe7\xbc\xb0\xc5\x95\x18\x7fw\x1d\xdd\x11\xe9\xad\xe5\x07\xd2\x0b" "\xce\xc7\xfes\x84\xb3\x0b\xb3x\xa5\x30\xb2\x8d\x9e\xb0\x08!\x31\"\xce\xa5\xc8\xb5\xbc\x95\xf6Pt*\t\xb7\x96\x45K\xf0\xd7\x16K\xd8\xde" "\xaeX\x42\xef\xb9XJl\x34\xadx\x8a)\xce\x45\xae\x7f/\xb4\x91\x8a\xe2)\x86r\x95K\x10\xc5\xec\x34\xa8,\xc0\x0b~n\xcd\x90\xd0" "\x9aY\xa1\xee\xf1\xaa\\Q\xb7\xd8\xad\xe2)\xc6\xe9\x84\xe6\xb8\x15\xda:\xdc\x46\xdd\x35\xd7:\xce\xa6\x31\x39N\x11\xd6%\xb4\x39\x65\xc2\x1b" "\\\x08\x9dH\xa1\x99\xf0\xc5S\x84\xe8\n\xafkN\xb1\xdem\xe7\x65\xd5l\xbeh\xf1\xd4\xcf\x8a\x89\x0c\xc2g\xdc\x0e\xd6\x9c\x12\xee\x1f\x9d" "\xb6\xf3;\xc4\xa8\x34\xc0\xfa\xff\x07\x9a\x7f\x8c\x08.\x61\xb1\x42\xe2\x8ap\x80\n[V\x02\xcf\x98\xb0g\x41\xbe\x8c\xa0\x9d\xa2\xfa\"\x83\x87" "k\xac\xa4Q\xe4\x00\x87\xb0\xbc\xb3\xa3}h\xf7o\x18\x8c\x10\xd1\xe2)\x8cZ\x46n\xde\xd3S>\\\x63,_\xc5\x39\x38*\xda\x06\xcc" "&\x8e\x30\xf0\x05\xf1v#\xf5'Z\x61\x39\x80\\r\x86\x88\"!\x32\xfd\x19\xc2N\x85\x1f\xbc\xb7\x05\xbf\xbf<\x93\x9bO\xba\x95\xf8\xf4" "\x1f\x0f<\x82\xabK\xa7\xce\xfd\xb6\xd1\x08\xd1l!j\x65\x33\xfe\xea\xa4\x17\xdd\xe0\x37\xbaM\xfc\xc5\x39\xd3\xed\x8c\x19\xe2\x0c]\x1a\xa1\xf4" "n\xba\xb8Hx\x93u\x62[\xcf\xf8k\xc1\xfcj\xc7\x96\xfc\xd8\x9a\x31\xe1-\x92\x37\x9cV\x9dI\x97k\xb2\x8b\xf6\x85\xbb@\xdc\xba\x11" "\xa6V\xf1,j<\x06\x45\xa9\x14u\xc1T\x04\xa3\xe3\x98\r\r\x42{.;\xa3\x61\xcd\x45\x38\xdb Nx*\xff\xf9\xeaQ\xcc\xd3\xa0" "\x90\x0fl\x8b\xcb\xe2Y\x9c=\x43/V\xc4\xe3S\xb2\xed\x0f\x8f\x8e\xadpz\"I\x8e\xd1&\xd1\xe6;V\xa5g\x88\x38\x32\xa2\xc1\x17" "q\xdf\xd1$G\xb9\x87N\xbc\x8a%g\x34\x7f\x0f\xe7\xfc\xa2M\x36T~\x91K\x10" "v\x84\x92\xf9\xae\x02\x0f\x8e\xf1w\xb9\xf6\xa4`JW\x30\xe1\x41h[\xed(k\x64\x9d\xe4\tO:\xe4\x03\xf9\xe2\x0c\xf6\x37\xe9YO" "^\xa2\xceMP\x1a\xb9&I\xfa\xf7\xd9\x37X\xe2\x15N;N\xa9\x34\xd2\x15\x06q\xa0\xbbJ\xc5M\x16k\xe9\x98\x86^\xac\x8a}\xb0" "r\x42\"\xa5\x83\xf3\x82$g\xe8\?\xb0\xe8\x1a\x65;\x98\xd6X\xf7V\x10\xa0^\xe4\xa8\xa3\x92)}\xc1\xe3h\x0c*\xd8\x42H\xf9\x0e" "\xd6\xb6\xe9G\x97\xc8\x08X\x8a\xdax\x98\xb6\x36\x04\"\xec\xf0&;\xbc\xe9\xee\x80\xe4\xcd\xfaS\xf6y\x9bw\xbc\xa1\xbb\x37\xf0\xa1\xe2\xc4" "\xba|\x10/\xde\xc5\xb2\x0b\xafNX[\xe9\x31\xf8\x14 \xa2%Q\x91\xcd\x84\x89\xe6\xaa\x80\xf8>\x46\x90!\x35\xde\xdb\x83\x9f\xe1)\x9e" "\xdf\x61\xc4X\x35\xfftN\xcb\xa4\x12\x8cR\xc2W\xa1\xe2\x35\xc9\xcc\xf9\xd2v\xa6\xb7\x80*Z\xd8r\x62\xa0\x05\x62\xfa)J\x1d\xbc(" "\x46,\t\xae\x62\x1f\xeb\x41\xaax\x07N\x99\xf8\x33&\xdfl\x16|\xae\x11\xef!\xda\xe7\xa3\xbc\xd8\xe0\x9b\xcf\xbd\x18\x39i\x00V\x82U" "!\x8d/\x33-z\xaa\x85\xa7\xba\xd9\x30\x62V\xf4\x18\?[\xaf\x9c\xc1\xe4\x1b\xee\?\xd1lV\x96\x92\xd9\xc7\x66g\t\xb7\xc3`S\xd5" "z\x46\xea\xcb\x89\x1f\x63i\xd9\x32\xdf\xd8^\x06\xc5\nzu\xc6\xdf-*\x08\x0c\xf4+_H$\x13\x1c\x08\xc2R\x83\xbc\x01O\x8f\xc1" "\x32\x7fW\xae\x90\xcf$\x7fo\xc3\xf6\xc2\xb3\x37\xf2\xdd\x19\x36\x9b\xc9\x86g\x85\xed_\xc1>\x1a\xca\x0b\xa7\x94+\xb8\xdcU\xe3\xb7\xeaH" "\x8a\xb0Q\xd1O\x99\xb0\x34\x86*\xe1\xd5\x07\x39w\x1e^\x89\xa5Q(i\x15\xf2\x35`\x7fW\xa3\xd4\x85\x34\rL\xb3\\\x9fj\x93;" "\x84\x85@\xdb\x1c\x05O\xe5\x03\x8d]\n\xd5\xa2\xf5\x00\xeb\xf7\x99\x16\xdf\xe7\xbd\xe2U\xcd\x97\x34\x81\xf6~\xec\xf5\xb9h\xe9:\x8f\xa2\xdd" "\xe0\x05\x87->_\xeb\x9b]\x8c\n\x86\x03\x95+\xa7\xae\xc7o\x03\xf1\xa6\xa5\"Z\xf5J\x38\xe0\xd3\x0f\xa8\xdf\xf2\x8a\xb7K\xa7\x17\x06" "\x84 \t\xcdY.\x1c\xdf\xc3\?\xa0\xe2\x08+u\xa9\xf8\xe8\xf4j'\x9c^jK\xb6\xe2{\x9e\x0e\x9d\xe9\x99Y\x89\xea\xbe@\xb6\xb5" "\x61p[\xf0\x03\xb6|\"\xaa\x82\xf0\x83\xf7\x8a\xdeXZ\xb3 \x66S\xd9\x8cJg\x14\xd7N\x36\xe8&\x9e]\xc3g \xda\xf2\x94|" "q\x1e\xe6\x18\xd3h\x0bW\xbc\xf6\x0e\x37\xa8\xdf\x30\xe1\xda\xc8\xae\x43\x05\x8b\xd2*\x7f\x9c\xbf\x9b\x8c\x9fN\xb5}/<}p-\xa8\\" "!:\x05Z\xda\x11\xa2\x46{\xc8\x34\x8b\xf8K\xee~\xe0\x93\xb0\x63\x87Z\xa1u\xd0\x08G\xa5\x13\x12\x0f\x85\xf5\xc4\x85\xe7x\x37Q\xe3" "\xde\x19\xe7P\xd0\xdd\xda\x10\x46'\xdfp\xeb\x17\x19\xa1\xa1\xfc$\xbf\xfc]\x45\x97\x0b\xadJ\x46\xfe\x01\xd2\x19\x63,\x46\xb1\x64\xd3'u" "-M\xa6&\xca\x18\x1c-\xc2\x0eO\xda\xdd\x44\xed\xc9\x81\xe8/-\xea\xfd\xe8\x34\xf1&\x32\xa7\xe7r\xc4\xd1\x1a\x11\x18\x0em\xf8\xe9L" "\x1dI\xae\xc1[*\xda=\xef\xf3q\x9d>\x90\x89\xba&\xc6\x45\xc1+_\x8c(\x0b'(q\xd1\xc7\x8d\xb7\x95\x34x+X%_\xd9" "@\xe8\xa4\x8a\xc8\x8f\xec\x85W\xa2m\xdb\xa9\x0b_y\x9an_\x9d^\x9d\x88\x98\xbe\xaa-\x92\x01K\xc0\x17\xd3&\x33\xa6!\x16g\xdb" "\x07\t\x12\x17\xb3$^\xac\x0e\x00\xcb\xcb\xa9\"\xfb\xc4gO\xe4\?\x12\xb6Y\\\xb9 Q\xd6\xe3s\xf2\x02\xd9\x08Sv\x84L\xac\xf8" "\x31\xe3\xf4v]\x45\x0f\x95\x31-]\xa4V\xb5\x82\x33\xfd\xfaS\xc6yx\xf7O\xc7\x92y\xa3\xc1\x8bk\xf1~\xfc\xa7\x15\x9c\xe9\xea\xe9" "\xa2\xa1_Y\x61\x7f@\x38$\xa7$\xbf\x37\xd9\x91\xc8\x46\x18\x85Q\xd6\xc8+\xb2G\xceI\x64g\xec\x8f'\x9c\x0fH\xa6\xef\x9c\xdf\xfb" "\x62\n\x7f\x31\xa5\xbe\xaaN\x8b\xae/\x07\xfb\xbc\xc6i\x94\x8b\x08\x36\xd4O:$\xef\xf4\xfb\x33>:\xc3\x92>\xaa\xa1J\x8d\x97<\xcf" "\xcf\x89SR\x31\xde!\xf3J\r\xea\x99\x16\x8b\xc1\x15\x19^$\xdc\xf1\x06w|\xf0=\x13|\x7f\xe9<\xb0\x14\xb0\xb5\xb6\xd2u\xdc\x14" "}$\x15\xf8\xf7\x95H\xde$\x8f\x0c\x94\xa0S\xa9\x0c:S\xcc\x8a.\x32\\\xc9xP\xaf\xa9v\xf1\xec\xa2\x97\x1a\x11\xadS\xe3\x1f\xd4" "\x9c\x08Z\x13\xb1\x81\xba\x36\xb9\x44\x15\x82\xd5\xd8\x85\xcdg\xe9\x19\x84\x03\xbc/,\xde^\x64\x18\x94\x91\x06\xe5\xf9\xef\xf2\x8d\x46\xe2\x39\x8b" "\xd7y\x90\xbf$\xb7`u\x10vz\xccK\xe7\x98W%\x84\xb5}\x8e!\x36!\x8c\xe2sv\xef\x94\xba\x66.\xaat\xd5\xfe\x8c\x41\xd3" "\xd2J\\\x35\xf5\xbb\xd8\xbe\xf7\xaa\xbd$\?y\x88\xe3\x17\xbe\xc0s\xdd\xfd\xe8\x0c\xb7\x89\xf9x\x42\xd8^\xca\xa0\xac\x7f\xa9\x66\xd1G\xc5" "s\x96\xa6s\x0c\xf8\x1b\x03\x8b\x31\x10\xb1y\xab\x0b\xcb\xd8TR\xd7\xe2\xf9\x03\x34x;\xcfm\x8b\x0e\\\x9d-\xda\x39\xd6\x8c\x34\x86\x37" "#:\xbbT\x8brO:\xf8\x30\x45\x82\x45\xd9Sr\x02\x96p\xd5\xa8|\x11=\xe6)\x36\x9d\x18\x96\x15\xf1\xec\x95\xe4\x45.o\xe2\x46" "\x8f\xe2\xc0\xa9]\x87\x07m\xb1\x98\x39y\x8cM\x98j\xf8\xd8\xb5\xbf\xb3\r\xf4\xef\xe0\x03\xd3\x82\xc1Jr\x13\x82\xd5\xf4\xf0\xf4w\xfb\x19" "\xd8p\x88h\x8f|\x1c\xf8T\xcf\xe3\xdc]|\xd1\x0b*H\x9e\x98\xb9$>\x1dy\x32\xd1Q\xaa\xb4\x85OK\xd4~\x30\x12(\xa2\x1f" "\xaa\x9e\x92\xc3\xa5\xe9\xd2T\xb2\xb5=" "G\x14\xa1\x31\xe8#\x99\xb1\xb8\x90\x12\x99\x15\x83\x46\xc2%\x7fm\x83G\xca\xb1\x93\x8e\x18\x11\x91\xdc\tz-\xe7\x18\x91\x14\xa2\x7f\"\xfc" "\xa7\x86\x08\xd2\xb8\xcag\xad\xfen\x1b\xb4\xc9T\x8c\xef\x33\xf1\xdd\xbdk\xac\x7f\xaa\x18\xc3-\xea\xfe\x9a\xba\xa6.<\x07U\xc4\x1c\x16\xab" "\xa9^\\iH\x01\x1c\x13U\xfa\x11\xb8\x07\xa7\xd1\x16\x8cX\x1dhl\xf8\xaaLl\x65\xba\x02\xb3h\x36\xdd\x44\x08\xb3\xb6J\xef\x15\x83" "\x98\x84\xe8mVu\x9d\xd8\xd9\x80\x0e\xb1*\xf3\x92R\x9d\x07\x30\x30L\xf3\x8b\x98x\xf8\x41w\x85\x45\x08L\x0b\?\xde\\T+\xec\xf4" "\xf9\xbfg\x91\x16\xff\xff\?\xe6\xbf\x86\xa7N\xa9_\xb0m\x98T\xf3OW\xc1\xfb\x12\xe2\x82\x1f\xe1Mq\x03Q\x61\xa9\xa2{\x42\xc3p" "\xa9\x62\x35&\x61S\x37\x66\xf6t\x44\xe0\xa1\xd0\x82{\x8b\xba\xd7'[\xe7\xaa\xd8\xe9~\x31\r\x0f\xf2\xa3\xb0\xda\xab\xe1\x62\xe6\xd7S_" "\x1e\x13\x15\x03\x85\x42\x98\xc0U,\x08\xa7\xac\x83hH\x84VkW\xb1`\x98\xf0\xee\x8e\xc4y\xc4\x9a \xeb~j\x11\xd3\xa3\xbc\x17," "s%\x9c\xbf`\xb2\x86\x88\xe8\xa6(\xb5\x82\x87\x8f\x88\xdb{\x16\xab\x9e\x03\xb1\xf2\xb1T\x34\xcb\x12\"}U\xac\x84\xf0\x46\xd6\x30;\xcb" "H\xcb\xb7\x86q\x7f\x63T\xbcJ\x45\x34\x01*&\x9d#\x8a\?\xe0\xcf\x99\x33\x1e\xed\x83\xde-\xb5;p}O.\xc0\xcd\xbb:\xbe>" "\xac\xe0\xd4\x10\x10#\xcc\xe7\x9c\xc1\xc9\x32\x15\xa5!\xb3\xb9Y\xaa\x95\x9cI\xf3\x35\xb2\xf9\x8c\xae\xc9\x1f\xb5\xa9Sm\x9b\xf4\x97S\xdbJ" "\xac\xe6ZlK \x88X\xb8u\x86'sV\x8c\xb5\xa0\xe8}\x80Zp\xd2v\x06\xa7\xaf\xec\xc8\x98\x36\x9b\xa5\"\xde\xb2\x8a\xe1Q\xfd" "\xe0;\xe1\xd1:<\xcb\xa4Z\xa9\x1cW_\x62\x98\x19z\x00\xb3\x1f!\xc2\x34\x30\xf1\x36\xeb\xa2|\x37\x18|\xb9\x96\xd4\xd7\xa9\xf8\xf3\x98" "\xfc\x30\x31\xf0\xcek\xc1\x19\x9f\xe4l\xe2\xd4\x11\xbc\t\x13\xa0r\xeeL\x83\x63M\x93\xd6\x33\xb6\xa0\x03\xd5\xfc\xbbL\xc2s\x1e\xaf\x96\xa3" "\xf3RxS\xa0Vs\x46\xc3'\x0c\x34\xabv\xef\x0c\xbb\xcfXq\x13\xda\xc7\xe7\x81\x98^\xb8z/\xa7\xa4MS\xc3:!\xc6\xbf/" "|\x80\x17'\x98\x9b\xaa\xe2N\xfb%\x8fL\xcf\x06\xd9\xe4\xf2\xb1\"\xb6\x98\xb2\x9d-\x36\xe7\x15\xb1[H\xb3R\x8f\x87z\x1dpp\xee" "\xc4\xe4Z\x17\xd3[P\xed!\x9c\xdd\xba\x46\xe3\xae\x16\xf8\x0b\xba\xbb\x04\xa5\xd6\xdf\x95\xa2<\x9f\xf9~\xaa\xa9\x05\xf7\x90h\x9fI\x8e\x17" "zx\x42T\x8b\x8a/\xd1\x9e\xaf\t\xce\xbf\x1a\x36\xb4\x11\xbe\x30\xbf\xf9\x43\x8d\x9b\xce\xf4z\xe3\x66X\xee\xd0wP\xc3|Y\xa3\x17\xb7" "`RL\xaf\x34)\x39\xd3\xe7\x12\xcb\xda\xa2\xbe]L\?x\?\x8b\xb7|\x9d\xefLJ\xb1\xfb\xba|Z\xb8\t\x95q\xb3\x1a<\x17S" "m>\xf9\xd3\xfaN\xaf\x41\x44\xfc\xf3\xc6\x9bvR\x0cJ\xa7\xc1\xe9-}\x8a\x38\xf6\x9d\xbeO\xd1<\xfc\x14\x9a\x18\xab\xf7\x9f\xa9\x86v" "\x43\x45V\xfb&\x9e\x0f\x39\x66`Z\xef\xe2\xe0\xf7XV\x0c\xe2}=\x15\x9f\xef\\\x8c\xae\?\x10@\t\xedv\x8e\x15\?\xa0\xad\xd2\x1f" "\xc7\xd7\xc7\x07\x1f$\x97\x93Tl}G\x8d\x05\xb5\x99\x33}\x17\xb3Y\xf0\xbeJ\xc5\xd9\xfb\x81\x98&\xfc\xe7\xd4\x99\xfel\xd1s\xa6\xdf" "\xf2\x89Z*\x32\xe9\x96L\xb4\xe5\x85\xe4x\x8e\xf7\xd4\x30\x83\xc6\x98\xfe\xe0\xe7\x33-\xcd\?\x9fq\xb9\x19\xd5\xbe\x83\xec\xfd\xe1\xb2\xbb\xf2" "\xc9\xaa\x41\x32\xcb\xadPr\xc2\x93\x13g\xd2\xc8\xd0\xc4\xaa\xd1\xa1\xea\xc3\x02\xc2&\xf9\x1e^\xe1%\xa9\x91'\x1d\xc7\xaf\x07j\xa3\xf4\x37" "\x37g\xe4\xb9\xd3\xef\x14\xdb\xa8\t[\x39\xf9\x83\xd8\xe9\xb2\x0f^\x0b\xbb\xff\xd8\x63\xa3\xe8\xb5\x1fVsQ\"\x81\xc3~OJ\x61P\xe5" "\xa7\xfd\xd7\x64\x86\x9c\x1d\x0ej\x64\xd7yPM\x86wYo\x11\x42\x96\xb6\xf0\xb1\xeb\xd4\xd9[\x17\x15\xd7\x92\xe1M\xaa\xbd\xdc\x80\xe3\xfb" "\xdfU\xcd\xc5\x30\xf3\x92\x8a~\xff\xe3{\xacVj\x62\xd2\xe0\xed\xa1\xdf_\x0b\xdf\xb9J\xa6\x88\xf0\x31*\xd3\x94\x99.\xb1:\x80\x88\x33" "\xde\xeeG\xcb\xe9u\x98\x88\xde\xc2\x88\xe8U\x16\xe6\x46(\?\xc5\x06\x80\xf8\xc5\xfb\xf8\xb9v\xa6\xdf\xfe\xd9\x39\xd3\x8b\xaf\xd0\xbc\x86\x1b\xb4" "\x02Q\x66\x1f\x65p\xd7R\xf1y\xdd\x17\x15N\xbd>\xf3\xeaI\xf8w\xa8\x45v\x9c~z\x15\xd9\x88\x46\xe5I\xfa\x83\xf3\x92SZo" "o-\xf4\xbd\xe6\xbf\xd9\xcf\xfd\xd3\xe2\xf9(\xfa\x9a\xe8\xactV}\xf8\x84\x16\x96j\xe1\xfa\xce\xabnm|J\xef\xe9\x19/r\xe9%" "\x1b]\xf2\xdd\xa9\xab\xf0nx\x9b\x8do\x44\x8f\xba(\x16\x19\x9d\x32\x35\xe9\xbc\x61\x31\t\x13\xff\x06\xa7k\xd1\x35\xaa\x8a\xa8S\x08\xe7M" "\x0e\xf2\x8aV\x65_\xa2\x86)\x64\x46\xb9/vt\x44\x9b$\x1f'\x14\x97N\xbd\xf1\x39\x9f\xa8\xb3s\xfe\x39\x61knH\x08\xd5\xc4\x63" "-lZ/z\xfb\xf9\xd3V\x1c\x80\x31\xed\xcfR\x82\x96\xa6\x8ch\xab\x07\x8e\xa9\xa8\xe6\xa5]\xc4\xb8\xf8y\xf0\xa3\xc3\xe4\x1c\x30\x63\xdc" "^;\x83N\xc7k'\x31\x1a\x9cq\xe5)\xcd\x39\xa2\xfd\xb5\xa1\xd1\xd3\x91WJ\x88\x32V\xda\x0b\xdd\x1dj^\xe8\xa3\xb7\x91~\x36\xe2" "\x93\xff\x43\xc1\x8d&\x15\xa7W\xfc\xd1\xc4\?\xbats\t\x41\xdf\xca\x81\x9b\x8e\xd1j\x98\xa6\"\r\xd7hs\xa5)\x7fGm\x9fw\x86" "\x8d\x1b/H\xa2\xb9U\xacS\xcc\x36\xa7n\x13q<\xbf\xe6\xef[\x43\x97\xd0\xf3\xae\xe9\xac\xf4\x87\xa7\xe0\x1c\xf5\x65|\xfe\xe1L\xbf[" "\x45z\xc7\x1d\x99j\xba\xc5\x11\x35\xda\xf1]\xdb^\x31\x9b\x8a\?\xfb`\x30H\x0f\xac\xae\xc2\xd3m|\xfd\x9a" "j\xfd\xf7\xf4\xf7\xa2-\x97\xae\xd9JO\xe9\x95\x84\xc1\xcf\x15\xbc*\xa5\x39\x02\xa4\x8c\xa1-\xfc/\xa2\x39IJs\xec\t\x63\x84\xf7\xca" "w\x9e\x35\xa2\x02\x80\xb8I\x8f\x06O\x97\x41\xed\xe6\xf0\x80U\xe7&\x62l\x0e\xe2{\x06\xeb\xfe\x89\xb6;r\x46\x83\x11\xc6\xd9K\xf3\xd0" "\xc2\x97\x84\x37\xb8=\xb1L\xe3\xdd\x33\xd2\xbf\x34\xc7\x1e\x1e\xc6\xa0~\x86\xadKJs\xc4\x02\x08\?\xce\x0e\xbe\x8b\xb1&\xa3\?\x85\x8a\xbc" "-\x11\xa5\x08\xe3\x83\xd3\t\xe6\x34\x9e\xed\x82\x93#\xd0^\xd5y\x35\xb1\x81\x97\xea)\xf4\xea\x35\xa2\xb6\xaa\xd7\x18Y\xa8\x17\xa5P\xaai" "\xf2\x38Gm%\x15\xa4\xcd\xe3\x36\xa6\x61\xeb\xa2\xd9`\xba\xf0\xbc\x0c\xaf\x9e\x88\xd6\x41\x30\"\\\x01\xa2\x65\x44\x88\xee\xcd\x17\xcd\xda\x42\xa1" "\xcd\x8b\x33\x86\xb5\xe3`\xcb\xd6S\x0e\xd8\x84:#\xfa\xa6\"N\xaf\x9d\xd1)/\x65\xf3!\xeb'\x98w!\xb4\xc6Nh\x36\x8a\xf0\xfd" "\x0e\xe4-\x46\x99\xa5\x33\xban\xa6Gy\x36!V\x87\x30\xd1\x1f'\xba\xc6\xb3\xc0;#\xbc\x1d\x83\x63\\\x03\xa6\x91\x11u\xbe\x8a\xb8," "z\xbc\x46,\x37h\"\x02\x14\\L\x7f\x63Z\xfc\xf7\xcb\xa8SO\xc5\xc9\x65\xf4>s\r\x93x\x45\\\x17\x9dh\xb7M\xf4\x04\x14\xd1" "\x13\x1b\x83\xd2\xd2v\x1d\xb7\xc1S\x9c\x19\xeeK\xe1\xfc\x9f\x31\xb9,\xa7\xeb\xd7\x8b\x36\xc3\xf3&k\xea\x9b!\xe9\xfa\xda\xc9g\xe0VN" "\x42+\x0f\x46\xde\x8e\x8aht\x45\xb4\xd5\xe2\xeb%\xb8\xe7\x85\x36;\x43\x88<\xa1\x0c\x9f\xce Z&\x35\x62\r\x61\x11mh\xa1^\n" "K\xf7\xa0\x45\xb5\x08\xef^\xc0\xe1\x10\xb4\x19\x36\xf5RT\x82\xce\xd7'\x35\xbc\xe5\xa6Rl\xcb\x65\t\xfb\xb8\x41\x04\r\xd7K\xd8\xec\x45" "\xf9N~\x82\x36*)\xb4\x00\x39\xe1v\xcfS\x9c%\x8d>S\x80\x8bK\x0bq\xe3\x17\x89\xd9\x36\xf5z\x1a\x95 \x62}\x97\x34\x8et" "\x43Y\x14\xb0z\xd2\xc8\xc3\xca\xaf\x37\xe0\xe8\xa9sK+\xe1\x45%\xfc\xb7\xc2$\x17h\x1f\xdb\xf8\xb5\x04\xcd\x06\xc0\xeb\r\xe6\xf9\x46\xf4" "\x86s\x44k;m\x43\xbe'\xdf\x46\xaf\xba\xdeH\xea/N\xdek#i\xd4\xc1\xd1\x17\x88\x17\xae\x44\x85h\x62p\xd2\x44\x33\x0b\xcd\xbc" "\x8b\x10\x0f\x8en\xaa\xe1\xe5\x1a\xe1\x9bv ,=\xb1p\x99\xc6;\x14\x31\xba|\xf6g\xd3\xe6\xcdj\xd1z\x0b\xe3!\xc2\xbbZ\xeao" "\x12\xcd\\\xda\xf5\x16<\x45\xf5\x16,\xc2\xba\xf4\xc3\x33\xd1\xfd\"\xceZ\xee\xe9\xa8]\x62UZ\xbd\x63U\x97=[\x97\xe9\xdf\r\xff\xed" "\x8c\x1c\x32\xb5\x15\xca\x45\xbb\xf9\x00\xad\xf9\xae\xf7\xe0\xef\xaa\xf7x\x1f=\x38\?\x85\x0fs\x44\x88\x8a\x88\x9a\xa6\x87\x19_\xf5\x1e\xcbN\x0f" "\xc3\xd0\x42\xdby\xa3\xde\xc7\xea\x99\xf5\x01\xd6\xadQ~\xf2=\x0f\xd0K\x12\x9a\x33\x44hs_\x84\xc8\x33\x03\xf8M\x84\xd6`\x1a\x61\xc2" "\x88\x88\xab+\x61\x12\xd4\x07\xe8G\nk\x05p\xd4\xc6*\x03*n\x9c~\x02\x11\xc3#\x06\x9d\xd4\x07Q\xe6+|oH\xc7\x10\x9a\x05" ".\x19\xb1\x08\x8c\x88'\xb8\x05\xa9\x0e\xc2\xdes\xf0\xf3\x17\x1f.\xc7l\x63\x13#\xfa\x95\"\xda&<\xc2\x9f\"h!\x86\xf5\x01L~" "\xa3\?\xbc\x8a\x66y\x41\x34\xef\x98\x89\xe8\xb8\xd7\xb9\xf5\xb4\xf0\x11\x1f\x89\xd5\x11n\xaa\x18\x8e\x36-\xd9p\xfcR\xb4\xcd\xb9\x13}i\x15" "\xad\x02\xbf\x65i\xbb\x63\x86\xb8\xc3\xf8\x66}\xc8\x12\xa6\x64\x41Q\x31\xb1\x45\x96U\\\x82\xe6\?\x31\xa2\xf7P\x1f\xa2\x1dU~\x83\xa8\xd0" "\x87\xcc\x33\xca\xe8|\x1d\xd5s\xd0\xcc\xed/\xb4\xc5N\x84\xd5\x12\xd8=\x01\xcdnV\xe2\xc2\x18,\x13Z\xf4\xbf\x10\x95\xec\x90\xb5\xdcP" "\xd7\x66\xe6W\xa4\x84\x90w\xe4\x1e\x1c\xcc@[\x1dNh^/\xe1\x12\xa7\x88\xb2%r\x02\xa2X\r\x31\x91Ix\x31w\xc2\xa2\x80\xb8" "\xea\xe4\x0e\xb4\xe8z\xe1" "\n\xaf\\\x83\xb9\xac\xe3,\xa2\xf9\xe5\xea\xc3\xf8\x08\xaf\x1c\xfd\x03\xa1\x45\xde(\x91Rl\xd0\x84\xe7 Z\x61\x65\x90\xff\x17T\x97\xa9\xc6" "\\\xa0\xa2\x87\xf4\x42\xf3\x10`\xd1.\xc7$r\x44r\xc5\xe3}\x1e\x7f}v\xfe\xa5\xcc}\xa2\xe3\x80\xf6.\x1e\x10\x08\xe5]K#s" "\x9b\x89\x30\xb4T\x0c\xe7\xfd\x03\r=/\x11q\xe8\xf1w=\x05Q\x86\x95\xf1\xf9\x1b\x9b\x91\xc7\xe0\xac\xe9\x64\xd5\xf2\x08\?\xaa\x31=\x64" ";y\x08G'\xa0\x99\xda\x42[&\xcd\x98\x0e\x9c\xa9\x36qj\xc4\xb7\xc5\xb3\xd5\x1f\xb1\x0e\xb7\xf0\xec\x07\xbc\x32#\xe5\x31\xda\xd9\xab~" "\x8c\xe7\x0f\xc1h\x8bm\x12\x45\x33\xcbXy\x01\xee-\xa3\xee\xd4\xf1\x61G\xec\xaf\x82\xe3\xfc\xee" "\x87\x93\xef\xc6\x44\xa4\xf2L\x0e\x45\xad{\x88\xf9\xef\xc8V\xc3\x15\x11\xb5\xfa,\xa8\xbe'Gm\xac\xde!\xda\xdd\x8d\x13\x43\x03\x10-^" "S\x44\x0b\x06\x31\xfe\xae\xca\xc1\xb4\xa6\x61\xa5\x93o,\x61\xac\x87\x7f\xc0\xf1\x63x\xcf_\xd8PS\x9d{\xa1(\xad\xd1\xe2\x83\x84\x99o" "\x9d\x03\xbe\xc2}\x62l\x45\x88~\xd4\x8c\x16\xcdLG\x30l\x31\xdc\xfa\x8coz\x86\x38Z!l\x90\x19{(\x33V\x81\xb3\xe8\x03\x9f" "K\x1a\x1d<\x1c\xbb\x13\xb3x\xba\x00Q\x31\xce\xe2/\xe8I\xbdO\x0eh\xd7\xcf\xb0V\x8f\xd0\xc2y\x84\x16\xa5X\xff\x64Q\xf8\x64\x1b" "\xf9\t\xa7\xad\x31\xb8\xe8\x63 \xdb\xb4\xf0lx\xa0I\xd5\x9bjx;\x9f\x18\x94\x13n\xa5\r\xc9\xd0\xb2\xfc\x64\x86\xf8\xd4\x99\xecw\x97" "\x61\xdf\xd2}\xce\x82\xfb\x15\xd8\x44L!\xec)\x86-\xd7\xbf\xa2\x8e\x15\xe8/x\x9c\xebkl\x9d\x63\xa4\x41\xa4\xa2\x8e\xea\xc1\xb8U\r" "\x13^M\xc4\x1a\xac\xf5\x35\xbb+k\xda\xafk\xc4\x1a\tO\xf0+\xcc\xa1\x17\xda\xea\xf7\x42\x9b\xf0#\x44%\xbc\x0ezm\xa9[\x93\xb7" "\x1bh\x30\x02\xd7\x1a\x13[jH\x95\x9cj\xbd\xe7T\x84\xe1\xb8\xe6\x03)\xe5\xe4\x34\x94L{\xf8\x39\xd4\xa6\xb3\xe4\x32\x03\r\x8f\xbe\x66" "\x61R\xd2\xa6U\x31\xb9\xe4\x93\xd8~\xad\x42\x1b\xbc\x10Z\x14\xa2\x91\x85y\r\xdf\x85\xf0|\xe8\x64\x8fn\x1d^\xe5\xa5\xed\x44\xb8\xbeh" "\xdd\xe7\xa0z\x8d\xa0\x42\xd5\xf8\x9d\x1e\?\xb5Y\x90\x42>\xa7|/\xd8\x35\x83\x02R\x0e\xb1\xeb\xca\x0ek;\x8a\x34\x10\xd6\xec\xbb\xadi" "I+\xa3\xf3r|\x94\xd1\xc9o\xffG\x0f\xdc\xcas\xfeo\xf9\x1f\xbd|\xff\xaf\xe8\x62\xa8\x0b\xbf\x88\x16O\xf0\xcc:\x83\x9a)\xc2Z" "}\xcd\xdal\x8dp=\xe1\x14o\x8b\xdd\xc0\xb5\x14\x10\xd0\xe2\x44\x84\x97\xf6\xbb\r\xbb\x1d\x1b\xb6\n;\xda\x99;\x66\xc2\x1d\?\xdf%\xaf" "\xfa\xe4\x8d\xa3\xf0\xab\x11m^L\xc4W\x1a\x19\x84\x08\x19\xd1\x04\xaa\xd8s\"\x8f\x43\xb4\xf5\xdaU\x1c'\x8d\x89\xfcQ\xfb\x01W\x05\xbc" "\x30\x15q\x1a\xb1:\xe0)T\xf1K\x12\x1d\xef\xc3\xb5\xc4r\xb0h\x16\x39*<\xf9v\xc2\x81 \xe2i\xc7\x89\x45\x13\x44,\xf3\xe4\x66" "\xc1\x1b\x61\xb6\xbb]#\x34\xebV\xe8}\x31\x11\x1b\xa3\xdf\xf5\xbf\x03\x11U\xb0h\x37s\x33>[\xd0Z\xcf\xce\xb0\xf9\x8d\xd0&\xd1\xba" "'\xd8J\\\xc4\x1e/uPz\x44\xb3\xd2#\x1c\xb6\xd4\x35}\xcf\x9bO\xf9\tZ\xb9\x11\x9a\xf9!\x9c^\x86\xc3|\x90\xff\xa1\xc6\xe7" "\x9a\xf1\x8e\xad\xdb\x65\xf4\xd7\xa2;\x13-\xdfS\xcd\x66s\x19S\xeb\x45\x34\x8b\x37\x30\xa6\x87\x16#g\x9a\x42\?W\xa0\x15\xb9\x06\x37\xbb" "\x17\xf2\r\xda\x9a\"+\x17u\x08\x30\x8b\xd4\x0e\xcdJW\x36\x9cZ<\xd3OoH$\x1c&X\t/p\xab\x61\x1d\xaf\x00\xe5\xd0(" "\x05\xc0s[\xd8+\x91\xd7\xe4\x97\xaeJj-\xb5iR\x8c\xfes`\xef\xd4m\x87\xf8\x62\x44\xc3\x0cx\x88\xa5\x0ej-\xd7\x10\x11j" "Z|v\x8cRhZ\xeaj\x11\xad\x8f|\x88\xa6Nx\x9b'k\xcet\xfbx\xd3t\xf5\x02\xab\xb3T\x63\xba\xdcn\xd2\x93\xdfn\xd2" "\x33\xde\x9d\x38\x83\xc7\xac\xbf\xe1\xf0n\x44\xf2[\xf7\x15\xb2\xee\xfc\x7f\x9e\xdc\xdcQ\xc2\x17\xbe\x8c\xe9\x13\x1c\x85*\"\x8f\x61\xa5\x17\xe1\xe7" "\x95\x13\xcem\x11\xcd\xdf'\xfc\x42\xf6\x44\x87\xcc\xe8\xb7\x1c\x31\x95\xa2,\xde[\xc4\xb7.\xd4u\xd0\x36\rj(\x9cX\x33_\xc8\x32\x12" "]~\x38\xe3\x93\xe9\x9f\xf8\x93\x8a\x16\x05\xad\xe2\xda\xa9#\x30\xe6\x12\x12\xcd\xec%\xe5\xc4\xa9\x0b\x07\xec\xb6\xd0:\xbc\xc5N\x9d\x44\x66\x89" "\xf8\x9a\x35\xe0\xe3/\x43\x46\x83\x1d\xfah\xee\x8a\x31\xa6\xdf\xbd\xcd\x92mI\xe0\xe8\x85_\xb8\x45\xf6\x89^\xe6\xc9\xd1.\xe8\xdf\x1fj\x43" "\xd4\x13\xe8H\n\xff]\x92\x1b\xd0\xfa\x8b\xc2I\x85\xbc#\xf1\xaaQ\xdd\x0b\xe7\x43\xa7\xbf\xfdh\xc5\xaf\xac\xf6\xce\xf8\n\xb5\x11\x96gT" "\xd6\x9cQ\xf5\x34\xaa\xa1\x1a\x91g\xc5\x43\x43\xcb\xe3\x85\x63>\x8e\xf0\x14/'\xae\xaf\xe2&\xf2s\xdc\xbe\x42P\xb6\x88\x9d\xb2\xbf\xf3\xf8" "\xee(\x98L\x11\x8e`Z:\xf0+\xdah\xef\xf4J%~\xca&L\x46,\x87\x61<\xc8\xd5p\x8f\t\x17\xefN]\x39\x7fv\x94j" "\x07\xe2\xcf\x87\?\xb6h\x92\"p\x1a\x98v\xf0\x41\xbc\xbf\x88w\xc8{\xf1\x0f\x32\t\xfa\xc0\xca\t\x89\xfc\x8f\x45\x1b\x8c\x18Q\x10\x91\xc5" "\xdb\xf3Y\xdaGR\x11O\x92\x34>\xc8\x1dx\x99'O\xc8\x33\xb2M>\x90\xcf$\xf2xr\x95>>\x86\x07\x85\xed\xd6\x41\xfeIz" "ur\xe8\x0cvw\x08\x8c\x34M\x03S\x9e\x90\x06\xe9`\x9e\x8a\x1b\xa7\xb7\xcb\x08\xd9\x32&\x1e\xce%\xdak\x8d|>h\xaa\x31\\(" "\\\xf3\xd3\xed^\x9a+\xb6}\x39\x84H\x08\xcf\xd6`\xa3\xe2\xc4\x02\x46\"\xde\xe3+l\x8bs\xd1\xce\x9a\x0f\x9ag\x8d\\\xd2\xe8\x80\xa8" "!\x8eu\xe4\xe6+\xc3\x36\x38\xcfz>\x9f.o\xaa\xe2\x92\xb4\x84\xcb\xa3{j\xd4:\xdd\xc6\x99T\xfb\x06\xcd\x8b%\xecg\x99+T" "\x64\x1a\xe6\x11Mi\xfck\xf8\xf3\xc1\x34\x03\"[\xe6\xd1\xc5\x13np\x45\xb8\xad\x94\x38\xa1\xdf\x19\x66v\n\xe7k=\x61\x65\x1a\x9c," "`\x46\x36\xf2\x30\x10\x8d\xf8\x00\x9a\xbb\xdb\x44\xbc mv\xbb\xfb\xd3\x85\xa8.\x94\xfe\xa4\xa9\xb3\t\"j\xb5<\x46\xac\x95wN\xb6\xe2" "yV!\xf9\x98\x89\xc3\x02\x9eg\x86\xcb\xeb\xdam\x92\xf2\x97_\x88n\x95\x03h\x35\xf2\x30\x11\x85\xb0\xad\xf2\xcc\xccy\x66\xe2\x02:\x0c" "\x46\x96\x8b\x02\xafY\xc0\x8e:\x8d\x42\x64\x0bZ\x08\xcd\x00n\x14X\xa4\n\xe9\xb8G\xe3\xf4\xef\xe5\x9e\x07\xd3\x8dnQs\xf2\x82\x98\xc1" "\xc6\x05\xfa\x63\x8d\x0bV\x39\x17\x61\xa9,\xffUl\xf2P+\xa9[\xb2w\x98\x93\x94l-\xba\xcc>]\xb8\xb2\x85\xeb\x8c\xf3\xcf\xfe\x31" "\r\r]\x17\xb1\xe7\x42\x8b=\x17\"\x1bu\xff\xec\xcb.\x8d\xc8.\xed\xbe\xee\x7f\xec\xben\xd0-\x80(\xb5]\x33\xef\xdc\xac\xeb\x8a\x39" "\xa7\x65h\x88\xbb\xd2\xd9\x12H\xb5n\x30\xb9\x61n\xa3\xe8\xf7\x16\xbco\xb0\xd0\xb8\x88\xb0\xf2\xba\xe9\x17g\x33\xad\\\xe7/\xe1\xbc\xa3=" "[\xb1\xc5m\t\x03\xf9\x64\xc1\x0b,q\xd9\xf0\x1a\xbf\x84\xdfUyG\xe2\xea\xf0\xbb\n\x87\xfc>\xac\x88.\xa2\x62\x85h\xfe\xbbl\xd3" "\xbb\xcc\xccJ\x66\xc4.\xe2\xfb\x84\x17\xdfIjgu\xa3\x06\xde\x03\x33s\x97m\x9d\xd2Z\xa1\x43\r\xde\x41\xd1\x90\x8f\xbb\xcc\xc7Jy" "}\x9e\xda\xd0\xd0\xa1\x15m\xc5\xf3\xaeS\x32\x8fw\xd1\x8b\x11\xda\xb2\x88\x42\?\x8e\xda\xbe\x8b\xb0\x15\x8d\xe0\xc0\x9b\x66}-\xbcw\"\xf8" "\xd6\x44\x84\xfb\x98HS\xb1\xcb\x32\xd0\xc5\xda\xee\xc2\xd6\x97\x13\x83\n\"\xbel\xe2J!\xbc\xbf\x81\x86\x1a\xae\xc7L\xd9\x0b\n\xdfX\x80" "I\x44\x64\xb3\xde_%\x44\?\xb1\x91\xa9\xd7\xc3\xfa\xde\x42_>S\xc4\x19\xbf\x8d*\xaa\xc7\x37\xdc\xe3\x0b\xe8\xf1M\xf6t\x8e\x8a\rw" "\x8b\xd8\xc1O\xff\xec\x9c\x9e_\x80I\xaf\x84OY\xc5;\x10UH\x8f\xcd[\x0f\xbe\xde\xc6-\r\xb7;\xd6Mw\x08\x02\x31\xb2\xea\x1b" "\xfe.\x1f\x9c\x61\xb6\x84\xc5\xee\x1b\xc3\xe8\xe9=x_\x46sK\x80\xa1\xfc\xc5\xbb\x1c\x06*\x1a\xf7<\x99\xb0\x08\xa2N\xb9g\xd7\xe3\x9e" "\xd5\xd1\x83Nz\xfa\x9a\x62\x9f\xdb\x86t\xde\xad\xc8=#Z\xab\xf1\"\xe6\x9f|\x01;\x10\x37\x38\xf7\xb4\xf1\x8f\xa9\xff\x8fU\xdb\?\x9e" "\xeb\xdf\x9f\xb9\xf7/\xb9\xaa\xf0\xd3\x31v&\x35\x06\xddg\x1aL\xe3\x03\xca\x07\xcc\xb8\xaa%WY\xd7\x30\x9e/\xb4Q\x1d\x61\xd3\n\xc8" "\x98\x05\x65\x1c\xd5\xcc\x1a\x19#JRh\xbeo\xe3\xc1\x95\xb0\xd8\xae\xd0\x36Sj\x8c\x93\xd1\xe8\xef\x1a\xdeHO\xec\xcf\xedwj\xfc\xce" "\x94i\x39\x85\x1f\xa5\x31\x65\xbd<\xa5\xbd\x32\x63~S\xb2\xa9\xf9\x80[H\xb9\x07\x91M\x94|\xa7t\x41\n-\xb6\xbc\xf1\x81\x8d\xcc\x85" "\x16i\xd0\xf8\x80\xe7M\xf8\xd3\x06Q!\x7f\x88\x39\xe6\xa7P\xcb\x8cG\xb1\x1c\x96\xb0\xf3\xca\x43s\x16\xc3/vN\xbeh\xc3\x7f\xcb\xeb" "\xc3*\x63&\x62O$\x15\x1fHoI\xbei\x1e|\xff\xae&\xe0\x1a\xbf\x62\xcd\xfe\x8d\xc9\x43\x8do\x16\xbdoV\xeb\xdf\x98\xcf\xd2`" "\xec\x84\x92\xbf\x43\x05\xf4\x1dt\x86 *z\x86\x8f);\xa0\x05\x37\tm\xe2\x86\x10)\xf5\x1d\xcc\xaa$\xcf\x8fZ\xfc\x1b\x03\n\x46\xd6" "\xf9\xdf\xac\xb6\x85\xbc\x04z\xde\xdf\x08\x89n|\xa7\xb1\xf0\"z\x00\xbc\x8b\xfe\x38\xe1\xff" "\xa5\xebL\x97R\t\x9a\x37\x1f\x31W\x32\x97\n(\xfb\xaa\x36\xb2\xab(\xb8\xa0\x02\x02\xb2\n\\\xcc\xd8\xdb\xa7\xb9\x85\xc9\xcc'\xb3\xec\xf3" "\x7f\xdf\x89\x38q~\x99%\xdd]]]{\x65\x65\xf5q\xfb`PW\x0e\x8d\x30\x05\x64q\x06\xde!\x06\xc1\xc3&n\xae\xa8Q\xd6I" "\x87\x35|\x66\x11\x87\xcf \xba\x92k\xcdhk\xec\xe5\x11\x06\xed{X\xba\x8b\x86S+H\x14\xd7\x16\x44\xe4\x06\xa6\xbd\x63\xf0\x93\xd1q" "\xe6:L\xcf\x8dZI\xaf\xb1\x9eK\x34\x03r\x12\xf3\xfak\x94\x9fuXn(\xa7\xee'\xb5Y\xd4\xcb\x43\xbc\x41\x32\xc0U\xb6\x10\xb3" "\x92\"\xba\xc7\xc8\xcc#\x11\x05\x7f\x8dYg\x33\xfe#\xa2\xd2[\x63U\x9axn\xb3\xfb\xb8\xd9\xb5\xf6\x41\xd7Q\n)\x80\x63N\x89\x17" "k\x18\xdc\x91\xa8\xcf\x88\xca\xfa\xa7\x32\xf2\x89\x33\xe6%\xf1\xe6\xc3\x89\xc3\x8a\x11\xabi&\xfa\xa5\xa1i\x98\x95\x85\xa8\x99\x90\xc5\xcf\x36\xe6" "\xd3\xa1M\xd7N\xdc\x36,\xef\x92\x16\x14\x36\xf6Y\x31\x41)\xb4\xcc\x19\xad^\xa8\x08\x45\xd3w\xd5^\x8d\x96\xb4I\xbbU\xd6\xf4\xbe'" "\xa4\x8fv\x17y\x38\xfe\x37\x44_k\x0b\xbb\xd6\xa6\x62\xedL\x1cI\xfc\x42N\x8a\x35\x07\x61\x16\xfe\x66\x8b\x85\xc0\x9b\xadv\xc3\xb6Z\xb8" "\xb6p\xe9\x44\xfcT\xfd\xeb+\xccN\x35[m\xb5y\xd8j\xb9\xd9\x62[\x89\x90\xa7\x1e\xc4\xe7\x1eihk\xd5\xa9\xf3\xcdV;\x31[" "\x1d\xd9o\xe1\x36@\xa8S^\"\xa2y`\x11k\x14$\xa2\xc6\xdc\xc2R\x96\xf9\x08\xdaO\x65\xcf\x00Q\x1f\xac\xef\xbf\x8d\x7fj\xd1\xd7" "P\xef\xb2\xc7\xda\x1b\xb3\x0c\x1e\xc6 \x8a\xf3\x1e'\x94\xdc\xec\xb5U\xdb\xc3\xc4\x88\x39\x37j#/\xe2l\x66\xa2\xbe\xcf\x1e{\xa0\x89\xa3" "\xb7\xb0w\xeb.\x93m\xbe\x37:\x99|\xb3\xd7\x0c\xb3\xc7\x91\xb0\x44\xd9-!t\?\xd9-\x8d\x34\x34\xd6\xb1\xf9^\xdb\x62\xa2^\x88\xd9" "\xac=\xfc\x37\t\x83\xe2\x87\x8fv\x41\xb4\xef\t\x8e\x88\xb9\xd9\xeb\x07\xda\xc3 \x8aXU]\xdc%\x11\xc5 \x84\x89g\xc0\x05\x12\xb1\x8f" "\xbb\xd9\x8b\xd3\xa8_Gr{l}!\x8a_\xc4\x9b}\x98\x41\xb4\xb4\x07J\xdc`\xff\x01\x89=GmJT\xd4\xce\xf8>\xec\x17\xa3" "\xf2\xbb\x0eX\xf6\x96\x9e\xe1\x43\x05\x44_~\x1f~^\x81S}\"\x66Z\xf6\xda\x03\x62\xfa\x83\t\x44\x94\xee=\x8e\x39\x65~\x80S\xbc" "W\x34/\xb3\x15\xa6\xde\xc8R\x98'\x39\x90\xb3Y\xb4h\xe8\xec\xc5^g+\xf6\x7f\x13\x1a{\xaci\x11\xbdg\xbf\xd0\xc2^\x05\xd2:" "\x05PS\x8a\x08+S\x11\x61.\x43\xa2\xb8\xfb\xbb\x39\xf1Qq\xe2\x18\x8a\x44\x0c\xbd\xd4\xec\x92\xe9\x81\xe8k\x9e\xb0\xe7X\x08\xbfG\xa6" "\x45O\x19\xbf\xdeN\x86\x61\xaa\xf8\xa4}\x8f\x93\x36\x46'\xfd\x8e\xa7P\xdc\xf9\x10\x31+x\xd2\xb1\x30\x13\xfe\xbcI\x14\x1f\xb1\x37z\x86" "\t\x11\x89t\x92I\xa1\x0c\xc4\xa3\xfe\t\xf3:'\xb7\x16G\xa2\x87_;\xf3\xe8\x9b\xb3\xceK\x9c\xe1\"\xf4\xe6\x9c\x08\x8a\x31\xe0\x62\"" "\xc8K\xa1\xf7@\x94\x34\xf1R~:\x0fJW\x89X:\x83\x15\xd5\xeb\xf8=N\x13\x11\xf2\xe1\xf6o{\xa7\x1d\x36\x38tQ\x34\xb7\x99" "\x42\xb4 u\xc0\x10\x11ZK\x9b\xc3\x84\x16\\\x64\x83\xd2\xd8\xed\x80\x90\xbf$~\x04\xa3\x34\x11q\x44\x32\xc4|\xdd\x89v\xfb\xfe\\\xa9" "\x0f\x7f\xa2\x41\xf1\x19n\xd5L\x8b\xce;\xd3\x82\x66\xcfi\x92\xb2\xc4\xadR\xec\x86\xbd\x14\xa6\xab\x89\x32\xc1\xe7\xa5p`\x95\x97\x8a.\xf1" "\xf0\xa8\x8b\xdf\xa1H\x10W\xcf\xca\x17\xa3\xdd\x32\xfa\xbe\x00\xe5S\x0bQ{y){\x15\xee\xb4N\x90\x02\x98W \xde\\\x82\x9f\x19\xa3" "\?\xda\xc7\x9f\x12\x9a\x46\xad\xeb\xe9r\x13\x11\xdf\x33\x8d\x15Q\xa2X\x9ex\xbaR\x44\xbcj\x80\xb2[\xc9\xd3\xf5\x18\xe2Xu)\x13\xcc" "\x36:\x88\x9e.\xd5\x10\x65\x85\xc9\xd3\x85\r\xa2T\x85L\xd5\x65\xa9\xc0K\xa3\x9e!\x8aon\xe2\xfc\x05\\)\x65\x8cK\xfc\x91o\x96" "\x8e\xaf\xc7\xa0t\xe0=\x9d-\x64\xbe\x81\xe2P\xca\xd3\x01\x80\x97q\xd3:$\xc2Y\x94\x0b\xb8@\xe7\xd8\xbb\xfc=\xc8k\\j~\xb8" "\xd4\xd7\x64\xc2#\?\x89\xe2\x45\x9f\xf8\xb3\x0f\x8ak\xffG\xb2\xc8%\x9cZ{\x97\x61)\rz\xb8\x01*\x41/\xab\xe9\x9d\xc5&<\xe2" "\x8f\xa4oV\xd3\x37\x8b\xf5j\xa2\xac\x30\x13\xef\x1e\x95\xef \"\x92\xd5\xec\x96\xc5\x11V\x44\x31;`\x36\x85\xa1\x9c\x8eG\xcc\x14\x8d\xb0" "\x45$\xf1\xe2\xde\xae\x86\xad\x17\xf3\x16\\HR\x65\xe1\x18I\x88\x36\xc0\xcb\xc2I*Q\xa6w\x89\x43<\x00\xd3\xa9\xc4\xb7\x1f\x0c\x64\xbc" "\x9c\x1b\xb4{\x39T\xd2^.*\x7f\x61\xa1\xc0+`\x1e\xd4+\xf8\xd2\x11\xf7\n\x98\x8b\xf1\n\xb0M\xf1\n\xe8'\x12Q\x30\nZ\xc0" "\n\xe8Ux\x05\xf4*\xbc\"\xc6q\xcc\xb6\xd8\xf4G\xd6\xbc\xbc&\xb5\x02" "nG\xbdw\xab\xd9\xa9\xa5\x39\xb1\x85\x95\x0b\xaf\xf3\xbb+\xb2\x15\n^\x97\xb4/\x10\x99\xb3\x03O\x94\xcc\x11(\x9ev\x89\xd2\x19\xf5:" "Z*:\xf0\x87K\x94\x13'\x99\xef\xe8\x92\x93(\xbd\x06\x62\x15\x97\x62\x1c\xcd\xdc\x80}\xfd\xbbx\x63%\xca!\x9d\xcc/\x63T\x9ci" "\x99\xea\xb8\xbb.\xf5n\xd2\xbb\x64\xd6\xc1\xe3\x1b\xcf\x83\xe4\xf5\x19'\xc9g\x9d \x35\x01/\x9b \xaa\xde\x0e\xb6\x1f\x12\xc5\xb9>q\x90" "\x01\xd1Xu\x30\x12%\xea\xdd\x61;L\x94\xb1&\xd1\x43\xdc\xe1\x46\x9c\x88\xa4\xef\x84}$\x1b\x1c\xed\x11\x0f\?\x46v\x1d\xabO\xd1\xd6" "\xb8\x13\x95\x32\x34\xe0\xc4\xa0\x9a\x34qW'\xe4\x63\r\x65\xb9N\x34\xea\xe4\x46\xf9\x15\xb4\x97\x9c\xb2h\xa4~\x10\\}\xb1v\xad\xc4[" "\x46\xa8\xf0:\x98I\"\xce\xae\x94\x03\xe5\xcc\x88\xf3\x02\x44\xf4S'\xad\x00X\x0bR\x03xH\x15-z\xc9h\xaf\xa2\x03\xdfr\xc4\x8d" "\xde\x44\xe6i\x98\x1f\xe0\x19w\x8cS\xf8Pq\x06\x91\xb2O\x14\x0f\xa4`u\xfd\xde\x1e\x44K\xd3\r\x06\xb9\xc0\x9b\x61\xb1\xdb\xeb\xc2\"" "\x90(k\x9d^WsoW\xdb\xba\xae\xeb\x85zz\xa2\x87w\xa7\x1c\xfe\xfeH\xc4\x86\x38\x94W\x08/\xf1,\xce\x8d|:\xdd\x30\x03" "M\x66J\x88\xc5\x17\x10M\xd2\xd0o\xaf@T\t\x43L\xe4\x10\xc5u\x86\x10s\x37$\xce=\xcc\x81\x90h\x41\x36uO\xe2\xf1\xc6\xfe" "\x1a\x94\x8b\xfe\xfe\x06\x1b\xf1I\x13\x63\x05\xe2]+\xf8~\x83\xe3w\xd1\xf8Xk\x39,\xda\x1b\x62\xdc\x42\x44\x39V#p\xa1=\x8a\x45" "\x19\x1f\x90(\x13\x16\x42L\xdc\x92\xa8\x8c\xfa\x43\xa1\xdb\xbe\x41\"\xbe\xc9\x30\x36\x8b\x18\x16\xb3 *\xd6\x61\xdc\x44\"\xc4\xfd\xaa\xc5\x0f\xe2" "\xff\xb9\x38\xc4\xed\x33\x36G\xfdG\x18\xafH\\\x16\x13\x7fI\x06\xc8\xec\xb7\xf7\xe8\xf7\xba\xd4\x62\x88H\xc5\r\xd3\xc9\xde\xa3\xb6:OZ" "\xef>\xe9\xaf\x99~\xe3\x03\xab\xc6\xd0l\x83\x1fi\xc7\x06\x05\xfc\x15\x9e\x11\xf7V\x16\xaf\x10\x91+\x46\xb0\x39\xf1\x46\x38\xfa\x82(\xce\xcc" "\xbc\x91v\x8e\x98\xc1\xbd\x14\xe6\x31\xcc!\xbc\x31\xaf#\xee\xac\x39U-\xe8\xbf'\x34\xad\x0eH\xdb\xe3\x98U\x12G\x97~\xaf\xa4\xbd\x9c" "\x31\x0c\xc4=\xf5\xc4\x46\x14#\x30\xa2x\x8c\"\xcaxH\xa8\x35\xff\x18\xd6i\xc4\x07\\\x8a\xb5Zo\x1cu\xde\xb5\xa7\xa0\x43]\"\xe2" ">\xe6\xed;\x32\xd4\xf1\x9e\xa9\x9b\x15l\x0e\x98L\xa2\xc1\x9f,\?\x10\xe5\xc8J!\xfb\x91\x43~\x37M\xcc\x65\x45\xf3\x9f;\x18z\x92" "&\x93\x94\x9eZ\x39\x13\xb7=\xf0|\x41\xc3I\xedL\xa8\x06\xdfU\xdes\xd0j\x81m\xdc\x11'\xd0\x0b\x9d\x13o\xd1\xe0\x44\x92\x44\xb1" "\?\x15jQy\x66#\x91\x62\x15>\x0bH\xbb\xbag\xbf\x44\xbb\x95\xd3v+m\x19\x9f\xb5\xcb\xf1\x8cUO\xa2\xec\x00!\xee\xf1v\x18" "\xf5\n\x93w$\xed\xebKK\xa3h\x66\xef!\x1a\xc7\x04\x85J\xb4\xc5\xd2i\?x*\xa6L\x89W\xdf`\x0f\xef\x08{L\xa1s\xd5" "@\xda\xf8l\xb4O\x81Y~\xef\x19\xb6m\x9e\xce\xad\x08\xb1jL#\x42\xb4\xb5S\xb8\x87#\x8a\xa9\x1bQ,G\x89H\xab)\xec\xd8" "y\xcc(\r\xc8\x14\x8e\xcd\x88/\xd0\x31\xa9)t\xeb\x66\xa4\xc9\xf6\x06\x1a\x1a\x8a\xcf\x30o\x46\xdd\xc8\xb0\xd5\x84\x88\xb8\xcc\x30\x33\xed\xe9" "\xa4\x03Q\x66x\x88h{g\x98\xb5!\x62 \x33\x0bn\?\x41\xb4\xecL\xadN\x44\x94\x39\x34\x88h\xd4Y\xd4\x8a~\xa6\x05j\x86\xf5" "*\xe6\x10\xb4\xbf\?\x35\x83gi\xe6\x66\xday\x64\xfbp\x36\xd9\x96\xc9\x35\xd2P>\x66\xe1=\"\xa1\x9d)\xa6\x96.\x16\xedW\\T" "\x30\"\x99\x63\x31\xc3\x9bk\x85:\xc7\x1c/\xf1p\x03\xaf\xd1\xde\\;\x9cs\xed\xf4\xce\xb5\x0b\xfe\x85m&\xdeW|\xf3\xe8\x9f\xb3\xd1" "\xe9\xc2\x34\xb7t\xe5-\xc4+_\x35*H*\xdb\xf4\xc1\x37\x66\x14\xbc\x9d\xdb\xfc\xe4\x1d\x30\xd5\xe9\x1d\xfc\x9c\xb2\xa0\x14\x9b[\"\xbe\x02" "S\xfb\xca\x07L\x9f\x10\x91h\x07\xcc\x64z\x07\x1d\xf4\x1c\xb4\x92\x63\x46\xfbw\xad\xcf\x0eX\xaf$\xa2\xea;`\x9e\x93\xcd\xa7\xd2\x46\xbb" "\x01v\xc7\x33O\xa0,qz\?\xfe\x8f:\xd5j\xa6\x30\xa0k\xa6\x30/J\x94\xc9\x97\x66\nG\x65\x35Sh[\x84\x98\x65\"Q>" "\x19\xf3\xc3\x88\x94\x65q\rJ'^\x18\xeb\x8d!\x62,\xc0\xda\xd0\xa8\?H\x63\x01G\x88\xfd\x0f\xcd\?\xe3\xcd\xa6\xda|\x35uM\xaf" "\xa9v[\xcc[\x61,\xbe<\x85h\x62\x9b\x19\?\x37\x8f{\xcd\xa0\x7f\x84&+\x7f\xc4y\xdbo\xec\x30%\x42Z\x62\xc5\xaf\x99\t\xfa" "\x85\xe0\xe1\x88\x85\x0f\xd1\xa2\xa7\xb4i\x98\xebi\x66\x30\xae\x93\x35;\xb7rhZ\x94\x91\xd7\xce\xc5\x37\\\x64\x9byM\xdc\xfc\xefO\x1a" "\x94\xd9\x89\xa6\x1eO\x45\x94\xbc!\xf4\xeb\xd5x\xf0\xe6_\x1d\xa3s\x03]o\x04w\x9c\x88n'\x8b\xf7`\xbd\xaa\x9c\x83\x62\xc0\x44\x94" "IJ\xa2\xcc\x00\x12\xf1\xa5\xf3p$&\x44-\xc6\x62\x41YTv\x8dX]\x16\x11M\x9a\x88Q~\x12\x95\xc7N\x93\xa3|I\x94\xda" "\x95(\x83y\xe2N\x63\xb2\xdf\x80\xa7\x96\xbd\x39\x1c%\x11\xdbx\tx\xeb \xce\xaf\xc0\xaf{\xa3\x33\xe8 m\x91\xb5(\xd3@\xd8\xd2" "\x04\xcb\x05\x42\xf7\xc3}\xc3~\x18\xb6\x8a\xf6\x0e\x38\x7fQ\x98\x08\xb2\xd7\"\xd1^\x04}\xac&\xb5lH\x0f\xec\x18i\xe6\x31y@l" "\xe2\xdeq\xef\x12\x1ct\x8cv\x63\x12\x13\x89\xc4\x1a\xee\xad\x9b\xdb\x9b\x15\xcd\x87\x15^]\xbe\xf9\xd4\x9cG\x03\xdf\x0c\x98\xccU\x95\xf8 " "\xcf\xaf\x62!\xa4Y\x45\x45\xd1\xacj!\xa8\xa2\x9bh\xab\xdb\xcc\x15\x88\x92Yu\xcb\xe3\xe6\xba\xa2\xa9{\xed\x89\xb6\x02\xdal\xfc\xee\xe5" "\xd7\r\xcc\xcd\x34=-\x90M\xd4\"\xcd[\xec\xea%\x8a\xb1\x1eQ\xf6\xdf\x35o\x61\xee\xd3l\xa1\x07O\x94\xf6\xa5\xd9G\xaf\xa9\xa9\xb6" "\x37\xc2\xf0\xbd\x83\x81\x07i\x95'\x10\xd9\xb6\xafO\xd5\xed\xb1\xc4\x1f\\\x85\x96\x83\x38\xcc\x19\xa3\xc2\x9d]\x05\xafV\x42\xfd\xf6j\xcc\x42" "|X\xb1\x07\x94\x02.\x8b\n\x1f\xa0\xf4\xa5\x84\xbcWM\xa6\xa7\x44\x0b\x7f\xda\x10\xe5H\xd4\x66\x1f\xdb\xb2\x9a}g\?@\xa2t\xd4\x9a" "}\xacr\x11\xb7\\\x9d\x36\x9f`\xb8\x44\x94-\x0e\xcd\x97\xe4\xc8\xbd\xa9{\xa7\x9a\x13\xacx\x37\xdf\xf5S\x7fh\xf8\xa7\?\xbf\x34\xd2\x18" ";\x1a\xbe\x62\xac,\x01\x98jh~:\x8f\x00Mm\xd5\x9b\xf3_\x99\x38\x17\xfa\xbb\xa6/g\x91\x36\xd5*@\x18p\x8fz\x65Zx" "\xc8\x45\x17w\xd1\xea=\x1a\xea/\xa8\xc9\x1a\xa6x&^\xc2\xe0\x03\xbf\x39\xe7\xddY\xf8\xa9\x0b[i\xf6Zk\x35\xb6\xc6\x92VS\x9d" "\xd8\x12\xa5\xa3@\x9cZ\x9d\xbb\xf6\xc5\x05\xb9P\xcb\x97\x88\x32#$\x62t\xd5\x12\x31\xd0k\x61y(\xc4&\xdc\xe6\xda\xee\x15\r\xf1\x18" "\xec\xd7\x12\xda\x9f\x34\x17\x8b\xd1\xb7\xcc\xe8\x88\x18t\xf6*\xb2\x1b\xd4\xf0P\x0f\xbe\xd5\xef\x1c\x87\x95\x94\xb7\xca\x81r\xae\xd4\xdf\x89sl" "!\x95~\xecx\x62\xcd\xd1\xcfR\x99:\x98\xc6\x33\x45\xa3)\x34\x99{\x61\xd6\x94\x9f\xd4\x99\xa1\xffU[\x80g\xc9\x66g,\x38\x10\xb3" "\x97\xca\x15\x98_*\x11\x1f\xcc\xcc\x34\xf5\xa0T\x62\x11o\x8e\t\x30\xa1\x7f\xdb\xc7\xb4\x1ei\xe5=\x8fn\xc4o\x06iu\xfd\xadL\xd9" "\x30w`\x83\xb2\xf6\xe7\x9fv\xa1|\x05\x65\xa7\xa4\x90=\x46\xae\xbeM\x0b;'\x7f\x91\x86\xd6\xdc\x82m\x8duo\xe5oN\x10\xfb\x39" "#:n$\x0e\x32\xfe`\xf8\xbb\xbd\x88\xce=\xfa\xdf\xbd\x9a,\x02\x33\x9f\xc0\xfb\x1a\x96\xc4\x45\x8c\xc7\x9f\x98q'\xed\x61\x04\x8e\x34\xad" "\x46\xb7\xe8\xa8\xb3\xd8\x37\x06\?\xef\xf4\xcf\xb4\xb8{\x82s\x13\xd6^\x8c\xf6\x8dH\xa4\xde\xafK\xb5\xd1\x8b\xbb\xdfX\x93\xff\x05\xd9\xc5\x9f" "\xa8\x8e\xd2\xc7\x0c\xbb\x97\xd4\x65\xff=h*}jZ\xcb\xc9=\xc2\xa0\xf5\xe0\x9f+\xd0\xa6\x9a^h`\xcf\xceM'\x44s\xf9#Z" "\x34l\x99\x18\xa7o,\xbf\xfa\xd3\xb6\x31\xb8\xac[\x66\xf7\xa7\xfa\xf4\xd9\xd9\x88!\r\x89s\xfd\x0e\xa8\xad\xcf\xe2\x8aRG\xed\xa4\x89\x87" "\x04!u\x8fp\xb2\"k\xc8\xa4\xfeR\x93\x7f\xa5)'}V\"j\xfc\xb3\x36\xec\xcc\x64\x36\xdb\xad\x8c|\xfaG\xdf~\xfb\x03\xee\xbb" "\xcag\xa3\xf3\xcb/ZP\xc9\x87\xa3}\xf8\xa1\x7f>\xe8{[\xde\x39i\n\x9e\xf4\xcdO\x9a\x97\xcf\xf8\xa8\x41\n\xe5\x38H\xbf*\xd7" "\xbc!\x33\x83\xd7\xc4\x10\x87\x89t\xc2\x66\x14\x62\xad\x42\x03Y\xea*`\x9b \x07\\\x83\xf5[#\xdf\xa6\x8c\x34\r\x64\xb9\x91\xd8,(" "W\x96y\x61\x0e\xc6\x34]/\xb9\xdd\x19\xd1q\x17\xd1\xdeJ\xbb\x41\xcc\x30\xfb\xe2\x9c\xd0p\xc0\xda\x18\xc8\xc0\xc6\x44\xaa{\xe1\xbcG\x02" "p\xb8\x1b\x89\x9a\xc5\x89\xdag&q\x1c\xb5P^p\x00\x15\xb1_U\xde\x1b\x93\xb7\xeb\xdf\xfb\xd9/\xcb\xc7\xacUn\x9d\xf8\xd9\xd6J" "\x9e\x35x\xbd\x81Xp\?\x0f\xfa\x45\x97.\xfd\xfb\xf0uI=\xc3\xc4/]Ti\xb0\x38\x18\xaa\x88\"\xe0\xf4\xc1\xd0\xef!\xd7\x06w" "M#\x97\xca\xc7w\xd5ZTO\x63\xc4\xc7\x9a~r\xf4\?\xce\x98\xf0\x11R\xfdg%\x95\xb5\xd1\xcb_\xd3x\xc6\xf9\x39LM\xa8'" "M\x95\x11j\xfc\xe0\xb3\xe2\x1fo\xfc\x9bO\xd5\x46\x46>@\xa3vp\xda\x61\x8c\xb5Q\xd6\xf4\x8e\xd3\xef\xe4\x37\x99\xf5\x8c\xe1\xe1\xda\x44" "\xed^\x9c\x03-\x96\xda\xd1\x65\xf2^\xe2\xe5\x30\xa1\x61;\x88i\xec\x9cn\xb5\xf8\x8f\x80\x7f\x9b\x37\xf9\xcb'\xc5\x34\xd8n\xc5\x19\xac\xbb" ";&y R\xad\xf7wk\xeeI\xdf\xeb\xcf\x16\x1d\x18\xc4\xb2\xa8%\x64q\x30RSh\xf5\x97h\x1a\xd5\xa5~\xa9\xa5\x66\xe9%\x1a" "R\x8a\x9a\x8b\xd4J\xef\xf1\x9d\x36r\xa1\xb2\x8c\x8a\xee\xfb\x39\xd8\x66\x8d\xee\xc2\xc3\xd0\xe8>\xfa\xe1\xd5\xe8\x62\xf0#}\xe6\xb3\xf6,\x99" "<\x93\xd5G\xbd\x13^\xdc\x1b\xb1\x9d\x98\xc4\x9c\x06\xa1\xa7x\xd6\xbe\xc7\xd9\n_X\xc7\xb7\xc7\x9c\x94\x90\xe3\xfbyHhQ*\xed\x34" "\xea\"\xbc\xe4L\xc3\xb9\x16\"\x86\xcf\x97V\xbf\xc1\x1b,\xf1\x16\x9d\x04\x1al\xf0\xc2\xd6s\x86\x1a`\x1d\x96\x9c\xc3\x36\xb2\x1a\x16\xc3\x84" ":\x88\x11\x11\x83+\x15y\x0b\xae\xac\xf5J\x00\x1c\xba\x36u\xe9\x88\xd8[)\xd1<\x87}\xfd\xe9`h\r\\x\xaf\x0f\xbd\xff\x34\x62" "\xea\xb0\xa9[\xa2\x88\xaf\x9a\\\x18\xf1\x9e\xc3\x89\xde\xfd\x43/\xfd\xbc\x36\x46\x8f}\x13\xe3\x81>\xfb\x13\xb5G\x38mQ\x07*l\xea\xbd" "gy#\x97\xeb\xe9\xdei\xf3:\x8e\xbb\x11\x8d\x0f\xe0)VM\x8b\xcew\x38Q\x46\xb4\xb8\xed\xb9\xeb\xbe\xf4\x1b/\xd0(`I\x9d\xa8" "\xe5\x8d\x18<\x15U\xbcw\x91<\xdc\xbbH\x1e\xd8\xa6\xd1j\x61\xd5:\xc8\x97p\"\xc0\x44\x8e\x0bOG+\xd2\xf6\xf1y\x9b\xefOW" "\xc5\xac\x12\x89\x87\xb9&\xa1u\x36\xa2\x0b\xdc\x10\xbe\xae\x88Y\xc4\x36\xca\xa1\x0e\xc5\x36-\x61X\x39\x9b\x18uN*\xea\x8d\x0b\x15\xa3\xff" "\x9c\x37\xd1=^\x8b\t\x1b)i!\x8a\xaaO\x46*j\xd1\xb9\x61ZT\x98\xd8\xa7\xc5\x19 \xc4\xce\xbb\x12\x45)\xea\xe5\x61\x9c*\x62" "\xdc\x46\x1f\xd0z(\x96\x97\xa2\xa1^\xf5X\x86\xb1\x14\x8bU#\xd6\x18Y\xbc\x35\xfa\xb7\x97\xf0\x85\xc2\x1a>J\xf4\xd4\x31\x46O#\x15" "\x95/\xd7\x46l\x32\"q\xa6\x31\x98\xa1\t\xc0\xc9HL\x34@\xd1w;\xbc\xd5\xc8\xad\x97\x46^\xe1\xfdj&\x34\xac\xe8\x92\xb6\xb9\x32" "\x62\xda\x05'\x35s\xc0\x00\x0e\x84L\x0c\x66\x1e\xa6\xbb\x39`\xa2\x44~\x89N\xfa\xec\x93G\x19\xde\?\r\x13Z\xfc\xf6\xa9\x9a\xbe\xf5I" "\?\xeaY\xefu\xee\x1b\xe5l\xd0\x92i\x41\xf1\x06\x8b\x90\xa2\x85\xbd)\x66\xe1\x45\x8b^.q\xfch\xf3\x1c\xcb\x19\xea\xc2\xe0\xeb\x88\x35" "<\xd1\x42\xef\xdb\xd2\x88\xb5\xe3\x95\xc5\x96\x34\xfa\x03\x0c\xf7\xa0m\xca\xc1\xba\xe8\xb4\xbf[\xb8\x9dv\xac\xe9\xad\x30\x0f\x42\xac\x19\xad\xa6\x82" "\xb9\x0e\xd1\xc3\xc7\xfb\x1b\xd9\x93\xa8\?\xc1\x9c\xcf\x19\x1b\xdf\x98\x0f\xd6\xf6Z\xb9\x84g\x19\xa2V\x45\xf1p\xaf<\x18\xe3\x05\xea\xb6\xf8\xb1" "`\x84q\xb0\x88\xf1\xee\xec\x44\xed\xda\xc5O\xb5\xf0\x61\x15|\xe3\xab\xc5o_\x46\xfft\xa9#Y\xd6\xa8\xeeLh\xbc\xd1\xc0\x34\x8c\xdb" "\xcf\xd8\xe8M\xfc\xb9\x31Z\x66\x86\xdf\x39!N\x87 \xf1\x88\xf2\x86X\xb4^\x7f\x65\n\x87YR\x96\x95U\?\xdd\xf7\xc5p\x10\xda\xa8" "\x0f\xdf\xb9\xa6\x05\xc5\x0bh\x32Z!\x9e^\x84(_\xc4\xec\x8a\xb7\x17\x97\x8b\xd4\x35\xf6\x37\xab\xe8\xfb\x1d\xc1\xb9\xac\xf2\x03,\xcc\x83\xc2" "\x06u\xadh\xb0\x33\x32\x91\xfa\x88\x30M\xa6\x00\xa9\x81\x85\xdc\x35\xa9\xe8}\xaaz\xdf\x9a\xea\xd2\xaf`\xce\xfc\x9f\x87\xf0\xd8\x32\x8d\x44\xf8" "I\x66m\x03\xca\xe9\xbe\x44Y$&\x0ej\x46\xf7\x16wz\xfb\x87I\xf2\x06\x8f\x1d\x63\x30\xbc\x08\xec\xb2\xc7\x37P|\x84\x0b\x61\xc2\xce" "\xe2*X\xdc\x43\x94\x8e Q\xa6\xaf\x88\xe2\x44\x90(\xe7\xa2\xb2\xa7V\x8d\xb2l\x15\x13\xc2\xb8\x8e\xc5\x36\xb8\xd7\x9f\xc8 ^\xe8\xe7\x36" "X\xe9\x17-*\x8f\xdd\xe5\xa2\x85\?\x43\xa7}\xbf\xfb\xe3&\xb4\x03>:V^\x88\xc7\x1b\xb6\xdf\xb6\x08\xc9\x89[\xcck\xf0\x8c\xa7\xc2" "\x9aV(\x0e\xbc\x8b\t\rG\xd8\x89\xc6\x07zz\xa7\x7f\x35\xb7oW\xc2x\xaf\xf0{G\x35$\x37\xf6\xf0\x33\xf1\x15\x83RJ\x89\x98" "\x06\x15\xbcGP\xdd\xb0\xb7\xbd\x11>\x0e\x0e\x36\x15R\x1e\xb5OGZ\xec\xe9\xe5\xb7\x1a\xf5\xd6\x43@\x83~\xcd\xd5\x38\x06\x94\x38\xd0\x0b" "\xee/\x95_\xa0l\x98'\x0es\xca\x31\x38\xd6\xc8\x89\x8d\x16\xf1\xa5gt\xcf\x16\xef\x1d\xc2\xbf }\xea\xbe\x61\x44%\xd5z\x45\x9f\x90" "(v \x42\xcb\xa2\xe8\x0b\x12\xc5\x64Uh\x19\x08\xd6\xab\x44\xef\xde\xe8\xd7G~\xa3\xae\xda\x37\xeaV\x12\xc7wJ\x64#\x9c\x65\"\x0c" "\x9e\xa6\xbf[\xbc\x15\xf6\x8d\x13\xdfU\xff@\x01\r\xbf\x0e\xe0\n\xe5\x1b\xf6\x81\x44-Z\x44\xb7\xfe\xdaz\xc5\x0e\x05\xe2\xe5\xd6h\t\x00" "\xb3\x04\xe2p\x1e\x8e\xbb\xd1-\x12\xdbrL$\x83\x16\xe2\xac\x64\x84\x65\x9d\x88\x41\x31\x65\xa2\x15\x06{;L\xc3\t\xed\x43\xc1\x66\x99\x98" "\xaf\x18\xfd\xfc\x1eg\x16\x91v\x8d\x0b\xb0#\x8f\xe8!\x06V\xf1\xc0\xc0\x91\xd8N)\xd7`\x07\xe9\x1ew\xf1Ix\x12\xfd\xb2\xa8\xe2\xa3" "\x11\xcd\x1b\x89\x8f\xca'T\x0e\x30|&\x9a\x0fP\x12\x65-\xb1\xa5\xee\xb1Z\xea\x1e\xab\xf5\x16\xd4$\x02o\x1a\xb1\x37\x8d\xd8\x04V\x94" "\x42\xbd\x05\x8b\x18%\xb4&X\xa7\x12\x62\xcc\rQ\x06!$\xca\xe4\x16\xf3`\xc4X\x99\xc4\x12n\x8fI.\x62\xe3=\x9a}\x62o\r" "ir\x1a\x36Q\xec\xa7\x88\x62\xa6\x42\xfcl\x1b\xb1\x12L\xa2\xcc\x1c\x13Q\x9dL\xfc\xf3\xb7P\xab\x81\tvQ\x11\xe5\x64\xde\xd6\xc4\xa2" "\x19\xa6\x7f@\x8d+NX\x12\x62\x8e\x42\x44>T\x41\x16\x95\x9dv\x42\xcc\xc2\x9c\xdeN\xceo%z\xdf\x46L\xda\x9b\xc8\x36M\x1a{" "\xb6M\xd5\xd7\xc7p\x87\xd8\xd7XH\x1b\xdf\x9a\xc0\xa5\x1d\x31\x8b\xdbR\x9a\x80\xc8\x46\xc4\x05x\x42\xba\xc3\x32\xa9\x35\x89\xd3\xf8\x34\x30\x10" "&\x9a\x85\xa1\x1d\x16%\xf4\xebW\xf6\xc1`\x93\xd2\xfa\xd4l\xc0\xf4\xdb+,Z\x91&\x1dz\x61\x38.\x84\x63\xa9\x16>\xfd\xec\x05\xfa" "\",:\xfeU\xaf\xac\x45\xf9\t\x16\xd2\x44s\xc6\xc5\xa4\xa1\xe9$\xee\x31\x39@\x62u\x13\xa5.p\xe0'ih\x43\x99<\xb4\x9c\x17" "L\x8b\xe5T(\x12\x1b\x05\xe3_=\xf3\x89YW\x62\xef\x14}\ry\x85Nv\x8fR\x80\x8c\xe7\x89\xc3;#\x1f`;\xe8\x05\xd5\"" ";J\x46\xab\xca\x46\nqO\xaf\xf8\xd2(\xee\x9a\x46\xfd\x96,j>\xf8\xe4\xf3[\x86wQz\x02\xad_\x30\x86\xa7;,\xac\x90v" "\xb7\xb6+\x83\xcfGPV\x31Z\x9fZ\xa7~\xa2o$\xf4\xb3\x07\xad-\x45\x1b\xde\xe1\x34y\xd2\x90;>\x61=M<\xe0\x9e\xf6\x18" "\xac\x1f\x10\xbf\xf1\x81,MxG\x05\xa5\xd0\x0b^KK\x34\x13\x93^$\xa2p\x33\xfd\xea*(\xbe;\x8d\x12i\xf2lZ\x90\x1ah" "\x06\x63-\x44\x9d\xf7)\xf5g\x16\x03\x65h\xf3G\xedW\xb0\x16\xa7\x1e\xd0q&\xad\x9dN\xde\x42\xf3\x8e;\x11\x94\x44\x39\x8f\xb6\x35\xd5" "\\\x38\xc5\x82\x04QL\x36[z\xca\"\xf1\xa0\xe1\xb2S\x81\x88J\x8b\xf8\x00\x9e\x66 z\x0bS\?u\xad\xec\x80\xa8\x88\xa6\xf0\x05\x46" "\x94\x83%\x99\xb8\x9f_/\x19yVK\x9f\xae\xaf\x38\xd5\x66Q\x8dS\x98/\xa0\x0c\x90\x88\xe3\x9d\xf2\x08\xca\x04\x91\x90\xbe\x41\x94[\xaa" "\xf6\x18\x0cR\xb0\x91!mvM\xff\x07]\xbc\x17\xd6\x38\x85\xdc[\xb8|qZ\xbfhZ \xa7$\x12\xbd\x33x\xfb\x06\xca\xb4'\xf1" "~\xe9\xcf\xd4L\x8a\x34\xb1\xfe$\xca\xcc\x14q\x85w\t\x8b\xbd\xf0~\x0c'\x19\xa4!\x63M\x43Y\xb5\x14\xda\x05$\x62NH\x43IM\x30\xd6\x82\xda\xabvyX\x0b_kN<\xd4\xe3I\xc5\xb4(" "\x33\x86\xe3vh\xb3tP\x9d:m~\x01\x43Kh\xabm\xd0\xbe\x31-N\x15\x7f\xc5\xc4\x83\x34q\x96O\xbc\xd5\x87\xb7\x34J(\x01" "+\xec`%\x0e\x34\xeaw\x1a\x8e\xa1\xed*\xf8\xcc\x1b\xc3\x8bO\x13\xdd)\xcc\xad\x15\xdcR\x13\x0f\xf8k\x94\x42\xf4\xa3K|!l\x33" "'\xce\xab\x46\xedP\x8b\xb8:\xe8\xa8\x82\x35L\xc2\xaa\x38\x31\x31:\xce`\x9bH\x9a~\xb5H\xfc\xc9\xb4V\xda\x8a\xact\xfc\xb6\x82\xd1" "#\xb1\xeb\x19\xb5#\xc0\xa2}\x41\x16\xe5`\x0c\xd5$\x85\xbf\xfd\xbc<\xe3;|\xb9\xa2Z*\xb8\x9d\xf9\xf7R\x12\xd7\xb1\x1c,\xda\xda" "h\x35\xb8\xd1\xaat\xe3\xa7\x9e\xc1\xa7\x39g\x43\xf1\x34%\x1a\xfd\xaf\xd5\x80nq\x17\xeaHl\xc3'\n\xa3\xaf\xb5\xc1\xca\xcc\xdf\xaf\x61" "\x19\xc9\xfc\x04\x65}\x91\xf8q\x05\x1e\xdd\xa5\xd1\xd5{TJ\x8a\xf4\x37{\x82\x96\xc4\r\xcem\"z\x97`k\x63\xe4\x16\x41L\x42H" "\xebI\xe8\x16\xcb\x8c\x44qGM\x44-\xbf\xf5\x07\x92\xd6[\x9d\xfc\xd8\xea\xf4\xd4\x16\x1b\x02\x88\x18\x45m\x61\x00\xdd\xdaj\?u\xab\xa3" "\xe2\xdd\xefv\x02\xca\x16\x1f\xa1NL\xec\xb0\xc0 \xf4\x8f\xd7\x98q\x64\xadl\xd4\x8a\x64\xa7\xed\xeb\xce/\xbc\x07\xc5O\x88\xb2K\x82X" "\xd1\?\x61\x14\xc5t\x62g\rv\x37\xf4\x0f\x62_\x7f-v\xb0\xc4\x91\xfaO#q\xba\x02\x31\x1f\xc6t\xf7\x46\x13\xb4\xd3&\x88w\xbb" "\x86\x07\xbc\x15\xef\xbf\xc2\xc4\xc4.(\xd4\x95\r%n\x1c\xdc\xce\x9d\x88\xd2\xb5\x0bVw\x16\x14\xa6O \xbe\xf9\x0e\x07\x10iV\xdd\x85" "\xb5\xcb\xa8\xd3U\xf1\rl!M\xb4%\x61\xd2\x9f\xec-\xc2\xfb\x1e\xce\xdd#\xf1\xe3Jk\xee]x>\x18\xb5\x99\xd8Y\xd2\x46\x99\xae" "}\x8e\xe8\xf2\xa4\x39q\x17\x65q\x8f\xa8z\r\x1e\xe7\xf4O\x44\xcdU;x\x1b \x62v\x84\xc9\x8b\xc8\x16\xda\xda\x19\x03\xafM\xff\xa0" "\x8d\xc7v\xc7x<\x05\xd1\xee\xed\x61\xb8\xd2\xda\x07\xa9W\x10\xcd\xfc^\xd3i\x0f\xbbz\"\x66\x9f\xf6Q\xe5\x02\x94\x63\x98Z{\xcdv" "{\x99\xbc{\x86\xd8N+\xe5\xa7\x07\x36\xb6\x12\xbf\xd2\"RG\xd8\xaf\xa6U+\x61\x81\x9c\x44\x14r\xf5\x44\xdcRO\xc4\x44\x8c#\x98" "X\xff\xa4\xaf\xae\x93\x39\x08\xfb\xd4\x06J\xb4}MG\x45\xac\xf9\xd9W\x1dP\xb3\x46m\x9f\x8f\x44V-:\xbf\xa9\xf6\x01\x8a\x01\x06\xf1" "I\x9f\x8c\xccw\x08\xc4\x9a\x91XL\x05\xfdI\xdc\x42|\xe9-\x84\xf4\x39\xa3\xf5\x12\xae\x85I\x43\x96\xa7" "\xa1\xe7\xafZ\x9c\xbap\x1a\xaf\x0e\xe1]\xe3g\xbd~;\xa4\x9f\x63\x35\xa2u\xd4\x66\xfc\xa8#\xc4\xa3\x16\xf5\xa3\xd6LGx\xc7\x17j" "\x06\?\xc2\x1a\x81(k\xf1\xad\x63\xf8U\x05\x17\xd2\x85=\xc2\xb8\x88\x88\x36\xf8\x04##\xe2\xe6Y\xb9\x31RO\t\xcb\x43\xad\x93\x36+" "\xa7X\x86k\xed\x14\xaa\xbcv\n\xee\xea\xda)\xe4\x39\x62\x9b\x9f\xdaN\x63M\xa4\x9d\xf6/\xba\xa0t \x89R\xc0\x88\x32OI\x03\xec" "z\x0el\x64@\x99\x1fn\xa7\xb1\x95\xd0\x82\xef\x32\xba:\x12\x16\x34\xd5|\x12\x9aY\xa3\x88\x46" "]%l)\x14-z\xca\xa2/\x0c\xed\x94\xf5g\?\xa6\xc5\xdd~(\x0b\xb8\xed\x1c\x32Q;\xc7G\xa5\x8b\x05\x42;\x17\x95\xaf\x84\xc8" "\xd1\x42\x7f#_.\x1f\xc8H\xa9\x9d\x8f\x0f\xf2\xa7\x02\xf6\xbc\xb4\x8b\xa8\x0e\xda\x45xq\x14\xa2\xe2l\x17\xe1\xa7\x81\xf8.\x1f\xa3\x14\xb7" "\x85U\xfd{\xcd\x17\xf7\xf7\xed\x1a\x06~\x42\x38\x12\x10\x31\x94\xb5\x11\x12\x65r\\h\?\xd4\\P\x8b\x64\xf0\"\x44\x43\xd4\xae\xb9}}" "$\xca\xf0\xbf]\x0f\xe6\xf2\x89\x1b\xe8\x11\xb7\x1b(Z\x44\xe4\xd9\x46\x38\x92K\xa9\x9a\x91\xcf\xdb\x88\xf3\\\x05\xb4\xaf\x30\xb0%J\x45G" "\x94\x9e\nQJ\x86\xd0/\xe4\xe3\xce\x08\x9b=$ \xcc\xd4\x9c\xf8\xa6\?\xdfI\xc2\\\x61i\x83(\x16\xf8m\xf6\xed*\x8c\xd3-\x10" "i~\xed\xcf$\xcb_k\xeay\x9a\xc0\x1e\x8e\xedk{\x38T\x8eX_\x1b\xb1\xb7\x0f\xa2x/&Q\x46\x9c\xc4\xb9\xea\x62\xf4J\x44" "&\xd3\x9e\x1e\xf1V)\xeb\xe5\x42\xbfX\xc5\xf0Y\xb4\xf8\xbd\x8d\xde\x12iR+\xb7\xbd\xf0\x80{\xebg\xf0\xa2\xcc\x1b\x38\xdd\x1b\x13W" "\x45;\xc4 :\xed\xb0\xff\x89\x45I\xc1[x\xb2!\xca:N\xfb\x36\xfc\xf8\xf0\xb3\xd4\x31\x97\x84\xbb\xa5j\xc5\x88\x93\xdeM\xa4\x14\xf3" "\xa5io\xeb.\xe8v\x87\x9a\x1b!l\xf5\xda\x1d\xde\xc8X\x1e\x41\x94\x1d\xc0\xed>\xea\x44\"\xee\xd5Gk\x44\x14\x03N\xa2X>\x12" "\x65K\x43\xbb\xcf\x9e\x98Q{\xf5\xa9\x7f\"\xc4\x99\x8e\x42\xb7u\xa1}\xaf\xe5\xe8\xfe\xf7G\xca\xd5=\xecy\x85n\x14\xc0\xda;(~" "W\x89\xf5\x32\xd8\xd0\xabP\x13\xdek\xee\xba\xd7\x8aI\x0f\x61\"\x8ag\xe4\xf6=\xf6\xee\x31\xc7`\x1f\xd7\x07\x9fRS\xdc\x87#)\x97" "\xf7\x18\xdc\xb6\xef\xb1\xc6\x43\xcc\xe3\xefX\xaa'\xcaR}{\x18w$|\x42-|\xf4=\x87\x97\xac\xf6\x14.\xd7\x88\xd7\xaa\xf7J\xe1" "\xe9.X\xbf\x41\x93\xa9@\xe2*\x0f\x03\xb9\xf6\x34\xe8\x94\xfd\xb2\xa4\xfd\x42\xb6\xf5\x97p\xda\x95h\xd1\x45\xdfi\x32\xf3\xc4\x64+\x66>" "\x85\xc1\xebR\x18\x85\xc0\x01&\xfd\xe5,\x35\xd7\x02S\xfa\x44q\xd7\xcf<\x18\xb1\x11\x43\x44\xec\xc4\x83\xb8\xc6#|\xbc\xe8\xc2/\xdd\xfb" "\xd3%\x8e\x17\x65mh\xf4\xabu\xec\x82!\xad\xa2'\x11\x42\xfc|Nh\x41\xf3*\xa8\xafT\xdb\x83\xb2@.tg\xc6\x88\x46\xa9\xa0" "u\x39kX\x46\x12\x31\x9a\x0e\x61\xc8\x41ZM\x9dZ\x90x\xdb\x0e*\x33\x88\x9d\t\xe6\xa2\xda:I\x44\x1cP\x34\xca\x38\x30\x89\x34\x64" "W\xa6\x8b\xc6\xbd\xda\x64@l\\\x06\xadz\xf2\x1cx\t\x0e\xb6\xfa\x80\x07}\xa3Q^\xa9)&\xeb\x19\x42\xad\x8fI\xd4\x88\xcc\xae\x8d" "\x9a\xbb\x16\xfe\xbcm\xc4(\x87\?\xd8\x17\xf8SR\xee\x8c\xb0\x1e\"\xf1\x34\x34\xf2\x99\x43(\xab\xaci\xed#\x62\xa1\xed\xc4\xfe\xcc\x44\x97" "\x84\xa7\xa1\x8b\xddi\x1a\x0c\xfa\xc1\xb6\x61Z\xd4\xb9\x82qM{\x11\x64\x9e\x8c|\x0cg\x7f\xa2\x95'\x07\xfc\x87\x16\x35\x90\x41\xd8\xd8\xfa" "\x39\x63\xe9\x1b\x94\x46\x46{i\x16Q\xb3\xb2hQ\x62\xb1\xff\x03\x17\xa2\xa2\x61\xa2\x88\xc4\x32rKP\xbd\x07kxI*\xa9\x41\xe7Z" "\x45\xa4\x99\xd3;\xd7\x96\x83I\xe4\x63\xea\x64\x63\x8eh\x38=\x95\xc4\xee\x95\x31\xeeT\x83\xad\xc6\xa2\xbb\x32&\x32\x1fi\x11i\x33\x8d\xc0" "@\xef \x9b$\x85l\x92\x9e\xd5\xdf\xca\x12\x0eQ\xbf\x36\xd1\xef\xad`\xac%ZP,\x63W\x34\xb4\xdbV\x38\xdb\x98\x66_\x98\x45\x9b" "|\x10-Nu\x31\xe5\x00m\xf0\x08\x37=\xaa\xad\xdc\r\xe7W\xff\x9f\xf2\x8f\xbf\x04\xf3\xd5\x7f\xf9\xcb\xca\xe8o/Lt\x31\x61Q\xdf" "\xecK\x1f\xf2\xd5\x03\x17\x1d\xf7\x1d\x17\xbb`\x9f\xc5,\nk\x07#V\xc5I\\>\x62/\x02\x89\xab\t\xf8\xad\\k<\xb6z\xaf\x1d" "\n\x42p\xb8\x32\x62\x17&\x89\xa8\xbc\x17\xc1Q\xbf\x00\xba\x63LX\xc1@\xd4\x07\xe1\xbc\x0c!\xac\x61\x44\x84\x11\xb3\x88\x30~\x14\xd1^" "\x97\x44Kg\x16\x65\?\x85j\x88\x42\x98\xc1G\x87\x41\x04\xf3\x13\x94]S\xc4\"\xf2\x1d\xaf\xe7j}\x1a\xde\xbe\x1b\x83\xe5\xab\?\xbf\xe4" "\xf9\xb4v\xcd\xc2``\"\"\xbc\x07\x92\xd8\xca*\x91\xf2\x61\xaf\x65\x8c-\xe8\x41o\x8e^'Qo\xf8\x94V\xea\xef\xde\xf6\x46\x9c\x14" "\x02\xf1\xa9\xe9\xc4\xd9\x8fU\x31\xa4\xc1*\xa4\xbdpIs\xc8\xc1\xefX{\xa1\xdd\x12\xa6\xbdY\x94m\x18\x13\x41X\x14\"\x31\xffit" "\x7f-\"\x15\xa3\xd2\x31N\xd7\xad\xc6\xd0\xd1\xc5\xc2=\xa9QITI\x91w\x8cRK\xac\x80\x92\xd6M\xb9\x9buK\xd6\x38\xb1\xfb\xfd" "<\xb2\x11\x46\x9c\xc4=R\x1d\x8b\xdd\x44\xaf`\xb4\xba\x81\xc5\x1f|\x36m\xbe\x17\x96\xbcq\x0b\x37\x86\?V\x62\xef\xd5h\x85\x44\xc4\xa3" "\x8a\x13#\r\x12T\x44\xf9\x8c\xfby\x65Q\xd9\x37Z\xe1\x89\x07\x1dL\x65\x91\xa8m\x96vZ\x99~O=\xfa\x89\xe6\xae\xc1\x00m\x11" "O\xf4\xf6\xe2k\x90x\x92\xc6`\xa9\x03\x35\xa6\x8eg\x96\x38\xa9\x86\xb8\x1b\xb0Q\x94,\xda\x93\xf6s\x07\xca\xee*\xea\x80]^\xc7\xed" "\x95\xf6\xd5\x97\xda[`\xf2J\xf6\xa4\xeb\xb4\xce\x34\xcc\xbe\x38\xed{\x65\xe2_\xcb\xbc\xc4r\x95\x90\xf7\x13\xa0X\xb1\xf6'n\xc0\x82\xde" "\x17\x83\x44\xb5\xc1o\xeb\x11N\x42^\x17\xc2'Xj\x89\\\xfa\xe3\"\xc5\x34\x12\xe7\x90\xa4\x89\xcd'Q\xf6\xf5\xb4\xd5o\x01\x11_k" "\xa9\xddP&\xe6\x37\xdaKm-\x99n\x1f\ti\xe8\xea.\xb5s\xba\xd4\x92\xca\xd4\x8e\x82\x88z{\xb8z\x10\xb2\xb7\x9a\xcb\xaeil" "\x63\x8e\\!\x1aJ\xeb\x12\xf3\xf5\xc4\xbe\x07\xa2\xd1_\xc2=\x94\x90\xea\x07-|K\x1d\x18,\x31\xc7@\\(\x97\xf8*:*ZZ" "\xd4\x89\xd8\x39J\"\x32\x14S{G,\xda\x63x\xbd\x1f\x03\xf3\x65(\xde\xe5\x89-<\x13\x8e\xd1\x44\x8c\x1a\xb8=\xe6\x01\x89\x63\xfc\x04" "\xa7+\x31q\x8b\xe8{\x03\x8b\x94\xb6\xfb\xb2\x96\xe7\x30Q\x45\xbcGt`\t\xda^\xfdnw\xfe\xd3\xbb\x66\xe6\x15\x36\x8a\xb7W~n" "\x03\xe6\x8b\x46l\\#Q\xf6\xfe\x12K\xf7 \xb2\n\x13k\x91\"\x62\x19\x92\x44\x64\x9c\x15Nm$zyP\xcc\x84\x89\x32\x15I\x44" "\x66Y\xe9\xd7\\%w|\x89\x16]T`\x81\xc9\xd6.S~\x01\xf1\x64J\x9al\x82$\x62\x14\xba\xd2\xec\xb5\xfa\xcb^+l\x30%" "\x1e\xf5\xe6'}\x95\xd3\xc6\xe8\x9f\xb3\x94k\xf8\x8b\x62\xca\x63\xa5Yr\xf5O\x96\\\xc1\x9c\x91\x88\xac\xb9\n:x\xe3\xa0\xdb\x32Z:" "\x91\xa8i\xbe\nz;#\x8f\xaa\x34\x36\x9a\x05V.\xa7\xc1i'\x05\xa0\x37\xb3\n\xc4\x34\x9d(\xc7\xdb\t\x9d\x88.\xcd\n\x46\xfd\x44" "\xe4\xcfU\xb0(\x1a\xff\xc4{%\xd2\x45\x1b\xf5UX~\x00\x91\?W\x7f\xf9s\x15\xf6z\x9c\x99\x86H\xbdp\x90\xc2\xcc\x32\x89\xcf\x07" "\xa3\xfb\xad\x88\x34\x06\xc3n\x11\nx\xc1k\xe9\xec\xc0\n\x0b\x17\x44\x39 \x94\xb8\x7f\xf9+X\xab\xa8\x82o\xaa]\xccUt\x9d\x01\x91" "\xd3\x99\xdcSh\xedU\xc3\x07\xd4|\xcf\xe4\xd1\x97\xf8\xd8\x14M\xc7\xdb,\xba\x65%\xd1\xb4\x8f-\xe2t\xef\xc4\xd9\x30\xd2\x44'-~" "|\x88\x9es\x81w\xa6/\x84\xb5\xa7\xb6\xae.\t\xb1\x18\"\"<\x81\xf0\x61\xe6h\xe3\x39L\xab\x80U|\xa1\x41\x18\x96\xae\xd8\xcf\x14" "Uv\x1b|\x38m\xd5VZ,W\x34\xd6V.\x8d\xbf\xfb\x91\xe5\xed\xbf\x9aX\x44}\x39\xa9('\xf6\xc9\xa5Z\xbb\xb1\xd4\x97\xba\xca" "n\xbd\x84\xb5'\x8b\x1a\xd4y\x33\xea\xa4\x0b\x8b\xdc\xc5=\xe9\xbb\xf5\x34z}|,\xcb\xc1Zk\xac\xb4\x35\\\xc5\x13\xd4\x1eph)" "\xe4]\x46M\xbd\xcbVJ\xc9\xf7\xef~h\xe4S\xa2\x9f\xa8\x9b\xc7v~:\xb0\xe7`\xfd,\xdf:*\xfd\xd6\x99\x85o\x98o\x13\x65" "\x87\x30\xd1\xd6^I\xc4 \x92\xa9#+\x16\x63\x37\x16\xb3\\\xfc\xedOw \xba\xaa\xdf:\xcf\xf0\xad\x9d\xa2o\xd8\xf2\t\xb1\xc4K\xe2" "~\xa2\xc4\x63\xb5\x15\xf9\xc6iv\xedol\"!\"\x99\x98\xd8\x9bO\"R\x66\xad\xf3\xbfL\xbf\xd7\x85\xb8\x93h\xae\x35\xe6k,\x11" "\xb7\xd7X\x97%\xa2\x1f\xcc\xd4\xb8\xb2\xc8\xb3\xa1\x98[\x65\rN\x63\x44\xa4\x1c\x0b{*\xd2\xa6\xdf\x46>\x93H\xf6<\xaav\r\xe7\x01" "\xa2i\xd2\xe9\xa6t\xe2\xfe\xc5\xe8\xff\x64h\x98\xcb\x17#\xd5\x10V\x37\xd1]\xb9\xe7\xbd\xc6vK\xd6n[\x30\xe6\x16-\x1c\x9d\xb4\x17" "\xc3\x9a\xf3\xd0\x06\xcd\x8e>j\x1ft\x46UO\x34\x17\xea'<\xe0\x80<\xa2X\xfd\t\xb5\xce=\xe8\xa0\xfd\xe0\xcfqu \xfe\xd8\x88" "\xc5\xb9Q\xa3y\x08J-\xa3_\xd9\xc5\xd9\xaa\xd3\xea\xed\xa0\xfa\xa8\x83\xc8\x43P~\x06\xc5\x33\x10sh\xb4\x87\xea\xc4\xc8\x01k\xe6\x42" "w\xf5P\x7f\xfd\xa8\x0f\xc3\x30\x93\xe9\xae>\xdc\x19\xb5\x8b|\x08\xf3\x17\xa0\xf8\x7f#\x62\xb4\xc0\xb4\xabH\xd4\xf2p\x08\x0f\xd2\xa8\x1d\xa8" "k\x0e\xca\x62\x36\xf3\x04\"\x03\x9e\x83\xdbY\x30\xaf\xb3k\xbf\x46\x01\x1e\x0f\xdag.\x88\x83qPo\x98\x16_\x1cil\x44}\x86\xbf" "\xb0\x9d\xf2\xf8\xbb\xef\xfa\xaf}h\xb2%\x91H\x41\xbdSP.\xaa\xf6j\xc4\xa9\xcan\xc3\xb7\x84\x85/W\x41)\x95\x0c;\xa4\xfc\x9b" "\x82\xbf\xb1\xc6\x95\x03\xe8^\xe1\x61\xa5\x9a:\x13\x61\xf1\x03\xfc)\xf9\xa5\x89\x89Q\xad\xa6\x62\xfd\xf7\xe7H\x37\xd1\xd9\xf1\x7f\x02\xd8\xb7\x0b" "\xba\xd7\xff\x06o\xb7Z\xa6\xfe\t\xfe\x0b{\x36\xf2y>\xa8\?\xcf\xf0\xd1'\xc4\xfe\x16\x12\x8f\xbd`\xd5\x0b\xcb\x97\xfe\xf9Z\x03\x46\xe0" "i\xe0\xe2w\xe6\xbe\xbbv\x82\x9c\xb6Tmj\xb1\x86k\x04\x66\xd9\x1e\x0fQ\x9b\x63\xd6\xd8r\x14\xd3Z\xacY\xc2\x93\x18\x95\xeb\t\xf1" "o\x42V\x03\x12\xb7\x88\xbe{\xf1\xb5\xbb},\x8b\xde,~(\xe7\x46\xed\xb8\xb0\x08\xff.,~\xfb\x37&\xae\xd9\xf7\xaa\xd8\x43\xb2\xb6" "\x0b\xbe\x37\xf1\xa1M\x39\x8b\xc6\xc1:\x05\xc5\xc1<\xf9\x9c\x45\xfa\xfb\xf9\xa1\x65+\x12u\xde\x9b=>p\xac\xc6\x9c\x41]\x80\xd8}\xb1" "\x38\xa0\x04V\xf1\xcd\x1f\xd4t\xa0\xce\x1av}\x93Xz\xb0\x1c\x43\"\xa5\xf9\xff\xb9\x38\xf0\x8b\xe5+t\x43\xed#\xc8_\xce\x13\xfb\x8e" "~\xf9\x1a\xdbwML\xa6W\xb5\x06'\xc0,\xf6y\x44k\x89\\\x1d\x1a\xdd[\x90\xd8\x99\xd2])k[\x00=\xe6W\\\x00$\xb4" "\x44\x9e\xf7\xa9j\xd9hl\xeb\x1a\x9b\xfa\"\xce<\xc5\x93W\xff\xfa\x32|\xd6\?{\xee\x1d\xb9j\xd2\xda\x83{\xa7\x37\xeev\xd4\x36\xfe\xa5" "\r\xbfkX+\x07\xfd\x81\x06\xdc\xfa\xec\x9eX\xbfQ\xbd\xe1r\xe1\xd5\x1b\xd5\xa1\xb0\xa7\x87\xf6W\xf9\x62;\xa9t\xd5\x39\x17\xc8\xf9\x1a" "\xd0\x8eo\\\xea\xa5r\xb5\x30\xeb\xa9\xb1\xf8\xd7U`\xadw\x42\xbd\xec\xd2\xe6\x96\xdb&kTY\xdb\xac\xdc\x1b\x41\xf3\xfa\xa6\xe9\xfc\x89" "\x8a\xf1{\xdb\xba\n\xdc\x04\x0c\xcf\xec+\xf9\xed\xc3\x95#\n{\xfbp\xaf\xd6\xda\x07\xbd\x85\x7f\xbfKh\x81\x15\x98v\x45YSz|" "\xec\xe3\xbd&\x43{\xa6s@g\xeeP\x35\x1a\xd8\x46\x0e\x8d\xaa\xc4!z/\x41\xef\xc7\xe8\xf2`\xbf\x10|_Y\xbb\xe1\x34\x7fz\xf7" "o\x80\xcb\xe3\xec\xc3U\x93j\xc0\xe7;\xf2l\xc3Q\x63\xac\xd5O\x30\x38\x05OSW\xd4\x1fv\xfe\x61\x93\x10]]\xc1\x9f\xe3\x87z" "x\xd0\x1e\xbf\xad\x1d\xd1\x99\x37\xa6\xfb\x04$\x0eN\xee\x96Z\xcb\xb2\x97\x85\xf1\x39\x99\x01\x12\x01\xee\x31\x89\x30\x7f\xda\x86\t\x1b\x82\xa7Z" "\x0c\x96M\x97/\x44\xe4\x35\xbe\x9f\x07\x0b\xf8\xb7\xad\r\x96\x8f\x36\xe0\x80\x88}i\xa6\xfd\xad\x04\x9c\xe9\xfb\x44r:/\x15\xf0\xf4\x37}" "\x03Tw\xdc\tx\xbc\x41\x30\xa6\x38\x89[\x63XX\xab\x88\x34\x85\xef\x19\xa6\xda\x9c\xb2\xb8\xe3!\xc5u\xc6\x12\x87{j\x7f%\x99\x34" ">\xd5\xd7\xb4\xf2%\xa7\xdd_\xe3\x1b\x96\x11\xf9\xb0\xf2nL\x86^\xdd\xb9+\xaf\xee\x8d\xd6\xfb%\x11.\x64H\xa4/\xaf\xbdx\xee\x0f" "\xe4+\xd6\xa2\xb0\xb6H\x93\x00\xcdk\x07\x9fO\xbf\x9a\x98\x34 \x0f\xbd\x65x\x1a\xd9\x87\x0c;H;\xf6\x91\x86\xb9\x64\x12\xa7\xf6\x35\x13" "]\x0b\xab!\xc3\xb7\x9cs\xba\xce\xda\x9e\xfb\x86\x37\xfd\x7f\x35\xeb\xecp\xdf[[u\x88~\xed\x1e\x9eK,\xc0%\x8aj\x8f\xe1\xed\xc9" "\x02\xa8\xbc\xf3\xd0\x15+)g\xea\x80Z\x31\xe5\x61\xee\x97\x13\x43\xd8@\x9d\xc3S-\x91\x11I\x0b\xd2o.)Ik\x61\x84\x11\xa5\x96" "\xd4\xb4S\x8bm\x7f\xa3\x80\xa0PHj\xff\xf4\xe4(\xe0\xbfu\xa1\xa8Q\x8auT\x08\xd1\x39i\xb1\x80\x44;\x16\x65\x66\x38\x16\xc2\xc4" "\x44\xad\xae\x01Z\xa5G\x99\x85\xdfx\xa0\xce\x84ij$\xc7\x62\xfcY\xb7Z\xc1Z@>\x31\xa4|V\xb1\xc3\xce\x0e\xe7\xba\x01@\x02" "\x38u\xfez\x32\x14\x10\xdd\x14U\x1c`Xk\x65\xd4\x05X{`\xc3q\x1e\x8b\xeb\xd7$\x91\xd7\xb4M\xab\xbd\xf3\x90W\xab\"\xee\xdf" "\x8c\xf3~n\xae\xcb\xfb\x1c`\x95]T[\x18m\xda\x85\xba\x8f\xd6\xe1\x62Qsnt\x8d:\x33\x1a>\xf9\x63\x64\x9b\xe8\x15\xb9\xdd\xc6" "]\x44\xaa\xc0\x83\xdb#\xe5\xf2\xe8\xd4\xb3\x16\x86\x82\xe9&\xff\xf5/\xf3\x94\xd1\xaf\xdf\xea\x34\xa9h\xe3\x62P<\x9b\x16\xa7\x1e\xa3s\xcd" "i\xd4#\xbb\xac'\x35\xed\x9f\x45\xab\x81UT\xd1\xf7;\xd5\x00\x14{\x35\xc5\x62W\x31\xdc\xdd\xb4\?\x9f'\x1c\xa0\xb9J\x66\xd4\xb7\x14" "\?\xbe\xea\x62\xacV\x97\xe7\x38\x83:\xddn\xc1\xa5\xf8o \xcf\x9a&\x36\x44K=\x8c\x61\x12I\x1f\?!\x0b\xf3\xd9\xe7\xa9\x12\xc4O\xa4\x35U[V]\x90\xc8\xfbR\xb8\xa6I\xbb" "\x80\xfd\x32H\xcf\xb9\x35\xcd\xa0\xe8\xc4\x87+q\x0f\xf2\xc3S_\x7f=\x17\x38w\x11\xf2i|\x65$\xe1\xff\xfdqt\x15\x62'\x15\xa4" "\x06\xfe\xf3\xf8ww\x9f\xdc\x02\x63\xc1\x18,$\x82\xd1\xee\x08\x31\x41\xdbI\x45w\xf2\xa7\x0c\xd2\xa2s\x89]\xc2\xc2\xf0\xe8\x61\x82\x9c\xb5" "\xb2h\xf6\xb7O\xe5\x11\x14\x33:\xe2\xc1\x38V\xae\x41\x99n&\xca\x9e\xff\xce\xa5\x9f\x1f\x05^\n=\x0c\xd2\n%\x65K\xa9\xe1\x32\xcb" "\xcc|\x30\x62N\x1a\x62\xf6\xc2n\xcf\x9a\xec\xdb\x15\x31\x18\x0c\x13\x7f\xc0<\t\xc4\xd7\x9a\x89\xf0\x46\x04\xf1\xdb\x9er\x06\xabM\xb0\xaew" "\x94\r\xf1\x42\xacP\xb2XU\xea\r\x1b\x33\xf0\xba\x02J\xcf\x95(\xdb-\x89R\x13\x13\xc5*\x9c(\x16\xc0\xc4\xaf;#\x46J\x10{" "G\x13]\xe4\xbf\xee\xa2\xec\x1e\xa2\x1c\x9d'\x0c\xaa\xf7\x98m'M\xdcH\x0b\xdd\xe5\xfbm\xfcT\xc3\xd6<\xd2\x8e\xfaV'<\x07s" "\xf0\xc4\x12\xbe\x14\x46\?\x44\x31\xb7 .\x11u,\r\x10\x35&X\xa3\"\x0eR\x46\xfbL\xbc\xad\xc5~\x35@\x02\xe0\x38`\xe2\xa7\xea" "\x07<\x05\xae\xcb\x88\x99G\xf0\xa2\x12\x14\x7f\xfc[<;\xca\xed\xa9\xab\x03oZ\xac\x1d\xe2T#|\x39&\x34X\xc8\x90\xd6@\xec\xb1" "\x1e)\xb4\xd8\x90h\xb1\x81\x1d\x16\xf1\x15q\x86\xb1\xbe\x10\x33\xf8,\xce\x95\x88h\x34\xcb\x81\xdfm\xea\xb9\xc0\xc1\x97h\x41\xe6\xe3O\x43" "\xb6\x84\xc1\x0c\xf1\xa8Q<_\x19]]\xd8\xb9\x8cSi%\xee\x1cw\x91\x07\xd8$MV\x98H\x1c~\x83\x93\xb1\x91K\xc9V\xf2\x65" "V\xcb\x10\x93\x37v\xc8\xd2\x7f'\x1b\x8bS\xdfNNK\x66\x0e\xce\x85;\x39\x9e\x9a\xc6'\xcd\xc1|I\xc8\x87|<\x0c\xff\xb4O\x7f" "^\x84\xd6\x9f\x1b\xe1\xc6\x8e\xc4\x41>\xc0g\xcc\xe1P.\xa6^\x8b\xda\x84\xe9\xac\xa0H{\xf1\x34\x8e\xd4\xc1J\x83_YM\xe1\x9c/" "N\xb4\x88\xd2\xbc\x12O\xe9Plq:\x39\xac*\t\x35\xb5X\x84\x41\x30\x89\xb5G\xff\x34\x85([\x16\x88\x0fy\xe5-\x38\xd4\x1b=" "\xe1\xf1XL\xef\xe8\x8c#Q\xc6\xad\xc2\xe0\xd8\x86U\x88h\xe8\xef\x98\xc8\xae\xa7\x34\xad\x10\xe0\xb4-\xe2\xce\x1b\x02>\x9f\xe1\xed\x87\x34" "\x14\x85\\\xd8\xdb\xd2\x03\xc3\x97\x19\x34Yt\x17\xb2\x81\x8f\x1c'%Zp{\x15\xbf!>\xe1\xab\xfe\x46v`\x12\xc5\x96\xba\x93\xc3\xfe" "\x01\x62\xf5\t\xe3\x1d\x12\xa9\x87\xa2\t\x81\r\xf9\x44\xf1\xab\xd7\xc9\xe1\x06v\x0f\xach\x12O\xf2\xeb<\xcc\xcb\x85\x7f\xb9\x30\xaf\xa9\xaf\x8e" "\xec\x85|\xfa'\xee\x9c\x87\xa1J'\x8f\xe5\xeeN\x01\x43\x64\"\x32\x1b\x13\xdd%\x12\x0fi\x1c\xa8\xc0\xe2\x8dQ\x1f\x43\xe2\"l,!" "\xfe\xcc\xd0\x03\xef\x14\xa8\xc6\x86]\x14\x8b\xc6o\x30W\xc5\xda=\x8b\x0f\xfe\xb6\xa2\xe2\x02\xcc\xcf`NN\"\xda\x08&\x8cU \xa2\xf6" "\x14QV\x61\x45\x0c\xc4\xf1\x9a\x88\xd1l\x85\x61\xafhp\x88\x41\x62\xa9\xe7\xcf\xbf\xdc-k]\xb0>\x83\xb7}\x12\x07\xdd\xa0\xf8\x12{" "\rh\xa3\x37\x9c!\x43\xa2l%\x66\x36\xa3sV\x45\xbd\x8dt\xf8\x88\x62#\x43\x9co\x8d\x30\xea$q[\xf1\x1b\xfa>\xbb\x95\x91\xed" "\x03\xb7\xfa\xa4\xd3\x46\xf3\x42\xc1\?\xe3%\x82\x34\x15\xd6\x1d\xc4\x8b\xac\xd1\xbeP +[\x44\x0fI\xcd\x8e\x7f\xa7\x45\xcd\xa1\x85\xa0\xf5\x62" "\x8c^\x32\xf0\xdd\x43Zg\x16\xac\xf5\xf2\xfekt\xd1\x87\x38\x1c\xf3\x12\x93\x9c\xf2\x46\xdaL\x1f\x35_\x05\x45\xa4q\x98\x99YR\xf2\xce" "\xc7\x17\xbc\x12N\xd9 \xf6\xd3Z\x1f\x16h\x00\x04\xeeu\xfd\x82\xc4\x43\x15<\xe1\x06\xf4P\xbf\xb1\xf2w\xd4\x17\xdd\xc0\xcd\x14\x85\x65\x1b" "\x46vk}\xb5T\xcd\x0b\x0e\x63\x38_\x14-\xbc\xc8\x38\xcd\x1b\xf2r^\r\xdf,zq\xa4\xf7\x85\xf7\x04\xd1\xe2N\xd9ih\t\x98" "l\x80/;\tI\x43\xe5_\x88\x66\x1a\x93Y\xd5\x98|\xf6\x0c_\x0cV\\\x42v\xd1M\xd1)\r\xe2\xbd\xdei\x85\x04\x87\x1f#\xe2" "yn\xb4/\x46\"<\x9f\x88\xa8\xb5\xa4\x1e\xdd\xd8)`\xcb&\x31W\x06\xe5\x04^!U\x37~\x0f\xaf\x11\xf7\x36\x81X\xbbU\xae\x8c\xd8\xd6)\"\xfc\xda\xb0\xb8\x07\x91\xa4U\xd8Y\x10\xc5\"\x82(V\x36\xcc\x9a\x91]^\xca\xc1u\xa2\x05\x85\x06" "\xf6\xca\x41[\x17\xa2\x94\xa4SU\xbb\x99U{(\xcez\x64\x96\xb0\xdf\x85\xc4Z\xd9\x88%r\x12;\x13\xf0\xf9\xd6HQ\x81\x41\x31i" "\xe2\x61\x84\xd9\x06w\x19\x65\x16\xdc\xd7\x95x\x1bv,\xdc\xdbj\x8f\x9a\xb4Vt\xfa\xd2\xa2\xa5\x0e\x8d\x89\x1a\x19\x8c\xee\x88}\xbc\x31\xc6" "\x8e\x42>\xa4\x00\xfd\x0b\xd1\x0e\x63\xa7\xcdW\x46l\xc2'q\x89\xe4\x87Q\xbfP;\xcaU\xd8\x84\x33\xbf\x41|\xebj\x38.*\xef\x8c" "\xd8\x36\xc1\xe2\xd6\xa8\xe3\x83j\xf8\x8c\x07\xc1\x33\x07QL[\x88\x87\x1b\x9c\xa5\xd5\xa9\xc2\x19\x06\x31s\xe2-@\xd9=\x16%)@\xf6" "\xaa\x12\xc5\x17\xa2\x10\x36\xb8\"\xf2\x38\t]U\xd6\xa2\xcd\x95\x36'U\xb6p\xfe\xfb\x44\xa4\xc5\xd7\x1dwKt\x0c\xab\xd8\xabH\x44\x11" "\xaf\x46\xab\xefp\?\xf4\xe7%h\xdfR!U-\x95`\xcd!\xfc\x0b\x9a\x18]\xd0\x10\x99\x13\x13\xf9\xc4\x93#\x65\x8a\xa8#\t\xd2\xd0" "\x84!\xbe\x18\xf9\x08\x9e\xfd\r\xb4\xc3H\xb9\x01\x91\xa1\x1b\x9a=\x1bp{\x41\x94\x19\?\xa1\xb6\xc0\"\x8a\x05\x8c\x88\xda\xdbgQ\x93\x9c" "\xc5\x38\xbbN\x88\xec\xdak\xfe\x85\x00T\x13\rlK\x12\xba;L\xbbZ-\x36\x34\xe3\x36\x34\xc3\x36\xe0\xa0\x42\x08\xa3h\x12\x65\xad[" "\xe8O+\xd8\x66O\x9a\x98\xe0\x30G\xca\xe7hN\xed\xb2j\xe8^\x35\xe0\xc2\xbb\xd3\x80\xc5#\xb1Y\x31\xc2\x42\xa9\xd3\x88V\xd2\xf7i" "\xc4)<\x46\xd3\xbe\x01\xa3t\xa2\x38\xea\xeb\x34\xb5\xeai\x62;r\xa7\x19\xca\xe6v\xa1\xdf\xbb\x0bZu\xfa\x41\x30\xbf\xfak\x84\xe4/" "\xb2\x0f\xcf\x44\xde-\x88\xa4m\xf2T\xf0\xe8\x85\xad\xd8\xc4\x44\x1d\x01\xdb\x42T\xb9p\x93\x62\x12\x16<\xaa\x99\x96h\xff\xc3\xf4\xa6\xd3\x8c" "\x9f\xee\xe2^\xce\xefIZ\xf4\xb4\x1e\xeck\x17\xec\xde_|\x87w\x07\xb8\xb1\xec\x0c\xfd\x62\t\x44\xb3<\xd4\x8e\xf8\x10g\xcd\x12\xc5\xb0" "\x91\x88N\xf6\xd0_~*\x0f\xe0\xea\x16\xc4\xa7\x1a\x62\x03\x12Q\xbcw\x13\xdf\xe5\xe9\xc3h#i<\xa4|\xca|\xd4q\xfe\xa3\xf6\xeb" "\x1f\x35\xc3=j\x86{\xd4\x8c\xf2\x88\xed\x8f\x44\xd9.\x42|z\x07\x65O#\x11\xe9\xf0\xa8\x19\xeaQ;\x42\x8f\x38\xb2\x80\x88Z\xf8Q" "\x07'\xcc\xdf\xe3\x8d=\x85\xb4\xa0\xd9\x89\x32\x0b\xd3\xdc\x36\xc6\xce\x63(;\xcd\x89\xe2\x8f\x9c\x88\x37~\xd4j\xe4Qk\x8bG\xf8\xbf\xeb" "<\xc2\xce\x93\x98\xc7\xdf\x35\xab<\x62\xea\xa8\x33\xe2\xcd\x82\xf3\xa3\x8a/\xa0\xf8\xbc\x10\xc2\x43Zg\xa4\xf3\x1b#l\x06$VW\x46\x7f" "\xc3\x13\x8cl\xd5\xd5\x9ei\xbfy\xa4\x1d\x8c\x91_\x7f\xa6\xf1u\xb8\x7f\xd6t\x18\x61\xa6\x93\x88\t\x85\x91\xdf\xeb\xe9\x88~\x84\x63\xac\x85" "\x30J#q\xd4\xe4~\x8e\x9c\?\xc2\xda\xadRuT\xb7zn%\xd1n\x34U;w\x12\xd1\xf4\x30\xb5r`\x11g#\xb0\x88\xf7\x86" "\x8fG\x66\t\x14w\x06\x9d\x91\x36:\xc4\xb5\x91;Oz\x15\x34\xfd\x90\xa3 \xf3\xe4gW\x38\x01\x93\x34\x39\xee\x8f\xd8\x44ri\x7f\x94" "\xc9\x8b\xda\xb7.\x34\xe8\xad\x9c\xd6]\x19\xd9\xc3[Q\x9f\x8d\x06n\x14\x0c\x32\xf0\x8f\xc4\xe2\x05(\xa7\xe2\x12Q\xab\x30%\xb5n\x9dv" "\x18'\x34\xf6\x85`\xda\x94O[\xd0\x19\x86\x11\x8c\xb4\x89r|\x02qq\n\xeeo \xa2}\x1c\x61\xe7\x15Q\x8c\xb3\x85\x96\x9e$Z" "z\x62\xe7\x13\xf1\xf6\x14\xa7[\xf0\xb5J\x9aL\xbf\x33\xf1\x9e\xdaq\x1e\x61\xff\x11q,u\xd9(\xca\"\x8b\xe9T\xc7\xc8m\x06\"Q" "\xdf\x9c\xa8\x35\x1b\x8b\x89\xbfZ\x0cH\xd4\x8e\xe5(\xaa=\xb8\x1f\xc8\xfa\x85\x30\x11\x14\xd5\xf1\xb5\xe3\xcc\x04\x94m\?\x1d\x35n&\xf6&" "v\xdb\x18\xd3[#l\xc9!\xca\xc1\xbc\x42\x7f\xf3\x15\xd5\xde\xb5\x63\x36\xd2\xfa\xf7\x15\xe7\xfb\x10\x07R\x1e^u\x44\xcb\xd4\xda\xf0\x35L" "\x7f\x82\x62\xf4*\xd4v\xf6\x35\xaam@\x14\xe5\xd7h-\x31}\xc5\xa1\x61\x1du\xbf\xday\xfb\xdd\xd5\xc0\xbd|@\xdd\xd2\x41\xcc\xe6@" "TVo\x1a\x8b\x37\xff\xf1\x02\x14\x43m\xe2R\xff\x8e*\xe4\rN\xd0:o\xda\xf4\xbdi\xbe\x7f\xd3\xe1\xd7\x9b\xb6wo\x30\xeb\x15\xc3" "l\xf0 \xb9\xfe\rN|\x89\x62t\xd2y\xd3\x11\xd6\x1b\x8e\x18!\x8a\xaf^\xe2\xac\x00\"\xc3\x31\xc3\xdaL;Xo\x31\x12\xe6-n" "\x1f\x8cQq\x8e\x39l\xd2:\xb8&\xeeJ\xc9\x9eh\?\x62\xf2\xfb\xb3\x02\xc5u#\xf1$\xe5\x66\xe2\x37J\xca\n\xe8}\xc1\x8d\x0b\xc4" "y\xdd\x7fi@\x1b\xa7\xc1w\xa5\x18\xde\x0b\xb5ZVQ\x9b\x14\xd1\xae\xdaN\x44\xb3&\"\xda\x90\t\x9cW\x12\xf7\x88\x02<-\x32\xcf" "\xa0\x9c|\xd3\x99\xe8\xcc\xe2\x04\xae\x94\x88\xb2\x81\x9c\x38\xc6}\xb0\x43\x81\x88\x16\x80\xa8\xba\xec\x01\xe8L\xb0\r\x9a\x88\x39\x41\xe2\x87Q\xa7" "\t&\xd1\xf0\xc3\xa8U\xe3\x04^\x30:\x13\x9d\xa6\x9b\xc4\xb2O\x9b\x88\x81\x98n\x8a\xee\xac\xb0\x8e\xd9\xf9\xe6\xbe)u\xc8\xd0j\x7f\xfb" "\xbdOPV\x65\x89\xa3\r(+\xc5\xc4\x8dr/\x85\xe9;\xe8\xe1.\xda\x07g\xea\x8d\xd7p\xf2$t\x41\x98P\\\xe3\x9cO!\xe5" "\xc1@\xdcW\x91V\xd0\xd0\x9b\x45t|\x83(\xd6\x80\x1d\xeb\x01\x32q\x96*\x89\xe8\x91\xad\x35s[\xcfp\x1dlK:\xaa_\x63\x93" "hg\xad\x9d\x04&\xfb\x9b\x44+\xb0\x0eK\x1f\xbc>+\x0e\x36I\x13S\x0c\xe6\xc6h\x0f\r\xc5\x87\x15\x11\x33\xd0\xeb\xf0\xa1\x0b\xca\x99" "\x1e\xc4\xa9\xde\x62q\r\x1e\xf1\xe2Qqo\xd4\x92\xb9\x8es\x45\xf0\x1a\x91\xc5!\xa3\xc4\xce\xda\xf8\x17\xc3\x8d~\x94\x8d\xf6\xad\x99\x61\xfb" "=\x14\x07\xbd\xd0\x0e\x03-\xfb\xa4\x35\x41\xf1\x10\xd6\xd9\xc0\xc7\x86\xd0\xef\xcd\xedW\xa4\x85\xc5\xc7P\xfc\x1e\x41\xfb\xbb\x83\xd6*\x1b\xadU" "\x36\xd8P\x44\x44\xf3\xbb\t\xca\xaf \xba\xaf\x9b`\x31\x04Qso\xc2\xc9\x00<\xe2z\xad\xb0\xd5\xe5\xbb\xf0\xaf\xab)\x1a\x16\x00\x36:" "\x16\xdc\xc4\xed/%W\x43\xdd,j\xd0n\xeew\xe7\x18\x14\xcb\x18\x94us\xf0\xcdO\xcc\xe7\xc0\xc2\x15\xd5wh\xd8\xba\xba'\x81X" "\x1f\x45\xab\xaf_\xf1!O\x9a\xe4\x34\xa2\xf8\x8b&\xca\x32HW{\xb7\x44q\xbf@\x9c\xbf\x80\x32\xdb\xd3\xcd\x05\xe9\x37\x63\xd0\xa2\x64\xdb" "\x42\x93\xeaS\xe8\xd7\xba\xd1\x1c\xcf\x80q\nQJ\x06Q\xe6\x19\x85(\x06$\x9a\xed\x8d\x89\xee\x0f\x0b\xbci\xd8\xeb\t\xa3\x0b<\t\xfe" "\x8c\xba\x39x\x08\x15\xfa\xfb\\\x38\x1e\x98\x16\xd4^\xe1L\x85\xb4\xf6\xd2\x88~>\x89\xdd\x9c\xd1R \xf1\xf2X\xa3\xeb\x96\x31\xf9@\x94" "S\xa3\xbb\x65_&\x0b\x85\xc1\x8f\x87\xf1\x44\x97\xe7\xe2\xb1\xf3\xcd\xc4`@\xad\x61\x17\x01}\xfd\x83\x1ch\xdc-\x87\x99\x94\xfe\xb6\xfe\xbb" "\xbd\xe5\xbd\x61\xdfSh\xbb\xb2\x91{/\xb2\xf8\x64\x1a\x0cgX\x1bR\xfe\xc4:\xab\xd3\x64\xf6\x87\xb5g\xf0\xa0WJo\x96(K\x89" "\xcc\x15xT]\x1a\r\xe6\xd9\x18\xcdV\x98\xff\"\xcd\xeezn%\xe3H\xda\xf7\x14\x13\xf0\xac\r\x8dn\x65\xb1[\xf7S\x1d>\x02\xbd" "\x8e\xa7\xf8\x32\n%\xca\x64;Q\xe6\\\x88\xd5%\x88\xaf\\\xc7\x86.!\xbf=\xbe\x9bh\x17\xc3hVQ\xed=y\x87\x86\x86jJ" "\xa1}\"^k\xb8x\xd1\"J\x63\xd5\xad\xa3(\x13\x9f\x1c\xa9\x13\x8f\xde\x8dhn\x89\x8f\x34)\xe6\x42\xbf>\xc3\x8c\x18k/\x18\xb6" "\x42\xdc\xeb\xfd\xa7\x17\x18\x01\x90\x38\xbb\xe1\xc8\xa3\xc0\xd4\x61\x33\x41\xdc\xe2\xc3`S$Q\xbc\xd6\t\xd9w\xd8\x07\x42\x83\x0b$\x08\x16\xf6" "\x85\xa8\xbd\x45\xc4\x41\xc0$\x16\x91I\xb0\xfa\x43l\xad\x8d\xdcZO\xfbN\xa3\x61H\xe9\xec\xb4S\x16\xbd\x34\xd1\x12\x89\x81\x05\x41\xe6\xde" "\xa8\xb5\x84\x88\x9fm\xbf\xfe\?\x34\xfe\?\xf3\x8a\x66 \x11\x1cM\xe7\xfe\x39\x87\x15`\x04\xef=\x8cg\x45s\xaf\x42\x62\xb3@\x7f\xfb\xd3" "\xe6N\x34'S\xa2q\x42\xda\xf5\xcbG\x63\xf0\x93\xb1O@Z\x9c*\xfd\xa3\x35\x30\x04\x32\xed\xdf\xbf\xc1\xb1\x02i+\xe4l\xf4\r\x88" "\xf5\x07\xffg\x07W\xe6\xa4\r\x94\xd2/!~ \xaa\x38\xd5U\xc8mwI\xaf=\x8d\x84p\xb2I\x94\xde\x88\x10\xbd\x11\x12\x87\x15\xa3" "s\x61+\x1a\xafM\x88\xed/i\xcf\xfa\xdb)\xbeX\xb4\xfdv\xee\xdbH\x93\xa6@\x08\x9ft\"\x06\x8d\xbd\x65,\xd2\xc2\xc7{\x88G" "\x04\x61\xe1P\xe8\xef\x96\xd1phZ\"\x7f\x62\x0e\x8d\xd8\xc6\xb5\xb0\xa0 J]`\xd5\x02\x66\xba\x88O\x35#<\x83\x9b\x18\xa0\x45R" "-*|\x9b\x16\x1d\?Tk`\xc6\x97(NY\x88\x32\x87\xdb\xd5)/\xa2\xb8\xe1\x11\x62r\x41\x44\x1a\xb8\x8b\xe8\xe7\x8f\x9aM\x1a\xbe" "\x9cg%\xd4\x32\xda\xd0\xc2\xd7\xc0([\xe8\xdf\x97\xfd\x97\x1b\xd5z\xda\x90\x91\x88;\xfb\xb7\x07\xa3\x66\xcb\x06\xfaM\x44}\xb8\xbb\xf7h" "\x15\x95\xbe\x30wK\xda\xcb\r\xdf\xd9\x9e#\x8b\xc8\xc4\xb9\xfeV\x66\xd9\x85\x18\xb7\x89\xe8\x9e`k\xa5\"r\xc3-\x1dg\xd2\x34)\xb0" "#R\xe8\x1c\xbe\x90v\xae\x1a\xc5\xd1\xd1U\x42\xc3\x32\x07kx\x84=\x8a\x98\x88\xa6h{\xac)\x88\x16\\\xde\x63\xc4KZz\x1d\x14" "\?`QL\x9a\xec)\"\xa2\tg\xf2\x44\x87\x98\x10\x90\x86z\xa9\x11\x64\x07`[\xef\xd8>\x19\xfd\xc7Wty\x45sgL\x91\xd6" "y\x36\xb2\xc5j\xa9\rM\xf6i\x13\x1fn\xfd\xd2+\xdb/~\xea\xcf\x9e\xf0\x62\xe8L\x11\x8fH*\x8c\"\x89\xd2u%\xca\x36>\x62" "\r\x99\x83\xcfQ\x99v \xde\"V\x34\x1eO\xbc\x03v\x99v\x1b\x98N\"\x0eN\x46\x0c\xe3H\xbc\xbb\x06Q\xe7\x33\xdd\xe1\x0c\xd0\x06" "\xfa\xd0\x97\xb6\x91\x86k\xf6-`\xec't\x07]t\x1b\x30\xae#\x8a\x97,\xa1\xdb\xc7N\x9aw\x34Z\xbe\x63\xf1g\x1f\x9di\xac]" "\x86\xe1\x81\x84\x61\x62M\x44\x8c\x7fHl\xd5\x8d\xee\xe2V\xdd\xfd\xb0UwO\x19j\xd0p\x03J\x0f\x96\x38\x43\xa2j-\xc3\x0cJ)" "\xedP\x8a\xf6'\x62j\xc2\x44\x98\x9b\x8a\x16\?\xddi\x0b\xd2\xc0\x1a\x97\x30\x91\x0bI\xe3\x18\xaa\x16\xa7R\x46\x8b\x34\\Q\x13\xd3i\xa3" "\x95\x17\xb8*\x11\xba_w\x1b\xc6\xdf\x63\xdf>+\xd2\xdd>\x01k\x87\x39\xbc\xc7\x91\xf6\x88\xc2\x11\x8f\x45\xf7\xd8\x1a\x80}\x9d{\xaa\xdd" "\x82\xe8\xe6yl>\xb1/\xfb\x85\x9c\x9b\x8e\xa6\xb0\xabWP\x66\x41\x85\xec\xdb\x42l]H\x93\t\x1e\xe1\?\xa1x\x1a\x66\xf1\x98o\xa0" "\xac\xd2\x30\xcb\xc1\xf5>\x18\x1dU\xfb\x02\x65\x9eW\xc8\xdbw\x65m\x86\x34YK\x16\x86\xdd<\xb6\xa2\x93&\xd3y]\x0f\xb3\xef\x44\x31" "\x07&\xca^Y!\xbci\x90([\xbd\x89\xe2\x0e\x82h\xe1(\xb3L\x8b\x17;.\x92S!I\x44\x37\xdb\x83G\x1f\x61\x30h\xc0\r" "\x36i\xfa\x38L\xdf\x13\xbbSz\"\x16HI\x43\x63\xea\xc1j\x42\x88\x39)\x88\xb2\xdf\x0f\"\xfap\">\xbe\x39Q\xd6\x31!~\xfd" "]\x86VO\xc4\xfd\x9f\xf8\xe3\x1e\x45\x15\x9c\x13\xef\xbf\x9c\xf8Pw\"\xc6\x43,\xda\xc7\x65Q\x86h\"j\xce\x13\xb1\xe0\xee\x80\t\x31" "\x12'\xad\xc4'\xc6\xee\xe0\xae\x17\xe5\xf0W\xbb@\xdb}\xa6\xff\x9cI|]\n\x08\x8a\xef\x41\x1d\xd1\x89\x33H\x1a\xccH\x10\xd1\x03\xf2" "\xe2\x36^\x38\x1e\xac\x82\x86\x17\xb6\xae\xa1\xa1\xad\x65\xda\xd7#\x31\xfcx\xc6T\x33\x34\x31\x16\xeb\xb6\xb5G\xdd\xc6J\x36Q\x16k\xbb\x1d" "\xed\xfaux\xb1\xe2\xb1\xe3\x0f$\x1e\x1d\x1c\x0e\xd5\xed\x63X\xdd\xedk\xa3\xd9\x87\x83!\xa2\x1c\xa3\"\xd4\xe4S\xcf\x9e\x42jV\xdc\x89" "\xf0\x08\x38\\\x61\xd5L\x34\xad\x83X\x8c\xbe{\x38$\xb1\xdb\xd7z\xef\x05\xce\x95\xba\xea\n\xa7\xbb\x8c\x32\x83`\x31\x86\x63\xdb.\x1fs" "\x12\xad\xc6Zs\xacu\x90\xb3\xf6\x91\xdaL\xcc\x90\x90\x88\xae\xec\x1a\x66w\x42}\x99\xa3\xf6\xc5\x8e\xbe\xac\xd6u\x8f\x41\xd9\x03\x9buP" "\x0eJ \x8e\xbb\xa0\x18ut\x8fQ%\x03N\x8a \xeaJ^\xba\xe4]-\x32K'\xda\x9fXVV\xb5@\x9e\x30[*\xd4\x86\xf5" "\xf4\xbb\xab\x91\x16\x1e^T\x9b\x83{\xf5\xaa\xca\xa2\xde\x06\xf1g\xb2Oy\x99(\x12-\xec\xa8\xdfh\xd6\xf4\x36{}\x8e,^\x08\x93" "\x0f\x39\x8c\xd9\x66L\xe6\xd7\xa1\x35\x66\x38\xc5\n\x9a-\xdf\xa9v\xa7M\xaah{\xaa\x16\xdbN;S/\xa4\xf5\xa7\xb5\x03\xd4\xe5\xac\xd1" "\x10\x06\xb3\xb2\xd0J;\xed\x9a\x89V-\x06W[\xd3\x9c\x07Yh\xbd\xad\x0e%\x45;N\x13\x9a\x9c\x85\xb2Hh\xfa\xed\x44{y\xf2" "\xe5`\x18h\xa7\x93\x0e\rY\xe3\xc6\"\xabo{\xd4\x38\xd9\xfb\x9e^\x41\xf1\x91\xc4\xc4\xd3\xb4[{\xc2\xe9\x04\xc4\xec%\xff/\xfb\xeb" "X\xab*\xf1\x44\?\xf7@\xd9\x05n%H\xcb#g\xc0+\x83\x90{\x05\x85jR\xd3\x37\x66\xed\xbdmY\xc5\xe2\xac\xd9\x98i\x9f\xc9" "/.\x92\x37)\xdd\x81\x95\x1d\x66\x9bX\x44\xfa\x62\x81\x8aX+\xbb\xdb\xd4\xf5\xf6\xf5*\x8e\x05\x64\xf1V\xd9R\"\xa7\xf8\x32\x93\xcd\xfc" "\x00\xaf+.\xaa\xb7H\"\xff\x61\x02\xa2\xfd\x65\xe2\xbc\x04\x12\?\xf5n\xe8\xbc\x9d`G\xcd<\x06\xe9&\xc4\xd9\xcer\x10\x8b\?\x9a\x64" "\x33\x8d\xbc,\x31\x11\xbf\x90\x91\x12\xf9M\xeb\xf7\x13l\x10\x89\x18^\x9e\x30\x17(\xfc\xdd\xa6tx\xce\x9aK\xccS+\\\x96\x82u\x06" "\xda\xb9jt\xef~\xd6'\x88\xb5T\xf7\x04K>\x62>\x63\xc4> \x12\x0bm\xcc\xed\x93X<)\xcf\x11\xda\xa6SP\xbaR~\xc3" "\xe1\x05\x89\x7fY=\xa8~\x81\x7f\xa5\x17~\x1a\x85\xf6\xad\x82\x9bj\xb8\xd7xx\x1a\xe4\xed\x94\x07\xfbl\xf6\xd1\x03qZ\xc1\xc4\xbb\xe2" "\x9c\t\xa2\xac&\x13\xe7W\x46\x18\xd0\x92\xb8\x38\x18\xc3[\x8d\xe4\x37\xf2G\xb0.\xe8\x80\xff\x84\xa3Q\x84\xb0\x8a\xee\x9e`t\x41\xcc]" "j\xe7\x9b\x44\xcf.\x08\x31\xdbx\n\xc5\xfd\x36\xf1\xafT\xb3\x19\x93\xe6\x95\xb0\x8f'\xe1P \xe2\x94W\xea\x03\x8d\x07\xe6\x89\x85\x96\x1c" "$Z\xe6\xc2\x61]\xcc{{\x87\x10\xd3Y\xa7(\x85\xfa\n\x87\x84\x30\x8f\x46\x9e\xb2Y!=\xa9\xf0$J%\x34\xed\x8d\x90\x86\x97\xd3" "\xde\xf9)*#\xb7\x45\xb5\x8d\x65\x30m\xc4OX\xd4\xf9+\xc2\xc4\xe4m\xd1\xf9g\xfe\xee\xca\xda\x37\x65\x8d\xc6\x19tS\xedq\x9f`" "\x85L\xc4\x14\xdb\t\xf6(\xc4o\r\xd7z\x89h\xb9+Q\xa7\xe1\xac!\xa6\xa7<\x46[\x64Z\xf8r\x17\xcan\x34|\x7fmN\x99" "\xf6\x44\x38\x94'js\x15\?^jG\xee\x84\x03\x9c\x88OH\xce\xf8m\x66\xd5P\xfcv\x32\xc2\xad\x8f\x88\x38\x89\x98\xc4-'IO" "\xddR\t\xd1\xd3!Q,\xa6\x88\xd2\x97 ~\xd5i\xd4\x1b\xa7\x8a\xd0\x36\x8f \rx\xa5\x93\xd1K\x05\xe2<\xb9\x97\xc2\xf1S\x42\xf4" ";H\x94\x89t\xa2,\xb4\xf6\xa8\xd0_\xc7\?\x0f\x38\xb2\x87\xb4\xcd\x85\x30\xde\xde\x83\xd2\xa6\x12\xa5\x02\xe9\xa5\x61\x1a\x42\xac\x1d\xe2\xaf\x1f" "\xcc\xa6\x92V\x7fG\x07\x9d\x44q- \xc4\x04\xb1\x88|\x62\x95t\x10\xb6\xa9P\x80\xf4\xdf{Y\xf4\xa3\x99\x03\x30\xfd\x86\x95\x36\x12/\x91HXK'\x96\x8b\xe1\xf8N\xab\t" "\xd6h\xa8\x95\xd4\x9e;\xbc\xd5\xf8\xdf_HX\xf2w\xcd\xac\xb2\x03~V\x94O\xe0\x1c\xf1\xd5\xaa*\x8b\x41\x9f\x10\xbe\xbeI\\\xe1\x9d" "\x83\xcd\x10\xdc\xbe\xa1\xdd\xec\x65\xc3\x02\x9e\x82\xe9\x01\xa2\x9c\x95\x43\xecN-\xc5\xa8\x87\x00>\x1c\xec\x19\xe1\x0b\x12\x95\xcf\xeb\xfe\xfa\x81h" "\x1b\x63{\xd9(U\xe1S\x92P}\x64-;\x61\x03!\xf1%\x03\xbe\"\x19\x31T\x63\xee-\xc7\xe1\x30\xba^\x36\xbe\xb8\x02\xf3\xb8q" "\\\xc4\xad\x30\xf4&\xb6\xf1^\x38\xd2\x94\x38@\x12\xc5\xe3\x0f\xf0\r\xef\x1f/\xd2<\xa7\xb5\x15\xc3\xc0\xe5\x10\xe3\xec\x44\xb0\xbe\x96n\xde" "\xe9\xe9\x8c\xaf\x10\x03;\x11\xd9\x1c_\x36\x35\x41+\xf5\x34Z\xa2\xa1*\x14\x11\xd5\xb5\x88\xc8{,j%*\x62\xb1\x8d\xad#\xa2Q\xd9" "\x08\?o\xb5\x12\x93\x80\xc5)\xf1\x18t\x0cI\x94\xbe\xb8\x30\xd8n\xb5\xc1\x61-<\xdc\x84\xa3\x13\x34\xe9t\x0b\xddq\xd1\xa2\xf9\xc5\xd9" "\xef\xb6\xeb\x34\x8b+\x89\x83{\x98J@\x13'\xe0\xc1`\xc8ss\x07\xdd$\x86\xbf\xfc\xec\x61\xd6&\x1a\xdcy\x42\xe4#u\x8a\xe8\x0f" "J\x00\xf5\x03\x83\xef\x9ai\x38\x97\x06\xe2\xb0\x82\xee\x93h\xb1\x39V\x87\xf6\x98\xc3Q$\xbd\x1c\xf6 \x12\xa5_+\xb4\xd7\xe2\x8d\x7f\x8d" "*\xac^\x45\x43\x9fW\x44x\xa7\x84h\?\x90\xd5\x44\xe1\xef\xb1o\xefO\x9as\xdd\x03-\x87\xb4\xc6\x1e\x41\xa6\xdei\xf4\x82\x81vO" "\xd7\xd7\x89\x62\x89*\xd4\xfa\x42\x97\xdc{\x39m\x65sX'\x12\xba\x83\xe5H\x93M\x7f\xbd\x9c\xd6\x18L\x7fw\x0e{xU\xae\?\x12" "\x9a>\x94\x1d\x07\xa2O\xc4\xa2s\x33j\x1a\xe6\x88H+\xe3-\xe1\x44Rh\xb9\x0e\xc3\x0e\xa2t\x1c\x89-\x64%\xcc\x8b\x33\xf5\x86\x83" "{#\x96\x38\x44\x0c\x33[\x0c\xe6H[\xec\xc2\xe9\x17\xc4%R)\xf8N\xe3h\xdf^N\x0e~\xbe\x31\x31\x18\xe4\x9cx\x87\xe4\xc2\xc0" "\x81\xa8\xaf\xc3\x33\xee\x9a\x05%\xa3\xd5-\x8f\xc3-\x07\xf3l\x85(<\xdc\x18\xdd\xca(i\xa7\x9a\xd1>\x04\xd6\xf7z\xb9(\x8d\xef\x1c" "\x65\xcb\x94P\xd1S\x1bZ\xf9\x8a#}\x87\x18G\x8d\x0b\xe5(h\?`\xf6\x8b\xb4\xa7\xac\xd1\xde\x16\"\x46\x1f\xa4M\?\x8dX\x88#" "q\xa5O]m\x8d\xceU\x0ei\xdf\x97\x46X\xe0\xf5rV\xf0\x63\x39\xc5\x41\xe8\xe7*N\x44\x9f\x82\x45\x18p\x8a\x18vn\x9d\x38\?" "\x43\xbc@\xf2\xc4\x1e\x92\x14\xae\x1c\x88\xa8\x08s\xc9\xa0\x91<\x31\xaf\xbd\xd0\xbc\xb6\xf5\xf9\xdf\xe3\x93Q;\xa0*\xfa\xc7\x9d\x96g\t@" "\xf1\x10\xb1\xb4\x84kX\xd1(\x0f\x63!\\\x34\xe7\xbc\xb2\x97\xc7\x84\x1fQ\x16P\x89\x62\xe1\x44<\xe2\xef\xda\xa7\xcf\xe3 \xce^>\x92" "\xd3\x03\x88\xb2 \xda+\xfa\x0fRg\x14\xe3\xed\x83R\xb2\x0f\x35)\x45\xb8k\"\x11\xd9\xb4\xa2=\xe6\x8aV\xaeL>\x30R\xa6S\xa1" "\xb9\x1e\x64%!j\x0f\xb2\x12>\xe3r\x17\x8e!@%\x92\tt\"\xba\x8d\x15\xed\x36V\xb4\xdbX\xc1\xae\x34\xa1\xdf\xa8h\xf5\xf4\xa7" "i\n\xff\x05X\xf4\x10\x10\xc8\x0c\r\xb4\x9fL\xf2\xea\x9f\xcc\xbf\x7f\xc3pW\xb4\xa0\?\xc1\x04\x1ai\x18\x39U\xb4\xd7W\xd1^_\x15" "\x16\x11\x42x~\xeaU\x31\xc3#\xe4\x9e\xfb\xd9\x85\xfa\xd5\x1a\xc6\xdd\xd0\xa8U\x44\xd9\x14m\xee\x61\xb3\xb2h\xd4\x43Oh\xee\x8cQh" "\xdc\t\x91\x8fY\xd5\xceH\x35\x1c\xe0>\xa1\xf8\x92\xebU\x61\xf2\x43l\xd7\xc1\x9e\xe8u\x1d\x83\xd6\xfd\xfc\x08\xbc+\x83\xcf\x37\xa0\xac\xb1" "\xf6\xea\xbc)\x06\x8dq=\xccK%Z\x87\x81\xac\x90>\x90\xd6\x42uM\x95\xba\xe6\x16\xe2\x11\x44\x1f\xb9\x89\x03M{M\?\x7f\x06\x65" "\xfaS\xa8\xfd\xba\xa6\x9f\xdd\x38Q\xbcu\x0b\x61u.\"&\xa7!\xa2\xa4\x8a\x88\x81\x15\x8b\x61\xd1\x89ppK\xa2]\x33\xbc\x32&\x82" "\xdcmP\x46\x9a\xc1\x63:\xf4\x0e\xc1\x43\x19\xdax\x17>\xbe\xe0|(\xd2~\x10\x11{H\xd8x\x04\x1f*\xe0\xfb\x43\xf8S\xc6T\xa1" "hq\x33\x63Z\x94\x19\xd0\xcf\xa3\xcc)\xa9\xe5\x32\xa6\xd1/\xdd\xdf\x90\xe7\x9bl\x94<\xaf\x07\xa5T\x42\x83\x45\xa0h\xe1,gi\x14" "\xcd\x11\x8f\xf8\x66k\x89\x1a\x37\x11\xa5\xb8\x8d\x97\x8e{xM,\xe9\x11\x65\x0fN\xef\xf5W\xcc\xab\x98\x9f J\xce+\xf6\x13\xf5^\xfd" "t_\x93\xff\x15\xae\xf6\x89\xf9\x63\x39\x36\xc6\xdbsX@\x32\x04\x1b\xbc\x9e\x8e\x8e'\x61)\r\xa2\x07\x39\t;G\x10\xd3\xa0" "L\x98\xa7\x90\x38\xb9\x65'\x46\x9a^\xf4x\x8a\x84\x9f\x7fHh\x30\x17 m\xa9\x37\xc5\xc0}\x12j\xc6\xd0r\x34\x89R\x07\x10\xe5\x87" "\x19\xe5\xea\x10+\x97\x46\x9c\xe7\x03\xb1\x87Oly\x08n\x93\x88\xf5\x05Oj`\xae\x62\x12u\x1a\xec\x97\x64\x8c\x87\x46wU\xf0k\x07" ".\x32 \xc6\x19\x93\xe8|\x87\xe5\xea\xde$\xce\"q\xe2\xbc\xf5\x98X\x8c\x9a\x07\x13\x13\x99]\xcb\xe6$\xbeI[\x36\x8eo\x10\x1b-" "\xbe\x13-g\x13x\xb6\x13\x62\x63\x31\x89r\xba'\x11\x8d\xbb\x9eL\xd1[\xc3\xe7\x9e\xd0\xff\x1c\x61\x35\x80\xb5\x0b\?\xfb\x8es\x84z\xea" "Q\x9e\xb8\xd3k\xe4\x10\x65\xa2\xb8\xa4\x11\xfe\x9ez\xd1\xea\xc5o\xe6\x10 \x16n\x44\xb1p\xeb\xad\xb1\xb9\x93\x98}\xf7\xa7\x13\x1c*O" "Z\x01\xbf\xf6K\xf7\x61-\xaf\xc5\x63\xedWo\x41L\x62\xad\xb1PG\x44\x9f\x8c\xe9W\xbb\xfeO\x01\x9a\x37\x35\xea\xb0T\xc4\xc3&!" "\x62\xe7\xb0h\x16\x41\x16\xf7-\x13\x83\xd4\x41\x07\x15\xac\x85\xc5\xb7\xc4\xf5\xee\x0fr\x80\x01Q\xfc\x84\x08\x43Y\xf9'\xf1i\x1e`\xa0\xbc" "\xf6GyK\x14\x1c\x65I\xfcl\x1b\x83\xe6\n\xebZ\xa4Q\xe7\xf0\xac\xd7\xa0\xc3\xa2\xbbNzkj\xb1(\xe1\x83\xe6\x02Z\x39\x0b\x62" "P\xaa.\xfb\x99|\xcc\x93\xb6rk\x9d.Z\xc3\x32V\xa8\xd5\xff\x1a\x1b\x93\x88T\x9e\x64\x9b\x38\x89r\xcc\xbaP+\x38\x11\x35\x1ep" "#H\\\x1c\x83\xa2\x9eqO\xda\xea`\xb4k\xb4I\x63\xc2\xa4H\x44\x7f\xda\xc5\x42\x96hX\xa0\"\x11#\x14\x66\x9c\xbfr\xe2\x35\x32" "\x92\xce\x37\x33\xc3I:|@\xcaY\xf6\x0b\?\x8b\x34`\rK\xeb \x85\xbc\x1a\xce\xf0\x1eZ\xaa\xd7\xe1\xe1\xd2R=\xfc\xd9[\xb4\xb4" "\x8c\x33\xed\x39\xd8\x80 \x94\r\x8d\xf8\x32Q\x0f\xd9\x1b\xa7\x45\x11\xbf\x37\xee\x1e\x9b\x01\x16\xceH<\xe3\x43\xf0\x41#\xfa\xb0\x38[u\xa2" ">!\xee|\x1b\xed\x03h\x8fm\x8d\x8fh\xdf\x11_\xc6>\x0e\xde\xd6^\x38~\x92\xd0\r<\x1a\xc7o\x1fp\xb4\xd6\xdb\xe0\xe8\xc8\x9e" "\xfa\x8a\xecm\xe0r\x84Y\x86S\x33\x13\xa9\xba\xd7:\x82\x03\x9c_`\xd1x\x82\xf1\xb0\xd2\xb9\xe7\r<\xb4\x0b)\x33\x45_\x39\xf8\xaa" "\xa0\x00\x39\"\x81X*(_\xc1Z\x91\xdbp\xcc\x9a\xa9\xa6k\?\x1bX\xa7\x13\x65o\x41o\xa3\x95\x0cSWX\x36|\xfa\x13u\xe0" "\xd0\xef\xd9\xc0\xa7v \x8b\xe0=\xdd_\x42\x14\xe3R\"Z\xc4\x8d\x36rL\x9dQ\xde\xc0\xcc\\\xe8\xfc\xe7\x92\x86\x91\x8a\xfa\xf1\xedm" "\xb4\x1f\xb2\t\x8a\xb5(\xb5\xd6^\x1ai\x37lV\xaa\xef\x13\xb4\xc6:Y\xb2\xd1\x46r\x03\x1fy\x42\?{\t[\x08\xd2\xc4\xed\xb7P" "\x8b\xdb\x06\xfb\x33\x89_w\xca\x07Pl\xb7{\x1b\xec\xf3\x16j\xc7I\x45]\x7f\xda\x84=\x44\x89\xe7\xad]\xaf\x63\x13\xdao\xa7\x43\xcd" "\xe2\x1bv\xc5(\x0e\x88z\x9b\xe8\xba\x63\xefg\xf9\x82\xa8\xf5\x02\x8b\xf0\x32I\xe2qn\xe4)\xa4\xda\x13\x34,\x12\x30\xfd\xec\xb7\xdbv" "\x8c\x80z\xd5\xdf-p\xac\x05\x02\x30\xf1 \x62\xef\xef\xba\xd1\x9b\xc5\x8b\xb5\xd9\x0e\x46\x00\xaa\xfd\x44h\xf1\x45\xfb\xe7n\xce\xc4\xb2\xb7\x89" "\xbd\xb2\x31\\\x9c\xe0i\xa1\xb7q\x07\x9b\xb0(\xbe\xa9\xd1w\xda\xb8P\x1e\xd8\\\x41\xec\xe7\x8c\xbf\xdb<\xb6Q\x41\xa3\xfe\xa7\x18\xb5\xb0" "\x86\xef\x83\xe3\xdd\x89h\xfc\x36\xba\x9c\xc8\x14\x37\x9d}h(\x31;\xb8\x86\"\xa2\xd3\xb5\xd3l\xb1\xc3\xe6W\xa2\x9c\x84\xd2;i\x9f\xf4" "\xa4u\xc0Ig\xe2\x98\xday\x66\x11&\xa2$\xa2s\xce\xc4V\x16\x12\x97s\xa3\x0b\xdayJ\xe9K\x9c\xb4\xba\x38\x05\xfd\x82_MS" "\xfb\xc9']zgl\x12\xa0`,X\x9c\xb4\xebu\n\xbeo@\x8c:N\xdaq;Y\x94\xa3\xca{\x84\xb5\xbe\x13\x65#\xb8v\x14" "\xbf\xbe\x61\xbf\xac\xf5\xe5I\xe7\x19N\xb1\x97\x06\xfbx\xcd\xf8\x83GR\xf1\x07'\x61\?\x05\xd7\x1f\xfdTP)\x82\xb2\xed\xbd\xaf\x8e\x39" "\x84\xe8\xb0\xf4S\xa8\xfb\xfb)\x9c\xdd\xddO\xc1\xf0_\xe8\xcb\xbc\xa9\x88\x41{\xc6g\xec\xb4k\xfc\xfd\xa4\x39\x95`\xbb\t\x1c\xd9\xf4\xd3" "\x9c\x10\xd9\"\x96\xf8\xfa\x97\xfe\xd3\xc8\xc8\x1b\xa3\xe5\xfc_\xd3\x82iI\x34x%\xed\xe7\xf1\xb9\x88\x62\x19\xd5\xcf\xa3\x02\x10\x62\x91\x00\x62" "\xc7\x85\x62\xaeI\x44\x94^\x12\xa5N'\xd6G\xe1\x45\x1a\x9b\xc9\x44\x8bo.\x9d&\x95\x1f\xf1n\nJ\xbfU\xc8\xf7\x97\x31\x82h\xf1" "$o\x1a\x32,\x31\xd3\x05\x65\x34\xcb,\x19y\r\x44\x36w\xb3\xb6\x06\xc5\xe6\x93\x98\xbd\x02s'\xf0\xeaR\x99\x07\xaf\x7f\x8c\xbc\x1b\x43" "\xd6\xa9\x45\xb3\x37\x0cZ\xcf\x46\x1c@\x44\x62\x1b\xa9\x14<\xb4@\xa9\xd2\x84\xa8\t \x8aU\xad\x88\xdc\xbf\x90J\x81\x34\x39kZ\xc8{" "\x62\n\x88-\x8a\x0f\xb1\xff\x86\xd9p\x12\xf7x>\xccJ\x85\xc1\xc7\"J\x97\xa1\x19\xabH|\xb4\xde\xc4\xa7\x0c\xf8\x82\x0f\x0b\xfbP\xe2" "\xe3\xc8\x88iH\x11\xe3\xfd!l\xe1q\x38 \xb1_\xc4x\x8d(\xa5\x88(\x0e\x99\x88\xf8R\x45t\xdd\xfa\xec\x32<\xaa\xf7\x45\x84\x91" "\x06\xb3\x03J\xc1#~\xf3\x99\x98Q\x66\x8f\xc3\xb7\xfa\xc5\xf0\"\x03\xca\x82\xab\x9d\?\xd1/\x62\xcf;Q\xce\xb5\x14\x06\xb3k\xf7\xd7z" "\xc5.\x88\xa4M!\xca\xf4v\xbf\x88\xaa\xaf_\x84\xd3\x95~\x15\xbd\x16\xa2t\xc2\x85\xc1@\x0f\xe6\x84\xe6n\xcb\x1a\xc7N\xbc\x18\xf7\xab" "h\xf2\x85\x18\xf6\x41\xfc\xde\xc0\xeb+i\xa5\x87\xb0|\x03\xb1Z\xc3\xb2\xa6\x8a\x1b\x88\xc8\xaeUT\xcb\xc4\xd1;\xdaJ\x12\x91 L\x34" "\xeaN\xdb^\xb0\x0bQ{\xf6\xdc\x63\x37\xe8r:@\x42\x43\x03\x9e\x08\xe0X-\x87.\xec\xd0T\x91]\t\xc3\xe3\x30i_H\x01\xf4" "\x05\x88\xecw\x41\x9f\xab\x11\x0e:Sx}vNJ(\xec\xae\x15_|\xfa\xe5kh\x0f\?\xc1\xe2\"\xaa\xbc\x42\x9by|\xe2\x87t" "\xafH[\xf5\xa8\xa7\x64\x7f\xc3\x06\x0c!oN\xbc\x94\x9c_\x8d\xca_\x38L\xb3_\x85\xd7\xcd~\x35\xce ^\xe8\xe8\n-^\xb1\xec" "\xd8%\x8a\x95\x11Q\x06j\xfd\x1a\xfa\xed\x42,\xc8\xf6k\xb0\x01\xea\xd7\x62\xd9\xa0\x42\xecK\x9a\xd7\xe1\x38\xb0_\xa7\x7f\xcc\x9b\xa8\xb3\x33" "\xa2\xb6'\xf1I\xf2\xf3\xad\x66\x9d>\xce\xf5&\xcaq\xf6\x44\xe4\xf3>\xfa[\xfd~\x80:\xaf\x0f\xd7\x36\x44\x99\x1c n\xf2\x98\xe1\xea" "\xf7\xb5\xf0\xf6\xd1\x90\x10\x65\xb4\xde\xef\xa3\xd1\xe8\xf7\x31\x1f\x44\x94y \xa1\xb4\xc3\x03h\x1f\x92\xab\xee\xd0v\xf7\xef\xd0o\xed\xebZ\xbd" "Pk\xd6;\x7f\xeb\x81r\x42\x62\xff.\xf8\x96\xafv\x87-\xc0\xfd\xbb\xc8\xeb\x82'\xdc\x02]\xcf\xfe'Z\xbc\xfe'Z\xab\xfe\\\xab" "\x18\x66p'q\x9b\x87\x8b\xeb(#\xe9\xbd`\x0fR\xb2\xa9\x90\xc5+P\xf6\x16\x13\x65\x15\xa1\xbf\xc0nL!\xf7\xc0\x65\xe2\x8d\x34i" "\xc5\x89H\x42&\r\\\x83\x87\x82\xd3x\xad\xb3\x8eM\\\x08\x98\x9e\xb1('Z\x98\x1d\x85\xf7g\xa7\x39q\x65\x8c^\xae!N\xcf\x46" "nu\x65\xe5\x89\x34\xd9\x14J\x14[m\xe6I\xf6\xc0\xe8\xe5\x32]J\x94\x1d\xe0\xfd\x45\x90\x9a\x81\x32\xa1+\xe4\x9dO\x32\x11\xd3\xd7\xb3" "\x9e\x85\xbc\x1b\xf0\x12\xcf\x83\xff\x8f\xfe\x02# \xa2\x18\x9b\x11kxq\xccP\x12\x91\x01\x16\xb0h \x8a)}\x7f\x11\x65\x90\x30\xd1\x45" ".(\xbdG\x19\r\xbd@\xbc\xa3\xcbR\xbc\xd8\xaa\xa8\x44\xed\xb4\x88*}P\x13\x8b\x88\x1d\t$>\"M\xe0H\xa8\xbf\xc0\xbc\x1b\xb1" "\xbd\xc2\x82\x1e\x89\x83G\x63P\xeaY\x82\xc4\xf7\x88\x8cv\x17\x16\xf1s\xd6h\xef\x9b\xf8\xb6\xf1\xe4\x15<\x9e\x8dT\xd0\xe1\x9b\xa1\xbf\xc5" "\xf4\x02S\n\xd3\xd6\x17o;\xc4\xea\x03({z\x89\xa8\x8d\xb6\xb0\xcb\"\xca\x12\xb1\xd0Y\x12\x90\x86\xear\x0bO\xe2\x42\xb6\xa2\x14\xeb" "\x45\xd1\xa8/\xe3\xbf|\x98\x86s\x06\x44\x8c\xef>\x9d\xf8T\xc3\xb6\x16h\xd2}\xedo\xf5&\xbb\xb8\xb7\x34\xfa\xcd\x89/g\xbb\x8a\x06" "K\x02\x16\xb9\x92\x1c\\\x63\xe9\x80(\xa5S\xc8=jy\?\xd1\xc2\xde\ns\xb5\xa2\xc1\xa3\x96\x89(\xb7\x83k*\xd2\xa8\xb1H\xcc\x15" "\xc0\xfc\xfew_\x8bnpw\x34\xba\x42w\x8d\x9c\x03 \xfc\xfdy\x80\xd1\xa1h$\xe2\x94:\xd1HL\xfc\x8d\x34\x98\xbf\xb0\xb6\x06\xaf" "\xebno\ni\xbd\x92\x11\x96\xb4$\xde\xeb!\xbd$>M\xb1\xa7\x88\x44)\xc3\x42*\xb5Q*\x8d\x83\x07$\x80\xb2\x37\xd6\xf8\x45s" "\xa9I\xdaX\xf9\xd9\x42.#q~\xe5n)\"{\x0b\x93=U\x14`\x8f\xfd\xfaK)\x12%\x8f\x88\x88\x41\xa9\x89\x89\xdf\x84\x87\x33" "J(i\xd2:\n\xfd\xe6\x08\xb9\x9f\x35\x8d\xfe\x46\x13\xd8n\xba\xb9\xfb=\xd4`\x8f\xc6\x9a\xbe\xc5v\nZLw+\xb6\xd7\xb3h\x92" "\xb6\xdf;Q\x0c\x64\x44\x84\xe5\x07\x44i\?M\x84/\x17h\x9bq\xe2\x62\xea\x34\x61I\x1d\xda\xf9\"l\xe4\x12\x97\xb2)\xe3\xb9\xe4\xb4" "\xbe\xbb\x8b;-U\x34\x9c\xe7\x98\xb8.\x9c\xa4\xf9\xb0\xc6\x62\xd9\x05\x98U\x8dhQ\xda\x0b>\x1e\x31\xd9\x89\x80R\xc6}@\xd2l\x45" "\x41\xb4\xf8p\xa5'J\x89\x61\xdb\xe0:h^\xd9;\x07\xd2\r#\xb6\xc7\x46\x9e,\xc8U\xff\xb4\x11\x8c\xd2\x45\xb3\x17`q\xa5gH" "\x8a\x16\xb6\xda&\x46_\x39\x88\x83W\xa5>U\x96\x9b\x98\xf8\x08\xc1\xfd\x83\x11\xcb\xd5$>\x66\x8d\xe1\xfb\x0e&\x8c\xa4=M\x8d\xa8u" "H\x1c]\x1b\xc3\x62\x0f\xb3\xf7\xa4\x8dQ\"\x83I\xca\x88\x9a\x84\xc4\xaf{\xf4mI\\\xe8\xaf\xbf\x9f\x95\x1b\xcb\x95\xc1\x1ay\x8cz\x16" "\xf1\xe1\xd2\xafnT\x9b\x1b-\xa2\x61\xad\xe8\xc4\x9b\xbe\xf2\x19\xad%\x8bz\xa1\xa7\xba\x34\x1e\x42\xd8\x8b\x91\xd8\xc5;\x61\xfa\x9f\xa8\x95I" "(#\x44\xa2\xbe\x12\xa6\n\x88/)\xa3\x15\x9a\xf0U\xff\xf4\x89L\x12.Z\xf1x\x81\x1e;i\xabwp\xffh\x65\x81\xc4\xb0\x9bq" "\x91\xd9\x7f\xc1W-\x89\x87\xb3\xd1\xbd\xd5\xa9\x64t\xcf;\xe3{Q\xde\x03\x33\xb8\x8aZ\xb6\xb0\xaaV\xda\xa4\xd9\r\x1e\x90\xa4Qi\x8c" "\xb3nY\xfc\x32\x06\xa3\xb9}\x0e^\x89\xd7\xf4\xe2\xe5\t\x0b-\xeb\x43\xa4\xb9$VP\xf7\x45\xd5\xbc\xb2\x08\xd6\x16\x46{\xb2\xbb\x45\xbd" "\x8f\xf9\xbd\xdf\xf3\x80\xcf\xa6\x9e\xea\x15W\x1d#\x66&\xf2N|W\xe6\x03\xd1\x1e\x35\x1a\xc3" "\x03\x66kI\xfc\xcb\xd7|\xca\x15\xf5\x39\x87\xa8\xae`\x42J\xd4&\x03\xde{\x89\x62\xd9\"\xe4mz\x35\xfd\xf5\x8f\xde\xee\xd4\x31j\x85" "r\x03\xfb\x66\xe2\x41\xf2\xdd\x8d\xb6{\x37\xbe\xf8\x99\x66r\xffpp\x8b\x61\xe8\xe0\x16.\xfa\x85T\x44\x61\x46I\xda\x34\xaf,\x82h\xa3" "\x98\xfa\xa0[\x7f/y\xfdV+\x82[t\xf2\x88'< :\xcb\xdb\xdf\xc6\xbci\xb0\x0c\xcb\xa7\x41\x87\xda.X\xa8\xb2X\x86\x1d\x14" "\x8b\x9f|\x86\x80\x9c\x35\x35\xe8\xc0\x34{\xd0\xf1S\xf8!L*\x88\xd9\x03\x98+h$:Zq\x33\xb5\xcd\x11\xd1\x9cH\x90\x86\x32\xdf" "\xf1\xab/\xa0\xf4\xdb\x88\xb2}l\xa0\xfbK\x89\x83\x86\xd1\xcd\x31\x9b\x86\xb5\x10\xd1\x82R\x0b\xa6\xd0\t-\x1c\xed\x61P-\x61\xff\x43;" ">j\x43\xde\xc1\x9c:Q\x96\x91\x89\xcf\x19v\xd8\x32\x66\x83\x32\x92\xa3\xcb/\?\xeb\xe1/S\xbd\x1e\x89\xdf\x81\xa3\x14\xe2,\x03\xa2o" "\xd2\x81\xa5\x0e\xf1\x94\x05\x65\x82h\xd0\xc1r\x8b\x10\x36\x45\x10\x13\xaeP( \x8d\xf7\x0f\x32\x97\xf4\x0f\xe2\xd5[@U\xbf\xa6(\x1c\xa3" "\n\x31\xe7K\xe2\xdcS\xae\x8c\x96\x9c\xd8w=\xe8`\xf4\x41\x14\xf3\x31\xa2\xec\xa5\x15\x86\x1e\xbe\x1e\xe6\xd6\x85\xf6,\x16o\x37\x30\xee\x81" "\xa6\xdf\x92\xc5\xaf:\xb6\xde\x8a\x16\\\xde\xc3\x1d\x8bh\x98\xdd\x13\xd1y\x94$\xad\x8b\xf7\x81\xfd\xd5\xa0\x13\x65\x90,\x38\x42N\x08\xdf\xa1" "\x10\x1b[\x38\xcb\x13\x8d\x0f,\x93-[\xd0\x96\xafp\xc2\xe5\xb4\xf9\xa5i\xf4\xa6\x18\xba\x42k\x8fL\xc4\xbe\x62\x88\xa7\x1b\xa7\x95\xc7\xfe" "\x8c*>\x8d\xc2\x0b\xbe\x64\x34\xc7\x17\x84\xbb\xbd\x41\xc7\x8a\x06\x66\xc6\x88\x32\xfe!\xca\x16\xc3\x41/XH\xf2\xf6\xb4\"\xedi]\xd5\xd3" "\x06\xa9\xa7\x35#\xd3\xfe\xa4\x15U/~T\x83\xb3\xc1\x1d\x0f\xa2[\x63.\x94xq\x0e\x08\xcb\r\xf6\x83\x84\xfbR@Uy\x03\xbf\x99" "\x10\xc5R\x8b\xc5\x89Q\xfb\x8f$\x1e\x30;L\xe2\xee\x1e\x94\xb3\xa3\x98\xa3\xdf\xfd\xb5\x89\x38_\x81\x45\x1a\xf2\xdd\xc1\xae\x9f\xb5\xbd\x91\xad" "\xe6\xf1\x05X\xc3\xd4<\x44\x94#\x16\xb1\xadJ\x44\x0c\x9aH\x03\x65\x15R\xc8\x1b\x65\xc5z\x10\xda\x61\xec\x9fR\xa6\xf9\xb3\x83\xbf\xdd:m^O" "\\\x0f[L\x13)#Q\x11\x0c^\x87\xee\x8b\x34>\x30\xf9\xcc\xe2\x16\xe6\"$^\xbd\xeap\xe0\x0e\xd6\xd5\x44o\xa6\xb5)\x1f\x81\x83" "\x35P\x12\x07\xf9h\xf5\nqT\xd5\xde\xc6\x1d\x8f:/Q\x32\xfcg}\xfc[W\xc7Y*\xf2\x19\x84\x63M\x83\xcfgm\xf6\xee\xfc" "i\x0b;ZXl\x63%\x86\xc5;\x18\xe2\x8b\xe8\x1e\x38\xab\xf8\x85\x0e,V\xa1U\x97\x7f\xda\xceO\xafM\xa4V\xc9}\x16\xd3\xc2\xfb" "^(\xb3\xff\x12\x86\xad+&R\xe2\x04\xcdyP\x9d\x86\xdekP\xd8h\x07\x8f\xfe\xf8\x83)\x35\x12\xe7ul\xca\x64\xf1\x16\xab_," "\xb6\xb1m\x8c\xc4\xaf\x8c\x8ejY\xc4\\#\x8b(\\\xbc\xfc+\x86$$\xda\x87\xdbn\xe1\t_\x44\x7f\xd4u\xe2\xf8h\"\xd5\xf5\xb0" "\xab\x84V,\xc3\xb9\xa9h|\xa0\x42\xa1\xfd\xbb/Z\x00\x16\xbfHtM\xbf\x8a\xda\x18\xdeQ\xb3\x81\xf5,\x12\x7f\x32\\\xd1\x1cP\x89" "\xf8\xc7\x37\xad+\xef\xfc\xd3\xb5\xb2\xa5\x9c\x62\x15\x94\xc4s\xd6*\x38\x12\xe3>r#\x8c\x16\x85\xbc\x87x\xb7P\xad\xcb\x9fj\x86\xfc\x1b" "h\x89\"R\x19\xa2\xaa\x8bmt\xce\xf4/K\xf1\xd0\xbf\xb4\x8d\xd8hL\xa2\x1cN\xeb\x7f\xb6\xc2\x8fg\x04xg\xa3/\xae\xdcL\xfc" "\x1bNs\x00\xf6\x1d\xffU\xac\x44\x17G;uv\xa0g\"\x12\xdb\x1e{\x86\x96\xf5/\xd2:k\xfb\xe0\xec\xe8\x18m\xf3\x1d|\xae\x31" "\?\x8c\xee\x8e\xfd\x0f\xcb\x9d\x10\xf9l\xd9\xa5\x46\xa0\xbf\xe7\xe5\xb7\xa3\xc6~\xf0\x10\x0crV\x99\xe3P,\xbf\xb0\x0f\xce\xa9\x64@\xbd\xaa" "\xed\xeb]\xf0\x90\x87SH\x16\xb7\x46w\xfd\xc3\x16gO:\xad\?\x87\x85\xa9h\xc1\xe7\x33;\x19M\xfc\xe2\xd5\xe5\x82\xe0\xe3\xc5\xcf\?" "\xfc\xca^\x94\x84\xa6\xfd\x8d;>\xcblWL\xe4,\n\xb0,\xcb\xa2V#$\x62\xd9^\xc4\xf0po\"N\xa1\x30\x11\xfb\x06X\x1b" "\x19\xa9\xd0\xfaG\x14\x05\x98\xeb\x10\xe7\xdb\xdf\x9d~\xad\xaf\x07\xde\xfc\x84>\xd3\x9d\x0ez\x98V\xc5\xf3~\x36-\xda,\xde\xb6\\<\x97" "ML\xba\x92\xb8Z\x18\xd9\x1d\xe3\xcb\xb5\xd3\xb4\x19\x80H\xe9\x13\xcc\xaf\xa8\x66\xd3\t\x14\x0e\xf6\xab\xcd`\xdf\xb0\xa2\xce\x01\x89\x44\\\xf1" "\x39\x8b\xd1S\x06;\xc7, \xee\xe4\x9c\x66\x16\x62\xd0~R~\xfd*\xbeY\xc3\xe2\x44\xc2(\xa5\xb8\xab\x91\xc8\xb1\xab\x85;\x8fX\xb4" "\xd8\x1b\xb3\x65u\xcb^\xc5\xa6\x96\xf8\xf4\x31\xcbk\x38\xab\x96X\xfe\x30\xc2g\xfc\x80\x1d\x81X\x95\x44\"\xcew$\xb1\x91\x0b:xw" "\x39\x0e\xe4\xc5\xd2\x90\x34Kl\xb7\xb9H\xc4\xe8\xe5\xc9=\xad\x95\xe5s\x36\x31\xec\xbb\xa3\x0e\x92%\x63\xd8+X\xdf\x08\"\x1b\x41\xfd\xbd" "\x9a\x86%\x03\xee\x95+\x1d\xc6\xddq\x9d\x31\xdbQ\x8b\xed\"\x34\x9c\xda\xa7\x86K\?\xe6\xc9\xbe\x10;\x03\x12\xb3\x02\x12_]\xb3\x8fs" "\xa3\x88\x1f\xa8gp\x9e\x05q\?\x0b_\xaa*\x9e\xdd\x13\x44\xf4\xb3\x45\xcb\xf2:\xd5z\x17\x9e\xd2\x41\xe9\xc7~\x06\x17\x81\xc4\xb4\xa3u" "\xab\xa2\xfc\xc4\x9a\xbb(\xbf\xb2\x06\x33*\xee\x61\"\x42\x62\x63l\t\x03\x31\x91\x08pM@|\x42\xe6\xb7:\x95\xeb\xf3\xe6\xca\xc4\xa8\x82" "\xa6W\x87Zw\xd4\xa3`\x7f\xa9\xa3j\xf0]\x8e'\x1a\xa3Y\xd7/\x9f\xadz\xc6\x06\x1a\xe2\xea\xde\x9a\x1a\x12\xad\x90\x46\xdf\x8f\xff\x46" "#N\x65t\x18\x41\xe2uP{U\xf1\x10\x9d\x90\x88|\xc4\xe4i\xa3\x62\x8b'\xb9G]\xea\x9fY\xf2\xc4\x17G>\xfa\xec\x02\r\r" "\x9f\x01\xa9M\x1d\x44\?{\xa1S\x06w\xc9\x63.I\x33\xdf\x95,\x9e\x8cVr\x61p\x46\x1c\xe8\xcd\x30\n`\xea\x90\xf8.~\xbc\x8c" "\xe6\xc8\xeb\xf1\xdbJ\xfeG!\xe0\xb9\x18\xb4\xcb\x0f\xdc\x83\x16S\t\x12\x65\xe7\x00s\x0fZ\xb8xU\x1d\xff\xb9\x63\xec\xb1\xbf\x98\x99\x98\xd5\xaa\xabX\xa0\xac\xf2#\xca\x0cj\x62\xeb\x19\x1c\xa4\xc0\xf7.H\xad\xd2\x87km\xa3v\xb4\x61\xda" "\xd1\x46\x61\x07N\xbe\x88\x93\xaa\x91\x9a\xd1\x98\xf7*\n\x0b;\x9b\x9d\x10\x41\xdd\xc1\x08\x98\xd0\xee\x44\x66x\x9a\xc1,\xe1\x32:\xb6\xd2\t" "\xbf\x16\x1e\x8aS\x36\xb5q\xd2\xd1.\x11&\xb5\xc1\x82\x8f\x17S\xce\x14w+T\nn\x0b\xb2\x94\xb4\xf9\xaf\x8aV\r\xf1\x87\x94\x0b\x0e" "Y=#\xa9\xae\xcb\xa7\xa7%\x8a\xa1\xa2\x30\x85\xa1\xa9;j\x08\x7fw]m\x43\x8a:\xdc\xc7\x14\x05\xaeS\xed!\xaf\x62\x95\x99\xf2\xcd" ".\xef\x18\x9b\xf8\xc1\x64\x46Q\x01O\x16\x84\x8a\x64\x88YH\xa5\x8b\x46KU\x1a_{:\xe6\xd4\xc3\xf4\x63\x66\xc1/\xef\xb4\x92\xd5\xd3" "\x0c\xba\x87\xfd\x94\x84^]\x9d\xc8\xb3\xda\x83\xb2\xc8\x9d\xb8\x1f(\xf7\x46m\xc6\xf6~\x8fG\x10\x95\x96\x1e<\"\x31q\\\xbb\x8dz\xf6" "{,\x9f!\xca\xa8*\xf1.\x65\x84Gr\x98\xcb\x92\x33\x65U\x93\x99^\xf2\xef\xe7\x32\x05\x19&Z\tl\x62\xc1;L\x8c\x10\x88\xd9" "q\xd7\xf3\x65\xf6\x9a\x98\x98L\x0f\x13\x1d\xe8lju\x89\xccj@![\xd0\xbb\x14\xf4\xb9\x8by\xe5\x0b\xf8P\x32r)\x82.\x04V" "\xe1\xa5\xa5%L\xcf+\xe9+\x94n\x95'\xde\"P\xb6\xba&\xf5xG\xcf\xcf\xfd]\x32G\x9b\x0e\xc8\x34k\xa2\x38\xd9$\x62\x14\x89" "\xe9\xcc\xa6^\xa9\x39w\x1f\xb6\xa5\x0f\xd6\xd5\x07\xea\xbd\x18y\x1c\xf6\x43\xcf\x8a\xcf\x41\xa1w\xdb\xc6\xaa\x02Q\xfeU\x13\xee\x62H\r\x35" "\xc8\x46I/\xdd\t\x64\xab\x0e\xa8\x46\xdb\xe2\x0f)\xbf{\xad=\x1e\xac\x82\xc4\x02\x1eQI}\x8c\xc1\xe9\x83\xd1\"\xa3\x37-\x83\xb2\x1e" "\x90y\x02\xe7;\xe3_\x95\x81\x15\x46\xa6\xcd\xd4~\x42\xdd\x1f\x93\xf8\x83\xf8\x8a\xc5\xce\xcc\x91\xd1\xbfI\xb8\x9blG\\\x7f\x88\xa9\xcfR" "L\x39w>\xa4v\xfa-\xf7\xfa\x00'\xbd\xfbI\xdf\xf3rM\x1f\x92\x9a\x88~\xe3\xca\x9b\xa7\xbdN\x1a\x9b<\x36{\x9aO\xf6\xfc\xdb" "\x9a\xec\x46\x8fo\xe6\xdfg\x8d\\\x15G\x0f\x62O\xfb\x9e\x89\x88\x1e~\x95\x8b\x06{\x06\xff\x05i\x8d\xc7\x64\x8b\rw\xb4\x91\x8b='" "\x1c\x84\x0by`\x89\x82\x85\xf2\xc5\x46Ss\xf9\x1e\x66\xa0\x08-v`\x85\n\x11\xdd\xfc=\x7f\xa9w\x41_V\xcf_\xd7\xc1\xcdI\x89" "/\xab]\x89\xbd \x8d\xb0\xd5\xe1\xa9\x9e\x36\xacu\x97\x1d\xe6\xcc\x18j\xb4\r\xeai\xe5\xcc\xc8}^\x95\x85)/\xf5\xae\x85\xac\xa8\xe2" "\xdcO\xdf\xab\xda\x82\x9d\x84=\xbf\x8e\xff\xb0\x8b\n\xad+\x91\xf9\x0e\x8e\xae@\r\n\xa2\xf6\xb1\x88Y\xd7\x17\x99\xe0\x93i\x66\xdf\xd3\x61" "\xae\x9e\xf6\x62\xf5\x82\x15\x82,X#\xa6\x62\x41\x89\x90\xb7K\xff\x1a\xa8Z*\xf5\t\x8f\xaf\x61\x36\xed\x8f\x32Nu\xcb\x81L\xa6%u" "\xd2\xefp\x42\xa8\x84I\x04\x37\xbc>\x12\x35\x30y\xabtI[P\x18\x99\xea\xc1\x43\x19q\x92\x33r \xcf\xf5(\xea\x64\xba\x89\x91P" "\xeb\xa7l\xf2\x90\xf2\xa9\x61J+\x36=\xb8\xb7 .\xae\x94Y\xa5^\x03\xcd\xfc\x9e\xe5\x61\xf0\xd5\"\x8c\x85[\x94\xc4_\xeb(\x35\x33" "\xec\xea\xfa\x41R\xcf\xb8-v'$\x36T\x37V\x46.\x87\x92H\xa6\x96\xb8\xe9\xdf\xef\x65\xa9}Z\xac\xbc\xfbY\xf8V\x32\x45\xd1!" "\x98\x0c\x63*vN\xfbp{Q\xefV\xa9\x37\xec!\xb8\xb5\xc4\xec\x61\x01\x0fq\x84x\xa4#:\xcc\x30y\x17\xd4\x46\x31\x15U\xd7N" "\x95>\xc2[\x39\x37\xf6R\x0b_\xe6\xdd\x9b\xe9\xb7\x9f(\xe8\xb4}\xa8\xc7\xa2\xda\x46k\xa7|@\x07\xaf\xd4t'\x32]\xf6\xc5\xd8\xe8" "\xab\xda\x1b\xa9:\x06\xcf\x34\xa2\xfc\xe7\x17\xa7\xb2\xdf\xda\x87\x37\xd6\x91\xb4\xb1\xf7\x90\x03Q\xf3gR\x35\x80\xbe\x86\x9b%#\xc7\xbcT\x36" "\xb8\xce\xfe\xa9Wg\xa2U\xac&\x97\xe7o\x65\xafT\xd3H$\x87\xd1\xce\x17\xb3\xf0\x01\?\x03P\x98w\"&\x9a\xa5\x62^\xaa\xdaU" "\xc9\xca\xbd+\x99\xae\x1d/\n\xf9\x8a\x98_\x13\xff\xf8\xf1\xef\xf3\xd2\xc3\xc6\xae\x02\x45\x37\xd1\x8a\xbd\x1c\x93\xe2\xe1\xdf\xbf\xd2\x18.\x66~" "\tGW\xee\x34\xe6\xb3\x8c\xdd^\xc4\x64.\x87 j\r\x63\xff\x39\x15\x1d\xef\x35\x82\x8f\x63\xb4\xeb\xb2y}\xd2,~\xecW\xdf\x62\?" "\x0f.)\xcd\xe0\xc6\xdaL\x1b\xc3U\x31\x11\x39\xf9X\xb2\xd3\xaa\xdem\xa3\xa5\xe2\x06\xd3\xcc\x9a\xd4\x0c\xad\xd8\xa1P\xe6\x63\x37\xbfu\xe0" "\xff\x1b\xee\x1b\x88\x38\xff\xad\x97\xf8\xd6\xd6\xcb\xb7\xe6\x42\xdf\xf0\x0b\xd1J\xf9\xf7w\xc2 \xc7\x81\xdb\xca\xa3\xb1\xd8\xca\x63\xa0\x45\x88\xbb\x92" ")\x15l\xa2\xc4'\xa2\xd4\xbd\x88\xe2\xb2\x80\xf8p\x1f\xfe\xb4\x61J\x33\x83(O\xc1\x63\xaa#\xe5Ly\x02\xed\xd2\xfb\xe7\xe8\x31\xa7\x66" "U\xe8\xe7pU\x38\xe2\x14\xda\xd5\xfc'\\\r\x85\"Qvt&v~\x94;p\x05\x62I!Q\xf2m\xe2\n\xb7\xc2\x84\x38\xa2\x64" "\x00\x44}z{\x14\xe4\x35\xad\x02j\"\xad\x02\xd5\?y\xecW\x9aX-\xf5\x8f\xd5\xd2I\xb1\x44\x19\xd4#\x9e\xf0W(\x06\x89\xd2\xa9" "\xda*\x44Iv\x42\x81\xf9\xa7\xa4$/$>\xf6\x8c\xdel\x82\x9c\xa1U@\xe3P\xc8\x8e+\xae\x46\x31\x85\xf9\x18\xa6\xdc\xf5\x64'\x91" "VI\x9f\xaa\x14\xbe\x14\x85Q\xf3h\x44M\\L\x37\xd9\xb7U\xc3$\xfdV\xcd\xbf_\x0b\x03Yu%\x44$m\xd5\xc2\x1b\t\xe8&" "\x16;\xb6:\xe1\xfe\xd3\xe8-Nh/\x9a\n\xc4\xabQL\xf9\xd3\x03\xf6\x19\x81\x7f\xd5V\x1f\xb3\xd3\x85\x14\xd1\xc5\xd4\x80\xec\xb3\xdf&" "\x44.\xed\xc5i\xf5#\x19jhM\x35\x0c\xa6\xe2\x9e\xfe\x36\x94\xe9\xcc\xad)\x06=\x88x\xeb)\x66i\xb6\xa6X\xa5G\x14\x17\x00\xc4" "\xbb\x16(\xde\xed\x84\xc1~\x65\x66(\xfe\n\x61\xca\xb6\x66\xadi .N\x84\x18\xfe%\x13\xe1\x38\r\xaa\xcf\xe0g\xcbH\x95(\x34\x99" "H\x89\x0bw\xe2\xa6\x07\x1e\xe4\xb3N\x31Q\x8a\x88\xe8<\xb5\x1b\x85\xe7\xb6\x97\x1a\x62\xea\x9f(jQ\x9a\x8a\x9e/<\x0cU\xc4\x9bS" "\xc8\x31WQ\x8b\x9b_\xed\x11\\\x88\xb5G\xe8\xb2!.\xca\xde\xb1*\x0b\xcbvv\x00;+\x91\xb9\xbd\xf6\xeev\xde\xe0\x03j_\x46" "\xef\x19\x99\xd2W\xd2\x1e\xf9\xa9go\?\x85Y\x99\xc3\x65\x36\x99\x9d#Vj\x91)\xe5\x98\xd0\xcf\xabo\xe6\xf6\x88\xae\x1f|~\xc2\x94" "\x02\x96x\xac\xfcnspW\xdd\x1e\x61\xedS{\x14\x8dg\x61q\x1c>p\xa0\xb6\xdf\xd0\xf0k\xbf![h\xab\x03\x8f\xb6v\xef\xb5" "\xdfP\x33\x14\x06\xfb\x41 \xa3\xb5\xa2\x90j\xda\x63\xde\xd2\x46\xf6\xfa!S\x46+\x85\x61v\x82>\x35Q\x98\x62\x41\xa6\xf8\xdd\x15\x06\x9d" "M\xf8\xf5\xc5\x83\x66\xd2q\xdf\xa6R\xf6\x1a,\x64\xfc\xcd\x8b\x9a\xba\xb8\x8dM\xd9\xec\x43\x16'\x99\x8a\xaep\x35\xaf\xae\xfd\x89\x62\xfa\xeb" ".\xe6\xfc\x88\n\x13\x65\xef!\x1b]\xbd\x86\xb3\x39\xe6\x65\xe0\xb0T\xa6\xc4t\xbd\xab\xa4\x64U\x15Q\x66\xf8\x0b\x31G\x82\xcc\x41!\x90" "\xf9\xb4\x64N\x1e\xc1\xf9\x85[\xf8\xa3\x17\xa7\xb2i\xa7\x96K\xdd\x41t:\xc2th:\xb6\xff\xf1\n\x15l\\K\xea\x34\xc2\x66\x9dm" "v\xfa\x86\xbe\xad\xf6\x18\x13\xeb\x89\xfaQ\xe0\xd7P\xe8M\xabX\x19\xc4j\x07\xca\x1c\?\x62\x43\x8fK\xbb\x42\x18\xe6\x8b\xe8\xb5!\xd5," "\xa1\x8b\x81\xcc\xfe#\x92'\x99\x32\xe3\x84\xf8\xf5\xc3\xbf\x95\xae\x18Rg\x89\x62\xe3 \xbb\xf4\x65/.\x32\x37\x1d\xf4I\x90y\xc6w\xe1" "\xee\x66\xfd\x96\xf6!\xa3$\x45\x65|=\x34\n\x84z\xb3\x0f\x7f\xd0\xf6\xce),,\x16\xe5\x37&Q\x8aK\xcb\xf6\xa7\x97\xca\xfd^\xda" "\xde\x30o\xcaK\x1d\xb0{\x84(\x32\xb1\xbf\x80\xa8 \x31\x8d)\xb7\xf7\x00T\xfb\x03\x8d]R\xfd\x85ww\xb1s~\x36\xeb%\xae\xfd" "\xe9\xc8\xa9\xc2OP^\x41\xbd\x8c\xb8\x83_\xe6@\x88\xa2\xe7\xc4z\x84\xf6'|\xa9\x11\x87\xad\xd8S\xf0.\x07w\x17L\xe2oO\x35" "\xaa\x31\xd1\x9a&\xb3\x04\xa2\x8e\xca\xdd\x8e\x39\xe5\x83\x11\x39(\xcc]\x1e\xb9\x1a\x94\xd4q\xc4\xe4\xb7\x95-^\xa0\x64[T\x98\xf7)g" "\xe2\x9d\xd4\xd4\x88&Jjv\x30O\xda$\x10\xa5\xc9\x9aM\xe9\xa2O;%\xd3:\xc5\xc4\xa0\x31L\xc9*\xcd\x44!$\xca\xddK:" "\xfd\x88\x97\xae\x91]\xbfU;\xa6\xfc\xe6\xfa_\x85\x8e\xb5\xf6\x1a=Lm\xf5\x1fN\x94\xa6\"\x31\x83g\x82\x03\x96\xb6\xee\xde\x45,\xe8" "\xef\x8a\x39#U\xe9\xe0\x9d\x83U\r|\xc0\xf3\xa0\xc2\xcd\x34]\xc0\xac\x1d\x98\x32@\nS\?!\x99\xfes\x16}N\xa2\xc2\xd9\xd9\x1b" "\x64\xa0\xa4\xb0%\xb6\x11\x1e\xe8\x85\x61.\xd8\xd1\xff\xa3\x1e\x1d\xe0\xd3\xa2o\x42\xe8\x65n\xb0+\x03\x14\x37\x13\xdf\x9d\x9a\xd5\x63*\xf8," "\xa1\xc1\x46Jz\xcc\x98\xfa\x64\xfb\xa2\xd1\xbd\xc2^O\x1d\xf5\xdb\x9c\xf1\x80X\x13G\xcco\xc0g\\\n\xbb\xb2\x30\x9f@\x19\xe1'\xae" "{\x46M\x02\xeb \x8b\xcfO\x8dw\xf0\xfd\n\xe1\xa6\n\x37\xc2\x88*\xd1\xfeJ\x1c\x9d\x11\x37\x1d#\xb2,\xa8=\xbeL \xd3;\x88" "\xc8G\xd6\xd8\x9d]Hu\t-\xa7\xd6hX\xb7\xd7\x16\xf7\x88ZH\xb1\x19\xbb\xac\x85\xbd\xc5\x62\x62\xd4+\xc1\x94\xd5\xec\xc2X\x94\x0b" "\xe7zV\xfc\x90\x13\xc5\x17\x8b\x30\xfa@\xfc\x41]\x87x\x02\xb1\x13\x35\xf1Zu\xa6ht\xee\xbcI=#\xae\x46\xd5\x99\xf1w;\xb0" "\x17\"\x15{\x08R\xdc\">\xe0\x93\x44\x35=\xfa\x8a\x88\x17\xb5\xbf\x8c\x16\x33\xed\x9d\x88\xf4\xf2Xo+*\x16\x43\xed\xf1#q\xa0\xd7" "\xfe\xd2\xbc\xe6\x0b=\xc0\x44\x99\x05\xc3\xdc\xc7\x15>\xeb\x17\x96\x00\x12\x65N\?Q\xfc\xc2\x12\x11\xad\x98\xfa\x30_Z }i\x0c\xfa\xd2" "\"\xe9\x0b\x93\x9e\x88\xc8\"\xbe\xb0\xac\x84\x88\n\xd0\x17\x9cw\x12\xe7U\xe5\x14\x44\x10|k~\xca\xfc=\x1e\x03\xf1\x90'\xca\xff)\x61" "\xca\x9c\xa8\xb0P\x0c\x65\xed\x1a\xab\xb5\xd1\xf9]%U\xb8\x37r\xd2\x1c\x7f\x43I\xbb\xa0\xfd\x8dy\xd3\xed\xef\xa8\xd7\x08\xde_\xb1\xd4\xa5" "\x9b\xf1\x86\xfcl]\xfdX\xdd/\x38\xdf J\xef&Q\x66\x65\x10\xa5\x85\x44\x94v\\\xf7\x0b#\x63\xc4n\x1a\xfc\xec\n\x03\x19\xed'" "J\x12\"~\xe2\xba\xf8&\x44\x99PL\x94\x61\x65\xa2\x8cl\x08\x43Y\xce\xd0\xfd\x42\x84\"J\xb3\x87(\xfd\x1e\xddo\x14\x1c]uJ" "\xc2\xd4\x61*\x36'\xe1|\x1b\x96\xea\xf0\x0b\x44\x07\xa4<\x66\xeao\xa9\xfa&\x63\x99\x64\xea\xdfx\xe9G\x30;\x83\x1f,\x32\xa5\x43\x9f" "H\xd5\x30\xa9Y\x92)+M\x88\x0f\x05#\xfd!\xb6\xdb\x62\xb5\x03KKOJ\xbe\xae\xba\x0b!\xca\xfe\x92\xc4\xa6\xdeN\xa6\xa8\x30\xc7" "\xc6\xe0#\x8f^\xe1\xae\xfa\x0c\x11\xb2S$q\x07\xc0j\x8b\xe5\x93\x64J\xae\xdd\xd5\xf6\x34Q\x36\xa0\x65\xea\xf1\x45\xc5\x88\xc2\x44L\x64" ">\x64J\xa7\x33qU\x05\xd7z\xdb\xad\xfe\xb5\x8d\x9au\xbf\xfd,\x9e\x04M\x16\xa2\xec\x64\xcb\xc4\xfb\xf9w]\xf0\x01\x97\xf4\x1f\xf1\x9e" "\x1a!\xbe\xb1\xe7%\xb1\x99V\xaan\xe1\x43\xfa\xbd\x84\x11\xde\xb6\xc8\xec\?*\xf1\x89\xb0x\x81\xf8\x86\xa7\xc3\xea\xc6\xae\xba\x1d!J\x1f" "\x81\xd0\xde\x15\x8b\xd3\x98SP\xc6!\xbb\xea}\x84X\xaf(kJ\x84x ]\x97\xc4&\xde\x36\xe8\xe1\x03\x61\xf0\\\x18\xa6\x1b\xf6\r" "\x30\xe6G\xfc\xd0\x07\x9a\xe1\x05\xe0\xb4\x8b\xa8\x9f;\x38\"\xfc\xb0\x8bo\xf7\x1b\xdd\xa7\xc4[\xbc\x10\x06\xfd\x88O\x9f\xa0\xd4\xc1\x89oi" "\xf4\xf9\xb2\x89o\x12\xce\x10]\xd0\xc3\xd9\xfd\x86Sm\xe2\t/\x80\xbc\x99\xf8\x98\x05\xab\xef\x46\xfb\x36l\xf6g\x18\x96$U\xc3\x9bj" "\xea\xfa\xc6\x08\x9e\xd0K\x34\x30i\x17*\xfd\x88\x65\xa4\xa4\x64}\\\xf7\x07\xd3L\x98\x12)\x7f\xe0\xbdN\xc8\xa3w\xb2~U\x94\x99\xe8" "\x85\xea\xee(Ns\?\x1d\"\xf9N\x13\xf0\x0e};\x44Y\xca\x46\x94\xa6\x07q\x7f\x13\x66[^\xae\xf4\xaf\xf2o\x8aTi\xf0Wu" "\xcc\x85\xef\xee\x34\xca\xed\x38\x30\xff\x0b\x0c\xb8\xde\xf9\xbf\x61{\x8b\"\xcb\xff\xfaG\xd9I\xb1\xd5\xb4\r\x18\x44\xa1`%\x13\x61\xb9\x0b\xce" "\x12\x66;\x0c\xe3\ny\x00Lv\x9f \x85T\xb1\x8b\x9e\xce`\x0f\xaf\x02'}\xdd\xfd\xef\x36\xe1\x8f\xbb\xa1,\xdbg\x65GW\xa0\xd4" "\x8e\x99y\xfaR~\x96Zui\xd8\xe1\x66\x18\?S\xbbsg~\xf7]=so\xe4i\x38\xc8\x96Y\xb9\xe9\x15\xa4\xf0\x0e{\xfe\xf6" "{\xdd\x8dK\xd4\xdf\x35\xc5v\xd7<\xe8\x35\xa5\x62K\x94M\x11\xbb{\xde\xdb\xed\xef\xaa^\xb6\xaa\x1c\x1b\xbd\x62\xc9[>;\x65\xdb\xeb" "\xa8\xd2\xedu\x44\xa1\x0e.\x66x\xa9k\xc4\xdf\xa3\xbe+\x0c*U\xcd{u\xee.Q\xc6+\x99}\xa3w\xbc\xc2\xe2%Q\xd8\x9bT" "\xccp\x91\xb5\xf7\xc4\xf0&Q\xfa\x99\x89\x8fz\x33\xe4\xd0LM\"{O\x36\xbb\xe0\xa2\tJ\x0b\x86H\xf5" "_{s\x31y\x87\xc0L\xd3\xd3p\xf2\xce\t!\x16\xbc\x11op\x9cw\xa4\x99'\xbc\xecVU\x1f\xbc\x45\xd0\xf8y\x84\x07\x66N\x12" "\x1f\xca\xec\xdaT\x36\xba%U\x9e+\xbf\x8d\x16\x07\xc8\x0c\x37\xf8\x12\x18\x9e\x16\xf2\xc8\x89L\x95\xeei';\xb1\x86\x00\x44Y\xcfl\x1b" "\xa9\xa2h\xa1\xc2\xaa\xfcM\x11&\x18\xbe\xc3Q\x8d\x1c\x43\xf6\x45\x66\x17\x31\n{\x92\x13\x65\xdf\x44\xa1\xc5(\x36%K%\xf3X\x16\x06" "\xd7o\xca\xa9\xd1~\xcd\xfb'\x37\x10np\xec\x42l\xe3\x93hj\x65j\xca\xba\t\x86\x08\n\x0c\xe2\x12gU#:\x0b\xcc\xe4\xdd@" "\x32\xee\x37\xf6)`\xfe\xb7s\xbb\r\x46\x0c\x44\x85_\x03\xf4\xa0\x93\xb2\xa3\xc7\rx\xc2\xd7\x08\x65{\x41\"\x32\x8f\x1bli\x42|K" "\x18\xedq\xc3\xb7\xac\x32\xa7\x44\xa0#\x43\x17\x62\x30JL\xf7W\xefW\xf6\xb9\x43\xfd\x90\x44\xfbJ\x64\x06\xeb\x03\x96\x04\x91\xd2\x38\x1aJ" "i\xcb\x44\xac\xc0\xe4\x39\x9b\xcb/\xf4\x9bW\x96\x42\xc2\xcdT\x89\xfc\x00\xfe\xc9\x88\x17\xe4'Xx(\xb4SX\xdd\xda\xe3\r\xd7\xc0\xda" "\xcaHy\x17\xea!\xa2\xbcT!\xa8|\x38%\xfb[\xc3\xbc;X\xbc`\xa5\xe1\xcf{\x14\xe9{\xb3y\?\x44\x37\xac\xaa\x89\xe6\xe0\xa2" "\xd6\xcf\x7f\xa6.\x94\x16\x15\xdc\xce\xd1\x91&\n\x63\xc8\x62\xa2Y\xd5\xd3m\xdfz)\x8d\"L,+\xef\xe9\x9c\xa1^\x8a\xd7}H\x39" "\xd7K\x85\xb2H\xbe\x97\x42\xa7V/\xad\xef\xc6\x84\xc7&\x32\xa5\x33\x9c(\xadh\x66\xde\x18\xf6)\x89\x0f\xdc\x0f\xf7\xf9h\xa4\xbf\x91\xfa" "MO\xf7\x98\xea\xa5\x35o\x66z\x8d\x05zT\x44\xf1\xf2\x02i\xa5\xb3\x1a*\xbf\x94x\x14L\xac#J\x63\x81\x98\?\x83\xc8\x88\xd3\xf0" "%\xcd\xac\x1a\x35\xe8\xd9\xd4\xc8\x95\x46w\ts\x0bJ/\x05Q*\xf9\x42\xf7W\xd2YM\x44\x9e\xc1\xe4N\x1cYP#\x8a*\x30\xd8" "\x32\x93\x95>T[\x7f;\xd0\x87\x19l\x8ch\x12\x93\x39\xac\x18\xb5\xa0\xd4m\xa0\x98z\x35\xe9\xc8\x10\xba\x87\x99\x1f\x35\xff\x15S\xba\xae" "\x61\x9a\x83!Q\x16\x06\x64\x06\xc5\xa9\xbb\xee\xfc\xe8\xde\x9f\xcc\xc4\x9dw\xdbu\xea\xfa\x14\xbb\x30\x17 Uw\x35\xb7\xf3\x17\xa9\xa5~\x8c" "\x9f!\x36\x1f\x62\xf3l\xf4\x06;\x33\x31\x8f\x8b\xcc\xed\xc8\xe8\xce\x9e\x11\x32\xa8\xbc\t\xed\xd6h\xce\x13Q\x42\x10\xdf\x82\xd4\x1bL\x14\x16" "i-,\xd2Z\x1c\xa4\xb1\xc6\xb7\xa7\x9bP\t\xbd\xc2\x33L\xe4\xf6i_&h\x10Ql\x30\xed{\xa2]I\\\xea\xb3l\xf4\xd9\xa4" "\x86\x46\x94\r\xee\x84Z.\xa7\xed\x81\xd0\x9dN,\xe3\x81\x30+\x80(\xad}\xe2\x18\xb7@\xaf@Ow\x9a\"\"\xbd\xa6\xe1\x10Xh" "\x97\x66\x13\xd9\x44:\xacL\xec\xd9\x42\xf1\xee,\xe4txT\xd5\xab\x18y\xd1~\x0e\xaf\x18\xca\x44\x62&n\xae\xb9]\x1a;\xa3\x11\x7f" "J\x46\xfb\x04\xe8I ^\xf4!.\x08\x0b\xad\xec\xa5\x35'Ikm!\x1d\r\xf1i\x34qg\xd0q\xcb\xdc\x83\xd2\x11N\x94\x15$" "\xc4\x93$\xe8\x0cV\x88\x10\x91\x30\x99\xec\x9c\xear\x0f%\x43@\xcc\x37\x10U\x9f\x8c\x37}\xfd=V\xd1\xa5L\nQ\x87}\xbcz\xa9" "\rv\xf1#\x85p\x66\xf2\xd2t\xd4\x39\x32\xd8x\xb0\x97\xd1\"\x35\x83\x81\x06\xe2\x35\xae\xac\x05S\x86j\x10\xbc\x46\xfdV\xde>\x83\x01" "\xd3^\x96\xd7\xd7\x8aK\x0b\x32Q\xb5\xcb\xa2+\x9e\x88\xe4\x94\xf5\x07\xf7\x46\xac\xa9\xec\x65\x31\xff\xac\x97\x45\x87x/\xabI\x32\x8b.p" "\xa2\x39\xca \xb3\xbb\x03\x91\xd5\xe6\"\xe9K\xed\xdd\xa2\x91\xd7\xbb\xc5\x04\xd7\xde-&\xb8\xf7n\x31&\x41\xc4\xef\xb9+*L\xc9\x17\xbf" "\xd3\x43\xdaH\x66\x36\x8c\xe8\xd9\xea\xa9\x37P\xa1\x1d\xd2\xe4W\xf0\xd7\x39\xa3\x9ez\xd0\xbc\x96\xc9\xdd\xb6\xe2\x1cM\x94\xf3JM\xea\xf1\xce" "\xabK\xe4z\x90\x35\x8f\x07o~\x81\xba\xcb\x18y\x35\x89\x34\x44\x45\xf9\x8b\x32\xf6]\x17\x45\xd1\x0c\x13j\x45Q\x31\x65\xe7\xc4\xeb\xb7\xbb" "\x1a\x14:\xffH\xad\xce\xacPh\xaa\xd2\x07*\xfd\x1e\n\xa0\x38\xb8\xe8\x95\xbc\xe4'XX\xb2\x83\x14\x14\xad%\x8c\t\x12Q\r.y" "\xb2\xe1\x19\x11\xf9TI\xeb\x43%t\x8b\x10\xa5;XH\xcd\x05m\x62\x95\xb0X\xbeW\xc2\xde\x01\x42\xef!\x8b&\xa7(\xad\x9b\x88\xb9" "\xb8\xd6\x06\x46Ik\xe2\xa5\xa0\x91\x0bw/\x98\xcbNj'iV]\x08\xf6J\x9a\xf0J\x18\xdf\x17\xba\xbe\x94\xde\xd3\xefV^\xfe\t" "\xc3\x02\xc4\xf2\x03\xd8\x98\x81\x32\xa6J\xe4)\x9bS\xccH!\x85\n\xdb\x13\xba,\x88\xfb\xb6\xd1M\xaa\x16\x85^$\x31\xb5\xacx\xf2\xcb" "\x38\x84]S\x88\r\xf9\x84Oh\xe8\xf6\x9e\xc2+\xdc#\x44:y\xc2\xf8\x0c\xf1\x82'\xc3\xaa\xb6\xde\x93V\x45\xca\xe8\x44\x15j\x0c." "\xc3YX\xaf\xacM\\&/\x80\x43\x43\x90\x95w\x9e\x61\t.\xe5v\xdb[L\xbe\xebU\xb0\xc6\xbfW\xd1\x08Q\xd1(\xcd\xa4\xd6\xb7" "\x66p\x15\?\xa5g\x65\x0eO\xaf\x12\xde,y\xb6+\xea\x11\xd5`\xf5h\xd4\n\x1b\x9b\x9a\x90\xab\xe2\x1du\xa8\x65\x8b\xce\xc3\x65\xca\xdf" "\xd6\xbc\x34\x8e\xa3\xf7\x88\x88\xe2\x9e\x89-\xe3\xc9\x44\x8d\xba\xe6\xed%Pk\x9a\x1ej\xe8\t'\x8ak$\x62G\x8f\xa3\x8c\xaa\x61\x33\xa5" "^\r\x8e}\x88\xb2 \x87(\x83\xb3\x42{\x8a`\x8a\?\xc1<\x33\"j\xda\x35l\x32N\x44\xfb\xbb\xa6\xed\xefZ(\xdek\x89h\x7f" "\xd7\xa2\xae\x44\xe6Wx\x90&J\xaf\x44\xefU\x33\xafW\xf4\x43\x10'\xaa\xcfY=TG'\x66\xaf\x1eu%\xafoh\x35\xa1\x81\x9d" "\xa5\x85\x9c)_\xb6\xfe\xd5\x18\x07P\x99jh\x15\xb6\xa1_\xb6\xe1#\xebj\x04T\xb9*\\`N\xf3~{\xad\x37\xd5\x05S\x44\x99" "\x0c\xd5khv\xd8\x90\x35Z\x1fZ\xefj\xd0\xaf\xe9o\xb0\x06\xa8\xd7\xd4\xfc\x90\"\x82\xfcm\x13\x1dy\xc4\xfc\x63\xb8i\xfa\x9d\xe3\xff" "\xb9>\xf0Z\xe4\x45\x19\xcb.\xe8\x0c*\x91M\xccl \xdaq\x04,\x93\xc7\xe9\xbeG\xa6\x34\xe6\xb1\xc9K\xa2\x65[\x12V\x1b\x10\r" "k&\x66\xb5\xf5x\xb1\x32\xbbI\x97\x19\xbb\x31\xe5\x15\xd7\xe8\x65\x8f\x1f\xfb\x19\xfd\xc7\x31t\x44\xc9\x01m\xc7\x89yz\xe0\r#\xec\x1c" "\xb2\xb0\xa6\x9f\x63\xef\xa9\x18\xad\x17\xc5\xeeHPko\xfa\xcf\x45\xe5\x02\x9c\x97\xed\xcf\xfd\xaf{{<\x98n\x16\x8d\x1dp\xbf\x9cG\x43]t\x87IQQm\x83\xe5@P\x87\x12z\xff{" "\xec:X_\xb1\x03\x37\x0b\xc4r&Xl\x31\xc4Jj\xb0\xa1\xff\xc3\x9b\x12\x14>S\xc7\xcf\x95x\xca[g\x13W\xb2\x03\x8aS}" "\\\r~\xec\x89\x8d\x0f\xb0\x39\xe4\x17\xbb\?@\xad\xea\x46\xdeJu\x84\xa3\x41>\t.\xb6\xc6\xd8\xddHq\x7f\x34\x8a\x8a\x0e\xb6~\"" "\xa2\x9e\xc7\xe4\x12\x10\x95\x1fQ\xe2\xbf\x42\xab\xb3|@\x13\x83\x98p\x9f\xf2w.\x66j\xb9\xd2\t\x65\xc5.\xf1\x82OO\xff\x8c\xfc\"" "\x1aX\xd1V\x82P\xb6q\xec\r\xf4S\x0e\x30\x35\x96\xf8S\x30\x9a\xe9';\xca-x[\x31j\xd5|\x00\xf7\xfd\xbd\x81\x66\x63\x83\x7f" "/\x80}\x30\x84z\x9b\x11\x06xz#*\xb5\x99o\xd8\x8f\xb6\xf7\x86\xd8Gu\x97m\x81~\x8d\xf5\x99\xac\xa6\x46N\x80\xd7uS\xc1" "[\xeeO\x9dy\xaf=\t\x43R\xe2\x64X\xc8\xeb\xe8\xa4\x63\t\x8a]IU\x9d\xb2\x8a\xbe(\xafX\xf3v\x87\x98\x82\x1f\x16UK\xef" "\xe1\xd1\xa9\xe3UT\xab\x98\xf2\x1bY\xac\xdb\x13\xc5.\x64\x65\xe0XT\xf4\x92\x42#\x9d\xd4\xe1\x9e\xa7\xc1\xca\x30\xb8\xa8\xf0\x45\x9e\xe1p" "\x8fY\xfbtLjZ\xcc#hOz\xa9\xfe\xee:\xfe\xf5\xdc)\x1b\xa8\x15\x85\"\x8d\xcd.\x62\x93\x98\xc8\xea\xfa\xf7\x98\xf0'\xf4\xab" "\x15\xbfz\xaf\xea\x93]\xc4\xc8\xba\x66V_\x61!\x87\xa9\xda\xa4\x32\x39#J]\x36\x17\xc1\xc7\x0e\x66\xf6\x8a\x9d\xba\xe7J\xaa\x32\xf6\xb6" "T\x1a\xd0\x97@\x65\x84\xd4m\xddH\x85\x00\xdc\xe8\x89\xe2\xd1\x63\x19\xe9\x14\x85z\x1d\x9b\xef\x46j\n\xa3i\xc3\xea\x02\xdeU\x8c\xbf\xa7" "\x06\x1a\x88\xa4\n\xf7\x46v\x61s\x97\x34\xc5u\x15\x19*\x61\xf5\xe3\xcf\xf2\x16\x1d\xa0\xe0\x45\x9e\xd4}\xde\x88\xa9\r\x62\"_%\xb3\xa8" "\x7fS\xec\x1b\xfd\xaf\t\xa6\xbe\xb1\xfa\x06\x1fJ\x46\xcc\xfd\x15\x93>\xa6\x97\xb8V\xb5\x33\xf2\xa6*/\x8fN}M\xb0\x62G\x14\xff\x85" "}\x82\x87\x9d\xdbY\x92\x94L\x19\x15\xf2x\xd7\x83^\xf5\xf1\x8e\x9d\xe2\xc9\x8c:S\xbe\xd4h\xfeT%\xa6\x30\x11\x98\xd4\xd3\x8c\xf7\x45" "zUU\x1e\x80\xd2\x10\x63\xb6\x8d\xb1\x18\x46\x8a\x37\xe6\x1d\x14,\xa9\xf0\x81\x45)v:\x1a\xcf]\x08\xb5\xf5\xd2\x92\xd0\x85<\xcf)\xb7" "\x32\x15\xed\x06^y\xfd\xaf\xa2\x97\xf7\x1b\xef\xc1\xab\xf6M\xd1\x19i\xb4\x32\x37\xe0\xdb\xc5\x18\x1c\x16\xe8L%\xf5\x9e\x89\xbf\xe8\x44=\xdd" "\x92\x39\xd3\x1b\xcc\xf5k/j\xc6\xdf\x43\x9a\xfe\x99\xa2Z\x86{\xa9\x45\x8d\xbd\xf6t\xdfM\x91\xf9w\xee\xd5\xc8\xe3\xa5\xe2\xf8\x8d\xd4V" "\xaf\x63\xa1\xb0\xd3\x97\xdc\xad\x8d\xbc\x61I\x62\x1eSp\x99\x08\xf5\x35\xc1J\x07S\xee\x9c\xbd\xde~\x84\x46;\x99\xe7\x19\xfd x\xc7\x85" "\xfd\xc4g\xec\xe7\x16\x0e\x44\xde\xb5\xe6j\x1fS\xd8\x19\xc1)\xa9*\x93\xca>\x18\x39\x41\xed:\xaap/\?\x97Q~\x80\xf7}\xdeW" "\xa9\x8b\x97\xf6\x65\x9a\?\xb1\x82\xdc\x05m\x18\xe1\xef\xb1\x66\xd1\x8c\x14j\x38\x30GI\xcb\xa2H\x61X\x0f\x66\xec\xe8\xdb\x95\xc5\x66R\xa1" "\x8c\xba\x92\xf9Z\x89\x45s\xec\x90$\xc4<\x11sL/\x64\xafk\x95\x85)\x1e\xe9<\xeb\x8d\x1a\xefn\x93\x08\xa7\x92+S\xde\xc3\xc7" "\x9f\xd2g\x96\xea\x08QS\xb4\xdf\xe1\xfdQ\xfc\x95~\xb6N)~\x05\xa8\x9b\xb6*\xe4\xdc>\xbb!\x39\x04\x8fH\xad\xfe\xfb\x9c\xf7\x9c" "\x92\xf5\x8d\xa4&\x0f\xde|\xeb\xbf \x8b\x43K\xbc\xaf\x13\x32\x84\xbc\x18\xb9\xdc\x36\x15\xda,\xa8\x98\x42U\x8b\x0e,;\xc1X\xffn\xa5" "\xd1\x61\xb5\xa3\x66\xea\xa6\xa5\xd4\xbf\xb2\x9b}%\xb8l{\xee\xff)WX\xb2:\xad" "\xd1Sm\xca\x8a\nR\xdeU\xc3K\x0e\xff\xd4\xde\x99\x37\x8f\xd8\x8d\x1a\xaapM\x95p\xa7\x66\x0b\xf8\x33\x80\xb2=\xad\x45\xf9\xb9\x82\x95" "l\xacN\x19\x7f\xf3h\x8a*\x42p\xc8!*|\xde\x84\xd5\x9c\xa9(\xd5\x8c+\xd9\x91\xd7)\x9b\x9e\xcf\n\x05\x82\xbfMy\xc7[\xac" "&\x10\xc5\x11\xa9v\x1fW\x8djL\xa1j\xea\x94\xe6\xaa\xd8\xdb\x42\xe8\xa5x%\x05\x9c\x64\xca\x01\xe9\xd9\xf9o\xc7\x30\x90\x05\xb3\x9a\xfa" "\x33\xf5\x9dN\x19~\xee\x97\x91*\x8d\xf7\x97+v#\xdbo\xc5\xd5\x04\x7f\x81\xb9\x46\x42\xf8\x36\x11\x33\xd4\xbf\x0c\x34\?\xc2V+\xc4$" "\xbe\x0f\xd5\xa3\xa8h\x44\xd7\x94(\xca\x94\xadV\x03\xd7\x93\x44\r\xfe\xe0\x61\x63\xc4\xbc\x35\x32+;#\xd6\x0e\x92Y\xd5\x43\x35}\x9e\x36" "\xa2\x04\xea\xdb\xc4\xb7\x03U^\xac\xf6\x00\xe5\x97wqU\x43\x19hq\x1cS\xa2\x89\x9fu\xa3_\xd7G\x9c\"\xd0\x02\xadO`\xb6\x34" "q\xff\xa6\x9c\x18\xd1\x17\xde\xbfG\xbf%\x31\x83\xab[!\xc5;\x39\xd6'\x96\xb3\xc0\xbb\x97\x30z\xbe`$\x81\xd5\r\xa6\xe9\xf5\xb5\x16" "gU\xb8\xf0\xf5\n\xd4\xfc\x92(\x0el\xbf\x9d\xda\x97\xc2\xc7\xad)\x9et'\x8djQ\xec\xd6-s\x30\x45\x01\x80\x39\xb2\xa6\xacJ\x01" "\x15i\xe5\x98\x14vHT\xa5/\xf7~\x65\xfc\xbd\x14\x31O\x42T\x94\xce\xc7\x15\xfdojqm\xc4\x1e\xca\xaa\x9e\x95z\xdd\x95\xbe\xd7" "\xd7\x8f\x91\xeb\xc3\xdb\xeb\x98\xf2\xbf\xddox\n\xa7\xa9\xef\xbe\xd1\x7f\x9fX\x06gU\x41\"\x7f\x45\xcd\"I\xf1\x33\x38\x35S\x1e\xf8^" "\x99\xab\x98\xf2\x7f\xba\xa6\x62u\x01\x8c\x39\x32\xdb\x46+\xd9\xd9\xd4\x38\x82~\x41\x62\x12q#\xca\x64\x94w\x46\xbf\xf9n\x95\n\x0c\xe9\x11" "\x1f\x11\x42\xd1\xd3\xb5\x12\xd1&\xd2\xcaT\xf4\xfc\xa0\x44\x19\x86q\x1f\xa1\xe5\x61Qu\xab\xd4K\xd5\x0e\xde\xe2\x88QLR/\x63\xe3\xef" "q\xe1\x1e\xf6\x65\xec\xdf>\x63\x8cH\xd5\x97\x7f{\x34\xe5\xe6\x95\x93z\xd5\x1bk\xfe\x89\x89\xf5\x42\xf8\xb6\x8a\xa9\xe8\xaa\xe8\xd4~\x80i" "\x19\xa2\xbc\xcc\r\xfds\xea\x41\xa7{\x42\x8d\x92\x96\x1f\x41\x05\xfd\x07\xa7\xe6;o\x7fk\x8aJ\x61z\xb7\?\xf5\x1d\xe6\x87N\xbd\x8c\xbc" "t\\\xf9\xafM\xa7>WV\x06\xb3:&\xad]\xc7[\x89\?\xbcY\xbb\x90\xe3H\xbf\xf6wN\x83\xb1\x8e\xa8\t\x9f*\x44v\xf8=" "\xb1Z\x99%\x1b\xf1K\xe6\x12&\xab\xbf\x88\x0b\x65\xc9\x14+\xc5\x88\x9a$\x90\x9fZ.\xab\x8f\x61\xdfX~\xee\xfe\xa2_S\xf2\x9eT" "\xd6\x0e\x8c\xfao\\\xc8\xcf.\xa6\"\xdb\x87Iv`\x8a\x9f\x13\xe5w*\xa6\xf8\x03\xff\x9d\x8b\xff\xdd\xf8\xd3\x39\xdc\x87\xa2\xe7\xd7\xa4\x45" "\n\x8bX\xcc\xe4\x1e\x8a\xfa\x16\x33\xf5\xf8\xd8\xc2\xc8\xf9O\xe1'\xa6\xb0\x9b\xa7\xa9\xf0k\x13S\x91V\xa8H\xf1\x07\x98h\xec\x1f/\x63" "\xb9\x18\x94\xd5$\xa3\x89~\x00m\xe4\x13\xbd\xf5\xd4[\xebo\?\xdb|\x9d\xcf\xa7\?uvJv\xd4\xec\?\x44\x88h\x8f\xe8)'\xa2" "\xce\xca\x0c\xf3Km%<\x46\xb2\xc4G\xa8\xcd\x10\xed*\xef\?\xab~\xa6\x7f\x46=T\xfb\xddJ\x81X\x43\?\x36\x11\xcd\xb1\x9aV." "j\xfa\x65\xa8\xcd\xb0\x04\xd1\xa8\xa8\x61\xa0\x83x\x39\x19\xb9\x91 =\x95\x14\x39\xa5\xf3\x84(\x33\xbb\x88\xd2\x61\xe4\"mM+$\x35\xff" "\xe5\x1a\x44\xb4\xaf\xf9\xe2^\x89\xb8\xc9\x1b\xb9\x9f\x0c\xb9nM\xab\?\x35\xad\xab\x11gJ=/\x13\x82\x99x\x17_\x9c\x34\xf5k\xfa\xdd" "j\xe8\xb7!\xbe\x1d@\xfd\xfb@\xf6\xbb\xa6w\x96\xbd\x9b\x88\xe2\x13\x81\xf8\x80w\xc3\xc4j\xe2\xd3\xa7\xd1\xafL\x31\xa7\x95\x94\xde]\x63" "\x06\x11O\xa1\t\xb3\x06\x8f\x91\x44\x04\x06\xd3\xbf\x1aj\xd2\x11\xf5\xba\x89)\x8aR\x7f\xaa\xa2\xac\x19)\x8b\xb0\x90\x8a\xbd\x98\xd6\x88jp" "\x0f\xd0\x7f\xa1@\xe5\x88\x9bY\x43\xc9\xda\xe9\xfe\x8b'\xbb\x99\x10\xa5\x63\x42\x03\xfe\x85\x1b\xf8\xa8\x84\xbf\xf8\xcb*\xf8-\xf7\x7f\xd1\xa4\xa4" "\x1e\xee)\x35\x8b\x37@\xe2n\x14~-\xfc\xc9\r\x94\xf4\xb9JZ\xa7\x84\xa3]\x1e\xea-\xbe\xdf\xd2\xa7\x65\xfen\xa9z\x31\xd1\xa0n" "y\xd9+\x65\xc1\xbf;\x61\xf8\xe4O\xb5\xffQ\x33S\xd4\x02\xc0\xb8\x31\xab\x31\xf6\xd4\x31\xd3\xed\xf1\xdboi$n\xe9\x1b\xb7\xd0\x9bI" "\x44\xb7\x05Q\xb5\x0c#\x10\xa9\x31\x7f\xf5\x10\xa2N\xd8\xd2&\x43\x8b]\xe3}-\x30\xf4\x45\xaa\xbf\x08Sg\xf8\x9e\xeb\xb7\xb0T\x85\x38" ",\x83\x8b\x1b\x65\x1a\xbe\x93\xd8\xac\x81\x07\xbd\xacl\x9aG<\xe9\xab\x9e\xf5\x03\x9c\xf5\x06\x32(-\xc4\xe8\x31\x99\x17\xc9\x42Z>\xba\x9d" "Z\x9a\x9c\x98\x14\xf7\xc3}\xc2T\xf8\x93\xf7sY\xa8\xfb\x8e\x91{\x61\x91\x8c[\xfe\xe3\x14\x44\xc2k\xf9\x15\xd9\xeb\xe5\x82\x37\xf5\xaby" "\x10-\x41q\x0c\x1d\x33\x07Km\x32\x88\x92\x11(\x31\xb1\x98PLx[\x13\x33\xcc\xaa\x9f*Q\xd8\\\x8fL\rv\"\xd7\x83\x86[" "S\xb1\xe0\xa1&\xa2\x31\xf6\xe1\xa1\xc2\x9b[\xa8\xd9\x35)\xf7\xf7\xf3\xba\x31L]`\xae^\xe8\x83\x04\x9d\xb3)\xfe\xb9t\xd0:\x15;" "w\xfa\xfc;\xf7\x61\xfc=v\xe8\xe3\x98\xf2\xeau\x7f\x9f\x82Z#(\x35#jq;\xac=\xc5\x44ZR\xdf\xfa\xd6\xfa\xeb\xe0\n\xa1" "\x16$\xbe\x94g\x63\xec\x13\x04\xe9[/\x35\xf4{\x88\xca\x41\xe6\x99r\x31\xadV\xb3\xc2\xd6\x43\x64\x66y]\xaa\xf6\x14\xb5\xb0\xf6\xb2\xdf" "\xd2\xa6X\x0bk.\x89\xb2T\x44\xc8/q\xad\x0f\xd2\x9er\xcbO\x1f\x33\xe8$\x63\x1f\x88T\xec\x03\xc1#\x04\xd1\x1entP\x9e\x8c" "\x1c\x32)U\xe8\x33l\x05\xcb\x35}HJ\x9eP\xab\x19'\xda\x37\x44\x34\x38\xca#^\x90P(\r)\xf1\x34\x9a\xe7\xb6\xb4\xa2\xd5\xe2" "\xb9+\xc7\"\xcf\x44\xd2\xe4\x82U\x1f\x44t\xd0\xb4\xb4\x62\xda\n\xf3\x05\xf6\xdez@\xba\xd3\xac\xba\xa5Y\x34\xf3wgY.\xab\xe8\xb5" "\xe8\xd4\x8b#&\xa3\xb0\x89\xc0\x0f\xebg#\xa5\x39\xad\xec\x88\xba}\xfeo\xea\x66\x61\x8a*\x08\xb1s\xac\xd0\x39o\xca~\xd9\xccx\xad" "$V\xd1\xb2\xaa*\xbf\x41\xb4\x9cZh+\x99\x89\xa1\x46\x98\x85[l\xdb\tU\xaa\x39\x13\x15h\x31g\xee\x62p\xf4,\x66P^\x61" ">\xb2(\x0c\x9b\xc0\x9c-<\xf1\xb2\x1eS\xbf\x87\xc9\xbf\x07\x62\x97w_\xebm\xc8\xf9\x7f\xa5\t\x85\x96T+\xdc \xee\x61\x8e\x10s" "\xa3\x44\x86\x1d~#\x05\x87\?\xd7\x46m\x8a\xb4\x30\x9d\x88\xb8\xff\x30\x06\x97\x83\x8b*(\x86\x98\xb1l\x41;\x83Z\xdaLjI\x17\x91" "\xde\xe9\xacQ\x46\x33\?x\xee\x65\"\\\xb4\xa4ni;\xa9\x15%x\x64K\x87\x1dZ\xd1\x63\x96S\xc4\x1e_,z\xae(\x91\x42\xe0" "\x03\x97\x88\xd2\xbd\x15i\xf8i\xab\x8d\t\xef`l.\x94\xfa\x93\xe5\xd1\xe8~\xb2<\x62\xcf\x0e\x32\xb7m\xe3\xef\xb9i\xc5')\xb7\t" "\x16+\xe3Iy\x31z\x85\x85{\xa4\xed%\xdc\x16\x63\x8a\xcc \xabj\xb7\x30\xf2K\xde~\xc6U\xbe\x1aS\xee\x85\x0e\x37\x14\x10\x18n" "%\x85\xb1\x9a\x96\xe5P\x44Jg\x16\x63y\x8b\xab\xc6\xbb\x96\x8dmYo\x93\xf7\x1eON\xed\xef\xb4_\x9f\x95\x97J\xe9 \x83\xaa\x10" "\x95\x46U\xd1p\xf8\xa7\x8e\xff\xfc\xddQKjQ\xf7w\xda\xf1'\xea\xf2\x15\r\x97\xa6\xfc\xd7L\\\xb5\x1a\xf0\x16\x01\xb5L\x06\xe5Z" "L\xc5~I'\x62\xf7\x0b\xda\xc3\xb8Z\xdf\xc6\x9e:\xd8\xcc\xe3\xe7\x0e\xd9\x98\x8a\x12\xa5\xb8\xca\x14\xfeU\xee\x1dx\x82J\x99\xc7\x39\x8e" "\xd7l\xcb\xed\xed\x0c\xb5$\xdd\x19\xf6\x80\x8a\x0e\xe2\xb6\xc6\x0e\x19\xae@\xf4i\x63\x95\xb1\x33\xed\xe2\xfb}\xb4z\x87)s\xb0\x89'\xfd" "\x83\x8b\x64\xf1m\x1dt\x62\xfa\xed\x86\x33\xc7\xf8\x1a\xbc\x86X/\xcb\x03]\x95\xdd\xafx\x8f!U\xac\xf9\xc8\x0e\xc8\x1c\xb8%\x64\xa4J" "\xeb\xf8\xcf\xc4O\x8e\xf0\xaf~&\xea\xb6\xe3\xfd\x0c\xb5\xc2!\x07\n\x1f\xda;\"J\x1c\x0e\xc2\x9c\r\x9c\xf9\x33\x84\xd3\x42(q\x1f(" "\xa6/\xcb%`\xdaK\x90\xb9\xecj\x39\xce*,\xcc\xe9\xff\xa0^\n\x9a}\xcc_\xfa\x8f\xc3\xe8Np';\xfa\x0cS\x84\x37\x96\x63" "\x31/\x46^\xb2\x8d\xfe\x07Q\x1b\x44/oQ\xa2\n\x13\xe6\x63\xb1\xda\x46\x9fG\x98\xf6\xc4\x97k-q\xda\x18\xec&\xcat\x37!/" "\t\x43\x05\xb6\x8dy-L$\"\x8a\x0f\xb1\xa8\xeaW{\xca!o\xac\xf7\xa8G\xdf\xf4\xb7\x9f+#\xc7\xf0\xbb\x39\x14\xd5\x94~\xbet" "\xc8\xab\xad\x35\xff\x36\xdc'\x12\x65\x82x\xbfM\xe5\x99\xe6G\x30\xbb\x30\xd1\x11\xca\xfc\xddN\xb1#\x97(v\xd3\x87\xcf\xf8\xcf\x07\xe4\xdd" "\x86\xb2\x17gj\xc0\xb0\xa9\xb1\x8bM\xbd\x33\x99\x98\xddH\xe6}.H\xde\xfa]|\xfd\xa0\xfc\xaa|\x37\x06\xb2\x86\x91L\x8c\xc6\xb4\xb1" "O\x31\xb1\xfe\xa0\xd4'\x43\xc7z;\x18%\x94\x37\xe0[\x9b\x1d\xa6\xcb\x46O\xac\xf0\x65\xb4\x0f\x95\x19\xbc\xdc\xc1\x44\xcb\xa3\x1d\xacq\x03" ",<\xb4\x98\x1e&\xd3\xca\x9c\x11[,\x39\x35o\x62\x41\xa3(L\xb9\x82)\xb3\x9a\xc9L=\xc4\xff\x02=\xb1L\x8a\x15\xd8\xa2\x8b\xd4" "\xdd\x32|\xc0{h]\xb0\x8dQS\xf7g\x85\xa3Wx\xf3\xd1\x46\xd4M\x30\x88\x1a\xbf\x88\x7f\x63\x98\xac\xdc\x63\x90i\x8f\xf1\x9a\x30j" "\xd5\xae\x1d\x36\x92\x16\x01\xc2\xf6.( \x9a\x84]\xe4\xc9\xda\xcd\xda\x96\x65\x16w\x98\x11Kj\xb1T\xfe\xb8+o\x10\xbb\xb5\xa0g\xda" "\xb7\x8d\xd2y\x10\x1d\x8c\xed\xa8\x8b|HK\xc9\xf7\xdf\xc3\x30\xaaN\xa9%\x11\xa0\x34\x7f\xd7\xe4G\x94\x87y\x8f\x86\xfc\"\x03*U\xee" "\xa9\xca\x0c\x8f\x44\x83\x02\x66\x9d\r\x1e\x90\xad\t\x91\x81\x88\t\x0f)\x30%:\xc2\x94\xe8H\xa6\x34I\x99[Pj_\x03\xf5\x88\x46\x14" "\xd7`\xcc\x05(\x33\x15\x89R\x45\"\xda\x8d\x64*\xbb\x10>X\xc9\x94\xae\xe2\xc1\x03\x12\x34\xb1\x41\xb9]\x03\xbb\r\x93j\xce\x95g\xef" "\xb9\xe2\xb7\x8b\xa6\xe8\x1d\xfd\xef\x37(\xa9 \n\x11\xcf\xc5\xe4\x06\x8c\xd4\xfd\x07\x0f\x18\x61$\xe6\xee\x94\x63\xb0\x8c\xa7\xc3\x0c\xae\xc1\x03\xf2" "s\xe2\x06\xbfG\xf5j\xf0\x10\xf1\x18\xfc\x16\x83\x1fP\x33\xdd$\xd9\x14\xfa%\x9c\xfa\xfb\xa5\xbfz\xf8;\xd7\x06\x87S\xe5\xcc\x88\xdc\x8f" "L\x99\t\x34\x98\xe1\x41\x86\xe5\xa8\xff\x66\x94\x42\xf4%\xa6\x90\xd5\x91\x1a\xf2\xcb\x0c\x9f\xd9\xfd\xc4\x66\x12\x66\xef\xa0$J\x0c\x9f\xe9\x62\x46" ".(\x65\x87(Q\xbc\xf9\x8d\x34@\x45\x05\xfb\x9d\x99zo\xde~\xd8\xcf\x8f\xf1\xd0\xc3\xa1\x97>p\x7fp\x36\x03%\x19\x9c\xf0\xdf\xa3" "\xa4\x42i\x99\x0f\x87X\xd0L\x94\xae\x11!o\xa0'#\xbc\xa6\xec\xb7\xdc}z\xfd\x86Z\xcep\x18\x63x\xae\xd1\?(\xc9\x03\x88\x05" "\xdc\x9b\xda(\xd4\x10\xb1\xe7\x0b\x17\xef\xc2\xe8\xe5\x86>\x0cz\x03HQL\xd8n\xf0\xa1I\xe1\x8b\x11/\x46\xd4\x65\xc9\x1c\x95\x8c\x61\xe1" "!\x94\xde\xca!\xc5\xc3\x1a\xa7\x1bI\xc4\xc3\xcf\xdf\x03\xc7\xe1\xe1\x14q\x9f\x98\xdf\x83w/\xa0\xa4\x05\xe2\x43Vyo\xe4\x8e\xe5\xf2\x1c" "\xa3\x66r\xc0o\x14\x10\xf9\x44\x05/g\x7f:\x44\xeb@\x0e \xf6\x93)S\xd4\x85\x94-#\x89\x8a\xa2\x1f\x04O\x33U=\xb0Y\xa2" "\xa3\xee/\xa4\x84&J\x81\x43\xdc\xdf(\xab\xff<\x1c\xfa\xbb\x89\xd2\t!\x94\xad\x8f\xfaP\x92\xb2\x98\xf8\x15<\xd3\x33\xf1|pX\x44" "\x1c\xe2]\x90\xb9\x11Wz~]\r\xefv\xc8\x9c\x87\xea\xb1\x91X\xfe\xe4\xd4+\t\x88T/\x0fJ\xa2\x1bN\x91\xeb\x11\xa5\xd0&\xca" "p\n\x13\x9f;*\xe3\x33k\xc8O\xa3\xc1\x16\x1c\xa5\x8d\x18\x89\x1b\xce\x30\xf5\x88\x92Wz\x41\x8f\xe1\xcb`\xa1(.\xcfMI\x35\x8c" "(\xf5-\xa2\x0c\xc9\x10%/%J\x63\x9b\x1e\x37\xf1n\xf4\x1eZ\xe8#\x16\xc5{\x44\xc8\xbe&\xa4$\x0b\xe3W+\xc7\x7f\x83\x17\x65" "z\xcf\x8d\xb0xr\xea\xe5\xddL\xff\xaa\xe9\xef\x1f\x9c\xaa\xaf\xc2\xe4\xd2)}\x32\x32y\xa3\x93\xbf\x9fI\x99\xa6W\x93]\t\x88\xab\xb5" "\x7f\xe8\xa2\x32Oj\xddWN\xc0\xaf\x84\x7fu\x65W\x08\x12\x0b\x7fS\r\xaf\xaf\xa1\xa4\x13\x61\x38\xd3h)\xbb\xe9\xe9\x83k\x8e\x30\x83" "\x87}\xa2l\n*\xe4\xcf*\x1dM\xa4.\x19\r\xba\x99\x46_\xe6\xef\xa9\x81\xf2G\x14\xaa#\x62\x46\xe3\x33\xb2WR\xe9\x0c\xafmO" "\xe7\xa0\x1a+\x64\x9dP\x36\xb0\xa1\xaam\x44mWL\x8d\xd3\x33\xa9\x02\xfd`\xa3\x42\xa8J\x15\x0b-L\xa1\x12'\x8a\xda\xde\xde\x12\xef" "\x85\xf6\x9c\xd0\xbf}\xd6x\x37\x8b\xb6\x1d\x7f\xda\xd3\xdc\x8b\xd4\xf8O\xcd\x7f\xf7S\xae\x8a\x89\xdb\x87\xe1\xdc\xcbJ.\x36GG\xc5p\x41" "\xe5\xb3P\xa3\xd6\xc2\x1blP\xee\x91i\x94\x31\x82\xe1\x02\x0bk\x88\xd2\x0b\x41\x94\xb5G\xc3\x05J\xa8\xa1:R'\xca\x0cs\xa2\x94\xf8" "\x44i\xbf\x0f\x17p\xd2M\xe4=\xf7\x1e\x43qO\x0cU\xc9\xb8\xdf\xf0&P\xc9\?%\xd9\xc5\xf2W:\x14\x98{\xb4\xe4(\x37\xe4\x36" "\x91\xb4-\xe9\xf0\x61\x18^%\xfc\xbc|\xcb%V\x14\x11\x1f\xf0Gp\x66$\xc4\x94~\x98\x32OIL\x7f\xff\xed\x7f\xafL\xa1\xfc\x85" "y\xfb\x8dI\x94P\xe5/\x8cX\x88\no\x92\xa1\x8c\xbc\xc6\x14<_\xd3\x81j\xd3\xa8\xa9{\x89\x85\\\x42q\xe5\xaa\x8f\xb6\xc0\x0f\x31" "\xf2+\xe4\xc4\xf5\xf3\x81J\xbf\x1c\xa0\xd6T\xfc\xc0\x32\xe7\xbe\x00\xd9\xf6\x05(\x1d\t\x83\xc6\x31\x18\x15\x61\xbe%\x34\x7f]\xc2\xc9\x88\xd0" "\xbb\xbc\xf9\xc9\xbe)\x7f\xf5\xe6\xcb\x46\x32\xa2\xa2\x46\x03\xbd\rP\x36\x06\xc9J\x12\xee\x32L\xbe\x82\xd7W \x92\xee\x12\x8b{\x89\xe2\x30" "\x93\xf8\x8d\x90@\x65\x82\x88\x94\xb0\x94vR\xfc\xf5\xf8\xc0k\x05\xa3\xfe\xa2(s\x82\xb7\xe2\x98\xe2\xc6R\xee\x8a\x92\x38\xfc\x1c\xd1\x19T" "\x05\x98\xbc\xc5u\x17_X\x0b\xcc\x95&\"&z\xd7`\"_\x62S\xa3\xe9\xca\xabH\x64\xd0M\xc2\x89\xd2\xe0\x1a\xae\xd0\x7f\x32\xa4\\" "m\x65\xb4\?\xd1\xc2\x61\x83\x86\xc4\xf0\x0b~Q\x88\xb8\xc4\x97\x96\xd0_\xe1\\\x9e\xe5\x0b\x83\xb9\x44|\x00\xf5\xb5\x38\xfc\xc6\xfa\xd2\xa1\xfa" "\x32$\xca\xf0.Q\x1c\x84\x0f\xbf\xfd\xc4\x33\x88\x14\xc7t\x0b\xdc\x44\xb9\x19\t\xa4V\xf8[\xadL\x31\xd1\x7f(\xa6>\xb9\x98\x8bk\xaf" "\x9c\x31\xe5<\r\x93\x42j\xfb\xc6\xcc\xf5\xe1O\xf4$\x7f\xbe\x8d\x86\x12\xbc{-\x65\x98Zni\xc7\xc4\x90R w\x64\x0f\x8f\xbf;" "\xc9*\x8e\xf0\xc9Gl\xe5\x9d\x89\xbf>\x62\x82\xe1\xf0\xa8\xb9\xff\x11kj\x84\xf6S\xad\xbc\x1c\xa3\xa7:\x88\xab\x9f\x30\x65rx\x8a\x64" "\x42!'}y\x8a\x0b&\x85\x13\x65\x91\x13Q\x86^(\x61\xb4\x12\xa0\xb8\xa7\x12\xda\x9f\x88\x99\x87\xef\x15\xf6\x18K\xb6\xcc\xd6\xa4\x33\xb3" "\x82\xd1o=\x63\xe2\x95(\xe7\xc3N\x94\xf3{!\xe9O\x18\xe4\x8f\xd2\xaf\xd3\x87\x92YP\x44\xd9m\x84(\xa3\x95\xc3\x0b%\x1e\xfd\x14" "\x97\xf0~l\x8c]\x8eT\x94(\x44\x99{\xa8\x17\xaa\xc6\xb7\xb0" "\xc4GY\x0c:\x12\xa5\xed\x30\xca\xc2\xf9\xc8(\x0bgH\xa3[^\xef*\xb3@G\xb7(\xeeGyt\xa1\x8d\xf2X\x46!\x0c\xeb\xf2" "\xd7y\?\xd5t\xc1\x32\xca\x07\x85\x0e{\xaf\x99\xb7\xa0\x64\x64k\x94G\x0bX\xf8{\xd2.pR\xf3\x16\x0f\xd0\xb6\x92\xa2\xf4\xbb\x16\xb0" "g\xd0\xa8@\xff\x98\x45\xf8\x0b\x19=\"\x11\x8f\x1e\xb1Zm\xf4\xa4\xdf\xa2\x8c\xfe\x0f\xac\xcb\x19={\xd5'\x61\xb0n+\xe5\xdd*\xdc" "\xb5\xba\x38`\xa4\x90U\xcdm\x17m\ns\?\x9d\x92\xc1 \xa7$\x62\x8a\xf2\x06/>\xc2\xb4\x82\x05|\xc4\x43\xcd\x88\x85\x64l~+" "\x0f\xa0\xac\xb6'\x8a\x0f\xdfQ\xc5\x13g\xf9\x42\xba\n\x06\x97I\xc9\n}!V\x00\x90\x99\xad\x1b\xdd\x32PQ\xc8q\xc8\xbc\xd5\x43\xb7" "m\xf0\x1e\x0f\x87\x99\xe9\xcc\xa1r\x01\xcaZ{!\xdd\x19#\x64\xa4*\x37\xfc\x41\x10\xfdL\x35\xf4/\x1azt\xa0\xa4\xd8n\x43G\xa4" "\x64\xa9\x9d\x10\xde\x87\xcd\xf4\xf3\xaf\xe2\xdc\x39~,\x38\x8e\xb1z\x8f\x0f\xf4\xc1\x19\xbe\x94\x37\xbf\x03\x17\x65\xa3W\?\xb1\x43\xda\xc1\x1bJ" "u\x1c\x93\xcd\xc9\xc4\x0cr;\xaa\x65\xfd\x1d\x38\x1b\xd9\xd9\xb3\xf8\x43\x85\xdaU\xb0Y\xbb(/\xb5\xf4\xbf\xee\x9d*VQ\xb6@\rv" "h\x8a\x8a\xa2\xec&\xc8g\x9d\xaao\xbd\xc2G\\Y\x00\x89\xc2\xa4\x1a\xa7\x8a\x9b\xb8z.\xc5\x14\\M\x9b\xc2\xa8\x8fS\x97VL\x45" "I\xf7,\xe1\x66\x1e]\xbd\x9a\xc2\x02\x1a\x32\x97\xfa\xea\xcb,\x37&\xa5K\x94\xd5-(\xeb\x61\x84\xbf\x87>\x66\xb6\x89\xa2\x0f*\xfb\xef" "\xd6\xec\x80\x9f{\x93\xd1\xb0\xbf\x03\xb1\xd3\xe2s\x8f\xa9\x41\xb0\xd7\xc7\x17\xe7\xe1\x44Y{(\xf4R\xdf^z%\xcaO|\x1bySh" "\x8d\xa2\xd8\x46\x41\xe8\x95n}\x99*\x43J\xd6\x98\x11\xef\xf1\x84~\xe5\x14\x0b@\xaa\x98x\x8b\x04\xccZ\xc7\x08\x0f\x8f\x64\xbe\xe0\xa3\xc0" "\xb3\x0c\xb1\xa5\xba\xa5\xf7\xef\xe3)\xe1\xd6P\x88}\xed\xfd|=L\xba\x63\xfe\xfa=|K\xb3[\xc4\xea\x46\x8f!\x32\xa1\xea=\xaa\x04" "\xb7x\x1at\x91\x12G\x87\xdf\x63\x15\xfe\xbb\x46\xea\xd3xT\t\x93\xf8\x15V\x97\t\x7f\x8f\xaf\xd8\x82\xce\x14\xbc\x0e\x39\xb5@\x04\x0b\xb3" "H\x94h-\x10G\t#\xe5 p\x18!\xca\xad\x05\x83\x32\x37\x1e\xa2\xb0\xe5\x34\x14r\xd8\n\xd5\x10\xbd\x63\x12[\x99\x92\xda\x7f\xd0\xdf" "\x63\x90\x9a\xd4i\xa4\xc4\x13\x61:\xa4\x10\xab\xe4\xd9\xc4\xebGI\xbc\x10\xd6\xa6\x32O\x46/\xf7\x66\xf9\x03\xab\xfa)zI\xb9\xf9\x10r" "\xec_\xc5\xb5\xe1\xaf\xfbp\xb3\xf5kO\xb1\x94\x8d\x33t\xf8\xdf\x63\xce\xb9\x07\xa9\x0c^\x14\xdb\x02\x11Q\xa8U\x30\xcaJ|\x45\x90Y" "\xe2\xc0\xfaZ\xa6\xbeK/\r\x0e\xf5z\xc7N,\x9a\x91\xe2-\xb5\xfb\x12\x0c/\xbc@k\xaf\xa6\xcc\xc7#R\xfc\x96V\xcd\xe8\xc5K" "-\xc0L\x07\x14\x1f\xdd#\x9e\x1a\x04\xb7\xbal*\x65\xe6\x0cQ\xc6\xb2\x84\\\xbf\x38\xea\xd1\xca\x0f\xfd\x83)M\x08\x62\xd3Q\x33\xe3\x17" "o\x98\xd5J\xc4\x8b\xf7\x9e\xa1\xd2\x0e;\x42\x92\xe2\t\x0e\xfa(\xd2\xb3G\\.\x8d\xee\xcf\x65I\"\xf1G\x7f\xb2M\x80RO\x1c\xbd" "\xa0N-\xc4V\x99\x30\xa5\xf9,&\xfao\xc8\x14\xe7\x8f\x44\xe9o%\xca.\xa0L\xed\xcc\x61\xf3\xc8\xd3\x61\xf3\xaa\xbaI\x65\x16\x1c\xe0" "-\xfc\xd1\x9br\xfa\xbb=i\xd5\xe5O\xf1\x96\xdc]\xbd\xfb[\xdb\x88\x9e>\x31\xd1\x93@\xe6\xbb\x9e\x1d\xeb\x1b\x8c\x8f\xe0\xe4\n\x44I" "\xc2\x8c}t\xad\xd1\x30\xfd\xde\xbb\x99\xc1\x13\x02\x8cj\xcd\xfe\xea\xc1\xff\xd2\xdf\xac\xd6\xca\x9d\xd1\xbd\xf5\xba\xfbg\xf6\x94'p\xb3\x32Z" " \xf8_O\xe0w\x96\x03\x30S\x8c)\xbf\xd0\x8e\xab\xd9\x63L\x61\r*\xab\x11\x9f\xdb\x8eU\xe9\r\xb6\x63:\x1a\x9e\xe6\xaa\xe6<\xcc" "T\xc9\xfc%!\x39\xb6\x1fPR\xa3\x96\x9d\x1d\xf8\xf7\xb4\x45\x0f\x36\x7f\x86\x9c%\xc9\x16=\x16\xed\xe9\x30_\xf1\x8ej>S\xb4\x0bq" "lw\xe1\xf5\xc9\x94\x95\x8a\x33\n\x39\xc6#Y\?\xc3\x7f\xaf\xce\xb3\x45\x98\x43Z\xc0" "\x84\"\xe1\xef\xb9\x8e^\x00V\xb8G\xa8y!\xba\x05\x89\x9a\x33\xf0\x18\x9c\xe6U\xbc\x86T\x1f\x8e\xcd\xf3\xbd\xb6-X\x45\xe9\xba\x9a\x03" "%\x92TX\xcc(\xef\x94\r\xa3\x65\xb5\xa1\xc6\x33\xec\xf7\x43|l\x44)\x33WJ\x64@\xe1sV\x99\x33\xbagx\xceY\x06\x41\x66" "\x98\xdf\xc1}\x05\xa9\xcaM\x88\n\x0b\x99z'\xcd\xbb\xd1YM\\v\xfdm\xd7\xf2\x0cR\xec\x8b\xf2\x0b\xb9-\x15\xb6\xde\xac\x89N\x45" "V\x33V\x13\x44\xbd\xf0\xdc\x37\xfa\x03\xa4~\xaa\x08Z\x80Zn\x17\x89g.\x62:\xa3\xc4]\xa3\xf2\x15g\r\x1a\xecQuo\x0c\x0e" "\xfd\xa8\x86\xbbG/\x37\x46\x0bn\xf4\xa5\x12\x87\x43\xfasx\x90`\xf5\x65\x94\xc9\x15\xd4\x44\xa2\xd2\xf7x\xb2z\xc2\xf8\x7f" "\xae\x0f\xe1\xcf\x1c\x1e\x30\xff=\xc0\xde$\xa4\xed'\x87\xbd\xc5\xd1L\xa4=\x36\xb5S\x96\xcd[#\xbb^\x90\\H\xe6\xc4{\x89\x46\xb8" "\xbbQU\xa3s\xf4\xbf\xaaiT\xee\xc2\xdc\xbf\"\x96\x90yX\xf0:\xb7\xcb\x01\xea\x38G\x17\x0f\x9b\x1b\xf0\x94\x06/\xb7\xbf\x07\xbc\x04" "\xcap\x62*o\xa4G\xf7\x1e\x1e\x90\xab\xcb\x01\x34\x41\xcd\xe4\xd3\xd9\xaa\x37K\x38_\x31v\xe6\xffr\xc0{Zy\xfaN\xf1\xc3~\xf9" "\xe2\xaf\x0e\xa8x\xfdO\xe7\x83N\x39\x18\x7f#\x43\xfc\xf7\x0c\xda\x98v\xec\x7f|\x98\xca\x9c\x1e\xd3\x7f\x99\xf9\x8dj\xec\xcd\xd8]\xeb{" "\x02M\x39\x1c\x90![\x98\xab\x44\xcc\xe4y\xb1\xad\x89\x1d\x08>\xdd_\x84\xc3\x0bO\x94\x94\x16\x11\x1fh`)\x8d\x99\xf0\xc7\xc8\xeaS" "\x39\xc5\xcat\x33\xdd\x46\x8e|`\x61\xf4\xda{T(\x45!\xfa\xb1\xb9\x36R%\x1a\xdd`\xac\xbe\xd1\xe9i&\xb5\x1d\xc5\xff\xd2I\x8f" "!\x32\x62\x18\x9cY\x35\xc6\xbfQV\xf7\xe1\x33\x93=y|\xfd\xf8\x32\x65;v,\x38\x0fP\x14\xcb\x31zL\x35\x17\xbc\xfe\xf6\xd6~" "\xacG\x65\xb0Q\xe8\xc9\xc0'\xefw\xa9\x7f\x9b\xbf\x0eru\x7f\xbf\x32\x85\x1c\x93M\xfd\x61^\xafq\xb7\x03\x0b\xd5(\xf9\x0e\xf3^#" "\x62\x31\x8f}\xd9\xd9\xecGO\tg.\x8fj\xce-\x9d\xf1,\xabu/\x38UM\x05\xa3\"j\xe0\xac\xf4\x03\xc9\xb0\xa2\x10\x9bG\x8a" "\x89\x42\x9e\xcc\xa7\xac\x91*\x8e\xd4\xf8\xa3\x66=\x19Qr\x64\x87\xc3\x8b\xc6\x8f\xda\x46\xf9\x8d\x61\x34\x32_\xbe\xb9O\xc0\x1e\xc6\xd4\xef\xe9" "\x82\x11P:\xf6\xaa=\xa3\x64Z\xc0\x35\xf4\x13t[^\xa1g\x66\x38\xdf\xc2\xbf\x31\xa9\xfe\xcc\xc8\xfbT\x1c\xf5\xe7\xd2\x81)t\xcf<" "\x18\xbb{\x0f&\x46\x17\xb6\x62\x46\xcf\x19S\xf1o#\x1bN\x32\x97\x14\x8a\x96\xf7\xa0\x8bK\xe8\xd7\xda\x98&(\nk)\xc9\x1c~\x1b" "Q.\x90\xf9\xae\xe1\x63o\x39\xfb\xc6\x94z\x32\x17\x65\xf8\x80\x34\xd3\xf2/(\x34\x12U\xf5\xdd\x13\xd1\x17L\xe5\xbd\xe1\x90\xd7\x0b\x66\xc7" "\xee\x18\x85\xf9\xe0#\xbc\x64\xb0\xe7\x18\x8eu\xba\x41\x35\x85\x89M\x38\xb0\x7f\xa2\x94\xff\xa7~\x62\xa6\xfb\x0e\\\x1b\xbf\x0f\xbf\xdc\xdd\x62\x7f" "\x11\x1c\x36\x9c<*\xf3xjX\x94\xc3\x87\xf7\xd8\x8f\xa0\xe2I\x8c\x8e-\xdc\xad\xd0!+\x66t\xa8\xa9y\xf4s\x35\xefg\xe3T>" "\x17\x33]\x85\xd4\x0e\x44\xfb\x83*\xbb\xd4\x99>)\x9c\x12\x42\xdd\xed\x9d\xe9\xaez\xf6\x9b\xee\xe7\xa8\x43\x98\xe9m\xb3t\x03\x8c\xbe\xe3\xd8" "\xdf\xa5\x82\xf1%\\\xa6\xc3\xd4\x83\x1d\xc0\x96\xab\x30\xcf\xfa\x91\x96\t#jNlj\xce\xf5\x33\xf4[\xaf\x98\x99Kj\xab\x11w\xa7\xb7" "\xdf\?\xa1\xdd\xc4\xa6&\xd1\xbd\xc6\xe2\x63\xe2\?\x12\xe5\xf9GR\xe0<\xa6\xe2\x01\x41\x07\x1a\xce\xc4\xf2G\x32/x\x46\?\x31\xa6\x8c\xcf" "\xfe\x98\x95\xfe\x99\x9f-\x1a-M\xfa\xd9z,\xd5:\x15K\xb5\x98\x07G\xcc\xdd\x1b\xad\x30\x81iq\x97\xc2\x95\xb7\x62=U\xb1\xab," "\x1d\xd0\xa0\xe5p\x95\x85\x8a\x30\x0b\xaf\xce\xac\\\xfd\x1e\xae\x9c\xd2\xc2\x00\xa6\xbb*G\x8aW\xf8\x63\x82:^\xa1\x95'\xca\x02\x1a&\xd5" "\x16\xe0\xb2\xd6\x0e\xfc\x87\xc2|m\x39\x10HU\x1f\xe6\x01\x81\x84}\xa6\x89\xc5\x07^\xdf\xa9\x85\xa8_>S\xd6l\xc1\xcc\xe5i:\xe5" "\xcc\xca\x15\x1c\x33\x41\xb5\x92\xee\x8f\xcc\x1d\x95\x98\xf4\x1b\n%Ji\xee\xc7\xd5\x8e\x37h\xf0\x8a\xe1\xadN`\xe1\x63\x43\x1e\x9c)\"\xa5" "p\x41\x9eS\xb3Q\xf0\x1e\xea\xce\xd4\xdc\xc5o\xe8\x17j\xcc\x8d\xe8\xc0%\xb3Y\x32Z\xfa\xc0\x04\x12\xa1\x15\x82\x30-#\x12\xe5L\xb7" "\xc1\xac(\xecm'\x66,\x16\x92\ny\x64\xea\xf5_\x15\xbb\n\x0e\xb8\xa0\xa4\x03\x66j=\x03\x9d\x83\xc4\xce\xf1w{r\x1f\xa7s\xe4" "\xfd\x61:\xa8\x32\xf8\xdd\xb1\xf2\xdb\x88\xed\xb6\xc9\xec\xeb\xbd\xdf\xda\xfeH\x0f\xbd\xa1\x64\xf1\xa7\x19\x17M\xa7\xfa\xea\x8b\x62P,\x04\xc5N" "\xb8\x41\xdd\xce\xdf\xe0\x45\xb0\xc4\x9e\x98\x46\x9d\x94\x8a\xedp\xd8\x0e\xfb\x88Z\xc1}\xde\xeb\xa0\x0e\x89\xc5+\xc4\xd2\x8b%/\xab\xe9\x04\xcf" "\x43lHL\xe6+\x12q\x30\xac\x18\xb9\xbe\xa6_\xcdjK\xc1\x07\xd2\x15\xfat\x88\xab\x89\x11S\xef\xc8\\\xeb\xf3\xecG\xee\xda\xfbu" "\x34\x46\x35+\x38\x14\x38\x9f\xfe\x0b\x0f\x8cy\x33\x11\xef\x82\xe3\xbb\xd5\xaa\xe8W\xc2\xf0j\xfd\xbbm\xa0\xc1\x01\xa5\x85R\xa8\x35t\x1e\xb2" "\xdb\"\x03\x86\x0bO\xa2\xd6\x0e\xb0\x11\x39\x31\x85\x07\xe7\xdd\x0f\xceg\x35\x37\xe1\xa5\x01\x33\xdb\x62\x97O\t=\x91\xc3W\no\xf1\xcc\x61" "\xbeh\r\x07\x32]\x07\x15\xab\xe5\xef\x0e\xa1\xc2\xed\xd3\xc1\x31\x66Zl\x0e\x0b}\xf0\x1e\x9f\x9cJ\x9fXM\xc1)x\xfa\xa4\x03Oz" "\xbd\x32\xe2#\x16\xcf\x10\xeb\x65L\x31%\xb3\x91\x34\xc2\xcb(\x99M\x44u\xf8\x9c\x65\xa2\x46\x86-\xec\x85^\t\xd9O\x38\xd0\xbf\x1et" "-M\x86\x9b\xb1R_@\xf3\x1f\xa2\x65\x0c\x64\x62\xe6;\xcc\xba\xbe\x8b\x16\xc2\xc4XqJ\n\xfe\xe9\xc4\xc4\xcar\x32\xbfSJ\xe4Z" "\xf0_+\xc4\xd0\x9f\x98\xfe\xea\x62\xed\x1cR\x41\xee\xc5=\xa3\xd6p\x88\xd8\x05^\xccX%\x87\x94\xfb\xc4\x64\xb6w\xce\xb4o\x41\x66\xaf" "\x62\xa6\xd5J\xc3\x9d\x86\xf1i\x64\xb4\x8a\x0c\xa6\xc5\x08\x31&\xc6\xe6\xd9H\x85\x03\xe7\x9dZ\x44\xc4\x0fX\xcc\xa6\xa6\x87\xc5$\x0c\x1d\x13" "\xb5\xd0#\xfeGM\xde\x1d\x8b%\x0e:\x66m\x0f\x98\x16MX\x15^-\xaf`\x35\x44v\x81\x89\x46\x42\xfbt\xd6\xee!\x86\x9a\xfe\x61" "\xfak\xfd\x9br\xca*\x8e\xd1\x33\xde\x1d\x9d\xe2\xc4\x17\xe4!X\xe5/\xb4\x9c\x92L\x8b\x12\x64Z\x1e\x89\x99@\xcc\xb1\x31\xec\xef\xb0y" "<+\xbdM\xab`tOI\xa6\x16Vlj\x18G-\xbd\xac\xf9\xf1%\xd3V\x81\x92\x39\xaa\x18\xfd\xda\xdf\x1a\xf3\xbf\xe1+`\xac\x9b\x0c\x13\x65\xb9\xfe\xf8\xdb\xbf\xfd\x02\xd1\x14\xf8\x46\x87" "\xf8\xf8[\xa3\xbbN\x8a\x63\x96\x94\x92\x06\x7f\xf8\xcd\x8b\xb7\xa1L\xb6\x1b\xf3\xf6\xae<\x95\xf8U\x32\xe2\x1f\x8d^L\xfa\xf8\xa1\xb8\xd4\x80" "\xfa\xa8\xe9[l\xf5\x37;\x38\xb6t%\xc6\x8e\xf2u\xbf\x31\xc1\xfa\xe7\xb1n/:\xde\x87/\xf2\xd4\x87\xdf\xbd\xfc\xd5\x01\xd3\x62\x88\xe8" "I\x39xwUwJ\xfcI\n)+\xc1\xae\xe8\xa2\xbc\xc1\x9b\xe6-\x7f\n\xf3\xf8\xe4@P\xafko\xe2\x01\xab\xf5\xc6\xba\x9d\x9eP" "\xfb\xa6\x0e\xda\x1e\xd5y\x94\x44\x64\x84\xcc\xf8\xe5\x06oZ\xb2\x1f\xbcY\x16\\J\xf6|\xd0\x16\xb3\xee\xafG\x44\xb3\xf5\xa0]\x0e\x07L" "\xbb%\xca\x06\x0e\x42\x37\xef\x61|\xb0\xd7\xc1\xccR!\x07\x04\xfa\x1b\x0f\xe1\xcf\x16\xa4JV\xf6[\x33\xce\x03\xf6\x65!\xf6\x1a\xa0\x0c\xb4" "\xc1t\xfd\x0ej:\xa7\xc6\xe3#\xa6\xb8\x8d\xadw\xee\x08W\xbc\xe3#\xa6\x8e\x8f\x8fZT\x1e\xb5\x45\xc0\xd4\xf2\x85M\xcd\xbb\xd8\xc4\xd6" "}\x64\xa2\xa7\xe3\x88\x85X\xcc.\x88\xf2\xe6\xa4\x31\x82\xe9\x15\x12\x18v\x36\x15\x8d\xcf\xa6\xfc\x44\xde\xef\x64\xffU\xe1\x32\x1d;\x10S\xd1" "SJ\xbb\x7fO\x91\x8c:\x8f\xcf\xf0\xfa\x41\xdc\xdf+%\x62\x9f=\xd4\x1d\xcf\xd8\x41\x85\x88Z\xfb\xd9\xdb\xa6\x35\xd3\x39{gy\xe2\xb3" "\xe6\xd1g\x1f\x8d\xd1\x33\xf6\xbe\x18\x9f\xedwZt\xe8\\y\xa1~\x0f\x32\x0f\xde\x62\xa9\x65\xf7\x39<\?\x83HTg\xca\xaa\xc3\x94{" "\"\xaa\xbf\x18\x31y\x92\xcd\xb5\xf2\xdb\xa8\x1f\x9dM\r\x32\x31\x65\xed\x16\xcc\xad]\xe6\xdbm\x1c\"\n+\xad\xc4\xb4\xc7\x93m)\x97\xce" "\x94m\x33\xc8\xdc\r\xfc,\x15Y/\xa6\xa8\t\xaf\xf9\x8a)q\x02\x62\n\x8ekH\xc9\x02\xff\xf1\x05\x9b\xe3\x10\x65\xb5\xf5\xf8\x02\xf7\xa2" "\x42\x8dm\x17L\x94\x1c_\x34\xd8/Z\x81\xb8 RL\xae\xe0\xc3\x66\x92\xf0\xf2\x19#\xd5\x9c\x30\x61\x89\x94\xecs\x39IP%J\x88" "\x91\xbbI\x12\x63\xc3h\xff\x90\x92/\x35I\xa2\x62\x33I\xa2\x93\x9a\x38\x18\xd3\xff\x30\x65\xaa\xef$\xe9gq\x01t\x45L\x92\xf8\xfe\xc4" "O\x1c\xc7\xf7\"J=\x91\xd8U~\xe1\x92\xd8\xf9\x86H\x97||\xa3\x7f\xacn\xf4\x01n<\x99Q-\xa4L\x83\xd7\x37\?\x9cP\x18" "\xc9\x31\xde\xdeP\xe6\xb1O\xd4=\x1d\x31\xf5\xe5]t\x8bgQ\xdc\xce\x36\x35\xec\x19\xfd\x9f\x8f\xdf\xd3kL\xc1y\x0f\xa9\xf7\xcc\xef\xfe" "\x0e\xb5\xe1\x89\x8e\x31Nn\xfc\x14\xfe\x12S\xec\x88\xef\x13P\x7f\x07\xbf\xd8\x44Y[H\xdc\x7f\t\xf5\xedo\xc2\x9d\x04\xc6\r&L\x0b" "\x7f\x8fG\x8c\xd4OR\xa8\xfbO\xd2\x1a\x84i\xd4/\x85\x18(\x81)\xad\x41\x31\x83\xe1P\x9f,\xed\xf2\x17\x36/n\x88\x7f\x92\xd1O" "\xc8\xf4\x1e>\xe1zm\x92\xc1\xf4\x1a\xa2\xec|\x30\xc9\xf8W\xcf\xca\tx\xa3Z\x9a\x07\xc4\xaf\x89\xd1\xbf\xbe\xf5\xbf\xeb\xa2\xe0~\x88(" "KJ'\x19\xbdz\x16\x35S\xa2\x8csL\xb2^\xe2\xdb\xaf\x64\xd0_\x42\xaa^\xa7\x13^j*\xca\xcfg\xfcV\x13S\xfdHU\x94" "-y\xfal\x98\x1c\x1b\x83\xcd\x1c\x99\xb8S\xdb\xaf\xb8\x12\xa7\xb2\xa4\x64`v\x92\x8dj\x12\xc1n\xbd\xb7O\x1e\xf8\xdd-\xa1\x96 \xb6" "\x17\x9c\xdc\x46\x87\x9b \xd7\x0cr\x12y\xf2\xbel$\x32\xc9\x63u\x10\x11\xefu\x87QV\xe6\x14\xdc\xad\xd1\x8b@\xe6q \x44\xa9," "\x44\xf3@L\xcc\x83\x10\x33J\x15\xa2\xe7\x06\xd6\xf3\xc4\x0e\xfc\xfd\x62\r\xde\xa7\x41\x99\xecJ\xec=\x82Hzwp\xb0\x45\x94\x06\xac\x10" "\x13\x1b\xd9\x94\xa8\x7f\x87\x15\xe5\xc4,\x9e\x1e;\x1c\t\xfd\xdb!\x36\x16\x64u\x06\xa5\xd8$\x8a'K\xa2\x38\xfe\x14\xb2wiY\?\x43" "J\x9cX\x12;\xb8-V\xeeL\xee\x30\xf1Z\x88\x06\x86\x98\x18\xf4$\xb3\x91\x07\x87zJ\xb6\x9a#\xee\xf1\xa4\x9a,\xee\xb0\xd4\x8a\x38" "\xc3\xdd\x90\x8d\n\x35\xfa\xb2\x19t\xec\xe8\x06\xdc\xe0=\xe1\x1c\x90x\x31J\x1c\xba\x8b\x1e[\xf6L\x64\xa2\x08\"s\"!_\xd4\xb8T" "\xd4\xc4\xf6\x10M\x86\x46\x9ez*\x65\x36)\xd9\xdf\x64R\xd2\x18\xc0\xd4\?(\xfd\xeej\xa0,\x10\x98\x94P\xf3\x9a\x94P\xd3\x12\x62\xac" "WL\xf4_\x90\xd9\x30\xbe\x83\xe2\xaaT\xa8_\xa3\x84\x35>\x42\x8c\x1e\x88\xc9s\xbe\x46IS\xc8\xed\x61\x9a\xfb]R\xe2\x84\x8a\x88\x18" "X\x42\x1b\x61R\x42\x63\x98\x88\xd4\\\xa2\xb6\x85=\xa5\?\xc4\x9frg\xed[\n\x0e\xf3H!\x01\x30\xedu\x83\xf2\xc2[M\x61\"o" "/\x05GI\xa4%{p\xde%\xbcr\xe3u\x9e\xa1^\xee\x8dT\xa7\xc5\"\x45R\x32.%\xb4O\x82\x42\x7fR\xb2;\xb9v\xb7\x98" "~\xee\x1c;\x61\xb7r]\x89ln\x8c\xf4\x06N\xa1@+Q\xf9j\xe4\x39\x12\xb9OtX\xd1\x01q\xbd\?y\xd4\x8bW\x34\x38\xab" "\xbf;jsW\xbd\x42\x05\n\x0fR\xfd=u\xc0\xb3|\xa0*\x1a\r\xc4\"~\x07\x07\xe5\x44\xd9\xa3\x93(\xbeq\x88(\x1e\xab\x9aM" "W\x31q\x8b(K\x94'U\r\x91*\x66\x14N\xaa\xfa\xe1\xab\xf0M\x30\xd1}\xe6\x88)\xed\x86$Sj\x85\x44\x19\x1f\"\xa2\x04\xad" "j\xb4\xaf\xa2\xc3\x8d\x88\x17\xab\xa2\x31:y\xd5,\x90\xa9\x39\x04\x9bz\x03\x1dn\x10z=]jO\n\x19\xf9+j\xc6\xc4;\xfc\x1a" "\xb3\?\x89\xfa;\xac- JG\x8c\x90\xf7,~\x1d@=\xe0\xac\x16\x17\xafp\x99L\x44\x02~\x8d\xc4\x63.\x11\x61WG'\xf8\xa4" "\xa3\x95\x93\x8e\x86\x65WK>\xed&\x9et\xf5\r\x99<\xc5\x12\xd1h\x80\xb9\x88\x44\x19\x01\"J\xff\xd7\x64\x80\x35=\x42\xf4wL\x06" "\xfa@\x83 #\xa1\x37\x80\xc3<\xa2\x34\xa6\x88\xe2Oh\x32\xc0N\xba\xe6\x97OH%\xbd\x96g\\\x04G\xe7\x17-\xb9\x86\xbc\xe6\xb9" "\xaek\xea'\xc3h\"\xaf\xf2\x0e\xef\xc7\x31\x13\x9d$\xa4\xd2\xa9\x30\xad\xbf\x41\x19O<\x80\xd2y\x43\x94\x8e\xaf\x89\xf6\xe0\x10\x9bz\\" "\xbaH\x85T\xeb\xd2\x8f\xc2\x8a.\xaf\x91\xe5\xdd\x1d\xa5g\x94\xea:\x99\xd2\xa3#\xfc=&\xb4@\x62\x45\xf7\xc3\xd2VQ\xc1\xa9\x84\x8e" ";R\xe2\xf1\x8d(]\x8c\x93wx\xfd\x9e\xe8^g\x44\x99pKl|\x19\xed\xfeZ\x1d|G\xaf\x1e\x11\x15\xa5w-\xf6\xde\x31\xad" "P\x88\xd5\xd6\x64&\xa7\xe0\xf5'(m\x03\xe6\x9d\xd1\x7f\xd6\xd5$\xa4\xf4;\x06\xd5\xba\x11\x8e\xa5\xd9\xc4\xf7\nj\x03\xe5\x88]\xb8\xb6" "\x37\x31\x15.\xf1\xcd\xe1\x94\x82(K\xbf\x89\xbd;\xe3\x9fy\x0f\xf7\x17\x64J\x0f\x9c\x10\xe3\xec\x64\xca\x84,\xa2L[#\x1e\x9e\xb4\xac" "|\xc7\xa0\x90\xd0MV\x87z\xb8\x0b\xaf[N\xd5{^#mJS\xd4\xbb\xf8\r\xd9\xfa\xb3|Li\xb1\"jt@\x0f\x9c(\xde" "$|\xbfR\x35\xc4\xe6I\x64\xca&\xba\xc2\x30y\xa7\xe6\xb7\xd1\xbbG`\xb2\x8f\xa7\x64.\xea\xeb\xa5\x35N\x12\xe1\xb2\x9bL\x8d\xbf\x61" "I\xef\xf7\xa8\xaf\x87\xc2\xfb=\xdc\xbc\x1b)\xc9\xc1\x95\x8f\xa8\xa0R\xc4\xf8rL\xc1\xcd\xf7\xe4\x9dg\xc4\xcb\xd4{\x32\x65\x7f@\x62o" " \xef\x7f\x0b\x35\xd9*\xf7\xca\xa3\xd1^&\xfax\x32\xda\xb3\xb2\xf9v\xf0\xa5\xebL\x14\x36$%s\xd5\x31r\x0fL\xa6o\x8a{," "*\x12N\x0bO\xc6\xac&:\x8fT\xa8q\x93\xe2\xa8\x84\xca\"z\x94\xb7\xfb\x86K\xd7\xc9O\xf4!\xc7\xb7\xaa\xf7\xe1i\xce\x91\\\x96" ";\xdb\x83~\\q \x0f\n\xf8\x32\x1f:T\xf6\x91\xc4\xdf|\xe4]\x16\xf1\x91\xc7\xaa\x04\"N\xe9\xc6|\x1f%\xdc\x86\xdeM\xb6\x80" "\xa4\xb7\x92\x65\x19\x44\t-\xa2\x04\x01\xf1\x92\xf1\x17o\x94o\xb0S\x9d\xd4\xb7\x1c\x8bZ\xb5\xff\xf5_\xd1G\x8d*\x37\xff\xeb\x7f\xfdo" "\x32\xfe\x1f\xc8\xfd\x1d\xe4\xff\xabgs\x90\xff\x1f\xffQ\r\xa5\xb6\x90Wm\xc8\x1cGQ^\xea\x1b\x95\n\xa8\xc6\xfb\xdf\xb9\x82\xd1\xcb\x94" "~O\xbc\xa5\x8d'~\x61p\xac\x38\xf7\xcbW\x31\x15\xbc\x1cL\x61\x7f\x06\x33\xff\xe3O\xc3s\xf1\xbf\x1f{\xf5\x8em\x84\x12\xab\x89\xf1" "\xef\xd0\xd4H\xc9T\xbf;\xab\?\xf3\x64\xf4R\x1f\xbf[\x9eh\xce\x0b\r\x65\x04\x18\x87\x8bIg\xfe\xf7s~\xa3\xe9\xcc\xfe\xe3\xdfM" "O\xc1}>v\x0e\xc3\xd0\x62\x62\x92\xef\x87\xfa\xdc\x15RY\x17\xee\xb2P\xbb\\X\xb9\x41_\x06\x07\xcc\xbd\x91\x82\x0c\xceG>j\x7f" "g{\xca\x37\x63\xf0\xbe\x8e)\xe4\xe4l\xee\x8d|\x19)\x32L\x05\xd3\x9c\xa9\xf0\xba\x81j\xa7(j\x04;u\xf8Q^@\xd9.\x9d" "x*\x18)\x9f\x81\x63%QQ\xa6\xf0\xa7\xee\x8d\xf1`;\xdd\xfb\xcd\x8e\x33\x65\xbc\x81\xcd\xa7h]\x8aV\xfa\xd4\x97\x66\xd0h\xc7L" ",\xd6\xfa\xa8yW\x05\xe5\x11\x94\x8e\x01\xe2\x35\xde\xdcK]\x63\x42\x1a\x9b\x1f\xee\xafRxm/\xb3U\xe2\xa3`!\xa6\x90\x1e\x05\x8e" "\xf1\x45Y`\xc2\xa4\x84\xe4=\x64\xd1\xe4\x89\x1f\x9b\x8e\xec@x~\x8f\x99\xd8\xcd\x91\x95\xfd\xc5\x38v\x08\x1b\x46\x9b\x89\xfa\x97S_\x37" "~\xe3\x13\x07n\xdb\x46\xf7\xc7\xb7\x1dL\n\x32\x13\xad\xd9\x98\xc2\xa6\xa0t \x7f\xb6\xb8\r\x17\xb8\xcc.\x95\xe7\xa8\x04\xb0\xea\x19\x31P" "\xca\xe6\x9b\x91\x37\xfc\xb4K\xdf\xe7\x8d\x94\xe0\xb1_%T\xf9\x82\x81\x1d\xa8\xc5[\xcc\xe4\xc9\xb9\xe2\x9a\xcb\x0e\xb8%\x01r\x00\x8d\x46\x98" "\xfb\x8b\x99p\xf0\n\xf3q\xeb/O\x41\x62\x1a\x16\xd5\xbb\xa5\x1c\x8e\x32\rg\x96\xf5\xb3\xdd\xb7\x8d\xde\xfc\x11}\x63\xa4\x34\xd5z\x45j" "\x81\xaf\xb1\xb9\x38\xab\x92r\xe8>N\x11\xb1\x19\x1d\\\xcc\x39X\xd2\xe8\xf5\x94\xd0<\xb5\x86\xfd\x31\x99\x03\xe5\xd2H\x8d\x01K\x97^\x45" "_\xa2\xa1\x17n\xea_\x89\xfbu\xe6\xc4\xe8\x1e\xb6}\xef\xff,\xfd%\x92\x04\xe6\xd4\x11\xa5\x10\"J\xfb\x90\xd8\xd7\x0b\x0en\x94\xfa\xc1" "\x07\x63#\xa5\x43w[M\xe7\xdeH\xffz:\x42\xc7\x02\x99\x33\x8d\"\x33\r \xe9=\x10\xc6\x12\x32)\xbfv\x0e\xb2_N\xb5\x12p" "\xf4\x41j\x9e\x36\xba\x04&\x33&\x85\xee\xb5\xc8\xb4\xbeqV;\xa5\x86\xf7\xe2\xc6\xc8\xab\xe9R:\xdc\x65\x07\x62\ns\xf9\xd8,*\xcb" "\x98Kl&\xda(\xa6\xa8\x80\xe5\xc5>\xb1\x63\x83\x8f\x98\x89\xa9G\x31\x85\x61\t\x1c\x98\xb7\x31\xbb\x44\x14=\xc5\xdfU^\x8d\xae\xb1\xcd" "J#\xc0\x32it\xb1`\x99\xf4\x0e\xfb`\xea\x94\xaeG-\xd5\xdc\x81j\n\x43\x1fP\x9f\x1a;\x96\x1aS\x97y#_\xe7I\x03\xd3" "\x92\xe4r\xc9\xd3\xf5w\xf9\x98\xc2\xe6\x89\xa2\xdc''\xb3\xa8\xfb\xae\x89\xe2\r\x86\xbawN}%\x30\xa7S\x14\xaa\xd1\x64\xae\xa6\x9e\x66" "\xbc\x64\x06\x96\x95\xae\xb6\x46\x8a\xaa\x98\x9aJj\xbd\x30\x62\xaa\xbd\x99\x18j\x14\xe5\xdb\xc5\xd6(\xe6\xd1\xfa\x66\x0e\x95\xfa\xd3\xad\xf1\x64t" "y\xf0N\xb3\xf8\xdd\xda\x88\xd9/ln\x8c\x81\x16}\x30\xad\x80w\xf1\xd3\xf6\x61\x84\xf9\xf6\xe8\xcc\x99~y\xfb\xf3\xe3\xde\xe8\xfe\xf6\xac" "\xbf>\xff`\xfe\xe4G\x8d\xda\xcfVX\xf8I\x64\xd7\xe8\x19&j\xad\x88\x33\xcbV\x15\xad\x02V\x05\xa3Wx\n\x35\x01\x89z\xb5\x62" "\x84\x95\xcd\xdbu\xea\xfc\x63\xca/\xfc\xa0\xcbJ\x94\xbd \x9b\xdd\xe7\xd8\x1fq\xef\xfd\x9f\xe2\xda\x85\xbb\x99>\xe8\xed\x95\x11\x9d\x0fl\x0e" "\x95\xf6\x93O\xbf\xa6\x1by\x88\n\x37_\xee\xbd\xf2u\xe5\xbb\x05\x90\x7f\x87\x04`\x15;\xa2x~\x45N\xe8\?g\x8dV\x8e\x91\xe9>" "\xdf\xf3\x8b\x12\xf1\x82\x97\xe6\xa5\xb6^\xfa\xce)\xfa\x08N\xe9\xe3V\x16\xc6\xf8KT\xf5S\xd5\xf4ij\xf7\x46K\x11\x64\xf2\x07yK" "\xfc\xa3\xf4\xf3\xd4P%\xf3\x1by\xff\x39\xe5g_\x9d:t-r`\x17$\xe6'j\xf6\xd0\x8b\xc7J\xdfW\x63o\xb0Z\x1a)\xefT\xf3l\xc4&" "\xa9\x30\x35\xe5\x04\xfb\x01V\x45\xb0\xf9\x66\xfc\xdd>Y]P\xd4\xd4='\xa9\xfd\x9ew\x19\x8d=\x1f\x1d\xe3:U\x17\xa3:r\xc0K" "\xd7\xad\xde.\xaa\x11\xe6\xf6\xf1\xd3\x8b\x62\xec\x8aT\xd7\xe2\x39~\xb1\xd3\xbb\x95\xf6\x30\x89\x92\x9aj\xec\x34}\xc5\xb8\xfa\xe7I\x82\xe2\xd4" "\x99\x16\x91\xc9\x94\xf5\x96N\r\xce\xce\x1c\xb6\x82\x43\x91\x17\xf1\xb7z\xff\x1e\xf3\x37\x07\x0c*\xe0\x18\x96r\xfe\xdd\x35L\xdc\xc1G\x88S" "\x7f\xdf\x8bT\xf0\xb6pj>\x85/&QQ\xed\xdb\xda\xa8\xaczio~\xb4\x9c\?\xd8\x7f\xba`\xb1\x30\x39l\x10\xbb\x82\x45\xc6\x0e" "P\xe4\xc4\xe4!Vz\xa9S\xf5\xf7\xa4q\xe7\x82\xfatxu\xadL)\xc5\x33t\x61i\xca\"\x43x\xb5\x35\xc6\xda\x89\xf4\x0e\xc6X" "\xe4\x0b\x13\xaf\x16G\x31I\x88\xa9\xa7\xb4\xc2\x44\x0c\xae\xb3T\x01\r\x92\xdb\xb0\x30w\xc7r\x63\xf8\xc6\x82Z\xb9\xee(R\x96\x0b\xb2\xab" "\xc1\xee\x15z^Y\xbd\x1a-\x03\x63s\x90r\xa6\x96\x7f\xe8:\x65\xe2\x9b\x87\x99\xc9\xef\xa9\x10h\xa6\xcdS/:\x19+\xf3\xa1\x62\xe7" "x\xee\x84\xb6T\xc3\xcc\x86\xd7\xd6]\xa9\xca\xcd\xbd\x37\x14\xd2\xe1m\x92\n\x18\x8c\xa6\x88\n/Y\xec\xc5@\xaa\x32\x31\xb2/\xbe\x43\xce" "\xa9\xbf\x1c\x9bT\x98\xa8\x85\xf3\x1fSQ\n\xf5\xd8\xb0\x9e\xc7\xfe(\x64v\xaf\xac\xc4\x85i\xf9\x0f\x7f\x91\xb5\x86\x14\xb5\xd0\x12( \xe0" "\xad\x86\xf8\xe6\x18\xab+\xc6\x18\xd5\xcaX\x17\x43j\x86h\x46\x15n\xce\xb5\x35\xa6\x41\xb9\xeb,\x34\xd6,\xb2\x46\xba\x82\xfbK-*\x88" ".\xcc\x36_\x46\x17\xd3\xbe\xae\x94\xfa\xc2\xdfz\\\xeb\x98\xe2!\xc7u\x8b\x86\?m#;l\xd3Z\x17\xa9\?S/\xb3\x45U\xd1z" "#y/\x42\x9b\x98H\xea\\\xf7\xb5\x01\x8e%\x07\xc4\x8b\xbe\xd3\x45#\xd4\x45\xff\xf0\xd2\x90\xae\x64\xff\xae\x84\xae\x64\xf6\xf3\xf4_J\x39" " gp\xc0\xed\t\xc0\xaam\xfc\xdd\xbd\xf0\xe2R\x1b\x81\x92\x63\xf4\xcb\xb8\xca\x66\xbc\xdc\xadS\xfa\xb1\xc9\xf4\xef\xba\x66Zs\x83\xcd\xe3" "\x93\x97^y\xd3\x9a\x97|\xb7\x0e%=<\xad\x39u*\x05\x87\x86\xa9\xd8\xcd\xac\xfc\x84\xd3 \xe6L\x89\x46m\xa4\xb5V\"G\xa7}" "/\x16\xf1\xa2\xf2\"Jm\xa3G|\x33\xb8/`\xae\x8d\xfc\x05\x34\xacH\x05\xf9$\xc6T\x45\xb1\xa7\x63m}R\xc6\x66\x8c\xe5x\xd1" "\x8b\xfe\xa5\xe6\xd0\xd1\x0b\xa2\x0b\x66\xf0\n\xdd\xb7\xa9\xa7\x8c\xc1\x8cZM\xc8\xe1\xa2\xa6^^[\xfa\x44\x8f\x1a]\x9a\xcb\x93\n>G\x66" "Z\xe4%\xd3\x8a\x8f\xa8W\x32r\x1f\xa4V\xc2H\xb9o\xdf\xe3\xad\xc6\x30\x65\x93U\xd3h=T\x96\xec#\xde\x36~\xa6\x03 \xac\xbc" "\xdbU\\\xad\x0f\x31\x85\xad\"\xcd\xb4z$\xc6\xae\x84VQ\x93=_\x1a\xd6\xdd\x0e\x65\x39\x38\x14\x46\xcfM\x45\x89\x44\\\xd5\x91\xce\xa3" "\x8f\x9a\x91\xbb\xb2\xb5W\x9b\xfey\xa9\x8du-\xb3j\xbc[\xa3\x37\xfa\xeb\x08\x80\x89\xf1P\xa8\xbb\xa4%]L\xf7\xfbh\x46\x1f\xf2\xe4" "\x1f\xda\x9f\xf1\xa1\xc7u\x1d\xd2\xc7<\xear\x44\xfb\xbc\xf6\xb2\?\x42\xccN\xf9\xcc\x62\xd9\xd3\xe7\x13z\x36\x85~\xa5\x84\xa8\xf7\xf9\xa4\xbf" "z\x42w\xc7g_u\x1f\xeb\x1f>\xfb\x61\x83\x33\xae\xcf\x03=\x9bW\xa8\xc0\xa1\x30\xa9Y\x8d\x14z\xfe>\x8f\xbf\xc7#(\x9b\xed\x30" "/\x46*\xc7\xd1{\xf3y\xf4\x32{\x9e\x00$s\"H\xe5\xae\x11\xba\x64R\xd3\x46\xb6\xc5\x14\x13\x93\x89\xc8,*\x9f\xa6\xc6 \x7f\xc4" "\xee\xecPtiSRz\x30\xc7\x18;\x66s\x43\xff\x63\xec\x8b\xd4\x38\rJ\"\x12\xa2`!S\xba\xd1\x88\x9b\x8c\xd0\xbfz\xf6\x13:" "\xfd\x93\xd5\x04\x94\xbe\x19!\x36\xca\x63sn\x44\x31\t\x33\x85w\xf7ooQ\xcf'\xb3\xb4\xa5\xe7\xc0\xac}R\xcf)\x34\xc6\xc9\xac\xbc" "\x19\xf9\x65\xa4/\xdf\xa9\x1f|'\x34;\x89\xfa^\xbe\xe4\xc4\x9f:\x1d\x90(\xcd\x1d\xa1\xbd\x1cj\x07\xc4\xf2\x92\xe7\xcb\x97\xdb\xaa\x0eH" "\xa6\x64\xd6\x11\"p\xab(\x44M\x90M\xfd\xf5'n\x17^\xe3\x0b\x63\x41\"Q\xd2\x17\xb1\x31\x33\xfe\x1e\xef\x7f/\xb8#\xdao\x42^" "H\xfc\x81\x0f\x84\x99\x1cL\x84wx\xf9\xe1\xe7\x9a\xe0\x8b\xf2\x46J\xe2-\x87L\x19\x8b\x17\x62\xa6\x1b\x99\xbck\xf2KP\xc3\xf5\xf1\x80" "\xf6\x8c\xd1\x34\xa9L\x19\x63\xcf\x82\xc5\x16\xd3\xc4\xaf\xf8-\x9a&\xbc\xd4\x35x\xa7\x1e;\xcc\x44\x8f\x00)\xe9\xbf\x9c&\xb0\x61\x8d\x10\x39" "\x31\x99\xbd\x37\x61\xf8\xfa-\xc4\n\xaeiR\xf6\xb2\xcc\x62r\xad\xa8\xe8\xe5\x06\xfd\xc1\xd3$|)\x11\x65\xcf\xb6i\x12\xfb\xbb\x11s_" "t(\x90\xaeN\xa7\x0e\xcf\x31\x15>\xe0/\x90U\t\xa3\xe9\r\x46\xf0IM\x39\xd9Oo\x30\xf1\xc3\x1dg\xfe\xfdMJ\xcf\x32\xbdz" "\x1d\x1d\xe9\xa4\x64\x19\xc4\x34\xe5_\x97\x8c\xa8\x30L\xd3\xf4\x8f\x99\xf1\xe6\x1c\x89\xa6\x05|T\x66\xce\xe8\x92\xc3\xb4\x88\xa9\xc7\xc4\xfd'\xe2" "\xd7\xb4\x88\xa9\xfc\xc4\x9f\x02(\x1b\x16\x32\x7fP\xe8\x93y\xe9\x84\x9b\x81\x98\x98nH\xa4r\x64\xdb\x84\xf9\x92\x37\xf2\x12\xf0\xbb*\x86G" "\xe9@\xe7\x88>\xd5i\x31\xb8\xaf\x83R\xa4\x10\x37\x1f\xde\xdb+\xb6w\x9b\x16\x31I@\x88\xec\x9e\xcc\x1aw\x1dNK\xfa:\xcc\xbf\x97" "*#\xe3\x9a\x96\xbd\xd4\xc9\xad\xc5\"\x85oW\xf6\x1e\x1f\x41\xc9\xa7\x88\x92\xf9\x11\x65\x02\xa2\xf0\xf7\xd8\xf1\x86\x19\xa8\xdd\x01\xc4\x37.\xfb" "\xe2\x44\x90\x39\x01\xb3\xb8\x1a\xb2|\xe2=\xee\x86)\x95\x44\xe9\xa2\x14\xa2\x89#\xa6o[\x86\x43\xf5\x1f\xcd\xc4\x1e\xde\x62\x86\x1b<\x9f\xdf" "\xac\x80\xf6+\xe9\t\x12\xda\x15\xb1\xc1\x17\xf1>o\xf4\x1f\x1f\xfd\xea\x08J\?\x00\x66\xb0\x13'm\xf0S\xcf\x9f\xe7\xe8\xe5\x9c\x96\xc3[" "\\\xc0-\xb6\x9d\x96\x31\xdb\x90(\xddj\x44\x99\x46\xf0\xabw\xc6\x04\x33!\x96\x89\x8a\x19\x66\xb9\xc4\x98\xeav.Su\xb5\x32#\xcd\x1f" "u\xa6sh\x96i\x1c_\x1e\x7f\xb7\xf7\x41\xfa\x16\x9f.\xa6\x30K\x80\x37\x00\x93\xb9\x8c|\x66+\x44\x89J\x14\xa7\x35\xc4\xf4\x01\x94Y" "T\x44\xd9\xab\x85\xd9W.@v\xd4\xbe\xf5\x1a\xedp\x99\xf6\x9b]w\x19qpM\xacmP\x33&\xb3\xa1Wj\xe2\xce^\xb7\x06\xca" "\x88\x12s\x03J\xe6,\x84\x7f.\x32\xc5\xcf\x86\x10\x93@\xc4\x84\xe3j\x98\xb2\x13\xc9R\xd7\x88\x08\x11\xaf\x97G\xff\xfa\x96\x37}{\xee" "\xc7\xd5\xfe\x1a\xea\xfe\x11l\xa6\x95]%\xee\xe7O\x0f\\\x8b\xed\xe0\xc1\x30\xbe#\x64O\xf3\x8b\x07S\x98\\\x44\xe6\xb2n\xc4@\r\x9b" "\x1d#zo\xc9\\\xe5\xa2z\xc2o\xae\xe3j\xbb\x8f)\xcc\x97\x63\xb5\x33\xa2[\x84L\x99sO\xdcn\xa3L\x03\x33\x32Ly\xfbg" "\xa8\xfdu\xfc\x8d\x65J\xfa\xf2\x18\\')\x94\xb0\xa8\x44\x14\x37\xb1\xf7x$\xcc\t#\xe6\x11\x34\xbc*,\x81P\x41\xedg\xa9%\xa1" "\x90\nV\xec\xbaH\xaa\x81\xd8\x16Pu\xf6\x46\xef\xf3VP\x96\x94o\x46\x0bY\x38\x19 .\xd7\x32\x97\\\x1f\x62y\x30\xa2\x8c%s" "\x95S\xe2\xad\x83#\"+\x05\n(\x0e\x04\x88\x97\x94\x11\xfd\xbc\x62\xc2\x35\xdeRw\xb7\x13\x06/g\xef\xedI\xd5\xab\xd1\xde\x31L\x36" "\xed\x93\x63\x46\x17\x31\x35\x34\xa2\xec\x65s\xac\xd4\x9f\x66\x97J\xd5\xb7\xaa\xf5\x63\xba\xbf\xab\xe2\xc9\xb0n\x93\x89 \xe5\xe6\xa9\xcdw\x64\xa5" "W\xdf\xcc\x8d\xdc\xfb\x61\x8f\x01\x95\x41l\xc1\xce\x8f\xc2h\xdb\x43\x81\xb6<\"w!>\x8e\x8d\x96*\xe1\x06_\xe8]>\x42\ruR" "\xce\x94-\x33\x96\xea\xf0\x9d\x89\xf0\x15\x8f\x80\xb9_)\x7f\xa0\xeen,\x34\x31\x9b\x8a\xc8WJ\xa1]\x44\xe6\n\x1f\?Z\x17\x94\x65\x65" "\xcb\xe8\x35K\x66Z\x82\xc3v\x8a\xc4\xe3\x93\x91^\xc7\xd2\x17\xd6Y\x0b\xbd\x62\r\xf3\x38\x45Q\x8c\xc4:M\xa8\xe3G\xd8\x95\xbb^\"" "\xc9\rW:\xed\x9dx\x12W\x32R,\xad\x12^\x66\x8e\x15\xee\x64\x16W\xa0x\x34!J\x19-\xb4\xbf\xa5\xf7\xf5\x9f\?\x61\x8aw\xf5" "\x95\xfa/\x13\xc2\xad\n\x99\x32\xaaL<\xff\x04\x87\r\x06\xb7W\t\x8c\xa2\x11\xa5\xc0\x11\xa2\xe7\x86\xcc\xd9\x85*\xf4\xd0T\x39s\\\r\x8c\xf0\xb3\x03S\xca\xbb\xd5\x02\xb5\xfc\xd5R\x7f\xbd\x8av\x45\xa3" "\xb7|\x46I\xb5Z\xeb\xd9o\xe5\xd6{h\x19y\xc3\x89\x17\xc9g\xb6(\x8d\x88\xd2\xe1\xb3\xda\xea\xf7\xdf\xa2\xa8\\m\xd1\xabM\x94\xb2" "w\xb5\x45\xc7\xc6J\xe7\xcd\x12\xf5\xea\x91\xed\x90K\xa6l_\xbaRw\x9d\xab\x13\x8a\xfe\xd5)\x92\xaa&q\xc7\x19\xc6\xfa\n\xe7\xd7\xd7" "<\xc5\xbb\xd1\x44\xb9@J\x82t}\x1d\xe6\x87\xde\x86Z@\x37\x31\x85\xe6\x9b\xa8\xd8_ \x8bY\xdf\xf8/\x0bP\\*\xafo\xd0[" "\xb2\xbe\xd1\xfb\x30\xbd\xc1\xceL\xaaW`\xfb)R\x92\xe9\xaf\xb5\x62\xbb\xbeU\xde\xa1\xba(\x0c\xf2\x9f^\xa1#\xca\xbf\xbd\x16\xf2\n\xe0" "M\x1b\x99\xf1\xba@\x35\xc5\x30\xd9\x83)\x9fn\xad\xfb\x1a\n\xf1U\xd7\x05\x44\x8du\x11\x99\x1cq\xde\x35z\xd3\x01\xdd\x04J&\x15\xd9" "\xdc\xcau\x19\x35\x85\xf5\xb3>W\x05Q\x82\x88\x1bU\xc2\xbe<\x7f\x45\xcfWQ\x1dXWMG+\xb9\x8bz\x44]k\xfc_\x37\x95" "-\xac\x88\xa3\"R\xc6\xcd\x85~'\xe7\xcf\xcbP\x12\x33\xd6-tn\x10\xa5\xd9\x42\x94`%J\x1dY\x18\x1c\xd2\xe1u\x0b\x33\xf3\xe9" "\x00\x1e\x93t\x1f\x94\x88)\xd4\xef!&^\xa2\x15\xdeq\x62[k\x62\\\xcf\xbd\x0c\x87\xe6W%\xda\xf0\x63|W\xa3MR\xc9\x9f\x7f" "\x9b\x8c\xbe\x39o\xdb\x36\xa2\x1dW\xac\xb7\xd8\x04\xb8\x8dl\x62\xab\xdb\xed\xca\xbe\xcc\x42TO\x88\xe2$\x45\x88\xda+\x99\xe9\x0e(~\x1e" "\x88\xd2\xd7%\xc4\x14>\x32\x1f\xb2\\\x8bh\x1a\xee" "z\x8b-]\x06\x8b\x37Y\x9d\x8d\xa8\xee\x98\x89\x19\x8e\xa4~\xf4\xee;\xa5\xac{\xd8v\xd1\x32'V\x16T\xc0k\x02\xe8\xa2\x92Ol" "\xb5@\x99#\x45\xec\xe3j\xe8\x92\x17\xa2\xefYLo\xeb\xce\x62\x16\x87\x98\xfe\xfd\xd6\x1e\x9f\xf7p~l\xa0\xd8'\xb5\x44\xc8\xc1[\xff" "\xb6\x8b,U\x18\xc8\x94\x39\x32o\xc5'\xf4,\x11SX\x61\x63\n\xde\x33\x44y\x85\x0c\x66\x15\x8b\xf2\xbb%x\x0f%U,\x80\xd2\x8d" "J\xd4\x07 \xba\x9e\\Q\xd1n\x80!\tS\xe8\xaf\"\x85\xf4\xdf\xd5\x14\xdd\xd5\x14\xdd\xd5(\xde\x45\xbb\x99\x89`@&\xbf\xedjZ" "%\xe6\x95\x9d\xe8\xd8\x41\x8b\x98\xd5 v\xc7\xf0\x1a\xc1\x8f\x9e{\x62\xea\x62\x84\xd3u\x32\x91\x96\xbbN\xbf|x\xe7\xaa\x37X\xaaR\xd6" "\xf3\x46\xaf\xbf\xb6\xf8\x42\nUZ\x31\x83\xe4#v\xd1\x12\xc5\x9e\xf8\xeeJni\x1e\x1d\x93\xfa\xa5\xd0\x12\x04o'Y\x45\x80\x85\x43\\" "\x32\xaa\x7f\x07\xf9*v\x46 \xd5(`\xa9&\x99\xfd\x96\x91}\xe3\xc8P\x95(~\x88\xdc\x13\x94tX\x13'\xef~y\x8e\xd1\x16R" "\xdb\xae\xb2o\xe4[\xd4\xab\xa6x\xdb\x66\x19\x85\x62\x35u\x9d\x0e\xa4v\r\xe3\xef>\xa7\xd9\x12\xab\xa0\xbe\xa5\x03P\xd2+\xbb\xedij" "\x61j\"\xe7\x46\xbdk\xe8o\xfb\x1c\xe9\x64>\x1b\x99\xbb{\xef\xe9\xca{\x92+\xf4\xbd\xf4\xc0\xc8%\xe3\x32\x0b\x85\x0c\x80\x89V\x01\x99" "\x8f'\xf0\xa9\xa0\x9cj\xc1\xd7\xc7\x0c|\xa2j\xach'\xca\xa8\x18\x11\xc5T_\x0b\xa8\xbe\x16+L\x8do\xfd\xe0S\xd2_\?|{" "\x8c\xb6\xf8U\xb8\x90\xfc\xb5\xaf\x39\x1d\xd3/\x7f\x63\xb9\xb4Si\xfc\x19\x96\x81\t\xbdl\x35:\xde\x9b\xd2|\xa7\x1f\x95\xfb\x46\xefx\xa5" "%\x41\?zn\x82[\xfd\xf3\xe3\x93\x91\x82\x05\x1b\x36m\x87\xfa\x8c#\xd4\x8c\x84\xf0\x46%\xa6\x9f\xadih\x8c\xc2k]\xaf\xb2\x1di" "i\xc2\xe4\xb9\xa0\xf8\x30\xaa\xd0n!\x45!T\xbf\xd2(&jw\xeb\xd4\xa1\x46\xe7\xa2\xa6\xe4\x05\xef\x98$\xb6\x1d\xc3\x1f\xf2v\xac%" "\xe8g\xb4\x93\x94\x35\xe5\x81\xc3\xdd\x05\x15\x64Q\xce\x44m\x85\xa9U$\x36\x31\xf0$&\xea\xc8<\xef\xe9\xc1\xa8\xe9\x8bM\xcd\xd0\xa6\xe8" "\x0c&\xea\x65y>\xe5.\x85\x39\xec\xbc\xfd\xbc\x04\xc2\x14n/\x98\x17-\xe4\xa6\x1a\x97\xa7\x9a\x05L\xc3\xec\x1d&\x96\x93\x89\x44\xcd\xc4" "jK\x31\x31\x0cN\x66\xf7\x8e\xee\x80\x19\x1d\x94*\x90\xb2\xa7\x1a\xddg\x1a=\x97\xd8\x03g\xbb\xf4\xc5\x17\xe0\x96\xca\xdd\x02X\x9f\xc9\xe6" "{rv\xa5U\xc9\xf5\xef\x65\x44\x65\xeb\xafl\x89\xb0]\x07\x07\x89\x66\xebH\xe6\x41\n\xfdl\x11=\xb5\xa2\xc2\xe6&l~\xff\xab|" "\xf1\x00-\x07\xb0\xf0\x65\xbb\xa1\xa2<\xf8,\xa1\xad\xb6\xfd\xd2\x98\xc4t\xebr\xb6\?zt\x1b\xc9R\x81\xed\x01->\x9bY\xbf=\xc1" "'\x31\x11\x97\?in|\xd2\x1a\xd3Y\xab\x04L\xef\xf1N\xb3\x92sp)\xd3\x81\xe0\x32\x8c)\x8c\x94o\xcfQ\xbf\x46\xca\x17\x87\xab" "\xa6\xf4\x97\x17\xcc\n\xdc\xaao\x9b\xed\xc5\xbby\x04Q\xeb\x63\xf2\x12;\x19g$%\x13\x80\xb6\x17\?\x31\x06\xbb\xd9hw\xd1\x9a\xc8\x45" "\xc3\x9e\xe9\xaf\x17Z\x05\x32\xb5R%n,\x89\xc8\xe6.Z,^\xb0\xcd)\xf1\xfd\x8a\xdb\x0c\xe2&\x85\xd4G\x07\x9cg\xbc\x9fwO" "\xe6\x44:\xb5\x95\xd8z\t\x1f\x95\xe2\x32m{\xe1\xc1L\xd9\?\x99\xccz\x02\x14\xaf\xa0\x42\xd9\x8e\x8f_\x62\x97\x88\x64m\"\x93#\xe1" ".\x89\x80\xd9]{\xa7\x1e\xaa\x97\xbb\x1b\xef\xea\xc5\xab\xb7\x30\r\x43<\x8aR\x00\xc3u\xe5\xee\x06N\xaaw\x37\x98qG\x94\xb9\x92\xbb" "\x94W\xf8\x42\xa9\x42&U\xa4*\x33\x98\x95\\p~\x15\x13\tH\xe8K\xa5HLL\xb9 S>\xa2\x90\xddo\xc9\x06\xae\xbb\x14R" ")Q\x92\x15Q\"\x03%;IS\xcc&\x98.\x62\xd7\x11\x33\x83M\x07\xea\xfe\t\xac\xe3)\x39MI\xda\x85zK\xa2\x41\xb9K\x45" "\xb7\x33l\x61\x44\x66\x0fW\x42J\xdbQPs}\x41*\xbb\xa8\xf8\x8a\xc2\xac\xf4\xdd-\n\xae\x1d%U\x8e\xcf\xbb\x82w\x1c\tQ\xe8" "\tQ\x06\x90)\t\x64W\xf4\x65\x04~W\xc4\xc4U\xe1\xef\x36\x83\xd5p\xbb\"\xcaY\"\xc2\xa5\x84}\x65\x85\xc1\xcb\x19\xabmw\x35" "\xb8l\xdc\xbd\x44;N\xf6\xbb\x46\x98\x95{\xb4\x90\x9cv\xadhu\x04\xa5OxG\xe5\xaa\xb0\x8fi\xbd\x44\xe9\xa9\xd8\r~O\xea\xdf" "\x82\xcc\x8b\x84\n\xd7]\x82\x8f!\xfc\x8d\x89r\xb5+R\xe5\x35O\x80\x91\xbc\x9c\x14\x65\x9e\xcf\x0f\x30\xa5\x43i\xf7\xd7\xa1\x44\x66\?\x01" "J\x8a\x10\xbaS\xab*\xb8\xd6\x0b\x89\xdb\x92\xdd@#\x13\x93o\x8a\xd0\x1e\x04\xb3jtn\x63\x1e\xcan\x10\xa6\x9b\x1ai\x06\xd1\xf3\xc5" "\xcb|\x04m\xf9\x04#\xefih\x44\xdf\xdcn\x14\x89\xd3]!\x35\xca\xe0\xeeN\x14\x66\x07\xc1\x94\xc9w\x62\x86-y\xbc\x37M\"L" "\x34\x12v\x63\xbd\xf8\x84L\xe6\x07\xb2\xaf\xdd\x87\x86\xd2g\xf8z\xe7\xea$\x31\xe5o\xcb\xbc\xa0\xf5^}\xfd\xdb\x19\xff.\x81\x33\\\xd3" "\xfb\x9f\xcf\xc4\xfe&\x12\xdf\x42;\xdd\xea}\x37\x8d\xb6\x9c!\xec\x16\xd4\xac\xa7/\x80\xe9\xce\xa4\xeeG<\xe7K\x66\x8a\x91\x92RO\x08" "\x87j\x66\xba\t\xc5\xbb\x85t\xfe\xcc`J\x43n\xb7\xf0s\xf9\xf0\x81\x9dH\x04\xed\xcb\x7f\x1c\xd0\xd0\xa3\x63\xe2\x42\xf6\r\x97u^\x86" "\xc9l}\xfb\x9d,\x06\x37Im\xf2\xca\x33x\x92o\xbe@\xde'\x0c.\x07.\x62\x65\xcbk: K~\x98\xdf\xb1\x8b\x06\xad\xafh" "W\xb5\xbb\xe9\x37X`\x44w\xb7\xc0\x38\x8dP\xd3\xef\x82H\x11\x1f\xb5\xfb\xdd\x45\x63\xb7z,\x11\x62`x\xa7\x8e\xccv\x7f\x8e\xcc\xc8" "\x9c\xbf\x1b\xb1\xaek\xa7\xdb\xef\n\xb9\xa1\x92\x1fk\xbe\xc8\x07\xc2\x45\x02\xe3\xec\xa4\xd6\x39P\xcaR!\xf6\x64\xd8]\x82\xdc\xeew\xbb\x83" "\x89t\xc4\x84\xb7_\x32;\x92\x61\\\x34O\xbb\x84\x37\xb8@\x98/ys\xa9\x85`\xfd\x90\xc2\xb6n\x83\xbb\x0e\x43\xbey" "\xc2\xa0Z\x9c{P\xdf\?\x43\xac]\x39\x8c;T\x9d\xac\xe5M\xeb\x65\x36\xc0\x61\xcd\x39.\x0e\xc4\xbc<\xe4\x37Y\x01\xf7\xe7\x93\x9a\xb6" "s\x82\x81g\xe8\x9f\xf5\x83\xfe\xc8\xcf\xba$\x05lT\x42X\xdf\xea\xcds\x0f\xca\xbd/ZZ\xe2\x03\xa6\xbb\xa6" "\xe9h\x07z\x0b\x1c\xc1\xa2\x96\x33\xba\n}j\x02\x41z\xbc\xd8\xb2\xed\xaa\xad\r\xeb\xce\x36\xd8\x03\x8f\xab\x0f\xa9\xad\r\xb5v'\xd4-" "\xed\xadm}Y\x8cP\xcd|\x10\xe4\\{k[\x9d\x92\n\x9c\x33\xa8(j\xd1\x05\xa8T\xb7\x83\x42\?\xfe\x34\xc8\xb1\x06\x90\x9b\x7f\x84" "\x95\x87i\xb6\xb6\x8d\xb9m\xf5\x84I\xa8\x1e\x86\x10\xe4\xec\x89\xd0\xd4k[\xef-\x03nP\x9b\xb6\x43>\xa2\x00H\x37n\x84r\xe7\xd5" "\xf8GL\x06\xd4\x1a\x8b\x8d\x66\r\x16\xd4\r\x00\x82\\\xa8\x02\xf2\xbc\x0cp\x43\xc9\xe9\xa9\x08`\xfd\xb4\x43\xb5(\x45\x90\xc6!\x80\xbd\x65" "\x87\xf2\x9c\xda\xe4|R\xaf\xe4u\xaf\x8f\xd0\xd4\x17\x41#W\xa8\xc0s\xb8\x44L\x1eN\xe6\xbb\xe8\x8c\x85\x35\xa5\x90\xbe\x82\x10\x1b\x18W" "\xc8\x03g\xc0\x62\xad\x43{\x15siZ\x8d\xce\xf1M[\xda\xb6.\xa1\x08\xbd\xd8t\xea\x00\xa8\n\x0f\xb8\xa8\xf0\xd4\xb2\xc2\xad\x35\x83\x96" "\x9e\xf7\xff\x00\xb7\x9b\x1d\xea\x95P\tv\xe9|\x42\x82'\x1c\xda\x30\xb6\xad\x46\xac\x80<\x16\x06l[s\xa8o\x0e!\xd8\xa1\xe5\xa4\xb7" "\x66\x00\xad\xbc\xf4\xa9\n\xc0\x31\xad\x03}\xfc\x90\xd0k[\xa7s\x84\xae>\x32\xad\xeb\x33\x44\xac\xd7\x38;GpOi\xe8\xd3\x86\x02\x95" "\x8d\xa4\xa9\xd5\xa1\xee\xe1h\xd0\x44\x93\xe0\xd2\xf4\x39\x41\xdd>\xd2\x18\x8d\xec\x18\xd4\x93u\x06\xcf\xd1.\xc4\\\"\rV\xa8\x0e\x9cp\xa8" "\xf3*\x04\x87k\x1c\xaa#X\x06\x63\x0c\x7f\xab]\x16;\xe3\xed\xc2\x06\x37\x81\xaeN\t\xad\xb7\x00\xb7\xb6\x1d\xaa\x1d\x01\x83\t\xdf\x1d\x15" "\xd8\xe0\x30\x1a_\xab\x04\xb9:\xdc\x32\?\x80\xdb\r\x32\xaf\xdb*j\xdf\x8e\x18\x17#\x80\xdbS\xba\xf9\xb4m\xc6\xb6\x84:`\x32\x98\x34" ".k\x90\xbb\xe5\xdb\r\x41\x63k<\xd1g\xc1v\xbd\xbd/\xc1\x93\n\x9bZ\x0cv(l\xd9\x8a\xb2\x0b\x1a\xech\xd4\xcd\x04\x04;\x0b" "\x0e\xb5\x99\x33\x18\x17\xba\xc2\x42\x97\\hZ\xdf~\xe2\xf3\x99\xa4\xd4\xad\xef\xdc \x96m\x32X\xd6\x33U\x06\x93\xc6\x8dh\x38\xa7\x31\xac" "\xe3\xd6sz\xe6-\xb1\x89`iK\x8bW\x63\xab\xa6\xd1\x12\x33|\?\xf1\x43\xd0\x84\x06\x14\xeb\xe3\xe2\xba\xee\xc9\xf3\x83N\x0c<\x18\xaf" "wx,q\x8f(\x88\x95\xeb\r\xf6:\x94'\xbf\x46\xc7*\xb1\x8e\xadJ\x30\xd7\x01\xad\xd3#\x0e~\xa8\xbc\x19\xa8\xb1\x35'\xd9\xab\xc6" "\xcd\x08N\x18\x97\x93\x33\xea\xe5X\x82sq\xe7\xd8\xd9\xcdvU-|\xe0\xd4\rp\xb9\x45;/\t\x16\xa2\xbdu\x0b\xee\xc5\x83\x9b\x1a" "\\\xe9\xd0]\x62\x04W\xbbt\x1f\x03\xc1\xb5v\x83k\x15V\xb9\x8a |\xe2\xd3\x9c\xc3s>U\x12z\xc5\x9d\x19\xa9\xfc\xca\x65\x17\x61" "\xc5/,\x63\xf1\xa9\x33:I\x93\xd8\x9e\xc3_I\xb3\xa7\x1b\xbf\x0c\x86\xaby\xf5\x30\xc8\xd8\xb9\xc8<\x38#\x14\x17\x44\x9d\x18\xcaj\x92" "\xa1=\x9d\x00\xeb\xe7\xa6\xc6s\x63\xcb\xe7\xc6\xd4\xee\x06\x41/\x90\xad\xa5\xa0\x34\xe4\xc1J\xc2\xed\xad\x8a\xd6\xee\x8f\x12\xaa'\x05\xc0\xfe\xbc" "\xc2\x82\xfe.n\x0eL;\xc3\x81.\x87\x61m{%X\xb0_\x87\xd7\x93\x62\xeb\x39\xc1p\xa5[[->\x94\x66\x1d\x06\xd9\x86\xa4\xa0" "\xea\x17\x8e\xd4\x1a,\x86\xa3y\xb9']\x93\xd7.\xd3\xbf\xfd\xca\x07m\x35\xfa\xd8\x36\xe0\xa8jm\x38.\x05\xa4\xb6\x18\x8c=\x11lt" "\x18\xf0-\x03\x06\xf5\xe6\x05\x83\xea\x8d\x11\xc1iU.}%[\xa0I\xbe\x32\xec\xf0\xec\xc6\x82\x1e\xc9 \xb6Z\x81\xae\xb9\x62\x11;h" "\x85`\xaa\xaesW\xc0uK\xb2~\xc2\xa1\xb8\x08\xc8\xb5\xe8\xe1\x03\?\x84}\x8d:\x8d\xd2\xd8\xa9\xda\xa0l\x44\xd6U\xbfu\x9d*p" "J\xe1\xa9Z\x87:\x86Hp\xda\x61\x85\x05\xeer\x11\x06\x1d\x85J\x0e\x88u\x9e\x1b\xab\x04\xcfh\xb3\t\xb7\xb5\xbd\xab\x19-\xe0\x9e\xfc" "\x31\x18\xd5\xae\xea\xf8(\xc1}\xfci\xb0.+\xb7\x0b\xeb-\x8d_\xa0\xf7\xa0n\xfe#\xd6\xa4l\x45-\xf6\xbc\x85xNn\x36\xd8\xe1" "P^\xb7\xa6\x83\x61\x89\r;\xd4\xab\xe5\x08\x66\xb5 \xbc;\x88\xfa\x37\x1cV\x32u\x38\x38\x61p\xd7\xe1\xd9\xadI\x9d\x1fm\xdbN\xa8" "\xc0\x65\x87\xba\xad\x8c`\xf9\x84\x43}I\xd5\x83\xf2jn\xdf\x94\x7f\xd0=\x03\x0fz\xe7\x10\x8dk\x8b\x8e&\xb4\xec\xa3)\x63p\xa6=" "\xce\x9f\xb2`\xa7\x43]\x31\"\xb8\x30%K\xc8\xaer%\x36\xd4\xa3\xc7r\x88-\xabR\xea\xe1\x34\xe0\xfa\x9a\x43Wt\xb9L\xbe\x97}" "\"\xa6}\x8fN\x99\x00\xb7\x8c\x85\xedS>$\xe8V\x1b\x61\xa5>\xf7\xb4\xd0\xe3\x1a\x1d\x93\xe2z\x87\xaa\xd7:\?\"\xd4\xe9\x30\x82\x86" "\n\x88\xb2\x0bZ\xda*\xb1\xad-\x17\x12\xb1`x\x37\x19l\xac\xc4\xf8\xa2\xba\xc7\xe4\x8a\xc7\xd2\xb4\xc7*\x37\x92\x19K\xca'\xf4\r\x61" "\xc4\xda\xe6\x0c\xce\x1b\\s\x88\xe1K\xcd\x10\x34\x36u\xe2\x9c\xa0\x0f\x8e\x12\x9b\xc9\x07\xb3\x03\x95\xd8z\xe1\x9c\xe0\xd9\x8dz\xe9\x64\xb7:" "\xa2\xfa\x16\xf5Z\xe7\xbf\x9c\xd3)\xcb\x87\xcd\x9ds\xe8\x87\x83\x43z\xe1I\x63\xe3\xb3:\x93g,n/\xc6=\x95\xbcu\x8a\xc9`R" "\xd8:\x87\x84\xda\x16!\x98U\x35\x88\xbb\xac\x08\x1d!\x97um\x8e\xf3\xc3z\x45\x1a\xc1\xa2\xe5Z\xd4\x91X\x8e\x86m\xbe\x10\x8f\xcdz" "m\xc7\xe3\x9d\x0e\x83\xb6Q\x9f\x0biL\rK\x10\x9b\xcc\x39\xac\xd4\xe5\x9a\xd5\xed\xa9I\xb4\x16]\x1d\x32VI\xb0\?\xe2\xb0\"\xf0\xfe" "\x88w\xf3\xde\x97\x88\xe1,\x8bT\r\x8f\xf5\x43\xae\x35,LU\x62\x1b\xd3\x16<\x15,k\xad\xea\x12R\xe0\xb2\xc1\x35\x83\xa7\rV&" "\x46z\xb6Jxv\xfb\x8c\xda\x1c\x33&\xd7s'\x9b+\xb1\x96\xa6\xc0\xf8\x96X~\xb6\x12\\\x9a\xf0\xca\x93\xd8r\xa9\x12\xdc\xa8\xd3\x95" "-\x63\x18\xd9\xcenO\x9c\x13S\xd7\x00\x1a\x1b\xad\xb0\xa0.h\x18\x8c\xf7T]\xe4@W\xba\xf9>\x8f\x85+\xb5\xc1N\xfd\xaf\xc6\xa2" "\x1e\xac\x91\x8b\x98\x32\xeb\xc9\x98\xfc\x62Y\xf7\xd4\xea^\xae\x04\x8b\x0e+\x9f|\xbf\x01\xc1\xbe\xfd\xa8\xde\xa4\x1a\xacs\xe8\x9d\x91^\xe6\x05" "\x1c\xaeqxvg+.\xb5zL\xdcn\xd2\xfc\x85\xb1\x18\x8b\xf5\xec\x8a\xc5t\x90L\xc6\x8c\xc2xo\x1b\xa3\xdc\x9e\xda\xb6\xc7\xda\xb6;" "\xa3\xe9m\xee\xf9\xd4h\x8c\xbb\xed\x02\xa9\xb0Y\xbd \x08\xc8\x1d\x01@n#\n<\xa9\x46\xcc\x08\xea|+\x1blQ[\xb3j\xd4L" "\xa8\x8f\xc5x\x10\x43\x0fV:\xe1P\xc1\xbf\x41\xaf\xd4\x8f$\x62\xc3;\x0e\x83\x66\xb4\xda\xbe_\x8dY_)\x1f\x64\x86\xc5\xd3=\xc6*" ".'\x34\xb6\x8b\x9ek!X\x1eR\x8f\x0e\xfcVI\xbc\x9awX\xb9\x1a\xb2\x9d\xd5\xa5\xd7v\xd7\xd9]V\x80/+\xba\xd4\x46\x8cP" "\x97\x9d\x08\xea\x18\"P<\xa9\xd0\xd6\x00\x31\x9d\xecw\xe9\x12\x13\xf0t\xd6\xa1\x95\x30\x82\xeb\x0e\x91\nS&\xdd\x10\xdb\xee\x8at\x36\xd8" "\xa5^k\x08uS\x86\x41\xb5\x8d\x43pv\xd4\xa1g\x66\x43\x62\x97\xbe\xcfIX\t\xf2\xc8m\xbb\xcb\x86\xaf.up\x0b\xc8\xb7\xbf\x01" "\xf3\x05\x35\x10\x41\x90;\x14\x80\xbc*\xb7\xdd\x95\x0c\x36\x38\x34\x36r\xba\xab\xb0\x9d\xb7\xb5g\xfeW\xd6\x9e\xf9\xb3\x9bY\xfciP\x97\xa1" "y=\x07!\x94\x1b\xcc\x65Q\x9cpq=\xcc\xcf\xf8g\x35\x8d\x90\xe0\xb2\xc1-\x87z\xf3P\x83Z\x1fy\xeb\xbf\x05\x06K\x05\x0f\xc6" "{\x39\xbd\xbd\x89\x98.g\xf3z\xab\x82\xd0V\x99y\x31\xba\xe3\x06\xa0\x04G\xd1\x63\xc4\xcduQ\x87\n$\x43\x83V}>\xe8\x98\xb0" "\x9a\"\xcbY\x95Mm\xa2\x04N\x18<\x1du\x9c\xd4`\xae\x33\xe8\xec\xd3 _\xe2\x14\xb8\xa3\x8e/\x11\xec\xeeK\x86\x9a\x82\xee!\x8d" "\r\x18\x8e*O\xde\xd6\x9fyy&TN\xfeN\xea\xf6\x34>`\x1c]\xb5\xb4\x93\xc6\xb4.[\x05\xcak\xb8\x95\xaf\x96j\xaa\x02\x83" "\\\xad\xa4\xd9\x35\x9e\\\x18+/\xf5\x8a@(k&\xdev\x61L\xef!I\xf0\xb4u#\xf9`u_\xbd\x9c \xb8\xd6\x65p\xcd\xa1" "\xad\xe1\xf2z\x39x\xdb\x17(\x80\xfd\x06\xa7\rj\xd5\x06\x9b\xc6\xd1\x96q\xb2k\xa4\xf6\ro\x7f\x37\xd8Wv\x42\xde\xcf\xdf\xb6\xf7\x16" "\x08\x83\x46-\x42[\x96\xf1~\xbe\xf6\xfe\x12\x8c\x87\xda\x34X\xb0\xc3\x04\t\x16\x9c\x43[\x99\xe5mq\xe2\x9d\x8e\xc0'\x86\x36\x89Y\xef" "\x90\x0f\x87O\x9eS\xc6\x18\xe0\xe3\x9a\x13\x1a\xa4\x11\xaf\xc0}\x87\xea\xf4O\x83=\xd3\x95\xe0\x88\x65\x35\xd2\xf7\x44\xc7\x8e\x98\x65\x45\x8b*" "\x81+q\x87\xf1\xa2\x83\xb7@=z\xf0`\xbc\x37\x17\xaf\xd4\xaa\xe1\x1f\xbe\x8d\xd5\x1bl\x32hYN,\xeb\xf9\x83\x07\xc5\xa6\xceq\xf0" "\x61\x42\xeb@\xee\x35z\xa9\x99~\xc9\xa5\xc6\xb2\x15\xd9Z\xa1\xe2r\x19\xb1\xf5\xd6P\xfb\xff\xbc\xad\xda\x04V|\x91Jl\xd3V\x66\xf9" "\xf0\xc4\xaeu\xf4\xf9\xf0\xe4\x88\xc3J\xf0\xd4\x19\x87\xb2\xec:\xa1m\x34\xdcir(\x1e\x95\x87\xc7=v\xce\x0f\x62\x11i\xedW\xbd\x9b" "m\xe7\xf5~\xa2\xc0\x15\xb1\x31~\"\x16\x8d\x64\x9f\x88i\xbbR\x17\xf8\x02\x37\x1d\xba\xf8Q}\xd9\xe0R\xe5S\xe3\xa4\x43[`\xe5\xf5" "\t\x66\xc0v-\xdb\xa8\x63\x0e\x7f\x16\xd4:\xb4\xb5\x17\xb4Q\xebV]\x87m\x9b\xf7\x08\x42\x39\xe5\xd4\x91M\x62\x08zY!&\xe6\x65" "\x1b\x1b\x95\xd8\x99\x33\xe1\x99JJ[\x17Z\xd0\x06#\xc6\xdc\x89\xdc\x39\x31\xb5\x33\xe7\x07\xf4\xf6\xe7\xa0\xda\x34:ok\xbd\xbc<\xf0W" "g\x92\xd2\x1d;\xa1\xf7\x13Q\xb1\x35.-\xdb,\x07\x31\xbb\xaf\xc5\xa0^\xfe\xdc\xb6wK\x08m=\x94G\xe1W(\x30h;G\xf9" "\xa8\xbc\xac\xde\x02$\xa8Z\x14\x8d\xf6G\xf3\xda\x8a\xa3\xc9=[\x06\xe5m\xa9\x94\x7f\x62=\xf8\xc4\x01\x12\x82\xf3\xaa\x94z\xa0\n\xb8l" "\xa9\x97\xc7\x0c\xae\x39\xac\xf0\xb1\xd6\x19\x34M\xaa\x07\x04\xc4\xd6[+\xb4*\xe3\x63\xde\x16\x87y\x9b\xb8\x0b\xd4W\x0e$\x38~v\xdbR" "m\x19\xf1-\xcb\xdc\xc6\xc1\xb8n\xcbi\xda\xe6$\xe0X\x38\xd9m\xc1\xd3\xd1\xb6\x96\x0eJ\xc9\x16\x0e\xf9s`X\x9b\x0bk\xfa=\x06" "\xdd\xb5U\x1f\x63\xc6\x90,\x00\x31\x1d_\xd3\x86\x14\xb7\x95l\x02h\x41\x97\xc3V\x82\xf9\xb8\xe3t\\\x98\xf5\x12P\x0b\"\xc2\xca\xa7\xdc" "\xae\xde\xa9\x43\xb0`\x94\x06\xb3j\xc5\xb0m\xf6:\x80\x33&\xc2\x8a\x96\xba-\x87\x00\xb5\x00\xe2u-T}\xb9\\\xa0\x0e\xe8j\xc1\xb1" "m/\xd1l\xe7m\x1d$\x10\xc3\x8am\xc9\xe5\xf5\xe4\x92\x30\x1c\xd5v\x65\x0b\x99|\xd2=\xe8\x63\x63\xd2=k\x33\xfd\xbc\xbe\xc4\x02\x88" "\xf5\x80nT\xe4\xd5|O\xa0\xc5\xadk\x07\x94\xc5t\x87\x16\xab\xed\xc3\xe5\x93\x12\xfa\xa2u\x0b\x8e;\xd4\xa3.\x04\xc7\x9bl\x9e\x84`" "\x8bM\xba\x11,\xea{\x1c\xdb\xf6\xa0\xcev\x9e\x0f=\xcc\xa8\x61\?\x62\xba{\x93\xafx\x86\x90`\x7f\xb2\x64Y\xaf\xd9\xaf\xba\xaf\x9aW" "\x63&\xc0-+\x1a\x9bo$\xdb\xa5\x64\xbb\x64\xc1q\xfci\xd0\x46\xe0\x64\xaf\xc3\xe0`\xb8V\xb6n\xb8W\xdc\x8a\xeb\xae\xa5\x05m{" "\xb6\x37h\x9dQh\xbf\x9e\xf3\x93\xed\x86\xf5\xaa\xad\x34\xa1\xa7\xd2\xa0'\xd4\xe3\x0e\x42=\xee@P\xf7`z\xf5]\x19\x42\xd9\x9e\xa6;" "\x43\xc6\x10\x8c\xe6\xa8U\x62\xd1qv\xb7\xa8\xe7\x38\x88\xe9\x66\xd2\x80^\x0b\xd8\x1e\x90\xb3\x05\x1d\xdd\x06\x82\xa6\x41\x85\xca\xf3@\xd0\xb5\xa9" "\x90n\x38\xb7\xcd\xe3\x37\xe0\xe4\x90\x1a# \x38\x95W\xa8s\x99\x01\x35\x0b\x14\xc8\xe5\xd9@XSR\xc8\xc3\x37\xc0\xf6V\xd3\x97\x81\x90" "\x97X\xb6\x07\xf4\xa5\x1a@\xed\x1f\x07\xa2\xc9-\x85S%\x83*\x86\xbe\xb0\x05\xb8\xdb'\x19h\x93\x31gr\x80S\xfbz\xdf\x94\x41\xab" "\x16sg\x06\xc8\x17\x10\t\xd5\xbd\xbe\x04W\rn(\\\x39\xe5Pn&w\x19\xf9\x15\xb6\xc8\x81\xa4\xa0L\xe3\xcf\xa1\xf8\xa0\x9d\xad\x39" "\x37\xa6\xeb\x01\x8b\xa9M\xf2\xf6\xb0\x38\xb5\xa5\x45\xc2\xf6\xb0mn\x15\x83\x46\xf6\x94\xc5\x64\xb0\xec\x30\xd8\xf4\xd1\xba\x64S\xa1\x92\xa9\xa3\xeb" "\xe2\xb8\xc5\xe7\x42]j\t\x44\r\xab\xf5\xf6\xf6Jx\x86\xbd\xee\x8a\x95\xa6\xc0`r\xcd\xba\x36\x89%\xbd\x35\xd6\xf1\xee\x05\xed\xd2\x06w" "\x1a\x93\x1d\x19~v\xda\xb5\x61\x00nL$'\xfa\xd5\xad\xf6NV\x97\x18\x84\x62}\xcf\x8d.\xc6\xa2\xe1\x8d'\x62\x06\x39]!\xd4\xa9" "\x08\x82'\x06\t\xd5\xa5\x31\x61R\x9a\x0b\xfb\x1a\x35\xc6\x8e\x07\x90\xf7\xfc\x00\x37\xfb\x1d:\x01\xf5\"J(\xfb\x1b\xec\x83\x34\xe6\x41\x9a\xf7" "\xed\x64\xf5\xfa \xe1\xd9\x8dV\x1d\xd6\x35\xb6\xd9\x1e\xb4\xed\x33\x96\xf4\x0c\x8bS\xe0\xb2\xa6L\xfa\x16\x83\x96\x9a\xa4w\x45\x63%\x15\x42/" "\x04\x10&\xddvK\t\xb1\x9d\xac\x43\xee\x9btZ,\x17\xaf\xd6\x07\xdd\xa2|;=\xba\x1b(pZ\xe1n\x91\x10\xf3\x03}\x93\x18\x41" "\xfa\t\x00\xa4\xa5\x13\xa1\x1e\x85Jp\xcd\xe0\xba\x42\xea\x1e`n\xd3\x61%ios\x98oV\xcb\x43\xc4\x06\xe7\x15\xb2i\x8b\xc3\xb7\\" "%;*<\xe0\xda\x9a\x43+\xd7\x1e=v\xdd\xe9\xd1\x99< \xcf\xfb\x01\xb3JU'\xd2\x80\xdc\xdf t\xd4p\xc6\x92\xb0\xc3\x00<" "\x35\x1f\xacij\x9d\xcf\x11\xea\xc0\x86 M\xbc\x08yt\x36\xa4\xb1\xe2\x8e\xc3\x88\xaf=!\xb8<\xa3p_\x7f\x8a\xebk\x14\x36n\x06" "\xb9\x85\xa0G\x33\xd7\x85\x32\xa0I\x0f\x88\xb2P\xe7&\x12\x1bQ\xc8G\x38w\xcc\x33\x18\xe0\xa9\x33\x0e\x83\xf6\x66g\xdcT\x46\xe0\xaf~" "\xe5[QZ\rj\x91\x03\xd8\xb3\xa1\x90\xc3\x14 W\x33\x84\xba\xf6\x64P\xe7z\x0c\xaaO_\x04y\xf7\x81\x30\x18n\xc3\x9f\xc4\x06\xed" "\xebh\x30\xd2.\x0b\xa6\xfe\xcd\xb3;\x93\xfa\xc6\x00\xbe\xf1\x16\x39 \xef=\x02\xae\xee\xa9\xa5\x0c\x82\xdc%\x02\xdc\x33GP;\xa3\xe1\xf0" "\xba\xff\xaa\xee\xab\t\xd5\x07\xa0\x06G\x16\x34\xc8I\?\xe0\xa9\x33\xf1\x9a\xe6 \xd6J\xc3\x35VH\xa3z\xa7\x8b\x30,\x35\xe9N\x04\x63" "\x08\xaa\xe9\x8e\xc4\x96\x15\x0eW`\xb0\xb2\xa1\xabz\xc6\xa2\xce\x9c.}\x11\x9b\x33\x38_\xefP^\xa7\xae=sNL/\xecH\xach" "\xb0\xa4\x90v\x15\xbc\x01\xa5\xb7\xa1,V\x8a\x07\x17\xe2\xe6:\x8d\xf1\x08@\xe0i\x85\x8d\x9b\xe7\xa6\xe5\x9c\rph\xf2\xffT\xc8qq" "@\xe1\x66\x9b\xc2=\xb6\x87q\x1d\xe0w\xe6\x92\x1d\x36\x99\x45\x9d\xe1\xed,\x46\x9d{\ni\xa3\xbb\xb3\xa8\xb7\xb6\x01\x35\xfd\x8a\xc1\x33\x06" "\x37\xcf\x81:\xd4\xedl\xabo\x18\xc2\x64\x88\xba\xb6\xadK\x07\xc0\xe6-\xbdI\x85`G\x7f\xe5\x8d\x17\xc4T\xb7\x04&\xf5\xb3\xd6\xabm" "\xeb\xa6( \xef\x0e\x11\xea\xc3P\x1a\xe4\x85\x62\x04\xc7\x46\x14j\xc7\xb0m\xf5\x62\x86\x41\x84\xb2\x8cp\x16\x96\x8c%\xbau\x05\\S\x82" "!\x97y\x84jM\x8a`\xa1\x36\x9a\x9f\xd6 \x1d\x95\x13:!=\x95\x04\\\xd5\xec\xc2\x93;\x9e\x63x\xba\xcf\xa1\xeej!H\x87\x82" ";\xdb\xce\xbf.\xff\x08\x83\x89\xd3\x1e\xd4\xf5\x10\x82\xad\xc3\x9e\x8d^\x97&\xd4\xcb\xf5\x08\xf6kqT\x0e\xf5\x10\x9cRi\xac\xda\xb6+" "\x0f\x9a!\x38_\x81\x95\xcc\xb9h\x11\xa8\xcc\x45\xfb\x8d\x95\xec\xb4W\x32;\x1c\xc0\x46-.\xaf\xb6x\xac\x41\xe1\x0c\x95s[\x1dH\x02" "\x36j\xfa\xa4\xbb\xa5\xf2\x46\x0c\x62\xa5n\x14\xbdn\x30\x32&\x0b\x11\x8fY\xd5'\xe5S\xba\t\x87\xe0\xd4\xba\xc3\n\x05\x93\xb9\xb2w\xb8" "\xb3g\xf5,\x30\x98\xaeS\xcf\x32;{\x11-\xb2v\xf6\xf0\x07\xb8\xdb\x11\xd6H\xc9\xec\xe6\xf8L\x16\x61\x31i\xce\xea\xac\x05\x31\x8e]" "\x80[[\x61\xef\x82\xce\xfews\x41\xe3\xac\xc2\xa6\xc6\xb3\x1b\xb5\xe2\xf0\x63\x37\x17\xef\xed!\xaa\x9f[\n\x06\xcf\xa8\x03G\x04\x39m\x10" "h\x98]\x46\x89#'\x61\xb0yZ\xdf^\x42\x8cg\xcd\x80\xdc\xf5\x02\x1c\x9f\xd3+\x88\x08R(\x42\xb9G\x37\x65\tx\x86\"p\x06" "K\x88\xa0\xf6\xf4\x39\xb1\xb8\x66\xda\x62s\x32T\x17'<\x16\x9e\x9c\xd7\xab\x31\xbb\xd6\x45\x11\x82\run\x8f\xd8\x94\xfd\xba<\xa1N\xc6" "$\xf8\xc4\xb2\x45\x63\xeb\xdb\x15.\xb9\xb7\tx\x66\xe4\xec\x66I\x87>\xc4\xb8\xcf\x0e\xc8\xdd\x33\x42\xd9\x45\xf1\xf2\xd8\xaf\x0f:\xbb\xce\x8d" "\xe5Z~%\xd6qnl\xf3\xf4\x39\xb1\xb0\x65\xf9\xdc\xd8\xe9\xc9xP\xcbT\xf7\xb4\x01i\x03\x0f\xd8\xdan\xb0'\x98\\\x11\xdb\xf4\xa2" "\x96\x61\xd8\xd6\x13\x34\xae\xa9\x92#\xc6\xdb\x84\x80}'\x1d\x42m\\-\xc2r\x97\xee[yP.\x65\xb6j\xa9\xeb+\x07\x80\x63=z" "\x02\x8d\xe0\xd4\x90\xc2\x45#\xce\xdb\x30\x84z\xabS\x82\xd3\xfa\x00\x1a\x82\xab\xf9x\xbaV\xbd\xc6!\xb6\xae%\x16nV\x8a=\xaa\xdbP" "X_>\xa7h\x31\\)\x1c\xdc\xd5\x39\x1c\x82\\H\x12\x9e\xdd\xd8\xd3G\x46\x19\x8b\xe6\n\xdat\x11\xdb\x9a\x15\xd7;\xf4\xa5\x88\xd8\xb6" "\x96\x9a\xfaU!\x14\xc3\xe2\x1e\x31/\xc6\xb0Zy\xdd\x05\x1a^;$\x35\xc7\xf7\x8a\x10\xe3\x43\xcd\x80\x8d\xab\xfa\xea\x00\x83zT\x89`" "SI\xe1\x8c\xa5>\xdd\x8e\xda\xd3\x37\xea%v\x82\xb1\xd5_\x89\xadyL\x1d\xc8\xef\xe6\xd4\x1a\x1epn\xed\x1c\x64\x8b\xcdOj\x8c\xae" "Z\x01\xd7k\x15n\xa8~\xe3\xcf\x61\xd0\xd3\xa2k\x39\x89\xed;\xd4\x8d\xef\xdd\xbc\x1e\x1d\xed\xce\x04\xdd\xac\xb9\xb5\x64W\x96\x0e\xf2\xe6\xf8" "\x98\xdc\"\xa4\xb7`\xa4\xe6\xf5w\x81g\x14j\x13\xc7zt\xd5\xe0\x9a\\\xe9\xe1q\x14\x62<\x18\x06\xecm\xd6\xde\x0b\xc1\xe9:\xcc\xda" "t\x1f\x82\x31\x11\xd5\x63\x1cj\x00O\x9dT\xc8\xd7J\x01\xb9\x35.p\x9c\x30\xec+\x9d\xc3\x92\xba\xc8\x07\x1cV,u\rG\x18t\xd6" "\x87\xfd\x93\xc9\xd8i\xff\x80\xff\x31\xb7%%\xb6\xafP\x95v_]\xf4\xef\xee\x43\x99\xcenl\x45\x1d{\xe7\xc6h\r\xa1\xb1\xdd\x41\xf5" "Z\x8dX\xdbi\x87z&\x83`\x41\x39\xad\x0c'\x08r\xc6\x82|\x1bU\xb8\xb8}*\xda\xe9w\x91\x63\xcb=^\xab\x95\x1b\x32\x0bS" "\x1a\xa3\x85\xf0\x13\xbc\x02\x8aW\xc6\xb6\xca\xd7\xa0m\x34\x38\x33%\x0fHm\xb5\xf9\x37\xddQ\x93\xa0\x96\x43\xbc\xa7\xa4\xbd\xe4\xf5|\x13p" "]\x85\xa9\xf8\x91@\x90\x93\x1c\x42\x1d\xf2\x18\xac \xee\xb5;\xd4_\xf7\xea\x13\x1e\x17\x13\xca^)O\xdb\xf6\x1at\xe9\xb5\xd7\xa8\xedq" "\xafI\x9e$\x9a\x1dR]\xdbk\xb6\xaf\x02\xe5\xa1{\x9e\xac\xec\xb5\x84=\xd3\x9a\x8fg\xbdg\x87\xc4{-q\x43\x8f\x8e}\x08\x36." "y\xaax\xaf\xd1\x83\x15\x38>\x64\xc1v\x9d\xcc\xee\xb5k\xb9\xee\xb5[\xe6\x02\xb5;\xdc\xeb\x08O\xb5\x11&\xb4\x1c\xd9\x1b<\xbb\xd5*" ";j|\xb6M\x62}\x0e\xf5~\x01\x83q\xc7i\x0b.\x39\xd4U\x0f\x82<\xf5\x02\xe4Q\xd7\xde\xa0\xf6|\x80\xbc\x43J\xe8I\xe5\x1e" "\x07m\x96\x11\xa4\x35\x37\xa1\x9a@\"\xd8\x99uX\x41\xe8,\x18<\xe3P\xd7\x17\xe2Vm\xc2\x61\x30\xb9\xa5\x8bS\xc4\xe8\x14M\xa0\xc7" "\xcbr\x31\xb7o\x43\x63\xe5\xac\xc3J\x0e\x1c\xf0\x08+o\xe2\x32\x16\xd7\xd4\xaa\x07\x62\x8d\r\x37\xeb\x95w\xc4\xa6\x8c'\xda\x83\x00.\xe5" "ty\xee\xc1\ni\xbe\xb7\x46x\xce'\xbd\x66$\xc1\x05\x87\xda\x16\x10\xe4j\x94\xb0\x82\xb0\xb6V\x19\x66\x11[/\x38\xac$X\x9fs" "X\x39\xe8@\xec\x64\xd6\xa1W\x62pj\xce\x61\xa5\xc0\xcfX\xbe\xdcH\x13h\x12nZ\x99l\xb5\x19\xd4JG\xf7\xa3\xfb\xae{\x83\x61" "\xcb\x00\xcaUo\xe0\xb9G@\x42\xe7@\xad,\x08\xe3\xae\xb9\x38\x37\xab\xb1\x35\xad\x16\x35\xae#\xac \x9chu\xa8{\xed\x0c&s\xfb" "\x1aT\xb5\x1e\xd4\x83\x19\xc0\xd3Y\xbd\xb7\x84 \xed\xb9\x08+\xb4\x36\xb4\xbe\xbd^\xce\xa9\x94ps\xcf\x61\xe5\xd3\xee\x92\x43/,\x04\xcf" "\xf9U\xef\x13\x33\x08\xa1u\xf5V\x89\xcd\xeboz\xe8\x03\xd8\x32\x1f\xce\xe4\x34\xd8jW\xa8\x10\xec\xd0\xca\xd6\x61\x1c\xb0W\x86o\x9d\xfd" "#\x36\xd4\x80\xdeM\xcf\x10\x10\x1b\x96\xa2U\xa7\xfc\x88\x15[\xe5&\x35W\x95\x8c\x45\x43\xe6\xf4[\x62\xda\xf2\xa2\x92\xf9~\x43p\x61T" "\xda\xdb\x8c\x96Z\x64-\x1cP\xcf\xb0\xf6\x06\xf5\x16\x96\xae\x10=\xa6\x1d#\x63\xf1\xda\xa6\xb7\xd0J\x9a\xfa&\x1d\"\x34x\x62\x1b\xc9\xce" "Z\x01\xe3\x43tr\xc1\x82\x45\xdd}\x45\xb0\xa1\xd5`\xde\xa1\xab\x83\xbc\x35\x0c\xe1\xe8$\x02\x31\xeeU\x10\xea\xad+\x06\xbd\xd0t\xcf\x42" "`\xd9\xa0q\xd1\xb6\x62p\xb7\x92\x94&z\x80\xdd\xc6\xc1`\xd6\xa1\xf7k\xea\xdb\x43\xa0*\x80\x1e\x18\x11V|\x32\x32\x86\xf9\x9c\x0e\x34" "\x88\x95G\x1dJ\x31\xd5lx\xec\x9c\n\x12\x07r.\xdcX\x87\x64\xc8\x19\x1e\x62\x34\xe4\x02\\\xb3r\xac\x07\xf6{\xc3z\xfc\xb7'\xde\xbb\xac\xcd\x95m\x94\x02\xdcTHO\xee\x84z\x34\x85\xa0\x0e\r\xe2H" "K-\x06\xf6\xccK\x1b\xa1u\x15\x65t\x96r\xa7\x9a\xaf[\xee\x95\xd1\x03\x8a\x03\xa8}%\xaaS,@\xae\xfc\t\x83\xc6^\xddV\xda" "+[gP\xd6\x05;\x61\xb0\\\xd2k\xd1\x8c\xe9\xfcj\xcf\x66)\x80;\xec\xc2\xcbq}\x87\x9e*\"\xd8\x62p\x42\x19\xd4\x9d;\x81" "J\x45\x9f\xd6\x00lUY\x12\x1e\x1f\xf2~\xb7\xde\xf5\xb6\xd8\xa0\xde\xef\xb4X\x39\xca\xe5\xf0\x87X]\xef\xd9\xbd\x15]\xd7\xd5\x95)r" "\xd0X\x13\xcd\xd7\xb2\x42\x10\x8c\x9b\xe7\t\xe5\xeb\xdc\x19\x0e\x1c\x08&\x9b\x0b\x9aP\xb6\xa0%U\xeb\n\xe6\xde\xfa\xd3x\x91\x9b\x62L\xb5" "\xaap\xbdV\xcf\x41j\xf6\x03\xae\xc1\x1b\xea+\x99\x36\xd4k\xa7\xd2\xd0hq\x81\x62v]\xbf\x9b\xd4\x16\x02\xd6k\xddT\x30\"\xd2\x37" "\xd8\xd5\xd3\xa6\xba\x90\xc7p\r\x63j\xe6\x02\xa8\x34\xc6\xa8\xf3\xc1x\xa3L/o\x10+\x9d-}p\xbbJ\xc3X\x00\x46\xb9&|\x91" "\xc6\xf7\xdf>y\xfa'>\xfc\xff`\xf1\xe7\xb3\xfb\x63\x61\xed\xcaYy\xe5i\x88\x1f\x82\xa6\xa2\x05o\x08:\x64K%X\x03\xfbU\x12" "\xee/\xfc\n\x95\xff\xf6I\xd3\x9f\xfb\xe1\xff\x13K\x89\xfe\xf7\xf4\xecL\xaa\x9e\xf8\xfd\xff\x45N\x9e\x8f\xe8\xdd\x0c\x66\xd0\x88P\xbe\xe2\"" "\xfbT\x43\xb8\x95\xd3\xbc\x87w\x93\x01}\x36\xaa\xda\x9e\xa8Z\x9a\x8e'\xc4\x0b}\xd2\xdc%\xdf\x83\xa6\x61\x13\x1a\t\x83\xce\x85 \xdb\x08" "\xb4\xcaG\x16\xd4\xff\x01\xed\xdc\xc4\x93\xfdg\xb7&\x99\xf8\x80\x30\xd0\x36&W\xcc\xc2\xde\xfdp\x9d\x1b\x46\xc1\xca&\x92\x04\x8d'\xa2\x13" "\x1aG\xa4m\x8cW\xd3*\xa8I\x1f*Y\xdf\x01#!\x9d\x37i\x10\x99\xf7\xee\x33\x18\xd7\xef\x9a`\xa9\xf8\xe4\xb8\x7fMz\xc4\x65\xac" "\x06+\\YP/\xc0\x95\xe6\x82\xfc.\n(\xc8\x0f\xf0\xfc_\xf2\xac\x19\x8a\xf7s\xf1\x9e\xe2)\x8b\xfa\x9cU|r#\x1c\xd0\xcf\xfa" "N\xa5\x06k\xb6\x45\xfe\xc9\x66\x89\x65\x92\x1aT~\xea\xa3\xf7#\x00\xfa\xa9\xbd;\x10\x80\x16\xa7R\xc7\x10\xc0\xf0\x98z\xfa\x97\x10h\x90" "/\x31\x02`'U\xfd\x65\x04\xd0!\xa6.\xff\x05\x02h\x44U_|[\x86\xb7\?S\xd7\xfc-\x02\xed\x92\xf8\x1e\x04:$p\x1e\x02" "\x9d\x02_\x80\x00\xba\xd8\xd4\xab\xff\x02\x01\x34\xea\xd4\x9d\x1fG\x00\x43V*}\x03\x02hq\xa9K\xbb\x10@\xe5\xa7^\xf4{\x08\xf4\x0b" "\xfai\x04\xd0;\xa4\x0e\x0b\x87\x10\xb8j\xe0\x7f#\x80~,u\xfdk\x11(J\x9a\x43\x08\xa0\xe1\xa6\xae}\x31\x02\xe8\xdbS\x07@\xb9" "N\xe4\xba\xf1\xf1\x0c\xbb\x9e\xf4s\x84y\x8c\xa2\xe9\xcb\?\x8b\x9f\x44\xc0\x03\x97\xe0\xcb\x98\xa0# \xbe~S\xe9\xb7\xe2\x0bV\xb6\xa9w" "\xd4\xe0\x8bH\x9az\x12\xbeLJ\xe0J|\x11\x91S\x87\xf1\x65Z\x02\xb7\xe3K\x8b\x04\xbe\x80\x00\x45\x1e\x42@$M]\x84\x34K\x12" "\x38\x1f\x01\xcc\x98R\x07\xa5\xc4V\xe4\xcb\x91\x0co\xdf\xa7R\xfd\x08\xf4H\xe6\?\x41\xa0\xd7\x7f\xea\x93\xc0\x65H|\xd2\xe5:%\x8c\xa1" "\x0c\xeb\n^\x98\xa7%\x80\x12\xab\x1b\xb0,\xea\x06%p\x61\x86\x13\x83\xd4m_\xc5\x97\x61\xcf}[\n\xe1\x14\xbeH\xf9\xa4\xbe\x9eI" "\x1a\xa4XR\x07\xf1\xd3\x8e\x94\xd8}\xf8IJ,u\x01\xbe\xeczi\x94\x8d`\x43\xad\xfe\xf4\xcf\xb3\xac\xca\xcf \xcd\x9e`\xff\x08i" "\x46\xadX\x1a\xa8-\xaf\x43\x9aN\xa7\xb3/\x81\xe3H\x33\x66<\x37\xd4[\xd1\x89K\xd1Tj\x07_\x1a\x05\?\x95\x94\xe7" "\xb8\x96\x92^\n,\xa9\x65(m\\\xeb\x92\x36\x95\xed\xa7\x96:O\x9c\xf3\x32\xdc\xf3\x82\x1aU~\xe2\xda\xbcW\xe5\xbe\xe7>\xa6J\x12" "\xd7Ji\xa4&\xf0\x85\x95{\x14\x01\xd6\xe9\x83\xf8\t\xddN\xfa\rw#\x8b&\xaf\xb8)\xcb\xa2\xa5\xd9ky\xc6K\x43z\x9b\x0b\xc7" "\xf0\x65\xd6\xd3\xb4\xb9\x02\xcc[\xee-\x1d.\x85\x14\xcb\xcb\x1eG\xc0\xfb\xe7\xa6%\x93\xab\xa5\xcbK\xb5\xe4\x95\xc2:}\x43\x86\xe7\xc9\xa9" "\xc3\x39\x04\x44{\x9f\xf4s\xfc\xb4\xaa\x8c\xc5\xf5u\xc6\x46\xbdT\xdc\x45\xef\xc6O\xeb\xca!\xaf\x8d\xa5RW\xe1\xcb\t\xcb\xbd\xbe\xd1\xc5" "\x61\xf3|\x1a\x32\xedw\xc6&\x35S.*S\xd7\x63\x90j:\xe5\xcc[\x07\x1b\xd7\x37[\xa9\xd6\xb7\xb8\xb2\x9d\xf1\xba\x18t\xe6gL" "m\xea[-\xaf\x96!\xe7\x90\xc5\x82~\xa3i\xd3\x95m\xceK\x9e\xad{\x04\x89Y,\x37\xe0')\xba\xbb\x7f#\x43\xfb\x98Tz\x1a" "\x81N\xc7Zt~\xa4\xfb\xba\xf6O\x10\x90\xa2;\xdc\x0c:\xbb.\x45N\x13'M{V\x17m,\xa8\xcf\xe1\xa7\xbc\xab\r\x95\xff\x36" "|\xe9\xf5*\x98\x34\xb9\xda\x9a\\\xd2>S\x9b\x36\xd7\xf9z)\xb1\xfb\x30\xb4\xb5\xb5\xf8\x17\x96\x0ft\xbe\xad\xcd(\xd7\x0f\xb8\xc8\x83\xc6" "\x46\x1b{\xe3\xeb\x91\xe9\x86\xff\x34\xa4r%m\x1d\x9e\x17\xdb\x85P\xce\x9a\xa4\xf5,\rth-K\xfe\x85\xba\xf1\x1e\x04\xa4\xaf\xbb\x11" "\xbaZ\?\xaa\x35\x98\xb4P\x9cK\x90\x85\xa8z\xfa\x03\x19\xbeO\xc9\xbc\x1a\xbdQ\xb7\xac\xbb\x38\xbd\x46\xb0\xb1\xc1Kl\xc2\xc5\x91\x42H" "\xa3\x06\x1bY\x08\t\x12\x17T\x91\xe2\xc6\x66\x17P\x9a\x43\xfa\x93 x\xda\x95\xcd\xbb\xb8\x36\xd7\x04y\xfe\x37U\xf5Y`\xb1X\x9e\x83" "\x00\x0b\xa1\x1f\?\xb1]\\\x89/\x1d&`\x1b\xe5:\x8e\x9f\xd8\xd7\x81\xf9\x46\x1f\x34;j\\v\x16\xc2\x18~\xea\x32\x91;\xeaT\x1c" "\xde\xfcO\x1d}$\x13q\xce\x06\xac\xb8\x9e\xbd\xdf\x00~\xe2<\xear\x64\x61\xa5\x11q:G\x0e\xd9\x88\x9e\x82\x34\xdd\xa6\x00m\xec\n" ".\xc3O,\xcc\xdf\xc3O\xec\x18\xbb\xf1\x65]\x33\xe5.y\xea\xa2\xaf!\x31\xb5\xe5r\x10l\xb0\x9f\xeaOx\xa6\xa2\x36\x07\x16\xf0\x85" "\r\xed\xa9\x08\x9c\x32\x9e\xdb\x66\xac\xa0:Z\xf5KTS)U)\xccK{\x81\xee\x13\x98\x8ev\xd7\rQ\x9b\x1b\xcf\xe0\x8bM\x1d\xe3" "\xc6\x61\xc5\x8a\x38\xbd\xa4\x38\x9bV\xcb\x1d\xdeR\xea\xa5YU}\x0f\x89\x8b^\x98Y\xcd=\xd2)\xa8\x94\x46\xa7\x97\xd8\xb6\xd7\xa0t;" "\xe9'\xe1\xa7\xacS\x96\x19Q\xeam\xa0\x33\x62\xd5\xdd,\xe5\x9c\x9e\xcb\xf0\xed\xd3\xf3\xef\xfb-P\xeeq)\xac\xc5\xc5\x8d\xa3\x86.V" "\x0f\xa9'\x0f\x83\xa0\xd4\x05\xe6Hq\x33\x15\xf2u\xc0\xa2\x1e\x42\xd9\x9a\x1b\x0c\xbdq\\\x19\x8b\x9b\x1b\x8d\xe7\xb6\x93Z\xcbIG\xbfR" "\x8e\x38\x13\x66]LZ@\xden\\R\x36\xe2\x46\xf6\xea(\xba\x66\x1f\xb6\xb2\xd6<#\xce\xccSw \xcd\x8ag\x9a\xb7\x02\x97\xdd\xb7" "\xd4\xa5\xff\x8a\x34u^\xbcTQL\x9f:&,S\xce\xd5\xa9\x12\x63V\xa7\x8d\xeb\xaa\tI\xc7\xa4\x16KT\xd7\xe0i*\xe5\xdcg" "ltL\x39\xf3$x\x05\x12\xb3\n\x9e\x06:\xac\x82\x37\x80\xd5\x16\xaf\x82I\x0b\xe8\xe4\xff(\xe8\xf8\x04\xaf\x83\x85y=\x12\xb7Z\xa9" "\x36\x9e\xf6r>\xe3r\r:\xcfL\x83\xc1\xae\x63\xdeK\x83\xe5|\x03~\x92\xba\xa8\x16)\x44\xb1\x9f|\x1aX\xc3\xa6\x12\xd9N+\xb1" "\x9a\x39\xa7,\xaa\x9e\xfe_HS\xd4L\x93l\xd6\xabi\xdeKL\x34\xfc\xf0\xcf\x91\xa6\xe4\xc5\xb2\xa4t\x92,\xbb\x14i\x17\x0b&N" "#u^\x08\x8e\xa8\xda\xc4\xad\x35^\x86\x42\xf9\x38\xd6M\xd9\xbc\xd7\xe9\xae\x33\xd6\xedyI+\xb8\xe4\x07\xc0\xaas\x36V\x94\xd5H\x97" "\x39\xa2\xa2\xd2Q_\x7f+\xb2\x18\xf3\xc2\x14\xf4\x8bn\x01\x16\xab\xe9!\x10\x64\xed\\\t\xf4\x35/\xb1\x1e\xab\xdc\x66\xa9\xa6\xa3Y$n" "\xf4\x1a\x64\x35\xa1G\xd2u\x93\x34\x19\x36\x87k@Gj'}\x11\xe8\x9c\x30IuI\xf5\xbe\x0c\xcf\xc6S\x17T\xe1'khQ]" "\xbf\xeb\xc6\xb4W\n\xeb\xeb\x10\xd2\x9cR\xf4\xb8\x99\xb5\xbc\x0ct\xd6\xe0\x03\xc0\x62\xaf\x35\x8bL\x37\xbdv\xceh\xd1\x45\\\x88\xa5\xbf\x01" "\xac\x39\x63^N\xfaS\xe9\x34\xd2l\xb8\xec\x43\xaeH\xa8\xaf\xc3\x17\xbd\n\x99\xfa\xc4>W\x63\xf5\x95\x1dq\xca\x9bV)\xcd\x9c\x0c|" "\x1e\x04\xb3\xfa%\xc9\x96-\xd3\x9a-/\x31Q\x89\xaa&$\x96\xea\xbe\x1e\xddr+\xab\x1bS\x91\x8e=\xab\xc1V\x36\x46i\x17\xdb^" "\x08\xcc\x1dS\x91\xe6\x65\x97}\xc7\xea\xa2\xa1\x46\xab\x32n\xcd\xbb\x80\x65W\x92n-\x9f$g\x8b\xe2H\x97\x81\xaf\xc5O=\xae$\x93" "V\x05\xba\x1e\x14\x95\x18S\x01\xe3\xe6uO\x33\xa5\xfc$\x39\x9bx\x44\xba\x30\x94\x0e\r\x35X\xf5\x18\x66\x32\xad}\xcaX\xdc,\x15w" "\xc1\xdf\xe3K\xbf\xe7\xdej\x05\xd5\xd0\xe4\x8c\x15L%rm\x96W\xab\xd4\xd7\x61\xd1\x8dY\xafSk\x9eI\xae\x43\xd9\x88\xe4\xa0 u" "\xfe\xa3\xf8\xc9\xe7-\xad\x43^)\x9dZ_Q\x43\x9b\xd5i\xf3\xa6\xa7\x19\xd6\xdc\x93\\\xd6\xd8\xa8\x9bs~\xda]\x01|\x1d\x97\xebr" ":\xcc\xf4\n\xd0\x91*\xa8\xca\x02K\x1a\xe3\xa1\xe3\xf8\xa9\xd3(\x37K\x15\xa4\xcf\x02\xdd\xd6\xe6q{\x8d\xf3\x93\xb7j\xe2\xf2\xb6\xea\xe7" "\xc0\xf2yT+k\x07\r\xad\xbd\xd6\x8b\x97\x8d\x11\x13\x06\xb9\xce\x93\xaa\x96\x9e\x9f\x9aP\x8b\x34\xd6\xc1\x46\r\xae\x12\\\x14\x1f\xc7\xac;" "\xbb\xe6\xe2\x08z\xfa_\x80\xb5\xef\xc5\xeb]n{\xbd\x97\x61\x9f\x95!\xd7\xcb,\xf9~G'\x1d\xb4\xd3\x86\x8aJ\x9c\xf4\xc4\xd2<\x0f" "\x7f\x08\?\t\xfa\xa1\x93 (\np\xe0\x61\xfct\xd2\x35\x81t\xa0\x99\xed-\x9a{\x92=\xe3\x8atJ\x45\x8et\xb9\xfd\x06\x04\x06\x34" "\xf7\xb8\xd5j\x39\xaa\x63\x62\x0cm\\\x80\xa7\x30\xc7n\x9d\xb3\x82jg\xedH\x17'\xd5}\xdd\x19\xa4\x91\xea>\x80)\x44\xbb-\x61h" "\xd2r\xe0\x07\x18\xf5\xbak\xec\x8b.\xd2/G\x1a\xa9\xa6\xcc\x9f\xe2\x8bTn\xfa\x8d\xa0\xbch\x15\xd7\xce\xbax\x01\xbe,i\xf9\xc4\xed" "]Z\xddIw\xbd\x97!\x1b\xda\xf3\x90\x85\xd4\xf2\xe1\x16\xd0\xf1\xf6\xee+\xfaX\x9e\x7fM\xb5\xa0\x87l\x97\xea\xbe\xe0\x17H,}o" "z\x14\x89\xcb\xa6\x00M\xb5\xae\x63R\xf2G~\x1b\x89\xd9*\x9f\x8d\xc4{\x9a&\xe9n\xb2\x02\xd7\xe5\?\x8a\xa5\xc9WR\xedR)U" "\xff\x86\x34\xcd\x9e\xe9\xba\x0c\xe6\x7f\x80\x9f\xa4_\xad\xfe<~\x62\xc9\x63\n\xa1;\x03\xad@\x97\xe6y\x04s\x1by\xe5(U\xf5M$" "\xb6=\xabH\xf7\nP)M\xb6\x93\x13\xb7\x9e\x34\x91\xdb\xfbM\x37\xba\xa5\xa1\x1d\xe9\x41\x9a&OsJ\xeb\x94\x06\xac\xa9\xa3_\x45\x1a" "ih\xe9)\x10\x9cr\x82\xe4\xf0=P\xad\x39\xd3\xba\xeev\x97K\xba\xee\xab\xb7\x80n\x13\xf2$\x37\xafXI\xb7\xcf\xfd\xb8\x1d!\xea" "\xd7-\x15\x97\xfe:\xb0\x66\x8dg\xeeK<\xbc\x0f\x36\xa4QW\x61\xbd\xdc.\xb5|\x08S\xac\xdc\xa2\x17\x8bt\xb0\x1f+\xe3'\xb6\xe5" ";\x41\x87u\xfa\x13\x04ln\x13\xb7\xee\xb8jIU\xa6S\x99\xb8\xb3\xc6\xd3\xd8\xbe\x44\xdc\xba\xeb%/\x35x\x00\xab\xa4\xceZ-\x84" "$\xb7j\x81n\xd6\xe0\x93\xc1\x18\xb3\xf8\x08\xb0\xa4*\xaf\x43\xaf\xde\xce\x1a|>\xb0X\x83\x37\x01k\xcd\xb1\xa4*\xafy\x1cr-\xbb" "\"\xe5\xb4\xc0\xe3\xd6}\xd7\x43\xb6\xdc\xdb\x81\xce\xad\xce*`\xd9z\x30\xd2-\x94\x97\xe1\xa7\x06\xe5\x30\xac\xad\xd1@\xd2\xddg\x04\x1b\x84" "\xc3\xaaI\xfc$\xefyu" "\x38\x1dW\xbf\xdc\x8e\xa9h\x37\xf7\xa8\x1f\xcf$\xbdR\xce\xf7\x9d\x05\xfa\xb0)[\xfb\x82U\\'\xc7\x82+\x81\x45\xb5\x91v*j\xf3" "\x9b\xaf\x00\xab[\x46\xa7W\xea\xe2\xee\xff\ttj\xe6\xb5@_\x34=\xec\x64G\xf4\xc2\x0c\xdd,\xa5\x46\xb1\x06\xe9\xa6\xfe\x94\x80\xc5J" "\x19\x02VI\xeb\"ngg\x85!\xa9\x93Z\xf7m`\x91y\xcc\x1c\xba\x45m\xd2\xaf\x44\xe2\x11\xab\xe5NQ\xad\xaa[\x90\x46\x38<" "\xf8\x8a\x0c\x1f\xa7O\xbd\xf8\x7f\x81\x32+\x05\xeb\xcav\x0e\x1cXrv\xfanj\xb7\xe8\x46\xfa}\x19^\?K\x1d\xfbn\x86\xde|R" "\x8f\xeeg\xa2\x16k\x05q\xfb\xaa\x33/\xad\xe0\x86:`M\xaa\x66&\xbd\xec.\xae\x02\x16\xa5@\x87\xaf\xdb\x62\xc2<\xd4/}\x37z" "\xad\xce\x1eU\xb6\x90\x1b\x65\x9f\xff]\xa0\xfbNro\xa5*\xd9\n\xd0y\xb6\xd4k\xa5\xc4\xed\x36\x15\x89;\xd9\x1c:\x80%\xfas\x0c" "J\xdb\xdb\xe2i\x38\x99\xfc\x32(\xb3y>\x8a\x34\x32-\xbc`\x12iX\xb9\x1f\x00\xc1\x46\xaf\xc1\x93\xa6\t\x9dl O\x07\x96\xed:" "&\xddT\xadO\x00\xab\xcd\xf9\x99t~\x44\xc0W\x8f\x02\xdd\x86\xb6\xb0\xb6W+%\xd2M\x39\x8c\xd4\xba)\x87~\xa3\xdd\x96x\x61\xad" "\x34\xcf\x0b\x9e\x93\xa1\x43\xe4\xd4\xc1\xcf\x81\xb2T\xf7\xed\x18\xdf;}\xaf\xb2{\xde\xb5\x85u\xda\t\x82\xbe\xa7\xd7I\xa5}\x18i\x16\x8c" "\r\xdd\xdc\xcb#/\x9f\xed\xb4\xb3\xa5`p\xe9\xa4\x8a\xbe\x0e\x99\xfa\xb2\xbd\x9b\xca\x86\xc9[/\x95\r\x03}\xd3\x9cW\nU\x14K\xbc" "\xce\xa2V\\X\xcb\xe6\xf9L`-)\xe5\xa8\xc9\x96\x42\x91n\x1b^\t,\x36\xab\x07\x90\x98\x8c\xd5 \xb1th\x17\x7f\x1cYH\x9d" "\x1e\xfb#\x10\xa4\x1e\xbe=\x13w\xd5H\xa0\x11iV\xb4\xde\x93\xde\xbc\x97\x98\x30v\xc1:\x12s\xac<\x83\xc4\xa2\x63\x17\x97@\x99R" "\\\r,Q\xb6\x03\xdf\x02\x96\xd5i\xdc\xce\x41SzH\xea\x18\xda`\x97-jx\x8d\x32\xfd*\xcc\xf9{{\xb4\x30\xe3NQ\xa4\x8b" "P\x17]\xf5^_%\xad\xd3\xb0v\x44\x8b%\xe4~\xa6\xa8_\xb7\xe8\x98t\xb9\xbd\xbd.\xfb\x8ag\xd1\xa0\x04\x43\xeey\xb2\xbe\x44\xd9" "\xd2\xe3H\xdc\xa7\x94#\xdd\x05\xc5\xe4M\xae\x00\xa5>\x84\xc5H\x17\x95m\x0cy\xf9IM\x37\xb5\xee\xd5\xc0\xa2\xd6\x61n\xd3\xe2\x0b\xa8" "N\xeet\x61\x16\xd7\xd5\xa4\x99\x86\xdc\x44\x65G\x44\x65\xfb\x1b`q\x1e\xf5\x0c`\x19\x87\x61}\x83\xd7\xf2ig\xc3\x96Tq\xe7\x94\xd6" ")\x1f\xafIU\xff.\xd8\x90\x1e\xe0\xf8x\x86\xcf\x8e\x1e\xf8k,jzQ\xddU=\x13H\xcc\xb5\xd5\xddH\xcc\xd6t\n\x89\x45\x8a" "\xaa\xeb\x90\x98\x1d\xfeo!\x0b\xce\xba\x31\xb0\xf6r\xb7P\x66)\x64L\x86\x12\xea\xea\x97\x81n+\xe8P\xb7p\xef\x00:\x9b\xc3\xeb\x81" "\xbe\xa9\xcc'\xbd\xc3^;T\xe3G\x32t\x88\x94:\x0f\x05U\xd9\xcb\xed\xa6\x66\xde\x8b\xc4\xd4\xcc\t\x88l\xc7gq\xe7\x9c\x66\x11w" "\xb5{\x9dNk\r\x46M\x1b^\xa7\x64\x43\x66V\xd4UL!*\x1b\xbf\x9d\xd4\xe7\xa1\x0c/\xe6\xa4\x0e\x9f\x05\xfa\x8cWn\x9b\x17\x38" "\x87\x80\xcb\x91;\x95\x04\xcb\x01\xee\x12\xa7W\x81\xbe`r\xd5\n\xf3/i\x06\x9d\xacg\xcaU\xe4/\x80\xbe\xeb\xe8\xac\xf7\xb7g\xe8\xed" "\x39u\xff/\x91\xc6\x0f[\xbb\xa9\xc6_G\x9aQ\t<\x04\x0eK.\xa0o\xcetuY-s\xff\x39\xf5i\xa0wj\xe5&\xdd\xdc" "V\x85\x80\xe2O\x38u\xbet\xb9\xe4Y\xfa\x1f\xe7Y\xee\xaf\xa6\x0et\x02\x9d<\xef\x03\xdd\x36\xdc\x92^N\x14O\x02kW\xbf\x44-" "\xbePm\xa3\x86ogx\xf1'\x95\xfa\x63\xb0\xc1\x06{\x1ct\xb8\x96\xf9:\xe8\x18\x63|\xb6&u\x44\x34\\x~\x8a\xf4\xb4T\xe3" "g\xe3\x0b'\x39\x97\x66\xf8\xd0|\xea\xae\x1f\xe2'Q\xc8\x03\?\x44\xa6>\xdb\xe9\xea\xd5\x82\xe2\xe5\x98\xd4_<\x86\x34R\x95W\xb6\x81" "\x9fq-\x84\xa8\xad\x41s\x8f;\x45\xb1\x0f\xdd\x04\xac>\xab/\xf1\x82\x90\xba\xfa\x7f#\x8b\x1e/p\xab\xca\xa8\x65\x42\x39\x8c\xda\x1aU" "\xae\xb8\xf3\xa4J\x1aw\xb1\xe9]\x0f\xac^U\x89\xa8\xcd\x97\xa5\x9d\xa7\xac\n\xba\n\xaeZ\xeb\xaa\?I\xef\x9c\xd7\xb2\xe4^\xfd\x0e$" "\xb6\xee=\xee\x62O{'\x12\x0b\x87\x17\x63\x8d\xd6\x32\xed\x94[\x9c\xb2\xcc\x7f.\xeb@\xe2\x41\x63\xac\x65\xc6\x0b\xbcU\x13\xc7\x9d\x1b\x96" ")w\xec\x0fv\x65\x92\xfeN\xaf\xd3Y\x17\x87*\xda\x05:v\x16\x19\xca\xa5\x8d\xd4\xd1/\x01\x8b\x94\xa5oY\xf4:\xb5\x95T\xa4\x1b" "\xfe\x92\x05\x9b\x15\x1a\xacXi\xa5\x9e\xf3\x63`I\xbb\xa8z'\xb0\xa8u\xef\xc8\xf0\t\x80\xd4\xe1\x97\x02\xcb\xcf\x02:\xa5\x11\xa5\xbf\x08" "\xac\x92\x97\xbc\xb0\x9a\xfeW\xa0\x0fk\x35\xf1\x9ez\xea\xb1\x37\x83\xe7\x9cU\x41\x1b\x99\x7f.\xd0\x45\x33\xab\xb0\xe0\xed\xa2\x66J\xe7\xc0\xae" "\x00\xeb\xaf\xbc\xa8h\xea\x46$\xae\x34\"\x61\xec\x63_\xca\xf0>i\xaa\xfa}\xe0G\xc4\xb9\xe6\xe9\xa0\x43]=\x06:\xd4\xd5\x9b\x41\x87" "\xfbl\x32:\xac\x1a\xc1N[R\xc5\xe2\xca!\x95\xfa\x0f\x64\x61\x07\xa9\xa1\x9eV\xa0\xeb\xee\xe5L\xf8n\x64\x9as\x01\xed\x8c\x35\xee\xe2" "\xc4\x03-\xa5\x96\xfd\xc6\"\xd0m\x06\x12\x36\xd6h\x19&\xbdT\x89\xfb\x80\x9ew,\xea\xea%\xc0\x12I\xaf\xb9\x06XT\xda\x8f\x00\xab" "\xd6\xe5\x12\x9e/\xde\x86\x38\x64\xf5k@\xe7\x88\xf6\"\xa0OxU\xeej\xd1\xc5y;\xc6\x8d\xbb&\x1d]\xc4y\x1e\xe6\xf3\xbdT\xe3" "\xfb\x41\x07R\x1c\xa8\xfa{\xd0\xf1\x11$/j\x9c\x96>S\xd4\xf8\x10\x16}]\x1c\x02\x64\xb0\x63w\x01=\xcc\x37[^\xf5~\xce\xd8" "K\x35~\x13\xe8\xf4ii\x84\x8d~\xc4\xdf{\x46k'\xacw\x36\x1am\xa1\x9a\xf4nh\xa9\x46-\x92\xd7\xb1\xb7\x03\xbd`:\xd6\x65" "m\x30\xe9\x65-\?\x0b*\x31lz\xc8\x03\x9a\xcf\xe4\x90\x98M\xe6\xc5H\x03,Q\xec[\x31\x05\xcd\xb7;\xba\x64z\xec[@gk\xba\x0e\xe8R\x83\xd5(\xe7\x16" "\x61\xf5\xc1\?\x46\xa6\x1c\x02\xa4\xc1\xda\x94&\xcew(\x63\xa1\x18\xdc\xa4\x1e\xfc,\xd0m\?*\xe9\x65w\x8a\xae\xb2\x9fJ{\x0f\xe8\x88" "\x38G\xee\xce$\x03\xa2\t\x07\x30y\xeb\x62\xbfZ\x03:\x66\xcc\x10\xd6\x0b\x63G\xb0\x1c\xe8\x65U\x62\xac\xec\xa7\xae\xa2k\x1a\x10M\xb8" "\xed\xe3\xc0Z\xf4\xfa\xca\x9a\x66\xf2\xe0\xe9\xc8\x7f\x01\x8b\xda\xfb%\xe4\xc5\x16w\x1f\xb0\xa8\xbd;`\xbe\xe4YH\xa6\x07\x90\xc5\x00\x35S" "zHkV\x91\x1eN\x89\xf2/\xbb\"\xe5T\x8a\xb0\x9e\x99>\x8e\xbc$\xd3\xa3\xef\xc9\xf0\xf5\xe4\xd4\x97S\xa0\xd3`t:jU%" "\xe2<\x15\xfb!`I\x9fp\xf0\x1b\xc0\xea\xd2\x34\xc9\x80\xe8\xc6\x9d!\xb2\xb0\xd9NX\xcf\x03\x1a\x8c\xef\x03\xb6\xf7\x1e\xb5\x99=I\xd4" "\xe1{)]k\x9eX\x1a\xf5\x43\xf7\x81\xa0\xaf\x38\x06\xa8\x90\xe8%\xe4\x9d\xf2\xd4\x35\xf7\"w.\x39\x91\x86'\x62\xe8\xf0\x43=\x11\xbb" "\x04\x89m\xa9\x18w\x9dP~\x42=\x11\xbb\x11\?I\xbd\xa7\xbf\x8d\xdc'\x34q\x9c\xef\xd7r\x0e\x1b\xfd\x44u\xa0M\x7f\x8a\xda\xfc\xa4" "\xa6\xcb\xac\x08\xe8Q\xe1\xc8\x81\x17!\xb1\xb4\x82;\xb0\xf6\x1c\xe0h\xfe\x02$\x9e\xd2R\x8d:\x9a\xad\xe2\xbaN;\x16\x1b\xe3\xcb\x80\xd5" "\xefY\xf8n\x46\x9b\x1d\x41\x46\x1d\xb6<\th\x94%\xf3\xc3\xfc\xa0\xb2\x11V\x8e\xe1\x06\xfc\xd8+O\x15}\x37\x12\xdb\x31\\\xc8\x63\xb8" "\x43\x7f\x85\x34Rq\xd5W\x83\xf2\xac\x17\xaf\x9f\xb5umzuK\x43\xbb}\x0eXg,\xf7\x36;\xd4\x8e:|\x08\xe8\xe2\x10 \xf3" "\xba\r\xe7\xb9\xcb\x04l\x9bW~\"=\xd7\x93qp[\x13\xc7y\xef\xf9y\xaew\xf9\xd7 \xb2\xcd\xe2\x92~\x37\xf6\x18\x10\x65\xbbU" "\xf8\xd9qq\x46\x94r\xc8\xb3\xbft)\x13\x8b\xcf\xf1T\x1a\xab\xd1\x01Q\x80\x03\xdd\x19>,\x93:\xff\x35\xc8T\x04\xbcX\x06h\x9b" ">\xc5\xf9\xb2\xd1\xe9\xb1]\xd0\xb0\xb1\xa4\x65\x98\xf4S\xfd\x30\x99\x1c\xa0n\xdc\x05t;\x34\tx\x98X\xfd\x11\xd0\x61k\xc2\xcaNO" "\x0c\x9f\x07\xf4\x11\xd7:[ \x44<^\xc4\x92<\xe0\xc9\xe3\xbd\x1f\x06\x96o\xa2\xe6\x45\x8d\x8f<\x8c\xdc\xb9\x99v\x16X\xa2H\xc7:" "\x80%j\xfc\xa6\x17\"\xd3\xbc\xca\x1e\xd4X[\x8e{|S\xa5\x99\xad\t=\xc9\x80hT\xfa\xfd\xc0\"\xcf\xc7\x81\xd5\xadY\x04\x34\xb4" "K\xfd'\xf2\x12\xa5\xbd\xe8\x93`\xd5\x8c\x46\x42\x1eSN\xbd\x1f\xe8\xa2ZiQ\xbf\x1e\xad\x94\xb0~\xdfj\xa7\xc7\x14\x32l\xb4#\x9b" "P\x8f\x32\x9f\x82\xf2\x39\xa5\xfc$\x03\x05/L\xaa\xf1mH,=\xff\x34V\xeb\x03\x03\xaeH\xec\xf9\x1b\x33\xb4\xa7M\xfd_\xdf\x02\x65" "iMG\x31\xe5\xd3sO\x0c\x9a\xfdg\x34\xaf\x64@\xb4\xf7\xc0\x9f\x43\x1c\xb3\xaa\x8ax\x12\x9a\xfe\x03\xa0\xf7x\xd1\xcd\x38\x87\xdc$\\" "\x06\x1dv\x0e\xd7\x00}H\x8b%\xd2\xb3Q\xccm:\n\xaa\xa2\x81\x1e\xa4\xfe\x10\xe8\xb3&)\x8fMY_\xc3\x96\x98\xc7\xa6\xcd[\xc0" "\"\xf3O\x06\x96\xcf\x06\x1b\xa7\r\xabYZ\\\x35\x9aU\xff\x96i\xcb\x00G\x90\x35\xa0S\x8a\xdf@\x16l\x17\xed\xe0\xb0\xc3UKx" "\xfe\xf5\xa7\x83\xa0\x1d\x1d\xc6=\x9d\x9a{(\xd7vS\x17|\x10\x94\x45\x9c\xaaw\x81\xe0\x88\xd6r\xd4&\xcd\xe1\x86\xc7\x33\xc9P\x8dj" "\x42\xd4!\xac^\xf7m\xd0\x11\x0e\xcf\xbb\x0cyI\x8f\x9d\xfe\n\x08\x66]\x37\xa4\x31\xca\xce\xadx\x8eJ\x9f\xc1\x42\xbem\xcb\xeb\x42X" "}K\n\xe8\x83\xb2\x10\?\x00ti G>\x01t\xb7\x34\x18\x18\xf5\xc4l\x0e\x43H,\xa5\xfa\xac=$\x96\x1e\xbb\xea\x8dH\x9c\xf3" "\xfa\xa2n<\x17\x1c\xd6\xab&\x44~@\x1c\xe7}\x98\xe8\xa1\x1a\xd7\x41R\x0e\x13/\x06V\x65\xfam\x46kQ\xb6\xd6\x0b\xdc\x97o=" "\xdd\xae~\x9c:\x1e\x07\x96\x99m$\x43\x34@\xdd\x04V\x9d\x63\xb1\nZ\x91\xe9\xaa\x62\xc5=\xa2-\xd5\x7f\r\xacI\xfd\x12\xb5Y\xd3" "K\x86\x44[\x9e\x89\x45_\x07\x99\xc7\\\x34k\x83]\x9c\x97\xa1\xe4\xd0\xbb@\xd0\xd6\xefq\x8f\x9d\xbf\x87z<\x8d\xa1\x7f\xc8\xda\x45\xd4" "\x41)n\x01\xba\x34\xe1k>\x9e\tx\xa8]\xf5\xe7\xe0Y\xd8\xb8\xecG\xc0\xea\xd6\xd2H\x86Z\xbcT'\xacr\xb3\xb6!\x19\x88m" "j\xea\x11\xac\x89\xf2\\\xf5\x63\x05\xa4\xe7\xdd\x07\x41\xd0\xed\xbez\xcc\x1e \xa8\x61\xed`\x9a\x9a\xb7\x06\x12\xf7\x14\xbc\xa0\xd6]\x45\xc9\xb3" "\x0c\x9a\xb3\xca\x61\xc0S\xf2\x43= HI\xd1\x93\xc8%\x95\xd4\xc1\xa7\x82\x31\x8e\x44\x98\xff\xf0L<\x8d\xb5^V\x04\\{\x1cX\x14" "\xf0)H|\xdaU\xcb\x36\x16\x92\x01N\xe3\x31~u\xf8\x62$k\x06r\x01O\xd2/\xee\x06\?\x92\x45\xd5m\xc8\x82[\xee\x9f\x46\xe2" "\x19+:\x1e\x97\xbf\xe2\xaf@\xd9\xcf\xdaz\x86=\x0b\x36=\x8c)Y\x0e@W\x80\r\xb6\xd3K\x41\xd9\x87\xc8\xfc\xa6\x96\x46\xc8\x43\xf6" "\xaai\xf0\x43%\xb9\x16y\x89\x1a\x7f\xf5\x03\x19:\x9aK]\x88\x11Mn\x36\xa4\xbf=\x0f:\xc2\xea\xd1G\x80\xbe\xa5j\x13\xf7\x88\x86" "\xbf\xfb%@\x17]\xbd\x04MoH\x14\xfb\xc1o\x64\xe8\x9f.\xf5\x9eO\x02k\x46\x13\x87<\x9a\x97\xdc\xfbjTR^\xa4J\xbf\xe7" "{H\xc3r~\x0f\x08rLy\x1a\x12\xdb\x81l\x32\x64V\rQ\x07\x95\xbf\x08~\xd8N\xdf\x0b,\xe1\xf0\xd0\xdf\x41.;\x8a\x8a\xf3" "\xbb*i\xdc\x33j\xe2\x0c\xac\xaa\xa4\xc9\x90\xf5\xea\x91\x9e\xe3\xcbH$\x1c\x1ez*\xd0i\x36\xf6S\xa0K\xf7\x9e\x06\x1b}R\xcb\x87" "\x7f\x9a\t\xe5\x1c\xffH\x63#\xe8\x88\x46\x1d\x18\x04\x9d\x1e\xab\xaf\x0e\x11\xf9\xa9S@\xe7\x16\xee\xef\x02\xcb\x0c>\xc3Vi\x8c\x8f\xa1\x9f" "\x1f\x10\x8d\xfa\x9dO\x66\xe8\t#\xf5<\xb4n\x35\x03h\x45\xee\x14\x07-\xa5\xce\x0e\xa3\xe3\x1e\xb7\xaa\xea\x33\xab\xe9\xb0y\xd4\x14R\r" "\x03\x64\x32 \x1a\xbe\xfbQ\xe4n\x07\x85Q\xb6\x32ZQ.p(wQS\xcf\xfa\x1e\xd2\xacy\x1a\xf2|\x07\xb2\x30\xb3\x8d\xb8\xcfN" "\x8a\xc3\xd6z-\x8d\x64@\x94\xad\xee\x87`\xb5\xe0\xb5\xb3\xee\xca\xc6\xe6p\x19\xb2X\xb1\x1a\x14O\x93\xa9\xeag\x64\xf8t$\x37\x82\x06" "\x44\xc3_\x00\x45\x1a\x12\xf5\xab~=\xd0Oh\xc9GY\x33\x1a\tjV\x35\xd3\x80\xa6\x0b\xd2.\xfa\x44\x8d\x0f\x65\x80\xc5\x61K\x34\\" "\x98\xbf\xf8\xcd\xc0\x92\x96R\xf5\x16`\xad)\x9d\xb8\xc7\x16#q\x1f\x8d=\xfe\x00\xe5\x63\x86%\x61+\xc7\xaf+\x80ns\xb6\x88\x36\x0c" "\xc2s]\xaf\xf3l\xdb\xaa\x61\xf3\x94\xcb.\x85p\x0c+\xa0\x01k\x0e\x81\x1a<`\x36X\xd7\xe7X\xb6\xf1\x1b\xd2\xbc\xa1:\x00\x16\x45" "\xfe\x38\xb0\xa8\xa2X\xa3\x89_\xd7\xd4\xd3\xd1\rvp\xfc:\x81\xdc\xcd\x04\"lv\xe5\xa7\xe5\x43\xfa\x7f\x00K\xe6l\xb7_\x83\x34\x1c" "jo@\xa6\xa7\x94\xf9\xb8g\xc1k\xc7\x17,\xad\xbe\xde\x19\xd8\xd1\x9f\x92\xa1\x11\x0b\x14\xa1\x99\xe9w\xdf\t:\xd2\xf0\xaf\xfc;\xa0s" "$\xc2\xf4R\r'\xa0\?\x62\x38Q]\xac\x05\xba\x0f\x13\x1d[\xcaXR\xe4x\x31\x87\xdc\xed\xe8'l\x9e\xf7\x9f\xea\xac\x30\xb3\xbe\xa8" "i^\xf0r\x06\x63\x07\xa6\xb3 \x88\xb1 \xfd\xb6*\xf0\x63&\xb2Q\xc7\x8e\x65\xa1\x06\x18P\xc8\xba\x61\xaf/k\xc2!\xed.\x0e\xfe" "\x12X\xe3.\x85\x34\x99\xaa\xbf\x46^\xd2\xf0\xd3\x7f\x0c~\x84\xc3\xf3>\x0b:\xe4\xf0\x1e\xd0\xe1\x01\xb1t\xd4\xabZ\xe0\x61\xb3\x99\xe2\x44" "j\x92\xf1\x15\xd0\xb1\xd9{\x94\x1d\x95\xc0O\x90x\xcd\xab\x80\xc3\xe8\xad\xc8\xdd\xb6>\x92\xa1I\xd5\r\xfa\xdfMU}\x17\xe8\xdc\x44\xfd" "\x37\xa0\xbb\xe1_\x8e\xed\xe2\x39\xc8\xbd\xe4\x9a\xb0\xee\xb5\xd3\xebuJs\xc1\x7f\x04\xba(\xd2\xdd\x7f\x07t\xcauU\x86\x8e\xd7R\x7f\xdf" "\t:\xec\x13.\x07\x1dV\x9cHq\x42\xe5\n\x9b)\xce\xcd\xa0#\xcd\xa1\xaa\x13t\x44\xb5\xaa\xfe\x10X\x14\xe7\x34\xf2\xeaw\x91\xd7L" "\x0f\xc5\x32\xa4\xba\xebg\x90\x42T\xeb\xe0\x9f\x64\xe8\x65\x30\x95\xfag\xe4n\xb6\"\x01\xef\x17\xdc\x84y\x8b\x18\x96\x1c\xf8\xf5\xcf\x82\x8e\xcd" "\xe2\xc2V\x9eJ\x63\xecV\xa3\x91\x87\x90\x46\x98\xc7\xd2,h\xf0\x41\xbc\xe7\xb4V\\\x32\x64;TI\xb1]\xeb\x34\xcaN\xeb\x97(\xe7" "\xc7:=gT\x01\xe2>\x36\xe1\x17@R\xf6\x63\x32;\xe5\xb5\x0bt\x83\x45\xd1\xe7#\xcf\x04\x96\xb0z\xb0\ty\xb1\xc1\xbe\x05\xe8v" "\x86\x18\xf7\xf9\x8e\x19MMn\x16\xd5\x62\x0fy\x17\xd0\x45m\xd2\x31\xd0\xdb\xacx\xf5v\xc3\x12\xe8\xb8\xa9m\xcf\x96\x32\x16\xb6\xb2\xe9\xdd" "\x01,\x19\xc8\xd2\x7f\x0b\x9e!\x45\xd5\x45\x9f\x01z\xbb'\xde\x36\xe6\xfbJ\x9e\xe9\x90\xeb\x86\x19\xf0$\xc5\x9c\xe9X\xce\xf6\x84\x03\xbd." "\x81i\x46\x0fU\xfd\xfd@g\x9d\x62\xb4Rk\x16\x0c\x88\x85\x1ag\x43\xc4\xa9n\xcb\xf0\xa1\xa2\xd4\x8d\xd2\xcfK\xf7u\xf4\x46\xf0l\x8d" ":\xca\xda\xd1O\xa8\xf6-\xe8\x84\x87\xa8\x12X/\x17\xcd\x36,\xca\x99\x65Z\xa0V\x31\xff\x01t\xb7\xf3\xec\xd9S\xf4\xb8o\xd4\xa4h" "v\xb9\nnH\x96\xb5\x1b\x34\x91Z\xce,\x03\x9d\xe2`\x45\xdf\xb3o\n\xd9g\x1b\x02q\xc1l\x0b\x43\x35\x98\xc1T\xadH\xf3\x86\xdf" "\x02\x1d\x1e!\xbd\"\xc3\x8b\x84\xa9\xaa\xb3HlG\x1btV\x9f\xfa\xdaqp(\xe2\\r=\x08R\x01\x30\n\x17| k\x1d\xd5," "\x42\x1a\xcc\x1c\xb9\x1a\x92\xb2\x15\xc8\x80(\"\x7f\xfeG\xc0\xa2\xf6v\x41\n\x61\xec\x82+\x81\xde\xe4\xea'\xad\xe0\xd2,\x12\xb3\x15`J" "\x43\x33\x1bQ\x9b\x82\x1b\xc4\xf6Mi\x19\x86\xad\xe3&\x45;\x39\x44O\x92\x95\x96{\xfd\"\x64w\x0b\xc9\xbei\xad\xe5\xb8@\x35\xc6\x12" "\x66Ht\xfe \xe6Z\xc5\x01\xa5\x13\x65\xc9\xe1\x95\xc8kU%\xe5K\xd7\xa9\xe3\xcd\xf8\xe9\xa4gj\xbb\xc4q\x41\x14\xfb\xbeo#w" "\xca\xfe\x16\xe4.\xb2\xbf\x0b\xcb\xd2\xe2\xa0\x16\x66\xa4&=\xd2\x15P\x8ag\x83`\x8f\xe6\x15\xf7qh\xfb\x63\xa0\xb3\x10\xd0N\xdb\x45\xf6" "\x9b\x9f\x81\xbcl\x0f$\xe0\xc5\x99\x1b^\x8e\xbc\xda\xbd\x9a\xa6\xb4\x06\x43\x9a\xfd\xa4\xa7 \x05\xf5\xf0\xab\xc0\xf2=\x90VJ\xfa\x0c\xa4\x11" "I\xd3\xef\x06\?\xa2l\x17\xac \r[\xee{\xf1\xc5oR\xf4\xb1\x9f\xbf\nX\"\xd7w\xef\x02\x96\xc8\xb5\x35\x87\xc4nz\x97\x63K" "y&\x98\xf7\x1d\xc5>\xdb\x31\x0b\xdb\xdbLm\x86hy\xf5\x30(\x8b\"\x9d\xf7.\xa0\x93\xb1G\x81\xce\x66\xfe\x1d\x88\x63W{\x42\x1a" "\x14\xdd\xf2\x13`\xc9 U\xd5\r,\x37\xce\xc9r_\xe2\x64&\x19\xb1s\xbdX\\)\xa6\xde\x9a\x05\x96\x8cV\xe9\x37!S\xd1\xe7\xaa" "\x37\x01\x1d\xcd\xa1\xea\x05\x9f\x00\xfa\xa8\xf2\x13\x65\xa5\x39\\\xf2\x1d\xa0\xdb\x31w\x94\xa3\xa4\xd7\"\xf7\r-\xba@\xaf\x11\x89J\xd8>I" "\\\x10\r\xc7\x04&l\x95\xd2\xb8u\x1fYH\xf7\xf5j\xf4\t\x43n\x83\x97\xddQ\xf4\x64\xc4\xf6\x9f#\x1a\x38\xa1\n\xe2\x02u\xecR" "\xa0\xf3\x38\xe6O\x81\xce\xee\xeb*\x30\x36\xae\"'#\x66\x9e\x17\xe8M%\xb4\x82nn\xbc\x0c\x83\x9f\xa2*@\\\xb0y]H#\xa8" "K\x17@\xc7\x8d\xa0\x8a\x13&N\xd6/,\x8c\xb0\xa1=\x07\x02\x8ej\x15\x04\xbc\xf1\xf4\xc0m\x99\x80\xd6P\x62\xb4\xd6g#H\\\xa0" "\xd6=\x05\x94\x45\xe4\xa3\xed\xa0\xcc\xbe\xee~\x10\xdcW\x85\x8cr\xec\x13\xee\x03\x63\x14\xf0\x0c\xd0\x39\xfc\xdd\x08,i\xef\xd7}\x00X\x94" "T\x9a\xa7\xed\x63G\xb9q\xad\xf7@\xad\xaa\xa0\xd8\x05\xce\xa3\xfe\x13X\xabV\xdd\x34\xaf\xba}\x1dX\xd3^\x1an'\x9c\x9bP)\x82" ":\xdbi\x8f\xba\x1b\x35\x8bX\xbc\x37\xa5\xce\x83\xaa\xb7R\x8a\xeb\x41G\xa4\xb8\xa8\x0c,\x36\x99\xbb\x90\x98\xdd\xc5\x1d(\xc3Q\xafS\xbf" "\x85T(\xe8\x97\xb0u])\x87\xb4\xce\xba\xfe\x0b`\x63\xd6\xd9h\xd3@\x94\xa3\x38{`\xc3\x0e\xc2\"\x1awU}\x0b\x94\xa5X\xaa" "\xff\x0eXv\xde\x14\xf7\x9d\xb6@\x61@\x35!\xa4M\xd7\x41\xe8\xe1\x88\xb4\xd3\xeb~\x06\x82\"\xe9\x91\x10t\xec\xbc)PK\x30\xac\xf5" "\xc4\xca\xab\xea\x93\x98\xae\x14\xcc\xf2*l\xb5K\x8b!\xcd\xbd\x9e\xfe\r\xe4\xc5\x89\xd9\x0b\x90\xd7\x86\x66\x11\x17\x86\x94\xb1\x90\xe6^\xe9\xd7" "\"\xcd\x82\n\x98\x8c\x88\xaeV=\x86L\x45\xae\x03_\x44\xa6\x94\xeb\x19\xc8tR\xb3\x08h\t&\x13\xaa>\x1b\xb6\xc2V\x91\xe2\xc2i" "\x10\x14)\x9e\xf4\x03\x10\x64\xa3\x46\xc7\x38\x92\xd5\xbc\x02\x35${r\x86\xaf\xf1\xa5.h\x04\xfa\x96\x8a\x13\x17\xec&N\xd8j\xdbP!" "\r\xc9\x0e\x9d\x01\x1d\xd1\xdet\x37\xf8\x61\x89\x89\xaaK\xb1\x9c\xd7\x02\x82T\x80\x63 \xc8\xb9q\x00\x82\xdbZ,\x61\xbb\x08X}\x1a\xe8" "l\x95\x98\x8b\xd2 \xed\xca\xcf \xcd\x8e\xb2\x11\x17\x46\xac\x10hu\xf6\xf6\x86L\x8fL\x45\x33\x1f\xfa\x63\xb0\xea\xe7\x9e\x39\x91\xbd\xfa\xcf\x90;\x9bg\x0etLm\xc2\xd6]W\x63\x91\xe2\xfeO\x81N" "\xadWn\x97+\xc9\x84\xaa\x44(\xc6oU\xed\xef\x43\x1av\x83\xef\x04\x65\nx/(\xdb\x65\x96\xa0\x61\xc9K\x95\x07\xc4\x8b\xc0\x12\xe5" "\x7f\x0c\r\x7f\x90\xcd\n\x1dZ\xa7\x9d\x17\x44j\x32\xf7V`-\xab\xa4\xf1\xa0\x8d\xc2I\xd1\x36\x36\x03\xbdH\xf8Jp(<_\xf0\x19" "\xa0\x9b\x91\x46\x32\xe2\x0b\xcc\x1c\x1b\xe3\xd3\xc0\x46\xaf\xab\x96\xf0\xf3\x1c\x19\xd6\xa7\x9d\xb2u\x0e!\xed\xe2\xaa\xae\x06\x1d\xe9\x13\xd2\xf7\x80\x8e" "\xe8j\x1aS\xd9\x9c\xb4\xb8\xa3\xef\x00\x1d\x33r\x0ehh\x97z\x1e\x08\xdaNr\xd8iR$#n\x9d\x9e\x93\x86\xf6\xf1\?\x44\xe2\x35" "\xaf/\xbf\xe8T\xf0\x1b\x97\xf2(n\xea\xd9\x0f\x01k\xc8\x65\x17\x01\xab\?\x8e\xbc(\xc5\x8b\xc0\x61\xbb\xca\x1e\x34I\xeeU\xf5@\x17%" "\xa9\x42\x89\x89\xc5]\xea\x91w!w;\xd7K\x8a\xa2\xab\xc7\xff\x0bt\xa4\xc5\xa1[\x8e\xd4p\n\x04}\xc7\x63\xd0\x8d\xf1\xda\xd9\xd0\x30\x07\xa0\xdd\xe0\xf1\xff" "\x00\x41\xbb~\x18\xd1\\\xf0\xfcm\xa0K\x0fp\xf0\x37\x80n\x17\xf7\xe2\x41\xae\xf5\"\xa0\x8b\xa4\x87\xde\x06\xf4\xbc\xb2\x9a\x8c\xb0\x33\xbf\x0f" "\xf5\xbe\xabR\xd0\x15^\xeaQL\x41\xdbm\xa4\x8e\x07\xed\x66G\xd8\xce\xbd\xaf{\x90\x97\xa9q@\xc3\xbf\x83\xf7\xe3'\xdf\x32U\xc3\?" "\x99\x11\xcdj\xa9\x46\xddv:\x10\xe8uZ|QS@\xd1\x31\x96\xea\xeb\x32t@\x95\xba\xfd#@\x97\xb6s]\x11\xccs\x04\x91\x66" "\x65\xa6w\xa1\x9a\x02\x0e!\x8d\x9d\x18&#vI'\xa2\x01!\xd6\xcb\x01-\x00\xcf/\x64\xe8:\xb6\xfa\xcc\xe5\xa0\xe3\x63\xe5\xa0h\xf8" "k\x64\x92|\xcaY-\xb8\xf6\x9a\x99h\x32j\xfb-\x11m\x0b\xc5t\xaa\xd7L\xa3\x03\xda\r^\x84\xe6I\xbb\xc1\x10:\xa6v\x83h" "V\x9d\x03\xca\x46\x32\xb2\xe8\"stx-\x12S\xd2\xcf#\xb1\x88s\xc9\xcb\x91\x98\xe2`\xf2\x36\"\xbaq\xfew\x90x\xde\x8b\xd7\xcc" "\xa2\x82\x16\x37\x35)\xf0R\xc3\x8f\x80\xe5\x97\xdcG\xec, \xea\xedtm\x91\x36\xf8\x92\x87! \xed`\x31\x04\xb4\xfbUYyh," "\x95\x16%\xf1\xfd\xba\x82\xd5r\xa8&\x85\x8f!\r\xc7\x8b\xa7\x83\xa0\xcd*\x83\x96\x0e\xcf}\xcf\x19\xf3\xfb\xd4\xc3T\xf5\x07\xc1\xb3-'" "\xe3\xc1\x31\xe5\x39\xea\xb5\xcb\xb3\x41\x0b\xf7\xa8\x31\xb4\x15X\xdd\xe8\xa8\xe5\t\x30\x8c\xa2@\xb7k\x0e!\xcd\x0e\x8f\xdc\x95\xe1\xfb\xe3\xdc\xa9" "h\xc9\x1a\?\x83T\ti;\x34\xd1\x17)\x1a\xec\x0b\xed\x0f\xef\xfe\x33\x88s\xc2\xcb\xd9\xae\xbc\x45\xbd\xa6\xcf\x91\xda\x1f\x62\x1a\x36h\x96" "\x45!\r\x11\x8f\x61V\x30lw\x03\x43\x35\x44\xbc\x19t\xdc\xe1\xc0(\x35\n\xcb\xc0\xc1I\xaf\x82\x9c\xa3\xcb\x06\xd7\xf3\x04\x9d\x03\xc7:" "\xd8\x10\x91\x8f\xb7\x81\x0e\xc5\xc1\xd2\xac{\xcds\xefQ:\x01-\x12\x0f\x43![\x84\xb1\xa3\xdb\xa0l\x9b\x8d\xf4P\x95:\xfa\x10\xe8@" "\xd2\xf4\x43\xdf\x01\x1d\n\xf8\x61\xd0\x61#\xc2\xd4\xa8\xd7\\X\x04\x34V|\xa1(\x92\xc8u\x31\xe6~\xc3v:@\x0f\xe6\x62`\x19v" "\xb9\x33\x81\x11S\xc8\xa0\xc9\xae\x8a\x04j\xb5x\x35\xb0\xa8QW\"\x31\x8dO\x9e\x82\xc4l_h\x95\xbc\xfa}\xd3\xeb\xc0\xa1]\x45\x8f" "\x87y\x1a\x88qGM\x13\xd1\x63w\x35{\x39\xfb}\xbd\x91M+(\xb1\x63L\x7f\x01\xfd\xfc\xa0\xdd\xd6\x89\x87\xa5\xc9\xd0\x65\x8c\x9b\x91\x11v\xc9+\xb7K\x0b!T\xeb\xc7O\x82\x0e;\x10\xac&\xd4T\x12]\xae\xf8\x90N\x1d\xc6*\x80\x36\x93\xd7" "\x7f\x12\x81\x92k\x9dp\xf8O\x7f\r\x82\xcbZt\xf1pNs\x0f\xbb\xcc\x06&\x19\x1d\xd5\x9f\"\xb5\x99\x44]\x8c\x8b>\x1f\xfe\x19\x18" "\xb3\x0bnQ\x7f\x8d\xe6\x15\xb4H\xc9\xff\xee\xdb\x41\xc7\xb7^\xbb\xb8.X@\x41\xed;\xba\x9d\x64\x05-\x66\xc0\x13\x0f\xdaYI\xd8\x95" "\xf5\x34\xa2\xa2+'\x33|\xad\xfe\xbc{^\x82\xbc$\xf7\x8b~\t,\x61~\xf5\xeb\x10yI\xd1\x43\xda\x43\xde\x39\r\x0e\xdd\xb5\xc2\x38" "\xa7j\xab\xc0\xda\xd1r\x0e\xd4\xfa\x11\x63\x37\xad\x1f\xd9\?Si\xe7\xc0j\x8fi]'\x0b\x61\x14\x04Q\x08\xe7\xdd\x82\xc9\xc0\xb8ho" "\xd7\xcf\xc1\x06\xbb\x9d\x15\x10\x64\x87\xf6\x0f\x10\xb9\xc1\x44n\xf3\x9b\xda\xc3l\x44\x32\xd8\xad\xa8\xec\xc9\xb8\xa8\xf1\xed\xa2\xb4{Z)\x41\x8b" "\x14\xe6\xb5\xbb\xc0\xaaS\xf4x\xd0v\xfe\xc3N\xdb\x82\x0b\xbb\xa4\xe9\xbd\xae\x01\xe8\xa2\xcf\xe7\xdd\x86\xbc\x84\x8d\x03\x8f\x00}\xcc\xb1\xec*" "V\xf8\x31\xc7\x17!\xcd" "\x32\x9fy\x1c\x94\xc9!\xd6\xb0\xa3\xa7\xbc\x9a\x44\xc7\xde\x98\x05\x9d\x35\xb9s\xff\x33pH\x9e\xd1\xdb\x94\xa4U\x1e\x9a\x07\x96\x34\xe1;\xbf" "\x82\xc4\xd0\xa8\x03\x7f\xf9\xef\x19\xfa\xd0K\x95>\x87\xc4}Z\x83\x81\x98\x65^\x96\xaa\x43\xeev\x00\x11\x97ZL\x91h\x9fY\xfd\x1f\xa0" "\x63\xbb\xcdQ\xaf\xb4\xe5\xb7`\x8d\xd6o\x97\x1f\x03\xf5w!\niV:|~\x35u\xe8\x85@\x37W\x02\x0e\xed\xe2g<\xccV\x00\x8d*\xb1\x35\xfd\x05\x32uw" "\x10\xe2\xbc\x31\xf5@\x19y\xa1\x11U\x9d\xffJ\xa4\x61\x13\xc6|\xac\x9f\x06\xc3\x7f\x8aL\xed$\x34\xa8X~\x0e/\xb8\x1e\xda\xf2\x36\x94" "'\xbeSO~>\x08\x8a\x66\xde\xfb\x11\x10\x94\xf6U\x85\x46=Y\xa3i\x02\x1a\x85>\xf6\x41\xd0\x19p\xc6\x16\x9d\x31\x36\xfcO\x03\xdd" "\x9c)\x45jSz\x0c\x94}QL\xa3\xd0\x63u@\xf7\x0b\x02\xc3\xd4:\xcc\x1cJn\?O{\xd1\xd4\x97@\x87*\xfa\x1a\xd0\xe1\xc6" "\xef]`\xa3N\xb1\xa2~\xb6\x9d\x16\x10\x14\x0e\x8f|\x1ft\x44!\xbf\xf8\xaf\xa0\x93\xd3\xfa\ni\x38*g\xac\xe3\xa2\xc6\x17>\x33\xc3" "wQ\xd3\xf7\xfcv&\xa2Qh\xba\?\x43\xdf\xf2\xd5\x7fx\x1d\xb0\xec:v\xd8\xe5\x87\x9byw;\x36\xce\xee]Z\x13\xf9\xb9\x1f\x99" "\n\?\xd2]\xd0LT\xdc\x92\x0cK\xbb\xa8~!\xe8p\xe6\x89\x35Z\xde\xba\xc1\x64\x9cM\xef\x31\xe4\xee\xd6\xfb\xfd\xc2O\xea\x36\xd0\x91" ">\xe1\xa3\x18\x41h/z\xebG@\x87\x9ay\x33\xe8\xf4h\xa6\x61\x97\x94\xcfy\x01\xe8\xb0U>\x02:{\xcaX\xd4O\xc6\x36\xc1\x46" "\xbd\xaaM \xc6\xa5\xe9\xee\xab\x33\x01\x8dK\x0f\xa0T\x87\xa9\xab\xe8\xfdJ\xe6.#\xcc\xbb\xef\x88qQ\xf5\x43\xb2\x8esK\x9eI[" "\xd0\x45\xfd\xe3\xca|@\xbb\xd3T\x04\xca\x62\xfbt\xe2+\xe0\xc7\xfb\xccI\x9b\xd7\x45\xfdv\xbe\x13\rX\x8b\x0b\xda `\xf5M\x7f\x80" "\xdc}\x18\xed\xb2\xcb\x98\x61^\xcaG|\xd3\x8d\xb3\xe5\xfe\x14\xe8\xc2\xc6\xc1W!/\xdbm\x0e\xc4$\x35}\xd5\xd7\x80~R)\xc7\xa5" "~\xd5\xa8PmS\xa5xm''\x19g+x\x16\xe8\xb0\r\xde\rt\x32\xfft\xa0\x9b\x1b\xa2\xb8\x44\x9d\x8f\x81\xbe\xaeY\x84\x34[" "=\x8a\x0eM\x8dT\xa1\x99\xb4\x44=zs\x86\xef\xb0\xa5~\x94\x07\xba\xbb\x9e(\xd9\xe5\xac\xb0\xcb\xbc!%\xe3\xe6;\"\xea\xb7\xd1<" "\xe8\x90\xee\xe2\x12\xe9i\xcfh\xed\xc4%\xd1\xf0\xaa\xc7\x80%R|\x02#\xda$\x35\n+\x85\x01\xbf\x08\x36l\xe3W\\\xb2\x8d\x97\xb0" "\xcb\xaf\xee\x0e\xf3\x0e\xcb\xb3\xf0\x93\x9f\x84\xaa!\xeb'\xc0\xbc\xf0s\xfd\x33\xc1\x86_\x91.\x15U\x8a\xa8\x9f\xbd\xc4\xf5\xc8\xa2\x43\x0b*" "P\xd3\xd6+\xc1!O|\xd0o\xe4\xfd\x16\x9b\xbc\x34\x9e\xfa\xec\xcb\x33|\x03'u\xf8N\xa4iu\x91ml\x8a\xfa\x17Um\xe8\x36" "\xb7\xfa\x1f\xee\x45\x1asQ\x15\x97\xdc\xbb\x45Y\x94\xad\xaa\x1a\x94\xcd\xc9\x46\xa4\x46\xaaR\xaaRP\x7f^\x0b,\xbb\xfe\x13\x97\xeb\x9cU" "i\xb0U/\x44\x62*\xe4\xfb\x90X\x98\x7f\xd7\x0f ;w{\x30K)\x8d\xa6x\"\x1f\xe6\xdd\x94t\x92j|\r\x12\x0b\xcf\x97}" "\x0e\x94Y\xaa/\x45\x62s<\x18\x97\xfd\x16\x80Z\xb4\x62M\x34\xbenRt\x64=wQ\xe3\x97\xa3U\xd2\xb4Uj\xb0\xcd\xb6\xb8\xe3" "\xd2\xb8\xca\x15\xd2\xb4\xb5J\x06)\?\xf2k\xe3\x00\xfd\x06\xd0\xa1\x80w \x31\x95\xff\xfd\xc8\xd4l/\xc3\xfc\xa8*\x64H;X\x39\xae" "\x9a,(\x63Q\?\xb5\xf7!\xd0\xb1\x01:\xe8\xb0\xa3\x96\xb8\x64N\xb4\xc2.\xb7\x17-s\x8dv\x07\x08R\xae\x9b@\x90r\x1d\x03\x1d" "\x11\x07\xba\x1a\xd1\xc6U\xc6\x94\x0e\?\xca,\xb9'\x96\xfe\x13Z\x95\xd1\x80\xf9\xa1\n\xd4\x90\x15\x8a\x44\xab\xd7\xc3_\xc6O\x34\xaa\x91j" "\x12\xc6\x9e\x92\x02\xfa\x8cW\x93\xf9\xe0\x8ah\x9bz\x00s\xd1\x81\x82\x17\x02\xcfO\x07\x91\xa6\xcd\xcb\xd9V\x88Q\xbf\xfb\xc9\x19\xf0\xc1\xae" "M\xd8\xb8\xef\x61\xe4\xce\xedP\x99}\xd9}\xf3\xb8LK\x39LS\xf3n}=`\xd7m\xe8\x13=\xfd\xe7\xff\x89\xc4\xee\x80\xa5l\xc7" "\xee|\xad\x39u\x1e\x96T\xb4z\x65\xa9n\xa8n\x44j\xad\x8anP\x8cT\xd3\xa7\x9f\x0bt\xdb\xfc\x0c\xd5HU:+\x36\xab\x35$" "\x1e\xd6\x02\x8fK\x8bV\xf2\xb4\x32}\xd6\x9d\xa8\xaf\xb2\x97\xe1\x96\xaa\x44\x32\xcd\xf3\xb8o\x02\x8b\r\xed\x16\x64!\xac>i\x1f\xe8\xbeU" "^\xee\xd2@\x32\xbe\xeb\x8c\xd9\xf9\x45\x32\xed\xe7\xef\x03v\xab%\xe8\xb0#\x9b\xb8\xb4\xac\x04\x93\xf1=\xd3:\x1a\xa0R\x45\x65\xa6w\xac" "\x19i\xcc\xfdK\\\x96Z\xbe\xf0\x8f \xbb\xe8\xfc\xcb\x65\x8e\x44m\x39\x9a\xe1+@\xdcP\x9a\xe6\n(\x8f\xbc\x44\x8a\x0bo\xcf\x44\x43" "\x66\xdb\x1ct\x14\x9d\x0e\x35\x61\x07y-*\x1b!\x8d]o\xb9\x12t\x84\x8d\xa3\"\x32\x17k\xd7\x82\xce\xa8\xa4y\x0b\xaa\x92\xe2\x1c\x02" "\x41\xfa\x00\xfc\x10\x08R\x9co\x83\xa0\xcd`\x43Z\xb4\x8a\x11K\x8f\x9fNN\xda\x31S\xd4\xef\xa3\xcc\xb4(\xf6\x37\xb0\x18i\x33\xa7(" "q\xb9W\xa5\x08\xdd\xc6\x35T\x83X,\x46&]\xb5\x06lH\xe2\xc3\xb1\xef\xfbZ/r\xb7j\x8aK'\xb4\x96\x93iv\xe6\x19$" "\x9ep\xf5\x63Or=\x12\x8b\x14\x87\xd0]\x64\xcdv..\xd1\xf3\xc9\x97\x91)[\xf7\xd3\x90\xa9\x14K\xf5\xf7\x91\xa9\xdbU\xd2\xd8\xb5" "\nS>\x1a\xbb\xd6\x62\x8a\x45\x63\xd7\xdf:\x0b\x82\xd2*\xc5\x07\xe9\x34\xf7I\x9e\x86\xc4v\"\x16\xd1\xa2\xf5\xe9\xdf\x42\x9aq\xabnZ" "\xb4V\xa3\xc9\x94\xfc\x08\xb2l\xad)\xcc\xdb\x11\x64\x32\x39\xe7\xe5\xc3\xae\x12\xably\xbb\x37u\xde \x08\xb2\xeb\xfe\x39\x08\x8a\\\x07\xd1" "Q\xd3\xd8\xf5\xf5\xa3 (-\xee\xd8\x8f\x41\x90-\xee\x41\xd0\x99\xd7\xbaH\xa6\xed^@\x34\xc4\x96\x82\x19~\xd6.\xab\xc6%\xbbq\x10" "\x97\xcd\xcb\\\x98\?\xe9\x9a\xc0\xa1\x16}\xe6\xa4\xdd_N\xa6;\xbd\n\xfc^\xdb\x90\xdd\x65\x08\xf3\x36\xc2\x86j\x34\xfb\x34`Q\xa3\x1e" "\x00\x96\xd9\xd8G\x03\"W\xfa\xad\xc0\xa2\\\xe8\xfd\xd4\xc6U\xe6$n\x02Z\x1e\xf6z\xa7\x14_\x03\x9d%/\r\xda\xedH\xd3\xa3\\" "\x18\x1dJv\xea\x11\x97\x8b^\x86\xb6\xf2\r{*\x43\x1b\x15\xe9u@\xcf\xa9\x38\xd1\x80\x88S\xf5\x01\x14\x02\x1di\x1e\x02\x9dm/\x04" "\x37\xfb\xa1\xf5\xec=\x1f\x00\xfa\x8a~I\xa6\xf3\xaa\xa2\xd1\x10w\x84n\x02z\x9b\x32\x16\x97\xa8\xbd/\x06\xfa\x88\x97\x06\xfb\x96\xf7\x66\xf8" "\x9e\x80\xaf \x8dYH\x06\xb4h\xbd\xedq\xa0\xbb\x35\xc2\xb4m\x94\x45\x03vj\x9f\xcc\xda\xca%" "\x1a\xb2\xc9\x64@\x0f`\x17\x62\xb5>\xe0\x8e\xd1\x66\xa9\x63\xcf\xcd\xf0\xc1\x81\xaa\xde\?\xcb\xd0kwj\x0f\xd3\xa7lQ)\xc7\x63\xdd\xae" "~\xee\xd1n@\x1a\xc8\xf9\x8f\x01k\xdb\xe5\x12\xc6\xaaV\xc0\x0fy\xbe\r<\x8b\x8a\xbe\x62\x16\x89m\xe9\x91\xccz\x9dv\x98_\x91\xa8" "h\xea\x17\x64\xed\xe2^<\xc6\xea~\x0b\xf2\xa2\x85\xff\xb5\xc0\x32\?\x81\x41\xc7\xae\xa2G\x45;\xad\x08\xc4\x90\xb5j\xf6\?\x32\x41\xce\xbc" "\x07\xc7\x65j\xe6\x15\xa0\xe3w\x61h\x10\xfb'\x37\x83\xa0\x1ds\x07j\xc8\x8a\x19Z\xd1\x66\x95q\xf9\xa4\xd6r<\x66\x66\x63\xc9\xb4]" "\xdbI\x66m\xd2\x1e\xa9!\xab\xb0!\xe2\x9c\xf7\xf7\xc8\x94\xcc\xaf\x00KT\xe2\x15\xef\x44^\x66\xaf\x9eL\x8b&<\xe9\xbf\x80\xee~\x33" "h\xb6*\x95K\xb3UhK \xd6\xaa\xd5\xcf|\x14X\xeeL{\x96\xda\x8b)\xe8\x90\xdfS\xa0\x91*\xe6\x12\x41\xd6/\xc6\xf6\xf8\xa2" "\xaf\x8fw\xa9\x1a\x32|\xaf,\xf5\x80\x14\x02\x8b\x17\x8b\xf4\xb2{\xf3\x1b\xe3\x46\xc7\x93\x90\x98{\x95/\x03\x63\x66\x92\x11\x15m\xa1\x11\xd0" "\x36\xb5\n\x13\x86\x9cq\x18\x89\x01\xeay\xd3\xff\x82\x9fh\x86=\x9a\t\xd4\x00\xf5\x19\xa0,\xfas\xfb\x1d\xe0\xd0\xc6\xc1 k\x05\x15\xd0" "\xdc\xf4\x33'\x91\xc6\xad\x43\xc5H\xb5zW\x12/x-K\xb1\x1c\xd9\xc8\xf0\x35\x8eTU\x03\xc4\xd9\xd0L\x93iw\x36>\xebW\x89" "\xcbv\x8b\?\x9e\xa8\xd1\xea\x0e\xd5l\xf5\x1f\x91\x98\xbd\r\xfa\x84!s\xcd\x11\x64\xd9\x88\x9e\x03\xcaR\x86\x17\xfd\x13\xb0\x44%n\x7f\x19" "\xb0\x8a\xaa\xbd|\x34\x33\xf5\x91:\x08h\x07O\x81\x98\x9b\x1e:\xff\xed\xc8KT\xe2\xc0L\x86\xaf\x41\xa4\x8e}\x0eXt\xcf\xfe\x39\xe4" "\xe5\xaeYg\xad\x9a\xa2!\x33t\x89\x8a\xe6\x66\x90O\x10\x1ex\x61\tt\xf6\xb5\x9a\xe2\x31i\x8c\xb7\\\x07:<\x31|o&,\xf0" "\x9e\x02\x06\xf1\xd9>\x15'*v;\xf3\x8b\xce\x0f\xfa\x84#\xc7\xbe\x0btv\xb9\xf7\xa2|\xcc\x05S\x34$\xbd\xfa\x41Q\xa4\x1e/p" "\x9e\xf5\xdf\x92\xe1K\xee\xa9\xb7\xbc\x0b\xccK\x07{\?:O\x35.\xbd\x1e\xcc\xdb\x39l\x34\xb4\xae\x1a\x1e\xd0\xb8\xb4\x1a\x8b\x35\x1a\x97^" "\xf7k\xc8\xc2y\x9e\xa0\xfel\x00]\xdaW\x1a\xbdz\xce=\x41\x8d\x89\x92\xf4\xac\x43\x1c\x61\xac\xf8\x61\xa4\x91\xb6\xf3\xe0\xef\x80\x9f>\xd5" "\x84x\xc2.\r\x85\x34I}\xdb>\x02~WZ\x8dKo\x80\xec\xe6\xa4.\x1a\x62\x8b\xc3\x88\x9f\x13q\xee\xc1\x98;\x66w\xa5\xe3\t" "kq\xc9\xec\xb0\x95\xf3\xd0)\xd7g\xd1\x9f\xf3\xa5N\xddO\xce\xb4\x1bi\xcc\x16M\x9f\xe9\xde\xed\x86\xbf\x44\xe2\x39-\x84x\xc2\xee{" "\x86\xb4\x44\xbd\x12\xf3\x9fi\x9bl'\xb3~\x80U\xb4}\xc8x\x8c\x8a\xfd\\$\xb6ij\x32k\x37\x37\x93\xf9\x1a+\xcc\"\xa5@\x0f" "\x99+\x88\x15\xc0\xbf\x01K\x34\xfc\x62)\xc3NM\x1c\xf6\x99\xc3\xae\xb0\xe0\xae\xdb\x8at\xdc\xf4]`\xd9}\xbdxL\xea\xfd :\xab" "\t\x8e\x05\xcf\x43\x62\xce*\xdf\r\x0e\xcd\x61r\x32\xcf\xc5\xd1\x8b\x81\xe5\xfeN\xc7\xa8\xf3W\"\x0b\xbf.Q\x30/|\xc9\xec\xa8*\x64" "\x34\x64\xa7\xc9\xc9\xbc\xe8\xf3\xc7~\x81\xdcK\xcaO<\xb6\xacY\xc4\x13\x39\xd3\xb1\x82\xcd@\x92\xf9Jo\xbci%\?R\xe3\x9a)\xcc" "w\xbe\x11\xe8+^\x98\xc2\xfc\xa3X\xc2\x8c\xf8\xbd~\xda\x8b\x0e\xdf\x07\x36\xec\xc6\x41\x34\x64\xda\x9b\xcc\x8b\x46]\xf4j\xb0\x81\x1e\xfb\xe0" "\xb5\xef\x03\x41\xf3|\x1b\x8fI[\xbe\x18}\xef\x44\xb7\x32\x1f\x16\xec\x98;\x1a\xda\xb3\xca\x9dgG\x8d\x89\x07\xcdM\xef\xca\x81\x43\x08x" "\xe8\xf7\x87\x91\xbb\xad\x38\x02\x9a\x9b^\xf5\x32\x10\xac\xcc\x7f\xa8\xd8\xa7\x81\xce\xb3\xa4W\"\xb1\xcd\xc7\x82\x9c\xd4)\x96o\x81\x9a\x92~\x1e" "Xl \x8b`\x83\x86\x1c/\x84\x14\xb6\x38J\xe6\xe9\x34\x46T\xdd\x1c\x05\x44\xb4)=\xd4\x9f\xe1\x63i\xa9\x63\xf3\xa0\xc3j\x42\x9dN" "\x88\xfa\xdd\xf6\x15\x94\xcf\x8a\x8b\xd3\xed\x85\xc0\x06\xf2&\xd0q\xbfsjJ\xfa\x06\xd0\x11\xb9\x0e\\\x07:\x14\xe7Y\xe0\xc7\x9c\n\xc6\x13" "n\x19\"\x8f\x15V}:\r\x82\xee\x9cp\xd6O\xbb\xe6\xcd\xab$\x9fkI\xbd\xe5[@ww\xbb\x13\x05W$v\xf8\x8f\"SZ" "$~\x07y\xb1\x99o!\xb1\x1d\x19\xc7\x13\xbcO\x84\x1e\x80\x06\xa8OnG\x16s^\x05\xbc\xa7\x89y\xaf\x9a\x92\xde\x04:\x14\x07\x43" "\x80\x9a\x92\xcatW\xc6\x9d\x8b\xbf\x03:\xa2\xab\xe7\xdd\x0e:~/\xa9\x38\xe3J\x42q\x9e\x01\xca\xbe\x92\x9a\xef\x90\r\xc9\x37\x83 \xa5" "\x38\x0e\x82~\xb7\x82V\xa6U\xff\x00\x82\x43\xaa\x90|Y\x34}\xeb\xad\xa0\x43\xb9\x9e\x0bt*\?\x06M\x1a\x97V}\x14\xe8S\xcaO" "\xd0\xed\x96`\xb3\xec`\xaf\x43\x62\xaa\xfa\xd5HL\xb3\xb1{\x90)\xf7IV\x81\x35-\x06\xd1\xff\n,\xca\x85\xe9\xf7\x84y\xcb\x0c\xfb" "\xcc\x99v\x32/\x1a~\xfe\x37\x80\x45\xd3\xa9\xf7\x02\x0br\x1d\xa8)!\x8d\xc8~\x08\xe3r\xc1\xfdp\xce\xd3z\x1f\x13\xf2\x11\xbb<\x1b" "\xd0LTn\xc7\x14\x86\xb5\x0c\x13y\xaf-\x35,\xfd\x0f\x39\xbc\x17\x89\x85\xc3\xf3\x7f\x03\x89\xb9\xb2\x1b\x07\?\xec@\xa4\x43s\x97}\x13" "\xec\x91\xee\x42\xa6v\x18\x9d\xcc\xdbP\x12\xd1\x04T\x0ctG\xba\x34q\x90\xb3\xc9-\xdf\x94\?x\xec\xa3\xa0\xe3\xce\x43&\xb8\x14\xc2\xd2" "\x63\xca\xces\xc3\x82\x9f\x9a\xcd\xda!N\x32O\x65\x93Q\x86\x8d\xf1\x45\xc8\xd4/>L\xd9\xc6KX\xb0+\xc0\xc9\xac]\xdb\x89\xd4\x16" "\x14\x9d\x9e\xda\x82\x62zI[\xd0\x8f\xfc\x39\xd8\x30G.\xf1\xd8\xbe\xfe\x14\xf6\xf9\x1d\xf9\x89qU\x92\x64\xdel\x0b\xc3\x82-\xd6\xc2\x41" "r(\xbd\x8dHz\xe8\x83 \xc8\x12{\x04\x04\xe9\r \x0b~\x44\x9f\x0f\x63\xb5>\x31\xe1\xca\x36\n\x30\x92\x80\x31kM\xc9<'\x42" "(\xe7\xa2\xf5\x12\x01-H\xab\x33\xa0#%\xf6\xa4\xdf\x07\x16'\xd2\x18\x65h\x38z\xe9-@\x37\x83\xbd\x64^\xb4\xee\x65\xd2\x8f\xf9x" "J\xc3\xd1\x34\x96\x15\x34\x1cM\xff\x11r\x17\xed\xbd\xa2\x07r\xed{\xf9\x88\\\x1f=\x06t_\x64\x15O(z\x34\x62\xee\n\x83\x9c\x94" "\xd8{\xbf\x07:y\xad\x9d g\x93\x9cp\xd0\x1dn\xcf\x0fj\x39G\x45\x8as\x05\x12\xd3\x64%\x8f\x9f\x44\xeb\xae\xfa\x18\xb0\x44.(" "v<\xe1\x0e\xff\xa7Z\x9d\r\xb4\x8b\x03w~\x15\x04\xedjj\x32[\xd1\x1f*\xe4W@\xd9\xf6\x1c\xa2\x11[\xe6\x04\xddv!\x31\x9e" "\xa0\xf6\x62\xd5\?\xbb\xe5\xb5#]\xc1\r#@/\xba\\\xb4\xfa\xc0\\\x94\xd6\xa1G\xaa\x90{\xbb\xab\x96\xf0\xf3\x85:$\xa6\x8e]\x8f" "\xc4\xd2\x64.|\x1cy\rz!\x88\\\x8d\?\x04\xbaT\xd3\xd5\x39\xa0s@\xbc\t\xe8\x9cQ\xff\x10\xcc\xfbk\x05\xf3\xd4\xba\x87\x41G" "\xe6\x90\x07\xa4\xa1\x99\x05W@\xc3\xd1\xfb\?\r\x9e\xfd\x18N\xcc\x44\xd3\x87\x9e\x0ft\xe1\xe7\x92\x45H\xe1o\xc7\xcc\xdbYm\x44{Q" "V\x8aM<\x02\x1a\x8e\x1e\x12\xa5\xf5\xf3\xb8\x89\x45WH\x32\xf6\x37@\x1f\x95@\x06\xe8\x66|\x12\x8dXi\x04\x39\xf3\xfe\x1a\xd0\xd3\x63" "\xd5)\x88\xe3\xaek\x8bv\xda\x1e\x8d\xf8\xa6\x65N\xa4x\xfd\xef#\xb1Hq\xe8\xe7\xc8\xcb|\x63&\xb3\xfbZ\x05\xc9\xfc\x98\x8b\x8c&" "\x93\xbe\xbc;\x93,\xd6{^\xc2\xfc\xf3\xc1\x86Z\x87\xa2\x30\xe9(\xb2\xea\x38\xe8\xb8\x65\xda\x94\x1b\xa8\xd0\xdc\xf4\xd0\x15\x90\x82\xfb\?_" "\x01\x65\xbb\xc8\x13\x15}\xe2\xb1\xd8\xa0\x8c\x45#,\x1f\xf4\xfc\xa3\xd2\x06OL\x83\xa0\xbb=\x9cr#L\x1a\xa0^\xf1\x43\xd0\x31\x93\xb0" "\x64\xb1Q\xe9\x44\xb4)M\xf5\x80\x43\x11\xf9\xc9\xbd\xa0#\xfd\xc6\xad\x98\x35M\xb0\r\"\x30\x65\xf6\x1b\x61\x61Y\x8b%\x1c\x34V\xf9H" "q\xeaI\xa3\xa0\x33\xe6\x92Jwqh\x04tL\xf6x\xc2.\xcf\x86\x05\x1fsi\x1d\x9a\x1e\x03:W\x91/\x03:\x05\xc4\xa0@\xef" "\x94\xe9\xb6L@_\x94\xe2Yh\x82\x8e\x61w\xc0\x86\x9d\x80\x87n\x65\x9a\xcc\xdb\x9a\x31Y\xe4\xa0p\x1d\xe8Lx}I\x7fx\x33\xbe" "\x8cR\xd2+Q\xe0\xa3V\xce\x13\xdc\xdf\xa8\x03\x1b\"\xd7#!\xe8\x88\xf2\x8bW\xed\xd1&S\xd1n\x33\x9a\rzm\xd2\x15O\xf9\xd5" "x\x9a\xa4\xa6\xff\x01\xe8\xd2\xf4\xd2\x8f\x64\xf8\x66\\\xea\xf9\xf7\x83\r\xbf\xce\x46\x9b\xd2t\x1et\xc6\xbd\x10\xfc\xc5\x87)\xbbT\x15\x16\xec" "$=\x1c\x14\xb9\xce{*\xd0\xedj\x61@\x9f\x96\xf2p\xc0\xc4\x19\x65#\x9er\x13\xd0\x02\xbb\xa6\x7f\x04\x96\xb4\xc1\x83\x18\x61\x17}\xab" "s\x44\xa4\x38\xfe\nH\xc1.\xe5\x43\xc8\x9d#\xf5\x37\x41P\xe4\xaaN\x83\xa0\xa8\xf1\x61,\x07\xa6\x86\x9c\rs~\x9e\xcc[\x63\x8c\xdc" "l\x35\xe8\x36G\x91\x41\xaf\xbb\xbe\x99\x10\x35>\x84\xc0\xd4\xb0\xf3\x63K\x98\x64\xd1\x36L\xa2\x11\x8e\x8c\xef\x04\xba\xd4\xce\xf1\xbb\x80\xee\x17" "$'\xb6\x14+\x9e*z\x61\xa2X\xce\xbf\x00=\xc0\xa0\xcd\xf0\x93y\xbb\x32\x10\xd1\xb4\xf5\xc0\x8f \x0e\xaf\x35\xfd\x03\x08\x8a\x80/\xf9" "%\x08\x8a\x80\xdf|\x0e\xd0\xa5|\x0ev#\xb1\x1d\x1c\x84\xb4q\xfdw\x0cR\x8b\x39-\xcc\x88\x16\xad/\xc1\xa4T-Z\x9b\x80n\x86" "m\xf1\x84_\xb2P\x13\xd9\xb7\x03\xdd\xe4J\xe6\x45W\xab\x66@'\xef\xc5\"\xad\xf2\xa2]\x10\xf4k \xb4qM\xbf\x14\x04\xfd\x36\xe5" "\x84]\x86\x8a\xa7l_\x34\x9e\xa9\x15\x1b\x84\x1aP.\xba\x80|\x07\xea\x0f\x41\xd9\x66\xd4\x11\xed`\x9f\xd6\x0c\xca\xe6\x37#\xa0\x41\xecU" "\x98\x00\xab\x8f\xcdK\x41P\x9a\xf9\xc1_\x80U)\xc3K\x7f=\xc3\x87\xc7\xd3\x8f\xc8\xc4\xd5\xc6\xca\x64Q\xf4\x39]\x03:\xbe\x82\xa6\x1f" "\xce\x03o\x06\x63\x9c\x1e`\xd0\xa4=m\xf5;\xc0\x0f\x39\\\xce\x84\x34\x91\x15\x36\x46\xf3\x8e%\x92^\x89y\xaf\xfa\xe1\xc4\xb4y\xca\xdd" "\xb6\x14\xec\xf2u<\x63\xfer\xc3\x41\xf6\?\xbf\t\x36l\xd0L\x16\xdd\xc7\xef\x08\xdb\xa9\xd4 %}\x08t\xec\xdaWXp\xdf\xc5\x33" "\xa2\xea\x17\x0c\x02\xfd\xa4\xfe\x94,\xfas\x15#\x94Kz\x36_S\xab\xcd\xed\xab\xc0\x18\x0b*\x00\x41\x33\xd7\t\xe8\xd8S\xac^\xe5\x65" "\xcd\xf4#\xd7\x83\x31\xf2\x9c\x05\xc1\x82\xf3\x63'\xe0\xd1\xa8\x17X\"W\xf5\x17\x90\x05\x9d\xd0\xa2Q\xf7\xfa\xba{\x46\x14\xfb\xca\xff\x00\xf3\xf4\x1d\xf1\x39`\xb9\xd3<\x35\xac}\x08y\xd9\x02" "!\xe8\x36w\"\x41\xaf\xad\x38\xe2)v_W\x83\x0e\xf4\xb9\xfa\xd5\x32z\xb2\xc1\xfe\x04\x04\x37\x34\xafh\xc4\x9d\xcf\x8c\x8a\x14UP\xb6" "\xee\x35/:\xaa\xf1\x07\x81\xe5\xceg\xe6\xdd\xfaq\xc4z\x9b\x80\x66\xb4\xe7\x63\x32\x39\xe3.(\x07%\xd3\x83\xcf\x46\xbd\xfb\x02\x81\x0e\x42" "/\x94V\xe9\xfe\xccg\xdc\xf7\xe3\xfc\xb6\x17\x9d[\xa2v\xfb\x9d,\xda\xca^\xf7}\xd0\xf1\x8b\xf9\xf3\xd4\x8d\x7f\x43!\x98\xf2'\xcbT" "\xad~\x30\xcf\xde\xe6Q\xf0\xe3\xdb\xb3S~\xc1\x7f\x86:\xf6Q\xd0\xb1\xde/Y\xa4\x46\x61\x8e\xad\xb6\xb2\x32G\xe2\xb0~\x13\x12\xdb\x03" "\x04\xe1\xa0-O\xc2\x61\xf3~\x9f,\x8ej\xa6\xd1\x88mp%\xcbu\xce\xb3\x9b%L\xb9\x91\xeaL\xcejy~_)G\x34\x9a\xad" "\x0e\xc1*G\xfc\xb7\x01\x8b\xf6\?\xb7\x03\xcb\x46\xbdx\x86\xf5\x0e\x91\x07\xed\xb8\xea>P\x96\xab\x10\x7fs\x39(\xdb\x65\xa8x\x8e\xca\xff(\xe8\x98\xcdI\xb2\xecO\xcf\x8c\xd2\xc5\xfd\x03\xa0\xb3" "\xe4\x1cR@i\xf8P\xfe\xaa\xaf\xdc\x0f\xc6\xc8*\x96\xa5s~\x35\x83&\xb2_x\x13\xd0\xfd\xe5\x1a\x35\x91}\x39\xe8\x88\xa4\xbf\xf5\x65" "\xa0Oz\xe2z\xd9\x9c\x19@\xeev\xfa\x16\x8d\xbb\x8f\x97\x19\x37\x1e\x18\xb5\xc6\x18\x8d\xfb\x62\x96\x0eK\x1f}\x1c\xfc\xe4\x95\x9f\x64\x91\x1a" "%jlw\xe4\xe3\x39\xb6\xd3kQ\x62\xe6\x8a',\x99\xb3\xcdhT\x36y\x8e\x62\x8c\x1b\xf7[\xfc\xea\xd4\xb4\x0b\x89}K\x99\x06\xb1" "\x07\x9e\x87\xc4\x66\x62\x1d\xd1\xfc\xf5\xb2\x32\x12\x8b\\\xff\xe3\xd3\xc8\x9dr\x61\xdc\x99qs\xe5\xb9\x36\xab&\x1a\xc4\xca\x8e\xf4\xf2\xb0\xcb%" "-\xa5\xaa\x0e\xe8\x36m\x0e\xc4z\x36\xfd\xa1\x7f\x01\xba\r[!\r\x62\xab\xbe\x03tw\xce\xbc\xb8\xe5i\x17\x12\x03\xda\xca\xbey\x05\x94\xd7]v" "\x11\xe7\xc1\xfb\x81\x35\xe6\x9a`\xc7\x9d\x01-\x63\xe5\x8d\x8c\x99\x13Z\x95!M[\xaf\xe9\x41\xeevw)Yu\x8fm\xe3n\xdf\xa2\x96" "\xb1\xbd@\xb7\x9b\xfe\xa1\xda\xaf>\x88\x34l;\x18\xfai\xb6z\xa8\x0f\x8c\xb1\x10\xd0\x64\xd4]\xeaq\x64\x41\xc6\xfe\x19\x89\xadQ\x07j" "\xda\x8a\x9e\x96\x16\xa4\xd5\x9f\x03\x41;\x93J\x96\xfd\x46\xe1\x38\xf9\xc9 \x31\xd9x\x18\x04\xfd\x9d\xa3\x19\x9f\xed\xcc\r\xba\x14'\xc5\xd3\xde" "'\x41G\x1a\xec\xa1\xbf\x87\x14v\xe6\x12\xa8\xfd\xeaQ\x10\x94\xf1\xe2\xba\x9f\x83\x43sH\x1e\xf4\xdb\x89j\xa8\x16\xa4\x18\xd1\xc6g\x9d\x43" "[\x18\xc6\x33[^_\xbe\x07\xbbj\xa6/\x81\x1a\x97\x8e \xcd\xb6\xab\x04\x19{%\x08\xda\x05\xffh|\xde\xeb\xab\xc3\xebK\xd8\x38R" "\x04\xba\xb0\xf1\xc6j\xa0\xfb\xb6\xea\x42\x8d\x15Ki\xc8\xd1\x17\xbc\n\xc8\xd8\x15\x10\xb9lU@\x0b\xd2'\x7f\x05%\xb6\xe2%\xb6\xa8\xe2" "\xc4\x33\xe6)\"\xa4\xe1\xe8\x8d\xff\x13y\x31w\xd1p\?o\x9a\xb4\x05T<\x63\r$\x1c\x16\x36\x8e\x7f\x17l\xd8\x86@H\x13\xd0t" "u&\xa4\th\xeaV\xc8\xee\x0f\xa0L\xfa\xc9#]\xa1\x8a\xbb\xf8\x92\x30\xf6\x46\x0c\xd9\xe5Z/LQ\xad\x97>\x8c\xc4\x66\x35\x1d\xf4" "\xfbi\xa9Z\x90\x62\t#\xb6\xa0\xe9\xc7\xbe\x8dL\xa9\x36w\x80\xce\xa8\x04\x9e\x0e:u^\x08>LL\xda\xe9v\x30\xe0\x8fx.\x9f" "\xf2\xda\x11)^\xf9r\xd0i\xd2\xda\ti/\x9a\xec\x82\x8e\xed\xd2$\xabv\x12\x11\x8d\xfb.\xf1\xa4_\xc1\x1b\xb0\x1b\x85\x61\x99[\xb8" "\x07\x91\x46\x34\xf3\xbc\xdf\x07\x41\xbb\xc7\x1a\x96\xfd\xc6\xc1\x38wW\x16\xf0\xa5I\t&\xcbv\xff\x34\x9a\x34\x45\n\xfa\xed\xb6`\xa0\xdeM" "\xd1\xdb\xcc\xb1\x06\xb1\xfe\x12\x1b\xce;\x7f\x8c\x19\xec\xb2\xd9G\x85\x65\xb7R\xa6U\xa7\xd8\xb3\r\xb8\xf1@\xd9n\x89&\xab%\xafS\xa1" "S\x9a\xc5O\x66\xaa\x94\xac\xd7\x98\\\x93\x36\x94\x04\xb4\xea|\xf6'\x90x\xce\xb3\x30\xbb\x94\x64\xd9\xed.\xd6\xa5\x9an\xc0\xba`\xb2\xa8" "\xaa\x15\xd0\xaa\xf3<\xac\xb6\xd4,\x13s\xe3r\x87'\x36\xc7\xdd\x01]\x8f\xdep\x1a\?\xf9X\xb0l\x37\xb5\x93U\x36\xea\xbbQ>\xdb" "^\x1a~\x91\xa7\x64\xb3\xa6\xb0\xcc\xb6\x83\xe1x\xbd\xc1y\x1e\xd1\xdc\xa3i\x91\"\xfdS\xb0!R|\xb7\x11X\xf4\x9f\t\x95\xa0\xed\xe5" "M\x98\x04\xd2P\xf3\xa5\xb7!/\x1b\x85\xe3\x05\xdf\xb8+\x8bJ|Gz$*\xff\x0f\xc0*\xb7\xfb\x30\xb4M\xfb*i\xc0\xbd{-" "\xd8\xdd\xff\x90\xb6\x97\xd7\xa2\xdf\xa0\xed%\xba\xb8h\x92R`\x46\x34\xe4^h\x16l\xf4\x0cK\xa2\xcf\x97|\x1e\x89\xa9-\?\x83\x14\xac" "\xb8\x41\xe4%\xa5z\xf8=\xc8\x8b\xa6\x80\xc8\x9d\xf6\x99\xe7=\x17\?\x99\xe3\xa6`\xc8\xca\x30\x9e\xe3\xc0\x8a\x66N\xbb\xca{\x9e\x89L\xdd" "\xcb%\xcd\x32/\xfb+$\xf6[\xb4%\xea*Z\n\xad(\xdf\x80\x66>Y\xe9\x45\xcd\x86*\x18j\xd0\xfa\x8a\xe7|\x0bn\xc1\xfd\x93" "\xa8\xf1\xe4\x02Xm\xf3J\xb1\xcb,\x01\xfd\x82\xca\xc1\xca\x9c[\xfb,\xb8[\x92\x92\x9fV\xac\xfb\xd8=m\x9e\x19\x02ZH\xca\xb1\x32" "m\x1d\xd3w\x80\xa0\xbd\x8d\x12\xa8\xef\xd0\xdf\x01\x41\x1a\xf9\xa0\xdf(\xd9\xf2\x36T\xf3\xc5\x17\xa0\xe2\xcc\xe9P\xb2\xce\x1b\xc4\xeb@g\xbb" "\xb8\x1cY\xb4y\xf9\xb8\x37\xc8U\xaa\xcd%H\x9cumq/\xfa\xd3\xfeZ\xdc\x9c\xbd+\x14\xaa\xd1\xe3\xeb\x90\x17\xa5@o\x33\x30\xa3" "\x81\xb0\xe4\xd7\xc3\x97j\xacT\xcb\xbc\x38\xf3\tPv\xb7\xf3\x0b\x65Ol\x17\xab\xc3\xb2\xbfU\xb7N\xdd\xf8/\xa4\x19\x35qJ\xbe\xcb" "\xb7\xe4\x0e\xed\xd5X\xf1\xfdH\xec\x9e''\xdd\x02\x90&\x8e\x7f\xf2\x16\xf0\xe3&+\x43\xee\xf1Om\x14\x31\x44\xaa\x8d\xe2uHl\xd7" "\x37\x02Z$V\xa3\x1bT\x43\xc4\xab\x91\x86-\x05\x33j\xda\x1f\x42W\x93u\x33U\x8a&\xcd\x14\x30\x18XTMH\xd6\xa9\xb4\xa2u" "\xeci\xf7@g\xd7\xe5\xf2\xab\x61j\x7f(\x99v\xbb\\\xa2\xabO{\x10r\x35j\xc9\x87\xb4\?<\xf8\x05$\x16I/\x9e\x46\xa5\x9c" "\xf4\x1a\xb4\x95o\x34\xedk\xfc\x92(\xe4\x1dY$\x16\xed\xbd\xbb\x1e\?\xf9\xfd\xaf%{\x31-T#\xc3\xd7\"\x8d\xb9:OV\xfd\x46" "\xb3:\xdb\xc4zp\xc9\xdd\x80\x94\xed\x9c:\xa4\x91\xa1\xb8p_\xf7\x13\xa8i\xb3\x9d\x0bhm\x98\xdeG\x62;\xb4\r\xc7\x44\x45\xe5\xec" "x\xdd\xfdxL\xfa\xe3w\xd3v\xb5\x39\xa0\x91\xe1\xe1\?\x44\x9d\xda\xf5\xa8x\xa9\xcd\xcbG\x1a\xc8\x9f\xbe\x15\xe8T\x80\x8f\x00\xcb\x0f_" "\x96\xdc\xba\xafl\xdb\xf2\xa1\xd8\x16\xa6\xef\xf9\x38\x12\x8b\x02\xdc\xfaRP>\xa1\xac\x86\x65s\x17\x16\x8e\xb5\xaa\xa4\xd1\xa4\x0f\x13\xd3v\x44" "\x1b\xd0\x10\xf1\xd9X\x0b\x0f\xb9\xc1\xf0\x18\xd9\x38\n\x82\xacn,\xb2&\xfd\xf5\xde\x93\x35&\xce\x34\x19\xbb\x11X\x03Z\x17\x61yN\xbf" "\x84\x63v\x9f\x31Yu\xcb\x87uV\xf7\xb5\xa0#J\xfb\x33\x0c\xc7\x15\xab\x45\xba\xf1< \x43-\x35\x13\x63\xb7\xd8\x1f\xa6\xee\x7f\x05\xb0" "\x46]\x7f\x8c\xd5x\xc9\xdd\xd7\x97\xcd\x98*\x1c\xf3\xf7\xb6V\xedR\x43\xb2>\xa6\xccG\x93\xa2\xb4\x9f\xbb\x1e<\xd7+\x87\xd1\xac\x30\x7f" "\xc9\x34\n\xdc\x0f\x83\x96\xcc\xed|X\xa6\xd2\xbe\x1a\x04\xcd\?@\xb2.Jr\xe8\x17@o\xf0\x82\x62!|\x16\xfc\xd8\x1d\xccx\x61\xd5" "+\xce}g\x95\x97\xbc\x0c\xdd\x39\xf3\xba\xbf<\x32\xc9\xd2\xb8\x1a\x04\xdd\x8d\xf0\x80mU\x05j\xd0\x88np\xc9\xef\x64\x95}\x66>\xc6" "\x03t,\x07\xd6i(.\xa3\x83x\xd7y\xef\x87Q\x86\xa3N\xc7\x07\xbbY\x9f\xaeL\xeek\xd1\xc5\x0b\x36!\x8f\x97z\xb5\xa0\xc2\xb2" "\xc8~\xf4\x36P\x16\xd9\xaf\xfe!(\xb3\x37\x9e\x04\xc1\x31S\x92Y\xdf\xb3*\xfa\x00\xb4\xd4\xe7%O\x91\xa5\x93\x31gJ\xc9\xc9\x16-" "\xf9h\x9a\xcd\xea\x1a\xa0\x9b[\xda\xa0\xe8\xaf\x16.\xb0\xc1\xde\x07ti)\x17\xbe\x11\xb9s\x17}\x15t\xa8\xa2\x97@\x8a=\xc7\xe2S" "ww\x01\xeb\x94\x95\xf3\x92=\x0f\x1a\x96\xfd\x90\x8b\x16\x92\xe9\xdf\x03:\x8f\x1bN w{\xf0:\xa0\xa5\xe5{#\xb0\xc1\x61\x02\x33\x19" "\x35\x95\x84\xc8\x34\x8c<~;\n\\*\xe5\xe2\xe7\xe1\x8b\x30vI\x1d\xe8\xccy\xee\x82\xf5\xaa\x1a|\x31\xf7\xa4\x11\xcd \x0f>\x03\x89" "\xcd\xc7]\xb2\xbe`u\x41\x13G\x96\x18\x9b\xcc\xa5@\x97\xd2x\xea\x87\x90\xd8\x1f\xb2\x14\x83\xc6\xea\x03\xaf\x42\xa6\x94\x14\x93\x9c\xa2Y\xaa" "\xc4\x0b\xb6\xcd\x12/\xb9}x\xd9\xdfTZ\xb7K\x1f\xd1\xac\xcd\x7f\x82\xa2_\xe9Z\xa9I\xd1x\x32Y\x37%IN\xba\xeb\xc8i\x9b" "\xabG\xb3\xd2.\x1ex\x0c\x89\xa5\x06o\xc1\xc2p}\x45\x15 \x9av\xe7!\xb3\xa2\xea\x37\x37\x80\x31\xb3\xa1\n\x8a\xb6@\x88\x97\x46M" "!WX\x83O\x05\xfa\xaa\xfe\x14M\xfb\xfcy\xc8v\xb1\xe2\x05\x9b\x03\xc4+|\x01\xf0\xc5H\xec\xd6G\xb3\x64\xecj$^T\x0e\xc3" "\xb2/\x34V\xa4R&Q\xa7\xb4l|\xef\xb3\x80\xc5\xca\xfd+\x88\xd3\xeb\xb2\xdb\x01h\xa0&\x8e\x97\x80\x31\xf7\xb6Q\xdeUq\xe2\x15" "iM\x07~\x1d\xe8\xec\xf4\xee\x02\x96\x35\xc6x\x45\x0e)\xae[\x85\xb6\x88\x38\xe9O#/S\xc8h\xd6\xaf\x93\xd0X\x31\x8dy\xe6\x98" "\xbd\xb4\x98\xac\x9f\xf2R\xa5\xd6\xdd\x03\x91}\xae\xae\xd6\x8fg\xc1\x86\xf9~\x8cW\x64L\xb9\x10S#\x35V\xfc'\xa0\xf3\xf4\xff.\xa0" "\xb3\x63\x44s\x98&\x63\xc7\x80\xde\xe7\xc5+m\xa7\xee\x13@\x17m\x39\xf8G\xc0\xa2\xb6\x9c\x02\x96\xaf\xda\xa6\xed\xa4&(\xfa{\xe2K" "n\x1c\xb8\x02\xfdI\xdf\xfd\x61\x64\xea\xee\x88'\xec\x66t\xb2\xce\xed\xf4\xfb\x90\x97=\r\x16/\xf9\xfb\xb9+\xa2\?\x17Hi\x08\xf3\x0f" "=\x0e,\xbf\x8c\x39}Z\x8b\x37\x9a\x1d\xf0\xa2\xb3\x1b\"\xe1\x98\xb0z\xe8\x16$\x36\x0b\xf6h\xda\x9fs\x9d%\xabO\x41\x16~}~" "\x85\xfa\xb3\x03,\xb2\xfa}`\xf1\xe5\xd0\xa7\x83\x31\xdf\x34\x98\xf6\x01\x88\x66\x90\x17\xa0\xc9\x0c\xb9M\xfb\x8a(m\x63;\xd0\xd9\xa8;\x91" "X\xba\xdc\xea\x8f\x65\x92\xd3\x35\x9e\xa9\xcd\x88\xe2%\xd1\xa8\x8b\x45\x91\xd8\x63\xff\x36\xb0\xa4\tW\x63nL[\xc7{\xfa\x90)\x95\x04m" "P-$Q\xb9\xa7\xddk\xfd\x90HQ=\x0bt\x9e\xfe\x9f\x01\x16\x99\xbf\x1cU\x30\xaa\xe2\x44\xd3\xe6`-\x39mS\xach\xde\xd8\x08" "\x8a~\xbbj\xc5&K!\xad\x1f\xa5\xeb\xa6\xf5\xe3\x85[\xc8\xdd\xbd\xf9\xa9\xf1\xe4\x03@\x97\xdc\?+\xe8\xee\x33\x7f\x45\x34\xfc\xd7\xd0." "&\xdc\x03\xc6I\xbb\x01\x11\xd1\xfa\xf1\x00&'\xa7\xcd\x08!\x1c\xb3\xad\xaa\x80\x1e\x35S\x1f\x05:U\xfd\xf7\x91X:\xcf\xaa\x9b\x90\xb8" "\xd1\xea\x94\x66\x90\xe9\xd7\"\x8d\xf9\x66\t\xc7\xcc\x85i\x38\xe1~\x89O\xfb\xf6>\xfdgV\x7f\x05\x1cJ\x13>\xef\x16\x64\xe1\x9bNj" "\xfd(\x92\xf6\xba\xa4\xb6\xd8\x0f'\xf2\xaa\x00\xc9I\xbb%\x11\xa8\xad#:\"\xda:\x1e\n@G\x86\xfe\xf5\x36\xa0\x43\xf9\xd3\xdf{\x00" "X\xc2\xf3\xe3\xdf\x45\xee-\xae\t\xbe\xc9\x33\x64\x0f^Gj\xebx\x0c\xe8\xa3\xff" "\x0fO\xdf\x1dgiQ\xac\xbd\xe7\xcc\xcc&\x36\xe7\x1c\x08\xbb,\x0b\x0bH\xce\x43\xce\x41%(\xa0\xa8p\x11\x04\x01Q\x30\xa2\x93s\xce" "y\xce\xce\xce\xec\xe4\xb4\x93\xb3(\x06\x44\xbdWL\xa8\xa8W\x9c\x37\x99\x31\xeb\xd5\xcf\xef\xa9\xa7\xab\xf6\xafs~oWUWwW\xe7" "\xa7\xabL\ri\x82\xf5G G\x9f\xab\xfb\x0e\xe2\x88\xb9\xfb\x18\x0b\x88~\xda%\x83\xc3N\xfc!\xd6Q\\\x86\x12\xeb\xb8/\x0f\\t" "\x0b\x80\xe9\xcf\x41\x1c\xb1\xaa<\xa6\xdd*\xe8\xd1(\x93^S\x9b\xe5%\xca'\xcf\x82K\xba\x43r\x08\x62\xe2\xcc\x8bPRN\x13\xbb\xa0" "\xbc\x85\xb2%\xa0\x31\x45\x46~}\x11\x16\x0e\x12p~*\xf2\x1a\x35\xfbQ\xf7\x14\x41\xd7q\xab\x1f\xc5\xf7z-zV\x10\x0e\x8a\x45=" "\x9b\t.\x83+;\xb0\xe2Z\x98\xba\xf9Y\x1a$\x9a\xe5\x18h\xa4\xc3\xae\xd9\n\xc5x`{&$\xeb\xe9n\xd0\x63\xb7\xe4\xfd\xf6\x88" "i\xb0\xc9\xec\xc7\"\x9e\xf7X<\x97~\xdd\xb9\x84\x83\x98\x80\x92\xd7`\xc3{T\xbb\xa7O\xb4\xe1.\x19\xc7hu\xd8\x1c\x11\x64\x98\x92" "\x8d\x92\"\xaf\x1d\xe7|\x08\\\x62$\xa7\x62\xdd{T\xbd\xad\x46\xa3\x36%\x8d\x1b\x30\xa0K\xaf \xbd&}\x95\xe9\t\xda\x30\xb6'\x1f" "\xec\xf4lvuj\x38\xcc\xe8\xb4\x19\xc8\xb4\xc9\x0c\xc0.)\x9az\xacQln\x1a\x14\x93\x38%\x17\\\xda+\xa3\xf1\n\xd3P\xd7\x87" "\x61\xbf\x45\x94\x1b\x94Q}\x95\x0c)\x06\xd8\x1b\x36\xa7\x16\xc7\x38\xe7\xae\x83\xce\xf6\xe2\xfb\x98\x86\x90\x08\x88H\x8c\xfd\t\xb9\xf7\x39\xd3\n" "\x07\xc5\x36\xaei\x87\x1c\x05\xe4\xfb\x1diNN\x34^\xe5l\x35\xe8\xd2G\x94\x01\x81\x88\xb1^\xb0\xd3-\xdb\xcbP\xbe\xd4U\x42\x38H" "\xa7\x82\xd8\xa7\x1c\xd5\x9e\x12\x0ek@:\xdf\xe1\x0fO\x81>\x1a\xcc(\xe8\xb2\xf7\x44\xce)\xe5.\xb0s\xc0\?\x01v=^\x0b\x87\x19" "\x1a\xe3\x16(/\xd5\x92\x8c\x19\xcd!\x12\x0f\x42\r}\x34\xe4\x39 \xe2~\xb0w\xc8\r\x38\x96\x85\xc3\xb9\x9a\xe9\x31=\x05\x8d\xc6k\xad" "\xe6\xc5\xd4\x93\xff\x01.\xe4\x9e\x32\xfe;(/\xc5\xc9x\x08\xec\x62\xbd\xefG\xdf\xe9\xd0\x88\xb1\xd1\xa8\x86\x99\x08\xba\x44\xe7k~\x02v" "v\xcf\\p\xb1W\xfe\x01Y\xb0_$\xc0\xa5\xa1p\xa2\xd1\t\x97W\x34\xae;)\xaf\xc5\xde\x37\x11[\xf8\xe0!\xe4\x45\xb0\xd0\x01\xa8" "\xaa\x8fp\xfd\x63z\x34\x1d\x8dN\xaai\x11I\x18\xbf\x06\xaa\xf2\xcc\n\xa3\x8d\x43\x12n\x01;\xbb\xc3\x99`g'\xc2\x46l\xdc|\x43" "\x39\x00\xa1,n\xd9=\xef\x04\x31-s\x08\xc4\xec;\xef\x45^\xb6\xb7\xea\xb0;\x8eq\x43\xf7uQ\xf9\x19\xe4U\xebt\x0e\x07-v" "\xf0\x30M\xf4\x1apY\xec\xe0q\x83\x92N\xaa\xb5x-\xe6\xedpP\xfa\x45R\x19\xb8\xf4\x14\xcb\?\xd6\x65y\xa9\xcb\xfd\xc0\x41\x13\x9f" "\x02\xbb\xde\xf9\x06\x04\x19&\xdf\x0cvz\n\xfd\"\xb8\xd4\x1d\x96o \xc3h\x94\xa6u\x00rZ\xdd\x17\xdf\x01\x08S '\xc3*\x41" "\x14;\xb5\x06\xfa\x98\x97\x8c\x41\xd8j\xec\xe1\xb7\xa1\x8f\xb9\x96:\x66\xe0\xe4Q\x1a\x1b\x36Y\xe3\x62\x63\\\x98IoJy\x0b\x02\xf5\x8c" "(\xe8\xd1\xf9\"\xe8\x63I\x31\x17\x10\x88\x18{\x18\x92i\xbd{ \xb0Wi\xba\xd8\x89\xa6\xa1X\x89)\x66\xde\x0e\t\x44LI\x45\xeb" "\xb0\xecg\x41\xa0\x06\x1a\xf6\x88H\x8c\x9d\x03\x81\x62\xcf\xfd\xcf@\x1f\xbb\"!\x8e\x31^\x06\x39v\xfd\xe1\x10\x89o\x41\x8e<\xe9\xfa\xf8" "\x1ep\x99\xf7\xfb\x0e\x8bV\x39~L\xcb\x35\xa9\x83\xb0\xe7\x10\x89\xb7!S)W\xfc\xcb\xc8\xb4\xd9\xdaK\x46\x89\x35\xc3(\x85\x14\xe7\x9a" "\xfb\x90\xa9\x0c\x32;\xf7\"/\x83\xfa\xf7\xa9\x8br\xaf\x45\x9fKx\x0e\x88(\x43\xa5\xcc;\xf1r\xb0\xb3\x33n\x86\x1a\xeaJ\xcek\xd1" "h\xb0^\x42G\x80p\x90#\x80\xd8\x06\xed\xf9]\xe0\x32OY\x1d\x06\x15\x18\?\xee\xca\x1eM\xd2\xd8\xb6\x42\r\x85\xa0{t\x65\xb9\xef" "\x19\xe8\x63\xee\x32\x88\?\x14g/\x84\x1d~N:\x08\x8c\x7f\xc5\x42\x32\xb2P \x90\xef\x80\x88G Y\xdf!\x06}\xf4\x0fp)\x88" "\xe9\x83\xf4\xb3 \xb6#\x82\x0ev\xd8/\x83\xb8\xcb\xd4\x30\x8f\xfd=\x1d\xd6^R-I\xd8\xf8$\xf4\tg\x38\xc8\xe1\xe2L\xe4\x65\xb7" "\xa5\xc4\x16\xc6\xd1\xf1\x89-\x8c_\x06.\x86\x9c\xae\x00\x31:\xda\xf2\xd7\x8e\x82X/\x01\xfd\x0e\x9d\xfa\xa3q\x85sG\x93z\x19\x1d\xf4" "\xb1\x12\xa4\x7f\xa9\x97\x03\x8f \xc3\xa7\x8b G\x86\x8b\xe7\xdf\x07\xe5\xe9\xe3\x17\x35\x7fL\x8a\xb3\xb2\x1a\x02\xed\x34\xbe\xc7\x66\xcf>{\x11" "\xd6\x62\xa8\xbc\x04]\x31\xcbZ\xcb\x0e\xe5\x1c\xb6\x10\x36\x46$\x61\xac\x10\xc4|\x46\xfd\x08\x88\xf5\xa0>\x1c\x94\xc9\xf7\xd6\xbd\xc8\x94\xe3\xc6" "\x95\xc8T'_\xdf\x81\x0c\xcf\x00\x97\x1dZ\x12I\x18{\x16\\\xe2=\x66\xdb%\xe0\xa2\xd5\xc9\xa8>i\x15.\xca\xf7\xfc\r\x65\xb7\x33" "\xbd\x1e\x05\xe3\x45\x93\x9c\xf5\x64\xf9\xad\x18r\xff\x98\x9d\xea;\x00\xe1\xe9\xa0)w\xc4\x41\x8f\x05\x03\xed+\x31\xf3\xe3\x00r\x01\xd4\x30\x07" "\x1a\x83\xc4\x9c\xdc\n\x35l\x00!\xa4p\xd9\xdf!\x90\xc5\xd9\x0f\xe2\x93\x43J\x85\n\xec\xd1\x30\xb5\x41_\xa9\xb3\x9fpP.V\x36\x61" "\xd8\x0b\xc9z;\x19\xf4\x0c\x9bm\xe8\x39\xbfG\xdf\x98\xcb;\x91\x05\x95O \x8bv\xb3\x8d\x84\xd4\n" ",\xbc\x33\xc3\x35J\x34n\x91\xd7&\x15\xda\x1a\xf4\xe8\x99L\xd0':\?}\x16\xe4H\xeb\xc4o\x80\x9c\x0ek\\\xdb\xcc:\x98\x1f\x06" "\xbd\xe1\xe3\xd6\xa6\xe6<\xa4\xd3\xfc\x1b\x8f\xeb\xe9\x65\x34\xa9S[\xd0\x33j\xe5\x92\xde\xb4\x34\x07\x34\n-\x0bz\xc6\xac\xc2\xa9\xc6\x36\xe4" "\xae\x37P\xe1\x30{\xc1\x08$[\x1c\x84q\x9a\x1f\xc6\x16\x87\xd3;\r\xc4\xa2\xcf\xe6\x41H\xd6\x33\xfc\xa0g\xc2j\x9e\x37\xe0s\x90\xd3" "\xed\xaa\xce\xef\xb0@\xcc=\x93V\x64\xbdU\x0c\x87\xa5\x0b\xdf\xf6hj\x38R\x64\xc5\xb1Is:\xcd\x04\x8a\xf5nz\x11\xaa\xda\xdb\x9c" "\x61\x31\x92S\x92\x41\xac\xe7-\xd1\xa4\x34\xdc\xe8\xff\x42\x31\x96]\xc6U\xf5r\x10\xf4\xa9\xb7\xc3hR\x1a%\xbe\x07\x92\xd9({ \xd0" "N\xe3\x87i\t\x37\x41\rn\x03/\x06\xbbn\x66}\xc2\xf3\x62]\xa8\x04sz\?)\x8b\xa5[\xaf\x83\x1c{S\xec\x30x\x98\xa4\x88" "\xc1\xfb\xd2\xef!p\xc0\x9a\xa9\xd7\xe5\x15M\xb2\xbd>\x8fL\xd9+\x37\x41U]\x8a\x84\xc3\x9c\x0b\xb0g\xecP\x37;\xbe\xc3\xe9\xc9p" "*\r\xb7\x43&\x32\xe6\x8e\xa9\x9f\xd0\xbb\xf8!\xc8\xd1\x93\xff`@gs/\x61>\xfc\x87\x15\x94\xee;\x08\x1fl\x63\xd2.\xf4\x1d\x06" "\xef\xbbP>\xc7\xca>\xec\xea\xd9w\xd0\xbb}\xe0\xa2=\xa3[MJ\xe3.\xed\x03q\xaeU\xe6\xc9\xcd\x91\xc5\x95\x1e\xd0m\xa9\x97P" "\xb4\x8f\xe7pz\xfb \xd9@\xd7\x1d\x83V\x1cz\xa4\xbf\x17\x02m\xd3\xd7w\xcc\x04\xb2\x0f\xa2\xa4\x0e\x8c\xb7\x01r\xf4R \x1c\xd6\x88" "\x18~\x07\xcb\xb5\x15r\xf4\xb4\x30\x9a\xb6\x03\xed>{'\xe5 |\xb0\xe7\x36\x8b\x0e\xd9\x31l\xf5<\x66\x96@\x0b\xbf\x1f\xecz\x98\xe6" "\xb5,X\xa3H\xe3n\xf8\x12\xd8\xa5q\xfb\?\n\x93\xa8uu\xe8;\xe0\x9f\x94\x82\xa6u#\xd8\xd5\xd1\x44\xd0\xd7\x61\x45\x9e\xb0,h" "\?\x1f\x00\x8dm\xfa\xfa\xa4\xec\x37\xa1\x0e\x1d*OV\x05\xea\xcf\xca#\x18/\xbe\x08Uu\x8e\x8b&\x35\x9ex\x34]l\xd5\xcb\x02\x62" "@s`<\xe9;\xb4^\xec\xbb'\xd5\xb9J\x34m\x1e\x11\xfb\xa4\x80\xf7\xbc\x89\xbc\xf4\x85\x88\x97Pw=\x1eqz\x34\x12\xb1\xc3\x65" "\xd8iv\x18\x9c`Rz\xc1\xfa\x63\xa0Q\x8f[\xe1\x30\xfd\xa1\xc9H\xcbs\x12\xac\x33\x1d\x84o\x02\xc4\xb4\x96\x87\x90\x97\xfa\x13\x0e\x06" "\x8aLU\xf5\x17\xe7\xb5i\xd8\xf7pX\xb1\xdf\xe1\x88\xae\x84\xfd\x0e*\xbf\x1d\x02\x15\x1b\x1f\x38,\x1fz\xd3\x00\xef\xe3n\x85\x9c.\xd7" "\xca\xbe\x03\xfe\x61'>\x46\xd3z\x06\\\\\x04\xfe\x02\x02[]\x85\x87\xc3sV\xf3\x62l\xc9w\xa2\x36\xca\xcd\x36P\?I[z!" "\xb9\x44+!\x61\xee\xf4\xdb\xec\x1a\xa5\x43\x0f\xe1\xc3\x31Z\xdd\xb3\x90\x43\x63\xc3$\x35Mo-\xd9\x90\xa3.\x08<\"\x00\xb7\xa4\x80\xcb" "\xca\x35\x46\x17Lg\x80\x8b\xc6v\t\xb8x\xb2\xfd,\xb8\xf4\xe9J\x30P\xe6l\xcc'\xbao\x32\r\\<)}(\xd5w\xe0@\xe9" "\xa7\xec\x32\x8f\x82]\xfdZ\x07}\xdaw\x82\x81r\x33\x1b{\"\xed\x1c`\xee\x80\x1c\xf4\xc1\xf5)o\xa0Z\xa4\x36\x96.\x81\xc0t\x13" "(}'\x39\x13r\x86\xacu\x14,\xe4\xb5\xe9\xe0\x10\x8e\xb1\xc7\xbd\x03\xec\t\xfb\x92\xe3*\x33\xe8\xb3Yo\x80\xb3\xde>\xb0\xab\xef}" "\xaf\xcd\"z;P\x9f\xd4<\xef\x61\xdf\x0f\x62\x1e\xcb\x8f\x81\xc6\xbc\x45\x8dX\x00\xb8\x31\x1dI\xa2I\xfa\xf3\x1c\x06;{\xf7U\xe0\xe2" "\x1c\x37\x8d,\xa8*v\x7f\x63\xb4\xc3\xc7\xa0\x98\xc5\xd6!\x02\x30\xe9\\\xb0\xeb\xf1\x63\x34m~\xf5\xfb\xb4\xef\x04\x03\xea\x13\xd5#\x96o" "u*\xe4\xe4[\xa6:\xe0G\xd3\r\xce\xfc\x82>\xbb\x8f\x1b@\x37\x8f\x1f\xfe\x37rW\xa7\x1f\xdeIt\xdf\x88.n\xc3\x31\xf6&\xac" "\x64\x1c&\xf0\x01\xe8\x93\xe3\x14\x8b\xa6\xd5\xa9\x45\x30\xc0)\x12\xcb\xef\x84\x46\x1a\n\xc7\xc4\xc6v{\xe0R\xbf=~\x37+\xe1v\xe8\xa3" "\x8b\xc9h\xda\xf6\x95\x03\xf6\xb4yLz\xd3\x96\xeb\xc1\xa5\x33~\x34I\x13\xc5*n\x9a\x9d\xe8<(\xaf\xcb\x42\x8f\xc0\xbf\xe5\x15\x90l" "\x0f\xc6g\xd3\\\x91\x83\x81\x46kwvs\x0cq\x44\xf7\t\x0e\x64L\xfd\xed\x44\x93\x16\xe5m\x9a\xe1\xc8\xdf\x86\x64\x9d\\\xa2\xd9t\xab" "U\xc3\x66$\x14\xf2\xe4\xb5\xd5\x9b\xb5\x88\x1d.\xc5x\x38)}p\xe9\x17 '\xe1\xf2\n\xfa\xecNj\x80:\xbf\x0cv\xea|\x06\xb8" "\xc4\xfc\x1e\xef\x04\x17\xa7\xb6\xdf\x81\xcb\"\x44\x13\xd4\xb7\xea\x1e\x10\x9b\xdf\x9e\x31\x06\x11\xde\x8f\xda\x30X]\xb7\xc1\xea&\x65\xe8\xbe\x00\x63" "\xdd\x90\xba\x9f\n\xc7xn#\xf6l\xd7\r\xdd\xf6\xb6\x62\xc4\xbc%\xf4\xd9\x19\xe3P\x86\x65Q\xe1\n\xe8;(`\x04\xaeR\xab\x16\x36" "\xf7\xd5\xa8\r\x8d\xe6\x10\x0c\xe8\x1d\x99\x97\x98\x31\x39\x1a\xd0\x30\x1c\xb1'\x03\x63\xec\x32g\x41\xa0-\x06\xba\xcb\x1c\xbbG,_\xee\x61\xd0" "\x88\x8d\xad\x93$}\x0f\x12MKs\x1f\x96\x36\x35\xef^\x43z\x34\xe4\x11\xcb\x17\xc3\x1e\x64\x44}\xce\x84\x63z\x95\x10\x0ci\x87\x8d\xa6" "u\x37\x11\x0c\x98\x8f\x0e\x07\xd8[\x0f\x62\xe9\x17WO\x41\x9f\x61\xcdkVq\x0e\x01\x81v\xb1O\x82\xd8pz\xedV\x9c\x31\x0b\x61\xd3" "i.\r\xbb\xd5\xc1\x63\x34\xcb\xc1s\x1f\xf2R\x1f\x1d^;\xbag|\x7f:\xb8x&\xf3g\x10\x9b'\xd5\x36\x05\xdb\x87\x63\xf5Ny" "\xbfS\xdd\xa1\xfb\xdd\x16&{\xb6\xd8\x94g)\xb0\xa7\x1e\x32\x80\\;\x0b\xf8I\xb0K\xcf=\x0fK\xbeYi\xd3U\?\x05\xb1\xdd\xbe" "\r\xe9S#\xaf\xcdvm\xe2g\x32v\xd9\xe9\xa8\x31}\xac\x11\x8eI\xec\x86}\x07\x91\xbb:]\xf4\xbb\x45\xd5\x65\x0b\xa8:\xbd]\x8a" "\x66\xf5\xd2\x36\x18\xe0\x34\xf1{H\x36\xb7\xfc\xce\x99\xa4\xd8\xbcvX\xbfSW\xd4>\x11\x80I\xdb!\xc7\xde*\xce\xb2\xb9\xff\t\x39\x9c" "\"\xaf\x80\x1cN\x91\x37\x83]w@~\xa7\x1d\xb4v\xebU\x42\x30\xc0[\xc5\x1e\xe4%\xe5\xdav\x35\x88\xc5Z\x36\r\x83\xa6Q\x35\x9c" "\x1e\xb2\x16\xac\xb0\x1a\xb3\xeb\xbc!}\x1a\xe6\x39\xd7\x91o\x82\xbdUk~\"\xdd\x88\xa5\xa4;/\x00q\xa9\x35\x9c=}\x1a\x13k\xd9" "\\\x07\xc5\xcc\x07\xf2\x84=m\xeenvY\x44\xb3\x62\xd8\x97\xfe\x12\xec\x65\x66\x63\xbdZ\?\xed\xb6k\x1b\xa3!]\x0cv\x31\xa4\xbdX" "Hws}x\x13r\x1f\x34\r\xa9\xf3S\xe0*\x31.\x19\xe7\xaf\xbf\x0f\xb9\x8b\xf1\xaf*\x03;\x97\x97\xd7\x83\x46TM}\x1c\x34\x34" "\xa4O\x80\x66\xde\x19\x64\x38\x61\x1e\x11\xbb\x13V\xf3z\x44\x10\x0c\x88\xa9_\xfb\x17pIw\x38\xf0\x31pq\xa5\xb7\x15\\|P\xbf\x17" "\\\x0c\xae$\xf6l\x8e\x07\xdb\xa8\xe1v\xd0\xe4:\xc5\xa2i\xdb[\xcd\xea\xb3\x65\xaf]\x9f\x99\x87\x63\xf4\x0c\xf3\x07\x10\xe7\x19\xb1\xee\xf1" "\xa3Yu\x31\x1d\x0c\xd0\xd4\xa7Q\x63\x16\x0e\xd8!\tw\x81\x9d\xa6~\x61\xaa\xdf\x9bm\xec\xba\xdb\x8a\x66\r\x34\x32\x30\x66\x99V\x39\xe2" "pL\x03\x04\xfb\xdd\x1a\xb3\xdewh\xc3\xdd\xe0R#\xf1\xda\xa5\xeb\xed:\x08\x62\x85\xde\x85\x13<\xa9\xe8\x01\x17;\x08z\x41\xaf\xb9\x05" "\x98\x35\xc7\x9e\x43\xf5\xfag\xc0^\xec\xb6\x43\xe7\xa4w\xde\x05\x39=&G\xac\xe5\xd0\xf7 \x87\xdd\x01\xdb\xdbi:\x98\xad\x05\x17\x95\xbf" "\x12\\\x1am'\x1c\xa3\?\x90\xb3\xc1\x65q\x61\xba;-Ss\t\x35\xa0N\x36\xa2\xf9\x34\xcb\x42L\"\xbe\x0b\xc4\xe6\x0bnH\x35\xf4" "\xbb\x35\x06V\x34\xaf\xae\xc0\xbcv^\xb5|\x04\xc5\xb1\xc3\xcfi\xda\xc6\xff!\x0b\x31\x89\xcb\xce\x07\xb1]\xde\r\x99\xdb\xa8vT\xef\xf2" "[\x16\xa0!;\xfe&\x64\xca\xee\x80\xf9\xbd\xbb\xc7jU\xb7\xa5\xd1<\xc7\x43\xacR\x1c\xc4Q\x86\xf7\x01SU\x81[~o\xb1\x19I" "\x9bq\x89\xf5\x9ez\x0e\x32mu\x16\xe5\xb5i\xec\xaa\xe0\x84\x62*<\x82\x1e\xa3\xa7 \xd0\xe2\xc2L\xc8\\\xf0\x63\xe9h\xfa\xe0.\x18" "PP\x44\x34o/\x95\x86\xa4\\\xb2\xb2\x1a\xc3P\x10{\xeaM\xe8\xac\x37\xf2~o\xa9V\xe6\xac\x06\xf5\x8b\xe6s\xcc\xea\xd4\x11\xa2G" "\x88\xa3\x8c\x87\x13\x16>\xbeW\x8f\x8f\xa2Y\x1d<\xa3y\xda\xc6~\xe4\xd5\xe6\xea'pP\xc9\xf3\x90\xa9\xed\xec\xba\x07\x8d]\x17\xdb\xd1" "<{\xc1\xcf\x91\x97\xc2;\x83\x13\xf6\xd4H\xdc]\xc6\xe2P\x83\xe0I\x18I\x38\xc6\x89\x0c\xbd`\x42\x63\xf5\x46\xf3\x1c\xf0\xaf\x00\r\xda" "k\xe5\xda\xdb\x41\xc3\x10l\x13\xa0\x31\xef\x1f\xdd|\xd7\x7f\x06\xb2P|K\x34\xdb\x65\xf5\x43\x1f\x89\xd8\x89\x0f\xe9\x11\x8aw\x9ck\xec\xd3" " G:\xd1\xe7\xe2\x90\x63n\xf0g\xf5\xcc<\x9aW\xa8R\x30\x64\x61\x46\x1d\x9cr\x1d\xd8\xe9\xad\x65\x1b\xd8\xc7\xadut\x81\x17\xcdj" "w\x88\xe6y\x44p+\xd8\xc5\xb0\x93/\x03\xbb\x94\x62\xc7k`W\xf4Z\x38\x86\xde\x94\xf4\xd2w\xc0^o\x46\xa2\x63\x66\x30\x64.\x43" "O(\x8c\xd6s\xb8\xca/\x80\xdd\x36\xe9\x63\x1aT\"\x9c\xe0\x98\x30\x00v\x0e\x9eO\x83\x46\x9ai_\x31h\xa6\\\xb9\xc2\tn\x8e\x9a" "PQ\x16\x32\xa6\xd7:\xf5\x90\xf5\x9dY{&\x43\x38\xe5\x07\x7f\x04\xae&\x33\x9b\x01\xad\x84!{\xe8t\x42\x43\xb4x\x02\xb0\xdc\xf5\xe6" "%\xc8\xcb\x36>\x13\xd2\x9b.\x96\x8e\x46K\xc0\xa8\x35o\xb1QN\xa8\xff\x1f\xcf\xc1)\xf7\x82Xo\x07\xfcn\x8b[:\x95\x66\x95\x39" "\x64m\x61\x07\x89\x06\xb9\xf4\x04i\xb9|\xf8^\x64j\xefX'\xc4\x90&\xb0\xcc\x98\xd2\x0b\x11\xbf\xb7\xc9j\xd5\x36,\x43\x1a\xab\xd7\x13" "\x37\x95I\xc5\?\x00W\x42\xebp\x8a\x9b\x35l\xffgOX\x85\xb3-\x9e\x87\xaa\xdc{\x8a\x8d\xd9\x05_\xbf\x42\x05\x02\x87\xbd\x44\x17n" "W\?\xe4\xdeq\x8b\xa0=\xa1\xdb\x93p\x8a\xdb\x13\xac!\xfb\xd5\x7fx\x34kG\xdc\x43\x43\xae\x36\x02\xc2\x32\x37`wLX\xa6 \x82" "\x8e\xeb\x43\xcbp\xc2\x9e\xfft\xcf\xbb\xca\x0c\xa7tR\xf0\x1d\xe0\x13\xeb\x8d~]\x98y\xe2y\x32V-}\xb9\xccl\x43\xcc&)\x15" "\xec\xec\x17X\x00\xf7\x9aG\xf1\x13U\xd6\xee'\xa7\x12\xb6\xd7k\xc8\x82\xdd\xfc\"H\xb6\th\xd6\xe2\xf0\xce\xeb-U\x30\x64\x11pN" "\xe8\x39\xa4G\xa0\xe6\xd2!\x64z\xdc\xca\xce\xf0|\xc5\x90\x63\x1e\xae\x66'\xacM\x61~\xf1\xb7\x1f\x01\xbb\xbd\xcfmG\x33\xc5n\xbf\x06" "r\x64\xfcY~\x01\xe4\xe8\xa4\x10N\xf1\x18\xfc-\xb0O\x1a;O\xec\x8f\x80]z\xee\xd6+@,]\x66\xcd\xbb@L\xd3z\x0e\x99" "J)\x96\xcb\x98\xa9g\x05\xd1<\xe7\xc1\x33\xc0U\xe7\x04\x86\x13|\x42~'\xb8\xe8\xc0\x07\x8b\x81~\xeb\xe6\xed\xf2j\xe3*\x18\x1b\xc1" "\x9c\xeb\x0b\x41\xcc\x17\xf1\x1f\x07\x8d\xe8\xf3\xc8\xf7 Yl~\xfb\x97Q\x1bTL\x1a\x8e#\t\x36\xaa\x13\xb4\x1f\xacv\xa6\x8a]\xc3\xf9" "\xfd\xfa\xba\xcas\x88MYo\xf4\x99\xf9\xe9)\x8d\xdf\xaf'\xed\xd1\xac\xc6J\x88\xe6\x65\x9a\xb8H\xc6L{X\xd4N_:_\x84\x1c" "\xe9\xc2\x17`\x11\xd8/>\x82.=\x01.\x1a\xc9w\xc1\x95\xb0\x66\xd2\x10-\xc1\t\xf3\xa4\x41\x9cg\\&_\x8d/\x1cN\xe9I\xbb" "\xdf\xafn\xe7\x83!\xf3@x\xa2\xc5\xb8\xa6\xcc\x00\xda\xac\xdd\xb9\xf5\xb8\x0cI\x32\x7f\xedlL\r\x46u\xf2\r'\x06\xa5\x7f\xed\x87\x64" "v\x10\xa9:=j\x08\xa7\xd8\x97\x33!G\x81\xe2\x01\xf1\x99K\xb1\xa9q\xf8L)\xa0\xee=\x83Qs\xdf\x41G\x91\xc9{S=\x02" "\x35\x45\xce\x84m\xa9\xa6*]\xcd\xfb\xbd\xb6\xa5\xea\xb7\x1b\x8d\x13\xe6I\xbeK\x14{\xe9\rp\xe9\x86%\x9c\xa2\xf1_\r.\x05|\x06" "\x86\xc6\xf4\x1cx\x12\xeb\xde\t\xb1\xf0\x42l\x30{\xd5\x81j@\xa4\x65\x12\x86\x9d\x89Q\xcb]\xf7)~\xaf\x05\xc5\xeeW'\xe1\x01\xc1" "\x93I\xbf\x85@\xedq\x1e\xc1\x93\xfb\?\x0ev\xe9q\xab<\xb0\xdb\xad\x99\x43Q\x9e\x0e\x62\x43\xbc\x38\xa8\x64\x13\x88\xd9\xf5\xc4\x9ekT" "\x8e\xf3\x33y\x00\x34z.\x1aN\x88I$\xe7\x43 G\xf5O!w\xce ;P\x87\x9c\xfe\x02p\xb1\xc2;\xc1\xa5\xc1I\xc3\t{" "\x88:\xc5\x19\x04\x1byz\x95\xdc\xf8{\xd0H\xdfY\xb9\x1b\x34S\x46\xc3\xbe\x93\x05\x35\x98\xc5i\xc8\x42\xba\x43\xd2'\x90\x05\xe7\x02\xac" "\xf9\x8f[\x18\xcd.v\xa2\x9d`\xe7\xda\xa6\x00\xec\xfa\xf6\xd6;\xaeX\x35\xcf\xb9\x8e\x44%L\xd0\x44\xbf\r\x1a\x0b\xf2\xdek\xa1\x9d\x88" "\xa2\x03\x35\xa8O\x19\x92\xec\x65\xd0\x0c+S\xfa\xa9\xdc\xec\x7f\x11\x86\xd4\xa3\xb7\x42\xe1\x8c\xbd" "\?\xed'\xf6\xb2#\x35\x9c\xd3\x05\x9e\?h\xab\xe5\x61\x31\xb6\xa4\x41\x64\xb1\xa0\x8a\x11)w\xcaK\xd0\x87\xe6w\x03\x04\xea\xd5\x86\xdfo" "/.\t\x90#\xb1\xf8\xae\xc9\xfc_\xe8lQw\xbb\xfa]%x=\x16\n\x87\x00\xb9%\xef\x04\xb1\xf9\xbd\xec\x1a\xb0\x02\xda\xbb\xa4\x39" "\x8e\x00)\xd0\xd9\xbc\x61\x0f\xea>\x37\x18\xb7\xa3\xf2\x19\x8b\x9f;\x97g&\xa1kZ\x8fp\xb8\x0b\x12\xa0\xe9\xb4\xd6\x31\xdc\xf2p\x8e\xc9" "\xb1\xf5!}\xee\xad\xbc\x0e\\\xf6n}\xa6\xcbj\x43\xd4X\xfa\x37\xd0p \xba\x14\x34\x06\x8d\x9e\xd1\x1b\xe7p\xce\x42\xd5\x0f\x1e\x37\x1b" "\x33'-]\xba\xe5\xf4z\xaa-w\x19\x18\?\xfc_H\xb2\xd7p\x83\n\xc1\xf2\x87\x15{\x19\x38\xb0\x19:u\x97\x8dQ=v\xbe\x31" "\xd3g\x35&Y,\x9f\x45\xee\x06\x9dr@\x32\xe1\xd2\xf8\xd4\xc1\xb8\x85\xbc\x9f\xd1MV\x38g\xa7\x07\x0e\x36&\x96\xa9{+\xaf\x8b\x99" "\x62\x9d@\x8fvk\x9e\x02\x97\x05h\x98+\xb7\x86\x13\x33>}\x16\xecz\xf8\xe0u\xe9\x36\xd0\xa3#\xbb\xf8'\x91\xa9\xdd\x91\xcd\xa9\x01" "\x04\xa3\x16}\xd5y\xab\xc3\x80\?\x33\xecr\x0f\xe7*\xad\xecZ\x8a`\xd4^\x64\xf4\xd8\x94=\xccP\xf5\xff\x80\x64\r\x30\xed\x39(W" "\x90\x1aL\x66\x9a\xd9\xd0zo\x83\x86\xa2s\xd2{\xf0\xc5\x00N}\xe6\xba\x64\xce\xde\x96\x0e\x0e\x99\x64\xf5\xa2\xe6u\xa9\x19{}\xba\x93" "\ng\xcc\x0b\xe8\x9c\xbd\xb7\xea\xb3\x81h\xc6\x9c\xe2\xce\xe9\xa3*\x7f\xf0\x84\t\xacrjx\xe6\xd5-\x9c\x31\xff\x00su\xd6\xdcz\x9c" "\xee;\x9c\xd5\xbbQ\xae\xe3N\x43\xcf\x41\xa7\xb0\xb8\x9d\xab\xb7\x86\x33\x9c\xc3\xb8\xe1\xf0\xe7,\xc2\xdd\xe0\x98U\x9d\xa8\xb1\x1e\x03\xfe\x9c^" "\xbe\x04\xe3\xb4\xccG\xa0\x86\x1dM\xf7\xe5\x9a\xaa'\x05r\x42\xbc\x1duh\xdb\xed\x1e=W\x0f\xe7\xec\xc9\xed\xa0\x81\x1e'\xf5\xe1\x9eG" "\xc8S|+\xbe\x94X\xb9l\xdc\x18TG\x01\xfe\x30\xd5\x38\x90\x1a.H\xcdoz\x1c_\xd8\xee\x97\x83\xcbN\x80{\x34\xcc_\x38\x97" "\xb0j\xb1g)\x0b\xdc/\xbf\x06.Q\x63\xd3\x87\xa0*\xad\x17{\xcf\x9e\x1e\xabU}{\xeb\x0f\xceZ\xa6|\xb2\xfd\xb9T\x7f$\xcd" "\xf4\x99s\x99\x86\x0b\x84\x85\x7f\x05\x34\x62\x12\x99\xe9\x90\x63\x9b\xa3\x39\x8b\x1e>\xa8V\x17.\xf0!\xea'\x41,\x8a\x1d\x42\x16#\x19V" "\t\x36\xa0\xf5i\x08\x00\x7f\x98\xc1\x32\xbe\x05\x1a[\x62MVZ\x85\x97Yqr\x05\xf3\xf6\x04h\x38I\x85\xa0\xb1\xe1k\x0e\x15\x9e\x34" "\xbb\x08\x1a\x19\xbe\xb6\x8e\x81\x86\x06p!\x34\x1c\x32\x1a\xb6\xfbW@\xa3\xd8\x03\x9f\xb0\x9f\xbd\x1d \x36'\t\x93z\xfe\xec\xf5(\xb8\xc2" "s\xa8!\xe9\xef\x32\xb6l\x9c\x07\x97\x8d\xa2#\xb4\x04,\xa4\x89\x08\x8a}\x00\xc4\x36\xa0\xcdI\xa3\xec\xc1\xeex\x41\x46\x92\x94\x45p\xe9" "\x05\x84GhP\x92\xd8|\x8f\xa9\xd1\xa9U\x37\"\x8a\xed\xc5\xfa\xc7\xa1}\xce\x06\xb1\xf9\xf9\xef\xb3\xd5\xd7\x1c\x97\xbb\x30\xd1\x05\x1a\xd2\x06" "\xb0s\xd0\xc3\xaa`\x44\x06\xbd\r\x1f\x02\x97\xda\xb3\xe7\x9cz\x61\xb5\x33\xd7'\x15\xf6'p\x89\xb1u^\x04.\xf5,\xed\xf5\xe8\xbc\x1c" "\xceqry\x14I\xa2\xd8\xe9\x1b!P\x83k\x07\x93\xb6\xab\xed\xb1;\xc4\x1e\x8d\x41\x1c\xce\x89\x45=\xf8\x12$\xa3\x99\x62;\xcb\x91\xa9" "y\xff\xe8\x31\xb7\?s\x32\x92\xfc\xaa\x1e\x34\x02\xeez\xe5U\x64\xa1PR\x7f\xc4n\x8e\xc6\x15\xfc\x16\x18|\xc8\xebS\x07\xb3\xe1\x9c\xb4" "\xe0\x96\xc7\xc0n\xce\xc6{\xb8\x42\xbb\x1a\xc4\x06\xb9\\`\x33\xad\x87\xe4~\x93l\x97\x41\x84\x0f\xc9\rx\x8f\xddi:\x1c\xd1\x07 \x99" "\xa3\xcd]`\x97\x86[\xff\rp\xa9O\x83`R\x37\x11^\x9f\xbd\xa4\x18\xd0[\x98p\x8e\xc3\x0e\xc6\xde\x85jk\x41\x0e\xef\x98\xfaG" "\xca\x9d\x1a\xc1\xa4\xb9\xbe\x99\x93\x16\\-\x35o^\x9e\x08\xf2Y.\xc4,\x0e\x96\xd6\x0e#t#\xf2J\xe8\x97\x81Ly[<\n\xe2" "\x61\xa7\xbc\?\"\x05Ly\x1a\x92\x35\x90\xb7\xd7\xb3`\xc5\x31\x7f\x8c\x0e\xd2\xb3\x07\x99\xda\xb8\xba`\x0b<\x42z\x92>\n\x39UV@" "\xbd\xd4\xf6\x88\xdbY\xfd,\xb8h\t\xa3\xe0\xc2\x00\xbb\xec\xdb\x85\xe0\x1a\xb1r\xa1\xa4)\xc7\x1f\x83\x86\xf6J\x62\x01\xe3\xea\xdaU\x62~" "\xea\x05\xdd\x1f\xb1\xe1\x9d^\xb0n\x96\xb2O\xba\x8a\xf2\x1d\x14G\n\xd8\xa1-H,M\xf1\x8b\xa0\x99\x32\x81\x12h\xef\xea\x18\x04\xf2\x05" "\xd6+\xd0\xd0\x90`\xd3\xe6\x88\xa3\xcf\x00i\x0e\xa5\x93\x0cv}\xe8\x1d.\xc0\x44\x63W\xc0\x00\x46\xcc\x11\xeb\x80<\xb3\xaa\xc6\x46\x63N" "\xda\xfd\x95\x00\x34\x32\x0c^ \x16N\xc5\xb6\x81\xb8\xc1\xb5\x97\xd7\xa7}\x30\x9c\x13;\x8c\xd5\x80X\"\xe5\xbd=\r\x62\xd1\x30>\x05\x62" "\xce\xcb\xd8\xcb\xf4uYI\x45\xb1\xb3\x65\xf2\x95\x11\xf2\xf1jp\xc9\xc0xZ\x02\xc4M\xae\xea<\x41\xd7\xc4\xf7\xdc\x06\x1a\xb6\xf2\xbb\x41" "\x93p\x35\xef\x1b\xba\xc6w\xe8\x1a\xec\xc4\xe7\xa4MS`\xf3\x0b\xe6Kp\xc4|\x31\x39\x08\xcd\x1a\xd4\x46\xb9\x19\x64\x89S>\\\x10\x63" "\x8b_\x00\x81\xa2\xc6U\xf5 \x86\xad\xc6\x9e\xbc\x0e\x15\x65\xfe\xf4\xfa\x38Po\x05\x97\xf4\x8b;\x33\xc0\xc5\xa6<\x1f\\\x1a)\xc6\x1f\x11" "\xc5\xe2\x18\x88\xc6\x14\x99\x16.\xb4;\xc5\xfc\x11\xd1\xe7\x86\x9b\x90\xc4\xf1\x19\xf3\xb2\xc1\x63\xc2\x05z\x12\x13\x1aQ\xe3\xa3\x0f\x43\x43\xda\xd8" "\x33\xa0\xb1\x1b\xc3\x81\nSUZp\xd9g@\xcchz\xb0\x1f\x82X\x0e\x7f\x03\xaaj\xd8\x8b`\x9a\xddJ\x92\xc4\xb0\x97\x7f\x05\xec\xec" "\xdd\x8f\x80]\xfd\xf7\xfa\xc4\xa5\xec\xc3\x38\x46\\J\x32\x66\xea\xe9Z\xc7\xe5\x39X\xcbM \xe6\xb1!\xfa\xce\x98\xeds\x1dR\x05\xa6\xbe" " \xf6\xb3\r\xbb\xc8\x91N\xab\xde|W\xe1\xc1\xb4\x85\x18#.%\xf6\x34\x88\x65\xb0:\"s\x93\xe4\xfe\xf4i \x96\x91v\x85\xcc\xdd" "\x36\xad;\\\xca\x66\x64!j\x64\x0c\x83\xd8\x1c.\x11\x46\xd2\xf9:h\x38\xa0\x1d\x06\x8d,`\xaa\x93 \x99\xd1\xe2\xce\x06\xb1\xe8s}" "/\x04\xda\xce\xd7\x39\x9b\xfa\x1a\x88\x45\x9f\x03_\x06\xb1\xba\xf0\xf2G\x38x\x9e\t\xc9:\x05\x04\x93\xea\x04\xc0\x1b\x80\x1a\xc9\xbf\xee\x04\x8d" "\xf9\xf8%\xc6\xe3\x83\xeb@\x63\x03,\x11&\x12\xd5\x9a\x08\x93\xa5\x37\x42\xb2\x18\xc9g/\x83\x86\\\xe9U\x80\x46]U{\x44\x8f\x34\xff" "\x18\x02\xed\x65\x34\xe1\x1f)I \x16kY\xdd\x05\x62\xc3\x31\x12+\xf2\xb5\x7f\x80\x98\xaa\xee\x00\xb1\xbdl\x9d\xb4\x30\x64\x0e+\x02U\xfb" "\x0c\x88\x38k\x0e\xed\x07`\xea\xc9+`-\x04\x84\xe4\xfd\x15r\xe8LRJ\xc1\xf0\xe8\x05`\x17\x1b\xfb\x99L\x88\xb6M\x9e\xe5\xa0\x87" "\xc1\x8a\x10\x91s\xd0\x61\t\x08\x89U\x83\xf8\x98K\n\x66\x89\xd3\x8b!\x0b\xd1y\xe5o\x91\x05\x33\xc5\xfap\x81\x43\xa5,*\x38\xd2\xbe" "\x01v\x31\xb6\xdd\xef\x00\xbbns<\xe7\x00\xaa\x1brx\xf5\xfc\"\xe4(\xe2\xc5\x1b\x92\xdc\x9f.\x85\x1c\x83%\x8c\xd0\xfc\xd0\xbb\t\x11" "\x61\x87\xe5\xa0\xb7\x11\xec\x44kH\xadJ)|\xb1(\xb1\xf9\x9d\xff\x01q\xb5\xab\xc3@`$\xb1u\x1f\x05\x31\x8d\xf6(\x88\xa5\x14\x1f" ":\x07y!\xf7\xa4\x33s\x90\x17l#\xb6\x1f\xeb\x1f\x01\x8d\xc4^\xf8\x19\x88\xc5z\x93\xb1L\x15\xf4H\xec\xa3\xe7\x82\x86\x96y\x02Y" "\xb0\x80\x9f\x06\xb1\x82'\x83Y\xf5\x0f\xe0\x39\x7fM\xd8\x9f.\xc8\x10\xb7\x13\x03\xe3\xc8\xb8\x99\x8d\xf9\xdc\x9b\xee\x36\xe5\x0b\xad\x95\x39\x08\xcf" "@\x1f>\x0e\x45\x1f\x1c\x99\xd0\xbc\x08\x11\x89\x61%<-\xf6\xfc\x0c\xc6\x9fYu\x92\xe9\r\x18Z\x9e`\x8f\xf7\x9c\x89L\xcdS\xdf\x88" "\xee\xd1|\x42\x44\x04i\x30M\x0b\?\x0cv\xdb\x1c\r\xd8\x33\xd8\x85Yg\?\xbe\x43\x86\xec\x02\xb1\x98\xfar\xa9\x31\x8e\x87#\xa0\x11\xdb" "h\x92\xdem\x97\xb6\x0e\"\xf2\x17\xd0pU\x80\x01\x7fH\xd7\xea\xe1\xc2\xbc\xb3\x04\x7f\x84\xce-\xbf\x0f\x62Z\xef\xc3\xc8TJqQ\x31" "hl\xff>\"\xb9\xaf\xfe*T\xd5\x93%\x7f\"M\xfel\x02\x97\xd8\xeas\x7f@\x16'\xc7g)\xc5]K@\xac\xfb\x38\x7f\x44\x14" "\xdb\xf3\x7f \xe6\xb0\xdc\n\x62\xbd\x35\xf3\x1c\x0e\x04+s\x81v,\xdf\xf2}\x10S\x31\x19\xe2\x12jQ\x0e\xd1q\x14\xec\x62\xab\xc9}" "`\x17[\xdd\xf3\x1a\xd8\r\xe2\x38\x64>\x16\xc6\xf4\x80\"\x98\x16\x83\xdc\xfcu\x10\x8b\x41.\x8d\x83\x06\x1a&\x1d\xac\x03\x8d\xaeR\xfc\t" "u\xff\xe2\rY\x08H\xa2\x35\x62\xc9H\xe2\x42\xba\x18r\xc4V\xaf\xc4\xbc<\xcb@\x8d\x17 S)\xc5\xeaZ\x10\xb7;v\x9f\xd8\x8c" "\xe4'\x41\xac[\xf2\x80\x88\x8e*\x8c\x63\xf4\xfbT\xf5;\x10\xd3\xea.\x04\xb1t\x87\xa4\x07@,&z\xf8*\x10\xd7\xba\xc6\xf5\x86\xcc" "y>\x41\x1a\xcb\xde\r\x62\x05i\x04\x44t,\x45O!\xa2#\xed<\xa8!\x8a}\xa3\n\\\x92\xd7\xe9\xd9\xe0\xea\xb4\xd6\xc9\x37\x03\x10" "\x13=\xed|pqx\?\x04.\xd1p\xf9V\x10\xd3\xb4\x30\xddL\x18\xaa\x8a@\x8eG\xbe\x06\x62\x31\xc8\x15G@,\x1a\xae\x89\x90\x85" "\x64z\xcd\xb5\xe0\x92~q\x1a\x16T\xc4\x66\xac\xbe\x0f\\<\xea\xbc\x05\\\x8d\xd6\xa6\xa2\xea\xd6\x1e\x10\x8b!\xe5\xf6\x82\x98+j\x8cH" "\xd3\x62\x99\xf1\x1c\x10\x37\xb9V\xf6\x86$\xaf\xe7\xb0\xb7rp\x8b\xd3@\x63\xb7\x42\xb3\x32\xae\xae\xfc\x36\x04\xb2\xa7\x84\x10Hk\xc1\xb6}" "\xda\xee\x80\x66\xf5\xd1\x99'\x90\x8c\xd8q\xf4\x0b\xa2,\xe2\xb7\x80\xb8\xdfj\xa3\xd4lU\xecp-\xa6\xa4YZ&\x66s\x82+\x96\xdf" "\x08\x62\x31\xfe+^\x02\xb1\x46I\x0e\x08\xc9\x88\xa1\x80\x84\x64l\x18\x82\xe4LW\x63\xc1\xb4xz|\xef!$\xd9y\xc2\x90\x9d\x15\x10" "&Q>\x01\x81\\\x03\xbc\t\x81\xd2/N\x9d\x00\x31\xad\xee,\xa8*j\x9c\xf9i\x10\x8b\x61\xef\xef\x02\xf1\x90\x15\xc7.z\x88\xa0\xd8" "\x96\x01v=\xdf\x08\x88\x8eH\xaa\x44\x92\xf4\xca\xec\x17\xa1O\xaeS\xd5s\x80\x87\xd3\x41l\xab\\\x07\x8a\xf8\x32\xbeT\xdb\x17\x0e_g" "\x83\xcb\xde\x1c\xd1\x13\xd4\xf3O\x43\x8d\x1c\x33~\xb1\x8du%\xe0\xe2\x9a\xf6zp\xe9:! P\xe1\xec_\x83K}\x08\xf8\x63\x63V" "\xbd\xb5\xa6<-j\x00\x02\xcd\x0b\xcd\x98\x1d~\x12\x84\xb0\xea<\xd0\x88\xfd\xdc\x84\xf6\"\xe4@.\xc2\x88\x46\x90\x61\x87h\x84\x35\xff\x05" ".\x19\xe7\x1f\xba\x15\\\x34\xdalp\x31\x62\xf5o\x41\xac\xf1\xbb\xbd!\x1d\x18\xbd\x13z\xe4\xe5\x13r\xb0\x14\x1dvV!\x97\xc1<\x06" "\xc6x\xfb\xcd\xa0\x31\xd4\xf4\x84y\x8c\x9c\xb5\xd8\xa6\x13M&\x90Y\x64\x82\x98\xfaT\x41\xe0\xb4U\x1d\r\xe9\xb3\xf8\x62\xfe\x45\x89\"\x10" "\xaf\x14\xc4\x1e$\x95\"/\x1b\xfd\x1c\x8a\x00\x1d\x64l\xd6U\xb8\xefP\x04\xd7\xa5\xfa\x0e< \x02\x07]{\x05\xf3\xb6\xb3#x`\x19" "\x16x\x0e\x33 \xaaZ\xf8\x0c\x87\x19@\xf7t\x90\x83G\x91\x85\x0e\xe6\xfe\xd8\xbc\xe9\x93p\xb9\x07\x0eN\x80.\x02\x9a!k\xe5\x39k\xb8Vg\x63\xfe\x8c\xa2\xfb\x82y\x8b\xad" "s\xc2VV\xa3\xe6`v\x8am\xfa\x1c\x88y\xbez\x35\x88y\x00\xf8'\x10\x0f\xb8\xaa\xf3\xa7\xeczh\x46\xe7J\x7f\xaa\xcd\x34<\xd9" "s\x07\xad\xa4\x16=|T\xa1\xec\xc1\xbc\xddV\xf0\xa2\x39\xe9\x31\xb0\xb7km\xcc\xe4\x98\xf9q\x39\x87\xda\x98\xea\xb0J\xe0(q\x1f\xb8" "\x18\r\xe4\x1e$\x1d\xd7\n\x9f\xb1\xe5\xd3\xbc\x9d\xe0\x8dJs'\x8b\x86\xf9\xa6s\x97i\xc8\x65\xc6\r\x90\x33\x66\x92\r\xe1v\x62\xdch" "x*\xf2<\xb8\xba\xad\xea\xa4q\x37\xd7 I}q{\xce+\xce\x1d\xf8\x32\x63\xec\"\xf9\xd0U\xc8\x9d\xe3\xcf\x83`W\x34\x9d\?S" "l\x1ar\xbe\x38\r\x34\x84\xc3]\x8c\xa4R\xcbT\xda\xeb\xd4\x8f\xe1\x8f\x42\x88\xbdQ\xc5\x36\xfbS\xac\xf9/\x82X\x8f\x8b\x83y\xba\x06" "\xea\x07\x8d^\x0bz\xee\xf2w\x33h\xa4S\x1f\xc6\x44\x36\xa3N;\xbd\x13sV\xab\xb4\x84\x1d \x66\x87}\x07$\x1bh\xc4\xdd\xe7\xee" "\x05\xb1\x46\x1b\xf4\xa7\xcc\x1b\xc9\x0c\xdb\xe2\x16\xb0kh\x15\xdf]\xbf\xde\x87$\xf6\xc1\xe3H\xb2\x83\xbb\xf1\x1c\xb3\xbaQ\xb5\xa8\x19\xce " "\x18\xfd\x46O\x36\xa5\x41\x9aG\x35\xf4\xb9\x37nN\x44g\xeaLU\xf6\xc1\x37\x90\x94o\xfa\xb0\xc2\xb1\x89\x18\xd5\xa6\xf4\xc6\xcdY\xb4\xbb" "\x87\x15\xfb!\x0e\x1f\x8b%^\xbf.\xc7\xf6\x64j\xca\xd4\xd0(\x93\x9e\xbbZ\x95r\x11\xd2\x83\x89\x63\x8eUw)\xb8x\x64\xf1\?H" "\x62\x45\x1d\xc2\x9f\x84\xe6\x35j\x07\x14S\xe2\xe2lJ,S**\tY\xc8mil\x0b\x16Ts\xd6\x1d\x66\xd8\x1d\xbe\x0f.\xf3\x92" "\x31n\xd1\x84G\r\xd5\x30\xaeg\xef\xfe\x8cT\xdd)\x37\x80=\xc7\xb1{\xa3\x36\x0c\xf2Ns\xe3_\x91$\xc6\x7fJ-\xb8l\xef\xe0" "\xee\x34\xb7\x82\x98\xf5\xfc\x01\xfc\x31_\xaf\xbc\x94\\\x8e\x8d\xfc\xa8!-y\x05\xb9l\x1ar\x38\x46]\x81$\xeb)\xce\xcd\x45\x13h\xf4" "\xd2\xc4\x1b\xd5\xca\xf4\xc6\x35Z\x93\?\x63\x66<\xc7\xaa\xdb\x05\x1a=\xd8\xf4\xe7\x0c\xf1\x32:m\\MV\xe1\xb6\x32\x9f\x33\xe8\xcb\xb8]" "\xd5\xb9{\xc6\x0f\"\xc9\xdc\x39\x8e\xea\x01\x8e\x37n\xf6\xecn\x03\x1f\xc7\x17}\xfe\xec\xd1\xd1\xc4\xbetp\xd9\x82J\\\x46\xc4\x9a: " "p\xd8\xf2\xaa\x34\x63[\x30#\x31L\x17/\x01\xaf\xed\xc4\x1f\x8dV\xe0\xcf\xa9\xe3\x38\x8f\x9e\x19\xeel\x86\x1c\xa9\xcc]O\xe1\x8b\xb4\xc5" ")/\xe0\xcb\x98\xda\xd8\\\xad\xc9\x81\xad\xc6\xd7\xbd\x8d$V\xef\x46$\x89\xd1\xae\xfb&\x92\xccG\xa2\xbb}\x43\x45\x8d\x9b\x07\x8c\x99)" "\xab\x84\x1e\x93#\x90\xb9\x1f\xce\x82\x98^\x88\xdf\x87\?:\xad{\xe3}V\x64\xf5\xbc\xe4\xcf\x98\xfbz\xde\xa3\xc5\x0e\xa6\xfa\x0bi\xf8\x93" "\xf3y\x10\xeb\xa5\x80\xe7n\xcd\xae\x00\xb1\xfao\xf1\xf8\xfa\xfe\x01\xac\x37\xdc\xf5\x19Z\xd0\xdd\x9a\xed\xc1\x97\xa3V\?v\x8c\xe9\x9e\xe1\x7f" "\x07_,\xae\xd9\x1c\x83&\x9c\x0b.\xf5\x1d\xe1\xcf\xd9\xbd\xf9\xb8\xfa\xef\xf5\x17\xccM\xd3\xf8\t-\xe0\xa4>\xd9\xf6\x17rM\x32\xc3\x1b" "]\x06v\x1a\xad\x87\xa4<\xd3Y\x06\x87U\xdb\x90\xa4\x17\x97\xfe\x82\xf6wo|\xcc\xd8\xf5R\xdb_\xb0\x87\xb1\x93\x1c%\x30\x45\xce\x99" "\xff^^\x45Ix\xd9\xf1\tS\xc3\xde\\\xbb\xab(\x61\xb7\x1b\xccI\xb6N\x16\x92\xccU\xe3\x82]\\Nr}(}\xb9\xcfJ\x61" "\xcf\x33yO\x94\x84\x31\x81wI\xab\x7f\x83\xa4R\xd3G\x1a.\x91@\x92\x18\xf6\x39s\xa9\x9e]\xf4\xf8r+\xb4$\t+\x61>\x06" "\x97:\xe4\x45O\xec\xbb\xf8\x92P\xc9\xd3\x19\x96\x85\xee\x34\xfd\x39=g\xf3&m\x8d\x34M\xbfOG\x91\xc4\xb1\xf7\x00\x92\x8e\x99I\x8c" "Zsk\xf4p\x8f\x97&\xef\xc6\xdejNg\x34\x8fo\xa5\x63\x13\xa0\x91#\xb8\x43\xff\x83/\x86\x32\x9d\xd6=\x9a\xe7\xde/\x63\x9cw" "/\x91\x45\x8eT\xf8\x91\x0b \x87\x63\x02v\x91\x93\x16\xa5\x62\xdaP\x04\xd3\xfa\xc0\xd6\xe7m\x45l\x0b\xbe\x14\x9b\xfdp\x66\xdc\x82\"\x9b" "\x0b\x41^@\xc8\xf1\xc8\x82]<\xf1y\xaf\xdc\x9eLK\x65\xbe\x1b\xd3\xfa\x9c\x46\?\xf4\xe4\x31o\xecR\x0cz\xd3\xbc\xd9\x7f\x18I\xfa" ">\xcew\xb7\x0c\xefG\x92\x45Lsw\n/\xe3\x8f=\x06\x9fT\xd7I\x1e\x1f\xbd^*\x34\xc7T\xb2\x9c\xe1'}I\n(\x8e\xbf" "V}\x02I\xc7\x8d\xcb.%\xa7k\xd4\x12\x16:\xed\x8b\xd8\x61z+\xbet\x99\x45\xd9\x8b]\xf7\xf0\xf3g\xa0\x11\xab[\xfbY|\x99" "\x94@\x04\xc9\xf8\"\xc6\x96\xf2-\xfc\xa1i\x61\xcd\xc6g\x95\x1f\xc7\x92x\xc1\xe0\xee\x93\xe6\xa4\xd7\x1d\x83_\x8e/\xac\xa8\x41\x10K\x45" "\xad\xfeR\xaa''\xdb\xc9k\xb0 _\xe0\xb9\xf1\xc7\x41#\x15u\xf6\xb7\x41#\xa6u=\xc6\x1fw\xb2\xfd\x00\x92\xe6\xad\x99\xa4\xa2\x62" "G\x90\x94\xe1\xac\xc5\xe3\x89\xf4{N\x83\x1c\xeb\xb0\xd3\x06R\xe5i\xf3\x63\xff\xc1\x17\x8b\xa1\x36\x9bm\x8a\x19*\xcf\x9d\x1b\x8b\x41r\x36" "\xdf\t\x1a\xeb\xe6r\xba\x1b\xbf\x66\x16_hZ\xa9\xe0\xd2\x37G\x1e\x1f\x00\xfe\xf4 \xfeX\x64\x31\x9e\xd3\xae_\xc0\x1f>\xff\x19@R" "\x8f\x35\xe5\x8c\x99_\x9f\xb5\xa0T\xd4\xe1\x0f\x82\xb8T\x90\xec\x11\xbe\x0c\x18\xb1\xbd\x91w\xa7\x8e\xb0gw\xea\x88\x1e\x37=ly\x89\x01" "\xac\xbc\t_\x0cZ\xcf\xe3>\x99\xf1\xe5\xb8/v\xeaO\xf1\xe5\x64\xbbs\xd8\xc1\x32\x83\xe7u\xcb\xd0\x1dx('/;x(\xb7\xed" "{\xf8\"\xe5\xaa\x46w\xe0\x61\xda\x01,Jg\x1b\x8c\x9d\xe3\xfc\xb9\xf8\xc2\xe6\x46\x37\x9f\x35\xd8\xb3;\xce\xc2\x94\xcd\xf7\x44\x7f\x97\n\x97" "\xf0\xe8\x87\xfe\x8c/\xd2p\x9b\xaf\x03\x8d\xde\xa3yr\x1e\x15_\rU\xdd\x13!\x34\xe5\xacz\xf2\xf1\xf8~g\xe9=\xf8\x62n\n\xf8" "\x00\xe7\x97\xbf\xc3\x97vm\x8by\x8b\xe4\xce\x33\xa2\xe4\x8f\xe1\x0b\x9b\tS\x12\xcf\x88V`(\x90G\x31K\x1f\x41\x45\xf1\xfc'\xe9\x1b" "\xf8\x42\xd8\x86\xd0X\xe4\x1a\x9e\x08%\x9f\x8e/\xbco\x12\x39\xd2^\x1fy\x1b_\xcc\xfb\x99;\x39\x81\x85\xcfZ\x1c\x96y\xe9\xb0\xe7\xfb" "\xf8\x42\xff\xe1\x7f\xc1\x9f!SUZ\xe7\xdd\x93\xa9\x8bS\x1a\xfe\xc0\xe3i\xc6\xc5\x85\xf8\xc2\x93\x8a\x11\xd0\xd0\xa3\xdd)\xf8\"\xf1\xb2\x0f" "\xfc\x13_\xec\xf5\xf4<\x1a\x65\xd9_\x9f\x46\x92y\xc6\x9bU\xff\x90\x1e\xdf\x05$\xdf\x8c$\x31\xbf=\xef\xc1\x1f\xb9$}\x65\x1f\x92x" "t\x8f.\x63\xe8\xfd\x45\xd9\xf5/_u/\xbeH{=\x81\?\xee\x64\xe0\xc7H\x92\x01\xed\xdc\x32$qI\xf3\x11$I\x87\x8dw " "I\x46\xb6\xe4\xab\xf1G\x02\x61\x1c\x42=\xcf\xb2M\xdf\xc6\x17\x19\xbev\x9f\r\x62\r@\xb0(\x98\xf6x\xf9{\xf0\x45\x86\xa6\xa5\xe7\xe3" "\x0b-\xf3\xf7\xf8\xc3U\xca/\xf1G\xe6\xcamR-\xea\xab\xc1\x9b\?n\xecR\xe4\xbb\xfb\xf0\x45\xda\"\xf9 \xbeH\x01\xcf\xcf\xc6\x1f" ")\xce\x39\xe8M\xf3\xd2\x04\x1b\xb1\xdd\x9eW\x87\x1e\x8bn;\x89\xe1t^\xc1\x9c\x8b\xdc\x45\xfe\xa6\x1c_\x18\x61*\xc2\x97\x16g\x12\x8b" "\xb2\xafL\xbe\xe4V$)\x04}Q\xb6\x8a\x87>\xf4\n\x92\xe8\r\xf2I|\x81\x1d.\x99\xbb\x00_\x32\x8c\x46\x8a\xf3`\x17\xbep\xb9" "\x8b\x95\xe7\xbc\xaeW\x17g\xc4\x32S\x92\xf1G\x0c\xf2\x81K\xf0\x87n\x9a \x87\xdb\xb7\xad\xd8\x1c\xcd\x8f[\x13\xc8pQ\xf0\x16\x92\xf2" "\xccl\xa4[\xfd\xb6\x1b_\xf4\x64{Q\xb6\x66\xf1\xf3\xbe\x0e\x62\x9a\xdf=\xf8\"\xe6\xf7\xba\x14\x99\xa3\x44\n\xbeH\xa3L\t\x97\x9c\x04" "~\xec\x42$\xd9\x83\x32n\xa9\x92\x9f\xc3\x9fy\xcd\x94\x9b\xa3\xb8\xd4\xb3ns\x16\x05\xfe\x1a\?\xf2\x06\xfe\x88\x1d~\xe3Q\xd0H\xeb\xac" "\x45+s\xe3\xf3\xc9O I\x86\x8b\x35\x17\xe2\x8bX\xe6\xb2m\xf8\x83\xd6Y\x31\xf2\"\xfe\xf0\x88\xe9<\xfc\x91\xd6y,\x1d\x7f\xa4u" "\xae\xad\xc6\x1f]\?/\xce\xa8\x93\xc3\x45\x02>\x63\x42\xc3\xe9\xef\x1f\xf8\x43\x97\x62W\xa5.\xce\xa5[\xb5\x98\x62\x06\xc2\\t\xdb\x8a\xbb" "\xf0\x45\x62\x06\x9d\x19\xc7\x1f\xb9\x08[=\x83$ToJ\xaeT\x02\xecg\xed\x91\x12|\xd1\x18\xcd\x8b\x0e\x9a\xb8\x13\x7f\x38Im\xc6\x1f" "\xb1\x96\xb3\xa6\x41S\xa4\x36&\xeb\xf9\xe4\xe7oG\x12\x46\xda\xe5\x13\x1b\xf1\x45V;\xe3(\xbb,\xda\x63\xb7\xed\xc6\x1f\xe9\xcb\xab`H" "\x44\xf7-\xdd\x81\?\x15V\xf3\xd2\xa9\x0fJ\xbb\xeb\xa6\x66\x91\xcb\xefu\x30\xd1\x19\x31\x89\xad>\xfep\xa4=\x84$T\xdd\xd2\x14\xe4>" "\x33j\xe5R\xd0\xc8\xe2\x8c\xfaR^\xe4\x1a;v*\xbe\xc0H\x62_\x90\xe6\xe6\x0c\"jH\xadn\xfa;\xfe\xb0V\xf3\xf0G:\xec" "\x9a\r\xf8\x83\xeaM\xfe :\xc8\x8c\x00Y_\xc5\xe0\x30\xa7\xc7t\x8b\x0eu\x36\x96\xba\xc8\xd5\x32-\n&\x11\xcbJ \xa9\xd5h`" "\xe1\xab\xff\x36\x85$\xd6\xfc-\xf8\xc2\x9a_\x0f.\xa9\xf9\xad\x19\xf8\xc2\x95\xf0\x97\xf1\x45,|\xed\x33\xf8\xc2+$\xf4\x38\"\xc1\xb0\xa3" "_\x9c\xd3\x98\x0b\x8bs\xeaV\x62\xd1-\x80\x0f\xe0\x8b.!\x16\x17\xf4\x38\x62\x91K\xd9\x97>\x80$i\x9d\x15\x9f\xc1\x17\xc5\xe5.\xba" "\xf5\xea.\xfc\xe1\x89\x10J\xba\xa0.\x11\x16\xb9(=\xe5\xfd\xf8\xc2\x45\xe9\x30\xfe\xc8\xb0\x93\x8c\xfe\xc5\x95\xe7R\x18\xc9\x02\x17K\x13\xf8" "\xc2u\xc2g\xf1\x85\xc7\xbc\xb9\xf8\"\xed\x95\xfc:\xbeh\xcc\xe8\xc5\x05\x8dW\xb2\xc8U\x65\xdd\x1c\xfe\x8c\x9a\xf2\x35\xf6G\x1a\xe5\xec\xc3" "H\x62\xcf\xcd\xc1\x17\xbe]\x12\xf3\x63\xeb\xec\xc7\x97z\xd3\x90\x03,Zp\x81\xcd\xf4\x08\xbe\xe8\x06|q\x81\x03\xec\xb9\xf8\xa2\x30\x80\xc5" "\x05}\x37\xb1\xe8\x16\x8a\xe8_\xb2P\x8c\xe5H\x85\x13\xa9\x82q\x95\x0b\xc5$\xb1\x1f\xdd\xd4,\x12\x85\x12\xfb\x39\xbe\xcck)\x04X\x92" "tG>\x92\xd0pK/|\x0c\x7f\xf4\xb4p\xd1\xad\xeb\xd2\xf0\x87\xc1\xc7/\xc3\x1f\xa9\xf0\x8d\x8f\xe3O\x8f\xb5\xa9>\x9d[\xe4z," ".\x45\xe6\x44\xf6<\xfep`\xdc\x87\?\x62\xe1;^\xc5\x1fu~\xb5\xb8\x30j\x46\x42\xeb\xbd\x13\x7f\xf4\x1e\x64q\x41\x1f)/\xba{" "\xea_\xe0\x8f\x14yi\x39\xfe\xd0\x17\xee\x35\xa9Q:#\x1f=\x84\?\x32\xae.o\xc5\x9f,W\?Q\xba\x98M\xfd>\xfc\xa1\xb5l" "\xc3\x1f\x31\x80\x8b\x7f\x82\?\xf4\x04u=\xfe\xf0\xc0\xffM\xfc\x61\xe3\x0e\xe3\x0f{\xe5\x16\xfc\xa9\x94\xf8ow\xe1\x8f\x34\xdc\x1d\x7f\xc3\x1f" "n\x97\x0e\xe3O\xa3\xb3\xd5(\x93P\xed\x95\xf8\xc2\x45\xc5\x17\xf0\x85\x8f\x04k\xf0\x45\xaa\xee\x94\x62|\xa1\x61_\x8e/\x62\xcf\x07\x87\xf0" "\x85\xf6\xbc\x1d\x7f\xd4QR\x94\xae\xc8\xa2(]\xaaw\xe5\xaf\x90$\x86\xbdl#\xfe\xd8\xab\xe7t==\x88\x32\xc5ho\xbc\x15_\xa4" "\x9e\xaf\xfc-\xbe\x98\xb7\xc3t\xa9\xf0\x95/\xe2\x8b\xde\xf0\x46\xe9\xac\xf9M\xf8\"\x05\xbcR*J\x0f\x36\xa3L}\x1d\x1c\x65*\"\x31" "J\xd7S\xc7(S\x41kQ:\xf1-y\xf8\xa2O\x96\xa2ti\xa6\r}\xf8R\xeb\x1a.Jg{\xa1-\x32\xf5\xd0)\xcaT\xb7" "-Q\xa6\xfa=\x88\xd2i\xbd;\xf1\xc5\xbc\x1c\x64\x36\x39\x0b\x8f\xd2\xf5\x9e(\xca\x94\xd1\x66\xc5\?S\xa3\xec\x34\xf9\x82\xb2\xa7\xd3I\xdd" "\x85\xf8\x92n\x1a\xce\x1b{\xc2\n(\xa3\xcd;\?\x83/\x32\xda\xc4\x7f\x01\xe2L\xcb\x9d\x8d\xd2\x88/zs\x1d\x65\xeaUK\x94\xad^" "\x05\xa2\xec\x1ck\x0bui\x18\x65\xe7\x1a\xf1qU#\xb3Si\xb2\xf9z\xf1\x46|\x41\x33\xc5\x87\xd0\xdc\xd9\xdcJ\x1f\xc1\x97n\xad\xe7" "li\xaf\xb8T\xaf\x39\x30\xcc\x96i\x62\xa9X\x82\xde\xb5\x45\xd9\x62\x87\x9d;\xf0\x45\x91\xb1Q\xb6\xfa\x30\x89\x32\xa5M\x1f\xf9\x31\xbe\x94" "\xea\x97l\r\x42\x14\xa6I\xb5\x88\x83\xe2L{K\x9e\x86jIZV\x80/z\xa9\x14\x65\x8b\xf5~z+\xbep*\xc1\x9fl\r\x37" "\x10\xa6\xb1Zn\x46\x92\xae\xde\xa3l\r\xde\x11\xa6\xb1~\xf6#I\x1d\xe2\x85i\xa8\x9f\xe4\xfb`\xb4\x99\x16\xd4\x38\x9b\x06\xb0\rI\xac" "\xb1J|\xe1,s\x07\xbe\xe4ZI\xf5\x39\x64\x94i.\xee\xb3i\x00\xb7\xe0\x8b\xbe:\x0c\xd3h\xcf\x1b\xf0\x07\xd5\xb2,\xfe'$Y" "\x94\x93\x34\xa9\x96-\xb5\xf8\x32\x63\x65\xe7\x04\xf4-$\x99\xcf\xb4\xccY\xf7'L\xb3\xe0\x0b\x99\x30\x92\x65\x39\xe8q\xd9\xad\xa6\x46\xc2\xca" "%Uw\xd1\xe7\x41\x33\xafM\x99\xab\xd1\x13\xa2L\x05\x46\x46\xd9\x9c\xa4v\x80\xb8\xc2ZP\x03\x81\x45\xd9\x9c\x9bn@\x92\x39\x45\xc9V" "\xcf\x93Q.+\xe1\xc7H\x62\xfc\xf7O!\x89\x8f\x04\xa1|\xae\xae\xa8\xc3\xb4\x1a\xd3\x87\x86t\x1a\xbeH\x8dm\xef\x07\rG\xa4\xdb\x90" "\xa4\x0e\x10\xa2\\\x31\xa4\x8f\x16\x80\x86\xceU\xc6\x90\x44\x8b:\x1b_\xb8\xea\xfe\x37\xbep\xa4\xfd!\x88\x19\x9b\xf2\r\xfc\x41\x8d\xc5\xfd\x17" "@\xd3h\xc5\xe1\xdd\xe8\xd7\x90$\x35\xd6\xfb\x38\x92t\xd5\x14\xe5\xcaR\xe4\xcck\x41\xc3\x61\x39\x0bI-\xae-\xa2lZ\xd4\x37@#" "\xe0\xdb\xee\x8dHj\x35\xcb\xa4i\x1dN\r\x33\x32,\x0b\x31\xadS.\xc5\x17\xb1\xa8S\xee\xc1\x17\x8d\xfc\x18\x66\xf0\xdeS\x1a\xce\x62\x38" "\x66\x8f\x9a\xd9\xe8+\xd1\x30\x43\xaan\x15\x86\xe5l\x19I\xe2'\xf0\x45jl\xc5/\x41\xc3\x8az\?\x92\x64\xe4\?r\x01\xbet\x1a\x97" "\xd4\xd8\x33/ \x89\x37\x86\x1f\x87\xaa\xbaU\x0c\xd3\xe8I>\x04M\x81i\xc8{\x87O\xe0\xcf\xb4Y\x42\xb7k\xc1\x30\x83\xdd\x13\xb9\xe7" "\xb2Z\x90{\x9a\x86N\x0b\x33\xa4V\x97}\x02\x7fhZ\xe8)\xd9s\x96\xbb\r\xa7\xd9\x16.\x30\x9b \xccW\xc0\xaeG\xd3\x61\x86\xbe" "\x04\x8cr\xf5\xb5`\x98\xc1\xae\xf7\x19\xd0Hm\\x\x06\xbeT\x9bm\xe8\x36\x39\xcc`\xf0\xf1\xbf\xe1\x0b\xa7\xbf\xcd\xf8#k\xb6\xdd\xaf" "!\x89\x96\x90\x0e\x81\xe6\x34\x38\xbf\xc0\x99h\x98\x36\x61\x99*\x90\x35\xca\xb5\xd1&_\xc1T\x61\x9aTT\n\xbag\x86T\xd4\x0e\x18[" "n\xaf\x96\x34\x8d\x9dq\x37\x92\x88V\xfd\x34\xb8\xd8\xbfv\xe2\xcbIk\xe1\xc6\xe7R$\xe9\xe4\x12\xa6I\xaf\xdc\xfbS\xd0H\xaf\\\xfb" "$h\xf4&+\xcag\xfd\xecJ\r\xb3\xd2\\%\x84iRuI\xb0\xcc,\x0e\xdd\xe8\xb9\xf9\x16\xac\x39m\xdej\x35!)\x0f\x83\x46" "L+\xe5\xcb\x10h\xae>\xf3+-S\xbe)\xfe\x1f\x10\x13\\\xfa\x1d$)\x64.\xcc\x90z^\x8d\x99(\xd7\x46\xad\x0c=V\x8dr" "\xcd\xd5^~\x8d%\x89\xf9\xadM /\x31\xbf\xfd\x18\x7f\x32\xa4\xc3\xeeo\xc7\x17\x31\xad\r\xdf\x04\xd7\xa4\x36\\\x16w\xeb\x62\xe1\x62\x36" "\x9b>\x86\?\xecz\xdd\xf8\xd3\xab\x15\x95\xc5\xc5$:~\x61\x9a\x35\xc1\x9c\xb5\xa9\x9eG\x85YRu+\x92\xf0\xc5p\xb0YRQ\x31" "L.\xf9\tk/=@\x0e\x33\xa4\x0f\xdep\x1bh\xa4\x0f\xde}\x35\x04ZL\xc9\x42=i\x0f\x33X\?\x37\x82\x86o\x39\x31\xd2\xe6" "\x1f\x33\x63\x93>\xf8\xe3\x66$\xb1~\xce\x04\x97\xde\x83\x84Y\xb4:\xcc)\xf9\xe6\xa8-\x83\xf5s\t\x92\xa4~\x92^\x05\xb1\xde\xfd\x85" "\x19\x63\xa6\x98v\xbd\xa8P\x9dv\x86YuN`Th\x61\xdf\xb3\xd4KXTXhjLZ\x92X\xdd'\x31\x9b\x17\x9a/\xaf\x42" "\rh\x18\x66H\xafL\xfe\x1ah\xf4\"#*,\xb3Z\xe5\x88\x84\x91$Gju\xcd\xf9P\x43/@\xa3\x42\x8b\x15\x9e\xc5\xa1I\xca" ">\x64\x96 \x16\x95\\\x05.\x8eQX\x98\x15VZ\x8d\xb1\x9f\xa2\x7f\x65\x1d\x35\xc5\xd8=\xaf\x02\x8d-r\xf2\xad\x33\x66\xa9O\x95\x30" "'\xc7JZk\x65\xb7h \x39:\xbcG\x85\x1a\xfb#\xcc\x61\xd5\xdd\x04\x9aN\xad\x84\x9c|#\x66\x45\xd5!\x0b\xf6\x38\xcc\x32\x39\xac" "(\x0c\xb0\x39\x45\x46\xa3\xc7\xbcQ\xbe\xbe\x44\x8e\n[L\x1f\xbd\x1c\x8f\xf2\xcd\x93|V\xbf\x65\x41\x84-\xe6\xe5\xfcyk\x82\x84)\x66" "\x9e\xd6\xd2\xd3\xac\xc8\xac\xc3zp\xb1\x0e\xef\x43\x92\xbdS\xc8\x32\x30Uz\x86U\xaf\xd8\xd8u\x97\xe1\x8b\xae\x91\x82t\x8b_\x90Sk" "yuj\xc3\x15\xe7\x9b\xaa\x16\x12.\xa7\xce\xb5`\x90\x9eg\\\x1a=\x33H\xcf\xb7,\xc4H\x1e\xc6\xaa\xb2X=\xf0\x04\xe9\x05V." "\x8eH\xff\x02\x8d\x02\x8a\xc2\x1c\x19\x91N\xb9\x1f\xc4%\x46,\\M\xbf\x45\x92\xd8OJ\x0b\x92\xcc+N\xb1-\x96r\xf4`<\xcc\x63" "%`\x14-V\x90\x46T\xac\xfb\xee\x80\xbb\x00q\x0e\x9f\x65=\x37Gq\x44\x61\x9e\xb9\x9b\xcb\x92\xea]q\x39\xbe\xd8\x8b\xeft]'" "\x84\x39m\xda\x82yY&\xd9\x86\xf7\x1c\x1d\x88\xc2<\x46\xae\t\x91\xa4\x8b\x81\x30\x8f\xe8\xc7\x83\xf8Rk\xc5\x61\xd2Vp\x1d\x37\x03\x98" "p\x92\xa3\x62V\xddv\xd0\xa8\x17\xeb\x30\xc7&\xc4\x1c\x99\x14R\xa4\xe7\xd2\xb4\xd0\x97\xf3hZ\x62\xfc\x16\xd8\xae\xb8\xc9\x8a#\x35\xb6\x66" "*\x35*M\xb3\x36\xd5\x07\x38\x61\x0e\x07\xb4\x32\xd0\x88\x1d\xee\x85\xc0\x62}\x98\x1f\xa4\x37Z^\xea\xba\x36*\xd4 \x83Q\xa9\xbe\xd2\x8a" "\n-\nU\x8eyL\xca\x63\x13`I\\lq\x07JY\?\x1b!\xb0\x45\xeb'O\xdd]\x06\xe9\n\x05\x0c\xb8\x93Z.\xfd\x42\xcf" "\x9f\xc3<\xa9\xe7\x03\xf3\x90\xa3\xd1\xd9\x82\xf4\x84\xfc\x39\x0f\xc4\x92{\xc1\x07\x41\xcc\xf1p\x1b\x92\xf4\xc6'\xc8\xcc\xb4\xd6\x39\x61y\xd1_" "\xe5(h\xda\\\xa6\x61\x0e_W}\x1fI\xfaJ\x34\xc8T\xef(\x61\x8e\x41R\x33\x15\xfa\x12\xe6\x8c\xb9r\x45\xc5\x36\x1e\x96\x16\x38\xe2" " ]_\xc7\x04\x99\xeah+Hg\x0b\xee\xc6\x17\x31\xfe;n\x05\xbb\xb9I)\xd6\x63\xf9 \xdd\x02\x11r\x8b\xb7$\x1b\x34\xe6\xdb'" "O\x03\xae\x45\xa5\xea\x33-p\xbb\?L\xd9\x39\xbc\x15\xfa=h\xa4M\x97\xfd\x05\x34\xb4\xde\xb5\x10\xa8>Z\xc3\x9c\x19W\xcf\x61\x9e>" "\x88\x8e\x8a\xf5\xf4\x32,Hs\xcd\x14p\x17\xf9\xcfW \xb9\xd8\x0c`V\xab%OZ\xa7]\x32-\xb1\xa6\x94\xd6\xd9\n\x39\xa5\xe6\xb7" "\x87[\xce;.\x46R\xc2$K[|\xfb\x0c\xe4\xa5\xb1Z\xa2Rs\xd3\xcd\xbd\xe7\x87\xae\x82@\xf5\x1f\x15\xe6\xd9 \\\xc0\x66\xba\x00" "\xc4\xd6\x04\xdc\x96\x9e\xfe\x1c\x88\xd5\xfb}\x98\xc7\xf6\xba\x1b\xc4\xd6\xbfJ\xd9S>\x08\x62s\x04\x94\xa9>\xc6\xc3<{sT\x90m\x96" "@\x35\x0e!\xc9\"\x0e\x97\x1a\x0e-\xdd\x9c~\x14(^\"*\xb6\xb0)\xdc\xde\x36\xdd\x0f\xf6ZW-\x01\xb7\xb7\x31\xfc\xe1\xf6\x36i" "\x18\x02\xd9\x82\x18\x13\n\xd8\x82X\x8b\x16O\x99>\x8c#\x7f\x1cI\xd2pK\x1f\x05;\xd7\xab\x7f\x45\x92\xf5\xb8\x03\x1aZ\xaf\x34w\xb1\xd3\x30*]\xb0\"\xcf:\xc9Q\xb9\xb9\x61\xac\x64\xa3\x94!w\x31\xe3\xfd;R\x83" "\xdc\x34G\x1c\x16\x88i\xc5O\x43^\x1c\xe2\xc4\x36\xe4n\xeb\xc1\xab!\x87G\x8b_\x02\xbb\x34\xdc\xb2S\xc1\xdejVgqX\xdc\x11" "\x13r\xaf\xccq\x46\x12\x64'\\q\x82\xdc\x0ck\x38\x81\xe3\x16\xd4\x82\x98\xa6.S\xbf\x42\xc7\x83l}\x9e\x19\xe4J\xb9\xb6\xfd\nj" "\xd0\x0e\xcf\x07\xb1\xba\xd1\x8b*\xf3\xccZ\xc4\xea\xae\xf8\x39h\x38!^\x03\x1a\x19`\xf7\x8c\x81\x86M\x89)\x89\xe7Q\xb2\x1a\xcc\xd5(" "K\x61\x01G\xb6\x87\xc0\xc5\x99q\x0f\xb8\xd8/\x30,\xf3\xa8*\xe9\x38\x88s\x8c\x98+\x99\xb3\x41\xcc\x83\xbb!\x10si\xf4\x16*\xd3" "N\x18*\xf5\xd9W\x90\x9bkuho\xd6x\xd2\x15\xfd\t\xc4\xdd\xa6\xbc.N\x02\x1ep\xc5~\x04\x62:\x34\xc3n\xab\xa8\xde\x95\xcb" "\xe7!\xd8\x36\xf4\xaf\xca\"\xab\x16\xf6\x8bL\x10\xd3zO\x03\x8dm+\xca\xc5 S\xb0\xe4\xab,\xd6\x92\x66\xdb\x62\x89\xe7\x63\xe2\xf0\xb6" "@\xcc\x38\x19+\xab\"\x8d\xb0\x10U\x8a\x1d&\x63$\xc9\xb5\xbdU\x81\xde\x8c\x84\x45\xc4\x1aU \x0b\xeas\x19\x88\x35\xe8X\x90m\x0e" "\x1e\xcbu\xe1\x1aU\xf2.\xa0\x12\xec\xb4\xb1\x83`\xb7w\xb5i\xea\xc7>*W\x37MQ\x65\xb9\xcb=\xe0\x39\x1bW)\xf4\x8f\xfd\x8e" "\xd4\xb0\x44O<|w(w\r\x88\x15h\x17\xe4\x9aW\xf6\x82yg-\x61Q\xc2\xfd\xf1\xdd\x31\xdd\x85 \xae\xd4&\xe0\x31\xdd:\xf4" "\xb8\x12\r\xd5\xea\xa7\xc9\xb5N\x11\xf6\x32\x95\xba\xc4\n\x8b\xecq\x96;\xca\xdb\x9f\xeag\xa4\xc9\x1fXx\xb6\xc2\xcf\xa2r;\xd5\xaf\xd4" "\x07\x0b\x61\x89\xd8OR:\x88\x35\n\x43T\xae(\xd3\xa8\xd2^\xa0\xa7\x89\x62\xc9=H\xa2\xd9`*\xa9\x64\x33]\x07\xc9\x9c\x97\xcf\x42" "q\xa8\x06\xb6\xed\x45\x8a\x18\x0fKrT\x8d\x34\x31\xfe\xbd\xd3\xc8\"\xd3\x19IT\xae\x86\x14\xe4*\xe0<,\xd2#\xf7\xb0\x44\xf7\xd4~" "\x1a\x8bs\x01\xb8\xa4So<\x15I\x1a\xb3>\xaa\x64\x0b\x1e\x06\xbby\x39(\xe2\x8c\x7f:$\x9b\xe3\xf7J\x36\x13\x16\x0c\x45\x1a\xa4 " ",\x91\xbe\xb3\xe7\xa7\x90l\xd0\xe8\x0c\x85\x46G\x95l\x9d\x87!\xd0\xc2.\x17\xd1\xd8n\x02\xb1(\x96}\x37\x88sM\xb2\xb4\xce\xeaI" "\xd0\xd0\xf8\xcf\x84\x64{&\xe3\x0e-\xd1\x9b\x32\xcc\x45p\xa5\x0c\x83\xcbN\x43\x45M\xba\xb2\x07\xb9\x16\x12\xa5\x88Vw=\xd8\x8b\xac\x9e" "\xa1j\xd2JX\x0bO\x38\xf7\x36\xa4\x46\xd5\xd2\x82\xf1\xb7\xc1\xa5\x0e\x46\xc2\"\xe9\x17\x32\x80\x94X\x1c\x31\x9ey\x9e\xf7\x15p\x15X\xc3" ")^\"\xaa\x96\x36\x8d\x61\x81W\xc4\x45\x05\xfa{\x89\x98\xe8\xe6&p\xa9\xf2Q\xa5\x34n\xd2\x95\xd0p\x46u\xae\xe6\x80\x96\x05.;" "\x61(\x31\x87\x66r@\x1a\xdb&\xa6\x45\x9d\xeb\xc0~\xd4Y\x42T\x9di\xedn/\n\xd3\x38\xa7\xc0\x9e\x33\x44\xd5\xa5\x32\xa4\xb0Mo" "\x46^\x44\x11\xfc\r\\\xe6\xfd,\xdf<\x33\x14\r\xbaj\xf1\xd3\xf4\x05\xba\x9f\xa1p\xc1\xa8\x92\x83\xde%\xe0R\xef\xb8\x61\t\x43\x36\xdc" "\x0b\xe2~\xabp\x8d\x0b\x1cU\x9b\x0b\xf7\\)\xa0\xec\xd6\xf3\xcd\xc3L\x11\x97\xa0\x97\x81]\xfa\x97\xa0\xe5\xd3\xd8\xf1\x37 \xaf\x32\x97i" "TI\x83\xc4,\\-\xed~h\x0f\xe4\xe8YJX\x62h\xcc\x34z\xbc\xb9\x19\xc4\nu\x8b\xaa\xf5\x01W\x90k\x31\xc2\xf2muZ" "\xa4\xab\xd3\xb0\xc4\xf0\xc6\xee\x94\xf8\"\xb0wZ{\xf1RI:\x11\xfb\xa0t\x34\xde\xb1\x9e@R\x81S,\xc8=\xb9n\x91\xce\xb8\xf4" ".\x08\x34\x30g\xda\t\x93,\x1a^\xf2\x36\xd8-~\x65\xb5\xba\x44\x08r\x19\xea\x05}'_\\\xa6\xb7\xdf\x03\x39\xd2\x19\xaf^\x80\x1c" "\x1e\x32\x8f@\x8e\xaa\xea\xbb\x33j\xccq\xf9\x02\xd0\xbd\xea\x93 \x9ep\x95\x19\x96\xe8\xf5\xb4\x9f\x66\xb1\x87x|\x1d\x83\x86\xf9\x8a~\x8c" "*{\xac-h-g w\x96T\x96\x19\xec\x0e\x98&J\x1a\xac\x32\x39\xb6\xdc\x00\x39\x36\x05T\xf6\xba\x46\x89\xaa\xe9\xac\xf5\x45\xb0\x9b" "\x07\xdd|\xddw\x87\x45\x9c\x02~\r\x39v\xebQI\xb3\xc1\xda\xa6Z\xef\x89\xc2\"]\xc0\x84%\xe6.,M#\x12\x86%\x16\x33\xa8" "R\xec\xe7\xc3\xdf\x05\x97y\x43\xe2\xe1\xf9\xa7\xce\x00\xbb!\tyx\x1e\xdb\x07\x62\xb1\x96\xf8\xf7@Lk\xb9\x15\xc4\xc5V.\xce\x17\xd8" "\x0f\x96p\x10\xfe\x7f\xc8\x8b\xfb\x41,/\x33\xf4\x99gT\x39\xe8\xaa\x37\xaa\xe6\xc4\x81)\xbb\x8c\xc6\x7f\x00I\x43\xae\xc2\xa3j\xda\xc6\x9d" "\x90l>\x63K\x12\xf2\xa7\nr\x34\xfaOT\x39l\xf5\xa3\xb8\xf7\xc0\x1d\xc2\x1f\x80\x1az\xa5\xe5\xcb\x41}\xac\xe4\x41\x64!\xdd\x33\xf9" "\x30\xd8\x9b\xb5q\xb3\xd2\x9c\x45\x45\x95|\x8dr\x04rh\xd8;\xc0\xc5R`\xa7Y&\xd6\xbb\xecm\x10\x8b\x86\x17=\x00\x62\xc6^\xbc" "\x12\xc4\x44\x94\x61{\x92\xab\xaf\x99\x02\x9e\xea\xc7\x92\xa0\xaa\xbd\x62\xcb\x90\x81hw\x07\xb8\x46\x9d\x65\x46\xd5\x62$\xf1\x9b\xc0\x35l\\\xba" "J\tK\xda\xf5O\x99n\x1e}^\n\xec~\x15\xb9gZ\xe3\xd2H.\x85\x1c\x1a\xc9\xf9\x90\xa3\x1e\xaa\xc3\x12{\n\xc1k\x82%\xef" "\x06\x97:\xc4\x8b*\xc5\xc2o\xc3v\xa9\xda\x9c\xd4\x65X\x9c\x91\xacl\xf7'\xaaT\xf4~T\xad.\x04\x83|\xbb\xe5,\xb1\xe8\x90\xbc" "S\xd8\x80-L\x99Z\xb8\xcf\x1b\x04\xd1\xa7R\xec\x39i\x10\x7f\xa6\xacQ\xf8\x1a\x45\xa6-\x83\xb6\x66qp\xb8\x01\x34|\xcc\xfb[\xd6\x1b\xd2\x07\x9f.\x80\x1c\xb1\xf0\xf5\x62\xc6r\xdf\xfd],/\xb3tH\x89*\xf5-LX\xc6]\xc0O!\x39" "\xe1\xea'\xaa\x94\xb5M\xd2\xab\x10HU\x0f\x81\x86\xf6\xfcU\xb0\xb3\xcbl\x04\r\xdb\xab\x19\\\xb6H\xce\xd7\xb7\xc9\x61\xc9\x80\xd5\x86\x86" "\x97\xf5\x33\xf4\xde\xca\xcf\x62\xef\x96\x81\xd1|\xd3\xd9\x9dK\x90\xcf\x38\xb3\xd8\n\x15\xaaK\xe7\xb0\x44/\x0e\xc2\x32\xc3\x36g\x10\xf6S\x0c" "\x39\xd0'\xf9\x37_\x86\x1c\x1a\xed\x61T\x82\xc5\x94\xe4\xbd\xcc\x11\x8c~\x85\x32q\x34]\x0b\x39\xfa\xf0*,\xd3U\x9c\xef\xeewn\x81" "\x1c\xbb\x16\xacn\xb7:\x94\xe2\xaco\x06\xbb\x1d\x62\x94\x88\xcd\xef,\x07;m\x1e\xdd\xbcV&\x97\x94.$\x89\x19\x1f\xde\x0b\x81\x83\xae" "\xc6\xfc,\x03\x9fT\x1f\x37}\xa4\xa4\x1b\x9e\x80@\xa2U\x8f\x80\x8b\x03\xf5Y\xe0R\xc5\xfc,\x93\\\xdd\xa9\xec\xb5\xf9V-\nm\r" "\n\xb5\x80\x61\t{\xe5\xa5`gg\xfc\x1d\xd8\x39\x02<\x05v\xdd\x05\x04\x85\x8az\xf5y\xa9\x94V\x06\x1av\xfc\?\x82]\x03\xcd\xf8" "\xbc\x39\x92\xa3\xb3j\r\x8d\x1a\xe4\x9b\x7fu\xde%\xc5\x64\xe1!\xfdk\x85,\xe7$\xd3\xf8\xf5 \x66S\x62\xb7\xc5\xdb\xa5\xadR\xcf\xea" "h+,\xb1\x8dsY\x83\x33\x12\?\xcb\x90\x0bil\xff@\x91\x15" "\xcf\x1fV\xe8\x45\x8f\x9f\x95p\xfa\x44\xd5\xb4\x96\x32\xd0\x88\x85\?\x8a\x01\x96wm\xb2\x39\xaa\xb0\x45{\x8enO\xa2j\x0b\xb7\x94/\x66" "\xb3K\x1a\xce|\x9d\x95\xc9@]S\x02v\xc3]T\xf3X\xf5r\x10[\xbc\x9b\x32\xee\"\xc7\xc1U\xe3*<\xac\xc8\x37}\x18R\x19" "\x0b\xe0\x32\x1e\xaf\x1d\xc1\x17\xd1g\xcd\x83`\x97L\xcf\x96\xb2\xcb\xecP\xf7G\xb4\x45\xa3\xcb\x34\xc8\xa7\xad\xee@\x92\x05\xe4-\x13\x0b\?" "\x90\x01\xc9\x62$;\x7f\x00\x39\xc7]\x9b\x46\xd5\xe6\x06$\x7f\xc2\xd5\x46PH\xdc\xc5O\xc0\xc5\xf1\xf9}\xe0*rm\xe1\xf3\xa6o\xc3" "\xdfPv\x0b\xc9T\xad\x0b\xe9 _\x1d\x95\x04\x85\rj\xb4\x15\xc5\xd6\xca\xe6]Gn\x03\x63U\xa5\xa9Q\xbd\xb4\xe0\x96\x17\x90\x45\xaf" "\xd9\x86\xbdT\xca\xd2]\xb6\xcf\x1b\xc3\xf8\x87\xc0\xae\x41\xf4\xa2\xdaVSUt\xde\xd1\x8a\xbc\xd4\x91TX\x61\x8b\xf6\x9c\"\xcb\xcb&\x8e" "z\xae\x84/\x03\xb1\xce \x61\x99\x05\x95\xc8\x62\xee\x7f\x06\x17U\x95\x89^\xa0\x80-X\xbc\xe5\x9b\xa9\xd7gZ\xb9\x38P\x7f\x39\x35(" "Ns\xcd\x1dV\x98\xbf\xca,\r^\xe6\xe7\x30\xc0\xc7\x02\xb8\x64\xd4\xfa\xd1\x04\xb8\xf4\xd9NX\x36\xa8\xd6Rk\xd7:\xf9\x16\xff\xa2^" "\xc6\xa8\xc6\x1c\x10\x8b\xf9m\xeeG\x16v\x80\\\x66>$\xb3\x34\x42Y\x90\xaf\xc7,Q\xbd\x18m\xce\x05\xe0\x62\xa8\x97\xed \xa6\xe7\x13" "\xac\xf0\xdd\xbd\xa7\x94\x9d\xcfv\xceJ\xf5\xdc\x95\xe8\x8d\xa0\xe1\x12\x62'\x92\x30X\xc5\xa2k\xc1\xae\x07\x89^z\xbaY\x8b-\x89s\x34" ">ZT\xcf\xe6\xbe\x05I\xba\xb6\t+\xf4\x62\xce\xcf\xd2\x88\x9f~\x0e\x0fU\xfe\x83\x02\xc2\xd8\x62\xef\xff%\xb8\xec\xc2\xa8\xd0\x1e\x16\xa5" "\xb3\x32g\xc1^\xe7\x8a\x13\xd5\xb2\xb9\xef\x05\xb1\x34\xf7\x9a\x9f#\x8bq\xcb\x82\x8b\x13\x98h\xad\x0cV\x87O\x03\r\xaf\xf3\x02\x08\xb4g" "\xdd\xe9\xd9V\xbd\x1a\xb1(\xach\xb0z\xeeu\x1a\x46\xf5\xd2\xb8\xb7`H)\xce\x37\x35\xd8\xdf\x1f\x00\x17\x8d\xf6\x42p\xa9\xcf\x07\?k" "\xdc\x8cM\xdb\x34\xaa\xb7;\xa9\x42}\xd6\x14\x14[H&\x41Z\xc6\x96L\x43\x0e\x87JlO*xZ\x88][\xad\xd8\xd8\xc1\x0f\x83" "\xbd\xd4\xd8Y\xd2W\xc0\xc5p\xc0\x1d\xe0\x9avM\x19V(\x1e (\xd4M\x44P|rXVG@\x61U\x9a\x35\x8a\x06\x65\x8bj" "\x07\xc4\xffJ\t\xb2\x90\x11\xf2+\xf3`\xef\x35\ri\xcfk\x90W\x81\xfb\x12\x96\xf1\x1e\x04\xa3M\x45\xab\x96\xabV\x8c\xe4\x94\xaf\x82]" "/\x88\x83\x42\xb9j\xf9\xf0{\xc1U\xe8\xd8\xc3\x32\xe9z\x8b_\x03W\xc2\xecP!j\x61U\x86\xb5\xbb\x81\x19j\xc5V\x93\xb0s)" "\x94\xb2\xaf\xe8\x83\x1c\x96\xe2\x37`\?jM\xc9\xe1\xfd \x32U\xa0KP(\x86\xfd.\xac\x9a\xdc\x15\xf6\x39\xe0\xd2\x07\xb6\x61\xd9\x82\xfe" "\xa9\xd0\x1bL\xdf\xddS\xefL\xf5\xdd=\x35V \xb5\x8c=]\x0b\x81\xe6\xd5\xa4\x90\xc6\x7f\x31\x04\xea\xed\x9b\x97\xce\xa5\xda<\x88\x15L" "\x1e\xd5s\xaf\xf7\x31\x10\xb3\x7fu\x80\x98\x93\xc2\xe5 \x96\xf6\xba\x1fvX\xd1n\x15\x05\x9bO\xfa\xd0^\x10\x8b\xf2\xdb\x9e\x42%\x88\x62" "\xc9\x17\xa3\x12\x38\x17`\x13\x91\x63O\xda\xf3lR\xa8\x65\\\xe9\np\xb1\x83\xec\x85\x64\xea\xb3\x1f\\\xfa`\xc1\xcf\xb1S\xac<\x0bw" "[;\xeet\x0e\nG\xcc\x36\x14r\x10VY\xbc\xbfZ\x31\xf5m\xef\x00\r;\xe3vH\xb6K\x81\x8a.\xad\xf0*u\xd7\xe3\xf3\xda" "\x1d\x33~T\xcb\xfb\x38,\x9b\xdd\xfd;v\xa3\x15\x16\x41\xa9\xca\x42\x36\xd4\x8a\x19\x1f\xa9\x42\xfd\xd0\xc6\x9eG\x16\xe3\x66Q\xda\x61\xbdt" ":\x38\xc2\xea\"\x8f\xa1\x31\xbe\x08.^\xd1\xbe\x13\\M\xae\xa4\x01\xef\xf1\xe3\x7f\x00\x97\x45`\xaf\xd0G\x94\x61\x15M\x02\xeb(^\xe8" "'\xbf\x04\x39\xda+\xa3Z\x31\xad\xb7~\x02v\xaaZ\x06v\xf3\x96\x99\xae/\xbe\xc3\n\xdd&\x87U\xfa\"\xde'\x1e \xde\x02\x39R" "\xe4\x38&\x97Z\x0e\xddw\xa4\x46\x8di\x62#\xa5\x90\xd3h\xf5\xa3\xb1\xf3\xc2*vj\xac\xb5r\xa4\x12\xe2\xd8z\x38\x14\x01v\x88\xb5" "\x62\xf3\xab\x07P\x1c\x1a\xdb.\xe8\xc3~z\x06\x04\x12\xf6\xfc\x0c\xd8ON\x37\n\xa2\xf3\x89\x34\x90[\x86Z\x8e\xea\x33\xe0\xd2\xcb\xa9\xa8" "\xd1\x02\xd3\x17\xdbK.\x01!\xc4\x7fT\x01}\x06\xcc\x00\x0cUUK\x9b\?\x13\xb9\x13\xd6+r\xa4\x38W<\x08\x39\x99\xce\x44\x03\x07" "T\xc0\x80\x46T\x43\xec\xb3\x10h'\x66\x15\x34~,i\xaahlX\xb7\x10\xc3\x90|\x1b\xb2\x90\"\xc7P\xcf\xf5\xb0\xbaX\n\x36#" "\x8d\xb0\xba\xd8J\xec\xbb\x8b\xf5\x0c-\xacPQ\x16\xbbP\x1b\x8dv\x8aU\xaa^\x91=\x87\xcdX\x9a\xea\x65\xda\x84X\x31j\x66\xa3\xef\xc8\xfc" "\x1c}\x30\x1e\xd5w:#\x89\x1ai\xc6\xff\x84\x1c\x8bK\xe5`\x1b\xd2\xee\x1d.\xf7\xb0\x8a\x17\x10\xef\x05\x17\xa1\x9b/\x81\xcb\x62\x01\x94" "\xda{\xb4\xf4\xa3VRv=\xd8|\x15\xbb\xde\xc7\x90\xe9\x88)\xcf\xe2L\x41\x8eX\xef\xe3O\x80\xcb\x82n\x64\x66Y\x0b*\xfa\xc8w" "\xd0\x0e\xac\xac\xf2$\xe4\xd9\x37\x65\xbd\xc1\x87<\x37!w\xc6x\xfa\x05\x34T\xd7\xd0\x41)\xe7\xa6\xcf@\xa0\xe1\xeb*\xa4\x33.\xbf\x03" "\x02\xf9\x10u\x04\x02\xc7\xcch\x15$\x16\xd5\xeb\xbc\x13\x35\xf2\xf0\xeau\x08\xec\xb4J\xd0Q\xd4\xcb\xb4\xa8O\x15\xbc\x8f\xbb\x11\xec(W" "l\xf6i\xb0\xf7\xb9\x66\x8a\x1a\xd9+\xd3\xa0\x86T\xcb\xda\xff\x80]\xaa\xee\xd6z\xb0\xe7\x9a>\xd3\xae\xdd\xc3*\xf5\xbb\xeb\xe7iI\xa3" "z\x8bu\xd8\xc8W-\xdf\x87\x1a\xea\\%(-\xb4\xfa\x61so\x82\x9c\x19kSs\x93\x92\xc3\xc5\xc0\xb9\x10\xd8\xe0\x8c\x36(\x35\xac" "ZM\x9a\xfb\xe3;\xa4\x8at\xcf\x41k\x38)\xf2\x95\xc7\xa1\xaa\xee\"=\x87o\xc1\xb4U\xa5S\xad\x9f\xa3\x88\x85\xb0\xc6\xdc\x34\x15\xdb" "\xd3\xd4\xf4n\x33\xb6\x42k\xee\x84\xfe\xa9\x31\xacQ\x63\x85#\x0e\x1c\xac\xe5\x8b\xc8\x94\xe3\xcf\x0e\xb0\xeb\xf8\x13\xd5\x0f\xab\x8dU\xb0\x37]" "\x03\x39\x62Hw_\x87\xdcg\x9d\x9c\xb0\x46O\x96|\xa2\x62~p+$\xdb,\\\xca\xc9\xf7\x0c\x08\xd4'\xed\x61\x8d\x18\xd2\xf6SQ" "\x64\x96\xa2\x03\\\xe9V\xcf\x9c\xd1~\x08v\xbd_\x0e\x8a\x07]\x1d\x06\xa5\x32\xec$\xbf\x0brX\xc0o\xa2\\l\xd3mP\x43\xc6\x8d" "]\x8b\x90\x9cm\x95\xc9\x92\xcaH\x42{~\x12\xec,\xe9N\xb0\xdb\xd3\x66y\xe2\x91\x34v\x39\xb8h\?\xc9(\x97\x39\xd8\xcfY\x30\x39" "\xec\x32\xf7\x43\x43\x1d.\xa2z\x9d\x19\x83Rs\x16\xc4\x17\"r\x65S\x43\xd0\x35V\x9e\xf5\x62\xc6\x1b\xc7\x91\xbb\xb9&+\xd5\xf0\xc4^" "\xba\x1eZ\x06\xc5#\xaeV}\x87\xc9y\x07\xb2\x90j\xd9\xf9\x39\xb0K\xf7\xdc\x00Kh\x34\x97#\xee\x81\tZ\xb9\xaa\xd3\x9a[\xa7l" "\?O\x63\xde\x45\xf5\x32\x33\xee\x7f\ny\xd9\x8bT\x87\xe4\xc1\x44_\xa5\xcbK\?O}\xa1\xf8\x05\x16\x87\xb7\xd1\xa0\x14\xa5T\xf5.\xe4" "\xc5&\xd8\nv\xf3\xf2]\x65H\xef\x9a\x42\xcb\xd4\x9c\xb0\x15\xe4\xba\?\x41\xb1\xcd\xe6\xa5\x16\xf0\x31]\xf1\xea\x61\x95\x05.)\x30\x18I" "\xa9\xf9z\xcd\xb4\xb3\xc1*\xb1\x8d\x18&\xf1\x1a\x9b|\x0b\xa4\x80)\x98s\x1b\x9b\xad\x0e\x1b\xac\xe1j]\xb9|\x01\x0b%%\xbd\x86\xb2" "\x9b;\xbeR\x8b\xdeK\x88\xd1]\xb9\x90L\xdc\xc5nH\xd6\xc5v\xd4\xd8j\x45\x36\xbf+\xe9\x13V\xab\x34\xfe_\xa1\x80\xa2\xf3\xbe!" "\x64\xa1\xfd\x34\xaaW\x37VQ#M\xeb<\xb0\x37[=\x8b\x62K\xff\x80\xbc\x06\x9c\xc0\xb0\x46\x31\x42\xbe\x03\x1d\xc1$\x1a\x15\xa6\x15\x35" "kO\tJ\x39\x83\xbc\?\x35pP%\xd4|\xa6.\xbf\xc3\xaa\x41\x63\xef\xb3z\xd6\x45\x45PlQ\x02\xcb\xd9\x65\xf6\x82X\xe1\xa6~" "\x1e\r\xfb*\x10\x1b\x9a\xa5x\xde\xc9\tJ\x45\xe7\xdd\xc7PR\x0eMXx\x94\xeb%\x8e\x97\xd9l\x99Z\\\xfb<\x1e\xcb\x9f\x03v" "\x05K{|=\x14\xfboH\x96>\xb8\xee-\x14\xa7\xc3\x95\x34j\xa6\x01`\x00)\xa7\x17\x88V\x10\xf3\xc1\xf8S\xa8\x04u\xfd\xe7\x13" "\xd7\xb4\xec\x46\xa8\x41[\xad\x44\xa6\xac\x43\x0c)\x35v\x37J\x14S\xc5\xff\x42\x43\r\xe5\x16\x18\xf6\xc9\x13\xf0R,\x0f\xcb\x42\x87Y\x92" "\xd5\x85\xd8s\xd1]\x10\xd8\xe1\x8a\xe3\x11\xfb\xb4\xfaJ\x10\xcb\xc2\xe3\x91sP\n:\xe3\xfa>\xb8\xe4\x1d\xfds\x43\xe0\xa2\x19\xff\t:" "\xd3\x8c\xb7\x80X\x86\x8b\x17\xce\x46\xd9\x19\xae\x1d#\x7f\r-\xf3,\xb0K\x37\?\x17\x0b\xf2\x02\xba\x01\xb9\x01\xec\x62\x12wo\x41\xa6\x9d" "\xce\xfc\xbcLs\x39\xc2\x17O\xab^\x01{\x83\xd6!!O\xf7`\x65\x9e\xa9\xf1\x46\xc3*=\xd0\x0ek\x08H\xeb\x01\r\xef\x89z " "\xb0\xcb\xea\xd0\x82\xa0\x65\xcb=Q\xe2\x41pq\x01<\x0c.\r<\xe1\x13\x1fu~\x02\\,\xce\xf5\xc8\x82\x33,\xd6\xea\xf2\x96*~" "\xe9s\xe0\x62+\xa7\x83\xcb\xc2\xb8\x10\x31\xb5\xf2,p\xb1\x33>\x0e.)\xc5\xaa\xfb\x41L\xf7\\m \xd6p\x66>\x31T\x9b\x1f\x42" "\x91\xc5\x0e\x37\x66\x81\xcb\\\x1a\x96\x9b\x37\x12\x82\xa9\x96\xbe\x0b\xec\x62\x90)\xfb\xa0\x98\xb9\x04\xafK\xb7\x66\xa2\x65^\x88\n\x17\x03\xe8\xfb" "\x14\xd8K\xac\xea\xba\xcd\x8c\xd5\xc7TX\xa5\x01,\xc2\x9a\x84\xfb\x13\x35\x32\xd8\xd3=`'\x32\?\x03j\xf4\xcbU\xc0\x65`\xef\x31\xdb" "\x10}\x66J\xc1\xa5\xfd\xcbw\x80\xabS!Y\xcf\xba\xc3\x9a\x93[!\xf6\x9d{P@\x8e\x00\x97\x83X\xfcu\xbf\xd0\x05\x62=o\xf1" "\x32uo\x1e\xd6h\xfc\x65\?\x8f~\x38\xaf\x46\xb9\x38\xb9`G\x46PV<\x03\xec\xd2\x89\x92\xe3PU\x8cm\xdb\xbf\xa0!\x8b\x8c\x95" "\x1e\x11\\\x02\xca\xaai\xb7\xdc\xc5\x44_\xdc\x0bv\xaaz\x1f\xd8\xed\x1e\xbfYlls\x01\xb8\x38\x80t\xa0\\\xf4\xcd\x92\x04\x62Q\xfe" "\xc0\x06\x64\x31\xe6\xf4\tJ\x39>\xa7\x42g\x45,x\x99\xea\xce\x31j\x94\x41\xef\xca\x45\x08\xe4 \xbc\t\x34\xd2\x07\x93\xfe\x08\x1a;r" "\xaf\xb1\xb8\x81u\xf9\x9a{\xa3X\xd4\xfb\xfe\x02.\x31\xfe\xac&\x64\x31j\x86-Yl\xfd!\xb8h\xa2\x32IIq\xaa\x30I\x35\x9a" "\x0b\xeeR]\xb3\x05\x0e\x1bv-\xb8\xd4\xa9\xb2/p\xafXt)J*\xa7\x19\xff[\x02.\xf6\x82\xc7\x90\x17\xc7\xba'\xc0\xaeOS" "\xbdL]\x82z\xeeY\x1c\x96\x19\x35\xd2\xca\xbb\xbf\x06U\xcd\x91\x8b\xc3\x86\x1d\x86\x1c\x1a\x1b\x46\xb6rv\xd8\x13H\x92\xe2T\x61}X" "\xaaON\x82r\xde\x33\xfe\x10\x92y\xc3+\xb3\x1e\x37t_@\xee\xe2\x64\xfe\xafX\x15\x94\x8b\x1a)\xe3\xa0\xd1%\xb1_\xa0\xde\xef\xfd" "\"{%\xdaH\xb3\xc1\xd8\xeb\x80\x64\xa7\x81K:\xe3\xb6!pi\x38\x06\xbf\xa0\xc7\xe9\xe3;\xb4\x98L\xac\x62\x36;\xbe\x89\xbc\xc4Z" "\x9e\xf9<\xca\xc5\xc1\xe1\xca\xd4\xc0\xa1\xc5\x64\xf4\x63s\xc3\x90\x08\x1b\xdb\x94\x0bv\x0b\x89\xdb\xa8\xe8\xac\xa8\x99Gp\x32_\xa8\x9f\xa5\xa0" "\\\xfa\xe9]\xbf\x00\xbb\xb4\xfb\xb2_\xa3~h\xbd\xd8i\x12H\xb6\xf9\x8f\x90S\xe2T\x8d\x9a\xc5~\x0eW\x82\x9d\xa5\x38\x98\x1a\xb5\x66" "Y\xfdH/\x38\xe5\xe3\xd0'\xdd\x9a[\xca\xb5\xf4M\xc8\xa1\xf5\xee\x86\x1c\xbd\xc6\x8dZ\xd5\xdd\x8aG\xf8YR\x1d\xb8t\r\xe9\x11\x1b" "vN\x1c\xfa\x0c;\x8b\xf2\x0b,\xda`Q\x99\x19\xadN%\x01\x01i\x82\xc5\"\x90L\xa0\x02\x04\x92\xdd\x86-p\x33\xc3Q}\x14y" "\xe9\x86%p\x80\xb4\xf3\x90\xa9\xdeIy\x0eQ\x86\x05\x43\xcd\x88\xb5\xd7\x90IV\r\xc3\x1aZ\xef\x1e$\x89>\xd9\x31\x64\xc1\x85P)" "\xe4\xcc[\xe3VY\x13\x8c\x39\x9d\xc3:}{\xeb\x39\xb0\xd9:\x94+\xcb\xb5WX\x33\xeej>\xac\xabs\x7f\xfc\x82\x11\x33H\x8b\xc3" "\xdb,\x66s\xa6\x0c\xdd\x0c\n\x00Us\r\x00_\x33\xe1h\xc2:\xbb\xeb'\xc6,\xb6\x08v\x31\xf5\xed\xd2\x1d\xec\xc6\xa7\x9c\xdd\xf3\n" "\xb0\xcb\x9cr\xc0\x07\xbb\x86\xb2\xf5\x1d\xd8LV)\x1a\xa7&\xackt\x15\xe5;\x44\x99L\xc7\x8az\x8dZ\xedh\xb1\xd2\xbc!\xc9k" "\xcax\xc9\xbb!\x99\x9d\xe8N\xb0\xdb\rx\xab\xb6\xb2\xc7G\x94\xfb;!\xd0\xc2\xac\x17\x89\xd1.\x7f\x14\x92\xf5\x94\x38jU\xf8\xab\xe7" "\xf0\x63\x0f\x83X\xf4\xd9\xf7\x9f\xd4\xb0\x41,!\xf9\xf7\xe0\xa2\x62\x8f \xd3.\xf1\x9d>\r\x62\x06\x64\x91\x91\xc4n\x39\xebt\x0b\x13\x36" "\xd0\xfc\xb0\xdd.\xb2\xa0\xb4\xcd\xe6\xd0\x95\xaf\x32\x97\xbc\x08.\x36\xdc\x39\xe0JXm\xcc\x38\xae\xb0\x41\xecp\xcd\xbb\xc0\xae\x37\xf2\x41y" "\xbf&\xd5\xd9\x43\xb0\x1a}R\xe1\x13\x87\xb6\x34\x0b\xc4\x9c\xec\x30\x17\x94Pg\x0c)\xcd'\xb4)[\xf5ij\xe0`lw\xa0\x14\xe8" "\x9e\xb1;\xdf\x82>\xac\xd5\xf3!GJq\x43;\xe4\xf0\x92\xf4\xef\x90\xc3Rl\x87\x1c\xda\xc6\xf3\x90\xa3\x1e\x62=y@\x1a\xff\x17\xcc" "\x8fX\xb5\x9b_\x86\x62v\xb3\x7f\x12\xb4\xd6\x90m\x96)\x05\x8c\x63\xe4/\x61\xff\xba\x06jHm\xecn\x45SV\xb8\n\xf7\xb2\x65\x1e" "\xdc&\x02\xd9\x16\x87 \xd0\xb0X\x05\x0bZQ\r\x39\xce\x12\xfc\xa2\x93+OZ]\x06\x14\xabq-\x18\x94\x0f;\x9d=\xe2\xe2n\xc2" "\xe2M\x1e\xab.Y]\x00\x81\n\x03\x08\x1b\x14\xb5\xe8;\\\xdc.\xb0\xdb\x89Y\x9d\x46\x33\xf7\x8b\xf8\x30\xbf\x1b:\xb3\x14\xe7\"/\x31" "\xc8\xe4\x1a\x10+T (\xd7\x93\xff\xa0R\x97\x85\x1e\xd1ti\x9f\x80\x1csjJ\xcc\xdb\xb6\x7f\x82]\xbbL\xe0\xb0s\x1b\x41,\xa0" "\xd0\xf7\x9f\n\r\r\xa7\xd7 \xe6\xb7\xeaIp\x89\xaaw\x7f\x0b\xb9S\xd5\xab\xc1\xae\x81\xc0\x82\xf2\x31\xcb\x94:\x63o^\xd7m\xec\x85" "\xae\xea\x02\x82\xe8\x92\x33\x41Sg\x8a\x41\xd5\xa4\xc7\x87@l\x01\xdc\x1bh\x87\xd2\x61\xf5\x12\xd9'\x88\xee\x85T\xe4\x65^\x9a\xcb'\x9c" "m\x04\x95\x16\t\x45\x1e\xea\xc6\x1a\x1e\x85\xce\x16\xfb\xac\xc1v\x37\x02\xa2\x8b\x1d\x90\xf1y\xc6\x32\x15U\x07v\x81\x46\xe3Ry\xb9\x86\x64" "\xae\xeb\x33\xdb\xa0\xfb\xc4\xaf\x83\xbd\xc0\xda\x94\x93\xc2G\x90;\xc7\x04\x8c\xb4\x95\xe6\x46\x38\x1b\xe5J\xfe\xd1\xab\xa9\xd1QZ\x66\x32\xd8\x15" "\x14\x11\x35\xeb&\"j\x65\x1f\xdc\x0c.\xe9zG\xbe\r.)\xc5 V\x32\x95\x16y\xadn\xc0\x35\x41\xd8\xa0\x1d\xdf'\xe2n\x19\x04" "\x12qw[\x1e\x04\xea\xb8\xea\x11\x9e\xf7\x62Uj@\xc4\x9dx\xe0!\xe2.\x8e\xa5l\x83\xbe\x89\xf0\t\xbd[u/\xd8\xed\x16\xaf\xd9" "\x8e\xe9Zi\xab\xdbP\x9cY\xd7^\xd1Q=\xf4\x0e*[\xcc\x12XRl\xcd\x8a\xf4\xc4\xd5/\xb1\xb1\xae\\\xc7\x96\xe8h\x96\xd9\x8f" "\x06\x97\x8c\x8e\x66[\xadJ\xb9\x36\xd7\x82\x9d\xa3\x04\x06s\xa2\xf2\x96V \xf7\x63&\x87\xae\x30\xb0\xd4'\xa8O\x8e\xee\t\xea+~\x1d" "\xec\xfa\x90\xd0\xcbg\x01\xf7\xa0~\xf4\xe1L\xd8\xc0\x65\xea\x33\x10\xc8\x17\xa9\xb7@\x8e\x41\xac\x1d\xbaO\xe6/)\xd7\x81Z\xb0\xb3Q\x66" "\xc0n\x8f\xaa\x1a\x0c\x0eG\xe4\xdeU\x18\x0fK\xca\xb5\xbdZ\x35ni@\xe0_\x12\x06\x46\x02\xff\xf6\x7f\x0e\xf5,\xe5Z_\x03\xc5\x44" "\xd5\xb5g\x41\xb2\x8c\x1b\xeb\xf3!y\xc4\xac\xce\xc2\xc6\x11\xe6\xf7\xbbw\x43 \x1dm\x61Ss\x34\xcf\x34\x94\xb2'\x1d\x80\x1cQ\xf5\xae" "\xd7 Gj^^\xda\xd6q>\xc5N\xb3\x41w\xebQ\xabt\xd8x\x36\xd8\r\x14Q\xa9h\x8d\xa8\xd5\x9c\xd9V\xeb\xc9@X\xa7\xaf" "\xbd\xc2\x86Z\x33\x00\xbd\xb6\xf0\x1d\x02\xf0\x83\x90\x63g\x95\x95:\xec\x04\x0e\x01\x88\xedR\x1d\xa7\xb6\x83`\x37\xd0\x91\x43\x00\xa2\xef\xb4\x32" "\xdaW\x08.\x62{\xa4\xef\xa8\x97\x0c\xdf\x01\xff.\x46\x16\xd4\xf9R\x10\xb3/\x9f\x89\x02\xb6\x0b\xd4\xf1\x07(\xa0\xfa\x87\x0c\xeb\x38\\`" "\x14mh\xb0Rp\xbf#\x06\xd0\xe5\x9a p\xc0\?\x19@,H\x1c\xf1~\xf2N\x81x\xbf\x94\xef\x81\x8bG\r\xdf\x01\xb1\xf8\xcf\xbc" "\x10+\xa2\x06\xceh\x1f\x41\x12\x8d\xad\x0c\xecz\xe9\xe6\x39t\x1f\x36\x08\r\xb6G+\xd2\x15ut\xd4\x66X\xc2\xf3\x96\x63\xa5W\xc7\xee" "\x80UJ\x83>\xf7\xf3\t\xd8\x93\x97nM\x62\x87\xc9O\x83\xcb\x00\xf9%M\xd6\x04%\xae\x0e}\"\xf7\x36\?\x0e\xe2tk\xc1!\xab" "pu\x97\x11\x10\xb0\xb7\xe2\xb3\xc8\x94'\xb7\x30\xc8\xbay\xcb\x8b:\xef\x07\xbb\x98\xd6\x96k\x91\x85\x1el\x46\xadz\x08\xef\xe5\xea#n" "O |)G\n\xa1\xaay\x8c,\xd2\xc3\x99\xb0\x89}\xf9\xd7`g).I\xf5\xcb\x44\xf9%\x1f\x86\x1a\x16=\x93\xaf\xe6W\x62\x02" "jh\x33\xe5\xd9\xa9\xef\x00\xbb\x9e\?\xfb%\xe6\xaf\x92x\xbf\xe4*\xa8\x01\x93\x88\x37\xf6\x41\x0eW\x95\xef\x85>R\xe1\x87\xb0\xc8i\xa0" "\xc7\x89\xcf\x81]\xefs}\"\x00\x97>\x07v)N\x1c\x1b\x04\xf7\xd6\x1e+\xbd\x06\"\xfc\xbf\x0b\x81\x62\xb4[}\xd4\xaa\x86,\x0f\x08" "\xea[q\x1f$K\x16\xe7\xfc\x04\\R\xe1\x9f|\x1d\\\x06\xban\xa2\xcd\xcb\xa2\x42\x94\xbf\xa4\x18\xc4\xa8\xe7\xa4+.\x01q\x85U\x02" "\x91\x01\x84\xc9\x95(\x85\xe1\xd9*\xcd\xb9\xb7\xe1\x06=\xe7\x87\x41\xba\x0c\xbb\xe7\x19\xe0\x62O\x39\x1b\\\xed\xd6\xa6" "'\xb7K\x8c*r'r\xb7\x00\xca\xf9\n\xaa\xf1K\xd4\x89_P\xad\xeb\xde\x80\xe0\xc0*\xd4s\xa1:\x98\r\x1b\x46\x9c\xd9\x84M\xbc" "\x05~\x1c\\R\xf6\x95\x7f@\xa6\xe6\x06\xe4\x98\x85Q\x30p\xa0G\x7f\x0e\x31\x99\xad\x8e\xaa\xf2\x44\t\xae\xba\x1a\x02\xd5\x05\x81_\xa2\xab" "\\\x9fp\x41\xccq\x41\xb5t\xd8\x87\x9e\x87\x1a\xbc\xd7\xfb\"\xd8-\xdai\x03\x1f-\xb6@\r\xe9\xf8)\x99\xe0\x62$\x0b\x10;\x00\xe1" "g\xc1\xc5\xb9i\x0b\x88\xed\x1e\xad\x89S\xc0\xed\xc8\x8b\x90\xb0G\xc0\xc5\xfeu**\xca\x9e\xf6\x1c\xb3\xf3\x84\x63\xf6\x92\xcb\x41\n\?\x06" "\x39\n\x9a\r\x9b\xd4\xf9\x83\xef \x85\x8f\x83\xdd\x36\x86\xb5\xbc\x83\xbe\x1c\xc4\x93\x9a{\x13Mt\?\x92\n\xad\xe1\xa4\\+\xfe\x88J\x90" "r\xdd;\x07\x62]\x16\x86Mz\xb6\xec\x97\xe9\xd3\x8c\xe8\x98\xbc\xdbz\xd5\x43\xb9\x18w\x32\x0fr\xf4\x02=l\xb0\xc7>M\x62\x87{" "\xdf\x80>\xa2\x61\x32\x96\x85\xb5\\\xb3\xdd\x8b\xbc\xa4\xbfg\xa7#/)\xc5\xceNp\x99O\xdd\x12\x85\xd1\xfa\x65\xf6\xc6\xe7\x98\xc5#s" "\xd8\xc2\xdb!\xa7\xc4%\x85\r\xf6\x32\xa8\xc9nT[\xd2\x9c%\xf8\x0e\x91(\xdd\xd3`$\xb5\xe6\xd6\x38\x9f\xb5\xfa\x18r\xa7\x8f\xd6_" "\x43\xce\x9c\x35\x37\x8fL/\x85\x1c\x85\xad\xfa\x65R\x8a\xe4\xef\x43\x0e\ri\x16\xec\xe2\xd8\xfd\n\xe9\x83k\xa4/S\xe0\x00\x8a#j\xec>\x06\xc9\x13V" "\t\xea\xad\xce\xaf\xb0G\x82-\rZ\x99\xb5\x34\xd1S!\x99\xd3\xe8-\xe0\xb2\xb3\xca\x32*\xf6\x00\xb8j\x1dM\xd4Q\x62\xaa\x36\x9a\x89" "r&\xba\x18r\xe8\t\xaa\x0b\xaa\x8a\xfd,\x87\xb1\x15\x8b\xce\xe9\xed\x10h\x97J-\x16\xbb\xa1L\x63m\xf8\x0e\xc3\x89u\x66G\x99\xd9" "\x0fMk;\xd8\xf9\xfeK\xba\x03\xbb\xccV\xb0+\x92\xd0\x13\x80\x65l]\x37\x92\x14\x39\xec;\x80%h\x12ij\x12\xb5\xfd\x66\t\x34" "\xc8\x0b\x41#j`\xb4\t\x13\x1a\xa7\xc6'\x1as\xc9\x15\xc8]\xe3\x65\x07\xf5\x1a\xc2\xd8s\x00\xcb+\x90\x85n\xa0\xc2\x44\x86\xe9\xacX" "\xa3\xa8\xa3\xca\xb5WPk\x31\x0e\x1c\xc0\x12\x1b\x43\x02,\x63\x17\x80\x9d\xb6\xfa&\xd8\xf5I\xa0_!\xbd\xe9\x1c\x34\n\x11\x9b\xcb>\x01" "\x39|\x44p+\xb8J$\xc2\xfc\xf7\xa1*-s\x37ht\xfa\x8b:j\xac~hu\xff\x01\xb1t\xfc\xf7\xa5\xa2\x80'\x07\xd8\x84\xfb" "\x13\x38\x14\xe5\xf9(\x8e\r\xa7-\xfa\x10\xd5/\xb3\xc7PU\x1a\x39\x34\xeaP\x37\x0e\x01\xa1\x92\xb1\xbf\xa0\x14\x83V\xcf\x61\xc5\x31\xd7\x88\x1d\xb4\xd5\x1d`WOt\x01\xd1" "\x86\xcf\x61.ph\xc3\xbd\xe0\xb2\xf0\xb2\x15,\xfb\x8d\xc8]\x17\x93Q\x07m\xe3\x02\xb0[\x8c\x1e\xa2\x04\x97~\x01\xecy\xf2\xb2\xe7\xdb" "`\xb7\x00\xe5\t\x85\xf4\xf8\x04+\xc6\x1a\xc0.\x46r[\x37\xd8\xed\x91i\xbd\xfak\xf2\x08\x0e<\xf8\x37\xc8\xa1\x07\xc2I\xc8\x11\x13]" "\xf9q\xc8\xb1W\xab\x15<\x85\xc8\x82\x1c\x31\x9b\x03_\x00;\xd1G\x37\xa0\x14,\xce\x45 \xb6\x43\x39\x62\x14\x65\xb3\xdf\x41\xe3\x0f\x41\xc3" "\x87\x18\xb7#\x0b\xf1\x00\xff'\x0fY\xcc\xaa%\xb4\xa5\x39\x63\x8b:\xc4\x12\xb6\x7f\x1e\xc4\xa2\xe1\xb2G@\\(O\x9c\xf7\x80x\xceU" "\x9d_\x61\x8b\x9c\x36\x19\xa8W\xdd\x03.zr\x46\xebtV\x9a\xd1\x8a=\xaf@s\x13.\xf8sL@-z\xd2\x1e&\x12\x96\xa9\x18" "\xa4\xbc\n\xef\x90\xee\xb0\xec\x0c\x14G\xe7\x94\xa0Q\x06\xe1\xd3\xb0\xbd-\x96\x02>\x81\xe1\x42 \x85\xb1\xf9&\xb0\xb3\xbf\x9f\x07\x35\x44\xf9" "\x94\x9f\x41\x8e\xa2\x11|\x87H\x14\x93\xe0\xe2\xe4_`g{\xa1w'\xc4\xea\xd6~\x07\\,\xc5M\xe0\x62\xb7:\x03\\\n\x9b\xf7\x1d" "\xc8\x10\x06\xd9\xc1\x0eR\x8e\xe2\xb0\x83\x9c\x03\x81\x06Hk\x63\xb7:\x0b\x34\x84\xb2O\x81\x46\x1d\xcbx\xc5v\xdd\x90h\xb7\x02Z\xdc\xae" "*su\x95P\xd4k\xd4!\x86}\xcaw \x99\x9b\xf4.\xb0\xf3\xdd\xdf\xc7QR)\xfb\x45\x07\xa0X\x96\xe9\x43\x33\x96\x85\x90\xb4\xce" "W\x31\x14$\xd8\xf1\xb1\xe1m\xe3ts-\xe4\x88\xaa\xf7<\x03\x1ai\x8b\xab\xb1Zn\x63\xbfX\x87Z\x35\x00\x06\x41}\xa7\xf7\x82\x86" "\xe3\xcf\xf9\xc8Kr\xdf\x38\x01\r\xa9\xd8\x61\x64\x8a^\xb0\xe2\xf7\x62\x63t\xccx'\n\xd8\x64m\xcaI\xf3\x35\xb0\x8f\xc8\xd4-\x8b\x8a" "ng\xe1\x61\x9bt\xe1\xfdo\x43\x8e\xbe\xfb\xf3\x8a\xe5\ni\xfc\xa3\xc8\x02\x8a\xc5\xbe\x87\xce\x98\xd0w\x1c\x61\x9b\xf5\xdczn\"r!" "Y\xb7\xdb^\xb1\xa8\xbaL*\x41&\x97\xaf\x42r\xa2\xd7*S,|-v\xa3\x1d\xd2\xee\x9b\xdf\x04\xfb\x94\x35\xb7t\xb4#\xd9\xe0\x12" "\xf4\xec\xcf\xa5\xbf\xebn\"lS\?\x93>\x11\x80\x07\x9b\xc0>\xe7j\xc3\xa3\x9b\xaf\xed\xd8\xf8\x10\xd4\xb7\xee\x83\xa0\xe1S\x9al\x08\xb4" "W\xe1\x1dj\xb4\x41\xbdL@\x9f\x7f/\xb8\x44\xe7\xb5\x98\xe3\x12\x06S'\x02p\xc9\x10\x88\t\xe5\xc2\x66\xad\x19v\x98t\xc9\xbb Y" "\x14[{+\x88\x07\xcd~\xec@\xa0^|\xe6\xd7\x62\xc3\x42P\xdf\x45\xff\x0b\xc9z\xea\x18\x34\xd3\xfd\x1d\xb6\xa5\t\xf3i\xd9&\xf6\x1c" "\xbf\x01yil\xc1\xa8SG\xc8\x80\xe8\xbe\x7f\x7f\n\x34\x34\xd1*$\xe9\xc3\xa2\xa0^\xb1\xa0Q\xb7\xda\xa1W\xacH\x0c\x8f\xc8\xbd\xc1" "\x61\x64\xa1n\xb5\xfc*\x8b\xc5\x46\x04`\xca{ G\x0f\x87\x83\x66\xbd\x93\xf2J\x39\x89O\x80]\x1d\x01\x85\t\x85\xbe\x84mvS#" "\x08\xc0\xd8\x13O@\x8e\x94t\xe5W\x90\xbb\x81\xc9\x9b\xb3\xcd\x00\xc4V\xd7|\x06\x34\xea\x06\x36\xea\xd4\xf8\xcbQ\xb7\x62{<\x42\xf8\x64" "\x85\xdfl\xc1\xb0J\xf9\x9c\x16\xe6W.\xfd=%\r\xb9\x8fY+\xeb\x62\xc9\xaf\x61%\xbc\x1b\xb5\xcaM\xf1\x16\xb0sT\xff,h\xf4" "R\xd2\xaf:\xe1*\xc1\xafQ\xa4n\xd4\xa9!\x87\x82\x46Z\xef%\xc8\x0b\xd5\x1b{\xb0\x16yi$\x82\x30\x31\xe1\xea\x30l\xd3\xa9\xc4" "\xaf\x1a\xd1\xea\xedT\xbc\xb1W*\x35\xffj\x37\xb8\xa8\x33\x46\x9b\x9a\x1a+;WqX\xe1\x13\xf8\x97H\x03\x8d\xc6 \x0e\x13\xe6i\xb6" "\xcd\x36\x8c\xba\xeb\xad\x14\x0c\x8d\x81uo\xb9T\xd4rL\xb5u\x92i\xd2\x00$\xcb\xec\xf0\xab\x03\x90\xac\x87N^)" "\x31\x93;@\xcc\xe6~\x19:\x9b\xcf\xb4v\x8e\t\x95\xc8\x94Q\x1d\xdf@^\x16V\xb8Q\x1d\x14{\xc4\x16v\x43N\xb9\xba\xb0\x08\xdb" "\xd4[T\xd8\xce\xaew\x1f\xd8\xa5\xeb\xad\xc7(Zg\xcey:\xf5\x9d\xafW\xcaP\x1dO\x82]J\x9a\xb2\x1f\\\x85V@\xe6~=" "\x88g\xac\x99X\xd2S\xa1\xbc\xe1%\xcak\\\x91\xc3\x36\x1a\x64*\xf2\x12\xe5S\xfe\x0f\xec\x92{LV\xb9\xf6x\xb6\xbb\xc5\xaa\x17\xbd" ")\xe9\xa9o\xa7\x46\xbdi\xae\xa4\x41\x33G\x80\xdd\xd0\x87\xe5\xba\x18\x92\xf9:\x06\x33Z[\xaf\xc0*\x65\xb9\x62\xe7~u\xe6~\xa1S" "m,p\x18\xc5\x87 \x30\xdd\x1aN\xba\xde\xc1L\x08\x94\x36}\xa2\x13\x02\x65\x8a\xecy\x14\x02\xfb\\\xcd\x87\xed%\xee\x8f_#]x" "U\x15$\xcb(q\xf0m\x08\x9c\x36\x43\x9a\x90h]\xb7\x80]\x01\xf0\x61\x1b]\xb7u\x80\xcbN\x0b\xeb\xf4\x89\x62\xd4iq\x19\xba\x13" "\x8e=h\x64\xd5]\x07\xc5,*\x1f\xb1\x8e\x0b\xcf!w\xf6\xe5!\xc8\xe1\x34z\x16\xe4\xc8\x81@\xd5\x0b\xe0\x92\x1a\xdb\xfd~\x10K\xb9" "\x96\xc9\xbc\x43H\x86L\x88\xfa\xb6\"l\xb7\xd3\xb9:\xe9){\xde\x89\"\xebi\xb3G\xac\x63\xc7\x03\xa0\xa1[\x92\xb7\x90\x85\xe8\xfc\xca" "_@l\xfe\xd9\x88u\xdc#\x35&\x66,G\x94\x04=\xca\x14\xe9<\xec\x61\xc8m\xd5-g\xd8\xc6\xa7\xc4\x7f\x85@\x9a\xe8\x30\x04\xda" "\xa4\xe9p\x8c[!G\xbd%\x04\x44\?\xa6\xbf\x02\x39l\xf7\xb2T\x8f\xe0\xc9\x8b\x30\x42\xb6\xe9qz\xd8\xce\x83\xe8I\xc8\x91\xe2|\x7f" "\x13\xf2\x62\x1f\xc4\xc2\xa3\x37\xd7L\x82\x1d\xed\x42\xc8\xa1\xeb\x80\xab G\xa0\xbf\xbb\x30\xfd\xb5\xb3Wn\x41\xee\xea\x85\x38h\x96U\xc1\xfb" "\xae\x41\xd9\xad\x14\x0e\xebx\x1b\x88\r\xaf^\x83^\x99\xb2\xfds\xe0\x92R\xfcm\x00\xcd\x64\x1b\xbar}\xb0\xe9U\xea\x39I\xd8\xae\x8b" "[\xbfNT]\x89\x8d|w\x97#\x8ez\xf5\x15m@\xf4#\xb2\xf0\x04\xf4\x98t\xcf\xc3`\xa7\xe7\x7fY\x82\x8e\x9bi\xb1\xc8\x97\"" "I\xd1,~\x1d\xcf\x7f*!\x90\x33\x1a\x86\x9d^\xda\xf3~\x08\xe4\xdb\x7f\x99\x46\xb9\xc8\xf9\x1c\xe4\xd8\x35S\xbb\xfa\x66\xf1k\xd4\x31\x63" "\xd4ko\xdb\x9b\x15\xdc\x1e\xb4\xaa\xb7\x43\xaf\x9c\x83\x1evv\xce\x65\xdf\x17 G\xcf\x84\xc3v\xfaH\xbc\x0f\xec\x34\xdam`g\xb9\xfa" "\xc0\xae\xfe%\xbcr\x45tx\x95\xd2\x16\x1d\xaf\x81]\x0f^\xc2v\xceh\x1f\x86\xf2\xf2:\xf8\xbd\xd2\xdc\x16\xb5\xb0\\\x94\xdf\xb8\x14\\" "\xf2\x96\xfc\xd7\x17\x43U\xf5u\xe6\x39\x84\xa4\x94\x9d\x8e\x61\xbf\x00v\xc6\xc6\x95\x39\x97\x9d\x08\x03\x63+\x8b\xb3\x0f\xecR\x8a-\xcf S" "=\x81\x89\xbail\xed\xd0Y]T\x05\xcd\xec\x32\x7f\x05W\xb1\xe5.\xa5\xf8\xec\xe5\xc8t\xd2U\x42\xd4\xcdm\x45\x33\xb8\xca\x9d\xb5\x04" "\x44Z\xc6\xf3\xc1\x65\xae}\xdb\x66\xadZZ\\\x01}\x01j&\xcf\xd5\xa7\x86\xc7\x61lk\xbf\xd6\x02\x9d\x9b\x1c{\xd4-\xa3\xfa\xaa!" "\xc8\xa1\xf2\xd7\x43\x8eNR\x61\x1b\x07\xa2\r\x90\xc3>\xf8$\xd8\xed\x41t\x1dg\xe1\xa7\xc1\xae\x8f\x35\xa2^\x31\xbf\x65\xbd\x90\xa3oO" "\x82\x93\xf8\xccr]\xf3{t\xfd\xf7\xa5:H\x9e\x37\x43\xb2\x33\xf3\xe3\x99\xce\xea|\x42\x37\xb9\x46:\xa1\x06\xd0|rp\xa0=_\x86" "\xdc\xa1O\xeco\xd7\x82\x66\xc4\xb1{\xe5:\xfayt\x18\xb8Y&V\x9b\xd1\x88\xf3|\x42\xda\xdd\x10\xfe\xc7\xd5\xf9\xb9O\x0c\xe7\x85\xa7" "!S)\xd7\xa5\xd8\x8ct\xcb$\xbe\"\x0f\xecz\x19\x1d\x1e\x17\x63\xbb\xa8\x14\xc4\x06_\xec\xd6I*h\xd5y\xd9\xafQ\x7f\x05~\x9d" "=\xe2n`\xc7\x1f\x04\xb1X\xcb\xd6GQ\?\x18\xa8\x93~\x30\t.vs\xec\x89\x9c\xbf\x41\xe9\x9e\x8c\x1av\x10\x99\xd2\x44\xdf\x05." "v\x10\xec\"\xcb-\x62\x63\xa5\xc6\xc5\x0b\xdb\xf5\xc6\xc7w\xb8J\x31\xbfv\xab\x31\x1a\xc9\x46\x64\xc1Y\x06\xd3\x04q\x95\xc9\xc5`\xaft" "\xcd\x1d\xb6\xabk\x32\x9f\xb8\xca\xa6^\xc8\xa1\xcb\x9a\x17\xc0\xceG\x8b/\x81\x8b\x35\x7f&\xb8\xa4\x80)R\xe1z\x86\x1fukh\xef\xa8" "W\xdd\x8f\x07\x0eW\x89\xbd'q\x95\xedo\x80\xcb\\\x11\xb6w[=\xf3\x89\x07\x36\xa1\xdd\xd2\xdc[n\x07\x97-*\x9cs\x42\xe9 " "\x1c\xd0.\x02\x17/q^\x00\x97\x18\xff\x93#\xd0\xb0\xc0\n(\x86\xbd\xb2\t\\\x63\x02 \xfd+\xb8\x38\xa0\xfd\x02\\\xb4\xb1K\xf0\xa7" "O\xab\xc5\xe1*\xcf\x01\x17\xcd\x18\x03\x63\xaf\xe2\x1c\x82\x66)\xe9\x1al\x1e\xfb\x65\x62]\xf9\x1e\xe8##\xc0\xb6\xef\x42\x32{\xf7\x1e\xb0" "\x17\xb9\?Q\x37\xe7\x14\xac\xa8\xfb\xc5H\x0e\x44 \xa6\x03\x84;@\xcc\x66z\x1bj\xb0\x38{\x91{\xbf\xabg\xbf\xae\xd7\xb5\x85\xef\x90" "\x96\xa7\x41\x8e\x18\x89\x04\x0f\xea\xa5!\x61r\xe9W\xff\xb4\x1e\x9d\x1c\xc6\x7f\x07v\x45\x1f\x05\xcd\xe6N\xa4U\x63=\x07G\xd3\xf0\xbb\x43" "\x0c[\xcd\xc6\xaf\x93\xbc.\xfa;\x88\xe9\xef\xf4.\x08\xa4w\xaf\xbf\x43 \x9b\t\x93\xddQ\xf5u\xef\x11W);\xd6vZ\x14\xd6\xf3" "u\x8a\xa3\xf6\t\xa7\x8c}\n\x8a\x1ds\xc6\x16\x34\xebs\xad\xa8_z\xca\xa6\x1b\xa0\x46\x42\xbe`\x18,\x97\x16\\\xbe\x0b\x02\x39\x02\xa4" "\x42\xa0\x81\xed\xeb\xa0\xd8y\?x\x1e\x02\xc5\x9e\xaf\x96\xd5 \xc3\x7f\?\x06\x39\x16\xb3\x9ep\xcaGP\x64\xa2(\x63\x87R=\x87\xcf\xc4" " s\\\xbd\x85G\xfd\x9c+\x7f\x8aL\xa5\x37-\xff\x06\xb8\x64s}/\xd6\xcf\x44Q\xae\xfd\x0e\xb8X\xae\xab\x90\xa9\xe4\xbe\n\x96\xd9" "\xcbY\xe6 \xd8\xf3\\\x85\x07\x44Qn\x92\x45\xa0\xde\x41\x07\x0e{)\xca\xb3\x38\xbb\xa1<\xcd\xefN\xe4nG\x82\xbd\xe6\n\xbe_\x46" "\xec\xa4W\xc1\xbe\xa0\xca\xd3#\x62\x92\xf4\xd3\x31+\xf2\tG\xec;\xcc$\x1a\xb7\xdf\xa6Q\x81J.M\xe4\x82\x8b\xef\xd1\x64\x96\x19\x37" "\x9du\xa7\xe9\x1b\x1e\x32\xea/\xd4\x9aw\x30HLv\xd5\n\xc3\x0e\xdb'\\\x92\xef\xd0\x8fXY\x39\xf4\xe3\x15\xe0\xd2\xe3\xfd\xa0\xb5\xd3" "\xd8\xf5\x62\xd7\xabT\x18\xb6G\xaf\x89\x11\xcanx\xc8\xf0\xb8]{\x39<\xe4n\x08\x94\xb2\?r\x35\xcano\x9c\xfbi\xb4\xef\x80@" "s\x03\x42<\xe4\xef\xb0\xe3 \x0c\x32\xfe%\x10\x1b`\x8f\xe8\xc7U\xd8\xc8\x13\xfd\xf8\xa1\x83\xc8\x34\xcf\xc9\t\x8f\x37;}\xfc\x06;\xb0" "\xed\xedw\xcd\x1d\xf5\xcbh\xbcv\x1f\xb2(\x32\x9d;][\x04\x04=&o@\x92\xa2\x94=\xa2\x1fS\xbe\x07\xc9\xb2u\xcd\xfc<$" "\xb3_`/\\g\x0e\xf6\xbb`H\xf1\xcd\xf7#\x0bv\x90\xdb\x91\x05\xa7\xc8+!\x90\xaa\x66@`\x89\t\x14\x9d\xaf\xfc\x30\x04\x9a_" "\xd9v\x0b>u\\\xa3#\xf9u\xd3.\x8b\xa8\xdf<\xe4\x13<\xf9\xd0\x39`\x17\xb7\x99\xcf\x8c\x81\x8b\x63\xcb\x36\x14\x90%\x9d\x44\xee\xe6" "\x07\xafU\xfa\xd7)\xff\x41\xa6\x9c\x07\xb1\xbd\xad\xd4\xea\xf5\xe8\xffPp\x8c\xed\xf6\x0c\x84\xb8\xca\xa4\x8f\xa4\xfa\x82\xa2L\xd9\xd3\t\x39\x34" "\xad\xcd\xc8]L\xeb\xf8\x83\xe0\xb2\x38>\xc7\xdb\\S\xfau\xf6\x84\xa1\x8b\xd3\xcd\x39P\x43q\xd4\xbe\x03X\x42\xf9\xde\x11k\xd3j\xb3" "L{\xa8r\xb4\xc2\x99\x8dGg\x89\xa9O\x41\xb2\xc6\x04\xf4\t\xb9\x1c\xf9\x06\x04&\\\xd9\xa3~\xf5\t\x16\xb4j\x01\xc3\xe3\xf6H\xb9" "\xe1\xa8IV\?\x39\x9e\x43Q\xfe\x19:\xb3\xeco@\xc3\\\x35\xb6&\xf5\xb3\x1d\xf5\xea]@ \x98\xc9%\x15\xe5\xd0G\x34\xbc[\x8c" "V](\xfb\x0e*\xb9\r\xc4\xea\xe0\x31\xea\xa7!\x61\xb3vT\xf7h^\xb5\xbaq\x08\x1c\x42R&\xfa\x61W\xabQ\xef\x94\xab\x8d\xc0" "\x01\x1a\x1b\x91$\x1a^\xf9\x1bH\x96\x87\x8d\x63\xcf\x82\x66\xda\xe9\x1c\xb4\xea\x89Pp\xb4\xde\x8c\x44\x9f\xf6xt\x8d(\x0e\"\x88\x87L" "\xaa\x06;:\xda\xa9\xbf\x1b\x03;\x17\x30\x8f\x80\x86\xfal\x07\r\xb1\xf1G\xff" "\?_\xef\x01'kV\xd5\x8bN\xf7\x39\x13`\x66\x08\x33\x30\x91\t\x0c\x0c\xe3\x00\x03\x0c\x41\xd2\x00G\xc2\xc0(\x12T$\x07\x41\x44\xe4" "\xfa\x44\xc4\x87\x88h\xe7>\x9d\xbbO\xe7P\x9d\xabs\xe5\xaa\xae\\\x85(\xca\xbd\x06\x9e\xca\x45\xee\x85+\xea\xeb\xfd}_\xf9\x9e\x89+" "\xe0\x15\xc5\xfb_iW\xcf\xf4\xf1\xfe~\xe7wj\xf7\xfev\\{\xed\xb5W\xdak\xa3\x0c\xef\x9d\xbbP\x46\x45\xc5P\xdc \xc1\x12o" "h\x30\xdb`I\x8d&\x01\x39=v\xbc\x95N\x07s\x1dO\xe8\xe3\x9b\xa1\xb8\x41\x82\xda\x88\xaf#H\xdc\xa1\x45\xd5N\xf0\xea\x80\xd2\x8a" "\x8b#\x8d\xd9\xf4Z;\t\x01K@\x0e\x8d\x1d\x37\xf5\xa2\xb0\xbd\x1d\xb3V\x15\x44j\xa5,\xee\x13\xfb:v\xbe\x1b\xd5\xd5,\x18\xed\xa8" ":\xb4\x95R\x11&\xdaS\xd7\xa0p\xcd\xce\xa6\x8dU\x19O\xb0\xa2\x9c\x95\x93@\x88\xbfp!\x64\xef\xc7\x8f|\x08`\xe1s\xe7\xdf\x31" "x\x8ex\\\x43\x61SL\xad\xe9\x95\x93P\xdc\x17\xb1\x94\xe2\xbe\x88\x15\x14\xaf\x45:\xc4-\xa2T\x42\x63,\x84k\x44\x8d\xaf\x86\xa0\x91" "\x1a\xd0\xd5\xe1\xf8\x87\xd7~\x10\x9d\xea\xe3\x80\xe1V\x9fUW\xb7\x8d`\x45\r\x61\xe1\x86=\xe4-\xce\x8a\x90\"\xd9#\x91\x04\x96\x84\x31" "\x39)}\x39\"\xdc\xe2X\xca\r\x8cG\x1f\xd0\t\x96\xf4\x19\xdf`\x85v\xe5\x39p\x8c\x89]\x1b\xbc\xbd\xb2\xcd\x61\x0fo\x05W\x30\xdf" "k\x85Y\x38\xfa\x16z\xd7G\x9a\x9c\xb8&\xfe\x12\xe0\xac\x17\xa6\xc2\xad\x8b\x36w\xea\xb4\x03\xa4\x80\xfd\x06\?\xbd\x8eO\x43\x86\x87\x04\x84" "\xab\x08\x0f\xd5\x04\x10\xb0s\xe0S\x81\xfc[\x84lW\x81\x35\x62\x97\xc2\xfe\x37\xa3\x65U\xa7\x07+\xf6\xb4S\x42\xd5\x8f\xe1\x86]z\x65" "W\xc0s\x7f\x8eZ\xf4\xd0p\xeew\xd0;{\x05\xb7\xd0\x85\xcah\xa1w\xfc\xdb\xd2\x1b\xe8\x8e\x43\x11\xa2\x8c\x13\xbf\x41P\xa4=u\xd4" "\x0c\xd8'\xf0\xdcy\xd4\xe2\x87Y\xb1\xb8[\x1a\xa6)\x10\x0f\xc0\x37^\x88\x0e\x34@\x44@\xae\x80\x9d\x1f\x04w\xb1\x41\x03\xfb\xaf#(" "\xac\xea}\x37o\x17\xfc\x97\xec\xbd\x9b\x84\xa9\xe9\x36\x12\x02\xe7pK\x03\xd4\x38\xf6\x1b|\xd6\x9bP\xcb,\xceK\x1a\x18-:P\x05\x45" "\xb0\x42\x18\xfe\x9e\xd7\xa3\x1d&\x0e\xa0\xab)}<\x31\xdc\xb0'\xb9\xc5\xa5\x90\x8e-\xb3m\x1d\xe8\x06q\xe2.H\xf4\xb0n\r\xd2\xbb" "\xe4\xd3\xc1\x85`U)m\xb8\x91\x36\xf8\xf0\x08\x9f\x87\x06\xf5\x19\x97@\xbc\xfb\xe6Pk]V\x39\xdc\xd0\xe0*N\x02\x0f\xde\x86\xc2\xbc" "/~\x04\x65,\xce\xd2\xaa\x45IM\x98\x17\xc1\x96\xdd\xb4\x15\?\xbd\xf7\xa0\xb0i&W\xed!\x95\x84\xa9\xfb\xd8=\xaf\xa3\x0b\x65\x8c\xaa" "\xaf\xda\xcb\x98\xa9\x45\x19\xb3\xe3\xe0\x84\x1f\xe9\x46\x83\xbc\x41^\x8d\x32*V\x44{\x8c\xd8\xcf\x00\x10h\x95o\x9eG-s\x15\x98g'" "\xde#|\x62\x12\x07\x84\x14\xaf\xbc\x97\xe3\x13\xeb@@WS\xea\xfc\x1f\x1d\x8c\x18\xc4\xd8\xb4\xfa\x12\x94QN/`\xbf\xb8'\xbc\x19\x63" "\xae\x1a\xe8\xec\xc2\xef<\x93\xd3\x1f\xa0\x1dS\xf3\xb2\x83\xdc\x32\x1d\x64\x9e\xfe(\x86\xb7\x32]\x36\x65\xbd\x87\xe8$\\!\x04\xde=\xf3\x43" "[\x65\xffL:\x41x\x05\x9f\x8fZ\xea\x97\xe2\x66\xedZ\xe5\x01\xaf\xd7\x07\xd1\x17\x9d\xef\xbf\x01\x14]\x1d\xb5%P\x17\x9aVj\xdd\xb0" "\x8e\x37\xc8\xaf\x61\xa8\x0cL\x87Z\x84\xf3o{\?j\xa9\xfc\x1en(\x41\x0b\xb7\x62V\x8b#O\xd2\xd1\x86\x81]\xf9\x11\x80\x65\xd5\x9e" "\xbe\x12\x07\xb9\xd7\x62`\xfa\xa4i\xb8\xc5s\xbf\xe5\x42\x18\xe7\t\x62\x9f\xce[\x10\xa4={\xc8`\x45\x9f\x01\n\xb7L\xba\x89\xd3\xbcH" "<\x99g\xa3\xc0\?\xe0\xd3\xba\xad\x05-\xdc\xed/@-\xc2\xba\xf3\xcf\x42\xef\x84u\x17\xbe\x8b\xde\xedL\xc9\x30\x02\xdc\x83\xa1\xf2\xe0\xeb" "h\x90\x36\xd1\rw\xa0\x41\x9e\xc5\x17\x00\x04\xb5{\x06\xe2MG\xab\x43\x84\xfa\x07\xdf\x46;\xea\x86\x1dn\x99\xf6\x89\x43#\x9e\x7f\xfd\x05" "\xc7\x11\x11I\xf4\x10':\xcckk\xd3\xc0\xa2\xaa\x86\x30\xdeg\x08\xc0\xd3\xf9\x32\xc6\xeb\xe0\x38\xda\xe1\xb9\x35\x14\x66\x1d\xec\xf7QX/\xf2\xb4\x32zU\x36\x8c\xab)\x33Xi\xd8\x9aN[\x8e\xc6h\x8d" "\x8e\xd4\x0e\x1bn\x31W\x00\x36,n\xd1u\xd8\x9b\xee\xf7\xfe\r\x65\x06\r\x0f\tm^\x37\x83\xc2\x39\x05\xc2\x91\xb2\x19\x01;\xbfu<" "\x1f\x43\xe5\x0b\x38_\xc2\x30\xcc\x33m\x8b\xe9\xe1\x05\xb4L\xbb\xe0\xa5]\xc0:\x8b\x03\x9c\xb2;\x35q\xe6{\x7f\x1a\xed\x30&\xbc\x08\xed" "P\x94\x83\x8f\x43p\x66w\xb8+>\x80\xbe\x46\x0c\x1a\x1c\xfc\xeayh\xb9(\x8b\xe2\xd8\xf9\xad\x63\x01\x9fx\x95\x1f\x44\x83L\xe7\?\x86" "\xbe\xccX\x7f\xa4ov\x04\xabz\r-\x10\x37\x36\x1c\xa3\x99U\x1b\xaa\xfa\xc9\xb4r]\x92\x08\xc5\x0b\xeen\x00\x9c\xf5Q\xff\x8cZ\x34" "\x8c'\x87(\xcc\xc7\xfa\xd7P\x46/\x98\xb8\x45\xc6\xde\xe7\xa1/}\x1c\x39`\x37\xb6\xfb~\x0b\xb5\xd4\x9b\x37\xdc\x32r\x1a\xa7u\xffI" "\x08\xf2\xe2\x0e\xb7\x8a\xea\x1aH\x33`\xef\xb5[\x06\x31\x0c>=\xc1\x15\x98\x87[t\x64\xc6\x85u\x8d\xd7\xd4\xcal\xda\n\xea\xd5\xb0V" "\x8e_#\xba\x19]\x90\x97\xf2W\x7f\x03]\xd8\xfb_\xbb\x34\xaf\xb7\x7f\x15\xedX\xe0\x38vu\xeb\xf8\x01\x1a\xa4\x31\xdf\x9b\x43u\xa6\?" "_\x46u\xb6\x0f\x12&\x98|\xb1K\x64\xf9' \xc7\xb1\xcb\x1c=\x30t\xc4\x18\x45TT\xfd{\xc3-S\xbc\xe4T\x61\x12\xc6\xd7\xaf" "`\x9f\xdbV\xce\xfc\xde\xb7l\x17\xb0\x17\xdc\xe3\xff'z\xa7y}\xe2\xe7QX\x39|'\xbes\x34\x66\xbe;\xf9\xcf\xe8T\x97\xa9\x95" "\xd9\x91\xea\xd1\x91\?\x85\xf9(\x19\x43;\x97\x0c\xbc\x0c\x16\xa2\x90\xb4\x41:o\xc2'\x1e\xea\xd7\xf1I\xf5\xa2n^/\x1f\x85\xbb\xfd\x02" "y'\xb1\xfb\xa8\x41\x35\x88\x04\xeb\x1a''\x14'\xbag\xa3\x96\x11\xe1]\x9e\xe0\xbd\x18\x86^v\x0e\xd8\x1d\x8e\xde\x14`\x97\xb9gV" "\x31\x66\x1a\xc6U\x37\xa3\x1d}\x45\xd1-\xaa\x9b\xa8[\xb6g+\x0fx\x17\x10\xf5+H\x17\x01\xbb\xbau$\x01\x31\x46\x9bW\xa0\xc1]" "\xeb\x94\x30\xfc\x1a\x30\x66\x8b<\x9e\x8b\xa8\x45G\xff\x87\xbe\x89Z\x0bR\xb8\x95\x63T\xffK\xd4\xa2\x10\xaf\xd7\xbc\x1f]\xd8\x43\xc3G\x16" "\x8d\x8d\xfd\xd0:\?\x84\xc2\xe3\x06\x31\xe3\xa8\xc5\xf9\xed\xf7QK\x35\xdb\xad\x1c\xe3\xf3\xabP\xc6\x62\xc5\xb0\x8b\xda\xe3\xc0o\x1c\xf1\xa2\x10" "\x1d+I\xef\xc1\xba\x45v\xcdX\x94\x83\xdc\xa4\x61\x82\x85\xbe\x11W\x37\x9c\xef\x14\x61\xaf\xe3\xf9\xef\x43\x83v'\xf4\xa0\xae\x90_\xd5\xcb" "\xa1\xe1\xaer\x17\x8e\xc3\xe8u>\x11\x65x\xe1\x9e\x8a\x32\x15I\x44I}\xfd\x39X\xd7\xfbq\xad\x9c=j\xc3\x1enO\xc4q#\x1e" "n\xf7\xa2\x1d\x9e\xc5\xa7\xd0)\x0f\xe3#hG\x99\xb7@|\xd5\x9e\x82\xc1\x9b\x00\x9eS\x1e\xdb\xb1\x63[\xe7\x8f\x61\xca\x8cZ\x9f\x44\xa7" "z\xd0\x07\xe2\xab\x46\x80\x62l\xb9\x15\x9d\x12\x62_\xf9\rt\n\xc4>\xff\x85\xcf\xa1:\x9d \x1d\t|J\xdbZh\x44\xdf`}M" "j\x05\xec\xbdv\xfd\x1f\xa0\xf7\x9c\x0e#\xc7\x0c\x30\xf6\xf2.M\xe7\x1ej'\xa1s\x17\xa7\x35l\x61vZ#\xe9/\xa3^\x94\xad\x1c" "!\xdbUt\xea\xa9\x08\x1c\x1d\xe9\xb5\x94(\xa9\"g@Nk\x9d\x7f\xff;\xa8\xce\x38\x0f\xd9*S\xb0\xea\x8c~\x1f\xc6P\xb3V]" "\x43T\x85\xf1\x9c!\xc9\xact\xea\x16\xd3\xb2\xa6N\x1c\xd2\xde\x8e\xc2\xfa\xd4]\x94\xbc\xa8\x8b\xc2.j\x1f\xfe)T\xcf\x1b\x02\xa8\xed\xcf" "q@\xbcsw\xa3\x96\x9a\xa2\x9c\x44\xab{\x08\xb5x\xa8y\x0cU\xafl\x07\x9b\xea\xa0\xd2\xca\x94m\xa8\xe6\xa5\xbcK\xc8\x7f#\x84\xc7" "\x45\xbb\x32\xb0n\xb2p\x8eQ\xe2\x36\xf4N\x38\xff\xf8\x0f\xa3\xaf\x03\x1b\xd8\x90-\x1c\xaf\xfb;P\x86\xd0\xf8\xd6\xcf\xe0\xd3\xb0\x8dG\xbd" "\xee\x83u\x35\xdf\xb7\x32\x44\x9a~\xfb\xcb\xa8\x45\xc8\x7f\xee\x95\xa8U\x16\xfci\x15\xba\x04[\x02v\?#\x12'\x0ei\xff\x0b\xb5\x34\xf4" "M+\xc7\xcb\xfd\xc3\xa8\xc5w\x15\xff\x04\xb5\xd4\x13>\xdcU\xecu\x1c\xb6\xae#\x44u\x8e\x0f\xf0&\x34h\x0fT\xed\xf2P\xdf\x8a\x32" "\xaaPr\xec\xabv\xfeu\x98\x17/\x37x\xe3u\xd3\x82\x66\xf8\x06\x04j\xb1\x8b\xda\x15/\x46u}>\xd5\x91\x8bZg\x7f\x05\xb5R" "\x06(}Y>\x8c\xdb-\x92]\x1a\xea+\xc0\xc1\x1eY@\xceu\xf5\x93\t\x36y\x37\xbd\x1b\xb5\x34Pv\xab\xd0\xaf\xeb~\x94\x31\xd0" "\xd1P;\xbe\x88Z\xe6\x99\xb6i\xa4`w]\x1at\xcb\xec\x87\x8f]\x19\x63\xd0\xfd\x08\xd0\x66\xc6V\xd0\x42\xb7mj\x44\xa9p_\x35" "onY_\xc2u\x31\xbb\x44\xb0\xa9\x1a\xceVn\xc7Z^\xa7kv\x1f\x43;<\x9e\x43\x94\xe1K\x8b\x0f\xa1w}\xaa\xcc-Z\xa4" "\xac#u*\x0e\xd9\x33\xed\xfc\x14\xaa\xd3It\x1e,\x96\x38\xa4\xbd\x07\x13\x1c\xb6\x65\xe2g\x19\x01\xf9\x45\x0b\xc5\xb3\xaf\xae\xd1n\x99\x61" "\xf8'h\xd0^\x1cNj\xe0\xc1@<\xd3\x9e\x86v\xec\xe1\x1b\xf1\x43\xc3\t+~h\xd7\xa3\x96\xe9\xbe\x92\xcc\x0c\xdc\x86Z\xbc\x65\xee" "\xc7\xe0\xd9i\xff\xa5\xe8\x9d&H\x37\x88\x97yS\x17P\x46\xc3\x02\x04\xecu\x46\x0f\xdc\xe7\x0e\x04\x37Z\x05S\xb0\x8b\?\xdb.:\xd5" "p\xdfN\xe2\xce\xbd\x0b\xbd\xd3\xe0\x7f\xe6\xf3\xf8\xc4\x03\xc3\x91tT\xb1\x31\x63<\xe7\x17~\x11\xd5\xf9\xe6/\xf6\xfb\xb2\x45l\x8b\xd9\xbb" "\xdbGz\r\?XW\xe3]+g/\x1f\x15&\x64^\xe1\xae\xee\xb8p\xf7Pq\x83\xdd\xcf\x1e\xf7\x15TW\x8f\xdf\x80\x9d\xc4\xc2\xef" "_\x88\xd2\x8c\t}\x98\x8e^Zt\xb1\x11\xeb\xcb\x9e\xbcO\x9awV\xba\x9b\x42\xbc|\x0b-\xabj\xc8\xc5,\x0c\xfe\xbay\x05\xa7\x99" "\x42\x62\x0b\xb3\x8f\x19\xb1\x61\xbb\x16\xb8r\x99\xc7\xf3\x00j\xf1Y\xf0\x0fh\x99\x08\xe3\xcduTW\x0f\xff(M\x14\xf2\x1f\xbf\x89y\xa9" "\x0fy\xb8\x9b\xb4\x15\x9c\xb2\x15\xe4\xbb\xf6\xef\x46u\x42\x80\xd7\xfe+\xaa\xd7\xc8\xa2\xf5\x45Tg\xdf\x83o\x00\x1a\xcaZ\x87\xbb\x84\xd8o" "%\x1c\xa3\x61\xfc\xf5\x17P\x9d\x01\xf5zTW\x03V\xc0~hW\?\x80\xea\x84\x1b\xcf\xfe\xb3\x0b\xc1\xb6\xc6\xf6\twi\x33\xba\x97\xa3" "\xba\xdd\xf4g\xf7\xb3\xdfJ\xa3\xfa\x36)\x41\xef\x43u\x8e\xb4\xf6O\xa8\xce\xaf:\xd2\xdc\xd7\x05\xa3Z\x05\xbd\xc3\xd2*\xa8G}\xb8o" "<\x7fl\xca\xc0\xcb\x8fK>\x82\xea\x83\xd2i\xb0i\xb6\xe3\\\x41\xe1\xcc^g\x9d\x7f\x8dZ\xaa\x99\x0c\xd8\xc7\xac\x13T\x62\x9b\xf7\xe9" "s\xd1\x85\x85\xac\xd9\x37\xfeG<\xca~\x15]\xb0\xf8\xf6/\xe8\x82v\xc1\x0f\xc0\x04nj\xcc\x90\x80=\xca\x9e\xb2\x8f\xbet;\xb4\n" "&\xd9\xed\xd3\x98\xaf\xfd\x05Tg<\x04\xb3$\x8e\x64\x38\xbb\xc5\x7f\xec\xa3(lq\x38\xf7\x17\x64\x82Q\x92\xd8\x8c\xbd\x87\xd1\x17\x61\xdd" "k\x1e@\x61u\xado\xe5\xca\x86\xab\xcb\xb6\xb8\xe6\x1d\x41.\x61W\xfc\xc4\x0c\xaa\x03\xf9;/n\xa0:\xe1\xe1m\xc0\x8dMrq\xbc" "\xe9\x35hG\xcf\xb8V\xce\xae\xa5\xec*Y\x0e\xf7y\x18\xc4U*_\xe7\x62\x34\xf8\x8f\xa5\xd0 \x1b\x88\x7f\x0e\r\x32\xae\xfe\x08\x1a\x64" "\x85\xe4\xff@;& \xec\xea\xfd\xafp\xdf\x14&I\xc6\xd5O\xa0\x16\xe1\xea\x95\xb7\xa3\x16\x1dIW\xcf`\x18\xba\xa9[\x39\x8b\xde\xb9" "\xcf\xa8\x0e\x86*M\x98\xf9\xc4\x17\xa2\xb0:j\x06\xe2H\x86\x13\?gGR\x81w\xd3K\xd0\xa9\xb9W-{\x42\x44(\xfa!\x1a*" "\xa3\xe8_\xa1\x1d\x8b\x41\xba\xedi\x0b\x8d\xf9m\xa0-\xe2\x36\x06\xfe\x90\xdd\xc6.\x8c\xa0z\x92|j>\x8b\xea\x84\xa2\xd7\x1e\xa1\xba\x9e" "M\xc1\x36\xcd\xe2\x8eU\x0c\x43\xa9h\xab\xd8k\xab\xbc\x66KP\x16\x44\n\x0f\xf5-\x36'\xc1\xeeV\xd0\x32\x36\xd1U_\xff\x1eZ\x66" "\xa4\xfd\xff\xd1\xb2\xbe\x03\x1e\xb0\xff\xd8\xb9\x17\x61`,\x1d\xaf\xa1\x1d\x9a\xd7\x8b\xbf\x83\xea\x04\x96[\xc1\xdc&\x81\xbd\x9d\?\xf4iTg" "\xec\xfdMT\xa7\x99^\x0f\x32(\xde\x62\x0f\x62=\x42\x83\xeb\x34\xe4\xcf\xa2\x41&\x83\xb4w\xf2\x32\xe5(\xcd\xbb\xf2\xe3hGoI\x38\x89\x95\xf7" "\x11\xd4\xa2\xfd~g\x11\xb5hQ\x9e\xf0\x16\xd4\x62\x34\xbe\x1f\xb5\x98n\xbc\x1f\xc3\xb0G%\xd8m\x8c\x84\xbe\x82\xbd\xd4Y`\x64#:" "\xbfi\xb3\xa0mu\xddkQ\x9dv\xe5\xd5\x11\xaa\xf3\x43\xe7\?\x8b\xea\x1a@\xa3UT\xcc\x8c\x92\xfc\xbcl/\n\xf3+'\xef@\xe1" "\xbc!\xc9\xa8\x15\x1e\x93\x99\x86\xfb\x1a\xc8\xd7\xc5\x88\x14\xdct\x15\xc6\xcc\xa4\x80\xd8\xdd\x12\x85\xf1\x9cG;\x1c\xc0p\x1b\xed\xd0,\xae\xfc" "\xbf\xd0\xe9\xbc\xf4\xd5*\xd8m\xc1\x35}& J\xb2\xbb\xf2\x97P\x8b\x43\x1a>\x0c\xf4\x1b!\xa3\xd0O\xa1\x0b\xa2Zw\xfd+\xca\x00" "\xa3:\xbf\x03:\x96&\x8cz\x12\x8e\xf5\xa2Z\x66\xa3\xb4\x9a\x8c[\x45\xd3\xff\x88+\xd7KQ\x8b\xdfw\x00\x43\x95^\x15\x80G\xd9." "\x41\xecVQ\xef[\x85\xfbGV\x8b\x61x;\x06\xc6:\x87\x1a\xaa\x13>_[@u\xde \xff\x1d\xd5\xd5\x39\xb9U\x9cR\x44\x62\xc7" "\xad;\xbe\x81Z\x1a>\x31J\x12&\xb4h:\x84\t\x44\x13\xb2\x1cl\xf3\xc5\x98;_\xb3\"`^\x92\x65\n\xf7\xf5i\x66'\xae\\" "\xb7\xa0:_\xaa*\xa1:\x1f\x01\xf7\xa1\x96\nG!{pu|\x12}\x91\x87\xe4\xdf\x11\x85\xc4r\x9f\x7f\xc1{\x01g\xbd\x62\x16\x65" "-\x46\xe2~\xda\xe6\xa5\x0f\xbb\x38q\xd3\xba\x11\xb5\x88\xf2\xdf\x38\x87\xc2\xaa\xfc\x0c\xc4_\xeb^\xf4\x65\xcf\x83\x16\xd5\xd3 \xdc\x37\xf6R" "\xbc\xb3h\x33\xd2\xba\x9f\x7f\x03:U\xa7\xeb(k\xbe\xc4\xdb\xeb\x9a`\xbf\xafh\x07\r\xda\x65\xc3X\xca\xf0\x99\x19!l\xe1\x1d\x0bL" "](\x18T\x17\xac\xafK\xd6\x17!\xc0\x13\xa6P\x98\xe6u\xee>\x8c\x87\x1a\xbc\xee\x12\xa0\xc1\x62\xd7\xb7\xd1r\x46\xba\x88\xd2\x8c\x99_" "\xc3x\x98Y\x82\x04\xb4\xaf\x66/\x17S\r\x83\x63\x17\xac'>\x88\xa1\xaa}\x30`\x7f\xad\x8e;\x30\x0c{\x39\xb4\xb8,\xc3\x08\xc9\x17" "\xab\xa3\xb7\x84\xbe\x16\x0c\x98\x0c\x9f_\x44;\x1am>J\x13\xb2=\t\x98\x99\xb5{\x9a\xdbzo\"\xd8\x61\x0c\x7f\x05Z\x36w\x65v" "\xd3\xba+\x86\x06\xb1\xd1\xae\xfa\xca\xd3\xd1\xa0\xda/\xa2\x34\xdf\x94\xfc\x00j]\xd4Z\x45\x0b>\xb3o\x37\xd9\x63<\x1d\xda\xa7|(l" "\xa1S\xc2\xba\xdb\xce\xa1\x16O\x99pL\x1f+l\x15\x63\x86\x63\xd4\xfb\xbd\x7f\x80\xea\xca$\xbb\x35{\x02)}h\x90\x37\x9f\x64\xf2\xd7" "\xea\xa8\xfe\xc3\x85V\xd9\x1c\x81\x38\xa2]\x07$\xa0\x35\x65\x92\xa3\x34m\x99\xeb\xfe;\xfa\xd2\x08\x0f\xad\xa2\x06+\x0b\xd9_\x8b\xb6y\x99" "\xdf\xdd\xfe\x0c\n\x13\xfa]\xf9\x97\x18\xaa\x46\xc0\x08\xb6U]\xdc*\x13\x02t~\x11\xd0`\xa9\xe4\xce\x0b\x61\xa2K\xe1\xbc\xa6\x8e\xd0Q" "\xda\x64\xea\xac\xdd\xd9\xdfQ\xfb`\xab\xd0\xb4\xc1\xeb\r\xd0(\xab\xc6\x85V\x99w\x41\x1fZ\xa6\x81\x9d\xbc\x02\xedp\x34\x9b\x97\xa0\xba\x05" "\xd3.\xea\xeb\x00\xad\xe2\x96-\xb7Z\xf1Z\x65\xda\x17\x37\xfe\x11\xaa\xaf\xe3\xc3\xf7\x46\x31\x1e\xf3\x86J\xdb\xbd\xfe\xac\xfa\x42\x04\xec\xc1\xd5" "\xf1\x0cT\xa7\xf1|\xe0\x16T\xe7\xed\xf0\xa3\x00\x1d\x43\x03\x1b-M(\xfa\xfc\xff\x07\xbd\xdb\x35\xcf\xa2=\xa4R\x1e\xb4\xc5\xd5\xf8\x1b\x61" "\xa2\xcfV\x87\xef&/\xa1/\x0b\xb0\xb6\xad\xe1h\x82\x1d\x9e\xe9\xad\xa8\xce\xd8r\x0b\x86\xca:\xe1u\xb4S\x97\xc2\x61\x42%\x44\xc7\xb1" "\xf2^\xf8\xe3h\xd0^\xd7\xca\x9a*\x8f\x9d\xbb^y\x15\xda\x61\x9b\xc2\x9bP\x18S\xbe\xe2\xdc](L\x98y\xf5\x08\xfa\x9a\x36\xb0\xb0" "+{\x0f\xfa\xe2\xc1\xff\x30\xca\x14\xa4\xf7(\xab\x31H\x83\xed\xac\x0c,\xd8\x61W\xc0\xdf\xc2L-\x10\xd9!\xed\x8b\x87_\x87\x81\x99\xf8" "\xb6\xa6\x91\xb2\xa2\x34\x63\xe6[\xd1\x0e\x63\xe6\xcb\xd0\x0e\x0f\xf5\x99h\x87\x86z\xfe\x93hGM\x12\xad\x32S\xda\x1b\xd1 \xcb\x9e`\xd1" "\x13\x17\rm\xb6\x0ct\x45\x03\x9d\xd9\\\xb6\xf3\x06:>\x85\xb1\xbf\xca\x66\"!\xc7\xad\xce\xc2\x87P\x9d\xe7\x05!\"\xbb\x64\xb5\n\x86" "u\xf6\xac\x43\x99\xf1\xe7&\xd4\xe2\xfd\xfes\xa8\xc5\xfb\xfd\x05\xe8T\xfd.Z\x45=SZ\x65\xc2\xf9k\xfe\x12\x85\xe9L\xb9u\xee\x82" "\xdb\x30O\xa7\xec\x8a,w \xfeZ\x90=w\x34\x04\\\xabh\x16\r\xf1\xd7\xfa\x18\xba\x30\x0fm\xf3\xd7\x8a\xd2U\x1b\xa1:`\x04;" "K\x82u\xad\xa2]\x9a\x16\xef,\x42~}\xec \xd8V\x03h\x94\xef\xa2\xc4'Q\x8bi\xdd\x10\x86\xca\x18\x45{\xd0L\xeak\xea\x98" "\x1d\xa5\xf5\xc6\\\xb0\x43\x63~\xce/\xa1\xb0\x06\xb5\x08\xd9;\xeb\xaaU\xd4\xe2\xdd\xfd\xcf\x18!\x8d\xf9\x1c\x44\xf2t\xc3pLy\xec(" "\xdf\x63+h/,\x1c\xea\xab\xbb\x61\x82]\n\xc1Gm\xd8\xa3\xc6\xdb\x36\xe6\x1d\xd3y\xeeuYu{\xd5\xe8P=\x1b\x43v\xdc\xea" "|\x04\x63V\x1f\x33\xb7\x31n\xed\xf0\xe0oG-\xc6\xf9'\xa0\x30\r\xfe\t\x90\x14\xd6,\x9cH\xd6|w\xb3\xdb\x02\xbaV\x99\x91\x04" "\x42\xc4\x9a\x1e\xd0Q^Ml\xc1\xce:%p\x88\x97\x19%\x1e@\x83\x18O\xc7\xb5q\x14N\xd9\x32\xd1xn\xb8\x1d\r\xda\x9b\xa4\xdb" "L\xac\xd6P]\x03*\xb6\x8aj\xa3o\x95\xd5!\x36\x10\xa7\xac\xa7\xe2\xd3\xb1@\xbeU,\xdax\x18\x37\xeeG_\x34\xb0\x0f_@_" "\xe6\x0f\xb0\x61\xe1\x0e\xf2\xea\xf5\x11\x88S\x16\x11\xd8%\xe9\xcb\xad\xa9\xdb\xa1\xdb \xd0\xdd\xf7\x39\x94\xb1\xf7\x14\xf6T\x31\x1e&,\x88\xe8" "Z\xceZ\xb6w\x8awx\x16\x10K\xf7\xec\t\xec\x32\x63\xef\x87\xb0\x04\xfa\x9c\xa2[\xb3W\x80\xf7.\n\x30[\x45\xd5T\xb4\xca\xf6J" "i\x82\xc7\xf3<\x14\xe6\xb9\x7f\x15-[\x00\xd5={\xf0\xa8\xbc\xaa\x33%_\xac\x8e\xcf\xbc\xe5\x42\xab\xca\xeb\x8e\xc3%\xc1\xb7\?\xde\x8b" "\xeav\x90mp\xf4\x18\x9a\x32\x13\x99\x8f\xa0\x1d\xa6Q\xef\x46;\x1a!-\x64\x7f\xad\x8e\xef\xa2\xba\x45\x1e\xd8\xb0\x1b|;\x46R\x8a&" "\x9a\x95yq\xef\x46-\x1b|U=y\xc2\x04\xcd\xe2\xf1t\x16\xf0KL\x38\"\x8b\r\x83\x06\xaf\xe9\x1d\xf8\x44\xfb\xeb\x1e\x42\x00\xbb\xfa" "\xbd\xc3{\x10\xf2\xe0\xde\x98\xad\xbb\x86\x05h\x95\x99\xfa=\x19}\xb1;\xee\xab\xd0\x17=\x01\xf0\xae\xcf]\x08S|\xf8\xfe\x30\xaa\xab\x37" "\x42\xab\xcck\xfa,\x0c\x83\x46x\xe5!\xfa\xa2\x93\xfa\x35K(\xc3h\x0c\x1e{o\xc2\n\xd3\xe2\xde\xf0\xefh\x99\xfaz|\x01\xb5\xcc" "\xd0\xb3\x66\x8e\x13\x1b\x31\x43\?\xd5\x36;q\xd3z\x37>\xd1\x12<\xf8|\xb4l\xba\xca\x32Q\xda\xce\xb7\x63\x84\x16\xdd\"\xa1\xf1\x9a\xdc" "\x9a\xea\x88\x1c{p\xdd\x01\x9e-o\xaf'\xec(\x0b\xda*\xf3*\xff<\xaa\xf3*\xff\x15\xaa\xab\x1a!\x14\xa7\xac\x02\xaa[\xa4\x91\x9d" "\x8cu\xba\xa7\xf0I\xc4\x15\x01R\x84~_\xf8\x0e\xb6\x95z\xd4\x07{\xe6\x46[\xde\xb7NM#\xbd\xc7\xc3\xc8\xa3\xba\x1a\xb0\xdc\x86\x1e" "\xf4\xad\x32s \xf7\xa0S>\"!\x9a\xe5-\xc0\xf5\x0e\x87\xac\xc1\x01\xb4\xc7\x14\x00\x9b\xb1\xcc+\x98\xc5\xe0y\x05_\x83Z\x03\x92\x08" "v\n\x32\x8b`\xcf\x9c\x81\xcb\xbc^\xbf\x83\xc2\x44\x7fn\xbd\x0b\x63\x1e\x96uw\x1b\n\xe7([\x36\xdc\x38\xb6Y,\x18\"\xd1R\x9e" "\x03m\xa9\xd2R^;\x8e\xc1\xef\xeb\xc2m\xe9\xc1\x11\xec\xf0\xd1\xf6Y\x94\x31\xedn\x8a\x8f\x89\xdbP\xc6\x94\x84yZ\xdcW\x7f\x18\r" "\xa6\x64\x84\xad*Q\xa4\x7f\xfbs\x0c\x43\xef\xef\x44yZ\xe5\x1b\xd3h\xd0\x1c\x62\x8f\xbbl<\x8a\xbd\x61\xcan\x88\xe4i\x37\x1d\x80\x1f" ";\xa6U\xbe\xe1\xf3h\x99\x16\xf7]\xfb\x18\xa1\xc5\x9c\xc9\xaa\x43H\xb0\x43\x38\x46\xbc\xd6\x9e\xc6\xb5nU\x8d\xe0'\x98\x9c\xde\x8c\x61\x10" "T\x9f\x8d\xb3)\xcf\xceo\xdf\x44-#\xf8\x07\x34\x8c\x0e\x08\xaa;u[\xaf\xac\xcd\x82\x97\xfbW\x30\x30\x16\x85\xc0u\xe7\xd9J\x0e\xa8" "\x1e\xf7I_\xc1\x1e\xc7\xb5~\x0ej\xa9\xdd\xbcU\xf5\x94_\xf5\xeaN\\\xc2\xee\x02\xc4\x34\x0e\x43\x94'\xdcH\xc6\xd0\xa9\xbe\x96\x12\x1d" "\x03\x37:\xee|\x37\x1a\\\xd7\xc5\xad\xce\x19\x42\xb2\x19\xe5\x1f\x30\x0c\x9e\xd7GP\x9d\xf0\xf9\xb5\xbf\x88\xc2\xfc\x42\xd9\x0b\x30\x0b\xd3\xae\xa4" "\xd4\x9f$L\xd8\xf3\x34\x1b\xfa\x12\xa5\x93\xe8p\x84~\x84\x1bk\xbb\xc8\xb9\xa4S\xae\x12J\xbc\x61\r\xb5\x34\x16n\x98\xd2\xb7\t\xa2<" "\xab\xf2\xde\x83.x\xca\xb7\xa0\xc1\x8cu\xa1!\x8f\xa2<\xed\xb8\x1f\x7f\x36\x66\x61\xaf\xed\x1c\xd8=\xcd\xaa\xe9\xeb\xc4I\xec\xc3\xe8T\xc3" "\x46\x45y\xc2\x8d\xafL\xa3\x16!\xedo\xfe)\n\xb3H\xfe&\x14\x36\xe7\xdb\x94\xbd\x92#\xc1\xdc>\x80Z\x84\xa2O\xbe\x12\xb5\x88\xc9" "y\xcao\x00\x08\xea\x03\x13\x1c\x0cZ\xa7L{\xef\x41;\xfc^\t\x81\x85w\xdc}\x18|\xde\x1a\xd4h$Q\x9e\xb6\xe7\xed}h\xd0" "\xdc\xf3\xf6\x34xu\xab\xca\x36\x0e:\xf1K\x92\x13\xa6,\xbaW\x9e\x83\x33\x7f\x03\xb5,T\xf5\x9e\xbe\x12\x18&\x08\xc3\x9f\x91\xb9\xd0\xaa" "w\xc9\x30\xdc\x86\xfa\xbc\x05{\xbc\x1d^\x8evV\x0c\xf2j\xech\xd5\x99\x08\xff=Z\xa6M}\xd5+\xd1\xb2Zo[\xe5\x86!$" "\xe3\xc6;P\xb8\xc7\xe0\xc3\x38\x8f\xa3\?O\x38\xf6\xce\x37\xa3\xd6\x84\x0c\x35\xd8\xa3y=\x08\xde\xf8`T\x06\xd6*\x13}~\xca\xdb\xd0" "\x8e\xe9{\xeb\x16\xbb&\x65\x12\x99\xf8\xaa\xdd\x00\xf8\x98\x66\x32\x9f\x14 \x44\xc7L\x01>\x81\x06-\x1eu\xdd\xc2G\xa7x\x16O\xc1L" "+\xb2\x04!{\xaf\xd1\x43\x45y\x42\xbf\xa7\x82\x43;\x36\xf7\x86\x03\x0b\x43\xcdNkO\xa2\xa3_\xa5H\xb7\xa5&\xda(O{\xe7\x1a" "\xcc\xeb\x98Q\xf4\xe9\x18\x33\xd3p\x1c\x9au\x15\xff\xc3\x14\xcd\xa2\x83\x10\x89\x10\xf2\xc6o\xa3\xb0\xf9\xc0\x1c\xf0P_\x83Zq\x99N\x98" "RU\x95\x13_\x35\xf0\xb4y\xde \x1f\x45-\xd5\x90\x07{\x16\x88\xec@\xf5-\xad\xea\x8e\xcd\xd4N\xa2\x94:+\xba\r}'\"\xcc" "\x30\xaa\xdf\x84\x96-L\x41\xde\xde\\\x38\xb0\x80\x9cU\xc6\x8d\x9f@;\x1a\xe9\xc8\xb1\?[\xc7\xf7Q\x8b\x97\xf2\xed\xa8\x45\x98\xf9\xc1*" "\xc6\xc3\x98y\x17\xc6\x43\xf3\xba\x61\x0c\xedX\x9c\x93\x94\x39\xe8nh\xb0\x85\x30\x63\x61\x64\xf2\xb4\xbf\x0e\x66PK_\xa8\x0f\x0e\x88Q\xdc" "\xfe\x0b\xf4\xceT\x1d\xa7y\xca\x9e\xc9\xce\xe8t\x1c\xfb\xb3u\xbe\x04\xd5U\x31\x1e\x1c(\xf9rq\xbd;\xd9\xaaj$\x8dV]\xb5s" "\x61jW\xa1\x91\xe1\xe9\x80&lY\x08\x9d<\xed\xb8\xabn\xc7\x30\xf2\xd6\xa0n\xb4V\xd5\xdex\xaa\xeb\xd5]\xb7\xc5\x61\x84\xff\x10\xb5" "\x38\xcc\xc5\xfd\xa8\x45\xb3\x38\xdf\x8bZ\xf3\x32\xaf\x30\x65O\xbe\x9a\xcf\x9b#W\xb7\x8e\xbb\xfe_\xd4\"\x9e\xedn\x88]\xc7\xcb\x06g=" "\x1d\x1c{\xb8=\xb8\x8d\x32\x84\x90\x0f\x12\xc5\xd6w\x8a\x83\x83%\x9b\x97\xf9\x90\xd7\t[^\x00I\x33\xa5\xaf\x93\xb8\xad]\xeb\x8b&x" "k\x03\xed\xf0)\x43x\xc8\x8f\x89<\x0b\xb5,\xb6\x46\x8a\xe7u/\x46H\xf3\xba\x30\x81\xea<\x66\xd0\xde\xb8\x8e\x39\xca\xd3q\xf3\xa4\xf7" "]\x88J]\x82\?\xc1\x81\xfa\x82\xb6\xaai[\x0b\"h\xf7>\x1f\x85\xd5M\":\xa6m\xf5\xb8\xff\x86\x1c\xc2\x96\xab'\x90\xb3\xae\xd5" "\xf7\xec\xed\xbcR\x8f\xce\xeb\xa8K\x17\x37\x45\xf3z\xcb>\x86\x41Q\x05\xea\xaf\x46u\xc2\x96kOP\xdd\x62M\xef\x99\x06\xaf\xa4q\xe3" "\x83\x03\xb3\x1d\xb3;\\\xc7\xdd\x18\x0fk\xda\x7f\x1b\x85Y\xd3\x0e`\x96\xcc)\xe2H\xe9O\xab\xaa\x1a\xbc\x30\xa5\x9a\n\xc7~q\x9f\xf8" "W\xf4\x45(\xf1\xc5\x00\xd5\xed\x8c+\xb1\xeb\xf8\xef\xa1\xafu\x1b\xb3\xd2\x9fV\xdd\"W\xa4\xf8p\x01\xf7\x95\xd1\x97\xe5\xdd\x16M\xe7\xee" "\x9f@;\x16\x44\xb4\x34`\xa8\x65\xd2MU\x8d\xa4\x61J\x1f\xa7\x08\x33jhv\xecVw\xd3\xc7\x30\x1e\xe3\x88J&V\xd4\xed\x41\xd5" "-\x0c\xbe#\xf5UTW\x45\xb4\x8bkh\xc4\xe8\xd8\x82\x64\x96\x18\xd5\xdf\x82\x96\xe7m\xbd\xa8\x8b\xa7\xfd\x34>\xf1*\xd3)lW\x1d" "\xab\xcc\xe4\xdc\x85.\x96\x65\x84\x8e\xdd\xean\xfa\x37\xd4\xe2+\xff\x38\xb6\x0ex<\xa0\x36G\xea\xe2\xd8\xaa\xda\x63=)\x66\xba^\x8fZ" "y\x9b\x05\xc1\xe7\xbd\xa3\x18\x8f\xba\xbbG%~\xed\xb4\x13\xed\xec\xd8\xa2\xf0\x08\x89\xef\xd5'\?Zu\x8b\x11-\xcex\xd8M\x99%[" "&\x9a\xc5\xe7\xbe\x85\x06\xcd\x89\xae\x34\x66\x83W\xa3m\xab\xbej\xd5\xd5w.\xcc\xa8K\x86\xe3 u\xd7\xfe*\xda\x61\x18\xfe\x08\xda\xb1" "\x07\xb8\x0f\xcc\x07\xef\xc8,\xce\xc7\t\x43\x00\xc2\x8d\xfb\xff\t\x65\x94\x7fnU\x19\x37\xde\x8c.LR\xd8\xe2\xa1~\x02-\xb3V\xff\xad" "\xc8\xe1\xeb\x90\x1f\x44;v\xfd\x30\xa5\x9a\xc0\x30\xa7$\xd7\x89\x9f\xde\xcd(\x63\xb7qK\xfa(@p@\x03\xbb\xf2\x9fP\x8b\xfbz\x17" ">]\xb2\xa1\xaa\xa5\x38\x38\xd2w\xe8Zu\x15T\xc3TS[\x66\xb7:\x62\x84\x8e\x33\x86\?\xfa\xa0\x61TR^\xabU\x8f+J\xec" "Z$\x84\x0c\xd3\xc3;\x31\x42{\x1d\xfb\x98\x10\xa0\xb8\x83Z\xea\xc3\x19\x88\x7f\x1d\xba\xd8j\x18\x46\xad_!\x01\x07\x8ei\xdd\xcf\x83," "\x97\xd4\x9e\xeb$\xca\x1c\xc4\x8a-\xbd\xee\x17\xe6L\x95'nu\xd8\xcb\xc7\x05\x9b\xbb>\xfc\x17\x66\xd4_\"\xcc)\x8e\x39\xf6\x9d;_" "\x41\x61\x8b\xc9\\\xd2]\x10\x1d\xab\xf8\x1f\x66\x14\xe7\xdd\xae\r\xbe\x64z\xad\x03}\x86\x35\x38\x32\x0bK]\x95\xba\x61\x8ev\xc1}\xaf\x45" "-\xda\x9ew<\x03\r\x96\xa4pT\xb2 \xe1G\xdaW\x98\x1b\xb1\xf1\x10\xe8\xee\xdb\x42-\x9dNtl\xa1\x98Kv\x13\xf0\xc0\xd8\xa7" "#{\x0fq\xd7\xf4Z\xc7\xbc\x65>\x89\xc2\xfa\x46Op\xa0\x41\xd8\x82#UG\xb4\xeaI\xc3\x16\x33\x9a\x94\x98\xaf{\x1a\x66zh+" "\x98\xb2\x96i\x16\xf7\xff:Z\xb6[\xea%\xde\x05\x7f\x86\x96U\xaf\xde\xaa\x33\xad\x83\xe8J\xdet\x1d\xb7gQ\x86\xf9\x1f\xa2\x00\xba\x85" "\xa3\n\x61\xc2\xb9)\x14\xceH\xefnW\xd9\xb0\xe8\x98\xbd\xc1\?\x8dZ\xeb:\xc1\x64\x97\xc1P\xad\x1e.~h\x85\xed\x85\xcd$\xa3\xd6" "g\x30\x66\x0b\x12\x9e\xd3\x87\x42\xdc\xee\xb8\xad;-\xee\xed\x9f\xc7\x30\xea\x02\xde\xa8\xc2\x14\xfbo\x01\r\xea\xeb\x86\x9f\x41;L\xba\x1f\x42" "\xf5K\xb6\x04\xbc\x0b\x9e\x8dvT\xa2\x8fJ\xa6\xd8\xac\x30\x02\xec\xa3:p\xec\xdc\x32\xa0\x9a\xe4K\xa6\xf7\x63^v\x15\x62\x97\xc6\xfcK" "_@-\xde;\xa0\x99\x15\xa3\xcf\xe2M\x87=(\xdet\xcf\x43-\x95\x61\xc3\x9cZ\x15\x1d\x39\xd1]q\xcf\?\xa2\xba\xd1\xe7\n\x61\x42" "'\xf8pv\xa2\xeb\xf8\x63L\x99\xf6\xce\x1b\xff\x02\xb5h\xef\xdcL\x63\x36{\x13\xfb\xce]\xb1\x89\xea;\x06yU\xcf\x46%\xb5\x96\x06" "\xe2 \xf7\x42\x0c\x83\x8d/\xdf\x44\x83:\xf8\x90\xbd\xe9\x9e|\x07\x1a\xe4\x65\x02'\xc3\x31\xe5~\xea\r\xa8\x65\x62\x45\x92\xa3\xb6\xde\x8d\xc1" "[P\xca\x8c\xbaI\x84\xecM\x87#\xd2\x89\x37\x1d\x88\xd5.\xcd\xebWh\xdd\xd5\xf7\xc0\x91[\xdd\xb9/\xac\x63<,\xb9P\x83\x17\r" "\x33\xcd\xf9\x36G\x88}\x8e\xf6\x32_\xf0_@;s\x86\xab\x44\xf0o\xfe=\xcc\xcb^\x10`o\xba\xd7=\x82v\x38|\xeb'\xd1\x8e" "\xde\x98\x0b\x33\xba\xe3\x9c\x84\x89\xfb\x1a\xaa\x33\"\xbd\x0f\xb5,\x90K\x92\x31\xfc\xf3(\xecG\xc8\xfb\x0bL\xe9\xaez\x99\x46%&\xe6\xb7" "\xa1S\x45\xad I\x1b\xf6\xc5\?\x8bZ\x15\xc3U\xdeq\xdf\x46uU\xca\x45\x15\xc2\x1f\x12\x15\x93\xa3\xd2r\xab\xae\xd7R\xc2\x0c\x46\xd8" "\xf1\xe0\xe7Q\x98\xdf\x32\x06y\xdf\xe5\xb7\x8c\x7f\x14}\xb1|\xf1\xdb\xa8>i}i\xb0\xc4V\x9d\x90\xff\x16\xa2Hz$\x39r\xc6;" "\xf7\x8aW\xa1\xba\xbd'^\xe2\xed\xb0\x83\t\xda\x33\x37I}<\x31\x64\xaf\xbc\x8eO\x63\xa8\xb4=\xef\x02\x03\\\x30O\x03v\xc6\xeb\xa4" "\xbe\xf4n`p\xa4\x86\xcb\x30\xb7N\t\x08\xaa\xf1\xaa\xa1(\x1f\xa3\xb4\x82\x8cu\x8f\xa0\x65\x35\x06\x39q\xbd\xa3\xbd\x63o\x01\xecwQ" "\xe2\x13(\xcc\x18\x15\xa1\x65{&;i\x8f'\x92\x0f\xde\xf5w\xbf\tS\x9e\x31\\\xb5Wn\x93\x97\xa4\x0b\x17W\x85vX\xe8\xb7\x35" "]\xd7\xc4\xbej\xb6\x03q\xc6\x03\x0b\x91\xe4\xa3\xe4!\xd4\xe2\x81\x61\x83\xec\x9a\nn\x9f\x0f\x0e\x88T\x15\x0b\xb8]\x99\x97\x32\xc1\x11!" "\xedS\x1e\x46\xf5\x19\xeb\x8b\x89\x30$\xfa\x12\x63\xf8\x9f\xa2\x8c\xdd=I\xce\xca,\x9c\xf8\xe9\xa1\xc1\x92*\x94\xa2\x8ay\xc1\x1d\xd9S\x02" "I\xea\xebz\xe0\x86\x38\xe3\x1d\"GM\x36\x61nOW\xa7\x30l\xf3\xdaV\x38\xb3{\xde\x1b\x9e\x8e\x96u\xa3\xb9\xfd\x41[\x1d\x8d{" "\xe0\x38L\\\xc7\x1f\xa0\x0c\x87\x83\xf8;|\x62\xf4{\x13\xbaX\x94\xde\xc3\x9c\xb1\xf1\xfb*\xe6\x44\x15\xc6\xd5\xa7\xa1\x30kS_\x8f\xc2" "|:\x80\xcb\xe5\x10p\xd7\x82\x11\xaa\xf0*\?\x17\x65\xca\x02\xd5\xa8\xd6\x65\xd3\x61\x64{\x18\xbd\xd3\xe0\xcf\xd7Q\x8b_\x19x\x04\xc3`" "\xa3\x7f\x07\xaa\xab\xe1 \xaau\xdb\x98i\xa7\xdc\xf5_\x31\x1e\xc6\xccW\xa0\xba\xaa\xd7\xa2\x12\xd3\xe7\xdf\x42-}\xa7/\x38R\xfe'\xaa" "Y\xcc\xa2}\x35<\x45%\xf3\x63\xac\xac\xcbZ\x44%\xf3\xb1\?R\x8f\xa0@\xdc\xeahW\xea\x61\xe7\xf6\x95\x9d\x0b\xd2\x36\x9e\xa4:\xde" "\x84\x39\xb6N\x82\x1b,\xd8\x95\x13\xf6\xaf{\xdc\xeb\x90HX\xcb\xd4\xe9+~\x18\xb5\xd6\xb5V\x41\x85\xd9\xa8\xb2%-G\x15{L\xed" "H\xb7\x43T\xd3\xe7\x92\x83$\xa3\x1fv\x65\xda\xde\xa5\xca\xe9\x39\x18\x16\xcc\x1d\x45\x1c\xed\x08\x9f\xf5\xe5\xeb \xa9\xf7\x1d\x82\xb4\xfa\x82\x86" "\x05\r\x9a\xe7\xc4\x19\x8fZV\xebI\xc0\xbes\xe4\x19\xb2ow\x61\xd2\xda{X\xd0\x10\xdcn\x37\x63\xd5Uu\xe6v\xb3\x06\x8d\xb8\xf5" "\x65\xcf\x9aW\xf6l\x16\xea\x91\x18$-\xacq\xc1\x1e\x98\xde\x35k\xc5>o\x07\x08k\x15\xb5[\x05I\xb5\x9a\x05\xe9!\x83\x33\x63&" "\x44\x18\x89\xbd\x46\xb5,rWMU(n\x97\x37\x1a\xe1\xa1n\x90\xa8\x02\x8a\xddy\xff\xc3(\x33n\xabs\xac\xed\xec\xab\x63@T\xa1" "\xf5:\xb7\x88\xbe,\x98m\xc1\xbc\x8bw\x8d\x1a\xd7\xf4\xc6S\x90\x34\xffLv\?\xbb\xe1V\xb4\x43\xc8\xff\xce\xbf\x45\x99)\x1b\xb3Y'" "\x8b\x8aHn_\xdfG\x8b*\x1c\xad\xeewP\x9d\x91\x16\xe2\x89x\x94\x11\x91Q\x8f\xb2\xb0h/\x63\xee[\xf4\xce\x62\x8f\xc0\xd9\xed\xc7" "\x0c\xe0l\xb9\xfe_\xe8\x8bH\xeem\x1fGu\x1a\xcf\xf5_G\x19\xbb\x44\xc9\x8e\x64`\xe7\x9c\x84/\xc3P\xc5\xeb\x8c\x30|\x8a\xde\x16" "\xf8Q|\xe2\x61<\x0b\xb5x\x18\x38\xb6\xd8\x7f\xec\x89\x43\x18*-\xee\x1d\x84\x12\xeb\xd6\xa9^z\r\x0b\x8c\x36/\x43u\x8b\xb6Q\xd4" "\xd0v\x8e\xa3\x84\x9d\x03\xb3TS\n\x19\xb0\x03\xd8\xd5_\x45\x61\x42\xec\x9bK(\xac\xae\xf5Q\xcd\x1e\xe7\x12\xbf/Z\x14\x46\xda\x03\xb4" "\xc3H\xfb\x1c\x94\x31z\x98TW\xff m<\?{g\x9d\x9b\x43\x0e\xf7\xf5R\x0cL\xd1&,\x9a\xb1\xb5\xa6\xe1I\x03v\xca\xfa\xf6" "\xff@\x17\xdb\x36T}\xeb\x39H\x9a\xba\x86\x1d\xae(\xc8\x61\x41\xf1\xd0\xed\x9b\x8eH\x82z\xdd\x84\xc2\x8c\x12\?\x85\xc2\xca\?\x87\x05\xbb" "\x34]\xd4\xbbK\xee\x90I\xe5\xfd\x80!\xad\xe9\xf5_\x41\x61\xd3\xdc\x16\xf4\x66\x87\x13_,l\xd8\x43\x36\xdf\xff\xdd\x85\xa8\xa1\xd8\x12\xb0" "\x33\xd5\x8d\xb3hPu\xf8\xeeP\x1d\xaa\xa3\x46\xb7\xb5\x63~\xb9\x12\x83\x8b\xd0\xd8\x14\x1d\xb5u\x19O\xd4`\xb4\xc1Y\x99V\x65\xbe\xdb" "\xe7\x08\xcc\x03h\x90\x86z\xc7M(\x03\x92\xd2\xf9\x99\xef]\x08\xc4\xbd\xea*\xb4\xcc\xd7\x45/\xa0\x0c\xa3\x31\x31\x9c\xd6r\x83\xc3\x9bt" "\xa3\x41\xc6\x96!\xd4\xe2\xfb\xa7\x37\xa1VJV'\xaa\x99\x41\xb6\x41(\xf1\x08\x8e\tq\xa6\xc2\xbc\xd8\x99\xaa\xe3\x9d(\x63\xd1\xdd\xd9\x63" "\xea\t\xb3(Lkq\xcfkP\x98i\xdd\x83(L\xb4\xae\x03\xf3j\x30\xe4\xbf\x83O\xec\x34\xfb}|\xea\x13\xd0\x45\r\x82\xf3\xc3\xbf" "\x88\x1c\x46\xbf\x63LP\x9f\x18s\x87L\xc7nG\x19\xc6\x84\x1f\xa0\xfa\xb6,J .O\xe0\xc7\x1az\xaf-H\x9b\xdbOv\xd0p" "\x83\x11\xf2\x1e\x94\x19\x11\xd0\x05\xec\xce\x44\xcf\xe6\x66\xa9\xd3\x97@\x34\xdb\xb7\x90\x11\x87\xa6\xdeo\x18W\xc9\xeeL\x8f\x9b\x45\x61\xea\xfd\x65" "\x10\x8e\n\xf6T\x07;\x41]\xf3Y\xd4\"\xa4=\xf7/\xa8\xc5p\xfe\x04j\x31\xcd\x04\x9d\xcfZ\x1c\x33v\x82\x02\xd3\x1e\x35\x18\x13^" "\x8e\x32\xbc\xdc\x80j\xd6|\xe3\x8b\xa6\x46\xe0\xf0SW|\t-\x33\x1a\xdf\x81Zz\xbd.,T\xac\x41\x1a\xc6\xb5\xe0\x18\x0f\xd5\x90\x1a" "\xd5\xd4\x43;j\xb0\xdf\xe9\xad\xe8\x82\xf1\x19[\x86=\x94\xae\xda\x43u>O\x9f\x8b\xea\x1a\xef\xd4\x1d\x32>\?\xff\x42X\x66\xb4\xb9\x12" "\xd5\x89\xfa\xfd\xc6\x10\n\xd7\x0c\x86\xcb\x32\xe5\xa8\x61n\xcfY\xbb\xfe,\xdeGO\xc1\xe0\xed\x39\xaa}S\xd7\xb0\xf3\xd2\xdd/\x42u\xa6" "~\xb7\xa0:\x11\x90\?\x1e\x44\xf5\tY\x41\xb7\xafW\xfe\xc3\xb2\xde\x66r\x87\x31\x9b\x8e*l\xa3\xc6\x8c\x8c\x39`\x37\xa4\x8e^T\xa7" "\tv\xfe\x39zo\n|\xdc\xbe\xc6\x81q\x87\xc6p\x8a\x17\x13\xad;\xbf\x61\xfd\x01T\xe7\xf3}\t\x85y\xccw\xa3S\x35W\xb9\x43" "{\x12N<\x8b\xc0\x90\x93\xd3\x11\xd3\xf9Z\xde\x86\xc1\x8f\x97\xfd\x0bz\xd7\xa8\\\x8e}\x8d:\xe6Q\x98Q}\x02\x85M\xd5\xd0\xe0\xe7" "\x9f\xde\x8f\x06\xed\xb1\xc2\xac=\xd9 \xbe\x46\xe0\xd9\x0e\x35\xecXTS\xaa\x15\x35x\xb9\?\x8b\xc2\xb3\x06y\xda\x83\x9d\x9f\xc1tx_" "\xdc\x8c\xc2\x45\x81|\xd4\xe0\xf8u)t\x81\x11v\xfe\xb7\xdf\xc3\x12X@\xa1\xb2\x06\x9d\x8e\x1aK\x02ywh\xd4O\xdc~\xa8\xd3\xb2" "\r\x95\x16\xf7\x8d/\x43;<\x8cg\xa1w\xf3Lk\xd0\xc2=\xe1\x36\xe4P_\xef\xf9\"\xbaPG\xe8\xb0\xacJo'\xfe\?[h" "\xf9\xa2\xc1\x90P\xeb\xef_\x85Z\xdc\xfb\x34\xda\xa1\x45\xb9\x87\x16\x8e\xfa\xba\xea_Qk\xcf\xc6\x33\x62XGK@!(\xc5'\x87\x16" "\x85\x36\xc8\xb9\xb7\xa1\xc1\xaa\xacW\x90\x8d\xc9\xea\x84\x45\xf5@\x0e\xcb\x16\xad\xee\xf0@\x12\x81\x38\xd5\xe0\x84\x95hH \x83\x65\xd5H\xbb" "\x43\xd5\xb4\x07Y\xea\xeb\xb9\x9f\x42\x61&\xc2\x38\xfe\x0e\xd5\xc4\xef\x12\xfa\xb0TX\xb4;k\rZ\x82\xeb\xfeo\x94\x61\x42\r\x11\x38\xad" "\x1a\xd7 \x8bu\x7f\\\r\xb2L\x9e\xd9\xb9\xa7\xa2/}\xce\xc3\x1d&\xad\x41\x8c\xf0\xea\xce\xdf\x45\x19\xbe\x13q\x05rx<\xe8=\xab" ".\"\x61Q\x43\xbc\x06YuHs\x87\xfa\x18\x8dKp\x83o\xc6\x30\x08\x62w\xbe\x16\x65\x98\xd5\xff\x1c\x1a\xd4K\xca\x61\xd9\x42\xe8p" "\xd0\xa1\xa7\xff'\x14&\xd0\xbdh\x0b\x85\xf9\xa5\xce\xef\xa2\xf0\x45\xc1\x9f\xb0\xac\x0fx\xb9\xc3\x9c\x8d\x90\x90\xed\x89\xbf\x8c\xc2\x84\?\xb7\xff" "\x7f(<\x64@(\x1a\x1e\xda\xbb\x81\x12P\x88\x8e\x1b\x0ez\xff%\xd4RK\x44\x90\xb7[\x36\t\x8c\xa7\xf3\x86\x87\xf0i_\x46\x18\xe4" "i\x95\?\xfc\xb7h\xe7X\x16\xc5\xb1\xa3\xcb\xf7\x31\xb0,/\x1cx\xb6<\x63\xd4\x0b\xd0\xa9\x89\xff\xe5\x15[\\\x1b\x06\xc7\x11z\x1eQ" "~\xea\xfd\xca\x07P\x8bW\x19\x32\xc8\xa1\xc9\xf8\xec\xdf\x02\x36\xde\x1d\xda\x43\x84\xe2\xbb\xf2L|\x62:\x46\x84\x88\x16\x17\xc4\x33\xc8\xb2V" "\x1f\x1cQ\xde<\xca\xc4\x65\x05s\xafv\x1bTi\x18\x1d/\x41-Z\x94\xa7\x02\xc7\xb2\xa6 \xcdOH\x83\xa1\xb8\xac\x80]\xa9\xda\xb3" "\xe6\xec\xa9r\x33\x0e\xe8\x14\xf7\xfe\x44\xd4\xe2\xe3\xf8\xdfP\x8b\x91\xb6\x0f\x85\tm\xbe\x08\xe6$\x65\xf1\x96\xf3\x1a\x43\xc9\x1d\xda}\x34v" "G\xf9\xec\xef\xa3\x41\x1a\xd8}\x11\nS\x17/\x85\xac\xd7\x30\xb9\x32\xab\x17\x12\x83<\x07Y\xcd`<[\xd2iX%\xbaq\xfe\xbd(" "\xc3\xa1}[\xc8\xa1\x43s\xf3\xcbh\x87\x10\xf2\xa3o@\x0e!\xd2+\x8b\xe8\x82)\xd2\x0b\xf1\x89M\x12\x84\x12\x84$\xef\xfe\x02\xca\x10" "\xfe\xfc\xfe\x03(\x43-\xbf\x0bgJ\x9e\x31\x01\x1b\x8d\xbdG\xba\xff\x1e\x85y<\xd8\x95\xe2\x61\x02\xee\x9d=L\xde\x8e\xad\xc7N#W" "\xff\x13\xca\x30\x85\xc4\xa9\x97'\xa4}\xd3\x1f\x61\xa8{\x8a\xc6U\xc2\x9f\xf3@\x12q\x35y\x08\x13$K\xd6\x9d\xef\x42-\x8d\xf5\x11\xe4" "\x19{\x9f\x8d\xc2#\xb6\xdc\xc0\xf0\xeb\xde\xfa[(S\x14\xd4\n\xf2\xea\"\x1bV\x19\xa3.\xe0\x13\xe1\xc6\xf9\x1f\xc7'u)\x0c\xd9\x8d" "\xe4\xd3\xa3\x18\x98\x86J\x0b\xd8!\xe4\x0f\x81\x12y\x42\x92;\x9e\x87\x32\x84\x12\x1d\x13(\xa3\x0f\xe4\x45\r\xbe\xa0\xf4\x0f(\\\xd1u'" "\x17\x91\xf3o\xe9\xc1\x30\x80\xea\x1d/\x7f\x33\nS\xa7o\x8fP\x98\\\xd0\x1f\xffu\x14&\xf2\xf5\x9d\xbf\x46\xcbz\xb4\x85\xe2\x34\x02&" "\x39\xc1\xc8\x7f/j\xe9U\xfd\xa8\xd1\x94\xc1\x07Y:\xd1:\?\x8aZ\x44<_\xf8\x8a\x0b\x81x\x86\x80\xf6\xb2\x1b\xc9\x35\xcf\x41-\x0b" "\x1a\x9c\x65\x95\x0ep,o\xc2lUOj'\xe1\x83\xe8\x00\x62\x0e\xff'Q\x66]>\x05\xc7\x84H\xd7\xbe\x0e\x85\xa7I\x04y)r" "L\x9d\x9e\x62W@\xe2\x91\xd8\x38N\xedX\xbc\x1d\xf6\xfa\xb8\xe2\x11\xb4\x63\xb1:\x8f\xf5m\x94P\\\x44n\x43\x19\xea\xfd\xd5\xf4\x89\x1f" "\x8d\xfa\x39t\x41\x44\xe6\xb6\x05\xb4\x43\xb8z%(\x00\xbbm\\\r\x16\xeb\xd8\x02\x32\x94\xf3\x86\xb4\x16\x8fZ\xc2\xfe`\xe7\xa6\xec\x82$" ";i\xdc\x10\xa0p\xc1\xa0\xa1N\xa1.\x61\x17\xd8\x8f\tW\xbf\xf5w(\x63\x41u\xd8\x91\xe3\xb6\xfbP\x86\x89\xde\xab\xd1\xa0\x45\xe2\x65" "'\r\xf2\x95\x65'\x8d\xdb\x1f@-\x0b)V\x05\"u\x06\xe0*\xf3\x66\xbb\x39V\x12\x17\x96-hgU\x63\xd8:v\xe4\xe8\x08\xd0" "\x32\xa3\xe8}(<\"\xb3\x08\xd9\x7f\xe3\n:\xc4\x8b\x06^\x46Q\"\x8c\x84\x00\x0f=\x13\x85\x19W\xff\x11-\xdb\xa5*\xf6\xd6\xf8\x8d" "\"\xca\xa8\xa0\x11\x1c\x8f\x19\xa0\x8ck\x62O\x8cp\x19\x65\x8elM\x19%\x62\xf8\x44h\xd3I\xc7\x84>g\x1f\x92O\x45\xe7\xfd\xff\x19" "\xc3`g<\xd0\x9f\xba\x31]\xec/\xf1\x42\xcc]\\)\x88|\xa9kkXW\x17\x1a\xc7\xbe\x10\xf7\?r\xc1\x89/\xc4-h\x99Q" "\xe2\x45\xe8t\xd2\xc6\xa3<\x7f(.\x10\xbf\x82Z\x84\x90o{)j\x11\x89{\x1eQZ\x35\x45\x05\xe2\xf9\x80\x43\xb3\xca\x88\x04\x8a\xc4" "\x41~\xce\xff\x32j\xad\x0b\xa0\xc2z\xbf\x00\xca\x65h\xa8\xef|:\xaa\xdb\x0b\x41\xc7\xe6\xfeZ%\x8at\xe5\x43\xa8\x45\xbd\?\t\xb2p" "\x46#'\x07\xec\x02\x41\xd7*\xd9\x05\xa2s\x11\x85\x35\xfc\x9d\x93p=\?\x8f\x32\x84\x36\?y\x84\x32\x8c\x63\x1f\x44\x19\xa6\? \x44)" "=\xa0\x1d;\x33\x8c>\x07\x85Mt=\x66{\x65\x07\n\xeb+\xf6.\xc5-\xbf\x0f\x65\xec\xc6\x37\xbb\x37\xfc\xd2\x8f\x61\x16\xa6\xd3\x63G" "\x85s\xff\x8c\x06\x07\x05\x7f\x02\xf6O\xb8\x02\xf4\xf9\x98\xd1\xf8\xe9\xa8\xb5'\x9f\x1c{#<\xe1/\xf0\x89\x31j\x1e\x9fL\x98\x65\x07\x03" "\x66*\x8a\x06\x04\x42\xa4{\xff\x11]\xf0{\x01o\x44\x19\xea\xf4\x61\x30]\xec\x45\xd0\xd1\x85\x32|\x64\x7f\x0b\xe3\xd1H\x86\x8e\x43\xdf\xbc" "\xf0\x1d(\xc3\xd7\x7fV\xd0\x17\xe1\xeak \xb5\xb1\x87\x00\x63\x38\xe1\xcf\x17\xc1\x8f\xa5\x94\xc5r\x1c\x03\xa7\xf3\x0b(\x43\xea\xeb\xbf\xe9\x42" "-\xa6lw\xa1\x30\xa1\xc4\x95Ut\x41(\xf1\xa4\x9f\x46\x19{\x89\xe0\xd8\x42\xbb\x98\xad\?\x64\x9f\x01\xc0\x39\x14\x9f\x01\x9c;\x1c\xfa\xe6" "\xf1\xcfG-\xc2\x84g\xcf\xa1\x16;\x92\xdd\x8b\xc2\xb4\xeeW\xfd\x01\xca\xd0\x99{\x13\xd8\x42\xb6\xfe\xff\xccgP\x66\xddP\x94z\xbf\xfe" "\xefP\x86z\?\xffN\x94Q\xb3`\xc0&\xfes\x1fG\xef\xaa\xf8\r\xab\x66\x13\xafs\xf0\xab\x0f\xa3zJ\x10\xd2\x65h<\xd7R\xef" "\x9b\x86\xd8\xb4\xeeW}\n\x85y\xdd[(\xccq\xf5\xd7Q\x86\x91\x64\x17-\x03I\xce\xc7\xc0\xdc\xa6\x32\x86\xe1\x8c\x12\x7f\x8a\xea\x84\x12" "\x03\xaf\xc4'\xf3\x01\x16\x43<\xb8S\xb6\xd1\?\tr\x65\x9d/\x32\xe3|\xe7h\x36\xdf\xd8@u\x42\xad\xeb\t\xaaL\xc7\x1e\x46\x99\x05" "\x43\x80\x39\x19X\xc0\x86xp\x95\x61\x95\xa3[\x8c#\x87\x10\xe0\xc6\xff\x89\xf1\x10\x02\\\xf7\xbb\xf8\xc4\x08\xf0\x12T'\x62\xf5\xcciT" "\xe7vp^\x1c\x13\x46]\xf9\x15\x94\x31\x66\xa9n\x17\x90%\x9a\r\xd6\x42l\xeb\xa0$%st\xa9\x1a\x87VW\xef\x11\xc7\x96\xf4\x1b" "\xc1\x9d\x1e\xab\x85.`\xbby\xc7\xdbQ\x98)I\t\x85\xd5)\xcb\x91\xdd\xfc\xea\xcd\?\xbb\x10\x36\xbb\xb4\xf0\xb1\xc5\xfb*\x8d[-\x42" "\x9b\x9b\xff\n\xb5VmqY\x03\x03\xd4j\x12%y\xda\x43(\x43Hr%\xe0S\xd7\xf8\x99\x8e\xcd\xe5\x13\x10]\x9b\x1aH\xca\x65\xb8" "S\x9c\xa7\x62%\x87\x14Y\"\xdcx\xfd\x33P\x9d\x0f\x44\x1c\xf4\xf5u\x99\xbbKQ\xa7\xdf\x19\x45\xf5^\x83\x33\xf5\xbe\xde\x8d\xea\x84\x1b" "\xb7\xbf\x18\xd5\xa7\x64\x16\x61\x95P\xeb\x61Z\x14&z\xbf\x80\x04\x61\xcb\x07\xf6Q\x9d\xaf\xae@\xc4\xcbP\xcb\xb7\x41\xee\xae\xb3\xcd\xae\x89" ".\xa8\xd6m`\x18\x32T\xeb\xea\xd2\x05\x97\xb3\xf8\x87\xcd\x41\x1d\x46N\xb5\"\xc1\x31\x61\xcb\x8d\x7f\x8eN\x39\xf0\xbb\x43;q\xc3\x1f\xc6" "\xba\xd7\xa1L\xce\x16\xce\x9e!k\xaa\xa2\xd5I\x38\x1a\x1c\xfd\xc7v\xed\x42\xec\xe6\x34\x65\x13\x15\x9b\xec\xaa\xbd\x8c\x06\xa9\xe5k>\x89Z" "<\x0cH[l\x37\xbf\xedk\xa8\xc5\xe6\t\xack\xea\xfd&'\x61\x64\x88\xb2\xe9\x83\xe0\x81\xd8\xbb\xdf\x86O\x13\x06y\xbb\x7f\xc1\x46" "\xed\x8e\?\xc1\xa7I\xeb\x82o\x01\x1c\x61`j\x9b\x08\xc4\xa8M\x14\x92p\xe3\x1e\xf0\xbd\x15\xc2\x8d\xabv\xd0;\x61\xc2\xed\x84$\xac\x19" "\xa0S\x98\xf5\xcf\?\x8eOz$\x39\xb1\\\x43~g;\xf5\xf9\x9f\x41u\x66\xe3\x7f\x04\x65\xf2\xb2L\x61\xd3\xde\xc9\xa2`/\x9d\x9d\x7f" "\x83Z\xd3\x82\x12\x81\xd8\xa9\?\x8fZ\x16\xa2\x33\x37\x63\xf3\x62\x91\xf3\x95\xf8\xa4Z\xb5\xb0I\x04\xe4\xa9\xc7h\xc7<\x63\xeb*\xd9\x85M" "\x65\xbf]\xc6\xd4\xfb\x39\xbd\x08\x1f\x88\xe9\x19\x9b\xb1\x42\x98p\xfe\xeb(l\xc1\t\xd9\x64L\xce\xf6%slk\x9a\x8fP\x8e\x1fn\xbb" "\x07\x9fh\xdd\xc7\?\x84\xbe\xf8\xb4\xa2\x8d\xb6\x62k\xc1\x96\xe2\x65|\xaaX\xa7K\x8a\t%\xf5\xe4\t*\xa6\x10\x10\xbb\x30\x8e\xb6\xa6)" "\x8b\xc4\xe6\xebPK;\r*\x66-\xad\xab\x8d\x35l\xd2\xe2\x9e\?\x44\xe1\x8a\x81\x85\xd1\xe6\xd7P\x98\x97\x1bgw\x9d\x31\x01\x12P\x93" "\x96\xfbIt\xc2Z\x98\x1d\xb6\xe7\x12\x46\xb1=\xb7\xde\x44\x61\x8bQ\xd6\x64w\x65\x42\xec\x9a\x41\x43\xe3\x87;\t\xae\x42xH\xcb\xfd\x96" "\xd7\xa0VS\xba\x08Ji\x43\xa4M\x9b\xf2\x9a\xc0\xd9\x15\xd4\xff'\xa8Xl\xa8\xa6:\"\xba\x8cv\xea\n=\xd2\x45 \x06Y\x00\xaa" "\x32m\xd0\xe0`\xadh'G\x03{\x1c\xe8j\xa1W\xca\x84\xcd\xb8 [P\xe2kq\?@\xad\x19\x43\t&\x05\xe0\xber\x16l\xaa" "\xa0\x81\xbb\x83\x92\xba\xc3\xb9\x1c\xe3\x18\x04\xb1\x12\xe1\xc6\r\x9d\xa8\xa5\xd2\x9f\xcb\x31\x8e}\x02\xb5\x06m\x82\xca\xe1\x07\x66\x99\r\x9b\x84\x00" "\xd7\xdc\x8f\xc2|\x15\x02\\S\xc9\xde\xb6\x10\x63+\x41\xfe@\x1b,\x98\xd3u\x65Q\x12\x61S\xdf\x0evll\xed\\\x41\x19\xd3\x1b\xb3" "i\xf5\xbd\x83\xc8\x61J\x92\x46N\xd9\xd0\xc6\xfc\xf0\x9b\x1a\xb3\xd1\xe5\xd4\xf3\xd3I\xa4\x91o\xa0\x30\xa1\xc4\x35\xdf\x42\xe1\x15\x81|\xd8\xd4" "\xe0`\x41\xc9#\x9b\xde\x02p\x39\r\xf4\xe7\n\x8c\x63\xe0*\xd9ZJ\x96>\xb1\x96\xa2\x96\xd8X\t\xaa\xb4\xcaO\xf8\x39\xd4\x62;\x11" "\xf8\xd5\x92=\x66$\x46\xd2\xe7\xa0\x0c\xad \xc5\xa0\x10K(\xa6\xcc\xd6\xd2\xb7\x7f\x1b\t\x15\xe8\x82\xca\x86&\xccH\xearv\x43\xad\xa9" "W\xda\xc3&/\xd3\x87\x30\x30\xf3I\xae\x10j]\x39\x8eO\x1ag\xc9\xe5\xf8\xae\x62\x11\x65\xecI\x65\xb3{\x06\x35u\x8b\n\x9b\x16." "#\xe7Q\xcb\xee\xf9\xb2%\xf4:\x10\xc6\x8a>\x9a\x10\xd4T!\xe9\n\xb3\x36\x1esU\xaa\xec\xd8t,\xda\x61\xc5\x08H\x8d\x17\xf7\x9d" "(l\xd7r\xd9\x16\xd9\xb9\x83N\x8b\xd6\xa0\x9au\x82\n\xaf\xd7\x33Q\x98\xd7\x82H\xa5>\xcc\xe1$n\x06hK\xcd^\xa2l\xd2Z" "\xdc\x06 \xe4\xca\xb6L\x1a%#\xa8i(\xef\xa0\x46\xfb\xfd\x1e\xf0uM\xdeM\xcf@\x61j\xf9J\x1a\x86\xc9\xf8\xcd\xa6\r\xcc\x83O\x1a\x0c\xd9\x15\x0c\x9fkl\xb3\xfb\x32>\x8dZ\x61\x02\xc2\xa7h<\x8c~\x33(\xac" "n~\x01\xdb\x89\x9eL(\xaa\xd6\xe4\xa0\xc6\xf4\xe7n\xf4\x45\x38\xf6\xe0\x17\x91\x63gJ\x43\x1d\x35]\xc1<\x82\xf8.\xf9\x0f\xc5Q\x86" "\xa1\x41\xe0U;\xb5\x13K\xcd\x33/\xb8\xb2\x05\x92\xaa\xa5\x15\x62\r\x8b-_h\x18\xb2\xadk\x42\x0c\x34\xe0\x01j\xacH\\@\x61\xf3" "X(\x98S(\xdf\x01\x7f\xca\x03\xf8\xc4\x08\t\x81\x8e\xefw_\x9d\x46u\x86<\x84\x88\x1a\x07\xae\x04\xd1kh\x64{\xc7\x17\xbdo\xfd" "\x08r\xe6\x64\x95]\x31N\xca\xc2\xef#\x41\x90_\xc1N\xa9\xd9\x65\x43\xb6q|`\x12\x39\xfar\xb1+\xea\x93\xe5\xael\xb1U\xf9\x92" "r\xe7>r\x46\x0c\xf2\nU\xc7\x66\x8b\x8e\xef\"\x87\xa1\n\xe6\x8dm\x1c\xe7\x08\x7fh-\xee\xbc\x03\x65\xd4\x0f\?\xa8Y`\xf3\xb2\xbd" "_Y\x63\xf0\xde\x8fZ&\x95\x94-\xde\x05\x99$:\xee\xbf\x15\x65\xf8\n\x03\x08Q\x91!\x8f\xcd\xd8 \xb0\\\x07I\xbc\xc1\xdb\xf3." "|\x02\x0c\xcf}\x0e\xdc\x97\xd8\x0b\x08\x01\xb6l\xee\xc0\xc3s\x0b\x7f\x8cO\x0c\xc3\x0f\xe3S\xdc\x66\xca\x41Q\x86\xf1\x89@\xd7\xf5&\xe4" "\xd0\x16\xfe\xec[Q\x86\x11\xf2\rH\xe8\x83\x11\x8eU\xf7\xcf\xfdU\x14^T\xfci\x1c\xd8\xe0\x0fu\x95\xcb\xcb\xd2r\xd0\x38\x12h\x38" "S\xb9\x07\r\xbd\x96\xeb\xcaJ\xd0\x82\x46J[.\xdb\xdc\xe5\xc2\xe6\x43\xf8\x64n\x87|\x19\xf3<\x84\x1a\xd1\x87S\x0e\xe3\x46\x80\x1c\xde" "\x83X\xb8\x86\xde#s|\xf5\xb2\xe3\xab\xc8\xa1y]\x0f\xe1\xa8jO\xfc\x88\x66\x1b\x94\x84\x95\xd5\x64\xc0\xaa\xaa\x1fl\xd0\x30L(\xab" "\xbc\xe3\xcav/\x9b\xd5\xce\xb7\x81\x1a\x97\xf7,\x87\xe3\xab\xe3\x80n\x18\xc1\x97+\x8a\xa8.\n\xe4g\xe2SY\x10\xd2\x95\x35\x80\x98\x13" "\xbd\x31\x01S\x8d\xad\x41\xa3&(\xe1\xca\x16\x0b\xae\xa1\xbe\xd6\xael\xee:\x65{\x8a\xbdj\xde#\r;\x02\xcav\x0b@\xb4\xb2\xd4\x05" "\x87\x65+\xe0\x13\x43\x03X'\xb7\xeah\t\xe8]\xd7\xe4w\x90\xc8\x93Z\xeb\x83\xf8\x44\xfb\xe2\x1e,\xb7\xe8\x61\x03SV\xe4\x84T\x43\xcf\xfa\x83o\"G/\x95\x9f\x94\x88\x46\xbd\x04\"U\x9d@\xf7q\x9c\xcbU\xbbs]\xd7\xab" "\x10'\xac\xd2\xf9N\?>\x65m\x84\xea\xb9\xe7H]\xd3\xf1\xba/#\x61\xb4\x85\xd5,\xe7\x9f\x8dZ\xec\xbf\xfaZ$\x88\xaa\?\xe5\xd5" "\xa8N\xc0\xfc\xe1\x37\xa0\x0c\x03\xf3Y\xf8\x84Y\x9c_\xfa\">\xf1\x33\xb5/G\x0e\x30\xea\xba\xad\xbf\x41\x02\xd3\xb9\xe6\x07\xcf\x45\x82\xb0" "\xe5\xde\xbf@\x19\xba\x0b\xfc\xdd\x9f\x45\x0e\x08\xc8s^\xfc\xafh\x87\xf7\xceO\"\x07\x04\xe4q\xb9_\xbb\xe0\x44\xe3q\rr\x34\x10\x87" "k\xaa\x8f\xd0\t\xeb%\xceGh\x87i\xef=\xc8!\x44:O-\xd3\x12<\x0e\xa2\x07\xe9%\xae\xfa\xc3\x03\xb4\xbcI\xe6\x86\r\x94!" "\xd5\xfdk\x81-\xa4s\xe8\x38~\x00\x9f\x88\xd7\xea\xf8K\xe4\xd0\xde\xf9\x14\x95\xa1\x1bO\xdf\xab#\xc1\xc1\x94\xc0\xf7\xb2\xae\xe0\xceo!" "\x87\xde\x05\xfe\xf2o\"\x87\x17\x8e\xba\xe0\x85\xfb\x34>\x11\x10\xae\x03\xe3\xc1\x12=\xce\xa6\x13vw\x7f\xca\x02r\xf8 \xab\xa1\x30\xcd\xfd" "\xee[\xf0\t|TG\x61\x1b\x39\x44<\xdf\xfdo\xc8!\xac\xbb~\x17\x85\x89\xb6\xdcq\x80\x1c\xa0_\xe7\x1f\x01\x8dY\xdc~\xea\xc7Q" "X\x89\xe7\tK\xd9\xafy\x33r\xf8 \xdbG\x0e!\xe4\x95O\x43\x61}K\xc2\x89\xdcMs\xa7\xdd\xf4\xcc\x06rx\x37\xbd\x1f\x39\x19" "\x32\x1d\xa3V\x45\xed\xb0\xae\x39\x63-\x13\x91y\xcb\">\xf5\xc9\x9a\xba\xba\x99\x00\x9a\xb3\x86H\xe6\xb3\xdd\x64$\xa9\xa0\x16`x\xee\xde" "\x8f\xa2\x16`x\xd3\xbf_\xc2'\x42\x9b\x1f\x9b\xc7'\xc2\xf9\x1e\xc2(\xf5\xf3t,\x0b\xff\xf5\x04\n\x13\"\xbd\n{\xb9\xce\xf7+\xbf" "\x8bO\x04\xb1\xfe)\xd4\"\xf0\xde\xf0\x03\x94!\xf0&\x97Q\x46\x19\xd7\x93\n\x10\xe9\xfc\xef\xb6\x90\x43\x84\xe8\x01\xea\x9d\x37\xc8\x9f\xe1\xd3" "(i\x8b\xdf\x8f\x1c\x0e\xc4\xfan\xe4\xf0\xd9\xf4Z\x14\xa6-|\x1b\x86\xd1\x64\x1c\xfb\x32\xca\x30\r\xc7\x08Yt\xfd!\x02\x0b\xed\xee\x87" "\xc7P\x86w\xf7M(\x93\xa0\xf3\xf9s(\xc3J\xd4\x35\x94Q\x89\xf5\xc4\xe4S'\x62)v\n\xcb\xb0o}\x10\x85\t\xf2\xb7\xbd\x03" "\x39|\xb5\xf0n\x14\x66\xe5\xe7\xcf\xe3\x13-\xc1\x8f\xd2z\xe9\xed\xd7\x13\x91\"o\x45\xe1-\x43u\xda\x95w\xbf\x07\x9f\x08\x0f\xff\x92V" "\x87\xc5\x81\x0b\xf8\xa4\x86\xef\x93\n\xad\xc5\x0b\x01\xba\x66\xdc\x16\x8e\x16\xe5M\xb4\x65\x08t/\x82\\)\xa2\"\x15\x66\x85\xc0;\x91\xc3\x80" "\xda\x45\x61\x02\xe6\xb3\xfe\x14\x9f\x88\x9f\xef\xfd[|\"w\xc1O\xd2P\t\xaaw\xde\x8aO@\xc8\xf3\xf1~\xe4`\x9f^\xf7\xb7'(" "\x93\xb0\xadW\xa5\x37@\x1f\x41\x8e*\tOJJ\xf0O\x44\x10\x03\xad\x13\xf1\x8dv%\x41\xec\xd7i\xa6\xc4G]\t\x80\xb3k\xeb\xcb" "\x01\x84\x9az\xf7\x9d\xb0o\xea\xef\x8f\xa3\x16\x8b\x66\xef\x44\x61\x02\xdd\xab@\xacX\xa4\xea|\x35\n\x1b\x15m\xea[\?'\x35\x8b\x15\xd3" "\xcc\x1bn\x00P\xd7\xde\xfe%\xe4\x10\xe5\x7f\xe3\xbf \x87-\x08\xcf\x43\x82\xb6\xf0v\x0b\xb5X\x38\xc2Y\xd9T\xc1\xe7\x84\xa5\xa4\xbf\xfe" "\x00>\xf1^~\t>\x31\xb2\xd1\x30\x38\x10\xfd\x1b\xf1\x89N\xc6\x97=\x03\x39\xcc\xaf>\x11\x39L\x9f!\x0e\x34+\xd6;\x61\xdd\x87h" "\x82\x84u\x0f\xd0.`\x8e\x08\x08\xc9\x9e\x96/\xbe\x1f\x9f\x98\x35\xfa\x1er\x08\x98\xd7\xfd\x10r\x08\xb5n\xf8!\x14&@\xbd\x62\t\x9f" "\x08\xaa\xbf\xfeT|\xe2\xf7\xe8\xdf\x8bO\x8c\x63\x34\x42\x42\xad\x1f\x03\xb3\xc4\xe2\xd2\x95\x8f GU\x16'\"\xf8\xdc\x86\xea\x84\?\xff\x05" "\xed\xd4\xf4\x88<\xa9\x30\xc4~\t\t\x36\xba\xfd!>\xd1\xf6L\x9d\x43\x8e\x9a\xfcN\x44r\xa1\xf1\x30\xd5\xda\xc3\xa7\x92\xc1\x19Hr\xfd" "\xce\xc7\x91\xa3l\xe1Im\xd9\xfa\xc2\xdco\xf9\xe8 rx[]\x42\x42\xa3\x96\x9d\x88S\xdf\x13\x90\x43\xeb\xfe\x91\xdb\x91\xa3V\xfb\x13" "\x92\x41:\xc6\xde\x87\x9c\x1e\x43Q\x9a\xce\xddX\x8b\x06\x87W\xfa\x63\x94\x61\xde\xef\x46\xe4\xf0\xba\xff\x38\x12z\x93\xf4\x84\x9d\xe8\xfe\xfe\x61" "$\xd4\xf0}\xd2P=\xdb\t\x8b\x1e\x0f\x61\x16,zt\x14\x91\xc3\x84\x1a\xc0l\xe8\t{\xc2\x82\xc6W>\x85O\xb4\x1d\xaesH\xd0" "\xc2]\x0f\x18\xb2Xq\x35\xce\xb8\xda\x91\xcd\x34\xa1\xb3`\x8f\xb2\xf3w!\x31i\xc3 \x0c\x7f\xe7\x36r\xf4\x05\xae\x13\x96\x0b\x9e\xfe\x31" "\xe4h\xa8\xb4\x93\x86-\x41-g\xbd\xab\x03\xfc\t;J\xbd\t\x94\xbf\xa1\x96\xac\x13\x66\xda\xaf\x8c#G\x1dtOj\xb4\x04w\x03\xfd" "\x1a\xfa\x94\xd2\t{\x1f\x85I|\x62\x15\xca\x9f g\xc5\xe0\xac\xca\xd8\x93\x06\xad\xc5\x97\x62\xc8\xa1\xf8\xa2\xf7\x0e#G\xf5$'\x35\xbe" "\x83I\xcb\xd4\xb0y\x61-\xaex\x84r\x9a\x36\x66\"\x44Oz\r\x12\x04\xdeNj\x90\xc3\xc9\x36\x91 `\xde\x02|\x66\xb6\xf9\xb6\xaf" "#\xc1\x87\x1d\x88\x1es\xcb\xe7@\x84\x99\x37~\xf2\x1b\x90 \x34\xbe\xba\x86\x04\x01\xea\xd6_\x46\"k\xb3P%\xfcI\x83\x10\xf2\x0e\x10" "\xa2\x46\xd9\xd0\xa6\xa2\xf8\xdc\xa8\xda\x08\x9b\x64\n\xf8\xf6\x85\x80\x43\x61|\xe4\xf7.\x44\xfc\xbe\xf0\xbd\xebW\x04\x99\xa1\x80^\x9f\x91_\x46" "\x46I\x46),[ti\xd1Mls\x01\x9f\xe4\x32\xfe/.\x16T\x37\xa4\x11\xfe\x95\x46\x38)_W\x62\xad\xec\x8a\x14\xb0\xa4\x94\xb1" "\xbf\xa4\xaf\xc2\xa1\x9b\xceJ_\x96\x94\xbe\xec/)\xd6h\x04s\x1b.=#%O\xfd%\x85O\x65p\xf9V_OP\xdaw\xfd#" "\\\xfe\xf4_\\\xfet\x86\x95\xc7\x16\x08\x16\xe2V\xde\xff\x65\xe5}\x06\x97w\xcb\xab\\R~\xb9\x8c$\xf9+\x38\x90\x93\xb2\x00\xc7'" "\xb9\x8c\xffK\x1aYY\x93\x46\xf8W\x1a\xe1\xa4\x00\xf0\xd2\xa5`\x44\x97\xc9\x92\x02@\xfbK\xfaj\xc6\\R\x8a\xf9\xa4\xf4\x65\x7f\t\x00" "\xb7\x66\xddr\x45\xa0gI\x01\x9d\xfd\xc5\xc5\xc2j\xdeM\x36\x0c\xce\xa7\xff\xe2\xc2\xa7\x33\x64\n\xd3\x17\xa3\xc9=\x83\xf3\xe9\xbf\x64:\xa7" "\x32\x64Rk)\xd4\x46\x86K(n<:\x43&\xf8\xe8\x36\xefj]\x96\x0b\x18I\x17\x95\xcd`#.\x05" "\x36\x16\x82l]\n\x80\x15\xd3$&\x12\x94R\n\x8a\x15\x88\x84\x06\xccV\xec\x92\x14\x18\x9d\x8f\x1a\n \x0coL\xda\x05P\x83R\xbf" "\x82\x38\xe6\x62U\x81Ul\x11\xa0\x95I'\xbbi\x18\x94\x8c\xa6\xd7\xf8W\x86\x15\xd2\xcb\xb0\x92\xb4_\xe5\xb0\x96[\xcb\x03<\xfdh\xbe" "\x9b\x96\x92\x92\xc1\xe2\x08-\x04'\xe7\xd2'\xe5IN\xb6\xca\xcd \x37$\xa0\x02P\x00@j\x1f\xa2wkqH\xbaZoP\x0b\x9c" "Ll\xb9\xe4\x92\x0c\x64\x63\xd4\xcdLr\x32\xec.\xb8TS\xd6\xe4p\xa1\xd5#+\x15\x15\n\xfa\xbb\x1a.\rJ\xf5\x62&\xc8\xd5%" "\x39\xbf\x1e\xacv\xcb\xec\xfa{\x83\xf4\x84$\xd1\"\x06\xc0\x63\xe1$\xc1\xa9\xd6\x1a\x1c\r(\x1e\x7f\x0b\xfd\x8c\xce\xc9\xac\x9a\xdd`\x97," "I\xcb\xc6\x8dVw\x08\xa6<\xa6\xf1\xa1p&m\x8d\x1a \x31gH\xa4\xbe,\xff.\x8c\x62\x9bI\xc1\xb1MPK\xc9\x1d^\x02\xd0" "\x65J=\xa9VoI\xa0\x06\xec\xd7^\x35\x97\xcb\xa6K\xae\x9c\x97\xe4r\xd6M\xedI\xb5\x9d\x81\xd6\xe2\xb1$\x13\x32\xbb\xe0\xe2$U" "\xe7\xae\x80\xf2\x93\x63\x92{,Y\xad\xd2\x86\x01\xa7\xd5#\x8b\xe0\xcaMZ\x12\x86\x62O\x1c\xbc\xa8L\xa2\x94\x0fj\x92\x1bn\xd9\x18\x37" "i\xe3\x31\xdc\x00\x80\xe4\xa1\x0c\x37\xbbH\x38!\xc3\xe5\x02\xdc\xdf\xda\x84o\xa9Z\x95\xacR\xbf\xe1\x17\xa1\x1a\xd0\x84\x93{\xda\xf8\xd2\x80" "K\xefZ\xd7\x86\n\x34\xb6\xe4\xbc\xe5\xda\n\xb8\x81\xfe\x93\xd2\x82\x16\xc8Y\?\xae\xb8\x07,\x93\xae\xe6\xd2\xbe+\x8c\x14\x1b\x91[ \xee" "wI\x06}\xdc\x34$\xa5,\x9f\x1cr\xcbu)P\xdd\xf0\xe8X\xea\x8f\x46\xa6\x14\x8a\xab\x38\x41\x04T#kn\xb2\xcfU\xfa\x18i" "\xfc_\xc4<\\j\xed\x1f\xb1\xf3zkp\xfc\xa4\x34\xc4\xa1\xdd\xe5\xb7\x35;H'\xf8\x8a\xc1\xdb\x35&\xad=\x1a\x46\x7f\xde\xe3\xa7\xa1" "\xf9\x82\x01\xac\xec\x87\x83\x31T\xa4@\xb0\xb2\xdc\xea\xadk\x81!LZqm\xda\xd0\xc4\xaaG\xeb\x02\"P\x46\xdf\xf5\xd8\x12\x86'\xb9" "\xcb}\xda\xc6\x16\x61>'+\x45\x82\x16'k\xeb\x44\x9a\xb8 \x35\xb7\xa6\xfbm\xdb\x0f([\xf7\x03\xea\xea\x32\xdc#\x1a\x1b\x8bK\x0b" "\xf9\xc1p\xbb&\xc9\xf4\x12\x91\x66n\x61\x66I\xe7\xd3\xb4\x65;)\r\xba~\x41\xec`\xa8\t\xee\x43\x96\x42\x92\xb2\x89\xf3\x84'\x86/" "\x36\xd8r\x8eh\x8b\xed\x37\x9d`\x90\xdd\xf5t(\x37\x0c\x1a\xceI #\xa1\x0e\x63k\xb5\xafu\xd0\xaf\x38\x9ck\xcd\xe7\x35)HH" "\xc4\x94\x91\x7f\x34\xa9\x63[q\xfd\xda\t\xf6\xb9.U\xb8\x39\xe4\xcf\x31\xe5Oh\xdb(\x41\r\nI\x03\n\xf6\xa0\xd2\xff\xb4\xa1." "u\xc2\xc3l\xd6<>\x81[\xb2S\x1f\xc8j\xcd,g\x83\xac,y\x90\?\x08\xf2\x82\x91\xd1\xa5\xac\x0e\x61\x36\xd8\xec\x16(&\x62t" "L\xe9\x18\t\x37\x84\x9d\x1d\x34$\x05\xb6y\x8c\xe9\xb7,\xc5\xdf\xb9\xb2\x8d\x35\x80\xb4\xb0\xaaK\x64\x30\x01\xfd\x98\xd8\xf2I\x1d.\x89\x15" "q=!\x07\xfa\x85\x46)\x81\x62~\xdd\xf2N%\x45@\xc4Z\xe9\x66r\xa3\xfdv\xc6\xe1\x1c\xb1\xc1\x9d\x94G\xe9\xb4\x62\x0e\x16'v" "N\xb9\xb7\x64\xb7\x07\xd4\xea\xbc\xe7kg\xe7X\xe1;O\xe4\xbc\xab\xa5{\x1brU\xd4\x10\x9e\xc8U\xa6I\xe3\xc9\x05\xe2\x17\x83\xe5\x1a" "'I\x13\x96\xdc\xe0\x64\x10K\xb4\x66\xa4@\xb0^\xf6\\\xe1\x42\x13\x38+\x65i\xeb\n\x03\x11n\xe5= Ji\"\x8a\xdc\x05\x80\xa9" "\xeb\xe6\xc6\xa6\xa3\x82\xe2\xd4\xec\x80\xe7s\x06\x87\xfc\x9e\xc0\xf1o\xf8\xb7\xbd\x84\x91)y\xda\x8a\xa6\x63\xdc[k\xf6\x18g\xbc\x8c\x17\xed" "&\x87\x42z\xc6.<\xe8\xf6\xdc\xc2\xd0\x02\xa9\xef\x86\x16\x8c\x8e\x93z\xc0\xce\xda\xb9.\x87\xf5\x06]\xe2\xfa\xc5<\xad\x64Q&\x17\x36" "\xbb\xc3\xa1\xe5p\xa8|\xfa\xdb\x44N&>\x34\x0e\xd0\xf9o\x83\x03\xc1z\x8dux\xf3\xa2\x62\x96.\xe9/RP\x8f\x0cYI:\x9e" "\xf2Y\x08!r\x66\x0e-\xa2\x18\x91,\xe1\x80\xc6]\x7f\x1a\xe4X\xfe\x62(\xbb\xc9q\xe9\x61y\x19\x04=\x1c\x97\x36\x01k\x0c\xc7-" "\xe8\xb7\xed\x83\x93\xea\x80#\xa5\xcb<\x43\x06\x10\x61M\x9c\x96L\xcf\x98\x1c\x84\x1e\xa2\x82\x1f\x0b\xe9\x98\x46\x86\xdc\\\x1f\x03\xac\xb5\x19\x03" "\x41\x0b+\x32\?\x37U\xc3\n\x05\x85}\x14\x96%\xc3_\xab\xf3\x32K\x81\xdc\xcaZ\xab\xba@\x9f\x15\\\xed\x0c\x85\x11\xa6vR\xed\xc2" "\xffQ\x7f\x43:\\\x19\x43\x1b\xad\xde\x84\x1b\xb9$\x38\xd3\xd7\x43\xcdm/\x05s\x32\xe9\x93\xdapkp\x8a\xca\xe5\x97\x1f\rK\x37\x34" "\x66\x03\x03\x0e\x44\xf9\x18U\xe4\x36\x36\x39\x39\xb1\x8d\xa1K\xc6\xe2\x45\x02Nz&Z\x1c\xb7\x95s\xf5\x9d\xa0\x38gUh\xbb\xf0\x92`" "\x7f\x1brK\x86\xf5\xd2\xceP\xf8\x13\xfa\x63mR\xe0\x10z\xa5\x97\x99\r\x82G\x1b@'\x95\xd1\xa8\xb9z*#\x1a\x99p\xe9\xda)" "\x00\xb5\x33\x14@\xd2\x86\xc0\x83\xd7@z\x39\xd5\x86_\"k\xa3\x9d\x61m,\x34\t\x11w\xa7\x08\xfb\x14\x8dI\x44\x30\x08X\xc5G\xe5" "Y]\xb3m\x08\x11\x92\x41\x82\x1f*\x8f\x86\x13\xeb\xe1\xfe\x80\xb5\xc7\xb6\x8b\xc7\xe4\xf9\x1e\xd1\x01(\xb2\x41\xf2\x31\xd9\x06\xbeGY]\xda" "\x9d\x11J\xdb\x1a\?:\xdb\xda~lim\xbb\xdd\xe5\xa3\x1ayL\xb6\x35\x82\xed\x88\xec\xb0>\x1b\x8d\xf6\x04\x0b" "\xe3 \x17Q\xf7\x8c\x9b\xbc(\x1f\xc7\x0f\xdd\xf0\x32\x8a\x84\xd3;\x8f\x32,\x9d\x82\x0f\xa8\x64\xb2\x9b\xb9HI\xda\xafP\xea\xec\x45\x7f\x8c" "pR\x84\xd4\xb4r*\xb9Y\x10W\x39\x8d\x1au\x62\x65\x84\xd1)zim{\x17\x38\xa4T\xb8\xcfSV\xf0u\xaash\xad\x8e\xf9" "\xbd\x8c,\x65K\xe8\x84\x37\x89\x62x\x89\xb8\x19. I\x61\xb6\x8e\x82\xca\x81\n\"\x65\x92q$\xb9\x42\x1a&n\x61p\xdb\xf3s " ":\xc6\x65\x0c\xfa\x63\x85\x64\xc3\x64\xb7\nTS^\xb1\x63\x42\xde\x64\xdc\x84\x82py\xce\x0b$\x0b+\x84u\\\xbd\x9e\x36\x86\x03\x33\x37" "\x10\x85\xdd)\x32}\xf0\x66\x91\\\x61r\x17h\x0c\xd2\xd8\x82g\x08\xb6w\x83\xbc\x9c\x9d\xad\xe9n\x97M\xa8@\xd2\x65\\\xbb\xe6\xf2t" "\x17\x46\xdd\xb2\x32o@\xe7\x92\n\xcc\xa2\x66\xb4\x89U&m\x62\x61|O\x00&\x05\xb8\xb7j[\x82\xee\xcf\x1bh\xc2j\xdc/Z\xb5" "\x42\xbd\xe8\xc8\xe8`\xdf\x10\xbe\x10\x98\x43\xeaJ\x15\x8a\x82\xc5$\x91\r\xfd+J\xf7\xba\xfe\x82-`\x34u\x18\r\xefx\x81){\xe8" "\xb2\xfbg\x64\x1d\x16\x0f\xd7\xce\x66\x03\xae\xc9\xc6\x99l\x81\xf8\x65\x85\x9f\x64=\x9c)\x9dmg\x63\x1a\xcc\xf5\xd9l\xc6\x97\xb3\x82\x97\x1d" "\x96\xb2\xb9/\xdb\xcf\xe4\x10H\x9a\x08Y\x9c\xb4_\xd1 \x03\x93\x17\xe2\x1e\xa9\x17\xe2\x84\x42\x31\xd3\x36\x81\xe7\x0e\xd6\x65\xa7\x90I\xa2w" "]\x85\xdd\x15\xaf\xe8\xe2\x96\x04x\x17/\x11`\xb9\xda\xc6\x0e\xa6&\xb9\xcbk\xb6i\xc2\xadI\x7f\xae\x82K\x34\xbe\x13\xc7\xa8\xf2\xcdn" "\x62\xd4\x38\x9e`s\x8f:V\xec\x34\xcc\xc0\xf6\xa0\x02\xc2\xba\xac\x18\x16\x91\x02Z\xf5\x86\xa4\x15\x35\r\x9e\xe4J\x0b\x43\xa6\x37$\xc6P" "\xf9\x0c\x9c\xc7\xb6\xee\xcc/+\xce\xc6\xe6\\r\xd0\x36n\x10\x13\x9c\xc5W\xafi\xa1\xac\x35=\xb4\x1a\x06\x07\x92\xee\x0c\xd5\x87\x8eO\xea" "\x8b\xbe\x0b#\x08\xc4S+\x63\x9bO\xd2p\x04\xe4\x83\x38\xfdm\x16\x80\xb6\x62\xf2\x31\x41G\x38\xca\xc6IU\xd8\xf7`v\xc7O\xb3\xb1" "xR\x99\x15\xa0N\x64m\xfdHlj,\xb6\xf5i\x36\xf4\x03Sh\xb8\xfe\xa3\x93R\xd5\x36j\xb0\xc9Z\x41%\x12t\xcc\x63\x04g" "\xd0w\xb6I|\x8b\xf7\x12\x38\x85V\xd5\xe3\xa8Q~\xec\x17r@\x07\xb9\xa7\x03\x94H:\x19]/\x87\x93 X\xa4t\xc8\xac\x31Z" "\xfa\xbfN%\xcd\xe4\xe6\xe1\x97^r\xcdy\x43\x13\xcb%\xb6\xb6\xa4\xca\xdb\xb9\x32\xa9\xaf\x65g\xc9\xd4O\x1a\x31\xc2H\x91\x39\x89\xe1\xf0" "\x80V\x14\x08V\xf6|\x01\xc0\\\x95\xdcQ\xb2\xe8\x15\x43\xa9Q\x32\xc9s\xd9\x91\x15\xe3^\xc3\x99\x05\xc3'\xea\xc2\xb6\x02\x38\"\x13\?" "ri\xaf\x82\x03\xc7U\x12IT&&\xc9\xf2\xb6\xcb\xea\xb6\x99\x8c\x99\x96\x0f\xc4,\xa8\xaazyy \xcao\xebl\x62~\x01'\x46" "\xa2\xf4\xb0\x14\x88\x1f\xdb,Z\xa5\r\x92$\x64\xbc\x03\x9e\x96\x81\xd5\xd2\x9d\x89\x02\x36\x06\x42\xc3\x8aX\x0e\x88(\xcc\x88\x8a;\xea\x19\x34" "-\x01\x92\x1e\xd3k\xeb\xd6\x05\xb0\xc3S\t\x10\xf5\x61%\x90\x0b\x43\xd1\xd8\xa1\x89\xaf\x1e\xbd\x0b\x45\xeb\x98\x98\x93\xad\x8c\xf5\xd6\x96:V" "\xbc\xbenr\xd4\x36\x1e@mg\x0c\xc8\x87\tW\xd8\x83QS\x05\xf9\r\xaf\xfd\x0f\x32\xdb&\xcd\xb8\x91^wq\xdf\x90\xca\xaf\x1b\x9d" "\x8d\x46\x07\x86i\x65\xb8\xec\xe1\xbe-\x80K,\xba\xc9\xbc\x41\xdd\xf6\x15\xb1\x1e\r\x91\x9b\x01\x07;\x94\x31!\x92q\xf4\xb8\xa1\t\xc9\xc2" "\xa6\xbd\xfc\x06\xae_\xc5SR^\x0e\\T&\x62\xc0\xb3\x00+\xcb.\xae\xb2\xd3T-\x1cWu\xc4\xc6\x8c\x87/X\xd8\x89\xb4\x1f\xfd" "\xc4h\x0b\x87\x9a.\x64\x38\x84\xd5+\x1b\x98N\xea\x39`\xad\x31\xe7\x18O\x34|\xe4\xeb\x31+\x46(\xf4\xa8\xbf\x30\xaa\xfa$\xfe)\xa7" "\x66\xfb\x86\x19\x1b\xd2O\x88h\xb3\x82o'\xb5\x14\xd8\xdc\xcbm\xd8\x93\xd2\xb0\xf1\x1d\x92\xb4_\x35\x64\xf6\x05\x85\x1d\x35\xadm\x06 \x8b" "\x9clL\x06\x19\x31-\x12y\xc4\x92\xab\xdd\x8b\xc0\x32*\xa6\xf2\xd6\xa2\x98\xe1Z\xf3%\x33\xc3\x45\x8b\x65\xc2\x14.\x10\xdb\xf3\xed&\x63" "\xde\xe0\x38_ \xeb\x14\xe7.\x0c\x91\"N\xca\x36\x08\x46\\`p\xca\x97\x8d]j\x8fl\xde\x86\xe3\xe2\x43\xb4\xbb\xcc\xfe\xb9@K\x83" "\x62\xc4}\xcd\xa9\xf9.\xb3\x06\xd9@\xeco\x9c\xb4_\xd1L\x8e\xb5\r\xad\x63\x62h\r\xb2\x07\xccy\xca/\x19\x10\xba@\xce\x82\xca\xae" "\xc7\x8c\xc3\x85\xa0\xa8\x64g~\x1dr\x86*\x39\xd6H\xd1&\xc8\xb7\x42\x8c\x8d\x9c\xb5\x93\x9e\x63\xeb\xc9\x9d\x32\xea\x05\xd9\x1e\xdd\x84+\x46" "k\xc2\xd8\xa6\xd7\xb2\x64\x97M\xac\x17\x04+y\x65\x37\x81$&\xbb\x16\x63\x32\xa6\x8b\xc4\x1f\x63,K\xa5p@w\"\t\xaf\xd3Rv" "\xc1\xd3\x13\xd2\xa7\xdbV\x1d\x9b\xa7\xd3\x95\x93;=\xe1\xd2\x88\?pm\xa4\x85\"Yo\xa5Z\xea\xd4>\xf2\xb4r\xa7\xc7(\x12\x01]" "Y\xe9\xb0{\xd4T\xb0Q\x61\xcbN\x43\xe4\xfa}_Lz*s\xbc\xe6\xf5\x96\xf9\x03oY\x1b\x9c\n\xcas\xca\xb3\x66\xc2\x15=\x86" "\x97\xbd\xba\x90z\x35K\xda\xf6.\x01\x8a\x93`\x1d\xb5\x9a\x9b\x1e\xf3+\xb6\xd0\xa6S\xe9>\xaf\xc8\xaf\xee\xd9x\x83\xa1#\x0f_\x32\x8c" "&\xfd\x92\xf6\n\x17sR=p\rUl\x01\x7fU}\x8a\x43\xdf\xef\xe6R\xd9\x0b'\x43G\xa6Iu\x13q\x32;\x89|\x92n\xdb" "R\xd2\x1e\?vW\xdcz\xda\xf8\x15\xbf,\x64\x64\x37\x42\xd6$\x13\xaa\x08=^\x61\x16\xe4\xe6O%\x01\x36\x01us\x15P\xf7\x62\x07" "\xdb\x13\xec\xaf\xa0\xe0\x0fiI\xda\xaf\x88V\xb1\x84\x1f\x1c'\x85KW\xeb\x11\x11t\x9d\x1bi\xe8l\xdd\x36&\x9d\x9d/\xd8\x0e\x86\x0f" "\xc9\xee \xb7\xa9\x04n\xd1\xed\xaa\xad\xb0\xff\xa2\xc9H\xd8\xb1\xed\xb9u\xdb\x02\x44\x99\r\x7f\xe4\x42\x96\xd5\xb1\x84S\xab\xd6\xdbIy\x92" "\xceN\x63\x39\x17\x94\x1c\xe7WI\x63\xc7\x1d\x97s\xdeT\x37\x32\xe6\xf1\x0c,\xf5\xc5I;\xca\xbd.\x1a\xd5u\x01\x18\x95u\x61\xcb\x39" "\xc2\x1d\x9d\x1b\xe9<\xf5h$\x8d\x00\xb7P(\x12\x02r\xb2\xdc\x96\xc4@\x11\xcd\xea\x08\xce\xda\x0ex\x8c[\xf9\xe2\xb0:\x66\xbd\x45\xa9" "R\xb0\xb4g\xc4\x37Z\xd4\x1d[\x18\xf6\x33\x96\xb2*\x86\x98\x14\x44{~L\xb9\xa7\xfe\xb4\x97\x36\xcb\x43\xa4\xd3\xd0\xcd\xe0\xb1\x0f\xd0\xa9" "\xa8\xd5\x8f\xcc\x0c\x66o\xdb\xb1\x03\x13\xcc{\xdb\xec\xb5\xd9\xd6#\xaf\x19} \xee\xa6T\xf2t\xc7\x64\x44r\xb3P.\xfc\xa2/\xeb\xb2" "\x19_\xa0\x30\x0c\\T\xee&\xdd\xb6\xcd\xe5\xed\xb8!K\xffxJ\x99\x97}\xd3\x9c\x9fT\x17]\xa6_\t\xc8\x10\x11\x1bI\xd6\xcd " "G\xc3QkMX[\x34\xb2\x82\xe3\xc0\xdc\x06(K\x15\x9e\xad\xee\x1e\x83\x19N\x11/p\xe2\xfc\xeeW\x9d\xf5\x62\x8a\x34\x0c\xe2\x90s" "Z\x82\x1br\x8d\xbaHV\x9c\xb4_\x39$&/\x46=\xca\x99s\x92\x17\xddh\x33\x19\xfc\x95\x02\"i\x9c\x44\x34\xbc\x62\xc8\xa4I\xee" "\x07\xf4vQ\xecQ\x61\xb9\xdb\x86\x1a-\x81\r\xd6\xd3\xbb\xab\xcb\xb8$R\x41\xab\x9d\x0b\x87\xbcgt\x8b^\xe4 \xbd\x82\x99\x1f\xea\xd3" "\xc1q\x8f/\x30\xaa\x02rs\x88p\x85\x01\x33\xbd\x42\x1d\x9b\x44\x61\x8c\xe3\x86'\xa7\xa0\x33^\x44Z]=\x65\xca\xb1\xa1\xb3]Zi" "\xa8\xf8\xdf(\?\x64x\x15\xd4\xfdI\x06.\xc2\x0b\x64\xb5)\x7f\xa8%\x94\x88\xc7\xbbm\x99[U\xad[\xed\xf6\xc7\x17\x99\xf7\x9az\x66" "\x8d\x93\xbdX\xd0~/\xd8\xbe\xa4\x0b\x1bo\x13\x1b\xcfS\x02\x18\x36hP{\xaf\x04\x99\x1dm\xed\xccy\x44T\xae\xbf\xb5\x39\x86\xdd\xe7" "O\x06%\x15\x64\xa4\x34\xbdy\xd2\xbb\x36\x44\x93\xbb\x46\x66\x65\xf0\xeb]\xfe\xbc\xee.\x84\x97\xe4\xab+n\xdaj\xbb\xc9\x43O\xc9\xe6\xd7" "OJJq*\x93\x9e\x61\xb5N\xfa\x13\x46\xdc\xbcS\xce\xca\x98\x07\xe1\xca\x98\x39\x97\x90\x38nV\x66\x10\x02o|\xf2\xec\x04\xd8\xe6\xa8" "!\x0c\x43p\xbc\xe1\xa9 \x98\?\xb3P\x80\x37\xf4\xfbq%\x1aT\xb1\x19\"\xbc\xe2\x0f\x99\x8e\xbd\x9b\xc4V\x1b'\xba\xcd\x97\x83\x9cH" "\xd4P\xd0\xea\x1d\x37\xac\nr\x8a\x31\xf3\xa3\xf6\x35\xac\xee{\x9c\xdb\?:\xa5R\x0bw&p\xa4\xf0\x16\x93\xa4\xfd\x8a\x8b\xdc\x8e\xe7_" "$\xc9\xbf\x46\xf1i\xb7\x99\x13\xd4|\xfd\xa4!\x44\x04I\xa3\xb6\x64\x30\xcc\xa5\xed\x10\xf4\x94\x0eRk\xc5\x1bj\x83\xbaj\x97\xc6w\x8c" "\xa5\x89\xc6\x07\x88\x88\xc8\x01\xef\x89\x1e\xb9\x13,\x8c{\x62j\xc7\xdd\x82\x9f\xb6K\x0f\x98Y\x8f\xf4S\xe6\xbd\x44l\xb1ns\x9c\x9d\x9e" "\x93[\xd4:\xdb\x1ej\xa5\xfe\xa0\xd0mg\x92/\x08\xe4\x34\x08\xac\xe5\xc2\x11\x65\x41\x16GN\xf1j~,\xbd\xeb\xa7\xbd\x1c\x16\xe2\x46" "\xc4\xfc\x08\xb1\x1a:\x16R\xf9\xebn#g$;\xb4\x1a\x8b^\xfbX\xce\xb5\xed\x45\xf3\xa4\x35\x61\x30\xa6&|\x17\xb5\x1cq\xdeR`" "\xdcr\x89\xe6\x19\xae\xce\x36\r\xfa\xa0\xc5\xad\x95>k\xcc\xab\x83\xb0\xf0\xd3)\xe5\x82\x0b\xa4\xac\xd4\\\x7fh\x81\xe5\xb7\xa1\xf7{\xeb%" "\x8ekO\xcd\x31\x00\x43\xe6\x99\xa6'\xf7\x8d\x45\x97\xdd\x97\x16\x30\xb7r[\xa5\x9b\xe9R\x92\xe3}YH\xc8\x89%\x0c\x66\xde\x39\xae\xb9" "\xdav\xdb\xe8\x36\x86\x87PP\x41\x8d\x64\xab\x36\xeew\xa9\xb9\x9a\xad\xac\x1aH\x82\xb5\x05\x33'\xbb\xcc\x84'&\x13\xdb\x1e/\xa6\xf6\xda" "\x14p\xc7m\x17\xbd\x92\x19\x62\x88\xfaLH\xd2~M\x32\xa1\xc9\xeb\xca#)\x8a\xc9j\xc5\x80\xebO\x8f\xe6r[\xc1\x30\x64\x07>!" "\xa8y\x0e\x14\x92\x64\x94\xe5\xb2\x93\x63\xc6\xd7\x44\xe3\xd9h\x38\xe3\x41\xb3>\xaf\xc7\xd6\x8e-\xc4I\x39\x66\xa8\x07>\xcc\xc6\xa2\xb9<\x9b" "\x85\x35\xf3\x83`\x7f;=\x1c\xea\t\xef:\x98.\x9d\x34\xd5\xf5\xa7\x99\xf4L>\x08\xa5\xea\x0f\x08\xde\xa6v\xeb\xad\xfb\xb5\x9eK\x13\xeb" "(\x94m\x80\x84).PN\xd3\x0e\xe6\xa1\xe7\x0b\x9e\x07\xaa{M\x0c\x04\x8dS|#QJ\xdb\x35\xca\x0e\x11\xbdk\xbb\xe8\xd8\xc1\x41" "\xd5t\xf9\xbd\x81\x34U%\xc6J\xb0\x31O$P\x0f\x1b\xaf+*\r\x87\xc3\x65\x45\xf8q\xab\x46\xd8h\xcb\x9f\x1f\xf4\x0b\xd1\xdc\xf0R" "\\\xff^\xfb\xb0\xd9\x35\xd5\xe2Im\xc9k\xbb\xc1\x31\xda\x91 I\x03\xa3\xa9\xd9\xb1\xdb\xcd\x45\r\xbf\xe5\xac\xa7\"\xb6\x83s\x1b^\x33" "\xd5\xdd\xe3\r\xdb\xc9!\x42i\xed\xa2m\x80\x1fl\x1f\xa4+\xa6\x15\xa2\xae\xcc#\x63o\xcdt\xc6\xe4\x88\x62j\x18\xb0\x12\xb5i=\x36" "\xe6N\xb5\xe0\xa7\x19\xf7~t\xe4kQ\x37\x35\xef\xb0\x39\xe8\x90\xcf\xa6\x1d]\x10\xba\xb5\x1a\x61\xac!\x03\x84\?#\x07\x00\x98.\x9a\xdc" "\xf2\xd1\x45\xeb\xf3\x05\x92+\xc4n\x08\x91oz\x8e\xb9:\xee'\x8f\xb5P\x1f\x17\x1a\x43\xfcX:n\x14\x8d)\xd7\\m\xc1\xeb\xa2\xfb" "\x32\xfeH\xdc\xafx\xd7\xa1\xe9~o\x9f\xc1\xfa\xd9\x02\xec\x1d\x38%\x80\xae\x36\xe2m-\xe3\x43\xbe,@\xad\x9e\xa7\xa4\xee\x1d\xb8\xe8i" "\x00\xf8\xd1\x46\xd1\x9b\xee\x33\x19L\xd2\xbc\xa8\xf8\xc2\xb5\xfc\x8a\x90V\x18\x37\xd6O\x92\xe8\xe2p\xdd\\\xf1X\xfe\xd1\x1dV\x18\xf7\x43\x9f" "\x1d\xf0\xca\xc5\xd8%\xb3\x87\x44\xbd\xc7\xd6\x12%m-@/*;J\x1c\x32^\x11\x39\x96s\x9bj\xc3)\xf6\xb9\x31\x15\xe8\x36\xa6=" "\xef\x00\x81Y\x1d\xfd\x82l\x8fW\x39\xaen\x99\x63[P\x9d\xf5]\xac\xee\x98\x8e\x0f\xa0\xf6P\xbf\xc8>\xe0\x0c\xb3\xde\x35\x93\xeai;" "\xa9J\x1b\xc3\xf1\x8a\x8eq\xef\x93\x17\x8c,\xd3&\xe6\xdc\xe9#\xfa\xc0\xb9\xebs\xa0\xce&\xdbY\x35\xd6\xea+\x8bT\x1f\xf3>\x84\x18" "\xb7\xf1y\xa9\x92g{@\xe7\x8d\xed\x04\x41\x35WG oJ\xd9\xe6\x85Q\xf2\xea\xd3\xa4\xb1\x02\xc4`\xaeL\xda\x02\x98P\xc9\x1e\xa4" "+\xca\xc3\xb6\x65\xc6\x9e\xb2\x37\t\x66j\x1e\x92\x83S\xde\x11w\x61(\x8c\xeb\xb1\xde\xf0\x8e;\x41\xe6\xd8\x18W\x12\xfb\x8d\xa0\x82\xb8\xb7" "\xd5\xd5\x9eG\x80\xf8\xa8\xbe*$\xbc\xb4Y:\xef\xd7Rj\xfb\xd0\xeeu{\x9d\xa0x\x96K\x0b\x83\xe1\xa2\x38\xc2\x91\xf3\xc9\x45\x61\xc0" "\x82\xf9x\xd8\xbf+\x65+\x33\x38\x45\x64\x43\x8e_\xd2\xdf\x0c\xc4\x1d\xcfp\xab\x92\x8b~\x95\xf0\xb5zSm\x87\xb5\x9e\xb6'\xb0g|" "\xa3|Y\xf1#\xe7\x1d\xd4\xd1\xb8V\x07SkX\xce\xed'\xfc\x39\x62\xfcmy\xd2\x04\x9dp\xa7\r\x64\x15\xbaH\xe3\xa0\x98\xd6\xaaO" "z\x99*\xe1\x99\x0bH\x46m\xdf\x41\xef\xa9\xeb\xb6'\xac\x1az\xf5\xc3\xea\x1en+\xa3\xf2\x9eW\x05\x9e\x98\xf3\xf1\x42\xce\x1c\xe1\xa2\xd1" "Q\xef >\xbe`\xf0'\xab\x08\xb7\? \xbe\x65\xa4\xf0=\x85!\xde\x0b\xb7\x61\xcc\x1c\x18\?\xb2w\x0b\x61\xf4\xce\xce\xe8\x07\xa7\x8c\x14" "\x98_\x0f\xb6\xe4@\x8b&&\xe8 \xe6\xc6\xfa\xfa\xfc\x04\xc7\x66u\x1d\xa6\xfd:,\x97\xed\x80\x33Gx\xf2\x03\x1f\xf4TW\xd4\xaaW" "\x90[\xbc\x19\x9a\tt\x63\xed[\r\x63\xf3\xf6+Z\xe4\xde)\?\x0fNR\x8b\xfb\xde\x1dl.M\xb9\x9a\xb4M\x45\xa8\x96\xeeVl" "\x8b\xb7\xf5M\x89pH\x17\xa1\xd6\x65\x05\x34\xc9\xb9\xe9!\x7f'\xa1\?\x1du\xa9\x98\x1fSO\xc9\xae\xa5(\xa9\xce\xff\xf9\x65o\xa1\xee" "\xeeu\xa5\x8b\x92L\xac\xd9\xca\x06\x19o\xa1>\xa9\r{\xb3\x45~\xd9s\x36\x85}\x7f\xe2\x98\xf2m\xae\xed\x1c\xb0\xde\xf0u\x32\x31O" "V.\xae\xb6.m\xea\xd6\x8b\xf9\x13r\x42\xef\x1b\xf4\xca\xc8\xc9Q\xcc\xb4(\xc9!\xcf\x14\x93\xb7\x94\xf7\xaaok-u\xfd\x07\xfa\xed" "\xdc\x0b\x32\xdb\xb6)\xc8\x1c\xb5\xa5\x94\xa7\xa0\xce\xe1\xc5\x41\x1b\xab\xd7i\x8d\x1d\x92%\x95\x07\xd8\xa0\xe1\xdb\x62\xf8\xf3u\xbch*\x36\xec" "\x01/X\x83\x88\xaa\x8b+\xc0\xef\xaf\x0fT\x8f=\xf5\xee\xdb\x39\xa9\xab\x8a\x38\xdb\xed\xc1\x9dX\xf3\xbb\x13l\xa0\x61Pi\xdf\x36_k" "q\xcdP:\xbc\xa8\x84\xac\x99\xf4`\x90\xa4\x32\x03^\xf0\x02\xcd\x1c\xd2{\x19\xa5~\xaf\x8b\x19\x95\xf5\xc7\xa2\x1b\xc3JT\xa0\xad\xa9\x8b" "\xa6\xf4\x04\x94\x02r\xd0o\x1ay \x07L\xdb\x14\xb5\x94\x19\x63h\xcboJW\xb4\x9c\xde-p\xc8\xdc\x31\xc9\xc5\x38\x19\x93\xc1\x96\xa6" "\xccQ\x94\xec'\x8a\x99\xad\xc5Y\x1b\xbf\?\x90z\xa6\xfd\x39\xb6\x31\x19\xac\xe9\xc5\x93\xb9\xf6\x1d\x85\x62\xbfw\xf2\x05{`\x94z\x66\xf2" "\xf4\xad\x8c\x89#\xc3\x05\xefO\x8c\xcd\xa5;\x37\xdc&\xcf\x30\x9dX\x13\x9c\xa1q\x04v\xa4\x91\x1ct\xea\\\x30 ,\xae\xb6]@\xa7" "\xbc\x7f\xef\xf6\x84\xf7\x64_[\xf0N\x97\xb1M\x01\x46s\xc3/W}\xd3\xef\x83\x62\xd2\xac\xa0\x41w\xcao\x18\x1d\x85\xa7H\xcb\x15\xb7" "+\x66=\x08\xec~\x1f\xf4{\xe6\x89\x04(\xf3\x8a\xdf\xf0$\x9d\x38\x1b;\x00\x8b\xc9S\n+\x62\xf7\x65+\x34=\xa5\xc6\xf4\xc7tJ" "\x43\xc7t\x11Mh\xd8\x45\xef=\xde[\xf2S\xdah\x1f\xb7s\xe9h\xc6\xae\xf2\x0c[\x92\x1a\x33\xca\x9c\x1b\xf5\x1d\x97s\xd1\xc5\x01\xbf" "\xfd\xed\xb4\x03\x0f\xee\xaf\x02l\xf9-\\\x18o\xfb\x41\xb0\xca\x33\xb7\xe1y\xb8\x8d\x63\xaf\x87\xdd\xaf\x12\x86\x99\xb7\x0b\xc4&\xbbG\xc6I" "\xfb\x35/\xd6 \xa3\xe4\x95\x93\xac\x84\x33'\r\xb2\x15\x0f\x08\xdfK\xbe\xef\xb6\x06\x63\xdd\xde\xf6\xd0+z\xac\xf0\xb0\xedx{QuR" "\xbd\xbb\xa6\xec\xc3W\xe3\xba\xa3\xb1\x01\x8f\xbe\xf9\x03\xd3}\xa1\?S\xb7\x91\x44_\x15sR\xb8<\xe5\x99\xbe\xfe#O/\x33k\xedS" "y\xc5\x8b\xba\xa0\xadjrq\xf5\xe9\x36%l\x8b\xa2\xbb\tWW^\xa3\xd9v^\xc1Ih\xfc\x43\xbc/\xd8\x1b\xd6j[\x9e\x06%" "W<\xe2@t\xd6[Yt:\x9bp\xd1\x8cy\xc4\xe9\xeb\xf1\xe4{l\xc0t\x45\xadKk\xc4\x91\t\xdfs\xe4\xa1\x94]\x0c\xf2j" "\x93N\xc4\x82>U\xd5T\x66\xda\x1bk\x88<\xd5\x45\xde\x1f\xa2\x9d!-L\x05\x9b\xfe\x92\x43\xd0\xb3\xe6[\xf0\xf2K\x1fI\t\xdcq" "\xa5\xea\x05\xb2\xc4N\xb8/\x42KX\xd9\xb4\xc9\x63\xd7\x98\xae!(\xac{\x96j\x36k\x8a!\x32\xean\x8a\xa2,\x1ai\xeb\xeb\x97\x37" "[[\xba\x05/\x95\x8c_%\x17g=@p\x02\x10s\xaa\xe7\xa8\xaf\x96\x1f\xf4\xe7\x01rM\x31\xb9\xd4\xb6\?\x42\nK\xdbM\xa1\xc5" "`\xa3WQp\xdf \x19\xd4Wl\x35\x83\xee\xfd`N\x97\x1b(\xa2\xd0!%\x87R\x04R\xf6\x0e\xaar\xa3\x98\xf7\xfe\x17\xe5m/" "o%\xb7\xd0\x88\xcd\xc2\xcb\x92\x62\x66\x37\xf1\xa1\xab\xfb\x94\x7fL\x18_u\x03+\xc1\xea\x31\x9d\xaf|\x03\x14\xab\x85\xd6\xfc\x1d\xdfG\xf9" "\xcc\xd0\\/\xf3\x85\x30~\xac\xbd\x1b\xc7\xe6\xed\xd7\xbb\x62\x65\x17\xed\xcc\xe1\xd7\x97\x82\xc2\xc4)Y\xc4\xb4\x82\xe4N\xd0V\?y\x1a\xbe" "~\x10\xe4\xb3Rv o\xec\xac\xe6\xf2\x8a\xf7\x8c{j=zl\xc9@}@\x82\xf2\x82iJ\x90\xb4\x33\xbf\xb5\xe6\t\x8b\x16\xe0\xea" "\x1b\x9epK\x92\xa0u\xc9\xef\x9aR\x1b/\x36\xda\x8a\xe5\r\xef\x84\x82\xa4\xdfwH\xda\x95\xcex\xb7_\xa9\x9e\x82\xdf\xc4\x38\xf8\r\xa5" "{\nV\x80,x\xaa\r\xa2\xa3\xabG\x8d#\xd5\xb8\xd7\x99\xcdy\x15\xa9\x36&\xf8\x36\xe0\x96\x85\xc7\xa3[L\x89\xb8^|\?\x65\xd2" "\xc9\xe6\xfc\x34\x38)\\zY\x8f\xbe\xcc\x1e\x1d\x36\xed\xa4\xaf\xa0\x10\xf4\x97\x66\xca\x39\xaf\xb8'\xe5\xa7\xb2\xca\x00\x8c]\xad\xe3;+\x92" "l\xf8\xcb\x97\x96\x04\xfa{\x89\x18\xdb_\xf5\xfc\xac\xa7\x93\xb5&\x92i\xea\xd9\xfe\x8b\x46'\x83\x8d\xa9`[X\x8epy\xb8\xed\xf5\xda" "\xef\x37\x0e\xda\xf5\xc3\x9a\xb7\x46\xbd\xce\xb7\x37\xef)X\xa1\xcf\xdb\x9a\x93+\xe1\xe1\xba\?\xa2\xda\xaa\x30S\x8f\x90\xd0\xb9\xd3\xf0S\x30\x46" "m\xc3[\xf8\x89\x61\x30\xeb\xe4\x46\x8f\x87V\xda;'\x90i\xc7\xb0\x64:\xd6\xe6i\xbb\xbd\xeb\xcf\\\xda\x9b\xedJ+\xa7\xce\x02j\x44" "NLQ-\xb9\x89\xd1pH\xf5\x81]]\x66\x31\xa6\xb3\xc6\x0c\xee\xb5%\xbb\x11\x06\xb8\xf8\xed\xd0H{\x35{\x65\xc0t\xb4\xe4\x9f<" "\xa7+\xb7\xd7\xe7\xd4\xe1\x8e\x1c\x0f\xf4\x18\x66g\x91\x39\xeb\xd8\xd3\x96\xc9!;\xce\xe8\xb6HI\xbc\x81H/\x61\xd4\?]\xf2&\x65P" "\xa9\x41%\xc2\xb9\x92\xd7\xa1\x36\x63^\xa1>\x9c\xf1\xcc\xf3@\x91nI\x98^\x9f\xed\xf4\xe1\xec\xa8\x62\xe3\x1a\xf0L\x03 \xb4\xb1\x39\x1a" ".\x92\xad\xbe\x31\x7f\xc6U\x35X\xec=\x93\r\xc2\x0c\x38\x9e\xcd\x8e\x91\x02\x42\xa3\x45\x9c\xf9X\xa9\x92\xbc\xfa\xd8m\x84\xad@\xc7\xbf'" "\x81\xa7\xbf\xb3\\G\x1a\x33UYq\xd2~\x45\x89]n\x9e:\x16\xb8\xc2Iu\xdc\xdb\xff\x37\xfd\xf5:\xbaj\xb9\x92;\x95$\x7f\xc8" "uo\x39\xe6$\x01g\xd6.\xe8HRN\xf3\x86\xd2\x84\x35\xbe\x42\xa7Z\x80S\xcas\xba\x9c+\xc7Q\xdb\x42\x83\xf3\xc5\xee\x9f\x36\xfd" "m=\x92\x80\xec\x04\xa9/{\x13&'\x85\x63\x31_\x18H\x1f\x66\x01\x87,j\x86\x07\x1cK\x46\x62q&\x99\xfa\xbd\xbc\xec\x97\xba:" "\xe4\xbdS\x97\xbd\xca\x82\xdc\xd7\xf4\xe4#\xfb\xb5\x37\xe1L\xd2\xdd\x37\xa1\xf1=t\x07\xdd\xb4\x0bVmt\xae-Vm\x10\x83\xc3\xa0\x9a" ")\x90\xaf*W\xeb\x19\x34\x43/\xaa\x45;z\xaa//\xd3\xd6\xb1%\x31\xd9\x16\xd4L\xa3\x35\x90\x64]\xeb\xb2\x9dG~\xb8\x9c\xec\xf5" "&\x44$\xbd\x13\"$\xb6\xfa\xbcm\x0bO\xc8\xc0l\xd8 \xe9\xd2\x90\xca\xa3\xc6\x82\xcc\x0e\x99\x83-_\xc6\x9d\xd1-\xea\xbd\x33\xe8<" "\x1e\xb3\xbb\xeb\x39O\x39\xb0\xe0i\xf1\xe8\x03\x43\x65\xfe>\xe4\xb7\x66\n\xdb\x45\xaf\xea\xa4\x1bv\xe6\x82~\xc9+^h\xe3\xaa\x64\x12\xe6" "\x0f\xc9@ \\\xe4j\xdb\x44\xb4r\xfa\x8a\xa8\xad\x14\x92\xe6\x31\xb9\xe0\r\xdf\xa4s\x31\xaaX\xea\xf7zH\xb0Wz.P\xbb\xb6<" "@ u%$\xea\xe8\xfd\\\xfa\xdbj\xf2\x95h\xdc\xec\xb3\xde]\x30\xa8'=\xc8\xebI\xaf\x1b\x8f\x1f{\x91\x62\"\xe1\x8f\x86\xc5\xa4" "\x87\xf3\x44\xc2\x8fl\"\xe1\r\xf5\xbd\xeb\xe6\xc8J\xccg\x41\xcc\x8b\xb4xz\x9d\x9f\xd4^\x46\x8e\xe7\xd2^\xb5\xd4\xdb\xed\x8d\x1e\x65\x02" "\xeaY\xca\x84y\x62\xc0\x1c\xcf\xe5\xb2\x1f\xc1&=\x36\x1b\x88G\xe3\x92\x18\x30\xa7\xee\xe8\x9d\xca~\xf4_\x66\x11\xf3\xae:\x9c\x14\xe5\x41" "i\xcbs\x04\x06\xa2\xfd\xa3\xb6\xe2}\xd8_\x1fLz\x87\x10\xd2\xd7\xf3\xefZ\xdb%o\xcd\x9f\xf3\x38\xda\xbc\xbf-\xd6~\xc5\x10\x34\x8f" "\x0f\x82=\xdd\xfe\xfe-\x99t\xd4\xdf\x96\xc3(\xa8r\x82\xaf\xcaiY/\"\x46\x63\x33v \xb1\xfd\x62\xd2\xce\x10\xb3\xcd\x04\x9b\xfe\xba" "\xbd\xcbN\x99\x89+\x1a\x19\xa3\x0f\\m^X\x61\x32\xed\xdb\xd9::\xef\r\xb9\x93\x17\xdb\x07\xde\xca)\xeb\x46\xd0\xa5z\x84K\xfe\xf6" "\tM\xc1\xf0\x90\xbc*UM\x90/x\x7f\xb1\x8d\x1eo\xbd-\xe7N\x05\xeb\x30\xd0p\xc7\xe6\x11W\xb6\x1d\xe8\xe1\x02\xc2\xa0\x64\x08\x03" "\x39)\xe9\x15\xeb\xc5\x46\x34$\x8c\xad\x1b\x1c=\xa5h\rV\x95\x9f\x8c\x37m\xb9(\x02\x88V\xc3\x96\xb2H\n`\x1e\xac\x00\x92\x9e\x1b" "\x8c\xcdy\x19u&\xdd\xe6=\xb7\\L\x65\xf6|\xc5+\x81.\xad\xf9\x99/$\xda:\xd6\x9c\x39\xd0\x12%m\xfb\xa2\xb8\xdc\x9e\?\xdf" "\r\xe4\x64\xb3*\xb7\xe1\xac\xa7>\xb9\xa5\x34l!\xbc\xefv\x66\xc3\xf0\x83m\xa4\xca\x00\x34\xab\x9e\xfd\xca\x0f\xba\xa2\xda\xc3\x07\x13&\x61" "\x92\x9ez\xc1+,\x88\x1b\xf6\x04l\xd5(\xa7\x17\xe3\xb7\xf7\xc3\x84\"\xfe\x42\x96\xb8\x61]\x42\xf2\x63\xb8\x0c\xcf@\x44wt\xee\xec\x9e" ",\xe6\xb1o\xce\x64\xa3\xcf\xa8w\xc5M\xf6=&{p*\xdc\xed:\xbb\xdfW\xc9\xe7\xf2\x0c\x13\x81\xbdI\xab\xf6\xd8\x46\x82\xee\x04\x86" "{\xb6\xcb\xde:\x19,\xcf\x0c\x30\x35\n\xec:\x93\x1d\x8e\xa7\x88}\xf4\x61\x9eN}\xa9\x93\xe9\xb0\x1d'\xeaT\xc7\xd8\x31&\xbdq\xd2" "~\xd5\xceV\x34YQ\x92hj\xb2\xe6wY\xdf\xa9\xd8<\x83\xde,N\xb6\xd4nM\xae\x10\xb3)\x02\x41_\xd4T\x1fr\x90YS" "V\x64R&\xe6\x93j\xf1\xd0\xcc\x01\x43'\x95%[\x38\x0e\x84Kn_\xa3\x83\xde\x81\x66\xb1\x0e\xb1Q#M\x9d\x9a\xcb\x02\x39\xde\x9f" "\xc9\xe6\xed\xb3r&\x1b|\x32\x16\xe8l\xe9\x66\xec\xa4\x92\xd0\xec\xc7\xae\x1e&Ow\xb5/\xff\xb1\x35\x38\xe6\x99\x0cN\xda\xaf\x80\xb2\x14" "\xa3\x03M\xfd\xb0\xcd/\x9c\xa8I\xb6\x64q\x96\xc2\xcd%\r\xc4\x34\x18./K\xee\xc4\xa8\xc5o\x42\x0b\xbeZ\x31o\x81\x98\x08\xdc\x1a" "\xa9*\x38> \xe6\x9f]\xc4\xab\x33\xdeq|\xb6I\xc2\x16\x97-\xc7h\xe3\x80\x12\xf8\xc8O\x1b\xde-\x1drx\xec\xc0\xc5\x62\xf2\x17" "\t\x32\x31\xbf\x85\x35I\xd8\x65\x11\xaa\xd0\xbd\xe6\x86\xc7\xde\xa1\x32\xa8\xd7\xbcyjl\xcb\x96\x96\\\xc3\xda\xd7\xeb\xa2\x63\xa5T\xd3+\xe6" "\x8b\x41\xbf\xa6\xd5\x05\x31\x30\x97\x88\xd5\x43\xdf.\x0e\x37\x8d\xd4\x42\xdc\x91\x39'\xc4\x87\xa2\x61\x39\x87\x8cM#\xa7\x1bS\x43\x36U\xf9\\" "<\xf4\x8c\x64\xd1;\xa4\xd1U\xba\xb5\xcc\xe5\xf4\x19\xd8\xccT\xe8\xb2l>\x8f\xbb\x7f\xe8Q\x9a\x90\x33\xd2v=\xe1\x37\xfe\xe5\xda\xa7\xbb" "\x61\xd8\xbc,&p\xd2~\x35\xd8$\x19\xe0H\xe7\x38i\xda\?Ir\xc3m\x93\xd8\xb2\xcb\xab\x36)\?x\xda\x1f~]#w\xf4\x1e" "\x1a\xff\x62\x16\t\xc2$\xf5\xb5\x8a.\x65\xbd\xc8\xbc\xbd\xebU\xc3\x83\x07Q^=\x62\xcc\x8d'\xe5\x83VP\xfc\?\r\x05\x14.O\x46" "\r\xa1\xfa\x10\xf0\xda\xae\xdc\xea(\x8b\xb3\xd7\x1a\x9fX\x34\x61\x96\x42\x10\xccT\xec\x0c\xf3\xea\x88r\xd3t\xb5'\xd5\xaeV\x8f\xf4\x1eV" "\x0b\xa4}U\xae\xcc\x1a#\xc9\xd5\xbc\xd9\xaamU\nP\x32\xab\x65\x97}\xa0,\x8a\x8f\x64\xfe\xa0\x38RU|\xf7L\xdd\xe6\x34!\xaa" "\xb2_\xe4\x0f\xcb\xd0#\x0b\xb8j\xeb\xe7+\x64\x86\xe5\x02\x43@(\x85\x1a\xb8\x0f\xf3\xe7\xeb\xee\xf1\xfcW\xba\xcf;\x9dO\x1fyL\x03" "\x9e\x8f(\xca\x0fxU\x05x\x1d\xbb\xd8I\xe7\x80\xb9\xba\xecy\x9d\x00qM&Lm\x97\xfd\xcc+\xb3\xe1\xba\xb0^\xe1\xf0\x98\xf9Q" "\x06\xd9\xc9\x36\x8b\x31\xef\xfa\xd5\xe6\xba\x30`\x1e\xf7t[\xd6\x34R\xd3^\xd9|R\x05\x91\x18\xb4j\xad\xde=\xe3\x36\xa8\x05\xee\x62\x65" "\xc8\x8b{\x90\x12MOSOx^!\x7f\xd0Z\x36\x37\xe5\xb2]\x1d\"/\xe4\xb8\x9e\xc8`\x1b\xec\xfc\x97\xa4\x32\?\x14\x66H;\x36" "@\x85\x13\x1a\x12\x66\xb6\xedQ\x66\xbe\x31\x98\xbe\xb1\x8e\x89u\xe2\x9f\xe5\xc8\x98\xf0\xc4\x84\x84\x36\xf5N\x18\x1b\x8f\xa6\xe3\xa6\xe2\x32\xbbS" "\xab\xa7\xea\r#\x89\x1d:\xbcy\xae\x8d\x46\xdb\x05t\xd0\xa4#\xca\xe5\x82%%\x1b\xc9-\x42M%.\xa7\xb6\x0b\xa1&\x37\x0e\x18X" "\x38\xb7\xe1\x9d\xd3t\x65\xcb\xae\x91\x8e\xb5\xc9\xde\xbe\x85\xa2\x8a\xc6\xe2\x61U\xad\xb4\xc9\x98\xd7!\x65\x86\xbc\x7f&)w\x13\x46\x64}\xc7" "@\x63S\x88w-\xb5\x1d\xbd\xfa\xbc\x7fo\xb2\xab\xad\xe1\x87Xi\xa6\xb9I\xef\xe3Z\xd9\x34#~\x90\x39nG\xcdi\x12\xcd\x97\xc3" "\xcd\xa4\xde\t\x93\x08\xe9\xf6\x99]\x1c\x41\x96m\x8fX#\xa8\xab\xc5sk\xdbmH\x92\x44s\xce\xaa\x14\xcd\xa5\x90x\xc3\xa2\xaa\x16z" "\x86\xc8\xa5W\xc6\x14\xb3\x90ut\xe9\x30\xb1\x62\xe0\xf4\xd4~.m\x05H\x07\x96\x30\x8e\xb9n\x31{h\xa4\xda+\xdd\x33X\xafi\xbb" ">\xc8\x1a\xad\x82\xae\x63\xb8\xe7\x19L\x30\xdc\xb6\xca\x34,m\x81\xe8V\xd2\xb8\xeby\xa3|\xc4~\x9b\xd9\xb4\x31\xeev\xd5\xde\xb7\x90\x88" "v\xbd\x63\x96\xf7n\x9aY \xdb\x38\xb7P\xea\r\x46T\xf3\xb8\\\xa4\xeb\x1f\\m\x31i\x83$$\x37-\xe5\xdc\x8a\xb9\n\x9f\xd4\x96" "\xbc\x1e\xf9x\xd8\x18x\xe4\xda\x9a\x80\xb6y\xfc\xa0\x30\xaaJ\x39\x06\x66\xfd\xa6\x81\xa0\x97\x9e\x31\xbb\r\xddvN\xed\x99u\x0f\x8c\xfb\xa9" "MM\xee\x85\x00\xb4\x9a\xbb\x82\x99\xae`\x35\x46\x1a\x39\x11\xb0\xe2t\xc5uY\x35\x43\xa3t\xc6k\xa0\xde\xd3\xb7\xb6\xf7Z\x83\xa3\x1a+" "\xf8\xd4\xb9\xb8\x7f\x44\xa7\x82\x04\xee=u\xdc\xe5\xf6.\x97-+\xff\xa8\x46X\x87\x36\xc8\xe3<]\x9a\xb2\x05K\xa5\xf4\xa3\xc6\x43\x1f!" "\xaa\xe1W\x42%p\xd2~%\xac\x64\xde\x9f\x15\x92\x64u\x83w\x33\xabuy+v\x33i\xf4)\xe8N\x85\xbd\xe6\xb8\xe9\xa3\x07R\x94" "\x00\xc1\xc9\x82\xf9oH\x92M\x45m\x43O\x37ii\xdb_\xf5\xc4\x8a{\x89{\x63\x12\x07\x90.\x93\xb7Q\x91P\xa5\x8a\x11\x0eX\xa9" "\xc4\xba\xbeh\xba\xa8\xa0\xdc\xe7\xdd\xb6\x93\x43>\xf8\x02);\xbch\xe8\x37\x90\x18|\x38\xd9\xe5-\xb0\xa4__P\xb3Jj\x96\x38'" "\x1e\x64u\xc6GM\"I\xaa\xac\xe3\x1d\xf4\x34`p\xcal\x34Q\xe1\xd0\xd4\xe6\x61%\xd7Z\x1e\x33\xc2\xee\xfdYV\x96\xa3\xf4\x9a\xcf" "\xf5\xf1\xb4\xbc\xca\xc6\r@\xd6U\xd5\xd8\xa2\x8f\xbe\x17\xe5W\xbd\?\x08\xe6\xa6{\xdf\r\xa6,\x80M\x30W\x0fw\xed\xfc\x1a\xf7n\x9d" "\xe0\x95\x32\xeaV\x30;hgh\xabRm\xf3\x1f\xe9\x36\xe1\xde'~O\x88Z\x9f\x97uw\x66}\x81\xa1\xa9\xf6\xc5\xd5\xa1p\x7f\xde" "\x36q\xfb&\xc7\xb8gR\xb3\xa0\x85\xfb\x9e\xc4\xe9\x35\x04\xe2\xd7\x46\x65\xe5\xc9\x61_/\xea\x10*\xea\n\xb1\xcb\x92\x92\xc3\xba\xbf\xa7\x1c" "N{\xe8\x90Z\x44I\x06\xe9\x10\x07G\x8d\xf4\x1b\xad\"+\x9c\xf1\x63#^\xb3\xe3\xfa\x13\xc0M\x1f\xb5\xaf\?\x81\x1dM\x91]L<" "\xc8\x64\xda\x7f\r\xd1\xf6\x97\xb0\xc5\xa7v\x34\x08\xfa\x46\xefYi\x87\xbc\x36\xcf\xaa\xc7\x83l\x93 u\x39#\x61\xf7t\xb8\xb2\xd6\x8ex" "|\x86\x35\x1e\xde >\xf7\?\xf8N\xf3\x8c\xb5\xdd<\x88\xbf\xb2\xe8\xccg\x46\x96\?\x04\xa7\xaf<\xb6/u\xaa\xa3\xfe\x1cG\x04\xb8|" "}H\x1e\x84\x9ar\xc2\x32\x86\xfc\xc7\xcc~u\x86\x08\xf3\xd8\xfc\x65L\x05L\x98\x64\xf7\x90\x07\xe9\xe5\xfa\x62\x92\xb6\xd7Ms\x61\x92\xa6" "\xc1\x04/\xd3\xcb\xff\xb1\tR\x0f\xa9\x90.I\xfb\x15\xc9r\x61\xc0_\xd2\xe0\xa4p\x00\xc6\x9f\xa6\x46\xbd\x9f\\\x61\xdfT)n\xea\"" "\xf1\xfa\xb2\x0fG\xbc\xea;\xb9\x12\r\xa9w\xcar\x96l$\xc2Nl\xd1\x1cT\xddl\x05\xc8W\xdb\x42\xab\xa5\x46\xedp\"\x45\x83\xe9" "\x98\xf7\x8f\xfcN.]\xb4\xb8\xab\x41\xb6\x11.\x0f\x1bz\xf9\x9b\x90\x63\xe3\xde\xc8\xd9\xe8k{\xd5O\xfb\xdbQ\xe0y\xec\x82*\xbe*" "#\x42\xaa\x30\xef\xa1Y\xb7\r\x45\xa7\xa3\x9d\x8a\xd8\x45\x66\x0e\xebo\xb8\x81\xac\x9d\xe2v\xd5\x97\xc4\x13\xbd\xd2H\xd7\xe0\x8d\xb0\xcc\x0e\xfa" "(\xa6\x14\xe7\xd9\x02\xc6LzY\xaa\xb8K\x01*\x39Y\x8f\x19H\x00%\xef|\x88\xcd\x98Rv-\xdbm#\xa3\xab|\xfe\n\xcb\x38" "\x89\xdbR\xb6\x64\xac)\xa8u\x34\xda\xaf\xaci\x9e\x82\x87\x32\xd4\xb1\x1b\xf4`\xa7\x63\x42\x0f\x04\xd3\x19\xd2\x14\x94\x8d\xa0\xf3\xcb\xf8\xd0\xf5" "\xa5\xd3l\xb2\x39\xe1\x80K\xb0\xd8|)\x0f%\xbaz\x31k\x9e\xa4\x0b^\x03zi\x11(\xa8\xb9\x07\xc1\xfc\xae\x1d\x98\xa6\xe1w\xb5\x38" "\x05\xd8\x92\xd3`\xd3G \xa9\x36\xcd\xd9\x02\x9c\x95\?Z\xaa\x15\x7f\xd2\xf5\xf7z\xc6i-g\x04\xb6\x1f\xda\x30\xcbk\xfa" "\xf6\xc3\xa9\xd2U\x8e)\xed\xdf\x8c\x38U!O\xce!\xfe\x65\x03}-\xe1\x34\\\x39\xa0\xc0\xd9\xf5\xd9\x05\x92\x9d\xe9\xc7\x15\xc7\xfc\xec\xcf" "\x00\x15M\x91/\x97|\x94'.N\xd5\x84@y\xbc{\xb6\x1f\xba@\x93\xfb\x0f\xea`\xdb\xb8\xe1\x98\xd6\x39s\xa2'\xd6H\x30\xe7:" "\xedW/\x1e;`\x62%\xcbjP\x17l;;\xb2\xfe\xde\xd3\xb8\xf0\x1f\x8c\x85\xa2\x0c\x64\xfb\xf5\xa3\x95\xbd\xec\xc2N\x90*\xf8\x31#" "\xf2o\x62\x9ci\x37\xeaj\x12i\x94\xc7\x41\x1e;z\xaci\xf4(\xe3\x9c\x64\xd8\xaf\xbd\xf1\x41\xcf\xd0\xf0\x91\xc2\xc9+\xd8gY\xe3\xaa" "\x93\xd4\xa9\x62.\ry\x45\xed(\xf5i;\x65(\x94\xa8\xc9\xd9=>\x88+y\x9di\x98\xf7p&G\x61\x1b\x65\xf5\xf3v\xc9$\xea" "\xee\xf1\x9a\xba\xb4\x0f\xc1\x12\xa4\x66\xdc\x8e\x9a\xe7\xf2\xc2M\x86\x13\x89\xe0\xa2i\xdf\x87\xdc\xf6\x92\x1d\x94\xa6J\x8d\x86/\xd9\x11\x03\\\x35" "\x19\xd7\xf5\x1f\xd2\xfd_\xe9u\xc7\xc8\x0e\x89s\x31\xef\x12n<<\xdd\xd7k\x98\xc7L\xb7\x8d\xd0\xa5\xd6\xbc\xae\xa8\xdck\x32n\x38Y" "\x0b\xab\x1aV|\xfc\x80\xe4k.;\xbc\x1e\xac\xc5\xfd~\x31\xa3O~\xd9\x66NP\xb2\x8b\xd9\x1bS\xc1\xbc\x9e\x32\xf8\xaa\x1c\x45k\x66" "\x91,]\x9c\xc4\xb0,\x32qr\xc9z\xc3\xc2\x44\xcd\x1dO\x62tM\x88J\xda\xf2$\x97\xac]\xc0\x83p\x82\x93\x93\x43^\xfd\\\xf1" "\x92z\xb0\xd0\xe3\x0f\x91\xec\xbc):N\xaaYK\x12\x46\xe8,\x98\xdf\x14\xf7\x61\x0e=\xa5\x1a\x80\xc5\x63\x0bs\t\x38\xb8\x91m#\xb2" "\x66Ik\xc5\xf6-t\x02\rk\x45\xcf\x88\x95\x84\xd7V\xcd\x94\xdd\x45=\x91V\xe7\xa3\xe1\x98\x11\xd6\xa8O\x95u\xda\x15\x91\x36\xb3\xfe" "\x62M\x96\xf4\xb2\x30\xa4\x8d\xd4\x80o\x7f\xae\x8b\x1a\xe3\x13)\x43\xf7\xfe(\xbe\x0e\x7f+\x1c\xb8\xb1\r\x83'\xb0\x8e^\x87R,\x8e\xd2" "\x9b\xe4\x63\xa3|\x1a\x11\x98\x95=\xdfS\x31N{\xae\x8d\x19\x18\x18\xa9\xcf\x90=\xa6G\xd8\xfa\x00\x9d\xa8m\x97\x8b\xd6\xe2\xac\xdd\x04\x95" "\xa4\xfd\x8a\x30\x1f\xf7\x1a\?I\xb2\xb6\xd0\xb3x\xd3\x31\xef\xfdyQ\xf9\xa5\xa9=\xd3\x7fQx\x19\x33i$W\xdc\xa4*l\x92\xb1V" "I]\x8e\xb3>\xfa:\xd8\xac\xb0\x39\xe3O\x61\x61\x0e\x0e\xcc\x8c\xdb\xaa\xac\xd9\x05\xe9`\xe8\xd8{\x8e\x8e\xb5\xf9\x9a\x95!k\x46~/" "\x95\xbc\x9an\xbb\xe6\xe3\xc5\xe6\x1a\xa7\xfd\xc6R\x16\xb5~\xc8\xdf\xb5\xa9\x1f\xe9\xd2\x1c\x99\x8e\x9e\x1c&U\x9bM\x81\xda\xf8+\xfe\x1eV" "\xc4(\xe6\xfc\xf5\x98R\xc2\xc7\x63[\xdbo;\xfc\x8e[\x64\x1e\x8aSl\xbe\xed\xf5\x9a\xe7q\x17\xeb^\x63\xda\x38uS\x46\x7f'/" "z\xebJ\xca;\x93\x90\xae{L\x83\xb5V\x8f\xbd\x46\x16\xbf\x1b\xab\xb6\x85=\x33\x95\x98$M/O\xa5\xda\xe7\xbd\x9e\xab^\x1fi\\" "\x33\xb2\xac \xa9\xd7r\xfej\xa5/\xd8\xf4\xa6gj\xc9$\x8d\xc9\xbc\x39\xfa\x07\x99!\xd3\xa3R\xdc\xf1S\x92\xa5nO\x9a\xdd\xb2\xbf" "\x43L\xf7p\x64\xb0\xca\x64\x82\x39\xd6\xe0\xf4\xe4\xb4\xa2\xbc\xbaS\x86\x8a\xc3\x97\xaa\xdb\xe2l[\xb5\xb3\x33`>\x01\xe4\xd2r\xac\x9e\xe4" "\xd5\xb8\x0f\t\x10_\xb5}sR\xb7\x88\x1c+>\x44x\x62\xd2\xdcZ\xc9\x8co&\x96\xbd\x03\xcf\xd4grQ_\x8fM\xd4\xe9\x33\x0c" "\x14\xfa\xa1\x61\xf7\x96\x86\xfc\x15\xdf\xfc\xa1_\xab\xec\x12\xc5\x33\x32T\xf2WX\x06\xfd\xac\xb0\x92\xeanI\x1c\x8f\x07v\xb7\xdd\xd6`\x83" "k\xce\xc0\xea\x1d\x42g\x07hiM\x44\xf1\x36]\x7f[\x94\xbe\x9a\xb2sv\xa0}\x65\xb8l\x1b#X\xf3/``\x95\xa3\x9e^\t" "\x8a\xc0I\xfb\x15\x87\x97\xfet\xdb\x8f*\xcd\x42\x31y\x8b,V\r\xee\x66W\xa1\x89\x1a\xf1\x1c\x9c\x32\x15.\x87\x06\x18\xb5\xa9\xb4\xa6\xf5" "\x02\x00\x80l.U\x10\?\xec\xde~\xcd\?\xa3\x42J#\xd5\xaa\xd0.\xb3U\xc0\xb0t\xc5$\xc8\xb3\xe4\xee\xeex\xfb\x12\xca\xaa\xc0L" "\xa2\xb7\x92u\n\?VPx\xd7\xd6\x83\xf1\x39+\xe0]\x65\xe8~\xab\x39S\xe4\xfd\xcd\xff\xc3\x85S\xa6,\xd2\x8f\x9a\xd3\x8a\x0fX\xb1" "\xe8\xc7\x9b\x1f\x34\x01\x14[\xd6\xbf\x1a\x93\xf3\x92\x08\x45{\xd5\x31\xb4\xfa/\xf9X\x32\xe3\x43\xde!}v'\xec\xb7\xfb\x07\x43\xde\xc3\x0b" "\xfc\xdb\x86\xee\xf0\xca\x80\x37\x33T\xfc\xc5\x15\x8e\xce\xb2\x66\x34\xc2Kz\x63\xe3\x66\x89\xf1\xd1n\xfc\xf5\xff\xad\xb6\xd2\x61\xc9_\xb0\xcd\x1a" "X\x13^\xb8Z\x1c\xf4\xa3\xe8Z\nt\x95\xed\xd6\x02\xc1)\x9f\xf4t\xda\xae\x04k\x98#\xffLH\xa5-\x1eK\xadm\xf0^\xf2\xa9" "\x61\x37\xdag}\x10\x81\xb8\x0f\xaa@!\x9e\xb6'L\x1c\xb7\xa8\xf9\xf4\x9aI\xd9{,\x99S+\x99\x32\xed:\xd2\xa5Q\x8a\xcc\xa0\xd0" "\xb0k`\x34VS\xe0\x8eM\x83_\x93\xde.\xae\x19\xbb\x17\x35\x13\x66\x8e\x03+\xe7#\xf9o\x8ez~p{\xc2w\xb1\x30\xe4r\x07" "\xde\xc7\xd3\?\xfax:\x46k\x93\x42\x04\x82\x04\x9f~!\xf1\x14W\xdb\xd3K/;].\xb6\xaa\xbc\xbe\x01\x94\x39#\xb0m\xef\x87\xf1" "\xd8\x19\xcd\?\x35\x35\x36\xdf~\xe6\xf1\xb4-=\xc5\x32~\xa6\xfdp\xa4\r\xb5\xfd\xc6\xe4\xa3\x9e\xed\xa0\xc0R|\xf8s\xd2~\xdb\x87\x7f" "w\xfb\xf0\xe7\x0b\x07\xed\x10\xa6\xe5\x35\x1f\x34\xb7\xec\x63p\xd1\x1dX\xd3\xe4\x17\x8a\xc1\xa2j\x02\xe2\xdd\xde\x9cxq\x89\xe2=\xcbZ\x8d" "z\x8d\x35\x36\x9f\x46Pv\xe9\x39\xcfy\xf7g|p\x81I\x1f\xe6\x85\x14\xbc\xed\x07\x65|\x14/\xe4zO\xb1\x65{\xda\x02|\xb8q" "\xe9\x64\x00\xb1\x16\x1a\r\x63:O\xca\xfdm)|\xd9\x18u\xd2\x94i\xe0\xd8 \xd6\xe3sw\xd3\x9e\x93G\x1dM\x82\x17\x8e\xd2\xc6!" "\x8c\xfaH\xa0\xe4\xbe\xd5\xf6)\x32G\xad\xe5l\xabR\xa5\xeb\xe2\xb2\x17\x8a'\xd5m\x12\xabx\x13I\xa0\xf9\x15\xbd\xf2\x33\xbfG\x80>" "\x8b\x10\xbb\xa4I\xe3l}X\xf4\xd1\xda\x85\xb1\xcb\x63\xd8\xe8\x9c\xdcZx\x8c\xebM\xe5\x92\x1b\xde\?\xdbN\x9a\x83Z]\xbe\x13\xd7\x38" "@k\x97\x43&\xc2\x95\xedG\xcb\xc7\x12s\xb1\x9d\xfd\xe8\xbf\xc4\xff\x62\xfa\xd8{ s\x92i\xad\xc5i\xe1p)\xaa\x34\xfb\xdf" "}\x9d\xf9Z\x1b\xcf\xb9\xe7\xdb\x8eQ\x87\xccMx\xecYN\xe6\x97\x9c'\xc9\x99\x9c\xd9\x97\x7f\xe7\x1a\x66\x15 \x1b\xf2\x63q\x10\xd8\?" "\x9fY\x1ev\x04\x42\x08\xb3\xaf\x06lV\x63$\x36\xb3\x0b\xee`.\x62\x0e\xbd\xe8\xaf\xdc\xc2|\?U\xdd\xa2\xb1\x9d<\x8f\xfa\xad\xea\xaa" "\xea\xaa\xb7\xde\xbd\xaa[\xdd'\x97\x35\xe2^\x1c\xc7\x8f\xfe\xe2\x96o\xa3\x87\xe7$\"\xb7Q\xc8\xbf\x34Q\xfb+$\x11\xc7jM\x88\xa3" "\xe0\x1ej\xc4{x\xc7\x37\xb5;}\x95\xda[\xee\x10\xed\xc2^\xa4\xec\xfb\xf7\x1f\xb2\x38\xab}\x00\x41j\x36\x7fR\xbb\xc7\xb7\x32I\xb8" "\x1b\xfd\x97\x8e\x7f\x1a\xcc\x0e\xd5\xbe\xac\x9a \xc6W\x35\xdf\x14\x44\x9f\xa6-\xc7{\xa4\x08G\xf4'\x65\xfe\x18:!\xfb\xcdW.\x66\xa3\xc0\xe7\xdd" "\x35/\xaf\x8e\xbe}\xc7\xfd\x38\x39\xe4\xb8N\xb1\x80.\x8a_\xe8;\xc1\xda\xfa\xee\"\xfa\xb3\xf1y\?\x66\x38\xbe\xef\x30\xc5\x37'j\x1b" "\xc4\x1a=\?\x19\xbf\xda\x82\xf5\xfaQ/\x37\xe7+\x13\xdf\x14|Um\x9dU\x9e\xfd\xb1\xf1%^\xf7lH\xb9t\xa3j\xf3\xc6\xf3|" "\x44[\x30!x\x88\xbf\xc5qv\x02\x0bW\x36j\x31\x45\xd2\xde\xaeO\x43$K\x83\x8b\xa3\xda\x87\x90\x93\xe1\xc0\xc0H\xd8\xf3\xad\xdd\xb7" "\x9f\xbb`\xef\xe7`\xda~l\xf9\xe1\xd3\x06\xde\xfb\xc9\xef\x0e(%\x17uT\xf6\x65\t\xb3\x96\xfc\xce\x8d!\xcf\xd6\x82\x7f\xce\xbb\x7f\xbd" "\xdc^\xb8n\x42\x32\xf3<\xa4)\x8e\xd3\xe8+\xa2\xfb\xf1W\x34\xe3\x0fk\x86\xdb}\xdct\x8d\x9f\xd1\x34\xc6\xf2\x42R`\xbf\xf3\x19l" "]\xf1\x0e\x15\xd3\xf0\xdd\x97\xc4\x97\x32k\xfb\x83'\xeb\xf1S\x95\x18\x36S{X&\xca\x8e\?\x1e\x1a}\x31\x34,\xf4\xd7^-<\xc8" "\xf6\x64\xf2\x41\xcd\xe8s\xa6<\xe0\xa6(\x64\xee\xd2\x9e\x9d\x1d\x9a\x87\x12\xe6\xa2\x07=\x07x\x81\xd2\xd5\x82\xad\xbb\xe1/t\xdfL\xd9\x16" "\xc7\xa9]P\x15\x0f\x34\xae}\n\xd1\x64\xe3\x34\xae\x8d\xdf\x9ch\xb3v\x9f%\xba\x15\x63\xb3,\xa0/q\\Q\xab\xfb\x17\xbd\x1e\xd4\x02" "qy\x93\xe8\x41>\x05\xac\xf1\x43\x02Q\xe7\x36\x9a\xb9\x8d\?h`\xde\x14\x1c\?\x03\xb0\\{\xe9\xbe\xed\xc1\x08\x8f\xd2\xf8m\x8e\xeb\xfd" "\xdeR\xb4\x12\xb0Y\xfb\xf0\xca\\\xed\xdd]\x36\x9b\xc0\xcc\x9a\xdf\x83\xda\xb7\xd7*\xf7\xffr\xb3\xd9\xf8y\xab\xd1\xda\xfb\t\xc8&P\xb7" "\xf1\xce'\"Yk\x86\xde\xc5\xdb\\\xfe\xec\x1co\x30LL>\xb2\xa3<\x81wO\x30\xdb\xc3p\xed\x8fQ\xdc[\x8f\xff<\x64\xb3\x35" "|\xa3R\x9b\xb5O\x98\x1d\xd6\xde/\x63\xb3\x86\x0e\x37\xe3\x35\x0b\xc6\x9d\xbd\xe8\x9d\xfaW\xfc\xbf\xd6|\x32\x32\xfa\x12\xa1\x41\xe7\xe3\"\x9b" "\x62V\xfcJ\xe1\xf6\x10!\xe8\x17-\x17\t$\xaf\xbc\xd1\x1dn\xde\xbeS\x34\xc7\x06\xdf\xb4I\xabS\xbd&\r\x16n\xbc\xcb-\xb3\x88" "\x0b&\xfa\xd5\xca>\xae\xb7:n\xb2\xf8\x8b/\x9f\xcc\r\xd6\xb0Tv\x9e\xfa\x13\xcb\xfa\x39\xce\xa3lG\xb6\xc3\xfc\xb1\xdc\xdf\x1f\x33\xcf" "w\x85\x0b\xdc\x9a\xbe)\x85\x95\xb2\r\x63\x06\x8f\xcd\xe7.\xd5<\xc8O\x98\xf1\xfd\xf9)\xa5\xeb\x83\xba\xca\xdcO\x91\x88i\xf4`\xfb\x1d" "\xc6\x07\xc9U\x9b\xe0j\xd9\xd8>L\xd1\xd9\x89~\xceS{&\r\xd1O#\xc7\x99Zz\x36\xef\x95Vx~\xe5\xb4\xba\x34\x64\xb0\x0e" "\xc6\xb4z\xda\xf3s\x93\xe6\xcc\x9b.\xdfU\xd6\x64\xf7\xe3/y\xfb#y\xdbl\xe1&<)\x9b\xc7\x39\x0e\xd8\xfb\x18\xf6t\x45i." "\x91\x35\xcd\xc2\xde\xc5\xb8\x82\x35\xd2\xd8^\x9c\x9a\xda\xbb\xcb\x45n\x86\xf7\x8c&\xb2\x96t\xf9\x82~q\x1a\xb5\xfdl\xfe\x39hS\xfbn" "\x08\x96\x86\xd3^n\xd7^#T\xaf\xectjY\?\?(\xb1L\x14x\xc5Q\x7f\xee\xd4\xcbI\x89&\x1e\x14\x8b\x62\x9b!\x0f\x13\x87" "'\x1fT\x66\xd9\x1dg\x1f^\x85\x34(\x02^\xde\t.\x8d\x46\x15\xcd\?\x31\xa6\xc2\x93\xfd\xf8L\xf2\xe3-\xec\x98\xff\xb6\x07{\x9b\x88" "_\xf1\xdc\x31OK^N\xc0\xde\xa5\n\xbb\x63\x83~\xffq\xcc\x35\xefv\x8f@\x65\x63\xdb_\xfe,\xe5\x30O\xbb)\x0c\x14\xe4\x01\xee" "\xdb~\n\x06\x83\xcb\xed`\xfa\xcc\xfbx`\xcf\xa6\xcf\x9c\xa7\xb6\xd4\xdb<\x36\xa5\x8ft\xaa\xbc)&\x35\x05\x89zo\xb3\xa2\xb4\xba\xaa" "\x16v\xc0\xb8\xbbG:\x35\xfd\x45\xa9)H\xd4G\xe8\xc5\xdd\xdc\xee\x99\xde\xcd\xfb\xd1\xf2\xde\xc7=V\xba\xbc\xa3L\x42\xc9 \x9b\xec\x99" "m\xf2\x95\xe6%\xf3\xea\xe5\xd2\x07\x43\x18\xf6\xd4\t\xa5-\x8d\xbe\xa6\xd5\x43:\x42\xa5\x8d\x92\xc8,\x63\r\xcf/\x15\x37\xc5g\xec\x92\xcf" "\x0c\xd5\xce\x86\x96\xef\xce\x17k-\rukuW\x97\x61\xe9\xe6\xbe\x97\r\x36\xe4\xe3\xba\xc2\x38\xef+\x89\xcf\x06GX\xb2\x45g~~" ")\x31\x82\xfa\xe4\xdd%\xb5\x96'\x89\xf1\x84V\x30\xbdZ;\xb3\xffP-\xbe\xf3\x0egj\xed\xcd\?]\x1f\x96\xd9\x97\xe9\xdbw\xd0\?" "\xac\xf1{'y\x8e\xff\xc1\xdc\xbe\xeao\xa9\xa2(/\xbc]\xf2\x86/\xbd\xe2G\x61\x16\x9e\x9c=\xac\x44\x64\x8a\xf7\xe4\xb2\xdf\t\xe7\x95" ".\x8b\x0f\x11\xa8\rj_\x1a\xf7\xb0\xc5\xedz\x30\xbd\x13l\xdc\x18,\x64\x8d\x12\x05\xd5\xbe\x12\x0e\xf4\xb0\xa7\x96\xed\xdb\t\xa7\x06\xee;" "\xef\xd7/\xb8\xfc\xe4\xdd~\xd1\xf2\xddy\xca\xf7\x0e\x36\x66\x1c\xe7g\x36\xe3\xf7\x0f\x8a\xa1\xe1h\x9fs\x9f\xb3|\xbb\?\x7f\xfau\xd3\xf8" "\xe2oZ~s\xcd\x83\xd6\x7fq\x84\x61o\xf9\xa3i\xfd\xa8\xfa\xf9\xda\x64\xee\xceg\x83\x99\x31\xc4m\xa5\x1f\xd4\xa3\x02o\xe0V\xa6:" "\xd1\x42\x05R\xec\x64\xc1\xa8\x82\x8b\xdd\xe4%\x05)\xd2j\xb2`\xf9@>\"Q\xe0k\xd5p\x9eK\x16\xcc\xad\x05\xfd\xab_\x15\xc8|" "\x9cm&\xcb\xde\xcf\x89K\x89\x91\xfd\x8f%\xbe\x83\x96h\xc1\x43l\xf7g\x92\xb3\x93|\xb2\xe0\xe2V\xa8$\n\x82\xb1R\xb8\xde\x93," "\x18/{\x1f\x92\x98J\x45\xe5\x16\x93\x05+\xeb\xc1\xf2Z\xb2\xe0\xa8T\xfd\xb8\xfa\xa0\xe0\x86\x87\xde\xbf&\x02\x8fZ\x17z\xbd\xfd$\xbe" "\xd5\xb9\x92\xd7\xb3\x10\x15\xc0#\xab\xed\xfe(\x8d\xfc\xdc\xfc\xdd\xe5\xc8\xbd,\x39\x7f\xa6\xd8^\xa9_\xd8s\x95,\xd8\xdf\x12\x02\x44\x1b\x83" "\xc9\xe2 w\x18\x8c,<,\x08{\x8e\x13\x05\x44\xae\x17'\xde\xed\x9c\?p\x1b\xf6\x0c\xfaZ\xef\x8d\xae\x7fS\x1f\xb1\x61\?\xd8\xce\xc7" "\xa9-\xba\x44\x35m\xf3{YJHQ\x42~\xf8\x97\x45\xe9K\x9c\xc6\x45\xfe\xdcV\x9c\x46\x45\x8b\x31%y^~\xc9|\xbc\xec\xa0h" "\xe7\xc7\x9e\xde\xe0\x8e\xe4)\xec;J\x34\xf1\x46w\xfdR>Q\xc0\xb4\x97\xaf\x1f\x16\xc4\xd3&N+\xf4\xde]\xde&p\xa7li)" "\x41\x65o\xe8s\x38\x8c\xe1\x1f.\x86\x95+\xad(\x82\x81\xd3\xa0\xf7\xc6+\x45}\xdc+\x41r\xec\xd1\x63Ux[\xc3\xf2\x19v.\xa6" "\xc0\x66\x0b\x8b\xba\xa2\xba\x65\x85+!.\xf6/\xd9\x36\xab\x99\xf0\x97\x31\x9b\xda\xcb\xee\xf9\x0c/\x16\x06\x93\xf4\xb4\x05\x7f\x06\x43[\xf9\r" "\x46\x89\xe2\x64\xc1\x43\xecl\xd9\x03\xc4(\xd8\xdc\x34/\x89\x31\xeb\xd6\x44\xf1\x37\xbd\x97.\xbc\xdb\x42\xb2\xc5\xd9\x96\?\x39\xcc\xad\xad\x44Y" "M\xe0\xee\xcb\xfc\xd1\r\xb9\xd8\x44O\x32\x0b\x61\x65+\xd9\xa2\x94\x0f\x66Y\x9f$\xcb\xca\x05\x85l\xc9\x02-\x04\x0f\xd7\x93\xdd\x9c\xe6\xc2" "\x93\x0b\xc6Z\xe9\x0f\x96\x46\x13M\x83\x91%o\xf3\x34Y\xb0t\x14\x9b\xe1\xa8`\xab\xd7/O&Z\x84=\xbd\x0f\xc7\x0f\x87\xf7\xfd\x83" "m\xef\xb0O\xf1\x97\x66\x90\xa8\xa9\xae\xbc\xe7\x66\x9e\xe1X\xb2x\x95\xbf\x46'\x0b.\xaf\xaa\x1f\xc7m\x81\xect\xf9\xbd\x1d\xff\xde\x8cz" "\x1b\x03\xfe\"\x31\xea\x46\xc1\?\xb9\xb2\xb5\x1b\x45+\xa0ZG\x96'M\x1a\x35\xd9\xae.}\x32\xb1\xc9W\xcc\xbag\x13\xf7\x97\x07\xf7\x12" "\xd9$\x0b\xbf\xb6#\xdf\xaa\x9c-\xb0\xd9{N\x97'\xab\xcbG\x0e\xff\x1c\xb1\xf8(\xbd\x38\x31\xa9\xc5K\xe9\xd5\xbaI-~\x0f\x65\xc2" "n\xd7o,\x9bH\x46&\xc0\x96*;\xb4\x64\xd1\x32\xe2\x82\xc6\xbe\x9b\xb7u\x0f\xe4'\xe1=\xfd\xfe\xd1p\x89@}`\xb1V\x34\xb0" "\xea\xf7\xee\xda\xec\x88\x02\xfe\xdb\xbf\x64_m\xf1\x83\x82\x9aT&\x1c\x99\xcd\xda\xd2\xd9\x61v\xb3{\x15|l\xdb\xba{\xf7\xf6\xd0\xb1%" "\xe4\x99\x07$s\x43&\xb5\x9d\x88\xb5k\xefl\xf6\x81\x90K\xbc\xef.\x8fl\xc5\xbd\xa4'\x64<\xf6\x82\t\xff\xf7=\x81\xe7>%\xcf" "\x05\xdb\xd4^y\xef \x13~\"\x61;\x13V\x33\xc8\x9d\xc6h$\x94&\xc8\x7f\x0e\xf6\xec\x98\t\xe7\x9ap\xab\t\x87\xca]W$$" "\xa1\x62\t\xef*\x87\x62\xe8\xa1\xee\x64{m\xbaQ\x34\xa9\xf9x\x9fR\xe3{\x82\xbd\xb2W\xb0tO\xb8\xe2o\x9c\xf0\x43\xf7\x9b\xd0Y" "\xfb\tN\xe2#s\x36\x38\x1ak\x82\xb2\xb6\xc8\xa8s\x42\x97\xbf\xa7\xdf\xe1\xe8\x64\xb0]\xb0\xff\xaf\x8b\xf4\x44\xcb\xd5\xea\x12\xdf\xa4\x1a." "\x98\x7f\x98\xd8\xd4t\x9d\xf0\xfb\xd5\x85\r\x13 \xaa\xa9\xf8\xc6\xf6\xearu\xa1`\xffy\xf8}/\x9c\xf0\xbf\xdf\xd8\x93\x84%I\xd8\x10" "\xb6\x8d\x36\xec\x15\xcfy|s\xf6\xc2\xdb\x9e\xf2\x0f\x8a\x61\xb9\xe0]N\x99\x05\xa8\x37n\xbe\x7f\xb4\xb1\xed\x98=\xc0\xf7s\xd5u\xbb\x1d" "\xc8\x12z\xb6\xec\x13\xf0\xf2,\xfa\x95M\xb9=\xc4z\x46\x8bp\x36\x96\xf2\x93\x10x+\xb8=\x88S\xb3\xb0\r'\xfb\xbc\x9d\x65k " "\xb6J\xcc\xf1S\xf0\x81\x11\x8a\x65\xfe\x8aR,\x0bW<\xeb\x81\x98\x13\x8e\x9d\x62\xa3NM\x1a\x8e\x1e\xe2\xdb\x37M\xf6sxs\xc3]" "\xb2\x42P\\\xab\x35\xb8\xb9\xe1\xad\xc8\x97\x13\xf1\xf2\xabz\xce\x9e\x45\xdfy(\\W\xd6\xcd\xec\xc3\x9b\x8f\x41\xff^\x9c\xf5.\x8e\xaa\xd3" "\x83\x84\xbe\xfbROVyr\xa4,\xec\xa3\xf4\xa9\xdd\xe9\n\xcb+\xd4\x15\x0f\xe2\x32\xd3\xe6Q\xa2RK:\x16!\x64\xf9/\xe0\xfe\x9c" "\xf3T\xa9i\xf6\x38\xea+\x1a\xe3\xa9\x7f<\x63\xc7\x8a\x32\x14\xd8\xfe\xe2\x8c\xfd\xc4\x03\x9d=\r\x8e\x36\xa2\xb1\xcc\xaa\xc9\x96\xdd\x8c\xdb\x8e" "\xa3]\x08%\xa6\x9f(\xd5\x1a\xd7\x96\?\x8dw)\x1e\xc5\x35\xac\xc4\xf7\xce\x17\x07\xaa\xfb\xac\x95\xaf\xa6\x84\x93\\\xbb\xb4K" "y\xfew\xbdk\xde\xe1\xbc/Q\x08.\x89p\n\x33\xc1\xf4\x41\x38\xca\xde\xea\xcax\xf0\xf9\x9d~\xf1>\x83}\xd6#\xb8\x1a\x08\xae\x86" "\xcd\xaaO.\xe9\xe1:\x39Q\xc7\x8a\xb0\xb6\x91\xb0l\xbf\xca-\xd3\xbc\xf1\x89\?\x07O\xe4j-\xcd\xba*\x98\x18\xba\xbb\xcc[\xba\x0e" "\xf2\xfe\x36\x65\xc3\x83\x9c\xd9\xf4\x08\xd8\x99\xf5\xa6r\xd5\xdd\xcfViL\x84\x96\xbc\xa2\x34\xc2\x19Y\xff\xf3\xf6]\x65\xd7Ho\xcdG\x9a" "\x8a\x9a\x63\x8c\xf0^\xf4\x96\xf6\xe3\xaci`\xf7{\x9d\xe8s\x46N\xf4\xb6\x43\xbb\xbd\x64^\x08v\xcc[\xc0\x9cG\xcf\xad=\xe4\xd5\xda" "\xfbs\x82w\x95\x42\xe4y\x1e=\xa7\x0f!\xfb(\x38<\x96\xe5+\x9f\x0b\x1c\\\x8a\xd0\"\xf7#\xb9\x1e\xb5\x90\xf2T\xe7N\x30\x8b\x02" "\xfer\x8e\x9d\xdcM\xc0\xa9*\x89\x10\x1e\x05\xdb\x93\x64\xcf{\xd5h\xb0_\x36\xd0\x9e\x97.\xaa\xc3\x45\x15\x15\x86\xd5zvN\xedV\x35" "\x46\x30\xa5\xeb\xc2\x0fy\xe5\x96h\x86W\x36\xcd&v\xb8M\xcd\xe3\xa6\xf6tu" "\xe4\xc4+-\x9a\xeb\x33\xe6\xfa\x8c\xb9>\xa3\xd0^\x90]\xf2\xc7\x19\xd0\x7f\x96\x89\x10\x95<\xccO\xc5Hglo\x99x\x80Lm\x00" "S\x43\xaf/L\xaf/\x0cG_\xd8\xba\x17q\xf3\x17\xb5\xe6/\xe2\xe6/M\xf3\x97\x41\xdf\x85\xf3\xec\xa5\xad{\x19\x37\x7fYk\xfe\x32" "n\xdel\x9a\x37\xc3\xb3g\xcd\xb6\xae\x39n\xde\\k\xde\x1c\x37o\x31\xcd[\x1a\xbd\x82x\xdc\xf2*J\xfc\xd2\x17\x12\x82v\xc5#\x94" "/\x1fx+=\xcau\xc9L\xdd\x9d/:\xcfZ\xbap\xf7g\xb2\xc8\x8f\x82\xb5^oh\x99J\x8c\x35\xbd\xfe\xc1\xf4\xaa\xcc\x8f\x86\xd1" "\?\x9a\xd3\x1f\xb5\x9cs\x9e\xfdxw!#\xf5\x38X\xce\x93\xf1'\xde{|\x8eoM\x15\xc1\xd1\x08\xb4<(\x87\xfd\x97\xd5\xc1\x92J" "\xcc\xcd\xa2\xc7\xde\xf4!\x19on\x87\x84.g\xbdw\x15\x65tzw\x91\x0f\xc6\xf3\x0c\xf5\xac\xdd,\x33\x1fy\x37\xb9\xbb\x8b\x41\x33x" "\x87\x11Y\x65^\x35\x1a\x89x\xd5\xec\xf5\\\x9b\x82lK\x9b\x99\xa9\xb2\xdd\x06\xb7n\xaf\xf2\x41\x30\xdb\xe0\x8f\xe4\xfd\xb1\x61\x9b\x1d\xe7\x0b" "\xf3\x36[\x9c\x8c\xb3\x61\xe9\xc0\xbb\x1d\xf2\?N\x9a\xab_\xb7\x64\xd3\xa6\xa7\xd7\xfe\xd1\xaa)\xf9\xbbx\xea\x7f\x44\xe0\x1e\xff\xf1\x8f^\xf1" "\x8c\x13-_\x66/L\x45g\x36\x1b\x96>T\xe7-\x92]q\xfb\x9f\xbc\xc1\x11\xe7\x19\xd0\xdc\x64y\xf4S\xa4\x88\xcf\xe2\x0c\x45\xb6\xf2" "\xf1\xff=\xbe\xd7\xd2g]~\xef\x46\xb8.\xf7\xf2\x88\x9c=\x8fN(~\xdc\x85\xf9=\x9f \xf3>\xaf \xc9\x8c\xf6\xbb\xdf\xff\xe6\x65" "\xb0\xfe\xd9\x0c\xfe\xdb\xbf\xbd\xcf\xff\xfe\x37\xb5\xfc\xcf\"\x03n\xcd\x96\xb5\x66\x61\x39\xb6\xe1\?\xd3\xb4\x15\xafu\xfc\xe8\xfc\xcc\xbf\xee\xbb\xbb" ",\xb5\xb5\x39\xcf\xfd\xfcq\xb0\x38\xdc\xf1:\r#M\xde\x1b\xdd\xf1\xaf\xf7\xd4zs\xb8\xda_\xf9\xb1\xeb\xb5\xb2S\x43\xde\xcc\x96\x31\x37" "\xcf\xe5\x94\xff\x86\xcd\xe8\xbd\xf9\xbb\xf3\x11s\xfa\xbb\xe8\xf4r\xcc\x9c\xfe\x36\xae\xedq\x9e\xc4\x0e%\xb9\x88y\xf2\x1c\xff\xb2\xad\x0cr\xf0" "\x44\x8e\xd8y\xe2]\xaf\t\xe4\xe6\x9d'\xd5\x85\x1c\x65;:}' \x8f\xa5\xdc\xfe\x82\xc0\xc4\x89\xc0\xcd\x84\xf3$\xfc\xf2\x45M\xde\xcf" ")\xd7\xbf\xae\xdc\xf2\xa1\xc0\x87^\x35\xee\xdf\x17\xd8S/w\x95\x19\xe5v\?S\xf6N\x03U\xd4\xd8+i\x34o\x9a\x0e\x0e>(W" "\xe1\xbb\xa7" "O\xc2\xb1~\xb0\x1f\x65\x46\x8c\xdb\xc7\x18'\xd3:\x9d]\xe2Tt\xf1.\xcf\x98\xea\x91\xda\xdd\x94)\x13\xe9\x82!]\x11lo\xe9t" "\x89\xda\xfdU\xda\xbdW\xd9\x42\x45=\x97\xb9\xb6\x7f\x85y@X\xd9\x95'w\xb7\xaa\xf5O>\x31\xee\x86*\xd6\x99\xfe\xc9\xa5r\x37\xe0" "|p\xc1\x64\x86\x39]\x80=\xc2\x34\xd8\x83\xa1\xfb\xc2\xc5\xdfg\xa0>\xcd\xbc\xfa\x61\x19\x46i\x46\xd5\xf9\x12\xac\x85\xd8\xe7\xa2\xa9\xd7\x43" "\xcf\xb3\x1a\xfc\xee\x82+v\x46\xe9oSM*\x13P\xe3\x14\x99\x99\x10\x1f\xfd\xf3]\x1aj$\xee\x34\?!\x1e~R\x9d\xdb\xd3\x98\xa3" "\x1a$\x18Y\x02\x19\x30*\x8d\xe8\xb4\x84p\x94\x34\xc3\xear\x41\xa7\xb7\xab\x10\x7f\x1e\xb6\xd2\xeeR\x82uw\xad\x8a\xf0\x46\xa7\xc1U\?" ",<\x86\x9e\xf3\x30X\x14\x0b\x06\xc0|\x9d\xc9]I\x10\xaaG\xbdLI\xb9p\xab\?\x02~\x19\xe1\xb8\xa4\xdd\xbc\xae\r{n\x05\xe4" "\x66\x9f\x84\xbd}\xea`\x89\x9e\xf7\x34\x91`S\xf4\xf4\x61\x9c\x64\?\x06G:\xad~\x12\xab\x83K\xe6\xffy\x1b\xa6\xab\x03\xefl\x8by" "\x88\xd0\x9e\xe2*\xc9\xa8N\xfd\x05\x84rW\xb8\x84\xe3{\xf0G\xb4\x0b\xcf\xcaL\xb5\x37\x06\x83`\x7f\xce\x90\xb7\xa6\x0c\xc4\x15\xe2k\\" "\x38\x7f\xc4T'\x8f\x90\xb8\x39h\x85\xfc\x1c\x88\x38\xe1G\xe4l\x66\x08\xfd\x13\x92\xde!\xd2\x9a\x13\xdd\xbd\xb1\x41(\x0e\x7f\x8a\xe7L\x81" "N\xaf\x61\xfa\xca\x31\xb4\x9a\x87{\x12\xbb\xe0=\x38\x17\xc4\xdbp\x43\xb4\x0f\xb7\xa1\xd0\x30\x93Q\xe0'\x31\x11\x1a,\x0e\x9e\xb0\x1a\x15\x92" "Rj\xff\xb4\x8fS\xc3\x41]Q\xdd<\x85\x1f\xd3\x94\xed\x31\x05\xcc\xc0\"*u\x08\x85\xe6\x10\xd9\x19\xf4`\xf6\n\xed\x1c\x61n{`" "\x80i(i\xb4`w\x88\xc9\xe4\xc0y\x1d\xac\xd4\x38\xac@\xb5r\x81\xe9o\x32#\r\xa4 N\xe0\x1a\x62\xcf\x8b\xb0\xde\x8e:\xf0\xaf" "\x66\x10\x0b\xb5\xf3\x36\xc1\xfe\xc6\xe8)\xe2\xbe\xde\x87\xdc\xae@\xb0Uz)\x42N\xf8\x36\xd4\x43\xc5gL\x83p\xf1g\x66i\x8ct\x1e" "\xae!u=(\xbf\xc8\x14\xa2\x34\xe1\x08\xaa\x32\xa5^\x82Op\x35g\xf4\x05J\x16\xd6h\x82\xeam\xd3U\x0e\x63\xb2\x86\x19\x18:\xc3" ">\x88`\xfe\x46\x01NS\xb1\x80\x35Zx\x0f\xa6\xf0-\xff\x0e\x46\xd1\xc1\x1c\xd6\x63r!\xee\xef\x66\x19K\x01\x85\xcev\x11L\x0c\xdb" "\x42\x11I\x84\x8d\n\xd5\x9fT\x07\x90\x88\x63\xe9_\x30l\x84\x90\xaeJ\xd8\xbe+\x44\xfe\x46\xaa\xe7\xc3\xad\xbb+\xf4\xb9\x8f\xcbJX\xda" "\x02r\xba\x34\x1b\x83#l\xcb\xb8\xb1\x41\x10\xbb\xf0\x11;\xb7\x00\xba`p\x86\x88\xbe\x87\x1a\x15\x63\xa0\xa1\xf8\x8a\xb8\xe0\x8d\xa2$Z;" "\xc8\x96\xae\xa3\xed\x13\x11\xf0\x8a\x63(\x31\x9d\x0e]\x43!\x08\xbb\xbc\x83\x30`U\xcbh\xfc\x1a\x36|H\xc2\xe0]\x08S-*\x61\xde" "zL\xfb\x8b%\x44\x00\xae\xf6\xe1\x36\xfa\xe0\xf4\x62\x89vp\xb5\x1f\x11\x98G\xfe.\xc0`\x10:\x8f\x8f\x30Kh\xc5\xb8\xc1\x1e\x92=" "\x87\x84\x95\x18m\x1a\x9d\xe9\xc7\x1e\x8e\x62\x0f\xe6\x30\x94ZXK\x90\x90\xfb/\xc3\xc8\x1a\x84\x38\x46\xee\xd7\xf1\x13Z~=\xa9\xf6\x0c\xd0" "\x0b\xde\xeb\x64\x18\xdd\xc2\xdc\xcc\"\x66+p\xbat\xcb\x8c\x8c\x85\x87\xb5=\x65L\x10\xc6\xee\x16~\x1c!\x66\xd7\x43\xd8\x12Q\x32\xd8\x42" "\x12\x07\x61\xd9\x14\xfa\xa1(@Vpr\x0cM\x44\xe2\xfa\xd7\xb8\x18\x99\xea\x81\xee\xf3\x9a\xa6\?\x38\x03\x82\xe8\x41y\x8cZ\xfc\x46\xff\x36" "\x34\xa6\xf1%\xac\x1e\xc4\xce\xe5\xd1\x9c\xc2!\x0e\x00\xab\x30\x8dn\x9c\xe0\x13\x0fQ\xf9/h\xce\n\xedv\xb0\x32\x07\x65l\xee\x35\xfc\x81" "\x9e\xa0\xca#\x14\x1a\x03\xbd\x1f\x46\xe1\n\xcaU\x07Q\xc2\xfc\x15\xb3\xc1y\xf4\x43\xacs\x64`\x02\xd4\xce\xd6\xd1X\r\x19\x1e\xe2\xdc\x14" "h\x89\xf8\xe8\xc1\xbbk\\\xda\x1eR\xf3\x01\xe9\x82\xda\x33h\xc4\xd9\t\xd2\x05\x39\x0e\x61un\x1c\xdd\xc5\xab\x8c\x31\xf8\x05\xbe\xf8\x0b\\" "\xb9\x9e\x62\xfa'\xe8\x06\xdev\x01\xa7Z\xc4\\\x14\x0e\xd0Il\xda\xf8\x10\x34`\xc8\x0b\xe4\xec\x04\x9c\xb7\x0c\x8d\x37\x10^\xf4\xf9\x82)" "\xf4\xe1O\x16\x8b\xd0\x05\x1b~\xc2\xb5&\x92\x38\x82\xcb\x63X\xb2m,\xc5\x10\xde\xbb\x62\x42\x11\x10\xdfg\xaaG\x17\x84;\x15\xd4\xe4\x14" "\xe1\xbb\x41\xdarh\xe1\x64\t\x9a\x30\x66^r\x17\xf4\xee!\x8bt\xbd\x8cW\xf9`\xc4p\x1c\xb3:\xcblz`\x12\x81K\x1f\x42u" "\x88\x0b^\xc0\x9a\xaco\x62\x02\xc6\xa1\x1d(\x9c\xe3\xfa\x89\xa6\xc2\x02\x92\xda\xb3\x46;\x06\xc2\x8e\xde]\xe1n\x46 \xf4\"\xd6}\x12\x35" "\xbe\xc4\xf4l\x32\x9bi#\xea\x30\x33\x8f\xd6\x9c\xa0Sg\xd8\xe5O\x0c>\x0e\xbbz+X'\x44\xf8\xe6\x06\\N\xf0\xff\xb8\xcd[\x34" "\xe4\xd0\xc8\x19v\xaaL\x04\xb7\xb8\x83hn\x14LP'\?\x66|!\xdfw\xc3\xae\xc8yx\x37\x93\xd0\x62\xde\xb8V\x45\x98\xc1\x34\xf6" "\x61\xe6\xd6\xc4u\x32Ml\x1f\x08\xe7\r\x1e#\xc3<\xe0\xa0\xeb\x12{\x11\x13q\x04[\xe7\xcf\x14\x9d\xba\xbb\xebU\xa7\xce\xcb\x0f\x0b\x0c" "\xa9\xa1\?;\xe6\xd4UW\x16Tq^\xd1\xe9\xa9\xca\xd8\xe2\xa9\xf3W\x0e\x94\x9b(\xa8\x9d\xdcV\xdd\xdd\xed\xa8\xca\x64\x04\xea\xb0|u" "\xc1G\x9d\x06\xe3G\xaa\x95\x63\xaa\xc3\x30\xd4U/\xd4\xbd\xd7\xbb\xa9v\xc7\x1fT+\xef\xa9N/\xd4\xcb\xcd\x88\x80V\xceu\xe1\x88\xda" "\x85\xb2\x1du\xd8\xf2:o\x07\\\x8e\x35\x90\xb7{\xa6\xc6\x97%]{\xd2\xab\xae>\xcc\xaa\x83\t\x1a\xe7\x0fU\x36\xb8\xad\xb2\x8f\xef\x05" "\x96\x05\xfc/\xbb\xba\x62\xb8, kS\xe7\x97\xd5\x33\x11m\xdd]\xe5\x98^\xde\x31\xc6\x05\xdd/\xab\x42\x01\x90:\xcd\x33U\x35\xae\xbe" "\xdbS\xee\xf3G\xba\?\xa1\x83^r\xd7\xca\r~\x81\x10\x93\x9cn\t\xdcN\xab\xac\xf2Y\x65\xd3\xba\x16\xa6\xd4\x05\x93\x13\xbavn_" "\xdd\xcf\xdc\xa8v\x84\x81\x16\x98\xe0\x14\x33\xba\x12\x99\xbc\x1e\xa1\x46\x94\xa6\x9e\xa1\xc6N/\x14\x62\xaa\x13\"\xac\x37*@\x98'\xacvt" "\x99\x41h\xe9\x13\x43~\x02+\x11\x0cgPG|Z\x17\xf4\x81\xbd\x62\x89:\xee\x8d\x8b[\x07\x90S\x65\xde\xf9\x10\x97\x89`\xfe\xe6\x1a" "\xf8\xa9Ix\x0b/\xa5\xd1u\xd8\x94:\xefL|\x0b\xaeN\xa8P\xcf\xde\xa7%\xb8\x05u\xb5\x36\xa8\x0bn\x36\x04\x10\x13_\x96\xbe\x8e" "\xdbL:=\x85\x0b\xdb\x10\x02\xc6\x8f\x31\xf8\x8a\x66\x19\xe4$\x16Z\xcd\xd1\x44\x65\xc1\xca-\xd8\x8b=\x61/=+ZP\x85\xdaU\?" "\x15\xc1\xaaL-\xb2\x36\?\x8a\x98m@\xf6\x03\x9a\x88o\xde\x11\xc4\x99\x87\xe7\xb7k\x00\xb1\xcc\xef\x01\xdd\x95\r\x66)\xec\xc3\x1c\x9dJ" "\xf1\xeb\x08Z\xea\xd8\xfd\xad\xe3y\xdb:\xd4X\xe2(\x61\xf5\xa6\x90\xba\xa3\x45\xb8\n\xd5\n\xba,(\"\x9d\xbd\x93pP\xa8\xf9`\xe5" "\x8f|\x66\x34\t+N\xb2\x8eHZ\x34@\x12\xcb\xba\x36TT/\xd2m\x41\x30\xa8Q,\x30\x06<\xdf\x82t\x93\xe2L(o\xacv" "\x08\xc8\x36\x9c\x1e\x45\x18\x96\x8f\x10\x65\xe6V\x61nK[tO\xa7#\x9ay\xf5\xfc#\xed\xce\x99\xb4\xc4\x82]\xbc\xba\xea\xd4>\x34\x1d" "\xe1Z\xa3t`u\t\x42\xd3\xb7\x88\xcf\x38\xc2\x8a\nU>!H\"]u\xf2\x03X\x31\xd5M\xaePX\xa7Z\xb0\xef\x17\xf3\xbc\"" "\x03]q\xc5\xd9\x8az\x39\x93\xec\xe2\xce\xea\x82M\xd8\x38p\x8a\x94\x30Z\x8f\xa8\xcbr\xae\xce\xaf\xa0$\xfb\x88\xfc\xfa\x8c\x93z\xce\x93" "\x90\xdbS\xb2\x0b|\xd5\x62\x7f.\xb2\x0e)\xe4\x37\xe5\x1d\x14\x9d\x14\x0cL\xa1-)X\x94\xc2\x37\xa7\xa0\\\n\x13\x91\xf2\x0f\xce\x05$" "j)\x04'U\x1d~Gn\x9c+\x0e\xd4\xf8\x46\x15\xc1v\x8f\x80\xf4\?\xc5m\x86\x14&'\x85\x9c\xa7\xb0\")\x62\xc3T\x90;\x14" "\x90\x99W\xa7\xb3*\x13z)\xe4<\xe5\x89O)\xaft\xaaZ\t]\xca\?\xa3\xfb\xb1\x32])\x87\xb5I\x41\xcd\x14sV\xee\x44`" "\x63W\xdd\xcf\xdc:)\xccK\n\x63\x91\x42\x84R\xa8`\n\x9b\x90\x42\xfcR\x30:\x85~\xa5\xb8\xa1\x9a\n\xaeh\x37\?\x42\xa7{:" "\x95YK\xf9=+T\xd0\xe9\x81\x46\x0b\xb6\x8a\xd0\x80\x81J+\xa0\x36\xa1&\x39\x80\x38\x9b\x42\xfcRh\x64\x8a\xd5z\xca\?\x86\x38\xef" "!\xd8\x86z\x0eNt\x19\xc6\"\x85\x91J!\xbf)\xe4-\x85\x04\xa4\x30\x9d\"\xc9 \xc4\xd1\xdc\x02\xc6\xb8\xbb\x66\xa0\t\x9d\x62YR" ",\xc3Rl\?\xa6\x90-\x8d\xa1\xae\xd8\x43Hy\xf2\xb6)\x62\xf0\x14\xf1H\x8a\xb5\x63\n\x89O\x61\xc6S^\x31\xcf\xb5\xa0\xa1\x98\"" "\x85\x01N\xb1\xdf\x9b\xf2*\xbb\xcc\xad\xa0\xdc\xacp\x0eo\x97\x99\x87\xa6\x85[Hy\xabj\x87\xc4\xa7\x08\x90R\x84N\xa9PZ\x95\xe2" "\x0eM\x8a\xf5\xa3\x1a\x8fp\x19\x94\x94\xe7H\x61\xe9S\xde\x99\xa6\x1a\xf6h\xfaX\xf5\x14\xd6:\x85\xec\xa7\x88\xb5R\xc4(\xa2\x1a\x63\xc8" "$\xa6\xf8\x1eY\n\xf3\x92\xc2\xb2\xa4\xb8\x0f\x9c\xc2\xd4\xa5\x82%\x06\xba\x86\x88Z\xa9i\x0c\x91\x18\xc7\x9a\x42\xa6S\x18\xe5\x14>)\xc5" "]\xd5\x14\xae\"\x85\x11M\xe1pR\xe1\xb0\xb8P]Gv\x8b\x0cy!\n\x05\xd3\xab\xe4@\xe8L\x14\"\x04\x94\x1c %K;\x08" "\xe1\n\xddo\x80\x1f\\\x38\x87\x9c_\x90\x97Q\xc3iIl\xd0\xa7\xd1p\x38\x62\xd9\xbajW\xa1P\x11V\x9c\x42\xe7^\xf4\xc3L\xfa" "\x16\x42\x0c\xaa{\x62\xc6\x14n\x30\xc5\"-\x85\xbfH\xb1\xc2I\x85\x63}\xd0^X\x85\xe5\x39\x84\x46$\xf1\x15\xe3\xa4\xfc\x11\xc6=\xba" "\xd2h\x03\x12=o\x8bv\x13\xf4\xf7\x01\x12+\xeeMy\xe7\x63\x88\x00\xe4T`\x92\xc2k\x0b\xbf\x65@\x0eyY\x44\xa8!X\x9f\xe6" "\xe1_\xccs\xca\x15\xcb\x9f\xe1\xeag$\x9b&WL_\x36\x30\x85\x61H\x61\x13R\xc1\x10\xf4\xeb\x39\x07g\x81\xa0\xf7\x0b\x9d~\x04\xab" "\x02\xd3\x42\x93\x15\xa1\xbb\xf7\xc6\x82\xafn\xd4\x8c\x85\x8b\x1e\xbaL\xd7\x45\xf5]\xf8\xee\"\x15.\n\xe0\x12\x36\xb8p\xcc\x45\xce],\x81" "\x0bO\\\xdc\xb7\x8b,\xb8\x98\x17\x17\x65t\x31\xbd.R\xe1\x12\x0e\xb8\x84\x03.\xbe\xd9\x45\xe1]\x62\x07\x17%s\x61\xb9\x8b\xac\xba\xd8" "\x13\x97\xa8\xc4\xc5 \xb9\x98!\x97p\xc5\x45\x87]_\x9a\xeb\x42H\x97\x30\xc4\xc5z\xb9\xd8n\x17\x1dq\x91(\x97\xa0\xc7\x45\x8e\\x" "\xec\xa2_.j\xee\x62\xc2\\\xec\x84\x8b\xd7w\xd1u\x17\xaa\xbb\x84+.\x36\xd0\x45\xe7\\T\xda\xc5\x06\xba\x84\r.\xaa\xea\x62\xbd\\" "\xe2'\x17\xb9t\t\x66\\\x44\xd7\x45\x16\\L\x93\x8b\xd8\xbbH\xbc\x1b\x42\x17\xe2\x13\x17\x13\xe6\x62\xd1\\L\xa7\x8b\x9br\xab\n\xaf]" "l\xa5\x8b%u\xb1h.^\xd0\x85;.\x66\xcd\xc5\x87\xbb\x04..J\xeb\"\x97.\xe1\x8a\x8b\x1e\xba\x18\x0b\x97\xf0\xd7\x45.]\xd6" "\x86.\xa1\x8e\x8b]tQ-\x17\xdb\xe6\"\xd3.\x8a\xe2\x12\xc2\xb8\x18\x06\x61\x05\x85\x64^\\\xd4\xd7\xc5\x05\xb8\xc8\xb4\x8b\rtY\xda" "\xb8\xd8m\x97\xf0\xcc\xc5i\xb8\xb8\x00\x17\x85rq\xee.&\xc7\x45j]\x8c\x80\xf8\xbb\x06q\x34\x37\xec\x89K\xa8\xe3\xe2\xf0\xc5\x9e\x11" "&\x98\x87L\xccW\x86\xda\x45\x91]\xdc\xa3\x8bKw\x89\x9f]\xa2\x35\x17\xf5p\x89\xea\\\x36\xc7\\\xf4\xd5%\xbc\xd0\xdc\x18\xa8\x04\x90" "\xe5\xd3\xa9\x90\x0c\x0f\x35\x06\x9a\xe6\x12\xee\xb9\xb8\n\x17k\xed\xf2\x8f\x08\x17\x9f\xeb\x62\xfe\\\x9e\xd6p\xfd\x8f%rt\xa0%\xaaK\x08" "\xe3\xe2x]\x0c\x9c\xcb\xea\xcc%\xc8\x13](\xfb\x84\\)\x66q\xf1\xeb..\xd8\xc5\x08\xb8h\x9a\x8b\x91wY\xab\xbb\xc4\x90.\xae" "\xcc%Lr\x89\?]T\xd0\x65\xd3\xde%\xb8tq\xd5\"S\x1e\x81\xd3\x90\x84\xbc.\x01\x84\xcb\xaa\xdd\xc5\x63\t\r\xe8\xbcG\x93\xb5" ">\x30`\x46\xf2\xa3.\x36\xcb%\xb2uq\xa6.\x31\x9fj!\x93\xec\xb6\x46\x93p\x11\x15\xbbx\x18\x17g\xe5\xe2\x89\\vY]\x82" "\x37\x17\x1b\xed\x12\x30\xb9xh\x17\xdf%]\x18gZ\xea\x14\x13!\x86\xbe\x07g&\x88\xaeV'Q\x8dU\xd4\xbe\x04\xe9\xb4\xd0q\xc3" "\x1e\x66\xf4Q\x15l\n\xa8\xe2\xdc\xf9\xf9s\xbb]\xad\x45yu\xf3\xe0O\xd7\x63w\x37y\xf1\xeeO\xd7\x8b\x61Oou!\xa7\x12\x9e" "\x84\x33\x19\x1e\xa7]\x1cP\xb9-\xe4\xda\xad>\xff\xfd\x32\x37<\xce\x8e\x82\xab\xa2\?_\xb6\xbd\xfdUk\xe6\xa7_\xb7\xb6\xa7\xdb\x32\x7f" "\xad\\t]\xb9\xf0K.\xcc-\xf8sk\xd5\xf5+\xee\xaf/\xef\x84\xb7\xbc;\xf4\xef{\xfa\x9c\x9f\xab\x63\xe7\xe7\xf4[\xff<\xd3\xfe" "\xebW\xdd\xed\x8d]\xdd\xe9\xae\x96\x8ev\xa7\xfe\x1f:\xf5\xcfT\xec\xd4\xff#\xa7\xfe\x1f;\xf5\xff\xc4\xa9\xff\xa7N\xfd_\x39\xf5\xbft" "\xea\xff\x99S\xff\x83S\xff+\xa7\xfe\xd7N\xfd_;\xbft\x9cGj\xf8\x1b\x1d\xbf\xd5\xf1;\x1d\x7f\xa3\xe3\x9f\xeb\xf8\xbd\x8e\xbf\xd5\xf1" "/t\xfcK\x1d\xff\xca\xa9\xff\xd7N\xfd\xbfq\xea\xff\xadS\xff\xef\x9c\xfa\x7f\xef\xd4\xff\x07\xa7\xfe\?:\xf5\xff\xd9\xa9\xff/N\xfd\x7f" "u\xea\xff\x9bS\xff\xdf\x9d\xfa\xff\xa1\xa6i\x1d\r:\x1au\x34\x81\x9e\x8e\x17:^\xeah\xd6\xd1\xa2\xe3\x0f:~\xd4\xd1\xaa\xa3M\x87" "\xb0~\xde\xa1\xe3\x95\x8e\?\xea\xe8\xd4\x91\xd5\xd1\xa5\xa3[\xc7k\x1dot\xfc\xa4\xe3\xad\x8e\xbfs\xea\xff\xa7S\xff\xbf\x9c\xfa\xff\xed\xd4" "\xff\x1f\x33\xe3\xe7/\xba[[\xdf\xb4\x34ui\x88\?]\xf7\x02\xfa\x00\xfd\x80\x01\xc0 `\x08\x30\x0c\xc8\x01\x46\x00\xa3\x80<`\x0cP" "\x00\x8c\x03\x8a\x80\x45\xc0\x12`\x19\xb0\x02x\x0fX\x05\xac\x01\xae\x00\xd7\x80\n\xe0\x06p+P\xe9\x01pm\x85k+\\[\xe1\xda\n" "\xd7V\xb8\xb6\xb2\x0e\xf8\x00\xf8\x08\xd8\x00l\x42\xbd\xaf\x98\xfa\xf7\xe2w=\x9c\x17\xe8\x07\x0c\x00\x06\x01\x43\x80\x61@\x0e\x30\x02\x18\x05\xe4" "\x01\x63\x80\x02`\x1cP\x04L\x00\xde\x01&\x01S\x80i\xc0\x0c`\x16\x30\x07\x98\x07,\x00\x16\x01K\x80\x65\xc0\n\xe0=@\x33\x89\x96" "\xe3N\xbd\xe4\xd6\xa9\xf7&t\xe9\xdd\xb9\x46\xf4s\x1a\xe2\xee\xea\xb3S\x1f\xca\x99\xd4{\x07\x87*[\x16M$\xc9\xaa\xb8\xbc\xe4T\xd8" "J\x11\xb8\xe2\x92\xc6\x9bT\x8cs:\xca\xa9P\t\x99\x81\x37\x41\xd9\x85&\x84\x01\xaag\xb7\xa8\x9e\xc7\x82\xd4x\x88\xc6yN\xd5\x8b\x97" ";\xd0\x15\xb7\x0b\x94\x99+\x84\x9e\xb7$\x42\xfb\xfb\xa2,[\x30\xf5\xde\xc5)\xb5\x9f\x94ShS/]T\xed\xdc\x1a\xf8\x15\x19R\x9d" "z\xe3\xe2\xa8\x37\xa4)x\x9b\x15z\xa6q\x31\xc7\x8c\x84\x90w\x93\x63\xdc-\x9d\xae\x8a\x90\xfe\xa8\xae`G\x46\xdd\xaf\x31\xa4\xb8\xe3\x95" "\x00\x13\xdb\xc2\xe5\xc3\x9e\x9a\x94\xa7\x41M\xb9\xf0T\\\xf4*S\x0c\x34\x1e\xa1\xeb\xdd\x88`\xfe\x88\xca\xb0t\xf5\xde\xc0-\xb8\xe8\x8a\xb0" "\xbcI/\xa2ip\xa5\x19\x85gL\x46N\xa7\x9e[X\x9a\xa5\xb8\xe3\x15\x8e\xb9\x8c\t\xceI\x88\x82\x65(T(\xd1X,\xaa\xae\x30" "\xad\x99\xad\x88L^\x91\xdc\x05\xf3(\x17#\xcex\xf3\x62\xaa\x9fg\xc8\xa9O\xd1<\xfc\xbe\x1d:\xdd\x87L ^\x38Q\x7f\xa5]\xae" "\x80$\x33`%\x87U\x1f\xe6\xe1V\x45\xd7\x86\x07\x9aV\xb8 Z\xb1\x45&\x9c\xc7\x98\x11\x9c\xde\xbc\xa0g\xc9\x86\x37\xc7\xdcnz\xa2" "\x81\xee.\x97h'\x01\xf1\x8f\xcc\xe0\xabpu'\xe2\xbe\x37\t\x7fs\x9a\xb4\x8f\xd4rO\xad\x9e\xe7\xa2\x05\x84K\xb0\xd2\x03q\xce\x39" "\x85\x33\x33\x62@\xf4\xac\x86S\xdf%\x33\xd2\x98\x96\xc2\x34vt\xb7\xca\xfc\x34\xa5;\x65\x80\x9aT\xda\xd4\xc2iG\x46v\xa5--#" "\xd2\xd6\xf2\xb2Y\xf6\xe5\x8dm\x97m\xb6i[w\x96\xc2\x96V\x99\xa6\x8en\xd3\"\xdb\x9c\xe6\xac=\x93Q}\x8b.\x97\x85K\xcbj" "\x99\x9e\xd3\r\x1d\xddj\x93nl\xec\xe8lji\x97\x91K\xbf\xe8\xca\xc8~\xa5_\xa6[\xda\xe9\xcb\\\x9cnm\xeb\xb0'\xd9\x0e`" "W\x33\x9d\xd3O\x87\xb9\xa6\x9d\xa3\t\xd0\xd1\xd5l.o\x7fk@W\xb3\xed\xf4\xd5\xab\xce\x8e\x9fZ\xda\xd2]\x99V*\xc0\"\xfb#" "\x08\xa5\xd5k\x43\xbaQ\xd6\xb4!\xd3\x98\xee\xce\x66\xc8\xbc\xe8\xe8\x34i\xb6\xa5\x89\xf9\x36\x64\xba\xde\x64\x32\x1a\xa3\xa1\x03\xfb\xd8\x00\xc6\r" "o!\x14\xb8\x01\xe9\xa9\xb1\xbb\xb3\x33\xd3\xde\x45\xff\xba\xeaUKW\xa6\x46\x34\x1d\xc2\xa9\xa9\xbb\xd3 \x93I\x37\x36\x03;[[@\x35" "\x63\t\x99y\xcd\x08@\x19\xadVzQ\xbe\x33N\xa2y\xbchy\xad^\x85\x1e\xa0\x1b\xd8\xd9!R\x36g\x38:\r \x0b\x95\x9b;" "\xde\x18\xc0\xe5\xa2\xbb~\xf2\"-\xed\x1cM\x96\x15\"o&M\xa6\x8b\x43\x97\xfc\xc1\x30\xaf\x35m`\xcb\x8f\x19\x38\xfd\x07\xc6j\x33\xe4" "\xb4lO\xbfm\xa0\"\x93n\x7f\xd3\xdc\xd2J\xd6\x10\x0b\xd8\x61\x86\xb2\x9cj#\xd7\x89\xb0pt\x33\xe3\xb6\xb7H\x41\x8b\x65P{\xa6" "\x0b\xf0\xda\xe6\x95\xa8\xb8\x35\x93U\xe3\xf6\x96v\xf5\xd7\xde\xc1\x61s]\x06X\n\xb4\x33\xad\x0eM\x05\xab\xde\xd1\xde\x98\x01\x1a\x00\xc9@" "\x36\x92\x00\x43\x1e\x8b\xd1\xabt\xa7\x61\xcb\xabLgs\xfa\x95\x86x\xd5\xd9\x42\xcb\xce\xcc\xcbt$u\xd9\x8c\x1a\x45\xd2\x91\xb5\xac \xe9" "L\xb7\"\xc0\x99{\x01\xcf\xb6\xb4\xb5\xb4\x8au\xb4k\x31\xc3g[\xe4V\x11\xcblG[\xc6\x42\x43\xfbl\x97\xd1\x82\xac\x99{\x17=" "v\x35#m]t'\xd0\xd2i\x12Sn\xd8\x66\x12+z\xca\x66m\xf2\x16\x08\?%\xf2\xb6\xc8J~Wsg&\x63\xf5\xb5\xeb\x8d" "@\xb7\xb8\xdaI\x62\x89\xa8\xd4\x30\xb0\xbb]X\x38\xf5\xaf;Z\xbb\x41\xee\r\x87\xc1\x02h\xa9O.K\x02*o,*\x62-XG" "\x1c~\xd3\xfc\x16\x9d\x46\xf6\x81\x46\x63\xdf\x66$=\x9dM\x88\xc4[X\xf9\xb6\xa3\xdb\x80N\xa3\xd3\"\xeb\xbdn\x37t \xb4\x35\x15\x7f" "\n\xce\xe9\xc6\xce\x0e\xf0L\xdb\xf9~\xa3\xf4/\x91\xd4t\xab\xd5n\x12T\x11}G\xa1\x80\xa6U\xa4\xfd$\xe6\xbc]\xca\x83\x61\xe9\xe8" "\x36\xc6\xc0hyk\xda\x94\x65\xbb:m\x0f\x9ct\x35\xbf\x91H\xa0\xf8\x9d\x35\xbd\x7f\x8aP\xdd\xab\xbe\xa4\xad\x89\xb4\x15V\x36\x64\xda\x33" "i\xa3\xfa\x19\x8b\xc7wL\x83\x32-\?\xd1g\xe6m\x87\xb9\xb4\x66%Z:\x1b\xd3I\x9b\xd0\xf1\xa6\xfd\xde\x18\x34ug\x0c\x41\x0c\xd9" "\x33\?\x35\x66^u\xc5\nnT\xdbj\xac\x1d\xb5\xa5\x9d\x96\x96\xc1\x91~\x42\x8e\x88\x1am-\xed\xdd\xa8O&mT\n\\\xda[\x10" "\x15\xa0Q\x33\xd2\xacU&\xf8\x98\xed\x92\xcd\x34H\x18}zQS*\x83P\x87\x19\xccpP\xc0PG\xa9\x45$V+:{\x95\x89" ":y\x65\xcaZ\xc1\xe1\x8f\xddi\xb4K\x87\xe5\x44\x36\xdd\x9e\x05\xbe\xce\xd4\xb4\x46\xf2[\x13\x64\x32\x66 \xe5%\x45Vo\x8c\x64w\xbc" "\x31\x92\x64\xd3l\x42\xca\x95\x44,\xf9J\xd2\xbb\r\xda\xdd\xaf\x38\x98\x8d\x30\xcd\x82\xd2\xeb\x96\x34\x80\xa1\xef%\x19\xe2\xd6$:i\x44\xb3" "\x99\xd6\x17\x36\x83\x35m\x33 *\x43\x17\xffS\xc2h\n\x98\x8a\x36\xc3\x0eL\x11v\xae\xed\xad-\x95\x42\x64#\x0br\xaf\xf2-\x9d\x46" "\x9f\x33m\x16\xaa\xe5\xebL\x36\xd6v\x90\x45M\xad\xfd\xea\xee\x8ck\x13\n\xf6\xd6\xf6\xfa\xf6\x61m\x84tl-\"S\x13\xd9\x0c\x92\xf4" "\xb7*\x19+\xa1\xd5>\x92\x88\xd0\x46\x13\xff\xbc\x17\x36&\xb7\xa6\x9e\x9dr#o\xbf\xe3\x9c[\xdf\xa4\xdf\x66#g\xff\xb5\xaa\xb6I\x32" "\xees]\x7f\xc9\x87\x1bk\xaa\xd4\x0ez\xef\xd3\xdb\xdf\xbeI\xdb\x16\x91\xd5\xb2\x11\x45R\xfb\x13\xce\xdd*z[\xe6\x81\xa3o\xech\xab" "\xa5\xd9(\x63:o\x88\x94:\x36\x07\xa4\xcdik\x12\x62\xd3\x10\x35\x8c,\xc4\x9f\x37\x0c\x91=\x30R\x1d\x45\x10\x1d]](\xf7\x37\x91" "\x44\xbb\x01\xc6\xe3\x35\x1a\xbb\xd5H<\xd6\xd1\xf6\xaa\xdbp\xa8\xb1\xe3>\x32\x33\x89i\xd2i\"\x0e\x63\x61\x1a;[\x1aL\xae+\x8d\x32" "\x98\xc8\xc3\x90-\x36:\x99o\xc2\x90\x97\xf7\x11H\xe4\x9a\xe5\x87m,\xd2\n\x91\x80\x11}\x33m\xaf\xba\x08H\xda-\x7f\x33]\x8d\x89" "\xb0\xa5\xf3\x61\xc0\x62\x46M\x86.&\x1fw\x14\xdb\xb9\xcc\x1b\x62\x1a\xc9\x1d\x9d(\xf3\x16\x08)^\x18\x1a\xbfh\xa1\xb5 \x82\xf2 \xf6" "\xe9l\xcb\xd4R|\xb1r]&\x31\xbcO\xc6\x46\x82P\x89\xf5-\xb0\xd3\xce\xf1%>\xeb\xa5\xe9\xf1\xa5\x88\xd4L\x1c\xd4\x8c\xc8\x08\xd0" "\xbc\xd9\xd8*k\x12\x8c\xbdJ\x86W\x82\x91\xca\x90\x85\x7f\xa4\xe8\x0b\xa9\xb5;\x91\xed\xa8\x99\x92o\x8d\xc8\xc3\x00\xadY\x88w\x9a\xb0L" "\xbfL\x32ZkL\x86l\x1a\xd5\x98p\xeb\nZ\xb2\xdf\x31\x44\?\x66\x32\xafjQ\\\xba\xcb\xe0iS\x08\xd5\x9a\xb1\x15\xd6\x89t\xe1" ">\xd2M\x99\x87!\xdeW\xf1\x9d\x95\x8e\x36\xc3\x97\xc8\xc2}\?\xe4\x13\x64\x88\x36\x63\\\xa2\x98\xcf\x84\x94I\x8b\xd8nt\x10\xd8\xfa\x30" "\x1e\xfc^(\x18y\xb1\xfb\x80\xb0\xa1\x03K\x13\x07\x86Q\xd2\xf9\xdd Q\xc0\xf2\xeb\xde\xbb\xbd\x30\x61\xd8\xf7#G\xeb\xee\x12\xf1\x63\x97" "\x65\xa1I\xdf\xb4\x64\x93&\xf9\x81\x61\xb6.\xd2`o\x94\xec\x95\t-\xac\x37\xac\x05\x9c\x90]=\xbc\xa2\xad\xe2L\x33\x02\xb8\x65\r\x35" "\xb2\x19\x0b\xda,\x84\xd5\xa4Q\x64\x9a!\x84\xce\x66\x14\xb3vg\xfflXj\x43N\x63\x83jq\xa9\x92\xceZ\x80\xaa\xe0\xe4\xed\xf7\xe3" "T\x65\x0c!\xc8\x44\x04\x34\xd9\x96\xb8\x19\xb9\xac\xcd\x46$}\x18\xdb\xa6\xf1\xbfq\x84\xfb\xe7\xe2\xdco\x9d\x9d\x8d|\xa3h\xe0>\x02\x8e" "T\xab+\xd6\xad\x87\x61\xb1\xd5\xb3\xae{\x45\xfb:T\xc6\xda[\xcf.h\x82\x87\xbf\x14>\xff\x85(\xa4\x19j\xdb(\x44\xd6\xc2p\xac" "\xab\xc3\x9c\xbe\xfaN\x64\"k\xdf\x8a\xd8+m\x87\xd0QP\x9e\x08YlxR\x0bLLP\x62\xec\xa5\tM\xde\xa4#\xbf\xaf~Z" "\x81\x9d\xdf\r\xd5\xa3\x18\xdd\x10\x8d\xb4Vn\x9b\xdf\x93\xcf\xe6\xb3Q\x06:\xbe\x89\x89\xf7\xe6\x9ex&\x1bw\x61\xe7\xf8u\xe8\xdf\x12\x17" "w\x18\x10\xb7\xee\xb0\xb5X\xd8\x37\x96\xb4\xd1*\xc1`\xff\xfd\x08+\xda+\xf8z\xbd\xf0\x30\x9cy\xf1\x30\xb0yn\xf4\xefi{w[" "\x83\x06\xfe\x45\xb4Q\xc1\x9b\x64\xd7\x86\x83\xbe\x8b\xe0j\x80\x17\xeb\xe6&\xec\xa6\xef\xafj\x7f+\xf1\xcb\x85\xe0j\xf5\xee\xbc\xe7\xaer\x1b" "L\xef\xd8\?\x97\xb0\x01\xf8\x8b\xc6\x1f~p~\xf1\x12\xd0\xf8\xdc\xf9\x45\x0b\x99\x9f~\xed\xfc\x83\xa8gu\xe2\xaf\xac\xff\xea\xa9\xd7\xbbX" "+\x08\xcb\xfb\xbc\x03\xf5\x62\x84\xfcm\xc5\x1b]\x63\xaf\xe5\x87\xa6L\x63K\x9b\x34\xd1y\x1c\xe5\xb2\xce\x8b\xcet\xa3\xd9p\xfc\x41\xc1~" "\xa7L\xb3\xf3\xa8\rO\xf6\x43\xba\xa9\r_\xe6<\x61'\x42\xad\xc5Q\xc7\xc4\xad\xad\x18\xcbL\xfb\x1f:\xde:\?\x34\x8a\xa1\?\xb5\xb4" "\xff\xf6w\xea\x32\xca\xabQG{Vts\xfe\?\"\x03\xa2\x8a" ; const size_t ChineseDictCompressedLength = 750852; const size_t ChineseDictFullLength = 1926314; void ChineseDictConfigure(friso_t friso, friso_config_t frisoConfig) { frisoConfig->max_len = 5; frisoConfig->r_name = 1; frisoConfig->mix_len = 2; frisoConfig->lna_len = 1; frisoConfig->add_syn = 1; frisoConfig->clr_stw = 0; frisoConfig->keep_urec = 0; frisoConfig->spx_out = 0; frisoConfig->nthreshold = 2000000; friso_set_mode(frisoConfig,2); frisoConfig->en_sseg = 1; frisoConfig->st_minl = 2; strcpy(frisoConfig->kpuncs, "@%.#&+"); } RediSearch-1.2.2/src/dep/cndict/friso.ini000066400000000000000000000036211364126773500201730ustar00rootroot00000000000000#friso configuration file. # do not change the name of the left key. # @email chenxin619315@gmail.com # @date 2012-12-20 # #charset, only UTF8 and GBK support. #set it with UTF8(0) or GBK(1) friso.charset = 0 #lexicon directory absolute path. # the value must end with '/' #this will tell friso how to find friso.lex.ini configuration file and all the lexicon files. # #if it is not start with '/' for linux, or matches no ':' for winnt in its value # friso will search the friso.lex.ini relative to friso.ini #absolute path search: #linux: friso.lex_dir = /c/products/friso/dict/UTF-8/ #Winnt: friso.lex_dir = D:/products/friso/dict/UTF-8/ #relative path search (All system) friso.lex_dir = /Users/mnunberg/Source/friso/vendors/dict/UTF-8/ #the maximum matching length. friso.max_len = 5 #1 for recognition chinese name. # and 0 for closed it. friso.r_name = 1 #the maximum length for the cjk words in a # chinese and english mixed word. friso.mix_len = 2 #the maxinum length for the chinese last name adron. friso.lna_len = 1 #append the synonyms words friso.add_syn = 1 #clear the stopwords or not (1 to open it and 0 to close it) #@date 2013-06-13 friso.clr_stw = 0 #keep the unrecongized words or not (1 to open it and 0 to close it) #@date 2013-06-13 friso.keep_urec = 0 #use sphinx output style like 'admire|love|enjoy einsten' #@date 2013-10-25 friso.spx_out = 0 #start the secondary segmentation for complex english token. friso.en_sseg = 1 #min length of the secondary segmentation token. (better larger than 1) friso.st_minl = 2 #default keep punctuations for english token. friso.kpuncs = @%.#&+ #the threshold value for a char not a part of a chinese name. friso.nthreshold = 2000000 #default mode for friso. # 1 : simple mode - simply maxmum matching algorithm. # 2 : complex mode - four rules of mmseg alogrithm. # 3 : detect mode - only return the words that the do exists in the lexicon friso.mode = 2 RediSearch-1.2.2/src/dep/cndict/gen_simp_trad.py000077500000000000000000000032531364126773500215410ustar00rootroot00000000000000#!/usr/bin/env python """ This script takes a JSON dictionary containing traditional chinese characters as keys, and the simplified equivalents as values. It then outputs a header file appropriate for inclusion. The header output file contains an array, `Cn_T2S` which can be used as ``` simpChr = Cn_T2S[tradChr]; ``` the variable Cn_T2S_MinChr contains the smallest key in the dictionary, whereas Cn_T2S_MaxChr contains the largest key in the dictionary. """ import json import datetime import sys from argparse import ArgumentParser ap = ArgumentParser() ap.add_argument('-f', '--file', help='Chinese map file', required=True) ap.add_argument('-o', '--output', help='Where to place the output C source') options = ap.parse_args() with open(options.file, 'r') as fp: txt = json.load(fp) if options.output is None or ap.output == '-': ofp = sys.stdout else: ofp = open(ap.output, 'w') CP_MIN = 0xffffffff CP_MAX = 0x00 for k in txt: v = ord(k) if v > CP_MAX: CP_MAX = v if v < CP_MIN: CP_MIN = v ofp.write(''' /** * Generated by {script} on {date} * */ #include static const uint16_t Cn_T2S_MinChr = {cp_min}; static const uint16_t Cn_T2S_MaxChr = {cp_max}; static uint16_t Cn_T2S[{cap}]={{ '''.format( script=' '.join(sys.argv), date=datetime.datetime.now(), cp_min=CP_MIN, cp_max=CP_MAX, cap=CP_MAX+1)) num_items = 0 ITEMS_PER_LINE = 5 for trad, simp in txt.items(): ix = ord(trad) val = ord(simp) ofp.write(' [0x{:X}]=0x{:X},'.format(ix, val)) num_items += 1 if num_items >= ITEMS_PER_LINE: ofp.write('\n') num_items = 0 ofp.write('};\n') ofp.flush()RediSearch-1.2.2/src/dep/cndict/lex/000077500000000000000000000000001364126773500171365ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/cndict/lex/friso.lex.ini000066400000000000000000000022541364126773500215530ustar00rootroot00000000000000#friso lexicon configure file. # @email chenxin619315@gmail.com # @date 2012-12-19 #main lexion __LEX_CJK_WORDS__ :[ lex-main.lex; lex-admin.lex; lex-chars.lex; lex-cn-mz.lex; lex-cn-place.lex; lex-company.lex; lex-festival.lex; lex-flname.lex; lex-food.lex; lex-lang.lex; lex-nation.lex; lex-net.lex; lex-org.lex; lex-touris.lex; #add more here ] #single chinese unit lexicon __LEX_CJK_UNITS__ :[ lex-units.lex; ] #chinese and english mixed word lexicon like "b超". __LEX_ECM_WORDS__:[ lex-ecmixed.lex; ] #english and chinese mixed word lexicon like "卡拉ok". __LEX_CEM_WORDS__:[ lex-cemixed.lex; ] #chinese last name lexicon. __LEX_CN_LNAME__:[ lex-lname.lex; ] #single name words lexicon. __LEX_CN_SNAME__:[ lex-sname.lex; ] #first word of a double chinese name. __LEX_CN_DNAME1__:[ lex-dname-1.lex; ] #second word of a double chinese name. __LEX_CN_DNAME2__:[ lex-dname-2.lex; ] #chinese last name decorate word. __LEX_CN_LNA__:[ lex-ln-adorn.lex; ] #stopwords lexicon __LEX_STOPWORDS__:[ lex-stopword.lex; ] #english and punctuation mixed words lexicon. __LEX_ENPUN_WORDS__:[ lex-en-pun.lex; ] #english words(for synonyms words) __LEX_EN_WORDS__:[ lex-en.lex; ] RediSearch-1.2.2/src/dep/cndict/lex/lex-admin.lex000066400000000000000000000012571364126773500215330ustar00rootroot00000000000000人事部/人事管理部门,人事管理部 人事管理部/人事管理部门,人事部 信息产业部/null 农业部/null 医管局/医疗管理部门,医疗管理部 医疗管理部/医疗管理部门,医管局 医疗管理部门/医管局,医疗管理部 发改委/null 国土资源部/null 国防部/人民武装力量部,军事部,防卫厅 军事部/人民武装力量部,防卫厅 外交部/国务院,政治部,对外关系部,外务省 外交部长/null 教育部/null 文化部/null 民政部/null 能源部/null 财政部/null 铁道部/null 防卫厅/null 防卫省/null 革命委员会/null 交通运输部/null 对外经济贸易部/null 技术部/null 总装备部/null RediSearch-1.2.2/src/dep/cndict/lex/lex-cemixed.lex000066400000000000000000000002231364126773500220510ustar00rootroot00000000000000#中文英文混合词词库 卡拉ok/null 漂亮mm/null 拳皇ova/拳皇动漫 奇都ktv/null 哆啦a梦/null 高3/高三 高2/高二 高1/高一 RediSearch-1.2.2/src/dep/cndict/lex/lex-chars.lex000066400000000000000000004650631364126773500215540ustar00rootroot00000000000000退/null/28211 送/null/48681 适/null/22 逃/null/12414 逄/null/232 逅/null/895 逆/null/5627 选/null/163162 逊/null/7390 逋/null/46 逌/null/9 逍/null/2366 透/null/19668 逐/null/10865 逑/null/288 递/null/5007 途/null/17088 逖/null/182 逗/null/1843 通/null/170230 逛/null/8014 逜/null/6 逝/null/7491 逞/null/1137 邀/null/8702 速/null/80360 造/null/71032 邂/null/1041 逡/null/17 邃/null/345 逢/null/23680 邅/null/15 逤/null/24 邆/null/7 逦/null/40 邈/null/123 邋/null/154 邍/null/13 逭/null/10 逮/null/1407 逯/null/8 邑/null/150 邓/null/4595 邔/null/8 邕/null/20 逴/null/6 逵/null/265 邗/null/9 逶/null/32 邘/null/10 邙/null/12 逸/null/9922 邛/null/10 逻/null/8629 邝/null/200 鄀/null/5 逼/null/7474 邞/null/11 逽/null/17 邟/null/12 鄁/null/11 兀/null/119 逾/null/1514 邠/null/24 鄂/null/79 嗀/null/11 逿/null/25 邡/null/9 鄃/null/7 邢/null/188 鄄/null/17 那/null/610340 鄅/null/12 邥/null/7 鄇/null/7 邦/null/10997 鄈/null/11 邧/null/20 鄋/null/15 邪/null/10263 鄍/null/7 邬/null/114 鄎/null/15 鄏/null/17 邮/null/15910 鄐/null/24 邯/null/52 鄑/null/20 邰/null/278 邱/null/9107 邲/null/16 邳/null/13 邴/null/17 邵/null/1064 鄗/null/8 邶/null/16 鄙/null/1885 邸/null/137 鄚/null/10 邹/null/946 鄛/null/10 邺/null/42 鄜/null/9 邻/null/5737 鄝/null/11 鄞/null/27 醀/null/14 邽/null/15 鄟/null/8 醁/null/17 邾/null/12 鄠/null/13 醂/null/6 邿/null/11 鄡/null/14 鄢/null/74 醄/null/13 鄣/null/16 醅/null/25 鄤/null/12 醆/null/8 醇/null/2173 鄦/null/14 醉/null/11754 鄨/null/9 醊/null/10 鄩/null/5 醋/null/1461 鄪/null/12 鄫/null/11 醍/null/44 鄬/null/9 醏/null/9 鄮/null/10 醐/null/33 鄯/null/5 醑/null/9 醒/null/19742 聂/null/842 鄱/null/16 醓/null/13 聃/null/12 鄳/null/6 聆/null/1703 鄵/null/10 聇/null/9 聈/null/13 醙/null/8 鄸/null/23 醚/null/71 聊/null/34724 鄹/null/15 醛/null/73 聋/null/613 职/null/53031 醝/null/5 聍/null/19 鄻/null/7 聏/null/9 醟/null/19 鈂/null/5 聐/null/10 鄾/null/11 醠/null/8 聑/null/11 鄿/null/15 醡/null/27 聒/null/163 醢/null/18 醣/null/61 联/null/86573 鈆/null/14 醥/null/10 鈇/null/12 醧/null/10 聘/null/3233 醨/null/10 鈊/null/8 醪/null/11 鈌/null/7 聚/null/18174 聜/null/6 醭/null/9 鈏/null/9 聝/null/16 醮/null/82 胀/null/1936 胁/null/4090 醰/null/14 胂/null/10 胃/null/3424 醲/null/12 胄/null/26 醳/null/7 胅/null/14 醴/null/47 鈖/null/7 聤/null/16 胆/null/7982 醵/null/11 鈗/null/9 胇/null/8 胈/null/10 醷/null/19 鈙/null/9 聧/null/6 胉/null/14 鈚/null/10 胊/null/22 醹/null/13 聩/null/18 醺/null/158 鈜/null/32 聪/null/11620 背/null/422 胍/null/13 聬/null/9 胎/null/7627 胏/null/1927 醽/null/16 胐/null/13 醾/null/8 銂/null/121 胑/null/5 聱/null/38 胔/null/9 鈤/null/10 銆/null/8 胕/null/15 銇/null/9 胖/null/12923 銈/null/9 胗/null/23 銊/null/5 胘/null/10 胙/null/13 銋/null/31 聸/null/10 胚/null/422 銌/null/8 胛/null/123 銎/null/13 胜/null/27 鈭/null/13 胝/null/97 胞/null/8509 胠/null/7 鈱/null/17 聿/null/359 胡/null/10 腃/null/12 鈲/null/15 銔/null/13 腄/null/16 胣/null/9 胤/null/262 腆/null/233 銗/null/26 腇/null/5 胥/null/371 鈶/null/12 胦/null/14 銙/null/9 胧/null/632 腊/null/57 腋/null/150 胪/null/24 腌/null/27 銝/null/25 胫/null/103 腍/null/11 錀/null/13 胭/null/161 腏/null/7 錂/null/15 腐/null/4691 瀀/null/11 胯/null/152 腑/null/277 銡/null/10 瀁/null/9 胰/null/39 腒/null/9 銢/null/20 胱/null/192 腓/null/146 胲/null/7 腔/null/3523 銤/null/21 瀄/null/7 胳/null/152 腕/null/1195 胴/null/43 胵/null/7 銧/null/14 錉/null/7 瀇/null/5 胶/null/5012 腘/null/10 錋/null/8 胸/null/8631 錌/null/9 腛/null/5 瀊/null/9 胹/null/12 錍/null/13 胺/null/731 腜/null/11 錎/null/14 瀌/null/10 瀍/null/11 胻/null/14 銮/null/271 瀎/null/9 胼/null/90 腞/null/12 臀/null/425 能/null/668264 錓/null/5 胾/null/8 腠/null/9 臂/null/4251 瀑/null/1514 臃/null/79 錔/null/6 臄/null/5 腢/null/10 臅/null/11 銴/null/15 錖/null/8 瀔/null/7 腤/null/7 臆/null/639 銵/null/17 腥/null/1548 臇/null/15 銶/null/7 瀖/null/22 瀗/null/9 腧/null/19 臊/null/123 腩/null/34 瀙/null/8 臌/null/8 錝/null/11 瀚/null/1351 錞/null/21 鎀/null/10 瀛/null/423 瀜/null/6 腭/null/15 腮/null/169 臐/null/10 鎃/null/12 炀/null/41 腯/null/8 臑/null/12 腰/null/5106 炂/null/8 腱/null/93 錣/null/10 炃/null/5 瀡/null/11 腲/null/13 錤/null/17 炄/null/5 瀢/null/10 臕/null/10 錥/null/10 瀣/null/23 炅/null/47 腴/null/82 鎈/null/8 瀤/null/8 炆/null/18 臗/null/8 錧/null/31 鎉/null/19 腶/null/9 腷/null/8 臙/null/10 炉/null/16 錪/null/10 鎌/null/32 炊/null/779 腹/null/4278 臛/null/11 鎍/null/12 瀩/null/9 腺/null/496 臜/null/19 鎎/null/11 瀪/null/8 腻/null/2042 臝/null/13 錭/null/12 鎏/null/14 瀫/null/18 腼/null/240 臞/null/7 艀/null/17 炎/null/6632 鎑/null/15 腽/null/11 鎒/null/8 腾/null/4576 艂/null/11 瀯/null/9 炑/null/17 腿/null/7973 臡/null/8 炒/null/3364 艄/null/63 鎕/null/24 瀱/null/10 炓/null/11 臣/null/4750 艅/null/10 錴/null/21 炔/null/15 錵/null/28 鎗/null/269 瀳/null/14 炕/null/99 艇/null/2818 瀴/null/15 炖/null/10 臦/null/10 鎙/null/6 瀵/null/14 臧/null/174 艉/null/52 炘/null/168 錹/null/12 瀷/null/7 炙/null/460 臩/null/11 艋/null/257 瀸/null/8 炚/null/18 自/null/462155 鎝/null/11 鐀/null/13 鎞/null/12 瀹/null/7 臬/null/122 艎/null/7 鎟/null/7 瀺/null/10 炜/null/646 臭/null/8107 艏/null/22 錾/null/15 艐/null/5 瀻/null/15 炝/null/32 臮/null/6 瀼/null/24 焀/null/9 艑/null/7 炟/null/7 艒/null/14 鐆/null/7 焂/null/78 艓/null/11 鎤/null/14 瀿/null/9 炡/null/13 臲/null/11 鎥/null/5 鐇/null/9 焄/null/12 至/null/158841 艕/null/6 致/null/3042 艖/null/14 鐉/null/12 焆/null/7 艗/null/15 鐊/null/13 艘/null/1820 鎨/null/14 臷/null/8 鐌/null/11 焉/null/2648 臸/null/10 艚/null/11 鐍/null/18 焊/null/11 臹/null/10 艛/null/12 鐎/null/12 炩/null/12 焋/null/11 艜/null/9 鐏/null/18 焌/null/23 臻/null/654 炫/null/1561 焍/null/10 臼/null/484 艞/null/11 苀/null/11 鐑/null/6 炬/null/762 焎/null/13 艟/null/37 苁/null/11 鎯/null/83 炭/null/787 臾/null/129 苂/null/8 焐/null/5 炮/null/6650 鎱/null/12 炯/null/497 臿/null/7 艡/null/11 苃/null/8 鐕/null/11 炰/null/15 鐖/null/12 炱/null/21 焓/null/11 鎴/null/11 炳/null/1898 焕/null/1716 苇/null/1097 炴/null/9 焖/null/32 苈/null/7 鎷/null/9 炵/null/13 焗/null/82 焘/null/15 艨/null/14 炷/null/34 焙/null/100 艩/null/13 苋/null/17 炸/null/7863 焚/null/1243 苌/null/7 点/null/319559 钀/null/7 焛/null/21 苍/null/16589 焜/null/340 艬/null/10 苎/null/62 艭/null/8 苏/null/23 钃/null/7 艮/null/59 炼/null/1928 焞/null/12 熀/null/14 良/null/34852 苑/null/3067 炽/null/416 焟/null/6 熁/null/11 艰/null/2159 苒/null/56 炾/null/6 钆/null/11 焠/null/14 熂/null/10 苓/null/756 钇/null/14 色/null/108485 苔/null/890 针/null/22 焢/null/137 熄/null/2282 艳/null/719 苕/null/20 焣/null/13 熅/null/12 艴/null/7 苖/null/15 钉/null/2195 熆/null/12 艵/null/9 苗/null/4802 钊/null/421 焥/null/13 熇/null/97 鐩/null/8 钋/null/11 焦/null/7098 苙/null/9 鐪/null/13 钌/null/10 熉/null/11 钍/null/456 焨/null/20 熊/null/18879 艹/null/539 苛/null/1663 鐬/null/14 艺/null/28831 苜/null/42 钏/null/243 钐/null/10 艼/null/13 苞/null/256 荀/null/243 钑/null/9 艽/null/10 苟/null/1055 荁/null/12 鐰/null/12 钒/null/16 熏/null/109 艾/null/7814 苠/null/60 荂/null/34 鐱/null/12 钓/null/7422 焮/null/12 熐/null/15 艿/null/8 苡/null/40 荃/null/258 钔/null/9 焯/null/70 荄/null/10 恀/null/10 钕/null/12 焰/null/676 恁/null/649 钖/null/94 焱/null/36 苣/null/46 荅/null/14 恂/null/18 钗/null/1811 焲/null/7 熔/null/638 苤/null/51 荆/null/706 恃/null/955 钘/null/148 若/null/141796 荇/null/73 恄/null/11 鐷/null/12 钙/null/409 苦/null/53817 荈/null/21 恅/null/9 草/null/29857 鐹/null/15 钛/null/266 然/null/364596 苨/null/11 恇/null/12 熙/null/3247 荋/null/19 鐻/null/15 钝/null/1527 熚/null/10 苪/null/9 荌/null/11 恉/null/11 鐼/null/9 钞/null/1278 销/null/13028 熛/null/14 苫/null/15 荍/null/24 鐽/null/244 钟/null/25928 焺/null/9 锁/null/11741 熜/null/29 苬/null/13 荎/null/65 恋/null/41039 钠/null/157 锂/null/154 熝/null/7 苭/null/23 荏/null/210 恌/null/22 钡/null/330 熞/null/36 荐/null/548 恍/null/1352 钢/null/17392 锄/null/20 苯/null/295 荑/null/20 钣/null/355 锅/null/5848 熟/null/22719 爁/null/12 苰/null/13 荒/null/8322 钤/null/70 锆/null/26 熠/null/82 爂/null/7 英/null/77253 荓/null/18 恐/null/31356 钥/null/7 锇/null/12 熡/null/6 爃/null/11 苲/null/11 荔/null/140 钦/null/5650 锈/null/11 苳/null/127 恒/null/88 钧/null/2980 锉/null/103 爅/null/14 苴/null/10 荖/null/48 恓/null/13 钨/null/114 锊/null/12 熤/null/6 爆/null/19616 苵/null/13 恔/null/23 熥/null/8 爇/null/31 苶/null/7 恕/null/2873 钩/null/1401 锋/null/10369 荙/null/8 钪/null/9 锌/null/141 熧/null/10 荚/null/73 钫/null/6 熨/null/145 爊/null/11 苹/null/111 荛/null/79 恘/null/10 钬/null/5 锎/null/21 熩/null/7 苺/null/41 荜/null/26 恙/null/310 钭/null/11 熪/null/10 爌/null/24 苻/null/52 恚/null/128 钮/null/3697 锐/null/5831 荞/null/91 菀/null/133 钯/null/18 锑/null/23 熬/null/2994 荟/null/183 菁/null/3741 恛/null/27 钰/null/1232 锒/null/88 苾/null/40 荠/null/15 菂/null/11 钱/null/84904 锓/null/9 荡/null/3359 菃/null/13 恝/null/12 恞/null/5 惀/null/7 钲/null/258 锔/null/11 熯/null/15 菄/null/9 惁/null/8 钳/null/418 锕/null/13 熰/null/19 荣/null/27310 菅/null/161 恟/null/12 钴/null/76 锖/null/17 爓/null/11 荤/null/497 菆/null/15 惃/null/9 钵/null/220 锗/null/53 爔/null/11 惄/null/10 钶/null/13 熳/null/14 荥/null/26 菇/null/892 恢/null/6562 情/null/318027 错/null/168867 荦/null/45 菈/null/181 恣/null/542 惆/null/616 钸/null/42 锚/null/270 熵/null/46 荧/null/127 菉/null/16 恤/null/41 惇/null/80 钹/null/53 锛/null/9 荨/null/83 菊/null/2465 惈/null/10 钺/null/49 锜/null/163 爙/null/12 荩/null/16 菋/null/13 恦/null/7 熸/null/5 惉/null/6 钻/null/20 爚/null/10 荪/null/154 菌/null/2020 恧/null/9 惊/null/9 钼/null/21 锞/null/18 熹/null/432 荫/null/41 恨/null/17543 菎/null/5 惋/null/507 钽/null/21 锟/null/91 恩/null/13311 惌/null/9 钾/null/200 锠/null/63 爝/null/12 荭/null/15 菏/null/11 恪/null/118 惍/null/14 钿/null/262 锡/null/2586 熼/null/8 爞/null/18 犀/null/1165 恫/null/191 惎/null/14 锢/null/180 熽/null/14 爟/null/7 犁/null/187 药/null/201 菑/null/25 恬/null/712 惏/null/11 锣/null/2209 恭/null/10148 锤/null/312 恮/null/19 惑/null/11491 锥/null/1251 熿/null/8 菔/null/21 息/null/54380 锦/null/6282 爢/null/15 犄/null/25 荳/null/1570 菕/null/9 恰/null/7158 惓/null/21 锧/null/9 爣/null/11 犅/null/7 荴/null/14 菖/null/31 惔/null/10 犆/null/7 荵/null/12 菗/null/13 恲/null/20 锩/null/5 惕/null/860 荶/null/7 菘/null/42 恳/null/3589 爦/null/10 犈/null/7 荷/null/5260 菙/null/11 爧/null/7 犉/null/10 荸/null/13 惘/null/1423 閍/null/8 爨/null/11 犊/null/143 菛/null/10 恶/null/4734 惙/null/76 锬/null/14 爩/null/13 犋/null/10 荺/null/46 菜/null/14828 惚/null/605 锭/null/92 爪/null/1861 犌/null/8 荻/null/381 菝/null/9 恸/null/498 惛/null/15 键/null/27734 閐/null/9 犍/null/58 荼/null/549 菞/null/16 恹/null/62 葀/null/33 犎/null/5 惜/null/28798 锯/null/867 爬/null/7216 荽/null/22 菟/null/35 恺/null/464 锰/null/62 荾/null/6 菠/null/249 葂/null/6 惝/null/8 锱/null/45 犐/null/8 荿/null/11 菡/null/191 恻/null/172 葃/null/11 慀/null/10 锲/null/50 犑/null/11 菢/null/17 恼/null/7196 葄/null/109 慁/null/5 惟/null/3771 爰/null/195 犒/null/66 菣/null/10 恽/null/9 葅/null/25 菤/null/5 惠/null/15241 锴/null/51 爱/null/262882 犓/null/11 葆/null/305 锵/null/1743 菥/null/12 恿/null/263 葇/null/10 惢/null/18 锶/null/85 犕/null/8 慅/null/12 锷/null/33 惤/null/5 慆/null/11 锸/null/6 爵/null/5723 犗/null/10 菧/null/9 锹/null/55 閛/null/13 父/null/30608 犘/null/67 菨/null/8 惦/null/465 慈/null/9660 锺/null/7000 閜/null/19 爷/null/6775 菩/null/9485 葋/null/8 惧/null/5840 慉/null/30 锻/null/963 爸/null/15817 犚/null/7 菪/null/10 葌/null/13 惨/null/15736 慊/null/13 锼/null/14 閞/null/46 爹/null/2093 阀/null/1153 菫/null/128 葍/null/7 惩/null/2072 锽/null/42 閟/null/21 阁/null/9841 菬/null/11 葎/null/6 慌/null/2301 锾/null/126 爻/null/306 阂/null/188 犝/null/7 惫/null/1048 阃/null/15 犞/null/16 猀/null/6 菮/null/9 葐/null/14 惬/null/254 慎/null/4705 爽/null/32512 阄/null/15 猁/null/18 葑/null/63 惭/null/1484 慏/null/15 阅/null/10982 菰/null/19 惮/null/336 阆/null/18 犡/null/9 猃/null/7 菱/null/19 惯/null/16178 慑/null/20 阇/null/58 菲/null/7217 葔/null/562 惰/null/1570 慒/null/17 阈/null/21 菳/null/15 慓/null/33 阉/null/466 犣/null/17 葖/null/11 慔/null/9 阊/null/17 犤/null/7 菵/null/10 想/null/525378 慕/null/10657 阋/null/318 犥/null/6 猇/null/11 菶/null/10 惴/null/70 慖/null/9 阌/null/10 犦/null/14 猈/null/11 倅/null/19 葙/null/17 惵/null/7 阍/null/11 葚/null/96 倇/null/5 惶/null/1753 阎/null/795 犨/null/9 猊/null/9 菹/null/9 葛/null/10409 惷/null/14 犩/null/18 猋/null/10 菺/null/30 惸/null/9 阏/null/6 犪/null/7 猌/null/12 菻/null/30 葝/null/9 惹/null/5571 慛/null/9 閮/null/10 阐/null/9481 菼/null/11 葞/null/6 惺/null/413 蓁/null/328 阑/null/1170 犬/null/2637 猎/null/3598 菽/null/21 葟/null/11 蓂/null/8 慝/null/19 閰/null/53 阒/null/44 猏/null/14 倌/null/877 菾/null/48 惼/null/59 慞/null/20 阓/null/9 犮/null/29 倍/null/12651 菿/null/7 葡/null/2121 蓄/null/2276 阔/null/5772 犯/null/21825 猑/null/10 倎/null/6 蓅/null/14 懁/null/13 阕/null/358 犰/null/25 猒/null/7 倏/null/252 董/null/3443 惾/null/11 懂/null/42342 阖/null/262 猓/null/12 惿/null/12 蓇/null/11 慡/null/8 懃/null/39 閵/null/6 阗/null/21 葥/null/38 慢/null/42566 阘/null/9 猕/null/133 倒/null/51920 蓉/null/4633 懅/null/8 閷/null/11 阙/null/1235 犴/null/17 猖/null/453 倓/null/7 葧/null/12 蓊/null/430 懆/null/28 阚/null/13 犵/null/8 猗/null/18 倔/null/227 葨/null/12 慥/null/20 阛/null/8 状/null/34746 猘/null/16 倕/null/9 慦/null/12 懈/null/775 閺/null/19 阜/null/177 犷/null/100 葩/null/139 蓌/null/8 慧/null/24112 倗/null/8 蓍/null/20 慨/null/2921 懊/null/607 阞/null/14 犹/null/8446 隀/null/10 猛/null/7890 倘/null/2324 葫/null/449 蓎/null/14 懋/null/890 队/null/112529 犺/null/9 猜/null/22272 候/null/79364 葬/null/2162 蓏/null/7 阠/null/9 猝/null/154 倚/null/14270 葭/null/596 蓐/null/11 阡/null/58 隃/null/21 猞/null/21 葮/null/9 蓑/null/130 慬/null/67 阢/null/15 犽/null/15 玁/null/16 倛/null/9 蓒/null/11 慭/null/25 阣/null/9 隅/null/953 玂/null/16 倜/null/137 葰/null/11 蓓/null/986 阤/null/11 犿/null/7 隆/null/13987 猡/null/69 玃/null/15 葱/null/1631 倞/null/5 蓔/null/7 懑/null/30 隇/null/11 猢/null/36 玄/null/7281 傀/null/723 慰/null/5354 懒/null/21 隈/null/9 猣/null/14 玅/null/9 借/null/21435 葳/null/456 慱/null/5 傂/null/5 蓖/null/8 倠/null/22 葴/null/17 蓗/null/11 慲/null/12 懔/null/80 阨/null/36 倡/null/1683 傃/null/6 葵/null/1323 隋/null/275 猥/null/282 率/null/45566 倢/null/39 葶/null/14 懖/null/17 阪/null/1854 猦/null/10 玈/null/13 傅/null/3730 慵/null/550 隍/null/374 猧/null/11 玉/null/18649 葸/null/10 蓛/null/14 懘/null/18 玊/null/23 倥/null/19 傇/null/11 葹/null/8 慷/null/678 阭/null/29 随/null/49767 猩/null/3099 王/null/119466 倦/null/4691 葺/null/16 蓝/null/24644 阮/null/4447 隐/null/15820 猪/null/24947 倧/null/16 慹/null/11 蕀/null/13 猫/null/90587 倨/null/97 蓟/null/47 慺/null/10 隑/null/12 猬/null/156 玎/null/98 倩/null/1761 傋/null/17 葽/null/19 蓠/null/29 阰/null/8 隒/null/7 猭/null/14 倪/null/1579 傌/null/501 葾/null/353 蕃/null/2037 所/null/558469 阱/null/1177 隓/null/10 献/null/11173 傍/null/1404 蕄/null/13 扁/null/27687 防/null/30067 隔/null/15125 玑/null/137 倬/null/95 傎/null/7 蓣/null/9 蕅/null/15 懠/null/12 扂/null/9 阳/null/48494 猰/null/15 玒/null/7 倭/null/153 阴/null/14299 猱/null/15 玓/null/41 蓥/null/10 蕇/null/9 扃/null/14 阵/null/33507 隗/null/13 猲/null/11 玔/null/20 倯/null/11 蓦/null/821 蕈/null/49 阶/null/16038 隘/null/848 猳/null/8 玕/null/10 倰/null/9 傒/null/39 蕉/null/1600 隙/null/1142 猴/null/3670 玖/null/599 倱/null/8 蓨/null/8 蕊/null/965 懤/null/8 扆/null/23 猵/null/7 玗/null/20 傔/null/11 蓩/null/7 懥/null/9 扇/null/5687 阹/null/8 倳/null/11 傕/null/11 蓪/null/9 懦/null/997 扈/null/113 阺/null/18 障/null/12357 猷/null/179 玙/null/6 懧/null/16 扉/null/471 阻/null/10268 玚/null/32 倵/null/23 蓫/null/10 蕍/null/7 扊/null/13 阼/null/10 隞/null/10 需/null/90154 玛/null/6369 蓬/null/2217 懩/null/15 手/null/236673 阽/null/15 猺/null/6 霁/null/169 倷/null/12 懪/null/6 霂/null/23 玝/null/7 懫/null/8 才/null/304782 阿/null/88578 隡/null/27 猼/null/15 琀/null/7 傛/null/8 蕑/null/12 扎/null/1535 隢/null/10 霄/null/730 玟/null/457 债/null/2424 琁/null/46 傜/null/273 蓰/null/18 懭/null/12 猾/null/193 霅/null/19 玠/null/243 蓱/null/6 懮/null/37 扐/null/9 隤/null/20 猿/null/728 霆/null/756 玡/null/10 球/null/57 傝/null/11 蓲/null/10 蕔/null/16 扑/null/493 震/null/11745 玢/null/26 值/null/57997 琄/null/21 傞/null/17 蓳/null/46 懰/null/35 扒/null/653 霈/null/710 琅/null/182 蕖/null/18 懱/null/9 打/null/233464 隧/null/1483 霉/null/239 玤/null/14 倾/null/8849 理/null/286328 蕗/null/18 扔/null/931 玥/null/63 琇/null/466 儃/null/15 蓶/null/8 隩/null/13 霋/null/7 玦/null/13 琈/null/11 蓷/null/27 蕙/null/1086 傣/null/25 懵/null/295 霍/null/2102 琉/null/1414 儆/null/87 蓹/null/15 蕛/null/10 托/null/8962 隬/null/44 霎/null/488 琊/null/26 傥/null/173 儇/null/9 蓺/null/13 扙/null/41 霏/null/478 玩/null/134519 琋/null/9 蓻/null/11 蕝/null/10 扚/null/9 隮/null/6 霐/null/12 琌/null/9 傧/null/187 蓼/null/102 蕞/null/47 懹/null/16 藀/null/13 扛/null/906 玫/null/8543 储/null/4641 儊/null/13 玬/null/5 扜/null/14 隰/null/33 霒/null/8 琎/null/11 傩/null/249 儋/null/8 蓾/null/5 蕠/null/10 懻/null/11 藂/null/11 玭/null/10 琏/null/174 儌/null/58 蓿/null/17 蕡/null/9 藃/null/12 扞/null/30 霓/null/616 玮/null/3656 琐/null/740 藄/null/10 环/null/49945 催/null/4383 蕣/null/19 藅/null/15 扠/null/9 拂/null/2075 隳/null/21 现/null/31466 蕤/null/143 懿/null/2840 藆/null/13 霖/null/5006 玱/null/23 傮/null/15 藇/null/5 蕥/null/14 扢/null/12 拄/null/120 玲/null/8108 儑/null/12 蕦/null/6 藈/null/20 隶/null/1318 霘/null/14 玳/null/24 傰/null/10 儒/null/6535 玴/null/5 蕧/null/7 藉/null/13010 扣/null/87 担/null/24548 霙/null/30 琖/null/21 傱/null/56 儓/null/14 蕨/null/201 扤/null/18 拆/null/9013 玵/null/10 傲/null/8263 藋/null/12 扥/null/17 拇/null/421 隹/null/194 玶/null/10 扦/null/53 拈/null/352 霜/null/2991 玷/null/98 霝/null/5 蕫/null/26 执/null/55340 拉/null/47785 玸/null/8 琚/null/54 儗/null/10 蕬/null/11 拊/null/30 隼/null/329 霞/null/2399 玹/null/88 琛/null/214 傶/null/16 扩/null/9459 隽/null/658 霟/null/6 玺/null/436 鞁/null/8 藏/null/22926 扪/null/341 拌/null/597 难/null/147058 霠/null/11 玻/null/4566 鞂/null/7 琝/null/29 傸/null/17 儚/null/12 蕮/null/10 藐/null/848 扫/null/9663 拍/null/19462 隿/null/9 玼/null/17 鞃/null/11 璀/null/421 藑/null/19 扬/null/717 拎/null/282 霢/null/16 鞄/null/12 傺/null/21 璁/null/411 儜/null/18 藒/null/7 扭/null/5035 拏/null/23 霣/null/7 玾/null/8 鞅/null/57 琠/null/30 傻/null/13350 冀/null/787 蕱/null/9 藓/null/39 扮/null/4747 拐/null/51 玿/null/14 琡/null/50 璃/null/183 蕲/null/33 扯/null/7783 拑/null/13 霥/null/12 琢/null/329 冁/null/14 藕/null/252 扰/null/16 拒/null/10418 霦/null/16 鞈/null/8 琣/null/57 傽/null/9 璅/null/13 蕴/null/2321 扱/null/31 拓/null/3487 琤/null/44 璆/null/41 儠/null/12 蕵/null/10 藗/null/12 扲/null/9 拔/null/8059 霨/null/16 鞊/null/16 琥/null/190 傿/null/8 璇/null/720 儡/null/993 霩/null/5 蕶/null/5 藘/null/11 扳/null/1394 鞋/null/7928 琦/null/2278 璈/null/7 儢/null/13 内/null/160755 藙/null/9 扴/null/6 拖/null/12492 霪/null/62 蕸/null/11 藚/null/8 拗/null/334 霫/null/12 鞍/null/620 琨/null/1149 璊/null/53 儤/null/9 冇/null/273 蕹/null/16 扶/null/3238 拘/null/4064 霬/null/20 鞎/null/8 儥/null/16 冈/null/2949 蕺/null/7 藜/null/32 扷/null/11 拙/null/1719 霭/null/402 琩/null/21 璋/null/2440 儦/null/22 冉/null/485 蕻/null/13 拚/null/950 霮/null/23 琪/null/6263 蕼/null/16 藞/null/8 批/null/23428 虀/null/31 招/null/30651 霯/null/6 鞑/null/343 琫/null/14 藟/null/6 扺/null/78 拜/null/35481 霰/null/51 琬/null/292 璎/null/76 儩/null/15 册/null/23203 蕾/null/2256 扻/null/18 琭/null/8 再/null/261987 藡/null/7 扼/null/573 虃/null/13 捀/null/122 露/null/16329 鞔/null/10 琮/null/974 璐/null/144 藢/null/13 扽/null/9 拟/null/13172 捁/null/9 冏/null/11 藣/null/12 找/null/166755 捂/null/93 琰/null/49 璒/null/9 儭/null/16 藤/null/428 承/null/27831 虆/null/19 捃/null/7 琱/null/89 儮/null/8 虇/null/5 霵/null/6 冑/null/74 拢/null/2935 捄/null/9 鞗/null/13 琲/null/47 璔/null/16 冒/null/14607 藦/null/8 虈/null/8 拣/null/539 捅/null/302 鞘/null/419 琳/null/4700 璕/null/6 儰/null/59 冓/null/9 捆/null/19 鞙/null/6 琴/null/29126 儱/null/8 冔/null/13 藨/null/9 霸/null/14399 鞚/null/7 琵/null/881 璗/null/66 虋/null/5 冕/null/643 藩/null/531 拥/null/21343 捇/null/10 霹/null/6653 琶/null/787 璘/null/53 儳/null/8 虌/null/97 拦/null/4012 捈/null/17 霺/null/9 鞜/null/9 儴/null/8 冗/null/1081 藫/null/12 虍/null/11 拧/null/139 捉/null/5015 鞝/null/6 璚/null/12 儵/null/15 冘/null/9 藬/null/11 虎/null/26973 拨/null/13638 捊/null/10 鞞/null/43 頀/null/23 写/null/111228 藭/null/14 虏/null/527 择/null/37712 捋/null/45 璜/null/361 虐/null/2221 捌/null/875 霾/null/397 鞠/null/742 霿/null/6 甀/null/9 军/null/70663 拫/null/29 捍/null/1366 鞡/null/10 琼/null/3585 璞/null/1805 农/null/12610 藯/null/13 虑/null/29844 括/null/20687 捎/null/172 鞢/null/9 頄/null/9 璟/null/663 甂/null/7 藰/null/14 虒/null/19 拭/null/1464 捏/null/1464 鞣/null/12 璠/null/84 甃/null/10 冞/null/12 刀/null/26549 藱/null/8 虓/null/18 拮/null/171 捐/null/6649 鞤/null/10 甄/null/2747 刁/null/1380 藲/null/15 虔/null/999 拯/null/1626 捑/null/14 鞥/null/50 儽/null/7 冠/null/22729 拰/null/16 虖/null/10 拱/null/1070 甇/null/10 刃/null/1331 拲/null/12 捔/null/17 鞨/null/13 璥/null/20 儿/null/13 甈/null/15 冢/null/79 拳/null/10349 捕/null/7836 藷/null/66 虙/null/8 拴/null/154 捖/null/11 鞪/null/8 璧/null/710 冤/null/2711 分/null/243477 藸/null/11 虚/null/19729 拵/null/12 捗/null/10 鞫/null/15 頍/null/7 璨/null/270 甋/null/11 冥/null/3381 切/null/58909 拶/null/11 捘/null/8 鞬/null/13 璩/null/78 刈/null/122 拷/null/4423 捙/null/23 鞭/null/2774 璪/null/10 拸/null/5 刉/null/10 藻/null/746 捚/null/10 鞮/null/9 甍/null/12 刊/null/17481 虞/null/1140 拹/null/13 蛀/null/505 鞯/null/11 藽/null/7 拺/null/108 蛁/null/48 甏/null/23 刌/null/10 藾/null/10 拻/null/7 蛂/null/61 璭/null/10 虡/null/5 甐/null/13 刍/null/317 藿/null/27 拼/null/13120 蛃/null/8 捞/null/2092 冬/null/14 刎/null/108 虢/null/19 拽/null/269 蛄/null/19 损/null/11726 鞳/null/13 璯/null/8 甑/null/14 甒/null/5 虣/null/11 拾/null/5764 蛅/null/11 揂/null/35 鞴/null/17 頖/null/6 虤/null/5 刐/null/11 拿/null/80772 蛆/null/178 捡/null/6538 揃/null/53 璱/null/14 甓/null/6 冯/null/1990 刑/null/4795 虥/null/9 蛇/null/4671 换/null/81878 揄/null/107 璲/null/21 甔/null/8 冰/null/16718 划/null/3646 蛈/null/13 捣/null/40 揅/null/25 鞶/null/11 冱/null/21 刓/null/27 蛉/null/24 揆/null/295 鞷/null/20 冲/null/8783 虨/null/10 蛊/null/353 捥/null/15 揇/null/8 甗/null/8 鞹/null/5 决/null/97148 虩/null/12 蛋/null/22656 揈/null/7 頛/null/13 璶/null/11 甘/null/8693 刖/null/31 虪/null/13 蛌/null/11 璷/null/8 况/null/63334 列/null/61352 虫/null/4789 捧/null/3679 揉/null/664 鞻/null/9 頝/null/10 璸/null/9 甚/null/60517 冶/null/492 刘/null/29759 虬/null/44 蛎/null/479 揊/null/10 頞/null/26 颀/null/77 冷/null/32223 则/null/108300 虭/null/9 蛏/null/12 捩/null/115 揋/null/16 璺/null/14 颁/null/2022 甜/null/8051 甝/null/5 刚/null/61146 虮/null/7 蛐/null/26 揌/null/13 頠/null/7 璻/null/8 颂/null/2040 冹/null/7 疀/null/14 创/null/31835 蛑/null/12 揍/null/683 鞿/null/8 颃/null/6 刜/null/19 虰/null/8 揎/null/8 预/null/44980 生/null/601668 冻/null/3583 初/null/45256 捭/null/19 描/null/10918 璾/null/11 颅/null/432 冼/null/44 刞/null/9 劀/null/11 虱/null/169 蛓/null/15 据/null/160 提/null/599147 领/null/36858 甡/null/175 冽/null/235 疄/null/14 劁/null/9 蛔/null/90 捯/null/12 颇/null/10245 冾/null/16 删/null/7613 劂/null/14 虳/null/11 捰/null/33 插/null/20356 颈/null/2342 疆/null/1107 刡/null/14 虴/null/11 蛖/null/6 捱/null/201 揓/null/7 頧/null/8 颉/null/1574 蛗/null/10 頨/null/8 颊/null/904 甥/null/112 蛘/null/45 揕/null/74 頩/null/14 颋/null/12 虷/null/16 蛙/null/5333 揖/null/469 颌/null/61 判/null/28059 蛚/null/7 捵/null/39 揗/null/6 颍/null/151 用/null/2895290 疋/null/1938 虹/null/4300 蛛/null/1654 捶/null/549 揘/null/9 颎/null/11 甩/null/2623 疌/null/13 劈/null/1826 虺/null/22 蛜/null/31 捷/null/7286 揙/null/22 颏/null/25 甪/null/18 虻/null/17 蛝/null/9 捸/null/14 颐/null/480 甫/null/2115 刨/null/8 虼/null/29 蛞/null/17 蝀/null/13 頯/null/7 频/null/14544 甬/null/137 利/null/105611 劋/null/12 虽/null/72668 蛟/null/214 捺/null/159 蝁/null/7 揜/null/16 疏/null/5660 虾/null/5016 捻/null/34 蝂/null/10 揝/null/12 颓/null/14 甭/null/474 疐/null/14 别/null/332 虿/null/16 捼/null/22 蝃/null/13 摀/null/135 颔/null/179 甮/null/16 疑/null/47964 蛢/null/147 捽/null/15 揟/null/11 摁/null/22 刭/null/13 蛣/null/6 揠/null/49 颖/null/3579 田/null/35956 刮/null/123 蛤/null/572 蝆/null/8 握/null/13849 摃/null/201 頵/null/14 颗/null/21646 由/null/163832 疔/null/19 蝇/null/1706 摄/null/10945 题/null/316919 甲/null/40313 疕/null/17 到/null/1310850 蛦/null/13 蝈/null/31 揣/null/1017 摅/null/15 申/null/22385 疖/null/32 刱/null/13 劓/null/12 蝉/null/1601 揤/null/12 摆/null/12606 颙/null/17 疗/null/6888 刲/null/8 蛨/null/11 揥/null/13 摇/null/15391 颚/null/125 电/null/509516 疘/null/12 刳/null/11 蛩/null/21 摈/null/24 颛/null/19 疙/null/365 劖/null/12 蛪/null/28 蝌/null/212 揧/null/14 颜/null/13471 男/null/133706 蝍/null/5 疚/null/717 刵/null/7 劗/null/10 蛫/null/10 揨/null/9 摊/null/4156 额/null/12653 甸/null/521 餀/null/9 制/null/27753 劘/null/12 蛬/null/28 蝎/null/118 颞/null/27 甹/null/22 摋/null/5 刷/null/5762 劙/null/12 蛭/null/124 蝏/null/11 揩/null/126 颟/null/77 町/null/300 餂/null/12 疝/null/136 券/null/2271 蛮/null/32242 蝐/null/17 揪/null/471 颠/null/3126 画/null/77423 瘀/null/406 力/null/247326 蝑/null/7 揫/null/8 摍/null/13 颡/null/16 疟/null/51 刺/null/14544 瘁/null/150 蛰/null/833 蝒/null/18 摎/null/11 颢/null/108 甽/null/14 疠/null/38 刻/null/28243 劝/null/9581 蛱/null/35 蝓/null/16 揭/null/2533 颣/null/83 甾/null/13 疡/null/185 瘃/null/19 办/null/102939 匀/null/1148 蛲/null/29 蝔/null/6 摐/null/10 颤/null/1582 甿/null/7 餇/null/10 疢/null/11 刽/null/231 功/null/111553 揯/null/7 餈/null/7 疣/null/19 瘅/null/15 加/null/205509 蛳/null/11 揰/null/12 摒/null/288 颦/null/245 疤/null/1355 刿/null/14 务/null/72387 蛴/null/19 蝖/null/27 揱/null/18 摓/null/9 颧/null/55 疥/null/45 劢/null/48 蛵/null/11 蝗/null/232 揲/null/14 摔/null/4859 瘈/null/5 劣/null/4643 包/null/60049 蛶/null/9 蝘/null/10 揳/null/7 颩/null/9 疧/null/8 匆/null/4444 蛷/null/13 蝙/null/620 援/null/29206 餍/null/53 瘊/null/11 蛸/null/14 蝚/null/12 揵/null/9 蛹/null/311 蝛/null/10 揶/null/114 摘/null/7990 颬/null/10 蝜/null/5 疪/null/31 瘌/null/18 劦/null/24 匈/null/468 摙/null/8 餐/null/30791 疫/null/1834 匉/null/9 蝝/null/12 疬/null/6 动/null/256817 匊/null/8 蝞/null/7 蟀/null/515 摛/null/11 瘏/null/5 助/null/54145 匋/null/13 蟂/null/5 疮/null/577 瘐/null/99 努/null/24544 蛾/null/411 蝠/null/728 摝/null/19 餔/null/28 劫/null/5241 匍/null/69 蝡/null/17 蟃/null/11 摞/null/25 颲/null/6 匎/null/5 疯/null/18284 瘑/null/8 劬/null/20 蝢/null/7 揽/null/760 疰/null/10 劭/null/338 匏/null/41 蝣/null/102 蟅/null/8 摠/null/55 擂/null/436 餗/null/17 疱/null/63 劮/null/16 匐/null/51 蝤/null/16 揿/null/12 蟆/null/297 摡/null/34 擃/null/22 疲/null/4643 瘔/null/12 匑/null/12 蝥/null/10 疳/null/9 瘕/null/15 匒/null/10 擅/null/1919 瘖/null/517 励/null/9984 蝧/null/13 蟉/null/14 疵/null/1160 瘗/null/10 劲/null/8089 蟊/null/11 摥/null/15 疶/null/7 瘘/null/12 劳/null/12873 匕/null/529 蝩/null/8 蟋/null/469 摦/null/14 瘙/null/11 化/null/119804 蝪/null/8 蟌/null/9 摧/null/2419 擉/null/17 疸/null/19 瘚/null/19 北/null/112186 蝫/null/12 摨/null/7 疹/null/433 瘛/null/16 蝬/null/16 摩/null/14122 餟/null/10 疺/null/20 馁/null/463 瘜/null/36 匙/null/4031 蝭/null/16 蟏/null/16 颽/null/17 疻/null/13 馂/null/11 瘝/null/8 匚/null/8 蝮/null/36 颾/null/7 摫/null/5 疼/null/5767 蝯/null/9 蟑/null/3271 操/null/18369 颿/null/18 疽/null/23 馄/null/145 瘟/null/3112 皁/null/13 匜/null/9 蟒/null/188 摬/null/8 擎/null/9240 疾/null/4628 馅/null/285 瘠/null/87 劻/null/6 皂/null/874 匝/null/210 蟓/null/14 摭/null/35 擏/null/23 餤/null/9 疿/null/7 馆/null/52285 劼/null/24 蟔/null/18 摮/null/9 擐/null/6 餥/null/15 瘢/null/11 的/null/6538132 匟/null/10 蝳/null/12 馈/null/64 瘣/null/12 劾/null/287 匠/null/1657 厂/null/9 蝴/null/2943 摰/null/47 擒/null/991 餧/null/11 瘤/null/744 势/null/33183 皆/null/26852 匡/null/1407 馊/null/303 瘥/null/16 皇/null/12496 匢/null/8 厄/null/921 蝵/null/10 蟗/null/10 摲/null/9 餩/null/7 馋/null/180 瘦/null/2457 皈/null/506 匣/null/1322 厅/null/20640 蝶/null/5868 蟘/null/61 餪/null/14 馌/null/12 皉/null/22 历/null/15 蝷/null/14 蟙/null/13 摴/null/8 擖/null/25 餫/null/6 馍/null/15 瘨/null/11 皊/null/9 摵/null/11 擗/null/47 餬/null/52 馎/null/6 瘩/null/345 皋/null/63 匦/null/29 蝹/null/11 蟛/null/9 擘/null/195 餭/null/7 馏/null/463 瘪/null/224 蝺/null/9 蟜/null/10 摷/null/16 擙/null/8 餮/null/79 馐/null/25 瘫/null/615 厉/null/11526 蝻/null/14 蟝/null/10 摸/null/11879 餯/null/10 馑/null/24 皎/null/290 厊/null/7 蝼/null/67 蟞/null/9 摹/null/354 血/null/36175 擛/null/15 餰/null/10 馒/null/1106 瘭/null/9 皏/null/18 压/null/43377 蟟/null/13 衁/null/44 匪/null/3908 厌/null/16578 蝾/null/63 蟠/null/66 餲/null/9 馔/null/53 瘯/null/7 皑/null/85 厍/null/9 蟡/null/21 衃/null/12 擞/null/511 瘰/null/12 皒/null/10 厎/null/62 蟢/null/19 摽/null/71 衄/null/14 敁/null/7 首/null/53235 厏/null/8 衅/null/1487 馗/null/56 瘱/null/9 皓/null/2657 匮/null/321 蟤/null/12 摿/null/9 敃/null/9 馘/null/13 瘲/null/9 蟥/null/6 擢/null/84 香/null/32674 瘳/null/16 皕/null/86 匰/null/12 厒/null/19 蟦/null/6 衈/null/20 故/null/72033 瘴/null/372 皖/null/77 蟧/null/20 擤/null/89 敆/null/13 厔/null/5 瘵/null/9 蟨/null/11 馜/null/15 厕/null/4874 衋/null/8 擦/null/5532 效/null/36 皙/null/72 匴/null/13 厖/null/9 蟪/null/8 行/null/285867 敉/null/24 馝/null/18 瘸/null/49 厗/null/7 蟫/null/13 衍/null/2307 擨/null/8 敊/null/6 馞/null/8 皛/null/10 厘/null/298 衎/null/9 擩/null/21 皜/null/20 匷/null/6 蟭/null/13 敌/null/23215 皝/null/11 厚/null/9982 擫/null/12 馡/null/14 瘼/null/16 騃/null/19 皞/null/7 匹/null/3185 瘽/null/11 騄/null/58 区/null/169166 省/null/48656 厜/null/12 衒/null/7 馣/null/10 瘾/null/2668 医/null/10 厝/null/687 擭/null/38 敏/null/18600 瘿/null/14 騆/null/13 匼/null/9 眃/null/9 厞/null/16 衔/null/87 馥/null/285 騇/null/15 匽/null/13 眄/null/19 原/null/174329 吁/null/17 蟳/null/23 衕/null/9 救/null/52003 馦/null/8 匾/null/127 眅/null/8 蟴/null/18 衖/null/21 馧/null/12 騉/null/9 皤/null/15 匿/null/2530 吃/null/175 街/null/18525 敓/null/10 馨/null/4093 騊/null/12 眇/null/20 厢/null/2307 各/null/210520 敔/null/8 騋/null/22 皦/null/10 眈/null/188 厣/null/10 擳/null/11 敕/null/388 眉/null/13561 吆/null/242 蟷/null/8 衙/null/271 敖/null/326 馫/null/14 眊/null/8 厥/null/573 吇/null/20 看/null/632561 厦/null/928 合/null/53 蟹/null/10281 皪/null/14 厧/null/12 吉/null/30644 蟺/null/13 教/null/245033 皫/null/9 厨/null/2232 吊/null/644 擸/null/20 馯/null/8 騑/null/11 蟼/null/8 裀/null/19 敛/null/237 馰/null/5 皭/null/11 厩/null/57 吋/null/3566 裁/null/10310 敜/null/7 皮/null/28034 眐/null/11 同/null/395867 蟾/null/1191 裂/null/5753 敝/null/7545 馲/null/15 騔/null/8 皯/null/6 眑/null/15 名/null/278941 蟿/null/10 衡/null/9246 敞/null/1122 旁/null/27695 騕/null/19 眒/null/11 厬/null/11 后/null/530136 衢/null/49 擽/null/10 皱/null/1292 眓/null/12 吏/null/548 衣/null/22367 装/null/78681 旃/null/31 馵/null/12 皲/null/18 厮/null/774 吐/null/7761 擿/null/10 裆/null/184 旄/null/342 向/null/9 补/null/37810 敢/null/40043 旅/null/15733 眕/null/14 裈/null/9 散/null/23231 敤/null/5 旆/null/32 騚/null/11 皴/null/34 吓/null/11970 衧/null/9 裉/null/9 騛/null/6 皵/null/8 表/null/2630 敥/null/7 馺/null/9 騜/null/8 吕/null/8405 衩/null/31 裋/null/10 敦/null/6339 馻/null/6 騝/null/10 眙/null/17 衪/null/58 敧/null/11 騞/null/6 骀/null/12 眚/null/16 吗/null/353524 衫/null/3594 裍/null/6 敨/null/20 旋/null/17 眛/null/472 吘/null/16 衬/null/1303 裎/null/59 旌/null/96 馽/null/16 骁/null/323 吙/null/8 衭/null/24 敪/null/9 旍/null/10 騠/null/15 皻/null/7 骂/null/28923 眝/null/20 衮/null/96 裐/null/49 旎/null/62 骃/null/9 厹/null/6 瞀/null/11 君/null/36180 衯/null/10 敬/null/22557 瞁/null/5 族/null/39730 騢/null/10 皽/null/10 骄/null/3404 真/null/335203 吜/null/11 衰/null/3602 裒/null/15 旐/null/13 皾/null/9 骅/null/162 眠/null/11408 去/null/443547 瞂/null/9 吝/null/6726 衱/null/9 皿/null/182 骆/null/1098 瞃/null/12 吞/null/3112 咀/null/378 衲/null/172 裔/null/833 騥/null/15 骇/null/885 眢/null/18 瞄/null/1686 吟/null/5802 咁/null/272 裕/null/9921 敯/null/15 旒/null/10 骈/null/85 眣/null/13 瞅/null/82 吠/null/1054 咂/null/55 衴/null/9 裖/null/10 数/null/161281 旓/null/11 騧/null/8 骉/null/12 县/null/22480 衵/null/17 裗/null/16 骊/null/88 瞇/null/470 咄/null/442 衶/null/11 裘/null/952 敲/null/4235 騩/null/9 骋/null/821 眦/null/34 瞈/null/14 吣/null/21 衷/null/3798 裙/null/2344 敳/null/8 眧/null/5 旖/null/53 騪/null/14 验/null/72278 瞉/null/25 吤/null/14 咆/null/747 裚/null/6 整/null/75045 旗/null/58 骍/null/22 眨/null/622 吥/null/21 咇/null/10 騬/null/30 骎/null/27 眩/null/558 瞋/null/432 否/null/168690 咈/null/71 裛/null/12 敶/null/12 骏/null/2764 瞌/null/866 吧/null/295069 敷/null/1547 旚/null/11 骐/null/568 瞍/null/20 吨/null/37 旛/null/34 骑/null/39690 眬/null/49 瞎/null/2660 吩/null/418 咋/null/213 衼/null/13 裞/null/44 敹/null/7 骒/null/11 眭/null/44 瞏/null/13 吪/null/8 和/null/333422 衽/null/22 裟/null/62 襁/null/9 旝/null/12 騱/null/13 骓/null/36 衾/null/66 敻/null/11 襂/null/11 旞/null/14 騲/null/10 眯/null/17 瞑/null/314 含/null/28115 咍/null/8 衿/null/314 敼/null/11 裢/null/5 骕/null/6 旟/null/13 晁/null/29 瞒/null/1641 听/null/83 咎/null/910 襄/null/2028 裣/null/5 无/null/368361 騴/null/9 骖/null/305 眱/null/9 吭/null/832 咏/null/4036 旡/null/70 晃/null/4900 騵/null/15 骗/null/17996 眲/null/18 吮/null/328 咐/null/455 裤/null/6035 敿/null/11 既/null/28182 骘/null/13 眳/null/18 瞕/null/12 启/null/25307 咑/null/22 吰/null/5 晅/null/11 骙/null/14 眴/null/23 咒/null/3729 骚/null/6768 吱/null/558 裧/null/6 襉/null/11 日/null/273090 晇/null/11 騹/null/7 骛/null/193 眵/null/11 瞗/null/7 咔/null/20 裨/null/79 騺/null/6 旦/null/8350 骜/null/13 眶/null/505 咕/null/2050 襋/null/9 旧/null/31618 骝/null/31 眷/null/3326 瞙/null/12 吴/null/34275 咖/null/7056 襌/null/34 旨/null/4067 晊/null/22 骞/null/73 眸/null/1080 瞚/null/10 吵/null/13174 裫/null/10 早/null/67132 晋/null/4524 騽/null/17 骟/null/11 眹/null/18 瞛/null/6 吶/null/1747 咘/null/12 裬/null/13 晌/null/220 骠/null/64 眺/null/14 瞜/null/13 吷/null/9 咙/null/693 襐/null/5 眻/null/17 瞝/null/8 吸/null/20676 咚/null/1786 裮/null/12 騿/null/20 骡/null/73 眼/null/71058 鬃/null/13 吹/null/15424 砀/null/12 咛/null/537 裯/null/11 襑/null/12 旬/null/1559 晏/null/449 骢/null/12 眽/null/16 鬄/null/8 瞟/null/53 码/null/45990 裰/null/13 襒/null/19 旭/null/6115 骣/null/11 鬅/null/16 瞠/null/147 吻/null/4244 砂/null/9716 裱/null/244 襓/null/7 旮/null/17 晑/null/12 骤/null/4000 瞡/null/13 吼/null/1694 砃/null/13 裲/null/11 旯/null/15 晒/null/417 骥/null/326 瞢/null/21 吽/null/394 唁/null/25 裳/null/700 襕/null/17 旰/null/14 骦/null/8 鬈/null/30 瞣/null/8 吾/null/8990 砅/null/24 咠/null/11 裴/null/386 晓/null/21478 骧/null/257 砆/null/10 咡/null/10 唃/null/9 襗/null/11 旱/null/491 晔/null/339 骨/null/15411 鬊/null/13 瞥/null/401 咢/null/13 裶/null/12 襘/null/14 旲/null/8 晕/null/2347 鬋/null/7 唅/null/90 裷/null/10 襙/null/8 旳/null/237 晖/null/1338 鬌/null/12 瞧/null/6472 砉/null/106 咤/null/207 唆/null/769 裸/null/1806 襚/null/14 旴/null/21 骫/null/10 瞨/null/13 咥/null/8 唇/null/58 裹/null/1594 襛/null/8 旵/null/12 鬎/null/9 瞩/null/349 咦/null/6444 唈/null/11 裺/null/8 襜/null/11 时/null/658186 晙/null/17 骭/null/8 瞪/null/1258 砌/null/747 咧/null/17663 唉/null/53049 旷/null/1426 瞫/null/5 晚/null/63237 鬐/null/7 砍/null/17552 咨/null/390 唊/null/10 裻/null/13 旸/null/91 晛/null/8 骯/null/679 鬑/null/10 瞬/null/3517 砎/null/8 咩/null/325 唋/null/9 裼/null/17 襞/null/9 见/null/183680 晜/null/17 骰/null/454 鬒/null/15 瞭/null/12167 砏/null/7 咪/null/6696 唌/null/19 襟/null/1531 旺/null/4958 观/null/86794 骱/null/9 鬓/null/384 砐/null/11 咫/null/1110 裾/null/70 旻/null/860 晞/null/174 曀/null/15 砑/null/11 咬/null/6226 唎/null/16 襡/null/8 旼/null/10 规/null/11 晟/null/101 骳/null/18 鬕/null/12 瞰/null/234 砒/null/63 襢/null/16 旽/null/10 觅/null/2969 骴/null/16 鬖/null/8 瞱/null/53 砓/null/12 咭/null/75 唏/null/229 襣/null/6 咮/null/5 视/null/86815 晡/null/142 鬗/null/12 瞲/null/14 研/null/125550 唐/null/8102 觇/null/24 晢/null/66 鬘/null/58 瞳/null/891 咯/null/401 唑/null/9 览/null/6393 骷/null/633 鬙/null/11 瞴/null/63 砖/null/10 咰/null/11 唒/null/10 襦/null/27 觉/null/216291 晤/null/243 骸/null/401 瞵/null/8 砗/null/581 咱/null/10 觊/null/105 晥/null/20 骹/null/7 瞶/null/12 唔/null/2582 觋/null/13 晦/null/1336 曈/null/14 咳/null/3080 襩/null/13 觌/null/9 骻/null/12 瞷/null/8 咴/null/6 晨/null/7903 曊/null/13 骼/null/244 鬞/null/9 鮀/null/150 砚/null/88 唗/null/7 襫/null/10 觎/null/110 曋/null/7 鬟/null/100 咶/null/6 襬/null/34 觏/null/22 晪/null/14 曌/null/23 鬠/null/9 瞺/null/13 鮂/null/8 咷/null/13 襭/null/9 觐/null/66 骿/null/34 瞻/null/998 砝/null/90 咸/null/552 襮/null/17 觑/null/223 晬/null/20 碀/null/10 唛/null/24 角/null/48659 瞽/null/28 砟/null/43 咺/null/13 碁/null/66 觓/null/6 普/null/32256 鬣/null/15 鮅/null/16 砠/null/11 咻/null/451 唝/null/15 襱/null/7 觔/null/148 景/null/29462 鬤/null/8 瞿/null/200 鮆/null/81 砡/null/24 碃/null/7 喀/null/898 觕/null/7 晰/null/1302 曒/null/8 鮇/null/13 砢/null/40 咽/null/302 碄/null/7 喁/null/17 襳/null/7 觖/null/11 晱/null/16 鮈/null/13 砣/null/27 咾/null/44 碅/null/11 唠/null/173 喂/null/2319 晲/null/19 咿/null/400 碆/null/7 唡/null/10 喃/null/1418 砥/null/278 碇/null/274 唢/null/265 善/null/38229 襶/null/16 觙/null/8 砦/null/32 觚/null/12 晴/null/6171 砧/null/84 碉/null/131 唤/null/4432 襹/null/5 觛/null/7 鬫/null/14 砨/null/6 喇/null/7972 觜/null/12 晶/null/8517 曘/null/7 砩/null/17 唦/null/20 喈/null/338 襺/null/14 襻/null/6 晷/null/68 曙/null/674 砪/null/62 碌/null/1509 唧/null/229 喉/null/1841 觞/null/506 晸/null/14 詀/null/13 曚/null/20 砫/null/6 碍/null/7557 喊/null/9483 襼/null/12 晹/null/59 曛/null/41 鬯/null/6 砬/null/19 碎/null/8403 喋/null/185 觟/null/16 智/null/44507 曜/null/907 砭/null/42 碏/null/14 唪/null/35 喌/null/25 觠/null/10 晻/null/10 曝/null/2026 砮/null/10 喍/null/11 襾/null/9 觡/null/14 晼/null/14 曞/null/11 杀/null/60424 鬲/null/22 砯/null/6 碑/null/1957 唬/null/6503 喎/null/50 西/null/121877 觢/null/9 詄/null/88 鬳/null/9 鮕/null/24 砰/null/564 唭/null/10 喏/null/66 解/null/180531 晾/null/199 詅/null/11 杂/null/31573 砱/null/10 碓/null/71 售/null/26751 觤/null/11 权/null/72344 鬵/null/9 碔/null/11 觥/null/15 砳/null/7 碕/null/12 唯/null/22782 喑/null/66 鬷/null/5 触/null/53 詈/null/29 曣/null/9 杅/null/12 破/null/70155 碖/null/21 唰/null/143 曤/null/5 杆/null/1083 砵/null/39 碗/null/5279 唱/null/55158 喓/null/8 觨/null/8 詊/null/14 杇/null/32 鮛/null/9 碘/null/642 唲/null/8 喔/null/92913 觩/null/13 曦/null/726 杈/null/10 鬺/null/12 砷/null/182 碙/null/8 唳/null/86 喕/null/11 詌/null/18 杉/null/4947 鬻/null/26 砸/null/3351 碚/null/7 唴/null/11 觫/null/15 詍/null/10 鬼/null/25145 唵/null/32 唶/null/5 觬/null/11 曩/null/60 杋/null/16 碛/null/13 喘/null/1549 觭/null/5 詏/null/7 杌/null/23 鬾/null/11 鮠/null/15 砺/null/222 碜/null/11 唷/null/6814 喙/null/784 曫/null/13 杍/null/8 鬿/null/8 鮡/null/13 砻/null/29 觯/null/8 詑/null/16 李/null/72434 鮢/null/15 碞/null/7 唹/null/9 觰/null/11 曭/null/18 杏/null/931 鰅/null/6 碟/null/63470 礁/null/858 喜/null/146563 觱/null/5 曮/null/9 材/null/19462 鮤/null/13 砾/null/119 鰆/null/15 碠/null/7 唻/null/17 礂/null/7 喝/null/22191 觲/null/13 村/null/15667 碡/null/8 唼/null/9 嘀/null/109 觳/null/10 曰/null/7315 鮥/null/9 鰇/null/11 碢/null/8 喟/null/148 嘁/null/14 杓/null/61 碣/null/43 唾/null/1685 礅/null/21 嘂/null/25 曲/null/239 碤/null/11 喡/null/12 曳/null/889 杕/null/19 鮨/null/13 碥/null/64 喢/null/73 嘄/null/12 觷/null/13 詙/null/10 更/null/152691 杖/null/1762 鰋/null/10 喣/null/18 碧/null/7930 礉/null/6 喤/null/15 杗/null/14 碨/null/11 喥/null/8 觺/null/5 曶/null/12 鰎/null/6 嘈/null/158 觻/null/11 曷/null/74 杙/null/9 碪/null/17 礌/null/7 喧/null/2204 嘉/null/21507 觼/null/13 諀/null/12 杚/null/9 碫/null/8 喨/null/23 詟/null/14 曹/null/4289 鮯/null/13 碬/null/15 觾/null/8 杜/null/8669 嘌/null/16 杝/null/10 礐/null/11 觿/null/8 曼/null/6616 諃/null/9 杞/null/259 柀/null/37 鰔/null/9 礑/null/15 嘎/null/2465 束/null/21572 柁/null/14 碰/null/17737 礒/null/18 喭/null/11 嘏/null/31 曾/null/93394 諅/null/41 杠/null/48 柂/null/9 碱/null/10 礓/null/10 嘐/null/13 鮵/null/5 替/null/19015 諆/null/6 条/null/59837 柃/null/13 鰗/null/16 碲/null/10 礔/null/8 嘒/null/5 柄/null/1797 碳/null/2500 諈/null/15 柅/null/15 碴/null/427 柆/null/16 鮸/null/11 礗/null/14 喱/null/14 嘓/null/29 詨/null/24 来/null/2812950 鮹/null/11 柈/null/5 喳/null/287 嘕/null/9 柉/null/10 鰝/null/8 杨/null/40360 柊/null/7 鲀/null/16 礛/null/9 喵/null/14450 杩/null/11 柋/null/8 鮽/null/11 鲁/null/8226 礜/null/23 嘘/null/2409 杪/null/22 柌/null/11 鲂/null/6 喷/null/8374 柍/null/10 鮿/null/6 鰡/null/45 碻/null/11 礝/null/9 杬/null/19 柎/null/66 鲄/null/16 礞/null/23 禀/null/501 嘛/null/55429 杭/null/553 柏/null/8866 禁/null/17702 鰤/null/5 諓/null/7 某/null/54845 碾/null/224 喻/null/4122 禂/null/8 嘝/null/11 諔/null/13 杯/null/7539 柑/null/148 礡/null/103 嚁/null/8 諕/null/11 杰/null/4474 柒/null/248 鲈/null/153 喽/null/1889 禄/null/992 嘟/null/2362 喾/null/5 嚂/null/6 詴/null/12 染/null/11830 礣/null/14 禅/null/5337 嚃/null/8 杲/null/31 柔/null/21005 礤/null/11 喿/null/9 嚄/null/22 詶/null/12 諘/null/11 杳/null/171 鲊/null/11 礥/null/13 嚅/null/36 詷/null/6 諙/null/9 杴/null/9 鲋/null/16 禈/null/8 嚆/null/20 杵/null/297 礧/null/10 嘤/null/117 詹/null/3075 杶/null/6 柘/null/62 鰫/null/26 鲍/null/434 礨/null/21 禊/null/6 詺/null/10 鰬/null/17 鲎/null/16 礩/null/13 禋/null/11 詻/null/15 杷/null/79 柙/null/18 嘧/null/18 杸/null/11 譀/null/8 柚/null/626 鲐/null/8 諟/null/18 杹/null/13 柛/null/12 鲑/null/253 諠/null/6 杺/null/8 譂/null/6 柜/null/102 鲒/null/7 礭/null/9 福/null/52055 嘪/null/14 嚍/null/7 杻/null/25 柝/null/30 禐/null/10 嚎/null/816 杼/null/27 柞/null/51 桀/null/148 鲔/null/87 礯/null/7 嘬/null/22 鲕/null/5 嚏/null/190 杽/null/13 柟/null/11 桁/null/30 禒/null/6 松/null/12093 譅/null/17 柠/null/1403 桂/null/3750 鰴/null/26 鲖/null/11 禓/null/6 板/null/10638 桃/null/11651 禔/null/19 譇/null/14 柢/null/78 桄/null/15 鰶/null/11 嚓/null/82 譈/null/8 柣/null/13 桅/null/42 鲙/null/14 禖/null/9 嘱/null/447 柤/null/14 框/null/4235 鲚/null/7 礵/null/13 禗/null/8 嘲/null/1990 諨/null/9 譊/null/13 查/null/52569 鲛/null/109 禘/null/12 譋/null/8 柦/null/8 案/null/77425 鲜/null/9541 嘳/null/42 柧/null/7 桉/null/15 礸/null/11 禚/null/11 嘴/null/14356 嚗/null/10 桊/null/18 鲞/null/24 礹/null/12 鴀/null/7 禛/null/33 嚘/null/26 柩/null/33 桋/null/12 鰽/null/10 鲟/null/29 示/null/63561 禜/null/15 嘶/null/1072 柪/null/68 桌/null/13128 鲠/null/5 嚚/null/11 譐/null/14 柫/null/9 桍/null/24 鰿/null/12 鲡/null/18 礼/null/31007 鴃/null/26 稀/null/4518 諯/null/11 譑/null/20 柬/null/76 桎/null/108 鲢/null/1787 鴄/null/11 嘹/null/120 嚜/null/16 諰/null/9 譒/null/7 柭/null/10 桏/null/7 鲣/null/11 礽/null/27 鴅/null/9 嘺/null/13 嚝/null/36 譓/null/16 柮/null/9 桐/null/754 鲤/null/660 社/null/156267 禠/null/9 嘻/null/11 稂/null/9 礿/null/5 諲/null/13 譔/null/24 柯/null/4646 桑/null/7139 鲥/null/164 禡/null/15 稃/null/7 圁/null/8 譕/null/14 柰/null/102 鲦/null/22 鴈/null/12 禢/null/28 稄/null/13 圂/null/10 諴/null/50 柱/null/3156 桓/null/432 鲧/null/17 嘾/null/13 圃/null/300 諵/null/16 譗/null/15 柲/null/11 桔/null/448 鲨/null/435 禤/null/21 嘿/null/25319 稆/null/31 圄/null/38 柳/null/6440 嚣/null/3643 柴/null/4482 鲩/null/13 圆/null/19328 鲪/null/6 禧/null/1333 柶/null/10 鲫/null/660 禨/null/15 稊/null/19 圈/null/11114 柷/null/34 程/null/197707 嚧/null/23 圉/null/12 諻/null/10 譝/null/10 柸/null/42 鲭/null/16 稌/null/11 圊/null/11 诀/null/2307 鲮/null/9 鴐/null/12 禫/null/8 稍/null/13420 证/null/9379 鲯/null/24 禬/null/13 税/null/9092 嚪/null/9 圌/null/7 譠/null/36 诂/null/43 鲰/null/7 禭/null/11 嚫/null/6 諿/null/9 诃/null/835 鲱/null/9 稐/null/27 嚬/null/12 柼/null/13 评/null/41999 检/null/25143 鲲/null/217 鴔/null/16 稑/null/12 嚭/null/17 譣/null/11 柽/null/24 诅/null/1118 鲳/null/44 稒/null/7 识/null/73392 桠/null/374 棂/null/10 稓/null/14 柿/null/278 桡/null/40 鲵/null/9 鴗/null/46 禲/null/10 稔/null/228 譥/null/14 诇/null/3103 桢/null/238 鲶/null/300 鴘/null/28 禳/null/22 稕/null/7 警/null/33394 诈/null/1479 鲷/null/181 鴙/null/9 禴/null/16 圔/null/7 譧/null/9 诉/null/77163 桤/null/8 棆/null/8 鲸/null/562 稗/null/53 譨/null/14 诊/null/2992 桥/null/16382 棇/null/10 禶/null/17 稘/null/7 诋/null/180 桦/null/1572 棈/null/20 禷/null/9 稙/null/39 譪/null/18 诌/null/188 桧/null/223 棉/null/2096 鲻/null/17 禸/null/11 稚/null/2835 嚵/null/9 词/null/34187 桨/null/397 禹/null/880 鶀/null/9 稛/null/12 譬/null/3597 诎/null/111 桩/null/890 棋/null/11925 鲽/null/34 禺/null/40 鶁/null/16 嚷/null/936 诏/null/439 棌/null/21 鴠/null/18 离/null/18 鶂/null/6 窀/null/9 圚/null/8 诐/null/10 桫/null/16 棍/null/3258 鲿/null/8 稞/null/52 突/null/30729 圛/null/9 译/null/20748 棎/null/8 鴢/null/19 禽/null/1039 鶄/null/8 桭/null/5 圜/null/110 诒/null/196 禾/null/546 鶅/null/10 稠/null/334 诓/null/27 桮/null/15 棐/null/9 鶆/null/7 嚼/null/961 窃/null/2340 圞/null/7 垀/null/8 诔/null/10 桯/null/13 棑/null/39 鴥/null/6 嚽/null/12 窄/null/1765 土/null/45706 试/null/121652 棒/null/65240 鶈/null/11 稢/null/8 嚾/null/15 窅/null/22 圠/null/7 垂/null/4398 诖/null/12 桱/null/20 棓/null/46 稣/null/6958 窆/null/54 垃/null/8328 诗/null/21528 桲/null/17 棔/null/7 窇/null/12 圢/null/7 垄/null/1212 诘/null/1256 棕/null/396 鴩/null/28 鶋/null/11 窈/null/1299 圣/null/12 诙/null/290 桴/null/18 鶌/null/13 稦/null/12 窉/null/9 垆/null/6 诚/null/28547 桵/null/12 窊/null/15 譹/null/13 诛/null/675 桶/null/3607 棘/null/552 稨/null/8 窋/null/9 譺/null/9 诜/null/8 桷/null/7 窌/null/12 譻/null/15 话/null/265861 桸/null/11 棚/null/7212 鴭/null/21 窍/null/1413 在/null/1715554 诞/null/8895 桹/null/88 鴮/null/9 鶐/null/7 稫/null/10 圩/null/8 型/null/73353 诟/null/574 豁/null/642 棜/null/15 窏/null/14 圪/null/7 垌/null/7 诠/null/2951 豂/null/6 鶒/null/21 窐/null/14 譿/null/8 诡/null/3211 桻/null/11 豃/null/13 棝/null/16 鴱/null/18 棞/null/5 窑/null/499 圬/null/46 询/null/16292 桼/null/8 楀/null/13 鶔/null/22 稯/null/9 窒/null/427 圭/null/1473 垏/null/10 诣/null/518 桽/null/12 豅/null/7 楁/null/11 鴳/null/15 稰/null/12 圮/null/28 诤/null/178 桾/null/8 豆/null/13896 棠/null/1038 楂/null/39 窔/null/5 圯/null/33 该/null/216069 豇/null/7 棡/null/12 鶗/null/15 窕/null/1273 地/null/374510 垒/null/33371 详/null/24081 楄/null/20 鴶/null/14 稳/null/16347 窖/null/135 垓/null/240 棣/null/160 楅/null/14 鴷/null/15 鶙/null/14 垔/null/5 窗/null/23081 诧/null/294 豉/null/17 棤/null/13 鴸/null/7 窘/null/575 圳/null/485 垕/null/22 诨/null/40 豊/null/139 鶛/null/13 窙/null/7 圴/null/77 诩/null/176 豋/null/89 棦/null/8 楈/null/10 鶜/null/13 稷/null/187 垗/null/5 诪/null/9 豌/null/63 楉/null/11 鶝/null/12 鸀/null/13 垘/null/9 诫/null/912 豍/null/10 棨/null/10 鶞/null/10 稹/null/107 鸁/null/17 窜/null/1095 诬/null/448 棩/null/12 楋/null/9 鴽/null/38 鶟/null/9 楌/null/5 鸂/null/13 窝/null/8854 垙/null/12 语/null/89329 豏/null/12 棪/null/14 鴾/null/24 鶠/null/16 稻/null/1506 鸃/null/8 窞/null/7 笀/null/6 垚/null/348 诮/null/30 棫/null/7 稼/null/186 楎/null/5 鸄/null/9 窟/null/1344 圹/null/42 笁/null/12 垛/null/301 误/null/44398 鶢/null/15 稽/null/656 鸅/null/6 窠/null/226 场/null/160542 诰/null/35 楏/null/11 鶣/null/24 鸆/null/6 圻/null/74 笃/null/707 垝/null/9 诱/null/3761 森/null/16213 稿/null/6943 窢/null/10 笄/null/10 垞/null/6 堀/null/98 诲/null/657 棯/null/21 楑/null/14 垟/null/12 堁/null/11 诳/null/144 豕/null/82 棰/null/8 楒/null/8 鶦/null/15 鸉/null/23 窣/null/21 圾/null/8302 笅/null/15 垠/null/365 堂/null/31766 说/null/638724 豖/null/8 棱/null/46 鶧/null/20 笆/null/312 诵/null/891 豗/null/10 楔/null/195 鶨/null/15 鸋/null/7 窥/null/12 垢/null/843 堄/null/14 诶/null/40 棳/null/7 窦/null/517 笈/null/569 垣/null/402 请/null/576417 棴/null/11 楖/null/12 鶪/null/8 鸍/null/11 笉/null/13 垤/null/16 堆/null/27788 诸/null/29277 豚/null/789 棵/null/2709 楗/null/16 窨/null/8 笊/null/8 垥/null/8 堇/null/622 诹/null/13 楘/null/6 笋/null/395 垦/null/2399 堈/null/15 诺/null/18719 豜/null/60 棷/null/7 楙/null/37 垧/null/10 堉/null/367 读/null/71735 豝/null/72 棸/null/10 楚/null/43767 鶭/null/9 窫/null/5 鸐/null/18 诼/null/11 棹/null/11 楛/null/36 鸑/null/5 窬/null/14 笎/null/14 垩/null/51 堋/null/13 诽/null/329 豟/null/9 棺/null/2040 楜/null/33 堌/null/5 鸒/null/14 窭/null/15 笏/null/20 课/null/70719 棻/null/97 楝/null/56 鸓/null/9 笐/null/12 垫/null/2775 堍/null/9 诿/null/142 象/null/82336 棼/null/17 楞/null/698 鶱/null/13 鸔/null/12 笑/null/94756 堎/null/48 豢/null/27 笒/null/17 垭/null/22 棽/null/14 楟/null/8 槁/null/171 鶳/null/10 窱/null/8 笓/null/7 垮/null/2215 堐/null/160 豤/null/13 楠/null/1320 槂/null/18 鶵/null/6 鸗/null/11 窲/null/13 笔/null/27690 堑/null/580 豥/null/9 窳/null/44 笕/null/45 豦/null/11 楢/null/7 槄/null/9 鶶/null/11 鸙/null/7 窴/null/14 楣/null/1670 鶷/null/8 窵/null/12 垲/null/24 堔/null/8 豨/null/179 槆/null/13 鶸/null/23 笘/null/35 堕/null/5551 楥/null/13 窷/null/12 笙/null/957 豩/null/10 楦/null/7 窸/null/13 笚/null/9 豪/null/19043 賌/null/7 槉/null/11 麀/null/12 笛/null/5238 垶/null/11 豫/null/2820 槊/null/19 鸟/null/46304 堙/null/21 楩/null/7 笝/null/5 鸠/null/542 麂/null/30 垸/null/11 豭/null/70 賏/null/310 楪/null/18 槌/null/424 鶾/null/8 鸡/null/18754 麃/null/19 笞/null/42 简/null/49903 豮/null/11 楫/null/30 鸢/null/126 垹/null/20 堛/null/13 豯/null/16 楬/null/10 槎/null/15 鸣/null/6662 窾/null/17 笠/null/553 垺/null/8 箂/null/13 堜/null/18 豰/null/13 槏/null/9 鸤/null/13 窿/null/211 麆/null/11 豱/null/12 楮/null/32 槐/null/186 鸥/null/1708 麇/null/7 笢/null/7 垼/null/8 箄/null/8 堞/null/11 墀/null/32 豲/null/8 楯/null/15 鸦/null/2132 麈/null/11 笣/null/7 垽/null/6 箅/null/18 墁/null/30 豳/null/24 楰/null/23 鸧/null/17 麉/null/15 笤/null/14 堠/null/24 墂/null/8 楱/null/13 豵/null/5 鸨/null/86 麊/null/11 垿/null/20 堡/null/4802 境/null/44397 賗/null/9 槔/null/15 鸩/null/69 麋/null/63 笥/null/32 豷/null/5 鸪/null/96 麌/null/13 符/null/17927 箈/null/6 堣/null/19 墅/null/740 楴/null/11 鸫/null/41 麍/null/8 堤/null/36 墆/null/9 豸/null/39 鸬/null/8 麎/null/11 笨/null/20700 箊/null/22 堥/null/10 墇/null/18 豹/null/1923 楶/null/12 鸭/null/4515 墈/null/7 豺/null/273 楷/null/960 槙/null/183 鸮/null/91 笪/null/10 箌/null/8 堧/null/14 墉/null/16 豻/null/13 賝/null/12 楸/null/25 槚/null/14 笫/null/19 箍/null/329 堨/null/17 楹/null/188 赀/null/110 槛/null/481 賟/null/5 豽/null/5 鸯/null/1101 麑/null/15 第/null/202411 箎/null/10 堩/null/15 墋/null/8 楺/null/13 赁/null/111 鸰/null/56 麒/null/901 笭/null/13 堪/null/5637 楻/null/13 赂/null/293 鸱/null/55 麓/null/367 笮/null/12 箐/null/20 楼/null/47232 赃/null/859 橀/null/9 鸲/null/99 麔/null/17 笯/null/15 箑/null/6 堬/null/11 墎/null/26 资/null/1115608 槟/null/1536 橁/null/9 鸳/null/1155 笰/null/8 堭/null/18 墏/null/9 赅/null/50 槠/null/9 赆/null/5 笱/null/8 箓/null/32 堮/null/8 墐/null/9 笲/null/5 鸵/null/350 箔/null/437 墑/null/12 賥/null/10 赇/null/7 鸶/null/689 笳/null/61 箕/null/186 堰/null/41 赈/null/100 槢/null/12 橄/null/815 鸷/null/9 麙/null/6 笴/null/11 箖/null/6 墓/null/3392 赉/null/7 鸸/null/11 麚/null/25 笵/null/13 算/null/142333 堲/null/9 墔/null/11 賨/null/15 赊/null/63 槤/null/87 橆/null/12 麛/null/10 箘/null/21 堳/null/21 赋/null/7653 槥/null/16 橇/null/75 鸹/null/13 麜/null/13 箙/null/8 赌/null/5699 槦/null/11 鸺/null/36 麝/null/48 笸/null/10 堵/null/2194 橉/null/9 鼀/null/7 箛/null/8 堶/null/20 墘/null/29 赍/null/15 鸼/null/10 麟/null/3825 笺/null/8 鼁/null/11 箜/null/23 堷/null/13 墙/null/9 赎/null/1605 鸽/null/1663 麠/null/20 笻/null/11 箝/null/193 堸/null/37 赏/null/26279 鸾/null/238 麡/null/9 笼/null/3152 堹/null/11 赐/null/9505 槫/null/13 橍/null/8 鸿/null/13276 簁/null/13 赑/null/306 槬/null/12 橎/null/16 賰/null/5 笾/null/15 簂/null/11 赒/null/23 槭/null/233 橏/null/10 麤/null/62 鼆/null/19 管/null/15 堻/null/15 簃/null/14 賱/null/10 赓/null/42 槮/null/11 橐/null/19 增/null/34603 赔/null/4107 橑/null/11 麦/null/11018 堽/null/17 簅/null/7 墟/null/366 賳/null/16 赕/null/7 簆/null/5 麧/null/10 箤/null/15 墠/null/17 赖/null/16057 槱/null/11 鼊/null/6 簇/null/375 墡/null/8 夃/null/14 赗/null/12 槲/null/14 橔/null/6 鼋/null/32 箦/null/10 处/null/139649 赘/null/756 橕/null/17 墣/null/15 赙/null/16 槴/null/17 橖/null/9 鼍/null/10 箧/null/31 簉/null/6 夆/null/119 赚/null/12307 鼎/null/3293 箨/null/15 簊/null/10 墥/null/8 备/null/80164 賹/null/7 赛/null/73767 槶/null/9 橘/null/1983 麭/null/17 鼏/null/7 箩/null/239 簋/null/11 墦/null/9 赜/null/13 槷/null/8 橙/null/793 麮/null/12 鼐/null/250 箪/null/59 簌/null/71 赝/null/56 槸/null/11 橚/null/8 箫/null/682 墨/null/6206 赞/null/5297 橛/null/17 麰/null/11 鼒/null/10 箬/null/13 簎/null/9 墩/null/220 赟/null/15 跁/null/10 箭/null/6963 簏/null/10 夌/null/19 赠/null/5528 槻/null/17 跂/null/11 橝/null/13 鼓/null/14563 簐/null/15 墫/null/11 复/null/9 赡/null/54 跃/null/7954 橞/null/70 箯/null/9 墬/null/107 夎/null/9 赢/null/17237 槽/null/3216 跄/null/67 夏/null/16486 赣/null/116 槾/null/14 跅/null/8 橠/null/12 鼖/null/12 箱/null/16885 赤/null/9841 槿/null/23 跆/null/543 橡/null/774 鼗/null/10 墯/null/25 跇/null/9 麶/null/11 鼘/null/13 夒/null/11 赦/null/1008 跈/null/9 麷/null/7 鼙/null/22 箴/null/186 簖/null/8 墱/null/28 赧/null/52 櫅/null/9 麸/null/23 鼚/null/7 箵/null/13 夔/null/52 赨/null/36 橤/null/7 櫆/null/29 鼛/null/17 夕/null/7207 赩/null/11 跋/null/426 橥/null/39 櫇/null/10 鼜/null/5 簙/null/5 箷/null/9 外/null/217422 赪/null/11 跌/null/10708 橦/null/18 麻/null/28311 箸/null/60 夗/null/13 赫/null/3628 跍/null/11 橧/null/10 鼞/null/8 箹/null/6 龀/null/11 跎/null/540 橨/null/11 簜/null/5 橩/null/5 龁/null/7 夙/null/362 櫋/null/9 麾/null/251 鼠/null/14641 龂/null/6 簝/null/11 多/null/542911 赭/null/20 跏/null/63 橪/null/7 櫌/null/7 龃/null/61 粀/null/10 赮/null/11 跐/null/8 櫍/null/11 鼢/null/7 龄/null/8749 簟/null/25 墺/null/7 粁/null/8 夜/null/59755 赯/null/13 跑/null/55821 鼣/null/6 箾/null/13 龅/null/16 簠/null/12 走/null/93148 橭/null/11 櫏/null/6 鼤/null/18 龆/null/8 墼/null/24 妀/null/7 跓/null/12 櫐/null/18 鼥/null/8 龇/null/33 簢/null/20 粄/null/48 赲/null/8 橯/null/12 櫑/null/15 龈/null/223 墽/null/11 粅/null/11 够/null/66056 妁/null/60 赳/null/28 跕/null/10 龉/null/59 如/null/659275 赴/null/2487 跖/null/10 橱/null/549 墿/null/5 鼨/null/13 龊/null/298 簥/null/9 妃/null/803 赵/null/31746 跗/null/10 鼩/null/12 龋/null/12 簦/null/13 粈/null/16 妄/null/3352 赶/null/13 跘/null/21 鼪/null/11 龌/null/329 簧/null/1081 粉/null/6859 妅/null/17 起/null/228817 跙/null/11 鼫/null/11 簨/null/7 粊/null/7 夤/null/127 妆/null/11 赸/null/9 跚/null/174 鼬/null/108 妇/null/8333 赹/null/10 跛/null/412 橶/null/11 櫙/null/5 簩/null/5 鼭/null/10 妈/null/25049 跜/null/6 鼮/null/13 簪/null/62 粌/null/10 大/null/1891383 赻/null/13 距/null/14075 鼯/null/23 龑/null/14 粍/null/6 妊/null/31 跞/null/7 橹/null/16 蹀/null/21 鼰/null/12 龒/null/14 簬/null/17 天/null/569684 赽/null/10 跟/null/112513 蹁/null/17 櫜/null/11 鼱/null/8 簭/null/12 太/null/232918 跠/null/9 蹂/null/342 鼲/null/7 夫/null/114 妍/null/266 橼/null/8 歁/null/16 粑/null/25 夬/null/28 妎/null/7 跢/null/12 蹄/null/791 歂/null/12 鼳/null/7 簰/null/6 粒/null/4622 夭/null/1099 妏/null/22 跣/null/9 橾/null/23 蹅/null/9 櫠/null/13 歃/null/14 央/null/103704 妐/null/9 跤/null/832 橿/null/50 櫡/null/16 粔/null/5 鼵/null/13 夯/null/203 蹇/null/53 歅/null/9 鼶/null/8 龘/null/9 簳/null/13 粕/null/45 妒/null/1712 跦/null/12 蹈/null/2957 歆/null/32 鼷/null/12 龙/null/192863 粖/null/10 失/null/84799 妓/null/2099 跧/null/10 蹉/null/482 鼸/null/12 龚/null/814 粗/null/5947 跨/null/3666 蹊/null/112 歇/null/2061 鼹/null/188 龛/null/37 粘/null/482 跩/null/333 蹋/null/881 歈/null/16 头/null/146705 妖/null/4491 跪/null/1139 歉/null/24532 鼻/null/6595 簸/null/75 妗/null/41 跫/null/54 蹍/null/23 歊/null/14 妘/null/23 跬/null/9 蹎/null/11 歋/null/13 鼽/null/15 龟/null/13579 粜/null/11 夷/null/1728 妙/null/13233 歌/null/80050 鼾/null/211 龠/null/9 簻/null/8 粝/null/8 夸/null/556 跮/null/6 蹐/null/12 歍/null/13 簼/null/9 粞/null/8 夹/null/8 龢/null/13 粟/null/313 夺/null/7067 紁/null/7 路/null/232737 蹑/null/139 跰/null/8 蹒/null/131 龤/null/11 簿/null/1553 粡/null/11 夼/null/10 紃/null/13 妞/null/1055 娀/null/8 跱/null/10 蹓/null/75 櫮/null/11 歑/null/5 粢/null/11 威/null/32216 跲/null/14 蹔/null/62 櫯/null/11 粣/null/11 妠/null/19 跳/null/35617 櫰/null/10 粤/null/852 跴/null/10 蹖/null/9 櫱/null/9 歔/null/28 粥/null/1005 妡/null/16 娃/null/8563 践/null/3301 蹗/null/10 歕/null/36 妢/null/8 娄/null/156 跶/null/112 歖/null/16 妣/null/38 娅/null/18 跷/null/1161 蹙/null/120 粨/null/26 紊/null/487 妤/null/167 娆/null/41 跸/null/14 蹚/null/23 妥/null/5103 娇/null/2589 跹/null/14 蹛/null/132 歙/null/35 粪/null/884 紌/null/15 妦/null/22 娈/null/27 跺/null/138 蹜/null/12 妧/null/9 娉/null/229 跻/null/206 蹝/null/7 櫹/null/5 妨/null/10928 娊/null/11 蹞/null/14 跽/null/5 歜/null/13 紎/null/12 妩/null/182 軂/null/95 紏/null/6 妪/null/21 娌/null/79 跾/null/9 歞/null/11 粮/null/1567 妫/null/12 跿/null/9 蹡/null/6 櫼/null/13 粯/null/5 毁/null/27 紑/null/18 蹢/null/8 歠/null/6 毂/null/32 紒/null/7 娏/null/9 毃/null/10 粱/null/342 妮/null/5930 止/null/36248 毄/null/6 粲/null/62 妯/null/25 娑/null/644 蹥/null/13 正/null/266725 毅/null/5763 粳/null/64 蹦/null/715 軉/null/12 此/null/295670 粴/null/11 妱/null/10 娓/null/304 蹧/null/113 步/null/51305 毇/null/15 妲/null/248 武/null/48104 毈/null/13 妳/null/106116 娕/null/8 蹩/null/53 妴/null/20 娖/null/9 蹪/null/7 歧/null/3005 妵/null/6 娗/null/7 毊/null/7 粹/null/3668 妶/null/6 娘/null/121 蹬/null/193 軏/null/20 毋/null/3073 粺/null/18 娙/null/16 蹭/null/62 歪/null/4592 毌/null/26 粻/null/7 母/null/31843 粼/null/111 紞/null/6 妹/null/38407 綀/null/24 蹯/null/15 粽/null/3723 紟/null/15 妺/null/51 娜/null/3741 蹰/null/28 歭/null/15 每/null/131090 精/null/69858 素/null/30215 妻/null/8546 軓/null/11 毐/null/89 粿/null/87 妼/null/9 娞/null/7 索/null/15309 妽/null/9 綄/null/8 娟/null/4558 蹲/null/1522 毒/null/32195 妾/null/476 綅/null/10 娠/null/18 蹳/null/15 毓/null/1240 媃/null/9 蹴/null/146 軗/null/7 比/null/253132 媄/null/324 軘/null/10 毕/null/52670 蹶/null/210 毖/null/11 紧/null/22470 娣/null/420 紨/null/4 毗/null/241 蹸/null/7 歶/null/8 毘/null/223 紩/null/11 娥/null/583 軜/null/10 毙/null/3410 軝/null/9 毚/null/6 紫/null/10953 綍/null/10 蹻/null/21 軞/null/15 歹/null/2758 毛/null/27053 紬/null/15 綎/null/11 媊/null/21 蹼/null/122 娩/null/144 媋/null/11 軠/null/13 死/null/114694 媌/null/13 軡/null/12 歼/null/933 轃/null/14 毞/null/7 汀/null/943 蹿/null/15 汁/null/2941 累/null/68 媎/null/10 歾/null/8 毠/null/15 求/null/99296 綒/null/9 娭/null/6 媏/null/11 毡/null/81 汃/null/9 娮/null/11 媐/null/8 轇/null/5 軥/null/6 毢/null/7 綔/null/11 軦/null/8 轈/null/7 毣/null/9 媒/null/13216 軧/null/10 毤/null/8 汆/null/7 綖/null/10 娱/null/2626 媓/null/8 軨/null/7 汇/null/1783 娲/null/56 媔/null/7 軩/null/10 轋/null/12 毦/null/11 紶/null/12 娳/null/28 媕/null/8 汉/null/26469 娴/null/12 毨/null/10 汊/null/15 紸/null/15 娵/null/6 媗/null/13 軬/null/9 娶/null/2236 轏/null/12 汋/null/15 娷/null/11 綝/null/5 軮/null/13 轐/null/8 汌/null/6 紻/null/13 娸/null/36 媚/null/3691 軯/null/9 轑/null/11 毫/null/9404 汍/null/11 娹/null/10 媛/null/631 綟/null/5 轒/null/9 紽/null/7 媜/null/48 軱/null/6 轓/null/10 汏/null/12 紾/null/13 媝/null/7 汐/null/1017 綡/null/7 娼/null/231 縃/null/11 媞/null/74 毯/null/856 媟/null/12 嬁/null/17 轕/null/9 毰/null/7 汒/null/19 娾/null/8 嬂/null/12 軴/null/9 轖/null/9 嬃/null/9 軵/null/8 轗/null/8 毲/null/7 汔/null/74 媢/null/12 軶/null/5 轘/null/12 毳/null/16 汕/null/83 綦/null/17 嬅/null/33 轙/null/5 軷/null/12 綧/null/9 轚/null/7 毵/null/10 汗/null/4509 轛/null/8 綩/null/95 媥/null/8 嬇/null/8 毷/null/12 綪/null/75 縌/null/10 媦/null/10 轝/null/8 毸/null/7 縍/null/7 嬉/null/535 縎/null/5 轞/null/7 毹/null/9 汛/null/38 迁/null/5222 汜/null/58 縏/null/10 媩/null/14 轠/null/12 毻/null/10 迂/null/459 汝/null/5218 綮/null/24 媪/null/12 軿/null/6 毼/null/9 汞/null/380 泀/null/7 毽/null/58 迄/null/1733 江/null/33665 媬/null/9 轣/null/12 毾/null/13 迅/null/5239 池/null/10502 泂/null/7 縒/null/9 嬏/null/8 污/null/1485 泃/null/10 縓/null/8 嬐/null/10 过/null/638824 泄/null/488 縔/null/11 车/null/244964 迈/null/6069 泅/null/52 媰/null/11 轧/null/197 迉/null/15 汤/null/8101 泆/null/15 縖/null/12 媱/null/12 嬓/null/13 轨/null/5054 汥/null/6 泇/null/22 媲/null/352 嬔/null/7 轩/null/7731 迋/null/1508 汦/null/9 媳/null/776 轪/null/15 汧/null/12 泉/null/7937 綷/null/44 媴/null/13 嬖/null/9 轫/null/157 迍/null/18 汨/null/242 泊/null/4706 媵/null/10 嬗/null/24 转/null/125171 迎/null/42805 汩/null/31 媶/null/8 轭/null/99 汪/null/9235 泌/null/875 縜/null/11 媷/null/13 媸/null/5 轮/null/23165 运/null/72593 嬚/null/7 媹/null/5 软/null/60057 近/null/115913 汫/null/7 泍/null/10 綼/null/11 纀/null/12 嬛/null/34 轰/null/5732 迒/null/11 媺/null/62 纁/null/11 迓/null/17 汭/null/7 泏/null/7 縠/null/32 媻/null/11 纂/null/96 轲/null/78 返/null/4554 泐/null/11 縡/null/6 嬞/null/7 宁/null/10 轳/null/48 迕/null/15 汯/null/14 泑/null/17 縢/null/9 轴/null/3571 迖/null/11 汰/null/2062 泒/null/20 媾/null/69 嬠/null/20 它/null/160436 汱/null/32 泓/null/1388 縤/null/10 媿/null/11 纆/null/10 宄/null/30 轵/null/8 迗/null/7 汲/null/877 泔/null/11 縥/null/16 宅/null/3439 轶/null/180 还/null/511627 汳/null/14 法/null/370276 嬣/null/12 这/null/986130 汴/null/34 泖/null/9 宇/null/18185 轸/null/48 泗/null/69 嬥/null/11 守/null/36214 轹/null/12 进/null/212481 汶/null/452 縩/null/7 纋/null/10 嬦/null/7 縪/null/4 轺/null/10 远/null/80657 泙/null/12 安/null/103801 轻/null/50407 违/null/13155 汸/null/24 泚/null/17 嬧/null/12 轼/null/406 连/null/127418 汹/null/697 泛/null/596 嬨/null/9 宋/null/11270 载/null/26261 迟/null/9120 泜/null/14 完/null/138826 轾/null/83 迠/null/16 汻/null/13 泝/null/27 轿/null/1314 迡/null/8 泞/null/11 浀/null/14 纑/null/7 宎/null/17 迢/null/563 汽/null/15769 流/null/92482 縰/null/11 嬬/null/23 宏/null/19842 迣/null/49 汾/null/63 泠/null/524 浂/null/13 迤/null/27 泡/null/17478 浃/null/74 嬮/null/12 迥/null/283 波/null/27996 纔/null/110 嬯/null/9 宒/null/17 迦/null/1914 泣/null/4626 浅/null/11210 縳/null/23 纕/null/18 浆/null/2245 宓/null/95 迨/null/79 泥/null/8245 浇/null/1032 纗/null/18 嬲/null/70 迩/null/288 浈/null/13 宕/null/111 迪/null/6384 泧/null/11 浉/null/8 纙/null/11 嬴/null/364 迫/null/11981 注/null/27683 浊/null/2327 縸/null/7 纚/null/21 宗/null/33457 泩/null/13 测/null/42962 纛/null/43 官/null/38147 迭/null/300 泪/null/17323 縺/null/18 嬷/null/199 宙/null/9923 迮/null/10 泫/null/40 浍/null/18 縻/null/25 定/null/322471 泬/null/13 济/null/24848 縼/null/11 缀/null/492 宛/null/1605 述/null/31545 纟/null/146 缁/null/29 宜/null/40410 泭/null/10 浏/null/1283 纠/null/3496 缂/null/13 宝/null/51193 泮/null/26 浐/null/12 縿/null/18 纡/null/25 嬼/null/8 缃/null/12 实/null/264457 封/null/35062 泯/null/269 浑/null/4746 红/null/56845 嬽/null/9 缄/null/139 泰/null/11706 浒/null/405 纣/null/139 缅/null/513 宠/null/2797 尃/null/33 迵/null/104 泱/null/216 浓/null/7474 纤/null/8 嬿/null/169 缆/null/630 审/null/9 射/null/27791 迶/null/9 泲/null/16 浔/null/14 纥/null/19 缇/null/285 客/null/59085 泳/null/7167 浕/null/13 约/null/69741 缈/null/161 宣/null/25133 将/null/206982 迷/null/74216 级/null/95710 缉/null/1119 室/null/93487 迸/null/178 泵/null/121 纨/null/86 缊/null/18 宥/null/175 迹/null/7011 泶/null/13 浘/null/7 纩/null/19 缋/null/13 宦/null/187 尉/null/2101 泷/null/178 浙/null/331 纪/null/28226 缌/null/9 宧/null/10 尊/null/22568 迻/null/6 泸/null/15 浚/null/70 纫/null/43 缍/null/11 宨/null/14 迼/null/25 泹/null/28 纬/null/2157 缎/null/179 追/null/40176 泺/null/7 纭/null/245 缏/null/17 尌/null/10 迾/null/33 泻/null/981 纮/null/92 宪/null/13709 迿/null/15 泼/null/3526 浞/null/6 淀/null/20 纯/null/28912 缑/null/7 宫/null/19968 浟/null/5 泽/null/7931 纰/null/159 缒/null/14 宬/null/24 小/null/530133 泾/null/53 浠/null/16 淂/null/161 纱/null/1196 缓/null/7883 宭/null/13 尐/null/14 浡/null/12 纲/null/5576 缔/null/1538 少/null/206744 浢/null/9 淄/null/22 尒/null/10 浣/null/260 淅/null/141 纳/null/15556 缕/null/563 宰/null/3479 浤/null/22 淆/null/1129 纴/null/12 编/null/38087 尔/null/38126 浥/null/52 淇/null/855 纵/null/11069 缗/null/25 尕/null/6 浦/null/1875 淈/null/9 纶/null/1549 缘/null/32816 害/null/51860 尖/null/9349 浧/null/6 淉/null/7 纷/null/9009 缙/null/41 宴/null/2071 浨/null/18 淊/null/6 纸/null/24519 缚/null/2350 宵/null/3817 尘/null/16193 浩/null/9069 淋/null/3413 纹/null/3656 缛/null/14 家/null/6058 浪/null/34731 淌/null/907 纺/null/646 缜/null/53 尚/null/28869 淍/null/35 纻/null/8 缝/null/2766 宸/null/232 浬/null/231 纼/null/9 缞/null/10 容/null/108060 羁/null/584 浭/null/6 淏/null/20 纽/null/4050 缟/null/74 尝/null/2117 浮/null/15229 淐/null/17 纾/null/341 缠/null/4784 羃/null/18 线/null/88361 缡/null/7 尟/null/12 岁/null/37303 浯/null/220 淑/null/8887 缢/null/42 宽/null/10361 岂/null/8616 浰/null/9 缣/null/11 宾/null/6274 淓/null/10 缤/null/915 宿/null/34166 羇/null/17 尢/null/36 淔/null/11 缥/null/195 淕/null/11 缦/null/44 羉/null/13 尤/null/29292 岆/null/10 浴/null/4238 淖/null/67 缧/null/11 羊/null/11499 尥/null/14 浵/null/6 淗/null/9 缨/null/174 岈/null/8 浶/null/8 淘/null/3120 缩/null/17930 岉/null/5 羌/null/92 尧/null/3685 海/null/88905 淙/null/133 缪/null/493 羍/null/5 尨/null/14 岊/null/15 浸/null/1677 缫/null/13 美/null/173127 岋/null/8 淛/null/9 缬/null/16 淜/null/5 尪/null/387 岌/null/148 浺/null/11 缭/null/123 浻/null/10 淝/null/24 缮/null/911 羑/null/7 岍/null/109 浼/null/44 淞/null/66 湀/null/11 缯/null/36 羒/null/11 尬/null/1871 浽/null/8 淟/null/13 湁/null/6 缰/null/99 岏/null/17 浾/null/10 淠/null/7 缱/null/199 羔/null/649 岐/null/658 浿/null/15 淡/null/21570 湃/null/323 缲/null/9 羕/null/9 岑/null/323 淢/null/11 湄/null/351 缳/null/23 羖/null/14 尰/null/6 岒/null/10 淣/null/10 湅/null/17 缴/null/7952 就/null/803921 岓/null/7 淤/null/481 湆/null/14 岔/null/881 湇/null/13 缵/null/12 尳/null/8 岕/null/7 淦/null/225 缶/null/21 尴/null/1546 岖/null/309 湉/null/21 羚/null/418 岗/null/3791 缸/null/5193 羛/null/11 岘/null/17 湋/null/16 缹/null/7 羜/null/9 岙/null/7 缺/null/29257 羝/null/19 尸/null/401 岚/null/6416 淫/null/99 湍/null/184 羞/null/5666 尹/null/3101 岛/null/23592 淬/null/107 湎/null/17 羟/null/33 尺/null/11878 淭/null/6 羠/null/9 尻/null/122 岝/null/16 淮/null/335 缾/null/6 缿/null/5 羡/null/122 尼/null/18042 崀/null/15 淯/null/37 湑/null/10 尽/null/9665 岟/null/9 崁/null/215 淰/null/11 湒/null/14 尾/null/15029 岠/null/14 崂/null/11 群/null/39731 尿/null/3328 崃/null/29 深/null/67687 湓/null/14 岢/null/19 崄/null/11 淲/null/9 湔/null/10 羦/null/10 岣/null/11 淳/null/1246 湕/null/10 羧/null/11 岤/null/13 崆/null/31 淴/null/10 湖/null/28325 岥/null/14 崇/null/11545 岦/null/58 湘/null/2284 岧/null/10 混/null/22888 岨/null/5 湚/null/13 羬/null/6 岩/null/10 崋/null/16 淹/null/2777 湛/null/999 崌/null/5 羭/null/6 岪/null/6 湜/null/19 岫/null/838 添/null/4500 湝/null/8 滀/null/5 羯/null/4017 岬/null/65 崎/null/2712 淼/null/691 羰/null/15 淽/null/11 湟/null/17 滁/null/8 羱/null/9 岭/null/13 崏/null/7 湠/null/112 滂/null/318 羲/null/499 岮/null/14 湡/null/12 滃/null/18 湢/null/5 羳/null/8 岯/null/6 岰/null/10 崒/null/23 羵/null/6 岱/null/868 湤/null/6 滆/null/9 崔/null/1606 湥/null/8 滇/null/85 岳/null/592 湦/null/16 滈/null/9 羷/null/13 崖/null/1036 滉/null/14 湨/null/5 羸/null/68 岵/null/8 滊/null/7 岶/null/5 羹/null/626 湩/null/17 滋/null/5526 羺/null/14 岷/null/76 羻/null/7 岸/null/10557 崚/null/346 湫/null/11 滍/null/9 羼/null/35 崛/null/310 滏/null/5 羽/null/8817 羾/null/14 崝/null/13 湮/null/192 滐/null/10 羿/null/429 崞/null/15 嶀/null/21 滑/null/11131 滒/null/5 岽/null/9 崟/null/26 嶂/null/50 湱/null/9 滓/null/31 岿/null/10 湲/null/17 滔/null/1608 崣/null/8 湳/null/85 滕/null/166 崤/null/10 嶆/null/11 湴/null/7 滖/null/29 崥/null/8 滗/null/10 崦/null/14 嶈/null/15 滘/null/9 崧/null/216 嶉/null/10 湷/null/24 崨/null/5 嶊/null/14 湸/null/6 滚/null/12305 崩/null/2048 湹/null/7 滜/null/7 嶍/null/17 滞/null/1077 潀/null/56 崭/null/464 滟/null/41 滠/null/5 崮/null/10 湾/null/178502 湿/null/768 满/null/71310 潃/null/18 滢/null/213 崰/null/12 嶒/null/10 崱/null/10 嶓/null/13 滤/null/2884 潆/null/18 崲/null/9 滥/null/5110 潇/null/2967 嶕/null/6 滦/null/23 崴/null/96 崵/null/5 滨/null/2166 崶/null/11 滩/null/1978 潋/null/59 崷/null/13 嶙/null/156 滪/null/12 崸/null/6 嶚/null/10 滫/null/11 潍/null/28 崹/null/12 潎/null/12 崺/null/6 嶜/null/7 滭/null/6 潏/null/6 嶝/null/7 滮/null/97 潐/null/10 崼/null/11 嶞/null/15 崽/null/102 嶟/null/8 币/null/8321 潒/null/11 市/null/105637 滱/null/6 潓/null/29 崿/null/5 嶡/null/11 布/null/16807 帄/null/7 潕/null/14 帅/null/19869 滴/null/7275 帆/null/2933 滵/null/14 潗/null/11 师/null/135409 滶/null/19 潘/null/4300 帊/null/13 潚/null/28 嶩/null/12 滹/null/6 嶪/null/11 希/null/120764 潜/null/8541 潝/null/16 嶬/null/8 帎/null/8 滼/null/14 潞/null/295 激/null/34430 嶭/null/7 帏/null/59 滽/null/12 帐/null/22312 潠/null/11 濂/null/286 潡/null/5 嶯/null/9 帑/null/209 嶰/null/5 潢/null/303 濄/null/10 潣/null/9 嶱/null/14 濆/null/7 嶲/null/6 帔/null/8 濇/null/9 帕/null/2361 潦/null/229 濈/null/7 帖/null/3096 潧/null/9 濉/null/10 嶵/null/9 帗/null/13 濊/null/11 帘/null/148 潩/null/11 濋/null/57 嶷/null/6 帙/null/21 潪/null/13 濌/null/10 帚/null/132 潫/null/9 濍/null/7 帛/null/142 潬/null/8 濎/null/10 帜/null/809 潭/null/3564 濏/null/11 帝/null/41120 潮/null/11709 庀/null/12 濑/null/849 帟/null/10 濒/null/467 帠/null/10 庂/null/10 帡/null/7 潲/null/16 帢/null/19 庄/null/1185 潳/null/38 帣/null/14 潴/null/12 帤/null/12 庆/null/21321 潶/null/5 庇/null/439 带/null/76240 庈/null/16 庉/null/5 帧/null/72 帨/null/12 床/null/11827 潸/null/108 帩/null/17 庋/null/15 庌/null/8 潺/null/278 庍/null/5 潻/null/22 濝/null/10 潼/null/52 濞/null/7 席/null/69 序/null/21328 潽/null/22 帮/null/80023 庐/null/860 潾/null/15 濠/null/94 庑/null/12 濡/null/193 濢/null/7 帱/null/18 库/null/14348 濣/null/22 应/null/246284 底/null/68724 濦/null/7 帴/null/13 庖/null/142 濧/null/13 店/null/33183 濨/null/13 濩/null/15 帷/null/222 庙/null/3963 常/null/185860 庚/null/1485 庛/null/65 府/null/29469 濭/null/10 帻/null/15 濮/null/58 帼/null/175 庞/null/3522 开/null/265943 濯/null/371 帽/null/11470 废/null/17356 弁/null/87 帾/null/17 庠/null/302 异/null/14 弃/null/22563 濲/null/6 庢/null/11 弄/null/25855 庣/null/8 弅/null/15 濴/null/11 庤/null/19 庥/null/27 弇/null/9 度/null/147388 弈/null/64 濷/null/7 座/null/56615 庨/null/13 弊/null/4543 弋/null/430 庪/null/12 濻/null/12 庬/null/18 庭/null/11105 式/null/202729 庮/null/12 濿/null/20 庰/null/16 弒/null/81 庱/null/13 弓/null/2630 庲/null/7 庳/null/56 引/null/74461 庴/null/13 庵/null/24 弗/null/1864 庶/null/549 弘/null/6356 康/null/38252 庸/null/9813 弚/null/13 庹/null/47 弛/null/211 弝/null/8 庼/null/23 往/null/63499 弟/null/141812 征/null/5442 庾/null/83 张/null/134407 徂/null/17 弢/null/10 径/null/1616 弣/null/7 待/null/58350 弤/null/9 徆/null/13 弥/null/1137 徇/null/28 弦/null/2487 很/null/417617 弧/null/970 徉/null/540 弨/null/6 徊/null/1060 弩/null/369 律/null/27377 弪/null/7 弭/null/205 弮/null/10 徐/null/12774 弯/null/7669 弰/null/7 徒/null/21432 乂/null/25 弱/null/13963 乃/null/435 徕/null/267 久/null/75514 徖/null/6 得/null/521836 乇/null/12 弶/null/17 徘/null/1095 么/null/7768 义/null/115744 徙/null/371 弸/null/12 之/null/527444 弹/null/26708 徛/null/218 乌/null/12176 强/null/106 徜/null/677 乍/null/1086 乎/null/76041 弼/null/241 乏/null/7468 徟/null/14 乐/null/168280 御/null/1585 乒/null/239 乓/null/227 乔/null/6151 徥/null/32 徦/null/14 乖/null/20396 徨/null/1063 乘/null/12677 乙/null/11559 循/null/4915 徫/null/30 乜/null/69 徭/null/15 九/null/60561 微/null/32489 乞/null/1137 什/null/276297 徯/null/11 也/null/2712260 仁/null/30825 习/null/48435 仂/null/11 乡/null/23208 仃/null/96 徲/null/9 仄/null/1284 仅/null/22327 仆/null/361 仇/null/5949 徶/null/12 书/null/166626 仈/null/10 德/null/60841 仉/null/7 今/null/143560 乩/null/336 介/null/53811 徻/null/5 仍/null/47529 从/null/160052 徼/null/24 徽/null/1136 徾/null/12 仑/null/544 徿/null/10 买/null/143064 乱/null/51811 仓/null/3902 仔/null/30580 乳/null/3636 仕/null/1816 他/null/635766 仗/null/3632 付/null/25729 仙/null/16789 仚/null/10 仜/null/8 仝/null/385 仞/null/249 仟/null/1341 佁/null/12 乿/null/10 仡/null/12 佃/null/78 代/null/141314 令/null/69051 但/null/362245 以/null/994958 佉/null/25 仨/null/27 仩/null/21 仪/null/10938 佌/null/14 位/null/291403 们/null/571155 低/null/46654 住/null/84509 佐/null/3087 佑/null/1562 佒/null/5 仰/null/9993 仱/null/10 体/null/4229 仲/null/6118 仳/null/41 何/null/394682 仴/null/12 佖/null/11 仵/null/16 佗/null/290 件/null/98128 价/null/29 余/null/5368 佚/null/136 佛/null/3602 作/null/287015 任/null/117100 佝/null/19 佞/null/181 俀/null/7 份/null/99488 佟/null/19 你/null/915385 仿/null/72 佡/null/17 促/null/6018 佢/null/451 俄/null/3950 佣/null/286 俅/null/35 佤/null/5 佥/null/10 俇/null/38 佧/null/13 俉/null/14 俊/null/32096 佩/null/2426 俋/null/11 佪/null/28 佫/null/904 俍/null/15 佬/null/2910 俎/null/177 俏/null/1129 佮/null/1614 俐/null/951 佯/null/379 俑/null/391 佰/null/1234 俓/null/36 俔/null/9 佳/null/39101 佴/null/10 俖/null/10 俗/null/11307 佶/null/134 俘/null/443 佷/null/33 俙/null/15 佸/null/34 俚/null/95 佹/null/7 俛/null/47 佺/null/18 俜/null/13 佻/null/52 保/null/99970 佼/null/497 俞/null/809 佽/null/12 俟/null/479 佾/null/36 使/null/216201 信/null/406628 俣/null/11 俦/null/128 俨/null/569 俩/null/4966 俪/null/451 俬/null/28 俭/null/522 修/null/114 俯/null/32 俱/null/6857 俳/null/44 俴/null/17 俵/null/77 俶/null/8 俷/null/9 俸/null/225 俺/null/1681 俾/null/575 遁/null/859 遂/null/2207 遄/null/47 遇/null/39200 遉/null/24 遍/null/14043 遏/null/323 遐/null/732 遑/null/433 遒/null/22 道/null/386382 遗/null/19703 遘/null/43 遛/null/35 郁/null/2826 遢/null/127 郄/null/918 遣/null/2957 郅/null/58 遥/null/10160 郇/null/25 郈/null/11 遧/null/12 遨/null/2794 郊/null/1811 郋/null/9 遫/null/11 郎/null/17737 遭/null/15597 郏/null/11 遮/null/2678 郐/null/14 遯/null/20 郑/null/15451 遰/null/15 郓/null/12 郔/null/7 遳/null/8 郕/null/15 遴/null/392 郖/null/16 遵/null/4780 郗/null/17 遶/null/63 郘/null/9 郙/null/6 郚/null/8 遹/null/27 郛/null/17 郜/null/34 遻/null/10 郝/null/2554 酀/null/19 遽/null/308 酁/null/7 遾/null/17 郠/null/14 避/null/20858 郡/null/737 酃/null/6 郢/null/155 酄/null/22 郣/null/10 酅/null/8 酆/null/25 郥/null/12 酇/null/22 郦/null/19 郧/null/25 酉/null/325 部/null/176255 酊/null/46 郩/null/20 酋/null/527 郪/null/8 酌/null/1677 郫/null/13 配/null/42778 郬/null/9 酎/null/16 郭/null/24538 酏/null/16 酐/null/13 耀/null/396 郯/null/13 老/null/198538 郰/null/6 酒/null/30999 郱/null/23 酓/null/16 考/null/71 郲/null/7 酕/null/5 耄/null/33 郳/null/10 者/null/283962 郴/null/21 酖/null/24 耆/null/147 酗/null/332 耇/null/8 酘/null/23 郸/null/42 酚/null/72 郹/null/8 耋/null/18 而/null/459507 郺/null/8 耍/null/5783 郻/null/16 酝/null/205 耎/null/15 郼/null/15 耏/null/7 都/null/493206 酟/null/8 酠/null/5 耐/null/13694 郾/null/19 釂/null/9 郿/null/11 酡/null/26 耒/null/20 酢/null/73 酣/null/324 耔/null/6 酤/null/16 釆/null/218 耕/null/2168 酥/null/919 采/null/12 耖/null/8 酦/null/35 耗/null/6573 釉/null/74 酨/null/11 释/null/28042 耘/null/693 酩/null/44 耙/null/509 酪/null/471 里/null/1496 重/null/190069 耛/null/11 酬/null/1991 野/null/43878 耜/null/8 量/null/75841 酮/null/132 耞/null/18 酯/null/202 金/null/108819 耟/null/9 酰/null/43 肂/null/11 酱/null/2872 肃/null/2896 酲/null/22 肄/null/272 酳/null/9 酴/null/24 耤/null/11 肆/null/3104 酵/null/690 肇/null/2531 耦/null/94 酷/null/11827 耧/null/11 肉/null/28277 酸/null/371 釚/null/13 耨/null/488 肊/null/11 酹/null/628 酺/null/5 耩/null/6 肋/null/544 釜/null/178 耪/null/17 肌/null/1908 肏/null/71 酽/null/11 肐/null/14 酾/null/11 酿/null/1476 耰/null/12 肒/null/7 釢/null/8 肓/null/122 耳/null/13349 肕/null/12 耴/null/13 肖/null/1527 耵/null/21 耶/null/73163 肘/null/641 釨/null/10 鉊/null/20 耷/null/12 肙/null/12 釪/null/8 鉌/null/9 耸/null/1356 肚/null/6730 釫/null/17 耹/null/29 肛/null/633 鉎/null/27 肜/null/8 釭/null/56 鉏/null/11 耻/null/8157 肝/null/3945 釮/null/14 鉐/null/28 脀/null/7 耽/null/885 脁/null/15 鉒/null/10 耾/null/11 肠/null/3932 脂/null/1475 釱/null/13 鉓/null/11 耿/null/1744 股/null/17617 鉔/null/14 肢/null/3500 釳/null/10 肣/null/9 釴/null/11 鉖/null/10 肤/null/4000 脆/null/8466 肥/null/8612 脉/null/4812 釸/null/8 脊/null/1080 肩/null/5233 肪/null/425 肫/null/27 脍/null/120 鋀/null/12 釽/null/13 肭/null/10 脏/null/2307 肮/null/12 脐/null/278 鉠/null/8 鉡/null/5 肯/null/17482 脑/null/85822 釿/null/8 鋄/null/7 肱/null/69 脓/null/279 鉣/null/8 育/null/55965 脔/null/40 鋆/null/18 脕/null/218 鉥/null/10 肴/null/55 脖/null/969 鋈/null/9 肵/null/8 鉧/null/11 鋉/null/11 脘/null/18 鋊/null/10 脙/null/9 鋋/null/8 肸/null/10 脚/null/30714 鋍/null/8 鋎/null/6 肺/null/1223 脝/null/7 鋐/null/27 脞/null/22 膀/null/3633 鉯/null/6 鋑/null/9 脟/null/23 鉰/null/14 肾/null/1172 膂/null/35 鋓/null/7 肿/null/1527 脡/null/10 脢/null/61 鋕/null/15 鉴/null/13 脤/null/18 膆/null/18 鋗/null/11 脥/null/14 膇/null/12 鋘/null/28 膈/null/70 脧/null/8 膉/null/14 膊/null/152 鉹/null/26 膋/null/19 膌/null/14 膍/null/5 鉼/null/13 鋞/null/13 脬/null/6 鉽/null/12 脭/null/8 膏/null/1301 鉾/null/9 鋠/null/12 鋡/null/9 灀/null/10 脯/null/153 膑/null/85 灁/null/10 脰/null/9 灂/null/9 脱/null/16953 灅/null/8 灆/null/6 膗/null/9 鋧/null/7 鍉/null/13 脶/null/12 膘/null/22 灈/null/6 膙/null/10 灉/null/9 脸/null/23688 鍌/null/7 灊/null/8 膛/null/764 脺/null/11 膜/null/2902 鍎/null/7 灌/null/40173 膝/null/1438 鍏/null/6 鍐/null/13 膞/null/7 舀/null/129 鍑/null/10 鍒/null/5 灏/null/77 脽/null/13 膟/null/13 舁/null/13 脾/null/2362 舂/null/32 灒/null/20 膢/null/14 舄/null/10 鍕/null/12 膣/null/9 舅/null/1256 鍖/null/8 舆/null/1063 鍗/null/7 灖/null/23 膦/null/13 鋷/null/14 鍙/null/25 灗/null/16 膧/null/11 膨/null/1481 鋹/null/55 舋/null/35 鋺/null/10 鍜/null/13 舌/null/3769 鏀/null/8 灚/null/7 膫/null/144 舍/null/8137 鍞/null/14 灛/null/11 膬/null/10 鋾/null/5 鏂/null/7 鋿/null/5 膮/null/11 舐/null/46 鍡/null/12 鏄/null/19 灞/null/12 舑/null/6 灟/null/12 烁/null/2067 膰/null/16 舒/null/9918 鍣/null/13 灠/null/48 烂/null/35425 膱/null/24 灡/null/7 烃/null/20 膲/null/12 舔/null/436 灢/null/6 膳/null/981 舕/null/8 烅/null/9 膴/null/12 烆/null/31 膵/null/11 鍧/null/11 鏊/null/9 灥/null/16 烇/null/10 灦/null/29 烈/null/19529 膷/null/12 鍪/null/12 灨/null/21 烊/null/133 膹/null/10 舛/null/33 鏎/null/9 烋/null/17 膺/null/495 舜/null/2037 鏏/null/15 灪/null/10 膻/null/19 舝/null/9 鍭/null/15 芀/null/5 火/null/64196 烍/null/7 膼/null/6 舞/null/41993 烎/null/11 舟/null/5897 鏒/null/14 灭/null/19510 舠/null/15 节/null/52773 鍱/null/20 鏔/null/12 灯/null/25149 烑/null/15 舡/null/10 芃/null/51 鏕/null/8 灰/null/9328 烒/null/8 舢/null/79 芄/null/10 鏖/null/97 灱/null/8 烓/null/9 舣/null/12 芅/null/7 烔/null/41 舥/null/9 鏙/null/7 灴/null/10 芈/null/15 鍷/null/7 灵/null/40022 烗/null/6 灶/null/262 烘/null/945 舨/null/58 芊/null/115 鍹/null/8 烙/null/678 芋/null/1635 灸/null/502 烚/null/7 航/null/10189 鍻/null/12 鑀/null/10 烛/null/2074 舫/null/215 芍/null/85 般/null/87661 芎/null/193 灺/null/19 烜/null/316 芏/null/11 烝/null/9 芐/null/16 灼/null/491 烞/null/21 舯/null/16 芑/null/9 鏣/null/10 鑅/null/7 烟/null/1196 煁/null/7 舰/null/11143 芒/null/4888 灾/null/5317 鑆/null/8 烠/null/10 煂/null/6 舱/null/647 芓/null/10 灿/null/4162 鑇/null/15 烡/null/11 煃/null/9 舲/null/20 芔/null/31 烢/null/8 煄/null/14 舳/null/17 鏦/null/11 鑈/null/13 煅/null/18 舴/null/149 鑉/null/6 鏧/null/12 烤/null/5237 舵/null/653 芗/null/24 舶/null/199 芘/null/6 鑋/null/13 烦/null/46473 舷/null/70 芙/null/1672 烧/null/14030 舸/null/12 芚/null/10 烨/null/209 船/null/12875 芛/null/6 鏬/null/16 烩/null/136 煋/null/15 舺/null/64 芜/null/478 鑏/null/8 煌/null/4107 舻/null/14 芝/null/3421 鏮/null/22 鑐/null/13 烫/null/1755 煍/null/13 舼/null/12 芞/null/22 茀/null/18 烬/null/722 煎/null/2671 舽/null/10 芟/null/16 茁/null/958 热/null/52375 芠/null/9 茂/null/4915 煐/null/42 舿/null/7 芡/null/43 范/null/2880 烯/null/138 怀/null/11 烰/null/8 芢/null/26 茄/null/764 态/null/52194 煓/null/7 芣/null/17 茅/null/1043 怂/null/296 鑗/null/7 煔/null/9 芤/null/6 茆/null/40 怃/null/23 鏶/null/5 烳/null/6 芥/null/895 茇/null/7 怄/null/11 芦/null/1299 茈/null/28 怅/null/1140 鏸/null/13 芧/null/16 茉/null/664 怆/null/505 烶/null/11 煘/null/7 芨/null/31 鏺/null/6 烷/null/310 芩/null/145 鏻/null/7 鑝/null/10 烸/null/226 煚/null/723 茌/null/14 怉/null/14 鏼/null/13 烹/null/681 铀/null/190 芫/null/51 茍/null/970 怊/null/16 烺/null/7 铁/null/12 煜/null/689 芬/null/10527 茎/null/935 怋/null/11 煝/null/5 怌/null/5 烻/null/20 铂/null/61 芭/null/4139 茏/null/28 鏾/null/9 铃/null/6587 芮/null/252 怍/null/51 鏿/null/10 烼/null/5 鑢/null/7 铄/null/144 煞/null/8474 燀/null/10 芯/null/547 茑/null/19 怎/null/154174 烽/null/450 铅/null/1826 煟/null/8 芰/null/8 怏/null/51 铆/null/23 煠/null/20 燂/null/7 花/null/101015 怐/null/29 烿/null/15 煡/null/8 燃/null/6378 茔/null/49 怑/null/14 铈/null/13 芳/null/15327 茕/null/63 怒/null/7861 铉/null/86 煣/null/25 燅/null/14 芴/null/91 茖/null/30 怓/null/24 煤/null/934 燆/null/14 芵/null/44 茗/null/432 怔/null/482 鑨/null/10 铊/null/18 燇/null/10 芶/null/9 怕/null/59891 鑩/null/14 铋/null/17 煦/null/473 芷/null/1783 茙/null/13 怖/null/6167 铌/null/15 照/null/131 芸/null/35 怗/null/9 鑫/null/1470 铍/null/25 煨/null/21 燊/null/220 芹/null/1097 茛/null/13 铎/null/1088 燋/null/19 芺/null/18 茜/null/914 怙/null/57 铏/null/14 煪/null/11 鑮/null/11 铐/null/659 芼/null/39 茞/null/11 怚/null/14 鑯/null/25 铑/null/13 燎/null/79 芽/null/1586 莁/null/15 怛/null/63 铒/null/11 燏/null/9 芾/null/29 茠/null/29 怜/null/52 铓/null/18 煮/null/4273 莃/null/7 思/null/101505 铔/null/12 茢/null/9 怞/null/33 悀/null/62 煰/null/5 鑳/null/8 铕/null/9 莅/null/897 悁/null/30 鑴/null/7 铖/null/11 怠/null/1194 鑵/null/22 铗/null/66 煲/null/42 燔/null/27 茤/null/13 莆/null/33 怡/null/8122 悃/null/17 鑶/null/9 燕/null/10 茥/null/12 莇/null/12 怢/null/51 悄/null/4898 莈/null/5 铙/null/43 燖/null/9 茦/null/36 鑸/null/11 铚/null/20 茧/null/14 莉/null/7901 怤/null/6 悆/null/9 铛/null/92 燘/null/12 茨/null/70 急/null/34127 悇/null/11 铜/null/3512 茩/null/40 莋/null/8 怦/null/176 悈/null/9 铝/null/1827 煸/null/17 燚/null/9 茪/null/67 莌/null/11 性/null/199183 悉/null/8090 镀/null/753 燛/null/8 茫/null/6378 莍/null/10 怨/null/12485 悊/null/7 铟/null/14 镁/null/277 茬/null/44 莎/null/5532 怩/null/40 铠/null/828 煻/null/9 镂/null/132 茭/null/8 莏/null/9 怪/null/71713 悌/null/152 铡/null/66 镃/null/13 莐/null/14 怫/null/29 悍/null/1546 铢/null/71 煽/null/1271 镄/null/6 牁/null/11 茯/null/67 怬/null/23 悎/null/10 铣/null/55 镅/null/16 莒/null/852 怭/null/9 铤/null/21 镆/null/19 燠/null/32 牂/null/12 茱/null/569 莓/null/868 怮/null/18 悐/null/23 铥/null/31 镇/null/10526 燡/null/9 莔/null/8 怯/null/839 铦/null/7 镈/null/8 燢/null/10 牄/null/14 茳/null/17 莕/null/6 悒/null/53 铧/null/14 镉/null/283 茴/null/22 铨/null/690 镊/null/23 燤/null/6 茵/null/1614 莗/null/13 怲/null/6 悔/null/14321 铩/null/28 镋/null/10 燥/null/1579 片/null/107600 茶/null/16063 莘/null/691 怳/null/17 悕/null/20 版/null/146807 茷/null/32 莙/null/15 怴/null/14 悖/null/279 牉/null/5 铪/null/21 镌/null/37 燧/null/51 茸/null/217 莚/null/8 怵/null/68 悗/null/9 铫/null/18 镍/null/374 燨/null/7 牊/null/9 茹/null/1259 莛/null/11 铬/null/169 镎/null/15 茺/null/7 莜/null/10 怷/null/15 莝/null/5 铭/null/26579 镏/null/12 牌/null/30757 茻/null/15 悚/null/288 铮/null/724 镐/null/73 牍/null/51 茼/null/58 莞/null/254 怹/null/40 悛/null/14 铯/null/17 镑/null/91 萁/null/38 铰/null/20 镒/null/77 牏/null/22 莠/null/148 悜/null/18 铱/null/18 镓/null/13 燮/null/38 茿/null/11 总/null/101978 萃/null/1067 悝/null/17 愀/null/23 铲/null/302 镔/null/26 怼/null/85 萄/null/2033 愁/null/13655 铳/null/316 镕/null/392 燰/null/11 牒/null/259 莣/null/10 悟/null/7589 铴/null/6 镖/null/582 燱/null/11 牓/null/24 莤/null/24 萆/null/8 悠/null/7625 愃/null/11 铵/null/56 镗/null/49 燲/null/8 莥/null/8 怿/null/83 愄/null/8 银/null/19166 镘/null/10 悢/null/12 愅/null/12 铷/null/13 镙/null/16 牖/null/24 莦/null/8 患/null/4650 萉/null/5 愆/null/56 铸/null/943 铹/null/18 镛/null/290 莨/null/13 愈/null/68 铺/null/626 镜/null/22234 牙/null/12472 莩/null/16 萋/null/73 悦/null/5736 愉/null/7387 铻/null/10 镝/null/14 燸/null/18 牚/null/8 莪/null/37 萌/null/526 愊/null/7 铼/null/28 镞/null/29 燹/null/52 闀/null/15 牛/null/34225 莫/null/27786 萍/null/4392 您/null/185118 愋/null/10 铽/null/9 萎/null/989 镠/null/5 链/null/969 牝/null/41 萏/null/198 愍/null/19 铿/null/157 镡/null/8 牞/null/10 莮/null/16 萐/null/7 悫/null/17 愎/null/178 镢/null/7 燽/null/13 牟/null/738 狁/null/16 莯/null/6 萑/null/12 悬/null/2957 意/null/322755 镣/null/43 闅/null/6 牠/null/11796 狂/null/40001 莰/null/10 萒/null/11 悭/null/72 愐/null/14 镤/null/15 牡/null/4509 狃/null/9 莱/null/7057 萓/null/20 闇/null/1448 莲/null/11039 悯/null/969 愒/null/22 镦/null/6 牢/null/4712 狄/null/1582 莳/null/42 悰/null/10 愓/null/20 镧/null/22 闉/null/13 牣/null/7 狅/null/6 莴/null/56 悱/null/238 愔/null/107 镨/null/10 狆/null/13 悲/null/32912 愕/null/498 莶/null/20 愖/null/15 镪/null/9 牦/null/13 狈/null/300 获/null/2355 悴/null/579 镫/null/34 牧/null/5908 狉/null/15 莸/null/13 萚/null/19 愘/null/9 狊/null/15 莹/null/2364 萛/null/28 镬/null/20 物/null/119523 狋/null/21 莺/null/1451 悷/null/12 愚/null/5458 镭/null/82 牪/null/12 狌/null/9 萝/null/2023 悸/null/1929 悹/null/5 镮/null/30 莼/null/6 镯/null/88 闑/null/12 牬/null/8 狎/null/55 莽/null/975 悺/null/11 蒂/null/2649 愝/null/10 镰/null/193 悻/null/238 镱/null/38 牮/null/17 狐/null/9282 莿/null/22 憀/null/8 牯/null/255 狑/null/7 悼/null/1654 感/null/203436 镳/null/318 牰/null/10 狒/null/249 萣/null/22 蒆/null/6 愠/null/193 镴/null/144 萤/null/25427 悾/null/39 蒇/null/12 憃/null/7 镵/null/13 牲/null/7177 狔/null/7 营/null/38542 悿/null/11 镶/null/314 牳/null/16 萦/null/438 狖/null/5 蒉/null/6 愣/null/746 萧/null/13870 愤/null/3674 牵/null/11519 狗/null/39154 闛/null/7 牶/null/26 狘/null/9 萨/null/9858 蒋/null/7126 愦/null/30 镺/null/7 牷/null/22 狙/null/475 萩/null/93 蒌/null/17 愧/null/4855 憉/null/9 镻/null/9 牸/null/15 狚/null/15 蒍/null/10 镼/null/11 特/null/103567 陀/null/5749 萫/null/11 蒎/null/8 愩/null/14 憋/null/610 镽/null/6 闟/null/7 牺/null/6815 狜/null/14 蒏/null/9 憌/null/11 牻/null/10 陂/null/57 狝/null/14 萭/null/11 愫/null/244 憍/null/60 长/null/237093 牼/null/6 陃/null/15 狞/null/195 獀/null/13 蒑/null/11 愬/null/11 憎/null/703 附/null/55735 狟/null/10 萯/null/7 闣/null/13 牾/null/13 际/null/39814 狠/null/5549 獂/null/6 萰/null/7 愮/null/8 牿/null/15 陆/null/34355 狡/null/793 萱/null/1124 愯/null/10 陇/null/298 偀/null/69 萲/null/27 陈/null/125249 狣/null/17 偁/null/9 萳/null/17 憓/null/32 陉/null/72 萴/null/6 蒗/null/16 愲/null/13 憔/null/511 门/null/89827 陊/null/9 狤/null/12 偃/null/188 蒘/null/8 闩/null/84 陋/null/3807 萶/null/6 蒙/null/30 闪/null/11043 陌/null/3815 狦/null/10 偅/null/10 萷/null/8 蒚/null/7 闫/null/16 降/null/18470 獉/null/12 偆/null/87 萸/null/52 蒛/null/9 愶/null/6 闬/null/11 陎/null/9 狨/null/12 獊/null/10 假/null/65722 萹/null/78 蒜/null/567 闭/null/10087 陏/null/9 狩/null/196 偈/null/677 萺/null/15 蒝/null/7 狪/null/21 獌/null/9 萻/null/6 蔀/null/17 憛/null/10 问/null/601742 限/null/50622 狫/null/12 獍/null/14 偊/null/12 萼/null/272 蒟/null/11 闯/null/3014 陑/null/10 独/null/91993 偋/null/14 落/null/58567 蒠/null/7 愻/null/16 蔂/null/13 憝/null/7 闰/null/886 狭/null/2476 偌/null/236 蒡/null/30 闱/null/39 陓/null/11 狮/null/21193 獐/null/45 偍/null/17 萿/null/17 蒢/null/6 憟/null/27 戁/null/14 闲/null/663 陔/null/11 狯/null/54 獑/null/15 偎/null/958 闳/null/41 陕/null/113 狰/null/165 獒/null/58 偏/null/22239 蒤/null/11 间/null/221727 狱/null/6251 愿/null/1078 蔇/null/26 憡/null/12 戃/null/7 闵/null/914 狲/null/31 偑/null/33 蔈/null/10 憢/null/9 戄/null/9 闶/null/15 狳/null/15 蒧/null/7 蔉/null/7 闷/null/6194 狴/null/25 偓/null/7 蒨/null/236 蔊/null/6 戆/null/82 闸/null/274 獗/null/217 蒩/null/11 蔋/null/13 闹/null/11924 陛/null/114 狶/null/12 獘/null/8 偕/null/683 戈/null/3008 闺/null/337 陜/null/31 狷/null/752 獙/null/12 蒪/null/13 蔌/null/20 憧/null/1149 戉/null/12 闻/null/58075 狸/null/400 獚/null/7 偗/null/10 蒫/null/18 蔍/null/9 憨/null/670 戊/null/655 闼/null/76 雀/null/3727 獛/null/7 蒬/null/12 蔎/null/19 憩/null/585 戋/null/23 闽/null/3502 陟/null/28 狺/null/37 雁/null/2926 蔏/null/9 憪/null/17 戌/null/681 闾/null/187 狻/null/14 雂/null/13 獝/null/8 做/null/186770 蒮/null/9 戍/null/120 闿/null/40 陡/null/699 狼/null/15194 雃/null/58 獞/null/38 珀/null/379 偛/null/8 蒯/null/22 蔑/null/83 憬/null/1098 戎/null/268 院/null/66835 雄/null/68173 獟/null/14 蒰/null/6 蔒/null/12 憭/null/83 戏/null/39504 狾/null/13 雅/null/19823 獠/null/151 珂/null/135 停/null/52109 蒱/null/16 蔓/null/956 成/null/459481 除/null/78924 狿/null/11 集/null/58884 獡/null/7 珃/null/9 偝/null/11 蒲/null/665 憯/null/23 我/null/2584497 雇/null/449 獢/null/19 偞/null/21 蔕/null/5 憰/null/12 戒/null/7180 雈/null/8 珅/null/33 偟/null/6 僁/null/9 蒴/null/12 蔖/null/6 憱/null/6 陧/null/28 雉/null/250 珆/null/8 偠/null/13 獥/null/5 蔗/null/345 陨/null/381 雊/null/7 珇/null/12 偡/null/11 蒶/null/10 蔘/null/113 憳/null/12 戕/null/185 险/null/26216 偢/null/8 僄/null/6 蔙/null/10 憴/null/8 或/null/248845 陪/null/10822 雌/null/481 獦/null/17 珈/null/634 偣/null/8 蒸/null/2124 蔚/null/1459 憵/null/9 戗/null/11 陫/null/12 雍/null/466 獧/null/8 偤/null/11 僆/null/11 蒹/null/581 战/null/113772 陬/null/21 雎/null/128 珊/null/4095 健/null/18841 僇/null/8 蒺/null/23 蔜/null/11 戙/null/10 陭/null/17 雏/null/1237 獩/null/10 珋/null/8 僈/null/20 蒻/null/12 蔝/null/8 憸/null/47 戚/null/16 珌/null/14 薀/null/14 戛/null/40 陯/null/7 珍/null/15526 偨/null/10 僊/null/17 蔟/null/11 憺/null/19 薁/null/6 獬/null/18 偩/null/6 僋/null/10 蔠/null/10 薂/null/7 雒/null/18 獭/null/192 珏/null/26 偪/null/17 陱/null/5 蒿/null/63 蔡/null/20290 憼/null/7 薃/null/11 技/null/54857 雓/null/11 珐/null/37 偫/null/9 薄/null/6434 戟/null/165 抁/null/10 陲/null/215 雔/null/9 獯/null/8 珑/null/1106 偬/null/204 僎/null/24 憾/null/7396 薅/null/14 戠/null/13 雕/null/105 珒/null/27 偭/null/10 像/null/243002 薆/null/4 蔤/null/8 憿/null/14 戡/null/86 抃/null/9 陴/null/25 珓/null/14 偮/null/27 薇/null/2312 陵/null/5046 雗/null/9 珔/null/17 偯/null/17 獳/null/5 戢/null/50 抄/null/7036 陶/null/4648 雘/null/9 偰/null/19 蔧/null/19 薉/null/7 戣/null/6 陷/null/8555 珖/null/6 僓/null/15 蔨/null/12 戤/null/10 抆/null/12 雚/null/10 珗/null/78 偲/null/23 僔/null/11 蔩/null/6 薋/null/7 戥/null/14 抇/null/14 獶/null/12 珘/null/13 偳/null/9 蔪/null/7 抈/null/13 珙/null/11 僖/null/24 蔫/null/269 薍/null/9 抉/null/1423 雝/null/9 珚/null/10 僗/null/15 把/null/197579 陼/null/9 珛/null/8 偶/null/20103 蔬/null/541 薎/null/9 雟/null/10 珜/null/7 偷/null/19 薏/null/234 截/null/8368 抌/null/14 陾/null/6 雠/null/48 珝/null/6 僚/null/1776 蔮/null/7 薐/null/16 戫/null/8 雡/null/10 靃/null/11 珞/null/94 瑀/null/78 僛/null/10 蔯/null/16 戬/null/14 抎/null/19 獽/null/11 瑁/null/31 蔰/null/9 戭/null/61 抏/null/8 獾/null/16 珠/null/7587 偻/null/28 瑂/null/12 僝/null/10 蔱/null/12 戮/null/557 獿/null/8 兀/null/463 抑/null/4322 雥/null/7 靇/null/18 瑄/null/1183 允/null/5483 薕/null/11 抒/null/1861 珣/null/147 僠/null/5 薖/null/11 抓/null/37600 偾/null/23 瑆/null/8 元/null/100523 抔/null/19 雨/null/35918 珥/null/28 偿/null/3388 兄/null/89901 戳/null/1237 投/null/94384 雩/null/243 靋/null/22 充/null/29996 蔷/null/791 薙/null/42 戴/null/12139 抖/null/3140 雪/null/20246 珧/null/15 僣/null/9 兆/null/3268 薚/null/12 抗/null/20511 僤/null/7 蔹/null/18 薛/null/2218 折/null/682 珨/null/18 瑊/null/14 先/null/172122 蔺/null/433 薜/null/48 户/null/12704 珩/null/67 僦/null/25 光/null/145520 蔻/null/129 薝/null/9 抚/null/2602 珪/null/102 僧/null/3158 蔼/null/674 薞/null/8 抛/null/5467 雯/null/4996 珫/null/13 瑍/null/7 克/null/1618 蔽/null/1312 戺/null/10 蘁/null/19 雰/null/52 青/null/44152 瑎/null/15 僩/null/11 瑏/null/5 蔾/null/8 薠/null/8 雱/null/336 靓/null/386 班/null/74297 僪/null/8 免/null/48015 薡/null/10 挀/null/34 瑐/null/7 薢/null/9 戽/null/80 抟/null/58 持/null/95656 瑑/null/11 僬/null/11 薣/null/15 戾/null/318 蘅/null/26 抠/null/642 挂/null/1026 雳/null/6396 珰/null/33 僭/null/43 薤/null/9 房/null/30239 抡/null/85 挃/null/17 靖/null/5514 僮/null/165 兑/null/771 抢/null/9746 雵/null/15 珲/null/64 瑔/null/12 僯/null/36 零/null/15588 靘/null/20 瑕/null/1010 僰/null/10 薧/null/10 蘉/null/17 雷/null/24053 静/null/33948 珴/null/9 兔/null/6103 薨/null/50 护/null/38012 雸/null/7 珵/null/9 瑗/null/65 兕/null/13 报/null/125240 指/null/123022 雹/null/100 靛/null/104 珶/null/8 僳/null/12 兖/null/63 薪/null/7623 蘌/null/8 挈/null/43 雺/null/16 瑙/null/178 按/null/38098 珸/null/8 瑚/null/471 僵/null/1546 抨/null/639 非/null/128617 瑛/null/1462 僶/null/10 抩/null/7 挋/null/9 雽/null/19 珺/null/35 瑜/null/6320 僸/null/5 抪/null/16 挌/null/12 雾/null/6860 靠/null/28286 党/null/60 瓀/null/5 薮/null/130 披/null/5255 挍/null/11 雿/null/10 靡/null/779 珼/null/14 瑞/null/20193 薯/null/2027 蘑/null/73 抬/null/5618 挎/null/35 面/null/11155 珽/null/39 韄/null/8 瑟/null/2931 瓁/null/9 兜/null/1756 抭/null/29 挏/null/12 韅/null/15 僻/null/920 瓂/null/7 净/null/11522 薱/null/17 抮/null/11 挐/null/15 珿/null/8 瓃/null/63 抯/null/18 挑/null/18981 靥/null/621 韇/null/12 瑢/null/48 僽/null/13 兟/null/24 薳/null/10 抰/null/8 瓅/null/15 薴/null/30 抱/null/34049 挓/null/143 僾/null/7 挔/null/5 薵/null/17 蘗/null/17 僿/null/16 凄/null/60 薶/null/14 蘘/null/14 抳/null/8 挕/null/10 革/null/10254 兢/null/525 凅/null/9 薷/null/10 蘙/null/15 抴/null/484 挖/null/6500 靪/null/9 瑧/null/59 准/null/9958 薸/null/9 抵/null/19 薹/null/9 蘛/null/12 抶/null/7 靬/null/16 韎/null/9 瓋/null/15 入/null/167507 凈/null/77 蘜/null/18 韏/null/12 凉/null/8615 抸/null/11 挚/null/2147 靮/null/8 韐/null/13 凊/null/92 抹/null/8447 蚀/null/1263 挛/null/95 全/null/207034 凋/null/1495 薽/null/9 蘟/null/11 蚁/null/23 挜/null/11 靰/null/6 凌/null/118 薾/null/45 蘠/null/9 抻/null/23 蚂/null/3666 挝/null/17 瑭/null/23 蘡/null/5 薿/null/5 押/null/1668 挞/null/80 掀/null/1067 靲/null/10 韔/null/6 瑮/null/76 八/null/85474 凎/null/49 抽/null/17572 挟/null/760 掁/null/25 靳/null/114 韕/null/7 公/null/195727 减/null/18369 蘣/null/10 抾/null/29 蚅/null/7 挠/null/515 掂/null/63 瑰/null/7583 瓒/null/92 六/null/71823 凐/null/41 蘤/null/6 抿/null/45 蚆/null/16 挡/null/10 靴/null/386 韖/null/13 瑱/null/25 兮/null/18079 凑/null/3466 蘥/null/8 蚇/null/10 挢/null/28 韗/null/10 蘦/null/18 挣/null/2985 掅/null/47 靶/null/1174 韘/null/10 瑳/null/17 瓕/null/11 兰/null/32884 蘧/null/10 挤/null/6394 靷/null/10 瓖/null/19 共/null/89634 凔/null/12 蚊/null/3177 挥/null/20429 掇/null/62 靸/null/36 瑵/null/17 瓗/null/20 蘩/null/12 蚋/null/41 瑶/null/1155 瓘/null/11 关/null/222896 蘪/null/11 蚌/null/228 挦/null/6 授/null/30016 靺/null/11 瑷/null/49 瓙/null/12 兴/null/105059 凗/null/13 蚍/null/9 掉/null/75299 靻/null/11 兵/null/44572 蚎/null/5 凘/null/7 蘬/null/7 挨/null/2248 掊/null/10 靼/null/106 瑹/null/15 瓛/null/11 其/null/317897 顁/null/4 挩/null/16 靽/null/11 韟/null/21 瓜/null/11982 具/null/45052 瓝/null/5 蘮/null/19 蚐/null/13 挪/null/1796 掌/null/19080 靾/null/7 典/null/30356 畀/null/96 凛/null/602 蚑/null/9 挫/null/3156 掍/null/10 靿/null/11 韡/null/24 瑼/null/20 顃/null/7 瓞/null/19 兹/null/176 挬/null/12 掎/null/9 瑽/null/9 顄/null/10 瓟/null/15 顅/null/5 凝/null/5527 挭/null/14 掏/null/1682 韣/null/9 瑾/null/534 瓠/null/58 养/null/36306 凞/null/13 剀/null/30 蘱/null/8 蚓/null/366 掐/null/328 瑿/null/10 瓡/null/13 兼/null/9879 剁/null/187 蘲/null/12 蚔/null/8 振/null/15639 掑/null/16 韥/null/13 瓢/null/774 兽/null/8572 畅/null/4502 几/null/3882 剂/null/4489 蘳/null/13 蚕/null/9 排/null/61011 韦/null/2372 顈/null/10 瓣/null/806 凡/null/20171 剃/null/2307 蘴/null/31 蚖/null/24 韧/null/645 顉/null/13 瓤/null/15 韨/null/5 畇/null/14 蘵/null/11 蚗/null/9 挲/null/31 掔/null/97 顊/null/7 瓥/null/8 畈/null/18 蘶/null/39 蚘/null/10 挳/null/35 韩/null/7912 瓦/null/5660 蚙/null/6 挴/null/54 掖/null/56 韪/null/40 凤/null/218326 剆/null/7 蘸/null/41 蚚/null/15 韫/null/22 瓨/null/16 畋/null/20 蘹/null/9 挶/null/28 掘/null/1492 韬/null/721 界/null/78850 蚜/null/106 韭/null/144 蘻/null/6 剉/null/43 蚝/null/9 挸/null/7 顐/null/13 削/null/2273 蘼/null/17 蚞/null/12 挹/null/133 蜀/null/1132 顑/null/19 掜/null/5 畎/null/18 挺/null/5478 蜁/null/24 韰/null/7 瓬/null/9 畏/null/2427 剌/null/268 蘾/null/12 挻/null/33 蜂/null/5697 掝/null/8 韱/null/16 凫/null/27 前/null/339595 蚡/null/7 挼/null/9 蜃/null/235 掞/null/55 搀/null/103 瓮/null/11 剎/null/2698 蚢/null/18 挽/null/76 蜄/null/6 掟/null/10 搁/null/1172 音/null/170924 瓯/null/89 凭/null/10573 蚣/null/380 蜅/null/10 掠/null/1648 搂/null/727 剐/null/60 蚤/null/979 韵/null/6118 顗/null/41 畔/null/2389 凯/null/11739 剑/null/30674 蚥/null/12 蜇/null/80 探/null/14221 凰/null/211767 剒/null/9 蜈/null/364 掣/null/115 搅/null/1698 韶/null/608 蚧/null/10 蜉/null/86 掤/null/61 瓴/null/11 剔/null/486 蚨/null/10 蜊/null/14 接/null/137368 韸/null/10 瓵/null/23 凳/null/1473 剕/null/16 蚩/null/50 蜋/null/20 韹/null/10 瓶/null/15600 留/null/70864 剖/null/1418 蚪/null/196 蜌/null/11 控/null/32500 搉/null/19 韺/null/15 顜/null/9 瓷/null/760 畚/null/65 凵/null/9 蜍/null/360 顝/null/8 畛/null/18 凶/null/1803 蚬/null/28 蜎/null/16 推/null/64630 搊/null/17 飁/null/7 畜/null/1010 掩/null/4122 搋/null/8 韽/null/12 顟/null/16 飂/null/8 凸/null/1661 剚/null/11 措/null/5145 搌/null/27 韾/null/27 顠/null/13 瓻/null/11 凹/null/1195 痀/null/13 蚯/null/359 蜑/null/15 掫/null/12 畟/null/8 出/null/1557 痁/null/21 剜/null/40 蚰/null/17 蜒/null/157 掬/null/208 搎/null/10 瓽/null/14 击/null/51164 痂/null/55 蚱/null/678 蜓/null/514 掭/null/8 搏/null/1171 顣/null/7 瓾/null/14 剞/null/10 勀/null/10 掮/null/37 搐/null/44 顤/null/9 瓿/null/16 函/null/10317 痄/null/8 剟/null/7 掯/null/11 畣/null/10 病/null/38013 勂/null/10 蚳/null/19 蜕/null/614 掰/null/2800 搒/null/7 飉/null/21 畤/null/15 凿/null/459 剡/null/14 勃/null/3134 蚴/null/13 掱/null/25 搓/null/806 略/null/23410 症/null/448 剢/null/12 蚵/null/670 蜗/null/1411 搔/null/626 畦/null/123 痈/null/22 蚶/null/10 蜘/null/1355 掳/null/351 搕/null/34 顩/null/14 飋/null/9 飌/null/5 痉/null/113 蚷/null/13 蜙/null/9 掴/null/102 顪/null/9 痊/null/570 蚸/null/22 蜚/null/33 痋/null/14 剥/null/2546 勇/null/21693 蚹/null/15 蜛/null/10 搘/null/12 风/null/182757 番/null/9352 痌/null/20 蚺/null/18 蜜/null/8152 掷/null/1276 痍/null/84 剧/null/34177 勉/null/7079 蚻/null/22 掸/null/18 搚/null/14 飐/null/12 畬/null/75 痎/null/14 蚼/null/39 蜞/null/21 螀/null/19 搛/null/16 飑/null/10 痏/null/11 剩/null/100 勋/null/491 蚽/null/13 掺/null/312 螁/null/16 搜/null/1237 飒/null/188 剪/null/7487 蚾/null/9 蜠/null/7 螂/null/3200 飓/null/66 痐/null/36 剫/null/14 勍/null/13 蚿/null/10 蜡/null/18 掼/null/21 螃/null/1130 搞/null/30263 顲/null/7 飔/null/14 畯/null/41 痑/null/7 剬/null/12 蜢/null/746 掽/null/13 搟/null/11 飕/null/95 痒/null/51 剭/null/9 蜣/null/14 掾/null/9 螅/null/21 搠/null/18 撂/null/100 飖/null/18 蜤/null/15 搡/null/15 页/null/14018 飗/null/10 螇/null/5 畲/null/74 痔/null/409 副/null/14767 蜥/null/563 搢/null/31 撄/null/18 顶/null/18957 飘/null/11252 痕/null/5113 勒/null/10656 蜦/null/7 螈/null/51 搣/null/10 撅/null/32 顷/null/1803 飙/null/4474 畴/null/635 勓/null/6 蜧/null/11 螉/null/8 搤/null/18 痗/null/16 割/null/7806 蜨/null/11 搥/null/272 撇/null/2069 顸/null/108 痘/null/825 蜩/null/7 搦/null/14 项/null/39517 畷/null/17 勖/null/13 蜪/null/8 搧/null/370 撉/null/15 顺/null/44024 畸/null/662 痚/null/18 融/null/6562 搨/null/14 撊/null/7 须/null/565 畹/null/56 痛/null/38864 勘/null/933 蜬/null/7 撋/null/28 顼/null/15 飞/null/71452 蜭/null/9 螏/null/8 顽/null/5538 食/null/22222 痝/null/14 剸/null/11 勚/null/11 蜮/null/17 螐/null/6 搪/null/766 撌/null/6 顾/null/23773 痞/null/2959 螑/null/10 搫/null/11 顿/null/10055 畽/null/14 痟/null/40 剺/null/17 蜰/null/11 螒/null/7 搬/null/12118 畾/null/28 剻/null/11 蜱/null/18 螓/null/17 搭/null/13371 剼/null/5 畿/null/43 痡/null/11 癃/null/11 蜲/null/17 螔/null/14 搮/null/16 饇/null/8 痢/null/146 剽/null/249 募/null/2824 十/null/222525 蜳/null/7 搯/null/19 撑/null/6444 痣/null/256 搰/null/33 撒/null/4790 痤/null/21 剿/null/401 千/null/182 蜴/null/573 螖/null/12 飧/null/27 蜵/null/10 螗/null/13 飨/null/735 痦/null/9 癈/null/162 卅/null/1428 搳/null/27 撕/null/3658 痧/null/174 勤/null/7587 蜷/null/14 搴/null/21 撖/null/9 螚/null/5 痨/null/34 升/null/328 蜸/null/9 搵/null/87 撗/null/34 饎/null/10 螛/null/7 撘/null/54 痪/null/424 癌/null/2059 午/null/33188 蜺/null/10 螜/null/7 搷/null/24 撙/null/19 饐/null/14 痫/null/25 卉/null/421 蜻/null/535 螝/null/7 半/null/69801 蜼/null/11 搹/null/23 蠀/null/11 痭/null/17 螟/null/52 携/null/4474 蠁/null/8 撜/null/59 饓/null/8 癐/null/11 卌/null/59 蜾/null/12 蠂/null/24 撝/null/11 饔/null/13 痯/null/9 勫/null/6 卍/null/307 蜿/null/220 蠃/null/13 撞/null/11534 攀/null/1908 饕/null/329 华/null/260565 搽/null/29 攁/null/16 饖/null/14 痰/null/255 协/null/23872 螣/null/10 撠/null/10 痱/null/49 癓/null/6 螤/null/13 搿/null/11 攃/null/12 饘/null/6 痲/null/501 勯/null/7 卑/null/3487 撢/null/29 飶/null/13 饙/null/9 痳/null/35 勰/null/28 卒/null/5266 蠈/null/9 痴/null/7565 癖/null/446 卓/null/3719 蠉/null/8 撤/null/3569 饛/null/10 痵/null/9 癗/null/12 蠊/null/17 攇/null/9 飹/null/6 痶/null/5 单/null/116886 蠋/null/120 撦/null/8 痷/null/19 癙/null/15 勴/null/14 卖/null/65227 螪/null/11 蠌/null/10 攉/null/18 飺/null/11 痸/null/7 癚/null/7 南/null/77470 螫/null/244 痹/null/57 螬/null/14 撩/null/411 饟/null/12 癜/null/11 勷/null/14 螭/null/8 攌/null/13 攍/null/5 螮/null/5 痻/null/9 駂/null/16 博/null/39094 饡/null/8 痼/null/40 駃/null/13 癞/null/164 螯/null/63 痽/null/9 勺/null/145 卜/null/1371 螰/null/10 撬/null/115 攎/null/12 痾/null/72 癠/null/11 盂/null/52 蠓/null/40 播/null/26108 饤/null/7 痿/null/36 勼/null/16 卞/null/132 螲/null/12 撮/null/370 攐/null/11 饥/null/663 駇/null/7 盄/null/14 螳/null/340 蠕/null/121 饦/null/10 癣/null/88 勾/null/4383 盅/null/136 占/null/4124 参/null/6 螴/null/10 蠖/null/6 撰/null/2041 攒/null/9 蠗/null/5 螵/null/5 駉/null/5 饧/null/8 勿/null/9734 盆/null/2519 卡/null/90309 撱/null/9 攓/null/15 饨/null/111 卢/null/3680 饩/null/6 駋/null/12 盈/null/4818 卣/null/6 螶/null/10 攕/null/17 饪/null/446 駌/null/13 盉/null/12 卤/null/157 叆/null/32 螷/null/9 蠙/null/12 饫/null/26 駍/null/8 益/null/28706 叇/null/31 螸/null/15 撵/null/69 攗/null/10 饬/null/51 駎/null/12 卦/null/1663 又/null/249806 螹/null/12 蠛/null/8 攘/null/410 饭/null/19113 駏/null/12 癪/null/10 卧/null/10231 叉/null/4792 螺/null/2675 蠜/null/10 撷/null/644 饮/null/9855 癫/null/324 盍/null/53 蠝/null/9 撸/null/27 饯/null/232 盎/null/587 及/null/193509 螼/null/10 袀/null/7 饰/null/6526 盏/null/1887 友/null/214814 螽/null/26 撺/null/17 袁/null/3152 饱/null/6673 駓/null/7 盐/null/2415 双/null/57210 螾/null/7 蠠/null/10 袂/null/1546 饲/null/1829 癯/null/9 监/null/9152 卫/null/26635 反/null/114332 蠡/null/48 撼/null/1502 袃/null/17 斀/null/13 盒/null/4860 卬/null/91 蠢/null/4049 撽/null/70 袄/null/37 斁/null/14 攠/null/6 饴/null/145 駖/null/45 盓/null/15 袅/null/42 饵/null/953 駗/null/7 卮/null/19 蠤/null/10 袆/null/11 攡/null/10 蠥/null/5 饶/null/3025 盔/null/680 卯/null/883 发/null/13606 斄/null/6 饷/null/162 印/null/50702 蠦/null/20 袈/null/65 盖/null/20590 危/null/15900 袉/null/16 癵/null/15 盗/null/9387 卲/null/49 叔/null/5047 攥/null/43 文/null/651140 饺/null/1101 駜/null/7 盘/null/203 即/null/84346 蠩/null/8 袋/null/8689 攦/null/13 却/null/112237 取/null/119840 蠪/null/21 袌/null/13 癸/null/647 盚/null/14 卵/null/1907 受/null/116232 蠫/null/10 袍/null/3895 饼/null/5596 癹/null/13 盛/null/11909 变/null/122633 蠬/null/7 袎/null/6 斋/null/10140 饽/null/15 卷/null/6417 叙/null/4193 斌/null/3717 盝/null/5 饾/null/7 登/null/32345 卸/null/3897 蠮/null/9 攫/null/176 饿/null/3346 着/null/210770 叛/null/3913 蠯/null/15 袑/null/10 白/null/104398 盟/null/13792 卺/null/15 睁/null/2223 蠰/null/14 袒/null/580 攭/null/13 駣/null/6 百/null/64888 袓/null/148 駤/null/12 癿/null/14 驆/null/11 卼/null/14 呀/null/44977 蠲/null/20 攮/null/10 斐/null/1368 駥/null/12 睄/null/10 叟/null/183 呁/null/12 蠳/null/12 袕/null/9 支/null/92264 斑/null/2757 驈/null/8 睅/null/21 袖/null/3706 斒/null/10 駧/null/6 驉/null/17 卿/null/3658 睆/null/7 叡/null/4555 呃/null/1408 蠵/null/7 袗/null/12 斓/null/83 盥/null/278 睇/null/123 袘/null/7 攲/null/14 斔/null/9 駩/null/15 盦/null/55 口/null/88727 呅/null/35 蠷/null/11 袙/null/12 攳/null/14 駪/null/17 古/null/51625 呆/null/209 斖/null/8 睊/null/25 句/null/41088 呇/null/17 蠸/null/8 袚/null/8 斗/null/5641 駬/null/12 驎/null/25 盩/null/13 睋/null/10 另/null/83262 呈/null/4717 蠹/null/466 袛/null/20 收/null/71165 睌/null/23 袜/null/1401 料/null/84954 驐/null/8 睍/null/11 叨/null/340 告/null/153380 攸/null/769 盬/null/11 睎/null/12 叩/null/1059 蠼/null/18 改/null/128407 斛/null/79 驒/null/36 盭/null/19 蠽/null/10 袟/null/7 褁/null/7 斜/null/4875 驓/null/10 目/null/157966 睐/null/366 只/null/125 蠾/null/10 攻/null/33870 褂/null/47 斝/null/6 斞/null/5 昀/null/628 驔/null/10 盯/null/1210 睑/null/82 叫/null/100049 蠿/null/8 袡/null/11 盰/null/12 睒/null/42 召/null/7837 呎/null/739 袢/null/15 攽/null/9 斟/null/893 昂/null/3527 駴/null/11 驖/null/12 盱/null/17 叭/null/8189 呏/null/14 放/null/126684 褅/null/9 斠/null/9 昃/null/100 盲/null/3315 睔/null/10 叮/null/3687 袤/null/28 政/null/134882 褆/null/7 斡/null/94 昄/null/19 駶/null/11 盳/null/9 睕/null/33 可/null/992842 斢/null/12 昅/null/12 駷/null/8 驙/null/17 台/null/1040 呒/null/2085 昆/null/942 直/null/125478 睖/null/13 叱/null/282 呓/null/193 袧/null/16 褉/null/147 斤/null/3032 駹/null/7 盵/null/8 史/null/43277 呔/null/26 袨/null/21 褊/null/85 斥/null/4420 昈/null/9 駺/null/7 右/null/39017 呕/null/1313 褋/null/12 昉/null/67 駻/null/12 盷/null/34 睙/null/12 呖/null/17 袪/null/64 斧/null/1531 昊/null/262 駼/null/6 驞/null/11 相/null/224206 髀/null/16 睚/null/29 叵/null/54 呗/null/265 被/null/197413 斨/null/11 昋/null/10 駽/null/9 盹/null/91 髁/null/9 睛/null/10115 叶/null/26791 员/null/109155 袬/null/13 褎/null/13 斩/null/3220 昌/null/10225 盺/null/10 号/null/140616 呙/null/11 袭/null/4261 斪/null/8 昍/null/17 駾/null/17 驠/null/10 盻/null/66 髂/null/10 司/null/49008 褐/null/432 斫/null/42 明/null/234613 盼/null/7518 叹/null/1975 呛/null/526 袯/null/8 褑/null/10 昏/null/7761 睟/null/11 呜/null/42327 褒/null/482 断/null/50421 昐/null/29 盾/null/7771 髅/null/565 睠/null/14 叻/null/25 矂/null/16 袱/null/1270 褓/null/177 斮/null/10 昑/null/23 髆/null/13 睡/null/33220 叼/null/144 哀/null/13603 袲/null/7 褔/null/440 斯/null/54548 矄/null/5 髇/null/16 睢/null/52 叽/null/829 品/null/72832 褕/null/22 昒/null/20 督/null/23871 呠/null/14 哂/null/74 褖/null/11 新/null/334204 易/null/63406 驧/null/8 呡/null/12 哃/null/12 褗/null/7 昔/null/2715 驨/null/8 髊/null/12 睥/null/74 呢/null/217180 哄/null/284 袶/null/13 斲/null/56 哅/null/5 昕/null/403 驩/null/19 髋/null/33 睦/null/425 呣/null/124 袷/null/13 褙/null/16 斳/null/6 髌/null/11 睧/null/15 矉/null/14 呤/null/34 哆/null/127 袸/null/11 褚/null/597 髍/null/24 睨/null/172 矊/null/15 呥/null/8 哇/null/42443 袹/null/6 褛/null/103 马/null/88333 睩/null/15 呦/null/4870 哈/null/125750 斶/null/9 呧/null/5 昙/null/639 驭/null/264 睪/null/174 矌/null/32 哉/null/5742 袺/null/11 驮/null/164 髐/null/23 睫/null/246 矍/null/15 周/null/31546 斸/null/14 驯/null/925 髑/null/22 睬/null/649 矎/null/11 袼/null/11 褞/null/6 方/null/310681 要/null/1034142 昜/null/22 驰/null/3248 睭/null/323 矏/null/14 袽/null/18 褟/null/105 覂/null/13 昝/null/108 驱/null/12 髓/null/1963 睮/null/7 矐/null/13 呫/null/10 响/null/49816 袾/null/13 斻/null/11 覃/null/74 暀/null/12 驲/null/15 睯/null/8 褡/null/57 星/null/128833 驳/null/11 呬/null/13 哎/null/5596 褢/null/12 施/null/26632 哏/null/5 覅/null/8 映/null/13347 暂/null/14391 驴/null/2440 褣/null/7 覆/null/13711 昡/null/10 驵/null/8 矔/null/10 斿/null/15 昢/null/6 暄/null/175 驶/null/5987 高/null/251576 矕/null/115 呯/null/12 哑/null/1575 褥/null/82 驷/null/168 呰/null/16 哒/null/239 褦/null/14 暆/null/5 昤/null/12 驸/null/19 矗/null/387 呱/null/1165 哓/null/22 褧/null/14 春/null/40107 暇/null/1397 驹/null/637 呲/null/40 哔/null/1337 昦/null/9 驺/null/14 髜/null/13 矘/null/49 味/null/42200 哕/null/9 褩/null/8 昧/null/3204 驻/null/5707 矙/null/17 呴/null/32 哖/null/53 褪/null/629 昨/null/27059 暊/null/12 驼/null/2716 呵/null/99062 哗/null/225 褫/null/55 褬/null/5 暋/null/45 驽/null/174 髟/null/8 睹/null/3740 魁/null/2648 矛/null/6355 呶/null/30 暌/null/30 驾/null/7898 魂/null/9961 矜/null/588 呷/null/241 哙/null/31 褭/null/22 昫/null/19 暍/null/35 驿/null/527 髡/null/23 魃/null/23 呸/null/750 褮/null/11 睼/null/11 矞/null/15 础/null/6876 褯/null/12 昭/null/13816 睽/null/334 魄/null/2040 呺/null/25 硁/null/13 哜/null/15 褰/null/18 昮/null/8 暐/null/376 髣/null/16 睾/null/16 魅/null/5188 矠/null/6 呻/null/2076 哝/null/64 褱/null/17 是/null/3200626 暑/null/15910 睿/null/868 魆/null/9 呼/null/24343 哞/null/297 啀/null/18 覕/null/8 魇/null/221 矢/null/2250 命/null/87293 哟/null/4049 啁/null/61 昱/null/3081 髦/null/295 魈/null/35 矣/null/5225 呾/null/9 硅/null/28 哠/null/29 褴/null/77 覗/null/10 髧/null/11 魉/null/969 呿/null/9 啃/null/807 褵/null/17 昲/null/11 暔/null/15 魊/null/12 知/null/434311 啄/null/1030 褶/null/61 昳/null/14 暕/null/9 魋/null/16 硈/null/14 啅/null/7 褷/null/16 昴/null/176 暖/null/59 魌/null/10 矧/null/16 硉/null/15 哤/null/6 商/null/59657 矨/null/5 覛/null/7 昵/null/29 暗/null/24382 髫/null/12 魍/null/50 硊/null/10 哥/null/60956 昶/null/706 髬/null/9 矩/null/3275 哦/null/25127 啈/null/12 覝/null/15 暙/null/12 髭/null/18 魏/null/3872 硌/null/15 哧/null/77 矫/null/1042 硍/null/9 哨/null/1492 啊/null/164734 覞/null/20 昹/null/10 言/null/136534 髯/null/75 魑/null/60 矬/null/130 硎/null/9 哩/null/15463 啋/null/19 褼/null/15 覟/null/9 昺/null/20 魒/null/14 短/null/23341 哪/null/93877 褽/null/24 暝/null/184 髱/null/11 矮/null/3071 硐/null/110 哫/null/12 啍/null/33 褾/null/7 昼/null/874 最/null/335527 髲/null/21 魔/null/42586 啎/null/27 覢/null/5 昽/null/9 訄/null/45 暟/null/21 朁/null/20 髳/null/12 魕/null/12 矰/null/8 硒/null/16 哭/null/16491 覣/null/11 显/null/46026 暠/null/14 魖/null/15 矱/null/11 覤/null/8 暡/null/12 矲/null/13 哮/null/244 啐/null/216 訇/null/29 朄/null/11 髶/null/10 石/null/37521 硕/null/20230 啑/null/14 朅/null/24 髷/null/15 魙/null/34 硖/null/17 啒/null/12 硗/null/8 哱/null/7 髹/null/21 矶/null/667 哲/null/15596 月/null/177519 髺/null/13 矷/null/11 硙/null/9 哳/null/10 啕/null/83 暧/null/917 有/null/2289333 髻/null/95 啖/null/25 暨/null/2209 朊/null/31 髼/null/6 矸/null/33 硚/null/20 暩/null/6 朋/null/85775 髽/null/9 魟/null/19 矹/null/17 暪/null/39 髾/null/9 魠/null/38 矺/null/9 哷/null/11 覭/null/12 服/null/71299 魡/null/9 矻/null/27 鯃/null/15 硝/null/601 哸/null/7 覮/null/9 鯄/null/5 訑/null/7 矼/null/11 硞/null/39 朏/null/5 哺/null/618 磁/null/25440 啜/null/255 暮/null/4284 朐/null/8 矾/null/29 硠/null/17 哻/null/8 嗀/null/5 暯/null/7 魤/null/11 矿/null/1939 鯆/null/10 哼/null/2911 磃/null/6 磄/null/5 暰/null/11 朒/null/9 硢/null/11 哽/null/226 朓/null/19 魦/null/9 鯈/null/15 磅/null/958 嗂/null/9 暲/null/9 朔/null/823 魧/null/17 哿/null/20 啡/null/6641 嗃/null/9 朕/null/479 硥/null/10 嗄/null/111 覶/null/7 磈/null/8 嗅/null/362 暴/null/29856 磉/null/10 啤/null/1619 暵/null/15 朗/null/5388 磊/null/1692 啥/null/34124 覹/null/13 朘/null/18 魬/null/12 硩/null/11 磋/null/983 啦/null/177091 嗈/null/489 暷/null/13 硪/null/9 磌/null/14 啧/null/489 嗉/null/27 訞/null/10 暸/null/772 硫/null/797 磍/null/14 暹/null/71 誁/null/6 望/null/155460 硬/null/54667 磎/null/6 嗋/null/7 暺/null/10 魰/null/12 硭/null/20 磏/null/9 啪/null/9800 嗌/null/13 暻/null/10 誂/null/10 朝/null/23108 魱/null/21 鯓/null/16 确/null/10 嗍/null/12 覾/null/7 誃/null/15 啬/null/202 暽/null/10 期/null/168934 极/null/20 硰/null/14 啭/null/46 嗏/null/15 暾/null/150 朠/null/8 硱/null/6 啮/null/26 嗐/null/65 朡/null/12 枃/null/11 魵/null/9 磔/null/12 嗑/null/90 朢/null/15 构/null/10 魶/null/11 磕/null/384 朣/null/11 枅/null/8 鯙/null/20 啰/null/25473 嗒/null/62 枆/null/5 訧/null/35 誉/null/6039 鯚/null/7 嗓/null/684 誊/null/83 枇/null/57 嗔/null/367 鯜/null/5 誋/null/10 朦/null/1589 嗕/null/8 枉/null/3660 魻/null/14 啴/null/9 嗖/null/254 鯞/null/5 木/null/39692 魼/null/11 硹/null/13 鱀/null/11 磛/null/12 啵/null/153 訬/null/7 枋/null/271 魽/null/47 鱁/null/16 啶/null/14 誏/null/95 未/null/97286 枌/null/11 魾/null/12 鯠/null/9 啷/null/120 嗙/null/229 末/null/20573 枍/null/15 硻/null/8 磝/null/9 啸/null/1806 本/null/353034 枎/null/7 硼/null/66 鱄/null/22 磞/null/24 祀/null/215 嗛/null/8 訰/null/8 札/null/15 磟/null/8 祁/null/588 嗜/null/1520 磠/null/5 誓/null/6960 朮/null/1062 析/null/16630 硾/null/9 鱆/null/34 啻/null/189 祂/null/4637 嗝/null/192 鯥/null/5 枑/null/5 术/null/65266 硿/null/16 磡/null/12 啼/null/1092 噀/null/18 枒/null/24 磢/null/9 啽/null/18 祄/null/9 嗟/null/200 誖/null/8 朱/null/67 枓/null/37 鯦/null/9 啾/null/675 祅/null/16 噂/null/18 枔/null/5 啿/null/13 祆/null/35 嗡/null/876 朳/null/11 枕/null/2303 鱊/null/14 磥/null/10 祇/null/1847 嗢/null/9 誙/null/9 朴/null/370 鱋/null/11 祈/null/3076 嗣/null/274 朵/null/8005 林/null/116983 鱌/null/22 祉/null/763 嗤/null/690 噆/null/22 訹/null/11 鱍/null/7 磨/null/7481 祊/null/11 嗥/null/29 枘/null/14 鯬/null/8 鱎/null/10 磩/null/8 祋/null/9 嗦/null/300 噈/null/6 枙/null/8 磪/null/20 祌/null/20 噉/null/66 噊/null/5 朸/null/20 枚/null/1993 鱐/null/7 嗨/null/6622 朹/null/5 磬/null/48 祎/null/25 訾/null/29 机/null/470 果/null/324143 磭/null/9 祏/null/10 噌/null/50 訿/null/5 朻/null/17 枝/null/5783 嗫/null/85 朼/null/13 枞/null/19 栀/null/44 祑/null/13 噎/null/927 朽/null/1019 枟/null/10 鱕/null/7 祒/null/10 朾/null/11 祓/null/10 朿/null/22 謆/null/11 磲/null/38 祔/null/17 嗯/null/50941 謇/null/18 枢/null/17300 磳/null/25 謈/null/15 枣/null/303 栅/null/1733 鱙/null/9 磴/null/64 祖/null/14208 誧/null/22 鯸/null/10 祗/null/86 枥/null/51 标/null/92618 嗲/null/94 謋/null/19 栈/null/558 磷/null/48 嗳/null/408 栉/null/49 祚/null/103 誫/null/10 謍/null/25 枨/null/16 栊/null/21 鱞/null/9 磹/null/12 鳀/null/12 祛/null/32 噗/null/504 栋/null/4583 磺/null/214 祜/null/40 噘/null/46 謏/null/16 枪/null/10111 栌/null/6 磻/null/8 祝/null/21276 嗷/null/158 噙/null/30 枫/null/6279 鳃/null/72 噚/null/7 謑/null/10 栎/null/24 鱢/null/11 磼/null/9 鳄/null/535 神/null/119932 嗹/null/8 秀/null/20948 謒/null/12 枭/null/510 栏/null/9651 鳅/null/200 祟/null/785 嗺/null/13 私/null/21082 噜/null/1299 謓/null/5 枮/null/16 磾/null/16 鳆/null/9 祠/null/573 鳇/null/5 磿/null/5 枯/null/2803 树/null/27496 祡/null/9 嗼/null/8 秃/null/2552 噞/null/9 鱦/null/5 謕/null/8 枰/null/141 栒/null/8 祢/null/35 嗽/null/534 栓/null/216 祣/null/7 嗾/null/27 秅/null/30 囃/null/8 枲/null/7 栔/null/19 祤/null/42 嗿/null/13 秆/null/37 謘/null/11 枳/null/37 祥/null/9403 噢/null/1559 栖/null/23 噣/null/10 囆/null/6 誸/null/29 枵/null/42 栗/null/430 鳌/null/58 祧/null/13 秉/null/2094 噤/null/136 架/null/24796 栘/null/58 鳍/null/224 票/null/67677 誺/null/5 謜/null/11 枷/null/608 鳎/null/8 祩/null/11 秋/null/199 誻/null/11 鳏/null/61 祪/null/8 囊/null/2318 謞/null/17 枸/null/58 栚/null/7 鱮/null/8 鳐/null/9 祫/null/13 种/null/76 器/null/77660 囋/null/20 誽/null/7 枹/null/9 秎/null/7 噩/null/527 誾/null/21 枺/null/21 讂/null/11 栜/null/9 鳒/null/11 祭/null/3897 秏/null/37 噪/null/114 囍/null/99 枻/null/14 栝/null/20 鱱/null/7 鳓/null/16 噫/null/587 謢/null/112 讄/null/9 梀/null/11 鳔/null/25 祯/null/1499 科/null/311419 噬/null/429 祰/null/5 謣/null/17 栟/null/25 梁/null/3531 鱳/null/20 鳕/null/279 秒/null/8827 噭/null/21 栠/null/12 梂/null/19 鱴/null/10 鳖/null/1556 噮/null/9 謤/null/15 讆/null/10 校/null/192451 梃/null/18 鱵/null/10 鳗/null/354 祲/null/9 謥/null/7 祳/null/11 秕/null/19 噰/null/13 囓/null/81 謦/null/11 讈/null/11 梅/null/25172 祴/null/13 秖/null/11 噱/null/800 謧/null/5 囔/null/60 梆/null/180 栥/null/13 梇/null/17 鱹/null/10 鳛/null/10 秘/null/5020 噳/null/7 栦/null/9 鳜/null/26 祷/null/2658 謪/null/11 梉/null/11 鳝/null/85 祸/null/6519 梊/null/5 囗/null/34 栨/null/21 鱼/null/49608 鳞/null/827 祹/null/14 鵀/null/16 梋/null/5 栩/null/249 鱽/null/19 鳟/null/54 祺/null/1745 鵁/null/8 秜/null/9 噶/null/487 株/null/1864 梌/null/15 秝/null/79 噷/null/15 囚/null/1091 謮/null/48 栫/null/12 鱿/null/271 祼/null/52 秞/null/14 四/null/165306 謯/null/9 鳢/null/73 祽/null/14 租/null/15048 謰/null/12 栭/null/19 梏/null/89 鳣/null/13 鵅/null/11 謱/null/5 囝/null/450 栮/null/9 梐/null/9 秠/null/12 回/null/11557 址/null/65 讔/null/7 栯/null/16 梑/null/11 穄/null/11 囟/null/13 坁/null/8 梒/null/14 鳦/null/12 因/null/326759 栱/null/171 梓/null/828 秣/null/25 噾/null/8 謵/null/5 穆/null/1169 囡/null/1183 栲/null/90 鵊/null/8 秤/null/5135 噿/null/8 穇/null/7 团/null/209 謶/null/12 讘/null/9 栳/null/28 鵋/null/10 穈/null/17 坅/null/13 謷/null/11 讙/null/26 栴/null/41 梖/null/311 秦/null/5328 囤/null/181 栵/null/11 梗/null/272 鳪/null/15 鵌/null/10 秧/null/167 穊/null/9 囥/null/88 均/null/24957 穋/null/6 謺/null/9 样/null/301165 秩/null/4115 囧/null/15 坉/null/11 謻/null/6 核/null/19 鳭/null/9 鵏/null/13 秪/null/11 秫/null/5 坊/null/2511 謼/null/10 根/null/59387 谀/null/132 梛/null/16 坋/null/11 謽/null/11 讟/null/7 谁/null/132063 秬/null/12 坌/null/17 栺/null/17 谂/null/34 梜/null/6 秭/null/10 囫/null/45 坍/null/240 计/null/137149 栻/null/9 调/null/61916 鳱/null/9 秮/null/10 穑/null/17 坎/null/2649 订/null/17148 格/null/85698 谄/null/475 鵔/null/17 积/null/20369 园/null/58048 坏/null/68 讣/null/16 栽/null/1837 谅/null/10963 椁/null/23 称/null/58681 囮/null/11 坐/null/32688 认/null/153895 栾/null/500 谆/null/290 梠/null/26 鵖/null/14 鵗/null/5 穔/null/17 坑/null/11 讥/null/841 谇/null/23 梡/null/10 鳵/null/12 困/null/738 坒/null/9 梢/null/524 椄/null/44 鵘/null/10 穖/null/23 囱/null/117 讦/null/506 谈/null/65267 梣/null/9 椅/null/5289 鳷/null/11 鵙/null/8 穗/null/2922 讧/null/42 梤/null/14 椆/null/101 鵚/null/10 穘/null/5 讨/null/108614 谊/null/16173 椇/null/31 鳹/null/9 鵛/null/9 秶/null/9 围/null/21140 让/null/166049 谋/null/6845 梦/null/71231 椈/null/11 鳺/null/11 秷/null/15 穚/null/30 囵/null/42 块/null/26543 讪/null/614 谌/null/65 梧/null/477 鳻/null/8 秸/null/9 穛/null/8 讫/null/107 谍/null/1307 梨/null/1940 椊/null/9 鳼/null/9 穜/null/20 谎/null/3890 梩/null/13 椋/null/18 鳽/null/19 鵟/null/53 秺/null/10 囷/null/11 训/null/24678 谏/null/225 梪/null/7 椌/null/10 移/null/20647 竀/null/8 坚/null/16523 议/null/103289 谐/null/2988 梫/null/12 植/null/7582 鳿/null/8 鷃/null/8 穟/null/9 囹/null/44 竁/null/11 坛/null/156 讯/null/448759 谑/null/236 梬/null/10 椎/null/819 秽/null/927 固/null/13557 坜/null/6599 记/null/141428 谒/null/126 梭/null/3453 秾/null/49 鷅/null/13 坝/null/637 讱/null/10 谓/null/35793 梮/null/17 椐/null/14 坞/null/498 讲/null/77918 谔/null/37 梯/null/6264 椑/null/26 鷇/null/8 国/null/430450 坟/null/1629 埁/null/13 讳/null/704 谕/null/470 械/null/15832 椒/null/979 鷈/null/36 鵧/null/4 图/null/74216 坠/null/2681 埂/null/106 讴/null/126 谖/null/105 椓/null/7 囿/null/99 坡/null/7863 埃/null/3662 讵/null/41 谗/null/93 梲/null/13 椔/null/16 鵨/null/10 鵩/null/5 坢/null/13 讶/null/3138 谘/null/2024 梳/null/868 椕/null/16 鷋/null/18 讷/null/387 谙/null/341 梴/null/8 鷌/null/16 鷍/null/4 穧/null/19 坤/null/5638 埆/null/15 许/null/145559 谚/null/420 梵/null/1390 椗/null/18 鵫/null/6 埇/null/26 讹/null/453 谛/null/1350 立/null/158292 坦/null/8188 论/null/193909 谜/null/4124 鷎/null/9 谝/null/15 鷏/null/10 坨/null/55 讼/null/456 谞/null/7 貀/null/11 鷐/null/11 穬/null/10 坩/null/27 埋/null/4540 讽/null/2997 谟/null/218 貁/null/7 鷑/null/8 坪/null/7643 埌/null/12 设/null/125381 谠/null/20 貂/null/1076 鵰/null/1808 鷒/null/13 穮/null/22 坫/null/24 访/null/9912 谡/null/39 鵱/null/7 竑/null/368 城/null/257697 谢/null/274523 梼/null/16 貄/null/8 穰/null/10 坭/null/11 埏/null/19 谣/null/5014 貅/null/16 椟/null/37 鵳/null/8 鷕/null/9 穱/null/5 埐/null/10 谤/null/1093 梾/null/10 貆/null/7 椠/null/7 概/null/59558 鵴/null/14 坯/null/41 谥/null/17 榃/null/9 鵵/null/7 鷘/null/5 埒/null/10 谦/null/3729 榄/null/807 穴/null/3218 竖/null/1778 坱/null/14 谧/null/214 貉/null/84 穵/null/15 坲/null/7 埔/null/3889 椤/null/11 榆/null/285 鵸/null/11 鷛/null/5 究/null/99256 竘/null/10 坳/null/109 埕/null/185 谨/null/4213 貊/null/17 椥/null/12 榇/null/58 鵹/null/7 穷/null/8093 站/null/446241 坴/null/9 谩/null/350 榈/null/58 鷜/null/9 穸/null/11 坵/null/131 谪/null/163 貌/null/6659 榉/null/52 鵻/null/15 鷝/null/13 穹/null/9675 坶/null/12 埘/null/9 谫/null/7 鷞/null/11 空/null/113648 鹁/null/13 坷/null/335 埙/null/26 谬/null/3290 鵽/null/13 鷟/null/15 穻/null/18 鹂/null/375 谭/null/1504 貏/null/11 椪/null/20 鹃/null/706 竞/null/11550 筀/null/10 埚/null/29 谮/null/9 貐/null/6 榍/null/14 鵿/null/7 鷡/null/8 貑/null/5 鹄/null/132 竟/null/58426 谯/null/309 榎/null/9 鷢/null/8 鷣/null/5 穾/null/7 鹅/null/5069 章/null/391052 埜/null/15 谰/null/11 貒/null/16 椭/null/291 穿/null/24088 鹆/null/74 坻/null/150 谱/null/12240 榐/null/11 鷤/null/11 鹇/null/11 坼/null/21 筄/null/9 谲/null/410 貔/null/8 椯/null/11 榑/null/25 鹈/null/24 竣/null/416 坽/null/8 筅/null/11 域/null/12877 谳/null/16 貕/null/8 椰/null/15110 鹉/null/584 埠/null/799 谴/null/1931 榓/null/7 鹊/null/386 竤/null/54 谵/null/24 貗/null/17 椲/null/25 榔/null/1407 鷨/null/16 童/null/17987 筇/null/7 埢/null/18 谶/null/79 貘/null/56 椳/null/36 榕/null/1136 鷩/null/8 鹌/null/19 竦/null/23 筈/null/10 埣/null/9 谷/null/410 貙/null/9 椴/null/11 榖/null/58 鹍/null/7 等/null/177504 埤/null/194 貚/null/9 椵/null/6 榗/null/11 鹎/null/22 筊/null/102 埥/null/48 谹/null/17 鷬/null/10 鹏/null/2272 筋/null/6550 塈/null/12 貜/null/21 椷/null/26 榙/null/6 鷭/null/9 筌/null/103 埧/null/8 塉/null/15 谻/null/9 椸/null/7 榚/null/74 鷮/null/5 竫/null/58 谼/null/7 椹/null/13 贀/null/112 榛/null/137 鹑/null/30 筎/null/6 埩/null/19 谽/null/15 榜/null/11119 鹒/null/7 竭/null/1694 筏/null/248 塌/null/977 谾/null/8 椻/null/8 贂/null/8 鹓/null/11 竮/null/18 筐/null/260 塍/null/10 椼/null/7 榞/null/17 樀/null/8 鹔/null/11 端/null/12 筑/null/585 埬/null/9 塎/null/10 椽/null/27 鹕/null/14 筒/null/3614 埭/null/9 貣/null/7 貤/null/5 鹖/null/42 埮/null/22 贆/null/22 榠/null/16 鹗/null/45 答/null/68517 埯/null/8 塑/null/4635 貥/null/8 椿/null/159 榡/null/13 鷵/null/9 鹘/null/49 樄/null/21 鷶/null/19 鷷/null/5 鹙/null/41 策/null/25152 埱/null/6 塓/null/6 贉/null/10 榣/null/20 鹚/null/13 埲/null/11 塔/null/10107 榤/null/10 樆/null/6 筘/null/11 埳/null/6 塕/null/6 榥/null/23 樇/null/11 鹜/null/96 竷/null/12 埴/null/14 樈/null/7 鷻/null/6 鹝/null/14 筚/null/46 埵/null/212 榧/null/10 樉/null/12 鹞/null/41 竹/null/96078 黀/null/15 筛/null/603 埶/null/12 塘/null/778 榨/null/99 樊/null/345 鹟/null/16 竺/null/502 筜/null/11 塙/null/12 榩/null/8 鷽/null/19 鹠/null/32 竻/null/6 黂/null/9 筝/null/2700 埸/null/496 鷾/null/11 鹡/null/29 培/null/8712 塛/null/8 榫/null/50 樍/null/13 鷿/null/36 鹢/null/17 竽/null/317 黄/null/88187 篁/null/54 榬/null/7 鹣/null/38 筠/null/1451 基/null/81818 榭/null/110 樏/null/7 鹤/null/4863 竿/null/2741 筡/null/9 埻/null/14 塝/null/9 鹥/null/7 埼/null/89 塞/null/12591 榯/null/9 鹦/null/593 黈/null/9 筣/null/14 埽/null/11 壁/null/7434 贕/null/11 榰/null/10 鹧/null/104 黉/null/225 筤/null/14 篆/null/181 壂/null/24 榱/null/9 鹨/null/17 筥/null/15 篇/null/49397 貵/null/8 樔/null/15 鹩/null/11 榳/null/7 樕/null/180 筦/null/5 塣/null/5 鹪/null/34 壅/null/126 贙/null/15 榴/null/568 樖/null/21 鹫/null/178 黍/null/63 壆/null/63 榵/null/14 樗/null/10 鹬/null/195 黎/null/6431 篊/null/13 塥/null/7 貹/null/8 榶/null/8 樘/null/11 鹭/null/784 黏/null/2958 筩/null/9 壈/null/12 榷/null/377 黐/null/9 篌/null/26 壉/null/11 贝/null/15970 鹯/null/14 黑/null/64983 塨/null/8 贞/null/5040 榹/null/10 趀/null/8 樛/null/8 篎/null/11 负/null/43549 趁/null/4733 鹰/null/22697 筭/null/17 貾/null/9 榻/null/309 樝/null/17 黓/null/11 筮/null/23 填/null/10810 贡/null/6620 榼/null/7 檀/null/356 榽/null/5 鹲/null/14 黔/null/115 篑/null/373 财/null/17159 趄/null/17 樟/null/555 鹳/null/25 黕/null/14 筰/null/12 塭/null/31 壏/null/12 责/null/44701 榾/null/6 超/null/73305 樠/null/10 黖/null/17 筱/null/1008 篓/null/99 贤/null/17005 模/null/560 檃/null/8 篔/null/5 筲/null/23 塯/null/10 壑/null/126 败/null/40871 壒/null/5 默/null/17823 筳/null/13 篕/null/13 账/null/346 檄/null/24 塱/null/5 筴/null/21 货/null/19754 趉/null/7 檅/null/12 黚/null/10 筵/null/98 壔/null/14 质/null/53139 越/null/32466 黛/null/1352 筶/null/10 篘/null/13 壕/null/94 贩/null/4357 趋/null/5244 樥/null/10 檇/null/12 黜/null/34 筷/null/776 篙/null/39 塴/null/13 壖/null/6 贪/null/7044 趌/null/13 樦/null/6 黝/null/268 筸/null/6 篚/null/11 贫/null/3291 趍/null/9 樧/null/7 筹/null/9137 齀/null/34 塶/null/11 樨/null/57 篜/null/5 黟/null/13 齁/null/239 贬/null/1595 趎/null/8 鹾/null/14 黠/null/85 齂/null/10 篝/null/27 购/null/22348 趏/null/6 横/null/12569 檌/null/7 鹿/null/5200 黡/null/10 齃/null/13 篞/null/11 籀/null/18 壛/null/8 贮/null/268 趐/null/107 檍/null/10 齄/null/10 篟/null/20 塺/null/12 籁/null/269 贯/null/5585 趑/null/10 檎/null/9 签/null/4102 塻/null/15 壝/null/20 贰/null/2075 趒/null/33 黤/null/19 齆/null/7 篡/null/270 贱/null/5106 趓/null/10 檐/null/63 黥/null/18 篢/null/13 奀/null/15 贲/null/101 趔/null/17 樯/null/19 檑/null/8 黦/null/10 齈/null/9 篣/null/11 塽/null/39 籅/null/22 奁/null/12 贳/null/10 檒/null/7 黧/null/82 齉/null/18 塾/null/507 奂/null/81 贴/null/24507 趖/null/31 樱/null/4749 檓/null/7 篥/null/10 塿/null/14 籇/null/31 贵/null/43668 樲/null/8 檔/null/107742 黩/null/38 篦/null/13 籈/null/9 奄/null/565 贶/null/9 檕/null/14 奅/null/5 黪/null/21 齌/null/16 篧/null/9 籉/null/24 壣/null/6 贷/null/1563 樴/null/9 檖/null/6 黫/null/8 齍/null/17 壤/null/972 贸/null/3881 樵/null/1155 檗/null/31 篨/null/12 籊/null/14 奇/null/73699 费/null/73882 趛/null/7 黭/null/17 奈/null/12708 贺/null/12551 趜/null/14 檚/null/5 黮/null/9 齐/null/12418 篪/null/16 壧/null/14 奉/null/6590 贻/null/289 黯/null/1830 齑/null/10 篫/null/37 籍/null/16527 壨/null/23 奊/null/14 贼/null/4188 踀/null/11 檛/null/12 黰/null/9 奋/null/9519 贽/null/7 趟/null/2521 贾/null/1935 趠/null/11 樻/null/12 踂/null/14 欀/null/13 篮/null/20137 士/null/113982 贿/null/3044 趡/null/7 樼/null/16 踃/null/7 檞/null/14 壬/null/288 奎/null/961 樽/null/932 踄/null/9 欂/null/10 黳/null/8 篰/null/11 奏/null/27644 趣/null/49894 樾/null/6 踅/null/454 檠/null/14 欃/null/13 齖/null/8 篱/null/15 籓/null/20 壮/null/8274 樿/null/10 踆/null/9 檡/null/13 黵/null/11 篲/null/10 籔/null/7 契/null/5735 趥/null/7 踇/null/11 齘/null/8 声/null/110548 篴/null/8 奓/null/17 趧/null/11 踉/null/78 籗/null/9 奔/null/7254 踊/null/48 檤/null/12 黹/null/31 齛/null/13 壳/null/5885 奕/null/1404 檥/null/19 欈/null/6 黺/null/16 篷/null/324 壴/null/7 奖/null/23436 趪/null/9 踌/null/514 檦/null/9 欉/null/104 黻/null/23 齝/null/8 篸/null/31 籚/null/11 套/null/31711 趫/null/10 踍/null/12 黼/null/10 齞/null/8 篹/null/12 籛/null/10 壶/null/2933 奘/null/65 趬/null/11 檨/null/16 欋/null/6 趭/null/6 踏/null/10740 檩/null/11 黾/null/76 篻/null/14 壸/null/107 奚/null/335 壹/null/3679 趮/null/11 篽/null/13 糁/null/12 奜/null/23 趯/null/8 踑/null/16 檬/null/1524 篾/null/88 踒/null/11 檭/null/10 欐/null/16 齤/null/10 篿/null/12 姀/null/13 趱/null/7 踓/null/14 踔/null/5 齥/null/9 姁/null/9 籣/null/30 糅/null/10 足/null/47014 踕/null/7 欓/null/12 壾/null/9 奠/null/526 趴/null/1077 踖/null/14 姃/null/5 壿/null/9 糇/null/11 奡/null/16 趵/null/8 踗/null/15 籦/null/12 糈/null/6 奢/null/1210 趶/null/10 踘/null/8 趷/null/5 籧/null/11 姅/null/10 踙/null/9 檴/null/12 欗/null/18 齫/null/7 糊/null/10050 姆/null/7459 趸/null/12 踚/null/11 欘/null/8 糋/null/6 奥/null/10147 姇/null/11 趹/null/15 踛/null/7 檶/null/11 欙/null/11 姈/null/12 趺/null/112 踜/null/18 檷/null/9 欚/null/13 齮/null/13 糌/null/12 踝/null/284 籫/null/5 齯/null/11 姊/null/10618 趼/null/11 踞/null/211 檹/null/7 齰/null/89 始/null/72626 踟/null/48 檺/null/16 躁/null/913 齱/null/13 姌/null/7 趾/null/628 踠/null/7 殀/null/7 糐/null/10 奫/null/7 趿/null/14 殁/null/119 籯/null/11 糑/null/9 姎/null/8 踢/null/7037 檽/null/6 躄/null/237 欠/null/4705 殂/null/60 糒/null/6 奭/null/42 姏/null/7 踣/null/9 躅/null/169 次/null/236297 殃/null/809 齴/null/9 姐/null/28608 踤/null/17 躆/null/9 欢/null/16 殄/null/46 齵/null/14 糔/null/16 姑/null/8945 踥/null/7 躇/null/525 欣/null/462 米/null/18398 糕/null/5894 奰/null/10 姒/null/162 踦/null/16 躈/null/10 踧/null/4 欤/null/50 殆/null/476 籴/null/9 糖/null/4381 奱/null/24 姓/null/21573 欥/null/10 殇/null/288 齸/null/7 籵/null/12 糗/null/961 奲/null/79 委/null/29585 齹/null/9 女/null/245920 踩/null/4362 殈/null/13 齺/null/13 糙/null/779 奴/null/2456 姖/null/12 踪/null/6086 躌/null/11 欧/null/17225 殉/null/368 齻/null/27 籸/null/12 姗/null/214 踫/null/92 欨/null/11 殊/null/10621 籹/null/9 奶/null/18 姘/null/58 踬/null/26 躎/null/8 残/null/13412 籺/null/7 糜/null/242 奷/null/12 躏/null/346 殌/null/9 齾/null/12 类/null/78205 奸/null/2155 姚/null/1354 踮/null/449 躐/null/8 殍/null/8 齿/null/6149 籼/null/10 她/null/211517 姛/null/7 踯/null/166 欬/null/12 殎/null/15 籽/null/372 糟/null/7974 絁/null/11 姜/null/520 殏/null/5 欭/null/11 糠/null/98 奻/null/16 姝/null/160 踰/null/73 籿/null/7 奼/null/42 姞/null/10 婀/null/107 踱/null/232 欯/null/23 殑/null/11 好/null/860232 躔/null/10 踳/null/5 殒/null/73 奾/null/8 絅/null/12 姠/null/12 婂/null/8 欱/null/19 殓/null/60 奿/null/6 姡/null/9 婃/null/20 躖/null/13 躗/null/6 欲/null/5190 殔/null/8 絇/null/21 踵/null/210 欳/null/11 殕/null/23 婄/null/20 踶/null/8 躘/null/9 欴/null/13 殖/null/3570 姣/null/171 殗/null/17 糨/null/15 絊/null/12 姤/null/16 婆/null/17697 踸/null/7 婇/null/5 欶/null/30 姥/null/459 踹/null/750 欷/null/72 殙/null/13 糪/null/16 婈/null/9 躜/null/28 欸/null/324 殚/null/32 婉/null/3039 躝/null/44 欹/null/19 輀/null/13 殛/null/70 姨/null/1213 婊/null/585 踼/null/257 躞/null/17 輁/null/5 欺/null/8149 糬/null/58 姩/null/9 踽/null/127 躟/null/24 欻/null/14 輂/null/10 婌/null/19 踾/null/8 躠/null/11 踿/null/5 欼/null/9 氀/null/7 糮/null/13 婍/null/12 氁/null/5 殟/null/9 糯/null/287 絑/null/13 姬/null/2371 姭/null/5 款/null/14902 殠/null/9 絒/null/7 躣/null/12 躤/null/6 欿/null/7 輆/null/12 殡/null/166 氃/null/7 糱/null/13 絓/null/7 姮/null/12 婐/null/37 殢/null/11 氄/null/11 絔/null/9 婑/null/12 殣/null/7 氅/null/19 婒/null/10 氆/null/12 絖/null/9 姱/null/9 婓/null/99 姲/null/5 殥/null/11 氇/null/8 躨/null/7 輋/null/11 殦/null/8 絘/null/9 姳/null/6 婕/null/47 躩/null/19 殧/null/8 氉/null/9 糷/null/20 姴/null/6 婖/null/17 輍/null/10 姵/null/32 婗/null/17 身/null/141638 輎/null/13 姶/null/20 婘/null/10 躬/null/921 氋/null/12 絜/null/9 姷/null/12 輐/null/7 殪/null/11 系/null/4633 婚/null/22509 輑/null/8 氍/null/7 緀/null/7 婛/null/11 躯/null/1219 糽/null/16 絟/null/6 姺/null/10 緁/null/9 婜/null/7 緂/null/5 婝/null/5 殭/null/505 氏/null/6761 姻/null/3544 婞/null/5 氐/null/112 姼/null/25 嫀/null/9 民/null/211274 姽/null/38 婟/null/18 嫁/null/3977 躲/null/7443 婠/null/5 殰/null/14 絣/null/56 姾/null/9 緅/null/9 嫂/null/774 輖/null/13 氓/null/2004 姿/null/6072 緆/null/10 輗/null/9 气/null/20 婢/null/170 嫄/null/43 輘/null/9 殳/null/20 氕/null/7 殴/null/918 氖/null/55 絧/null/8 緉/null/15 輚/null/14 段/null/62173 婤/null/9 嫆/null/8 殶/null/9 氘/null/36 絩/null/19 婥/null/10 嫇/null/22 殷/null/84 氙/null/11 絪/null/9 緌/null/6 嫈/null/41 躺/null/3535 氚/null/10 絫/null/13 婧/null/12 嫉/null/750 辀/null/7 氛/null/5013 緎/null/11 嫊/null/8 辁/null/10 絭/null/10 婩/null/10 躽/null/7 輠/null/9 辂/null/23 氝/null/17 婪/null/390 嫌/null/7446 较/null/161783 沀/null/6 絮/null/1088 嫍/null/16 殽/null/7 辄/null/1153 氟/null/137 沁/null/534 絯/null/20 輣/null/7 辅/null/18716 氠/null/7 沂/null/343 輤/null/13 殿/null/3733 辆/null/8767 氡/null/49 沃/null/266 辇/null/245 氢/null/763 沄/null/12 辈/null/18029 沅/null/182 婰/null/7 嫒/null/27 辉/null/254 氤/null/41 沆/null/26 辊/null/21 氥/null/12 沇/null/9 嫔/null/34 辋/null/17 氦/null/130 沈/null/13634 婳/null/10 嫕/null/13 辌/null/11 氧/null/2453 沉/null/14364 絷/null/17 婴/null/2169 嫖/null/1018 辍/null/107 氨/null/166 沊/null/15 婵/null/462 辎/null/57 氩/null/28 沋/null/10 緛/null/10 婶/null/197 嫘/null/29 辏/null/16 絺/null/15 婷/null/2923 嫙/null/12 輮/null/10 辐/null/2841 氪/null/14 沌/null/1704 絻/null/44 婸/null/8 嫚/null/47 繀/null/5 辑/null/31881 絼/null/9 嫛/null/17 辒/null/9 沎/null/7 絽/null/20 緟/null/8 婺/null/16 繁/null/8243 嫜/null/24 输/null/52871 沏/null/41 婻/null/10 繂/null/11 嫝/null/12 輲/null/8 辔/null/44 氮/null/387 沐/null/727 絿/null/29 婼/null/15 嫞/null/10 孀/null/34 辕/null/862 氯/null/410 婽/null/32 繄/null/17 嫟/null/10 氰/null/125 嫠/null/11 輴/null/8 辖/null/1530 沓/null/22 婿/null/407 嫡/null/143 輵/null/8 辗/null/1373 氲/null/31 沔/null/13 繇/null/30 嫢/null/6 輶/null/9 辘/null/121 沕/null/9 嫣/null/631 孅/null/23 輷/null/7 辙/null/687 水/null/186822 緧/null/16 繉/null/16 辚/null/24 嫥/null/10 孇/null/6 輹/null/8 辛/null/18232 氶/null/38 沘/null/9 辜/null/3610 沙/null/23234 緪/null/7 繌/null/16 嫦/null/163 孈/null/10 永/null/61245 沚/null/147 辞/null/8835 沛/null/1788 嫨/null/10 孋/null/5 辟/null/432 沜/null/17 嫩/null/848 氻/null/32 沝/null/125 緮/null/17 繐/null/13 嫪/null/13 洀/null/5 孍/null/6 繑/null/10 嫫/null/8 沟/null/11378 洁/null/56 嫬/null/7 孎/null/14 緰/null/5 辣/null/3190 嫭/null/69 氿/null/10 没/null/638184 洃/null/21 繓/null/8 嫮/null/7 子/null/459460 洄/null/256 孑/null/114 沣/null/20 緳/null/9 沤/null/11 嫱/null/18 孓/null/76 辨/null/7746 沥/null/379 洇/null/18 繗/null/8 孔/null/8556 辩/null/13219 沦/null/2550 洈/null/23 繘/null/12 嫳/null/7 孕/null/3953 沧/null/7147 洉/null/14 緷/null/9 嫴/null/11 孖/null/22 辫/null/453 沨/null/12 洊/null/9 字/null/135740 沩/null/18 洋/null/25325 嫶/null/6 存/null/64502 沪/null/153 洌/null/48 緺/null/13 繜/null/13 嫷/null/9 孙/null/11817 沫/null/1325 洍/null/70 嫸/null/12 孚/null/287 嫹/null/10 绀/null/36 孛/null/24 辰/null/2923 沬/null/261 洎/null/22 繟/null/14 绁/null/8 孜/null/309 辱/null/5389 沭/null/10 洏/null/24 繠/null/8 绂/null/7 孝/null/6022 寀/null/15 沮/null/1277 洐/null/132 练/null/49683 寁/null/7 洑/null/14 嫽/null/14 组/null/96711 孟/null/10216 寂/null/14283 辴/null/13 沰/null/13 洒/null/433 繣/null/15 绅/null/1115 沱/null/489 细/null/41672 寄/null/25925 织/null/15287 孢/null/50 寅/null/369 河/null/22976 终/null/50989 季/null/22542 洖/null/5 密/null/33263 沴/null/17 绉/null/32 孤/null/20746 寇/null/2036 沵/null/28 洗/null/18637 繨/null/18 绊/null/1261 孥/null/60 边/null/73304 沶/null/14 洘/null/42 绋/null/12 学/null/806783 沷/null/6 洙/null/26 绌/null/64 沸/null/1101 洚/null/9 绍/null/29836 寊/null/10 油/null/52331 洛/null/7470 绎/null/399 寋/null/14 辽/null/2032 沺/null/24 经/null/282242 孩/null/80204 富/null/20968 达/null/68312 治/null/62946 洝/null/12 绐/null/20 孪/null/37 寍/null/25 辿/null/26 沼/null/613 洞/null/12858 涀/null/7 绑/null/2091 寎/null/13 沽/null/271 洟/null/9 绒/null/9 孬/null/31 沾/null/83 洠/null/9 涂/null/2883 结/null/129335 涃/null/5 寐/null/386 沿/null/5129 孮/null/10 寑/null/73 洢/null/12 涄/null/14 繲/null/26 寒/null/15884 涅/null/1382 绕/null/6808 孰/null/1286 寓/null/1803 涆/null/11 繴/null/15 绖/null/13 孱/null/36 寔/null/7 津/null/4838 繵/null/7 绗/null/11 孲/null/7 消/null/57326 繶/null/11 绘/null/6695 孳/null/62 寖/null/11 洧/null/25 涉/null/6957 繷/null/11 给/null/189973 洨/null/16 涊/null/9 繸/null/19 绚/null/597 孵/null/486 寘/null/39 涋/null/13 绛/null/119 孷/null/5 寙/null/18 洪/null/15396 涌/null/241 繺/null/11 络/null/31927 洫/null/13 涍/null/11 繻/null/10 绝/null/59291 洬/null/9 涎/null/157 绞/null/635 洭/null/23 统/null/141769 孺/null/388 罂/null/11 寝/null/12845 绠/null/7 孻/null/9 罃/null/8 寞/null/10569 局/null/24 洮/null/51 涐/null/10 绡/null/49 罄/null/115 察/null/20535 屁/null/11781 洯/null/8 涑/null/21 绢/null/200 孽/null/1137 寠/null/5 罅/null/18 层/null/22305 洰/null/10 涒/null/7 绣/null/1340 寡/null/4170 屃/null/12 洱/null/132 涓/null/665 绤/null/8 屄/null/104 洲/null/21420 涔/null/95 绥/null/237 寣/null/20 居/null/35883 洳/null/20 涕/null/1281 绦/null/18 寤/null/92 洴/null/13 继/null/28491 罊/null/12 寥/null/1016 屇/null/19 洵/null/91 涗/null/33 绨/null/19 屈/null/3806 涘/null/151 绩/null/19 屉/null/708 洷/null/7 绪/null/9713 寨/null/327 届/null/18051 洸/null/384 绫/null/479 罍/null/33 屋/null/12885 洹/null/412 涛/null/16177 洺/null/19 续/null/49681 寪/null/13 屌/null/704 活/null/125568 涝/null/31 绮/null/1467 罐/null/4182 洼/null/18 涞/null/19 渀/null/11 绯/null/237 网/null/50 屎/null/2607 洽/null/10902 涟/null/549 绰/null/1739 屏/null/5712 派/null/24951 涠/null/8 寮/null/3566 屐/null/1111 洿/null/9 涡/null/873 渃/null/20 绲/null/10 罔/null/354 寯/null/21 屑/null/2966 涢/null/10 绳/null/1650 罕/null/1513 寰/null/1184 涣/null/167 清/null/302588 寱/null/8 涤/null/210 维/null/34363 寲/null/11 屔/null/6 绵/null/4124 罗/null/488 展/null/56225 润/null/3359 绶/null/70 罘/null/19 屖/null/10 涧/null/256 绷/null/654 涨/null/5107 渊/null/3268 绸/null/309 罚/null/9363 屘/null/15 涩/null/1487 绹/null/10 罛/null/16 屙/null/47 涪/null/123 渌/null/16 绺/null/13 罜/null/14 寸/null/4930 涫/null/7 渍/null/337 绻/null/184 罝/null/27 对/null/500435 翀/null/7 涬/null/7 渎/null/337 综/null/6113 罞/null/8 寺/null/3515 翁/null/7228 绽/null/1311 罟/null/21 寻/null/36745 翂/null/18 屝/null/26 涮/null/44 渐/null/17443 绾/null/46 罠/null/10 导/null/62860 翃/null/19 属/null/41089 涯/null/6964 渑/null/27 绿/null/17990 罡/null/106 罢/null/24233 翅/null/4894 屠/null/6824 罣/null/447 寿/null/6786 屡/null/1976 峃/null/6 翇/null/10 峄/null/12 液/null/5079 渔/null/2789 罥/null/11 屣/null/67 涳/null/10 罦/null/10 翉/null/9 峆/null/31 涴/null/11 渖/null/46 罧/null/16 翊/null/411 履/null/2160 峇/null/32 涵/null/6870 渗/null/993 罨/null/8 翋/null/14 屦/null/27 峈/null/70 罩/null/3932 翌/null/187 屧/null/10 峉/null/14 涷/null/10 罪/null/26900 翍/null/7 峊/null/19 涸/null/95 渚/null/442 罫/null/6 屩/null/5 翎/null/415 峋/null/151 罬/null/16 涺/null/5 翏/null/15 屪/null/14 峌/null/13 渜/null/11 罭/null/11 涻/null/5 翐/null/6 渝/null/1336 置/null/28732 翑/null/5 峎/null/18 涽/null/12 渟/null/80 峏/null/31 涾/null/8 渠/null/465 峐/null/5 翔/null/10156 屮/null/13 涿/null/19 渡/null/8792 溃/null/1702 署/null/6918 翕/null/73 屯/null/1101 罳/null/20 峒/null/38 渣/null/1121 溅/null/321 罴/null/27 翗/null/7 山/null/131818 峓/null/46 渤/null/125 溆/null/10 峔/null/12 渥/null/315 溇/null/9 翘/null/5558 屳/null/13 罶/null/6 翙/null/26 屴/null/6 峖/null/23 渧/null/26 溉/null/1240 翚/null/7 峗/null/54 渨/null/12 翛/null/13 峘/null/290 温/null/36448 罹/null/425 翜/null/5 峙/null/923 罺/null/6 峚/null/16 渫/null/10 溍/null/6 罻/null/19 翞/null/10 屹/null/229 峛/null/13 溎/null/15 罼/null/10 翟/null/1195 屺/null/12 渭/null/120 溏/null/33 罽/null/17 翠/null/4129 屻/null/14 渮/null/6 源/null/48575 罾/null/11 翡/null/518 屼/null/7 峞/null/15 嵀/null/6 港/null/20031 罿/null/17 渰/null/5 翢/null/6 峟/null/23 嵁/null/12 溒/null/8 翣/null/6 屾/null/11 嵂/null/15 渱/null/16 溓/null/10 屿/null/1815 峡/null/2325 嵃/null/16 翥/null/20 渲/null/510 溔/null/9 翦/null/74 峣/null/7 嵅/null/28 渳/null/8 峤/null/77 渴/null/4610 翨/null/18 峥/null/363 嵇/null/17 渵/null/7 溗/null/6 翩/null/2089 峦/null/603 渶/null/13 溘/null/17 翪/null/18 嵉/null/7 溙/null/7 翫/null/11 峨/null/668 嵊/null/21 游/null/23431 嵋/null/176 渹/null/10 溛/null/8 翭/null/15 峪/null/21 嵌/null/219 渺/null/2271 溜/null/12 翮/null/16 渻/null/19 翯/null/14 峬/null/8 嵎/null/43 渼/null/37 溞/null/16 漀/null/9 翰/null/3686 峭/null/360 渽/null/9 溟/null/43 翱/null/524 溠/null/7 漂/null/20978 漃/null/5 溡/null/5 渿/null/5 峮/null/5 翲/null/13 翳/null/96 嵑/null/10 溢/null/1422 翴/null/10 峰/null/15287 嵒/null/7 溣/null/12 漅/null/10 翵/null/12 峱/null/16 溤/null/11 漆/null/3103 溥/null/82 漇/null/6 嵕/null/5 翷/null/9 溦/null/7 漈/null/6 溧/null/26 漉/null/87 翸/null/11 嵘/null/678 峷/null/6 嵙/null/11 溪/null/36 翻/null/20 峸/null/14 嵚/null/34 漍/null/8 翼/null/6752 峹/null/8 嵛/null/9 漎/null/27 漏/null/8914 翾/null/35 峻/null/1291 嵝/null/12 翿/null/11 嵞/null/14 巀/null/6 溯/null/1706 溰/null/11 漒/null/11 巂/null/8 溱/null/30 漓/null/44 峿/null/8 巃/null/9 溲/null/13 演/null/20 嵢/null/13 漕/null/60 嵣/null/12 巅/null/546 巆/null/9 溴/null/27 嵥/null/9 巇/null/10 溶/null/2532 漘/null/17 嵧/null/9 巉/null/15 溷/null/15 漙/null/13 嵨/null/26 嵩/null/599 溹/null/7 溺/null/1107 漜/null/15 嵫/null/9 巍/null/1062 嵬/null/16 漞/null/15 巏/null/9 溽/null/19 漟/null/10 溾/null/9 漠/null/5025 巑/null/5 嵯/null/26 溿/null/9 漡/null/27 澄/null/9 澅/null/17 嵱/null/11 嵲/null/11 漥/null/15 巕/null/7 漦/null/8 澈/null/988 漧/null/22 澉/null/9 巘/null/8 漩/null/404 澋/null/7 嵷/null/9 漪/null/456 澌/null/8 漫/null/29193 澍/null/148 嵹/null/15 澎/null/4366 嵺/null/10 漭/null/32 川/null/12738 漮/null/6 澐/null/16 嵼/null/10 州/null/10405 漯/null/38 嵽/null/16 巟/null/36 幁/null/8 漰/null/26 澒/null/16 嵾/null/8 巠/null/8 幂/null/59 漱/null/408 澓/null/7 嵿/null/12 巡/null/5165 澔/null/50 巢/null/1968 幄/null/123 漳/null/299 澕/null/12 幅/null/6499 澖/null/19 工/null/521467 左/null/40106 漶/null/12 巧/null/24208 漷/null/14 巨/null/735 幊/null/11 巩/null/681 幋/null/9 漹/null/15 幌/null/502 漺/null/18 澜/null/929 巫/null/7709 幍/null/17 漻/null/8 幎/null/6 漼/null/41 澞/null/8 幏/null/10 差/null/76057 漾/null/422 巯/null/13 澡/null/3203 澢/null/31 己/null/228330 幓/null/9 澣/null/19 已/null/235726 幔/null/98 澥/null/14 巳/null/650 幕/null/32840 巴/null/31055 澧/null/69 澨/null/5 巷/null/11381 幙/null/10 澪/null/41 澫/null/16 幛/null/14 澬/null/18 幜/null/13 澭/null/9 幝/null/12 澯/null/5 幞/null/8 巽/null/60 澰/null/10 巾/null/1208 幠/null/10 巿/null/230 幡/null/144 澲/null/14 幢/null/468 澳/null/3519 廅/null/8 澴/null/26 廆/null/24 廇/null/11 澶/null/12 幦/null/10 幧/null/8 廉/null/6691 幨/null/8 廊/null/1755 澸/null/14 幩/null/12 廋/null/36 澹/null/299 幪/null/15 廌/null/69 澺/null/15 澼/null/17 幭/null/19 澽/null/13 幮/null/12 幯/null/9 廑/null/8 澿/null/11 幰/null/11 廒/null/15 廓/null/949 干/null/29 廔/null/18 平/null/110325 年/null/343135 廖/null/8776 幵/null/18 廗/null/13 并/null/2789 廘/null/6 廙/null/7 幸/null/835 廛/null/13 廜/null/5 幻/null/23331 幼/null/7818 廞/null/9 彀/null/18 幽/null/9475 广/null/46522 彃/null/9 彄/null/17 廥/null/9 廦/null/9 廧/null/11 彉/null/11 廨/null/14 彋/null/9 廪/null/31 彏/null/13 廮/null/5 一/null/2542556 廯/null/12 丁/null/13648 归/null/26976 廱/null/6 当/null/20 七/null/62853 廲/null/9 彔/null/8 录/null/82888 彖/null/19 彗/null/1066 万/null/322 丈/null/5182 延/null/13893 彘/null/38 三/null/301762 廷/null/6457 上/null/828394 下/null/589356 丌/null/9694 建/null/128612 不/null/2831612 彝/null/83 与/null/635768 忀/null/8 丏/null/11 忁/null/9 丐/null/1256 廾/null/34 丑/null/1246 廿/null/2475 心/null/445610 形/null/80289 专/null/82677 必/null/112173 彤/null/480 忆/null/29345 且/null/128957 丕/null/412 彦/null/7903 世/null/116862 彧/null/171 忉/null/116 丘/null/3116 彩/null/148 丙/null/5272 彪/null/444 忌/null/8216 业/null/112036 忍/null/23037 丛/null/3495 彬/null/7594 东/null/183624 彭/null/5481 忏/null/10 丝/null/16204 忐/null/169 丞/null/1308 彯/null/7 忑/null/170 彰/null/9406 忒/null/93 影/null/110761 亃/null/21 忔/null/10 丢/null/20121 亄/null/38 彳/null/62 忕/null/6 彴/null/9 忖/null/186 两/null/206181 了/null/1507218 志/null/19351 严/null/33480 彶/null/8 忘/null/57999 予/null/15645 彷/null/1014 忙/null/34193 丧/null/4862 争/null/44699 彸/null/11 事/null/312553 役/null/11706 个/null/211 二/null/260189 丫/null/601 亍/null/66 彻/null/6856 忝/null/200 丬/null/151 于/null/10333 彼/null/18061 忞/null/22 中/null/1322363 亏/null/5791 彽/null/17 丮/null/6 彾/null/19 忠/null/20273 云/null/6741 忡/null/288 丰/null/1128 互/null/19113 丱/null/5 亓/null/25 忣/null/8 串/null/8282 五/null/122901 忤/null/64 丳/null/9 井/null/12829 忥/null/10 临/null/18552 忧/null/13130 忨/null/9 亘/null/343 忪/null/167 丸/null/9938 亚/null/33773 快/null/159776 丹/null/7705 些/null/304517 为/null/847332 忭/null/9 主/null/224073 忮/null/44 丼/null/17 伀/null/17 忯/null/34 丽/null/31237 亟/null/1431 企/null/14761 伂/null/5 举/null/51086 忱/null/599 亡/null/15636 亢/null/574 伄/null/17 忳/null/12 伅/null/11 忴/null/11 交/null/728005 念/null/18426 亥/null/814 亦/null/42217 伈/null/26 忷/null/6 产/null/57950 伉/null/53 忸/null/87 亨/null/7495 伊/null/14371 亩/null/271 伋/null/27 忺/null/11 享/null/24727 伍/null/11666 忻/null/93 京/null/13353 伎/null/247 亭/null/3112 伏/null/4648 忽/null/15002 亮/null/31253 伐/null/2395 忾/null/94 休/null/19366 忿/null/1353 伒/null/8 伓/null/26 亲/null/51866 伔/null/18 亳/null/111 亵/null/460 众/null/44803 亶/null/11 优/null/40 伙/null/5288 亸/null/12 会/null/894569 亹/null/15 伛/null/26 人/null/1598855 伝/null/146 伞/null/7 侀/null/14 伟/null/25371 侁/null/7 传/null/101724 侂/null/9 亿/null/8198 侃/null/718 伢/null/19 侄/null/77 侅/null/5 伤/null/61254 伥/null/60 侇/null/9 伦/null/15400 侈/null/439 伧/null/21 侉/null/11 例/null/53106 伪/null/3301 伫/null/3336 侍/null/1858 伬/null/15 伭/null/14 侏/null/1055 侐/null/5 伯/null/22436 侑/null/60 估/null/8551 侒/null/13 侔/null/18 伳/null/11 侕/null/23 伴/null/18685 侗/null/33 伶/null/1445 侘/null/10 伸/null/8263 侚/null/20 供/null/59310 伺/null/2257 侜/null/14 伻/null/5 依/null/50589 似/null/75146 侞/null/16 伽/null/914 伾/null/14 侠/null/18834 伿/null/13 侣/null/4159 侥/null/517 侦/null/5311 侧/null/6237 侨/null/6872 侩/null/49 侪/null/979 侬/null/4421 侮/null/1980 侯/null/6513 侲/null/20 侳/null/10 侵/null/7634 侹/null/7 侺/null/8 侻/null/14 便/null/114674 档/null/25542 著/null/9632 RediSearch-1.2.2/src/dep/cndict/lex/lex-cn-mz.lex000066400000000000000000000053511364126773500214660ustar00rootroot00000000000000汉族/null 汉族人/null 汉族语/null 蒙古族/null 蒙古族人/null 蒙古族语/null 满族/null 满族人/null 满族语/null 朝鲜族/null 朝鲜族人/null 朝鲜族语/null 赫哲族/null 赫哲族人/null 赫哲族语/null 达斡尔族/null 达斡尔族人/null 达斡尔族语/null 鄂温克族/null 鄂温克族人/null 鄂温克族语/null 鄂伦春族/null 鄂伦春族人/null 鄂伦春族语/null 回族/null 回族人/null 回族语/null 东乡族/null 东乡族人/null 东乡族语/null 土族/null 土族人/null 土族语/null 撒拉族/null 撒拉族人/null 撒拉族语/null 保安族/null 保安族人/null 保安族语/null 裕固族/null 裕固族人/null 裕固族语/null 维吾尔族/null 维吾尔族人/null 维吾尔族语/null 哈萨克族/null 哈萨克族人/null 哈萨克族语/null 柯尔克孜族/null 柯尔克孜族人/null 柯尔克孜族语/null 锡伯族/null 锡伯族人/null 锡伯族语/null 塔吉克族/null 塔吉克族人/null 塔吉克族语/null 乌孜别克族/null 乌孜别克族人/null 乌孜别克族语/null 俄罗斯族/null 俄罗斯族人/null 俄罗斯族语/null 塔塔尔族/null 塔塔尔族人/null 塔塔尔族语/null 藏族/null 藏族人/null 藏族语/null 门巴族/null 门巴族人/null 门巴族语/null 珞巴族/null 珞巴族人/null 珞巴族语/null 羌族/null 羌族人/null 羌族语/null 彝族/null 彝族人/null 彝族语/null 白族/null 白族人/null 白族语/null 哈尼族/null 哈尼族人/null 哈尼族语/null 傣族/null 傣族人/null 傣族语/null 僳僳族/null 僳僳族人/null 僳僳族语/null 佤族/null 佤族人/null 佤族语/null 拉祜族/null 拉祜族人/null 拉祜族语/null 纳西族/null 纳西族人/null 纳西族语/null 景颇族/null 景颇族人/null 景颇族语/null 布朗族/null 布朗族人/null 布朗族语/null 阿昌族/null 阿昌族人/null 阿昌族语/null 普米族/null 普米族人/null 普米族语/null 怒族/null 怒族人/null 怒族语/null 德昂族/null 德昂族人/null 德昂族语/null 独龙族/null 独龙族人/null 独龙族语/null 基诺族/null 基诺族人/null 基诺族语/null 苗族/null 苗族人/null 苗族语/null 布依族/null 布依族人/null 布依族语/null 侗族/null 侗族人/null 侗族语/null 水族/null 水族人/null 水族语/null 仡佬族/null 仡佬族人/null 仡佬族语/null 壮族/null 壮族人/null 壮族语/null 瑶族/null 瑶族人/null 瑶族语/null 仫佬族/null 仫佬族人/null 仫佬族语/null 毛南族/null 毛南族人/null 毛南族语/null 京族/null 京族人/null 京族语/null 土家族/null 土家族人/null 土家族语/null 黎族/null 黎族人/null 黎族语/null 畲族/null 畲族人/null 畲族语/null 高山族/null 高山族人/null 高山族语/null RediSearch-1.2.2/src/dep/cndict/lex/lex-cn-place.lex000066400000000000000000001175431364126773500221330ustar00rootroot00000000000000北京市/null 北京/null 北京人/null 东城区/null 西城区/null 崇文区/null 宣武区/null 朝阳区/null 海淀区/null 丰台区/null 房山区/null 通州区/null 顺义区/null 昌平区/null 大兴区/null 怀柔区/null 平谷区/null 密云县/null 延庆县/null 门头沟区/null 石景山区/null 天津市/null 天津/null 天津人/null 和平区/null 河东区/null 河西区/null 南开区/null 河北区/null 红桥区/null 塘沽区/null 汉沽区/null 大港区/null 东丽区/null 西青区/null 北辰区/null 津南区/null 武清区/null 宝坻区/null 静海县/null 宁河县/null 蓟县/null 河北省/null 河北/null 河北人/null 辛集市/null 藁城市/null 晋州市/null 新乐市/null 鹿泉市/null 平山县/null 井陉县/null 栾城县/null 正定县/null 行唐县/null 灵寿县/null 高邑县/null 赵县/null 赞皇县/null 深泽县/null 无极县/null 元氏县/null 唐山市/null 唐山/null 洼里村/null 遵化市/null 迁安市/null 迁西县/null 滦南县/null 玉田县/null 唐海县/null 乐亭县/null 滦县/null 昌黎县/null 卢龙县/null 抚宁县/null 邯郸市/null 武安市/null 邯郸县/null 永年县/null 曲周县/null 馆陶县/null 魏县/null 成安县/null 大名县/null 涉县/null 鸡泽县/null 邱县/null 广平县/null 肥乡县/null 临漳县/null 磁县/null 邢台市/null 南宫市/null 沙河市/null 邢台县/null 柏乡县/null 任县/null 清河县/null 宁晋县/null 威县/null 隆尧县/null 临城县/null 广宗县/null 临西县/null 内丘县/null 平乡县/null 巨鹿县/null 新河县/null 南和县/null 保定市/null 涿州市/null 定州市/null 安国市/null 满城县/null 清苑县/null 涞水县/null 苟各庄村/null 苟各庄/null 拒马河/null 野三坡/null 三坡镇/null 阜平县/null 徐水县/null 定兴县/null 唐县/null 高阳县/null 容城县/null 涞源县/null 望都县/null 安新县/null 易县/null 曲阳县/null 蠡县/null 顺平县/null 博野县/null 雄县/null 宣化县/null 康保县/null 张北县/null 阳原县/null 赤城县/null 沽源县/null 怀安县/null 怀来县/null 崇礼县/null 尚义县/null 蔚县/null 涿鹿县/null 万全县/null 承德市/null 承德县/null 兴隆县/null 隆化县/null 平泉县/null 滦平县/null 沧州市/null 泊头市/null 任丘市/null 黄骅市/null 河间市/null 沧县/null 青县/null 献县/null 东光县/null 海兴县/null 盐山县/null 肃宁县/null 南皮县/null 吴桥县/null 廊坊市/null 霸州市/null 三河市/null 固安县/null 永清县/null 香河县/null 大城县/null 文安县/null 衡水市/null 冀州市/null 深州市/null 饶阳县/null 枣强县/null 故城县/null 阜城县/null 安平县/null 武邑县/null 景县/null 武强县/null 石家庄市/null 张家口市/null 高碑店市/null 秦皇岛市/null 大厂回族自治县/null 青龙满族自治县/null 丰宁满族自治县/null 宽城满族自治县/null 孟村回族自治县/null 围场满族蒙古族自治县/null 山西省/null 山西/null 山西人/null 太原市/null 古交市/null 阳曲县/null 清徐县/null 娄烦县/null 大同市/null 大同县/null 天镇县/null 灵丘县/null 阳高县/null 左云县/null 广灵县/null 浑源县/null 阳泉市/null 平定县/null 盂县/null 长治市/null 潞城市/null 长治县/null 长子县/null 平顺县/null 襄垣县/null 沁源县/null 屯留县/null 黎城县/null 武乡县/null 沁县/null 壶关县/null 晋城市/null 高平市/null 泽州县/null 陵川县/null 阳城县/null 沁水县/null 朔州市/null 山阴县/null 右玉县/null 应县/null 怀仁县/null 晋中市/null 介休市/null 昔阳县/null 灵石县/null 祁县/null 左权县/null 寿阳县/null 太谷县/null 和顺县/null 平遥县/null 榆社县/null 运城市/null 河津市/null 永济市/null 闻喜县/null 新绛县/null 平陆县/null 垣曲县/null 绛县/null 稷山县/null 芮城县/null 夏县/null 万荣县/null 临猗县/null 忻州市/null 原平市/null 代县/null 神池县/null 五寨县/null 五台县/null 偏关县/null 宁武县/null 静乐县/null 繁峙县/null 河曲县/null 保德县/null 定襄县/null 岢岚县/null 临汾市/null 侯马市/null 霍州市/null 汾西县/null 吉县/null 安泽县/null 大宁县/null 浮山县/null 古县/null 隰县/null 襄汾县/null 翼城县/null 永和县/null 乡宁县/null 曲沃县/null 洪洞县/null 蒲县/null 吕梁市/null 孝义市/null 汾阳市/null 文水县/null 中阳县/null 兴县/null 临县/null 方山县/null 柳林县/null 岚县/null 交口县/null 交城县/null 石楼县/null 内蒙古自治区/null 内蒙古/null 内蒙古人/null 武川县/null 包头市/null 固阳县/null 乌海市/null 赤峰市/null 宁城县/null 林西县/null 敖汉旗/null 开鲁县/null 通辽市/null 库伦旗/null 奈曼旗/null 乌审旗/null 杭锦旗/null 根河市/null 阿荣旗/null 五原县/null 磴口县/null 丰镇市/null 兴和县/null 卓资县/null 商都县/null 凉城县/null 化德县/null 多伦县/null 正蓝旗/null 镶黄旗/null 兴安盟/null 突泉县/null 托克托县/null 清水河县/null 喀喇沁旗/null 巴林左旗/null 翁牛特旗/null 巴林右旗/null 扎鲁特旗/null 准格尔旗/null 鄂托克旗/null 达拉特旗/null 满洲里市/null 牙克石市/null 扎兰屯市/null 杭锦后旗/null 四子王旗/null 阿巴嘎旗/null 太仆寺旗/null 正镶白旗/null 阿尔山市/null 扎赉特旗/null 阿拉善盟/null 额济纳旗/null 呼和浩特市/null 和林格尔县/null 土默特左旗/null 土默特右旗/null 克什克腾旗/null 霍林郭勒市/null 鄂尔多斯市/null 伊金霍洛旗/null 鄂托克前旗/null 呼伦贝尔市/null 额尔古纳市/null 陈巴尔虎旗/null 巴彦淖尔市/null 乌拉特中旗/null 乌拉特前旗/null 乌拉特后旗/null 乌兰察布市/null 锡林浩特市/null 二连浩特市/null 苏尼特左旗/null 苏尼特右旗/null 锡林郭勒盟/null 乌兰浩特市/null 阿拉善左旗/null 阿拉善右旗/null 阿鲁科尔沁旗/null 新巴尔虎左旗/null 新巴尔虎右旗/null 鄂伦春自治旗/null 西乌珠穆沁旗/null 东乌珠穆沁旗/null 科尔沁左翼中旗/null 科尔沁左翼后旗/null 鄂温克族自治旗/null 察哈尔右翼前旗/null 察哈尔右翼中旗/null 察哈尔右翼后旗/null 科尔沁右翼前旗/null 科尔沁右翼中旗/null 达尔罕茂明安联合旗/null 莫力达瓦达斡尔族自治旗/null 辽宁省/null 辽宁/null 辽宁人/null 沈阳市/null 沈阳/null 新民市/null 法库县/null 辽中县/null 康平县/null 大连市/null 庄河市/null 长海县/null 鞍山市/null 海城市/null 台安县/null 抚顺市/null 抚顺县/null 本溪市/null 丹东市/null 东港市/null 凤城市/null 锦州市/null 凌海市/null 北宁市/null 黑山县/null 义县/null 营口市/null 盖州市/null 阜新市/null 彰武县/null 辽阳市/null 灯塔市/null 辽阳县/null 盘锦市/null 盘山县/null 大洼县/null 铁岭市/null 开原市/null 铁岭县/null 昌图县/null 西丰县/null 朝阳市/null 凌源市/null 北票市/null 朝阳县/null 建平县/null 兴城市/null 绥中县/null 建昌县/null 大石桥市/null 瓦房店市/null 普兰店市/null 调兵山市/null 葫芦岛市/null 岫岩满族自治县/null 清原满族自治县/null 新宾满族自治县/null 阜新蒙古族自治县/null 宽甸满族自治县/null 桓仁满族自治县/null 本溪满族自治县/null 喀喇沁左翼蒙古族自治县/null 吉林省/null 吉林/null 吉林人/null 长春市/null 长春/null 九台市/null 榆树市/null 德惠市/null 农安县/null 吉林市/null 舒兰市/null 桦甸市/null 蛟河市/null 磐石市/null 永吉县/null 四平市/null 双辽市/null 梨树县/null 辽源市/null 东辽县/null 东丰县/null 通化市/null 集安市/null 通化县/null 辉南县/null 柳河县/null 白山市/null 临江市/null 靖宇县/null 抚松县/null 江源县/null 松原市/null 乾安县/null 长岭县/null 扶余县/null 白城市/null 大安市/null 洮南市/null 镇赉县/null 通榆县/null 延吉市/null 图们市/null 敦化市/null 龙井市/null 珲春市/null 和龙市/null 安图县/null 汪清县/null 公主岭市/null 梅河口市/null 伊通满族自治县/null 长白朝鲜族自治县/null 延边朝鲜族自治州/null 前郭尔罗斯蒙古族自治县/null 黑龙江省/null 黑龙江/null 黑龙江人/null 阿城市/null 尚志市/null 双城市/null 五常市/null 方正县/null 宾县/null 依兰县/null 巴彦县/null 通河县/null 木兰县/null 延寿县/null 讷河市/null 富裕县/null 拜泉县/null 甘南县/null 依安县/null 克山县/null 泰来县/null 克东县/null 龙江县/null 鹤岗市/null 萝北县/null 绥滨县/null 集贤县/null 宝清县/null 友谊县/null 饶河县/null 鸡西市/null 密山市/null 虎林市/null 鸡东县/null 大庆市/null 林甸县/null 肇州县/null 肇源县/null 漠河县/null 伊春市/null 铁力市/null 嘉荫县/null 宁安市/null 海林市/null 穆棱市/null 林口县/null 东宁县/null 同江市/null 富锦市/null 桦川县/null 抚远县/null 桦南县/null 汤原县/null 勃利县/null 黑河市/null 北安市/null 逊克县/null 嫩江县/null 孙吴县/null 绥化市/null 安达市/null 肇东市/null 海伦市/null 绥棱县/null 兰西县/null 明水县/null 青冈县/null 庆安县/null 望奎县/null 呼玛县/null 塔河县/null 七台河市/null 双鸭山市/null 牡丹江市/null 佳木斯市/null 绥芬河市/null 哈尔滨市/null 哈尔滨/null 齐齐哈尔市/null 五大连池市/null 杜尔伯特蒙古族自治县/null 上海市/null 上海/null 上海人/null 黄浦区/null 卢湾区/null 徐汇区/null 长宁区/null 静安区/null 普陀区/null 闸北区/null 虹口区/null 杨浦区/null 宝山区/null 闵行区/null 嘉定区/null 松江区/null 金山区/null 青浦区/null 南汇区/null 奉贤区/null 崇明县浦东新区/null 江苏省/null 江苏/null 江苏人/null 南京市/null 南京/null 沪宁/null 沪宁高速/null 溧水县/null 高淳县/null 无锡市/null 江阴市/null 宜兴市/null 徐州市/null 邳州市/null 新沂市/null 铜山县/null 睢宁县/null 沛县/null 丰县/null 常州市/null 金坛市/null 溧阳市/null 苏州市/null 常熟市/null 太仓市/null 昆山市/null 吴江市/null 南通市/null 如皋市/null 通州市/null 海门市/null 启东市/null 海安县/null 如东县/null 东海县/null 灌云县/null 赣榆县/null 灌南县/null 淮安市/null 涟水县/null 洪泽县/null 金湖县/null 盱眙县/null 盐城市/null 东台市/null 大丰市/null 建湖县/null 响水县/null 阜宁县/null 射阳县/null 滨海县/null 扬州市/null 高邮市/null 江都市/null 仪征市/null 宝应县/null 镇江市/null 丹阳市/null 扬中市/null 句容市/null 泰州市/null 泰兴市/null 姜堰市/null 靖江市/null 兴化市/null 宿迁市/null 沭阳县/null 泗阳县/null 泗洪县/null 连云港市/null 张家港市/null 浙江省/null 浙江/null 浙江人/null 杭州市/null 杭州/null 建德市/null 富阳市/null 临安市/null 桐庐县/null 淳安县/null 宁波市/null 余姚市/null 慈溪市/null 奉化市/null 宁海县/null 象山县/null 温州市/null 瑞安市/null 乐清市/null 永嘉县/null 洞头县/null 平阳县/null 苍南县/null 文成县/null 泰顺县/null 嘉兴市/null 海宁市/null 平湖市/null 桐乡市/null 嘉善县/null 海盐县/null 湖州市/null 长兴县/null 德清县/null 安吉县/null 绍兴市/null 诸暨市/null 上虞市/null 嵊州市/null 绍兴县/null 新昌县/null 金华市/null 兰溪市/null 义乌市/null 东阳市/null 永康市/null 武义县/null 浦江县/null 磐安县/null 衢州市/null 江山市/null 龙游县/null 常山县/null 开化县/null 舟山市/null 岱山县/null 嵊泗县/null 台州市/null 临海市/null 玉环县/null 天台县/null 仙居县/null 三门县/null 丽水市/null 龙泉市/null 缙云县/null 青田县/null 云和县/null 遂昌县/null 松阳县/null 庆元县/null 景宁畲族自治县/null 安徽省/null 安徽/null 安徽人/null 合肥市/null 合肥/null 长丰县/null 肥东县/null 肥西县/null 芜湖市/null 芜湖县/null 南陵县/null 繁昌县/null 蚌埠市/null 怀远县/null 固镇县/null 五河县/null 淮南市/null 凤台县/null 当涂县/null 淮北市/null 濉溪县/null 铜陵市/null 安庆市/null 桐城市/null 宿松县/null 枞阳县/null 太湖县/null 怀宁县/null 岳西县/null 望江县/null 潜山县/null 黄山市/null 休宁县/null 歙县/null 祁门县/null 黟县/null 滁州市/null 天长市/null 明光市/null 全椒县/null 来安县/null 定远县/null 凤阳县/null 阜阳市/null 界首市/null 临泉县/null 颍上县/null 阜南县/null 太和县/null 宿州市/null 萧县/null 泗县/null 砀山县/null 灵璧县/null 巢湖市/null 含山县/null 无为县/null 庐江县/null 和县/null 六安市/null 寿县/null 霍山县/null 霍邱县/null 舒城县/null 金寨县/null 亳州市/null 利辛县/null 涡阳县/null 蒙城县/null 池州市/null 东至县/null 石台县/null 青阳县/null 宣城市/null 宁国市/null 广德县/null 郎溪县/null 泾县/null 旌德县/null 绩溪县/null 马鞍山市/null 福建省/null 福建/null 福建人/null 福州市/null 福州/null 福清市/null 长乐市/null 闽侯县/null 闽清县/null 永泰县/null 连江县/null 罗源县/null 平潭县/null 厦门市/null 莆田市/null 仙游县/null 三明市/null 永安市/null 明溪县/null 将乐县/null 大田县/null 宁化县/null 建宁县/null 沙县/null 尤溪县/null 清流县/null 泰宁县/null 泉州市/null 石狮市/null 晋江市/null 南安市/null 惠安县/null 永春县/null 安溪县/null 德化县/null 金门县/null 漳州市/null 龙海市/null 平和县/null 南靖县/null 诏安县/null 漳浦县/null 华安县/null 东山县/null 长泰县/null 云霄县/null 南平市/null 建瓯市/null 邵武市/null 建阳市/null 松溪县/null 光泽县/null 顺昌县/null 浦城县/null 政和县/null 龙岩市/null 漳平市/null 长汀县/null 武平县/null 上杭县/null 永定县/null 连城县/null 宁德市/null 福安市/null 福鼎市/null 寿宁县/null 霞浦县/null 柘荣县/null 屏南县/null 古田县/null 周宁县/null 武夷山市/null 江西省/null 江西/null 江西人/null 南昌市/null 南昌/null 新建县/null 南昌县/null 进贤县/null 安义县/null 乐平市/null 浮梁县/null 萍乡市/null 莲花县/null 上栗县/null 芦溪县/null 九江市/null 瑞昌市/null 九江县/null 星子县/null 武宁县/null 彭泽县/null 永修县/null 修水县/null 湖口县/null 德安县/null 都昌县/null 新余市/null 分宜县/null 鹰潭市/null 贵溪市/null 余江县/null 赣州市/null 瑞金市/null 南康市/null 石城县/null 安远县/null 赣县/null 宁都县/null 寻乌县/null 兴国县/null 定南县/null 上犹县/null 于都县/null 龙南县/null 崇义县/null 信丰县/null 全南县/null 大余县/null 会昌县/null 吉安市/null 吉安县/null 永丰县/null 永新县/null 新干县/null 泰和县/null 峡江县/null 遂川县/null 安福县/null 吉水县/null 万安县/null 宜春市/null 丰城市/null 樟树市/null 高安市/null 铜鼓县/null 靖安县/null 宜丰县/null 奉新县/null 万载县/null 上高县/null 抚州市/null 南丰县/null 乐安县/null 金溪县/null 南城县/null 东乡县/null 资溪县/null 宜黄县/null 广昌县/null 黎川县/null 崇仁县/null 上饶市/null 德兴市/null 上饶县/null 广丰县/null 鄱阳县/null 婺源县/null 铅山县/null 余干县/null 横峰县/null 弋阳县/null 玉山县/null 万年县/null 井冈山市/null 景德镇市/null 山东省/null 山东/null 山东人/null 济南市/null 济南/null 章丘市/null 平阴县/null 济阳县/null 商河县/null 青岛市/null 胶南市/null 胶州市/null 平度市/null 莱西市/null 即墨市/null 淄博市/null 桓台县/null 高青县/null 沂源县/null 枣庄市/null 滕州市/null 垦利县/null 广饶县/null 利津县/null 烟台市/null 龙口市/null 莱阳市/null 莱州市/null 招远市/null 蓬莱市/null 栖霞市/null 海阳市/null 长岛县/null 潍坊市/null 青州市/null 诸城市/null 寿光市/null 安丘市/null 高密市/null 昌邑市/null 昌乐县/null 临朐县/null 济宁市/null 曲阜市/null 兖州市/null 邹城市/null 鱼台县/null 金乡县/null 嘉祥县/null 微山县/null 汶上县/null 泗水县/null 梁山县/null 泰安市/null 新泰市/null 肥城市/null 宁阳县/null 东平县/null 威海市/null 乳山市/null 文登市/null 荣成市/null 日照市/null 五莲县/null 莒县/null 莱芜市/null 临沂市/null 沂南县/null 郯城县/null 沂水县/null 苍山县/null 费县/null 平邑县/null 莒南县/null 蒙阴县/null 临沭县/null 德州市/null 乐陵市/null 禹城市/null 陵县/null 宁津县/null 齐河县/null 武城县/null 庆云县/null 平原县/null 夏津县/null 临邑县/null 聊城市/null 临清市/null 高唐县/null 阳谷县/null 茌平县/null 莘县/null 东阿县/null 冠县/null 滨州市/null 邹平县/null 沾化县/null 惠民县/null 博兴县/null 阳信县/null 无棣县/null 菏泽市/null 鄄城县/null 单县/null 郓城县/null 曹县/null 定陶县/null 巨野县/null 东明县/null 成武县/null 河南省/null 河南/null 河南人/null 郑州市/null 郑州/null 巩义市/null 新郑市/null 新密市/null 登封市/null 荥阳市/null 中牟县/null 开封市/null 开封县/null 尉氏县/null 兰考县/null 杞县/null 通许县/null 洛阳市/null 偃师市/null 孟津县/null 汝阳县/null 伊川县/null 洛宁县/null 嵩县/null 宜阳县/null 新安县/null 栾川县/null 汝州市/null 舞钢市/null 宝丰县/null 叶县/null 郏县/null 鲁山县/null 安阳市/null 林州市/null 安阳县/null 滑县/null 内黄县/null 汤阴县/null 鹤壁市/null 浚县/null 淇县/null 新乡市/null 卫辉市/null 辉县市/null 新乡县/null 获嘉县/null 原阳县/null 长垣县/null 封丘县/null 延津县/null 焦作市/null 沁阳市/null 孟州市/null 修武县/null 温县/null 武陟县/null 博爱县/null 濮阳市/null 濮阳县/null 南乐县/null 台前县/null 清丰县/null 范县/null 许昌市/null 禹州市/null 长葛市/null 许昌县/null 鄢陵县/null 襄城县/null 漯河市/null 临颍县/null 舞阳县/null 义马市/null 灵宝市/null 渑池县/null 卢氏县/null 陕县/null 南阳市/null 邓州市/null 桐柏县/null 方城县/null 淅川县/null 镇平县/null 唐河县/null 南召县/null 内乡县/null 新野县/null 社旗县/null 西峡县/null 商丘市/null 永城市/null 宁陵县/null 虞城县/null 民权县/null 夏邑县/null 柘城县/null 睢县/null 信阳市/null 潢川县/null 淮滨县/null 息县/null 新县/null 商城县/null 固始县/null 罗山县/null 光山县/null 周口市/null 项城市/null 商水县/null 淮阳县/null 太康县/null 鹿邑县/null 西华县/null 扶沟县/null 沈丘县/null 郸城县/null 确山县/null 新蔡县/null 上蔡县/null 西平县/null 泌阳县/null 平舆县/null 汝南县/null 遂平县/null 正阳县/null 济源市/null 三门峡市/null 平顶山市/null 驻马店市/null 湖北省/null 湖北/null 湖北人/null 武汉市/null 武汉/null 黄石市/null 大冶市/null 阳新县/null 十堰市/null 郧县/null 竹山县/null 房县/null 郧西县/null 竹溪县/null 荆州市/null 洪湖市/null 石首市/null 松滋市/null 监利县/null 公安县/null 江陵县/null 宜昌市/null 宜都市/null 当阳市/null 枝江市/null 秭归县/null 远安县/null 兴山县/null 襄樊市/null 枣阳市/null 宜城市/null 南漳县/null 谷城县/null 保康县/null 鄂州市/null 荆门市/null 钟祥市/null 京山县/null 沙洋县/null 孝感市/null 应城市/null 安陆市/null 汉川市/null 云梦县/null 大悟县/null 孝昌县/null 黄冈市/null 麻城市/null 武穴市/null 红安县/null 罗田县/null 浠水县/null 蕲春县/null 黄梅县/null 英山县/null 团风县/null 咸宁市/null 赤壁市/null 嘉鱼县/null 通山县/null 崇阳县/null 通城县/null 随州市/null 广水市/null 仙桃市/null 天门市/null 潜江市/null 恩施市/null 利川市/null 建始县/null 来凤县/null 巴东县/null 鹤峰县/null 宣恩县/null 咸丰县/null 丹江口市/null 老河口市/null 神农架林区/null 五峰土家族自治县/null 长阳土家族自治县/null 湖南省/null 湖南/null 湖南人/null 长沙市/null 长沙/null 浏阳市/null 长沙县/null 望城县/null 宁乡县/null 株洲市/null 醴陵市/null 株洲县/null 炎陵县/null 茶陵县/null 攸县/null 湘潭市/null 湘乡市/null 韶山市/null 湘潭县/null 衡阳市/null 衡阳/null 耒阳市/null 常宁市/null 衡阳县/null 衡东县/null 衡山县/null 衡南县/null 祁东县/null 邵阳市/null 武冈市/null 邵东县/null 洞口县/null 新邵县/null 绥宁县/null 新宁县/null 邵阳县/null 隆回县/null 城步苗族自治县/null 岳阳市/null 岳阳/null 临湘市/null 汨罗市/null 汨罗/null 岳阳县/null 湘阴县/null 平江县/null 华容县/null 常德市/null 津市市/null 澧县/null 临澧县/null 桃源县/null 汉寿县/null 安乡县/null 石门县/null 慈利县/null 桑植县/null 益阳市/null 沅江市/null 桃江县/null 南县/null 安化县/null 郴州市/null 资兴市/null 宜章县/null 汝城县/null 安仁县/null 嘉禾县/null 临武县/null 桂东县/null 永兴县/null 桂阳县/null 永州市/null 祁阳县/null 蓝山县/null 宁远县/null 新田县/null 东安县/null 江永县/null 道县/null 双牌县/null 怀化市/null 洪江市/null 会同县/null 沅陵县/null 辰溪县/null 溆浦县/null 中方县/null 娄底市/null 涟源市/null 新化县/null 双峰县/null 吉首市/null 古丈县/null 龙山县/null 永顺县/null 凤凰县/null 泸溪县/null 保靖县/null 花垣县/null 冷水江市/null 张家界市/null 江华瑶族自治县/null 芷江侗族自治县/null 新晃侗族自治县/null 通道侗族自治县/null 靖州苗族侗族自治县/null 麻阳苗族自治县/null 湘西土家族苗族自治州/null 广东省/null 广东/null 广东人/null 广州市/null 广州/null 从化市/null 增城市/null 深圳市/null 深圳/null 珠海市/null 珠海/null 汕头市/null 汕头/null 南澳县/null 韶关市/null 乐昌市/null 南雄市/null 仁化县/null 始兴县/null 翁源县/null 新丰县/null 佛山市/null 佛山/null 江门市/null 台山市/null 开平市/null 鹤山市/null 恩平市/null 湛江市/null 廉江市/null 雷州市/null 吴川市/null 遂溪县/null 徐闻县/null 茂名市/null 高州市/null 化州市/null 信宜市/null 电白县/null 肇庆市/null 高要市/null 四会市/null 广宁县/null 德庆县/null 封开县/null 怀集县/null 惠州市/null 惠东县/null 博罗县/null 龙门县/null 梅州市/null 兴宁市/null 梅县/null 蕉岭县/null 大埔县/null 丰顺县/null 五华县/null 平远县/null 汕尾市/null 陆丰市/null 海丰县/null 陆河县/null 河源市/null 和平县/null 龙川县/null 紫金县/null 连平县/null 东源县/null 阳江市/null 阳春市/null 阳西县/null 阳东县/null 清远市/null 英德市/null 连州市/null 佛冈县/null 阳山县/null 清新县/null 东莞市/null 中山市/null 潮州市/null 潮安县/null 饶平县/null 揭阳市/null 普宁市/null 揭东县/null 揭西县/null 惠来县/null 云浮市/null 罗定市/null 云安县/null 新兴县/null 郁南县/null 乳源瑶族自治县/null 连山壮族瑶族自治县/null 连南瑶族自治县/null 广西壮族自治区/null 广西壮族/null 广西壮族人/null 南宁市/null 南宁/null 武鸣县/null 隆安县/null 马山县/null 上林县/null 宾阳县/null 横县/null 柳州市/null 柳江县/null 桂林市/null 阳朔县/null 临桂县/null 灵川县/null 全州县/null 平乐县/null 兴安县/null 灌阳县/null 荔浦县/null 资源县/null 永福县/null 梧州市/null 岑溪市/null 苍梧县/null 藤县/null 蒙山县/null 北海市/null 合浦县/null 东兴市/null 上思县/null 钦州市/null 灵山县/null 浦北县/null 贵港市/null 桂平市/null 平南县/null 玉林市/null 北流市/null 容县/null 陆川县/null 博白县/null 兴业县/null 百色市/null 凌云县/null 平果县/null 西林县/null 乐业县/null 德保县/null 田林县/null 田阳县/null 靖西县/null 田东县/null 那坡县/null 贺州市/null 钟山县/null 昭平县/null 河池市/null 宜州市/null 天峨县/null 凤山县/null 南丹县/null 东兰县/null 来宾市/null 合山市/null 象州县/null 武宣县/null 忻城县/null 崇左市/null 凭祥市/null 宁明县/null 扶绥县/null 龙州县/null 大新县/null 天等县/null 防城港市/null 三江侗族自治县/null 大化瑶族自治县/null 巴马瑶族自治县/null 龙胜各族自治县/null 金秀瑶族自治县/null 融水苗族自治县/null 隆林各族自治县/null 恭城瑶族自治县/null 都安瑶族自治县/null 富川瑶族自治县/null 环江毛南族自治县/null 罗城仫佬族自治县/null 海南省/null 海南/null 海南人/null 海口市/null 海口/null 琼海市/null 儋州市/null 文昌市/null 万宁市/null 东方市/null 澄迈县/null 定安县/null 屯昌县/null 临高县/null 三亚市/null 三亚/null 五指山市/null 白沙黎族自治县/null 昌江黎族自治县/null 乐东黎族自治县/null 陵水黎族自治县/null 保亭黎族苗族自治县/null 琼中黎族苗族自治县/null 重庆市/null 重庆/null 重庆人/null 渝中区/null 江北区/null 南岸区/null 北碚区/null 万盛区/null 双桥区/null 渝北区/null 巴南区/null 万州区/null 涪陵区/null 黔江区/null 长寿区/null 九龙坡区/null 大渡口区/null 沙坪坝区/null 永川市/null 合川市/null 江津市/null 南川市/null 綦江县/null 潼南县/null 荣昌县/null 璧山县/null 大足县/null 铜梁县/null 梁平县/null 城口县/null 垫江县/null 武隆县/null 丰都县/null 奉节县/null 开县/null 云阳县/null 忠县/null 巫溪县/null 巫山县/null 石柱土家族自治县/null 秀山土家族苗族自治县/null 酉阳土家族苗族自治县/null 彭水苗族土家族自治县/null 四川省/null 四川/null 四川人/null 锦城/null 成都市/null 成都/null 彭州市/null 邛崃市/null 崇州市/null 金堂县/null 郫县/null 新津县/null 双流县/null 蒲江县/null 大邑县/null 自贡市/null 荣县/null 富顺县/null 米易县/null 盐边县/null 泸州市/null 泸县/null 合江县/null 叙永县/null 古蔺县/null 德阳市/null 广汉市/null 什邡市/null 绵竹市/null 罗江县/null 中江县/null 绵阳市/null 江油市/null 盐亭县/null 三台县/null 平武县/null 安县/null 梓潼县/null 广元市/null 青川县/null 旺苍县/null 剑阁县/null 苍溪县/null 遂宁市/null 射洪县/null 蓬溪县/null 大英县/null 内江市/null 资中县/null 隆昌县/null 威远县/null 乐山市/null 夹江县/null 井研县/null 犍为县/null 沐川县/null 南充市/null 阆中市/null 营山县/null 蓬安县/null 仪陇县/null 南部县/null 西充县/null 眉山市/null 仁寿县/null 彭山县/null 洪雅县/null 丹棱县/null 青神县/null 宜宾市/null 宜宾县/null 兴文县/null 南溪县/null 珙县/null 长宁县/null 高县/null 江安县/null 筠连县/null 屏山县/null 广安市/null 华蓥市/null 岳池县/null 邻水县/null 武胜县/null 达州市/null 万源市/null 达县/null 渠县/null 宣汉县/null 开江县/null 大竹县/null 雅安市/null 芦山县/null 石棉县/null 名山县/null 天全县/null 荥经县/null 宝兴县/null 汉源县/null 巴中市/null 南江县/null 平昌县/null 通江县/null 资阳市/null 简阳市/null 安岳县/null 乐至县/null 红原县/null 汶川县/null 阿坝县/null 理县/null 小金县/null 黑水县/null 金川县/null 松潘县/null 壤塘县/null 茂县/null 康定县/null 丹巴县/null 炉霍县/null 九龙县/null 甘孜县/null 雅江县/null 新龙县/null 道孚县/null 白玉县/null 理塘县/null 德格县/null 乡城县/null 石渠县/null 稻城县/null 色达县/null 巴塘县/null 泸定县/null 得荣县/null 西昌市/null 美姑县/null 昭觉县/null 金阳县/null 甘洛县/null 布拖县/null 雷波县/null 普格县/null 宁南县/null 喜德县/null 会东县/null 越西县/null 会理县/null 盐源县/null 德昌县/null 冕宁县/null 马尔康县/null 九寨沟县/null 峨眉山市/null 都江堰市/null 攀枝花市/null 若尔盖县/null 北川羌族自治县/null 木里藏族自治县/null 马边彝族自治县/null 峨边彝族自治县/null 甘孜藏族自治州/null 凉山彝族自治州/null 阿坝藏族羌族自治州/null 贵州省/null 贵州/null 贵州人/null 贵阳市/null 贵阳/null 清镇市/null 开阳县/null 修文县/null 息烽县/null 水城县/null 盘县/null 遵义市/null 遵义/null 赤水市/null 仁怀市/null 遵义县/null 绥阳县/null 桐梓县/null 习水县/null 凤冈县/null 正安县/null 余庆县/null 湄潭县/null 安顺市/null 普定县/null 德江县/null 江口县/null 思南县/null 石阡县/null 毕节市/null 黔西县/null 大方县/null 织金县/null 金沙县/null 赫章县/null 纳雍县/null 兴义市/null 望谟县/null 兴仁县/null 普安县/null 册亨县/null 晴隆县/null 贞丰县/null 安龙县/null 凯里市/null 施秉县/null 从江县/null 锦屏县/null 镇远县/null 麻江县/null 台江县/null 天柱县/null 黄平县/null 榕江县/null 剑河县/null 三穗县/null 雷山县/null 黎平县/null 岑巩县/null 丹寨县/null 都匀市/null 福泉市/null 贵定县/null 惠水县/null 罗甸县/null 瓮安县/null 荔波县/null 龙里县/null 平塘县/null 长顺县/null 独山县/null 六盘水市/null 六枝特区/null 万山特区/null 三都水族自治县/null 松桃苗族自治县/null 玉屏侗族自治县/null 沿河土家族自治县/null 道真仡佬族苗族自治县/null 务川仡佬族苗族自治县平坝县/null 镇宁布依族苗族自治县/null 紫云苗族布依族自治县/null 关岭布依族苗族自治县铜仁市/null 印江土家族苗族自治县/null 黔东南苗族侗族自治州/null 黔西南布依族苗族自治州/null 威宁彝族回族苗族自治县/null 黔南布依族苗族自治州/null 云南省/null 云南/null 云南人/null 昆明市/null 昆明/null 安宁市/null 富民县/null 嵩明县/null 呈贡县/null 晋宁县/null 宜良县/null 曲靖市/null 宣威市/null 陆良县/null 会泽县/null 富源县/null 罗平县/null 马龙县/null 师宗县/null 沾益县/null 玉溪市/null 华宁县/null 澄江县/null 易门县/null 通海县/null 江川县/null 保山市/null 施甸县/null 昌宁县/null 龙陵县/null 腾冲县/null 昭通市/null 永善县/null 绥江县/null 镇雄县/null 大关县/null 盐津县/null 巧家县/null 彝良县/null 威信县/null 水富县/null 鲁甸县/null 丽江市/null 华坪县/null 永胜县/null 思茅市/null 临沧市/null 镇康县/null 凤庆县/null 云县/null 永德县/null 文山县/null 砚山县/null 广南县/null 马关县/null 富宁县/null 西畴县/null 丘北县/null 蒙自县/null 个旧市/null 开远市/null 弥勒县/null 红河县/null 绿春县/null 泸西县/null 建水县/null 元阳县/null 石屏县/null 景洪市/null 勐海县/null 楚雄市/null 元谋县/null 南华县/null 牟定县/null 武定县/null 大姚县/null 双柏县/null 禄丰县/null 永仁县/null 姚安县/null 大理市/null 剑川县/null 弥渡县/null 云龙县/null 洱源县/null 鹤庆县/null 祥云县/null 宾川县/null 永平县/null 潞西市/null 瑞丽市/null 盈江县/null 梁河县/null 陇川县/null 泸水县/null 福贡县/null 德钦县/null 麻栗坡县/null 香格里拉县/null 宁蒗彝族自治县/null 河口瑶族自治县/null 玉龙纳西族自治县/null 普洱哈尼族彝族自治县/null 漾濞彝族自治县/null 寻甸回族自治县/null 墨江哈尼族自治县/null 江城哈尼族彝族自治县/null 峨山彝族自治县/null 屏边苗族自治县/null 澜沧拉祜族自治县/null 兰坪白族普米族自治县/null 石林彝族自治县/null 西盟佤族自治县/null 维西僳僳族自治县/null 贡山独龙族怒族自治县/null 景东彝族自治县/null 沧源佤族自治县/null 巍山彝族回族自治县/null 景谷彝族傣族自治县/null 南涧彝族自治县/null 新平彝族傣族自治县/null 禄劝彝族苗族自治县/null 孟连傣族拉祜族佤族自治县/null 金平苗族瑶族傣族自治县/null 元江哈尼族彝族傣族自治县/null 镇沅彝族哈尼族拉祜族自治县/null 双江拉祜族佤族布朗族傣族自治县/null 耿马傣族佤族自治县/null 西藏自治区/null 西藏/null 西藏人/null 拉萨市/null 拉萨/null 林周县/null 达孜县/null 尼木县/null 当雄县/null 曲水县/null 那曲县/null 嘉黎县/null 申扎县/null 巴青县/null 聂荣县/null 尼玛县/null 比如县/null 索县/null 班戈县/null 安多县/null 昌都县/null 芒康县/null 贡觉县/null 八宿县/null 左贡县/null 边坝县/null 洛隆县/null 江达县/null 丁青县/null 察雅县/null 乃东县/null 琼结县/null 措美县/null 加查县/null 贡嘎县/null 洛扎县/null 曲松县/null 桑日县/null 扎囊县/null 错那县/null 隆子县/null 定结县/null 萨迦县/null 江孜县/null 拉孜县/null 定日县/null 康马县/null 吉隆县/null 亚东县/null 昂仁县/null 岗巴县/null 仲巴县/null 萨嘎县/null 仁布县/null 白朗县/null 噶尔县/null 措勤县/null 普兰县/null 革吉县/null 日土县/null 札达县/null 改则县/null 林芝县/null 墨脱县/null 朗县/null 米林县/null 察隅县/null 波密县/null 日喀则市/null 类乌齐县/null 浪卡子县/null 聂拉木县/null 谢通门县/null 南木林县/null 工布江达县/null 墨竹工卡县/null 堆龙德庆县/null 陕西省/null 陕西/null 陕西人/null 西安市/null 西安/null 高陵县/null 蓝田县/null 户县/null 周至县/null 铜川市/null 宜君县/null 宝鸡市/null 岐山县/null 凤翔县/null 陇县/null 太白县/null 麟游县/null 扶风县/null 千阳县/null 眉县/null 凤县/null 咸阳市/null 礼泉县/null 泾阳县/null 永寿县/null 三原县/null 彬县/null 旬邑县/null 长武县/null 乾县/null 武功县/null 淳化县/null 渭南市/null 韩城市/null 华阴市/null 蒲城县/null 潼关县/null 白水县/null 澄城县/null 华县/null 合阳县/null 富平县/null 大荔县/null 延安市/null 安塞县/null 洛川县/null 子长县/null 黄陵县/null 延川县/null 富县/null 延长县/null 甘泉县/null 宜川县/null 志丹县/null 黄龙县/null 吴旗县/null 汉中市/null 留坝县/null 镇巴县/null 城固县/null 南郑县/null 洋县/null 宁强县/null 佛坪县/null 勉县/null 西乡县/null 略阳县/null 榆林市/null 清涧县/null 绥德县/null 神木县/null 佳县/null 府谷县/null 子洲县/null 靖边县/null 横山县/null 米脂县/null 吴堡县/null 定边县/null 安康市/null 紫阳县/null 岚皋县/null 旬阳县/null 镇坪县/null 平利县/null 石泉县/null 宁陕县/null 白河县/null 汉阴县/null 商洛市/null 镇安县/null 山阳县/null 洛南县/null 商南县/null 丹凤县/null 柞水县/null 甘肃省/null 甘肃/null 甘肃人/null 兰州市/null 兰州/null 永登县/null 榆中县/null 皋兰县/null 金昌市/null 永昌县/null 白银市/null 靖远县/null 景泰县/null 会宁县/null 天水市/null 武山县/null 甘谷县/null 清水县/null 秦安县/null 武威市/null 民勤县/null 古浪县/null 张掖市/null 民乐县/null 山丹县/null 临泽县/null 高台县/null 平凉市/null 灵台县/null 静宁县/null 崇信县/null 华亭县/null 泾川县/null 庄浪县/null 酒泉市/null 玉门市/null 敦煌市/null 安西县/null 金塔县/null 庆阳市/null 庆城县/null 镇原县/null 合水县/null 华池县/null 环县/null 宁县/null 正宁县/null 定西市/null 岷县/null 渭源县/null 陇西县/null 通渭县/null 漳县/null 临洮县/null 陇南市/null 成县/null 礼县/null 康县/null 文县/null 两当县/null 徽县/null 宕昌县/null 西和县/null 临夏市/null 临夏县/null 康乐县/null 永靖县/null 广河县/null 和政县/null 合作市/null 临潭县/null 卓尼县/null 舟曲县/null 迭部县/null 玛曲县/null 碌曲县/null 夏河县/null 嘉峪关市/null 东乡族自治县/null 阿克塞哈萨克族自治县/null 肃北蒙古族自治县/null 张家川回族自治县/null 天祝藏族自治县/null 肃南裕固族自治县/null 积石山保安族东乡族撒拉族自治县/null 青海省/null 青海/null 青海人/null 西宁市/null 西宁/null 湟源县/null 湟中县/null 平安县/null 乐都县/null 海晏县/null 祁连县/null 刚察县/null 同仁县/null 泽库县/null 尖扎县/null 共和县/null 同德县/null 贵德县/null 兴海县/null 贵南县/null 玛沁县/null 班玛县/null 甘德县/null 达日县/null 久治县/null 玛多县/null 玉树县/null 杂多县/null 称多县/null 治多县/null 囊谦县/null 乌兰县/null 天峻县/null 都兰县/null 曲麻莱县/null 德令哈市/null 格尔木市/null 门源回族自治县/null 大通回族土族自治县/null 河南蒙古族自治县/null 化隆回族自治县/null 互助土族自治县/null 民和回族土族自治县/null 循化撒拉族自治县/null 宁夏回族自治区/null 宁夏回族/null 宁夏回族人/null 银川市/null 银川/null 灵武市/null 永宁县/null 贺兰县/null 平罗县/null 吴忠市/null 同心县/null 盐池县/null 固原市/null 西吉县/null 隆德县/null 泾源县/null 彭阳县/null 中卫市/null 中宁县/null 海原县/null 石嘴山市/null 青铜峡市/null 新疆维吾尔自治区/null 新疆维吾尔/null 新疆维吾尔人/null 鄯善县/null 哈密市/null 伊吾县/null 和田市/null 和田县/null 洛浦县/null 民丰县/null 皮山县/null 策勒县/null 于田县/null 墨玉县/null 温宿县/null 沙雅县/null 拜城县/null 库车县/null 柯坪县/null 新和县/null 乌什县/null 喀什市/null 巴楚县/null 泽普县/null 伽师县/null 叶城县/null 疏勒县/null 莎车县/null 疏附县/null 乌恰县/null 和静县/null 尉犁县/null 和硕县/null 且末县/null 博湖县/null 轮台县/null 若羌县/null 昌吉市/null 阜康市/null 米泉市/null 奇台县/null 博乐市/null 精河县/null 温泉县/null 伊宁市/null 奎屯市/null 伊宁县/null 昭苏县/null 新源县/null 霍城县/null 巩留县/null 塔城市/null 乌苏市/null 额敏县/null 裕民县/null 沙湾县/null 托里县/null 青河县/null 富蕴县/null 福海县/null 石河子市/null 阿拉尔市/null 五家渠市/null 吐鲁番市/null 托克逊县/null 阿克苏市/null 阿瓦提县/null 岳普湖县/null 麦盖提县/null 英吉沙县/null 阿图什市/null 阿合奇县/null 阿克陶县/null 库尔勒市/null 玛纳斯县/null 呼图壁县/null 特克斯县/null 尼勒克县/null 吉木乃县/null 布尔津县/null 哈巴河县/null 阿勒泰市/null 乌鲁木齐市/null 乌鲁木齐/null 乌鲁木齐县/null 克拉玛依市/null 图木舒克市/null 吉木萨尔县/null 巴里坤哈萨克自治县/null 塔什库尔干塔吉克自治县/null 焉耆回族自治县/null 察布查尔锡伯自治县/null 木垒哈萨克自治县/null 和布克赛尔蒙古自治县/null 香港特别行政区/null 香港/null 香港人/null 中西区/null 东区/null 观塘区/null 南区/null 湾仔区/null 离岛区/null 葵青区/null 北区/null 西贡区/null 沙田区/null 屯门区/null 大埔区/null 荃湾区/null 元朗区/null 九龙城区/null 油尖旺区/null 深水埗区/null 黄大仙区/null 澳门特别行政区/null 澳门/null 澳门人/null 台湾省/null 台湾/null 台湾人/null 台北市/null 台北/null 高雄市/null 高雄/null 基隆市/null 台中市/null 台南市/null 新竹市/null 嘉义市/null 台北县/null 板桥市/null 宜兰县/null 宜兰市/null 新竹县/null 竹北市/null 桃园县/null 桃园市/null 苗栗县/null 苗栗市/null 台中县/null 丰原市/null 彰化县/null 彰化市/null 南投县/null 南投市/null 嘉义县/null 太保市/null 云林县/null 斗六市/null 台南县/null 新营市/null 高雄县/null 凤山市/null 屏东县/null 屏东市/null 台东县/null 台东市/null 花莲县/null 花莲市/null 澎湖县/null 马公市/null 滏阳河/null 河间县/null 棚户区/null RediSearch-1.2.2/src/dep/cndict/lex/lex-company.lex000066400000000000000000000032541364126773500221100ustar00rootroot00000000000000央视/null 电信/null 移动/null 网通/null 联通/null 铁通/null 百度/null 环球网/null 长城网/null 新浪/null 腾讯/null 搜搜/soso 谷歌/null 雅虎/null 微软/null 中关村/null 搜狐/null 网易/null 硅谷/null 维基百科/null 巨人网络/null 阿里巴巴/null 阿里旺旺/旺旺 旺旺/null 淘宝/null 赶集网/null 猪八戒网/null 唯你英语/null 拉手网/null 百贯福泰/null 汇划算/null 汇划算网/null 聚划算/null 天猫/null 天猫网/null 亚马逊/null 亚马逊网/null 拍拍/null 拍拍网/null 京东/null 京东商城/null 返利网/null 支付宝/null 支付宝担保/null 支付宝及时到帐/null 支付宝双工能/null 财付通/null 财付通及时到帐/null 网银在线/null 苏宁易购/null 苏宁电器/null 仙童公司/null 开源中国/null 畅想网络/null 快乐大本营/null 越策越开心/null 超级男声/null 超男/null 超级女声/超女 超女/超级女声 好声音/null 快乐男声/快男 快男/快乐男声 快乐女声/null 快女/null 德克士/null 肯德基/null 奥利奥/null 回头客/null 苏波尔/null 苏宁/null 苏宁电器/null 苏宁易购/null 中央银行/null 人民银行/null 工商银行/null 农业银行/null 中国银行/null 建设银行/null 交通银行/null 华夏银行/null 光大银行/null 招商银行/null 中信银行/null 兴业银行/null 民生银行/null 深圳发展银行/null 广东发展银行/null 上海浦东发展银行/null 恒丰银行/null 农业发展银行/null 国家进出口信贷银行/null 国家开发银行/null 北京商业银行/null 上海银行/null 济南商业银行/null 信用社/null 农村信用社/null 邮政局/null 邮政储蓄银行/null RediSearch-1.2.2/src/dep/cndict/lex/lex-dname-1.lex000066400000000000000000000015331364126773500216620ustar00rootroot00000000000000#双姓名首字词库 建 小 晓 文 志 国 玉 丽 永 海 春 金 明 新 德 秀 红 亚 伟 雪 俊 桂 爱 美 世 正 庆 学 家 立 淑 振 云 华 光 惠 兴 天 长 艳 慧 利 宏 佳 瑞 凤 荣 秋 继 嘉 卫 燕 思 维 少 福 忠 宝 子 成 月 洪 东 一 泽 林 大 素 旭 宇 智 锦 冬 玲 雅 伯 翠 传 启 剑 安 树 良 中 梦 广 昌 元 万 清 静 友 宗 兆 丹 克 彩 绍 喜 远 朝 敏 培 胜 祖 先 菊 士 向 有 连 军 健 巧 耀 莉 英 方 和 仁 孝 梅 汉 兰 松 水 江 益 开 景 运 贵 祥 青 芳 碧 婷 龙 鹏 自 顺 双 书 生 义 跃 银 佩 雨 保 贤 仲 鸿 浩 加 定 炳 飞 锡 柏 发 超 道 怀 进 其 富 平 全 阳 吉 茂 彦 诗 洁 润 承 治 焕 如 君 增 善 希 根 应 勇 宜 守 会 凯 育 湘 凌 本 敬 博 延 乐 三 高 熙 逸 幸 灵 宣 才 述 化 RediSearch-1.2.2/src/dep/cndict/lex/lex-dname-2.lex000066400000000000000000000015371364126773500216670ustar00rootroot00000000000000#双姓名尾字词库 华 平 明 英 军 林 萍 芳 玲 红 生 霞 梅 文 荣 珍 兰 娟 峰 琴 云 辉 东 龙 敏 伟 强 丽 春 杰 燕 民 君 波 国 芬 清 祥 斌 婷 飞 良 忠 新 凤 锋 成 勇 刚 玉 元 宇 海 兵 安 庆 涛 鹏 亮 青 阳 艳 松 江 莲 娜 兴 光 德 武 香 俊 秀 慧 雄 才 宏 群 琼 胜 超 彬 莉 中 山 富 花 宁 利 贵 福 发 义 蓉 喜 娥 昌 仁 志 全 宝 权 美 琳 建 金 贤 星 丹 根 和 珠 康 菊 琪 坤 泉 秋 静 佳 顺 源 珊 达 欣 如 莹 章 浩 勤 芹 容 友 芝 豪 洁 鑫 惠 洪 旺 虎 远 妮 森 妹 南 雯 奇 健 卿 虹 娇 媛 怡 铭 川 进 博 智 来 琦 学 聪 洋 乐 年 翔 然 栋 凯 颖 鸣 丰 瑞 奎 立 堂 威 雪 鸿 晶 桂 凡 娣 先 洲 毅 雅 月 旭 田 晖 方 恒 亚 泽 风 银 高 贞 九 薇 钰 城 宜 厚 耐 声 腾 宸 RediSearch-1.2.2/src/dep/cndict/lex/lex-ecmixed.lex000066400000000000000000000026111364126773500220540ustar00rootroot00000000000000#英文中文混合字, 注意英文字符均为小写 a咖/主角 a片/毛片,av a座/null a股/股票 a型/null a杯/a罩杯 a罩杯/a杯 a计划/null aa制/null ab型/null ab档案/null a美a/null a梦/null x-射线/null # b座/null b股/null b型/null b树/null b计划/null b超/null b杯/b罩杯 b罩杯/b杯 bb机/call机 bb仔/null bp机/null # c盘/null c座/null c语言/null c杯/c罩杯 c罩杯/c杯 cd盒/null cd机/null call机/bb机 # d盘/null d座/null d版/null d杯/d罩杯 d罩杯/d杯 dna鉴定/null # e盘/null e座/null e化/null e通/null e仔/null e语言/易语言 e杯/e罩杯 e罩杯/e杯 # f盘/null f座/null f杯/f罩杯 f罩杯/f杯 # g盘/null g点/null g杯/g罩杯 g罩杯/g杯 # h盘/null h股/null h杯/h罩杯 h罩杯/h杯 # i盘/null ic卡/null ip卡/null ip段/null ip电话/null ip地址/null it行业/null it民工/码农 it男/null # j盘/null # k仔/null k盘/null k党/null k书/看书,搞学习 k粉/氯胺酮 k歌/唱歌,嗨歌 k他命/null k歌之王/null # n年/很久 # o型/null # pc机/null ph值/null # sim卡/null # u盘/null u形/null usb手指/null usb接口/null usb插口/null usb记忆棒/null # visa卡/null v沟/null # z盘/null # q版/null qq号/null q立方/null # rss订阅/null # t盘/null # x光/null x光线/x射线 x射线/x光线 γ射线/null # t恤衫/t恤 t恤/t恤衫 t字帐/null t型台/null # 250g硬盘/null 160g硬盘/null 500g硬盘/null RediSearch-1.2.2/src/dep/cndict/lex/lex-en-pun.lex000066400000000000000000000001241364126773500216350ustar00rootroot00000000000000#英文和标点组合成的词,英文字母统一使用小写。 c++ g++ c# i++ x- RediSearch-1.2.2/src/dep/cndict/lex/lex-en.lex000066400000000000000000000002241364126773500210360ustar00rootroot00000000000000#英文词条, 做英文词语同义词追加用 decimal/decimals,fraction spirit/mind admire/appreciate,like,love,enjoy chenxin12/chenxin,lionsoul RediSearch-1.2.2/src/dep/cndict/lex/lex-festival.lex000066400000000000000000000065551364126773500222660ustar00rootroot00000000000000七七纪念日/null 七夕/七夕情人节,情人节,中国情人节 七夕情人节/七夕,中国情人节,情人节 七夕节/七夕,情人节,中国情人节 万圣节/鬼节 世界人权日/null 世界儿歌节/null 世界儿童节/null 世界动物日/null 世界卫生日/null 世界地球日/null 世界教师日/null 世界无烟日/null 世界无童工日/null 世界林业节/null 世界森林日/null 世界水日/null 世界海洋日/null 世界湿地日/null 世界献血日/null 世界环境日/null 世界电视日/null 世界睡眠日/null 世界粮食日/null 世界精神卫生日/null 世界红十字日/null 世界问候日/null 中国人民抗日战争纪念日/null 抗日战争纪念日/null 中国国耻日/null 中国学生营养日/null 中国爱牙日/null 中国爱耳日/null 中国青年志愿者服务日/null 中国青年节/null 中秋/null 中秋节/null 人口日/null 人权日/null 儿歌节/null 儿童节/null 元宵/null 元宵节/null 元旦/null 元旦节/null 党生日/null 全国中小学生安全教育日/null 全国助残日/null 全国爱眼日/null 全国爱耳日/null 六十亿人口日/null 六四纪念日/null 冬至/null 减轻自然灾害日/null 动物日/null 助残日/null 劳动妇女节/null 劳动节/null 博物馆日/null 卫生日/null 和平日/null 国庆/null 国庆节/null 国耻日/null 国际儿童节/null 国际减轻自然灾害日/null 国际劳动妇女节/null 国际劳动节/null 国际博物馆日/null 国际和平日/null 国际奥林匹克日/null 国际妇女节/null 国际容忍日/null 国际左撇子日/null 国际志愿者日/null 国际护士节/null 国际无车日/null 国际残疾人日/null 国际母语日/null 国际气象节/null 国际消费者权益日/null 国际牛奶日/null 国际盲人节/null 国际禁毒日/null 国际老人日/null 国际臭氧层保护日/null 国际非洲儿童日/null 国际音乐日/null 国际麻风日/null 圣诞节/null 地球日/null 处暑/null 复活节/null 夏至/null 大寒/null 大暑/null 大雪/null 奥林匹克日/null 妇女节/null 三八节/null 三八妇女节/null 学生营养日/null 安全教育日/null 安全日/null 容忍日/null 寒露/null 小寒/null 小年/null 小暑/null 小满/null 小雪/null 左撇子日/null 平安夜/null 建党日/null 建军节/null 志愿人员日/null 志愿者日/null 情人节/null 惊蛰/null 愚人节/null 感恩节/null 扫房日/null 抗日战争纪念日/null 抗日纪念日/null 护士节/null 教师日/null 教师节/null 文化遗产日/null 无烟日/null 无童工日/null 无车日/null 春分/null 春节/null 植树节/null 残疾人日/null 母亲节/null 母语日/null 气象节/null 水日/null 海洋日/null 消费者权益日/null 清明/null 清明节/null 湿地日/null 爱牙日/null 爱眼日/null 爱耳日/null 父亲节/null 牛奶日/null 独立日/null 献血日/null 环境日/null 电视日/null 白露/null 盲人节/null 睡眠日/null 秋分/null 立冬/null 立夏/null 立春/null 立秋/null 端午节/null 粮食日/null 精神卫生日/null 红十字日/null 老人日/null 联合国日/null 腊八节/null 腊日/null 臭氧保护日/null 臭氧层保护日/null 芒种/null 营养日/null 谷雨/null 重阳/null 重阳节/null 问候日/null 除夕/null 雨水/null 霜降/null 青年志愿者服务日/null 青年节/null 非洲儿童日/null 音乐日/null 麻风日/null 龙头节/null RediSearch-1.2.2/src/dep/cndict/lex/lex-flname.lex000066400000000000000000000002441364126773500217000ustar00rootroot00000000000000#西方姓氏词库 亚历山大/null 克林顿/null 克里斯汀/null 布什/null 布莱尔/null 科特勒/null 约翰/null 约翰逊/null 蒂娜/null 安妮/null RediSearch-1.2.2/src/dep/cndict/lex/lex-food.lex000066400000000000000000000002641364126773500213670ustar00rootroot00000000000000雪碧/null 可口可乐/null 冰红茶/null 奶茶/null 花生奶/null 芬达/null 珍珠奶茶/null 达利源/null 肯德鸡/null 炸薯条/null 麻辣烫/null 麻辣干锅/null RediSearch-1.2.2/src/dep/cndict/lex/lex-lang.lex000066400000000000000000000004711364126773500213610ustar00rootroot00000000000000中文/国语 国语/null 台湾话/台语 台语/台湾话 客家话/null 汉字/null 汉语/国语,中文 法文/法文 法语/法语 福建话/null 粤语/广东话 美语/英语,英文 英文/英语 英语/英文 西班牙语/null 闽南语/null 泰语/null 西班牙语/null 俄罗斯语/null 拉丁语/null RediSearch-1.2.2/src/dep/cndict/lex/lex-ln-adorn.lex000066400000000000000000000002201364126773500221420ustar00rootroot00000000000000#姓氏修饰,例如:老陈,小陈,中的老,小 #如果他已经是姓氏(lex-lname.lex中的词),则无须放在这里。 老 小 RediSearch-1.2.2/src/dep/cndict/lex/lex-lname.lex000066400000000000000000000040721364126773500215350ustar00rootroot00000000000000#中文姓氏词库 #单姓 王 李 张 刘 陈 杨 周 黄 孙 吴 徐 赵 林 胡 朱 梁 郭 高 何 马 郑 罗 宋 唐 谢 叶 韩 任 潘 于 冯 蒋 董 吕 邓 许 曹 曾 袁 汪 程 田 彭 钟 蔡 魏 沈 方 卢 余 杜 丁 苏 贾 姚 姜 陆 戴 傅 夏 廖 萧 石 江 范 今 谭 邹 崔 薛 邱 康 史 侯 邵 熊 秦 雷 孟 庞 白 毛 郝 钱 段 俞 洪 汤 顾 贺 龚 尹 万 龙 赖 章 孔 武 邢 颜 梅 阮 黎 常 倪 施 乔 樊 严 齐 陶 #向 温 文 易 兰 闫 芦 牛 尚 安 管 殷 霍 翟 佘 葛 庄 伍 辛 练 申 付 曲 焦 项 代 鲁 季 覃 覃 毕 麦 阳 耿 舒 聂 盛 童 祝 柳 单 单 岳 骆 纪 欧 房 左 尤 凌 韦 景 詹 莫 郎 路 宁 宁 关 丛 翁 容 亢 柯 鲍 蒲 苗 牟 谷 裴 商 初 屈 成 包 游 司 祁 强 靳 甘 席 瞿 卜 褚 解 臧 时 费 班 华 全 涂 卓 党 饶 应 卫 丘 隋 米 闵 畅 喻 冉 宫 甄 宣 穆 谈 匡 帅 车 母 查 戚 符 缪 昌 娄 滕 位 奚 边 卞 桂 邝 苟 柏 井 冀 邬 吉 敖 桑 池 简 蔺 连 艾 蓝 窦 刚 封 占 迟 姬 刁 栾 冷 杭 植 郁 晋 虞 佟 苑 屠 藏 蒙 占 辜 廉 巩 麻 晏 相 师 鄢 泮 燕 岑 官 仲 羊 揭 仇 邸 宗 荆 盖 盖 粱 原 茅 荣 沙 郜 巫 鞠 罡 未 来 劳 诸 计 乐 乐 双 花 冼 尉 木 丰 寇 栗 况 干 楼 满 桑 湛 谌 储 邦 皮 楚 胥 明 平 腾 厉 仉 励 竺 闻 宇 支 都 折 旷 南 战 嵇 化 糜 衣 国 逄 门 崇 裘 薄 束 宿 东 降 逯 伊 修 粟 漆 阙 禹 先 银 台 #和 祖 惠 伦 候 阚 慕 戈 富 伏 僧 习 云 元 狄 危 雍 蔚 索 居 浦 权 税 谯 於 芮 濮 基 寿 凡 卿 酆 苻 保 郗 渠 琚 淡 由 豆 扈 仁 呼 矫 巢 盘 敬 巴 茆 鱼 戎 缠 区 幸 海 弓 阴 住 晁 菅 印 汝 历 么 乌 贡 妙 禤 荀 鹿 邰 随 雒 贝 录 鲜 茹 种 农 佐 赫 字 油 #但 綦 美 利 钮 信 勾 火 昝 圣 颉 从 靖 开 公 那 山 智 补 虎 才 布 亓 药 造 普 五 仝 扆 暴 咸 庚 奕 锺 问 招 贵 巨 檀 厚 恽 过 达 邴 洛 忻 展 户 毋 暨 #复姓 欧阳 上官 司徒 刘付 皇甫 长孙 相里 令狐 诸葛 RediSearch-1.2.2/src/dep/cndict/lex/lex-main.lex000066400000000000000000112306541364126773500213760ustar00rootroot00000000000000一○五九/1059 一一/null 一一对应/null 一一映射/null 一丁不视/null 一丁不识/null 一丁点/null 一丁点儿/null 一万/1万 一下/null 一下儿/null 一下子/null 一不做/null 一不做二不休/null 一专多能/null 一世/null 一世之雄/null 一世纪/null 一丘一壑/null 一丘之貉/null 一丛/null 一东一西/null 一丝/null 一丝一毫/null 一丝不挂/null 一丝不线/null 单木不林/null 一丝不苟/null 一两句话/null 一个/null 一个个/null 一个中国政策/null 一个中心/null 一个人/null 一个劲/null 一个劲儿/null 一个又一个/null 一个巴掌拍不响/null 一个心眼儿/null 一个接一个/null 一个方面/null 一个样/null 一个萝卜一个坑/null 一中一台/null 一中全会/null 一中原则/null 一串/null 一串红/null 一具/null 一举/null 一举一动/null 一举两便/null 一举两得/null 一举千里/null 一举多得/null 一举成功/null 一举成名/null 一举手一投足/null 一举手之劳/null 一之为甚/null 一之已甚/null 一之谓甚/null 一九/null 一九九一/null 一九九七/null 一九九二/null 一九九六/null 一九九O/null 一九八七/null 一九八八/null 一书/null 一了千明/null 一了百了/null 一了百当/null 一事/null 一事无成/null 一二/null 一二九运动/null 一二八事变/null 一二十年/null 一五一十/null 一些/null 一些人/null 一些单位/null 一亮/null 一人/null 一人之下/null 一人之交/null 一人传虚/null 万人传实/null 一人做事一人当/null 一人得道/null 一人得道/null 鸡犬升天/null 一人班/null 一亿/null 一介/null 一介不取/null 一仍旧贯/null 一代/null 一代人/null 一代宗臣/null 一代新人/null 一代楷模/null 一代风流/null 一代鼎臣/null 一以当十/null 一以贯之/null 一件/null 一件式/null 一价/null 一任/null 一份/null 一伙/null 一伙人/null 一伙儿/null 一会/null 一会儿/null 一传十/null 一位/null 一体/null 一体两面/null 一体化/null 一佛出世/null 二佛升天/null 一例/null 一依旧式/null 一侧/null 一侧化/null 一便/null 一倍/null 一倡三叹/null 一倡百和/null 一偏/null 一偏之见/null 一停/null 一傅众咻/null 一元/null 一元化/null 一元方程/null 一元论/null 一元醇/null 一兆/null 一党/null 一党专制/null 一六○五/null 一共/null 一兵/null 一册/null 一再/null 一再强调/null 一再说明/null 一决胜负/null 一决雌雄/null 一冷/null 一准/null 一击/null 一击入洞/null 一刀/null 一刀两断/null 一刀两段/null 一刀切/null 一分/null 一分为二/null 一分子/null 一分收获/null 一分耕耘/null 一分钟/null 一分钱/null 一分钱一分货/null 一分钱两分货/null 一切/null 一切事/null 一切事物/null 一切从严/null 一切众生/null 一切向钱看/null 一切就绪/null 一切险/null 一划/null 一列/null 一则/null 一则以喜/null 一则以惧/null 一到/null 一刹那/null 一刻/null 一刻千金/null 一刻钟/null 一剂/null 一前一后/null 一副/null 一力/null 一力承当/null 一动/null 一动不动/null 一动不如一静/null 一劳久逸/null 一劳永逸/null 一勇之夫/null 一包/null 一化三改/null 一匙/null 一匡天下/null 一匹/null 一区/null 一千/null 一千万/null 一千个/null 一千年/null 一千零一夜/null 一半/null 一半儿/null 一半天/null 一卡通/null 一卷/null 一卷布/null 一厘一毫/null 一厢情愿/null 一去/null 一去不回/null 一去不复返/null 一去无影踪/null 一双/null 一双两好/null 一双鞋/null 一反/null 一反常态/null 一发/null 一发千钧/null 一款/null 一口/null 一口两匙/null 一口吸尽西江水/null 一口咬定/null 一口气/null 一口气儿/null 一口钟/null 一古脑儿/null 一句/null 一句话/null 一只/null 一只眼/null 一叫/null 一台/null 一叶/null 一叶知秋/null 一叶落知天下秋/null 一叶蔽目/null 一叶蔽目不见泰山/null 一叶障目/null 不见泰山/null 一叶障目不见泰山/null 一号/null 一号木杆/null 一号电池/null 一同/null 一名/null 一吐/null 一吐为快/null 一向/null 一吨/null 一听/null 一吸/null 一吹/null 一员/null 一周/null 一味/null 一呼百应/null 一呼百诺/null 一命呜呼/null 一咏一觞/null 一品/null 一品红/null 一品锅/null 一哄而上/null 一哄而散/null 一哄而起/null 一唱一和/null 一喷一醒/null 一回/null 一回事/null 一回生/null 一团/null 一团和气/null 一团漆黑/null 一团火/null 一团糟/null 一团糟摊子/null 一国三公/null 一国两制/null 一圈/null 一在/null 一地/null 一地方/null 一场/null 一场春梦/null 一场空/null 一场虚惊/null 一块/null 一块儿/null 一块糖/null 一块钱/null 一块面/null 一堂/null 一堆/null 一堆沙/null 一堵/null 一塌刮子/null 一塌糊涂/null 一墩/null 一壁/null 一壁厢/null 一声/null 一声不吭/null 一声不响/null 一声令下/null 一壶/null 一壶千金/null 一处/null 一夔已足/null 一多对应/null 一夜/null 一夜之间/null 一夜夫妻百夜恩/null 一夜夫妻百日恩/null 一夜情/null 一夜被蛇咬/null 一夜露水/null 一大/null 一大二公/null 一大半/null 一大堆/null 一大帮/null 一大批/null 一大早/null 一大早儿/null 一大步/null 一大群/null 一大阵/null 一天/null 一天一个样/null 一天到晚/null 一天星斗/null 一夫/null 一夫一妻/null 一夫一妻制/null 一夫制/null 一夫当关/null 万夫莫开/null 一夫当关万夫莫开/null 一失足成千古恨/null 一头/null 一头儿沉/null 一头栽进/null 一头雾水/null 一夺/null 一套/null 一女/null 一如/null 一如所料/null 一如既往/null 一妻/null 一妻制/null 一孔/null 一孔之见/null 一字/null 一字一板/null 一字一泪/null 一字一珠/null 一字不提/null 一字不苟/null 一字不识/null 一字之师/null 一字值千金/null 一字千金/null 一字巾/null 一字褒贬/null 一字长蛇阵/null 一季/null 一季度/null 一官半职/null 一定/null 一定不易/null 一定不移/null 一定之规/null 一定程度/null 一定要/null 一定量/null 一审/null 一客不犯二主/null 一家/null 一家一计/null 一家之主/null 一家之言/null 一家之论/null 一家之说/null 一家人/null 一家子/null 一家眷属/null 一家老小/null 一寒如此/null 一寸/null 一寸丹心/null 一寸光阴/null 一寸光阴一寸金/null 一寸赤心/null 一对/null 一对一/null 一对一斗牛/null 一对儿/null 一对多/null 一封/null 一封信/null 一将功成万骨枯/null 一将难求/null 一尊/null 一小儿/null 一小口/null 一小撮/null 一小时/null 一小群/null 一小部分/null 一小阵儿/null 一尘不染/null 一就/null 一尺/null 一局/null 一层/null 一届/null 一屋/null 一展/null 一展身手/null 一岁/null 一岁三迁/null 一岁九迁/null 一岛/null 一差二误/null 一差二错/null 一己/null 一己之私/null 一己之见/null 一巴掌/null 一市/null 一帆风顺/null 一带/null 一带而过/null 一席之地/null 一席话/null 一席谈/null 一帮/null 一帮人/null 一帽子/null 一幅/null 一幕/null 一幢/null 一干/null 一干一方/null 一干二净/null 一平二调/null 一年/null 一年一度/null 一年一次/null 一年两次/null 一年之计在于春/null 一年到头/null 一年到尾/null 一年半/null 一年半载/null 一年四季/null 一年多/null 一年多来/null 一年期/null 一年比一年/null 一年生/null 一朝被蛇咬/一年被蛇咬 一年被蛇咬/一朝被蛇咬 十年怕井绳/null 一年被蛇咬十年怕井绳/null 一并/null 一并处理/null 一床两好/null 一床锦被遮盖/null 一应/null 一应俱全/null 一度/null 一座/null 一座皆惊/null 一廉如水/null 一式/null 一式二份/null 一张/null 一张一弛/null 一张一驰/null 一弹指倾/null 一弹指顷/null 一往/null 一往情深/null 一往无前/null 一径/null 一律/null 一得/null 一得之功/null 一得之愚/null 一得之见/null 一德一心/null 一心/null 一心一德/null 一心一意/null 一心一计/null 一心挂两头/null 一心无二/null 一忍再忍/null 一念/null 一念之差/null 一念之错/null 一忽/null 一忽儿/null 一怒之下/null 一怔/null 一总/null 一息奄奄/null 一息尚存/null 一悲一喜/null 一惊/null 一惊一乍/null 一想/null 一愁莫展/null 一意/null 一意孤行/null 一愣/null 一成/null 一成一旅/null 一成不变/null 一战/null 一户/null 一房一厅/null 一手/null 一手一足/null 一手交货/null 一手交钱/null 一手包办/null 一手包揽/null 一手宽/null 一手遮天/null 一打/null 一扔/null 一扫/null 一扫而光/null 一扫而空/null 一批/null 一技之长/null 一把/null 一把手/null 一把抓/null 一把死拿/null 一把汗/null 一把钥匙开一把锁/null 一抖/null 一折/null 一折两段/null 一抹/null 一担/null 一拉/null 一拍/null 一拍两散/null 一拍即合/null 一拐/null 一拖/null 一招/null 一拥而上/null 一拥而入/null 一拨儿/null 一拳/null 一拽/null 一指/null 一按/null 一挥而就/null 一挥而成/null 一捅就破/null 一捆/null 一排/null 一排排/null 一探/null 一推/null 一掬同情之泪/null 一掷/null 一掷千金/null 一掷百万/null 一提/null 一揽子/null 一搏/null 一搭一档/null 一摔/null 一摞/null 一撇/null 一撮/null 一支/null 一改故辙/null 一整套/null 一文/null 一文不值/null 一文不名/null 一文如命/null 一文钱难倒英雄汉/null 一斑/null 一斗/null 一斤/null 一新/null 一方/null 一方有难八方支援/null 一方面/null 一旁/null 一族/null 一无/null 一无可取/null 一无忌惮/null 一无所动/null 一无所好/null 一无所得/null 一无所成/null 一无所有/null 一无所求/null 一无所知/null 一无所能/null 一无所获/null 一无所长/null 一无所闻/null 一无是处/null 一无长物/null 一日/null 一日万机/null 一日三秋/null 一日三餐/null 一日不见/null 如隔三秋/null 一日不见如隔三秋/null 一日为师/null 一日之长/null 一日之雅/null 一日千里/null 一旦/null 一早/null 一时/null 一时一事/null 一时一刻/null 一时之秀/null 一时之选/null 一时半会/null 一时半会儿/null 一时半刻/null 一时半晌/null 一时半霎/null 一时间/null 一星儿/null 一星半点/null 一星期/null 一是/null 一昼夜/null 一晃/null 一景/null 一暴十寒/null 一曝十寒/null 一曲/null 一曲阳关/null 一更/null 一月/null 一月份/null 一服/null 一望/null 一望无垠/null 一望无际/null 一望而知/null 一朝/null 一朝一夕/null 一朝权在手/null 一朝被蛇咬/null 一期/null 一木难扶/null 一木难支/null 一本/null 一本万利/null 一本正经/null 一朵/null 一杆进洞/null 一束/null 一条/null 一条心/null 一条藤儿/null 一条街/null 一条鞭法/null 一条龙/null 一条龙服务/null 一来/null 一来一往/null 一来二去/null 一杯/null 一杯奶/null 一杯汤/null 一杯羹/null 一板一眼/null 一板三眼/null 一板正经/null 一枕黄粱/null 一枚/null 一枝独秀/null 一枪/null 一架/null 一柱擎天/null 一栏/null 一树百获/null 一栖两雄/null 一株/null 一样/null 一根筋/null 一格/null 一桌/null 一桶/null 一桶水/null 一棍打一船/null 一棒一条痕/null 一楼/null 一概/null 一概而言/null 一概而论/null 一榻糊涂/null 一模一样/null 一次/null 一次函数/null 一次又一次/null 一次性/null 一次总付/null 一次方程/null 一次方程式/null 一次生/null 一步/null 一步一个脚印/null 一步一趋/null 一步一鬼/null 一步到位/null 一步摄影/null 一步登天/null 一死一生/null 一死百了/null 一段/null 一段时间/null 一比/null 一毛不拔/null 一毛钱/null 一毫/null 一民同俗/null 一气/null 一气之下/null 一气呵成/null 一氧/null 一氧化二氮/null 一氧化氮/null 一氧化碳/null 一水儿/null 一沐三捉发/null 一波三折/null 一波又起/null 一波未平/null 一波未平一波又起/null 一泻千里/null 一派/null 一派谎言/null 一流/null 一浆十饼/null 一浪/null 一清二楚/null 一清二白/null 一清如水/null 一清早/null 一溜儿/null 一溜烟/null 一溜烟儿/null 一滑/null 一满匙/null 一满碗/null 一滴/null 一滴水/null 一潭死水/null 一灵真性/null 一炉/null 一炮/null 一炮打响/null 一点/null 一点一滴/null 一点一点/null 一点不/null 一点也不/null 一点儿/null 一点水一个泡/null 一点灵犀/null 一点点/null 一点邻域/null 一片/null 一片丹心/null 一片冰心/null 一片地/null 一片天/null 一片宫商/null 一片散沙/null 一片汪洋/null 一片至诚/null 一片赤心/null 一牛吼地/null 一物/null 一物一主/null 一物一制/null 一物不知/null 一物降一物/null 一犯再犯/null 一狐之腋/null 一环/null 一环扣一环/null 一环紧扣一环/null 一班/null 一琴一鹤/null 一瓶/null 一生/null 一生一世/null 一生中/null 一甲子/null 一番/null 一番话/null 一病不起/null 一瘸/null 一百/null 一百一/null 一百万/null 一百二十行/null 一百年/null 一盅/null 一盏/null 一盒/null 一盘/null 一盘散沙/null 一盘棋/null 一目了然/null 一目十行/null 一直/null 一直以来/null 一直往前/null 一直是/null 一相情愿/null 一看/null 一眨/null 一眨眼/null 一眨眼间/null 一眼/null 一眼望去/null 一眼看穿/null 一眼见得/null 一着/null 一着不慎/null 满盘皆输/null 一着不慎满盘皆输/null 一睹/null 一睹为快/null 一瞑不视/null 一瞥/null 一瞬/null 一瞬间/null 一矢中的/null 一知半解/null 一石二鸟/null 一码事/null 一砍二主/null 一砍二家/null 一砸/null 一碗/null 一碟/null 一碰/null 一神/null 一神教/null 一神论/null 一秉虔诚/null 一种/null 一秒/null 一秘/null 一程/null 一程子/null 一稿/null 一穷二白/null 一空/null 一窍不通/null 一窝/null 一窝蜂/null 一章/null 一端/null 一笑/null 一笑了之/null 一笑千金/null 一笑置之/null 一笔/null 一笔不苟/null 一笔勾销/null 一笔抹倒/null 一笔抹杀/null 一笔抹煞/null 一等/null 一等功/null 一等品/null 一等奖/null 一筹莫展/null 一箍节儿的零吃/null 一算/null 一箪一瓢/null 一箭之仇/null 一箭之地/null 一箭双雕/null 一箱/null 一篇/null 一篮/null 一簇/null 一簇簇/null 一簧两舌/null 一类/null 一类保护动物/null 一粒/null 一粒砂/null 一系列/null 一索得男/null 一索成男/null 一级/null 一级企业/null 一级士官/null 一级头/null 一级方程式/null 一级棒/null 一纸空文/null 一线/null 一线之间/null 一线希望/null 一线微光/null 一组/null 一组人/null 一经/null 一绝/null 一统/null 一维/null 一缕/null 一缕烟/null 一罐/null 一网打尽/null 一群/null 一群人/null 一群牛/null 一群羊/null 一翻/null 一翼/null 一者/null 一而/null 一而再/null 一而再再而三/null 一而再地/null 一联/null 一聚枯骨/null 一肚子气/null 一肥股/null 一股/null 一股劲儿/null 一股子/null 一股脑/null 一股脑儿/null 一胎/null 一胎制/null 一胎化/null 一脉相传/null 一脉相承/null 一脉相通/null 一脚/null 一脸/null 一腔热血/null 一臂之力/null 一至于此/null 一致/null 一致字/null 一致性/null 一致性效应/null 一致意见/null 一致百虑/null 一致认为/null 一致资源定址器/null 一致通过/null 一般/null 一般人/null 一般以/null 一般化/null 一般原则/null 一般地讲/null 一般地说/null 一般应/null 一般性/null 一般指/null 一般无二/null 一般来讲/null 一般来说/null 一般比/null 一般用/null 一般的说/null 一般等价物/null 一般而言/null 一般见识/null 一般规定/null 一般词汇/null 一般说来/null 一般贸易/null 一色/null 一节/null 一节诗/null 一节课/null 一花独放/null 一草一木/null 一花一草/null 一落千丈/null 一虎难敌众犬/null 一蟹不如一蟹/null 一行/null 一行人/null 一行作吏/null 一行诗/null 一衣带水/null 一表人才/null 一表人材/null 一表人物/null 一表非俗/null 一表非凡/null 一袋/null 一见/null 一见倾心/null 一见如故/null 一见钟情/null 一见高低/null 一视同仁/null 一览/null 一览无余/null 一览无遗/null 一览表/null 一觉/null 一觉醒来/null 一角/null 一角银币/null 一觞一咏/null 一触即发/null 一触即溃/null 一言/null 一言一动/null 一言一行/null 一言不发/null 一言两语/null 一言丧邦/null 一言中的/null 一言为定/null 一言为重/null 一言九鼎/null 一言以蔽/null 一言以蔽之/null 一言兴邦/null 一言千金/null 一言半句/null 一言半字/null 一言半语/null 一言堂/null 一言定交/null 一言抄百总/null 一言既出/null 驷马难追/null 一言既出驷马难追/null 一言而定/null 一言蔽之/null 一言订交/null 一言难尽/null 一言难罄/null 一语/null 一语不发/null 一语中人/null 一语中的/null 一语双关/null 一语破的/null 一语道破/null 一误再误/null 一说/null 一诺千金/null 一读/null 一课/null 一谦四益/null 一貌倾城/null 一貌堂堂/null 一败如水/null 一败涂地/null 一贫如洗/null 一贯/null 一贯性/null 一贯方针/null 一贯道/null 一走/null 一走了之/null 一起/null 一趟/null 一跃/null 一跃而起/null 一路/null 一路上/null 一路发/null 一路平安/null 一路来/null 一路福星/null 一路顺风/null 一路领先/null 一路风尘/null 一跳/null 一蹴即至/null 一蹴可几/null 一蹴而就/null 一蹴而得/null 一蹶不振/null 一身/null 一身两役/null 一身二任/null 一身作事一人当/null 一身是胆/null 一身汗/null 一车/null 一轨同风/null 一转/null 一转眼/null 一轮/null 一较高下/null 一辆/null 一辈/null 一辈子/null 一辞莫赞/null 一边/null 一边倒/null 一进/null 一连/null 一连串/null 一连气儿/null 一迭连声/null 一退六二五/null 一选/null 一通/null 一通百通/null 一遍/null 一遍又一遍/null 一道/null 一道菜/null 一部/null 一部分/null 一酬一酢/null 一醉/null 一针/null 一针见血/null 一钱不值/null 一钱不落虚空地/null 一钱如命/null 一锅/null 一锅粥/null 一错再错/null 一锤/null 一锤定音/null 一键/null 一锹/null 一长一短/null 一长制/null 一长半短/null 一门/null 一门心思/null 一闪/null 一闪念/null 一闪而过/null 一问/null 一问三不知/null 一间/null 一队/null 一坨/null 一阵/null 一阵子/null 一阵烟/null 一阵风/null 一阶半级/null 一阶半职/null 一院/null 一隅/null 一隅三反/null 一隅之地/null 一集/null 一零儿/null 一霎/null 一霎时/null 一霎眼/null 一霎间/null 一面/null 一面之交/null 一面之缘/null 一面之识/null 一面之词/null 一面之辞/null 一面之雅/null 一面倒/null 一面如旧/null 一音/null 一音节/null 一页/null 一顶/null 一项/null 一项一项地/null 一顺儿/null 一顾倾人/null 一顾倾城/null 一顿/null 一顿饭/null 一颗/null 一颦一笑/null 一风吹/null 一飞冲天/null 一餐/null 一饭千金/null 一饮/null 一馈十起/null 一首/null 一马/null 一马一鞍/null 一马平川/null 一马当先/null 一骨碌/null 一鳞一爪/null 一鳞半爪/null 一鳞半甲/null 一鳞片甲/null 一鸣惊人/null 一麾出守/null 一鼓作气/null 一鼓而下/null 一鼻子灰/null 一鼻孔出气/null 一齐/null 一齐二整/null 一齐天下/null 一龙一猪/null 一龙一蛇/null 一龙九种/null 一试/null 丁一卯二/null 丁一确二/null 丁丁/null 丁丁炒面/null 丁丑/null 丁东/null 丁二烯/null 丁二醇/null 丁亥/null 丁人/null 丁克/null 丁内酯/null 丁冬/null 丁加奴/null 丁卯/null 丁口册/null 丁坝/null 丁型肝炎/null 丁基/null 丁基橡胶/null 丁夜/null 丁字/null 丁字尺/null 丁字梁/null 丁字步/null 丁字街/null 丁字裤/null 丁字路/null 丁字镐/null 丁宁/null 丁宠家庭/null 丁客/null 丁巳/null 丁当/null 丁忧/null 丁是丁卯是卯/null 丁未/null 丁村人/null 丁汝昌/null 丁点/null 丁点儿/null 丁烯/null 丁烯二酸/null 丁烷/null 丁玲/null 丁磊/null 丁种维生素/null 丁税/null 丁笨橡胶/null 丁糖/null 丁肇中/null 丁腈橡胶/null 丁艰/null 丁苯/null 丁苯橡胶/null 丁酉/null 丁酸/null 丁醇/null 丁醛/null 丁零/null 丁零当啷/null 丁青/null 丁韪良/null 丁香/null 丁香花/null 丁骨牛排/null 丁鲷/null 七一/null 七一五反革命政变/null 七七/null 七七事变/null 七七八八/null 七万/null 七上八下/null 七上八落/null 七个/null 七中全会/null 七事/null 七五/null 七五期间/null 七五计划/null 七人/null 七件/null 七倍/null 七八/null 七分/null 七分之一/null 七分之三/null 七分之二/null 七分之五/null 七分之六/null 七分之四/null 七区/null 七十/null 七十一/null 七十七/null 七十七国集团/null 七十三/null 七十个/null 七十九/null 七十二/null 七十二行/null 七十五/null 七十人/null 七十八/null 七十六/null 七十四/null 七十岁/null 七十年/null 七十年代/null 七千/null 七千万/null 七只/null 七台/null 七台河/null 七叶树/null 七号/null 七号电池/null 七君子事件/null 七和弦/null 七喜/null 七嘴八张/null 七嘴八舌/null 七国/null 七国之乱/null 七国集团/null 七堵/null 七堵区/null 七声/null 七声音阶/null 七大/null 七大工业国集团/null 七天/null 七头/null 七姊妹星团/null 七孔/null 七孔生烟/null 七寸/null 七层架构/null 七届/null 七巧板/null 七带石斑鱼/null 七年/null 七年战争/null 七度/null 七弦琴/null 七弯八曲/null 七彩/null 七律/null 七情/null 七情六欲/null 七手八脚/null 七扭八歪/null 七折八扣/null 七拉八扯/null 七拼八凑/null 七挑八选/null 七擒七纵/null 七擒八纵/null 七政四余/null 七方/null 七日/null 七日热/null 七时/null 七星/null 七星区/null 七曜/null 七月/null 七月份/null 七条/null 七楼/null 七横八竖/null 七步之才/null 七步成章/null 七步格/null 七武士/null 七死八活/null 七段/null 七河州/null 七点/null 七爷八爷/null 七狼八狈/null 七病八痛/null 七百/null 七百万/null 七碳糖/null 七窍/null 七窍生烟/null 七级浮屠/null 七纵七擒/null 七绝/null 七美/null 七美乡/null 七老八十/null 七股/null 七股乡/null 七色/null 七色板/null 七荤八素/null 七行/null 七角/null 七角形/null 七言律诗/null 七言诗/null 七路/null 七边形/null 七里河/null 七里河区/null 七重奏/null 七长八短/null 七雄/null 七零/null 七零八碎/null 七零八落/null 七青八黄/null 七面体/null 七音/null 七项全能/null 七颠八倒/null 七高八低/null 七魄/null 七鳃鳗/null 七龙珠/null 万一/null 万万/null 万万千千/null 万万没有想到/null 万丈/null 万丈深渊/null 万丈高楼平地起/null 万不失一/null 万不得已/null 万世/null 万世一时/null 万世师表/null 万世流芳/null 万个/null 万丹/null 万丹乡/null 万事/null 万事万物/null 万事亨通/null 万事俱备/null 万事俱备只欠东风/null 万事具备/null 万事大吉/null 万事如意/null 万事开头难/null 万事得/null 万事皆备/null 万事达/null 万事通/null 万亩/null 万人/null 万人之上/null 万人之敌/null 万人敌/null 万人空巷/null 万亿/null 万代/null 万代一时/null 万代兰/null 万代千秋/null 万件/null 万伏/null 万众/null 万众一心/null 万众瞩目/null 万位/null 万余/null 万俟/null 万倍/null 万儿八千/null 万元/null 万元户/null 万全/null 万全之策/null 万全之计/null 万军/null 万分/null 万分之/null 万分痛苦/null 万别千差/null 万剐千刀/null 万劫不复/null 万千/null 万华/null 万华区/null 万博省/null 万历/null 万县/null 万县地区/null 万县市/null 万县港/null 万双/null 万变/null 万变不离其宗/null 万古/null 万古千秋/null 万古流芳/null 万古长存/null 万古长新/null 万古长春/null 万古长青/null 万名/null 万向/null 万向节/null 万吨/null 万吨水压机/null 万国/null 万国博览会/null 万国宫/null 万国码/null 万国邮政联盟/null 万国邮联/null 万圣节前夕/null 万场/null 万块/null 万处/null 万夫/null 万夫不当/null 万夫莫开/null 万夫莫当/null 万头/null 万头钻动/null 万字/null 万宁/null 万安/null 万宝路/null 万家/null 万家乐/null 万家灯火/null 万家生佛/null 万寿山/null 万寿无疆/null 万山/null 万山镇/null 万岁/null 万岁千秋/null 万岸/null 万峦/null 万峦乡/null 万州/null 万年/null 万年历/日历 万年青/null 万幸/null 万应/null 万应灵丹/null 万应药/null 万应锭/null 万念俱灰/null 万恶/null 万恶之源/null 万恶滔天/null 万户/null 万户侯/null 万户千门/null 万斤/null 万方/null 万无/null 万无一失/null 万春/null 万智牌/null 万有/null 万有引力/null 万机/null 万条/null 万柏林/null 万柏林区/null 万死一生/null 万死不辞/null 万段/null 万民/null 万水千山/null 万泉河/null 万洋山/null 万流景仰/null 万源/null 万灵丹/null 万灵节/null 万灵药/null 万物/null 万物有灵论/null 万状/null 万狞年交/null 万用/null 万用刀/null 万用电表/null 万用表/null 万盛/null 万目睽睽/null 万确/null 万福/null 万福玛丽亚/null 万秀区/null 万端/null 万箭攒心/null 万箭穿心/null 万籁/null 万籁俱寂/null 万籁无声/null 万类/null 万紫千红/null 万红千紫/null 万绪千头/null 万绪千端/null 万维天罗地网/null 万维网/null 万维网联合体/null 万缕千丝/null 万能/null 万能曲尺/null 万能梗/null 万能梗犬/null 万能的/null 万能胶/null 万能钥匙/null 万般/null 万般无奈/null 万艾可/null 万花/null 万花筒/null 万苦千辛/null 万荣/null 万荣乡/null 万虑/null 万言/null 万语千言/null 万象/null 万象包罗/null 万象更新/null 万象森罗/null 万豪/null 万贯/null 万贯家财/null 万赫/null 万载/null 万载千秋/null 万辆/null 万通/null 万邦/null 万里/null 万里乡/null 万里江山/null 万里石塘/null 万里追踪/null 万里长城/null 万里长征/null 万里长江/null 万里鹏程/null 万金/null 万金油/null 万隆/null 万隆会议/null 万隆会议十项原则/null 万难/null 万顷/null 万马千军/null 万马奔腾/null 万马皆喑/null 万马齐喑/null 万齐融/null 丈义/null 丈二/null 丈二金刚/null 丈人/null 丈夫/null 丈夫似/null 丈母/null 丈母娘/null 丈量/null 三一律/null 三七/null 三七二十一/null 三七仔/null 三七开/null 三七开定论/null 三万/null 三丈/null 三三两两/null 三三五五/null 三三制/null 三三制政权/null 三下五除二/null 三不/null 三不主义/null 三不知/null 三不管/null 三世/null 三两/null 三个/null 三个世界/null 三个代表/null 三个女人一个墟/null 三个女人一台戏/null 三个字/null 三个月/null 三个臭皮匠/null 三中全会/null 三义/null 三义乡/null 三九/null 三九一一/null 三九天/null 三五/null 三五成群/null 三井/null 三亲六故/null 三亲六眷/null 三亲四眷/null 三人/null 三人口气/null 三人成虎/null 三人行/null 三人行必有我师/null 三人间/null 三亿/null 三仇/null 三从四德/null 三代/null 三代同堂/null 三令五申/null 三件/null 三件套式西装/null 三价/null 三份/null 三伏/null 三伏天/null 三位/null 三位一体/null 三位博士/null 三位数/null 三体/null 三体问题/null 三侠五义/null 三便士/null 三倍/null 三倍性/null 三催四请/null 三元/null 三元区/null 三元运算/null 三元醇/null 三元里/null 三光/null 三光政策/null 三八/null 三八国际妇女节/null 三八红旗手/null 三八线/null 三六九等/null 三军/null 三农/null 三农问题/null 三出/null 三分/null 三分之一/null 三分之二/null 三分法/null 三分熟/null 三分象人七分象鬼/null 三分钟热度/null 三分鼎立/null 三分鼎足/null 三副/null 三包/null 三化螟/null 三北/null 三十/null 三十一/null 三十七/null 三十万/null 三十三/null 三十个/null 三十九/null 三十二/null 三十二位元/null 三十五/null 三十人/null 三十八/null 三十八度线/null 三十六/null 三十六字母/null 三十六招走为上招/null 三十六策走为上策/null 三十六计/null 三十四/null 三十年/null 三十年代/null 三十而立/null 三千/null 三千珠履/null 三原/null 三原则/null 三原色/null 三厢/null 三叉/null 三叉戟/null 三叉神经/null 三叉路口/null 三反/null 三反五反运动/null 三反运动/null 三叠系/null 三叠纪/null 三口/null 三句/null 三句半/null 三句话不离本行/null 三只/null 三只手/null 三台/null 三叶形/null 三叶星云/null 三叶草/null 三叶虫/null 三号/null 三号木杆/null 三号电池/null 三合一/null 三合一疫苗/null 三合会/null 三合土/null 三合房/null 三合星/null 三合板/null 三同/null 三名/null 三吴/null 三味线/null 三和土/null 三和弦/null 三和音/null 三围/null 三国/null 三国史记/null 三国志/null 三国时代/null 三国演义/null 三地/null 三地门/null 三地门乡/null 三复斯言/null 三夏/null 三夜/null 三大/null 三大作风/null 三大差别/null 三大法宝/null 三大革命运动/null 三天/null 三天不打/null 三天两头/null 三头/null 三头两绪/null 三头六臂/null 三头对证/null 三头肌/null 三夷教/null 三好/null 三好两歉/null 三好学生/null 三好生/null 三姑/null 三姑六婆/null 三孔/null 三字经/null 三季度/null 三季稻/null 三官大帝/null 三宝/null 三家/null 三家村/null 三寸/null 三寸不烂之舌/null 三寸之舌/null 三对三斗牛/null 三尖杉酯碱/null 三尺/null 三局/null 三局两胜/null 三层/null 三屉桌/null 三届/null 三山/null 三山区/null 三岁/null 三岔口/null 三岔路口/null 三岛由纪夫/null 三峡/null 三峡大坝/null 三峡库/null 三峡水库/null 三峡镇/null 三差五错/null 三幅/null 三平二满/null 三年/null 三年不窥园/null 三年之艾/null 三年五载/null 三年怕井绳/null 三废/null 三度/null 三座大山/null 三开/null 三张/null 三弦/null 三弦琴/null 三强/null 三归依/null 三得利/null 三心两意/null 三心二意/null 三态/null 三思/null 三思而后行/null 三思而行/null 三成/null 三户亡秦/null 三把火/null 三折之肱/null 三折肱为良医/null 三拇指/null 三拗汤/null 三振/null 三接头/null 三推六问/null 三教/null 三教九流/null 三文鱼/null 三斜/null 三方面/null 三日/null 三日打鱼两日晒网/null 三旬九食/null 三时/null 三明/null 三明治/null 三星/null 三星乡/null 三星集团/null 三春/null 三春柳/null 三昧/null 三是/null 三更/null 三更半夜/null 三曹/null 三月/null 三月份/null 三月街/null 三朋四友/null 三朝/null 三朝元老/null 三期/null 三权分立/null 三束/null 三条/null 三板/null 三极管/null 三查三整运动/null 三框栏/null 三棱/null 三棱草/null 三棱镜/null 三楼/null 三槐九棘/null 三次/null 三次幂/null 三次方/null 三次方程/null 三次曲线/null 三步/null 三段/null 三段式/null 三段论/null 三毛/null 三毛猫/null 三民/null 三民主义/null 三民乡/null 三民区/null 三氟化硼/null 三氧/null 三氯化磷/null 三氯化铁/null 三氯已烯/null 三氯已烷/null 三氯氧磷/null 三氯甲烷/null 三水/null 三水区/null 三水县/null 三求四恳/null 三江平原/null 三江并流/null 三江源/null 三江生态旅游区/null 三沐三熏/null 三河/null 三河县/null 三法司/null 三洋/null 三流/null 三流九等/null 三浦梅园/null 三温暖/null 三湾/null 三湾乡/null 三灾八难/null 三点/null 三点会/null 三点水/null 三焦/null 三熏三沐/null 三牲/null 三环/null 三班倒/null 三班六房/null 三班制/null 三瓦两舍/null 三瓦四舍/null 三生有幸/null 三用表/null 三田/null 三男四女/null 三略/null 三番两次/null 三番五次/null 三番四复/null 三白草/null 三百/null 三百万/null 三百六十行/null 三百年/null 三皇/null 三皇五帝/null 三皇炮捶/null 三相/null 三相交流电/null 三硝基甲苯/null 三碳糖/null 三磷酸腺苷/null 三秋/null 三种/null 三穗/null 三窟狡兔/null 三竿日上/null 三等/null 三等分/null 三等分角/null 三等功/null 三等奖/null 三箱/null 三类/null 三索锦蛇/null 三级/null 三级士官/null 三级片/null 三级管/null 三级跳/null 三级跳远/null 三纲五常/null 三纸无驴/null 三线/null 三线八角/null 三结合/null 三绝韦编/null 三维/null 三维空间/null 三缄其口/null 三翼/null 三老四严/null 三者间/null 三联/null 三联书店/null 三联单/null 三联管/null 三聚/null 三聚氰胺/null 三股/null 三胚层动物/null 三胞胎/null 三脚/null 三脚两步/null 三脚架/null 三脚猫/null 三膲/null 三自/null 三自教会/null 三自爱国教会/null 三色/null 三色堇/null 三色版/null 三色猫/null 三色紫罗兰/null 三节/null 三芝/null 三芝乡/null 三花脸/null 三苏/null 三茶六饭/null 三菱/null 三藏/null 三藏法师/null 三藩之乱/null 三藩叛乱/null 三藩市/null 三衅三沐/null 三行/null 三角/null 三角债/null 三角关系/null 三角凳/null 三角函数/null 三角学/null 三角尺/null 三角巾/null 三角座/null 三角形/null 三角恋爱/null 三角恐龙/null 三角方程/null 三角旗/null 三角板/null 三角枫/null 三角架/null 三角柱体/null 三角法/null 三角洲/null 三角测量法/null 三角肌/null 三角腹带/null 三角裤/null 三角裤衩/null 三角贸易/null 三角钉/null 三角铁/null 三角锥/null 三角龙/null 三言两句/null 三言两语/null 三言二拍/null 三言五语/null 三豕涉河/null 三豕渡河/null 三貂角/null 三贞九烈/null 三资/null 三资企业/null 三起/null 三足乌/null 三足金乌/null 三足鼎立/null 三跪九叩/null 三路/null 三轮/null 三轮车/null 三轮车夫/null 三边/null 三边形/null 三连冠/null 三连胜/null 三连音/null 三迭纪/null 三通/null 三通一平/null 三通阀/null 三道/null 三部/null 三部分/null 三部曲/null 三都县/null 三酸甘油酯/null 三里屯/null 三里河/null 三重/null 三重县/null 三重奏/null 三重市/null 三键/null 三长两短/null 三门/null 三门峡/null 三阿姨/null 三陪小姐/null 三集/null 三青团/null 三面/null 三面体/null 三音/null 三音度/null 三音步/null 三音节/null 三顶/null 三项/null 三项全能/null 三项全能运动/null 三项式/null 三顾其门而不入/null 三顾茅庐/null 三餐/null 三马同槽/null 三驾马车/null 三魂/null 三魂七魄/null 三鲜/null 三鹿/null 三鹿集团/null 上一/null 上一个/null 上一劝百/null 上一次/null 上一阶段/null 上一页/null 上万/null 上上/null 上上下下/null 上上之策/null 上下/null 上下一心/null 上下一致/null 上下五千年/null 上下交困/null 上下其手/null 上下午/null 上下同心/null 上下文/null 上下文菜单/null 上下班/null 上下班时间/null 上下相安/null 上下级/null 上下级之间/null 上下结合/null 上不着天/null 上世/null 上世纪/null 上个/null 上个世纪/null 上个星期/null 上个月/null 上中农/null 上举/null 上乘/null 上书/null 上了/null 上交/null 上京/null 上人/null 上人儿/null 上代/null 上以/null 上任/null 上传/null 上传下达/null 上位/null 上位概念/null 上体/null 上作/null 上例/null 上供/null 上侧/null 上元节/null 上光/null 上党梆子/null 上农/null 上冻/null 上刑/null 上列/null 上前/null 上前线/null 上劲/null 上千/null 上升/null 上升幅度/null 上升空间/null 上升趋势/null 上午/null 上半/null 上半叶/null 上半场/null 上半夜/null 上半天/null 上半年/null 上半时/null 上半晌/null 上半身/null 上半部/null 上半部分/null 上卸/null 上压力/null 上去/null 上叉/null 上口/null 上口字/null 上口齿/null 上古/null 上古汉语/null 上句/null 上台/null 上台阶/null 上司/null 上合/null 上合组织/null 上吊/null 上同调/null 上吐/null 上吐下泻/null 上告/null 上周/null 上呼吸道/null 上呼吸道感染/null 上品/null 上哪/null 上唇/null 上回/null 上图/null 上在/null 上场/null 上场门/null 上坐/null 上坟/null 上坡/null 上坡段/null 上坡路/null 上城区/null 上堂/null 上士/null 上声/null 上外/null 上夜/null 上天/null 上天入地/null 上天无路入地无门/null 上头/null 上夸克/null 上奏/null 上套/null 上好/null 上季/null 上学/null 上官/null 上家/null 上宾/null 上射式/null 上将/null 上将军/null 上尉/null 上尖儿/null 上层/null 上层建筑/null 上屈/null 上届/null 上属音/null 上山/null 上山下乡/null 上岁数/null 上岗/null 上岸/null 上峰/null 上工/null 上市/null 上市公司/null 上帐/null 上帝/null 上席/null 上年/null 上年纪/null 上床/null 上座/null 上座儿/null 上座率/null 上座部/null 上弓/null 上弦/null 上弦月/null 上弯形/null 上当/null 上当受骗/null 上心/null 上思/null 上情下达/null 上戴/null 上房/null 上房揭瓦/null 上手/null 上手铐/null 上托/null 上扬/null 上扬趋势/null 上扯/null 上抛/null 上报/null 上拍/null 上操/null 上文/null 上斜/null 上新世/null 上方/null 上方宝剑/null 上无片瓦/null 上旬/null 上星期/null 上星期一/null 上星期三/null 上星期二/null 上星期五/null 上星期六/null 上星期四/null 上星期日/null 上映/null 上月/null 上月份/null 上有/null 上有政策/null 上有老下有小/null 上朝/null 上期/null 上机/null 上机操作/null 上杆/null 上条/null 上来/null 上杭/null 上林/null 上标/null 上标题/null 上树/null 上树拔梯/null 上栓/null 上栗/null 上校/null 上档/null 上梁/null 上梁不正下梁歪/null 上楼/null 上楼去梯/null 上榜/null 上檐/null 上次/null 上款/null 上段/null 上气不接下气/null 上水/null 上水道/null 上求下告/null 上江/null 上汽/null 上油/null 上流/null 上流社会/null 上流阶级/null 上浆/null 上浣/null 上浮/null 上海交大/null 上海交通大学/null 上海体育场/null 上海医科大学/null 上海商务印书馆/null 上海外国语大学/null 上海大剧院/null 上海大学/null 上海宝钢集团公司/null 上海工人三次武装起义/null 上海戏剧学院/null 上海振华港口机械/null 上海文广新闻传媒集团/null 上海汽车工业/null 上海汽车工业集团/null 上海环球金融中心/null 上海第二医科大学/null 上海证券交易所/null 上海证券交易所综合股价指/null 上海证卷交易所/null 上海话/null 上海财经大学/null 上海音乐学院/null 上涨/null 上涨幅度/null 上游/null 上溜油/null 上溢/null 上溯/null 上漆/null 上漏下湿/null 上演/null 上演税/null 上火/null 上灯/null 上焦/null 上爬/null 上片/null 上犹/null 上环/null 上班/null 上班族/null 上班时间/null 上甘岭/null 上甘岭区/null 上用/null 上画/null 上界/null 上疏/null 上瘾/null 上皮/null 上皮组织/null 上相/null 上看/null 上眼皮/null 上眼睑/null 上着/null 上睑/null 上知天文下知地理/null 上确界/null 上移/null 上税/null 上空/null 上空洗车/null 上窜下跳/null 上站/null 上端/null 上第/null 上等/null 上等兵/null 上等品/null 上策/null 上算/null 上箭头/null 上箭头键/null 上篇/null 上类/null 上紧/null 上级/null 上级指示/null 上级领导/null 上线/null 上绷带/null 上缴/null 上网/null 上网本/null 上翻/null 上联/null 上肢/null 上腰/null 上膘/null 上膛/null 上臂/null 上自/null 上至/null 上船/null 上色/null 上艾瑟尔/null 上节/null 上苍/null 上药/null 上菜/null 上蔟/null 上蔡/null 上虞/null 上蜡/null 上行/null 上行下效/null 上街/null 上街区/null 上衣/null 上衫/null 上装/null 上裙/null 上西天/null 上覆/null 上议院/null 上访/null 上证综合指数/null 上诉/null 上诉人/null 上诉法院/null 上课/null 上调/null 上谕/null 上路/null 上身/null 上车/null 上轨道/null 上载/null 上辈/null 上辈子/null 上边/null 上边儿/null 上边缘/null 上达/null 上进/null 上进心/null 上述/null 上部/null 上都/null 上野/null 上钩/null 上钩儿/null 上铺/null 上锁/null 上镜/null 上门/null 上门服务/null 上间/null 上阵/null 上阵杀敌/null 上限/null 上院/null 上集/null 上面/null 上鞋/null 上页/null 上项/null 上颌/null 上颌骨/null 上颔/null 上颔骨/null 上颚/null 上颚正门齿/null 上额/null 上风/null 上饶/null 上饶地区/null 上首/null 上香/null 上马/null 上高/null 上齿/null 上齿龈/null 上龙/null 下一/null 下一个/null 下一代/null 下一位/null 下一次/null 下一步/null 下一站/null 下一阶段/null 下一页/null 下下/null 下不为例/null 下不来/null 下不着地/null 下世/null 下世纪初/null 下个/null 下个世纪/null 下个星期/null 下个月/null 下中农/null 下乘/null 下乡/null 下书/null 下了/null 下于/null 下井投石/null 下人/null 下仔/null 下令/null 下任/null 下传/null 下位/null 下位概念/null 下体/null 下作/null 下例/null 下侧/null 下修/null 下倾/null 下僚/null 下关/null 下关区/null 下关市/null 下册/null 下写/null 下决心/null 下冻/null 下凡/null 下划/null 下划线/null 下列/null 下判断/null 下剩/null 下功夫/null 下劲/null 下勺/null 下午/null 下半/null 下半场/null 下半夜/null 下半天/null 下半年/null 下半旗/null 下半时/null 下半晌/null 下半生/null 下半身/null 下单/null 下厂/null 下压/null 下压力/null 下厨/null 下去/null 下发/null 下口/null 下台/null 下台阶/null 下同/null 下周/null 下命令/null 下品/null 下唇/null 下回/null 下土/null 下地/null 下场/null 下场门/null 下坂走丸/null 下坠/null 下坠球/null 下坡/null 下坡路/null 下垂/null 下垂症/null 下城区/null 下基层/null 下堂/null 下塌/null 下士/null 下处/null 下大力气/null 下大工夫/null 下大本钱/null 下头/null 下夸克/null 下奏/null 下女/null 下奶/null 下嫁/null 下子/null 下孔/null 下存/null 下季/null 下官/null 下定/null 下定义/null 下定决心/null 下家/null 下寒武/null 下寒武统/null 下层/null 下届/null 下属/null 下属公司/null 下山/null 下岗/null 下崽/null 下工/null 下工夫/null 下巴/null 下巴颏/null 下巴颏儿/null 下帖/null 下年/null 下庄/null 下床/null 下店/null 下延/null 下引/null 下弦/null 下弦月/null 下得/null 下怀/null 下情/null 下情上达/null 下意识/null 下愚不移/null 下房/null 下手/null 下拉/null 下拉菜单/null 下拜/null 下拨/null 下挫/null 下探/null 下接/null 下推/null 下摆/null 下操/null 下放/null 下文/null 下方/null 下旋/null 下旋削球/null 下无立锥之地/null 下旬/null 下星期/null 下星期一/null 下星期三/null 下星期二/null 下星期五/null 下星期四/null 下星期日/null 下晚儿/null 下月/null 下有/null 下有对策/null 下期/null 下本儿/null 下来/null 下架/null 下柬/null 下标/null 下树/null 下档/null 下梢/null 下棋/null 下楼/null 下楼梯/null 下榻/null 下槛/null 下欠/null 下次/null 下款/null 下步/null 下死劲/null 下毒/null 下毒手/null 下毒者/null 下毛/null 下气/null 下水/null 下水礼/null 下水管/null 下水道/null 下江/null 下江兵/null 下沉/null 下河/null 下油/null 下泄/null 下法/null 下注/null 下泻/null 下流/null 下流人/null 下流话/null 下浣/null 下浮/null 下海/null 下游/null 下溢/null 下滑/null 下潜/null 下炕/null 下点/null 下焦/null 下片/null 下牢/null 下狱/null 下班/null 下生/null 下用/null 下田/null 下画线/null 下界/null 下略/null 下疳/null 下痿/null 下盘/null 下相/null 下看/null 下眼睑/null 下着雨/null 下确界/null 下碇/null 下碗/null 下神/null 下种/null 下移/null 下穿/null 下站/null 下端/null 下笔/null 下笔千言/null 下笔如有神/null 下笔如神/null 下笔成章/null 下笔成篇/null 下笔有神/null 下第/null 下等/null 下策/null 下箭头/null 下箭头键/null 下箸/null 下篇/null 下级/null 下级单位/null 下级服从上级/null 下线/null 下线仪式/null 下网/null 下而上/null 下联/null 下聘/null 下肢/null 下脚/null 下脚料/null 下脚货/null 下腹/null 下腹部/null 下臂/null 下至上/null 下舱/null 下船/null 下花园/null 下花园区/null 下药/null 下营/null 下营乡/null 下落/null 下落不明/null 下葬/null 下蛋/null 下行/null 下表/null 下装/null 下西洋/null 下角/null 下议院/null 下议院议员/null 下设/null 下诏/null 下课/null 下调/null 下象棋/null 下贱/null 下赌/null 下起/null 下跌/null 下跪/null 下身/null 下车/null 下车之始/null 下车伊始/null 下车泣罪/null 下载/null 下辈/null 下辈子/null 下辖/null 下边/null 下边儿/null 下达/null 下述/null 下逐客令/null 下道/null 下部/null 下酒/null 下酒菜/null 下里巴人/null 下野/null 下钓/null 下钻/null 下铁道/null 下铺/null 下锅/null 下错/null 下锚/null 下键/null 下门/null 下问/null 下闸/null 下阵雨/null 下阶层/null 下附/null 下陆/null 下陆区/null 下降/null 下限/null 下院/null 下陷/null 下集/null 下雨/null 下雨天/null 下雪/null 下雪量/null 下雪雨/null 下雾/null 下霜/null 下面/null 下面请看/null 下页/null 下颌/null 下颌下腺/null 下颌动脉/null 下颌骨/null 下颏/null 下颔/null 下颔骨/null 下颚/null 下额/null 下风/null 下风方向/null 下飞机/null 下饭/null 下马/null 下马威/null 下马看花/null 下鼻甲/null 下齿/null 下龙湾/null 不一/null 不一会/null 不一会儿/null 不一定/null 不一律/null 不一样/null 不一而足/null 不一致/null 不一致字/null 不一般/null 不三不四/null 不上/null 不上不下/null 不下/null 不下于/null 不不/null 不专/null 不严/null 不严密/null 不严峻/null 不严谨/null 不严重/null 不中/null 不中意/null 不中用/null 不丰不杀/null 不丹/null 不丹亚/null 不丹人/null 不丹语/null 不为/null 不为五斗米折腰/null 不为人知/null 不为左右袒/null 不为己甚/null 不为已甚/null 不为所动/null 不为牛后/null 不为瓦全/null 不为酒困/null 不主故常/null 不久/null 不久以前/null 不久前/null 不义/null 不义之财/null 不乏/null 不乏其人/null 不乏其例/null 不乐/null 不习惯/null 不习见/null 不买/null 不买账/null 不乱/null 不了/null 不了了之/null 不了解/null 不予/null 不予承认/null 不予理会/null 不予置评/null 不予考虑/null 不予评论/null 不予重视/null 不争/null 不争气/null 不二/null 不二价/null 不二法门/null 不亚/null 不亚于/null 不亢/null 不亢不卑/null 不交/null 不交叉/null 不亦乐乎/null 不产/null 不亲/null 不亲切/null 不亲热/null 不人道/null 不仁/null 不仁慈/null 不仅/null 不仅仅/null 不仅如此/null 不今不古/null 不介/null 不介意/null 不付/null 不令人鼓舞/null 不以/null 不以为意/null 不以为然/null 不以为耻反以为荣/null 不以人废言/null 不以己悲/null 不以物喜/null 不以规矩/null 不以词害志/null 不以辞害志/null 不任职/null 不伏烧埋/null 不休/null 不休息/null 不优美/null 不优雅/null 不会/null 不会吧/null 不会弄错/null 不会有/null 不会老/null 不会错/null 不会飞/null 不传/null 不传导/null 不伤脾胃/null 不伦/null 不伦不类/null 不似/null 不但/null 不但如此/null 不低于/null 不住/null 不体谅/null 不体面/null 不作/null 不佞/null 不佳/null 不使/null 不使用武力/null 不依/null 不依不饶/null 不便/null 不俗/null 不保/null 不信/null 不信仰/null 不信任/null 不信任动议/null 不信任投票/null 不信任案/null 不信用/null 不信神/null 不信神者/null 不俭则匮/null 不修/null 不修不节/null 不修边幅/null 不俱/null 不倒/null 不倒翁/null 不借/null 不倦/null 不值/null 不值一哂/null 不值一提/null 不值一文/null 不值一钱/null 不值得/null 不值得一提/null 不值钱/null 不假/null 不假思索/null 不偏/null 不偏不倚/null 不偏不袒/null 不偏斜/null 不偏极/null 不做/null 不做事/null 不做亏心事/null 不做作/null 不做声/null 不停/null 不停止/null 不停顿/null 不健全/null 不健康/null 不储存/null 不傲慢/null 不傻/null 不像/null 不像是真/null 不像样/null 不像话/null 不允许/null 不充分/null 不充足/null 不光/null 不光彩/null 不光滑/null 不克/null 不免/null 不免一死/null 不入兽穴安得兽子/null 不入时宜/null 不入虎穴/null 不入虎穴不得虎子/null 不入虎穴焉得虎子/null 不全/null 不公/null 不公平/null 不公正/null 不共戴天/null 不关/null 不关心/null 不关痛痒/null 不关连/null 不兴/null 不具/null 不具名/null 不具备/null 不典型/null 不兼容/null 不兼容性/null 不再/null 不冒昧/null 不决/null 不冷/null 不冷不热/null 不冻/null 不冻港/null 不冻港口/null 不净/null 不准/null 不准时/null 不准确/null 不准许/null 不凋花/null 不减/null 不减弱/null 不减当年/null 不凑巧/null 不凝固/null 不几天/null 不凡/null 不出/null 不出所料/null 不分/null 不分伯仲/null 不分大小/null 不分开/null 不分彼此/null 不分情由/null 不分昼夜/null 不分清红皂白/null 不分畛域/null 不分皂白/null 不分离/null 不分胜负/null 不分胜败/null 不分轩轾/null 不分青红皂白/null 不分高下/null 不切合实际/null 不切实际/null 不刊之典/null 不刊之论/null 不划算/null 不划线/null 不列顿人/null 不列颠/null 不列颠・保卫战/null 不列颠哥伦比亚/null 不列颠哥伦比亚省/null 不列颠诸岛/null 不则声/null 不删/null 不利/null 不利于/null 不利作用/null 不利因素/null 不到/null 不到乌江不尽头/null 不到乌江不肯休/null 不到乌江心不死/null 不到长城非好汉/null 不到黄河不死心/null 不到黄河心不死/null 不前/null 不力/null 不加/null 不加修饰/null 不加分析/null 不加区别/null 不加思索/null 不加拘束/null 不加掩饰/null 不加水/null 不加渲染/null 不加牛奶/null 不加理睬/null 不加疑问/null 不加虚饰/null 不加评论/null 不加选择/null 不务正业/null 不劣方头/null 不动/null 不动产/null 不动声色/null 不动情/null 不动摇/null 不动点/null 不动点定理/null 不努力/null 不劳/null 不劳无获/null 不劳而获/null 不勉强/null 不包分配/null 不包括/null 不化/null 不匮/null 不匹配/null 不区分大小写/null 不协/null 不协同/null 不协调/null 不卑不亢/null 不单/null 不卖/null 不卫生/null 不即不离/null 不卷入/null 不厌/null 不厌其烦/null 不厌其祥/null 不厌其详/null 不厌求祥/null 不厚/null 不去/null 不去理/null 不参加/null 不及/null 不及格/null 不及物动词/null 不友善/null 不友好/null 不反射/null 不发/null 不发亮/null 不发火/null 不发达/null 不发达国家/null 不发达地区/null 不发音/null 不受/null 不受伤害/null 不受劝告/null 不受干扰/null 不受影响/null 不受束缚/null 不受欢迎/null 不受注意/null 不受理/null 不受管束/null 不受约束/null 不受重视/null 不变/null 不变价格/null 不变化/null 不变性/null 不变资本/null 不变量/null 不只/null 不只是/null 不可/null 不可一世/null 不可不/null 不可争议/null 不可以/null 不可企及/null 不可估量/null 不可侵犯/null 不可侵犯权/null 不可信/null 不可信任/null 不可偏废/null 不可再生资源/null 不可分/null 不可分割/null 不可分离/null 不可动摇/null 不可原谅/null 不可取/null 不可变/null 不可同年而语/null 不可同日而语/null 不可名状/null 不可向迩/null 不可否认/null 不可告人/null 不可多得/null 不可容忍/null 不可导/null 不可开交/null 不可忍受/null 不可忽视/null 不可思议/null 不可想像/null 不可想象/null 不可或缺/null 不可战胜/null 不可抗力/null 不可抗拒/null 不可挽回/null 不可捉摸/null 不可接受/null 不可撤销信用证/null 不可收拾/null 不可改变/null 不可救药/null 不可教/null 不可数/null 不可数名词/null 不可数集/null 不可枚举/null 不可测/null 不可爱/null 不可理喻/null 不可知/null 不可知论/null 不可磨灭/null 不可端倪/null 不可终日/null 不可缺/null 不可缺少/null 不可置信/null 不可胜数/null 不可胜言/null 不可胜计/null 不可能/null 不可能性/null 不可行/null 不可解/null 不可言传/null 不可言喻/null 不可言宣/null 不可言状/null 不可逆/null 不可逆反应/null 不可逆转/null 不可通约/null 不可逾越/null 不可遏止/null 不可避/null 不可避免/null 不可阻挡/null 不可限量/null 不可靠/null 不可预测/null 不可预见/null 不吃/null 不吃烟火食/null 不合/null 不合体统/null 不合作/null 不合作态度/null 不合作者/null 不合味口/null 不合宜/null 不合实际/null 不合情理/null 不合文法/null 不合时/null 不合时令/null 不合时宜/null 不合时机/null 不合权宜/null 不合格/null 不合法/null 不合理/null 不合理制度/null 不合理化/null 不合算/null 不合群/null 不合规格/null 不合语法/null 不合调/null 不合谐/null 不合身/null 不合适/null 不合逻辑/null 不合道理/null 不吉/null 不吉利/null 不吉祥/null 不同/null 不同于/null 不同凡响/null 不同情/null 不同意/null 不同意者/null 不同点/null 不同种类/null 不名一文/null 不名一钱/null 不名数/null 不名誉/null 不名誉事物/null 不吐气/null 不向/null 不吝/null 不吝惜/null 不吝指教/null 不吝珠玉/null 不含/null 不含糊/null 不含铁/null 不听命/null 不听话/null 不吭/null 不吸收/null 不告而辞/null 不周/null 不周山/null 不周延/null 不和/null 不和悦/null 不和蔼/null 不和谐/null 不咎既往/null 不响应/null 不哭/null 不哼不哈/null 不啻/null 不啻天渊/null 不善/null 不善交际/null 不喝/null 不回/null 不因不由/null 不因人热/null 不图/null 不圆唇元音/null 不圆滑/null 不圆通/null 不在/null 不在少数/null 不在话下/null 不堪一击/null 不堪入目/null 不堪入耳/null 不堪回首/null 不堪忍受/null 不堪设想/null 不堪造就/null 不堪重负/null 不塞不流/null 不止不行/null 不声不响/null 不复存在/null 不外乎/null 不外人据/null 不外人训/null 不外人道/null 不多/null 不够/null 不大/null 不失/null 不失众望/null 不失时机/null 不夷不惠/null 不夺农时/null 不好/null 不好不坏/null 不如/null 不如人意/null 不如归去/null 不如退而结网/null 不妙/null 不妥/null 不妨/null 不妨一试/null 不孕/null 不孕症/null 不存不济/null 不孝/null 不孝有三/null 不学无术/null 不安/null 不安于位/null 不安其室/null 不安好心/null 不完全归纳/null 不完全统计/null 不定/null 不定元/null 不定冠词/null 不定式/null 不定方程/null 不定期/null 不定根/null 不定积分/null 不定词/null 不宜/null 不实之处/null 不实之词/null 不实用/null 不实际/null 不审慎/null 不客气/null 不宣而战/null 不害羞/null 不容分说/null 不容分辨/null 不容忽视/null 不容置喙/null 不容置疑/null 不容置辩/null 不容耽搁/null 不容许/null 不容轻视/null 不寒而栗/null 不对/null 不对碴儿/null 不对称/null 不寻常/null 不小/null 不少/null 不尽人意/null 不尽然/null 不尽相同/null 不屈不挠/null 不屈曲性/null 不屑/null 不屑一顾/null 不履行者/null 不巧/null 不差毫厘/null 不差毫发/null 不差累黍/null 不已/null 不带偏见/null 不带电/null 不带音/null 不常/null 不常见/null 不干/null 不干不净/null 不干净/null 不干涉/null 不干涉政策/null 不干胶/null 不平/null 不平凡/null 不平则鸣/null 不平坦/null 不平常/null 不平等/null 不平等条约/null 不平而鸣/null 不平衡/null 不平静/null 不幸/null 不幸之事/null 不幸人/null 不幸受害/null 不幸福/null 不广/null 不庄重/null 不应/null 不应得/null 不应期/null 不应该/null 不开窍/null 不弃/null 不弯/null 不弯曲/null 不弱/null 不强/null 不强烈/null 不强调/null 不当/null 不当一回事/null 不当之处/null 不当事/null 不当人子/null 不当得利/null 不当真/null 不当紧/null 不当行为/null 不彻底/null 不待/null 不待说/null 不徇私情/null 不很/null 不得/null 不得不/null 不得了/null 不得人心/null 不得体/null 不得其死/null 不得劲/null 不得已/null 不得当/null 不得而知/null 不得要领/null 不必/null 不必要/null 不忍/null 不忘/null 不忘沟壑/null 不忙/null 不忠/null 不忠实/null 不忠诚/null 不快/null 不快乐/null 不忮不得/null 不念/null 不念旧恶/null 不忿/null 不怀/null 不怀好意/null 不怀疑/null 不怎么/null 不怎么样/null 不怕/null 不怕官只怕管/null 不怕没柴烧/null 不怕虎/null 不怕鬼敲门/null 不思考/null 不怠/null 不急/null 不急之务/null 不急于/null 不恐惧/null 不恤/null 不恤人言/null 不恭/null 不恭敬/null 不息/null 不恰当/null 不悔改/null 不悟/null 不患/null 不悦/null 不悦耳/null 不情之情/null 不情之请/null 不情愿/null 不惊/null 不惑/null 不惑之年/null 不惜/null 不惜工本/null 不惜血本/null 不惟/null 不惧/null 不惮强御/null 不惯/null 不想/null 不惹人/null 不愁/null 不愉快/null 不意/null 不感/null 不感兴趣/null 不感谢/null 不愤/null 不愤不启/null 不愧/null 不愧下学/null 不愧不怍/null 不愧屋漏/null 不愿/null 不愿听/null 不愿意/null 不愿给/null 不慈悲/null 不慌不忙/null 不慌张/null 不慎/null 不慎重/null 不懂/null 不懂装懂/null 不懈/null 不懈努力/null 不懈怠/null 不懊悔/null 不成/null 不成体系/null 不成体统/null 不成功/null 不成器/null 不成型/null 不成形/null 不成文/null 不成文法/null 不成方圆/null 不成材/null 不成样子/null 不成比例/null 不成熟/null 不成角/null 不成话/null 不战不和/null 不战自败/null 不戴/null 不戴帽/null 不才/null 不打/null 不打不与相识/null 不打不成才/null 不打不成相识/null 不打不相识/null 不打紧/null 不打自招/null 不扣/null 不扩散核武器条约/null 不扬/null 不批/null 不承认/null 不承认主义/null 不把/null 不投/null 不抗不卑/null 不折不扣/null 不折不挠/null 不报/null 不抱/null 不抵抗/null 不抵抗主义/null 不抽/null 不拉几/null 不拒/null 不拘/null 不拘一格/null 不拘仪式/null 不拘小节/null 不拘形式/null 不拘束/null 不拘泥/null 不拘礼节/null 不拘细行/null 不拜/null 不择手段/null 不拿/null 不拿薪水/null 不持久/null 不指人/null 不按/null 不挠/null 不振/null 不换/null 不掉/null 不接/null 不接受/null 不接近/null 不提也罢/null 不插电/null 不揣冒昧/null 不搭理/null 不搭调/null 不摆/null 不摸头/null 不撞南墙不回头/null 不支/null 不支持/null 不收/null 不改/null 不攻/null 不攻自破/null 不放/null 不敌/null 不敏/null 不救/null 不教/null 不教而杀/null 不教而诛/null 不敢/null 不敢后人/null 不敢告劳/null 不敢当/null 不敢自专/null 不敢越雷池一步/null 不敢高攀/null 不散/null 不敬/null 不敬神/null 不整/null 不整洁/null 不整饰/null 不整齐/null 不敷/null 不敷使用/null 不文/null 不文不武/null 不文明/null 不文雅/null 不料/null 不断/null 不断发展/null 不断增加/null 不断增长/null 不断要求/null 不新奇/null 不新鲜/null 不方/null 不方便/null 不旋/null 不旋踵/null 不无/null 不无关系/null 不无小补/null 不无道理/null 不日/null 不日不月/null 不旧/null 不早/null 不早不晚/null 不时/null 不时之需/null 不时之须/null 不时有/null 不明/null 不明不白/null 不明了/null 不明事理/null 不明净/null 不明就里/null 不明显/null 不明智/null 不明朗/null 不明真相/null 不明确/null 不明说/null 不明飞行物/null 不易/null 不易之论/null 不易对付/null 不易懂/null 不是/null 不是吗/null 不是味儿/null 不是故意/null 不是玩儿的/null 不是话/null 不显/null 不显山不露水/null 不显眼/null 不显著/null 不景气/null 不智/null 不智之举/null 不暇/null 不曲/null 不曲折/null 不曾/null 不有/null 不服/null 不服从/null 不服气/null 不服水土/null 不服罪/null 不服输/null 不期/null 不期然而然/null 不期而会/null 不期而然/null 不期而遇/null 不机敏/null 不朽/null 不杀不辱/null 不材/null 不来/null 不来往/null 不来梅/null 不来梅港/null 不松懈/null 不枉/null 不果断/null 不标准/null 不栉进士/null 不检/null 不检查/null 不检点/null 不欢/null 不欢而散/null 不欲/null 不欺暗室/null 不止/null 不止一次/null 不正/null 不正之风/null 不正常/null 不正常状况/null 不正式/null 不正当/null 不正当关系/null 不正当竞争/null 不正派/null 不正直/null 不正确/null 不正确性/null 不武装/null 不歪/null 不死/null 不死不活/null 不死心/null 不殷勤/null 不比/null 不毛/null 不毛之地/null 不民主/null 不求/null 不求上进/null 不求人/null 不求收获/null 不求有功/null 不求甚解/null 不求闻达/null 不沉/null 不治/null 不治之症/null 不治而愈/null 不沾/null 不泄气/null 不法/null 不法之徒/null 不法分子/null 不法行为/null 不注意/null 不洁/null 不洁净/null 不活/null 不活动/null 不活泼/null 不流/null 不流动/null 不流行/null 不测/null 不测之祸/null 不测风云/null 不济/null 不济事/null 不消/null 不消化/null 不深/null 不混乱/null 不清/null 不清楚/null 不清洁/null 不清爽/null 不渗/null 不渝/null 不温不火/null 不温暖/null 不溶/null 不溶解/null 不滑/null 不滑稽/null 不满/null 不满意/null 不满意者/null 不满现状/null 不满者/null 不满足/null 不漂亮/null 不漂白/null 不漏/null 不漏水/null 不潦潦之/null 不潮湿/null 不灭/null 不灰心/null 不灰木/null 不灵/null 不灵巧/null 不灵敏/null 不烂/null 不烂之舌/null 不烦恼/null 不热/null 不热心/null 不热情/null 不然/null 不熟/null 不熟悉/null 不熟练/null 不燃/null 不燃性/null 不燃烧/null 不燃物/null 不爱/null 不爱交际/null 不爱国/null 不爱说话/null 不爽/null 不爽快/null 不牢/null 不特/null 不犯/null 不犹豫/null 不狡猾/null 不独/null 不现实/null 不理/null 不理睬/null 不理解/null 不甘/null 不甘于/null 不甘后人/null 不甘寂寞/null 不甘心/null 不甘愿/null 不甘示弱/null 不甘落后/null 不甘落后/null 不甘雌伏/null 不甚/null 不甚了了/null 不甚重要/null 不甜/null 不生/null 不生不死/null 不生产/null 不生育/null 不生锈/null 不用/null 不用客气/null 不用找/null 不用说/null 不用谢/null 不由/null 不由分说/null 不由得/null 不由自主/null 不畅/null 不畏/null 不畏强御/null 不畏强暴/null 不畏强权/null 不畏惧/null 不畏艰险/null 不留/null 不留心/null 不留神/null 不疑/null 不疲倦/null 不疲劳/null 不疾不徐/null 不痛/null 不痛不痒/null 不登大雅之堂/null 不白/null 不白之冤/null 不皱/null 不相/null 不相上下/null 不相为谋/null 不相似/null 不相信/null 不相关/null 不相同/null 不相宜/null 不相容/null 不相容原理/null 不相干/null 不相称/null 不相符/null 不相等/null 不相适应/null 不相配/null 不省/null 不省人事/null 不看/null 不看僧面看佛面/null 不真实/null 不真确/null 不真诚/null 不眠/null 不眠不休/null 不眠之夜/null 不着/null 不着边际/null 不着陆飞行/null 不睡/null 不睡眠/null 不睦/null 不睬/null 不瞅不睬/null 不瞒你说/null 不瞒您说/null 不矜不伐/null 不矜细行/null 不知/null 不知丁董/null 不知不觉/null 不知为不知/null 不知为什么/null 不知何故/null 不知其二/null 不知其所以然/null 不知凡几/null 不知出于何种原因/null 不知去向/null 不知名/null 不知天高地厚/null 不知好歹/null 不知就里/null 不知怎么/null 不知悔改/null 不知情/null 不知所为/null 不知所之/null 不知所云/null 不知所以/null 不知所指/null 不知所措/null 不知所终/null 不知旧里/null 不知死活/null 不知深浅/null 不知甘苦/null 不知疲倦/null 不知痛痒/null 不知礼/null 不知羞耻/null 不知者不罪/null 不知耻/null 不知足/null 不知轻重/null 不知进退/null 不知道/null 不知高低/null 不短/null 不破/null 不破不立/null 不确切/null 不确定/null 不确定性/null 不确定性原理/null 不确实/null 不碍/null 不碎玻璃/null 不磨损/null 不示/null 不礼貌/null 不祉/null 不神圣/null 不祥/null 不祥之兆/null 不祥之力/null 不祥之物/null 不祥预兆/null 不祧之祖/null 不禁/null 不离/null 不离儿/null 不科学/null 不积小流/null 不积极/null 不积跬步/null 不称/null 不称职/null 不移/null 不稂不莠/null 不稳/null 不稳固/null 不稳定/null 不稳定气流/null 不稳平衡/null 不稳性/null 不稼不穑/null 不穷/null 不空成就佛/null 不端/null 不端庄/null 不笑/null 不符/null 不符合/null 不第/null 不等/null 不等于/null 不等价交换/null 不等压/null 不等号/null 不等式/null 不等边/null 不等边三角形/null 不答复/null 不答应/null 不答理/null 不简单/null 不算/null 不管/null 不管三七二十一/null 不管不顾/null 不管什麽/null 不管如何/null 不管怎么说/null 不管怎样/null 不管是谁/null 不精/null 不精密/null 不精确/null 不精确性/null 不精通/null 不紧/null 不紧不慢/null 不紧要/null 不累/null 不约/null 不约而合/null 不约而同/null 不纯/null 不纯洁/null 不纳/null 不细致/null 不终天年/null 不经/null 不经一事/null 不经之谈/null 不经常/null 不经意/null 不经意间/null 不经济/null 不结/null 不结块/null 不结实/null 不结果/null 不结盟/null 不结盟会议/null 不结盟国家/null 不结盟政策/null 不结盟运动/null 不给/null 不给予/null 不给力/null 不绝/null 不绝于耳/null 不绝于途/null 不绝如线/null 不绝如缕/null 不统一/null 不缩/null 不缩不皱/null 不罚/null 不置/null 不置可否/null 不署名/null 不羁/null 不美/null 不美栗/null 不美观/null 不翼而飞/null 不老/null 不老实/null 不老练/null 不考虑/null 不而/null 不耐心/null 不耐烦/null 不耻/null 不耻下问/null 不肖/null 不肖子孙/null 不肥沃/null 不肯/null 不育/null 不育性/null 不育症/null 不育系/null 不胜/null 不胜举/null 不胜任/null 不胜其扰/null 不胜其烦/null 不胜其苦/null 不胜枚举/null 不胫而走/null 不能/null 不能不/null 不能分/null 不能动/null 不能同日而语/null 不能容忍/null 不能平静/null 不能忍受/null 不能成方圆/null 不能抵抗/null 不能按/null 不能挽回/null 不能接受/null 不能自已/null 不能自拔/null 不能读/null 不能飞/null 不脱离/null 不脱线/null 不脸红/null 不腐败/null 不自/null 不自主/null 不自在/null 不自然/null 不自由/null 不自私/null 不自觉/null 不自量/null 不自量力/null 不至/null 不至于/null 不致/null 不致于/null 不致命/null 不舆/null 不舍/null 不舍昼夜/null 不舒/null 不舒服/null 不舒适/null 不舞之鹤/null 不良/null 不良倾向/null 不良少年/null 不节俭/null 不节制/null 不苟/null 不苟言笑/null 不若/null 不茶不饭/null 不药/null 不药而愈/null 不莱梅/null 不菲/null 不落/null 不落俗套/null 不落巢臼/null 不落痕迹/null 不落窠臼/null 不著火/null 不著边际/null 不蔓不枝/null 不虔诚/null 不虚伪/null 不虚此行/null 不虞/null 不虞之誉/null 不融合/null 不蠢/null 不血/null 不行/null 不行了/null 不补/null 不表/null 不衰/null 不被/null 不装订/null 不褪色/null 不要/null 不要哭/null 不要紧/null 不要胡说/null 不要脸/null 不见/null 不见一点踪影/null 不见不散/null 不见兔子不撒鹰/null 不见圭角/null 不见天日/null 不见得/null 不见棺材不落泪/null 不见经传/null 不规则/null 不规则三角形/null 不规则四边形/null 不规律/null 不规矩/null 不规范/null 不觉/null 不觉察/null 不解/null 不解之缘/null 不解之谜/null 不解其意/null 不解风情/null 不触目/null 不言/null 不言下自成行/null 不言不语/null 不言而喻/null 不言自明/null 不计/null 不计其数/null 不计后果/null 不计报酬/null 不认/null 不认真/null 不认识/null 不认输/null 不让/null 不让须眉/null 不记名/null 不记名投票/null 不讲/null 不讲出/null 不讲方法/null 不讲条件/null 不讳/null 不许/null 不许可/null 不许百姓点灯/null 不论/null 不论什么/null 不论什麽/null 不论何时/null 不论何种/null 不论是谁/null 不论甚么/null 不论谁/null 不设/null 不设防/null 不设防城市/null 不证自明/null 不识/null 不识一丁/null 不识大体/null 不识好人心/null 不识好歹/null 不识字/null 不识庐山真面目/null 不识抬举/null 不识时务/null 不识时变/null 不识泰山/null 不识闲儿/null 不识高低/null 不诚实/null 不诚恳/null 不该/null 不该得/null 不详/null 不详尽/null 不语/null 不说/null 不说自明/null 不说谎/null 不请/null 不请自来/null 不读音/null 不调/null 不调和/null 不谋私利/null 不谋而合/null 不谋而同/null 不谐和/null 不谐和音/null 不谓/null 不谢/null 不谦虚/null 不谨慎/null 不象/null 不象样/null 不象话/null 不贞/null 不贞洁/null 不负/null 不负众望/null 不负责任/null 不败/null 不败之地/null 不质疑/null 不购买/null 不贰过/null 不贵/null 不费/null 不费事/null 不费力/null 不费吹灰之力/null 不赀/null 不赔/null 不赖/null 不赚/null 不赞一词/null 不赞同/null 不赞成/null 不赢/null 不走/null 不走过场/null 不起/null 不起作用/null 不起劲/null 不起眼/null 不超过/null 不越雷池/null 不足/null 不足为凭/null 不足为外人道/null 不足为奇/null 不足为虑/null 不足为训/null 不足为道/null 不足之处/null 不足之数/null 不足介意/null 不足以平民愤/null 不足取/null 不足够/null 不足挂齿/null 不足提/null 不足月/null 不足的地方/null 不足轻重/null 不足道/null 不足齿数/null 不跟/null 不轨/null 不轻/null 不轻信/null 不轻饶/null 不辍/null 不输/null 不辞/null 不辞劳苦/null 不辞而别/null 不辞辛劳/null 不辞辛苦/null 不辨/null 不辨菽麦/null 不达时务/null 不迂/null 不过/null 不过关/null 不过如此/null 不过如此而已/null 不过尔尔/null 不过意/null 不近/null 不近人情/null 不返/null 不还/null 不还债/null 不进/null 不进则退/null 不远/null 不远万里/null 不远千里/null 不违农时/null 不连接/null 不连续/null 不连续面/null 不连贯/null 不迟/null 不迫/null 不迭/null 不送/null 不送气/null 不适/null 不适中/null 不适任/null 不适合/null 不适宜/null 不适应/null 不适当/null 不适用/null 不适航/null 不逊/null 不透/null 不透光/null 不透明/null 不透明化/null 不透明性/null 不透气/null 不透水/null 不透水层/null 不透热/null 不通/null 不通人情/null 不通气/null 不通水火/null 不通融/null 不通风/null 不逞/null 不逞之徒/null 不速/null 不速之客/null 不速而至/null 不逮捕特权/null 不遂/null 不遑/null 不遑多让/null 不遑宁处/null 不道德/null 不遗/null 不遗余力/null 不遵守/null 不避/null 不避强御/null 不避斧钺/null 不避艰险/null 不那麽/null 不郎不秀/null 不配/null 不配合/null 不醉不归/null 不醒/null 不里/null 不重/null 不重要/null 不重视/null 不重读/null 不锈/null 不锈钢/null 不锈铁/null 不错/null 不错眼/null 不长/null 不长一智/null 不问/null 不问好歹/null 不问就听不到假话/null 不问青红皂白/null 不间不界/null 不间断/null 不闻不问/null 不防/null 不阴不阳/null 不附著/null 不限/null 不限于一/null 不随/null 不随大流/null 不随意/null 不随意肌/null 不难/null 不难想像/null 不难看/null 不难看出/null 不雅/null 不雅致/null 不雅观/null 不需/null 不需要/null 不露/null 不露圭角/null 不露声色/null 不露痕迹/null 不露面/null 不靠/null 不韪/null 不顺/null 不顺从/null 不顺利/null 不顺服/null 不顺遂/null 不须/null 不顾/null 不顾一切/null 不顾前后/null 不顾危险/null 不顾后果/null 不顾死活/null 不领情/null 不题/null 不食之地/null 不饮盗泉/null 不饱和/null 不饱和脂肪酸/null 不饿/null 不首先使用/null 不驯/null 不驯服/null 不骄/null 不骄不躁/null 不高/null 不高兴/null 不鲜明/null 不鸣则已/null 不齐/null 不齿/null 与世/null 与世俯仰/null 与世偃仰/null 与世无争/null 与世永别/null 与世沉浮/null 与世浮沉/null 与世长辞/null 与世隔绝/null 与世靡争/null 与之/null 与之无关/null 与人/null 与人为善/null 与人方便/null 与众/null 与众不同/null 与会/null 与会代表/null 与会同志/null 与会国/null 与会者/null 与你/null 与全世界为敌/null 与共/null 与其/null 与其说/null 与前同/null 与去年相比/null 与否/null 与国/null 与她/null 与日俱增/null 与日俱辉/null 与日俱进/null 与日同辉/null 与时俱进/null 与时浮沉/null 与时消息/null 与时间赛跑/null 与月/null 与格/null 与此/null 与此同时/null 与此无关/null 与此有关/null 与此相关/null 与此相反/null 与民/null 与民休息/null 与民偕乐/null 与民同乐/null 与民同忧/null 与民更始/null 与生/null 与生俱来/null 与虎添翼/null 与虎谋皮/null 与闻/null 丐帮/null 丑不/null 丑事/null 丑八怪/null 丑剧/null 丑化/null 丑名/null 丑声远播/null 丑婆子/null 丑小鸭/null 丑态/null 丑态百出/null 丑怪/null 丑恶/null 丑时/null 丑杂/null 丑牛/null 丑的/null 丑相/null 丑类/null 丑类恶物/null 丑老/null 丑行/null 丑行邪事/null 丑表功/null 丑角/null 丑诋/null 丑话/null 丑闻/null 丑陋/null 丑鬼/null 专一/null 专业/null 专业人员/null 专业人才/null 专业分工/null 专业化/null 专业学校/null 专业对口/null 专业性/null 专业户/null 专业教育/null 专业知识/null 专业英语/null 专业课/null 专业银行/null 专为/null 专事/null 专于/null 专人/null 专任/null 专使/null 专供/null 专修/null 专修科/null 专函/null 专刊/null 专列/null 专利/null 专利制度/null 专利局/null 专利权/null 专利法/null 专利者/null 专利药品/null 专制/null 专制主义/null 专制君主制/null 专力/null 专功/null 专区/null 专卖/null 专卖店/null 专卖者/null 专发/null 专号/null 专司/null 专名/null 专名词/null 专向/null 专员/null 专员公署/null 专售/null 专唱/null 专场/null 专家/null 专家学者/null 专家系统/null 专家级/null 专家组/null 专家评价/null 专家评论/null 专属/null 专属经济区/null 专差/null 专席/null 专库/null 专座/null 专征/null 专心/null 专心一志/null 专心一意/null 专心敬业/null 专心致志/null 专意/null 专户/null 专才/null 专拣/null 专指/null 专挑/null 专控/null 专擅/null 专攻/null 专政/null 专政对象/null 专政机关/null 专文/null 专断/null 专有/null 专有名词/null 专有权/null 专机/null 专权/null 专柜/null 专栏/null 专案/null 专案组/null 专案经理/null 专横/null 专横跋扈/null 专款/null 专款专用/null 专治/null 专注/null 专爱/null 专用/null 专用号/null 专用名词/null 专用章/null 专用线/null 专用网路/null 专用设备/null 专用集成电路/null 专电/null 专科/null 专科化/null 专科大学/null 专科学校/null 专科词典/null 专科院校/null 专程/null 专管/null 专线/null 专网/null 专署/null 专美/null 专美于前/null 专而精/null 专职/null 专职干部/null 专营/null 专营店/null 专著/null 专论/null 专设/null 专访/null 专诚/null 专责/null 专车/null 专辑/null 专送/null 专递/null 专长/null 专门/null 专门人员/null 专门人才/null 专门从事/null 专门列车/null 专门化/null 专门家/null 专门机构/null 专门调查/null 专集/null 专项/null 专项合同/null 专题/null 专题报告/null 专题片/null 专题研究/null 专题讨论/null 且不/null 且不说/null 且且/null 且休/null 且听/null 且听下回分解/null 且慢/null 且有/null 且末/null 且末遗址/null 且看/null 且知/null 且经/null 且让/null 且话/null 且说/null 且过/null 且还/null 世上/null 世上无难事/null 世世/null 世世代代/null 世世生生/null 世事/null 世交/null 世人/null 世仇/null 世代/null 世代书香/null 世代交替/null 世代相传/null 世传/null 世伯/null 世俗/null 世俗化/null 世兄/null 世医/null 世博/null 世卫组织/null 世外/null 世外桃源/null 世外桃花源/null 世子/null 世宗/null 世宗大王/null 世家/null 世尊/null 世局/null 世居/null 世态/null 世态人情/null 世态炎凉/null 世情/null 世故/null 世族/null 世爵/null 世界/null 世界上/null 世界主义/null 世界之最/null 世界人权宣言/null 世界人民/null 世界先进水平/null 世界军事/null 世界冠军/null 世界博览/null 世界博览会/null 世界卫生大会/null 世界历史/null 世界变暖/null 世界各国/null 世界各地/null 世界和平/null 世界地图/null 世界地理/null 世界大国/null 世界大战/null 世界大赛/null 世界小姐选美/null 世界屋脊/null 世界市场/null 世界强国/null 世界形势/null 世界性/null 世界性古老问题/null 世界报/null 世界政治/null 世界文化/null 世界文化遗产/null 世界文化遗产地/null 世界文明/null 世界旅游组织/null 世界日报/null 世界时/null 世界末日/null 世界杯/null 世界杯赛/null 世界模式论/null 世界气象组织/null 世界水平/null 世界海关组织/null 世界潮流/null 世界的语言/null 世界知名/null 世界知识/null 世界知识产权组织/null 世界第一/null 世界粮食署/null 世界级/null 世界纪录/null 世界经济/null 世界经济论坛/null 世界维吾尔代表大会/null 世界自然基金会/null 世界范围/null 世界观/null 世界语/null 世界贸易/null 世界贸易中心/null 世界贸易组织/null 世界运动会/null 世界野生生物基金会/null 世界金融中心/null 世界锦标赛/null 世界闻名/null 世禄/null 世禄之家/null 世系/null 世纪/null 世纪末/null 世纪末年/null 世维会/null 世职/null 世胄/null 世臣/null 世行/null 世袭/null 世袭之争/null 世袭君主国/null 世贸/null 世贸中心大楼/null 世贸大厦/null 世贸组织/null 世运/null 世道/null 世道人情/null 世银/null 世锦赛/null 世间/null 世隔绝/null 世面/null 世风/null 世风日下/null 丘八/null 丘北/null 丘县/null 丘吉尔/null 丘墓/null 丘壑/null 丘尔金/null 丘成桐/null 丘比特/null 丘疹/null 丘脑/null 丘脑损伤/null 丘逢甲/null 丘阜/null 丘陵/null 丘鹬/null 丙丁/null 丙三醇/null 丙二醇/null 丙午/null 丙型/null 丙型肝炎/null 丙基/null 丙夜/null 丙子/null 丙寅/null 丙戌/null 丙方/null 丙氨酸/null 丙烯/null 丙烯腈/null 丙烯荃/null 丙烯酸/null 丙烯酸酯/null 丙烯醛/null 丙烷/null 丙环唑/null 丙申/null 丙种/null 丙种射线/null 丙等/null 丙类/null 丙糖/null 丙级/null 丙纶/null 丙辰/null 丙酮/null 丙酮酸/null 丙酮酸脱氢酶/null 丙醇/null 丙醚/null 丙醛/null 业业/null 业主/null 业于/null 业余/null 业余大学/null 业余学校/null 业余教育/null 业余时间/null 业余爱好/null 业余爱好者/null 业余者/null 业务/null 业务上/null 业务人员/null 业务员/null 业务学习/null 业务模式/null 业务水平/null 业务科/null 业务素质/null 业务联系/null 业务过失/null 业大/null 业已/null 业师/null 业后/null 业态/null 业户/null 业扩/null 业根/null 业海/null 业界/null 业界标准/null 业精于勤/null 业经/null 业绩/null 业者/null 业荒于嬉/null 业障/null 业龙/null 丛中/null 丛书/null 丛冢/null 丛刊/null 丛刻/null 丛台/null 丛台区/null 丛密/null 丛山/null 丛木/null 丛杂/null 丛林/null 丛林战/null 丛树/null 丛毛/null 丛状/null 丛生/null 丛脞/null 丛莽/null 丛葬/null 丛谈/null 丛集/null 东一榔头西一棒子/null 东三省/null 东东/null 东中国海/null 东丰/null 东主/null 东丽/null 东乡/null 东亚/null 东亚运动会/null 东亚银行/null 东交民巷/null 东京/null 东京塔/null 东京大学/null 东京帝国大学/null 东京湾/null 东仓里/null 东佃/null 东侧/null 东侨/null 东侵/null 东倒西歪/null 东偷西摸/null 东光/null 东兔西乌/null 东兰/null 东兴/null 东兴区/null 东冲西突/null 东加王国/null 东劳西燕/null 东势/null 东势乡/null 东势镇/null 东北/null 东北三省/null 东北东/null 东北亚/null 东北向/null 东北地区/null 东北大学/null 东北大鼓/null 东北平原/null 东北抗日联军/null 东北方/null 东北虎/null 东北角/null 东北部/null 东北风/null 东升/null 东半球/null 东华三院/null 东华门/null 东协国家/null 东单/null 东南/null 东南东/null 东南之美/null 东南亚/null 东南亚半岛/null 东南亚国/null 东南亚国家联盟/null 东南亚联盟/null 东南大学/null 东南方/null 东南竹箭/null 东南西北/null 东南西北中/null 东南角/null 东南部/null 东南风/null 东印度公司/null 东去/null 东口/null 东台/null 东向/null 东君/null 东吴/null 东吴大学/null 东周/null 东四/null 东土/null 东坡/null 东坡区/null 东坡肉/null 东坡肘子/null 东城/null 东太平洋/null 东太平洋隆起/null 东头村/null 东夷/null 东奔西向/null 东奔西撞/null 东奔西走/null 东奔西跑/null 东奔西闯/null 东宁/null 东安/null 东安区/null 东宝/null 东宝区/null 东宫/null 东家/null 东家效颦/null 东密德兰/null 东寻西觅/null 东屯区/null 东山/null 东山之志/null 东山乡/null 东山再起/null 东山区/null 东山复起/null 东山高卧/null 东岳/null 东岸/null 东川/null 东川区/null 东差西误/null 东巴文化/null 东市朝衣/null 东帝汶/null 东平/null 东床/null 东床坦腹/null 东床娇婿/null 东床娇客/null 东建/null 东引/null 东引乡/null 东张西望/null 东张西觑/null 东归/null 东征/null 东征战役/null 东征西怨/null 东征西讨/null 东徙西迁/null 东德/null 东扬西荡/null 东扭西捏/null 东扯西拉/null 东扶西倒/null 东抄西袭/null 东拉西扯/null 东拼西凑/null 东挨西撞/null 东挪西借/null 东挪西凑/null 东挪西辏/null 东捞西摸/null 东掩西遮/null 东撙西节/null 东方/null 东方三博士/null 东方人/null 东方千骑/null 东方国家/null 东方式/null 东方文明/null 东方日报/null 东方明珠塔/null 东方明珠电视塔/null 东方湾/null 东方狍/null 东方红/null 东方航空/null 东方通/null 东方阿閦佛/null 东方青龙/null 东方马脑炎病毒/null 东方黎族自治县/null 东施效颦/null 东昌/null 东昌区/null 东昌府/null 东昌府区/null 东昌纸/null 东明/null 东晋/null 东条/null 东条英机/null 东来/null 东来紫气/null 东来西去/null 东楼/null 东欧/null 东欧人/null 东欧国家/null 东欧平原/null 东正教/null 东歪西倒/null 东段/null 东汉/null 东汉末/null 东汉末年/null 东江/null 东沙/null 东沙群岛/null 东沟/null 东沟镇/null 东河/null 东河乡/null 东河区/null 东洋/null 东洋大海/null 东洋车/null 东洋鬼/null 东洋鬼子/null 东洲/null 东洲区/null 东流/null 东海/null 东海大学/null 东海大桥/null 东海岸/null 东海扬尘/null 东海捞针/null 东海舰队/null 东涂西摸/null 东渡/null 东港/null 东港区/null 东港镇/null 东游西逛/null 东湖/null 东湖区/null 东源/null 东溟/null 东瀛/null 东王公/null 东现汉纪/null 东疆/null 东盟国家/null 东直门/null 东瞧西望/null 东石/null 东石乡/null 东碰西撞/null 东穿西撞/null 东突/null 东突厥斯坦/null 东突厥斯坦伊斯兰运动/null 东突厥斯坦解放组织/null 东突组织/null 东窗事发/null 东窗事犯/null 东站/null 东端/null 东线/null 东经/null 东缅高原/null 东罗马帝国/null 东翻西倒/null 东胜/null 东胜区/null 东胡/null 东至/null 东航/null 东芝/null 东茅草盖/null 东荡西除/null 东莞/null 东营/null 东营区/null 东营市/null 东藏西躲/null 东行/null 东街/null 东补西凑/null 东西/null 东西半球/null 东西南北/null 东西南北人/null 东西南北客/null 东西周/null 东西宽/null 东西德/null 东西方/null 东西方文化/null 东西欧/null 东西湖/null 东西湖区/null 东观之殃/null 东观汉记/null 东观西望/null 东讨西伐/null 东讨西征/null 东诓西骗/null 东走西撞/null 东跑西颠/null 东路/null 东躲西藏/null 东躲西跑/null 东躲西逃/null 东躲西闪/null 东边/null 东边儿/null 东辽/null 东迁西徙/null 东逃西窜/null 东道/null 东道主/null 东道国/null 东遮西掩/null 东邻西舍/null 东郊/null 东部/null 东部时间/null 东郭/null 东郭先生/null 东野/null 东量西折/null 东门/null 东门黄犬/null 东闪西挪/null 东阳/null 东阿/null 东陵/null 东陵区/null 东隅/null 东零西散/null 东零西落/null 东非共同体/null 东非大地堑/null 东非大裂谷/null 东面/null 东风/null 东风区/null 东风压倒西风/null 东风吹马耳/null 东风射马耳/null 东飘西荡/null 东食西宿/null 东马/null 东魏/null 东鳞西爪/null 东鳞西瓜/null 东鸣西应/null 丝一般/null 丝丝/null 丝丝入扣/null 丝丝小雨/null 丝儿/null 丝光/null 丝制品/null 丝包线/null 丝发之功/null 丝工/null 丝巾/null 丝布/null 丝带/null 丝弦/null 丝恩发怨/null 丝料/null 丝束/null 丝杠/null 丝来线去/null 丝板/null 丝柏/null 丝棉/null 丝毫/null 丝毫不懈/null 丝氨酸/null 丝状/null 丝状物/null 丝状虫/null 丝球体/null 丝瓜/null 丝盘虫/null 丝稠/null 丝竹/null 丝竹乐/null 丝竹管弦/null 丝米/null 丝糕/null 丝纺/null 丝线/null 丝织/null 丝织品/null 丝织物/null 丝绒/null 丝绣/null 丝绦/null 丝绳/null 丝绵/null 丝绵似/null 丝绸/null 丝绸之路/null 丝绸古路/null 丝绸织物/null 丝缕/null 丝网/null 丝胶/null 丝虫/null 丝虫病/null 丝袜/null 丝质/null 丝路/null 丝边/null 丝锥/null 丝雨/null 丞相/null 丢三落四/null 丢下/null 丢丑/null 丢乌纱帽/null 丢了/null 丢人/null 丢人现眼/null 丢光/null 丢出/null 丢到/null 丢到家/null 丢卒/null 丢卒保车/null 丢命/null 丢在/null 丢失/null 丢字/null 丢官/null 丢尽/null 丢开/null 丢弃/null 丢手/null 丢损/null 丢掉/null 丢掷/null 丢放/null 丢盔卸甲/null 丢盔弃甲/null 丢眉丢眼/null 丢眉弄色/null 丢眼色/null 丢脸/null 丢轮扯炮/null 丢面/null 丢面子/null 丢饭碗/null 丢魂/null 丢魂落魄/null 丢鸡蛋/null 两万/null 两三个/null 两下/null 两下子/null 两下里/null 两不/null 两不找/null 两不相欠/null 两不误/null 两世为人/null 两两/null 两两三三/null 两个/null 两个中国/null 两个基本点/null 两个建设/null 两个文明/null 两个月/null 两义/null 两亲/null 两人/null 两代/null 两仪/null 两件/null 两件式/null 两价/null 两份/null 两伊战争/null 两会/null 两位/null 两例/null 两侧/null 两侧对称/null 两便/null 两便士/null 两倍/null 两党/null 两党关系/null 两党制/null 两全/null 两全其美/null 两公婆/null 两军/null 两分/null 两分法/null 两分钟/null 两则/null 两利/null 两制/null 两匹/null 两千/null 两千年/null 两半/null 两厢/null 两厢情愿/null 两叉/null 两口/null 两口子/null 两句/null 两只/null 两可/null 两台/null 两叶掩目/null 两名/null 两向/null 两周/null 两唇/null 两唇形/null 两回/null 两回事/null 两国/null 两国之间/null 两国人民/null 两国关系/null 两国间/null 两圈/null 两地/null 两场/null 两块/null 两声/null 两大/null 两大党/null 两大阵营/null 两天/null 两头/null 两头儿/null 两头白面/null 两套/null 两姨/null 两姨亲/null 两字/null 两宋/null 两宋时代/null 两审终审制/null 两家/null 两小无猜/null 两层/null 两岁/null 两岸/null 两岸三地/null 两岸对话/null 两州/null 两年/null 两广/null 两广总督/null 两座/null 两张/null 两强相斗/null 两当/null 两径间/null 两得/null 两德/null 两性/null 两性人/null 两性动物/null 两性化合物/null 两性差距/null 两性平等/null 两性异形/null 两性生殖/null 两性花/null 两情两愿/null 两手/null 两手空空/null 两抵/null 两指/null 两排/null 两支/null 两断/null 两方/null 两方面/null 两旁/null 两日/null 两星期/null 两晋/null 两晋时代/null 两曹/null 两月/null 两本/null 两权分离/null 两条/null 两条腿走路/null 两条路线/null 两条道路/null 两极/null 两极分化/null 两极性/null 两栖/null 两栖作战/null 两栖动物/null 两栖类/null 两栖进攻/null 两样/null 两样东西/null 两根/null 两次/null 两次三番/null 两次熟/null 两步/null 两歧/null 两毛/null 两汉/null 两江/null 两江道/null 两河/null 两河文明/null 两河流域/null 两淮/null 两清/null 两湖/null 两点/null 两点水/null 两点论/null 两班/null 两瓶/null 两生类/null 两用/null 两用人才/null 两用衫/null 两相/null 两相情愿/null 两省/null 两眼/null 两眼发黑/null 两着儿/null 两睡/null 两瞽相扶/null 两码/null 两码事/null 两种/null 两种制度/null 两秒/null 两税法/null 两立/null 两端/null 两笔/null 两类/null 两级/null 两线/null 两维/null 两羽状/null 两翼/null 两者/null 两者之间/null 两者都/null 两耳/null 两耳不闻窗外事/null 两肋/null 两肋插刀/null 两股/null 两脚/null 两脚台/null 两脚规/null 两腿/null 两臂/null 两色/null 两节棍/null 两虎共斗/null 两虎相争/null 两虎相斗/null 两行/null 两袖/null 两袖清风/null 两角/null 两讫/null 两豆塞耳/null 两败/null 两败俱伤/null 两起/null 两足/null 两路/null 两车/null 两轮/null 两辆/null 两边/null 两边倒/null 两迄/null 两造/null 两部/null 两部分/null 两重/null 两重性/null 两键/null 两间/null 两院/null 两院制/null 两难/null 两霸/null 两面/null 两面三刀/null 两面光/null 两面凸/null 两面凹/null 两面性/null 两面派/null 两项/null 两颊/null 两颊生津/null 两颗/null 两鬓/null 两鼠斗穴/null 严严实实/null 严了眼儿/null 严于/null 严于律己/null 严令/null 严以律己/null 严以责己宽以待人/null 严修/null 严冬/null 严刑/null 严刑峻法/null 严办/null 严加/null 严加惩处/null 严加申饬/null 严医/null 严厉/null 严厉打击/null 严厉批评/null 严命/null 严处/null 严复/null 严守/null 严守纪律/null 严实/null 严密/null 严寒/null 严寒期/null 严岛/null 严岛神社/null 严峻/null 严峻考验/null 严师/null 严惩/null 严惩不怠/null 严惩不贷/null 严慈/null 严打/null 严把/null 严拒/null 严整/null 严斥/null 严明/null 严查/null 严格/null 严格地/null 严格按照/null 严格控制/null 严格来讲/null 严格来说/null 严格管理/null 严格纪律/null 严格要求/null 严格遵守/null 严格隔离/null 严正/null 严治/null 严父/null 严禁/null 严竣/null 严策/null 严管/null 严紧/null 严罚/null 严而律己/null 严肃/null 严肃处理/null 严肃性/null 严肃查处/null 严肃认真/null 严苛/null 严词/null 严词拒绝/null 严谨/null 严责/null 严辞/null 严酷/null 严酷性/null 严重/null 严重关切/null 严重危害/null 严重后果/null 严重影响/null 严重性/null 严重破坏/null 严重问题/null 严防/null 严阵以待/null 严霜/null 严饬/null 丧乱/null 丧事/null 丧于非命/null 丧亡/null 丧亲/null 丧仪/null 丧假/null 丧偶/null 丧命/null 丧天害理/null 丧失/null 丧失了/null 丧失殆尽/null 丧失者/null 丧妻/null 丧子/null 丧家/null 丧家之犬/null 丧家之狗/null 丧尸/null 丧尽/null 丧尽天良/null 丧德/null 丧心/null 丧心病狂/null 丧志/null 丧明之痛/null 丧曲/null 丧服/null 丧期/null 丧权/null 丧权辱国/null 丧梆/null 丧棒/null 丧气/null 丧气话/null 丧气鬼/null 丧父/null 丧生/null 丧礼/null 丧胆/null 丧胆亡魂/null 丧胆销魂/null 丧荒/null 丧葬/null 丧葬费/null 丧身/null 丧钟/null 丧钟声/null 丧门星/null 丧门神/null 丧魂/null 丧魂失魄/null 丧魂落魄/null 个个/null 个中/null 个中人/null 个人/null 个人主义/null 个人伤害/null 个人储蓄/null 个人崇拜/null 个人意见/null 个人数字助理/null 个人电脑/null 个人英雄主义/null 个人赛/null 个人问题/null 个人防护装备/null 个人隐私/null 个位/null 个体/null 个体化/null 个体户/null 个体所有制/null 个体手工业/null 个体经济/null 个例/null 个儿/null 个别/null 个别人/null 个别谈话/null 个大/null 个头/null 个头儿/null 个子/null 个子矮/null 个展/null 个性/null 个性化/null 个把/null 个数/null 个旧/null 个月/null 个样/null 个案/null 个梦/null 个股/null 丫头/null 丫巴儿/null 丫挺/null 丫杈/null 丫环/null 丫髻/null 丫鬟/null 中上/null 中上层/null 中上游/null 中上等/null 中下/null 中下旬/null 中下游/null 中不溜儿/null 中专/null 中世纪/null 中东/null 中东战争/null 中东社/null 中东问题/null 中为/null 中举/null 中乐透/null 中了/null 中云/null 中亚/null 中亚国家/null 中亚地区/null 中亚细亚/null 中亚草原/null 中产/null 中产阶级/null 中人/null 中介/null 中介人/null 中介所/null 中企业/null 中伏/null 中休/null 中会/null 中伤/null 中伤者/null 中位数/null 中低产田/null 中低档/null 中低端/null 中住/null 中俄/null 中俄伊犁条约/null 中俄关系/null 中俄北京条约/null 中俄尼布楚条约/null 中俄布连斯奇界约/null 中俄恰克图界约/null 中俄改订条约/null 中俄瑷珲条约/null 中俄边界协议/null 中保/null 中值定理/null 中允/null 中元/null 中元普渡/null 中元节/null 中共/null 中共中央/null 中共中央宣传部/null 中共中央总书记/null 中共中央纪委监察部/null 中共中央纪律检查委员会/null 中共九大/null 中共党员/null 中兴/null 中兴新村/null 中写/null 中军/null 中农/null 中切/null 中刊/null 中前卫/null 中北大学/null 中北部/null 中区/null 中医/null 中医学/null 中医师/null 中医药/null 中医院/null 中午/null 中华书局/null 中华儿女/null 中华全国体育总会/null 中华全国妇女联合会/null 中华台北/null 中华字海/null 中华学生爱国民主同盟/null 中华民族/null 中华民族解放先锋队/null 中华电视/null 中华航空公司/null 中华苏维埃共和国/null 中南/null 中南半岛/null 中南海/null 中南部/null 中卫/null 中印/null 中印半岛/null 中厅/null 中压管/null 中原/null 中原区/null 中原地区/null 中原大学/null 中原板荡/null 中原逐鹿/null 中去/null 中古/null 中古汉语/null 中台/null 中叶/null 中名/null 中含有/null 中听/null 中和/null 中和作用/null 中和剂/null 中和力/null 中和市/null 中国区/null 中国专利局/null 中国东方航空/null 中国中央电视台/null 中国中心主义/null 中国之最/null 中国书店/null 中国交通建设/null 中国交通运输协会/null 中国产/null 中国人/null 中国人大/null 中国人权民运信息中心/null 中国人权组织/null 中国人民大学/null 中国人民对外友好协会/null 中国人民志愿军/null 中国人民政治协商会议/null 中国人民武装警察部队/null 中国人民解放军/null 中国人民解放军海军/null 中国人民解放军空军/null 中国人民银行/null 中国伊斯兰教协会/null 中国传媒大学/null 中国作协/null 中国作家协会/null 中国保险监督管理委员会/null 中国光大银行/null 中国共产主义青年团/null 中国共产党/null 中国共产党中央委员会/null 中国共产党中央委员会宣传部/null 中国军队/null 中国农业银行/null 中国制造/null 中国剩余定理/null 中国化/null 中国北方工业公司/null 中国医学/null 中国历史/null 中国历史博物馆/null 中国古代四大美女/null 中国史/null 中国同盟会/null 中国国家博物馆/null 中国国家原子能机构/null 中国国家地震局/null 中国国家环保局/null 中国国家环境保护总局/null 中国国家航天局/null 中国国家船舶公司/null 中国国民党/null 中国国民党革命委员会/null 中国国防科技信息中心/null 中国国际信托投资公司/null 中国国际广播电台/null 中国国际航空公司/null 中国国际贸易促进委员会/null 中国地球物理学会/null 中国地质大学/null 中国地质调查局/null 中国地震台/null 中国地震局/null 中国城/null 中国大百科全书出版社/null 中国大蝾螈/null 中国天主教爱国会/null 中国妇女/null 中国字/null 中国学/null 中国对外援助八项原则/null 中国小说史略/null 中国少年先锋队/null 中国工农红军/null 中国工商银行/null 中国工程院/null 中国左翼作家联盟/null 中国广播公司/null 中国建设银行/null 中国式/null 中国战区/null 中国政府/null 中国政法大学/null 中国教育和科研计算机网/null 中国教育网/null 中国文化/null 中国文学/null 中国文学艺术界联合会/null 中国文联/null 中国新民党/null 中国新闻社/null 中国新闻网/null 中国无线电频谱管理和监测/null 中国日报/null 中国时报/null 中国核能总公司/null 中国残疾人联合会/null 中国残联/null 中国民主促进会/null 中国民主同盟/null 中国民主建国会/null 中国民用航空局/null 中国民航/null 中国气象局/null 中国法学会/null 中国海/null 中国海事局/null 中国海洋石油总公司/null 中国消费者协会/null 中国游艺机游乐园协会/null 中国热/null 中国特色/null 中国特色的/null 中国特色社会主义/null 中国电信/null 中国电视公司/null 中国画/null 中国石化/null 中国石油化工股份有限公司/null 中国石油和化学工业协会/null 中国石油天然气集团公司/null 中国社会科学院/null 中国科协/null 中国科学院/null 中国移动通信/null 中国精密机械进出口公司/null 中国红十字会/null 中国经营报/null 中国网/null 中国美术馆/null 中国联通/null 中国致公党/null 中国航天工业公司/null 中国航天技术进出口公司/null 中国航海日/null 中国航空工业公司/null 中国航空运输协会/null 中国船舶贸易公司/null 中国船舶重工集团公司/null 中国菜/null 中国西北边陲/null 中国证券报/null 中国证券监督管理委员会/null 中国证监会/null 中国话/null 中国边界/null 中国进出口银行/null 中国通/null 中国邮政/null 中国银联/null 中国银行业监督管理委员会/null 中国长城工业公司/null 中国队/null 中国青年/null 中国青年报/null 中国革命/null 中国餐馆症候群/null 中圈套/null 中土/null 中场/null 中坚/null 中坚力量/null 中坜/null 中坜市/null 中垂线/null 中型/null 中型机/null 中埔/null 中埔乡/null 中堂/null 中士/null 中声/null 中复电讯/null 中外/null 中外合资/null 中外合资企业/null 中外合资经营企业/null 中外比/null 中外观众/null 中外记者/null 中大西洋脊/null 中天/null 中央/null 中央专制集权/null 中央书记处/null 中央人民广播电台/null 中央全会/null 中央军/null 中央军事委员会/null 中央军委/null 中央凹/null 中央分车带/null 中央办公厅/null 中央各部委/null 中央处理机/null 中央委员/null 中央委员会/null 中央宣传部/null 中央广播电台/null 中央情报局/null 中央戏剧学院/null 中央执行委员会/null 中央政府/null 中央政治局/null 中央政治局委员/null 中央政治局常委/null 中央文件/null 中央日报/null 中央民族大学/null 中央汇金/null 中央海岭/null 中央电视台/null 中央直辖市/null 中央省/null 中央研究院/null 中央社/null 中央财经大学/null 中央邦/null 中央部/null 中央集权/null 中央音乐学院/null 中头/null 中奖/null 中子/null 中子俘获/null 中子射线摄影/null 中子弹/null 中子态/null 中子数/null 中子星/null 中子源/null 中学/null 中学教师/null 中学生/null 中宁/null 中宣部/null 中寮/null 中寮乡/null 中导/null 中将/null 中尉/null 中小/null 中小企业/null 中小型/null 中小型企业/null 中小城市/null 中小学/null 中小学校/null 中小学生/null 中就/null 中局/null 中层/null 中层楼/null 中山/null 中山公园/null 中山区/null 中山大学/null 中山成彬/null 中山服/null 中山狼/null 中山狼传/null 中山舰事件/null 中山装/null 中山陵/null 中岛/null 中岳/null 中州/null 中州韵/null 中巴/null 中巴关系/null 中巴士/null 中师/null 中帮/null 中常/null 中幡/null 中干/null 中年/null 中年人/null 中度/null 中度性肺水肿/null 中庭/null 中庸/null 中庸之道/null 中式/null 中式盐/null 中式英语/null 中弹/null 中彩/null 中径/null 中微子/null 中德/null 中德诊所/null 中心/null 中心任务/null 中心体/null 中心内容/null 中心区/null 中心埋置关系从句/null 中心对称/null 中心店/null 中心思想/null 中心点/null 中心环节/null 中心矩/null 中心粒/null 中心角/null 中心词/null 中心语/null 中性/null 中性盐/null 中性粒细胞/null 中情局/null 中意/null 中戏/null 中成药/null 中技/null 中抠/null 中拇指/null 中招/null 中括号/null 中拮/null 中指/null 中控面板/null 中提琴/null 中提琴手/null 中文之星/null 中文信息/null 中文分词/null 中文名/null 中文网/null 中文学院/null 中文标准交换码/null 中文版/null 中文电脑/null 中文窗/null 中文系/中语系 中语系/中文系 中断/null 中断器/null 中断站/null 中新世/null 中新社/null 中新网/null 中方/null 中旅社/null 中日/null 中日关系/null 中日韩/null 中日韩统一表意文字/null 中日韩越/null 中旬/null 中景/null 中暑/null 中服/null 中朝/null 中期/null 中村/null 中板/null 中果皮/null 中枢/null 中枢神经/null 中枢神经系统/null 中枪/null 中标/null 中栏/null 中校/null 中档/null 中欧/null 中止/null 中正/null 中正区/null 中正纪念堂/null 中段/null 中殿/null 中毒/null 中毒性/null 中毒性肝炎/null 中毒途径/null 中毒酶/null 中气/null 中气层/null 中气层顶/null 中水期/null 中江/null 中沙群岛/null 中油/null 中法/null 中法战争/null 中法新约/null 中波/null 中洋脊/null 中派主义/null 中流/null 中流击楫/null 中流砥柱/null 中海/null 中海油/null 中港/null 中港台/null 中游/null 中源地震/null 中澳/null 中灶/null 中点/null 中焦/null 中爪哇/null 中牟/null 中环/null 中班/null 中生代/null 中生界/null 中用/null 中田英寿/null 中甸/null 中甸县/null 中盘/null 中直/null 中直机关/null 中看/null 中看不中用/null 中短债/null 中短波/null 中石化/null 中石器时代/null 中石油川东钻探公司/null 中研院/null 中碳钢/null 中科院/null 中程/null 中程导弹/null 中稻/null 中空/null 中空玻璃/null 中立/null 中立不倚/null 中立主义/null 中立化/null 中立国/null 中立国家/null 中立性/null 中立政策/null 中立派/null 中站/null 中站区/null 中等/null 中等专业学校/null 中等专业教育/null 中等城市/null 中等师范学校/null 中等技术学校/null 中等教育/null 中等普通教育/null 中等水平/null 中筋面粉/null 中策/null 中签/null 中箭落马/null 中篇/null 中篇小说/null 中级/null 中级品/null 中级法院/null 中纪/null 中纪委/null 中纬度/null 中线/null 中组部/null 中经/null 中统/null 中继/null 中继器/null 中继站/null 中继线/null 中缀/null 中缝/null 中网/null 中美/null 中美关系/null 中美文化研究中心/null 中美洲/null 中老年/null 中老年人/null 中耕/null 中耕机/null 中耳/null 中耳炎/null 中联部/null 中肯/null 中胚层/null 中脉/null 中脊/null 中脑/null 中脘穴/null 中腹部/null 中苏/null 中苏关系/null 中苏解决悬案大纲协定/null 中英/英中 中英对照/null 中英文对照/null 中草药/null 中药/null 中药材/null 中落/null 中行/null 中表/null 中装/null 中西/null 中西医/null 中西医结合/null 中西合并/null 中西合璧/null 中西文/null 中西部/null 中规中矩/null 中视/null 中计/null 中词/null 中财/null 中资/null 中越/null 中越战争/null 中距离/null 中路/null 中路梆子/null 中转/null 中转柜台/null 中转站/null 中轴/null 中轴线/null 中辍/null 中辣/null 中进/null 中远/null 中远太平洋/null 中远太平洋有限公司/null 中远集团/null 中远香港集团/null 中选/null 中途/null 中途岛/null 中途岛战役/null 中途搁浅/null 中途而废/null 中途退场/null 中道/null 中道而废/null 中邪/null 中部/null 中都/null 中醒/null 中量级/null 中银/null 中锋/null 中长/null 中长期/null 中长跑/null 中长铁路/null 中间/null 中间人/null 中间件/null 中间儿/null 中间名/null 中间商/null 中间圈/null 中间层/null 中间派/null 中间物/null 中间环节/null 中间神经元/null 中间纤维/null 中间级/null 中间线/null 中间色/null 中间语/null 中间路线/null 中间阶级/null 中队/null 中阮/null 中阳/null 中阶层/null 中院/null 中隔/null 中雨/null 中青/null 中青年/null 中非共和国/null 中韩/null 中音/null 中页/null 中项/null 中顾委/null 中频/null 中风/null 中餐/null 中餐馆/null 中饭/null 中饱/null 中饱私囊/null 中馈/null 中馈乏人/null 中高度防空/null 中高档/null 中高级/null 中高音/null 中魔/null 丰为圭臬/null 丰产/null 丰产田/null 丰亨豫大/null 丰俭由人/null 丰功/null 丰功伟业/null 丰功伟绩/null 丰功厚利/null 丰功懋烈/null 丰功盛烈/null 丰南/null 丰南区/null 丰厚/null 丰原/null 丰取刻与/null 丰台/null 丰城/null 丰姿/null 丰姿冶丽/null 丰姿绰约/null 丰宁/null 丰宁县/null 丰容靓饰/null 丰富/null 丰富多彩/null 丰富多采/null 丰年/null 丰年稔岁/null 丰度/null 丰收/null 丰收在望/null 丰收年/null 丰标不凡/null 丰水/null 丰汇/null 丰沛/null 丰泰/null 丰泽/null 丰泽区/null 丰润/null 丰润区/null 丰溪/null 丰溪里/null 丰满/null 丰满区/null 丰滨/null 丰滨乡/null 丰田/null 丰登/null 丰盈/null 丰盛/null 丰硕/null 丰硕成果/null 丰碑/null 丰美/null 丰腴/null 丰臣秀吉/null 丰茂/null 丰衣/null 丰衣足食/null 丰裕/null 丰议/null 丰赡/null 丰足/null 丰都/null 丰采/null 丰镇/null 丰韵/null 丰顺/null 丰餐/null 丰饶/null 串串/null 串亲戚/null 串亲访友/null 串供/null 串列/null 串口/null 串号/null 串在/null 串处理/null 串岗/null 串并联/null 串戏/null 串成/null 串扰/null 串换/null 串气/null 串流/null 串游/null 串演/null 串烧/null 串珠/null 串用/null 串秧儿/null 串筒/null 串线/null 串联/null 串花/null 串行/null 串行口/null 串行点阵打印机/null 串讲/null 串话/null 串谋/null 串起/null 串连/null 串通/null 串通一气/null 串铃/null 串门/null 串门儿/null 串门子/null 串音/null 临下/null 临为/null 临了/null 临事而惧/null 临亡/null 临产/null 临写/null 临军对垒/null 临军对阵/null 临刑/null 临别/null 临别赠言/null 临到/null 临危/null 临危下石/null 临危不惧/null 临危不挠/null 临危不顾/null 临危履冰/null 临危授命/null 临危效命/null 临危自悔/null 临危自省/null 临危自计/null 临危致命/null 临去/null 临去秋波/null 临周/null 临噎掘井/null 临场/null 临场经验/null 临城/null 临夏/null 临夏回族自治州/null 临夏州/null 临头/null 临安/null 临安县/null 临屯郡/null 临崖勒马/null 临川/null 临川区/null 临川羡鱼/null 临帖/null 临床/null 临床医学/null 临床特征/null 临床试验/null 临战/null 临战状态/null 临接/null 临摹/null 临敌卖阵/null 临文不讳/null 临时/null 临时代办/null 临时分居/null 临时动议/null 临时工/null 临时性/null 临时抱佛脚/null 临时政府/null 临时澳门市政执行委员会/null 临时的本地管理接口/null 临时贷款/null 临月/null 临月儿/null 临朐/null 临朝/null 临期失误/null 临机/null 临机制变/null 临机制胜/null 临机应变/null 临村/null 临桂/null 临检/null 临武/null 临死/null 临死不怯/null 临死不恐/null 临死不惧/null 临死前/null 临水/null 临水登山/null 临江/null 临池/null 临汾/null 临汾地区/null 临沂/null 临沂地区/null 临沧/null 临沧地区/null 临沭/null 临河/null 临河区/null 临河羡鱼/null 临泉/null 临泽/null 临洮/null 临海/null 临海县/null 临海水土志/null 临淄/null 临淄区/null 临深履冰/null 临深履薄/null 临清/null 临渊结网/null 临渊羡鱼/null 临渭/null 临渭区/null 临渴掘井/null 临渴穿井/null 临湘/null 临漳/null 临潭/null 临潼/null 临潼区/null 临潼斗宝/null 临澧/null 临猗/null 临界/null 临界体积/null 临界值/null 临界压/null 临界温度/null 临界点/null 临界状态/null 临界角/null 临界质量/null 临盆/null 临眺/null 临睡/null 临终/null 临翔/null 临翔区/null 临老/null 临蓐/null 临行/null 临街/null 临街房/null 临西/null 临视/null 临财不苟/null 临财苟得/null 临走/null 临近/null 临邑/null 临门/null 临问/null 临阵/null 临阵磨枪/null 临阵脱逃/null 临阵退缩/null 临难/null 临难不屈/null 临难不恐/null 临难不惧/null 临难不慑/null 临难不避/null 临难铸兵/null 临颍/null 临风/null 临风对月/null 临食废箸/null 临高/null 临魁/null 丸剂/null 丸子/null 丸药/null 丸药盒/null 丹东/null 丹书铁券/null 丹书铁契/null 丹佛/null 丹佛市/null 丹凤/null 丹凤眼/null 丹参/null 丹墀/null 丹寨/null 丹尼/null 丹尼尔/null 丹尼斯/null 丹巴/null 丹布朗/null 丹徒/null 丹徒区/null 丹心/null 丹心碧血/null 丹方/null 丹桂/null 丹棱/null 丹楹刻桷/null 丹毒/null 丹江/null 丹江口/null 丹沙/null 丹瑞/null 丹瑞大将/null 丹瑞将军/null 丹田/null 丹皮/null 丹砂/null 丹衷/null 丹阳/null 丹霞/null 丹霞地貌/null 丹霞山/null 丹青/null 丹顶鹤/null 丹魄/null 丹麦/null 丹麦人/null 丹麦包/null 丹麦语/null 为上/null 为丛驱雀/null 为主/null 为之一振/null 为乐/null 为了/null 为人/null 为人为彻/null 为人作嫁/null 为人处事/null 为人师表/null 为人所知/null 为人正直/null 为人民/null 为人民服务/null 为什么/null 为仁不富/null 为从/null 为他/null 为伍/null 为何/null 为你/null 为佳/null 为使/null 为例/null 为依据/null 为信/null 为公/null 为典型/null 为准/null 为利/null 为副/null 为力/null 为区别/null 为受/null 为名/null 为啥/null 为善/null 为善最乐/null 为国/null 为国为民/null 为国为蜮/null 为国争光/null 为国出力/null 为国捐躯/null 为奴/null 为好成歉/null 为妻/null 为安/null 为官/null 为宜/null 为害/null 为害最烈/null 为富不仁/null 为差/null 为己/null 为师/null 为序/null 为度/null 为德不卒/null 为德不终/null 为怀/null 为恶不悛/null 为患/null 为您/null 为慎重起见/null 为成/null 为我/null 为我之物/null 为我所用/null 为所/null 为所欲为/null 为把/null 为政/null 为政清廉/null 为敌/null 为数/null 为数不多/null 为数不少/null 为整/null 为方便用户/null 为时/null 为时不晚/null 为时尚早/null 为时已晚/null 为时未晚/null 为时过早/null 为是/null 为有/null 为期/null 为期不远/null 为本/null 为止/null 为此/null 为民/null 为民请命/null 为民除害/null 为求/null 为法自弊/null 为渊驱鱼/null 为渊驱鱼为丛驱雀/null 为特征/null 为王/null 为甚么/null 为生/null 为由/null 为界/null 为的/null 为的是/null 为盼/null 为真/null 为真理而斗争/null 为着/null 为私/null 为继/null 为群众服务/null 为能/null 为臣死忠为子死孝/null 为荣/null 为营/null 为虎作伥/null 为虎傅翼/null 为虎添翼/null 为虺弗摧为蛇若何/null 为蛇添足/null 为蛇画足/null 为裘为箕/null 为要/null 为证/null 为辅/null 为避免/null 为重/null 为限/null 为难/null 为零/null 为非作歹/null 为题/null 为首/null 为高/null 主不先客/null 主业/null 主义/null 主事/null 主人/null 主人公/null 主人翁/null 主人翁精神/null 主仆/null 主从/null 主件/null 主任/null 主任医生/null 主任委员/null 主伐/null 主体/null 主使/null 主供/null 主修/null 主光轴/null 主公/null 主凶/null 主刑/null 主列/null 主制/null 主力/null 主力军/null 主力舰/null 主力部队/null 主办/null 主办人/null 主办单位/null 主办国/null 主办权/null 主办者/null 主动/null 主动免疫/null 主动性/null 主动权/null 主动精神/null 主动脉/null 主动脉弓/null 主动轮/null 主动轴/null 主单位/null 主厅/null 主厨/null 主发条/null 主名/null 主和/null 主和弦/null 主和派/null 主哪/null 主唱/null 主唱者/null 主啊/null 主因/null 主场/null 主妇/null 主妇们/null 主妇似/null 主委/null 主婚/null 主嫌/null 主子/null 主审/null 主客/null 主客观/null 主宰/null 主宰者/null 主宾/null 主宾谓/null 主导/null 主导作用/null 主导地位/null 主导性/null 主导权/null 主导者/null 主将/null 主岭/null 主峰/null 主币/null 主帅/null 主席/null 主席令/null 主席台/null 主席团/null 主席国/null 主干/null 主干形/null 主干线/null 主干网络/null 主干网路/null 主序星/null 主张/null 主心骨/null 主忧臣辱/null 主意/null 主战/null 主战派/null 主战论/null 主打品牌/null 主承销商/null 主持/null 主持人/null 主持会议/null 主持正义/null 主掌/null 主控/null 主控台/null 主播/null 主攻/null 主攻手/null 主政/null 主教/null 主教练/null 主敬存诚/null 主文/null 主料/null 主旋律/null 主族/null 主族元素/null 主日/null 主日学/null 主旨/null 主星/null 主显/null 主显节/null 主机/null 主机名/null 主机板/null 主权/null 主权国/null 主权国家/null 主材/null 主板/null 主枝/null 主根/null 主格/null 主楼/null 主次/null 主治/null 主治医师/null 主治医生/null 主法向量/null 主流/null 主流产品/null 主演/null 主焦点/null 主焦煤/null 主父/null 主牧师/null 主犯/null 主环/null 主球/null 主理/null 主祭/null 主祷文/null 主科/null 主稿/null 主笔/null 主管/null 主管人/null 主管人员/null 主管教区/null 主管机关/null 主管部门/null 主簿/null 主粮/null 主线/null 主组/null 主编/null 主罚/null 主群/null 主群组/null 主考/null 主考人/null 主考者/null 主脑/null 主航道/null 主菜/null 主街/null 主表/null 主要/null 主打/null 主要人员/null 主要原因/null 主要矛盾/null 主见/null 主观/null 主观主义/null 主观化/null 主观原因/null 主观唯心主义/null 主观性/null 主观能动性/null 主观论/null 主观辩证法/null 主视图/null 主角/null 主计/null 主计员/null 主计室/null 主讲/null 主诉/null 主词/null 主词表/null 主试/null 主语/null 主课/null 主调/null 主调音/null 主调音乐/null 主谋/null 主谓/null 主谓句/null 主谓宾/null 主谓结构/null 主路/null 主车群/null 主轴/null 主轴承/null 主辱臣死/null 主送/null 主道/null 主队/null 主震/null 主音/null 主页/null 主顾/null 主题/null 主题思想/null 主题标引/null 主题歌/null 主题法/null 主题词/null 主食/null 主麻/null 丽丽/null 丽人/null 丽佳娜/null 丽实/null 丽日/null 丽水/null 丽水地区/null 丽江/null 丽江古城/null 丽江地区/null 丽江纳西族自治县/null 丽池卡登/null 丽致/null 丽色/null 丽词/null 丽语/null 丽质/null 丽辞/null 丽都/null 丽魄/null 举一反三/null 举一废百/null 举不胜举/null 举世/null 举世无伦/null 举世无双/null 举世无比/null 举世混浊/null 举世瞩目/null 举世罕见/null 举世莫比/null 举世闻名/null 举个/null 举事/null 举人/null 举例/null 举例发凡/null 举例来说/null 举例说明/null 举借/null 举债/null 举兵/null 举凡/null 举出/null 举办/null 举办者/null 举动/null 举十知九/null 举反证/null 举发/null 举哀/null 举国/null 举国上下/null 举国欢腾/null 举头/null 举子/null 举家/null 举手/null 举手之劳/null 举手加额/null 举手可采/null 举手扣额/null 举手投足/null 举手赞成/null 举报/null 举报人/null 举报信/null 举报者/null 举措/null 举措失当/null 举旗/null 举杯/null 举枪/null 举架/null 举案齐眉/null 举棋/null 举棋不定/null 举止/null 举止不凡/null 举止大方/null 举止失措/null 举步/null 举步如飞/null 举步生风/null 举步维艰/null 举步走/null 举法/null 举火/null 举用/null 举目/null 举目千里/null 举目无亲/null 举直措枉/null 举眼无亲/null 举着/null 举荐/null 举行/null 举行仪式/null 举行会谈/null 举行婚礼/null 举要删芜/null 举要治繁/null 举觞称庆/null 举证/null 举贤使能/null 举贤良对策/null 举起/null 举足轻重/null 举酒/null 举酒作乐/null 举重/null 举重若轻/null 举隅法/null 举高/null 举鼎拔山/null 举鼎绝膑/null 乃东/null 乃堆拉/null 乃堆拉山口/null 乃尔/null 乃师所存者/null 乃心王室/null 乃文乃武/null 乃是/null 乃武乃文/null 乃至/null 乃见/null 乃论/null 久久/null 久之/null 久了/null 久仰/null 久仰大名/null 久候/null 久假不归/null 久别/null 久别重逢/null 久前/null 久品/null 久地/null 久坐/null 久存/null 久安长治/null 久已/null 久性/null 久慕/null 久慕盛名/null 久拖/null 久拖不办/null 久拨/null 久攻不下/null 久旱/null 久旱逢甘雨/null 久旷/null 久梦初醒/null 久治/null 久留/null 久病/null 久病成医/null 久病成良医/null 久称/null 久等/null 久经/null 久经沙场/null 久经考验/null 久经锻炼/null 久而久之/null 久话/null 久负盛名/null 久辩/null 久远/null 久违/null 久长/null 久闻大名/null 久阔/null 久陪/null 久隔/null 么么/null 么些/null 么样/null 义上/null 义不取容/null 义不容辞/null 义不生财/null 义不辞难/null 义举/null 义之所在/null 义乌/null 义人/null 义仓/null 义作/null 义兵/null 义军/null 义冢/null 义刑义杀/null 义务/null 义务上/null 义务人/null 义务兵/null 义务兵役制/null 义务劳动/null 义务工作者/null 义务教育/null 义务论/null 义勇/null 义勇兵/null 义勇军/null 义勇军进行曲/null 义卖/null 义卖会/null 义县龙/null 义和乱/null 义和团/null 义和团运动/null 义和拳/null 义地/null 义塾/null 义士/null 义大利/null 义夫节妇/null 义女/null 义子/null 义学/null 义尽/null 义山恩海/null 义工/null 义师/null 义形于色/null 义怒/null 义愤/null 义愤填胸/null 义愤填膺/null 义战/null 义断恩绝/null 义方之训/null 义旗/null 义无反顾/null 义无返顾/null 义款/null 义正词严/null 义正辞严/null 义母/null 义气/null 义气相投/null 义演/null 义父/null 义父母/null 义理/null 义竹/null 义竹乡/null 义结金兰/null 义肢/null 义薄/null 义行/null 义警/null 义诊/null 义重恩山/null 义项/null 义马/null 义齿/null 之一/null 之七/null 之三/null 之上/null 之下/null 之不/null 之中/null 之为/null 之主/null 之举/null 之久/null 之义/null 之乎者也/null 之九/null 之乱/null 之争/null 之事/null 之二/null 之五/null 之交/null 之人/null 之以/null 之价/null 之价值/null 之份/null 之众/null 之位/null 之余/null 之作/null 之侧/null 之便/null 之值/null 之兆/null 之先/null 之光/null 之八/null 之八九/null 之六/null 之兵/null 之内/null 之冠/null 之冤/null 之分/null 之列/null 之初/null 之别/null 之前/null 之功/null 之势/null 之北/null 之十/null 之半/null 之又/null 之友/null 之口/null 之名/null 之后/null 之后不久/null 之和/null 之啥/null 之四/null 之国/null 之在/null 之地/null 之境/null 之墓/null 之士/null 之声/null 之壳/null 之处/null 之外/null 之多/null 之夜/null 之大/null 之夫/null 之女/null 之妻/null 之子/null 之字形/null 之宝/null 之实/null 之客/null 之家/null 之尊/null 之小/null 之差/null 之差是/null 之年/null 之度/null 之后/null 之徒/null 之心/null 之志/null 之态度/null 之恋/null 之恩/null 之患/null 之情/null 之意/null 之战/null 之所以/null 之才/null 之故/null 之数/null 之旁/null 之旅/null 之日/null 之日起/null 之时/null 之明/null 之本/null 之术/null 之极/null 之梦/null 之欢/null 之欲/null 之歌/null 之死/null 之死靡它/null 之母/null 之比/null 之气/null 之水/null 之河/null 之泰/null 之流/null 之源/null 之火/null 之灾/null 之父/null 之物/null 之犬/null 之王/null 之理/null 之用/null 之由/null 之痛/null 之百/null 之短/null 之神/null 之禄/null 之福/null 之秋/null 之类/null 之罪/null 之美/null 之而/null 之职/null 之肉/null 之能事/null 之至/null 之色/null 之行/null 之见/null 之角/null 之言/null 之计/null 之论/null 之词/null 之语/null 之谈/null 之谊/null 之貉/null 之财/null 之路/null 之辈/null 之辞/null 之过/null 之道/null 之都/null 之量/null 之钟/null 之长/null 之门/null 之间/null 之际/null 之险/null 之隔/null 之难/null 之音/null 之首/null 之马/null 之鸟/null 乌七八槽/null 乌七八糟/null 乌丘/null 乌丘乡/null 乌丝/null 乌之雌雄/null 乌云/null 乌云密布/null 乌亮/null 乌什/null 乌什塔拉/null 乌什塔拉乡/null 乌什塔拉回族乡/null 乌伊岭/null 乌伊岭区/null 乌伦古河/null 乌伦古湖/null 乌克丽丽/null 乌克兰人/null 乌兰/null 乌兰夫/null 乌兰察布/null 乌兰巴托/null 乌兰浩特/null 乌兰牧骑/null 乌兹别克/null 乌兹别克人/null 乌兹别克斯坦/null 乌兹别克族/null 乌冬面/null 乌压压/null 乌合/null 乌合之众/null 乌合之卒/null 乌呼/null 乌塌菜/null 乌天黑地/null 乌头/null 乌头白马生角/null 乌娘/null 乌孙国/null 乌孜别克/null 乌孜别克语/null 乌审/null 乌尔/null 乌尔姆/null 乌尔格/null 乌尔禾/null 乌尔禾区/null 乌尔都语/null 乌干达/null 乌干达人/null 乌当/null 乌当区/null 乌德勒支/null 乌恰/null 乌托邦/null 乌托邦社会主义/null 乌拉/null 乌拉圭/null 乌拉圭人/null 乌拉尔/null 乌拉尔山/null 乌拉尔山脉/null 乌拉特/null 乌拉特草原/null 乌拉草/null 乌拜迪/null 乌日/null 乌日乡/null 乌普萨拉/null 乌有/null 乌有先生/null 乌木/null 乌来/null 乌来乡/null 乌枣/null 乌桓/null 乌桕/null 乌梁海/null 乌梅/null 乌榄/null 乌江/null 乌油油/null 乌泱乌泱/null 乌洛托品/null 乌海/null 乌涂/null 乌溜溜/null 乌滋别克/null 乌滋别克斯坦/null 乌灯黑火/null 乌烟瘴气/null 乌焉成马/null 乌煤/null 乌特列支/null 乌白菜/null 乌纱帽/null 乌舅金奴/null 乌良哈/null 乌节路/null 乌芋/null 乌苏/null 乌苏里斯克/null 乌苏里江/null 乌药/null 乌蒙山/null 乌蓝/null 乌衣子弟/null 乌西亚/null 乌讷楚/null 乌语/null 乌贼/null 乌达/null 乌达区/null 乌里雅苏台/null 乌金/null 乌青/null 乌飞兔走/null 乌饭果/null 乌饭树/null 乌马河/null 乌马河区/null 乌骨鸡/null 乌鱼/null 乌鱼蛋/null 乌鲁克恰提/null 乌鲁克恰提县/null 乌鲁汝/null 乌鲳/null 乌鳢/null 乌鸟之情/null 乌鸟私情/null 乌鸡/null 乌鸡白凤丸/null 乌鸦/null 乌鸦嘴/null 乌鸦座/null 乌鸫/null 乌鹊通巢/null 乌黎雅/null 乌黑/null 乌黑色/null 乌齐雅/null 乌龙/null 乌龙球/null 乌龙茶/null 乌龙面/null 乌龟/null 乌龟壳/null 乍一看/null 乍冷乍热/null 乍到/null 乍富/null 乍寒/null 乍得/null 乍得湖/null 乍晴/null 乍暖/null 乍暖还寒/null 乍浦/null 乍浦镇/null 乍热/null 乍然/null 乍猛的/null 乍现/null 乍看/null 乍离破碎/null 乍见/null 乎乎/null 乏人照顾/null 乏力/null 乏味/null 乏时/null 乏煤/null 乏燃料/null 乏燃料棒/null 乏货/null 乐不可支/null 乐不可极/null 乐不可言/null 乐不开支/null 乐不思蜀/null 乐业/null 乐东/null 乐东县/null 乐之/null 乐乐陶陶/null 乐了/null 乐事/null 乐于/null 乐于助人/null 乐交/null 乐亭/null 乐亭大鼓/null 乐人/null 乐以忘忧/null 乐儿/null 乐华梅兰/null 乐句/null 乐台/null 乐号/null 乐呵呵/null 乐和/null 乐善/null 乐善不倦/null 乐善好义/null 乐善好施/null 乐器/null 乐团/null 乐园/null 乐土/null 乐圣/null 乐在其中/null 乐地/null 乐坛/null 乐声/null 乐天/null 乐天派/null 乐天知命/null 乐子/null 乐学者/null 乐安/null 乐山/null 乐山乐水/null 乐山地区/null 乐师/null 乐平/null 乐府/null 乐府诗集/null 乐开花/null 乐律/null 乐得/null 乐意/null 乐感/null 乐户/null 乐手/null 乐捐/null 乐施会/null 乐昌/null 乐昌之镜/null 乐昌分镜/null 乐曲/null 乐极/null 乐极则悲/null 乐极悲来/null 乐极悲生/null 乐极生悲/null 乐果/null 乐歌/null 乐此/null 乐此不倦/null 乐此不疲/null 乐死/null 乐段/null 乐池/null 乐法/null 乐浪郡/null 乐清/null 乐滋滋/null 乐理/null 乐的/null 乐着/null 乐祸/null 乐祸幸灾/null 乐窝/null 乐章/null 乐经/null 乐羊羊/null 乐而不荒/null 乐而忘归/null 乐而忘返/null 乐腾/null 乐至/null 乐舞/null 乐蒂/null 乐见/null 乐观/null 乐观主义/null 乐观主义者/null 乐观者/null 乐调/null 乐谱/null 乐谱架/null 乐谱集/null 乐贫甘贱/null 乐购/null 乐趣/null 乐迷/null 乐透/null 乐道/null 乐道安贫/null 乐都/null 乐钟/null 乐队/null 乐陵/null 乐陶陶/null 乐音/null 乐颠了馅/null 乐高/null 乐龄/null 乒乒/null 乒乓/null 乒乓球/null 乒乓球台/null 乒乓球拍/null 乒坛/null 乓乓/null 乔丹/null 乔其纱/null 乔冠华/null 乔巴山/null 乔布/null 乔布斯/null 乔戈里峰/null 乔木/null 乔松之寿/null 乔林/null 乔格里峰/null 乔治/null 乔治・华盛顿/null 乔治・奥威尔/null 乔治・索罗斯/null 乔治一世/null 乔治亚/null 乔治城/null 乔治城大学/null 乔治敦/null 乔石/null 乔答摩/null 乔红/null 乔纳森/null 乔脑/null 乔装/null 乔装打扮/null 乔装改扮/null 乔迁/null 乔迁之喜/null 乔麦/null 乖乖/null 乖僻/null 乖儿/null 乖剌/null 乖孩子/null 乖巧/null 乖张/null 乖忤/null 乖戾/null 乖涨/null 乖癖/null 乖离/null 乖舛/null 乖觉/null 乖谬/null 乖迕/null 乖顺/null 乘上/null 乘人不备/null 乘人之危/null 乘人之厄/null 乘以/null 乘伪行诈/null 乘便/null 乘兴/null 乘兴而来/null 乘其不意/null 乘凉/null 乘务/null 乘务员/null 乘势/null 乘号/null 乘员/null 乘坐/null 乘坚策肥/null 乘坚驱良/null 乘客/null 乘幂/null 乘座/null 乘快艇/null 乘数/null 乘方/null 乘机/null 乘机应变/null 乘槎/null 乘此/null 乘汽车/null 乘法/null 乘法器/null 乘法表/null 乘法逆/null 乘火打劫/null 乘用/null 乘用车/null 乘积/null 乘筏者/null 乘算器/null 乘肥衣轻/null 乘胜/null 乘胜前进/null 乘胜追击/null 乘胜逐北/null 乘舆播越/null 乘舆播迁/null 乘船/null 乘虚/null 乘虚而入/null 乘警/null 乘车/null 乘车戴笠/null 乘车者/null 乘轻驱肥/null 乘间投隙/null 乘间策肥/null 乘除/null 乘隙/null 乘隙而入/null 乘风/null 乘风破浪/null 乘飞机/null 乘鹤/null 乘龙/null 乘龙快婿/null 乙丑/null 乙二醇/null 乙亥/null 乙卯/null 乙地/null 乙型/null 乙型肝炎/null 乙型脑炎/null 乙基/null 乙夜/null 乙太/null 乙太网路/null 乙巳/null 乙方/null 乙未/null 乙氧基/null 乙氨基/null 乙炔/null 乙烯/null 乙烯基/null 乙烷/null 乙状结肠/null 乙种/null 乙种促效剂/null 乙种射线/null 乙种粒子/null 乙等/null 乙类/null 乙级/null 乙肝/null 乙胺/null 乙脑/null 乙苯/null 乙酉/null 乙酰/null 乙酰胆碱/null 乙酰胺吡咯烷酮/null 乙酸/null 乙酸基/null 乙酸根/null 乙酸盐/null 乙醇/null 乙醇酸/null 乙醚/null 乙醛/null 乜嘢/null 乜斜/null 九一三事件/null 九一八事变/null 九七/null 九万/null 九三/null 九三○事件/null 九三学社/null 九世之仇/null 九个/null 九中全会/null 九九/null 九九乘法表/null 九九天/null 九九归一/null 九九重阳/null 九书不如无书/null 九二○/null 九五/null 九五之位/null 九五之尊/null 九人/null 九亿/null 九份/null 九倍/null 九六/null 九分/null 九分之一/null 九十/null 九十一/null 九十七/null 九十万/null 九十三/null 九十九/null 九十二/null 九十五/null 九十八/null 九十六/null 九十四/null 九十年/null 九十年代/null 九千/null 九千万/null 九华山/null 九卿/null 九原区/null 九原可作/null 九台/null 九号/null 九号球/null 九合一匡/null 九品/null 九品中正/null 九品中正制/null 九四/null 九声六调/null 九大/null 九天/null 九头鸟/null 九如/null 九如乡/null 九官鸟/null 九宫/null 九宫山/null 九宫山镇/null 九宫格儿/null 九宫格数独/null 九寨沟/null 九寨沟风景名胜区/null 九尾狐/null 九尾龟/null 九层/null 九层塔/null 九届/null 九岁/null 九嶷山/null 九州/null 九州岛/null 九巴/null 九年/null 九归/null 九成/null 九折/null 九斤黄鸡/null 九族/null 九日/null 九时/null 九曲回肠/null 九曲堂/null 九月/null 九月九日忆山东兄弟/null 九月份/null 九本/null 九条/null 九校联盟/null 九格/null 九楼/null 九次/null 九步/null 九死一生/null 九死不悔/null 九段/null 九江/null 九江地区/null 九泉/null 九泉之下/null 九洲/null 九派/null 九流/null 九流三教/null 九流百家/null 九渊/null 九点/null 九烈三贞/null 九牛一毛/null 九牛二虎/null 九牛二虎之力/null 九百/null 九百万/null 九省/null 九稳/null 九窍/null 九章/null 九章算术/null 九股/null 九路/null 九边/null 九边形/null 九进法/null 九连环/null 九里/null 九里区/null 九重奏/null 九重霄/null 九零后/null 九霄/null 九霄云外/null 九面体/null 九音锣/null 九鼎/null 九鼎大吕/null 九齿钉耙/null 九龙/null 九龙坡/null 九龙城/null 乞丐/null 乞人/null 乞伏/null 乞休/null 乞儿/null 乞力马扎罗山/null 乞和/null 乞哀/null 乞哀告怜/null 乞巧/null 乞怜/null 乞怜摇尾/null 乞恕/null 乞援/null 乞求/null 乞求者/null 乞浆得酒/null 乞灵/null 乞纳/null 乞讨/null 乞降/null 乞食/null 也不例外/null 也不能/null 也好/null 也就是/null 也就是说/null 也罢/null 也行/null 也许/null 习与性成/null 习习/null 习以为常/null 习以成俗/null 习以成性/null 习以成风/null 习作/null 习俗/null 习俗移性/null 习字/null 习尚/null 习常/null 习得/null 习得性/null 习得性无助感/null 习性/null 习惯/null 习惯上/null 习惯了/null 习惯于/null 习惯势力/null 习惯性/null 习惯成自然/null 习惯法/null 习惯用法/null 习惯用语/null 习惯自然/null 习惯若自然/null 习染/null 习气/null 习水/null 习用/null 习而不察/null 习艺/null 习见/null 习近平/null 习非成是/null 习非胜是/null 习题/null 习题集/null 乡下/null 乡下习气/null 乡下人/null 乡下佬/null 乡乡/null 乡井/null 乡亲/null 乡亲们/null 乡人/null 乡人子/null 乡俗/null 乡僻/null 乡办/null 乡勇/null 乡区/null 乡医/null 乡友/null 乡团/null 乡土/null 乡土气/null 乡土气息/null 乡土观念/null 乡地/null 乡城/null 乡学/null 乡宁/null 乡巴佬/null 乡干部/null 乡思/null 乡情/null 乡愁/null 乡愿/null 乡戚/null 乡政府/null 乡曲/null 乡曲之誉/null 乡村/null 乡村医生/null 乡村奶酪/null 乡村式/null 乡村音乐/null 乡民/null 乡级/null 乡绅/null 乡规民约/null 乡试/null 乡谈/null 乡谊/null 乡贤/null 乡贯/null 乡邮/null 乡邻/null 乡里/null 乡野/null 乡镇/null 乡镇企业/null 乡镇企业局/null 乡镇经济/null 乡长/null 乡间/null 乡音/null 乡风慕义/null 书上/null 书不尽言/null 书中/null 书丹/null 书五/null 书亭/null 书人/null 书会/null 书体/null 书信/null 书信集/null 书册/null 书写/null 书写不能症/null 书写器/null 书写符号/null 书写者/null 书写语言/null 书函/null 书刊/null 书剑飘零/null 书包/null 书包带/null 书卷/null 书卷气/null 书口/null 书号/null 书名/null 书名号/null 书后/null 书呆子/null 书商/null 书圣/null 书场/null 书坊/null 书坛/null 书城/null 书堆/null 书声朗朗/null 书声琅琅/null 书外/null 书夹/null 书契/null 书套/null 书学/null 书富五车/null 书局/null 书屋/null 书展/null 书市/null 书库/null 书店/null 书归正传/null 书录/null 书影/null 书后/null 书房/null 书扉/null 书报/null 书报费/null 书摊/null 书摘/null 书文/null 书斋/null 书本/null 书本知识/null 书札/null 书板/null 书架/null 书柜/null 书柬/null 书案/null 书桌/null 书档/null 书橱/null 书款/null 书法/null 书法家/null 书牍/null 书物/null 书状/null 书生/null 书生气/null 书用/null 书画/null 书画家/null 书画毡/null 书痴/null 书癖/null 书皮/null 书皮儿/null 书目/null 书目工作/null 书眉/null 书社/null 书稿/null 书立/null 书童/null 书符咒水/null 书签/null 书简/null 书箧/null 书箱/null 书籍/null 书籍商/null 书籍装帧/null 书约/null 书经/null 书缺简脱/null 书背/null 书脊/null 书虫/null 书蠹/null 书角/null 书记/null 书记员/null 书记处/null 书证/null 书评/null 书读五车/null 书迹/null 书通二酉/null 书里/null 书钉/null 书院/null 书面/null 书面发言/null 书面声明/null 书面报告/null 书面材料/null 书面许可/null 书面语/null 书面语言/null 书面通知/null 书页/null 书风/null 书馆/null 书馆儿/null 书香/null 书香门第/null 乩童/null 买下/null 买不起/null 买东西/null 买个/null 买主/null 买书/null 买了/null 买些/null 买价/null 买光/null 买入/null 买入价/null 买关节/null 买到/null 买办/null 买办资产阶级/null 买办资本/null 买单/null 买卖/null 买卖人/null 买卖双方/null 买卖婚姻/null 买卖方/null 买去/null 买回/null 买好/null 买它/null 买官/null 买定/null 买家/null 买帐/null 买张/null 买得/null 买得到/null 买成/null 买房/null 买断/null 买方/null 买方市场/null 买春/null 买来/null 买椟还珠/null 买点/null 买牛卖剑/null 买的/null 买盘/null 买票/null 买空/null 买空仓/null 买空卖空/null 买笑追欢/null 买给/null 买者/null 买臣覆水/null 买菜求益/null 买账/null 买货/null 买走/null 买起/null 买辆/null 买进/null 买通/null 买青苗/null 买面子/null 买餸/null 买马招军/null 乱七八糟/null 乱世/null 乱世佳人/null 乱世凶年/null 乱丢/null 乱串/null 乱乱/null 乱了/null 乱了营/null 乱事/null 乱交/null 乱伦/null 乱伦罪/null 乱作一团/null 乱作决定/null 乱俗伤风/null 乱党/null 乱兵/null 乱写/null 乱冲/null 乱凑/null 乱划/null 乱刺/null 乱割/null 乱加/null 乱加干涉/null 乱动/null 乱占耕地/null 乱反射/null 乱发/null 乱叫/null 乱吃/null 乱咕攘/null 乱咬/null 乱哄哄/null 乱喊/null 乱国/null 乱坟/null 乱坟岗/null 乱坠天花/null 乱堆/null 乱塞/null 乱头粗服/null 乱奏/null 乱套/null 乱子/null 乱射/null 乱开/null 乱弄/null 乱弹/null 乱弹琴/null 乱性/null 乱想/null 乱成/null 乱打/null 乱扔/null 乱扣/null 乱扣帽子/null 乱扯/null 乱抓/null 乱拿/null 乱挤/null 乱掉/null 乱推/null 乱提/null 乱搞/null 乱搞男女关系/null 乱摊派/null 乱摸/null 乱撞/null 乱支/null 乱收/null 乱收费/null 乱放/null 乱政/null 乱斗/null 乱杀/null 乱杂/null 乱来/null 乱民/null 乱流/null 乱涂/null 乱涂乱画/null 乱涨/null 乱涨价/null 乱滚/null 乱点鸳鸯/null 乱烘烘/null 乱物/null 乱用/null 乱画/null 乱真/null 乱石/null 乱石砸死/null 乱码/null 乱砍/null 乱砍滥伐/null 乱离/null 乱穿马路/null 乱窜/null 乱箭攒心/null 乱糟糟/null 乱纪/null 乱纷/null 乱纷纷/null 乱结/null 乱罚款/null 乱翻/null 乱腾/null 乱腾腾/null 乱臣/null 乱臣贼子/null 乱臣逆子/null 乱舞/null 乱花/null 乱花钱/null 乱葬/null 乱葬岗子/null 乱蓬/null 乱蓬蓬/null 乱要/null 乱视眼/null 乱记/null 乱讲/null 乱语/null 乱说/null 乱说乱动/null 乱象/null 乱跑/null 乱跳/null 乱蹦/null 乱转/null 乱闯/null 乱飞/null 乱首垢面/null 乱骂/null 乱麻/null 乱麻麻/null 乳交/null 乳体/null 乳儿/null 乳制/null 乳制品/null 乳剂/null 乳剂质/null 乳化/null 乳化剂/null 乳名/null 乳品/null 乳品店/null 乳头/null 乳头状/null 乳头瘤/null 乳量/null 乳娘/null 乳山/null 乳峰/null 乳房/null 乳房炎/null 乳房状/null 乳晕/null 乳母/null 乳水交融/null 乳汁/null 乳汁状/null 乳沟/null 乳油/null 乳浆/null 乳浊液/null 乳液/null 乳源/null 乳源县/null 乳牙/null 乳牛/null 乳状/null 乳状物/null 乳猪/null 乳痈/null 乳癌/null 乳白/null 乳白光/null 乳白天空/null 乳白色/null 乳皮/null 乳石/null 乳突/null 乳突炎/null 乳突窦/null 乳粉/null 乳糖/null 乳糖不耐症/null 乳糖酶/null 乳糜/null 乳罩/null 乳胶/null 乳胶液/null 乳胶漆/null 乳脂/null 乳脂状/null 乳腐/null 乳腺/null 乳腺炎/null 乳腺癌/null 乳臭/null 乳臭未干/null 乳色/null 乳部/null 乳酪/null 乳酪蛋糕/null 乳酸/null 乳酸盐/null 乳酸菌/null 乳钵/null 乳香/null 乳香树/null 乳香脂/null 乳鸽/null 乳齿/null 乳齿象/null 乶下/null 乾嘉三大家/null 乾坤/null 乾坤再造/null 乾安/null 乾旱/null 乾燥/null 乾粮/null 乾脆/null 乾陵/null 乾隆/null 了不得/null 了不起/null 了了/null 了了草草/null 了事/null 了债/null 了却/null 了却此生/null 了如指掌/null 了局/null 了帐/null 了当/null 了得/null 了愿/null 了手/null 了断/null 了望/null 了望台/null 了望塔/null 了案/null 了此/null 了清/null 了然/null 了结/null 了若指掌/null 了解/null 了解到/null 了解情况/null 了身达命/null 予人口实/null 予以/null 予以安排/null 予以照顾/null 予以考虑/null 予取予求/null 争个/null 争产/null 争价/null 争作/null 争做/null 争先/null 争先士卒/null 争先恐后/null 争先恐后/null 争光/null 争冠/null 争分夺妙/null 争分夺秒/null 争创/null 争利/null 争办/null 争功/null 争取/null 争取和平/null 争名/null 争名于朝争利于市/null 争名夺利/null 争名竞利/null 争名逐利/null 争吵/null 争嘴/null 争夺/null 争夺战/null 争奇/null 争奇斗异/null 争奇斗胜/null 争奇斗艳/null 争妍斗奇/null 争妍斗艳/null 争宠/null 争强/null 争强好胜/null 争强斗胜/null 争强显胜/null 争当/null 争得/null 争性/null 争战/null 争执/null 争执不下/null 争执不休/null 争抢/null 争持/null 争收/null 争斗/null 争斤论两/null 争权/null 争权夺利/null 争权攘利/null 争气/null 争球/null 争球线/null 争用/null 争相/null 争着/null 争竞/null 争端/null 争红斗紫/null 争者/null 争胜/null 争脸/null 争臣/null 争艳/null 争衡/null 争议/null 争议地区/null 争议性/null 争论/null 争论不休/null 争论中/null 争论点/null 争论者/null 争讼/null 争购/null 争起/null 争辨/null 争辩/null 争逐/null 争锋/null 争长争短/null 争长竞短/null 争长论短/null 争闹/null 争雄/null 争霸/null 争面子/null 争风吃醋/null 争鸣/null 事上/null 事不关己/null 事不关己高高挂起/null 事不宜迟/null 事与愿违/null 事业/null 事业单位/null 事业心/null 事业成功/null 事业有成/null 事业线/null 事业费/null 事为/null 事主/null 事事/null 事事拗违/null 事件/null 事件相关电位/null 事体/null 事例/null 事倍/null 事倍功半/null 事假/null 事儿/null 事先/null 事先通知/null 事关/null 事关全局/null 事关大局/null 事关重大/null 事典/null 事出/null 事出不意/null 事出有因/null 事到/null 事到临头/null 事到如今/null 事前/null 事前审计/null 事功/null 事务/null 事务主义/null 事务处理/null 事务律师/null 事务所/null 事务所律师/null 事务管理/null 事务繁忙/null 事务长/null 事势/null 事半功倍/null 事危累卵/null 事发地点/null 事发时/null 事变/null 事后/null 事后聪明/null 事后诸葛亮/null 事在人为/null 事在必行/null 事处/null 事外/null 事大主义/null 事奉/null 事宜/null 事实/null 事实上/null 事实婚/null 事实性/null 事实求是/null 事实真相/null 事实确凿/null 事实胜于雄辨/null 事实胜于雄辩/null 事实证明/null 事已至此/null 事后/null 事必/null 事必有兆/null 事必躬亲/null 事态/null 事态发展/null 事怕行家/null 事情/null 事情要做/null 事成/null 事或物/null 事故/null 事故学/null 事故照射/null 事无大小/null 事无巨细/null 事月表/null 事机/null 事权/null 事求是/null 事物/null 事理/null 事生肘腋/null 事用/null 事由/null 事界/null 事略/null 事端/null 事证/null 事败垂成/null 事过境迁/null 事迹/null 事隔/null 事项/null 二一/null 二一添作五/null 二丁醚/null 二七/null 二七区/null 二万/null 二万五千里长征/null 二三/null 二三其德/null 二三其意/null 二不/null 二不休/null 二世/null 二世纪/null 二个/null 二中/null 二中全会/null 二中选一/null 二义性/null 二乎/null 二九/null 二二/null 二五/null 二五眼/null 二产妇/null 二人/null 二人世界/null 二人划/null 二人台/null 二人同心其利断金/null 二人转/null 二亿/null 二仑/null 二仑乡/null 二代/null 二价/null 二份/null 二伏/null 二传/null 二传手/null 二位/null 二侧/null 二倍/null 二倍体/null 二倍体植物/null 二傻/null 二元/null 二元性/null 二元方程式/null 二元论/null 二元论者/null 二元酸/null 二元醇/null 二八/null 二八佳人/null 二八开/null 二六/null 二几/null 二分/null 二分之/null 二分之一/null 二分明月/null 二分点/null 二分裂/null 二分音符/null 二列/null 二则/null 二副/null 二化螟/null 二十/null 二十一/null 二十一世纪/null 二十一条/null 二十一点/null 二十七/null 二十七号/null 二十三/null 二十世纪/null 二十个/null 二十九/null 二十二/null 二十二号/null 二十五/null 二十五史/null 二十人/null 二十八/null 二十八号/null 二十八宿/null 二十八星瓢虫/null 二十六/null 二十六号/null 二十六岁/null 二十四/null 二十四史/null 二十四号/null 二十四节气/null 二十多/null 二十年/null 二十年目睹之怪现状/null 二十面体/null 二千/null 二叉树/null 二双/null 二叠系/null 二叠纪/null 二号/null 二号人物/null 二号电池/null 二合一/null 二名/null 二名制/null 二名法/null 二哥/null 二四/null 二四滴/null 二回/null 二回熟/null 二地主/null 二地区/null 二声/null 二天/null 二头/null 二头肌/null 二奶/null 二奶专家/null 二妹/null 二姐/null 二姓之好/null 二姓子/null 二婚/null 二婚头/null 二字/null 二季度/null 二宝/null 二审/null 二寸/null 二尕子/null 二尖瓣/null 二尺/null 二层/null 二层楼/null 二届/null 二岁/null 二年/null 二年生/null 二年级/null 二年级情/null 二度/null 二开/null 二弦/null 二心/null 二心两意/null 二性/null 二恶英/null 二意/null 二意三心/null 二愣子/null 二战/null 二房/null 二房东/null 二手/null 二手房/null 二手烟/null 二手货/null 二手车/null 二把/null 二把刀/null 二把手/null 二拇指/null 二指/null 二日/null 二时/null 二更/null 二月/null 二月份/null 二期/null 二期工程/null 二杆子/null 二条/null 二来/null 二极/null 二极管/null 二林/null 二林镇/null 二桃杀三士/null 二楼/null 二次/null 二次世界大战/null 二次函数/null 二次型/null 二次多项式/null 二次大战/null 二次幂/null 二次开发/null 二次方/null 二次方程/null 二次曲/null 二次曲线/null 二次曲面/null 二次革命/null 二次元/null 二正丙醚/null 二步/null 二段/null 二比一/null 二毛/null 二氧/null 二氧化氮/null 二氧化物/null 二氧化硅/null 二氧化硫/null 二氧化碳/null 二氧化碳隔离/null 二氧化钛/null 二氧化铀/null 二氧化锰/null 二氧杂芑/null 二氧芑/null 二氯乙烷/null 二氯乙烷中毒/null 二氯异三聚氰酸钠/null 二氯甲烷/null 二氯胺/null 二氯苯胺苯乙酸钠/null 二水/null 二水乡/null 二水货/null 二流/null 二流子/null 二流货/null 二满三平/null 二炮/null 二点/null 二环/null 二甘醇/null 二用/null 二甲基砷酸/null 二甲基胂酸/null 二甲苯/null 二百/null 二百万/null 二百二/null 二百五/null 二百年/null 二皇帝/null 二硫化物/null 二硫化碳/null 二硫化钼/null 二硫基丙磺酸钠/null 二硫基丙醇/null 二硫基琥珀酸钠/null 二磷酸腺苷/null 二种/null 二等/null 二等分/null 二等功/null 二等奖/null 二等舱/null 二等车/null 二等边/null 二簧/null 二类/null 二糖/null 二级/null 二级品/null 二级士官/null 二级头/null 二线/null 二维/null 二缶钟惑/null 二老/null 二者/null 二者之一/null 二者之间/null 二者必居其一/null 二胎/null 二胡/null 二脚/null 二色/null 二节棍/null 二花脸/null 二苯氯胂/null 二茬罪/null 二话/null 二话不说/null 二话没说/null 二足/null 二路/null 二踢脚/null 二轮/null 二轮车/null 二轻/null 二轻局/null 二进/null 二进位/null 二进位制/null 二进制/null 二进制编码/null 二进宫/null 二进法/null 二连/null 二连巨盗龙/null 二连浩特/null 二连盆地/null 二迭纪/null 二遍苦/null 二道/null 二道区/null 二道江/null 二道江区/null 二道贩子/null 二郎/null 二郎神/null 二郎腿/null 二部/null 二部制/null 二醇/null 二里头/null 二重/null 二重下标/null 二重唱/null 二重奏/null 二重性/null 二重根/null 二重母音/null 二量体/null 二锅头/null 二门/null 二阶/null 二阿姨/null 二院/null 二面角/null 二音节/null 二项/null 二项分布/null 二项式/null 二项式定理/null 二项式系数/null 二鬼子/null 二黄/null 于下/null 于世/null 于中/null 于丹/null 于事/null 于事无补/null 于人/null 于今/null 于今为烈/null 于外/null 于家为国/null 于己于人/null 于形/null 于心/null 于心不忍/null 于心不甘/null 于心何忍/null 于思/null 于思于思/null 于是/null 于是乎/null 于此/null 于民/null 于民润国/null 于洪/null 于洪区/null 于焉/null 于田/null 于那/null 于都/null 于雾霭之中/null 于飞之乐/null 亏了/null 亏产/null 亏待/null 亏得/null 亏心/null 亏心事/null 亏心短行/null 亏折/null 亏损/null 亏损率/null 亏损面/null 亏损额/null 亏本/null 亏本出售/null 亏格/null 亏欠/null 亏理/null 亏盈/null 亏短/null 亏空/null 亏累/null 亏缺/null 亏耗/null 亏蚀/null 亏负/null 亏钱/null 云一样/null 云中/null 云云/null 云兴霞蔚/null 云冈石窟/null 云华/null 云南白药/null 云合雾集/null 云吞/null 云和/null 云团/null 云图/null 云块/null 云城/null 云城区/null 云外/null 云天/null 云天高义/null 云头/null 云头儿/null 云安/null 云室/null 云层/null 云山/null 云山雾罩/null 云岩/null 云岩区/null 云崖/null 云开见日/null 云彩/null 云散/null 云散了/null 云散风流/null 云朵/null 云杉/null 云林/null 云梦/null 云梯/null 云母/null 云气/null 云汉/null 云沙/null 云泥异路/null 云浮/null 云海/null 云消雾散/null 云涌/null 云液/null 云淡风轻/null 云游/null 云游四方/null 云溪/null 云溪区/null 云烟/null 云烟过眼/null 云片糕/null 云状/null 云状物/null 云珠/null 云的/null 云程万里/null 云程发轫/null 云窗雾槛/null 云端/null 云翳/null 云英/null 云蒸霞蔚/null 云行雨施/null 云观/null 云谲波诡/null 云豆/null 云豹/null 云贵/null 云贵川/null 云贵高原/null 云起龙骧/null 云车风马/null 云遮雾障/null 云里雾里/null 云量/null 云锣/null 云锦/null 云阳/null 云阶月地/null 云隙/null 云雀/null 云集/null 云雨/null 云雨巫山/null 云雨高唐/null 云雾/null 云雾径迹/null 云霄/null 云霄飞车/null 云霞/null 云霭/null 云高计/null 云鬓/null 云龙/null 云龙区/null 云龙风虎/null 互不/null 互不侵犯/null 互不侵犯条约/null 互不干涉/null 互不服气/null 互不相欠/null 互不相让/null 互为/null 互为因果/null 互为知己/null 互为表里/null 互争/null 互争高下/null 互会/null 互使/null 互信/null 互关/null 互利/null 互利互惠/null 互利共生/null 互动/null 互动电视/null 互助/null 互助县/null 互助友爱/null 互助组/null 互勉/null 互卷/null 互变/null 互定/null 互市/null 互异/null 互惠/null 互惠关税/null 互惠待遇/null 互感/null 互感应/null 互感系数/null 互抵/null 互换/null 互换性/null 互推/null 互操性/null 互敬互爱/null 互文/null 互斥/null 互替/null 互有/null 互查/null 互殴/null 互派/null 互派大使/null 互济/null 互涉/null 互爱/null 互现/null 互生/null 互生叶/null 互用/null 互用性/null 互相/null 互相依存/null 互相协作/null 互相帮助/null 互相扯皮/null 互相推诿/null 互相沟通/null 互相爱护/null 互相监督/null 互相联系/null 互相连接/null 互祝/null 互素/null 互结/null 互给/null 互联/null 互联网/null 互联网用户/null 互联网站/null 互联网络/null 互补/null 互见/null 互让/null 互设/null 互访/null 互诉衷情/null 互诉衷肠/null 互译/null 互调/null 互谅/null 互谅互让/null 互质数/null 互赠/null 互踢/null 互连/null 互连性/null 互选/null 互通/null 互通性/null 互通有无/null 互锁/null 五一/null 五一劳动节/null 五一国际劳动节/null 五一节/null 五七/null 五七一代/null 五七干校/null 五七干部学校/null 五万/null 五世/null 五个/null 五中/null 五中全会/null 五五/null 五人/null 五人墓碑记/null 五亿/null 五代/null 五代十国/null 五代史/null 五件/null 五份/null 五伦/null 五位/null 五体投地/null 五保/null 五保户/null 五倍/null 五倍子/null 五倍子树/null 五倍子虫/null 五元/null 五光/null 五光十色/null 五内/null 五内如焚/null 五凉/null 五分/null 五分之一/null 五分之三/null 五分之二/null 五分之四/null 五分制/null 五分熟/null 五分美金/null 五刑/null 五加/null 五十/null 五十一/null 五十七/null 五十万/null 五十三/null 五十个/null 五十九/null 五十二/null 五十五/null 五十人/null 五十八/null 五十六/null 五十四/null 五十岁/null 五十步笑百步/null 五十铃/null 五千/null 五千万/null 五卅/null 五卅运动/null 五华/null 五华区/null 五卷/null 五原/null 五口通商/null 五台/null 五台山/null 五台市/null 五号/null 五号电池/null 五名/null 五味/null 五味俱全/null 五味子/null 五味瓶/null 五四/null 五四○六菌肥/null 五四爱国运动/null 五四运动/null 五四青年节/null 五声音阶/null 五夜/null 五大/null 五大三粗/null 五大名山/null 五大洲/null 五大湖/null 五大连池/null 五头/null 五如京兆/null 五子棋/null 五官/null 五官端正/null 五家/null 五家渠/null 五寨/null 五小工业/null 五层/null 五届/null 五岭/null 五岳/null 五峰/null 五峰乡/null 五峰县/null 五帝/null 五带/null 五常/null 五年/null 五年前/null 五年计划/null 五度/null 五弦琴/null 五形/null 五彩/null 五彩宾纷/null 五彩纷呈/null 五彩缤纷/null 五律/null 五忘形交/null 五打一/null 五指/null 五指山/null 五敛子/null 五斗/null 五斗柜/null 五斗米道/null 五方/null 五方杂厝/null 五方杂处/null 五日/null 五日热/null 五旬节/null 五时/null 五星/null 五星红旗/null 五星级/null 五星级酒店/null 五更/null 五月/null 五月份/null 五月节/null 五月花/null 五服/null 五权/null 五权宪法/null 五条/null 五楼/null 五次/null 五步蛇/null 五段/null 五毒/null 五毛/null 五毛党/null 五氧化二钒/null 五氯硝基苯/null 五河/null 五洋/null 五洲/null 五洲四海/null 五湖/null 五湖四海/null 五灯会元/null 五点/null 五爱/null 五环/null 五环会徽/null 五痨七伤/null 五瘟/null 五瘟神/null 五百/null 五百万/null 五百年前是一家/null 五短身材/null 五碳糖/null 五祖拳/null 五福/null 五福临门/null 五禽戏/null 五种/null 五种经济成分/null 五笔/null 五笔字型/null 五笔字形/null 五笔编码/null 五笔输入法/null 五等爵位/null 五类分子/null 五粮液/null 五级/null 五级士官/null 五线谱/null 五经/null 五结/null 五结乡/null 五绝/null 五股/null 五股乡/null 五胞胎/null 五胡/null 五胡十六国/null 五脏/null 五脏俱全/null 五脏六腑/null 五色/null 五色无主/null 五色缤纷/null 五花/null 五花八门/null 五花大绑/null 五花肉/null 五花腌猪肉/null 五苓散/null 五荤/null 五莲/null 五营/null 五营区/null 五蕴/null 五虎将/null 五行/null 五行俱下/null 五行八作/null 五行并下/null 五角/null 五角场/null 五角大楼/null 五角形/null 五角星/null 五角钱/null 五言绝句/null 五言诗/null 五言长城/null 五讲/null 五讲四美/null 五谷/null 五谷不分/null 五谷丰熟/null 五谷丰登/null 五谷丰稔/null 五谷杂粮/null 五路/null 五载/null 五边/null 五边形/null 五通桥/null 五通桥区/null 五道/null 五道口/null 五部/null 五里/null 五里雾/null 五里雾中/null 五重奏/null 五金/null 五金店/null 五金店铺/null 五院/null 五陵/null 五陵年少/null 五陵豪气/null 五雀六燕/null 五霸/null 五面/null 五面体/null 五音/null 五音不全/null 五音度/null 五音节/null 五项/null 五项全能/null 五项全能运动/null 五项原则/null 五颜六色/null 五风十雨/null 五香/null 五香粉/null 五马分尸/null 五鬼/null 五鬼闹判/null 五黄六月/null 井下/null 井中求火/null 井中视星/null 井井/null 井井有条/null 井井有礼/null 井冈/null 井冈山/null 井口/null 井台/null 井号/null 井喷/null 井场/null 井壁/null 井字/null 井巷/null 井底/null 井底之蛙/null 井底银瓶/null 井探/null 井机/null 井架/null 井栏/null 井水/null 井水不犯河水/null 井泵/null 井灌/null 井然/null 井然有序/null 井田/null 井田制/null 井盐/null 井盖/null 井研/null 井筒/null 井绳/null 井臼亲操/null 井蛙之见/null 井蛙醯鸡/null 井边/null 井队/null 井陉/null 井陉矿/null 井陉矿区/null 亘古/null 亘古不变/null 亘古亘今/null 亘古未有/null 亘古通今/null 亚丁/null 亚丁湾/null 亚东/null 亚临界/null 亚于/null 亚们/null 亚伦/null 亚伯/null 亚伯拉罕/null 亚克力/null 亚兰/null 亚共析钢/null 亚军/null 亚利安娜/null 亚利桑纳州/null 亚利桑那/null 亚利桑那州/null 亚力山大帝/null 亚努科维奇/null 亚单位/null 亚历山大・杜布切克/null 亚历山大大帝/null 亚历山大里亚/null 亚原子/null 亚变种/null 亚哈斯/null 亚喀巴/null 亚圣/null 亚太/null 亚太区/null 亚太地区/null 亚太经合会/null 亚太经济合作组织/null 亚寒带/null 亚尔发和奥米加/null 亚巴郎/null 亚平宁/null 亚平宁半岛/null 亚弗烈/null 亚当/null 亚当・斯密/null 亚当斯/null 亚当斯敦/null 亚得里亚海/null 亚所/null 亚拉巴马/null 亚拉巴马州/null 亚撒/null 亚文化/null 亚斯伯格/null 亚曼牙/null 亚曼牙乡/null 亚松森/null 亚格门农/null 亚欧/null 亚欧大陆/null 亚欧大陆桥/null 亚欧大陆腹地/null 亚比利尼/null 亚比玉/null 亚氏保加/null 亚洲/null 亚洲与太平洋/null 亚洲与太平洋地区/null 亚洲人/null 亚洲史/null 亚洲司/null 亚洲周刊/null 亚洲国家/null 亚洲地区/null 亚洲太平洋地区/null 亚洲开发银行/null 亚洲杯/null 亚洲纪录/null 亚洲足球联合会/null 亚热/null 亚热带/null 亚父/null 亚特兰大/null 亚琛/null 亚瑟/null 亚瑟士/null 亚瑟王/null 亚的斯亚贝巴/null 亚目/null 亚砷/null 亚砷酸/null 亚硝酸/null 亚硝酸异戊酯/null 亚硝酸盐/null 亚硝酸钠/null 亚硫酐/null 亚硫酸/null 亚硫酸盐/null 亚磷酸/null 亚种/null 亚科/null 亚穆苏克罗/null 亚符号模型/null 亚米拿达/null 亚类/null 亚纲/null 亚细亚/null 亚细亚洲/null 亚罗号/null 亚罗号事件/null 亚罗士打/null 亚美/null 亚美利加/null 亚美利加洲/null 亚美尼亚/null 亚联/null 亚肩迭背/null 亚裔/null 亚西尔・阿拉法特/null 亚词汇单元/null 亚词规则/null 亚该亚/null 亚赛/null 亚达薛西/null 亚运/null 亚运会/null 亚运村/null 亚述/null 亚速尔群岛/null 亚速海/null 亚里士多德/null 亚里斯多德/null 亚金/null 亚铁/null 亚铁盐/null 亚门/null 亚非/null 亚非会议/null 亚非拉/null 亚音节单位/null 亚音速/null 亚音频/null 亚马孙/null 亚马孙河/null 亚马逊河/null 亚麻/null 亚麻子油/null 亚麻布/null 亚麻酸/null 亚齐/null 亚齐省/null 亚龙湾/null 些个/null 些子/null 些小/null 些微/null 些许/null 些须/null 亟亟/null 亟宜/null 亟待/null 亟欲/null 亟盼/null 亟需/null 亡人/null 亡佚/null 亡兵纪念日/null 亡命/null 亡命之徒/null 亡命徒/null 亡国/null 亡国之音/null 亡国奴/null 亡国灭种/null 亡国虏/null 亡失/null 亡戟得矛/null 亡故/null 亡母/null 亡灵/null 亡立锥之地/null 亡羊补牢/null 亡者/null 亡魂/null 亡魂丧胆/null 亡魂失魄/null 亢奋/null 亢旱/null 亢极之悔/null 亢直/null 亢进/null 亢进性/null 亢龙有悔/null 交上/null 交与/null 交九/null 交了/null 交互/null 交互式/null 交付/null 交付使用/null 交代/null 交会/null 交会法/null 交保/null 交保释放/null 交入/null 交公/null 交关/null 交兵/null 交出/null 交到/null 交割/null 交办/null 交加/null 交单/null 交卷/null 交卸/null 交叉/null 交叉口/null 交叉学科/null 交叉火力/null 交叉点/null 交叉着/null 交叉科学/null 交叉耐药性/null 交叉表/null 交叉路/null 交叉运球/null 交叉阴影线/null 交友/null 交变/null 交变流电/null 交变电场/null 交变电流/null 交变磁场/null 交叠/null 交口/null 交口称誉/null 交口称赞/null 交合/null 交响/null 交响乐/null 交响乐团/null 交响乐队/null 交响曲/null 交响诗/null 交响金属/null 交售/null 交回/null 交困/null 交城/null 交大/null 交头接耳/null 交契/null 交好/null 交媾/null 交存/null 交官/null 交寄/null 交尾/null 交工/null 交差/null 交帐/null 交并/null 交幻/null 交库/null 交底/null 交归/null 交往/null 交待/null 交心/null 交恶/null 交情/null 交感/null 交感性/null 交感神经/null 交战/null 交战中/null 交战团体/null 交战国/null 交战者/null 交手/null 交托/null 交拜/null 交换/null 交换代数/null 交换代数学/null 交换以太网络/null 交换价值/null 交换台/null 交换器/null 交换律/null 交换意见/null 交换技术/null 交换机/null 交换码/null 交换端/null 交换网路/null 交换虚电路/null 交接/null 交接仪式/null 交接班/null 交易/null 交易会/null 交易员/null 交易品/null 交易商/null 交易市场/null 交易所/null 交易日/null 交易者/null 交易额/null 交替/null 交朋友/null 交权/null 交来/null 交杯/null 交杯酒/null 交枪/null 交椅/null 交欢/null 交款/null 交款单/null 交汇/null 交汇处/null 交汇点/null 交流/null 交流会/null 交流发电机/null 交流声/null 交流电/null 交流电机/null 交浅言深/null 交涉/null 交清/null 交游/null 交火/null 交点/null 交班/null 交用/null 交由/null 交电/null 交界/null 交界处/null 交白卷/null 交相/null 交相辉映/null 交睫/null 交租/null 交租金/null 交税/null 交稿/null 交粮本/null 交纳/null 交织/null 交织物/null 交结/null 交结面/null 交给/null 交缠/null 交耦/null 交臂/null 交臂失之/null 交融/null 交角/null 交警/null 交谈/null 交谈式/null 交谊/null 交谊舞/null 交账/null 交货/null 交货期/null 交费/null 交足/null 交趾/null 交辉/null 交运/null 交还/null 交迫/null 交迭/null 交送/null 交通/null 交通协管员/null 交通卡/null 交通史/null 交通员/null 交通图/null 交通堵塞/null 交通壕/null 交通大学/null 交通岗/null 交通岛/null 交通工具/null 交通建设/null 交通意外/null 交通拥挤/null 交通枢纽/null 交通标志/null 交通管理局/null 交通线/null 交通肇事罪/null 交通规则/null 交通警卫/null 交通警察/null 交通费/null 交通车/null 交通部/null 交通量/null 交通阻塞/null 交道/null 交配/null 交钞/null 交钱/null 交锋/null 交错/null 交错法/null 交错觥筹/null 交际/null 交际性/null 交际舞/null 交际花/null 交集/null 交驰/null 交验/null 交齐/null 亥时/null 亥猪/null 亥豕鲁鱼/null 亦不/null 亦不例外/null 亦且/null 亦云/null 亦以/null 亦会/null 亦作/null 亦佳/null 亦即/null 亦可/null 亦同/null 亦喜亦忧/null 亦在/null 亦属/null 亦工亦农/null 亦庄/null 亦应/null 亦应如此/null 亦或/null 亦按/null 亦无/null 亦是/null 亦曾/null 亦有/null 亦步亦趋/null 亦然/null 亦称/null 亦要/null 亦趋/null 亦还/null 亦非/null 亦须/null 产下/null 产业/null 产业军/null 产业化/null 产业后备军/null 产业工人/null 产业界/null 产业资本/null 产业链/null 产业集群/null 产业革命/null 产中/null 产乳/null 产于/null 产仔/null 产供/null 产供销/null 产值/null 产假/null 产儿/null 产出/null 产出率/null 产制/null 产前/null 产前检查/null 产区/null 产卵/null 产卵洄游/null 产后/null 产后期/null 产品/null 产品税/null 产品经理/null 产品结构/null 产地/null 产地证/null 产士/null 产奶/null 产妇/null 产婆/null 产床/null 产后/null 产房/null 产期/null 产术/null 产权/null 产检/null 产油/null 产油国/null 产物/null 产生/null 产生中/null 产生了/null 产科/null 产科医师/null 产科医生/null 产科学/null 产程/null 产籍/null 产粮/null 产粮区/null 产粮大省/null 产经新闻/null 产能/null 产自/null 产褥/null 产褥感染/null 产褥期/null 产褥热/null 产车/null 产道/null 产量/null 产量多/null 产金/null 产钳/null 产销/null 产销者/null 产销量/null 产门/null 产院/null 产额/null 产麦/null 亨利/null 亨利・哈德逊/null 亨利五世/null 亨德尔/null 亨格洛/null 亨特/null 亨特泰罗/null 亨祚/null 亨通/null 亩产/null 亩产量/null 亩数/null 享乐/null 享乐主义/null 享乐主义者/null 享利/null 享受/null 享名/null 享国/null 享寿/null 享尽/null 享年/null 享有/null 享有盛名/null 享有盛誉/null 享清福/null 享用/null 享福/null 享誉/null 京东大鼓/null 京九/null 京九铁路/null 京二胡/null 京京/null 京人/null 京兆/null 京剧/null 京剧团/null 京华/null 京华时报/null 京口/null 京口区/null 京哈/null 京哈铁路/null 京城/null 京山/null 京师/null 京广/null 京广线/null 京广铁路/null 京戏/null 京报/null 京斯敦/null 京杭/null 京杭大运河/null 京杭运河/null 京汉/null 京沪/null 京沪高铁/null 京津/null 京派/null 京海/null 京湾/null 京片子/null 京畿/null 京畿道/null 京白/null 京胡/null 京腔/null 京西/null 京郊/null 京郊日报/null 京都/null 京都府/null 京都念慈菴枇杷膏/null 京韵/null 京韵大鼓/null 亭亭/null 亭亭玉立/null 亭午/null 亭台楼阁/null 亭子/null 亭子间/null 亭室/null 亭湖/null 亭湖区/null 亭里/null 亭阁/null 亮丑/null 亮丽/null 亮了/null 亮儿/null 亮光/null 亮光光/null 亮光区/null 亮出/null 亮堂/null 亮堂堂/null 亮察/null 亮底/null 亮度/null 亮彩/null 亮星/null 亮星云/null 亮晶晶/null 亮氨酸/null 亮点/null 亮牌/null 亮的/null 亮相/null 亮眼/null 亮眼人/null 亮着/null 亮色/null 亮节/null 亮菌/null 亮菌甲素/null 亮起/null 亮铮铮/null 亮锃锃/null 亮闪闪/null 亮饰/null 亲丁/null 亲上做亲/null 亲上加亲/null 亲上成亲/null 亲临/null 亲临其境/null 亲了/null 亲事/null 亲交/null 亲亲/null 亲亲热热/null 亲人/null 亲从/null 亲代/null 亲们/null 亲任/null 亲伴/null 亲使/null 亲俄/null 亲信/null 亲兄弟/null 亲公/null 亲兵/null 亲函/null 亲切/null 亲切友好/null 亲切服务/null 亲力亲为/null 亲北京/null 亲华/null 亲历/null 亲友/null 亲取/null 亲口/null 亲合力/null 亲启/null 亲吻/null 亲和/null 亲和力/null 亲和性/null 亲善/null 亲善大使/null 亲嘴/null 亲多/null 亲夫/null 亲如一家/null 亲如手足/null 亲如骨肉/null 亲妈/null 亲姐妹/null 亲娘/null 亲子/null 亲子鉴定/null 亲家/null 亲家公/null 亲家母/null 亲密/null 亲密无间/null 亲属/null 亲属制度/null 亲属称谓/null 亲当矢石/null 亲征/null 亲德/null 亲情/null 亲戚/null 亲手/null 亲授/null 亲操井臼/null 亲政/null 亲故/null 亲族/null 亲日/null 亲旧/null 亲昵/null 亲朋/null 亲朋好友/null 亲本/null 亲权/null 亲母/null 亲民/null 亲民党/null 亲水性/null 亲水长廊/null 亲洽/null 亲炙/null 亲热/null 亲爱/null 亲爱人/null 亲爱的/null 亲父/null 亲爸/null 亲爹/null 亲率/null 亲王/null 亲生/null 亲生子女/null 亲生父母/null 亲生骨肉/null 亲疏/null 亲疏贵贱/null 亲痛仇快/null 亲目/null 亲眷/null 亲眼/null 亲眼目睹/null 亲睦/null 亲睦邻邦/null 亲知/null 亲离/null 亲笔/null 亲笔信/null 亲笔写/null 亲缘/null 亲缘关系/null 亲美/null 亲者/null 亲耳/null 亲职/null 亲脸/null 亲自/null 亲自出马/null 亲自动手/null 亲自挂帅/null 亲英/null 亲贵/null 亲赴/null 亲身/null 亲迎/null 亲近/null 亲随/null 亲验/null 亲骨/null 亲骨肉/null 亳州/null 亵慢/null 亵昵/null 亵渎/null 亵渎的话/null 亵渎神明/null 亵渎者/null 亵玩/null 亵黩/null 亹亹/null 亹亹不倦/null 人一已百/null 人丁/null 人丁兴旺/null 人不为己/null 人不可貌相/null 人不犯我我不犯人/null 人不知鬼不觉/null 人不聊生/null 人不自安/null 人与人之间/null 人世/null 人世间/null 人丛/null 人中/null 人中之龙/null 人中狮子/null 人中穴/null 人中骐骥/null 人中龙虎/null 人丹/null 人为/null 人之初/null 人之常情/null 人之长情/null 人乳/null 人事/null 人事不知/null 人事代谢/null 人事制度/null 人事厅/null 人事变动/null 人事处/null 人事局/null 人事心理学/null 人事监察/null 人事科/null 人事管理/null 人事管理学/null 人事费/null 人事部门/null 人云/null 人云亦云/null 人五人六/null 人亡家破/null 人亡政息/null 人亡物在/null 人人/null 人人乐从/null 人人平等/null 人人有责/null 人人皆知/null 人人自危/null 人代会/null 人以群分/null 人们/null 人仰马翻/null 人份/null 人众胜天/null 人传人/null 人传记/null 人伦/null 人位相宜/null 人体/null 人体器官/null 人体学/null 人体工学/null 人体科学/null 人体解剖/null 人体解剖学/null 人保/null 人偶戏/null 人像/null 人像图/null 人儿/null 人公里/null 人力/null 人力资源/null 人力车/null 人力车夫/null 人势/null 人千人万/null 人去楼空/null 人参/null 人口/null 人口出生率/null 人口分布/null 人口分析/null 人口危机/null 人口地理/null 人口地理学/null 人口增长/null 人口学/null 人口密度/null 人口战略/null 人口政策/null 人口数/null 人口断层/null 人口普查/null 人口社会学/null 人口稠密/null 人口经济学/null 人口统计/null 人口统计学/null 人口老化/null 人口规划/null 人口调查/null 人口贩运/null 人口资料/null 人口迁移/null 人口预测/null 人各有志/null 人各有所好/null 人同此心/null 人名/null 人员/null 人员构成/null 人员测评/null 人命/null 人命关天/null 人命危浅/null 人和/null 人品/null 人品好/null 人喊马嘶/null 人困马乏/null 人在江湖/null 人地生疏/null 人均/null 人均产值/null 人均收入/null 人堆/null 人士/null 人声/null 人声鼎沸/null 人多势众/null 人多口杂/null 人多嘴杂/null 人多地少/null 人多手杂/null 人大/null 人大代表/null 人大常委会/null 人夫/null 人头/null 人头狮身/null 人头畜鸣/null 人头皮/null 人头税/null 人头蛇身/null 人头马/null 人奶/null 人妖/null 人子/null 人字拖/null 人字拖鞋/null 人字架/null 人存政举/null 人定/null 人定胜天/null 人客/null 人家/null 人寰/null 人对人/null 人寿/null 人寿保险/null 人寿年丰/null 人尖儿/null 人尽其才/null 人尽其材/null 人山人海/null 人工/null 人工免疫/null 人工化/null 人工受孕/null 人工合成/null 人工呼吸/null 人工品/null 人工岛/null 人工干预/null 人工技术/null 人工授精/null 人工智慧/null 人工智能/null 人工杂交/null 人工概念/null 人工气胸/null 人工气腹/null 人工河/null 人工流产/null 人工湖/null 人工照亮/null 人工电子耳/null 人工耳蜗/null 人工诱变/null 人工选择/null 人工降水/null 人工降雨/null 人师/null 人弃我取/null 人强马壮/null 人形/null 人形靶/null 人影/null 人影儿/null 人微权轻/null 人微言轻/null 人心/null 人心不古/null 人心不足蛇吞象/null 人心叵测/null 人心向背/null 人心大快/null 人心如面/null 人心惟危/null 人心惶恐/null 人心惶惶/null 人心所向/null 人心所归/null 人心果/null 人心涣散/null 人心涣漓/null 人心皇皇/null 人心莫测/null 人心隔肚皮/null 人心难测/null 人怕出名猪怕壮/null 人怕出名猪怕肥/null 人急智生/null 人急计生/null 人性/null 人性化/null 人性论/null 人怨神怒/null 人情/null 人情世故/null 人情之常/null 人情债/null 人情冷暖/null 人情味/null 人情味儿/null 人情汹汹/null 人意/null 人我是非/null 人或物/null 人所不为/null 人所不齿/null 人所共知/null 人手/null 人手一册/null 人手不足/null 人手动/null 人才/null 人才出众/null 人才培养/null 人才外流/null 人才学/null 人才流动/null 人才流失/null 人才济济/null 人才辈出/null 人才难得/null 人数/null 人数众多/null 人文/null 人文主义/null 人文地理/null 人文地理学/null 人文学/null 人文景观/null 人文社会学科/null 人文社科/null 人文科学/null 人族/null 人无外快不富/null 人无完人/null 人无远虑/null 必有近忧/null 人无远虑必有近忧/null 人有旦夕祸福/null 人本主义/null 人机交互/null 人机工程/null 人机界面/null 人权/null 人权保障/null 人权宣言/null 人权斗士/null 人权法/null 人权观察/null 人材/null 人来人往/null 人来客去/null 人来客往/null 人来疯/null 人杰/null 人杰地灵/null 人样/null 人格/null 人格化/null 人格心理学/null 人格操守/null 人格神/null 人格违常/null 人格魅力/null 人模狗样/null 人次/null 人欢马叫/null 人欲横流/null 人武部/null 人死留名/null 人氏/null 人民/null 人民代表/null 人民代表大会/null 人民代表大会制/null 人民党/null 人民公敌/null 人民公社/null 人民公社化/null 人民共和国/null 人民内部矛盾/null 人民出版社/null 人民利益/null 人民团体/null 人民基本权利/null 人民大会堂/null 人民币/null 人民币元/null 人民广场/null 人民性/null 人民战争/null 人民政府/null 人民日报/null 人民检察院/null 人民检查院/null 人民民主专政/null 人民民主统一战线/null 人民法庭/null 人民法院/null 人民网/null 人民群众/null 人民联盟党/null 人民英雄纪念碑/null 人民行动党/null 人民解放军/null 人民警察/null 人民起义/null 人民阵线/null 人民陪审员/null 人气/null 人治/null 人流/null 人流手术/null 人流行/null 人浮于事/null 人海/null 人海战术/null 人渣/null 人满为患/null 人潮/null 人烟/null 人烟凑集/null 人烟浩穰/null 人烟稀少/null 人烟稠密/null 人烟辐辏/null 人物/null 人物志/null 人物描写/null 人物画/null 人犯/null 人猿/null 人琴俱亡/null 人生/null 人生一世/null 人生价值/null 人生哲学/null 人生在世/null 人生地不熟/null 人生如朝露/null 人生如梦/null 人生朝露/null 人生盛衰/null 人生短暂/null 人生观/null 人生路不熟/null 人生面不熟/null 人畜/null 人畜共患症/null 人百其身/null 人皆尽知/null 人皆有之/null 人相/null 人相学/null 人神共愤/null 人神同愤/null 人种/null 人种差别/null 人种间/null 人称/null 人称代词/null 人稠物穰/null 人穷志短/null 人穷智短/null 人算不如天算/null 人类/null 人类乳突病毒/null 人类免疫缺陷病毒/null 人类化/null 人类基因组计划/null 人类学/null 人类学家/null 人类工程学/null 人类文化学/null 人类社会/null 人类起源/null 人粪尿/null 人精/null 人约黄昏/null 人给家足/null 人缘/null 人缘儿/null 人网/null 人群/null 人老珠黄/null 人者/null 人而无信不知其可/null 人肉/null 人肉搜索/null 人肉搜索引擎/null 人脉/null 人脉关系/null 人脏俱获/null 人脑/null 人臣/null 人自为战/null 人莫予毒/null 人莫于毒/null 人蛇/null 人蛇集团/null 人血/null 人行区/null 人行地下通道/null 人行桥/null 人行横道/null 人行横道线/null 人行道/null 人见人爱/null 人言凿凿/null 人言可畏/null 人言啧啧/null 人言籍籍/null 人证/null 人证物证/null 人证物证俱在/null 人语马嘶/null 人说纷纭/null 人谁无过/null 人谋/null 人财两失/null 人财两旺/null 人财两空/null 人质/null 人贩子/null 人贪智短/null 人贵有自知之明/null 人赃/null 人走灯灭/null 人身/null 人身事故/null 人身保险/null 人身安全/null 人身攻击/null 人身权/null 人身自由/null 人车混行/null 人迹/null 人迹稀少/null 人迹罕到/null 人迹罕至/null 人选/null 人造/null 人造丝/null 人造冰/null 人造卫星/null 人造地球卫星/null 人造天体/null 人造棉/null 人造橡胶/null 人造毛/null 人造皮/null 人造石油/null 人造磁铁/null 人造纤维/null 人造行星/null 人造语言/null 人造革/null 人逢喜事精神爽/null 人道/null 人道主义/null 人道救援/null 人间/null 人间佛教/null 人间喜剧/null 人间地狱/null 人间天上/null 人间天堂/null 人间蒸发/null 人际/null 人际关系/null 人际服务/null 人际艺术/null 人静/null 人非土木/null 人非生而知之者/null 人非草木/null 人面兽心/null 人面桃花/null 人首/null 人马/null 人马座/null 人马臂/null 人高马大/null 人鱼/null 人鱼小姐/null 人龙/null 亿万/null 亿万人民/null 亿万富翁/null 亿万富豪/null 亿万斯年/null 亿万群众/null 亿亩/null 亿元/null 亿兆/null 亿分之一/null 亿吨/null 亿斤/null 亿秒/null 什一之利/null 什一奉献/null 什么/null 什么事/null 什么人/null 什么地方/null 什么时候/null 什么样/null 什么的/null 什件/null 什件儿/null 什刹海/null 什午/null 什叶/null 什叶派/null 什器/null 什物/null 什菜/null 什袭而藏/null 什邡/null 什锦/null 什锦果盘/null 什锦菜/null 什麽/null 什麽事/null 什麽时候/null 什麽的/null 仁丹/null 仁义/null 仁义之师/null 仁义道德/null 仁人/null 仁人义士/null 仁人君子/null 仁人志士/null 仁兄/null 仁化/null 仁医/null 仁厚/null 仁和/null 仁和区/null 仁和县/null 仁堂/null 仁学/null 仁寿/null 仁川/null 仁川市/null 仁川广域市/null 仁布/null 仁弟/null 仁德/null 仁德乡/null 仁心/null 仁心仁术/null 仁怀/null 仁怀县/null 仁惠/null 仁慈/null 仁政/null 仁术/null 仁果/null 仁武/null 仁武乡/null 仁民爱物/null 仁波切/null 仁爱/null 仁爱乡/null 仁爱区/null 仁者/null 仁者见仁/null 仁至/null 仁至义尽/null 仁言利博/null 仁题/null 仂语/null 仄声/null 仄径/null 仅为/null 仅于/null 仅仅/null 仅仅如此/null 仅仅是/null 仅以/null 仅以身免/null 仅作参考/null 仅供/null 仅供参考/null 仅值/null 仅凭/null 仅占/null 仅及/null 仅只/null 仅可/null 仅在/null 仅存/null 仅对/null 仅就/null 仅懂/null 仅把/null 仅指/null 仅据/null 仅是/null 仅有/null 仅次/null 仅次于/null 仅此/null 仅此而已/null 仅用/null 仅穿/null 仅能/null 仅见/null 仅限/null 仅靠/null 仆人/null 仆仆/null 仆仆风尘/null 仆从/null 仆妇/null 仆役/null 仆后/null 仆街/null 仇人/null 仇外/null 仇外心理/null 仇家/null 仇富/null 仇心/null 仇快/null 仇念/null 仇怨/null 仇恨/null 仇恨罪/null 仇恨罪行/null 仇惧/null 仇报/null 仇敌/null 仇杀/null 仇者/null 仇视/null 仇隙/null 仇雠/null 今不如昔/null 今世/null 今为/null 今人/null 今以/null 今儿/null 今儿个/null 今冬/null 今冬明春/null 今古传奇/null 今古奇闻/null 今古文/null 今后/null 今后任务/null 今夏/null 今夜/null 今事/null 今诗/null 今天/null 今尹/null 今岁/null 今年/null 今年底/null 今愁古恨/null 今文/null 今文经/null 今文经学/null 今日/null 今日事今日毕/null 今时今日/null 今明两天/null 今明两年/null 今昔/null 今昔之感/null 今昔对比/null 今春/null 今是/null 今是昨非/null 今晚/null 今晨/null 今月古月/null 今朝/null 今期/null 今村/null 今来古往/null 今次/null 今生/null 今生今世/null 今番/null 今秋/null 今草/null 今译/null 今起/null 今非昔比/null 今音/null 介之推/null 介乎/null 介于/null 介于两难/null 介休/null 介体/null 介入/null 介在/null 介壳/null 介子/null 介子推/null 介怀/null 介意/null 介电常数/null 介系词/null 介绍/null 介绍人/null 介绍信/null 介绍性/null 介胄/null 介蒂/null 介词/null 介质/null 介质访问控制/null 介质访问控制层/null 介面/null 介音/null 仍不/null 仍以/null 仍会/null 仍停留/null 仍可/null 仍在/null 仍将/null 仍按/null 仍旧/null 仍是/null 仍有/null 仍未/null 仍然/null 仍照/null 仍由/null 仍系/null 仍能/null 仍需/null 仍须/null 从一以终/null 从一而终/null 从一般意义上/null 从上/null 从上到下/null 从上往下/null 从下/null 从下到上/null 从不/null 从不间断/null 从世/null 从业/null 从业人员/null 从业员/null 从东/null 从东向西/null 从严/null 从严惩处/null 从严治党/null 从中/null 从中作梗/null 从中央到地方/null 从事/null 从事于/null 从事研究/null 从于/null 从井救人/null 从仆/null 从今/null 从今之后/null 从今以后/null 从今天起/null 从今年起/null 从今往后/null 从从容容/null 从令如流/null 从以后/null 从价/null 从价税/null 从任何意义上/null 从优/null 从低/null 从何/null 从何下手/null 从何谈起/null 从俗/null 从俗就简/null 从先/null 从其/null 从内/null 从军/null 从刊/null 从刑/null 从前/null 从动/null 从化/null 从北到南/null 从北向南/null 从南到北/null 从古到今/null 从古至今/null 从句/null 从右/null 从右到左/null 从各个方面/null 从命/null 从商/null 从善/null 从善如流/null 从善如登从恶如崩/null 从外到里/null 从外部/null 从大处着眼/null 从大局出发/null 从天而降/null 从头/null 从头到尾/null 从头到脚/null 从头开始/null 从头至尾/null 从始至终/null 从实际出发/null 从实际情况出发/null 从容/null 从容不迫/null 从容就义/null 从容自若/null 从宽/null 从宽发落/null 从宽处理/null 从小/null 从小到大/null 从小处着手/null 从尾/null 从属/null 从属于/null 从属国/null 从工作出发/null 从左/null 从左到右/null 从师/null 从开始起/null 从征/null 从心所欲/null 从总体上/null 从总的情况/null 从戎/null 从我做起/null 从打/null 从技术上/null 从政/null 从文/null 从新/null 从无到有/null 从早/null 从早到晚/null 从明年起/null 从未/null 从未有过/null 从未用过/null 从权/null 从来/null 从来不/null 从来没/null 从来没有/null 从来没有过/null 从某种意义上/null 从某种程度上/null 从根本上/null 从此/null 从此以后/null 从此往后/null 从母/null 从江/null 从没/null 从父/null 从犯/null 从现在做起/null 从现在开始/null 从现在起/null 从略/null 从简/null 从紧/null 从缓/null 从群众中来/null 从者/null 从而/null 从良/null 从表面上看/null 从西向东/null 从谏如流/null 从轮/null 从轻/null 从辈/null 从这/null 从这一点/null 从这个意义上/null 从这个角度上/null 从这以后/null 从这时起/null 从速/null 从那/null 从那时/null 从那时起/null 从那里/null 从里/null 从里到外/null 从重/null 从重从快/null 从量/null 从量税/null 从长计议/null 从长远来看/null 从长远看/null 从难从严/null 从革命利益出发/null 从领导做起/null 从风而靡/null 从高/null 仑背/null 仑背乡/null 仓促/null 仓储/null 仓卒/null 仓卒防御/null 仓山/null 仓山区/null 仓库/null 仓库管理/null 仓廪/null 仓惶/null 仓房/null 仓敷/null 仓猝/null 仓皇/null 仓皇出逃/null 仓皇失措/null 仓皇无措/null 仓租/null 仓颉/null 仓黄/null 仓鼠/null 仔仔细细/null 仔姜/null 仔密/null 仔服/null 仔牛/null 仔猪白痢/null 仔畜/null 仔细/null 仔肩/null 仕女/null 仕宦/null 仕进/null 仕途/null 他乡/null 他乡遇故知/null 他事/null 他人/null 他们/null 他信/null 他俩/null 他加禄语/null 他国/null 他妈/null 他妈的/null 他家/null 他山之攻/null 他山之石/null 他山之石可以攻玉/null 他州/null 他很/null 他方/null 他日/null 他本人/null 他杀/null 他死了/null 他活到/null 他物/null 他累了/null 他被/null 他迁/null 仗义/null 仗义执言/null 仗义疏财/null 仗势/null 仗势欺人/null 仗恃/null 仗火/null 仗腰/null 仗莫如信/null 仗马寒蝉/null 付与/null 付丙/null 付之一叹/null 付之一哂/null 付之一炬/null 付之一笑/null 付之丙丁/null 付之东流/null 付之度外/null 付了/null 付予/null 付出/null 付印/null 付品/null 付帐/null 付得/null 付息/null 付托/null 付排/null 付方/null 付本/null 付梓/null 付款/null 付款人/null 付款方式/null 付款条件/null 付款者/null 付款额/null 付清/null 付清了/null 付现/null 付税/null 付给/null 付讫/null 付诸/null 付诸东流/null 付诸实施/null 付诸实现/null 付诸洪乔/null 付账/null 付货/null 付费/null 付迄/null 付还/null 付邮/null 付酬/null 付金/null 付钱/null 仙丹/null 仙乐/null 仙乡/null 仙人/null 仙人掌/null 仙人掌果/null 仙人球/null 仙人鞭/null 仙似/null 仙去/null 仙台/null 仙后座/null 仙国/null 仙境/null 仙女/null 仙女似/null 仙女座/null 仙女座大星云/null 仙女座星系/null 仙女星座/null 仙女星系/null 仙女棒/null 仙姑/null 仙姿玉色/null 仙子/null 仙客来/null 仙宫/null 仙居/null 仙山/null 仙山琼阁/null 仙岛/null 仙方/null 仙方儿/null 仙景/null 仙术/null 仙果/null 仙桃/null 仙气/null 仙游/null 仙王座/null 仙界/null 仙童/null 仙翁/null 仙花/null 仙草/null 仙药/null 仙踪/null 仙逝/null 仙都/null 仙镜/null 仙露明珠/null 仙风道骨/null 仙鹤/null 仙鹤草/null 仟悔/null 代为/null 代为说项/null 代之/null 代之以/null 代之而起/null 代书/null 代书人/null 代买/null 代乳粉/null 代交/null 代人/null 代人捉刀/null 代付/null 代代/null 代代相传/null 代代花/null 代价/null 代偿/null 代入/null 代写/null 代利斯/null 代办/null 代办处/null 代办所/null 代劳/null 代卖/null 代号/null 代名/null 代名词/null 代售/null 代回/null 代垫/null 代培/null 代培生/null 代填/null 代孕/null 代宗/null 代客/null 代客泊车/null 代尔/null 代尔夫特/null 代工/null 代币/null 代市长/null 代序/null 代庖/null 代征/null 代总理/null 代总统/null 代我/null 代扣/null 代拆代行/null 代拿买特/null 代换/null 代接/null 代摊/null 代支/null 代收/null 代收货款/null 代数/null 代数几何/null 代数几何学/null 代数函数/null 代数函数论/null 代数和/null 代数基本定理/null 代数学/null 代数学基本定理/null 代数式/null 代数拓扑/null 代数数域/null 代数方程/null 代数曲线/null 代数曲面/null 代数流行/null 代数簇/null 代数结构/null 代数群/null 代数量/null 代替/null 代替父母/null 代替者/null 代步/null 代沟/null 代派/null 代理/null 代理人/null 代理商/null 代理权/null 代理者/null 代用/null 代用品/null 代用者/null 代田法/null 代电/null 代省长/null 代码/null 代码段/null 代码页/null 代祷/null 代称/null 代笔/null 代笔人/null 代签/null 代管/null 代糖/null 代编/null 代罪/null 代罪羔羊/null 代考/null 代耕/null 代职/null 代脉/null 代营/null 代行/null 代表/null 代表人/null 代表人物/null 代表会/null 代表会议/null 代表作/null 代表团/null 代表处/null 代表大会/null 代表性/null 代表队/null 代言/null 代言人/null 代订/null 代议制/null 代记/null 代诉/null 代诉人/null 代词/null 代说/null 代课/null 代谋/null 代谢/null 代谢物/null 代购/null 代辖/null 代辩/null 代辩者/null 代部长/null 代金/null 代销/null 代销店/null 代问好/null 代顿/null 代领/null 令亲/null 令人/null 令人不安/null 令人不快/null 令人作呕/null 令人信服/null 令人兴奋/null 令人发指/null 令人叹/null 令人叹为观止/null 令人吃惊/null 令人喷饭/null 令人惊异/null 令人感动/null 令人振奋/null 令人捧腹/null 令人气结/null 令人注目/null 令人深思/null 令人满意/null 令人生畏/null 令人神往/null 令人费解/null 令人钦佩/null 令人难以置信/null 令人难忘/null 令人鼓舞/null 令人齿冷/null 令他/null 令兄/null 令其/null 令出/null 令出如山/null 令出惟行/null 令叔/null 令名/null 令堂/null 令她/null 令妹/null 令导人/null 令尊/null 令尊令堂/null 令弟/null 令慈/null 令我/null 令正/null 令爱/null 令牌环/null 令牌环网/null 令状/null 令狐/null 令狐德棻/null 令科/null 令箭/null 令箭荷花/null 令节/null 令药/null 令行禁止/null 令誉/null 令郎/null 令阃/null 以一击十/null 以一奉百/null 以一当十/null 以一持万/null 以一知万/null 以一警百/null 以一驭万/null 以上/null 以下/null 以东/null 以为/null 以事实为根据/null 以人为本/null 以人名命名/null 以人废言/null 以亿计/null 以便/null 以债养债/null 以假乱真/null 以偏概全/null 以儆效尤/null 以免/null 以免借口/null 以其人之道/null 以内/null 以军/null 以冰致蝇/null 以利于/null 以利亚/null 以利亚撒/null 以利亚敬/null 以利再战/null 以前/null 以力服人/null 以功补过/null 以功覆过/null 以功赎罪/null 以劳养武/null 以势压人/null 以北/null 以升量石/null 以华制华/null 以南/null 以卵击石/null 以卵投石/null 以及/null 以及人之幼/null 以及人之老/null 以叙/null 以古方今/null 以古非今/null 以后/null 以咽废飧/null 以售其奸/null 以埃/null 以备不测/null 以外/null 以夜继日/null 以太/null 以太网/null 以太网络/null 以太网络帧/null 以太网络端口/null 以失败而告终/null 以夷伐夷/null 以夷制夷/null 以夷治夷/null 以子之矛/null 以容取人/null 以小人之心/null 以小挤大/null 以小见大/null 以少胜多/null 以屈求申/null 以工代赈/null 以工补农/null 以己度人/null 以弗所/null 以弗所书/null 以弱制强/null 以弱胜强/null 以强凌弱/null 以往/null 以往鉴来/null 以律/null 以微知著/null 以德报德/null 以德报怨/null 以德抱怨/null 以德服人/null 以怨报德/null 以意逆志/null 以慎为键/null 以战去战/null 以手加额/null 以指挠佛/null 以撒/null 以攻为守/null 以文会友/null 以文害辞/null 以斯帖/null 以斯帖记/null 以斯拉记/null 以日为岁/null 以日为年/null 以日继夜/null 以旧换新/null 以暴制暴/null 以暴易暴/null 以期/null 以本人名/null 以杀去杀/null 以杀止杀/null 以权压法/null 以权谋私/null 以李报桃/null 以来/null 以柔克刚/null 以柔制刚/null 以次/null 以次充好/null 以此/null 以此为/null 以此为准/null 以此为荣/null 以此类推/null 以毒攻毒/null 以水救水/null 以水济水/null 以求/null 以求一逞/null 以汤止沸/null 以汤沃沸/null 以汤沃雪/null 以法律为准绳/null 以法莲/null 以火救火/null 以点带面/null 以然/null 以牙还牙/null 以狸致鼠/null 以狸饵鼠/null 以珠弹雀/null 以理服人/null 以白为黑/null 以盲辨色/null 以直报怨/null 以眦睚杀人/null 以眼还眼/null 以眼还眼以牙还牙/null 以石投卵/null 以石投水/null 以示警戒/null 以礼相待/null 以筌为鱼/null 以管窥天/null 以老大自居/null 以耳为目/null 以耳代目/null 以聋辨声/null 以职谋私/null 以至/null 以至于/null 以致/null 以致于/null 以色列亚/null 以色列人/null 以色列工党/null 以苦为乐/null 以苦为荣/null 以药养医/null 以莛叩钟/null 以莛撞钟/null 以虚带实/null 以蚓投鱼/null 以蠡测海/null 以血偿血/null 以血洗血/null 以血还血/null 以西/null 以西结书/null 以见一斑/null 以观后效/null 以言代法/null 以言取人/null 以讹传讹/null 以诚相待/null 以貌取人/null 以资/null 以资抵债/null 以资证明/null 以资鼓励/null 以赛亚书/null 以赢利为目的/null 以身作则/null 以身报国/null 以身抵债/null 以身殉国/null 以身殉职/null 以身相许/null 以身许国/null 以身试法/null 以近/null 以远/null 以退为进/null 以逸待劳/null 以邮戳日期为准/null 以邻为壑/null 以防万一/null 以防不测/null 以降/null 以飨读者/null 以马内利/null 仪上/null 仪仗/null 仪仗队/null 仪典/null 仪卫/null 仪器/null 仪器表/null 仪容/null 仪座/null 仪式/null 仪征/null 仪态/null 仪态万千/null 仪态万方/null 仪礼/null 仪节/null 仪行/null 仪表/null 仪表板/null 仪表盘/null 仪陇/null 仫佬/null 仰不愧天/null 仰事俯畜/null 仰人鼻息/null 仰仗/null 仰光/null 仰光大金塔/null 仰八叉/null 仰冲/null 仰卧/null 仰卧起坐/null 仰向/null 仰天/null 仰头/null 仰屋/null 仰屋兴叹/null 仰屋窃叹/null 仰屋著书/null 仰度/null 仰后/null 仰慕/null 仰慕者/null 仰承/null 仰望/null 仰求/null 仰泳/null 仰给/null 仰者/null 仰脖/null 仰药/null 仰观俯察/null 仰视/null 仰角/null 仰赖/null 仰躺/null 仰面/null 仰韶/null 仰韶文化/null 仰首/null 仰首伸眉/null 仲介/null 仲介人/null 仲冬/null 仲夏/null 仲夏夜之梦/null 仲家/null 仲尼/null 仲巴/null 仲春/null 仲秋/null 仲裁/null 仲裁人/null 仲裁者/null 仳离/null 仵作/null 仵工/null 件件/null 件数/null 价位/null 价低/null 价值/null 价值增殖/null 价值尺度/null 价值工程/null 价值形式/null 价值标准/null 价值观/null 价值规律/null 价值论/null 价值连城/null 价值量/null 价内/null 价原/null 价外/null 价层/null 价差/null 价廉/null 价廉物美/null 价标/null 价格/null 价格标签/null 价格表/null 价款/null 价率/null 价电子/null 价目/null 价目表/null 价码/null 价金/null 价钱/null 价键/null 价额/null 任一/null 任一个/null 任为/null 任之/null 任事/null 任人/null 任人为贤/null 任人唯亲/null 任人唯贤/null 任人宰割/null 任从/null 任他/null 任令/null 任何/null 任何一方/null 任何人/null 任何时候/null 任使/null 任侠/null 任便/null 任免/null 任其/null 任其发展/null 任其自流/null 任其自然/null 任内/null 任凭/null 任凭风浪起/null 任加/null 任务/null 任务书/null 任务栏/null 任劳/null 任劳任怨/null 任取/null 任听/null 任命/null 任命者/null 任咎/null 任城/null 任城区/null 任天堂/null 任它/null 任安/null 任心/null 任性/null 任情/null 任意/null 任意球/null 任所/null 任教/null 任期/null 任气/null 任满/null 任用/null 任由/null 任者/null 任职/null 任职期间/null 任至/null 任诞/null 任课/null 任贤使能/null 任贤杖能/null 任达华/null 任选/null 任重/null 任重而道远/null 任重致远/null 任重道远/null 任随/null 份上/null 份儿/null 份儿饭/null 份内/null 份内份外/null 份外/null 份子/null 份子钱/null 份数/null 份量/null 份额/null 份饭/null 仿人/null 仿似/null 仿佛/null 仿冒/null 仿冒品/null 仿冒者/null 仿制/null 仿制品/null 仿办/null 仿单/null 仿古/null 仿如/null 仿宋/null 仿宋体/null 仿射/null 仿射子空间/null 仿射空间/null 仿性/null 仿效/null 仿照/null 仿生/null 仿生学/null 仿画/null 仿皮/null 仿真/null 仿真器/null 仿真服务器/null 仿纸/null 仿羊皮纸/null 仿行/null 仿讽/null 仿造/null 仿造皮/null 仿造者/null 仿金/null 仿麻/null 企业/null 企业主/null 企业亏损/null 企业伦理/null 企业内网路/null 企业化/null 企业家/null 企业承包/null 企业改革/null 企业文化/null 企业法/null 企业界/null 企业管理/null 企业管理制度/null 企业管理硕士/null 企业经济/null 企业经营/null 企业联合组织/null 企业自主权/null 企业间网路/null 企业集团/null 企事业/null 企事业单位/null 企仰/null 企划/null 企划组织/null 企及/null 企口板/null 企图/null 企图心/null 企慕/null 企望/null 企求/null 企盼/null 企管/null 企管硕士/null 企足矫首/null 企足而待/null 企鹅/null 伄儅/null 伉俪/null 伉俪情深/null 伊丽莎白/null 伊于湖底/null 伊于胡底/null 伊人/null 伊伦/null 伊凡/null 伊利亚特/null 伊利埃斯库/null 伊利湖/null 伊利诺/null 伊利诺伊/null 伊利诺伊州/null 伊利诺州/null 伊吾/null 伊塔/null 伊塞克湖/null 伊士曼柯达公司/null 伊妹儿/null 伊始/null 伊娃/null 伊娃・门德斯/null 伊宁/null 伊尔/null 伊尔库茨克/null 伊尼亚斯/null 伊尼伊德/null 伊尼特/null 伊川/null 伊州/null 伊思迈尔/null 伊戈尔/null 伊戈尔斯/null 伊拉克人/null 伊拉克语/null 伊教/null 伊斯兰/null 伊斯兰会议/null 伊斯兰会议组织/null 伊斯兰党/null 伊斯兰圣战组织/null 伊斯兰堡/null 伊斯兰教/null 伊斯兰教历/null 伊斯坦布尔/null 伊斯帕尼奥拉/null 伊斯曼/null 伊斯法罕/null 伊斯特/null 伊春/null 伊春区/null 伊普西隆/null 伊曼/null 伊朗人/null 伊朗宪监会/null 伊朗币/null 伊比利亚/null 伊比利亚半岛/null 伊波拉/null 伊洛瓦底/null 伊洛瓦底三角洲/null 伊洛瓦底江/null 伊犁/null 伊犁哈萨克自治州/null 伊犁河/null 伊犁盆地/null 伊玛目/null 伊瑞克提翁庙/null 伊甸/null 伊甸园/null 伊科病毒/null 伊索/null 伊索寓言/null 伊莉莎白/null 伊莉萨白/null 伊莱克斯/null 伊萨卡/null 伊藤博文/null 伊蚊/null 伊通/null 伊通县/null 伊通河/null 伊通火山群/null 伊通自然保护区/null 伊通镇/null 伊里奇/null 伊里格瑞/null 伊金霍洛/null 伊阙石窟/null 伊顿公学/null 伊马姆/null 伍万/null 伍元/null 伍奢/null 伍子胥/null 伍家岗/null 伍家岗区/null 伍廷芳/null 伍德豪斯/null 伍拾/null 伍的/null 伎俩/null 伏下/null 伏低做小/null 伏侍/null 伏兵/null 伏击/null 伏击战/null 伏卧/null 伏在/null 伏地/null 伏地挺身/null 伏地魔/null 伏处/null 伏天/null 伏安/null 伏安表/null 伏安计/null 伏尔加格勒/null 伏尔加河/null 伏尔泰/null 伏尸/null 伏尸流血/null 伏帖/null 伏惟/null 伏旱/null 伏明霞/null 伏暑/null 伏案/null 伏汛/null 伏法/null 伏流/null 伏牛/null 伏牛山/null 伏特/null 伏特加/null 伏特加酒/null 伏特数/null 伏特表/null 伏特计/null 伏笔/null 伏维尚飨/null 伏罗希洛夫/null 伏罪/null 伏羲/null 伏羲氏/null 伏苓/null 伏虎/null 伏虎降龙/null 伏诛/null 伏贴/null 伏身/null 伏输/null 伏辩/null 伏都教/null 伏龙凤雏/null 伐区/null 伐异/null 伐异党同/null 伐性之斧/null 伐木/null 伐木业/null 伐木人/null 伐木场/null 伐木工人/null 伐木者/null 伐柯/null 伐树/null 伐毛洗髓/null 休业/null 休书/null 休伊特/null 休会/null 休伦湖/null 休假/null 休克/null 休兵/null 休养/null 休养所/null 休养生息/null 休刊/null 休士顿/null 休妻/null 休学/null 休宁/null 休工/null 休庭/null 休得/null 休怪/null 休息/null 休息处/null 休息室/null 休息日/null 休惜/null 休想/null 休憩/null 休战/null 休戚/null 休戚与共/null 休戚相关/null 休整/null 休斯敦/null 休斯顿/null 休旅车/null 休止/null 休止符/null 休火山/null 休牛归马/null 休牛放马/null 休牛散马/null 休眠/null 休眠期/null 休眠火山/null 休眠芽/null 休管他人瓦上霜/null 休耕/null 休耕中/null 休要/null 休谟/null 休达/null 休闲/null 休闲学/null 休闲形态/null 休闲裤/null 休闲鞋/null 众人/null 众人拾柴火焰高/null 众人敬仰/null 众位/null 众包/null 众取/null 众叛亲离/null 众口/null 众口一词/null 众口交攻/null 众口交荐/null 众口同声/null 众口烁金/null 众口熏天/null 众口皆碑/null 众口纷纭/null 众口铄金/null 众口难调/null 众国/null 众多/null 众女/null 众如水火/null 众寡/null 众寡不敌/null 众寡势殊/null 众寡悬殊/null 众寡莫敌/null 众寡难敌/null 众少不敌/null 众少成多/null 众川赴海/null 众心成城/null 众心拱辰/null 众志成城/null 众怒/null 众怒难任/null 众怒难犯/null 众所/null 众所周知/null 众所曙目/null 众所瞩目/null 众所瞻望/null 众擎易举/null 众散亲离/null 众数/null 众星/null 众星拱北/null 众星拱辰/null 众星捧月/null 众望/null 众望所依/null 众望所归/null 众望所积/null 众望攸归/null 众望有归/null 众毁所归/null 众毛攒裘/null 众生/null 众目/null 众目共睹/null 众目共视/null 众目具瞻/null 众目所归/null 众目昭彰/null 众目睽睽/null 众盲摸象/null 众矢之的/null 众神/null 众神庙/null 众虎同心/null 众议/null 众议员/null 众议成林/null 众议院/null 众语/null 众说/null 众说纷揉/null 众说纷纭/null 众说郛/null 众谋/null 众走/null 众路/null 众院/null 众香子/null 优于/null 优伶/null 优先/null 优先于/null 优先化/null 优先发展/null 优先承购权/null 优先权/null 优先照顾/null 优先级/null 优先股/null 优先认股权/null 优劣/null 优势/null 优势互补/null 优化/null 优化组合/null 优厚/null 优哉游哉/null 优存劣汰/null 优孟衣冠/null 优容/null 优尼科/null 优异/null 优异奖/null 优异成绩/null 优弧/null 优待/null 优待券/null 优待票/null 优恤/null 优惠/null 优惠价/null 优惠券/null 优惠待遇/null 优惠政策/null 优惠贷款/null 优抚/null 优抚工作/null 优柔/null 优柔寡断/null 优格/null 优渥/null 优游/null 优游自得/null 优点/null 优生/null 优生优育/null 优生学/null 优生学家/null 优生法/null 优盘/null 优秀/null 优秀人才/null 优秀作品/null 优秀儿女/null 优秀党员/null 优秀分子/null 优秀品质/null 优秀奖/null 优秀干部/null 优秀成果/null 优秀教师/null 优种/null 优等/null 优缺点/null 优美/null 优者/null 优育/null 优胜/null 优胜劣汰/null 优胜旗/null 优胜者/null 优良/null 优良传统/null 优良作风/null 优良品种/null 优裕/null 优诺牌/null 优质/null 优质产品/null 优质优价/null 优质服务/null 优越/null 优越性/null 优越感/null 优选/null 优选法/null 优遇/null 优酷/null 优雅/null 伙人/null 伙伴/null 伙伴们/null 伙伴儿/null 伙儿/null 伙同/null 伙夫/null 伙子/null 伙房/null 伙种/null 伙耕/null 伙计/null 伙颐/null 伙食/null 伙食费/null 会上/null 会上会下/null 会下/null 会不会/null 会东/null 会了/null 会众/null 会会/null 会儿/null 会元/null 会党/null 会典/null 会刊/null 会办/null 会务/null 会区/null 会厌/null 会厌软骨/null 会友/null 会受/null 会变/null 会合/null 会合处/null 会合点/null 会同/null 会后/null 会否/null 会员/null 会员国/null 会员证/null 会唱/null 会商/null 会在/null 会场/null 会址/null 会堂/null 会士/null 会士考试/null 会好/null 会子/null 会宁/null 会安/null 会审/null 会客/null 会客厅/null 会客室/null 会家不忙/null 会对/null 会少离多/null 会展/null 会师/null 会帐/null 会幕/null 会当/null 会徒/null 会徽/null 会心/null 会心微笑/null 会意/null 会意字/null 会战/null 会所/null 会把/null 会操/null 会攻/null 会日/null 会昌/null 会晤/null 会有/null 会期/null 会歌/null 会死/null 会水/null 会法/null 会泽/null 会派/null 会漏/null 会演/null 会理/null 会生枝节/null 会用/null 会盟/null 会破/null 会社/null 会稽/null 会籍/null 会老/null 会考/null 会聚/null 会聚透镜/null 会萃/null 会衔/null 会被/null 会要/null 会见/null 会见者/null 会计/null 会计人员/null 会计准则理事会/null 会计制度/null 会计员/null 会计学/null 会计室/null 会计工作/null 会计师/null 会计帐/null 会计科/null 会计科目/null 会议/null 会议上/null 会议决定/null 会议厅/null 会议室/null 会议展览/null 会议录/null 会议所/null 会议期间/null 会议桌/null 会议纪要/null 会议认为/null 会议资料/null 会讲/null 会诊/null 会试/null 会话/null 会说/null 会谈/null 会谈纪要/null 会谈者/null 会象/null 会费/null 会车/null 会通/null 会逢其适/null 会道能说/null 会里县/null 会钞/null 会错/null 会长/null 会长团/null 会门/null 会阴/null 会集/null 会面/null 会风/null 会飞/null 会餐/null 会馆/null 会首/null 会齐/null 伛偻/null 伞下/null 伞兵/null 伞形/null 伞形科/null 伞形花序/null 伞房花序/null 伞状/null 伞菌/null 伞降/null 伞面/null 伞齿轮/null 伟业/null 伟丽/null 伟举/null 伟人/null 伟力/null 伟哥/null 伟器/null 伟士牌/null 伟大/null 伟大事业/null 伟大意义/null 伟岸/null 伟晶岩/null 伟绩/null 伟观/null 传三过四/null 传下/null 传不/null 传世/null 传为佳话/null 传为美谈/null 传习/null 传书/null 传书鸽/null 传人/null 传代/null 传令/null 传令兵/null 传令官/null 传位/null 传信/null 传入/null 传入神经/null 传写/null 传出/null 传出神经/null 传到/null 传动/null 传动器/null 传动带/null 传动机构/null 传动比/null 传动系统/null 传动装置/null 传动轴/null 传单/null 传单广/null 传发/null 传号/null 传名/null 传告/null 传呼/null 传呼电话/null 传唤/null 传唤者/null 传唱/null 传回/null 传声/null 传声器/null 传声筒/null 传奇/null 传奇中/null 传奇人物/null 传奇似/null 传奇小说/null 传奇式/null 传奇性/null 传奇文学/null 传媒/null 传媒界/null 传子/null 传宗接代/null 传家/null 传家宝/null 传寄/null 传导/null 传导力/null 传导性/null 传导率/null 传布/null 传布者/null 传帮/null 传帮带/null 传开/null 传心术/null 传情/null 传感/null 传感器/null 传感技术/null 传戒/null 传户/null 传打/null 传扬/null 传承/null 传技/null 传抄/null 传报/null 传换/null 传授/null 传控/null 传播/null 传播四方/null 传播媒体/null 传播学/null 传播者/null 传播途径/null 传教/null 传教团/null 传教士/null 传教师/null 传旨/null 传本/null 传来/null 传杯弄盏/null 传染/null 传染性/null 传染源/null 传染病/null 传染病学/null 传标/null 传檄/null 传檄而定/null 传法/null 传流/null 传灯/null 传热/null 传热学/null 传热性/null 传爆线/null 传球/null 传略/null 传病/null 传看/null 传真/null 传真发送/null 传真号码/null 传真机/null 传真电报/null 传神/null 传神阿堵/null 传票/null 传福音/null 传种/null 传答/null 传粉/null 传经/null 传经送宝/null 传给/null 传统/null 传统上/null 传统中国医药/null 传统主义/null 传统医药/null 传统文化/null 传统观/null 传统词类/null 传艺/null 传见/null 传观/null 传视/null 传言/null 传讯/null 传记/null 传记体/null 传记小说/null 传记性/null 传记文学/null 传讲/null 传译/null 传话/null 传话人/null 传语/null 传说/null 传说上/null 传说中/null 传说人物/null 传说集/null 传诵/null 传谕/null 传谣/null 传赞/null 传输/null 传输协定/null 传输器/null 传输媒体/null 传输媒界/null 传输媒质/null 传输层/null 传输技术/null 传输控制/null 传输控制协定/null 传输服务/null 传输模式/null 传输率/null 传输线/null 传输设备/null 传输距离/null 传输通道/null 传输速率/null 传达/null 传达员/null 传达室/null 传达性/null 传达者/null 传过/null 传述/null 传送/null 传送带/null 传送服务/null 传送者/null 传递/null 传递性/null 传递者/null 传遍/null 传遍全国/null 传遍全身/null 传道/null 传道书/null 传道受业/null 传道士/null 传道者/null 传道部/null 传销/null 传问/null 传闻/null 传闻失实/null 传闻证据/null 传阅/null 传颂/null 传题/null 伢子/null 伢崽/null 伤不起/null 伤了脚/null 伤亡/null 伤亡事故/null 伤亡人数/null 伤人/null 伤俘/null 伤兵/null 伤别/null 伤势/null 伤化败俗/null 伤及无辜/null 伤口/null 伤号/null 伤员/null 伤处/null 伤天/null 伤天害命/null 伤天害理/null 伤失/null 伤害/null 伤害罪/null 伤寒/null 伤寒沙门氏菌/null 伤寒症/null 伤弓之鸟/null 伤心/null 伤心事/null 伤心惨目/null 伤心致死/null 伤心落泪/null 伤心蒿目/null 伤怀/null 伤悲/null 伤悼/null 伤感/null 伤残/null 伤残人/null 伤残人员/null 伤毁/null 伤气/null 伤热/null 伤生/null 伤疤/null 伤病/null 伤病员/null 伤痕/null 伤痕累累/null 伤痛/null 伤着/null 伤神/null 伤筋动骨/null 伤筋断骨/null 伤者/null 伤耗/null 伤脑筋/null 伤药/null 伤财/null 伤身/null 伤逝/null 伤风/null 伤风败俗/null 伤食/null 伥鬼/null 伦巴/null 伦常/null 伦敦/null 伦敦人/null 伦敦国际金融期货交易所/null 伦敦大学亚非学院/null 伦敦大学学院/null 伦敦帝国理工学院/null 伦敦证券交易所/null 伦次/null 伦比/null 伦理/null 伦理学/null 伦理学史/null 伦理学家/null 伦理思想/null 伦理社会主义/null 伦理道德/null 伦琴/null 伦琴射线/null 伪书/null 伪代码/null 伪作/null 伪军/null 伪劣/null 伪劣商品/null 伪名/null 伪君子/null 伪品/null 伪善/null 伪善者/null 伪币/null 伪托/null 伪政权/null 伪朝/null 伪本/null 伪满/null 伪科学/null 伪称/null 伪笔/null 伪经/null 伪职/null 伪药/null 伪装/null 伪言/null 伪誓/null 伪誓者/null 伪证/null 伪证罪/null 伪证者/null 伪足/null 伪迹/null 伪造/null 伪造品/null 伪造物/null 伪造罪/null 伪造者/null 伪钞/null 伪顶/null 伪饰/null 伫侯/null 伫候/null 伫列/null 伫望/null 伫立/null 伫足/null 伯乐/null 伯乐一顾/null 伯仲/null 伯仲之间/null 伯仲叔季/null 伯伯/null 伯俞泣杖/null 伯克利/null 伯公/null 伯利兹/null 伯利恒/null 伯劳/null 伯劳飞燕/null 伯劳鸟/null 伯南克/null 伯叔/null 伯叔祖母/null 伯叔祖父/null 伯埙仲篪/null 伯多禄/null 伯婆/null 伯尔尼/null 伯尔尼国际/null 伯德雷恩图书馆/null 伯恩/null 伯恩斯/null 伯恩斯坦主义/null 伯恩茅斯/null 伯拉第斯拉瓦/null 伯明翰/null 伯杰/null 伯格/null 伯歌季舞/null 伯母/null 伯爵/null 伯爵夫人/null 伯父/null 伯特兰/null 伯特兰德/null 伯祖/null 伯祖母/null 伯纳斯・李/null 伯莎/null 伯赛大/null 伯道无儿/null 伯都/null 伯里克利/null 伯颜/null 估产/null 估价/null 估价人/null 估值/null 估列/null 估到/null 估及/null 估地/null 估堆儿/null 估定/null 估摸/null 估测/null 估税/null 估税员/null 估算/null 估衣/null 估衣店/null 估计/null 估计不足/null 估计员/null 估计者/null 估过/null 估量/null 估错/null 伴之/null 伴人/null 伴以/null 伴你/null 伴侣/null 伴侣号/null 伴儿/null 伴同/null 伴唱/null 伴器/null 伴奏/null 伴奏者/null 伴奏队员/null 伴娘/null 伴当/null 伴性/null 伴手/null 伴护/null 伴星/null 伴有/null 伴游/null 伴热/null 伴物/null 伴生树/null 伴生气/null 伴着/null 伴矩阵/null 伴者/null 伴舞/null 伴读/null 伴郎/null 伴随/null 伴随效应/null 伴随有/null 伴随物/null 伴音/null 伴食中书/null 伴食宰相/null 伶人/null 伶仃/null 伶仃孤苦/null 伶俐/null 伶俜/null 伶悧/null 伶牙/null 伶牙俐嘴/null 伶牙俐齿/null 伶盗龙/null 伶鼬/null 伸入/null 伸冤/null 伸出/null 伸到/null 伸化/null 伸及/null 伸向/null 伸域/null 伸展/null 伸展到/null 伸展台/null 伸展者/null 伸度/null 伸延/null 伸开/null 伸张/null 伸张正义/null 伸懒腰/null 伸手/null 伸手派/null 伸港/null 伸港乡/null 伸畅/null 伸直/null 伸眉吐气/null 伸缩/null 伸缩喇叭/null 伸缩器/null 伸缩性/null 伸肌/null 伸腰/null 伸腿/null 伸臂/null 伸至/null 伸角/null 伸过/null 伸进/null 伸钩索铁/null 伸长/null 伸长性/null 伸雪/null 伸颈/null 伺候/null 伺养/null 伺养场/null 伺养者/null 伺料/null 伺料槽/null 伺服/null 伺服器/null 伺服机构/null 伺服者/null 伺服阀/null 伺机/null 伺隙/null 似不/null 似为/null 似乎/null 似乎是/null 似于/null 似变/null 似可/null 似合理/null 似地/null 似处女/null 似将/null 似属/null 似应/null 似懂非懂/null 似是/null 似是而非/null 似曾相识/null 似有/null 似核/null 似梦/null 似模似样/null 似水如鱼/null 似水年华/null 似漆如胶/null 似火/null 似玉如花/null 似玻璃/null 似的/null 似真/null 似笑/null 似笑非笑/null 似能/null 似花/null 似虎/null 似蜜/null 似象/null 似醉如痴/null 似雪/null 似非而是/null 似马/null 似鬼/null 似鸟恐龙/null 伽倻/null 伽倻琴/null 伽利略/null 伽利略・伽利雷/null 伽利略探测器/null 伽南香/null 伽师/null 伽玛/null 伽罗华/null 伽罗华理论/null 伽罗瓦/null 伽罗瓦理论/null 伽蓝/null 伽马/null 伽马射线/null 伽马射线探测器/null 伽马辐射/null 佃农/null 佃契/null 佃客/null 佃户/null 佃权/null 佃租/null 但丁/null 但书/null 但仍用作/null 但以理书/null 但凡/null 但却/null 但可以/null 但如/null 但尼生/null 但愿/null 但愿如此/null 但是/null 但求无过/null 但能/null 但说无妨/null 佉卢文/null 位于/null 位于下面/null 位于在/null 位于高处/null 位似/null 位似变换/null 位低/null 位元/null 位元组/null 位列/null 位制/null 位势/null 位势米/null 位卑言高/null 位及/null 位图/null 位址/null 位子/null 位居/null 位差/null 位形/null 位形空间/null 位数/null 位极人臣/null 位标/null 位次/null 位移/null 位第/null 位素/null 位置/null 位置效应/null 位置格/null 位能/null 位高/null 低三下四/null 低下/null 低丘/null 低了/null 低于/null 低云/null 低产/null 低产田/null 低人/null 低人一等/null 低价/null 低估/null 低低切切/null 低俗/null 低俗之风/null 低俗化/null 低保/null 低倍/null 低值/null 低元音/null 低八度/null 低分/null 低利/null 低利率/null 低利贷款/null 低剂量照射/null 低劣/null 低卡/null 低压/null 低压带/null 低压槽/null 低叫/null 低合金钢/null 低吟/null 低周波/null 低唱/null 低喻/null 低回/null 低地/null 低坝/null 低垂/null 低声/null 低声下气/null 低声波/null 低声说/null 低处/null 低头/null 低头不语/null 低头丧气/null 低头认罪/null 低密/null 低尾气排放/null 低层/null 低工资/null 低帮/null 低平/null 低年级/null 低度/null 低廉/null 低得/null 低微/null 低息/null 低息贷款/null 低成本/null 低手/null 低报/null 低挡/null 低收入/null 低放射性废物/null 低效/null 低效率/null 低效益/null 低效能/null 低昂/null 低杠/null 低标号/null 低栏/null 低档/null 低楼/null 低毒/null 低气压/null 低气压区/null 低氧/null 低水平/null 低沉/null 低泣/null 低洼/null 低浓缩铀/null 低消耗/null 低温/null 低温泵/null 低温计/null 低潮/null 低点/null 低烧/null 低热/null 低眉顺眼/null 低着/null 低矮/null 低碳钢/null 低税/null 低空/null 低空跳伞/null 低空飞过/null 低端/null 低等/null 低等动物/null 低等植物/null 低筋面粉/null 低级/null 低级神经活动/null 低级语言/null 低级趣味/null 低级阶段/null 低纬度/null 低维/null 低缓/null 低耗/null 低胸/null 低能/null 低能儿/null 低能者/null 低脂/null 低腰/null 低落/null 低薪/null 低血压/null 低血糖症/null 低语/null 低语声/null 低调/null 低谷/null 低质量/null 低贱/null 低费用/null 低迷/null 低迷状态/null 低速/null 低速层/null 低速挡/null 低速率/null 低销/null 低阶/null 低阶语言/null 低降/null 低限/null 低陷/null 低音/null 低音喇叭/null 低音大号/null 低音大提琴/null 低音提琴/null 低音炮/null 低音管/null 低音部/null 低领口/null 低颈/null 低频/null 低额/null 低飞/null 低首/null 低首下心/null 低龋齿性/null 住下/null 住了/null 住于/null 住入/null 住勤/null 住区/null 住友/null 住口/null 住员/null 住嘴/null 住在/null 住地/null 住址/null 住处/null 住宅/null 住宅区/null 住宅楼/null 住宅泡沫/null 住客/null 住家/null 住家用/null 住宿/null 住居/null 住屋/null 住店/null 住惯/null 住户/null 住房/null 住房难/null 住所/null 住手/null 住持/null 住旅馆/null 住校/null 住民/null 住气/null 住用/null 住的/null 住着/null 住笔/null 住者/null 住脚/null 住舍/null 住血/null 住行/null 住读/null 住足/null 住进/null 住院/null 住院治疗/null 佐世/null 佐世保/null 佐人/null 佐料/null 佐格比国际/null 佐治亚/null 佐治亚州/null 佐理/null 佐罗/null 佐药/null 佐证/null 佐贰/null 佐酒/null 佐雍得尝/null 佐餐/null 佑护/null 佑知/null 体中/null 体书/null 体会/null 体位/null 体例/null 体侧/null 体内/null 体刑/null 体制/null 体制改革/null 体力/null 体力不支/null 体力劳动/null 体势/null 体协/null 体味/null 体团/null 体国经野/null 体图/null 体坛/null 体型/null 体外/null 体外受精/null 体大/null 体大思精/null 体委/null 体察/null 体工队/null 体己/null 体己钱/null 体式/null 体弱/null 体弱多病/null 体形/null 体征/null 体循环/null 体念/null 体态/null 体性/null 体恤/null 体恤入微/null 体恤衫/null 体悟/null 体惜/null 体感/null 体捡/null 体操/null 体操家/null 体操运动员/null 体操队/null 体改/null 体改委/null 体无完肤/null 体校/null 体格/null 体格检查/null 体检/null 体模/null 体毒/null 体毛/null 体液/null 体温/null 体温检测仪/null 体温表/null 体温计/null 体温过低/null 体火/null 体状/null 体现/null 体癣/null 体积/null 体积单位/null 体积百分比/null 体积计/null 体系/null 体系化/null 体细胞/null 体统/null 体罚/null 体肤/null 体育/null 体育之窗/null 体育事业/null 体育人物/null 体育健儿/null 体育场/null 体育场馆/null 体育新闻/null 体育比赛/null 体育活动/null 体育爱好者/null 体育用品/null 体育界/null 体育疗法/null 体育竞赛/null 体育系/null 体育组/null 体育运动/null 体育道德/null 体育部/null 体育锻炼/null 体育项目/null 体育馆/null 体胀系数/null 体胖/null 体能/null 体腔/null 体膨胀/null 体臭/null 体节/null 体虫/null 体虱/null 体表/null 体裁/null 体视/null 体认/null 体词/null 体谅/null 体貌/null 体质/null 体贴/null 体贴入微/null 体重/null 体重器/null 体重计/null 体量/null 体长/null 体院/null 体面/null 体香剂/null 体验/null 体验生活/null 体高/null 体魄/null 何不/null 何为/null 何乐/null 何乐不为/null 何乐而不为/null 何事/null 何人/null 何以/null 何以成方圆/null 何以见得/null 何其/null 何况/null 何出此言/null 何厚铧/null 何去/null 何去何从/null 何啻/null 何在/null 何地/null 何堪/null 何处/null 何如/null 何妨/null 何尝/null 何干/null 何年/null 何年何月/null 何应钦/null 何廉/null 何必/null 何必当初/null 何忍/null 何患/null 何患无辞/null 何所/null 何故/null 何方/null 何日/null 何时/null 何时何地/null 何时是了/null 何曾/null 何月/null 何止/null 何殊/null 何济于事/null 何用/null 何种/null 何等/null 何者/null 何至/null 何苦/null 何苦呢/null 何西阿书/null 何许/null 何许人也/null 何谓/null 何足挂齿/null 何足道哉/null 何须/null 何首乌/null 何鲁晓夫/null 余下/null 余业遗烈/null 余值/null 余光/null 余党/null 余兴/null 余切/null 余利/null 余剩/null 余割/null 余力/null 余勇可贾/null 余可/null 余味/null 余响绕梁/null 余地/null 余外/null 余妙绕梁/null 余姚/null 余威/null 余子碌碌/null 余存/null 余孽/null 余干/null 余年/null 余庆/null 余弦/null 余弧/null 余当/null 余怒/null 余怒未息/null 余性/null 余悸/null 余数/null 余数定理/null 余料/null 余晖/null 余暇/null 余月/null 余杭/null 余杭区/null 余杯冷炙/null 余桃啖君/null 余款/null 余步/null 余毒/null 余江/null 余沥/null 余波/null 余火/null 余烬/null 余烬复燃/null 余热/null 余物/null 余甘子/null 余生/null 余留/null 余留事务/null 余留无符号数/null 余皇/null 余码/null 余粮/null 余绪/null 余缺/null 余者/null 余膏剩馥/null 余蓄/null 余裕/null 余角/null 余解/null 余象/null 余车/null 余辉/null 余量/null 余钱/null 余闲/null 余集/null 余震/null 余霞/null 余霞成绮/null 余音/null 余音绕梁/null 余音袅袅/null 余韵/null 余韵流风/null 余项/null 余额/null 余风/null 余香/null 佚名/null 佛书/null 佛事/null 佛像/null 佛鬼/null 佛光/null 佛兰/null 佛兰德/null 佛兰芒语/null 佛典/null 佛冈/null 佛协/null 佛历/null 佛口蛇心/null 佛号/null 佛吉尼亚/null 佛坪/null 佛堂/null 佛堤树/null 佛塔/null 佛头着粪/null 佛学/null 佛家/null 佛寺/null 佛山地区/null 佛得角/null 佛性/null 佛戾/null 佛手/null 佛手瓜/null 佛教/null 佛教史/null 佛教徒/null 佛教界/null 佛教语/null 佛晓/null 佛朗哥/null 佛朗机/null 佛朗机炮/null 佛朗机铳/null 佛殿/null 佛法/null 佛法僧目/null 佛洛伊德/null 佛洛斯特/null 佛爷/null 佛牙/null 佛眼相看/null 佛祖/null 佛经/null 佛罗伦萨/null 佛罗里达/null 佛罗里达州/null 佛舍利/null 佛蒙特/null 佛蒙特州/null 佛诞日/null 佛语/null 佛跳墙/null 佛门/null 佛陀/null 佛雷泽尔/null 佛青/null 佛香阁/null 佛骨/null 佛骨塔/null 佛龛/null 作下/null 作业/null 作业室/null 作业环境/null 作业系统/null 作东/null 作为/null 作主/null 作乐/null 作乱/null 作了/null 作于/null 作些/null 作交易/null 作人/null 作件/null 作价/null 作伐/null 作伪/null 作伪证/null 作伴/null 作俑/null 作保/null 作假/null 作先锋/null 作兴/null 作准/null 作准备/null 作出/null 作出了/null 作出决定/null 作出努力/null 作出规定/null 作出让步/null 作出评价/null 作别/null 作到/null 作势/null 作协/null 作古/null 作古人/null 作合/null 作呕/null 作品/null 作响/null 作哼声/null 作困兽斗/null 作图/null 作图解/null 作在/null 作坊/null 作坏事/null 作壁上观/null 作声/null 作大/null 作奸犯科/null 作好/null 作好准备/null 作如是观/null 作威/null 作威作福/null 作媒/null 作嫁/null 作孽/null 作官/null 作客/null 作客思想/null 作宣传/null 作家/null 作对/null 作导/null 作寿/null 作帐/null 作序/null 作序言/null 作废/null 作弄/null 作弄人/null 作弊/null 作得/null 作态/null 作怪/null 作息/null 作息制度/null 作息时间/null 作息时间表/null 作恶/null 作恶多端/null 作恶者/null 作愁相/null 作戏/null 作成/null 作战/null 作战失踪/null 作战失踪人员/null 作战方案/null 作手/null 作拍/null 作指示/null 作揖/null 作操/null 作数/null 作文/null 作文法/null 作文集/null 作料/null 作曲/null 作曲家/null 作曲者/null 作木工/null 作案/null 作梗/null 作梦/null 作梦者/null 作死/null 作死马医/null 作法/null 作法自毙/null 作派/null 作爱/null 作物/null 作用/null 作用于/null 作用力/null 作用域/null 作用理论/null 作画/null 作痛/null 作祟/null 作福/null 作福作威/null 作秀/null 作笔记/null 作答/null 作罢/null 作美/null 作者/编剧 作者不详/null 作者未详/null 作者权/null 作脸/null 作舍道边/null 作色/null 作艺/null 作苦工/null 作茧/null 作茧自缚/null 作表/null 作裁判/null 作见证/null 作誓/null 作记号/null 作证/null 作证能力/null 作评价/null 作词/null 作诗/null 作诗法/null 作诗者/null 作贱/null 作贼/null 作贼心虚/null 作赔/null 作践/null 作辍/null 作过/null 作陪/null 作难/null 作风/null 作风修养/null 作风正派/null 作马/null 作鬼/null 作鸟兽散/null 佝偻/null 佝偻病/null 佝瞀/null 佟佳江/null 你争我夺/null 你们/null 你好/null 你家/null 你我/null 你死我活/null 你知我知/null 你老/null 你追我赶/null 佣人/null 佣人领班/null 佣兵/null 佣妇/null 佣婢/null 佣工/null 佣金/null 佣钱/null 佧佤族/null 佩兰/null 佩刀/null 佩剑/null 佩地/null 佩带/null 佩思/null 佩戴/null 佩挂/null 佩服/null 佩林/null 佩洛西/null 佩玉/null 佩环/null 佩花/null 佩韦佩弦/null 佩饰/null 佩鲁贾/null 佬族/null 佯为/null 佯动/null 佯攻/null 佯死/null 佯狂/null 佯称/null 佯笑/null 佯羞/null 佯装/null 佯装不知/null 佯装者/null 佯言/null 佯败/null 佯降/null 佳世客/null 佳丽/null 佳人/null 佳人才子/null 佳人薄命/null 佳作/null 佳偶/null 佳兵不祥/null 佳冬/null 佳冬乡/null 佳化/null 佳句/null 佳品/null 佳地/null 佳境/null 佳妙/null 佳客/null 佳宾/null 佳得乐/null 佳日/null 佳景/null 佳期/null 佳木斯/null 佳木斯大学/null 佳洁士/null 佳篇/null 佳绩/null 佳美/null 佳肴/null 佳能/null 佳节/null 佳誉/null 佳评如潮/null 佳话/null 佳酿/null 佳里/null 佳里镇/null 佳音/null 佶屈聱牙/null 佻巧/null 佻薄/null 佼佼/null 佼佼者/null 使上/null 使下/null 使不/null 使不得/null 使与/null 使为/null 使之/null 使习惯/null 使于/null 使人/null 使人信服/null 使他/null 使以/null 使住/null 使作/null 使作呕/null 使免除/null 使入/null 使兴奋/null 使其/null 使具/null 使具体化/null 使再/null 使出/null 使到/null 使力/null 使功不如使过/null 使动/null 使劲/null 使劲儿/null 使厌烦/null 使受/null 使受伤/null 使君子/null 使命/null 使命感/null 使唤/null 使因/null 使团/null 使困扰/null 使困窘/null 使在/null 使坏/null 使失望/null 使女/null 使她/null 使如/null 使娱乐/null 使孤立/null 使它/null 使完/null 使容易/null 使对/null 使尽/null 使带/null 使当/null 使役/null 使徒/null 使徒行传/null 使得/null 使怒/null 使性子/null 使恶/null 使您/null 使惯/null 使愤怒/null 使愤慨/null 使成/null 使成一体/null 使我/null 使我们/null 使无/null 使智使勇/null 使更/null 使最/null 使有/null 使服/null 使气/null 使湿透/null 使满意/null 使热/null 使然/null 使犯/null 使现/null 使生气/null 使用/null 使用不当/null 使用价值/null 使用手册/null 使用报告/null 使用数量/null 使用方便/null 使用方法/null 使用期/null 使用权/null 使用条款/null 使用者/null 使用者中介/null 使用范围/null 使用说明/null 使用费/null 使用量/null 使由/null 使看/null 使眼色/null 使硬化/null 使羊将狼/null 使羞愧/null 使者/null 使而/null 使耳聋/null 使能/null 使膨胀/null 使臂使指/null 使臣/null 使至/null 使节/null 使节团/null 使获/null 使著/null 使蔓延/null 使蚊负山/null 使被/null 使该/null 使负/null 使贪使愚/null 使起/null 使转向/null 使达/null 使过/null 使遭/null 使醉/null 使领官员/null 使领馆/null 使馆/null 使骇怕/null 使高兴/null 使高贵/null 使魔法/null 使麻痹/null 侃价/null 侃侃/null 侃侃而谈/null 侃侃谔谔/null 侃儿/null 侃大山/null 侃山/null 侃星/null 侃爷/null 侄儿/null 侄外/null 侄女/null 侄女婿/null 侄妇/null 侄媳/null 侄媳妇/null 侄子/null 侄孙/null 侄孙儿/null 侄孙女/null 侄甥/null 侈奢/null 侈糜/null 侈谈/null 侈靡/null 侉子/null 例会/null 例假/null 例假日除外/null 例句/null 例外/null 例外字/null 例如/null 例子/null 例文/null 例案/null 例示/null 例程/null 例行/null 例行公事/null 例规/null 例言/null 例证/null 例语/null 例项/null 例题/null 侍中/null 侍仆/null 侍从/null 侍候/null 侍养/null 侍制/null 侍卫/null 侍卫官/null 侍奉/null 侍女/null 侍妾/null 侍婢/null 侍应/null 侍应生/null 侍弄/null 侍役/null 侍立/null 侍童/null 侍者/null 侍郎/null 侏儒/null 侏儒仓鼠/null 侏儒症/null 侏儒观戏/null 侏罗/null 侏罗系/null 侏罗纪/null 侔色揣称/null 侗人/null 侗剧/null 供不应求/null 供产销/null 供人/null 供以/null 供价/null 供住/null 供佛/null 供佛花/null 供作/null 供信/null 供养/null 供出/null 供品/null 供售/null 供大于求/null 供奉/null 供应/null 供应价格/null 供应体制/null 供应品/null 供应商/null 供应室/null 供应标准/null 供应点/null 供应站/null 供应者/null 供应量/null 供应链/null 供房/null 供方/null 供暖/null 供桌/null 供气/null 供水/null 供水栓/null 供求/null 供求关系/null 供求矛盾/null 供油/null 供油系统/null 供热/null 供燃气/null 供片/null 供物/null 供状/null 供献/null 供电/null 供电局/null 供电系统/null 供神/null 供称/null 供稿/null 供粮/null 供给/null 供给制/null 供给者/null 供给量/null 供职/null 供膳/null 供花/null 供血/null 供血者/null 供认/null 供认不讳/null 供证/null 供词/null 供货/null 供货商/null 供资/null 供过于求/null 供述/null 供量/null 供销/null 供销合作社/null 供销商/null 供销社/null 供销系统/null 供销部门/null 供需/null 供需矛盾/null 供需见面/null 依人/null 依从/null 依仗/null 依体画葫芦/null 依余类推/null 依例/null 依依/null 依依不舍/null 依依惜别/null 依偎/null 依傍/null 依兰/null 依其/null 依凭/null 依后/null 依地酸二钴/null 依字母/null 依存/null 依安/null 依属/null 依山傍水/null 依序/null 依律/null 依循/null 依恋/null 依我来看/null 依我看/null 依我看来/null 依托/null 依据/null 依据事实/null 依撒依亚/null 依撒意亚/null 依撒格/null 依旧/null 依期/null 依条约/null 依柳辛/null 依样/null 依样画葫芦/null 依样葫芦/null 依次/null 依次为/null 依此/null 依此类推/null 依法/null 依法办事/null 依法处理/null 依法查处/null 依法治国/null 依法治理/null 依洛瓦底/null 依流平进/null 依然/null 依然如我/null 依然如故/null 依然故我/null 依然是/null 依照/null 依率/null 依田纪基/null 依直/null 依着/null 依稀/null 依约/null 依草附木/null 依言/null 依计行事/null 依赖/null 依赖于/null 依赖心/null 依赖思想/null 依赖性/null 依违/null 依阿取容/null 依附/null 依附于/null 依靠/null 依靠人民/null 依靠群众/null 依靠集体/null 依顺/null 依顺序/null 侠义/null 侠侣/null 侠士/null 侠女/null 侠客/null 侠气/null 侠盗/null 侠盗猎车手/null 侠盗飞车/null 侠送/null 侠骨/null 侥幸/null 侦办/null 侦听/null 侦听器/null 侦察/null 侦察兵/null 侦察出/null 侦察卫星/null 侦察员/null 侦察性/null 侦察排/null 侦察机/null 侦察者/null 侦探/null 侦探小说/null 侦查/null 侦检/null 侦毒/null 侦毒器/null 侦毒管/null 侦测/null 侦测器/null 侦破/null 侦缉/null 侦讯/null 侦速/null 侧体/null 侧光/null 侧击/null 侧刀旁/null 侧卧/null 侧压/null 侧压力/null 侧向/null 侧壁/null 侧室/null 侧录/null 侧影/null 侧房/null 侧扁/null 侧投影/null 侧投球/null 侧方/null 侧板/null 侧枝/null 侧柏/null 侧标/null 侧根/null 侧棱/null 侧橱/null 侧歪/null 侧泳/null 侧滑/null 侧灯/null 侧目/null 侧目而视/null 侧睡/null 侧笔/null 侧线/null 侧翼/null 侧耳/null 侧耳倾听/null 侧耳细听/null 侧芽/null 侧蚀力/null 侧视/null 侧视图/null 侧记/null 侧身/null 侧身政檀/null 侧躺/null 侧边/null 侧边栏/null 侧过/null 侧进/null 侧道/null 侧部/null 侧重/null 侧重于/null 侧重点/null 侧链/null 侧锋/null 侧门/null 侧闻/null 侧面/null 侧面像/null 侧面图/null 侧页/null 侧风/null 侨乡/null 侨办/null 侨务/null 侨务办公室/null 侨务工作/null 侨区/null 侨商/null 侨团/null 侨居/null 侨居国/null 侨属/null 侨教/null 侨民/null 侨汇/null 侨生/null 侨界/null 侨眷/null 侨联/null 侨胞/null 侨资/null 侨领/null 侪辈/null 侮弄/null 侮慢/null 侮蔑/null 侮辱/null 侮辱性/null 侮骂/null 侯景之乱/null 侯爵/null 侯赛因/null 侯选人/null 侯门似海/null 侯马/null 侯鸟/null 侵入/null 侵入家宅者/null 侵入岩/null 侵入性/null 侵入者/null 侵凌/null 侵华/null 侵占/null 侵吞/null 侵夺/null 侵害/null 侵害人/null 侵害者/null 侵彻力/null 侵截/null 侵截者/null 侵扰/null 侵晨/null 侵权/null 侵权人/null 侵权行为/null 侵染/null 侵渔/null 侵犯/null 侵犯者/null 侵略/null 侵略军/null 侵略国/null 侵略战争/null 侵略扩张/null 侵略者/null 侵蚀/null 侵蚀作用/null 侵袭/null 侵越/null 侵透/null 便与/null 便中/null 便了/null 便于/null 便于工作/null 便于管理/null 便于解决/null 便人/null 便从/null 便会/null 便使/null 便便/null 便函/null 便利/null 便利商店/null 便利店/null 便利性/null 便利设施/null 便利贴/null 便卡/null 便可/null 便后/null 便器/null 便士/null 便壶/null 便嬛/null 便宜/null 便宜从事/null 便宜行事/null 便宜货/null 便宴/null 便将/null 便帽/null 便床/null 便当/null 便得/null 便所/null 便把令来行/null 便捷/null 便捷化/null 便携/null 便携式/null 便携机/null 便是/null 便有/null 便服/null 便条/null 便条纸/null 便桥/null 便桶/null 便步走/null 便毒/null 便民/null 便民利民/null 便民服务/null 便池/null 便溺/null 便状/null 便盆/null 便秘/null 便笺/null 便签/null 便而/null 便能/null 便菜/null 便血/null 便衣/null 便衣警察/null 便被/null 便装/null 便裤/null 便览/null 便车/null 便车旅行者/null 便道/null 便酌/null 便门/null 便难/null 便鞋/null 便餐/null 便饭/null 便饯/null 促产/null 促令/null 促使/null 促其/null 促动/null 促发/null 促声/null 促弦/null 促成/null 促求/null 促熟/null 促狭/null 促狭鬼/null 促生产/null 促织/null 促脉/null 促膝/null 促膝谈心/null 促请/null 促进/null 促进会/null 促进作用/null 促进剂/null 促进性/null 促进改革/null 促进派/null 促进生产/null 促进者/null 促退/null 促销/null 俄中/null 俄中朝/null 俄亥俄/null 俄亥俄州/null 俄克拉何马/null 俄克拉何马城/null 俄克拉何马州/null 俄军/null 俄勒冈/null 俄勒冈州/null 俄国/null 俄国一九○五年革命/null 俄国二月革命/null 俄国人/null 俄备得/null 俄巴底亚书/null 俄底浦斯/null 俄底浦斯情结/null 俄文/null 俄狄浦斯/null 俄罗斯人/null 俄罗斯帝国/null 俄罗斯方块/null 俄罗斯研究会/null 俄罗斯联邦/null 俄罗斯轮盘/null 俄而/null 俄联邦/null 俄裔/null 俄语/null 俄顷/null 俊俏/null 俊拔/null 俊杰/null 俊爽/null 俊秀/null 俊美/null 俊逸/null 俊雅/null 俊马/null 俎上肉/null 俏丽/null 俏似/null 俏俊/null 俏头/null 俏式/null 俏步/null 俏皮/null 俏皮话/null 俐牙俐齿/null 俐落/null 俐齿伶牙/null 俑坑/null 俗不可耐/null 俗不堪耐/null 俗世/null 俗世奇人/null 俗丽/null 俗义/null 俗事/null 俗人/null 俗体/null 俗体字/null 俗例/null 俗剧/null 俗名/null 俗士/null 俗套/null 俗字/null 俗定/null 俗家/null 俗尚/null 俗心/null 俗念/null 俗态/null 俗性/null 俗气/null 俗物/null 俗用/null 俗称/null 俗缘/null 俗艳/null 俗论/null 俗话/null 俗话说/null 俗语/null 俗谚/null 俗谚口碑/null 俗随时变/null 俘管工作/null 俘获/null 俘营/null 俘虏/null 俘虏政策/null 俚俗/null 俚言/null 俚语/null 俚谚/null 保不住/null 保不定/null 保不齐/null 保业/null 保丽龙/null 保举/null 保亭/null 保亭县/null 保人/null 保价/null 保价信/null 保价函件/null 保住/null 保佑/null 保修/null 保修期/null 保值/null 保值储蓄/null 保健/null 保健员/null 保健操/null 保健站/null 保健食品/null 保元丸/null 保全/null 保全工/null 保全面子/null 保养/null 保养费/null 保准/null 保利/null 保利科技有限公司/null 保力龙/null 保加利亚/null 保单/null 保卫/null 保卫和平/null 保卫工作/null 保卫战/null 保卫祖国/null 保卫科/null 保呈/null 保命/null 保和丸/null 保固/null 保国安民/null 保墒/null 保增长/null 保外就医/null 保姆/null 保媒/null 保存/null 保存实力/null 保存性/null 保存期/null 保存物/null 保存者/null 保守/null 保守主义/null 保守党/null 保守党人/null 保守性/null 保守机密/null 保守派/null 保守疗法/null 保安/null 保安人员/null 保安团/null 保安局局长/null 保安自动化/null 保安部队/null 保安队/null 保官/null 保定/null 保定地区/null 保家卫国/null 保密/null 保密性/null 保尔/null 保尔森/null 保山/null 保山地区/null 保底/null 保康/null 保德/null 保惠师/null 保户/null 保护/null 保护主义/null 保护人/null 保护伞/null 保护关税/null 保护剂/null 保护区/null 保护国/null 保护地/null 保护层/null 保护性/null 保护模式/null 保护气体/null 保护网/null 保护者/null 保护色/null 保护装置/null 保护视力/null 保护贸易/null 保护金/null 保护鸟/null 保持/null 保持一致/null 保持克制/null 保持原状/null 保持原貌/null 保持性/null 保持清洁/null 保持稳定/null 保持系/null 保持者/null 保持联系/null 保持警惕/null 保收/null 保教/null 保时捷/null 保暖/null 保有/null 保本/null 保残守缺/null 保母/null 保洁/null 保洁箱/null 保温/null 保温杯/null 保温瓶/null 保湿/null 保热/null 保状/null 保环主义/null 保用/null 保田/null 保甲/null 保甲制度/null 保留/null 保留剧目/null 保留区/null 保留地/null 保留权/null 保留版权/null 保留物/null 保皇/null 保皇党/null 保皇派/null 保真/null 保真度/null 保祐/null 保票/null 保税/null 保税制/null 保税区/null 保管/null 保管人/null 保管员/null 保管处/null 保结/null 保罗/null 保育/null 保育员/null 保育器/null 保育院/null 保膘/null 保良/null 保苗/null 保荐/null 保荐书/null 保藏/null 保角/null 保角对应/null 保证/null 保证书/null 保证人/null 保证供应/null 保证供给/null 保证破坏战略/null 保证质量/null 保证金/null 保证需要/null 保语/null 保质/null 保质保量/null 保质期/null 保费/null 保路运动/null 保身/null 保送/null 保释/null 保释人/null 保释者/null 保释金/null 保重/null 保重身体/null 保量/null 保镖/null 保镳/null 保长/null 保长对应/null 保险/null 保险业/null 保险业务/null 保险业者/null 保险丝/null 保险人/null 保险公司/null 保险刀/null 保险单/null 保险商/null 保险套/null 保险期/null 保险期限/null 保险杠/null 保险柜/null 保险灯/null 保险盒/null 保险箱/null 保险粉/null 保险装置/null 保险解开系统/null 保险费/null 保险金/null 保障/null 保障人/null 保障机制/null 保障监督/null 保靖/null 保驾/null 保鲜/null 保鲜剂/null 保鲜期/null 保鲜纸/null 保鲜膜/null 保龄/null 保龄球/null 保龄球馆/null 俞允/null 俞天白/null 俞文豹/null 俟候/null 俟机/null 俟河之清/null 信上/null 信不过/null 信中/null 信丰/null 信义/null 信义乡/null 信义区/null 信从/null 信令/null 信以为真/null 信仰/null 信仰主义/null 信仰者/null 信件/null 信任/null 信任感/null 信任投票/null 信任状/null 信任票/null 信众/null 信佛/null 信使/null 信使核糖核酸/null 信函/null 信区/null 信及豚鱼/null 信口/null 信口开河/null 信口胡说/null 信口雌黄/null 信史/null 信号/null 信号台/null 信号器/null 信号处理/null 信号弹/null 信号手/null 信号曲/null 信号机/null 信号枪/null 信号灯/null 信噪比/null 信址/null 信士/null 信外/null 信天游/null 信天翁/null 信奉/null 信女/null 信她/null 信孚中外/null 信守/null 信守合同/null 信宜/null 信实/null 信宿/null 信封/null 信州/null 信州区/null 信差/null 信徒/null 信得过/null 信徙/null 信德省/null 信心/null 信心倍增/null 信念/null 信息/null 信息与通讯技术/null 信息中心/null 信息化/null 信息处理/null 信息学/null 信息战/null 信息技术/null 信息时代/null 信息社会/null 信息管理/null 信息系统/null 信息素/null 信息论/null 信息资源/null 信息量/null 信息高速公路/null 信意/null 信手/null 信手拈来/null 信托/null 信报/null 信报财经新闻/null 信据/null 信政/null 信教/null 信服/null 信望/null 信札/null 信条/null 信标/null 信档/null 信步/null 信汇/null 信然/null 信物/null 信瓤儿/null 信用/null 信用卡/null 信用危机/null 信用合作社/null 信用度/null 信用状/null 信用等级/null 信用观察/null 信用证/null 信用证券/null 信用评等/null 信用评级/null 信用额/null 信用风险/null 信皮/null 信皮儿/null 信石/null 信神/null 信神者/null 信笔/null 信笔涂鸦/null 信笺/null 信笺簿/null 信筒/null 信管/null 信箱/null 信纸/null 信经/null 信者/null 信而有征/null 信誉/null 信誉第一/null 信誓/null 信誓旦旦/null 信访/null 信说/null 信贷/null 信贷危机/null 信贷员/null 信贷紧缩/null 信贷衍生产品/null 信贷资金/null 信贷违约掉期/null 信赏必罚/null 信赖/null 信赖区间/null 信赖者/null 信道/null 信里/null 信阳/null 信阳地区/null 信靠/null 信风/null 信马游缰/null 信鸽/null 俨如/null 俨如白昼/null 俨然/null 俩人/null 俩眼/null 俭以养廉/null 俭以防匮/null 俭则不缺/null 俭学/null 俭明/null 俭朴/null 俭用/null 俭省/null 俭素/null 俭约/null 俭腹/null 俭薄/null 修业/null 修习/null 修书/null 修了/null 修仙/null 修会/null 修修/null 修光/null 修养/null 修函/null 修到/null 修剪/null 修剪者/null 修图/null 修堤/null 修士/null 修复/null 修复一新/null 修复者/null 修女/null 修好/null 修定/null 修建/null 修心养性/null 修性/null 修成/null 修房/null 修护/null 修指/null 修指甲/null 修描/null 修撰/null 修改/null 修改意见/null 修改稿/null 修改草案/null 修改量/null 修整/null 修文/null 修文偃武/null 修旧/null 修旧利废/null 修明/null 修期/null 修枝/null 修桥/null 修桥补路/null 修正/null 修正主义/null 修正案/null 修正稿/null 修正者/null 修武/null 修水/null 修水利/null 修治/null 修浚/null 修炼/null 修炼成仙/null 修理/null 修理厂/null 修理工/null 修理者/null 修理行业/null 修盖/null 修睦/null 修短/null 修禊/null 修筑/null 修练/null 修编/null 修缮/null 修缮一新/null 修缮者/null 修罗/null 修脚/null 修脸/null 修船/null 修葺/null 修行/null 修行人/null 修行在个人/null 修补/null 修补匠/null 修补者/null 修表/null 修规/null 修订/null 修订历史/null 修订本/null 修订版/null 修订稿/null 修订者/null 修词/null 修读/null 修起/null 修路/null 修身/null 修身养性/null 修身齐家/null 修车/null 修辞/null 修辞学/null 修辞格/null 修过/null 修造/null 修造厂/null 修道/null 修道会/null 修道士/null 修道张/null 修道院/null 修配/null 修长/null 修院/null 修面/null 修鞋/null 修鞋匠/null 修音/null 修饰/null 修饰话/null 修饰语/null 修饰边幅/null 修齐/null 修龄/null 俯下/null 俯仰/null 俯仰之间/null 俯仰无愧/null 俯仰由人/null 俯伏/null 俯冲/null 俯卧/null 俯卧撑/null 俯在/null 俯垂/null 俯就/null 俯拾即是/null 俯拾地芥/null 俯拾皆是/null 俯拾青紫/null 俯泳/null 俯看/null 俯瞰/null 俯瞰图/null 俯瞰摄影/null 俯街/null 俯视/null 俯视图/null 俯览/null 俯角/null 俯赐/null 俯身/null 俯首/null 俯首倾耳/null 俯首听命/null 俯首帖耳/null 俯首称臣/null 俯首贴耳/null 俱乐/null 俱乐部/null 俱佳/null 俱全/null 俱兴/null 俱利/null 俱到/null 俱在/null 俱备/null 俱收并蓄/null 俳优/null 俳句/null 俳谐/null 俸恤/null 俸禄/null 俸给/null 俸躬/null 俸钱/null 俸银/null 俺们/null 俾使/null 俾倪/null 俾夜作昼/null 俾斯麦/null 俾昼作夜/null 俾格米/null 俾路支/null 俾路支省/null 倍于/null 倍儿/null 倍儿棒/null 倍减/null 倍加/null 倍受/null 倍受尊敬/null 倍受欢迎/null 倍受鼓舞/null 倍塔/null 倍塔射线/null 倍塔粒子/null 倍增/null 倍增器/null 倍感/null 倍数/null 倍率/null 倍足类/null 倍足纲/null 倍道兼行/null 倍道兼进/null 倍频/null 倍频器/null 倏地/null 倏忽/null 倏来忽往/null 倏然/null 倒三颠四/null 倒下/null 倒不如/null 倒买倒卖/null 倒了/null 倒于/null 倒仓/null 倒仰儿/null 倒伏/null 倒休/null 倒位/null 倒像/null 倒入/null 倒写/null 倒冠落佩/null 倒凤颠鸾/null 倒出/null 倒刺/null 倒卖/null 倒卧/null 倒卵形/null 倒去/null 倒反/null 倒叙/null 倒台/null 倒吊蜡烛/null 倒嗓/null 倒噍/null 倒嚼/null 倒四颠三/null 倒回/null 倒在/null 倒地/null 倒坍/null 倒塌/null 倒头/null 倒好儿/null 倒屐相迎/null 倒屐而迎/null 倒屐迎宾/null 倒山倾海/null 倒帐/null 倒帖/null 倒带/null 倒序/null 倒座儿/null 倒开/null 倒弄/null 倒彩/null 倒彩声/null 倒影/null 倒忙/null 倒悬/null 倒悬之危/null 倒悬之急/null 倒悬之苦/null 倒戈/null 倒戈卸甲/null 倒扁/null 倒手/null 倒打/null 倒打一耙/null 倒扣/null 倒把/null 倒把投机/null 倒抽/null 倒抽一口气/null 倒拨/null 倒持泰阿/null 倒挂/null 倒挤/null 倒换/null 倒推/null 倒插/null 倒插门/null 倒放/null 倒数/null 倒映/null 倒春寒/null 倒是/null 倒替/null 倒有/null 倒板/null 倒枕捶床/null 倒果为因/null 倒栽/null 倒栽葱/null 倒档/null 倒楣/null 倒槽/null 倒毙/null 倒注口/null 倒注者/null 倒流/null 倒海/null 倒海反江/null 倒海移山/null 倒海翻江/null 倒满/null 倒灌/null 倒灶/null 倒爷/null 倒牙/null 倒班/null 倒相/null 倒睫/null 倒睫症/null 倒空/null 倒立/null 倒立像/null 倒竖/null 倒算/null 倒粪/null 倒绷孩儿/null 倒置/null 倒置干戈/null 倒翻/null 倒胃口/null 倒背如流/null 倒背手/null 倒背手儿/null 倒腾/null 倒苦水/null 倒茬/null 倒茶/null 倒落/null 倒薮/null 倒虹吸/null 倒蛋/null 倒行/null 倒行逆施/null 倒装/null 倒装句/null 倒裳索领/null 倒要/null 倒计时/null 倒读/null 倒象/null 倒败/null 倒账/null 倒贴/null 倒赔/null 倒踏门/null 倒车/null 倒车挡/null 倒轧/null 倒转/null 倒轮闸/null 倒载干戈/null 倒过儿/null 倒过来/null 倒运/null 倒退/null 倒逆/null 倒采/null 倒钩/null 倒链/null 倒锁/null 倒错/null 倒闭/null 倒阁/null 倒霉/null 倔头倔脑/null 倔巴/null 倔强/null 倘不/null 倘不如此/null 倘佯/null 倘使/null 倘或/null 倘有/null 倘未/null 倘来之物/null 倘然/null 倘能/null 倘能如此/null 倘若/null 候任/null 候光/null 候命/null 候场/null 候审/null 候教/null 候服玉衣/null 候机/null 候机厅/null 候机室/null 候机楼/null 候梯厅/null 候温/null 候爵/null 候粮/null 候缺/null 候船/null 候补/null 候补名单/null 候补委员/null 候诊/null 候诊室/null 候车/null 候车室/null 候选/null 候选人/null 候门如海/null 候领/null 候风地动仪/null 候驾/null 候鸟/null 倚仗/null 倚势挟权/null 倚墙/null 倚天/null 倚天屠龙记/null 倚官仗势/null 倚山/null 倚强凌弱/null 倚恃/null 倚望/null 倚栏望月/null 倚玉偎香/null 倚立/null 倚翠偎红/null 倚老/null 倚老卖老/null 倚草附木/null 倚财仗势/null 倚赖/null 倚重/null 倚门/null 倚门倚闾/null 倚门傍户/null 倚门卖俏/null 倚门卖笑/null 倚闾之望/null 倚靠/null 倚音/null 倚马可待/null 倜傥/null 倜傥不羁/null 倜傥不群/null 倜然/null 借与/null 借东风/null 借主/null 借书/null 借书单/null 借书证/null 借了/null 借予/null 借人/null 借代/null 借以/null 借位/null 借住/null 借余/null 借债/null 借债人/null 借光/null 借入/null 借入方/null 借减/null 借出/null 借刀杀人/null 借助/null 借助于/null 借势/null 借单/null 借单儿/null 借取/null 借口/null 借古喻今/null 借古讽今/null 借命/null 借喻/null 借垫/null 借增/null 借契/null 借字/null 借字儿/null 借宿/null 借寇兵赍盗粮/null 借尸还魂/null 借差/null 借帐/null 借得/null 借手除敌/null 借指/null 借据/null 借支/null 借故/null 借方/null 借方差额/null 借景抒情/null 借期/null 借机/null 借机报复/null 借条/null 借来/null 借款/null 借款人/null 借此/null 借此机会/null 借水行舟/null 借火/null 借用/null 借用人/null 借的/null 借端/null 借箸/null 借箸代筹/null 借给/null 借者/null 借而/null 借腹生子/null 借花/null 借花献佛/null 借记/null 借记卡/null 借词/null 借词推搪/null 借读/null 借调/null 借账/null 借贷/null 借贷资本/null 借资挹注/null 借过/null 借还/null 借道/null 借酒/null 借酒浇愁/null 借重/null 借鉴/null 借钱/null 借镜/null 借问/null 借阅/null 借领/null 借题/null 借题发挥/null 借风使船/null 倡仪/null 倡优/null 倡始/null 倡导/null 倡导者/null 倡条冶叶/null 倡狂/null 倡真/null 倡行/null 倡言/null 倡言者/null 倡议/null 倡议书/null 倡首/null 倥侗/null 倥偬/null 倦容/null 倦怠/null 倦意/null 倦感/null 倦游/null 倦鸟/null 倨傲/null 倩影/null 倩装/null 倪匡/null 倪嗣冲/null 倪柝声/null 倪桂珍/null 倭人/null 倭军/null 倭奴/null 倭寇/null 倭瓜/null 倭马亚王朝/null 倭黑猩猩/null 债主/null 债利/null 债券/null 债务/null 债务人/null 债务国/null 债务担保证券/null 债务证书/null 债务证券/null 债台/null 债台高筑/null 债息/null 债户/null 债权/null 债权人/null 债权国/null 债款/null 债物人/null 债额/null 值了/null 值勤/null 值域/null 值夜/null 值宿/null 值当/null 值得/null 值得一提/null 值得信赖/null 值得做/null 值得品味/null 值得敬佩/null 值得注意/null 值得注意的是/null 值得注视/null 值得称赞/null 值得要/null 值日/null 值日生/null 值星/null 值更/null 值此/null 值班/null 值班员/null 值班室/null 值表/null 值遇/null 值钱/null 倾佩/null 倾侧/null 倾倒/null 倾出/null 倾刻/null 倾刻间/null 倾力/null 倾动/null 倾卸/null 倾吐/null 倾吐胸臆/null 倾吐衷肠/null 倾向/null 倾向于/null 倾向性/null 倾听/null 倾听者/null 倾囊/null 倾国/null 倾国倾城/null 倾城/null 倾城倾国/null 倾家/null 倾家尽产/null 倾家竭产/null 倾家荡产/null 倾尽/null 倾巢/null 倾巢出动/null 倾巢来犯/null 倾巢而出/null 倾心/null 倾心吐胆/null 倾心尽力/null 倾慕/null 倾斜/null 倾斜仪/null 倾斜度/null 倾斜政策/null 倾斜着/null 倾斜角/null 倾斜面/null 倾服/null 倾桩/null 倾泄/null 倾注/null 倾泻/null 倾盆/null 倾盆大雨/null 倾盖/null 倾筐倒庋/null 倾箱倒箧/null 倾羡/null 倾耳/null 倾耳拭目/null 倾耳注目/null 倾耳细听/null 倾耳而听/null 倾肠倒腹/null 倾船/null 倾覆/null 倾角/null 倾诉/null 倾谈/null 倾轧/null 倾销/null 倾陷/null 倾颓/null 偃兵息甲/null 偃师/null 偃旗卧鼓/null 偃旗息鼓/null 偃武修文/null 偃蹇/null 偃鼠饮河/null 假中/null 假义/null 假人/null 假人像/null 假仁/null 假仁假义/null 假令/null 假以/null 假以辞色/null 假作/null 假使/null 假借/null 假借义/null 假借名义/null 假借字/null 假假/null 假假若是/null 假像/null 假充/null 假公/null 假公济私/null 假冒/null 假冒伪劣/null 假冒品/null 假冒者/null 假分数/null 假列/null 假力于人/null 假劣/null 假动作/null 假发/null 假名/null 假吏/null 假否定句/null 假品/null 假哭/null 假哭者/null 假唱/null 假善人/null 假嗓/null 假嗓子/null 假声/null 假大空/null 假如/null 假娘/null 假子/null 假定/null 假定者/null 假寐/null 假小子/null 假山/null 假币/null 假帐/null 假性/null 假性近视/null 假恶丑/null 假情假义/null 假情报/null 假想/null 假想敌/null 假惺惺/null 假意/null 假慈悲/null 假戏/null 假戏真做/null 假戏真唱/null 假手/null 假手于人/null 假托/null 假扣/null 假扮/null 假报告/null 假招子/null 假拱/null 假撇清/null 假支票/null 假日/null 假期/null 假条/null 假果/null 假根/null 假案/null 假植/null 假正经/null 假死/null 假泣/null 假漆/null 假牙/null 假珠宝/null 假的/null 假皮/null 假相/null 假眼/null 假睡/null 假票/null 假科学/null 假笑/null 假绅士/null 假而/null 假肢/null 假肯定句/null 假胡子/null 假腿/null 假芫茜/null 假若/null 假药/null 假蓝/null 假藉/null 假虎张威/null 假装/null 假言判断/null 假誓/null 假设/null 假设语气/null 假证/null 假证件/null 假词叠词/null 假话/null 假说/null 假象/null 假象牙/null 假货/null 假足/null 假途灭虢/null 假造/null 假道/null 假道伐虢/null 假道学/null 假释/null 假释犯/null 假钞/null 假面/null 假面具/null 假面剧/null 假面舞/null 假面舞会/null 假音/null 假高音/null 偌大/null 偎依/null 偎傍/null 偎抱/null 偎着/null 偎红依翠/null 偎香依玉/null 偏上/null 偏下/null 偏不/null 偏了/null 偏于/null 偏低/null 偏信/null 偏信则暗/null 偏倚/null 偏偏/null 偏僻/null 偏僻处/null 偏光/null 偏光器/null 偏光计/null 偏光镜/null 偏关/null 偏劳/null 偏南/null 偏压/null 偏厦/null 偏口鱼/null 偏右/null 偏向/null 偏听/null 偏听偏信/null 偏坠/null 偏多/null 偏大/null 偏头痛/null 偏好/null 偏安/null 偏宕/null 偏宠/null 偏宽/null 偏将/null 偏小/null 偏少/null 偏左/null 偏巧/null 偏差/null 偏差距离/null 偏师/null 偏序/null 偏废/null 偏待/null 偏微分/null 偏微分方程/null 偏心/null 偏心率/null 偏心眼/null 偏心矩/null 偏心轮/null 偏态/null 偏房/null 偏才/null 偏执/null 偏执型/null 偏执狂/null 偏护/null 偏振/null 偏振光/null 偏振波/null 偏振片/null 偏斜/null 偏方/null 偏旁/null 偏松/null 偏极/null 偏极化/null 偏极滤光镜/null 偏极镜/null 偏析/null 偏枯/null 偏正/null 偏正式合成词/null 偏歪/null 偏殿/null 偏注/null 偏流/null 偏滑/null 偏激/null 偏爱/null 偏狭/null 偏生/null 偏疼/null 偏瘫/null 偏离/null 偏私/null 偏科/null 偏移/null 偏移量/null 偏窄/null 偏紧/null 偏置/null 偏置电流/null 偏置电阻/null 偏航/null 偏衫/null 偏袒/null 偏西/null 偏要/null 偏见/null 偏角/null 偏距/null 偏转/null 偏转线圈/null 偏转角/null 偏轻/null 偏辞/null 偏远/null 偏邪不正/null 偏重/null 偏重于/null 偏锋/null 偏门/null 偏颇/null 偏题/null 偏食/null 偏高/null 偕同/null 偕老/null 偕行/null 做一天和尚/null 做上/null 做不到/null 做东/null 做为/null 做主/null 做买卖/null 做事/null 做亲/null 做人/null 做人家/null 做人情/null 做伴/null 做伴儿/null 做作/null 做假/null 做假账/null 做准备工作/null 做出/null 做到/null 做功/null 做功夫/null 做又是另外一回事/null 做响/null 做坏/null 做坏事/null 做声/null 做大/null 做女/null 做好/null 做好事/null 做好人/null 做好做歹/null 做媒/null 做媚眼/null 做学问/null 做完/null 做官/null 做客/null 做寿/null 做小/null 做小伏低/null 做工/null 做工作/null 做工夫/null 做市商/null 做广告/null 做广告宣传/null 做庄/null 做弄/null 做弊/null 做张做势/null 做张做智/null 做张做致/null 做得好/null 做得成/null 做戏/null 做成/null 做手/null 做手势/null 做手脚/null 做操/null 做文章/null 做早操/null 做样/null 做梦/null 做歉做好/null 做法/null 做活/null 做活儿/null 做派/null 做满月/null 做爱/null 做牌/null 做牛做马/null 做生意/null 做生日/null 做生活/null 做白日梦/null 做眉做眼/null 做眼/null 做眼色/null 做着/null 做礼拜/null 做祷告/null 做笑/null 做算术/null 做绝/null 做脸/null 做菜/null 做裁缝/null 做记号/null 做诗/null 做贼/null 做贼心虚/null 做起/null 做针线/null 做错/null 做题/null 做饭/null 做饭菜/null 做鬼/null 做鬼脸/null 做鸡/null 做鸭/null 停下/null 停下来/null 停业/null 停业整顿/null 停了/null 停云落月/null 停产/null 停付/null 停住/null 停俸/null 停刊/null 停办/null 停匀/null 停发/null 停员/null 停在/null 停妥/null 停学/null 停尸房/null 停工/null 停工待料/null 停建/null 停当/null 停征/null 停息/null 停战/null 停战日/null 停手/null 停拨/null 停指/null 停损单/null 停损点/null 停掉/null 停摆/null 停播/null 停放/null 停机/null 停机场/null 停机坪/null 停机库/null 停板制度/null 停柩/null 停歇/null 停止/null 停止工作/null 停止损失/null 停止者/null 停止词/stopword 停步/null 停水/null 停泊/null 停泊处/null 停泊所/null 停泊税/null 停泊费/null 停滞/null 停滞不前/null 停火/null 停火协议/null 停火线/null 停灵/null 停用/null 停电/null 停留/null 停留在/null 停留时间/null 停盘/null 停着/null 停站/null 停缴/null 停职/null 停职检查/null 停航/null 停著/null 停薪/null 停薪留职/null 停表/null 停话/null 停课/null 停车/null 停车位置/null 停车场/null 停车库/null 停车站/null 停车计时器/null 停转/null 停辛伫苦/null 停酒止乐/null 停闭/null 停靠/null 停靠港/null 停靠站/null 停顿/null 停飞/null 停食/null 停驶/null 停驻/null 健保/null 健儿/null 健全/null 健全制度/null 健全法制/null 健在/null 健壮/null 健壮性/null 健将/null 健康/null 健康保险/null 健康受损/null 健康检查/null 健康法/null 健康状况/null 健康状态/null 健康食品/null 健忘/null 健忘症/null 健忘者/null 健怡可乐/null 健旺/null 健步/null 健步如飞/null 健硕/null 健立/null 健美/null 健美操/null 健美运动/null 健胃/null 健胃剂/null 健脾/null 健行/null 健诊/null 健谈/null 健身/null 健身室/null 健身房/null 健身术/null 健身馆/null 偶一/null 偶一为之/null 偶人/null 偶像/null 偶像剧/null 偶像化/null 偶函数/null 偶发/null 偶发事件/null 偶发性/null 偶合/null 偶因论/null 偶尔/null 偶感/null 偶数/null 偶极/null 偶校验/null 偶氮基/null 偶然/null 偶然事件/null 偶然性/null 偶然论/null 偶犯/null 偶生/null 偶笔/null 偶者/null 偶而/null 偶联反应/null 偶见/null 偶语/null 偶语弃市/null 偶蹄/null 偶蹄目/null 偶蹄类/null 偶遇/null 偷东摸西/null 偷乘/null 偷了/null 偷人/null 偷做/null 偷偷/null 偷偷做/null 偷偷干/null 偷偷摸摸/null 偷去/null 偷取/null 偷取者/null 偷吃/null 偷合取容/null 偷合苟容/null 偷听/null 偷听者/null 偷售/null 偷嘴/null 偷天换日/null 偷奸取巧/null 偷学/null 偷安/null 偷寒送暖/null 偷工/null 偷工减料/null 偷巧/null 偷带/null 偷得/null 偷心/null 偷情/null 偷惰/null 偷懒/null 偷懒者/null 偷手/null 偷拍/null 偷换/null 偷摸/null 偷有/null 偷梁换柱/null 偷欢/null 偷渡/null 偷渡者/null 偷漏/null 偷漏税/null 偷爱/null 偷牌/null 偷猎/null 偷猎者/null 偷生/null 偷盗/null 偷看/null 偷眼/null 偷着/null 偷税/null 偷税漏税/null 偷空/null 偷窃/null 偷窥/null 偷窥狂/null 偷笑/null 偷营/null 偷袭/null 偷走/null 偷越/null 偷过/null 偷运/null 偷逃/null 偷采/null 偷钱/null 偷闲/null 偷食/null 偷香窃玉/null 偷鸡不成蚀把米/null 偷鸡不着蚀把米/null 偷鸡摸狗/null 偷鸡盗狗/null 偻㑩/null 偻病/null 偾事/null 偿付/null 偿债/null 偿命/null 偿愿/null 偿本/null 偿欠/null 偿清/null 偿还/null 偿金/null 傀儡/null 傀儡戏/null 傀儡政权/null 傅会/null 傅作义/null 傅科摆/null 傅立叶/null 傅立叶变换/null 傅粉何郎/null 傅粉施朱/null 傅说/null 傅里叶/null 傈僳/null 傈僳族/null 傍亮/null 傍亮儿/null 傍人篱壁/null 傍人门户/null 傍午/null 傍大款/null 傍家儿/null 傍户而立/null 傍晌/null 傍晚/null 傍柳随花/null 傍水/null 傍花随柳/null 傍若无人/null 傍观者清/null 傍轨/null 傍边/null 傍边儿/null 傍近/null 傍门依户/null 傍靠/null 傍黑/null 傍黑儿/null 傢伙/null 傢俱/null 傢具/null 傣剧/null 傥来之物/null 傥荡/null 傧相/null 储位/null 储值卡/null 储入/null 储君/null 储处/null 储备/null 储备基金/null 储备物/null 储备粮/null 储备货币/null 储备量/null 储备金/null 储存/null 储存处/null 储币/null 储户/null 储气/null 储气罐/null 储水/null 储水塔/null 储水管/null 储水箱/null 储油/null 储油构造/null 储油罐/null 储油船/null 储物/null 储电量/null 储积/null 储精囊/null 储蓄/null 储蓄帐户/null 储蓄库/null 储蓄所/null 储蓄率/null 储蓄罐/null 储蓄金/null 储蓄银行/null 储蓄额/null 储藏/null 储藏室/null 储藏所/null 储藏箱/null 储运/null 储量/null 储金/null 储金会/null 傩戏/null 傩神/null 催乳/null 催乳激素/null 催交/null 催产/null 催人奋进/null 催人泪下/null 催促/null 催促者/null 催函/null 催办/null 催化/null 催化作用/null 催化剂/null 催化裂化/null 催化重整/null 催单/null 催反/null 催吐/null 催吐剂/null 催吐物/null 催告信/null 催命/null 催奶/null 催征/null 催情/null 催打/null 催折/null 催收/null 催汗/null 催泪/null 催泪剂/null 催泪大片/null 催泪弹/null 催泪物/null 催泪瓦斯/null 催熟/null 催生/null 催生婆/null 催生素/null 催眠/null 催眠剂/null 催眠士/null 催眠学/null 催眠曲/null 催眠术/null 催眠状态/null 催眠药/null 催租/null 催税/null 催肥/null 催肥剂/null 催芽/null 催讨/null 催证/null 催请/null 催谷/null 催赶/null 催逼/null 催青/null 傲世/null 傲人/null 傲岸/null 傲岸不群/null 傲慢/null 傲慢与偏见/null 傲斥/null 傲气/null 傲然/null 傲物/null 傲睨/null 傲睨一世/null 傲睨自若/null 傲立/null 傲自/null 傲视/null 傲贤慢士/null 傲雪凌霜/null 傲雪欺霜/null 傲霜/null 傲骨/null 傻不愣登/null 傻乎乎/null 傻乐/null 傻了/null 傻事/null 傻劲/null 傻劲儿/null 傻呀/null 傻呵呵/null 傻大/null 傻大个/null 傻大个儿/null 傻头傻脑/null 傻子/null 傻孩/null 傻屄/null 傻帽/null 傻帽儿/null 傻干/null 傻气/null 傻瓜/null 傻的/null 傻眼/null 傻笑/null 傻蛋/null 傻话/null 傻逼/null 傻里傻气/null 傻B/null 像上/null 像乞丐/null 像人/null 像册/null 像发疯/null 像图/null 像处女/null 像大人/null 像天/null 像女王/null 像奶油/null 像差/null 像底/null 像座/null 像形/null 像形字/null 像征/null 像征性/null 像戏剧/null 像打雷/null 像是/null 像术/null 像机/null 像样/null 像泥/null 像煞有介事/null 像爬虫/null 像片/null 像片簿/null 像狗/null 像王子/null 像用/null 像男人/null 像画/null 像皮/null 像神/null 像章/null 像素/null 像纸/null 像要/null 像话/null 像谜般/null 像貌/null 像这样/null 像银/null 僚佐/null 僚属/null 僚机/null 僧人/null 僧众/null 僧伽/null 僧侣/null 僧侣主义/null 僧俗/null 僧加罗语/null 僧多粥少/null 僧寺/null 僧尼/null 僧帽/null 僧帽猴/null 僧徒/null 僧服/null 僧职/null 僧衣/null 僧袍/null 僧院/null 僧面/null 僬侥/null 僬僬/null 僭主/null 僭主政治/null 僭越/null 僮仆/null 僮族/null 僳族/null 僵住/null 僵住症/null 僵化/null 僵卧/null 僵固性/null 僵尸/null 僵尸网络/null 僵局/null 僵持/null 僵持不下/null 僵死/null 僵痛/null 僵直/null 僵硬/null 僵蚕/null 僻地/null 僻壤/null 僻处/null 僻巷/null 僻径/null 僻远/null 僻道/null 僻陋/null 僻静/null 儆戒/null 儆猴/null 儆百/null 儇薄/null 儋县/null 儋州/null 儒勒・凡尔纳/null 儒医/null 儒墨/null 儒士/null 儒学/null 儒家/null 儒家思想/null 儒将/null 儒教/null 儒术/null 儒林/null 儒林外史/null 儒生/null 儒者/null 儒艮/null 儒道/null 儒雅/null 儿书/null 儿人/null 儿们/null 儿俩/null 儿化/null 儿化韵/null 儿去/null 儿啊/null 儿女/null 儿女之情/null 儿女心肠/null 儿女情多/null 儿女情长/null 儿女英雄传/null 儿媳/null 儿媳妇/null 儿媳妇儿/null 儿子/null 儿子般/null 儿孙/null 儿戏/null 儿手/null 儿时/null 儿曹/null 儿歌/null 儿皇帝/null 儿科/null 儿科学/null 儿童/null 儿童乐园/null 儿童团/null 儿童基金会/null 儿童心理学/null 儿童文学/null 儿童权利公约/null 儿老/null 儿茶/null 儿茶酚/null 儿语/null 儿车/null 儿音/null 儿马/null 兀傲/null 兀兀/null 兀凳/null 兀秃/null 兀立/null 兀自/null 兀臬/null 兀鹫/null 兀鹰/null 允准/null 允可/null 允宜/null 允当/null 允执其中/null 允执厥中/null 允文允武/null 允洽/null 允许/null 允诺/null 元世祖/null 元书纸/null 元代/null 元件/null 元元本本/null 元军/null 元凶/null 元勋/null 元化/null 元古代/null 元古宙/null 元古界/null 元古纪/null 元史/null 元器件/null 元坝/null 元坝区/null 元夜/null 元太祖/null 元子/null 元宝/null 元宝区/null 元宝山/null 元宝山区/null 元宝枫/null 元山/null 元山市/null 元帅/null 元年/null 元恶/null 元恶大奸/null 元恶大憝/null 元戎/null 元方季方/null 元日/null 元曲/null 元曲四大家/null 元月/null 元月份/null 元朗/null 元朗市/null 元朝/null 元末/null 元末明初/null 元桌/null 元氏/null 元气/null 元江县/null 元祖/null 元神/null 元素/null 元素周期表/null 元素符号/null 元老/null 元老院/null 元语言/null 元语言学意识/null 元语言能力/null 元谋/null 元谋猿人/null 元配/null 元针/null 元钉/null 元长/null 元长乡/null 元阳/null 元雅/null 元青/null 元音/null 元音和谐/null 元音失读/null 元食赘行/null 元首/null 元麦/null 元龙/null 元龙高卧/null 兄友弟恭/null 兄台/null 兄妹/null 兄嫂/null 兄弟/null 兄弟会/null 兄弟党/null 兄弟姐妹/null 兄弟民族/null 兄弟般/null 兄弟阋墙/null 兄死弟及/null 兄终弟及/null 兄肥弟瘦/null 兄长/null 充以/null 充任/null 充份/null 充作/null 充值/null 充值卡/null 充做/null 充公/null 充其量/null 充军/null 充分/null 充分发挥/null 充分就业/null 充分考虑/null 充发/null 充塞/null 充填/null 充填因数/null 充填物/null 充大/null 充好/null 充实/null 充当/null 充当先锋/null 充抵/null 充数/null 充斥/null 充栋汗牛/null 充气/null 充气灯泡/null 充气船/null 充气设备/null 充氧/null 充水/null 充沛/null 充溢/null 充满/null 充满信心/null 充满希望/null 充满敌意/null 充满活力/null 充满生机/null 充满着/null 充满阳光/null 充电/null 充电器/null 充畅/null 充盈/null 充磁/null 充类至尽/null 充耳/null 充耳不闻/null 充血/null 充血性/null 充裕/null 充要条件/null 充足/null 充足理由律/null 充车/null 充顶/null 充饥/null 充饥止渴/null 充饥画饼/null 兆伏/null 兆位/null 兆兆/null 兆周/null 兆多/null 兆头/null 兆字节/null 兆欧/null 兆欧表/null 兆瓦/null 兆瓦特/null 兆电子伏/null 兆赫/null 兆赫兹/null 先下手为强/null 先不/null 先不先/null 先世/null 先为/null 先主/null 先买/null 先买权/null 先于/null 先亡/null 先交/null 先享受后付款/null 先享后付/null 先人/null 先人后己/null 先付/null 先令/null 先以/null 先传/null 先使/null 先例/null 先倾/null 先兆/null 先入/null 先入为主/null 先入之见/null 先公/null 先公后私/null 先写/null 先决/null 先决条件/null 先决问题/null 先出/null 先别/null 先到/null 先到先得/null 先前/null 先加/null 先务之急/null 先占/null 先占据/null 先占满/null 先占领/null 先发/null 先发制人/null 先取/null 先吃/null 先同/null 先后/null 先后顺序/null 先向/null 先君/null 先哲/null 先在/null 先声/null 先声后实/null 先声夺人/null 先大母/null 先天/null 先天下之忧而忧/null 先天不足/null 先天性/null 先天性免疫/null 先天性缺陷/null 先天愚型/null 先天论/null 先头/null 先头部队/null 先妣/null 先容/null 先富起来/null 先导/null 先尝/null 先师/null 先帝/null 先帝遗诏/null 先征/null 先后/null 先得/null 先忧后乐/null 先意承志/null 先慈/null 先我着鞭/null 先手/null 先抓/null 先按/null 先提/null 先搞/null 先斩后奏/null 先斩后闻/null 先斩后奏/null 先明/null 先是/null 先期/null 先期录音/null 先机/null 先来/null 先来后到/null 先查/null 先死/null 先母/null 先民/null 先汉/null 先河/null 先烈/null 先父/null 先王/null 先王之乐/null 先王之政/null 先王之道/null 先生/null 先生们/null 先用/null 先由/null 先皇/null 先看/null 先睹为快/null 先知/null 先知先觉/null 先礼/null 先礼后兵/null 先祖/null 先秦/null 先秦时代/null 先端/null 先纳/null 先给/null 先自隗始/null 先花后果/null 先行/null 先行后闻/null 先行官/null 先行者/null 先要/null 先见/null 先见之明/null 先见者/null 先觉/null 先觉先知/null 先觉者/null 先让/null 先试/null 先贤/null 先走/null 先躯/null 先躯者/null 先辈/null 先达/null 先过/null 先进/null 先进个人/null 先进事迹/null 先进性/null 先进武器/null 先进水平/null 先进集体/null 先述权/null 先遣/null 先遣队/null 先销/null 先锋/null 先锋团/null 先锋队/null 先难后获/null 先鞭/null 先驱/null 先驱者/null 先驱蝼蚁/null 先验/null 先验唯心主义/null 先验性/null 先验论/null 光下/null 光临/null 光临惠顾/null 光二极管/null 光亮/null 光亮度/null 光伏/null 光伏器件/null 光信号/null 光儿/null 光光/null 光冲量/null 光刻/null 光刻胶/null 光前绝后/null 光前耀后/null 光前裕后/null 光功率/null 光动嘴/null 光化作用/null 光化学/null 光化学烟雾/null 光化度/null 光化性/null 光华/null 光卤石/null 光压/null 光发送器/null 光合/null 光合作用/null 光听/null 光圈/null 光坦/null 光复/null 光复乡/null 光复会/null 光复旧京/null 光复旧物/null 光大/null 光天/null 光天之下/null 光天化日/null 光头/null 光子/null 光学/null 光学仪器/null 光学字符识别/null 光学家/null 光学录音/null 光学显微镜/null 光学玻璃/null 光宗耀祖/null 光宠/null 光密媒质/null 光导/null 光导管/null 光导纤维/null 光射线/null 光山/null 光州/null 光州市/null 光州广域市/null 光巴/null 光帘/null 光带/null 光年/null 光度/null 光度计/null 光弹/null 光彩/null 光彩夺目/null 光彩照人/null 光影/null 光影效/null 光怪陆离/null 光感/null 光感应/null 光或热/null 光所/null 光拴/null 光接收器/null 光控/null 光敏/null 光敏塑料/null 光敏电阻/null 光斑/null 光明/null 光明新区/null 光明日报/null 光明星/null 光明正大/null 光明磊落/null 光明节/null 光明面/null 光是/null 光晕/null 光景/null 光机/null 光杆/null 光杆儿/null 光杆司令/null 光材料/null 光束/null 光板/null 光板儿/null 光柱/null 光栅/null 光标/null 光检测器/null 光棍/null 光棍儿/null 光棍节/null 光槃/null 光气/null 光波/null 光波长/null 光泽/null 光洁/null 光洁度/null 光洋/null 光测/null 光润/null 光源/null 光溜/null 光溜溜/null 光滑/null 光滑面/null 光漆/null 光火/null 光灵/null 光热/null 光焰/null 光焰万丈/null 光照/null 光爆/null 光片/null 光环/null 光球/null 光电/null 光电二极管/null 光电子/null 光电效应/null 光电显微镜/null 光电池/null 光电流/null 光电管/null 光电计数器/null 光疏媒质/null 光疗/null 光盘/null 光盘驱动器/null 光着/null 光碟/null 光碟机/null 光碟片/null 光磁/null 光磁碟/null 光磁碟机/null 光禄勋/null 光禄大夫/null 光秃/null 光秃秃/null 光笔/null 光纤/null 光纤分布式数据介面/null 光纤分布数据接口/null 光纤分散式资料介面/null 光纤接口/null 光纤电缆/null 光纤衰减/null 光纤通信/null 光线/null 光绪/null 光绪帝/null 光缆/null 光耀/null 光耀门楣/null 光能/null 光能合成/null 光脚/null 光芒/null 光芒万丈/null 光荣/null 光荣义务/null 光荣任务/null 光荣传统/null 光荣榜/null 光荣称号/null 光荣革命/null 光蛋/null 光说不做/null 光说不练/null 光谱/null 光谱仪/null 光谱分析/null 光谱图/null 光谱学/null 光谱线/null 光赤/null 光趟/null 光轴/null 光辉/null 光辉灿烂/null 光辐射/null 光通信/null 光通量/null 光速/null 光采/null 光量/null 光量子/null 光闪闪/null 光阳/null 光阴/null 光阴似箭/null 光阴如电/null 光阴如箭/null 光面/null 光面内质网/null 光顾/null 光风霁月/null 光饰/null 光驱/null 光鲜/null 克东/null 克丝钳子/null 克人/null 克什克腾/null 克什米尔/null 克仑特罗/null 克俭/null 克俭克勤/null 克分子/null 克分子浓度/null 克分子量/null 克利夫兰/null 克利斯朵夫/null 克制/null 克劳/null 克劳修斯/null 克劳德/null 克劳斯/null 克劳福德/null 克勒/null 克勤克俭/null 克化/null 克原子/null 克基拉岛/null 克复/null 克娄巴特拉/null 克孜勒苏/null 克孜勒苏地区/null 克孜勒苏柯尔克孜自治州/null 克孜勒苏河/null 克孜尔千佛洞/null 克孜尔尕哈/null 克孜尔尕哈烽火台/null 克尔白/null 克尽厥职/null 克山/null 克山病/null 克己/null 克己复礼/null 克己奉公/null 克当一面/null 克当量/null 克扣/null 克拉/null 克拉克/null 克拉夫丘克/null 克拉斯诺亚尔斯克/null 克拉斯诺达尔/null 克拉斯金诺/null 克拉玛依/null 克拉玛依区/null 克拉科夫/null 克拉科夫起义/null 克敌/null 克敌制胜/null 克文/null 克星/null 克服/null 克服困难/null 克服缺点/null 克朗/null 克朗代克/null 克期/null 克林姆/null 克林姆酱/null 克林德/null 克林霉素/null 克架/null 克格勃/null 克汀病/null 克沙奇病毒/null 克流感/null 克爱克威/null 克绍箕裘/null 克罗地亚/null 克罗地亚共和国/null 克罗地亚语/null 克罗埃西亚/null 克罗米/null 克罗诺斯/null 克耶族/null 克耶邦/null 克莉奥佩特拉/null 克莱/null 克莱因/null 克莱斯勒/null 克莱斯勒汽车公司/null 克莱蒙特/null 克莱顿/null 克蕾儿/null 克虏伯/null 克西/null 克赖斯特彻奇/null 克郎/null 克郎球/null 克里/null 克里丝蒂娃/null 克里奥尔语/null 克里姆林宫/null 克里斯托弗/null 克里斯汀・贝尔/null 克里斯蒂安/null 克里斯蒂安松/null 克里普斯/null 克里木/null 克里木半岛/null 克里木战争/null 克里特/null 克里特岛/null 克里米亚/null 克里米亚会议/null 克里米亚战争/null 克隆/null 克隆人/null 克隆技术/null 克隆氏病/null 克难/null 克雅氏症/null 克雷伯氏菌属/null 克霉唑/null 克食/null 免不了/null 免不得/null 免为/null 免予/null 免于/null 免交/null 免付/null 免俗/null 免冠/null 免刑/null 免去/null 免去职务/null 免受/null 免受伤害/null 免复/null 免局/null 免开尊口/null 免役/null 免役税/null 免征/null 免得/null 免报/null 免持/null 免掉/null 免提/null 免收/null 免料/null 免烫/null 免疫/null 免疫力/null 免疫反应/null 免疫学/null 免疫应答/null 免疫性/null 免疫法/null 免疫系统/null 免疫针/null 免礼/null 免票/null 免租金/null 免税/null 免签/null 免纳/null 免罚/null 免罪/null 免职/null 免试/null 免课/null 免调/null 免谈/null 免责声明/null 免责条款/null 免贴/null 免费/null 免费搭车/null 免费者/null 免费软件/null 免赔/null 免赔条款/null 免还/null 免进/null 免遭/null 免邮资/null 免除/null 免验/null 免黜/null 兑付/null 兑取/null 兑回/null 兑奖/null 兑帐/null 兑成/null 兑换/null 兑换业/null 兑换券/null 兑换处/null 兑换率/null 兑款/null 兑现/null 兑酒/null 兔丝燕麦/null 兔儿/null 兔儿爷/null 兔唇/null 兔子/null 兔子不吃窝边草/null 兔子窝/null 兔尽狗烹/null 兔崽子/null 兔年/null 兔径/null 兔料/null 兔斯基/null 兔死狐悲/null 兔死狗烹/null 兔毛/null 兔爸/null 兔皮/null 兔类/null 兔肉/null 兔脯/null 兔脱/null 兔角龟毛/null 兔走乌飞/null 兔走鸟飞/null 兔起凫举/null 兔起鹘落/null 兕觥/null 兖州/null 党中央/null 党主席/null 党争/null 党人/null 党代会/null 党代表/null 党代表制/null 党八股/null 党内/null 党内外/null 党制/null 党办/null 党务/null 党务工作/null 党参/null 党史/null 党同伐异/null 党员/null 党和国家/null 党和政府/null 党团/null 党团员/null 党团组/null 党国/null 党在/null 党外/null 党外人士/null 党委/null 党委书记/null 党委会/null 党委制/null 党小组/null 党建/null 党徒/null 党徽/null 党心/null 党性/null 党总支/null 党报/null 党支部/null 党支部书记/null 党改/null 党政/null 党政军/null 党政机关/null 党旗/null 党校/null 党棍/null 党歌/null 党民/null 党派/null 党派性/null 党派集会/null 党的/null 党社/null 党票/null 党禁/null 党章/null 党籍/null 党纪/null 党纪国法/null 党纪处分/null 党纲/null 党组/null 党组书记/null 党组织/null 党群/null 党群关系/null 党羽/null 党藉/null 党证/null 党课/null 党费/null 党部/null 党锢/null 党阀/null 党项/null 党项族/null 党风/null 党风不正/null 党风好转/null 党风建设/null 党魁/null 党龄/null 兜儿/null 兜兜/null 兜兜裤儿/null 兜卖/null 兜售/null 兜圈/null 兜圈子/null 兜头/null 兜子/null 兜帽/null 兜底/null 兜抄/null 兜捕/null 兜揽/null 兜翻/null 兜老底兜鍪/null 兜肚/null 兜著/null 兜著走/null 兜里/null 兜鍪/null 兜销/null 兜风/null 兢兢/null 兢兢业业/null 兢兢翼翼/null 入不支出/null 入不敷出/null 入世/null 入主/null 入主出奴/null 入乡随俗/null 入于/null 入伍/null 入伍生/null 入户/null 入伏/null 入伙/null 入会/null 入会者/null 入住/null 入住率/null 入侵/null 入侵者/null 入党/null 入关/null 入内/null 入册/null 入冬/null 入出境/null 入列/null 入口/null 入口处/null 入口就化/null 入口网/null 入口页/null 入吾彀中/null 入味/null 入团/null 入围/null 入围者/null 入国问俗/null 入土/null 入土为安/null 入圣/null 入圣超凡/null 入地/null 入场/null 入场券/null 入场式/null 入场权/null 入场费/null 入垄/null 入城/null 入境/null 入境签证/null 入境证/null 入境问俗/null 入境问禁/null 入境随俗/null 入声/null 入夏/null 入夜/null 入学/null 入学率/null 入定/null 入室升堂/null 入室操戈/null 入寇/null 入寝/null 入射/null 入射点/null 入射线/null 入射角/null 入市/null 入帐/null 入席/null 入幕之宾/null 入库/null 入店/null 入座/null 入彀/null 入微/null 入情入理/null 入手/null 入托/null 入支/null 入教/null 入时/null 入春/null 入木三分/null 入村/null 入栈/null 入档/null 入梅/null 入梦/null 入樽/null 入款/null 入殓/null 入水/null 入洞/null 入流/null 入海/null 入海口/null 入涅/null 入港/null 入港税/null 入犯/null 入狱/null 入画/null 入盟/null 入眠/null 入眼/null 入睡/null 入社/null 入神/null 入禀/null 入窖/null 入站/null 入籍/null 入绪/null 入网/null 入耳/null 入联/null 入肉/null 入股/null 入药/null 入营/null 入贡/null 入账/null 入赘/null 入超/null 入迷/null 入选/null 入选者/null 入道/null 入镜/null 入门/null 入门书/null 入门课程/null 入闱/null 入阁/null 入队/null 入院/null 入风口/null 入骨/null 入魔/null 全不/null 全被/null 全不知/null 全世界/null 全世界人民/null 全世界无产者联合起来/null 全世界第一/null 全为/null 全乎/null 全乡/null 全书/null 全买/null 全交/null 全人/null 全人类/null 全仗绿叶扶/null 全仗绿叶扶持/null 全价/null 全份/null 全休/null 全优/null 全会/null 全体/null 全体人员/null 全体会议/null 全体成员/null 全信/null 全值/null 全光/null 全党/null 全党全军/null 全党全军全国/null 全党全军和全国/null 全党全国/null 全军/null 全军覆没/null 全军覆灭/null 全冻/null 全凭绿叶扶持/null 全分/null 全剧/null 全副/null 全副武装/null 全副精力/null 全力/null 全力以赴/null 全功能/null 全劳动力/null 全勤/null 全区/null 全南/null 全厂/null 全县/null 全反射/null 全同/null 全名/null 全向/null 全员/null 全员劳动合同制/null 全员劳动生产率/null 全员承包/null 全国/null 全国人大/null 全国人大会议/null 全国人大常委会/null 全国人民代表大会/null 全国人民代表大会常务委员会/null 全国代表大会/null 全国各地/null 全国大会党/null 全国性/null 全国民主联盟/null 全国运动会/null 全国鸟类学会/null 全场/null 全场一致/null 全垒打/null 全城/null 全境/null 全复/null 全天/null 全天候/null 全天候飞机/null 全夺/null 全套/null 全好/null 全始全终/null 全宇宙/null 全室/null 全家/null 全家人/null 全家福/null 全对/null 全对数/null 全尺寸/null 全局/null 全局性/null 全局模块/null 全局观念/null 全局语境/null 全屏/null 全屏幕/null 全岛/null 全州/null 全州市/null 全工/null 全市/null 全带/null 全席/null 全幅/null 全干/null 全年/null 全度音/null 全开/null 全异/null 全归/null 全形/null 全影/null 全心/null 全心全意/null 全息/null 全息图/null 全息术/null 全息照相/null 全意/null 全感/null 全所/null 全才/null 全托/null 全拼/null 全数/null 全文/null 全文检索/null 全斗焕/null 全新/null 全新世/null 全新纪/null 全新统/null 全方/null 全方位/null 全方向/null 全无/null 全无准备/null 全无心肝/null 全无忌惮/null 全无是处/null 全日/null 全日制/null 全日制学校/null 全日空/null 全时工作/null 全时间/null 全是/null 全景/null 全月/null 全有/null 全本/null 全权/null 全权代表/null 全权大使/null 全村/null 全校/null 全检/null 全椒/null 全歼/null 全民/null 全民义务植树日/null 全民企业/null 全民公决/null 全民性/null 全民所有制/null 全民投票/null 全民教育/null 全民族/null 全民皆兵/null 全民英检/null 全活/null 全清/null 全港/null 全满/null 全然/null 全然不同/null 全然不知/null 全然不顾/null 全熟/null 全片/null 全班/null 全球/null 全球位置测定系统/null 全球化/null 全球卫星导航系统/null 全球发展中心/null 全球变暖/null 全球定位系统/null 全球性/null 全球暖化/null 全球气候/null 全球气候升温/null 全球气候变暖/null 全球资讯网/null 全球通/null 全生育期/null 全由/null 全留/null 全盘/null 全盘托出/null 全盘西化/null 全盛/null 全盛期/null 全省/null 全看/null 全瞎/null 全知/null 全知全能/null 全码/null 全社会/null 全神/null 全神倾注/null 全神灌注/null 全神贯注/null 全票/null 全科/null 全称/null 全程/null 全稿/null 全等/null 全等图形/null 全等形/null 全篇/null 全线/null 全线崩溃/null 全网/null 全罗北道/null 全罗南道/null 全罗道/null 全美/null 全美国/null 全美广播公司/null 全职/null 全聚德/null 全胜/null 全能/null 全能冠军/null 全能运动/null 全脂/null 全臣/null 全自动/null 全般/null 全色/null 全色片/null 全节流/null 全范围/null 全蚀/null 全行/null 全衡/null 全要/null 全规模/null 全角/null 全读/null 全谷物/null 全豹/null 全貌/null 全资附属公司/null 全赢/null 全跏坐/null 全路/null 全身/null 全身中毒性毒剂/null 全身心/null 全身远害/null 全身麻醉/null 全轮/null 全轮驱动/null 全过程/null 全运会/null 全选/null 全速/null 全部/null 全都/null 全银幕/null 全镇/null 全长/null 全长度/null 全间/null 全队/null 全院/null 全险/null 全集/null 全靠/null 全面/null 全面性/null 全面推广/null 全面禁止/null 全面禁止核试验条约/null 全面质量管理/null 全音/null 全音域/null 全音符/null 全音阶/null 全额/null 全食/null 全麦/null 全麻/null 八一/null 八一三事变/null 八一五/null 八一南昌起义/null 八一建军节/null 八一队/null 八七/null 八七会议/null 八万/null 八万大藏经/null 八下里/null 八两/null 八两半斤/null 八个/null 八中全会/null 八九不离十/null 八二三炮战/null 八二丹/null 八五/null 八五期间/null 八五规划/null 八人/null 八亿/null 八仙/null 八仙桌/null 八仙湖/null 八仙过海/null 八会穴/null 八位元/null 八佰伴/null 八倍/null 八倍体/null 八八/null 八八六/null 八公山/null 八公山区/null 八冲/null 八分/null 八分之一/null 八分之七/null 八分之三/null 八分之二/null 八分之五/null 八分之六/null 八分之四/null 八分音符/null 八十/null 八十一/null 八十七/null 八十万/null 八十三/null 八十个/null 八十九/null 八十二/null 八十五/null 八十人/null 八十八/null 八十六/null 八十四/null 八十天环游地球/null 八十岁/null 八十年/null 八十年代/null 八千/null 八千万/null 八卦/null 八卦拳/null 八卦掌/null 八卦教/null 八卦阵/null 八号/null 八哥/null 八哥儿/null 八哥狗/null 八国/null 八国联军/null 八块/null 八块腹肌/null 八大处/null 八大工业国组织/null 八婆/null 八字/null 八字宪法/null 八字帖儿/null 八字形/null 八字打开/null 八字方针/null 八字步/null 八字没一撇/null 八字眉/null 八字胡/null 八字胡须/null 八字脚/null 八字还没一撇/null 八字还没一撇儿/null 八宝/null 八宝丹/null 八宝山/null 八宝山革命公墓/null 八宝眼药/null 八宝粥/null 八宝菜/null 八宝饭/null 八宿/null 八小时/null 八小时工作制/null 八层/null 八届/null 八岐大蛇/null 八带鱼/null 八年/null 八度/null 八廓/null 八廓街/null 八开/null 八开纸/null 八弦琴/null 八德/null 八德市/null 八怪/null 八成/null 八戒/null 八折/null 八抬大轿/null 八拜之交/null 八斗之才/null 八方/null 八方呼应/null 八方支援/null 八旗/null 八旗制度/null 八旗子弟/null 八日/null 八时/null 八月/null 八月之光/null 八月份/null 八月节/null 八村/null 八条/null 八极拳/null 八楼/null 八次/null 八正道/null 八步/null 八步区/null 八段/null 八段锦/null 八法/null 八法拳/null 八点/null 八点半/null 八爪鱼/null 八王之乱/null 八珍汤/null 八疸/null 八疸身面黄/null 八百/null 八百万/null 八的/null 八目鳗/null 八类/null 八级工/null 八级工资制/null 八级风/null 八纲/null 八纲辨证/null 八美/null 八美乡/null 八股/null 八股文/null 八般头风/null 八节/null 八苦/null 八荣八耻/null 八行书/null 八角/null 八角床/null 八角形/null 八角枫/null 八角茴香/null 八角街/null 八角鼓/null 八路/null 八路军/null 八边/null 八边形/null 八达岭/null 八达通/null 八进制/null 八道/null 八道江/null 八道江区/null 八邦立国/null 八里/null 八里乡/null 八重奏/null 八门五花/null 八面/null 八面体/null 八面光/null 八面圆通/null 八面威风/null 八面威风睁/null 八面玲珑/null 八面见光/null 八面锋/null 八音/null 八音盒/null 八音节/null 八风/null 八风穴/null 公丈/null 公两/null 公主/null 公主岭/null 公主装/null 公举/null 公义/null 公之于众/null 公买公卖/null 公事/null 公事公办/null 公事包/null 公事房/null 公交/null 公交站/null 公交车/null 公交部门/null 公产/null 公亩/null 公人/null 公仆/null 公仔/null 公仔面/null 公份儿/null 公休/null 公休假日/null 公休日/null 公众/null 公众人物/null 公众意见/null 公众电信网路/null 公众集会/null 公会/null 公伤/null 公伤事故/null 公余/null 公使/null 公使馆/null 公例/null 公倍/null 公倍式/null 公倍数/null 公候/null 公债/null 公债券/null 公倾/null 公假/null 公允/null 公元/null 公元前/null 公充价值/null 公克/null 公公/null 公公正正/null 公共/null 公共事业/null 公共交换电话网路/null 公共交通/null 公共假期/null 公共关系/null 公共卫生/null 公共厕所/null 公共团体/null 公共场所/null 公共安全罪/null 公共开支/null 公共汽车/null 公共汽车站/null 公共秩序/null 公共积累/null 公共行政/null 公共设施/null 公共财产/null 公共道德/null 公共零点/null 公关/null 公关小姐/null 公决/null 公出/null 公函/null 公分/null 公切线/null 公判/null 公制/null 公制单位/null 公制支数/null 公办/null 公务/null 公务上/null 公务人员/null 公务制度/null 公务员/null 公务舱/null 公募/null 公勺/null 公升/null 公卖/null 公卿/null 公历/null 公厕/null 公厘/null 公司/null 公司会议/null 公司债/null 公司治理/null 公司法/null 公司理财/null 公吨/null 公听会/null 公听并观/null 公告/null 公因子/null 公因式/null 公因数/null 公园/null 公园小径效应/null 公国/null 公地/null 公地悲剧/null 公垂线/null 公堂/null 公墓/null 公处/null 公娼/null 公婆/null 公子/null 公子哥儿/null 公子王孙/null 公孙/null 公孙树/null 公孙起/null 公孙龙/null 公安/null 公安人员/null 公安厅/null 公安官员/null 公安局/null 公安工作/null 公安干警/null 公安战士/null 公安机关/null 公安部/null 公安部长/null 公安部队/null 公审/null 公室/null 公害/null 公家/null 公家机关/null 公寓/null 公寓大楼/null 公寓楼/null 公寸/null 公尺/null 公差/null 公布/null 公布于/null 公布于世/null 公布栏/null 公帑/null 公干/null 公干粉/null 公平/null 公平交易/null 公平合理/null 公平审判权/null 公平竞争/null 公平贸易/null 公府/null 公廨/null 公开/null 公开信/null 公开化/null 公开场合/null 公开审判/null 公开性/null 公开批评/null 公开指责/null 公开讨论会/null 公开赛/null 公开钥匙/null 公式/null 公式化/null 公式集/null 公引/null 公弛/null 公德/null 公德心/null 公心/null 公意/null 公愤/null 公房/null 公才公望/null 公投/null 公报/null 公报私仇/null 公担/null 公推/null 公撮/null 公敌/null 公教/null 公教人员/null 公文/null 公文书/null 公文包/null 公文旅行/null 公文袋/null 公斗/null 公斤/null 公断/null 公断人/null 公方/null 公族/null 公映/null 公有/null 公有制/null 公有化/null 公权/null 公格尔山/null 公案/null 公检/null 公检法/null 公款/null 公正/null 公正人/null 公母俩/null 公比/null 公民/null 公民义务/null 公民基本权利/null 公民投票/null 公民权/null 公民权利/null 公民权利和政治权利国际公约/null 公民自由/null 公民表决/null 公河/null 公法/null 公海/null 公演/null 公然/null 公然表示/null 公爵/null 公爵夫人/null 公爹/null 公牍/null 公牛/null 公物/null 公犬/null 公猪/null 公猫/null 公现/null 公理/null 公理法/null 公用/null 公用事业/null 公用交换电话网/null 公用电话/null 公用设施/null 公电/null 公畜/null 公益/null 公益事业/null 公益金/null 公石/null 公社/null 公社社员墙/null 公祭/null 公私/null 公私不分/null 公私两便/null 公私两济/null 公私交迫/null 公私兼顾/null 公私分明/null 公私合营/null 公秉/null 公积金/null 公称/null 公立/null 公立学校/null 公章/null 公筷/null 公粮/null 公约/null 公约数/null 公网/null 公署/null 公羊/null 公羊传/null 公羊春秋/null 公而忘私/null 公职/null 公职人员/null 公股/null 公营/null 公营企业/null 公营经济/null 公认/null 公议/null 公论/null 公设/null 公证/null 公证书/null 公证人/null 公证处/null 公证机关/null 公诉/null 公诉人/null 公诫/null 公诸/null 公诸于世/null 公诸于众/null 公诸同好/null 公费/null 公费医疗/null 公费旅游/null 公费生/null 公路/null 公路交通/null 公路网/null 公路自行车/null 公路赛/null 公路运输/null 公车/null 公转/null 公输/null 公道/null 公里/null 公里时/null 公钱/null 公门/null 公需/null 公顷/null 公馆/null 公馆乡/null 公马/null 公鸡/null 公鸭/null 六○六/null 六・二五战争/null 六・四/null 六一/null 六一儿童节/null 六一国际儿童节/null 六万/null 六三政变/null 六个/null 六个月/null 六个装/null 六中全会/null 六书/null 六二五事变/null 六亲/null 六亲不认/null 六亲无靠/null 六人/null 六亿/null 六仙桌/null 六价/null 六位/null 六便士/null 六倍/null 六六/null 六六六/null 六出奇计/null 六分/null 六分之一/null 六分之三/null 六分之二/null 六分之五/null 六分之四/null 六分仪/null 六分仪座/null 六十/null 六十一/null 六十七/null 六十万/null 六十三/null 六十个/null 六十九/null 六十二/null 六十五/null 六十人/null 六十倍/null 六十八/null 六十六/null 六十四/null 六十四万/null 六十四位元/null 六十四卦/null 六十岁/null 六十年/null 六十年代/null 六千/null 六卿/null 六号/null 六合/null 六合八法/null 六合区/null 六合彩/null 六味地黄丸/null 六四事件/null 六块腹肌/null 六大/null 六安/null 六安地区/null 六官/null 六家/null 六尘/null 六尺之孤/null 六尺长/null 六届/null 六年/null 六库/null 六库镇/null 六开/null 六开本/null 六弦琴/null 六所/null 六折/null 六指/null 六指儿/null 六方/null 六方最密堆积/null 六日/null 六日战争/null 六时/null 六月/null 六月份/null 六月起义/null 六月飞霜/null 六朝/null 六朝四大家/null 六朝时代/null 六朝金粉/null 六条/null 六根/null 六根清净/null 六次/null 六步格/null 六段/null 六氟化硫/null 六氟化铀/null 六法全书/null 六淫/null 六点/null 六环路/null 六甲/null 六甲乡/null 六畜/null 六畜不安/null 六畜兴旺/null 六百/null 六百万/null 六盘山/null 六盘山脉/null 六盘水/null 六碳糖/null 六神/null 六神不安/null 六神丸/null 六神无主/null 六级士官/null 六线形/null 六经/null 六脚/null 六脚乡/null 六腑/null 六色/null 六艺/null 六节诗/null 六行/null 六街三市/null 六角/null 六角形/null 六角括号/null 六角星/null 六角螺帽/null 六路/null 六轮/null 六边/null 六边形/null 六通四辟/null 六通四达/null 六道/null 六道轮回/null 六邪/null 六部/null 六重唱/null 六重奏/null 六镇起义/null 六问三推/null 六阳会首/null 六零/null 六零六/null 六面/null 六面体/null 六韬/null 六韬三略/null 六音/null 六马仰秣/null 六龟/null 六龟乡/null 兮兮/null 兰交/null 兰亭/null 兰克/null 兰博基尼/null 兰因絮果/null 兰坪/null 兰坪县/null 兰姆/null 兰姆打/null 兰姆达/null 兰姆酒/null 兰学/null 兰宝石/null 兰室/null 兰山/null 兰山区/null 兰屿/null 兰屿乡/null 兰崔玉折/null 兰州大学/null 兰开夏郡/null 兰开斯特/null 兰心蕙性/null 兰摧玉折/null 兰斯/null 兰斯洛特/null 兰新/null 兰新铁路/null 兰板/null 兰桂齐芳/null 兰溪/null 兰特/null 兰玉/null 兰科/null 兰章/null 兰考/null 兰舟/null 兰色/null 兰艾同焚/null 兰花/null 兰花指/null 兰芷之室/null 兰若/null 兰草/null 兰蔻/null 兰西/null 兰言/null 兰谱/null 兰迪斯/null 兰郑长成品油管道/null 兰郑长管道/null 兰闺/null 兰领/null 兰领工人/null 共为/null 共为唇齿/null 共乘/null 共事/null 共产/null 共产主义/null 共产主义人生观/null 共产主义者/null 共产主义者同盟/null 共产主义青年团/null 共产党/null 共产党人/null 共产党员/null 共产党和工人党情报局/null 共产党宣言/null 共产国际/null 共享/null 共享以太网络/null 共享函数库/null 共享带宽/null 共享库/null 共享程序库/null 共享者/null 共享计划/null 共享软体/null 共价/null 共价键/null 共党/null 共军/null 共创/null 共办/null 共勉/null 共匪/null 共发射极/null 共叙/null 共同/null 共同一致/null 共同体/null 共同利益/null 共同努力/null 共同基金/null 共同市场/null 共同性/null 共同海损/null 共同点/null 共同社/null 共同筛选/null 共同纲领/null 共同语/null 共同闸道介面/null 共和/null 共和党/null 共和党人/null 共和制/null 共和国/null 共和政体/null 共和派/null 共商/null 共商国是/null 共商大计/null 共图大计/null 共在/null 共基极/null 共处/null 共妻/null 共婚/null 共存/null 共存性/null 共居/null 共工/null 共庆/null 共床人/null 共度/null 共建/null 共建文明/null 共形/null 共性/null 共总/null 共患难/null 共愤/null 共振/null 共振器/null 共振板/null 共挽鹿东/null 共收/null 共有/null 共有化/null 共析/null 共栖/null 共模/null 共济/null 共激/null 共焦/null 共犯/null 共生/null 共生矿/null 共用/null 共用权/null 共知/null 共祝/null 共管/null 共约/null 共职/null 共聚/null 共聚反应/null 共聚物/null 共荣/null 共融/null 共行车道/null 共襄/null 共襄善举/null 共襄盛举/null 共计/null 共设/null 共识/null 共话/null 共谋/null 共谋罪/null 共谋者/null 共贺/null 共赢/null 共赴/null 共路/null 共轭/null 共轭不尽根/null 共轭作用/null 共轭复数/null 共轭根式/null 共轭点/null 共轭虚数/null 共达/null 共运/null 共进/null 共进会/null 共进早餐/null 共通/null 共通性/null 共需/null 共青团/null 共青团员/null 共青组织/null 共面/null 共餐/null 共餐青年团/null 共饮/null 共鸣/null 共鸣器/null 关上/null 关东/null 关东军/null 关东地震/null 关东糖/null 关中/null 关中地区/null 关中平原/null 关之琳/null 关乎/null 关书/null 关了/null 关于/null 关于此/null 关住/null 关停/null 关停并转/null 关健/null 关入/null 关公/null 关关/null 关关过/null 关关难过/null 关内/null 关切/null 关卡/null 关厂/null 关厢/null 关口/null 关在/null 关城/null 关塔纳摩/null 关塔那摩/null 关塔那摩湾/null 关塞/null 关境/null 关外/null 关头/null 关子/null 关山/null 关山镇/null 关岛/null 关岛大学/null 关岭/null 关岭县/null 关岭布依族苗族自治县/null 关帝庙/null 关店/null 关店歇业/null 关庙/null 关庙乡/null 关张/null 关征/null 关心/null 关心事/null 关心国家大事/null 关心群众/null 关心集体/null 关怀/null 关怀备至/null 关押/null 关掉/null 关文/null 关机/null 关栈/null 关栈费/null 关格/null 关汉卿/null 关注/null 关涉/null 关渡/null 关灯/null 关照/null 关爱/null 关白/null 关着/null 关碍/null 关税/null 关税与贸易总协定/null 关税同盟/null 关税国境/null 关税壁垒/null 关税率/null 关税自主运动/null 关税表/null 关窗/null 关站/null 关系/null 关系代名词/null 关系到/null 关系史/null 关系好/null 关系密切/null 关系式/null 关系户/null 关系正常化/null 关系甚钜/null 关系网/null 关系者/null 关系词/null 关紧/null 关羽/null 关联/null 关联公司/null 关节/null 关节囊/null 关节炎/null 关节腔/null 关节面/null 关著/null 关西/null 关西镇/null 关说/null 关贸/null 关贸总协定/null 关起/null 关起门来/null 关车/null 关进/null 关连/null 关金/null 关金圆/null 关键/null 关键字/null 关键性/null 关键时刻/null 关键词/null 关门/null 关门主义/null 关门大吉/null 关门弟子/null 关门打狗/null 关门捉贼/null 关门闭户/null 关闭/null 关闭者/null 关防/null 关隘/null 关颖珊/null 关饷/null 兴业/null 兴中会/null 兴义/null 兴之所至/null 兴云作雨/null 兴云作雾/null 兴云吐雾/null 兴云布雨/null 兴亡/null 兴亡继绝/null 兴产/null 兴仁/null 兴会/null 兴会淋漓/null 兴修/null 兴修水利/null 兴兵/null 兴兵动众/null 兴农/null 兴冲冲/null 兴凯刺鳑鲏/null 兴利除害/null 兴利除弊/null 兴办/null 兴化/null 兴叹/null 兴味/null 兴和/null 兴国/null 兴城/null 兴复不浅/null 兴头/null 兴头儿上/null 兴奋/null 兴奋剂/null 兴奋性/null 兴奋药/null 兴奋高潮/null 兴妖作孽/null 兴妖作怪/null 兴学/null 兴宁/null 兴宁区/null 兴安/null 兴安区/null 兴安岭/null 兴安运河/null 兴家立业/null 兴宾/null 兴宾区/null 兴尽/null 兴尽悲来/null 兴尽意阑/null 兴山/null 兴山区/null 兴工/null 兴师/null 兴师动众/null 兴师见罪/null 兴师问罪/null 兴平/null 兴平市/null 兴庆区/null 兴废/null 兴废存亡/null 兴废继绝/null 兴建/null 兴微继绝/null 兴文/null 兴无灭资/null 兴旺/null 兴旺发达/null 兴替/null 兴海/null 兴灭举废/null 兴灭继绝/null 兴犹未尽/null 兴盛/null 兴致/null 兴致勃勃/null 兴致勃发/null 兴致好/null 兴致索然/null 兴荣/null 兴衰/null 兴衰成败/null 兴衰荣辱/null 兴许/null 兴败/null 兴起/null 兴趣/null 兴邦/null 兴都库什山/null 兴都库仕/null 兴门/null 兴隆/null 兴隆台/null 兴隆台区/null 兴革/null 兴风/null 兴风作浪/null 兴高/null 兴高彩烈/null 兴高采烈/null 兵丁/null 兵不厌权/null 兵不厌诈/null 兵不血刃/null 兵临城下/null 兵书/null 兵乱/null 兵出无名/null 兵刃/null 兵制/null 兵力/null 兵卒/null 兵变/null 兵员/null 兵器/null 兵器工业/null 兵器工业部/null 兵器术/null 兵团/null 兵场/null 兵坑/null 兵士/null 兵多将广/null 兵学/null 兵家/null 兵家常事/null 兵工/null 兵工厂/null 兵差/null 兵库/null 兵库县/null 兵强马壮/null 兵役/null 兵役制度/null 兵役法/null 兵役等/null 兵微将寡/null 兵志/null 兵戈/null 兵戈扰攘/null 兵戈相见/null 兵戎/null 兵戎相见/null 兵操/null 兵无血刃/null 兵权/null 兵来将挡/null 兵来将敌/null 兵来将敌水来土堰/null 兵来将迎水来土堰/null 兵法/null 兵法家/null 兵源/null 兵火/null 兵灾/null 兵甲/null 兵略/null 兵痞/null 兵祸/null 兵种/null 兵种战术/null 兵站/null 兵站运输线/null 兵符/null 兵籍/null 兵精粮足/null 兵经/null 兵舍/null 兵舰/null 兵船/null 兵荒马乱/null 兵营/null 兵蚁/null 兵要地志/null 兵败如山倒/null 兵贵神速/null 兵连祸结/null 兵部/null 兵队/null 兵饷/null 兵马/null 兵马俑/null 兵马未动/null 其一/null 其三/null 其上/null 其下/null 其中/null 其中之一/null 其为/null 其乐/null 其乐不穷/null 其乐无穷/null 其乐融融/null 其事/null 其二/null 其人/null 其人其事/null 其他/null 其他人/null 其余/null 其先/null 其内/null 其势/null 其势汹汹/null 其反/null 其名/null 其后/null 其味/null 其味无穷/null 其境/null 其处/null 其外/null 其它/null 其它的/null 其它窗口/null 其实/null 其实不然/null 其实难副/null 其害/null 其家/null 其应若响/null 其形/null 其后/null 其情/null 其所/null 其数/null 其时/null 其是/null 其来/null 其次/null 其母/null 其然/null 其父/null 其生/null 其的/null 其短/null 其自身/null 其色/null 其解/null 其言/null 其词/null 其说/null 其谈/null 其貌/null 其貌不扬/null 其辞/null 其量/null 其间/null 其难/null 具交/null 具体/null 具体劳动/null 具体化/null 具体地说/null 具体来说/null 具体真理/null 具体而微/null 具体计划/null 具体说明/null 具体说来/null 具体问题/null 具保/null 具名/null 具备/null 具备条件/null 具尔/null 具文/null 具有/null 具有主权/null 具结/null 典书/null 典价/null 典借/null 典出人/null 典刑/null 典卖/null 典型/null 典型化/null 典型用途/null 典型登革热/null 典型的/null 典型示范/null 典型调查/null 典契/null 典式/null 典当/null 典当业/null 典当商/null 典押/null 典故/null 典狱/null 典狱长/null 典礼/null 典章/null 典章制度/null 典籍/null 典范/null 典藏/null 典装/null 典质/null 典雅/null 兹事体大/null 兹因/null 兹将/null 兹有/null 兹沃勒/null 养上/null 养亲/null 养人/null 养伤/null 养作/null 养儿/null 养儿代老积谷防饥/null 养儿备老/null 养儿待老积谷防饥/null 养儿防老/null 养儿防老积谷防饥/null 养兔场/null 养兵/null 养兵千日/null 养兵千日用兵一时/null 养兵千日用兵一朝/null 养养/null 养军/null 养军千日用兵一时/null 养军千日用在一时/null 养分/null 养地/null 养场/null 养大/null 养女/null 养好/null 养威蓄锐/null 养媳/null 养媳妇/null 养子/null 养子防老积谷防饥/null 养宪纳士/null 养家/null 养家活口/null 养家糊口/null 养尊处优/null 养小防老积谷防饥/null 养廉/null 养志/null 养性/null 养成/null 养护/null 养料/null 养殖/null 养殖业/null 养殖场/null 养殖面积/null 养母/null 养气/null 养汉/null 养法/null 养活/null 养父/null 养父母/null 养牛/null 养猪/null 养猪业/null 养猪人/null 养猪场/null 养生/null 养生法/null 养生送死/null 养生送终/null 养疴/null 养病/null 养痈成患/null 养痈自患/null 养痈自祸/null 养痈致患/null 养痈蓄疽/null 养痈贻害/null 养痈贻患/null 养痈遗患/null 养眼/null 养神/null 养精畜锐/null 养精蓄锐/null 养羊/null 养老/null 养老保险/null 养老送终/null 养老金/null 养老院/null 养肥/null 养育/null 养育者/null 养育院/null 养花/null 养虎为患/null 养虎伤身/null 养虎留患/null 养虎自啮/null 养虎贻患/null 养虎遗患/null 养虫室/null 养蚕/null 养蚕业/null 养蚕所/null 养蜂/null 养蜂业/null 养蜂人/null 养蜂场/null 养蜂家/null 养路/null 养路工/null 养路费/null 养身/null 养身之道/null 养锐蓄威/null 养驯/null 养鱼/null 养鱼场/null 养鱼塘/null 养鱼池/null 养鱼缸/null 养鸟/null 养鸡/null 养鸡场/null 养鸭/null 养鹰者/null 兼之/null 兼任/null 兼优/null 兼作/null 兼做/null 兼具/null 兼到/null 兼办/null 兼听/null 兼听则明/null 兼售/null 兼备/null 兼容/null 兼容并包/null 兼容性/null 兼容机/null 兼差/null 兼并/null 兼并与收购/null 兼弱攻昧/null 兼得/null 兼收/null 兼收并蓄/null 兼施/null 兼旬/null 兼有/null 兼权熟计/null 兼毫/null 兼演/null 兼爱/null 兼理/null 兼用/null 兼祧/null 兼程/null 兼管/null 兼而有之/null 兼职/null 兼职教师/null 兼营/null 兼蓄/null 兼课/null 兼顾/null 兽力车/null 兽化/null 兽医/null 兽医学/null 兽医院/null 兽奸/null 兽害/null 兽尸/null 兽心/null 兽心人面/null 兽性/null 兽性化/null 兽敌/null 兽术/null 兽栏/null 兽欲/null 兽王/null 兽环/null 兽病理学/null 兽皮/null 兽穴/null 兽窝/null 兽笼/null 兽类/null 兽群/null 兽聚鸟散/null 兽脚亚目/null 兽脚类恐龙/null 兽般/null 兽药/null 兽行/null 兽骨/null 冀东/null 冀中/null 冀南/null 冀县/null 冀州/null 冀望/null 冀朝铸/null 冀求/null 内丘/null 内中/null 内串/null 内丹/null 内主/null 内乡/null 内乱/null 内乱罪/null 内争/null 内亲/null 内人/null 内伤/null 内侄/null 内侄女/null 内侍/null 内侧/null 内债/null 内倾/null 内兄/null 内克/null 内八字脚/null 内公切线/null 内凹/null 内出/null 内出血/null 内击战/null 内函/null 内分/null 内分泌/null 内分泌腺/null 内切/null 内切圆/null 内切球/null 内则/null 内制/null 内力/null 内立面/null 内功/null 内务/null 内务条令/null 内务部/null 内动/null 内助/null 内勤/null 内包/null 内化/null 内华达/null 内华达州/null 内卡河/null 内卷/null 内参/null 内变/null 内史/null 内向/null 内向型/null 内向性/null 内向者/null 内含/null 内含体/null 内吸剂/null 内哄/null 内啡素/null 内啡肽/null 内因/null 内圈/null 内圣外王/null 内在/null 内在几何/null 内在几何学/null 内在化/null 内在坐标/null 内在性/null 内在的/null 内在联系/null 内在论/null 内在超越/null 内地/null 内地人/null 内场/null 内城/null 内埔/null 内埔乡/null 内堂/null 内塔尼亚胡/null 内墙/null 内壁/null 内壕/null 内外/null 内外交困/null 内外勾结/null 内外夹攻/null 内外有别/null 内奸/null 内子/null 内存/null 内宅/null 内定/null 内室/null 内容/null 内容提要/null 内容管理系统/null 内宾/null 内寄生/null 内层/null 内嵌/null 内布拉斯加/null 内布拉斯加州/null 内幕/null 内幕交易/null 内应/null 内应力/null 内底/null 内府/null 内座层/null 内廷/null 内建/null 内弟/null 内弧面/null 内弯/null 内弯足/null 内径/null 内心/null 内心世界/null 内心深处/null 内心里/null 内忧/null 内忧外困/null 内忧外患/null 内急/null 内患/null 内情/null 内战/null 内戮/null 内拉/null 内掌柜/null 内掌柜的/null 内接多边形/null 内插/null 内摩擦/null 内收/null 内攻/null 内放/null 内政/null 内政部/null 内政部警政署/null 内政部长/null 内斗/null 内斜视/null 内景/null 内有/null 内服/null 内服药/null 内果/null 内果皮/null 内柔外刚/null 内查外调/null 内核/null 内殿/null 内毒/null 内比都/null 内汇/null 内江/null 内江地区/null 内河/null 内河航行权/null 内河运输/null 内沿/null 内流/null 内流河/null 内海/null 内涝/null 内涵/null 内涵意义/null 内港/null 内湖/null 内湖区/null 内源/null 内热/null 内焰/null 内熵/null 内燃/null 内燃机/null 内燃机车/null 内爆/null 内爆法原子弹/null 内爱/null 内物/null 内生/null 内生的/null 内电战/null 内电路/null 内电阻/null 内疚/null 内痔/null 内皮/null 内盛/null 内省/null 内省性/null 内眷/null 内眼角/null 内码/null 内破裂/null 内秀/null 内科/null 内科医生/null 内科学/null 内积/null 内稃/null 内空/null 内管/null 内紧外松/null 内线/null 内线交易/null 内线消息/null 内细胞团/null 内经/null 内罗毕/null 内置/null 内翻/null 内耗/null 内耳/null 内耳眩晕症/null 内耳道/null 内联/null 内联外引/null 内联网/null 内聚力/null 内聚性/null 内肿/null 内胎/null 内胚/null 内胚层/null 内能/null 内脏/null 内腺/null 内膜/null 内膝/null 内臣/null 内营力/null 内蒙/null 内蒙古大学/null 内蒙古高原/null 内蕴/null 内行/null 内行星/null 内行看门道/null 内衣/null 内衣裤/null 内衬/null 内袋/null 内袖/null 内装/null 内裙/null 内裤/null 内视反听/null 内角/null 内讧/null 内设/null 内诊镜/null 内详/null 内质网/null 内贾德/null 内资/null 内踝/null 内转/null 内部/null 内部事务/null 内部人/null 内部刊物/null 内部斗争/null 内部矛盾/null 内部结构/null 内部缺陷/null 内部网/null 内酯/null 内酰胺/null 内酰胺酶/null 内里/null 内销/null 内错/null 内错角/null 内门/null 内门乡/null 内阁/null 内阁制/null 内阁总理大臣/null 内阻/null 内陆/null 内陆国/null 内陆河/null 内陆湖/null 内院/null 内陷/null 内障/null 内难/null 内需/null 内面/null 内项/null 内顾/null 内顾之忧/null 内饰/null 内驻/null 内骨/null 内骨骼/null 内鬼/null 内黄/null 冈上肌/null 冈下肌/null 冈仁波齐/null 冈仁波齐峰/null 冈山/null 冈山县/null 冈山镇/null 冈峦/null 冈底斯山/null 冈底斯山脉/null 冈本/null 冈比亚/null 冈陵/null 冉冉/null 冉冉上升/null 冉冉升起/null 冉魏/null 册书/null 册亨/null 册卷/null 册历/null 册子/null 册封/null 册府元龟/null 册立/null 册簿/null 册页/null 再一/null 再一次/null 再三/null 再三再四/null 再上/null 再上演/null 再不/null 再不是/null 再不然/null 再与/null 再且/null 再严/null 再临/null 再为/null 再主张/null 再之/null 再也/null 再也不/null 再买/null 再予/null 再交/null 再交换/null 再任命/null 再会/null 再传/null 再作/null 再作冯妇/null 再使用/null 再供/null 再保证/null 再保险/null 再借/null 再假定/null 再做/null 再充填/null 再入/null 再写/null 再凭/null 再出/null 再出口/null 再出现/null 再分/null 再分析/null 再则/null 再创/null 再创造/null 再利用/null 再到/null 再制/null 再制用/null 再制盐/null 再制纸/null 再加/null 再加倍/null 再加入/null 再区分/null 再去/null 再参加/null 再发/null 再发作/null 再发展/null 再发布/null 再发现/null 再发生/null 再发行/null 再发见/null 再取/null 再取得/null 再同/null 再向/null 再听/null 再启动/null 再吸收/null 再唱/null 再四/null 再回/null 再填满/null 再处理/null 再复苏/null 再多/null 再好/null 再好不过/null 再好没有/null 再如/null 再婚/null 再嫁/null 再嫁娶/null 再安顿/null 再定购/null 再实施/null 再审/null 再导入/null 再将/null 再就是/null 再屠现金/null 再布置/null 再带/null 再度/null 再建/null 再开/null 再开始/null 再录音/null 再往前/null 再循环/null 再想/null 再打/null 再扩散/null 再扫描/null 再找/null 再把/null 再投资/null 再折扣/null 再拉/null 再拜/null 再拿/null 再指名/null 再按/null 再振作/null 再捕获/null 再接再励/null 再接再厉/null 再接再砺/null 再接合/null 再提/null 再提供/null 再提名/null 再改/null 再放/null 再放射/null 再放映/null 再教育/null 再断言/null 再无/null 再有/null 再来/null 再检查/null 再植/null 再植入/null 再次/null 再武装/null 再注满/null 再洗礼/null 再活化假说/null 再涂上/null 再混/null 再混合/null 再演/null 再点燃/null 再热/null 再燃/null 再燃烧/null 再燃起/null 再版/null 再犯/null 再现/null 再现部/null 再生/null 再生不良性贫血/null 再生产/null 再生制动/null 再生器/null 再生燃料/null 再生父母/null 再生能源/null 再生草/null 再生资源/null 再用/null 再由/null 再登/null 再登上/null 再直接/null 再看/null 再确认/null 再租赁/null 再穿上/null 再穿著/null 再立新功/null 再等/null 再经/null 再经历/null 再结合/null 再给/null 再统一/null 再继续/null 再考虑/null 再者/null 再聚集/null 再肯定/null 再育/null 再膨胀/null 再致词/null 再苦再累/null 再获/null 再萌发/null 再融资/null 再行/null 再补/null 再表明/null 再衰三竭/null 再被/null 再装入/null 再装填/null 再装满/null 再装运/null 再装配/null 再要/null 再见/null 再认/null 再让/null 再议/null 再讲/null 再论/null 再访/null 再评价/null 再试/null 再试验/null 再说/null 再读/null 再调整/null 再谈/null 再贴现/null 再赋予/null 再赛/null 再走/null 再起/null 再踏上/null 再转复/null 再输入/null 再输出/null 再迁/null 再过/null 再运行/null 再进/null 再进入/null 再远/null 再迟/null 再选/null 再通过/null 再造/null 再造业/null 再造丸/null 再造之恩/null 再造手术/null 再醮/null 再问/null 再防雨/null 再陷/null 再障/null 再集合/null 冏卿/null 冏寺/null 冏彻/null 冏牧/null 冒了/null 冒充/null 冒充者/null 冒充货/null 冒冒/null 冒冒失失/null 冒出/null 冒号/null 冒名/null 冒名顶替/null 冒名顶替者/null 冒大不韪/null 冒天下之大不韪/null 冒失/null 冒失鬼/null 冒头/null 冒尖/null 冒昧/null 冒暑/null 冒死/null 冒气/null 冒汗/null 冒泡/null 冒泡排序/null 冒火/null 冒烟/null 冒然/null 冒牌/null 冒牌者/null 冒牌货/null 冒犯/null 冒犯者/null 冒生命危险/null 冒用/null 冒着/null 冒着烟/null 冒着生命危险/null 冒称/null 冒纳罗亚/null 冒认/null 冒起/null 冒进/null 冒险/null 冒险主义/null 冒险家/null 冒险干/null 冒险性/null 冒险者/null 冒险跳/null 冒雨/null 冒顶/null 冒领/null 冒题/null 冒风险/null 冒风雨/null 冕宁/null 冕旒/null 冕礼/null 冗位/null 冗余/null 冗余度/null 冗余量/null 冗兵/null 冗冗/null 冗务/null 冗员/null 冗官/null 冗散/null 冗数/null 冗杂/null 冗条子/null 冗笔/null 冗繁/null 冗职/null 冗言/null 冗词/null 冗词赘句/null 冗语/null 冗费/null 冗赘/null 冗赘词/null 冗辞/null 冗长/null 冗长度/null 冗食/null 写上/null 写下/null 写了/null 写事/null 写人/null 写他/null 写作/null 写作学/null 写作家/null 写作文/null 写作方法/null 写作知识/null 写信/null 写信给/null 写入/null 写全/null 写写/null 写出/null 写到/null 写回/null 写在/null 写大字/null 写大纲/null 写好/null 写字/null 写字台/null 写字楼/null 写字间/null 写完/null 写实/null 写实主义/null 写实性/null 写寄/null 写屏/null 写序言/null 写得/null 写意/null 写意画/null 写成/null 写手/null 写报道/null 写文/null 写明/null 写景/null 写景图/null 写有/null 写本/null 写来/null 写法/null 写清/null 写满/null 写照/null 写生/null 写生簿/null 写画/null 写的/null 写真/null 写真集/null 写着/null 写稿/null 写给/null 写词/null 写诗/null 写读/null 写进/null 写道/null 写错/null 军不血刃/null 军中/null 军临城下/null 军乐/null 军乐队/null 军事/null 军事上/null 军事体育/null 军事力量/null 军事化/null 军事区/null 军事地形学/null 军事基地/null 军事委员会/null 军事威胁/null 军事学/null 军事实力/null 军事家/null 军事情报/null 军事援助/null 军事政变/null 军事机构/null 军事核大国/null 军事法庭/null 军事演习/null 军事科学/null 军事管制/null 军事职业专业/null 军事行动/null 军事训练/null 军事设施/null 军事部门/null 军人/null 军人优抚/null 军人伦理/null 军人修养/null 军人地位/null 军人道德/null 军代表/null 军令/null 军令如山/null 军令状/null 军体/null 军兵种/null 军刀/null 军分区/null 军制/null 军制史/null 军力/null 军办/null 军功/null 军务/null 军务工作/null 军势/null 军区/null 军医/null 军医大学/null 军医学院/null 军医院/null 军史/null 军史知识/null 军号/null 军品/null 军品出口领导小组/null 军品采购/null 军售/null 军团/null 军团杆菌/null 军团菌/null 军团菌病/null 军国/null 军国主义/null 军国主义者/null 军国化/null 军地/null 军垦/null 军士/null 军士制度/null 军备/null 军备控制/null 军备竞赛/null 军多将广/null 军委/null 军委会/null 军委各总部/null 军姿/null 军威/null 军官/null 军官室/null 军容/null 军容风纪/null 军属/null 军屯/null 军工/null 军工产品/null 军工企业/null 军工生产/null 军师/null 军帽/null 军徽/null 军心/null 军总/null 军情/null 军情五处/null 军情六处/null 军援/null 军操/null 军政/null 军政大学/null 军政府/null 军方/null 军旅/null 军旗/null 军曹鱼/null 军服/null 军机/null 军机处/null 军权/null 军校/null 军械/null 军械库/null 军棋/null 军歌/null 军毯/null 军民/null 军民一致/null 军民团结/null 军法/null 军法从事/null 军港/null 军演/null 军火/null 军火交易/null 军火公司/null 军火商/null 军火库/null 军火贸易/null 军烈属/null 军犬/null 军用/null 军界/null 军略/null 军眷/null 军礼/null 军种/null 军种体制/null 军管/null 军管会/null 军籍/null 军粮/null 军纪/null 军统/null 军统局/null 军绿/null 军群/null 军职/null 军舰/null 军营/null 军衔/null 军衔制/null 军衣/null 军装/null 军规/null 军警/null 军训/null 军语/null 军语词典/null 军调部/null 军费/null 军费开支/null 军费预算/null 军车/null 军转民/null 军邮/null 军部/null 军长/null 军门/null 军阀/null 军阀主义/null 军阀混战/null 军队/null 军队化/null 军队式/null 军阵/null 军阶/null 军需/null 军需品/null 军需官/null 军需部/null 军靴/null 军鞋/null 军风/null 军风纪/null 军饷/null 军马/null 军鼓/null 军龄/null 农业/null 农业人口/null 农业八字宪法/null 农业再上新台阶/null 农业化学/null 农业区/null 农业区划/null 农业合作化/null 农业国/null 农业地理/null 农业大学/null 农业家/null 农业工人/null 农业总产值/null 农业技术/null 农业投入/null 农业改革/null 农业政策/null 农业机械/null 农业机械化/null 农业现代化/null 农业生产/null 农业生产合作社/null 农业生产责任制/null 农业生产资料/null 农业生技/null 农业用地/null 农业社/null 农业社会主义/null 农业社会主义改造/null 农业科技/null 农业税/null 农业经济/null 农业贷款/null 农业资本家/null 农业部门/null 农业院校/null 农业集体化/null 农业革命/null 农中/null 农事/null 农事活动/null 农产/null 农产品/null 农产量/null 农人/null 农会/null 农作/null 农作物/null 农作物品种/null 农具/null 农副/null 农副业/null 农副产品/null 农区/null 农协/null 农历/null 农历新年/null 农友/null 农口/null 农园/null 农地/null 农场/null 农场主/null 农场管理/null 农垦/null 农垦工作/null 农垦经济/null 农大/null 农夫/null 农夫们/null 农奴/null 农奴主/null 农奴制/null 农奴解放日/null 农妇/null 农委/null 农学/null 农学家/null 农学院/null 农宅/null 农安/null 农家/null 农家庭院/null 农家肥料/null 农工/null 农工党/null 农工商/null 农工牧副渔业/null 农庄/null 农德孟/null 农忙/null 农户/null 农房/null 农技/null 农政全书/null 农救会/null 农时/null 农机/null 农机具/null 农机厂/null 农村/null 农村公社/null 农村合作化/null 农村家庭联产承包责任制/null 农村干部/null 农村政策/null 农村无产阶级/null 农村经济/null 农村调查/null 农村资产阶级/null 农林/null 农林水产省/null 农林牧副/null 农林牧副渔/null 农校/null 农桑/null 农械/null 农民/null 农民企业家/null 农民党/null 农民协会/null 农民工/null 农民战争/null 农民技术员/null 农民日报/null 农民起义/null 农民运动会/null 农民阶级/null 农活/null 农牧/null 农牧业/null 农牧区/null 农牧场/null 农牧民/null 农牧渔/null 农牧渔业/null 农用/null 农用物资/null 农田/null 农田基本建设/null 农田水利/null 农田灌溉/null 农电/null 农畜/null 农畜产品/null 农科院/null 农耕/null 农膜/null 农舍/null 农艺/null 农艺学/null 农艺师/null 农药/null 农行/null 农谚/null 农贷/null 农贸/null 农贸市场/null 农资/null 农车/null 农转非/null 农运/null 农运会/null 农闲/null 农院/null 农隙/null 冠亚军/null 冠以/null 冠冕/null 冠冕堂煌/null 冠冕堂皇/null 冠军/null 冠军杯/null 冠军赛/null 冠冢/null 冠子/null 冠履倒易/null 冠履倒置/null 冠带/null 冠形词/null 冠心病/null 冠状/null 冠状动脉/null 冠状动脉旁路移植手术/null 冠状动脉旁通手术/null 冠盖如云/null 冠盖相属/null 冠盖相望/null 冠目/null 冠脉/null 冠脉循环/null 冠词/null 冢中枯骨/null 冤业/null 冤仇/null 冤假错案/null 冤冤相报/null 冤冤相报何时了/null 冤各有头债各有主/null 冤呀/null 冤大头/null 冤天屈地/null 冤头/null 冤孽/null 冤家/null 冤家宜解不宜结/null 冤家对头/null 冤家路狭/null 冤家路窄/null 冤屈/null 冤情/null 冤抑/null 冤有头债有主/null 冤枉/null 冤枉路/null 冤枉钱/null 冤案/null 冤死/null 冤气/null 冤狱/null 冤苦/null 冤诬/null 冤钱/null 冤鬼/null 冤魂/null 冥冥/null 冥合/null 冥器/null 冥婚/null 冥府/null 冥思/null 冥思苦想/null 冥思苦索/null 冥想/null 冥想者/null 冥王/null 冥王星/null 冥界/null 冥福/null 冥纸/null 冥衣/null 冥道/null 冥钞/null 冥钱/null 冥顽/null 冥顽不灵/null 冬不拉/null 冬令/null 冬令营/null 冬候鸟/null 冬冬响/null 冬响/null 冬夏/null 冬天/null 冬奥会/null 冬子月/null 冬字头/null 冬季/null 冬季奥运会/null 冬季运动/null 冬季运动会/null 冬学/null 冬宫/null 冬小麦/null 冬山/null 冬山乡/null 冬扇夏炉/null 冬日/null 冬日可爱/null 冬月/null 冬汛/null 冬泳/null 冬温/null 冬温夏清/null 冬灌/null 冬烘/null 冬瓜/null 冬瘟/null 冬眠/null 冬笋/null 冬耕/null 冬至点/null 冬至线/null 冬节/null 冬菇/null 冬菜/null 冬藏/null 冬虫夏草/null 冬蛰/null 冬衣/null 冬装/null 冬训/null 冬运会/null 冬闲/null 冬防/null 冬青/null 冬青树/null 冬麦/null 冯内果/null 冯德英/null 冯梦龙/null 冯武/null 冯玉祥/null 冯窦伯/null 冯骥才/null 冰上/null 冰上运动/null 冰人/null 冰似/null 冰冷/null 冰冷如石/null 冰冻/null 冰冻三尺/null 冰冻期/null 冰冻食品/null 冰凉/null 冰凌/null 冰凝器/null 冰刀/null 冰品/null 冰场/null 冰块/null 冰块盒/null 冰坝/null 冰坨子/null 冰堆/null 冰堆丘/null 冰塔/null 冰塔林/null 冰塞/null 冰壑/null 冰壶/null 冰壶玉尺/null 冰壶秋月/null 冰天/null 冰天雪地/null 冰天雪窖/null 冰室/null 冰封/null 冰封雪冻/null 冰层/null 冰山/null 冰山一角/null 冰岛/null 冰岛人/null 冰峰/null 冰崩/null 冰川/null 冰川带/null 冰川期/null 冰川湖/null 冰帽/null 冰床/null 冰库/null 冰心/null 冰排/null 冰散瓦解/null 冰晶/null 冰晶石/null 冰期/null 冰染染料/null 冰柜/null 冰柱/null 冰桥/null 冰桶/null 冰棍/null 冰棍儿/null 冰棒/null 冰橇/null 冰毒/null 冰水/null 冰沙/null 冰沟/null 冰河/null 冰河学/null 冰河时代/null 冰河时期/null 冰河期/null 冰洋/null 冰洞/null 冰洲石/null 冰消冻解/null 冰消冻释/null 冰消瓦解/null 冰淇淋/null 冰清玉洁/null 冰清玉润/null 冰激凌/null 冰火/null 冰火不容/null 冰灯/null 冰炭/null 冰炭不相容/null 冰炭不言/null 冰炭同炉/null 冰点/null 冰片/null 冰球/null 冰球场/null 冰瓶/null 冰皮/null 冰皮月饼/null 冰盖/null 冰砖/null 冰硬/null 冰硼散/null 冰碛/null 冰碴/null 冰积物/null 冰窖/null 冰箱/null 冰糕/null 冰糖/null 冰糖葫芦/null 冰肌玉骨/null 冰舌/null 冰船/null 冰花/null 冰蚀/null 冰蛋/null 冰袋/null 冰解冻释/null 冰车/null 冰轮/null 冰酒/null 冰醋酸/null 冰释/null 冰锋/null 冰锥/null 冰镇/null 冰镩/null 冰隙/null 冰雕/null 冰雪/null 冰雪消融/null 冰雪皇后/null 冰雪聪明/null 冰雹/null 冰霜/null 冰鞋/null 冰风暴/null 冰魂雪魄/null 冲上/null 冲下/null 冲件/null 冲倒/null 冲兑/null 冲入/null 冲冠怒发/null 冲冲/null 冲决/null 冲凉/null 冲减/null 冲出/null 冲击/null 冲击力/null 冲击声/null 冲击波/null 冲到/null 冲刷/null 冲刺/null 冲剂/null 冲力/null 冲动/null 冲劲/null 冲压/null 冲压机/null 冲去/null 冲口而出/null 冲口而发/null 冲向/null 冲喜/null 冲坏/null 冲坚陷阵/null 冲垮/null 冲塌/null 冲天/null 冲天炉/null 冲失/null 冲头/null 冲子/null 冲孔/null 冲州撞府/null 冲帐/null 冲床/null 冲开/null 冲打/null 冲抵/null 冲挡/null 冲挹/null 冲掉/null 冲撞/null 冲散/null 冲断/null 冲断层/null 冲昏/null 冲昏头脑/null 冲晒/null 冲服/null 冲服剂/null 冲杀/null 冲模/null 冲毁/null 冲水/null 冲沟/null 冲洗/null 冲流/null 冲浪/null 冲浪板/null 冲浪者/null 冲淋浴/null 冲淡/null 冲澡/null 冲牙器/null 冲犯/null 冲电器/null 冲盹儿/null 冲着/null 冲破/null 冲积/null 冲积层/null 冲积平原/null 冲积扇/null 冲积物/null 冲程/null 冲突/null 冲突地区/null 冲绳/null 冲绳县/null 冲绳岛/null 冲绳群岛/null 冲茶/null 冲要/null 冲调/null 冲账/null 冲走/null 冲越/null 冲转/null 冲过/null 冲进/null 冲退/null 冲量/null 冲销/null 冲锋/null 冲锋不止/null 冲锋枪/null 冲锋陷阵/null 冲龄/null 决一死战/null 决一胜负/null 决一雌雄/null 决不/null 决不会/null 决不再/null 决不可/null 决不是/null 决不罢休/null 决不能/null 决不食言/null 决于/null 决出/null 决出名次/null 决分/null 决口/null 决堤/null 决定/null 决定了/null 决定作用/null 决定因素/null 决定性/null 决定权/null 决定簇/null 决定论/null 决心/null 决心书/null 决心很大/null 决心要/null 决志/null 决意/null 决战/null 决撒/null 决斗/null 决斗者/null 决断/null 决断如流/null 决无/null 决明/null 决明子/null 决死/null 决然/null 决狱断刑/null 决疑/null 决疑论/null 决痈溃疽/null 决窍/null 决策/null 决策人/null 决策千里/null 决策学/null 决策树/null 决策者/null 决策论/null 决算/null 决绝/null 决而不行/null 决胜/null 决胜千里/null 决胜千里之外/null 决胜负/null 决裂/null 决要/null 决计/null 决议/null 决议案/null 决赛/null 决赛权/null 决选/null 决选名单/null 决雌雄/null 决非/null 况且/null 况味/null 冶叶倡条/null 冶天/null 冶容/null 冶容诲淫/null 冶性/null 冶游/null 冶炼/null 冶炼厂/null 冶炼炉/null 冶练/null 冶艳/null 冶荡/null 冶金/null 冶金学/null 冶金学家/null 冶金家/null 冶金工业/null 冶金工业部/null 冶金术/null 冶金部/null 冶铁/null 冶铸/null 冷丁/null 冷下来/null 冷不丁/null 冷不丁地/null 冷不防/null 冷丝丝/null 冷作/null 冷僻/null 冷光/null 冷兵器/null 冷冰/null 冷冰冰/null 冷冷/null 冷冷清清/null 冷冻/null 冷冻剂/null 冷冻库/null 冷冻机/null 冷凝/null 冷凝器/null 冷凝物/null 冷加工/null 冷却/null 冷却剂/null 冷却器/null 冷却塔/null 冷却水/null 冷嘲/null 冷嘲热讽/null 冷场/null 冷塔/null 冷处理/null 冷天/null 冷媒/null 冷子/null 冷子管/null 冷字/null 冷孤丁/null 冷官/null 冷宫/null 冷害/null 冷寂/null 冷峭/null 冷峻/null 冷布/null 冷床/null 冷库/null 冷待/null 冷得/null 冷感/null 冷战/null 冷战以后/null 冷房/null 冷敷/null 冷暖/null 冷暖房/null 冷暖自知/null 冷杉/null 冷板凳/null 冷枪/null 冷森森/null 冷气/null 冷气团/null 冷气机/null 冷气衫/null 冷水/null 冷水机组/null 冷水江/null 冷水滩/null 冷水滩区/null 冷汗/null 冷流/null 冷浸/null 冷浸田/null 冷涩/null 冷淡/null 冷淡关系/null 冷清/null 冷清清/null 冷湖/null 冷湖行政区/null 冷湖行政委员会/null 冷湿/null 冷漠/null 冷漠对待/null 冷灰爆豆/null 冷烫/null 冷热/null 冷热度数/null 冷热病/null 冷热自明/null 冷焊/null 冷然/null 冷煖自知/null 冷疗/null 冷的/null 冷盆/null 冷盘/null 冷眉冷眼/null 冷眼/null 冷眼旁观/null 冷眼相看/null 冷碟儿/null 冷空气/null 冷笑/null 冷箭/null 冷缩/null 冷脆/null 冷脸子/null 冷色/null 冷艳/null 冷若冰霜/null 冷荤/null 冷菜/null 冷落/null 冷藏/null 冷藏器/null 冷藏箱/null 冷藏车/null 冷藏间/null 冷血/null 冷血动物/null 冷觉/null 冷言/null 冷言冷语/null 冷言热语/null 冷讥热嘲/null 冷讽/null 冷话/null 冷语/null 冷语冰人/null 冷货/null 冷轧/null 冷透/null 冷遇/null 冷酷/null 冷酷无情/null 冷铆/null 冷铸/null 冷锋/null 冷门/null 冷霜/null 冷静/null 冷面/null 冷颤/null 冷风/null 冷飕飕/null 冷食/null 冷餐/null 冷饮/null 冻了/null 冻伤/null 冻住/null 冻僵/null 冻冰/null 冻剂/null 冻土/null 冻土层/null 冻坏/null 冻奶/null 冻害/null 冻容/null 冻干/null 冻库/null 冻得/null 冻手/null 冻手冻脚/null 冻机/null 冻死/null 冻状/null 冻疮/null 冻瘃/null 冻着/null 冻硬/null 冻穿/null 冻糕/null 冻结/null 冻肉/null 冻胶/null 冻裂/null 冻解冰释/null 冻豆腐/null 冻过/null 冻雨/null 冻霜/null 冻露/null 冻饿/null 冻馁/null 冻鸡/null 冼手/null 冼星海/null 净余/null 净值/null 净光/null 净利/null 净利润/null 净剩/null 净办/null 净化/null 净化器/null 净含量/null 净土/null 净土宗/null 净地/null 净增/null 净室/null 净尽/null 净差/null 净得/null 净心修身/null 净手/null 净损/null 净支/null 净收入/null 净数/null 净是/null 净本/null 净桶/null 净水/null 净水器/null 净现值/null 净盘将军/null 净空/null 净角/null 净赚/null 净身/null 净重/null 净量/null 净销/null 净额/null 净高/null 凄冷/null 凄凄/null 凄凉/null 凄切/null 凄厉/null 凄呖/null 凄咽/null 凄哀/null 凄婉/null 凄寒/null 凄怆/null 凄恻/null 凄惋/null 凄惨/null 凄惶/null 凄暗/null 凄梗/null 凄楚/null 凄沧/null 凄清/null 凄然/null 凄美/null 凄苍/null 凄苦/null 凄迷/null 凄风冷雨/null 凄风苦雨/null 凄黯/null 准之/null 准予/null 准件/null 准会/null 准位/null 准保/null 准假/null 准儿/null 准入/null 准其/null 准军事/null 准决赛/null 准准/null 准则/null 准噶尔/null 准噶尔盆地/null 准噶尔翼龙/null 准备/null 准备好/null 准备好了/null 准备就绪/null 准备工作/null 准备金/null 准头/null 准宝石/null 准将/null 准尉/null 准尺/null 准差/null 准平原/null 准心/null 准接/null 准收/null 准时/null 准星/null 准是/null 准有/null 准格尔/null 准格尔盆地/null 准没/null 准点/null 准男爵/null 准的/null 准确/null 准确度/null 准确性/null 准确无误/null 准确率/正确率 准稳旋涡结构/null 准线/null 准绳/null 准葛尔盆地/null 准规/null 准许/null 准证/null 准谱儿/null 准距/null 准轨/null 准运证/null 准郊外/null 凉了/null 凉亭/null 凉伞/null 凉台/null 凉城/null 凉处/null 凉山/null 凉州/null 凉州区/null 凉席/null 凉廊/null 凉快/null 凉意/null 凉拌/null 凉拌炒鸡蛋/null 凉拌生菜/null 凉棚/null 凉气/null 凉水/null 凉爽/null 凉瓶/null 凉皮/null 凉碟/null 凉粉/null 凉茶/null 凉药/null 凉菜/null 凉薯/null 凉面/null 凉鞋/null 凉风/null 凉飕飕/null 凋敝/null 凋敞/null 凋残/null 凋花/null 凋萎/null 凋落/null 凋谢/null 凋零/null 凌乱/null 凌乱不堪/null 凌云/null 凌厉/null 凌夷/null 凌志/null 凌志美/null 凌晨/null 凌杂/null 凌杂米盐/null 凌汛/null 凌河/null 凌河区/null 凌海/null 凌源/null 凌空/null 凌蒙初/null 凌虐/null 凌轹/null 凌辱/null 凌迟/null 凌锥/null 凌霄花/null 凌驾/null 减为/null 减亏/null 减产/null 减人/null 减价/null 减份/null 减低/null 减低速度/null 减俸/null 减借/null 减债/null 减值/null 减免/null 减免税/null 减减/null 减刑/null 减到/null 减削/null 减劲/null 减半/null 减压/null 减压器/null 减压时间表/null 减压病/null 减压症/null 减压程序/null 减压表/null 减压阀/null 减去/null 减号/null 减员/null 减噪/null 减小/null 减少/null 减少量/null 减尽/null 减幅/null 减并/null 减弱/null 减息/null 减慢/null 减拨/null 减按/null 减振/null 减振器/null 减损/null 减掉/null 减排/null 减摩合金/null 减支/null 减收/null 减数/null 减数分裂/null 减料/null 减方/null 减杀/null 减核/null 减毒活疫苗/null 减河/null 减法/null 减灾/null 减盈/null 减省/null 减碳/null 减租/null 减租减息/null 减税/null 减紧/null 减纳/null 减缓/null 减缩/null 减肥/null 减肥法/null 减胖/null 减至/null 减色/null 减薪/null 减计/null 减负/null 减轻/null 减轻负担/null 减退/null 减速/null 减速伞/null 减速剂/null 减速器/null 减速运动/null 减量/null 减除/null 减震/null 减震器/null 减额/null 减食/null 凑了/null 凑份子/null 凑兴/null 凑出/null 凑到/null 凑合/null 凑巧/null 凑成/null 凑手/null 凑拢/null 凑搭/null 凑效/null 凑数/null 凑热/null 凑热闹/null 凑热闹儿/null 凑胆子/null 凑趣/null 凑趣儿/null 凑足/null 凑近/null 凑钱/null 凑集/null 凑齐/null 凛冽/null 凛凛/null 凛然/null 凛遵/null 凝为/null 凝乳/null 凝冰/null 凝冻/null 凝华/null 凝固/null 凝固剂/null 凝固汽油弹/null 凝固点/null 凝块/null 凝思/null 凝想/null 凝成/null 凝成块/null 凝望/null 凝汞温度/null 凝液/null 凝滞/null 凝灰岩/null 凝眸/null 凝神/null 凝练/null 凝结/null 凝结剂/null 凝结器/null 凝结水/null 凝结物/null 凝缩/null 凝缩器/null 凝聚/null 凝聚剂/null 凝聚力/null 凝聚层/null 凝聚态/null 凝胶/null 凝胶体/null 凝胶化/null 凝胶物/null 凝胶状/null 凝脂/null 凝花菜/null 凝血/null 凝血素/null 凝血脢/null 凝血脢原/null 凝血酶/null 凝视/null 凝视时间/null 凝视者/null 凝重/null 凝集/null 凝集的/null 凝集素/null 几丁/null 几丁质/null 几万/null 几下/null 几个/null 几个月/null 几乎/null 几乎不/null 几乎完全/null 几乎没有/null 几亿/null 几代/null 几代人/null 几件/null 几位/null 几何/null 几何体/null 几何光学/null 几何原本/null 几何图形/null 几何学/null 几何平均数/null 几何拓扑/null 几何拓扑学/null 几何级数/null 几何线/null 几何量/null 几倍/null 几儿/null 几内/null 几内亚/null 几内亚人/null 几内亚比绍/null 几内亚湾/null 几分/null 几列/null 几十/null 几十亿/null 几十年/null 几十年如一日/null 几十年来/null 几千/null 几千年/null 几口/null 几句/null 几句话/null 几只/null 几可乱真/null 几号/null 几名/null 几周/null 几多/null 几天/null 几天几夜/null 几天来/null 几套/null 几家/null 几层/null 几岁/null 几希/null 几年/null 几年如一日/null 几年来/null 几度/null 几张/null 几微/null 几所/null 几支/null 几方面/null 几日/null 几时/null 几朵/null 几条/null 几架/null 几样/null 几案/null 几次/null 几次三番/null 几欲/null 几步/null 几滴/null 几点/null 几点了/null 几点钟了/null 几率/null 几番/null 几百/null 几百年/null 几票/null 几种/null 几笔/null 几米/null 几类/null 几粒/null 几组/null 几经/null 几经反复/null 几经周折/null 几经考虑/null 几维鸟/null 几群/null 几至/null 几许/null 几谏/null 几起/null 几近/null 几遍/null 几部/null 几部分/null 几间/null 几集/null 几项/null 凡与/null 凡世通/null 凡为/null 凡事/null 凡事总有一个开头/null 凡事总有开头/null 凡人/null 凡以/null 凡例/null 凡俗/null 凡可/null 凡响/null 凡在/null 凡士林/null 凡夫/null 凡夫俗子/null 凡将/null 凡尔/null 凡尔丁/null 凡尔登战役/null 凡尔赛/null 凡尔赛和约/null 凡尘/null 凡属/null 凡庸/null 凡心/null 凡是/null 凡有/null 凡未/null 凡此/null 凡此种种/null 凡用/null 凡百/null 凡立丁/null 凡立水/null 凡经/null 凡胎俗骨/null 凡胎浊骨/null 凡能/null 凡近/null 凡间/null 凡需/null 凡高/null 凤仙花/null 凤冈/null 凤冠/null 凤凰/null 凤凰于蜚/null 凤凰于飞/null 凤凰古城/null 凤凰号/null 凤凰城/null 凤凰座/null 凤凰木/null 凤凰来仪/null 凤友鸾交/null 凤台/null 凤城/null 凤头鹦鹉/null 凤头麦鸡/null 凤害/null 凤尾竹/null 凤尾鱼/null 凤山/null 凤庆/null 凤林/null 凤林镇/null 凤梨/null 凤梨园/null 凤毛济美/null 凤毛麟角/null 凤泉/null 凤泉区/null 凤泊鸾飘/null 凤爪/null 凤皇/null 凤眼/null 凤眼兰/null 凤眼莲/null 凤翔/null 凤舞龙飞/null 凤蝶/null 凤蝶科/null 凤阳/null 凤雏麟子/null 凤髓龙肝/null 凤鸣朝阳/null 凫水/null 凫翁/null 凫茈/null 凫趋雀跃/null 凭之/null 凭什么/null 凭仗/null 凭以/null 凭依/null 凭信/null 凭倚/null 凭借/null 凭准/null 凭券/null 凭单/null 凭原/null 凭吊/null 凭恃/null 凭手画/null 凭据/null 凭条/null 凭柬/null 凭栏/null 凭此/null 凭河暴虎/null 凭照/null 凭白/null 凭白无故/null 凭眺/null 凭着/null 凭祥/null 凭票/null 凭票供应/null 凭票入场/null 凭空/null 凭空捏造/null 凭经验/null 凭著/null 凭藉/null 凭记忆/null 凭证/null 凭轼结辙/null 凭险/null 凭陵/null 凭靠/null 凯利/null 凯因斯/null 凯尔特人/null 凯尼恩/null 凯彻/null 凯恩斯/null 凯恩斯主义/null 凯悦/null 凯撒/null 凯撒肋雅/null 凯撒酱/null 凯文/null 凯旋/null 凯旋式/null 凯旋归来/null 凯旋而归/null 凯旋门/null 凯林赛/null 凯歌/null 凯法劳尼亚/null 凯特/null 凯瑟琳/null 凯茜・弗里曼/null 凯达格兰/null 凯达格兰族/null 凯迪拉克/null 凯里/null 凳上/null 凳子/null 凶事/null 凶信/null 凶兆/null 凶光/null 凶党/null 凶化/null 凶器/null 凶多吉少/null 凶宅/null 凶岁/null 凶巴巴/null 凶年/null 凶年饥岁/null 凶徒/null 凶恶/null 凶悍/null 凶戾/null 凶手/null 凶暴/null 凶服/null 凶杀/null 凶杀案/null 凶极/null 凶横/null 凶死/null 凶残/null 凶殴/null 凶气/null 凶灾/null 凶焰/null 凶煞/null 凶犯/null 凶狂/null 凶狠/null 凶猛/null 凶相/null 凶相毕露/null 凶神/null 凶神恶煞/null 凶终隙末/null 凶荒/null 凶虐/null 凶讯/null 凶身/null 凶险/null 凶顽/null 凸凸/null 凸凹/null 凸出/null 凸出部/null 凸多胞形/null 凸多边形/null 凸多面体/null 凸嵌线/null 凸性/null 凸折线/null 凸显/null 凸版/null 凸版印刷/null 凸现/null 凸用/null 凸纹/null 凸线/null 凸缘/null 凸耳/null 凸胸/null 凸花/null 凸起/null 凸轮/null 凸轮轴/null 凸边/null 凸边角/null 凸透/null 凸透镜/null 凸镜/null 凸雕/null 凸面/null 凸面体/null 凸面部分/null 凸面镜/null 凹下/null 凹了/null 凹入/null 凹凸/null 凹凸不平/null 凹凸印刷/null 凹凸形/null 凹凸轧花/null 凹凸透镜/null 凹口/null 凹坑/null 凹处/null 凹岸/null 凹底/null 凹度/null 凹形/null 凹曲/null 凹曲面/null 凹朴皮/null 凹板/null 凹槽/null 凹洞/null 凹洼/null 凹版/null 凹版印刷/null 凹状/null 凹痕/null 凹的/null 凹纹/null 凹线/null 凹角/null 凹进/null 凹透/null 凹透镜/null 凹镜/null 凹陷/null 凹雕/null 凹面/null 凹面镜/null 出丑/null 出世/null 出世作/null 出丧/null 出主意/null 出乎/null 出乎意外/null 出乎意料/null 出乎预料/null 出乖弄丑/null 出乖露丑/null 出乘/null 出书/null 出买/null 出乱子/null 出了/null 出了事/null 出事/null 出事地点/null 出于/null 出于公心/null 出于好意/null 出于意料/null 出亡/null 出产/null 出人/null 出人命/null 出人头地/null 出人意外/null 出人意料/null 出人意表/null 出仕/null 出价/null 出价人/null 出任/null 出份子/null 出伏/null 出众/null 出位/null 出使/null 出倒/null 出借/null 出入/null 出入口/null 出入境/null 出入头地/null 出入将相/null 出入平安/null 出入证/null 出入门/null 出关/null 出兵/null 出其不意/null 出其不意攻其不备/null 出具/null 出典/null 出出/null 出击/null 出列/null 出力/null 出力不讨好/null 出动/null 出勤/null 出勤率/null 出包/null 出卖/null 出卖灵魂/null 出厂/null 出厂价/null 出厂价格/null 出去/null 出去走走/null 出发/null 出发点/null 出口/null 出口产品/null 出口入耳/null 出口创汇/null 出口创汇率/null 出口品/null 出口商/null 出口商品/null 出口国/null 出口处/null 出口成章/null 出口政策/null 出口气/null 出口调查/null 出口货/null 出口贸易/null 出口转内销/null 出口量/null 出口额/null 出台/null 出号/null 出名/null 出品/null 出品人/null 出售/null 出喽子/null 出国/null 出国深造/null 出国热/null 出国考察/null 出国访问/null 出圈/null 出圈儿/null 出土/null 出土文书/null 出土文物/null 出在/null 出地/null 出场/null 出埃及记/null 出城/null 出塞/null 出境/null 出境检查/null 出境证/null 出声/null 出处/null 出外/null 出外谋生/null 出大差/null 出头/null 出头露面/null 出头鸟/null 出奇/null 出奇制胜/null 出奔/null 出娄子/null 出嫁/null 出官/null 出家/null 出家人/null 出将入相/null 出尔反尔/null 出尖/null 出尖儿/null 出局/null 出山/null 出岔/null 出岔子/null 出巡/null 出工/null 出差/null 出师/null 出帐/null 出席/null 出席人/null 出席会议/null 出席者/null 出席表决比例/null 出库/null 出店/null 出庭/null 出征/null 出恭/null 出息/null 出戏/null 出战/null 出手/null 出手得卢/null 出招/null 出挑/null 出据/null 出操/null 出数儿/null 出料/null 出新/null 出月/null 出月子/null 出期/null 出来/null 出来了/null 出柜/null 出格/null 出楼子/null 出榜/null 出殡/null 出毛病/null 出气/null 出气口/null 出气筒/null 出水/null 出水口/null 出水芙蓉/null 出汗/null 出没/null 出没无常/null 出油/null 出法/null 出洋/null 出洋相/null 出洞/null 出活/null 出海/null 出清/null 出港/null 出港大厅/null 出游/null 出溜/null 出漏子/null 出炉/null 出点子/null 出片/null 出版/null 出版业/null 出版事业/null 出版单位/null 出版发行/null 出版品/null 出版商/null 出版学/null 出版工作/null 出版物/null 出版界/null 出版社/null 出版者/null 出版自由/null 出版说明/null 出牌/null 出牙期/null 出狱/null 出猎/null 出现/null 出现意外/null 出生/null 出生于/null 出生入死/null 出生前/null 出生后/null 出生地/null 出生地点/null 出生年月/null 出生日期/null 出生率/null 出生缺陷/null 出生证/null 出生证明/null 出生证明书/null 出界/null 出疹/null 出盘/null 出破/null 出示/null 出神/null 出神入化/null 出科/null 出租/null 出租人/null 出租司机/null 出租汽车/null 出租给/null 出租者/null 出租车/null 出空/null 出窑/null 出站/null 出端/null 出笼/null 出类拔群/null 出类拔萃/null 出类超群/null 出纳/null 出纳业务/null 出纳员/null 出线/null 出线权/null 出继/null 出缺/null 出群拔萃/null 出老千/null 出脱/null 出自/null 出自于/null 出自内心/null 出自肺腑/null 出臭子儿/null 出航/null 出舱/null 出船坞/null 出色/null 出色完成/null 出芽/null 出芽生殖/null 出苗/null 出落/null 出蛰/null 出血/null 出血性/null 出血性登革热/null 出血热/null 出血病/null 出行/null 出行者/null 出言/null 出言不逊/null 出言成章/null 出言无状/null 出让/null 出访/null 出诊/null 出谋划策/null 出谋献策/null 出谷迁乔/null 出货/null 出资/null 出赛/null 出走/null 出超/null 出路/null 出身/null 出身名门/null 出身好/null 出身微贱/null 出车/null 出轨/null 出辑/null 出迎/null 出逃/null 出道/null 出钱/null 出错/null 出错信息/null 出镜/null 出门/null 出门子/null 出问题/null 出阁/null 出阵/null 出院/null 出险/null 出难题/null 出露/null 出面/null 出面交涉/null 出鞘/null 出顶/null 出项/null 出题/null 出风口/null 出风头/null 出饭/null 出首/null 出马/null 出高价/null 出齐/null 击中/null 击中要害/null 击乐器/null 击伤/null 击倒/null 击入/null 击刺/null 击剑/null 击剑者/null 击发/null 击向/null 击坠/null 击垮/null 击壤鼓腹/null 击声/null 击弦类/null 击弦类乐器/null 击弦贝斯/null 击打/null 击掌/null 击撞/null 击昏/null 击楫中流/null 击毁/null 击毙/null 击水/null 击沉/null 击溃/null 击玉敲金/null 击球/null 击球员/null 击破/null 击碎/null 击碎唾壶/null 击穿/null 击缶/null 击节/null 击节叹赏/null 击节称赏/null 击落/null 击败/null 击赏/null 击退/null 击钟/null 击钟陈鼎/null 击钟鼎食/null 击键/null 击鼓/null 击鼓鸣金/null 凼子/null 凼肥/null 函丈/null 函人/null 函令/null 函件/null 函作/null 函内/null 函办/null 函发/null 函告/null 函商/null 函大/null 函子/null 函式库/null 函授/null 函授大学/null 函授学校/null 函授教育/null 函授生/null 函授课程/null 函授部/null 函数/null 函数值/null 函电/null 函盖/null 函索/null 函询/null 函请/null 函调/null 函谷关/null 函购/null 函送法办/null 函馆/null 凿井/null 凿凿/null 凿凿可据/null 凿凿有据/null 凿刻/null 凿圆枘方/null 凿壁偷光/null 凿壁悬梁/null 凿子/null 凿孔/null 凿山/null 凿岩/null 凿岩机/null 凿开/null 凿成/null 凿枘/null 凿沟/null 凿洞/null 凿石/null 凿石场/null 凿空/null 凿空指鹿/null 凿穿/null 凿船虫/null 凿通/null 凿隧道/null 刀伤/null 刀俎/null 刀儿/null 刀光/null 刀光剑影/null 刀光血影/null 刀兵/null 刀具/null 刀刃/null 刀刺/null 刀刺性痛/null 刀削面/null 刀剑/null 刀割/null 刀匠/null 刀叉/null 刀口/null 刀叶/null 刀子/null 刀子嘴/null 刀子嘴巴/null 刀尖/null 刀山/null 刀山剑树/null 刀山火海/null 刀差/null 刀币/null 刀把/null 刀把儿/null 刀斧手/null 刀杆/null 刀枪/null 刀枪不入/null 刀枪入库/null 刀架/null 刀柄/null 刀械/null 刀法/null 刀片/null 刀疤/null 刀痕/null 刀笔/null 刀类/null 刀耕火种/null 刀耕火耨/null 刀背/null 刀螂/null 刀豆/null 刀身/null 刀郎/null 刀郎舞/null 刀锋/null 刀锯/null 刀锯斧钺/null 刀锯鼎镬/null 刀闸/null 刀面/null 刀鞘/null 刀马旦/null 刀鱼/null 刁圆/null 刁妇/null 刁悍/null 刁斗/null 刁民/null 刁滑/null 刁藩都/null 刁藩都方程/null 刁蛮/null 刁钻/null 刁钻古怪/null 刁难/null 刁顽/null 刃人/null 刃具/null 刃口/null 刃角/null 分不开/null 分不清/null 分业/null 分为/null 分之/null 分之一/null 分争/null 分享/null 分付/null 分会/null 分会场/null 分体/null 分作/null 分值/null 分做/null 分光/null 分光仪/null 分光计/null 分光谱/null 分光镜/null 分克/null 分公司/null 分兵把口/null 分兵把守/null 分内/null 分册/null 分出/null 分出来/null 分分/null 分分秒秒/null 分划/null 分列/null 分列式/null 分则/null 分别/null 分别为/null 分到/null 分割/null 分割区/null 分割高原/null 分力/null 分办/null 分包/null 分化/null 分化瓦解/null 分区/null 分区制/null 分升/null 分厂/null 分压/null 分压器/null 分厘卡/null 分叉/null 分叉处/null 分发/null 分发者/null 分取/null 分句/null 分号/null 分各部/null 分合/null 分在/null 分地/null 分场/null 分块/null 分外/null 分多/null 分头/null 分娩/null 分子/null 分子力/null 分子化合物/null 分子医学/null 分子式/null 分子杂交/null 分子溶液/null 分子物理学/null 分子状/null 分子生物学/null 分子电流/null 分子病/null 分子筛/null 分子结构/null 分子论/null 分子遗传学/null 分子量/null 分字法/null 分宜/null 分家/null 分寄/null 分寸/null 分封/null 分封制/null 分尸/null 分局/null 分层/null 分居/null 分屏/null 分属/null 分岔/null 分崩/null 分崩离析/null 分巡兵备道/null 分工/null 分布/null 分布区/null 分布图/null 分布学/null 分布广/null 分布式/null 分布式发展模型/null 分布式拒绝服务/null 分布式环境/null 分布式结构/null 分布式网络/null 分布控制/null 分布电容/null 分布连结网络/null 分帐/null 分带/null 分库/null 分店/null 分度/null 分度器/null 分度规/null 分庭伉礼/null 分庭抗礼/null 分开/null 分开了/null 分异/null 分式/null 分式方程/null 分张/null 分当/null 分录/null 分形/null 分形几何/null 分形几何学/null 分得/null 分得开/null 分得清/null 分心/null 分忧/null 分忧解愁/null 分成/null 分我杯羹/null 分户/null 分房/null 分所/null 分手/null 分手代理/null 分批/null 分担/null 分担者/null 分拆/null 分拣/null 分拨/null 分指数/null 分掉/null 分搁/null 分摊/null 分支/null 分散/null 分散主义/null 分散介质/null 分散剂/null 分散器/null 分散度/null 分散式/null 分散染料/null 分散注意/null 分散的策略/null 分散相/null 分数/null 分数挂帅/null 分文/null 分文不取/null 分斤掰两/null 分斤较两/null 分旬/null 分时/null 分时多工/null 分明/null 分星掰两/null 分星擘两/null 分晓/null 分月/null 分期/null 分期付款/null 分期分批/null 分机/null 分权/null 分权制衡/null 分析/null 分析人士/null 分析化学/null 分析员/null 分析器/null 分析处理/null 分析学/null 分析家/null 分析师/null 分析心理学/null 分析法/null 分析研究/null 分析者/null 分析语/null 分枝/null 分栏/null 分校/null 分桃/null 分档/null 分步骤/null 分歧/null 分歧点/null 分段/null 分段落/null 分母/null 分比/null 分毫/null 分毫不爽/null 分毫之差/null 分水岭/null 分水线/null 分治/null 分泌/null 分泌汗/null 分泌液/null 分泌物/null 分泌素/null 分泌颗粒/null 分法/null 分波多工/null 分洪/null 分派/null 分流/null 分流电路/null 分浅缘悭/null 分浅缘薄/null 分润/null 分清/null 分清敌我/null 分清是非/null 分灶/null 分点/null 分爨/null 分片/null 分片包干/null 分班/null 分理/null 分理处/null 分甘共苦/null 分生孢子/null 分生组织/null 分界/null 分界符/null 分界线/null 分相/null 分省/null 分社/null 分神/null 分离/null 分离主义/null 分离出/null 分离分子/null 分离器/null 分离性/null 分科/null 分秒/null 分秒必争/null 分租/null 分税/null 分税制/null 分立/null 分站/null 分等/null 分等级/null 分算/null 分管/null 分米/null 分米波/null 分类上/null 分类器/null 分类学/null 分类帐/null 分类汇总/null 分类法/null 分类理论/null 分类者/null 分类账/null 分粒器/null 分系统/null 分红/null 分级/null 分级分类/null 分线/null 分线规/null 分组/null 分组交换/null 分组会/null 分组循环/null 分组循环赛/null 分组赛/null 分给/null 分群/null 分而治之/null 分肥/null 分脏/null 分至点/null 分色/null 分色镜/null 分色镜头/null 分节/null 分节音/null 分节驳船队/null 分茅列土/null 分茅胙土/null 分获/null 分葱/null 分薄缘悭/null 分蘖/null 分蘖期/null 分蜜/null 分行/null 分表/null 分袂/null 分裂/null 分裂主义/null 分裂生殖/null 分裂组织/null 分装/null 分装机/null 分规/null 分角器/null 分解/null 分解代谢/null 分解作用/null 分解力/null 分解者/null 分论/null 分设/null 分词/null 分词器/null 分说/null 分谴/null 分贝/null 分账/null 分赃/null 分赴/null 分路/null 分路扬镳/null 分身/null 分身术/null 分轨/null 分辨/null 分辨不清/null 分辨出/null 分辨率/null 分辩/null 分辩率/null 分进合击/null 分述/null 分送/null 分选/null 分途/null 分道/null 分道扬镳/null 分遣/null 分遣队/null 分部/null 分配/null 分配人/null 分配器/null 分配律/null 分配权/null 分配者/null 分配阀/null 分野/null 分量/null 分针/null 分钗断带/null 分钟/null 分钱/null 分销/null 分销店/null 分销网络/null 分门/null 分门别户/null 分门别类/null 分队/null 分阴/null 分阶/null 分阶段/null 分际/null 分院/null 分隔/null 分隔栏/null 分隔符/null 分音/null 分音符/null 分页/null 分项/null 分频/null 分餐/null 分馏/null 分馏塔/null 分馏法/null 分香卖履/null 切下/null 切不/null 切不可/null 切中/null 切中时弊/null 切中时病/null 切中要害/null 切入/null 切分/null 切分信息/null 切分法/null 切分音/null 切切/null 切切实实/null 切切私语/null 切削/null 切削面/null 切割/null 切割机/null 切割物/null 切力/null 切勿/null 切去/null 切变/null 切变线/null 切口/null 切合/null 切合实际/null 切向/null 切向力/null 切向速度/null 切向量/null 切嘱/null 切圆/null 切块/null 切实/null 切实可行/null 切尔西/null 切尔诺贝利/null 切尼/null 切屑/null 切平面/null 切开/null 切当/null 切忌/null 切成/null 切成丝/null 切成块/null 切换/null 切掉/null 切断/null 切断者/null 切望/null 切末/null 切杆/null 切根虫/null 切激/null 切点/null 切片/null 切片机/null 切片检查/null 切牙/null 切特豪斯学校/null 切痛/null 切盼/null 切石术/null 切碎/null 切碎器/null 切磋/null 切磋琢磨/null 切空间/null 切纸/null 切线/null 切细/null 切结书/null 切肉/null 切肉刀/null 切肤/null 切肤之痛/null 切脉/null 切腹/null 切草/null 切莫/null 切菜/null 切菜刀/null 切要/null 切角/null 切角面/null 切触/null 切记/null 切诊/null 切责/null 切起/null 切距/null 切身/null 切身利益/null 切达/null 切近/null 切迫/null 切送/null 切除/null 切除术/null 切面/null 切音/null 切题/null 切骨之仇/null 切齿/null 切齿咬牙/null 切齿拊心/null 切齿痛恨/null 切齿腐心/null 刈包/null 刈羽/null 刊入/null 刊出/null 刊刻/null 刊印/null 刊发/null 刊号/null 刊后语/null 刊在/null 刊大/null 刊头/null 刊布/null 刊授/null 刊本/null 刊正/null 刊物/null 刊登/null 刊落/null 刊行/null 刊词/null 刊误/null 刊误表/null 刊载/null 刊首语/null 刍秣/null 刍粮/null 刍荛/null 刍议/null 刍豢/null 刎颈/null 刎颈之交/null 刎颈至交/null 刑书/null 刑事/null 刑事上/null 刑事侦察/null 刑事处分/null 刑事审判庭/null 刑事局/null 刑事拘留/null 刑事法/null 刑事法庭/null 刑事法院/null 刑事犯/null 刑事犯罪/null 刑事犯罪分子/null 刑事警察局/null 刑事诉讼法/null 刑事责任/null 刑人/null 刑令/null 刑侦/null 刑具/null 刑典/null 刑名/null 刑名之学/null 刑吏/null 刑场/null 刑堂/null 刑天/null 刑学/null 刑庭/null 刑律/null 刑戮/null 刑房/null 刑措不用/null 刑期/null 刑案/null 刑求/null 刑法/null 刑法学/null 刑满/null 刑网/null 刑罚/null 刑罚学/null 刑舂/null 刑警/null 刑警队/null 刑讯/null 刑诉法/null 刑辱/null 刑部/null 划一/null 划一不二/null 划上/null 划不来/null 划为/null 划价/null 划伤/null 划入/null 划出/null 划出划入/null 划分/null 划划/null 划动/null 划去/null 划回/null 划圆防守/null 划地为牢/null 划子/null 划定/null 划帐/null 划底线/null 划开/null 划归/null 划得/null 划得来/null 划成/null 划手/null 划抵/null 划拉/null 划拨/null 划拳/null 划掉/null 划时代/null 划板/null 划格线/null 划框框/null 划桨/null 划横线/null 划款/null 划水/null 划法/null 划浆/null 划清/null 划清界限/null 划渡/null 划点/null 划燃/null 划片/null 划独/null 划界/null 划界限/null 划痕/null 划着/null 划破/null 划等号/null 划策/null 划算/null 划粉/null 划线/null 划线人/null 划线板/null 划给/null 划船/null 划艇/null 划花/null 划行/null 划解/null 划记号/null 划转/null 划过/null 划进/null 划选/null 划销/null 列中/null 列为/null 列举/null 列于/null 列传/null 列位/null 列克星顿/null 列入/null 列兵/null 列出/null 列列/null 列别杰夫/null 列前/null 列印/null 列名/null 列国/null 列土分茅/null 列土封疆/null 列块/null 列夫・托尔斯泰/null 列女/null 列子/null 列宁/null 列宁主义/null 列宁格勒/null 列宗/null 列宽/null 列岛/null 列帐/null 列席/null 列席代表/null 列席会议/null 列式/null 列强/null 列当/null 列成/null 列成表/null 列报/null 列拱/null 列支/null 列支敦士登/null 列数/null 列明/null 列星/null 列有/null 列柜/null 列橱/null 列次/null 列氏温度计/null 列氏温标/null 列治文/null 列法/null 列王纪上/null 列王纪下/null 列王记上/null 列王记下/null 列示/null 列祖/null 列线/null 列缺/null 列缺霹雳/null 列表/null 列计/null 列记/null 列车/null 列车员/null 列车长/null 列队/null 列阵/null 列项/null 列鼎而食/null 刘云山/null 刘伯温/null 刘光第/null 刘公岛/null 刘剑峰/null 刘厚总/null 刘基/null 刘备/null 刘天华/null 刘奭/null 刘姥姥进大观园/null 刘安/null 刘宋/null 刘宋时代/null 刘宠刘宸起义/null 刘家夼/null 刘家夼镇/null 刘家村/null 刘家辉/null 刘宾雁/null 刘少奇/null 刘德华/null 刘心武/null 刘恒/null 刘昫/null 刘晓波/null 刘毅/null 刘洋/null 刘海/null 刘海儿/null 刘涓子/null 刘涓子鬼遗方/null 刘渊/null 刘熙/null 刘禅/null 刘禹锡/null 刘翔/null 刘表/null 刘裕/null 刘贵今/null 刘邦/null 刘金宝/null 刘青云/null 刘鹗/null 则个/null 则为/null 则从/null 则以/null 则否/null 则在/null 则声/null 则安之/null 则应/null 则废/null 则必有我师/null 则怎/null 则指/null 则是/null 则有/null 则步隆/null 则甚/null 则用/null 则由/null 则要/null 则辣黑/null 则需/null 刚一/null 刚从/null 刚体/null 刚体转动/null 刚健/null 刚入/null 刚出巢/null 刚出炉/null 刚出现/null 刚出生/null 刚刚/null 刚到/null 刚劲/null 刚勇/null 刚好/null 刚察/null 刚巧/null 刚度/null 刚开始/null 刚强/null 刚性/null 刚愎/null 刚愎自用/null 刚戾自用/null 刚才/null 刚来/null 刚果/null 刚果人/null 刚果民主共和国/null 刚果河/null 刚果红/null 刚架/null 刚柔/null 刚柔并济/null 刚柔相济/null 刚正/null 刚正不阿/null 刚毅/null 刚毅木讷/null 刚毛/null 刚烈/null 刚玉/null 刚生下/null 刚直/null 刚直不阿/null 刚石/null 刚砂/null 刚硬/null 刚离/null 刚褊自用/null 刚要/null 刚过/null 刚过去/null 刚钻/null 刚键/null 创一流/null 创下/null 创下高票房/null 创世/null 创世纪/null 创世记/null 创世论/null 创业/null 创业史/null 创业垂统/null 创业投资/null 创业板上市/null 创业精神/null 创业者/null 创举/null 创价学会/null 创优/null 创伤/null 创伤后/null 创伤后压力/null 创伤后压力紊乱/null 创作/null 创作部/null 创作室/null 创作人/null 创作员/null 创作力/null 创作思想/null 创作方法/null 创作经验/null 创作者/null 创作自由/null 创刊/null 创刊号/null 创利/null 创利税/null 创制/null 创制者/null 创办/null 创办人/null 创办者/null 创历/null 创历史最高水平/null 创历史最高纪录/null 创口/null 创可贴/null 创域/null 创始/null 创始人/null 创始者/null 创巨痛深/null 创建/null 创建组/null 创建者/null 创性/null 创意/null 创投基金/null 创收/null 创效/null 创新/null 创新精神/null 创新纪录/null 创新者/null 创汇/null 创汇额/null 创牌子/null 创痕/null 创痛/null 创立/null 创立人/null 创立者/null 创纪录/null 创获/null 创见/null 创见性/null 创议/null 创记录/null 创设/null 创造/null 创造力/null 创造学/null 创造性/null 创造条件/null 创造物/null 创造社/null 创造者/null 创造论/null 创面/null 初一/null 初七/null 初三/null 初上/null 初丧/null 初中/null 初中生/null 初为/null 初九/null 初二/null 初亏/null 初五/null 初交/null 初产/null 初伏/null 初估/null 初值/null 初八/null 初六/null 初具/null 初具规模/null 初写黄庭/null 初冬/null 初出/null 初出茅庐/null 初创/null 初创公司/null 初刻拍案惊奇/null 初加工/null 初十/null 初升/null 初叶/null 初唐/null 初四/null 初声/null 初夏/null 初头/null 初始/null 初始化/null 初婚/null 初学/null 初学者/null 初审/null 初小/null 初年/null 初度/null 初建/null 初开/null 初态/null 初恋/null 初恋感觉/null 初愿/null 初战/null 初战告捷/null 初探/null 初旬/null 初时/null 初映/null 初春/null 初更/null 初期/null 初来乍到/null 初查/null 初校/null 初次/null 初次用/null 初步/null 初步设想/null 初民/null 初演/null 初潮/null 初版/null 初犯/null 初现/null 初生/null 初生之犊/null 初生之犊不怕虎/null 初生之犊不畏虎/null 初生态/null 初生牛犊不怕虎/null 初看/null 初秋/null 初稿/null 初等/null 初等代数/null 初等教育/null 初等数学/null 初算/null 初级/null 初级中学/null 初级产品/null 初级小学/null 初级班/null 初级社/null 初级线圈/null 初级职称/null 初级读本/null 初级阶段/null 初纺/null 初衷/null 初见/null 初见成效/null 初设/null 初访/null 初评/null 初诊/null 初试/null 初试身手/null 初读/null 初赛/null 初进/null 初选/null 初速/null 初雪/null 初露/null 初露头角/null 初露才华/null 初露锋芒/null 删减/null 删削/null 删剪/null 删去/null 删掉/null 删改/null 删汰/null 删略/null 删简压缩/null 删繁就简/null 删节/null 删节号/null 删节本/null 删芜就简/null 删除/null 判上/null 判令/null 判优器/null 判例/null 判决/null 判决书/null 判决日/null 判刑/null 判别/null 判别式/null 判处/null 判官/null 判定/null 判据/null 判断/null 判断力/null 判断句/null 判断能力/null 判明/null 判明是非/null 判案/null 判然/null 判给/null 判罪/null 判若/null 判若两人/null 判若云泥/null 判若天渊/null 判若水火/null 判若鸿沟/null 判若黑白/null 判袂/null 判词/null 判读/null 判赔/null 判输/null 刨冰/null 刨刀/null 刨圆/null 刨子/null 刨工/null 刨平/null 刨床/null 刨根/null 刨根儿/null 刨根问底/null 刨根问底儿/null 刨片/null 刨程/null 刨花/null 刨花板/null 刨齿/null 利乐包/null 利事/null 利于/null 利人/null 利什曼原虫/null 利他/null 利他主义/null 利他林/null 利他灵/null 利他能/null 利他行为/null 利令智昏/null 利伯曼/null 利伯维尔/null 利兹/null 利刃/null 利剑/null 利勒哈默尔/null 利口捷给/null 利口酒/null 利古里亚/null 利嗦/null 利嘴/null 利器/null 利国/null 利国利民/null 利基/null 利多/null 利多弊少/null 利好/null 利害/null 利害关系/null 利害关系人/null 利害关系方/null 利害冲突/null 利害攸关/null 利宾纳/null 利导/null 利尔/null 利尿/null 利尿剂/null 利川/null 利差/null 利己/null 利己主义/null 利己癖/null 利市/null 利市三倍/null 利弊/null 利得/null 利得税/null 利息/null 利息率/null 利手/null 利改税/null 利时/null 利是/null 利未记/null 利权/null 利析秋毫/null 利欲/null 利欲心/null 利欲熏心/null 利比亚/null 利比利亚/null 利比里亚/null 利民/null 利津/null 利派/null 利润/null 利润率/null 利润留成/null 利爪/null 利物浦/null 利率/null 利玛窦/null 利用/null 利用人工吹气/null 利用率/null 利用系数/null 利益/null 利益集团/null 利眠/null 利眠宁/null 利眼/null 利禄/null 利禄薰心/null 利税/null 利税分流/null 利空/null 利索/null 利纳克斯/null 利缰名锁/null 利者/null 利落/null 利语/null 利诱/null 利贴/null 利辛/null 利通区/null 利钱/null 利锁名牵/null 利锁名缰/null 利隆圭/null 利雅得/null 利马/null 利马窦/null 利马索尔/null 利默里克/null 利齿/null 利齿伶牙/null 利齿能牙/null 别个/null 别了/null 别人/null 别传/null 别住/null 别做/null 别傻了/null 别克/null 别具一格/null 别具匠心/null 别具只眼/null 别具炉锤/null 别具特色/null 别再/null 别出心裁/null 别出机杼/null 别别扭扭/null 别动/null 别动队/null 别去/null 别史/null 别号/null 别名/null 别后/null 别吵/null 别哭/null 别喊/null 别嘴/null 别国/null 别在/null 别地/null 别墅/null 别处/null 别太客气/null 别子/null 别字/null 别客气/null 别开/null 别开生面/null 别式/null 别心/null 别急/null 别恋/null 别愁离恨/null 别意/null 别打扰我/null 别扣/null 别扭/null 别扯/null 别把/null 别择/null 别提/null 别提了/null 别无/null 别无二致/null 别无他法/null 别无他物/null 别无他用/null 别无出路/null 别无所求/null 别无选择/null 别无长物/null 别是/null 别有/null 别有天地/null 别有洞天/null 别有用心/null 别有肺肠/null 别有韵味/null 别有风味/null 别来无恙/null 别树一帜/null 别树一旗/null 别样/null 别法/null 别犯傻/null 别理/null 别用/null 别的/null 别看/null 别着急/null 别离/null 别称/null 别筵/null 别管/null 别类/null 别紧/null 别紧张/null 别绪/null 别耽搁/null 别胡说了/null 别胡闹/null 别脸/null 别致/null 别论/null 别词/null 别说/null 别赫捷列夫/null 别走/null 别辞/null 别针/null 别集/null 别风淮雨/null 别骂/null 别鹤孤鸾/null 别鹤离鸾/null 刮伤/null 刮光/null 刮出/null 刮刀/null 刮刮/null 刮刮卡/null 刮刮叫/null 刮削/null 刮勺/null 刮匙/null 刮去/null 刮在/null 刮地皮/null 刮垢磨光/null 刮大风/null 刮宫/null 刮平/null 刮弧/null 刮得/null 刮打扁儿/null 刮掉/null 刮毛/null 刮痧/null 刮皮/null 刮皮刀/null 刮目/null 刮目相待/null 刮目相看/null 刮目相视/null 刮破/null 刮肠洗胃/null 刮胡刀/null 刮胡子/null 刮脸/null 刮脸皮/null 刮舌/null 刮舌子/null 刮起/null 刮过/null 刮钱/null 刮铲/null 刮除/null 刮风/null 刮风下雨/null 刮骨/null 刮骨刀/null 刮鼻子/null 到一起/null 到上面/null 到下/null 到不行/null 到中途/null 到之/null 到了/null 到了儿/null 到人/null 到今/null 到今天为止/null 到任/null 到会/null 到位/null 到国外/null 到场/null 到处/null 到处可见/null 到头/null 到头来/null 到家/null 到尾/null 到岸/null 到岸价/null 到差/null 到底/null 到庭/null 到户/null 到手/null 到手软/null 到数/null 到旁边/null 到时/null 到时候/null 到时候再说/null 到有/null 到期/null 到期收益率/null 到期日/null 到本世纪末/null 到来/null 到某处/null 到校/null 到案/null 到此/null 到此为止/null 到此处/null 到港/null 到点/null 到现在/null 到现在为止/null 到目前/null 到目前为止/null 到站/null 到群众中去/null 到者/null 到职/null 到自/null 到访/null 到货/null 到达/null 到达大厅/null 到达站/null 到达者/null 到过/null 到这/null 到那/null 到那个时候/null 到那里/null 到顶/null 到齐/null 制件/null 制伏/null 制住/null 制作/null 制作人/null 制作商/null 制作所/null 制作者/null 制假/null 制做/null 制冰/null 制冷/null 制冷剂/null 制冷器/null 制冷机/null 制剂/null 制动/null 制动器/null 制动机/null 制动踏板/null 制动闸/null 制单/null 制取/null 制品/null 制售/null 制图/null 制图人/null 制图员/null 制图学/null 制图法/null 制备/null 制定/null 制宪/null 制宪会议/null 制导/null 制导技术/null 制导武器/null 制币/null 制度/null 制度上/null 制度化/null 制式/null 制式化/null 制式教练/null 制得/null 制成/null 制成品/null 制成皮/null 制敌/null 制景/null 制服/null 制服呢/null 制板机/null 制止/null 制止动乱/null 制止物/null 制止者/null 制气/null 制法/null 制海权/null 制热/null 制片/null 制片人/null 制片厂/null 制版/null 制盐/null 制程/null 制空/null 制空权/null 制糖/null 制糖厂/null 制约/null 制约力/null 制胜/null 制胜因素/null 制艺/null 制药/null 制药业/null 制药企业/null 制药厂/null 制药者/null 制衡/null 制霸/null 制衣/null 制表/null 制表业/null 制表符/null 制表键/null 制裁/null 制订/null 制造/null 制造业/null 制造业者/null 制造厂/null 制造品/null 制造商/null 制造学/null 制造所/null 制造者/null 制钉者/null 制钱/null 制门器/null 制陶/null 制陶工人/null 制革/null 制革厂/null 制鞋/null 制鞋匠/null 制鞋工人/null 制高点/null 制黄/null 制黄贩黄/null 刷上/null 刷写/null 刷卡/null 刷卡机/null 刷去/null 刷子/null 刷拉/null 刷新/null 刷新纪录/null 刷机/null 刷洗/null 刷漆/null 刷爆/null 刷牙/null 刷白/null 刷磅/null 刷色/null 券别/null 券商/null 券种/null 券面/null 刹不住/null 刹住/null 刹把/null 刹时/null 刹车/null 刹车灯/null 刹那/null 刹那间/null 刺丛/null 刺丝囊/null 刺丝胞/null 刺丝胞动物/null 刺中/null 刺五加/null 刺人/null 刺伤/null 刺住/null 刺儿/null 刺儿头/null 刺儿李/null 刺儿菜/null 刺儿话/null 刺入/null 刺出/null 刺刀/null 刺刑/null 刺刺/null 刺刺不休/null 刺参/null 刺取/null 刺史/null 刺孔/null 刺字/null 刺客/null 刺开/null 刺戟/null 刺戳/null 刺挠/null 刺捕/null 刺探/null 刺探者/null 刺杀/null 刺柏/null 刺桐/null 刺棱/null 刺槐/null 刺死/null 刺毛辊/null 刺溜/null 刺激/null 刺激剂/null 刺激启动不同步/null 刺激性/null 刺激性毒剂/null 刺激物/null 刺激素/null 刺激者/null 刺猬/null 刺画/null 刺痒/null 刺痕/null 刺痛/null 刺目/null 刺眼/null 刺破/null 刺穿/null 刺绣/null 刺绣品/null 刺网/null 刺耳/null 刺股/null 刺股悬梁/null 刺胞/null 刺胞动物/null 刺芹菇/null 刺苋/null 刺身/null 刺进/null 刺透/null 刺配/null 刺针/null 刺钢丝/null 刺青/null 刺骨/null 刺骨悬梁/null 刺鼻/null 刻上/null 刻下/null 刻不容缓/null 刻丝/null 刻为/null 刻了/null 刻于/null 刻其/null 刻写/null 刻出/null 刻刀/null 刻划/null 刻制/null 刻印/null 刻在/null 刻字/null 刻度/null 刻度尺/null 刻度盘/null 刻录/null 刻录机/null 刻意/null 刻意为之/null 刻意求工/null 刻成/null 刻有/null 刻木为吏/null 刻本/null 刻板/null 刻板印象/null 刻毒/null 刻版/null 刻版印刷/null 刻物/null 刻画/null 刻画无盐/null 刻痕/null 刻纹/null 刻线/null 刻细/null 刻肌刻骨/null 刻舟/null 刻舟求剑/null 刻苦/null 刻苦努力/null 刻苦学习/null 刻苦耐劳/null 刻苦自励/null 刻苦钻研/null 刻薄/null 刻薄话/null 刻蚀/null 刻记/null 刻足适屦/null 刻钟/null 刻骨/null 刻骨相思/null 刻骨铭心/null 刻骨镂心/null 刻鹄类鹜/null 刽子手/null 剀切/null 剁斧石/null 剁碎/null 剁者/null 剂型/null 剂子/null 剂量/null 剂量学/null 剂量当量/null 剂量效应/null 剂量监控/null 剂量监督/null 剃光/null 剃光头/null 剃刀/null 剃刀鲸/null 剃发/null 剃发令/null 剃发留辫/null 剃头/null 剃度/null 剃掉/null 剃枝虫/null 剃着/null 剃胡刀/null 剃须/null 剃须刀/null 剃须膏/null 削下/null 削价/null 削减/null 削击/null 削刮/null 削去/null 削发/null 削壁/null 削尖/null 削平/null 削弱/null 削成/null 削打/null 削掉/null 削整/null 削方为圆/null 削木为吏/null 削水/null 削球/null 削皮/null 削皮器/null 削磨/null 削籍/null 削职/null 削职为民/null 削薄/null 削薄片/null 削角/null 削觚为圆/null 削足适履/null 削趾适屦/null 削铁如泥/null 削铅笔机/null 削除/null 削除者/null 削面/null 剌柏/null 剌破/null 剌细胞/null 剌谬/null 前一/null 前一刻/null 前一向/null 前一天/null 前一年/null 前一段/null 前一段时间/null 前三名/null 前不久/null 前不见古人/null 前世/null 前世姻缘/null 前事/null 前事不忘/null 前事不忘后事之师/null 前些/null 前些天/null 前些年/null 前些时候/null 前人/null 前人栽树/null 前人栽树后任乘凉/null 前仆后继/null 前仆后起/null 前仇/null 前代/null 前仰后合/null 前件/null 前任/null 前任者/null 前传/null 前体/null 前作/null 前例/null 前信号灯/null 前俯后仰/null 前倒/null 前倨后卑/null 前倨后恭/null 前倾/null 前儿/null 前元音/null 前兆/null 前冠/null 前凉/null 前几天/null 前几年/null 前列/null 前列腺/null 前列腺炎/null 前列腺素/null 前前后后/null 前功/null 前功尽弃/null 前功尽灭/null 前半场/null 前半夜/null 前半天/null 前半天儿/null 前半晌/null 前半晌儿/null 前半部/null 前卫/null 前卫战/null 前厅/null 前去/null 前台/null 前史/null 前同/null 前后/null 前后左右/null 前后文/null 前后矛盾/null 前向拥塞通知/null 前呼/null 前呼后仰/null 前呼后偃/null 前呼后拥/null 前咽/null 前哨/null 前哨战/null 前哨阵地/null 前因/null 前因后果/null 前场/null 前坡/null 前堂/null 前处/null 前夕/null 前夜/null 前大灯/null 前天/null 前夫/null 前头/null 前奏/null 前奏曲/null 前妻/null 前委/null 前嫌/null 前寒/null 前寒武纪/null 前导/null 前尘/null 前尘影事/null 前层/null 前屈/null 前岸/null 前年/null 前度刘郎/null 前庭/null 前庭窗/null 前廊/null 前往/null 前怕狼/null 前怕狼后怕虎/null 前思后想/null 前总理/null 前总统/null 前情/null 前愆/null 前意识/null 前戏/null 前房/null 前房角/null 前所/null 前所未有/null 前所未有的/null 前所未见/null 前所未闻/null 前排/null 前掠翼/null 前推/null 前提/null 前提下/null 前提条件/null 前揭/null 前摆/null 前政府/null 前敌/null 前文/null 前方/null 前旋肌/null 前无/null 前无古人/null 前无古人后无来者/null 前日/null 前晌/null 前晚/null 前景/null 前景可期/null 前月/null 前有/null 前朝/null 前期/null 前条/null 前来/null 前松后紧/null 前柱式/null 前桅/null 前桥/null 前次/null 前款/null 前歌后舞/null 前此/null 前殉后继/null 前段/null 前段时间/null 前汉/null 前汉书/null 前沿/null 前清后欠/null 前滚翻/null 前滩/null 前灯/null 前燕/null 前片/null 前生/null 前生冤孽/null 前生召唤/null 前甲板/null 前看/null 前瞻/null 前瞻性/null 前磨齿/null 前科/null 前科犯/null 前秦/null 前程/null 前程万里/null 前程远大/null 前空翻/null 前站/null 前端/null 前紧后松/null 前线/null 前缀/null 前缘未了/null 前置/null 前置词/null 前翅/null 前者/null 前肢/null 前胸/null 前脑/null 前脚/null 前腿/null 前臂/null 前臼齿/null 前舞台/null 前舱/null 前苏联/null 前茅/null 前行/null 前襟/null 前言/null 前言不搭后语/null 前词典语音加工/null 前词汇加工/null 前词汇语音加工/null 前词汇阶段/null 前贤/null 前走/null 前赴后继/null 前赵/null 前足/null 前跑/null 前蹄/null 前身/null 前车/null 前车主/null 前车之覆/null 前车之鉴/null 前车可鉴/null 前转/null 前轮/null 前轴/null 前辈/null 前辍/null 前边/null 前边儿/null 前进/null 前进区/null 前述/null 前途/null 前途广阔/null 前途无量/null 前途未卜/null 前途渺茫/null 前遮后拥/null 前部/null 前部皮层下损伤/null 前郭县/null 前郭镇/null 前金/null 前金区/null 前锋/null 前锯肌/null 前镇/null 前镇区/null 前门/null 前门打虎/null 前门拒虎/null 前门拒虎后门进狼/null 前院/null 前震/null 前面/null 前项/null 前题/null 前额/null 前首相/null 前驱/null 前驱性/null 前鼻音/null 前齿/null 前齿龈/null 剑侠/null 剑光/null 剑兰/null 剑客/null 剑尖/null 剑川/null 剑形/null 剑影逃形/null 剑怨求媚/null 剑手/null 剑手待毙/null 剑拔弩张/null 剑拔驽张/null 剑术/null 剑术师/null 剑柄/null 剑树刀山/null 剑桥/null 剑桥大学/null 剑桥郡/null 剑气/null 剑河/null 剑法/null 剑状/null 剑眉/null 剑胆琴心/null 剑走偏锋/null 剑走蜻蛉/null 剑身/null 剑道/null 剑阁/null 剑鞘/null 剑鱼座/null 剑麻/null 剑齿虎/null 剑齿象/null 剑龙/null 剔出/null 剔去/null 剔庄货/null 剔牙/null 剔红/null 剔蝎撩蜂/null 剔透/null 剔除/null 剔骨/null 剖决如流/null 剖宫产/null 剖宫产手术/null 剖开/null 剖心析肝/null 剖心沥肝/null 剖明/null 剖析/null 剖析器/null 剖比/null 剖白/null 剖肝沥胆/null 剖腹/null 剖腹产/null 剖腹产手术/null 剖腹术/null 剖腹自杀/null 剖腹藏珠/null 剖视/null 剖视图/null 剖解/null 剖辩/null 剖释/null 剖面/null 剖面图/null 剜肉补疮/null 剞劂/null 剥下/null 剥光/null 剥出/null 剥削/null 剥削制度/null 剥削者/null 剥削阶级/null 剥剥/null 剥去/null 剥啄/null 剥壳/null 剥夺/null 剥夺人权/null 剥夺政治权利终身/null 剥开/null 剥掉/null 剥皮/null 剥皮器/null 剥离/null 剥肤椎髓/null 剥脱/null 剥脱性皮炎/null 剥落/null 剥蚀/null 剥采比/null 剥除/null 剧中/null 剧中人/null 剧体/null 剧作/null 剧作家/null 剧减/null 剧务/null 剧协/null 剧变/null 剧团/null 剧场/null 剧坛/null 剧增/null 剧情/null 剧挫/null 剧曲/null 剧本/null 剧本稿/null 剧校/null 剧毒/null 剧烈/null 剧照/null 剧痛/null 剧的/null 剧目/null 剧社/null 剧种/null 剧组/null 剧终/null 剧评/null 剧跌/null 剧跳/null 剧透/null 剧里/null 剧院/null 剩下/null 剩余/null 剩余产品/null 剩余价值/null 剩余价值率/null 剩余价值规律/null 剩余劳力/null 剩余劳动/null 剩余劳动力/null 剩余定理/null 剩余放射性/null 剩余物/null 剩余辐射/null 剩女/null 剩料/null 剩水残山/null 剩物/null 剩磁/null 剩菜/null 剩词/null 剩货/null 剩遗/null 剩钱/null 剩饭/null 剪䌽/null 剪下/null 剪修/null 剪出/null 剪刀/null 剪刀差/null 剪切/null 剪切力/null 剪切块/null 剪切形变/null 剪切板/null 剪力/null 剪去/null 剪发/null 剪取/null 剪头发/null 剪子/null 剪字/null 剪床/null 剪应力/null 剪开/null 剪彩/null 剪影/null 剪径/null 剪恶除奸/null 剪成/null 剪报/null 剪掉/null 剪接/null 剪断/null 剪枝/null 剪枝竭流/null 剪毛/null 剪毛机/null 剪烛西窗/null 剪画/null 剪着/null 剪短/null 剪砍/null 剪票/null 剪秋萝/null 剪纸/null 剪纸片/null 剪纸片儿/null 剪羊/null 剪羊毛/null 剪草/null 剪草机/null 剪草除根/null 剪裁/null 剪贴/null 剪贴板/null 剪贴簿/null 剪辑/null 剪过/null 剪除/null 剪须和药/null 剪齐/null 副业/null 副主任/null 副主席/null 副主教/null 副主祭/null 副主管/null 副主编/null 副书记/null 副井/null 副交感神经/null 副产/null 副产品/null 副产物/null 副代表/null 副件/null 副伤寒/null 副作用/null 副修/null 副关节/null 副净/null 副刊/null 副医师/null 副印/null 副厅长/null 副县长/null 副参谋长/null 副反应/null 副司令/null 副司令员/null 副司长/null 副品/null 副团长/null 副国务卿/null 副地级市/null 副堂/null 副处长/null 副外长/null 副委员/null 副委员长/null 副官/null 副官职/null 副审/null 副将/null 副局长/null 副州长/null 副市长/null 副性征/null 副总/null 副总参谋长/null 副总工程师/null 副总理/null 副总督/null 副总经理/null 副总统/null 副总编/null 副总编辑/null 副总裁/null 副手/null 副执事/null 副教授/null 副族元素/null 副本/null 副标/null 副标题/null 副校长/null 副歌/null 副法向量/null 副热带/null 副热带高压/null 副理事长/null 副甲/null 副监督/null 副相/null 副省级/null 副省级城市/null 副省长/null 副研/null 副研究员/null 副社长/null 副神经/null 副科长/null 副秘书长/null 副站长/null 副线/null 副线圈/null 副组长/null 副经理/null 副编审/null 副署/null 副翼/null 副职/null 副联/null 副肾/null 副药/null 副虹/null 副议长/null 副证/null 副词/null 副译审/null 副郡长/null 副部长/null 副院长/null 副领事/null 副题/null 副食/null 副食品/null 副馆长/null 副驾驶/null 副驾驶员/null 副黏液病毒/null 割下/null 割伤/null 割切/null 割包皮/null 割去/null 割取/null 割地/null 割席/null 割席分坐/null 割开/null 割息/null 割据/null 割掉/null 割接/null 割接法/null 割断/null 割法/null 割爱/null 割痕/null 割破/null 割碎/null 割礼/null 割离/null 割稻/null 割线/null 割绒/null 割肚牵肠/null 割股/null 割胶/null 割腱术/null 割臂盟公/null 割舍/null 割草/null 割草机/null 割蜜/null 割袍断义/null 割裂/null 割让/null 割除/null 割颈/null 割鸡焉用牛刀/null 割麦/null 剽原/null 剽取/null 剽悍/null 剽窃/null 剽窃者/null 剿共/null 剿匪/null 剿灭/null 剿袭/null 剿说/null 剿除/null 劈刀/null 劈刺/null 劈叉/null 劈啪/null 劈天盖地/null 劈头/null 劈头盖脸/null 劈山/null 劈开/null 劈得开/null 劈情操/null 劈手/null 劈拍/null 劈拍声/null 劈挂拳/null 劈柴/null 劈死/null 劈波斩浪/null 劈痕/null 劈砍/null 劈离/null 劈空扳害/null 劈胸/null 劈脸/null 劈腿/null 劈裂/null 劈里啪啦/null 劈面/null 劈风斩浪/null 劓刑/null 力不从心/null 力不从愿/null 力不副心/null 力不同科/null 力不自胜/null 力不足/null 力主/null 力争/null 力争上游/null 力传递/null 力作/null 力促/null 力保/null 力倍功半/null 力做/null 力偶/null 力克/null 力分势弱/null 力创/null 力劝/null 力及/null 力困筋乏/null 力图/null 力场/null 力均势敌/null 力士/null 力大无比/null 力大无穷/null 力学/null 力学传递/null 力学波/null 力学笃行/null 力宝/null 力尽/null 力尽神危/null 力尽筋疲/null 力屈势穷/null 力屈计穷/null 力屈道穷/null 力差/null 力巴/null 力度/null 力弱/null 力强/null 力征/null 力微/null 力微任重/null 力心/null 力感/null 力戒/null 力战/null 力所能及/null 力拓/null 力持/null 力挫/null 力挫群雄/null 力挺/null 力挽狂澜/null 力捧/null 力排/null 力排众议/null 力攻/null 力敌万夫/null 力敌势均/null 力殚财竭/null 力气/null 力气活/null 力求/null 力波/null 力派/null 力济九区/null 力点/null 力畜/null 力矩/null 力竭/null 力竭声嘶/null 力系/null 力臂/null 力荐/null 力薄才疏/null 力行/null 力行近乎仁/null 力衰/null 力解/null 力谋/null 力足以做/null 力距/null 力蹙势穷/null 力透纸背/null 力道/null 力避/null 力量/null 力量均衡/null 力量大/null 力量对比/null 力钱/null 力阻/null 力陈/null 劝业场/null 劝人/null 劝住/null 劝农/null 劝农使/null 劝动/null 劝勉/null 劝募/null 劝化/null 劝告/null 劝告者/null 劝和/null 劝善/null 劝善惩恶/null 劝善戒恶/null 劝善黜恶/null 劝学/null 劝导/null 劝得/null 劝慰/null 劝戒/null 劝教/null 劝服/null 劝架/null 劝止/null 劝百讽一/null 劝解/null 劝解者/null 劝诫/null 劝诱/null 劝说/null 劝说者/null 劝课/null 劝谏/null 劝进/null 劝退/null 劝酒/null 劝阻/null 劝降/null 劝驾/null 办不到/null 办不成/null 办事/null 办事员/null 办事处/null 办事效率/null 办事机构/null 办公/null 办公会议/null 办公厅/null 办公地址/null 办公处/null 办公大楼/null 办公室/null 办公时间/null 办公桌/null 办公桌轮用/null 办公楼/null 办公用品/null 办公自动化/null 办公设备/null 办公费/null 办几件实事/null 办到/null 办厂/null 办好/null 办妥/null 办学/null 办学条件/null 办完/null 办实事/null 办差/null 办得到/null 办得成/null 办成/null 办报/null 办文/null 办案/null 办法/null 办班/null 办理/null 办矿/null 办税/null 办稿/null 办罪/null 办证/null 办货/null 办起/null 办错/null 办错事/null 功不可没/null 功业/null 功于/null 功亏一篑/null 功亏一蒉/null 功令/null 功利/null 功利主义/null 功到自然成/null 功力/null 功力深湛/null 功劳/null 功勋/null 功同赏异/null 功名/null 功名利禄/null 功均天地/null 功堕垂成/null 功大于过/null 功夫/null 功夫球/null 功夫茶/null 功完行满/null 功就名成/null 功底/null 功德/null 功德圆满/null 功德无量/null 功成不居/null 功成名就/null 功成名立/null 功成名遂/null 功成行满/null 功成身退/null 功放/null 功效/null 功烈/null 功狗功人/null 功率/null 功率因数/null 功率恶化/null 功率输出/null 功用/null 功绩/null 功罪/null 功耗/null 功能/null 功能上/null 功能团/null 功能性/null 功能模块/null 功能磁共振成像术/null 功能群/null 功能表/null 功能词/null 功能键/null 功能集/null 功臣/null 功课/null 功败垂成/null 功过/null 功遂身退/null 功高不赏/null 功高望重/null 功高绩著/null 加上/null 加下/null 加下标/null 加之/null 加了/null 加于/null 加些/null 加亮/null 加人一等/null 加仑/null 加仑量/null 加付/null 加以/null 加以分析/null 加以改进/null 加以解决/null 加价/null 加俸/null 加倍/null 加倍大/null 加值/null 加值型网路/null 加入/null 加入者/null 加兹尼/null 加兹尼省/null 加冕/null 加农/null 加农榴弹炮/null 加农炮/null 加冠/null 加冰/null 加冰块/null 加减/null 加减乘除/null 加减号/null 加减法/null 加刑/null 加删/null 加利利/null 加利福尼亚/null 加利福尼亚大学/null 加利福尼亚大学洛杉矶分校/null 加利福尼亚州/null 加利福尼亚理工学院/null 加利肋亚/null 加利西亚/null 加到/null 加前缀/null 加剧/null 加力/null 加加/null 加加林/null 加劲/null 加劲儿/null 加勒比/null 加勒比人/null 加勒比国家联盟/null 加勒比海/null 加印/null 加压/null 加压釜/null 加厚/null 加号/null 加号码/null 加吉鱼/null 加固/null 加国/null 加在/null 加在一起/null 加塞/null 加塞儿/null 加增/null 加外框/null 加多/null 加大/null 加大力度/null 加大努力/null 加大油门/null 加央/null 加套/null 加委/null 加官/null 加官晋爵/null 加官晋级/null 加官进位/null 加官进爵/null 加官进禄/null 加害/null 加害于/null 加宽/null 加密/null 加密后的/null 加密套接字协议层/null 加封/null 加封官阶/null 加尔各答/null 加尔文/null 加尾词/null 加州/null 加州大学/null 加州技术学院/null 加州理工学院/null 加工/null 加工业/null 加工厂/null 加工工业/null 加工成本/null 加工效率/null 加工时序/null 加工贸易/null 加座/null 加引号/null 加强/null 加强团结/null 加强管制/null 加强管理/null 加征/null 加德士/null 加德满都/null 加德纳/null 加德西/null 加快/null 加急/null 加急电报/null 加总/null 加息/null 加意/null 加成/null 加成反应/null 加护/null 加拉加斯/null 加拉太书/null 加拉巴哥斯/null 加拉巴哥斯群岛/null 加拉帕戈斯群岛/null 加拉罕/null 加括号/null 加拿大人/null 加拿大太平洋铁路/null 加拿大皇家/null 加拿大皇家海军/null 加收/null 加数/null 加料/null 加时/null 加星号/null 加有/null 加权/null 加权平均/null 加来/null 加来海峡/null 加枝添叶/null 加查/null 加标签/null 加标记/null 加格达奇/null 加格达奇区/null 加框/null 加气/null 加气水泥/null 加氢/null 加氢油/null 加水/null 加沙/null 加沙地带/null 加油/null 加油器/null 加油工/null 加油添醋/null 加油站/null 加法/null 加法器/null 加注/null 加泰罗尼亚/null 加洗/null 加派/null 加润/null 加深/null 加深印象/null 加深理解/null 加添/null 加温/null 加湿器/null 加满/null 加演/null 加点/null 加热/null 加热器/null 加热炉/null 加煤/null 加物/null 加特林/null 加特林机枪/null 加班/null 加班加点/null 加班费/null 加甜/null 加百列/null 加的夫/null 加的斯/null 加盐/null 加盖/null 加盖于/null 加盟/null 加盟共和国/null 加盟者/null 加码/null 加税/null 加答儿/null 加粗/null 加糖/null 加紧/null 加级鱼/null 加纳/null 加纳人/null 加练/null 加给/null 加罗林群岛/null 加罚/null 加罪/null 加聚反应/null 加膝坠渊/null 加航/null 加色/null 加药物/null 加菜/null 加菲猫/null 加蓬/null 加蓬人/null 加薪/null 加藤/null 加衬垫/null 加装/null 加西亚/null 加记/null 加试/null 加课/null 加赛/null 加足/null 加足马力/null 加车/null 加载/null 加载项/null 加达里/null 加进/null 加速/null 加速仪/null 加速剂/null 加速器/null 加速度/null 加速档/null 加速者/null 加速踏板/null 加速运动/null 加那利群岛/null 加酒/null 加醋/null 加里/null 加里宁格勒/null 加里宁格勒州/null 加里曼丹/null 加里曼丹岛/null 加里波第/null 加里肋亚/null 加里肋亚海/null 加重/null 加重语气/null 加锁/null 加锁链/null 加长/null 加长型/null 加鞭/null 加餐/null 加高/null 务使/null 务公/null 务农/null 务商/null 务实/null 务实去华/null 务尽/null 务川/null 务川仡佬族苗族自治县/null 务川县/null 务川自治县/null 务工/null 务当/null 务必/null 务时/null 务期/null 务本/null 务本力穑/null 务本抑末/null 务正/null 务求/null 务派/null 务生/null 务虚/null 务请/null 务须/null 劣作/null 劣势/null 劣品/null 劣地/null 劣学生/null 劣币驱逐良币/null 劣弧/null 劣株/null 劣根性/null 劣汰/null 劣画/null 劣种/null 劣等/null 劣等纸/null 劣绅/null 劣者/null 劣行/null 劣诗/null 劣货/null 劣质/null 劣质品/null 劣迹/null 劣迹斑斑/null 劣迹昭著/null 劣酒/null 劣马/null 动不动/null 动之以情/null 动乱/null 动了/null 动产/null 动人/null 动人心弦/null 动人心魄/null 动众/null 动作/null 动作学/null 动作片/null 动兵/null 动刑/null 动力/null 动力化/null 动力反应堆/null 动力学/null 动力室/null 动力机/null 动力系统/null 动力计/null 动动/null 动劲儿/null 动势/null 动口/null 动名词/null 动向/null 动听/null 动员/null 动员令/null 动员会/null 动员大会/null 动员群众/null 动嘴/null 动嘴皮/null 动嘴皮儿/null 动嘴皮子/null 动因/null 动土/null 动地惊天/null 动如参商/null 动如脱兔/null 动容/null 动宾/null 动宾式/null 动工/null 动平衡/null 动弹/null 动弹不得/null 动心/null 动心娱目/null 动心忍性/null 动心怵目/null 动心骇目/null 动念/null 动态/null 动态助词/null 动态图形/null 动态存储器/null 动态平衡/null 动态影像/null 动态更新/null 动态网页/null 动态规划/null 动态链接库/null 动怒/null 动悟/null 动情/null 动情期/null 动情激素/null 动情素/null 动感/null 动手/null 动手动脚/null 动手术/null 动手脚/null 动换/null 动摇/null 动支/null 动机/null 动植物/null 动植物分类/null 动武/null 动气/null 动滑轮/null 动漫/null 动火/null 动点/null 动物/null 动物似/null 动物农场/null 动物分类/null 动物化/null 动物园/null 动物学/null 动物庄园/null 动物志/null 动物性/null 动物性名词/null 动物性饲料/null 动物所/null 动物极/null 动物毒素/null 动物油/null 动物淀粉/null 动物界/null 动物病/null 动物纤维/null 动物脂肪/null 动用/null 动电学/null 动画/null 动画影片/null 动画片/null 动画片儿/null 动眼神经/null 动着/null 动笔/null 动粗/null 动肝火/null 动能/null 动能车/null 动脉/null 动脉弓/null 动脉炎/null 动脉状/null 动脉瘤/null 动脉硬化/null 动脉粥样硬化/null 动脉血/null 动脉输血/null 动脑/null 动脑筋/null 动荡/null 动荡不安/null 动见观瞻/null 动觉/null 动议/null 动词/null 动词化/null 动词结构/null 动词重叠/null 动身/null 动车/null 动转/null 动轮/null 动辄/null 动辄得咎/null 动量/null 动量守恒定律/null 动量矩/null 动量词/null 动问/null 动静/null 动魄/null 动魄惊心/null 动L/null 助于/null 助产/null 助产士/null 助产术/null 助人/null 助人为乐/null 助人为快乐之本/null 助作/null 助兴/null 助剂/null 助力/null 助动词/null 助动车/null 助听/null 助听器/null 助员/null 助咳/null 助威/null 助学/null 助学贷款/null 助学金/null 助工/null 助帆/null 助您/null 助成/null 助我/null 助我张目/null 助战/null 助手/null 助手席/null 助推器/null 助攻/null 助教/null 助桀为虐/null 助残/null 助消化/null 助熔剂/null 助燃/null 助理/null 助理员/null 助理工程师/null 助益/null 助研/null 助纣为虐/null 助编/null 助航/null 助记方法/null 助记符/null 助词/null 助跑/null 助选/null 助选活动/null 助长/null 助阵/null 助飞/null 助飞器/null 助餐/null 努出/null 努力/null 努力以赴/null 努努嘴/null 努劲儿/null 努嘴/null 努嘴儿/null 努尔哈赤/null 努比亚/null 努牙突嘴/null 努瓦克肖特/null 努纳武特/null 努责/null 劫九回断/null 劫九回肠/null 劫余/null 劫出/null 劫匪/null 劫去/null 劫取/null 劫后/null 劫后余生/null 劫后重逢/null 劫囚/null 劫夺/null 劫富/null 劫富济贫/null 劫寨/null 劫持/null 劫持犯/null 劫持者/null 劫掠/null 劫数/null 劫数难逃/null 劫机/null 劫机者/null 劫杀/null 劫案/null 劫波/null 劫洗/null 劫狱/null 劫盗/null 劫者/null 劫船/null 劫获/null 劫营/null 劫走/null 劫车/null 劫道/null 劫难/null 劬劳/null 励志/null 励志哥/null 励磁/null 励精图治/null 励精求治/null 励行/null 劲儿/null 劲力/null 劲卒/null 劲吹/null 劲地/null 劲头/null 劲射/null 劲峭/null 劲度系数/null 劲急/null 劲打/null 劲拉/null 劲拔/null 劲挺/null 劲敌/null 劲旅/null 劲松/null 劲烈/null 劲直/null 劲草/null 劲风/null 劲骨丰肌/null 劳乏/null 劳什子/null 劳伤/null 劳伦斯/null 劳作/null 劳保/null 劳保用品/null 劳做/null 劳军/null 劳力/null 劳力士/null 劳务/null 劳务市场/null 劳务费/null 劳动/null 劳动二重性/null 劳动人民/null 劳动价值论/null 劳动保护/null 劳动保险/null 劳动党/null 劳动制/null 劳动力/null 劳动力价值/null 劳动力商品/null 劳动号/null 劳动合同/null 劳动定额/null 劳动对象/null 劳动局/null 劳动强度/null 劳动手段/null 劳动报/null 劳动改造/null 劳动教养/null 劳动新闻/null 劳动日/null 劳动权/null 劳动模范/null 劳动法/null 劳动生产力/null 劳动生产率/null 劳动纪律/null 劳动者/null 劳动能力/null 劳动致富/null 劳动营/null 劳动解放社/null 劳动资料/null 劳动部/null 劳动量/null 劳劳碌碌/null 劳埃德/null 劳多得/null 劳委会/null 劳工/null 劳工党/null 劳工法/null 劳师/null 劳师动众/null 劳师袭远/null 劳役/null 劳役地租/null 劳心/null 劳心劳力/null 劳心焦思/null 劳心苦思/null 劳拉西泮/null 劳支/null 劳改/null 劳改营/null 劳教/null 劳教所/null 劳斯莱斯/null 劳方/null 劳模/null 劳步/null 劳民/null 劳民伤财/null 劳烦/null 劳燕分飞/null 劳瘁/null 劳碌/null 劳神/null 劳累/null 劳累过度/null 劳绩/null 劳而无功/null 劳而无获/null 劳苦/null 劳苦功高/null 劳苦大众/null 劳资/null 劳资关系/null 劳资双方/null 劳资科/null 劳资纠纷/null 劳身焦思/null 劳逊/null 劳逸/null 劳逸结合/null 劳金/null 劳雇/null 劳雇关系/null 劳顿/null 劳驾/null 势不两存/null 势不两立/null 势不力敌/null 势不可当/null 势不可挡/null 势众/null 势倾朝野/null 势划/null 势利/null 势利小人/null 势利眼/null 势利言行/null 势利鬼/null 势力/null 势力范围/null 势合形离/null 势图/null 势在/null 势在必得/null 势在必行/null 势均/null 势均力敌/null 势头/null 势如破竹/null 势子/null 势将/null 势必/null 势态/null 势成骑虎/null 势所必然/null 势族/null 势无反顾/null 势殊事异/null 势治/null 势派/null 势焰/null 势穷力极/null 势穷力竭/null 势能/null 势要/null 势阱/null 势降/null 势难两全/null 势面/null 势高益危/null 勃兰登堡/null 勃兴/null 勃列日涅夫/null 勃利/null 勃勃/null 勃勃生机/null 勃发/null 勃固/null 勃固山脉/null 勃固河/null 勃拉姆斯/null 勃朗宁/null 勃海/null 勃然/null 勃然变色/null 勃然大怒/null 勃艮第/null 勃起/null 勃郎宁/null 勇为/null 勇于/null 勇冠三军/null 勇冲/null 勇决/null 勇力/null 勇动多怨/null 勇士/null 勇夫悍卒/null 勇夺/null 勇往/null 勇往直前/null 勇悍/null 勇挑/null 勇挑重担/null 勇攀高峰/null 勇救/null 勇敢/null 勇斗歹徒/null 勇武/null 勇气/null 勇猛/null 勇猛果敢/null 勇猛直前/null 勇猛精进/null 勇男蠢妇/null 勇略/null 勇者/null 勇而无谋/null 勇退/null 勇退激流/null 勉为其难/null 勉从/null 勉力/null 勉力而为/null 勉励/null 勉勉强强/null 勉强/null 勉强能/null 勋业/null 勋位/null 勋劳/null 勋爵/null 勋章/null 勋绩/null 勋绶/null 勐海/null 勐腊/null 勐腊县/null 勒人/null 勒令/null 勒住/null 勒勒车/null 勒压/null 勒哈费尔/null 勒威耶/null 勒庞/null 勒戒/null 勒抑/null 勒支/null 勒斯波斯/null 勒斯波斯岛/null 勒杀/null 勒死/null 勒毙/null 勒派/null 勒索/null 勒索罪/null 勒索者/null 勒紧/null 勒紧裤带/null 勒维夫/null 勒维纳斯/null 勒脖子/null 勒逼/null 勒颈/null 勒马/null 勒马悬崖/null 勖勉/null 勘乱/null 勘定/null 勘察/null 勘察加/null 勘察加半岛/null 勘探/null 勘探者/null 勘探队/null 勘查/null 勘正/null 勘测/null 勘漏/null 勘灾/null 勘界/null 勘破/null 勘误/null 勘误表/null 勘谬/null 勘验/null 募倚/null 募兵/null 募兵制/null 募化/null 募得/null 募捐/null 募捐者/null 募款/null 募缘/null 募集/null 募集者/null 勤于/null 勤于思考/null 勤俭/null 勤俭为服务之本/null 勤俭办企业/null 勤俭办学/null 勤俭办社/null 勤俭务实/null 勤俭建国/null 勤俭持家/null 勤俭朴实/null 勤俭朴素/null 勤俭耐劳/null 勤俭节约/null 勤俭起家/null 勤则不匮/null 勤前教育/null 勤力/null 勤加练习/null 勤务/null 勤务兵/null 勤务员/null 勤务训练/null 勤劳/null 勤劳不虞匮乏/null 勤劳者/null 勤劳致富/null 勤勉/null 勤勤/null 勤勤恳恳/null 勤奋/null 勤奋刻苦/null 勤学/null 勤学苦练/null 勤密/null 勤工俭学/null 勤工助学/null 勤快/null 勤恳/null 勤恳恳/null 勤政/null 勤政廉政/null 勤朴/null 勤杂/null 勤杂人员/null 勤杂工/null 勤王/null 勤练/null 勤耕/null 勤能补拙/null 勤苦/null 勤谨/null 勺子/null 勺状软骨/null 勾三搭四/null 勾肩/null 勾肩搭背/null 勾乙/null 勾人/null 勾住/null 勾兑/null 勾出/null 勾划/null 勾勒/null 勾勾/null 勾勾搭搭/null 勾去/null 勾取/null 勾号/null 勾引/null 勾当/null 勾心/null 勾心斗角/null 勾手/null 勾拳/null 勾掉/null 勾搭/null 勾栏/null 勾消/null 勾玉/null 勾画/null 勾留/null 勾结/null 勾缝/null 勾股/null 勾股定理/null 勾股形/null 勾脸/null 勾芡/null 勾藤/null 勾起/null 勾践/null 勾通/null 勾针/null 勾销/null 勾阑/null 勾除/null 勾魂/null 勿似/null 勿动/null 勿失/null 勿失良机/null 勿宁说/null 勿带/null 勿庸置疑/null 勿忘国耻/null 勿忘我/null 勿忘草/null 勿施于人/null 勿替敬典/null 勿有/null 勿求人/null 勿玩/null 勿药有喜/null 勿谓言之不预/null 匀停/null 匀兑/null 匀净/null 匀和/null 匀实/null 匀整/null 匀溜/null 匀称/null 匀脸/null 匀速/null 匀速圆周运动/null 匀速直线运动/null 匀速运动/null 包上/null 包举/null 包乘/null 包乘制/null 包乘组/null 包书皮/null 包二奶/null 包产/null 包产到户/null 包产到户制/null 包人/null 包以/null 包件/null 包价旅游/null 包伙/null 包住/null 包修/null 包公/null 包兰铁路/null 包养/null 包内/null 包剿/null 包办/null 包办代替/null 包办婚姻/null 包包/null 包医/null 包厢/null 包含/null 包含在内/null 包囊/null 包园儿/null 包围/null 包围圈/null 包围着/null 包圆儿/null 包在/null 包在我身上/null 包场/null 包头/null 包头地区/null 包子/null 包孕/null 包容/null 包封/null 包尔/null 包层/null 包工/null 包工包料/null 包工头/null 包工队/null 包巾/null 包布/null 包干/null 包干儿/null 包干到户/null 包干制/null 包庇/null 包底/null 包店/null 包待制/null 包心菜/null 包成/null 包房/null 包扎/null 包打听/null 包打天下/null 包承制/null 包承组/null 包抄/null 包括/null 包括了/null 包括内置配重/null 包拯/null 包换/null 包探/null 包揽/null 包揽词讼/null 包收/null 包教/null 包月/null 包机/null 包柔氏螺旋体/null 包死/null 包氏螺旋体/null 包河/null 包河区/null 包治百病/null 包法利/null 包活/null 包涵/null 包片/null 包牙/null 包皮/null 包皮环切/null 包皮环切术/null 包着/null 包票/null 包租/null 包税/null 包管/null 包箱/null 包米/null 包粟/null 包紧/null 包纸/null 包给/null 包缠/null 包罗/null 包罗万象/null 包罗广泛/null 包羞忍耻/null 包羞忍辱/null 包背装/null 包船/null 包茅/null 包草/null 包荒/null 包著/null 包藏/null 包藏祸心/null 包虫/null 包衣/null 包衣种子/null 包袋/null 包被/null 包袱/null 包袱底儿/null 包装/null 包装工人/null 包装材料/null 包装物/null 包装箱/null 包装纸/null 包装费/null 包裹/null 包谷/null 包豪斯/null 包赔/null 包起/null 包起来/null 包身/null 包身工/null 包车/null 包进/null 包退/null 包邮/null 包里/null 包里斯/null 包金/null 包钢/null 包银/null 包销/null 包间/null 包青天/null 包饭/null 包饺子/null 包龙图/null 匆促/null 匆匆/null 匆匆一看/null 匆匆忙忙/null 匆卒/null 匆忙/null 匆忙而行/null 匆猝/null 匆穿/null 匆遽/null 匈奴/null 匈奴王/null 匈牙利/null 匈牙利一九一九年革命/null 匈牙利人/null 匈牙利语/null 匈语/null 匍伏/null 匍匐/null 匍匐之救/null 匍匐前进/null 匍匐茎/null 匏瓜/null 匏瓜空悬/null 匐匍/null 匐枝/null 匐行/null 匕首/null 匕鬯不惊/null 化上/null 化为/null 化为乌有/null 化为己有/null 化为泡影/null 化为灰烬/null 化作/null 化作灰烬/null 化公为私/null 化冻/null 化出化入/null 化分/null 化剂/null 化募/null 化合/null 化合价/null 化合物/null 化名/null 化境/null 化外/null 化妆/null 化妆台/null 化妆品/null 化妆室/null 化妆师/null 化妆水/null 化妆舞会/null 化子/null 化学/null 化学信息素/null 化学元素/null 化学分析/null 化学剂量计/null 化学化/null 化学反应/null 化学反应式/null 化学变化/null 化学合成/null 化学品/null 化学家/null 化学工业/null 化学工业部/null 化学工程/null 化学师/null 化学平衡/null 化学式/null 化学弹药/null 化学当量/null 化学性/null 化学性质/null 化学成分/null 化学战/null 化学战剂/null 化学战剂检毒箱/null 化学战斗部/null 化学方程式/null 化学武器/null 化学武器储备/null 化学武器防护/null 化学比色法/null 化学治疗/null 化学激光器/null 化学物/null 化学稳定性/null 化学符号/null 化学系/null 化学纤维/null 化学肥料/null 化学能/null 化学航弹/null 化学键/null 化学镀/null 化学防护/null 化学需氧量/null 化州/null 化工/null 化工厂/null 化工局/null 化工部/null 化干戈为玉帛/null 化开/null 化形/null 化德/null 化成/null 化掉/null 化敌/null 化敌为友/null 化整/null 化整为零/null 化斋/null 化日/null 化日光天/null 化武/null 化毒散/null 化氮/null 化油器/null 化生/null 化疗/null 化痰/null 化石/null 化石燃料/null 化石群/null 化简/null 化粪/null 化粪池/null 化纤/null 化纤工业/null 化缘/null 化肥/null 化脓/null 化脓性/null 化腐朽为神奇/null 化蛹/null 化装/null 化装服/null 化解/null 化费/null 化身/null 化过/null 化铁炉/null 化除/null 化险/null 化险为夷/null 化隆/null 化隆县/null 化零为整/null 化革/null 化验/null 化验员/null 化验室/null 北上/null 北二外/null 北亚/null 北京中医药大学/null 北京产权交易所/null 北京人民大会堂/null 北京军区/null 北京动物园/null 北京周报/null 北京商务中心区/null 北京国家体育场/null 北京国家游泳中心/null 北京图书馆/null 北京地区/null 北京外国语大学/null 北京大学/null 北京工业大学/null 北京工人体育场/null 北京师范大学/null 北京广播学院/null 北京教育学院/null 北京日报/null 北京时间/null 北京晚报/null 北京晨报/null 北京条约/null 北京林业大学/null 北京核武器研究所/null 北京汽车制造厂有限公司/null 北京烤鸭/null 北京物资学院/null 北京猿人/null 北京环球金融中心/null 北京理工大学/null 北京电影学院/null 北京电视台/null 北京科技大学/null 北京站/null 北京第二外国语学院/null 北京舞蹈学院/null 北京航空学院/null 北京航空航天大学/null 北京艺术学院/null 北京话/null 北京语言大学/null 北京语言学院/null 北京青年报/null 北京音/null 北京鸭/null 北仑/null 北仑区/null 北仓区/null 北伐/null 北伐军/null 北伐战争/null 北佬/null 北侧/null 北关/null 北关区/null 北冕座/null 北冬/null 北冰洋/null 北凉/null 北半球/null 北卡罗来纳/null 北卡罗来纳州/null 北印度语/null 北县/null 北叟失马/null 北史/null 北周/null 北回归线/null 北国/null 北国风光/null 北坡/null 北埔/null 北埔乡/null 北塔/null 北塔区/null 北塘/null 北塘区/null 北外/null 北大/null 北大荒/null 北大西洋/null 北大西洋公约组织/null 北头/null 北威州/null 北安/null 北安普敦/null 北宋/null 北宋四大部书/null 北寒带/null 北展/null 北屯/null 北屯区/null 北屯市/null 北屯镇/null 北山/null 北山羊/null 北岛/null 北岳/null 北岸/null 北川/null 北川县/null 北工大/null 北市区/null 北师/null 北平/null 北往/null 北征/null 北戴河/null 北戴河区/null 北房/null 北投/null 北投区/null 北斗/null 北斗七星/null 北斗卫星导航系统/null 北斗星/null 北斗镇/null 北方/null 北方人/null 北方佬/null 北方地区/null 北方工业/null 北方工业公司/null 北方民族大学/null 北方话/null 北方邦/null 北方领土/null 北曲/null 北朝/null 北朝鲜/null 北极/null 北极光/null 北极圈/null 北极星/null 北极熊/null 北极狐/null 北林/null 北林区/null 北柴胡/null 北楼/null 北欧/null 北欧人/null 北欧航空公司/null 北段/null 北汉/null 北江/null 北汽/null 北洋/null 北洋军/null 北洋军阀/null 北洋政府/null 北洋水师/null 北洋系/null 北洋陆军/null 北派螳螂拳/null 北流/null 北海/null 北海舰队/null 北海道/null 北温带/null 北港/null 北港镇/null 北湖区/null 北濒/null 北煤南运/null 北燕/null 北爱/null 北爱尔兰/null 北狄/null 北瓜/null 北疆/null 北碚/null 北票/null 北端/null 北竿/null 北竿乡/null 北约组织/null 北纬/null 北美/null 北美产/null 北美洲/null 北航/null 北苑/null 北荷兰/null 北莱茵・威斯特法伦州/null 北行/null 北街/null 北角/null 北越/null 北路/null 北路梆子/null 北辕适楚/null 北辙南辕/null 北辰/null 北边/null 北边儿/null 北达科他/null 北达科他州/null 北进/null 北进政策/null 北道主人/null 北邙/null 北郊/null 北部/null 北部地区/null 北部拉班特/null 北部湾/null 北镇/null 北镇市/null 北镇满族自治县/null 北门/null 北门乡/null 北门锁钥/null 北非/null 北非洲/null 北面/null 北面称臣/null 北韩/null 北领地/null 北风/null 北马里亚纳/null 北马里亚纳群岛/null 北魏/null 北麓/null 北齐/null 北齐书/null 匙儿/null 匙子/null 匝加利亚/null 匝地/null 匝数/null 匝月/null 匝道/null 匝道口/null 匠人/null 匠心/null 匠气/null 匠心独具/null 匠心独运/null 匠石运斤/null 匠遇作家/null 匡俗济时/null 匡心如水/null 匡扶/null 匡扶社稷/null 匡救/null 匡时济俗/null 匡正/null 匡济/null 匡算/null 匡门如市/null 匣剑帷灯/null 匣子/null 匣里龙吟/null 匪党/null 匪兵/null 匪军/null 匪夷所思/null 匪巢/null 匪帮/null 匪徒/null 匪徒集团/null 匪患/null 匪朝伊夕/null 匪片/null 匪盗/null 匪石之心/null 匪祸/null 匪穴/null 匪警/null 匪躬之操/null 匪邦/null 匪首/null 匮乏/null 匮竭/null 匮缺/null 匹亚/null 匹偶/null 匹兹堡/null 匹夫/null 匹夫之勇/null 匹夫匹妇/null 匹夫无罪怀璧其罪/null 匹夫有责/null 匹头/null 匹拉米洞/null 匹敌/null 匹耦/null 匹配/null 匹马力/null 匹马单枪/null 区上/null 区位/null 区位码/null 区公所/null 区内/null 区分/null 区分大小写/null 区分开/null 区分线/null 区划/null 区别/null 区别不同情况/null 区别于/null 区别对待/null 区别轻重缓急/null 区区/null 区区小事/null 区县/null 区号/null 区名/null 区块/null 区域/null 区域合作/null 区域性/null 区域经济/null 区域经济学/null 区域网络/null 区域网路/null 区域网路技术/null 区域自治/null 区处/null 区外/null 区委/null 区字框/null 区宇一清/null 区局/null 区属/null 区政/null 区政府/null 区旗/null 区标/null 区段/null 区画/null 区界/null 区码/null 区级/null 区议会/null 区里/null 区长/null 区间/null 区间车/null 区院/null 区隔/null 医不好/null 医专/null 医书/null 医伤用/null 医务/null 医务人员/null 医务室/null 医务工作者/null 医务所/null 医医/null 医卜/null 医嘱/null 医士/null 医大/null 医好/null 医学/null 医学上/null 医学专家/null 医学中心/null 医学博士/null 医学士/null 医学家/null 医学心理学/null 医学检验/null 医学检验师/null 医学系/null 医学院/null 医官/null 医家/null 医密/null 医师/null 医德/null 医托/null 医护/null 医护人员/null 医改/null 医方/null 医时救弊/null 医术/null 医案/null 医治/null 医治无效/null 医治者/null 医理/null 医生/null 医用/null 医疗/null 医疗事故/null 医疗体操/null 医疗体育/null 医疗保健/null 医疗保险/null 医疗卫生/null 医疗器械/null 医疗护理/null 医疗疏失/null 医疗经验/null 医疗费/null 医疗队/null 医病/null 医神/null 医科/null 医科大学/null 医科学校/null 医者/null 医药/null 医药分离/null 医药卫生/null 医药商店/null 医药学/null 医药费/null 医道/null 医院/null 匾的/null 匾额/null 匿伏/null 匿名/null 匿名信/null 匿处/null 匿影藏形/null 匿报/null 匿於/null 匿藏/null 匿迹/null 匿迹潜形/null 匿迹销声/null 匿迹隐形/null 十一/null 十一个/null 十一人/null 十一倍/null 十一大/null 十一届三中全会/null 十一时/null 十一月/null 十一月份/null 十一路/null 十余/null 十七/null 十七世纪/null 十七个/null 十七人/null 十七勇士/null 十七史/null 十七大/null 十七孔桥/null 十万/null 十万位/null 十万八千里/null 十万火急/null 十万火速/null 十万个为什么/null 十三/null 十三个/null 十三人/null 十三大/null 十三日/null 十三时/null 十三点/null 十三经/null 十三辙/null 十三陵/null 十不闲儿/null 十个/null 十中全会/null 十之八九/null 十九/null 十九世纪/null 十九个/null 十九人/null 十九大/null 十九时/null 十二/null 十二个/null 十二个月/null 十二人/null 十二倍/null 十二分/null 十二地支/null 十二大/null 十二宫/null 十二平均律/null 十二开/null 十二指肠/null 十二指肠溃疡/null 十二支/null 十二时/null 十二时辰/null 十二星座/null 十二月/null 十二月份/null 十二用/null 十二码/null 十二经/null 十二经脉/null 十二角形/null 十二边形/null 十二金牌/null 十二面体/null 十二音/null 十五/null 十五世纪/null 十五个/null 十五个吊桶打水/null 十五人/null 十五大/null 十五年/null 十五日/null 十亲九故/null 十人/null 十亿/null 十亿位元/null 十亿位元以太网络/null 十亿位元以太网络联盟/null 十件/null 十传百/null 十位/null 十佳/null 十便士/null 十倍/null 十元/null 十元整/null 十克/null 十全/null 十全十美/null 十八/null 十八世纪/null 十八个/null 十八人/null 十八大/null 十八岁/null 十八开/null 十八时/null 十八罗汉/null 十八般武艺/null 十六/null 十六世纪/null 十六个/null 十六人/null 十六位元/null 十六分音符/null 十六国/null 十六国春秋/null 十六大/null 十六字诀/null 十六岁/null 十六开本/null 十六时/null 十六烷值/null 十六进位/null 十六进制/null 十冬腊月/null 十几/null 十几个月/null 十几岁/null 十几年来/null 十分/null 十分之/null 十分之一/null 十分之七/null 十分之三/null 十分之九/null 十分之二/null 十分之五/null 十分之八/null 十分之六/null 十分之十/null 十分之四/null 十分关心/null 十分困难/null 十分复杂/null 十分多谢/null 十分宝贵/null 十分必要/null 十分明确/null 十分注意/null 十分满意/null 十分相似/null 十分艰巨/null 十分迅速/null 十分重要/null 十分重视/null 十分高兴/null 十十五五/null 十号/null 十吨/null 十味/null 十四/null 十四个/null 十四人/null 十四大/null 十四时/null 十四行诗/null 十围五攻/null 十国春秋/null 十堰/null 十多亿/null 十大/null 十大神兽/null 十天/null 十天干/null 十字/null 十字军/null 十字军东征/null 十字军远征/null 十字头/null 十字头螺刀/null 十字形/null 十字架/null 十字架刑/null 十字标/null 十字绣/null 十字花科/null 十字街头/null 十字路/null 十字路口/null 十字路头/null 十字镜/null 十室九空/null 十家/null 十尺/null 十届/null 十岁/null 十常侍/null 十干/null 十年/null 十年九不遇/null 十年内乱/null 十年动乱/null 十年如一日/null 十年寒窗/null 十年怕井索/null 十年怕井绳/null 十年期/null 十年树木/null 十年树木百年树人/null 十年规划/null 十年间/null 十开/null 十张/null 十恶不赦/null 十成/null 十成九稳/null 十戒/null 十户/null 十拿九稳/null 十拿十稳/null 十指有长短/null 十指连心/null 十捉九着/null 十数/null 十方/null 十日/null 十日一水五日一石/null 十日怕麻绳/null 十日谈/null 十时/null 十月/null 十月份/null 十月革命/null 十有八九/null 十期/null 十本/null 十条/null 十样锦/null 十楼/null 十步芳草/null 十死一生/null 十死九生/null 十段/null 十滴水/null 十点/null 十生九死/null 十番乐/null 十病九痛/null 十目所视十手所指/null 十米/null 十类/null 十级/null 十羊九牧/null 十荡十决/null 十行俱下/null 十角形/null 十诫/null 十足/null 十足类/null 十路/null 十边形/null 十进/null 十进位/null 十进位制/null 十进位法/null 十进制/null 十进对数/null 十进小数/null 十进算术/null 十进管/null 十通/null 十里/null 十里洋场/null 十锦/null 十面/null 十面体/null 十面埋伏/null 十音节/null 十项/null 十项全能/null 十项全能运动/null 十风五雨/null 十鼠争穴/null 十鼠同穴/null 千万/null 千万个/null 千万买邻/null 千丈/null 千丝万缕/null 千乘万骑/null 千了百当/null 千亩/null 千人/null 千人所指/null 千亿/null 千仇万恨/null 千仓万箱/null 千伏/null 千伏特/null 千伶百俐/null 千位/null 千位元/null 千余/null 千佛洞/null 千依万顺/null 千依百顺/null 千倍/null 千儿八百/null 千元/null 千兆/null 千克/null 千克米/null 千公斤/null 千兵万马/null 千军/null 千军万马/null 千军易得/null 千军易得一将难求/null 千刀万剁/null 千刀万剐/null 千分/null 千分之/null 千分之一/null 千分位/null 千分尺/null 千分率/null 千分表/null 千千万万/null 千升/null 千卡/null 千变万化/null 千变万轸/null 千古/null 千古独步/null 千古罪人/null 千古遗恨/null 千叮万嘱/null 千叶/null 千叶县/null 千叶市/null 千吨/null 千吨级核武器/null 千周/null 千周率/null 千呼万唤/null 千唤万唤/null 千回/null 千回百转/null 千夫/null 千夫所指/null 千头万绪/null 千奇百怪/null 千妥万妥/null 千妥万当/null 千姿百态/null 千娇百媚/null 千娇百态/null 千孔百疮/null 千字/null 千字文/null 千字节/null 千家万户/null 千尺/null 千层/null 千层底/null 千层面/null 千居里/null 千山/null 千山万壑/null 千山万水/null 千山区/null 千岁/null 千岁一时/null 千岛/null 千岛列岛/null 千岛湖/null 千岛群岛/null 千岛酱/null 千岩万壑/null 千岩万谷/null 千差万别/null 千帕/null 千年/null 千年万载/null 千度/null 千张/null 千态万状/null 千思万想/null 千恩万谢/null 千户/null 千推万阻/null 千斤/null 千斤顶/null 千方万计/null 千方百计/null 千日/null 千日红/null 千村万落/null 千条万端/null 千欢万喜/null 千状万态/null 千状万端/null 千瓦/null 千瓦时/null 千瓦时表/null 千疮百孔/null 千百/null 千百万/null 千百年来/null 千盏菊/null 千真万真/null 千真万确/null 千碱基对/null 千禧年/null 千秋/null 千秋万世/null 千秋万代/null 千秋万古/null 千秋万岁/null 千秋大业/null 千穗谷/null 千端万绪/null 千篇一律/null 千米/null 千粒重/null 千红万紫/null 千纤/null 千经万卷/null 千绪万端/null 千编一律/null 千虑/null 千虑一失/null 千虑一得/null 千言万语/null 千赫/null 千赫兹/null 千足虫/null 千载一会/null 千载一合/null 千载一时/null 千载一逢/null 千载一遇/null 千载独步/null 千载难逢/null 千辛万苦/null 千辛百苦/null 千部一腔千人一面/null 千里/null 千里一曲/null 千里之堤/null 千里之堤溃于蚁穴/null 千里之外/null 千里之行/null 千里光/null 千里命驾/null 千里姻缘一线牵/null 千里寄鹅毛/null 千里搭长棚/null 千里犹面/null 千里眼/null 千里莼羹/null 千里达/null 千里达和多巴哥/null 千里迢迢/null 千里迢遥/null 千里送鹅毛/null 千里马/null 千里驹/null 千里鹅毛/null 千金/null 千金一刻/null 千金一掷/null 千金一笑/null 千金一诺/null 千金之子/null 千金之家/null 千金买笑/null 千金小姐/null 千金市骨/null 千金弊帚/null 千金方/null 千金要方/null 千金难买/null 千钧/null 千钧一发/null 千钧棒/null 千钧重负/null 千锤/null 千锤百炼/null 千锤百鍊/null 千镒之裘/null 千门万户/null 千闻不如一见/null 千阳/null 千难万险/null 千难万难/null 千页/null 千鸟渊国家公墓/null 升上/null 升为/null 升了/null 升于/null 升任/null 升值/null 升到/null 升力/null 升势/null 升华/null 升压/null 升压机/null 升堂/null 升堂入室/null 升堂拜母/null 升天/null 升天节/null 升学/null 升学率/null 升官/null 升官发财/null 升市/null 升帐/null 升幂/null 升幅/null 升平/null 升序/null 升息/null 升斗/null 升斗小民/null 升旗/null 升旗仪式/null 升格/null 升档/null 升水/null 升汞/null 升涨/null 升温/null 升班/null 升空/null 升级/null 升级版/null 升结肠/null 升职/null 升腾/null 升至/null 升调/null 升起/null 升迁/null 升遐/null 升降/null 升降机/null 升降索/null 升降舵/null 升限/null 升高/null 升高自下/null 午休/null 午前/null 午后/null 午场/null 午夜/null 午安/null 午宴/null 午市/null 午后/null 午时/null 午时茶/null 午曲/null 午狮/null 午睡/null 午膳/null 午觉/null 午课/null 午门/null 午间/null 午餐/null 午餐会/null 午饭/null 午马/null 半不/null 半世/null 半个/null 半个世纪/null 半个多世纪/null 半个月/null 半中腰/null 半乳糖/null 半乳糖血症/null 半人马/null 半人马座/null 半以上/null 半价/null 半份/null 半低元音/null 半保留复制/null 半信半疑/null 半元音/null 半公开/null 半决赛/null 半决赛权/null 半分/null 半制品/null 半刻/null 半劳动力/null 半半/null 半半拉拉/null 半发达/null 半句/null 半吊子/null 半吞半吐/null 半吨/null 半咸水湖/null 半响/null 半圆/null 半圆仪/null 半圆形/null 半场/null 半场球赛/null 半坡/null 半坡村/null 半坡遗址/null 半壁/null 半壁江山/null 半复赛/null 半夏/null 半夜/null 半夜三更/null 半夜敲门不吃惊/null 半夜敲门心不惊/null 半大/null 半天/null 半失业/null 半子/null 半学年/null 半官方/null 半导体/null 半导体探测器/null 半导体收音机/null 半导体超点阵/null 半导瓷/null 半封建/null 半封建半殖民地/null 半小时/null 半履带/null 半山/null 半山区/null 半山坡/null 半山腰/null 半岛/null 半岛和东方航海/null 半岛国际学校/null 半岛电视台/null 半工半读/null 半干/null 半年/null 半底/null 半开/null 半开化/null 半开半关/null 半开门/null 半开门儿/null 半彪子/null 半影/null 半径/null 半成品/null 半截/null 半截入土/null 半截衫/null 半打/null 半托/null 半拉/null 半拉子/null 半拍/null 半拱/null 半排出期/null 半推半就/null 半支莲/null 半数/null 半数以上/null 半文盲/null 半斤/null 半斤八两/null 半新/null 半新不旧/null 半新半旧/null 半方/null 半旗/null 半无产阶级/null 半无限/null 半日/null 半日制/null 半日制学校/null 半日工作/null 半时/null 半明不灭/null 半明半暗/null 半晌/null 半暗/null 半月/null 半月刊/null 半月形/null 半月板/null 半期/null 半机械化/null 半条命/null 半步/null 半死/null 半死不活/null 半死半活/null 半殖民地/null 半治天下/null 半流体/null 半涂而废/null 半涂而罢/null 半点/null 半熟/null 半熟练/null 半球/null 半瓶/null 半瓶水响叮当/null 半瓶醋/null 半生/null 半生不熟/null 半白/null 半百/null 半盲/null 半真半假/null 半瞎/null 半神半人/null 半票/null 半空/null 半空中/null 半筹不纳/null 半筹莫展/null 半糖夫妻/null 半翅目/null 半老/null 半老徐娘/null 半职/null 半职业性/null 半胱氨酸/null 半脱产/null 半腰/null 半腱肌/null 半膜肌/null 半自动/null 半自动化/null 半自耕农/null 半苦半甜/null 半英寸/null 半薪/null 半融/null 半衰期/null 半裸/null 半裸体/null 半规则/null 半规管/null 半视野/null 半角/null 半跏坐/null 半路/null 半路修行/null 半路出家/null 半路埋伏/null 半身/null 半身不遂/null 半身像/null 半车/null 半轴/null 半载/null 半辈/null 半辈子/null 半边/null 半边人/null 半边天/null 半边莲/null 半透/null 半透明/null 半透膜/null 半途/null 半途而废/null 半通不通/null 半道/null 半道儿/null 半道打字/null 半部/null 半部论语/null 半长轴/null 半间不界/null 半青半黄/null 半面/null 半面之交/null 半音/null 半音程/null 半饱/null 半高/null 半高元音/null 华东/null 华东军区/null 华东地区/null 华东师大/null 华东师范大学/null 华东理工大学/null 华丝葛/null 华严宗/null 华严经/null 华中/null 华中地区/null 华为/null 华丽/null 华亭/null 华人/null 华佗/null 华侨/null 华侨中学/null 华侨大学/null 华侨委员会/null 华侨报/null 华侨状况/null 华兴会/null 华北/null 华北事变/null 华北地区/null 华北平原/null 华北龙/null 华南/null 华南地区/null 华南理工大学/null 华南虎/null 华厦/null 华发/null 华商/null 华商报/null 华商晨报/null 华国锋/null 华坪/null 华埠/null 华夏/null 华威/null 华威大学/null 华宁/null 华安/null 华容/null 华容区/null 华容道/null 华封三祝/null 华尔兹/null 华尔兹舞/null 华尔滋/null 华尔街/null 华尔街日报/null 华屋/null 华屋丘墟/null 华工/null 华府/null 华彩/null 华拳/null 华教/null 华文/null 华族/null 华林/null 华林部/null 华校/null 华毂/null 华氏/null 华氏度/null 华氏温度表/null 华氏温度计/null 华池/null 华沙/null 华法林/null 华海/null 华润万家/null 华灯/null 华灯初上/null 华特/null 华盖/null 华盛顿/null 华盛顿会议/null 华盛顿州/null 华盛顿时报/null 华盛顿特区/null 华盛顿邮报/null 华硕/null 华社/null 华章/null 华约/null 华纳兄弟/null 华纳音乐集团/null 华罗庚/null 华美/null 华而不实/null 华胄/null 华航/null 华蓥/null 华表/null 华裔/null 华西/null 华视/null 华诞/null 华语/null 华豪鹤唳/null 华贵/null 华辞/null 华达呢/null 华里/null 华阴/null 华陀/null 华靡/null 华龙/null 华龙区/null 协人/null 协从/null 协会/null 协作/null 协作关系/null 协作单位/null 协作者/null 协力/null 协力同心/null 协办/null 协助/null 协助者/null 协同/null 协同作战/null 协同作用/null 协同学/null 协同通信/null 协和/null 协和式客机/null 协和飞机/null 协商/null 协商一致/null 协商会议/null 协商者/null 协处/null 协奏/null 协奏曲/null 协定/null 协心同力/null 协性/null 协方差/null 协查/null 协洽/null 协理/null 协理员/null 协税/null 协管/null 协管员/null 协约/null 协约国/null 协统/null 协议/null 协议书/null 协调/null 协调世界时/null 协调人/null 协调会/null 协调发展/null 协调员/null 协调委员会/null 协调官/null 协调者/null 协调论/null 协谈/null 协迫/null 协韵/null 卑下/null 卑不足道/null 卑之/null 卑之无甚高论/null 卑以自牧/null 卑俗/null 卑劣/null 卑劣下流/null 卑卑不足道/null 卑南/null 卑南乡/null 卑南族/null 卑宫菲食/null 卑尔根/null 卑屈/null 卑己自牧/null 卑微/null 卑怯/null 卑恭/null 卑恭屈节/null 卑污/null 卑礼厚币/null 卑职/null 卑视/null 卑谦/null 卑贱/null 卑躬屈膝/null 卑躬屈节/null 卑辞/null 卑辞厚币/null 卑辞厚礼/null 卑逊/null 卑鄙/null 卑鄙无耻/null 卑鄙的人/null 卑鄙龌龊/null 卑陋/null 卑陋龌龊/null 卒业/null 卒中/null 卒于/null 卒子/null 卒岁/null 卓乎不群/null 卓兰/null 卓兰镇/null 卓尔不群/null 卓尔出群/null 卓尼/null 卓异/null 卓有/null 卓有成效/null 卓溪/null 卓溪乡/null 卓然/null 卓然不群/null 卓约/null 卓绝/null 卓荤不羁/null 卓荦/null 卓著/null 卓见/null 卓识/null 卓资/null 卓越/null 卓越网/null 单一/null 单一制/null 单一化/null 单一合体字/null 单一性/null 单一码/null 单一货币/null 单丁/null 单丝/null 单丝不线/null 单个/null 单个儿/null 单义/null 单于/null 单交/null 单交种/null 单产/null 单亲/null 单亲家庭/null 单人/null 单人床/null 单人座/null 单人独马/null 单人间/null 单件/null 单价/null 单传/null 单位/null 单位信托/null 单位元/null 单位切向量/null 单位制/null 单位向量/null 单位根/null 单位负责人/null 单位量/null 单位面积产量/null 单位预算/null 单体/null 单作/null 单作用/null 单侧/null 单倍体/null 单倍体植物/null 单倍体育种/null 单元/null 单元格/null 单元论/null 单元频率/null 单克隆/null 单克隆抗体/null 单兵教练/null 单养/null 单内/null 单凭/null 单击/null 单刀/null 单刀直入/null 单刃剑/null 单分/null 单列/null 单利/null 单动式/null 单单/null 单卵性/null 单原子/null 单去/null 单发/null 单口相声/null 单句/null 单只/null 单叶/null 单叶双曲面/null 单号/null 单名数/null 单向/null 单向电流/null 单向阀/null 单味药/null 单块/null 单夫只妇/null 单套/null 单子/null 单子叶/null 单子叶植物/null 单孔/null 单孔目/null 单字/null 单字集/null 单季稻/null 单宁/null 单宁酸/null 单寒/null 单射/null 单就/null 单层/null 单层塔/null 单峰/null 单峰驼/null 单帮/null 单幅/null 单幢/null 单干/null 单干户/null 单座/null 单座式/null 单式教学/null 单式编制/null 单引擎/null 单张/null 单弦/null 单弦儿/null 单弦琴/null 单弱/null 单循环赛/null 单性/null 单性生殖/null 单性花/null 单恋/null 单意/null 单房差/null 单手/null 单打/null 单打一/null 单打独斗/null 单报/null 单指/null 单挑/null 单据/null 单排/null 单摆/null 单放机/null 单数/null 单料/null 单斜层/null 单方/null 单方决定/null 单方制剂/null 单方向/null 单方宣告/null 单方恐吓/null 单方过失碰撞/null 单方面/null 单日/null 单是/null 单显/null 单晶/null 单晶体/null 单晶硅/null 单晶硅棒/null 单曲/null 单月/null 单本/null 单机/null 单杠/null 单条/null 单板机/null 单板滑雪/null 单极/null 单枞/null 单枪/null 单枪匹马/null 单株/null 单核细胞/null 单核细胞增多症/null 单根独苗/null 单模/null 单模光纤/null 单次/null 单步/null 单比/null 单比例/null 单源多倍体/null 单源论/null 单点/null 单点系泊/null 单片/null 单片机/null 单独/null 单环/null 单班课/null 单瓣/null 单生花/null 单用/null 单瘫/null 单皮/null 单盲/null 单相/null 单相串激电动机/null 单相交流电/null 单相思/null 单眼/null 单眼皮/null 单眼镜/null 单科/null 单程/null 单程票/null 单立/null 单端孢霉烯类毒素/null 单端孢霉烯类毒素中毒症/null 单簧管/null 单糖/null 单纤维/null 单纯/null 单纯疱疹/null 单纯疱疹病毒/null 单纯词/null 单线/null 单线联系/null 单细胞/null 单细胞生物/null 单缸/null 单翼/null 单翼飞机/null 单耳/null 单联/null 单肩包/null 单胞藻/null 单脉冲/null 单脚跳/null 单腿/null 单色/null 单色光/null 单色照片/null 单色版/null 单色画/null 单薄/null 单行/null 单行本/null 单行线/null 单行道/null 单衣/null 单裤/null 单褂/null 单设/null 单证/null 单词/null 单词产生器模型/null 单说/null 单调/null 单调乏味/null 单质/null 单趟/null 单足/null 单跌/null 单身/null 单身汉/null 单身贵族/null 单车/null 单轨/null 单轨制/null 单轨铁路/null 单轮/null 单轮车/null 单边/null 单边主义/null 单连接站/null 单选/null 单铬/null 单链/null 单键/null 单镜反光相机/null 单间/null 单间儿/null 单院/null 单靠/null 单面/null 单鞋/null 单音/null 单音节/null 单音词/null 单韵母/null 单页/null 单项/null 单项奖/null 单项式/null 单额/null 单飞/null 单骑/null 单鹄寡凫/null 卖不掉/null 卖主/null 卖主求荣/null 卖乖/null 卖书/null 卖买/null 卖了/null 卖人/null 卖人情/null 卖价/null 卖俏/null 卖俏营奸/null 卖俏行奸/null 卖俏迎奸/null 卖傻/null 卖儿鬻女/null 卖光/null 卖光了/null 卖公营私/null 卖关子/null 卖关节/null 卖冰者/null 卖出/null 卖出价/null 卖刀买犊/null 卖到/null 卖剑买牛/null 卖力/null 卖力气/null 卖功/null 卖劲/null 卖卜/null 卖友/null 卖呆/null 卖命/null 卖品/null 卖唱/null 卖嘴/null 卖国/null 卖国主义/null 卖国求利/null 卖国求荣/null 卖国贼/null 卖大号/null 卖头卖脚/null 卖契/null 卖好/null 卖妻鬻子/null 卖完/null 卖官鬻爵/null 卖官鬻狱/null 卖局/null 卖工夫/null 卖底/null 卖座/null 卖弄/null 卖弄玄虚/null 卖弄风情/null 卖弄风骚/null 卖得/null 卖房/null 卖报/null 卖掉/null 卖文/null 卖断/null 卖方/null 卖方市场/null 卖春/null 卖本事/null 卖淫/null 卖淫嫖娼/null 卖清/null 卖炭翁/null 卖点/null 卖爵赘子/null 卖爵鬻子/null 卖狗悬羊/null 卖狗皮膏药/null 卖狗肉/null 卖的/null 卖盘/null 卖相/null 卖破绽/null 卖票/null 卖空/null 卖笑/null 卖给/null 卖老/null 卖者/null 卖肉/null 卖肉者/null 卖艺/null 卖花/null 卖苦力/null 卖茶/null 卖萌/null 卖货/null 卖超过/null 卖身/null 卖身契/null 卖身投靠/null 卖钱/null 卖面子/null 卖风流/null 卖鱼妇/null 南丁格尔/null 南三角座/null 南下/null 南丰/null 南丹/null 南乐/null 南乔治亚岛和南桑威奇/null 南乳/null 南亚/null 南亚区域合作联盟/null 南京农业大学/null 南京大学/null 南京大屠杀/null 南京大屠杀事件/null 南京条约/null 南京理工大学/null 南京路/null 南京邮电大学/null 南京长江大桥/null 南人/null 南侧/null 南充/null 南充地区/null 南关/null 南关区/null 南冕座/null 南军/null 南冰洋/null 南凉/null 南化/null 南化乡/null 南北/null 南北战争/null 南北方/null 南北朝/null 南北极/null 南北美/null 南北议和/null 南北长/null 南北韩/null 南十字座/null 南半球/null 南华/null 南华早报/null 南华经/null 南南合作/null 南卡罗来纳/null 南卡罗来纳州/null 南召/null 南史/null 南向/null 南味/null 南和/null 南唐/null 南回归线/null 南回线/null 南园/null 南国/null 南国风光/null 南坡/null 南坪/null 南城/null 南大/null 南天竹/null 南天门/null 南太平洋/null 南奥塞梯/null 南宁地区/null 南安/null 南安普敦/null 南宋/null 南定/null 南宫/null 南寒带/null 南屯区/null 南山/null 南山区/null 南山可移/null 南山矿区/null 南山隐约/null 南岔/null 南岔区/null 南岗/null 南岗区/null 南岛/null 南岛民族/null 南岭/null 南岳/null 南岳区/null 南岸/null 南川/null 南川区/null 南州/null 南州乡/null 南州冠冕/null 南巡/null 南市/null 南市区/null 南希/null 南平/null 南平地区/null 南庄/null 南庄乡/null 南康/null 南开/null 南开大学/null 南式/null 南征/null 南征北伐/null 南征北战/null 南征北讨/null 南戏/null 南投/null 南拳/null 南拳妈妈/null 南斗/null 南斯拉夫/null 南方/null 南方人/null 南方周末/null 南方澳渔港/null 南无/null 南昌起义/null 南明/null 南明区/null 南普陀寺/null 南曲/null 南朝/null 南朝宋/null 南朝梁/null 南朝陈/null 南朝鲜/null 南朝齐/null 南木林/null 南来/null 南极/null 南极区/null 南极圈/null 南极座/null 南极洲/null 南极洲半岛/null 南枣/null 南柯一梦/null 南桐矿区/null 南梆子/null 南楼/null 南橘北枳/null 南欧/null 南欧人/null 南段/null 南汇/null 南汉/null 南江/null 南沙/null 南沙区/null 南沙群岛/null 南泥湾/null 南洋/null 南洋商报/null 南洋杉/null 南洋理工大学/null 南洋群岛/null 南派螳螂/null 南浔/null 南浔区/null 南浦/null 南浦市/null 南海/null 南海区/null 南海子/null 南海舰队/null 南海诸岛/null 南温带/null 南港/null 南港区/null 南湖/null 南湖区/null 南溪/null 南漳/null 南澳/null 南澳乡/null 南澳大利亚州/null 南澳岛/null 南燕/null 南特/null 南瓜/null 南瓜子/null 南瓜灯/null 南疆/null 南皮/null 南盟/null 南票/null 南票区/null 南端/null 南竹/null 南竿/null 南竿乡/null 南箕北斗/null 南纬/null 南线/null 南美/null 南美梨/null 南美洲/null 南美鹰/null 南胡/null 南胶河/null 南腔北调/null 南至/null 南航/null 南芬/null 南芬区/null 南苏丹/null 南苑/null 南荷兰/null 南蛮/null 南行/null 南街/null 南西诸岛/null 南诏/null 南诏国/null 南谯/null 南谯区/null 南货/null 南赡部洲/null 南越/null 南路/null 南辕北辙/null 南边/null 南边儿/null 南达科他/null 南达科他州/null 南进/null 南进政策/null 南迦巴瓦峰/null 南通/null 南通地区/null 南郊/null 南郊区/null 南郑/null 南部/null 南部人/null 南部非洲/null 南郭/null 南针/null 南长/null 南长区/null 南门/null 南门二/null 南阮北阮/null 南阳/null 南阳县/null 南阳地区/null 南陵/null 南雄/null 南靖/null 南非洲/null 南非语/null 南面/null 南面百城/null 南韩/null 南风/null 南风不竞/null 南飞过冬/null 南鱼座/null 南鹞北鹰/null 南麓/null 南齐/null 南齐书/null 博个知今/null 博乐/null 博伊西/null 博兴/null 博动/null 博友/null 博取/null 博古/null 博古通今/null 博士/null 博士买驴/null 博士后/null 博士头衔/null 博士学位/null 博士山/null 博士生/null 博大/null 博大精深/null 博奕/null 博如大海/null 博学/null 博学多才/null 博学多闻/null 博学洽闻/null 博客/null 博客写手/null 博客圈/null 博客话剧/null 博尔塔拉/null 博尔塔拉蒙古自治州/null 博尔德/null 博尔赫斯/null 博尔顿/null 博山/null 博山区/null 博帕尔/null 博弈/null 博弈者/null 博弈论/null 博引/null 博彩/null 博得/null 博德/null 博文/null 博文约礼/null 博斗/null 博斯普鲁斯海峡/null 博斯沃思/null 博斯腾湖/null 博施济众/null 博格/null 博格多/null 博格多汗宫/null 博格达山脉/null 博格达峰/null 博洛尼亚/null 博湖/null 博爱/null 博爱者/null 博物/null 博物多闻/null 博物学家/null 博物洽闻/null 博物院/null 博物馆/null 博物馆学/null 博登湖/null 博白/null 博福斯/null 博罗/null 博美犬/null 博而不精/null 博茨瓦纳/null 博茨瓦那/null 博蒂/null 博蒙特/null 博览/null 博览会/null 博讯/null 博识/null 博识多通/null 博识洽闻/null 博采/null 博采众家之长/null 博采众长/null 博采各家之长/null 博野/null 博闻/null 博闻多识/null 博闻强志/null 博闻强记/null 博闻强识/null 博雅/null 博鳌/null 博鳌亚洲论坛/null 博鳌镇/null 卜卜米/null 卜占/null 卜占官/null 卜卦/null 卜夜卜昼/null 卜宅/null 卜居/null 卜征/null 卜昼卜夜/null 卜术/null 卜甲/null 卜筮/null 卜算/null 卜课/null 卜辞/null 卜问/null 卜骨/null 卟吩/null 卟啉/null 卟通/null 占上风/null 占下风/null 占为己有/null 占主导地位/null 占了/null 占人口总数/null 占优/null 占优势/null 占位/null 占位符/null 占位置/null 占住/null 占便宜/null 占兆/null 占先/null 占公家便宜/null 占到/null 占卜/null 占卜者/null 占卦/null 占压/null 占去/null 占地/null 占地位/null 占地儿/null 占地方/null 占地面积/null 占城/null 占婆/null 占尽/null 占据/null 占据者/null 占族/null 占星/null 占星学/null 占星家/null 占星师/null 占星术/null 占有/null 占有一席之地/null 占有人/null 占有物/null 占有率/null 占有者/null 占有量/null 占板/null 占梦/null 占满/null 占用/null 占着/null 占线/null 占著/null 占课/null 占领/null 占领军/null 占领区/null 占领市场/null 占领者/null 卡丁车/null 卡上/null 卡乐星/null 卡人/null 卡介苗/null 卡仙尼/null 卡位/null 卡住/null 卡其/null 卡其布/null 卡其色/null 卡具/null 卡内基/null 卡内基梅隆大学/null 卡农/null 卡利亚里/null 卡利卡特/null 卡利多尼亚/null 卡利科/null 卡匣/null 卡哇伊/null 卡嗒声/null 卡嚓/null 卡圈/null 卡在/null 卡塔尔/null 卡塔尔人/null 卡塔尼亚/null 卡塔赫纳/null 卡壳/null 卡夫/null 卡夫卡/null 卡奴/null 卡子/null 卡宾枪/null 卡尔/null 卡尔・马克思/null 卡尔加里/null 卡尔巴拉/null 卡尔德龙/null 卡尔扎伊/null 卡尔文/null 卡尔文克莱因/null 卡尔斯鲁厄/null 卡尔顿/null 卡尺/null 卡尼丁/null 卡巴/null 卡巴斯基/null 卡巴胂/null 卡巴莱/null 卡布其诺/null 卡布其诺咖啡/null 卡布奇诺/null 卡帕/null 卡带/null 卡式/null 卡弹/null 卡恩/null 卡扎菲/null 卡拉/null 卡拉什尼科夫/null 卡拉奇/null 卡拉奇那/null 卡拉姆昌德/null 卡拉季奇/null 卡拉布里亚/null 卡拉比拉/null 卡拉胶/null 卡拉马佐夫兄弟/null 卡拉OK/null 卡擦/null 卡文迪什/null 卡斯特利翁/null 卡斯特罗/null 卡斯翠/null 卡斯蒂利亚/null 卡斯蒂利亚・莱昂/null 卡方/null 卡昂/null 卡桑德拉/null 卡梅伦/null 卡死/null 卡油/null 卡波耶拉/null 卡波西氏肉瘤/null 卡洛娜/null 卡洛斯/null 卡片/null 卡片盒/null 卡特/null 卡特尔/null 卡特彼勒公司/null 卡瓦格博峰/null 卡盘/null 卡答声/null 卡索/null 卡紧/null 卡纳塔克邦/null 卡纳维尔角/null 卡纳维拉尔角/null 卡纸/null 卡罗利纳/null 卡美拉/null 卡美洛/null 卡脖子/null 卡脖旱/null 卡萨布兰卡/null 卡西尼/null 卡西欧/null 卡西米尔效应/null 卡西莫夫/null 卡规/null 卡路里/null 卡车/null 卡达/null 卡通/null 卡钳/null 卡门/null 卡门柏乳酪/null 卡门贝/null 卢克索/null 卢卡/null 卢卡斯/null 卢卡申科/null 卢因/null 卢塞恩/null 卢安达/null 卢布/null 卢布尔雅那/null 卢循起义/null 卢旺达/null 卢梭/null 卢森堡/null 卢森堡人/null 卢森堡市/null 卢武铉/null 卢比/null 卢比安纳/null 卢氏/null 卢沟桥/null 卢沟桥事变/null 卢泰愚/null 卢浮宫/null 卢湾/null 卢照邻/null 卢瑟/null 卢瑟福/null 卢瓦尔河/null 卢萨卡/null 卢龙/null 卤代烃/null 卤化/null 卤化物/null 卤化银/null 卤味/null 卤壶/null 卤属/null 卤族/null 卤水/null 卤汁/null 卤法/null 卤田/null 卤素/null 卤肉/null 卤莽/null 卤莽灭裂/null 卤菜/null 卤虾/null 卤虾油/null 卤蛋/null 卤质/null 卤过鱼/null 卤钨灯/null 卤面/null 卤鸡/null 卦义/null 卦算/null 卦辞/null 卧下/null 卧不安/null 卧不安席/null 卧不安枕/null 卧位/null 卧佛/null 卧倒/null 卧具/null 卧内/null 卧地/null 卧姿/null 卧室/null 卧床/null 卧床不起/null 卧底/null 卧式/null 卧房/null 卧推/null 卧旗息鼓/null 卧果儿/null 卧椅/null 卧榻/null 卧榻之侧/null 卧游/null 卧狼当道/null 卧病/null 卧病在床/null 卧舱/null 卧薪尝胆/null 卧虎/null 卧虎藏龙/null 卧谈/null 卧车/null 卧车铺/null 卧轨/null 卧铺/null 卧雪眠霜/null 卧鼓偃旗/null 卧龙/null 卧龙区/null 卧龙大熊猫保护区/null 卧龙自然保护区/null 卫东/null 卫东区/null 卫兵/null 卫冕/null 卫冕者/null 卫国/null 卫城/null 卫士/null 卫奕信/null 卫尉/null 卫戍/null 卫戍区/null 卫戍部队/null 卫护/null 卫报/null 卫拉特/null 卫星/null 卫星云图/null 卫星侦察/null 卫星国/null 卫星图/null 卫星图像/null 卫星地面站/null 卫星城/null 卫星定位系统/null 卫星导航/null 卫星导航系统/null 卫星电视/null 卫星通信/null 卫校/null 卫氏朝鲜/null 卫浴/null 卫满朝鲜/null 卫滨/null 卫滨区/null 卫理公会/null 卫生/null 卫生保健/null 卫生动员/null 卫生勤务/null 卫生厅/null 卫生员/null 卫生学/null 卫生官员/null 卫生局/null 卫生巾/null 卫生带/null 卫生所/null 卫生条件/null 卫生棉/null 卫生棉条/null 卫生球/null 卫生用纸/null 卫生纸/null 卫生组织/null 卫生署/null 卫生衣/null 卫生裤/null 卫生设备/null 卫生部/null 卫生间/null 卫生防疫/null 卫生院/null 卫生陶瓷/null 卫留成/null 卫矛/null 卫舰/null 卫视/null 卫辉/null 卫道/null 卫道士/null 卫队/null 卯兔/null 卯时/null 卯榫/null 卯眼/null 印上/null 印中/null 印之/null 印书/null 印于/null 印件/null 印信/null 印像/null 印像派/null 印出/null 印制/null 印制电路/null 印制电路板/null 印刷/null 印刷业/null 印刷体/null 印刷厂/null 印刷品/null 印刷学/null 印刷工/null 印刷店/null 印刷所/null 印刷术/null 印刷机/null 印刷版/null 印刷物/null 印刷电路/null 印刷电路板/null 印刷者/null 印加/null 印加人/null 印发/null 印古什/null 印台/null 印台区/null 印地安纳/null 印地安纳州/null 印地语/null 印堂/null 印妥/null 印子/null 印子钱/null 印字/null 印字机/null 印尼/null 印尼币/null 印尼盾/null 印巴/null 印度/null 印度人/null 印度人民党/null 印度兵/null 印度半岛/null 印度国大党/null 印度尼西亚/null 印度尼西亚语/null 印度巴基斯坦战争/null 印度支那/null 印度支那半岛/null 印度教/null 印度教徒/null 印度斯坦/null 印度时报/null 印度橡胶树/null 印度民族大起义/null 印度河/null 印度洋/null 印度眼镜蛇/null 印度航空公司/null 印度袄/null 印度音乐/null 印度鬼椒/null 印张/null 印成/null 印戒/null 印戳/null 印把子/null 印支/null 印支半岛/null 印支期/null 印数/null 印有/null 印本/null 印染/null 印次/null 印欧人/null 印欧文/null 印欧语/null 印欧语系/null 印欧语言/null 印江/null 印江县/null 印油/null 印泥/null 印片/null 印版/null 印玺/null 印画/null 印痕/null 印盒/null 印相/null 印相纸/null 印章/null 印第安/null 印第安人/null 印第安座/null 印第安纳/null 印第安纳州/null 印第安纳波利斯/null 印第安语/null 印累绶若/null 印纸/null 印纽/null 印绶/null 印航/null 印色/null 印花/null 印花厂/null 印花布/null 印花税/null 印行/null 印表/null 印表机/null 印记/null 印证/null 印谱/null 印象/null 印象主义/null 印象派/null 印象深刻/null 印迹/null 印鉴/null 印钞票/null 印钮/null 印错/null 印页/null 印鼠客蚤/null 印鼻/null 危于累卵/null 危亡/null 危及/null 危困/null 危在旦夕/null 危地/null 危地马拉/null 危地马拉人/null 危城/null 危境/null 危如朝露/null 危如累卵/null 危害/null 危害性/null 危害评价/null 危局/null 危岩/null 危径/null 危急/null 危性/null 危惧/null 危房/null 危房改造/null 危改/null 危旧房/null 危旧房屋/null 危机/null 危机四伏/null 危机感/null 危楼/null 危殆/null 危浅/null 危笃/null 危而不持/null 危若朝露/null 危言/null 危言危行/null 危言正色/null 危言耸听/null 危言谠论/null 危语/null 危辞耸听/null 危迫/null 危途/null 危重/null 危重病人/null 危险/null 危险区/null 危险品/null 危险性/null 危险期/null 危险物/null 危险物品/null 危险警告灯/null 危难/null 即丢/null 即为/null 即从/null 即付/null 即付即打/null 即令/null 即以其人之道/null 即位/null 即使/null 即使是/null 即便/null 即兴/null 即兴之作/null 即兴发挥/null 即兴而作/null 即刻/null 即化/null 即发/null 即可/null 即告/null 即回/null 即在/null 即地/null 即墨/null 即如/null 即对/null 即将/null 即将来临/null 即属/null 即已/null 即席/null 即弃/null 即得/null 即或/null 即扔/null 即把/null 即指/null 即按/null 即插即用/null 即日/null 即早/null 即时/null 即时即地/null 即时通讯/null 即是/null 即景/null 即景生情/null 即有/null 即期/null 即止/null 即溶咖啡/null 即用/null 即由/null 即纳/null 即若/null 即表示/null 即被/null 即要/null 即论/null 即逝/null 即那/null 即食/null 即鹿无虞/null 却不/null 却为/null 却之不恭/null 却也/null 却倒/null 却其/null 却可/null 却向/null 却因/null 却在/null 却已/null 却才/null 却把/null 却是/null 却有/null 却步/null 却病/null 却病延年/null 却给/null 却能/null 却被/null 却要/null 却见/null 却说/null 却象/null 卵与石斗/null 卵圆/null 卵圆形/null 卵圆窗/null 卵块/null 卵壳/null 卵子/null 卵巢/null 卵巢炎/null 卵巢窝/null 卵形/null 卵形物/null 卵模/null 卵母细胞/null 卵泡/null 卵生/null 卵用鸡/null 卵白/null 卵石/null 卵磷脂/null 卵精巢/null 卵细胞/null 卵翼/null 卵胎生/null 卵膜/null 卵裂/null 卵黄/null 卵黄囊/null 卵黄管/null 卵黄腺/null 卷上/null 卷云/null 卷儿/null 卷入/null 卷册/null 卷刃/null 卷动/null 卷发/null 卷发器/null 卷发纸/null 卷叶蛾/null 卷吸作用/null 卷回/null 卷土重来/null 卷地皮/null 卷头/null 卷子/null 卷宗/null 卷尺/null 卷层云/null 卷巴/null 卷布/null 卷帆索/null 卷帘门/null 卷帙/null 卷帙浩繁/null 卷带/null 卷开/null 卷心/null 卷心菜/null 卷成/null 卷扬/null 卷扬机/null 卷收/null 卷旗息鼓/null 卷曲/null 卷有/null 卷标/null 卷毛/null 卷浪/null 卷烟/null 卷烟厂/null 卷片/null 卷着/null 卷积云/null 卷笔刀/null 卷筒/null 卷紧/null 卷纸/null 卷纸烟/null 卷线器/null 卷绕/null 卷缩/null 卷缩了/null 卷缩成/null 卷缩状/null 卷缩者/null 卷舌/null 卷舌元音/null 卷舌音/null 卷装/null 卷裹/null 卷走/null 卷起/null 卷起来/null 卷轴/null 卷轴装/null 卷边/null 卷过/null 卷进/null 卷逃/null 卷铺盖/null 卷铺盖走人/null 卷须/null 卷饼/null 卷首/null 卸上/null 卸下/null 卸下船/null 卸任/null 卸去/null 卸套/null 卸妆/null 卸掉/null 卸桥/null 卸煤机/null 卸磨杀驴/null 卸职/null 卸肩/null 卸肩儿/null 卸脱/null 卸装/null 卸责/null 卸货/null 卸货人/null 卸车/null 卸载/null 卸除/null 卸鞍/null 卺饮/null 卿卿/null 卿卿我我/null 卿士/null 卿大夫/null 卿相/null 卿鱼/null 厂丝/null 厂主/null 厂休/null 厂内/null 厂办/null 厂区/null 厂史/null 厂名/null 厂商/null 厂地/null 厂址/null 厂外/null 厂子/null 厂字旁/null 厂家/null 厂工/null 厂房/null 厂方/null 厂校挂钩/null 厂棚/null 厂牌/null 厂矿/null 厂矿企业/null 厂礼拜/null 厂级/null 厂装/null 厂规/null 厂部/null 厂里/null 厂长/null 厂长负责制/null 厄什塔/null 厄勒海峡/null 厄尔/null 厄尔尼诺/null 厄尔尼诺现象/null 厄尔布鲁士/null 厄洛斯/null 厄瓜多尔/null 厄立特里亚/null 厄运/null 厄难/null 厅事/null 厅堂/null 厅局/null 厅局级/null 厅局长/null 厅房/null 厅里/null 厅长/null 历下/null 历下区/null 历久/null 历久弥坚/null 历书/null 历代/null 历代志上/null 历代志下/null 历任/null 历历/null 历历可数/null 历历可见/null 历历可辨/null 历历在目/null 历历如绘/null 历历落落/null 历史/null 历史上/null 历史主义/null 历史久远/null 历史事件/null 历史人物/null 历史剧/null 历史博物馆/null 历史唯心主义/null 历史唯物主义/null 历史学/null 历史学家/null 历史家/null 历史循环论/null 历史性/null 历史总在重演/null 历史悠久/null 历史意义/null 历史成本/null 历史新高/null 历史时期/null 历史条件下/null 历史沿革/null 历史版本/null 历史画/null 历史背景/null 历史观/null 历史观点/null 历史遗产/null 历史遗迹/null 历城/null 历城区/null 历尽/null 历尽沧桑/null 历届/null 历年/null 历数/null 历日旷久/null 历时/null 历朝/null 历朝通俗演义/null 历本/null 历来/null 历来最低点/null 历次/null 历法/null 历程/null 历练/null 历练老成/null 历经/null 历经沧桑/null 历经磨难/null 历象/null 历险/null 厉兵秣马/null 厉兵粟马/null 厉声/null 厉害/null 厉目而视/null 厉精图治/null 厉精更始/null 厉精求治/null 厉色/null 厉行/null 厉行节约/null 厉鬼/null 压上/null 压下/null 压不碎/null 压仰/null 压价/null 压低/null 压住/null 压倒/null 压倒一切/null 压倒元白/null 压倒多数/null 压倒性/null 压光/null 压光机/null 压克力/null 压出/null 压制/null 压制性/null 压力/null 压力容器/null 压力强度/null 压力机/null 压力表/null 压力计/null 压力锅/null 压印/null 压卷/null 压压/null 压压脚/null 压压脚儿/null 压台戏/null 压圈/null 压在/null 压在心底/null 压坏/null 压垮/null 压埋/null 压境/null 压宝/null 压寨/null 压岁/null 压岁钱/null 压差/null 压帐/null 压平/null 压延/null 压弯/null 压强/null 压后/null 压惊/null 压成/null 压扁/null 压抑/null 压抑感/null 压担子/null 压挤/null 压敏电阻器/null 压服/null 压机/null 压条/null 压板/null 压枝/null 压根/null 压根儿/null 压榨/null 压榨器/null 压榨机/null 压气/null 压气机/null 压烂/null 压电/null 压电体/null 压电效应/null 压电现象/null 压痕/null 压痛/null 压皱/null 压着/null 压破/null 压碎/null 压秤/null 压紧/null 压纹/null 压线/null 压缩/null 压缩器/null 压缩机/null 压缩比/null 压缩疗法/null 压缩空气/null 压而不服/null 压脚/null 压舌板/null 压花/null 压蒜器/null 压蔓/null 压路/null 压路机/null 压车/null 压轴好戏/null 压轴子/null 压轴戏/null 压迫/null 压迫者/null 压逼/null 压铸/null 压队/null 压阵/null 压青/null 压韵/null 压顶/null 压顶石/null 厌世/null 厌世观/null 厌倦/null 厌学/null 厌弃/null 厌恨/null 厌恶/null 厌恶人类者/null 厌战/null 厌新/null 厌旧/null 厌气/null 厌氧/null 厌氧性/null 厌氧菌/null 厌烦/null 厌腻/null 厌薄/null 厌酷球孢子菌/null 厌难折冲/null 厌食/null 厕具/null 厕坑/null 厕所/null 厕纸/null 厕身/null 厗奚/null 厘克/null 厘升/null 厘卡/null 厘定/null 厘正/null 厘清/null 厘米/null 厘米波/null 厘金/null 厚了/null 厚今薄古/null 厚养薄葬/null 厚利/null 厚厚/null 厚古薄今/null 厚味/null 厚味腊毒/null 厚墩墩/null 厚外套/null 厚实/null 厚底/null 厚度/null 厚待/null 厚德载物/null 厚德载福/null 厚德重义/null 厚恩/null 厚意/null 厚报/null 厚敛/null 厚望/null 厚朴/null 厚板/null 厚此/null 厚此薄彼/null 厚死薄生/null 厚漆/null 厚爱/null 厚片/null 厚生劳动省/null 厚生相/null 厚生省/null 厚的/null 厚皮/null 厚皮菜/null 厚着/null 厚着脸皮/null 厚礼/null 厚禄/null 厚禄高官/null 厚积薄发/null 厚纸/null 厚绒布/null 厚脸/null 厚脸皮/null 厚膜电路/null 厚舌/null 厚葬/null 厚薄/null 厚薄规/null 厚角/null 厚谊/null 厚貌深情/null 厚赐/null 厚边/null 厚达/null 厚运/null 厚道/null 厚重/null 厚颜/null 厚颜无耻/null 厝火积薪/null 厝薪于火/null 原为/null 原主/null 原义/null 原义是/null 原产/null 原产国/null 原产地/null 原人/null 原以/null 原以为/null 原件/null 原价/null 原任/null 原位/null 原住/null 原住民/null 原住民族/null 原体/null 原作/null 原作者/null 原值/null 原先/null 原函数/null 原则/null 原则上/null 原则性/null 原则立场/null 原则通过/null 原则问题/null 原创/null 原创性/null 原判/null 原动/null 原动力/null 原单位/null 原南斯拉夫/null 原原本本/null 原发性进行性失语/null 原名/null 原告/null 原味/null 原因/null 原因论/null 原图/null 原地/null 原地区/null 原地踏步/null 原场/null 原址/null 原型/null 原声/null 原处/null 原始/null 原始公社/null 原始公社所有制/null 原始反终/null 原始林/null 原始森林/null 原始热带雨林/null 原始状/null 原始社会/null 原始积累/null 原始群/null 原始要终/null 原始见终/null 原委/null 原子/null 原子价/null 原子半径/null 原子反应堆/null 原子团/null 原子堆/null 原子学/null 原子尘/null 原子序数/null 原子弹/null 原子数/null 原子时/null 原子核/null 原子核物理学/null 原子武器/null 原子炉/null 原子炸弹/null 原子爆弹/null 原子爆破弹药/null 原子物理学/null 原子科学家/null 原子科学家通报/null 原子秒/null 原子笔/null 原子能/null 原子能化学/null 原子能发电/null 原子能发电站/null 原子论/null 原子说/null 原子质量/null 原子量/null 原子钟/null 原定/null 原审/null 原宥/null 原封/null 原封不动/null 原就/null 原居/null 原属/null 原州/null 原州区/null 原平/null 原形/null 原形毕露/null 原性/null 原意/null 原成/null 原户籍/null 原指/null 原故/null 原文/null 原料/null 原料价格/null 原旧/null 原是/null 原有/null 原木/null 原本/null 原材料/null 原来/null 原极/null 原样/null 原核/null 原核生物/null 原核生物界/null 原核细胞/null 原核细胞型微生物/null 原核质/null 原案/null 原棉/null 原款/null 原殖民/null 原汁/null 原汁原味/null 原油/null 原点/null 原点矩/null 原煤/null 原爆/null 原爆点/null 原版/null 原物/null 原物料/null 原状/null 原班/null 原班人马/null 原理/null 原生/null 原生代/null 原生体/null 原生动物/null 原生生物/null 原生矿物/null 原生质/null 原田/null 原由/null 原电池/null 原盐/null 原石器/null 原矿/null 原码/null 原种/null 原税/null 原稿/null 原稿纸/null 原籍/null 原粮/null 原糖/null 原索动物/null 原纤维/null 原级/null 原线圈/null 原罪/null 原职/null 原色/null 原苏联/null 原著/null 原虫/null 原被告/null 原装/null 原计划/null 原订/null 原设/null 原证/null 原诉/null 原诗/null 原话/null 原谅/null 原貌/null 原质/null 原路/null 原载/null 原速/null 原道/null 原配/null 原酶/null 原野/null 原阳/null 原鸽/null 厢式车/null 厢房/null 厦门/null 厦门大学/null 厨余/null 厨具/null 厨卫/null 厨司/null 厨娘/null 厨子/null 厨师/null 厨师长/null 厨房/null 厨手/null 厨柜/null 厨灶/null 厩肥/null 厮守/null 厮打/null 厮搏/null 厮敬厮爱/null 厮杀/null 厮混/null 厮熟/null 厮缠/null 厮锣/null 去上学/null 去世/null 去乡村/null 去了/null 去伪存真/null 去作/null 去你的/null 去使/null 去做/null 去光水/null 去其糟粕/null 去函/null 去划船/null 去办/null 去劣/null 去势/null 去危就安/null 去去/null 去取/null 去取之间/null 去台/null 去台人员/null 去向/null 去向不明/null 去吧/null 去国外/null 去垢/null 去垢剂/null 去声/null 去壳/null 去处/null 去天尺五/null 去头/null 去官/null 去就/null 去就之分/null 去岁/null 去年/null 去年底/null 去得/null 去得快/null 去恶/null 去找/null 去抓/null 去拿/null 去拿来/null 去掉/null 去接/null 去无踪/null 去旧/null 去暑/null 去末归本/null 去杀胜残/null 去来/null 去核/null 去根/null 去死/null 去毛/null 去氧/null 去氧核糖核酸/null 去氧麻黄碱/null 去污/null 去污剂/null 去污粉/null 去法/null 去泰去甚/null 去湿/null 去火/null 去甚去泰/null 去留/null 去病/null 去皮/null 去看/null 去看戏/null 去硫/null 去磁/null 去磁场/null 去程/null 去粗取精/null 去绉/null 去职/null 去芜存菁/null 去角/null 去调节/null 去路/null 去过/null 去逝/null 去邪/null 去邪归正/null 去野餐/null 去除/null 去雄/null 去鳞/null 县上/null 县丞/null 县乡/null 县令/null 县份/null 县内/null 县办/null 县区/null 县吊/null 县名/null 县团级/null 县地/null 县城/null 县外/null 县委/null 县委书记/null 县委会/null 县官/null 县局/null 县属/null 县市/null 县府/null 县志/null 县政府/null 县河/null 县治/null 县界/null 县直/null 县直机关/null 县立/null 县级/null 县级市/null 县行/null 县试/null 县里/null 县镇/null 县长/null 参与/null 参与制/null 参与者/null 参两院/null 参事/null 参军/null 参军入伍/null 参办/null 参加/null 参加着/null 参加者/null 参加革命/null 参劾/null 参半/null 参参伍伍/null 参变/null 参变量/null 参合/null 参启/null 参商/null 参天/null 参天两地/null 参天贰地/null 参奏/null 参孙/null 参审制度/null 参宿/null 参宿七/null 参将/null 参展/null 参差/null 参差不齐/null 参差错落/null 参悟/null 参战/null 参拜/null 参政/null 参政权/null 参政议政/null 参数/null 参杂/null 参校/null 参演/null 参照/null 参照实行/null 参照物/null 参照系/null 参疑/null 参看/null 参禅/null 参考/null 参考书/null 参考书目/null 参考咨询/null 参考文/null 参考文献/null 参考材料/null 参考消息/null 参考系/null 参考资料/null 参股/null 参茸/null 参薯/null 参见/null 参观/null 参观团/null 参观指导/null 参观者/null 参议/null 参议会/null 参议员/null 参议院/null 参访团/null 参谋/null 参谋总长/null 参谋部/null 参谋长/null 参谒/null 参赛/null 参赛者/null 参赞/null 参辰卯酉/null 参辰日月/null 参选/null 参选人/null 参透/null 参酌/null 参量/null 参量空间/null 参错/null 参阅/null 参院/null 参预/null 参验/null 叆叆/null 叆叇/null 又一/null 又一个/null 又一次/null 又上/null 又不能/null 又与/null 又为/null 又从/null 又以/null 又会/null 又像/null 又到/null 又去/null 又及/null 又叫/null 又可/null 又名/null 又名为/null 又吵又闹/null 又吹/null 又和/null 又哭又闹/null 又因/null 又在/null 又多/null 又大/null 又好/null 又如/null 又对/null 又带/null 又弱一个/null 又打/null 又把/null 又拉/null 又搞/null 又放/null 又是/null 又有/null 又来/null 又来了/null 又比/null 又没/null 又热/null 又瘦/null 又称/null 又端/null 又红又专/null 又红又肿/null 又经/null 又给/null 又能/null 又被/null 又要/null 又讯/null 又说/null 又起/null 又都/null 又非/null 又靠/null 叉上/null 叉口/null 叉头/null 叉子/null 叉开/null 叉形/null 叉手/null 叉掉/null 叉架/null 叉烧/null 叉烧包/null 叉状/null 叉着/null 叉积/null 叉簧/null 叉腰/null 叉腿/null 叉起/null 叉路/null 叉车/null 叉配/null 及之/null 及其/null 及其他/null 及到/null 及早/null 及时/null 及时处理/null 及时性/null 及时行乐/null 及时雨/null 及格/null 及格线/null 及物/null 及物动词/null 及笄/null 及第/null 及膝/null 及至/null 及锋一试/null 及锋而试/null 及门/null 及龄/null 友人/null 友伴/null 友军/null 友协/null 友善/null 友好/null 友好人士/null 友好代表团/null 友好使者/null 友好关系/null 友好区/null 友好合作/null 友好周/null 友好国家/null 友好城市/null 友好往来/null 友好月/null 友好条约/null 友好相处/null 友好襄助/null 友好访问/null 友悌/null 友情/null 友派/null 友爱/null 友谊/null 友谊万岁/null 友谊地久天长/null 友谊天长地久/null 友谊峰/null 友谊比赛/null 友谊赛/null 友邦/null 友邦保险公司/null 友邻/null 友风子雨/null 双一/null 双丰收/null 双义/null 双乳/null 双亡/null 双亲/null 双人/null 双人包夹/null 双人床/null 双人房/null 双人滑/null 双人用/null 双人间/null 双份/null 双休/null 双休日/null 双侧/null 双倍/null 双倍体/null 双元音/null 双光气/null 双全/null 双关/null 双关语/null 双凸面/null 双击/null 双刃/null 双刃剑/null 双十/null 双十二事变/null 双十节/null 双双/null 双叙法/null 双台子/null 双台子区/null 双号/null 双名/null 双名法/null 双后前兵开局/null 双向/null 双向交流/null 双向选择/null 双周/null 双周刊/null 双周期性/null 双响/null 双唇/null 双唇音/null 双唑泰栓/null 双喜/null 双喜临门/null 双城/null 双城子/null 双塔/null 双塔区/null 双增双节/null 双声/null 双壳类/null 双复磷/null 双头肌/null 双套/null 双子/null 双子叶/null 双子叶植物/null 双子座/null 双字/null 双季稻/null 双学位/null 双安/null 双宾语/null 双宿双飞/null 双射/null 双层/null 双层公共汽车/null 双层巴士/null 双峰/null 双峰驼/null 双工/null 双工器/null 双开/null 双态/null 双性恋/null 双截棍/null 双手/null 双手拉/null 双打/null 双折射/null 双抢/null 双抽/null 双拐/null 双拥/null 双拼/null 双挡/null 双排/null 双摆/null 双数/null 双料/null 双方/null 双方同意/null 双方面/null 双日/null 双星/null 双曲/null 双曲余割/null 双曲余弦/null 双曲抛物面/null 双曲拱桥/null 双曲正弦/null 双曲线/null 双曲线正弦/null 双曲面/null 双月/null 双月刊/null 双杠/null 双极/null 双柏/null 双柑斗酒/null 双栅极/null 双栖/null 双栖双宿/null 双核/null 双桅船/null 双桥/null 双桨/null 双氟/null 双氧/null 双氧水/null 双氯灭痛/null 双氯芬酸钠/null 双氯醇胺/null 双水内冷发电机/null 双江县/null 双流/null 双清/null 双清区/null 双湖/null 双湖特别区/null 双溪/null 双溪乡/null 双滦/null 双滦区/null 双焦点/null 双牌/null 双独/null 双独夫妇/null 双球菌/null 双生/null 双生兄弟/null 双百方针/null 双目/null 双目失明/null 双盲/null 双眸/null 双眼/null 双眼皮/null 双眼视觉/null 双瞳剪水/null 双程票/null 双稳态/null 双立人/null 双端/null 双筒/null 双筒望远镜/null 双管/null 双管齐下/null 双簧/null 双簧管/null 双糖/null 双线/null 双线性/null 双绞线/null 双缸/null 双翅目/null 双翅类/null 双翼/null 双翼飞机/null 双耳/null 双职/null 双职工/null 双股/null 双肩/null 双胎/null 双胞/null 双胞胎/null 双脚/null 双腿/null 双膝/null 双臂/null 双色/null 双节棍/null 双节棍道/null 双蕊兰/null 双行/null 双行线/null 双行道/null 双规/null 双角/null 双角犀/null 双解/null 双语/null 双误/null 双调和/null 双赢/null 双足/null 双身子/null 双轨/null 双轨制/null 双边/null 双边会谈/null 双边关系/null 双边合作/null 双边条约/null 双边贸易/null 双辽/null 双进双出/null 双连接站/null 双速/null 双重/null 双重人格/null 双重国籍/null 双重性/null 双重标准/null 双重目/null 双重身份/null 双重身分/null 双重领导/null 双金属/null 双钩/null 双铺/null 双链/null 双链核酸/null 双键/null 双阳/null 双阳区/null 双阳极/null 双陆棋/null 双面/null 双音/null 双音节/null 双音频/null 双颊/null 双飞/null 双鬓/null 双鱼/null 双鱼座/null 双鸟在林一鸟在手/null 双鸭山/null 双龙大裂谷/null 双龙镇/null 反三角函数/null 反中/null 反中子/null 反串/null 反义/null 反义字/null 反义词/null 反之/null 反之亦然/null 反互换/null 反人类/null 反人类罪/null 反人道罪/null 反人道罪行/null 反传算法/null 反作用/null 反作用力/null 反例/null 反侦察/null 反侧/null 反侵略/null 反侵略战争/null 反修/null 反倒/null 反倾销/null 反光/null 反光镜/null 反光面/null 反党/null 反党集团/null 反共/null 反共主义/null 反共宣传/null 反共宣传罪/null 反兴奋剂/null 反其/null 反其道而行之/null 反冲/null 反冲击/null 反冲力/null 反击/null 反函数/null 反分裂法/null 反切/null 反刍/null 反刍动物/null 反刍类/null 反到/null 反剪/null 反力/null 反动/null 反动分子/null 反动势力/null 反动派/null 反华/null 反卫星/null 反卷/null 反压力/null 反去/null 反及/null 反反复复/null 反叛/null 反叛分子/null 反口/null 反右/null 反右派斗争/null 反右运动/null 反合围/null 反向/null 反听内视/null 反告/null 反咬/null 反咬一口/null 反响/null 反哺/null 反唇相稽/null 反唇相讥/null 反嘴/null 反噬/null 反围剿/null 反圣婴/null 反地道/null 反坐/null 反坦克/null 反坦克导弹/null 反坦克炮/null 反坫/null 反垄断/null 反垄断法/null 反基督/null 反复/null 反复不常/null 反复强调/null 反复性/null 反复无常/null 反复研究/null 反复证明/null 反季/null 反客为主/null 反密码子/null 反对/null 反对党/null 反对党人/null 反对极/null 反对派/null 反对物/null 反对票/null 反对称/null 反对者/null 反导/null 反导导弹/null 反导弹/null 反导系统/null 反封锁/null 反射/null 反射体/null 反射作用/null 反射光/null 反射动作/null 反射区治疗/null 反射器/null 反射层/null 反射弧/null 反射性/null 反射星云/null 反射比/null 反射波/null 反射炉/null 反射率/null 反射疗法/null 反射线/null 反射角/null 反射镜/null 反射面/null 反左/null 反差/null 反差强/null 反帝/null 反帝反封建/null 反常/null 反干扰/null 反序/null 反应/null 反应器/null 反应堆/null 反应堆燃料元件/null 反应堆芯/null 反应式/null 反应方程/null 反应时/null 反应时间/null 反应炉/null 反应热/null 反应物/null 反应者/null 反应迟钝/null 反应速度/null 反应锅/null 反建议/null 反式/null 反式脂肪/null 反弹/null 反弹导弹/null 反弹道/null 反录病毒/null 反影镜/null 反心/null 反思/null 反恐/null 反恐怖/null 反恐战争/null 反悔/null 反情报/null 反意/null 反意字/null 反感/null 反戈/null 反戈一击/null 反战/null 反战抗议/null 反战运动/null 反手/null 反手拍/null 反扑/null 反打/null 反托/null 反托拉斯/null 反扫荡/null 反批评/null 反抗/null 反抗者/null 反折/null 反折射/null 反掌/null 反接/null 反控/null 反推/null 反推力/null 反搞/null 反撞/null 反攻/null 反攻倒算/null 反攻战役/null 反攻日/null 反政变/null 反政府/null 反散射/null 反文旁/null 反斜杠/null 反斜线/null 反日/null 反时势/null 反时针/null 反映/null 反映情况/null 反映论/null 反是/null 反显/null 反本还原/null 反机动/null 反杜林论/null 反核/null 反正/null 反正一样/null 反步兵/null 反武装/null 反殖/null 反殖民/null 反毒品/null 反比/null 反比例/null 反气旋/null 反水/null 反水不收/null 反求诸己/null 反法西斯/null 反法西斯战争/null 反派/null 反清/null 反演/null 反潜/null 反潜机/null 反潜艇/null 反潮/null 反潮流/null 反激因/null 反火力/null 反照/null 反照率/null 反物质/null 反特/null 反犹太主义/null 反生物战/null 反用/null 反用换流器/null 反用法/null 反电动势/null 反电子/null 反白/null 反目/null 反目为仇/null 反目成仇/null 反相/null 反省/null 反眼不识/null 反知识/null 反码/null 反硝化作用/null 反磁性/null 反社会/null 反社会行为/null 反科学/null 反空袭/null 反空降/null 反突击/null 反突破/null 反粒子/null 反经合义/null 反经行权/null 反美/null 反而/null 反而是/null 反聘/null 反胃/null 反脚/null 反脸无情/null 反腐/null 反腐倡廉/null 反腐败/null 反舰导弹/null 反舰艇/null 反舰艇巡航导弹/null 反色/null 反艺术/null 反英/null 反英雄/null 反蚕食/null 反衬/null 反袁/null 反袁斗争/null 反袁运动/null 反装甲/null 反裘负刍/null 反裘负薪/null 反西方/null 反覆/null 反覆说/null 反观/null 反角/null 反言/null 反计/null 反讲/null 反论/null 反讽/null 反证/null 反证法/null 反诉/null 反诉状/null 反诗/null 反诘/null 反诘问/null 反话/null 反诬/null 反语/null 反语法/null 反调制/null 反调幅/null 反败为胜/null 反质子/null 反贪/null 反贪污/null 反贪腐/null 反赤道流/null 反走私/null 反跃/null 反跳/null 反身/null 反身代词/null 反躬自省/null 反躬自责/null 反躬自问/null 反转/null 反转录/null 反转录病毒/null 反转来/null 反转片/null 反转选择/null 反过来/null 反过来说/null 反逆/null 反遭/null 反酷刑折磨公约/null 反醒/null 反重合/null 反铲/null 反锁/null 反问/null 反问句/null 反问语气/null 反间/null 反间计/null 反间谍/null 反霸/null 反霸斗争/null 反面/null 反面人物/null 反面儿/null 反面教员/null 反面无情/null 反革命/null 反革命分子/null 反革命宣传/null 反革命宣传煽动罪/null 反革命战争/null 反革命政变/null 反革命案件/null 反顾/null 反馈/null 反驳/null 反驳者/null 反驳道/null 反骄破满/null 反高潮/null 反黄/null 发丝/null 发丧/null 发之/null 发乳/null 发事/null 发交/null 发亮/null 发人深思/null 发人深省/null 发人深醒/null 发付/null 发令/null 发令枪/null 发件人/null 发伪誓/null 发低/null 发作/null 发作性/null 发信/null 发信人/null 发信号/null 发光/null 发光二极体/null 发光二极管/null 发光体/null 发光度/null 发光强度/null 发光性/null 发光物/null 发兵/null 发冷/null 发冷光/null 发凡/null 发凡举例/null 发出/null 发出指示/null 发出通知/null 发函/null 发刊/null 发刊词/null 发力/null 发动/null 发动力/null 发动攻势/null 发动机/null 发动群众/null 发包/null 发单/null 发卡/null 发卷/null 发号出令/null 发号布令/null 发号施令/null 发否/null 发呆/null 发呕/null 发售/null 发喊连天/null 发喘/null 发嘎嘎声/null 发嘘/null 发嘘声/null 发嘶/null 发噱/null 发回/null 发型/null 发型师/null 发声/null 发声器/null 发声器官/null 发声法/null 发夹/null 发奋/null 发奋图强/null 发奋忘食/null 发奋有为/null 发奖/null 发奖仪式/null 发套/null 发奸摘隐/null 发妻/null 发威/null 发家/null 发家致富/null 发射/null 发射中/null 发射井/null 发射体/null 发射光谱/null 发射出/null 发射台/null 发射器/null 发射场/null 发射学/null 发射成功/null 发射星云/null 发射机/null 发射机应答器/null 发射极/null 发射点/null 发射物/null 发射站/null 发射者/null 发尖/null 发屋/null 发屋求狸/null 发展/null 发展中/null 发展中国家/null 发展史/null 发展商/null 发展好/null 发展核武器/null 发展的国家/null 发展研究中心/null 发展观/null 发展趋势/null 发工资/null 发工资日/null 发市/null 发布/null 发布会/null 发布者/null 发帖/null 发带/null 发干/null 发廊/null 发式/null 发引/null 发形/null 发往/null 发怒/null 发怔/null 发急/null 发怵/null 发恶臭/null 发恼/null 发悸/null 发情/null 发情期/null 发愁/null 发愣/null 发愤/null 发愤图强/null 发愿/null 发慌/null 发憷/null 发懵/null 发成/null 发扬/null 发扬光大/null 发扬成绩/null 发扬民主/null 发扬踔厉/null 发扬蹈厉/null 发抒/null 发抖/null 发报/null 发报人/null 发报机/null 发指/null 发指眦裂/null 发挥/null 发掉/null 发排/null 发掘/null 发放/null 发放贷款/null 发政施仁/null 发散/null 发散出/null 发散透镜/null 发文/null 发料/null 发明/null 发明人/null 发明创造/null 发明家/null 发明权/null 发明物/null 发明者/null 发昏/null 发昏章十一/null 发春/null 发晕/null 发暗/null 发条/null 发来/null 发枪/null 发柔/null 发标/null 发根/null 发案/null 发案率/null 发棵/null 发楞/null 发榜/null 发横财/null 发款员/null 发毛/null 发气/null 发水/null 发汗/null 发汗室/null 发油/null 发泄/null 发泄对象/null 发泡/null 发泡剂/null 发泡胶/null 发浊音/null 发源/null 发源地/null 发火/null 发火点/null 发炎/null 发炮/null 发烟/null 发烧/null 发烧友/null 发烫/null 发热/null 发热伴血小板减少综合征/null 发热器/null 发热量/null 发牌/null 发牌者/null 发牢骚/null 发物/null 发狂/null 发狂言/null 发狠/null 发现/null 发现号/null 发现物/null 发现者/null 发现问题/null 发球/null 发球区/null 发球者/null 发生/null 发生中/null 发生了/null 发生于/null 发生去/null 发生器/null 发生地/null 发生率/null 发电/null 发电厂/null 发电室/null 发电容量/null 发电技术/null 发电报/null 发电机/null 发电站/null 发电能力/null 发电量/null 发疯/null 发病/null 发病率/null 发痒/null 发痛/null 发痧/null 发痴/null 发癣/null 发白/null 发直/null 发短信/null 发短心长/null 发硎新试/null 发硬/null 发磷光/null 发神经/null 发祥/null 发祥地/null 发票/null 发福/null 发积/null 发稿/null 发稿时/null 发窘/null 发端/null 发笑/null 发策决科/null 发簪/null 发粉/null 发粘/null 发糕/null 发紫/null 发红/null 发纵指示/null 发绀/null 发结/null 发给/null 发绺/null 发网/null 发罩/null 发聋振聩/null 发育/null 发育不良/null 发育期/null 发育生物学/null 发胀/null 发胖/null 发胶/null 发脆/null 发脚/null 发脱口齿/null 发脾气/null 发腻/null 发自/null 发自内心/null 发臭/null 发至/null 发芽/null 发芽势/null 发芽率/null 发菜/null 发落/null 发蒙/null 发蒙振聩/null 发蒙振落/null 发蓝/null 发蔫/null 发薪/null 发薪日/null 发薪水/null 发虚/null 发蜡/null 发行/null 发行人/null 发行基金/null 发行备忘录/null 发行工作/null 发行红利股/null 发行者/null 发行部/null 发行量/null 发行额/null 发表/null 发表声明/null 发表意见/null 发表文章/null 发表演讲/null 发表谈话/null 发见/null 发觉/null 发解/null 发言/null 发言中肯/null 发言人/null 发言权/null 发言稿/null 发言者/null 发誓/null 发警报/null 发证/null 发话/null 发话器/null 发话筒/null 发语词/null 发语辞/null 发财/null 发财了/null 发财致富/null 发货/null 发货人/null 发贴/null 发起/null 发起书/null 发起人/null 发踊冲冠/null 发踪指示/null 发身/null 发车/null 发轫/null 发软/null 发辫/null 发达/null 发达国/null 发达国家/null 发达地区/null 发过誓/null 发运/null 发还/null 发迹/null 发送/null 发送功率/null 发送器/null 发送机/null 发送者/null 发配/null 发酒疯/null 发酵/null 发酵了/null 发酵剂/null 发酵学/null 发酵性/null 发酵法/null 发酵物/null 发酵粉/null 发酵饲料/null 发酸/null 发野/null 发钗/null 发问/null 发问者/null 发闷/null 发隐摘伏/null 发难/null 发霉/null 发露/null 发青/null 发面/null 发音/null 发音体/null 发音器官/null 发音法/null 发颤/null 发飘/null 发飙/null 发饰品/null 发饷/null 发香/null 发髻/null 发麻/null 发黄/null 发黑/null 叔丈人/null 叔丈母/null 叔伯/null 叔侄/null 叔公/null 叔叔/null 叔婆/null 叔婶/null 叔嫂/null 叔子/null 叔岳/null 叔本华/null 叔母/null 叔父/null 叔祖/null 叔祖母/null 叔舅/null 取下/null 取之/null 取之不保/null 取之不尽/null 取之不尽用之不竭/null 取之于/null 取乐/null 取书/null 取代/null 取保/null 取保候审/null 取保释放/null 取信/null 取信于民/null 取值/null 取偿/null 取其/null 取其精华/null 取决/null 取决于/null 取出/null 取刀/null 取去/null 取名/null 取名为/null 取向/null 取回/null 取尽/null 取巧/null 取得/null 取得一致/null 取得实效/null 取得胜利/null 取悦/null 取悦于/null 取才/null 取掉/null 取教/null 取整/null 取景/null 取景器/null 取暖/null 取材/null 取来/null 取样/null 取样数量/null 取款/null 取款机/null 取水/null 取法/null 取消/null 取消后/null 取消禁令/null 取消组/null 取火/null 取灯儿/null 取物/null 取用/null 取的/null 取笑/null 取精/null 取精用弘/null 取经/null 取给/null 取绰号/null 取缔/null 取而/null 取而代之/null 取胜/null 取自/null 取舍/null 取舍权/null 取证/null 取货/null 取费/null 取走/null 取送/null 取道/null 取钱/null 取银/null 取长补短/null 取闹/null 取阅/null 取青配白/null 取静/null 取齐/null 受不了/null 受业/null 受主/null 受之/null 受之有愧/null 受了/null 受事/null 受享/null 受人/null 受任/null 受众/null 受伤/null 受伤处/null 受伤害/null 受伤者/null 受住/null 受体/null 受作/null 受俘/null 受保人/null 受保障监督的设施/null 受信/null 受信人/null 受俸/null 受俸者/null 受冻/null 受凉/null 受击/null 受刑/null 受刑人/null 受创伤/null 受到/null 受到了/null 受到冲击/null 受到好评/null 受到影响/null 受到破坏/null 受到重视/null 受到限制/null 受制/null 受刺激/null 受力/null 受勋/null 受取/null 受后付款/null 受听/null 受命/null 受命于天/null 受困/null 受困惑/null 受够/null 受奉/null 受奖/null 受好评/null 受孕/null 受宠/null 受宠若惊/null 受审/null 受害/null 受害人/null 受害者/null 受寒/null 受封/null 受尊敬/null 受尽/null 受德/null 受性/null 受恐怖/null 受恐慌/null 受惊/null 受惊吓/null 受惠/null 受惠者/null 受惩罚/null 受戒/null 受打/null 受托/null 受托人/null 受托者/null 受持/null 受挫/null 受挫折/null 受损/null 受损失/null 受损害/null 受控/null 受控制/null 受援/null 受操纵/null 受支配/null 受敌/null 受救/null 受教/null 受暑/null 受有/null 受权/null 受格/null 受欢迎/null 受款人/null 受气/null 受气包/null 受治于/null 受治疗/null 受法律保护权/null 受洗/null 受洗命名/null 受涝/null 受潮/null 受灾/null 受灾地区/null 受灾面积/null 受热/null 受理/null 受用/null 受电弓/null 受病/null 受瘪/null 受益/null 受益不浅/null 受益人/null 受益匪浅/null 受益者/null 受看/null 受知/null 受礼/null 受禄/null 受禅/null 受穷/null 受窘/null 受粉/null 受精/null 受精卵/null 受精囊/null 受累/null 受约人/null 受约束/null 受纳/null 受罚/null 受罪/null 受聘/null 受聘于/null 受胎/null 受苦/null 受苦受难/null 受苦者/null 受著/null 受虐/null 受虐待/null 受虐狂/null 受血者/null 受让/null 受让人/null 受训/null 受访/null 受访者/null 受诅咒/null 受词/null 受试/null 受试者/null 受话器/null 受贿/null 受贿案/null 受贿罪/null 受贿者/null 受赏/null 受赠/null 受赠者/null 受辱/null 受过/null 受遗/null 受邀/null 受重视/null 受阻/null 受降/null 受降仪式/null 受限/null 受限制/null 受难/null 受难日/null 受难纪念/null 受难者/null 受雇/null 受雇用/null 受雇者/null 受霜害/null 受非难/null 受颁/null 受领/null 受领者/null 受骗/null 受骗上当/null 变丑/null 变为/null 变乱/null 变乾/null 变了/null 变了色/null 变产/null 变亮/null 变价/null 变优美/null 变位/null 变低/null 变体/null 变作/null 变修/null 变倍/null 变值/null 变做/null 变其/null 变冷/null 变出/null 变分/null 变分原理/null 变分学/null 变分法/null 变动/null 变化/null 变化万端/null 变化不测/null 变化多端/null 变化性/null 变化无常/null 变化无方/null 变化无穷/null 变化莫测/null 变卖/null 变卦/null 变危为安/null 变压/null 变压器/null 变厚/null 变去/null 变参/null 变古乱常/null 变名易姓/null 变味/null 变咸/null 变址/null 变址数/null 变坏/null 变坏事为好事/null 变声/null 变大/null 变天/null 变天帐/null 变奏/null 变奏曲/null 变好/null 变子/null 变容/null 变宽/null 变小/null 变少/null 变局/null 变工/null 变工队/null 变差/null 变干/null 变平/null 变幻/null 变幻不测/null 变幻无常/null 变幻莫测/null 变幻风云/null 变废为宝/null 变度/null 变异/null 变异型克雅氏症/null 变异性/null 变异株/null 变弄/null 变弱/null 变强/null 变形/null 变形虫/null 变形虫痢疾/null 变形金刚/null 变得/null 变得不同/null 变得复杂/null 变得微弱/null 变徵之声/null 变心/null 变态/null 变态反应/null 变态心理学/null 变态性/null 变性/null 变性酒精/null 变感器/null 变慢/null 变戏法/null 变成/null 变把戏/null 变换/null 变换器/null 变换式/null 变换群/null 变换设备/null 变故/null 变故易常/null 变数/null 变文/null 变新/null 变旧/null 变易/null 变星/null 变暖/null 变暗/null 变更/null 变更部署/null 变本/null 变本加厉/null 变来/null 变来变去/null 变松/null 变样/null 变样儿/null 变格/null 变法/null 变法儿/null 变活/null 变流器/null 变浅/null 变浓/null 变淡/null 变深/null 变清/null 变温/null 变温动物/null 变温层/null 变湿/null 变灰/null 变热/null 变焦/null 变焦距/null 变焦距镜头/null 变焦镜头/null 变狭/null 变现/null 变甜/null 变生肘腋/null 变电/null 变电所/null 变电站/null 变瘦/null 变白/null 变直/null 变相/null 变相剥削/null 变相涨价/null 变瞎/null 变短/null 变矮/null 变硬/null 变硬了/null 变种/null 变空/null 变窄/null 变粗/null 变紧/null 变红/null 变细/null 变美/null 变老/null 变者/null 变脆/null 变脏/null 变脸/null 变色/null 变色易容/null 变色蜥/null 变色镜/null 变色龙/null 变节/null 变节者/null 变苦/null 变蓝/null 变薄/null 变蛋/null 变被动为主动/null 变装皇后/null 变说/null 变调/null 变质/null 变质作用/null 变质岩/null 变起萧墙/null 变身/null 变软/null 变轻/null 变迁/null 变迁兴衰/null 变迹埋名/null 变通/null 变速/null 变速传动/null 变速器/null 变速杆/null 变速箱/null 变速运动/null 变造/null 变造币/null 变酸/null 变量/null 变长/null 变阻/null 变阻器/null 变革/null 变革时代/null 变音/null 变频/null 变频管/null 变颜色/null 变风改俗/null 变风易俗/null 变黄/null 变黑/null 叙事/null 叙事曲/null 叙事诗/null 叙利亚/null 叙利亚人/null 叙利亚文/null 叙别/null 叙功/null 叙功行赏/null 叙及/null 叙唱/null 叙情/null 叙拉古/null 叙文/null 叙旧/null 叙明/null 叙永/null 叙法/null 叙用/null 叙者/null 叙言/null 叙说/null 叙谈/null 叙述/null 叙述性/null 叙述文/null 叙述法/null 叙述者/null 叛乱/null 叛乱罪/null 叛乱者/null 叛党/null 叛党者/null 叛军/null 叛匪/null 叛卖/null 叛变/null 叛变的省份/null 叛国/null 叛国罪/null 叛将/null 叛徒/null 叛意/null 叛教/null 叛教者/null 叛民/null 叛离/null 叛者/null 叛贼/null 叛逃/null 叛逆/null 叛逆罪/null 叛逆者/null 叠加/null 叠印/null 叠句/null 叠合/null 叠好/null 叠字/null 叠层/null 叠层岩/null 叠层石/null 叠嶂/null 叠平/null 叠床架屋/null 叠式/null 叠彩/null 叠彩区/null 叠接/null 叠盖/null 叠矩重规/null 叠纸/null 叠罗汉/null 叠词/null 叠起/null 叠韵/null 口不二价/null 口不应心/null 口中/null 口中蚤虱/null 口中雌黄/null 口交/null 口令/null 口传/null 口似悬河/null 口供/null 口供人/null 口侧/null 口信/null 口儿/null 口内/null 口出/null 口出狂言/null 口北/null 口口/null 口口声声/null 口口相传/null 口号/null 口吃/null 口吃人/null 口吃者/null 口吐毒焰/null 口吐珠玑/null 口含天宪/null 口吸盘/null 口吻/null 口吻生花/null 口味/null 口哨/null 口哨儿/null 口器/null 口型/null 口壁/null 口外/null 口头/null 口头上/null 口头文学/null 口头禅/null 口头语/null 口如悬河/null 口子/null 口实/null 口密腹剑/null 口射/null 口小/null 口尚乳臭/null 口岸/null 口干/null 口干舌燥/null 口弦/null 口形/null 口彩/null 口径/null 口德/null 口快/null 口快心直/null 口惠/null 口惠而实不至/null 口感/null 口才/null 口技/null 口技表演者/null 口拙/null 口授/null 口无择言/null 口无遮拦/null 口是心非/null 口服/null 口服心服/null 口服液/null 口术/null 口条/null 口气/null 口水/null 口水仗/null 口沉/null 口沫/null 口沸目赤/null 口活/null 口涎/null 口淫/null 口渴/null 口湖/null 口湖乡/null 口炎/null 口燥唇干/null 口状/null 口琴/null 口疮/null 口白/null 口盖/null 口碑/null 口碑流传/null 口碑载道/null 口碱/null 口福/null 口称/null 口算/null 口簧/null 口簧琴/null 口粮/null 口紧/null 口红/null 口络/null 口罩/null 口耳之学/null 口腔/null 口腔炎/null 口腕/null 口腹/null 口腹之欲/null 口腹蜜剑/null 口臭/null 口舌/null 口若/null 口若悬河/null 口蘑/null 口蜜腹剑/null 口血未干/null 口袋/null 口袋妖怪/null 口角/null 口角战/null 口角春风/null 口角炎/null 口诀/null 口译/null 口译员/null 口试/null 口诛/null 口诛笔伐/null 口语/null 口语字词识别/null 口语沟通/null 口说无凭/null 口诵心惟/null 口谈/null 口蹄疫/null 口轻/null 口述/null 口述者/null 口部/null 口重/null 口锋/null 口音/null 口风/null 口香片/null 口香糖/null 口马/null 口鼻/null 口鼻部/null 口齿/null 口齿不清/null 口齿伶俐/null 口齿清楚/null 口齿生香/null 古丈/null 古为今用/null 古义/null 古书/null 古事/null 古井无波/null 古交/null 古人/null 古人类/null 古今/null 古今中外/null 古今图书集成/null 古今字/null 古今小说/null 古今有之/null 古代/null 古代史/null 古代船/null 古代辩证法/null 古体/null 古体诗/null 古兰经/null 古典/null 古典主义/null 古典之作/null 古典乐/null 古典作品/null 古典政治经济学/null 古典文学/null 古典派/null 古典语言/null 古典音乐/null 古冶/null 古冶区/null 古刹/null 古北口/null 古北界/null 古印/null 古史/null 古吉拉特/null 古吉拉特邦/null 古名/null 古国/null 古地磁/null 古坑/null 古坑乡/null 古城/null 古城区/null 古城堡/null 古堡/null 古塔/null 古塔区/null 古墓/null 古墓丽影/null 古墓葬/null 古墓葬群/null 古奥/null 古妆/null 古字/null 古宅/null 古尔班通古特沙漠/null 古尔邦节/null 古已有之/null 古巴人/null 古巴共产党/null 古巴比伦/null 古币/null 古希腊/null 古希腊语/null 古建/null 古式/null 古往今来/null 古怪/null 古怪人/null 古惑仔/null 古战场/null 古拉格/null 古拙/null 古文/null 古文书/null 古文体/null 古文化/null 古文字/null 古文字学/null 古文明/null 古文观止/null 古文运动/null 古斯塔夫・多雷/null 古斯塔夫・施特雷泽曼/null 古新世/null 古新统/null 古方/null 古旧/null 古早/null 古时/null 古时人/null 古时候/null 古昔/null 古晋/null 古曲/null 古朴/null 古来/null 古来有之/null 古杰拉尔/null 古杰拉特邦/null 古板/null 古柯/null 古柯树/null 古柯碱/null 古树名木/null 古根海姆/null 古根罕/null 古根罕喷气推进研究中心/null 古气候学/null 古汉语/null 古波/null 古浪/null 古灵精怪/null 古烽燧/null 古版书/null 古物/null 古猿/null 古玩/null 古玩店/null 古琴/null 古生代/null 古生物/null 古生物学/null 古生物学家/null 古生界/null 古用法/null 古田/null 古田会议/null 古登堡/null 古盗鸟/null 古砚/null 古神/null 古稀/null 古稀之年/null 古筝/null 古籍/null 古纪/null 古经/null 古罗马/null 古老/null 古脊椎动物学/null 古脑/null 古腾堡计划/null 古色/null 古色古香/null 古董/null 古董滩/null 古蔺/null 古装/null 古装剧/null 古观/null 古训/null 古论/null 古词/null 古诗/null 古话/null 古语/null 古诺/null 古调不弹/null 古调独弹/null 古谚/null 古谱/null 古貌古心/null 古迹/null 古道/null 古道热肠/null 古都/null 古里古怪/null 古钱/null 古铜/null 古铜色/null 古雅/null 古雅典/null 古音/null 古风/null 古龙/null 句句实话/null 句号/null 句型/null 句子/null 句子成分/null 句字/null 句容/null 句式/null 句数/null 句柄/null 句段/null 句法/null 句法分析/null 句法意识/null 句点/null 句群/null 句话/null 句读/null 句逗/null 句首/null 句骊河/null 另一/null 另一个/null 另一半/null 另一方/null 另一方面/null 另一番/null 另一种/null 另一面/null 另事/null 另付/null 另件/null 另作/null 另册/null 另加/null 另告/null 另外/null 另娶/null 另存/null 另存为/null 另定/null 另寄/null 另将/null 另屈/null 另建/null 另开/null 另开生面/null 另当/null 另征/null 另报/null 另按/null 另换/null 另据/null 另据报道/null 另收/null 另日/null 另有/null 另有企图/null 另案/null 另版/null 另用/null 另眼/null 另眼相待/null 另眼相看/null 另眼看待/null 另立/null 另签/null 另类/null 另类医疗/null 另纳/null 另给/null 另缴/null 另置/null 另行/null 另行安排/null 另行规定/null 另行通知/null 另见/null 另觅新欢/null 另议/null 另设/null 另请/null 另请高明/null 另谋/null 另谋高就/null 另起/null 另起炉灶/null 另辟蹊径/null 另选/null 另配/null 另附/null 叨光/null 叨叨/null 叨咕/null 叨唠/null 叨念/null 叨扰/null 叨教/null 叨登/null 叩关/null 叩出/null 叩击者/null 叩头/null 叩头虫/null 叩应/null 叩打/null 叩拜/null 叩球/null 叩见/null 叩诊/null 叩谒/null 叩谢/null 叩门/null 叩问/null 叩阍/null 叩首/null 只一次/null 只不过/null 只不过是/null 只为/null 只争/null 只争旦夕/null 只争朝夕/null 只于/null 只产/null 只从/null 只会/null 只作/null 只做/null 只准/null 只凭/null 只剩/null 只占/null 只只/null 只可/null 只可意会/null 只可意会不可言传/null 只因/null 只在/null 只好/null 只字/null 只字不提/null 只字片言/null 只对/null 只差/null 只当/null 只影单形/null 只影孤形/null 只征/null 只得/null 只怕/null 只怕有心人/null 只想/null 只手/null 只手单拳/null 只手擎天/null 只手空拳/null 只把/null 只投/null 只按/null 只是/null 只有/null 只欠东风/null 只此/null 只此一家别无分店/null 只求/null 只消/null 只热/null 只玩/null 只用/null 只用于/null 只留/null 只看/null 只知其一/null 只知其一不知其二/null 只知其一未知其二/null 只管/null 只缺/null 只羊/null 只能/null 只要/null 只要功夫深/null 只见/null 只见树木不见森林/null 只言/null 只言片语/null 只许/null 只许州官放火/null 只说/null 只读/null 只身/null 只身孤影/null 只轮不返/null 只重衣衫不重人/null 只限/null 只限于/null 只需/null 只须/null 只顾/null 只鸡斗酒/null 只鸡絮酒/null 叫个/null 叫人/null 叫价/null 叫住/null 叫作/null 叫做/null 叫出/null 叫到/null 叫化/null 叫化子/null 叫卖/null 叫卖声/null 叫卖贩/null 叫号/null 叫吃/null 叫名/null 叫响/null 叫哥哥/null 叫唤/null 叫啥/null 叫喊/null 叫喊声/null 叫喊者/null 叫嚣/null 叫嚷/null 叫声/null 叫头/null 叫好/null 叫子/null 叫客/null 叫屈/null 叫床/null 叫床声/null 叫座/null 叫开/null 叫得/null 叫我/null 叫春/null 叫来/null 叫板/null 叫牌/null 叫着/null 叫绝/null 叫花/null 叫花子/null 叫苦/null 叫苦不迭/null 叫苦连天/null 叫走/null 叫起/null 叫过/null 叫道/null 叫醒/null 叫醒服务/null 叫错/null 叫门/null 叫阵/null 叫驴/null 叫骂/null 叫鸡/null 召之即来/null 召募/null 召唤/null 召唤者/null 召回/null 召回率/null 召开/null 召开会议/null 召来/null 召父杜母/null 召祸/null 召者/null 召见/null 召请/null 召陵/null 召陵区/null 召集/null 召集人/null 召集者/null 叭叭/null 叭啦狗/null 叭嗒/null 叭声/null 叭达/null 叮伤/null 叮叮/null 叮叮当当/null 叮叮猫/null 叮呤/null 叮咚/null 叮咛/null 叮咬/null 叮响/null 叮嘱/null 叮噹声/null 叮当/null 叮当响/null 叮当声/null 叮玲/null 叮玲响/null 叮铃/null 叮问/null 可上演/null 可不/null 可不可以/null 可不可能/null 可不是/null 可与/null 可专用/null 可为/null 可主张/null 可乐/null 可乘/null 可乘之机/null 可乘之隙/null 可买/null 可买卖/null 可了解/null 可予/null 可争/null 可争议/null 可争论/null 可争辩/null 可于/null 可互换/null 可交换/null 可交谈/null 可享/null 可享乐/null 可亲/null 可亲可敬/null 可人/null 可从/null 可付/null 可付还/null 可代替/null 可以/null 可以买/null 可以休矣/null 可以分/null 可以吃/null 可以向/null 可以喝/null 可以忽视/null 可以意会/null 可以燎原/null 可以解/null 可以说/null 可以请/null 可以选/null 可以避免/null 可以骑/null 可会见/null 可传导/null 可传性/null 可传播/null 可传染/null 可传达/null 可传递/null 可估价/null 可估计/null 可伸出/null 可伸缩/null 可伸长/null 可住/null 可体/null 可作/null 可佩/null 可使/null 可使用/null 可供/null 可供军用/null 可依/null 可保存/null 可保证/null 可保释/null 可保险/null 可信/null 可信任/null 可信度/null 可信性/null 可信用/null 可信赖/null 可修复/null 可修好/null 可修正/null 可修理/null 可修缮/null 可修订/null 可倒/null 可借/null 可假定/null 可做/null 可偿/null 可偿还/null 可储存/null 可兑换/null 可兰经/null 可共存/null 可共患难/null 可兼容/null 可再/null 可再制/null 可再生/null 可再生原/null 可决/null 可决定/null 可决率/null 可决票/null 可凌驾/null 可减去/null 可减少/null 可减轻/null 可凭/null 可出租/null 可击/null 可分/null 可分别/null 可分割/null 可分子/null 可分开/null 可分析/null 可分离/null 可分类/null 可分解/null 可分配/null 可切除/null 可列举/null 可利用/null 可别/null 可到/null 可到达/null 可剥夺/null 可劝/null 可劝告/null 可加/null 可加工/null 可动/null 可动性/null 可动摇/null 可区分/null 可医/null 可医好/null 可医治/null 可升级/null 可卑/null 可卖/null 可占/null 可卡因/null 可印刷/null 可压/null 可压榨/null 可压缩/null 可原谅/null 可及/null 可反对/null 可反转/null 可发/null 可发明/null 可发行/null 可发表/null 可发觉/null 可发音/null 可取/null 可取代/null 可取回/null 可取得/null 可取性/null 可取消/null 可受/null 可变/null 可变化/null 可变化合价/null 可变形/null 可变性/null 可变渗透性模型/null 可变电容器/null 可变硬/null 可变资本/null 可口/null 可口可乐公司/null 可召唤/null 可召集/null 可可/null 可可儿的/null 可可托海/null 可可托海镇/null 可可米/null 可可西里/null 可可豆/null 可叹/null 可吃/null 可合并/null 可同/null 可同化/null 可向/null 可吟诵/null 可否/null 可否认/null 可听/null 可听度/null 可听见/null 可吸收/null 可和/null 可和解/null 可哀/null 可品尝/null 可善/null 可喜/null 可嘉/null 可回/null 可回复/null 可回忆/null 可回收/null 可围绕/null 可在/null 可塑/null 可塑性/null 可塑造/null 可塞/null 可增加/null 可处理/null 可复苏/null 可大/null 可好/null 可子/null 可存取/null 可完/null 可定义/null 可定名/null 可定址/null 可实施/null 可实现/null 可实行/null 可容/null 可容忍/null 可容纳/null 可容许/null 可宽恕/null 可察觉/null 可寻址/null 可导/null 可将/null 可尊敬/null 可尊重/null 可尝/null 可居/null 可居住/null 可展开/null 可展性/null 可展曲面/null 可崇敬/null 可巧/null 可带走/null 可应用/null 可废止/null 可废除/null 可延/null 可延期/null 可延续性/null 可延长/null 可开动/null 可引/null 可引出/null 可引导/null 可引渡/null 可引用/null 可强迫/null 可归/null 可归于/null 可归因/null 可归属/null 可归罪/null 可归还/null 可当/null 可录音/null 可征收/null 可征服/null 可征税/null 可待/null 可待因/null 可得/null 可得到/null 可微/null 可心/null 可心如意/null 可忍受/null 可忍耐/null 可忽略/null 可怕/null 可怖/null 可怜/null 可怜人/null 可怜兮兮/null 可怜虫/null 可怜见/null 可怪/null 可恃/null 可恕/null 可恢复/null 可恨/null 可恶/null 可恼/null 可悬吊/null 可悬挂/null 可悲/null 可惊/null 可惊异/null 可惜/null 可想/null 可想像/null 可想到/null 可想而知/null 可意/null 可感知/null 可感觉/null 可憎/null 可懂度/null 可成形/null 可战胜/null 可执行/null 可扩展/null 可扩展标记语言/null 可扩张/null 可承认/null 可把/null 可抑制/null 可抑压/null 可折叠/null 可折式衣架/null 可抚慰/null 可抢救/null 可护/null 可报导/null 可抵抗/null 可抹掉/null 可抽出/null 可抽吸/null 可抽税/null 可拆卸/null 可拉长/null 可拒绝/null 可持续/null 可持续发展/null 可指/null 可指明/null 可按/null 可挖苦/null 可挥发/null 可振动/null 可挽回/null 可捉捕/null 可排/null 可排除/null 可接/null 可接受/null 可接受性/null 可接近/null 可控/null 可控告/null 可控硅/null 可推广/null 可推断/null 可推测/null 可推知/null 可推荐/null 可推论/null 可掬/null 可提议/null 可援用/null 可搬运/null 可携/null 可携带/null 可撤回/null 可撤销/null 可操作/null 可操作性/null 可操作的艺术/null 可操左券/null 可操纵/null 可擦写/null 可擦写可编程只读存储器/null 可擦掉/null 可攀登/null 可支付性/null 可支持/null 可支配/null 可收/null 可收买/null 可收到/null 可收回/null 可收集/null 可改/null 可改变/null 可改善/null 可改正/null 可改编/null 可改良/null 可改革/null 可攻克/null 可放/null 可救/null 可救出/null 可救助/null 可教/null 可教化/null 可教性/null 可教育/null 可敬/null 可敬畏/null 可数/null 可数名词/null 可数集/null 可断/null 可断定/null 可断言/null 可无/null 可是/null 可视化/null 可更改/null 可更新/null 可替换/null 可有可无/null 可望/null 可望取胜者/null 可望有成/null 可望而不可即/null 可望而不可及/null 可查/null 可树/null 可核准/null 可根除/null 可模仿/null 可欺/null 可歌可泣/null 可比/null 可比价格/null 可比较/null 可气/null 可气化/null 可氧化/null 可汀/null 可求/null 可汗/null 可汽化/null 可沐浴/null 可没/null 可没收/null 可治/null 可治愈/null 可治疗/null 可洗/null 可洗涤/null 可洞察/null 可流通/null 可测/null 可测性/null 可测量/null 可浸透/null 可消化/null 可消耗/null 可消费/null 可消除/null 可液化/null 可混/null 可渗入/null 可渗透/null 可湿性/null 可溶/null 可溶性/null 可溶解/null 可满/null 可满足/null 可滤/null 可漂浮/null 可灌溉/null 可熄灭/null 可熔/null 可燃/null 可燃冰/null 可燃性/null 可爱/null 可牺牲/null 可犯/null 可理解/null 可生/null 可生产/null 可用/null 可由/null 可畏/null 可畏惧/null 可疑/null 可疑分子/null 可疑性/null 可登记/null 可直接/null 可省略/null 可看/null 可看破/null 可着/null 可知/null 可知性/null 可知觉/null 可知论/null 可研/null 可破坏/null 可确定/null 可磁化体/null 可磋商/null 可种植/null 可秤/null 可称/null 可移/null 可移动/null 可移植/null 可移植性/null 可移转/null 可穿/null 可穿著/null 可穿透/null 可笑/null 可答复/null 可答辩/null 可简化/null 可算/null 可类比/null 可纠正/null 可组合/null 可组织/null 可结合性/null 可统一/null 可统治/null 可继承/null 可维护性/null 可维持/null 可缓和/null 可编/null 可编程/null 可缩/null 可羡慕/null 可翻译/null 可者/null 可耕/null 可耕地/null 可耻/null 可耻下场/null 可联/null 可联想/null 可能/null 可能发生/null 可能性/null 可能有/null 可能派/null 可膨胀/null 可自/null 可自乘/null 可航行/null 可苏醒/null 可获/null 可获利/null 可获得/null 可行/null 可行性/null 可行性研究/null 可补救/null 可表明/null 可表现/null 可表示/null 可被/null 可裁决/null 可裂变/null 可裂变材料/null 可要/null 可要求/null 可见/null 可见一斑/null 可见光/null 可见度/null 可观/null 可视性/null 可视电话/null 可觉察/null 可解/null 可解决/null 可解说/null 可解读/null 可解释/null 可解雇/null 可触/null 可触知/null 可言/null 可计数/null 可计算/null 可认识/null 可让/null 可让与/null 可议论/null 可记得/null 可记述/null 可讲/null 可论证/null 可设/null 可证/null 可证实/null 可证明/null 可评价/null 可诉讼/null 可试验/null 可诱惑/null 可说/null 可说明/null 可说服/null 可读/null 可读性/null 可读音性/null 可课税/null 可调/null 可调停/null 可调和/null 可调整/null 可谓/null 可象/null 可责/null 可责备/null 可责难/null 可贴现/null 可贵/null 可贺/null 可资/null 可赎/null 可赎回/null 可赞叹/null 可赞赏/null 可走/null 可走动/null 可起诉/null 可超越/null 可身/null 可转/null 可转换同位素/null 可转移/null 可转让/null 可转让证券/null 可轻视/null 可输入/null 可输出/null 可辨别/null 可辨认/null 可辩/null 可辩别/null 可辩护/null 可辩解/null 可辩论/null 可达/null 可达到/null 可过/null 可这/null 可进入/null 可进口/null 可连接/null 可述说/null 可追求/null 可追踪/null 可退回/null 可适用/null 可逆/null 可逆反应/null 可逆性/null 可选/null 可选择/null 可选择丢弃/null 可选项/null 可透入/null 可透性/null 可通/null 可通约/null 可通航/null 可通融/null 可通行/null 可通过/null 可遗传/null 可遵守/null 可避免/null 可邮寄/null 可鄙/null 可采/null 可采用/null 可采纳/null 可重写/null 可重获/null 可量/null 可钦佩/null 可销/null 可销售/null 可锻铸铁/null 可闻/null 可防/null 可防卫/null 可防守/null 可防御/null 可防止/null 可降/null 可降低/null 可限制/null 可除尽/null 可雇用/null 可非难/null 可靠/null 可靠人士/null 可靠保证/null 可靠性/null 可靠性理论/null 可靠消息/null 可预付/null 可预期/null 可预知/null 可预言/null 可食/null 可食用/null 可饮用/null 可饱和/null 可驯养/null 可驯服/null 可驳倒/null 可驳斥/null 可驾驶/null 可验/null 可验证/null 可骗/null 台上/null 台上一分钟/null 台上台下/null 台下/null 台下十年功/null 台东/null 台中/null 台伯河/null 台位/null 台儿庄/null 台儿庄区/null 台前/null 台北反美事件/null 台北捷运/null 台南/null 台南府/null 台南府市/null 台历/null 台启/null 台员/null 台商/null 台地/null 台基/null 台大/null 台妹/null 台媒/null 台子/null 台安/null 台客/null 台属/null 台山/null 台州/null 台州地区/null 台巴子/null 台币/null 台布/null 台帐/null 台度/null 台座/null 台式/null 台式电脑/null 台数/null 台本/null 台板/null 台架/null 台柱/null 台柱子/null 台步/null 台江/null 台江区/null 台海/null 台港/null 台港澳/null 台湾关系法/null 台湾叶鼻蝠/null 台湾同胞/null 台湾土狗/null 台湾大学/null 台湾山脉/null 台湾岛/null 台湾当局/null 台湾民主自治同盟/null 台湾海峡/null 台湾猴/null 台灯/null 台独/null 台球/null 台球场/null 台球桌/null 台甫/null 台盆/null 台盟/null 台磅/null 台秤/null 台称/null 台端/null 台联/null 台股/null 台胞/null 台西/null 台西乡/null 台视/null 台词/null 台谍/null 台资/null 台车/null 台鉴/null 台钟/null 台钳/null 台钻/null 台镜/null 台阁生风/null 台阶/null 台面/null 台面呢/null 台风/null 台风儿/null 叱吒/null 叱吒风云/null 叱呵/null 叱咄/null 叱咤/null 叱咤风云/null 叱喝/null 叱嗟风云/null 叱责/null 叱问/null 叱骂/null 史上/null 史不绝书/null 史丹佛/null 史丹福大学/null 史丹顿岛/null 史乘/null 史书/null 史传/null 史传小说/null 史册/null 史前/null 史前人/null 史前古器物/null 史前史/null 史前石桌/null 史剧/null 史卓/null 史威士/null 史学/null 史学家/null 史学方法/null 史官/null 史实/null 史实性/null 史家/null 史密斯/null 史密特/null 史志/null 史思明/null 史抄/null 史提夫・贾伯斯/null 史料/null 史料选编/null 史无前例/null 史景迁/null 史沫特莱/null 史瓦济兰/null 史瓦辛格/null 史略/null 史称/null 史稿/null 史籀篇/null 史籍/null 史纲/null 史臣/null 史蒂夫/null 史蒂夫・乔布斯/null 史蒂文/null 史蒂文斯/null 史蒂芬・哈珀/null 史观/null 史记/null 史论/null 史评/null 史诗/null 史诗性/null 史诗般/null 史话/null 史语/null 史载/null 史迪威/null 史迹/null 史部/null 史馆/null 史黛西/null 右上/null 右上方/null 右下/null 右下方/null 右侧/null 右倾/null 右倾机会主义/null 右分枝关系从句/null 右列/null 右前卫/null 右弯/null 右房/null 右手/null 右手定则/null 右抱/null 右方/null 右旋/null 右旋性/null 右江/null 右江区/null 右派/null 右派分子/null 右玉/null 右眼/null 右移/null 右端/null 右箭头/null 右箭头键/null 右翼/null 右耳/null 右脚/null 右腿/null 右臂/null 右舵/null 右舷/null 右行/null 右袒/null 右角/null 右转/null 右边/null 右边儿/null 右键/null 右面/null 右页/null 右顾/null 右首/null 叵测/null 叵耐/null 叶丛/null 叶伟文/null 叶伟民/null 叶儿/null 叶公/null 叶公好龙/null 叶兰/null 叶利钦/null 叶卡捷琳堡/null 叶卡捷琳娜/null 叶卡特琳娜堡/null 叶口蝠科/null 叶圣陶/null 叶块繁殖/null 叶城/null 叶子/null 叶子列/null 叶子板/null 叶子烟/null 叶尔羌河/null 叶序/null 叶形/null 叶挺/null 叶斑病/null 叶枕/null 叶枝/null 叶柄/null 叶永烈/null 叶江川/null 叶片/null 叶片状/null 叶状/null 叶状体/null 叶猴/null 叶瑟/null 叶甜菜/null 叶礼庭/null 叶窗/null 叶红素/null 叶绿/null 叶绿体/null 叶绿粒/null 叶绿素/null 叶肉/null 叶脉/null 叶脉序/null 叶腑/null 叶芽/null 叶苔/null 叶茂/null 叶茂盛/null 叶茎/null 叶草/null 叶菊/null 叶落归根/null 叶落归秋/null 叶落知秋/null 叶虫/null 叶蜂/null 叶蝉/null 叶轮/null 叶轮机械/null 叶选平/null 叶酸/null 叶锈病/null 叶门/null 叶问/null 叶面/null 叶面施肥/null 叶鞘/null 叶韵/null 叶鼻蝠/null 号丧/null 号为/null 号令/null 号令如山/null 号儿/null 号兵/null 号叫/null 号召/null 号召力/null 号哭/null 号啕/null 号坎儿/null 号声/null 号外/null 号天叩地/null 号头/null 号子/null 号寒啼饥/null 号志灯/null 号房/null 号手/null 号数/null 号旗/null 号曰/null 号楼/null 号炮/null 号牌/null 号码/null 号码机/null 号码牌/null 号码盘/null 号礮/null 号称/null 号筒/null 号脉/null 号衣/null 号角/null 号音/null 司书/null 司事/null 司令/null 司令员/null 司令官/null 司令杖/null 司令部/null 司仪/null 司务/null 司务长/null 司南/null 司厨/null 司号员/null 司各特/null 司售/null 司售人员/null 司天台/null 司寇/null 司局/null 司局级/null 司库/null 司徒/null 司晨/null 司机/null 司汤达/null 司法/null 司法上/null 司法人员/null 司法制度/null 司法官/null 司法机关/null 司法权/null 司法独立/null 司法部/null 司法部门/null 司法院/null 司炉/null 司祭/null 司空/null 司空眼惯/null 司空见惯/null 司线员/null 司职/null 司铎/null 司长/null 司马/null 司马光/null 司马懿/null 司马承帧/null 司马昭之心/null 司马昭之心路人所知/null 司马法/null 司马炎/null 司马穰苴/null 司马谈/null 司马辽太郎/null 司马迁/null 司马青衫/null 叹为/null 叹为观止/null 叹了一口气/null 叹号/null 叹喟/null 叹声/null 叹息/null 叹惋/null 叹惋观止/null 叹惜/null 叹服/null 叹气/null 叹羡/null 叹老嗟卑/null 叹者/null 叹词/null 叹语/null 叹赏/null 叼了/null 叽叽/null 叽叽喳喳/null 叽叽嘎嘎/null 叽咕/null 叽哩咕噜/null 叽喳/null 叽嘎声/null 叽里呱啦/null 叽里咕噜/null 叽里旮旯儿/null 吁吁/null 吁请/null 吃一堑/null 吃一堑长一智/null 吃一惊/null 吃上/null 吃下/null 吃不上/null 吃不下/null 吃不了兜着走/null 吃不住/null 吃不到葡萄说葡萄酸/null 吃不开/null 吃不服/null 吃不来/null 吃不消/null 吃东西/null 吃了一惊/null 吃了定心丸/null 吃亏/null 吃亏上当/null 吃人/null 吃人不吐骨头/null 吃光/null 吃入/null 吃刀/null 吃到/null 吃力/null 吃力不讨好/null 吃劲/null 吃午饭/null 吃去/null 吃口/null 吃吃/null 吃吃喝喝/null 吃吃地笑/null 吃吧/null 吃喝/null 吃喝儿/null 吃喝嫖赌/null 吃喝玩乐/null 吃喝风/null 吃嘴/null 吃坏/null 吃大亏/null 吃大户/null 吃大锅饭/null 吃奶/null 吃奶之力/null 吃奶的力气/null 吃奶的气力/null 吃完/null 吃官司/null 吃客/null 吃尽苦头/null 吃布/null 吃得/null 吃得住/null 吃得开/null 吃得来/null 吃得消/null 吃得苦中苦/null 吃得过多/null 吃心/null 吃快餐/null 吃惊/null 吃掉/null 吃教/null 吃斋/null 吃早餐/null 吃早饭/null 吃水/null 吃法/null 吃点/null 吃熊心豹子胆/null 吃牢饭/null 吃独食/null 吃现成饭/null 吃瓦片儿/null 吃白食/null 吃皇粮/null 吃着碗里/null 吃穷/null 吃空额/null 吃空饷/null 吃穿/null 吃笑/null 吃粮/null 吃粮不管事/null 吃素/null 吃紧/null 吃羹/null 吃老本/null 吃者/null 吃肉/null 吃腻/null 吃苦/null 吃苦头/null 吃苦耐劳/null 吃茶/null 吃草/null 吃荤/null 吃药/null 吃药人/null 吃著不尽/null 吃角子老虎/null 吃请/null 吃请风/null 吃豆人/null 吃豆腐/null 吃豆豆/null 吃败仗/null 吃起来/null 吃软不吃硬/null 吃软饭/null 吃过/null 吃过量/null 吃进/null 吃透/null 吃通/null 吃醋/null 吃醋争风/null 吃醋拈酸/null 吃里爬外/null 吃重/null 吃错药/null 吃闲饭/null 吃零嘴/null 吃霸王餐/null 吃食/null 吃饭/null 吃饱/null 吃饱了饭撑的/null 吃饱喝足/null 吃饱撑着/null 吃饱穿暖/null 吃香/null 吃鱼/null 各不相同/null 各不相让/null 各不相谋/null 各业/null 各个/null 各个击破/null 各人/null 各人民团体/null 各人自扫门前雪/null 各付/null 各代/null 各企业/null 各位/null 各位听众/null 各位观众/null 各具/null 各具特色/null 各军兵种/null 各军区/null 各别/null 各区/null 各半/null 各单位/null 各占/null 各厂/null 各厂矿/null 各县/null 各取所需/null 各口/null 各司其职/null 各向/null 各向同性/null 各向异性/null 各国/null 各国人民/null 各国共产党和工人党会议/null 各地/null 各地区/null 各地方/null 各处/null 各大军区/null 各奔东西/null 各奔前程/null 各好/null 各季/null 各家/null 各家各户/null 各就/null 各尽其能/null 各尽所能/null 按劳分配/null 按需分配/null 各局/null 各层/null 各岛/null 各州/null 各市/null 各年/null 各异/null 各式/null 各式各样/null 各形/null 各得其宜/null 各得其所/null 各怀/null 各户/null 各所/null 各打/null 各执一词/null 各执己见/null 各执所见/null 各批/null 各抒己见/null 各拉丹冬山/null 各拉丹冬峰/null 各持己见/null 各摊/null 各方/null 各方面/null 各族/null 各族人民/null 各族群众/null 各显所长/null 各显神通/null 各月/null 各有/null 各有不同/null 各有千秋/null 各有所好/null 各有所得/null 各有所长/null 各期/null 各村/null 各条/null 各条战线/null 各栏/null 各校/null 各样/null 各次/null 各款/null 各款产品/null 各民主党派/null 各民族/null 各派/null 各点/null 各界/null 各界人士/null 各省/null 各省市/null 各省市自治区/null 各种/null 各种各样/null 各种颜色/null 各答/null 各类/null 各级/null 各级党委/null 各级领导/null 各组/null 各联/null 各自/null 各自为战/null 各自为政/null 各般/null 各色/null 各色各样/null 各行/null 各行业/null 各行其事/null 各行其志/null 各行其是/null 各行各业/null 各表/null 各说/null 各路/null 各达/null 各部/null 各部委/null 各部门/null 各长/null 各门/null 各队/null 各院校/null 各页/null 各项/null 各顾各/null 吆五喝六/null 吆呼/null 吆喊/null 吆喝/null 合一/null 合上/null 合不拢嘴/null 合不来/null 合不着/null 合为/null 合乎/null 合乎逻辑/null 合二为一/null 合于/null 合于时宜/null 合亟/null 合众/null 合众为一/null 合众国/null 合众国际社/null 合众社/null 合众银行/null 合伙/null 合伙人/null 合伙企业/null 合会/null 合住/null 合体字/null 合作/null 合作主义/null 合作伙伴/null 合作关系/null 合作农场/null 合作制/null 合作化/null 合作医疗/null 合作商店/null 合作社/null 合作社经济/null 合作经济/null 合作者/null 合作运动/null 合作项目/null 合共/null 合击/null 合刊/null 合则两利/null 合剂/null 合力/null 合办/null 合化/null 合十/null 合卺/null 合取/null 合口/null 合口呼/null 合叶/null 合吃族/null 合同/null 合同书/null 合同作战/null 合同制/null 合同各方/null 合同工/null 合同异/null 合同法/null 合同货币/null 合唱/null 合唱会/null 合唱团/null 合唱曲/null 合四乙尺工/null 合围/null 合在/null 合块/null 合声/null 合处/null 合夥/null 合夥人/null 合奏/null 合婚/null 合子/null 合宜/null 合宪性/null 合家/null 合家欢/null 合属/null 合山/null 合川/null 合川区/null 合干者/null 合并/null 合并症/null 合并者/null 合度/null 合建/null 合式/null 合影/null 合影留念/null 合得来/null 合得着/null 合心/null 合情/null 合情合理/null 合意/null 合成/null 合成一个诸葛亮/null 合成代谢/null 合成器/null 合成天然橡胶/null 合成数/null 合成机/null 合成染料/null 合成树脂/null 合成橡胶/null 合成氨/null 合成氨法/null 合成法/null 合成洗涤剂/null 合成物/null 合成石油/null 合成矿物/null 合成类固醇/null 合成纤维/null 合成者/null 合成药物/null 合成词/null 合成语境/null 合成语音/null 合成酶/null 合成革/null 合扇/null 合手/null 合护/null 合抱/null 合拍/null 合拢/null 合掌/null 合掌瓜/null 合教/null 合数/null 合时/null 合时宜/null 合格/null 合格品/null 合格率/null 合格者/null 合格证/null 合格证书/null 合欢/null 合气道/null 合水/null 合江/null 合法/null 合法利益/null 合法化/null 合法席位/null 合法性/null 合法收入/null 合法政府/null 合法斗争/null 合法权利/null 合法权益/null 合法马克思主义/null 合流/null 合浦珠还/null 合浦还珠/null 合演/null 合照/null 合片/null 合物/null 合理/null 合理化/null 合理化建议/null 合理性/null 合理流动/null 合理负担/null 合璧/null 合瓣花冠/null 合用/null 合眼/null 合眼摸象/null 合租/null 合称/null 合算/null 合约/null 合纵/null 合纵连横/null 合线/null 合组/null 合编/null 合缝/null 合缝处/null 合群/null 合而为一/null 合股/null 合股线/null 合肥工业大学/null 合脚/null 合花/null 合营/null 合营企业/null 合著/null 合著者/null 合葬/null 合规/null 合解/null 合计/null 合订/null 合订本/null 合议/null 合议制/null 合议庭/null 合论/null 合该/null 合谋/null 合谷穴/null 合资/null 合资企业/null 合资经营/null 合身/null 合辑/null 合辙/null 合辙儿/null 合进/null 合适/null 合金/null 合金钢/null 合闸/null 合阳/null 合集/null 合面/null 合音/null 合页/null 合骑/null 合龙/null 吉之岛/null 吉事果/null 吉亚卡摩/null 吉人/null 吉人天相/null 吉人自有天相/null 吉他/null 吉他手/null 吉他谱/null 吉伯特氏症候群/null 吉兆/null 吉光片羽/null 吉兰丹/null 吉兰丹州/null 吉兰丹河/null 吉凶/null 吉列/null 吉利/null 吉利区/null 吉剧/null 吉勒/null 吉卜力工作室/null 吉卜赛/null 吉卜赛人/null 吉合/null 吉士粉/null 吉大港/null 吉娃娃/null 吉字节/null 吉它/null 吉安/null 吉安乡/null 吉安地区/null 吉尔伯特/null 吉尔伯特群岛/null 吉尔吉斯/null 吉尔吉斯人/null 吉尔吉斯坦/null 吉尔吉斯斯坦/null 吉尔吉斯族/null 吉尔达/null 吉尼斯/null 吉尼系数/null 吉州/null 吉州区/null 吉州郡/null 吉布提/null 吉庆/null 吉强镇/null 吉恩/null 吉打/null 吉拉尼/null 吉拉德/null 吉文/null 吉日/null 吉日良辰/null 吉普/null 吉普塞人/null 吉普斯夸/null 吉普赛/null 吉普赛人/null 吉普车/null 吉期/null 吉木乃/null 吉木萨尔/null 吉本斯/null 吉林大学/null 吉水/null 吉电子伏/null 吉百利/null 吉祥/null 吉祥如意/null 吉祥止止/null 吉祥物/null 吉米/null 吉贝/null 吉达/null 吉迪恩/null 吉通/null 吉野/null 吉野家/null 吉金/null 吉隆/null 吉隆坡/null 吉隆波/null 吉首/null 吊丧/null 吊住/null 吊儿郎当/null 吊兰/null 吊具/null 吊刑/null 吊卷/null 吊古/null 吊古寻幽/null 吊台/null 吊味口/null 吊唁/null 吊嗓/null 吊嗓子/null 吊在/null 吊坠/null 吊塔/null 吊孝/null 吊审/null 吊客/null 吊带/null 吊带衫/null 吊床/null 吊引/null 吊慰/null 吊扇/null 吊打/null 吊扣/null 吊挂/null 吊文/null 吊斗/null 吊杆/null 吊杠/null 吊架/null 吊柜/null 吊档裤/null 吊桥/null 吊桶/null 吊梯/null 吊椅/null 吊楼/null 吊死/null 吊死问疾/null 吊死鬼/null 吊民伐罪/null 吊灯/null 吊环/null 吊球/null 吊瓶/null 吊瓶族/null 吊盘/null 吊着/null 吊祭/null 吊窗/null 吊篮/null 吊索/null 吊线/null 吊绳/null 吊胃口/null 吊膀/null 吊膀子/null 吊舱/null 吊艇/null 吊袜带/null 吊装/null 吊裤/null 吊裤带/null 吊誉沽名/null 吊诡/null 吊诡矜奇/null 吊起/null 吊车/null 吊运/null 吊针/null 吊钟/null 吊钟花/null 吊钩/null 吊铺/null 吊链/null 吊销/null 吊锚索/null 吊门/null 吊闸/null 吊顶/null 吊颈/null 吊鼻子/null 同一/null 同比/null 同一个/null 同一个世界/null 同一个梦想/null 同一律/null 同一性/null 同一时间/null 同上/null 同世/null 同业/null 同业公会/null 同业工会/null 同业拆借/null 同中心/null 同为/null 同义/null 同义反复/null 同义字/null 同义词/null 同义语/null 同乐/null 同乡/null 同乡亲故/null 同事/null 同于/null 同享/null 同人/null 同仁/null 同仁医院/null 同仁堂/null 同仇/null 同仇敌忾/null 同付/null 同代人/null 同价/null 同伙/null 同传耳麦/null 同伴/null 同位/null 同位格/null 同位素/null 同位素分离/null 同位角/null 同住/null 同住者/null 同体/null 同余/null 同余式/null 同余类/null 同作/null 同侪/null 同侪压力/null 同侪团体/null 同侪审查/null 同侪扶持/null 同侪检视/null 同侪谘商/null 同僚/null 同党/null 同减/null 同出一辙/null 同分异构/null 同分异构体/null 同前/null 同功一体/null 同化/null 同化作用/null 同化政策/null 同卵/null 同卵双胞胎/null 同原语/null 同去/null 同台/null 同吃/null 同名/null 同名同姓/null 同告/null 同命运/null 同唱/null 同喜/null 同回/null 同国人/null 同在/null 同地/null 同地方/null 同型/null 同型性/null 同型配子/null 同城/null 同堂/null 同增/null 同声/null 同声一哭/null 同声之应/null 同声传译/null 同声相应/null 同声翻译/null 同声附和/null 同处/null 同大/null 同好/null 同姓/null 同字框/null 同学/null 同学们/null 同安/null 同安区/null 同安县/null 同宗/null 同室/null 同室操戈/null 同室者/null 同宿/null 同宿舍/null 同居/null 同居人/null 同居者/null 同屋/null 同属/null 同岁/null 同工/null 同工不同酬/null 同工同酬/null 同工异曲/null 同席/null 同年/null 同年代/null 同年而语/null 同床/null 同床共枕/null 同床各梦/null 同床异梦/null 同庚/null 同座/null 同异/null 同归/null 同归于尽/null 同归殊涂/null 同归殊途/null 同形/null 同往/null 同往常一样/null 同德/null 同德同心/null 同心/null 同心协力/null 同心合力/null 同心同德/null 同心圆/null 同心并力/null 同心断金/null 同心鹿力/null 同志/null 同志们/null 同志合道/null 同态/null 同性/null 同性恋/null 同性恋恐惧症/null 同性恋爱/null 同性恋者/null 同性爱/null 同性相斥/null 同性质/null 同恶相助/null 同恶相救/null 同恶相求/null 同恶相济/null 同情/null 同情心/null 同情者/null 同意/null 同感/null 同房/null 同房间/null 同播/null 同收/null 同文馆/null 同於/null 同旁内角/null 同旁外角/null 同族/null 同族体/null 同日/null 同日而言/null 同日而语/null 同时/null 同时代/null 同时并举/null 同时性/null 同时期/null 同时间/null 同是/null 同月/null 同有/null 同期/null 同机/null 同村/null 同条/null 同条共贯/null 同构/null 同校/null 同样/null 同样地/null 同样是/null 同案/null 同案犯/null 同桌/null 同档/null 同次/null 同欢/null 同此/null 同步/null 同步加速器/null 同步化/null 同步卫星/null 同步发电机/null 同步增长/null 同步性/null 同步数位阶层/null 同步机/null 同步电动机/null 同母/null 同母异父/null 同气相求/null 同气连枝/null 同江/null 同治/null 同流合污/null 同济/null 同济医科大学/null 同济大学/null 同温层/null 同源/null 同源词/null 同点/null 同父/null 同父异母/null 同父母/null 同犯/null 同狱/null 同班/null 同班同学/null 同理/null 同理心/null 同甘共苦/null 同甘同苦/null 同甘苦/null 同生共死/null 同用/null 同病/null 同病相怜/null 同盟/null 同盟会/null 同盟军/null 同盟国/null 同盟罢工/null 同盟者/null 同着/null 同知/null 同砚/null 同种/null 同科/null 同窗/null 同符合契/null 同等/null 同等学力/null 同等学历/null 同等对待/null 同等条件/null 同等条件下/null 同类/null 同类产品/null 同类型/null 同类相吸/null 同类相求/null 同类相食/null 同类项/null 同系/null 同系物/null 同素/null 同素体/null 同素异形体/null 同级/null 同级评审/null 同线/null 同组/null 同翅目/null 同翅类/null 同胞/null 同胞兄妹/null 同舟共济/null 同舟而济/null 同船/null 同色/null 同花顺/null 同蒙其利/null 同蒲铁路/null 同血族/null 同行/null 同行业/null 同袍/null 同袍同泽/null 同语/null 同调/null 同谋/null 同谋者/null 同质/null 同质性/null 同贺/null 同路/null 同路人/null 同跳/null 同轴/null 同轴圆弧/null 同轴电缆/null 同辈/null 同途殊归/null 同道/null 同道中人/null 同道者/null 同配生殖/null 同酬/null 同量/null 同量异位素/null 同门/null 同门异户/null 同队/null 同音/null 同音字/null 同音词/null 同韵词/null 同额/null 同餐/null 同龄/null 同龄人/null 名下/null 名下无虚/null 名不副实/null 名不正言不顺/null 名不符实/null 名不虚传/null 名不虚行/null 名不见经传/null 名为/null 名义/null 名义上/null 名义价值/null 名义工资/null 名义账户/null 名产/null 名人/null 名人录/null 名从主人/null 名份/null 名优/null 名优产品/null 名优新/null 名优新产品/null 名优特新产品/null 名位/null 名作/null 名儒/null 名儿/null 名册/null 名分/null 名列/null 名列前茅/null 名列榜首/null 名列第一/null 名列首位/null 名利/null 名利双收/null 名利场/null 名制/null 名刺/null 名副其实/null 名匠/null 名医/null 名单/null 名厨/null 名古屋/null 名句/null 名叫/null 名史/null 名号/null 名后/null 名唤/null 名嘴/null 名噪一时/null 名地/null 名址/null 名垂/null 名垂史册/null 名垂青史/null 名城/null 名堂/null 名士/null 名士派/null 名士风流/null 名声/null 名声在外/null 名声大噪/null 名声大振/null 名声好/null 名声狼藉/null 名妓/null 名媒正配/null 名媛/null 名子/null 名字/null 名存实亡/null 名学/null 名实/null 名实不符/null 名实相副/null 名实相称/null 名实相符/null 名家/null 名将/null 名山/null 名山事业/null 名山大川/null 名师/null 名师出高徒/null 名帖/null 名录/null 名录服务/null 名手/null 名扬中外/null 名扬四方/null 名扬四海/null 名教/null 名数/null 名星/null 名曲/null 名望/null 名标青史/null 名校/null 名模/null 名次/null 名正言顺/null 名气/null 名流/null 名源/null 名满天下/null 名演/null 名演员/null 名烟/null 名爵/null 名片/null 名片盒/null 名牌/null 名牌产品/null 名牌货/null 名物/null 名特产/null 名状/null 名画/null 名画家/null 名目/null 名目繁多/null 名相/null 名称/null 名称权/null 名称标签/null 名符其实/null 名签/null 名篇/null 名簿/null 名缰利索/null 名缰利锁/null 名胜/null 名胜古迹/null 名臣/null 名节/null 名茶/null 名菜/null 名落孙山/null 名著/null 名衔/null 名表/null 名裂/null 名角/null 名角儿/null 名言/null 名言集/null 名誉/null 名誉博士/null 名誉博士学位/null 名誉坏/null 名誉好/null 名誉学位/null 名誉扫地/null 名誉权/null 名讳/null 名论/null 名词/null 名诗/null 名贵/null 名贵药材/null 名过其实/null 名酒/null 名重识暗/null 名量词/null 名门/null 名门世族/null 名门望族/null 名间/null 名间乡/null 名闻/null 名震中外/null 名额/null 名额有限/null 名驰遐迩/null 名高天下/null 名高难副/null 后一段/null 后不为例/null 后不见来者/null 后世/null 后两者/null 后为/null 后主/null 后之/null 后事/null 后事之师/null 后人/null 后人乘凉/null 后仍/null 后付/null 后代/null 后以/null 后仰/null 后仰前合/null 后任/null 后会可期/null 后会无期/null 后会有期/null 后会难期/null 后信号灯/null 后倾/null 后儿/null 后元音/null 后入/null 后冬/null 后冲/null 后凉/null 后列/null 后加/null 后劲/null 后势看俏/null 后勤/null 后勤体制/null 后勤保障/null 后勤史/null 后勤学/null 后勤工作/null 后勤建设/null 后勤思想/null 后勤技术/null 后勤法规/null 后勤理论/null 后勤管理/null 后勤装备/null 后勤部/null 后勾拳/null 后半/null 后半叶/null 后半场/null 后半夜/null 后半天/null 后半晌/null 后半期/null 后半生/null 后半部/null 后卫/null 后卫线/null 后即/null 后厅/null 后厦/null 后又/null 后发制人/null 后发座/null 后变/null 后召/null 后台/null 后台老板/null 后叶/null 后合前仰/null 后周/null 后味/null 后唐/null 后嗣/null 后圈/null 后坐/null 后坐力/null 后壁/null 后壁乡/null 后备/null 后备军/null 后备干部/null 后备箱/null 后天/null 后天下之乐而乐/null 后天性/null 后头/null 后奏曲/null 后妃/null 后妈/null 后娘/null 后婚/null 后婚儿/null 后学/null 后实先声/null 后宫/null 后尘/null 后尾儿/null 后屈/null 后屋/null 后山/null 后已/null 后巷/null 后巷前街/null 后帐/null 后年/null 后序/null 后座/null 后庭/null 后延/null 后影/null 后心/null 后怕/null 后恭前倨/null 后悔/null 后悔不及/null 后悔不该/null 后悔不迭/null 后悔何及/null 后悔无及/null 后悔药/null 后悔莫及/null 后患/null 后患无穷/null 后想/null 后感/null 后感觉/null 后成/null 后房/null 后手/null 后手不接/null 后才/null 后拥/null 后拥前呼/null 后拥前遮/null 后拥前驱/null 后挡板/null 后排/null 后掠角/null 后接/null 后推/null 后掩蔽/null 后援/null 后摆/null 后撤/null 后效/null 后文/null 后方/null 后方补给/null 后方防卫/null 后日/null 后明/null 后晋/null 后晌/null 后景/null 后期/null 后来/null 后来之秀/null 后来居上/null 后来者居上/null 后果/null 后果前因/null 后果自负/null 后查/null 后桥/null 后梁/null 后步/null 后段/null 后殿/null 后母/null 后汉/null 后汉书/null 后没/null 后浪/null 后浪崔前浪/null 后浪推前浪/null 后港/null 后溪穴/null 后滞/null 后灯/null 后燕/null 后父/null 后爹/null 后现代主义/null 后生/null 后生动物/null 后生可畏/null 后生小子/null 后生晚学/null 后用/null 后甲板/null 后盖/null 后盾/null 后福/null 后秦/null 后空翻/null 后窗/null 后端/null 后类/null 后继/null 后继乏人/null 后继无人/null 后继有人/null 后继者/null 后续/null 后续的解释过程/null 后缀/null 后缘/null 后罩房/null 后置/null 后置词/null 后羿/null 后翅/null 后翻筋斗/null 后者/null 后肢/null 后背/null 后胸/null 后能/null 后脑/null 后脑勺/null 后脑勺子/null 后脑海/null 后脚/null 后脸儿/null 后腰/null 后腿/null 后膛/null 后舱/null 后蜀/null 后行/null 后街/null 后补/null 后补者/null 后被/null 后裔/null 后襟/null 后西游记/null 后见之明/null 后视/null 后视图/null 后视镜/null 后记/null 后设/null 后诊/null 后词汇加工/null 后话/null 后语/null 后账/null 后赵/null 后起/null 后起之秀/null 后跟/null 后路/null 后身/null 后车之戒/null 后车之鉴/null 后车轴/null 后转/null 后轮/null 后轴/null 后辈/null 后辍/null 后边/null 后边儿/null 后进/null 后进先出/null 后进变先进/null 后述/null 后退/null 后送/null 后送医院/null 后逃/null 后选/null 后遗/null 后遗症/null 后部/null 后里/null 后里乡/null 后金/null 后钩/null 后钩儿/null 后门/null 后门打狼/null 后门进狼/null 后防线/null 后附/null 后院/null 后院起火/null 后面/null 后项/null 后顾/null 后顾之忧/null 后顾之患/null 后顾之虑/null 后顾之虞/null 后颈/null 后首/null 后魏/null 后鼻音/null 后龙/null 后龙镇/null 吏治/null 吏胥/null 吏部/null 吐丝/null 吐丝自缚/null 吐了/null 吐出/null 吐出物/null 吐刚茹柔/null 吐口/null 吐口水/null 吐司/null 吐哺握发/null 吐唾沫/null 吐奶/null 吐字/null 吐属/null 吐弃/null 吐故纳新/null 吐根/null 吐气/null 吐气扬眉/null 吐沫/null 吐泡/null 吐泻/null 吐火/null 吐火罗人/null 吐瓦鲁/null 吐痰/null 吐穗/null 吐絮/null 吐纳/null 吐绶鸡/null 吐胆倾心/null 吐艳/null 吐苦水/null 吐蕃/null 吐蕃王朝/null 吐藩/null 吐血/null 吐诉/null 吐谷浑/null 吐雾/null 吐露/null 吐露真情/null 吐鲁番/null 吐鲁番地区/null 吐鲁番盆地/null 向一边/null 向上/null 向上举/null 向上扔/null 向上抛/null 向上游/null 向上爬/null 向上看/null 向下/null 向下坡/null 向下看/null 向下风/null 向东/null 向东北/null 向东南/null 向东方/null 向东行/null 向于/null 向人民负责/null 向何处/null 向使/null 向例/null 向侧边/null 向侧面/null 向傍侧/null 向光/null 向内/null 向内卷/null 向到/null 向前/null 向前冲/null 向前看/null 向前翻腾/null 向前进/null 向北/null 向北地/null 向北方/null 向南/null 向南方/null 向右/null 向右拐/null 向右转/null 向后/null 向后翻腾/null 向后转/null 向后面/null 向哪/null 向地性/null 向壁虚构/null 向壁虚造/null 向外/null 向外面/null 向太空/null 向她/null 向学/null 向导/null 向岸上/null 向左/null 向左拐/null 向左转/null 向巴平措/null 向平之愿/null 向往/null 向心/null 向心力/null 向性/null 向慕/null 向我/null 向搂上/null 向斜/null 向斜层/null 向无此例/null 向日/null 向日性/null 向日葵/null 向暮/null 向来/null 向标/null 向正/null 向此/null 向海/null 向海外/null 向海岸/null 向海面/null 向火/null 向火乞儿/null 向盘/null 向着/null 向社会开放/null 向纵深发展/null 向背/null 向舷外/null 向著/null 向西/null 向西南/null 向这/null 向这边/null 向这里/null 向迩/null 向那/null 向里/null 向里头/null 向野外/null 向量/null 向量代数/null 向量图形/null 向阳/null 向阳区/null 向阳花/null 向隅/null 向隅独泣/null 向隅而泣/null 向风/null 吓一跳/null 吓不倒/null 吓了/null 吓人/null 吓住/null 吓倒/null 吓傻/null 吓呆/null 吓唬/null 吓嘘/null 吓坏/null 吓声/null 吓得/null 吓得发抖/null 吓昏/null 吓死/null 吓疯/null 吓着/null 吓破胆/null 吓走/null 吓跑/null 吓阻/null 吕不韦/null 吕剧/null 吕塞尔斯海姆/null 吕安题凤/null 吕宋/null 吕宋岛/null 吕宋烟/null 吕岩/null 吕布/null 吕布戟/null 吕望/null 吕梁/null 吕氏春秋/null 吕蒙/null 吕览/null 吕贝克/null 吖啶/null 吖嗪/null 吗哪/null 吗啡/null 吗啡精/null 君临/null 君主/null 君主专制/null 君主专制制/null 君主制/null 君主国/null 君主政体/null 君主政治/null 君主权/null 君主立宪/null 君主立宪制/null 君位/null 君士坦丁堡/null 君子/null 君子一言/null 君子一言快马一鞭/null 君子不计小人过/null 君子之交/null 君子之交淡如水/null 君子兰/null 君子动口不动手/null 君子协定/null 君子国/null 君子坦荡荡/null 君山/null 君山区/null 君悦/null 君权/null 君王/null 君臣/null 吝于/null 吝啬/null 吝啬者/null 吝啬鬼/null 吝惜/null 吝舍/null 吞下/null 吞云吐雾/null 吞剥/null 吞吃/null 吞吐/null 吞吐能力/null 吞吐量/null 吞吞吐吐/null 吞咽/null 吞噬/null 吞噬作用/null 吞噬细胞/null 吞声/null 吞声忍气/null 吞声饮气/null 吞并/null 吞恨/null 吞拿/null 吞拿鱼/null 吞掉/null 吞服/null 吞没/null 吞灭/null 吞炭漆身/null 吞物/null 吞米桑布札/null 吞精/null 吞舟之鱼/null 吞金/null 吞食/null 吟味/null 吟咏/null 吟哦/null 吟唱/null 吟唱者/null 吟子打死/null 吟游/null 吟篇/null 吟诗/null 吟诵/null 吟颂/null 吟风咏月/null 吟风弄月/null 吠叫/null 吠吠/null 吠声/null 吠形吠声/null 吠影吠声/null 吠月/null 吠舍/null 吠陀/null 吠非其主/null 吡叻/null 吡咯/null 吡啶/null 吡拉西坦/null 否决/null 否决权/null 否决票/null 否决者/null 否则/null 否去泰来/null 否定/null 否定之否定/null 否定句/null 否定性/null 否定论/null 否有效/null 否极泰来/null 否极泰至/null 否极生泰/null 否终则泰/null 否终而泰/null 否认/null 否认者/null 吧台/null 吧唧/null 吧唧吧唧/null 吧嗒/null 吧女/null 吧托/null 吧托女/null 吧间/null 吨位/null 吨公里/null 吨数/null 吨海里/null 吨级/null 吩咐/null 含义/null 含于/null 含冤/null 含冤负屈/null 含吞/null 含含糊糊/null 含味隽永/null 含哺鼓腹/null 含商咀征/null 含在/null 含垢忍耻/null 含垢忍辱/null 含垢纳污/null 含垢藏疾/null 含多/null 含宫咀征/null 含山/null 含忍耻辱/null 含怒/null 含恨/null 含情脉脉/null 含意/null 含括/null 含无/null 含有/null 含有量/null 含毒/null 含气/null 含氧/null 含氧酸/null 含水/null 含水层/null 含水量/null 含沙/null 含沙射影/null 含沙量/null 含油/null 含油岩/null 含泪/null 含混/null 含混不清/null 含湿气/null 含漱剂/null 含燐/null 含片/null 含病毒/null 含盐量/null 含着/null 含石油/null 含碱/null 含碳/null 含磷/null 含税/null 含笑/null 含笑九泉/null 含笑入地/null 含米特人/null 含糊/null 含糊不清/null 含糊其辞/null 含糖/null 含纤维/null 含羞/null 含羞草/null 含而不露/null 含胡/null 含苞/null 含苞待放/null 含苞欲放/null 含英咀华/null 含蓄/null 含蓼问疾/null 含蕴/null 含血喷人/null 含辛茹苦/null 含酒精/null 含酸/null 含量/null 含金/null 含金量/null 含钙/null 含铁/null 含铁质/null 含雪/null 含饴弄孙/null 含鸦片/null 含齿戴发/null 听不/null 听不到/null 听不懂/null 听不见/null 听不进/null 听不进去/null 听之/null 听之任之/null 听书/null 听了/null 听事/null 听人/null 听人摆布/null 听人穿鼻/null 听从/null 听他/null 听任/null 听众/null 听众席/null 听会/null 听使/null 听便/null 听信/null 听信谣言/null 听候/null 听候处理/null 听做/null 听其自然/null 听其言而观其行/null 听其言观其行/null 听写/null 听凭/null 听出/null 听到/null 听力/null 听力理解/null 听力表/null 听力计/null 听厌/null 听取/null 听取意见/null 听取批评/null 听取汇报/null 听后/null 听君一席话/null 听听/null 听命/null 听墙根/null 听墙根儿/null 听墙面/null 听天任命/null 听天安命/null 听天由命/null 听头/null 听子/null 听完/null 听审/null 听审会/null 听小骨/null 听岔/null 听差/null 听度计/null 听得/null 听得懂/null 听得见/null 听惯/null 听想/null 听懂/null 听戏/null 听我/null 听房/null 听政/null 听断/null 听来/null 听清/null 听着/null 听神经/null 听窗/null 听筒/null 听者/null 听者有心/null 听而不闻/null 听而无闻视而不见/null 听腻/null 听腻了/null 听著/null 听装/null 听见/null 听见风就是雨/null 听观/null 听觉/null 听觉型/null 听觉学/null 听讲/null 听讼/null 听证/null 听证会/null 听诊/null 听诊器/null 听话/null 听话儿/null 听话听声/null 听说/null 听说读写/null 听课/null 听起/null 听起来/null 听过/null 听错/null 听闻/null 听阈/null 听随/null 听风/null 听风听水/null 听风就是雨/null 听风是雨/null 听骨/null 听骨链/null 吭吭/null 吭哧/null 吭声/null 吭气/null 吮乳/null 吮吸/null 吮干/null 吮痈舐痔/null 启东/null 启事/null 启人疑窦/null 启动/null 启动作业/null 启动区/null 启动子/null 启动市场/null 启动技术/null 启发/null 启发式/null 启发式教学/null 启发性/null 启发法/null 启发者/null 启口/null 启奏/null 启封/null 启应祈祷/null 启开/null 启德机场/null 启明/null 启明星/null 启用/null 启碇/null 启示/null 启示录/null 启示性/null 启示者/null 启禀/null 启程/null 启航/null 启蒙/null 启蒙专制君主/null 启蒙主义/null 启蒙运动/null 启蛰/null 启衅/null 启运/null 启迪/null 启闭/null 启齿/null 吱叫/null 吱吱/null 吱吱叫/null 吱吱响/null 吱吱嘎嘎/null 吱吱声/null 吱吾/null 吱响/null 吱唔/null 吱喳/null 吱嘎/null 吱声/null 吲哚/null 吴下阿蒙/null 吴中/null 吴中区/null 吴仪/null 吴任臣/null 吴作栋/null 吴侬娇语/null 吴侬软语/null 吴兴/null 吴兴区/null 吴县/null 吴哥/null 吴哥城/null 吴哥窟/null 吴嘉经/null 吴国/null 吴堡/null 吴天明/null 吴头楚尾/null 吴子/null 吴孟超/null 吴官正/null 吴尊/null 吴川/null 吴市吹箫/null 吴建豪/null 吴忠/null 吴承恩/null 吴敬梓/null 吴旗/null 吴晗/null 吴桥/null 吴楚/null 吴永刚/null 吴江/null 吴淞/null 吴清源/null 吴牛喘月/null 吴牛见月/null 吴玉章/null 吴王阖庐/null 吴王阖闾/null 吴用/null 吴自牧/null 吴茱萸/null 吴语/null 吴起/null 吴起县/null 吴越/null 吴越同舟/null 吴越春秋/null 吴越曲/null 吴趼人/null 吴邦国/null 吴镇宇/null 吵吵/null 吵吵嚷嚷/null 吵吵闹闹/null 吵嘴/null 吵嚷/null 吵子/null 吵得/null 吵杂/null 吵架/null 吵着/null 吵翻/null 吵者/null 吵过/null 吵醒/null 吵闹/null 吵闹声/null 吸上/null 吸了/null 吸住/null 吸允/null 吸入/null 吸入剂/null 吸入器/null 吸入者/null 吸入量/null 吸入阀/null 吸出/null 吸出器/null 吸到/null 吸力/null 吸取/null 吸取教训/null 吸口/null 吸吮/null 吸墨纸/null 吸声/null 吸奶/null 吸孔/null 吸小/null 吸尘/null 吸尘器/null 吸尘机/null 吸尽/null 吸干/null 吸引/null 吸引人/null 吸引力/null 吸引外资/null 吸引子/null 吸引子网络/null 吸引物/null 吸引著/null 吸收/null 吸收体/null 吸收光谱/null 吸收剂/null 吸收剂量/null 吸收器/null 吸收外资/null 吸收度/null 吸收性/null 吸收比/null 吸收率/null 吸毒/null 吸毒成瘾/null 吸毒者/null 吸气/null 吸气器/null 吸氧/null 吸水/null 吸水力/null 吸法/null 吸浆虫/null 吸湿/null 吸湿性/null 吸烟/null 吸烟区/null 吸烟室/null 吸烟者/null 吸热/null 吸热性/null 吸留/null 吸盘/null 吸着/null 吸着剂/null 吸着物/null 吸睛/null 吸碳/null 吸碳存/null 吸积/null 吸管/null 吸纳/null 吸芽/null 吸虫/null 吸虫纲/null 吸血/null 吸血者/null 吸血鬼/null 吸起/null 吸进/null 吸金/null 吸铁石/null 吸门/null 吸附/null 吸附剂/null 吸附性/null 吸附洗消剂/null 吸音/null 吸顶灯/null 吸食/null 吸饱/null 吹了/null 吹倒/null 吹光/null 吹入/null 吹冷风/null 吹出/null 吹动/null 吹去/null 吹口哨/null 吹叶机/null 吹号/null 吹向/null 吹吹/null 吹吹打打/null 吹吹拍拍/null 吹响/null 吹哨/null 吹喇叭/null 吹嘘/null 吹大气/null 吹大法螺/null 吹奏/null 吹孔/null 吹干/null 吹开/null 吹影镂尘/null 吹成/null 吹打/null 吹打乐/null 吹扫/null 吹拂/null 吹捧/null 吹掉/null 吹擂/null 吹散/null 吹棉介壳虫/null 吹毛求瑕/null 吹毛求疵/null 吹毛索疵/null 吹气/null 吹气胜兰/null 吹求/null 吹法/null 吹泡/null 吹消/null 吹火/null 吹灭/null 吹灰/null 吹灰之力/null 吹点/null 吹炼/null 吹熄/null 吹牛/null 吹牛专家/null 吹牛拍马/null 吹牛皮/null 吹皱一池春水/null 吹竽手/null 吹笛/null 吹笛子/null 吹笛者/null 吹管/null 吹管乐/null 吹箫/null 吹箫乞食/null 吹糠见米/null 吹胀/null 吹胡子瞪眼/null 吹腔/null 吹袭/null 吹走/null 吹起/null 吹进/null 吹遍/null 吹雾/null 吹风/null 吹风机/null 吹鼓手/null 吻别/null 吻合/null 吻手/null 吻技/null 吻痕/null 吼出/null 吼叫/null 吼声/null 吼道/null 吽牙/null 吾人/null 吾令/null 吾侪/null 吾兄/null 吾地/null 吾家/null 吾尔/null 吾尔开希/null 吾生也有涯/null 吾等/null 吾辈/null 吾道东矣/null 呀呀/null 呀诺达/null 呃逆/null 呆会儿/null 呆住/null 呆傻/null 呆呆/null 呆呆地/null 呆在/null 呆在家/null 呆头/null 呆头呆脑/null 呆子/null 呆小症/null 呆帐/null 呆得/null 呆想/null 呆板/null 呆根/null 呆滞/null 呆瓜/null 呆看/null 呆立/null 呆笨/null 呆若木鸡/null 呆视/null 呆话/null 呆账/null 呈上/null 呈上升趋势/null 呈交/null 呈准/null 呈出/null 呈函/null 呈子/null 呈应/null 呈报/null 呈文/null 呈正/null 呈献/null 呈现/null 呈现出/null 呈祥/null 呈给/null 呈脉/null 呈请/null 呈贡/null 呈送/null 呈递/null 呈阅/null 呈阳性/null 呈露/null 呈项/null 呈验/null 告一段落/null 告之/null 告人/null 告便/null 告假/null 告别/null 告别仪式/null 告别宴会/null 告别式/null 告别词/null 告别话/null 告别辞/null 告劳/null 告发/null 告吹/null 告密/null 告密者/null 告急/null 告慰/null 告成/null 告戒/null 告捷/null 告朔饩羊/null 告栏/null 告求/null 告牌/null 告状/null 告病/null 告白/null 告知/null 告示/null 告示牌/null 告竣/null 告终/null 告绝/null 告罄/null 告罪/null 告老/null 告老还乡/null 告者/null 告解/null 告警/null 告诉/null 告诫/null 告语/null 告诵/null 告谢/null 告贷/null 告辞/null 告退/null 告送/null 告饶/null 呋喃/null 呋喃西林/null 呐喊/null 呒啥/null 呒虾米/null 呒虾米输入法/null 呓语/null 呕出物/null 呕吐/null 呕吐物/null 呕吐者/null 呕心/null 呕心吐胆/null 呕心沥血/null 呕气/null 呕血/null 呖呖/null 员外/null 员外郎/null 员山/null 员山乡/null 员工/null 员林/null 员林镇/null 员警/null 员额/null 呛人/null 呛到/null 呛咕/null 呛鼻/null 呜乎哀哉/null 呜冤叫屈/null 呜呜/null 呜呼/null 呜呼哀哉/null 呜咽/null 呜声/null 呜辞/null 呢呢/null 呢呢痴痴/null 呢喃/null 呢喃细语/null 呢子/null 呢帽/null 呢称/null 呢绒/null 呢绒商/null 呤呤/null 呤唱/null 呦呦/null 周一/null 周一岳/null 周三/null 周三径一/null 周书/null 周二/null 周五/null 周代/null 周会/null 周传瑛/null 周作人/null 周全/null 周公吐哺/null 周六/null 周刊/null 周到/null 周勃/null 周口/null 周口地区/null 周口店/null 周四/null 周围/null 周围性眩晕/null 周围环境/null 周围神经/null 周地/null 周处/null 周天/null 周宁/null 周宣王/null 周家/null 周密/null 周小川/null 周岁/null 周年/null 周庄/null 周庄镇/null 周延/null 周径/null 周急继乏/null 周总理/null 周恤/null 周恩来/null 周扒皮/null 周折/null 周报/null 周敦颐/null 周文王/null 周旋/null 周日/null 周易/null 周星驰/null 周晬/null 周朝/null 周期/null 周期函数/null 周期律/null 周期性/null 周期数/null 周期系/null 周期表/null 周期解/null 周未/null 周末/null 周末愉快/null 周村/null 周村区/null 周杰伦/null 周树人/null 周梁淑怡/null 周正/null 周武王/null 周武王姬发/null 周永康/null 周波/null 周济/null 周润发/null 周渝民/null 周游/null 周游世界/null 周游列国/null 周狗/null 周率/null 周王朝/null 周瑜/null 周瑜打黄盖/null 周璇/null 周界/null 周瘦鹃/null 周相/null 周知/null 周礼/null 周穆王/null 周立波/null 周章/null 周线/null 周缘/null 周而不比/null 周而复始/null 周至/null 周薪/null 周角/null 周详/null 周身/null 周转/null 周转期/null 周转率/null 周转资金/null 周转量/null 周转金/null 周边/null 周边设备/null 周速/null 周遍/null 周遭/null 周郎顾曲/null 周长/null 呫吨/null 呫吨酮/null 呫呫/null 呫哔/null 呫嗫/null 呫嚅/null 呫毕/null 呱呱/null 呱呱叫/null 呱哒/null 呱唧/null 呱嗒/null 呱嗒板儿/null 呲牙/null 呲牙咧嘴/null 味儿/null 味同嚼腊/null 味同嚼蜡/null 味噌汤/null 味好/null 味如嚼蜡/null 味如鸡肋/null 味差/null 味数/null 味料/null 味汁/null 味浓/null 味淡/null 味甘美/null 味精/null 味素/null 味美/null 味美思酒/null 味著/null 味蕾/null 味觉/null 味觉迟钝/null 味道/null 味道好/null 味道差/null 呵佛骂祖/null 呵叱/null 呵呵/null 呵喝/null 呵壁问天/null 呵成/null 呵护/null 呵斥/null 呵欠/null 呵欠虫/null 呵气/null 呵痒/null 呵禁/null 呵责/null 呶呶/null 呶呶不休/null 呷呷/null 呷茶/null 呸声/null 呻吟/null 呻吟声/null 呼中/null 呼中区/null 呼么喝六/null 呼之即来/null 呼之即来挥之即去/null 呼之欲出/null 呼伦湖/null 呼伦贝尔/null 呼伦贝尔盟/null 呼伦贝尔草原/null 呼入/null 呼兰/null 呼兰区/null 呼出/null 呼卢喝雉/null 呼叫/null 呼叫中心/null 呼叫器/null 呼叫声/null 呼叫者/null 呼召/null 呼号/null 呼吁/null 呼吁书/null 呼吸/null 呼吸作用/null 呼吸器/null 呼吸气/null 呼吸相通/null 呼吸管/null 呼吸系统/null 呼吸者/null 呼吸调节器/null 呼吸道/null 呼呼/null 呼呼哱/null 呼呼声/null 呼呼大睡/null 呼和浩特/null 呼咻/null 呼响/null 呼哧/null 呼哧呼哧/null 呼哨/null 呼唤/null 呼啦/null 呼啦啦/null 呼啦圈/null 呼啸/null 呼啸声/null 呼啸山庄/null 呼喇/null 呼喊/null 呼喊者/null 呼喝/null 呼嗤/null 呼噜/null 呼噜噜/null 呼噪/null 呼嚎/null 呼图克图/null 呼图壁/null 呼地/null 呼声/null 呼声最高/null 呼天抢地/null 呼孔/null 呼市/null 呼应/null 呼庚呼癸/null 呼延/null 呼扇/null 呼拉圈/null 呼救/null 呼救声/null 呼朋引伴/null 呼朋引类/null 呼机/null 呼来喝去/null 呼毕勒罕/null 呼气/null 呼牛作马/null 呼牛呼马/null 呼玛/null 呼蚩/null 呼风唤雨/null 呼鼓而攻之/null 命不久已/null 命世之才/null 命中/null 命中注定/null 命中率/null 命人/null 命令/null 命令主义/null 命令书/null 命令句/null 命令式/null 命令行/null 命俦啸侣/null 命危/null 命名/null 命名为/null 命名人/null 命名作业/null 命名大会/null 命名法/null 命名系统/null 命名者/null 命在旦夕/null 命定/null 命意/null 命数/null 命根/null 命根子/null 命案/null 命理学/null 命盘/null 命相/null 命笔/null 命脉/null 命苦/null 命薄/null 命该/null 命赴黄泉/null 命蹇时乖/null 命运/null 命运攸关/null 命运注定/null 命途/null 命途坎坷/null 命题/null 命题逻辑/null 命驾/null 咀嚼/null 咂嘴/null 咂嘴弄舌/null 咂摸/null 咄咄/null 咄咄怪事/null 咄咄称奇/null 咄咄逼人/null 咄嗟/null 咄嗟便办/null 咆哮/null 咆哮声/null 咆哮如雷/null 咆哮者/null 咆啸/null 咋办/null 咋呼/null 咋回事/null 咋舌/null 和乐/null 和乐蟹/null 和事佬/null 和事老/null 和亲/null 和亲政策/null 和会/null 和光同尘/null 和和气气/null 和善/null 和声/null 和声学/null 和头/null 和好/null 和好如初/null 和婉/null 和容悦气/null 和尚/null 和尚打伞/null 和局/null 和布克赛尔县/null 和平/null 和平主义/null 和平乡/null 和平会谈/null 和平共处/null 和平共处五项原则/null 和平利用/null 和平力量/null 和平协议/null 和平友好/null 和平建议/null 和平条约/null 和平演变/null 和平特使/null 和平竞赛/null 和平统一/null 和平统一祖国/null 和平解决/null 和平谈判/null 和平过渡/null 和平运动/null 和平部队/null 和平里/null 和平队/null 和平鸽/null 和弄/null 和弦/null 和得来/null 和悦/null 和政/null 和散那/null 和数/null 和文/null 和易/null 和暖/null 和有/null 和服/null 和林格尔/null 和棋/null 和歌/null 和歌山/null 和歌山县/null 和氏璧/null 和气/null 和气生财/null 和气致祥/null 和洽/null 和煦/null 和牌/null 和珅/null 和璧隋珠/null 和田/null 和田地区/null 和田河/null 和田玉/null 和畅/null 和盘托出/null 和睦/null 和睦相处/null 和硕/null 和稀泥/null 和约/null 和经/null 和缓/null 和美/null 和美镇/null 和羹/null 和而不同/null 和胃力气/null 和蔼/null 和蔼可亲/null 和衷共济/null 和解/null 和解人/null 和解性/null 和解稅/null 和解者/null 和解费/null 和议/null 和记黄埔/null 和诗/null 和谈/null 和谐/null 和谐一致/null 和谐性/null 和达・清夫/null 和静/null 和面/null 和音/null 和顺/null 和颜悦色/null 和风/null 和风丽日/null 和风细雨/null 和食/null 和龙/null 咎于/null 咎有应得/null 咎由自取/null 咏叙唱/null 咏叹/null 咏叹调/null 咏唱/null 咏唱调/null 咏怀/null 咏春/null 咏春拳/null 咏歌/null 咏诗/null 咏赞/null 咏雪之慧/null 咒文/null 咒符/null 咒诅/null 咒语/null 咒逐/null 咒骂/null 咔叽/null 咔哒/null 咔哒声/null 咔唑/null 咔嗒/null 咔嚓/null 咔白/null 咕叫/null 咕叽/null 咕咕/null 咕咕叫/null 咕咚/null 咕咾肉/null 咕哝/null 咕唧/null 咕嘟/null 咕噜/null 咕噜肉/null 咕容/null 咕攘/null 咕隆/null 咖哩/null 咖哩汁/null 咖哩粉/null 咖啡/null 咖啡厅/null 咖啡因/null 咖啡室/null 咖啡屋/null 咖啡店/null 咖啡机/null 咖啡碱/null 咖啡粉/null 咖啡色/null 咖啡茶/null 咖啡豆/null 咖啡馆/null 咖啡馆儿/null 咖喱/null 咖喱粉/null 咖逼/null 咚咚/null 咝咝/null 咝咝声/null 咝声/null 咣咣/null 咣当/null 咧咧/null 咧嘴/null 咧开/null 咧开嘴笑/null 咧着/null 咨客/null 咨文/null 咨询/null 咨询中心/null 咨询委员会/null 咨询服务/null 咨询机构/null 咩咩/null 咪叫/null 咪咪/null 咫尺/null 咫尺万里/null 咫尺千里/null 咫尺天涯/null 咫角骖驹/null 咬一口/null 咬下/null 咬了/null 咬人/null 咬人狗儿不露齿/null 咬伤/null 咬住/null 咬合/null 咬咬牙/null 咬啮/null 咬嚼/null 咬字/null 咬字儿/null 咬字眼儿/null 咬定/null 咬得菜根/null 咬掉/null 咬文/null 咬文嚼字/null 咬断/null 咬牙/null 咬牙切齿/null 咬痕/null 咬着/null 咬碎/null 咬紧/null 咬紧牙关/null 咬群/null 咬耳朵/null 咬舌儿/null 咬舌自尽/null 咬钉嚼铁/null 咬钩/null 咭咭呱呱/null 咯儿/null 咯叫/null 咯吱/null 咯吱声/null 咯咯/null 咯咯声/null 咯咯笑/null 咯哒/null 咯嗒/null 咯噔/null 咯嚓/null 咯声/null 咯笑/null 咯肢/null 咯血/null 咱们/null 咱俩/null 咱娃/null 咱家/null 咱得/null 咱村/null 咱爷/null 咱这/null 咳出/null 咳出物/null 咳呛/null 咳唾成珠/null 咳嗽/null 咳声/null 咳得/null 咳痰/null 咳药/null 咳血/null 咴儿咴儿/null 咴唿/null 咸丝丝/null 咸丝丝儿/null 咸丰/null 咸兴/null 咸兴市/null 咸味/null 咸宁/null 咸宁地区/null 咸安区/null 咸宜/null 咸榆公路/null 咸水/null 咸水妹/null 咸水湖/null 咸津津/null 咸津津儿/null 咸海/null 咸涩/null 咸淡/null 咸湖/null 咸猪手/null 咸的/null 咸盐/null 咸肉/null 咸菜/null 咸蛋/null 咸镜/null 咸镜北道/null 咸镜南道/null 咸镜道/null 咸阳/null 咸阳地区/null 咸阳桥/null 咸鱼/null 咸鱼翻身/null 咸鸭蛋/null 咻咻/null 咻声/null 咽下/null 咽了/null 咽住/null 咽喉/null 咽喉炎/null 咽头/null 咽头炎/null 咽峡/null 咽峡炎/null 咽气/null 咽炎/null 咽肿/null 咽鼓管/null 咿呀/null 咿咿/null 咿唔/null 哀丝豪竹/null 哀乐/null 哀伤/null 哀伤地/null 哀兵必胜/null 哀劝/null 哀叫/null 哀号/null 哀叹/null 哀吊/null 哀启/null 哀告/null 哀告宾服/null 哀呼/null 哀哀/null 哀哉/null 哀哭/null 哀哭切齿/null 哀唤/null 哀啼/null 哀嚎/null 哀声/null 哀失/null 哀婉/null 哀子/null 哀家/null 哀怜/null 哀思/null 哀怨/null 哀恳/null 哀恸/null 哀悯/null 哀悼/null 哀惜/null 哀愁/null 哀感顽艳/null 哀戚/null 哀梨蒸食/null 哀歌/null 哀毁骨立/null 哀求/null 哀江南赋/null 哀泣/null 哀痛/null 哀的美敦书/null 哀矜/null 哀祭/null 哀而不伤/null 哀艳/null 哀苦/null 哀荣/null 哀莫大于心死/null 哀诉/null 哀词/null 哀诗/null 哀辞/null 哀鸣/null 哀鸿遍地/null 哀鸿遍野/null 品位/null 品名/null 品味/null 品味生活/null 品头论足/null 品头题足/null 品学/null 品学兼优/null 品学兼忧/null 品定/null 品客/null 品家/null 品尝/null 品川/null 品川区/null 品德/null 品德教育/null 品德高尚/null 品性/null 品族/null 品晤/null 品月/null 品服/null 品格/null 品梦/null 品检/null 品牌/null 品目/null 品种/null 品竹弹丝/null 品竹调丝/null 品竹调弦/null 品第/null 品等/null 品管/null 品类/null 品粮/null 品系/null 品红/null 品红色/null 品级/null 品绿/null 品脱/null 品色/null 品节/null 品花/null 品茗/null 品茶/null 品蓝/null 品藻/null 品行/null 品议/null 品评/null 品貌/null 品质/null 品质管制/null 品质超群/null 品达/null 品酒/null 品鉴/null 品题/null 哂纳/null 哄人/null 哄传/null 哄劝/null 哄动/null 哄动一时/null 哄哄/null 哄堂/null 哄堂大笑/null 哄弄/null 哄抢/null 哄抬/null 哄抬物价/null 哄然/null 哄然大笑/null 哄瞒/null 哄笑/null 哄诱/null 哄骗/null 哆哆嗦嗦/null 哆啰美远/null 哆啰美远族/null 哆嗦/null 哆啦/null 哇叫/null 哇哇/null 哇哇叫/null 哇哇哭/null 哇啦/null 哇喇/null 哇噻/null 哇塞/null 哇声/null 哇沙比/null 哇语/null 哇靠/null 哈丰角/null 哈什蚂/null 哈伯/null 哈伯太空望远镜/null 哈伯玛斯/null 哈佛/null 哈佛大学/null 哈克贝利・芬历险记/null 哈利/null 哈利・波特/null 哈利伯顿/null 哈利法克斯/null 哈利路亚/null 哈利迪亚/null 哈努卡/null 哈努卡节/null 哈勃/null 哈博罗内/null 哈吉/null 哈吧狗/null 哈哈/null 哈哈儿/null 哈哈大笑/null 哈哈笑/null 哈哈镜/null 哈啰/null 哈啾/null 哈喇/null 哈喇子/null 哈喽/null 哈士奇/null 哈奴曼/null 哈姆雷特/null 哈季奇/null 哈密/null 哈密地区/null 哈密瓜/null 哈尔斯塔/null 哈尔滨工业大学/null 哈尔登/null 哈巴/null 哈巴河/null 哈巴狗/null 哈巴罗夫斯克/null 哈巴谷书/null 哈巴雪山/null 哈布斯堡/null 哈希/null 哈德逊河/null 哈恩/null 哈拉子/null 哈拉尔五世/null 哈拉雷/null 哈摩辣/null 哈日/null 哈日族/null 哈普西科德/null 哈根达斯/null 哈桑/null 哈梅内伊/null 哈欠/null 哈比人/null 哈气/null 哈灵根/null 哈特福德/null 哈珀/null 哈瓦那/null 哈米吉多顿/null 哈米尔卡/null 哈罗/null 哈罗德/null 哈腰/null 哈苏/null 哈莉・贝瑞/null 哈莱姆/null 哈萨克/null 哈萨克人/null 哈萨克文/null 哈萨克斯坦/null 哈萨克语/null 哈蜜瓜/null 哈西纳/null 哈该书/null 哈贝尔/null 哈达/null 哈迪/null 哈迷/null 哈里/null 哈里发/null 哈里发塔/null 哈里发帝国/null 哈里斯堡/null 哈里森・施密特/null 哈雷彗星/null 哈马尔/null 哌嗪/null 哌替啶/null 响个/null 响个不停/null 响了/null 响亮/null 响儿/null 响动/null 响叮当/null 响器/null 响地/null 响声/null 响头/null 响尾蛇/null 响岩/null 响应/null 响应时间/null 响当当/null 响彻/null 响彻云际/null 响彻云霄/null 响晴/null 响杨/null 响板/null 响水/null 响的/null 响着/null 响石/null 响笛/null 响答影随/null 响箭/null 响葫芦/null 响起/null 响遍/null 响遏行云/null 响铃/null 响雷/null 响鞭/null 响音/null 响马/null 响鸣/null 响鼻/null 哎呀/null 哎呦/null 哎哟/null 哎唷/null 哐哐啷啷/null 哐啷/null 哑人/null 哑剧/null 哑剧中/null 哑口/null 哑口无言/null 哑叫/null 哑哑/null 哑场/null 哑声/null 哑子/null 哑子得梦/null 哑巴/null 哑巴亏/null 哑巴吃黄莲/null 哑巴吃黄连/null 哑弹/null 哑炮/null 哑点/null 哑然/null 哑然失笑/null 哑然无生/null 哑终端/null 哑补/null 哑语/null 哑谜/null 哑铃/null 哑门穴/null 哑默悄声/null 哑鼓/null 哒哒/null 哒嗪/null 哓哓/null 哔叽/null 哔哔/null 哔哔啪啪/null 哔声/null 哕哕/null 哗世取宠/null 哗众取宠/null 哗变/null 哗哗/null 哗啦/null 哗啦一声/null 哗啦啦/null 哗地/null 哗拉/null 哗然/null 哗笑/null 哜哜嘈嘈/null 哝哝/null 哥们/null 哥们儿/null 哥伦布/null 哥伦布纪/null 哥伦比亚/null 哥伦比亚大学/null 哥伦比亚广播公司/null 哥伦比亚特区/null 哥儿/null 哥儿们/null 哥儿们义气/null 哥利亚/null 哥吉拉/null 哥哥/null 哥大/null 哥嫂/null 哥尼斯堡/null 哥德堡/null 哥德巴赫猜想/null 哥打巴鲁/null 哥斯大黎加/null 哥斯拉/null 哥斯达黎加/null 哥本哈根/null 哥林多/null 哥林多前书/null 哥林多后书/null 哥特人/null 哥特式/null 哥白尼/null 哥罗仿/null 哥罗芳/null 哥老会/null 哥萨克/null 哥萨克人/null 哦呵/null 哦哟/null 哧溜/null 哨位/null 哨兵/null 哨卡/null 哨声/null 哨子/null 哨子声/null 哨房/null 哨所/null 哨棒/null 哨笛/null 哨艇/null 哨音/null 哩哩啦啦/null 哩哩啰啰/null 哩哩罗罗/null 哩溜歪斜/null 哪一/null 哪一个/null 哪一种/null 哪个/null 哪为/null 哪些/null 哪份/null 哪会/null 哪会儿/null 哪位/null 哪像/null 哪儿/null 哪区/null 哪吒/null 哪壶不开提哪壶/null 哪天/null 哪家/null 哪年哪月/null 哪怕/null 哪找/null 哪是/null 哪有/null 哪样/null 哪次/null 哪点/null 哪由/null 哪知/null 哪种/null 哪科/null 哪能/null 哪要/null 哪许/null 哪边/null 哪里/null 哪里哪里/null 哪门/null 哪门子/null 哪项/null 哭丧/null 哭丧棒/null 哭丧着脸/null 哭丧脸/null 哭了/null 哭似/null 哭出/null 哭叫/null 哭号/null 哭吧/null 哭哭/null 哭哭啼啼/null 哭啼/null 哭啼啼/null 哭喊/null 哭墙/null 哭声/null 哭声震天/null 哭天/null 哭天抹泪/null 哭得/null 哭泣/null 哭泣者/null 哭灵/null 哭的/null 哭着/null 哭秋风/null 哭穷/null 哭笑/null 哭笑不得/null 哭脸/null 哭腔/null 哭著/null 哭诉/null 哭过/null 哭闹/null 哭骂/null 哭鼻/null 哭鼻子/null 哮喘/null 哮喘病/null 哮鸣/null 哲人/null 哲人其萎/null 哲人石/null 哲学/null 哲学上/null 哲学体系/null 哲学博士学位/null 哲学史/null 哲学学派/null 哲学家/null 哲学思想/null 哲学思潮/null 哲学流派/null 哲学理论/null 哲学笔记/null 哲学著作/null 哲学评论/null 哲理/null 哲蚌寺/null 哺乳/null 哺乳动物/null 哺乳室/null 哺乳期/null 哺乳类/null 哺乳类动物/null 哺乳纲/null 哺养/null 哺子/null 哺期/null 哺母乳/null 哺育/null 哼了/null 哼催/null 哼儿哈儿/null 哼哈/null 哼哈二将/null 哼哧/null 哼哼/null 哼哼唧唧/null 哼唧/null 哼唱/null 哼唷/null 哼声/null 哼歌/null 哼着/null 哼着唱/null 哼者/null 哼著/null 哽住/null 哽咽/null 哽噎/null 哽塞/null 唁信/null 唁函/null 唁劳/null 唁电/null 唆使/null 唆唆/null 唆者/null 唇下/null 唇亡齿寒/null 唇印/null 唇吻/null 唇声/null 唇形/null 唇形科/null 唇彩/null 唇枪舌剑/null 唇枪舌战/null 唇焦舌敝/null 唇状/null 唇瓣/null 唇红齿白/null 唇膏/null 唇舌/null 唇裂/null 唇角/null 唇语/null 唇部/null 唇音/null 唇音化/null 唇颚裂/null 唇饰/null 唇齿/null 唇齿相依/null 唇齿音/null 唉叹/null 唉呀/null 唉哟/null 唉唉/null 唉声叹气/null 唉姐/null 唏哩哗啦/null 唏嘘/null 唐三藏/null 唐中宗/null 唐临晋帖/null 唐书/null 唐人/null 唐人街/null 唐代/null 唐代宗/null 唐伯虎/null 唐僖宗/null 唐僧/null 唐初四大家/null 唐卡/null 唐古拉/null 唐古拉山/null 唐古拉山脉/null 唐古拉峰/null 唐哀帝/null 唐哉皇哉/null 唐太宗/null 唐太宗李卫公问对/null 唐宁街/null 唐宋/null 唐宋八大家/null 唐宣宗/null 唐宪宗/null 唐家山/null 唐家璇/null 唐寅/null 唐尧/null 唐山地区/null 唐山大地震/null 唐德宗/null 唐恩都乐/null 唐懿宗/null 唐招提寺/null 唐敬宗/null 唐文宗/null 唐明皇/null 唐昭宗/null 唐朝/null 唐末/null 唐李问对/null 唐棣/null 唐楼/null 唐武宗/null 唐殇帝/null 唐氏儿/null 唐氏症/null 唐河/null 唐海/null 唐狗/null 唐玄宗/null 唐王/null 唐璜/null 唐睿宗/null 唐穆宗/null 唐突/null 唐突西施/null 唐纳/null 唐纳德/null 唐纳德・川普/null 唐绍仪/null 唐老鸭/null 唐肃宗/null 唐花/null 唐菖蒲/null 唐装/null 唐诗/null 唐诗三百首/null 唐顺宗/null 唐高宗/null 唐高祖/null 唐高祖李渊/null 唔好睇/null 唠叨/null 唠叨不已/null 唠叼/null 唠唠/null 唠唠叨叨/null 唠嗑/null 唠扯/null 唠这扯那/null 唢呐/null 唤人/null 唤作/null 唤做/null 唤出/null 唤回/null 唤头/null 唤定/null 唤狗/null 唤起/null 唤起者/null 唤醒/null 唤雨呼风/null 唧叫/null 唧咕/null 唧哝/null 唧唧/null 唧唧叫/null 唧唧喳喳/null 唧唧嘎嘎/null 唧啾/null 唧喳声/null 唧声/null 唧筒/null 唧筒座/null 唪经/null 唬人/null 唬住/null 唬唬/null 唬地/null 唬神瞒鬼/null 售与/null 售书员/null 售价/null 售值/null 售出/null 售卖/null 售后/null 售后服务/null 售完/null 售完即止/null 售后/null 售得/null 售性/null 售房/null 售摊/null 售楼/null 售物/null 售票/null 售票口/null 售票员/null 售票处/null 售票大厅/null 售给/null 售缺/null 售罄/null 售让/null 售货/null 售货台/null 售货员/null 唯一/null 唯一性/null 唯亲/null 唯信/null 唯其/null 唯利是从/null 唯利是图/null 唯利是求/null 唯名论/null 唯吾独尊/null 唯命是从/null 唯命是听/null 唯命论/null 唯唯/null 唯唯否否/null 唯唯诺诺/null 唯妙/null 唯妙唯肖/null 唯实/null 唯心/null 唯心主义/null 唯心主义者/null 唯心史观/null 唯心论/null 唯心辩证法/null 唯恐/null 唯恐天下不乱/null 唯意志论/null 唯我/null 唯我主义/null 唯我独尊/null 唯我论/null 唯才是举/null 唯有/null 唯灵论/null 唯物/null 唯物主义/null 唯物主义者/null 唯物史观/null 唯物论/null 唯物辩证法/null 唯独/null 唯理论/null 唯美/null 唯美主义/null 唯肖/null 唯能论/null 唯若/null 唯读/null 唯贤/null 唯钱是图/null 唱下/null 唱主角/null 唱了/null 唱作/null 唱出/null 唱功/null 唱双簧/null 唱反调/null 唱名/null 唱吧/null 唱和/null 唱喏/null 唱头/null 唱家/null 唱对台戏/null 唱工/null 唱得/null 唱念/null 唱戏/null 唱曲/null 唱本/null 唱机/null 唱歌/k歌 唱歌者/null 唱段/null 唱法/null 唱片/null 唱片儿/null 唱独角戏/null 唱班/null 唱白脸/null 唱盘/null 唱着/null 唱碟/null 唱票/null 唱筹量沙/null 唱者/null 唱腔/null 唱臂/null 唱词/null 唱诗/null 唱诗班/null 唱起/null 唱过/null 唱酬/null 唱针/null 唱高调/null 唱高调儿/null 唵嘛呢叭咪哞/null 唵嘛咪叭呢哞/null 唸唸有词/null 唼喋/null 唾余/null 唾吐/null 唾弃/null 唾手/null 唾手可取/null 唾手可得/null 唾沫/null 唾沫星子/null 唾液/null 唾液素/null 唾液腺/null 唾腺/null 唾面自们/null 唾面自干/null 唾骂/null 唿哨/null 唿喇/null 唿喇喇/null 啁哳/null 啁啾/null 啁啾叫/null 啃书/null 啃去/null 啃掉/null 啃着/null 啃老/null 啃老族/null 啃青/null 啄啄/null 啄木鸟/null 啄痕/null 啄破/null 啄羊鹦鹉/null 啄食/null 商丘/null 商丘地区/null 商业/null 商业中心/null 商业企业/null 商业化/null 商业区/null 商业发票/null 商业局/null 商业应用/null 商业性/null 商业机构/null 商业模式/null 商业版本/null 商业界/null 商业管理/null 商业系统/null 商业经济/null 商业网/null 商业职工/null 商业行为/null 商业计划/null 商业资本/null 商业部/null 商业部门/null 商业银行/null 商事/null 商亭/null 商人/null 商人们/null 商人银行/null 商代/null 商会/null 商住楼/null 商兑/null 商办/null 商务/null 商务中心区/null 商务办事处/null 商务印书馆/null 商务汉语考试/null 商务部/null 商南/null 商号/null 商君书/null 商品/null 商品二重性/null 商品交换/null 商品交易会/null 商品价值/null 商品化/null 商品形象/null 商品性/null 商品房/null 商品拜物教/null 商品检验/null 商品流通/null 商品牌价/null 商品率/null 商品生产/null 商品粮/null 商品经济/null 商品肥料/null 商品质量/null 商品输出/null 商品销售/null 商商/null 商团/null 商场/null 商城/null 商域/null 商埠/null 商女/null 商妥/null 商学/null 商学院/null 商定/null 商家/null 商局/null 商展/null 商州/null 商州区/null 商店/null 商得/null 商情/null 商战/null 商户/null 商报/null 商拟/null 商数/null 商旅/null 商朝/null 商机/null 商权/null 商标/null 商标名/null 商标法/null 商栈/null 商检/null 商检局/null 商榷/null 商民/null 商水/null 商汤/null 商河/null 商法/null 商洛/null 商洽/null 商港/null 商用/null 商界/null 商社/null 商祺/null 商科/null 商科院校/null 商科集团/null 商税/null 商籁体/null 商纣王/null 商约/null 商羊/null 商而优则仕/null 商联/null 商船/null 商行/null 商誉/null 商计/null 商订/null 商讨/null 商议/null 商议会/null 商议好/null 商议者/null 商调/null 商谈/null 商贩/null 商贸/null 商贾/null 商路/null 商都/null 商酌/null 商量/null 商铺/null 商队/null 商鞅/null 商鞅变法/null 商飙徐起/null 啊呀/null 啊呸/null 啊哈/null 啊哟/null 啊唷/null 啊嚏/null 啐了/null 啐声/null 啜泣/null 啜菽饮水/null 啜食/null 啜饮/null 啡厅/null 啤洒/null 啤酒/null 啤酒厂/null 啤酒杯/null 啤酒节/null 啤酒花/null 啥受/null 啥子/null 啥病/null 啦啦/null 啦啦队/null 啦啦队长/null 啦行/null 啧啧/null 啧有烦言/null 啪响/null 啪哒/null 啪啦/null 啪啪/null 啪嗒/null 啪嚓/null 啪声/null 啪达/null 啫哩/null 啫喱/null 啬刻/null 啮合/null 啮雪吞毡/null 啮雪餐毡/null 啮齿/null 啮齿动物/null 啮齿目/null 啮齿类/null 啰唆/null 啰嗦/null 啰苏/null 啰里啰嗦/null 啲咑/null 啴啴/null 啴缓/null 啵啵/null 啷当/null 啸傲/null 啸剧/null 啸啸/null 啸啸声/null 啸声/null 啸聚/null 啸鸣/null 啼叫/null 啼叫声/null 啼哭/null 啼声/null 啼天哭地/null 啼笑皆非/null 啼饥号寒/null 啾叫/null 啾啾/null 喀什/null 喀什噶尔/null 喀什地区/null 喀什米尔/null 喀吧/null 喀哒/null 喀哒声/null 喀啦喀啦/null 喀喇昆仑公路/null 喀喇昆仑山/null 喀喇昆仑山脉/null 喀喇沁/null 喀嚓/null 喀土穆/null 喀奴特/null 喀山/null 喀布尔/null 喀拉喀托火山/null 喀拉拉邦/null 喀拉昆仑山/null 喀拉汗国/null 喀拉汗王朝/null 喀斯特/null 喀斯特地貌/null 喀秋莎/null 喀纳斯湖/null 喀麦隆/null 喁喁/null 喂以/null 喂养/null 喂喂/null 喂奶/null 喂母乳/null 喂猪/null 喂给/null 喂药/null 喂食/null 喂饱/null 喃喃/null 喃喃细语/null 喃喃而语/null 喃喃自语/null 喃字/null 善与人交/null 善举/null 善书/null 善事/null 善于/null 善人/null 善任/null 善体/null 善体人意/null 善写/null 善刀而藏/null 善化/null 善化镇/null 善变/null 善变人/null 善后/null 善后借款/null 善后处理/null 善后工作/null 善哉/null 善善从长/null 善善恶恶/null 善善者不来/null 善处/null 善始令终/null 善始善终/null 善存/null 善待/null 善后/null 善心/null 善忘/null 善思/null 善性/null 善恶/null 善恶不辨/null 善意/null 善意的谎言/null 善感/null 善战/null 善才/null 善报/null 善文/null 善有善报/null 善本/null 善款/null 善气迎人/null 善理/null 善用/null 善男信女/null 善策/null 善类/null 善终/null 善缘/null 善罢/null 善罢甘休/null 善美/null 善者/null 善者不来/null 善者不辩/null 善能/null 善自为谋/null 善自珍摄/null 善良/null 善莫大焉/null 善行/null 善解/null 善解人意/null 善言/null 善言辞/null 善论/null 善诱/null 善说/null 善谈/null 善财/null 善财难舍/null 善贾而沽/null 善辩/null 善辩家/null 善辩者/null 善道/null 善邻/null 善长/null 善门难开/null 善颂善祷/null 善风/null 喇叭/null 喇叭口/null 喇叭声/null 喇叭形/null 喇叭手/null 喇叭枪/null 喇叭水仙/null 喇叭状/null 喇叭筒/null 喇叭管/null 喇叭花/null 喇叭裙/null 喇叭裤/null 喇合/null 喇嘛/null 喇嘛庙/null 喇嘛教/null 喈喈/null 喉咙/null 喉咙痛/null 喉咽/null 喉塞/null 喉塞音/null 喉头/null 喉头炎/null 喉头镜/null 喉学/null 喉急/null 喉擦音/null 喉炎/null 喉痛/null 喉痧/null 喉癌/null 喉科/null 喉科学/null 喉管/null 喉结/null 喉舌/null 喉轮/null 喉部/null 喉镜/null 喉音/null 喉风/null 喉鸣/null 喊了/null 喊人/null 喊价/null 喊住/null 喊冤/null 喊冤叫屈/null 喊冤者/null 喊出/null 喊到/null 喊叫/null 喊叫声/null 喊叫者/null 喊嗓/null 喊嗓子/null 喊嚷/null 喊声/null 喊好/null 喊它/null 喊开/null 喊打/null 喊着/null 喊穷/null 喊话/null 喊道/null 喊醒/null 喋喋/null 喋喋不休/null 喋喋而言/null 喋血/null 喑呜叱吒/null 喑哑/null 喔呀/null 喔唷/null 喔喔/null 喘不/null 喘不过/null 喘不过气/null 喘不过气来/null 喘吁吁/null 喘喘/null 喘嘘嘘/null 喘声/null 喘息/null 喘振/null 喘气/null 喘气者/null 喘状/null 喘着/null 喘着气/null 喘粗气/null 喙长三尺/null 喜上心头/null 喜不自禁/null 喜不自胜/null 喜乐/null 喜乱/null 喜事/null 喜人/null 喜从天降/null 喜修/null 喜光植物/null 喜兴/null 喜冒险/null 喜冲冲/null 喜出望外/null 喜则气缓/null 喜剧/null 喜力/null 喜功/null 喜吟吟/null 喜喜欢欢/null 喜嘉/null 喜地欢天/null 喜好/null 喜娘/null 喜子/null 喜孜孜/null 喜宴/null 喜对/null 喜寿/null 喜封/null 喜帕/null 喜帖/null 喜幛/null 喜幸/null 喜庆/null 喜形/null 喜形于色/null 喜德/null 喜忧参半/null 喜怒/null 喜怒哀乐/null 喜怒无常/null 喜恶/null 喜悦/null 喜战/null 喜报/null 喜新/null 喜新厌旧/null 喜来登/null 喜极而泣/null 喜果/null 喜欢/null 喜欢吵架/null 喜歌剧院/null 喜气/null 喜气洋洋/null 喜气盈门/null 喜洋洋/null 喜滋滋/null 喜炼/null 喜爱/null 喜玛拉雅/null 喜癖/null 喜盈盈/null 喜眉笑眼/null 喜看/null 喜知/null 喜神/null 喜笑/null 喜笑颜开/null 喜筵/null 喜糖/null 喜群飞/null 喜联/null 喜色/null 喜获/null 喜获丰收/null 喜蛋/null 喜讯/null 喜谈/null 喜跃/null 喜车/null 喜迁新居/null 喜迎/null 喜酒/null 喜钱/null 喜闻/null 喜闻乐见/null 喜阳/null 喜雀/null 喜雨/null 喜音/null 喜颜/null 喜饼/null 喜香怜玉/null 喜马拉雅/null 喜马拉雅山/null 喜马拉雅山脉/null 喜鹊/null 喝上/null 喝下/null 喝了/null 喝令/null 喝住/null 喝倒彩/null 喝光/null 喝六呼么/null 喝口/null 喝叱/null 喝声/null 喝够/null 喝完/null 喝干/null 喝彩/null 喝彩声/null 喝成/null 喝掉/null 喝斥/null 喝止/null 喝水/null 喝点/null 喝着/null 喝茶/null 喝西北风/null 喝过/null 喝道/null 喝酒/null 喝醉/null 喝醉了/null 喝采/null 喝问/null 喟叹/null 喟然/null 喧吵/null 喧呼/null 喧哗/null 喧哗与骚动/null 喧嚣/null 喧嚷/null 喧天/null 喧宾夺主/null 喧扰/null 喧腾/null 喧腾不息/null 喧闹/null 喧闹声/null 喧阗/null 喧骚/null 喳喳/null 喳声/null 喷丝头/null 喷云吐雾/null 喷出/null 喷出岩/null 喷出物/null 喷发/null 喷口/null 喷吐/null 喷喷香/null 喷嘴/null 喷嘴儿/null 喷嚏/null 喷嚏剂/null 喷墨/null 喷壶/null 喷头/null 喷子/null 喷射/null 喷射器/null 喷射客机/null 喷射机/null 喷射混凝土/null 喷成/null 喷打/null 喷撒/null 喷枪/null 喷桶/null 喷气/null 喷气发动机/null 喷气口/null 喷气式/null 喷气式飞机/null 喷气推进实验室/null 喷气机/null 喷气织机/null 喷水/null 喷水壶/null 喷水孔/null 喷水池/null 喷水织机/null 喷池/null 喷油井/null 喷泉/null 喷注/null 喷洒/null 喷洒器/null 喷洒车/null 喷浇/null 喷涂/null 喷涌/null 喷淋/null 喷淋浴/null 喷湿/null 喷溅/null 喷溅出/null 喷漆/null 喷漆推进/null 喷灌/null 喷火/null 喷火分队/null 喷火器/null 喷火坦克/null 喷灯/null 喷烟/null 喷焊/null 喷着/null 喷管/null 喷薄/null 喷薄欲出/null 喷镀/null 喷雾/null 喷雾器/null 喷饭/null 喷香/null 喷鼻息/null 喹啉/null 喹诺酮/null 喻为/null 喻性/null 喼汁/null 喽啰/null 喽子/null 喽罗/null 嗄吱/null 嗅中毒/null 嗅出/null 嗅到/null 嗅探/null 嗅探者/null 嗅着/null 嗅神经/null 嗅觉/null 嗅银矿/null 嗅闻/null 嗉囊/null 嗉子/null 嗌嗌/null 嗑牙/null 嗑药/null 嗒声/null 嗒然/null 嗓子/null 嗓子眼/null 嗓门/null 嗓门儿/null 嗓音/null 嗔喝/null 嗔怒/null 嗔怪/null 嗔斥/null 嗔狂/null 嗔目/null 嗔着/null 嗔睨/null 嗔色/null 嗔视/null 嗔诟/null 嗖嗖/null 嗖地/null 嗖声/null 嗜好/null 嗜好成癖/null 嗜杀/null 嗜杀成性/null 嗜欲/null 嗜毒/null 嗜爱/null 嗜痂之癖/null 嗜痂成癖/null 嗜眠/null 嗜睡症/null 嗜碱性球/null 嗜碱性粒细胞/null 嗜血/null 嗜血杆菌/null 嗜贝/null 嗜酒/null 嗜酒如命/null 嗜酸乳干菌/null 嗜酸性球/null 嗜酸性粒细胞/null 嗜食/null 嗝儿/null 嗟悔/null 嗟悔无及/null 嗟来之食/null 嗡叫/null 嗡嗡/null 嗡嗡叫/null 嗡嗡响/null 嗡嗡声/null 嗡嗡弹/null 嗡嗡祖拉/null 嗡声/null 嗡子/null 嗣业/null 嗣位/null 嗣后/null 嗣响/null 嗣国/null 嗣子/null 嗣岁/null 嗣后/null 嗣徽/null 嗤之/null 嗤之以鼻/null 嗤嗤/null 嗤噗/null 嗤笑/null 嗥叫/null 嗦嗦/null 嗨哟/null 嗫呫/null 嗫嗫/null 嗫嚅/null 嗯哼/null 嗳气/null 嗳气吞酸/null 嗳气呕逆/null 嗳气腐臭/null 嗳气酸腐/null 嗳腐/null 嗳腐吞酸/null 嗳酸/null 嗵嗵鼓/null 嗷吠/null 嗷嗷/null 嗷嗷待哺/null 嗽口/null 嗽叭/null 嗽嗽声/null 嗾使/null 嘀咕/null 嘀嗒/null 嘀嘀/null 嘀嘀咕咕/null 嘀嘀声/null 嘀里嘟噜/null 嘁哩喀喳/null 嘁嘁喳喳/null 嘈嚷/null 嘈杂/null 嘈杂一群/null 嘈杂声/null 嘉义/null 嘉仁/null 嘉会/null 嘉兴/null 嘉兴地区/null 嘉剧/null 嘉勉/null 嘉善/null 嘉士伯/null 嘉奖/null 嘉定/null 嘉宾/null 嘉山/null 嘉山县/null 嘉峪关/null 嘉峪关城/null 嘉年华/null 嘉年华会/null 嘉庆/null 嘉应大学/null 嘉柏隆里/null 嘉礼/null 嘉祥/null 嘉禾/null 嘉肴/null 嘉荫/null 嘉言善行/null 嘉言懿行/null 嘉许/null 嘉谋善功/null 嘉酿/null 嘉陵/null 嘉陵区/null 嘉陵江/null 嘉鱼/null 嘉黎/null 嘌呤/null 嘎吱/null 嘎啦/null 嘎嗒/null 嘎嘎/null 嘎嘎响/null 嘎嘎小姐/null 嘎声/null 嘎子/null 嘎巴/null 嘎巴儿/null 嘎扎/null 嘎拉哈/null 嘎渣儿/null 嘎然/null 嘎登/null 嘘唏/null 嘘嘘/null 嘘声/null 嘘寒问暖/null 嘘枯吹生/null 嘘气/null 嘚啵/null 嘟哝/null 嘟哝不平/null 嘟嘟/null 嘟嘟响/null 嘟嘟哝哝/null 嘟嘟囔囔/null 嘟嘟车/null 嘟噜/null 嘟囔/null 嘟声/null 嘟着嘴/null 嘤嘤/null 嘤鸣求友/null 嘧啶/null 嘱人/null 嘱咐/null 嘱托/null 嘱目/null 嘲哳/null 嘲弄/null 嘲弄者/null 嘲热/null 嘲笑/null 嘲笑者/null 嘲笑著/null 嘲讽/null 嘲谑/null 嘲风咏月/null 嘲风弄月/null 嘲骂/null 嘴上/null 嘴严/null 嘴中/null 嘴乖/null 嘴儿/null 嘴唇/null 嘴头/null 嘴子/null 嘴对嘴/null 嘴尖/null 嘴巴/null 嘴巴子/null 嘴快/null 嘴快心直/null 嘴损/null 嘴松/null 嘴琴/null 嘴甜/null 嘴甜心苦/null 嘴皮/null 嘴皮子/null 嘴直/null 嘴硬/null 嘴稳/null 嘴笨/null 嘴紧/null 嘴脸/null 嘴角/null 嘴软/null 嘴边/null 嘴里/null 嘴钝/null 嘴馋/null 嘶叫/null 嘶吼/null 嘶哑/null 嘶哑声/null 嘶喊/null 嘶嘶/null 嘶嘶声/null 嘶声/null 嘶鸣/null 嘹亮/null 嘹望员/null 嘻哈/null 嘻嗝/null 嘻嘻/null 嘻嘻哈哈/null 嘻戏/null 嘻皮/null 嘻皮笑脸/null 嘻笑/null 嘿咻/null 嘿嘿/null 噍类/null 噍类无遗/null 噎住/null 噎嗝/null 噎噎/null 噔噔/null 噗哧/null 噗噜噜/null 噗浪/null 噗跳/null 噗通/null 噘嘴/null 噜嗦/null 噜声/null 噜苏/null 噢运会/null 噤口痢/null 噤声令/null 噤若寒蝉/null 器乐/null 器件/null 器具/null 器宇/null 器宇轩昂/null 器官/null 器官捐献者/null 器官移殖/null 器小易盈/null 器材/null 器械/null 器械体操/null 器物/null 器皿/null 器识/null 器质性/null 器重/null 器量/null 器量小/null 器鼠难投/null 噩噩/null 噩梦/null 噩耗/null 噩运/null 噪声/null 噪声污染/null 噪杂/null 噪音/null 噪音盒/null 噫嘻/null 噬咬/null 噬细胞/null 噬脐何及/null 噬脐无及/null 噬脐莫及/null 噬菌/null 噬菌体/null 噬食/null 噱头/null 噶举派/null 噶伦/null 噶厦/null 噶哈巫族/null 噶啷啷/null 噶喇/null 噶嗒/null 噶嘣/null 噶噶/null 噶尔/null 噶布伦/null 噶当派/null 噶拉/null 噶拉・多杰・仁波切/null 噶玛兰/null 噶玛兰族/null 噶隆/null 噶霏/null 噻吩/null 噻唑/null 噼啪/null 噼噼啪啪/null 嚆矢/null 嚎叫/null 嚎哭/null 嚎啕/null 嚎啕大哭/null 嚎着/null 嚏喷/null 嚏声/null 嚓嚓/null 嚣叫/null 嚣张/null 嚣张一时/null 嚣张气焰/null 嚣浮/null 嚷劈/null 嚷叫/null 嚷嚷/null 嚷声/null 嚷着/null 嚷闹/null 嚼墨喷纸/null 嚼子/null 嚼字/null 嚼烂/null 嚼碎/null 嚼舌/null 嚼舌头/null 嚼舌根/null 嚼蜡/null 嚼裹儿/null 囊中/null 囊中取物/null 囊中物/null 囊中羞涩/null 囊内/null 囊层/null 囊括/null 囊揣/null 囊泡/null 囊炎/null 囊状/null 囊生/null 囊空如洗/null 囊肿/null 囊胚/null 囊膪/null 囊萤积雪/null 囊虫/null 囊谦/null 囒吨/null 囒哰/null 囔囔/null 囔着/null 囗渴/null 囚人/null 囚室/null 囚居/null 囚徒/null 囚房/null 囚牢/null 囚犯/null 囚禁/null 囚笼/null 囚衣/null 囚车/null 囚首垢面/null 四一二/null 四一二事变/null 四一二反革命政变/null 四一二惨案/null 四万/null 四下/null 四下里/null 四不像/null 四不拗六/null 四不象/null 四世/null 四世同堂/null 四个/null 四个人/null 四个坚持/null 四个现代化/null 四中/null 四中全会/null 四乙基铅中毒/null 四乡/null 四书/null 四书集注/null 四五/null 四五万/null 四五十/null 四五千/null 四五百/null 四亭八当/null 四人/null 四人帮/null 四亿/null 四仙桌/null 四代/null 四仰八叉/null 四件/null 四价/null 四份/null 四伏/null 四会/null 四位/null 四体/null 四体不勤/null 四体不勤无谷不分/null 四倍/null 四元数/null 四八/null 四六体/null 四六文/null 四六风/null 四分/null 四分之一/null 四分之三/null 四分之二/null 四分五裂/null 四分仪/null 四分卫/null 四分法/null 四分音符/null 四则/null 四则运算/null 四化/null 四化大业/null 四化建设/null 四十/null 四十一/null 四十七/null 四十万/null 四十三/null 四十个/null 四十九/null 四十二/null 四十二章经/null 四十五/null 四十人/null 四十倍/null 四十八/null 四十六/null 四十四/null 四十岁/null 四千/null 四千万/null 四叠体/null 四叶草/null 四号/null 四号电池/null 四合房/null 四合院/null 四名/null 四周/null 四周围/null 四周年/null 四呼/null 四回/null 四围/null 四国/null 四国岛/null 四国犬/null 四圣谛/null 四块/null 四境/null 四壁/null 四壁萧然/null 四声/null 四处/null 四处奔波/null 四处活动/null 四外/null 四大/null 四大佛教名山/null 四大发明/null 四大名著/null 四大天王/null 四大皆空/null 四大盆地/null 四大石窟/null 四大美女/null 四大须生/null 四天/null 四头/null 四头肌/null 四套/null 四好运动/null 四子王/null 四孔/null 四季/null 四季如春/null 四季度/null 四季海棠/null 四季豆/null 四季豆腐/null 四害/null 四家/null 四射/null 四小龙/null 四层/null 四届/null 四川外国语大学/null 四川大地震/null 四川大学/null 四川日报/null 四川盆地/null 四幕/null 四平/null 四平八稳/null 四平地区/null 四年/null 四库/null 四库全书/null 四开/null 四强/null 四德/null 四德三从/null 四成/null 四战之国/null 四战之地/null 四手类/null 四拇指/null 四散/null 四散奔逃/null 四方/null 四四方方/null 四方八面/null 四方区/null 四方台/null 四方台区/null 四方响应/null 四方步/null 四方脸/null 四旁/null 四日/null 四日市/null 四日市市/null 四旧/null 四旬/null 四旬斋/null 四旬节/null 四时/null 四时八节/null 四时气备/null 四星/null 四更/null 四月/null 四月份/null 四有/null 四条/null 四极管/null 四楼/null 四次/null 四次幂/null 四段/null 四氟化硅/null 四氟化铀/null 四氢大麻酚/null 四氧/null 四氯乙烯/null 四氯化碳/null 四海/null 四海为家/null 四海之内皆兄弟/null 四海升平/null 四海承风/null 四海生平/null 四海皆准/null 四海飘零/null 四海鼎沸/null 四清/null 四清六活/null 四清运动/null 四湖/null 四湖乡/null 四溅/null 四灵/null 四点/null 四物汤/null 四环/null 四环素/null 四百/null 四百万/null 四百年/null 四碳糖/null 四神丸/null 四种/null 四类分子/null 四级/null 四级士官/null 四组/null 四维/null 四维时空/null 四维空间/null 四联/null 四联单/null 四肢/null 四胡/null 四脚/null 四脚兽/null 四脚朝天/null 四脚蛇/null 四至/null 四舍五入/null 四行/null 四行诗/null 四角/null 四角号码/null 四角帽/null 四角形/null 四角柱体/null 四角裤/null 四言诗/null 四诊/null 四谛/null 四象/null 四起/null 四足/null 四路/null 四轮/null 四轮马车/null 四轮驱动/null 四边/null 四边形/null 四近/null 四通/null 四通五达/null 四通八达/null 四邻/null 四邻八舍/null 四郊/null 四郊多垒/null 四部/null 四部曲/null 四重唱/null 四重奏/null 四野/null 四门轿车/null 四队/null 四面/null 四面体/null 四面八方/null 四面楚歌/null 四音/null 四音节/null 四页/null 四项/null 四项基本原则/null 四顾/null 四马攒蹄/null 回不来/null 回丝/null 回主页/null 回乡/null 回乡务农/null 回了/null 回事/null 回交/null 回京/null 回佣/null 回信/null 回信地址/null 回修/null 回充/null 回光/null 回光反照/null 回光返照/null 回光镜/null 回内地/null 回冲/null 回击/null 回击者/null 回函/null 回到/null 回动/null 回升/null 回单/null 回单儿/null 回历/null 回原/null 回去/null 回口/null 回合/null 回吼/null 回味/null 回味无穷/null 回咬/null 回响/null 回嗔作喜/null 回嘴/null 回回/null 回回青/null 回国/null 回城/null 回填/null 回墨印/null 回声/null 回声定位/null 回复/null 回天/null 回天之力/null 回天乏术/null 回头/null 回头人/null 回头是岸/null 回头见/null 回头路/null 回奉/null 回娘家/null 回家/null 回山倒海/null 回师/null 回帐/null 回帖/null 回应/null 回廊/null 回弹/null 回归/null 回归带/null 回归年/null 回归热/null 回归祖国/null 回归线/null 回形针/null 回心转意/null 回忆/null 回忆录/null 回忆起/null 回想/null 回戏/null 回手/null 回扣/null 回执/null 回扫/null 回折/null 回折格子/null 回护/null 回报/null 回拜/null 回拨/null 回挪/null 回描/null 回援/null 回收/null 回收价值/null 回收率/null 回收站/null 回放/null 回教/null 回教徒/null 回敬/null 回文/null 回文织锦/null 回旋/null 回旋余地/null 回旋加速器/null 回旋曲/null 回旋状/null 回春/null 回暖/null 回条/null 回来/null 回柱/null 回棋/null 回民/null 回民区/null 回水/null 回波/null 回流/null 回游/null 回溯/null 回潮/null 回潮率/null 回火/null 回炉/null 回煞/null 回环/null 回球/null 回生/null 回生起死/null 回电/null 回目/null 回眸/null 回瞅/null 回礼/null 回禀/null 回禄/null 回禄之灾/null 回程/null 回稳/null 回空/null 回笼/null 回答/null 回答者/null 回答说/null 回纥/null 回纹针/null 回绕/null 回绝/null 回翔/null 回老家/null 回耗/null 回肠/null 回肠九转/null 回肠伤气/null 回肠寸断/null 回肠荡气/null 回航/null 回良玉/null 回茬/null 回荡/null 回落/null 回覆/null 回见/null 回视/null 回访/null 回话/null 回请/null 回赎/null 回跌/null 回跑/null 回路/null 回跳/null 回身/null 回车/null 回车键/null 回转/null 回转仪/null 回转半径/null 回转寿司/null 回转窑/null 回转轴/null 回过/null 回过头来/null 回返/null 回还/null 回退/null 回送/null 回避/null 回邮/null 回邮信封/null 回采/null 回銮/null 回销/null 回锅/null 回锅油/null 回锅肉/null 回门/null 回青/null 回音/null 回页首/null 回顾/null 回顾历史/null 回顾展/null 回风/null 回飞/null 回馈/null 回首/null 回首往事/null 回首页/null 回马枪/null 回驳/null 回骂/null 回鹘/null 回黄转绿/null 囟脑门/null 囟门/null 因为/null 因为种种原因/null 因之/null 因事/null 因事制宜/null 因于/null 因人/null 因人制宜/null 因人成事/null 因人而异/null 因何/null 因使/null 因公/null 因公假私/null 因公殉职/null 因公行私/null 因其/null 因利乘便/null 因势利导/null 因厄/null 因受/null 因变数/null 因变量/null 因名额有限/null 因噎废食/null 因在/null 因地制宜/null 因如此/null 因子/null 因子型/null 因孕而婚/null 因小失大/null 因小而失大/null 因小见大/null 因应/null 因式/null 因式分解/null 因循/null 因循坐误/null 因循守旧/null 因恐/null 因情形/null 因我/null 因所/null 因故/null 因敌取资/null 因数/null 因斯布鲁克/null 因时/null 因时制宜/null 因明/null 因材施教/null 因条件限制/null 因果/null 因果关系/null 因果律/null 因果报应/null 因果联系/null 因树为屋/null 因次/null 因此/null 因此当/null 因爱成恨/null 因父之名/null 因特网/null 因特网提供商/null 因特网联通/null 因由/null 因病/null 因祸为福/null 因祸得福/null 因素/null 因纽特/null 因纽特人/null 因缘/null 因而/null 因被/null 因袭/null 因购买/null 因陀罗/null 因陋就简/null 因难见巧/null 因风吹火/null 囡囡/null 团中央/null 团代会/null 团伙/null 团似/null 团体/null 团体冠军/null 团体操/null 团体行/null 团体赛/null 团务工作/null 团员/null 团团/null 团团围住/null 团团转/null 团圆/null 团圆节/null 团块/null 团头鲂/null 团契/null 团委/null 团子/null 团市委/null 团年/null 团弄/null 团徽/null 团扇/null 团拜/null 团支部/null 团旗/null 团日/null 团服/null 团校/null 团省委/null 团矿/null 团章/null 团籍/null 团粉/null 团粒/null 团级/null 团练/null 团组织/null 团结/null 团结一致/null 团结互助/null 团结合作/null 团结就是力量/null 团结工会/null 团职/null 团聚/null 团脐/null 团藻/null 团评/null 团课/null 团购/null 团费/null 团部/null 团长/null 团队/null 团队精神/null 团音/null 团风/null 团鱼/null 囤积/null 囤积居奇/null 囤积者/null 囤聚/null 囫囵/null 囫囵吞下/null 囫囵吞枣/null 园丁/null 园主/null 园内/null 园凳/null 园区/null 园口/null 园囿/null 园圃/null 园圈/null 园地/null 园外/null 园子/null 园寂/null 园弧/null 园形/null 园数/null 园木/null 园林/null 园桌/null 园桶/null 园田/null 园笼/null 园艺/null 园艺学/null 园艺家/null 园规/null 园钢/null 园长/null 困乏/null 困于/null 困人/null 困住/null 困倦/null 困兽/null 困兽犹斗/null 困厄/null 困境/null 困处/null 困守/null 困局/null 困心衡虑/null 困恼/null 困惑/null 困惑不解/null 困惫/null 困扰/null 困时/null 困死/null 困知勉行/null 困窘/null 困绕/null 困苦/null 困迫/null 困镜/null 困难/null 困难在于/null 困难户/null 困难重重/null 困顿/null 囱门/null 围了/null 围产/null 围以/null 围住/null 围作/null 围兜/null 围内/null 围击/null 围剿/null 围嘴/null 围嘴儿/null 围困/null 围圈/null 围在/null 围地/null 围场/null 围场县/null 围坐/null 围垦/null 围城/null 围城打援/null 围堰/null 围堵/null 围墙/null 围子/null 围屏/null 围岩/null 围巾/null 围心腔/null 围成/null 围护/null 围拢/null 围挡/null 围捕/null 围擒/null 围攻/null 围攻者/null 围栏/null 围桌/null 围棋/null 围歼/null 围炉/null 围点打援/null 围猎/null 围盘/null 围着/null 围笼/null 围篱/null 围绕/null 围绕物/null 围网/null 围脖/null 围脖儿/null 围腰布/null 围腰带/null 围膝毯/null 围著/null 围补/null 围裙/null 围裹/null 围观/null 围起/null 围魏救赵/null 囹圄/null 囹圉/null 固件/null 固体/null 固体力学/null 固体性/null 固体溶体/null 固体热容激光器/null 固体燃料/null 固体物/null 固体物理/null 固体物理学/null 固体物质/null 固体电路/null 固化/null 固化剂/null 固原/null 固原地区/null 固堤/null 固始/null 固守/null 固安/null 固定/null 固定器/null 固定收入/null 固定汇率/null 固定点/null 固定物/null 固定电话/null 固定虚拟连接/null 固定词组/null 固定资产/null 固定资本/null 固定资金/null 固形物/null 固态/null 固执/null 固执己见/null 固执者/null 固持/null 固持己见/null 固有/null 固有名词/null 固有性/null 固有振荡/null 固有词/null 固有频率/null 固本/null 固步自封/null 固氮/null 固氮菌/null 固沙/null 固沙林/null 固溶体/null 固然/null 固用/null 固着/null 固结/null 固网电信/null 固置/null 固色剂/null 固若金汤/null 固醇/null 固醇类/null 固镇/null 固陋/null 国与国/null 国专/null 国丧/null 国中/null 国中之国/null 国乐/null 国书/null 国事/null 国事访问/null 国交/null 国产/null 国产化/null 国产机/null 国人/null 国企/null 国优/null 国会/null 国会制/null 国会大厦/null 国会山/null 国会议员/null 国会议长/null 国体/null 国侦局/null 国债/null 国光/null 国公/null 国共/null 国共两党/null 国共关系/null 国共内战/null 国共合作/null 国共和谈/null 国内/null 国内先进水平/null 国内外/null 国内市场/null 国内形势/null 国内战争/null 国内政策/null 国内法/null 国内生产总值/null 国内线/null 国内航线/null 国内贸易/null 国内革命战争/null 国军/null 国别/null 国别史/null 国力/null 国办/null 国务/null 国务会议/null 国务卿/null 国务委员/null 国务总理/null 国务次卿/null 国务部长/null 国务长官/null 国务院/null 国务院办公厅/null 国务院台湾事务办公室/null 国务院国有资产监督管理委员会/null 国务院新闻办公室/null 国务院法制局/null 国务院港澳事务办公室/null 国势/null 国势日衰/null 国医/null 国历/null 国发/null 国台办/null 国史/null 国号/null 国名/null 国君/null 国国/null 国土/null 国土安全/null 国土安全局/null 国土安全部/null 国境/null 国境管理/null 国境线/null 国士无双/null 国外/null 国外内/null 国外市场/null 国外经验/null 国大/null 国大代表/null 国大党/null 国奥会/null 国姓/null 国姓乡/null 国威/null 国子监/null 国字/null 国字脸/null 国学/null 国安局/null 国安部/null 国宝/null 国宴/null 国家/null 国家一级保护/null 国家主义/null 国家代码/null 国家体委/null 国家元首/null 国家公园/null 国家兴亡/null 国家军品贸易局/null 国家军品贸易管理委员会/null 国家利益/null 国家制度/null 国家副主席/null 国家化/null 国家发展和改革委员会/null 国家发展改革委/null 国家发展计划委员会/null 国家图书馆/null 国家地震局/null 国家垄断资本主义/null 国家外汇管理局/null 国家宇航和太空署/null 国家安全/null 国家安全局/null 国家安全部/null 国家政策/null 国家文物委员会/null 国家文物局/null 国家文物鉴定委员会/null 国家旅游度假区/null 国家机关/null 国家机器/null 国家机构/null 国家标准中文交换码/null 国家标准化管理委员会/null 国家标准码/null 国家汉办/null 国家法/null 国家海洋局/null 国家火山公园/null 国家环保总局/null 国家电力监管委员会/null 国家电网公司/null 国家留学基金管理委员会/null 国家社会主义/null 国家管理基金/null 国家级/null 国家经济贸易委员会/null 国家结构/null 国家统计局/null 国家航天局/null 国家航空公司/null 国家裁判/null 国家计划委员会/null 国家计委/null 国家质量监督检验检疫总局/null 国家资本主义/null 国家重点学科/null 国家重点实验室/null 国家队/null 国家食品药品监督管理局/null 国宾/null 国宾馆/null 国富/null 国富兵强/null 国富民安/null 国富论/null 国将不国/null 国小/null 国尔忘家/null 国币/null 国师/null 国帑/null 国庆日/null 国库/null 国库券/null 国府/null 国度/null 国式/null 国弱民穷/null 国后/null 国徽/null 国情/null 国情咨文/null 国戚/null 国手/null 国技/null 国政/null 国故/null 国教/null 国文/null 国新办/null 国旅/null 国旗/null 国是/null 国有/null 国有企业/null 国有公司/null 国有化/null 国有资产监督管理委员会/null 国本/null 国术/null 国柄/null 国标/null 国标码/null 国标舞/null 国格/null 国棋/null 国槐/null 国槐树/null 国歌/null 国步艰难/null 国殇/null 国民/null 国民中学/null 国民党/null 国民党军队/null 国民军/null 国民大会/null 国民小学/null 国民性/null 国民总产值/null 国民总收入/null 国民收入/null 国民政府/null 国民教育/null 国民生产总值/null 国民经济/null 国民经济计划/null 国民警卫队/null 国民议会/null 国民革命军/null 国法/null 国泰/null 国泰民安/null 国泰航空/null 国父/null 国王/null 国玺/null 国用/null 国画/null 国界/null 国界法/null 国界线/null 国破家亡/null 国祭/null 国税/null 国立/null 国立台北科技大学/null 国立台湾技术大学/null 国立显忠院/null 国立首尔大学/null 国策/null 国策顾问/null 国籍/null 国粹/null 国统区/null 国美/null 国美电器/null 国老/null 国耻/null 国联/null 国脚/null 国舅/null 国航/null 国色/null 国色天姿/null 国色天香/null 国花/null 国药/null 国菜/null 国营/null 国营企业/null 国营农场/null 国营经济/null 国葬/null 国蠹/null 国计/null 国计民生/null 国语/null 国语注音符号第一式/null 国语罗马字/null 国货/null 国贸/null 国贼/null 国资委/null 国运/null 国道/null 国都/null 国门/null 国队/null 国防/null 国防军/null 国防利益/null 国防工业/null 国防现代化/null 国防科工委/null 国防科技工业委员会/null 国防语言学院/null 国防费/null 国防部长/null 国防预算/null 国际/null 国际上/null 国际主义/null 国际互联网络/null 国际互连网/null 国际人权标准/null 国际仲裁/null 国际体操联合会/null 国际先驱论坛报/null 国际公制/null 国际公法/null 国际公认/null 国际共产主义运动/null 国际共管/null 国际关系/null 国际关系学院/null 国际刑事警察组织/null 国际刑警组织/null 国际劳工组织/null 国际化/null 国际医疗中心/null 国际协会/null 国际单位/null 国际单位制/null 国际原子能机构/null 国际原子能结构/null 国际和平基金会/null 国际商业机器/null 国际商会/null 国际垄断同盟/null 国际外交/null 国际大赦/null 国际太空站/null 国际奥委会/null 国际奥林匹克委员会/null 国际媒体/null 国际工人协会/null 国际性/null 国际惯例/null 国际战争罪法庭/null 国际收支/null 国际数学联盟/null 国际文传通讯社/null 国际新闻/null 国际日期变更线/null 国际机场/null 国际标准/null 国际标准化组织/null 国际棋联/null 国际歌/null 国际民航组织/null 国际民间组织/null 国际法/null 国际法庭/null 国际法院/null 国际海事组织/null 国际清算银行/null 国际特赦/null 国际特赦组织/null 国际电信联盟/null 国际电报电话咨询委员会/null 国际电话/null 国际电话电报谘询委员会/null 国际社会/null 国际私法/null 国际笔会/null 国际米兰/null 国际米兰足球俱乐部/null 国际米兰队/null 国际红十字大会/null 国际级/null 国际纵队/null 国际组织/null 国际网络/null 国际网络公司/null 国际网络门户/null 国际羽毛球联合会/null 国际联盟/null 国际舞台/null 国际航空联合会/null 国际航空运输协会/null 国际裁判/null 国际见闻/null 国际象棋/null 国际货币基金/null 国际货币基金组织/null 国际货运代理/null 国际贸易/null 国际足球联合会/null 国际足联/null 国际跳棋/null 国际金融公司/null 国际间/null 国际音标/null 国际驾照/null 国难/null 国音/null 国风/null 国魂/null 国鸟/null 图三/null 图上/null 图上作业/null 图中/null 图为/null 图为不轨/null 图书/null 图书事业/null 图书典藏/null 图书分类/null 图书分类法/null 图书发行/null 图书学/null 图书室/null 图书工作/null 图书目录/null 图书管理/null 图书管理员/null 图书编目/null 图书装修/null 图书评介/null 图书资料/null 图书资料馆/null 图书采购/null 图书鉴定/null 图书馆/null 图书馆员/null 图书馆学/null 图书馆管理/null 图二/null 图们/null 图们江/null 图例/null 图像/null 图像互换格式/null 图像处理/null 图像用户介面/null 图元/null 图克/null 图册/null 图列/null 图利/null 图制/null 图卢兹/null 图卢斯/null 图块/null 图坦卡门/null 图存/null 图学/null 图尔/null 图尔库/null 图库/null 图式/null 图录/null 图形/null 图形卡/null 图形用户界面/null 图形界面/null 图快/null 图恩/null 图报/null 图文/null 图文并茂/null 图文框/null 图文集/null 图景/null 图木舒克/null 图板/null 图林根/null 图标/null 图样/null 图案/null 图档/null 图法/null 图波列夫/null 图灵/null 图灵奖/null 图灵测试/null 图片/null 图片展览/null 图片报/null 图版/null 图瓦卢/null 图画/null 图画书/null 图画文字/null 图画钉/null 图示/null 图穷匕见/null 图穷匕首见/null 图章/null 图符/null 图签/null 图籍/null 图纸/null 图腾/null 图腾崇拜/null 图表/null 图西族/null 图解/null 图解者/null 图解说明/null 图记/null 图论/null 图说/null 图谋/null 图谋不轨/null 图谱/null 图谶/null 图象/null 图财害命/null 图财致命/null 图辑/null 图鉴/null 图钉/null 图门江/null 图阿雷格/null 图集/null 图面/null 图饰/null 囿于/null 囿于成见/null 圆丘般/null 圆光/null 圆全/null 圆函数/null 圆凿方枘/null 圆口纲脊椎动物/null 圆台/null 圆号/null 圆周/null 圆周率/null 圆周角/null 圆唇元音/null 圆圆/null 圆圈/null 圆场/null 圆型/null 圆堡/null 圆头棒/null 圆子/null 圆孔/null 圆寂/null 圆屋顶/null 圆度/null 圆弧/null 圆弧规/null 圆形/null 圆形动物/null 圆形木材/null 圆形物/null 圆形罩/null 圆形面包/null 圆径/null 圆心/null 圆心角/null 圆成/null 圆房/null 圆括号/null 圆括弧/null 圆拱/null 圆明园/null 圆月/null 圆木/null 圆木材/null 圆材/null 圆柏/null 圆柱/null 圆柱体/null 圆柱形/null 圆柱状/null 圆柱面/null 圆桌/null 圆桌会议/null 圆桌面/null 圆桶/null 圆梦/null 圆浑/null 圆润/null 圆溜溜/null 圆滑/null 圆滚滚/null 圆满/null 圆满完成/null 圆满完成任务/null 圆满成功/null 圆满解决/null 圆点/null 圆烛台/null 圆熟/null 圆片/null 圆状/null 圆环/null 圆环图/null 圆环面/null 圆珠/null 圆珠形离子交换剂/null 圆珠笔/null 圆球/null 圆瑛/null 圆白菜/null 圆的/null 圆盖/null 圆盘/null 圆盘耙/null 圆盾形/null 圆睁/null 圆石头/null 圆石子/null 圆窗/null 圆笼/null 圆筒/null 圆筒形/null 圆胖/null 圆脸/null 圆腹鲱/null 圆舞/null 圆舞曲/null 圆规/null 圆规座/null 圆角/null 圆谎/null 圆起/null 圆轨道/null 圆通/null 圆钢/null 圆锥/null 圆锥体/null 圆锥台/null 圆锥形/null 圆锥曲线/null 圆锥状/null 圆锥花序/null 圆锯/null 圆雕/null 圆面饼/null 圆顶/null 圆顶阁/null 圆颅方趾/null 圆领/null 圆领衫/null 圆饼/null 圆首方足/null 圆鼓鼓/null 圈上/null 圈之/null 圈住/null 圈儿/null 圈内/null 圈占/null 圈圈/null 圈圈点点/null 圈地/null 圈地运动/null 圈外/null 圈夺/null 圈套/null 圈子/null 圈拢/null 圈数/null 圈椅/null 圈点/null 圈状物/null 圈环/null 圈结/null 圈肥/null 圈起/null 圈进/null 圈阅/null 圈饼/null 圉人/null 圉限/null 圊肥/null 土专家/null 土丘/null 土中/null 土产/null 土人/null 土仪/null 土伦/null 土偶/null 土到不行/null 土制/null 土办法/null 土包子/null 土匪/null 土卫二/null 土卫六/null 土司/null 土司制度/null 土味/null 土围子/null 土地/null 土地公/null 土地利用规划/null 土地庙/null 土地改革/null 土地法/null 土地税/null 土地证/null 土地资源/null 土地革命/null 土地革命战争/null 土坎/null 土坎儿/null 土坑/null 土块/null 土坝/null 土坡/null 土坯/null 土埂/null 土城/null 土城市/null 土堆/null 土墙/null 土墩/null 土壤/null 土壤型/null 土壤学/null 土壤细流/null 土头土脑/null 土家/null 土尔其斯坦/null 土层/null 土山/null 土岗/null 土崩瓦解/null 土崩鱼烂/null 土布/null 土库/null 土库曼/null 土库曼人/null 土库曼斯坦/null 土库镇/null 土建/null 土性/null 土戏/null 土拉弗氏菌/null 土拨鼠/null 土改/null 土政策/null 土方/null 土星/null 土曜日/null 土木/null 土木工程/null 土木建筑/null 土木形骸/null 土木身/null 土木香/null 土桑/null 土棍/null 土楼/null 土模/null 土气/null 土沥青/null 土法/null 土法上马/null 土洋并举/null 土洋结合/null 土温/null 土灰色/null 土炕/null 土牛/null 土牛木马/null 土牢/null 土物/null 土特/null 土特产/null 土特品/null 土狗/null 土狗子/null 土狼/null 土猪/null 土生/null 土生土长/null 土皇帝/null 土石/null 土石方/null 土石流/null 土矿/null 土神/null 土窑/null 土窖/null 土管/null 土籍/null 土粉子/null 土粪/null 土纸/null 土耳其/null 土耳其人/null 土耳其旋转烤肉/null 土耳其语/null 土腔/null 土腥/null 土色/null 土茴香/null 土药/null 土著/null 土著人/null 土著居民/null 土葬/null 土蚕/null 土蜂/null 土蝗/null 土话/null 土语/null 土谷祠/null 土豆/null 土豆丝/null 土豆泥/null 土豆网/null 土豚/null 土豪/null 土豪劣绅/null 土财主/null 土货/null 土质/null 土邦/null 土里土气/null 土门/null 土阶茅屋/null 土阶茅茨/null 土陶/null 土霉素/null 土霸/null 土音/null 土风舞/null 土香/null 土魠鱼/null 土鲮鱼/null 土鳖/null 土鸡瓦犬/null 土黄/null 土黄色/null 土龙刍狗/null 圣上/null 圣主/null 圣乐/null 圣乔治/null 圣事/null 圣人/null 圣代/null 圣休圣绪/null 圣传/null 圣伯多禄大殿/null 圣但尼/null 圣体/null 圣体节/null 圣体血/null 圣保罗/null 圣俸/null 圣像/null 圣僧/null 圣克鲁斯/null 圣克鲁斯岛/null 圣典/null 圣凯瑟琳/null 圣劳伦斯河/null 圣化/null 圣卢西亚/null 圣卢西亚岛/null 圣君/null 圣哈辛托/null 圣哉经/null 圣哲/null 圣器室/null 圣地/null 圣地亚哥/null 圣地牙哥/null 圣坛/null 圣坛所/null 圣城/null 圣基茨和尼维斯/null 圣堂/null 圣塔伦/null 圣墓/null 圣多明各/null 圣多明哥/null 圣多美/null 圣多美和普林西比/null 圣大非/null 圣奥古斯丁/null 圣女/null 圣女果/null 圣女贞德/null 圣婴/null 圣子/null 圣安地列斯断层/null 圣安多尼堂区/null 圣安德列斯断层/null 圣安德鲁/null 圣帕特里克/null 圣庙/null 圣役/null 圣彼得/null 圣彼得堡/null 圣徒/null 圣徒传/null 圣徒般/null 圣德克旭贝里/null 圣德太子/null 圣心/null 圣心节/null 圣恩/null 圣战/null 圣手/null 圣教/null 圣文森和格林纳丁/null 圣文森特和格林纳丁斯/null 圣旨/null 圣明/null 圣曲/null 圣朝/null 圣本/null 圣杯/null 圣歌/null 圣殿/null 圣母/null 圣母升天节/null 圣母峰/null 圣母教堂/null 圣母玛利亚/null 圣水/null 圣水盆/null 圣洁/null 圣洗/null 圣潘克勒斯站/null 圣火/null 圣灰瞻礼日/null 圣灰节/null 圣灵/null 圣灵降临/null 圣烛节/null 圣父/null 圣物/null 圣王/null 圣皮埃尔和密克隆/null 圣盘/null 圣礼/null 圣祖/null 圣神/null 圣神降临/null 圣神降临周/null 圣索非亚/null 圣索非亚大教堂/null 圣约/null 圣约瑟夫/null 圣约翰/null 圣约翰斯/null 圣纳帕/null 圣经/null 圣经典故/null 圣经卦/null 圣经外传/null 圣经段落/null 圣经神学/null 圣经贤传/null 圣经贤转/null 圣者/null 圣职/null 圣职者/null 圣胎/null 圣药/null 圣荷西/null 圣菲/null 圣萨尔瓦多/null 圣衣/null 圣训/null 圣诗/null 圣诞/null 圣诞前夕/null 圣诞卡/null 圣诞岛/null 圣诞快乐/null 圣诞树/null 圣诞红/null 圣诞老人/null 圣诞花/null 圣诞颂/null 圣谕/null 圣贤/null 圣贤书/null 圣赫勒拿/null 圣赫勒拿岛/null 圣路易斯/null 圣躬/null 圣迹/null 圣雄/null 圣餐/null 圣餐台/null 圣马利亚/null 圣马利诺/null 圣马力诺/null 圣马洛/null 圣骨/null 圣骨匣/null 圣骨箱/null 在一般情况下/null 在一起/null 在一边/null 在上/null 在上文/null 在上游/null 在上面/null 在下/null 在下列/null 在下文/null 在下方/null 在下边/null 在下面/null 在不久的将来/null 在与/null 在世/null 在世界上/null 在世界范围内/null 在业/null 在东方/null 在中心/null 在中间/null 在乎/null 在于/null 在京/null 在人矮檐下/null 在什么/null 在他/null 在他处/null 在任/null 在任何情况下/null 在会谈中/null 在传/null 在位/null 在位时代/null 在何处/null 在作/null 在使/null 在做/null 在先/null 在先前/null 在全国范围内/null 在其中/null 在内/null 在册/null 在初期/null 在别处/null 在到/null 在制/null 在制品/null 在前/null 在前于/null 在前头/null 在前方/null 在前部/null 在前面/null 在劫难逃/null 在半途/null 在华/null 在印刷/null 在即/null 在各方面/null 在同等条件下/null 在后/null 在后面/null 在周围/null 在周末/null 在哪/null 在国内外/null 在国外/null 在国际上/null 在在/null 在地上/null 在地下/null 在地愿做连理枝/null 在场/null 在城郊/null 在外/null 在外国/null 在外面/null 在大多数情况下/null 在天之灵/null 在天愿做比翼鸟/null 在头上/null 在她/null 在学/null 在官言官/null 在室内/null 在宫中/null 在家/null 在家出家/null 在密切注意/null 在将来/null 在屋里/null 在山麓/null 在岗/null 在工作上/null 在工作中/null 在左舷/null 在帮/null 在平日/null 在床/null 在床上/null 在底下/null 在座/null 在建/null 在建设中/null 在当/null 在彼方/null 在很大程度上/null 在很短的时间内/null 在心/null 在必/null 在思想上/null 在想/null 在意/null 在我心中/null 在我看/null 在我看来/null 在户内/null 在户外/null 在所不惜/null 在所不计/null 在所不辞/null 在所难免/null 在手边/null 在打/null 在技术上/null 在押/null 在押犯/null 在挤/null 在握/null 在改革中/null 在教/null 在新形势下/null 在新的一年里/null 在旁/null 在日常工作中/null 在日常生活中/null 在时/null 在春季/null 在晚上/null 在暗中/null 在最/null 在望/null 在朝/null 在本世纪内/null 在本国/null 在校/null 在校学生/null 在校生/null 在案/null 在次页/null 在此/null 在此中/null 在此之前/null 在此之后/null 在此之际/null 在此后/null 在此基础上/null 在此存照/null 在此期间/null 在水上/null 在水下/null 在沉/null 在海上/null 在涨/null 在深处/null 在深夜/null 在演/null 在特定情况下/null 在特殊情况下/null 在理/null 在理会/null 在生活上/null 在生活中/null 在用/null 在百忙之中/null 在的/null 在真空中/null 在眼前/null 在短期内/null 在短短的几年之内/null 在窗/null 在第十/null 在等/null 在线/null 在线造词/null 在组织上/null 在经济上/null 在给/null 在编/null 在编人员/null 在群众中/null 在职/null 在职人员/null 在职干部/null 在职者/null 在职训练/null 在舷侧/null 在船上/null 在船尾/null 在行/null 在被/null 在西南/null 在要/null 在讲话中/null 在诉讼期间/null 在说/null 在读/null 在调/null 在谈/null 在身/null 在身边/null 在过/null 在近旁/null 在这之前/null 在这期间/null 在逃/null 在逃犯/null 在途/null 在逗/null 在通常情况下/null 在那/null 在那儿/null 在野/null 在野党/null 在野外/null 在附近/null 在陈之厄/null 在飞/null 在高处/null 圩地/null 圩场/null 圩垸/null 圩子/null 圩田/null 圪垯/null 圪节/null 圪蹴/null 圪针/null 圬工/null 圭亚那/null 圭臬/null 圭表/null 地丁/null 地三鲜/null 地上/null 地上河/null 地上茎/null 地下/null 地下修文/null 地下党/null 地下室/null 地下工程施工/null 地下斗争/null 地下核爆炸/null 地下核试验/null 地下水/null 地下海/null 地下组织/null 地下茎/null 地下通信/null 地下通道/null 地下道/null 地下铁路/null 地下铁道/null 地丑德齐/null 地中/null 地中海/null 地中海地区/null 地中海形贫血/null 地中海气候/null 地中海贫血/null 地主/null 地主之谊/null 地主家庭/null 地主阶级/null 地久天长/null 地产/null 地产大亨/null 地亩/null 地价/null 地位/null 地侧/null 地保/null 地做/null 地儿/null 地光/null 地利/null 地利人和/null 地力/null 地动/null 地动仪/null 地动山摇/null 地势/null 地勤/null 地勤人员/null 地区/null 地区冲突/null 地区差价/null 地区开发/null 地区性/null 地区法院/null 地区经济/null 地区霸权主义/null 地压/null 地台/null 地史/null 地名/null 地名学/null 地名录/null 地响/null 地图/null 地图册/null 地图制图学/null 地图学/null 地图投影/null 地图管理/null 地图集/null 地地道道/null 地址/null 地址的转换/null 地址解析协议/null 地块/null 地坛/null 地垄/null 地域/null 地域性/null 地基/null 地堑/null 地堡/null 地塄/null 地塞米松/null 地声/null 地壳/null 地壳运动/null 地处/null 地大物博/null 地头/null 地头蛇/null 地契/null 地委/null 地委书记/null 地学/null 地安门/null 地宫/null 地富反坏/null 地富反坏右/null 地对空/null 地对空导弹/null 地层/null 地层学/null 地岬/null 地峡/null 地崩山摧/null 地市/null 地帛/null 地带/null 地幔/null 地平/null 地平天成/null 地平线/null 地平线上/null 地广人稀/null 地底/null 地府/null 地形/null 地形图/null 地形学/null 地役权/null 地心/null 地心吸力/null 地心引力/null 地心纬度/null 地心说/null 地志/null 地拉那/null 地摊/null 地支/null 地政/null 地政学/null 地文学/null 地方/null 地方主义/null 地方停车/null 地方党委/null 地方军/null 地方化/null 地方官/null 地方官职位/null 地方志/null 地方性/null 地方性斑疹伤寒/null 地方性植物/null 地方戏/null 地方时/null 地方武装/null 地方民族主义/null 地方法院/null 地方病/null 地方税/null 地方自治/null 地方部队/null 地景/null 地权/null 地板/null 地极/null 地标/null 地栗/null 地核/null 地梨/null 地检署/null 地榜/null 地槽/null 地步/null 地段/null 地毡/null 地毯/null 地毯拖鞋/null 地水/null 地沟/null 地沟油/null 地波/null 地洞/null 地浅/null 地温/null 地温表/null 地滑/null 地滚球/null 地漏/null 地灵/null 地灵人杰/null 地炉/null 地点/null 地热/null 地热发电/null 地热发电厂/null 地热学/null 地热电站/null 地热能/null 地热资源/null 地牢/null 地物/null 地状/null 地狱/null 地狱般/null 地球/null 地球上/null 地球仪/null 地球体/null 地球化学/null 地球化学勘探/null 地球外/null 地球大气/null 地球物理/null 地球物理勘探/null 地球物理学/null 地球物理观测卫星/null 地球磁场/null 地球科学/null 地球资源勘测卫星/null 地球轨道/null 地理/null 地理书/null 地理位置/null 地理坐标/null 地理学/null 地理学家/null 地理志/null 地理极/null 地理民情/null 地理环境决定论/null 地瓜/null 地瓜面/null 地界/null 地界标/null 地痞/null 地痞流氓/null 地瘩/null 地瘪/null 地皮/null 地盖/null 地盘/null 地矿/null 地矿局/null 地矿部/null 地磁/null 地磁仪/null 地磁场/null 地磁极/null 地磁气/null 地祇/null 地租/null 地租收入/null 地秤/null 地积/null 地积单/null 地税/null 地穴/null 地窖/null 地窟/null 地窨/null 地窨子/null 地籍/null 地籍图/null 地精似/null 地级/null 地级市/null 地线/null 地绸/null 地缘/null 地缘战略/null 地缘政治/null 地缘政治学/null 地网天罗/null 地羊/null 地老天荒/null 地老虎/null 地肤/null 地肤子/null 地能/null 地脉/null 地脚/null 地膜/null 地膜覆盖/null 地藏/null 地藏王菩萨/null 地藏菩萨/null 地蚕/null 地蜡/null 地衣/null 地表/null 地表水/null 地西泮/null 地覆天翻/null 地角/null 地角天涯/null 地话/null 地说/null 地貌/null 地貌变迁/null 地貌学/null 地财/null 地质/null 地质作用/null 地质力学/null 地质勘探/null 地质图/null 地质学/null 地质学家/null 地质局/null 地质年代/null 地质年代表/null 地质年表/null 地质普查/null 地质构造/null 地质矿产部/null 地质队/null 地走/null 地躺拳/null 地轴/null 地速/null 地道/null 地道战/null 地邻/null 地里/null 地钱/null 地铁/null 地铁站/null 地铺/null 地锦草/null 地间/null 地陷/null 地雷/null 地雷区/null 地雷场/null 地雷战/null 地震/null 地震中/null 地震仪/null 地震区/null 地震学/null 地震学家/null 地震局/null 地震带/null 地震序列/null 地震波/null 地震活动带/null 地震烈度/null 地震计/null 地震震级/null 地震预报/null 地面/null 地面卫星接收站/null 地面层/null 地面控制/null 地面核爆炸/null 地面气压/null 地面水/null 地面沉降/null 地面温度表/null 地面灌溉/null 地面站/null 地面部队/null 地面零点/null 地鳖/null 地黄/null 地黄牛/null 地龙/null 场上/null 场主/null 场儿/null 场内/null 场券/null 场区/null 场区应急/null 场合/null 场地/null 场地自行车/null 场场/null 场址/null 场外/null 场外应急/null 场子/null 场屋/null 场强/null 场戏/null 场所/null 场景/null 场次/null 场界/null 场白/null 场租/null 场站/null 场记/null 场记板/null 场论/null 场费/null 场部/null 场长/null 场院/null 场面/null 场频/null 场馆/null 均一/null 均不/null 均不能/null 均与/null 均为/null 均享/null 均以/null 均依/null 均值/null 均分/null 均列/null 均势/null 均匀/null 均匀性/null 均占/null 均受/null 均变论/null 均可/null 均富/null 均居/null 均属/null 均差/null 均已/null 均应/null 均指/null 均按/null 均据/null 均摊/null 均收/null 均数/null 均方/null 均无/null 均日照/null 均有/null 均未/null 均权/null 均权制度/null 均沾/null 均湿/null 均热/null 均用/null 均田/null 均田制/null 均由/null 均相/null 均称/null 均等/null 均等化/null 均等性/null 均线/null 均线指标/null 均能/null 均衡/null 均衡器/null 均衡性/null 均衡生产/null 均衡论/null 均衡说/null 均被/null 均要/null 均设/null 均质/null 均贫/null 均达/null 均遭/null 均重/null 均需/null 均须/null 坊子/null 坊子区/null 坊本/null 坊间/null 坋粒/null 坌鸟先飞/null 坍台/null 坍塌/null 坍恶不赦/null 坍方/null 坍缩星/null 坎井之蛙/null 坎儿/null 坎儿井/null 坎土曼/null 坎坎/null 坎坷/null 坎坷不平/null 坎坷多舛/null 坎培拉/null 坎塔布连/null 坎塔布连山脉/null 坎塔布连海/null 坎塔布里亚/null 坎壈/null 坎大哈/null 坎大哈省/null 坎子/null 坎帕拉/null 坎德拉/null 坎昆/null 坎洼/null 坎特伯雷/null 坎特伯雷大主教/null 坎肩/null 坎肩儿/null 坎贝尔/null 坎贝尔侏儒仓鼠/null 坏东西/null 坏书/null 坏了/null 坏事/null 坏事变好事/null 坏人/null 坏人坏事/null 坏分子/null 坏包儿/null 坏名声/null 坏君/null 坏啦/null 坏坏/null 坏处/null 坏家伙/null 坏帐/null 坏心/null 坏心眼/null 坏心肠/null 坏性/null 坏掉/null 坏死/null 坏水/null 坏疽/null 坏的/null 坏种/null 坏脾气/null 坏蛋/null 坏血/null 坏血病/null 坏话/null 坏账/null 坏运/null 坏运气/null 坏透/null 坏透了/null 坏透坏绝/null 坏鸟/null 坐上/null 坐下/null 坐不垂堂/null 坐不安席/null 坐不改名/null 坐不改姓/null 坐不窥堂/null 坐了/null 坐井/null 坐井观天/null 坐享其成/null 坐以待旦/null 坐以待毙/null 坐会/null 坐位/null 坐便器/null 坐倒/null 坐像/null 坐具/null 坐冷板凳/null 坐到/null 坐力/null 坐功/null 坐化/null 坐卧/null 坐卧不宁/null 坐卧不安/null 坐厕/null 坐厕垫/null 坐取/null 坐台/null 坐台小姐/null 坐吃享福/null 坐吃山崩/null 坐吃山空/null 坐向/null 坐吧/null 坐呀/null 坐商/null 坐困/null 坐在/null 坐地分赃/null 坐坡/null 坐垫/null 坐墩/null 坐大/null 坐失/null 坐失机宜/null 坐失良机/null 坐好/null 坐姿/null 坐守/null 坐定/null 坐山/null 坐山看虎斗/null 坐山观虎斗/null 坐山雕/null 坐席/null 坐庄/null 坐往/null 坐待/null 坐得/null 坐怀不乱/null 坐惯/null 坐探/null 坐支/null 坐收/null 坐收渔利/null 坐无车公/null 坐月/null 坐月子/null 坐木筏/null 坐果/null 坐标/null 坐标法/null 坐标空间/null 坐标系/null 坐标轴/null 坐椅/null 坐此/null 坐浴/null 坐满/null 坐牢/null 坐班/null 坐班房/null 坐的人/null 坐着/null 坐票/null 坐禁闭/null 坐禅/null 坐科/null 坐立/null 坐立不安/null 坐立难安/null 坐等/null 坐筹帷幄/null 坐者/null 坐而待旦/null 坐而待毙/null 坐而论道/null 坐背/null 坐脏/null 坐舱/null 坐船/null 坐药/null 坐落/null 坐坐/null 坐蓐/null 坐蔸/null 坐薪尝胆/null 坐薪悬胆/null 坐蜡/null 坐观/null 坐观成败/null 坐视/null 坐视不救/null 坐视不理/null 坐视成败/null 坐视无睹/null 坐言起行/null 坐误/null 坐起/null 坐车/null 坐镇/null 坐飞机/null 坐骑/null 坐骨/null 坐骨神经/null 坐骨神经痛/null 坑井/null 坑人/null 坑儒/null 坑内/null 坑口/null 坑坎/null 坑坑洼洼/null 坑子/null 坑害/null 坑木/null 坑杀/null 坑洞/null 坑洼/null 坑爹/null 坑穴/null 坑蒙拐骗/null 坑道/null 坑里/null 坑骗/null 块体/null 块儿/null 块儿八毛/null 块冰/null 块块/null 块垒/null 块头/null 块根/null 块煤/null 块状/null 块状物/null 块结/null 块茎/null 块茎状/null 块菌/null 块规/null 块间/null 坚不可摧/null 坚信/null 坚信不移/null 坚信礼/null 坚决/null 坚决否认/null 坚固/null 坚固性/null 坚固耐用/null 坚城深池/null 坚壁/null 坚壁清野/null 坚如/null 坚如磐石/null 坚如钢/null 坚守/null 坚守岗位/null 坚定/null 坚定不移/null 坚定性/null 坚实/null 坚尼系数/null 坚度/null 坚强/null 坚强不屈/null 坚强意志/null 坚忍/null 坚忍不拔/null 坚戈/null 坚执/null 坚拒/null 坚持/null 坚持下去/null 坚持不懈/null 坚持不渝/null 坚持原则/null 坚持四项基本原则/null 坚持真理/null 坚振/null 坚振礼/null 坚挺/null 坚明/null 坚果/null 坚果仁/null 坚果壳/null 坚毅/null 坚牢/null 坚牢度/null 坚甲利兵/null 坚石/null 坚硬/null 坚称/null 坚致/null 坚苦/null 坚苦卓绝/null 坚贞/null 坚贞不屈/null 坚贞不渝/null 坚韧/null 坚韧不拔/null 坛坛罐罐/null 坛子/null 坛木/null 坛而不化/null 坝址/null 坝基/null 坝埽/null 坝子/null 坝身/null 坟丘/null 坟地/null 坟场/null 坟墓/null 坟头/null 坟山/null 坟茔/null 坠下/null 坠体/null 坠入/null 坠地/null 坠子/null 坠机/null 坠楼/null 坠毁/null 坠海/null 坠茵落溷/null 坠落/null 坠饰/null 坠马/null 坡地/null 坡垒/null 坡头/null 坡头区/null 坡度/null 坡状/null 坡田/null 坡路/null 坡道/null 坡鹿/null 坤甸/null 坤角儿/null 坦佩雷/null 坦克/null 坦克兵/null 坦克车/null 坦克部队/null 坦博拉/null 坦噶/null 坦噶尼喀/null 坦噶尼喀湖/null 坦坦/null 坦平/null 坦怀/null 坦承/null 坦桑尼亚/null 坦然/null 坦然无惧/null 坦然自若/null 坦率/null 坦白/null 坦白从宽/null 坦直/null 坦缓/null 坦胸/null 坦腹/null 坦腹东床/null 坦荡/null 坦言/null 坦诚/null 坦诚相待/null 坦诚相见/null 坦说/null 坦途/null 坦陈/null 坦陈衷曲/null 坦露/null 坨儿/null 坨子/null 坩埚/null 坩子土/null 坩锅/null 坪坝/null 坪林/null 坪林乡/null 坯件/null 坯子/null 坯布/null 坯料/null 坯模/null 坯砌/null 坳堂/null 坳陷/null 坷垃/null 坷拉/null 坼裂/null 垂下/null 垂体/null 垂危/null 垂垂/null 垂头丧气/null 垂头弯腰/null 垂头缩肩/null 垂就/null 垂布/null 垂帘/null 垂帘听政/null 垂幕/null 垂度/null 垂心/null 垂悬分词/null 垂感/null 垂手/null 垂手而得/null 垂拱而治/null 垂挂/null 垂暮/null 垂暮之年/null 垂曲线/null 垂杨柳/null 垂柳/null 垂死/null 垂死挣扎/null 垂泣/null 垂泪/null 垂涎/null 垂涎三尺/null 垂涎欲摘/null 垂涎欲滴/null 垂片/null 垂白/null 垂直/null 垂直和短距起落飞机/null 垂直平分线/null 垂直性/null 垂直搜索/null 垂直线/null 垂直起落飞机/null 垂直面/null 垂线/null 垂线足/null 垂老/null 垂耳/null 垂肉/null 垂肌/null 垂花门/null 垂裕后昆/null 垂询/null 垂足/null 垂部/null 垂钓/null 垂青/null 垂顾/null 垂髫/null 垃圾/null 垃圾场/null 垃圾堆/null 垃圾处理/null 垃圾工/null 垃圾桶/null 垃圾电邮/null 垃圾筒/null 垃圾箱/null 垃圾虫/null 垃圾袋/null 垃圾车/null 垃圾邮件/null 垄作/null 垄断/null 垄断价格/null 垄断利润/null 垄断组织/null 垄断者/null 垄断贩卖/null 垄断资产阶级/null 垄断资本/null 垄断资本主义/null 垄沟/null 垄统/null 垆坶/null 垆埴/null 垆邸/null 型号/null 型式/null 型心/null 型快闪记忆体/null 型材/null 型板/null 型款/null 型状/null 型男/null 型砂/null 型车/null 型钢/null 垒固/null 垒球/null 垒砌/null 垒障/null 垓下/null 垓心/null 垛上/null 垛口/null 垛子/null 垝垣/null 垡子/null 垢污/null 垢物/null 垢阂/null 垢面/null 垣曲/null 垣衣/null 垦丁/null 垦丁国家公园/null 垦丁市/null 垦利/null 垦区/null 垦复/null 垦拓/null 垦殖/null 垦荒/null 垩版/null 垩纪/null 垫上/null 垫上运动/null 垫付/null 垫借/null 垫充/null 垫圈/null 垫子/null 垫层/null 垫布/null 垫平/null 垫底/null 垫底儿/null 垫座/null 垫支/null 垫料/null 垫木/null 垫板/null 垫架/null 垫款/null 垫江/null 垫片/null 垫物/null 垫用/null 垫盘/null 垫着/null 垫肩/null 垫背/null 垫脚/null 垫脚石/null 垫补/null 垫衬/null 垫被/null 垫褥/null 垫起/null 垫钱/null 垫高/null 垭口/null 垮了/null 垮台/null 垮塌/null 垮掉/null 垸子/null 埂子/null 埃克托/null 埃克托・柏辽兹/null 埃利斯岛/null 埃加迪群岛/null 埃博拉病毒/null 埃及七月革命/null 埃及人/null 埃及古物学/null 埃及古物学者/null 埃及语/null 埃及豆/null 埃叙/null 埃因霍温/null 埃塔/null 埃塞俄比亚/null 埃塞俄比亚语/null 埃夫伯里/null 埃奥罗斯/null 埃尔南德斯/null 埃尔多安/null 埃尔帕索/null 埃尔朗根/null 埃尔朗根纲领/null 埃尔福特/null 埃尔维斯・普雷斯利/null 埃尔金/null 埃尔金大理石/null 埃居/null 埃布罗/null 埃布罗河/null 埃弗顿/null 埃德/null 埃德・米利班德/null 埃德加/null 埃德加・斯诺/null 埃德加・爱伦・坡/null 埃德蒙・伯克/null 埃德蒙顿/null 埃拉托塞尼斯/null 埃拉特/null 埃文/null 埃文斯/null 埃文河畔斯特拉特福/null 埃文茅斯/null 埃斯库多/null 埃斯库罗斯/null 埃斯特哈齐/null 埃斯特朗/null 埃格尔松/null 埃森/null 埃森哲/null 埃森纳赫/null 埃涅阿斯/null 埃涅阿斯纪/null 埃特纳火山/null 埃琳娜/null 埃米尔/null 埃菲尔铁塔/null 埃蕾/null 埃迪卡拉/null 埃迪卡拉纪/null 埃里温/null 埇桥/null 埇桥区/null 埋下/null 埋伏/null 埋入/null 埋冤/null 埋单/null 埋名/null 埋在/null 埋天怨地/null 埋头/null 埋头工作/null 埋头苦干/null 埋怨/null 埋汰/null 埋没/null 埋着/null 埋线/null 埋线疗法/null 埋置/null 埋葬/null 埋葬者/null 埋藏/null 埋设/null 埋首/null 埋首于/null 城下/null 城下之盟/null 城东区/null 城中/null 城中区/null 城中村/null 城主/null 城乡/null 城体/null 城关/null 城关区/null 城关镇/null 城内/null 城北区/null 城北徐公/null 城区/null 城南/null 城厢/null 城厢区/null 城口/null 城固/null 城垒/null 城垣/null 城域网/null 城堞/null 城堡/null 城墙/null 城墙外/null 城壁/null 城壕/null 城外/null 城头/null 城子河/null 城子河区/null 城市/null 城市人/null 城市依赖症/null 城市化/null 城市区域/null 城市学/null 城市居民/null 城市热岛/null 城市管理行政执法局/null 城市规划/null 城市贫民/null 城市运动会/null 城市间/null 城府/null 城廓/null 城建/null 城建局/null 城弧/null 城形/null 城根/null 城楼/null 城步/null 城步县/null 城池/null 城河/null 城濮之战/null 城狐社鼠/null 城管/null 城西/null 城西区/null 城运会/null 城邦/null 城郊/null 城郭/null 城里/null 城里人/null 城铁/null 城镇/null 城镇化/null 城镇化水平/null 城门/null 城门失火/null 城门失火殃及池鱼/null 城阙/null 城防/null 城阳/null 城阳区/null 城隍/null 埏埴/null 埔心/null 埔心乡/null 埔盐/null 埔盐乡/null 埔里/null 埔里镇/null 域名/null 域名抢注/null 域名服务器/null 域名注册/null 域外/null 域多利皇后/null 域网/null 埠头/null 埤头/null 埤头乡/null 埴土/null 培修/null 培养/null 培养人才/null 培养基/null 培养教育/null 培养液/null 培养皿/null 培养目标/null 培养者/null 培勒兹/null 培土/null 培基/null 培根/null 培植/null 培育/null 培训/null 培训中心/null 培训基地/null 培训教材/null 培训班/null 培里克利斯/null 基业/null 基于/null 基件/null 基价/null 基体/null 基值/null 基准/null 基准面/null 基加利/null 基友/null 基因/null 基因修改/null 基因变异/null 基因图谱/null 基因型/null 基因学/null 基因工程/null 基因库/null 基因扩大/null 基因技术/null 基因改造/null 基因染色体异常/null 基因治疗/null 基因码/null 基因突变/null 基因组/null 基团/null 基地/null 基地址/null 基地恐怖组织/null 基地组织/null 基地防御/null 基址/null 基坑/null 基多/null 基尔/null 基尔特/null 基尼系数/null 基层/null 基层社/null 基岩/null 基布兹/null 基希讷乌/null 基干/null 基年/null 基床/null 基底/null 基底动脉/null 基底神经节孙损伤/null 基底细胞癌/null 基度山/null 基座/null 基建/null 基态/null 基拉韦厄/null 基数/null 基数词/null 基时/null 基木/null 基本/null 基本上/null 基本利率/null 基本功/null 基本单位/null 基本原则/null 基本原理/null 基本国策/null 基本多文种平面/null 基本完成/null 基本定理/null 基本工资/null 基本建设/null 基本性/null 基本方针/null 基本概念/null 基本法/null 基本点/null 基本理论/null 基本电荷/null 基本矛盾/null 基本粒子/null 基本经济规律/null 基本词汇/null 基本路线/null 基本金/null 基本需要/null 基板/null 基极/null 基桑加尼/null 基桩/null 基民党/null 基波/null 基测/null 基点/null 基甸/null 基督/null 基督圣体节/null 基督城/null 基督徒/null 基督教/null 基督教徒/null 基督教民主联盟/null 基督教派/null 基督教科学派/null 基督新教/null 基石/null 基础/null 基础上/null 基础代谢/null 基础医学/null 基础工业/null 基础性/null 基础教育/null 基础理论/null 基础科学/null 基础结构/null 基础设施/null 基础课/null 基础速率/null 基础问题/null 基站/null 基线/null 基网/null 基肥/null 基脚/null 基色/null 基调/null 基谐波/null 基质/null 基质膜/null 基辅/null 基辅罗斯/null 基辛格/null 基达/null 基部/null 基里巴斯/null 基里巴斯共和国/null 基金/null 基金会/null 基金组织/null 基隆/null 基面/null 基音/null 基频/null 堂・吉河德/null 堂上/null 堂会/null 堂侄/null 堂倌/null 堂兄/null 堂兄弟/null 堂叔/null 堂吉诃德/null 堂哥/null 堂坳/null 堂堂/null 堂堂正正/null 堂堂皇皇/null 堂外/null 堂奥/null 堂妹/null 堂姊妹/null 堂姐/null 堂子/null 堂客/null 堂屋/null 堂庑/null 堂弟/null 堂房/null 堂煌/null 堂皇/null 堂皇富丽/null 堂皇正大/null 堂而皇之/null 堂课/null 堂风/null 堂高廉远/null 堂鼓/null 堆丘/null 堆于/null 堆仓/null 堆入/null 堆叠/null 堆土机/null 堆垒/null 堆垒数论/null 堆垛/null 堆存处/null 堆成/null 堆房/null 堆搓/null 堆放/null 堆木场/null 堆栈/null 堆案盈几/null 堆满/null 堆焊/null 堆石/null 堆砌/null 堆积/null 堆积如山/null 堆积木/null 堆积物/null 堆笑/null 堆肥/null 堆芯/null 堆装物/null 堆起/null 堆迭/null 堆里/null 堆金积玉/null 堆集/null 堆高机/null 堆龙德庆/null 堇色/null 堇菜/null 堑壕/null 堕云雾中/null 堕入/null 堕楼/null 堕甑不顾/null 堕着/null 堕胎/null 堕胎药/null 堕落/null 堕马/null 堡中/null 堡主/null 堡垒/null 堡垒户/null 堡子/null 堡寨/null 堡礁/null 堤围/null 堤坝/null 堤堰/null 堤岸/null 堤拉米苏/null 堤溃/null 堤溃蚁孔/null 堤道/null 堤防/null 堤顶大路/null 堪培拉/null 堪察加/null 堪察加半岛/null 堪布/null 堪忧/null 堪称/null 堪称一绝/null 堪舆/null 堪萨斯/null 堪萨斯州/null 堪虞/null 堪达罕/null 堰内/null 堰塞湖/null 堰蜓座/null 堵了/null 堵住/null 堵击/null 堵剿匪徒/null 堵嘴/null 堵在/null 堵塞/null 堵塞费/null 堵墙/null 堵截/null 堵挡/null 堵死/null 堵气/null 堵水/null 堵漏/null 堵着/null 堵车/null 堵门/null 塄坎/null 塌下/null 塌了/null 塌倒/null 塌台/null 塌实/null 塌心/null 塌方/null 塌架/null 塌桥/null 塌棵菜/null 塌楼/null 塌车/null 塌陷/null 塌鼻/null 塌鼻子/null 塑像/null 塑化/null 塑化剂/null 塑型/null 塑封/null 塑性/null 塑性力学/null 塑成/null 塑料/null 塑料制品/null 塑料厂/null 塑料工业/null 塑料布/null 塑料片/null 塑料版/null 塑料瓶/null 塑料皮/null 塑料盒/null 塑料盘/null 塑料纸/null 塑料薄膜/null 塑料袋/null 塑料贴面板/null 塑木/null 塑条/null 塑胶/null 塑胶爆炸/null 塑胶跑道/null 塑膜/null 塑褂/null 塑身/null 塑造/null 塑造成/null 塑钢/null 塔什干/null 塔什库尔干/null 塔什库尔干乡/null 塔什库尔干自治县/null 塔克拉玛干/null 塔克拉玛干沙漠/null 塔克拉马干/null 塔公/null 塔公寺/null 塔列朗/null 塔利班/null 塔刹/null 塔加路族语/null 塔台/null 塔吉克/null 塔吉克人/null 塔吉克斯坦/null 塔吉克语/null 塔吊/null 塔城/null 塔城地区/null 塔塔儿/null 塔塔儿人/null 塔塔尔/null 塔夫绸/null 塔尔寺/null 塔尖/null 塔崩/null 塔崩水解酶/null 塔底/null 塔式/null 塔式起重机/null 塔形/null 塔扎/null 塔拉/null 塔拉瓦/null 塔斯曼/null 塔斯曼尼亚/null 塔斯曼尼亚岛/null 塔斯社/null 塔斯科拉/null 塔斯马尼亚洲/null 塔木德经/null 塔林/null 塔楼/null 塔河/null 塔灰/null 塔状/null 塔玛尔/null 塔瓦斯科/null 塔罗/null 塔罗卡/null 塔身/null 塔轮/null 塔迪奇/null 塔那那利佛/null 塔里木/null 塔里木河/null 塔里木盆地/null 塔门/null 塔顶/null 塔高/null 塕埲/null 塘坝/null 塘堰/null 塘沽/null 塘沽协定/null 塘泥/null 塘肥/null 塘虱/null 塘鹅/null 塞万提斯/null 塞上/null 塞住/null 塞入/null 塞具/null 塞内加尔/null 塞北/null 塞哥维亚/null 塞在/null 塞外/null 塞子/null 塞孔/null 塞尔南/null 塞尔特/null 塞尔特语/null 塞尔维亚克罗地亚语/null 塞尔维亚和黑山/null 塞尔维亚民主党/null 塞尔维亚语/null 塞尺/null 塞巴斯蒂安/null 塞得/null 塞拉利昂/null 塞擦音/null 塞族/null 塞有/null 塞浦路斯/null 塞渊/null 塞满/null 塞满了/null 塞瓦斯托波尔/null 塞着/null 塞紧/null 塞纳河/null 塞给/null 塞维利亚/null 塞缪尔/null 塞缪尔・约翰逊/null 塞翁失马/null 塞翁失马安知非福/null 塞翁失马焉知非福/null 塞耳/null 塞耳盗铃/null 塞舌尔/null 塞舌尔群岛/null 塞著/null 塞规/null 塞语/null 塞责/null 塞车/null 塞进/null 塞韦里诺/null 塞音/null 塞饱/null 填上/null 填交/null 填仓/null 填充/null 填充剂/null 填入/null 填具/null 填写/null 填列/null 填制/null 填发/null 填土/null 填地/null 填垫/null 填堵/null 填塞/null 填塞器/null 填塞料/null 填塞物/null 填填/null 填好/null 填字/null 填密/null 填平/null 填平补齐/null 填息/null 填成/null 填成平/null 填房/null 填报/null 填料/null 填方/null 填海/null 填满/null 填物/null 填用/null 填空/null 填空补缺/null 填絮/null 填补/null 填补国内空白/null 填补空白/null 填表/null 填记/null 填词/null 填送/null 填错/null 填饱/null 填高/null 填鸭/null 填鸭式/null 塬地/null 境内/null 境内外/null 境况/null 境地/null 境域/null 境外/null 境界/null 境遇/null 墉垣/null 墒土/null 墒情/null 墓中/null 墓主/null 墓人/null 墓园/null 墓地/null 墓场/null 墓址/null 墓坑/null 墓坑夯土层/null 墓塔/null 墓室/null 墓志/null 墓志文/null 墓志铭/null 墓石/null 墓碑/null 墓穴/null 墓窖/null 墓葬/null 墓葬区/null 墓道/null 墓门/null 墙上/null 墙上泥皮/null 墙下/null 墙体/null 墙倒众人推/null 墙内/null 墙前/null 墙垣/null 墙基/null 墙壁/null 墙外/null 墙头/null 墙头草/null 墙头诗/null 墙头马上/null 墙报/null 墙旮旯/null 墙有缝壁有耳/null 墙板/null 墙根/null 墙泥/null 墙洞/null 墙篱/null 墙纸/null 墙脚/null 墙花/null 墙花路柳/null 墙花路草/null 墙裙/null 墙角/null 墙跟/null 墙里墙外/null 墙里开花墙外香/null 墙面/null 墙面而立/null 墙风毕耳/null 墙高基下/null 增三和弦/null 增为/null 增亏/null 增产/null 增产增收/null 增产节约/null 增人/null 增借/null 增值/null 增值税/null 增光/null 增光添色/null 增兵/null 增减/null 增刊/null 增列/null 增删/null 增利/null 增加/null 增加值/null 增加收入/null 增加数/null 增加物/null 增印/null 增压/null 增压器/null 增发/null 增员/null 增城/null 增塑剂/null 增多/null 增大/null 增大器/null 增幅/null 增幅器/null 增年/null 增广/null 增建/null 增强/null 增强党性/null 增强团结/null 增强塑料/null 增强活力/null 增征/null 增拨/null 增损/null 增援/null 增收/null 增收节支/null 增效/null 增有/null 增殖/null 增殖反应堆/null 增殖者/null 增殖腺/null 增派/null 增添/null 增添物/null 增温/null 增温层/null 增湿器/null 增生/null 增白/null 增白剂/null 增盈/null 增益/null 增税/null 增稠/null 增稠剂/null 增纳/null 增缴/null 增聘/null 增肥/null 增至/null 增色/null 增薪/null 增补/null 增订/null 增订本/null 增记/null 增设/null 增调/null 增贷/null 增资/null 增辉/null 增进/null 增进友谊/null 增选/null 增速/null 增配/null 增量/null 增量参数/null 增长/null 增长天/null 增长幅度/null 增长率/null 增长速度/null 增防/null 增高/null 墟里/null 墨丘利/null 墨具/null 墨刑/null 墨匣/null 墨台/null 墨吏/null 墨囊/null 墨子/null 墨守/null 墨守成规/null 墨守陈规/null 墨宝/null 墨客/null 墨家/null 墨尔本/null 墨尔钵/null 墨斗/null 墨斗鱼/null 墨晶/null 墨水/null 墨水儿/null 墨水台/null 墨水壶/null 墨水池/null 墨水瓶/null 墨水瓶架/null 墨汁/null 墨汁未干/null 墨江县/null 墨海/null 墨渍/null 墨湾/null 墨玉/null 墨画/null 墨盒/null 墨石/null 墨砚/null 墨竹工卡/null 墨笔/null 墨粉/null 墨索里尼/null 墨累/null 墨累达令流域/null 墨纸/null 墨线/null 墨绿/null 墨绿色/null 墨者/null 墨脱/null 墨色/null 墨菊/null 墨西哥人/null 墨西哥城/null 墨西哥湾/null 墨西哥独立战争/null 墨西拿/null 墨西拿海峡/null 墨迹/null 墨迹未干/null 墨镜/null 墨鱼/null 墨鸦/null 墨黑/null 墩墩/null 墩子/null 墩布/null 壁上/null 壁上观/null 壁助/null 壁厢/null 壁垒/null 壁垒一新/null 壁垒森严/null 壁扇/null 壁报/null 壁挂/null 壁效应/null 壁板/null 壁架/null 壁柜/null 壁柱/null 壁橱/null 壁毯/null 壁灯/null 壁炉/null 壁球/null 壁画/null 壁砖/null 壁立/null 壁立千仞/null 壁纸/null 壁虎/null 壁虱/null 壁钱/null 壁龛/null 壅土/null 壅塞/null 壅穆不争/null 壑沟/null 壑谷/null 壕沟/null 壤土/null 壤塘/null 士丹利/null 士为知己者死/null 士人/null 士兵/null 士力架/null 士卒/null 士可杀不可辱/null 士大夫/null 士女/null 士子/null 士学位/null 士官/null 士师记/null 士敏土/null 士族/null 士林/null 士林区/null 士死知己/null 士民/null 士气/null 士绅/null 士饱马腾/null 壬午/null 壬子/null 壬寅/null 壬戌/null 壬申/null 壬辰/null 壬辰倭乱/null 壮丁/null 壮丽/null 壮丽堂皇/null 壮举/null 壮健/null 壮围/null 壮围乡/null 壮士/null 壮士断腕/null 壮士解腕/null 壮大/null 壮实/null 壮工/null 壮年/null 壮心/null 壮心不已/null 壮志/null 壮志凌云/null 壮志未酬/null 壮戏/null 壮气吞牛/null 壮烈/null 壮的/null 壮硕/null 壮美/null 壮胆/null 壮苗/null 壮行/null 壮观/null 壮语/null 壮起胆子/null 壮锦/null 壮阔/null 壮阳剂/null 声东击西/null 声乐/null 声乐家/null 声价/null 声价十倍/null 声光/null 声势/null 声势汹汹/null 声势浩大/null 声区/null 声卡/null 声压/null 声叫/null 声名/null 声名大振/null 声名大震/null 声名狼籍/null 声名狼藉/null 声名鹊起/null 声吞气忍/null 声呐/null 声响/null 声嘶力竭/null 声囊/null 声声/null 声威/null 声威大震/null 声学/null 声学家/null 声带/null 声应气求/null 声张/null 声形/null 声律/null 声急/null 声息/null 声情并茂/null 声扬/null 声押/null 声振林大/null 声控/null 声援/null 声效/null 声旁/null 声旁字/null 声旁错误/null 声明/null 声明书/null 声明者/null 声望/null 声母/null 声气/null 声气相投/null 声气相求/null 声求气应/null 声波/null 声波定位/null 声波纹/null 声泪俱下/null 声浪/null 声源/null 声电/null 声磬同音/null 声称/null 声类系统/null 声级/null 声纳/null 声能/null 声能学/null 声腔/null 声色/null 声色俱厉/null 声色场所/null 声色犬马/null 声色狗马/null 声觉/null 声言/null 声誉/null 声誉坏/null 声誉好/null 声讨/null 声语/null 声说/null 声请/null 声调/null 声调的调值/null 声调语言/null 声调轮廓/null 声谱/null 声象/null 声辩/null 声迹/null 声速/null 声道/null 声部/null 声量/null 声门/null 声闻/null 声闻过情/null 声闻远播/null 声霸卡/null 声音/null 声音大/null 声音笑貌/null 声韵/null 声韵学/null 声频/null 壳儿/null 壳子/null 壳幔/null 壳斗/null 壳牌/null 壳牌公司/null 壳状/null 壳菜/null 壳虫/null 壳贝/null 壳质/null 壳郎猪/null 壶中/null 壶中日月/null 壶关/null 壶嘴/null 壶浆塞道/null 壶里乾坤/null 壶铃/null 壹套/null 壹败涂地/null 处世/null 处世之道/null 处世原则/null 处世哲学/null 处世态度/null 处之/null 处之泰然/null 处事/null 处事原则/null 处于/null 处于优势/null 处于领先地位/null 处以/null 处决/null 处分/null 处刑/null 处去/null 处在/null 处堂燕雀/null 处境/null 处士/null 处处/null 处女/null 处女似/null 处女作/null 处女地/null 处女座/null 处女膜/null 处女航/null 处子/null 处子秀/null 处安思危/null 处室/null 处心积虑/null 处所/null 处斩/null 处方/null 处死/null 处死刑/null 处治/null 处理/null 处理不当/null 处理品/null 处理器/null 处理意见/null 处理机/null 处理系统/null 处理者/null 处理能力/null 处理问题/null 处男/null 处私刑/null 处级/null 处绞刑/null 处罚/null 处罚者/null 处罚金/null 处置/null 处身/null 处长/null 处高鹜远/null 备下/null 备不住/null 备中/null 备件/null 备份/null 备位充数/null 备军/null 备办/null 备取/null 备受/null 备员/null 备品/null 备好/null 备妥/null 备存/null 备尝艰苦/null 备尝辛苦/null 备忘/null 备忘录/null 备悉/null 备战/null 备抵/null 备换服装/null 备换鞋/null 备料/null 备有/null 备查/null 备案/null 备注/null 备用/null 备用二级头呼吸器/null 备用品/null 备用环/null 备用轮胎/null 备用金/null 备置/null 备考/null 备而不用/null 备耕/null 备胎/null 备至/null 备荒/null 备课/null 备货/null 备足/null 备选/null 备餐/null 备饭/null 备马/null 备齐/null 复习/null 复习资料/null 复交/null 复仇/null 复仇主义/null 复仇者/null 复仇雪耻/null 复任/null 复会/null 复位/null 复信/null 复修/null 复健/null 复元/null 复元音/null 复共轭/null 复关/null 复兴/null 复兴乡/null 复兴党/null 复兴区/null 复兴时代/null 复兴者/null 复兴门/null 复写/null 复写簿/null 复写纸/null 复出/null 复击/null 复函/null 复分解反应/null 复刊/null 复利/null 复制/null 复制品/null 复制器/null 复制本/null 复加/null 复印/null 复印件/null 复印机/null 复印纸/null 复原/null 复发/null 复变/null 复变函数/null 复变函数论/null 复古/null 复古会/null 复句/null 复叶/null 复合/null 复合体/null 复合元音/null 复合函数/null 复合判断/null 复合字/null 复合弓/null 复合材料/null 复合母音/null 复合纤维/null 复合肥料/null 复合词/null 复合词素词/null 复合量词/null 复名数/null 复听/null 复吸/null 复员/null 复员军人/null 复员证/null 复命/null 复唱句/null 复圆/null 复地/null 复壮/null 复大/null 复姓/null 复婚/null 复子明辟/null 复学/null 复审/null 复工/null 复平面/null 复建/null 复式/null 复式教学/null 复式犁/null 复式编制/null 复归/null 复得/null 复折/null 复指/null 复指成分/null 复摆/null 复数/null 复数域/null 复数平面/null 复数形式/null 复方/null 复旦/null 复旦大学/null 复旧/null 复明/null 复本/null 复本位制/null 复杂/null 复杂劳动/null 复杂化/null 复杂多变/null 复杂度/null 复杂度理论/null 复杂性/null 复杂系统/null 复查/null 复核/null 复根/null 复殖吸虫/null 复殖目/null 复比/null 复活/null 复活的军团/null 复活节岛/null 复活赛/null 复燃/null 复现/null 复生/null 复电/null 复白/null 复盐/null 复盖/null 复眼/null 复礼克己/null 复社/null 复种/null 复种指数/null 复种面积/null 复算/null 复籍/null 复线/null 复耕/null 复职/null 复色光/null 复苏/null 复萌/null 复视/null 复议/null 复讼/null 复评/null 复诊/null 复试/null 复读/null 复读生/null 复课/null 复调音乐/null 复赛/null 复蹈其辙/null 复蹈前辙/null 复转/null 复辅音/null 复辟/null 复返/null 复迭/null 复述/null 复选/null 复选框/null 复醒/null 复阅/null 复音/null 复音形/null 复音词/null 复韵母/null 复驳/null 夏五郭公/null 夏代/null 夏令/null 夏令时/null 夏令营/null 夏侯/null 夏候鸟/null 夏初/null 夏利/null 夏历/null 夏商周/null 夏士莲/null 夏天/null 夏威夷/null 夏威夷岛/null 夏威夷州/null 夏威夷火山国家公园/null 夏娃/null 夏季/null 夏尔巴人/null 夏州/null 夏布/null 夏收/null 夏收夏种/null 夏敬渠/null 夏文化/null 夏日/null 夏日可畏/null 夏时制/null 夏朝/null 夏枯草/null 夏正民/null 夏河/null 夏洛克/null 夏洛特/null 夏洛特・勃良特/null 夏洛特敦/null 夏洛特阿马利亚/null 夏津/null 夏炉冬扇/null 夏熟/null 夏熟作物/null 夏王朝/null 夏目漱石/null 夏眠/null 夏禹/null 夏种/null 夏管/null 夏粮/null 夏耘/null 夏至点/null 夏至线/null 夏至草/null 夏草/null 夏虫不可以语冰/null 夏虫不可语冰/null 夏虫朝菌/null 夏虫疑冰/null 夏衍/null 夏衣/null 夏装/null 夏邑/null 夏锄/null 夏长/null 夏雨雨人/null 夏黄公/null 夔夔/null 夔州/null 夔纹/null 夔龙礼乐/null 夕幕/null 夕惕若厉/null 夕拾/null 夕烟/null 夕照/null 夕阳/null 夕阳产业/null 夕阳工业/null 夕阳西下/null 外丹/null 外乡/null 外乡人/null 外事/null 外事处/null 外事活动/null 外事知识/null 外交/null 外交上/null 外交事务/null 外交代表/null 外交关系/null 外交关系理事会/null 外交史/null 外交团/null 外交大臣/null 外交学院/null 外交官/null 外交家/null 外交庇护/null 外交手腕/null 外交政策/null 外交机构/null 外交活动/null 外交特权/null 外交界/null 外交谋略/null 外交辞令/null 外交部长/null 外交风波/null 外亲内疏/null 外人/null 外企/null 外传/null 外伤/null 外伤学/null 外伸/null 外侧/null 外侧沟/null 外侧裂/null 外侧裂周区/null 外侧裂周围/null 外侨/null 外侮/null 外借/null 外债/null 外倾/null 外八字脚/null 外八字腿/null 外公/null 外公切线/null 外典写作/null 外军/null 外出/null 外出用/null 外出血/null 外出访问/null 外分泌/null 外分泌腺/null 外切多边形/null 外刚内柔/null 外力/null 外立面/null 外办/null 外功/null 外加/null 外加剂/null 外加附件/null 外务/null 外务员/null 外务省/null 外务部/null 外劳/null 外勤/null 外包/null 外包装/null 外化/null 外区/null 外协/null 外单位/null 外卖/null 外厂/null 外厕/null 外县/null 外史/null 外号/null 外合里应/null 外向/null 外向型/null 外向型经济/null 外听道/null 外商/null 外商投资企业/null 外商独资企业/null 外商直接投资/null 外因/null 外因论/null 外围/null 外国/null 外国专家/null 外国产/null 外国人/null 外国人居住证明/null 外国公司/null 外国化/null 外国商人/null 外国媒体/null 外国投资/null 外国投资者/null 外国旅游者/null 外国电影/null 外国血统/null 外国评论/null 外国话/null 外国语/null 外国货/null 外国资本/null 外圆内方/null 外圈/null 外在/null 外在超越/null 外地/null 外地人/null 外场/null 外型/null 外城/null 外埔/null 外埔乡/null 外域/null 外埠/null 外墙/null 外壁/null 外壳/null 外太空/null 外头/null 外夺/null 外套/null 外姓/null 外婆/null 外媒/null 外子/null 外存/null 外孙/null 外孙女/null 外孙女儿/null 外孙子/null 外客/null 外室/null 外家/null 外宽内忌/null 外宽内深/null 外宾/null 外宿/null 外寄生/null 外寇/null 外小腿/null 外层/null 外层空间/null 外屋/null 外展/null 外展神经/null 外岛/null 外岸/null 外巧内嫉/null 外差/null 外差式/null 外币/null 外币流通/null 外市/null 外带/null 外延/null 外开/null 外引内联/null 外弛/null 外弦/null 外强中干/null 外形/null 外形上/null 外征/null 外径/null 外御其侮/null 外心/null 外快/null 外患/null 外愚内智/null 外感/null 外戚/null 外手/null 外扬/null 外挂程式/null 外接/null 外接圆/null 外推/null 外推法/null 外插法/null 外援/null 外搭程式/null 外敌/null 外教/null 外敷/null 外文/null 外文版/null 外文系/null 外斜肌/null 外方/null 外族/null 外星/null 外星人/null 外显/null 外景/null 外来/null 外来人/null 外来干涉/null 外来成语/null 外来投资/null 外来物/null 外来物种/null 外来者/null 外来词/null 外来语/null 外来货/null 外果皮/null 外柔内刚/null 外查/null 外校/null 外框/null 外欠/null 外比/null 外气层/null 外水/null 外汇/null 外汇储备/null 外汇券/null 外汇市场/null 外汇资金/null 外沿/null 外泄/null 外洋/null 外活/null 外流/null 外海/null 外渗/null 外港/null 外源/null 外溢/null 外滩/null 外激素/null 外焰/null 外照射/null 外环线/null 外生/null 外甥/null 外甥女/null 外甥女婿/null 外甥媳妇/null 外用/null 外电/null 外电路/null 外界/null 外界人士/null 外痔/null 外皮/null 外盖/null 外相/null 外省/null 外看/null 外眼角/null 外码/null 外祖/null 外祖母/null 外祖父/null 外祸/null 外科/null 外科医生/null 外科学/null 外科手术/null 外积/null 外稃/null 外空/null 外籍/null 外籍劳工/null 外籍华人/null 外线/null 外经/null 外经部/null 外罩/null 外翻/null 外耳/null 外耳道/null 外耳门/null 外肾/null 外胎/null 外胚叶/null 外胚层/null 外舅/null 外蒙/null 外蒙古/null 外行/null 外行人/null 外行星/null 外行看热闹/null 外衣/null 外表/null 外表上/null 外袍/null 外观/null 外观上/null 外观设计/null 外角/null 外设/null 外话/null 外语/null 外调/null 外貌/null 外财/null 外货/null 外质膜/null 外购/null 外贸/null 外贸体制/null 外贸出口/null 外贸逆差/null 外贸部/null 外贸顺差/null 外贾/null 外资/null 外资企业/null 外路/null 外踝/null 外转/null 外轮/null 外边/null 外边儿/null 外迁/null 外运/null 外送/null 外逃/null 外遇/null 外道/null 外邦人/null 外部/null 外部环境/null 外部联系/null 外部设备/null 外部连接/null 外部链接/null 外郭城/null 外钞/null 外销/null 外销量/null 外错角/null 外长/null 外间/null 外阴/null 外阴部/null 外院/null 外露/null 外面/null 外物/null 外面儿光/null 外面性/null 外项/null 外首/null 外骛/null 外骨骼/null 外高加索/null 外鹜/null 夙世冤家/null 夙仇/null 夙兴夜寐/null 夙夜/null 夙夜不懈/null 夙夜为媒/null 夙夜匪懈/null 夙夜在公/null 夙嫌/null 夙心往志/null 夙志/null 夙愿/null 夙愿以偿/null 夙愿得偿/null 夙敌/null 夙日/null 夙昔/null 夙诺/null 多一事不如少一事/null 多一事不如省一事/null 多一倍/null 多一半/null 多万/null 多上/null 多个/null 多中心/null 多为/null 多久/null 多么/null 多义/null 多义关系/null 多义字/null 多义性/null 多义词/null 多了/null 多事/null 多事之秋/null 多于/null 多亏/null 多云/null 多云转阴/null 多交/null 多产/null 多产性/null 多人/null 多人会谈室/null 多人对策/null 多付/null 多以/null 多价/null 多任务/null 多伊尔/null 多会儿/null 多伦/null 多伦多/null 多位/null 多位数/null 多余/null 多佛/null 多佛尔/null 多例/null 多侧面/null 多俊/null 多倍体/null 多倍体植物/null 多值/null 多值函数/null 多做/null 多做实事/null 多元/null 多元不饱和脂肪酸/null 多元化/null 多元宇宙/null 多元性/null 多元文化主义/null 多元论/null 多元酯/null 多党/null 多党制/null 多党合作制/null 多党选举/null 多凶少吉/null 多分/null 多列/null 多则/null 多利/null 多力多滋/null 多办/null 多办一些实事/null 多办实事/null 多功/null 多功能/null 多功能表/null 多加/null 多加小心/null 多动/null 多动症/null 多助/null 多劳/null 多劳多得/null 多半/null 多占/null 多即/null 多卷/null 多历年所/null 多发/null 多发性硬化症/null 多发病/null 多变/null 多变化/null 多口/null 多口相声/null 多口词/null 多可/null 多台/null 多叶/null 多吃多占/null 多名/null 多向/null 多含/null 多听/null 多咱/null 多哈/null 多哈回合/null 多哥/null 多嘴/null 多嘴多舌/null 多嘴饶舌/null 多国/null 多国公司/null 多国籍/null 多址/null 多块/null 多塞/null 多士/null 多处/null 多多/null 多多保重/null 多多少少/null 多多益办/null 多多益善/null 多多马/null 多大/null 多大点事/null 多天/null 多头/null 多好/null 多如牛毛/null 多妻/null 多妻制/null 多姿/null 多姿多彩/null 多娇/null 多媒体/null 多媒体资讯/null 多嫌/null 多子/null 多子多福/null 多孔/null 多孔动物/null 多孔性/null 多孔材料/null 多孔蕈/null 多字节/null 多学科/null 多宝鱼/null 多家/null 多宽/null 多寡/null 多对/null 多对一/null 多少/null 多少年/null 多少年如一日/null 多少年来/null 多少有些/null 多尔/null 多尔衮/null 多层/null 多层复/null 多层复迭/null 多层大厦/null 多层彩色感光材料/null 多层材/null 多层次/null 多层次分析模型/null 多层面/null 多山/null 多山地区/null 多岁/null 多峰/null 多工/null 多工作业/null 多工化/null 多工器/null 多工运作/null 多巧/null 多巴胺/null 多幕剧/null 多平台/null 多年/null 多年来/null 多年生/null 多广/null 多弹头/null 多形/null 多形式/null 多形核白细胞/null 多彩/null 多彩多姿/null 多得/null 多得多/null 多得是/null 多心/null 多快/null 多快好省/null 多思/null 多情/null 多愁/null 多愁善感/null 多愁多病/null 多感/null 多手多脚/null 多才/null 多才多艺/null 多报/null 多拿/null 多指/null 多收/null 多放/null 多数/null 多数人/null 多数党/null 多数决/null 多文为富/null 多方/null 多方位/null 多方面/null 多旋律/null 多日/null 多日赛/null 多早晚/null 多时/null 多明尼加/null 多明尼加共和国/null 多星/null 多普勒/null 多普勒效应/null 多普达/null 多晶体/null 多晶硅/null 多月/null 多材多艺/null 多束/null 多条/null 多极/null 多极化/null 多果实/null 多树木/null 多样/null 多样化/null 多样性/null 多根/null 多栽花少栽刺/null 多档/null 多模/null 多模光纤/null 多模块/null 多次/null 多此一举/null 多毛/null 多民族/null 多民族国家/null 多氯联苯/null 多水/null 多水分/null 多汁/null 多汁液/null 多沼地/null 多沼泽/null 多波段/null 多洞/null 多派/null 多渠道/null 多源/null 多灯/null 多灾多难/null 多点/null 多烦/null 多特蒙德/null 多瑙/null 多瑙河/null 多瓣蒜/null 多瓦/null 多生/null 多用/null 多用户/null 多用途/null 多留/null 多疑/null 多病/null 多的/null 多目的/null 多相/null 多看/null 多石/null 多礼/null 多神/null 多神教/null 多神论/null 多神论者/null 多福/null 多种/null 多种多样/null 多种子/null 多种形式/null 多种经营/null 多种语言/null 多种语言支持/null 多站/null 多站地址/null 多端/null 多端中继器/null 多端寡要/null 多算/null 多管/null 多管闲事/null 多篇/null 多米/null 多米尼克/null 多米尼加/null 多米尼加共和国/null 多米尼加联邦/null 多米诺/null 多米诺骨牌/null 多类/null 多粒/null 多粒子/null 多粒子系统/null 多糖/null 多糖症/null 多糖类/null 多累/null 多级/null 多级火箭/null 多线程/null 多细/null 多细胞/null 多细胞生物/null 多给/null 多维/null 多美/null 多者/null 多而/null 多聚糖/null 多育/null 多肽/null 多肽连/null 多胎/null 多胎妊娠/null 多胚生殖/null 多胞形/null 多脂/null 多脂肪/null 多腺染色体/null 多臂机/null 多至/null 多舛/null 多色/null 多艺/null 多节/null 多花/null 多菲什/null 多蒸气/null 多蒸汽/null 多藏厚亡/null 多虫/null 多血性/null 多行不义必自毙/null 多见/null 多见于/null 多角/null 多角体/null 多角形/null 多解/null 多言/null 多言或中/null 多言数穷/null 多言繁称/null 多计/null 多许少与/null 多词/null 多话/null 多语/null 多语言/null 多调性/null 多谋善断/null 多谢/null 多谢光临/null 多财善贾/null 多贱寡贵/null 多费/null 多赚/null 多趣/null 多足/null 多足动物/null 多足类/null 多路/null 多路径/null 多路通信/null 多轨/null 多轮/null 多边/null 多边协定/null 多边合作/null 多边形/null 多边条约/null 多边贸易/null 多边贸易谈判/null 多达/null 多远/null 多退/null 多道/null 多那太罗/null 多部/null 多酸/null 多醣/null 多采/null 多重/null 多重国籍/null 多重性/null 多量/null 多金属/null 多针刺/null 多钩/null 多钱善贾/null 多铧犁/null 多销/null 多长/null 多闻天/null 多闻强记/null 多闻而志之/null 多闻阙疑/null 多难/null 多难兴邦/null 多雨/null 多雪/null 多雾/null 多面/null 多面体/null 多面手/null 多面角/null 多音/null 多音多义字/null 多音字/null 多音节/null 多音节词/null 多页/null 多项/null 多项式/null 多项式方程/null 多项式方程组/null 多顾虑/null 多领/null 多频/null 多风/null 多食症/null 多香果/null 多高/null 多齿/null 夜不归宿/null 夜不成眠/null 夜不能寐/null 夜不闭户/null 夜以接日/null 夜以继日/null 夜以继昼/null 夜作/null 夜儿个/null 夜光/null 夜光云/null 夜光虫/null 夜光表/null 夜分/null 夜勤/null 夜半/null 夜半三更/null 夜叉/null 夜场/null 夜壶/null 夜夜/null 夜大/null 夜大学/null 夜宵/null 夜宵儿/null 夜尿症/null 夜工/null 夜市/null 夜幕/null 夜幕降临/null 夜店/null 夜总会/null 夜战/null 夜招待酒会/null 夜明珠/null 夜晚/null 夜景/null 夜曲/null 夜月花朝/null 夜来/null 夜来香/null 夜枭/null 夜校/null 夜消/null 夜深/null 夜深人静/null 夜游/null 夜游神/null 夜猫/null 夜猫子/null 夜班/null 夜生活/null 夜的/null 夜盗/null 夜盲/null 夜盲症/null 夜短/null 夜礼服/null 夜神仙/null 夜祷/null 夜空/null 夜航/null 夜色/null 夜色苍茫/null 夜莺/null 夜蛾/null 夜行/null 夜行军/null 夜行性/null 夜行昼伏/null 夜行被绣/null 夜袭/null 夜视/null 夜视仪/null 夜视器材/null 夜视技术/null 夜视镜/null 夜警/null 夜话/null 夜读/null 夜读拾零/null 夜课/null 夜谈/null 夜贼/null 夜车/null 夜郎/null 夜郎自大/null 夜里/null 夜长/null 夜长梦多/null 夜闭/null 夜间/null 夜间部/null 夜阑/null 夜阑人静/null 夜阑珊/null 夜雨对床/null 夜雾/null 夜静更深/null 夜静更长/null 夜静更阑/null 夜餐/null 夜饭/null 夜香木/null 夜鸟/null 夜鹭/null 夜鹰/null 够不着/null 够了/null 够交情/null 够做/null 够到/null 够刺激/null 够劲儿/null 够受/null 够受的/null 够呛/null 够味/null 够味儿/null 够啦/null 够多/null 够大/null 够得着/null 够忍/null 够意思/null 够戗/null 够数/null 够时/null 够朋友/null 够本/null 够标准/null 够格/null 够用/null 够瞧/null 够瞧的/null 够量/null 夤夜/null 夤缘/null 夤缘攀附/null 夥伴/null 夥计/null 夥颐/null 大一/null 大一些/null 大一统/null 大一统志/null 大丁草/null 大丈夫/null 大丈夫能屈能伸/null 大三/null 大三元/null 大三和弦/null 大三度/null 大不一样/null 大不列蹀/null 大不列颠/null 大不列颠岛/null 大不如前/null 大不相同/null 大不里士/null 大不韪/null 大专/null 大专生/null 大专院校/null 大业/null 大丛林/null 大东/null 大东亚共荣圈/null 大东区/null 大个/null 大个儿/null 大个子/null 大中企业/null 大中华区/null 大中型/null 大中型项目/null 大中城市/null 大中学校/null 大中学生/null 大丰/null 大丸药/null 大为/null 大为不满/null 大为吃惊/null 大为惊异/null 大为改观/null 大为激动/null 大主教/null 大丽花/null 大举/null 大久保/null 大久保利通/null 大义/null 大义凛然/null 大义灭亲/null 大乌苏里岛/null 大乌鸦/null 大乘/null 大书/null 大书特书/null 大事/null 大事不糊涂/null 大事化小/null 大事去矣/null 大事年表/null 大事纪/null 大事记/null 大二/null 大于/null 大五码/null 大五趾跳鼠/null 大五金/null 大亚湾/null 大亨/null 大人/null 大人不记小人过/null 大人先生/null 大人国/null 大人物/null 大人虎变/null 大仁大义/null 大仙/null 大仲马/null 大件/null 大众/null 大众传播/null 大众化/null 大众媒介/null 大众捷运/null 大众文化/null 大众文学/null 大众汽车/null 大伙/null 大伙儿/null 大会/null 大会堂/null 大会报告起草人/null 大伟/null 大伤元气/null 大伤脑筋/null 大伦敦地区/null 大伯/null 大伯子/null 大佐/null 大体/null 大体上/null 大体相当/null 大体而言/null 大体说来/null 大余/null 大佛/null 大作/null 大佬/null 大使/null 大使级/null 大使馆/null 大侃/null 大侠/null 大便/null 大便干燥/null 大便秘结/null 大俄罗斯主义/null 大修/null 大修道院/null 大修道院长/null 大做/null 大做文章/null 大傻瓜/null 大儒/null 大元大一统志/null 大元帅/null 大先知书/null 大全/null 大公/null 大公司/null 大公国/null 大公国际/null 大公报/null 大公无私/null 大关/null 大关节目/null 大兴/null 大兴土木/null 大兴安岭/null 大兴安岭地区/null 大兴安岭山脉/null 大兴问罪之师/null 大兵/null 大兵团/null 大典/null 大内/null 大内乡/null 大写/null 大写字母/null 大写锁定/null 大军/null 大军区/null 大农园/null 大农场/null 大冲/null 大冶/null 大凡/null 大凡粗知/null 大出/null 大出其汗/null 大出血/null 大出风头/null 大刀/null 大刀会/null 大刀阔斧/null 大分县/null 大分子/null 大分界岭/null 大刑/null 大利/null 大利拉/null 大别山/null 大别山脉/null 大剌剌/null 大前天/null 大前年/null 大前提/null 大前题/null 大剪刀/null 大副/null 大力/null 大力加强/null 大力发展/null 大力士/null 大力开展/null 大力推广/null 大力提高/null 大力支持/null 大力水手/null 大力神/null 大劝脉/null 大办/null 大功/null 大功告成/null 大功毕成/null 大功率/null 大加/null 大加那利岛/null 大动/null 大动干戈/null 大动肝火/null 大动脉/null 大势/null 大势已去/null 大势所趋/null 大势至菩萨/null 大勇若怯/null 大包/null 大包大揽/null 大包干/null 大化/null 大化县/null 大匠不斫/null 大区/null 大千/null 大千世界/null 大半/null 大半截/null 大半辈子/null 大协作/null 大卖场/null 大卡/null 大卫/null 大卫・米利班德/null 大卫・艾登堡/null 大卫营和约/null 大印/null 大厂/null 大厂县/null 大厅/null 大厦/null 大厦将倾/null 大厦栋梁/null 大厨/null 大发/null 大发宏论/null 大发慈悲/null 大发雷霆/null 大叔/null 大受/null 大受欢迎/null 大变/null 大变动/null 大变革/null 大口/null 大口井/null 大口径/null 大口瓶/null 大只/null 大叫/null 大可不必/null 大叶性肺炎/null 大叶杨/null 大叶桉/null 大号/null 大司农/null 大司马/null 大吃/null 大吃一惊/null 大吃二喝/null 大吃大喝/null 大吃苦头/null 大合唱/null 大吉/null 大吉大利/null 大同/null 大同乡/null 大同书/null 大同区/null 大同地区/null 大同小异/null 大同思想/null 大名/null 大名鼎鼎/null 大后天/null 大后年/null 大后方/null 大吏/null 大君主/null 大吞噬细胞/null 大含细入/null 大吵大闹/null 大吹/null 大吹大擂/null 大吹法螺/null 大员/null 大呼小叫/null 大呼拉尔/null 大和/null 大哗/null 大哥/null 大哥大/null 大哭/null 大唐/null 大唐狄公案/null 大唐芙蓉园/null 大唐西域记/null 大喊/null 大喊大叫/null 大喜/null 大喜过望/null 大喝/null 大喝一声/null 大嗓/null 大嘴/null 大器/null 大器晚成/null 大噪/null 大嚷/null 大嚼/null 大四/null 大团圆/null 大团结/null 大园/null 大园乡/null 大国/null 大国主义/null 大国家党/null 大国沙文主义/null 大圆/null 大圆圈/null 大圣/null 大地/null 大地主/null 大地为席/null 大地之歌/null 大地回春/null 大地图/null 大地洞/null 大地测量/null 大地测量学/null 大地线/null 大地震/null 大场鸫/null 大坂/null 大坏蛋/null 大坑/null 大块/null 大块头/null 大块文章/null 大块朵颐/null 大坝/null 大型/null 大型企业/null 大型强子对撞机/null 大型机/null 大型项目/null 大城/null 大城乡/null 大城市/null 大埔/null 大埔乡/null 大埤/null 大埤乡/null 大堂/null 大堆/null 大堆栈/null 大堡礁/null 大堤/null 大增/null 大壑/null 大声/null 大声一点/null 大声叫/null 大声喊叫/null 大声嚷/null 大声点/null 大声疾呼/null 大声笑/null 大声说/null 大声说话/null 大壶/null 大处/null 大处着眼/null 大处落墨/null 大夏/null 大外/null 大多/null 大多功能/null 大多数/null 大多数人/null 大多数情况下/null 大夥/null 大大/null 大大咧咧/null 大大小小/null 大大方方/null 大大落落/null 大大高于/null 大天使/null 大天幕/null 大夫/null 大失/null 大失人望/null 大失所望/null 大失败/null 大头/null 大头在后头/null 大头瘟/null 大头目/null 大头菜/null 大头贴/null 大头针/null 大头钉/null 大头鱼/null 大夼/null 大夼镇/null 大奖/null 大奖牌/null 大奖章/null 大奖赛/null 大套/null 大奸似忠/null 大好/null 大好事/null 大好形势/null 大好时光/null 大妈/null 大姐/null 大姑/null 大姑娘/null 大姑子/null 大姓/null 大姚/null 大姨/null 大姨妈/null 大姨子/null 大娘/null 大婶/null 大婶儿/null 大媒/null 大嫂/null 大字/null 大字报/null 大孝/null 大学/null 大学城/null 大学士/null 大学学科能力测验/null 大学本科/null 大学生/null 大学间/null 大学预科/null 大宁/null 大宅邸/null 大宇/null 大宇宙/null 大安/null 大安乡/null 大安区/null 大安的列斯/null 大安的列斯群岛/null 大宗/null 大官/null 大宛/null 大宝/null 大客车/null 大宪章/null 大宴会/null 大家/null 大家伙儿/null 大家庭/null 大家闺秀/null 大家风范/null 大家鼠/null 大容量/null 大富大贵/null 大富翁/null 大富豪/null 大寨/null 大寮/null 大寮乡/null 大寺院/null 大将/null 大将军/null 大尉/null 大小/null 大小三度/null 大小不一/null 大小不等/null 大小便/null 大小写/null 大小姐/null 大小年/null 大小相当/null 大少爷/null 大尽/null 大局/null 大屏幕/null 大展/null 大展宏图/null 大屠杀/null 大屠杀事件/null 大屯火山/null 大山/null 大山小山/null 大山洞/null 大山猫/null 大山谷州立大学/null 大屿山/null 大岛/null 大峡谷/null 大川/null 大巢菜/null 大巧若拙/null 大已/null 大巴/null 大布/null 大帅/null 大帆船/null 大师/null 大师傅/null 大帐幕/null 大帐篷/null 大幅/null 大幅度/null 大干/null 大干物议/null 大年/null 大年初一/null 大年夜/null 大庄园/null 大庄稼/null 大庆/null 大店/null 大度/null 大度包容/null 大度汪洋/null 大度豁达/null 大庭广众/null 大庸/null 大庾岭/null 大建/null 大开/null 大开斋/null 大开方便之门/null 大开眼界/null 大开绿灯/null 大弓/null 大弟/null 大张声势/null 大张挞伐/null 大张旗鼓/null 大形/null 大彻大悟/null 大得/null 大得以/null 大循环/null 大德/null 大忌/null 大志/null 大志若愚/null 大忙/null 大忙人/null 大快人心/null 大快朵颐/null 大怒/null 大总统/null 大恩/null 大恩大德/null 大恭/null 大悟/null 大患/null 大悦/null 大悬/null 大悲/null 大悲咒/null 大惊/null 大惊失色/null 大惊小怪/null 大惑/null 大惑不解/null 大意/null 大愚/null 大愚不灵/null 大愿地藏菩萨/null 大慈大悲/null 大慈恩寺/null 大憝/null 大戏/null 大成/null 大成功/null 大我/null 大战/null 大战略/null 大戟科/null 大户/null 大房/null 大手/null 大手大脚/null 大手笔/null 大才小用/null 大打出手/null 大扫除/null 大批/null 大批量/null 大把/null 大抓/null 大投资家/null 大抵/null 大拇哥/null 大拇指/null 大括号/null 大括弧/null 大拿/null 大指/null 大挫折/null 大捆/null 大捕头/null 大捷/null 大排档/null 大提/null 大提倡/null 大提琴/null 大提琴家/null 大提琴手/null 大搞/null 大搞特搞/null 大摆/null 大摇大摆/null 大操大办/null 大放光明/null 大放厥词/null 大放厥辞/null 大放异彩/null 大放悲声/null 大政/null 大政方针/null 大政翼賛会/null 大故/null 大敌/null 大敌当前/null 大教堂/null 大数/null 大数学家/null 大文蛤/null 大斋/null 大斋期/null 大斋节/null 大料/null 大斧/null 大新/null 大方/null 大方之家/null 大方向/null 大方广佛华严经/null 大方脉科/null 大旋涡/null 大族/null 大旗/null 大无畏/null 大日如来/null 大旨/null 大旱/null 大旱云霓/null 大旱望云霓/null 大明历/null 大星芹/null 大春/null 大昭寺/null 大是大非/null 大显威风/null 大显神通/null 大显身手/null 大智/null 大智如愚/null 大智慧/null 大智若愚/null 大曲/null 大曲酒/null 大月/null 大月支/null 大月氏/null 大有/null 大有人在/null 大有作为/null 大有可为/null 大有可观/null 大有好转/null 大有希望/null 大有径庭/null 大有文章/null 大有益处/null 大有裨益/null 大木片/null 大未必佳/null 大本/null 大本大宗/null 大本涅盘经/null 大本营/null 大札/null 大杀风景/null 大杂烩/null 大杂院/null 大杂院儿/null 大权/null 大权在握/null 大权旁落/null 大权独揽/null 大材小用/null 大村/null 大村乡/null 大杖则走小杖则受/null 大条/null 大杯/null 大板车/null 大林/null 大林镇/null 大枣/null 大枪/null 大柴旦/null 大柴旦行政区/null 大柴旦行政委员会/null 大柴旦镇/null 大树/null 大树乡/null 大树将军/null 大树菠萝/null 大校/null 大样/null 大根兰/null 大桅帆/null 大案/null 大案要案/null 大桥/null 大桶/null 大梁/null 大梦初醒/null 大检查/null 大棒/null 大棒政策/null 大椎穴/null 大楷/null 大楼/null 大概/null 大概其/null 大概是/null 大槌/null 大模型/null 大模大样/null 大款/null 大正/null 大步/null 大步流星/null 大步走/null 大武/null 大武乡/null 大武口/null 大武口区/null 大殓/null 大段/null 大殿/null 大比/null 大比目鱼/null 大毛/null 大氅/null 大民主/null 大民族主义/null 大气/null 大气候/null 大气儿/null 大气光/null 大气压/null 大气压力/null 大气压强/null 大气圈/null 大气学/null 大气层/null 大气层核试验/null 大气暖化/null 大气污染/null 大气环流/null 大气监测/null 大气磅礴/null 大气科学/null 大氧吧/null 大水/null 大汉/null 大汉族主义/null 大汗/null 大汗淋漓/null 大江/null 大江健三郎/null 大江南北/null 大沙河/null 大沙漠/null 大河/null 大油/null 大治/null 大沽口炮台/null 大沽炮台/null 大沿/null 大沿帽/null 大法/null 大法官/null 大法小廉/null 大泽乡起义/null 大洋/null 大洋中脊/null 大洋型地壳/null 大洋彼岸/null 大洋洲/null 大洋洲人/null 大洋间/null 大洞/null 大洞受苦/null 大洞吃苦/null 大洞穴/null 大洞难补/null 大洪水/null 大洲/null 大洼/null 大流星/null 大浦洞/null 大浦洞二/null 大浦洞二号/null 大浪/null 大海/null 大海捞针/null 大海沟/null 大海龟/null 大润发/null 大混乱/null 大清/null 大清帝国/null 大清早/null 大渡口/null 大渡河/null 大港/null 大湄公河次区域/null 大湄公河次区域合作/null 大湖/null 大湖乡/null 大湖区/null 大溜/null 大溪/null 大溪豆干/null 大溪镇/null 大满贯/null 大漆/null 大演说/null 大漠/null 大漩涡/null 大潮/null 大澈大悟/null 大瀑布/null 大火/null 大火灾/null 大灭绝/null 大灯/null 大灶/null 大灾/null 大灾之年/null 大灾难/null 大炮/null 大炮打蚊子/null 大烟/null 大烟囱/null 大热/null 大烹五鼎/null 大煞风景/null 大熊座/null 大熊猫/null 大熔炉/null 大爆炸/null 大爆破/null 大爱/null 大父/null 大爷/null 大片/null 大牌/null 大牙/null 大牢/null 大牲畜/null 大特/null 大犬座/null 大狒狒/null 大狱/null 大猩猩/null 大猫熊/null 大猾/null 大率/null 大王/null 大玩/null 大环/null 大班/null 大球/null 大理/null 大理岩/null 大理州/null 大理白族自治州/null 大理石/null 大理院/null 大生产运动/null 大用/null 大田/null 大田作物/null 大田市/null 大田广域市/null 大甲/null 大甲镇/null 大男大女/null 大男子主义/null 大男子主义者/null 大男小女/null 大略/null 大疮/null 大病/null 大瘟热/null 大白/null 大白于天下/null 大白天/null 大白熊犬/null 大白菜/null 大白话/null 大白鲨/null 大白鼠/null 大百科全书/null 大的/null 大盆/null 大盐/null 大盖帽/null 大盘子/null 大直若屈/null 大相径庭/null 大眼/null 大眼睛/null 大眼角/null 大眼贼/null 大眼镜蛇/null 大石块/null 大石桥/null 大砍刀/null 大砟/null 大破/null 大破坏/null 大破迷关/null 大碗/null 大礼/null 大礼堂/null 大礼拜/null 大礼服/null 大社/null 大社乡/null 大祥/null 大祥区/null 大祭司/null 大祸/null 大祸临头/null 大福不再/null 大禹/null 大秋/null 大秋作物/null 大秦/null 大端/null 大竹/null 大笑/null 大笑声/null 大笑话/null 大笔/null 大笔一挥/null 大笔如椽/null 大笔钱/null 大笨象/null 大等高线/null 大箐山/null 大管/null 大箱/null 大篆/null 大篷车/null 大米/null 大类/null 大粒/null 大粪/null 大系/null 大系统/null 大紫荆勋章/null 大纛高牙/null 大红/null 大红大紫/null 大红鼻子/null 大约/null 大约摸/null 大纪元/null 大纪元时报/null 大纲/null 大绝灭/null 大统/null 大罢工/null 大群/null 大老/null 大老婆/null 大老板/null 大老粗/null 大老远/null 大考/null 大而/null 大而化之/null 大而无当/null 大而言之/null 大耳/null 大联盟/null 大聚会/null 大肆/null 大肆攻击/null 大肆鼓/null 大肆鼓噪/null 大肚/null 大肚乡/null 大肚子/null 大肚子痞/null 大肚子经济/null 大肠/null 大肠杆菌/null 大肠炎/null 大肠癌/null 大肠菌/null 大股东/null 大胆/null 大胆妄为/null 大胜/null 大胡/null 大胡蜂/null 大能/null 大脑/null 大脑死亡/null 大脑比喻/null 大脑炎/null 大脑皮层/null 大脑脚/null 大脖子病/null 大脚/null 大腕/null 大腹便便/null 大腹子/null 大腹贾/null 大腿/null 大腿骨/null 大臣/null 大自然/null 大致/null 大致说来/null 大舅/null 大舅子/null 大舌头/null 大般涅盘经/null 大舵手/null 大船/null 大节/null 大花瓶/null 大花脸/null 大苏打/null 大英/null 大英博物馆/null 大英帝国/null 大英联合王国/null 大范围/null 大茴香/null 大茴香子/null 大草原/null 大荒/null 大荔/null 大获/null 大获全胜/null 大菜/null 大菱鲆/null 大萧条/null 大葱/null 大蒜/null 大蒜似/null 大蓟/null 大藏经/null 大虫/null 大虾/null 大蛇丸/null 大蜀/null 大蝾螈/null 大融炉/null 大螟/null 大行其道/null 大行政区/null 大行星/null 大街/null 大街小巷/null 大衣/null 大衣箱/null 大袋/null 大袋子/null 大袋鼠/null 大裂谷/null 大褂/null 大襟/null 大西/null 大西北/null 大西国/null 大西庇阿/null 大西洋/null 大西洋中脊/null 大西洋国/null 大西洋地区/null 大西洋宪章/null 大西洋洋中脊/null 大西洋联盟/null 大要/null 大观/null 大观区/null 大观园/null 大规模/null 大规模杀伤性武器/null 大解/null 大言/null 大言不惭/null 大言相骇/null 大计/null 大讲/null 大论/null 大词/null 大话/null 大话骰/null 大课/null 大调/null 大调动/null 大谈/null 大谈特谈/null 大谎/null 大谬/null 大谬不然/null 大谱儿/null 大豆/null 大豆胶/null 大豆蚜虫/null 大象/null 大财主/null 大贤/null 大贤虎变/null 大败/null 大货车/null 大贱卖/null 大费周章/null 大资产阶级/null 大赚/null 大赛/null 大赦/null 大赦国际/null 大起大落/null 大趋势/null 大足/null 大跃进/null 大跌/null 大跌市/null 大路/null 大路活/null 大路货/null 大踏步/null 大车/null 大车以载/null 大转变/null 大轰/null 大轰大嗡/null 大轴/null 大轴子/null 大轴戏/null 大辂椎轮/null 大辟/null 大辩不言/null 大辩若讷/null 大辱/null 大过/null 大运/null 大运河/null 大进化/null 大进大出/null 大连/null 大连外国语大学/null 大连理工大学/null 大逆/null 大逆不道/null 大逆无道/null 大选/null 大通/null 大通区/null 大通县/null 大逛/null 大道/null 大道理/null 大邑/null 大邱/null 大邱市/null 大邱广域市/null 大部/null 大部份/null 大部分/null 大部分地区/null 大部地区/null 大部头/null 大都/null 大都会/null 大都市/null 大都市地区/null 大都有/null 大酒宴/null 大酒杯/null 大酒瓶/null 大醇小疵/null 大醉/null 大里/null 大里市/null 大量/null 大量杀伤武器/null 大量生产/null 大釜/null 大钞/null 大钟/null 大钢琴/null 大钱/null 大锅/null 大锅菜/null 大锅饭/null 大错/null 大错特错/null 大错误/null 大锤/null 大键琴/null 大镕炉/null 大镰刀/null 大长今/null 大门/null 大门口/null 大门柱/null 大问题/null 大闹/null 大闹天宫/null 大队/null 大阪/null 大阪府/null 大阮/null 大阿姨/null 大陆/null 大陆会议/null 大陆同胞/null 大陆地区/null 大陆块/null 大陆坡/null 大陆封锁政策/null 大陆性/null 大陆性气候/null 大陆政策/null 大陆架/null 大陆漂移/null 大陆话/null 大陆间/null 大限/null 大限临头/null 大限到来/null 大院/null 大陪审团/null 大隐朝市/null 大难/null 大难不死/null 大难临头/null 大雁/null 大雁塔/null 大雄/null 大雄宝殿/null 大雅/null 大雅乡/null 大雅君子/null 大雨/null 大雨倾盆/null 大雨如注/null 大雷雨/null 大雾/null 大震荡/null 大霉/null 大青山/null 大静脉/null 大面/null 大面儿/null 大面积/null 大面纱/null 大革命/null 大韩帝国/null 大韩民国/null 大韩航空/null 大音阶/null 大项/null 大顺/null 大题小作/null 大颚/null 大额/null 大风/null 大风大浪/null 大风子/null 大风暴/null 大飞跃/null 大食/null 大餐/null 大饥/null 大饱口福/null 大饱眼福/null 大饼/null 大马/null 大马哈鱼/null 大马士革/null 大马士革李/null 大马金刀/null 大驾/null 大骂/null 大骚乱/null 大骨节病/null 大鱼/null 大鱼大肉/null 大鲵/null 大鲽鱼/null 大鳄/null 大鳞大马哈鱼/null 大鳞大麻哈鱼/null 大鸟/null 大鸣大放/null 大鸨/null 大鸿胪/null 大鹏/null 大鹏鸟/null 大鹿/null 大麦/null 大麦克/null 大麦克指数/null 大麦地/null 大麻/null 大麻哈鱼/null 大麻子/null 大麻里/null 大麻里乡/null 大麻风/null 大黄/null 大黄蜂/null 大黄鱼/null 大鼓/null 大鼓凉伞/null 大鼠/null 大鼻子/null 大齐/null 大龄/null 大龄青年/null 天上/null 天上人间/null 天上石麟/null 天上麒麟/null 天下/null 天下一家/null 天下为一/null 天下为公/null 天下为家/null 天下乌鸦一般黑/null 天下事/null 天下兴亡/null 天下大乱/null 天下大事/null 天下太平/null 天下归心/null 天下文宗/null 天下无敌/null 天下无难事/null 天下本无事/null 天下汹汹/null 天下没有不散的宴席/null 天下没有不散的筵席/null 天下第一/null 天下鼎沸/null 天不作美/null 天不怕地不怕/null 天不绝人/null 天与人归/null 天主/null 天主教/null 天主教会/null 天主教堂/null 天主教徒/null 天主的羔羊/null 天之骄子/null 天书/null 天云/null 天井/null 天京/null 天亮/null 天人/null 天人之际/null 天人关系/null 天人合一/null 天人感应/null 天人路隔/null 天从人愿/null 天付良缘/null 天仙/null 天价/null 天份/null 天伦/null 天伦之乐/null 天低吴楚/null 天佑吾人基业/null 天体/null 天体主义/null 天体仪/null 天体力学/null 天体图/null 天体学/null 天体演化学/null 天体物理/null 天体物理学/null 天体物理学家/null 天作之合/null 天使/null 天使学/null 天使报喜节/null 天使般/null 天似穹庐/null 天保九如/null 天候/null 天假因缘/null 天假良缘/null 天儿/null 天元区/null 天光/null 天兔座/null 天全/null 天公/null 天公不作美/null 天公作美/null 天公地道/null 天兰/null 天兵/null 天兵天将/null 天冠地屦/null 天冬氨酸/null 天冬苯丙二肽酯/null 天冬酰胺/null 天冷/null 天分/null 天前配/null 天动/null 天南地北/null 天南星/null 天南海北/null 天却/null 天台/null 天台乌药/null 天台宗/null 天台山/null 天各一方/null 天后/null 天后站/null 天呀/null 天周/null 天命/null 天命有归/null 天和/null 天哪/null 天啊/null 天国/null 天地/null 天地会/null 天地头/null 天地悬隔/null 天地玄黄/null 天地良心/null 天坛/null 天坛座/null 天城文/null 天堂/null 天堑/null 天塌地陷/null 天塔/null 天壤/null 天壤之判/null 天壤之别/null 天壤王郎/null 天外/null 天外来客/null 天大/null 天大地大/null 天女/null 天天/null 天天向上/null 天头/null 天夺之魄/null 天夺其魄/null 天女散花/null 天妇罗/null 天妒英才/null 天姿/null 天姿国色/null 天子/null 天子无戏言/null 天子门生/null 天字第一号/null 天孙娘娘/null 天宁/null 天宁区/null 天宇/null 天安/null 天安门/null 天安门事件/null 天安门城楼/null 天安门广场/null 天完/null 天官/null 天宝/null 天宫/null 天宫图/null 天寒/null 天寒地冻/null 天尊/null 天山/null 天山区/null 天山山脉/null 天峨/null 天峻/null 天崩地坼/null 天崩地裂/null 天工/null 天差地远/null 天师/null 天帝/null 天幕/null 天干/null 天平/null 天年/null 天年不遂/null 天幸/null 天底/null 天底下/null 天府/null 天府之国/null 天庭/null 天弓/null 天心/null 天心区/null 天快/null 天怒/null 天怒人怨/null 天性/null 天恩/null 天悬地隔/null 天悯/null 天惊/null 天惊石破/null 天愁地惨/null 天意/null 天成/null 天才/null 天才出自勤奋/null 天才论/null 天打/null 天择/null 天授/null 天授地设/null 天摇地转/null 天摧地塌/null 天敌/null 天数/null 天文/null 天文单位/null 天文台/null 天文坐标/null 天文学/null 天文学大成/null 天文学家/null 天文导航/null 天文数字/null 天文望远镜/null 天文钟/null 天文馆/null 天方/null 天方夜谭/null 天旋/null 天旋地转/null 天无二日/null 天无绝人之路/null 天日/null 天旱/null 天时/null 天时地利/null 天时地利人和/null 天明/null 天昏/null 天昏地惨/null 天昏地暗/null 天昏地黑/null 天星码头/null 天晓得/null 天晴/null 天暗/null 天有不测风云/null 天朝/null 天朝田亩制度/null 天末凉风/null 天机/null 天机不可泄漏/null 天机不可泄露/null 天机云锦/null 天权/null 天条/null 天枢/null 天枢星/null 天枰座/null 天柱/null 天桥/null 天桥区/null 天桥立/null 天梯/null 天棚/null 天楼/null 天气/null 天气图/null 天气形势/null 天气情况/null 天气状况/null 天气现象/null 天气真好/null 天气预报/null 天水/null 天水地区/null 天汉/null 天池/null 天沟/null 天河/null 天河区/null 天波/null 天津会议专条/null 天津外国语大学/null 天津大学/null 天津条约/null 天津环球金融中心/null 天涯/null 天涯咫尺/null 天涯地角/null 天涯比邻/null 天涯海角/null 天涯若比邻/null 天清日晏/null 天清气朗/null 天渊/null 天渊之别/null 天演/null 天演论/null 天潢贵胄/null 天火/null 天灵盖/null 天灵盖儿/null 天灾/null 天灾人祸/null 天灾地变/null 天灾地孽/null 天灾物怪/null 天炉座/null 天然/null 天然丝/null 天然免疫/null 天然堤/null 天然本地/null 天然杂交/null 天然林/null 天然树脂/null 天然桥/null 天然橡胶/null 天然毒素/null 天然气/null 天然气井/null 天然港/null 天然漆/null 天然照亮/null 天然磁铁/null 天然纤维/null 天然药物/null 天然铀/null 天燕座/null 天父/null 天爷/null 天牛/null 天狗/null 天狗螺/null 天狼座/null 天狼星/null 天猫座/null 天王/null 天王星/null 天玑/null 天球/null 天球仪/null 天理/null 天理不容/null 天理教/null 天理教起义/null 天理昭彰/null 天理昭昭/null 天理昭然/null 天理良心/null 天理难容/null 天琴座/null 天琴星座/null 天璇/null 天生/null 天生天杀/null 天生尤物/null 天生的一对/null 天电/null 天界/null 天疱疮/null 天皇/null 天盖/null 天相吉人/null 天真/null 天真无邪/null 天真活泼/null 天真烂漫/null 天知地知/null 天祝/null 天祝县/null 天神/null 天禀/null 天禄/null 天秤/null 天秤座/null 天穹/null 天空/null 天空辐射表/null 天穿日/null 天窗/null 天竹/null 天竺/null 天竺牡丹/null 天竺葵/null 天竺鼠/null 天等/null 天箭座/null 天篷/null 天籁/null 天级/null 天线/null 天线宝宝/null 天经地义/null 天缘凑合/null 天缘奇遇/null 天网恢恢/null 天网灰灰/null 天罗/null 天罗地网/null 天罡/null 天罡星/null 天翻/null 天翻地覆/null 天老儿/null 天职/null 天舟座/null 天良/null 天色/null 天芥菜/null 天花/null 天花乱坠/null 天花板/null 天花病毒/null 天花粉/null 天荒/null 天荒地老/null 天葬/null 天蓝/null 天蓝色/null 天蚕/null 天蚕蛾/null 天蛾/null 天蝎/null 天蝎座/null 天蝼/null 天蟹座/null 天行赤眼/null 天衣/null 天衣无缝/null 天要落雨/null 天覆地载/null 天诛/null 天诛地灭/null 天诱其衷/null 天说/null 天谴/null 天象/null 天象仪/null 天资/null 天赋/null 天赐/null 天赐良机/null 天趣/null 天足/null 天路历程/null 天车/null 天轴/null 天边/null 天造地设/null 天道/null 天道人事/null 天道好还/null 天道恢恢/null 天道无亲/null 天道无私/null 天道酬勤/null 天那水/null 天郎气清/null 天镇/null 天长/null 天长地久/null 天长地老/null 天长地远/null 天长日久/null 天门/null 天门冬/null 天门冬科/null 天阉/null 天阴/null 天际/null 天降/null 天险/null 天随人愿/null 天雨路滑/null 天雨顺延/null 天青/null 天青石/null 天青色/null 天顶/null 天顺/null 天香国色/null 天马行空/null 天骄/null 天高/null 天高地卑/null 天高地厚/null 天高地远/null 天高地迥/null 天高日远/null 天高气清/null 天高气爽/null 天高皇帝远/null 天魔/null 天鸽座/null 天鹅/null 天鹅座/null 天鹅湖/null 天鹅绒/null 天鹤座/null 天鹰座/null 天麻/null 天黑/null 天龙/null 天龙八部/null 天龙座/null 太上/null 太上忘情/null 太上皇/null 太上老君/null 太不像话/null 太不自量/null 太丘道广/null 太久/null 太仆/null 太仆寺/null 太仆寺卿/null 太仓/null 太仓一粟/null 太低/null 太俗/null 太保/null 太傅/null 太充足/null 太公/null 太公兵法/null 太公望/null 太公钓鱼/null 太公钓鱼愿者上钩/null 太冷/null 太凶了/null 太初/null 太医/null 太半/null 太原/null 太古/null 太古代/null 太古宙/null 太古洋行/null 太古界/null 太古菜/null 太史/null 太史令/null 太史公/null 太后/null 太君/null 太和/null 太和区/null 太和殿/null 太坏/null 太多/null 太大/null 太太/null 太太们/null 太奇/null 太好了/null 太妃/null 太妃糖/null 太妹/null 太婆/null 太子/null 太子丹/null 太子党/null 太子十三峰/null 太子太保/null 太子河区/null 太子港/null 太学/null 太守/null 太宗/null 太宽/null 太尉/null 太小/null 太少/null 太岁/null 太岁头上动土/null 太差/null 太师/null 太师椅/null 太常/null 太平/null 太平公主/null 太平区/null 太平天国/null 太平市/null 太平广记/null 太平御览/null 太平无象/null 太平梯/null 太平水缸/null 太平洋/null 太平洋区域/null 太平洋周边/null 太平洋宪章/null 太平洋战争/null 太平洋联合铁路/null 太平盛世/null 太平绅士/null 太平花/null 太平道/null 太平门/null 太平间/null 太平鼓/null 太平龙头/null 太庙/null 太康/null 太弱/null 太强/null 太忙/null 太快/null 太息/null 太慢/null 太早/null 太晚/null 太极/null 太极剑/null 太极图/null 太极图说/null 太极拳/null 太棒/null 太死/null 太液池/null 太深/null 太湖/null 太湖石/null 太热/null 太熟/null 太爷/null 太猛/null 太甚/null 太白/null 太白山/null 太白星/null 太白粉/null 太的/null 太监/null 太短/null 太石村/null 太祖/null 太穷/null 太空/null 太空人/null 太空学/null 太空战略/null 太空探索/null 太空服/null 太空梭/null 太空步/null 太空游/null 太空漫步/null 太空站/null 太空舞步/null 太空舱/null 太空船/null 太空行走/null 太空飞船/null 太空飞行/null 太简/null 太粗/null 太紧/null 太虚/null 太行/null 太行山/null 太行山脉/null 太谷/null 太贵/null 太软/null 太轻/null 太过/null 太近/null 太远/null 太重/null 太长/null 太阳/null 太阳仪/null 太阳光/null 太阳光柱/null 太阳公司/null 太阳历/null 太阳地儿/null 太阳帽/null 太阳年/null 太阳微系统公司/null 太阳报/null 太阳日/null 太阳时/null 太阳永不落/null 太阳活动/null 太阳灯/null 太阳灶/null 太阳炉/null 太阳照在桑干河上/null 太阳电池/null 太阳电池板/null 太阳眼镜/null 太阳社/null 太阳神/null 太阳神经丛/null 太阳神计划/null 太阳穴/null 太阳窗/null 太阳窝/null 太阳系/null 太阳翼/null 太阳能/null 太阳能板/null 太阳能电池/null 太阳轮/null 太阳辐射/null 太阳钟/null 太阳镜/null 太阳风/null 太阳鸟/null 太阳黑子/null 太阳黑子周/null 太阴/null 太阴历/null 太阿之柄/null 太阿倒持/null 太阿在握/null 太难/null 太高/null 太鲁阁/null 太鲁阁族/null 太麻里/null 太麻里乡/null 夫人/null 夫人裙带/null 夫余/null 夫君/null 夫唱妇随/null 夫妇/null 夫妇间/null 夫妻/null 夫妻反目/null 夫妻店/null 夫妻肺片/null 夫婿/null 夫子/null 夫子庙/null 夫子自道/null 夫座/null 夫权/null 夫琅和费/null 夫荣妻显/null 夫荣妻贵/null 夫贵妻荣/null 夭亡/null 夭夭/null 夭折/null 夭桃浓李/null 夭矫/null 央中/null 央元音/null 央及/null 央告/null 央托/null 央求/null 央行/null 央视国际/null 央财/null 夯具/null 夯土/null 夯土机/null 夯实/null 夯歌/null 夯汉/null 夯砣/null 夯雀先飞/null 失业/null 失业人数/null 失业率/null 失业者/null 失为/null 失主/null 失之/null 失之东隅/null 失之东隅收之桑榆/null 失之交臂/null 失之千里/null 失之毫厘/null 失事/null 失于/null 失仪/null 失传/null 失体统/null 失体面/null 失信/null 失修/null 失光泽/null 失利/null 失势/null 失单/null 失却/null 失去/null 失去意识/null 失口/null 失和/null 失土/null 失地/null 失坠/null 失声/null 失声症/null 失声痛哭/null 失失慌慌/null 失学/null 失守/null 失宜/null 失实/null 失宠/null 失密/null 失察/null 失常/null 失度/null 失张失志/null 失张失智/null 失当/null 失忆症/null 失态/null 失怙/null 失恃/null 失恋/null 失悔/null 失惊打怪/null 失意/null 失慎/null 失所/null 失手/null 失掉/null 失控/null 失措/null 失效/null 失效日期/null 失散/null 失敬/null 失时/null 失明/null 失望/null 失期/null 失机/null 失枕/null 失果/null 失查/null 失格/null 失检/null 失欢/null 失款/null 失步/null 失水/null 失火/null 失灵/null 失物/null 失物招领/null 失物认领/null 失盗/null 失真/null 失眠/null 失眠症/null 失着/null 失瞻/null 失礼/null 失神/null 失神落魄/null 失禁/null 失窃/null 失笑/null 失策/null 失算/null 失约/null 失纵/null 失而复得/null 失职/null 失聪/null 失能性毒剂/null 失脚/null 失色/null 失节/null 失范/null 失落/null 失落感/null 失血/null 失血性贫血/null 失衡/null 失言/null 失计/null 失认/null 失记/null 失语/null 失语症/null 失误/null 失诸交臂/null 失读症/null 失调/null 失责/null 失败/null 失败为成功之母/null 失败主义/null 失败乃成功之母/null 失败是成功之母/null 失败者/null 失足/null 失足青年/null 失踪/null 失踪者/null 失身/null 失身分/null 失迎/null 失迷/null 失速/null 失道/null 失道寡助/null 失配/null 失重/null 失错/null 失闪/null 失陪/null 失陷/null 失面子/null 失音/null 失风/null 失马亡羊/null 失魂/null 失魂丧魄/null 失魂落魄/null 头一/null 头一回/null 头一年/null 头一次/null 头上/null 头上安头/null 头中/null 头人/null 头份/null 头份镇/null 头伏/null 头伙/null 头会箕敛/null 头会箕赋/null 头信息/null 头像/null 头儿/null 头儿脑儿/null 头兜/null 头冠/null 头刷/null 头功/null 头功起衅/null 头半天/null 头半天儿/null 头发/null 头发油/null 头发胡子一把抓/null 头口/null 头号/null 头号字/null 头名/null 头向前/null 头回/null 头囟儿/null 头城/null 头城镇/null 头大/null 头天/null 头头/null 头头儿/null 头头是道/null 头奖/null 头套/null 头子/null 头字语/null 头孢拉定/null 头孢菌/null 头孢菌素/null 头家/null 头寸/null 头小/null 头尾/null 头屋/null 头屋乡/null 头屑/null 头屯河/null 头屯河区/null 头巾/null 头带/null 头年/null 头座/null 头异/null 头彩/null 头悬梁/null 头戴/null 头手枷/null 头挡/null 头数/null 头文字/null 头昏/null 头昏目晕/null 头昏目眩/null 头昏眼晕/null 头昏眼暗/null 头昏眼花/null 头昏脑涨/null 头昏脑眩/null 头昏脑胀/null 头昏脑闷/null 头晌/null 头晕/null 头晕目眩/null 头晕眼昏/null 头晕眼花/null 头晕脑涨/null 头晕脑胀/null 头朝下/null 头期款/null 头条/null 头条新闻/null 头梢自领/null 头款/null 头水/null 头油/null 头版/null 头版头条/null 头牌/null 头状/null 头状花序/null 头生/null 头疼/null 头疼脑热/null 头痒搔跟/null 头痛/null 头痛医头/null 头痛治头足痛治足/null 头痛灸头脚痛医脚/null 头癣/null 头皮/null 头皮屑/null 头盔/null 头盖/null 头盖帽/null 头盖骨/null 头目/null 头眩眼花/null 头短/null 头破血出/null 头破血流/null 头票/null 头童齿豁/null 头端/null 头等/null 头等大事/null 头等舱/null 头筹/null 头箍/null 头箍儿/null 头索类/null 头纱/null 头绪/null 头绳/null 头罩/null 头羊/null 头胀/null 头胎/null 头胸部/null 头脑/null 头脑发热/null 头脑发胀/null 头脑好/null 头脑清楚/null 头脑清醒/null 头脑简单四肢发达/null 头脸/null 头脸儿/null 头舱/null 头茬/null 头菜/null 头虱/null 头衔/null 头角/null 头角峥嵘/null 头角崭然/null 头足异处/null 头足异所/null 头足纲/null 头路/null 头道/null 头部/null 头里/null 头重/null 头重脚轻/null 头重足轻/null 头针疗法/null 头钱/null 头阵/null 头陀/null 头难/null 头雁/null 头面/null 头面人物/null 头韵/null 头顶/null 头颅/null 头领/null 头颈/null 头额/null 头风/null 头饰/null 头马/null 头骨/null 头骨学/null 夷为平地/null 夷人/null 夷平/null 夷戮/null 夷旷/null 夷洲/null 夷灭/null 夷然/null 夷犹/null 夷狄/null 夷门/null 夷险一节/null 夷陵/null 夷陵区/null 夸克/null 夸口/null 夸嘴/null 夸多斗靡/null 夸大/null 夸大之词/null 夸大其词/null 夸大狂/null 夸夸/null 夸夸其谈/null 夸夸而谈/null 夸奖/null 夸她/null 夸张/null 夸张者/null 夸强说会/null 夸强道会/null 夸海口/null 夸父追日/null 夸父逐日/null 夸特/null 夸示/null 夸称/null 夸耀/null 夸能斗志/null 夸脱/null 夸诞/null 夸赞/null 夸饰/null 夹七夹八/null 夹上/null 夹丝玻璃/null 夹了/null 夹住/null 夹克/null 夹入/null 夹具/null 夹击/null 夹剪/null 夹叙/null 夹塞儿/null 夹套/null 夹子/null 夹尾巴/null 夹层/null 夹层玻璃/null 夹山国家森林公园/null 夹山寺/null 夹带/null 夹当/null 夹当儿/null 夹心/null 夹批/null 夹持/null 夹指/null 夹攻/null 夹断/null 夹杂/null 夹板/null 夹板气/null 夹棉衣/null 夹棍/null 夹江/null 夹注/null 夹牢/null 夹生/null 夹生饭/null 夹痛/null 夹盘/null 夹着/null 夹石/null 夹竹桃/null 夹紧/null 夹缝/null 夹肝/null 夹肢窝/null 夹背/null 夹菜/null 夹衣/null 夹袄/null 夹袋中人物/null 夹袍/null 夹被/null 夹角/null 夹起/null 夹起尾巴/null 夹道/null 夹道欢迎/null 夹针/null 夹钳/null 夹馅/null 夺了/null 夺人/null 夺佃/null 夺偶/null 夺冠/null 夺占/null 夺去/null 夺取/null 夺命/null 夺回/null 夺在/null 夺席谈经/null 夺得/null 夺掉/null 夺权/null 夺标/null 夺爱/null 夺目/null 夺眶而出/null 夺美/null 夺胎换骨/null 夺走/null 夺过/null 夺金/null 夺门而出/null 夺魁/null 夺魂/null 奄列/null 奄奄/null 奄奄一息/null 奄忽/null 奄然而逝/null 奇丑/null 奇丑无比/null 奇丽/null 奇事/null 奇人/null 奇伎淫巧/null 奇伟/null 奇偶/null 奇偶性/null 奇兵/null 奇函数/null 奇剧/null 奇功/null 奇努克/null 奇勋/null 奇南香/null 奇台/null 奇境/null 奇墙外汉/null 奇士/null 奇奇怪怪/null 奇妙/null 奇寒/null 奇山异水/null 奇峰/null 奇崛/null 奇巧/null 奇幻/null 奇庞福艾/null 奇异/null 奇异夸克/null 奇异幻想/null 奇异果/null 奇异笔/null 奇形怪状/null 奇彩/null 奇心/null 奇志/null 奇思/null 奇怪/null 奇都/null 奇情/null 奇想/null 奇想家/null 奇才/null 奇技/null 奇技淫巧/null 奇招/null 奇效/null 奇数/null 奇文/null 奇文共赏/null 奇文瑰句/null 奇昆古尼亚热/null 奇昆古尼亚病毒/null 奇景/null 奇术/null 奇校验/null 奇热/null 奇特/null 奇特性/null 奇珍/null 奇珍异宝/null 奇瑞/null 奇瓦瓦/null 奇痒/null 奇祸/null 奇绝/null 奇缘/null 奇缺/null 奇羡/null 奇耻大辱/null 奇能/null 奇能异士/null 奇花异卉/null 奇花异草/null 奇葩/null 奇葩异卉/null 奇袭/null 奇袭者/null 奇装异服/null 奇观/null 奇览/null 奇解/null 奇言/null 奇诗/null 奇语/null 奇谈/null 奇谈怪论/null 奇谋/null 奇谲/null 奇貌/null 奇货/null 奇货可居/null 奇趣/null 奇蹄目/null 奇蹄类/null 奇迹/null 奇迹般地/null 奇遇/null 奇门遁甲/null 奇闻/null 奇闻怪事/null 奇零/null 奈何/null 奈何以死惧之/null 奈曼/null 奈特/null 奈秒/null 奈米/null 奈良/null 奈良县/null 奈良市/null 奈良时代/null 奉上/null 奉上一函/null 奉为/null 奉为楷模/null 奉为神/null 奉令/null 奉令承教/null 奉公/null 奉公不阿/null 奉公克己/null 奉公守法/null 奉公执法/null 奉养/null 奉劝/null 奉化/null 奉召/null 奉告/null 奉命/null 奉命唯谨/null 奉天/null 奉天承运/null 奉头鼠窜/null 奉如神明/null 奉悉/null 奉扬仁风/null 奉承/null 奉承者/null 奉承讨好/null 奉新/null 奉旨/null 奉此/null 奉献/null 奉献物/null 奉献礼/null 奉献精神/null 奉献者/null 奉现/null 奉申贺敬/null 奉祀/null 奉系/null 奉系军阀/null 奉约/null 奉职/null 奉节/null 奉若神明/null 奉行/null 奉行故事/null 奉行者/null 奉诏/null 奉贤/null 奉赠/null 奉辛比克党/null 奉辞伐罪/null 奉迎/null 奉还/null 奉送/null 奉道斋僧/null 奉陪/null 奉陪到底/null 奋不顾生/null 奋不顾身/null 奋力/null 奋力冲刺/null 奋力拼搏/null 奋勇/null 奋勇当先/null 奋勉/null 奋发/null 奋发向上/null 奋发图强/null 奋发有为/null 奋发蹈厉/null 奋战/null 奋斗/null 奋斗不息/null 奋斗到底/null 奋斗目标/null 奋斗者/null 奋武扬威/null 奋笔/null 奋笔疾书/null 奋袂/null 奋袂攘襟/null 奋袂而起/null 奋起/null 奋起反抗/null 奋起抗争/null 奋起湖/null 奋起直追/null 奋起自卫/null 奋身/null 奋身独步/null 奋迅/null 奋进/null 奋进号/null 奋飞/null 奎宁/null 奎宁水/null 奎屯/null 奎托/null 奎文/null 奎文区/null 奎星/null 奏乐/null 奏书/null 奏凯/null 奏出/null 奏功/null 奏响/null 奏帖/null 奏折/null 奏捷/null 奏效/null 奏明/null 奏曲/null 奏本/null 奏疏/null 奏章/null 奏者/null 奏腔/null 奏表/null 奏议/null 奏鸣/null 奏鸣曲/null 奏鸣曲式/null 契东/null 契丹/null 契人/null 契友/null 契合/null 契合金兰/null 契据/null 契文/null 契机/null 契沙比克湾/null 契税/null 契箭/null 契约/null 契约桥牌/null 契约者/null 契约货币/null 契纸/null 契若金兰/null 契证/null 契诃夫/null 奔丧/null 奔去/null 奔向/null 奔命/null 奔头/null 奔头儿/null 奔奔族/null 奔忙/null 奔放/null 奔月/null 奔波/null 奔泻/null 奔流/null 奔涌/null 奔突/null 奔窜/null 奔腾/null 奔袭/null 奔走/null 奔走之友/null 奔走呼号/null 奔走如市/null 奔走相告/null 奔赴/null 奔跑/null 奔跑戏耍/null 奔跳/null 奔车朽索/null 奔逃/null 奔逸绝尘/null 奔马/null 奔驰/null 奔驶/null 奕䜣/null 奕奕/null 奕詝/null 奖优罚劣/null 奖券/null 奖励/null 奖励制度/null 奖励品/null 奖励旅行/null 奖励金/null 奖勉/null 奖勤/null 奖勤罚懒/null 奖品/null 奖售/null 奖学金/null 奖得主/null 奖惩/null 奖惩制度/null 奖拔公心/null 奖挹/null 奖掖/null 奖旗/null 奖杯/null 奖牌/null 奖牌榜/null 奖状/null 奖的/null 奖章/null 奖给/null 奖罚/null 奖赏/null 奖酬/null 奖金/null 奖金税/null 奖限/null 奖项/null 套上/null 套中人/null 套交情/null 套住/null 套作/null 套儿/null 套入/null 套写/null 套利/null 套利者/null 套包/null 套印/null 套取/null 套叠/null 套口/null 套口供/null 套圈/null 套在/null 套头/null 套套/null 套子/null 套房/null 套挂/null 套换/null 套数/null 套料/null 套曲/null 套服/null 套期保值/null 套杉/null 套汇/null 套版/null 套牢/null 套犁/null 套环/null 套用/null 套种/null 套筒/null 套算/null 套管/null 套管针/null 套系/null 套索/null 套红/null 套结/null 套绳/null 套耕/null 套耧/null 套色/null 套色版/null 套衣/null 套衫/null 套衫儿/null 套袖/null 套裁/null 套装/null 套裙/null 套裤/null 套话/null 套语/null 套购/null 套路/null 套车/null 套近乎/null 套进/null 套钟/null 套问/null 套间/null 套靴/null 套鞋/null 套领/null 套餐/null 套马/null 套马杆/null 奚啸伯/null 奚奴/null 奚幸/null 奚落/null 奠仪/null 奠基/null 奠基人/null 奠基仪式/null 奠基典礼/null 奠基石/null 奠基者/null 奠定/null 奠济宫/null 奠祭/null 奠立/null 奠边府战役/null 奠都/null 奠酒/null 奢丽/null 奢侈/null 奢侈品/null 奢侈逸乐/null 奢入俭难/null 奢华/null 奢想/null 奢易俭难/null 奢望/null 奢求/null 奢泰/null 奢淫/null 奢盼/null 奢谈/null 奢靡/null 奢香/null 奥丁/null 奥丁谐振器/null 奥什/null 奥克兰/null 奥克拉荷马州/null 奥克斯纳德/null 奥克苏斯河/null 奥兰多/null 奥兰群岛/null 奥切诺斯/null 奥利安/null 奥勒冈州/null 奥匈帝国/null 奥区/null 奥博/null 奥卢/null 奥古斯都/null 奥国/null 奥地利/null 奥地利人/null 奥塞梯/null 奥塞罗/null 奥妙/null 奥姆真理教/null 奥委会/null 奥威尔/null 奥密克戎/null 奥尔巴尼/null 奥尔布赖特/null 奥尔德尼岛/null 奥尔良/null 奥巴马/null 奥布里/null 奥康内尔/null 奥康纳/null 奥德修斯/null 奥德赛/null 奥托/null 奥援/null 奥数/null 奥斯丁/null 奥斯卡/null 奥斯卡金像奖/null 奥斯威辛/null 奥斯威辛集中营/null 奥斯忒/null 奥斯曼/null 奥斯曼帝国/null 奥斯汀/null 奥斯瓦尔德/null 奥斯陆/null 奥朗德/null 奥林匹亚/null 奥林匹克/null 奥林匹克体育场/null 奥林匹克精神/null 奥林匹克运动会/null 奥林匹克运动会组织委员会/null 奥涅金/null 奥特曼/null 奥特朗托/null 奥特朗托海峡/null 奥特莱斯/null 奥秒/null 奥秘/null 奥米伽/null 奥米可戎/null 奥组委/null 奥维耶多/null 奥草/null 奥西娜斯/null 奥赖恩/null 奥赛罗/null 奥运/null 奥运会/null 奥运城市/null 奥运村/null 奥运赛/null 奥迪/null 奥迪修斯/null 奥迹/null 奥里萨邦/null 奥里里亚/null 奥陶系/null 奥陶纪/null 奥马哈/null 奥马尔/null 奥黛丽/null 奥黛莉/null 女业主/null 女中/null 女中丈夫/null 女中尧舜/null 女中豪杰/null 女为悦己者容/null 女主/null 女主人/null 女主人公/null 女主席/null 女主角/null 女乘务员/null 女书/null 女亲属/null 女人/null 女人不爱/null 女人家/null 女人气/null 女仆/null 女优/null 女伯爵/null 女伴/null 女低音/null 女佣/null 女佣人/null 女侍/null 女侯爵/null 女便袍/null 女修道/null 女修道张/null 女修道院/null 女傧相/null 女像柱/null 女儿/null 女儿墙/null 女儿红/null 女公子/null 女公爵/null 女兵/null 女凶手/null 女功/null 女医生/null 女单/null 女厕/null 女厕所/null 女友/null 女发/null 女史/null 女司机/null 女同/null 女同志/null 女同胞/null 女名/null 女向导/null 女售/null 女城主/null 女墙/null 女士/null 女士们/null 女士优先/null 女声/null 女外套/null 女大不中留/null 女大使/null 女大十八变/null 女大难留/null 女大须嫁/null 女奴/null 女奴隶/null 女妖/null 女妖魔/null 女娃/null 女娲/null 女娲氏/null 女婴/null 女婿/null 女子/null 女子单打/null 女子参政权/null 女子无才便是德/null 女学士/null 女学生/null 女学者/null 女孩/null 女孩儿/null 女孩子/null 女孩子家/null 女官/null 女家/null 女家长/null 女导演/null 女将/null 女工/null 女工头/null 女巨人/null 女巫/null 女市长/null 女师/null 女帝/null 女帽/null 女帽类/null 女干部/null 女店员/null 女座/null 女庵/null 女强人/null 女待/null 女徒/null 女怕嫁错郎/null 女性/null 女性主义/null 女性化/null 女性厌恶/null 女性名/null 女性贬抑/null 女性间/null 女怪/null 女总督/null 女房东/null 女扮男装/null 女招待/null 女捕手/null 女排/null 女探/null 女教师/null 女方/null 女星/null 女朋友/null 女服/null 女服务员/null 女权/null 女权主义/null 女杰/null 女校/null 女校长/null 女样/null 女歌/null 女歌唱家/null 女歌手/null 女武神/null 女沙皇/null 女流/null 女海神/null 女演员/null 女牧师/null 女犯/null 女猎人/null 女猎师/null 女王/null 女王国/null 女王般/null 女生/null 女生外向/null 女用/null 女画家/null 女的/null 女皇/null 女皇大学/null 女皇帝/null 女监工/null 女看守/null 女真/null 女眷/null 女祖先/null 女神/null 女神蛤/null 女童/null 女管家/null 女篮/null 女红/null 女织男耕/null 女经理/null 女继承人/null 女编辑/null 女者/null 女舍/null 女舍监/null 女色/null 女英雄/null 女英雌/null 女萝/null 女衫/null 女衬衣/null 女衬衫/null 女袍/null 女装/null 女装裁缝师/null 女裙/null 女裙钗/null 女裤/null 女警/null 女警们/null 女警员/null 女警察/null 女议长/null 女诗人/null 女诱/null 女调/null 女貌/null 女貌郎才/null 女贞/null 女超人/null 女车/null 女运/null 女郎/null 女长须嫁/null 女门徒/null 女门房/null 女队/null 女阴/null 女院/null 女雕/null 女青年/null 女鞋/null 女领/null 女骑师/null 女骑手/null 女骗徒/null 女高音/null 女魔/null 女黑人/null 奴仆/null 奴佛卡因/null 奴使/null 奴儿干/null 奴儿干都司/null 奴化/null 奴女/null 奴婢/null 奴家/null 奴工/null 奴役/null 奴态/null 奴性/null 奴才/null 奴隶/null 奴隶主/null 奴隶主所有制/null 奴隶制/null 奴隶制度/null 奴隶性/null 奴隶社会/null 奴颜/null 奴颜婢睐/null 奴颜婢膝/null 奴颜婢色/null 奴颜媚骨/null 奶农/null 奶冻/null 奶制品/null 奶刷/null 奶厂/null 奶名/null 奶咀/null 奶品/null 奶品店/null 奶嘴/null 奶嘴儿/null 奶场/null 奶头/null 奶奶/null 奶妈/null 奶娘/null 奶子/null 奶孩/null 奶房/null 奶昔/null 奶杯/null 奶毛/null 奶水/null 奶汤/null 奶油/null 奶油菜花/null 奶油鸡蛋/null 奶液/null 奶牙/null 奶牛/null 奶牛场/null 奶瓶/null 奶疮/null 奶皮/null 奶积/null 奶站/null 奶类/null 奶粉/null 奶糕/null 奶糖/null 奶罩/null 奶羊/null 奶豆/null 奶酒/null 奶酥/null 奶酪/null 奶酪火锅/null 奶锅/null 奶黄包/null 奸人/null 奸人之雄/null 奸佞/null 奸党/null 奸匪/null 奸商/null 奸夫/null 奸夫淫妇/null 奸妇/null 奸宄/null 奸官/null 奸官污吏/null 奸尸/null 奸徒/null 奸恶/null 奸恶之徒/null 奸情/null 奸杀/null 奸民/null 奸污/null 奸淫/null 奸滑/null 奸犯/null 奸猾/null 奸笑/null 奸细/null 奸者/null 奸臣/null 奸计/null 奸诈/null 奸谋/null 奸贼/null 奸邪/null 奸险/null 奸雄/null 她们/null 她们的/null 她俩/null 她玛/null 她的/null 她经济/null 她自己/null 好一个/null 好不/null 好不好/null 好不容易/null 好东西/null 好中/null 好丹非素/null 好为人师/null 好主意/null 好久/null 好久不见/null 好书/null 好乱/null 好了/null 好争吵/null 好争论/null 好事/null 好事不出门/null 好事之徒/null 好事多磨/null 好事天悭/null 好事者/null 好些/null 好人/null 好人好事/null 好人榜/null 好似/null 好位/null 好使/null 好做/null 好像/null 好兵帅克/null 好冒险/null 好写/null 好几/null 好几个/null 好几年/null 好几次/null 好几天/null 好几里/null 好分数/null 好剑/null 好力宝/null 好办/null 好动/null 好半天/null 好去/null 好友/null 好发/null 好受/null 好吃/null 好吃懒做/null 好名声/null 好吗/null 好吧/null 好听/null 好吵架/null 好呀/null 好命/null 好哇/null 好哭/null 好啊/null 好啦/null 好善嫉恶/null 好善恶恶/null 好喝/null 好嗨/null 好嘛/null 好在/null 好坏/null 好坏不分/null 好声好气/null 好处/null 好处费/null 好多/null 好多个/null 好大喜功/null 好天/null 好天儿/null 好天气/null 好头/null 好奇/null 好奇会吃苦头的/null 好奇尚异/null 好奇心/null 好好/null 好好儿/null 好好先生/null 好好学习/null 好姑娘/null 好字/null 好孤立/null 好学/null 好学不倦/null 好学深思/null 好学生/null 好学近乎知/null 好孩子/null 好客/null 好家伙/null 好容易/null 好寒性/null 好寻/null 好尚/null 好市多/null 好帮手/null 好干/null 好干燥/null 好康/null 好开/null 好弄/null 好强/null 好得多/null 好得很/null 好心/null 好心人/null 好心倒做了驴肝肺/null 好心好意/null 好心肠/null 好怕的/null 好性儿/null 好恶/null 好恶心/null 好惹/null 好意/null 好意思/null 好感/null 好戏/null 好戏连台/null 好战/null 好手/null 好打/null 好打听/null 好批评/null 好找/null 好报/null 好抱怨/null 好搞/null 好收成/null 好故事百听不厌/null 好散/null 好整以暇/null 好斗/null 好新闻/null 好施/null 好施乐善/null 好施小惠/null 好日子/null 好时/null 好时机/null 好景/null 好景不长/null 好朋友/null 好望角/null 好本事/null 好来/null 好来坞/null 好来坞式/null 好极/null 好极了/null 好样/null 好样儿的/null 好样的/null 好梦想/null 好梦难圆/null 好梦难成/null 好棒/null 好植/null 好模仿/null 好歹/null 好死/null 好死不如赖活着/null 好比/null 好气/null 好气万千/null 好气儿/null 好气微生物/null 好氧/null 好汉/null 好汉做事/null 好汉当/null 好消息/null 好物/null 好玩/null 好玩儿/null 好球/null 好生/null 好生之德/null 好生恶杀/null 好用/null 好痛/null 好的/null 好的多/null 好看/null 好睇/null 好睡/null 好立克/null 好端端/null 好笑/null 好管/null 好紧/null 好聚好散/null 好胜/null 好胜心/null 好脾气/null 好自为之/null 好自矜夸/null 好色/null 好色之徒/null 好色者/null 好茶/null 好莱坞/null 好行小慧/null 好要/null 好言/null 好言好语/null 好让/null 好议论/null 好记/null 好讽刺/null 好评/null 好词/null 好话/null 好语似珠/null 好说/null 好说歹说/null 好说话儿/null 好说谎/null 好谀恶直/null 好谋善断/null 好谋而成/null 好象/null 好货/null 好赖/null 好走/null 好起来/null 好躺/null 好转/null 好辩/null 好过/null 好运/null 好运气/null 好运符/null 好还/null 好逸恶劳/null 好道/null 好酒/null 好酒贪杯/null 好问/null 好问则裕/null 好闲/null 好闻/null 好险/null 好难过/null 好饭不怕晚/null 好香/null 好马/null 好马不吃回头草/null 好高务远/null 好高骛远/null 好高鹜远/null 好鸟/null 好黑/null 如一/null 如上/null 如上所述/null 如下/null 如不/null 如不胜衣/null 如与/null 如丘而止/null 如东/null 如丧考妣/null 如临大敌/null 如临深渊/null 如临深谷/null 如临渊谷/null 如之/null 如云/null 如人饮水/null 如今/null 如从/null 如以/null 如何/null 如何是好/null 如你/null 如假包换/null 如兄/null 如兄如弟/null 如入/null 如入无人之境/null 如其/null 如其所好/null 如冬/null 如冰/null 如出/null 如出一口/null 如出一辙/null 如切如磋/null 如初/null 如前/null 如厕/null 如同/null 如后/null 如君王/null 如图/null 如在/null 如坐云雾/null 如坐针毡/null 如坠烟海/null 如坠烟雾/null 如堕五里雾中/null 如堕烟雾/null 如字/null 如实/null 如对/null 如属/null 如履如临/null 如履平地/null 如履薄冰/null 如左右手/null 如常/null 如弃敝屣/null 如弓/null 如弟/null 如归/null 如影随形/null 如恶魔/null 如意/null 如意算盘/null 如意郎君/null 如愿/null 如愿以偿/null 如拾地芥/null 如持左券/null 如指诸掌/null 如按/null 如故/null 如数/null 如数家珍/null 如斯/null 如无/null 如无其事/null 如日中天/null 如日方中/null 如日方升/null 如旧/null 如昔/null 如春/null 如是/null 如是我闻/null 如是说/null 如月/null 如有/null 如有所失/null 如期/null 如来/null 如来佛/null 如果/null 如果不/null 如梦/null 如梦初觉/null 如梦初醒/null 如梦如醉/null 如梦方醒/null 如次/null 如歌/null 如此/null 如此之/null 如此来说/null 如此等等/null 如此而已/null 如此说来/null 如此这般/null 如死/null 如水/null 如汤沃雪/null 如汤泼雪/null 如汤浇雪/null 如汤灌雪/null 如法/null 如法泡制/null 如法炮制/null 如泣如诉/null 如洗/null 如渴/null 如火/null 如火如茶/null 如火如荼/null 如火晚霞/null 如烹小鲜/null 如焚/null 如牛负重/null 如狼似虎/null 如狼牧羊/null 如玉/null 如用/null 如电/null 如画/null 如痴似醉/null 如痴如梦/null 如痴如狂/null 如痴如醉/null 如皋/null 如真如幻/null 如神/null 如箭在弦/null 如簧之舌/null 如约/null 如胶似漆/null 如胶如漆/null 如胶投漆/null 如能/null 如臂使指/null 如芒刺背/null 如芒在背/null 如花/null 如花似月/null 如花似玉/null 如花似锦/null 如花如玉/null 如若/null 如茵/null 如草/null 如荼如火/null 如获至宝/null 如获至珍/null 如虎傅翼/null 如虎得翼/null 如虎添翼/null 如虎生翼/null 如蚁附膻/null 如蝇逐臭/null 如蝇附膻/null 如表/null 如被/null 如解倒悬/null 如许/null 如诉如泣/null 如诗如画/null 如说/null 如象/null 如蹈水火/null 如蹈汤火/null 如运诸掌/null 如这般/null 如遇/null 如醉初醒/null 如醉如梦/null 如醉如狂/null 如醉如痴/null 如醉方醒/null 如释重负/null 如金似玉/null 如针刺/null 如闻其声如见其人/null 如隔三秋/null 如雨/null 如雷/null 如雷灌耳/null 如雷贯耳/null 如需/null 如面/null 如题/null 如风过耳/null 如飞/null 如饥/null 如饥似渴/null 如香油/null 如鱼似水/null 如鱼得水/null 如鸟兽散/null 如麻/null 妃嫔/null 妃子/null 妃子笑/null 妃色/null 妄下雌黄/null 妄为/null 妄人/null 妄作/null 妄加/null 妄加指责/null 妄加评论/null 妄动/null 妄取/null 妄图/null 妄念/null 妄想/null 妄想狂/null 妄断/null 妄求/null 妄求者/null 妄生穿凿/null 妄用/null 妄称/null 妄羡/null 妄自/null 妄自尊大/null 妄自菲薄/null 妄言/null 妄言妄听/null 妄评/null 妄语/null 妄说/null 妄谈祸福/null 妆奁/null 妆扮/null 妆新/null 妆点/null 妆饰/null 妇产/null 妇产医院/null 妇产科/null 妇人/null 妇人之仁/null 妇人帽/null 妇代会/null 妇儒/null 妇女/null 妇女会/null 妇女用/null 妇女病/null 妇女能顶半边天/null 妇女运动/null 妇姑勃溪/null 妇婴/null 妇孺/null 妇孺皆知/null 妇幼/null 妇幼保健/null 妇幼保健站/null 妇救会/null 妇权/null 妇短/null 妇科/null 妇职/null 妇联/null 妇道/null 妇道人家/null 妈咪/null 妈妈/null 妈子/null 妈的/null 妈眯/null 妈祖/null 妊妇/null 妊娠/null 妊娠前/null 妊娠试验/null 妍丽/null 妍皮痴骨/null 妒嫉/null 妒忌/null 妒恨/null 妒意/null 妒火中烧/null 妒能害贤/null 妒贤嫉能/null 妒贤忌能/null 妒贤疾能/null 妓女/null 妓院/null 妓馆/null 妖人/null 妖似/null 妖冶/null 妖女/null 妖妇/null 妖娆/null 妖媚/null 妖孽/null 妖形怪状/null 妖怪/null 妖教/null 妖术/null 妖气/null 妖法/null 妖物/null 妖由人兴/null 妖精/null 妖艳/null 妖言/null 妖言惑众/null 妖道/null 妖邪/null 妖里妖气/null 妖镜/null 妖雾/null 妖风/null 妖魔/null 妖魔鬼怪/null 妗子/null 妗母/null 妙不/null 妙不可言/null 妙事/null 妙人/null 妙句/null 妙品/null 妙哉/null 妙喻取譬/null 妙在不言中/null 妙境/null 妙处/null 妙处不传/null 妙妙熊历险记/null 妙思/null 妙想/null 妙手/null 妙手丹青/null 妙手回春/null 妙手空空/null 妙探寻凶/null 妙方/null 妙智慧/null 妙极/null 妙极了/null 妙棋/null 妙法/null 妙法莲华经/null 妙理/null 妙用/null 妙笔/null 妙笔生花/null 妙策/null 妙算/null 妙绝/null 妙绝一时/null 妙绝时人/null 妙舞清歌/null 妙药/null 妙言要道/null 妙计/null 妙论/null 妙诀/null 妙语/null 妙语如珠/null 妙语横生/null 妙语解颐/null 妙语连珠/null 妙趣/null 妙趣横溢/null 妙趣横生/null 妙辞/null 妙龄/null 妞妞/null 妥为/null 妥协/null 妥否/null 妥善/null 妥善处理/null 妥善安置/null 妥善解决/null 妥坝/null 妥坝县/null 妥妥/null 妥妥贴贴/null 妥实/null 妥帖/null 妥当/null 妥当性/null 妥瑞症/null 妥用/null 妥贴/null 妥靠/null 妨功害能/null 妨害/null 妨害者/null 妨碍/null 妨碍球/null 妨碍者/null 妨诉/null 妩媚/null 妮可・基德曼/null 妮子/null 妮维娅/null 妮维雅/null 妯娌/null 妲己/null 妹夫/null 妹妹/null 妹婿/null 妹子/null 妻儿/null 妻儿老小/null 妻女/null 妻妾/null 妻子/null 妻子管得严/null 妻孥/null 妻室/null 妻小/null 妻离子散/null 妻管严/null 妻舅/null 妾侍/null 妾妇/null 妾身/null 姆佬/null 姆佬族/null 姆妈/null 姆巴巴纳/null 姆拉迪奇/null 姆指/null 姊丈/null 姊夫/null 姊妹/null 姊姊/null 姊归县/null 始业/null 始乱终弃/null 始于/null 始于足下/null 始作俑者/null 始兴/null 始动/null 始发/null 始发站/null 始定/null 始建/null 始建于/null 始料/null 始料所及/null 始料未及/null 始新世/null 始新纪/null 始新统/null 始末/null 始点/null 始生代/null 始皇/null 始祖/null 始祖马/null 始祖鸟/null 始终/null 始终一贯/null 始终不懈/null 始终不渝/null 始终保持/null 始终如一/null 始能/null 始自/null 始行/null 姐丈/null 姐们儿/null 姐儿/null 姐儿们/null 姐夫/null 姐妹/null 姐妹班/null 姐姐/null 姐弟/null 姑丈/null 姑且/null 姑夫/null 姑奶/null 姑奶奶/null 姑妄/null 姑妄听之/null 姑妄言之/null 姑妄试之/null 姑妈/null 姑姑/null 姑姥姥/null 姑娘/null 姑娘儿/null 姑娘家/null 姑婆/null 姑嫂/null 姑子/null 姑宽/null 姑射神人/null 姑息/null 姑息养奸/null 姑息疗法/null 姑息者/null 姑息迁就/null 姑息遗患/null 姑母/null 姑父/null 姑爷/null 姑爹/null 姑置勿论/null 姑老爷/null 姑舅/null 姑表/null 姒文命/null 姓名/null 姓名权/null 姓氏/null 委为/null 委付/null 委以/null 委任/null 委任状/null 委任统治/null 委任者/null 委佗/null 委内瑞拉/null 委内瑞拉独立战争/null 委内瑞拉马脑炎病毒/null 委制/null 委办/null 委员/null 委员会/null 委员会会议/null 委员长/null 委外/null 委委屈屈/null 委婉/null 委婉词/null 委婉语/null 委宛/null 委实/null 委屈/null 委屈周全/null 委屈成全/null 委常之惧/null 委托/null 委托书/null 委托人/null 委托物/null 委托者/null 委曲/null 委曲求全/null 委派/null 委用/null 委罪/null 委聘/null 委肉虎蹊/null 委蛇/null 委身/null 委过/null 委部/null 委重投艰/null 委靡/null 委靡不振/null 委顿/null 姗姗/null 姗姗来迟/null 姘夫/null 姘头/null 姘妇/null 姘居/null 姘识/null 姚安/null 姚思廉/null 姚文元/null 姚明/null 姚滨/null 姚雪垠/null 姚黄魏紫/null 姜丝/null 姜味/null 姜堰/null 姜太公/null 姜太公钓鱼/null 姜子牙/null 姜文/null 姜末/null 姜汁/null 姜汤/null 姜片/null 姜片虫/null 姜石年/null 姜粉/null 姜糖/null 姜芋/null 姜还是老的辣/null 姜饼/null 姜黄/null 姜黄色/null 姣好/null 姣生贯养/null 姣美/null 姥姥/null 姥娘/null 姥爷/null 姥鲨/null 姨丈/null 姨儿/null 姨太/null 姨太太/null 姨夫/null 姨奶奶/null 姨妈/null 姨妹/null 姨姐/null 姨姥姥/null 姨娘/null 姨婆/null 姨子/null 姨母/null 姨父/null 姨甥男女/null 姨表/null 姫路市/null 姬妾/null 姬松茸/null 姬路城/null 姬鼠/null 姮娥/null 姹女/null 姹紫嫣红/null 姻亚/null 姻亲/null 姻娅/null 姻缘/null 姿势/null 姿容/null 姿态/null 姿态婀娜/null 姿色/null 威严/null 威仪/null 威仪孔时/null 威信/null 威信扫地/null 威凤一羽/null 威利/null 威利斯/null 威利诱/null 威力/null 威势/null 威化/null 威化饼干/null 威厉/null 威压/null 威名/null 威吓/null 威吓性/null 威吓者/null 威呵/null 威基基/null 威士/null 威士忌/null 威士忌酒/null 威奇托/null 威妥玛/null 威妥玛拼法/null 威妥玛拼音/null 威宁县/null 威客/null 威容/null 威尊命贱/null 威尔士语/null 威尔特郡/null 威尔逊/null 威尼斯/null 威尼斯商人/null 威州镇/null 威廉/null 威廉・福克纳/null 威廉・莎士比亚/null 威廉斯堡/null 威德/null 威慑/null 威慑力量/null 威慑理论/null 威振天下/null 威斯康星/null 威斯康星州/null 威斯康辛/null 威斯敏斯特教堂/null 威显/null 威服/null 威望/null 威权/null 威棱/null 威武/null 威武不屈/null 威氏注音法/null 威法/null 威海/null 威海卫/null 威灵/null 威灵顿/null 威烈/null 威猛/null 威玛/null 威玛共和国/null 威玛拼法/null 威玛拼音/null 威福由己/null 威福自己/null 威而不猛/null 威而钢/null 威胁/null 威胁利诱/null 威胁性/null 威胁要/null 威虎/null 威视/null 威赫/null 威远/null 威迫/null 威迫利诱/null 威逼/null 威逼利诱/null 威重/null 威震/null 威震天下/null 威风/null 威风一羽/null 威风凛凛/null 威风扫地/null 威风祥麟/null 威骇/null 娃儿/null 娃娃/null 娃娃亲/null 娃娃兵/null 娃娃生/null 娃娃脸/null 娃娃装/null 娃娃车/null 娃娃鱼/null 娃子/null 娃脸/null 娄子/null 娄宿/null 娄底/null 娄底地区/null 娄族/null 娄星/null 娄星区/null 娄烦/null 娇儿/null 娇养/null 娇嗔/null 娇妻/null 娇娃/null 娇娆/null 娇媚/null 娇嫩/null 娇宠/null 娇客/null 娇小/null 娇小玲珑/null 娇弱/null 娇态/null 娇惯/null 娇惰/null 娇憨/null 娇柔/null 娇气/null 娇气十足/null 娇滴滴/null 娇生惯养/null 娇痴/null 娇红/null 娇纵/null 娇美/null 娇羞/null 娇翠/null 娇艳/null 娇贵/null 娇黄/null 娈俦凤侣/null 娈童/null 娈童者/null 娉婷/null 娑罗双树/null 娑罗树/null 娓娓/null 娓娓不倦/null 娓娓动听/null 娓娓可听/null 娓娓而谈/null 娓娓道来/null 娘亲/null 娘儿/null 娘儿们/null 娘姨/null 娘娘/null 娘娘庙/null 娘娘腔/null 娘子/null 娘子军/null 娘家/null 娘家姓/null 娘惹/null 娘树/null 娘炮/null 娘胎/null 娘腔/null 娘舅/null 娘要嫁人/null 娜塔莉/null 娜娜/null 娟娟/null 娟秀/null 娣姒/null 娥眉/null 娩出/null 娭姐/null 娱乐/null 娱乐中心/null 娱乐区/null 娱乐场/null 娱乐场所/null 娱乐室/null 娱乐性/null 娱乐活动/null 娱乐界/null 娱人/null 娱遣/null 娴淑/null 娴熟/null 娴雅/null 娴静/null 娶亲/null 娶你/null 娶到/null 娶妻/null 娶媳/null 娶媳妇/null 娼女/null 娼妇/null 娼妓/null 娼家/null 娼寮/null 婀娜/null 婆姨/null 婆娑/null 婆娘/null 婆婆/null 婆婆妈妈/null 婆婆家/null 婆媳/null 婆子/null 婆家/null 婆心/null 婆母/null 婆罗/null 婆罗洲/null 婆罗浮屠/null 婆罗门/null 婆罗门教/null 婉商/null 婉如/null 婉妙/null 婉娩/null 婉婉/null 婉拒/null 婉称/null 婉约/null 婉言/null 婉言谢绝/null 婉词/null 婉语/null 婉谢/null 婉转/null 婉辞/null 婉顺/null 婊子/null 婕妤/null 婚丧/null 婚丧嫁娶/null 婚书/null 婚事/null 婚事半成全/null 婚事新办/null 婚假/null 婚典/null 婚前/null 婚前性行为/null 婚前财产公证/null 婚友/null 婚后/null 婚否/null 婚外/null 婚外恋/null 婚外情/null 婚姻/null 婚姻介绍所/null 婚姻关系/null 婚姻制度/null 婚姻大事/null 婚姻法/null 婚姻登记/null 婚姻自主/null 婚姻自由/null 婚姻调解/null 婚嫁/null 婚宴/null 婚庆/null 婚式/null 婚恋/null 婚期/null 婚生子女/null 婚礼/null 婚神星/null 婚筵/null 婚约/null 婚纱/null 婚纱摄影/null 婚者/null 婚诗/null 婚配/null 婚龄/null 婢仆/null 婢作夫人/null 婢女/null 婢奴/null 婢学夫人/null 婴儿/null 婴儿手推车/null 婴儿期/null 婴儿潮/null 婴儿猝死综合症/null 婴儿车/null 婴儿鞋/null 婴孩/null 婴幼儿/null 婵娟/null 婵媛/null 婶儿/null 婶娘/null 婶婆/null 婶婶/null 婶子/null 婶母/null 婷婷/null 婹嫋/null 婹袅/null 婹褭/null 婺剧/null 婺城/null 婺城区/null 婺女/null 婺源/null 媒人/null 媒介/null 媒介物/null 媒介者/null 媒体/null 媒体报导/null 媒体接口连接器/null 媒体自由/null 媒体访问控制/null 媒儿/null 媒妁/null 媒婆/null 媒怨/null 媒染/null 媒染剂/null 媒界/null 媒质/null 媒鸟/null 媚人/null 媚俗/null 媚外/null 媚娃/null 媚态/null 媚惑/null 媚眼/null 媚笑/null 媚词/null 媚骨/null 媲美/null 媳妇/null 媳妇儿/null 媵侍/null 媾和/null 媾疫/null 嫁人/null 嫁出/null 嫁女/null 嫁妆/null 嫁妆箱/null 嫁娶/null 嫁接/null 嫁狗随狗/null 嫁祸/null 嫁祸于/null 嫁祸于人/null 嫁给/null 嫁资/null 嫁鸡逐鸡/null 嫁鸡随鸡/null 嫂夫人/null 嫂嫂/null 嫂子/null 嫉妒/null 嫉妒者/null 嫉恨/null 嫉恶好善/null 嫉恶如仇/null 嫉贤妒能/null 嫌厌/null 嫌弃/null 嫌忌/null 嫌怨/null 嫌恨/null 嫌恶/null 嫌憎/null 嫌气微生物/null 嫌犯/null 嫌猜/null 嫌疑/null 嫌疑人/null 嫌疑犯/null 嫌肥挑瘦/null 嫌贫爱富/null 嫌隙/null 嫏嬛/null 嫔妃/null 嫔相/null 嫖妓/null 嫖娼/null 嫖客/null 嫖宿/null 嫖资/null 嫠不恤纬/null 嫠妇/null 嫠纬之忧/null 嫠节/null 嫡亲/null 嫡传/null 嫡堂/null 嫡子/null 嫡母/null 嫡派/null 嫡系/null 嫡裔/null 嫣然/null 嫣然一笑/null 嫣红/null 嫦娥/null 嫩叶/null 嫩枝/null 嫩江/null 嫩江地区/null 嫩煮/null 嫩白/null 嫩的/null 嫩皮/null 嫩绿/null 嫩肉/null 嫩芽/null 嫩苗/null 嫩苗龟/null 嫩黄/null 嫪毐/null 嬉乐/null 嬉嬉/null 嬉弄/null 嬉戏/null 嬉戏著/null 嬉水/null 嬉游/null 嬉皮/null 嬉皮士/null 嬉皮笑脸/null 嬉笑/null 嬉笑怒骂/null 嬉耍/null 嬉装/null 嬉闹/null 嬗变/null 嬴政/null 嬷嬷/null 孀妇/null 孀婺/null 孀居/null 孀闺/null 子不语怪/null 子丑/null 子丑寅卯/null 子串/null 子为父隐/null 子书/null 子产/null 子京/null 子代/null 子儿/null 子公司/null 子函数/null 子午/null 子午卯酉/null 子午圈/null 子午线/null 子午莲/null 子午道/null 子口/null 子句/null 子叶/null 子嗣/null 子囊/null 子囊菌/null 子城/null 子埝/null 子域/null 子堤/null 子多/null 子夜/null 子夜歌/null 子女/null 子女教育/null 子女玉帛/null 子妇/null 子婿/null 子子孙孙/null 子孙/null 子孙后代/null 子孙娘娘/null 子孝父慈/null 子实/null 子宫/null 子宫体癌/null 子宫内/null 子宫内避孕器/null 子宫壁/null 子宫外/null 子宫学/null 子宫炎/null 子宫环/null 子宫病/null 子宫肌瘤/null 子宫脱垂/null 子宫颈/null 子宫颈癌/null 子层/null 子弟/null 子弟书/null 子弟兵/null 子弦/null 子弹/null 子弹夹/null 子弹带/null 子弹火车/null 子息/null 子房/null 子时/null 子曰/null 子曰诗云/null 子棉/null 子模型/null 子母弹/null 子母扣儿/null 子母炮弹/null 子母炸弹/null 子母船运输/null 子母钟/null 子民/null 子洲/null 子爵/null 子畜/null 子痫/null 子癫前症/null 子目/null 子目录/null 子程序/null 子空间/null 子类/null 子粒/null 子精/null 子系统/null 子细胞/null 子网/null 子网屏蔽码/null 子群/null 子虚/null 子虚乌有/null 子蜂/null 子规/null 子设备/null 子贡/null 子路/null 子部/null 子金/null 子长/null 子集/null 子集合/null 子音/null 子项/null 子鸡/null 子鼠/null 孑孑/null 孑孑为义/null 孑孓/null 孑影孤单/null 孑然/null 孑然一身/null 孑然无依/null 孑立/null 孑立无依/null 孑身/null 孑遗/null 孔丘/null 孔丛子/null 孔东/null 孔乙己/null 孔口/null 孔圣人/null 孔型/null 孔夫子/null 孔子/null 孔子学院/null 孔子家语/null 孔孟/null 孔孟之道/null 孔学/null 孔席墨突/null 孔庙/null 孔府/null 孔径/null 孔戏/null 孔教/null 孔数/null 孔斯贝格/null 孔方兄/null 孔明/null 孔明灯/null 孔林/null 孔武有力/null 孔洞/null 孔眼/null 孔穴/null 孔类/null 孔线/null 孔融/null 孔道/null 孔门/null 孔隙/null 孔隙比/null 孔雀/null 孔雀座/null 孔雀开屏/null 孔雀河/null 孔雀王朝/null 孔雀石/null 孔雀绿/null 孔雀草/null 孕产/null 孕前/null 孕吐/null 孕妇/null 孕妇装/null 孕期/null 孕激素/null 孕畜/null 孕穗/null 孕育/null 孕育处/null 字串/null 字义/null 字义上/null 字书/null 字体/null 字体盒/null 字儿/null 字元/null 字元集/null 字典/null 字前/null 字区/null 字句/null 字号/null 字后/null 字图/null 字型/null 字处理/null 字头/null 字字/null 字字珠玉/null 字尾/null 字帖/null 字帖儿/null 字幕/null 字库/null 字形/null 字形学/null 字形档/null 字据/null 字数/null 字斟句酌/null 字条/null 字样/null 字根/null 字根合体字/null 字根表/null 字根通用码/null 字框/null 字模/null 字正腔圆/null 字段/null 字母/null 字母表/null 字母顺序/null 字母顺序概率/null 字汇/null 字汇判断任务/null 字源/null 字状/null 字画/null 字盘/null 字眼/null 字码/null 字码儿/null 字稿/null 字符/null 字符串/null 字符集/null 字素/null 字纸/null 字纸篓/null 字纸篓子/null 字组/null 字脚/null 字节/null 字节数/null 字表/null 字词/null 字译/null 字语/null 字调/null 字谜/null 字贴/null 字距/null 字迹/null 字里/null 字里行间/null 字长/null 字间/null 字集/null 字面/null 字面上/null 字音/null 字频/null 字首/null 存下/null 存为/null 存于/null 存亡/null 存亡攸关/null 存亡断绝/null 存亡未卜/null 存亡绝续/null 存体/null 存储/null 存储卡/null 存储器/null 存储处/null 存储容量/null 存储栈/null 存入/null 存区/null 存十一于一百/null 存单/null 存卷/null 存取/null 存取时间/null 存在/null 存在主义/null 存在论/null 存处/null 存完/null 存小异/null 存底/null 存异/null 存心/null 存户/null 存托凭证/null 存执/null 存折/null 存抚/null 存据/null 存摺/null 存放/null 存放处/null 存有/null 存有偏见/null 存期/null 存查/null 存栏/null 存栏数/null 存样/null 存根/null 存案/null 存档/null 存款/null 存款人/null 存款准备金/null 存款准备金率/null 存款单/null 存款簿/null 存款者/null 存款证/null 存款额/null 存活/null 存活率/null 存照/null 存物/null 存留/null 存疑/null 存盘/null 存积/null 存立/null 存管/null 存簿/null 存粮/null 存续/null 存而不论/null 存记/null 存证/null 存词/null 存货/null 存贮/null 存贮器/null 存贷/null 存贷款/null 存身/null 存车/null 存车场/null 存车处/null 存量/null 存钱/null 存钱罐/null 存项/null 存食/null 孙中山/null 孙传芳/null 孙儿/null 孙吴/null 孙坚/null 孙大圣/null 孙女/null 孙女儿/null 孙女婿/null 孙婿/null 孙媳/null 孙媳夫/null 孙媳妇/null 孙子/null 孙子兵法/null 孙子定理/null 孙思邈/null 孙恩起义/null 孙悟空/null 孙悦/null 孙文主义学会/null 孙权/null 孙武/null 孙武子/null 孙毓棠/null 孙燕姿/null 孙犁/null 孙策/null 孙继海/null 孙膑/null 孙膑兵法/null 孙行者/null 孙诛/null 孙逸仙/null 孛星/null 孜孜/null 孜孜不倦/null 孜孜不怠/null 孜孜以求/null 孜孜矻矻/null 孜然/null 孜然芹/null 孝义/null 孝南/null 孝南区/null 孝女/null 孝子/null 孝子慈孙/null 孝子贤孙/null 孝子顺孙/null 孝幔/null 孝廉/null 孝心/null 孝思不匮/null 孝悌/null 孝悌忠信/null 孝感/null 孝感地区/null 孝成王/null 孝敬/null 孝昌/null 孝服/null 孝男/null 孝祥/null 孝经/null 孝经起序/null 孝老/null 孝肃/null 孝行/null 孝衣/null 孝道/null 孝顺/null 孟买/null 孟买市/null 孟什维主义/null 孟什维克/null 孟加/null 孟加拉/null 孟加拉人民共和国/null 孟加拉共和国/null 孟加拉国/null 孟加拉湾/null 孟加拉语/null 孟县/null 孟姜女/null 孟子/null 孟尝君/null 孟州/null 孟德尔主义/null 孟德斯鸠/null 孟思诚/null 孟村/null 孟村县/null 孟津/null 孟浩然/null 孟浪/null 孟禄主义/null 孟良崮/null 孟良崮战役/null 孟菲斯/null 孟诗韩笔/null 孟轲/null 孟连县/null 孟郊/null 孢囊/null 孢子/null 孢子囊/null 孢子植物/null 季世/null 季会/null 季候/null 季候风/null 季军/null 季冬/null 季刊/null 季初/null 季后赛/null 季夏/null 季子/null 季孙之忧/null 季布一诺/null 季常之惧/null 季度/null 季报/null 季春/null 季末/null 季父/null 季相/null 季票/null 季稻/null 季经/null 季羡林/null 季肋/null 季节/null 季节差价/null 季节性/null 季节洄游/null 季节风/null 季花/null 季莫申科/null 季诺/null 季路/null 季雨林/null 季风/null 季风气候/null 孤云野鹤/null 孤傲/null 孤僻/null 孤儿/null 孤儿寡妇/null 孤儿寡母/null 孤儿药/null 孤儿院/null 孤军/null 孤军作战/null 孤军奋战/null 孤军深入/null 孤单/null 孤哀子/null 孤女/null 孤孀/null 孤子/null 孤孑/null 孤孑特立/null 孤孤单单/null 孤家寡人/null 孤寂/null 孤寒/null 孤寡/null 孤寡老人/null 孤山/null 孤岛/null 孤峰/null 孤形单影/null 孤形只影/null 孤形吊影/null 孤征/null 孤拐/null 孤拔/null 孤掌难鸣/null 孤本/null 孤注一掷/null 孤点/null 孤犊触乳/null 孤独/null 孤独于世/null 孤独心理学/null 孤独感/null 孤独无援/null 孤独症/null 孤立/null 孤立主义/null 孤立子/null 孤立子波/null 孤立无助/null 孤立无援/null 孤立木/null 孤立波/null 孤立点/null 孤老/null 孤胆/null 孤胆英雄/null 孤臣孽子/null 孤芳自赏/null 孤苦/null 孤苦伶仃/null 孤苦零丁/null 孤行/null 孤行己意/null 孤行己见/null 孤证不立/null 孤负/null 孤贫/null 孤身/null 孤身一人/null 孤身只影/null 孤闻/null 孤陋/null 孤陋寡闻/null 孤雌生殖/null 孤雏腐鼠/null 孤零/null 孤零零/null 孤高/null 孤高自许/null 孤魂/null 孤鸟/null 孤鸾寡鹤/null 孤鸾年/null 学业/null 学业有成/null 学之/null 学乖/null 学习/null 学习体会/null 学习刻苦/null 学习方法/null 学习材料/null 学习班/null 学习者/null 学习计划/null 学了/null 学人/null 学以致用/null 学优才赡/null 学优而仕/null 学会/null 学会院士/null 学位/null 学位论文/null 学位证书/null 学作/null 学修/null 学先进/null 学养/null 学军/null 学分/null 学分制/null 学分小时/null 学到/null 学到老/null 学制/null 学前/null 学前教育/null 学前期/null 学力/null 学区/null 学历/null 学友/null 学史/null 学号/null 学名/null 学呀/null 学员/null 学园/null 学坏/null 学堂/null 学塾/null 学士/null 学士学位/null 学好/null 学如逆水行舟/null 学妹/null 学姐/null 学子/null 学学/null 学家/null 学富五车/null 学工/null 学年/null 学府/null 学弟/null 学徒/null 学徒工/null 学得/null 学成/null 学成回国/null 学成归国/null 学所/null 学报/null 学摸/null 学政/null 学无常师/null 学无止境/null 学时/null 学有/null 学有所成/null 学有所用/null 学有所长/null 学期/null 学术/null 学术上/null 学术交流/null 学术会议/null 学术团体/null 学术年会/null 学术思想/null 学术性/null 学术报告/null 学术无涯/null 学术水平/null 学术界/null 学术研究/null 学术研讨会/null 学术自由/null 学术观点/null 学术讨论会/null 学术论文/null 学杂/null 学杂费/null 学来/null 学校/null 学校教育/null 学校行政/null 学校里/null 学校间/null 学样/null 学棍/null 学步/null 学步邯郸/null 学气/null 学法/null 学派/null 学浅才疏/null 学测/null 学海/null 学海无涯/null 学海泛舟/null 学潮/null 学然后知不足/null 学理/null 学理上/null 学生/null 学生会/null 学生族/null 学生界/null 学生组织/null 学生装/null 学生证/null 学生运动/null 学用/null 学用一致/null 学田/null 学甲/null 学甲镇/null 学界/null 学疏才浅/null 学的/null 学监/null 学着/null 学社/null 学科/null 学科分类/null 学科知识/null 学租/null 学究/null 学究天人/null 学究式/null 学究气/null 学童/null 学籍/null 学级/null 学者/null 学而/null 学而不厌/null 学而不思则罔/null 学而优则仕/null 学联/null 学自/null 学舌/null 学舍/null 学艺/null 学苑/null 学藉/null 学衔/null 学识/null 学识上/null 学话/null 学语/null 学说/null 学贯天人/null 学费/null 学走/null 学起/null 学车/null 学过/null 学运/null 学部/null 学部委员/null 学长/null 学问/null 学阀/null 学际天人/null 学院/null 学院派/null 学院间/null 学雷锋/null 学非所用/null 学风/null 学龄/null 学龄儿童/null 学龄前/null 学龄前儿童/null 孩似/null 孩儿/null 孩子/null 孩子们/null 孩子似/null 孩子头/null 孩子气/null 孩提/null 孩童/null 孩童们/null 孪生/null 孪生兄弟/null 孪生姐妹/null 孬种/null 孰真孰假/null 孰知/null 孰能生巧/null 孰若/null 孱头/null 孱弱/null 孳乳/null 孳孳/null 孳生/null 孵出/null 孵化/null 孵化器/null 孵化场/null 孵化期/null 孵卵/null 孵卵器/null 孵小鸡/null 孵成/null 孵育/null 孵蛋/null 孺人/null 孺子/null 孺子可教/null 孺子牛/null 孽子/null 孽报/null 孽海花/null 孽畜/null 孽种/null 孽缘/null 孽障/null 宁为/null 宁为玉碎/null 宁为玉碎不为瓦全/null 宁为鸡口不为牛后/null 宁乡/null 宁冈/null 宁冈县/null 宁化/null 宁南/null 宁可/null 宁国/null 宁城/null 宁夏/null 宁夏省/null 宁夏自治区/null 宁安/null 宁宗/null 宁定淡泊/null 宁左勿右/null 宁帖/null 宁强/null 宁德/null 宁德地区/null 宁愿/null 宁日/null 宁明/null 宁晋/null 宁有/null 宁武/null 宁死/null 宁死不屈/null 宁江/null 宁江区/null 宁河/null 宁波/null 宁波地区/null 宁津/null 宁洱/null 宁洱县/null 宁洱哈尼族彝族自治县/null 宁海/null 宁滥毋缺/null 宁神剂/null 宁缺/null 宁缺勿滥/null 宁缺毋滥/null 宁肯/null 宁蒗/null 宁蒗县/null 宁要/null 宁谧/null 宁边/null 宁远/null 宁都/null 宁都起义/null 宁酸/null 宁阳/null 宁陕/null 宁陵/null 宁靖/null 宁静/null 宁静致远/null 宁馨儿/null 它们/null 它山之石/null 它本身/null 它被/null 宅区/null 宅地/null 宅基/null 宅基地/null 宅女/null 宅子/null 宅度假/null 宅心忠厚/null 宅男/null 宅第/null 宅经/null 宅舍/null 宅邸/null 宅配/null 宅门/null 宅院/null 宇宙/null 宇宙号/null 宇宙学/null 宇宙学家/null 宇宙射线/null 宇宙尘/null 宇宙性/null 宇宙火箭/null 宇宙生成论/null 宇宙空间/null 宇宙线/null 宇宙线物理学/null 宇宙线高能物理/null 宇宙观/null 宇宙论/null 宇宙速度/null 宇宙飞船/null 宇文/null 宇普西龙/null 宇航/null 宇航员/null 宇航学/null 宇航局/null 宇航服/null 宇航站/null 守业/null 守丧/null 守份/null 守住/null 守住阵/null 守侯/null 守信/null 守信用/null 守候/null 守候室/null 守兵/null 守军/null 守分/null 守则/null 守制/null 守势/null 守卫/null 守卫者/null 守原则/null 守口如瓶/null 守土/null 守土有责/null 守地/null 守城/null 守备/null 守备部队/null 守备队/null 守夜/null 守夜者/null 守孝/null 守宫/null 守寡/null 守将/null 守岁/null 守己/null 守御/null 守恒/null 守恒定律/null 守成/null 守托者/null 守护/null 守护神/null 守拙/null 守敌/null 守斋/null 守方/null 守旧/null 守旧派/null 守旧者/null 守时/null 守更/null 守服/null 守望/null 守望犬/null 守望相助/null 守株待兔/null 守株缘木/null 守正不回/null 守正不挠/null 守正不移/null 守正不阿/null 守死善道/null 守法/null 守法者/null 守活寡/null 守灵/null 守猎/null 守球门/null 守着/null 守空房/null 守约/null 守约施博/null 守纪/null 守纪律/null 守经达权/null 守缺/null 守职/null 守节/null 守节不回/null 守节不移/null 守规矩/null 守誓/null 守贞/null 守财奴/null 守身/null 守身如玉/null 守身若玉/null 守车/null 守道安贫/null 守门/null 守门人/null 守门员/null 守静/null 安・海瑟薇/null 安上/null 安下/null 安下心来/null 安不忘危/null 安丘/null 安东尼/null 安东尼与克莉奥佩特拉/null 安乃近/null 安义/null 安之/null 安之若命/null 安之若素/null 安乐/null 安乐区/null 安乐死/null 安乐窝/null 安乡/null 安于/null 安于一隅/null 安于现状/null 安享/null 安人/null 安仁/null 安代舞/null 安份/null 安份守己/null 安保/null 安倍/null 安倍・晋三/null 安克拉治/null 安克雷奇/null 安全/null 安全与交换委员会/null 安全保密/null 安全别针/null 安全区/null 安全员/null 安全壳/null 安全套/null 安全局/null 安全岛/null 安全带/null 安全帽/null 安全年/null 安全性/null 安全感/null 安全掣/null 安全措施/null 安全无事/null 安全无恙/null 安全无虞/null 安全期/null 安全检查/null 安全气囊/null 安全灯/null 安全玻璃/null 安全生产/null 安全电压/null 安全眼罩/null 安全科/null 安全第一/null 安全系数/null 安全网/null 安全考虑/null 安全装置/null 安全部/null 安全问题/null 安全阀/null 安养/null 安养院/null 安分/null 安分守己/null 安利/null 安化/null 安华/null 安南/null 安南区/null 安南子/null 安南山脉/null 安卡拉/null 安卧/null 安危/null 安危冷暖/null 安厝/null 安可/null 安史之乱/null 安吉/null 安吉尔/null 安哥拉/null 安哥拉兔/null 安国/null 安图/null 安土乐业/null 安土重迁/null 安圭拉/null 安地斯/null 安坐/null 安坐待毙/null 安培/null 安培小时/null 安培表/null 安培计/null 安堵/null 安堵乐业/null 安堵如故/null 安塞/null 安多/null 安多芬/null 安大略/null 安大略湖/null 安大略省/null 安好/null 安如泰山/null 安如磐石/null 安妥/null 安妮・夏菲维/null 安妮・海瑟薇/null 安娜/null 安娜・卡列尼娜/null 安宁/null 安宁区/null 安宁片/null 安宅正路/null 安安定定/null 安安心心/null 安安稳稳/null 安安静静/null 安定/null 安定乡/null 安定化/null 安定区/null 安定团结/null 安定门/null 安家/null 安家乐业/null 安家立业/null 安家落户/null 安家费/null 安富尊荣/null 安富恤穷/null 安富恤贫/null 安居/null 安居乐业/null 安居区/null 安居工程/null 安山岩/null 安岳/null 安常处顺/null 安常履顺/null 安平/null 安平区/null 安庆/null 安庆地区/null 安度/null 安度晚年/null 安康/null 安康地区/null 安徒生/null 安得拉邦/null 安德海/null 安德烈/null 安德肋/null 安德鲁/null 安徽中医学院/null 安徽大学/null 安徽工程科技学院/null 安徽建筑工业学院/null 安心/null 安心工作/null 安息/null 安息国/null 安息日/null 安息茴香/null 安息香/null 安息香属/null 安息香科/null 安息香脂/null 安慰/null 安慰剂/null 安慰奖/null 安慰性/null 安慰赛/null 安打/null 安抚/null 安抵/null 安拉/null 安排/null 安排时间/null 安提瓜和巴布达/null 安提瓜岛/null 安插/null 安放/null 安新/null 安曼/null 安替比林/null 安枕/null 安枕而卧/null 安格尔/null 安检/null 安次/null 安次区/null 安歇/null 安步/null 安步当车/null 安民/null 安民告示/null 安泰/null 安泽/null 安源/null 安源区/null 安溪/null 安澜/null 安灵/null 安然/null 安然无事/null 安然无恙/null 安特卫普/null 安琪儿/null 安瓦尔/null 安瓿/null 安瓿瓶/null 安生/null 安眠/null 安眠药/null 安眠酮/null 安睡/null 安石榴/null 安祖花/null 安神/null 安祥/null 安禄山/null 安福/null 安稳/null 安第斯/null 安第斯山/null 安第斯山脉/null 安纳托利亚/null 安纳波利斯/null 安置/null 安老怀少/null 安能/null 安若泰山/null 安营/null 安营下寨/null 安营扎寨/null 安葬/null 安装/null 安装工程/null 安西/null 安设/null 安详/null 安谧/null 安贞/null 安贫乐苦/null 安贫乐贱/null 安贫乐道/null 安贫守道/null 安身/null 安身之地/null 安身立命/null 安达/null 安达曼岛/null 安达曼海/null 安达曼群岛/null 安远/null 安适/null 安适如常/null 安逸/null 安道尔/null 安道尔共和国/null 安道尔城/null 安那其主义/null 安邦/null 安邦定国/null 安邦治国/null 安重根/null 安闲/null 安闲自在/null 安闲自得/null 安闲舒适/null 安闲随意/null 安阳/null 安阳地区/null 安陆/null 安静/null 安非他命/null 安非他明/null 安顺/null 安顺地区/null 安顿/null 安魂/null 安魂弥撒/null 安龙/null 宋书/null 宋代/null 宋体/null 宋体字/null 宋元/null 宋史/null 宋四大书/null 宋四家/null 宋太祖/null 宋学/null 宋庆龄/null 宋徽宗/null 宋慈/null 宋教仁/null 宋斤鲁削/null 宋明/null 宋朝/null 宋楚瑜/null 宋武帝/null 宋武帝刘裕/null 宋江/null 宋江起义/null 宋濂/null 宋画吴冶/null 宋白/null 宋祁/null 宋美龄/null 宋襄公/null 宋词/null 宋诗/null 完了/null 完事/null 完事大吉/null 完人/null 完值/null 完全/null 完全兼容/null 完全可以/null 完全可能/null 完全叶/null 完全同意/null 完全小学/null 完全归纳推理/null 完全必要/null 完全性/null 完全愈复/null 完全懂得/null 完全正确/null 完全符合/null 完全肥料/null 完全避免/null 完具/null 完县/null 完善/null 完场/null 完壁/null 完备/null 完备性/null 完好/null 完好如初/null 完好无损/null 完好无缺/null 完好率/null 完婚/null 完完全全/null 完小/null 完工/null 完形/null 完形心理学/null 完形心理治疗/null 完形测验/null 完成/null 完成任务/null 完成式/null 完成时/null 完整/null 完整性/null 完整无损/null 完整无缺/null 完毕/null 完满/null 完璧/null 完璧归赵/null 完税/null 完稿/null 完竣/null 完粮/null 完结/null 完美/null 完美主义者/null 完美无瑕/null 完美无缺/null 完聚/null 完肤/null 完蛋/null 宏业/null 宏丽/null 宏亮/null 宏代码/null 宏伟/null 宏伟区/null 宏伟目标/null 宏儒/null 宏光/null 宏功能/null 宏名/null 宏命令/null 宏图/null 宏图大略/null 宏壮/null 宏大/null 宏录/null 宏恩/null 宏愿/null 宏扬/null 宏指令/null 宏效/null 宏旨/null 宏汇/null 宏汇编/null 宏病毒/null 宏碁/null 宏碁集团/null 宏程序/null 宏观/null 宏观世界/null 宏观图/null 宏观控制/null 宏观管理/null 宏观经济/null 宏观经济学/null 宏观能力/null 宏观调控/null 宏观调节/null 宏论/null 宏达/null 宏都拉斯/null 宓妃/null 宕昌/null 宕机/null 宗主/null 宗主国/null 宗主权/null 宗亲/null 宗仰/null 宗兄/null 宗匠/null 宗史/null 宗喀巴/null 宗圣侯/null 宗圣公/null 宗姓/null 宗室/null 宗师/null 宗庙/null 宗庙丘墟/null 宗教/null 宗教上/null 宗教仪式/null 宗教信仰/null 宗教团/null 宗教团体/null 宗教学/null 宗教徒/null 宗教改革/null 宗教政策/null 宗教法庭/null 宗教画/null 宗教界/null 宗族/null 宗旨/null 宗权/null 宗正/null 宗法/null 宗法制/null 宗法制度/null 宗法观念/null 宗派/null 宗派主义/null 宗祠/null 宗祧/null 宗筋/null 宗谱/null 官书/null 官二代/null 官人/null 官令/null 官价/null 官位/null 官佐/null 官使/null 官俸/null 官倒/null 官僚/null 官僚主义/null 官僚习气/null 官僚资产阶级/null 官僚资本/null 官僚资本主义/null 官儿/null 官兵/null 官兵一致/null 官兵关系/null 官册/null 官军/null 官制/null 官办/null 官印/null 官厅/null 官厅水库/null 官司/null 官名/null 官吏/null 官吏们/null 官员/null 官商/null 官商合资/null 官地/null 官场/null 官场如戏/null 官场现形记/null 官复原职/null 官子/null 官学/null 官官/null 官官相为/null 官官相护/null 官客/null 官宦/null 官宦人家/null 官家/null 官属/null 官差/null 官府/null 官式/null 官式访问/null 官情纸薄/null 官房长官/null 官报/null 官报私仇/null 官方/null 官方化/null 官方语言/null 官服/null 官架/null 官架子/null 官样/null 官样文章/null 官桂/null 官止神行/null 官气/null 官法如炉/null 官渡/null 官渡之战/null 官渡区/null 官爵/null 官田/null 官田乡/null 官瘾/null 官癖/null 官禄/null 官私合营/null 官称/null 官窑/null 官级/null 官绅/null 官署/null 官老爷/null 官职/null 官能/null 官能团/null 官能基/null 官腔/null 官舱/null 官营/null 官虔吏狠/null 官衔/null 官衙/null 官词/null 官话/null 官费/null 官轿/null 官运/null 官运亨通/null 官逼/null 官逼民反/null 官道/null 官邸/null 官长/null 官阶/null 官非/null 官饷/null 宙斯/null 宙斯盾/null 定上/null 定下/null 定不/null 定为/null 定义/null 定义域/null 定了/null 定于/null 定于一尊/null 定产/null 定亲/null 定人/null 定价/null 定会/null 定位/null 定位器/null 定作/null 定使/null 定例/null 定做/null 定兴/null 定军山/null 定冠词/null 定准/null 定出/null 定分/null 定则/null 定制/null 定力/null 定势/null 定单/null 定南/null 定名/null 定名为/null 定名称/null 定向/null 定向培育/null 定向天线/null 定向爆破/null 定向越野/null 定员/null 定喘丸/null 定场白/null 定场诗/null 定址/null 定型/null 定型水/null 定夺/null 定好/null 定婚/null 定子/null 定存/null 定安/null 定宽/null 定局/null 定居/null 定居点/null 定居者/null 定岗/null 定州/null 定常态/null 定幅/null 定序/null 定座/null 定座率/null 定式/null 定弦/null 定当/null 定形/null 定影/null 定影剂/null 定律/null 定心/null 定心丸/null 定性/null 定性分析/null 定性处理/null 定性理论/null 定息/null 定情/null 定数/null 定数额/null 定日/null 定时/null 定时信管/null 定时器/null 定时摄影/null 定时炸弹/null 定时钟/null 定时间/null 定更/null 定有/null 定期/null 定期储蓄/null 定期存款/null 定期性/null 定来/null 定标/null 定标器/null 定样/null 定格/null 定案/null 定植/null 定洋/null 定海/null 定海区/null 定滑轮/null 定点/null 定点企业/null 定点厂/null 定然/null 定版/null 定物/null 定理/null 定界/null 定界符/null 定界线/null 定界限/null 定盘星/null 定直线/null 定睛/null 定礼/null 定神/null 定票/null 定税/null 定税额/null 定稿/null 定约/null 定级/null 定结/null 定编/null 定罪/null 定置/null 定职/null 定职位/null 定能/null 定舱/null 定色/null 定苗/null 定襄/null 定西/null 定西地区/null 定见/null 定规/null 定角色/null 定言/null 定计/null 定计划/null 定论/null 定语/null 定调/null 定调子/null 定谳/null 定货/null 定购/null 定距/null 定边/null 定远/null 定远营/null 定都/null 定量/null 定量分块/null 定量分析/null 定量配/null 定金/null 定钱/null 定银/null 定阅/null 定限/null 定陪/null 定陵/null 定陶/null 定音/null 定音鼓/null 定项/null 定顺序/null 定额/null 定额工资制/null 定额税/null 定额管理/null 定额组/null 定风针/null 定鼎/null 宛城/null 宛城区/null 宛如/null 宛延/null 宛然/null 宛然在目/null 宛若/null 宛蜒/null 宛转/null 宜丰/null 宜于/null 宜人/null 宜兰/null 宜兴/null 宜君/null 宜喜宜嗔/null 宜嗔宜喜/null 宜在/null 宜城/null 宜室宜家/null 宜家/null 宜宾/null 宜宾地区/null 宜将/null 宜居/null 宜山/null 宜山县/null 宜山镇/null 宜川/null 宜州/null 宜敲勿捧/null 宜昌/null 宜昌县/null 宜昌地区/null 宜春/null 宜春地区/null 宜秀/null 宜秀区/null 宜章/null 宜良/null 宜都/null 宜阳/null 宜黄/null 宝中之宝/null 宝丰/null 宝丽金/null 宝书/null 宝位/null 宝兴/null 宝典/null 宝刀/null 宝刀不老/null 宝刀未老/null 宝刹/null 宝剑/null 宝卷/null 宝号/null 宝器/null 宝地/null 宝坻/null 宝塔/null 宝塔区/null 宝塔菜/null 宝安/null 宝安区/null 宝宝/null 宝山/null 宝山乡/null 宝山空回/null 宝岛/null 宝库/null 宝应/null 宝座/null 宝成铁路/null 宝林/null 宝殿/null 宝洁/null 宝洁公司/null 宝清/null 宝物/null 宝特瓶/null 宝玉/null 宝珠/null 宝瓶/null 宝瓶座/null 宝生佛/null 宝盆/null 宝盒/null 宝盖/null 宝石/null 宝石匠/null 宝石商/null 宝石蓝/null 宝箱/null 宝莱坞/null 宝葫芦/null 宝葫芦的秘密/null 宝蓝/null 宝藏/null 宝贝/null 宝贝儿/null 宝贝疙瘩/null 宝货/null 宝贵/null 宝贵意见/null 宝贵财富/null 宝重/null 宝鉴/null 宝钢/null 宝钢集团/null 宝马/null 宝马车/null 宝马香车/null 宝鸡/null 实与有力/null 实业/null 实业家/null 实业界/null 实为/null 实习/null 实习期/null 实习生/null 实事/null 实事求是/null 实交/null 实付/null 实价/null 实体/null 实体化/null 实体图/null 实体层/null 实体店/null 实例/null 实值/null 实像/null 实况/null 实况录像/null 实况录音/null 实况转播/null 实出无耐/null 实分析/null 实则/null 实利/null 实利主义/null 实力/null 实力政策/null 实力派/null 实力统计/null 实力雄厚/null 实务/null 实发/null 实受资本/null 实变/null 实变函数/null 实变函数论/null 实可/null 实名/null 实名制/null 实在/null 实在性/null 实在物/null 实在论/null 实地/null 实地考察/null 实地访视/null 实型/null 实境/null 实处/null 实女/null 实字/null 实存/null 实学/null 实实/null 实实在在/实在 实层/null 实属/null 实属不易/null 实岁/null 实干/null 实干家/null 实弹/null 实录/null 实得/null 实心/null 实心球/null 实心皮球/null 实性/null 实情/null 实惠/null 实意/null 实感/null 实战/null 实才/null 实打实/null 实报实销/null 实拍/null 实据/null 实收/null 实效/null 实数/null 实数值/null 实数集/null 实施/null 实施办法/null 实施细则/null 实施者/null 实无/null 实时/null 实时加工/null 实时技术/null 实时操作环境/null 实是/null 实景/null 实有/null 实权/null 实根/null 实派/null 实测/null 实物/null 实物地租/null 实物教学/null 实现/null 实现好/null 实用/null 实用主义/null 实用价值/null 实用型/null 实用性/null 实用技术/null 实用文/null 实用阶段/null 实症/null 实益/null 实相/null 实繁有徒/null 实纳/null 实线/null 实绩/null 实缺/null 实耗/null 实职/null 实肘/null 实股/null 实至名归/null 实蕃有徒/null 实行/null 实行家/null 实行改革/null 实行者/null 实观/null 实觉/null 实言相告/null 实证/null 实证主义/null 实证论/null 实词/null 实话/null 实话实说/null 实说/null 实质/null 实质上/null 实质性/null 实质问题/null 实购/null 实足/null 实践/null 实践中/null 实践是检验真理的唯一标准/null 实践经验/null 实践论/null 实践证明/null 实销/null 实际/null 实际上/null 实际困难/null 实际增长/null 实际工作/null 实际工资/null 实际应用/null 实际性/null 实际情况/null 实际意义/null 实际收入/null 实际水平/null 实际生活/null 实际行动/null 实际问题/null 实际需要/null 实难/null 实验/null 实验上/null 实验主义/null 实验员/null 实验室/null 实验室感染/null 实验心理学/null 实验性/null 实验所/null 实验者/null 宠信/null 宠儿/null 宠坏/null 宠幸/null 宠恩/null 宠擅专房/null 宠爱/null 宠物/null 宠臣/null 宠辱不惊/null 宠辱无惊/null 宠辱若惊/null 审判/null 审判上/null 审判前/null 审判员/null 审判学/null 审判席/null 审判庭/null 审判权/null 审判栏/null 审判程序/null 审判者/null 审判长/null 审前/null 审处/null 审官/null 审定/null 审察/null 审察人/null 审己度人/null 审干/null 审度/null 审度时势/null 审慎/null 审慎行事/null 审批/null 审改/null 审断/null 审时定势/null 审时度势/null 审曲面势/null 审查/null 审查员/null 审查委员会/null 审查核准/null 审查者/null 审校/null 审核/null 审案/null 审理/null 审稿/null 审稿人/null 审级/null 审级制度/null 审结/null 审美/null 审美快感/null 审美感受/null 审美活动/null 审美眼光/null 审美者/null 审美观/null 审美观点/null 审美评价/null 审视/null 审计/null 审计员/null 审计学/null 审计局/null 审计工作/null 审计署/null 审计长/null 审订/null 审议/null 审讯/null 审读/null 审谛/null 审酌/null 审问/null 审问者/null 审阅/null 审验/null 客上/null 客串/null 客人/null 客位/null 客体/null 客卿/null 客厅/null 客员/null 客商/null 客囊羞涩/null 客土/null 客地/null 客场/null 客堂/null 客套/null 客套话/null 客姓/null 客官/null 客客气气/null 客室/null 客家/null 客家人/null 客家语/null 客居/null 客岁/null 客帮/null 客店/null 客座/null 客座教授/null 客性/null 客户/null 客户应用/null 客户服务/null 客户服务中心/null 客户服务器结构/null 客户服务部/null 客户机/null 客户机服务器环境/null 客户机软件/null 客户端/null 客房/null 客星/null 客服/null 客机/null 客来/null 客栈/null 客梯/null 客死/null 客气/null 客气话/null 客流/null 客流量/null 客满/null 客物/null 客票/null 客站/null 客籍/null 客舍/null 客舱/null 客船/null 客蚤/null 客蚤属/null 客西马尼园/null 客西马尼花园/null 客观/null 客观世界/null 客观主义/null 客观事实/null 客观化/null 客观原因/null 客观唯心主义/null 客观存在/null 客观实在/null 客观实际/null 客观性/null 客观情况/null 客观条件/null 客观真理/null 客观规律/null 客观辩证法/null 客语/null 客货/null 客车/null 客车厢/null 客轮/null 客运/null 客运码头/null 客运量/null 客队/null 客饭/null 客驳/null 宣传/null 宣传文案/宣传方案 宣传册/null 宣传员/null 宣传周/null 宣传品/null 宣传工作/null 宣传弹/null 宣传性/null 宣传报道/null 宣传提纲/null 宣传攻势/null 宣传教育/null 宣传月/null 宣传画/null 宣传科/null 宣传者/null 宣传部/null 宣传部长/null 宣传队/null 宣判/null 宣化/null 宣化区/null 宣叙调/null 宣召/null 宣告/null 宣告者/null 宣城/null 宣威/null 宣州/null 宣州区/null 宣布/null 宣布破产/null 宣德/null 宣恩/null 宣战/null 宣扬/null 宣扬者/null 宣教/null 宣明/null 宣武/null 宣武门/null 宣汉/null 宣泄/null 宣示/null 宣称/null 宣纸/null 宣统/null 宣腿/null 宣言/null 宣言者/null 宣誓/null 宣誓书/null 宣誓供词证明/null 宣誓就职/null 宣誓证言/null 宣认/null 宣讲/null 宣读/null 宣道/null 室中/null 室乐/null 室内/null 室内乐/null 室内装潢/null 室内设计/null 室前/null 室厅/null 室友/null 室名/null 室员/null 室外/null 室女/null 室女座/null 室如悬磐/null 室如悬罄/null 室怒市色/null 室息性毒剂/null 室温/null 室町/null 室町幕府/null 室迩人远/null 室迩人遐/null 室里/null 宦乡/null 宦官/null 宦海/null 宦海风波/null 宦游/null 宦途/null 宦门/null 宦骑/null 宪兵/null 宪兵队/null 宪制/null 宪政/null 宪法/null 宪法学/null 宪法法院/null 宪法监护委员会/null 宪法规定/null 宪章/null 宪章派/null 宪章运动/null 宪纲/null 宫主/null 宫人/null 宫体/null 宫保/null 宫保鸡丁/null 宫内/null 宫内节育器/null 宫刑/null 宫商角徵羽/null 宫城/null 宫城县/null 宫墙/null 宫外/null 宫女/null 宫娥/null 宫室/null 宫崎/null 宫崎县/null 宫崎吾朗/null 宫崎骏/null 宫廷/null 宫廷政变/null 宫廷舞蹈/null 宫掖/null 宫殿/null 宫殿似/null 宫泽喜一/null 宫灯/null 宫爆肉丁/null 宫爆鸡丁/null 宫画/null 宫缩/null 宫观/null 宫调/null 宫里/null 宫镜/null 宫门/null 宫闱/null 宫阙/null 宫颈/null 宫颈抹片/null 宰予/null 宰予昼寝/null 宰人/null 宰制/null 宰割/null 宰客/null 宰杀/null 宰牲节/null 宰相/null 宰羊/null 宰食/null 害了/null 害于/null 害人/null 害人不浅/null 害人精/null 害人虫/null 害兽/null 害口/null 害命/null 害喜/null 害处/null 害己/null 害得/null 害怕/null 害性/null 害我/null 害月子/null 害死/null 害病/null 害相思病/null 害眼/null 害羞/null 害群之马/null 害臊/null 害自/null 害虫/null 害马/null 害鸟/null 宴乐/null 宴会/null 宴会厅/null 宴安鸩毒/null 宴客/null 宴席/null 宴请/null 宴飨/null 宴饮/null 宵分/null 宵夜/null 宵小/null 宵征/null 宵旰/null 宵旰图治/null 宵旰忧劳/null 宵旰忧勤/null 宵旰焦劳/null 宵禁/null 宵衣旰食/null 宵遁/null 家丁/null 家上/null 家丑/null 家丑不可外传/null 家丑不可外扬/null 家世/null 家世寒微/null 家业/null 家严/null 家中/null 家乐福/null 家乡/null 家乡人/null 家乡菜/null 家乡话/null 家乡鸡/null 家书/null 家事/null 家产/null 家场/null 家亲/null 家人/null 家人一等/null 家什/null 家仆/null 家伙/null 家传/null 家佣/null 家信/null 家俱/null 家僮/null 家儿/null 家兄/null 家兔/null 家公/null 家具/null 家具商/null 家养/null 家务/null 家务事/null 家务劳动/null 家务活/null 家区/null 家叔/null 家口/null 家史/null 家名/null 家和万事兴/null 家喻户晓/null 家园/null 家坝水电站/null 家培/null 家塾/null 家境/null 家天下/null 家奴/null 家妇/null 家姊/null 家姐/null 家姑/null 家姓/null 家姬/null 家娘/null 家婆/null 家嫂/null 家子/null 家学/null 家学渊源/null 家宅/null 家室/null 家宴/null 家家/null 家家户户/null 家家有本难念的经/null 家小/null 家居/null 家属/null 家属区/null 家属宿舍/null 家常/null 家常便饭/null 家常服/null 家常茶饭/null 家常菜/null 家常豆腐/null 家底/null 家庭/null 家庭中/null 家庭主夫/null 家庭主妇/null 家庭似/null 家庭作业/null 家庭出身/null 家庭制/null 家庭副业/null 家庭地址/null 家庭妇女/null 家庭式/null 家庭成员/null 家庭手工业/null 家庭教师/null 家庭暴力/null 家庭消费者/null 家庭煮夫/null 家弟/null 家弦户诵/null 家当/null 家徒四壁/null 家徒壁立/null 家慈/null 家政/null 家政员/null 家政学/null 家教/null 家数/null 家族/null 家族制度/null 家族树/null 家无儋石/null 家无担石/null 家景/null 家暴/null 家有/null 家有敝帚享之千金/null 家母/null 家法/null 家灶/null 家燕/null 家父/null 家爷/null 家犬/null 家狗/null 家猫/null 家珍/null 家用/null 家用电器/null 家用电脑/null 家电/null 家畜/null 家的/null 家眷/null 家破人亡/null 家破身亡/null 家祖/null 家祠/null 家禽/null 家禽肉/null 家私/null 家种/null 家童/null 家累/null 家累千金/null 家给人足/null 家给民足/null 家翻宅乱/null 家老/null 家臣/null 家至人说/null 家至户晓/null 家舅/null 家蚊/null 家蚕/null 家蝇/null 家规/null 家计/null 家训/null 家访/null 家谱/null 家财/null 家败人亡/null 家贫如洗/null 家贼难防/null 家赀万贯/null 家资/null 家轿/null 家道/null 家道从容/null 家道消乏/null 家里/null 家钵/null 家长/null 家长会/null 家长制/null 家长式/null 家长里短/null 家门/null 家雀儿/null 家风/null 家鸡/null 家鸡野雉/null 家鸡野鹜/null 家鸭/null 家鸭绿头鸭/null 家鸽/null 家鼠/null 容下/null 容不得/null 容人/null 容光/null 容光焕发/null 容克/null 容克地主/null 容华绝代/null 容受/null 容器/null 容城/null 容头过身/null 容幸/null 容度/null 容得/null 容忍/null 容忍度/null 容情/null 容或/null 容抗/null 容易/null 容易发/null 容易哭/null 容易教/null 容易错/null 容止/null 容电器/null 容留/null 容祖儿/null 容积/null 容积效率/null 容积计/null 容纳/null 容纳物/null 容缓/null 容让/null 容许/null 容许有/null 容貌/null 容身/null 容量/null 容量分析/null 容量大/null 容量瓶/null 容错/null 容颜/null 容颜失色/null 宽于/null 宽亮/null 宽以待人/null 宽余/null 宽假/null 宽免/null 宽减/null 宽厚/null 宽口/null 宽吻海豚/null 宽城/null 宽城区/null 宽城县/null 宽大/null 宽大为怀/null 宽大仁爱/null 宽大处理/null 宽大政策/null 宽宏/null 宽宏大度/null 宽宏大量/null 宽宥/null 宽容/null 宽屏/null 宽展/null 宽带/null 宽幅/null 宽广/null 宽广度/null 宽度/null 宽延/null 宽弘/null 宽影片/null 宽待/null 宽心/null 宽心丸/null 宽心丸儿/null 宽恕/null 宽慰/null 宽打/null 宽打窄用/null 宽敞/null 宽斧/null 宽旷/null 宽松/null 宽松环境/null 宽泛/null 宽洪/null 宽洪大度/null 宽洪大量/null 宽洪海量/null 宽爱/null 宽爽/null 宽狭/null 宽猛相济/null 宽甸/null 宽甸县/null 宽畅/null 宽窄/null 宽紧/null 宽纵/null 宽线/null 宽绰/null 宽缓/null 宽胶带/null 宽腰/null 宽舒/null 宽行/null 宽衣/null 宽袖/null 宽裕/null 宽规/null 宽角度/null 宽解/null 宽让/null 宽贷/null 宽赦/null 宽路/null 宽轨/null 宽边/null 宽边帽/null 宽银幕/null 宽银幕影片/null 宽银幕电影/null 宽阔/null 宽限/null 宽限期/null 宽领/null 宽频/null 宽饶/null 宾东/null 宾主/null 宾主双方/null 宾利/null 宾夕法尼亚/null 宾夕法尼亚大学/null 宾夕法尼亚州/null 宾客/null 宾客如云/null 宾客盈门/null 宾室/null 宾川/null 宾州/null 宾得/null 宾朋/null 宾朋满座/null 宾朋盈门/null 宾服/null 宾果/null 宾格/null 宾治/null 宾白/null 宾礼/null 宾至/null 宾至如归/null 宾西法尼亚/null 宾词/null 宾语/null 宾语关系从句/null 宾阳/null 宾馆/null 宿世冤家/null 宿主/null 宿于/null 宿仇/null 宿债/null 宿儒/null 宿分/null 宿务/null 宿卫/null 宿县/null 宿县地区/null 宿命/null 宿命论/null 宿城/null 宿城区/null 宿处/null 宿夜/null 宿娼/null 宿学旧儒/null 宿将/null 宿将旧卒/null 宿州/null 宿弊/null 宿怨/null 宿恨/null 宿愿/null 宿敌/null 宿昔/null 宿星/null 宿松/null 宿根/null 宿疾/null 宿缘/null 宿舍/null 宿舍楼/null 宿草/null 宿营/null 宿营地/null 宿见/null 宿诺/null 宿豫/null 宿豫区/null 宿费/null 宿迁/null 宿逋/null 宿酒/null 宿醉/null 宿雾/null 宿题/null 寂寂/null 寂寞/null 寂寥/null 寂灭/null 寂然/null 寂若无人/null 寂若死灰/null 寂静/null 寄上/null 寄主/null 寄予/null 寄予厚望/null 寄交/null 寄人篱下/null 寄件人/null 寄件者/null 寄住/null 寄信/null 寄信人/null 寄养/null 寄出/null 寄到/null 寄卖/null 寄去/null 寄发/null 寄名/null 寄售/null 寄售品/null 寄回/null 寄女/null 寄子/null 寄存/null 寄存器/null 寄存处/null 寄宿/null 寄宿人/null 寄宿学校/null 寄宿生/null 寄宿舍/null 寄寓/null 寄居/null 寄居蟹/null 寄希望于/null 寄往/null 寄怀/null 寄情/null 寄托/null 寄托人/null 寄放/null 寄望/null 寄来/null 寄母/null 寄父/null 寄生/null 寄生物/null 寄生生活/null 寄生者/null 寄生虫/null 寄生蜂/null 寄的/null 寄籍/null 寄给/null 寄自/null 寄至/null 寄语/null 寄费/null 寄赠/null 寄赠本/null 寄身/null 寄辞/null 寄达/null 寄迹/null 寄送/null 寄递/null 寄钱/null 寄销/null 寄顿/null 寅吃卯粮/null 寅忧夕惕/null 寅支卯粮/null 寅时/null 寅虎/null 密不可分/null 密不透风/null 密事/null 密云/null 密云不雨/null 密令/null 密件/null 密会/null 密位/null 密使/null 密信/null 密克罗尼西亚/null 密函/null 密切/null 密切关系/null 密切协作/null 密切合作/null 密切接触/null 密切注意/null 密切注视/null 密切相关/null 密切相连/null 密切联系群众/null 密切配合/null 密匝匝/null 密县/null 密友/null 密司脱/null 密合/null 密告/null 密告者/null 密商/null 密宗/null 密定/null 密实/null 密室/null 密密/null 密密丛丛/null 密密匝匝/null 密密实实/null 密密层层/null 密密扎扎/null 密密麻麻/null 密封/null 密封剂/null 密封器/null 密封圈/null 密封胶/null 密封舱/null 密封辐射源/null 密尔沃基/null 密山/null 密布/null 密帐/null 密度/null 密度波/null 密度计/null 密技/null 密报/null 密排/null 密探/null 密接/null 密教/null 密文/null 密斯/null 密旨/null 密林/null 密植/null 密檐塔/null 密歇根/null 密歇根大学/null 密歇根州/null 密歇根湖/null 密气/null 密法/null 密特朗/null 密电/null 密电码/null 密码/null 密码保护/null 密码子/null 密码学/null 密码术/null 密码机/null 密码法/null 密码电报/null 密码锁/null 密穴/null 密约/null 密级/null 密纹唱片/null 密织/null 密缝/null 密而不宣/null 密致/null 密苏里/null 密苏里州/null 密苏里洲/null 密茂/null 密藏/null 密西根/null 密西西比/null 密西西比州/null 密西西比河/null 密议/null 密访/null 密诀/null 密诏/null 密语/null 密谈/null 密谋/null 密谋者/null 密送/null 密钥/null 密锣紧鼓/null 密闭/null 密闭式循环再呼吸水肺系统/null 密闭舱/null 密闭货舱/null 密闭门/null 密陀僧/null 密集/null 密集井群/null 密集体/null 密集型/null 密集物/null 密麻麻/null 寇仇/null 寇准/null 寇攘/null 富丽/null 富丽堂皇/null 富二代/null 富于/null 富于想像/null 富人/null 富佃/null 富余/null 富兰克林/null 富农/null 富农分子/null 富可敌国/null 富同/null 富含/null 富商/null 富国/null 富国安民/null 富国强兵/null 富埒天子/null 富士/null 富士山/null 富士康/null 富士康科技集团/null 富士通/null 富婆/null 富孀/null 富宁/null 富家/null 富富有余/null 富尔不骄/null 富川县/null 富布赖特/null 富平/null 富庶/null 富强/null 富强纤维/null 富得流油/null 富态/null 富想/null 富户/null 富拉尔基/null 富拉尔基区/null 富於/null 富时/null 富春江/null 富有/null 富有成效/null 富比王侯/null 富民/null 富民政策/null 富源/null 富矿/null 富纳富提/null 富翁/null 富而好礼/null 富良野/null 富色彩/null 富蕴/null 富裕/null 富裕中农/null 富裕户/null 富豪/null 富贵/null 富贵不淫/null 富贵不能淫/null 富贵利达/null 富贵寿考/null 富贵无常/null 富贵浮云/null 富贵病/null 富贵荣华/null 富贵角/null 富贵逼人/null 富贵骄人/null 富足/null 富邦/null 富里/null 富里乡/null 富锦/null 富阳/null 富顺/null 富饶/null 寐神/null 寐龙/null 寒亭/null 寒亭区/null 寒伧/null 寒假/null 寒光/null 寒光闪闪/null 寒冬/null 寒冬腊月/null 寒冷/null 寒号虫/null 寒喧/null 寒喧语/null 寒噤/null 寒士/null 寒夜/null 寒天/null 寒峭/null 寒带/null 寒微/null 寒心/null 寒心酸鼻/null 寒性/null 寒意/null 寒战/null 寒暄/null 寒暑/null 寒暑假/null 寒暑表/null 寒木春花/null 寒来暑往/null 寒梅/null 寒武/null 寒武爆发/null 寒武系/null 寒武纪/null 寒武纪大爆发/null 寒武纪生命大爆发/null 寒毛/null 寒气/null 寒气逼人/null 寒泉之思/null 寒流/null 寒潮/null 寒热/null 寒疟/null 寒症/null 寒痹/null 寒碜/null 寒秋/null 寒窗/null 寒耕热耘/null 寒腿/null 寒舍/null 寒色/null 寒花晚节/null 寒苦/null 寒蝉/null 寒蝉仗马/null 寒衣/null 寒酸/null 寒门/null 寒霜/null 寒颤/null 寒风/null 寒风刺骨/null 寒食/null 寒鸦/null 寓书/null 寓于/null 寓公/null 寓居/null 寓意/null 寓意深远/null 寓意深长/null 寓所/null 寓教/null 寓目/null 寓管理于服务之中/null 寓言/null 寓言中/null 寓言诗/null 寝不安席/null 寝不遑安/null 寝具/null 寝室/null 寝宫/null 寝皮食肉/null 寝苫枕块/null 寝车/null 寝陵/null 寝食/null 寝食不安/null 寝食俱废/null 寝食难安/null 寞然/null 察三访四/null 察合台/null 察察/null 察察为明/null 察察而明/null 察尔汗盐湖/null 察布查尔/null 察布查尔县/null 察微知著/null 察看/null 察纳/null 察见渊鱼/null 察觉/null 察觉到/null 察言观色/null 察访/null 察隅/null 察雅/null 察验/null 寡不敌众/null 寡二少双/null 寡人/null 寡众/null 寡助/null 寡味/null 寡头/null 寡头垄断/null 寡头政治/null 寡女/null 寡妇/null 寡居/null 寡居期/null 寡廉/null 寡廉鲜耻/null 寡恩少义/null 寡情/null 寡情少义/null 寡敌/null 寡断/null 寡欢/null 寡母/null 寡见/null 寡见鲜见/null 寡见鲜闻/null 寡言/null 寡闻/null 寡闻少见/null 寡陋/null 寤寐/null 寥寥/null 寥寥可数/null 寥寥数语/null 寥寥无几/null 寥廓/null 寥若晨星/null 寥落/null 寨主/null 寨外/null 寨子/null 寮共/null 寮国/null 寮屋/null 寰宇/null 寰球/null 寰螽/null 寸丝不挂/null 寸兵尺铁/null 寸函/null 寸口/null 寸口脉/null 寸善片长/null 寸土/null 寸土不让/null 寸土尺地/null 寸土必争/null 寸地尺天/null 寸头/null 寸心/null 寸揩/null 寸断/null 寸晷/null 寸有所长/null 寸木岑楼/null 寸楷/null 寸步/null 寸步不离/null 寸步不让/null 寸步难移/null 寸步难行/null 寸男尺女/null 寸白虫/null 寸积铢累/null 寸脉/null 寸草/null 寸草不生/null 寸草不留/null 寸草春晖/null 寸金难买寸光阴/null 寸铁/null 寸长尺短/null 寸阳尺璧/null 寸阳若岁/null 寸阴/null 对上/null 对不上/null 对不住/null 对不对/null 对不起/null 对乙酰氨基酚/null 对了/null 对于/null 对亲/null 对仗/null 对付/null 对价/null 对位/null 对位法/null 对保/null 对偶/null 对偶多面体/null 对偶婚/null 对偶性/null 对像/null 对光/null 对内/null 对内搞活/null 对冲/null 对冲基金/null 对决/null 对准/null 对刺/null 对劲/null 对劲儿/null 对半/null 对华/null 对口/null 对口型/null 对口径/null 对口快板儿/null 对口疮/null 对口相声/null 对口词/null 对句/null 对台关系/null 对台戏/null 对台贸易/null 对号/null 对号入座/null 对味儿/null 对唱/null 对嘴/null 对地/null 对垒/null 对外/null 对外关系/null 对外开放/null 对外政策/null 对外经济贸易大学/null 对外联络部/null 对外贸易/null 对外贸易仲裁/null 对外贸易经济合作部/null 对大家来说/null 对头/null 对子/null 对家/null 对对子/null 对对碰/null 对局/null 对岸/null 对峙/null 对工/null 对工儿/null 对帐/null 对幺/null 对床夜雨/null 对床风雨/null 对应/null 对开/null 对弈/null 对待/null 对得起/null 对心/null 对心儿/null 对恃/null 对我来说/null 对手/null 对打/null 对抗/null 对抗性/null 对抗性矛盾/null 对抗煸动/null 对抗者/null 对抗赛/null 对折/null 对持/null 对换/null 对接/null 对撞/null 对撞机/null 对攻/null 对敌/null 对敌者/null 对数/null 对数函数/null 对数方程/null 对方/null 对方付款电话/null 对方付费电话/null 对日/null 对映/null 对映体/null 对映异构/null 对映异构体/null 对景伤情/null 对望/null 对本/null 对杯/null 对案/null 对歌/null 对比/null 对比度/null 对比法/null 对比温度/null 对比研究/null 对比联想/null 对比色/null 对氨基苯丙酮/null 对流/null 对流层/null 对流层顶/null 对流热/null 对流雨/null 对消/null 对火/null 对焦/null 对照/null 对照一下/null 对照法/null 对照者/null 对照表/null 对牛弹琴/null 对现/null 对症下药/null 对症发药/null 对白/null 对着干/null 对硫磷/null 对称/null 对称中心/null 对称性/null 对称点/null 对称破缺/null 对称空间/null 对称美/null 对称轴/null 对空射击/null 对空火器/null 对空观察哨/null 对立/null 对立统一/null 对立统一规律/null 对立面/null 对等/null 对答/null 对答如流/null 对策/null 对簿/null 对簿公堂/null 对美/null 对联/null 对胃口/null 对苯二甲酸/null 对苯二酚/null 对苯醌/null 对茬儿/null 对虾/null 对虾科/null 对表/null 对衬/null 对襟/null 对视/null 对角/null 对角线/null 对讲/null 对讲机/null 对讲电话/null 对证/null 对证命名/null 对词/null 对话/null 对话体/null 对话框/null 对话者/null 对话课/null 对课/null 对调/null 对谈/null 对象/null 对象性/null 对账/null 对质/null 对路/null 对边/null 对过/null 对酌/null 对酒当歌/null 对错/null 对门/null 对阵/null 对面/null 对顶角/null 对题/null 对马/null 对马岛/null 对马海峡/null 对齐/null 寺内/null 寺塔/null 寺庙/null 寺院/null 寺院中/null 寻乌/null 寻乐/null 寻事/null 寻事生非/null 寻亲/null 寻人/null 寻人启事/null 寻仇/null 寻出/null 寻到/null 寻味/null 寻呼/null 寻回/null 寻回犬/null 寻址/null 寻宝/null 寻山问水/null 寻常/null 寻幽访胜/null 寻底/null 寻开心/null 寻思/null 寻找/null 寻摸/null 寻机/null 寻来范畴/null 寻根/null 寻根溯源/null 寻根究底/null 寻根问底/null 寻梦/null 寻欢/null 寻欢作乐/null 寻死/null 寻死觅活/null 寻求/null 寻甸县/null 寻甸回族彝族自治县/null 寻的/null 寻短见/null 寻租/null 寻究/null 寻章摘句/null 寻花/null 寻花问柳/null 寻衅/null 寻行数墨/null 寻觅/null 寻访/null 寻踪/null 寻踪觅迹/null 寻迹/null 寻道/null 寻问/null 寻问者/null 导体/null 导入/null 导入期/null 导出/null 导出值/null 导函数/null 导医/null 导向/null 导坑/null 导尿/null 导尿管/null 导师/null 导引/null 导弹/null 导弹快艇/null 导弹战/null 导弹旅/null 导弹核潜艇/null 导弹武器技术控制制度/null 导弹潜艇/null 导弹艇/null 导德齐礼/null 导扬/null 导报/null 导播/null 导数/null 导板/null 导标/null 导水管/null 导沟/null 导油/null 导流/null 导流板/null 导液管/null 导游/null 导源/null 导演/null 导火/null 导火索/null 导火线/null 导热/null 导热性/null 导电/null 导电性/null 导盲犬/null 导磁/null 导磁率/null 导管/null 导管素/null 导管组织/null 导纳/null 导线/null 导致/null 导致死亡/null 导航/null 导航员/null 导航雷达/null 导言/null 导论/null 导语/null 导读/null 导购/null 导赤丸/null 导轨/null 导轮/null 导通/null 寿丰/null 寿丰乡/null 寿保险公司/null 寿光/null 寿光鸡/null 寿司/null 寿命/null 寿堂/null 寿宁/null 寿山福海/null 寿数/null 寿数已尽/null 寿斑/null 寿星/null 寿木/null 寿材/null 寿桃/null 寿桃包/null 寿比南山/null 寿满天年/null 寿王坟/null 寿王坟镇/null 寿礼/null 寿穴/null 寿筵/null 寿终/null 寿终正寝/null 寿考/null 寿联/null 寿衣/null 寿衾/null 寿诞/null 寿辰/null 寿阳/null 寿限/null 寿险/null 寿陵匍匐/null 寿陵失步/null 寿面/null 封一/null 封三/null 封上/null 封丘/null 封为/null 封二/null 封住/null 封侯/null 封信/null 封候/null 封入/null 封冻/null 封函/null 封刀/null 封包/null 封印/null 封口/null 封口蜡/null 封号/null 封喉/null 封土/null 封地/null 封夺/null 封套/null 封妻荫子/null 封妻阴子/null 封存/null 封官/null 封官许愿/null 封封/null 封山/null 封山育林/null 封帐/null 封底/null 封建/null 封建主/null 封建主义/null 封建制度/null 封建割据/null 封建土地所有制/null 封建思想/null 封建性/null 封建把头/null 封建时代/null 封建社会/null 封建社会主义/null 封开/null 封斋/null 封斋节/null 封杀/null 封条/null 封檐板/null 封死/null 封沙育林/null 封河/null 封河期/null 封泥/null 封港/null 封火/null 封爵/null 封牢/null 封疆/null 封皮/null 封盖/null 封神/null 封神榜/null 封神演义/null 封禁/null 封禅/null 封签/null 封缄/null 封网/null 封胡羯末/null 封胡遏末/null 封臣/null 封舱/null 封蜡/null 封袋/null 封装/null 封装块/null 封裹/null 封豕长蛇/null 封赏/null 封赠/null 封邑/null 封里/null 封锁/null 封锁线/null 封门/null 封掉/封闭 封闭/封掉 封闭器/null 封闭型/null 封闭式/null 封闭性/null 封闭性开局/null 封闭疗法/null 封面/null 封顶/null 封顶仪式/null 射中/null 射倒/null 射入/null 射出/null 射击/null 射击场/null 射击学/null 射击比赛/null 射击理论/null 射击训练/null 射击运动/null 射到/null 射向/null 射孔/null 射完/null 射层/null 射干/null 射弹/null 射影/null 射影几何/null 射影几何学/null 射影变换/null 射手/null 射手座/null 射杀/null 射极/null 射洪/null 射流/null 射流技术/null 射灯/null 射猎/null 射电/null 射电天文学/null 射电望远镜/null 射界/null 射石饮羽/null 射程/null 射箭/null 射精/null 射精管/null 射线/null 射能/null 射角/null 射速/null 射钉/null 射钉枪/null 射门/null 射阳/null 射雕英雄传/null 射频/null 射频噪声/null 射频干扰/null 射频武器/null 射频识别/null 射频调谐器/null 将上/null 将不/null 将且/null 将临/null 将为/null 将乐/null 将于/null 将今论古/null 将从/null 将他/null 将令/null 将以/null 将会/null 将伯/null 将伯之助/null 将使/null 将信将疑/null 将其/null 将养/null 将军/null 将军乡/null 将军肚子/null 将到/null 将功折罪/null 将功折过/null 将功补过/null 将功赎罪/null 将勤补拙/null 将勤补绌/null 将去/null 将同/null 将向/null 将增/null 将士/null 将她/null 将如/null 将它/null 将官/null 将对/null 将就/null 将帅/null 将心比心/null 将息/null 将成/null 将或/null 将才/null 将打开/null 将把/null 将指/null 将是/null 将有/null 将朝/null 将本图利/null 将机就机/null 将机就计/null 将来/null 将来临/null 将校/null 将棋/null 将次/null 将此/null 将死/null 将比/null 将牌/null 将由/null 将略/null 将相/null 将给/null 将至/null 将虾钓鳖/null 将被/null 将要/null 将要来/null 将计就计/null 将近/null 将遇良才/null 将那/null 将错就错/null 将门/null 将门出将/null 将门有将/null 将领/null 尉官/null 尉氏/null 尉犁/null 尉缭/null 尉缭子/null 尉迟/null 尉迟恭/null 尊严/null 尊为/null 尊亲/null 尊从/null 尊公/null 尊卑/null 尊口/null 尊古卑今/null 尊号/null 尊君/null 尊命/null 尊堂/null 尊奉/null 尊姓/null 尊姓大名/null 尊官厚禄/null 尊容/null 尊尚/null 尊崇/null 尊己卑人/null 尊师/null 尊师爱徒/null 尊师贵道/null 尊师重教/null 尊师重道/null 尊年尚齿/null 尊府/null 尊心/null 尊意/null 尊敬/null 尊称/null 尊翁/null 尊老/null 尊老爱幼/null 尊者/null 尊荣/null 尊贤使能/null 尊贤爱物/null 尊贵/null 尊酒论文/null 尊重/null 尊重事实/null 尊重人才/null 尊重客观事实/null 尊重知识/null 尊长/null 尊颜/null 尊驾/null 尊鱼/null 小三/null 小三和弦/null 小三度/null 小不忍则乱大谋/null 小不点/null 小不点儿/null 小丑/null 小丑跳梁/null 小丑鱼/null 小丘/null 小业主/null 小东西/null 小两/null 小两口/null 小两口儿/null 小个/null 小丸/null 小丸药/null 小义大利/null 小乖/null 小乘/null 小九九/null 小书/null 小了/null 小争吵/null 小争执/null 小争论/null 小事/null 小事一桩/null 小事件/null 小事化了/null 小二/null 小于/null 小亏/null 小五金/null 小亚细亚/null 小些/null 小产/null 小亭/null 小人/null 小人书/null 小人儿/null 小人儿书/null 小人国/null 小人得志/null 小人物/null 小人长戚戚/null 小令/null 小份/null 小企业/null 小众/null 小伙/null 小伙儿/null 小伙子/null 小传/null 小佃农/null 小住/null 小住所/null 小便/null 小便器/null 小便宜/null 小便所/null 小便斗/null 小保姆/null 小俩口/null 小修/null 小偷/null 小偷儿/null 小偷小摸/null 小儿/null 小儿痲痹/null 小儿科/null 小儿经/null 小儿脐风散/null 小儿语/null 小儿软骨病/null 小儿麻痹/null 小儿麻痹病毒/null 小儿麻痹症/null 小兄弟/null 小先生/null 小兔/null 小公主/null 小公共/null 小兴安岭/null 小兵/null 小册/null 小册子/null 小写/null 小写体/null 小写字/null 小写字母/null 小农/null 小农场/null 小农经济/null 小冲突/null 小刀/null 小刀会/null 小刀会起义/null 小分枝/null 小分队/null 小则/null 小别/null 小到/null 小前提/null 小动作/null 小勺/null 小包/null 小区/null 小区域/null 小半/null 小半活/null 小协约国/null 小卒/null 小卖/null 小卖部/null 小卧室/null 小厂/null 小厨房/null 小厮/null 小反对/null 小发明/null 小叔/null 小叔子/null 小受大走/null 小变/null 小口/null 小叫/null 小可/null 小叶/null 小叶杨/null 小号/null 小吃/null 小吃店/null 小合唱/null 小同乡/null 小名/null 小吞噬细胞/null 小和尚/null 小咬/null 小品/null 小品文/null 小哥/null 小商/null 小商人/null 小商品/null 小商品经济/null 小商小贩/null 小商贩/null 小喇叭/null 小喜/null 小喜剧/null 小嗓/null 小嘴/null 小器/null 小器作/null 小器易盈/null 小团/null 小团体主义/null 小国/null 小国寡民/null 小国王/null 小圈/null 小圈子/null 小圈环/null 小场/null 小坏蛋/null 小坑/null 小块/null 小块土/null 小坚果/null 小型/null 小型企业/null 小型化/null 小型巴士/null 小型报/null 小型机/null 小型柜橱/null 小型核武器/null 小型汽车/null 小型货车/null 小型车/null 小城/null 小城市/null 小堆/null 小堡垒/null 小声/null 小处着手/null 小夜曲/null 小夥子/null 小天使/null 小天地/null 小天平/null 小天鹅/null 小太太/null 小头/null 小奏/null 小奖章/null 小套房/null 小女/null 小女子/null 小女孩/null 小如/null 小妖/null 小妖精/null 小妞/null 小妹/null 小姐/null 小姑/null 小姑娘/null 小姑子/null 小姨/null 小姨子/null 小娃/null 小娃娃/null 小娘/null 小娘子/null 小婿/null 小媳妇儿/null 小子/null 小孔/null 小字/null 小字辈/null 小学/null 小学教师/null 小学校/null 小学生/null 小孩/null 小孩似/null 小孩儿/null 小孩子/null 小宇宙/null 小宗/null 小官/null 小官僚/null 小宝/null 小客店/null 小家伙/null 小家子气/null 小家庭/null 小家碧玉/null 小家鼠/null 小容器/null 小寝室/null 小寨/null 小将/null 小小/null 小小不言/null 小小子/null 小小说/null 小尖塔/null 小尽/null 小屁孩/null 小屁孩日记/null 小屈大伸/null 小屋/null 小屋子/null 小山/null 小山丘/null 小山包包/null 小山羊/null 小岛/null 小岩洞/null 小峡谷/null 小川/null 小工/null 小工厂/null 小巧/null 小巧玲珑/null 小巫见大巫/null 小差/null 小巴/null 小巷/null 小市/null 小市民/null 小布/null 小布袋/null 小帐/null 小帽/null 小干/null 小平房/null 小年人/null 小广播/null 小床/null 小店/null 小店区/null 小康/null 小康水平/null 小康生活/null 小康社会/null 小廉大法/null 小廉曲谨/null 小建/null 小引/null 小弟/null 小弟弟/null 小张/null 小弹/null 小弹丸/null 小强/null 小影/null 小往大来/null 小径/null 小循环/null 小心/null 小心点/null 小心眼/null 小心眼儿/null 小心翼翼/null 小心谨慎/null 小忠小信/null 小性儿/null 小恩/null 小恭/null 小惠/null 小惩大诫/null 小意思/null 小憩/null 小戏/null 小成/null 小我/null 小户/null 小房/null 小房子/null 小房屋/null 小房间/null 小扁豆/null 小手/null 小手小脚/null 小手工业者/null 小手鼓/null 小打小闹/null 小批/null 小技/null 小抄/null 小抄儿/null 小把/null 小报/null 小拇哥儿/null 小拇指/null 小括号/null 小指/null 小捆/null 小提/null 小提琴/null 小提琴手/null 小提箱/null 小插曲/null 小摆设/null 小摊/null 小摊儿/null 小撮/null 小数/null 小数点/null 小斑点/null 小斗篷/null 小旅馆/null 小旗/null 小日子/null 小时/null 小时制/时制 小时候/null 小时候儿/null 小时工/null 小昊/null 小明星/null 小春/null 小春作物/null 小昭寺/null 小晌午/null 小曲/null 小曲儿/null 小月/null 小有/null 小朋友/null 小木材/null 小木槌/null 小本/null 小本生意/null 小本经营/null 小机枪/null 小村/null 小杖则受大杖则走/null 小束/null 小束状/null 小杯/null 小松糕/null 小枉大直/null 小林/null 小枝/null 小枪眼/null 小柱/null 小标题/null 小树/null 小树林/null 小树枝/null 小样/null 小桌/null 小桥/null 小桶/null 小楷/null 小楼/null 小槌/null 小歌剧/null 小步/null 小步舞曲/null 小段子/null 小母鸡/null 小毛/null 小毛病/null 小毛虫/null 小民/null 小气/null 小气候/null 小气腔/null 小气鬼/null 小水/null 小池/null 小池・百合子/null 小汤山/null 小汽车/null 小沙丘/null 小沟/null 小河/null 小河区/null 小泉/null 小泉・纯一郎/null 小泡/null 小波/null 小波动/null 小注/null 小洋/null 小洋葱/null 小洞/null 小洞不堵/null 小洞不堵沉大船/null 小洞不补大洞吃苦/null 小流氓/null 小浪/null 小海湾/null 小海雀/null 小淘气/null 小渊恵三/null 小港/null 小港区/null 小游/null 小湖/null 小溪/null 小溪流/null 小滴/null 小潮/null 小瀑布/null 小灌木/null 小火/null 小火花/null 小灵通/null 小灵通机站/null 小灶/null 小灾难/null 小炉儿匠/null 小点/null 小点心/null 小照/null 小熊/null 小熊座/null 小熊猫/null 小熊维尼/null 小片/null 小牛/null 小牛肉/null 小牝牛/null 小物件/null 小物体/null 小犬/null 小犬座/null 小狗/null 小狮子/null 小狮座/null 小猪/null 小猫/null 小猫似/null 小猫熊/null 小王子/null 小玩/null 小玩意/null 小环/null 小珠/null 小班/null 小球/null 小球体/null 小球性/null 小球藻/null 小瓶/null 小甜点/null 小生/null 小生产/null 小生产者/null 小生意/null 小男/null 小男孩/null 小畑健/null 小病/null 小白兔/null 小白脸/null 小白脸儿/null 小白菜/null 小白鼠/null 小百科全书/null 小百货/null 小的/null 小皇帝/null 小皮包/null 小盆/null 小盐/null 小盒/null 小盒子/null 小盘/null 小看/null 小真豫/null 小眼薄皮/null 小眼角/null 小睡/null 小瞧/null 小石/null 小石子/null 小砖/null 小碟/null 小碟子/null 小礼/null 小礼帽/null 小礼拜/null 小祖宗/null 小神仙/null 小票/null 小私有制/null 小秋收/null 小种/null 小税/null 小穴/null 小窗/null 小窝/null 小站/null 小站练兵/null 小童/null 小笔/null 小笔电/null 小笼包/null 小算盘/null 小箱/null 小篆/null 小米/null 小米面/null 小粉/null 小粒/null 小精灵/null 小红帽/null 小红莓/null 小红萝卜/null 小纺/null 小线儿/null 小组/null 小组会/null 小组委员会/null 小组第一/null 小组长/null 小细胞/null 小结/null 小绳索/null 小绺/null 小绿人/null 小缸缸儿/null 小羊/null 小羊儿/null 小羊皮/null 小羊肉/null 小羚羊/null 小群/null 小老婆/null 小考/null 小者/null 小而/null 小而全/null 小聪明/null 小肚子/null 小肚鸡肠/null 小肠/null 小肠串气/null 小胡桃/null 小脏鬼/null 小脑/null 小脚/null 小脸/null 小腊烛/null 小腹/null 小腿/null 小腿侧/null 小膜/null 小舅/null 小舅子/null 小舌/null 小舍/null 小舟/null 小舰艇/null 小舰队/null 小船/null 小船室/null 小艇/null 小节/null 小节线/null 小花/null 小花棘豆/null 小花脸/null 小花远志/null 小花饰/null 小苏打/null 小苏打粉/null 小范围/null 小茅屋/null 小茴香/null 小茶杯/null 小草/null 小菜/null 小菜一碟/null 小菜儿/null 小菜碟儿/null 小萝卜/null 小营盘镇/null 小葱/null 小蓟/null 小薰/null 小虫/null 小虾/null 小虾米/null 小蛇/null 小蜜/null 小蠹/null 小行星/null 小行星带/null 小街/null 小街突/null 小衣/null 小衣裳/null 小补/null 小袋/null 小袋鼠/null 小褂/null 小襟/null 小规模/null 小视/null 小觑/null 小解/null 小触角/null 小计/null 小词/null 小试/null 小试锋芒/null 小话/null 小说/null 小说家/null 小调/null 小谎/null 小豆/null 小豆子/null 小豆蔻/null 小贝/null 小账/null 小货车/null 小贩/null 小费/null 小资/null 小资产阶级/null 小资产阶级社会主义/null 小赤壁/null 小起重机/null 小趾/null 小跑/null 小跑步/null 小路/null 小车/null 小车站/null 小轮车/null 小轿车/null 小辈/null 小辫/null 小辫儿/null 小辫子/null 小过/null 小造桥虫/null 小道/null 小道儿消息/null 小道具/null 小道新闻/null 小道消息/null 小部分/null 小都市/null 小酌/null 小酒/null 小酒馆/null 小里小气/null 小野不由美/null 小量/null 小金/null 小金库/null 小钞/null 小钢炮/null 小钢球/null 小钩/null 小钩子/null 小钱/null 小铃当/null 小铲子/null 小锅/null 小错/null 小锣/null 小键盘/null 小镇/null 小门/null 小队/null 小队长/null 小阳春/null 小阿姨/null 小院/null 小除夕/null 小隔间/null 小隙沉舟/null 小雁塔/null 小雅/null 小集团/null 小雕像/null 小雨/null 小青年/null 小青瓦/null 小静脉/null 小面包/null 小鞋/null 小项/null 小项目/null 小颗/null 小题大作/null 小题大做/null 小颚/null 小额/null 小额融资/null 小风琴/null 小食中心/null 小饭店/null 小饭馆/null 小饮/null 小饼乾/null 小首饰/null 小香袋/null 小马/null 小马座/null 小驻/null 小鬼/null 小鱼/null 小鲵/null 小鸟/null 小兽/null 小鸟依人/null 小鸡/null 小鸡鸡/null 小鸭/null 小鹅/null 小鹰/null 小鹰号/null 小鹿/null 小鹿乱撞/null 小麦/null 小麦线虫/null 小麦线虫病/null 小麦胚芽/null 小黄瓜/null 小黄鱼/null 小黠大痴/null 小鼓/null 小鼠/null 小齿轮/null 小龙/null 小龙汤包/null 小龙虾/null 少一半/null 少不/null 少不了/null 少不得/null 少不更事/null 少不经事/null 少东/null 少之/null 少之又少/null 少于/null 少交/null 少产/null 少付/null 少佐/null 少儿/null 少儿不宜/null 少先队/null 少先队员/null 少列/null 少则/null 少刻/null 少印/null 少发/null 少吃/null 少地/null 少壮/null 少壮不努力/null 少壮派/null 少女/null 少女似/null 少女嫩妇/null 少女峰/null 少女露笑脸/null 少奶奶/null 少妇/null 少安勿躁/null 少安无躁/null 少安毋躁/null 少将/null 少尉/null 少小/null 少少/null 少年/null 少年之家/null 少年人/null 少年儿童/null 少年先锋队/null 少年宫/null 少年期/null 少年犯/null 少年老成/null 少府/null 少开/null 少征/null 少待/null 少得/null 少成/null 少成多/null 少成若性/null 少扣/null 少找/null 少报/null 少提/null 少搞/null 少收/null 少放/null 少数/null 少数人/null 少数党/null 少数服从多数/null 少数民族/null 少数民族乡/null 少数民族地区/null 少数派/null 少时/null 少有/null 少条失教/null 少林/null 少林寺/null 少林拳/null 少林武功/null 少校/null 少爷/null 少生优生/null 少用/null 少男/null 少男少女/null 少白头/null 少的/null 少相/null 少礼/null 少私寡欲/null 少突胶质/null 少等/null 少算/null 少管/null 少管闲事/null 少纳/null 少给/null 少而精/null 少艾/null 少花钱多办事/null 少装/null 少见/null 少见多怪/null 少解/null 少计/null 少记/null 少讲/null 少讲空话/null 少许/null 少说/null 少说为佳/null 少说多做/null 少贴/null 少走弯路/null 少转/null 少运/null 少退/null 少配/null 少量/null 少钱/null 少销/null 少间/null 少阳病/null 少阳经/null 少陪/null 少顷/null 少额/null 尔人/null 尔后/null 尔尔/null 尔式/null 尔后/null 尔德/null 尔族/null 尔曹/null 尔来/null 尔格/null 尔歌/null 尔汝/null 尔汝之交/null 尔省/null 尔等/null 尔自/null 尔虞我诈/null 尔诈我虞/null 尔语/null 尔雅/null 尔雅温文/null 尔非/null 尖兵/null 尖刀/null 尖利/null 尖刺/null 尖刻/null 尖劈/null 尖叫/null 尖叫声/null 尖啸/null 尖喊/null 尖嗓/null 尖嘴/null 尖嘴猴腮/null 尖嘴薄舌/null 尖嘴鱼/null 尖团音/null 尖塔/null 尖塔状/null 尖声/null 尖声啼哭/null 尖头/null 尖头蝗/null 尖子/null 尖尖/null 尖尖的/null 尖山/null 尖山区/null 尖峰/null 尖形/null 尖扎/null 尖括号/null 尖拱/null 尖新/null 尖桩/null 尖梢/null 尖椒/null 尖沙咀/null 尖溜溜/null 尖牙/null 尖瓣/null 尖石/null 尖石乡/null 尖窄/null 尖端/null 尖端放电/null 尖端细/null 尖笔/null 尖管面/null 尖细/null 尖脐/null 尖草坪/null 尖草坪区/null 尖角/null 尖酸/null 尖酸刻薄/null 尖钉/null 尖锐/null 尖锐化/null 尖锐声/null 尖锐批评/null 尖阁列岛/null 尖音/null 尖顶/null 尖顶窗/null 尖鼻子/null 尖齿/null 尘世/null 尘事/null 尘云/null 尘俗/null 尘凡/null 尘嚣/null 尘土/null 尘土飞扬/null 尘垢/null 尘垢秕糠/null 尘埃/null 尘埃传染/null 尘埃落定/null 尘寰/null 尘封/null 尘暴/null 尘粒/null 尘缘/null 尘肺/null 尘芥/null 尘菌/null 尘螨/null 尘雾/null 尘饭涂羹/null 尚不/null 尚不安/null 尚且/null 尚义/null 尚书/null 尚书经/null 尚书郎/null 尚佳/null 尚可/null 尚在/null 尚好/null 尚属/null 尚应/null 尚待/null 尚志/null 尚感/null 尚慕杰/null 尚方剑/null 尚方宝剑/null 尚无/null 尚是/null 尚有/null 尚未/null 尚未解决/null 尚武/null 尚看/null 尚缺/null 尚能/null 尚难/null 尚需/null 尚须/null 尚飨/null 尜儿/null 尜尜/null 尝了/null 尝出/null 尝到/null 尝受/null 尝味/null 尝尝/null 尝尽/null 尝尽心酸/null 尝新/null 尝胆/null 尝胆卧薪/null 尝试/null 尝试性/null 尝过/null 尝鲜/null 尝鼎一脔/null 尤为/null 尤以/null 尤佳/null 尤克里里琴/null 尤其/null 尤其是/null 尤其要/null 尤利娅・季莫申科/null 尤利西斯/null 尤加/null 尤加利/null 尤卡坦/null 尤卡坦半岛/null 尤坎/null 尤如/null 尤尔钦科/null 尤异/null 尤德/null 尤指/null 尤文图斯/null 尤有/null 尤有甚者/null 尤溪/null 尤物/null 尤甚/null 尤诟/null 尤里斯・伊文思/null 尤金塞尔南/null 尤须/null 尥蹶子/null 尧天舜日/null 尧舜/null 尧都/null 尧都区/null 就会/null 就在/null 就业/null 就业人数/null 就业培训/null 就业安定费/null 就业机会/null 就业率/null 就业问题/null 就义/null 就事论事/null 就任者/null 就便器材/null 就医/null 就地取材/null 就地正法/null 就坡下驴/null 就好/null 就是/null 就像/null 就寝/null 就寝时间/null 就席/null 就教于/null 就日瞻云/null 就棍打腿/null 就此罢休/null 就算/null 就绪/null 就职/null 就职典礼/null 就职演讲/null 就职演说/null 就范/null 就虚避实/null 就诊/null 就读/null 就象/null 就近/null 就餐/null 尴尬/null 尸位/null 尸位素餐/null 尸体/null 尸体剖检/null 尸体袋/null 尸体解剖/null 尸僵/null 尸布/null 尸斑/null 尸检/null 尸横遍野/null 尸禄/null 尸蜡/null 尸衣/null 尸身/null 尸首/null 尸骨/null 尸骨未寒/null 尸骸/null 尸魂/null 尹潽善/null 尺中/null 尺二冤家/null 尺二秀才/null 尺动脉/null 尺头儿/null 尺子/null 尺寸/null 尺寸之功/null 尺寸千里/null 尺寸过大/null 尺山寸水/null 尺布斗粟/null 尺布绳趋/null 尺幅千里/null 尺度/null 尺数/null 尺有所短/null 尺板斗食/null 尺波电谢/null 尺牍/null 尺短寸长/null 尺码/null 尺蠖/null 尺蠖蛾/null 尺规/null 尺规作图/null 尺骨/null 尻舆神马/null 尻轮神马/null 尻门子/null 尻骨/null 尼亚/null 尼亚加拉瀑布/null 尼亚美/null 尼克/null 尼克松/null 尼克松主义/null 尼克森/null 尼加拉瓜/null 尼勒克/null 尼厄丽德/null 尼古丁/null 尼哥底母/null 尼姆/null 尼姑/null 尼安德塔/null 尼安德塔人/null 尼安德鲁人/null 尼尔逊/null 尼峰/null 尼布楚条约/null 尼布甲尼撒/null 尼希米记/null 尼庵/null 尼康/null 尼德兰/null 尼德兰资产阶级革命/null 尼斯/null 尼斯湖水怪/null 尼日尔/null 尼日尔河/null 尼木/null 尼格罗/null 尼桑/null 尼泊尔/null 尼泊尔人/null 尼泊尔共产党/null 尼泊尔国王/null 尼泊尔语/null 尼玛/null 尼科西亚/null 尼米兹/null 尼米兹号/null 尼罗/null 尼罗河/null 尼赫/null 尼赫鲁/null 尼采/null 尼雅/null 尼雅河/null 尼龙/null 尼龙丝/null 尼龙搭扣/null 尽上/null 尽义务/null 尽人皆知/null 尽伏东流/null 尽先/null 尽入彀中/null 尽全/null 尽全力/null 尽兴/null 尽兴而归/null 尽其/null 尽其在我/null 尽其所有/null 尽到/null 尽到责任/null 尽力/null 尽力尽责/null 尽力而为/null 尽可/null 尽可能/null 尽善尽美/null 尽在/null 尽在其中/null 尽地主之谊/null 尽够/null 尽失/null 尽头/null 尽如/null 尽如人意/null 尽孝/null 尽弃/null 尽心/null 尽心图极/null 尽心尽力/null 尽心尽意/null 尽心尽职/null 尽心竭力/null 尽心竭诚/null 尽忠/null 尽忠尽职/null 尽忠报国/null 尽忠竭力/null 尽快/null 尽态极妍/null 尽性/null 尽情/null 尽情尽理/null 尽意/null 尽收/null 尽收眼底/null 尽数/null 尽日穷夜/null 尽早/null 尽期/null 尽欢/null 尽欢而散/null 尽然/null 尽瘁/null 尽瘁事国/null 尽瘁鞠躬/null 尽皆/null 尽盘将军/null 尽知/null 尽管/null 尽管如此/null 尽美尽善/null 尽职/null 尽职尽责/null 尽自/null 尽致/null 尽节竭诚/null 尽言/null 尽让/null 尽诚竭节/null 尽责/null 尽责尽力/null 尽速/null 尽释前嫌/null 尽量/null 尽饱/null 尾击/null 尾声/null 尾大不掉/null 尾大难掉/null 尾子/null 尾字/null 尾巴/null 尾巴主义/null 尾座/null 尾张国/null 尾数/null 尾期/null 尾板/null 尾梢/null 尾欠/null 尾款/null 尾气/null 尾水/null 尾水渠道/null 尾注/null 尾流/null 尾灯/null 尾牙/null 尾状物/null 尾生/null 尾矿/null 尾矿库/null 尾端/null 尾缀/null 尾羽/null 尾羽龙/null 尾翼/null 尾花/null 尾苗/null 尾蚴/null 尾语/null 尾追/null 尾部/null 尾酒/null 尾闾/null 尾闾骨/null 尾随/null 尾音/null 尾韵/null 尾页/null 尾骨/null 尾鳍/null 尿不湿/null 尿嘧啶/null 尿壶/null 尿尿/null 尿崩症/null 尿布/null 尿布垫/null 尿床/null 尿样/null 尿毒/null 尿毒症/null 尿泡/null 尿流屁滚/null 尿液/null 尿潴留/null 尿炕/null 尿生殖管道/null 尿盆/null 尿管/null 尿素/null 尿肥/null 尿脬/null 尿臊味/null 尿花/null 尿道/null 尿道炎/null 尿酸/null 尿闭/null 尿频/null 局中人/null 局促/null 局促一隅/null 局促不安/null 局内/null 局势/null 局势稳定/null 局地/null 局域/null 局域网/null 局外/null 局外中立/null 局外人/null 局委/null 局子/null 局级/null 局部/null 局部利益/null 局部化/null 局部地区/null 局部性/null 局部战争/null 局部语境/null 局部连结网络/null 局部连贯性/null 局部麻醉/null 局部麻醉剂/null 局长/null 局限/null 局限于/null 局限性/null 局面/null 局饕/null 局骗/null 局麻药/null 屁事/null 屁屁/null 屁滚尿流/null 屁用/null 屁眼/null 屁眼儿/null 屁精/null 屁股/null 屁股蹲儿/null 屁话/null 屁颠屁颠/null 层云/null 层内/null 层出不穷/null 层出叠见/null 层卷云/null 层压/null 层压式推销/null 层压板/null 层叠/null 层外/null 层子/null 层子模型/null 层层/null 层层加码/null 层层落实/null 层层迭迭/null 层岩/null 层峦/null 层峦叠嶂/null 层峦迭嶂/null 层带/null 层报/null 层数/null 层板/null 层林/null 层楼/null 层次/null 层次分明/null 层流/null 层状/null 层理/null 层积云/null 层级/null 层见叠出/null 层见迭出/null 层间/null 层面/null 层高/null 居上/null 居下讪上/null 居不重席/null 居不重茵/null 居丧/null 居中/null 居中调停/null 居之不疑/null 居于/null 居人/null 居仁由义/null 居位/null 居住/null 居住于/null 居住区/null 居住地/null 居住者/null 居住证/null 居住面积/null 居停/null 居先/null 居全国之首/null 居全国首位/null 居前/null 居功/null 居功不傲/null 居功厥伟/null 居功自傲/null 居功自恃/null 居区/null 居后/null 居士/null 居处/null 居多/null 居大不易/null 居奇/null 居委会/null 居孀/null 居宅/null 居安思危/null 居安虑危/null 居官/null 居官守法/null 居室/null 居家/null 居巢/null 居巢区/null 居庸关/null 居心/null 居心不良/null 居心叵测/null 居心险恶/null 居所/null 居无定所/null 居无求安/null 居次/null 居正/null 居民/null 居民区/null 居民委员会/null 居民消费价格指数/null 居民点/null 居民点儿/null 居民购买力/null 居民身份证/null 居点/null 居然/null 居留/null 居留权/null 居留证/null 居礼/null 居礼夫人/null 居积/null 居第/null 居经/null 居者/null 居里/null 居里夫人/null 居间/null 居领先地位/null 居首/null 居首位/null 居首功/null 居高不下/null 居高临下/null 屈一伸万/null 屈下身/null 屈从/null 屈伸/null 屈体/null 屈光/null 屈光度/null 屈原/null 屈原祠/null 屈原纪念馆/null 屈尊/null 屈尊俯就/null 屈就/null 屈居/null 屈心/null 屈戌/null 屈戌儿/null 屈才/null 屈打成招/null 屈折语/null 屈指/null 屈指一算/null 屈指可数/null 屈挠/null 屈曲/null 屈服/null 屈服于/null 屈枉/null 屈死/null 屈水性/null 屈流性/null 屈膝/null 屈膝礼/null 屈艳班香/null 屈节/null 屈身/null 屈辱/null 屈驾/null 屉儿/null 屉子/null 届临/null 届时/null 届期/null 届满/null 屋上建瓴/null 屋下架屋/null 屋下盖屋/null 屋主/null 屋乌推爱/null 屋企/null 屋内/null 屋前/null 屋后/null 屋基/null 屋外/null 屋头/null 屋子/null 屋宇/null 屋后/null 屋架/null 屋梁/null 屋檐/null 屋町/null 屋脊/null 屋舍/null 屋角/null 屋里/null 屋里人/null 屋门/null 屋面/null 屋面瓦/null 屋顶/null 屋顶室/null 屋顶板/null 屋顶花园/null 屌丝/null 屎壳郎/null 屎尿/null 屎蚵螂/null 屏东/null 屏住/null 屏南/null 屏山/null 屏幕/null 屏幕保护程序/null 屏幕提示/null 屏弃/null 屏息/null 屏条/null 屏极/null 屏气/null 屏绝/null 屏营/null 屏蔽/null 屏蔽罐/null 屏藩/null 屏边/null 屏退/null 屏门/null 屏除/null 屏隔/null 屏障/null 屏风/null 屐履造门/null 屑于/null 展为/null 展位/null 展出/null 展列/null 展到/null 展卖/null 展厅/null 展台/null 展品/null 展团/null 展室/null 展宽/null 展布/null 展帆/null 展平/null 展延/null 展开/null 展开图/null 展开式/null 展性/null 展播/null 展望/null 展望镜/null 展期/null 展板/null 展牌/null 展玩/null 展现/null 展眉/null 展眼舒眉/null 展示/null 展示会/null 展示场/null 展示者/null 展缓/null 展翅/null 展翅高飞/null 展观/null 展览/null 展览会/null 展览品/null 展览者/null 展览馆/null 展评/null 展转/null 展转反侧/null 展转腾挪/null 展销/null 展销会/null 展销品/null 展限/null 展露/null 展颜/null 展颜微笑/null 展馆/null 屙尿/null 屙屎/null 属下/null 属世/null 属之/null 属于/null 属于她/null 属于我/null 属名/null 属吏/null 属员/null 属国/null 属地/null 属垣有耳/null 属实/null 属性/null 属意/null 属文/null 属有/null 属望/null 属格/null 属概念/null 属次比事/null 属毛离里/null 属灵/null 属相/null 属象/null 属马/null 屠伯/null 屠刀/null 屠场/null 屠城/null 屠夫/null 屠妖节/null 屠宰/null 屠宰场/null 屠戮/null 屠户/null 屠杀/null 屠杀场/null 屠杀者/null 屠格涅夫/null 屠毒/null 屠毒笔墨/null 屠苏酒/null 屠门大嚼/null 屠龙/null 屠龙之伎/null 屠龙之技/null 屡催/null 屡出狂言/null 屡劝不改/null 屡加/null 屡受/null 屡增/null 屡屡/null 屡屡得手/null 屡建奇功/null 屡战/null 屡战屡北/null 屡战屡胜/null 屡教/null 屡教不改/null 屡有/null 屡次/null 屡次三番/null 屡禁/null 屡禁不止/null 屡禁不绝/null 屡见/null 屡见不鲜/null 屡试/null 屡试不爽/null 屡败/null 屡遭/null 屡遭不测/null 履仁道义/null 履任/null 履冰/null 履历/null 履历片/null 履历表/null 履带/null 履带式拖拉机/null 履带机/null 履带车/null 履新/null 履汤蹈火/null 履约/null 履约保证金/null 履舄交错/null 履薄临沈/null 履行/null 履行义务/null 履行合同/null 履行诺言/null 履践/null 履险如夷/null 履霜坚冰/null 履霜知冰/null 屦及剑及/null 屦贱踊贵/null 屯兵/null 屯垦/null 屯垦园区/null 屯子/null 屯戍/null 屯扎/null 屯昌/null 屯溪/null 屯溪区/null 屯特/null 屯特大学/null 屯田/null 屯田制/null 屯留/null 屯积/null 屯粮/null 屯粮积草/null 屯聚/null 屯落/null 屯街塞巷/null 屯门/null 屯驻/null 山上/null 山上乡/null 山下/null 山不转水转/null 山不转路转/null 山丘/null 山东半岛/null 山东大学/null 山东大鼓/null 山东快书/null 山东梆子/null 山东科技大学/null 山中/null 山中圣训/null 山丹/null 山乡/null 山亭/null 山亭区/null 山人/null 山体/null 山侧/null 山冈/null 山凹/null 山前/null 山势/null 山包/null 山区/null 山南/null 山南地区/null 山南海北/null 山口/null 山口县/null 山口洋/null 山后/null 山向/null 山呼海啸/null 山和尚/null 山响/null 山嘴/null 山国/null 山地/null 山地人/null 山地同胞/null 山地自行车/null 山坞/null 山坡/null 山坳/null 山埃/null 山城/null 山城区/null 山墙/null 山壑/null 山夜/null 山头/null 山头主义/null 山奈/null 山奈钾/null 山姆/null 山子/null 山寨/null 山寨王/null 山寨机/null 山寨货/null 山居/null 山山水水/null 山岗/null 山岗子/null 山岚/null 山岩/null 山岭/null 山岳/null 山峡/null 山峦/null 山峦重叠/null 山峰/null 山崎/null 山崖/null 山崩/null 山崩地坼/null 山崩地裂/null 山崩地陷/null 山崩钟应/null 山嵛菜/null 山巅/null 山川/null 山带/null 山庄/null 山形/null 山形县/null 山形墙/null 山径/null 山摇地动/null 山斗/null 山旮旯/null 山旮旯儿/null 山明水秀/null 山晕/null 山木/null 山本/null 山本五十六/null 山村/null 山杨/null 山林/null 山果/null 山查/null 山栖谷饮/null 山核桃/null 山根/null 山桃/null 山案座/null 山桐子/null 山梁/null 山梨/null 山梨县/null 山梨酸钾/null 山梨醇/null 山椒鱼/null 山楂/null 山榄科/null 山樱桃/null 山歌/null 山毛榉/null 山民/null 山水/null 山水画/null 山水诗/null 山沟/null 山河/null 山河易改本性难移/null 山河镇/null 山泉/null 山泥倾泻/null 山洞/null 山洪/null 山洪暴发/null 山洼/null 山海关/null 山海关区/null 山海经/null 山涧/null 山清水秀/null 山火/null 山炮/null 山狮/null 山猪/null 山猫/null 山珍/null 山珍海味/null 山珍海错/null 山瑞/null 山瑞鳖/null 山田/null 山盟海誓/null 山石/null 山神/null 山积/null 山穷水尽/null 山窝/null 山窝窝/null 山竹/null 山系/null 山羊/null 山羊似/null 山羊座/null 山羊皮/null 山羊绒/null 山羌/null 山群/null 山肴野蔌/null 山胡桃/null 山胡桃木/null 山脉/null 山脉间/null 山脊/null 山脚/null 山腰/null 山腹/null 山色/null 山芋/null 山花/null 山苍子/null 山茱萸/null 山茶/null 山茶花/null 山草/null 山药/null 山药蛋/null 山莓/null 山葡萄/null 山葵/null 山行/null 山西兽/null 山西大学/null 山西梆子/null 山谷/null 山豆根/null 山货/null 山贼/null 山路/null 山轿/null 山达基/null 山道/null 山道年/null 山遥水远/null 山那边/null 山里/null 山里红/null 山野/null 山镇/null 山长水远/null 山门/null 山间/null 山阳/null 山阳区/null 山阴/null 山险/null 山陵/null 山雀/null 山雀类/null 山雕/null 山雨欲来风满楼/null 山靛/null 山顶/null 山顶洞人/null 山颓木坏/null 山颠/null 山风/null 山高/null 山高水低/null 山高水长/null 山高水险/null 山高海深/null 山魈/null 山鸟类/null 山鸡/null 山鸡椒/null 山鸡舞镜/null 山麓/null 山鼠类/null 屹然/null 屹立/null 岁不我与/null 岁丰年稔/null 岁了/null 岁以上/null 岁修/null 岁俸/null 岁入/null 岁出/null 岁在龙蛇/null 岁寒三友/null 岁寒松柏/null 岁岁/null 岁岁平安/null 岁差/null 岁序/null 岁数/null 岁时/null 岁时伏腊/null 岁星/null 岁晚/null 岁暮/null 岁月/null 岁月不居/null 岁月如流/null 岁月峥嵘/null 岁月待人/null 岁月流逝/null 岁月蹉跎/null 岁末/null 岁末年初/null 岁杪/null 岁比不登/null 岁秒/null 岁稔年丰/null 岁绪/null 岁计余绌/null 岁间/null 岁阑/null 岁除/null 岁首/null 岂不/null 岂不怪哉/null 岂不是/null 岂但/null 岂只/null 岂可/null 岂容他人鼾睡/null 岂弟君子/null 岂敢/null 岂是/null 岂有他哉/null 岂有此理/null 岂止/null 岂知/null 岂能/null 岂非/null 岌岌/null 岌岌可危/null 岐山/null 岐点/null 岐视/null 岐路灯/null 岐阜县/null 岑寂/null 岑岑/null 岑巩/null 岑彭/null 岑溪/null 岔口/null 岔子/null 岔尾/null 岔开/null 岔换/null 岔曲儿/null 岔气/null 岔河/null 岔流/null 岔眼/null 岔调/null 岔路/null 岔路口/null 岔道/null 岔道儿/null 岗亭/null 岗仁波齐/null 岗位/null 岗位责任制/null 岗哨/null 岗地/null 岗子/null 岗峦/null 岗巴/null 岗楼/null 岗石/null 岗警/null 岘港/null 岘首山/null 岚山/null 岚山区/null 岚皋/null 岛上/null 岛产/null 岛人/null 岛名/null 岛国/null 岛屿/null 岛弧/null 岛民/null 岛状物/null 岛瘦郊寒/null 岛盖部/null 岢岚/null 岩仓/null 岩仓使节团/null 岩土体/null 岩壁/null 岩壑/null 岩层/null 岩居穴处/null 岩居谷饮/null 岩屑/null 岩岸/null 岩床/null 岩径/null 岩心/null 岩手/null 岩手县/null 岩棉/null 岩沙海葵毒素/null 岩洞/null 岩流/null 岩流圈/null 岩浆/null 岩浆岩/null 岩浆流/null 岩渣/null 岩溶/null 岩溶地貌/null 岩状/null 岩画/null 岩盐/null 岩石/null 岩石圈/null 岩石学/null 岩石层/null 岩礁/null 岩穴/null 岩穴之士/null 岩类/null 岩羊/null 岩脉/null 岩茶/null 岩葬/null 岩质/null 岫岩县/null 岬角/null 岭东/null 岭东区/null 岭南/null 岭巆/null 岭拨/null 岭石/null 岭高/null 岱宗/null 岱山/null 岱岳区/null 岱庙/null 岳丈/null 岳塘/null 岳塘区/null 岳家/null 岳得尔歌/null 岳普湖/null 岳母/null 岳池/null 岳父/null 岳父母/null 岳西/null 岳阳地区/null 岳阳楼/null 岳阳楼区/null 岳阳楼记/null 岳飞/null 岳麓/null 岳麓书院/null 岳麓区/null 岳麓山/null 岷山/null 岷江/null 岸上/null 岸壁/null 岸头/null 岸标/null 岸然/null 岸然道貌/null 岸边/null 岿然/null 岿然不动/null 岿然独存/null 峄城/null 峄城区/null 峇峇娘惹/null 峒人/null 峒剧/null 峒室/null 峙立/null 峡口/null 峡江/null 峡湾/null 峡谷/null 峥嵘/null 峥嵘岁月/null 峥巆/null 峨冠博带/null 峨山县/null 峨嵋/null 峨嵋山/null 峨嵋山市/null 峨嵋拳/null 峨眉/null 峨眉乡/null 峨眉山/null 峨边县/null 峪口/null 峭壁/null 峭拔/null 峭直/null 峭立/null 峰丘/null 峰会/null 峰值/null 峰值输出功能/null 峰回路转/null 峰峦/null 峰峰矿/null 峰峰矿区/null 峰巅/null 峰期/null 峰火台/null 峰线/null 峰顶/null 峻厉/null 峻地/null 峻岭/null 峻岭崇山/null 峻峭/null 峻急/null 峻法/null 峻笔/null 峻阪盐车/null 崁顶/null 崁顶乡/null 崂山/null 崂山区/null 崆峒/null 崆峒区/null 崇义/null 崇仁/null 崇信/null 崇善/null 崇外/null 崇奉/null 崇安/null 崇安区/null 崇尚/null 崇山/null 崇山峻岭/null 崇川/null 崇川区/null 崇州/null 崇左/null 崇庆/null 崇拜/null 崇拜仪式/null 崇拜者/null 崇敬/null 崇文/null 崇文门/null 崇明/null 崇明县/null 崇明岛/null 崇本抑末/null 崇洋/null 崇洋媚外/null 崇礼/null 崇祯/null 崇论宏议/null 崇论闳议/null 崇阳/null 崇高/null 崇高品质/null 崇高理想/null 崎岖/null 崎岖险阻/null 崔健/null 崔圭夏/null 崔嵬/null 崔巍/null 崔明慧/null 崔永元/null 崔萤/null 崔述/null 崔颢/null 崔鸿/null 崖刻/null 崖壁/null 崖壑/null 崖山之战/null 崖岸/null 崖州/null 崖略/null 崖谷/null 崖限/null 崛地而起/null 崛立/null 崛起/null 崦嵫/null 崧生岳降/null 崩倒/null 崩决/null 崩坍/null 崩坏/null 崩坏作用/null 崩塌/null 崩摧/null 崩殂/null 崩毁/null 崩溃/null 崩漏/null 崩症/null 崩盘/null 崩落/null 崩裂/null 崩解/null 崩陷/null 崩龙/null 崩龙族/null 崭亮/null 崭劲/null 崭新/null 崭晴/null 崭然/null 崭露头角/null 崭齐/null 崴子/null 崴泥/null 崽子/null 嵊县/null 嵊州/null 嵊泗/null 嵊泗列岛/null 嵌于/null 嵌入/null 嵌合/null 嵌合体/null 嵌在/null 嵌块/null 嵌套/null 嵌接/null 嵌有/null 嵌木/null 嵌片/null 嵌物/null 嵌环/null 嵌进/null 嵌金/null 嵞山/null 嵩山/null 嵩明/null 嵬然不动/null 嵯峨/null 嶙峋/null 嶙嶙/null 巅峰/null 巍山/null 巍山县/null 巍峨/null 巍巍/null 巍然/null 巍然屹立/null 川/null/0 川党/null 川党参/null 川军/null 川剧/null 川外/null 川崎/null 川汇/null 川汇区/null 川江/null 川沙/null 川流/null 川流不息/null 川滇藏/null 川畸/null 川端康成/null 川红/null 川芎/null 川菜/null 川菜厅/null 川藏/null 川藏公路/null 川西/null 川谷/null 川贝/null 川资/null 川震/null 川马/null 川黔铁路/null 州内/null 州县/null 州名/null 州官/null 州官放火/null 州市/null 州界/null 州立/null 州立大学/null 州议会/null 州辖/null 州郡/null 州里/null 州长/null 州际/null 巡于/null 巡哨/null 巡回/null 巡回分析端口/null 巡回医疗/null 巡回展览/null 巡回法庭/null 巡回演出/null 巡夜/null 巡天/null 巡守/null 巡察/null 巡展/null 巡幸/null 巡弋/null 巡抚/null 巡捕/null 巡捕房/null 巡查/null 巡检/null 巡洋/null 巡洋舰/null 巡测仪/null 巡游/null 巡演/null 巡礼/null 巡票/null 巡航/null 巡航导弹/null 巡行/null 巡视/null 巡视员/null 巡视者/null 巡警/null 巡诊/null 巡逻/null 巡逻者/null 巡逻船/null 巡逻艇/null 巡逻车/null 巡逻队/null 巡道/null 巡邋/null 巡防/null 巡风/null 巢中/null 巢倾卵覆/null 巢县/null 巢居/null 巢居穴处/null 巢房/null 巢毁卵破/null 巢湖/null 巢湖地区/null 巢状/null 巢础/null 巢穴/null 巢窝/null 巢窟/null 巢脾/null 巢菜/null 巢鼠/null 工业/null 工业七国集团/null 工业体系/null 工业化/null 工业化国家/null 工业区/null 工业厅/null 工业品/null 工业园区/null 工业国/null 工业大学/null 工业学校/null 工业局/null 工业气压/null 工业现代化/null 工业用/null 工业界/null 工业病/null 工业设计/null 工业部/null 工业除尘/null 工业革命/null 工事/null 工于心计/null 工交/null 工人/null 工人们/null 工人党/null 工人文化宫/null 工人日报/null 工人纠察队/null 工人贵族/null 工人运动/null 工人阶级/null 工人阶级解放斗争协会/null 工件/null 工价/null 工休/null 工休日/null 工会/null 工会工作/null 工会干部/null 工会组织/null 工伤/null 工伤事故/null 工伤假/null 工体/null 工余/null 工作/null 工作上/null 工作中/null 工作人员/null 工作件/null 工作区/null 工作单位/null 工作台/null 工作周/null 工作地/null 工作场/null 工作委员会/null 工作学/null 工作室/null 工作房/null 工作报告/null 工作日/null 工作时间/null 工作服/null 工作母机/null 工作流/null 工作流程/null 工作狂/null 工作站/null 工作等/null 工作簿/null 工作组/null 工作者/null 工作表/null 工作袋/null 工作记忆/null 工作证/null 工作过度/null 工作量/null 工作队/null 工作面/null 工作鞋/null 工信部/工信处 工信处/工信部 工值/null 工党/null 工兵/null 工具/null 工具主义/null 工具书/null 工具包/null 工具机/null 工具条/null 工具架/null 工具栏/null 工具箱/null 工具钢/null 工农/null 工农业/null 工农兵/null 工农区/null 工农差别/null 工农群众/null 工农联盟/null 工况/null 工分/null 工分值/null 工制/null 工力/null 工力悉敌/null 工匠/null 工区/null 工厂/null 工厂主/null 工友/null 工号/null 工商/null 工商业/null 工商人员/null 工商企业/null 工商会/null 工商局/null 工商户/null 工商界/null 工商界人士/null 工商管理/null 工商管理硕士/null 工商联/null 工商行政/null 工商行政管理局/null 工团/null 工团主义/null 工地/null 工场/null 工场手工业/null 工场间/null 工夫/null 工夫不负有心人/null 工夫茶/null 工头/null 工套/null 工女/null 工委/null 工娱疗法/null 工字钢/null 工学/null 工学院/null 工宣队/null 工尺/null 工尺谱/null 工工整整/null 工巧/null 工布江达/null 工序/null 工役/null 工房/null 工所/null 工效/null 工救会/null 工数/null 工整/null 工料/null 工日/null 工时/null 工期/null 工本/null 工本费/null 工架/null 工校/null 工棚/null 工楷/null 工欲善其事/null 工段/null 工活/null 工潮/null 工矿/null 工矿企业/null 工矿用地/null 工种/null 工科/null 工程/null 工程保障/null 工程兵/null 工程图/null 工程图学/null 工程塑料/null 工程处/null 工程学/null 工程师/null 工程设计/null 工程部/null 工稳/null 工笔/null 工笔画/null 工细/null 工缴/null 工缴费/null 工联/null 工联主义/null 工致/null 工艺/null 工艺品/null 工艺学/null 工艺流程/null 工艺美术/null 工薪/null 工薪阶层/null 工蜂/null 工行/null 工装/null 工装裤/null 工读/null 工读学校/null 工读生/null 工质/null 工贸/null 工贸结合/null 工贼/null 工资/null 工资分/null 工资单/null 工资基金/null 工资级别/null 工资高/null 工车/null 工运/null 工部/null 工钱/null 工长/null 工间/null 工间操/null 工队/null 工龄/null 左上/null 左上方/null 左下/null 左不过/null 左丘明/null 左云/null 左传/null 左侧/null 左倾/null 左倾机会主义/null 左倾者/null 左列/null 左券/null 左券在握/null 左前卫/null 左卷/null 左右/null 左右两难/null 左右为难/null 左右共利/null 左右勾拳/null 左右开弓/null 左右手/null 左右袒/null 左右逢原/null 左右逢源/null 左向/null 左嗓子/null 左图右史/null 左字头/null 左宜右有/null 左岸/null 左归右归/null 左思/null 左思右想/null 左手/null 左拉/null 左拥/null 左挈右提/null 左掌/null 左提右挈/null 左撇/null 左撇子/null 左支右绌/null 左方/null 左旋/null 左权/null 左氏春秋/null 左派/null 左盼/null 左眼/null 左移/null 左端/null 左箭头/null 左箭头键/null 左翼/null 左耳/null 左联/null 左脚/null 左腿/null 左腿瘸/null 左膀右臂/null 左臂/null 左至右/null 左舵/null 左舷/null 左营/null 左营区/null 左萦右拂/null 左行/null 左袒/null 左角/null 左证/null 左贡/null 左躲/null 左转/null 左轮/null 左轮手枪/null 左轮枪/null 左辅右弼/null 左边/null 左边儿/null 左迁/null 左近/null 左道/null 左道惑众/null 左道旁门/null 左邻/null 左邻右舍/null 左邻右里/null 左键/null 左镇/null 左镇乡/null 左面/null 左页/null 左顾/null 左顾右盼/null 左顾右眄/null 左首/null 巧不/null 巧不可阶/null 巧事/null 巧于/null 巧伪不如拙诚/null 巧做/null 巧偷豪夺/null 巧克/null 巧克力/null 巧克力脆片/null 巧劲/null 巧劲儿/null 巧匠/null 巧发奇中/null 巧取/null 巧取豪夺/null 巧合/null 巧夺/null 巧夺天工/null 巧妇/null 巧妇难为无米之炊/null 巧妙/null 巧家/null 巧干/null 巧思/null 巧手/null 巧捷/null 巧用/null 巧立/null 巧立名目/null 巧舌/null 巧舌如簧/null 巧言/null 巧言令色/null 巧言利口/null 巧言如簧/null 巧计/null 巧诈不如拙诚/null 巧语/null 巧语花言/null 巧辞/null 巧辩/null 巧遇/null 巧验/null 巨万/null 巨亨/null 巨人/null 巨人症/null 巨人般/null 巨债/null 巨像/null 巨兽/null 巨匠/null 巨变/null 巨响/null 巨商/null 巨噬细胞/null 巨型/null 巨型机/null 巨大/null 巨大影响/null 巨大症/null 巨头/null 巨奸/null 巨妖/null 巨宅/null 巨富/null 巨峰/null 巨幅/null 巨擘/null 巨无霸/null 巨无霸汉堡包指数/null 巨星/null 巨树/null 巨案/null 巨款/null 巨流/null 巨浪/null 巨滑/null 巨照/null 巨爵座/null 巨牙鲨/null 巨物/null 巨石/null 巨石柱群/null 巨石阵/null 巨碑/null 巨祸/null 巨穴/null 巨笔/null 巨细/null 巨细胞病毒/null 巨细胞病毒视网膜炎/null 巨著/null 巨蛇尾/null 巨蛇座/null 巨蛋/null 巨蜥/null 巨蟒/null 巨蟹/null 巨蟹座/null 巨蠹/null 巨贾/null 巨资/null 巨轮/null 巨野/null 巨量/null 巨集/null 巨额/null 巨鸟/null 巨鹿/null 巨鹿之战/null 巨齿鲨/null 巨龙/null 巩义/null 巩俐/null 巩县/null 巩固/null 巩留/null 巩膜/null 巫医/null 巫婆/null 巫山/null 巫山云雨/null 巫山山脉/null 巫山洛水/null 巫山落浦/null 巫峡/null 巫师/null 巫术/null 巫溪/null 巫神/null 巫蛊/null 巫蛊之祸/null 巫觋/null 差一点/null 差一点儿/null 差三错四/null 差不多/null 差不离/null 差不离儿/null 差之千里/null 差之毫厘/null 差之毫厘失之千里/null 差之毫厘缪以千里/null 差事/null 差些/null 差人/null 差以千里/null 差以毫厘谬以千里/null 差价/null 差价款/null 差使/null 差值/null 差分/null 差分方程/null 差别/null 差办/null 差动/null 差动齿轮/null 差劲/null 差商/null 差失/null 差异/null 差异性/null 差强人意/null 差役/null 差得/null 差得多/null 差数/null 差旅/null 差旅费/null 差池/null 差派/null 差点/null 差点儿/null 差率/null 差生/null 差等/null 差者/null 差讹/null 差评/null 差误/null 差谬/null 差距/null 差远/null 差速器/null 差遣/null 差错/null 差额/null 差额选举/null 己丑/null 己亥/null 己人/null 己任/null 己卯/null 己型肝炎/null 己巳/null 己所不欲/null 己所不欲勿施于人/null 己方/null 己有/null 己未/null 己欲毋人/null 己欲毋施/null 己物/null 己癖/null 己糖/null 己见/null 己身/null 己酉/null 己饥己溺/null 已为/null 已久/null 已于/null 已作出保/null 已作故人/null 已决犯/null 已冷/null 已婚/null 已定/null 已往/null 已成形/null 已故/null 已晚/null 已灭/null 已然/null 已知/null 已知数/null 已经/null 已而/null 已见分晓/null 巳时/null 巳蛇/null 巴三览四/null 巴不得/null 巴不能够/null 巴东/null 巴中/null 巴中地区/null 巴乔/null 巴人/null 巴人下里/null 巴以/null 巴伊兰大学/null 巴伐利亚/null 巴伦支海/null 巴伦西亚/null 巴儿狗/null 巴克夏猪/null 巴克科思/null 巴克莱/null 巴克莱银行/null 巴利/null 巴利文/null 巴别塔/null 巴前算后/null 巴力/null 巴勒斯坦/null 巴勒斯坦民族权力机构/null 巴勒斯坦解放组织/null 巴勒莫/null 巴南/null 巴厘/null 巴厘岛/null 巴县/null 巴哈伊/null 巴哈马/null 巴唧/null 巴唧巴唧/null 巴坦群岛/null 巴基斯坦/null 巴塘/null 巴塞尔/null 巴塞尔宣言/null 巴塞罗那/null 巴塞隆纳/null 巴塞隆那/null 巴士/null 巴士公司/null 巴士底/null 巴士拉/null 巴士海峡/null 巴士站/null 巴头探脑/null 巴宰族/null 巴尔/null 巴尔克嫩德/null 巴尔喀什湖/null 巴尔多禄茂/null 巴尔干/null 巴尔干半岛/null 巴尔干战争/null 巴尔扎克/null 巴尔的摩/null 巴尔舍夫斯基/null 巴尼亚卢卡/null 巴山/null 巴山夜雨/null 巴山蜀水/null 巴山越岭/null 巴州/null 巴巴/null 巴巴儿地/null 巴巴劫劫/null 巴巴多斯/null 巴巴结结/null 巴布・狄伦/null 巴布亚新几内亚/null 巴布亚纽几内亚/null 巴布尔/null 巴布延群岛/null 巴布拉族/null 巴希尔/null 巴库/null 巴录/null 巴彦/null 巴彦浩特/null 巴彦浩特市/null 巴彦浩特镇/null 巴彦淖尔/null 巴德尔/null 巴戟/null 巴拉克/null 巴拉圭/null 巴拉基列夫/null 巴拉巴斯/null 巴拉迪/null 巴拿芬/null 巴拿马/null 巴拿马城/null 巴拿马运河/null 巴掌/null 巴掌大/null 巴控克什米尔/null 巴斗/null 巴斯/null 巴斯克/null 巴斯克语/null 巴斯卡尔/null 巴斯德/null 巴斯特尔/null 巴斯蒂亚/null 巴新/null 巴旦杏/null 巴望/null 巴松管/null 巴林/null 巴林右/null 巴林左/null 巴枯宁主义/null 巴格兰/null 巴格兰省/null 巴格达/null 巴楚/null 巴比/null 巴比妥/null 巴比特合金/null 巴氏/null 巴氏杀菌法/null 巴特/null 巴特瓦族/null 巴特纳/null 巴生/null 巴甫洛夫/null 巴登/null 巴登・符腾堡州/null 巴纽/null 巴结/null 巴罗佐/null 巴罗克/null 巴耶利巴/null 巴莫/null 巴蜀/null 巴西/null 巴西人/null 巴西会议/null 巴西利亚/null 巴西战舞/null 巴解/null 巴解组织/null 巴豆/null 巴豆壳/null 巴豆属/null 巴豆树/null 巴贝西亚原虫病/null 巴赫/null 巴里/null 巴里坤/null 巴里坤县/null 巴里坤草原/null 巴里岛/null 巴金/null 巴金森氏症/null 巴闭/null 巴阿/null 巴青/null 巴音布克草原/null 巴音满都呼/null 巴音郭愣州/null 巴音郭愣蒙古自治州/null 巴音郭楞蒙古自治州/null 巴颂管/null 巴颜喀拉/null 巴颜喀拉山/null 巴颜喀拉山脉/null 巴马县/null 巴马干酪/null 巴马科/null 巴高望上/null 巴黎/null 巴黎人/null 巴黎公社/null 巴黎和会/null 巴黎大学/null 巴黎绿/null 巷口/null 巷子/null 巷尾/null 巷尾街头/null 巷弄/null 巷战/null 巷议/null 巷议街谈/null 巷道/null 巷里/null 巾在江湖心存魏阙/null 巾帼/null 巾帼不让须眉/null 巾帼英雄/null 巾帼须眉/null 巾状/null 币值/null 币别/null 币制/null 币名/null 币种/null 币重言甘/null 币铢/null 市丈/null 市上/null 市下/null 市不二价/null 市两/null 市中区/null 市中心/null 市井/null 市井之徒/null 市井之臣/null 市井小人/null 市亩/null 市价/null 市侩/null 市内/null 市内电话/null 市况/null 市分/null 市制/null 市北区/null 市区/null 市升/null 市南区/null 市占率/null 市厘/null 市县/null 市合/null 市名/null 市售/null 市场/null 市场价/null 市场价格/null 市场份额/null 市场体系/null 市场供应/null 市场信息/null 市场准入/null 市场分析/null 市场动态/null 市场化/null 市场占有率/null 市场学/null 市场定位/null 市场推广/null 市场环境/null 市场疲软/null 市场竞争/null 市场管理/null 市场繁荣/null 市场经济/null 市场萎缩/null 市场营销/null 市场调查/null 市场调节/null 市场趋势/null 市场部/null 市场需求/null 市场需求分析/null 市场预测/null 市外/null 市委/null 市委书记/null 市容/null 市寸/null 市尺/null 市局/null 市属/null 市布/null 市府/null 市廛/null 市引/null 市情/null 市惠/null 市房/null 市担/null 市招/null 市政/null 市政厅/null 市政员/null 市政工程/null 市政府/null 市政建设/null 市政税/null 市数/null 市斗/null 市斤/null 市无二价/null 市曹/null 市毫/null 市民/null 市民权/null 市民社会/null 市用制/null 市电/null 市盈率/null 市直/null 市直机关/null 市石/null 市称/null 市立/null 市管县/null 市级/null 市绅/null 市西/null 市议会/null 市议员/null 市辖区/null 市郊/null 市里/null 市钱/null 市镇/null 市长/null 市间/null 市际/null 市集/null 市面/null 市顷/null 市风/null 布丁/null 布下/null 布什尔/null 布伍/null 布伞/null 布伦尼/null 布佳迪/null 布依/null 布兰妮・斯皮尔斯/null 布兰森/null 布农族/null 布列塔尼/null 布列斯特和约/null 布加勒斯特/null 布劳恩/null 布包/null 布匹/null 布匿战争/null 布吉河/null 布告/null 布告栏/null 布告牌/null 布哈拉/null 布哈林/null 布商/null 布囊/null 布囊其口/null 布坎南/null 布垫/null 布城/null 布基纳法索/null 布头/null 布娃娃/null 布宜诺斯艾利斯/null 布尔/null 布尔乔亚/null 布尔什维主义/null 布尔什维克/null 布尔代数/null 布尔津/null 布尼亚病毒/null 布局/null 布市/null 布帆无恙/null 布希威克/null 布帘/null 布帛/null 布帛菽粟/null 布带/null 布幕/null 布干维尔/null 布干维尔岛/null 布床/null 布店/null 布建/null 布托/null 布拉/null 布拉吉/null 布拉德・彼特/null 布拉柴维尔/null 布拉格/null 布拉索夫/null 布拉迪斯拉发/null 布拖/null 布政使/null 布斐/null 布料/null 布料商/null 布施/null 布景/null 布朗/null 布朗克士/null 布朗克斯/null 布朗士/null 布朗大学/null 布朗运动/null 布条/null 布林迪西/null 布氏杆菌病/null 布氏菌苗/null 布氏非鲫/null 布法罗/null 布洒器/null 布洛芬/null 布满/null 布点/null 布热津斯基/null 布熊/null 布片/null 布琼布拉/null 布痕瓦尔德/null 布票/null 布篷/null 布类/null 布纹/null 布纹纸/null 布线/null 布置/null 布署/null 布莱克史密斯/null 布莱克本/null 布莱尼/null 布莱德湖/null 布莱恩/null 布莱特妮・墨菲/null 布菜/null 布衣/null 布衣之交/null 布衣料/null 布衣粝食/null 布衣蔬食/null 布衣韦带/null 布衣黔首/null 布衫/null 布袋/null 布袋戏/null 布袋镇/null 布袜青鞋/null 布装/null 布裙/null 布裙荆钗/null 布谷/null 布谷鸟/null 布达佩斯/null 布达拉宫/null 布达拉山/null 布迪亚/null 布道/null 布里坦尼/null 布里奇顿/null 布里斯托/null 布里斯托尔/null 布里斯托尔海峡/null 布里斯班/null 布防/null 布防迎战/null 布阵/null 布隆伯格/null 布隆方丹/null 布隆迪/null 布雷/null 布雷舰/null 布雷顿森林/null 布面/null 布鞋/null 布须曼人/null 布鲁克/null 布鲁克林/null 布鲁克林大桥/null 布鲁克海文国家实验室/null 布鲁克海文实验室/null 布鲁塞尔/null 布鲁姆斯伯里/null 布鲁斯/null 布鲁日/null 布鲁氏菌/null 布鲁氏菌病/null 布鼓雷门/null 帅印/null 帅呆了/null 帅哥/null 帅才/null 帅权/null 帅气/null 帆伞/null 帆布/null 帆布床/null 帆布鞋/null 帆张风满/null 帆板/null 帆船/null 师专/null 师严道尊/null 师之所存/null 师事/null 师传/null 师傅/null 师兄/null 师兄弟/null 师公/null 师出无名/null 师出有名/null 师友/null 师古/null 师哥/null 师团/null 师大/null 师妹/null 师姐/null 师娘/null 师宗/null 师尊/null 师弟/null 师徒/null 师心自是/null 师心自用/null 师恩/null 师承/null 师母/null 师法/null 师父/null 师父领进门/null 师爷/null 师生/null 师直为壮/null 师级/null 师老兵疲/null 师范/null 师范大学/null 师范学校/null 师范学院/null 师范教育/null 师范院校/null 师表/null 师资/null 师道/null 师道尊严/null 师长/null 师门/null 师院/null 希世之珍/null 希仁/null 希伯来/null 希伯来书/null 希伯来人/null 希伯来语/null 希伯莱/null 希伯莱大学/null 希伯莱文/null 希伯莱语/null 希冀/null 希图/null 希夏邦马峰/null 希奇/null 希奇古怪/null 希尔/null 希尔伯特/null 希尔内科斯/null 希尔弗瑟姆/null 希尔排序/null 希尔顿/null 希律王/null 希思罗/null 希拉克/null 希拉蕊/null 希拉里/null 希拉里・克林顿/null 希斯/null 希斯・莱杰/null 希斯仑/null 希斯罗机场/null 希有/null 希望/null 希望有/null 希望落空/null 希格斯/null 希格斯机制/null 希格斯玻色子/null 希格斯粒子/null 希求/null 希沃特/null 希波克拉底/null 希波战争/null 希洪/null 希特勒/null 希神/null 希罕/null 希罗底/null 希耳伯特/null 希腊人/null 希腊字母/null 希腊文/null 希腊文化/null 希腊王/null 希腊神话/null 希腊罗马神话/null 希腊语/null 希蒙・佩雷斯/null 希西家/null 希里哗啦/null 帏幕/null 帐上/null 帐主子/null 帐内/null 帐册/null 帐务/null 帐单/null 帐卡/null 帐号/null 帐外/null 帐夹/null 帐子/null 帐家/null 帐帘/null 帐幔/null 帐幕/null 帐户/null 帐房/null 帐据/null 帐本/null 帐棚/null 帐款/null 帐目/null 帐篷/null 帐簿/null 帐表/null 帐证/null 帐钉/null 帐钩/null 帐面/null 帐页/null 帑藏/null 帕丽斯・希尔顿/null 帕兰卡/null 帕内尔/null 帕劳/null 帕台农/null 帕台农神庙/null 帕塔亚/null 帕子/null 帕尔瓦蒂/null 帕尼巴特/null 帕拉塞尔士/null 帕拉马里博/null 帕提亚人/null 帕提侬神庙/null 帕斯/null 帕斯卡/null 帕斯卡三角形/null 帕斯卡六边形/null 帕斯卡尔/null 帕特丽夏/null 帕特里克/null 帕特里夏/null 帕瓦蒂/null 帕福斯/null 帕米尔/null 帕米尔山脉/null 帕米尔高原/null 帕累托/null 帕累托最优/null 帕累托法则/null 帕萨特/null 帕蒂尔/null 帕西/null 帕金森/null 帕金森病/null 帕金森症/null 帕马森/null 帖子/null 帖撒罗尼迦/null 帖撒罗尼迦前书/null 帖撒罗尼迦后书/null 帖服/null 帖木儿/null 帖木儿大汗/null 帘子/null 帘子布/null 帘子线/null 帘布/null 帘帐/null 帘带/null 帘幕/null 帛书/null 帛品/null 帛琉/null 帛画/null 帛金/null 帝业/null 帝乡/null 帝京/null 帝位/null 帝俄/null 帝俊/null 帝制/null 帝力/null 帝名/null 帝后/null 帝君/null 帝喾/null 帝国/null 帝国主义/null 帝国主义者/null 帝国理工学院/null 帝子/null 帝庙/null 帝政/null 帝权/null 帝汶岛/null 帝汶海/null 帝王/null 帝王企鹅/null 帝王切开/null 帝王将相/null 帝王般/null 帝王谱/null 帝皇/null 帝辛/null 帝都/null 带上/null 带下/null 带丑闻/null 带信/null 带儿/null 带入/null 带兵/null 带兵艺术/null 带冷笑/null 带出/null 带分数/null 带到/null 带刺/null 带动/null 带劲/null 带原者/null 带去/null 带呼/null 带响/null 带回/null 带回家/null 带坏/null 带声/null 带头/null 带头人/null 带头作用/null 带头巾/null 带子/null 带孝/null 带宽/null 带岭/null 带岭区/null 带徒弟/null 带手儿/null 带扣/null 带挈/null 带斑点/null 带月披星/null 带有/null 带材/null 带来/null 带枪/null 带柄/null 带标识/null 带步人/null 带气/null 带水拖泥/null 带河厉山/null 带牛佩犊/null 带状/null 带状条/null 带状疱疹/null 带电/null 带电作业/null 带电粒子/null 带病/null 带眼镜/null 带着/null 带着希望去旅行/null 带砺山河/null 带砺河山/null 带紫色/null 带累/null 带红色/null 带给/null 带罪立功/null 带菌者/null 带薪/null 带薪休假/null 带装/null 带褐色/null 带调/null 带走/null 带路/null 带路人/null 带过/null 带进/null 带送/null 带酸味/null 带金佩紫/null 带钢/null 带错/null 带锯/null 带队/null 带霉/null 带露/null 带青色/null 带音/null 带领/null 带饰/null 带鱼/null 带黄色/null 帧中继/null 帧太长/null 帧格式/null 帧检验序列/null 帧频/null 帧首定界符/null 席上/null 席上之珍/null 席下/null 席不暇暖/null 席丰履厚/null 席位/null 席凡宁根/null 席勒/null 席卷/null 席卷一空/null 席卷亚洲/null 席卷而来/null 席地/null 席地幕天/null 席地而坐/null 席垫/null 席子/null 席德尼/null 席梦思/null 席次/null 席珍待聘/null 席箔/null 席篾/null 席草/null 席间/null 席面/null 帮人/null 帮他/null 帮伙/null 帮会/null 帮你/null 帮倒忙/null 帮内/null 帮冬/null 帮凶/null 帮办/null 帮助/null 帮助某人/null 帮助索引/null 帮厨/null 帮口/null 帮同/null 帮员/null 帮套/null 帮子/null 帮宝适/null 帮工/null 帮带/null 帮帮/null 帮忙/null 帮我/null 帮手/null 帮扶/null 帮教/null 帮派/null 帮派体系/null 帮浦/null 帮着/null 帮腔/null 帮补/null 帮衬/null 帮诉/null 帮闲/null 帮闲钻懒/null 帷子/null 帷帐/null 帷幄/null 帷幔/null 帷幕/null 帷幕凿井/null 帷薄不修/null 常与/null 常为/null 常乐/null 常事/null 常于/null 常人/null 常以/null 常任/null 常任理事国/null 常会/null 常住/null 常住论/null 常作/null 常使/null 常例/null 常俸/null 常到/null 常务/null 常务主席/null 常务会议/null 常务委员会/null 常务理事/null 常压/null 常去/null 常喝/null 常在/null 常坐/null 常坐汽车者/null 常备/null 常备不懈/null 常备兵/null 常备军/null 常备药/null 常委/null 常委会/null 常宁/null 常客/null 常山/null 常川/null 常州/null 常常/null 常平/null 常年/null 常年不懈/null 常年不断/null 常异交作物/null 常往/null 常微分方程/null 常德/null 常德地区/null 常态/null 常态分布/null 常态化/null 常怪/null 常情/null 常把/null 常抓/null 常抓不懈/null 常指/null 常数/null 常时/null 常春/null 常春藤/null 常有/null 常服/null 常来常往/null 常染色体/null 常比/null 常温/null 常温动物/null 常温层/null 常熟/null 常犯/null 常理/null 常用/null 常用品/null 常用字/null 常用对数/null 常相知/null 常磁性/null 常礼/null 常绕/null 常绿/null 常绿树/null 常绿植物/null 常绿阔叶林/null 常胜/null 常胜军/null 常胜将军/null 常蚊/null 常衡/null 常衡制/null 常被/null 常见/null 常见病/null 常见的/null 常见问题/null 常规/null 常规战/null 常规战争/null 常规武器/null 常规铜电话线/null 常言/null 常言说/null 常言说得好/null 常言道/null 常设/null 常设机构/null 常访/null 常识/null 常说/null 常谈/null 常赴/null 常轨/null 常道/null 常量/null 常锡文戏/null 常问/null 常问问题/null 常青/null 常青藤/null 常青藤八校/null 常项/null 常食/null 常饮酒/null 常驻/null 常驻机构/null 帹暆/null 帽上/null 帽匠/null 帽天山/null 帽头/null 帽子/null 帽子戏法/null 帽徽/null 帽扣/null 帽架/null 帽檐/null 帽沿/null 帽盔/null 帽盔儿/null 帽章/null 帽箍儿/null 帽耳/null 帽舌/null 帽花/null 帽边/null 幂值/null 幂级数/null 幅员/null 幅员辽阔/null 幅宽/null 幅射/null 幅射线/null 幅度/null 幅面/null 幌子/null 幔子/null 幔帐/null 幕上/null 幕僚/null 幕前/null 幕剧/null 幕友/null 幕后/null 幕后操纵/null 幕后花絮/null 幕天/null 幕天席地/null 幕宾/null 幕布/null 幕帷/null 幕幕/null 幕府/null 幕后/null 幕灯/null 幕燕鼎鱼/null 幕间/null 幕降/null 幛子/null 幞头/null 幡然/null 幡然悔悟/null 幡然改图/null 幢幢/null 干一番事业/null 干下/null 干与/null 干么/null 干了/null 干事/null 干事长/null 干云蔽日/null 干产/null 干亲/null 干什么/null 干仗/null 干休/null 干休所/null 干俸/null 干儿/null 干儿子/null 干兄弟/null 干冰/null 干冷/null 干净/null 干净俐落/null 干净利落/null 干制/null 干劲/null 干劲冲天/null 干劲十足/null 干卿何事/null 干号/null 干名采誉/null 干吗/null 干咳/null 干哕/null 干啥/null 干啼湿哭/null 干嘛/null 干嚎/null 干城/null 干好/null 干妈/null 干姜/null 干娘/null 干完/null 干将/null 干尸/null 干尽/null 干巴/null 干巴巴/null 干干净净/null 干得/null 干得出/null 干得好/null 干急/null 干性油/null 干戈/null 干戈载戢/null 干扁豆角/null 干才/null 干打垒/null 干扰/null 干扰声/null 干扰机/null 干扰素/null 干扰者/null 干挠/null 干掉/null 干支/null 干料/null 干旱/null 干旱地区/null 干旱风/null 干时/null 干晒/null 干材/null 干杯/null 干果/null 干枯/null 干柴/null 干校/null 干梅子/null 干死/null 干洗/null 干活/null 干活儿/null 干流/null 干涉/null 干涉仪/null 干涉内政/null 干涉现象/null 干涉者/null 干涉计/null 干涩/null 干涸/null 干渠/null 干渴/null 干湿/null 干湿球温度表/null 干潮/null 干煸土豆丝/null 干燥/null 干燥剂/null 干燥器/null 干燥机/null 干燥窑/null 干燥箱/null 干爹/null 干爽/null 干犯/null 干球/null 干球温度/null 干电池/null 干瘦/null 干瘪/null 干癣/null 干眼症/null 干着/null 干着急/null 干瞪眼/null 干硬/null 干碍/null 干禄/null 干笑/null 干等/null 干粉/null 干粮/null 干粮袋/null 干系/null 干线/null 干练/null 干细胞/null 干结/null 干群/null 干群关系/null 干肉/null 干肉片/null 干肉饼/null 干股/null 干肥/null 干脆/null 干脆利落/null 干腊肠/null 干草/null 干草堆/null 干草机/null 干草架/null 干草粉/null 干菜/null 干薪/null 干蠢事/null 干血浆/null 干血痨/null 干衣/null 干裂/null 干警/null 干证/null 干谒/null 干豆/null 干贝/null 干货/null 干贮/null 干起/null 干起来/null 干路/null 干躁/null 干过/null 干连/null 干透/null 干道/null 干邑/null 干部/null 干酪/null 干酪素/null 干酵母/null 干预/null 干饭/null 干馏/null 干鲜果/null 平一/null 平乐/null 平乡/null 平乱/null 平交道/null 平产/null 平人/null 平仄/null 平仓/null 平仰/null 平价/null 平伏/null 平伸/null 平作/null 平信/null 平假名/null 平允/null 平光/null 平凉/null 平凉地区/null 平减/null 平凡/null 平分/null 平分点/null 平分秋色/null 平分线/null 平分面/null 平列/null 平刨/null 平利/null 平剧/null 平加/null 平动/null 平南/null 平卧/null 平原/null 平原十日饮/null 平原战场/null 平反/null 平叛/null 平口钳/null 平台/null 平台型/null 平台式/null 平和/null 平地/null 平地木/null 平地机/null 平地起家/null 平地青云/null 平地风波/null 平均/null 平均为/null 平均主义/null 平均价格/null 平均值/null 平均值定理/null 平均共产主义/null 平均利润/null 平均剂量/null 平均发展水平/null 平均增长速度/null 平均寿命/null 平均工资/null 平均年龄/null 平均律/null 平均指数/null 平均指标/null 平均收入/null 平均数/null 平均日产量/null 平均每年下降/null 平均每年增长/null 平均气温/null 平均水平/null 平均海水面/null 平均达/null 平均速度/null 平坐/null 平坝/null 平坝县/null 平坦/null 平型关/null 平型关大捷/null 平城/null 平埔族/null 平塘/null 平壤/null 平壤市/null 平声/null 平复/null 平头/null 平头数/null 平头正脸/null 平头百姓/null 平头钉/null 平妥/null 平安/null 平安北道/null 平安南道/null 平安无事/null 平安时代/null 平安神宫/null 平安道/null 平安里/null 平定/null 平宝盖/null 平实/null 平射炮/null 平尺/null 平局/null 平屋顶/null 平展/null 平山/null 平山区/null 平川/null 平川区/null 平巷/null 平布/null 平常/null 平常日/null 平平/null 平平安安/null 平平常常/null 平平当当/null 平平淡淡/null 平平稳稳/null 平平静静/null 平年/null 平底/null 平底船/null 平底锅/null 平度/null 平庸/null 平庸之辈/null 平庸无奇/null 平心/null 平心而论/null 平心静气/null 平快车/null 平息/null 平成/null 平战结合/null 平房/null 平房区/null 平房式/null 平手/null 平抑/null 平抚/null 平摊/null 平放/null 平整/null 平整土地/null 平方/null 平方公里/null 平方千米/null 平方厘米/null 平方反比定律/null 平方反比律/null 平方成反比/null 平方根/null 平方米/null 平方英尺/null 平日/null 平时/null 平时不烧香/null 平昌/null 平明/null 平易/null 平易近人/null 平易近民/null 平昔/null 平曝一声雷/null 平月/null 平服/null 平权/null 平板/null 平板仪/null 平板状/null 平板电脑/null 平板车/null 平果/null 平架/null 平桥/null 平桥区/null 平槽/null 平正/null 平步青云/null 平武/null 平毁/null 平民/null 平民百姓/null 平水期/null 平江/null 平江区/null 平江起义/null 平泉/null 平津战役/null 平流层/null 平流缓进/null 平浅/null 平淡/null 平淡无奇/null 平添/null 平湖/null 平溪/null 平溪乡/null 平滑/null 平滑字/null 平滑流畅/null 平滑肌/null 平潭/null 平炉/null 平版/null 平生/null 平生不做亏心事/null 平畴/null 平白/null 平白无故/null 平盘/null 平直/null 平看/null 平移/null 平稳/null 平空/null 平等/null 平等主义/null 平等互利/null 平等互惠/null 平等利/null 平等待人/null 平等权利/null 平等的法律地位/null 平等竞争/null 平米/null 平籴/null 平素/null 平级/null 平纹/null 平绒/null 平缓/null 平罗/null 平肩/null 平胸/null 平舆/null 平舌音/null 平芜/null 平英团/null 平菇/null 平行/null 平行作业/null 平行公设/null 平行四边形/null 平行线/null 平衍/null 平衡/null 平衡力/null 平衡态/null 平衡木/null 平衡物/null 平衡环/null 平衡者/null 平衡觉/null 平装/null 平装书/null 平装本/null 平西/null 平视/null 平视显示器/null 平角/null 平话/null 平调/null 平谷/null 平谷县/null 平走漫步/null 平起/null 平起平坐/null 平足/null 平路机/null 平身/null 平躺/null 平车/null 平辈/null 平远/null 平道/null 平遥/null 平邑/null 平野/null 平金/null 平铺/null 平铺直叙/null 平锅/null 平锅柄/null 平镇/null 平镇市/null 平阳/null 平阴/null 平陆/null 平降/null 平靖/null 平静/null 平面/null 平面几何/null 平面化/null 平面图/null 平面曲线/null 平面波/null 平面角/null 平面镜/null 平音/null 平顶/null 平顶山/null 平顺/null 平鱼/null 平鲁/null 平鲁区/null 年三十/null 年下/null 年中/null 年久失修/null 年之久/null 年事/null 年事已高/null 年产/null 年产值/null 年产能力/null 年产量/null 年仅/null 年代/null 年代初/null 年代学/null 年以下/null 年以来/null 年份/null 年休/null 年会/null 年俸/null 年值/null 年假/null 年兄/null 年光/null 年关/null 年内/null 年刊/null 年初/null 年利/null 年利润/null 年前/null 年力/null 年功加俸/null 年华/null 年历/null 年友/null 年史/null 年号/null 年后/null 年唔/null 年均/null 年均增长率/null 年均日照/null 年增长率/null 年复一年/null 年夜/null 年夜饭/null 年头/null 年头儿/null 年审/null 年宵/null 年富力强/null 年寿/null 年尊/null 年少/null 年少无知/null 年少气盛/null 年尾/null 年岁/null 年岁大/null 年已蹉跎/null 年市/null 年平均/null 年平均增长率/null 年年/null 年年如此/null 年年有余/null 年年有馀/null 年幼/null 年幼者/null 年底/null 年庚/null 年度/null 年度大会/null 年度报告/null 年度股东大会/null 年度计划/null 年度预算/null 年总产/null 年息/null 年成/null 年报/null 年收入/null 年数/null 年时/null 年景/null 年月/null 年末/null 年来/null 年根/null 年楚河/null 年次/null 年浅/null 年深日久/null 年深月久/null 年满/null 年率/null 年生/null 年生产能力/null 年画/null 年画儿/null 年礼/null 年神兽散/null 年祭/null 年秋天/null 年税/null 年糕/null 年级/null 年级间/null 年纪/null 年终/null 年终分配/null 年终奖/null 年终总结/null 年终评比/null 年缴/null 年老/null 年老体弱/null 年老力衰/null 年老多病/null 年节/null 年菜/null 年薪/null 年表/null 年衰/null 年谊/null 年谱/null 年貌/null 年货/null 年资/null 年轮/null 年轻/null 年轻一代/null 年轻人/null 年轻力壮/null 年轻化/null 年轻干部/null 年轻有为/null 年轻气盛/null 年载/null 年辈/null 年过半百/null 年过古稀/null 年过花甲/null 年迈/null 年迈体弱/null 年近半百/null 年近古稀/null 年近花甲/null 年逾/null 年逾古稀/null 年金/null 年鉴/null 年长/null 年间/null 年限/null 年集/null 年青/null 年青人/null 年饭/null 年馑/null 年首/null 年高/null 年高德劭/null 年高德邵/null 年齿/null 年龄/null 年龄特征/null 年龄组/null 并不/null 并不以此为满足/null 并不在乎/null 并不是/null 并不矛盾/null 并不等于/null 并不能/null 并且/null 并为/null 并举/null 并作/null 并使/null 并例/null 并修/null 并入/null 并列/null 并力/null 并卷机/null 并发/null 并发症/null 并口/null 并可/null 并合/null 并同/null 并向/null 并吞/null 并坐/null 并对于/null 并已/null 并当/null 并把/null 并报/null 并拢/null 并按/null 并排/null 并施/null 并无/null 并日而食/null 并有/null 并未/null 并条/null 并案办理/null 并没有/null 并激/null 并用/null 并由/null 并称/null 并立/null 并端/null 并纱/null 并经/null 并给/null 并网/null 并网发电/null 并置/null 并者/null 并联/null 并肩/null 并肩而行/null 并肩作战/null 并肩战斗/null 并能/null 并臻/null 并蒂莲/null 并行/null 并行不悖/null 并行口/null 并行程序/null 并行计算/null 并被/null 并要/null 并解/null 并论/null 并请/null 并购/null 并轨/null 并转/null 并进/null 并重/null 并附/null 并非/null 并非如此/null 并非易事/null 并驾齐驱/null 幸中/null 幸事/null 幸亏/null 幸会/null 幸免/null 幸免于死/null 幸勿/null 幸喜/null 幸好/null 幸存/null 幸存者/null 幸得/null 幸未/null 幸灾乐祸/null 幸甚/null 幸福/null 幸福学/null 幸而/null 幸臣/null 幸运/null 幸运儿/null 幸运抽奖/null 幸进/null 幺么小丑/null 幺二/null 幺喝/null 幺并矢/null 幺点/null 幺麽/null 幺麽小丑/null 幻像/null 幻化/null 幻听/null 幻境/null 幻形/null 幻影/null 幻影似/null 幻念/null 幻忽然间/null 幻想/null 幻想力/null 幻想家/null 幻想曲/null 幻日/null 幻景/null 幻术/null 幻灭/null 幻灭感/null 幻灯/null 幻灯机/null 幻灯片/null 幻片/null 幻画/null 幻视/null 幻觉/null 幻觉剂/null 幻象/null 幼体/null 幼儿/null 幼儿园/null 幼儿教育/null 幼儿用/null 幼兽/null 幼功/null 幼发拉底/null 幼发拉底河/null 幼发拉底河谷/null 幼君/null 幼吾幼/null 幼女/null 幼妹/null 幼子/null 幼学壮行/null 幼小/null 幼少/null 幼师/null 幼年/null 幼年期/null 幼弟/null 幼态/null 幼托/null 幼教/null 幼时/null 幼有所托/null 幼林/null 幼树/null 幼株/null 幼畜/null 幼禽/null 幼稚/null 幼稚园/null 幼稚期/null 幼稚病/null 幼稚症/null 幼童/null 幼者/null 幼芽/null 幼苗/null 幼虫/null 幼雏/null 幼马/null 幼龄/null 幽会/null 幽僻/null 幽兰/null 幽冥/null 幽咽/null 幽囚/null 幽囚受辱/null 幽囹/null 幽女/null 幽婉/null 幽室/null 幽寂/null 幽居/null 幽州/null 幽幽/null 幽径/null 幽微/null 幽忧/null 幽思/null 幽怨/null 幽情/null 幽愤/null 幽明/null 幽明异路/null 幽暗/null 幽期/null 幽期密约/null 幽浮/null 幽深/null 幽灵/null 幽灵似/null 幽眇/null 幽禁/null 幽绿/null 幽美/null 幽谷/null 幽趣/null 幽邃/null 幽门/null 幽闭/null 幽闭恐惧/null 幽闭恐惧症/null 幽闲/null 幽雅/null 幽静/null 幽香/null 幽魂/null 幽默/null 幽默家/null 幽默感/null 幽默滑稽/null 幽默画/null 幽默话/null 广东医学院/null 广东外语外贸大学/null 广东天地会起义/null 广东戏/null 广东海洋大学/null 广东科学技术职业学院/null 广东药学院/null 广东话/null 广东音乐/null 广丰/null 广为/null 广义/null 广义地说/null 广义性/null 广义相对论/null 广九/null 广九铁路/null 广交/null 广交会/null 广交朋友/null 广众/null 广众大庭/null 广传/null 广体/null 广元/null 广加/null 广南/null 广博/null 广厦/null 广告/null 广告商/null 广告文印/null 广告条幅/null 广告片/null 广告牌/null 广告衫/null 广告设计师/null 广土众民/null 广地/null 广场/null 广场恐怖症/null 广场恐惧/null 广场恐惧症/null 广域市/null 广域网/null 广域网路/null 广夏细旃/null 广外/null 广大/null 广大人民/null 广大党员/null 广大干部/null 广大群众/null 广大读者/null 广大青年/null 广宁/null 广安/null 广安地区/null 广安门/null 广宗/null 广寒仙子/null 广寒宫/null 广岛/null 广岛县/null 广岛市/null 广州中医药大学/null 广州日报/null 广州美术学院/null 广州起义/null 广布/null 广平/null 广度/null 广庭大众/null 广开/null 广开学路/null 广开才路/null 广开言路/null 广开门路/null 广德/null 广播/null 广播体操/null 广播剧/null 广播员/null 广播和未知服务器/null 广播地址/null 广播室/null 广播工作/null 广播操/null 广播段/null 广播电台/null 广播电影电视总局/null 广播电影电视部/null 广播电视/null 广播电视部/null 广播稿/null 广播网/null 广播网路/null 广播节目/null 广播讲座/null 广播讲话/null 广敞/null 广昌/null 广柑/null 广水/null 广汉/null 广河/null 广泛/null 广泛开展/null 广泛影响/null 广泛性/null 广游/null 广漠/null 广灵/null 广电/null 广电总局/null 广益/null 广目天/null 广砚/null 广种薄收/null 广积/null 广结/null 广结良缘/null 广而告之广告公司/null 广而言之/null 广袖高髻/null 广袤/null 广袤无垠/null 广西/null 广西军区/null 广西省/null 广西自治区/null 广角/null 广角镜/null 广角镜头/null 广设/null 广识/null 广谱/null 广货/null 广阔/null 广阔天地/null 广阔性/null 广阳/null 广阳区/null 广陵/null 广陵区/null 广雅/null 广韵/null 广饶/null 庄严/null 庄主/null 庄员/null 庄周/null 庄周梦蝶/null 庄园/null 庄园主/null 庄子/null 庄客/null 庄家/null 庄户/null 庄河/null 庄浪/null 庄稼/null 庄稼人/null 庄稼地/null 庄稼户/null 庄稼户儿/null 庄稼汉/null 庄稼活儿/null 庄稼院/null 庄老/null 庄重/null 庆事/null 庆云/null 庆元/null 庆典/null 庆功/null 庆功会/null 庆华/null 庆历/null 庆历新政/null 庆城/null 庆大霉素/null 庆安/null 庆宴/null 庆寿/null 庆尙北道/null 庆尙南道/null 庆尚北道/null 庆尚南道/null 庆尚道/null 庆州/null 庆幸/null 庆父不死/null 庆父不死鲁难未已/null 庆生/null 庆祝/null 庆祝会/null 庆贺/null 庆阳/null 庆阳地区/null 庇佑/null 庇护/null 庇护所/null 庇祐/null 庇荫/null 庇西特拉图/null 床上/null 床上安床/null 床上施床/null 床上用品/null 床下/null 床下安床/null 床位/null 床侧/null 床单/null 床号/null 床垫/null 床头/null 床头板/null 床头柜/null 床头金尽/null 床子/null 床旅/null 床板/null 床架/null 床柱/null 床榻/null 床沿/null 床笠/null 床第之私/null 床罩/null 床脚/null 床虱/null 床被/null 床褥/null 床身/null 床边/null 床铺/null 序乐/null 序位/null 序列/null 序列号/null 序号/null 序名/null 序幕/null 序战/null 序数/null 序文/null 序时/null 序时帐/null 序曲/null 序渐/null 序目/null 序言/null 序论/null 序诗/null 序跋/null 序齿/null 庐剧/null 庐山/null 庐山区/null 庐山真面目/null 庐山面目/null 庐州/null 庐江/null 庐舍/null 庐阳/null 庐阳区/null 库仑/null 库仑定律/null 库仑计/null 库仓定律/null 库伦/null 库伦镇/null 库克/null 库克山/null 库克群岛/null 库克船长/null 库券/null 库单/null 库姆/null 库姆塔格沙漠/null 库存/null 库存内/null 库存品/null 库存现金/null 库存量/null 库容/null 库尔/null 库尔勒/null 库尔尼科娃/null 库尔德/null 库尔德人/null 库尔德工人党/null 库尔德斯坦/null 库尔斯克/null 库尔特・瓦尔德海姆/null 库工党/null 库布里克/null 库房/null 库木吐拉千佛洞/null 库模块/null 库款/null 库特/null 库珀带/null 库纳南/null 库缎/null 库藏/null 库蚊/null 库车/null 库里/null 库里提巴/null 库锦/null 库页岛/null 应为/null 应举/null 应予/null 应予以/null 应于/null 应交/null 应仁之乱/null 应从/null 应付/null 应付帐款/null 应付款/null 应付自如/null 应付裕如/null 应以/null 应作/null 应做/null 应允/null 应充/null 应免/null 应兑/null 应具/null 应典/null 应分/null 应列/null 应到/null 应到达/null 应制/null 应力/null 应力场/null 应办/null 应加/null 应募/null 应卯/null 应即/null 应县木塔/null 应发/null 应取/null 应受/null 应变/null 应变力/null 应变无方/null 应变能力/null 应变计/null 应变随机/null 应召/null 应召入伍/null 应召女郎/null 应名儿/null 应向/null 应否/null 应和/null 应在/null 应城/null 应城区/null 应增/null 应声/null 应声虫/null 应天从人/null 应天从民/null 应天从物/null 应天受命/null 应天承运/null 应天授命/null 应天顺人/null 应天顺时/null 应天顺民/null 应对/null 应对不穷/null 应对如流/null 应将/null 应尊敬/null 应尽/null 应届/null 应届毕业生/null 应属/null 应市/null 应当/null 应征/null 应征收/null 应征税/null 应得/null 应急/null 应急出口/null 应急待命/null 应急措施/null 应急照射/null 应急状态/null 应惩罚/null 应战/null 应手/null 应扣/null 应承/null 应把/null 应报/null 应报备/null 应拨/null 应按/null 应按照/null 应接/null 应接不暇/null 应接如响/null 应提/null 应援/null 应摊/null 应支/null 应收/null 应收帐款/null 应敌/null 应斥责/null 应时/null 应时而生/null 应是/null 应景/null 应景儿/null 应有/null 应有尽有/null 应机权变/null 应机立断/null 应权通变/null 应根据/null 应注意/null 应激性/null 应点/null 应生/null 应用/null 应用于/null 应用层/null 应用平台/null 应用心理学/null 应用技术/null 应用数学/null 应用文/null 应用物理/null 应用科学/null 应用程式/null 应用程式介面/null 应用软件/null 应用软体/null 应用逻辑/null 应用题/null 应由/null 应电流/null 应留/null 应穿/null 应立即/null 应答/null 应答如响/null 应约/null 应纳/null 应纳税/null 应罚款/null 应考/null 应聘/null 应聘者/null 应能/null 应补/null 应被/null 应规蹈矩/null 应计/null 应计基础/null 应记/null 应许/null 应设/null 应诉/null 应诊/null 应诏/null 应试/null 应试教育/null 应试者/null 应该/null 应该说/null 应说/null 应诺/null 应课税/null 应负/null 应负责/null 应责备/null 应贷/null 应起诉/null 应转/null 应运/null 应运而生/null 应运而起/null 应还/null 应退/null 应适当/null 应选/null 应邀/null 应邀出席/null 应邀前来/null 应邀而来/null 应酬/null 应酬话/null 应采儿/null 应销/null 应门/null 应际而生/null 应领/null 应验/null 底上/null 底下/null 底下人/null 底事/null 底价/null 底使/null 底儿/null 底册/null 底分/null 底土/null 底垫/null 底墒/null 底夸克/null 底子/null 底孔/null 底宽/null 底层/null 底工/null 底帐/null 底座/null 底抽/null 底数/null 底朝天/null 底本/null 底板/null 底架/null 底栖有孔虫/null 底栖生物/null 底样/null 底格里斯/null 底格里斯河/null 底框/null 底梁/null 底止/null 底比斯/null 底气/null 底汁/null 底洞/null 底漆/null 底火/null 底片/null 底版/null 底牌/null 底特律/null 底狱/null 底界/null 底盘/null 底码/null 底稿/null 底端/null 底粪/null 底纹/null 底线/null 底细/null 底肥/null 底船/null 底色/null 底蕴/null 底薪/null 底行/null 底裤/null 底襟/null 底角/null 底货/null 底边/null 底部/null 底里/null 底阀/null 底限/null 底面/null 庖丁/null 庖丁解牛/null 庖厨/null 庖牺氏/null 庖疹/null 店东/null 店主/null 店伙/null 店伙计/null 店内/null 店名/null 店员/null 店堂/null 店外/null 店头/null 店家/null 店小二/null 店类/null 店舍/null 店里/null 店钱/null 店铃/null 店铺/null 店面/null 店面广告/null 店风/null 庙中/null 庙主/null 庙会/null 庙口/null 庙号/null 庙堂/null 庙塔/null 庙宇/null 庙寺/null 庙祝/null 庙里/null 庚午/null 庚子/null 庚子国变/null 庚寅/null 庚帖/null 庚戌/null 庚日/null 庚申/null 庚癸之呼/null 庚糖/null 庚辰/null 府上/null 府中/null 府兵制/null 府君/null 府城/null 府外/null 府尹/null 府幕/null 府库/null 府志/null 府治/null 府第/null 府绸/null 府试/null 府谷/null 府邸/null 庞克/null 庞兹/null 庞加莱/null 庞培/null 庞大/null 庞家堡区/null 庞德/null 庞德街/null 庞杂/null 庞氏/null 庞氏骗局/null 庞涓/null 庞然/null 庞然大物/null 庞眉白发/null 庞眉皓首/null 废书而叹/null 废人/null 废位/null 废品/null 废品收购/null 废品率/null 废址/null 废墟/null 废嫡/null 废寝忘食/null 废寝忘餐/null 废寝食/null 废弃/null 废弃物/null 废弛/null 废掉/null 废料/null 废旧/null 废旧物资/null 废时/null 废林/null 废柴/null 废止/null 废止者/null 废气/null 废水/null 废油/null 废液/null 废渣/null 废热利用/null 废然/null 废然而反/null 废物/null 废物利用/null 废物箱/null 废矿/null 废票/null 废站/null 废纸/null 废纸篓/null 废统/null 废置/null 废置不用/null 废胶/null 废船/null 废藩置县/null 废话/null 废语/null 废钢/null 废铁/null 废铜/null 废铜烂铁/null 废除/null 废除军备/null 废页/null 废食忘寝/null 废黜/null 庠序/null 度假/null 度假区/null 度假者/null 度君子之腹/null 度命/null 度夏/null 度外/null 度娘/null 度尺/null 度德量力/null 度支/null 度数/null 度日/null 度日如岁/null 度日如年/null 度曲/null 度牒/null 度蜜月/null 度表/null 度过/null 度过难关/null 度量/null 度量大/null 度量衡/null 座上/null 座上客/null 座上宾/null 座中/null 座位/null 座像/null 座儿/null 座前/null 座力/null 座右铭/null 座号/null 座员/null 座垫/null 座头市/null 座头鲸/null 座套/null 座子/null 座层/null 座师/null 座席/null 座无空席/null 座无虚席/null 座机/null 座标/null 座标轴/null 座椅/null 座椅套子/null 座次/null 座生水母/null 座者/null 座舱/null 座落/null 座谈/null 座谈会/null 座车/null 座钟/null 座骨/null 庭上/null 庭令/null 庭园/null 庭园里/null 庭堂/null 庭外/null 庭审/null 庭期/null 庭训/null 庭议/null 庭长/null 庭院/null 庭院经济/null 庭除/null 庵堂/null 庵摩勒/null 庵摩落迦果/null 庶乎/null 庶人/null 庶几/null 庶几乎/null 庶务/null 庶吉士/null 庶子/null 庶室/null 庶母/null 庶民/null 庶生/null 康乃馨/null 康乐/null 康乐球/null 康乾宗迦峰/null 康乾盛世/null 康佳/null 康保/null 康健/null 康区/null 康哉之歌/null 康复/null 康多莉扎・赖斯/null 康奈尔/null 康奈尔大学/null 康宁/null 康定/null 康巴/null 康巴地区/null 康巴藏区/null 康平/null 康广仁/null 康庄/null 康庄大道/null 康强/null 康德/null 康思维恩格/null 康托尔/null 康拜因/null 康斯坦察/null 康斯坦茨/null 康有为/null 康桥/null 康泰/null 康涅狄格/null 康涅狄格州/null 康熙/null 康熙字典/null 康生/null 康白度/null 康科德/null 康衢/null 康采恩/null 康铜/null 康马/null 庸中佼佼/null 庸中皎皎/null 庸人/null 庸人庸福/null 庸人自扰/null 庸人自扰之/null 庸俗/null 庸俗低级/null 庸俗作品/null 庸俗化/null 庸俗唯物主义/null 庸俗政治经济学/null 庸俗者/null 庸医/null 庸医杀人/null 庸品/null 庸国/null 庸庸碌碌/null 庸才/null 庸碌/null 庸碌无能/null 庸谷进化论/null 庾信/null 廉价/null 廉价物/null 廉俸/null 廉售/null 廉宜/null 廉政/null 廉政公署/null 廉政建设/null 廉明/null 廉正/null 廉江/null 廉泉让水/null 廉洁/null 廉洁公道/null 廉洁奉公/null 廉洁自律/null 廉烂羊头/null 廉直/null 廉署/null 廉耻/null 廉远堂高/null 廉顽立懦/null 廉颇/null 廊下/null 廊桥/null 廊坊/null 廊坊地区/null 廊子/null 廊庑/null 廊庙/null 廊檐/null 廊道/null 廓张/null 廓清/null 廓落/null 廖沫沙/null 廥仓/null 延于/null 延会/null 延伸/null 延发/null 延发性/null 延吉/null 延后/null 延坪岛/null 延安/null 延安地区/null 延安整风运动/null 延安精神/null 延宕/null 延寿/null 延展/null 延展性/null 延川/null 延平/null 延平乡/null 延平区/null 延年/null 延年益寿/null 延庆/null 延性/null 延报/null 延拓/null 延接/null 延揽/null 延搁/null 延时/null 延时器/null 延时摄影/null 延期/null 延期付款/null 延津/null 延滞/null 延烧/null 延用/null 延续/null 延绵/null 延缓/null 延聘/null 延聘招揽/null 延至/null 延见/null 延误/null 延误费/null 延请/null 延边/null 延边地区/null 延边大学/null 延边州/null 延迟/null 延长/null 延长线/null 延颈举踵/null 延颈企踵/null 延髓/null 廷争面折/null 廷尉/null 廷巴克图/null 廷布/null 廷杖/null 廷试/null 建三江/null 建下/null 建业/null 建中/null 建于/null 建交/null 建党/null 建党思想/null 建党节/null 建兰/null 建兵/null 建军/null 建初/null 建制/null 建功/null 建功立业/null 建功立事/null 建华/null 建华区/null 建厂/null 建同一气/null 建同作弊/null 建国/null 建国以来/null 建国方针/null 建基/null 建塘镇/null 建好/null 建始/null 建委/null 建宁/null 建安/null 建屋互助会/null 建工/null 建帐/null 建平/null 建康/null 建德/null 建成/null 建成区/null 建成投产/null 建户/null 建房/null 建所/null 建政/null 建文/null 建文帝/null 建昌/null 建有/null 建材/null 建材工业/null 建构/null 建构正义理论/null 建树/null 建校/null 建档/null 建桥/null 建模/null 建水/null 建湖/null 建漆/null 建瓯/null 建瓴高屋/null 建白/null 建省/null 建立/null 建立健全/null 建立正式外交关系/null 建立者/null 建站/null 建筑/null 建筑上/null 建筑业/null 建筑学/null 建筑工人/null 建筑师/null 建筑术/null 建筑材料/null 建筑物/null 建筑群/null 建筑者/null 建筑艺术/null 建筑设计/null 建筑队/null 建筑面积/null 建置/null 建行/null 建言/null 建议/null 建议书/null 建议者/null 建设/null 建设中/null 建设公债/null 建设厅/null 建设性/null 建设性的批评/null 建设者/null 建设部/null 建起/null 建造/null 建造者/null 建邺/null 建邺区/null 建都/null 建阳/null 建院/null 建馆/null 廿八躔/null 廿四史/null 开三次方/null 开上/null 开上开下船/null 开业/null 开业典礼/null 开业大吉/null 开业者/null 开个/null 开了/null 开二次/null 开于/null 开云见日/null 开交/null 开亮了/null 开仓济贫/null 开仗/null 开价/null 开伐/null 开伙/null 开会/null 开会祈祷/null 开会讨论/null 开伞/null 开伯尔/null 开伯尔山口/null 开例/null 开信/null 开倒车/null 开元/null 开元之治/null 开元盛世/null 开先/null 开光/null 开入/null 开关/null 开出/null 开凿/null 开凿者/null 开刀/null 开刃/null 开刃儿/null 开列/null 开创/null 开创局面/null 开创性/null 开创新局面/null 开创者/null 开初/null 开到/null 开办/null 开动/null 开化/null 开区/null 开区间/null 开单/null 开印/null 开卷/null 开卷有得/null 开卷有益/null 开卷考试/null 开原/null 开原县/null 开去/null 开发/null 开发中心/null 开发人员/null 开发公司/null 开发利用/null 开发区/null 开发周期/null 开发商/null 开发环境/null 开发者/null 开发费/null 开发资源/null 开发过程/null 开发部/null 开发银行/null 开口/null 开口呼/null 开口子/null 开口跳/null 开口销/null 开台/null 开台锣鼓/null 开司米/null 开合桥/null 开合锣鼓/null 开吊/null 开后门/null 开向/null 开启/null 开味/null 开国/null 开国元勋/null 开国功臣/null 开国大典/null 开地/null 开场/null 开场白/null 开场锣鼓/null 开坯/null 开垦/null 开城/null 开城市/null 开埠/null 开堂/null 开墒/null 开士米/null 开壶/null 开处/null 开处方/null 开外/null 开夜车/null 开大/null 开大油门/null 开天窗/null 开天辟地/null 开天避地/null 开头/null 开奖/null 开始/null 开始以前/null 开始实行/null 开始时/null 开始比赛/null 开始营业/null 开孔/null 开学/null 开宗明义/null 开导/null 开封/null 开封地区/null 开封府/null 开小/null 开小会/null 开小差/null 开小灶/null 开尔文/null 开局/null 开屏/null 开展/null 开山/null 开山祖师/null 开山老祖/null 开山鼻祖/null 开岁/null 开工/null 开工典礼/null 开工率/null 开市/null 开帐/null 开席/null 开幕/null 开幕典礼/null 开幕式/null 开幕词/null 开平/null 开平区/null 开年/null 开年以来/null 开店/null 开庭/null 开开/null 开开心心/null 开弓/null 开张/null 开往/null 开征/null 开心/null 开心丸儿/null 开心形/null 开心果/null 开心见诚/null 开心颜/null 开快/null 开快车/null 开怀/null 开怀儿/null 开怀大笑/null 开怀畅饮/null 开恩/null 开慢/null 开戏/null 开戒/null 开战/null 开户/null 开户行/null 开户银行/null 开房/null 开房间/null 开打/null 开扩/null 开拍/null 开拓/null 开拓创新/null 开拓型/null 开拓性/null 开拓精神/null 开拓者/null 开拔/null 开挖/null 开掘/null 开播/null 开支/null 开放/null 开放地区/null 开放地带/null 开放城市/null 开放市场/null 开放式系统/null 开放式网络/null 开放性/null 开放源代码/null 开放源码/null 开放源码软件/null 开放电路/null 开放系统/null 开放系统互连/null 开敞/null 开斋/null 开斋节/null 开方/null 开旷/null 开明/null 开明专制/null 开明人士/null 开明君主/null 开映/null 开春/null 开普勒/null 开普勒定律/null 开普敦/null 开晴/null 开曼群岛/null 开朗/null 开本/null 开机/null 开杆/null 开来/null 开枪/null 开架/null 开架式/null 开标/null 开槽/null 开步/null 开水/null 开江/null 开汽车/null 开沟/null 开河/null 开河期/null 开洋/null 开洋荤/null 开洞/null 开涮/null 开渠/null 开源/null 开源节流/null 开溜/null 开满/null 开演/null 开漳圣王/null 开火/null 开灯/null 开炉/null 开炮/null 开物成务/null 开犁/null 开玩笑/null 开班/null 开球/null 开瓶费/null 开电/null 开畅/null 开疆/null 开白条/null 开皌/null 开盖/null 开盘/null 开盘汇率/null 开眼/null 开眼界/null 开着/null 开矿/null 开票/null 开票人/null 开禁/null 开福/null 开福区/null 开秤/null 开窍/null 开窗/null 开窗口/null 开窗法/null 开立/null 开站/null 开端/null 开端者/null 开笔/null 开筵/null 开篇/null 开篇伊始/null 开线/null 开给/null 开绽/null 开绿灯/null 开缝/null 开缺/null 开罐/null 开罐器/null 开罗/null 开罗会议/null 开罗大学/null 开罗宣言/null 开罚单/null 开罪/null 开耧/null 开胃/null 开胃菜/null 开胃酒/null 开胶/null 开脚/null 开脱/null 开脱罪责/null 开脸/null 开腔/null 开膛/null 开膛手杰克/null 开航/null 开船/null 开花/null 开花儿/null 开花期/null 开花结实/null 开花结果/null 开花衣/null 开苞/null 开荒/null 开荤/null 开药/null 开著/null 开蒙/null 开行/null 开衩/null 开裂/null 开裆裤/null 开襟/null 开解/null 开言/null 开讲/null 开设/null 开证/null 开诚/null 开诚布公/null 开诚相见/null 开课/null 开豁/null 开败/null 开账/null 开赛/null 开走/null 开赴/null 开起/null 开足/null 开足马力/null 开路/null 开路人/null 开路先锋/null 开路机/null 开车/null 开车人/null 开辟/null 开辟者/null 开辟通路/null 开边/null 开过/null 开运河/null 开进/null 开远/null 开通/null 开遍/null 开道/null 开都河/null 开酒费/null 开采/null 开采权/null 开释/null 开金/null 开金矿/null 开钻/null 开销/null 开锁/null 开锄/null 开锅/null 开锣/null 开锣喝道/null 开镰/null 开门/null 开门办学/null 开门揖盗/null 开门炮/null 开门红/null 开门见喜/null 开门见山/null 开闭/null 开闭幕式/null 开间/null 开闸/null 开闸放水/null 开阔/null 开阔地/null 开阔眼界/null 开阳/null 开除/null 开除党籍/null 开除学籍/null 开集/null 开霁/null 开革/null 开颜/null 开饭/null 开馆/null 开首/null 开高叉/null 开鲁/null 开黑店/null 弁言/null 异丁烷/null 异丁苯丙酸/null 异丙醇/null 异义/null 异乎/null 异乎寻常/null 异乡/null 异乡人/null 异事/null 异于/null 异交作物/null 异亮氨酸/null 异人/null 异位/null 异体/null 异体字/null 异俗/null 异像/null 异元/null 异军/null 异军特起/null 异军突起/null 异动/null 异化/null 异化作用/null 异卉奇花/null 异卵/null 异卵双胞胎/null 异口同声/null 异口同辞/null 异口同音/null 异口同韵/null 异同/null 异名/null 异味/null 异咯嗪/null 异国/null 异国他乡/null 异国情趣/null 异国风光/null 异地/null 异地恋/null 异地相逢/null 异型/null 异域/null 异声/null 异处/null 异外/null 异宝奇珍/null 异己/null 异己分子/null 异常/null 异形/null 异形词/null 异彩/null 异心/null 异态/null 异性/null 异性体/null 异性性接触/null 异性恋/null 异性恋主义/null 异性相吸/null 异想/null 异想天开/null 异意/null 异戊二烯/null 异戊橡胶/null 异或/null 异才/null 异政殊俗/null 异教/null 异教徒/null 异教者/null 异数/null 异文/null 异文鄙事/null 异族/null 异日/null 异时/null 异曲/null 异曲同工/null 异服/null 异木奇花/null 异构/null 异构体/null 异构酶/null 异样/null 异步/null 异步传输模式/null 异步电动机/null 异母/null 异派同源/null 异源多倍体/null 异点/null 异烟肼/null 异焉/null 异父/null 异物/null 异特龙/null 异状/null 异相/null 异种/null 异端/null 异端者/null 异端邪说/null 异类/null 异胎同岑/null 异能/null 异腈/null 异色/null 异花/null 异花传粉/null 异装癖/null 异见/null 异见者/null 异言/null 异议/null 异议人士/null 异议分子/null 异议者/null 异词/null 异语/null 异说/null 异读/null 异读词/null 异质/null 异质体/null 异质化/null 异质网路/null 异趣/null 异路同归/null 异途/null 异途同归/null 异邦/null 异重流/null 异闻传说/null 异音/null 异项/null 异频雷达收发机/null 异食/null 异香/null 异香异气/null 异香扑鼻/null 异龙/null 弃世/null 弃义/null 弃之/null 弃之可惜/null 弃保潜逃/null 弃儿/null 弃养/null 弃农经商/null 弃取/null 弃如弁髦/null 弃妇/null 弃婴/null 弃学/null 弃守/null 弃官/null 弃市/null 弃恶从善/null 弃文就武/null 弃旧/null 弃旧图新/null 弃旧怜新/null 弃暗投明/null 弃本逐末/null 弃权/null 弃权票/null 弃核/null 弃樱/null 弃武修文/null 弃物/null 弃瑕取用/null 弃瑕录用/null 弃用/null 弃甲/null 弃甲曳兵/null 弃短取长/null 弃约背盟/null 弃绝/null 弃置/null 弃职/null 弃船/null 弃若敝屣/null 弃过图新/null 弃邪从正/null 弃邪归正/null 弄上/null 弄不好/null 弄不清/null 弄丢/null 弄乱/null 弄人/null 弄伤/null 弄倒/null 弄假/null 弄假成真/null 弄僵/null 弄兵/null 弄兵潢池/null 弄凌乱/null 弄出/null 弄到/null 弄到手/null 弄口鸣舌/null 弄喧捣鬼/null 弄嘴弄舌/null 弄圆/null 弄坏/null 弄坏了/null 弄坏事/null 弄垮/null 弄堂/null 弄好/null 弄姿/null 弄宽/null 弄小/null 弄巧/null 弄巧成拙/null 弄干/null 弄干净/null 弄平/null 弄开/null 弄弄/null 弄弯/null 弄弯曲/null 弄得/null 弄得清/null 弄性尚气/null 弄懂/null 弄懂弄通/null 弄成/null 弄成一团/null 弄整洁/null 弄斜/null 弄斧班门/null 弄断/null 弄明白/null 弄昏/null 弄暗/null 弄月嘲风/null 弄月抟风/null 弄权/null 弄枪/null 弄歪/null 弄死/null 弄水/null 弄污/null 弄法/null 弄法舞文/null 弄淡/null 弄混/null 弄清/null 弄清楚/null 弄湿/null 弄潮/null 弄热/null 弄熄/null 弄玉偷香/null 弄璋/null 弄璋之喜/null 弄璋之庆/null 弄瓦/null 弄瓦之喜/null 弄甜/null 弄痛/null 弄白/null 弄皱/null 弄盏传杯/null 弄直/null 弄着/null 弄短/null 弄破/null 弄确实/null 弄碎/null 弄穷/null 弄笔/null 弄粉调朱/null 弄粗/null 弄糊涂/null 弄糟/null 弄细/null 弄绉/null 弄翻/null 弄脏/null 弄脏了/null 弄臣/null 弄苦/null 弄虚/null 弄虚作假/null 弄蛇/null 弄蛇者/null 弄走/null 弄通/null 弄醉/null 弄醒/null 弄钝/null 弄钱/null 弄错/null 弄饭/null 弄鬼/null 弄鬼妆幺/null 弄鬼掉猴/null 弄黑/null 弊习/null 弊多利少/null 弊害/null 弊恶/null 弊政/null 弊病/null 弊端/null 弊绝风清/null 弊衣疏食/null 弊衣箪食/null 弊车羸马/null 弊车驽马/null 弋不射宿/null 弋横起义/null 弋江/null 弋江区/null 弋者何慕/null 弋者何篡/null 弋阳/null 弋阳腔/null 式子/null 式微/null 式样/null 弑君/null 弑母/null 弑父/null 弑父母/null 弓匠/null 弓子/null 弓射手/null 弓弦/null 弓弦儿/null 弓弩/null 弓弩手/null 弓形/null 弓状/null 弓箭/null 弓箭手/null 弓箭步/null 弓背/null 弓腰/null 弓起/null 弓身/null 弓长岭/null 弓长岭区/null 引为/null 引产/null 引人/null 引人入胜/null 引人注意/null 引人注目/null 引人瞩目/null 引介/null 引以/null 引以为傲/null 引以为憾/null 引以为戒/null 引以为耻/null 引以为荣/null 引伸/null 引体/null 引体向上/null 引使/null 引信/null 引信系统/null 引儿/null 引入/null 引入口/null 引入迷途/null 引决/null 引出/null 引别/null 引力/null 引力场/null 引力波/null 引动/null 引发/null 引叙/null 引号/null 引向/null 引向器/null 引吭高歌/null 引咎/null 引咎自责/null 引咎责躬/null 引咎辞职/null 引商刻羽/null 引喻/null 引嫌/null 引子/null 引导/null 引导员/null 引导扇区/null 引座员/null 引开/null 引征/null 引得/null 引得出/null 引据/null 引接/null 引擎/null 引文/null 引来/null 引柴/null 引桥/null 引水/null 引水上山/null 引水入墙/null 引水员/null 引水工程/null 引河/null 引流/null 引渡/null 引港/null 引火/null 引火柴/null 引火烧身/null 引火物/null 引火线/null 引炸/null 引燃/null 引爆/null 引爆器/null 引爆点/null 引爆装置/null 引物/null 引狗入寨/null 引狼入室/null 引玉/null 引玉之砖/null 引理/null 引用/null 引用句/null 引用文/null 引申/null 引申义/null 引申语/null 引着/null 引示/null 引种/null 引类呼朋/null 引线/null 引线穿针/null 引经据典/null 引经据古/null 引绳批根/null 引绳排根/null 引而不发/null 引自/null 引致/null 引航/null 引航权/null 引荐/null 引虎自卫/null 引蛇出洞/null 引行/null 引见/null 引言/null 引论/null 引证/null 引证者/null 引语/null 引诱/null 引诱物/null 引起/null 引起争议/null 引起轰动/null 引足救经/null 引路/null 引车/null 引进/null 引进人才/null 引进外资/null 引进技术/null 引进设备/null 引述/null 引退/null 引逗/null 引道/null 引酵/null 引锥刺骨/null 引领/null 引领企踵/null 引颈/null 引颈受戮/null 引颈就戮/null 引风吹火/null 引鬼上门/null 弗兰克/null 弗兰兹/null 弗兰西斯/null 弗兰西斯・培根/null 弗吉尼亚/null 弗吉尼亚州/null 弗塞奇/null 弗如/null 弗拉基米尔/null 弗拉芒/null 弗朗索瓦・霍兰德/null 弗格森/null 弗洛伊德/null 弗洛伦蒂诺・佩雷斯/null 弗洛勒斯岛/null 弗洛姆/null 弗洛里斯岛/null 弗爱/null 弗罗茨瓦夫/null 弗罗里达/null 弗罗里达州/null 弗莱威厄斯/null 弗莱福兰/null 弗落伊德/null 弗迪南/null 弗里得里希/null 弗里德里希/null 弗里德里希・席勒/null 弗里敦/null 弗里斯兰/null 弗里曼/null 弗雷/null 弗雷德里克/null 弗雷德里克顿/null 弘图/null 弘愿/null 弘扬/null 弘治/null 弘法/null 弘论/null 弘道/null 弛张/null 弛张性/null 弛张热/null 弛懈/null 弛禁/null 弛缓/null 弟亲/null 弟兄/null 弟兄们/null 弟妇/null 弟妹/null 弟媳/null 弟媳妇/null 弟子/null 弟子规/null 弟弟/null 张臂/null 张三/null 张三李四/null 张丹/null 张之洞/null 张二鸿/null 张仪/null 张伯伦/null 张作霖/null 张僧繇/null 张公吃酒李公醉/null 张冠李戴/null 张力/null 张力计/null 张北/null 张华/null 张口/null 张口结舌/null 张嘴/null 张国焘/null 张国荣/null 张大/null 张大千/null 张天翼/null 张太雷/null 张学友/null 张学良/null 张宁/null 张宝/null 张家口/null 张家口地区/null 张家港/null 张家界/null 张家长/null 张居正/null 张岱/null 张帖/null 张店/null 张店区/null 张廷玉/null 张开/null 张弛/null 张张/null 张心/null 张志新/null 张怡/null 张怡宁/null 张惠妹/null 张戎/null 张扬/null 张择端/null 张挂/null 张掖/null 张掖地区/null 张揖/null 张敞/null 张敞画眉/null 张数/null 张斌/null 张旭/null 张易之/null 张春帆/null 张春桥/null 张曼玉/null 张望/null 张本/null 张柏芝/null 张楚/null 张榜/null 张榜公布/null 张治中/null 张湾/null 张湾区/null 张溥/null 张灯挂彩/null 张灯结彩/null 张爱玲/null 张牙舞爪/null 张牙舞瓜/null 张狂/null 张献忠/null 张王李赵/null 张皇/null 张皇失措/null 张皇失错/null 张目/null 张眉努眼/null 张秋/null 张籍/null 张纯如/null 张网/null 张罗/null 张自忠/null 张艺谋/null 张若虚/null 张衡/null 张角/null 张诚泽/null 张贴/null 张量/null 张闻天/null 张震/null 张静初/null 张韶涵/null 张飞/null 张飞打岳飞/null 张骞/null 弥久/null 弥勒/null 弥勒佛/null 弥勒菩萨/null 弥合/null 弥天/null 弥天大罪/null 弥天大谎/null 弥天盖地/null 弥封/null 弥山遍野/null 弥彰/null 弥撒/null 弥散/null 弥月/null 弥望/null 弥渡/null 弥满/null 弥漫/null 弥漫星云/null 弥甥/null 弥留/null 弥缝/null 弥蒙/null 弥补/null 弥赛亚/null 弥足珍贵/null 弥迦书/null 弥陀/null 弥陀乡/null 弦乐/null 弦乐器/null 弦乐队/null 弦切角/null 弦器/null 弦声/null 弦外之响/null 弦外之意/null 弦外之音/null 弦子/null 弦子舞/null 弦数/null 弦月/null 弦月窗/null 弦歌/null 弦比/null 弦理论/null 弦琴/null 弦线/null 弦而鼓之/null 弦规/null 弦论/null 弦诵不缀/null 弦诵不辍/null 弦贝斯/null 弦音/null 弦音器/null 弦鸣乐器/null 弧光/null 弧光灯/null 弧度/null 弧形/null 弧线/null 弧线长/null 弧菌/null 弧长/null 弧长参数/null 弧面/null 弩兵/null 弩弓/null 弩手/null 弩炮/null 弩钝/null 弪度/null 弭兵/null 弭患/null 弭撒/null 弭谤/null 弯下/null 弯了/null 弯作/null 弯儿/null 弯刀/null 弯回/null 弯头/null 弯如弓/null 弯子/null 弯度/null 弯弓/null 弯弯/null 弯弯曲曲/null 弯成/null 弯扭/null 弯折/null 弯曲/null 弯曲处/null 弯曲度/null 弯曲形变/null 弯曲空间/null 弯月/null 弯月形透镜/null 弯液面/null 弯着/null 弯矩/null 弯管面/null 弯腰/null 弯腰驼背/null 弯腿/null 弯膝礼/null 弯角/null 弯路/null 弯身/null 弯进/null 弯道/null 弱不好弄/null 弱不禁风/null 弱不胜衣/null 弱作用/null 弱作用力/null 弱侧/null 弱冠/null 弱势/null 弱势群体/null 弱化/null 弱受/null 弱国/null 弱型/null 弱小/null 弱性/null 弱拍/null 弱敌/null 弱智/null 弱智儿童/null 弱点/null 弱电/null 弱电统一/null 弱相互作用/null 弱碱/null 弱碱性/null 弱者/null 弱肉强食/null 弱脉/null 弱视/null 弱败/null 弱酸/null 弱队/null 弱音/null 弱音踏板/null 弱项/null 弹丝品竹/null 弹丸/null 弹丸之地/null 弹体/null 弹冠相庆/null 弹出/null 弹出式/null 弹力/null 弹力呢/null 弹力素/null 弹力袜/null 弹劾/null 弹匣/null 弹压/null 弹去/null 弹吉他/null 弹唱/null 弹回/null 弹坑/null 弹壳/null 弹头/null 弹夹/null 弹奏/null 弹子/null 弹子锁/null 弹孔/null 弹射/null 弹射出/null 弹射器/null 弹射座椅/null 弹射座舱/null 弹尽援绝/null 弹尽粮绝/null 弹开/null 弹弓/null 弹性/null 弹性体/null 弹性力学/null 弹性化/null 弹性形变/null 弹性模量/null 弹拨/null 弹拨乐/null 弹拨乐器/null 弹指/null 弹指一挥间/null 弹指之间/null 弹指如飞/null 弹料/null 弹斤估两/null 弹斥/null 弹无虚发/null 弹涂鱼/null 弹片/null 弹牙/null 弹珠/null 弹球/null 弹球盘/null 弹琴/null 弹痕/null 弹痕累累/null 弹盒/null 弹着点/null 弹空说嘴/null 弹竖琴/null 弹筒/null 弹簧/null 弹簧刀/null 弹簧秤/null 弹簧钢/null 弹簧锁/null 弹簧门/null 弹纠/null 弹花/null 弹药/null 弹药学/null 弹药库/null 弹药消耗/null 弹药筒/null 弹药箱/null 弹药补给站/null 弹词/null 弹起/null 弹跳/null 弹跳板/null 弹道/null 弹道学/null 弹道导弹/null 弹道式导弹/null 弹量/null 弹铗无鱼/null 弹雨/null 强不知以为知/null 强中更有强中手/null 强中自有强中手/null 强买/null 强买强卖/null 强人/null 强人所难/null 强令/null 强似/null 强作/null 强作用/null 强作用力/null 强作笑颜/null 强使/null 强借/null 强健/null 强光/null 强兵/null 强击机/null 强制/null 强制性/null 强制执行法/null 强制措施/null 强力/null 强力胶/null 强加/null 强加于/null 强加于人/null 强劲/null 强势/null 强化/null 强化物/null 强化训练/null 强占/null 强压/null 强压怒火/null 强取/null 强取豪夺/null 强台风/null 强告化/null 强嘴/null 强固/null 强国/null 强国之路/null 强国富民/null 强壮/null 强壮人/null 强壮剂/null 强大/null 强夺/null 强奸/null 强奸民意/null 强奸犯/null 强奸罪/null 强奸者/null 强子/null 强射/null 强将之下无弱兵/null 强将手下无弱兵/null 强干/null 强干弱枝/null 强度/null 强开/null 强弩之末/null 强弱/null 强征/null 强心剂/null 强心针/null 强忍/null 强忍悲痛/null 强悍/null 强悍人/null 强手/null 强手如云/null 强手如林/null 强打/null 强打手/null 强扯/null 强抢/null 强拉/null 强拉硬扯/null 强拍/null 强推/null 强攻/null 强敌/null 强暴/null 强曳/null 强有力/null 强有力地/null 强本弱知/null 强本节用/null 强权/null 强权政治/null 强档/null 强梁/null 强横/null 强死强活/null 强求/null 强派/null 强流/null 强渡/null 强渡江河/null 强烈/null 强烈反对/null 强烈愿望/null 强烈抗议/null 强生/null 强生公司/null 强电/null 强留/null 强的/null 强盗/null 强盗罪/null 强盛/null 强直/null 强相互作用/null 强硬/null 强硬态度/null 强硬派/null 强硬立场/null 强碱/null 强磁/null 强磁性/null 强者/null 强聒不舍/null 强行/null 强行军/null 强行摊派/null 强袭/null 强要/null 强记/null 强记博闻/null 强记洽闻/null 强词夺理/null 强调/null 强身/null 强身健体/null 强辐射区/null 强辩/null 强过/null 强迫/null 强迫人/null 强迫劳动/null 强迫性/null 强迫性储物症/null 强迫性性行为/null 强迫症/null 强迫观念/null 强逼/null 强酸/null 强队/null 强震/null 强韧/null 强音/null 强音踏板/null 强音部/null 强项/null 强颜/null 强风/null 强食/null 强马饮水难/null 强龙不压地头蛇/null 彀中/null 归一/null 归为/null 归于/null 归仁/null 归仁乡/null 归位/null 归依/null 归侨/null 归入/null 归全反真/null 归公/null 归到/null 归功/null 归功于/null 归化/null 归去/null 归去来兮/null 归口/null 归向/null 归咎/null 归咎于/null 归因/null 归因于/null 归国/null 归国者/null 归垫/null 归天/null 归奇顾怪/null 归宁/null 归家/null 归宿/null 归属/null 归属感/null 归属权/null 归巢/null 归己/null 归并/null 归并排序/null 归心/null 归心似箭/null 归心如箭/null 归心者/null 归总/null 归拢/null 归教育/null 归期/null 归来/null 归根/null 归根到底/null 归根结底/null 归根结蒂/null 归案/null 归档/null 归正反当/null 归正反本/null 归正首丘/null 归田/null 归由/null 归省/null 归真/null 归真反璞/null 归真返璞/null 归着/null 归程/null 归类/null 归类于/null 归纳/null 归纳推理/null 归纳法/null 归纳逻辑/null 归结/null 归结于/null 归绥/null 归罪/null 归罪于/null 归置/null 归老菟裘/null 归航/null 归西/null 归谁/null 归谬法/null 归赵/null 归路/null 归返/null 归还/null 归途/null 归邪反正/null 归邪转曜/null 归队/null 归附/null 归降/null 归除/null 归隐/null 归集/null 归零地/null 归顺/null 归马放牛/null 归齐/null 当上/null 当下/null 当且仅当/null 当世/null 当世之冠/null 当世冠/null 当世才度/null 当世无双/null 当个/null 当中/null 当中间儿/null 当之/null 当之无愧/null 当之有愧/null 当事/null 当事人/null 当事国/null 当事者/null 当事者迷/null 当仁不让/null 当今/null 当今世界/null 当今无辈/null 当今社会/null 当代/null 当代史/null 当代新儒家/null 当令/null 当众/null 当众出丑/null 当众受辱/null 当作/null 当值/null 当做/null 当儿/null 当先/null 当兵/null 当初/null 当前/null 当前任务/null 当前工作/null 当前状况/null 当务/null 当务之急/null 当十/null 当即/null 当口/null 当口儿/null 当哭/null 当啷/null 当回事/null 当回事儿/null 当国/null 当地/null 当地人/null 当地居民/null 当地时间/null 当场/null 当场出丑/null 当场现丑/null 当声/null 当夜/null 当天/null 当天事当天毕/null 当央/null 当头/null 当头一棒/null 当头棒喝/null 当头炮/null 当夺/null 当好/null 当子/null 当季/null 当学徒/null 当官/null 当家/null 当家人/null 当家作主/null 当家子/null 当家理财/null 当家的/null 当局/null 当局者/null 当局者迷/null 当差/null 当年/null 当归/null 当当/null 当当车/null 当心/null 当成/null 当掉/null 当政/null 当政者/null 当断不断/null 当断则断/null 当断即断/null 当日/null 当时/null 当时的/null 当晚/null 当月/null 当机/null 当机立断/null 当权/null 当权派/null 当权者/null 当板/null 当查/null 当涂/null 当演员/null 当然/null 当然可以/null 当牛作马/null 当班/null 当真/null 当着/null 当票/null 当空/null 当紧/null 当红/null 当耳边风/null 当腰/null 当获/null 当著/null 当行出色/null 当街/null 当证明/null 当起了/null 当轴/null 当轴处中/null 当过/null 当选/null 当道/null 当量/null 当量剂量/null 当量浓度/null 当铺/null 当门对户/null 当间儿/null 当阳/null 当院儿/null 当雄/null 当面/null 当面鼓对面锣/null 当风秉烛/null 当驾/null 录下/null 录事/null 录作/null 录供/null 录像/null 录像带/null 录像机/null 录像片/null 录像盘/null 录像碟/null 录入/null 录共/null 录制/null 录取/null 录取线/null 录取通知书/null 录好/null 录影/null 录影唱片/null 录影带/null 录影机/null 录影碟/null 录打/null 录放/null 录用/null 录相/null 录相机/null 录象/null 录象带/null 录象机/null 录音/null 录音员/null 录音带/null 录音机/null 录音磁带/null 彖辞/null 彗星/null 彗汜画涂/null 彝伦/null 彝剧/null 彝器/null 彝宪/null 彝良/null 彝训/null 彝陵之战/null 形上/null 形丑心善/null 形义/null 形于色/null 形似/null 形体/null 形体化/null 形像/null 形像化/null 形制/null 形势/null 形势严峻/null 形势发展/null 形势教育/null 形势逼人/null 形单/null 形单影只/null 形变/null 形只影单/null 形同/null 形同虚设/null 形同陌路/null 形图/null 形墙/null 形声/null 形声字/null 形好/null 形如/null 形容/null 形容词/null 形容辞/null 形式/null 形式上/null 形式主义/null 形式化/null 形式多样/null 形式逻辑/null 形形色色/null 形影/null 形影不离/null 形影相依/null 形影相吊/null 形影相追/null 形影相随/null 形影相顾/null 形态/null 形态上/null 形态发生素/null 形态学/null 形态美/null 形态论/null 形意拳/null 形成/null 形成层/null 形成核/null 形旁/null 形核/null 形格势禁/null 形物/null 形状/null 形状好/null 形的/null 形相/null 形石/null 形码/null 形神/null 形秽/null 形而/null 形而上学/null 形而上学唯物主义/null 形胜/null 形虫/null 形象/null 形象化/null 形象大使/null 形象思维/null 形象清新/null 形貌/null 形质/null 形迹/null 形迹可疑/null 形销骨立/null 形音/null 形骸/null 彤云/null 彤彤/null 彤管贻/null 彩云/null 彩云易散/null 彩信/null 彩像/null 彩凤随鸦/null 彩券/null 彩印/null 彩卷/null 彩号/null 彩喷/null 彩塑/null 彩头/null 彩层/null 彩巾/null 彩带/null 彩弹/null 彩扩/null 彩排/null 彩旗/null 彩旦/null 彩显/null 彩条/null 彩棚/null 彩灯/null 彩照/null 彩珠/null 彩球/null 彩瓷/null 彩电/null 彩电视/null 彩画/null 彩礼/null 彩票/null 彩笔/null 彩管/null 彩纸/null 彩练/null 彩绘/null 彩绸/null 彩胜/null 彩色/null 彩色化/null 彩色影片/null 彩色照片/null 彩色片/null 彩色片儿/null 彩色电影/null 彩色电视/null 彩色电视机/null 彩色画/null 彩色监视器/null 彩色胶卷/null 彩虹/null 彩蚌/null 彩蛋/null 彩衣/null 彩袋/null 彩调/null 彩超/null 彩车/null 彩轿/null 彩釉/null 彩金/null 彩铃/null 彩陶/null 彩陶文化/null 彩霞/null 彪个子/null 彪休/null 彪壮/null 彪子/null 彪形/null 彪形大汉/null 彪悍/null 彪柄/null 彪炳/null 彪炳千古/null 彪焕/null 彪蒙/null 彪马/null 彬彬/null 彬彬君子/null 彬彬文质/null 彬彬有礼/null 彬蔚/null 彬马那/null 彭亨/null 彭佳屿/null 彭养鸥/null 彭勃/null 彭博通讯社/null 彭县/null 彭定康/null 彭山/null 彭州/null 彭德怀/null 彭水县/null 彭泽/null 彭湖/null 彭湖岛/null 彭真/null 彭祖/null 彭阳/null 彰化/null 彰善瘅恶/null 彰彰/null 彰往察来/null 彰往考来/null 彰明/null 彰明较著/null 彰显/null 彰武/null 影业/null 影人/null 影像/null 影像会议/null 影像处理/null 影像档/null 影儿/null 影剂/null 影剧/null 影剧院/null 影印/null 影印件/null 影印本/null 影印机/null 影响/null 影响力/null 影响很大/null 影圈/null 影坛/null 影城/null 影壁/null 影子/null 影子内阁/null 影射/null 影射小说/null 影展/null 影影绰绰/null 影戏/null 影星/null 影格儿/null 影液/null 影片/null 影片儿/null 影碟/null 影碟机/null 影线/null 影视/null 影视圈/null 影评/null 影调/null 影调剧/null 影象/null 影踪/null 影迷/null 影院/null 影集/null 影音/null 彳亍/null 彷似/null 彷佛/null 彷徉/null 彷徨/null 役使/null 役使动物/null 役制/null 役卒/null 役法/null 役畜/null 役长/null 役龄/null 彻上彻下/null 彻夜/null 彻夜不眠/null 彻夜未眠/null 彻头彻尾/null 彻尾/null 彻底/null 彻底失败/null 彻底改变/null 彻底清除/null 彻底澄清/null 彻底粉碎/null 彻底解决/null 彻悟/null 彻查/null 彻西/null 彻首彻尾/null 彻骨/null 彼一时此一时/null 彼人/null 彼伏/null 彼众我寡/null 彼侧/null 彼倡此和/null 彼唱此和/null 彼处/null 彼尔姆/null 彼岸/null 彼岸性/null 彼弃我取/null 彼得/null 彼得前书/null 彼得后书/null 彼得堡/null 彼得格勒/null 彼得罗维奇/null 彼得里皿/null 彼拉多/null 彼时/null 彼此/null 彼此之间/null 彼此协作/null 彼此彼此/null 彼特/null 彼竭无盈/null 彼等/null 彼辈/null 往上/null 往上爬/null 往上调/null 往下/null 往下看/null 往不/null 往世/null 往东/null 往东南/null 往之/null 往事/null 往事如风/null 往例/null 往其所以/null 往内/null 往前/null 往北/null 往南/null 往古/null 往右/null 往后/null 往后面/null 往回/null 往复/null 往复运动/null 往外/null 往外看/null 往家/null 往届/null 往岁/null 往左/null 往常/null 往年/null 往往/null 往往有之/null 往后/null 往情/null 往日/null 往时/null 往昔/null 往来/null 往来帐户/null 往楼上/null 往泥里踩/null 往生/null 往直/null 往程/null 往脸上抹黑/null 往西/null 往西南/null 往访/null 往返/null 往返运输/null 往还/null 往迹/null 往那/null 往那里/null 往里/null 往里走/null 征人/null 征伐/null 征传/null 征信社/null 征候/null 征候学/null 征借/null 征兆/null 征免/null 征兵/null 征兵制/null 征到/null 征剿/null 征募/null 征友/null 征发/null 征召/null 征召令/null 征召员/null 征名责实/null 征地/null 征士/null 征夫/null 征婚/null 征实/null 征尘/null 征帆/null 征引/null 征彸/null 征得/null 征戍/null 征战/null 征收/null 征敛/null 征敛无度/null 征文/null 征旆/null 征服/null 征服者/null 征期/null 征求/null 征求意见/null 征派/null 征状/null 征用/null 征程/null 征税/null 征稿/null 征粮/null 征纳/null 征缴/null 征聘/null 征自/null 征衣/null 征衫/null 征解/null 征订/null 征讨/null 征询/null 征调/null 征象/null 征购/null 征购粮/null 征足/null 征逐/null 征途/null 征集/null 征风召雨/null 征马/null 征驾/null 径向/null 径庭/null 径情直遂/null 径流/null 径直/null 径自/null 径赛/null 径路/null 径迹/null 径道/null 径间/null 待业/null 待业保险/null 待业青年/null 待之如友/null 待产/null 待人/null 待人刻薄/null 待人处事/null 待人接物/null 待价而沽/null 待价藏珠/null 待优/null 待会/null 待会儿/null 待修/null 待冲/null 待决/null 待到/null 待制/null 待办/null 待印/null 待发/null 待发箱/null 待员/null 待命/null 待命状态/null 待哺/null 待售/null 待在/null 待复/null 待字/null 待定/null 待审/null 待客/null 待宵草/null 待工/null 待己/null 待征/null 待扣/null 待批/null 待承/null 待挑/null 待摊/null 待收/null 待放/null 待时守分/null 待时而举/null 待时而动/null 待月西厢/null 待机/null 待机而动/null 待查/null 待毙/null 待物/null 待用/null 待续/null 待缴/null 待考/null 待聘/null 待补/null 待要/null 待解/null 待证/null 待说/null 待退/null 待送/null 待遇/null 待遇好/null 待销/null 待雇/null 待领/null 徇公忘己/null 徇公灭私/null 徇国亡家/null 徇国忘身/null 徇情/null 徇情枉法/null 徇私/null 徇私作弊/null 徇私废公/null 徇私枉法/null 徇私舞弊/null 很上/null 很下/null 很严/null 很为/null 很久/null 很会/null 很低/null 很值得/null 很像/null 很内向/null 很冷/null 很凉/null 很卫生/null 很厚/null 很受/null 很可/null 很可怕/null 很可能/null 很响/null 很坏/null 很复杂/null 很外向/null 很多/null 很多人/null 很多时/null 很大/null 很好/null 很容易/null 很对/null 很小/null 很少/null 很少数/null 很差/null 很帅/null 很广/null 很强/null 很忙/null 很快/null 很想/null 很感/null 很感兴趣/null 很慢/null 很懊悔/null 很挑剔/null 很早/null 很是/null 很晚/null 很暗/null 很有/null 很有可能/null 很有希望/null 很有必要/null 很有成效/null 很有见地/null 很横/null 很沉/null 很浅/null 很深/null 很滑/null 很热/null 很甜/null 很痛快/null 很短/null 很破/null 很穷/null 很窄/null 很糟/null 很紧/null 很累/null 很美/null 很老/null 很能/null 很脆/null 很脏/null 很苦/null 很薄/null 很规矩/null 很轻/null 很近/null 很远/null 很迟/null 很重/null 很重要/null 很野/null 很长/null 很闷/null 很难/null 很难说/null 很静/null 很非常/null 很顺从/null 很饱/null 很香/null 很高/null 很高兴/null 徉言/null 律令/null 律动/null 律吕/null 律己/null 律师/null 律师事务所/null 律师制度/null 律性/null 律政司/null 律条/null 律法/null 律的/null 律论/null 律诗/null 后加/null 后进/null 徐世昌/null 徐俊/null 徐光启/null 徐克/null 徐匡迪/null 徐图/null 徐娘半老/null 徐家汇/null 徐州/null 徐州地区/null 徐徐/null 徐志摩/null 徐悲鸿/null 徐星/null 徐步/null 徐水/null 徐汇/null 徐渭/null 徐熙媛/null 徐祯卿/null 徐福/null 徐继畲/null 徐缓/null 徐行/null 徐铉/null 徐闻/null 徐风/null 徒书/null 徒乱人意/null 徒传/null 徒作/null 徒具/null 徒刑/null 徒劳/null 徒劳无功/null 徒劳无益/null 徒呼负负/null 徒增/null 徒子徒孙/null 徒孙/null 徒宅忘妻/null 徒工/null 徒废唇舌/null 徒弟/null 徒录/null 徒手/null 徒手搏击/null 徒手格斗/null 徒手画/null 徒手空拳/null 徒托空言/null 徒拥虚名/null 徒有/null 徒有其名/null 徒有虚名/null 徒步/null 徒步旅行/null 徒步浮桥/null 徒然/null 徒生/null 徒耗/null 徒自惊扰/null 徒裼/null 徒费唇舌/null 徒费无益/null 徒长/null 徒陈空文/null 得一忘十/null 得上/null 得不/null 得不偿失/null 得不到/null 得不补失/null 得不赏失/null 得不酬失/null 得中/null 得主/null 得人儿/null 得人心/null 得人死力/null 得人者昌/null 得人者昌失人者亡/null 得体/null 得克萨斯/null 得克萨斯州/null 得其三昧/null 得其所哉/null 得准/null 得出/null 得分/null 得利/null 得到/null 得力/null 得劲/null 得势/null 得去/null 得及/null 得名/null 得啦/null 得大于失/null 得天独厚/null 得失/null 得失在人/null 得失成败/null 得失相半/null 得失荣枯/null 得奖/null 得奖人/null 得奖者/null 得宜/null 得宠/null 得寸入尺/null 得寸思尺/null 得寸进尺/null 得对/null 得尔塔/null 得尺得寸/null 得当/null 得心应手/null 得志/null 得意/null 得意之极/null 得意忘形/null 得意忘言/null 得意忘象/null 得意扬扬/null 得意洋洋/null 得意门生/null 得意非凡/null 得手/null 得手应心/得心应手 得心应手/得手应心 得救/null 得文/null 得新忘旧/null 得时/null 得未尝有/null 得未曾有/null 得来/null 得来全不费工夫/null 得步进步/null 得济/null 得理让人/null 得用/null 得病/null 得益/null 得着/null 得知/null 得票/null 得票率/null 得罪/null 得罪人/null 得而复失/null 得聋望蜀/null 得胜/null 得胜回朝/null 得胜头回/null 得说/null 得起/null 得过且过/null 得逞/null 得道/null 得道多助/null 得陇望蜀/null 得饶人处且饶人/null 得鱼忘筌/null 徘徊/null 徙倚/null 徙居/null 徙步/null 徜徉/null 御下蔽上/null 御书/null 御侮/null 御冬/null 御制/null 御前/null 御医/null 御史/null 御史大夫/null 御地/null 御夫座/null 御宅族/null 御寒/null 御座/null 御弟/null 御性/null 御戎/null 御手/null 御敌/null 御旨/null 御林/null 御林军/null 御沟流叶/null 御沟红叶/null 御用/null 御用大律师/null 御膳/null 御膳房/null 御花园/null 御诏/null 御赐/null 御轿/null 御酒/null 御风/null 御驾/null 御驾亲征/null 徨徨/null 循例/null 循化/null 循化县/null 循名校实/null 循名督实/null 循名考实/null 循名课实/null 循名责实/null 循声附会/null 循常席故/null 循序/null 循序渐进/null 循序见进/null 循循/null 循循善诱/null 循循诱人/null 循次而进/null 循沿/null 循环/null 循环使用/null 循环制/null 循环反复/null 循环器/null 循环小数/null 循环往复/null 循环性/null 循环系统/null 循环节/null 循环论/null 循环论证/null 循环赛/null 循球赛/null 循着/null 循规矩蹈/null 循规蹈矩/null 循路/null 徭役/null 徭役地租/null 微不足录/null 微不足道/null 微丝/null 微丝血管/null 微中子/null 微乎其微/null 微亨利/null 微伏/null 微光/null 微光夜视仪/null 微光技术/null 微光电视/null 微光瞄准具/null 微光观察仪/null 微克/null 微冷/null 微减/null 微凹/null 微分/null 微分几何/null 微分几何学/null 微分学/null 微分方程/null 微分电路/null 微创手术/null 微利/null 微动/null 微动脉/null 微化石/null 微升/null 微博/null 微博客/null 微压/null 微压计/null 微商/null 微囊/null 微型/null 微型化/null 微型封装块/null 微型机/null 微型电脑/null 微型计算机/null 微处/null 微处理器/null 微处理机/null 微妙/null 微子/null 微孔/null 微孔膜/null 微安/null 微安培/null 微宏/null 微导管/null 微小/null 微小病毒科/null 微少/null 微尘/null 微尘学/null 微居里/null 微山/null 微差/null 微带/null 微开/null 微弱/null 微径/null 微循环/null 微微/null 微微米/null 微怒/null 微扰/null 微扰展开/null 微扰论/null 微控/null 微故细过/null 微文深诋/null 微旨/null 微明/null 微星/null 微晶/null 微晶片/null 微晶质/null 微暗/null 微服/null 微服私行/null 微服私访/null 微末/null 微机/null 微机化/null 微气/null 微气象/null 微法拉/null 微泡胶片/null 微波/null 微波天线/null 微波技术/null 微波炉/null 微波电子管/null 微温/null 微溶/null 微漠/null 微火/null 微热/null 微现/null 微生/null 微生物/null 微生物学/null 微生物学家/null 微电子/null 微电子学/null 微电子技术/null 微电机/null 微电脑/null 微白/null 微秒/null 微积/null 微积分/null 微积分基本定理/null 微积分学/null 微程序/null 微笑/null 微笑服务/null 微管/null 微管蛋白/null 微米/null 微粉化/null 微粒/null 微粒体/null 微粒子/null 微红/null 微细/null 微细丝/null 微细加工/null 微结构/null 微缩/null 微缩卡/null 微缩点/null 微缩胶卷/null 微聚焦/null 微胶囊技术/null 微臣/null 微茫/null 微菌/null 微薄/null 微血管/null 微行/null 微观/null 微观世界/null 微观粒子/null 微观经济/null 微言/null 微言大义/null 微言大指/null 微言精义/null 微计/null 微词/null 微调/null 微贱/null 微软件/null 微软公司/null 微辞/null 微辣/null 微进/null 微进化/null 微速摄影/null 微醉/null 微醺/null 微量/null 微量元素/null 微量白蛋白/null 微雕/null 微雨/null 微震/null 微震计/null 微静脉/null 微音/null 微音器/null 微风/null 微黄/null 微黄色/null 微黑/null 徯径/null 徵兵/null 徵召/null 徵名责实/null 徵收/null 德乌帕/null 德人/null 德仁/null 德令哈/null 德以报怨/null 德伦特/null 德保/null 德克萨斯/null 德克萨斯州/null 德兴/null 德军/null 德勒兹/null 德勒巴克/null 德化/null 德厚流光/null 德古拉/null 德国一九一八年革命/null 德国一八四八年革命/null 德国之声/null 德国人/null 德国农民战争/null 德国化/null 德国古典哲学/null 德国学术交流总署/null 德国战车/null 德国汉莎航空公司/null 德国统一社会党/null 德国酸菜/null 德国马克/null 德国麻疹/null 德城/null 德城区/null 德奥同盟/null 德安/null 德宏/null 德宏傣族景颇族自治州/null 德宏州/null 德容兼备/null 德尊望重/null 德川/null 德州/null 德州仪器/null 德州地区/null 德州战役/null 德布勒森/null 德干/null 德庆/null 德式/null 德彪西/null 德律风/null 德性/null 德惠/null 德惠地区/null 德意志学术交流中心/null 德意志民主共和国/null 德意志联邦共和国/null 德意志银行/null 德才/null 德才兼备/null 德拉克罗瓦/null 德拉门/null 德政/null 德政碑/null 德文/null 德新社/null 德昂/null 德昌/null 德智体/null 德智体美/null 德望/null 德格/null 德江/null 德沃夏克/null 德治/null 德法年鉴/null 德派/null 德浅行薄/null 德清/null 德班/null 德累斯顿/null 德维尔潘/null 德育/null 德胜门/null 德航/null 德薄才疏/null 德薄能鲜/null 德行/null 德言功貌/null 德言容功/null 德语/null 德贵丽类/null 德都/null 德都县/null 德里/null 德里达/null 德钦/null 德阳/null 德隆望尊/null 德隆望重/null 德雷尔/null 德雷斯顿/null 德雷福斯/null 德雷福斯案件/null 德音莫违/null 德高望重/null 德黑兰/null 德黑兰会议/null 徼幸/null 徽剧/null 徽号/null 徽墨/null 徽州/null 徽州区/null 徽帜/null 徽标/null 徽牌/null 徽章/null 徽菜/null 徽记/null 徽语/null 徽调/null 心上/null 心上人/null 心下/null 心不/null 心不在焉/null 心不应口/null 心中/null 心中无数/null 心中有数/null 心中有鬼/null 心乡往之/null 心书/null 心乱/null 心乱如麻/null 心事/null 心些/null 心仪/null 心传/null 心似/null 心低/null 心余力绌/null 心儿/null 心内/null 心内膜/null 心凉/null 心切/null 心到/null 心力/null 心力交瘁/null 心力衰竭/null 心动/null 心动图/null 心动神驰/null 心劲/null 心劳意攘/null 心劳意穰/null 心劳日拙/null 心包/null 心包炎/null 心口/null 心口不一/null 心口如一/null 心同/null 心向/null 心和气平/null 心喜/null 心回意转/null 心土/null 心在魏阙/null 心地/null 心地善良/null 心坎/null 心坚石穿/null 心境/null 心声/null 心外膜/null 心头/null 心头病/null 心头肉/null 心契/null 心如刀割/null 心如刀搅/null 心如刀锉/null 心如刀锯/null 心如古井/null 心如坚石/null 心如寒灰/null 心如木石/null 心如止水/null 心如死灰/null 心如金石/null 心如铁石/null 心子/null 心孔/null 心存不满/null 心存怀疑/null 心学/null 心安/null 心安理得/null 心安神泰/null 心安神闲/null 心实/null 心室/null 心宽/null 心宽体肥/null 心宽体胖/null 心宿二/null 心寒/null 心寒胆战/null 心寒胆碎/null 心寒胆落/null 心尖/null 心平气和/null 心平气定/null 心广体胖/null 心底/null 心开目明/null 心弦/null 心形/null 心形线/null 心影儿/null 心往神驰/null 心律/null 心得/null 心得体会/null 心得安/null 心心/null 心心念念/null 心心相印/null 心志/null 心忙意急/null 心怀/null 心怀不轨/null 心怀叵测/null 心怀鬼胎/null 心态/null 心思/null 心怡神旷/null 心急/null 心急吃不了热豆腐/null 心急如火/null 心急如焚/null 心急火燎/null 心怦怦跳/null 心性/null 心悦神怡/null 心悦诚服/null 心悸/null 心情/null 心情坏/null 心情愉快/null 心情舒畅/null 心惊/null 心惊肉战/null 心惊肉跳/null 心惊胆寒/null 心惊胆怕/null 心惊胆慑/null 心惊胆战/null 心惊胆落/null 心惊胆跳/null 心惊胆颤/null 心想/null 心想事成/null 心意/null 心愿/null 心愿单/null 心慈/null 心慈手软/null 心慈面软/null 心慌/null 心慌意乱/null 心慕手追/null 心慕笔追/null 心慵意懒/null 心战/null 心房/null 心房颤动/null 心扉/null 心手相应/null 心折/null 心折首肯/null 心拙口夯/null 心拙口笨/null 心掏/null 心搏/null 心数/null 心旌摇曳/null 心无二想/null 心无二用/null 心旷神怡/null 心旷神愉/null 心明眼亮/null 心智/null 心曲/null 心有/null 心有余/null 心有余悸/null 心有余而力不足/null 心有灵犀一点通/null 心服/null 心服口服/null 心服情愿/null 心术/null 心术不正/null 心机/null 心材/null 心来/null 心梗/null 心正/null 心殒胆破/null 心殒胆落/null 心毒/null 心毒手辣/null 心气/null 心活/null 心浮/null 心满/null 心满意足/null 心满愿足/null 心潮/null 心潮澎湃/null 心潮起伏/null 心火/null 心灰/null 心灰意冷/null 心灰意懒/null 心灰意败/null 心灵/null 心灵上/null 心灵感应/null 心灵手巧/null 心灵深处/null 心烦/null 心烦意乱/null 心烦意冗/null 心烦虑乱/null 心焉如割/null 心焦/null 心焦如火/null 心焦如焚/null 心照/null 心照不宣/null 心照神交/null 心爱/null 心狠/null 心狠手辣/null 心猿意马/null 心率/null 心理/null 心理上/null 心理作用/null 心理剧/null 心理学/null 心理学家/null 心理战/null 心理疗法/null 心理素质/null 心理诊所/null 心理词典/null 心理防线/null 心甘/null 心甘情愿/null 心田/null 心电图/null 心疑/null 心疼/null 心病/null 心痒/null 心痒难挠/null 心痒难揉/null 心痛/null 心皮/null 心盛/null 心目/null 心目中/null 心直/null 心直口快/null 心直嘴快/null 心眼/null 心眼儿/null 心眼坏/null 心眼多/null 心眼大/null 心眼好/null 心眼小/null 心瞻魏阙/null 心知/null 心知肚明/null 心砰砰跳/null 心硬/null 心碎/null 心神/null 心神不宁/null 心神不安/null 心神不定/null 心神恍惚/null 心秀/null 心窄/null 心窍/null 心窗/null 心窝/null 心窝儿/null 心算/null 心粗气浮/null 心粗胆壮/null 心粗胆大/null 心细/null 心细如发/null 心经/null 心结/null 心绞痛/null 心绪/null 心绪不宁/null 心绪如麻/null 心绪恍惚/null 心羡/null 心肌/null 心肌梗塞/null 心肌梗死/null 心肌炎/null 心肝/null 心肠/null 心肠好/null 心肠硬/null 心肠软/null 心肠黑/null 心肺复苏术/null 心胆/null 心胆俱碎/null 心胆俱裂/null 心胸/null 心胸开阔/null 心胸狭窄/null 心胸狭隘/null 心脏/null 心脏学/null 心脏形/null 心脏搭桥手术/null 心脏收缩压/null 心脏疾患/null 心脏病/null 心脏移殖/null 心脏舒张压/null 心腹/null 心腹之交/null 心腹之忧/null 心腹之患/null 心腹之疾/null 心腹大患/null 心腹话/null 心腹重患/null 心膂爪牙/null 心膂股肱/null 心花/null 心花怒发/null 心花怒开/null 心花怒放/null 心若死灰/null 心荡神怡/null 心荡神摇/null 心荡神迷/null 心荡神驰/null 心虔志诚/null 心虚/null 心融神会/null 心血/null 心血来潮/null 心血管/null 心血管疾病/null 心裁/null 心计/null 心许/null 心诚/null 心话/null 心谤腹非/null 心贯白日/null 心贴心/null 心路/null 心跳/null 心身/null 心轮/null 心软/null 心轴/null 心连心/null 心迹/null 心途/null 心都/null 心酸/null 心醉/null 心醉神迷/null 心里/null 心里有数/null 心里有谱/null 心里痒痒/null 心里美萝卜/null 心里话/null 心重/null 心长发短/null 心闲手敏/null 心间/null 心静/null 心静自然凉/null 心面/null 心音/null 心领/null 心领神会/null 心领神悟/null 心驰神往/null 心驰魏阙/null 心高气傲/null 心高气硬/null 心魄/null 心黑/null 必不/null 必不可免/null 必不可少/null 必不可少组成/null 必不可缺/null 必不得已/null 必也正名/null 必争/null 必争之地/null 必会/null 必保/null 必修/null 必修课/null 必先利其器/null 必到/null 必和必拓/null 必备/null 必失/null 必学/null 必定/null 必将/null 必应/null 必得/null 必恭必敬/null 必改/null 必是/null 必有/null 必有一伤/null 必有一失/null 必有其徒/null 必有我师/null 必有近忧/null 必死/null 必死之症/null 必然/null 必然之事/null 必然会/null 必然伴有/null 必然判断/null 必然性/null 必然王国/null 必然结果/null 必然规律/null 必然论/null 必然趋势/null 必由/null 必由之路/null 必究/null 必经/null 必经之地/null 必经之路/null 必经阶段/null 必罚/null 必胜/null 必胜客/null 必能/null 必行/null 必衰/null 必被/null 必要/null 必要产品/null 必要劳动/null 必要性/null 必要措施/null 必要条件/null 必败/null 必需/null 必需品/null 必须/null 必须做/null 必须品/null 必须的/null 必做/null 必封/null 必挂/null 必死/null 必杀/null 忆及/null 忆旧/null 忆法/null 忆苦思甜/null 忆苦饭/null 忆起/null 忆述/null 忉怛/null 忌克/null 忌刻/null 忌医/null 忌口/null 忌嘴/null 忌妒/null 忌恨/null 忌惮/null 忌日/null 忌讳/null 忌语/null 忌辰/null 忌酒/null 忌食/null 忍下/null 忍不住/null 忍从/null 忍住/null 忍俊/null 忍俊不禁/null 忍冬/null 忍受/null 忍垢偷生/null 忍得住/null 忍心/null 忍心害理/null 忍性/null 忍无可忍/null 忍气/null 忍气吞声/null 忍痛/null 忍痛割爱/null 忍着/null 忍笑/null 忍者/null 忍耐/null 忍耐力/null 忍耻/null 忍耻偷生/null 忍耻含垢/null 忍耻含羞/null 忍让/null 忍辱/null 忍辱偷生/null 忍辱含垢/null 忍辱含羞/null 忍辱求全/null 忍辱负重/null 忍饥受渴/null 忍饥受饿/null 忍饥挨饿/null 忏悔/null 忏悔式/null 忐忑/null 忐忑不安/null 忐忑不定/null 忒儿/null 忖度/null 忖思/null 忖量/null 志不在此/null 志丹/null 志于/null 志冲斗牛/null 志同道合/null 志向/null 志哀/null 志喜/null 志在/null 志在千里/null 志在四方/null 志在沛公/null 志坚胆壮/null 志士/null 志士仁人/null 志大才疏/null 志大才短/null 志工/null 志广才疏/null 志得意满/null 志愿/null 志愿书/null 志愿人员/null 志愿兵/null 志愿兵制/null 志愿军/null 志愿活动/null 志愿者/null 志气/null 志气凌云/null 志满气得/null 志留系/null 志留纪/null 志薄/null 志诚君子/null 志趣/null 志足意满/null 志骄意满/null 志高气扬/null 忘不/null 忘不了/null 忘乎所以/null 忘了/null 忘事/null 忘八旦/null 忘八蛋/null 忘其所以/null 忘却/null 忘啦/null 忘寝废食/null 忘带/null 忘年/null 忘年之交/null 忘年之契/null 忘年之好/null 忘年交/null 忘形/null 忘形之交/null 忘形之契/null 忘忧/null 忘忧草/null 忘怀/null 忘性/null 忘恩/null 忘恩失义/null 忘恩背义/null 忘恩负义/null 忘情/null 忘我/null 忘我劳动/null 忘我工作/null 忘我精神/null 忘战必危/null 忘战者危/null 忘掉/null 忘旧/null 忘本/null 忘生舍死/null 忘神/null 忘私/null 忘记/null 忘记了/null 忘记密码/null 忘象得意/null 忘返/null 忘餐/null 忘餐失寝/null 忘餐废寝/null 忙不过来/null 忙不迭/null 忙个不停/null 忙中/null 忙中有失/null 忙中有错/null 忙中添乱/null 忙乎/null 忙乱/null 忙于/null 忙人/null 忙动/null 忙将/null 忙得/null 忙得不亦乐乎/null 忙得不可开交/null 忙忙/null 忙忙碌碌/null 忙於/null 忙活/null 忙的/null 忙着/null 忙碌/null 忙碌著/null 忙者/null 忙著/null 忙说/null 忙进忙出/null 忙里偷闲/null 忙问/null 忠义/null 忠于/null 忠于祖国/null 忠于职守/null 忠仆/null 忠信/null 忠勇/null 忠南大学校/null 忠厚/null 忠君报国/null 忠君爱国/null 忠告/null 忠告者/null 忠孝/null 忠孝两全/null 忠孝节义/null 忠孝节烈/null 忠实/null 忠实于/null 忠心/null 忠心耿耿/null 忠心贯日/null 忠心赤胆/null 忠清/null 忠清北道/null 忠清南道/null 忠清道/null 忠烈/null 忠肝义胆/null 忠臣/null 忠臣不事二主/null 忠臣双全/null 忠臣烈士/null 忠良/null 忠言/null 忠言嘉谟/null 忠言奇谋/null 忠言谠论/null 忠言逆耳/null 忠诚/null 忠诚人/null 忠诚老实/null 忠贞/null 忠贞不渝/null 忠贯白日/null 忠顺/null 忡忡/null 忤逆/null 忤逆不孝/null 忧伤/null 忧公如家/null 忧公忘私/null 忧公无私/null 忧国/null 忧国哀民/null 忧国如家/null 忧国忘家/null 忧国忘私/null 忧国忘身/null 忧国忧民/null 忧国恤民/null 忧国爱民/null 忧形于色/null 忧心/null 忧心如捣/null 忧心如焚/null 忧心如酲/null 忧心如醉/null 忧心忡忡/null 忧心悄悄/null 忧心若醉/null 忧思/null 忧悒/null 忧患/null 忧惧/null 忧愁/null 忧愤/null 忧戚/null 忧抑/null 忧民/null 忧民忧国/null 忧沉/null 忧深思远/null 忧灼/null 忧烦/null 忧能伤人/null 忧色/null 忧苦/null 忧苦以终/null 忧虑/null 忧郁/null 忧郁不乐/null 忧郁症/null 忧闷/null 快中子/null 快乐/null 快乐岛/null 快乐幸福/null 快乐论/null 快书/null 快了/null 快事/null 快于/null 快些/null 快人/null 快人快事/null 快人快语/null 快件/null 快信/null 快刀/null 快刀斩乱麻/null 快刀断乱麻/null 快别/null 快到/null 快取/null 快叫/null 快可立/null 快吃/null 快嘴/null 快好/null 快婿/null 快干/null 快当/null 快得多/null 快快/null 快快乐乐/null 快意/null 快感/null 快感中心/null 快慢/null 快慰/null 快手/null 快把/null 快报/null 快拍/null 快捷/null 快捷方式/null 快捷键/null 快攻/null 快来/null 快板/null 快板儿/null 快枪/null 快档/null 快步/null 快步流星/null 快步走/null 快步跑/null 快死/null 快活/null 快活人/null 快溺死/null 快滑/null 快点/null 快点儿/null 快照/null 快班/null 快球/null 快的/null 快看/null 快种/null 快而/null 快舌/null 快船/null 快艇/null 快行道/null 快要/null 快讯/null 快说/null 快走/null 快跑/null 快车/null 快车道/null 快转/null 快进/null 快追/null 快退/null 快递/null 快速/null 快速以太网络/null 快速动眼期/null 快速反应/null 快速排序/null 快速记忆法/null 快邮/null 快门/null 快门儿/null 快餐/null 快餐交友/null 快餐店/null 快餐部/null 快马/null 快马加鞭/null 快鱼/null 念上/null 念之/null 念书/null 念以/null 念佛/null 念兹在兹/null 念册/null 念及/null 念叨/null 念咒/null 念头/null 念学位/null 念心/null 念心儿/null 念念/null 念念不忘/null 念念有词/null 念日/null 念旧/null 念本/null 念珠/null 念白/null 念着/null 念经/null 念诗/null 念诵/null 念起/null 念过/null 念道/null 念错/null 忸忸怩怩/null 忸怩/null 忸怩作态/null 忸昵/null 忻城/null 忻州/null 忻府/null 忻府区/null 忻忻得意/null 忽上忽下/null 忽儿/null 忽冷/null 忽减/null 忽发/null 忽听/null 忽哨/null 忽地/null 忽左忽右/null 忽布/null 忽微/null 忽必烈/null 忽忽/null 忽忽不乐/null 忽忽悠悠/null 忽悠/null 忽明/null 忽有/null 忽灭/null 忽热/null 忽然/null 忽然间/null 忽现/null 忽略/null 忽米/null 忽而/null 忽落/null 忽视/null 忽起/null 忽身/null 忽闪/null 忽闻/null 忽隐忽现/null 忽飞/null 忽高忽低/null 忽鲁谟斯/null 忿不顾身/null 忿忿/null 忿忿不平/null 忿怒/null 忿恨/null 忿懑/null 忿然作色/null 忿詈/null 怀中/null 怀乡/null 怀仁/null 怀仁堂/null 怀俄明/null 怀俄明州/null 怀偏见/null 怀冤抱屈/null 怀刺漫灭/null 怀化/null 怀化县/null 怀古/null 怀妊/null 怀孕/null 怀孕中/null 怀宁/null 怀安/null 怀宝迷邦/null 怀宝遁世/null 怀德畏威/null 怀念/null 怀恋/null 怀恨/null 怀恨在心/null 怀恨者/null 怀恶/null 怀恶不悛/null 怀恶意/null 怀想/null 怀才不遇/null 怀才抱德/null 怀抱/null 怀抱不平/null 怀敌意/null 怀旧/null 怀旧感/null 怀春/null 怀有/null 怀材抱德/null 怀来/null 怀柔/null 怀柔县/null 怀特/null 怀珠抱玉/null 怀瑾握瑜/null 怀璧其罪/null 怀疑/null 怀疑一切/null 怀疑性/null 怀疑派/null 怀疑者/null 怀疑论/null 怀真抱素/null 怀着/null 怀禄/null 怀绪/null 怀胎/null 怀表/null 怀质抱真/null 怀远/null 怀道迷邦/null 怀里/null 怀金垂紫/null 怀金拖紫/null 怀铅提椠/null 怀铅握椠/null 怀铅握素/null 怀集/null 怀鬼胎/null 怀黄佩紫/null 态势/null 态叠加/null 态子/null 态射/null 态度/null 态度生硬/null 态度端正/null 态样/null 怂恿/null 怃然/null 怄气/null 怅怅/null 怅恨/null 怅惘/null 怅望/null 怅然/null 怅然自失/null 怅然若失/null 怆地呼天/null 怆天呼地/null 怆然/null 怊怅/null 怊怅若失/null 怎不/null 怎个/null 怎么/null 怎么了/null 怎么办/null 怎么回事/null 怎么得了/null 怎么搞的/null 怎么样/null 怎么着/null 怎了/null 怎会/null 怎办/null 怎啦/null 怎地/null 怎奈/null 怎好意思/null 怎就/null 怎敢/null 怎敢不低头/null 怎样/null 怎生/null 怎的/null 怎知/null 怎肯/null 怎能/null 怎说/null 怎麽/null 怏怏/null 怏怏不乐/null 怏怏不平/null 怏怏不悦/null 怏然/null 怒不可遏/null 怒冲冲/null 怒发/null 怒发冲冠/null 怒号/null 怒吓/null 怒吠/null 怒吼/null 怒喊/null 怒喝/null 怒容/null 怒容满面/null 怒形/null 怒形于色/null 怒恨/null 怒意/null 怒放/null 怒斥/null 怒殴/null 怒殴者/null 怒气/null 怒气冲冲/null 怒气冲天/null 怒气冲霄/null 怒江/null 怒江傈僳族自治区/null 怒江傈僳族自治州/null 怒江大峡谷/null 怒江州/null 怒涛/null 怒潮/null 怒火/null 怒火中烧/null 怒火冲天/null 怒目/null 怒目切齿/null 怒目横眉/null 怒目相向/null 怒目而视/null 怒臂当车/null 怒臂当辙/null 怒色/null 怒视/null 怒颜相报/null 怒骂/null 怔地/null 怔忡/null 怔忪/null 怔怔/null 怔神儿/null 怔营/null 怕三怕四/null 怕丢面子/null 怕事/null 怕人/null 怕冷/null 怕只怕/null 怕怕/null 怕是/null 怕死/null 怕死贪生/null 怕死鬼/null 怕水/null 怕火/null 怕热/null 怕生/null 怕疼/null 怕痒/null 怕硬欺软/null 怕累/null 怕羞/null 怕老婆/null 怕苦/null 怕苦怕累/null 怕难为情/null 怙恃/null 怙恶不悛/null 怙恶不改/null 怛然失色/null 怜之/null 怜孤惜寡/null 怜恤/null 怜悯/null 怜惜/null 怜才/null 怜新弃旧/null 怜爱/null 怜贫惜老/null 怜贫敬老/null 怜香惜玉/null 思不出位/null 思义/null 思之心痛/null 思乐冰/null 思乡/null 思乡病/null 思乱/null 思亲/null 思冥/null 思凡/null 思前/null 思前想后/null 思前算后/null 思南/null 思变/null 思古/null 思嘉丽/null 思如泉涌/null 思如涌泉/null 思孟学派/null 思归/null 思录/null 思忖/null 思念/null 思恋/null 思情/null 思惟/null 思惟经济原则/null 思想/null 思想上/null 思想交流/null 思想体系/null 思想包袱/null 思想史/null 思想家/null 思想库/null 思想性/null 思想意识/null 思想斗争/null 思想方法/null 思想素质/null 思想顽钝/null 思愁/null 思慕/null 思战/null 思时/null 思明/null 思明区/null 思春/null 思春期/null 思是/null 思源/null 思潮/null 思潮起伏/null 思熟/null 思甜/null 思科/null 思索/null 思索性/null 思索者/null 思绪/null 思绪万千/null 思维/null 思维敏捷/null 思维方式/null 思维科学/null 思维能力/null 思考/null 思考者/null 思考题/null 思而不学则殆/null 思而后行/null 思若泉涌/null 思若涌泉/null 思茅/null 思茅区/null 思茅地区/null 思虑/null 思议/null 思谋/null 思贤如渴/null 思路/null 思路敏捷/null 思辨哲学/null 思辩/null 思迁/null 思过/null 思过半矣/null 思量/null 怠堕/null 怠工/null 怠忽/null 怠惰/null 怠慢/null 怡人/null 怡保/null 怡保市/null 怡和/null 怡悦/null 怡情悦性/null 怡然/null 怡然自乐/null 怡然自娱/null 怡然自得/null 怡然自足/null 怡目/null 急下降/null 急不可待/null 急不可耐/null 急不择言/null 急中/null 急中生智/null 急了/null 急事/null 急于/null 急于想/null 急于星火/null 急于求成/null 急人/null 急人之困/null 急人之难/null 急人所急/null 急件/null 急促/null 急促声/null 急修/null 急先锋/null 急公好义/null 急冲/null 急切/null 急刹车/null 急剧/null 急剧下降/null 急功近利/null 急功近名/null 急务/null 急匆匆/null 急升/null 急发/null 急变/null 急口令/null 急吼吼/null 急呀/null 急嘴急舌/null 急噪/null 急坏/null 急奔/null 急如星火/null 急如风火/null 急射/null 急就章/null 急巴巴/null 急座/null 急弯/null 急征重敛/null 急待/null 急得/null 急忙/null 急急如律令/null 急急巴巴/null 急急忙忙/null 急性/null 急性人/null 急性传染病/null 急性子/null 急性氰化物中毒/null 急性照射/null 急性病/null 急性肠炎/null 急性胃肠炎/null 急性阑尾炎/null 急惊风/null 急扯/null 急抓/null 急报/null 急抽/null 急拉/null 急拍/null 急拍拍/null 急救/null 急救中心/null 急救包/null 急救员/null 急救站/null 急景凋年/null 急景流年/null 急智/null 急来抱佛脚/null 急步/null 急死/null 急派/null 急流/null 急流勇进/null 急流勇退/null 急流险滩/null 急湍/null 急火/null 急煞/null 急用/null 急电/null 急病/null 急症/null 急的/null 急眼/null 急着/null 急竹繁丝/null 急管繁弦/null 急聘/null 急聚/null 急脉缓受/null 急腹症/null 急茬/null 急茬儿/null 急行/null 急行军/null 急袭/null 急要/null 急让/null 急诊/null 急诊室/null 急语/null 急赤白脸/null 急走/null 急赶/null 急起直追/null 急跑/null 急躁/null 急转/null 急转弯/null 急转直下/null 急进/null 急迫/null 急退/null 急送/null 急速/null 急造/null 急遽/null 急降/null 急难/null 急需/null 急需品/null 急需处理/null 急需解决/null 急风/null 急风暴雨/null 急飞/null 急驰/null 急骤/null 怦怦/null 怦然/null 怦然心动/null 性乐/null 性事/null 性交/null 性交易/null 性交高潮/null 性产业/null 性价比/null 性伙伴/null 性传播/null 性伴/null 性伴侣/null 性侵/null 性侵害/null 性侵犯/null 性倒/null 性倒错/null 性偏好/null 性健康/null 性关系/null 性兴奋/null 性冲动/null 性冷感/null 性冷淡/null 性别/null 性别歧视/null 性别比/null 性别角色/null 性历/null 性取向/null 性变态/null 性同/null 性同一性障碍/null 性向/null 性命/null 性命交关/null 性命攸关/null 性善/null 性善论/null 性器/null 性器官/null 性地/null 性好/null 性如/null 性媾/null 性子/null 性学/null 性工作/null 性弱/null 性强/null 性形/null 性征/null 性徵/null 性快感/null 性态/null 性急/null 性急人/null 性恶/null 性恶论/null 性情/null 性情好/null 性感/null 性成熟/null 性技/null 性指向/null 性接触/null 性教育/null 性服务/null 性服务产业/null 性本善/null 性本能/null 性格/null 性格不合/null 性格好/null 性模/null 性欲/null 性欲高潮/null 性气/null 性满足/null 性激素/null 性灵/null 性爱/null 性物恋/null 性状/null 性生活/null 性疾病/null 性病/null 性瘾/null 性短讯/null 性禁忌/null 性科/null 性科学/null 性稳/null 性细胞/null 性能/null 性能超群/null 性腺/null 性药/null 性虐/null 性虐待/null 性行/null 性行为/null 性衰/null 性质/null 性质上/null 性质命题/null 性野/null 性骚扰/null 性高潮/null 怨不得/null 怨偶/null 怨入骨髓/null 怨叹/null 怨命/null 怨声/null 怨声满道/null 怨声盈路/null 怨声载路/null 怨声载道/null 怨天尤人/null 怨天怨地/null 怨天载道/null 怨女/null 怨女旷夫/null 怨尤/null 怨府/null 怨怼/null 怨恨/null 怨愤/null 怨我/null 怨报/null 怨望/null 怨毒/null 怨气/null 怨气冲天/null 怨耦/null 怨艾/null 怨言/null 怨载/null 怨鬼/null 怪不/null 怪不得/null 怪事/null 怪人/null 怪人奥尔・扬科维奇/null 怪僻/null 怪兽/null 怪到/null 怪力乱神/null 怪叔叔/null 怪叫/null 怪味/null 怪哉/null 怪圈/null 怪声/null 怪声怪气/null 怪客/null 怪异/null 怪异事/null 怪影/null 怪念/null 怪念头/null 怪怨/null 怪怪/null 怪怪的/null 怪想/null 怪手/null 怪杰/null 怪样/null 怪样子/null 怪模/null 怪模怪样/null 怪气/null 怪物/null 怪物似/null 怪病/null 怪癖/null 怪相/null 怪石/null 怪秘/null 怪笑/null 怪给/null 怪罪/null 怪胎/null 怪脸/null 怪蜀黍/null 怪行/null 怪讶/null 怪论/null 怪话/null 怪诞/null 怪诞不经/null 怪谈/null 怪谬/null 怪谲/null 怪象/null 怪道/null 怪里怪气/null 怫然/null 怯场/null 怯声怯气/null 怯头怯脑/null 怯子/null 怯弱/null 怯怯/null 怯意/null 怯懦/null 怯生/null 怯生生/null 怯疑/null 怯相/null 怯羞/null 怯阵/null 怵惕/null 怵惧/null 怵然/null 怵目惊心/null 总不/null 总主教/null 总之/null 总书记/null 总产/null 总产值/null 总产量/null 总人口/null 总人数/null 总令/null 总价/null 总价值/null 总任务/null 总会/null 总会三明治/null 总会会长/null 总会计师/null 总体/null 总体上/null 总体上说/null 总体布局/null 总体方案/null 总体水平/null 总体目标/null 总体经济学/null 总体规划/null 总供给/null 总值/null 总储量/null 总公司/null 总共/null 总兵/null 总册/null 总分/null 总则/null 总办/null 总加/null 总务/null 总动员/null 总医院/null 总协定/null 总卵黄管/null 总厂/null 总参/null 总参谋部/null 总参谋长/null 总可/null 总台/null 总司令/null 总司令部/null 总合/null 总后/null 总后勤部/null 总后方/null 总吨/null 总吨位/null 总吨数/null 总和/null 总回报/null 总图/null 总备/null 总将/null 总局/null 总崩溃/null 总工/null 总工会/null 总工程师/null 总帐/null 总干事/null 总平面图/null 总库/null 总店/null 总开关/null 总开销/null 总归/null 总得/null 总怪/null 总总/null 总想/null 总成/null 总成本/null 总成绩/null 总括/null 总指挥/null 总指挥部/null 总按/null 总控/null 总揽/null 总揽全局/null 总支/null 总支出/null 总收入/null 总收益/null 总攻/null 总攻击/null 总政/null 总政治部/null 总政策/null 总教堂/null 总教练/null 总数/null 总数达/null 总方针/null 总星系/null 总是/null 总有/null 总机/null 总机构/null 总杆赛/null 总次数/null 总汇/null 总流量/null 总热值/null 总爱/null 总状花序/null 总理/null 总理衙门/null 总的/null 总的形势/null 总的来看/null 总的来说/null 总的说来/null 总监/null 总目/null 总目录/null 总目标/null 总督/null 总社/null 总称/null 总站/null 总章/null 总算/null 总管/null 总管子/null 总管理处/null 总管道/null 总纂/null 总纲/null 总线/null 总经/null 总经济师/null 总经理/null 总结/null 总结会/null 总结工作/null 总结性/null 总结报告/null 总结经验/null 总统/null 总统任期/null 总统制/null 总统大选/null 总统府/null 总统选举/null 总编/null 总编辑/null 总罚/null 总罢工/null 总署/null 总而言之/null 总耗/null 总能/null 总营业额/null 总行/null 总表/null 总裁/null 总装/null 总要/null 总规模/null 总览/null 总角/null 总角之交/null 总角之好/null 总计/null 总论/null 总评/null 总说/null 总谱/null 总账/null 总起来说/null 总趋势/null 总路线/null 总辖/null 总运单/null 总还/null 总部/null 总重/null 总重量/null 总量/null 总钥匙/null 总长/null 总阀/null 总队/null 总院/null 总集/null 总需求/null 总面积/null 总预算/null 总领事/null 总领事馆/null 总领馆/null 总额/null 总风险/null 总馆/null 总鳍鱼/null 恁么/null 恁地/null 恁般/null 恂恂/null 恂恂善诱/null 恃势/null 恃强凌弱/null 恃强欺弱/null 恃才/null 恃才傲物/null 恃才扬己/null 恃才敖物/null 恃才矜己/null 恋人/null 恋女/null 恋家/null 恋恋/null 恋恋不舍/null 恋恋难舍/null 恋情/null 恋慕/null 恋新忘旧/null 恋旧/null 恋旧情结/null 恋曲/null 恋栈/null 恋歌/null 恋母/null 恋母情结/null 恋爱/null 恋父/null 恋物/null 恋物狂/null 恋物癖/null 恋狂/null 恋生恶死/null 恋癖/null 恋着/null 恋童癖/null 恋脚癖/null 恋脚癖者/null 恋诗/null 恋贫恤老/null 恋贫恤苦/null 恋酒贪杯/null 恋酒贪色/null 恋酒贪花/null 恋酒迷花/null 恍如/null 恍如隔世/null 恍忽/null 恍恍忽忽/null 恍恍惚惚/null 恍惚/null 恍惚迷离/null 恍然/null 恍然大悟/null 恍然醒悟/null 恍神/null 恍若/null 恍若隔世/null 恐不/null 恐俄症/null 恐兽/null 恐同/null 恐同症/null 恐后争先/null 恐吓/null 恐味/null 恐外/null 恐怕/null 恐怖/null 恐怖主义/null 恐怖主义者/null 恐怖事件/null 恐怖份子/null 恐怖分子/null 恐怖感/null 恐怖活动/null 恐怖片/null 恐怖片儿/null 恐怖电影/null 恐怖症/null 恐怖组织/null 恐怖行动/null 恐怖袭击/null 恐怖集团/null 恐惧/null 恐惧心理/null 恐惧感/null 恐惧症/null 恐慌/null 恐慌万状/null 恐旷症/null 恐水/null 恐水病/null 恐水症/null 恐法症/null 恐荒/null 恐韩症/null 恐高/null 恐高症/null 恐鸟/null 恐龙/null 恐龙妹/null 恐龙总目/null 恐龙类/null 恒久/null 恒产/null 恒力/null 恒加速度/null 恒压/null 恒压器/null 恒定/null 恒定性/null 恒山/null 恒山区/null 恒常/null 恒心/null 恒星/null 恒星年/null 恒星日/null 恒星月/null 恒星系/null 恒星际/null 恒春/null 恒春半岛/null 恒春镇/null 恒河/null 恒河沙数/null 恒河猴/null 恒温/null 恒温器/null 恒湿/null 恒湿器/null 恒牙/null 恒生/null 恒生中资企业指数/null 恒生指数/null 恒生银行/null 恒等/null 恒等式/null 恒速率/null 恒量/null 恒齿/null 恓惶/null 恕不/null 恕不从命/null 恕不奉陪/null 恕不接待/null 恕免/null 恕己及人/null 恕己及物/null 恕性/null 恕我/null 恕我直言/null 恕罪/null 恕赎/null 恕邀/null 恕难从命/null 恙虫/null 恙虫病/null 恝置/null 恢复/null 恢复原状/null 恢复名誉/null 恢复常态/null 恢复期/null 恢复生产/null 恢复系/null 恢宏/null 恢宏大度/null 恢廓/null 恢廓大度/null 恢弘/null 恢恢/null 恢恢有余/null 恢谐/null 恣心所欲/null 恣情/null 恣情纵欲/null 恣意/null 恣意妄为/null 恣意妄行/null 恣意行乐/null 恣横/null 恣欲/null 恣睢无忌/null 恣肆/null 恣肆无忌/null 恣行无忌/null 恤匮/null 恤嫠/null 恤孤念寡/null 恤孤念苦/null 恤老怜贫/null 恤衫/null 恤金/null 恨不/null 恨不得/null 恨不能/null 恨之/null 恨之入骨/null 恨事/null 恨人/null 恨入心髓/null 恨入骨髓/null 恨恨/null 恨恶/null 恨意/null 恨死/null 恨海难填/null 恨相知晚/null 恨相见晚/null 恨透/null 恨铁不成钢/null 恩主/null 恩人/null 恩仇/null 恩俸/null 恩公/null 恩典/null 恩准/null 恩同再造/null 恩同父母/null 恩培多克勒/null 恩威兼施/null 恩威并施/null 恩威并用/null 恩威并著/null 恩威并行/null 恩宠/null 恩将仇报/null 恩山义海/null 恩师/null 恩平/null 恩德/null 恩怨/null 恩情/null 恩惠/null 恩慈/null 恩戴/null 恩断义绝/null 恩断意绝/null 恩斯赫德/null 恩施/null 恩施县/null 恩施土家族苗族自治州/null 恩施地区/null 恩格尔/null 恩格斯/null 恩比天大/null 恩泽/null 恩深义重/null 恩爱/null 恩眄/null 恩膏/null 恩贾梅纳/null 恩赐/null 恩赐观点/null 恩里科・费米/null 恩重丘山/null 恩重如山/null 恪守/null 恪守成式/null 恪守成规/null 恪尽职守/null 恪慎/null 恪遵/null 恫吓/null 恫疑虚喝/null 恫言/null 恬不为怪/null 恬不为意/null 恬不知怪/null 恬不知耻/null 恬和/null 恬噪/null 恬愉/null 恬愉之安/null 恬波/null 恬淡/null 恬淡卦欲/null 恬淡无为/null 恬淡无欲/null 恬漠/null 恬澹/null 恬然/null 恬畅/null 恬美/null 恬谧/null 恬退/null 恬适/null 恬逸/null 恬雅/null 恬静/null 恭亲王/null 恭亲王奕䜣/null 恭从/null 恭候/null 恭听/null 恭喜/null 恭喜发财/null 恭城/null 恭城县/null 恭子/null 恭恭/null 恭恭敬敬/null 恭惟/null 恭敬/null 恭敬不如从命/null 恭敬桑梓/null 恭服/null 恭桶/null 恭祝/null 恭维/null 恭维话/null 恭行天罚/null 恭请/null 恭谒/null 恭谦/null 恭谨/null 恭贺/null 恭贺佳节/null 恭贺新禧/null 恭迎/null 恭逢其盛/null 恭顺/null 息事/null 息事宁人/null 息兵/null 息声/null 息峰县/null 息影/null 息怒/null 息息/null 息息相关/null 息息相通/null 息憩/null 息战/null 息技/null 息烽/null 息率/null 息票/null 息肉/null 息肩/null 息黥补劓/null 息鼓/null 恰似/null 恰值/null 恰切/null 恰到/null 恰到好处/null 恰在此时/null 恰好/null 恰好相反/null 恰如/null 恰如其份/null 恰如其分/null 恰巧/null 恰帕斯州/null 恰当/null 恰恰/null 恰恰相反/null 恰恰舞/null 恰逢/null 恳亲会/null 恳切/null 恳挚/null 恳求/null 恳求似/null 恳求者/null 恳请/null 恳请似/null 恳谈/null 恳谈会/null 恳辞/null 恶习/null 恶事/null 恶事传千里/null 恶事行千里/null 恶人/null 恶人先告状/null 恶仗/null 恶作剧/null 恶作剧者/null 恶例/null 恶俗/null 恶兆/null 恶凶凶/null 恶创/null 恶劣/null 恶劣影响/null 恶劳好逸/null 恶势力/null 恶化/null 恶叉白赖/null 恶口/null 恶名/null 恶名儿/null 恶名昭彰/null 恶名昭著/null 恶唑啉/null 恶唑啉酮/null 恶嗪/null 恶声/null 恶妇/null 恶婆/null 恶寒/null 恶少/null 恶岁/null 恶徒/null 恶德/null 恶心/null 恶念/null 恶性/null 恶性循环/null 恶性疟原虫/null 恶性瘤/null 恶性肿瘤/null 恶性通货膨胀/null 恶恨/null 恶恶实实/null 恶意/null 恶意中伤/null 恶意代码/null 恶感/null 恶战/null 恶报/null 恶损/null 恶搞/null 恶搞文化/null 恶政/null 恶斗/null 恶有恶报/null 恶果/null 恶梦/null 恶梦似/null 恶棍/null 恶棍似/null 恶毒/null 恶气/null 恶水/null 恶汉/null 恶浊/null 恶浪/null 恶煞/null 恶犬/null 恶狗/null 恶狠/null 恶狠狠/null 恶疾/null 恶病/null 恶病质/null 恶癖/null 恶直丑正/null 恶相/null 恶神/null 恶积祸盈/null 恶稔祸盈/null 恶稔罪盈/null 恶稔贯盈/null 恶紫夺朱/null 恶者/null 恶臭/null 恶臭扑鼻/null 恶臭物/null 恶臭脓/null 恶舌/null 恶苗病/null 恶虎饥鹰/null 恶行/null 恶衣恶食/null 恶衣粗食/null 恶衣粝食/null 恶衣菲食/null 恶衣蔬食/null 恶补/null 恶言/null 恶言伤人/null 恶言漫骂/null 恶言詈辞/null 恶誓/null 恶论/null 恶评/null 恶评昭著/null 恶语/null 恶语中伤/null 恶语伤人/null 恶贯满盈/null 恶贯祸盈/null 恶辣/null 恶运/null 恶迹/null 恶霸/null 恶骂/null 恶鬼/null 恶魔/null 恶魔似/null 恶魔般/null 恸哭/null 恹恹/null 恺弟/null 恺彻/null 恺悌/null 恺悌君子/null 恺撒/null 恻怛之心/null 恻然/null 恻隐/null 恻隐之心/null 恼乱/null 恼人/null 恼怒/null 恼恨/null 恼火/null 恼羞/null 恼羞变怒/null 恼羞成怒/null 悄声/null 悄悄/null 悄悄儿/null 悄悄话/null 悄无声息/null 悄没声儿/null 悄然/null 悄然无声/null 悉交绝游/null 悉听尊便/null 悉尼/null 悉德尼/null 悉心/null 悉心戮力/null 悉心毕力/null 悉心竭力/null 悉数/null 悉由/null 悉索敝赋/null 悉索薄赋/null 悌友/null 悌睦/null 悍勇/null 悍匪/null 悍妇/null 悍妻/null 悍将/null 悍接/null 悍然/null 悍然不顾/null 悒悒/null 悒悒不乐/null 悒悒不欢/null 悔不/null 悔不当初/null 悔不该/null 悔之/null 悔之不及/null 悔之亡及/null 悔之何及/null 悔之已晚/null 悔之无及/null 悔之晚矣/null 悔之莫及/null 悔婚/null 悔帮/null 悔恨/null 悔恨交加/null 悔悟/null 悔意/null 悔改/null 悔棋/null 悔气/null 悔罪/null 悔罪者/null 悔罪自新/null 悔过/null 悔过书/null 悔过自忏/null 悔过自新/null 悔过自责/null 悖入悖出/null 悖文/null 悖晦/null 悖理/null 悖礼/null 悖缪/null 悖论/null 悖谬/null 悖逆/null 悚然/null 悟入/null 悟净/null 悟出/null 悟力/null 悟学/null 悟性/null 悟空/null 悟能/null 悟道/null 悠久/null 悠哉/null 悠哉悠哉/null 悠哉游哉/null 悠忽/null 悠悠/null 悠悠忽忽/null 悠悠荡荡/null 悠扬/null 悠然/null 悠然神往/null 悠然自得/null 悠然自适/null 悠着/null 悠着点/null 悠缪/null 悠荡/null 悠谬/null 悠远/null 悠长/null 悠闲/null 悠闲自在/null 患上/null 患了/null 患儿/null 患处/null 患得患失/null 患晚期/null 患有/null 患病/null 患病者/null 患癌/null 患者/null 患难/null 患难与共/null 患难之交/null 患难之交才是真正的朋友/null 患难相恤/null 患难相扶/null 患难相死/null 患难见弃/null 患难见真情/null 悦人/null 悦心娱目/null 悦服/null 悦目/null 悦目娱心/null 悦纳/null 悦耳/null 悦耳动听/null 悦色/null 悦近来远/null 您不/null 您也/null 您了/null 您们/null 您先/null 您再/null 您别/null 您去/null 您可/null 您在/null 您坐/null 您大/null 您好/null 您对/null 您将/null 您就/null 您得/null 您快/null 您想/null 您慢/null 您提/null 您是/null 您有/null 您来/null 您猜/null 您的/null 您瞧/null 您能/null 您让/null 您说/null 您还/null 您这/null 悬乎/null 悬于/null 悬停/null 悬剑/null 悬吊/null 悬在/null 悬垂/null 悬垂物/null 悬垂肌/null 悬壶/null 悬壶济世/null 悬头刺骨/null 悬岩/null 悬崖/null 悬崖勒马/null 悬崖峭壁/null 悬崖绝壁/null 悬弧之庆/null 悬心吊胆/null 悬念/null 悬悬而望/null 悬想/null 悬拟/null 悬挂/null 悬挂式/null 悬挂式滑翔/null 悬挂式滑翔机/null 悬挂物/null 悬揣/null 悬旗/null 悬望/null 悬木/null 悬案/null 悬梁/null 悬梁刺股/null 悬梁刺骨/null 悬梁自尽/null 悬梯/null 悬殊/null 悬河/null 悬河注水/null 悬河注火/null 悬河泻水/null 悬浊液/null 悬浮/null 悬浮体染色/null 悬浮微粒/null 悬浮液/null 悬浮物/null 悬瀑/null 悬灯结彩/null 悬疑/null 悬着/null 悬空/null 悬空寺/null 悬索桥/null 悬绝/null 悬罄/null 悬置/null 悬羊头卖狗肉/null 悬而未决/null 悬肠挂肚/null 悬腕/null 悬臂/null 悬若日月/null 悬荡/null 悬虑/null 悬赏/null 悬赏令/null 悬起/null 悬车之年/null 悬车告老/null 悬车致仕/null 悬钩子/null 悬铃木/null 悬隔/null 悬雍垂/null 悬鹑百结/null 悭俭/null 悭吝/null 悯惜/null 悱恻/null 悲不自胜/null 悲伤/null 悲凄/null 悲凉/null 悲切/null 悲剧/null 悲剧性/null 悲剧演员/null 悲剧缺陷/null 悲号/null 悲叹/null 悲咽/null 悲哀/null 悲哉/null 悲哭/null 悲啼/null 悲喜/null 悲喜交切/null 悲喜交并/null 悲喜交至/null 悲喜交集/null 悲喜兼集/null 悲喜剧/null 悲喜剧性/null 悲壮/null 悲声载道/null 悲天悯人/null 悲心/null 悲怀/null 悲怅/null 悲怆/null 悲怨/null 悲恨/null 悲恸/null 悲恻/null 悲悯/null 悲悼/null 悲情/null 悲惨/null 悲惨世界/null 悲惨境遇/null 悲惨结局/null 悲愁/null 悲感/null 悲愤/null 悲愤填膺/null 悲戚/null 悲摧/null 悲欢/null 悲欢合散/null 悲欢离合/null 悲歌/null 悲歌当哭/null 悲歌慷慨/null 悲泣/null 悲痛/null 悲痛欲绝/null 悲秋/null 悲苦/null 悲衷/null 悲观/null 悲观主义/null 悲观厌世/null 悲观失望/null 悲观论者/null 悲观论调/null 悲诉/null 悲辛/null 悲郁/null 悲酸/null 悲鸣/null 悴奴/null 悸动/null 悸愣/null 悸栗/null 悻悻/null 悻然/null 悼亡/null 悼唁/null 悼心失图/null 悼念/null 悼惜/null 悼文/null 悼歌/null 悼者/null 悼襄王/null 悼词/null 悼诗/null 悼辞/null 情不可却/null 情不自堪/null 情不自禁/null 情不自胜/null 情丝/null 情义/null 情之所钟/null 情书/null 情事/null 情人/null 情人眼里出西施/null 情人眼里有西施/null 情份/null 情何以堪/null 情侣/null 情侣鹦鹉/null 情儿/null 情关/null 情况/null 情况下/null 情况汇报/null 情分/null 情势/null 情史/null 情同一家/null 情同手足/null 情同骨肉/null 情同鱼水/null 情味/null 情商/null 情场/null 情境/null 情境模型/null 情夫/null 情妇/null 情孚意合/null 情形/null 情怀/null 情态/null 情思/null 情急/null 情急之下/null 情急了/null 情急智生/null 情意/null 情感/null 情愫/null 情愿/null 情投/null 情投意合/null 情投意洽/null 情报/null 情报体制/null 情报员/null 情报处/null 情报学/null 情报官员/null 情报局/null 情报工作/null 情报战/null 情报所/null 情报服务/null 情报机构/null 情报检索/null 情报活动/null 情报源/null 情报界/null 情报组织/null 情报统计/null 情报网/null 情报资料/null 情报部/null 情报部门/null 情操/null 情敌/null 情文/null 情文并茂/null 情景/null 情景交融/null 情暖/null 情曲/null 情有可原/null 情有独钟/null 情有西施/null 情杀/null 情欲/null 情歌/null 情比金坚/null 情海/null 情深/null 情深似海/null 情深友于/null 情深如海/null 情深意浓/null 情深骨肉/null 情火/null 情爱/null 情状/null 情狂/null 情理/null 情理难容/null 情由/null 情痴/null 情真/null 情真意切/null 情真意挚/null 情知/null 情种/null 情窦/null 情窦初开/null 情结/null 情绪/null 情绪化/null 情绪商数/null 情绪状态/null 情绪高涨/null 情缘/null 情网/null 情至/null 情至意尽/null 情致/null 情色/null 情节/null 情节严重/null 情节剧/null 情若手足/null 情蒐/null 情见乎言/null 情见乎词/null 情见乎辞/null 情见力屈/null 情见势屈/null 情见势竭/null 情诗/null 情话/null 情调/null 情谊/null 情资/null 情趣/null 情趣商店/null 情趣用品/null 情迷/null 情逾骨肉/null 情郎/null 情随事迁/null 情面/null 惆怅/null 惆怅若失/null 惆然/null 惊世骇俗/null 惊为/null 惊人/null 惊人之举/null 惊倒/null 惊动/null 惊动人/null 惊厥/null 惊叫/null 惊叹/null 惊叹不已/null 惊叹号/null 惊吓/null 惊呆/null 惊呼/null 惊喜/null 惊喜若狂/null 惊堂木/null 惊天/null 惊天动地/null 惊奇/null 惊师动众/null 惊异/null 惊弓之鸟/null 惊弦之鸟/null 惊得/null 惊心/null 惊心动魄/null 惊心胆颤/null 惊怕/null 惊怖/null 惊急/null 惊怪/null 惊怯/null 惊恐/null 惊恐万状/null 惊恐翼龙/null 惊悉/null 惊悚/null 惊悟/null 惊悸/null 惊惧/null 惊惶/null 惊惶失措/null 惊惶失色/null 惊惶无措/null 惊愕/null 惊慌/null 惊慌失措/null 惊慌失色/null 惊才绝艳/null 惊扰/null 惊服/null 惊栗/null 惊梦/null 惊涛/null 惊涛骇浪/null 惊现/null 惊疑/null 惊痫/null 惊羡/null 惊群动众/null 惊艳/null 惊蛇入草/null 惊蜇/null 惊视/null 惊觉/null 惊讶/null 惊诧/null 惊谔/null 惊赏/null 惊走/null 惊起/null 惊跑/null 惊跳/null 惊车/null 惊退/null 惊逃/null 惊遽/null 惊避/null 惊醒/null 惊采绝艳/null 惊错/null 惊险/null 惊雷/null 惊颤/null 惊风/null 惊风骇浪/null 惊飞/null 惊马/null 惊骇/null 惊魂/null 惊魂未定/null 惊魂甫定/null 惊鸟/null 惊鸿/null 惋惜/null 惑世盗名/null 惑乱/null 惑众/null 惑星/null 惑者/null 惕励/null 惕厉/null 惕然/null 惕而不漏/null 惘然/null 惘然如失/null 惘然若失/null 惘若有失/null 惛耄/null 惜别/null 惜力/null 惜售/null 惜墨如金/null 惜孤念寡/null 惜寸阴/null 惜指失掌/null 惜时如命/null 惜物/null 惜玉怜香/null 惜福/null 惜老怜贫/null 惜阴/null 惝恍/null 惟一/null 惟其/null 惟利是图/null 惟利是营/null 惟利是视/null 惟利是逐/null 惟命是从/null 惟命是听/null 惟妙惟肖/null 惟恐/null 惟恐天下不乱/null 惟我独尊/null 惟有/null 惟有读书高/null 惟独/null 惟精惟一/null 惟肖/null 惠东/null 惠临/null 惠予/null 惠农/null 惠农区/null 惠及/null 惠城/null 惠城区/null 惠子/null 惠存/null 惠安/null 惠山/null 惠山区/null 惠州/null 惠斯勒/null 惠斯特/null 惠施/null 惠普/null 惠普公司/null 惠更斯/null 惠来/null 惠民/null 惠水/null 惠河/null 惠济/null 惠济区/null 惠灵顿/null 惠然肯来/null 惠特妮・休斯顿/null 惠而不费/null 惠誉/null 惠赐/null 惠远寺/null 惠鉴/null 惠阳/null 惠阳区/null 惠阳地区/null 惠顾/null 惦念/null 惦挂/null 惦着/null 惦记/null 惦量/null 惧内/null 惧外/null 惧怕/null 惧色/null 惧高症/null 惧意/null 惧感/null 惨不忍睹/null 惨不忍闻/null 惨事/null 惨像/null 惨兮兮/null 惨况/null 惨剧/null 惨厉/null 惨变/null 惨叫/null 惨境/null 惨怛/null 惨惨/null 惨无人道/null 惨景/null 惨杀/null 惨案/null 惨死/null 惨毒/null 惨淡/null 惨淡经营/null 惨烈/null 惨然/null 惨然不乐/null 惨状/null 惨痛/null 惨白/null 惨相/null 惨祸/null 惨笑/null 惨绝人寰/null 惨绿少年/null 惨绿愁红/null 惨苦/null 惨败/null 惨遭/null 惨遭不幸/null 惨遭毒手/null 惨重/null 惩一儆众/null 惩一儆百/null 惩一戒百/null 惩一警百/null 惩前毖后/null 惩办/null 惩办主义/null 惩处/null 惩奖/null 惩忿窒欲/null 惩恶/null 惩恶劝善/null 惩戒/null 惩敛/null 惩治/null 惩治腐败/null 惩罚/null 惩罚性/null 惩诫/null 惫倦/null 惫懒/null 惫赖/null 惬当/null 惬心/null 惬怀/null 惬意/null 惭愧/null 惭色/null 惯了/null 惯于/null 惯例/null 惯偷/null 惯养/null 惯匪/null 惯升/null 惯坏/null 惯家/null 惯常/null 惯常于/null 惯性/null 惯性力/null 惯性定律/null 惯性系/null 惯手/null 惯技/null 惯挺/null 惯法/null 惯深/null 惯犯/null 惯用/null 惯用手/null 惯用法/null 惯用语/null 惯盗/null 惯窃/null 惯贼/null 惯量/null 惰性/null 惰性气体/null 想上/null 想不到/null 想不开/null 想不起/null 想不通/null 想买/null 想了/null 想从/null 想他/null 想以/null 想倒美/null 想做/null 想像/null 想像上/null 想像力/null 想儿/null 想入非非/null 想出/null 想到/null 想到此/null 想前顾后/null 想办法/null 想去/null 想吃/null 想吃天鹅肉/null 想后/null 想吐/null 想听/null 想在/null 想头/null 想好/null 想定/null 想家/null 想尽/null 想开/null 想当初/null 想当年/null 想当然/null 想得/null 想得到/null 想得开/null 想得美/null 想必/null 想念/null 想想/null 想想看/null 想我/null 想把/null 想方设法/null 想方设计/null 想望/null 想望风采/null 想来/null 想来想去/null 想法/null 想法子/null 想用/null 想着/null 想睡/null 想知/null 想知道/null 想等/null 想而/null 想要/null 想见/null 想说/null 想象/null 想象力/null 想象画/null 想起/null 想起来/null 想过/null 想通/null 想错/null 想问/null 惴惴/null 惴惴不安/null 惴栗/null 惶恐/null 惶恐不安/null 惶悚不安/null 惶惑/null 惶惶/null 惶惶不可终日/null 惶遽/null 惹下/null 惹不起/null 惹乱子/null 惹事/null 惹事招非/null 惹事生非/null 惹人/null 惹人厌/null 惹人心烦/null 惹人注意/null 惹人注目/null 惹出/null 惹喽子/null 惹娄子/null 惹得/null 惹怒/null 惹恼/null 惹是招非/null 惹是生非/null 惹是非/null 惹来/null 惹楼子/null 惹毛/null 惹气/null 惹火/null 惹火烧身/null 惹灾招祸/null 惹眼/null 惹祸/null 惹祸招愆/null 惹祸招殃/null 惹祸招灾/null 惹罪招愆/null 惹草拈花/null 惹草沾花/null 惹草沾风/null 惹草粘花/null 惹说/null 惹起/null 惹麻烦/null 惺忪/null 惺惺/null 惺惺作态/null 惺惺惜惺惺/null 惺惺相惜/null 惺松/null 愀然/null 愁云/null 愁云惭雾/null 愁容/null 愁容满面/null 愁山闷海/null 愁帽/null 愁思/null 愁眉/null 愁眉不展/null 愁眉泪眼/null 愁眉苦目/null 愁眉苦眼/null 愁眉苦脸/null 愁眉锁眼/null 愁红惨绿/null 愁绪/null 愁绪如麻/null 愁肠/null 愁肠九转/null 愁肠寸断/null 愁肠百结/null 愁苦/null 愁闷/null 愁雾/null 愁颜/null 愁颜不展/null 愆尤/null 愆期/null 愈加/null 愈发/null 愈合/null 愈复/null 愈大/null 愈好/null 愈小/null 愈差/null 愈描愈黑/null 愈易/null 愈是/null 愈显/null 愈来/null 愈来愈/null 愈来愈多/null 愈来愈少/null 愈来愈热/null 愈演愈烈/null 愈甚/null 愈益/null 愈能/null 愈长/null 愉快/null 愉悦/null 意上/null 意下/null 意下如何/null 意中/null 意中事/null 意中人/null 意为/null 意义/null 意义上/null 意义变化/null 意义深长/null 意乐/null 意乱/null 意乱心慌/null 意于/null 意亦为/null 意会/null 意做/null 意像/null 意兴/null 意兴索然/null 意兴阑珊/null 意切言尽/null 意切辞尽/null 意到/null 意匠/null 意即/null 意合情投/null 意向/null 意向书/null 意向性/null 意味/null 意味深长/null 意味着/null 意味著/null 意图/null 意在/null 意在沛公/null 意在笔先/null 意在言外/null 意境/null 意外/null 意外事/null 意外事故/null 意外险/null 意大利人/null 意大利式/null 意大利直面/null 意大利语/null 意大利青瓜/null 意大利面/null 意存笔先/null 意广才疏/null 意式浓缩咖啡/null 意往神驰/null 意得志满/null 意志/null 意志力/null 意志薄弱/null 意念/null 意态/null 意思/null 意思为/null 意思是/null 意急心忙/null 意想/null 意想不到/null 意惹情牵/null 意愿/null 意慵心懒/null 意懒心恢/null 意懒心慵/null 意扰心烦/null 意指/null 意攘心劳/null 意文/null 意料/null 意料之中/null 意料之外/null 意断恩绝/null 意旨/null 意欲/null 意气/null 意气扬扬/null 意气洋洋/null 意气用事/null 意气相倾/null 意气相合/null 意气相投/null 意气自得/null 意气自若/null 意气轩昂/null 意气风发/null 意涵/null 意淫/null 意满志得/null 意犹未尽/null 意符/null 意第绪语/null 意简/null 意绪/null 意者/null 意蕴/null 意表/null 意见/null 意见不合/null 意见书/null 意见沟通/null 意见箱/null 意见簿/null 意识/null 意识到/null 意识形态/null 意识形态领域/null 意识流/null 意译/null 意语/null 意说/null 意谓/null 意象/null 意趣/null 意转心回/null 意面/null 意马心猿/null 意马心辕/null 愕然/null 愚不可及/null 愚事/null 愚人/null 愚人节快乐/null 愚兄/null 愚公/null 愚公移山/null 愚公精神/null 愚勇/null 愚化/null 愚妄/null 愚孝/null 愚弄/null 愚弄者/null 愚弟/null 愚意/null 愚懦/null 愚拙/null 愚昧/null 愚昧无知/null 愚昧落后/null 愚民/null 愚民政策/null 愚氓/null 愚眉肉眼/null 愚笨/null 愚策/null 愚者/null 愚者千虑亦有一得/null 愚者千虑必有一得/null 愚者千虑或有一得/null 愚蒙/null 愚蠢/null 愚行/null 愚见/null 愚言/null 愚钝/null 愚附愚妇/null 愚陋/null 愚顽/null 愚騃/null 愚鲁/null 感人/null 感人心脾/null 感人肺肝/null 感人肺腑/null 感今怀昔/null 感伤/null 感佩/null 感光/null 感光剂/null 感光度/null 感光性/null 感光材料/null 感光片/null 感光纸/null 感光计/null 感兴趣/null 感冒/null 感冒药/null 感冒退热冲剂/null 感到/null 感到遗憾/null 感动/null 感动性/null 感化/null 感化所/null 感化院/null 感发/null 感受/null 感受力/null 感受器/null 感受性/null 感召/null 感召力/null 感叹/null 感叹句/null 感叹号/null 感叹词/null 感叹语/null 感同身受/null 感和/null 感喟/null 感天动地/null 感奋/null 感官/null 感应/null 感应器/null 感应电动势/null 感应电动机/null 感应电流/null 感应线圈/null 感念/null 感怀/null 感性/null 感性认识/null 感恩/null 感恩图报/null 感恩戴义/null 感恩戴德/null 感恩荷德/null 感悟/null 感情/null 感情上/null 感情甚笃/null 感情用事/null 感情脆弱/null 感想/null 感愤/null 感愧/null 感慨/null 感慨万千/null 感慨万端/null 感慨系之/null 感戴/null 感抗/null 感染/null 感染人数/null 感染力/null 感染性/null 感染性腹泻/null 感染率/null 感染者/null 感泣/null 感激/null 感激不尽/null 感激流涕/null 感激涕泗/null 感激涕零/null 感生/null 感生电流/null 感电/null 感知/null 感知力/null 感知觉/null 感纫/null 感觉/null 感觉上/null 感觉到/null 感觉力/null 感觉器/null 感觉器官/null 感觉性/null 感觉毛/null 感觉神经/null 感觉论/null 感触/null 感言/null 感谢/null 感谢信/null 感谢状/null 感遇/null 感遇诗/null 愠容/null 愠怒/null 愠色/null 愣了/null 愣住/null 愣劲儿/null 愣地/null 愣头儿青/null 愣头愣脑/null 愣干/null 愣愣/null 愣着/null 愣神/null 愣神儿/null 愣说/null 愤不顾身/null 愤世嫉俗/null 愤世嫉邪/null 愤发/null 愤富/null 愤怒/null 愤恨/null 愤愤/null 愤愤不平/null 愤慨/null 愤懑/null 愤气填膺/null 愤激/null 愤然/null 愤然而起/null 愤青/null 愧不敢当/null 愧作/null 愧咎/null 愧对/null 愧怍/null 愧恨/null 愧悔无地/null 愧歉/null 愧汗/null 愧疚/null 愧痛/null 愧色/null 愧赧/null 愧难见人/null 愿为/null 愿人/null 愿付/null 愿去/null 愿受/null 愿听/null 愿心/null 愿意/null 愿意不愿意/null 愿景/null 愿服从/null 愿望/null 愿留/null 愿给/null 愿者/null 愿者上钩/null 愿能/null 愿赌服输/null 愿闻/null 慈乌反哺/null 慈乌返哺/null 慈利/null 慈和/null 慈善/null 慈善事业/null 慈善家/null 慈善抽奖/null 慈善机构/null 慈善组织/null 慈姑/null 慈孙孝子/null 慈心/null 慈悲/null 慈悲为本/null 慈母/null 慈母心/null 慈江道/null 慈济/null 慈溪/null 慈照寺/null 慈爱/null 慈父/null 慈眉善目/null 慈眉善眼/null 慈石/null 慈祥/null 慈福行动/null 慈禧/null 慈禧太后/null 慈竹/null 慈霭/null 慈颜/null 慌不择路/null 慌乱/null 慌了/null 慌作一团/null 慌如隔世/null 慌张/null 慌张张/null 慌得/null 慌忙/null 慌恐/null 慌慌/null 慌慌不安/null 慌慌张张/null 慌手忙脚/null 慌手慌脚/null 慌淫无度/null 慌淫无耻/null 慌淫无道/null 慌渺不惊/null 慌神/null 慌神儿/null 慌谬绝伦/null 慌里慌张/null 慎之又慎/null 慎于/null 慎入/null 慎密/null 慎小谨微/null 慎微/null 慎思/null 慎思熟虑/null 慎独/null 慎用/null 慎终如始/null 慎终思远/null 慎终若始/null 慎终追远/null 慎行/null 慎言/null 慎谋/null 慎选/null 慎重/null 慎重从事/null 慎重考虑/null 慎防杜渐/null 慑服/null 慑物/null 慕光性/null 慕名/null 慕名而来/null 慕容/null 慕尼黑/null 慕道友/null 慢一点/null 慢下来/null 慢中子/null 慢么/null 慢了/null 慢件/null 慢动作/null 慢化剂/null 慢吃/null 慢吞吞/null 慢地/null 慢坡/null 慢城市/null 慢工出巧匠/null 慢工出细货/null 慢待/null 慢性/null 慢性子/null 慢性疼痛/null 慢性疾病/null 慢性病/null 慢悠悠/null 慢惊风/null 慢慢/null 慢慢儿/null 慢慢吃/null 慢慢吞吞/null 慢慢地/null 慢慢悠悠/null 慢慢来/null 慢慢的/null 慢慢腾腾/null 慢手/null 慢曲/null 慢条丝礼/null 慢条厮礼/null 慢条斯理/null 慢条斯礼/null 慢板/null 慢档/null 慢步/null 慢火/null 慢热型/null 慢煮/null 慢班/null 慢着/null 慢累积/null 慢脚/null 慢腾腾/null 慢藏诲盗/null 慢行/null 慢行道/null 慢词/null 慢说/null 慢走/null 慢跑/null 慢跑者/null 慢车/null 慢速/null 慢速摄影/null 慢镜头/null 慢长/null 慧心/null 慧心巧思/null 慧星/null 慧根/null 慧眼/null 慧黠/null 慨叹/null 慨然/null 慨然允诺/null 慨然应允/null 慨然领诺/null 慨解义囊/null 慰使/null 慰劳/null 慰勉/null 慰唁/null 慰安妇/null 慰抚/null 慰抚者/null 慰籍/null 慰藉/null 慰藉物/null 慰解/null 慰言/null 慰问/null 慰问信/null 慰问品/null 慰问团/null 慰问电/null 慰问袋/null 慰鸡之力/null 慵懒/null 慷他人之慨/null 慷慨/null 慷慨就义/null 慷慨悲歌/null 慷慨捐生/null 慷慨激扬/null 慷慨激昂/null 慷慨激烈/null 慷慨解囊/null 慷慨赴义/null 慷慨输将/null 慷慨陈词/null 憋不住/null 憋了/null 憋气/null 憋着/null 憋脚/null 憋闷/null 憎厌/null 憎恨/null 憎恶/null 憎称/null 憔悴/null 憧憧/null 憧憬/null 憨厚/null 憨头/null 憨子/null 憨实/null 憨态/null 憨态可掬/null 憨直/null 憨笑/null 憨脑/null 憨豆先生/null 憩儿/null 憩场/null 憩室/null 憩室炎/null 憩息/null 憩息处/null 憬悟/null 憬然/null 憷场/null 憷头/null 憾事/null 憾恨/null 懂事/null 懂局/null 懂得/null 懂的/null 懂行/null 懂门儿/null 懈弛/null 懈怠/null 懈惰/null 懈气/null 懊丧/null 懊恨/null 懊恼/null 懊悔/null 懊憹/null 懑然/null 懒于/null 懒人/null 懒作/null 懒做/null 懒办法/null 懒妇/null 懒得/null 懒得搭理/null 懒怠/null 懒惰/null 懒惰成性/null 懒惰者/null 懒惰虫/null 懒散/null 懒汉/null 懒洋洋/null 懒猫/null 懒腰/null 懒虫/null 懒觉/null 懒驴上磨屎尿多/null 懒骨头/null 懒鬼/null 懦夫/null 懦弱/null 懦怯/null 懮虑/null 懵懂/null 懵懵/null 懵懵懂懂/null 懵然/null 懿亲/null 懿旨/null 戆头戆脑/null 戆直/null 戆督/null 戈兰高地/null 戈壁/null 戈壁沙漠/null 戈壁滩/null 戈壁荒滩/null 戈尔/null 戈尔巴乔夫/null 戈德斯通/null 戈斯拉尔/null 戈林/null 戈比/null 戈矛/null 戊五醇/null 戊午/null 戊唑醇/null 戊型肝炎/null 戊夜/null 戊子/null 戊寅/null 戊巴比妥钠/null 戊戌/null 戊戌六君子/null 戊戌变法/null 戊戌政变/null 戊戌维新/null 戊烷/null 戊申/null 戊等/null 戊糖/null 戊级/null 戊辰/null 戊醇/null 戋戋/null 戌时/null 戌狗/null 戍卒/null 戍守/null 戍角/null 戍边/null 戎事/null 戎事倥偬/null 戎机/null 戎甲/null 戎行/null 戎衣/null 戎装/null 戎车/null 戎首/null 戎马/null 戎马一生/null 戎马倥偬/null 戎马生涯/null 戎马生郊/null 戏中/null 戏仿/null 戏侮/null 戏出儿/null 戏剧/null 戏剧化/null 戏剧家/null 戏剧性/null 戏剧等/null 戏剧般/null 戏单/null 戏台/null 戏嘻/null 戏团/null 戏园/null 戏园子/null 戏场/null 戏子/null 戏弄/null 戏弄者/null 戏报子/null 戏据性/null 戏文/null 戏是/null 戏曲/null 戏本/null 戏校/null 戏水/null 戏水者/null 戏法/null 戏照/null 戏班/null 戏的/null 戏目/null 戏码/null 戏票/null 戏种/null 戏耍/null 戏衣/null 戏装/null 戏言/null 戏评/null 戏词/null 戏说/null 戏说剧/null 戏谈/null 戏谑/null 戏路/null 戏迷/null 戏闹/null 戏院/null 戏馆子/null 成一家言/null 成丁/null 成个儿/null 成串/null 成为/null 成为必要/null 成也萧何/null 成也萧何败也萧何/null 成书/null 成了/null 成事/null 成事不说/null 成事不足/null 成事不足败事有余/null 成事在天/null 成交/null 成交价/null 成交量/null 成交额/null 成亲/null 成人/null 成人不自在/null 成人之美/null 成人教育/null 成人期/null 成仁/null 成仁取义/null 成仙/null 成份/null 成份股/null 成体/null 成何体统/null 成佛/null 成例/null 成俗/null 成倍/null 成倍增长/null 成像/null 成全/null 成军/null 成凤/null 成分/null 成列/null 成则为王败则为寇/null 成则为王败则为虏/null 成则为王败则为贼/null 成功/null 成功之路/null 成功之道/null 成功感/null 成功率/null 成功者/null 成功镇/null 成包/null 成化/null 成匹/null 成千/null 成千上万/null 成千成万/null 成千累万/null 成千论万/null 成华/null 成华区/null 成单/null 成单数/null 成卷/null 成双/null 成双作对/null 成双成对/null 成反比/null 成吉思汗/null 成名/null 成名作/null 成名成家/null 成员/null 成员国/null 成命/null 成品/null 成品机/null 成品油/null 成品率/null 成器/null 成因/null 成国渠/null 成圈/null 成均馆/null 成块/null 成型/null 成堆/null 成天/null 成套/null 成套设备/null 成妖作怪/null 成婚/null 成安/null 成家/null 成家立业/null 成家立计/null 成对/null 成就/null 成就感/null 成层/null 成山/null 成年/null 成年人/null 成年累月/null 成年组/null 成年者/null 成形/null 成心/null 成性/null 成总儿/null 成才/null 成才之路/null 成打/null 成批/null 成批生产/null 成报/null 成排/null 成效/null 成效显著/null 成数/null 成文/null 成文法/null 成文造句/null 成方/null 成方儿/null 成日/null 成昆铁路/null 成服/null 成本/null 成本上升/null 成本会计/null 成本核算/null 成本计算/null 成材/null 成材林/null 成林/null 成果/null 成果奖/null 成果鉴定/null 成样/null 成样子/null 成核/null 成正比/null 成武/null 成殓/null 成段/null 成比例/null 成气侯/null 成气候/null 成汉/null 成活/null 成活率/null 成渝/null 成渝铁路/null 成灾/null 成熟/null 成熟分裂/null 成熟期/null 成田/null 成田机场/null 成瘾/null 成癖/null 成百上千/null 成皋之战/null 成真/null 成眠/null 成矿/null 成矿作用/null 成礼/null 成穗率/null 成立/null 成章/null 成竹在胸/null 成精作怪/null 成约/null 成组/null 成组运输/null 成绩/null 成绩册/null 成绩卓然/null 成绩单/null 成绩斐然/null 成群/null 成群作队/null 成群结伙/null 成群结党/null 成群结队/null 成考移民/null 成舟/null 成色/null 成荫/null 成药/null 成虫/null 成蛹/null 成行/null 成衣/null 成表/null 成见/null 成规/null 成议/null 成话/null 成语/null 成语典故/null 成语接龙/null 成说/null 成象/null 成败/null 成败兴废/null 成败利钝/null 成败在此一举/null 成败得失/null 成败论人/null 成都体育大学/null 成长/null 成长中/null 成长率/null 成问题/null 成风/null 成骨/null 成骨不全症/null 成龙/null 成龙配套/null 我人/null 我以为/null 我们/null 我俩/null 我党/null 我哥/null 我国/null 我国人民/null 我国各族人民/null 我妈/null 我姐/null 我娃/null 我家/null 我怕/null 我总/null 我想/null 我教/null 我方/null 我校/null 我爸/null 我的/null 我等/null 我能/null 我自己/null 我行我素/null 我见犹怜/null 我走/null 我辈/null 我过我的独木桥/null 我醉欲眠/null 我队/null 我靠/null 戒严/null 戒严令/null 戒严区/null 戒严部队/null 戒书/null 戒刀/null 戒勉/null 戒去/null 戒命/null 戒坛/null 戒备/null 戒备森严/null 戒备状态/null 戒奢崇俭/null 戒子/null 戒尺/null 戒弃/null 戒律/null 戒心/null 戒忌/null 戒性/null 戒惧/null 戒慎/null 戒指/null 戒掉/null 戒条/null 戒毒/null 戒毒所/null 戒烟/null 戒牒/null 戒禁/null 戒绝/null 戒者/null 戒色/null 戒行/null 戒规/null 戒赌/null 戒酒/null 戒除/null 戒骄/null 戒骄戒躁/null 戕害/null 戕害不辜/null 戕贼/null 或不/null 或为/null 或之后/null 或以/null 或使/null 或则/null 或到/null 或去/null 或变/null 或否/null 或因/null 或在/null 或多或少/null 或大/null 或如/null 或将/null 或少/null 或当/null 或意/null 或早/null 或时/null 或明或暗/null 或是/null 或晚/null 或有/null 或有意/null 或然/null 或然性/null 或然率/null 或用/null 或由/null 或称/null 或者/null 或者是/null 或者说/null 或能/null 或许/null 或非/null 戗风/null 战不旋踵/null 战书/null 战乱/null 战争/null 战争与和平/null 战争初期/null 战争年代/null 战争状态/null 战争罪/null 战争罪犯/null 战争贩子/null 战争赔偿/null 战争边缘政策/null 战争追赔/null 战事/null 战云/null 战例/null 战俘/null 战兢/null 战兢兢/null 战具/null 战况/null 战刀/null 战列舰/null 战利品/null 战前/null 战力/null 战功/null 战勤/null 战区/null 战友/null 战台/null 战史/null 战后/null 战团/null 战国/null 战国七雄/null 战国时代/null 战国末/null 战国末年/null 战国策/null 战地/null 战场/null 战场形势/null 战场练兵/null 战壕/null 战壕热/null 战士/null 战备/null 战备值班/null 战备动员/null 战备等级/null 战备训练/null 战天斗地/null 战将/null 战局/null 战幕/null 战役/null 战后/null 战战兢兢/null 战战栗栗/null 战抖/null 战报/null 战斗/null 战斗不止/null 战斗任务/null 战斗侦察/null 战斗保障/null 战斗准备/null 战斗出动/null 战斗分队/null 战斗力/null 战斗化/null 战斗原则/null 战斗员/null 战斗序列/null 战斗性/null 战斗性能/null 战斗指挥/null 战斗支援/null 战斗教令/null 战斗机/null 战斗条令/null 战斗概则/null 战斗活动/null 战斗群/null 战斗者/null 战斗舰/null 战斗舰艇/null 战斗英雄/null 战斗详报/null 战斗运用/null 战斗部/null 战斗部队/null 战斗队形/null 战斧/null 战旗/null 战无不克/null 战无不胜/null 战时/null 战时共产主义/null 战时内阁/null 战术/null 战术上/null 战术家/null 战术导弹/null 战术核武器/null 战机/null 战果/null 战栗/null 战歌/null 战死/null 战法/null 战火/null 战火纷飞/null 战犯/null 战略/null 战略上/null 战略伙伴/null 战略储备/null 战略决策/null 战略后方/null 战略地位/null 战略夥伴/null 战略家/null 战略导弹/null 战略性/null 战略战术/null 战略方针/null 战略核力量/null 战略核武器/null 战略武器/null 战略物资/null 战略目标/null 战略要地/null 战略要点/null 战略转移/null 战略轰炸机/null 战略部署/null 战略重点/null 战略防御倡议/null 战神/null 战祸/null 战线/null 战绩/null 战者/null 战胜/null 战胜者/null 战舰/null 战船/null 战表/null 战袍/null 战讯/null 战评/null 战败/null 战车/null 战门性/null 战门机/null 战马/null 战鼓/null 戚凭/null 戚友/null 戚墅堰/null 戚墅堰区/null 戚属/null 戚戚/null 戚族/null 戚继光/null 戚谊/null 戛戛/null 戛戛独造/null 戛然/null 戛然而止/null 戛玉敲冰/null 戛玉敲金/null 戛玉锵金/null 戛玉鸣金/null 戛纳/null 戟指怒目/null 戡乱/null 戡乱平反/null 戡定/null 戢鳞潜翼/null 戥子/null 截住/null 截出/null 截击/null 截击机/null 截去/null 截发留宾/null 截取/null 截口/null 截听/null 截图/null 截塔/null 截头/null 截夺/null 截尾/null 截屏/null 截开/null 截成/null 截拦/null 截拳道/null 截掉/null 截收/null 截断/null 截断器/null 截止/null 截流/null 截然/null 截然不同/null 截煤机/null 截留/null 截瘫/null 截盘/null 截短/null 截程序/null 截稿/null 截线/null 截肢/null 截肢术/null 截至/null 截获/null 截趾适履/null 截距/null 截镫留鞭/null 截长补短/null 截门/null 截限/null 截面/null 戮伤/null 戮刺/null 戮力/null 戮力一心/null 戮力同心/null 戮力齐心/null 戮破/null 戮穿/null 戮记/null 戳不住/null 戳个儿/null 戳份儿/null 戳伤/null 戳儿/null 戳刺感/null 戳力/null 戳印/null 戳咕/null 戳壁脚/null 戳子/null 戳得住/null 戳心灌髓/null 戳搭/null 戳破/null 戳祸/null 戳穿/null 戳穿试验/null 戳脊梁/null 戳脊梁骨/null 戳记/null 戳进/null 戴上/null 戴了/null 戴以/null 戴假发/null 戴冠/null 戴发含齿/null 戴名世/null 戴圆履方/null 戴在/null 戴天/null 戴天履地/null 戴头/null 戴头巾/null 戴头识脸/null 戴套/null 戴奥辛/null 戴好/null 戴孝/null 戴安娜/null 戴安娜王妃/null 戴尔/null 戴帽/null 戴帽子/null 戴手镯/null 戴月/null 戴月披星/null 戴有色眼镜/null 戴桂冠/null 戴牢/null 戴白/null 戴盆望天/null 戴眼/null 戴眼镜/null 戴着/null 戴秉国/null 戴紧/null 戴维斯/null 戴维斯杯/null 戴维营/null 戴绿头巾/null 戴绿帽/null 戴绿帽子/null 戴罪图功/null 戴罪立功/null 戴胜/null 戴菊/null 戴菊鸟/null 戴表/null 戴面具/null 戴高乐/null 戴高帽儿/null 戴高帽子/null 戴鸡配豚/null 户下/null 户主/null 户内/null 户列簪缨/null 户别/null 户口/null 户口制/null 户口制度/null 户口簿/null 户名/null 户告人晓/null 户均/null 户外/null 户外活动/null 户头/null 户家/null 户对门当/null 户户/null 户政机关/null 户数/null 户枢/null 户枢不蠢/null 户枢不蠹/null 户牌/null 户牖/null 户籍/null 户给人足/null 户藉/null 户部/null 户部尚书/null 户长/null 户限/null 户限为穿/null 戽斗/null 戽水/null 戾气/null 戾龙/null 房下/null 房东/null 房主/null 房事/null 房产/null 房产中介/null 房产主/null 房产证/null 房价/null 房卡/null 房后/null 房地/null 房地产/null 房地美/null 房基/null 房契/null 房奴/null 房子/null 房子租/null 房客/null 房室/null 房屋/null 房屋中介/null 房山/null 房帖/null 房店/null 房捐/null 房改/null 房柁/null 房梁/null 房檐/null 房源/null 房牙/null 房牙子/null 房玄龄/null 房租/null 房租费/null 房管/null 房管局/null 房脊/null 房舍/null 房舱/null 房谋杜断/null 房贷/null 房贷银行/null 房费/null 房车/null 房钱/null 房门/null 房间/null 房顶/null 房魔/null 所不/null 所为/null 所乘/null 所云/null 所交/null 所付/null 所以/null 所以然/null 所伤/null 所住/null 所作/null 所作所为/null 所倡/null 所做/null 所写/null 所出/null 所列/null 所到之处/null 所剩/null 所剩无几/null 所办/null 所加/null 所占/null 所及/null 所发/null 所发现/null 所取/null 所受/null 所变/null 所向/null 所向披靡/null 所向无前/null 所向无敌/null 所向风靡/null 所含/null 所周知/null 所唱/null 所喜/null 所困/null 所图不轨/null 所在/null 所在之处/null 所在单位/null 所在地/null 所处/null 所外/null 所多/null 所多玛/null 所多玛与蛾摩拉/null 所失/null 所好/null 所存/null 所学/null 所定/null 所居/null 所属/null 所属单位/null 所希望/null 所带/null 所干/null 所幸/null 所建/null 所当/null 所征/null 所得/null 所得税/null 所思/null 所想/null 所感/null 所愿/null 所成/null 所托/null 所扣/null 所持/null 所指/null 所提/null 所提出/null 所携/null 所料/null 所有/null 所有主/null 所有人/null 所有制/null 所有权/null 所有格/null 所有物/null 所有者/null 所有这些/null 所未/null 所梦/null 所欠/null 所欲/null 所求/null 所派/null 所爱/null 所犯/null 所生/null 所用/null 所画/null 所知/null 所研/null 所示/null 所称/null 所穿/null 所立/null 所签/null 所经/null 所编/null 所罗巴伯/null 所罗门/null 所罗门群岛/null 所能/null 所至/null 所致/null 所获/null 所著/null 所要/null 所覆/null 所见/null 所见即所得/null 所见所闻/null 所言/null 所讲/null 所设/null 所说/null 所请/null 所谓/null 所购/null 所费/null 所费不资/null 所赚/null 所趋/null 所踏/null 所辖/null 所运/null 所迫/null 所述/null 所选/null 所造/null 所部/null 所里/null 所长/null 所长所至/null 所问/null 所闻/null 所附/null 所限/null 所难/null 所需/null 扁了/null 扁卷螺/null 扁圆/null 扁圆形/null 扁坯/null 扁头/null 扁平/null 扁平足/null 扁形/null 扁形动物/null 扁形动物门/null 扁形虫/null 扁扁/null 扁担/null 扁柏/null 扁桃/null 扁桃体/null 扁桃体炎/null 扁桃腺/null 扁桃腺炎/null 扁率/null 扁穴/null 扁舟/null 扁虫/null 扁虱/null 扁豆/null 扁钢/null 扁锉/null 扁锹形虫/null 扁长/null 扁额/null 扁食/null 扁骨/null 扁鹊/null 扂楔/null 扇人/null 扇具/null 扇动/null 扇区/null 扇子/null 扇形/null 扇枕温被/null 扇火止沸/null 扇状/null 扇状尾/null 扇贝/null 扇车/null 扇面/null 扇面儿/null 扇面琴/null 扇风/null 扇风点火/null 扇骨子/null 扈从/null 扉画/null 扉页/null 手上/null 手下/null 手下留情/null 手不停挥/null 手不稳/null 手不辍卷/null 手不释卷/null 手中/null 手中无权/null 手中有权/null 手举/null 手书/null 手交/null 手仗/null 手令/null 手儿/null 手册/null 手写/null 手写体/null 手写识别/null 手写辩识/null 手刃/null 手到/null 手到拈来/null 手到拿来/null 手到擒来/null 手到病除/null 手制/null 手制动/null 手刹车/null 手力/null 手动/null 手动变速器/null 手动挡/null 手劲/null 手势/null 手勤/null 手包/null 手印/null 手卷/null 手头/null 手头上/null 手头不便/null 手头字/null 手头现金/null 手夺/null 手套/null 手套箱/null 手嶌葵/null 手工/null 手工业/null 手工业品/null 手工业生产合作社/null 手工业社会主义改造/null 手工业者/null 手工业资本家/null 手工制/null 手工劳动/null 手工匠/null 手工台/null 手工工人/null 手工操作/null 手工艺/null 手工艺品/null 手工课/null 手巧/null 手巾/null 手帕/null 手底下/null 手式/null 手弹/null 手影/null 手心/null 手忙/null 手忙脚乱/null 手快/null 手急眼快/null 手性/null 手感/null 手慌脚乱/null 手戳/null 手打/null 手打字机/null 手扳葫芦/null 手扶/null 手扶拖拉机/null 手技/null 手抄/null 手抄本/null 手把/null 手把手/null 手抓羊肉/null 手拉手/null 手拉葫芦/null 手拉车/null 手拔/null 手拜/null 手拷/null 手拿/null 手拿包/null 手持/null 手指/null 手指印/null 手指头/null 手指头肚儿/null 手指字母/null 手挑选/null 手挥目送/null 手挽手/null 手掌/null 手掌状/null 手掣/null 手控/null 手推/null 手推磨/null 手推车/null 手提/null 手提包/null 手提式/null 手提电脑/null 手提箱/null 手搭凉棚/null 手携手/null 手摇/null 手摇车/null 手摇钻/null 手摇铃/null 手摇风琴/null 手旁/null 手无寸铁/null 手无缚鸡之力/null 手本/null 手札/null 手术/null 手术前/null 手术台/null 手术后/null 手机/null 手杖/null 手板/null 手板儿/null 手板葫芦/null 手枪/null 手柄/null 手植/null 手榴弹/null 手榴弹掷远/null 手模/null 手段/null 手民/null 手气/null 手法/null 手泽/null 手淫/null 手滑心慈/null 手炉/null 手爪/null 手版/null 手牵手/null 手环/null 手球/null 手生/null 手用/null 手电/null 手电筒/null 手画线/null 手疾眼快/null 手痒/null 手癣/null 手相/null 手相家/null 手相术/null 手眼/null 手稿/null 手笔/null 手紧/null 手纸/null 手纹/null 手织/null 手绢/null 手续/null 手续费/null 手编/null 手缝/null 手肘/null 手背/null 手胼足胝/null 手脖子/null 手脚/null 手脚无措/null 手腕/null 手腕子/null 手腕式/null 手腕式指北针/null 手臂/null 手舞足蹈/null 手艺/null 手艺人/null 手表/null 手表商/null 手袋/null 手订/null 手记/null 手语/null 手谈/null 手谕/null 手起刀落/null 手足/null 手足之情/null 手足亲情/null 手足口病/null 手足口症/null 手足失措/null 手足异处/null 手足无措/null 手足胼胝/null 手车/null 手轮/null 手软/null 手轻/null 手边/null 手迹/null 手部/null 手里/null 手重/null 手钏/null 手钻/null 手铐/null 手链/null 手锣/null 手锤/null 手锯/null 手镯/null 手长/null 手间/null 手闸/null 手雷/null 手面/null 手风琴/null 手饰/null 手鼓/null 才不/null 才人/null 才会/null 才使/null 才俊/null 才具/null 才兼文武/null 才分/null 才力/null 才华/null 才华出众/null 才华奔放/null 才华横溢/null 才华盖世/null 才可/null 才外流/null 才大难用/null 才女/null 才子/null 才子佳人/null 才学/null 才学兼优/null 才对/null 才将/null 才尽/null 才尽其用/null 才干/null 才广妨身/null 才德/null 才德兼备/null 才思/null 才怪/null 才情/null 才是/null 才智/null 才有/null 才望/null 才来/null 才气/null 才气无双/null 才气过人/null 才然/null 才略/null 才疏学浅/null 才疏德薄/null 才疏志大/null 才疏意广/null 才疏计拙/null 才知自/null 才短气粗/null 才秀人微/null 才算/null 才者/null 才能/null 才艺/null 才艺技能/null 才艺秀/null 才蔽识浅/null 才行/null 才被/null 才识/null 才识过人/null 才貌/null 才貌双全/null 才贯二酉/null 才轻德厚/null 才过屈宋/null 才高八斗/null 才高意广/null 才高行厚/null 才高行洁/null 扎以尔/null 扎伊尔/null 扎伊尔人/null 扎伊尔河/null 扎伤/null 扎住/null 扎克雷起义/null 扎入/null 扎兰屯/null 扎啤/null 扎囊/null 扎堆/null 扎实/null 扎实推进/null 扎寨/null 扎小辫/null 扎尔达里/null 扎工/null 扎布机/null 扎幌市/null 扎手/null 扎手舞脚/null 扎扎/null 扎扎实实/null 扎挣/null 扎捆/null 扎根/null 扎格罗斯/null 扎格罗斯山脉/null 扎欧扎翁/null 扎款/null 扎牢/null 扎猛子/null 扎痛/null 扎眼/null 扎稳打/null 扎穿/null 扎紧/null 扎纸/null 扎线带/null 扎耳朵/null 扎花/null 扎营/null 扎襄/null 扎赉特/null 扎辫子/null 扎进/null 扎针/null 扎钢/null 扎马剌丁/null 扎马鲁丁/null 扎鲁特/null 扑住/null 扑作教刑/null 扑倒/null 扑克/null 扑克牌/null 扑克脸/null 扑出/null 扑到/null 扑动/null 扑去/null 扑向/null 扑哧/null 扑在/null 扑地/null 扑扇/null 扑打/null 扑救/null 扑朔/null 扑朔迷离/null 扑杀/null 扑杀此獠/null 扑棱/null 扑楞/null 扑满/null 扑火/null 扑灭/null 扑灭者/null 扑灯蛾子/null 扑空/null 扑簌/null 扑簌簌/null 扑粉/null 扑翼/null 扑脸儿/null 扑腾/null 扑虎/null 扑虎儿/null 扑跌/null 扑通/null 扑闪/null 扑面/null 扑面而来/null 扑鼻/null 扑鼻而来/null 扒出/null 扒地/null 扒头儿/null 扒寻/null 扒开/null 扒手/null 扒拉/null 扒搂/null 扒灰/null 扒犁/null 扒皮/null 扒窃/null 扒粪/null 扒糕/null 扒起/null 扒车/null 扒钉/null 扒高踩低/null 扒鸡/null 扒鸭/null 打上/null 打下/null 打下手/null 打不/null 打不动/null 打不垮/null 打不着/null 打不起精神/null 打不过/null 打不通/null 打个/null 打个照面/null 打中/null 打主意/null 打乱/null 打了/null 打井/null 打交/null 打交道/null 打人/null 打人骂狗/null 打从/null 打仗/null 打以/null 打价/null 打伙儿/null 打伞/null 打伤/null 打住/null 打作/null 打佯儿/null 打保票/null 打信号/null 打倒/null 打假/null 打先锋/null 打光/null 打光棍/null 打兑/null 打兔子/null 打入/null 打入冷宫/null 打冲锋/null 打冷战/null 打冷枪/null 打冷颤/null 打凤捞龙/null 打凤牢龙/null 打出/null 打出吊入/null 打出手/null 打击/null 打击乐器/null 打击军事力量/null 打击报复/null 打击社会财富/null 打分/null 打到/null 打制/null 打制石器/null 打前失/null 打前站/null 打动/null 打劫/null 打勤献趣/null 打勾/null 打勾勾/null 打包/null 打包机/null 打千/null 打卡/null 打卦/null 打印/null 打印台/null 打印头/null 打印服务器/null 打印机/null 打印纸/null 打去/null 打发/null 打发时间/null 打叠/null 打口/null 打听/null 打听好/null 打吵子/null 打呵欠/null 打呼/null 打呼噜/null 打哄/null 打哆嗦/null 打哈/null 打哈哈/null 打哈哈儿/null 打哈欠/null 打响/null 打响名号/null 打哑语/null 打啵/null 打喳喳/null 打喷/null 打喷嚏/null 打嗝/null 打嗝儿/null 打嘴/null 打嘴巴/null 打噎/null 打嚏喷/null 打围/null 打圆场/null 打圈子/null 打在/null 打地铺/null 打场/null 打坏/null 打坐/null 打垮/null 打埋伏/null 打基础/null 打声/null 打天下/null 打夯/null 打头/null 打头阵/null 打头风/null 打奔儿/null 打奶/null 打好/null 打孔/null 打孔器/null 打孔机/null 打孔钻/null 打字/null 打字员/null 打字本/null 打字机/null 打官司/null 打官腔/null 打官话/null 打定/null 打定主意/null 打家劫盗/null 打家劫舍/null 打家截道/null 打富济贫/null 打对仗/null 打对台/null 打小报告/null 打小算盘/null 打小鼓儿的/null 打尖/null 打屁/null 打屁投/null 打屁股/null 打层次/null 打岔/null 打工/null 打工仔/null 打工妹/null 打平/null 打底/null 打底子/null 打开/null 打开天窗说亮话/null 打弹子/null 打得/null 打得火热/null 打心眼里/null 打总儿/null 打情骂俏/null 打愣儿/null 打成/null 打成一片/null 打成平手/null 打我/null 打战/null 打扇/null 打手/null 打手势/null 打手枪/null 打手语/null 打扑/null 打扑克/null 打扫/null 打扫卫生/null 打扫工/null 打扫战场/null 打扮/null 打扰/null 打把势/null 打把式/null 打抖/null 打折/null 打折扣/null 打抱不平/null 打抽丰/null 打拍/null 打拍子/null 打招/null 打招呼/null 打拱/null 打拱作揖/null 打拳/null 打拼/null 打挺儿/null 打捞/null 打捞船/null 打掉/null 打探/null 打掩护/null 打援/null 打搅/null 打摆子/null 打擂台/null 打散/null 打整/null 打斋/null 打斗/null 打斜/null 打断/null 打旋/null 打旋儿/null 打旋磨儿/null 打旗号/null 打昏/null 打春/null 打晃/null 打晃儿/null 打晕/null 打更/null 打杀/null 打杂/null 打杂儿/null 打杈/null 打来/null 打来回/null 打枪/null 打架/null 打架斗殴/null 打柴/null 打校样/null 打样/null 打格子/null 打桩/null 打桩机/null 打棉机/null 打棍/null 打棍子/null 打棚/null 打榧子/null 打横/null 打横炮/null 打歪/null 打死/null 打死打伤/null 打死老虎/null 打歼灭战/null 打比/null 打气/null 打气筒/null 打水/null 打水漂/null 打油/null 打油诗/null 打法/null 打泡/null 打洞/null 打流/null 打浆/null 打浆机/null 打浑/null 打消/null 打消心意/null 打混/null 打游击/null 打滑/null 打滚/null 打滚撒泼/null 打火/null 打火机/null 打火石/null 打灰/null 打炮/null 打点/null 打点子/null 打点行装/null 打烂/null 打烊/null 打爆/null 打牌/null 打牙撂嘴/null 打牙犯嘴/null 打牙祭/null 打狗/null 打狗欺主/null 打猎/null 打球/null 打理/null 打瓜/null 打电报/null 打电话/null 打痛/null 打白条/null 打的/null 打皱/null 打盹/null 打盹儿/null 打眼/null 打眼放炮/null 打着/null 打瞌睡/null 打短儿/null 打短工/null 打破/null 打破常规/null 打破沙锅问到底/null 打破碗花花/null 打破纪录/null 打破记录/null 打砸抢/null 打碎/null 打磕睡/null 打磨/null 打票/null 打禅/null 打秋风/null 打稻机/null 打稿/null 打稿子/null 打箍/null 打算/null 打算盘/null 打簧表/null 打紧/null 打结/null 打绳节/null 打网/null 打群架/null 打翻/null 打翻身仗/null 打耳光/null 打肿/null 打肿脸充胖子/null 打背躬/null 打胎/null 打胜/null 打胜仗/null 打脚/null 打苞/null 打草/null 打草惊蛇/null 打药/null 打落/null 打落水狗/null 打著/null 打虫/null 打虫药/null 打蛇不死/null 打蛇打七寸/null 打蛋/null 打蜡/null 打街骂巷/null 打表/null 打褶/null 打诨/null 打诨插科/null 打谎/null 打谱/null 打谷/null 打谷场/null 打谷机/null 打败/null 打赌/null 打赖/null 打赢/null 打赤脚/null 打起/null 打起精神/null 打趣/null 打趣话/null 打趸儿/null 打跑/null 打跟头/null 打蹦儿/null 打躬/null 打躬作揖/null 打车/null 打转/null 打边炉/null 打边鼓/null 打过/null 打进/null 打连厢/null 打退/null 打退堂鼓/null 打通/null 打通关/null 打通宵/null 打造/null 打道/null 打道回府/null 打酒/null 打酱油/null 打醮/null 打野外/null 打野战/null 打野炮/null 打量/null 打针/null 打钩/null 打钱/null 打铁/null 打错/null 打锣/null 打长工/null 打长途/null 打门/null 打问/null 打问讯/null 打闷雷/null 打闹/null 打雪仗/null 打零/null 打雷/null 打靶/null 打靶场/null 打顶/null 打顿/null 打顿儿/null 打颤/null 打飞机/null 打食/null 打饥荒/null 打马虎眼/null 打骂/null 打高/null 打高尔夫/null 打高尔夫球/null 打鬼/null 打鱼/null 打鸟/null 打鸡血/null 打鸣儿/null 打黑/null 打鼓/null 打鼓儿的/null 打鼾/null 打鼾者/null 扔下/null 扔了/null 扔出/null 扔到/null 扔向/null 扔回/null 扔在/null 扔弃/null 扔掉/null 扔球/null 扔给/null 扔进/null 托交/null 托人/null 托人情/null 托付/null 托偶/null 托儿/null 托儿所/null 托克托/null 托克逊/null 托出/null 托利党人/null 托办/null 托勒密/null 托勒密王/null 托勒玫/null 托叶/null 托名/null 托塔天王/null 托媒/null 托子/null 托孤/null 托孤寄命/null 托尔斯泰/null 托尔金/null 托幼/null 托庇/null 托情/null 托拉博拉/null 托拉尔/null 托拉斯/null 托收/null 托收承付/null 托故/null 托期/null 托木尔/null 托木尔峰/null 托板/null 托枪/null 托架/null 托梁/null 托梦/null 托洛茨基/null 托洛茨基主义/null 托派/null 托熟/null 托物/null 托物寓兴/null 托特/null 托生/null 托病/null 托盘/null 托着/null 托福/null 托称/null 托管/null 托管制度/null 托管地/null 托给/null 托罗斯山/null 托老所/null 托腮/null 托莱多/null 托词/null 托说/null 托足无门/null 托辞/null 托运/null 托运行李/null 托里/null 托里拆利/null 托钵/null 托钵修会/null 托钵僧/null 托销/null 托陈取消派/null 托鞋/null 托马斯/null 托马斯・哈代/null 托马斯・斯特恩斯・艾略特/null 托马斯・阿奎纳/null 托马斯主义/null 扛大个儿/null 扛扛/null 扛活/null 扛着/null 扛起/null 扛长工/null 扛鼎拔山/null 扣上/null 扣下/null 扣交/null 扣人/null 扣人心弦/null 扣件/null 扣住/null 扣作/null 扣儿/null 扣关/null 扣减/null 扣出/null 扣击/null 扣分/null 扣到/null 扣动/null 扣压/null 扣去/null 扣发/null 扣在/null 扣头/null 扣女/null 扣好/null 扣子/null 扣屎盔子/null 扣帽子/null 扣应/null 扣式电池/null 扣得/null 扣心泣血/null 扣手/null 扣扣/null 扣押/null 扣押人/null 扣押者/null 扣掉/null 扣杀/null 扣查/null 扣款/null 扣牢/null 扣环/null 扣球/null 扣留/null 扣眼/null 扣眼儿/null 扣着/null 扣税/null 扣篮/null 扣紧/null 扣紧物/null 扣缴/null 扣肉/null 扣襻/null 扣货/null 扣针/null 扣链/null 扣锁/null 扣除/null 扣除额/null 扣鞋/null 扣题/null 扦子/null 扦手/null 扦插/null 执业/null 执两用中/null 执事/null 执勤/null 执友/null 执委会/null 执导/null 执念/null 执意/null 执拗/null 执拾/null 执掌/null 执政/null 执政党/null 执政官/null 执政方式/null 执政者/null 执政能力/null 执教/null 执柯作伐/null 执法/null 执法不严/null 执法如山/null 执法必严/null 执法犯法/null 执泥/null 执照/null 执照税/null 执牛耳/null 执白/null 执着/null 执笔/null 执笔人/null 执绋/null 执而不化/null 执著/null 执行/null 执行主席/null 执行人/null 执行任务/null 执行委员会/null 执行官/null 执行情况/null 执行指挥官/null 执行者/null 执行长/null 执言/null 执达员/null 执迷/null 执迷不悟/null 执鞭/null 执鞭坠镫/null 执鞭随镫/null 执黑/null 扩为/null 扩充/null 扩军/null 扩军备战/null 扩军计划/null 扩印/null 扩及/null 扩增/null 扩增实境/null 扩大/null 扩大会/null 扩大会议/null 扩大其词/null 扩大再生产/null 扩大出口/null 扩大化/null 扩大器/null 扩大机/null 扩大生产/null 扩孔/null 扩容/null 扩展/null 扩展到/null 扩展名/null 扩展性/null 扩延/null 扩建/null 扩建工程/null 扩张/null 扩张主义/null 扩张主义者/null 扩张政策/null 扩征/null 扩散/null 扩散泵/null 扩版/null 扩用/null 扩界/null 扩编/null 扩股/null 扩胸器/null 扩音/null 扩音器/null 扩音机/null 扩频/null 扩频通信/null 扪参历井/null 扪心/null 扪心无愧/null 扪心自问/null 扪虱而言/null 扪隙发罅/null 扫倒/null 扫光/null 扫兴/null 扫出/null 扫刮/null 扫到/null 扫去/null 扫听/null 扫地/null 扫地以尽/null 扫地俱尽/null 扫地出门/null 扫地无余/null 扫墓/null 扫射/null 扫尾/null 扫帚/null 扫帚星/null 扫帚菜/null 扫平/null 扫房/null 扫把/null 扫把星/null 扫掠/null 扫描/null 扫描仪/null 扫描器/null 扫数/null 扫榻/null 扫榻以待/null 扫毒/null 扫清/null 扫灭/null 扫田刮地/null 扫盲/null 扫眉才子/null 扫瞄/null 扫穴犁庭/null 扫罗/null 扫荡/null 扫荡腿/null 扫街/null 扫视/null 扫边/null 扫过/null 扫除/null 扫除天下/null 扫除机/null 扫雪/null 扫雪车/null 扫雷/null 扫雷坦克/null 扫雷战/null 扫雷舰/null 扫雷艇/null 扫黄/null 扫黄打非/null 扫黄运动/null 扬上/null 扬中/null 扬剧/null 扬厉/null 扬名/null 扬名后世/null 扬名四海/null 扬名显亲/null 扬名显姓/null 扬善/null 扬善抑恶/null 扬嘴/null 扬场/null 扬场机/null 扬声/null 扬声器/null 扬威/null 扬威耀武/null 扬子/null 扬子江/null 扬子鳄/null 扬州/null 扬己露才/null 扬帆/null 扬幡招魂/null 扬幡擂鼓/null 扬弃/null 扬手/null 扬扬/null 扬扬得意/null 扬扬自得/null 扬抑格/null 扬旗/null 扬榷/null 扬水/null 扬水站/null 扬汤止沸/null 扬清抑浊/null 扬清激浊/null 扬琴/null 扬眉/null 扬眉吐气/null 扬眉奋髯/null 扬眉抵掌/null 扬砂走石/null 扬科维奇/null 扬程/null 扬花/null 扬菜/null 扬葩振藻/null 扬言/null 扬谷/null 扬起/null 扬铃打鼓/null 扬锣捣鼓/null 扬镳/null 扬镳分路/null 扬长/null 扬长而去/null 扬长补短/null 扬长避短/null 扬雄/null 扬鞭/null 扭下/null 扭了/null 扭亏/null 扭亏为盈/null 扭亏为赢/null 扭亏增盈/null 扭伤/null 扭住/null 扭倒/null 扭出/null 扭力/null 扭力天平/null 扭动/null 扭卷/null 扭去/null 扭回/null 扭头/null 扭头别项/null 扭开/null 扭弯/null 扭得/null 扭成/null 扭手扭脚/null 扭打/null 扭扭/null 扭扭乐/null 扭扭捏捏/null 扭捏/null 扭搭/null 扭摆/null 扭斗/null 扭断/null 扭是为非/null 扭曲/null 扭曲作直/null 扭歪/null 扭痛/null 扭着/null 扭矩/null 扭秤/null 扭秧歌/null 扭紧/null 扭结/null 扭绞/null 扭绞者/null 扭股/null 扭股儿糖/null 扭脸/null 扭腰/null 扭角羚/null 扭身/null 扭转/null 扭转乾坤/null 扭转局面/null 扭转形变/null 扭送/null 扮个/null 扮作/null 扮做/null 扮像/null 扮得/null 扮戏/null 扮成/null 扮演/null 扮演者/null 扮男/null 扮白/null 扮相/null 扮装/null 扮装皇后/null 扮鬼/null 扯上/null 扯下/null 扯了/null 扯住/null 扯倒/null 扯到/null 扯去/null 扯后腿/null 扯嗓子/null 扯家常/null 扯平/null 扯开/null 扯后/null 扯成/null 扯手/null 扯拉/null 扯掉/null 扯断/null 扯旗/null 扯淡/null 扯白/null 扯皮/null 扯直/null 扯着/null 扯破/null 扯碎/null 扯离/null 扯空砑光/null 扯篷拉纤/null 扯裂/null 扯谈/null 扯谎/null 扯起/null 扯起来/null 扯进/null 扯远/null 扯铃/null 扯闲/null 扯鼓夺旗/null 扰乱/null 扰乱性/null 扰动/null 扰嚷/null 扰扰/null 扰攘/null 扰民/null 扰流板/null 扰频/null 扳不倒儿/null 扳价/null 扳动/null 扳回/null 扳头/null 扳子/null 扳平/null 扳开/null 扳手/null 扳指儿/null 扳本/null 扳本儿/null 扳机/null 扳紧/null 扳罾/null 扳道/null 扳道员/null 扳道岔/null 扳钳/null 扳闸/null 扳龙附凤/null 扶乩/null 扶他林/null 扶住/null 扶余/null 扶倾济弱/null 扶养/null 扶养者/null 扶养费/null 扶助/null 扶危/null 扶危定乱/null 扶危定倾/null 扶危拯溺/null 扶危救困/null 扶危济困/null 扶危翼倾/null 扶善惩恶/null 扶墙/null 扶墙摸壁/null 扶壁/null 扶她/null 扶弱助残/null 扶弱抑强/null 扶恤金/null 扶手/null 扶手椅/null 扶持/null 扶掖/null 扶揄/null 扶摇/null 扶摇直上/null 扶栏/null 扶桑/null 扶梯/null 扶椅/null 扶植/null 扶正/null 扶正压邪/null 扶正祛邪/null 扶正黜邪/null 扶沟/null 扶清灭洋/null 扶灵/null 扶犁/null 扶疏/null 扶病/null 扶直/null 扶着/null 扶箕/null 扶织/null 扶绥/null 扶老携幼/null 扶苗/null 扶贫/null 扶贫济困/null 扶起/null 扶轮社/null 扶鞍上马/null 扶颠持危/null 扶风/null 扶馀/null 扶鸾/null 批亢捣虚/null 批件/null 批价/null 批假/null 批八字/null 批准/null 批准书/null 批准者/null 批判/null 批判地/null 批判实在论/null 批判现实主义/null 批判者/null 批办/null 批发/null 批发业/null 批发价/null 批发价格/null 批发商/null 批发市场/null 批发部/null 批号/null 批命/null 批哩啪啦/null 批回/null 批处理/null 批复/null 批审/null 批改/null 批文/null 批斗/null 批条/null 批条子/null 批次/null 批死/null 批毛求疵/null 批汇/null 批注/null 批流年/null 批点/null 批示/null 批红判白/null 批给/null 批荡/null 批萨/null 批覆/null 批评/null 批评与自我批评/null 批评家/null 批评性/null 批评指正/null 批评者/null 批语/null 批货/null 批购/null 批转/null 批郤导窾/null 批量/null 批量生产/null 批量购买/null 批阅/null 批颊/null 批风抹月/null 批驳/null 批验/null 扼住/null 扼制/null 扼吭拊背/null 扼喉抚背/null 扼守/null 扼杀/null 扼杀者/null 扼死/null 扼流圈/null 扼腕/null 扼臂/null 扼襟控咽/null 扼要/null 扼颈/null 找上门/null 找上门来/null 找不到/null 找不着/null 找不着北/null 找不自在/null 找个/null 找了/null 找事/null 找些/null 找人/null 找他/null 找借口/null 找准/null 找出/null 找到/null 找到了/null 找刺儿/null 找台阶儿/null 找回/null 找头/null 找对象/null 找寻/null 找岔子/null 找工作/null 找平/null 找得着/null 找我/null 找找/null 找时/null 找机会/null 找来/null 找死/null 找点事干/null 找点活干/null 找病/null 找着/null 找碴/null 找碴儿/null 找空/null 找窍门/null 找缝子/null 找茬/null 找茬儿/null 找补/null 找话/null 找谁/null 找辙/null 找还/null 找遍/null 找那/null 找钱/null 找错/null 找饭碗/null 找麻烦/null 找齐/null 承上启下/null 承上起下/null 承乏/null 承付/null 承佃/null 承保人/null 承做/null 承先启后/null 承先启后/null 承兑/null 承兑人/null 承兑汇票/null 承典/null 承典人/null 承制/null 承前启后/null 承办/null 承办人/null 承办商/null 承办者/null 承包/null 承包人/null 承包制/null 承包商/null 承包工程/null 承包经营/null 承包经营责任制/null 承包者/null 承包责任制/null 承包费/null 承印/null 承发包/null 承受/null 承受不住/null 承受人/null 承受力/null 承受能力/null 承台/null 承头/null 承审员/null 承审法官/null 承尘/null 承平/null 承应/null 承建/null 承当/null 承德/null 承德地区/null 承心/null 承情/null 承扶/null 承担/null 承担义务/null 承担人/null 承担者/null 承担责任/null 承接/null 承揽/null 承望/null 承欢/null 承欢献媚/null 承欢膝下/null 承溜/null 承租/null 承租人/null 承租方/null 承籍/null 承继/null 承蒙/null 承蒙关照/null 承袭/null 承认/null 承认书/null 承认控罪/null 承认者/null 承认错误/null 承让/null 承让人/null 承诺/null 承诺人/null 承购/null 承转/null 承载/null 承载力/null 承运/null 承运人/null 承造/null 承重/null 承重孙/null 承销/null 承销人/null 承销价差/null 承销利差/null 承销品/null 承销商/null 承销团/null 承销店/null 承销货物/null 承面/null 承顺/null 承题/null 承颜候色/null 承风希旨/null 技俩/null 技击/null 技压群芳/null 技压群雄/null 技嘉/null 技士/null 技工/null 技工学校/null 技工贸/null 技巧/null 技巧运动/null 技师/null 技措/null 技改/null 技术/null 技术上/null 技术交流/null 技术人员/null 技术作物/null 技术发展/null 技术员/null 技术咨询/null 技术学校/null 技术室/null 技术家/null 技术开发部/null 技术性/null 技术情报/null 技术所限/null 技术指导/null 技术援助/null 技术故障/null 技术标准/null 技术潜水/null 技术知识/null 技术科/null 技术装备/null 技术规范/null 技术革命/null 技术革新/null 技校/null 技法/null 技痒/null 技穷/null 技能/null 技能上/null 技能检定/null 技艺/null 技艺家/null 技贸/null 技高一筹/null 抃悦/null 抃掌/null 抄书/null 抄件/null 抄公/null 抄写/null 抄写员/null 抄写者/null 抄列/null 抄发/null 抄后路/null 抄回/null 抄在/null 抄家/null 抄录/null 抄手/null 抄抄/null 抄报/null 抄收/null 抄斩/null 抄本/null 抄查/null 抄用/null 抄纸/null 抄网/null 抄获/null 抄袭/null 抄走/null 抄身/null 抄近/null 抄近儿/null 抄近路/null 抄送/null 抄送单位/null 抄造/null 抄道/null 抄集/null 抉择/null 抉搞/null 抉摘/null 抉瑕掩瑜/null 把你/null 把儿/null 把兄弟/null 把关/null 把势/null 把头/null 把好/null 把妹/null 把子/null 把守/null 把家/null 把尿/null 把弄/null 把式/null 把总/null 把戏/null 把手/null 把持/null 把持不定/null 把持住/null 把捉/null 把握/null 把揽/null 把斋/null 把柄/null 把牢/null 把玩/null 把玩无厌/null 把盏/null 把稳/null 把素持斋/null 把脉/null 把臂入林/null 把舵/null 把袂/null 把酒/null 把门/null 把风/null 把饭叫饥/null 抑且/null 抑低/null 抑制/null 抑制作用/null 抑制剂/null 抑制器/null 抑制物/null 抑制者/null 抑制酶/null 抑压/null 抑压器/null 抑压者/null 抑塞磊落/null 抑强扶弱/null 抑恶扬善/null 抑或/null 抑扬/null 抑扬升降性/null 抑扬格/null 抑扬顿挫/null 抑抑/null 抑是/null 抑格/null 抑止/null 抑素/null 抑菌/null 抑菌作用/null 抑贬/null 抑郁/null 抑郁不乐/null 抑郁不平/null 抑郁寡欢/null 抑郁症/null 抑音/null 抒写/null 抒发/null 抒怀/null 抒情/null 抒情诗/null 抒意/null 抒解/null 抓举/null 抓了/null 抓人/null 抓伤/null 抓住/null 抓出/null 抓到/null 抓力/null 抓功夫/null 抓包/null 抓去/null 抓取/null 抓取程序/null 抓哏/null 抓地/null 抓地力/null 抓头挖耳/null 抓好/null 抓子儿/null 抓尖要强/null 抓工夫/null 抓差/null 抓得/null 抓手/null 抓拍/null 抓挠/null 抓捕/null 抓掀/null 抓握/null 抓斗/null 抓点/null 抓牢/null 抓狂/null 抓痒/null 抓痕/null 抓着/null 抓瞎/null 抓破/null 抓破脸/null 抓空子/null 抓紧/null 抓紧学习/null 抓紧抓好/null 抓紧时间/null 抓纲/null 抓耳挠腮/null 抓耳搔腮/null 抓背用/null 抓膘/null 抓苗头/null 抓茬儿/null 抓药/null 抓获/null 抓词/null 抓贼/null 抓赌/null 抓走/null 抓起/null 抓辫子/null 抓过/null 抓钩/null 抓阄/null 抓阄儿/null 抓饭/null 抓髻/null 投下/null 投中/null 投书/null 投于/null 投井/null 投井下石/null 投产/null 投亲/null 投亲靠友/null 投以/null 投保/null 投保人/null 投保方/null 投信/null 投光灯/null 投入/null 投入产出/null 投入市场/null 投入生产/null 投其所好/null 投军/null 投出/null 投击/null 投函/null 投到/null 投去/null 投合/null 投向/null 投回/null 投壶/null 投契/null 投奔/null 投宿/null 投宿者/null 投寄/null 投射/null 投射物/null 投山窜海/null 投币/null 投币口/null 投币孔/null 投师/null 投店/null 投弃/null 投弹/null 投弹员/null 投弹手/null 投影/null 投影中心/null 投影仪/null 投影几何/null 投影几何学/null 投影图/null 投影机/null 投影线/null 投影面/null 投怀送抱/null 投戈讲艺/null 投手/null 投报/null 投掷/null 投掷者/null 投放/null 投放市场/null 投效/null 投敌/null 投料/null 投明/null 投木报琼/null 投机/null 投机买卖/null 投机倒把/null 投机取巧/null 投机商/null 投机者/null 投杀/null 投杼之感/null 投杼之疑/null 投杼市虎/null 投枪/null 投标/null 投标人/null 投标者/null 投栏/null 投桃之报/null 投桃报李/null 投案/null 投案自首/null 投梭/null 投梭折齿/null 投水/null 投河/null 投河奔井/null 投河觅井/null 投注/null 投海/null 投环/null 投球/null 投生/null 投畀豺虎/null 投看/null 投石/null 投石下井/null 投石問路/null 投石器/null 投石者/null 投石问路/null 投硬币/null 投票/null 投票人/null 投票匦/null 投票地点/null 投票所/null 投票数/null 投票机器/null 投票权/null 投票率/null 投票站/null 投票箱/null 投票者/null 投稿/null 投稿者/null 投笔/null 投笔从戎/null 投笔肤谈/null 投篮/null 投篮机/null 投簧/null 投缘/null 投缳/null 投缳自缢/null 投考/null 投考者/null 投股/null 投胎/null 投膏止火/null 投药/null 投袂援戈/null 投袂而起/null 投袂荷戈/null 投诉/null 投诉信/null 投诉者/null 投诚/null 投资/null 投资客/投资人 投资人/投资客 投资回报率/null 投资家/null 投资总额/null 投资报酬率/null 投资数/null 投资气氛/null 投资环境/null 投资者/null 投资规模/null 投资选择/null 投资银行/null 投资额/null 投资风险/null 投身/null 投身于/null 投进/null 投送/null 投递/null 投递员/null 投递送/null 投钱戏/null 投闲置散/null 投阱下石/null 投降/null 投降主义/null 投降书/null 投靠/null 投鞭断流/null 投鼠之忌/null 投鼠忌器/null 抖乱/null 抖出/null 抖动/null 抖去/null 抖开/null 抖搂/null 抖擞/null 抖擞精神/null 抖松/null 抖瑟/null 抖索/null 抖缩/null 抖翻/null 抖落/null 抖著/null 抗丁/null 抗争/null 抗体/null 抗倒伏/null 抗倭斗争/null 抗倾覆/null 抗凝/null 抗凝固/null 抗凝血剂/null 抗击/null 抗力/null 抗压/null 抗压强度/null 抗原/null 抗原决定簇/null 抗反射/null 抗命/null 抗坏血酸/null 抗大/null 抗寒/null 抗尘走俗/null 抗属/null 抗干扰/null 抗御/null 抗忧郁药/null 抗性/null 抗感染/null 抗战/null 抗抗生素/null 抗拉强度/null 抗拒/null 抗拒从严/null 抗捐/null 抗敌/null 抗日/null 抗日军政大学/null 抗日战争/null 抗日救亡团体/null 抗日救亡运动/null 抗日救国/null 抗日民族统一战线/null 抗旱/null 抗暴/null 抗核加固/null 抗毒/null 抗毒性/null 抗毒素/null 抗毒血清/null 抗氧/null 抗氧剂/null 抗氧化/null 抗氧化剂/null 抗水/null 抗洪/null 抗洪抢险/null 抗洪救灾/null 抗活/null 抗涝/null 抗溶/null 抗溶剂/null 抗火/null 抗灾/null 抗炎性/null 抗热/null 抗热合金/null 抗生/null 抗生素/null 抗生菌/null 抗用/null 抗病/null 抗病毒/null 抗病毒药/null 抗癌/null 抗直/null 抗真菌/null 抗着/null 抗碱/null 抗磁/null 抗礼/null 抗税/null 抗粮/null 抗精神病/null 抗组织胺/null 抗组胺/null 抗组胺剂/null 抗组胺药/null 抗缴/null 抗美/null 抗美援朝/null 抗美援朝运动/null 抗耐甲氧西林金葡菌/null 抗药/null 抗药性/null 抗药能力/null 抗菌/null 抗菌剂/null 抗菌增效剂/null 抗菌法/null 抗菌甲硝唑/null 抗菌素/null 抗菌药/null 抗菌血清/null 抗虫/null 抗血清/null 抗衡/null 抗议/null 抗议者/null 抗诉/null 抗辩/null 抗辩人/null 抗辩者/null 抗过/null 抗逆性/null 抗酸/null 抗震/null 抗震剂/null 抗震性/null 抗震救灾/null 抗震救灾指挥部/null 抗震结构/null 抗静电/null 抗风/null 抗风火柴/null 折中/null 折中主义/null 折价/null 折伞/null 折信/null 折倒/null 折光/null 折兑/null 折冲/null 折冲厌难/null 折冲尊俎/null 折冲御侮/null 折冲樽俎/null 折凳/null 折刀/null 折刀儿/null 折半/null 折反/null 折受/null 折变/null 折叠/null 折叠式/null 折叠椅/null 折号/null 折合/null 折向/null 折回/null 折头/null 折奏/null 折子/null 折子戏/null 折实/null 折寿/null 折射/null 折射器/null 折射性/null 折射率/null 折射线/null 折射计/null 折小/null 折尺/null 折帐/null 折干/null 折床/null 折弯/null 折成/null 折戟/null 折戟沉沙/null 折扇/null 折扣/null 折抵/null 折挫/null 折损/null 折断/null 折断撉/null 折旧/null 折旧率/null 折旧费/null 折曲/null 折服/null 折本/null 折杀/null 折枝/null 折柳攀花/null 折桂/null 折桂攀蟾/null 折椅/null 折款/null 折煞/null 折物/null 折现/null 折现率/null 折痕/null 折皱/null 折磨/null 折福/null 折秤/null 折笔/null 折算/null 折箩/null 折箭/null 折纸/null 折线/null 折缝/null 折罪/null 折耗/null 折股/null 折腰/null 折腰五斗/null 折腰升斗/null 折腾/null 折节/null 折节下士/null 折节待士/null 折节礼士/null 折节读书/null 折行/null 折衷/null 折衷主义/null 折衷派/null 折衷鹦鹉/null 折裙/null 折角/null 折让/null 折起/null 折跟头/null 折转/null 折辱/null 折边/null 折过儿/null 折返/null 折迭/null 折钱/null 折长补短/null 折页/null 抚人/null 抚今/null 抚今思昔/null 抚今追昔/null 抚使/null 抚养/null 抚养成人/null 抚养权/null 抚养费/null 抚军/null 抚古思今/null 抚孤恤寡/null 抚宁/null 抚州/null 抚平/null 抚弄/null 抚循/null 抚心自问/null 抚恤/null 抚恤金/null 抚慰/null 抚慰性/null 抚慰者/null 抚慰金/null 抚抱/null 抚拍/null 抚掌/null 抚掌大笑/null 抚摩/null 抚摸/null 抚松/null 抚梁易柱/null 抚爱/null 抚琴/null 抚绥/null 抚育/null 抚背扼喉/null 抚躬自问/null 抚远/null 抚远三角洲/null 抚顺/null 抛下/null 抛下锚/null 抛光/null 抛光机/null 抛出/null 抛却/null 抛向/null 抛售/null 抛头露面/null 抛媚眼/null 抛射/null 抛射体/null 抛射物/null 抛开/null 抛弃/null 抛戈卸甲/null 抛戈弃甲/null 抛手/null 抛投/null 抛掉/null 抛掷/null 抛撒/null 抛散/null 抛洒/null 抛物/null 抛物线/null 抛物面/null 抛球/null 抛生耦/null 抛砖/null 抛砖引玉/null 抛离/null 抛空/null 抛绣球/null 抛脸/null 抛荒/null 抛补/null 抛补套利/null 抛费/null 抛起/null 抛进/null 抛金弃鼓/null 抛锚/null 抛鸾拆凤/null 抟沙/null 抟沙作饭/null 抟沙嚼蜡/null 抟砂弄汞/null 抟风/null 抟饭/null 抟香弄粉/null 抠出/null 抠字眼/null 抠字眼儿/null 抠心挖肚/null 抠心挖胆/null 抠破/null 抠门/null 抠门儿/null 抡刀/null 抡拳/null 抡棍/null 抡眉竖目/null 抢亲/null 抢人/null 抢修/null 抢先/null 抢先一步/null 抢光/null 抢到/null 抢劫/null 抢劫案/null 抢劫犯/null 抢劫罪/null 抢占/null 抢去/null 抢嘴/null 抢在/null 抢地呼天/null 抢墒/null 抢夺/null 抢婚/null 抢完/null 抢得/null 抢戏/null 抢手/null 抢手货/null 抢掠/null 抢收/null 抢救/null 抢救无效/null 抢时间/null 抢案/null 抢渡/null 抢滩/null 抢生意/null 抢白/null 抢眼/null 抢着/null 抢种/null 抢购/null 抢购一空/null 抢购风/null 抢走/null 抢跑/null 抢过/null 抢运/null 抢通/null 抢镜头/null 抢险/null 抢险救灾/null 抢风/null 抢风头/null 抢风航行/null 护佑/null 护兵/null 护养/null 护卫/null 护卫舰/null 护卫艇/null 护卫队/null 护发/null 护发乳/null 护发素/null 护国/null 护国佑民/null 护国军/null 护国战/null 护国战争/null 护国运动/null 护坡/null 护城/null 护城河/null 护堤/null 护墙/null 护墙板/null 护壁/null 护壁板/null 护士/null 护士长/null 护套/null 护封/null 护层/null 护岸/null 护岸林/null 护带/null 护手盘/null 护手霜/null 护持/null 护旗/null 护板/null 护林/null 护林员/null 护林防火/null 护柩者/null 护栏/null 护校/null 护民/null 护民官/null 护法/null 护法战争/null 护法神/null 护法运动/null 护海商法/null 护照/null 护理/null 护理学/null 护田林/null 护甲/null 护盖物/null 护目镜/null 护着/null 护短/null 护神/null 护税/null 护符/null 护老者/null 护耳/null 护肘/null 护肤/null 护肤品/null 护肤膏/null 护肩/null 护胫/null 护胸/null 护腿/null 护膝/null 护航/null 护航舰/null 护花/null 护贝机/null 护路/null 护路林/null 护身/null 护身法/null 护身符/null 护身符子/null 护过饰非/null 护运/null 护送/null 护送者/null 护驾/null 护鼻/null 报上/null 报业/null 报丧/null 报亭/null 报人/null 报仇/null 报仇雪恨/null 报仇雪耻/null 报以/null 报价/null 报价人/null 报价单/null 报作/null 报信/null 报偿/null 报关/null 报冤/null 报出/null 报分/null 报刊/null 报刊发行/null 报刊摊/null 报刊杂志/null 报到/null 报功/null 报务/null 报务员/null 报单/null 报名/null 报名表/null 报名费/null 报告/null 报告书/null 报告人/null 报告会/null 报告员/null 报告团/null 报告文学/null 报喜/null 报喜不报忧/null 报喜也报忧/null 报国/null 报复/null 报复主义/null 报复心理/null 报复性/null 报失/null 报头/null 报夹/null 报子/null 报官/null 报审/null 报导/null 报导文学/null 报帐/null 报帖/null 报幕/null 报应/null 报应不爽/null 报废/null 报录/null 报录人/null 报德/null 报忧/null 报怨/null 报恩/null 报户口/null 报批/null 报损/null 报捷/null 报摊/null 报摘/null 报效/null 报效祖国/null 报数/null 报文/null 报时/null 报春/null 报春花/null 报晓/null 报本反始/null 报条/null 报查/null 报栏/null 报案/null 报检/null 报界/null 报盘/null 报知/null 报社/null 报禁/null 报称/null 报税/null 报税单/null 报税表/null 报穷/null 报窝/null 报章/null 报童/null 报端/null 报答/null 报系/null 报纸/null 报纸报导/null 报纸杂志/null 报经/null 报缴/null 报考/null 报聘/null 报表/null 报装/null 报警/null 报警器/null 报话机/null 报说/null 报请/null 报谦/null 报账/null 报贩亭/null 报费/null 报转/null 报载/null 报送/null 报道/null 报道失实/null 报道说/null 报酬/null 报销/null 报错/null 报领/null 报馆/null 报验/null 抨击/null 抨弹/null 披上/null 披发缨冠/null 披古通今/null 披在/null 披垂/null 披头/null 披头四乐团/null 披头散发/null 披巾/null 披庥带孝/null 披心沥血/null 披拂/null 披挂/null 披挂上阵/null 披散/null 披星带月/null 披星戴月/null 披枷带锁/null 披榛采兰/null 披毛戴角/null 披毛求疵/null 披毛犀/null 披沙剖璞/null 披沙拣金/null 披沙简金/null 披沥/null 披沥肝胆/null 披甲/null 披盖/null 披着/null 披索/null 披红/null 披红挂彩/null 披缁削发/null 披肝挂胆/null 披肝沥胆/null 披肝沥血/null 披肝露胆/null 披肩/null 披荆斩棘/null 披萨/null 披著/null 披袍擐甲/null 披览/null 披针形/null 披阅/null 披露/null 披露肝胆/null 披靡/null 披风/null 披麻/null 披麻带孝/null 披麻带索/null 披麻戴孝/null 披麻救火/null 抬不/null 抬不起头来/null 抬举/null 抬价/null 抬出/null 抬升/null 抬头/null 抬头纹/null 抬抬/null 抬捧/null 抬杠/null 抬枪/null 抬棺者/null 抬的/null 抬着/null 抬秤/null 抬筐/null 抬肩/null 抬脸/null 抬裉/null 抬走/null 抬起/null 抬起头来/null 抬轿/null 抬轿子/null 抬阁/null 抬高/null 抱不/null 抱不平/null 抱了/null 抱令守律/null 抱以/null 抱住/null 抱佛脚/null 抱偏见/null 抱关击柝/null 抱养/null 抱厦/null 抱在/null 抱境息民/null 抱头/null 抱头大哭/null 抱头痛哭/null 抱头缩项/null 抱头鼠窜/null 抱头鼠蹿/null 抱委屈/null 抱子弄孙/null 抱子甘蓝/null 抱存/null 抱定/null 抱宝怀珍/null 抱屈/null 抱布贸丝/null 抱怨/null 抱恙/null 抱恨/null 抱恨终天/null 抱恨终身/null 抱愧/null 抱憾/null 抱成一团/null 抱抱/null 抱抱团/null 抱抱装/null 抱拳/null 抱持/null 抱摔/null 抱有/null 抱有偏见/null 抱有成见/null 抱枕/null 抱椠怀铅/null 抱歉/null 抱残/null 抱残守缺/null 抱残守阙/null 抱犊崮/null 抱病/null 抱着/null 抱窝/null 抱粗腿/null 抱素怀朴/null 抱紧/null 抱者/null 抱腰/null 抱草/null 抱草瘟/null 抱著/null 抱蔓摘瓜/null 抱薪救火/null 抱薪救焚/null 抱蛋/null 抱诚守真/null 抱负/null 抱负不凡/null 抱起/null 抱进/null 抵事/null 抵交/null 抵付/null 抵住/null 抵作/null 抵借/null 抵债/null 抵偿/null 抵充/null 抵免/null 抵冲/null 抵减/null 抵制/null 抵华/null 抵命/null 抵岸/null 抵帐/null 抵得住/null 抵御/null 抵悟/null 抵扣/null 抵扳/null 抵抗/null 抵抗力/null 抵抗性/null 抵抗者/null 抵押/null 抵押品/null 抵押权/null 抵押者/null 抵押贷款/null 抵押贷款危机/null 抵拒/null 抵拨/null 抵挡/null 抵换/null 抵掌/null 抵掌而谈/null 抵排/null 抵撞/null 抵敌/null 抵死瞒生/null 抵死谩生/null 抵毁/null 抵消/null 抵牾/null 抵瑕蹈隙/null 抵用/null 抵用券/null 抵留/null 抵税/null 抵罪/null 抵补/null 抵触/null 抵触情绪/null 抵账/null 抵赖/null 抵足而卧/null 抵足而眠/null 抵足谈心/null 抵达/null 抵过/null 抵还/null 抵销/null 抵顶/null 抹一鼻子灰/null 抹上/null 抹不下脸/null 抹不掉/null 抹了/null 抹刀/null 抹去/null 抹嘴/null 抹子/null 抹布/null 抹抹/null 抹掉/null 抹搭/null 抹月批风/null 抹杀/null 抹油/null 抹泪揉眵/null 抹消/null 抹灰/null 抹煞/null 抹片/null 抹磁/null 抹稀泥/null 抹粉/null 抹粉施脂/null 抹胸/null 抹脖/null 抹脖子/null 抹脸/null 抹茶/null 抹角/null 抹角转弯/null 抹零/null 抹面/null 抹香/null 抹香粉/null 抹香鲸/null 抹黑/null 抹黑了/null 抻面/null 押上/null 押人/null 押住/null 押出/null 押后/null 押头/null 押宝/null 押尾/null 押帐/null 押平声韵/null 押当/null 押往/null 押抵/null 押柜/null 押款/null 押汇/null 押沙龙/null 押注/null 押物/null 押着/null 押租/null 押给/null 押解/null 押账/null 押车/null 押运/null 押运员/null 押送/null 押金/null 押阵/null 押韵/null 抽丁/null 抽丝/null 抽丝剥茧/null 抽中/null 抽像/null 抽像性/null 抽冷子/null 抽凤/null 抽出/null 抽出物/null 抽到/null 抽动/null 抽印/null 抽去/null 抽取/null 抽吸/null 抽咽/null 抽嘴巴/null 抽噎/null 抽回/null 抽地/null 抽壮丁/null 抽头/null 抽奖/null 抽完/null 抽审/null 抽尽/null 抽屉/null 抽工夫/null 抽干/null 抽得出/null 抽成/null 抽打/null 抽抽噎噎/null 抽拨/null 抽换/null 抽掉/null 抽提/null 抽插/null 抽搐/null 抽搦/null 抽搭/null 抽支烟/null 抽斗/null 抽时间/null 抽暇/null 抽机/null 抽杀/null 抽查/null 抽样/null 抽样检查/null 抽样调查/null 抽检/null 抽气/null 抽气机/null 抽水/null 抽水机/null 抽水泵/null 抽水站/null 抽水马桶/null 抽油烟机/null 抽泣/null 抽泵/null 抽点/null 抽烟/null 抽烟斗/null 抽烟者/null 抽痛/null 抽着/null 抽税/null 抽穗/null 抽穗期/null 抽空/null 抽筋/null 抽筋剥皮/null 抽签/null 抽简禄马/null 抽紧/null 抽纱/null 抽线/null 抽绎/null 抽缩/null 抽考/null 抽胎换骨/null 抽脂/null 抽芽/null 抽菸/null 抽薪止沸/null 抽薹/null 抽血/null 抽调/null 抽象/null 抽象代数/null 抽象劳动/null 抽象化/null 抽象域/null 抽象思维/null 抽象性/null 抽象概念/null 抽象派/null 抽象词/null 抽资/null 抽走/null 抽身/null 抽钉拔楔/null 抽阅/null 抽青配白/null 抽风/null 抽验/null 抽黄对白/null 抿住/null 抿嘴/null 抿子/null 抿没/null 抿著/null 拂到/null 拂动/null 拂去/null 拂尘/null 拂扫/null 拂拂/null 拂拭/null 拂晓/null 拂煦/null 拂衣而去/null 拂袖/null 拂袖而去/null 拂袖而归/null 拂袖而起/null 拂面/null 拄著/null 担不是/null 担任/null 担保/null 担保人/null 担名/null 担子/null 担当/null 担当者/null 担待/null 担心/null 担忧/null 担惊/null 担惊受怕/null 担惊受恐/null 担懮/null 担承/null 担担面/null 担架/null 担架兵/null 担架床/null 担架式/null 担架抬/null 担水/null 担着/null 担着心/null 担荷/null 担误/null 担负/null 担责任/null 担运/null 担雪塞井/null 担雪填井/null 担雪填河/null 担风险/null 拆下/null 拆东墙补西墙/null 拆东补西/null 拆了/null 拆伙/null 拆借/null 拆兑/null 拆分/null 拆卖/null 拆卸/null 拆去/null 拆台/null 拆墙脚/null 拆字/null 拆封/null 拆屋/null 拆帐/null 拆开/null 拆息/null 拆成/null 拆掉/null 拆接/null 拆放款/null 拆散/null 拆旧/null 拆机/null 拆桥/null 拆毁/null 拆洗/null 拆烂污/null 拆用/null 拆白/null 拆白道字/null 拆碑道字/null 拆穿/null 拆线/null 拆股/null 拆装/null 拆西补东/null 拆角/null 拆解/null 拆解开/null 拆账/null 拆迁/null 拆除/null 拇战/null 拇指/null 拇指甲/null 拇指痕/null 拇趾/null 拈弄/null 拈指/null 拈斤播两/null 拈来/null 拈花/null 拈花弄月/null 拈花微笑/null 拈花惹草/null 拈花摘叶/null 拈花摘草/null 拈轻/null 拈轻怕重/null 拈酸吃醋/null 拈量/null 拈阄儿/null 拈香/null 拉丁/null 拉丁人/null 拉丁化/null 拉丁字母/null 拉丁文/null 拉丁文字/null 拉丁方块/null 拉丁美洲/null 拉丁舞/null 拉丁语/null 拉三扯四/null 拉上/null 拉下/null 拉下脸/null 拉丝/null 拉丝模/null 拉个手/null 拉买卖/null 拉了/null 拉亏空/null 拉交情/null 拉亮/null 拉人/null 拉什卡尔加/null 拉什莫尔山/null 拉伤/null 拉伸/null 拉伸强度/null 拉伸形变/null 拉住/null 拉倒/null 拉克替醇/null 拉入/null 拉关系/null 拉兹莫夫斯基/null 拉冈/null 拉出/null 拉到/null 拉制/null 拉力/null 拉力器/null 拉力赛/null 拉动/null 拉勾/null 拉勾儿/null 拉包尔/null 拉匝禄/null 拉卜楞寺/null 拉去/null 拉各斯/null 拉合尔/null 拉后腿/null 拉呱儿/null 拉回/null 拉升/null 拉在/null 拉场子/null 拉圾/null 拉坏/null 拉大/null 拉大便/null 拉大旗作虎皮/null 拉大条/null 拉大片/null 拉夫/null 拉夫堡/null 拉夫堡大学/null 拉夫桑贾尼/null 拉夫罗夫/null 拉奎拉/null 拉套/null 拉姆安拉/null 拉姆斯菲尔德/null 拉孜/null 拉客/null 拉家带口/null 拉家常/null 拉小/null 拉尔维克/null 拉尼娅/null 拉尼娜/null 拉屎/null 拉巴/null 拉巴斯/null 拉巴特/null 拉布拉多/null 拉帐/null 拉帕斯/null 拉帮结伙/null 拉帮结派/null 拉平/null 拉床/null 拉延/null 拉开/null 拉开帷幕/null 拉开序幕/null 拉开战幕/null 拉开架势/null 拉开档次/null 拉开距离/null 拉弓/null 拉得/null 拉德/null 拉成/null 拉手/null 拉扯/null 拉拉/null 拉拉扯扯/null 拉拉杂杂/null 拉拉队/null 拉拔/null 拉拢/null 拉拽/null 拉掉/null 拉撒路/null 拉文克劳/null 拉文纳/null 拉斐尔/null 拉斐特/null 拉断/null 拉斯帕尔马斯/null 拉斯穆森/null 拉斯维加斯/null 拉普兰/null 拉普拉斯/null 拉曳/null 拉朽摧枯/null 拉杂/null 拉杆/null 拉杆机/null 拉条/null 拉松/null 拉架/null 拉格朗日/null 拉格比/null 拉模/null 拉比/null 拉沙病毒/null 拉法兰/null 拉法格/null 拉法赫/null 拉洋片/null 拉特格斯大学/null 拉狄克/null 拉环/null 拉琴/null 拉瓦尔/null 拉瓦锡/null 拉生意/null 拉登/null 拉皮/null 拉皮条/null 拉盖尔/null 拉直/null 拉着/null 拉票/null 拉科鲁尼亚/null 拉秧/null 拉稀/null 拉窗/null 拉筋/null 拉管/null 拉簧/null 拉米夫定/null 拉紧/null 拉纤/null 拉纳卡/null 拉线/null 拉练/null 拉细/null 拉网/null 拉美/null 拉美国家/null 拉美西斯/null 拉肚子/null 拉脚/null 拉脱维亚/null 拉茶/null 拉莫斯/null 拉菲草/null 拉萨条约/null 拉裂/null 拉话/null 拉货/null 拉贾斯坦邦/null 拉赫曼尼诺夫/null 拉走/null 拉起/null 拉车/null 拉辛/null 拉达克/null 拉过/null 拉近/null 拉近乎/null 拉选票/null 拉那烈/null 拉里/null 拉钩/null 拉链/null 拉锁/null 拉锯/null 拉锯战/null 拉长/null 拉长脸/null 拉门/null 拉青格/null 拉面/null 拉顿/null 拉饥荒/null 拉马特甘/null 拉高/null 拉魂腔/null 拉鲁/null 拉鲁湿地国家自然保护区/null 拉齐奥/null 拊掌/null 拊髀/null 拌住/null 拌入/null 拌勺/null 拌匀/null 拌和/null 拌嘴/null 拌嘴斗舌/null 拌用/null 拌种/null 拌菜/null 拌蒜/null 拌面/null 拌饭/null 拍人/null 拍出/null 拍击/null 拍动/null 拍卖/null 拍卖人/null 拍卖会/null 拍卖商/null 拍卖场/null 拍去/null 拍发/null 拍号/null 拍声/null 拍婆子/null 拍子/null 拍客/null 拍岸/null 拍巴掌/null 拍快照/null 拍戏/null 拍成/null 拍手/null 拍手叫好/null 拍手声/null 拍手拍脚/null 拍手称快/null 拍手者/null 拍打/null 拍打物/null 拍拖/null 拍掉/null 拍掌/null 拍摄/null 拍板/null 拍板定案/null 拍板成交/null 拍案/null 拍案叫绝/null 拍案惊奇/null 拍案称奇/null 拍案而起/null 拍档/null 拍照/null 拍片/null 拍球/null 拍电/null 拍电影/null 拍着/null 拍砖/null 拍纸簿/null 拍背/null 拍胸脯/null 拍马/null 拍马屁/null 拍马者/null 拎包/null 拎起/null 拐入/null 拐卖/null 拐去/null 拐品/null 拐子/null 拐带/null 拐弯/null 拐弯儿/null 拐弯处/null 拐弯抹角/null 拐杖/null 拐棍/null 拐点/null 拐肘/null 拐脖/null 拐脖儿/null 拐角/null 拐角处/null 拐诱/null 拐走/null 拐过/null 拐骗/null 拒不/null 拒不悔改/null 拒不执行/null 拒不接受/null 拒不认付/null 拒之/null 拒之门外/null 拒交/null 拒人千里之外/null 拒付/null 拒受/null 拒开/null 拒捕/null 拒收/null 拒敌/null 拒斥/null 拒服/null 拒留/null 拒礼/null 拒签/null 拒给/null 拒绝/null 拒绝执行/null 拒绝者/null 拒缴/null 拒腐防变/null 拒虎进狼/null 拒谏/null 拒谏饰非/null 拒贿/null 拒赔/null 拒载/null 拓印/null 拓土开疆/null 拓宽/null 拓展/null 拓广/null 拓开/null 拓扑/null 拓扑学/null 拓扑空间/null 拓扑结构/null 拓拔/null 拓本/null 拓朴/null 拓殖/null 拓片/null 拓草/null 拓荒/null 拓荒者/null 拓落不羁/null 拓补/null 拓跋/null 拓跋魏/null 拓边/null 拔万论千/null 拔万轮千/null 拔下/null 拔丝/null 拔了/null 拔出/null 拔刀抽楔/null 拔刀相助/null 拔刀相济/null 拔剑/null 拔动/null 拔十失五/null 拔十得五/null 拔去/null 拔取/null 拔地/null 拔地倚天/null 拔地参天/null 拔地摇山/null 拔地而起/null 拔宅上升/null 拔宅飞升/null 拔尖/null 拔尖儿/null 拔山举鼎/null 拔山扛鼎/null 拔山超海/null 拔开/null 拔掉/null 拔擢/null 拔新领异/null 拔本塞源/null 拔来报往/null 拔染/null 拔树寻根/null 拔树撼山/null 拔根/null 拔步/null 拔毒/null 拔毛/null 拔毛连茹/null 拔河/null 拔海/null 拔涉/null 拔火/null 拔火罐/null 拔火罐儿/null 拔牙/null 拔犀擢象/null 拔白/null 拔秧/null 拔类超群/null 拔缝/null 拔罐/null 拔罐子/null 拔罐法/null 拔群出类/null 拔脚/null 拔腿/null 拔节/null 拔节期/null 拔苗/null 拔苗助长/null 拔茅茹/null 拔茅连茹/null 拔草/null 拔萃/null 拔萃出类/null 拔萃出群/null 拔营/null 拔葵去织/null 拔葵断枣/null 拔起/null 拔身/null 拔还/null 拔钉锤/null 拔锚/null 拔除/null 拔顶/null 拔高/null 拖下/null 拖下水/null 拖人下水/null 拖住/null 拖债/null 拖儿带女/null 拖入/null 拖出/null 拖到/null 拖力/null 拖动/null 拖动力/null 拖吊车/null 拖后腿/null 拖地/null 拖地板/null 拖垮/null 拖堂/null 拖天扫地/null 拖宕/null 拖家带口/null 拖尾巴/null 拖布/null 拖带/null 拖延/null 拖延战术/null 拖延时间/null 拖延者/null 拖后/null 拖慢/null 拖把/null 拖拉/null 拖拉机/null 拖拉机厂/null 拖拉机手/null 拖拖拉拉/null 拖拖沓沓/null 拖挂/null 拖捞/null 拖捞船/null 拖放/null 拖斗/null 拖曳/null 拖曳机/null 拖曳物/null 拖曳缆/null 拖来/null 拖来拖去/null 拖板/null 拖柴垂青/null 拖欠/null 拖沓/null 拖油瓶/null 拖泥/null 拖泥带水/null 拖洗/null 拖湍/null 拖牵索道/null 拖男带女/null 拖男挟女/null 拖着/null 拖磨/null 拖粪/null 拖累/null 拖绳/null 拖网/null 拖脏/null 拖至/null 拖航/null 拖船/null 拖著/null 拖行/null 拖走/null 拖足/null 拖车/null 拖车头/null 拖轮/null 拖运/null 拖进/null 拖链/null 拖长/null 拖青纡紫/null 拖鞋/null 拖驳/null 拖麻拽布/null 拗不过/null 拗口/null 拗口令/null 拗性/null 拗断/null 拗曲作直/null 拗陷/null 拘于/null 拘传/null 拘俗守常/null 拘囚/null 拘囿/null 拘守/null 拘役/null 拘忌/null 拘执/null 拘押/null 拘押营/null 拘拿/null 拘挛/null 拘挛儿/null 拘挛补衲/null 拘捕/null 拘文牵义/null 拘文牵俗/null 拘束/null 拘束不安/null 拘板/null 拘检/null 拘泥/null 拘泥小节/null 拘牵/null 拘留/null 拘留所/null 拘留犯/null 拘礼/null 拘票/null 拘禁/null 拘管/null 拘系/null 拘虚/null 拘谨/null 拘迂/null 拙于言词/null 拙作/null 拙劣/null 拙口钝腮/null 拙口钝辞/null 拙嘴/null 拙嘴笨舌/null 拙政园/null 拙朴/null 拙涩/null 拙直/null 拙稿/null 拙笔/null 拙笨/null 拙荆/null 拙著/null 拙行/null 拙见/null 拙集/null 拚写/null 拚到/null 拚去/null 拚命/null 拚弃/null 拚搏/null 拚死/null 拚法/null 拚财/null 拚贴/null 拚除/null 招事/null 招亡纳叛/null 招亲/null 招人/null 招人喜欢/null 招供/null 招兵/null 招兵买马/null 招军买马/null 招到/null 招募/null 招呼/null 招呼站/null 招商/null 招商局/null 招商引店/null 招商引资/null 招女婿/null 招子/null 招安/null 招展/null 招工/null 招干/null 招式/null 招引/null 招待/null 招待人/null 招待会/null 招待员/null 招待所/null 招待费/null 招徕/null 招怨/null 招惹/null 招手/null 招投标/null 招抚/null 招揽/null 招揽生意/null 招摇/null 招摇撞骗/null 招摇过市/null 招收/null 招数/null 招是惹非/null 招是揽非/null 招权纳贿/null 招权纳赂/null 招权纳赇/null 招来/null 招架/null 招架不住/null 招标/null 招法/null 招潮蟹/null 招灾/null 招灾惹祸/null 招灾揽祸/null 招牌/null 招牌动作/null 招牌纸/null 招牌菜/null 招生/null 招生工作/null 招盘/null 招眼/null 招祸/null 招租/null 招笑儿/null 招考/null 招聘/null 招聘会/null 招聘制/null 招聘协调人/null 招聘机构/null 招聘者/null 招股/null 招股书/null 招股说明书/null 招致/null 招花惹草/null 招蜂/null 招认/null 招议/null 招诱/null 招请/null 招财/null 招财猫/null 招财进宝/null 招贤/null 招贤下士/null 招贤纳士/null 招贴/null 招贴画/null 招赘/null 招起/null 招远/null 招门纳婿/null 招降/null 招降纳叛/null 招集/null 招领/null 招风/null 招风惹草/null 招风惹雨/null 招风揽火/null 招鬼/null 招魂/null 拜上帝会/null 拜人/null 拜人为师/null 拜会/null 拜伦/null 拜佛/null 拜倒/null 拜倒辕门/null 拜别/null 拜到/null 拜匣/null 拜占庭/null 拜受/null 拜台/null 拜城/null 拜堂/null 拜墓/null 拜天地/null 拜官/null 拜客/null 拜寿/null 拜将封候/null 拜师/null 拜年/null 拜忏/null 拜托/null 拜扫/null 拜把/null 拜把子/null 拜拜/null 拜揖/null 拜明/null 拜服/null 拜望/null 拜泉/null 拜火教/null 拜物/null 拜物教/null 拜登/null 拜相封候/null 拜神/null 拜祭/null 拜科努尔/null 拜科努尔航天发射基地/null 拜节/null 拜见/null 拜访/null 拜读/null 拜谒/null 拜谢/null 拜贺/null 拜跪/null 拜辞/null 拜金/null 拜金主义/null 拜鬼/null 拜鬼求神/null 拟上/null 拟于/null 拟于不伦/null 拟人/null 拟人法/null 拟人观/null 拟价/null 拟任/null 拟作/null 拟像/null 拟写/null 拟出/null 拟制/null 拟办/null 拟卤素/null 拟古/null 拟古之作/null 拟古体/null 拟合/null 拟向/null 拟圆/null 拟声/null 拟声唱法/null 拟声词/null 拟妥/null 拟娩/null 拟定/null 拟就/null 拟态/null 拟文/null 拟有/null 拟球/null 拟稿/null 拟订/null 拟议/null 拟议调停/null 拟请/null 拟请照准/null 拟调/null 拟阿拖品药物/null 拟音/null 拢共/null 拢在/null 拢子/null 拢岸/null 拢总/null 拢攥/null 拣佛烧香/null 拣信室/null 拣出/null 拣去/null 拣精拣肥/null 拣起/null 拣软的欺/null 拣选/null 拣选出/null 拥入/null 拥兵/null 拥兵玩寇/null 拥兵自固/null 拥军/null 拥军优属/null 拥军爱民/null 拥吻/null 拥堵/null 拥塞/null 拥彗先驱/null 拥彗清道/null 拥彗迎门/null 拥戴/null 拥护/null 拥护者/null 拥抱/null 拥抱者/null 拥挤/null 拥挤不堪/null 拥政爱民/null 拥政爱民运动/null 拥有/null 拥有权/null 拥王/null 拥登/null 拥着/null 拥立/null 拥趸/null 拥雾翻波/null 拦住/null 拦击/null 拦劫/null 拦截/null 拦截机/null 拦截者/null 拦挡/null 拦柜/null 拦水/null 拦水堰/null 拦河/null 拦河坝/null 拦洪/null 拦洪坝/null 拦网/null 拦腰/null 拦蓄/null 拦路/null 拦路抢劫/null 拦路虎/null 拦路贼/null 拦车/null 拦道木/null 拦阻/null 拧干/null 拧开/null 拧态病/null 拧成/null 拧成一股绳/null 拧断/null 拧条/null 拧松/null 拧紧/null 拧转/null 拨万轮千/null 拨下/null 拨乱之才/null 拨乱兴治/null 拨乱反正/null 拨乱反治/null 拨乱济危/null 拨乱济时/null 拨乱诛暴/null 拨云撩雨/null 拨云睹日/null 拨云见日/null 拨交/null 拨付/null 拨作/null 拨冗/null 拨准/null 拨出/null 拨刺/null 拨剌/null 拨动/null 拨叫式/null 拨号/null 拨号盘/null 拨号网络/null 拨号连接/null 拨号音/null 拨奏/null 拨子/null 拨子弹/null 拨工/null 拨开/null 拨弄/null 拨弦乐器/null 拨快/null 拨慢/null 拨打/null 拨拉/null 拨拨/null 拨款/null 拨正/null 拨浪鼓/null 拨火/null 拨火棍/null 拨火罐儿/null 拨用/null 拨电/null 拨秧机/null 拨给/null 拨缴/null 拨草寻蛇/null 拨补/null 拨通/null 拨雨撩云/null 拨高/null 择一/null 择不开/null 择主而事/null 择交/null 择交而友/null 择人而事/null 择优/null 择优上岗/null 择优录取/null 择优录用/null 择优选用/null 择偶/null 择刺/null 择友/null 择吉/null 择向/null 择善/null 择善固执/null 择善而从/null 择善而行/null 择地而蹈/null 择定/null 择席/null 择度/null 择引/null 择性/null 择日/null 择日子/null 择木而处/null 择物/null 择福宜重/null 择肥而噬/null 择菜/null 择要/null 择言/null 择译/null 括入/null 括号/null 括囊守禄/null 括囊拱手/null 括在/null 括弧/null 括毒/null 括约肌/null 括线/null 拭了/null 拭去/null 拭子/null 拭抹/null 拭擦/null 拭泪/null 拭目/null 拭目以俟/null 拭目以待/null 拭目以观/null 拭目倾耳/null 拭目而待/null 拭除/null 拮据/null 拯危扶溺/null 拯救/null 拯溺扶危/null 拯溺救焚/null 拱了/null 拱出/null 拱券/null 拱北/null 拱卫/null 拱圈/null 拱坝/null 拱墅/null 拱墅区/null 拱墩/null 拱壁/null 拱壮/null 拱度/null 拱廊/null 拱廊似/null 拱形/null 拱心石/null 拱手/null 拱手听命/null 拱手垂裳/null 拱手投降/null 拱手旁观/null 拱手相让/null 拱手而降/null 拱抱/null 拱曲/null 拱月/null 拱木/null 拱柱/null 拱桥/null 拱洞/null 拱状/null 拱璧/null 拱立/null 拱翻/null 拱肩/null 拱肩缩背/null 拱背/null 拱腰/null 拱起/null 拱道/null 拱门/null 拱面/null 拱顶/null 拱顶石/null 拳击/null 拳击台/null 拳击家/null 拳击手/null 拳击比赛/null 拳击选手/null 拳坛/null 拳头/null 拳头产品/null 拳师/null 拳手/null 拳打/null 拳打脚踢/null 拳拳/null 拳拳服膺/null 拳斗/null 拳曲/null 拳术/null 拳棒/null 拳法/null 拳王/null 拳脚/null 拳脚交加/null 拳脚相向/null 拳赛/null 拳道/null 拴上/null 拴住/null 拴在/null 拴牢/null 拴着/null 拴紧/null 拴绳/null 拴锁/null 拶刑/null 拶子/null 拶指/null 拷打/null 拷掠/null 拷火/null 拷盘/null 拷纱/null 拷绸/null 拷花/null 拷贝/null 拷边/null 拷边工/null 拷问/null 拷问台/null 拼上/null 拼了/null 拼争/null 拼做/null 拼写/null 拼写错误/null 拼凑/null 拼出/null 拼到底/null 拼刺/null 拼刺刀/null 拼力/null 拼双/null 拼合/null 拼命/null 拼命三郎/null 拼命吃/null 拼命讨好/null 拼图/null 拼图玩具/null 拼字/null 拼字法/null 拼成/null 拼抢/null 拼拢/null 拼接/null 拼搏/null 拼搏精神/null 拼攒/null 拼斗/null 拼杀/null 拼板/null 拼板游戏/null 拼板玩具/null 拼板胶/null 拼桌/null 拼死/null 拼死拼活/null 拼法/null 拼火/null 拼版/null 拼盘/null 拼缀/null 拼花地板/null 拼装/null 拼读/null 拼贴/null 拼起来/null 拼车/null 拼错/null 拼错字/null 拼音/null 拼音字母/null 拼音文字/null 拼音阶段/null 拽了/null 拽住/null 拽布披麻/null 拽拳丢跌/null 拽步/null 拽着/null 拽耙扶犁/null 拽象拖犀/null 拾人余唾/null 拾人唾余/null 拾人唾涕/null 拾人涕唾/null 拾人牙慧/null 拾元/null 拾到/null 拾去/null 拾取/null 拾取者/null 拾得/null 拾得品/null 拾掇/null 拾物/null 拾级/null 拾级而上/null 拾者/null 拾芥/null 拾荒/null 拾起/null 拾趣/null 拾遗/null 拾遗补缺/null 拾遗补阙/null 拾金不昧/null 拾零/null 拾音器/null 拿上/null 拿下/null 拿不/null 拿不准/null 拿不出手/null 拿不动/null 拿不定主意/null 拿主意/null 拿乔/null 拿事/null 拿云捉月/null 拿云握雾/null 拿人/null 拿住/null 拿俄米/null 拿出/null 拿出手/null 拿出来/null 拿到/null 拿办/null 拿印把儿/null 拿去/null 拿回/null 拿大/null 拿大头/null 拿大顶/null 拿好/null 拿定/null 拿开/null 拿得/null 拿得起放得下/null 拿手/null 拿手好戏/null 拿手菜/null 拿捏/null 拿捕/null 拿掉/null 拿撒勒/null 拿权/null 拿来/null 拿枪/null 拿架子/null 拿班作势/null 拿用/null 拿着/null 拿着鸡毛当令箭/null 拿督/null 拿破仑/null 拿破仑・波拿巴/null 拿稳/null 拿粗挟细/null 拿糖/null 拿糖作醋/null 拿给/null 拿腔作势/null 拿腔拿调/null 拿获/null 拿著/null 拿薪水/null 拿贼拿赃/null 拿贼要赃拿奸要双/null 拿贼见赃/null 拿走/null 拿起/null 拿近点/null 拿钱/null 拿铁/null 拿铁咖啡/null 拿顶/null 拿顺/null 拿骚/null 持不/null 持不同政见/null 持不同政见者/null 持不同看法/null 持久/null 持久之计/null 持久力/null 持久和平/null 持久性/null 持久性毒剂/null 持久战/null 持久稳固/null 持之/null 持之以恒/null 持之有故/null 持乐观态度/null 持人/null 持人长短/null 持兵/null 持刀/null 持刀动仗/null 持刀弄棒/null 持力/null 持卡人/null 持危扶颠/null 持反对态度/null 持否定态度/null 持国天/null 持守/null 持宠生骄/null 持家/null 持带/null 持平/null 持平之论/null 持异议/null 持怀疑态度/null 持批评态度/null 持斋/null 持斋把素/null 持有/null 持有人/null 持有异议/null 持枪/null 持枪抢劫/null 持械/null 持橐簪笔/null 持正不挠/null 持正不阿/null 持满戒盈/null 持火/null 持物/null 持球/null 持留/null 持疑不决/null 持疑不定/null 持盈保泰/null 持矛/null 持禄保位/null 持禄养交/null 持禄养身/null 持禄取容/null 持禄固宠/null 持筹握算/null 持续/null 持续不断/null 持续力/null 持续增长/null 持续很久/null 持续性/null 持续性植物人状态/null 持续性植物状态/null 持续时间/null 持续稳定地增长/null 持者/null 持股/null 持股公司/null 持肯定态度/null 持蠡测海/null 持论/null 持谨慎态度/null 持身/null 持重/null 挂一漏万/null 挂上/null 挂不住/null 挂人/null 挂住/null 挂入/null 挂兰/null 挂冠/null 挂出/null 挂包/null 挂单/null 挂印悬牌/null 挂历/null 挂去/null 挂号/null 挂号信/null 挂号室/null 挂号证/null 挂名/null 挂图/null 挂在/null 挂在嘴上/null 挂在嘴边/null 挂坠盒/null 挂失/null 挂好/null 挂孝/null 挂屏/null 挂布/null 挂帅/null 挂帅的社会/null 挂帐/null 挂幌子/null 挂弦/null 挂彩/null 挂心/null 挂念/null 挂怀/null 挂成/null 挂挡/null 挂掉/null 挂接/null 挂斗/null 挂断/null 挂旗/null 挂晃/null 挂机/null 挂果/null 挂架/null 挂欠/null 挂毡/null 挂毯/null 挂气/null 挂满/null 挂漏/null 挂火/null 挂灯结彩/null 挂牌/null 挂物架/null 挂牵/null 挂着/null 挂碍/null 挂累/null 挂红/null 挂级/null 挂线/null 挂线疗法/null 挂羊头/null 挂羊头卖狗肉/null 挂职/null 挂肚牵心/null 挂肠悬胆/null 挂花/null 挂虑/null 挂衣/null 挂表/null 挂起/null 挂车/null 挂轴/null 挂运/null 挂钟/null 挂钩/null 挂钩儿/null 挂锁/null 挂锄/null 挂镰/null 挂零/null 挂靠/null 挂面/null 挂马/null 挂齿/null 指一说十/null 指不胜屈/null 指东打西/null 指东画西/null 指东话西/null 指东说西/null 指为/null 指事/null 指事字/null 指亲托故/null 指人/null 指代/null 指令/null 指令名字/null 指令性/null 指令性计划/null 指令系统/null 指令表/null 指使/null 指做/null 指关节/null 指出/null 指到/null 指北针/null 指南/null 指南宫/null 指南打北/null 指南车/null 指南针/null 指印/null 指压/null 指古摘今/null 指名/null 指名道姓/null 指向/null 指向装置/null 指在/null 指天为誓/null 指天画地/null 指天誓心/null 指天誓日/null 指天说地/null 指头/null 指头儿肚/null 指定/null 指定者/null 指导/null 指导下/null 指导作用/null 指导员/null 指导工作/null 指导思想/null 指导性计划/null 指导意义/null 指导教授/null 指导方针/null 指导生/null 指导者/null 指导课/null 指尖/null 指山卖磨/null 指山说磨/null 指引/null 指弹/null 指征/null 指战员/null 指戳/null 指手/null 指手划脚/null 指手点脚/null 指手画脚/null 指手顿脚/null 指指/null 指指戳戳/null 指指点点/null 指挥/null 指挥中心/null 指挥仪/null 指挥刀/null 指挥员/null 指挥塔/null 指挥学院/null 指挥官/null 指挥家/null 指挥所/null 指挥控制系统/null 指挥有方/null 指挥机关/null 指挥机构/null 指挥棒/null 指挥系统/null 指挥者/null 指挥艺术/null 指挥若定/null 指挥部/null 指授/null 指掌可取/null 指控/null 指摘/null 指摹/null 指教/null 指教员/null 指数/null 指数函数/null 指数基金/null 指数套利/null 指数期权/null 指斥/null 指日/null 指日可待/null 指日成功/null 指日而待/null 指时针/null 指明/null 指是/null 指望/null 指标/null 指桑/null 指桑说槐/null 指桑骂槐/null 指模/null 指正/null 指水盟松/null 指法/null 指洞/null 指派/null 指点/null 指点江山/null 指点迷津/null 指状物/null 指猪骂狗/null 指猴/null 指环/null 指瑕造隙/null 指用/null 指甲/null 指甲刀/null 指甲剪/null 指甲心儿/null 指甲油/null 指甲盖/null 指甲盖儿/null 指甲花/null 指画/null 指疔/null 指痕/null 指皂为白/null 指的/null 指眼睛/null 指着/null 指破迷团/null 指示/null 指示代词/null 指示剂/null 指示器/null 指示字/null 指示植物/null 指示灯/null 指示牌/null 指示物/null 指示符/null 指示精神/null 指示者/null 指称/null 指空话空/null 指端/null 指纹/null 指纹学/null 指给/null 指缝/null 指肠/null 指腹为亲/null 指腹为婚/null 指腹割衿/null 指腹成亲/null 指腹裁襟/null 指著/null 指认/null 指证/null 指责/null 指责者/null 指距/null 指路/null 指路明灯/null 指针/null 指针式/null 指错/null 指雁为羹/null 指靠/null 指顾之间/null 指顾之际/null 指骨/null 指鸡骂狗/null 指鹿为马/null 指鹿作马/null 指麾/null 挈带/null 挈挈/null 挈瓶之知/null 挈瓶小智/null 按上级规定/null 按下/null 按下葫芦浮起瓢/null 按两次/null 按了/null 按人/null 按人均计算/null 按件/null 按价/null 按住/null 按使/null 按例/null 按倒/null 按兵/null 按兵不举/null 按兵不动/null 按其/null 按办/null 按动/null 按劳付酬/null 按劳分配/null 按劳取酬/null 按压/null 按原样/null 按原计划/null 按名责实/null 按吨/null 按喇叭/null 按国家有关规定/null 按图索骏/null 按图索骥/null 按在/null 按址/null 按堵如故/null 按天/null 按季/null 按察/null 按察使/null 按年/null 按序/null 按惯例/null 按户/null 按手/null 按手礼/null 按打/null 按扣/null 按指/null 按捺/null 按捺不住/null 按揭/null 按摩/null 按摩师/null 按摩棒/null 按日/null 按旬/null 按时/null 按时完成/null 按时间先后/null 按月/null 按期/null 按期归还/null 按次/null 按此/null 按步就班/null 按比例/null 按照/null 按照字面/null 按照法律/null 按照计划/null 按理/null 按理说/null 按甲休兵/null 按甲寝兵/null 按着/null 按码/null 按立/null 按立宪治国/null 按类/null 按级/null 按纽/null 按脉/null 按蚊/null 按规定/null 按触/null 按计划/null 按诊/null 按语/null 按说/null 按质/null 按质定价/null 按质论价/null 按蹻/null 按部/null 按部就班/null 按酒/null 按量/null 按钮/null 按铃/null 按键/null 按键音/null 按需/null 按需出版/null 按需分配/null 挎兜/null 挎兜儿/null 挎包/null 挎斗/null 挎著/null 挑一/null 挑三拣四/null 挑三窝四/null 挑三豁四/null 挑了/null 挑使/null 挑出/null 挑刺/null 挑刺儿/null 挑剔/null 挑动/null 挑取/null 挑口板/null 挑唆/null 挑唇料嘴/null 挑嘴/null 挑大梁/null 挑夫/null 挑头/null 挑头儿/null 挑子/null 挑字眼儿/null 挑山工/null 挑幺挑六/null 挑开/null 挑弄/null 挑战/null 挑战书/null 挑战者/null 挑战者号/null 挑担/null 挑拔/null 挑拣/null 挑拨/null 挑拨是非/null 挑拨离间/null 挑挑/null 挑挑拣拣/null 挑明/null 挑染/null 挑檐/null 挑毛剔刺/null 挑毛剔刺儿/null 挑毛病/null 挑水/null 挑激/null 挑灯/null 挑灯夜战/null 挑灯拨火/null 挑牙料唇/null 挑眼/null 挑着/null 挑肥嫌瘦/null 挑肥拣瘦/null 挑脚/null 挑花/null 挑花眼/null 挑衅/null 挑衅性/null 挑起/null 挑运/null 挑选/null 挑逗/null 挑逗性/null 挑重担/null 挑针/null 挑食/null 挖井/null 挖出/null 挖剪/null 挖去/null 挖取/null 挖土/null 挖土机/null 挖地/null 挖地道/null 挖坑道/null 挖墓/null 挖墓者/null 挖墙脚/null 挖墙角/null 挖壕/null 挖壕机/null 挖开/null 挖成/null 挖挖/null 挖掉/null 挖掘/null 挖掘器/null 挖掘机/null 挖掘机械/null 挖掘潜力/null 挖掘者/null 挖方/null 挖槽/null 挖沙/null 挖沟/null 挖沟人/null 挖沟机/null 挖泥/null 挖泥船/null 挖洞/null 挖浚/null 挖渠/null 挖潜/null 挖煤/null 挖穴/null 挖空/null 挖空心思/null 挖耳当挡/null 挖肉补疮/null 挖苦/null 挖苦话/null 挖补/null 挖角/null 挖走/null 挖除/null 挖鼻子/null 挚切/null 挚友/null 挚友良朋/null 挚情/null 挚敬/null 挚爱/null 挚诚/null 挛缩/null 挞伐/null 挟主行令/null 挟人捉将/null 挟冰求温/null 挟制/null 挟势弄权/null 挟取/null 挟天子以令天下/null 挟天子以令诸侯/null 挟嫌/null 挟山超海/null 挟带/null 挟怨/null 挟恨/null 挟持/null 挟持雇主/null 挟朋树党/null 挟权倚势/null 挟细拿粗/null 挟贵倚势/null 挟贵自重/null 挠头/null 挠度/null 挠曲/null 挠率/null 挠痒/null 挠直为曲/null 挠秧/null 挠裂/null 挠败/null 挠钩/null 挡位/null 挡住/null 挡在/null 挡墙/null 挡子/null 挡层/null 挡开/null 挡拆/null 挡挡/null 挡板/null 挡案库/null 挡横儿/null 挡水/null 挡泥/null 挡泥板/null 挡眼/null 挡箭牌/null 挡路/null 挡车/null 挡道/null 挡钱/null 挡雨/null 挡风/null 挡风墙/null 挡风板/null 挡风玻璃/null 挡驾/null 挣个/null 挣到/null 挣命/null 挣开/null 挣得/null 挣扎/null 挣揣/null 挣断/null 挣来/null 挣点/null 挣着/null 挣脱/null 挣起/null 挣钱/null 挣饭/null 挤上/null 挤上去/null 挤乳/null 挤人/null 挤作/null 挤兑/null 挤入/null 挤出/null 挤到/null 挤占/null 挤压/null 挤压出/null 挤去/null 挤向/null 挤咕/null 挤在/null 挤垮/null 挤奶/null 挤奶人/null 挤奶员/null 挤奶机/null 挤对/null 挤干/null 挤得/null 挤成/null 挤挤/null 挤挤插插/null 挤掉/null 挤提/null 挤撞/null 挤时间/null 挤来/null 挤来挤去/null 挤榨/null 挤满/null 挤牙膏/null 挤牛奶/null 挤眉弄眼/null 挤眉溜眼/null 挤眼/null 挤着/null 挤紧/null 挤花/null 挤花袋/null 挤落/null 挤走/null 挤踏/null 挤车/null 挤轧/null 挤过/null 挤进/null 挤进去/null 挤迫/null 挤逼/null 挥之/null 挥之不去/null 挥之即去/null 挥兵/null 挥军/null 挥出/null 挥击/null 挥刀/null 挥别/null 挥剑/null 挥剑成河/null 挥动/null 挥动者/null 挥发/null 挥发性/null 挥发性存储器/null 挥发油/null 挥发物/null 挥师/null 挥戈/null 挥戈反日/null 挥戈回日/null 挥手/null 挥拳/null 挥挥手/null 挥斥/null 挥斥方遒/null 挥旗/null 挥杆/null 挥毫/null 挥毫洒墨/null 挥汗/null 挥汗如雨/null 挥汗成雨/null 挥泪/null 挥洒/null 挥洒自如/null 挥翰/null 挥翰临池/null 挥翰成风/null 挥臂/null 挥舞/null 挥金/null 挥金如土/null 挥霍/null 挥霍一空/null 挥霍无度/null 挥霍浪费/null 挥霍者/null 挥鞭/null 挥麈/null 挨上/null 挨不上/null 挨个/null 挨个儿/null 挨克/null 挨冻/null 挨刀/null 挨到/null 挨受/null 挨呲儿/null 挨头子/null 挨宰/null 挨家/null 挨家挨户/null 挨山塞海/null 挨延/null 挨得/null 挨户/null 挨户团/null 挨打/null 挨打受气/null 挨打受骂/null 挨批/null 挨挤/null 挨揍/null 挨擦/null 挨整/null 挨斗/null 挨时间/null 挨板子/null 挨次/null 挨着/null 挨肩/null 挨肩儿/null 挨肩搭背/null 挨肩擦背/null 挨肩擦脸/null 挨肩擦膀/null 挨肩迭背/null 挨著/null 挨训/null 挨踢/null 挨边/null 挨边儿/null 挨过/null 挨近/null 挨门/null 挨门逐户/null 挨靠/null 挨风缉缝/null 挨饥抵饿/null 挨饿/null 挨骂/null 挨黑/null 挪亚/null 挪作他用/null 挪借/null 挪出/null 挪动/null 挪占/null 挪威/null 挪威人/null 挪威币/null 挪威语/null 挪开/null 挪款/null 挪步/null 挪用/null 挪移/null 挪窝/null 挪窝儿/null 挪言/null 挪走/null 挫伤/null 挫折/null 挫折感/null 挫敌/null 挫败/null 挫骨扬灰/null 振作/null 振作有为/null 振作精神/null 振兴/null 振兴中华/null 振兴区/null 振刷/null 振动/null 振动器/null 振动子/null 振动筛/null 振动者/null 振动计/null 振响/null 振奋/null 振奋人心/null 振奋精神/null 振安/null 振安区/null 振幅/null 振拔/null 振振有词/null 振振有辞/null 振旅/null 振民育德/null 振片/null 振穷恤寡/null 振穷恤贫/null 振笔/null 振笔疾书/null 振翅/null 振翼/null 振耳/null 振聋发聩/null 振臂/null 振臂一呼/null 振臂高呼/null 振荡/null 振荡器/null 振衣提领/null 振衣濯足/null 振裘持领/null 振贫济乏/null 振起/null 振领提纲/null 振频/null 挹取/null 挹彼注兹/null 挹彼注此/null 挹掬/null 挹注/null 挹泪揉眵/null 挹酌/null 挺举/null 挺伸/null 挺住/null 挺凶/null 挺出/null 挺到/null 挺坚/null 挺好/null 挺拔/null 挺括/null 挺挺/null 挺杆/null 挺棒/null 挺爱/null 挺直/null 挺着/null 挺硬/null 挺秀/null 挺立/null 挺而走险/null 挺胸/null 挺胸凸肚/null 挺胸迭肚/null 挺脱/null 挺著/null 挺起/null 挺身/null 挺身而出/null 挺过/null 挺进/null 挺香/null 挽住/null 挽具/null 挽力/null 挽唱/null 挽回/null 挽回经济损失/null 挽幛/null 挽弩自射/null 挽手/null 挽救/null 挽救儿童/null 挽歌/null 挽留/null 挽留者/null 挽着/null 挽联/null 挽臂/null 挽衣女/null 挽袖/null 挽词/null 挽诗/null 挽起/null 挽辞/null 挽近/null 挽额/null 捂住/null 捂住脸/null 捂到/null 捂捂盖盖/null 捂盖子/null 捂着/null 捂雾拿云/null 捅了/null 捅咕/null 捅喽子/null 捅娄子/null 捅楼子/null 捅破/null 捅穿/null 捅马蜂窝/null 捆上/null 捆住/null 捆包/null 捆包绳/null 捆在/null 捆好/null 捆干/null 捆成/null 捆扎/null 捆稻草/null 捆紧/null 捆绑/null 捆缚/null 捆缚术/null 捆装/null 捆起/null 捉住/null 捉刀/null 捉到/null 捉取/null 捉奸/null 捉奸捉双/null 捉奸见床/null 捉将官里去/null 捉将挟人/null 捉弄/null 捉影/null 捉影捕风/null 捉影追风/null 捉拿/null 捉拿归案/null 捉捕器/null 捉摸/null 捉摸不定/null 捉班做势/null 捉生替死/null 捉笔/null 捉获/null 捉虎擒蛟/null 捉衿见肘/null 捉襟肘见/null 捉襟见肘/null 捉贼见赃捉奸见双/null 捉迷藏/null 捉鸡骂狗/null 捉鼠拿猫/null 捋胳膊/null 捋臂揎拳/null 捋虎须/null 捋袖/null 捋袖子/null 捋袖揎拳/null 捍卫/null 捍卫者/null 捎信/null 捎关打节/null 捎带/null 捎带脚儿/null 捎来/null 捎脚/null 捎色/null 捎马子/null 捏一把汗/null 捏估/null 捏住/null 捏制/null 捏合/null 捏告/null 捏咕/null 捏弄/null 捏成/null 捏手捏脚/null 捏报/null 捏捏/null 捏捏扭扭/null 捏着/null 捏碎/null 捏积/null 捏称/null 捏脊治疗/null 捏脊疗法/null 捏脚捏手/null 捏腔拿调/null 捏著/null 捏词/null 捏造/null 捏造者/null 捐出/null 捐助/null 捐助人/null 捐募/null 捐华务实/null 捐命/null 捐弃/null 捐弃前嫌/null 捐忿弃瑕/null 捐款/null 捐款人/null 捐款额/null 捐款者/null 捐残去杀/null 捐物/null 捐献/null 捐献者/null 捐班/null 捐生/null 捐生殉国/null 捐益表/null 捐税/null 捐给/null 捐背/null 捐血/null 捐血者/null 捐赀/null 捐资/null 捐赠/null 捐赠盈余/null 捐赠者/null 捐躯/null 捐躯报国/null 捐躯殒首/null 捐躯济难/null 捐躯赴难/null 捐输/null 捐选/null 捐金抵璧/null 捐钱/null 捕俘/null 捕处/null 捕头/null 捕尽/null 捕影拿风/null 捕影系风/null 捕快/null 捕房/null 捕手/null 捕拿/null 捕捉/null 捕捞/null 捕收/null 捕杀/null 捕猎/null 捕禽人/null 捕获/null 捕获量/null 捕虏岩/null 捕虫叶/null 捕虾/null 捕蝇器/null 捕蝇纸/null 捕蟹/null 捕风弄月/null 捕风捉影/null 捕风系影/null 捕食/null 捕食性/null 捕鱼/null 捕鱼人/null 捕鱼用/null 捕鲸/null 捕鲸船/null 捕鸟/null 捕鸟蛛/null 捕鼠/null 捕鼠器/null 捕鼠机/null 捞一把/null 捞什子/null 捞出/null 捞住/null 捞到/null 捞取/null 捞捕/null 捞摸/null 捞月/null 捞本/null 捞着/null 捞稻草/null 捞网/null 捞著/null 捞起/null 捞钱/null 损上益下/null 损人/null 损人不利己/null 损人利己/null 损人安己/null 损人害己/null 损人益己/null 损人肥己/null 损伤/null 损公肥私/null 损兵折将/null 损军折将/null 损友/null 损坏/null 损失/null 损害/null 损己利物/null 损本逐末/null 损毁/null 损益/null 损益表/null 损税/null 损耗/null 损耗品/null 损耗量/null 损赠/null 损量/null 捡了/null 捡到/null 捡开/null 捡拾/null 捡来/null 捡漏/null 捡漏儿/null 捡的/null 捡着/null 捡破烂/null 捡破烂儿/null 捡起/null 换上/null 换个/null 换个儿/null 换乘/null 换了/null 换亲/null 换人/null 换代/null 换代产品/null 换位/null 换入/null 换出/null 换单/null 换取/null 换句话说/null 换向/null 换回/null 换契/null 换妻/null 换季/null 换届/null 换岗/null 换工/null 换帖/null 换幕/null 换开/null 换式/null 换性者/null 换成/null 换房/null 换房旅游/null 换挡/null 换挡杆/null 换换/null 换掉/null 换文/null 换新/null 换日偷天/null 换来换/null 换样/null 换档/null 换档杆/null 换毛/null 换气/null 换水/null 换汇/null 换汤/null 换汤不换药/null 换洗/null 换热器/null 换版/null 换牌/null 换牙/null 换班/null 换用/null 换票/null 换称/null 换笔/null 换算/null 换线/null 换置/null 换羽/null 换能器/null 换船/null 换茬/null 换药/null 换行/null 换行符/null 换装/null 换言之/null 换证/null 换货/null 换车/null 换进/null 换钱/null 换防/null 换面/null 换鞋底/null 换页/null 换领/null 换骨夺胎/null 换骨脱胎/null 捣乱/null 捣乱者/null 捣卖/null 捣坏/null 捣实/null 捣弄/null 捣枕捶床/null 捣毁/null 捣烂/null 捣碎/null 捣腾/null 捣蒜/null 捣虚批吭/null 捣蛋/null 捣蛋鬼/null 捣衣/null 捣鬼/null 捣麻烦/null 捣鼓/null 捧上天/null 捧人/null 捧住/null 捧到天上/null 捧哏/null 捧场/null 捧头鼠窜/null 捧心西子/null 捧托/null 捧持/null 捧杀/null 捧杯/null 捧毂推轮/null 捧着/null 捧腹/null 捧腹大笑/null 捧腹绝倒/null 捧腹轩渠/null 捧花/null 捧著/null 捧角/null 捧角儿/null 捧读/null 捧走/null 捧起/null 捭阖/null 捭阖纵横/null 据不完全统计/null 据为/null 据为己有/null 据义履方/null 据了解/null 据介绍/null 据从/null 据以/null 据传/null 据传闻/null 据估/null 据估计/null 据信/null 据典/null 据分析/null 据初步统计/null 据外电报道/null 据守/null 据守天险/null 据实/null 据宣布/null 据悉/null 据情办理/null 据我/null 据我所知/null 据我看/null 据报/null 据报导/null 据报道/null 据料/null 据有/null 据有关人士透露/null 据有关部门统计/null 据查/null 据此/null 据测/null 据测定/null 据点/null 据理/null 据理力争/null 据知/null 据称/null 据统计/null 据说/null 据调查/null 据载/null 据道/null 据闻/null 据险/null 据预测/null 捱三顶五/null 捱三顶四/null 捱过/null 捱风缉缝/null 捶击/null 捶子/null 捶平/null 捶床拍枕/null 捶床捣枕/null 捶打/null 捶背/null 捶胸/null 捶胸跌足/null 捶胸迭脚/null 捶胸顿脚/null 捶胸顿足/null 捷克人/null 捷克共和国/null 捷克和斯洛伐克/null 捷克币/null 捷克斯拉夫共和国/null 捷克斯洛伐克/null 捷克语/null 捷安特/null 捷尔任斯克/null 捷尔梅兹/null 捷径/null 捷报/null 捷报频传/null 捷给/null 捷者/null 捷语/null 捷豹/null 捷足/null 捷足先得/null 捷足先登/null 捷达/null 捷达航空货运/null 捷运/null 捺印/null 捻军/null 捻军起义/null 捻子/null 捻度/null 捻捻/null 捻捻转儿/null 捻搓机/null 捻着鼻子/null 捻神捻鬼/null 捻脚捻手/null 捻角/null 掀到/null 掀动/null 掀天揭地/null 掀天斡地/null 掀开/null 掀掉/null 掀涌/null 掀背式/null 掀腾/null 掀起/null 掀雷决电/null 掀风鼓浪/null 掂对/null 掂掂/null 掂掇/null 掂斤估两/null 掂斤抹两/null 掂斤播两/null 掂量/null 掇乖弄俏/null 掇刀/null 掇刀区/null 掇弄/null 掇拾/null 掇臀捧屁/null 掇青拾紫/null 授与/null 授与封/null 授业/null 授业解惑/null 授乳/null 授乳期/null 授予/null 授予者/null 授于/null 授人/null 授人以柄/null 授人以鱼不如授人以渔/null 授人口实/null 授以/null 授任/null 授信/null 授冠者/null 授动/null 授勋/null 授受/null 授受不亲/null 授命/null 授奖/null 授奶/null 授意/null 授手援溺/null 授旗/null 授时/null 授权/null 授权与/null 授权令/null 授权范围/null 授枪/null 授法/null 授爵位/null 授称号/null 授粉/null 授粉树/null 授精/null 授给/null 授职/null 授职惟贤/null 授职者/null 授衔/null 授计/null 授课/null 授首/null 掉下/null 掉书袋/null 掉了/null 掉以轻心/null 掉价/null 掉价儿/null 掉入/null 掉出/null 掉到/null 掉包/null 掉向/null 掉嘴弄舌/null 掉在/null 掉头/null 掉头就走/null 掉头鼠窜/null 掉换/null 掉期/null 掉枪花/null 掉泪/null 掉点儿/null 掉球/null 掉秤/null 掉线/null 掉膘/null 掉臂不顾/null 掉舌/null 掉舌鼓唇/null 掉色/null 掉落/null 掉转/null 掉过/null 掉过儿/null 掉进/null 掉队/null 掊击/null 掌上/null 掌上型/null 掌上明珠/null 掌上电脑/null 掌上观纹/null 掌中/null 掌中戏/null 掌击/null 掌力/null 掌勺/null 掌勺儿/null 掌印/null 掌厨/null 掌嘴/null 掌声/null 掌声雷动/null 掌子/null 掌子面/null 掌心/null 掌承/null 掌控/null 掌掴声/null 掌握/null 掌握分寸/null 掌握电脑/null 掌故/null 掌权/null 掌柜/null 掌柜的/null 掌案儿的/null 掌灯/null 掌灶/null 掌玺大臣/null 掌玺官/null 掌班/null 掌相/null 掌管/null 掌舵/null 掌舵人/null 掌财/null 掌铺/null 掌鞭/null 掌骨/null 掎裳连袂/null 掏出/null 掏到/null 掏包/null 掏取/null 掏尽/null 掏心掏肺/null 掏空/null 掏窟窿/null 掏粪/null 掏给/null 掏腰包/null 掏钱/null 掐住/null 掐头去尾/null 掐子/null 掐尖落钞/null 掐巴/null 掐指/null 掐掉/null 掐断/null 掐死/null 掐灭/null 掐算/null 掐紧/null 掐诀/null 排上/null 排中律/null 排人/null 排他/null 排他性/null 排便/null 排偶/null 排入/null 排兵布阵/null 排出/null 排击/null 排列/null 排列名次/null 排列次序/null 排到/null 排华/null 排华法案/null 排印/null 排卵/null 排卵期/null 排去/null 排号/null 排名/null 排名榜/null 排名表/null 排在/null 排场/null 排坛/null 排外/null 排头/null 排头兵/null 排好/null 排子车/null 排字/null 排它性/null 排定/null 排客/null 排射/null 排尾/null 排尿/null 排屋/null 排山倒峡/null 排山倒海/null 排山压卵/null 排干/null 排序/null 排序算法/null 排序问题/null 排开/null 排律/null 排忧解难/null 排患解纷/null 排愁破涕/null 排戏/null 排成/null 排挡/null 排挡速率/null 排挤/null 排挤掉/null 排揎/null 排摈/null 排放/null 排放器/null 排整齐/null 排斥/null 排斥异己/null 排枪/null 排架/null 排查/null 排查故障/null 排档/null 排档速率/null 排检/null 排毒/null 排比/null 排气/null 排气口/null 排气孔/null 排气管/null 排水/null 排水口/null 排水槽/null 排水沟/null 排水渠/null 排水管/null 排水系统/null 排水量/null 排汗/null 排污/null 排污地下主管网/null 排污管/null 排泄/null 排泄物/null 排泄系统/null 排泄腔/null 排法/null 排泻/null 排泻口/null 排泻物/null 排洪/null 排涝/null 排湾族/null 排演/null 排灌/null 排炮/null 排版/null 排犹/null 排犹主义/null 排班/null 排球/null 排空/null 排笔/null 排笙/null 排筏/null 排箫/null 排粪/null 排练/null 排翅/null 排脓/null 排舞/null 排萧/null 排行/null 排行榜/null 排解/null 排课/null 排调/null 排起长队/null 排遣/null 排量/null 排钮/null 排错/null 排长/null 排长队/null 排队/null 排阵/null 排除/null 排除万难/null 排除异己/null 排障/null 排难/null 排难解纷/null 排雷/null 排风/null 排风口/null 排骨/null 排齐/null 掖咕/null 掖垣/null 掖庭/null 掖掖盖盖/null 掖门/null 掘于/null 掘井/null 掘以/null 掘出/null 掘凿器/null 掘到/null 掘取/null 掘土/null 掘土机/null 掘地/null 掘坑/null 掘墓/null 掘墓人/null 掘墓工人/null 掘墓鞭尸/null 掘壕/null 掘客/null 掘室求鼠/null 掘沟/null 掘洞/null 掘洞穴/null 掘翻/null 掘起/null 掘进/null 掘进率/null 掘通/null 掠人之美/null 掠卖/null 掠卖华工/null 掠取/null 掠取物/null 掠地/null 掠地攻城/null 掠夺/null 掠夺兵/null 掠夺品/null 掠夺性/null 掠夺者/null 掠影/null 掠是搬非/null 掠杀/null 掠美/null 掠脂斡肉/null 掠角/null 掠走/null 掠过/null 掠食/null 掠食性/null 掠食者/null 探井/null 探亲/null 探亲假/null 探亲访友/null 探伤/null 探伤器/null 探信/null 探出/null 探勘/null 探勘员/null 探勘者/null 探友/null 探取/null 探口气/null 探口风/null 探听/null 探听者/null 探听虚实/null 探启/null 探员/null 探囊取物/null 探头/null 探头探脑/null 探头探脑儿/null 探奇/null 探奇穷异/null 探奇访胜/null 探奥索隐/null 探子/null 探家/null 探察/null 探寻/null 探寻者/null 探尺/null 探幽发微/null 探幽穷赜/null 探幽索隐/null 探异玩奇/null 探息/null 探悉/null 探戈/null 探戈舞/null 探掘/null 探摸/null 探明/null 探春/null 探月/null 探望/null 探本溯源/null 探本穷源/null 探查/null 探案/null 探求/null 探求者/null 探测/null 探测仪/null 探测器/null 探测字/null 探渊索珠/null 探源/null 探溯/null 探照灯/null 探犬/null 探玩/null 探病/null 探监/null 探看/null 探知/null 探矿/null 探矿者/null 探秘/null 探究/null 探究反射/null 探究式/null 探究性/null 探空/null 探空仪/null 探索/null 探索性/null 探索者/null 探船/null 探花/null 探视/null 探视权/null 探讨/null 探讨问题/null 探访/null 探询/null 探谎器/null 探象/null 探赜索隐/null 探路/null 探路者/null 探身/null 探身子/null 探过/null 探针/null 探钳/null 探长/null 探问/null 探问者/null 探险/null 探险家/null 探险者/null 探雷/null 探雷人员/null 探雷器/null 探风/null 探马/null 探骊得珠/null 掣电/null 掣肘/null 掣襟肘见/null 掣襟露肘/null 接三换九/null 接上/null 接下/null 接下来/null 接不/null 接事/null 接二连三/null 接交/null 接人/null 接任/null 接任者/null 接住/null 接到/null 接力/null 接力棒/null 接力赛/null 接力赛跑/null 接办/null 接单/null 接受/null 接受体/null 接受审问/null 接受者/null 接口/null 接口模块/null 接合/null 接合体/null 接合处/null 接合点/null 接合物/null 接合线/null 接合菌纲/null 接合部/null 接听/null 接吻/null 接和/null 接在/null 接地/null 接境/null 接墒/null 接壤/null 接头/null 接头儿/null 接头辞/null 接客/null 接应/null 接应不暇/null 接待/null 接待员/null 接待室/null 接待生/null 接待站/null 接待者/null 接戏/null 接手/null 接排/null 接接/null 接援/null 接收/null 接收器/null 接收器灵敏度/null 接收天线/null 接收机/null 接收站/null 接收者/null 接替/null 接替者/null 接木/null 接机/null 接来/null 接来送往/null 接枝/null 接棒/null 接气/null 接水/null 接泊车/null 接活/null 接洽/null 接济/null 接火/null 接点/null 接牢/null 接物/null 接物镜/null 接环/null 接班/null 接班人/null 接球/null 接生/null 接生婆/null 接电器/null 接盘人/null 接目镜/null 接眼/null 接着/null 接碴/null 接种/null 接穗/null 接站/null 接管/null 接纳/null 接线/null 接线员/null 接线柱/null 接线生/null 接线盒/null 接绍香烟/null 接续/null 接续而来/null 接续香烟/null 接缝/null 接羔/null 接耳/null 接耳交头/null 接茬/null 接茬儿/null 接获/null 接著/null 接著来/null 接衫/null 接袂成帷/null 接见/null 接触/null 接触不良/null 接触器/null 接触性皮炎/null 接触焊/null 接触眼镜/null 接词/null 接谈/null 接货/null 接贵攀高/null 接走/null 接踵/null 接踵比肩/null 接踵而来/null 接踵而至/null 接轨/null 接辞/null 接过/null 接近/null 接进/null 接连/null 接连不断/null 接送/null 接通/null 接通费/null 接长/null 接防/null 接风/null 接驳/null 接驳车/null 接驾/null 接骨/null 接骨师/null 接骨木/null 接龙/null 控件/null 控作/null 控制/null 控制下/null 控制人口/null 控制区/null 控制台/null 控制器/null 控制室/null 控制数字/null 控制权/null 控制杆/null 控制棒/null 控制系统/null 控制者/null 控制论/null 控制面板/null 控制项/null 控办/null 控名责实/null 控告/null 控告者/null 控拆/null 控方/null 控矽/null 控管/null 控罪/null 控股/null 控股公司/null 控规/null 控诉/null 控诉人/null 控诉道/null 控词/null 控购/null 控辩/null 控辩交易/null 控辩协议/null 控驭/null 推三宕四/null 推三挨四/null 推三阻四/null 推上/null 推东主西/null 推为/null 推举/null 推了/null 推事/null 推事席/null 推亡固存/null 推介/null 推介会/null 推估/null 推倒/null 推倒重来/null 推入/null 推出/null 推刨/null 推到/null 推力/null 推动/null 推动力/null 推动器/null 推动者/null 推却/null 推卸/null 推卸责任/null 推去/null 推及/null 推后/null 推向/null 推土/null 推土机/null 推天抢地/null 推头/null 推委/null 推子/null 推宕/null 推宗明本/null 推官/null 推定/null 推寻/null 推导/null 推尊/null 推展/null 推崇/null 推崇备至/null 推己及人/null 推广/null 推广应用/null 推度/null 推延/null 推开/null 推心/null 推心置腹/null 推恩/null 推情准理/null 推想/null 推戴/null 推手/null 推托/null 推拉门/null 推拿/null 推挤/null 推挽/null 推挽式/null 推换/null 推掉/null 推推/null 推搡/null 推搪/null 推撞/null 推故/null 推敲/null 推斥/null 推斥力/null 推断/null 推断出/null 推服/null 推本溯源/null 推杆/null 推来/null 推来推去/null 推检人员/null 推毂荐士/null 推求/null 推法/null 推波助澜/null 推测/null 推测上/null 推测学/null 推涛作浪/null 推溯/null 推演/null 推燥居湿/null 推特/null 推理/null 推理者/null 推病/null 推着/null 推知/null 推磨/null 推移/null 推究/null 推算/null 推索/null 推给/null 推群独步/null 推翻/null 推而广之/null 推聋做哑/null 推聋妆哑/null 推脱/null 推舟/null 推舟于陆/null 推荐/null 推荐书/null 推荐信/null 推荐者/null 推行/null 推衍/null 推襟送抱/null 推见/null 推计/null 推让/null 推许/null 推论/null 推论性/null 推诚/null 推诚布信/null 推诚布公/null 推诚待物/null 推诚接物/null 推诚相见/null 推诚置腹/null 推详/null 推说/null 推诿/null 推谢/null 推贤下士/null 推贤举善/null 推贤乐善/null 推贤任人/null 推贤让能/null 推贤进善/null 推贤进士/null 推贤逊能/null 推走/null 推起/null 推车/null 推车者/null 推轮捧毂/null 推辞/null 推运/null 推进/null 推进剂/null 推进力/null 推进器/null 推进改革/null 推进机/null 推进物/null 推进者/null 推进舱/null 推迟/null 推送/null 推选/null 推重/null 推铅球/null 推销/null 推销员/null 推销术/null 推门/null 推门入桕/null 推门而入/null 推问/null 推阐/null 推陈/null 推陈出新/null 推陈布新/null 推陈致新/null 推食解衣/null 掩上/null 掩人/null 掩人耳目/null 掩住/null 掩体/null 掩其不备/null 掩其无备/null 掩卷/null 掩口/null 掩口胡卢/null 掩埋/null 掩恶扬善/null 掩恶溢美/null 掩护/null 掩护物/null 掩掩/null 掩旗息鼓/null 掩映/null 掩映生姿/null 掩杀/null 掩样法/null 掩没/null 掩瑕藏疾/null 掩盖/null 掩目捕雀/null 掩眼法/null 掩着/null 掩罪饰非/null 掩美绝俗/null 掩耳/null 掩耳偷铃/null 掩耳盗钟/null 掩耳盗铃/null 掩耳而走/null 掩蔽/null 掩蔽处/null 掩蔽部/null 掩藏/null 掩贤妒善/null 掩面/null 掩面失色/null 掩面而泣/null 掩饰/null 掩饰物/null 掩鼻/null 掩鼻偷香/null 掩鼻而过/null 措举/null 措办/null 措勤/null 措口/null 措大/null 措失/null 措意/null 措手/null 措手不及/null 措手不迭/null 措施/null 措施不力/null 措款/null 措置/null 措置有方/null 措置裕如/null 措美/null 措词/null 措词不当/null 措词巧妙/null 措辞/null 措辞上/null 措辞不当/null 措辞强硬/null 措颜乖方/null 措颜天地/null 掬水/null 掬诚/null 掬起/null 掬饮/null 掮客/null 掰开/null 掰开揉碎/null 掰扯/null 掰掰/null 掳人/null 掳人勒赎/null 掳夺/null 掳掠/null 掳获/null 掳袖揎拳/null 掷下/null 掷出/null 掷回/null 掷地之材/null 掷地作金玉声/null 掷地有声/null 掷弹筒/null 掷抛/null 掷果盈车/null 掷棒/null 掷环/null 掷石地雷/null 掷至/null 掷色/null 掷还/null 掷骰子/null 掷鼠忌器/null 掸去/null 掸子/null 掸帚/null 掸灰/null 掸邦/null 掸邦高原/null 掺假/null 掺兑/null 掺入/null 掺制/null 掺合/null 掺和/null 掺有/null 掺杂/null 掺水/null 掺沙子/null 掺混/null 掺进/null 掼交/null 掼纱帽/null 揄扬/null 揄袂/null 揆度/null 揉制/null 揉匀/null 揉合/null 揉和/null 揉成/null 揉捻/null 揉搓/null 揉摩/null 揉皱/null 揉眵抹泪/null 揉眼/null 揉碎/null 揉磨/null 揉背/null 揉面/null 揉面槽/null 揍死/null 揎拳捋袖/null 描上/null 描写/null 描出/null 描图/null 描字/null 描成/null 描描/null 描摩者/null 描摹/null 描法/null 描淡写/null 描画/null 描眉画眼/null 描红/null 描绘/null 描述/null 描金/null 描鸾刺凤/null 提不/null 提不起来/null 提举/null 提了/null 提交/null 提亲/null 提亲事/null 提价/null 提任/null 提供/null 提供优质服务/null 提供商/null 提供方便/null 提供有/null 提供者/null 提倡/null 提倡者/null 提克里特/null 提出/null 提出建议/null 提出异议/null 提出批评/null 提出抗议/null 提出抗辩/null 提出申请/null 提出者/null 提列/null 提到/null 提制/null 提前/null 提前完成/null 提前投票/null 提前起爆/null 提剑汗马/null 提包/null 提升/null 提升间/null 提单/null 提去/null 提及/null 提取/null 提取物/null 提名/null 提名权/null 提名者/null 提告/null 提告人/null 提味/null 提喻法/null 提壶/null 提壶芦/null 提多/null 提多书/null 提头儿/null 提姆・罗宾斯/null 提婚/null 提子/null 提存/null 提学御史/null 提审/null 提尔/null 提尔市/null 提干/null 提异议/null 提心/null 提心吊胆/null 提心在口/null 提意见/null 提成/null 提手/null 提拉米苏/null 提拔/null 提拨/null 提挈/null 提掖/null 提提/null 提携/null 提摩太/null 提摩太前书/null 提摩太后书/null 提早/null 提案/null 提案人/null 提桶/null 提梁/null 提款/null 提款卡/null 提款机/null 提水工程/null 提法/null 提溜/null 提灌/null 提灯/null 提炼/null 提炼厂/null 提牌执戟/null 提现/null 提琴/null 提留/null 提盒/null 提着/null 提督/null 提示/null 提示区/null 提示符/null 提示音/null 提神/null 提神剂/null 提神药/null 提神醒脑/null 提笔/null 提笔忘字/null 提箱/null 提篮/null 提篮儿/null 提级/null 提级提价/null 提纯/null 提纯复壮/null 提纲/null 提纲挈领/null 提线木偶/null 提给/null 提职/null 提职提薪/null 提花/null 提葫芦/null 提薪/null 提行/null 提补/null 提要/null 提议/null 提议者/null 提讯/null 提词/null 提请/null 提调/null 提谈/null 提货/null 提货单/null 提资/null 提赔/null 提起/null 提起公诉/null 提起精神/null 提足/null 提述/null 提退/null 提选/null 提速/null 提醒/null 提醒物/null 提醒者/null 提链/null 提问/null 提防/null 提领/null 提高/null 提高产量/null 提高劳动效率/null 提高工作效率/null 提高技术/null 提高效率/null 提高效益/null 提高生产率/null 提高生活水平/null 提高觉悟/null 提高警惕/null 提高认识/null 提高质量/null 插上/null 插不上手/null 插于/null 插件/null 插住/null 插值/null 插入/null 插入句/null 插入因子/null 插入排序/null 插入杂交/null 插入物/null 插入语/null 插入键/null 插关儿/null 插写/null 插到/null 插叙/null 插口/null 插句/null 插嘴/null 插图/null 插在/null 插头/null 插孔/null 插定/null 插屏/null 插座/null 插戴/null 插手/null 插插花花/null 插旗/null 插曲/null 插条/null 插板/null 插枝/null 插架万轴/null 插栓/null 插槽/null 插法/null 插犋/null 插班/null 插班生/null 插画/null 插科打浑/null 插科打诨/null 插秧/null 插秧机/null 插管/null 插线/null 插线板/null 插翅/null 插翅难逃/null 插翅难飞/null 插脚/null 插腰/null 插花/null 插花地/null 插补/null 插袋/null 插言/null 插话/null 插话式/null 插足/null 插身/null 插车/null 插进/null 插销/null 插锁/null 插队/null 插队落户/null 插页/null 揖拜/null 揖让/null 揘毕/null 揠苗助长/null 握云拿雾/null 握云携雨/null 握住/null 握别/null 握力/null 握发吐哺/null 握图临宇/null 握手/null 握手极欢/null 握手言和/null 握手言欢/null 握拳/null 握拳透掌/null 握持/null 握有/null 握椠怀铅/null 握法/null 握炭流汤/null 握牢/null 握瑜怪玉/null 握着/null 握紧/null 握紧拳头/null 握纲提领/null 握股/null 握蛇骑虎/null 握钩伸铁/null 握雨携云/null 握风捕影/null 揣合逢迎/null 揣在怀里/null 揣奸把猾/null 揣度/null 揣想/null 揣手/null 揣手儿/null 揣摩/null 揣歪捏怪/null 揣测/null 揣着/null 揣进/null 揩去/null 揩布/null 揩油/null 揩泪/null 揪人心肺/null 揪住/null 揪出/null 揪心/null 揪心扒肝/null 揪心揪肺/null 揪打/null 揪揪/null 揪斗/null 揪痧/null 揪著/null 揪辫子/null 揪送/null 揪错/null 揭下/null 揭丑/null 揭东/null 揭债还债/null 揭出/null 揭去/null 揭发/null 揭发者/null 揭帖/null 揭幕/null 揭幕式/null 揭底/null 揭开/null 揭开战幔/null 揭批/null 揭掉/null 揭晓/null 揭榜/null 揭橥/null 揭短/null 揭破/null 揭示/null 揭示者/null 揭秘/null 揭穿/null 揭竿/null 揭竿而起/null 揭西/null 揭谛/null 揭起/null 揭载/null 揭阳/null 揭露/null 揭露者/null 揭面纱/null 揭黑/null 援交/null 援交妹/null 援交小姐/null 援例/null 援兵/null 援军/null 援助/null 援助之手/null 援助交际/null 援助机构/null 援古证今/null 援外/null 援建/null 援引/null 援手/null 援救/null 援救者/null 援溺振渴/null 援用/null 援笔成章/null 援笔立成/null 援笔而就/null 援藏/null 揶揄/null 揽在/null 揽子/null 揽工/null 揽权/null 揽权纳贿/null 揽活/null 揽胜/null 揽货/null 揽辔澄清/null 揾食/null 揿住/null 揿纽/null 揿钮/null 搀以/null 搀住/null 搀假/null 搀兑/null 搀入/null 搀合/null 搀和/null 搀扶/null 搀有/null 搀杂/null 搀杂用/null 搀水/null 搀行夺市/null 搀起/null 搀进/null 搀酒/null 搁下/null 搁不住/null 搁到/null 搁在/null 搁延/null 搁得住/null 搁板/null 搁架/null 搁浅/null 搁着/null 搁笔/null 搁置/null 搁脚板/null 搁脚物/null 搁起/null 搂住/null 搂在/null 搂头/null 搂抱/null 搂搂/null 搂梯/null 搂着/null 搂钱/null 搂颈/null 搅乱/null 搅乱器/null 搅动/null 搅匀/null 搅合/null 搅和/null 搅基/null 搅局/null 搅扰/null 搅拌/null 搅拌器/null 搅拌机/null 搅拌棒/null 搅散/null 搅浊/null 搅浑/null 搅海翻江/null 搅混/null 搅碎/null 搅翻/null 搅蛋器/null 搅过/null 搋在怀里/null 搋子/null 搋面/null 搌布/null 搏击/null 搏动/null 搏战/null 搏手/null 搏手无策/null 搏斗/null 搏杀/null 搏髀/null 搐动/null 搐搦/null 搓动/null 搓合/null 搓成/null 搓手/null 搓手跺脚/null 搓手顿脚/null 搓手顿足/null 搓捻/null 搓揉/null 搓板/null 搓洗/null 搓澡/null 搓粉团朱/null 搓粉抟朱/null 搓麻将/null 搔头/null 搔头弄姿/null 搔头抓耳/null 搔头摸耳/null 搔痒/null 搔痒症/null 搔着痒处/null 搔耳捶胸/null 搔肤器/null 搔首/null 搔首弄姿/null 搔首踟蹰/null 搜出/null 搜刮/null 搜取/null 搜奇抉怪/null 搜奇访古/null 搜奇选妙/null 搜寻/null 搜寻出/null 搜寻器/null 搜寻引擎/null 搜寻者/null 搜寻软体/null 搜扬仄陋/null 搜扬侧陋/null 搜括/null 搜捕/null 搜救/null 搜救犬/null 搜查/null 搜根剔牙/null 搜根问底/null 搜检/null 搜求/null 搜狐网/null 搜狗/sogou 搜索/null 搜索引擎/null 搜索枯肠/null 搜索论/null 搜罗/null 搜肠刮肚/null 搜获/null 搜藏/null 搜证/null 搜身/null 搜集/null 搜集品/null 搜集详尽/null 搞不清/null 搞乌龙/null 搞乱/null 搞了/null 搞出/null 搞到/null 搞到手/null 搞坏/null 搞垮/null 搞基/null 搞好/null 搞定/null 搞得/null 搞怪/null 搞成/null 搞活/null 搞混/null 搞清/null 搞特殊化/null 搞笑/null 搞笑片/null 搞糟/null 搞细/null 搞臭/null 搞花样/null 搞花样儿/null 搞起/null 搞通/null 搞钱/null 搞错/null 搞鬼/null 搠笔巡街/null 搦战/null 搦管操斛/null 搪塞/null 搪瓷/null 搪瓷器/null 搪突/null 搬上/null 搬了/null 搬光/null 搬入/null 搬兵/null 搬出/null 搬出去/null 搬到/null 搬动/null 搬去/null 搬口/null 搬口弄舌/null 搬唆/null 搬唇弄舌/null 搬唇递舌/null 搬场/null 搬家/null 搬开/null 搬弄/null 搬弄是非/null 搬指/null 搬掉/null 搬斤播两/null 搬来/null 搬演/null 搬用/null 搬石头砸自己的脚/null 搬砖砸脚/null 搬移/null 搬空/null 搬请/null 搬走/null 搬起石头砸自己的脚/null 搬迁/null 搬迁户/null 搬运/null 搬运工/null 搬进/null 搬铺/null 搭上/null 搭乘/null 搭伙/null 搭伴/null 搭作/null 搭便/null 搭便车/null 搭出/null 搭卖/null 搭咕/null 搭嘴/null 搭坐/null 搭声/null 搭头/null 搭好/null 搭客/null 搭帮/null 搭建/null 搭成/null 搭手/null 搭扣/null 搭把手/null 搭把手儿/null 搭拉/null 搭挡/null 搭接/null 搭接片/null 搭搭/null 搭救/null 搭机/null 搭架子/null 搭柏油/null 搭桌/null 搭档/null 搭桥/null 搭棚/null 搭牢/null 搭班/null 搭理/null 搭界/null 搭白/null 搭盖/null 搭缝/null 搭肩/null 搭背/null 搭脚儿/null 搭脚手架/null 搭腔/null 搭腰/null 搭膊/null 搭船/null 搭茬/null 搭茬儿/null 搭街坊/null 搭补/null 搭裢/null 搭讪/null 搭话/null 搭调/null 搭起/null 搭赸/null 搭车/null 搭轻铁/null 搭载/null 搭连/null 搭造/null 搭配/null 搭钩/null 搭铺/null 搳拳/null 搴旗/null 搴旗取将/null 搴旗斩馘/null 搴旗虏将/null 携云挈雨/null 携云握雨/null 携伴/null 携备/null 携家带口/null 携家带眷/null 携带/null 携带型/null 携带者/null 携幼/null 携幼扶老/null 携式/null 携弹/null 携手/null 携手前进/null 携手同行/null 携手并肩/null 携手并进/null 携枪/null 携款/null 携物/null 携男挈女/null 携眷/null 携老扶幼/null 携老挈幼/null 携贰/null 携领/null 携首接武/null 搽去/null 搽掉/null 搽粉/null 搽脂抹粉/null 摁扣/null 摁扣儿/null 摁钉/null 摁钉儿/null 摄位/null 摄像/null 摄像头/null 摄像机/null 摄入/null 摄入量/null 摄制/null 摄制组/null 摄卫/null 摄去/null 摄取/null 摄在/null 摄威擅势/null 摄影/null 摄影场/null 摄影学/null 摄影家/null 摄影展/null 摄影师/null 摄影术/null 摄影机/null 摄影棚/null 摄影者/null 摄影联展/null 摄影记者/null 摄成/null 摄护腺/null 摄护腺肿大/null 摄政/null 摄政王/null 摄氏/null 摄氏度/null 摄氏温度表/null 摄氏温度计/null 摄氏表/null 摄理/null 摄生/null 摄生法/null 摄行/null 摄谱仪/null 摄象/null 摄食/null 摄魄钩魂/null 摅忠报国/null 摆上/null 摆个/null 摆乌龙/null 摆了/null 摆事实讲道理/null 摆出/null 摆列/null 摆到桌面上来/null 摆动/null 摆卖/null 摆在/null 摆在面前/null 摆在首位/null 摆地摊/null 摆好/null 摆姿势/null 摆子/null 摆宴/null 摆尾摇头/null 摆布/null 摆平/null 摆开/null 摆弄/null 摆成/null 摆手/null 摆手舞/null 摆掉/null 摆摆/null 摆摊/null 摆摊子/null 摆摊设点/null 摆擂台/null 摆放/null 摆明/null 摆架子/null 摆样子/null 摆格/null 摆正/null 摆渡/null 摆满/null 摆着/null 摆空架子/null 摆线/null 摆脱/null 摆脱危机/null 摆脱困境/null 摆臭/null 摆臭架子/null 摆舞/null 摆花架子/null 摆荡/null 摆荡吊环/null 摆著/null 摆设/null 摆设儿/null 摆谱/null 摆谱儿/null 摆轮/null 摆造型/null 摆酒/null 摆钟/null 摆门面/null 摆阔/null 摆阔气/null 摆饰/null 摆齐/null 摆龙门阵/null 摇下/null 摇了/null 摇低/null 摇光/null 摇出/null 摇到/null 摇动/null 摇匀/null 摇号/null 摇响/null 摇唇/null 摇唇鼓舌/null 摇头/null 摇头丸/null 摇头摆尾/null 摇头摆脑/null 摇头晃脑/null 摇奖/null 摇尾乞怜/null 摇幌/null 摇床/null 摇得/null 摇憾/null 摇扇/null 摇手/null 摇手触禁/null 摇把/null 摇控/null 摇摆/null 摇摆不定/null 摇摆人/null 摇摆着/null 摇摆舞/null 摇摇/null 摇摇头/null 摇摇摆摆/null 摇摇晃晃/null 摇摇欲坠/null 摇撼/null 摇旗/null 摇旗呐喊/null 摇晃/null 摇晃声/null 摇曳/null 摇曳多姿/null 摇杆/null 摇桨/null 摇椅/null 摇橹/null 摇滚/null 摇滚乐/null 摇滚舞/null 摇着/null 摇篮/null 摇篮曲/null 摇篮车/null 摇耧/null 摇臂/null 摇臂钻/null 摇船/null 摇荡/null 摇落/null 摇著/null 摇蚊/null 摇蜜/null 摇身/null 摇身一变/null 摇车/null 摇轴/null 摇醒/null 摇钱树/null 摇铃/null 摇铃打鼓/null 摇首顿足/null 摇鹅毛扇/null 摈弃/null 摈斥/null 摈除/null 摊主/null 摊付/null 摊位/null 摊儿/null 摊入/null 摊分/null 摊售/null 摊商/null 摊场/null 摊头/null 摊子/null 摊店/null 摊开/null 摊手/null 摊提/null 摊摊/null 摊晒/null 摊派/null 摊点/null 摊牌/null 摊薄/null 摊薄后每股盈利/null 摊贩/null 摊费/null 摊车/null 摊还/null 摊进/null 摊配/null 摊钱/null 摊销/null 摊鸡蛋/null 摒弃/null 摒挡/null 摒除/null 摔下/null 摔交/null 摔伤/null 摔倒/null 摔到/null 摔在/null 摔坏/null 摔开/null 摔得/null 摔打/null 摔掉/null 摔断/null 摔死/null 摔毁/null 摔破/null 摔碎/null 摔角/null 摔跟头/null 摔跤/null 摘下/null 摘伏发隐/null 摘借/null 摘出/null 摘去/null 摘发/null 摘取/null 摘取桂冠/null 摘句/null 摘句寻章/null 摘奸发伏/null 摘山煮海/null 摘帽/null 摘帽子/null 摘引/null 摘录/null 摘录者/null 摘心/null 摘抄/null 摘报/null 摘掉/null 摘牌/null 摘由/null 摘编/null 摘胆剜心/null 摘自/null 摘花/null 摘苹果/null 摘要/null 摘记/null 摘译/null 摘走/null 摘述/null 摘除/null 摞管/null 摧兰折玉/null 摧坚殪敌/null 摧坚获丑/null 摧坚陷阵/null 摧山搅海/null 摧志屈道/null 摧折/null 摧枯折腐/null 摧枯拉朽/null 摧枯拉腐/null 摧残/null 摧毁/null 摧眉折腰/null 摧胸剖肝/null 摧胸破肝/null 摧花/null 摧花斫柳/null 摧身碎首/null 摧锋陷阵/null 摩下/null 摩亨佐・达罗/null 摩加迪沙/null 摩卡/null 摩卡咖啡/null 摩厉以须/null 摩喉罗伽/null 摩城/null 摩天/null 摩天大厦/null 摩天大楼/null 摩天楼/null 摩天轮/null 摩娑/null 摩尔/null 摩尔人/null 摩尔多瓦/null 摩尔多瓦人/null 摩尔定律/null 摩尔根/null 摩尔根主义/null 摩尼/null 摩尼教/null 摩崖/null 摩德纳/null 摩托/null 摩托化/null 摩托化部队/null 摩托罗垃/null 摩托罗拉/null 摩托船/null 摩托车/null 摩托车的士/null 摩拳擦掌/null 摩挲/null 摩揭陀/null 摩撒/null 摩擦/null 摩擦力/null 摩擦声/null 摩擦学/null 摩擦电/null 摩擦系数/null 摩擦计/null 摩擦阻力/null 摩擦音/null 摩斯/null 摩斯拉/null 摩根/null 摩根・弗里曼/null 摩根士丹利/null 摩梭/null 摩梭族/null 摩洛哥/null 摩电灯/null 摩登/null 摩登原始人/null 摩的/null 摩纳哥/null 摩羯/null 摩羯座/null 摩肩/null 摩肩击毂/null 摩肩如云/null 摩肩接踵/null 摩苏尔/null 摩莎/null 摩萨德/null 摩蟹座/null 摩西/null 摩西五经/null 摩西律法/null 摩西的律法/null 摩诃/null 摩诃婆罗多/null 摩门/null 摩门经/null 摩顶放踵/null 摩顶至足/null 摩顶至踵/null 摭华损实/null 摭拾/null 摸不着/null 摸不着头脑/null 摸准/null 摸出/null 摸到/null 摸去/null 摸吧/null 摸头/null 摸头不着/null 摸底/null 摸弄/null 摸彩/null 摸彩箱/null 摸排/null 摸摸/null 摸有/null 摸来/null 摸棱两可/null 摸清/null 摸爬滚打/null 摸牌/null 摸看/null 摸着/null 摸着石头过河/null 摸石头过河/null 摸索/null 摸索著/null 摸脉/null 摸袋子/null 摸象/null 摸过/null 摸透/null 摸门不着/null 摸门儿/null 摸鱼/null 摸鸡偷狗/null 摸黑/null 摸黑儿/null 摹仿/null 摹写/null 摹写品/null 摹制/null 摹刻/null 摹印/null 摹古/null 摹扎特/null 摹拟/null 摹描/null 摹本/null 摹状/null 摹画/null 摹绘/null 摺叠/null 摺合/null 摺椅/null 摺痕/null 摺线/null 摺缝/null 撂下/null 撂交/null 撂倒/null 撂在/null 撂地/null 撂地摊/null 撂手/null 撂挑/null 撂挑子/null 撂荒/null 撅嘴/null 撅起/null 撇下/null 撇去/null 撇取/null 撇号/null 撇嘴/null 撇子/null 撇开/null 撇开不谈/null 撇弃/null 撇掉/null 撇清/null 撇脱/null 撑伞/null 撑住/null 撑场面/null 撑天拄地/null 撑开/null 撑持/null 撑杆/null 撑杆跳/null 撑杆跳高/null 撑架/null 撑柱/null 撑死/null 撑物/null 撑眉怒眼/null 撑着/null 撑破/null 撑竿/null 撑竿跳/null 撑竿跳高/null 撑篙/null 撑紧/null 撑肠拄肚/null 撑肠拄腹/null 撑腰/null 撑船/null 撑起/null 撑门面/null 撒丁岛/null 撒丫子/null 撒但/null 撒克逊/null 撒克逊人/null 撒刁/null 撒切尔/null 撒切尔夫人/null 撒呓挣/null 撒哈拉/null 撒哈拉以南/null 撒哈拉以南非洲/null 撒哈拉沙漠/null 撒在/null 撒娇/null 撒娇卖俏/null 撒娇撒痴/null 撒尔孟/null 撒尿/null 撒布/null 撒开/null 撒手/null 撒手不管/null 撒手人寰/null 撒手锏/null 撒手闭眼/null 撒拉/null 撒拉语/null 撒拉逊人/null 撒拉铁/null 撒播/null 撒施/null 撒旦/null 撒村/null 撒欢儿/null 撒母耳纪上/null 撒母耳纪下/null 撒母耳记上/null 撒母耳记下/null 撒气/null 撒水/null 撒沙子/null 撒泼/null 撒泼打滚/null 撒泼放刁/null 撒满/null 撒然/null 撒督/null 撒种/null 撒科打诨/null 撒网/null 撒网捕风/null 撒罗满/null 撒胡椒面/null 撒脚/null 撒腿/null 撒营/null 撒落/null 撒诈捣虚/null 撒谎/null 撒豆成兵/null 撒赖/null 撒迦利亚/null 撒迦利亚书/null 撒遍/null 撒都该人/null 撒酒疯/null 撒野/null 撒门/null 撒食/null 撒马尔干/null 撒马尔罕/null 撕下/null 撕去/null 撕咬/null 撕坏/null 撕开/null 撕得/null 撕成/null 撕打/null 撕扯/null 撕掉/null 撕杀/null 撕毁/null 撕烂/null 撕破/null 撕破脸/null 撕破脸皮/null 撕碎/null 撕碎机/null 撕票/null 撕裂/null 撙节/null 撞一天钟/null 撞上/null 撞了/null 撞人/null 撞伤/null 撞倒/null 撞入/null 撞击/null 撞击声/null 撞击式印表机/null 撞击式打印机/null 撞到/null 撞坏/null 撞声/null 撞大运/null 撞府冲州/null 撞府穿州/null 撞开/null 撞性/null 撞打/null 撞撞/null 撞歪/null 撞死/null 撞毁/null 撞烂/null 撞球/null 撞球家/null 撞着/null 撞破/null 撞碎/null 撞见/null 撞车/null 撞运气/null 撞进/null 撞针/null 撞钟/null 撞锁/null 撞阵冲军/null 撞骗/null 撤了/null 撤佃/null 撤侨/null 撤免/null 撤兵/null 撤军/null 撤出/null 撤去/null 撤回/null 撤守/null 撤完/null 撤差/null 撤席/null 撤并/null 撤换/null 撤掉/null 撤架/null 撤款/null 撤消/null 撤离/null 撤空/null 撤职/null 撤职查办/null 撤营/null 撤诉/null 撤资/null 撤走/null 撤退/null 撤销/null 撤销职务/null 撤防/null 撤除/null 撩乱/null 撩云拨雨/null 撩人/null 撩动/null 撩开/null 撩惹/null 撩拨/null 撩是生非/null 撩望/null 撩蜂剔蝎/null 撩蜂吃蛰/null 撩蜂拔刺/null 撩起/null 撩逗/null 撬动/null 撬坏/null 撬开/null 撬杠/null 撬棍/null 撬窃/null 撬走/null 撬起/null 撬锁/null 撬门/null 播下/null 播出/null 播发/null 播客/null 播幅/null 播弄/null 播恶遗臭/null 播扬/null 播报/null 播报员/null 播报者/null 播撒/null 播放/null 播放列表/null 播放机/null 播散/null 播映/null 播种/null 播种期/null 播种机/null 播种者/null 播种面/null 播种面积/null 播糠眯目/null 播讲/null 播读/null 播转/null 播过/null 播送/null 播送者/null 播音/null 播音员/null 播音室/null 撮儿/null 撮口呼/null 撮合/null 撮子/null 撮弄/null 撮盐入水/null 撮盐入火/null 撮科打哄/null 撮箕/null 撮要/null 撰书/null 撰写/null 撰序/null 撰录/null 撰拟/null 撰文/null 撰文者/null 撰稿/null 撰稿人/null 撰者/null 撰著/null 撰述/null 撵出/null 撵开/null 撵走/null 撵跑/null 撷取/null 撸子/null 撺哄鸟乱/null 撺弄/null 撺拳拢袖/null 撺掇/null 撼人/null 撼动/null 撼地摇天/null 撼天动地/null 撼天震地/null 撼山拔树/null 撼树蚍蚨/null 撼树蚍蜉/null 擀面杖/null 擂台/null 擂台赛/null 擂天倒地/null 擂钵/null 擂鼓/null 擂鼓筛锣/null 擂鼓鸣金/null 擅于/null 擅作/null 擅作威福/null 擅入/null 擅取/null 擅场/null 擅定/null 擅改/null 擅断/null 擅权/null 擅用/null 擅离/null 擅离职守/null 擅美/null 擅自/null 擅长/null 擅闯/null 操之/null 操之过急/null 操作/null 操作上/null 操作台/null 操作员/null 操作器/null 操作性/null 操作步骤/null 操作环境/null 操作系统/null 操作者/null 操作规程/null 操作说明/null 操作速率/null 操你妈/null 操典/null 操刀/null 操刀手/null 操切/null 操券/null 操办/null 操劳/null 操劳过度/null 操场/null 操坪/null 操守/null 操守无暇/null 操屄/null 操心/null 操戈/null 操戈入室/null 操持/null 操控/null 操斧伐柯/null 操枪/null 操法/null 操游/null 操演/null 操琴/null 操盘手/null 操神/null 操纵/null 操纵台/null 操纵杆/null 操纵箱/null 操纵者/null 操纵自如/null 操练/null 操翰成章/null 操航/null 操舵/null 操舵室/null 操蛋/null 操行/null 操觚/null 操觚染翰/null 操课/null 操逼/null 操队/null 擎天/null 擎天之柱/null 擎天架海/null 擎天柱/null 擎天玉柱/null 擎拳合掌/null 擎着/null 擎苍牵黄/null 擒住/null 擒奸讨暴/null 擒拿/null 擒捉/null 擒纵/null 擒获/null 擒虎拿蛟/null 擒贼/null 擒贼先擒王/null 擒贼擒王/null 擒龙缚虎/null 擗踊拊心/null 擘划/null 擘开/null 擘画/null 擘肌分理/null 擘蓝/null 擢升/null 擢发抽肠/null 擢发难数/null 擢用/null 擢第/null 擤鼻涕/null 擦上/null 擦不掉/null 擦了/null 擦于/null 擦亮/null 擦亮眼睛/null 擦亮石/null 擦伤/null 擦光剂/null 擦光油/null 擦写/null 擦净/null 擦剂/null 擦去/null 擦声/null 擦子/null 擦屁股/null 擦干/null 擦干净/null 擦或压/null 擦把/null 擦拭/null 擦拳抹掌/null 擦拳磨掌/null 擦掉/null 擦掌磨拳/null 擦撞而过/null 擦擦/null 擦桌/null 擦棒球/null 擦汗/null 擦油/null 擦洗/null 擦澡/null 擦热/null 擦痕/null 擦皮鞋/null 擦眼泪/null 擦着/null 擦破/null 擦碎/null 擦碗布/null 擦磨/null 擦粉/null 擦网球/null 擦肩/null 擦肩而过/null 擦背/null 擦脂抹粉/null 擦腚纸/null 擦药/null 擦身而过/null 擦边/null 擦边球/null 擦过/null 擦除/null 擦鞋/null 擦鞋垫/null 擦鞋者/null 擦音/null 擦黑儿/null 攀上/null 攀亲/null 攀亲托熟/null 攀亲道故/null 攀今揽古/null 攀今比昔/null 攀今览古/null 攀供/null 攀升/null 攀害/null 攀岩/null 攀扯/null 攀折/null 攀援/null 攀援茎/null 攀木鱼/null 攀枝/null 攀枝花/null 攀枝花地区/null 攀比/null 攀爬/null 攀登/null 攀登者/null 攀着/null 攀缘/null 攀花折柳/null 攀藤揽葛/null 攀藤附葛/null 攀蟾折桂/null 攀诬/null 攀诬陷害/null 攀谈/null 攀越/null 攀车卧辙/null 攀辕卧辙/null 攀附/null 攀附权贵/null 攀高接贵/null 攀高结贵/null 攀鳞附翼/null 攀龙托凤/null 攀龙附凤/null 攀龙附骥/null 攉煤机/null 攒三聚五/null 攒射/null 攒成/null 攒眉/null 攒眉苦脸/null 攒簇/null 攒聚/null 攒钱/null 攘人之美/null 攘善/null 攘场/null 攘外/null 攘外安内/null 攘夷/null 攘夺/null 攘攘/null 攘灾/null 攘窃/null 攘羊/null 攘臂/null 攘臂一呼/null 攘臂而起/null 攘袂/null 攘袂切齿/null 攘袂扼腕/null 攘袖/null 攘诟/null 攘辟/null 攘除/null 攥着/null 攫住/null 攫取/null 攫夺/null 攫戾执猛/null 攮子/null 支与流裔/null 支书/null 支付/null 支付不起/null 支付协定/null 支付得起/null 支付日/null 支付款/null 支付者/null 支住/null 支使/null 支光/null 支公司/null 支农/null 支出/null 支前/null 支前工作/null 支助/null 支努干/null 支单/null 支原体/null 支原体肺炎/null 支取/null 支叶扶疏/null 支吾/null 支吾其词/null 支嘴儿/null 支委/null 支委会/null 支子/null 支字/null 支局/null 支左/null 支差/null 支库/null 支应/null 支店/null 支座/null 支开/null 支恐/null 支息/null 支承/null 支承销/null 支护/null 支招/null 支拨/null 支持/null 支持下/null 支持度/null 支持点/null 支持物/null 支持率/null 支持者/null 支援/null 支援前线/null 支援者/null 支撑/null 支撑力/null 支撑架/null 支撑点/null 支撑物/null 支支吾吾/null 支教/null 支数/null 支族/null 支杆/null 支枢/null 支架/null 支柱/null 支柱产业/null 支根/null 支棱/null 支款/null 支气管/null 支气管炎/null 支派/null 支流/null 支渠/null 支炉儿/null 支点/null 支用/null 支着儿/null 支票/null 支票簿/null 支离/null 支离破碎/null 支离繁碎/null 支竿/null 支系/null 支系统/null 支索/null 支线/null 支绌/null 支给/null 支脉/null 支船柱/null 支薪/null 支行/null 支解/null 支走/null 支路/null 支边/null 支那/null 支部/null 支部书记/null 支配/null 支配下/null 支配人/null 支配力/null 支配权/null 支配者/null 支链反应/null 支队/null 支领/null 收下/null 收之桑榆/null 收买/null 收买人/null 收付/null 收件/null 收件人/null 收件匣/null 收件箱/null 收伏/null 收信/null 收信人/null 收信机/null 收债/null 收假/null 收入/null 收入政策/null 收入水平/null 收兵/null 收养/null 收冬/null 收到/null 收割/null 收割机/null 收割者/null 收力/null 收发/null 收发器/null 收发室/null 收发短信/null 收取/null 收受/null 收受者/null 收受贿赂/null 收口/null 收听/null 收听者/null 收回/null 收回成命/null 收场/null 收复/null 收复失地/null 收好/null 收妥/null 收存/null 收存入/null 收存箱/null 收完/null 收官/null 收审/null 收容/null 收容力/null 收容审查/null 收容所/null 收尸/null 收尾/null 收尾音/null 收工/null 收差/null 收市/null 收帐/null 收废站/null 收归国有/null 收当人/null 收录/null 收录机/null 收心/null 收悉/null 收成/null 收房/null 收执/null 收报/null 收报人/null 收报员/null 收报室/null 收报机/null 收押/null 收拢/null 收拾/null 收据/null 收掉/null 收揽/null 收摊/null 收摊儿/null 收操/null 收支/null 收支平衡/null 收支平衡点/null 收支相抵/null 收放/null 收效/null 收效甚微/null 收敛/null 收敛剂/null 收敛序列/null 收敛性/null 收敛级数/null 收敛锋芒/null 收文/null 收方/null 收服/null 收权/null 收束/null 收条/null 收来/null 收款/null 收款人/null 收款台/null 收款员/null 收款机/null 收残缀轶/null 收殓/null 收汇/null 收治/null 收清/null 收煞/null 收生/null 收生婆/null 收用/null 收留/null 收留所/null 收益/null 收益分配/null 收益多/null 收益帐户/null 收益率/null 收监/null 收盘/null 收盘价/null 收看/null 收礼/null 收票人/null 收票员/null 收秋/null 收租/null 收税/null 收税人/null 收税员/null 收税官/null 收紧/null 收约/null 收纳/null 收线/null 收编/null 收缩/null 收缩了/null 收缩压/null 收缩性/null 收缩肌/null 收缴/null 收罗/null 收获/null 收获期/null 收获物/null 收获节/null 收藏/null 收藏品/null 收藏夹/null 收藏家/null 收视/null 收视反听/null 收视机/null 收视率/null 收讫/null 收讯/null 收词/null 收话/null 收账/null 收货/null 收货人/null 收购/null 收购价/null 收购价格/null 收购站/null 收购要约/null 收购量/null 收购额/null 收费/null 收费站/null 收贿/null 收赃者/null 收走/null 收起/null 收足/null 收转/null 收迄/null 收进/null 收钱/null 收银/null 收银台/null 收银员/null 收银机/null 收集/null 收集情报/null 收集成/null 收集者/null 收音/null 收音机/null 收风/null 收齐/null 攸关/null 改业/null 改为/null 改之/null 改乘/null 改习/null 改产/null 改任/null 改作/null 改俗迁风/null 改信/null 改修/null 改做/null 改元/null 改写/null 改击/null 改则/null 改判/null 改制/null 改动/null 改变/null 改变信仰者/null 改变形像/null 改变方向/null 改变者/null 改变面貌/null 改口/null 改名/null 改名换姓/null 改名易姓/null 改向/null 改善/null 改善关系/null 改善生活/null 改善通讯/null 改嘴/null 改回/null 改型/null 改天/null 改天换地/null 改头换面/null 改姓/null 改姓更名/null 改嫁/null 改寄/null 改小/null 改帐/null 改建/null 改张易调/null 改弦换张/null 改弦易调/null 改弦易辙/null 改弦更张/null 改恶从善/null 改恶向善/null 改恶行善/null 改悔/null 改成/null 改打/null 改换/null 改换家门/null 改换门庭/null 改换门闾/null 改掉/null 改改/null 改日/null 改易/null 改朝/null 改朝换代/null 改期/null 改样/null 改次/null 改正/null 改正缺点/null 改正错误/null 改步改玉/null 改版/null 改玉改行/null 改用/null 改由/null 改种/null 改称/null 改稿/null 改窜/null 改组/null 改组派/null 改编/null 改编本/null 改良/null 改良主义/null 改良品种/null 改良派/null 改良者/null 改葬/null 改行/null 改行迁善/null 改装/null 改观/null 改订/null 改订伊犁条约/null 改记/null 改译/null 改说/null 改调/null 改辕易辙/null 改辙/null 改过/null 改过不吝/null 改过从善/null 改过作新/null 改过向善/null 改过自新/null 改过迁善/null 改进/null 改进工作/null 改述/null 改选/null 改途/null 改造/null 改造思想/null 改造社会/null 改道/null 改邪/null 改邪归正/null 改错/null 改锥/null 改革/null 改革家/null 改革开放/null 改革派/null 改革者/null 改革进程/null 攻下/null 攻不破/null 攻为/null 攻事/null 攻于/null 攻伐/null 攻克/null 攻入/null 攻关/null 攻关项目/null 攻其/null 攻其不备/null 攻击/null 攻击力/null 攻击型核潜艇/null 攻击机/null 攻击目标/null 攻击线/null 攻剽/null 攻势/null 攻占/null 攻取/null 攻坚/null 攻坚战/null 攻城/null 攻城掠地/null 攻城木/null 攻城略地/null 攻城野战/null 攻子之盾/null 攻守/null 攻守同盟/null 攻心/null 攻心战/null 攻心战术/null 攻心翻/null 攻打/null 攻效/null 攻无不克/null 攻无不取/null 攻歼/null 攻灭/null 攻略/null 攻砭/null 攻破/null 攻苦食淡/null 攻讦/null 攻读/null 攻错/null 攻防/null 攻陷/null 放上/null 放下/null 放下包袱/null 放下屠刀/null 放下屠刀立地成佛/null 放下架子/null 放不下/null 放不下心/null 放之四海而皆准/null 放了/null 放于/null 放任/null 放任政策/null 放任自流/null 放低/null 放债/null 放假/null 放光/null 放入/null 放养/null 放冷风/null 放出/null 放刁/null 放刁撒泼/null 放到/null 放印子/null 放后/null 放告/null 放哨/null 放回/null 放在/null 放在优先地位/null 放在心上/null 放在眼里/null 放在第一位/null 放在首位/null 放声/null 放声大哭/null 放大/null 放大倍数/null 放大器/null 放大机/null 放大率/null 放大系数/null 放大纸/null 放大镜/null 放好/null 放学/null 放学后/null 放定/null 放宽/null 放对/null 放射/null 放射作战/null 放射免疫测定/null 放射学/null 放射形/null 放射性/null 放射性元素/null 放射性发光材料/null 放射性同位素/null 放射性废物/null 放射性战剂/null 放射性最强点/null 放射性材料/null 放射性核素/null 放射性武器/null 放射性污染/null 放射性沾染/null 放射性沾染物/null 放射性活度/null 放射性烟羽/null 放射性碎片/null 放射性碘/null 放射性粘染/null 放射性落下灰/null 放射性衰变/null 放射性计时/null 放射治疗/null 放射源/null 放射物/null 放射状/null 放射率/null 放射生成物/null 放射疗法/null 放射病/null 放射线/null 放射虫/null 放射防护/null 放屁/null 放屁虫/null 放工/null 放帐/null 放干/null 放平/null 放开/null 放开价格/null 放开经营/null 放弃/null 放弃者/null 放得下/null 放心/null 放心不下/null 放怀/null 放恣/null 放情丘壑/null 放慢/null 放手/null 放手一搏/null 放掉/null 放散/null 放映/null 放映室/null 放映师/null 放映机/null 放晴/null 放权/null 放松/null 放松管制/null 放枪/null 放样/null 放款/null 放歌/null 放步/null 放毒/null 放气/null 放水/null 放洋/null 放活/null 放浪/null 放浪不羁/null 放浪形骸/null 放淤/null 放火/null 放火狂/null 放火者/null 放炮/null 放烟幕弹/null 放热/null 放热反应/null 放热器/null 放焰口/null 放爆竹/null 放牛/null 放牛归马/null 放牧/null 放球/null 放生/null 放电/null 放盘/null 放眼/null 放眼世界/null 放眼望去/null 放着/null 放着明白装糊涂/null 放空/null 放空气/null 放空炮/null 放纵/null 放纵不拘/null 放纵不羁/null 放线菌/null 放缓/null 放缩尺/null 放置/null 放羊/null 放羊娃/null 放肆/null 放胆/null 放荒/null 放荡/null 放荡不拘/null 放荡不羁/null 放荡者/null 放著/null 放虎/null 放虎归山/null 放虎自卫/null 放血/null 放行/null 放言/null 放言高论/null 放话/null 放诞/null 放诞不拘/null 放诞不羁/null 放诞风流/null 放诱饵/null 放账/null 放贷/null 放走/null 放起/null 放轻/null 放达/null 放过/null 放还/null 放进/null 放远/null 放送/null 放逐/null 放量/null 放针/null 放钱/null 放错/null 放长/null 放长线钓大鱼/null 放青/null 放青苗/null 放鞭炮/null 放音/null 放风/null 放风筝/null 放飞/null 放飞机/null 放马/null 放马后炮/null 放高/null 放鸽子/null 放鹰逐犬/null 政事/null 政令/null 政令不一/null 政企/null 政企分开/null 政体/null 政党/null 政党政治/null 政出多门/null 政务/null 政务会/null 政务官/null 政务院/null 政区/null 政协/null 政协委员/null 政变/null 政和/null 政商/null 政圈/null 政坛/null 政大/null 政委/null 政学系/null 政审/null 政客/null 政局/null 政局演变/null 政工/null 政工干部/null 政府/null 政府代表/null 政府债券/null 政府军/null 政府大学院/null 政府官员/null 政府工作/null 政府工作报告/null 政府总理/null 政府新闻处/null 政府机关/null 政府机关开放系统互连总则/null 政府机构/null 政府警告/null 政府部门/null 政府首脑/null 政情/null 政战/null 政敌/null 政教/null 政教合一/null 政机机关/null 政权/null 政权建设/null 政权机关/null 政权真空/null 政柄/null 政治/null 政治上/null 政治事件/null 政治人物/null 政治任务/null 政治体制/null 政治关系/null 政治制度/null 政治动员/null 政治化/null 政治协商会议/null 政治协理员/null 政治危机/null 政治史/null 政治地位/null 政治处/null 政治委员/null 政治学/null 政治学院/null 政治宣传/null 政治家/null 政治局/null 政治局势/null 政治局面/null 政治常识/null 政治庇护/null 政治异议人士/null 政治形势/null 政治思想/null 政治思想史/null 政治思想工作/null 政治思想教育/null 政治思潮/null 政治性/null 政治情况/null 政治战略/null 政治报告/null 政治指导员/null 政治改革/null 政治教导员/null 政治斗争/null 政治方向/null 政治机关/null 政治机构/null 政治权利/null 政治权力/null 政治气候/null 政治活动/null 政治派别/null 政治犯/null 政治理念/null 政治理论/null 政治生活/null 政治社会学/null 政治立场/null 政治素质/null 政治纲领/null 政治经济/null 政治经济学/null 政治统计/null 政治罢工/null 政治舞台/null 政治解决/null 政治课/null 政治谋略/null 政治责任/null 政治路线/null 政治运动/null 政治追求/null 政治追讨/null 政治避难/null 政治部/null 政治问题/null 政治阴谋/null 政治集团/null 政治面目/null 政治领导/null 政法/null 政法部门/null 政派/null 政清狱简/null 政理/null 政界/null 政略/null 政略性/null 政策/null 政策主张/null 政策亏损/null 政策性/null 政策法规/null 政策界限/null 政策研究/null 政简刑清/null 政纪/null 政纪处分/null 政纲/null 政经/null 政绩/null 政要/null 政见/null 政训处/null 政论/null 政通/null 政通人和/null 政风/null 故世/null 故业/null 故主/null 故乡/null 故书/null 故事/null 故事书/null 故事体/null 故事影片/null 故事片/null 故事诗/null 故云/null 故交/null 故人/null 故伎/null 故伎重演/null 故作/null 故作多情/null 故作姿态/null 故作深沉/null 故作端庄/null 故做/null 故典/null 故剑/null 故剑情深/null 故去/null 故友/null 故名/null 故吏/null 故园/null 故国/null 故土/null 故土难移/null 故在/null 故地/null 故地重游/null 故址/null 故城/null 故墓/null 故多/null 故宅/null 故实/null 故宫/null 故宫博物院/null 故宫禾黍/null 故家/null 故家子弟/null 故居/null 故弄/null 故弄悬虚/null 故弄玄虚/null 故态/null 故态复萌/null 故意/null 故我/null 故技/null 故技重演/null 故旧/null 故旧不弃/null 故智/null 故杀/null 故此/null 故步自封/null 故犯/null 故知/null 故称/null 故第/null 故纵/null 故纸堆/null 故老/null 故而/null 故要/null 故训/null 故账/null 故辙/null 故迹/null 故道/null 故都/null 故里/null 故障/null 故障排除/null 效上/null 效价/null 效价能/null 效仿/null 效力/null 效劳/null 效命/null 效尤/null 效应/null 效应器/null 效忠/null 效忠誓词/null 效果/null 效果图/null 效果宏大/null 效果显著/null 效法/null 效率/null 效率高/null 效用/null 效益/null 效益年活动/null 效能/null 效颦/null 效颦学步/null 效验/null 敉平/null 敌中/null 敌人/null 敌众我寡/null 敌伪/null 敌体/null 敌兵/null 敌军/null 敌前/null 敌占/null 敌占区/null 敌友/null 敌台/null 敌后/null 敌国/null 敌地/null 敌基督/null 敌害/null 敌寇/null 敌对/null 敌对性/null 敌对者/null 敌将/null 敌工/null 敌师/null 敌后/null 敌得过/null 敌忾/null 敌忾同仇/null 敌情/null 敌意/null 敌我/null 敌我矛盾/null 敌所/null 敌手/null 敌探/null 敌敌畏/null 敌方/null 敌机/null 敌杀死/null 敌档/null 敌楼/null 敌焰/null 敌特/null 敌特分子/null 敌百虫/null 敌稗/null 敌群/null 敌者/null 敌船/null 敌营/null 敌视/null 敌酋/null 敌队/null 敌阵/null 敏原/null 敏悟/null 敏感/null 敏感化/null 敏感性/null 敏感物质/null 敏捷/null 敏锐/null 救世/null 救世主/null 救世军/null 救主/null 救了/null 救亡/null 救亡图存/null 救人/null 救人一命/null 救人一命胜造七级浮屠/null 救人须救彻/null 救兵/null 救出/null 救助/null 救去/null 救命/null 救命恩人/null 救命者/null 救困扶危/null 救国/null 救场/null 救场如救火/null 救市/null 救应/null 救急/null 救急不救穷/null 救恩/null 救恩计划/null 救我/null 救护/null 救护人员/null 救护所/null 救护车/null 救捞局/null 救援/null 救援工作/null 救援队/null 救救/null 救星/null 救死扶伤/null 救母/null 救民/null 救民水火/null 救治/null 救法/null 救活/null 救济/null 救济粮/null 救济者/null 救济费/null 救济金/null 救济院/null 救火/null 救火扬沸/null 救火船/null 救灾/null 救灾恤患/null 救灾救济司/null 救灾款/null 救灾物资/null 救焚拯溺/null 救焚益薪/null 救球/null 救生/null 救生伞/null 救生员/null 救生圈/null 救生筏/null 救生索/null 救生船/null 救生艇/null 救生艇甲板/null 救生衣/null 救生袋/null 救生队/null 救经引足/null 救者/null 救苦救难/null 救荒/null 救赎/null 救赎主/null 救起/null 救过不赡/null 救过补阙/null 救险/null 救难/null 救难者/null 救难船/null 救驾/null 敕令/null 敕勒/null 敕勒人/null 敕勒歌/null 敕勒族/null 敕勒族人/null 敕封/null 敕许/null 敖不可长/null 敖包/null 敖广/null 敖德萨/null 敖汉/null 敖游/null 敖贝得/null 敖闰/null 敖顺/null 教一识百/null 教主/null 教义/null 教义和圣约/null 教义学/null 教习/null 教书/null 教书匠/null 教书育人/null 教了/null 教人/null 教他/null 教代会/null 教令/null 教仪/null 教会/null 教会学校/null 教具/null 教养/null 教养员/null 教养院/null 教制/null 教务/null 教务处/null 教务室/null 教务科/null 教务长/null 教化/null 教区/null 教友/null 教友大会/null 教史/null 教名/null 教员/null 教唆/null 教唆犯/null 教团/null 教坊/null 教坏/null 教堂/null 教堂墓地/null 教士/null 教外/null 教头/null 教女/null 教委/null 教子/null 教子有方/null 教学/null 教学大纲/null 教学机构/null 教学楼/null 教学法/null 教学相长/null 教安/null 教宗/null 教官/null 教室/null 教寺/null 教导/null 教导员/null 教导处/null 教导队/null 教工/null 教师/null 教师爷/null 教师队伍/null 教席/null 教廷/null 教廷大使/null 教律/null 教徒/null 教成/null 教授/null 教授法/null 教改/null 教教/null 教无常师/null 教本/null 教权/null 教材/null 教条/null 教条主义/null 教案/null 教桌/null 教正/null 教母/null 教民/null 教法/null 教派/null 教父/null 教狂/null 教猱升木/null 教理/null 教界/null 教皇/null 教皇权/null 教益/null 教研/null 教研室/null 教研组/null 教祖/null 教科书/null 教科文/null 教科文卫/null 教科文教/null 教科文组织/null 教程/null 教籍/null 教练/null 教练员/null 教练机/null 教者/null 教职/null 教职员/null 教职员工/null 教职工/null 教育/null 教育制度/null 教育厅/null 教育委员会/null 教育学/null 教育家/null 教育局/null 教育工作者/null 教育性/null 教育方针/null 教育法/null 教育电视/null 教育界/null 教育相谈/null 教育背景/null 教育部长/null 教范/null 教规/null 教训/null 教训性/null 教训者/null 教诲/null 教诲者/null 教课/null 教过/null 教错/null 教长/null 教门/null 教阶/null 教鞭/null 教龄/null 敛容/null 敛性/null 敛步/null 敛衣/null 敛衽/null 敛财/null 敛足/null 敛迹/null 敛钱/null 敝人/null 敝体/null 敝县/null 敝团/null 敝国/null 敝局/null 敝屣/null 敝屣尊荣/null 敝帚千金/null 敝帚自珍/null 敝店/null 敝所/null 敝村/null 敝校/null 敝社/null 敝舍/null 敝部/null 敝队/null 敞亮/null 敞口/null 敞口儿/null 敞开/null 敞开供应/null 敞开儿/null 敞开思想/null 敞篷/null 敞篷汽车/null 敞篷车/null 敞胸/null 敞著/null 敞蓬/null 敞车/null 敞露/null 敢不从命/null 敢不敢/null 敢为/null 敢为人先/null 敢于/null 敢于创新/null 敢作/null 敢作敢为/null 敢作敢当/null 敢保/null 敢做/null 敢做敢为/null 敢做敢当/null 敢勇当先/null 敢干/null 敢开/null 敢当/null 敢怒/null 敢怒不敢言/null 敢怒而不敢言/null 敢情/null 敢想/null 敢想敢干/null 敢打/null 敢打敢拼/null 敢抓/null 敢是/null 敢死/null 敢死队/null 敢看/null 敢管/null 敢自/null 敢言/null 敢讲/null 敢说/null 敢达/null 敢问/null 散乱/null 散了/null 散亡/null 散件/null 散伙/null 散伙饭/null 散会/null 散体/null 散光/null 散光眼镜/null 散兵/null 散兵坑/null 散兵游勇/null 散兵线/null 散养/null 散出/null 散列/null 散剂/null 散匪/null 散去/null 散发/null 散场/null 散失/null 散失殆尽/null 散套/null 散学/null 散客/null 散射/null 散尽/null 散居/null 散工/null 散布/null 散布性/null 散带衡门/null 散席/null 散座/null 散座儿/null 散开/null 散弹/null 散弹枪/null 散心/null 散心解闷/null 散戏/null 散户/null 散打/null 散摊/null 散摊子/null 散播/null 散散步/null 散文/null 散文体/null 散文家/null 散文式/null 散文诗/null 散曲/null 散束/null 散板/null 散架/null 散步/null 散步场/null 散步道/null 散毒/null 散水/null 散沙/null 散漫/null 散点图/null 散热/null 散热器/null 散热片/null 散碎/null 散管/null 散粉/null 散粒/null 散职/null 散股/null 散腿裤/null 散落/null 散裂/null 散装/null 散见/null 散记/null 散话/null 散诞/null 散货/null 散转/null 散逸/null 散酒/null 散钱/null 散闷/null 散闷消愁/null 敦世厉俗/null 敦促/null 敦促者/null 敦刻/null 敦刻尔克大撤退/null 敦劝/null 敦化/null 敦厚/null 敦实/null 敦巴顿橡树林会议/null 敦朴/null 敦煌/null 敦煌石窟/null 敦睦/null 敦请/null 敦豪快递/null 敦豪快递公司/null 敦风厉俗/null 敦首/null 敬上/null 敬上接下/null 敬上爱下/null 敬业/null 敬业乐群/null 敬事不暇/null 敬仰/null 敬佩/null 敬候/null 敬受人时/null 敬受桑梓/null 敬受民时/null 敬启/null 敬启者/null 敬呈/null 敬告/null 敬备/null 敬天爱民/null 敬奉/null 敬姜犹绩/null 敬小慎微/null 敬悉/null 敬意/null 敬慕/null 敬慕者/null 敬拜/null 敬挽/null 敬时爱日/null 敬服/null 敬烟/null 敬爱/null 敬献/null 敬畏/null 敬礼/null 敬祝/null 敬神/null 敬称/null 敬老/null 敬老尊贤/null 敬老席/null 敬老恤贫/null 敬老慈少/null 敬老慈幼/null 敬老慈稚/null 敬老爱幼/null 敬老院/null 敬而远之/null 敬若神明/null 敬茶/null 敬虔/null 敬词/null 敬语/null 敬请/null 敬请光临/null 敬请批评指正/null 敬谢/null 敬谢不敏/null 敬贤爱士/null 敬贤礼士/null 敬贤重士/null 敬贺/null 敬赠/null 敬辞/null 敬送/null 敬酒/null 敬酒不吃吃罚酒/null 敬重/null 敬香/null 敬鬼神而远之/null 数一数二/null 数万/null 数不上/null 数不多/null 数不尽/null 数不清/null 数不着/null 数不胜数/null 数不过来/null 数个/null 数九/null 数九天/null 数九寒天/null 数人/null 数亿/null 数以万计/null 数以亿计/null 数以千计/null 数以百计/null 数伏/null 数位/null 数位信号/null 数位化/null 数位网路/null 数例/null 数倍/null 数值/null 数值分析/null 数值解/null 数典忘祖/null 数出/null 数列/null 数十/null 数十亿/null 数十年/null 数千/null 数发/null 数叨/null 数周/null 数国/null 数域/null 数多/null 数天/null 数奇命蹇/null 数字/null 数字上/null 数字信号/null 数字分频/null 数字化/null 数字命理学/null 数字导览设施/null 数字式/null 数字控制/null 数字时钟/null 数字模型/null 数字版权管理/null 数字电子计算机/null 数字电视/null 数字电话/null 数字电路/null 数字网/null 数字订购线路/null 数字通信/null 数字钟/null 数学/null 数学上/null 数学公式/null 数学分析/null 数学家/null 数学方法/null 数学模型/null 数学物理/null 数学物理学/null 数小时/null 数尺/null 数年/null 数度/null 数式/null 数往知来/null 数得着/null 数念/null 数打/null 数据/null 数据介面/null 数据传输/null 数据区/null 数据压缩/null 数据处理/null 数据库/null 数据库软件/null 数据总线/null 数据挖掘/null 数据接口/null 数据机/null 数据段/null 数据流/null 数据管理/null 数据网/null 数据网络/null 数据表/null 数据通信/null 数据通讯/null 数据链路/null 数据链路层/null 数据链路连接识别码/null 数据项/null 数控/null 数控技术/null 数控机床/null 数数/null 数断论长/null 数日/null 数易其稿/null 数月/null 数来宝/null 数模/null 数次/null 数法/null 数清/null 数点/null 数独/null 数珠/null 数珠念佛/null 数理/null 数理分析/null 数理化/null 数理哲学/null 数理经济/null 数理经济学/null 数理统计/null 数理逻辑/null 数用/null 数白论黄/null 数百/null 数百万/null 数目/null 数目字/null 数码/null 数码化/null 数码扫描/null 数码港/null 数码照相机/null 数码相机/null 数码通/null 数种/null 数米而炊/null 数组/null 数落/null 数见不鲜/null 数言/null 数论/null 数词/null 数说/null 数轴/null 数过/null 数逻/null 数量/null 数量分析/null 数量指标/null 数量积/null 数量级/null 数量经济学/null 数量词/null 数钱/null 数错/null 数集/null 数页/null 数额/null 数黄道白/null 数黄道黑/null 数黑论白/null 数黑论黄/null 敲下/null 敲丧钟/null 敲中背/null 敲入/null 敲出/null 敲击/null 敲击者/null 敲响/null 敲声/null 敲大背/null 敲定/null 敲小背/null 敲山震虎/null 敲平/null 敲开/null 敲弯/null 敲打/null 敲打锣鼓/null 敲掉/null 敲敲打打/null 敲榨/null 敲牛宰马/null 敲破/null 敲碎/null 敲竹杠/null 敲背/null 敲诈/null 敲诈勒索/null 敲诈勒索罪/null 敲诈罪/null 敲诈者/null 敲边/null 敲边鼓/null 敲进/null 敲金击玉/null 敲金击石/null 敲金戛玉/null 敲钉/null 敲钉子/null 敲钉钻脚/null 敲钟/null 敲锣/null 敲锣打鼓/null 敲门/null 敲门砖/null 敲门者/null 敲骨剥髓/null 敲骨吸髓/null 敲鼓声/null 整个/null 整个地球/null 整人/null 整付/null 整件/null 整份/null 整体/null 整体优势/null 整体吊装/null 整体效益/null 整体数位服务网路/null 整体服务数位网路/null 整体观念/null 整体防护/null 整修/null 整修者/null 整倍数/null 整儿/null 整党/null 整党工作/null 整军/null 整军经武/null 整出/null 整列/null 整取/null 整句/null 整合/null 整团/null 整地/null 整块/null 整型/null 整垮/null 整声/null 整备/null 整夜/null 整夜间/null 整天/null 整套/null 整妆/null 整字/null 整存/null 整容/null 整幅/null 整年/null 整年累月/null 整并/null 整式/null 整形/null 整形外科/null 整形外科医生/null 整形术/null 整批/null 整把/null 整捆/null 整摞/null 整改/null 整数/null 整数倍数/null 整数集合/null 整整/null 整整一年/null 整整齐齐/null 整料/null 整日/null 整旧如新/null 整月/null 整机/null 整条/null 整枝/null 整桶/null 整步/null 整段/null 整治/null 整洁/null 整流/null 整流器/null 整流子/null 整流管/null 整片/null 整环/null 整理/null 整盘/null 整箱/null 整篇/null 整编/null 整肃/null 整色性/null 整行/null 整衣/null 整衣敛容/null 整补/null 整装/null 整装待发/null 整襟威坐/null 整训/null 整躬率物/null 整车/null 整部/null 整队/null 整除/null 整除数/null 整页/null 整顿/null 整顿秩序/null 整顿经济秩序/null 整顿者/null 整风/null 整风运动/null 整饬/null 整齐/null 整齐划一/null 整齐有序/null 敷上/null 敷以/null 敷层/null 敷布/null 敷张扬厉/null 敷敷/null 敷料/null 敷演/null 敷用/null 敷粉/null 敷药/null 敷衍/null 敷衍了事/null 敷衍塞责/null 敷衍搪塞/null 敷裹/null 敷设/null 敷贴/null 敷陈/null 文不加点/null 文不对题/null 文不尽意/null 文丑/null 文东武西/null 文中/null 文义/null 文书/null 文书处理/null 文书工作/null 文人/null 文人墨客/null 文人画/null 文人相轻/null 文从字顺/null 文以载道/null 文件/null 文件名/null 文件大小/null 文件夹/null 文件尾/null 文件服务器/null 文件格式/null 文件汇编/null 文件精神/null 文体/null 文体活动/null 文体论/null 文侩/null 文修武偃/null 文修武备/null 文具/null 文具商/null 文具店/null 文具盒/null 文内/null 文冠果/null 文凭/null 文化/null 文化上/null 文化书社/null 文化买办/null 文化事业/null 文化交流/null 文化人/null 文化传统/null 文化冲击/null 文化冲突/null 文化史/null 文化合作/null 文化圈/null 文化城/null 文化大革命/null 文化娱乐/null 文化娱乐活动/null 文化宫/null 文化局/null 文化层/null 文化工作/null 文化市场/null 文化建设/null 文化教育/null 文化整合/null 文化水平/null 文化活动/null 文化热/null 文化理论/null 文化生活/null 文化界/null 文化的交流/null 文化知识/null 文化科学/null 文化程度/null 文化站/null 文化素质/null 文化网址/null 文化艺术/null 文化节/null 文化遗产/null 文化障碍/null 文化馆/null 文案/方案 文印/null 文卷/null 文句/null 文史/null 文史资料/null 文史馆/null 文号/null 文君司马/null 文君新寡/null 文君早寡/null 文告/null 文员/null 文品/null 文圣/null 文圣区/null 文地/null 文场/null 文坛/null 文墨/null 文天祥/null 文契/null 文如其人/null 文娱/null 文娱活动/null 文字/null 文字上/null 文字前/null 文字处理/null 文字学/null 文字学家/null 文字改革/null 文字档/null 文字狱/null 文字说明/null 文学/null 文学作品/null 文学创作/null 文学博士/null 文学史/null 文学士/null 文学家/null 文学巨匠/null 文学思想/null 文学思潮/null 文学理论/null 文学界/null 文学知识/null 文学研究/null 文学研究会/null 文学社/null 文学艺术/null 文学评论/null 文学遗产/null 文学革命/null 文安/null 文宗/null 文官/null 文宣部/null 文山/null 文山会海/null 文山区/null 文山壮族苗族自治州/null 文山州/null 文峰/null 文峰区/null 文峰镇/null 文工团/null 文库/null 文庙/null 文康/null 文式/null 文弱/null 文征明/null 文德武功/null 文心雕龙/null 文思/null 文性/null 文恬武嬉/null 文戏/null 文成/null 文房/null 文房四士/null 文房四宝/null 文才/null 文抄公/null 文摘/null 文擅雕龙/null 文改/null 文教/null 文教卫生/null 文教卫生基金/null 文教局/null 文斗/null 文无加点/null 文旦/null 文昌/null 文昌鱼/null 文明/null 文明人/null 文明化/null 文明单位/null 文明史/null 文明小史/null 文明戏/null 文明礼貌/null 文明社会/null 文景之治/null 文本/null 文本编辑器/null 文档/null 文档对象模型/null 文档资料/null 文武/null 文武之道/null 文武全才/null 文武兼备/null 文武兼济/null 文武双全/null 文武合一/null 文武百官/null 文殊/null 文殊师利菩萨/null 文殊菩萨/null 文气/null 文水/null 文汇/null 文汇报/null 文江学海/null 文治/null 文治武功/null 文法/null 文法上/null 文法家/null 文法素/null 文海/null 文深网密/null 文火/null 文炳雕龙/null 文牍/null 文牍主义/null 文牒/null 文物/null 文物古迹/null 文物局/null 文献/null 文献分类/null 文献学/null 文献工作/null 文献标引/null 文献检索/null 文献汇编/null 文献研究室/null 文献资料/null 文玩/null 文理/null 文理不通/null 文电/null 文痞/null 文登/null 文盲/null 文石/null 文种/null 文科/null 文科学士/null 文秘/null 文稿/null 文章/null 文章巨公/null 文章憎命/null 文章星斗/null 文章盖世/null 文章魁首/null 文童/null 文竹/null 文笔/null 文绉绉/null 文经武略/null 文经武纬/null 文翰/null 文职/null 文职人员/null 文联/null 文脉/null 文脉上/null 文臣/null 文艺/null 文艺作品/null 文艺复兴/null 文艺学/null 文艺家/null 文艺思想/null 文艺批评/null 文艺演出/null 文艺界/null 文艺节目/null 文艺语言/null 文苑/null 文苑英华/null 文茵/null 文莱/null 文莱达鲁萨兰国/null 文藻/null 文蛤/null 文行/null 文言/null 文言文/null 文诌诌/null 文词/null 文豪/null 文责/null 文责自负/null 文质/null 文质彬彬/null 文贵天成/null 文身/null 文身断发/null 文辞/null 文过遂非/null 文过饰非/null 文选/null 文部/null 文部乡/null 文部省/null 文采/null 文采风流/null 文野/null 文钱/null 文锦渡/null 文雅/null 文集/null 文静/null 文面/null 文革/null 文韬武略/null 文韬武韬/null 文风/null 文风不动/null 文饰/null 文馆/null 文鸟/null 文齐福不齐/null 斋堂/null 斋居蔬食/null 斋心涤虑/null 斋戒/null 斋教/null 斋月/null 斋期/null 斋果/null 斋祭/null 斋藤/null 斋饭/null 斐斐/null 斐济/null 斐济人/null 斐济岛/null 斐然/null 斐然向风/null 斐然成章/null 斐理伯/null 斐理伯书/null 斐迪南/null 斑头雁/null 斑岩/null 斑斑/null 斑斓/null 斑木/null 斑杂/null 斑海豹/null 斑点/null 斑状/null 斑疹/null 斑疹伤寒/null 斑疹热/null 斑痕/null 斑白/null 斑秃/null 斑竹/null 斑纹/null 斑羚/null 斑翅山鹑/null 斑色/null 斑蚊/null 斑蝥/null 斑谰/null 斑马/null 斑马线/null 斑马鱼/null 斑驳/null 斑驳陆离/null 斑鳖/null 斑鳢/null 斑鸠/null 斗争/null 斗争史/null 斗争性/null 斗争者/null 斗人/null 斗倒/null 斗六/null 斗剑者/null 斗升之水/null 斗升之禄/null 斗南/null 斗南一人/null 斗南镇/null 斗口齿/null 斗嘴/null 斗地主/null 斗垮/null 斗士/null 斗大/null 斗子/null 斗室/null 斗志/null 斗志昂扬/null 斗批改/null 斗拱/null 斗拳/null 斗斛之禄/null 斗方/null 斗方名士/null 斗智/null 斗柄/null 斗橱/null 斗殴/null 斗气/null 斗法/null 斗渠/null 斗牌/null 斗牛/null 斗牛㹴/null 斗牛士/null 斗牛士之歌/null 斗牛梗/null 斗眼/null 斗笠/null 斗筲/null 斗筲之人/null 斗筲之器/null 斗筲之徒/null 斗筲之才/null 斗筲之材/null 斗筲之辈/null 斗筲小人/null 斗筲小器/null 斗筲穿窬/null 斗箕/null 斗篷/null 斗绝一隅/null 斗胆/null 斗舰/null 斗蓬/null 斗趣儿/null 斗车/null 斗转参横/null 斗转星移/null 斗输/null 斗酒只鸡/null 斗酒学士/null 斗酒百篇/null 斗重山齐/null 斗量车载/null 斗门/null 斗门区/null 斗鸡/null 斗鸡眼/null 斗鸡走狗/null 斗鸡走马/null 料不到/null 料中/null 料事/null 料事如神/null 料仓/null 料净/null 料到/null 料医少卜/null 料单/null 料及/null 料器/null 料场/null 料堆/null 料头/null 料头儿/null 料子/null 料定/null 料峭/null 料度/null 料想/null 料想到/null 料持/null 料敌制胜/null 料敌若神/null 料斗/null 料架/null 料款/null 料民/null 料理/null 料理店/null 料算/null 料管/null 料耗/null 料豆儿/null 料费/null 料车/null 料远若近/null 料酒/null 斜上/null 斜井/null 斜交/null 斜体/null 斜体字/null 斜倚/null 斜压/null 斜向/null 斜吹/null 斜坡/null 斜堤/null 斜塔/null 斜对/null 斜射/null 斜射球/null 斜层/null 斜度/null 斜径/null 斜愣眼/null 斜愣眼儿/null 斜投影/null 斜斜/null 斜方型/null 斜方形/null 斜方肌/null 斜晖/null 斜杠/null 斜桅/null 斜桥/null 斜楞/null 斜照/null 斜率/null 斜眼/null 斜眼看/null 斜着/null 斜睨/null 斜管面/null 斜纹/null 斜纹布/null 斜纹织/null 斜纹软呢/null 斜线/null 斜线号/null 斜肌/null 斜视/null 斜视眼/null 斜角/null 斜象眼儿/null 斜路/null 斜身/null 斜躺/null 斜轴/null 斜辉/null 斜边/null 斜过/null 斜道/null 斜钩/null 斜长石/null 斜阳/null 斜靠/null 斜面/null 斜面路/null 斜颈/null 斜风细雨/null 斜高/null 斟上/null 斟满/null 斟茶/null 斟酌/null 斟酌决定权/null 斟酌字句/null 斟酒/null 斡旋/null 斤两/null 斤数/null 斤斗/null 斤斤/null 斤斤计较/null 斤斤较量/null 斤顶/null 斥之/null 斥候/null 斥力/null 斥卖/null 斥卤/null 斥喝/null 斥责/null 斥责者/null 斥资/null 斥退/null 斥逐/null 斥革/null 斥骂/null 斧凿痕/null 斧削/null 斧头/null 斧子/null 斧斩/null 斧正/null 斧足类/null 斧钺之诛/null 斧钺汤镬/null 斩假石/null 斩决/null 斩妖/null 斩将夺旗/null 斩将搴旗/null 斩尽杀绝/null 斩断/null 斩杀/null 斩眼/null 斩碎/null 斩而不奏/null 斩草除根/null 斩获/null 斩蛇逐鹿/null 斩钉截铁/null 斩钢截铁/null 斩首/null 斫丧/null 斫方为圆/null 斫畲/null 斫白/null 斫营/null 斫轮老手/null 斫雕为朴/null 断七/null 断乎/null 断乳/null 断了/null 断了奶/null 断井颓垣/null 断交/null 断从/null 断代/null 断代史/null 断决如流/null 断剑/null 断力/null 断发文身/null 断口/null 断句/null 断后/null 断垄/null 断垣残壁/null 断埯/null 断壁残垣/null 断壁颓垣/null 断头/null 断头台/null 断头将军/null 断奶/null 断子绝孙/null 断定/null 断尾雄鸡/null 断层/null 断层地震/null 断层山/null 断层带/null 断层湖/null 断层线/null 断屠/null 断崖/null 断幅残纸/null 断开/null 断弦/null 断念/null 断怪除妖/null 断想/null 断掉/null 断断/null 断断续续/null 断枝/null 断根/null 断根绝种/null 断案/null 断档/null 断桥/null 断梗流萍/null 断梗飞蓬/null 断气/null 断水/null 断法/null 断流/null 断港绝潢/null 断灭/null 断灭论/null 断炊/null 断点/null 断烂朝报/null 断烟/null 断然/null 断然拒绝/null 断片/null 断牙/null 断狱/null 断瓦残垣/null 断电/null 断离/null 断种/null 断章取义/null 断章截句/null 断章摘句/null 断简残编/null 断粮/null 断纸馀墨/null 断线/null 断线风筝/null 断线鹞子/null 断绝/null 断绝关系/null 断续/null 断续性/null 断编残简/null 断肠/null 断肢/null 断背/null 断背山/null 断腿/null 断行/null 断袖/null 断袖之宠/null 断袖之癖/null 断袖分桃/null 断裂/null 断裂力学/null 断裂带/null 断裂强度/null 断裂模数/null 断言/null 断言者/null 断语/null 断路/null 断路器/null 断送/null 断钗重合/null 断长续短/null 断长补短/null 断雁孤鸿/null 断面/null 断面图/null 断音/null 断食/null 断骨/null 断魂/null 断魂椒/null 断鹤续凫/null 断齑画粥/null 斯事体大/null 斯人/null 斯佩林/null 斯佩罗/null 斯克里亚宾/null 斯卡伯勒礁/null 斯哥/null 斯哥特/null 斯图/null 斯图加特/null 斯坦佛/null 斯坦佛大学/null 斯坦利/null 斯坦因/null 斯坦福/null 斯坦福・莱佛士/null 斯坦福大学/null 斯坦贝克/null 斯堪的纳维亚/null 斯堪的纳维亚半岛/null 斯塔西/null 斯大林/null 斯大林主义/null 斯大林格勒/null 斯大林格勒会战/null 斯大林格勒战役/null 斯奈/null 斯威士兰/null 斯宾塞/null 斯宾诺莎/null 斯密/null 斯密约瑟/null 斯巴达/null 斯巴达克起义/null 斯巴鲁/null 斯市/null 斯帕斯基/null 斯当东/null 斯彻达尔/null 斯德哥尔摩/null 斯托肯立石圈/null 斯拉夫/null 斯拉夫人/null 斯拉夫语/null 斯拉维尼亚/null 斯捷潘/null 斯摩棱斯克/null 斯文/null 斯文・海定/null 斯文・赫定/null 斯文委地/null 斯文扫地/null 斯斯文文/null 斯时/null 斯普利特/null 斯普拉特利群岛/null 斯普林菲尔德/null 斯柯达/null 斯沃琪/null 斯泰恩谢尔/null 斯泰西/null 斯洛伐克/null 斯洛伐克语/null 斯洛发克/null 斯洛文尼亚/null 斯洛文尼亚共和国/null 斯洛文尼亚语/null 斯洛维尼亚/null 斯特凡诺普洛斯/null 斯特恩/null 斯特拉斯堡/null 斯特拉特福/null 斯瓦希里/null 斯瓦希里语/null 斯瓦特/null 斯瓦特谷地/null 斯皮尔伯格/null 斯福尔瓦尔/null 斯科普里/null 斯维尔德洛夫/null 斯考特/null 斯芬克司/null 斯芬克斯/null 斯莱特林/null 斯蒂文/null 斯蒂文森/null 斯蒂芬/null 斯蒂芬・哈珀/null 斯语/null 斯诺/null 斯诺克/null 斯通亨治石栏/null 斯里兰卡/null 斯里巴加湾港/null 斯雷布雷尼察/null 斯须/null 新一代/null 新不伦瑞克/null 新不列颠岛/null 新世/null 新世界/null 新世纪/null 新中国/null 新丰/null 新丰乡/null 新义/null 新义州市/null 新乐/null 新乡/null 新乡地区/null 新书/null 新买/null 新事/null 新事新办/null 新事物/null 新五代史/null 新交/null 新产品/null 新产品推介会/null 新产品试销/null 新京报/null 新亭对泣/null 新人/null 新人新事/null 新仇/null 新仇旧恨/null 新仇旧憾/null 新任/null 新任务/null 新会/null 新会区/null 新会县/null 新会市/null 新体制/null 新余/null 新作/null 新信徒/null 新修/null 新修本草/null 新儒家/null 新元史/null 新党/null 新入/null 新兴/null 新兴产业/null 新兴区/null 新兴经济国家/null 新兵/null 新军/null 新几内亚/null 新出炉/null 新出现/null 新出生/null 新刊/null 新创/null 新到/null 新制/null 新制度/null 新剧/null 新剧同志会/null 新办/null 新加坡/null 新加坡人/null 新加坡国立大学/null 新动向/null 新包/null 新化/null 新化市/null 新化镇/null 新北/null 新北区/null 新北市/null 新区/null 新医/null 新华/null 新华书店/null 新华区/null 新华日报/null 新华社/null 新华社讯/null 新华网/null 新华通讯社/null 新南威尔士/null 新南威尔士州/null 新厂/null 新发展/null 新发明/null 新发现/null 新古典/null 新古典主义/null 新台币/null 新名/null 新名词/null 新命名/null 新和/null 新品/null 新品种/null 新唐书/null 新喀里多尼亚/null 新四军/null 新园/null 新园乡/null 新土/null 新地/null 新址/null 新型/null 新垦/null 新城/null 新城乡/null 新城区/null 新城县/null 新城电台/null 新城病/null 新埔/null 新埔镇/null 新埤/null 新埤乡/null 新塘/null 新增/null 新墨西哥/null 新墨西哥州/null 新大陆/null 新天地/null 新奇/null 新奥尔晾/null 新奥尔良/null 新妆/null 新妇/null 新威胁/null 新娘/null 新婚/null 新婚夫妇/null 新婚宴尔/null 新婚燕尔/null 新媳妇儿/null 新学/null 新学小生/null 新学科/null 新学说/null 新宁/null 新安/null 新安江/null 新官/null 新官上任三把火/null 新实在论/null 新宾县/null 新宿/null 新密/null 新局面/null 新居/null 新屋/null 新屋乡/null 新山/null 新岁/null 新工艺/null 新巧/null 新市/null 新市乡/null 新市兵/null 新市区/null 新市镇/null 新干/null 新干线/null 新平县/null 新年/null 新年前夕/null 新年快乐/null 新年进步/null 新庄/null 新庄市/null 新店/null 新店市/null 新店溪/null 新康德主义/null 新建/null 新开/null 新开业/null 新开拓/null 新异/null 新式/null 新式拚法/null 新形势/null 新形势下/null 新形式/null 新德里/null 新思想/null 新愁/null 新愁旧恨/null 新意/null 新慕道团/null 新成员/null 新战士/null 新户/null 新房/null 新手/null 新托马斯主义/null 新技术/null 新技术开发区/null 新技术革命/null 新抚区/null 新招/null 新拳/null 新收/null 新改/null 新政/null 新教/null 新教徒/null 新文化运动/null 新文学/null 新斯科舍/null 新新人类/null 新方法/null 新旧/null 新旧交替/null 新旧体制/null 新时代/null 新时期/null 新昌/null 新星/null 新春/null 新春伊始/null 新春佳节/null 新晃/null 新晃县/null 新曲/null 新月/null 新月形/null 新月派/null 新月状/null 新朋友/null 新朝/null 新材料/null 新村/null 新来/null 新来乍到/null 新来的/null 新来者/null 新林/null 新林区/null 新枝/null 新柏拉图主义/null 新欠/null 新欢/null 新款/null 新歌/null 新正/null 新武器/null 新殖民主义/null 新殖民化/null 新民/null 新民主主义/null 新民主主义论/null 新民主主义革命/null 新民学会/null 新民晚报/null 新气象/null 新水平/null 新水手/null 新沂/null 新河/null 新法/null 新泰/null 新泽西/null 新泽西州/null 新津/null 新洲/null 新洲区/null 新派/null 新流/null 新浦/null 新浦区/null 新浪漫主义/null 新浪网/null 新海峡时报/null 新消息/null 新港/null 新港乡/null 新源/null 新潟/null 新潟县/null 新潮/null 新热带/null 新热带界/null 新片/null 新版/null 新版本/null 新牙/null 新玩艺/null 新生/null 新生事物/null 新生代/null 新生儿/null 新生力量/null 新生活/null 新生界/null 新田/null 新界/null 新畿内亚/null 新疆/null 新疆小盘鸡/null 新疆温宿县/null 新疆维吾尔族/null 新疆自治区/null 新的/null 新的不来/null 新知/null 新石器/null 新石器时代/null 新硎初试/null 新社/null 新社乡/null 新社会/null 新社区/null 新禧/null 新秀/null 新科技/null 新秩序/null 新税/null 新竹/null 新篇章/null 新米/null 新约/null 新约全书/null 新纪元/null 新纪录/null 新经/null 新经济政策/null 新绛/null 新绿/null 新编/null 新罕布什尔/null 新罕布什尔州/null 新罗/null 新罗区/null 新罗王朝/null 新老/null 新老交替/null 新老用户/null 新能源/null 新自由主义/null 新芬党/null 新花样/null 新芽/null 新苗/null 新英格兰/null 新荣/null 新荣区/null 新药/null 新营/null 新著/null 新蔡/null 新藏公路/null 新衣/null 新装/null 新装置/null 新西伯利亚/null 新西伯利亚市/null 新西兰/null 新要求/null 新观念/null 新设/null 新设施/null 新词/null 新诗/null 新语/null 新语义/null 新货/null 新购/null 新贵/null 新贷/null 新路/null 新路子/null 新辞/null 新近/null 新进/null 新进者/null 新选/null 新途径/null 新造/null 新造镇/null 新道/null 新邱/null 新邱区/null 新邵/null 新郎/null 新郑/null 新都/null 新都区/null 新都桥/null 新都桥镇/null 新野/null 新金县/null 新针疗法/null 新铺/null 新锐/null 新长征/null 新问题/null 新闻/null 新闻业/null 新闻主播/null 新闻公报/null 新闻出版总署/null 新闻出版署/null 新闻发布会/null 新闻发言人/null 新闻史/null 新闻周刊/null 新闻处/null 新闻媒体/null 新闻学/null 新闻工作者/null 新闻片/null 新闻界/null 新闻社/null 新闻稿/null 新闻纪录影片/null 新闻纸/null 新闻组/null 新闻网/null 新闻自由/null 新闻记者/null 新阶段/null 新陈/null 新陈代谢/null 新院/null 新雅/null 新青/null 新青区/null 新领域/null 新颖/null 新颖性/null 新风/null 新风尚/null 新马/null 新马尔萨斯主义/null 新高峰/null 新高度/null 新鲜/null 新鲜事/null 新鲜人/null 新鲜感/null 新鲜空气/null 新黑格尔主义/null 新龙/null 方丈/null 方丈盈前/null 方且/null 方为/null 方为人上人/null 方些/null 方交/null 方今/null 方位/null 方位判定/null 方位物/null 方位角/null 方位词/null 方使/null 方便/null 方便之门/null 方便面/null 方兴未已/null 方兴未艾/null 方册/null 方凳/null 方出/null 方凿圆枘/null 方剂/null 方可/null 方向/null 方向性/null 方向感/null 方向盘/null 方向舵/null 方命/null 方圆/null 方地/null 方块/null 方块字/null 方块舞/null 方块草皮/null 方城/null 方士/null 方外/null 方外之人/null 方外之士/null 方头/null 方头不劣/null 方头不律/null 方头括号/null 方头螺帽/null 方妮/null 方始/null 方子/null 方字/null 方家/null 方寸/null 方寸之地/null 方寸已乱/null 方对/null 方将/null 方尺/null 方山/null 方差/null 方巾/null 方帽/null 方庄/null 方底圆盖/null 方式/null 方形/null 方志/null 方戏/null 方才/null 方技/null 方括号/null 方数/null 方文山/null 方斯蔑如/null 方方/null 方方正正/null 方方面面/null 方时/null 方术/null 方来/null 方枘圆凿/null 方根/null 方格/null 方格纸/null 方桃譬李/null 方框/null 方框图/null 方案/文案 方桌/null 方正/null 方正不苟/null 方正不阿/null 方步/null 方毅/null 方法/null 方法学/null 方法论/null 方滋未艾/null 方物/null 方略/null 方盘/null 方知/null 方石/null 方示/null 方程/null 方程序/null 方程式/null 方程组/null 方竹/null 方米/null 方糖/null 方给/null 方胜/null 方能/null 方脸突额/null 方腊/null 方腊起义/null 方腿/null 方自/null 方舟/null 方药/null 方解/null 方解石/null 方言/null 方言区/null 方言学/null 方许/null 方语/null 方语言/null 方说/null 方趾圆颅/null 方里/null 方釳/null 方针/null 方针政策/null 方钢/null 方铅矿/null 方阵/null 方靖/null 方面/null 方面军/null 方面大耳/null 方音/null 方顶/null 方领矩步/null 方驾齐驱/null 於下/null 於乎/null 於事/null 於人/null 於呼哀哉/null 於是/null 於菟/null 施不望报/null 施与/null 施丹傅粉/null 施为/null 施主/null 施乐/null 施予/null 施事/null 施事者/null 施仁布德/null 施仁布恩/null 施仁布泽/null 施以/null 施催/null 施加/null 施加压力/null 施加影响/null 施华洛世奇水晶/null 施压/null 施威/null 施展/null 施展才华/null 施展才能/null 施属/null 施工/null 施工单位/null 施工图/null 施工队/null 施巫术/null 施恩/null 施惠/null 施惠于/null 施拾者/null 施放/null 施政/null 施政报告/null 施救/null 施教/null 施斋/null 施明德/null 施暴/null 施朱傅粉/null 施法/null 施洗/null 施洗约翰/null 施洗者约翰/null 施特劳斯/null 施琅/null 施瓦布/null 施瓦辛格/null 施用/null 施用量/null 施甸/null 施礼/null 施秉/null 施粉/null 施粥舍饭/null 施给/null 施罗德/null 施耐庵/null 施肥/null 施肥耙/null 施舍/null 施舍物/null 施药/null 施蒂利尔/null 施蒂利尔州/null 施虐受虐/null 施行/null 施诊/null 施谋用智/null 施谋用计/null 施谋设计/null 施赈/null 施赠者/null 施食/null 旁人/null 旁侧/null 旁出/null 旁切/null 旁切圆/null 旁压/null 旁压力/null 旁及/null 旁听/null 旁听席/null 旁岔/null 旁征博引/null 旁搜博采/null 旁搜远绍/null 旁支/null 旁敲侧击/null 旁枝/null 旁氏/null 旁求俊彦/null 旁注/null 旁物/null 旁生/null 旁白/null 旁皇/null 旁系/null 旁系亲属/null 旁系血亲/null 旁线/null 旁腱肌/null 旁若无人/null 旁落/null 旁行斜上/null 旁街/null 旁见侧出/null 旁观/null 旁观者/null 旁观者清/null 旁观袖手/null 旁证/null 旁证博引/null 旁贫儿/null 旁路/null 旁轨/null 旁边/null 旁边儿/null 旁通/null 旁通道/null 旁道/null 旁遮普/null 旁遮普省/null 旁遮普邦/null 旁门/null 旁门外道/null 旁门左道/null 旁风/null 旁骛/null 旁鹜/null 旃檀/null 旄倪/null 旄期/null 旄车/null 旅人/null 旅伴/null 旅客/null 旅客之家/null 旅客列车/null 旅客机/null 旅居/null 旅居者/null 旅店/null 旅日/null 旅检/null 旅次/null 旅游/null 旅游业/null 旅游事业/null 旅游区/null 旅游团/null 旅游地/null 旅游城市/null 旅游客/null 旅游局/null 旅游指南/null 旅游景点/null 旅游服务/null 旅游活动/null 旅游点/null 旅游热点/null 旅游者/null 旅游胜地/null 旅游资源/null 旅游集散/null 旅游鞋/null 旅社/null 旅程/null 旅程表/null 旅舍/null 旅行/null 旅行包/null 旅行团/null 旅行图/null 旅行支票/null 旅行用/null 旅行社/null 旅行者/null 旅行袋/null 旅行装备/null 旅行车/null 旅费/null 旅进旅退/null 旅途/null 旅长/null 旅顺/null 旅顺口/null 旅顺口区/null 旅顺港/null 旅馆/null 旅馆费/null 旋乾转坤/null 旋光/null 旋光性/null 旋前肌/null 旋升/null 旋即/null 旋回/null 旋塞/null 旋太紧/null 旋子/null 旋宫/null 旋工/null 旋床/null 旋度/null 旋开/null 旋弄/null 旋式/null 旋形/null 旋律/null 旋律化/null 旋律学/null 旋得/null 旋扭/null 旋木/null 旋木雀/null 旋松/null 旋梯/null 旋毛虫/null 旋流/null 旋涡/null 旋涡星云/null 旋涡星系/null 旋涡状/null 旋渊/null 旋盘/null 旋筒/null 旋紧/null 旋纽/null 旋绕/null 旋翼/null 旋翼机/null 旋耕机/null 旋臂/null 旋舞/null 旋花科/null 旋覆花/null 旋调管/null 旋踵/null 旋转/null 旋转体/null 旋转力/null 旋转台/null 旋转指标/null 旋转曲面/null 旋转木马/null 旋转极/null 旋转烤肉/null 旋转物/null 旋转球/null 旋转行李传送带/null 旋转角/null 旋转角速度/null 旋转轴/null 旋转运动/null 旋里/null 旋量/null 旋钮/null 旋闸/null 旋风/null 旋风脚/null 旋风装/null 旌善惩恶/null 旌德/null 旌旗/null 旌旗招展/null 旌旗蔽天/null 旌旗蔽日/null 旌旗蔽空/null 旌表/null 旌阳/null 旌阳区/null 族人/null 族仇/null 族兄/null 族名/null 族外/null 族姓/null 族居/null 族权/null 族灭/null 族类/null 族群/null 族诛/null 族谱/null 族长/null 族间/null 旖旎/null 旖旎风光/null 旗丁/null 旗下/null 旗人/null 旗儿/null 旗兵/null 旗号/null 旗子/null 旗官/null 旗山/null 旗山镇/null 旗帜/null 旗帜鲜明/null 旗幅/null 旗开取胜/null 旗开得胜/null 旗开马到/null 旗手/null 旗杆/null 旗校/null 旗津/null 旗津区/null 旗牌/null 旗竿/null 旗籍/null 旗绳/null 旗舰/null 旗舰店/null 旗艇/null 旗袍/null 旗装/null 旗语/null 旗鱼/null 旗鼓相当/null 旗鼓相望/null 无一/null 无一不备/null 无一不知/null 无一事而不学/null 无一例外/null 无一处而不得/null 无一幸免/null 无一时而不学/null 无上/null 无下箸处/null 无不/null 无不达/null 无与/null 无与为比/null 无与伦比/null 无专利/null 无业/null 无业人员/null 无业游民/null 无业闲散/null 无丝/null 无丝分裂/null 无中生有/null 无为/null 无为而治/null 无为自化/null 无主/null 无主义/null 无主句/null 无主失物/null 无主见/null 无乃/null 无义/null 无了无休/null 无争/null 无争异/null 无争议/null 无争论/null 无事/null 无事不登三宝殿/null 无事可做/null 无事生非/null 无事自扰/null 无云/null 无产/null 无产者/null 无产阶级/null 无产阶级专政/null 无产阶级世界观/null 无产阶级国际主义/null 无产阶级革命/null 无亲戚/null 无亲托/null 无亲无故/null 无人/null 无人不/null 无人之地/null 无人之境/null 无人住/null 无人区/null 无人售票/null 无人性/null 无人机/null 无人知晓/null 无人过问/null 无人迹/null 无人问津/null 无人驾驶/null 无人驾驶飞机/null 无从/null 无从说起/null 无从谈起/null 无他/null 无以/null 无以为报/null 无以为生/null 无以塞责/null 无以复加/null 无以成江海/null 无以自容/null 无以至千里/null 无匠气/null 无价/null 无价之宝/null 无价值/null 无价宝/null 无价珍珠/null 无任/null 无任之禄/null 无任感激/null 无休/null 无休无止/null 无休止/null 无伤大雅/null 无伤痕/null 无伪装/null 无伴/null 无伴奏/null 无伴奏合唱/null 无伸/null 无似/null 无何/null 无何有之乡/null 无余/null 无佛处称尊/null 无侍从/null 无供给/null 无依/null 无依无靠/null 无保留/null 无保证/null 无信/null 无信义/null 无信仰/null 无信心/null 无倚无靠/null 无倾角/null 无偏无倚/null 无偏无党/null 无偏无陂/null 无偏见/null 无做作/null 无偿/null 无偿援助/null 无储/null 无儿女/null 无先例/null 无光/null 无光泽/null 无党/null 无党无偏/null 无党派/null 无党派人士/null 无党派投票人/null 无党派民主人士/null 无党派爱国人士/null 无公/null 无公约/null 无关/null 无关大局/null 无关宏旨/null 无关痛痒/null 无关系/null 无关紧要/null 无兴趣/null 无养主/null 无农药/null 无冬无夏/null 无决/null 无决断/null 无准备/null 无几/null 无出其右/null 无击/null 无分/null 无分别/null 无判/null 无利/null 无利可图/null 无利益/null 无前/null 无前例/null 无前因/null 无前途/null 无副作用/null 无力/null 无力气/null 无功/null 无功不受禄/null 无功功率/null 无功受禄/null 无功而禄/null 无功而返/null 无动于衷/null 无动静/null 无助/null 无助于/null 无助感/null 无包/null 无匹/null 无匹配/null 无华/null 无印痕/null 无印象/null 无压力/null 无厘头/null 无原则/null 无及/null 无双/null 无反/null 无反响/null 无发展前途/null 无取胜希望者/null 无受限/null 无变化/null 无口才/null 无可/null 无可不可/null 无可争辩/null 无可厚非/null 无可否认/null 无可奈何/null 无可奈何花落去/null 无可奉告/null 无可如何/null 无可指责/null 无可挽回/null 无可救药/null 无可无不可/null 无可比拟/null 无可比象/null 无可置疑/null 无可辩辩/null 无可辩驳/null 无可非议/null 无名/null 无名孽火/null 无名小卒/null 无名小辈/null 无名帖/null 无名战士墓/null 无名战死/null 无名指/null 无名氏/null 无名烈士墓/null 无名肿毒/null 无名英雄/null 无后/null 无后为大/null 无后嗣/null 无后坐力炮/null 无向/null 无吸/null 无员/null 无味/null 无味道/null 无呼吸/null 无咎无誉/null 无咖啡因/null 无品/null 无回声/null 无回答/null 无国界/null 无国界医生/null 无国界记者/null 无国籍/null 无土/null 无土地/null 无地址/null 无地自处/null 无地自容/null 无坐力炮/null 无坚不摧/null 无坚不陷/null 无垠/null 无基础/null 无墙壁/null 无声/null 无声无息/null 无声片/null 无声片儿/null 无壳/null 无壳族/null 无壳蜗牛/null 无处/null 无处不在/null 无处可寻/null 无处容身/null 无复孑遗/null 无大无小/null 无太/null 无头/null 无头告示/null 无头案/null 无头脑/null 无奇/null 无奇不有/null 无奈/null 无奈我何/null 无奢望/null 无奸不商/null 无好/null 无如/null 无如之何/null 无如奈何/null 无妄之灾/null 无妄之福/null 无妨/null 无妻/null 无始无终/null 无委/null 无威严/null 无嫌疑/null 无子/null 无孔/null 无孔不入/null 无孔不钻/null 无字碑/null 无学问/null 无宗教/null 无宗派/null 无官一身轻/null 无定/null 无定向/null 无定形/null 无定形碳/null 无定期/null 无实效/null 无实质/null 无害/null 无家/null 无家可奔/null 无家可归/null 无容/null 无容置疑/null 无容身之地/null 无对/null 无对手/null 无将牌/null 无尚光荣/null 无尽/null 无尽无休/null 无尽无穷/null 无尾熊/null 无尾猿/null 无尿症/null 无局/null 无层次/null 无巧/null 无巧不成书/null 无巧不成话/null 无差/null 无差别/null 无已/null 无师自通/null 无帐/null 无帮助/null 无常/null 无干/null 无幽不烛/null 无序/null 无底/null 无底坑/null 无底洞/null 无底稿/null 无度/null 无庸/null 无庸置疑/null 无庸置辩/null 无庸讳言/null 无异/null 无异于/null 无异议/null 无弹力/null 无弹性/null 无归/null 无形/null 无形中/null 无形体/null 无形化/null 无形损耗/null 无形无影/null 无形状/null 无形贸易/null 无形输出/null 无影/null 无影无形/null 无影无踪/null 无影灯/null 无往不利/null 无往不胜/null 无征不信/null 无得分/null 无得无丧/null 无微不至/null 无微不致/null 无心/null 无心插柳柳成阴/null 无必要/null 无忧/null 无忧无虑/null 无怀疑/null 无思想/null 无思无虑/null 无性/null 无性别/null 无性杂交/null 无性生殖/null 无性繁殖/null 无怨无悔/null 无怪/null 无怪乎/null 无恐惧/null 无恒/null 无恙/null 无息/null 无息贷款/null 无恶不作/null 无恶意/null 无悔/null 无悔意/null 无患子/null 无情/null 无情无义/null 无情无绪/null 无意/null 无意中/null 无意义/null 无意之中/null 无意识/null 无意间/null 无感情/null 无感觉/null 无愧/null 无愧于/null 无憾/null 无懈可击/null 无成/null 无我/null 无或/null 无房户/null 无所/null 无所不为/null 无所不包/null 无所不卖/null 无所不及/null 无所不可/null 无所不在/null 无所不容/null 无所不措手足/null 无所不晓/null 无所不有/null 无所不用其极/null 无所不知/null 无所不能/null 无所不至/null 无所不谈/null 无所不通/null 无所事事/null 无所作为/null 无所属/null 无所忌惮/null 无所忌讳/null 无所用心/null 无所畏忌/null 无所畏惧/null 无所谓/null 无所适从/null 无所顾忌/null 无所顾惮/null 无手/null 无批/null 无把握/null 无抑制/null 无报答/null 无抵/null 无担保/null 无拘无束/null 无拘束/null 无拳无勇/null 无指/null 无损/null 无损伤/null 无接缝/null 无掩饰/null 无措/null 无提供/null 无援/null 无支/null 无支援/null 无支祁/null 无支票/null 无收差/null 无改/null 无政府/null 无政府主义/null 无政府工团主义/null 无政府状态/null 无故/null 无效/null 无效分蘖/null 无效力/null 无效果/null 无效率/null 无效能/null 无敌/null 无敌于天下/null 无教养/null 无教育/null 无数/null 无数字/null 无文/null 无方/null 无方之民/null 无旋律/null 无无/null 无日/null 无日期/null 无时/null 无时无刻/null 无时间/null 无明/null 无明火/null 无是无非/null 无晶圆/null 无暇/null 无暗影/null 无月/null 无朋友/null 无服之丧/null 无服之殇/null 无望/null 无期/null 无期别/null 无期徒刑/null 无本之木/null 无机/null 无机化学/null 无机性/null 无机物/null 无机盐/null 无机肥料/null 无权/null 无权无势/null 无权过问/null 无束无拘/null 无束缚/null 无条件/null 无条件反射/null 无条件投降/null 无条理/null 无极/null 无果/null 无柄叶/null 无标头/null 无核/null 无核化/null 无核区/null 无根/null 无根之木无源之水/null 无根据/null 无格式/null 无案/null 无梦/null 无梭织机/null 无棣/null 无次序/null 无欲/null 无欺/null 无款/null 无止/null 无止境/null 无歧视/null 无母/null 无毒/null 无毒不丈夫/null 无毒无副作用/null 无比/null 无比较级/null 无毛/null 无气/null 无气力/null 无气味/null 无气孔/null 无氧/null 无水/null 无水物/null 无污点/null 无法/null 无法形容/null 无法忍受/null 无法挽救/null 无法无天/null 无法替代/null 无泪/null 无活力/null 无派/null 无济于事/null 无涯/null 无源之水/null 无源之水无本之木/null 无灾/null 无烟/null 无烟囱工业/null 无烟火药/null 无烟炭/null 无烟煤/null 无热光/null 无焦点/null 无照/null 无照经营/null 无爪/null 无爱/null 无父/null 无牌/null 无牙/null 无物/null 无牵无挂/null 无特征/null 无特权/null 无特色/null 无状/null 无独有偶/null 无猜/null 无王牌/null 无现金/null 无理/null 无理函数/null 无理取闹/null 无理式/null 无理性/null 无理数/null 无理方程/null 无理根/null 无理由/null 无瑕/null 无瑕可击/null 无瑕疵/null 无甚高论/null 无生/null 无生产/null 无生命/null 无生气/null 无生物/null 无用/null 无用处/null 无用物/null 无由/null 无畏/null 无疆/null 无疆之休/null 无疑/null 无疑虑/null 无疑问/null 无疗效/null 无疵/null 无疾/null 无病/null 无病呻吟/null 无病自灸/null 无症状/null 无痕/null 无痕迹/null 无痛/null 无痛苦/null 无的/null 无的放矢/null 无益/null 无盖/null 无目/null 无目地/null 无目的/null 无眼/null 无着/null 无睡/null 无知/null 无知人/null 无知觉/null 无知识/null 无码/null 无碍/null 无礼/null 无礼下流/null 无礼取闹/null 无礼貌/null 无神/null 无神论/null 无神论者/null 无票/null 无禄/null 无福消受/null 无私/null 无私奉献/null 无私心/null 无私无畏/null 无私有弊/null 无秩序/null 无税/null 无稽/null 无稽之言/null 无稽之谈/null 无穷/null 无穷大/null 无穷小/null 无穷尽/null 无穷序列/null 无穷无尽/null 无穷远点/null 无穷集/null 无空不入/null 无空间/null 无立足之地/null 无立锥之地/null 无端/null 无端端/null 无符号/null 无答复/null 无策/null 无米之炊/null 无籽/null 无精卵/null 无精打彩/null 无精打采/null 无精神/null 无糖/null 无系统/null 无约束/null 无级/null 无纪律/null 无纸化办公/null 无纺织布/null 无线/null 无线电/null 无线电传真/null 无线电侦察/null 无线电厂/null 无线电发射机/null 无线电台/null 无线电导航/null 无线电报/null 无线电探空仪/null 无线电接收机/null 无线电收发机/null 无线电收音机/null 无线电波/null 无线电电子学/null 无线电管理委员会/null 无线电话/null 无线电运动/null 无线电通信/null 无线网路/null 无线通信/null 无组织/null 无细/null 无终/null 无终止/null 无经验/null 无结果/null 无绝/null 无继/null 无绳/null 无绳电话/null 无维度/null 无缘/null 无缘无故/null 无缝/null 无缝连接/null 无缝钢管/null 无缺/null 无缺点/null 无网格法/null 无罪/null 无罪抗辩/null 无罪推定/null 无翅/null 无翼/null 无翼而飞/null 无翼鸟/null 无耻/null 无耻之尤/null 无耻之徒/null 无聊/null 无聊乏味/null 无聊事/null 无聊赖/null 无职务/null 无联系/null 无肠公子/null 无胆量/null 无胫而行/null 无能/null 无能为力/null 无能为役/null 无能力/null 无脂/null 无脊椎/null 无脊椎动物/null 无脏污/null 无脚/null 无臂/null 无自信/null 无船承运人/null 无色/null 无色菌/null 无艺/null 无节制/null 无节操/null 无花/null 无花果/null 无苦恼/null 无茎/null 无菌/null 无菌性/null 无营养/null 无虑/null 无虑无忧/null 无虑无思/null 无虚饰/null 无虞/null 无虞匮乏/null 无血/null 无血气/null 无血色/null 无行/null 无补/null 无补于事/null 无补于时/null 无表/null 无表情/null 无袖/null 无袖子/null 无被/null 无装备/null 无装饰/null 无要/null 无规则/null 无视/null 无角/null 无解/null 无言/null 无言以对/null 无言可对/null 无言对答/null 无计划/null 无计可施/null 无计谋/null 无训练/null 无议/null 无记名/null 无记名投票/null 无记录/null 无讳/null 无讹/null 无论/null 无论何事/null 无论何人/null 无论何处/null 无论何时/null 无论如何/null 无诚意/null 无话不说/null 无话不谈/null 无话可说/null 无语/null 无谋/null 无谎不成媒/null 无谓/null 无责/null 无责任/null 无货/null 无资格/null 无资源/null 无赖/null 无赖汉/null 无趣/null 无趣味/null 无足/null 无足轻重/null 无足重轻/null 无路/null 无路可走/null 无路可退/null 无路可逃/null 无踪/null 无踪无影/null 无轨/null 无轨电车/null 无辜/null 无辩/null 无辩护/null 无边/null 无边帽/null 无边无际/null 无边苦海/null 无边风月/null 无过/null 无过失/null 无远见/null 无连接/null 无连络/null 无迹可寻/null 无适/null 无适无莫/null 无选择/null 无道/null 无遗/null 无遗漏/null 无遮盖/null 无遮蔽/null 无邪/null 无重/null 无重力/null 无重量/null 无重音/null 无野心/null 无量/null 无量寿/null 无针注射器/null 无钩绦虫/null 无钱/null 无铅/null 无锈/null 无错/null 无错误/null 无锡/null 无锡县/null 无锡新区/null 无门/null 无间/null 无间断/null 无闻/null 无防/null 无防备/null 无阻/null 无阻碍/null 无际/null 无限/null 无限制/null 无限大/null 无限小/null 无限小数/null 无限期/null 无限花序/null 无限风光在险峰/null 无随伴/null 无隐饰/null 无隙可乘/null 无障碍/null 无雪/null 无需/null 无需多说/null 无霜/null 无霜期/null 无静电/null 无非/null 无靠/null 无靠无依/null 无面/null 无面目见江东父老/null 无鞍/null 无音/null 无韵律/null 无须/null 无顾忌/null 无预谋/null 无领/null 无颌/null 无题/null 无题诗/null 无颜/null 无风/null 无风三尺浪/null 无风不起浪/null 无风生浪/null 无风起浪/null 无风趣/null 无首/null 无驾/null 无骨/null 无魅力/null 无齿翼龙/null 既为/null 既使/null 既可/null 既可以/null 既在/null 既定/null 既定方针/null 既已/null 既往/null 既往不咎/null 既得/null 既得利益/null 既得期间/null 既成事实/null 既无/null 既是/null 既有/null 既有今日何必当初/null 既来之/null 既来之则安之/null 既然/null 既然如此/null 既犬不留/null 既而/null 既能/null 既要/null 既视感/null 既非/null 日上三竿/null 日下/null 日下无双/null 日不暇给/null 日不移影/null 日不移晷/null 日与月/null 日中/null 日中则昃/null 日中必彗/null 日丽风和/null 日久/null 日久天长/null 日久岁深/null 日久月深/null 日久生情/null 日久见人心/null 日书/null 日产/null 日产量/null 日人/null 日以继夜/null 日俄/null 日俄战争/null 日俱/null 日偏食/null 日元/null 日光/null 日光浴/null 日光浴室/null 日光浴浴床/null 日光灯/null 日光节约时/null 日全食/null 日共/null 日内/null 日内瓦/null 日内瓦会议/null 日冕/null 日冕层/null 日军/null 日出/null 日出三竿/null 日刊/null 日创/null 日制/null 日前/null 日加工/null 日化/null 日升月恒/null 日半/null 日南郡/null 日历/万年历 日后/null 日商/null 日喀则/null 日喀则地区/null 日圆/null 日土/null 日场/null 日均/null 日坐愁城/null 日坛/null 日坛公园/null 日增/null 日增月益/null 日处理能力/null 日复一日/null 日夕/null 日夜/null 日夜兼程/null 日头/null 日媒/null 日子/null 日寇/null 日射病/null 日射角/null 日尔曼/null 日就月将/null 日居月诸/null 日工/null 日工资/null 日差/null 日币/null 日常/null 日常工作/null 日常生活/null 日式/null 日引月长/null 日影/null 日往月来/null 日后/null 日心说/null 日志/null 日志簿/null 日思夜想/null 日惹/null 日慎一日/null 日成/null 日戳/null 日托/null 日报/null 日报表/null 日持/null 日收/null 日数/null 日文/null 日斑/null 日新/null 日新月异/null 日方/null 日无暇晷/null 日日/null 日日夜夜/null 日旰忘食/null 日昃忘食/null 日晒/null 日晒伤/null 日晒雨淋/null 日晕/null 日晷/null 日晷仪/null 日暖/null 日暖风和/null 日暮/null 日暮途穷/null 日暮途远/null 日曜日/null 日曰/null 日月/null 日月丽天/null 日月五星/null 日月交食/null 日月入怀/null 日月其除/null 日月参辰/null 日月合璧/null 日月如梭/null 日月如流/null 日月星辰/null 日月晕/null 日月潭/null 日月经天江河行地/null 日月蹉跎/null 日月逾迈/null 日月重光/null 日服/null 日朝/null 日期/null 日本书纪/null 日本人/null 日本共产党/null 日本共同社/null 日本刀/null 日本化/null 日本原子能研究所/null 日本国/null 日本国志/null 日本天皇/null 日本学/null 日本式/null 日本放送协会/null 日本政治/null 日本柞蚕/null 日本海/null 日本电报电话公司/null 日本社会党/null 日本竹筷/null 日本米酒/null 日本经济/null 日本经济新闻/null 日本脑炎/null 日本航空/null 日本语/null 日本银行/null 日本问题/null 日本鬼子/null 日本黑道/null 日杂/null 日来/null 日比谷公园/null 日没/null 日渐/null 日渐月染/null 日滋月益/null 日濡月染/null 日炙风吹/null 日炙风筛/null 日照/null 日环/null 日环食/null 日珥/null 日班/null 日理万机/null 日甚一日/null 日用/null 日用品/null 日用工业品/null 日用消费品/null 日用百货/null 日电/null 日电电子/null 日界/null 日界线/null 日益/null 日益增加/null 日益完善/null 日益月滋/null 日益频繁/null 日盛/null 日盼/null 日省月试/null 日省月课/null 日知录/null 日神/null 日积月累/null 日程/null 日程表/null 日立/null 日系/null 日经/null 日经平均/null 日经平均指数/null 日经指数/null 日美/null 日耳曼/null 日耳曼人/null 日耳曼语/null 日至/null 日臻/null 日航/null 日英联军/null 日落/null 日落西山/null 日落风生/null 日薄/null 日薄西山/null 日薪/null 日蚀/null 日行千里/null 日表/null 日裔/null 日西/null 日见/null 日规/null 日规仪/null 日角偃月/null 日角珠庭/null 日记/null 日记帐/null 日记本/null 日记簿/null 日试万言/null 日语/null 日诵五车/null 日货/null 日资/null 日趋/null 日趋严重/null 日转千街/null 日转千阶/null 日近长安远/null 日里/null 日销/null 日销月铄/null 日锻月炼/null 日间/null 日食/null 日食万钱/null 日高三丈/null 旦夕/null 旦旦/null 旦旦信誓/null 旦角/null 旦角儿/null 旧业/null 旧中国/null 旧习/null 旧习惯/null 旧书/null 旧了/null 旧事/null 旧五代史/null 旧交/null 旧仇/null 旧仇新恨/null 旧体/null 旧体诗/null 旧作/null 旧例/null 旧俗/null 旧债/null 旧制/null 旧制度/null 旧前/null 旧剧/null 旧历/null 旧历年/null 旧友/null 旧名/null 旧品/null 旧唐书/null 旧唯物主义/null 旧国/null 旧地/null 旧地重游/null 旧址/null 旧城/null 旧大陆/null 旧好/null 旧姓/null 旧学/null 旧宅/null 旧家/null 旧家行径/null 旧居/null 旧币/null 旧帐/null 旧年/null 旧式/null 旧念复萌/null 旧态/null 旧态复萌/null 旧思想/null 旧性/null 旧怨/null 旧恨/null 旧恨新仇/null 旧恶/null 旧情/null 旧愁新恨/null 旧损/null 旧故/null 旧教/null 旧料/null 旧日/null 旧时/null 旧时代/null 旧时风味/null 旧是/null 旧景重现/null 旧有/null 旧框框/null 旧案/null 旧梦/null 旧欠/null 旧民主主义革命/null 旧法/null 旧派/null 旧游/null 旧燕归巢/null 旧爱宿恩/null 旧版/null 旧物/null 旧瓶装新酒/null 旧疾/null 旧病/null 旧病复发/null 旧病难医/null 旧的/null 旧的不去/null 旧皇历/null 旧知/null 旧石器/null 旧石器时代/null 旧社会/null 旧称/null 旧约/null 旧约全书/null 旧者/null 旧船/null 旧衣/null 旧观/null 旧识/null 旧识新交/null 旧诗/null 旧话/null 旧调/null 旧调子/null 旧调重弹/null 旧貌/null 旧账/null 旧货/null 旧货商/null 旧货市场/null 旧贯/null 旧费/null 旧车/null 旧车市场/null 旧迹/null 旧部/null 旧都/null 旧金/null 旧金山/null 旧闻/null 旧雨/null 旧雨今雨/null 旨在/null 旨意/null 旨趣/null 旨酒嘉肴/null 早一点/null 早上/null 早上好/null 早上睡/null 早中晚/null 早了/null 早于/null 早些/null 早些年/null 早些时候/null 早亡/null 早产/null 早产儿/null 早先/null 早出晚归/null 早到/null 早前/null 早动手/null 早半天儿/null 早去早回/null 早在/null 早场/null 早夭/null 早婚/null 早安/null 早就/null 早岁/null 早己/null 早已/null 早已有之/null 早市/null 早年/null 早恋/null 早成/null 早报/null 早播/null 早操/null 早收获/null 早日/null 早日康复/null 早早/null 早早儿/null 早春/null 早晚/null 早晨/null 早有/null 早期/null 早期效应/null 早期教育/null 早期核辐射/null 早期白话/null 早来/null 早来晚走/null 早死/null 早泄/null 早点/null 早点名/null 早点火/null 早熟/null 早版/null 早班/null 早班儿/null 早生贵子/null 早的/null 早睡/null 早睡早起/null 早知/null 早知今日何必当初/null 早知今日悔不当初/null 早知道/null 早秋/null 早稻/null 早稻田大学/null 早老素/null 早育/null 早茶/null 早衰/null 早该/null 早课/null 早谢/null 早起/null 早起早睡/null 早车/null 早退/null 早逝/null 早间/null 早霜/null 早餐/null 早饭/null 旬刊/null 旬始/null 旬岁/null 旬年/null 旬报/null 旬日/null 旬时/null 旬朔/null 旬期/null 旬末/null 旬节/null 旬课/null 旬输月送/null 旬邑/null 旬阳/null 旬首/null 旭日/null 旭日东升/null 旭日初升/null 旮旮旯旯儿/null 旮旯/null 旮旯儿/null 旰食之劳/null 旰食宵衣/null 旱井/null 旱伞/null 旱冰/null 旱冰场/null 旱厕/null 旱地/null 旱季/null 旱年/null 旱情/null 旱柳/null 旱栖/null 旱桥/null 旱涝/null 旱涝保收/null 旱灾/null 旱烟/null 旱烟袋/null 旱獭/null 旱生/null 旱田/null 旱秧/null 旱秧田/null 旱稻/null 旱练/null 旱船/null 旱苗得雨/null 旱荒/null 旱象/null 旱路/null 旱道/null 旱金莲/null 旱魃/null 旱魃为虐/null 旱鸭子/null 时下/null 时不再来/null 时不可失/null 时不我与/null 时不我待/null 时不时/null 时世/null 时为/null 时举/null 时乖命蹇/null 时乖运乖/null 时乖运拙/null 时乖运蹇/null 时事/null 时事性/null 时事知识/null 时事社/null 时事评论/null 时产/null 时人/null 时代/null 时代不同/null 时代华纳/null 时代广场/null 时代感/null 时代气息/null 时代特征/null 时令/null 时令病/null 时价/null 时伏/null 时会/null 时俗/null 时候/null 时值/null 时光/null 时光似箭日月如梭/null 时光隧道/null 时兴/null 时写时辍/null 时冷时热/null 时出/null 时分/null 时制/null 时刻/null 时刻准备/null 时刻表/null 时务/null 时势/null 时势造英雄/null 时区/null 时取/null 时和岁丰/null 时和岁稔/null 时和年丰/null 时在/null 时大时小/null 时好时坏/null 时宜/null 时宪书/null 时害/null 时尚/null 时局/null 时差/null 时常/null 时并/null 时序/null 时异事殊/null 时异势殊/null 时弊/null 时式/null 时必/null 时快时慢/null 时态/null 时戳/null 时报/null 时政/null 时效/null 时效处理/null 时效性/null 时数/null 时文/null 时断时续/null 时新/null 时方/null 时日/null 时日无多/null 时时/null 时时刻刻/null 时显时隐/null 时有所闻/null 时望所归/null 时期/null 时机/null 时来运/null 时来运旋/null 时来运来/null 时来运转/null 时样/null 时段/null 时段分析/null 时气/null 时漏/null 时炸弹/null 时点/null 时现/null 时疫/null 时移世变/null 时移事改/null 时移事迁/null 时移俗易/null 时程表/null 时空/null 时空旅行/null 时空穿梭/null 时空观/null 时穿/null 时绌举赢/null 时绥/null 时续/null 时而/null 时能/null 时至/null 时至今日/null 时节/null 时菜/null 时蔬/null 时行/null 时装/null 时装业/null 时装表/null 时装表演/null 时装设计师/null 时装鞋/null 时见/null 时讯/null 时评/null 时调/null 时调小曲/null 时谈物议/null 时贤/null 时辰/null 时辰未到/null 时过境迁/null 时运/null 时运不济/null 时运亨通/null 时速/null 时逢/null 时针/null 时钟/null 时钟座/null 时间/null 时间上/null 时间内/null 时间区间/null 时间学/null 时间差/null 时间序列/null 时间性/null 时间戳/null 时间测定学/null 时间等/null 时间简史/null 时间管理/null 时间线/null 时间表/null 时间词/null 时间跨度/null 时间轴/null 时间进程/null 时限/null 时隐时现/null 时隔/null 时隔不久/null 时雍/null 时风/null 时髦/null 时髦人/null 时鲜/null 旷世/null 旷世奇才/null 旷世无匹/null 旷世逸才/null 旷代/null 旷古/null 旷古一人/null 旷古未有/null 旷古未闻/null 旷古绝伦/null 旷地/null 旷夫/null 旷夫怨女/null 旷工/null 旷废/null 旷日/null 旷日引久/null 旷日引月/null 旷日弥久/null 旷日持久/null 旷日经久/null 旷时/null 旷时摄影/null 旷渺/null 旷职/null 旷职偾事/null 旷若发蒙/null 旷课/null 旷费/null 旷达/null 旷野/null 旷阔/null 旺季/null 旺市/null 旺月/null 旺期/null 旺泉/null 旺波日山/null 旺火/null 旺盛/null 旺苍/null 旺角/null 旺销/null 昂仁/null 昂利/null 昂头/null 昂头天外/null 昂奋/null 昂山/null 昂山素姬/null 昂山素季/null 昂扬/null 昂昂/null 昂昂溪/null 昂昂溪区/null 昂然/null 昂然自得/null 昂纳克/null 昂船洲/null 昂藏/null 昂贵/null 昂首/null 昂首挺胸/null 昂首阔步/null 昃食宵衣/null 昆仑/null 昆仑山/null 昆仑山脉/null 昆仲/null 昆剧/null 昆卡/null 昆塔尔会议/null 昆士兰/null 昆士兰州/null 昆山/null 昆山中学/null 昆山片玉/null 昆布/null 昆廷/null 昆弟之好/null 昆明池/null 昆明湖/null 昆曲/null 昆汀/null 昆汀・塔伦提诺/null 昆汀・塔伦蒂诺/null 昆河铁路/null 昆腔/null 昆虫/null 昆虫学/null 昆虫馆/null 昆都仑/null 昆都仑区/null 昆阳/null 昆阳之战/null 昇起/null 昊天/null 昊天不吊/null 昊天罔极/null 昌乐/null 昌原/null 昌原市/null 昌吉/null 昌吉回族自治州/null 昌吉州/null 昌图/null 昌宁/null 昌平/null 昌披/null 昌明/null 昌江/null 昌江区/null 昌江县/null 昌盛/null 昌言/null 昌迪加尔/null 昌邑/null 昌邑区/null 昌都/null 昌都地区/null 昌鱼/null 昌黎/null 明与暗/null 明丽/null 明郡/null 明书/null 明了/null 明争/null 明争暗斗/null 明亮/null 明亮度/null 明人/null 明人不作暗事/null 明人不做暗事/null 明仁/null 明仁宗/null 明代/null 明令/null 明体/null 明信片/null 明修栈道/null 明修栈道暗度陈仓/null 明儿/null 明儿个/null 明光/null 明光度/null 明光蓝/null 明冬/null 明净/null 明刑弼教/null 明创/null 明初/null 明前/null 明十三陵/null 明升实降/null 明升暗降/null 明古鲁/null 明古鲁市/null 明史/null 明后天/null 明和/null 明哲/null 明哲保身/null 明唐/null 明喻/null 明器/null 明堂/null 明处/null 明天/null 明天启/null 明天见/null 明太祖/null 明婚正配/null 明媒正娶/null 明媚/null 明子/null 明孝陵/null 明定/null 明实录/null 明宣宗/null 明察/null 明察暗访/null 明察秋毫/null 明尼苏达/null 明尼苏达州/null 明尼阿波利斯/null 明山/null 明山区/null 明岗暗哨/null 明年/null 明年初/null 明德/null 明德惟馨/null 明德慎罚/null 明德镇/null 明心见性/null 明快/null 明性/null 明情/null 明慧/null 明成祖/null 明手/null 明扬仄陋/null 明抢/null 明报/null 明摆/null 明摆着/null 明政/null 明效/null 明效大验/null 明教/null 明文/null 明文规定/null 明断/null 明斯克/null 明日/null 明日黄花/null 明早/null 明时/null 明明/null 明明白白/null 明星/null 明春/null 明显/null 明显的句法线索/null 明晃/null 明晃晃/null 明晚/null 明晰/null 明智/null 明智之举/null 明暗/null 明暗法/null 明月/null 明月入怀/null 明月清风/null 明朗/null 明朗化/null 明朝/null 明朝体/null 明末/null 明末清初/null 明杖/null 明来暗往/null 明枪/null 明枪好躲/null 明枪好躲暗箭难防/null 明枪容易躲/null 明枪易躲/null 明枪易躲暗箭难防/null 明枪暗箭/null 明查/null 明查暗访/null 明正典刑/null 明此/null 明武宗/null 明水/null 明沟/null 明治/null 明治维新/null 明法审令/null 明清/null 明渠/null 明溪/null 明澈/null 明火/null 明火执仗/null 明火持杖/null 明灭/null 明灯/null 明熹宗/null 明物/null 明珠/null 明珠弹雀/null 明珠暗投/null 明珠生蚌/null 明理/null 明用/null 明畅/null 明白/null 明皎/null 明盘/null 明目/null 明目张胆/null 明目达聪/null 明眸皓齿/null 明眼/null 明眼人/null 明知/null 明知故犯/null 明知故问/null 明石/null 明矾/null 明矾石/null 明码/null 明码标价/null 明确/null 明确性/null 明示/null 明窗净几/null 明等/null 明算帐/null 明线光谱/null 明细/null 明细帐/null 明细表/null 明细账/null 明耻教战/null 明胶/null 明若观火/null 明虾/null 明见万里/null 明觉/null 明言/null 明誓/null 明订/null 明讲/null 明证/null 明说/null 明赏慎罚/null 明起/null 明辨/null 明辨是非/null 明达/null 明达事理/null 明道/null 明邃/null 明铺暗盖/null 明镜/null 明镜高悬/null 明间/null 明间儿/null 昏乱/null 昏了/null 昏倒/null 昏厥/null 昏君/null 昏在/null 昏天/null 昏天黑地/null 昏头/null 昏头搭脑/null 昏头昏脑/null 昏头转向/null 昏定晨省/null 昏庸/null 昏昏/null 昏昏入睡/null 昏昏欲睡/null 昏昏沉沉/null 昏星/null 昏晕/null 昏暗/null 昏沉/null 昏沉沉/null 昏眩/null 昏睡/null 昏睡病/null 昏聩/null 昏花/null 昏话/null 昏谜/null 昏过去/null 昏迷/null 昏迷不醒/null 昏镜重明/null 昏镜重磨/null 昏黄/null 昏黑/null 易与/null 易主/null 易举/null 易于/null 易人/null 易传/null 易传染/null 易伤感/null 易位/null 易使/null 易使用/null 易俗/null 易俗移风/null 易倒/null 易做/null 易兴奋/null 易出错/null 易分裂/null 易切断/null 易初莲花/null 易办/null 易动/null 易勃起/null 易北河/null 易卖/null 易卜/null 易卜拉辛/null 易卜生/null 易压碎/null 易发/null 易发生/null 易取/null 易取得/null 易受/null 易受惊/null 易受攻击/null 易受骗/null 易变/null 易变动/null 易变性/null 易司马仪/null 易名/null 易哭/null 易地/null 易坏/null 易处理/null 易如反掌/null 易如拾芥/null 易如翻掌/null 易学/null 易守难攻/null 易察觉/null 易对/null 易帜/null 易延展/null 易建联/null 易弄/null 易弄碎/null 易弯/null 易忘/null 易忘记/null 易怒/null 易怒者/null 易患/null 易感动/null 易感染/null 易感知/null 易感者/null 易懂/null 易成/null 易手/null 易抚慰/null 易拆/null 易拉罐/null 易挥发/null 易损/null 易损害/null 易损性/null 易掉/null 易接/null 易接受/null 易接近/null 易控制/null 易撕碎/null 易攻击/null 易攻占/null 易教/null 易散发/null 易旋转/null 易明了/null 易曲折/null 易染色/null 易洛魁人/null 易流泪/null 易消散/null 易液化/null 易混合/null 易溶/null 易滑/null 易潮解/null 易激动/null 易激惹/null 易熔合金/null 易燃/null 易燃性/null 易燃易爆/null 易燃物/null 易燃物品/null 易爆/null 易爆发/null 易物/null 易犯/null 易犯罪/null 易理解/null 易生/null 易用/null 易知/null 易破/null 易破碎/null 易碎/null 易粘住/null 易经/null 易脱节/null 易腐/null 易腐坏/null 易腐烂/null 易腐败/null 易蔓延/null 易行/null 易被/null 易裂/null 易裂性/null 易装/null 易见/null 易解/null 易言之/null 易误会/null 易误解/null 易读/null 易读性/null 易货/null 易货贸易/null 易起/null 易趣/null 易辙/null 易逃逸/null 易逝/null 易遭/null 易醉/null 易错/null 易长/null 易门/null 易陷于/null 易震动/null 易驾驭/null 易骗/null 昔人/null 昔似/null 昔岁/null 昔年/null 昔日/null 昔时/null 昔比/null 昔者/null 昔阳/null 昔非今比/null 昙花/null 昙花一现/null 星云/null 星云表/null 星位/null 星体/null 星儿/null 星光/null 星光灿烂/null 星冰乐/null 星前月下/null 星占术/null 星历/null 星号/null 星名/null 星命家/null 星团/null 星国/null 星图/null 星型网/null 星夜/null 星奔川骛/null 星子/null 星官/null 星家/null 星宿/null 星宿海/null 星岛/null 星岛日报/null 星巴克/null 星座/null 星座运势/null 星形/null 星形物/null 星形线/null 星彩/null 星散/null 星散于/null 星斗/null 星星/null 星星之火/null 星星之火可以燎原/null 星星点点/null 星曜/null 星月/null 星期/null 星期一/null 星期三/null 星期二/null 星期五/null 星期六/null 星期几/null 星期四/null 星期天/null 星期日/null 星毛虫/null 星汉/null 星河/null 星洲/null 星洲日报/null 星流电击/null 星流霆击/null 星火/null 星火燎原/null 星火计划/null 星点/null 星状/null 星状体/null 星状物/null 星球/null 星球大战/null 星盘/null 星相/null 星相图/null 星相学/null 星相师/null 星相术/null 星眸皓齿/null 星移斗换/null 星移斗转/null 星移物换/null 星空/null 星等/null 星系/null 星系间/null 星级/null 星罗云布/null 星罗棋布/null 星群/null 星落云散/null 星虫/null 星行夜归/null 星表/null 星言夙驾/null 星象/null 星象图/null 星象恶曜/null 星辰/null 星运/null 星际/null 星际争霸/null 星际旅行/null 星际间/null 星陈夙驾/null 星驰/null 星驰电发/null 星驰电走/null 映像/null 映像管/null 映入/null 映出/null 映射/null 映射过程/null 映山红/null 映带/null 映照/null 映片/null 映着/null 映衬/null 映象/null 映雪囊萤/null 映雪读书/null 春上/null 春不老/null 春义阑珊/null 春事阑珊/null 春令/null 春假/null 春光/null 春光乍泄/null 春光如海/null 春光明媚/null 春光漏泄/null 春兰/null 春兰秋菊/null 春凳/null 春分点/null 春化/null 春华秋实/null 春卷/null 春去秋来/null 春和景明/null 春回大地/null 春地/null 春城/null 春夏/null 春夏秋冬/null 春大麦/null 春天/null 春妇/null 春季/null 春宫/null 春宵/null 春宵一刻/null 春寒/null 春小麦/null 春山八字/null 春山如笑/null 春岑/null 春川市/null 春归人老/null 春心/null 春忙/null 春情/null 春意/null 春意盎然/null 春播/null 春日/null 春日乡/null 春日融融/null 春旱/null 春晖/null 春景/null 春暖/null 春暖花开/null 春暖花香/null 春末/null 春来秋去/null 春柳/null 春柳剧场/null 春柳社/null 春树暮云/null 春梦/null 春梦无痕/null 春武里府/null 春汛/null 春江/null 春江花月夜/null 春深似海/null 春游/null 春满人间/null 春潮/null 春灌/null 春灯谜/null 春牛/null 春生/null 春生秋杀/null 春画/null 春瘟/null 春社/null 春祈秋报/null 春神/null 春秋/null 春秋三传/null 春秋五霸/null 春秋大梦/null 春秋左氏传/null 春秋战国/null 春秋战国时代/null 春秋时代/null 春秋笔法/null 春秋繁露/null 春秋鼎盛/null 春种/null 春笋/null 春绸/null 春耕/null 春耕生产/null 春联/null 春肥/null 春色/null 春色满园/null 春花/null 春花作物/null 春花秋月/null 春茶/null 春药/null 春菇/null 春蕾/null 春蚓秋蛇/null 春蚕/null 春蚕到死丝方尽/null 春装/null 春试/null 春诵夏弦/null 春辉/null 春运/null 春闱/null 春雨/null 春雨绵绵/null 春雷/null 春霖/null 春露秋霜/null 春风/null 春风一度/null 春风化雨/null 春风吹又生/null 春风和气/null 春风夏雨/null 春风得意/null 春风深醉的晚上/null 春风满面/null 春风风人/null 春饼/null 春麦/null 春黄菊/null 春黄菊属/null 昧于/null 昧地谩天/null 昧天瞒地/null 昧己瞒心/null 昧心/null 昧旦晨兴/null 昧死/null 昧死以闻/null 昧没/null 昧着/null 昧着良心/null 昧良心/null 昨儿/null 昨儿个/null 昨夜/null 昨天/null 昨天下午/null 昨天夜间/null 昨天晚间/null 昨日/null 昨晚/null 昨没/null 昨甚/null 昨能/null 昨非今是/null 昭代/null 昭和/null 昭平/null 昭彰/null 昭披耶帕康/null 昭披耶河/null 昭昭/null 昭然/null 昭然若揭/null 昭示/null 昭苏/null 昭著/null 昭觉/null 昭通/null 昭通地区/null 昭阳/null 昭阳区/null 昭雪/null 是不是/null 是个/null 是个儿/null 是以/null 是凡/null 是古非今/null 是可忍孰不可忍/null 是否/null 是味儿/null 是啥说啥/null 是故/null 是是非非/null 是样儿/null 是的/null 是药三分毒/null 是长是短/null 是非/null 是非不分/null 是非之地/null 是非之心/null 是非人我/null 是非分明/null 是非功过/null 是非只为多开口/null 是非得失/null 是非曲直/null 是非自有公论/null 是非莫辨/null 是非问题/null 是非颠倒/null 昱昱/null 昴宿星团/null 昴星团/null 昵友/null 昵比/null 昵爱/null 昵称/null 昼伏夜出/null 昼伏夜游/null 昼出夜息/null 昼夜/null 昼夜兼程/null 昼夜兼行/null 昼夜平分点/null 昼日/null 昼短夜长/null 昼锦之荣/null 昼锦荣归/null 昼间/null 显亲扬名/null 显位/null 显像/null 显像剂/null 显像管/null 显光管/null 显出/null 显卡/null 显名/null 显圣/null 显型/null 显姓扬名/null 显学/null 显宦/null 显山露水/null 显形/null 显影/null 显影剂/null 显得/null 显微/null 显微图/null 显微学/null 显微摄影/null 显微镜/null 显微镜座/null 显微镜载片/null 显微阅读机/null 显怀/null 显性/null 显性基因/null 显扬/null 显摆/null 显效/null 显明/null 显晦/null 显晶/null 显来/null 显液/null 显灵/null 显焓/null 显然/null 显现/null 显现日/null 显生代/null 显生宙/null 显白/null 显目/null 显眼/null 显着/null 显示/null 显示卡/null 显示器/null 显示屏/null 显示板/null 显祖/null 显祖扬宗/null 显祖荣宗/null 显神/null 显耀/null 显老/null 显考/null 显而/null 显而易见/null 显职/null 显色/null 显花植物/null 显荣/null 显著/null 显著成绩/null 显著特点/null 显著面/null 显要/null 显要位置/null 显见/null 显观/null 显证/null 显豁/null 显象/null 显象管/null 显贵/null 显赫/null 显赫一时/null 显赫人物/null 显身/null 显身手/null 显达/null 显镜/null 显露/null 显露出/null 晁错/null 晃动/null 晃头/null 晃悠/null 晃晃/null 晃晃悠悠/null 晃来晃去/null 晃眼/null 晃着/null 晃脑/null 晃荡/null 晋中/null 晋书/null 晋京/null 晋代/null 晋剧/null 晋升/null 晋升为/null 晋升制度/null 晋县/null 晋国/null 晋城/null 晋宁/null 晋安/null 晋安区/null 晋察冀/null 晋封/null 晋文公/null 晋朝/null 晋江/null 晋江地区/null 晋源/null 晋源区/null 晋爵/null 晋级/null 晋见/null 晋谒/null 晌午/null 晌觉/null 晌饭/null 晏婴/null 晏子/null 晏子春秋/null 晏平仲/null 晏开之警/null 晏驾/null 晒伤/null 晒友/null 晒台/null 晒图/null 晒图纸/null 晒场/null 晒垡/null 晒太阳/null 晒客/null 晒干/null 晒得/null 晒成/null 晒斑/null 晒晒/null 晒暖儿/null 晒架/null 晒烟/null 晒盐/null 晒网/null 晒衣夹/null 晒衣架/null 晒衣柱/null 晒衣用/null 晒衣绳/null 晒衣绳子/null 晒骆驼/null 晒黑/null 晒黑族/null 晒黑网/null 晓之以理/null 晓事/null 晓以大义/null 晓市/null 晓得/null 晓畅/null 晓示/null 晓色/null 晓英/null 晓行夜宿/null 晓谕/null 晓雾/null 晓风残月/null 晕乎/null 晕了/null 晕倒/null 晕厥/null 晕呼呼/null 晕场/null 晕头/null 晕头转向/null 晕机/null 晕染/null 晕死/null 晕池/null 晕眩/null 晕糊/null 晕船/null 晕色/null 晕血/null 晕血症/null 晕车/null 晕针/null 晕高儿/null 晖映/null 晚上/null 晚上好/null 晚世/null 晚了/null 晚于/null 晚些/null 晚些时候/null 晚会/null 晚到/null 晚半天儿/null 晚唐/null 晚场/null 晚夏/null 晚娘/null 晚婚/null 晚婚晚育/null 晚安/null 晚宴/null 晚岁/null 晚年/null 晚恋/null 晚报/null 晚星/null 晚春/null 晚晌/null 晚景/null 晚暮/null 晚期/null 晚期癌症/null 晚汤/null 晚清/null 晚点/null 晚熟/null 晚班/null 晚生/null 晚生后学/null 晚田/null 晚疫病/null 晚睡/null 晚睡晚起/null 晚礼/null 晚礼服/null 晚祷/null 晚秋/null 晚秋作物/null 晚稻/null 晚育/null 晚节/null 晚节不终/null 晚节末路/null 晚节黄花/null 晚茶/null 晚补/null 晚装/null 晚起/null 晚车/null 晚辈/null 晚近/null 晚钟/null 晚间/null 晚霜/null 晚霞/null 晚风/null 晚餐/null 晚饭/null 晚香玉/null 晤商/null 晤见/null 晤谈/null 晤面/null 晦明/null 晦暗/null 晦暝/null 晦气/null 晦涩/null 晦迹韬光/null 晨光/null 晨兴夜寐/null 晨参暮省/null 晨参暮礼/null 晨号/null 晨夕共处/null 晨报/null 晨操/null 晨昏/null 晨昏定省/null 晨星/null 晨曦/null 晨曲/null 晨歌/null 晨炊星饭/null 晨祷/null 晨练/null 晨钟/null 晨钟暮鼓/null 晨间/null 晨雾/null 晨露/null 晨风/null 普世/null 普世基督教/null 普世教会/null 普京/null 普什图语/null 普兰/null 普兰店/null 普列/null 普列谢茨克/null 普列谢茨克卫星发射场/null 普利司通/null 普利策奖/null 普利茅斯/null 普加乔夫/null 普及/null 普及型/null 普及教育/null 普及本/null 普及率/null 普及读物/null 普吉/null 普天/null 普天下/null 普天之下/null 普天同庆/null 普契尼/null 普宁/null 普安/null 普定/null 普密蓬/null 普密蓬・阿杜德/null 普密蓬阿杜德/null 普尔/null 普尔热瓦尔斯基/null 普希金/null 普度/null 普度众生/null 普托/null 普拉/null 普拉亚/null 普拉提/null 普普通通/null 普朗克/null 普朗克常数/null 普林斯吨/null 普林斯吨大学/null 普林斯顿/null 普林斯顿大学/null 普查/null 普格/null 普桑轿车/null 普氏/null 普氏小羚羊/null 普氏立克次体/null 普氏野马/null 普法/null 普法战争/null 普法教育/null 普洱/null 普洱市/null 普洱茶/null 普济众生/null 普济群生/null 普渡/null 普照/null 普特/null 普米/null 普罗/null 普罗列塔利亚/null 普罗大众/null 普罗夫迪夫/null 普罗扎克/null 普罗提诺/null 普罗文学/null 普罗旺斯/null 普罗旺斯语/null 普罗科菲夫/null 普罗迪/null 普考/null 普莱斯/null 普萘洛尔/null 普西/null 普调/null 普贤/null 普贤菩萨/null 普赛/null 普选/null 普选权/null 普通/null 普通中学/null 普通人/null 普通名词/null 普通心理学/null 普通教育/null 普通民众/null 普通法/null 普通老百姓/null 普通股/null 普通角闪石/null 普通话/null 普通赤杨/null 普通车/null 普通问题/null 普通高等学校招生全国统一考试/null 普遍/null 普遍化/null 普遍存在/null 普遍性/null 普遍性假设/null 普遍意义/null 普遍推广/null 普遍理论/null 普遍真理/null 普遍行/null 普遍规律/null 普遍认为/null 普里什蒂纳/null 普里切特/null 普陀/null 普陀山/null 普降/null 普降喜雨/null 普降大雨/null 普降瑞雪/null 普雷克斯流程/null 普雷斯堡/null 普雷斯顿/null 普鲁东/null 普鲁东主义/null 普鲁卡因/null 普鲁士/null 普鲁士人/null 普鲁斯特/null 景东/null 景东县/null 景从云集/null 景仰/null 景像/null 景况/null 景区/null 景天/null 景宁/null 景宁县/null 景宁畲乡/null 景山/null 景山公园/null 景德镇/null 景慕/null 景教/null 景星凤皇/null 景星庆云/null 景星麟凤/null 景气/null 景泰/null 景泰蓝/null 景洪/null 景深/null 景点/null 景片/null 景物/null 景福宫/null 景美/null 景致/null 景色/null 景观/null 景观设计/null 景谷/null 景谷傣族彝族自治县/null 景谷县/null 景象/null 景遇/null 景颇/null 晴云秋月/null 晴天/null 晴天霹雳/null 晴好/null 晴暖/null 晴朗/null 晴毛/null 晴空/null 晴空万里/null 晴纶/null 晴转多云/null 晴隆/null 晴雨/null 晴雨表/null 晶亮/null 晶体/null 晶体三极管/null 晶体二极管/null 晶体振荡器/null 晶体点阵/null 晶体管/null 晶体管收音机/null 晶体结构/null 晶光/null 晶内偏析/null 晶化/null 晶圆/null 晶岩/null 晶明/null 晶晶/null 晶核/null 晶格/null 晶片/null 晶状/null 晶状体/null 晶石/null 晶硅/null 晶硅棒/null 晶粒/null 晶系/null 晶胞/null 晶莹/null 晶质/null 晶轴/null 晶面/null 智人/null 智体/null 智利/null 智利人/null 智利硝石/null 智力/null 智力年龄/null 智力开发/null 智力投资/null 智力测验/null 智力竞赛/null 智勇/null 智勇兼全/null 智勇双全/null 智取/null 智商/null 智囊/null 智囊团/null 智囊机构/null 智圆行方/null 智均力敌/null 智多星/null 智小言大/null 智小谋大/null 智尽能索/null 智巧/null 智库/null 智性/null 智愚/null 智慧/null 智慧产权/null 智慧财产权/null 智慧齿/null 智昏/null 智术/null 智牙/null 智珠在握/null 智略/null 智神星/null 智穷/null 智者/null 智者千虑/null 智者千虑必有一失/null 智者派/null 智者见智/null 智育/null 智胜/null 智能/null 智能卡/null 智能大楼/null 智能手机/null 智能设计/null 智能障碍/null 智能补充/智能补全 智能补全/智能补充 智虑/null 智识/null 智谋/null 智谋过人/null 智障/null 智障人士/null 智顗/null 智齿/null 晾干/null 晾晒/null 晾衣/null 晾衣夹/null 暂不/null 暂且/null 暂予/null 暂于/null 暂付/null 暂代/null 暂住/null 暂住证/null 暂作/null 暂候/null 暂借/null 暂停/null 暂免/null 暂减/null 暂别/null 暂劳永逸/null 暂告/null 暂垫/null 暂存/null 暂存器/null 暂定/null 暂居/null 暂延/null 暂态/null 暂息/null 暂扣/null 暂按/null 暂搁/null 暂收/null 暂时/null 暂时性/null 暂星/null 暂欠/null 暂测/null 暂牙/null 暂用/null 暂由/null 暂留/null 暂短/null 暂离/null 暂缓/null 暂缺/null 暂行/null 暂行办法/null 暂行规定/null 暄暖/null 暄腾/null 暄闹/null 暇日/null 暇时/null 暇疵/null 暌违/null 暑促/null 暑假/null 暑天/null 暑往寒来/null 暑期/null 暑期学校/null 暑来寒往/null 暑气/null 暑温/null 暑热/null 暑瘟/null 暖人/null 暖人心房/null 暖人肺腑/null 暖化/null 暖和/null 暖壶/null 暖室/null 暖寿/null 暖巢管家/null 暖帘/null 暖房/null 暖手/null 暖暖/null 暖暖区/null 暖气/null 暖气团/null 暖气机/null 暖气炉/null 暖气片/null 暖水瓶/null 暖洋洋/null 暖流/null 暖炉/null 暖烘/null 暖烘烘/null 暖热/null 暖瓶/null 暖色/null 暖融融/null 暖衣/null 暖衣饱食/null 暖袖/null 暖调/null 暖身/null 暖酒/null 暖锋/null 暖阁/null 暖风/null 暖风机/null 暗下决心/null 暗中/null 暗中参与/null 暗中摸索/null 暗中操纵/null 暗中活动/null 暗中监视/null 暗中破坏/null 暗事/null 暗亏/null 暗井/null 暗伤/null 暗光/null 暗光鸟/null 暗公鸟/null 暗取/null 暗号/null 暗合/null 暗含/null 暗喜/null 暗喻/null 暗器/null 暗地/null 暗地里/null 暗场/null 暗坝/null 暗堡/null 暗墓/null 暗处/null 暗娼/null 暗室/null 暗室亏心/null 暗室私心/null 暗室逢灯/null 暗害/null 暗察明访/null 暗射/null 暗射地图/null 暗帐/null 暗度/null 暗度陈仓/null 暗弱/null 暗影/null 暗恋/null 暗想/null 暗房/null 暗指/null 暗探/null 暗敷/null 暗斗/null 暗无天日/null 暗星云/null 暗昧/null 暗暗/null 暗杀/null 暗杀活动/null 暗楼子/null 暗沟/null 暗河/null 暗泣/null 暗流/null 暗淡/null 暗渠/null 暗渡陈仓/null 暗滞/null 暗滩/null 暗潮/null 暗灰色/null 暗点/null 暗然失色/null 暗煅/null 暗疔/null 暗疾/null 暗的/null 暗盒/null 暗盘/null 暗码/null 暗礁/null 暗示/null 暗笑/null 暗算/null 暗箭/null 暗箭中人/null 暗箭伤人/null 暗箭明枪/null 暗箭罪难防/null 暗箭难防/null 暗箱/null 暗箱操作/null 暗紫色/null 暗红/null 暗线/null 暗线光谱/null 暗经/null 暗结/null 暗自/null 暗自思量/null 暗自欢喜/null 暗色/null 暗花/null 暗花儿/null 暗蓝/null 暗藏/null 暗补/null 暗袋/null 暗褐色/null 暗视/null 暗计/null 暗记/null 暗记于心/null 暗记儿/null 暗讽/null 暗访/null 暗语/null 暗转/null 暗送/null 暗送秋波/null 暗适应/null 暗道/null 暗销/null 暗锁/null 暗间/null 暗间儿/null 暗防/null 暗降/null 暗香/null 暗香疏影/null 暗鹭/null 暡曚/null 暧昧/null 暧昧关系/null 暧暧/null 暨南大学/null 暨大/null 暮云亲舍/null 暮去朝来/null 暮史朝经/null 暮后/null 暮四朝三/null 暮岁/null 暮年/null 暮思朝想/null 暮春/null 暮景/null 暮景桑榆/null 暮景残光/null 暮暮朝朝/null 暮更/null 暮死/null 暮气/null 暮气朦胧/null 暮生/null 暮生儿/null 暮礼晨参/null 暮色/null 暮色苍茫/null 暮虢朝虞/null 暮雨朝云/null 暮霭/null 暮鼓晨钟/null 暮龄/null 暴举/null 暴乱/null 暴光/null 暴内陵外/null 暴利/null 暴利税/null 暴力/null 暴力主义/null 暴力事件/null 暴力手段/null 暴力法/null 暴力犯罪/null 暴力行为/null 暴力行动/null 暴动/null 暴动队/null 暴卒/null 暴发/null 暴发户/null 暴吏/null 暴君/null 暴君政治/null 暴增/null 暴客/null 暴富/null 暴徒/null 暴怒/null 暴戾/null 暴戾恣睢/null 暴政/null 暴敛/null 暴晒/null 暴死/null 暴殄天物/null 暴毙/null 暴民/null 暴民政治/null 暴汉/null 暴洪/null 暴涨/null 暴涨暴跌/null 暴烈/null 暴热/null 暴燥/null 暴牙/null 暴病/null 暴眼/null 暴突/null 暴笑/null 暴虎冯河/null 暴虐/null 暴虐无道/null 暴行/null 暴裂/null 暴跌/null 暴跳/null 暴跳如雷/null 暴躁/null 暴躁如雷/null 暴雨/null 暴雨成灾/null 暴雷/null 暴露/null 暴露文学/null 暴露无遗/null 暴露目标/null 暴风/null 暴风雨/null 暴风雨般/null 暴风雪/null 暴风骤雨/null 暴食/null 暴食暴饮/null 暴饮/null 暴饮暴食/null 暴龙/null 暴龙属/null 暴龙科/null 暹罗/null 暹罗语/null 暹逻/null 暾暾/null 暾欲谷/null 曙光/null 曙后孤星/null 曙后星孤/null 曙目/null 曙色/null 曝光/null 曝光表/null 曝晒/null 曝气/null 曝露/null 曝鳃龙门/null 曱甴/null 曲交/null 曲光/null 曲别针/null 曲剧/null 曲卷/null 曲号/null 曲周/null 曲品/null 曲奇/null 曲子/null 曲学阿世/null 曲射炮/null 曲尺/null 曲尺楼梯/null 曲尽/null 曲尽人情/null 曲尽其妙/null 曲度/null 曲式/null 曲张/null 曲径/null 曲径通幽/null 曲意/null 曲意俯就/null 曲意逢迎/null 曲折/null 曲折处/null 曲曲弯弯/null 曲曲折折/null 曲松/null 曲柄/null 曲柄钻/null 曲柳/null 曲棍/null 曲棍球/null 曲水/null 曲水流觞/null 曲江/null 曲江区/null 曲池穴/null 曲沃/null 曲牌/null 曲率/null 曲率向量/null 曲目/null 曲直/null 曲种/null 曲突/null 曲突徙薪/null 曲笔/null 曲笛/null 曲线/null 曲线图/null 曲线拟合/null 曲线板/null 曲线球/null 曲线美/null 曲线论/null 曲终/null 曲终奏雅/null 曲绕/null 曲肱而枕/null 曲膝/null 曲膝者/null 曲艺/null 曲菌/null 曲蟮/null 曲角/null 曲解/null 曲调/null 曲谱/null 曲轴/null 曲酒/null 曲里拐弯/null 曲针/null 曲阜/null 曲阜孔庙/null 曲阳/null 曲霉/null 曲霉毒素/null 曲靖/null 曲靖地区/null 曲面/null 曲面论/null 曲颈瓶/null 曲颈甑/null 曲风/null 曲香/null 曲高/null 曲高和寡/null 曲麻莱/null 曳光/null 曳光弹/null 曳尾泥涂/null 曳尾涂中/null 曳引/null 曳引机/null 曳影/null 曳步/null 曳用/null 曳裾王门/null 更上一层楼/null 更不待言/null 更不待说/null 更为/null 更人/null 更仆难数/null 更代/null 更佳/null 更其/null 更加/null 更动/null 更卒/null 更名/null 更名改姓/null 更坏/null 更多/null 更多的/null 更夫/null 更好/null 更强/null 更快/null 更始/null 更定/null 更尽一步/null 更属不易/null 更年/null 更年期/null 更张/null 更弦易张/null 更待何时/null 更恶化/null 更换/null 更换者/null 更改/null 更改者/null 更新/null 更新世/null 更新换代/null 更新版/null 更暗/null 更替/null 更有甚者/null 更楼/null 更次/null 更正/null 更深/null 更深人静/null 更深夜静/null 更漏/null 更生/null 更番/null 更端/null 更胜一筹/null 更衣/null 更衣室/null 更要/null 更进一步/null 更进一竿/null 更迭/null 更递/null 更长梦短/null 更长漏永/null 更阑/null 更阑人静/null 更高性能/null 更鼓/null 曹不兴/null 曹丕/null 曹余章/null 曹冲/null 曹刚川/null 曹州之战/null 曹操/null 曹植/null 曹汝霖/null 曹白鱼/null 曹社之谋/null 曹禺/null 曹锟/null 曹雪芹/null 曹靖华/null 曹魏/null 曼切斯特/null 曼哈坦/null 曼哈顿/null 曼哈顿区/null 曼城/null 曼城队/null 曼声/null 曼妙/null 曼妥思/null 曼岛/null 曼延/null 曼彻斯特/null 曼彻斯特编码/null 曼德勒/null 曼德拉/null 曼德琳/null 曼海姆/null 曼联/null 曼联球迷/null 曼联队/null 曼苏尔/null 曼荷莲女子学院/null 曼荼罗/null 曼谷/null 曼达尔/null 曼陀林/null 曼陀琳/null 曼陀罗/null 曼陀草/null 曼陀铃/null 曾与/null 曾为/null 曾予/null 曾以/null 曾任/null 曾使/null 曾做/null 曾几何时/null 曾则/null 曾到/null 曾参杀人/null 曾向/null 曾和/null 曾国藩/null 曾在/null 曾外祖母/null 曾外祖父/null 曾孙/null 曾孙女/null 曾孝谷/null 曾对/null 曾将/null 曾巩/null 曾庆红/null 曾无与二/null 曾是/null 曾有/null 曾朴/null 曾母投杼/null 曾用/null 曾用名/null 曾祖/null 曾祖母/null 曾祖父/null 曾祖父母/null 曾繁仁/null 曾纪泽/null 曾经/null 曾经沧海/null 曾经沧海难为水/null 曾给/null 曾荫权/null 曾被/null 曾都/null 曾都区/null 曾金燕/null 曾问/null 替为/null 替人/null 替他/null 替代/null 替代品/null 替代性/null 替代燃料/null 替代物/null 替古人担忧/null 替古人耽忧/null 替品/null 替天行道/null 替她/null 替工/null 替您/null 替手/null 替拿/null 替换/null 替换物/null 替死/null 替死鬼/null 替派/null 替物/null 替班/null 替班儿/null 替续器/null 替罪/null 替罪人/null 替罪羊/null 替罪羔羊/null 替补/null 替角/null 替角儿/null 替身/null 替身演员/null 最上/null 最上等/null 最上策/null 最下/null 最下方/null 最下部/null 最不/null 最丑/null 最丑恶/null 最东部/null 最严厉/null 最中间/null 最为/null 最主要/null 最久/null 最乖/null 最亮/null 最亲近/null 最优/null 最优化/null 最优性/null 最低/null 最低分/null 最低化/null 最低水平/null 最低温度/null 最低潮/null 最低点/null 最低纲领/null 最低谷/null 最低限度/null 最低限度理论/null 最低音/null 最低额/null 最佳/null 最佳值/null 最佳利益/null 最佳化/null 最佳阵容/null 最便宜/null 最保险/null 最值/null 最先/null 最内部/null 最冷/null 最初/null 最前/null 最前线/null 最前部/null 最北/null 最南/null 最南端/null 最厚/null 最受/null 最后/null 最后一天/null 最后决议/null 最后头/null 最后方/null 最后晚餐/null 最后期限/null 最后的晚餐/null 最后通牒/null 最后面/null 最善/null 最喜/null 最喜爱/null 最坏/null 最外/null 最外边/null 最外面/null 最多/null 最大/null 最大值/null 最大公因子/null 最大公约数/null 最大化/null 最大数/null 最大速率/null 最大限度/null 最大熵/null 最奸/null 最好/null 最好成绩/null 最密堆积/null 最小/null 最小二乘/null 最小值/null 最小公倍数/null 最小公分母/null 最小化/null 最少/null 最尖/null 最差/null 最年长/null 最年青/null 最底/null 最底下/null 最底层/null 最弱/null 最强/null 最强音/null 最后/null 最快/null 最性感/null 最恨/null 最恶劣/null 最惠国/null 最惠国待遇/null 最慢/null 最接近/null 最新/null 最新式/null 最新消息/null 最新版/null 最新近/null 最旧/null 最早/null 最易/null 最晚/null 最暗/null 最最/null 最有/null 最末/null 最末端/null 最深/null 最深入/null 最深奥/null 最热/null 最爱/null 最理想/null 最甚/null 最畅销/null 最短/null 最硬/null 最穷/null 最笨/null 最简单/null 最糟/null 最细/null 最终/null 最终幻想/null 最终目的/null 最绝/null 最老/null 最聪明/null 最能/null 最软/null 最轻/null 最近/null 最近以来/null 最近几年/null 最远/null 最远方/null 最远点/null 最迟/null 最适/null 最适宜/null 最适度/null 最重要/null 最精彩/null 最重要的/null 最长/null 最难/null 最靠/null 最靠近/null 最高/null 最高人民检察院/null 最高人民法院/null 最高奖/null 最高层/null 最高峰/null 最高工资限额/null 最高度/null 最高标准/null 最高气温/null 最高水平/null 最高法院/null 最高温度/null 最高潮/null 最高点/null 最高等/null 最高级/null 最高纪录/null 最高纲领/null 最高限价/null 最高限额/null 最高音/null 最黑/null 月下/null 月下星前/null 月下老人/null 月下花前/null 月下风前/null 月中/null 月中折桂/null 月书赤绳/null 月了/null 月事/null 月亏/null 月产/null 月产量/null 月亮/null 月亮似/null 月亮女神/null 月亮门儿/null 月令/null 月份/null 月份会议/null 月份牌/null 月供/null 月俸/null 月值年灾/null 月偏食/null 月光/null 月光如水/null 月光族/null 月光期/null 月光石/null 月光花/null 月光计划/null 月光隐遁/null 月入/null 月全食/null 月内/null 月出/null 月分/null 月刊/null 月初/null 月利/null 月前/null 月半/null 月华/null 月历/null 月台/null 月台票/null 月后/null 月圆/null 月地云阶/null 月坑/null 月坛/null 月城/null 月夕/null 月夕花朝/null 月夜/null 月夜花朝/null 月头儿/null 月女神/null 月娘/null 月婆子/null 月嫂/null 月子/null 月子病/null 月孛/null 月季/null 月季花/null 月宫/null 月尾/null 月岩/null 月工/null 月工资/null 月底/null 月度/null 月异/null 月形/null 月径/null 月后/null 月息/null 月报/null 月支/null 月收/null 月收入/null 月数/null 月日/null 月明/null 月明如昼/null 月明星稀/null 月晕/null 月晕而风础润而雨/null 月曜日/null 月月/null 月月红/null 月朔/null 月朗风清/null 月未/null 月末/null 月杪/null 月桂/null 月桂冠/null 月桂叶/null 月桂树/null 月桂树叶/null 月氏/null 月氏人/null 月海/null 月清/null 月湖/null 月湖区/null 月满则亏/null 月满花香/null 月牙/null 月牙形/null 月球/null 月球仪/null 月球车/null 月理/null 月理学/null 月琴/null 月白/null 月白风清/null 月盈/null 月盈则食/null 月盲症/null 月相/null 月眉星眼/null 月石/null 月神/null 月票/null 月租/null 月终/null 月经/null 月经垫/null 月经带/null 月经期/null 月经棉栓/null 月结/null 月缺/null 月缺花残/null 月缺难圆/null 月老/null 月舱/null 月色/null 月芽/null 月落/null 月落乌啼/null 月落参横/null 月落星沉/null 月蓝/null 月薪/null 月蚀/null 月计/null 月评/null 月貌花容/null 月貌花庞/null 月费/null 月轮/null 月过中秋/null 月钱/null 月锻季炼/null 月长石/null 月门/null 月间/null 月阑/null 月面/null 月食/null 月饼/null 月饼盒/null 月饼袋/null 月鳢/null 月黑/null 月黑天/null 月黑风高/null 月龄/null 有可能/null 有一个/null 有一些/null 有一分热/null 发一分光/null 有一句没一句/null 有一天/null 有一套/null 有一无二/null 有一次/null 有丝分裂/null 有两下子/null 有中国特色/null 有为/null 有主见/null 有义务/null 有过之而无不及/null 有了/null 有了胎/null 有争议/null 有事/null 有些/null 有些人/null 有人缘/null 有仇/null 有令不行/null 有令即行/null 有价证券/null 有份量/null 有伤/null 有伤风化/null 有何不可/null 有何特长/null 有偿/null 有偿使用/null 有偿服务/null 有偿转让/null 有关/null 有关单位/null 有关各方/null 有关当局/null 有关政策/null 有关方面/null 有关系/null 有关规定/null 有关部门/null 有关问题/null 有其名而无其实/null 有其父必有其子/null 有典有则/null 有凭有据/null 有则改之/null 无则加勉/null 有创见/null 有利/null 有利于/null 有利可图/null 有利时机/null 有利有弊/null 有利条件/null 有别/null 有别于/null 有力/null 有力措施/null 有力量/null 有功之臣/null 有功人员/null 有功绩/null 有加无减/null 有加无已/null 有助/null 有助于/null 有劲/null 有劳/null 有劳了/null 有劳得奖/null 有劳有逸/null 有势/null 有势力/null 有勇无谋/null 有勇有谋/null 有勇气/null 有区别/null 有危险/null 有反应/null 有变化/null 有口无心/null 有口无行/null 有口皆碑/null 有口难分/null 有口难言/null 有口难辩/null 有史以来/null 有同情心/null 有名/null 有名亡实/null 有名无实/null 有名气/null 有名称/null 有后跟/null 有否/null 有含意/null 有含蓄/null 有启发/null 有味/null 有味道/null 有品味/null 有品德/null 有品格/null 有啥/null 有喜/null 有嘴无心/null 有嘴没舌/null 有噪声/null 有回响/null 有围墙/null 有国难投/null 有地位/null 有型/null 有塑性/null 有增无减/null 有增无已/null 有增无损/null 有声/null 有声书/null 有声有色/null 有声望/null 有声读物/null 有备无患/null 有备而来/null 有天份/null 有天分/null 有天无日/null 有天没日/null 有天赋/null 有夫之妇/null 有失/null 有失厚道/null 有失身份/null 有头无尾/null 有头有尾/null 有头有脑/null 有头有脸/null 有头盖/null 有头脑/null 有头衔/null 有奖储蓄/null 有奖征文/null 有奖活动/null 有奖销售/null 有女怀春/null 有好/null 有好处/null 有好奇心/null 有如/null 有始无终/null 有始有卒/null 有始有终/null 有威严/null 有威信/null 有嫌疑/null 有子存焉/null 有孔虫/null 有学/null 有学位/null 有学问/null 有定论/null 有宝何必人前夸/null 有实质/null 有客/null 有害/null 有害无利/null 有害无益/null 有害物/null 有害物质/null 有家难奔/null 有小/null 有小节/null 有小面/null 有局/null 有居民/null 有屈无伸/null 有展性/null 有巢氏/null 有差错/null 有希望/null 有带扣/null 有帮助/null 有年/null 有年头/null 有幸/null 有序/null 有序化/null 有底/null 有度/null 有异/null 有弊有利/null 有张有弛/null 有弱点/null 有弹性/null 有形/null 有形损耗/null 有形贸易/null 有形资产/null 有形资本/null 有影/null 有影响/null 有往/null 有征无战/null 有待/null 有待于/null 有得/null 有得一比/null 有得有失/null 有微风/null 有德行/null 有心/null 有心人/null 有心无力/null 有心眼/null 有志/null 有志不在年高/null 有志之士/null 有志之者事竟成/null 有志于/null 有志于此/null 有志气/null 有志竟成/null 有志者事竟成/null 有志难酬/null 有思/null 有性/null 有性杂交/null 有性生殖/null 有恃/null 有恃无恐/null 有恒/null 有息/null 有恶意/null 有恶臭/null 有悖于/null 有情/null 有情人/null 有情人终成眷属/null 有愁容/null 有意/null 有意义/null 有意图/null 有意志/null 有意思/null 有意无意/null 有意栽花花不发/null 有意识/null 有感于/null 有感而发/null 有成/null 有成就/null 有成绩/null 有戒心/null 有所/null 有所不同/null 有所准备/null 有所创造/null 有所前进/null 有所区别/null 有所发展/null 有所增加/null 有所得必有所失/null 有所提高/null 有所改善/null 有所突破/null 有所致力/null 有手有脚/null 有手段/null 有才/null 有才华/null 有才干/null 有才无命/null 有才能/null 有技能/null 有把握/null 有抑扬/null 有折痕/null 有报酬/null 有指/null 有指望/null 有损/null 有损于/null 有损压缩/null 有损无益/null 有接缝/null 有收获/null 有攻击性/null 有效/null 有效值/null 有效分蘖/null 有效力/null 有效功率/null 有效地/null 有效性/null 有效措施/null 有效数/null 有效数字/null 有效期/null 有效期内/null 有效果/null 有效氯/null 有效率/null 有效负载/null 有效验/null 有敌意/null 有救/null 有教养/null 有教无类/null 有教无类法/null 有教益/null 有数/null 有文化/null 有斑点/null 有斑痕/null 有斑纹/null 有料/null 有新意/null 有方/null 有方法/null 有旋律/null 有无/null 有无必要/null 有无相通/null 有日子/null 有旧/null 有时/null 有时侯/null 有时候/null 有智力/null 有智慧/null 有智虑/null 有智谋/null 有有/null 有望/null 有朝/null 有朝一日/null 有朝气/null 有期徒刑/null 有期限/null 有木有/null 有木栅/null 有木纹/null 有角/null 有机/null 有机体/null 有机分子/null 有机化合物/null 有机化学/null 有机可乘/null 有机合成/null 有机性/null 有机染料/null 有机氮/null 有机物/null 有机玻璃/null 有机硅/null 有机磷/null 有机磷农药中毒/null 有机磷毒剂/null 有机磷酸酯类/null 有机肥料/null 有机质/null 有杂质/null 有权/null 有权力/null 有权势者/null 有权威/null 有权有势/null 有条/null 有条不紊/null 有条件/null 有条有理/null 有条有理地/null 有条理/null 有条纹/null 有来历/null 有板有眼/null 有枝有叶/null 有枝添叶/null 有枪眼/null 有柄杯/null 有染/null 有标号/null 有样/null 有核国家/null 有根据/null 有根有据/null 有格式/null 有案可查/null 有棱有角/null 有欠/null 有次序/null 有欲/null 有歉意/null 有死无二/null 有毅力/null 有毒/null 有毒性/null 有毛/null 有毛病/null 有气/null 有气味/null 有气孔/null 有气无力/null 有气没力/null 有气派/null 有气质/null 有气音/null 有氧健身操/null 有氧操/null 有氧运动/null 有水/null 有求/null 有求于/null 有求于人/null 有求必应/null 有求斯应/null 有污点/null 有沉有浮/null 有没有/null 有治/null 有法不依/null 有法可依/null 有法必依/null 有波纹/null 有活力/null 有浓味/null 有消息说/null 有渣滓/null 有湿气/null 有滋味/null 有滋有味/null 有漏洞/null 有潜力/null 有灵魂/null 有点/null 有点儿/null 有点冷/null 有点咸/null 有点小/null 有点旧/null 有点甜/null 有点软/null 有烟煤/null 有物/null 有特权/null 有特色/null 有犯无隐/null 有理/null 有理函数/null 有理分式/null 有理式/null 有理性/null 有理想/null 有理数/null 有理数域/null 有理数集/null 有理方程/null 有理无情/null 有理有据/null 有理由/null 有理解/null 有生之年/null 有生以来/null 有生力量/null 有生命/null 有生气/null 有用/null 有用功/null 有用功率/null 有用性/null 有由/null 有电/null 有界/null 有界线/null 有界限/null 有疑义/null 有疑问/null 有疗效/null 有病/null 有病变/null 有病痛/null 有症状/null 有瘾/null 有瘾者/null 有百利而无一弊/null 有百害而无一利/null 有的/null 有的放矢/null 有的时候/null 有的是/null 有皮层/null 有皱纹/null 有益/null 有益于/null 有益处/null 有益无害/null 有盐味/null 有目共睹/null 有目共见/null 有目共赏/null 有目如盲/null 有目无睹/null 有目的/null 有盼儿/null 有眉目/null 有眼/null 有眼不识泰山/null 有眼光/null 有眼力/null 有眼如盲/null 有眼无珠/null 有着/null 有睫毛/null 有知/null 有知觉/null 有知识/null 有码/null 有磁力/null 有礼/null 有礼貌/null 有神/null 有神论/null 有神论者/null 有祸同当/null 有禁不止/null 有福/null 有福同享/null 有福相/null 有种/null 有秩序/null 有空/null 有突起/null 有章可循/null 有笑/null 有等级/null 有策略/null 有粉刺/null 有粘性/null 有精神/null 有精神病/null 有系统/null 有约/null 有约在先/null 有纪律/null 有线/null 有线广播/null 有线新闻网/null 有线电报/null 有线电视/null 有线电话/null 有线电通信/null 有组织/null 有细粒/null 有织纹/null 有织边/null 有终/null 有经验/null 有结果/null 有结节/null 有统计学意义/null 有缘/null 有缘无份/null 有缘无分/null 有缺点/null 有缺陷/null 有罪/null 有罪不罚/null 有罪性/null 有罪者/null 有罪过失/null 有翅难飞/null 有翼/null 有者/null 有耐久力/null 有耐心/null 有耐性/null 有职无权/null 有职有权/null 有联系/null 有胆/null 有胆有识/null 有胆量/null 有胡子/null 有能力/null 有脉纹/null 有脚书橱/null 有脚阳春/null 有脸/null 有自信/null 有良心/null 有色/null 有色人种/null 有色金属/null 有节/null 有节制/null 有节有度/null 有花边/null 有若/null 有苦味/null 有苦说不出/null 有苦难言/null 有荫影/null 有药性/null 有药效/null 有药瘾者/null 有营养/null 有薪水/null 有血有肉/null 有行/null 有行无市/null 有袖子/null 有裂痕/null 有裂缝/null 有见识/null 有规则/null 有规律/null 有觉悟/null 有言/null 有言在先/null 有计划/null 有记号/null 有识/null 有识之士/null 有诗意/null 有诗才/null 有话好说/null 有话要说/null 有说/null 有说有笑/null 有说服力/null 有请/null 有谓/null 有谱/null 有谱儿/null 有负于/null 有负债/null 有负载/null 有贡献/null 有财产/null 有责/null 有责任/null 有资格/null 有赖/null 有赖于/null 有起色/null 有趣/null 有趣味/null 有蹄动物/null 有蹄类/null 有轨/null 有轨电车/null 有轮子/null 有边儿/null 有过失/null 有这/null 有进取心/null 有进无退/null 有远而近/null 有远虑/null 有远见/null 有选举权/null 有选择/null 有道/null 有道具/null 有道德/null 有道是/null 有道理/null 有道辞典/null 有酒意/null 有酒窝/null 有酸味/null 有野心/null 有鉴于此/null 有钩绦虫/null 有钱/null 有钱人/null 有钱有势/null 有钱有闲/null 有钱能使鬼推磨/null 有销路/null 有错就改/null 有错必纠/null 有锯口/null 有门儿/null 有问题/null 有闻必录/null 有阳台/null 有阴影/null 有附文/null 有限/null 有限元/null 有限元法/null 有限公司/null 有限制/null 有限单元/null 有限君主制/null 有限战争/null 有限群/null 有限花序/null 有限集/null 有隙可乘/null 有难同当/null 有雄心/null 有雨/null 有零/null 有雾/null 有顶饰/null 有顷/null 有项/null 有预兆/null 有预谋/null 有颌/null 有颜色/null 有风/null 有风味/null 有风趣/null 有香味/null 有鬃毛/null 有鬼/null 有佛/null 有魄力/null 有魅力/null 有魔力/null 有魔术/null 有黏性/null 有齿轮/null 朊病毒/null 朋克/null 朋党/null 朋党政治/null 朋党比周/null 朋友/null 朋友们/null 朋友遍天下/null 朋只作奸/null 朋比为奸/null 朋辈/null 服下/null 服丧/null 服了/null 服事/null 服于/null 服于组织/null 服人/null 服从/null 服从分配/null 服从需要/null 服他灵/null 服低做小/null 服侍/null 服兵役/null 服冕乘轩/null 服刑/null 服刑者/null 服务/null 服务上门/null 服务业/null 服务于/null 服务到家/null 服务区/null 服务台/null 服务员/null 服务器/null 服务型/null 服务处/null 服务市场/null 服务广告协议/null 服务态度/null 服务性/null 服务性行业/null 服务所/null 服务提供商/null 服务提供者/null 服务机构/null 服务生/null 服务站/null 服务网/null 服务者/null 服务行业/null 服务规章/null 服务质量/null 服务费/null 服务部/null 服务队/null 服务项目/null 服完/null 服帖/null 服役/null 服役者/null 服服/null 服服帖帖/null 服毒/null 服气/null 服气吞露/null 服气餐霞/null 服水土/null 服法/null 服满/null 服理/null 服用/null 服罪/null 服老/null 服膺/null 服药/null 服药过量/null 服装/null 服装厂/null 服装商/null 服装秀/null 服贴/null 服输/null 服辩/null 服镇/null 服食/null 服饰/null 朔城/null 朔城区/null 朔州/null 朔日/null 朔时空/null 朔月/null 朔望/null 朔望月/null 朔望潮/null 朔风/null 朔风凛冽/null 朕兆/null 朗吟/null 朗姆/null 朗姆酒/null 朗峰/null 朗文/null 朗朗/null 朗朗上口/null 朗照/null 朗生/null 朗语/null 朗诵/null 朗诵会/null 朗诵者/null 朗读/null 望不到/null 望不到边/null 望云之情/null 望京/null 望人/null 望其肩背/null 望其肩项/null 望其项背/null 望到/null 望厦条约/null 望去/null 望台/null 望城/null 望外/null 望夫石/null 望奎/null 望子/null 望子成名/null 望子成才/null 望子成龙/null 望安/null 望安乡/null 望尘不及/null 望尘而拜/null 望尘莫及/null 望文生义/null 望断/null 望族/null 望日/null 望景/null 望月/null 望望/null 望杏瞻榆/null 望杏瞻蒲/null 望板/null 望梅止渴/null 望楼/null 望江/null 望洋/null 望洋兴叹/null 望洋惊叹/null 望眼将穿/null 望眼欲穿/null 望着/null 望秋先零/null 望穿/null 望穿秋水/null 望而/null 望而兴叹/null 望而却步/null 望而生畏/null 望花/null 望花区/null 望衡对宇/null 望见/null 望角/null 望诊/null 望谟/null 望远/null 望远瞄准镜/null 望远镜/null 望远镜座/null 望都/null 望门大嚼/null 望门寡/null 望门投止/null 望闻问切/null 望风/null 望风响应/null 望风承旨/null 望风披靡/null 望风捕影/null 望风瓦解/null 望风而走/null 望风而逃/null 望风而遁/null 望风而降/null 朝三暮四/null 朝上/null 朝下/null 朝下风/null 朝不保夕/null 朝不保暮/null 朝不及夕/null 朝不图夕/null 朝不虑夕/null 朝不谋夕/null 朝东/null 朝东暮西/null 朝中/null 朝中社/null 朝乾夕惕/null 朝云暮雨/null 朝他/null 朝代/null 朝令夕改/null 朝令暮改/null 朝兢夕惕/null 朝内/null 朝出夕改/null 朝前/null 朝劳动党/null 朝北/null 朝华夕秀/null 朝南/null 朝参暮礼/null 朝发夕至/null 朝右/null 朝后/null 朝向/null 朝四暮三/null 朝圣/null 朝圣者/null 朝夕/null 朝夕不倦/null 朝夕相处/null 朝外/null 朝天/null 朝天区/null 朝奉/null 朝山/null 朝山进香/null 朝左/null 朝廷/null 朝思夕想/null 朝思夕计/null 朝思暮想/null 朝房/null 朝拜/null 朝拜圣山/null 朝政/null 朝族/null 朝日/null 朝日关系/null 朝日放送/null 朝日新闻/null 朝晖/null 朝暮/null 朝暾/null 朝更夕改/null 朝更暮改/null 朝服/null 朝朝/null 朝朝寒食夜夜元宵/null 朝朝暮暮/null 朝来暮去/null 朝核问题/null 朝梁暮晋/null 朝梁暮陈/null 朝欢暮乐/null 朝歌/null 朝歌夜弦/null 朝歌暮弦/null 朝歌镇/null 朝气/null 朝气蓬勃/null 朝永・振一郎/null 朝珠/null 朝生暮合/null 朝生暮死/null 朝着/null 朝秦暮楚/null 朝纲/null 朝经暮史/null 朝臣/null 朝花夕拾/null 朝荣夕悴/null 朝荣夕毙/null 朝荣暮落/null 朝菌/null 朝著/null 朝行夕改/null 朝西/null 朝西暮东/null 朝见/null 朝觐/null 朝贡/null 朝迁市变/null 朝过夕改/null 朝里/null 朝野/null 朝钟暮鼓/null 朝门/null 朝闻夕改/null 朝闻夕死/null 朝闻道夕死可矣/null 朝阳/null 朝阳产业/null 朝阳地区/null 朝阳花/null 朝阳门/null 朝雨/null 朝霞/null 朝露/null 朝露暮霭/null 朝露溘至/null 朝韩/null 朝顶/null 朝饔夕飧/null 朝鲜中央新闻社/null 朝鲜中央通讯社/null 朝鲜人/null 朝鲜八道/null 朝鲜军队/null 朝鲜劳动党/null 朝鲜半岛/null 朝鲜太宗/null 朝鲜字母/null 朝鲜总督府/null 朝鲜战争/null 朝鲜文/null 朝鲜日报/null 朝鲜核谈/null 朝鲜民主主义人民共和国/null 朝鲜海峡/null 朝鲜祖国解放战争/null 朝鲜筝/null 朝鲜语/null 朝齑暮盐/null 期中/null 期中考/null 期于/null 期以/null 期会/null 期借/null 期内/null 期刊/null 期刊流通/null 期刊目录/null 期刊管理/null 期刊索引/null 期初/null 期前/null 期待/null 期律/null 期收/null 期攷/null 期数/null 期月有成/null 期望/null 期望中/null 期望值/null 期期/null 期期艾艾/null 期末/null 期末考/null 期权/null 期栏/null 期求/null 期汇/null 期满/null 期盼/null 期票/null 期约/null 期终/null 期考/null 期航/null 期船/null 期许/null 期货/null 期货合约/null 期货市场/null 期间/null 期限/null 期限内/null 期颐之寿/null 朦在鼓里/null 朦朦/null 朦的/null 朦胧/null 朦胧诗/null 木丛/null 木乃伊/null 木乃伊化/null 木人/null 木人石心/null 木偶/null 木偶剧/null 木偶戏/null 木偶片/null 木偶秀/null 木兰/null 木兰属/null 木兰科/null 木兰纲/null 木兰花/null 木制/null 木制品/null 木刻/null 木刻家/null 木刻水印/null 木刻画/null 木剑/null 木化石/null 木匠/null 木卡姆/null 木变石/null 木叶蝶/null 木吒/null 木器/null 木场/null 木块/null 木型/null 木垒/null 木垒县/null 木垫/null 木塞/null 木塞子/null 木壳/null 木夯/null 木头/null 木头人/null 木头木脑/null 木子美/null 木屋/null 木屐/null 木屑/null 木履/null 木工/null 木工师/null 木工术/null 木工艺/null 木已成舟/null 木巳成舟/null 木床/null 木底/null 木形灰心/null 木心石腹/null 木房/null 木拴/null 木排/null 木料/null 木星/null 木曜日/null 木本/null 木本植物/null 木本水源/null 木朽不雕/null 木杆/null 木材/null 木材场/null 木村/null 木条/null 木条箱/null 木板/null 木板画/null 木板路/null 木林/null 木架/null 木柱/null 木柴/null 木柴堆/null 木栅/null 木栅线/null 木栏/null 木栓/null 木栓层/null 木格措/null 木框/null 木桥/null 木桩/null 木桶/null 木梯/null 木梳/null 木棉/null 木棉树/null 木棉科/null 木棉花/null 木棍/null 木棒/null 木棚/null 木棺/null 木椅/null 木椆/null 木槌/null 木槿/null 木樨/null 木灰/null 木炭/null 木炭画/null 木焦油/null 木然/null 木片/null 木版/null 木版画/null 木牛/null 木犀/null 木犀肉/null 木状/null 木猴而冠/null 木球/null 木琴/null 木瓜/null 木瓦/null 木盘/null 木目金/null 木石/null 木石为徒/null 木立/null 木笔/null 木笼/null 木筏/null 木简/null 木管/null 木管乐器/null 木箱/null 木粉/null 木精/null 木糖/null 木糖醇/null 木纹/null 木结/null 木结构/null 木耳/null 木聚糖/null 木腿/null 木舟/null 木船/null 木色/null 木芙蓉/null 木荷/null 木莓/null 木莲/null 木菠萝/null 木蓝/null 木薯/null 木薯淀粉/null 木虱/null 木蠹/null 木蠹蛾/null 木行/null 木讷/null 木讷寡言/null 木讷老人/null 木豆/null 木质/null 木质化/null 木质素/null 木质茎/null 木质部/null 木贼/null 木通/null 木造/null 木造品/null 木道/null 木酮糖/null 木醇/null 木钉/null 木锤/null 木锨/null 木锯/null 木锹/null 木门/null 木雕/null 木雕工/null 木雕泥塑/null 木鞋/null 木香/null 木马/null 木马病毒/null 木马计/null 木骨都束/null 木鱼/null 木鸡/null 木鸡养到/null 木麻黄/null 木齿耙/null 未上/null 未上弦/null 未上栓/null 未为/null 未久/null 未之/null 未了/null 未了公案/null 未予/null 未亡/null 未亡人/null 未交/null 未亵渎/null 未付/null 未作/null 未使/null 未使用/null 未供认/null 未便/null 未修改/null 未修正/null 未做/null 未免/null 未兑/null 未关/null 未冠/null 未决/null 未决定/null 未决意/null 未决犯/null 未准/null 未准备/null 未减轻/null 未几/null 未出/null 未出声/null 未出货/null 未分/null 未分割/null 未分开/null 未分离/null 未分裂/null 未分选/null 未切割/null 未刊行/null 未列/null 未列出/null 未删节版/null 未到/null 未剃须/null 未加/null 未加工/null 未动/null 未动过/null 未区/null 未卖出/null 未卜/null 未卜先知/null 未占/null 未占用/null 未占领/null 未卸下/null 未压缩/null 未去壳/null 未参战/null 未及/null 未反驳/null 未发/null 未发展/null 未发现/null 未发觉/null 未发货/null 未受/null 未受伤/null 未受影响/null 未受损/null 未受理/null 未受精/null 未受阻/null 未变/null 未可/null 未可厚非/null 未可同日而语/null 未名/null 未向/null 未命名/null 未和解/null 未在/null 未垦/null 未声明/null 未处理/null 未央/null 未央区/null 未央宫/null 未夸张/null 未奉命/null 未好/null 未妥/null 未始/null 未始不可/null 未娶/null 未娶妻/null 未婚/null 未婚夫/null 未婚妻/null 未孵/null 未安排/null 未完/null 未完待续/null 未完成/null 未定/null 未定义/null 未定之天/null 未定角/null 未审理/null 未将/null 未尝/null 未尝不可/null 未就/null 未尽/null 未尽事宜/null 未带/null 未干/null 未平/null 未建造/null 未开/null 未开化/null 未开发/null 未开垦/null 未开拓/null 未归类/null 未形成/null 未征/null 未得/null 未必/null 未必有/null 未必然/null 未想/null 未意/null 未感染/null 未成/null 未成一篑/null 未成冠/null 未成功/null 未成年/null 未成年人/null 未成年者/null 未成形/null 未成熟/null 未成长/null 未打破/null 未扣/null 未扫清/null 未批准/null 未批判/null 未折现/null 未报/null 未指定/null 未按/null 未损坏/null 未捣碎/null 未排定/null 未推动/null 未掩蔽/null 未提/null 未提到/null 未提及/null 未揭露/null 未收/null 未收割/null 未改/null 未改变/null 未改革/null 未放/null 未救济/null 未敢/null 未敢苟同/null 未料/null 未时/null 未明求衣/null 未明言/null 未曾/null 未有/null 未来/null 未来业绩/null 未来学/null 未来式/null 未来技术/null 未来派/null 未来研究/null 未标/null 未标号/null 未标明/null 未格/null 未歌颂/null 未武装/null 未毁/null 未洗/null 未流通/null 未消化/null 未清/null 未清算/null 未满/null 未满月/null 未满足/null 未演出/null 未灭/null 未点燃/null 未烘透/null 未烹调/null 未焚徙薪/null 未然/null 未煮熟/null 未煮过/null 未煮透/null 未熟/null 未琢磨/null 未生/null 未生效/null 未用/null 未用尽/null 未用过/null 未登记/null 未知/null 未知一丁/null 未知万一/null 未知所措/null 未知数/null 未知数儿/null 未知量/null 未确定/null 未确证/null 未碰上/null 未碰过/null 未磨光/null 未离/null 未移动/null 未稀释/null 未穿过/null 未穿靴/null 未竟/null 未竟之志/null 未答覆/null 未签字者/null 未粘牢/null 未精炼/null 未约定/null 未纯化/null 未纳/null 未组成/null 未组织/null 未经/null 未经证实/null 未结束/null 未缓和/null 未编号/null 未编辑/null 未置可否/null 未羊/null 未翻转/null 未老先衰/null 未联合/null 未能/null 未能免俗/null 未能如愿/null 未能得逞/null 未腐败/null 未艾方兴/null 未范/null 未获/null 未获奖/null 未行/null 未行之患/null 未补/null 未表示/null 未被/null 未裂开/null 未要/null 未见/null 未见分晓/null 未见到/null 未规定/null 未觉/null 未解/null 未解之谜/null 未解决/null 未解释/null 未触动/null 未订婚/null 未记/null 未设/null 未设防/null 未试过/null 未诞生/null 未详/null 未说/null 未说出/null 未说明/null 未请/null 未读/null 未贴/null 未足为道/null 未载名/null 未载明/null 未达/null 未达一间/null 未达到/null 未过/null 未遂/null 未遂政变/null 未遂犯/null 未遑多让/null 未配对/null 未醉/null 未铺设/null 未错/null 未长成/null 未附/null 未附属/null 未陈旧/null 未雕琢/null 未雨绸缪/null 未预/null 未风先雨/null 未驯服/null 末世/null 末了/null 末代/null 末代皇帝/null 末伏/null 末位/null 末儿/null 末叶/null 末名/null 末名奖品/null 末后/null 末大不掉/null 末大必折/null 末如之何/null 末子/null 末学肤受/null 末尾/null 末屑/null 末席/null 末年/null 末底改/null 末座/null 末态/null 末愿/null 末日/null 末日论/null 末期/null 末枝/null 末梢/null 末梢神经/null 末梢部/null 末次/null 末段/null 末流/null 末煤/null 末片/null 末状/null 末班/null 末班车/null 末稍/null 末稍神经/null 末端/null 末篇/null 末考/null 末艺/null 末节/null 末节细行/null 末茶/null 末药/null 末行/null 末路/null 末路之难/null 末路穷途/null 末车/null 末速/null 末造/null 末页/null 本・拉登/null 本上/null 本世纪/null 本世纪内/null 本世纪初/null 本世纪末/null 本主/null 本主儿/null 本义/null 本乡/null 本乡本土/null 本书/null 本事/null 本人/null 本份/null 本会/null 本位/null 本位主义/null 本位制/null 本位货币/null 本体/null 本体论/null 本例/null 本俸/null 本值/null 本儿/null 本分/null 本刊/null 本初/null 本初子午线/null 本利/null 本剧/null 本区/null 本单位/null 本卷/null 本厂/null 本原/null 本县/null 本句/null 本台/null 本台记者/null 本号/null 本司/null 本同末异/null 本名/null 本周/null 本命/null 本命年/null 本品/null 本嗓/null 本因坊/null 本因坊秀策/null 本团/null 本固枝荣/null 本国/null 本国产/null 本国人/null 本国语/null 本土/null 本土化/null 本土化软件/null 本土派/null 本地/null 本地人/null 本地化/null 本地区/null 本地管理界面/null 本场/null 本垒/null 本垒打/null 本埠/null 本堂/null 本处/null 本子/null 本字/null 本季/null 本季度/null 本室/null 本家/null 本家儿/null 本小利大/null 本小利微/null 本尼迪/null 本局/null 本届/null 本岛/null 本州/null 本州岛/null 本币/null 本市/null 本帮菜/null 本平方米/null 本年/null 本年度/null 本应/null 本底/null 本底计数/null 本底调查/null 本底辐射/null 本式/null 本当/null 本影/null 本征值/null 本征向量/null 本心/null 本性/null 本性难移/null 本息/null 本想/null 本意/null 本戏/null 本我/null 本所/null 本批/null 本报/null 本报讯/null 本报记者/null 本拉登/null 本拟/null 本支百世/null 本文/null 本族/null 本族语/null 本日/null 本旨/null 本旬/null 本星期/null 本月/null 本朝/null 本期/null 本末/null 本末倒置/null 本本/null 本本主义/null 本本分分/null 本本源源/null 本机/null 本机振荡/null 本村/null 本条/null 本来/null 本来面目/null 本杰明/null 本杰明・富兰克林/null 本校/null 本案/null 本次/null 本港/null 本源/null 本溪/null 本溪县/null 本然/null 本片/null 本版/null 本班/null 本生灯/null 本田/null 本益比/null 本相/null 本省/null 本省人/null 本着/null 本社/null 本票/null 本科/null 本科生/null 本站/null 本章/null 本笃・十六世/null 本籍/null 本类/null 本系/null 本系统/null 本级/null 本纪/null 本组/null 本经/null 本罪/null 本职/null 本职工作/null 本能/null 本能冲动/null 本色/null 本节/null 本茨/null 本草/null 本草纲目/null 本营/null 本著/null 本行/null 本表/null 本该/null 本该如此/null 本说/null 本质/null 本质上/null 本质性/null 本质联系/null 本身/null 本轮/null 本那比/null 本那比市/null 本部/null 本部门/null 本金/null 本钱/null 本队/null 本院/null 本需/null 本页/null 本项/null 本领/null 本题/null 札幌/null 札手舞脚/null 札格拉布/null 札格瑞布/null 札记/null 札达/null 札马剌丁/null 札马鲁丁/null 术前/null 术后/null 术治/null 术科/null 术语/null 术语学/null 术语表/null 术赤/null 朱丽亚/null 朱丽叶/null 朱云折槛/null 朱俊/null 朱允炆/null 朱元璋/null 朱利亚尼/null 朱利娅/null 朱厚照/null 朱口皓齿/null 朱古力/null 朱唇榴齿/null 朱唇皓齿/null 朱唇粉面/null 朱墨/null 朱子/null 朱孝天/null 朱容基/null 朱广沪/null 朱庇特/null 朱弦玉磐/null 朱弦疏越/null 朱德/null 朱批/null 朱文/null 朱棣/null 朱槿/null 朱温/null 朱漆/null 朱熔基/null 朱熹/null 朱甍碧瓦/null 朱由校/null 朱瞻基/null 朱砂/null 朱祁钰/null 朱祁镇/null 朱笔/null 朱粉/null 朱紫难别/null 朱红/null 朱红灯/null 朱红色/null 朱自清/null 朱色/null 朱莉娅/null 朱衣点头/null 朱衣点额/null 朱诺/null 朱轮华毂/null 朱迪亚/null 朱镕基/null 朱门/null 朱门绣户/null 朱阁青楼/null 朱雀/null 朱顶/null 朱颜/null 朱颜粉面/null 朱颜鹤发/null 朱高炽/null 朱鹭/null 朱鹮/null 朴刀/null 朴厚/null 朴子/null 朴子市/null 朴学/null 朴实/null 朴实无华/null 朴拙/null 朴树/null 朴次茅斯/null 朴正熙/null 朴直/null 朴硝/null 朴素/null 朴素唯物主义/null 朴素大方/null 朴素无华/null 朴素的唯物主义/null 朴茂/null 朴茨茅斯和约/null 朴讷诚笃/null 朴质/null 朴陋/null 朵儿/null 朵朵/null 朵颐/null 朵颐大嚼/null 机上/null 机下/null 机不可失/null 机不可失失不再来/null 机不旋踵/null 机中/null 机事不密/null 机井/null 机仓/null 机件/null 机会/null 机会主义/null 机会均等/null 机会带来成功/null 机会成本/null 机体/null 机修/null 机修厂/null 机修工/null 机关/null 机关作风/null 机关党委/null 机关刊物/null 机关布景/null 机关干部/null 机关报/null 机关枪/null 机关炮/null 机关车/null 机具/null 机内/null 机制/null 机前/null 机务/null 机务段/null 机动/null 机动保障/null 机动力/null 机动化/null 机动式/null 机动性/null 机动船/null 机动车/null 机动车辆/null 机动防御/null 机化/null 机变/null 机变如神/null 机台/null 机名/null 机员/null 机哩瓜拉/null 机器/null 机器人/null 机器人学/null 机器制/null 机器油/null 机器翻译/null 机器脚踏车/null 机器般/null 机场/null 机场大厦/null 机坪/null 机型/null 机壳/null 机头/null 机头座/null 机子/null 机宜/null 机密/null 机密性/null 机密文件/null 机尾/null 机工/null 机巧/null 机帆船/null 机师/null 机床/null 机库/null 机座/null 机心/null 机房/null 机敏/null 机时/null 机智/null 机杼/null 机构/null 机构改革/null 机构调整/null 机枪/null 机枪手/null 机架/null 机柜/null 机械/null 机械传动/null 机械制造/null 机械化/null 机械化军/null 机械化步兵/null 机械化部队/null 机械厂/null 机械唯物主义/null 机械士/null 机械学/null 机械工/null 机械工业/null 机械工人/null 机械工程/null 机械师/null 机械性/null 机械性能/null 机械手/null 机械效率/null 机械油/null 机械电子工业部/null 机械码/null 机械翻译/null 机械能/null 机械论/null 机械设备/null 机械语言/null 机械运动/null 机械钟/null 机油/null 机灌/null 机灵/null 机率/null 机理/null 机电/null 机电部/null 机票/null 机种/null 机箱/null 机米/null 机组/null 机组人员/null 机织/null 机织物/null 机绣/null 机缘/null 机罩/null 机群/null 机翼/null 机耕/null 机耕船/null 机能/null 机腹/null 机舱/null 机芯/null 机要/null 机要文件/null 机警/null 机诈/null 机译/null 机谋/null 机身/null 机身宽大/null 机车/null 机轮/null 机轴/null 机载/null 机载设备/null 机载雷达/null 机运/null 机遇/null 机长/null 机降/null 机顶盒/null 机首/null 朽坏/null 朽木/null 朽木不雕/null 朽木之才/null 朽木死灰/null 朽木粪土/null 朽木粪墙/null 朽株枯木/null 朽棘不雕/null 朽烂/null 朽蠹/null 朽迈/null 杀一儆百/null 杀一利百/null 杀一警百/null 杀亲/null 杀人/null 杀人不眨眼/null 杀人不见血/null 杀人不过头点地/null 杀人偿命欠债还钱/null 杀人如芥/null 杀人如草/null 杀人如麻/null 杀人放火/null 杀人未遂/null 杀人案/null 杀人案件/null 杀人灭口/null 杀人犯/null 杀人狂/null 杀人盈野/null 杀人罪/null 杀人者/null 杀人越货/null 杀价/null 杀伐/null 杀伤/null 杀伤力/null 杀伤性/null 杀低/null 杀光/null 杀头/null 杀女/null 杀妻/null 杀妻求将/null 杀婴/null 杀子/null 杀害/null 杀富济贫/null 杀幼/null 杀彘教子/null 杀性/null 杀戒/null 杀戮/null 杀手/null 杀手级应用/null 杀掉/null 杀掠/null 杀敌/null 杀敌致果/null 杀机/null 杀死/null 杀毒/null 杀毒软件/null 杀气/null 杀气腾腾/null 杀灭/null 杀熟/null 杀父/null 杀牛宰羊/null 杀猪/null 杀猪宰羊/null 杀生/null 杀生与夺/null 杀生之权/null 杀生之柄/null 杀真菌/null 杀绝/null 杀草快/null 杀菌/null 杀菌作用/null 杀菌剂/null 杀菌物/null 杀菌素/null 杀虎斩蛟/null 杀虫/null 杀虫剂/null 杀虫药/null 杀螟杆菌/null 杀螺剂/null 杀蠹药/null 杀衣缩食/null 杀身/null 杀身之祸/null 杀身出生/null 杀身成义/null 杀身成仁/null 杀身成名/null 杀身报国/null 杀身救国/null 杀软/null 杀进/null 杀进杀出/null 杀退/null 杀除剂/null 杀青/null 杀风景/null 杀马毁车/null 杀鸡/null 杀鸡为黍/null 杀鸡儆猴/null 杀鸡取卵/null 杀鸡取蛋/null 杀鸡吓猴/null 杀鸡宰鹅/null 杀鸡炊黍/null 杀鸡焉用牛刀/null 杀鸡给猴看/null 杀鸡警猴/null 杀鸡骇猴/null 杀鼠药/null 杂七杂八/null 杂乱/null 杂乱无章/null 杂乱物/null 杂事/null 杂交/null 杂交植物/null 杂交派对/null 杂交牛/null 杂交种/null 杂交育种/null 杂件/null 杂件儿/null 杂凑/null 杂剧/null 杂剧四大家/null 杂务/null 杂务工/null 杂史/null 杂和菜/null 杂和面/null 杂和面儿/null 杂品/null 杂噪/null 杂声/null 杂多/null 杂婚/null 杂家/null 杂居/null 杂居地区/null 杂工/null 杂差/null 杂店/null 杂录/null 杂役/null 杂志/null 杂志社/null 杂念/null 杂情/null 杂感/null 杂戏/null 杂技/null 杂技团/null 杂技场/null 杂技演员/null 杂拌/null 杂拌儿/null 杂文/null 杂曲/null 杂木/null 杂木林/null 杂树林/null 杂款/null 杂沓/null 杂活/null 杂流/null 杂烩/null 杂牌/null 杂牌儿/null 杂牌军/null 杂物/null 杂物室/null 杂环/null 杂用/null 杂症/null 杂盐/null 杂碎/null 杂种/null 杂种优势/null 杂种性/null 杂种狗/null 杂税/null 杂粮/null 杂糅/null 杂絮/null 杂耍/null 杂耍剧/null 杂肥/null 杂脍/null 杂色/null 杂草/null 杂草似/null 杂草多/null 杂菜/null 杂言/null 杂记/null 杂评/null 杂说/null 杂谈/null 杂谷脑/null 杂谷脑镇/null 杂货/null 杂货商/null 杂货店/null 杂货摊/null 杂质/null 杂费/null 杂遝/null 杂配/null 杂陈/null 杂院/null 杂院儿/null 杂集/null 杂霸/null 杂面/null 杂音/null 杂项/null 杂食/null 杂食动物/null 杂食性/null 权且/null 权位/null 权作/null 权值/null 权倾中外/null 权倾天下/null 权充/null 权利/null 权利人/null 权利声明/null 权利法案/null 权利要求/null 权力/null 权力下放/null 权力交接/null 权力分享/null 权力分享协议/null 权力斗争/null 权力机关/null 权力纷争/null 权势/null 权变/null 权变锋出/null 权外/null 权威/null 权威人士/null 权威性/null 权宜/null 权宜之策/null 权宜之计/null 权属/null 权当/null 权数/null 权时/null 权术/null 权杖/null 权柄/null 权标/null 权欲熏心/null 权略/null 权益/null 权职/null 权能/null 权能区分/null 权臣/null 权舆/null 权衡/null 权衡利弊/null 权衡者/null 权衡轻重/null 权要/null 权证/null 权诈/null 权谋/null 权豪势要/null 权责/null 权贵/null 权重/null 权钥/null 权钧力齐/null 权钱交易/null 权门/null 权限/null 杆儿/null 杆塔/null 杆子/null 杆弟/null 杆档/null 杆状/null 杆状细菌/null 杆秤/null 杆菌/null 杆菌肽/null 杈子/null 杉山彬/null 杉木/null 杉木制/null 杉林/null 杉林乡/null 杉树/null 杉篙/null 杌凳/null 杌子/null 杌陧/null 李下不整冠/null 李下瓜天/null 李世民/null 李丽珊/null 李云娜/null 李亚鹏/null 李亨/null 李代数/null 李代桃僵/null 李会昌/null 李伯元/null 李俊/null 李修贤/null 李儇/null 李元昊/null 李先念/null 李光耀/null 李克强/null 李公朴/null 李冰/null 李冰冰/null 李劼人/null 李卜克内西/null 李卫公/null 李叔同/null 李后主/null 李哲/null 李商隐/null 李嘉欣/null 李嘉诚/null 李四/null 李四光/null 李国豪/null 李大钊/null 李天王/null 李天禄/null 李娃传/null 李娜/null 李子/null 李宁/null 李安/null 李宗仁/null 李宝嘉/null 李家短/null 李富春/null 李小龙/null 李尔王/null 李岚清/null 李希霍芬/null 李广/null 李延寿/null 李建成/null 李开复/null 李彦宏/null 李德/null 李德林/null 李忱/null 李怀远/null 李恒/null 李悝/null 李成桂/null 李成江/null 李承晚/null 李振藩/null 李政道/null 李敏勇/null 李斯/null 李斯特/null 李斯特氏杆菌/null 李斯特氏菌/null 李斯特菌/null 李旦/null 李时珍/null 李昂/null 李昉/null 李昌镐/null 李明博/null 李显龙/null 李晔/null 李朝威/null 李木/null 李林甫/null 李树/null 李格非/null 李氏/null 李氏朝鲜/null 李汝珍/null 李沧/null 李沧区/null 李治/null 李泽楷/null 李洪志/null 李清照/null 李渊/null 李渔/null 李湛/null 李漼/null 李瀍/null 李煜/null 李玟/null 李瑞环/null 李登辉/null 李白/null 李百药/null 李直夫/null 李祝/null 李约瑟/null 李纯/null 李维/null 李维史陀/null 李绿园/null 李缨/null 李群/null 李翱/null 李耳/null 李肇/null 李肇星/null 李自成/null 李自成起义/null 李舜臣/null 李英儒/null 李诚恩/null 李诵/null 李豫/null 李贺/null 李贽/null 李远哲/null 李连杰/null 李适/null 李逵/null 李重茂/null 李铁/null 李长春/null 李陵/null 李隆基/null 李雪健/null 李靖/null 李鸿章/null 李鹏/null 杏仁/null 杏仁体/null 杏仁核/null 杏仁豆腐/null 杏子/null 杏干/null 杏林/null 杏林区/null 杏树/null 杏核/null 杏眼/null 杏红/null 杏脯/null 杏脸桃腮/null 杏色/null 杏花/null 杏花岭/null 杏花岭区/null 杏花村/null 杏雨梨云/null 杏黄/null 材大难用/null 材料/null 材料力学/null 材料厂/null 材料学/null 材料科学/null 材料费/null 材疏志大/null 材积/null 材能兼备/null 材质/null 材轻德薄/null 材高知深/null 村上・春树/null 村上隆/null 村人/null 村内/null 村前村后/null 村办/null 村医/null 村口/null 村史/null 村名/null 村坊/null 村塾/null 村外/null 村夫/null 村夫俗子/null 村夫野老/null 村女/null 村妇/null 村姑/null 村委会/null 村子/null 村学/null 村寨/null 村山富市/null 村干部/null 村庄/null 村式/null 村支书/null 村村寨寨/null 村民/null 村生泊长/null 村社/null 村童/null 村筋俗骨/null 村级/null 村舍/null 村落/null 村证房/null 村里/null 村野/null 村镇/null 村长/null 杓子/null 杓球场/null 杖击/null 杖刑/null 杖头木偶/null 杖子/null 杜仲/null 杜仲胶/null 杜伊斯堡/null 杜冷丁/null 杜口/null 杜口吞声/null 杜口无言/null 杜口结舌/null 杜口绝舌/null 杜口绝言/null 杜口裹足/null 杜塞/null 杜塞尔多夫/null 杜塞道夫/null 杜威/null 杜宇/null 杜尔伯特/null 杜尔伯特县/null 杜尚别/null 杜布罗夫尼克/null 杜康/null 杜微慎防/null 杜拜/null 杜撰/null 杜撰者/null 杜月笙/null 杜本内/null 杜松/null 杜松子酒/null 杜树/null 杜梨/null 杜比/null 杜氏腺/null 杜氏腺体/null 杜渐/null 杜渐防微/null 杜渐防萌/null 杜渐除微/null 杜牧/null 杜琪峰/null 杜瓦利埃/null 杜甫/null 杜甫草堂/null 杜秋娘歌/null 杜绝/null 杜绝后患/null 杜荀鹤/null 杜莎夫人/null 杜蕾斯/null 杜蘅/null 杜衡/null 杜邦/null 杜邮之戮/null 杜门/null 杜门不出/null 杜门却扫/null 杜门屏迹/null 杜门晦迹/null 杜门自绝/null 杜门谢客/null 杜集/null 杜集区/null 杜马/null 杜鲁门/null 杜鲁门主义/null 杜鹃/null 杜鹃啼血/null 杜鹃座/null 杜鹃科/null 杜鹃花/null 杜鹃花科/null 杜鹃鸟/null 杞人之忧/null 杞人忧天/null 杞国/null 杞国之忧/null 杞国忧天/null 杞天之虑/null 杞子/null 杞宋无征/null 杞忧者/null 杞柳/null 杞梓之林/null 束之高阁/null 束以/null 束住/null 束修/null 束修自好/null 束力/null 束发/null 束发封帛/null 束发带/null 束带/null 束成/null 束手/null 束手就擒/null 束手就毙/null 束手就缚/null 束手待死/null 束手待毙/null 束手旁观/null 束手无措/null 束手无策/null 束手无计/null 束手束脚/null 束杖理民/null 束狭/null 束环索/null 束矢难折/null 束紧/null 束缚/null 束缚物/null 束胸/null 束脩/null 束腰/null 束衣/null 束装/null 束装盗金/null 束身/null 束身修行/null 束身就缚/null 束身自修/null 束身自好/null 束马悬车/null 杠上开花/null 杠刀/null 杠夫/null 杠头/null 杠子/null 杠房/null 杠杆/null 杠杆作用/null 杠杆收购/null 杠竹/null 杠荡/null 杠铃/null 条令/null 条件/null 条件下/null 条件刺激/null 条件反射/null 条件反应/null 条件句/null 条件式/null 条件概率/null 条例/null 条几/null 条凳/null 条分缕晰/null 条分缕析/null 条块/null 条块分割/null 条块结合/null 条子/null 条带/null 条幅/null 条幅广告/null 条形/null 条形图/null 条形燃料/null 条形码/null 条捆/null 条播/null 条数/null 条文/null 条斑窃蠹/null 条施/null 条条/null 条条块块/null 条条大路通罗马/null 条条框框/null 条板/null 条板箱/null 条案/null 条款/null 条状物/null 条理/null 条理分明/null 条畅/null 条痕/null 条目/null 条石/null 条码/null 条约/null 条纹/null 条纹羚/null 条绒/null 条虫/null 条规/null 条贯/null 条钢/null 条陈/null 条鳎/null 来不/null 来不了/null 来不及/null 来不得/null 来世/null 来世论/null 来个/null 来临/null 来义/null 来义乡/null 来之/null 来之不易/null 来书/null 来亨鸡/null 来京/null 来人/null 来人儿/null 来人来函/null 来件/null 来作/null 来信/null 来做/null 来养/null 来写/null 来凤/null 来函/null 来到/null 来劲/null 来势/null 来势凶猛/null 来势汹汹/null 来华/null 来华访问/null 来历/null 来历不明/null 来去/null 来去匆匆/null 来去无踪/null 来去自由/null 来变/null 来台/null 来吧/null 来呀/null 来唱/null 来回/null 来回来去/null 来回来去地/null 来回票/null 来地/null 来处/null 来复枪/null 来复电路/null 来复线/null 来头/null 来安/null 来客/null 来宾/null 来就/null 来已/null 来年/null 来式/null 来归/null 来往/null 来往港口/null 来得/null 来得及/null 来得容易/null 来意/null 来手/null 来抓/null 来拿去/null 来接/null 来敌/null 来文/null 来料/null 来料加工/null 来无影/null 来日/null 来日大难/null 来日方长/null 来日正长/null 来月经/null 来来/null 来来往往/null 来样/null 来样加工/null 来此/null 来气/null 来水/null 来港/null 来源/null 来源于/null 来潮/null 来火/null 来火儿/null 来牟/null 来犯/null 来犯之敌/null 来猜/null 来生/null 来由/null 来电/null 来电显示/null 来的/null 来的人/null 来看/null 来着/null 来硬的/null 来碗/null 来福枪/null 来稿/null 来给/null 来者/null 来者不善/null 来者不拒/null 来聊天/null 来自/null 来自于/null 来舟/null 来苏/null 来苏糖/null 来著/null 来袭/null 来讲/null 来访/null 来访者/null 来试/null 来说/null 来请/null 来货/null 来路/null 来路不明/null 来路货/null 来踪/null 来踪去迹/null 来过/null 来这/null 来迟/null 来风/null 来鸿/null 来鸿去燕/null 来龙去脉/null 杨业/null 杨丞琳/null 杨亿/null 杨俊/null 杨凝式/null 杨利伟/null 杨坚/null 杨妃/null 杨守仁/null 杨宝森/null 杨家将/null 杨尚昆/null 杨建利/null 杨开慧/null 杨振宁/null 杨斌/null 杨月清/null 杨木/null 杨枝鱼/null 杨柳/null 杨柳科/null 杨柳青/null 杨树/null 杨桃/null 杨梅/null 杨梅镇/null 杨森/null 杨洁篪/null 杨浦/null 杨深秀/null 杨澄中/null 杨玉环/null 杨百翰/null 杨百翰大学/null 杨福家/null 杨秀清/null 杨维/null 杨致远/null 杨花水性/null 杨虎城/null 杨贵妃/null 杨采妮/null 杨锐/null 杨陵/null 杨陵区/null 杩头/null 杭丁顿舞蹈症/null 杭州湾/null 杭州萝卜绍兴种/null 杭纺/null 杭育/null 杭锦/null 杯中/null 杯中之物/null 杯中物/null 杯垫/null 杯子/null 杯底/null 杯弓蛇影/null 杯托/null 杯水粒粟/null 杯水舆薪/null 杯水车薪/null 杯状/null 杯珓/null 杯盏/null 杯盘狼籍/null 杯盘狼藉/null 杯筊/null 杯葛/null 杯蛇鬼车/null 杯觥交错/null 杯赛/null 杯酒戈矛/null 杯酒解怨/null 杯酒言欢/null 杯酒释兵权/null 杰伊汉港/null 杰佛兹/null 杰作/null 杰克/null 杰克・伦敦/null 杰克森/null 杰克逊/null 杰出/null 杰出人物/null 杰出代表/null 杰士派/null 杰夫/null 杰夫・金尼/null 杰奎琳/null 杰奎琳・肯尼迪/null 杰弗逊/null 杰弗里乔叟/null 杰拉/null 杰拉德/null 杰瑞/null 杰瑞・宋飞/null 杰米/null 杰西/null 杰西・欧文斯/null 杰西卡/null 杰西卡・艾尔芭/null 杰里科/null 杰里米/null 杲杲/null 杳冥/null 杳如/null 杳如黄鹤/null 杳无人烟/null 杳无人迹/null 杳无信息/null 杳无消息/null 杳无踪影/null 杳无踪迹/null 杳无音信/null 杳无音讯/null 杳无黄鹤/null 杳杳/null 杳渺/null 杳然/null 杳眇/null 杳茫/null 杳霭/null 杼柚其空/null 杼轴/null 松一口气/null 松下/null 松下公司/null 松下电器/null 松下电气工业/null 松乔之寿/null 松了/null 松仁/null 松动/null 松劲/null 松化石/null 松北/null 松北区/null 松原/null 松口/null 松口气/null 松口蘑/null 松叶/null 松土/null 松土机/null 松坡湖/null 松垮/null 松塔儿/null 松墙子/null 松子/null 松山/null 松山区/null 松岛/null 松岭/null 松岭区/null 松巴哇/null 松巴哇岛/null 松带/null 松开/null 松弛/null 松弛法/null 松心/null 松快/null 松懈/null 松手/null 松掉/null 松散/null 松散物料/null 松明/null 松木/null 松松/null 松松垮垮/null 松松散散/null 松林/null 松果/null 松果体/null 松果腺/null 松柏/null 松柏之茂/null 松柏后雕/null 松树/null 松桃/null 松桃县/null 松毛虫/null 松气/null 松江/null 松油/null 松泛/null 松涛/null 松溪/null 松滋/null 松潘/null 松狮犬/null 松球/null 松田/null 松石/null 松科/null 松筠之节/null 松糕/null 松紧/null 松紧带/null 松绑/null 松缓/null 松耗/null 松脂/null 松脆/null 松脱/null 松节/null 松节油/null 松花/null 松花江/null 松花蛋/null 松茸/null 松菌/null 松萝/null 松萝共倚/null 松蕈/null 松蘑/null 松虎/null 松赞干布/null 松赞干布陵/null 松软/null 松辽平原/null 松针/null 松阳/null 松露/null 松露猪/null 松饼/null 松香/null 松驰/null 松鸡/null 松鸦/null 松鹤遐龄/null 松鼠/null 板上钉钉/null 板下/null 板书/null 板凳/null 板刷/null 板块/null 板块构造/null 板块理论/null 板墙/null 板壁/null 板子/null 板实/null 板岩/null 板床/null 板式/null 板式塔/null 板房/null 板报/null 板擦/null 板擦儿/null 板斧/null 板机/null 板材/null 板条/null 板条箱/null 板板/null 板板六十四/null 板极/null 板架/null 板栗/null 板桥/null 板桩/null 板梁桥/null 板楼/null 板正/null 板油/null 板滞/null 板烟/null 板烤/null 板片/null 板牙/null 板状/null 板球/null 板瓦/null 板画/null 板皮/null 板眼/null 板着脸/null 板石/null 板砖/null 板纸/null 板结/null 板羽球/null 板胡/null 板脸/null 板蓝根/null 板规/null 板车/null 板铺/null 板锉/null 板门店/null 板门店停战村/null 板障/null 板面/null 板鸭/null 板鼓/null 极不/null 极不愉快/null 极不相称/null 极东/null 极为/null 极为庞大/null 极为重要/null 极乐/null 极乐世界/null 极乐鸟/null 极了/null 极亮/null 极低/null 极佳/null 极值/null 极像/null 极光/null 极其/null 极其重要/null 极冠/null 极冷/null 极出色/null 极刑/null 极力/null 极化/null 极北/null 极南/null 极厚/null 极受/null 极口/null 极右/null 极右分子/null 极右翼/null 极品/null 极困难/null 极圈/null 极在/null 极地/null 极地气象/null 极地狐/null 极坏/null 极坐标/null 极坐标系/null 极域/null 极多/null 极大/null 极大值/null 极大量/null 极好/null 极妙/null 极客/null 极小/null 极小量/null 极少/null 极少数/null 极少数人/null 极少量/null 极尽/null 极左/null 极差/null 极带/null 极广/null 极度/null 极弱/null 极强/null 极径/null 极微/null 极微小/null 极忙/null 极快/null 极快速/null 极性/null 极性键/null 极恶/null 极恶劣/null 极想/null 极想念/null 极抽象/null 极早/null 极易/null 极有/null 极有力/null 极有可能/null 极机密/null 极权/null 极权主义/null 极板/null 极核/null 极欲/null 极正确/null 极深/null 极深研几/null 极渴/null 极漂亮/null 极点/null 极烫/null 极痛/null 极瘦/null 极盛/null 极盛时期/null 极目/null 极目远望/null 极相似/null 极短/null 极硬/null 极神圣/null 极端/null 极端主义/null 极端分子/null 极简单/null 极累人/null 极细小/null 极美/null 极肥胖/null 极致/null 极薄/null 极蠢/null 极西/null 极角/null 极讨厌/null 极谱分析/null 极贵重/null 极超/null 极轴/null 极轻/null 极辣/null 极近/null 极远/null 极重/null 极重要/null 极量/null 极间电容/null 极限/null 极难/null 极需/null 极高/null 构上/null 构乱/null 构件/null 构兵/null 构化/null 构台/null 构图/null 构地/null 构块/null 构型/null 构建/null 构思/null 构怨连兵/null 构想/null 构想图/null 构成/null 构成者/null 构架/null 构筑/null 构筑物/null 构词/null 构词学/null 构词法/null 构词法意识/null 构造/null 构造上/null 构造地震/null 构造学/null 构造运动/null 构陷/null 枇杷/null 枇杷膏/null 枇杷门巷/null 枉劳/null 枉口拔舌/null 枉尺直寻/null 枉己正人/null 枉径/null 枉担虚名/null 枉攘/null 枉死/null 枉法/null 枉法徇私/null 枉然/null 枉用心机/null 枉突徙薪/null 枉费/null 枉费唇舌/null 枉费工夫/null 枉费心力/null 枉费心机/null 枉费心计/null 枉费日月/null 枉费时日/null 枉道事人/null 枉顾/null 枉驾/null 枋子/null 枋寮/null 枋寮乡/null 枋山/null 枋山乡/null 析义/null 析出/null 析取/null 析圭但爵/null 析律舞文/null 析律贰端/null 析毫剖厘/null 析法/null 析疑/null 析疑匡谬/null 析离/null 析缕分条/null 析骸易子/null 枕上/null 枕中鸿宝/null 枕冷衾寒/null 枕叶/null 枕块/null 枕垫/null 枕头/null 枕头夺/null 枕头套/null 枕头箱/null 枕头般/null 枕套/null 枕岩漱流/null 枕巾/null 枕席/null 枕席儿/null 枕心/null 枕戈坐甲/null 枕戈寝甲/null 枕戈尝胆/null 枕戈待敌/null 枕戈待旦/null 枕戈汗马/null 枕戈泣血/null 枕戈饮胆/null 枕木/null 枕梁/null 枕流漱石/null 枕状玄武岩/null 枕石漱流/null 枕芯/null 枕葄/null 枕藉/null 枕边/null 枕骨/null 林下/null 林下风气/null 林下风致/null 林下风范/null 林下高风/null 林业/null 林业厅/null 林业局/null 林业部/null 林业部门/null 林中/null 林丰正/null 林书豪/null 林产/null 林产化学/null 林产品/null 林克平大学/null 林兽/null 林内/null 林内乡/null 林农/null 林冠/null 林冲/null 林则徐/null 林副产品/null 林区/null 林卡/null 林县/null 林口/null 林口乡/null 林可霉素/null 林周/null 林园/null 林园乡/null 林地/null 林场/null 林型/null 林垦/null 林堡/null 林壑/null 林奈/null 林子/null 林学/null 林家翘/null 林州/null 林带/null 林彪/null 林德布拉德/null 林心如/null 林忆莲/null 林恢复/null 林旭/null 林木/null 林木分化/null 林村/null 林来疯/null 林林总总/null 林森/null 林檎/null 林海/null 林涛/null 林火/null 林甸/null 林相/null 林立/null 林纾/null 林肯/null 林肯郡/null 林色/null 林芝/null 林芝地区/null 林苑/null 林茨/null 林荫/null 林荫大道/null 林荫夹道/null 林荫径/null 林荫道/null 林莽/null 林薮/null 林西/null 林边/null 林边乡/null 林间/null 林阴/null 林阴大道/null 林雕/null 林雪平/null 林青霞/null 林黛玉/null 枘凿/null 枘圆凿方/null 枚举/null 枚乘/null 枚假/null 枚卜/null 果不其然/null 果为/null 果仁/null 果仁儿/null 果儿/null 果农/null 果决/null 果冻/null 果味/null 果味胶糖/null 果品/null 果啤/null 果园/null 果壳/null 果如其言/null 果如所料/null 果子/null 果子冻/null 果子狸/null 果子盐/null 果子酒/null 果子酱/null 果子露/null 果实/null 果实散播/null 果实累累/null 果岭/null 果心/null 果报/null 果播/null 果敢/null 果料/null 果料儿/null 果断/null 果是/null 果期/null 果木/null 果木园/null 果枝/null 果柄/null 果树/null 果树材/null 果核/null 果毅/null 果汁/null 果汁器/null 果汁机/null 果洛/null 果洛州/null 果洛藏族自治州/null 果渣/null 果焰糕点/null 果然/null 果然不出所料/null 果球/null 果皮/null 果盘/null 果真/null 果真如此/null 果穗/null 果类/null 果粉/null 果糖/null 果肉/null 果胶/null 果脯/null 果腹/null 果若/null 果菜/null 果蔬/null 果蔬酸酸乳/null 果虫/null 果蝇/null 果豆/null 果酒/null 果酱/null 果酸/null 果饵/null 果馅饼/null 枝丫/null 枝叶/null 枝叶扶疏/null 枝叶扶苏/null 枝城/null 枝城镇/null 枝多/null 枝头/null 枝子/null 枝干/null 枝形/null 枝捂/null 枝接/null 枝晶/null 枝杈/null 枝条/null 枝枒/null 枝枝节节/null 枝柯/null 枝桠/null 枝梧/null 枝江/null 枝状/null 枝繁/null 枝繁叶茂/null 枝节/null 枝节横生/null 枝蔓/null 枝解/null 枝词蔓语/null 枝附影从/null 枞木/null 枞树/null 枞阳/null 枢垣/null 枢密院/null 枢机/null 枢机主教/null 枢纽/null 枢要/null 枢轴/null 枣子/null 枣庄/null 枣强/null 枣树/null 枣椰/null 枣泥/null 枣红/null 枣阳/null 枨触/null 枪乌贼/null 枪伤/null 枪决/null 枪击/null 枪击案/null 枪刺/null 枪匠/null 枪匪/null 枪口/null 枪响了/null 枪声/null 枪套/null 枪子/null 枪子儿/null 枪尖/null 枪尖形/null 枪崩/null 枪弹/null 枪战/null 枪手/null 枪打出头鸟/null 枪托/null 枪把/null 枪把儿/null 枪支/null 枪替/null 枪术/null 枪机/null 枪杀/null 枪杆/null 枪杆儿/null 枪杆子/null 枪林/null 枪林弹雨/null 枪林箭雨/null 枪枝/null 枪枪/null 枪柄/null 枪栓/null 枪械/null 枪榴弹/null 枪毙/null 枪法/null 枪炮/null 枪炮齐鸣/null 枪版/null 枪眼/null 枪矛/null 枪种/null 枪筒/null 枪管/null 枪膛/null 枪衣/null 枪身/null 枪闩/null 枪靶/null 枫叶/null 枫木/null 枫杨/null 枫树/null 枫香木/null 枫香树/null 枭雄/null 枭首/null 枭首示众/null 枯井/null 枯体灰心/null 枯叶/null 枯叶蛾/null 枯坐/null 枯寂/null 枯干/null 枯形灰心/null 枯木/null 枯木再生/null 枯木朽株/null 枯木死灰/null 枯木生花/null 枯木逢春/null 枯朽/null 枯枝/null 枯枝再春/null 枯树/null 枯树开花/null 枯株朽木/null 枯槁/null 枯死/null 枯水/null 枯水位/null 枯水期/null 枯涩/null 枯燥/null 枯燥乏味/null 枯燥无味/null 枯瘦/null 枯窘/null 枯竭/null 枯肠/null 枯茗/null 枯草/null 枯草杆菌/null 枯草热/null 枯菱/null 枯萎/null 枯萎病/null 枯饼/null 枯骨/null 枯鱼之肆/null 枯鱼涸辙/null 枯鱼病鹤/null 枯鱼衔索/null 枯黄/null 枯黑/null 枳壳/null 枳实/null 枳机草/null 枵肠辘辘/null 枵腹从公/null 枵腹重趼/null 架上/null 架不住/null 架二郎腿/null 架于/null 架住/null 架势/null 架塔/null 架好/null 架子/null 架子猪/null 架子花/null 架子车/null 架开/null 架式/null 架托梁/null 架有/null 架构/null 架构师/null 架架/null 架桥/null 架次/null 架海擎天/null 架海金梁/null 架电/null 架空/null 架空索道/null 架站/null 架线/null 架设/null 架谎凿空/null 架豆/null 架走/null 架起/null 枷带锁抓/null 枷板/null 枷销/null 枷锁/null 枸杞/null 枸杞子/null 枸橘/null 枸橼/null 柄勺/null 柄国/null 柄子/null 柄政/null 柄权/null 柄梢/null 柄端/null 柄脚/null 柄臣/null 柊叶/null 柏举之战/null 柏乡/null 柏克莱/null 柏克郡/null 柏克里克千佛洞/null 柏崎/null 柏崎刈羽/null 柏崎市/null 柏悦/null 柏拉图/null 柏拉图哲学/null 柏木/null 柏林/null 柏林会议/null 柏林围墙/null 柏林墙/null 柏林工业大学/null 柏林战役/null 柏柏尔/null 柏树/null 柏油/null 柏油脚跟之州/null 柏油路/null 柏油马路/null 柏舟之节/null 柏舟之誓/null 柏节松操/null 柏蒂切利/null 柏辽兹/null 某一/null 某一个/null 某一地方/null 某一方面/null 某一时间/null 某个/null 某事/null 某些/null 某些人/null 某些地区/null 某些方面/null 某人/null 某件/null 某位/null 某军/null 某台/null 某君/null 某国/null 某地/null 某处/null 某大/null 某天/null 某女/null 某年/null 某日/null 某时/null 某月/null 某村/null 某某/null 某段/null 某物/null 某甲/null 某种/null 某种原因/null 某种意义/null 某种程度/null 某类/null 某部/null 某队/null 某项/null 柑子/null 柑桔/null 柑橘/null 柑橘园/null 柑橘酱/null 染上/null 染业/null 染丝之变/null 染剂/null 染化厂/null 染印/null 染印法/null 染厂/null 染发/null 染发剂/null 染坊/null 染工/null 染布/null 染得/null 染患/null 染成/null 染房/null 染手/null 染指/null 染指于鼎/null 染指垂涎/null 染料/null 染有/null 染毒/null 染污/null 染法/null 染疾/null 染病/null 染眉/null 染睫/null 染红/null 染织/null 染缸/null 染翰操纸/null 染色/null 染色体/null 染色体倍性/null 染色性/null 染色牢度/null 染色质/null 染花/null 染血/null 染遍/null 染风习俗/null 柔佛/null 柔佛州/null 柔佛海峡/null 柔光/null 柔和/null 柔声下气/null 柔如刚吐/null 柔姿纱/null 柔媚/null 柔嫩/null 柔弱/null 柔心弱骨/null 柔性/null 柔情/null 柔情似水/null 柔情侠骨/null 柔情媚态/null 柔情密意/null 柔情绰态/null 柔情脉脉/null 柔懦寡断/null 柔曼/null 柔术/null 柔板/null 柔枝嫩叶/null 柔枝嫩条/null 柔毛/null 柔毛状/null 柔滑/null 柔细/null 柔美/null 柔肠寸断/null 柔肠百结/null 柔肠百转/null 柔肤水/null 柔能克刚/null 柔能制刚/null 柔色/null 柔茹寡断/null 柔荑花序/null 柔软/null 柔软体操/null 柔软剂/null 柔软操/null 柔远能迩/null 柔道/null 柔韧/null 柔韧性/null 柔顺/null 柘丝/null 柘城/null 柘弓/null 柘弹/null 柘树/null 柘榴/null 柘榴石/null 柘浆/null 柘砚/null 柘荣/null 柘蚕/null 柘袍/null 柘黄/null 柚子/null 柚木/null 柜上/null 柜台/null 柜子/null 柜房/null 柜架/null 柜柳/null 柜橱/null 柜组/null 柜船/null 柞丝/null 柞丝绸/null 柞栎/null 柞水/null 柞绸/null 柞蚕/null 柞蚕丝/null 柠檬/null 柠檬树/null 柠檬桉/null 柠檬水/null 柠檬汁/null 柠檬浮霉状菌/null 柠檬片/null 柠檬色/null 柠檬茶/null 柠檬草/null 柠檬酸/null 柠檬酸循环/null 柠檬鸡/null 查价/null 查克・诺里斯/null 查克拉/null 查克瑞/null 查兑者/null 查出/null 查到/null 查办/null 查加斯病/null 查勘/null 查号台/null 查哨/null 查处/null 查夜/null 查字/null 查字法/null 查完/null 查定/null 查实/null 查对/null 查寻/null 查封/null 查尔斯/null 查尔斯・格雷/null 查尔斯・狄更斯/null 查尔斯顿/null 查帐/null 查帐员/null 查戈斯群岛/null 查房/null 查找/null 查抄/null 查报/null 查拳/null 查探/null 查收/null 查无实据/null 查无此人/null 查明/null 查明具报/null 查普曼/null 查查/null 查核/null 查案/null 查清/null 查点/null 查照/null 查理大帝/null 查理定律/null 查理帝国/null 查看/null 查票/null 查票员/null 查禁/null 查私/null 查税/null 查究/null 查缉/null 查考/null 查获/null 查补/null 查表/null 查觉/null 查讫/null 查访/null 查证/null 查询/null 查询专线/null 查询电话/null 查调/null 查账/null 查过/null 查退/null 查透/null 查铺/null 查错/null 查问/null 查阅/null 查韦斯/null 查验/null 柩台/null 柩衣/null 柩车/null 柬吴哥王朝/null 柬国/null 柬埔寨/null 柬埔寨人民党/null 柬帖/null 柯南・道尔/null 柯坪/null 柯城/null 柯城区/null 柯密/null 柯尔克孜/null 柯尔克孜语/null 柯林/null 柯林斯/null 柯棣华/null 柯沙奇病毒/null 柯萨奇病毒/null 柯西/null 柯达/null 柯邵忞/null 柰子/null 柱体/null 柱型图/null 柱塞/null 柱头/null 柱子/null 柱廊/null 柱式/null 柱形/null 柱形图/null 柱梁/null 柱状/null 柱石/null 柱身/null 柱面/null 柱顶/null 柳丁/null 柳丁氨醇/null 柳丝/null 柳体/null 柳公权/null 柳北/null 柳北区/null 柳南/null 柳南区/null 柳叶刀/null 柳叶眉/null 柳啼花怨/null 柳园/null 柳园镇/null 柳圣花神/null 柳城/null 柳城县/null 柳媚花明/null 柳子戏/null 柳安/null 柳宗元/null 柳州/null 柳州地区/null 柳巷花街/null 柳影花阴/null 柳户花门/null 柳拐子病/null 柳暗花明/null 柳暗花明又一村/null 柳木/null 柳杉/null 柳杞/null 柳条/null 柳条做/null 柳条工/null 柳条帽/null 柳条沟事变/null 柳条编/null 柳条边/null 柳林/null 柳枝/null 柳树/null 柳橙/null 柳橙汁/null 柳毅传/null 柳永/null 柳江/null 柳河/null 柳烟花雾/null 柳琴/null 柳眉/null 柳眉倒竖/null 柳眉剔竖/null 柳眉踢竖/null 柳絮/null 柳绿桃红/null 柳绿花红/null 柳罐/null 柳腰/null 柳莺/null 柳营/null 柳营乡/null 柳陌花巷/null 柳陌花街/null 柳陌花衢/null 柳青/null 柴可夫斯基/null 柴堆/null 柴屋/null 柴扉/null 柴把/null 柴毁灭性/null 柴毁骨立/null 柴油/null 柴油发动机/null 柴油机/null 柴火/null 柴电机车/null 柴禾/null 柴禾妞/null 柴科夫斯基/null 柴窑/null 柴立不阿/null 柴米/null 柴米油盐/null 柴米油盐酱醋茶/null 柴胡/null 柴草/null 柴薪/null 柴达木/null 柴达木盆地/null 柴门/null 柴门小户/null 柴鸡/null 柽柳/null 柿子/null 柿子椒/null 柿霜/null 柿饼/null 栀子/null 栀子花/null 栅子/null 栅条/null 栅极/null 栅栏/null 栅格/null 栅篱/null 栅门/null 标书/null 标价/null 标会/null 标兵/null 标准/null 标准亩/null 标准以下/null 标准件/null 标准像/null 标准公顷/null 标准化/null 标准单位/null 标准台/null 标准唱片/null 标准国语/null 标准大气压/null 标准尺寸/null 标准工资/null 标准差/null 标准时/null 标准时区/null 标准时间/null 标准普尔/null 标准杆/null 标准框/null 标准模型/null 标准溶液/null 标准状况/null 标准状态/null 标准电阻/null 标准组织/null 标准规/null 标准规格/null 标准语/null 标准间/null 标准音/null 标出/null 标卖/null 标号/null 标同伐异/null 标名/null 标售/null 标器/null 标图/null 标图器/null 标地/null 标定/null 标尺/null 标帜/null 标底/null 标度/null 标引/null 标志/null 标志着/null 标志符/null 标新取异/null 标新立异/null 标新竞异/null 标新领导/null 标新领异/null 标明/null 标普/null 标有/null 标本/null 标本虫/null 标杆/null 标枪/null 标架/null 标柱/null 标格/null 标桩/null 标榜/null 标注/null 标灯/null 标点/null 标点符号/null 标牌/null 标用/null 标界/null 标的/null 标目/null 标砖/null 标示/null 标示符/null 标称/null 标称核武器/null 标竿/null 标签/null 标箱/null 标线/null 标绘/null 标统/null 标致/null 标记/null 标记原子/null 标识/null 标识器/null 标识符/null 标识语/null 标语/null 标语牌/null 标购/null 标重/null 标量/null 标金/null 标钢/null 标键/null 标间/null 标音/null 标音法/null 标题/null 标题为/null 标题之下/null 标题字/null 标题新闻/null 标题栏/null 标题语/null 标题音乐/null 标高/null 栈主/null 栈单/null 栈地址/null 栈存储器/null 栈山航海/null 栈径/null 栈恋/null 栈房/null 栈板/null 栈架/null 栈桥/null 栈桥式码头/null 栈租/null 栈豆/null 栈车/null 栈道/null 栈阁/null 栈顶/null 栉比/null 栉比鳞差/null 栉比鳞次/null 栉水母/null 栉风沐雨/null 栋号/null 栋墚/null 墚地/null 栋折榱崩/null 栋梁/null 栋梁之材/null 栎树/null 栏中/null 栏位/null 栏内/null 栏圈/null 栏块/null 栏外/null 栏干/null 栏式/null 栏把/null 栏数/null 栏杆/null 栏板/null 栏架/null 栏栅/null 栏目/null 树上/null 树上开花/null 树丛/null 树串儿/null 树人/null 树倒/null 树倒猢狲散/null 树冠/null 树凉儿/null 树化玉/null 树叶/null 树墩/null 树大招风/null 树大根深/null 树孔/null 树带/null 树干/null 树影/null 树德务滋/null 树心/null 树懒/null 树挂/null 树敌/null 树木/null 树木学/null 树木状/null 树杈/null 树林/null 树林市/null 树枝/null 树枝状晶/null 树栖/null 树根/null 树桩/null 树梢/null 树欲息而风不停/null 树欲静而风不宁/null 树欲静而风不止/null 树汁/null 树汁多/null 树洞/null 树液/null 树熊/null 树状/null 树状物/null 树状细胞/null 树獭/null 树皮/null 树皮布/null 树碑/null 树碑立传/null 树种/null 树稍/null 树穴/null 树突/null 树突状细胞/null 树立/null 树篱/null 树结/null 树胶/null 树胶质/null 树脂/null 树脂整理/null 树脂般/null 树脂酚/null 树节/null 树节点/null 树苗/null 树荫/null 树荫处/null 树莓/null 树葬/null 树薯粉/null 树蛙/null 树蜂/null 树行子/null 树袋熊/null 树轮/null 树阴/null 树阴凉儿/null 树高千丈落叶归根/null 树高招风/null 栓上/null 栓住/null 栓剂/null 栓塞/null 栓塞物/null 栓子/null 栓牢/null 栓皮/null 栓皮栎/null 栓绳/null 栓锁带/null 栖于/null 栖住/null 栖居/null 栖息/null 栖息于/null 栖息地/null 栖息鸟/null 栖所/null 栖木/null 栖枝/null 栖栖/null 栖止/null 栖身/null 栖霞/null 栖霞区/null 栗子/null 栗暴/null 栗树/null 栗栗危惧/null 栗然/null 栗粒状/null 栗色/null 栗钙土/null 栗鼠/null 栝楼/null 校产/null 校党委/null 校内/null 校准/null 校刊/null 校办/null 校办工厂/null 校务/null 校勘/null 校勘学/null 校区/null 校医/null 校友/null 校友会/null 校史/null 校员/null 校团/null 校团委/null 校园/null 校地/null 校场/null 校址/null 校外/null 校外活动/null 校官/null 校定/null 校对/null 校对人/null 校对员/null 校对室/null 校对机/null 校对者/null 校尉/null 校属/null 校工/null 校庆/null 校徽/null 校报/null 校改/null 校方/null 校旗/null 校服/null 校本/null 校样/null 校检/null 校歌/null 校正/null 校正子/null 校正者/null 校点/null 校监/null 校稿/null 校站/null 校级/null 校编/null 校舍/null 校花/null 校草/null 校董/null 校规/null 校警/null 校订/null 校订本/null 校训/null 校车/null 校量/null 校长/null 校门/null 校间/null 校阅/null 校队/null 校际/null 校雠/null 校音/null 校风/null 校验/null 校验码/null 栩栩/null 栩栩如生/null 栩栩生辉/null 株守/null 株式/null 株式会社/null 株治/null 株洲/null 株距/null 株连/null 株选/null 栲属/null 栲栳/null 栲胶/null 栴檀/null 样书/null 样件/null 样例/null 样儿/null 样册/null 样单/null 样品/null 样品卡/null 样多/null 样子/null 样子好/null 样带/null 样式/null 样张/null 样本/null 样机/null 样条函数/null 样板/null 样板戏/null 样样/null 样款/null 样片/null 样稿/null 样窗/null 样貌/null 样貌端正/null 核不扩散/null 核事件/null 核交/null 核人/null 核仁/null 核价/null 核体/null 核僵持/null 核儿/null 核入/null 核军备/null 核冬天/null 核准/null 核减/null 核出口控制/null 核分裂/null 核力/null 核力量/null 核办/null 核动力/null 核动力航空母舰/null 核动力船/null 核势/null 核原料/null 核反击/null 核反应/null 核反应堆/null 核发/null 核发电/null 核发电厂/null 核变形/null 核合成/null 核后时代/null 核员/null 核四级共振/null 核国家/null 核地雷/null 核均势/null 核垄断/null 核型/null 核增/null 核外电子/null 核大国/null 核威/null 核威慑/null 核威慑力量/null 核威慑政策/null 核威胁/null 核子/null 核子力/null 核子医学/null 核子反应/null 核子武器/null 核子能/null 核安全/null 核定/null 核实/null 核对/null 核对峙/null 核对帐目/null 核导弹/null 核小体/null 核屏蔽/null 核工业/null 核工业部/null 核工程/null 核废物/null 核弹/null 核弹头/null 核当量/null 核心/null 核心作用/null 核心家庭/null 核心机密/null 核情报/null 核战/null 核战争/null 核战斗部/null 核战略/null 核扩散/null 核批/null 核技/null 核技术/null 核报/null 核推进/null 核收/null 核果/null 核查/null 核查小组/null 核柱/null 核桃/null 核桃仁/null 核桃虫/null 核模型/null 核武/null 核武器/null 核武库/null 核潜艇/null 核热/null 核燃料/null 核燃料后处理/null 核燃料燃耗/null 核爆/null 核爆炸/null 核爆炸装置/null 核物理/null 核球/null 核理论/null 核电/null 核电厂/null 核电磁脉冲/null 核电站/null 核电荷数/null 核相互作用/null 核碱基/null 核磁/null 核磁共振/null 核签/null 核算/null 核算单位/null 核糖/null 核糖体/null 核糖核酸/null 核素/null 核结构/null 核给/null 核聚变/null 核肉/null 核能/null 核能源/null 核膜/null 核自旋/null 核苷/null 核苷酸/null 核蛋白/null 核裁/null 核裁军/null 核裂变/null 核装置/null 核计/null 核讹诈/null 核讹诈政策/null 核设施/null 核证模型/null 核试/null 核试爆/null 核试验/null 核试验场/null 核试验堆/null 核谈判/null 核资/null 核转变/null 核轰炸/null 核轰炸机/null 核辐射/null 核连锁反应/null 核酮糖/null 核酸/null 核酸糖/null 核酸酶/null 核销/null 核门槛/null 核问题/null 核防御/null 核防护/null 核陀螺/null 核验/null 核黄素/null 根于/null 根儿/null 根冠/null 根号/null 根基/null 根壮叶茂/null 根外施肥/null 根子/null 根尖/null 根巧枝枯/null 根底/null 根式/null 根拔/null 根指数/null 根据/null 根据以上情况/null 根据具体情况/null 根据地/null 根据规定/null 根据需要和可能/null 根接/null 根插/null 根本/null 根本上/null 根本性/null 根本法/null 根柢/null 根植/null 根毛/null 根河/null 根治/null 根深/null 根深叶茂/null 根深土长/null 根深蒂固/null 根源/null 根特/null 根状/null 根状茎/null 根状部/null 根由/null 根瘤/null 根瘤菌/null 根究/null 根系/null 根绝/null 根脚/null 根芽/null 根苗/null 根茎/null 根茬/null 根菜类蔬菜/null 根西岛/null 根词/null 根部/null 根除/null 根音/null 格于成例/null 格令/null 格但斯克/null 格儿/null 格兰氏阴性/null 格兰特/null 格兰芬多/null 格列高利历/null 格力/null 格勒/null 格勒诺布尔/null 格古通今/null 格呢/null 格外/null 格子/null 格子呢/null 格子棉布/null 格子窗/null 格子花呢/null 格尔夫波特/null 格尔木/null 格局/null 格式/null 格式上/null 格式化/null 格式塔/null 格式塔疗法/null 格式栏/null 格式纸/null 格形/null 格律/null 格律诗/null 格恩西岛/null 格拉/null 格拉斯哥/null 格拉汉姆/null 格拉纳达/null 格拉茨/null 格斗/null 格斯塔/null 格木/null 格杀不论/null 格杀勿论/null 格林/null 格林多/null 格林奈尔大学/null 格林威治/null 格林威治时间/null 格林威治村/null 格林威治标准时间/null 格林尼治/null 格林尼治本初子午线/null 格林尼治标准时间/null 格林斯班/null 格林纳达/null 格格/null 格格不入/null 格格笑/null 格洛斯特/null 格洛斯特郡/null 格洛纳斯/null 格涅沙/null 格物/null 格物穷理/null 格物致知/null 格状/null 格筛/null 格纸/null 格线/null 格网/null 格罗宁根/null 格致/null 格莱美奖/null 格萨尔/null 格言/null 格调/null 格里历/null 格里姆斯塔/null 格陵兰/null 格陵兰岛/null 格雷/null 格雷伯爵茶/null 格雷氏解剖学/null 格高意远/null 格鲁吉亚/null 格鲁吉亚人/null 格鲁派/null 栽体/null 栽作/null 栽倒/null 栽培/null 栽培技术/null 栽培植物/null 栽培物/null 栽培者/null 栽子/null 栽树/null 栽植/null 栽法/null 栽种/null 栽种机/null 栽秧/null 栽绒/null 栽脏/null 栽花/null 栽赃/null 栽跟头/null 栽进/null 栾城/null 栾川/null 桀敖不驯/null 桀犬吠尧/null 桀王/null 桀纣/null 桀贪骜诈/null 桀逆放恣/null 桀骜/null 桀骜不恭/null 桀骜不逊/null 桀骜不驯/null 桀骜难驯/null 桀黠/null 桁杨/null 桁杨刀锯/null 桁架/null 桁梁/null 桂东/null 桂冠/null 桂剧/null 桂北越城岭/null 桂圆/null 桂子兰孙/null 桂子飘香/null 桂宫柏寝/null 桂平/null 桂月/null 桂林/null 桂林一枝/null 桂林医学院/null 桂林地区/null 桂枝/null 桂树/null 桂格/null 桂皮/null 桂系军阀/null 桂纶镁/null 桂芝/null 桂花/null 桂阳/null 桂鱼/null 桃之夭夭/null 桃仁/null 桃园/null 桃园三结义/null 桃园结义/null 桃城/null 桃城区/null 桃夹/null 桃子/null 桃山/null 桃山区/null 桃心/null 桃木/null 桃李/null 桃李不言下自成蹊/null 桃李争妍/null 桃李争辉/null 桃李无言下自成蹊/null 桃李满天下/null 桃李遍天下/null 桃李门墙/null 桃来李答/null 桃柳争妍/null 桃树/null 桃核/null 桃汛/null 桃江/null 桃源/null 桃源乡/null 桃符/null 桃红/null 桃红柳绿/null 桃红色/null 桃羞杏让/null 桃胶/null 桃脯/null 桃腮杏脸/null 桃色/null 桃色新闻/null 桃色案件/null 桃色纠纷/null 桃花/null 桃花人面/null 桃花心木/null 桃花汛/null 桃花源/null 桃花薄命/null 桃花讯/null 桃花运/null 桃金娘/null 桃金娘科/null 桄子/null 桄榔/null 桅帆/null 桅木/null 桅杆/null 桅樯/null 桅灯/null 桅竿/null 桅船/null 桅顶/null 框儿/null 框内/null 框图/null 框子/null 框定/null 框架/null 框格/null 框框/null 框死/null 框缘/null 框项/null 案书/null 案人/null 案件/null 案例/null 案例法/null 案兵束甲/null 案册/null 案卷/null 案发/null 案发地点/null 案头/null 案子/null 案底/null 案情/null 案文/null 案板/null 案桌/null 案牍/null 案犯/null 案由/null 案甲休兵/null 案目/null 案秤/null 案称/null 案证/null 案诗/null 案语/null 案首/null 案验/null 桉叶油/null 桉树/null 桉油/null 桌上/null 桌上型/null 桌上型电脑/null 桌下/null 桌儿/null 桌别林/null 桌前/null 桌子/null 桌巾/null 桌布/null 桌架/null 桌案/null 桌椅/null 桌椅板凳/null 桌游/null 桌灯/null 桌球/null 桌脚/null 桌边/null 桌面/null 桌面儿/null 桌面儿上/null 桌面系统/null 桎梏/null 桐乡/null 桐人/null 桐城/null 桐城派/null 桐子/null 桐庐/null 桐木偶/null 桐柏/null 桐柏山/null 桐梓/null 桐油/null 桐油树/null 桑中之约/null 桑内斯/null 桑叶/null 桑园/null 桑地诺民族解放阵线/null 桑坦德/null 桑塔纳/null 桑寄生/null 桑巴/null 桑巴舞/null 桑帕约/null 桑弧蓬矢/null 桑德尔福德/null 桑德拉/null 桑托里尼岛/null 桑拿/null 桑日/null 桑枢瓮牖/null 桑树/null 桑梓/null 桑植/null 桑椹/null 桑榆/null 桑榆暮影/null 桑榆暮景/null 桑榆末景/null 桑海/null 桑田/null 桑白皮/null 桑皮纸/null 桑科/null 桑给巴尔/null 桑耶/null 桑葚/null 桑葚儿/null 桑蚕/null 桑象虫/null 桑那/null 桑间濮上/null 桓仁/null 桓仁县/null 桓台/null 桓桓/null 桓玄/null 桔子/null 桔树/null 桔梗/null 桔槔/null 桔汁/null 桔红/null 桔络/null 桔色/null 桔饼/null 桔黄/null 桠杈/null 桠枫/null 桡动脉/null 桡骨/null 桢干/null 档儿/null 档册/null 档卷/null 档口/null 档子/null 档期/null 档板/null 档案/null 档案传输协定/null 档案分配区/null 档案夹/null 档案学/null 档案室/null 档案局/null 档案属性/null 档案建立/null 档案总管/null 档案执行/null 档案服务/null 档案资料/null 档案转送/null 档案转送存取及管理/null 档案馆/null 档次/null 档距/null 桤木/null 桤树/null 桥上/null 桥下/null 桥东/null 桥东区/null 桥台/null 桥堍/null 桥塔/null 桥墩/null 桥头/null 桥头乡/null 桥头堡/null 桥孔/null 桥式起重机/null 桥形/null 桥接/null 桥接器/null 桥本/null 桥本龙太郎/null 桥架/null 桥栏/null 桥桩/null 桥梁/null 桥洞/null 桥涵/null 桥牌/null 桥礅/null 桥粱/null 桥西/null 桥西区/null 桥身/null 桥轴/null 桥那边/null 桥面/null 桦南/null 桦川/null 桦木/null 桦木科/null 桦林/null 桦树/null 桦甸/null 桨叶/null 桨形/null 桨手/null 桩基/null 桩子/null 桩构栈道/null 桫椤/null 桴鼓相应/null 桶内/null 桶口/null 桶孔/null 桶形/null 桶槽/null 桶状/null 桶盖/null 桶装/null 桶里射鱼/null 梁上/null 梁上君子/null 梁书/null 梁启超/null 梁唐晋汉周书/null 梁园/null 梁园区/null 梁子湖/null 梁子湖区/null 梁山/null 梁山伯与祝英台/null 梁山市/null 梁平/null 梁朝/null 梁木/null 梁架/null 梁柱/null 梁河/null 梁湘/null 梁漱溟/null 梁祝/null 梁赞/null 梁辰鱼/null 梁静茹/null 梁龙/null 梃子/null 梅兰/null 梅兰芳/null 梅列/null 梅列区/null 梅园/null 梅塞德斯奔驰/null 梅子/null 梅山/null 梅山乡/null 梅州/null 梅德韦杰夫/null 梅斯/null 梅斯梅尔/null 梅林/null 梅树/null 梅核气/null 梅森/null 梅森素数/null 梅毒/null 梅氏/null 梅氏腺/null 梅江/null 梅江区/null 梅河口/null 梅洛/null 梅派/null 梅瑟/null 梅的/null 梅童鱼/null 梅纳德/null 梅花/null 梅花大鼓/null 梅花形/null 梅花拳/null 梅花鹿/null 梅萨林/null 梅西叶/null 梅西叶星表/null 梅西耶/null 梅西耶星表/null 梅里亚姆・韦伯斯特/null 梅里斯/null 梅里斯区/null 梅里斯达斡尔族区/null 梅里美/null 梅里雪山/null 梅雨/null 梆子/null 梆子腔/null 梆梆/null 梓官/null 梓官乡/null 梓潼/null 梓童/null 梓里/null 梗塞/null 梗概/null 梗死/null 梗犬/null 梗直/null 梗米/null 梗阻/null 梢头/null 梢孔/null 梢部/null 梣树/null 梦中/null 梦中人/null 梦中说梦/null 梦乡/null 梦似/null 梦兆/null 梦兆熊罴/null 梦到/null 梦劳魂想/null 梦呓/null 梦呓者/null 梦境/null 梦寐/null 梦寐以求/null 梦幻/null 梦幻泡影/null 梦幻组合/null 梦幻般/null 梦想/null 梦想不到/null 梦想家/null 梦断魂劳/null 梦断魂消/null 梦景/null 梦梦/null 梦游/null 梦游症/null 梦游者/null 梦熊之喜/null 梦熟黄梁/null 梦神/null 梦笔生花/null 梦罗园/null 梦行症/null 梦行者/null 梦见/null 梦觉黄梁/null 梦话/null 梦语/null 梦遗/null 梦里/null 梦里南柯/null 梦里蝴蝶/null 梦魂颠倒/null 梦魇/null 梦魔/null 梧州/null 梧州地区/null 梧栖/null 梧栖镇/null 梧桐/null 梧桐木/null 梧桐科/null 梧鼠之技/null 梨俱吠陀/null 梨园/null 梨园子弟/null 梨园弟子/null 梨园戏/null 梨子/null 梨属/null 梨形/null 梨果/null 梨树/null 梨树区/null 梨狗/null 梨膏/null 梨花/null 梨花大鼓/null 梨颊微涡/null 梭子/null 梭子蟹/null 梭子鱼/null 梭巡/null 梭标/null 梭梭/null 梭织/null 梭罗树/null 梭镖/null 梭鱼/null 梯也尔/null 梯子/null 梯山航海/null 梯己/null 梯度/null 梯度回波/null 梯式/null 梯式配股/null 梯形/null 梯恩梯/null 梯恩梯当量/null 梯板/null 梯架/null 梯次/null 梯次配备/null 梯次队形/null 梯河/null 梯状/null 梯田/null 梯级/null 梯级开发/null 梯绳/null 梯队/null 梯队式/null 梯阶式/null 械工/null 械库/null 械斗/null 械系/null 梳刷/null 梳头/null 梳头发/null 梳妆/null 梳妆台/null 梳妆室/null 梳子/null 梳成/null 梳拢/null 梳棉/null 梳毛/null 梳洗/null 梳理/null 梳篦/null 梳镜/null 梵书/null 梵册贝叶/null 梵刹/null 梵呗/null 梵哑铃/null 梵天/null 梵帝冈/null 梵教/null 梵文/null 梵汉对音/null 梵烧/null 梵蒂冈/null 梵蒂冈城/null 梵语/null 梵谛冈/null 梼杌/null 梿枷/null 检举/null 检举人/null 检修/null 检像镜/null 检具/null 检出/null 检印/null 检发/null 检场/null 检字/null 检字法/null 检字表/null 检定/null 检审/null 检察/null 检察员/null 检察学/null 检察官/null 检察机关/null 检察监督/null 检察长/null 检察院/null 检尘/null 检尸/null 检录/null 检控/null 检控官/null 检控方/null 检方/null 检束/null 检查/null 检查人/null 检查人员/null 检查员/null 检查哨/null 检查团/null 检查官/null 检查点/null 检查站/null 检查组/null 检查者/null 检查表/null 检校/null 检毒盒/null 检毒箱/null 检波/null 检波器/null 检流计/null 检测/null 检测仪/null 检测器/null 检漏/null 检点/null 检电/null 检疫/null 检疫所/null 检眼镜/null 检票/null 检票员/null 检索/null 检索语言/null 检视/null 检视镜/null 检讨/null 检证/null 检证程序/null 检错/null 检阅/null 检阅使/null 检阅台/null 检阅官/null 检附/null 检音器/null 检音计/null 检验/null 检验人/null 检验医学/null 检验员/null 检验法/null 棂床/null 棉丝/null 棉兰/null 棉兰老岛/null 棉农/null 棉制/null 棉区/null 棉卷/null 棉厂/null 棉垫/null 棉套/null 棉布/null 棉帽/null 棉束/null 棉条/null 棉枯萎病/null 棉树/null 棉桃/null 棉棒/null 棉毛/null 棉毛衫/null 棉毛裤/null 棉毯/null 棉火药/null 棉猴儿/null 棉球/null 棉瓦/null 棉田/null 棉白糖/null 棉签/null 棉籽/null 棉絮/null 棉红蜘蛛/null 棉红铃虫/null 棉纱/null 棉纸/null 棉纺/null 棉纺厂/null 棉纺织/null 棉纺织厂/null 棉线/null 棉织/null 棉织品/null 棉绒/null 棉缎/null 棉胎/null 棉花/null 棉花套子/null 棉花拳击/null 棉花棒/null 棉花糖/null 棉花绒/null 棉花胎/null 棉花蛆/null 棉药签/null 棉蚜/null 棉衣/null 棉袄/null 棉袍子/null 棉被/null 棉裤/null 棉铃/null 棉铃虫/null 棉麻/null 棉黄萎病/null 棋具/null 棋品/null 棋圣/null 棋坛/null 棋坛新秀/null 棋士/null 棋子/null 棋局/null 棋布星罗/null 棋战/null 棋手/null 棋格状/null 棋法/null 棋王/null 棋盘/null 棋盘格/null 棋社/null 棋类/null 棋艺/null 棋谱/null 棋赛/null 棋车/null 棋迷/null 棋逢对手/null 棋高/null 棍儿/null 棍儿茶/null 棍子/null 棍杖/null 棍棒/null 棒了/null 棒儿香/null 棒冰/null 棒喝/null 棒坛/null 棒头/null 棒子/null 棒子面/null 棒子面儿/null 棒打/null 棒旋星系/null 棒杀/null 棒材/null 棒极了/null 棒棒糖/null 棒槌/null 棒殴/null 棒状/null 棒球/null 棒球场/null 棒球运动/null 棒球迷/null 棒硫/null 棒磨机/null 棒糖/null 棒约翰/null 棕丝/null 棕刷/null 棕垫/null 棕头鸥/null 棕枝主日/null 棕枝全日/null 棕树/null 棕榈/null 棕榈属/null 棕榈树/null 棕榈油/null 棕榈科/null 棕毛/null 棕毯/null 棕熊/null 棕矮星/null 棕簑猫/null 棕红/null 棕绳/null 棕绷/null 棕编/null 棕缚/null 棕色/null 棕蓑猫/null 棕闾/null 棕黄/null 棕黑/null 棘手/null 棘枣/null 棘楚/null 棘爪/null 棘皮动物/null 棘轮/null 棘鼻青岛龙/null 棚内/null 棚圈/null 棚外/null 棚子/null 棚屋/null 棚布/null 棚式床/null 棚户/null 棚架/null 棚架格子/null 棚车/null 棚里/null 棚顶/null 棠树/null 棠梨/null 棠棣/null 棣棠/null 棣鄂/null 森・喜朗/null 森严/null 森严壁垒/null 森巴舞/null 森林/null 森林培育/null 森林学/null 森林法/null 森林脑炎/null 森林覆盖率/null 森森/null 森海塞尔/null 森然/null 森罗/null 森罗万象/null 森罗宝殿/null 森罗殿/null 森美兰/null 棱住体/null 棱台/null 棱子/null 棱柱/null 棱纹/null 棱线/null 棱缝/null 棱角/null 棱锥/null 棱锥台/null 棱镜/null 棵儿/null 棵子/null 棵树/null 棵粒/null 棺木/null 棺材/null 棺椁/null 棻芳/null 椅上/null 椅凳/null 椅垫/null 椅套/null 椅子/null 椅披/null 椅背/null 椆水/null 椆苕/null 椋鸟/null 植体/null 植保/null 植党营私/null 植入/null 植入式广告/null 植入物/null 植土/null 植林/null 植树/null 植树造林/null 植株/null 植根/null 植根于/null 植民/null 植物/null 植物人/null 植物人状态/null 植物保护/null 植物园/null 植物学/null 植物学家/null 植物性/null 植物性神经/null 植物油/null 植物状态/null 植物界/null 植物碱/null 植物纤维/null 植物群/null 植物群落/null 植物脂肪/null 植物茎/null 植皮/null 植皮术/null 植苗/null 植虫学/null 植虫类/null 植被/null 椎体/null 椎心泣血/null 椎牛飨士/null 椎轮大辂/null 椎间盘/null 椎骨/null 椐椐/null 椒房/null 椒江/null 椒江区/null 椒油/null 椒盐/null 椭园/null 椭圆/null 椭圆体/null 椭圆函数/null 椭圆形/null 椭圆形办公室/null 椭圆曲线/null 椭圆机/null 椭圆积分/null 椭球/null 椰丝/null 椰壳/null 椰壳纤维/null 椰奶/null 椰子/null 椰子汁/null 椰子酒/null 椰揄/null 椰林/null 椰枣/null 椰油/null 椰浆/null 椰菜/null 椰菜花/null 椴木/null 椴杨/null 椴树/null 椽子/null 椿材/null 椿树/null 椿萱开貌/null 椿蚕/null 椿象/null 楔子/null 楔形/null 楔形文字/null 楔形物/null 楔状/null 楚人/null 楚剧/null 楚囚相对/null 楚国/null 楚地/null 楚尾吴头/null 楚州/null 楚州区/null 楚庄王/null 楚弓楚得/null 楚怀王/null 楚暴诛乱/null 楚暴静乱/null 楚材晋用/null 楚楚/null 楚楚不凡/null 楚楚动人/null 楚楚可怜/null 楚歌/null 楚汉战争/null 楚河汉界/null 楚王/null 楚辞/null 楚雄/null 楚雄州/null 楚雄彝族自治州/null 楚馆秦楼/null 楞严/null 楞了/null 楞住/null 楞场/null 楞头/null 楞子眼/null 楞楞/null 楞脑/null 楞迦/null 楞迦岛/null 楠木/null 楠格哈尔省/null 楠梓/null 楠梓区/null 楠竹/null 楠西/null 楠西乡/null 楣梁/null 楦子/null 楮纸/null 楮遂良/null 楷书/null 楷体/null 楷字/null 楷模/null 楸树/null 楹联/null 楼上/null 楼下/null 楼主/null 楼举百捷/null 楼亭/null 楼兰/null 楼内/null 楼前/null 楼区/null 楼厢/null 楼去/null 楼台/null 楼台亭阁/null 楼号/null 楼基/null 楼堂/null 楼堂馆所/null 楼外/null 楼子/null 楼宇/null 楼层/null 楼市/null 楼库/null 楼座/null 楼房/null 楼板/null 楼梯/null 楼梯口/null 楼梯台/null 楼梯间/null 楼橹/null 楼盖/null 楼盘/null 楼群/null 楼船/null 楼道/null 楼里/null 楼门/null 楼阁/null 楼阁塔/null 楼面/null 楼顶/null 概不/null 概不例外/null 概予/null 概入/null 概况/null 概则/null 概叙/null 概叹/null 概图/null 概型/null 概型理论/null 概形/null 概念/null 概念上/null 概念依存模型/null 概念化/null 概念性/null 概念论/null 概念驱动加工/null 概括/null 概括化/null 概括性/null 概数/null 概测法/null 概率/null 概率和数理统计/null 概率论/null 概生/null 概略/null 概称/null 概算/null 概而/null 概莫能外/null 概要/null 概见一般/null 概观/null 概览/null 概论/null 概说/null 概貌/null 概述/null 榄角/null 榆中/null 榆叶梅/null 榆暝豆重/null 榆木/null 榆木脑壳/null 榆林/null 榆林地区/null 榆树/null 榆次/null 榆次区/null 榆社/null 榆罔/null 榆荚/null 榆钱/null 榆阳/null 榆阳区/null 榈树/null 榉木/null 榔头/null 榔榆/null 榔槺/null 榕城区/null 榕树/null 榕江/null 榛仁/null 榛仁儿/null 榛子/null 榛实/null 榛果/null 榛栗/null 榛榛/null 榛狉未改/null 榛色/null 榛芜/null 榛莽/null 榛薮/null 榛鸡/null 榜上无名/null 榜上有名/null 榜人/null 榜文/null 榜样/null 榜眼/null 榜笞/null 榜葛剌/null 榜首/null 榧子/null 榨出/null 榨取/null 榨寮/null 榨干/null 榨机/null 榨汁/null 榨汁机/null 榨油/null 榨油机/null 榨菜/null 榨葡萄/null 榨酒池/null 榫凿/null 榫头/null 榫子/null 榫接/null 榫眼/null 榫销/null 榴弹/null 榴弹炮/null 榴梿/null 榴梿果/null 榴火/null 榴莲/null 榴莲果/null 榴霰弹/null 榻榻米/null 榻米/null 槁木死灰/null 槁项黄馘/null 槌子/null 槌棒/null 槌状/null 槌球/null 槌骨沥髓/null 槐树/null 槐花/null 槐荫/null 槐荫区/null 槐蓝/null 槐蚕/null 槐豆/null 槐黄/null 槛猿笼鸟/null 槛花笼鹤/null 槛车/null 槜李/null 槟城/null 槟子/null 槟州/null 槟榔/null 槟榔屿/null 槟榔岛/null 槟榔树/null 槟榔膏/null 槟榔西施/null 槭木/null 槭糖浆/null 槲寄生/null 槲栎/null 槲树/null 槽中/null 槽具/null 槽内/null 槽口/null 槽坊/null 槽头/null 槽子/null 槽子糕/null 槽孔/null 槽床/null 槽牙/null 槽糕/null 槽车/null 槽轮/null 槽钢/null 樊城/null 樊城区/null 樊笼/null 樊篱/null 樗栎/null 樗栎庸才/null 樗蒲/null 樗蚕/null 樟木/null 樟树/null 樟脑/null 樟脑丸/null 樟脑球/null 樟蚕/null 模件/null 模仿/null 模仿品/null 模仿者/null 模仿鸟/null 模似/null 模倣/null 模具/null 模具钢/null 模压/null 模块/null 模块化/null 模块化理论/null 模块单元/null 模块式/null 模块板/null 模型/null 模型论/null 模壳/null 模子/null 模式/null 模式化/null 模式标本/null 模式种/null 模形/null 模态/null 模拟/null 模拟信号/null 模拟器/null 模拟放大器/null 模拟电子计算机/null 模数/null 模本/null 模板/null 模架/null 模样/null 模棱/null 模棱两可/null 模模糊糊/null 模版/null 模版工/null 模特/null 模特儿/null 模糊/null 模糊不清/null 模糊学/null 模糊数学/null 模糊论/null 模糊逻辑/null 模组/null 模胡/null 模范/null 模迹/null 模里/null 模锻/null 横七竖八/null 横三竖四/null 横事/null 横亘/null 横体/null 横侧/null 横倒竖歪/null 横写/null 横冲直撞/null 横击/null 横刀/null 横刀夺爱/null 横切/null 横切面/null 横列/null 横剖/null 横剖面/null 横加/null 横加干涉/null 横加指责/null 横匾/null 横卧/null 横向/null 横向发展/null 横向经济联合/null 横向联合/null 横在/null 横坐标/null 横头横脑/null 横宽/null 横尸遍野/null 横山/null 横山乡/null 横峰/null 横帆船/null 横幅/null 横幅标语/null 横座标/null 横征暴敛/null 横心/null 横截/null 横截线/null 横截面/null 横扫/null 横扫千军/null 横批/null 横折/null 横披/null 横拖倒拽/null 横挑鼻子/null 横挑鼻子竖挑眼/null 横振动/null 横排/null 横摺/null 横放/null 横放物/null 横斜/null 横斜钩/null 横断/null 横断山脉/null 横断步道/null 横断物/null 横断面/null 横是/null 横暴/null 横木/null 横杆/null 横杠/null 横条/null 横标/null 横栏/null 横桁帆/null 横档/null 横梁/null 横棱纹/null 横楣/null 横楣子/null 横槊赋诗/null 横槟/null 横正暴敛/null 横步/null 横死/null 横殃飞祸/null 横段山脉/null 横比/null 横波/null 横流/null 横浜/null 横渡/null 横溢/null 横滨/null 横滨市/null 横滨轮胎/null 横灾飞祸/null 横爬行/null 横生/null 横生枝节/null 横痃/null 横直/null 横眉/null 横眉冷对/null 横眉冷对千夫指/null 横眉怒目/null 横眉立目/null 横眼/null 横着/null 横神经/null 横祸/null 横祸非灾/null 横祸飞灾/null 横科暴敛/null 横空/null 横穿/null 横竖/null 横竖劲儿/null 横笔/null 横笛/null 横筋斗/null 横粱/null 横系/null 横纲/null 横纹/null 横纹肌/null 横线/null 横结/null 横结肠/null 横肉/null 横膈/null 横膈膜/null 横草之功/null 横蛮/null 横行/null 横行天下/null 横行无忌/null 横行直撞/null 横行霸道/null 横街/null 横议/null 横说竖说/null 横财/null 横贯/null 横赋暴敛/null 横越/null 横跨/null 横路/null 横躺/null 横躺竖卧/null 横轴/null 横过/null 横逆/null 横造/null 横道/null 横遭/null 横钩/null 横队/null 横陈/null 横隔/null 横隔膜/null 横面/null 横须/null 横须贺/null 横须贺市/null 横额/null 横飞/null 横骨/null 樯头/null 樱岛/null 樱桃/null 樱桃园/null 樱桃小番茄/null 樱桃色/null 樱桃酒/null 樱花/null 樱花草/null 樱草/null 樵夫/null 樵子/null 樽罍/null 橄榄/null 橄榄山/null 橄榄岩/null 橄榄形/null 橄榄枝/null 橄榄树/null 橄榄油/null 橄榄球/null 橄榄石/null 橄榄绿/null 橄榄色/null 橇棍/null 橐中装/null 橐囊/null 橐橐/null 橐笔/null 橐笥/null 橐驼/null 橐龠/null 橘园/null 橘子/null 橘子水/null 橘子汁/null 橘子酱/null 橘录/null 橘柑/null 橘树/null 橘皮组织/null 橘类/null 橘红/null 橘红色/null 橘络/null 橘色/null 橘黄/null 橘黄色/null 橙兰/null 橙剂/null 橙子/null 橙带/null 橙树/null 橙汁/null 橙皮果酱/null 橙红/null 橙红色/null 橙色/null 橙色剂/null 橙色战剂/null 橙黄/null 橛子/null 橡子面/null 橡子面儿/null 橡实/null 橡木/null 橡木制/null 橡树/null 橡栗/null 橡浆/null 橡皮/null 橡皮图章/null 橡皮圈/null 橡皮擦/null 橡皮树/null 橡皮泥/null 橡皮球/null 橡皮筋/null 橡皮糖/null 橡皮线/null 橡皮膏/null 橡皮船/null 橡皮艇/null 橡胶/null 橡胶布/null 橡胶树/null 橡胶草/null 橡胶鞋/null 橡饭菁羹/null 橱子/null 橱师/null 橱柜/null 橱灯/null 橱窗/null 檀君/null 檀君王/null 檀木/null 檀板/null 檀树/null 檀色/null 檀郎谢女/null 檀香/null 檀香山/null 檀香树/null 檃栝/null 檄书/null 檄文/null 檐下/null 檐口/null 檐子/null 檐沟/null 檑木/null 檠天架海/null 檩子/null 檩条/null 檬树/null 檵木/null 檵花/null 櫆师/null 欠下/null 欠交/null 欠产/null 欠付/null 欠伸/null 欠佳/null 欠债/null 欠债还钱/null 欠妥/null 欠安/null 欠帐/null 欠席/null 欠当/null 欠思/null 欠思考/null 欠思虑/null 欠慎重/null 欠户/null 欠扁/null 欠拨/null 欠据/null 欠揍/null 欠收/null 欠收自补/null 欠时/null 欠明/null 欠条/null 欠款/null 欠爽/null 欠的/null 欠着/null 欠租/null 欠税/null 欠缴/null 欠缺/null 欠考虑/null 欠薪/null 欠账/null 欠费/null 欠资/null 欠身/null 欠钱/null 欠项/null 次一个/null 次下标/null 次之/null 次于/null 次亚硫酸钠/null 次位/null 次佳/null 次元/null 次内/null 次品/null 次声武器/null 次声波/null 次大陆/null 次女/null 次好/null 次子/null 次官/null 次布/null 次幂/null 次年/null 次序/null 次性/null 次数/null 次文化/null 次料/null 次方/null 次於/null 次日/null 次月/null 次有限战争/null 次次/null 次氧/null 次氯酸/null 次源正本/null 次溴酸/null 次生/null 次生林/null 次生灾害/null 次生矿物/null 次目标/null 次第/null 次等/null 次级/null 次级品/null 次级房屋信贷危机/null 次级抵押贷款/null 次级线圈/null 次级贷款/null 次经/null 次要/null 次语/null 次货/null 次贫/null 次贷/null 次贷危机/null 次重量级/null 次长/null 次革/null 次音速/null 次韵/null 次页/null 欢乐/null 欢乐时光/null 欢乐歌/null 欢势/null 欢呼/null 欢呼声/null 欢呼雀跃/null 欢呼雷动/null 欢唱/null 欢喜/null 欢喜冤家/null 欢场/null 欢声/null 欢声笑语/null 欢声雷动/null 欢天/null 欢天喜地/null 欢娱/null 欢娱嫌夜短/null 欢实/null 欢宴/null 欢容悦色/null 欢庆/null 欢度/null 欢心/null 欢心若狂/null 欢快/null 欢忻踊跃/null 欢忻鼓舞/null 欢悦/null 欢愉/null 欢欢喜喜/null 欢欣/null 欢欣踊跃/null 欢欣雀跃/null 欢欣鼓舞/null 欢歌笑语/null 欢然/null 欢畅/null 欢眉喜眼/null 欢笑/null 欢聚/null 欢聚一堂/null 欢腾/null 欢苗爱叶/null 欢若平生/null 欢跃/null 欢跳/null 欢蹦乱跳/null 欢迎/null 欢迎仪式/null 欢迎会/null 欢迎光临/null 欢迎垂询/null 欢迎宴会/null 欢迎惠顾/null 欢迎词/null 欢迸乱跳/null 欢送/null 欢送会/null 欢酒/null 欢闹/null 欢颜/null 欣喜/null 欣喜若狂/null 欣喜雀跃/null 欣幸/null 欣弗/null 欣忭/null 欣悉/null 欣悦/null 欣慰/null 欣欣/null 欣欣向荣/null 欣欣自得/null 欣然/null 欣然命笔/null 欣然自乐/null 欣然自喜/null 欣然自得/null 欣生恶死/null 欣羡/null 欣赏/null 欧亚/null 欧亚大陆/null 欧亚经济共同体/null 欧人/null 欧仁/null 欧伯林/null 欧体/null 欧元/null 欧元区/null 欧共体/null 欧几里得/null 欧几里德/null 欧分/null 欧化/null 欧吉桑/null 欧姆/null 欧姆定律/null 欧姆蛋/null 欧姆表/null 欧姆计/null 欧安会/null 欧安组织/null 欧宝/null 欧巴桑/null 欧巴马/null 欧式/null 欧式几何/null 欧式几何学/null 欧当归/null 欧拉/null 欧文/null 欧文斯/null 欧柏林/null 欧查果/null 欧椋鸟/null 欧氏/null 欧氏几何学/null 欧氏管/null 欧泊/null 欧洲/null 欧洲中央银行/null 欧洲之星/null 欧洲产/null 欧洲人/null 欧洲共同体/null 欧洲共同市场/null 欧洲刑警组织/null 欧洲原子能联营/null 欧洲国家/null 欧洲大陆/null 欧洲安全与合作组织/null 欧洲安全和合作组织/null 欧洲山杨/null 欧洲杯/null 欧洲核子中心/null 欧洲核子研究中心/null 欧洲法院/null 欧洲理事会/null 欧洲电视/null 欧洲电视歌唱赛/null 欧洲联盟/null 欧洲自由贸易联盟/null 欧洲航天局/null 欧洲议会/null 欧洲语言/null 欧洲货币/null 欧洲防风/null 欧珀莱/null 欧盟/null 欧盟委员会/null 欧米伽/null 欧罗巴/null 欧罗巴人种/null 欧罗巴洲/null 欧美/null 欧美同学会/null 欧芹/null 欧若拉/null 欧莱雅/null 欧莳萝/null 欧蝶鱼/null 欧西/null 欧语/null 欧车前/null 欧里庇得斯/null 欧阳/null 欧阳予倩/null 欧阳修/null 欧阳询/null 欧陆/null 欧非/null 欧风美雨/null 欲与/null 欲了解/null 欲人勿知莫若勿为/null 欲人勿闻莫若勿言/null 欲仙/null 欲倒/null 欲加之罪/null 欲加之罪何患无辞/null 欲取/null 欲取姑与/null 欲取姑予/null 欲取故与/null 欲售/null 欲善其事/null 欲壑难填/null 欲女/null 欲将/null 欲得/null 欲念/null 欲想/null 欲报复/null 欲振乏力/null 欲擒/null 欲擒故纵/null 欲望/null 欲求/null 欲海/null 欲滴/null 欲火/null 欲火焚身/null 欲益反损/null 欲盖弥彰/null 欲盖而彰/null 欲睡/null 欲穷千里目/null 欲绝/null 欲罢/null 欲罢不能/null 欲罪/null 欲补/null 欲裂/null 欲言又止/null 欲设/null 欲试/null 欲语/null 欲说又止/null 欲说还休/null 欲速不达/null 欲速则不达/null 欲速而不达/null 欷吁/null 欷歔/null 欺三瞒四/null 欺上压下/null 欺上瞒下/null 欺上罔下/null 欺世乱俗/null 欺世惑众/null 欺世惑俗/null 欺世盗名/null 欺世罔俗/null 欺世钓誉/null 欺主罔上/null 欺人/null 欺人之谈/null 欺人太甚/null 欺人者/null 欺人自欺/null 欺以其方/null 欺侮/null 欺公罔法/null 欺凌/null 欺压/null 欺君/null 欺君罔上/null 欺君误国/null 欺哄/null 欺善怕恶/null 欺大压小/null 欺天罔人/null 欺天罔地/null 欺天诳地/null 欺心/null 欺生/null 欺男霸女/null 欺瞒/null 欺瞒夹帐/null 欺硬怕软/null 欺蒙/null 欺诈/null 欺诈者/null 欺负/null 欺软/null 欺软怕硬/null 欺辱/null 欺霜傲雪/null 欺骗/null 欺骗性/null 欺骗者/null 欺骗著/null 款人/null 款以/null 款伏/null 款儿/null 款冬/null 款启寡闻/null 款员/null 款型/null 款子/null 款学寡闻/null 款宴/null 款度/null 款式/null 款待/null 款新/null 款曲/null 款服/null 款款/null 款步/null 款洽/null 款源/null 款物/null 款留/null 款目/null 款簿/null 款级/null 款识/null 款语温言/null 款语移时/null 款赠/null 款项/null 款额/null 欿然/null 歃血/null 歃血为盟/null 歃血为誓/null 歃血而盟/null 歆慕/null 歆羡/null 歇下/null 歇业/null 歇乏/null 歇伏/null 歇凉/null 歇后/null 歇后语/null 歇夏/null 歇宿/null 歇工/null 歇心/null 歇息/null 歇手/null 歇斯底里/null 歇晌/null 歇枝/null 歇气/null 歇洛克・福尔摩斯/null 歇火/null 歇班/null 歇着/null 歇肩/null 歇脚/null 歇腿/null 歇艎/null 歇荫/null 歇菜/null 歇闲/null 歇鞍/null 歇顶/null 歉仄/null 歉年/null 歉意/null 歉收/null 歉疚/null 歉虚/null 歌仔戏/null 歌会/null 歌儿/null 歌利亚/null 歌剧/null 歌剧团/null 歌剧院/null 歌剧院魅影/null 歌功颂德/null 歌厅/null 歌台舞榭/null 歌吟/null 歌咏/null 歌唱/null 歌唱家/null 歌唱演员/null 歌唱赛/null 歌唱队/null 歌喉/null 歌坛/null 歌声/null 歌声绕梁/null 歌女/null 歌妓/null 歌姬/null 歌子/null 歌德/null 歌手/null 歌星/null 歌曲/null 歌曲集/null 歌本/null 歌楼舞管/null 歌王/null 歌碟/null 歌筵/null 歌组/null 歌罗西/null 歌罗西书/null 歌者/null 歌舞/null 歌舞伎/null 歌舞会/null 歌舞剧/null 歌舞升平/null 歌舞厅/null 歌舞团/null 歌舞太平/null 歌舞妓/null 歌莺舞燕/null 歌诀/null 歌词/null 歌诗达邮轮/null 歌调/null 歌谣/null 歌谱/null 歌迷/null 歌集/null 歌颂/null 歌鸲/null 歙人/null 歙漆阿胶/null 止不住/null 止于/null 止于至善/null 止付/null 止住/null 止咳/null 止咳糖浆/null 止境/null 止怒/null 止息/null 止戈为武/null 止戈兴仁/null 止戈散马/null 止扮自修/null 止损点/null 止日/null 止暴禁非/null 止期/null 止步/null 止汗剂/null 止泻/null 止泻剂/null 止渴/null 止渴思梅/null 止渴饮鸩/null 止疼片/null 止痒/null 止痛/null 止痛剂/null 止痛法/null 止痛片/null 止痛药/null 止血/null 止血器/null 止血垫/null 止血栓/null 止血钳/null 止谤莫若自修/null 止跌/null 止闹按钮/null 正丁醚/null 正三角形/null 正上/null 正下方/null 正业/null 正东/null 正中/null 正中下怀/null 正中己怀/null 正中要害/null 正义/null 正义事业/null 正义党/null 正义感/null 正义战争/null 正义斗争/null 正义者同盟/null 正书/null 正事/null 正交/null 正交基/null 正交群/null 正人先正己/null 正人君子/null 正从/null 正仓院/null 正传/null 正位/null 正体/null 正体字/null 正值/null 正像/null 正六边形/null 正兰旗/null 正典/null 正册/null 正冠李下/null 正冠纳履/null 正凶/null 正击/null 正切/null 正则/null 正则参数/null 正前方/null 正剧/null 正副/null 正割/null 正化/null 正北/null 正午/null 正半轴/null 正南/null 正厅/null 正压/null 正反/null 正反两方面/null 正反两面/null 正反器/null 正反面/null 正取/null 正句/null 正史/null 正号/null 正合适/null 正名/null 正名责实/null 正向/null 正向前看/null 正告/null 正和/null 正品/null 正在/null 正型/null 正堂/null 正声雅音/null 正处/null 正处于/正处 正处在/正处 正外部性/null 正多胞形/null 正多边形/null 正多面体/null 正大/null 正大光明/null 正大堂皇/null 正太/null 正太控/null 正太铁路/null 正好/null 正好是/null 正如/null 正妹/null 正子/null 正字/null 正字法/null 正字法模式/null 正字法空间/null 正字法规则/null 正字法阶段/null 正学/null 正宁/null 正安/null 正宗/null 正定/null 正室/null 正宫娘娘/null 正对/null 正对着/null 正屋/null 正巧/null 正差/null 正己守道/null 正币/null 正帮/null 正常/null 正常人/null 正常值/null 正常关系/null 正常化/null 正常工作/null 正常情况/null 正常成本/null 正常渠道/null 正常现象/null 正常生产/null 正常生活/null 正常秩序/null 正常运转/null 正座/null 正式/null 正式化/null 正式开始/null 正式成立/null 正式投票/null 正式访问/null 正弦/null 正弦定理/null 正弦形/null 正弦波/null 正当/null 正当中/null 正当化/null 正当年/null 正当性/null 正当手段/null 正当时/null 正当权利/null 正当权益/null 正当理由/null 正当防卫/null 正待/null 正德/null 正心诚意/null 正念/null 正态分布/null 正急/null 正想/null 正意/null 正成大错/null 正房/null 正手/null 正扭/null 正投影/null 正教/null 正教真诠/null 正数/null 正整数/null 正文/null 正断层/null 正方/null 正方体/null 正方向/null 正方形/null 正旦/null 正时/null 正是/null 正月/null 正月初一/null 正本/null 正本清源/null 正本溯源/null 正本澄源/null 正极/null 正果/null 正桥/null 正梁/null 正楷/null 正欢/null 正正/null 正正堂堂/null 正步/null 正步走/null 正殿/null 正比/null 正比例/null 正气/null 正没/null 正法/null 正法直度/null 正法眼藏/null 正派/null 正港/null 正点/null 正点背画/null 正然/null 正片/null 正片儿/null 正版/null 正牙带环/null 正理/null 正生/null 正用/null 正由/null 正电/null 正电子/null 正电子发射体层/null 正电子发射层析/null 正电子发射断层照相术/null 正电子发射计算机断层/null 正电子断层/null 正电子照射断层摄影/null 正电荷/null 正盐/null 正盛/null 正直/null 正直无私/null 正直无邪/null 正相/null 正相反/null 正眼/null 正着/null 正确/null 正确率/准确率 正确地/null 正确处理/null 正确处理人民内部矛盾/null 正确对待/null 正确引导/null 正确性/null 正确方向/null 正确理解/null 正确认识/null 正确路线/null 正确轨道/null 正确领导/null 正磷酸/null 正祖/null 正离子/null 正红/null 正经/null 正经八百/null 正统/null 正统思想/null 正统性/null 正统派/null 正统观念/null 正编/null 正职/null 正联/null 正色/null 正色危言/null 正色取言/null 正色直言/null 正茬/null 正菜/null 正表/null 正被/null 正装/null 正襟/null 正襟危坐/null 正襟安坐/null 正西/null 正要/null 正规/null 正规军/null 正规化/null 正规教育/null 正视/null 正视图/null 正视眼/null 正视绳行/null 正言/null 正言不讳/null 正言厉色/null 正言厉颜/null 正言直谏/null 正论/null 正词法/null 正话/null 正该/null 正误/null 正误表/null 正象/null 正负/null 正负号/null 正负电子/null 正路/null 正身/null 正身明法/null 正身清心/null 正身率下/null 正轨/null 正过/null 正途/null 正逢/null 正道/null 正邪/null 正邪相争/null 正锋/null 正长石/null 正门/null 正问/null 正阳/null 正院/null 正面/null 正面人物/null 正面图/null 正面战场/null 正面教育/null 正音/null 正音法/null 正题/null 正颜厉色/null 正餐/null 正骨/null 正骨八法/null 正黑/null 正龟成鳖/null 此一时彼一时/null 此世/null 此中/null 此为/null 此举/null 此之外/null 此书/null 此文/null 此事/null 此事体大/null 此人/null 此件/null 此伏彼起/null 此例/null 此列/null 此刻/null 此前/null 此发彼应/null 此可忍孰不可容/null 此可忍孰不可忍/null 此后/null 此君/null 此唱彼和/null 此地/null 此地无银三百两/null 此地无银存而不论/null 此处/null 此复/null 此外/null 此属/null 此岸/null 此岸性/null 此后/null 此情/null 此情此景/null 此时/null 此时以前/null 此时此刻/null 此时此地/null 此期间/null 此条/null 此栏/null 此案/null 此次/null 此款/null 此正/null 此法/null 此派/null 此点/null 此版/null 此生/null 此由/null 此画/null 此番/null 此种/null 此税/null 此等/null 此类/null 此而/null 此联/null 此致/null 此致敬礼/null 此行/null 此表/null 此起彼伏/null 此起彼落/null 此路/null 此路不通/null 此辈/null 此道/null 此问彼难/null 此间/null 此间人士/null 此际/null 此项/null 步人后尘/null 步伐/null 步伐蹒跚/null 步入/null 步入正轨/null 步兵/null 步兵师/null 步出/null 步哨/null 步声/null 步子/null 步履/null 步履紊乱/null 步履维艰/null 步履艰难/null 步履轻盈/null 步幅/null 步弓/null 步态/null 步态蹒跚/null 步摇/null 步操/null 步数计/null 步斗踏罡/null 步月/null 步月登云/null 步机/null 步枪/null 步枪队/null 步步/null 步步为营/null 步步生莲花/null 步步高升/null 步武/null 步法/null 步测/null 步涉者/null 步犁/null 步程计/null 步线行针/null 步罡踏斗/null 步行/null 步行区/null 步行机/null 步行者/null 步行虫/null 步行街/null 步行道/null 步话机/null 步调/null 步调一致/null 步谈机/null 步进/null 步进制/null 步进马达/null 步速/null 步道/null 步量/null 步韵/null 步骤/null 武丁/null 武不善作/null 武丑/null 武举/null 武义/null 武乡/null 武二花/null 武人/null 武人不惜死/null 武仙座/null 武侠/null 武侠小说/null 武侯/null 武侯区/null 武侯祠/null 武偃文修/null 武冈/null 武则天/null 武剧/null 武力/null 武功/null 武功山/null 武功镇/null 武卫/null 武器/null 武器可用物质/null 武器库/null 武器弹药/null 武器禁运/null 武器系统/null 武器级/null 武器级别材料/null 武器装备/null 武土/null 武圣/null 武场/null 武坛/null 武城/null 武士/null 武士彟/null 武士道/null 武备/null 武夫/null 武夷/null 武夷山/null 武委会/null 武威/null 武威地区/null 武宁/null 武安/null 武官/null 武定/null 武宣/null 武将/null 武山/null 武山鸡/null 武川/null 武工/null 武工队/null 武师/null 武平/null 武库/null 武庙/null 武康镇/null 武强/null 武当/null 武当山/null 武戏/null 武打/null 武打片/null 武斗/null 武断/null 武旦/null 武昌/null 武昌剩竹/null 武昌区/null 武昌起义/null 武昌鱼/null 武术/null 武松/null 武林/null 武水/null 武汉地区/null 武汉大学/null 武汉钢铁公司/null 武江/null 武江区/null 武清/null 武溪/null 武火/null 武王伐纣/null 武生/null 武略/null 武神/null 武穴/null 武纪/null 武经七书/null 武经总要/null 武职/null 武胜/null 武艺/null 武艺高强/null 武行/null 武装/null 武装入侵/null 武装冲突/null 武装分子/null 武装力量/null 武装挑衅/null 武装斗争/null 武装泅渡/null 武装警察/null 武装部/null 武装部队/null 武警/null 武警战士/null 武警部队/null 武进/null 武进区/null 武邑/null 武都/null 武都区/null 武都市/null 武陟/null 武陵/null 武陵区/null 武陵源/null 武隆/null 武鸣/null 歧义/null 歧出/null 歧岖/null 歧异/null 歧见/null 歧视/null 歧路/null 歧路亡羊/null 歧路灯/null 歧途/null 歪七扭八/null 歪七竖八/null 歪了/null 歪倒/null 歪像/null 歪向/null 歪嘴/null 歪姿斜态/null 歪形/null 歪心邪意/null 歪打/null 歪打正着/null 歪斜/null 歪曲/null 歪曲事实/null 歪歪/null 歪歪扭扭/null 歪歪斜斜/null 歪点子/null 歪理/null 歪瓜劣枣/null 歪瓜裂枣/null 歪缠/null 歪脖/null 歪诗/null 歪谈乱道/null 歪门邪道/null 歪风/null 歪风邪气/null 歹人/null 歹徒/null 歹意/null 歹毒/null 死一般/null 死不/null 死不了/null 死不冥目/null 死不改悔/null 死不旋踵/null 死不死活不活/null 死不瞑目/null 死不足惜/null 死不闭目/null 死且不朽/null 死中求生/null 死乞白赖/null 死也瞑目/null 死了/null 死于/null 死于安乐/null 死于非命/null 死亡/null 死亡人数/null 死亡无日/null 死亡率/null 死亡笔记/null 死亡证/null 死产/null 死人/null 死人般/null 死仗/null 死伤/null 死伤相枕/null 死伤相藉/null 死伤者/null 死信/null 死僵/null 死光/null 死党/null 死刑/null 死刑犯/null 死别/null 死别生离/null 死到临头/null 死前/null 死力/null 死劲儿/null 死区/null 死去/null 死去活来/null 死后/null 死告活央/null 死命/null 死啃/null 死囚/null 死因/null 死地/null 死地求生/null 死声淘气/null 死头脑/null 死契/null 死守/null 死寂/null 死对/null 死对头/null 死尸/null 死巷/null 死后/null 死得/null 死得其所/null 死心/null 死心塌地/null 死心搭地/null 死心眼/null 死心眼儿/null 死心踏地/null 死战/null 死扣/null 死扣儿/null 死抓/null 死抠/null 死抱着不放/null 死抱著不放/null 死掉/null 死敌/null 死文字/null 死无对证/null 死无葬身之地/null 死无遗忧/null 死日生年/null 死有余戮/null 死有余罪/null 死有余责/null 死有余辜/null 死期/null 死机/null 死机蓝屏/null 死板/null 死树/null 死样/null 死样活气/null 死棋/null 死模活样/null 死死/null 死气/null 死气沉沉/null 死气白赖/null 死水/null 死求白赖/null 死活/null 死活不顾/null 死海/null 死海古卷/null 死海经卷/null 死火/null 死火山/null 死灭/null 死灰/null 死灰复燃/null 死灰复燎/null 死灰槁木/null 死灰色/null 死点/null 死物/null 死生/null 死生契阔/null 死生存亡/null 死生有命富贵在天/null 死生未卜/null 死生活气/null 死生荣辱/null 死症/null 死白色/null 死的/null 死皮赖脸/null 死相/null 死相枕藉/null 死眉瞪眼/null 死硬/null 死硬派/null 死神/null 死穴/null 死端/null 死等/null 死结/null 死结难解/null 死绝/null 死缓/null 死缠/null 死缠烂打/null 死罪/null 死翘翘/null 死者/null 死者相枕/null 死而不僵/null 死而不悔/null 死而不朽/null 死而后己/null 死而后已/null 死而后止/null 死而复生/null 死而复苏/null 死而无怨/null 死而无悔/null 死胎/null 死胡同/null 死要/null 死规矩/null 死角/null 死讯/null 死记/null 死记硬背/null 死说活说/null 死账/null 死路/null 死路一条/null 死轻鸿毛/null 死里求生/null 死里逃生/null 死钱/null 死锁/null 死难/null 死难者/null 死面/null 死顽固/null 死马当活马医/null 死鬼/null 死鱼/null 歼一警百/null 歼击/null 歼击机/null 歼敌/null 歼灭/null 歼灭战/null 殁而不朽/null 殁而无朽/null 殃及/null 殃及池鱼/null 殃国祸家/null 殃殃/null 殃民/null 殆尽/null 殆无孑遗/null 殆无虚日/null 殉义忘身/null 殉国/null 殉情/null 殉教/null 殉教史/null 殉教者/null 殉死/null 殉职/null 殉节/null 殉葬/null 殉葬品/null 殉道/null 殉道者/null 殉难/null 殉难者/null 殊不知/null 殊乡/null 殊功/null 殊功劲节/null 殊勋/null 殊勋异绩/null 殊勋茂绩/null 殊域周咨录/null 殊姿/null 殊异/null 殊形妙状/null 殊形怪状/null 殊形诡状/null 殊形诡色/null 殊方同致/null 殊方异域/null 殊方异类/null 殊方绝域/null 殊死/null 殊死搏斗/null 殊涂同会/null 殊涂同归/null 殊涂同致/null 殊深轸念/null 殊滋异味/null 殊煞风景/null 殊礼/null 殊致/null 殊色/null 殊荣/null 殊言别语/null 殊路同归/null 殊途同归/null 残丘/null 残云/null 残余/null 残余分子/null 残余势力/null 残余沾染/null 残余物/null 残值/null 残像/null 残兵/null 残兵败将/null 残军败将/null 残冬/null 残冬腊月/null 残匪/null 残卷/null 残发/null 残品/null 残喘/null 残垣断壁/null 残墙/null 残夜/null 残奥/null 残奥会/null 残存/null 残存物/null 残害/null 残局/null 残山剩水/null 残席/null 残年/null 残年短景/null 残废/null 残废军人/null 残弱/null 残忍/null 残忍人/null 残损/null 残敌/null 残料/null 残星/null 残春/null 残晖/null 残暴/null 残月/null 残本/null 残杀/null 残杀者/null 残杯冷炙/null 残株/null 残根/null 残次/null 残毒/null 残民以逞/null 残民害物/null 残汤剩饭/null 残渣/null 残渣余孽/null 残滓/null 残灯/null 残烛/null 残照/null 残片/null 残物/null 残瓦/null 残生/null 残留/null 残留影象/null 残留物/null 残疾/null 残疾人/null 残疾人联合会/null 残疾儿/null 残破/null 残秋/null 残积/null 残章断简/null 残篇/null 残篇断简/null 残红/null 残编断简/null 残缺/null 残缺不全/null 残羹/null 残羹冷炙/null 残羹冷饭/null 残羹剩饭/null 残联/null 残肢/null 残肴/null 残花/null 残花败柳/null 残茎/null 残茶剩饭/null 残虐/null 残败/null 残货/null 残迹/null 残遗/null 残部/null 残酒/null 残酷/null 残酷斗争/null 残酷无情/null 残阳/null 残障/null 残香/null 残骸/null 殒命/null 殒灭/null 殒落/null 殒身不恤/null 殒身碎首/null 殖利/null 殖民/null 殖民主义/null 殖民于/null 殖民地/null 殖民统治/null 殖民者/null 殗殜/null 殚力/null 殚心/null 殚心竭虑/null 殚思极虑/null 殚智竭力/null 殚残/null 殚竭/null 殚精极思/null 殚精极虑/null 殚精毕力/null 殚精毕思/null 殚精竭力/null 殚精竭虑/null 殚见洽闻/null 殚诚毕虑/null 殚谋戮力/null 殚闷/null 殜殜/null 殡仪/null 殡仪员/null 殡仪馆/null 殡殓/null 殡葬/null 殡车/null 殴伤/null 殴偏救弊/null 殴打/null 殴打罪/null 殴斗/null 殴气/null 段子/null 段式/null 段数/null 段氏/null 段汛期/null 段玉裁/null 段祺瑞/null 段荃法/null 段落/null 段错误/null 段长/null 殷切/null 殷勤/null 殷商/null 殷墟/null 殷天动地/null 殷天震地/null 殷实/null 殷富/null 殷弘绪/null 殷忧/null 殷忧启圣/null 殷望/null 殷殷/null 殷殷勤勤/null 殷殷教导/null 殷殷田田/null 殷民阜利/null 殷民阜财/null 殷浩书空/null 殷红/null 殷资/null 殷都/null 殷都区/null 殷鉴/null 殷鉴不远/null 殷钢/null 殿下/null 殿军/null 殿卫/null 殿后/null 殿堂/null 殿式/null 殿后/null 殿本/null 殿试/null 毁不灭性/null 毁了/null 毁于/null 毁于一旦/null 毁伤/null 毁冠裂裳/null 毁坏/null 毁宗夷族/null 毁家纾国/null 毁家纾难/null 毁容/null 毁廉灭耻/null 毁弃/null 毁形/null 毁形灭性/null 毁损/null 毁掉/null 毁方投圆/null 毁方瓦合/null 毁来性/null 毁林/null 毁灭/null 毁灭性/null 毁灭性打击/null 毁瓦画墁/null 毁约/null 毁言/null 毁誉/null 毁誓/null 毁诋/null 毁谤/null 毁车杀马/null 毁迹/null 毁钟为铎/null 毁除/null 毁风败俗/null 毂击肩摩/null 毂壳/null 毅力/null 毅然/null 毅然决然/null 毋到/null 毋单/null 毋宁/null 毋宁死/null 毋庸/null 毋忘/null 毋望之祸/null 毋望之福/null 毋甚高论/null 毋翼而飞/null 毋躁/null 毋需/null 毋须/null 母乳/null 母乳代/null 母乳喂养/null 母亲/null 母亲似/null 母以子贵/null 母体/null 母党/null 母公司/null 母兽/null 母函数/null 母后/null 母国/null 母夜叉/null 母女/null 母奶/null 母子/null 母子垂直感染/null 母弹/null 母性/null 母慈子孝/null 母教/null 母料/null 母方/null 母本/null 母机/null 母权制/null 母板/null 母树/null 母树林/null 母校/null 母株/null 母液/null 母港/null 母爱/null 母牛/null 母犬/null 母狗/null 母狮子/null 母猪/null 母球/null 母畜/null 母的/null 母种/null 母系/null 母系制/null 母系社会/null 母线/null 母羊/null 母老虎/null 母舅/null 母舰/null 母舱/null 母船/null 母蜂/null 母表/null 母语/null 母质/null 母道/null 母钟/null 母难日/null 母音/null 母音调和/null 母音间/null 母题/null 母鸡/null 母鸭/null 母鹿皮/null 每一/null 每一张/null 每一个/null 每一处/null 每一寸/null 每一年/null 每一方/null 每一种/null 每七年/null 每下愈况/每下愈况 每况愈下/每况愈下 每两/null 每个/null 每个人/null 每个月/null 每二/null 每五年/null 每亩/null 每人/null 每人每年/null 每件/null 每件事/null 每份/null 每位/null 每克/null 每八年/null 每况愈下/null 每分每秒/null 每分钟/null 每到/null 每刻/null 每包/null 每匹/null 每十年/null 每半年/null 每单位/null 每县/null 每双/null 每吨/null 每周/null 每周一次/null 每四天/null 每四年/null 每回/null 每地/null 每场/null 每处/null 每夜/null 每天/null 每头/null 每套/null 每季/null 每家/null 每小时/null 每层/null 每届/null 每常/null 每平方米/null 每年/null 每年一度/null 每座/null 每张/null 每当/null 每户/null 每打/null 每批/null 每排/null 每斤/null 每日/null 每日快报/null 每日性/null 每日新闻/null 每日电讯报/null 每日邮报/null 每日镜报/null 每日限价/null 每旬/null 每时/null 每时每刻/null 每时每日/null 每星期/null 每晚/null 每月/null 每期/null 每本/null 每条/null 每样/null 每次/null 每每/null 每片/null 每瓶/null 每磅/null 每种/null 每秒/null 每秒钟/null 每窑/null 每端口价格/null 每笔/null 每类/null 每组/null 每股/null 每节/null 每英寸/null 每谋辄败/null 每车/null 每转/null 每辆/null 每逢/null 每逢佳节倍思亲/null 每部/null 每队/null 每隔/null 每集/null 每页/null 每顷/null 每项/null 每顿/null 每颗/null 每饭不忘/null 毒八角/null 毒刑/null 毒刺/null 毒剂/null 毒剂化学/null 毒剂弹/null 毒剂震检/null 毒力/null 毒化/null 毒品/null 毒品贩/null 毒品走私/null 毒品走私案/null 毒奶/null 毒奶粉/null 毒妇/null 毒害/null 毒害剂量/null 毒性/null 毒感/null 毒手/null 毒手尊拳/null 毒打/null 毒教/null 毒杀/null 毒枭/null 毒株/null 毒死/null 毒气/null 毒气弹/null 毒气战/null 毒汁/null 毒液/null 毒爪/null 毒牙/null 毒物/null 毒物学/null 毒狗草/null 毒理学/null 毒瓦斯/null 毒疮/null 毒症/null 毒瘤/null 毒瘾/null 毒砂/null 毒箭/null 毒素/null 毒腺/null 毒舌/null 毒草/null 毒草名/null 毒药/null 毒药苦口/null 毒莠定/null 毒菌/null 毒蕈/null 毒虫/null 毒蛇/null 毒蛇猛兽/null 毒蛾/null 毒蜘蛛/null 毒蝇伞/null 毒蝇蕈/null 毒计/null 毒谋/null 毒谷/null 毒贩/null 毒辣/null 毒酒/null 毒针/null 毒颚/null 毒饵/null 毒麦/null 毓婷/null 毓子孕孙/null 比一比/null 比上不足/null 比上不足比下有余/null 比下去/null 比下有余/null 比不上/null 比丘/null 比丘尼/null 比为/null 比之/null 比书/null 比了/null 比亚/null 比亚迪/null 比亚迪汽车/null 比什凯克/null 比他/null 比以往任何时候都/null 比价/null 比佛利山/null 比作/null 比例/null 比例中项/null 比例关系/null 比例失调/null 比例尺/null 比例规/null 比值/null 比做/null 比分/null 比划/null 比利/null 比利时人/null 比利牛斯/null 比利牛斯山/null 比到达终点更美好/null 比勒费尔德/null 比勒陀利亚/null 比历史最高水平/null 比去年同期下降/null 比及/null 比反/null 比号/null 比哈尔邦/null 比喻/null 比坚尼/null 比埃兹巴伯/null 比基尼/null 比基尼岛/null 比她/null 比好/null 比如/null 比如说/null 比威力/null 比学赶帮/null 比学赶帮超/null 比安/null 比容/null 比对/null 比尔/null 比尔・盖茨/null 比尔博/null 比屋可封/null 比屋而封/null 比岁不登/null 比干/null 比年/null 比年不登/null 比张比李/null 比得/null 比得上/null 比快/null 比手划脚/null 比手画脚/null 比才/null 比拟/null 比拼/null 比捕/null 比数/null 比斯开湾/null 比斯特/null 比方/null 比方说/null 比杆赛/null 比来/null 比武/null 比比/null 比比划划/null 比比皆是/null 比比皆然/null 比湿/null 比热/null 比照/null 比物此志/null 比物连类/null 比特/null 比猫画虎/null 比率/null 比画/null 比目/null 比目连枝/null 比目鱼/null 比着/null 比索/null 比绍/null 比翼/null 比翼双飞/null 比翼连枝/null 比翼鸟/null 比翼齐飞/null 比肩/null 比肩皆是/null 比肩继踵/null 比肩而事/null 比肩而立/null 比肩随踵/null 比色/null 比色分析/null 比色计/null 比萨/null 比萨斜塔/null 比萨饼/null 比著/null 比评/null 比试/null 比诸/null 比赛/null 比赛场/null 比赛规则/null 比赛项目/null 比起/null 比较/null 比长比短/null 比较仪/null 比较价格/null 比较分析/null 比较喜欢/null 比较器/null 比较慢/null 比较文学/null 比较级/null 比较而言/null 比邻/null 比配/null 比重/null 比重计/null 比量/null 比附/null 比降/null 比高/null 毕业/null 毕业典礼/null 毕业分配/null 毕业后/null 毕业文凭/null 毕业班/null 毕业生/null 毕业考试/null 毕业论文/null 毕业设计/null 毕业证书/null 毕了业/null 毕其功于一役/null 毕兹/null 毕力同心/null 毕加索/null 毕升/null 毕命/null 毕宿五/null 毕尔巴鄂/null 毕尼奥夫/null 毕尼奥夫带/null 毕恭毕敬/null 毕摩/null 毕毕剥剥/null 毕生/null 毕竟/null 毕肖/null 毕节/null 毕节地区/null 毕设/null 毕达哥拉斯/null 毕露/null 毗湿奴/null 毗耶娑/null 毗连/null 毗邻/null 毙了/null 毙伤/null 毙命/null 毙后/null 毙掉/null 毙敌/null 毙而后已/null 毛一般/null 毛丛/null 毛丛状/null 毛主义/null 毛主席/null 毛主席纪念堂/null 毛主席语录/null 毛举细事/null 毛举细务/null 毛举细故/null 毛举缕析/null 毛估/null 毛值/null 毛冠鹿/null 毛出在羊身上/null 毛利/null 毛利人/null 毛利语/null 毛制/null 毛刷/null 毛刺/null 毛发/null 毛发之功/null 毛发似/null 毛发倒竖/null 毛发学/null 毛发悚然/null 毛发森竖/null 毛发湿度表/null 毛发耸然/null 毛口/null 毛呢/null 毛咕/null 毛哔叽/null 毛囊/null 毛团/null 毛地黄/null 毛坑/null 毛坯/null 毛塑像/null 毛多/null 毛太纸/null 毛头/null 毛头纸/null 毛子/null 毛孔/null 毛小囊/null 毛尖/null 毛巾/null 毛巾被/null 毛布/null 毛帽/null 毛手/null 毛手毛脚/null 毛拉/null 毛损/null 毛掸/null 毛掸子/null 毛收入/null 毛料/null 毛施淑姿/null 毛条/null 毛样/null 毛根/null 毛桃/null 毛概/null 毛毛/null 毛毛腾腾/null 毛毛虫/null 毛毛雨/null 毛毡/null 毛毡苔/null 毛毯/null 毛泽东/null 毛泽东・鲜为人知的故事/null 毛泽东主义/null 毛泽东思想/null 毛洋槐/null 毛派/null 毛渠/null 毛火虫/null 毛烘烘/null 毛片/null 毛犀/null 毛状/null 毛状体/null 毛猪/null 毛玻璃/null 毛瑟枪/null 毛病/null 毛白/null 毛白杨/null 毛皮/null 毛皮兽/null 毛皮商/null 毛皮袋/null 毛票/null 毛窝/null 毛竹/null 毛笋/null 毛笔/null 毛管水/null 毛箭/null 毛糙/null 毛絮/null 毛纺/null 毛纺厂/null 毛纺织厂/null 毛线/null 毛线衣/null 毛细/null 毛细孔/null 毛细现象/null 毛细管/null 毛细血管/null 毛织/null 毛织品/null 毛织物/null 毛织运动衫/null 毛绒/null 毛绒玩具/null 毛绒绒/null 毛绳/null 毛肚/null 毛腰/null 毛腿沙鸡/null 毛色/null 毛茛/null 毛茛科/null 毛茶/null 毛茸/null 毛茸茸/null 毛草/null 毛蓝/null 毛虫/null 毛虾/null 毛蚴/null 毛血旺/null 毛衣/null 毛袜/null 毛装/null 毛裤/null 毛词/null 毛诗/null 毛豆/null 毛象/null 毛躁/null 毛边/null 毛边纸/null 毛遂/null 毛遂自荐/null 毛邓三/null 毛酸浆/null 毛里/null 毛里塔尼亚/null 毛里求斯/null 毛重/null 毛钱/null 毛钱儿/null 毛难族/null 毛领/null 毛颚动物/null 毛驴/null 毛骨悚然/null 毛骨竦然/null 毛骨耸然/null 毡呢/null 毡子/null 毡帽/null 毡条/null 毡毯/null 毡帐/圆顶毡帐 圆顶毡帐/毡帐 毡笠/null 毡衣/null 毡靴/null 毡馆/null 毪子/null 毫不/null 毫不介意/null 毫不动摇/null 毫不客气/null 毫不怀疑/null 毫不犹豫/null 毫不留情/null 毫不相干/null 毫不讲理/null 毫不费力/null 毫不迟疑/null 毫不逊色/null 毫亨/null 毫伏/null 毫克/null 毫分缕析/null 毫升/null 毫厘/null 毫厘不爽/null 毫厘千里/null 毫发/null 毫发不爽/null 毫发不犯/null 毫周波/null 毫子/null 毫安/null 毫安培/null 毫安表/null 毫巴/null 毫微/null 毫微秒/null 毫微米/null 毫无/null 毫无二致/null 毫无价值/null 毫无关系/null 毫无意义/null 毫无效果/null 毫无根据/null 毫无疑义/null 毫无疑问/null 毫无逊色/null 毫末/null 毫末之利/null 毫毛/null 毫洋/null 毫瓦/null 毫秒/null 毫米/null 毫米数/null 毫米水银柱/null 毫米汞柱/null 毫米波/null 毫脉/null 毫针/null 毯子/null 毯类/null 毵毵/null 毽子/null 毽球/null 氅衣/null 氆氇/null 氍毹/null 氏族/null 民不堪命/null 民不安枕/null 民不畏死/null 民不聊生/null 民丰/null 民为邦本/null 民主/null 民主主义/null 民主主义者/null 民主人士/null 民主促进会/null 民主党/null 民主党人/null 民主党派/null 民主化/null 民主国/null 民主墙/null 民主建港协进联盟/null 民主德国/null 民主改革/null 民主政治/null 民主权/null 民主权利/null 民主派/null 民主社会主义/null 民主进步党/null 民主集中制/null 民主革命/null 民乐/null 民事/null 民事权利/null 民事案件/null 民事法庭/null 民事纠纷/null 民事诉讼/null 民事责任/null 民以食为天/null 民以食本/null 民众/null 民俗/null 民俗学/null 民信局/null 民兵/null 民兵工作/null 民兵建设/null 民兵英雄/null 民兵队/null 民初/null 民力/null 民力雕弊/null 民办/null 民办公助/null 民办教师/null 民勤/null 民协/null 民反/null 民变/null 民变峰起/null 民和/null 民和县/null 民和年丰/null 民和年稔/null 民品/null 民团/null 民国/null 民国通俗演义/null 民夫/null 民女/null 民委/null 民学/null 民宅/null 民安/null 民安国泰/null 民安物阜/null 民官/null 民家/null 民宿/null 民富国强/null 民居/null 民工/null 民庭/null 民康物阜/null 民建/null 民建联/null 民强/null 民心/null 民怨/null 民怨沸腾/null 民怨盈涂/null 民怨鼎沸/null 民情/null 民情物理/null 民惟邦本/null 民意/null 民意测验/null 民意调查/null 民愤/null 民户/null 民房/null 民政/null 民政厅/null 民政局/null 民政工作/null 民数记/null 民族/null 民族主义/null 民族主义情绪/null 民族乐队/null 民族共同语/null 民族化/null 民族区域自治/null 民族同化/null 民族团/null 民族团结/null 民族大学/null 民族大迁徙/null 民族学/null 民族工业/null 民族平等/null 民族形式/null 民族志/null 民族性/null 民族文化/null 民族杂居地区/null 民族民主革命/null 民族沙文主义/null 民族独立/null 民族社会主义/null 民族自决/null 民族自决权/null 民族自治/null 民族自治地区/null 民族舞蹈/null 民族英雄/null 民族融合/null 民族解放运动/null 民族语言/null 民族资产阶级/null 民族资本/null 民智/null 民有/null 民望/null 民权/null 民权主义/null 民柬/null 民校/null 民歌/null 民歌手/null 民殷国富/null 民殷财阜/null 民气/null 民法/null 民法典/null 民淳俗厚/null 民熙物阜/null 民生/null 民生主义/null 民生凋敝/null 民生国计/null 民生涂炭/null 民生雕敝/null 民用/null 民用产品/null 民用工业/null 民用核国家/null 民用航空/null 民用飞机/null 民田/null 民瘼/null 民盟/null 民盟中央/null 民穷/null 民穷财匮/null 民穷财尽/null 民答那峨海/null 民粹/null 民粹派/null 民约/null 民胞物与/null 民脂/null 民脂民膏/null 民膏/null 民膏民脂/null 民航/null 民航班机/null 民船/null 民营/null 民营化/null 民警/null 民调/null 民谚/null 民谣/null 民负/null 民贼/null 民贼独夫/null 民运/null 民进/null 民进党/null 民选/null 民间/null 民间习俗/null 民间传说/null 民间协定/null 民间工艺/null 民间故事/null 民间文学/null 民间组织/null 民间舞/null 民间舞蹈/null 民间艺术/null 民间音乐/null 民防/null 民防体制/null 民防建设/null 民雄/null 民雄乡/null 民革/null 民革中央/null 民风/null 民食/null 气不公/null 气不平/null 气不忿儿/null 气不过/null 气义相投/null 气井/null 气人/null 气体/null 气体扩散/null 气体状/null 气体离心/null 气候/null 气候上/null 气候变化/null 气候学/null 气候学家/null 气候异常/null 气候暖化/null 气候温和/null 气候状况/null 气傲心高/null 气像人员/null 气充志定/null 气充志骄/null 气克斗牛/null 气冠三军/null 气冲冲/null 气冲斗牛/null 气冲牛斗/null 气冲霄汉/null 气冷/null 气冷式反应堆/null 气凌霄汉/null 气凝胶/null 气割/null 气力/null 气功/null 气功疗法/null 气动/null 气动力/null 气动噪声/null 气动开关/null 气动式/null 气动控制/null 气动泵/null 气动葫芦/null 气动车/null 气动闸/null 气势/null 气势凌人/null 气势宏伟/null 气势汹汹/null 气势浩大/null 气势熏灼/null 气势磅礴/null 气包子/null 气化/null 气压/null 气压图/null 气压层/null 气压山河/null 气压带/null 气压波/null 气压表/null 气压计/null 气口/null 气吁吁/null 气吐眉扬/null 气吐虹霓/null 气吞山河/null 气吞河山/null 气吞牛斗/null 气味/null 气味相投/null 气呼呼/null 气和/null 气咻咻/null 气咽声丝/null 气哼哼/null 气喘/null 气喘吁吁/null 气喘喘/null 气喘声/null 气喘如牛/null 气喘病/null 气嗓/null 气囊/null 气团/null 气坏/null 气垫/null 气垫船/null 气塞/null 气壮/null 气壮山河/null 气壮河山/null 气壮理直/null 气多/null 气大/null 气夯胸脯/null 气头上/null 气孔/null 气宇/null 气宇昂昂/null 气宇轩昂/null 气定神闲/null 气密/null 气层/null 气床/null 气度/null 气度不凡/null 气度恢宏/null 气得/null 气得志满/null 气忍声吞/null 气态/null 气急/null 气急败丧/null 气急败坏/null 气性/null 气息/null 气息奄奄/null 气息长/null 气恼/null 气愤/null 气愤等/null 气慨/null 气我/null 气数/null 气旋/null 气时/null 气昂昂/null 气昏/null 气杀/null 气杀钟馗/null 气极/null 气枪/null 气根/null 气楼/null 气概/null 气死/null 气死人/null 气气/null 气氛/null 气泡/null 气泵/null 气派/null 气流/null 气浪/null 气浴/null 气消胆夺/null 气涌如山/null 气涡/null 气温/null 气溶胶/null 气溶胶侦察仪/null 气滑式/null 气滞/null 气满志骄/null 气潭/null 气潮/null 气灯/null 气炉/null 气炸/null 气焊/null 气焰/null 气焰嚣张/null 气焰熏天/null 气煤/null 气状/null 气球/null 气瓶/null 气生气死/null 气田/null 气病/null 气痛/null 气盆/null 气盖山河/null 气盛/null 气眼/null 气短/null 气穴/null 气窗/null 气笛/null 气笼/null 气筒/null 气管/null 气管切开术/null 气管插管术/null 气管炎/null 气管痉挛/null 气管镜/null 气粗/null 气绝/null 气绝身亡/null 气缸/null 气肿/null 气肿疽/null 气胀/null 气胎/null 气胸/null 气腔/null 气腹/null 气臌/null 气般/null 气船/null 气艇/null 气色/null 气色好/null 气节/null 气虚/null 气血/null 气血方刚/null 气话/null 气谊相投/null 气象/null 气象万千/null 气象卫星/null 气象厅/null 气象台/null 气象图/null 气象学/null 气象学校/null 气象学者/null 气象局/null 气象情报/null 气象火箭/null 气象站/null 气象观测/null 气象观测站/null 气象计/null 气象雷达/null 气质/null 气贯长虹/null 气轮机/null 气运/null 气逆/null 气逾霄汉/null 气道/null 气量/null 气钻/null 气锅/null 气锤/null 气门/null 气门心/null 气闷/null 气闸/null 气阀/null 气阱/null 气陷/null 气隙/null 气雾免疫/null 气雾剂/null 气雾室/null 气韵/null 气馁/null 气骄志满/null 气魄/null 气鸣乐器/null 气鼓/null 气鼓鼓/null 氖气/null 氖灯/null 氘核/null 氙灯/null 氛围/null 氟利昂/null 氟化/null 氟化氢/null 氟化物/null 氟化钙/null 氟化银/null 氟橡胶/null 氟石/null 氟硅酸/null 氟酸/null 氢净合成油/null 氢化/null 氢化氰/null 氢化物/null 氢卤酸/null 氢原子/null 氢原子核/null 氢弹/null 氢核/null 氢气/null 氢氟烃/null 氢氟酸/null 氢氧/null 氢氧化/null 氢氧化物/null 氢氧化钙/null 氢氧化钠/null 氢氧化钾/null 氢氧化铝/null 氢氧化铵/null 氢氧吹管/null 氢氧基/null 氢氧根/null 氢氧根离子/null 氢氧焰/null 氢氧离子/null 氢氯酸/null 氢氰酸/null 氢溴酸/null 氢酶/null 氢酸/null 氢酸盐/null 氢键/null 氤氲/null 氦气/null 氦氖/null 氧乙炔/null 氧乙炔炬/null 氧乙炔焊/null 氧乙炔焊炬/null 氧割/null 氧化/null 氧化剂/null 氧化汞/null 氧化焰/null 氧化物/null 氧化罐/null 氧化诰/null 氧化还原酶/null 氧化酶/null 氧化钇/null 氧化钙/null 氧化钡/null 氧化铀/null 氧化铁/null 氧化铅/null 氧化铍/null 氧化铜/null 氧化铝/null 氧化铝陶瓷/null 氧化锂/null 氧化锌/null 氧化镁/null 氧化镱/null 氧原子/null 氧基/null 氧性/null 氧效应/null 氧气/null 氧氨/null 氧水/null 氧炔吹管/null 氧炔焰/null 氨化/null 氨吖啶/null 氨哮素/null 氨基/null 氨基塑料/null 氨基树脂/null 氨基比林/null 氨基甲酸酯类化合物/null 氨基苯酸/null 氨基葡糖/null 氨基葡萄糖/null 氨基酸/null 氨气/null 氨水/null 氨硫脲/null 氨纶/null 氨酸/null 氮化/null 氮化合/null 氮化物/null 氮原子/null 氮族/null 氮气/null 氮氧化物/null 氮肥/null 氮芥气/null 氯丁/null 氯丁橡胶/null 氯丹/null 氯乙烯/null 氯乙烷/null 氯仿/null 氯化/null 氯化亚锡/null 氯化氢/null 氯化氰/null 氯化物/null 氯化磷/null 氯化苦/null 氯化钙/null 氯化钠/null 氯化钾/null 氯化铁/null 氯化铝/null 氯化铵/null 氯化锌/null 氯化镁/null 氯单质/null 氯喹/null 氯安酮/null 氯已烯/null 氯林可霉素/null 氯气/null 氯水/null 氯洁霉素/null 氯甲烷/null 氯痤疮/null 氯碱工业/null 氯磷定/null 氯纶/null 氯胺酮/k粉 氯苯/null 氯酸/null 氯酸盐/null 氯酸钠/null 氯酸钾/null 氯霉素/null 氰化/null 氰化氢/null 氰化物/null 氰化钠/null 氰化钾/null 氰基/null 氰基细菌/null 氰氨/null 氰氨化钙/null 氰溴甲苯/null 氰胺/null 氰苷/null 氰酸/null 氰酸盐/null 氰铵/null 水上/null 水上乡/null 水上居民/null 水上摩托/null 水上运动/null 水上飞机/null 水下/null 水下核爆炸/null 水下核试验/null 水中/null 水中兵器/null 水中捉月/null 水中捞月/null 水中爆破/null 水乡/null 水乳/null 水乳之契/null 水乳交融/null 水井/null 水产/null 水产业/null 水产养殖/null 水产品/null 水产局/null 水产展/null 水亮/null 水仙/null 水仙花/null 水份/null 水份多/null 水位/null 水位标/null 水体/null 水供/null 水俣市/null 水俣病/null 水僊/null 水光/null 水光山色/null 水光接天/null 水兵/null 水具/null 水军/null 水冰/null 水冷/null 水净鹅飞/null 水准/null 水准仪/null 水准器/null 水凼/null 水分/null 水分多/null 水刑/null 水刑逼供/null 水利/null 水利化/null 水利厅/null 水利学/null 水利家/null 水利局/null 水利工程/null 水利建设/null 水利枢纽/null 水利资源/null 水利部/null 水到渠成/null 水刷石/null 水剂/null 水前/null 水力/null 水力发电/null 水力发电站/null 水力学/null 水力资源/null 水力鼓风/null 水动/null 水势/null 水化/null 水印/null 水厂/null 水压/null 水压机/null 水原/null 水原市/null 水合/null 水合物/null 水咀/null 水团/null 水圈/null 水土/null 水土不服/null 水土保持/null 水土流失/null 水土资源/null 水地/null 水坑/null 水坝/null 水坠坝/null 水垢/null 水城/null 水域/null 水塔/null 水塘/null 水墨/null 水墨画/null 水壁/null 水声/null 水壶/null 水壶盖/null 水处理/null 水大鱼多/null 水天一色/null 水头/null 水孔/null 水客/null 水害/null 水宿风餐/null 水密/null 水富/null 水尽/null 水尽山穷/null 水尽鹅飞/null 水层/null 水工/null 水师/null 水帘/null 水帘洞/null 水带/null 水幕/null 水平/null 水平仪/null 水平线/null 水平翼/null 水平角/null 水平轴/null 水平面/null 水库/null 水底/null 水底写字板/null 水底捞明月/null 水底捞针/null 水底摸月/null 水底相机/null 水彩/null 水彩画/null 水往低处流/null 水性/null 水性杨花/null 水性随邪/null 水怪/null 水患/null 水情/null 水成/null 水成岩/null 水战/null 水户市/null 水手/null 水手长/null 水文/null 水文地质/null 水文学/null 水文学家/null 水文气象/null 水文科学/null 水文站/null 水文预报/null 水斗/null 水断陆绝/null 水族箱/null 水族馆/null 水旱/null 水旱灾害/null 水旱轮作/null 水星/null 水晶/null 水晶体/null 水晶制/null 水晶宫/null 水晶球/null 水暖工/null 水曜日/null 水曲柳/null 水月观音/null 水月镜像/null 水月镜花/null 水木/null 水杉/null 水来/null 水来伸手饭来张口/null 水来土堰/null 水来土掩/null 水杨/null 水杨酸/null 水松/null 水林/null 水林乡/null 水果/null 水果刀/null 水果商/null 水果渣/null 水果画/null 水果糖/null 水果酒/null 水枪/null 水柱/null 水栖/null 水栗/null 水桶/null 水榭/null 水槽/null 水横枝/null 水母/null 水母体/null 水母目虾/null 水气/null 水汀/null 水池/null 水污/null 水污染/null 水汪汪/null 水汽/null 水沙/null 水沟/null 水沫/null 水泄/null 水泄不漏/null 水泄不通/null 水泡/null 水泡疹/null 水波/null 水泥/null 水泥匠/null 水泥厂/null 水泥浆/null 水泥船/null 水泵/null 水泻/null 水泽/null 水洁冰清/null 水洗/null 水洞/null 水洼/null 水流/null 水流花谢/null 水浅/null 水浆不入/null 水浇/null 水浇地/null 水浒/null 水浒传/null 水浒全传/null 水浒后传/null 水浴/null 水浸/null 水涝/null 水涡/null 水涨船高/null 水深/null 水深度/null 水深火热/null 水淹/null 水清无鱼/null 水渍/null 水渠/null 水温/null 水温表/null 水源/null 水源保护/null 水源林/null 水溜/null 水溶/null 水溶性/null 水溶液/null 水滨/null 水滴/null 水滴石穿/null 水漉漉/null 水漏/null 水潭/null 水火/null 水火不容/null 水火不相容/null 水火不辞/null 水火无交/null 水火无情/null 水灰比/null 水灵/null 水灵灵/null 水灾/null 水烟/null 水烟筒/null 水烟袋/null 水煤气/null 水煮蛋/null 水煮鱼/null 水牌/null 水牛/null 水牛儿/null 水牛城/null 水牢/null 水獭/null 水玉/null 水玻璃/null 水珠/null 水球/null 水球场/null 水理学/null 水瓢/null 水瓶/null 水瓶座/null 水生/null 水生类蔬菜/null 水田/null 水田芥/null 水电/null 水电站/null 水电费/null 水电部/null 水界/null 水疗/null 水疗法/null 水疗院/null 水疱/null 水痘/null 水皮儿/null 水盂/null 水盆/null 水相/null 水碓/null 水碧山青/null 水碱/null 水碾/null 水磨/null 水磨功夫/null 水磨沟/null 水磨沟区/null 水磨石/null 水神/null 水禽/null 水秀山明/null 水稻/null 水稻土/null 水穷山尽/null 水立方/null 水竹/null 水笔/null 水筒/null 水筲/null 水管/null 水管工/null 水管工人/null 水管车/null 水管面/null 水箱/null 水米无交/null 水粉/null 水粉画/null 水系/null 水红/null 水纹/null 水线/null 水绵/null 水绿/null 水绿山青/null 水缸/null 水罐/null 水网/null 水网地/null 水翼船/null 水老鸦/null 水耕法/null 水肥/null 水肺/null 水肿/null 水肿病/null 水胶/null 水能/null 水能源/null 水能载舟亦能覆舟/null 水脉/null 水脚/null 水臌/null 水至清则无鱼/null 水舀/null 水舀子/null 水色/null 水色山光/null 水花/null 水花生/null 水芹/null 水草/null 水荒/null 水荡/null 水莽/null 水菖蒲/null 水萍/null 水落/null 水落归槽/null 水落石出/null 水落管/null 水葫芦/null 水葬/null 水葱/null 水蒸气/null 水蒸汽/null 水蓼/null 水蕹菜/null 水藻/null 水虎鱼/null 水虱/null 水虿/null 水蚀/null 水蚤/null 水蛇/null 水蛇座/null 水蛇腰/null 水蛭/null 水蛭素/null 水蜜桃/null 水蜥/null 水螅/null 水螅体/null 水表/null 水袖/null 水覆难收/null 水解/null 水解酶/null 水貂/null 水货/null 水质/null 水质污染/null 水费/null 水资源/null 水路/null 水车/null 水车前/null 水轮/null 水轮机/null 水轮泵/null 水边/null 水运/null 水远山摇/null 水远山长/null 水送山迎/null 水选/null 水通灯亮/null 水遁/null 水道/null 水道口/null 水道学/null 水部/null 水酒/null 水里/null 水里乡/null 水量/null 水钵/null 水铅/null 水银/null 水银剂/null 水银柱/null 水银灯/null 水锈/null 水锤/null 水门/null 水门事件/null 水门汀/null 水闸/null 水阁/null 水阔山高/null 水陆/null 水陆两用/null 水陆交通/null 水陆师/null 水陆毕陈/null 水陆空/null 水陆联运/null 水险/null 水障碍/null 水雷/null 水雷区/null 水雾/null 水青冈/null 水面/null 水面上/null 水面下/null 水靴/null 水饺/null 水饺儿/null 水鬼/null 水鳖子/null 水鸟/null 水鸡/null 水鸪鸪/null 水鹤/null 水鹿/null 水龙/null 水龙卷/null 水龙头/null 水龙带/null 水水的/null 永不/null 永不再/null 永不生锈/null 永世/null 永世其芳/null 永世无穷/null 永丰/null 永久/null 永久冻土/null 永久和平/null 永久居民/null 永久性/null 永久磁铁/null 永久虚电路/null 永乐/null 永乐大典/null 永享/null 永仁/null 永传不朽/null 永保/null 永修/null 永兴/null 永冻土/null 永别/null 永动机/null 永吉/null 永吉地区/null 永和/null 永和市/null 永善/null 永嘉/null 永嘉郡/null 永垂/null 永垂不朽/null 永垂青史/null 永城/null 永字八法/null 永存/null 永存不朽/null 永宁/null 永安/null 永安乡/null 永定/null 永定区/null 永定河/null 永定门/null 永寿/null 永居/null 永川/null 永川区/null 永州/null 永平/null 永年/null 永康/null 永往/null 永德/null 永志不忘/null 永恒/null 永新/null 永无/null 永无休止/null 永无止境/null 永昌/null 永春/null 永永无穷/null 永永远远/null 永泰/null 永济/null 永济渠/null 永清/null 永珍/null 永生/null 永生永世/null 永生鸟/null 永登/null 永眠/null 永矢/null 永磁/null 永福/null 永胜/null 永能/null 永葆青春/null 永诀/null 永诀式/null 永贞内禅/null 永贞革新/null 永远/null 永逝/null 永锡不匮/null 永靖/null 永靖乡/null 永顺/null 永驻/null 氹仔/null 氽子/null 氽汤/null 氽烫/null 氾滥/null 汀曲/null 汀江/null 汀洲/null 汀渚/null 汀线/null 汁儿/null 汁水/null 汁液/null 汁质/null 求三拜四/null 求主/null 求之/null 求之不得/null 求之过急/null 求乞/null 求亲/null 求亲靠友/null 求人/null 求人不如求己/null 求仁得仁/null 求他/null 求你/null 求借/null 求值/null 求偶/null 求全/null 求全之毁/null 求全责备/null 求其友声/null 求出/null 求利/null 求剑刻舟/null 求助/null 求助于/null 求助于人/null 求医/null 求医癖/null 求取/null 求变/null 求同/null 求同存异/null 求名夺利/null 求名求利/null 求名责实/null 求告/null 求和/null 求备一人/null 求大同/null 求大同存小异/null 求好/null 求婚/null 求子/null 求存/null 求学/null 求学无坦途/null 求实/null 求幂/null 求得/null 求怜经/null 求情/null 求情告饶/null 求成/null 求成过急/null 求我/null 求战/null 求才/null 求才若渴/null 求援/null 求效益/null 求救/null 求教/null 求新/null 求新立异/null 求是/null 求根/null 求死/null 求死不得/null 求死愿望/null 求求/null 求求你/null 求法/null 求活/null 求爱/null 求爱者/null 求生/null 求生不得求死不能/null 求生不生求死不死/null 求生害义/null 求生意志/null 求田问舍/null 求真/null 求知/null 求知欲/null 求神/null 求神问卜/null 求福/null 求福禳灾/null 求积/null 求积分/null 求稳/null 求签/null 求精/null 求索/null 求职/null 求职信/null 求职者/null 求胜/null 求胜心切/null 求艺/null 求荣卖国/null 求补/null 求见/null 求解/null 求证/null 求诊/null 求贤/null 求贤下士/null 求贤如渴/null 求贤用士/null 求贤若渴/null 求过/null 求远/null 求降/null 求雨/null 求靠/null 求饶/null 求马唐肆/null 求鱼缘木/null 汇业财经集团/null 汇业银行/null 汇丰/null 汇丰券/null 汇丰银行/null 汇为/null 汇了/null 汇付/null 汇价/null 汇兑/null 汇入/null 汇出/null 汇出行/null 汇划/null 汇到/null 汇合/null 汇回/null 汇寄/null 汇川/null 汇川区/null 汇差/null 汇往/null 汇总/null 汇成/null 汇报/null 汇报人/null 汇报会/null 汇报演出/null 汇拢/null 汇拨/null 汇整/null 汇映/null 汇款/null 汇款人/null 汇款单/null 汇水/null 汇泉/null 汇注/null 汇流/null 汇流环/null 汇演/null 汇炉/null 汇点/null 汇率/null 汇票/null 汇积/null 汇算/null 汇给/null 汇编/null 汇编程序/null 汇编语言/null 汇缴/null 汇聚/null 汇落/null 汇表/null 汇费/null 汇路/null 汇量/null 汇金/null 汇集/null 汇集者/null 汉中/null 汉中地区/null 汉书/null 汉人/null 汉他病毒/null 汉代/null 汉元帝/null 汉剧/null 汉办/null 汉化/null 汉医/null 汉南/null 汉南区/null 汉卡/null 汉口/null 汉台/null 汉台区/null 汉唐/null 汉四郡/null 汉坦病毒/null 汉城/null 汉城特别市/null 汉堡/null 汉堡包/null 汉堡王/null 汉墓/null 汉奸/null 汉姓/null 汉子/null 汉字字体/null 汉字查字法/null 汉字编码/null 汉学/null 汉学家/null 汉学系/null 汉官威仪/null 汉宣帝/null 汉宫/null 汉密尔敦/null 汉密尔顿/null 汉寿/null 汉尼拔/null 汉川/null 汉文/null 汉文帝/null 汉文帝刘恒/null 汉斯/null 汉旺镇/null 汉明帝/null 汉显/null 汉服/null 汉朝/null 汉末魏初/null 汉森/null 汉武帝/null 汉民/null 汉民族/null 汉水/null 汉江/null 汉沽/null 汉源/null 汉滨/null 汉滨区/null 汉献帝/null 汉白玉/null 汉福斯/null 汉简/null 汉腔/null 汉英/null 汉英互译/null 汉萨同盟/null 汉藏语系/null 汉译/null 汉语分词/null 汉语拼音/null 汉语水平考试/null 汉诺威/null 汉贼不两立/null 汉阳/null 汉阳区/null 汉阴/null 汉高祖/null 汉高祖刘邦/null 汊港/null 汎滥/null 汐止/null 汐止市/null 汕头地区/null 汕头大学/null 汕尾/null 汗国/null 汗如雨下/null 汗孔/null 汗斑/null 汗毛/null 汗水/null 汗津津/null 汗洽股栗/null 汗流/null 汗流浃背/null 汗流满面/null 汗液/null 汗渍/null 汗湿/null 汗漫/null 汗牛充栋/null 汗珠/null 汗珠子/null 汗碱/null 汗脚/null 汗腺/null 汗腾格里峰/null 汗臭/null 汗血宝马/null 汗衫/null 汗褂/null 汗褂儿/null 汗褟儿/null 汗迹/null 汗青/null 汗颜/null 汗马/null 汗马之功/null 汗马之劳/null 汗马之绩/null 汗马功劳/null 汗马功绩/null 汗马勋劳/null 汛情/null 汛期/null 汜滥/null 汝南/null 汝南月旦/null 汝城/null 汝州/null 汝等/null 汝辈/null 汝阳/null 汞中毒/null 汞剂/null 汞合金/null 汞溴/null 汞溴红/null 江上/null 江东/null 江东区/null 江东父老/null 江东独步/null 江中/null 江云渭树/null 江八点/null 江北/null 江华县/null 江南/null 江南区/null 江南四大才子/null 江南大学/null 江南海北/null 江南省/null 江原道/null 江口/null 江右/null 江城/null 江城区/null 江城县/null 江夏/null 江夏区/null 江天/null 江天一色/null 江孜/null 江孜地区/null 江孜镇/null 江宁/null 江宁区/null 江宁条约/null 江安/null 江山/null 江山不老/null 江山之异/null 江山之恨/null 江山半壁/null 江山好改本性难移/null 江山好改秉性难移/null 江山如故/null 江山如画/null 江山易帜/null 江山易改/null 江山易改禀性难移/null 江岸/null 江岸区/null 江川/null 江州/null 江州区/null 江左/null 江干/null 江干区/null 江平/null 江心/null 江心补漏/null 江户/null 江月/null 江水/null 江永/null 江汉/null 江汉区/null 江沙/null 江河/null 江河战斗/null 江河日下/null 江河湖海/null 江河行地/null 江油/null 江泽民/null 江洋大盗/null 江津/null 江津区/null 江流/null 江浙/null 江浦/null 江浦县/null 江海/null 江海之学/null 江海区/null 江海同归/null 江海心驰魏阙/null 江淮/null 江湖/null 江湖义气/null 江湖医生/null 江湖艺人/null 江湖骗子/null 江源/null 江源区/null 江潮/null 江猪/null 江珧/null 江珧柱/null 江畔/null 江米/null 江米酒/null 江翻海倒/null 江翻海沸/null 江蓠/null 江表/null 江西腊/null 江豚/null 江轮/null 江边/null 江达/null 江郎才尽/null 江郎才掩/null 江都/null 江酌之喜/null 江门/null 江阳区/null 江阴/null 江陵/null 江青/null 江面/null 江鱼/null 池上/null 池上乡/null 池中之物/null 池堂/null 池塘/null 池子/null 池州/null 池座/null 池水/null 池汤/null 池沼/null 池田勇人/null 池盐/null 池边/null 池鱼之殃/null 池鱼之灾/null 池鱼林木/null 池鱼笼鸟/null 池鱼遭殃/null 池鹭/null 污七八糟/null 污七糟八/null 污名/null 污吏/null 污吏黜胥/null 污垢/null 污损/null 污斑/null 污染/null 污染区/null 污染源/null 污染物/null 污染环境/null 污染空气/null 污染者/null 污毒/null 污水/null 污水坑/null 污水处理/null 污水处理厂/null 污水池/null 污水灌溉/null 污泥/null 污泥浊水/null 污浊/null 污渍/null 污点/null 污物/null 污痕/null 污秽/null 污秽物/null 污粘/null 污蔑/null 污言秽语/null 污辱/null 污迹/null 污黑/null 汤剂/null 汤力水/null 汤加/null 汤加人/null 汤加群岛/null 汤加里罗/null 汤勺/null 汤包/null 汤匙/null 汤原/null 汤团/null 汤园/null 汤圆/null 汤壶/null 汤头/null 汤姆/null 汤姆・克兰西/null 汤姆・克鲁斯/null 汤姆・索亚历险记/null 汤姆・罗宾斯/null 汤姆孙/null 汤姆斯杯/null 汤姆索亚历险记/null 汤姆逊/null 汤婆子/null 汤川/null 汤川・秀树/null 汤料/null 汤旺河/null 汤旺河区/null 汤显祖/null 汤普森/null 汤武革命/null 汤水/null 汤汁/null 汤池/null 汤池铁城/null 汤汤/null 汤泉/null 汤液/null 汤玉麟/null 汤盘/null 汤碗/null 汤类/null 汤罐/null 汤药/null 汤锅/null 汤阴/null 汤面/null 汤饭/null 汤饼筵/null 汨水/null 汨汨/null 汨罗江/null 汩声/null 汩汩/null 汩没/null 汪东城/null 汪啸风/null 汪子/null 汪汪/null 汪洋/null 汪洋大海/null 汪洋浩博/null 汪洋自恣/null 汪洋自肆/null 汪洋闳肆/null 汪流/null 汪清/null 汪精卫/null 汪道涵/null 汰旧换新/null 汲出/null 汲取/null 汲尽/null 汲干/null 汲引/null 汲水/null 汲水桶/null 汲汲/null 汲汲皇皇/null 汴州/null 汴梁/null 汶上/null 汶川/null 汶川地震/null 汶川大地震/null 汶莱/null 汹汹/null 汹涌/null 汹涌澎湃/null 汽体/null 汽化/null 汽化器/null 汽化热/null 汽化物/null 汽化计/null 汽提/null 汽暖/null 汽机/null 汽枪/null 汽水/null 汽油/null 汽油弹/null 汽油机/null 汽油醇/null 汽泵/null 汽浴/null 汽灯/null 汽球/null 汽碾/null 汽笛/null 汽笛声/null 汽缸/null 汽船/null 汽艇/null 汽车/null 汽车厂/null 汽车号牌/null 汽车夏利股份有限公司/null 汽车展览会/null 汽车库/null 汽车戏院/null 汽车技工/null 汽车旅馆/null 汽车炸弹/null 汽车炸弹事件/null 汽车狂/null 汽车站/null 汽车道/null 汽轮/null 汽轮发电机/null 汽轮机/null 汽运/null 汽配/null 汽酒/null 汽锅/null 汽锤/null 汽闸/null 汽阀/null 汾水/null 汾河/null 汾西/null 汾酒/null 汾阳/null 沁人心肺/null 沁人心脾/null 沁人肺腑/null 沁入/null 沁入心脾/null 沁水/null 沁源/null 沁阳/null 沂南/null 沂水/null 沂水春风/null 沂河/null 沂源/null 沃伦/null 沃伦・巴菲特/null 沃克斯豪尔/null 沃土/null 沃地/null 沃基/null 沃壤/null 沃尔夫/null 沃尔夫奖/null 沃尔夫斯堡/null 沃尔沃/null 沃尔特・惠特曼/null 沃尔玛/null 沃尔芬森/null 沃州/null 沃水/null 沃灌/null 沃特森/null 沃田/null 沃衍/null 沃达丰/null 沃野/null 沃野千里/null 沃顿/null 沃饶/null 沅水/null 沅江/null 沅江九肋/null 沅陵/null 沆瀣/null 沆瀣一气/null 沈丘/null 沈从文/null 沈北新/null 沈北新区/null 沈国放/null 沈复/null 沈大铁路/null 沈寂/null 沈思/null 沈河/null 沈河区/null 沈淀剂/null 沈淀物/null 沈淀素/null 沈溺/null 沈约/null 沈腰潘鬓/null 沈莹/null 沈葆祯/null 沈谜于/null 沈闷/null 沈阳军区/null 沈静/null 沈鱼落雁/null 沈默/null 沈默寡言/null 沉下/null 沉不住气/null 沉了/null 沉井/null 沉住气/null 沉入/null 沉冤/null 沉冤莫白/null 沉凝/null 沉博绝丽/null 沉厚寡言/null 沉吟/null 沉吟不决/null 沉吟不语/null 沉吟未决/null 沉寂/null 沉床/null 沉得/null 沉得住气/null 沉思/null 沉思冥想/null 沉思默想/null 沉李浮瓜/null 沉毅/null 沉水植物/null 沉沉/null 沉没/null 沉没成本/null 沉沦/null 沉沧/null 沉河/null 沉浮/null 沉浸/null 沉浸于/null 沉淀/null 沉淀出/null 沉淀法/null 沉淀物/null 沉渐刚克/null 沉渣/null 沉湎/null 沉湎淫逸/null 沉湎酒色/null 沉溺/null 沉溺于/null 沉滓泛起/null 沉滞/null 沉潜刚克/null 沉潭/null 沉灶产蛙/null 沉物/null 沉甸甸/null 沉疴/null 沉痛/null 沉痛怀念/null 沉痼/null 沉着/null 沉着应战/null 沉睡/null 沉积/null 沉积作用/null 沉积岩/null 沉积带/null 沉积物/null 沉稳/null 沉箱/null 沉缅/null 沉缓/null 沉舟/null 沉舟破釜/null 沉船/null 沉船事故/null 沉落/null 沉著/null 沉著痛快/null 沉迷/null 沉邃/null 沉郁/null 沉郁顿挫/null 沉醉/null 沉醉于/null 沉重/null 沉重寡言/null 沉重少言/null 沉重打击/null 沉重负担/null 沉闷/null 沉降/null 沉陷/null 沉雄古逸/null 沉雄悲壮/null 沉雷/null 沉静/null 沉静寡言/null 沉静少言/null 沉香/null 沉鱼落雁/null 沉默/null 沉默不语/null 沉默寡言/null 沉默是金/null 沏茶/null 沐川/null 沐恩/null 沐浴/null 沐浴乳/null 沐浴油/null 沐浴球/null 沐浴用品/null 沐浴者/null 沐浴花/null 沐浴露/null 沐猴冠冕/null 沐猴而冠/null 沐猴衣冠/null 沐雨栉风/null 沓沓/null 沙一般/null 沙丁胺醇/null 沙丁鱼/null 沙丘/null 沙中/null 沙乌地阿拉伯/null 沙井/null 沙井口/null 沙依巴克/null 沙依巴克区/null 沙俄/null 沙僧/null 沙利迈度/null 沙加缅度/null 沙包/null 沙化/null 沙参/null 沙发/null 沙司/null 沙和尚/null 沙哑/null 沙嘴/null 沙土/null 沙地/null 沙场/null 沙坑/null 沙坑杆/null 沙坝/null 沙坡头/null 沙坡头区/null 沙坪坝/null 沙堆/null 沙堡/null 沙声/null 沙头角/null 沙奎尔・奥尼尔/null 沙姆沙伊赫/null 沙威玛/null 沙子/null 沙家浜/null 沙尘/null 沙尘天气/null 沙尘暴/null 沙层/null 沙岗/null 沙岩/null 沙岸/null 沙巴/null 沙市/null 沙市区/null 沙弥/null 沙律/null 沙悟净/null 沙拉/null 沙捞越/null 沙文/null 沙文主义/null 沙暴/null 沙朗/null 沙朗牛排/null 沙林/null 沙林水解酶/null 沙果/null 沙枣/null 沙柱/null 沙柳/null 沙梨/null 沙棘/null 沙棘属/null 沙沙/null 沙沙声/null 沙河/null 沙河口区/null 沙法维王朝/null 沙洋/null 沙洲/null 沙浅儿/null 沙湾/null 沙湾区/null 沙滩/null 沙滩排球/null 沙滩鞋/null 沙漏/null 沙漠/null 沙漠中/null 沙漠之狐/null 沙漠化/null 沙漠气候/null 沙漠研究/null 沙爹/null 沙爹酱/null 沙特/null 沙特阿拉伯/null 沙特阿拉伯人/null 沙特鲁/null 沙獾/null 沙琪玛/null 沙瓤/null 沙瓦玛/null 沙田/null 沙画/null 沙畹/null 沙皇/null 沙皇俄国/null 沙皇制/null 沙盘/null 沙盘推演/null 沙眼/null 沙石/null 沙砾/null 沙碛/null 沙祖康/null 沙窗/null 沙粒/null 沙糖/null 沙肝儿/null 沙脑鱼/null 沙船/null 沙茶/null 沙荒/null 沙虫/null 沙蚕/null 沙袋/null 沙西米/null 沙质/null 沙里淘金/null 沙金/null 沙锅/null 沙锅浅儿/null 沙门/null 沙门氏菌/null 沙门菌/null 沙雅/null 沙鱼/null 沙鸡/null 沙鸥/null 沙鹿/null 沙鹿镇/null 沙鼠/null 沙龙/null 沛雨甘霖/null 沟中/null 沟内/null 沟区/null 沟壑/null 沟壕/null 沟外/null 沟子/null 沟床/null 沟底/null 沟施/null 沟桥/null 沟槽/null 沟沿/null 沟沿儿/null 沟洫/null 沟浅/null 沟涧/null 沟渎/null 沟渠/null 沟灌/null 沟谷/null 沟通/null 沟通管道/null 沟道/null 沟门/null 沟鼠/null 没上没下/null 没不暇给/null 没世/null 没世不忘/null 没世难忘/null 没中/null 没了/null 没事/null 没事儿/null 没事找事/null 没于/null 没交/null 没亲没故/null 没人/null 没人住/null 没人味/null 没人味儿/null 没人骑/null 没什么/null 没住/null 没信心/null 没入/null 没六儿/null 没关/null 没关系/null 没准/null 没准儿/null 没几天/null 没分寸/null 没分开/null 没到/null 没力气/null 没办法/null 没劲/null 没劲儿/null 没受/null 没变/null 没口/null 没吃没穿/null 没听/null 没命/null 没啥/null 没围/null 没处/null 没多久/null 没大改变/null 没大没小/null 没头官司/null 没头没脑/null 没头没脸/null 没头脑/null 没奈何/null 没好/null 没安好心/null 没完/null 没完没了/null 没底/null 没弄脏/null 没当回事/null 没影/null 没得说/null 没心没肺/null 没心眼/null 没怀/null 没思想/null 没情没绪/null 没想/null 没想到/null 没意思/null 没戏/null 没打中/null 没把/null 没拿到/null 没收/null 没收物/null 没放/null 没救/null 没数/null 没日没夜/null 没有/null 没有的/null 没有不散的宴席/null 没有事/null 没有人烟/null 没有什么/null 没有什么不可能/null 没有关系/null 没有办法/null 没有劲头/null 没有劲头儿/null 没有品味/null 没有差别/null 没有形状/null 没有意义/null 没有意思/null 没有法/null 没有生育能力/null 没有脸皮/null 没有规矩/null 没有说的/null 没来/null 没来由/null 没气力/null 没水平/null 没没/null 没没无闻/null 没治/null 没治了/null 没法/null 没法没天/null 没深没浅/null 没清/null 没溜儿/null 没热情/null 没生/null 没用/null 没电/null 没病/null 没皮没脸/null 没看到/null 没种/null 没空儿/null 没精打彩/null 没精打采/null 没精神/null 没细菌/null 没经验/null 没羞/null 没羞没臊/null 没而不朽/null 没能/null 没脑筋/null 没脚/null 没脸/null 没脸没皮/null 没脸见人/null 没良心/null 没药/null 没药树/null 没落/null 没落子/null 没被/null 没觉/null 没认/null 没词儿/null 没话/null 没说的/null 没谱/null 没谱儿/null 没赶上/null 没趣/null 没趣味/null 没路/null 没身不忘/null 没轻没重/null 没辙/null 没过几天/null 没过多久/null 没醉/null 没钱/null 没错/null 没门儿/null 没问题/null 没顶/null 没领会/null 没风味/null 没食/null 没骨头/null 没齿不忘/null 没齿难忘/null 没齿难泯/null 沣水/null 沤凼/null 沤粪/null 沤肥/null 沥水/null 沥沥/null 沥胆堕肝/null 沥胆披肝/null 沥胆抽肠/null 沥血/null 沥血叩心/null 沥陈鄙见/null 沥青/null 沥青铀矿/null 沦丧/null 沦为/null 沦亡/null 沦入/null 沦没/null 沦没丧亡/null 沦浃/null 沦灭/null 沦肌浃髓/null 沦落/null 沦陷/null 沦陷区/null 沧州/null 沧桑/null 沧桑之变/null 沧江/null 沧浪/null 沧浪亭/null 沧浪区/null 沧海/null 沧海一粟/null 沧海桑田/null 沧海横流/null 沧海遗珠/null 沧源/null 沧源县/null 沧溟/null 沪剧/null 沪宁线/null 沪宁铁路/null 沪市/null 沪杭/null 沪杭铁路/null 沪深港/null 沪综指/null 沪语/null 沫儿/null 沫子/null 沫状/null 沭阳/null 沮丧/null 沮洳/null 沮遏/null 沱沱河/null 沱灢/null 沱茶/null 河不出图/null 河东/null 河东狮/null 河东狮吼/null 河中/null 河伯/null 河内/null 河北工业大学/null 河北日报/null 河北杨/null 河北梆子/null 河北科技大学/null 河南县/null 河南坠子/null 河南梆子/null 河卵石/null 河叉/null 河口/null 河口区/null 河名/null 河坝/null 河堤/null 河塘/null 河外/null 河外星云/null 河外星系/null 河套/null 河姆渡/null 河姆渡遗址/null 河山/null 河山带砺/null 河岸/null 河川/null 河工/null 河床/null 河底/null 河弯/null 河心/null 河曲/null 河村/null 河柳/null 河梁/null 河槽/null 河殇/null 河段/null 河水/null 河水不犯井水/null 河汉/null 河汊子/null 河江/null 河池/null 河池地区/null 河汾门下/null 河沟/null 河沿/null 河泥/null 河洛人/null 河津/null 河流/null 河流地貌学/null 河浜/null 河清海晏/null 河清难俟/null 河渠/null 河港/null 河湾/null 河源/null 河滨/null 河滩/null 河漫滩/null 河狸/null 河畔/null 河神/null 河童/null 河粉/null 河系/null 河网/null 河肥/null 河落海干/null 河蚌/null 河蟹/null 河西/null 河西堡/null 河西堡镇/null 河西走廊/null 河谷/null 河豚/null 河豚毒素/null 河身/null 河边/null 河运/null 河道/null 河里/null 河间/null 河防/null 河面/null 河马/null 河鱼/null 河鱼之疾/null 河鱼腹疾/null 河鼓二/null 河鼠/null 沸反盈天/null 沸水/null 沸沸/null 沸沸扬扬/null 沸泉/null 沸点/null 沸热/null 沸石/null 沸腾/null 沸腾床/null 沸腾钢/null 油了/null 油井/null 油亮/null 油价/null 油光/null 油光光/null 油光可鉴/null 油光水滑/null 油光漆/null 油制/null 油印/null 油印机/null 油厂/null 油压/null 油压机/null 油品/null 油嘴/null 油嘴滑舌/null 油嘴狗舌/null 油囊/null 油坊/null 油垢/null 油塔/null 油墨/null 油壶/null 油头滑脑/null 油头滑脸/null 油头粉面/null 油子/null 油孔/null 油封/null 油尖旺/null 油尺/null 油层/null 油布/null 油库/null 油底壳/null 油彩/null 油性/null 油料/null 油料作物/null 油旋/null 油条/null 油松/null 油枪/null 油枯/null 油柑/null 油柿/null 油桃/null 油桐/null 油桶/null 油棕/null 油椰子/null 油槽/null 油橄榄/null 油款/null 油母页岩/null 油毛毡/null 油毡/null 油气/null 油气田/null 油水/null 油池/null 油污/null 油汪汪/null 油油/null 油泥/null 油泵/null 油渍/null 油渍麻花/null 油渣/null 油渣果/null 油温/null 油滑/null 油滴/null 油漆/null 油漆匠/null 油漆工/null 油灯/null 油灰/null 油炒/null 油炸/null 油炸圈饼/null 油炸锅/null 油炸饼/null 油炸鬼/null 油烟/null 油然/null 油然而生/null 油煎/null 油煎火燎/null 油煎饼/null 油状/null 油猾/null 油瓜/null 油瓶/null 油田/null 油田伴生气/null 油画/null 油皮/null 油盐酱醋/null 油盘/null 油石/null 油矿/null 油砂/null 油磨/null 油票/null 油税/null 油站/null 油管/null 油箱/null 油类/null 油精/null 油纸/null 油绿/null 油缸/null 油罐/null 油罐车/null 油耗/null 油脂/null 油腔滑调/null 油腻/null 油膏/null 油船/null 油花/null 油苗/null 油茶/null 油茶面儿/null 油莎草/null 油菜/null 油菜籽/null 油葫芦/null 油藏/null 油裙/null 油车/null 油轮/null 油迹/null 油酯/null 油酸/null 油量/null 油锅/null 油锯/null 油门/null 油鞋/null 油页岩/null 油饰/null 油饼/null 油香/null 油鸡/null 油麦/null 油麦菜/null 油黑/null 治下/null 治不好/null 治世/null 治丝而棼/null 治丧/null 治丧从俭/null 治乱/null 治乱兴亡/null 治乱存亡/null 治保/null 治保主任/null 治兵/null 治军/null 治喘/null 治国/null 治国安民/null 治外法权/null 治多/null 治大国若烹小鲜/null 治好/null 治学/null 治安/null 治安员/null 治安工作/null 治安管理/null 治家/null 治山/null 治性/null 治愈/null 治愚治穷/null 治所/null 治未病/null 治本/null 治标/null 治标不治本/null 治死/null 治气/null 治水/null 治河/null 治理/null 治理整顿/null 治理环境/null 治疗/null 治疗前/null 治疗学/null 治疗法/null 治疗炎症/null 治病/null 治病救人/null 治罪/null 治肝病/null 治装/null 治装费/null 治这/null 治黄/null 沼气/null 沼泽/null 沼泽似/null 沼泽地/null 沼泽地带/null 沼狸/null 沽名/null 沽名吊誉/null 沽名干誉/null 沽名邀誉/null 沽名钓誉/null 沽售/null 沽水期/null 沽源/null 沽酒当垆/null 沾上/null 沾亲带故/null 沾体涂足/null 沾光/null 沾化/null 沾唇/null 沾手/null 沾染/null 沾染世俗/null 沾染习气/null 沾染控制/null 沾染程度检查仪/null 沾水/null 沾污/null 沾沾自喜/null 沾沾自满/null 沾沾自足/null 沾湿/null 沾满/null 沾濡/null 沾益/null 沾花惹草/null 沾血/null 沾襟/null 沾边/null 沾酱/null 沿上/null 沿习/null 沿伸/null 沿例/null 沿儿/null 沿岸/null 沿岸地区/null 沿帽/null 沿条儿/null 沿江/null 沿河/null 沿河县/null 沿波讨源/null 沿洄/null 沿流溯源/null 沿流讨源/null 沿海/null 沿海发展战略/null 沿海地区/null 沿海地带/null 沿海州/null 沿海开放城市/null 沿海港口/null 沿海经济/null 沿海经济区/null 沿海经济带/null 沿海航行权/null 沿滩/null 沿滩区/null 沿用/null 沿用至今/null 沿着/null 沿线/null 沿著/null 沿街/null 沿袭/null 沿路/null 沿边/null 沿边儿/null 沿途/null 沿门托钵/null 沿阶草/null 沿革/null 泄了/null 泄出/null 泄劲/null 泄密/null 泄底/null 泄怒/null 泄恨/null 泄愤/null 泄殖肛孔/null 泄殖腔/null 泄气/null 泄泻/null 泄洪/null 泄洪道/null 泄洪闸/null 泄流/null 泄漏/null 泄漏天机/null 泄物/null 泄痢/null 泄私愤/null 泄药/null 泄露/null 泄露天机/null 泅水/null 泅泳/null 泅渡/null 泅游/null 泉下/null 泉华/null 泉城/null 泉山/null 泉山区/null 泉州/null 泉币/null 泉水/null 泉涌/null 泉港/null 泉港区/null 泉源/null 泉眼/null 泉石膏肓/null 泉路/null 泊位/null 泊地/null 泊头/null 泊定/null 泊岸/null 泊松/null 泊松分布/null 泊船/null 泊车/null 泌乳/null 泌尿/null 泌尿器/null 泌尿系统/null 泌尿系统感染/null 泌液/null 泌腺/null 泌阳/null 泔水/null 泔脚/null 法上/null 法书/null 法事/null 法人/null 法人地位/null 法人资格/null 法令/null 法会/null 法位/null 法儿/null 法兰/null 法兰克/null 法兰克林/null 法兰克福/null 法兰克福学派/null 法兰克福汇报/null 法兰克福证券交易所/null 法兰克福车展/null 法兰德斯/null 法兰斯/null 法兰盘/null 法兰绒/null 法兰西体育场/null 法兰西帝国/null 法兰西斯/null 法兰西斯・培根/null 法兰西斯・斐迪南/null 法典/null 法兹鲁拉/null 法军/null 法出多门/null 法则/null 法利赛人/null 法制/null 法制办公室/null 法制化/null 法制史/null 法制建设/null 法制日报/null 法制观念/null 法制轨道/null 法力/null 法力无边/null 法办/null 法务/null 法勒斯/null 法医/null 法医学/null 法华经/null 法史/null 法号/null 法名/null 法向量/null 法商/null 法器/null 法国一八四八年革命/null 法国七月革命/null 法国人/null 法国号/null 法国唯物主义/null 法国大革命/null 法国式/null 法国梧桐/null 法国航空/null 法国航空公司/null 法国资产阶级革命/null 法国长棍/null 法国革命/null 法场/null 法塔赫/null 法外/null 法外施仁/null 法子/null 法学/null 法学博士/null 法学士/null 法学家/null 法学院/null 法官/null 法官席/null 法定/null 法定人数/null 法定年龄/null 法定继承人/null 法定货币/null 法宝/null 法家/null 法射线/null 法尔卡什/null 法属/null 法属圭亚那/null 法币/null 法师/null 法帖/null 法库/null 法度/null 法庭/null 法庭调查/null 法庭辩论/null 法式/null 法式色拉酱/null 法律/null 法律上/null 法律制裁/null 法律学/null 法律学家/null 法律效力/null 法律界/null 法律约束力/null 法律责任/null 法律顾问/null 法拉/null 法拉利/null 法拉盛/null 法拉第/null 法政/null 法新社/null 法旨/null 法曹/null 法服/null 法朗/null 法术/null 法权/null 法条/null 法案/null 法棍/null 法槌/null 法治/null 法治建设/null 法派/null 法海/null 法源/null 法源寺/null 法物/null 法王/null 法理/null 法理学/null 法盲/null 法相宗/null 法码/null 法禁/null 法种/null 法科/null 法程/null 法筵/null 法纪/null 法纪教育/null 法线/null 法统/null 法网/null 法网恢恢/null 法网恢恢疏而不漏/null 法网灰灰/null 法网难逃/null 法罗群岛/null 法老/null 法老王/null 法者/null 法耶德/null 法航/null 法蒂玛/null 法螺/null 法衣/null 法衣室/null 法裔/null 法西斯/null 法西斯主义/null 法西斯党/null 法西斯蒂/null 法规/null 法规汇编/null 法警/null 法记/null 法赫德/null 法轮/null 法轮功/null 法轮大法/null 法轮常转/null 法郎/null 法金币/null 法门/null 法院/null 法院裁决/null 法隆寺/null 法马古斯塔/null 法驾/null 法鲁克/null 泗州戏/null 泗水/null 泗洪/null 泗阳/null 泛代数/null 泛光/null 泛光灯/null 泛函分析/null 泛味/null 泛回/null 泛大洋/null 泛大陆/null 泛岛/null 泛指/null 泛斯拉夫主义/null 泛日耳曼主义/null 泛民主派/null 泛泛/null 泛泛之交/null 泛泛而谈/null 泛滥/null 泛滥成灾/null 泛爱/null 泛珠三角/null 泛珠江三角/null 泛白/null 泛碱/null 泛神/null 泛神论/null 泛称/null 泛红/null 泛美/null 泛美主义/null 泛自然神论/null 泛舟/null 泛色/null 泛论/null 泛读/null 泛起/null 泛酸/null 泛阿拉伯主义/null 泛非主义/null 泛音/null 泛频/null 泝源/null 泠泠/null 泡一下/null 泡上/null 泡制/null 泡吧/null 泡在/null 泡妞/null 泡子/null 泡开/null 泡影/null 泡打粉/null 泡桐/null 泡水/null 泡汤/null 泡沫/null 泡沫剂/null 泡沫塑料/null 泡沫橡胶/null 泡沫水泥/null 泡沫状/null 泡沫玻璃/null 泡沫经济/null 泡沸石/null 泡泡/null 泡泡口香糖/null 泡泡浴/null 泡泡浴露/null 泡泡糖/null 泡泡纱/null 泡浸/null 泡温泉/null 泡湿/null 泡漩/null 泡澡/null 泡状/null 泡疹/null 泡病/null 泡病号/null 泡罩塔/null 泡脚/null 泡腾/null 泡茶/null 泡药/null 泡菜/null 泡蘑菇/null 泡货/null 泡面/null 泡饭/null 泡馍/null 波义耳/null 马略特定律/null 波什格伦/null 波光/null 波光粼粼/null 波兰一八六三年起义/null 波兰人/null 波兰化/null 波兰史/null 波兰币/null 波兰斯基/null 波兰舞/null 波兰语/null 波兹南/null 波兹坦/null 波兹曼/null 波函数/null 波利尼西亚/null 波动/null 波动力学/null 波动性/null 波动起伏/null 波及/null 波及面/null 波哥大/null 波型/null 波堤/null 波塞冬/null 波士/null 波士尼亚/null 波士顿/null 波士顿大学/null 波士顿红袜/null 波多马克河/null 波多黎各/null 波季/null 波密/null 波导/null 波导管/null 波尔卡/null 波尔多/null 波尔多液/null 波尔布特/null 波尔干/null 波尔干地区/null 波峰/null 波希米亚/null 波带/null 波带片/null 波幅/null 波平浪静/null 波弗特海/null 波形/null 波形图/null 波影/null 波德/null 波德申/null 波恩/null 波恩大学/null 波托马克河/null 波折/null 波拿巴/null 波数/null 波斯/null 波斯人/null 波斯尼亚/null 波斯尼亚和黑塞哥维纳共和国/null 波斯尼亚语/null 波斯帝国/null 波斯教/null 波斯普鲁斯/null 波斯普鲁斯海峡/null 波斯湾/null 波斯湾地区/null 波斯猫/null 波斯菊/null 波斯语/null 波斯里亚/null 波方程/null 波旁/null 波旁王朝/null 波昂/null 波束/null 波来克/null 波森莓/null 波棱盖/null 波段/null 波江座/null 波河/null 波洛涅斯/null 波浪/null 波浪式/null 波浪形/null 波浪热/null 波浪鼓/null 波涛/null 波涛汹涌/null 波涛磷磷/null 波涛粼粼/null 波源/null 波澜/null 波澜壮阔/null 波澜老成/null 波澜起伏/null 波特/null 波特兰市/null 波特率/null 波状/null 波状云/null 波状热/null 波痕/null 波粒二象性/null 波级/null 波纹/null 波罗/null 波罗的海/null 波美度/null 波美拉尼亚/null 波美比重计/null 波腹/null 波茨坦/null 波茨坦会议/null 波茨坦公告/null 波荡/null 波西米亚/null 波语/null 波谱/null 波谲云诡/null 波谷/null 波路壮阔/null 波速/null 波道/null 波长/null 波阳/null 波阳县/null 波阿斯/null 波阿次/null 波隆那/null 波霎/null 波霸/null 波霸奶茶/null 波面/null 波音/null 波鸿/null 泣下如雨/null 泣下沾襟/null 泣不成声/null 泣别/null 泣声/null 泣然/null 泣者/null 泣血捶膺/null 泣血枕戈/null 泣血椎心/null 泣血涟如/null 泣血稽颡/null 泣诉/null 泣谏/null 泣谢/null 泥中/null 泥中隐刺/null 泥丸/null 泥人/null 泥刀/null 泥厂/null 泥古/null 泥古不化/null 泥古非今/null 泥土/null 泥坑/null 泥垢/null 泥塑/null 泥塑木雕/null 泥塘/null 泥多佛大/null 泥子/null 泥孩/null 泥守/null 泥封/null 泥岩/null 泥工/null 泥巴/null 泥心/null 泥料/null 泥板/null 泥桨/null 泥水/null 泥水匠/null 泥水选种/null 泥污/null 泥沙/null 泥沙俱下/null 泥沼/null 泥泞/null 泥流/null 泥浆/null 泥涂轩冕/null 泥淖/null 泥渣/null 泥潭/null 泥灰/null 泥灰岩/null 泥灰砖/null 泥灰质/null 泥炭/null 泥炭藓/null 泥煤/null 泥煤似/null 泥牛入海/null 泥猪瓦狗/null 泥瓦匠/null 泥疗/null 泥盆系/null 泥盆纪/null 泥石/null 泥石流/null 泥砖/null 泥肥/null 泥胎/null 泥胎儿/null 泥腿/null 泥船渡河/null 泥色/null 泥菩萨/null 泥菩萨落水/null 泥菩萨过江/null 泥质/null 泥质岩/null 泥质页岩/null 泥足巨人/null 泥醉/null 泥金/null 泥铲/null 泥面/null 泥饭碗/null 泥鱼/null 泥鳅/null 注以/null 注入/null 注入器/null 注入式教学/null 注册/null 注册人/null 注册商标/null 注册表/null 注出/null 注口/null 注塑/null 注定/null 注射/null 注射剂/null 注射器/null 注射筒/null 注射者/null 注射针/null 注射针头/null 注意/null 注意事项/null 注意到/null 注意力/null 注意力缺陷过动症/null 注意听/null 注意看/null 注意着/null 注文/null 注明/null 注有/null 注本/null 注水/null 注满/null 注疏/null 注目/null 注脚/null 注色/null 注视/null 注视者/null 注解/null 注记/null 注资/null 注过册/null 注释/null 注重/null 注重实效/null 注重质量/null 注销/null 注音/null 注音一式/null 注音字母/null 注音法/null 注音符号/null 泪下/null 泪下如雨/null 泪人/null 泪人儿/null 泪光/null 泪如泉涌/null 泪如雨下/null 泪弹/null 泪水/null 泪水涟涟/null 泪汪汪/null 泪流/null 泪流满面/null 泪液/null 泪滴/null 泪珠/null 泪痕/null 泪眼/null 泪眼愁眉/null 泪管/null 泪腺/null 泪花/null 泪雨/null 泫然/null 泯没/null 泯灭/null 泰东/null 泰人/null 泰兴/null 泰加林/null 泰勒/null 泰半/null 泰华/null 泰卢固语/null 泰县/null 泰和/null 泰国/null 泰国人/null 泰国语/null 泰坦/null 泰坦尼克号/null 泰姬陵/null 泰宁/null 泰安/null 泰安乡/null 泰安县/null 泰安地区/null 泰尔/null 泰山之安/null 泰山乡/null 泰山其颓/null 泰山北斗/null 泰山区/null 泰山压卵/null 泰山压顶/null 泰山可倚/null 泰山梁木/null 泰山若厉/null 泰山鸿毛/null 泰州/null 泰式/null 泰恩布德/null 泰戈尔/null 泰拳/null 泰文/null 泰斗/null 泰晤/null 泰晤士/null 泰晤士报/null 泰晤士河/null 泰来/null 泰来否往/null 泰来否极/null 泰极而否/null 泰格・伍兹/null 泰格尔/null 泰武/null 泰武乡/null 泰然/null 泰然处之/null 泰然居之/null 泰然自若/null 泰特斯・安德洛尼克斯/null 泰王/null 泰瑟/null 泰瑟尔岛/null 泰瑟枪/null 泰米尔/null 泰米尔伊拉姆猛虎解放组织/null 泰米尔猛虎组织/null 泰米尔纳德/null 泰米尔纳德邦/null 泰米尔语/null 泰罗/null 泰而不费/null 泰裕/null 泰西/null 泰西大儒/null 泰语/null 泰象啤/null 泰达/null 泰迪熊/null 泰铢/null 泰阿倒持/null 泰雅族/null 泰顺/null 泱泱/null 泱泱大国/null 泳儿/null 泳动/null 泳场/null 泳坛/null 泳将/null 泳帽/null 泳时/null 泳池/null 泳者/null 泳衣/null 泳装/null 泳裤/null 泳镜/null 泵房/null 泵柄/null 泵水/null 泵灯/null 泵站/null 泷水/null 泷泽/null 泷船/null 泸定/null 泸定桥/null 泸州/null 泸水/null 泸沽湖/null 泸溪/null 泸西/null 泻出/null 泻密/null 泻愤/null 泻湖/null 泻漏/null 泻盐/null 泻肚/null 泻肚子/null 泻药/null 泼以/null 泼冷水/null 泼出/null 泼剌/null 泼墨/null 泼天/null 泼妇/null 泼妇骂街/null 泼性/null 泼悍/null 泼掉/null 泼水/null 泼水节/null 泼水难收/null 泼洒/null 泼湿/null 泼溅/null 泼烟花/null 泼物/null 泼皮/null 泼脏/null 泼贱/null 泼贱人/null 泼辣/null 泼醅/null 泽兰/null 泽及枯骨/null 泽国/null 泽地/null 泽塔/null 泽州/null 泽布吕赫/null 泽库/null 泽当/null 泽当镇/null 泽普/null 泽泻/null 泽深恩重/null 泽西/null 泽西岛/null 泽面/null 泾川/null 泾渭不分/null 泾渭分明/null 泾源/null 泾阳/null 洁具/null 洁净/null 洁净无瑕/null 洁剂/null 洁器/null 洁己奉公/null 洁己爱人/null 洁度/null 洁操/null 洁治/null 洁癖/null 洁白/null 洁白无瑕/null 洁西卡/null 洁西卡・艾芭/null 洁言污行/null 洁身/null 洁身自好/null 洁身自爱/null 洁面乳/null 洁面露/null 洁食/null 洄游/null 洄澜/null 洇湿/null 洋中脊/null 洋为中用/null 洋井/null 洋人/null 洋伞/null 洋兵/null 洋务/null 洋务学堂/null 洋务派/null 洋务运动/null 洋化/null 洋员/null 洋味/null 洋嗓子/null 洋地黄/null 洋场/null 洋场恶少/null 洋基/null 洋基队/null 洋壳/null 洋奴/null 洋奴哲学/null 洋妞/null 洋姜/null 洋娃娃/null 洋学/null 洋山深水港/null 洋山港/null 洋布/null 洋底/null 洋底地壳/null 洋式/null 洋房/null 洋教/null 洋文/null 洋服/null 洋枪/null 洋梨/null 洋楼/null 洋槐/null 洋槐树/null 洋橄榄/null 洋毫/null 洋气/null 洋油/null 洋法/null 洋洋/null 洋洋大篇/null 洋洋大观/null 洋洋得意/null 洋洋洒洒/null 洋洋自得/null 洋派/null 洋流/null 洋浦/null 洋浦经济开发区/null 洋淀/null 洋溢/null 洋漂族/null 洋火/null 洋灰/null 洋灰浆/null 洋烟/null 洋片/null 洋琴/null 洋琵琶/null 洋瓷/null 洋甘菊/null 洋画儿/null 洋白菜/null 洋盘/null 洋相/null 洋码子/null 洋碱/null 洋粉/null 洋紫苏/null 洋紫荆/null 洋红/null 洋红色/null 洋纱/null 洋绣球/null 洋缎/null 洋脊/null 洋腔/null 洋腔洋调/null 洋舰/null 洋船/null 洋芋/null 洋芫荽/null 洋苏/null 洋药/null 洋菜/null 洋葱/null 洋葱似/null 洋蒲桃/null 洋蓟/null 洋行/null 洋装/null 洋调/null 洋财/null 洋货/null 洋车/null 洋酒/null 洋里洋气/null 洋金花/null 洋钉/null 洋钢/null 洋钱/null 洋铁/null 洋铁箔/null 洋银/null 洋镐/null 洋面/null 洋香菜/null 洋鬼/null 洋鬼子/null 洒上/null 洒了/null 洒出/null 洒地/null 洒家/null 洒布/null 洒扫/null 洒水/null 洒水器/null 洒水机/null 洒水车/null 洒泪/null 洒泼/null 洒洒/null 洒满/null 洒狗血/null 洒脱/null 洒药/null 洒落/null 洒透/null 洒遍/null 洗三/null 洗冤/null 洗冤集录/null 洗净/null 洗刷/null 洗剂/null 洗削更革/null 洗剪吹/null 洗劫/null 洗劫一空/null 洗印/null 洗去/null 洗发/null 洗发乳/null 洗发剂/null 洗发水/null 洗发水儿/null 洗发皂/null 洗发粉/null 洗发精/null 洗发膏/null 洗发露/null 洗垢匿瑕/null 洗垢寻痕/null 洗垢求瘢/null 洗垢索瘢/null 洗头/null 洗尘/null 洗心换骨/null 洗心涤虑/null 洗心自新/null 洗心革志/null 洗心革意/null 洗心革面/null 洗手/null 洗手不干/null 洗手乳/null 洗手台/null 洗手奉职/null 洗手池/null 洗手液/null 洗手盆/null 洗手间/null 洗掉/null 洗擦/null 洗擦者/null 洗染/null 洗染店/null 洗法/null 洗洁剂/null 洗洁精/null 洗洗/null 洗浴/null 洗消/null 洗消剂/null 洗消器材/null 洗消场/null 洗涤/null 洗涤剂/null 洗涤器/null 洗涤日/null 洗涤机/null 洗涤桶/null 洗涤槽/null 洗涤灵/null 洗涤者/null 洗涤间/null 洗液/null 洗清/null 洗漱/null 洗潄/null 洗澡/null 洗澡间/null 洗濯/null 洗濯盆/null 洗烫/null 洗煤/null 洗熨/null 洗牌/null 洗物槽/null 洗理费/null 洗瓶刷/null 洗盐/null 洗眼杯/null 洗眼液/null 洗碗/null 洗碗机/null 洗碗池/null 洗碗精/null 洗碟/null 洗碱/null 洗礼/null 洗礼堂/null 洗礼盆/null 洗米/null 洗练/null 洗罪/null 洗者若翰/null 洗耳恭听/null 洗耳拱听/null 洗耻/null 洗肠/null 洗胃/null 洗脑/null 洗脚/null 洗脱/null 洗脸/null 洗脸台/null 洗脸盆/null 洗脸盆洗盆/null 洗脸盘/null 洗脸间/null 洗菜/null 洗衣/null 洗衣处/null 洗衣妇/null 洗衣工/null 洗衣店/null 洗衣房/null 洗衣所/null 洗衣日/null 洗衣机/null 洗衣板/null 洗衣盆/null 洗衣粉/null 洗衣间/null 洗足/null 洗足礼/null 洗身/null 洗车/null 洗车场/null 洗过/null 洗选/null 洗钱/null 洗雪/null 洗面/null 洗面奶/null 洗黑钱/null 洛伦茨/null 洛佩兹/null 洛佩斯/null 洛克菲勒/null 洛克西德/null 洛南/null 洛可可/null 洛基/null 洛基山/null 洛宁/null 洛川/null 洛川会议/null 洛希尔/null 洛德/null 洛扎/null 洛杉矶/null 洛杉矶时报/null 洛杉矶湖人/null 洛林/null 洛桑/null 洛江/null 洛江区/null 洛河/null 洛浦/null 洛皮塔/null 洛皮塔瀑布/null 洛矶山/null 洛矶山脉/null 洛神/null 洛美/null 洛锡安区/null 洛阳/null 洛阳地区/null 洛阳才子/null 洛阳纸贵/null 洛隆/null 洛龙/null 洛龙区/null 洞中/null 洞中肯綮/null 洞儿/null 洞内/null 洞口/null 洞天/null 洞天福地/null 洞头/null 洞子/null 洞孔/null 洞察/null 洞察一切/null 洞察其奸/null 洞察力/null 洞府/null 洞庭湖/null 洞开/null 洞彻/null 洞悉/null 洞房/null 洞房花烛/null 洞房花烛夜/null 洞晓/null 洞洞/null 洞烛其奸/null 洞穴/null 洞穿/null 洞窟/null 洞箫/null 洞若观火/null 洞见/null 洞见症结/null 洞达/null 洞里/null 洞鉴/null 洞鉴古今/null 洣水/null 津南/null 津塔/null 津岛/null 津巴布韦/null 津市/null 津梁/null 津沽/null 津泽/null 津津/null 津津乐道/null 津津有味/null 津浦/null 津浪/null 津液/null 津要/null 津贴/null 洧水/null 洨河/null 洪亮/null 洪亮吉/null 洪佛/null 洪区/null 洪博培/null 洪堡/null 洪大/null 洪家/null 洪山/null 洪山区/null 洪峰/null 洪帮/null 洪庙村/null 洪恩/null 洪森/null 洪武/null 洪水/null 洪水期/null 洪水滔滔/null 洪水猛兽/null 洪水论/null 洪汛期/null 洪江/null 洪江区/null 洪沟/null 洪泛区/null 洪泽/null 洪泽湖/null 洪洞/null 洪流/null 洪涛/null 洪涝/null 洪渊/null 洪湖/null 洪灾/null 洪炉/null 洪炉燎发/null 洪熙/null 洪福/null 洪福齐天/null 洪秀全/null 洪积层/null 洪积说/null 洪荒/null 洪道/null 洪都拉斯/null 洪量/null 洪钟/null 洪门/null 洪雅/null 洪雅族/null 洮北/null 洮北区/null 洮南/null 洱海/null 洱源/null 洲产/null 洲府/null 洲际/null 洲际导弹/null 洲际弹道导弹/null 活上/null 活下/null 活下去/null 活下来/null 活不下去/null 活不活死不死/null 活了/null 活人/null 活体/null 活体检视/null 活佛/null 活便/null 活像/null 活儿/null 活分/null 活到/null 活到九十九/null 活到老/null 活剥/null 活力/null 活力四射/null 活动/null 活动中/null 活动中心/null 活动人士/null 活动分子/null 活动力/null 活动半径/null 活动场所/null 活动家/null 活动性/null 活动房/null 活动房屋/null 活动扳手/null 活动日/null 活动曲尺/null 活动桌面/null 活动能力/null 活动门/null 活劳动/null 活化/null 活化分析/null 活化剂/null 活化石/null 活受罪/null 活口/null 活命/null 活命哲学/null 活土层/null 活在/null 活在世上/null 活地狱/null 活埋/null 活塞/null 活塞式发动机/null 活塞式飞机/null 活塞杆/null 活塞环/null 活契/null 活套/null 活字/null 活字印刷/null 活字合金/null 活宝/null 活底/null 活度/null 活得/null 活性/null 活性剂/null 活性染料/null 活性炭/null 活扣/null 活报剧/null 活捉/null 活期/null 活期存款/null 活期帐户/null 活期贷款/null 活期资金/null 活来/null 活板/null 活树/null 活气/null 活水/null 活法/null 活泛/null 活泼/null 活活/null 活火/null 活火山/null 活灵活现/null 活版/null 活版印刷/null 活物/null 活猪/null 活现/null 活瓣/null 活生生/null 活用/null 活的/null 活着/null 活石灰/null 活神/null 活神仙似/null 活禽/null 活结/null 活络/null 活络丸/null 活罪/null 活脱/null 活脱儿/null 活脱脱/null 活茬/null 活菩萨/null 活血/null 活血止痛/null 活见鬼/null 活计/null 活话/null 活该/null 活象/null 活质/null 活跃/null 活跃分子/null 活路/null 活蹦乱跳/null 活过/null 活钱/null 活门/null 活页/null 活鱼/null 活龙活现/null 洼地/null 洼洼/null 洼陷/null 洽借/null 洽办/null 洽商/null 洽询/null 洽谈/null 洽谈会/null 洽购/null 洽闻博见/null 洽闻强记/null 派上/null 派上用场/null 派不是/null 派人/null 派任/null 派任职/null 派克/null 派克大衣/null 派兵/null 派军/null 派出/null 派出所/null 派出机构/null 派别/null 派力奥/null 派势/null 派员/null 派场/null 派头/null 派头十足/null 派定/null 派对/null 派往/null 派性/null 派拉蒙影/null 派方/null 派来/null 派派/null 派生/null 派生物/null 派生词/null 派系/null 派给/null 派给工作/null 派翠西亚/null 派购/null 派进/null 派送/null 派遗/null 派遣/null 派驻/null 流下/null 流丽/null 流了/null 流于/null 流于形式/null 流亚/null 流亡/null 流亡在海外/null 流亡政府/null 流亡者/null 流产/null 流产政变/null 流会/null 流传/null 流传广/null 流体/null 流体力学/null 流体动力学/null 流体核试验/null 流俗/null 流光/null 流光溢彩/null 流光瞬息/null 流入/null 流入物/null 流冗/null 流出/null 流出物/null 流出量/null 流刑/null 流利/null 流别/null 流到/null 流动/null 流动人口/null 流动儿童/null 流动基金/null 流动性/null 流动性大沙漠/null 流动物/null 流动红旗/null 流动负债/null 流动资产/null 流动资本/null 流动资金/null 流去/null 流变/null 流变学/null 流变能力/null 流口水/null 流向/null 流品/null 流回/null 流域/null 流失/null 流宕忘反/null 流寇/null 流寇主义/null 流尽/null 流层/null 流居/null 流布/null 流干/null 流年/null 流年不利/null 流弊/null 流弹/null 流形/null 流往/null 流徙/null 流性学/null 流恋/null 流感/null 流感疫苗/null 流感病毒/null 流掉/null 流播/null 流放/null 流散/null 流明/null 流星/null 流星似/null 流星体/null 流星坎止/null 流星赶月/null 流星雨/null 流槽/null 流毒/null 流民/null 流氓/null 流氓国家/null 流氓无产者/null 流氓罪/null 流氓般/null 流氓软件/null 流氓集团/null 流气/null 流水/null 流水不腐/null 流水作业/null 流水帐/null 流水席/null 流水无情/null 流水线/null 流水落花/null 流水行云/null 流水账/null 流水高山/null 流汗/null 流汗浃背/null 流沙/null 流泆/null 流注/null 流泪/null 流泻/null 流派/null 流派风格/null 流浪/null 流浪儿/null 流浪汉/null 流浪汗/null 流浪者/null 流浸膏/null 流涎/null 流涕/null 流淌/null 流火/null 流点/null 流物/null 流球/null 流球群岛/null 流理台/null 流用/null 流电/null 流电学/null 流畅/null 流眄/null 流着/null 流矢/null 流离/null 流离失所/null 流离琐尾/null 流离遇合/null 流离颠沛/null 流程/null 流程图/null 流程表/null 流窜/null 流窜犯/null 流纹岩/null 流线/null 流线型/null 流经/null 流网/null 流脑/null 流脓/null 流芳/null 流芳万古/null 流芳千古/null 流芳后世/null 流芳百世/null 流芳遗臭/null 流苏/null 流荡/null 流荡忘反/null 流萤/null 流落/null 流落不偶/null 流落他乡/null 流血/null 流血事件/null 流血千里/null 流血成河/null 流血成渠/null 流血浮尸/null 流血漂卤/null 流血漂杵/null 流行/null 流行急性结膜炎/null 流行性/null 流行性乙型脑炎/null 流行性出血热/null 流行性感冒/null 流行性脑脊髓膜炎/null 流行性腮腺炎/null 流行株/null 流行榜/null 流行歌曲/null 流行病/null 流行病学/null 流行色/null 流行著/null 流行语/null 流行音乐/null 流表/null 流览/null 流言/null 流言切莫轻信/null 流言惑众/null 流言蜚语/null 流言飞文/null 流质/null 流转/null 流辈/null 流辉/null 流过/null 流进/null 流连/null 流连忘返/null 流通/null 流通券/null 流通基金/null 流通手段/null 流通渠道/null 流通费用/null 流通资本/null 流通资金/null 流通量/null 流通领域/null 流逝/null 流速/null 流速计/null 流遍全身/null 流里流气/null 流量/null 流量计/null 流金铄石/null 流露/null 流露出/null 流韵/null 流风余俗/null 流风余韵/null 流风回雪/null 流风遗俗/null 流风遗泽/null 流风遗烈/null 流风遗躅/null 流风遗迹/null 流食/null 流鼻水/null 流鼻涕/null 浃髓沦肌/null 浃髓沦肤/null 浅儿/null 浅土/null 浅子/null 浅学/null 浅尝/null 浅尝者/null 浅尝辄止/null 浅层/null 浅层文字/null 浅层正字法/null 浅希近求/null 浅底/null 浅成岩/null 浅斟低唱/null 浅斟低讴/null 浅斟低酌/null 浅易/null 浅显/null 浅显易懂/null 浅析/null 浅水/null 浅浅/null 浅浮雕/null 浅海/null 浅淡/null 浅深/null 浅源地震/null 浅滩/null 浅滩指示浮标/null 浅灰/null 浅白/null 浅盆/null 浅盘/null 浅短/null 浅礁/null 浅窝/null 浅笑/null 浅红/null 浅绿/null 浅绿色/null 浅耕/null 浅色/null 浅草/null 浅蓝/null 浅蓝色/null 浅薄/null 浅见/null 浅见寡识/null 浅见寡闻/null 浅见薄识/null 浅议/null 浅论/null 浅说/null 浅谈/null 浅近/null 浅释/null 浅锅/null 浅陋/null 浅露/null 浅领/null 浅鲜/null 浅黄/null 浅黄色/null 浅黑/null 浅黑型/null 浅黑色/null 浆岩/null 浆料/null 浆果/null 浆汁/null 浆洗/null 浆液/null 浆硬/null 浆粕/null 浆糊/null 浆纱/null 浆纸/null 浆膜/null 浆衣/null 浆酒藿肉/null 浆酒霍肉/null 浇下/null 浇冷水/null 浇制/null 浇在/null 浇地/null 浇头/null 浇水/null 浇注/null 浇洗/null 浇漓/null 浇灌/null 浇瓜之惠/null 浇筑/null 浇花/null 浇菜/null 浇透/null 浇铸/null 浇风薄俗/null 浈江/null 浈江区/null 浉河/null 浉河区/null 浊世/null 浊度/null 浊气/null 浊泾清渭/null 浊流/null 浊浪/null 浊液/null 浊积岩/null 浊臭熏天/null 浊质凡姿/null 浊辅音/null 浊酒/null 浊音/null 浊骨凡胎/null 测云仪/null 测候/null 测光/null 测光表/null 测出/null 测力/null 测力器/null 测力计/null 测压/null 测压管/null 测取/null 测向/null 测地学/null 测地曲率/null 测地线/null 测地线曲率/null 测声器/null 测天/null 测孕/null 测字/null 测定/null 测定法/null 测容量/null 测度/null 测径器/null 测得/null 测微尺/null 测微术/null 测微表/null 测微计/null 测心术/null 测慌/null 测探/null 测控/null 测斜器/null 测方/null 测时/null 测时器/null 测时法/null 测气管/null 测测/null 测深/null 测温/null 测温器/null 测电/null 测知/null 测程器/null 测算/null 测绘/null 测绘学/null 测良/null 测评/null 测试/null 测试仪/null 测试和材料协会/null 测试器/null 测试版/null 测试者/null 测谎仪/null 测谎器/null 测距/null 测距仪/null 测距器/null 测距机/null 测过/null 测量/null 测量仪/null 测量学/null 测量工具/null 测量术/null 测量杆/null 测量用/null 测量者/null 测量船/null 测锤/null 测震表/null 测音器/null 测音计/null 测验/null 测验结果/null 测高/null 测高学/null 测高法/null 测高计/null 济世/null 济世之才/null 济世匡时/null 济世安人/null 济世安民/null 济世安邦/null 济世救人/null 济世爱民/null 济世经邦/null 济事/null 济人/null 济人利物/null 济公/null 济助/null 济南地区/null 济困扶危/null 济宁/null 济宁地区/null 济寒赈贫/null 济州/null 济州岛/null 济州特别自治道/null 济弱扶危/null 济弱除强/null 济急/null 济时拯世/null 济时行道/null 济河焚舟/null 济济/null 济济一堂/null 济济彬彬/null 济源/null 济胜之具/null 济苦怜贫/null 济贫/null 济贫拔苦/null 济贫院/null 济阳/null 浏海/null 浏览/null 浏览器/null 浏览者/null 浏览软件/null 浏览量/null 浏阳/null 浐河/null 浑人/null 浑仪/null 浑仪注/null 浑俗和光/null 浑厚/null 浑号/null 浑名/null 浑噩/null 浑圆/null 浑天仪/null 浑天说/null 浑如/null 浑子/null 浑家/null 浑成/null 浑朴/null 浑水/null 浑水摸鱼/null 浑汗如雨/null 浑江/null 浑沌/null 浑河/null 浑浊/null 浑浑/null 浑浑噩噩/null 浑源/null 浑然/null 浑然一体/null 浑然一色/null 浑然不觉/null 浑然天成/null 浑球/null 浑球儿/null 浑脱/null 浑茫/null 浑蛋/null 浑象/null 浑身/null 浑身上下/null 浑身是胆/null 浑身解数/null 浑金璞玉/null 浓云/null 浓厚/null 浓厚兴趣/null 浓墨/null 浓墨重彩/null 浓妆/null 浓妆淡抹/null 浓妆艳抹/null 浓妆艳服/null 浓妆艳裹/null 浓妆艳质/null 浓密/null 浓度/null 浓情/null 浓抹淡妆/null 浓桃艳李/null 浓汁/null 浓汤/null 浓浓/null 浓液/null 浓淡/null 浓烈/null 浓烟/null 浓的/null 浓眉/null 浓眉大眼/null 浓积云/null 浓稠/null 浓粥/null 浓粥状/null 浓绿/null 浓缩/null 浓缩机/null 浓缩物/null 浓缩铀/null 浓艳/null 浓茶/null 浓荫/null 浓装/null 浓郁/null 浓酒/null 浓重/null 浓集/null 浓集铀/null 浓雾/null 浓香/null 浔阳/null 浔阳区/null 浙南/null 浙江三门县/null 浙江大学/null 浙江天台县/null 浙菜/null 浙赣/null 浙赣铁路/null 浚泥船/null 浚渫/null 浠水/null 浣女/null 浣洗/null 浣涤/null 浣濯/null 浣熊/null 浣纱/null 浣纱记/null 浣衣/null 浣雪/null 浦东/null 浦东新区/null 浦东机场/null 浦北/null 浦口/null 浦口区/null 浦城/null 浦江/null 浦那/null 浦项/null 浩劫/null 浩博/null 浩叹/null 浩大/null 浩如烟海/null 浩室/null 浩气/null 浩气长存/null 浩浩/null 浩浩荡荡/null 浩淼/null 浩渺/null 浩瀚/null 浩然/null 浩然之气/null 浩然正气/null 浩特/null 浩繁/null 浩翰/null 浩茫/null 浩荡/null 浩阔/null 浪人/null 浪儿/null 浪卡子/null 浪头/null 浪女/null 浪子/null 浪子回头/null 浪子回头金不换/null 浪恬波静/null 浪拍/null 浪木/null 浪板/null 浪桥/null 浪浪/null 浪涌/null 浪涛/null 浪游/null 浪漫/null 浪漫主义/null 浪漫化/null 浪潮/null 浪船/null 浪花/null 浪荡/null 浪蚀/null 浪蝶游蜂/null 浪蝶狂蜂/null 浪谱/null 浪谷/null 浪费/null 浪费掉/null 浪费时间/null 浪费狂/null 浪费者/null 浪费金钱/null 浪迹/null 浪迹天下/null 浪迹天涯/null 浪迹江湖/null 浪迹萍踪/null 浪静/null 浪静风恬/null 浪鼓/null 浮一大白/null 浮上/null 浮世绘/null 浮云/null 浮云富贵/null 浮云朝露/null 浮云蔽日/null 浮光掠影/null 浮冰/null 浮冰群/null 浮凸/null 浮出/null 浮出水面/null 浮利/null 浮力/null 浮力定律/null 浮力调整背心/null 浮力调整装置/null 浮动/null 浮动价格/null 浮动地狱/null 浮动工资/null 浮动汇率/null 浮升/null 浮华/null 浮厝/null 浮吊/null 浮名/null 浮名薄利/null 浮名虚利/null 浮名虚誉/null 浮囊/null 浮图/null 浮圈/null 浮土/null 浮在/null 浮士德博士/null 浮头儿/null 浮夸/null 浮夸风/null 浮子/null 浮家泛宅/null 浮家浮宅/null 浮尘/null 浮尘子/null 浮尸/null 浮屠/null 浮山/null 浮岛/null 浮岩/null 浮床/null 浮式起重机/null 浮想/null 浮想联翩/null 浮报/null 浮掠/null 浮木/null 浮标/null 浮桥/null 浮梁/null 浮气/null 浮水/null 浮沉/null 浮沫/null 浮泛/null 浮浅/null 浮浪/null 浮渣/null 浮游/null 浮游动物/null 浮游植物/null 浮游生物/null 浮滑/null 浮滥/null 浮漂/null 浮潜/null 浮潜器具/null 浮点/null 浮点数/null 浮点运算/null 浮燥/null 浮物/null 浮现/null 浮瓜沉李/null 浮生/null 浮生六记/null 浮生若寄/null 浮生若梦/null 浮皮儿/null 浮皮潦草/null 浮着/null 浮石/null 浮石沉木/null 浮礼儿/null 浮筒/null 浮签/null 浮翠流丹/null 浮肿/null 浮肿病/null 浮舟/null 浮船坞/null 浮艳/null 浮花浪蕊/null 浮荡/null 浮萍/null 浮萍浪梗/null 浮薄/null 浮言/null 浮记/null 浮词/null 浮词曲说/null 浮语虚辞/null 浮财/null 浮质/null 浮贴/null 浮起/null 浮躁/null 浮选/null 浮雕/null 浮雕墙纸/null 浮面/null 浴场/null 浴堂/null 浴室/null 浴巾/null 浴帘/null 浴帽/null 浴柜/null 浴池/null 浴液/null 浴球/null 浴疗/null 浴疗学/null 浴盆/null 浴盐/null 浴缸/null 浴者/null 浴花/null 浴血/null 浴血奋战/null 浴血苦战/null 浴衣/null 浴装/null 海上/null 海上交通/null 海上交通线/null 海上奇书/null 海上封锁/null 海上巡逻/null 海上花列传/null 海上运动/null 海上运输/null 海不扬波/null 海不波溢/null 海东/null 海东地区/null 海东青/null 海中/null 海中捞月/null 海丰/null 海事/null 海事仲裁/null 海事处/null 海事局/null 海事法院/null 海于格松/null 海产/null 海产品/null 海伦/null 海伦・凯勒/null 海伯利/null 海信/null 海兔/null 海关/null 海关官员/null 海关总署/null 海关检查/null 海关部门/null 海兴/null 海兽/null 海内/null 海内外/null 海内存知己/null 海内无双/null 海军/null 海军上校/null 海军中校/null 海军基地/null 海军大校/null 海军官/null 海军少校/null 海军总司令/null 海军航空兵/null 海军蓝/null 海军部/null 海军陆战队/null 海刺芹/null 海勃湾/null 海勃湾区/null 海北/null 海北天南/null 海北州/null 海北藏族自治州/null 海区/null 海协会/null 海南区/null 海南大学/null 海南岛/null 海南州/null 海南戏/null 海南藏族自治州/null 海印寺/null 海原/null 海参/null 海参崴/null 海员/null 海员般/null 海味/null 海哩/null 海啸/null 海啸山崩/null 海图/null 海地/null 海地人/null 海地岛/null 海地币/null 海城/null 海城区/null 海域/null 海基会/null 海堤/null 海塘/null 海外/null 海外侨胞/null 海外关系/null 海外华人/null 海外奇谈/null 海外投资/null 海外旅行/null 海外版/null 海妖/null 海子/null 海学/null 海宁/null 海安/null 海宝/null 海尔/null 海尔德兰/null 海尼根/null 海屋添筹/null 海屋筹添/null 海岛/null 海岛市/null 海岛棉/null 海岬/null 海岭/null 海岸/null 海岸护卫队/null 海岸线/null 海岸警卫队/null 海岸边/null 海岸防御/null 海峡/null 海峡两岸/null 海峡两岸关系协会/null 海峡交流基金会/null 海峡地带/null 海峡时报/null 海峡群岛/null 海峡防御/null 海州/null 海州区/null 海巡/null 海市/null 海市蜃搂/null 海市蜃楼/null 海带/null 海平线/null 海平面/null 海床/null 海底/null 海底扩张/null 海底扩张说/null 海底捞月/null 海底捞针/null 海底管线/null 海底轮/null 海底隧道/null 海康/null 海归/null 海德/null 海德保/null 海德公园/null 海德堡/null 海德尔堡/null 海德格尔/null 海怪/null 海战/null 海扁/null 海扇/null 海报/null 海拉尔/null 海拉尔区/null 海拔/null 海捞/null 海损/null 海斯/null 海日/null 海昌蓝/null 海明威/null 海星/null 海晏/null 海晏河清/null 海景/null 海景画/null 海曙/null 海曙区/null 海月水母/null 海林/null 海枣/null 海枯石烂/null 海桐花/null 海棉/null 海棉状/null 海棠/null 海棠树/null 海棠花/null 海森伯/null 海森堡/null 海椒/null 海榴/null 海模型/null 海水/null 海水不可斗量/null 海水倒灌/null 海水养殖/null 海水浴/null 海水淡化/null 海水群飞/null 海水难量/null 海水面/null 海沟/null 海沧/null 海沧区/null 海河/null 海沸山摇/null 海沸山裂/null 海沸江翻/null 海沸河翻/null 海沸波翻/null 海法/null 海泡石/null 海波/null 海波不惊/null 海洋/null 海洋化学/null 海洋地理/null 海洋学/null 海洋性/null 海洋性气候/null 海洋性贫血/null 海洋污染/null 海洋法/null 海洋温差发电/null 海洋温度/null 海洋生物/null 海洋科学/null 海洋资源/null 海洋间/null 海洋霸权/null 海洛因/null 海洛英/null 海派/null 海流/null 海浪/null 海涂/null 海涂围垦/null 海涅/null 海涛/null 海涵/null 海淀/null 海淀图书城/null 海港/null 海港区/null 海湾/null 海湾危机/null 海湾国家/null 海湾地区/null 海湾战争/null 海滨/null 海滨浴场/null 海滩/null 海滩装/null 海潮/null 海熊/null 海燕/null 海牙/null 海牙法院/null 海牛/null 海狗/null 海狮/null 海狸/null 海狸鼠/null 海猪/null 海獭/null 海王星/null 海珠/null 海珠区/null 海瑞/null 海瑞乡/null 海瑞罢官/null 海疆/null 海登/null 海百合/null 海盆/null 海盐/null 海监船/null 海盗/null 海盗船/null 海盗行为/null 海相/null 海相沉积/null 海相沉积物/null 海砂/null 海砂屋/null 海碗/null 海礁/null 海神/null 海禁/null 海空/null 海空军/null 海空军基地/null 海端/null 海端乡/null 海笋/null 海笔/null 海米/null 海纳百川/null 海线/null 海绵/null 海绵动物/null 海绵宝宝/null 海绵橡胶/null 海绵状/null 海绵田/null 海绿色/null 海胆/null 海航/null 海舶/null 海船/null 海苔/null 海草/null 海菜/null 海葬/null 海葵/null 海藻/null 海虾/null 海蚀/null 海蛎子/null 海蛞蝓/null 海蛤蝓/null 海蜇/null 海蜒/null 海螵蛸/null 海螺/null 海蟹/null 海西/null 海西州/null 海西蒙古族藏族自治州/null 海角/null 海角天涯/null 海誓/null 海誓山盟/null 海豚/null 海豚座/null 海豚泳/null 海象/null 海豹/null 海豹科/null 海豹部队/null 海货/null 海贼/null 海贼王/null 海路/null 海轮/null 海边/null 海运/null 海运业/null 海运费/null 海运费率/null 海迪/null 海选/null 海道/null 海部俊树/null 海里/null 海量/null 海错/null 海门/null 海阔天空/null 海防/null 海阳/null 海陆/null 海陆丰农民起义/null 海陆军/null 海陆煲/null 海陆空/null 海陵/null 海陵区/null 海隅/null 海难/null 海难船/null 海震/null 海青天/null 海面/null 海面下/null 海鞘/null 海顿/null 海风/null 海马/null 海马回/null 海魂衫/null 海鱼/null 海鲜/null 海鲜酱/null 海鲤/null 海鳃/null 海鳗/null 海鸟/null 海鸥/null 海鹫/null 海龙/null 海龟/null 浸于/null 浸以/null 浸会/null 浸信会/null 浸入/null 浸出/null 浸剂/null 浸取/null 浸在/null 浸微浸消/null 浸微浸灭/null 浸明浸昌/null 浸染/null 浸水/null 浸沉/null 浸没/null 浸泡/null 浸泡物/null 浸洗/null 浸润/null 浸润之谮/null 浸液/null 浸渍/null 浸渍者/null 浸湿/null 浸溶/null 浸满/null 浸着/null 浸礼/null 浸礼教/null 浸种/null 浸膏/null 浸蚀/null 浸软/null 浸过/null 浸透/null 浸透性/null 浽溦/null 涂上/null 涂乙/null 涂了/null 涂以/null 涂写/null 涂剂/null 涂加/null 涂去/null 涂在/null 涂地/null 涂家/null 涂尔干/null 涂层/null 涂山/null 涂径/null 涂成/null 涂抹/null 涂抹剂/null 涂抹者/null 涂擦/null 涂改/null 涂敷/null 涂料/null 涂有/null 涂染/null 涂水/null 涂污/null 涂油/null 涂油于/null 涂油式/null 涂油漆/null 涂油膏/null 涂泽/null 涂浆台/null 涂润/null 涂漆/null 涂潭/null 涂炭/null 涂炭生民/null 涂炭生灵/null 涂片/null 涂画/null 涂着/null 涂粉/null 涂红/null 涂脂抹粉/null 涂色/null 涂色于/null 涂装/null 涂覆/null 涂过/null 涂金/null 涂附/null 涂饰/null 涂饰剂/null 涂鸦/null 涂鸭/null 涂黑/null 涅槃/null 涅瓦/null 涅瓦河/null 涅白/null 涅盘经/null 涅石/null 涅磐/null 涅而不缁/null 消亡/null 消停/null 消像散/null 消元/null 消减/null 消化/null 消化不良/null 消化剂/null 消化力/null 消化吸收/null 消化性/null 消化液/null 消化管/null 消化系统/null 消化腺/null 消化道/null 消化酒/null 消化酶/null 消去/null 消受/null 消声/null 消声匿迹/null 消声器/null 消声灭迹/null 消夏/null 消夜/null 消失/null 消失了/null 消弭/null 消息/null 消息儿/null 消息报/null 消息来源/null 消息灵通/null 消息灵通人士/null 消息闭塞/null 消愁/null 消愁解闷/null 消愁释愦/null 消愁释闷/null 消损/null 消散/null 消晕/null 消暑/null 消极/null 消极因素/null 消极影响/null 消极态度/null 消极怠工/null 消极浪漫主义/null 消极防御/null 消歇/null 消歧义/null 消毒/null 消毒剂/null 消毒法/null 消气/null 消沉/null 消泯/null 消消停停/null 消渴/null 消溶/null 消火栓/null 消灭/null 消灾/null 消灾避邪/null 消炎/null 消炎片/null 消炎粉/null 消炎药/null 消烟除尘/null 消热/null 消瘦/null 消石灰/null 消磁/null 消磁器/null 消磨/null 消磨时光/null 消磨时间/null 消禁/null 消纳/null 消纳整合/null 消缓/null 消耗/null 消耗性/null 消耗战/null 消耗掉/null 消耗标准/null 消耗热/null 消耗用/null 消耗量/null 消肿/null 消能/null 消色/null 消蚀/null 消融/null 消解/null 消谴/null 消费/null 消费价格指数/null 消费合作社/null 消费品/null 消费器件/null 消费基金/null 消费市场/null 消费水平/null 消费税/null 消费结构/null 消费群/null 消费者/null 消费者保护/null 消费者协会/null 消费资料/null 消费量/null 消费金融/null 消退/null 消逝/null 消遣/null 消释/null 消金/null 消长/null 消闲/null 消闲儿/null 消防/null 消防员/null 消防塞/null 消防局/null 消防栓/null 消防署/null 消防艇/null 消防车/null 消防队/null 消防队员/null 消除/null 消除对妇女一切形式歧视公约/null 消除歧义/null 消除毒剂/null 消除者/null 消除锯齿/null 消险固堤/null 消隐/null 消震/null 消音/null 消音器/null 消食/null 消食儿/null 消魂/null 涉世/null 涉世未深/null 涉事/null 涉历/null 涉及/null 涉坚履微/null 涉坚履险/null 涉外/null 涉外企业/null 涉外单位/null 涉外工作/null 涉外活动/null 涉外经济/null 涉嫌/null 涉嫌人/null 涉想/null 涉案/null 涉水/null 涉水登山/null 涉水者/null 涉水靴/null 涉水鸟/null 涉海登山/null 涉渡/null 涉猎/null 涉禽/null 涉笔/null 涉者/null 涉览/null 涉计/null 涉讼/null 涉足/null 涉足其间/null 涉过/null 涉险/null 涉黑/null 涉黑案/null 涌上/null 涌了/null 涌入/null 涌出/null 涌到/null 涌动/null 涌去/null 涌向/null 涌回/null 涌往/null 涌来/null 涌泉/null 涌泉穴/null 涌流/null 涌浪/null 涌溢/null 涌现/null 涌至/null 涌起/null 涌进/null 涎水/null 涎沫/null 涎皮赖脸/null 涎着脸/null 涓吉/null 涓埃/null 涓埃之力/null 涓涓/null 涓滴/null 涓滴归公/null 涔涔/null 涕唾/null 涕泗交下/null 涕泗交流/null 涕泗交颐/null 涕泗横流/null 涕泗滂沱/null 涕泗纵横/null 涕泣/null 涕泪/null 涕泪交下/null 涕泪交加/null 涕泪交垂/null 涕泪交流/null 涕泪交集/null 涕泪交零/null 涕零/null 涛声/null 涝害/null 涝灾/null 涞水/null 涞源/null 涟水/null 涟涟/null 涟源/null 涟源地区/null 涟漪/null 涟漪微漾/null 涡卷/null 涡喷/null 涡形/null 涡形物/null 涡扇/null 涡旋/null 涡旋形/null 涡核/null 涡桨/null 涡流/null 涡漩/null 涡虫/null 涡虫纲/null 涡轮/null 涡轮喷气发动机/null 涡轮机/null 涡轮螺旋桨飞机/null 涡轮轴发动机/null 涡阳/null 涣散/null 涣涣/null 涣然/null 涤卡/null 涤去/null 涤尘/null 涤故更新/null 涤棉/null 涤槽/null 涤汰/null 涤瑕/null 涤瑕荡垢/null 涤瑕荡秽/null 涤砚/null 涤秽荡瑕/null 涤纶/null 涤纶线/null 涤罪所/null 涤荡/null 涤虑/null 涤除/null 润丝/null 润例/null 润发/null 润唇膏/null 润喉/null 润嗓/null 润州/null 润州区/null 润格/null 润泽/null 润湿/null 润滑/null 润滑剂/null 润滑性/null 润滑油/null 润滑物/null 润滑脂/null 润笔/null 润肠/null 润肠通便/null 润肤/null 润肤乳/null 润肤膏/null 润肤霜/null 润肤露/null 润肺/null 润色/null 润资/null 润金/null 润饰/null 润饼/null 涧壑/null 涧峡/null 涧水/null 涧流/null 涧溪/null 涧西/null 涧西区/null 涨价/null 涨停板/null 涨出/null 涨到/null 涨势/null 涨升/null 涨大/null 涨幅/null 涨水/null 涨满/null 涨潮/null 涨潮点/null 涨红/null 涨落/null 涨跌/null 涨跌停盘指数/null 涨跌幅限制/null 涨钱/null 涨风/null 涩味/null 涩的/null 涩脉/null 涪城/null 涪城区/null 涪陵/null 涪陵地区/null 涮洗/null 涮火锅/null 涮锅子/null 涯子/null 液位/null 液体/null 液冷/null 液化/null 液化器/null 液化气/null 液化石油气/null 液压/null 液压传动/null 液压千斤顶/null 液压支架/null 液压机/null 液态/null 液态奶/null 液态气/null 液态水/null 液晶/null 液晶屏/null 液晶显示/null 液晶显示器/null 液果/null 液氨/null 液氮/null 液汁/null 液泡/null 液流/null 液状/null 液胞/null 液腺/null 液计/null 液质/null 液量/null 液面/null 涵义/null 涵体/null 涵养/null 涵容/null 涵意/null 涵江/null 涵江区/null 涵洞/null 涵淡/null 涵盖/null 涵管/null 涵蓄/null 涵闸/null 涸泽而渔/null 涸辙之枯/null 涸辙之鱼/null 涸辙之鲋/null 涸辙枯鱼/null 涸辙穷鱼/null 涿州/null 涿鹿/null 淀山湖/null 淀积/null 淀积物/null 淀粉/null 淀粉脢/null 淀粉质/null 淀粉酶/null 淄博/null 淄川/null 淄川区/null 淄蠹/null 淅川/null 淅沥/null 淅飒/null 淆乱/null 淆惑/null 淆杂/null 淇淋/null 淇滨/null 淇滨区/null 淋了/null 淋冲/null 淋巴/null 淋巴液/null 淋巴球/null 淋巴瘤/null 淋巴管/null 淋巴系统/null 淋巴细胞/null 淋巴结/null 淋巴腺/null 淋毒/null 淋水/null 淋浴/null 淋淋/null 淋湿/null 淋溶层/null 淋漓/null 淋漓尽致/null 淋球菌/null 淋病/null 淋菌/null 淋走/null 淋雨/null 淌下/null 淌出/null 淌口水/null 淌汗/null 淌泪/null 淌眼泪/null 淑世/null 淑人君子/null 淑女/null 淑静/null 淖尔/null 淘净/null 淘出/null 淘宝网/null 淘客/null 淘换/null 淘析/null 淘气/null 淘气鬼/null 淘汰/null 淘汰制/null 淘汰赛/null 淘沙/null 淘河/null 淘洗/null 淘淘/null 淘神/null 淘空/null 淘箩/null 淘米/null 淘粪/null 淘选/null 淘金/null 淘金潮/null 淘金者/null 淙淙/null 淝水之战/null 淞江/null 淞沪/null 淡光/null 淡入/null 淡写/null 淡出/null 淡化/null 淡味/null 淡啤/null 淡啤酒/null 淡妆/null 淡妆浓抹/null 淡季/null 淡定/null 淡巴菰/null 淡忘/null 淡月/null 淡水/null 淡水湖/null 淡水镇/null 淡水雪/null 淡水鱼/null 淡水鱼类/null 淡泊/null 淡泊名利/null 淡泊寡味/null 淡涂/null 淡淡/null 淡漠/null 淡灰色/null 淡然/null 淡然处之/null 淡的/null 淡竹/null 淡紫色/null 淡红/null 淡红色/null 淡绿/null 淡绿色/null 淡色/null 淡茶/null 淡菜/null 淡蓝色/null 淡薄/null 淡装/null 淡褐色/null 淡雅/null 淡青/null 淡青色/null 淡静/null 淡饭/null 淡黄/null 淡黄色/null 淡黑/null 淤伤/null 淤塞/null 淤斑/null 淤沙/null 淤泥/null 淤泥般/null 淤浊不清/null 淤滞/null 淤灌/null 淤积/null 淤血/null 淤血斑/null 淤青/null 淫业/null 淫乐/null 淫书/null 淫乱/null 淫亵/null 淫妇/null 淫威/null 淫媒/null 淫巧/null 淫径/null 淫念/null 淫戏/null 淫棍/null 淫欲/null 淫水/null 淫猥/null 淫画/null 淫癖/null 淫秽/null 淫秽物品/null 淫羊藿/null 淫荡/null 淫虫/null 淫行/null 淫词亵语/null 淫词秽语/null 淫话/null 淫语/null 淫贱/null 淫辱/null 淫逸/null 淫邪/null 淫雨/null 淫靡/null 淫风/null 淫风甚炽/null 淫鬼/null 淫魔/null 淬火/null 淬火玻璃/null 淬砺/null 淬透性/null 淮上/null 淮上区/null 淮剧/null 淮北/null 淮南/null 淮南子/null 淮南鸡犬/null 淮安/null 淮河/null 淮海/null 淮海戏/null 淮海战役/null 淮滨/null 淮盐/null 淮阳/null 淮阴/null 淮阴区/null 淮阴地区/null 淯水/null 深一层/null 深不可测/null 深为/null 深井/null 深井泵/null 深交/null 深仇/null 深仇大恨/null 深伤/null 深信/null 深信不疑/null 深入/null 深入人心/null 深入分析/null 深入基层/null 深入实际/null 深入显出/null 深入浅出/null 深入生活/null 深入研究/null 深入群众/null 深兰色/null 深凹/null 深切/null 深到腰/null 深刻/null 深刻性/null 深加工/null 深化/null 深化改革/null 深厉浅揭/null 深厚/null 深厚感情/null 深县/null 深及/null 深及膝/null 深受/null 深受其害/null 深吻/null 深呼吸/null 深圳交易所/null 深圳健力宝/null 深圳河/null 深圳湾/null 深坑/null 深坑乡/null 深处/null 深夜/null 深奥/null 深奸巨猾/null 深宅大院/null 深宫/null 深密/null 深层/null 深层文字/null 深层次/null 深层正字法/null 深层清洁/null 深层阅读障碍/null 深居简出/null 深山/null 深山穷谷/null 深山老林/null 深山野岙/null 深州/null 深巷/null 深广/null 深底/null 深度/null 深度尺/null 深度非词/null 深得/null 深得人心/null 深得民心/null 深忧/null 深思/null 深思熟虑/null 深思者/null 深思远虑/null 深恐/null 深恨/null 深恶/null 深恶痛嫉/null 深恶痛恨/null 深恶痛绝/null 深恶痛诋/null 深悉/null 深情/null 深情厚意/null 深情厚谊/null 深情款款/null 深意/null 深感/null 深成岩/null 深挖/null 深挚/null 深文功劾/null 深文周纳/null 深文巧诋/null 深明大义/null 深暗/null 深更半夜/null 深有/null 深有体会/null 深有同感/null 深有感触/null 深望/null 深根固柢/null 深根固蒂/null 深棕/null 深棕色/null 深槽/null 深橙色/null 深水/null 深水埗/null 深水波/null 深水炸弹/null 深沉/null 深沟/null 深沟坚垒/null 深沟坚壁/null 深沟高垒/null 深沟高壁/null 深泽/null 深洼/null 深浅/null 深测/null 深海/null 深海围网/null 深海烟囱/null 深深/null 深渊/null 深渊薄冰/null 深港/null 深湛/null 深源地震/null 深潭/null 深灰/null 深灰色/null 深爱/null 深痛/null 深痛恶绝/null 深的/null 深省/null 深知/null 深秋/null 深稽博考/null 深究/null 深空/null 深紫/null 深红/null 深红色/null 深绿/null 深绿色/null 深翻/null 深耕/null 深耕犁/null 深耕细作/null 深致谢意/null 深色/null 深草/null 深蓝/null 深蓝色/null 深藏/null 深藏若虚/null 深藏远遁/null 深虑/null 深表/null 深表谢意/null 深表遗憾/null 深褐/null 深褐色/null 深言/null 深计远虑/null 深识远虑/null 深谈/null 深谋/null 深谋远猷/null 深谋远略/null 深谋远虑/null 深谷/null 深蹲/null 深远/null 深透/null 深通/null 深造/null 深邃/null 深部/null 深醒/null 深重/null 深长/null 深闭固拒/null 深闭固距/null 深闺/null 深院/null 深陷/null 淳于/null 淳化/null 淳厚/null 淳安/null 淳朴/null 淳淳/null 混一/null 混世魔王/null 混为/null 混为一体/null 混为一谈/null 混乱/null 混事/null 混交/null 混交林/null 混以/null 混作/null 混俗和光/null 混元/null 混充/null 混入/null 混养/null 混凝剂/null 混凝土/null 混到/null 混制/null 混参/null 混号/null 混合/null 混合词/null 混合体/null 混合剂/null 混合动力车/null 混合双打/null 混合台/null 混合器/null 混合型汽车/null 混合失语症/null 混合感染/null 混合成/null 混合授粉/null 混合模型/null 混合毒剂/null 混合泳/null 混合物/null 混合电子计算机/null 混合肥料/null 混合面/null 混同/null 混名/null 混名儿/null 混吣/null 混和/null 混响/null 混在/null 混子/null 混帐/null 混得/null 混性/null 混成/null 混成曲/null 混战/null 混拌/null 混排/null 混搭/null 混放/null 混日子/null 混有/null 混有盐/null 混杂/null 混杂物/null 混棉/null 混氧燃料/null 混水墙/null 混水摸鱼/null 混汞/null 混沌/null 混沌学/null 混流泵/null 混浊/null 混浊不清/null 混淆/null 混淆不清/null 混淆是非/null 混淆视听/null 混淆黑白/null 混混/null 混混儿/null 混熟/null 混球/null 混球儿/null 混用/null 混种/null 混纺/null 混编/null 混茫/null 混蒙/null 混蛋/null 混血/null 混血儿/null 混血种/null 混行/null 混记/null 混语/null 混账/null 混身/null 混过/null 混进/null 混迹/null 混迹其中/null 混造黑白/null 混频/null 混频器/null 混饭/null 混骗/null 淹了/null 淹博/null 淹旬旷月/null 淹死/null 淹水/null 淹没/null 淹淹一息/null 淹溺/null 淹灌/null 淹灭/null 淹留/null 淹盖/null 添丁/null 添上/null 添乱/null 添仓/null 添入/null 添兵减灶/null 添凑/null 添办/null 添加/null 添加剂/null 添加物/null 添建/null 添枝加叶/null 添油加醋/null 添注/null 添添/null 添满/null 添煤/null 添燃/null 添砖加瓦/null 添箱/null 添置/null 添翼/null 添菜/null 添补/null 添设/null 添购/null 添附/null 添饭/null 添麻烦/null 淼茫/null 清一色/null 清丈/null 清丰/null 清丽/null 清丽俊逸/null 清产/null 清产核资/null 清亮/null 清人/null 清仓/null 清仓查库/null 清代/null 清代通史/null 清偿/null 清偿债务/null 清党/null 清关/null 清兵/null 清册/null 清军/null 清冷/null 清净/null 清凉/null 清凉油/null 清凉饮料/null 清凌凌/null 清减/null 清初/null 清剿/null 清华/null 清华大学/null 清单/null 清厕夫/null 清原/null 清原县/null 清史/null 清史列传/null 清史稿/null 清史馆/null 清君侧/null 清和/null 清唱/null 清唱剧/null 清嗓/null 清圣浊贤/null 清场/null 清垢/null 清城/null 清城区/null 清塘/null 清夜/null 清太宗/null 清太祖/null 清存货/null 清官/null 清官难断家务事/null 清宛县/null 清实录/null 清客/null 清宫/null 清寒/null 清寒情操/null 清尘浊水/null 清州/null 清州市/null 清帐/null 清平/null 清平世界/null 清幽/null 清库/null 清廉/null 清廷/null 清律/null 清徐/null 清心/null 清心寡欲/null 清心省事/null 清恬/null 清扫/null 清扫者/null 清扬/null 清拆/null 清拆户/null 清政府/null 清教/null 清教徒/null 清新/null 清新俊逸/null 清新自然/null 清族/null 清早/null 清明菜/null 清晨/null 清晰/null 清晰度/null 清曹峻府/null 清朗/null 清朝/null 清末/null 清末民初/null 清柠檬/null 清查/null 清查工作/null 清栏/null 清样/null 清楚/null 清欠/null 清歌妙舞/null 清正/null 清正廉明/null 清正廉洁/null 清水/null 清水墙/null 清水寺/null 清水河/null 清水衙门/null 清水镇/null 清江/null 清汤/null 清汤寡水/null 清河/null 清河区/null 清河门/null 清河门区/null 清油/null 清泉/null 清波/null 清泪/null 清洁/null 清洁剂/null 清洁化/null 清洁卫生/null 清洁器/null 清洁工/null 清洁袋/null 清洁车/null 清洗/null 清津市/null 清流/null 清浊/null 清浊同流/null 清浦/null 清浦区/null 清涤/null 清涧/null 清液/null 清淡/null 清清/null 清清楚楚/null 清清白白/null 清渭浊泾/null 清湛/null 清源/null 清源正本/null 清漆/null 清澄/null 清澈/null 清澈见底/null 清火/null 清灰冷灶/null 清炖/null 清点/null 清点帐目/null 清热/null 清爽/null 清玩/null 清理/null 清理队伍/null 清甜/null 清瘦/null 清癯/null 清白/null 清皇朝/null 清盘/null 清真/null 清真寺/null 清真教/null 清福/null 清秀/null 清税/null 清稿/null 清空/null 清算/null 清算业务/null 清算人/null 清算行/null 清红帮/null 清纯/null 清绮/null 清缴/null 清耳悦心/null 清脆/null 清芬/null 清苑/null 清苦/null 清茶/null 清茶淡饭/null 清莹/null 清蒸/null 清规/null 清规戒律/null 清誉/null 清议/null 清议不容/null 清词丽句/null 清谈/null 清谈高论/null 清账/null 清贫/null 清贫如洗/null 清贫寡欲/null 清越/null 清跸传道/null 清辅音/null 清迈/null 清运/null 清还/null 清远/null 清退/null 清选机/null 清通/null 清逸/null 清道/null 清道夫/null 清酌/null 清酒/null 清醇/null 清醒/null 清野/null 清锅冷灶/null 清镇/null 清闲/null 清闲自在/null 清队/null 清除/null 清除出党/null 清雅/null 清雅绝尘/null 清零/null 清静/null 清静寡欲/null 清静无为/null 清音/null 清音丸/null 清风/null 清风两袖/null 清风劲节/null 清风峻节/null 清风明月/null 清风郎月/null 清风高节/null 清风高谊/null 清香/null 清馨/null 清高/null 渊冲/null 渊博/null 渊壑/null 渊富/null 渊广/null 渊泉/null 渊泓/null 渊海/null 渊深/null 渊渊/null 渊源/null 渊玄/null 渊薮/null 渊虑/null 渊识/null 渊诣/null 渊谋/null 渊谷/null 渊远/null 渊默/null 渎犯/null 渎神/null 渎者/null 渎职/null 渎职罪/null 渐伸/null 渐使/null 渐入佳境/null 渐减/null 渐变/null 渐增/null 渐多/null 渐少/null 渐屈线/null 渐弱/null 渐强/null 渐慢/null 渐成/null 渐新世/null 渐新统/null 渐明/null 渐显/null 渐有/null 渐染/null 渐欠/null 渐次/null 渐没/null 渐浓/null 渐淡/null 渐混/null 渐渐/null 渐满/null 渐熄/null 渐现/null 渐短/null 渐老/null 渐至佳境/null 渐行渐远/null 渐被/null 渐趋/null 渐近/null 渐近线/null 渐进/null 渐降法/null 渐隐/null 渐露端倪/null 渐黑/null 渑池/null 渔业/null 渔产/null 渔人/null 渔人之利/null 渔人得利/null 渔具/null 渔利/null 渔区/null 渔场/null 渔夫/null 渔妇/null 渔家/null 渔市/null 渔捞/null 渔政/null 渔期/null 渔村/null 渔歌/null 渔民/null 渔汛/null 渔汛期/null 渔池/null 渔港/null 渔火/null 渔猎/null 渔笼/null 渔经猎史/null 渔网/null 渔翁/null 渔翁之利/null 渔翁得利/null 渔舟/null 渔船/null 渔船队/null 渔轮/null 渔钩/null 渔钩儿/null 渔阳/null 渔阳鼙鼓/null 渔霸/null 渔鼓/null 渖阳/null 渗井/null 渗入/null 渗凉/null 渗出/null 渗出液/null 渗出物/null 渗出量/null 渗化/null 渗变/null 渗坑/null 渗性/null 渗析/null 渗水/null 渗沟/null 渗流/null 渗滤/null 渗滤器/null 渗滤壶/null 渗漏/null 渗碳/null 渗色/null 渗进/null 渗透/null 渗透压/null 渗透性/null 渗透物/null 渗透者/null 渝中/null 渝北/null 渝水/null 渝水区/null 渠沟/null 渠灌/null 渠道/null 渠魁/null 渡假/null 渡口/null 渡头/null 渡期/null 渡桥/null 渡槽/null 渡江/null 渡江战役/null 渡河/null 渡河器材/null 渡河香象/null 渡海/null 渡渡鸟/null 渡船/null 渡船业/null 渡费/null 渡轮/null 渡轮船/null 渡过/null 渡鸦/null 渣土/null 渣块/null 渣堆/null 渣子/null 渣打/null 渣打券/null 渣打银行/null 渣油/null 渣滓/null 渣炉/null 渤海/null 渤海湾/null 渤澥桑田/null 渥太华/null 温乎/null 温习/null 温书/null 温切斯特/null 温压/null 温厚/null 温吞/null 温和/null 温和性/null 温和派/null 温哥华/null 温哥华岛/null 温婉/null 温存/null 温室/null 温室废气储存/null 温室效应/null 温室气体/null 温家宝/null 温宿/null 温尼伯/null 温层/null 温居/null 温岭/null 温岭市/null 温州/null 温差/null 温布尔登/null 温布尔登网球公开赛/null 温布尔顿/null 温布顿/null 温带/null 温床/null 温度/null 温度梯度/null 温度表/null 温度计/null 温得和克/null 温性/null 温情/null 温情定省/null 温情脉脉/null 温故/null 温故知新/null 温故而知新/null 温文/null 温文儒雅/null 温文尔雅/null 温文有礼/null 温文而雅/null 温斯顿/null 温暖/null 温暖如春/null 温暾/null 温柔/null 温柔敦厚/null 温标/null 温水/null 温江/null 温江区/null 温江地区/null 温汤/null 温汤浸种/null 温泉/null 温泉城/null 温浴/null 温润/null 温温/null 温湿图/null 温湿布/null 温湿度/null 温热/null 温煦/null 温特图尔/null 温疟/null 温病/null 温网/null 温良/null 温良俭让/null 温良忍让/null 温良恭俭/null 温良恭俭让/null 温蔼/null 温蠖/null 温血/null 温血动物/null 温觉/null 温课/null 温过/null 温酒/null 温雅/null 温静/null 温顺/null 温食/null 温饱/null 温饱工程/null 温香艳玉/null 温香软玉/null 温馨/null 温馨提示/null 温驯/null 渭华起义/null 渭南/null 渭南地区/null 渭城/null 渭城区/null 渭水/null 渭河/null 渭源/null 渭滨/null 渭滨区/null 渭阳之思/null 渭阳之情/null 港九/null 港交所/null 港人/null 港令/null 港元/null 港内/null 港务/null 港务局/null 港务长/null 港北/null 港北区/null 港区/null 港南/null 港南区/null 港口/null 港口区/null 港口城市/null 港台/null 港名/null 港员/null 港商/null 港域/null 港埠/null 港外/null 港女/null 港客/null 港局/null 港岛/null 港币/null 港市/null 港府/null 港式月饼/null 港弯/null 港汊/null 港湾/null 港澳/null 港澳办/null 港澳办公室/null 港澳台/null 港澳同胞/null 港澳地区/null 港澳工委/null 港督/null 港股/null 港舰/null 港英政府/null 港警/null 港资/null 港邮/null 港都/null 港闸/null 港闸区/null 港龙/null 港龙航空/null 渲染/null 渴不可耐/null 渴念/null 渴想/null 渴慕/null 渴望/null 渴望着/null 渴死/null 渴求/null 渴着/null 渴骥奔泉/null 游丝/null 游丝飞絮/null 游乐/null 游乐园/null 游乐场/null 游乡/null 游于/null 游云惊龙/null 游人/null 游人如织/null 游仙/null 游仙区/null 游仙诗/null 游伴/null 游侠/null 游侠骑士/null 游兴/null 游击/null 游击区/null 游击战/null 游击战术/null 游击队/null 游击队员/null 游刃/null 游刃有余/null 游动/null 游动哨/null 游勇/null 游历/null 游历者/null 游去/null 游吟诗人/null 游园/null 游园会/null 游子/null 游学/null 游客/null 游客止步/null 游导/null 游尺/null 游山/null 游山玩水/null 游廊/null 游弋/null 游心寓目/null 游心骋目/null 游憩/null 游憩场/null 游戏/null 游戏三昧/null 游戏人间/null 游戏场/null 游戏尘寰/null 游戏机/null 游戏池/null 游戏王/null 游戏者/null 游戏装/null 游戏设备/null 游戏说/null 游手/null 游手好闲/null 游抏/null 游方/null 游星/null 游春/null 游来/null 游标/null 游标卡尺/null 游标尺/null 游民/null 游民改造/null 游民无产者/null 游水/null 游水器/null 游泳/null 游泳池/null 游泳者/null 游泳衣/null 游泳裤/null 游泳镜/null 游泳馆/null 游牧/null 游牧人/null 游牧区/null 游牧民/null 游牧民族/null 游牧长城/null 游玩/null 游目骋怀/null 游神/null 游离/null 游离电子/null 游禽/null 游移/null 游船/null 游艇/null 游艺/null 游艺会/null 游艺团/null 游艺场/null 游艺机/null 游荡/null 游荡者/null 游蛇/null 游蜂戏蝶/null 游蜂浪蝶/null 游行/null 游行示威/null 游行者/null 游街/null 游街示众/null 游览/null 游览区/null 游览图/null 游记/null 游说/null 游说团/null 游说团体/null 游说者/null 游说集团/null 游谈无根/null 游资/null 游走/null 游踪/null 游辞浮说/null 游过/null 游逛/null 游锡堃/null 游隼/null 游骑兵/null 游骑无归/null 游魂/null 游鱼/null 游鱼出听/null 渺乎其微/null 渺子/null 渺小/null 渺无人烟/null 渺无音信/null 渺渺茫茫/null 渺茫/null 渺虚/null 渺视/null 渺运/null 渺远/null 湄公河/null 湄公河三角洲/null 湄洲岛/null 湄潭/null 湉湉/null 湍急/null 湍流/null 湍湍/null 湎于/null 湔洗/null 湔涤/null 湔雪/null 湖上/null 湖人/null 湖光/null 湖光山色/null 湖内/null 湖内乡/null 湖北大鼓/null 湖北花楸/null 湖区/null 湖南大学/null 湖口/null 湖口乡/null 湖名/null 湖州/null 湖广/null 湖心/null 湖水/null 湖沼/null 湖沼学/null 湖泊/null 湖泽/null 湖滨/null 湖滨区/null 湖滩/null 湖田/null 湖畔/null 湖笔/null 湖绉/null 湖羊/null 湖色/null 湖西/null 湖西乡/null 湖边/null 湖里/null 湖里区/null 湖面/null 湘东/null 湘东区/null 湘乡/null 湘军/null 湘剧/null 湘勇/null 湘南起义/null 湘妃竹/null 湘帘/null 湘桂运河/null 湘桂铁路/null 湘桥/null 湘桥区/null 湘江/null 湘潭/null 湘潭地区/null 湘竹/null 湘绣/null 湘菜/null 湘西/null 湘西鄂西起义/null 湘语/null 湘阴/null 湘黔/null 湘黔铁路/null 湛江/null 湛江地区/null 湛江师范学院/null 湛江港/null 湛河/null 湛河区/null 湛蓝/null 湟中/null 湟水/null 湟源/null 湟鱼/null 湫隘/null 湮没/null 湮没无闻/null 湮灭/null 湮补/null 湾仔/null 湾内/null 湾潭/null 湾环/null 湾里/null 湾里区/null 湾鳄/null 湿冷/null 湿吻/null 湿地/null 湿地中/null 湿婆/null 湿季/null 湿布/null 湿度/null 湿度器/null 湿度学/null 湿度表/null 湿度计/null 湿气/null 湿润/null 湿润剂/null 湿淋淋/null 湿渌渌/null 湿温/null 湿漉漉/null 湿热/null 湿球温度/null 湿疣/null 湿疹/null 湿症/null 湿的/null 湿衣/null 湿货/null 湿软/null 湿透/null 湿透了/null 湿黏/null 溃不成军/null 溃乱/null 溃于蚁穴/null 溃兵/null 溃军/null 溃决/null 溃坝/null 溃堤/null 溃处/null 溃敌/null 溃散/null 溃灭/null 溃烂/null 溃疡/null 溃疡性/null 溃裂/null 溃败/null 溃退/null 溃逃/null 溅出/null 溅射/null 溅开/null 溅散/null 溅水/null 溅污/null 溅泼/null 溅洒/null 溅湿/null 溅溢/null 溅落/null 溅起来/null 溅迸/null 溅酒/null 溆浦/null 溉涤/null 溏便/null 源・赖朝/null 源于/null 源代码/null 源出/null 源器官/null 源城/null 源城区/null 源头/null 源殊派异/null 源氏物语/null 源汇/null 源汇区/null 源泉/null 源流/null 源深流长/null 源清流净/null 源清流洁/null 源清流清/null 源源/null 源源不断/null 源源不绝/null 源源本本/null 源源而来/null 源点/null 源点地址/null 源由/null 源盘/null 源码/null 源程序/null 源自/null 源自于/null 源起/null 源远流长/null 溘先朝露/null 溘然/null 溘逝/null 溜之/null 溜之大吉/null 溜了/null 溜光/null 溜冰/null 溜冰场/null 溜冰者/null 溜冰鞋/null 溜出/null 溜号/null 溜哒/null 溜圆/null 溜子/null 溜平/null 溜开/null 溜掉/null 溜旱冰/null 溜槽/null 溜溜/null 溜溜球/null 溜溜转/null 溜滑/null 溜烟/null 溜狗/null 溜肉/null 溜肩/null 溜肩膀/null 溜脱/null 溜舐/null 溜走/null 溜转/null 溜边/null 溜边儿/null 溜达/null 溜进/null 溜长/null 溜须拍马/null 溟岛/null 溟池/null 溟海/null 溟溟/null 溟漭/null 溟蒙/null 溢于/null 溢于言表/null 溢价/null 溢余/null 溢值/null 溢出/null 溢出效应/null 溢泼/null 溢洪道/null 溢流/null 溢流孔/null 溢流道/null 溢满/null 溢美/null 溢血/null 溢过/null 溢量/null 溥仪/null 溥俊/null 溥天同庆/null 溧水/null 溧阳/null 溪口/null 溪口乡/null 溪壑/null 溪壑无厌/null 溪州/null 溪州乡/null 溪径/null 溪水/null 溪流/null 溪涧/null 溪湖/null 溪湖区/null 溪湖镇/null 溪蟹/null 溪谷/null 溪间/null 溪黄草/null 溯力/null 溯江/null 溯流/null 溯流从源/null 溯流徂源/null 溯流求源/null 溯源/null 溯源穷流/null 溴化氰/null 溴化物/null 溴化钾/null 溴化银/null 溴单质/null 溴水/null 溴甲烷/null 溴酸/null 溴酸盐/null 溴钨灯/null 溶为/null 溶于/null 溶体/null 溶入/null 溶剂/null 溶化/null 溶合/null 溶岩/null 溶岩流/null 溶度/null 溶性/null 溶水/null 溶没/null 溶洞/null 溶液/null 溶源性/null 溶溶/null 溶点/null 溶胶/null 溶脢体/null 溶脢储存疾病/null 溶茶/null 溶蚀/null 溶蚀作用/null 溶血/null 溶血病/null 溶解/null 溶解力/null 溶解度/null 溶解性/null 溶解物/null 溶质/null 溶酶体/null 溷厕/null 溺于/null 溺婴/null 溺宠/null 溺死/null 溺毙/null 溺水/null 溺爱/null 溽暑/null 滁县/null 滁州/null 滂沱/null 滂沱大雨/null 滂湃/null 滇/null/0 滇东/null 滇剧/null 滇池/null 滇红/null 滇缅/null 滇藏/null 滋事/null 滋养/null 滋养品/null 滋养层/null 滋养物/null 滋味/null 滋扰/null 滋润/null 滋滋/null 滋生/null 滋育/null 滋芽/null 滋蔓/null 滋蔓难图/null 滋补/null 滋补剂/null 滋补品/null 滋贺/null 滋贺县/null 滋长/null 滑下/null 滑不唧溜/null 滑了/null 滑倒/null 滑入/null 滑冰/null 滑冰者/null 滑出/null 滑出跑道/null 滑到/null 滑动/null 滑动摩擦/null 滑动轴承/null 滑向/null 滑回/null 滑块/null 滑坡/null 滑头/null 滑开/null 滑旱冰/null 滑杆/null 滑板/null 滑标/null 滑梯/null 滑槽/null 滑模/null 滑步/null 滑步走/null 滑水/null 滑水板/null 滑沙/null 滑流/null 滑润/null 滑溜/null 滑溜溜/null 滑滑/null 滑环/null 滑的/null 滑盖/null 滑石/null 滑石粉/null 滑离/null 滑移/null 滑稽/null 滑稽人/null 滑稽剧/null 滑稽化/null 滑稽可笑/null 滑稽戏/null 滑竿/null 滑粉/null 滑精/null 滑翔/null 滑翔伞/null 滑翔术/null 滑翔机/null 滑翔翼/null 滑翔者/null 滑翔运动/null 滑胎/null 滑脉/null 滑脱/null 滑腻/null 滑膛/null 滑膜/null 滑舌/null 滑落/null 滑行/null 滑行道/null 滑走/null 滑跤/null 滑车/null 滑车神经/null 滑轮/null 滑轮组/null 滑过/null 滑道/null 滑铁卢/null 滑铁卢战役/null 滑铁卢火车站/null 滑门/null 滑阀/null 滑降/null 滑雪/null 滑雪术/null 滑雪板/null 滑雪索道/null 滑雪者/null 滑雪衫/null 滑雪运动/null 滑面/null 滑面粉/null 滑音/null 滑鼠/null 滑鼠垫/null 滑鼠蛇/null 滔天/null 滔天之罪/null 滔天大罪/null 滔天罪行/null 滔滔/null 滔滔不尽/null 滔滔不断/null 滔滔不竭/null 滔滔不绝/null 滕县/null 滕家/null 滕家镇/null 滕州/null 滕斯贝格/null 滕王阁/null 滚上/null 滚作/null 滚倒/null 滚刀/null 滚刀块/null 滚刀肉/null 滚利/null 滚动/null 滚动摩擦/null 滚动条/null 滚动轴承/null 滚回/null 滚圆/null 滚奏/null 滚子/null 滚子轴承/null 滚存/null 滚屏/null 滚开/null 滚彩蛋/null 滚得/null 滚打/null 滚木/null 滚杠/null 滚柱轴承/null 滚水/null 滚水坝/null 滚汤/null 滚沸/null 滚油煎心/null 滚滑/null 滚滚/null 滚滚向前/null 滚滚而来/null 滚烫/null 滚热/null 滚珠/null 滚珠轴承/null 滚球/null 滚瓜溜圆/null 滚瓜烂熟/null 滚着/null 滚石/null 滚筒/null 滚翻/null 滚落/null 滚蛋/null 滚转/null 滚轮/null 滚轴/null 滚边/null 滚过/null 滚进/null 滚针/null 滚针轴承/null 滚铣/null 滚雪球/null 滞后/null 滞塞/null 滞期费/null 滞水/null 滞留/null 滞留费/null 滞碍/null 滞积/null 滞纳/null 滞纳金/null 滞胀/null 滞销/null 滞销品/null 滞销货/null 满不/null 满不在乎/null 满世界/null 满也/null 满了/null 满于/null 满人/null 满位/null 满兜/null 满公/null 满出/null 满分/null 满剌加/null 满口/null 满口之乎者也/null 满口应承/null 满口称赞/null 满口答应/null 满口胡柴/null 满口胡言/null 满口脏话/null 满口袋/null 满口谎言/null 满含热泪/null 满员/null 满嘴/null 满嘴喷粪/null 满嘴起疱/null 满园春色/null 满地/null 满场/null 满场一致/null 满坐寂然/null 满坑满谷/null 满垒/null 满城/null 满城尽带黄金甲/null 满城风雨/null 满堂/null 满堂彩/null 满堂灌/null 满堂红/null 满处/null 满天/null 满天星/null 满天繁星/null 满天飞/null 满头/null 满头大汗/null 满孝/null 满射/null 满屋/null 满屏/null 满山遍野/null 满岁/null 满州/null 满州乡/null 满州人/null 满州里/null 满布/null 满帆/null 满师/null 满座/null 满座风生/null 满当当/null 满心/null 满心欢喜/null 满怀/null 满怀信心/null 满意/null 满手/null 满打满算/null 满招/null 满招损/null 满招损谦受益/null 满拧/null 满文/null 满旗/null 满是/null 满月/null 满有/null 满有谱/null 满服/null 满期/null 满条/null 满杯/null 满桶/null 满汉/null 满汉全席/null 满江红/null 满洲/null 满洲国/null 满洲里/null 满洲问题/null 满清/null 满清政府/null 满溢/null 满满/null 满满当当/null 满满登登/null 满满的/null 满潮/null 满点/null 满登登/null 满的/null 满盆/null 满盈/null 满盘/null 满盘皆输/null 满目/null 满目琳琅/null 满目疮痍/null 满目荆榛/null 满眼/null 满碗/null 满箱/null 满篮/null 满而不溢/null 满脑/null 满脸/null 满脸生花/null 满脸通红/null 满脸风尘/null 满腔/null 满腔热忱/null 满腔热情/null 满腔热血/null 满腹/null 满腹文章/null 满腹牢骚/null 满腹狐疑/null 满腹经纶/null 满舌生花/null 满舵/null 满街/null 满袋/null 满袖春风/null 满语/null 满负荷/null 满贯/null 满足/null 满足于/null 满足感/null 满身/null 满身尘埃/null 满载/null 满载而归/null 满都/null 满钱袋/null 满门/null 满门抄斩/null 满面/null 满面春风/null 满面红光/null 满额/null 滤光/null 滤出/null 滤去/null 滤取/null 滤嘴/null 滤器/null 滤尘器/null 滤掉/null 滤斗/null 滤毒/null 滤毒通风装置/null 滤池/null 滤波/null 滤波器/null 滤液/null 滤清/null 滤清器/null 滤砂/null 滤纸/null 滤网/null 滤膜/null 滤色镜/null 滤过/null 滤过性病毒/null 滤锅/null 滤除/null 滤饼/null 滥交/null 滥伐/null 滥写/null 滥减/null 滥刑/null 滥占/null 滥印/null 滥发/null 滥吏赃官/null 滥垦/null 滥增/null 滥套子/null 滥好人/null 滥官污吏/null 滥成/null 滥捕/null 滥摊/null 滥施/null 滥服/null 滥杀/null 滥杀无辜/null 滥污/null 滥漫/null 滥用/null 滥用权力/null 滥用职权/null 滥砍/null 滥砍滥伐/null 滥竽/null 滥竽充数/null 滥觞/null 滥调/null 滥贴/null 滥造/null 滥骂/null 滦南/null 滦平/null 滦河/null 滨临/null 滨城/null 滨城区/null 滨州/null 滨州地区/null 滨松/null 滨松市/null 滨江/null 滨江区/null 滨洲铁路/null 滨海/null 滨海新区/null 滨海边疆区/null 滨湖/null 滨湖区/null 滨田/null 滨田・靖一/null 滨绥铁路/null 滩上/null 滩地/null 滩头/null 滩头堡/null 滩头阵/null 滩涂/null 滩簧/null 滩羊/null 滩装/null 滴下/null 滴下物/null 滴出/null 滴剂/null 滴定/null 滴定管/null 滴干/null 滴水/null 滴水不漏/null 滴水不羼/null 滴水成冰/null 滴水成冻/null 滴水瓦/null 滴水石/null 滴水石穿/null 滴水穿石/null 滴沥/null 滴注/null 滴流/null 滴溜/null 滴溜儿/null 滴溜溜/null 滴滴/null 滴滴涕/null 滴漏/null 滴漏计时器/null 滴灌/null 滴点/null 滴瓶/null 滴石/null 滴答/null 滴答声/null 滴管/null 滴翠/null 滴落/null 滴虫/null 滴虫类/null 滴血/null 滴道/null 滴道区/null 滴酒不沾/null 滴里嘟噜/null 滴里耷拉/null 滴量/null 滴量计/null 漂了/null 漂亮/null 漂亮话/null 漂儿/null 漂净/null 漂去/null 漂向/null 漂摇/null 漂散/null 漂来物/null 漂染/null 漂母进饭/null 漂泊/null 漂洋/null 漂洋过海/null 漂洗/null 漂流/null 漂流物/null 漂流瓶/null 漂流者/null 漂浮/null 漂浮物/null 漂浮者/null 漂海/null 漂游/null 漂渺/null 漂漂/null 漂漂亮亮/null 漂白/null 漂白剂/null 漂白水/null 漂白粉/null 漂着/null 漂砾/null 漂移/null 漂荡/null 漂落/null 漂行/null 漂起/null 漂进/null 漂零/null 漂零蓬断/null 漂雷/null 漆上/null 漆包线/null 漆匠/null 漆器/null 漆工/null 漆布/null 漆弹/null 漆成/null 漆木纹/null 漆枪/null 漆树/null 漆树科/null 漆桶/null 漆漆/null 漆片/null 漆画/null 漆皮/null 漆身吞炭/null 漆雕/null 漆黑/null 漆黑一团/null 漉漉/null 漉网/null 漏了/null 漏做/null 漏光/null 漏兜/null 漏出/null 漏出量/null 漏划/null 漏列/null 漏办/null 漏加/null 漏勺/null 漏卮/null 漏嘴/null 漏填/null 漏壶/null 漏夜/null 漏失/null 漏子/null 漏字/null 漏尽/null 漏尽更阑/null 漏屋/null 漏底/null 漏征/null 漏扣/null 漏报/null 漏损/null 漏掉/null 漏接球/null 漏收/null 漏斗/null 漏斗云/null 漏斗形/null 漏查/null 漏气/null 漏水/null 漏水转浑天仪/null 漏池/null 漏油/null 漏泄/null 漏泄天机/null 漏泄春光/null 漏洞/null 漏洞百出/null 漏瓮沃焦釜/null 漏电/null 漏疮/null 漏税/null 漏纳/null 漏缝/null 漏缴/null 漏网/null 漏网之鱼/null 漏网游鱼/null 漏脯充饥/null 漏计/null 漏记/null 漏误/null 漏读/null 漏转/null 漏锅/null 漏隙/null 漏雨/null 漏风/null 漓江/null 演义/null 演习/null 演人/null 演出/null 演出团/null 演出地点/null 演出者/null 演到/null 演剧/null 演化/null 演变/null 演古劝今/null 演员/null 演员阵容/null 演唱/null 演唱会/null 演回/null 演坛/null 演奏/null 演奏会/null 演奏台/null 演奏员/null 演奏家/null 演奏者/null 演完/null 演得/null 演戏/null 演戏似/null 演戏船/null 演成/null 演技/null 演技术/null 演播/null 演播室/null 演替/null 演有/null 演武/null 演武修文/null 演法/null 演示/null 演算/null 演算出/null 演算法/null 演练/null 演绎/null 演绎出/null 演绎式/null 演绎推理/null 演绎法/null 演者/null 演艺/null 演艺人员/null 演艺圈/null 演艺界/null 演讲/null 演讲会/null 演讲学/null 演讲家/null 演讲术/null 演讲者/null 演讲词/null 演讲集/null 演说/null 演说台/null 演说家/null 演说术/null 演说等/null 演说者/null 演进/null 漕河/null 漕渡/null 漕粮/null 漕船/null 漕运/null 漠不关心/null 漠河/null 漠漠/null 漠然/null 漠然置之/null 漠视/null 漩涡/null 漩风/null 漫不经心/null 漫儿/null 漫卷/null 漫反射/null 漫地满天/null 漫天/null 漫天匝地/null 漫天塞地/null 漫天彻地/null 漫天漫地/null 漫天盖地/null 漫天要价/null 漫天遍地/null 漫天遍野/null 漫天飞舞/null 漫射/null 漫山/null 漫山遍野/null 漫应/null 漫延/null 漫散/null 漫无/null 漫无止境/null 漫无目的/null 漫无边际/null 漫步/null 漫步者/null 漫游/null 漫游生物/null 漫溢/null 漫漫/null 漫漫长夜/null 漫漶/null 漫灌/null 漫画/null 漫画家/null 漫笔/null 漫记/null 漫话/null 漫诞不稽/null 漫说/null 漫谈/null 漫过/null 漫道/null 漫长/null 漫长岁月/null 漫长的/null 漫骂/null 漭漭/null 漯河/null 漱口/null 漱口剂/null 漱喉/null 漱洗/null 漱流/null 漱流枕石/null 漳州/null 漳平/null 漳浦/null 漾奶/null 漾濞/null 潆洄/null 潇沥/null 潇洒/null 潇洒风流/null 潇湘/null 潇潇/null 潇潇细雨/null 潋滟/null 潍坊/null 潍坊地区/null 潍城/null 潍城区/null 潘基文/null 潘塔纳尔/null 潘多拉/null 潘多拉魔盒/null 潘太克斯/null 潘婷/null 潘安/null 潘岳/null 潘杨之睦/null 潘江陆海/null 潘通/null 潘金莲/null 潘陆江海/null 潘集/null 潘集区/null 潘鬓成霜/null 潘鬓沈腰/null 潜下/null 潜亏/null 潜伏/null 潜伏性/null 潜伏所/null 潜伏期/null 潜伏着/null 潜入/null 潜力/null 潜动/null 潜势/null 潜匿/null 潜台词/null 潜图问鼎/null 潜在/null 潜在力量/null 潜在危险度/null 潜在威胁/null 潜在媒介/null 潜在性/null 潜山/null 潜山隐市/null 潜形匿迹/null 潜影/null 潜心/null 潜心于/null 潜意识/null 潜望/null 潜望镜/null 潜水/null 潜水人/null 潜水刀/null 潜水员/null 潜水夫病/null 潜水夫症/null 潜水服/null 潜水泵/null 潜水球/null 潜水者/null 潜水艇/null 潜水衣/null 潜水装备拖轮箱/null 潜水运动/null 潜水鸟/null 潜江/null 潜没/null 潜泳/null 潜流/null 潜涵病/null 潜游/null 潜滋暗长/null 潜热/null 潜神默思/null 潜神默记/null 潜科学/null 潜移/null 潜移暗化/null 潜移阴夺/null 潜移默化/null 潜移默夺/null 潜移默运/null 潜能/null 潜航/null 潜舰/null 潜艇/null 潜藏/null 潜蛟困凤/null 潜血/null 潜行/null 潜规则/null 潜质/null 潜踪/null 潜身远祸/null 潜身远迹/null 潜逃/null 潜逃无踪/null 潜随/null 潜骸窜影/null 潜鸟/null 潜龙伏虎/null 潜龙勿用/null 潞城/null 潞西/null 潟湖/null 潢川/null 潢池弄兵/null 潢潦可荐/null 潦乱/null 潦倒/null 潦写/null 潦潦草草/null 潦草/null 潭奥/null 潭子/null 潭子乡/null 潭底/null 潭府/null 潭影/null 潭柘寺/null 潭水/null 潭祉/null 潭第/null 潭腿/null 潮位/null 潮剧/null 潮力/null 潮南/null 潮南区/null 潮呼呼/null 潮声/null 潮安/null 潮州/null 潮州镇/null 潮差/null 潮气/null 潮水/null 潮汐/null 潮汐发电/null 潮汐电站/null 潮汕/null 潮汛/null 潮洲/null 潮流/null 潮涌/null 潮涨潮落/null 潮湿/null 潮白/null 潮红/null 潮脑/null 潮落/null 潮虫/null 潮解/null 潮解性/null 潮讯/null 潮语/null 潮起/null 潮起潮落/null 潮退/null 潮退了/null 潮间带/null 潮阳/null 潮阳区/null 潲水/null 潴留/null 潸潸/null 潸然/null 潸然泪下/null 潺声/null 潺潺/null 潺潺声/null 潼关/null 潼南/null 澄城/null 澄彻/null 澄思寂虑/null 澄江/null 澄沙/null 澄浆泥/null 澄海/null 澄海区/null 澄清/null 澄清事实/null 澄清剂/null 澄清天下/null 澄渊/null 澄湛/null 澄澈/null 澄莹/null 澄迈/null 澈底/null 澈查/null 澌灭/null 澎湃/null 澎湖/null 澎湖列岛/null 澎湖岛/null 澎湖湾/null 澎湖群岛/null 澜沧/null 澜沧县/null 澜沧江/null 澡垢索疵/null 澡堂/null 澡堂子/null 澡塘/null 澡巾/null 澡房/null 澡池/null 澡盆/null 澡票/null 澡类学/null 澡罐/null 澡身浴德/null 澧水/null 澳元/null 澳大利亚/null 澳大利亚国立大学/null 澳大利亚总督/null 澳大利亚洲/null 澳大利亚联邦/null 澳大利亚首都特区/null 澳币/null 澳式橄榄球/null 澳新军团/null 澳新军团日/null 澳洲/null 澳洲人/null 澳洲小鹦鹉/null 澳洲广播电台/null 澳洲黑鸡/null 澳纽/null 澳门国际机场/null 澳门币/null 澳门市/null 澳门立法会/null 澳际/null 澹台/null 澹泊寡欲/null 澹泊明志/null 澹然/null 激光/null 激光二极管/null 激光印字机/null 激光唱片/null 激光器/null 激光打印机/null 激光打引机/null 激光测距仪/null 激光焊接/null 激光照排/null 激光通信/null 激光雷达/null 激凸/null 激切/null 激动/null 激动不安/null 激动人心/null 激励/null 激励机制/null 激化/null 激发/null 激发态/null 激发注射/null 激变/null 激变论/null 激增/null 激奋/null 激射/null 激将/null 激将法/null 激忿填膺/null 激怒/null 激性/null 激恼/null 激情/null 激愤/null 激战/null 激打/null 激扬/null 激昂/null 激昂慷慨/null 激波/null 激活/null 激活扩散网络/null 激活整合模型/null 激流/null 激流勇退/null 激浊扬清/null 激浪/null 激灵/null 激烈/null 激烈化/null 激磁/null 激素/null 激荡/null 激论/null 激贪厉俗/null 激赏/null 激赞/null 激起/null 激越/null 激辩/null 激进/null 激进主义/null 激进分子/null 激进化/null 激进武装/null 激进武装分子/null 激进派/null 激进论/null 激酶/null 濉溪/null 濊貊/null 濑鱼/null 濒临/null 濒临灭绝/null 濒临破产/null 濒临绝境/null 濒于/null 濒于倒闭/null 濒危/null 濒危动物/null 濒危物种/null 濒危野生动植物种国际贸易公约/null 濒死/null 濒河/null 濒海/null 濒灭/null 濒近/null 濠江/null 濠江区/null 濠沟/null 濡染/null 濡毫/null 濡沫涸辙/null 濡湿/null 濮上之音/null 濮上桑间/null 濮阳/null 濯污扬清/null 濯濯/null 濯盥/null 濯缨弹冠/null 濯缨沧浪/null 濯缨洗耳/null 濯缨濯足/null 濯足/null 濯身/null 濯锦以鱼/null 瀍水/null 瀍河/null 瀍河回族区/null 瀑布/null 瀚海/null 瀛台/null 瀛寰/null 瀛洲/null 瀵泉/null 灌上/null 灌下/null 灌丛/null 灌了/null 灌于/null 灌云/null 灌入/null 灌制/null 灌区/null 灌南/null 灌县/null 灌夫骂坐/null 灌录/null 灌木/null 灌木丛/null 灌木林/null 灌水/null 灌法/null 灌注/null 灌注法/null 灌洗/null 灌浆/null 灌渠/null 灌溉/null 灌溉渠/null 灌溉系统/null 灌溉者/null 灌满/null 灌濯/null 灌瓜之义/null 灌站/null 灌篮/null 灌米汤/null 灌肠/null 灌肠剂/null 灌药/null 灌装/null 灌输/null 灌进/null 灌酒/null 灌醉/null 灌阳/null 灌音/null 灞桥/null 灞桥区/null 火上/null 火上加油/null 火上弄冰/null 火上弄冰凌/null 火上浇油/null 火上添油/null 火中/null 火中取栗/null 火主/null 火井/null 火亮/null 火伞高张/null 火伤/null 火伴/null 火候/null 火儿/null 火光/null 火具/null 火冒三丈/null 火刀/null 火刑/null 火刑柱/null 火前/null 火剪/null 火力/null 火力发电/null 火力发电厂/null 火力圈/null 火力点/null 火力配置/null 火势/null 火化/null 火匣子/null 火卫一/null 火印/null 火口/null 火器/null 火地/null 火地群岛/null 火场/null 火场留守分队/null 火坑/null 火堆/null 火塘/null 火墙/null 火大/null 火夫/null 火头/null 火头上/null 火头军/null 火奴鲁鲁/null 火媒/null 火居道士/null 火山/null 火山似/null 火山口/null 火山土/null 火山地震/null 火山学/null 火山岛/null 火山岩/null 火山带/null 火山汤海/null 火山活动/null 火山灰/null 火山爆发/null 火山爆发指数/null 火山砾/null 火山碎屑流/null 火并/null 火影忍者/null 火德星君/null 火急/null 火性/null 火情/null 火成/null 火成岩/null 火成碎屑/null 火把/null 火把节/null 火拼/null 火捻/null 火控/null 火攻/null 火星/null 火星人/null 火星快车/null 火星撞地球/null 火星文/null 火暴/null 火曜日/null 火机/null 火枪/null 火枪手/null 火柱/null 火柴/null 火柴盒/null 火树/null 火树琪花/null 火树银花/null 火棒/null 火气/null 火油/null 火浣布/null 火海/null 火海刀山/null 火湖/null 火漆/null 火火/null 火灭烟消/null 火灾/null 火炉/null 火炕/null 火炬/null 火炬手/null 火炬计划/null 火炭/null 火炮/null 火点/null 火炽/null 火烈鸟/null 火烛/null 火烛小心/null 火烧/null 火烧云/null 火烧似/null 火烧火燎/null 火烧眉毛/null 火烫/null 火热/null 火热水深/null 火焚/null 火焰/null 火焰似/null 火焰喷射器/null 火焰山/null 火然泉达/null 火煤/null 火爆/null 火犁/null 火狐/null 火环/null 火电/null 火电站/null 火盆/null 火眼/null 火眼金睛/null 火眼金睛识真假/null 火石/null 火砖/null 火硝/null 火碱/null 火磨/null 火神/null 火种/null 火笼/null 火筷子/null 火箭/null 火箭学/null 火箭弹/null 火箭炮/null 火箭爆破器/null 火箭筒/null 火箸/null 火红/null 火红色/null 火纸/null 火线/null 火绒/null 火绒草/null 火绳/null 火罐/null 火罐儿/null 火网/null 火老鸦/null 火耕水种/null 火耕水耨/null 火耕流种/null 火耨刀耕/null 火肉/null 火腿/null 火腿肠/null 火舌/null 火色/null 火花/null 火花塞/null 火苗/null 火药/null 火药味/null 火药味甚浓/null 火葬/null 火葬场/null 火葬炉/null 火葬者/null 火蛇/null 火蛛蛛/null 火蜥蜴/null 火蝎子/null 火表/null 火警/null 火车/null 火车头/null 火车票/null 火车站/null 火轮/null 火轮船/null 火辣/null 火辣辣/null 火速/null 火酒/null 火钳/null 火锅/null 火镜/null 火镰/null 火门/null 火险/null 火鸡/null 火鸡肉/null 火鹤/null 火鹤花/null 火龙/null 火龙果/null 灭亡/null 灭亲/null 灭口/null 灭失/null 灭尸/null 灭度/null 灭掉/null 灭敌/null 灭教/null 灭族/null 灭此/null 灭此朝食/null 灭火/null 灭火器/null 灭火筒/null 灭私奉公/null 灭种/null 灭种罪/null 灭绝/null 灭绝人性/null 灭绝种族/null 灭茬/null 灭菌/null 灭虫/null 灭虫宁/null 灭迹/null 灭门/null 灭门之祸/null 灭门绝户/null 灭音器/null 灭顶/null 灭顶之灾/null 灭鼠/null 灭鼠药/null 灯丝/null 灯中/null 灯会/null 灯伞/null 灯光/null 灯具/null 灯台/null 灯台不自照/null 灯号/null 灯坠/null 灯塔/null 灯夫/null 灯头/null 灯市/null 灯座/null 灯彩/null 灯影/null 灯心/null 灯心绒/null 灯心草/null 灯杆/null 灯架/null 灯柱/null 灯标/null 灯油/null 灯泡/null 灯火/null 灯火万家/null 灯火管制/null 灯火辉煌/null 灯火通明/null 灯灰/null 灯片/null 灯盏/null 灯笼/null 灯笼库/null 灯笼果/null 灯笼花/null 灯笼裤/null 灯笼鱼/null 灯管/null 灯红酒绿/null 灯罩/null 灯节/null 灯芯/null 灯芯绒/null 灯芯草/null 灯花/null 灯苗/null 灯草/null 灯草绒/null 灯蕊/null 灯虎/null 灯蛾/null 灯蛾扑火/null 灯语/null 灯谜/null 灰不喇唧/null 灰不溜丢/null 灰不溜秋/null 灰光/null 灰分/null 灰化土/null 灰口铁/null 灰土/null 灰头土脸/null 灰头土脸儿/null 灰头土面/null 灰头草面/null 灰姑娘/null 灰尘/null 灰尘肺/null 灰岩/null 灰岩残丘/null 灰度/null 灰廓/null 灰心/null 灰心丧意/null 灰心丧气/null 灰心槁形/null 灰暗/null 灰棚/null 灰泥/null 灰浆/null 灰渣/null 灰溜/null 灰溜溜/null 灰火/null 灰灰/null 灰烬/null 灰熊/null 灰狼/null 灰猎犬/null 灰獴/null 灰白/null 灰白色/null 灰碴/null 灰绿色/null 灰色/null 灰色市场/null 灰蒙/null 灰蒙蒙/null 灰蓝色/null 灰衣服/null 灰褐/null 灰褐色/null 灰质/null 灰赤杨/null 灰身粉骨/null 灰躯靡骨/null 灰铁/null 灰铸铁/null 灰锰氧/null 灰雾/null 灰顶/null 灰领/null 灰飞烟灭/null 灰鹤/null 灰黄/null 灰黄色/null 灰黑/null 灰黑花/null 灰鼠/null 灵丘/null 灵丹/null 灵丹圣药/null 灵丹妙药/null 灵位/null 灵体/null 灵便/null 灵光/null 灵利/null 灵前/null 灵动/null 灵台/null 灵命/null 灵堂/null 灵塔/null 灵妙/null 灵宝/null 灵家/null 灵寝/null 灵寿/null 灵山/null 灵川/null 灵巧/null 灵床/null 灵异/null 灵快/null 灵性/null 灵怪/null 灵恩/null 灵恩派/null 灵感/null 灵效/null 灵敏/null 灵敏度/null 灵敏性/null 灵曲/null 灵机/null 灵机一动/null 灵杰/null 灵枢经/null 灵柩/null 灵柩台/null 灵柩车/null 灵棺/null 灵榇/null 灵武/null 灵气/null 灵泛/null 灵活/null 灵活多样/null 灵活性/null 灵活机动/null 灵活经营/null 灵渠/null 灵牌/null 灵牙俐齿/null 灵物/null 灵犀/null 灵犀一点通/null 灵犀相通/null 灵猫/null 灵猫类/null 灵璧/null 灵界/null 灵的世界/null 灵知/null 灵石/null 灵符/null 灵肉/null 灵芝/null 灵药/null 灵蛇之珠/null 灵语/null 灵谷寺/null 灵车/null 灵透/null 灵通/null 灵长/null 灵长目/null 灵长类/null 灵长类动物/null 灵雀寺/null 灵验/null 灵魂/null 灵魂人物/null 灵魂出窍/null 灵魂深处/null 灵鸟/null 灶上骚除/null 灶具/null 灶匠/null 灶台/null 灶君/null 灶头/null 灶房/null 灶披间/null 灶火/null 灶王/null 灶王爷/null 灶眼/null 灶神/null 灶神星/null 灶间/null 灶马/null 灶鸡/null 灼伤/null 灼急/null 灼灼/null 灼烧/null 灼热/null 灼痛/null 灼背烧顶/null 灼艾分痛/null 灼见/null 灼见真知/null 灾区/null 灾变/null 灾变论/null 灾变说/null 灾后/null 灾后重建/null 灾场/null 灾害/null 灾害救济/null 灾害链/null 灾年/null 灾患/null 灾情/null 灾星/null 灾殃/null 灾民/null 灾祸/null 灾荒/null 灾难/null 灾难性/null 灾难片/null 灿烂/null 灿烂多彩/null 灿然/null 灿然一新/null 灿若繁星/null 炀金/null 炉上/null 炉丝/null 炉具/null 炉前/null 炉口/null 炉台/null 炉坑/null 炉子/null 炉工/null 炉床/null 炉底/null 炉料/null 炉条/null 炉架/null 炉桥/null 炉渣/null 炉温/null 炉火/null 炉火纯青/null 炉灰/null 炉灶/null 炉甘石/null 炉盘/null 炉窑/null 炉箅子/null 炉膛/null 炉衬/null 炉边/null 炉门/null 炉霍/null 炉顶/null 炉龄/null 炊事/null 炊事员/null 炊事班/null 炊具/null 炊器/null 炊帚/null 炊沙作饭/null 炊沙镂冰/null 炊火/null 炊烟/null 炊臼之戚/null 炊臼之痛/null 炊金馔饭/null 炎亚纶/null 炎凉/null 炎凉世态/null 炎夏/null 炎帝/null 炎帝陵/null 炎性/null 炎性反应/null 炎暑/null 炎炎/null 炎热/null 炎症/null 炎黄/null 炎黄子孙/null 炒买炒卖/null 炒作/null 炒冷饭/null 炒勺/null 炒匀/null 炒卖/null 炒向/null 炒地皮/null 炒家/null 炒房/null 炒更/null 炒汇/null 炒热/null 炒熟/null 炒米/null 炒粉/null 炒股/null 炒股票/null 炒菜/null 炒菠菜/null 炒蛋/null 炒货/null 炒过/null 炒锅/null 炒青/null 炒面/null 炒饭/null 炒鱿鱼/null 炒鸡蛋/null 炔烃/null 炕上/null 炕下/null 炕去/null 炕头/null 炕席/null 炕床/null 炕桌/null 炕桌儿/null 炕沿/null 炕洞/null 炖汤/null 炖烂/null 炖煌/null 炖煮/null 炖熟/null 炖肉/null 炖菜/null 炖锅/null 炖鱼/null 炙冰使燥/null 炙凤烹龙/null 炙手可热/null 炙手而热/null 炙烤/null 炙热/null 炙肤皲足/null 炙酷/null 炙鸡渍酒/null 炫富/null 炫异争奇/null 炫昼缟夜/null 炫玉贾石/null 炫目/null 炫示/null 炫耀/null 炫鬻/null 炬者/null 炭刷/null 炭化/null 炭层/null 炭材/null 炭棒/null 炭火/null 炭炉/null 炭画/null 炭疽/null 炭疽杆菌/null 炭疽热/null 炭疽病/null 炭疽菌苗/null 炭盆/null 炭窑/null 炭笔/null 炭精/null 炭精棒/null 炭素/null 炭黑/null 炮仗/null 炮位/null 炮儿局/null 炮兵/null 炮兵营/null 炮兵连/null 炮凤烹龙/null 炮击/null 炮制/null 炮口/null 炮台/null 炮响/null 炮塔/null 炮声/null 炮姜/null 炮子儿/null 炮座/null 炮弹/null 炮战/null 炮手/null 炮打/null 炮打灯儿/null 炮术/null 炮架/null 炮栓/null 炮格/null 炮楼/null 炮火/null 炮火连天/null 炮灰/null 炮炼/null 炮烙/null 炮眼/null 炮种/null 炮筒/null 炮筒子/null 炮管/null 炮索/null 炮耳/null 炮舰/null 炮舰外交/null 炮舰政策/null 炮艇/null 炮衣/null 炮身/null 炮车/null 炮轰/null 炮钎/null 炮铳/null 炮队/null 炮龙烹凤/null 炯炯/null 炯炯有神/null 炳如日星/null 炳文/null 炳炳凿凿/null 炳炳麟麟/null 炳烛/null 炳烛夜游/null 炳焕/null 炳然/null 炳耀/null 炳耀千秋/null 炳若日星/null 炳著/null 炳蔚/null 炷香/null 炸两/null 炸丸子/null 炸伤/null 炸出/null 炸土/null 炸土豆条/null 炸土豆条儿/null 炸土豆片/null 炸坏/null 炸垮/null 炸声/null 炸子鸡/null 炸开/null 炸弹/null 炸得/null 炸成/null 炸掉/null 炸断/null 炸机/null 炸死/null 炸毁/null 炸油/null 炸油饼/null 炸破/null 炸碎/null 炸窝/null 炸糕/null 炸肉排/null 炸药/null 炸薯片/null 炸裂/null 炸酱/null 炸酱面/null 炸锅/null 炸雷/null 炸饼/null 炸鱼/null 炸鸡/null 炸鸡翅/null 炸鸡褪/null 点上/null 点了/null 点交/null 点亮/null 点人/null 点人数/null 点儿/null 点兵/null 点军/null 点军区/null 点出/null 点击/null 点击付费广告/null 点击数/null 点击率/null 点到为止/null 点到即止/null 点化/null 点半/null 点卯/null 点厾/null 点发/null 点号/null 点名/null 点名册/null 点名簿/null 点名羞辱/null 点唱/null 点在/null 点头/null 点头咂嘴/null 点头哈腰/null 点头招呼/null 点好/null 点子/null 点字/null 点字机/null 点定/null 点对点/null 点射/null 点将/null 点开/null 点心/null 点心坊/null 点戏/null 点拨/null 点描法/null 点播/null 点收/null 点数/null 点施/null 点明/null 点染/null 点查/null 点检/null 点歌/null 点水/null 点水不漏/null 点津/null 点清/null 点滴/null 点滴试验/null 点火/null 点火器/null 点火孔/null 点火开关/null 点灯/null 点点/null 点点滴滴/null 点烟/null 点烟器/null 点烟斗/null 点焊/null 点燃/null 点球/null 点电荷/null 点画/null 点眼/null 点着/null 点睛/null 点睛之笔/null 点石成金/null 点破/null 点票/null 点种/null 点积/null 点穴/null 点穿/null 点窜/null 点缀/null 点缀著/null 点脉/null 点菜/null 点著/null 点补/null 点见/null 点视/null 点视厅/null 点评/null 点金成铁/null 点金石/null 点钟/null 点钱/null 点铁成金/null 点阅/null 点阵/null 点阵字体/null 点阵式/null 点阵式打印机/null 点阵打印机/null 点集合/null 点面结合/null 点题/null 点饥/null 点验/null 点鬼火/null 炻器/null 炼丹/null 炼丹八卦炉/null 炼丹术/null 炼之未定/null 炼乳/null 炼制/null 炼制厂/null 炼化/null 炼厂气/null 炼句/null 炼奶/null 炼字/null 炼山/null 炼油/null 炼油厂/null 炼焦/null 炼焦炉/null 炼狱/null 炼珍/null 炼话/null 炼金/null 炼金术/null 炼金术士/null 炼钢/null 炼钢厂/null 炼铁/null 炼铁厂/null 炼铁炉/null 炽烈/null 炽热/null 炽热火山云/null 炽燥/null 炽盛/null 烁烁/null 烁石流金/null 烂崽/null 烂帐/null 烂成/null 烂掉/null 烂摊/null 烂摊子/null 烂死/null 烂污货/null 烂泥/null 烂泥浆/null 烂漫/null 烂炸/null 烂烂/null 烂熟/null 烂熳/null 烂糊/null 烂肠瘟/null 烂舌头/null 烂调/null 烂账/null 烂货/null 烂透/null 烂醉/null 烂醉如泥/null 烂铁/null 烂额焦头/null 烃化作用/null 烃类/null 烃蜡/null 烈军属/null 烈士/null 烈士墓/null 烈士徇名/null 烈士陵/null 烈士陵园/null 烈女/null 烈女不嫁二夫/null 烈女不更二夫/null 烈妇/null 烈属/null 烈山/null 烈山区/null 烈屿/null 烈屿乡/null 烈度/null 烈怒/null 烈性/null 烈性酒/null 烈日/null 烈暑/null 烈火/null 烈火干柴/null 烈火真金/null 烈火见真金/null 烈烈轰轰/null 烈焰/null 烈节/null 烈酒/null 烈风/null 烈马/null 烈鸟/null 烊金/null 烘云托月/null 烘制/null 烘干/null 烘干机/null 烘成/null 烘房/null 烘托/null 烘染/null 烘炉/null 烘烘/null 烘烤/null 烘烤似/null 烘烤器/null 烘焙/null 烘焦/null 烘笼/null 烘笼儿/null 烘箱/null 烘篮/null 烘缸/null 烘衬/null 烘豆/null 烙刑/null 烙制/null 烙印/null 烙画/null 烙画术/null 烙痕/null 烙花/null 烙铁/null 烙饼/null 烛光/null 烛台/null 烛心/null 烛架/null 烛泪/null 烛火/null 烛照/null 烛照数计/null 烛花/null 烛蕊/null 烝民/null 烝黎/null 烟丝/null 烟云供养/null 烟云过眼/null 烟价/null 烟具/null 烟农/null 烟卷/null 烟卷儿/null 烟厂/null 烟台/null 烟台地区/null 烟叶/null 烟味/null 烟嘴/null 烟嘴儿/null 烟囱/null 烟圈/null 烟土/null 烟垢/null 烟壳/null 烟多/null 烟夜蛾/null 烟头/null 烟子/null 烟孔/null 烟尘/null 烟屁/null 烟屁股/null 烟岚云岫/null 烟幕/null 烟幕弹/null 烟径/null 烟感/null 烟斗/null 烟斗柄/null 烟枪/null 烟柱/null 烟树/null 烟民/null 烟气/null 烟波/null 烟波浩渺/null 烟波钓徒/null 烟洞/null 烟海/null 烟消云散/null 烟消火散/null 烟消雾散/null 烟火/null 烟火器材/null 烟火食/null 烟灰/null 烟灰缸/null 烟烬/null 烟煤/null 烟熏/null 烟熏妆/null 烟熏火烤/null 烟熏火燎/null 烟熏眼/null 烟熏着/null 烟瘾/null 烟盒/null 烟硷/null 烟碱/null 烟碱酸/null 烟突/null 烟筒/null 烟管/null 烟管面/null 烟类/null 烟缸/null 烟肉/null 烟膏/null 烟色/null 烟花/null 烟花债/null 烟花厂/null 烟花场/null 烟花女/null 烟花寨/null 烟花巷/null 烟花市/null 烟花柳巷/null 烟花簿/null 烟花粉柳/null 烟花粉黛/null 烟花行院/null 烟花阵/null 烟花风月/null 烟草/null 烟草商/null 烟蒂/null 烟蓑雨笠/null 烟薰/null 烟蚜/null 烟袋/null 烟袋锅/null 烟视媚行/null 烟贩/null 烟道/null 烟酒/null 烟酒不沾/null 烟酒税/null 烟酸/null 烟锅/null 烟雨/null 烟雾/null 烟雾剂/null 烟雾弥漫/null 烟雾症/null 烟雾质/null 烟霏雾集/null 烟霞/null 烟霞痼疾/null 烟霞癖/null 烟霭/null 烟霾/null 烟飞星散/null 烟飞露结/null 烟鬼/null 烤干/null 烤成/null 烤房/null 烤架/null 烤火/null 烤炉/null 烤炙/null 烤烟/null 烤焦/null 烤电/null 烤的/null 烤盘/null 烤着/null 烤箱/null 烤肉/null 烤肉叉/null 烤肉酱/null 烤肉馆/null 烤胡椒香肠/null 烤蓝/null 烤过/null 烤面/null 烤面包/null 烤面包机/null 烤饼/null 烤鸡/null 烤鸭/null 烦乱/null 烦了/null 烦事/null 烦人/null 烦冗/null 烦冤/null 烦劳/null 烦嚣/null 烦天恼地/null 烦心/null 烦心事/null 烦忧/null 烦恼/null 烦扰/null 烦文/null 烦杂/null 烦燥/null 烦琐/null 烦琐哲学/null 烦碎/null 烦累/null 烦言/null 烦言碎语/null 烦言碎辞/null 烦请/null 烦躁/null 烦闷/null 烦难/null 烧不尽/null 烧伤/null 烧光/null 烧到/null 烧制/null 烧包/null 烧化/null 烧卖/null 烧叉肉/null 烧味/null 烧坏/null 烧埋/null 烧夷弹/null 烧完/null 烧尽/null 烧屋/null 烧干/null 烧开/null 烧开水/null 烧录/null 烧得/null 烧心/null 烧心壶/null 烧成/null 烧成灰/null 烧成炭/null 烧掉/null 烧料/null 烧断/null 烧杯/null 烧死/null 烧毁/null 烧毛/null 烧水/null 烧水壶/null 烧沸/null 烧油/null 烧火/null 烧灼/null 烧灼伤/null 烧灼感/null 烧灼疼/null 烧炉/null 烧炭/null 烧烤/null 烧烤酱/null 烧烧/null 烧热/null 烧焊/null 烧焦/null 烧煤/null 烧煮/null 烧熟/null 烧猪/null 烧瓶/null 烧瓷/null 烧用/null 烧眉之急/null 烧着/null 烧砖/null 烧硬/null 烧碱/null 烧窑/null 烧红/null 烧纸/null 烧结/null 烧结矿/null 烧肉/null 烧腊/null 烧茄子/null 烧茶/null 烧荒/null 烧菜/null 烧蓝/null 烧蚀/null 烧蚀体/null 烧起来/null 烧过/null 烧进/null 烧酒/null 烧锅/null 烧饭/null 烧饼/null 烧香/null 烧香拜佛/null 烧高香/null 烧鱼/null 烧鸡/null 烧麦/null 烧黑/null 烩面/null 烩饭/null 烫了/null 烫伤/null 烫发/null 烫头发/null 烫平/null 烫得/null 烫手/null 烫手山芋/null 烫死/null 烫洗/null 烫花/null 烫蜡/null 烫衣/null 烫衣服/null 烫衣板/null 烫酒/null 烫金/null 烫面/null 热中/null 热中子/null 热中者/null 热乎/null 热乎乎/null 热乎劲/null 热交换/null 热传导/null 热值/null 热光/null 热函/null 热分解/null 热切/null 热制/null 热制导/null 热剌剌/null 热力/null 热力学/null 热力学温度/null 热力学温标/null 热功当量/null 热加工/null 热动平衡/null 热劲/null 热化/null 热化学/null 热卖/null 热卖品/null 热压/null 热压釜/null 热合/null 热吻/null 热呼/null 热呼呼/null 热和/null 热固性/null 热土/null 热地蚰蜓/null 热塑性/null 热处理/null 热天/null 热孝/null 热季/null 热学/null 热定型/null 热容/null 热容量/null 热对流/null 热导/null 热导率/null 热射病/null 热尔韦/null 热岛/null 热岛效应/null 热带/null 热带地区/null 热带病/null 热带雨林/null 热带风暴/null 热带鱼/null 热干面/null 热度/null 热得/null 热得快/null 热心/null 热心人/null 热心家/null 热心者/null 热心肠/null 热忱/null 热念/null 热恋/null 热情/null 热情关注/null 热情周到/null 热情接待/null 热情款待/null 热情洋溢/null 热意/null 热感/null 热成层/null 热战/null 热打/null 热捧/null 热插拔/null 热敏/null 热敏性/null 热敏电阻/null 热敷/null 热昏/null 热月政变/null 热望/null 热机/null 热材料/null 热核/null 热核反应/null 热核反应堆/null 热核武器/null 热核聚变反应/null 热比亚/null 热比亚・卡德尔/null 热比娅/null 热比娅・卡德尔/null 热毯/null 热气/null 热气球/null 热气腾腾/null 热水/null 热水器/null 热水澡/null 热水瓶/null 热水袋/null 热污染/null 热汤/null 热汽/null 热河/null 热法/null 热泪/null 热泪盈眶/null 热泵/null 热流/null 热浪/null 热浴/null 热涨/null 热源/null 热潮/null 热火/null 热火朝天/null 热炉/null 热炒/null 热炒热卖/null 热点/null 热烈/null 热烘烘/null 热烫/null 热热闹闹/null 热焓/null 热熬翻饼/null 热爱/null 热爱者/null 热狗/null 热电/null 热电偶/null 热电厂/null 热电堆/null 热电子/null 热电效应/null 热电站/null 热病/null 热症/null 热痉挛/null 热磁/null 热离/null 热离子/null 热管/null 热线/null 热线电话/null 热络/null 热罨/null 热肠/null 热胀/null 热能/null 热脆/null 热脆性/null 热脉冲/null 热腾腾/null 热膨胀/null 热茶/null 热药/null 热薄饼/null 热血/null 热血沸腾/null 热补/null 热衷/null 热衷于/null 热衷者/null 热被/null 热裤/null 热解/null 热认/null 热议/null 热讽/null 热诚/null 热身/null 热身赛/null 热轧/null 热载体/null 热辐射/null 热辣辣/null 热过/null 热运动/null 热连球菌/null 热那亚/null 热量/null 热量单位/null 热量计/null 热钢/null 热钱/null 热销/null 热锅上的蚂蚁/null 热锅上蚂蚁/null 热键/null 热镀/null 热门/null 热门货/null 热闹/null 热障/null 热风/null 热食/null 热饮/null 热香饼/null 烯烃/null 烯类/null 烷基/null 烷基苯/null 烷基苯磺酸钠/null 烷氧基/null 烷烃/null 烹具/null 烹制/null 烹煮/null 烹犬藏弓/null 烹茶/null 烹调/null 烹调学/null 烹调术/null 烹调法/null 烹饪/null 烹饪学/null 烹饪法/null 烹龙炮凤/null 烽火/null 烽火台/null 烽火四起/null 烽火连天/null 烽烟/null 烽烟四起/null 烽烟遍地/null 烽燧/null 焉得/null 焉得虎子/null 焉敢/null 焉有/null 焉用/null 焉知/null 焉耆/null 焉耆县/null 焉耆盆地/null 焉能/null 焊丝/null 焊剂/null 焊口/null 焊合/null 焊头/null 焊工/null 焊接/null 焊接工/null 焊料/null 焊机/null 焊条/null 焊枪/null 焊牢/null 焊管/null 焊缝/null 焊药/null 焊补/null 焊钳/null 焊锡/null 焌油/null 焌黑/null 焕发/null 焕然/null 焕然一新/null 焕然冰释/null 焕若冰释/null 焖烧/null 焖烧锅/null 焖饭/null 焗油/null 焙干/null 焙烤/null 焙烧/null 焙煎/null 焙粉/null 焚书/null 焚书坑儒/null 焚化/null 焚化炉/null 焚如之祸/null 焚尸/null 焚尸扬灰/null 焚尸炉/null 焚林之求/null 焚林而田/null 焚林而畋/null 焚毁/null 焚烧/null 焚琴煮鹤/null 焚砚/null 焚膏继晷/null 焚舟破釜/null 焚芝锄蕙/null 焚身/null 焚风/null 焚香/null 焚香敬神/null 焚香顶礼/null 焚骨扬灰/null 焢肉/null 焦作/null 焦化/null 焦噪/null 焦土/null 焦头烂额/null 焦干/null 焦心/null 焦心劳思/null 焦急/null 焦成/null 焦木/null 焦枯/null 焦比/null 焦沙烂石/null 焦油/null 焦渴/null 焦灼/null 焦炉/null 焦炙/null 焦炭/null 焦点/null 焦热电/null 焦焦/null 焦煤/null 焦熬投石/null 焦燥/null 焦痕/null 焦碳/null 焦糖/null 焦糖舞/null 焦耳/null 焦虑/null 焦虑不安/null 焦虑症/null 焦距/null 焦躁/null 焦金流石/null 焦雷/null 焦饭/null 焦黄/null 焦黑/null 焰口/null 焰心/null 焰火/null 焰状/null 然也/null 然则/null 然后/null 然糠照薪/null 然而/null 然诺/null 然顷/null 煅成末/null 煅炉/null 煅炼/null 煅烧/null 煅石灰/null 煅石膏/null 煊赫/null 煌煌/null 煌煌巨著/null 煌熠/null 煎作/null 煎成/null 煎水作冰/null 煎炒/null 煎炸/null 煎炸油/null 煎炸食品/null 煎煮/null 煎熬/null 煎牛扒/null 煎猪扒/null 煎膏炊骨/null 煎药/null 煎蛋/null 煎蛋卷/null 煎蛋饼/null 煎铲/null 煎锅/null 煎饺/null 煎饼/null 煎鱼/null 煜煜/null 煜熠/null 煞住/null 煞尾/null 煞废心机/null 煞性子/null 煞星/null 煞是/null 煞有介事/null 煞气/null 煞气腾腾/null 煞没/null 煞白/null 煞神/null 煞笔/null 煞账/null 煞费/null 煞费心机/null 煞费苦心/null 煞车/null 煞风景/null 煤井/null 煤仓/null 煤价/null 煤储量/null 煤化/null 煤区/null 煤厂/null 煤坑/null 煤块/null 煤堆/null 煤夫/null 煤尘/null 煤层/null 煤层气/null 煤屑/null 煤库/null 煤斗/null 煤斤/null 煤核/null 煤核儿/null 煤毒/null 煤气/null 煤气化/null 煤气灯/null 煤气灶/null 煤气炉/null 煤气罐/null 煤气表/null 煤油/null 煤渣/null 煤火/null 煤灰/null 煤炉/null 煤炭/null 煤炭工业/null 煤烟/null 煤焦油/null 煤球/null 煤田/null 煤矸石/null 煤矿/null 煤矿主/null 煤矿内/null 煤矿工人/null 煤砖/null 煤砟子/null 煤窑/null 煤箱/null 煤粉灰/null 煤精/null 煤系/null 煤耗/null 煤船/null 煤质/null 煤车/null 煤都/null 煤量名/null 煤饼/null 煤黑/null 煤黑油/null 煦仁孑义/null 煦日/null 煦暖/null 煦煦/null 照临/null 照亮/null 照人/null 照付/null 照价/null 照会/null 照作不误/null 照例/null 照做/null 照像/null 照像机/null 照光/null 照公理/null 照准/null 照出/null 照到/null 照办/null 照功行赏/null 照单全收/null 照原样/null 照发/null 照墙/null 照壁/null 照妖镜/null 照实/null 照射/null 照常/null 照应/null 照度/null 照度计/null 照录/null 照征/null 照得/null 照惯例/null 照抄/null 照护/null 照拂/null 照提/null 照搬/null 照收/null 照数/null 照料/null 照旧/null 照明/null 照明弹/null 照明灯/null 照明者/null 照映/null 照本宣科/null 照材/null 照样/null 照此/null 照灯/null 照照/null 照片/null 照片儿/null 照片子/null 照片底版/null 照物/null 照猫画虎/null 照理/null 照用/null 照登/null 照直/null 照相/null 照相侦察/null 照相制版/null 照相师/null 照相机/null 照相版/null 照相簿/null 照相纸/null 照相馆/null 照看/null 照眼/null 照着/null 照章/null 照章办事/null 照管/null 照约定/null 照纳/null 照缴/null 照耀/null 照老/null 照萤映雪/null 照著/null 照葫芦画瓢/null 照见/null 照记/null 照说/null 照镜/null 照镜子/null 照面/null 照面儿/null 照顾/null 照领/null 煨干就湿/null 煨干避湿/null 煮出/null 煮好/null 煮干/null 煮开/null 煮得/null 煮成/null 煮掉/null 煮沸/null 煮法/null 煮滚/null 煮烂/null 煮热/null 煮熟/null 煮硬/null 煮粥焚须/null 煮肉/null 煮菜/null 煮蛋/null 煮蛋计时器/null 煮豆燃萁/null 煮过/null 煮酒/null 煮锅/null 煮饭/null 煮鹤焚琴/null 煸炒/null 煽动/null 煽动性/null 煽动者/null 煽动颠覆国家政权/null 煽动颠覆国家罪/null 煽情/null 煽惑/null 煽扇人/null 煽火/null 煽诱/null 煽起/null 煽阴风/null 煽风/null 煽风点火/null 熄火/null 熄灭/null 熄灭了/null 熄灯/null 熊一样/null 熊倪/null 熊包/null 熊市/null 熊心豹胆/null 熊成基/null 熊掌/null 熊本/null 熊本县/null 熊本市/null 熊熊/null 熊熊大火/null 熊熊燃烧/null 熊狸/null 熊猫/null 熊猫眼/null 熊猴/null 熊皮/null 熊皮帽/null 熊瞎子/null 熊类/null 熊经鸟申/null 熊经鸱颈/null 熊罢之祥/null 熊罴/null 熊罴之士/null 熊耳山/null 熊胆/null 熊胆草/null 熊腰虎背/null 熊虎之士/null 熊蜂/null 熏制/null 熏制厂/null 熏制者/null 熏天/null 熏天吓地/null 熏得/null 熏心/null 熏染/null 熏沐/null 熏烤/null 熏着/null 熏肉/null 熏腐之余/null 熏蒸/null 熏蒸剂/null 熏衣草/null 熏陶/null 熏陶成性/null 熏风/null 熏风徐来/null 熏香/null 熏黑/null 熏黑了/null 熔丝/null 熔为/null 熔剂/null 熔化/null 熔化点/null 熔合/null 熔岩/null 熔岩山/null 熔岩流/null 熔岩湖/null 熔岩穹丘/null 熔岩高原/null 熔接/null 熔断/null 熔断器/null 熔毁/null 熔浆/null 熔渣/null 熔炉/null 熔点/null 熔炼/null 熔焊/null 熔矿炉/null 熔胶锅/null 熔融/null 熔融岩浆/null 熔解/null 熔解热/null 熔铸/null 熙壤/null 熙提/null 熙攘/null 熙春茶/null 熙来攘往/null 熙熙/null 熙熙壤壤/null 熙熙攘攘/null 熙熙融融/null 熟丝/null 熟习/null 熟了/null 熟人/null 熟人熟事/null 熟制/null 熟化/null 熟友/null 熟啤酒/null 熟土/null 熟地/null 熟女/null 熟字/null 熟客/null 熟年/null 熟念/null 熟思/null 熟悉/null 熟成/null 熟手/null 熟料/null 熟无熟手/null 熟橡胶/null 熟烂/null 熟烫/null 熟睡/null 熟知/null 熟石灰/null 熟石膏/null 熟稔/null 熟练/null 熟练工人/null 熟练者/null 熟肉/null 熟能无惑/null 熟能生巧/null 熟荒/null 熟菜/null 熟落/null 熟虑/null 熟蚕/null 熟视/null 熟视无睹/null 熟记/null 熟识/null 熟语/null 熟请/null 熟读/null 熟谙/null 熟路/null 熟路轻车/null 熟路轻辙/null 熟透/null 熟道/null 熟道儿/null 熟铁/null 熟铜/null 熟门熟路/null 熟食/null 熟食店/null 熟饭/null 熠烁/null 熠煜/null 熠熠/null 熠耀/null 熨帖/null 熨平/null 熨斗/null 熨法/null 熨烫/null 熨衣/null 熨袖架/null 熬出/null 熬到/null 熬夜/null 熬头儿/null 熬心/null 熬成/null 熬更守夜/null 熬汁/null 熬汤/null 熬炼/null 熬煎/null 熬煮/null 熬熬/null 熬磨/null 熬稃/null 熬粥/null 熬膏/null 熬药/null 熬过/null 熵值/null 熹平石经/null 熹微/null 燃放/null 燃放鞭炮/null 燃料/null 燃料元件细棒/null 燃料库/null 燃料循环/null 燃料油/null 燃料电池/null 燃料组合/null 燃料舱/null 燃料芯块/null 燃木/null 燃松读书/null 燃气/null 燃气电厂/null 燃气轮机/null 燃油/null 燃油舱/null 燃灯佛/null 燃点/null 燃烧/null 燃烧剂/null 燃烧器/null 燃烧室/null 燃烧弹/null 燃烧武器/null 燃烧瓶/null 燃烧着/null 燃煤/null 燃煤锅炉/null 燃爆/null 燃物/null 燃犀温峤/null 燃用价值/null 燃眉/null 燃眉之急/null 燃着/null 燃糠自照/null 燃素/null 燃素说/null 燃耗/null 燃膏继晷/null 燃起/null 燃香/null 燎原/null 燎原之火/null 燎泡/null 燔书坑儒/null 燕京/null 燕京啤酒/null 燕京大学/null 燕京酒/null 燕侣莺俦/null 燕俦莺侣/null 燕儿/null 燕北/null 燕啄皇孙/null 燕国/null 燕太子丹/null 燕好/null 燕妒莺惭/null 燕婉之欢/null 燕子/null 燕子衔泥垒大窝/null 燕安鸩毒/null 燕尔新婚/null 燕尾/null 燕尾旗/null 燕尾服/null 燕尾状/null 燕尾蝶/null 燕山/null 燕山山脉/null 燕巢/null 燕巢乡/null 燕巢于幕/null 燕瘦环肥/null 燕科/null 燕窝/null 燕粥/null 燕约莺期/null 燕舞/null 燕舞莺啼/null 燕语/null 燕语莺呼/null 燕语莺啼/null 燕语莺声/null 燕赵/null 燕赵都市报/null 燕足系诗/null 燕隼/null 燕雀/null 燕雀乌鹊/null 燕雀处堂/null 燕雀处屋/null 燕雀安知鸿鹄之志/null 燕雀焉知鸿鹄之志/null 燕雀相贺/null 燕雁代飞/null 燕颔虎头/null 燕颔虎须/null 燕颔虎颈/null 燕鱼/null 燕麦/null 燕麦片/null 燕麦粥/null 燠热/null 燥热/null 燥者/null 燧人/null 燧人氏/null 燧发/null 燧石/null 燧石质/null 燮友/null 燮和/null 燮和之任/null 燮理/null 燮理阴阳/null 爆乳/null 爆了/null 爆光/null 爆内幕/null 爆冷/null 爆冷门/null 爆冷门儿/null 爆出/null 爆发/null 爆发力/null 爆发性/null 爆发户/null 爆发星/null 爆发音/null 爆响/null 爆声/null 爆开/null 爆弹/null 爆料/null 爆机/null 爆棚/null 爆气/null 爆满/null 爆炒/null 爆炸/null 爆炸事件/null 爆炸力/null 爆炸力学/null 爆炸动力学/null 爆炸声/null 爆炸性/null 爆炸波/null 爆炸物/null 爆炸的无效弹/null 爆燃/null 爆燥如雷/null 爆玉米花/null 爆破/null 爆破作业/null 爆破器材/null 爆破手/null 爆破筒/null 爆竹/null 爆笑/null 爆管/null 爆米花/null 爆缩型核武器/null 爆肚/null 爆肚儿/null 爆胎/null 爆舱/null 爆花/null 爆表/null 爆裂/null 爆裂声/null 爆裂物/null 爆雷/null 爆震/null 爆音/null 爆鸣/null 爪儿/null 爪印/null 爪哇/null 爪哇人/null 爪哇岛/null 爪哇语/null 爪子/null 爪尖儿/null 爪牙/null 爪牙之士/null 爪牙之将/null 爪甲/null 爪痕/null 爪蟾/null 爬上/null 爬下/null 爬出/null 爬到/null 爬动/null 爬升/null 爬坡/null 爬墙/null 爬山/null 爬山涉水/null 爬山者/null 爬山虎/null 爬岩/null 爬岩术/null 爬得/null 爬树/null 爬格子/null 爬梳剔抉/null 爬泳/null 爬满/null 爬灰/null 爬犁/null 爬着/null 爬着走/null 爬竿/null 爬绳/null 爬网/null 爬罗剔抉/null 爬耳搔腮/null 爬藤/null 爬虫/null 爬虫动物/null 爬虫类/null 爬行/null 爬行动物/null 爬行类/null 爬行者/null 爬过/null 爬进/null 爬高/null 爱丁堡/null 爱上/null 爱不忍释/null 爱不释手/null 爱与/null 爱丽丝/null 爱丽丝漫游奇境记/null 爱丽思泉/null 爱丽舍宫/null 爱之如命/null 爱乐/null 爱乐乐团/null 爱书/null 爱交/null 爱人/null 爱人儿/null 爱人好士/null 爱人如己/null 爱人民/null 爱他/null 爱伦/null 爱侣/null 爱假/null 爱偷/null 爱克斯光/null 爱克斯射线/null 爱写/null 爱动/null 爱劳动/null 爱卫会/null 爱卿/null 爱厂如家/null 爱吃/null 爱听/null 爱哭/null 爱喝/null 爱因斯坦/null 爱国/null 爱国主义/null 爱国卫生运动委员会/null 爱国如家/null 爱国心/null 爱国活动/null 爱国精神/null 爱国者/null 爱在/null 爱奥华/null 爱奥华州/null 爱奥尼亚海/null 爱女/null 爱奴/null 爱好/null 爱好和平/null 爱好者/null 爱妻/null 爱妾/null 爱子/null 爱学习/null 爱宠/null 爱富嫌贫/null 爱将/null 爱小/null 爱尔兰/null 爱尔兰人/null 爱尔兰共和军/null 爱尔兰共和国/null 爱尔兰海/null 爱尔兰语/null 爱屋及乌/null 爱屋及鸟/null 爱岗/null 爱岗敬业/null 爱州/null 爱巢/null 爱幻想/null 爱德/null 爱德华/null 爱德华・达拉第/null 爱德华兹/null 爱德华岛/null 爱德华王子岛/null 爱德斯沃尔/null 爱德玲/null 爱心/null 爱怜/null 爱恋/null 爱恨/null 爱悦/null 爱情/null 爱情喜剧/null 爱情征服一切/null 爱情片/null 爱惜/null 爱惜羽毛/null 爱意/null 爱慕/null 爱憎/null 爱憎分明/null 爱戴/null 爱才/null 爱才好士/null 爱才如命/null 爱才若渴/null 爱把/null 爱抚/null 爱护/null 爱护公共财物/null 爱提/null 爱搭/null 爱斯基摩/null 爱斯基摩人/null 爱新觉罗/null 爱日惜力/null 爱昵/null 爱晚亭/null 爱染/null 爱毛反裘/null 爱民/null 爱民区/null 爱民如子/null 爱民模范/null 爱沙尼亚/null 爱河/null 爱游玩/null 爱滋/null 爱滋病/null 爱滋病毒/null 爱漂亮/null 爱物/null 爱犬/null 爱玉子/null 爱玛/null 爱玛・沃特森/null 爱玩/null 爱现/null 爱理不理/null 爱琴/null 爱琴文化/null 爱琴海/null 爱用/null 爱留根纳/null 爱畜/null 爱看/null 爱睡/null 爱知/null 爱知县/null 爱祖国/null 爱神/null 爱科学/null 爱称/null 爱窝窝/null 爱立信/null 爱笑/null 爱答不理/null 爱管/null 爱管闲事/null 爱美/null 爱美的/null 爱老虎你/null 爱耍/null 爱能移山/null 爱荷华/null 爱莉丝/null 爱莫之助/null 爱莫利维尔/null 爱莫大于心死/null 爱莫能助/null 爱讲/null 爱词霸/null 爱说爱笑/null 爱读/null 爱谈/null 爱财/null 爱财如命/null 爱起/null 爱辉/null 爱辉区/null 爱达荷/null 爱达荷州/null 爱远恶近/null 爱迪生/null 爱钱如命/null 爱问/null 爱面子/null 爱鸟/null 爱鹤失众/null 爵位/null 爵士/null 爵士乐/null 爵士舞/null 爵士音乐/null 爵禄/null 父严子孝/null 父为子隐/null 父亲/null 父兄/null 父名/null 父命/null 父女/null 父子/null 父慈子孝/null 父执/null 父执辈/null 父方/null 父本/null 父权/null 父权制/null 父析子荷/null 父母/null 父母之命媒妁之言/null 父母之邦/null 父母亲/null 父母双亡/null 父母在不远游/null 父母官/null 父母恩勤/null 父爱/null 父王/null 父称/null 父系/null 父系大家族/null 父老/null 父老兄弟/null 父辈/null 父道/null 爷们/null 爷们儿/null 爷儿/null 爷儿们/null 爷子/null 爷孙/null 爷爷/null 爷羹娘饭/null 爷门/null 爷饭娘羹/null 爸妈/null 爸爸/null 爹地/null 爹妈/null 爹娘/null 爹爹/null 爽亮/null 爽健/null 爽利/null 爽口/null 爽呆了/null 爽地/null 爽当/null 爽心悦目/null 爽心美食/null 爽心豁目/null 爽快/null 爽性/null 爽意/null 爽捷/null 爽朗/null 爽歪歪/null 爽死我了/null 爽气/null 爽然/null 爽然自失/null 爽然若失/null 爽爽快快/null 爽畅/null 爽目/null 爽直/null 爽约/null 爽肤水/null 爽脆/null 爽言/null 爽身粉/null 片上/null 片中/null 片云/null 片云遮顶/null 片假名/null 片儿/null 片儿会/null 片儿汤/null 片儿警/null 片刻/null 片刻前/null 片剂/null 片名/null 片善小才/null 片头/null 片子/null 片尾/null 片岩/null 片形/null 片接寸附/null 片断/null 片时/null 片栏/null 片段/null 片片/null 片状/null 片瓦/null 片瓦无存/null 片甲/null 片甲不回/null 片甲不存/null 片甲不留/null 片甲无存/null 片目/null 片簿/null 片约/null 片纸/null 片纸只字/null 片艳纸/null 片言/null 片言一字/null 片言只字/null 片言只语/null 片言折狱/null 片语/null 片语只辞/null 片酬/null 片长/null 片长末技/null 片长薄技/null 片集/null 片面/null 片面强调/null 片面性/null 片鳞半爪/null 片鳞碎甲/null 片麻岩/null 版主/null 版位/null 版刻/null 版口/null 版图/null 版块/null 版工/null 版式/null 版彩/null 版心/null 版本/null 版术/null 版权/null 版权所有/null 版权页/null 版材/null 版次/null 版照/null 版版六十四/null 版物/null 版画/null 版税/null 版筑/null 版筑饭牛/null 版纳/null 版色/null 版面/null 牌价/null 牌位/null 牌匾/null 牌号/null 牌名/null 牌品/null 牌坊/null 牌子/null 牌子曲/null 牌局/null 牌戏/null 牌桌/null 牌楼/null 牌照/null 牌示/null 牌种/null 牌赌/null 牒谱/null 牖中窥日/null 牙买加/null 牙买加人/null 牙买加胡椒/null 牙人/null 牙侩/null 牙克石/null 牙关/null 牙冠/null 牙刷/null 牙医/null 牙印/null 牙口/null 牙周炎/null 牙周病/null 牙商/null 牙垢/null 牙城/null 牙外/null 牙套/null 牙婆/null 牙子/null 牙床/null 牙座/null 牙慧/null 牙本质/null 牙机巧制/null 牙根/null 牙桥/null 牙椅/null 牙牌/null 牙牙/null 牙牙学语/null 牙班/null 牙疳/null 牙疼/null 牙痛/null 牙白/null 牙白口清/null 牙石/null 牙碜/null 牙祭/null 牙科/null 牙科医生/null 牙筷/null 牙签/null 牙签万轴/null 牙签犀轴/null 牙签玉轴/null 牙签锦轴/null 牙粉/null 牙线/null 牙线棒/null 牙缝/null 牙缝儿/null 牙膏/null 牙色/null 牙花/null 牙菌斑/null 牙虫/null 牙行/null 牙质/null 牙轮/null 牙釉质/null 牙雕/null 牙音/null 牙饰/null 牙髓/null 牙鲆/null 牙齿/null 牙龈/null 牙龈炎/null 牛之一毛/null 牛乳/null 牛仔/null 牛仔帽/null 牛仔衫/null 牛仔裤/null 牛刀/null 牛刀割鸡/null 牛刀小试/null 牛劲/null 牛叫/null 牛头/null 牛头㹴/null 牛头不对马嘴/null 牛头不对马面/null 牛头刨/null 牛头梗/null 牛头犬/null 牛头马面/null 牛奶/null 牛奶场/null 牛奶等/null 牛奶糖/null 牛奶酒/null 牛娃/null 牛尾/null 牛屄/null 牛屎/null 牛山濯濯/null 牛崽裤/null 牛市/null 牛年/null 牛年马月/null 牛性/null 牛扒/null 牛排/null 牛排餐厅/null 牛排馆/null 牛柳/null 牛栏/null 牛桥/null 牛棚/null 牛樟/null 牛比/null 牛毛/null 牛毛细雨/null 牛毛雨/null 牛气/null 牛油/null 牛油戟/null 牛油果/null 牛津/null 牛津城/null 牛津大学/null 牛津群/null 牛海绵状脑病/null 牛溲马勃/null 牛犊/null 牛犊子/null 牛痘/null 牛痘病/null 牛痘苗/null 牛瘟/null 牛百叶/null 牛皮/null 牛皮癣/null 牛皮纸/null 牛皮色/null 牛皮菜/null 牛眼/null 牛磺酸/null 牛筋/null 牛粪/null 牛羊/null 牛群/null 牛耳/null 牛肉/null 牛肉丸/null 牛肉干/null 牛肉汁/null 牛肉面/null 牛肺/null 牛肺疫/null 牛脂/null 牛脊肉/null 牛脖/null 牛脖子/null 牛脾气/null 牛腩/null 牛腿/null 牛膝/null 牛膝草/null 牛至/null 牛舌/null 牛舌草/null 牛舍/null 牛蒡/null 牛虻/null 牛蛙/null 牛蝇/null 牛衣对泣/null 牛角/null 牛角包/null 牛角尖/null 牛角挂书/null 牛角椒/null 牛角面包/null 牛蹄中鱼/null 牛车/null 牛轧糖/null 牛轭湖/null 牛逼/null 牛郎/null 牛郎星/null 牛郎织女/null 牛鞅/null 牛鞭/null 牛顿/null 牛顿力学/null 牛顿运动定律/null 牛饩退敌/null 牛饮/null 牛马/null 牛骥共牢/null 牛骥同槽/null 牛骥同皂/null 牛鬼/null 牛鬼蛇神/null 牛魔王/null 牛鸣声/null 牛黄/null 牛黄上清丸/null 牛黄清心丸/null 牛鼎烹鸡/null 牛鼻/null 牛鼻子/null 牛B/null 牝牡/null 牝牡骊黄/null 牝马/null 牝鸡司晨/null 牝鸡无晨/null 牝鸡晨鸣/null 牝鸡牡鸣/null 牟利/null 牟取/null 牟取暴利/null 牟定/null 牟平/null 牟平区/null 牡丹/null 牡丹乡/null 牡丹亭/null 牡丹区/null 牡丹卡/null 牡丹坊/null 牡丹江/null 牡丹江地区/null 牡丹虽好/null 牡牛/null 牡羊座/null 牡蛎/null 牡鹿/null 牢不可拔/null 牢不可破/null 牢固/null 牢房/null 牢牢/null 牢狱/null 牢稳/null 牢笼/null 牢系/null 牢记/null 牢里/null 牢门/null 牢靠/null 牢靠妥当/null 牢骚/null 牤牛/null 牦牛/null 牧业/null 牧主/null 牧人/null 牧养/null 牧区/null 牧厂/null 牧圉/null 牧地/null 牧场/null 牧夫座/null 牧女/null 牧奴/null 牧工/null 牧师/null 牧师之职/null 牧师会/null 牧放/null 牧歌/null 牧民/null 牧活/null 牧渔/null 牧牛/null 牧牛者/null 牧犬/null 牧猪奴戏/null 牧畜/null 牧神/null 牧神午后/null 牧神节/null 牧童/null 牧笛/null 牧羊/null 牧羊人/null 牧羊场/null 牧羊女/null 牧羊犬/null 牧羊者/null 牧群/null 牧草/null 牧草地/null 牧豕听经/null 牧郎/null 牧野/null 牧野区/null 牧马/null 牧马人/null 牧马者/null 物不平则鸣/null 物业/null 物业税/null 物业管理/null 物中/null 物主/null 物主代词/null 物主限定词/null 物事/null 物产/null 物仓/null 物以稀为贵/null 物以类聚/null 物件/null 物价/null 物价上涨/null 物价局/null 物价工作/null 物价指数/null 物价改革/null 物价政策/null 物价检查/null 物价管理/null 物价补贴/null 物伤其类/null 物体/null 物候/null 物候学/null 物力/null 物力维艰/null 物化/null 物化劳动/null 物华天宝/null 物博/null 物各有主/null 物品/null 物堆/null 物尽其用/null 物建/null 物归原主/null 物归旧主/null 物态/null 物性/null 物情/null 物换星移/null 物探/null 物故/null 物料/null 物是人非/null 物极则衰/null 物极必反/null 物架/null 物欲/null 物欲世界/null 物流/null 物流管理/null 物物/null 物物交换/null 物理/null 物理上/null 物理光学/null 物理力学/null 物理化学/null 物理变化/null 物理学/null 物理学家/null 物理层/null 物理性质/null 物理疗法/null 物理结构/null 物理诊断/null 物理量/null 物盛则衰/null 物离乡贵/null 物种/null 物种学/null 物种起源/null 物竞天择/null 物类/null 物美/null 物美价廉/null 物耗/null 物腐虫生/null 物自体/null 物至则反/null 物色/null 物议/null 物议沸腾/null 物论沸腾/null 物证/null 物语/null 物诱/null 物象/null 物质/null 物质不灭定律/null 物质享受/null 物质性/null 物质损耗/null 物质文明/null 物质文明和精神文明/null 物质财富/null 物资/null 物资供应/null 物资储备/null 物资局/null 物资部/null 物镜/null 物阜民安/null 物阜民熙/null 物面/null 牯牛/null 牲口/null 牲品/null 牲畜/null 牲畜粪/null 牲粉/null 牴牾/null 牴触/null 牵一发而动全身/null 牵伸/null 牵住/null 牵入/null 牵制/null 牵制性/null 牵力/null 牵动/null 牵合附会/null 牵头/null 牵就/null 牵带/null 牵引/null 牵引力/null 牵引器/null 牵引机/null 牵引车/null 牵引量/null 牵强/null 牵强附会/null 牵心/null 牵心挂肠/null 牵念/null 牵手/null 牵扯/null 牵扶/null 牵拌/null 牵挂/null 牵掣/null 牵涉/null 牵涉到/null 牵涉面/null 牵牛/null 牵牛属/null 牵牛星/null 牵牛花/null 牵着鼻子走/null 牵累/null 牵线/null 牵线人/null 牵线搭桥/null 牵绊/null 牵绳/null 牵缠/null 牵羊/null 牵羊担酒/null 牵肠割肚/null 牵肠挂肚/null 牵萝补屋/null 牵记/null 牵起/null 牵车/null 牵连/null 牵马到河易/null 牸牛/null 牸马/null 特为/null 特书/null 特产/null 特价/null 特价品/null 特价菜/null 特任/null 特优/null 特作/null 特使/null 特例/null 特克斯/null 特克斯和凯科斯群岛/null 特克斯市/null 特克斯河/null 特免/null 特内里费/null 特写/null 特准/null 特出/null 特刊/null 特利/null 特别/null 特别严重/null 特别代办/null 特别任务连/null 特别会议/null 特别奖/null 特别客串/null 特别室/null 特别小/null 特别强调/null 特别待遇/null 特别感谢/null 特别护理/null 特别提款权/null 特别是/null 特别法/null 特别法庭/null 特别行政区/null 特别高/null 特制/null 特制品/null 特务/null 特勤/null 特化/null 特区/null 特区建设/null 特卖/null 特卫强/null 特发症/null 特古西加尔巴/null 特向/null 特告/null 特命/null 特命全权大使/null 特困户/null 特地/null 特备/null 特大/null 特大号/null 特奖/null 特奥会/null 特好/null 特嫌/null 特定/null 特定场合/null 特定条件/null 特将/null 特小/null 特屈儿/null 特工/null 特座/null 特异/null 特异功能/null 特异性/null 特异质/null 特异选择/null 特强/null 特征/null 特征值/null 特征向量/null 特征群/null 特征联合/null 特忧/null 特快/null 特快专递/null 特快车/null 特快邮递/null 特急/null 特性/null 特怪/null 特惠/null 特惠关税/null 特惠金/null 特意/null 特批/null 特技/null 特技摄影/null 特技演员/null 特技跳伞/null 特护/null 特护区/null 特拉华/null 特拉华州/null 特拉华河/null 特拉法加广场/null 特拉法尔加/null 特拉法尔加广场/null 特拉维夫/null 特指/null 特提斯海/null 特效/null 特效药/null 特敏福/null 特斯拉/null 特易购/null 特有/null 特权/null 特权阶级/null 特来/null 特案/null 特此/null 特此证明/null 特此通知/null 特殊/null 特殊任务/null 特殊作用/null 特殊关系/null 特殊函数/null 特殊化/null 特殊性/null 特殊情况下/null 特殊护理/null 特殊政策/null 特殊教育/null 特殊符号/null 特殊要求/null 特殊规律/null 特殊需要/null 特洛伊/null 特洛伊木马/null 特派/null 特派员/null 特混/null 特点/null 特烦/null 特瓦族/null 特用/null 特瘦/null 特种/null 特种兵/null 特种工艺/null 特种战争/null 特种空勤团/null 特种营业/null 特种警察/null 特种部队/null 特称/null 特稿/null 特立尼达/null 特立尼达和多巴哥/null 特立独行/null 特等/null 特等功/null 特等奖/null 特约/null 特约记者/null 特级/null 特组/null 特罗多斯/null 特聘/null 特舱/null 特色/null 特解/null 特警/null 特计/null 特许/null 特许半导体/null 特许状/null 特许经营/null 特许证/null 特设/null 特调/null 特谈/null 特质/null 特赦/null 特起/null 特载/null 特辑/null 特选/null 特逗/null 特遣/null 特遣队/null 特邀/null 特邀代表/null 特郡/null 特里普拉/null 特错/null 特长/null 特集/null 特雷沃/null 特雷莎/null 特需/null 特项经费/null 特首/null 特鲁埃尔/null 牺牲/null 牺牲品/null 牺牲打/null 牺牲者/null 牺牲节/null 犀利/null 犀牛/null 犀牛望月/null 犀甲/null 犀皮/null 犀角/null 犀鸟/null 犀黄丸/null 犁地/null 犁壁/null 犁头/null 犁庭扫穴/null 犁庭扫闾/null 犁杖/null 犁沟/null 犁牛/null 犁田/null 犁耕/null 犁铧/null 犁镜/null 犁靬/null 犁骨/null 犂靬/null 犄角/null 犄角之势/null 犄角旮旯/null 犊子/null 犊牛/null 犍为/null 犍牛/null 犍陀罗/null 犎牛/null 犏牛/null 犒劳/null 犒赏/null 犟劲/null 犟劲儿/null 犪牛/null 犬不夜吠/null 犬儒/null 犬儒主义/null 犬兔俱毙/null 犬吠/null 犬吠之警/null 犬嗅觉/null 犬声/null 犬夜叉/null 犬戎/null 犬敲门砖/null 犬牙/null 犬牙交错/null 犬牙差互/null 犬牙盘石/null 犬牙相临/null 犬牙相制/null 犬牙鹰爪/null 犬种/null 犬科/null 犬马/null 犬马之养/null 犬马之劳/null 犬马之命/null 犬马之年/null 犬马之心/null 犬马之恋/null 犬马之报/null 犬马之疾/null 犬马之计/null 犬马之诚/null 犬马之齿/null 犬马恋主/null 犬马齿劳/null 犬马齿索/null 犬齿/null 犯上/null 犯上作乱/null 犯下/null 犯不上/null 犯不着/null 犯不著/null 犯了/null 犯了罪/null 犯事/null 犯人/null 犯做/null 犯傻/null 犯劲/null 犯嘴/null 犯境/null 犯夜/null 犯大错/null 犯天下之大不韪/null 犯得上/null 犯得着/null 犯忌/null 犯愁/null 犯意/null 犯戒/null 犯有/null 犯有前科/null 犯杀/null 犯案/null 犯毒/null 犯法/null 犯法者/null 犯浑/null 犯疑/null 犯病/null 犯禁/null 犯罪/null 犯罪分子/null 犯罪团伙/null 犯罪学/null 犯罪率/null 犯罪现场/null 犯罪者/null 犯罪行为/null 犯罪集团/null 犯者/null 犯而不校/null 犯而务校/null 犯节气/null 犯规/null 犯贫/null 犯过者/null 犯错/null 犯错误/null 犯难/null 犯颜/null 犯颜极谏/null 犯颜苦谏/null 犰狳/null 状元/null 状况/null 状告/null 状声词/null 状好/null 状子/null 状小/null 状态/null 状物/null 状纸/null 状胆/null 状词/null 状语/null 状貌/null 犷悍/null 犹之乎/null 犹他/null 犹他州/null 犹可/null 犹在/null 犹大/null 犹大书/null 犹太/null 犹太人/null 犹太会堂/null 犹太历/null 犹太史/null 犹太复国主义/null 犹太复国主义者/null 犹太教/null 犹太教堂/null 犹太法典/null 犹如/null 犹存/null 犹斗/null 犹新/null 犹未为晚/null 犹热/null 犹犹豫豫/null 犹疑/null 犹自/null 犹若/null 犹言/null 犹豫/null 犹豫不决/null 犹豫不前/null 犹豫不定/null 犹豫未决/null 犹达/null 犹达斯/null 犹鱼得水/null 狂三诈四/null 狂乐乱舞/null 狂乱/null 狂人/null 狂人日记/null 狂似/null 狂信/null 狂信者/null 狂傲/null 狂叫/null 狂吟老监/null 狂吠/null 狂吹/null 狂吼/null 狂呼/null 狂啸/null 狂喜/null 狂夸/null 狂奔/null 狂女/null 狂奴故态/null 狂妄/null 狂妄自大/null 狂徒/null 狂态/null 狂怒/null 狂恋/null 狂恣/null 狂想/null 狂想曲/null 狂战士/null 狂放/null 狂文/null 狂暴/null 狂暴者/null 狂欢/null 狂欢的/null 狂欢节/null 狂歌/null 狂气/null 狂涛巨浪/null 狂涛骇浪/null 狂涨/null 狂满/null 狂潮/null 狂澜/null 狂烈/null 狂热/null 狂热家/null 狂热者/null 狂牛病/null 狂犬/null 狂犬病/null 狂甩/null 狂病人/null 狂笑/null 狂者/null 狂花病叶/null 狂草/null 狂蜂浪蝶/null 狂袭/null 狂言/null 狂诗/null 狂话/null 狂说/null 狂跌/null 狂跑/null 狂跳/null 狂躁/null 狂轰/null 狂轰滥炸/null 狂野/null 狂闹/null 狂顶/null 狂风/null 狂风暴雨/null 狂风沙/null 狂风骤雨/null 狂飙/null 狂飙运动/null 狂饮/null 狂饮暴食/null 狄仁杰/null 狄俄倪索斯/null 狄公案/null 狄塞耳机/null 狄奥多/null 狄奥多・阿多诺/null 狄拉克/null 狄更斯/null 狍子/null 狎妓/null 狎妓冶游/null 狎客/null 狎弄/null 狎昵/null 狐仙/null 狐假虎威/null 狐假鸱张/null 狐兔之悲/null 狐凭鼠伏/null 狐奔鼠窜/null 狐女/null 狐媚/null 狐媚猿攀/null 狐媚魇道/null 狐性/null 狐朋狗党/null 狐朋狗友/null 狐步/null 狐步舞/null 狐死兔泣/null 狐死首丘/null 狐潜鼠伏/null 狐狸/null 狐狸似/null 狐狸尾巴/null 狐狸座/null 狐狸精/null 狐猴/null 狐獴/null 狐疑/null 狐疑未决/null 狐穴/null 狐精/null 狐群狗党/null 狐肷/null 狐臊/null 狐臭/null 狐藉虎威/null 狐虎之威/null 狐蝠/null 狐裘/null 狐裘羔袖/null 狐裘蒙戎/null 狐裘蒙茸/null 狐裘龙茸/null 狐鬼神仙/null 狐鸣狗盗/null 狐鸣鱼书/null 狐鼠之徒/null 狒狒/null 狗一样/null 狗交媾般/null 狗仔式/null 狗仔队/null 狗仗人势/null 狗仗官势/null 狗似/null 狗偷鼠窃/null 狗党/null 狗党狐群/null 狗刨/null 狗口里吐不出象牙/null 狗叫/null 狗吃屎/null 狗吠/null 狗吠之警/null 狗吠声/null 狗吠非主/null 狗命/null 狗咬吕洞宾/null 狗咬狗/null 狗嘴里吐不出象牙/null 狗头/null 狗头军师/null 狗娘养的/null 狗宝/null 狗尾续貂/null 狗尾草/null 狗尿苔/null 狗屁/null 狗屁不通/null 狗屋/null 狗屎/null 狗屎堆/null 狗屎运/null 狗年/null 狗彘不若/null 狗彘不食/null 狗急跳墙/null 狗拳/null 狗拿耗子/null 狗改不了吃屎/null 狗日/null 狗日的粮食/null 狗橇/null 狗洞/null 狗熊/null 狗爬式/null 狗獾/null 狗玩儿的/null 狗男女/null 狗皮/null 狗皮膏药/null 狗盗鸡鸣/null 狗盗鼠窃/null 狗秀/null 狗窝/null 狗窦/null 狗窦大开/null 狗粮/null 狗续貂尾/null 狗群/null 狗肉/null 狗肺狼心/null 狗胆/null 狗胆包天/null 狗腿/null 狗腿子/null 狗苟蝇营/null 狗蚤/null 狗蝇/null 狗血/null 狗血喷头/null 狗血淋头/null 狗行狼心/null 狗豆子/null 狗贼/null 狗追耗子/null 狗逮老鼠/null 狗颠屁股/null 狗食/null 狗食袋/null 狗马之心/null 狗马声色/null 狗鱼/null 狗鹫/null 狙击/null 狙击兵/null 狙击手/null 狙刺/null 狞恶可怖/null 狞猛性/null 狞猫/null 狞笑/null 狠刹/null 狠劲/null 狠命/null 狠巴巴/null 狠心/null 狠心肠/null 狠愎自用/null 狠打/null 狠抓/null 狠拱/null 狠揍/null 狠毒/null 狠治/null 狠狠/null 狡免三窟/null 狡兔/null 狡兔三穴/null 狡兔三窟/null 狡兔死良犬烹/null 狡兔死良狗烹/null 狡涛作浪/null 狡滑/null 狡狯/null 狡猾/null 狡计/null 狡诈/null 狡谲/null 狡赖/null 狡辩/null 狡黠/null 狩猎/null 独一/null 独一无二/null 独个/null 独个儿/null 独二代/null 独享/null 独人秀/null 独体/null 独体字/null 独具/null 独具一格/null 独具匠心/null 独出一时/null 独出心裁/null 独创/null 独创力/null 独创性/null 独到/null 独到之处/null 独力/null 独占/null 独占者/null 独占资本/null 独占鳌头/null 独占鼇头/null 独吞/null 独唱/null 独唱会/null 独善其身/null 独在异乡为异客/null 独坐/null 独块/null 独处/null 独夫/null 独夫民贼/null 独奏/null 独奏曲/null 独奏者/null 独子/null 独孤/null 独孤求败/null 独学寡闻/null 独守空房/null 独家/null 独家生产/null 独家经营/null 独尊/null 独尊儒术/null 独居/null 独居石/null 独属/null 独山/null 独山子/null 独山子区/null 独岛/null 独幕/null 独幕剧/null 独当一面/null 独往/null 独往独来/null 独得/null 独揽/null 独揽市场/null 独擅胜场/null 独放异彩/null 独断/null 独断专行/null 独断家/null 独断独行/null 独有/null 独木不成林/null 独木不林/null 独木桥/null 独木舟/null 独木难支/null 独来独往/null 独栋/null 独树一帜/null 独桅/null 独桅艇/null 独此一家别无分号/null 独步/null 独特/null 独独/null 独生/null 独生女/null 独生子/null 独生子女/null 独生子女政策/null 独白/null 独白者/null 独眼/null 独眼龙/null 独秀/null 独立/null 独立不群/null 独立中文笔会/null 独立国/null 独立国家联合体/null 独立宣言/null 独立市/null 独立性/null 独立战争/null 独立报/null 独立核算/null 独立王国/null 独立者/null 独立自主/null 独立选民/null 独立钻石/null 独立门户/null 独缺/null 独联体/null 独胆/null 独胆英雄/null 独脚/null 独脚戏/null 独脚架/null 独腿/null 独自/null 独自一人/null 独舞/null 独苗/null 独行/null 独行侠/null 独行其是/null 独行其道/null 独行独断/null 独裁/null 独裁官/null 独裁政府/null 独裁政治/null 独裁权/null 独裁统治/null 独裁者/null 独角兽/null 独角戏/null 独角鲸/null 独词句/null 独语/null 独语句/null 独语者/null 独资/null 独资企业/null 独赢/null 独身/null 独身主义/null 独身者/null 独轮/null 独轮车/null 独辟蹊径/null 独酌/null 独门儿/null 独门独户/null 独院/null 独院儿/null 独霸/null 独霸一方/null 独领风骚/null 独饮/null 独龙/null 独龙江/null 狭义/null 狭义相对论/null 狭小/null 狭尖/null 狭巷/null 狭带/null 狭径/null 狭心症/null 狭槽/null 狭窄/null 狭缝/null 狭航道/null 狭谷/null 狭路/null 狭路相逢/null 狭轨/null 狭道/null 狭量/null 狭长/null 狭隘/null 狮位素餐/null 狮吼/null 狮城/null 狮头石竹/null 狮头鹅/null 狮子/null 狮子乡/null 狮子头/null 狮子山/null 狮子山区/null 狮子座/null 狮子搏兔亦用全力/null 狮子林园/null 狮子狗/null 狮子舞/null 狮子般/null 狮子鼻/null 狮尾狒/null 狮心王理查/null 狮泉河/null 狮潭/null 狮潭乡/null 狮王/null 狮禄素餐/null 狮虎兽/null 狮身/null 狮身人面像/null 狰狞/null 狰狞面目/null 狱中/null 狱卒/null 狱吏/null 狱官/null 狱室/null 狱长/null 狱门/null 狴犴/null 狷介/null 狷急/null 狸子/null 狸猫/null 狸藻/null 狸鼠/null 狺狺/null 狻猊/null 狼井/null 狼人/null 狼号鬼哭/null 狼叼/null 狼吞虎咽/null 狼吞虎噬/null 狼嗥/null 狼嚎/null 狼嚎鬼哭/null 狼图腾/null 狼多肉少/null 狼头/null 狼奔豕突/null 狼奔鼠窜/null 狼子兽心/null 狼子野心/null 狼孩/null 狼尾草/null 狼山鸡/null 狼崽/null 狼心狗肺/null 狼心狗行/null 狼毒/null 狼毫/null 狼烟/null 狼烟四起/null 狼牙/null 狼牙棒/null 狼犬/null 狼狈/null 狼狈不堪/null 狼狈为奸/null 狼狗/null 狼猛蜂毒/null 狼獾/null 狼疮/null 狼疮性/null 狼皮/null 狼群/null 狼般/null 狼藉/null 狼蛛/null 狼蜘/null 狼贪鼠窃/null 狼顾/null 狼顾狐疑/null 狼飧虎咽/null 狼餐虎咽/null 猃狁/null 猇亭/null 猇亭区/null 猎人/null 猎兔/null 猎兔狗/null 猎刀/null 猎到/null 猎区/null 猎取/null 猎场/null 猎头/null 猎头人/null 猎奇/null 猎户/null 猎户座/null 猎户座大星云/null 猎户臂/null 猎手/null 猎捕/null 猎杀/null 猎杀红色十月号/null 猎枪/null 猎潜/null 猎潜艇/null 猎物/null 猎犬/null 猎犬座/null 猎狗/null 猎猎/null 猎艳/null 猎获/null 猎装/null 猎豹/null 猎隼/null 猎食/null 猎鸟/null 猎鸟者/null 猎鹰/null 猎鹿/null 猕狲入布袋/null 猕猴/null 猕猴桃/null 猕猴骑土牛/null 猖乱/null 猖厉/null 猖披/null 猖狂/null 猖猖狂狂/null 猖獗/null 猗猗/null 猛一看/null 猛丁/null 猛不防/null 猛乍/null 猛使/null 猛兽/null 猛冲/null 猛冲者/null 猛击/null 猛击一掌/null 猛刺/null 猛力/null 猛劲/null 猛劲儿/null 猛升/null 猛可/null 猛吃/null 猛吸/null 猛咬/null 猛地/null 猛增/null 猛士/null 猛夺/null 猛子/null 猛孤丁地/null 猛射/null 猛将/null 猛干/null 猛性/null 猛戳/null 猛扑/null 猛打/null 猛扭/null 猛抓/null 猛抛/null 猛抬/null 猛拉/null 猛拍/null 猛拐/null 猛拽/null 猛按/null 猛推/null 猛掷/null 猛揍/null 猛摆/null 猛撞/null 猛攻/null 猛敲/null 猛料/null 猛汉/null 猛涨/null 猛火/null 猛炸/null 猛烈/null 猛然/null 猛然间/null 猛犬/null 猛犸/null 猛犸象/null 猛省/null 猛砍/null 猛禽/null 猛落/null 猛虎/null 猛袭/null 猛跌/null 猛身/null 猛进/null 猛追/null 猛酒/null 猛醒/null 猛降/null 猛龙怪客/null 猜不透/null 猜中/null 猜出/null 猜到/null 猜奖/null 猜嫌/null 猜对/null 猜度/null 猜得对/null 猜得透/null 猜忌/null 猜忍/null 猜想/null 猜拳/null 猜拳行令/null 猜枚/null 猜测/null 猜游戏/null 猜猜/null 猜疑/null 猜谜/null 猜谜儿/null 猜错/null 猝倒/null 猝发/null 猝死/null 猝然/null 猝病/null 猞猁/null 猢狲/null 猥亵/null 猥亵性暴露/null 猥劣/null 猥獕/null 猥琐/null 猥词/null 猥辞/null 猥陋/null 猥集/null 猩猩/null 猩猩草/null 猩红/null 猩红热/null 猩红色/null 猪一样/null 猪一般/null 猪下水/null 猪仔/null 猪仔包/null 猪仔馆/null 猪似/null 猪倌/null 猪儿/null 猪八戒/null 猪叫/null 猪嘴/null 猪囊虫病/null 猪圈/null 猪场/null 猪头/null 猪婆龙/null 猪尾/null 猪尾巴/null 猪屎/null 猪崽/null 猪崽儿/null 猪年/null 猪悟能/null 猪扒/null 猪拱菌/null 猪排/null 猪柳/null 猪栏/null 猪水泡病/null 猪油/null 猪油果/null 猪油状/null 猪流感/null 猪流感病毒/null 猪湾/null 猪狗/null 猪狗不如/null 猪猡/null 猪獾/null 猪瘟/null 猪皮/null 猪窠/null 猪笼草/null 猪类/null 猪群/null 猪耳/null 猪肉/null 猪肉饼/null 猪肚/null 猪肝/null 猪肺/null 猪脚/null 猪腰/null 猪腿肉/null 猪舌/null 猪舍/null 猪般/null 猪苓/null 猪苗/null 猪血/null 猪蹄/null 猪链球菌/null 猪链球菌病/null 猪革/null 猪食/null 猪鬃/null 猪鼻/null 猫儿/null 猫儿山/null 猫儿眼/null 猫匿/null 猫叫/null 猫叫声/null 猫咪/null 猫哭老鼠/null 猫哭耗子/null 猫声/null 猫声鸟/null 猫头鹰/null 猫尾草/null 猫属/null 猫沙/null 猫熊/null 猫爪/null 猫王/null 猫皮/null 猫眼/null 猫眼儿/null 猫眼石/null 猫睛石/null 猫科/null 猫耳/null 猫耳洞/null 猫腰/null 猫腻/null 猫雾族/null 猫鱼/null 猫鼠同眠/null 猫鼠游戏/null 猫鼬/null 献上/null 献丑/null 献于/null 献佛/null 献出/null 献可替不/null 献可替否/null 献呈/null 献媚/null 献宝/null 献技/null 献捐/null 献旗/null 献智/null 献替可否/null 献歌/null 献殷勤/null 献疑/null 献礼/null 献祭/null 献策/null 献纳/null 献给/null 献者/null 献艺/null 献花/null 献血/null 献血者/null 献血证/null 献言/null 献计/null 献计献策/null 献词/null 献诗/null 献身/null 献身四化/null 献身精神/null 献身者/null 献辞/null 献酒/null 献金/null 猳国/null 猴儿/null 猴儿精/null 猴头/null 猴头菇/null 猴头鹰/null 猴子/null 猴孩子/null 猴年/null 猴年马月/null 猴急/null 猴戏/null 猴拳/null 猴王/null 猴痘病毒/null 猴皮筋儿/null 猴类/null 猴精/null 猴面包/null 猴面包树/null 猸子/null 猿人/null 猿叶虫/null 猿声/null 猿猴/null 猿玃/null 猿类/null 猿鹤虫沙/null 獐头鼠目/null 獐头鼠脑/null 獐子/null 獒犬/null 獠牙/null 獬豸/null 獭皮/null 獭祭/null 獯鬻/null 獴科/null 獾油/null 玃猿/null 玄之又玄/null 玄乎/null 玄关/null 玄关妙理/null 玄参/null 玄圃/null 玄圃积玉/null 玄奘/null 玄奥/null 玄妙/null 玄妙入神/null 玄妙无穷/null 玄妙莫测/null 玄孙/null 玄学/null 玄学家/null 玄想/null 玄教/null 玄明粉/null 玄机/null 玄机妙算/null 玄武/null 玄武区/null 玄武岩/null 玄武质熔岩/null 玄武门之变/null 玄狐/null 玄理/null 玄疑/null 玄石/null 玄秘/null 玄秘主义/null 玄米茶/null 玄菟郡/null 玄虚/null 玄谋庙算/null 玄远/null 玄青/null 玄黄翻覆/null 率以为常/null 率先/null 率兵/null 率兽食人/null 率土之滨/null 率土同庆/null 率土宅心/null 率土归心/null 率尔/null 率尔成章/null 率尔操觚/null 率师/null 率性任意/null 率然/null 率由卓章/null 率由旧则/null 率由旧章/null 率直/null 率真/null 率部/null 率队/null 率领/null 率马以骥/null 玉井/null 玉井乡/null 玉人/null 玉人吹箫/null 玉体/null 玉佛/null 玉佩/null 玉兔/null 玉兔东升/null 玉兰/null 玉兰片/null 玉兰花/null 玉减香消/null 玉制/null 玉卮无当/null 玉友金昆/null 玉叶/null 玉叶金枝/null 玉叶金柯/null 玉器/null 玉堂金门/null 玉堂金马/null 玉壶/null 玉夫座/null 玉女/null 玉宇/null 玉宇琼楼/null 玉尺量才/null 玉屏/null 玉屏县/null 玉山/null 玉山倾倒/null 玉山倾颓/null 玉山将崩/null 玉川/null 玉川市/null 玉州/null 玉州区/null 玉帛/null 玉帝/null 玉带/null 玉律金科/null 玉成/null 玉成其事/null 玉成其美/null 玉手/null 玉振金声/null 玉搔头/null 玉昆金友/null 玉普西隆/null 玉札/null 玉林/null 玉林地区/null 玉枝金叶/null 玉树/null 玉树州/null 玉树藏族自治州/null 玉楼金殿/null 玉楼金阁/null 玉楼金阙/null 玉泉/null 玉泉区/null 玉泉营/null 玉洁冰清/null 玉浆/null 玉液琼浆/null 玉溪/null 玉溪地区/null 玉滴石/null 玉照/null 玉版宣/null 玉版纸/null 玉环/null 玉玺/null 玉珉/null 玉璞/null 玉田/null 玉皇/null 玉皇大帝/null 玉皇顶/null 玉盘/null 玉石/null 玉石不分/null 玉石俱摧/null 玉石俱烬/null 玉石俱焚/null 玉石同沉/null 玉石同烬/null 玉石同焚/null 玉石景天/null 玉碎/null 玉碎珠沉/null 玉碎花销/null 玉碎香残/null 玉碎香消/null 玉立/null 玉立亭亭/null 玉竹/null 玉簪/null 玉米/null 玉米大斑病/null 玉米淀粉/null 玉米片/null 玉米笋/null 玉米粉/null 玉米粥/null 玉米糁/null 玉米糕/null 玉米糖浆/null 玉米花/null 玉米螟/null 玉米赤霉烯酮/null 玉米面/null 玉米饼/null 玉素甫/null 玉红省/null 玉腿/null 玉臂/null 玉般/null 玉色/null 玉茭/null 玉荷包/null 玉蜀/null 玉蜀黍/null 玉衡/null 玉言/null 玉貌花容/null 玉质金相/null 玉软花柔/null 玉软香温/null 玉里/null 玉里镇/null 玉钗/null 玉镯/null 玉门/null 玉门关/null 玉雕/null 玉露/null 玉露如珠/null 玉音/null 玉食锦衣/null 玉骨冰肌/null 玉髓/null 玉麦/null 玉齿/null 玉龙/null 玉龙县/null 玉龙雪山/null 王世充/null 王丹/null 王义夫/null 王书文/null 王五/null 王仙芝/null 王仙芝起义/null 王伾/null 王位/null 王佐之才/null 王侯/null 王侯公卿/null 王候将相/null 王储/null 王充/null 王光良/null 王八/null 王八蛋/null 王公/null 王公大人/null 王公贵人/null 王公贵戚/null 王公贵族/null 王军霞/null 王冠/null 王力宏/null 王励勤/null 王勃/null 王化/null 王叔文/null 王后/null 王君如/null 王国/null 王国维/null 王国聚会所/null 王士禛/null 王太后/null 王夫之/null 王妃/null 王婆卖瓜/null 王子/null 王子犯法庶民同罪/null 王孙/null 王孙公子/null 王孙贵戚/null 王安石/null 王安石变法/null 王官/null 王实甫/null 王室/null 王宫/null 王家/null 王家卫/null 王家瑞/null 王导/null 王小波/null 王小波李顺起义/null 王岱舆/null 王希孟/null 王平/null 王府/null 王府井/null 王座/null 王廷相/null 王建民/null 王心凌/null 王敦/null 王族/null 王明/null 王昭君/null 王朔/null 王朝/null 王权/null 王楠/null 王母/null 王母娘娘/null 王水/null 王永民/null 王治郅/null 王法/null 王洪文/null 王浆/null 王爵/null 王爷/null 王牌/null 王猛/null 王益/null 王益区/null 王相/null 王码/null 王祖贤/null 王祥卧冰/null 王禹偁/null 王维/null 王羲之/null 王老五/null 王老吉/null 王肃/null 王英/null 王莽/null 王菲/null 王著/null 王薄起义/null 王贡弹冠/null 王选/null 王道/null 王钦若/null 王铜/null 王震/null 王霸/null 王顾左右而言他/null 王颖/null 玎玲/null 玓瓅/null 玛丽/null 玛丽亚/null 玛丽娅/null 玛丽莲・梦露/null 玛俐欧/null 玛利亚/null 玛多/null 玛奇朵/null 玛家/null 玛家乡/null 玛尼/null 玛德琳/null 玛拉基书/null 玛拉基亚/null 玛拿西/null 玛曲/null 玛格丽特/null 玛沁/null 玛瑙/null 玛瑙贝/null 玛窦/null 玛窦福音/null 玛纳斯/null 玛纳斯河/null 玛纳斯镇/null 玛莎拉蒂/null 玛迪达/null 玛门/null 玛雅/null 玛雅人/null 玩世/null 玩世不恭/null 玩世不羁/null 玩乐/null 玩人丧德/null 玩伴/null 玩偶/null 玩偶之家/null 玩儿/null 玩儿不转/null 玩儿命/null 玩儿坏/null 玩儿完/null 玩儿得转/null 玩儿票/null 玩儿花招/null 玩儿闹/null 玩兴/null 玩具/null 玩具厂/null 玩具店/null 玩具枪/null 玩具狗/null 玩具箱/null 玩厌/null 玩味/null 玩命/null 玩器/null 玩地/null 玩场/null 玩失踪/null 玩完/null 玩家/null 玩弄/null 玩弄词藻/null 玩忽/null 玩忽职守/null 玩意/null 玩意儿/null 玩手腕/null 玩木/null 玩水/null 玩法/null 玩滚/null 玩火/null 玩火自焚/null 玩牌/null 玩物/null 玩物丧志/null 玩狎/null 玩猫和老鼠的游戏/null 玩玩/null 玩癖/null 玩票/null 玩笑/null 玩索/null 玩者/null 玩耍/null 玩艺/null 玩艺儿/null 玩花招/null 玩蛇/null 玩话/null 玩赏/null 玩起/null 玩遍/null 玩闹/null 玫瑰/null 玫瑰战争/null 玫瑰星云/null 玫瑰油/null 玫瑰色/null 玫瑰花/null 环伺/null 环住/null 环保/null 环保主义/null 环保主义者/null 环保型/null 环保局/null 环保斗士/null 环保科学/null 环保筷/null 环保署/null 环保部/null 环化/null 环区/null 环卫/null 环围/null 环城/null 环城公路/null 环堵萧然/null 环境/null 环境保护/null 环境卫生/null 环境因素/null 环境影响/null 环境影响评估/null 环境损害/null 环境污染/null 环境法/null 环境温度/null 环境监测/null 环境科学/null 环境行动主义/null 环境规划/null 环境重灾区/null 环太平洋/null 环太平洋地震带/null 环太平洋火山带/null 环子/null 环山/null 环岛/null 环带/null 环幕/null 环式/null 环形/null 环形公路/null 环形山/null 环形结构/null 环形路/null 环往/null 环戊烯/null 环扣/null 环抱/null 环极涡旋/null 环比/null 环氧乙烷/null 环氧树脂/null 环水/null 环江/null 环江县/null 环法/null 环法国/null 环法自行车赛/null 环流/null 环海/null 环渤海湾地区/null 环游/null 环烃/null 环烷/null 环烷烃/null 环状/null 环状列石/null 环环/null 环环紧扣/null 环球/null 环球化/null 环球定位系统/null 环球旅行/null 环球时报/null 环礁/null 环秀山庄/null 环箍/null 环索/null 环线/null 环绕/null 环绕速度/null 环翠/null 环翠区/null 环肌/null 环肥燕瘦/null 环航/null 环节/null 环节动物/null 环节动物门/null 环行/null 环行线/null 环衬/null 环视/null 环评/null 环路/null 环道/null 环链/null 环镜学/null 环面/null 环靶/null 环顾/null 环食/null 现下/null 现世/null 现世报/null 现世现报/null 现为/null 现买/null 现予/null 现今/null 现代/null 现代主义/null 现代五项/null 现代人/null 现代修正主义/null 现代化/null 现代史/null 现代式/null 现代形式/null 现代性/null 现代感/null 现代戏/null 现代战争/null 现代新儒家/null 现代派/null 现代舞/null 现代集团/null 现代音乐/null 现以/null 现价/null 现任/null 现住者/null 现值/null 现像/null 现况/null 现出/null 现势/null 现卖/null 现喜色/null 现在/null 现在分词/null 现在式/null 现在是过去钥匙/null 现地/null 现场/null 现场会/null 现场会议/null 现场报道/null 现场直播/null 现场视察/null 现场采访/null 现型/null 现大洋/null 现存/null 现学现用/null 现实/null 现实主义/null 现实性/null 现实情况/null 现实意义/null 现寄/null 现将/null 现就/null 现局/null 现居/null 现已/null 现年/null 现形/null 现役/null 现役军人/null 现成/null 现成话/null 现成饭/null 现房/null 现抓/null 现政府/null 现时/null 现有/null 现有人口/null 现有企业/null 现期/null 现款/null 现正/null 现汇/null 现法/null 现洋/null 现炒现卖/null 现烤/null 现物/null 现状/null 现率/null 现现/null 现用/null 现眼/null 现磨/null 现笑容/null 现经/null 现职/null 现行/null 现行制度/null 现行政策/null 现行标准/null 现行犯/null 现话/null 现说/null 现象/null 现象学/null 现象论/null 现货/null 现货价/null 现货供应/null 现购/null 现身/null 现身说法/null 现进/null 现量相违/null 现金/null 现金周转/null 现金基础/null 现金帐/null 现金流转/null 现金流转表/null 现金流量/null 现金流量表/null 现金结算/null 现钞/null 现钱/null 现阶段/null 现饕/null 现饭/null 玲玲/null 玲珑/null 玲珑剔透/null 玳瑁/null 玳瑁壳/null 玳瑁眼镜/null 玷污/null 玷辱/null 玺印/null 玻利尼西亚/null 玻利维亚/null 玻尿酸/null 玻意耳/null 玻意耳定律/null 玻片/null 玻璃/null 玻璃丝/null 玻璃似/null 玻璃体/null 玻璃化/null 玻璃器皿/null 玻璃市/null 玻璃布/null 玻璃幕墙/null 玻璃杯/null 玻璃板/null 玻璃柜/null 玻璃沫/null 玻璃状/null 玻璃珠/null 玻璃瓶/null 玻璃砂/null 玻璃砖/null 玻璃管/null 玻璃粉/null 玻璃纤维/null 玻璃纱/null 玻璃纸/null 玻璃缸/null 玻璃罩/null 玻璃肥料/null 玻璃质/null 玻璃钢/null 玻色子/null 珀斯/null 珀西・比希・雪莱/null 珀金/null 珂罗版/null 珉玉/null 珉玉杂淆/null 珊卓/null 珊湖/null 珊瑚/null 珊瑚在网/null 珊瑚岛/null 珊瑚海/null 珊瑚潭/null 珊瑚状/null 珊瑚石/null 珊瑚礁/null 珊瑚色/null 珊瑚虫/null 珍・奥斯汀/null 珍品/null 珍奇/null 珍奶/null 珍宝/null 珍宝岛事件/null 珍异/null 珍惜/null 珍摄/null 珍本/null 珍爱/null 珍玩/null 珍珠/null 珍珠似/null 珍珠小番茄/null 珍珠岩/null 珍珠梅/null 珍珠港/null 珍珠港事件/null 珍珠米/null 珍珠色/null 珍珠贝/null 珍珠质/null 珍珠鸡/null 珍禽/null 珍禽奇兽/null 珍禽异兽/null 珍秘/null 珍稀/null 珍稀动物/null 珍羞/null 珍藏/null 珍视/null 珍贵/null 珍贵文物/null 珍重/null 珍闻/null 珍馐/null 珍馐美味/null 珍馐美馔/null 珐琅/null 珐琅质/null 珑玲/null 珑璁/null 珙桐/null 珞巴语/null 珠三角/null 珠串/null 珠儿/null 珠光/null 珠光体/null 珠光宝气/null 珠兰/null 珠围翠绕/null 珠圆玉润/null 珠子/null 珠宝/null 珠宝商/null 珠宝店/null 珠宝箱/null 珠宝翠钻/null 珠宫贝阙/null 珠山/null 珠山区/null 珠峰/null 珠崖/null 珠帘/null 珠干玉戚/null 珠晖/null 珠晖区/null 珠残玉碎/null 珠母/null 珠江/null 珠江三角洲/null 珠江口/null 珠沉玉没/null 珠沉璧碎/null 珠流/null 珠流璧转/null 珠灰/null 珠玉/null 珠玉之论/null 珠玉在侧/null 珠玉在傍/null 珠玑/null 珠玑咳唾/null 珠穆朗玛/null 珠穆朗玛峰/null 珠箔/null 珠算/null 珠绕翠围/null 珠翠/null 珠翠罗绮/null 珠联璧合/null 珠茶/null 珠质/null 珠辉玉丽/null 珠还合浦/null 珠饰/null 珣玗琪/null 珥金拖紫/null 珩磨/null 班上/null 班主任/null 班什/null 班会/null 班副/null 班功行赏/null 班加罗尔/null 班务/null 班务会/null 班卓琴/null 班台/null 班吉/null 班固/null 班图斯坦/null 班外/null 班子/null 班师/null 班师得胜/null 班底/null 班戈/null 班房/null 班数/null 班期/null 班机/null 班次/null 班玛/null 班珠尔/null 班班/null 班禅/null 班禅喇嘛/null 班级/null 班纪德/null 班线/null 班组/null 班组长/null 班荆相对/null 班荆道故/null 班荆道旧/null 班衣戏彩/null 班费/null 班超/null 班车/null 班轮/null 班辈/null 班辈儿/null 班达亚齐/null 班里/null 班长/null 班门弄斧/null 班际/null 班雅明/null 班香宋艳/null 班马文章/null 班驳/null 珲春/null 球中/null 球会/null 球体/null 球儿/null 球内/null 球区/null 球半径/null 球友/null 球台/null 球员/null 球场/null 球场会馆/null 球坛/null 球墨铸铁/null 球外/null 球孢子菌病/null 球季/null 球局/null 球差/null 球座/null 球弹/null 球形/null 球径计/null 球心/null 球感/null 球戏/null 球手/null 球技/null 球拍/null 球星/null 球晶/null 球杆/null 球果/null 球架/null 球棍/null 球棒/null 球状/null 球状体/null 球状物/null 球状蛋白质/null 球状软骨/null 球王/null 球瘾/null 球磨机/null 球种/null 球童/null 球竿/null 球类/null 球粒陨石/null 球网/null 球胆/null 球腔菌/null 球腱/null 球艺/null 球芽甘蓝/null 球茎/null 球茎甘蓝/null 球菌/null 球虫/null 球虫病/null 球蛋白/null 球衣/null 球衫/null 球赛/null 球路/null 球轴承/null 球运/null 球迷/null 球速/null 球道/null 球门/null 球阀/null 球队/null 球面/null 球面几何/null 球面镜/null 球鞋/null 琅威理/null 琅嬛/null 琅玡/null 琅玡区/null 琅玡山/null 琅琅/null 琅琅上口/null 琅琊/null 琅质/null 理不忘乱/null 理不胜词/null 理事/null 理事会/null 理事长/null 理亏/null 理人/null 理会/null 理儿/null 理光/null 理出/null 理则/null 理则学/null 理化/null 理化因素/null 理发/null 理发厅/null 理发员/null 理发师/null 理发店/null 理发院/null 理合/null 理喻/null 理固当然/null 理塘/null 理头/null 理学/null 理学士/null 理学家/null 理学硕士/null 理学硕士学位/null 理容/null 理容中心/null 理屈/null 理屈事穷/null 理屈词穷/null 理工/null 理工大学/null 理工科/null 理应/null 理当/null 理念/null 理性/null 理性与感性/null 理性主义/null 理性知识/null 理性认识/null 理想/null 理想主义/null 理想化/null 理想国/null 理想家/null 理想美/null 理所不容/null 理所应当/null 理所当然/null 理智/null 理查/null 理查德/null 理查森/null 理气/null 理气化痰/null 理清/null 理理发/null 理由/null 理疗/null 理疗师/null 理直气壮/null 理睬/null 理短/null 理神论/null 理科/null 理科学士/null 理纷解结/null 理自/null 理解/null 理解力/null 理论/null 理论上/null 理论体系/null 理论依据/null 理论化/null 理论基础/null 理论家/null 理论工作者/null 理论指导/null 理论派/null 理论物理学/null 理论界/null 理论研究/null 理论联系实际/null 理论贡献/null 理论问题/null 理该/null 理财/null 理财学/null 理财家/null 理赔/null 理路/null 理过/null 理过其辞/null 理顺/null 琉球/null 琉球乡/null 琉球国/null 琉球海/null 琉球王国/null 琉球群岛/null 琉璃/null 琉璃塔/null 琉璃庙/null 琉璃瓦/null 琐事/null 琐务/null 琐呐/null 琐尾流离/null 琐屑/null 琐物/null 琐琐碎碎/null 琐碎/null 琐紧/null 琐细/null 琐罗亚斯德/null 琐罗亚斯德教/null 琐罗亚斯特/null 琐言/null 琐记/null 琐闻/null 琢玉成器/null 琢石/null 琢磨/研究,研讨,钻研 琢磨不透/null 琥珀/null 琥珀色/null 琥珀金/null 琪花瑶草/null 琳・戴维斯/null 琳琅/null 琳琅满目/null 琴书/null 琴剑飘零/null 琴声/null 琴家/null 琴师/null 琴座/null 琴弓/null 琴弦/null 琴心剑胆/null 琴心相挑/null 琴房/null 琴手/null 琴断朱弦/null 琴斯托霍瓦/null 琴架/null 琴棋书画/null 琴瑟/null 琴瑟不调/null 琴瑟和同/null 琴瑟和谐/null 琴瑟和鸣/null 琴瑟失调/null 琴瑟相调/null 琴瑟调和/null 琴者/null 琴调/null 琴酒/null 琴锤/null 琴键/null 琴马/null 琴鸟/null 琵琶/null 琵琶别抱/null 琵琶行/null 琵琶骨/null 琵琶鱼/null 琵鹭/null 琼中/null 琼中县/null 琼剧/null 琼华/null 琼厨金穴/null 琼台玉宇/null 琼台玉阁/null 琼堆玉砌/null 琼山/null 琼山区/null 琼山市/null 琼崖/null 琼州/null 琼州海峡/null 琼斯/null 琼斯顿/null 琼林玉树/null 琼林玉质/null 琼枝玉叶/null 琼枝玉树/null 琼楼/null 琼楼玉宇/null 琼浆/null 琼浆玉液/null 琼浆金液/null 琼海/null 琼瑛/null 琼瑶/null 琼筵/null 琼结/null 琼脂/null 琼阁/null 瑕不掩玉/null 瑕不掩瑜/null 瑕玷/null 瑕瑜/null 瑕瑜互见/null 瑕疵/null 瑙鲁/null 瑚琏之器/null 瑜不掩瑕/null 瑜伽/null 瑜珈/null 瑜迦/null 瑞丽/null 瑞亚/null 瑞兆/null 瑞典人/null 瑞典语/null 瑞兽/null 瑞士人/null 瑞士军刀/null 瑞士卷/null 瑞士法郎/null 瑞安/null 瑞昌/null 瑞朗/null 瑞氏染料/null 瑞氏染色/null 瑞气/null 瑞气祥云/null 瑞狮/null 瑞穗/null 瑞穗乡/null 瑞签/null 瑞色/null 瑞芳/null 瑞芳镇/null 瑞萨/null 瑞萨科技/null 瑞金/null 瑞雪/null 瑞香/null 瑟弄琴调/null 瑟瑟/null 瑟瑟发抖/null 瑟缩/null 瑟调琴弄/null 瑰丽/null 瑰伟/null 瑰奇/null 瑰宝/null 瑰异/null 瑰意琦行/null 瑰玮/null 瑶之圃/null 瑶台琼室/null 瑶台银阙/null 瑶林琼树/null 瑶池/null 瑶池玉液/null 瑶池阆苑/null 瑶海/null 瑶海区/null 瑶环瑜珥/null 瑶草琪花/null 瑷珲条约/null 璀灿/null 璀璀/null 璀璨/null 璀璨夺目/null 璀错/null 璇玑/null 璎珞/null 璐珞/null 璞玉浑金/null 璧合珠连/null 璧山/null 璧玉/null 璧谢/null 璧还/null 璨然/null 璨玉/null 璨璨/null 璨美/null 瓜仁/null 瓜代/null 瓜农/null 瓜分/null 瓜分豆剖/null 瓜剖豆分/null 瓜地/null 瓜地马拉/null 瓜子/null 瓜子脸/null 瓜字初分/null 瓜州/null 瓜州县/null 瓜德罗普/null 瓜拉丁加奴/null 瓜拿纳/null 瓜李之嫌/null 瓜条/null 瓜果/null 瓜棚/null 瓜熟/null 瓜熟蒂落/null 瓜片/null 瓜瓤/null 瓜田/null 瓜田不纳履/null 瓜田之嫌/null 瓜田李下/null 瓜皮/null 瓜皮帽/null 瓜秧/null 瓜类/null 瓜类蔬菜/null 瓜肉/null 瓜脐/null 瓜菜/null 瓜萤/null 瓜葛/null 瓜蒂/null 瓜蔓/null 瓜达卡纳尔岛/null 瓜达卡纳尔战役/null 瓜达拉哈拉/null 瓜达拉马/null 瓜达拉马山/null 瓠子/null 瓠瓜/null 瓢儿/null 瓢儿菜/null 瓢泼/null 瓢泼大雨/null 瓢泼瓦灌/null 瓢泼而下/null 瓢葫苹/null 瓢虫/null 瓣形/null 瓣状/null 瓣胃/null 瓣膜/null 瓣花/null 瓣鳃类/null 瓣鳃纲/null 瓤儿/null 瓤子/null 瓦全/null 瓦刀/null 瓦利/null 瓦剌/null 瓦加杜古/null 瓦努阿图/null 瓦匠/null 瓦千时/null 瓦合之卒/null 瓦哈比教派/null 瓦器/null 瓦器蚌盘/null 瓦圈/null 瓦块/null 瓦垄/null 瓦垄子/null 瓦城/null 瓦头/null 瓦尔基里/null 瓦尔德/null 瓦尔特/null 瓦尔纳/null 瓦尔达克/null 瓦尔达克省/null 瓦屋/null 瓦岗军/null 瓦工/null 瓦当/null 瓦当文/null 瓦影龟鱼/null 瓦德瑟/null 瓦德西/null 瓦房/null 瓦房店/null 瓦数/null 瓦斯/null 瓦时/null 瓦杜兹/null 瓦棺篆鼎/null 瓦楞/null 瓦楞子/null 瓦楞纸/null 瓦片/null 瓦特/null 泰勒起义/null 瓦特小时计/null 瓦特数/null 瓦特时/null 瓦特表/null 瓦特计/null 瓦状/null 瓦盆/null 瓦砚/null 瓦砾/null 瓦砾堆/null 瓦窑堡会议/null 瓦类/null 瓦罐/null 瓦罐不离井口破/null 瓦罕走廊/null 瓦良格/null 瓦莱塔/null 瓦西里/null 瓦西里耶维奇/null 瓦解/null 瓦解云散/null 瓦解冰泮/null 瓦解冰消/null 瓦解冰销/null 瓦解土崩/null 瓦解星散/null 瓦解星飞/null 瓦赫基尔河/null 瓦里斯/null 瓦釜之鸣/null 瓦釜雷鸣/null 瓦隆/null 瓮中之鳖/null 瓮中捉鳖/null 瓮城/null 瓮声瓮气/null 瓮天蠡海/null 瓮安/null 瓮尽杯干/null 瓮棺/null 瓮棺葬/null 瓮牖绳枢/null 瓮菜/null 瓮里醯鸡/null 瓯子/null 瓯海/null 瓯海区/null 瓯绣/null 瓶中/null 瓶内/null 瓶口/null 瓶嘴/null 瓶坠簪折/null 瓶塞/null 瓶塞钻/null 瓶子/null 瓶帽/null 瓶底/null 瓶沉簪折/null 瓶盂/null 瓶盖/null 瓶罐/null 瓶胆/null 瓶胚/null 瓶装/null 瓶领/null 瓶颈/null 瓶鼻海豚/null 瓷件/null 瓷器/null 瓷土/null 瓷实/null 瓷漆/null 瓷片/null 瓷瓶/null 瓷画/null 瓷盘/null 瓷砖/null 瓷碗/null 瓷窑/null 瓷窖/null 瓷缸/null 瓷釉/null 瓷雕/null 甄别/null 甄别考试/null 甄奇录异/null 甄审/null 甄录/null 甄才品能/null 甄拔/null 甄汰/null 甄烦就简/null 甄用/null 甄综/null 甄藻/null 甄试/null 甄选/null 甄陶/null 甑子/null 甑尘釜鱼/null 甘丹寺/null 甘之如荠/null 甘之如饴/null 甘之若素/null 甘之若饴/null 甘于/null 甘井先竭/null 甘井子区/null 甘休/null 甘冒/null 甘冒虎口/null 甘分随时/null 甘南/null 甘南州/null 甘南藏族自治州/null 甘受/null 甘味/null 甘味剂/null 甘味料/null 甘地/null 甘处下流/null 甘孜/null 甘孜州/null 甘守/null 甘居中游/null 甘州/null 甘州区/null 甘巴里/null 甘当/null 甘当无名英雄/null 甘德/null 甘心/null 甘心如荠/null 甘心情愿/null 甘心瞑目/null 甘愿/null 甘托克/null 甘拜/null 甘拜下风/null 甘旨/null 甘旨肥浓/null 甘松香/null 甘棠之惠/null 甘棠之爱/null 甘棠遗爱/null 甘死如饴/null 甘比/null 甘氨酸/null 甘汁/null 甘汞/null 甘油/null 甘油三脂/null 甘油三酯/null 甘油栓剂/null 甘油酯/null 甘油醛/null 甘泉/null 甘泉必竭/null 甘洛/null 甘瓜苦蒂/null 甘甜/null 甘糖醇/null 甘紫菜/null 甘结/null 甘美/null 甘美多汁/null 甘苦/null 甘草/null 甘菊/null 甘蓝/null 甘蓝型油菜/null 甘蓝类蔬菜/null 甘蓝菜/null 甘蔗/null 甘蔗渣/null 甘蕉/null 甘薯/null 甘薯黑斑病/null 甘言厚币/null 甘言厚礼/null 甘言好辞/null 甘言巧辞/null 甘言美语/null 甘言蜜语/null 甘谷/null 甘贫乐道/null 甘贫守分/null 甘贫守志/null 甘贫守节/null 甘雨/null 甘雨随车/null 甘霖/null 甘露/null 甘露法雨/null 甘露糖醇/null 甘露醇/null 甘馨之费/null 甚且/null 甚为/null 甚么/null 甚于/null 甚低频/null 甚佳/null 甚嚣尘上/null 甚多/null 甚大/null 甚小/null 甚少/null 甚巨/null 甚广/null 甚微/null 甚感诧异/null 甚或/null 甚浓/null 甚深/null 甚而/null 甚至/null 甚至于/null 甚解/null 甚轻/null 甚远/null 甚钜/null 甚高/null 甚高频/null 甜不辣/null 甜叶菊/null 甜味/null 甜味剂/null 甜品/null 甜嘴蜜舌/null 甜圈/null 甜头/null 甜如蜜/null 甜密/null 甜心/null 甜料/null 甜枣/null 甜橙/null 甜水/null 甜津津/null 甜润/null 甜滋滋/null 甜点/null 甜烈酒/null 甜瓜/null 甜瓜类/null 甜甜圈/null 甜甜的/null 甜甜蜜蜜/null 甜的/null 甜笑/null 甜筒/null 甜美/null 甜腻/null 甜菊/null 甜菊糖/null 甜菜/null 甜蜜/null 甜蜜蜜/null 甜言/null 甜言媚语/null 甜言密语/null 甜言美语/null 甜言花言/null 甜言蜜语/null 甜言软语/null 甜调/null 甜豆/null 甜辣/null 甜酒/null 甜酱/null 甜酸/null 甜酸肉/null 甜酸苦辣/null 甜面酱/null 甜食/null 甜饼/null 甜香/null 生下/null 生不逢时/null 生不逢辰/null 生不遇时/null 生业/null 生丝/null 生为/null 生义/null 生了/null 生了锈/null 生事/null 生事扰民/null 生于/null 生于优患/null 生于忧患死于安乐/null 生产/null 生产上/null 生产专业化/null 生产企业/null 生产关系/null 生产关系一定要适合生产力性质的规律/null 生产力/null 生产力与生产关系/null 生产劳动/null 生产单位/null 生产反应堆/null 生产合作社/null 生产国/null 生产基金/null 生产大队/null 生产工作者劳动报酬基金/null 生产工具/null 生产性/null 生产性建设/null 生产总值/null 生产成本/null 生产战线/null 生产指标/null 生产操/null 生产方式/null 生产条件/null 生产水平/null 生产率/null 生产社会化/null 生产秩序/null 生产线/null 生产者/null 生产能力/null 生产自救/null 生产要素/null 生产设施/null 生产责任制/null 生产费用/null 生产资料/null 生产资料所有制/null 生产资本/null 生产过剩/null 生产量/null 生产队/null 生产额/null 生人/null 生人涂炭/null 生仔/null 生他/null 生佛万家/null 生俘/null 生僻/null 生儿/null 生儿育女/null 生光/null 生公说法顽石点头/null 生关死劫/null 生养/null 生冷/null 生凑/null 生出/null 生分/null 生前/null 生前友好/null 生力军/null 生动/null 生动活泼/null 生势/null 生化/null 生化学/null 生化武器/null 生卒年/null 生卒年月/null 生厌/null 生反感/null 生发/null 生受/null 生变/null 生吃/null 生合成/null 生同衾死同穴/null 生吞/null 生吞活剥/null 生员/null 生命/null 生命不息/null 生命力/null 生命吠陀/null 生命周期/null 生命在于运动/null 生命多样性/null 生命学/null 生命层/null 生命征象/null 生命攸关/null 生命的遗迹/null 生命科学/null 生命素质/null 生命线/null 生命财产/null 生命迹象/null 生啤/null 生啤酒/null 生土/null 生在/null 生地/null 生圹/null 生坯/null 生境/null 生处/null 生夺硬抱/null 生女/null 生妖作怪/null 生姜/null 生姜丝/null 生子/null 生字/null 生存/null 生存保险/null 生存农业/null 生存斗争/null 生存权/null 生存率/null 生存环境/null 生存能力/null 生客/null 生寄死归/null 生小孩/null 生小牛/null 生就/null 生平/null 生平事迹/null 生平简介/null 生年/null 生张熟魏/null 生态/null 生态位/null 生态圈/null 生态孤岛/null 生态学/null 生态学家/null 生态平衡/null 生态建设/null 生态旅游/null 生态环境/null 生态环境游/null 生态系统/null 生态经济学/null 生态艺术/null 生态足迹/null 生怕/null 生性/null 生恐/null 生息/null 生息蕃庶/null 生悲/null 生情见景/null 生惧/null 生意/null 生意人/null 生意兴隆/null 生意经/null 生愿/null 生成/null 生成树/null 生成物/null 生我劬劳/null 生手/null 生技/null 生技医药/null 生抽/null 生拉活扯/null 生拉硬拽/null 生搬硬套/null 生擒/null 生擒活拿/null 生擒活捉/null 生效/null 生料/null 生於/null 生日/null 生日卡/null 生日快乐/null 生日蛋糕/null 生日贺卡/null 生时/null 生有/null 生有权/null 生机/null 生机勃勃/null 生杀与夺/null 生杀之权/null 生杀予夺/null 生杀大权/null 生权/null 生材/null 生来/null 生来死去/null 生染/null 生栋覆屋/null 生树脂/null 生根/null 生桑之梦/null 生橡胶/null 生死/null 生死不渝/null 生死之交/null 生死予夺/null 生死关/null 生死关头/null 生死别离/null 生死存亡/null 生死攸关/null 生死有命/null 生死线/null 生死肉骨/null 生死观/null 生死轮回/null 生殖/null 生殖力/null 生殖器/null 生殖器官/null 生殖期/null 生殖洄游/null 生殖系统/null 生殖细胞/null 生殖者/null 生殖腺/null 生殖轮/null 生母/null 生毛/null 生民/null 生民涂炭/null 生气/null 生气勃勃/null 生气盎然/null 生气蓬勃/null 生水/null 生水果/null 生水泡/null 生油/null 生法/null 生活/null 生活上/null 生活会/null 生活作风/null 生活区/null 生活垃圾/null 生活形态/null 生活必需品/null 生活方式/null 生活水平/null 生活污水/null 生活素质/null 生活者/null 生活设施/null 生活质料/null 生活费/null 生活资料/null 生活阔绰/null 生涩/null 生涯/null 生溃疡/null 生源/null 生源论/null 生满/null 生漆/null 生火/null 生灭/null 生灵/null 生灵涂炭/null 生炒热卖/null 生热/null 生煎/null 生煎包/null 生煮/null 生父/null 生父母/null 生物/null 生物专一性/null 生物传感器/null 生物伦琴当量/null 生物体/null 生物分析法/null 生物制剂/null 生物制品/null 生物剂量仪/null 生物力学/null 生物化学/null 生物化学家/null 生物化学站剂/null 生物医学工程/null 生物反应器/null 生物圈/null 生物多元化/null 生物多样性/null 生物大灭绝/null 生物媒介/null 生物学/null 生物学家/null 生物学最低温度/null 生物学界/null 生物工程/null 生物工程学/null 生物弹药/null 生物态/null 生物性/null 生物恐怖主义/null 生物战/null 生物战剂/null 生物技术/null 生物晶片/null 生物材料/null 生物柴油/null 生物武器/null 生物气体/null 生物活化性/null 生物测定/null 生物燃料/null 生物电/null 生物电流/null 生物界/null 生物碱/null 生物科技/null 生物群/null 生物能/null 生物质/null 生物质能/null 生物资源/null 生物转化/null 生物量/null 生物钟/null 生物链/null 生物防治/null 生物降解/null 生物风化/null 生物高分子/null 生猛/null 生猪/null 生球根/null 生理/null 生理卫生/null 生理学/null 生理学家/null 生理心理学/null 生理性/null 生理特点/null 生理用品/null 生理盐水/null 生生不息/null 生生世世/null 生男育女/null 生畏/null 生番/null 生疏/null 生疏了/null 生疑/null 生疥癣/null 生疼/null 生病/null 生的/null 生皮/null 生皮鞋/null 生石灰/null 生石膏/null 生硬/null 生离死别/null 生离死绝/null 生端/null 生米/null 生米做成熟饭/null 生米煮成熟饭/null 生米熟饭/null 生粉/null 生粉水/null 生羽毛/null 生老病死/null 生者/null 生而/null 生而知之/null 生耗氧量/null 生聚教训/null 生肉/null 生肉芽/null 生肖/null 生肖属相/null 生育/null 生育率/null 生育能力/null 生脓泡/null 生色/null 生花妙笔/null 生苔/null 生荒/null 生荣死哀/null 生药/null 生菜/null 生虫/null 生蛆/null 生蛋/null 生角/null 生计/null 生词/null 生词本/null 生词语/null 生谱/null 生财/null 生财之道/null 生财有道/null 生趣/null 生路/null 生身父母/null 生辉/null 生辰/null 生辰八字/null 生达/null 生达乡/null 生达县/null 生还/null 生还者/null 生造/null 生铁/null 生铜/null 生锈/null 生长/null 生长出/null 生长发育/null 生长期/null 生长激素/null 生长点/null 生长率/null 生长素/null 生闷气/null 生霉/null 生非作歹/null 生面/null 生面团/null 生食/null 生饼/null 生香油/null 生鱼片/null 生齐/null 生齿/null 生齿日繁/null 生龙活虎/null 甥女/null 用一句话来说/null 用一当十/null 用上/null 用不/null 用不了/null 用不完/null 用不着/null 用不著/null 用两/null 用两耳/null 用为/null 用之/null 用之不竭/null 用之于/null 用了/null 用事/null 用于/null 用人/null 用人不当/null 用人单位/null 用人经费/null 用什麽/null 用他/null 用以/null 用作/null 用作配种/null 用光/null 用兵/null 用兵一时/null 用兵如神/null 用其所长/null 用具/null 用出/null 用分/null 用刑/null 用到/null 用力/null 用力扯/null 用力拉/null 用力拖/null 用功/null 用劲/null 用印/null 用去/null 用反/null 用后/null 用吧/null 用品/null 用唇/null 用嘴/null 用图/null 用图表/null 用在/null 用在一朝/null 用地/null 用场/null 用坏/null 用声音/null 用处/null 用处小/null 用夏变夷/null 用天因地/null 用头/null 用好/null 用字/null 用完/null 用家/null 用尽/null 用尽心机/null 用工/null 用工夫/null 用布/null 用带/null 用度/null 用得上/null 用得着/null 用心/null 用心竭力/null 用心良苦/null 用性/null 用意/null 用意何在/null 用户/null 用户创造内容/null 用户到网络接口/null 用户到网络的接口/null 用户名/null 用户定义/null 用户意见/null 用户界面/null 用户端设备/null 用户线/null 用户至上/null 用房/null 用手/null 用把/null 用指/null 用掉/null 用文/null 用料/null 用旧/null 用旧了/null 用智铺谋/null 用材/null 用材林/null 用来/null 用来配种/null 用枪/null 用款/null 用此/null 用武/null 用武之地/null 用毕/null 用气/null 用水/null 用汇/null 用法/null 用煤/null 用用/null 用电/null 用电量/null 用的/null 用着/null 用破/null 用管窥天/null 用粮/null 用者/null 用职/null 用脑/null 用膳/null 用舍行藏/null 用草奇花/null 用药/null 用行舍藏/null 用计/null 用计铺谋/null 用词/null 用词不当/null 用语/null 用财/null 用贤任能/null 用费/null 用车/null 用辞/null 用过/null 用途/null 用逸代劳/null 用量/null 用钱/null 用钱如水/null 用错/null 用间/null 用非其人/null 用非所学/null 用项/null 用餐/null 用餐时间/null 甩上/null 甩了/null 甩到/null 甩动/null 甩包袱/null 大甩卖/甩卖 甩卖/null 甩头/null 甩尾/null 甩开/null 甩开膀子/null 甩手/null 甩手掌柜/null 甩手顿脚/null 甩掉/null 甩脱/null 甩脸子/null 甩落/null 甩袖子/null 甩车/null 甩远/null 甩钟/null 甪端/null 甬剧/null 甬江/null 甬路/null 甬道/null 甭提/null 甭管/null 甭说/null 田七/null 田东/null 田中/null 田中角荣/null 田中镇/null 田主/null 田产/null 田亩/null 田亮/null 田园/null 田园化/null 田园诗/null 田园风光/null 田土/null 田地/null 田垄/null 田埂/null 田塍/null 田夫野老/null 田头/null 田契/null 田宅/null 田家庵/null 田家庵区/null 田寮/null 田寮乡/null 田尾/null 田尾乡/null 田庄/null 田役/null 田径/null 田径赛/null 田径运动/null 田文/null 田林/null 田汉/null 田湾/null 田父之获/null 田猎/null 田畴/null 田租/null 田粮/null 田纳西/null 田纳西州/null 田联/null 田舍/null 田营/null 田营市/null 田螺/null 田赋/null 田赛/null 田边地头/null 田连仟陌/null 田连阡陌/null 田里/null 田野/null 田野工作/null 田长霖/null 田间/null 田间管理/null 田阳/null 田陌/null 田鳖/null 田鸡/null 田鹨/null 田鼠/null 由上/null 由上向下/null 由上而下/null 由下向上/null 由下而上/null 由不得/null 由东向西/null 由中之言/null 由之/null 由于/null 由于上述原因/null 由于某种原因/null 由于种种原因/null 由人/null 由其/null 由冷/null 由加/null 由北向南/null 由南向北/null 由博返约/null 由右向左/null 由大到小/null 由头/null 由始至终/null 由左向右/null 由径/null 由得/null 由旬/null 由易到难/null 由来/null 由来已久/null 由此/null 由此及彼/null 由此可以看出/null 由此可见/null 由此可证/null 由此来看/null 由此而来/null 由浅入深/null 由点到面/null 由盛而衰/null 由省/null 由着/null 由窦尚书/null 由表及里/null 由衷/null 由衷之言/null 由衷感谢/null 由西向东/null 由证/null 由该/null 由近/null 由近及远/null 由远/null 由远而近/null 由难到易/null 甲乙/null 甲乙丙/null 甲乙双方/null 甲二醇/null 甲亢/null 甲仙/null 甲仙乡/null 甲克/null 甲兵/null 甲冑/null 甲午/null 甲午战争/null 甲型/null 甲型肝炎/null 甲基/null 甲基安非他命/null 甲基苯丙胺/null 甲士/null 甲壳/null 甲壳动物/null 甲壳类/null 甲壳素/null 甲壳虫/null 甲壳虫类/null 甲夜/null 甲天下/null 甲子/null 甲寅/null 甲形球蛋白/null 甲戌/null 甲方/null 甲替色氨酸/null 甲板/null 甲氧基/null 甲氧西林/null 甲氨/null 甲氨基/null 甲流/null 甲烷/null 甲状/null 甲状旁腺/null 甲状腺/null 甲状腺功能亢进/null 甲状腺素/null 甲状腺肿/null 甲状软骨/null 甲班/null 甲申/null 甲申政变/null 甲癣/null 甲硝唑/null 甲硫氨酸/null 甲磺磷定/null 甲种/null 甲种射线/null 甲种粒子/null 甲第/null 甲第星罗/null 甲第连云/null 甲等/null 甲类/null 甲紫/null 甲级/null 甲级战犯/null 甲级队/null 甲肝/null 甲胄/null 甲胺磷/null 甲苯/null 甲虫/null 甲虫类/null 甲虫车/null 甲辰/null 甲酚/null 甲酸/null 甲醇/null 甲醇中毒/null 甲醚/null 甲醛/null 甲铠/null 甲骨/null 甲骨文/null 甲骨文字/null 甲鱼/null 申不害/null 申令/null 申冤/null 申办/null 申命记/null 申城/null 申奏/null 申屠/null 申扎/null 申报/null 申报单/null 申报者/null 申斥/null 申旦达夕/null 申时/null 申明/null 申易/null 申曲/null 申根/null 申状/null 申猴/null 申理/null 申申/null 申言/null 申讨/null 申论/null 申诉/null 申诉书/null 申诉电话/null 申诫/null 申说/null 申请/null 申请书/null 申请人/null 申请表/null 申谢/null 申购/null 申辨/null 申辩/null 申述/null 申雪/null 申领/null 申饬/null 电业/null 电业局/null 电介体/null 电介质/null 电令/null 电价/null 电传/null 电传机/null 电位/null 电位器/null 电位差/null 电位计/null 电信号/null 电信局/null 电信工作/null 电信术/null 电信网路/null 电偶/null 电光/null 电光朝露/null 电光石火/null 电冰柜/null 电冰箱/null 电冶/null 电击/null 电击伤/null 电函/null 电刀/null 电刑/null 电刨/null 电刷/null 电力/null 电力供应/null 电力学/null 电力局/null 电力工业/null 电力机车/null 电力线/null 电力网/null 电功率/null 电功率表/null 电加工/null 电动/null 电动势/null 电动工具/null 电动机/null 电动船/null 电动葫芦/null 电动转盘/null 电势/null 电势差/null 电化/null 电化学/null 电化教学/null 电化教育/null 电匠/null 电匣子/null 电单车/null 电卷星飞/null 电卷风驰/null 电厂/null 电压/null 电压互感器/null 电压表/null 电压计/null 电台/null 电吉他/null 电吹风/null 电告/null 电唁/null 电唱/null 电唱头/null 电唱机/null 电唱盘/null 电嘴/null 电器/null 电器化/null 电器设备/null 电场/null 电塔/null 电声/null 电壶/null 电大/null 电子/null 电子产品/null 电子展/null 电子业/null 电子书/null 电子云/null 电子价/null 电子伏/null 电子伏特/null 电子信箱/null 电子元件/null 电子元器件/null 电子光学/null 电子化营业/null 电子商务/null 电子器件/null 电子型半导体/null 电子学/null 电子学系/null 电子宠物/null 电子对/null 电子层/null 电子层数/null 电子工业/null 电子工业部/null 电子工程/null 电子战/null 电子所/null 电子手表/null 电子技术/null 电子振兴办公室/null 电子数据交换/null 电子文件/null 电子显微镜/null 电子望远镜/null 电子束/null 电子束焊接/null 电子枪/null 电子流/null 电子游戏/null 电子狗/null 电子环保亭/null 电子琴/null 电子电路/null 电子盘/null 电子眼/null 电子科技大学/null 电子空间/null 电子管/null 电子网络/null 电子表/null 电子警察/null 电子计算机/null 电子论/null 电子货币/null 电子邮件/null 电子邮件传送服务/null 电子钟/null 电学/null 电容/null 电容器/null 电容量/null 电导/null 电导体/null 电导率/null 电工/null 电工学/null 电平/null 电度表/null 电度计/null 电弧/null 电弧焊/null 电弧焊接/null 电影/null 电影制作/null 电影制片/null 电影剧/null 电影剧本/null 电影周/null 电影圈/null 电影奖/null 电影字幕/null 电影导演/null 电影工作者/null 电影摄影机/null 电影放映机/null 电影晚会/null 电影机/null 电影演员/null 电影界/null 电影票/null 电影节/null 电影院/null 电性/null 电感/null 电感器/null 电扇/null 电打/null 电打字机/null 电扶梯/null 电抗/null 电抗器/null 电抛光/null 电报/null 电报局/null 电报挂号/null 电报机/null 电报通知/null 电掣星驰/null 电掣风驰/null 电控/null 电教/null 电文/null 电料/null 电晕/null 电暖器/null 电木/null 电机/null 电机及电子学工程师联合会/null 电机师/null 电杆/null 电板/null 电极/null 电枢/null 电柜/null 电桥/null 电桨/null 电梯/null 电检/null 电棒/null 电椅/null 电死/null 电气/null 电气化/null 电气工程/null 电气石/null 电汇/null 电池/null 电波/null 电泳/null 电洽/null 电流/null 电流强度/null 电流表/null 电流计/null 电渗析/null 电渣炉/null 电渣焊/null 电源/null 电源供应器/null 电源插座/null 电源线/null 电滚子/null 电灌/null 电灌站/null 电火花/null 电火花加工/null 电灯/null 电灯架/null 电灯柱/null 电灯泡/null 电灯等/null 电灶/null 电炉/null 电烙铁/null 电烫/null 电热/null 电热器/null 电热毯/null 电焊/null 电焊机/null 电照明/null 电熨斗/null 电牌/null 电珠/null 电瓶/null 电瓶车/null 电瓷/null 电疗/null 电疗法/null 电白/null 电眼/null 电石/null 电石气/null 电石灯/null 电码/null 电磁/null 电磁兼容性/null 电磁力/null 电磁噪声/null 电磁场/null 电磁学/null 电磁干扰/null 电磁感应/null 电磁振荡/null 电磁波/null 电磁流体力学/null 电磁理论/null 电磁相互作用/null 电磁脉冲/null 电磁说/null 电磁辐射/null 电磁铁/null 电磨/null 电示/null 电离/null 电离室/null 电离层/null 电离能/null 电离辐射/null 电站/null 电筒/null 电筒光/null 电算/null 电箱/null 电纸书/null 电纽/null 电线/null 电线匣/null 电线杆/null 电缆/null 电缆塔/null 电缆调制解调器/null 电网/null 电老虎/null 电育/null 电能/null 电脑/null 电脑与电话系统整合/null 电脑业者/null 电脑企业/null 电脑化/null 电脑操作/null 电脑断层扫描/null 电脑病毒/null 电脑系统/null 电脑绘图/null 电脑网/null 电脑网络/null 电脑网路/null 电脑语言/null 电脑软件/null 电脑辅助工程/null 电脑辅助教材/null 电脑辅助设计/null 电脑辅助设计与绘图/null 电脑部/null 电荒/null 电荷/null 电荷耦合/null 电荷耦合器件/null 电荷量/null 电表/null 电视/null 电视专题片/null 电视剧/null 电视发射塔/null 电视台/null 电视塔/null 电视广播/null 电视接收机/null 电视机/null 电视片/null 电视电话/null 电视真人秀节目/null 电视秀/null 电视网/null 电视节目/null 电视转播/null 电视连续剧/null 电视采访/null 电解/null 电解槽/null 电解法/null 电解液/null 电解电容器/null 电解质/null 电讯/null 电讯术/null 电话/null 电话交换机/null 电话亭/null 电话会议/null 电话信号/null 电话区号/null 电话区码/null 电话卡/null 电话号码/null 电话局/null 电话接线生/null 电话服务/null 电话机/null 电话簿/null 电话线/null 电话线路/null 电话网/null 电话网路/null 电话采访/null 电话铃声/null 电话门/null 电话间/null 电询/null 电谢/null 电贝斯/null 电负性/null 电费/null 电贺/null 电路/null 电路分析/null 电路图/null 电路板/null 电车/null 电转儿/null 电转盘/null 电邀/null 电邮/null 电邮位置/null 电邮地址/null 电量/null 电量表/null 电量计/null 电针疗法/null 电钟/null 电钮/null 电钻/null 电铃/null 电铲/null 电铸/null 电锅/null 电键/null 电锯/null 电镀/null 电镀品/null 电镐/null 电门/null 电闪/null 电闸/null 电阻/null 电阻器/null 电阻率/null 电阻箱/null 电阻表/null 电陈/null 电震/null 电音/null 电颤琴/null 电风扇/null 电饭煲/null 电饭锅/null 电驴子/null 电驿/null 电鳗/null 男中音/null 男主角/null 男亲属/null 男人/null 男人不坏/null 男人们/null 男人似/null 男人婆/null 男人家/null 男人膝下有黄金/null 男仆/null 男低音/null 男侍/null 男修道院长/null 男傧相/null 男像柱/null 男儿/null 男儿有泪不轻弹/null 男单/null 男厕/null 男厕所/null 男友/null 男双/null 男同/null 男同志/null 男名/null 男唱女随/null 男团/null 男基尼/null 男士/null 男声/null 男外套/null 男大当婚/null 男大须婚/null 男女/null 男女关系/null 男女双方/null 男女平等/null 男女授受不亲/null 男女有别/null 男女老少/null 男女老幼/null 男女队/null 男娃/null 男娼/null 男婚女娉/null 男婚女嫁/null 男婴/null 男媒女妁/null 男子/null 男子似/null 男子单/null 男子单打/null 男子双打/null 男子名/null 男子气/null 男子气概/null 男子汉/null 男子汉大丈夫/null 男子篮球/null 男学生/null 男孩/null 男孩乐队/null 男孩儿/null 男孩子/null 男室女家/null 男家/null 男宾/null 男尊女卑/null 男工/null 男左/null 男左女右/null 男巫/null 男式/null 男怕入错行/null 男性/null 男性主义/null 男性亲属/null 男性化/null 男性厌恶/null 男性素/null 男性贬抑/null 男才女貌/null 男扮女装/null 男排/null 男教师/null 男方/null 男星/null 男朋友/null 男服/null 男欢女爱/null 男演员/null 男爵/null 男生/null 男用/null 男男女女/null 男的/null 男盗女娼/null 男童/null 男管家/null 男篮/null 男系/null 男耕女织/null 男舍/null 男色/null 男装/null 男裤/null 男辈/null 男队/null 男青年/null 男高音/null 男高音部/null 甸园/null 甸子/null 画上/null 画下/null 画个圆/null 画中有诗/null 画为/null 画了/null 画于/null 画供/null 画像/null 画儿/null 画具/null 画册/null 画出/null 画刊/null 画到/null 画匠/null 画十字/null 画卷/null 画史/null 画品/null 画图/null 画圆/null 画圈/null 画地为牢/null 画地为狱/null 画地成图/null 画地而趋/null 画地自限/null 画坛/null 画境/null 画外/null 画外音/null 画字/null 画室/null 画家/null 画尺/null 画尽意在/null 画屏/null 画展/null 画工/null 画布/null 画师/null 画帖/null 画幅/null 画幕/null 画店/null 画廊/null 画开/null 画影图形/null 画得/null 画意诗情/null 画成/null 画报/null 画押/null 画插图者/null 画本/null 画板/null 画架/null 画栋雕梁/null 画框/null 画梁雕栋/null 画毡/null 画法/null 画法几何/null 画派/null 画片/null 画片儿/null 画瓢/null 画画/null 画界线/null 画的/null 画皮/null 画眉/null 画眉举案/null 画眉张敞/null 画眉鸟/null 画着/null 画知/null 画稿/null 画笔/null 画符/null 画策/null 画策设谋/null 画纸/null 画线/null 画线器/null 画脂镂冰/null 画舫/null 画荻教子/null 画虎不成反类犬/null 画虎不成反类狗/null 画虎成狗/null 画虎类犬/null 画蛇添足/null 画蛇著足/null 画行/null 画谜/null 画谱/null 画轮廓/null 画轴/null 画间/null 画阁朱楼/null 画阴影/null 画院/null 画面/null 画页/null 画饼/null 画饼充饥/null 画龙不成反为狗/null 画龙点睛/null 甾酮/null 畅书/null 畅叙/null 畅心/null 畅快/null 畅怀/null 畅想/null 畅所欲言/null 畅旺/null 畅流/null 畅游/null 畅行/null 畅行无阻/null 畅谈/null 畅谈话卡/null 畅达/null 畅通/null 畅通无阻/null 畅销/null 畅销书/null 畅销品/null 畅销货/null 畅饮/null 界乎/null 界于/null 界值/null 界内球/null 界别/null 界址/null 界外/null 界外球/null 界外线/null 界定/null 界尺/null 界层/null 界志/null 界标/null 界桩/null 界河/null 界点/null 界状/null 界石/null 界碑/null 界符/null 界第/null 界约/null 界线/null 界说/null 界限/null 界限量规/null 界面/null 界首/null 畎亩/null 畎亩之中/null 畎母下才/null 畏之如虎/null 畏光/null 畏友/null 畏口/null 畏吓/null 畏天恤民/null 畏天爱民/null 畏天知命/null 畏威怀德/null 畏岁/null 畏影而走/null 畏忌/null 畏怯/null 畏惧/null 畏敬/null 畏死/null 畏死贪生/null 畏畏缩缩/null 畏神/null 畏缩/null 畏缩不前/null 畏罪/null 畏罪自杀/null 畏葸/null 畏葸不前/null 畏途/null 畏避/null 畏难/null 畏难情绪/null 畏难苟安/null 畏首畏尾/null 畏首畏足/null 畔援/null 留一手/null 留下/null 留个/null 留中不发/null 留了/null 留任/null 留传/null 留住/null 留余地/null 留作/null 留信/null 留党察看/null 留兰香/null 留军壁邺/null 留出/null 留别/null 留到/null 留医/null 留厂察看/null 留名/null 留后手/null 留后路/null 留园/null 留在/null 留地步/null 留坝/null 留声/null 留声机/null 留头/null 留存/null 留存收益/null 留学/null 留学生/null 留守/null 留守处/null 留客/null 留宿/null 留尼汪/null 留尾巴/null 留居/null 留底/null 留归/null 留影/null 留待/null 留得青山在/null 留心/null 留念/null 留恋/null 留恋不舍/null 留情/null 留意/null 留意到/null 留成/null 留成儿/null 留有/null 留有余地/null 留校/null 留校察看/null 留步/null 留治/null 留法/null 留洋/null 留海/null 留点/null 留班/null 留用/null 留痕迹/null 留白/null 留着/null 留神/null 留神听/null 留种/null 留种地/null 留空/null 留级/null 留给/null 留置/null 留置权/null 留美/null 留职/null 留职停薪/null 留芳千古/null 留芳百世/null 留解/null 留言/null 留言本/null 留言条/null 留言板/null 留言簿/null 流云/null 流云苍狗/白云苍狗 留话/null 留起/null 留足/null 留连/null 留连果/null 留连论诗/null 留遗/null 留都/null 留针/null 留门/null 留难/null 留题/null 留饭/null 留饮/null 留香久/null 留驻/null 留鸟/null 畚斗/null 畚箕/null 畛域/null 畜产/null 畜产品/null 畜养/null 畜力/null 畜栏/null 畜牧/null 畜牧业/null 畜牧场/null 畜牧学/null 畜牲/null 畜生/null 畜疫/null 畜禽/null 畜类/null 畜羊/null 畜群/null 畜肥/null 畜舍内/null 略上/null 略感/null 略为/null 略举/null 略作/null 略先/null 略加/null 略去/null 略可/null 略同/null 略图/null 略地侵城/null 略地攻城/null 略大/null 略夺/null 略好/null 略嫌/null 略字/null 略宽/null 略小/null 略少/null 略带/null 略底/null 略异/null 略录/null 略后/null 略微/null 略慢/null 略懂/null 略提/null 略施/null 略显/null 略有/null 略有结余/null 略略/null 略白/null 略看/null 略知/null 略知一二/null 略知皮毛/null 略码/null 略示/null 略称/null 略等/null 略粗/null 略胜/null 略胜一筹/null 略表/null 略见/null 略见一斑/null 略记/null 略论/null 略识之无/null 略语/null 略说/null 略读/null 略读者/null 略轻/null 略过/null 略近/null 略远/null 略述/null 略迹原情/null 略逊/null 略释/null 略长/null 略阳/null 略高/null 略高一筹/null 略高于/null 畦灌/null 畦田/null 番人/null 番号/null 番天覆地/null 番属/null 番木/null 番木瓜/null 番木鳖/null 番来复去/null 番椒/null 番瓜/null 番番/null 番石榴/null 番禺/null 番禺区/null 番红花/null 番茄/null 番茄汁/null 番茄汤/null 番茄红素/null 番茄酱/null 番荔枝/null 番菜/null 番薯/null 番路/null 番路乡/null 番邦/null 番麦/null 畲乡/null 畴人/null 畴咨之忧/null 畴昔/null 畴曲/null 畸人/null 畸变/null 畸型/null 畸型体/null 畸型物/null 畸形/null 畸形儿/null 畸形发展/null 畸形学/null 畸态/null 畸性/null 畸恋/null 畸胎/null 畸轻畸重/null 畸零/null 畹町/null 畹町市/null 畿辅/null 疆吏/null 疆土/null 疆场/null 疆域/null 疆埸/null 疆界/null 疍民/null 疏不见亲/null 疏不谋亲/null 疏不间亲/null 疏了/null 疏于/null 疏于防范/null 疏剪/null 疏勒/null 疏勒国/null 疏备/null 疏失/null 疏学/null 疏宕不拘/null 疏定/null 疏密/null 疏导/null 疏开/null 疏忽/null 疏忽大意/null 疏忽职守/null 疏慵愚钝/null 疏懒/null 疏才仗义/null 疏挖/null 疏放/null 疏散/null 疏散措施/null 疏松/null 疏水/null 疏水箪瓢/null 疏浚/null 疏淡/null 疏漏/null 疏狂/null 疏率/null 疏理/null 疏略/null 疏疏/null 疏离/null 疏缝/null 疏而不失/null 疏而不漏/null 疏肝理气/null 疏落/null 疏虞/null 疏解/null 疏证/null 疏谋少略/null 疏财仗义/null 疏财尚气/null 疏财重义/null 疏远/null 疏通/null 疏阔/null 疏附/null 疏食饮水/null 疑为/null 疑义/null 疑事无功/null 疑事无功疑行无名/null 疑云/null 疑人勿使使人勿疑/null 疑人疑鬼/null 疑似/null 疑信参半/null 疑兵/null 疑冰/null 疑凶/null 疑团/null 疑心/null 疑心生暗鬼/null 疑心生鬼/null 疑心病/null 疑忌/null 疑念/null 疑惑/null 疑惧/null 疑案/null 疑点/null 疑犯/null 疑狱/null 疑病症/null 疑神疑鬼/null 疑神见鬼/null 疑窦/null 疑者/null 疑虑/null 疑行无名疑事无功/null 疑行无成疑事无功/null 疑问/null 疑问代词/null 疑问句/null 疑阵/null 疑难/null 疑难杂症/null 疑难解答/null 疑难问题/null 疑鬼疑神/null 疔疮/null 疖子/null 疖疮/null 疗伤/null 疗伤止痛/null 疗养/null 疗养所/null 疗养院/null 疗效/null 疗方/null 疗毒/null 疗法/null 疗疮剜肉/null 疗程/null 疗贫/null 疗饥/null 疙疙瘩瘩/null 疙疸/null 疙瘩/null 疚心疾首/null 疝气/null 疝气痛/null 疟原虫/null 疟子/null 疟涤平/null 疟疾/null 疟疾病/null 疟虫/null 疟蚊/null 疣状/null 疣猪/null 疣肿/null 疣赘/null 疤点/null 疤痕/null 疤瘌/null 疤瘌眼儿/null 疥疮/null 疥癞之患/null 疥癣/null 疥癣之疾/null 疥虫/null 疥蛤蟆/null 疥赖之疾/null 疫区/null 疫性/null 疫情/null 疫疠/null 疫病/null 疫苗/null 疮口/null 疮疤/null 疮痂/null 疮痍/null 疮痍满目/null 疮痕/null 疯了/null 疯人/null 疯人院/null 疯似/null 疯去/null 疯女/null 疯子/null 疯杈/null 疯枝/null 疯牛病/null 疯犬/null 疯狂/null 疯狂似/null 疯狂般/null 疯狗/null 疯疯癫癫/null 疯病/null 疯症/null 疯瘫/null 疯癫/null 疯话/null 疯长/null 疯魔/null 疰夏/null 疱代/null 疱疹/null 疱疹病毒/null 疲乏/null 疲于/null 疲于奔命/null 疲倦/null 疲倦不堪/null 疲倦了/null 疲劳/null 疲劳力学/null 疲劳强度/null 疲劳极限/null 疲劳症/null 疲匮/null 疲困/null 疲塌/null 疲弱/null 疲惫/null 疲惫不堪/null 疲惫感/null 疲敝/null 疲沓/null 疲癃/null 疲竭/null 疲累/null 疲软/null 疲顿/null 疳疮/null 疵点/null 疵瑕/null 疵议/null 疵谬/null 疸病/null 疹子/null 疼不/null 疼心泣血/null 疼惜/null 疼死/null 疼爱/null 疼痛/null 疽热/null 疽病/null 疾世愤俗/null 疾之如仇/null 疾之若仇/null 疾书/null 疾呼/null 疾声厉色/null 疾声大呼/null 疾如旋踵/null 疾如雷电/null 疾恶好善/null 疾恶如仇/null 疾恶若仇/null 疾患/null 疾控中心/null 疾步/null 疾病/null 疾病控制中心/null 疾病突发/null 疾病预防中心/null 疾痛惨怛/null 疾苦/null 疾行/null 疾言/null 疾言厉色/null 疾言遽色/null 疾走/null 疾足先得/null 疾跑/null 疾速/null 疾雷不及塞耳/null 疾雷不及掩耳/null 疾风/null 疾风劲草/null 疾风扫落叶/null 疾风暴雨/null 疾风甚雨/null 疾风知劲草/null 疾风骤雨/null 疾飞/null 疾首/null 疾首痛心/null 疾首蹙额/null 疾驰/null 疾驰而过/null 疾驱/null 疾驶/null 痄腮/null 病中/null 病了/null 病事假/null 病人/null 病人用/null 病从口入/null 病休/null 病体/null 病例/null 病倒/null 病候/null 病假/null 病兆/null 病入膏肓/null 病况/null 病势/null 病包儿/null 病区/null 病危/null 病历/null 病厌厌/null 病原/null 病原体/null 病原性/null 病原菌/null 病原虫/null 病去如抽丝/null 病友/null 病发/null 病变/null 病史/null 病号/null 病名/null 病员/null 病啦/null 病因/null 病因子/null 病因学/null 病国殃民/null 病在膏肓/null 病夫/null 病媒/null 病学/null 病室/null 病害/null 病家/null 病容/null 病床/null 病弱/null 病弱者/null 病征/null 病得/null 病态/null 病态肥胖/null 病急乱投医/null 病恹恹/null 病患/null 病情/null 病情复发/null 病情恶化/null 病愈/null 病房/null 病故/null 病机/null 病来如山倒/null 病染膏肓/null 病株/null 病根/null 病案/null 病榻/null 病死/null 病残/null 病毒/null 病毒学/null 病毒学家/null 病毒式营销/null 病毒性/null 病毒性肝炎/null 病毒性营销/null 病毒感染/null 病毒科/null 病毒营销/null 病毒血症/null 病民害国/null 病民蛊国/null 病源/null 病灶/null 病状/null 病狂丧心/null 病理/null 病理上/null 病理学/null 病理学家/null 病理学者/null 病由口入/null 病病歪歪/null 病症/null 病痛/null 病的/null 病科/null 病程/null 病笃/null 病粒/null 病者/null 病脉/null 病药/null 病菌/null 病虫/null 病虫害/null 病象/null 病身/null 病退/null 病逝/null 病邪/null 病重/null 病院/null 病魔/null 病魔缠身/null 症侯/null 症侯群/null 症候/null 症候群/null 症像/null 症状/null 症状性/null 症结/null 症象/null 痈疽/null 痉挛/null 痊愈/null 痒疹/null 痒症/null 痒痒/null 痒痒挠/null 痒的很/null 痔漏/null 痔疮/null 痔疾/null 痕迹/null 痕量/null 痘浆/null 痘疮/null 痘疱/null 痘痂/null 痘痕/null 痘瘢/null 痘苗/null 痛不堪忍/null 痛不欲生/null 痛中/null 痛之入骨/null 痛入骨髓/null 痛击/null 痛切/null 痛切心骨/null 痛哭/null 痛哭失声/null 痛哭流涕/null 痛处/null 痛失/null 痛失良机/null 痛定思痛/null 痛彻心肺/null 痛彻心腑/null 痛彻骨髓/null 痛心/null 痛心入骨/null 痛心切齿/null 痛心刻骨/null 痛心泣血/null 痛心疾首/null 痛快/null 痛快淋漓/null 痛性痉挛/null 痛恨/null 痛恶/null 痛悔/null 痛悼/null 痛惜/null 痛惩/null 痛感/null 痛成/null 痛打/null 痛批/null 痛抱西河/null 痛改前非/null 痛斥/null 痛样/null 痛楚/null 痛楚彻骨/null 痛殴/null 痛毁前非/null 痛毁极诋/null 痛涤前非/null 痛痒/null 痛痒相关/null 痛痛快快/null 痛痹/null 痛砭/null 痛砭时弊/null 痛经/null 痛自/null 痛苦/null 痛觉/null 痛话/null 痛责/null 痛风/null 痛饮/null 痛饮黄龙/null 痛骂/null 痞块/null 痞子/null 痞子蔡/null 痞积/null 痢特灵/null 痢疾/null 痤疮/null 痦子/null 痧子/null 痨病/null 痰厥/null 痰喘/null 痰桶/null 痰气/null 痰液/null 痰盂/null 痰盂儿/null 痰盂式/null 痰筒/null 痰迷心窍/null 痱子/null 痱子粉/null 痲疹/null 痲痹/null 痴人/null 痴人痴福/null 痴人说梦/null 痴傻/null 痴呆/null 痴呆懵懂/null 痴呆症/null 痴子/null 痴心/null 痴心女子负心汉/null 痴心妄想/null 痴心妇人负心汉/null 痴心梦想/null 痴恋/null 痴情/null 痴想/null 痴男怨女/null 痴痴/null 痴笑/null 痴肥/null 痴迷/null 痴迷不悟/null 痴醉/null 痴长/null 痴騃/null 痹证/null 痼习/null 痼疾/null 痼癖/null 瘀伤/null 瘀泥/null 瘀滞/null 瘀积/null 瘀血/null 瘀青/null 瘅恶彰善/null 瘅疟/null 瘊子/null 瘌痢/null 瘌痢头/null 瘗玉埋香/null 瘘管/null 瘙痒/null 瘙痒病/null 瘙痒症/null 瘛疭/null 瘟疫/null 瘟疹/null 瘟病/null 瘟神/null 瘠人肥己/null 瘠地/null 瘠己肥人/null 瘠牛偾豚/null 瘠田/null 瘠薄/null 瘢点/null 瘢痕/null 瘤块/null 瘤子/null 瘤牛/null 瘤病/null 瘤胃/null 瘦人/null 瘦削/null 瘦商百富/null 瘦子/null 瘦小/null 瘦弱/null 瘦得/null 瘦果/null 瘦溜/null 瘦煤/null 瘦瘠/null 瘦瘦/null 瘦瘪/null 瘦的/null 瘦肉/null 瘦肉精/null 瘦脊/null 瘦脸/null 瘦身/null 瘦长/null 瘦马/null 瘦骨伶仃/null 瘦骨如柴/null 瘦骨嶙峋/null 瘩背/null 瘪三/null 瘪嘴/null 瘪螺痧/null 瘪陷/null 瘫坐/null 瘫子/null 瘫痪/null 瘫软/null 瘭疽/null 瘰疬/null 瘰螈/null 瘴气/null 瘴疠/null 瘸子/null 瘸腿/null 瘸行/null 瘾君子/null 瘾头/null 瘾头儿/null 癀病/null 癃闭/null 癌变/null 癌学/null 癌状/null 癌病/null 癌症/null 癌瘤/null 癌细胞/null 癌肿/null 癔病/null 癖好/null 癖性/null 癞子/null 癞瓜/null 癞疮/null 癞病/null 癞癣/null 癞皮狗/null 癞皮病/null 癞蛤蟆/null 癞蛤蟆想吃天鹅肉/null 癣疥/null 癣疥之疾/null 癫状/null 癫狂/null 癫痫/null 癫间/null 癫风/null 癯瘦/null 癸丑/null 癸亥/null 癸卯/null 癸巳/null 癸未/null 癸酉/null 登上/null 登临/null 登乘/null 登仙/null 登位/null 登入/null 登出/null 登出来/null 登台/null 登台拜将/null 登台献艺/null 登台表演/null 登在/null 登场/null 登坛拜将/null 登基/null 登堂入室/null 登天/null 登封/null 登山/null 登山临水/null 登山家/null 登山小鲁/null 登山杖/null 登山涉水/null 登山蓦岭/null 登山越岭/null 登山运动/null 登山队/null 登岸/null 登峰/null 登峰造极/null 登帐/null 登广/null 登广告/null 登庸/null 登庸人才/null 登录/null 登录档/null 登录项/null 登徒子/null 登报/null 登攀/null 登时/null 登月/null 登月舱/null 登机/null 登机入口/null 登机口/null 登机廊桥/null 登机手续/null 登机手续柜台/null 登机桥/null 登机楼/null 登机牌/null 登机证/null 登机门/null 登极/null 登楼/null 登科/null 登程/null 登第/null 登级/null 登船/null 登记/null 登记册/null 登记名/null 登记吨/null 登记员/null 登记处/null 登记用户/null 登记簿/null 登记者/null 登记表/null 登账/null 登轮/null 登载/null 登遐/null 登门/null 登门拜访/null 登陆/null 登陆场/null 登陆月球/null 登陆舰/null 登陆艇/null 登革热/null 登革疫苗/null 登革病毒/null 登高/null 登高一呼/null 登高望远/null 登高能赋/null 登高自卑/null 登龙门/null 白丁/null 白丁俗客/null 白三叶草/null 白下/null 白下区/null 白不呲咧/null 白专/null 白乳胶/null 白事/null 白云/null 白云亲舍/null 白云区/null 白云孤飞/null 白云山/null 白云岩/null 白云机场/null 白云母/null 白云石/null 白云矿区/null 白云苍狗/流云苍狗 白人/null 白令/null 白令海/null 白令海峡/null 白体/null 白佛/null 白俄/null 白俄罗斯人/null 白做/null 白僵蚕/null 白先勇/null 白光/null 白兔/null 白党/null 白兰/null 白兰地/null 白兰地酒/null 白兰瓜/null 白兰花/null 白内障/null 白军/null 白冰冰/null 白净/null 白刃/null 白刃战/null 白刃格斗/null 白切鸡/null 白化/null 白化病/null 白化症/null 白匪/null 白区/null 白华之怨/null 白卫军/null 白卷/null 白厅/null 白发/null 白发人送黑发人/null 白发朱颜/null 白发相守/null 白发红颜/null 白发苍苍/null 白发苍颜/null 白发青衫/null 白叟黄童/null 白口/null 白口铁/null 白吃/null 白吃白喝/null 白唇鹿/null 白喉/null 白喉杆菌/null 白喉毒素/null 白喝/null 白嘴儿/null 白土子/null 白地/null 白坐/null 白垩/null 白垩世/null 白垩系/null 白垩纪/null 白城/null 白城地区/null 白堤/null 白塔/null 白塔区/null 白塔寺/null 白壁/null 白夜/null 白大褂/null 白天/null 白天黑夜/null 白头/null 白头之叹/null 白头偕老/null 白头到老/null 白头发/null 白头如新/null 白头山/null 白头相守/null 白头翁/null 白头鸟/null 白头鹎/null 白头鹰/null 白契/null 白奴/null 白如/null 白娘子/null 白嫩/null 白字/null 白学/null 白安居/null 白宫/null 白宫群英/null 白居易/null 白屈菜/null 白屋寒门/null 白山/null 白山宗/null 白山派/null 白山黑水/null 白崇禧/null 白布/null 白帝城/null 白带/null 白干/null 白干儿/null 白底/null 白开水/null 白忙/null 白手/null 白手成家/null 白手起家/null 白打/null 白扔/null 白托/null 白扯淡/null 白扯蛋/null 白报纸/null 白拣/null 白描/null 白搭/null 白撞/null 白文/null 白斑/null 白斑病/null 白旄黄钺/null 白族吹吹腔/null 白旗/null 白日/null 白日做梦/null 白日升天/null 白日撞/null 白日梦/null 白日衣绣/null 白日见鬼/null 白昼/null 白晃晃/null 白晓燕/null 白暨豚/null 白朗/null 白朗宁/null 白朗起义/null 白木/null 白木耳/null 白术/null 白朴/null 白条/null 白条猪/null 白杨/null 白杨树/null 白板/null 白板天子/null 白板笔/null 白果/null 白果儿/null 白核/null 白案/null 白桦/null 白梨/null 白棉纸/null 白榴石/null 白死/null 白毛/null 白毛女/null 白毛风/null 白毫之赐/null 白水/null 白水晶/null 白水江自然保护区/null 白水泥/null 白求恩/null 白汤/null 白沙/null 白沙乡/null 白沙县/null 白沙工农区/null 白沙瓦/null 白沫/null 白河/null 白河镇/null 白泽/null 白洋淀/null 白活/null 白浆/null 白浊/null 白浪/null 白海/null 白灰/null 白点/null 白炽/null 白炽灯/null 白炽电灯/null 白热/null 白热化/null 白煤/null 白熊/null 白片/null 白狐/null 白猪/null 白玉/null 白玉微瑕/null 白玉无瑕/null 白班/null 白班儿/null 白璧微瑕/null 白璧无瑕/null 白璧青蝇/null 白瓷/null 白痢/null 白痴/null 白癜疯/null 白癜风/null 白癣/null 白癫风/null 白白/null 白的/null 白皑皑/null 白皙/null 白皮/null 白皮书/null 白皮松/null 白目/null 白相/null 白眉拳/null 白眉赤眼/null 白眼/null 白眼珠/null 白眼珠儿/null 白矮星/null 白石/null 白石砬子/null 白矾/null 白砂糖/null 白砒/null 白碑/null 白碱滩/null 白碱滩区/null 白磷/null 白票/null 白秃风/null 白秆/null 白种/null 白种人/null 白简/null 白米/null 白粉/null 白粉病/null 白粥/null 白糖/null 白素贞/null 白纱/null 白纸/null 白纸黑字/null 白线/null 白细/null 白细胞/null 白给/null 白羊/null 白羊座/null 白羊朝/null 白翎岛/null 白翎面/null 白翳/null 白者/null 白肉/null 白肤/null 白胡椒/null 白脱牛奶/null 白脸/null 白色/null 白色人种/null 白色体/null 白色恐怖/null 白色情人节/null 白色战剂/null 白色香橙花/null 白芍/null 白芝麻/null 白芨/null 白花/null 白花花/null 白花蛇/null 白花蛇舌草/null 白花齐放/null 白芷/null 白苋/null 白苋紫茄/null 白苏/null 白茅/null 白茫茫/null 白药/null 白莲/null 白莲教/null 白菊/null 白菜/null 白菜价/null 白菜型油菜/null 白菜类蔬菜/null 白菜豆/null 白萝卜/null 白葡萄酒/null 白蒙蒙/null 白蔹/null 白薯/null 白藤/null 白虎/null 白虎通/null 白虫/null 白虹贯日/null 白蚁/null 白蛇/null 白蛇传/null 白蛉/null 白蛉热/null 白蛋白/null 白蜡/null 白蜡明经/null 白蜡杆子/null 白蜡树/null 白蜡虫/null 白血球/null 白血病/null 白行简/null 白衣/null 白衣公卿/null 白衣卿相/null 白衣天使/null 白衣宰相/null 白衣战士/null 白衣秀士/null 白衣苍狗/null 白裙/null 白话/null 白话文/null 白话诗/null 白豆蔻/null 白质/null 白费/null 白费力气/null 白费唇舌/null 白费心机/null 白赔/null 白起/null 白跑一趟/null 白车/null 白送/null 白道/null 白酒/null 白醋/null 白醭/null 白里透红/null 白金/null 白金汉宫/null 白金汉郡/null 白钢/null 白钨矿/null 白铁/null 白铁皮/null 白铁矿/null 白铅矿/null 白铜/null 白银/null 白银书/null 白银区/null 白镪/null 白镴/null 白附/null 白附片/null 白陶/null 白雪/null 白雪公主/null 白雪皑皑/null 白雪纷飞/null 白雪阳春/null 白霜/null 白面/null 白面书生/null 白面儿/null 白页/null 白领/null 白领工人/null 白领阶级/null 白颊/null 白食/null 白饭/null 白首/null 白首一节/null 白首之心/null 白首北面/null 白首同归/null 白首如新/null 白首无成/null 白首相知/null 白首穷经/null 白首空归/null 白香词谱/null 白马/null 白马寺/null 白马王子/null 白马雪山/null 白马非马/null 白驹空谷/null 白驹过隙/null 白骨/null 白骨精/null 白骨顶/null 白鬼/null 白鬼笔/null 白鱼/null 白鱼入舟/null 白鲞/null 白鲸/null 白鳍豚/null 白鳗/null 白鳝/null 白鳞鱼/null 白鹄/null 白鹅/null 白鹇/null 白鹤/null 白鹤拳/null 白鹤梁/null 白鹭/null 白鹳/null 白麻子/null 白黑/null 白黑分明/null 白鼠/null 白鼻子/null 白龙微服/null 白龙鱼服/null 百万/null 百万个/null 百万买宅千万买邻/null 百万位/null 百万倍/null 百万吨/null 百万吨级/null 百万吨级核武器/null 百万富翁/null 百万赫兹/null 百万雄兵/null 百万雄狮/null 百丈/null 百丈竿头/null 百不一失/null 百不一爽/null 百不一遇/null 百不咋/null 百不失一/null 百不当一/null 百不杂/null 百世/null 百世不易/null 百世不磨/null 百世之利/null 百世之师/null 百世师/null 百世流芳/null 百个/null 百中/null 百中百发/null 百举百全/null 百乐餐/null 百事俱废/null 百事可乐/null 百事大吉/null 百事无成/null 百事轻怡/null 百事通/null 百二关山/null 百二山河/null 百五/null 百代文宗/null 百代过客/null 百份/null 百伶百俐/null 百位/null 百余/null 百依百随/null 百依百顺/null 百保利/null 百倍/null 百儿八十/null 百元/null 百克/null 百六/null 百兵列阵/null 百兽/null 百兽率舞/null 百几个/null 百出/null 百分/null 百分之/null 百分之一/null 百分之一百/null 百分之百/null 百分制/null 百分号/null 百分尺/null 百分数/null 百分比/null 百分点/null 百分率/null 百分百/null 百分表/null 百利甜/null 百利甜酒/null 百动不如一静/null 百十/null 百升/null 百卉千葩/null 百卉含英/null 百发百中/null 百口莫辩/null 百口难分/null 百叶/null 百叶窗/null 百叶箱/null 百合/null 百合子/null 百合科/null 百合花/null 百合花饰/null 百名/null 百吨/null 百听不厌/null 百响/null 百商/null 百善孝为先/null 百喙莫辩/null 百回/null 百团大战/null 百城之富/null 百堵皆作/null 百姓/null 百姿千态/null 百威/null 百威啤酒/null 百媚千娇/null 百孔/null 百孔千创/null 百孔千疮/null 百官/null 百家/null 百家乐/null 百家争呜/null 百家争鸣/null 百家姓/null 百家诸子/null 百尺/null 百尺竿头/null 百岁/null 百岁之后/null 百岁千秋/null 百岁老人/null 百川归海/null 百巧千穷/null 百巧成穷/null 百帕/null 百年/null 百年不遇/null 百年之业/null 百年之后/null 百年之好/null 百年之柄/null 百年偕老/null 百年到老/null 百年大计/null 百年战争/null 百年树人/null 百年谐老/null 百应/null 百废/null 百废俱举/null 百废俱兴/null 百废具兴/null 百废备举/null 百废待举/null 百废待兴/null 百度币/null 百度百科/null 百度知道/null 百弊/null 百弊丛生/null 百强/null 百忙/null 百忙之中/null 百忙当中/null 百念俱灰/null 百念皆灰/null 百态/null 百思/null 百思不得其解/null 百思不解/null 百思买/null 百思而不得其解/null 百思莫解/null 百怪/null 百总/null 百感/null 百感交集/null 百慕/null 百慕大/null 百慕大三角/null 百戏/null 百战/null 百战不殆/null 百战奇略/null 百战百胜/null 百折/null 百折不回/null 百折不挠/null 百挑不厌/null 百无一失/null 百无一是/null 百无一漏/null 百无一用/null 百无一能/null 百无所忌/null 百无所成/null 百无禁忌/null 百无聊赖/null 百日/null 百日咳/null 百日战争/null 百日王朝/null 百日维新/null 百日草/null 百日菊/null 百果/null 百步/null 百步无轻担/null 百步穿杨/null 百死一生/null 百济/null 百渡/null 百灵/null 百灵百验/null 百灵鸟/null 百炼/null 百炼之钢/null 百炼刚/null 百炼千锤/null 百炼成钢/null 百煅千炼/null 百物/null 百病/null 百盒/null 百看不厌/null 百眼巨人/null 百磅/null 百福具臻/null 百科/null 百科事典/null 百科全书/null 百科全书派/null 百科知识/null 百科词典/null 百端交集/null 百端待举/null 百米/null 百米赛跑/null 百粤/null 百紫千红/null 百纵千随/null 百老汇/null 百胜/null 百胜餐饮/null 百胜餐饮集团/null 百脚/null 百舌之声/null 百舌鸟/null 百舍重茧/null 百舍重趼/null 百般/null 百般刁难/null 百般奉承/null 百般巴结/null 百般挑剔/null 百色/null 百色地区/null 百色起义/null 百花/null 百花争艳/null 百花园/null 百花奖/null 百花盛开/null 百花齐放/null 百草/null 百草枯/null 百行/null 百衲本/null 百衲衣/null 百褶裙/null 百计/null 百计千心/null 百计千方/null 百计千谋/null 百读不厌/null 百谋千计/null 百谷/null 百货/null 百货公司/null 百货商场/null 百货商店/null 百货大厦/null 百货大楼/null 百货店/null 百越/null 百足/null 百足不僵/null 百足之虫死而不僵/null 百足之虫至死不僵/null 百身何赎/null 百身莫赎/null 百部/null 百里/null 百里才/null 百里挑一/null 百里者半九十/null 百里香/null 百金花/null 百问不烦/null 百闻不如一见/null 百页窗/null 百顺百依/null 百香/null 百香果/null 百鸟朝凤/null 百龄/null 百龄眉寿/null 百龙之智/null 皂丝麻线/null 皂化/null 皂液/null 皂片/null 皂白/null 皂皮树/null 皂盒/null 皂石/null 皂矾/null 皂碱/null 皂荚/null 皂荚树/null 皂角/null 皂隶/null 的哥/null 的士/null 的士高/null 的当/null 的款/null 的确/null 的确良/null 的话/null 的黎波里/null 皆不/null 皆为/null 皆以/null 皆佳/null 皆兵/null 皆可/null 皆因/null 皆大/null 皆大欢喜/null 皆巳/null 皆无/null 皆是/null 皆有/null 皆然/null 皆白/null 皆知/null 皆空/null 皆纵即逝/null 皆输/null 皇上/null 皇亲国戚/null 皇位/null 皇储/null 皇党/null 皇军/null 皇冠/null 皇冠上的明珠/null 皇冠假日酒店/null 皇冠出版/null 皇冠出版集团/null 皇历/null 皇古/null 皇后/null 皇后区/null 皇城/null 皇堡/null 皇天/null 皇天不亲惟德是辅/null 皇天不负苦心人/null 皇天后土/null 皇太/null 皇太后/null 皇太子/null 皇太极/null 皇太极清太宗/null 皇女/null 皇姑/null 皇姑区/null 皇姑屯事件/null 皇子/null 皇室/null 皇宫/null 皇家/null 皇家加勒比海游轮公司/null 皇家学会/null 皇家海军/null 皇家香港警察/null 皇家马德里/null 皇家骑警/null 皇帝/null 皇帝的新衣/null 皇帝菜/null 皇庄/null 皇恩/null 皇族/null 皇族内阁/null 皇朝/null 皇权/null 皇甫/null 皇甫嵩/null 皇甫镈/null 皇皇/null 皇粮/null 皇统/null 皇陵/null 皇马/null 皈依/null 皈依者/null 皋兰/null 皎厉/null 皎月/null 皎洁/null 皎白/null 皎皎/null 皎皎者易污/null 皑皑/null 皒皒/null 皓月/null 皓白/null 皓矾/null 皓首/null 皓首穷经/null 皓首苍颜/null 皓齿/null 皓齿明眸/null 皓齿星眸/null 皓齿朱唇/null 皓齿蛾眉/null 皖北/null 皖南/null 皖南事变/null 皖系军阀/null 皖系战败/null 皮下/null 皮下注射/null 皮下的/null 皮下组织/null 皮之不存/null 皮之不存毛将焉傅/null 皮件/null 皮傅/null 皮儿/null 皮克斯/null 皮克林/null 皮具/null 皮内注射/null 皮划艇/null 皮划艇激流回旋/null 皮划艇静水/null 皮制/null 皮制品/null 皮包/null 皮包公司/null 皮包骨/null 皮包骨头/null 皮匠/null 皮卡尔/null 皮厚/null 皮囊/null 皮围/null 皮围巾/null 皮圈/null 皮垫/null 皮埃尔/null 皮塔饼/null 皮壳/null 皮外/null 皮夹/null 皮夹子/null 皮套/null 皮子/null 皮实/null 皮尔森/null 皮尺/null 皮层/null 皮层下失语症/null 皮层性/null 皮层性视损伤/null 皮屑/null 皮山/null 皮带/null 皮带传动/null 皮带扣/null 皮带轮/null 皮带运输机/null 皮帽/null 皮开肉破/null 皮开肉绽/null 皮开肉锭/null 皮弗娄牛/null 皮张/null 皮影/null 皮影戏/null 皮掌儿/null 皮星/null 皮条/null 皮条客/null 皮松肉紧/null 皮板儿/null 皮桶/null 皮桶子/null 皮棉/null 皮毛/null 皮炎/null 皮特凯恩群岛/null 皮特拉克/null 皮猴/null 皮猴儿/null 皮球/null 皮疹/null 皮癌/null 皮的/null 皮相/null 皮相之士/null 皮相之见/null 皮相之谈/null 皮破/null 皮硝/null 皮秒/null 皮笑/null 皮笑肉不笑/null 皮筋/null 皮筏/null 皮箱/null 皮糖/null 皮纸/null 皮线/null 皮肉/null 皮肉之苦/null 皮肤/null 皮肤上/null 皮肤之见/null 皮肤炎/null 皮肤病/null 皮肤癌/null 皮肤科/null 皮肤粗糙/null 皮肤肌肉囊/null 皮胶/null 皮脂/null 皮脂腺/null 皮脸/null 皮脸儿/null 皮艇/null 皮花/null 皮草/null 皮萨饼/null 皮蛋/null 皮衣/null 皮袄/null 皮袋/null 皮裤/null 皮诺切特/null 皮货/null 皮质/null 皮质醇/null 皮软/null 皮辊/null 皮辊花/null 皮部/null 皮里春秋/null 皮里阳秋/null 皮重/null 皮钦语/null 皮面/null 皮革/null 皮革商/null 皮靴/null 皮鞋/null 皮鞋匠/null 皮鞋油/null 皮鞭/null 皮黄/null 皱叶欧芹/null 皱巴巴/null 皱折/null 皱摺/null 皱痕/null 皱眉/null 皱眉头/null 皱眉肌/null 皱眉蹙眼/null 皱纹/null 皱缩/null 皱胃/null 皱褶/null 皱褶多/null 皱襞/null 皱起/null 皱边/null 皱额/null 皲肿/null 皲裂/null 皴法/null 皴裂/null 盂兰盆会/null 盂方水方/null 盅子/null 盆中/null 盆倾瓮倒/null 盆儿/null 盆地/null 盆堂/null 盆塘/null 盆子/null 盆景/null 盆架/null 盆栽/null 盆植/null 盆汤/null 盆浴/null 盆状/null 盆腔/null 盆腔炎/null 盆花/null 盆菜/null 盆钵/null 盈亏/null 盈亏自负/null 盈余/null 盈凸月/null 盈则不亏/null 盈利/null 盈千累万/null 盈千累百/null 盈尺之地/null 盈月/null 盈江/null 盈溢/null 盈满/null 盈满之咎/null 盈盈/null 盈盈一水/null 盈盈在目/null 盈盈秋水/null 盈眶/null 盈箱累箧/null 盈篇累牍/null 盈门/null 益上损下/null 益于/null 益加/null 益友/null 益发/null 益善/null 益国利民/null 益处/null 益寿/null 益寿延年/null 益州/null 益性/null 益无忌惮/null 益智/null 益母/null 益母草/null 益民/null 益气/null 益胃生津/null 益虫/null 益觉困难/null 益谦亏盈/null 益趋/null 益阳/null 益阳地区/null 益高/null 益鸟/null 盎司/null 盎士/null 盎斯/null 盎格鲁/null 盎格鲁撒克逊/null 盎格鲁撒克逊人/null 盎格鲁萨克逊/null 盎然/null 盎盂相击/null 盎盂相敲/null 盏灯/null 盐业/null 盐井/null 盐井乡/null 盐井县/null 盐亭/null 盐价/null 盐份/null 盐分/null 盐区/null 盐卤/null 盐味/null 盐商/null 盐土/null 盐场/null 盐坨子/null 盐城/null 盐埔/null 盐埔乡/null 盐埕/null 盐埕区/null 盐层/null 盐山/null 盐工/null 盐巴/null 盐度/null 盐性/null 盐析/null 盐枭/null 盐水/null 盐水湖/null 盐水选种/null 盐水镇/null 盐池/null 盐汽水/null 盐泉/null 盐津/null 盐渍化/null 盐湖/null 盐湖区/null 盐湖城/null 盐源/null 盐滩/null 盐田/null 盐田区/null 盐碱/null 盐碱土/null 盐碱地/null 盐碱湿地/null 盐碱滩/null 盐类/null 盐肤木/null 盐花/null 盐蛇/null 盐边/null 盐都/null 盐都区/null 盐酸/null 盐酸克仑特罗/null 盐酸盐/null 盐量计/null 盐铁论/null 盐霜/null 监临自盗/null 监主自盗/null 监事/null 监交/null 监候/null 监军/null 监利/null 监制/null 监卖/null 监印/null 监听/null 监听器/null 监国/null 监场/null 监外执行/null 监委/null 监守/null 监守官/null 监守自盗/null 监察/null 监察人/null 监察员/null 监察局/null 监察部/null 监察院/null 监工/null 监房/null 监护/null 监护人/null 监护权/null 监押/null 监控/null 监控器/null 监收/null 监查/null 监查员/null 监测/null 监测站/null 监牢/null 监牧/null 监犯/null 监狱/null 监理/null 监理所/null 监生/null 监用/null 监督/null 监督人/null 监督员/null 监督哨/null 监督官/null 监督站/null 监督者/null 监票/null 监禁/null 监管/null 监管体制/null 监织造/null 监缴/null 监考/null 监考人/null 监考官/null 监舍/null 监视/null 监视人/null 监视员/null 监视器/null 监视孔/null 监视居住/null 监视者/null 监视雷达/null 监趸/null 监销/null 监门/null 监门之养/null 监院/null 盒中/null 盒子/null 盒子枪/null 盒子菜/null 盒尺/null 盒带/null 盒式/null 盒式录音磁带/null 盒装/null 盒饭/null 盔头/null 盔子/null 盔甲/null 盔甲上/null 盖上/null 盖世/null 盖世太保/null 盖世无双/null 盖了/null 盖以/null 盖住/null 盖儿/null 盖兹/null 盖印/null 盖县/null 盖在/null 盖头/null 盖好/null 盖子/null 盖尔/null 盖尔语/null 盖层/null 盖屋/null 盖州/null 盖帽/null 盖帽儿/null 盖度/null 盖戮/null 盖戳/null 盖房子/null 盖有/null 盖板/null 盖柿/null 盖棺/null 盖棺定论/null 盖棺论定/null 盖楼/null 盖没/null 盖法/null 盖浇饭/null 盖满/null 盖然性/null 盖然论/null 盖物/null 盖特纳/null 盖率/null 盖瓦/null 盖着/null 盖碗/null 盖章/null 盖茨/null 盖茨比/null 盖菜/null 盖被/null 盖起/null 盖过/null 盖邮戳/null 盖门/null 盖革计数器/null 盖饭/null 盖骑/null 盗亦有道/null 盗伐/null 盗劫/null 盗匪/null 盗卖/null 盗印/null 盗取/null 盗名欺世/null 盗坟/null 盗墓/null 盗尸/null 盗尸者/null 盗怨主人/null 盗憎主人/null 盗掘/null 盗案/null 盗汗/null 盗版/null 盗版党/null 盗版者/null 盗犯/null 盗猎/null 盗用/null 盗癖/null 盗窃/null 盗窃案/null 盗窃犯/null 盗窃癖/null 盗船/null 盗贼/null 盗走/null 盗钟掩耳/null 盗铃/null 盗铃掩耳/null 盗领/null 盗马/null 盗骗/null 盗龙/null 盘中/null 盘亘/null 盘估/null 盘住/null 盘倒/null 盘儿菜/null 盘剥/null 盘古/null 盘古氏/null 盘号/null 盘场/null 盘坐/null 盘头/null 盘子/null 盘存/null 盘定/null 盘察/null 盘尼西林/null 盘山/null 盘川/null 盘帐/null 盘库/null 盘底/null 盘店/null 盘弄/null 盘据/null 盘整/null 盘旋/null 盘旋曲折/null 盘旋物/null 盘曲/null 盘杠子/null 盘条/null 盘查/null 盘标/null 盘根/null 盘根究底/null 盘根错节/null 盘根问底/null 盘桓/null 盘梯/null 盘水加剑/null 盘沙简金/null 盘点/null 盘片/null 盘状物/null 盘盘/null 盘着腿/null 盘石/null 盘石之固/null 盘石之安/null 盘石桑苞/null 盘石犬牙/null 盘碗/null 盘秤/null 盘程/null 盘究/null 盘符/null 盘算/null 盘管/null 盘结/null 盘绕/null 盘绳栓/null 盘缠/null 盘羊/null 盘腿/null 盘膝/null 盘诘/null 盘账/null 盘货/null 盘费/null 盘赌/null 盘跚/null 盘踞/null 盘运/null 盘道/null 盘错/null 盘锦/null 盘问/null 盘陀/null 盘陀路/null 盘飧/null 盘餐/null 盘香/null 盘马弯弓/null 盘驳/null 盘龙/null 盘龙区/null 盘龙卧虎/null 盛不忘衰/null 盛世/null 盛举/null 盛事/null 盛产/null 盛京/null 盛会/null 盛传/null 盛入/null 盛典/null 盛况/null 盛况空前/null 盛势/null 盛名/null 盛名之下其实难副/null 盛名难副/null 盛唐/null 盛器/null 盛在/null 盛夏/null 盛大/null 盛大舞会/null 盛妆/null 盛季/null 盛宴/null 盛年/null 盛开/null 盛开过/null 盛得遗范/null 盛德/null 盛德不泯/null 盛必虑衰/null 盛怒/null 盛情/null 盛情款待/null 盛情难却/null 盛意/null 盛放/null 盛时/null 盛明/null 盛景/null 盛暑/null 盛暑祈寒/null 盛服/null 盛期/null 盛极/null 盛极一时/null 盛气/null 盛气临人/null 盛气凌人/null 盛水/null 盛水不漏/null 盛称/null 盛筵/null 盛筵必散/null 盛筵易散/null 盛筵难再/null 盛行/null 盛衰/null 盛衰兴废/null 盛衰利寒/null 盛衰相乘/null 盛衰荣辱/null 盛装/null 盛观/null 盛誉/null 盛赞/null 盛食厉兵/null 盛饭/null 盛馔/null 盟主/null 盟主权/null 盟兄/null 盟兄弟/null 盟军/null 盟友/null 盟员/null 盟国/null 盟山誓海/null 盟弟/null 盟旗制度/null 盟约/null 盟誓/null 盟邦/null 盥洗/null 盥洗台/null 盥洗室/null 盥洗用具/null 盥漱/null 盥耳山栖/null 盥踵灭顶/null 目上/null 目下/null 目下十行/null 目不交睫/null 目不妄视/null 目不忍睹/null 目不忍见/null 目不忍视/null 目不暇接/null 目不暇给/null 目不知书/null 目不窥园/null 目不给视/null 目不见睫/null 目不识丁/null 目不识字/null 目不转晴/null 目不转睛/null 目不转视/null 目不邪视/null 目中/null 目中无人/null 目人/null 目今/null 目使颐令/null 目光/null 目光呆滞/null 目光如炬/null 目光如豆/null 目光如鼠/null 目光短浅/null 目光锐利/null 目击/null 目击者/null 目击耳闻/null 目击道存/null 目前/null 目力/null 目力表/null 目即成诵/null 目呆口咂/null 目大不睹/null 目定口呆/null 目录/null 目录学/null 目录树/null 目怆有天/null 目怔口呆/null 目成/null 目成心许/null 目所未睹/null 目披手抄/null 目指气使/null 目挑心招/null 目断飞鸿/null 目断魂销/null 目断鳞鸿/null 目无下尘/null 目无余子/null 目无光泽/null 目无全牛/null 目无法纪/null 目无流视/null 目无组织/null 目无见睫/null 目明/null 目染耳濡/null 目标/null 目标伪装/null 目标侦察/null 目标匹配作业/null 目标地址/null 目标市场/null 目标管理/null 目标责任制/null 目次/null 目测/null 目濡耳染/null 目牛无全/null 目牛游刃/null 目珠/null 目疾/null 目的/null 目的在/null 目的在于/null 目的地/null 目的性/null 目的意义/null 目的论/null 目盲/null 目盼心思/null 目眦/null 目眩/null 目眩头昏/null 目眩心花/null 目眩神摇/null 目眩神迷/null 目眩魂摇/null 目睁口呆/null 目睹/null 目睹耳闻/null 目瞠口哆/null 目瞤/null 目瞪/null 目瞪口呆/null 目瞪神呆/null 目瞪舌疆/null 目空/null 目空一世/null 目空一切/null 目空四海/null 目窕心与/null 目若悬珠/null 目见/null 目见耳闻/null 目视/null 目论/null 目语/null 目迷五色/null 目送/null 目送手挥/null 目镜/null 盯人/null 盯住/null 盯市/null 盯梢/null 盯着/null 盯着看/null 盯视/null 盱眙/null 盱衡/null 盲人/null 盲人把烛/null 盲人摸象/null 盲人瞎马/null 盲人说象/null 盲从/null 盲信/null 盲动/null 盲动主义/null 盲区/null 盲哑/null 盲哑教育/null 盲囊/null 盲女/null 盲字/null 盲干/null 盲打/null 盲文/null 盲棋/null 盲椿象/null 盲法/null 盲流/null 盲点/null 盲生/null 盲症/null 盲目/null 盲目不盲心/null 盲目乐观/null 盲目发展/null 盲目性/null 盲目生产/null 盲眼/null 盲眼无珠/null 盲端/null 盲者/null 盲者得镜/null 盲聋/null 盲聋哑/null 盲肠/null 盲肠炎/null 盲蛇/null 盲障/null 盲骑瞎马/null 盲鳗/null 盲鼠/null 直上/null 直上云霄/null 直上青云/null 直下/null 直不/null 直书/null 直交/null 直僵/null 直入/null 直内方外/null 直冲横撞/null 直到/null 直到现在/null 直前/null 直勾勾/null 直升/null 直升机/null 直升飞机/null 直发/null 直发器/null 直发板/null 直叙/null 直号/null 直呼/null 直哭/null 直喘气/null 直喻/null 直奉战争/null 直奔/null 直定/null 直射/null 直尺/null 直属/null 直属单位/null 直属机关/null 直属机构/null 直峭/null 直布罗陀/null 直布罗陀海峡/null 直径/null 直待/null 直心眼儿/null 直性/null 直性子/null 直情径行/null 直感/null 直愣愣/null 直截/null 直截了当/null 直抒/null 直抒己见/null 直抒胸臆/null 直抵/null 直拍/null 直拨/null 直指/null 直挺/null 直挺挺/null 直捣/null 直捣黄龙/null 直捷/null 直掇/null 直排/null 直接/null 直接了当/null 直接原因/null 直接参与/null 直接宾语/null 直接对话/null 直接影响/null 直接投资/null 直接推理/null 直接数据/null 直接染料/null 直接税/null 直接竞争/null 直接经验/null 直接肥料/null 直接贸易/null 直接费用/null 直接进行/null 直接选举/null 直接领导/null 直插/null 直撅撅/null 直撞/null 直撞横冲/null 直播/null 直敪/null 直方图/null 直昇机/null 直昇飞机/null 直是/null 直木必伐/null 直条/null 直来直去/null 直来直往/null 直根/null 直流/null 直流发电机/null 直流电/null 直流电动机/null 直溜/null 直溜溜/null 直爽/null 直率/null 直白/null 直皖战争/null 直直/null 直眉/null 直眉瞪眼/null 直着/null 直瞄/null 直瞪瞪/null 直码尺/null 直积/null 直立/null 直立人/null 直立茎/null 直笔/null 直系/null 直系亲属/null 直系军阀/null 直系祖先/null 直系血亲/null 直线/null 直线加速器/null 直线性加速器/null 直经/null 直翅目/null 直而不挺/null 直肠/null 直肠子/null 直肠炎/null 直肠癌/null 直肠镜/null 直至/null 直航/null 直节劲气/null 直落/null 直落布兰雅/null 直行/null 直裰/null 直观/null 直视/null 直觉/null 直觉性/null 直角/null 直角三角/null 直角三角形/null 直角器/null 直角坐标/null 直角尺/null 直言/null 直言不讳/null 直言勿讳/null 直言危行/null 直言取祸/null 直言命题/null 直言尽意/null 直言无讳/null 直言无隐/null 直言极谏/null 直言止论/null 直言正色/null 直言正谏/null 直言谠议/null 直言贾祸/null 直言骨鲠/null 直讲/null 直证/null 直译/null 直话/null 直说/null 直谅多闻/null 直谏/null 直贡呢/null 直走/null 直路/null 直跳/null 直躺/null 直辖/null 直辖市/null 直达/null 直运/null 直进/null 直述/null 直退/null 直送/null 直选/null 直通/null 直通火车/null 直通车/null 直逼/null 直道/null 直道不容/null 直道事人/null 直道而行/null 直链/null 直销/null 直门/null 直隶/null 直音/null 直飞/null 直馏/null 直驶/null 相一致/null 相与/null 相与为命/null 相中/null 相为表里/null 相乘/null 相书/null 相争/null 相互/null 相互作用/null 相互保证毁灭/null 相互关系/null 相互兼容/null 相互性/null 相互理解/null 相互矛盾/null 相互辉映/null 相互配合/null 相互间/null 相交/null 相交数/null 相亲/null 相亲相爱/null 相从/null 相仿/null 相会/null 相传/null 相伴/null 相似/null 相似形/null 相似性/null 相似物/null 相位/null 相位差/null 相位角/null 相体裁衣/null 相依/null 相依为命/null 相保/null 相信/null 相信人/null 相信组织/null 相信群众/null 相倚为命/null 相倚为强/null 相偎/null 相偕/null 相像/null 相克/null 相公/null 相关/null 相关器/null 相关图/null 相关性/null 相关物/null 相关者/null 相册/null 相冲/null 相减/null 相切/null 相劝/null 相加/null 相加性的/null 相助/null 相匹敌/null 相去不远/null 相去咫尺/null 相去天渊/null 相去无几/null 相去甚远/null 相反/null 相反物/null 相反相成/null 相变/null 相合/null 相同/null 相同之处/null 相同名字/null 相同样/null 相向/null 相向突击/null 相吸/null 相吻合/null 相告/null 相命/null 相命者/null 相商/null 相善/null 相国/null 相图/null 相城/null 相城区/null 相士/null 相声/null 相处/null 相夫/null 相夫教子/null 相契/null 相奸/null 相好/null 相媲美/null 相学/null 相守/null 相安/null 相安无事/null 相宜/null 相家/null 相容/null 相容性/null 相容条件/null 相对/null 相对主义/null 相对于/null 相对位置/null 相对剩余价值/null 相对地址/null 相对密度/null 相对性/null 相对数/null 相对来说/null 相对比/null 相对湿度/null 相对物/null 相对真理/null 相对而言/null 相对论/null 相对论性/null 相对误差/null 相对说来/null 相对象/null 相对运动/null 相对高度/null 相山/null 相山区/null 相左/null 相差/null 相差不多/null 相差悬殊/null 相差无几/null 相师/null 相帮/null 相干/null 相平面/null 相应/null 相应措施/null 相异/null 相当/null 相当于/null 相当于或大于/null 相当可观/null 相当多/null 相当大/null 相当规模/null 相当陡/null 相形/null 相形失色/null 相形见绌/null 相形见逊/null 相待/null 相待如宾/null 相待而成/null 相得恨晚/null 相得益彰/null 相忍/null 相忍为国/null 相怜/null 相思/null 相思子/null 相思病/null 相思豆/null 相思鸟/null 相恋/null 相恶/null 相悖/null 相情/null 相惊伯有/null 相成/null 相扑/null 相托/null 相扰/null 相扶/null 相承/null 相投/null 相抵/null 相持/null 相持不下/null 相接/null 相提并论/null 相撞/null 相敬如宾/null 相斗/null 相斥/null 相时而动/null 相映/null 相映成趣/null 相望/null 相术/null 相机/null 相机而动/null 相机而行/null 相机而言/null 相机行事/null 相机观变/null 相架/null 相框/null 相棋/null 相比/null 相比之下/null 相比较/null 相求/null 相沿/null 相沿成习/null 相混/null 相混合/null 相濡/null 相濡一沫/null 相濡以沫/null 相灭相生/null 相烦/null 相煎何急/null 相熟/null 相爱/null 相片/null 相片儿/null 相率/null 相生/null 相生相克/null 相电压/null 相电流/null 相看/null 相知/null 相知恨晚/null 相知相惜/null 相碰/null 相碰撞/null 相礼/null 相离/null 相称/null 相稔/null 相空间/null 相符/null 相符合/null 相等/null 相等物/null 相簿/null 相类/null 相类相从/null 相约/null 相纸/null 相结/null 相结合/null 相继/null 相继问世/null 相者/null 相联/null 相联系/null 相聚/null 相背/null 相若/null 相补/null 相衬/null 相见/null 相见恨晚/null 相见无日/null 相视/null 相视莫逆/null 相觑/null 相角/null 相触/null 相认/null 相讥/null 相让/null 相许/null 相识/null 相识人/null 相谈/null 相象/null 相貌/null 相貌堂堂/null 相距/null 相轻/null 相较/null 相辅/null 相辅相成/null 相辅而行/null 相迎/null 相近/null 相违/null 相连/null 相迫/null 相适合/null 相适应/null 相通/null 相逢/null 相逢恨晚/null 相逢狭路/null 相遇/null 相邻/null 相配/null 相配人/null 相配物/null 相里/null 相门出相/null 相门有相/null 相间/null 相除/null 相陪/null 相随/null 相隔/null 相面/null 相须为命/null 相须而行/null 相顾/null 相顾失色/null 相风使帆/null 相馆/null 相骂/null 盹儿/null 盼复/null 盼头/null 盼星星盼月亮/null 盼望/null 盼睐/null 盾形/null 盾板/null 盾牌/null 盾牌座/null 盾状/null 盾甲/null 省下/null 省中/null 省主席/null 省事/null 省亲/null 省人民办/null 省份/null 省优/null 省会/null 省便/null 省俗观风/null 省俭/null 省内/null 省内外/null 省军区/null 省军级/null 省农业厅/null 省刑薄敛/null 省力/null 省劲/null 省劲儿/null 省区/null 省却/null 省去/null 省县/null 省吃俭用/null 省垣/null 省城/null 省墓/null 省外/null 省委/null 省委书记/null 省委员会/null 省字/null 省字号/null 省察/null 省小钱/null 省局/null 省属/null 省工/null 省市/null 省市区/null 省府/null 省得/null 省心/null 省思/null 省悟/null 省掉/null 省政府/null 省文明办/null 省料/null 省方观俗/null 省方观民/null 省时/null 省欲去箸/null 省治/null 省港/null 省点/null 省烦从简/null 省用/null 省用足财/null 省电/null 省界/null 省略/null 省略句/null 省略号/null 省略符号/null 省直/null 省直机关/null 省直管县/null 省科委/null 省称/null 省立/null 省籍/null 省级/null 省纪/null 省纪委/null 省行/null 省视/null 省财税厅/null 省辖/null 省辖市/null 省过/null 省道/null 省部级/null 省钱/null 省着点/null 省长/null 眄眄/null 眄睐/null 眄睨/null 眄视/null 眇小/null 眇眇/null 眈眈/null 眉南面北/null 眉头/null 眉头一皱计上心来/null 眉宇/null 眉尖/null 眉山/null 眉峰/null 眉开眼笑/null 眉形/null 眉心/null 眉心轮/null 眉批/null 眉月/null 眉来眼去/null 眉来语去/null 眉梢/null 眉棱/null 眉棱骨/null 眉欢眼笑/null 眉毛/null 眉毛胡子一把抓/null 眉毛钳/null 眉注/null 眉清目秀/null 眉目/null 眉目不清/null 眉目传情/null 眉目如画/null 眉眼/null 眉眼传情/null 眉眼高低/null 眉睫/null 眉睫之内/null 眉睫之利/null 眉睫之祸/null 眉端/null 眉笔/null 眉肌/null 眉花眼笑/null 眉间/null 眉间轮/null 眉题/null 眉额/null 眉飞/null 眉飞色舞/null 眉高眼低/null 眉鸟/null 眉黛/null 看一下/null 看一看/null 看上/null 看上去/null 看上去是/null 看下/null 看不/null 看不上眼/null 看不中/null 看不习惯/null 看不出/null 看不惯/null 看不懂/null 看不清/null 看不见/null 看不起/null 看不过/null 看不过去/null 看不顺眼/null 看中/null 看书/null 看了/null 看些/null 看人/null 看人眉睫/null 看人行事/null 看他/null 看似/null 看低/null 看作/null 看倌/null 看做/null 看准/null 看出/null 看到/null 看医/null 看厌/null 看去/null 看台/null 看后/null 看呆/null 看图/null 看在/null 看在眼里/null 看头/null 看好/null 看孩子/null 看守/null 看守人/null 看守内客/null 看守内阁/null 看守所/null 看守者/null 看完/null 看官/null 看定/null 看客/null 看家/null 看家戏/null 看家狗/null 看开/null 看待/null 看得/null 看得中/null 看得出/null 看得惯/null 看得清/null 看得见/null 看得起/null 看得过/null 看得过儿/null 看得远/null 看您/null 看情况/null 看惯/null 看懂/null 看戏/null 看成/null 看扁/null 看手/null 看承/null 看护/null 看护人/null 看报/null 看押/null 看文巨眼/null 看文老眼/null 看景生情/null 看有/null 看望/null 看朱成碧/null 看来/null 看来好像/null 看来好象/null 看样/null 看样子/null 看法/null 看涨/null 看清/null 看漏/null 看热闹/null 看球/null 看用/null 看电影/null 看电视/null 看病/null 看的/null 看相/null 看看/null 看着/null 看着不管/null 看着锅里/null 看破/null 看破红尘/null 看穿/null 看管/null 看管者/null 看者/null 看花/null 看花眼/null 看菜吃饭/null 看菜吃饭量体裁衣/null 看著/null 看表/null 看见/null 看财奴/null 看起来/null 看跌/null 看车/null 看轻/null 看过/null 看这/null 看透/null 看都不看/null 看重/null 看错/null 看门/null 看门人/null 看门犬/null 看门狗/null 看青/null 看顾/null 看风/null 看风使帆/null 看风使舵/null 看风使船/null 看风行事/null 看风转舵/null 看风驶篷/null 看鸟人/null 看齐/null 眍䁖/null 真丝/null 真个/null 真主/null 真主党/null 真义/null 真书/null 真事/null 真亮/null 真人/null 真人真事/null 真人秀/null 真传/null 真伪/null 真伪莫辨/null 真值表/null 真假/null 真假难辨/null 真傻/null 真凭实据/null 真凶实犯/null 真刀实枪/null 真刀真枪/null 真分数/null 真切/null 真功夫/null 真名实姓/null 真后生动物/null 真否定句/null 真命/null 真品/null 真善美/null 真坏/null 真声/null 真声最高音/null 真奇怪/null 真好/很好 真烂/真差,真硕 真如/null 真子集/null 真实/null 真实性/null 真实感/null 真容/null 真巧/null 真彩色/null 真影/null 真心/null 真心实意/null 真心实意地/null 真心真意/null 真心诚意/null 真心话/null 真心话大冒险/null 真性/null 真怪/null 真情/null 真情实意/null 真情实感/null 真想/null 真意/null 真才/null 真才实学/null 真抓实干/null 真挚/null 真数/null 真是/null 真是的/null 真有你的/null 真果/null 真枪/null 真枪实弹/null 真核/null 真核细胞/null 真格/null 真格的/null 真棒/null 真正/null 真正的社会主义/null 真武/null 真没想到/null 真溶液/null 真爱/null 真版/null 真牛/null 真率/null 真珠/null 真理/null 真理报/null 真理论/null 真理部/null 真番郡/null 真皮/null 真皮层/null 真相/null 真相大白/null 真相毕露/null 真真/null 真真切切/null 真知/null 真知灼见/null 真确/null 真神/null 真空/null 真空泵/null 真空管/null 真空计/null 真纳/null 真经/null 真肯定句/null 真腊/null 真菌/null 真菌纲/null 真言/null 真言宗/null 真言真语/null 真诚/null 真话/null 真诠/null 真谛/null 真象/null 真赃实犯/null 真身/null 真迹/null 真道/null 真释/null 真金/null 真金不怕火来烧/null 真金不怕火炼/null 真金不怕火烧/null 真金烈火/null 真际/null 真面目/null 真髓/null 真鲷/null 眠双卧雪/null 眠思梦想/null 眠曲/null 眠花卧柳/null 眠花宿柳/null 眠蚕/null 眢井/null 眦睚/null 眨动/null 眨巴/null 眨眼/null 眨眼睛/null 眩丽/null 眩乱/null 眩人/null 眩光/null 眩惑/null 眩晕/null 眩目/null 眩目震耳/null 眩眼/null 眩耀/null 眯盹儿/null 眯眯/null 眯眼/null 眯着/null 眯缝/null 眯过/null 眯逢/null 眳睛/null 眵目糊/null 眷区/null 眷属/null 眷念/null 眷怀/null 眷恋/null 眷本/null 眷注/null 眷爱/null 眷眷/null 眷眷之心/null 眷顾/null 眸子/null 眺望/null 眺远/null 眼下/null 眼不见为净/null 眼不见心不烦/null 眼不转睛/null 眼中/null 眼中刺/null 眼中疔肉中刺/null 眼中钉/null 眼中钉肉中刺/null 眼亮/null 眼低/null 眼儿/null 眼光/null 眼光敏锐/null 眼光浅/null 眼光短/null 眼光短浅/null 眼光远大/null 眼内无珠/null 眼冒金星/null 眼前/null 眼前利益/null 眼力/null 眼力好/null 眼动/null 眼动技术/null 眼动记录/null 眼压/null 眼去眉来/null 眼圈/null 眼圈红了/null 眼孔/null 眼尖/null 眼尾/null 眼屎/null 眼岔/null 眼巴巴/null 眼帘/null 眼干症/null 眼底/null 眼底下/null 眼形/null 眼影/null 眼快/null 眼成穿/null 眼房/null 眼房水/null 眼拙/null 眼旁/null 眼时/null 眼明/null 眼明手快/null 眼明手捷/null 眼晕/null 眼柄/null 眼格/null 眼梢/null 眼水/null 眼泡/null 眼波/null 眼泪/null 眼泪横流/null 眼泪洗面/null 眼液/null 眼点/null 眼热/null 眼熟/null 眼犄角儿/null 眼状物/null 眼珠/null 眼珠儿/null 眼珠子/null 眼球/null 眼生/null 眼电图/null 眼界/null 眼疲劳/null 眼疾/null 眼疾手快/null 眼病/null 眼白/null 眼皮/null 眼皮哭肿/null 眼皮子/null 眼皮子浅/null 眼目/null 眼眉/null 眼看/null 眼看着/null 眼眵/null 眼眶/null 眼眸/null 眼睁睁/null 眼睑/null 眼睛/null 眼睛尖/null 眼睫毛/null 眼瞅/null 眼瞎/null 眼瞎耳聋/null 眼瞓/null 眼神/null 眼神不好/null 眼神不济/null 眼福/null 眼离/null 眼科/null 眼科医生/null 眼科学/null 眼空四海/null 眼空无物/null 眼穿肠断/null 眼窝/null 眼窝上/null 眼笑/null 眼红/null 眼线/null 眼线液/null 眼线笔/null 眼线膏/null 眼网膜/null 眼罩/null 眼色/null 眼色素层黑色素瘤/null 眼花/null 眼花撩乱/null 眼花潦乱/null 眼花缭乱/null 眼花耳热/null 眼花雀乱/null 眼药/null 眼药水/null 眼虫/null 眼虫藻/null 眼袋/null 眼见/null 眼见为实/null 眼见得/null 眼观/null 眼观六路耳听八方/null 眼观四处耳听八方/null 眼角/null 眼角膜/null 眼距宽/null 眼跳/null 眼跳动/null 眼过劳/null 眼部/null 眼里/null 眼里容不得沙子/null 眼镜/null 眼镜堡/null 眼镜片/null 眼镜腿/null 眼镜蛇/null 眼霜/null 眼露杀气/null 眼风/null 眼馋/null 眼馋肚饱/null 眼高手低/null 着三不着两/null 着了魔/null 着于/null 着使/null 着儿/null 着凉/null 着力/null 着办/null 着劲儿/null 着呢/null 着地/null 着墨/null 着处/null 着实/null 着帆/null 着床/null 着忙/null 着急/null 着恼/null 着想/null 着意/null 着慌/null 着手/null 着手做/null 着手成春/null 着数/null 着棋/null 着法/null 着火/null 着火了/null 着火点/null 着然/null 着看/null 着眼/null 着眼于/null 着眼点/null 着着失败/null 着睡/null 着笔/null 着紧/null 着脸/null 着色/null 着色于/null 着色剂/null 着花/null 着落/null 着衣/null 着装/null 着谈/null 着边/null 着边儿/null 着迷/null 着重/null 着重于/null 着重号/null 着重指/null 着重点/null 着陆/null 着陆器/null 着陆场/null 着陆点/null 着魔/null 睁一只眼闭一只眼/null 睁一眼闭一眼/null 睁只眼闭只眼/null 睁大/null 睁大眼睛/null 睁开/null 睁开眼睛/null 睁目/null 睁眼/null 睁眼瞎子/null 睁着/null 睁睁/null 睁视/null 睁起/null 睃巡/null 睑腺炎/null 睚眦/null 睚眦之嫌/null 睚眦之怨/null 睚眦之私/null 睚眦之隙/null 睚眦必报/null 睛和/null 睡一觉/null 睡下/null 睡不著/null 睡乡/null 睡了/null 睡像/null 睡前/null 睡午觉/null 睡卧不宁/null 睡卧不安/null 睡去/null 睡回笼觉/null 睡在/null 睡好/null 睡帽/null 睡床/null 睡得/null 睡态/null 睡思/null 睡意/null 睡意正浓/null 睡懒觉/null 睡房/null 睡服/null 睡梦/null 睡椅/null 睡游病/null 睡熟/null 睡狮/null 睡病虫/null 睡相/null 睡眠/null 睡眠不足/null 睡眠中/null 睡眠失调/null 睡眠疗法/null 睡眠症/null 睡眠者/null 睡眠虫/null 睡眼/null 睡眼惺忪/null 睡着/null 睡着了/null 睡睡/null 睡神/null 睡美人/null 睡者/null 睡莲/null 睡著/null 睡衣/null 睡衣裤/null 睡袋/null 睡袍/null 睡裙/null 睡裤/null 睡觉/null 睡起/null 睡足/null 睡过/null 睡过头/null 睡醒/null 睡魔/null 睡鼠/null 睢宁/null 睢阳/null 睢阳区/null 睢鸠/null 督促/null 督促检查/null 督促者/null 督军/null 督办/null 督励/null 督学/null 督察/null 督察大队/null 督察小组/null 督察长/null 督导/null 督导员/null 督工/null 督师/null 督府/null 督建/null 督战/null 督抚/null 督标/null 督责/null 督龟/null 睥睨/null 睥睨物表/null 睦亲/null 睦相/null 睦谊/null 睦邻/null 睦邻政策/null 睨视/null 睫毛/null 睫毛油/null 睫毛膏/null 睫状/null 睫状体/null 睹微知著/null 睹景伤情/null 睹物伤情/null 睹物兴悲/null 睹物兴情/null 睹物怀人/null 睹物思人/null 睽异/null 睽情度理/null 睽睽/null 睽违/null 睽隔/null 睾丸/null 睾丸激素/null 睾丸炎/null 睾丸甾酮/null 睾丸素/null 睾丸酮/null 睾甾酮/null 睾酮/null 睿智/null 睿达/null 瞄准/null 瞄准仪/null 瞄准具/null 瞄准器/null 瞄准洞/null 瞄出/null 瞄着/null 瞅着/null 瞅睬/null 瞅著/null 瞅见/null 瞈蒙/null 瞋目/null 瞌睡/null 瞎了/null 瞎吹/null 瞎奶/null 瞎子/null 瞎子摸象/null 瞎子摸鱼/null 瞎弄/null 瞎忙/null 瞎扯/null 瞎扯淡/null 瞎扯蛋/null 瞎抓/null 瞎指挥/null 瞎掰/null 瞎搞/null 瞎炮/null 瞎猜/null 瞎眼/null 瞎碰/null 瞎编/null 瞎编乱造/null 瞎聊/null 瞎自夸/null 瞎诌/null 瞎话/null 瞎说/null 瞎调/null 瞎谈/null 瞎转/null 瞎逛/null 瞎闯/null 瞎闹/null 瞑想/null 瞑目/null 瞑眩/null 瞒上不瞒下/null 瞒上欺下/null 瞒人/null 瞒哄/null 瞒天席地/null 瞒天昧地/null 瞒天过海/null 瞒心昧己/null 瞒报/null 瞒混/null 瞒着/null 瞒神吓鬼/null 瞒神唬鬼/null 瞒著/null 瞒过/null 瞒骗/null 瞓觉/null 瞟一眼/null 瞟见/null 瞠呼其后/null 瞠目/null 瞠目结舌/null 瞠目而视/null 瞤息/null 瞥然/null 瞥见/null 瞥视/null 瞧不起/null 瞧人/null 瞧你/null 瞧出/null 瞧得起/null 瞧着/null 瞧着办/null 瞧着锅里/null 瞧瞧/null 瞧见/null 瞧这/null 瞧香的/null 瞩望/null 瞩目/null 瞪了/null 瞪大/null 瞪头转向/null 瞪目凝视/null 瞪眼/null 瞪着/null 瞪羚/null 瞪著/null 瞪著眼/null 瞪视/null 瞬发中子/null 瞬发辐射/null 瞬息/null 瞬息万变/null 瞬息之间/null 瞬息千变/null 瞬时/null 瞬时计/null 瞬时辐射/null 瞬时速度/null 瞬膜/null 瞬间/null 瞬间即逝/null 瞬间转移/null 瞬霎/null 瞭哨/null 瞭望/null 瞭望台/null 瞭望哨/null 瞰临/null 瞰制/null 瞰图/null 瞰望/null 瞳人/null 瞳仁/null 瞳孔/null 瞻仰/null 瞻养/null 瞻前忽后/null 瞻前顾后/null 瞻天恋阙/null 瞻念/null 瞻拜/null 瞻望/null 瞻礼/null 瞻顾/null 瞽言妄举/null 瞽阇/null 瞿塘峡/null 瞿昙/null 瞿秋白/null 矍烁/null 矍矍/null 矍铄/null 矗立/null 矛刺/null 矛和盾/null 矛头/null 矛头指向/null 矛尖/null 矛尖状/null 矛柄/null 矛盾/null 矛盾加剧/null 矛盾律/null 矛盾激化/null 矛盾的普遍性/null 矛盾的特殊性/null 矛盾相向/null 矛盾规律/null 矛盾论/null 矛盾转化/null 矛隼/null 矜功不立/null 矜功伐善/null 矜功恃宠/null 矜功自伐/null 矜功负气/null 矜功负胜/null 矜名妒能/null 矜名嫉能/null 矜夸/null 矜奇立异/null 矜寡孤独/null 矜己任智/null 矜己自饰/null 矜才使气/null 矜持/null 矜智负能/null 矜矜业业/null 矜纠收缭/null 矜能负才/null 矜贫恤独/null 矜贫救厄/null 矜贵/null 矜重/null 矢下如雨/null 矢不虚发/null 矢口/null 矢口否认/null 矢口抵赖/null 矢在/null 矢在弦上/null 矢如雨集/null 矢尽兵穷/null 矢志/null 矢志不屈/null 矢志不渝/null 矢志捐躯/null 矢无虚发/null 矢枪/null 矢死不二/null 矢的/null 矢石/null 矢石之间/null 矢石之难/null 矢言/null 矢车菊/null 矢量/null 知一不知十/null 知一而不知二/null 知不/null 知不诈愚/null 知之不辱/null 知之为知之/null 知之甚多/null 知之甚少/null 知书/null 知书知礼/null 知书识礼/null 知书达理/null 知书达礼/null 知了/null 知事/null 知交/null 知人/null 知人下士/null 知人之明/null 知人之术/null 知人则哲/null 知人善任/null 知人善察/null 知人待士/null 知人料事/null 知人知面不知心/null 知人论世/null 知今博古/null 知会/null 知其一不知其二/null 知其一不达其二/null 知其一未睹其二/null 知冷知热/null 知单/null 知县/null 知名/null 知名人士/null 知名度/null 知名当世/null 知命/null 知命之年/null 知命乐天/null 知命安身/null 知地知天/null 知子莫如父/null 知安忘危/null 知客/null 知宾/null 知小谋大/null 知尽能索/null 知州/null 知己/null 知己之遇/null 知己知彼/null 知已/null 知底/null 知府/null 知彼知己/null 知往鉴今/null 知微知彰/null 知心/null 知心人/null 知心朋友/null 知心着意/null 知心话/null 知必言言必尽/null 知性/null 知恩/null 知恩不报/null 知恩报德/null 知恩报恩/null 知悉/null 知悭识俭/null 知情/null 知情不举/null 知情不报/null 知情人/null 知情同意/null 知情者/null 知情认趣/null 知情识趣/null 知情达理/null 知数/null 知无不为/null 知无不尽/null 知无不言/null 知无不言言无不听/null 知无不言言无不尽/null 知时识务/null 知易行难/null 知晓/null 知更鸟/null 知机识变/null 知机识窍/null 知来藏往/null 知根知底/null 知止不辱知足不殆/null 知母/null 知水仁山/null 知法/null 知法犯法/null 知照/null 知畿其神/null 知疼着热/null 知白守黑/null 知礼/null 知章知微/null 知罪/null 知羞识廉/null 知者/null 知而不言/null 知耻/null 知耻近乎勇/null 知觉/null 知觉力/null 知觉外/null 知觉解体/null 知识/null 知识产权/null 知识产权法/null 知识分子/null 知识化/null 知识宝库/null 知识密集/null 知识就是力量/null 知识工程师/null 知识库/null 知识性/null 知识更新/null 知识界/null 知识竞赛/null 知识结构/null 知识论/null 知识越多越反动/null 知识青年/null 知识面/null 知趣/null 知足/null 知足不辱知止不殆/null 知足常乐/null 知足常足/null 知足无求/null 知足知止/null 知足者常乐/null 知过/null 知过必改/null 知过改过/null 知过能改/null 知返/null 知遇/null 知遇之恩/null 知遇之荣/null 知道/null 知错必改/null 知难而上/null 知难而行/null 知难而进/null 知难而退/null 知难行易/null 知雄守雌/null 知青/null 知面不知心/null 知面伯明/null 知面伯鉴/null 知音/null 知音识曲/null 知音识趣/null 知音谙吕/null 知高识低/null 矩尺/null 矩尺座/null 矩形/null 矩步方行/null 矩阵/null 矫世励俗/null 矫世变俗/null 矫健/null 矫健敏捷/null 矫味剂/null 矫宠/null 矫形/null 矫形医生/null 矫形外科/null 矫形牙套/null 矫情/null 矫情干誉/null 矫情自饰/null 矫情针物/null 矫情饰行/null 矫情饰诈/null 矫情饰貌/null 矫捷/null 矫揉做作/null 矫揉造作/null 矫枉过中/null 矫枉过正/null 矫枉过直/null 矫柔/null 矫正/null 矫正透镜/null 矫治/null 矫激奇诡/null 矫直/null 矫矜/null 矫矫/null 矫若惊龙/null 矫言伪行/null 矫诏/null 矫邪归正/null 矫顽性/null 矫饰/null 矫饰伪行/null 矫饰者/null 矬子/null 短上衣/null 短不了/null 短中取长/null 短中抽长/null 短了/null 短会/null 短传/null 短促/null 短信/null 短债/null 短兵接战/null 短兵相接/null 短内裤/null 短刀/null 短剑/null 短剧/null 短卷发/null 短发/null 短句/null 短号/null 短叹长吁/null 短吨/null 短吻/null 短命/null 短垣自逾/null 短处/null 短外套/null 短大衣/null 短寿促命/null 短小/null 短小精悍/null 短少/null 短尾巴/null 短尾猴/null 短尾猿/null 短尾矮袋鼠/null 短局/null 短工/null 短帷幔/null 短平快/null 短打/null 短打扮/null 短指/null 短收/null 短文/null 短斤少两/null 短日照植物/null 短时储存/null 短时语音记忆/null 短时间/null 短暂/null 短期/null 短期内/null 短期培训/null 短期投资/null 短期融资/null 短期行为/null 短期计划/null 短杖/null 短枪/null 短柄/null 短桩/null 短梗飘萍/null 短梗飘蓬/null 短棍/null 短欠/null 短款/null 短歌/null 短毛/null 短气/null 短波/null 短波天线/null 短波长/null 短浅/null 短烟斗/null 短片/null 短白衣/null 短的/null 短短/null 短短几天/null 短短的/null 短矮/null 短码/null 短程/null 短程线/null 短笛/null 短简/null 短篇/null 短篇小说/null 短粗/null 短纤维/null 短线/null 短线产品/null 短统靴/null 短绠汲深/null 短绳/null 短缺/null 短缺商品/null 短羹吹齑/null 短脚/null 短腮/null 短腿/null 短腿猎犬/null 短至/null 短衣/null 短衣帮/null 短衫/null 短袖/null 短袜/null 短装/null 短裙/null 短裤/null 短褐/null 短褐不全/null 短褐不完/null 短见/null 短视/null 短角牛/null 短训班/null 短讯/null 短论/null 短评/null 短诗/null 短语/null 短语录/null 短说/null 短跑/null 短距离/null 短距起落飞机/null 短路/null 短途/null 短途运输/null 短锯/null 短长/null 短靴/null 短音/null 短音符/null 短音阶/null 短骨/null 矮丛/null 矮丛林/null 矮个/null 矮个儿/null 矮个子/null 矮人/null 矮凳/null 矮化/null 矮半截/null 矮呆病/null 矮地茶/null 矮墙/null 矮墩/null 矮墩墩/null 矮壮素/null 矮子/null 矮子看场/null 矮子看戏/null 矮子观场/null 矮子里拔将军/null 矮小/null 矮小精悍/null 矮屋/null 矮床/null 矮房/null 矮星/null 矮杆品种/null 矮杨梅/null 矮松/null 矮林/null 矮树/null 矮瓜/null 矮的/null 矮短/null 矮矮/null 矮秆作物/null 矮种/null 矮糠/null 矮胖/null 矮脚白花蛇利草/null 矮脚罗伞/null 矮脚苦蒿/null 矮茎朱砂根/null 矮行星/null 矮鹿/null 矮黑人/null 石一般/null 石作/null 石像/null 石冈/null 石冈乡/null 石决明/null 石凳/null 石刁柏/null 石刑/null 石制/null 石刻/null 石勒/null 石化/null 石化厂/null 石匠/null 石匠痨/null 石南属/null 石南树/null 石南花/null 石印/null 石印品/null 石原慎太郎/null 石台/null 石咀山/null 石咀山区/null 石咀山市/null 石嘴山/null 石嘴山区/null 石器/null 石器时代/null 石场/null 石坎/null 石坑/null 石块/null 石城/null 石基/null 石堆/null 石塔/null 石墙/null 石墨/null 石墨气冷堆/null 石壁/null 石太铁路/null 石头/null 石头、剪子、布/null 石头子儿/null 石头火锅/null 石女/null 石子/null 石子儿/null 石室金匮/null 石家庄/null 石家庄地区/null 石屎/null 石屎森林/null 石屏/null 石山/null 石岗/null 石岛/null 石峰区/null 石工/null 石库门/null 石庭/null 石弩/null 石径/null 石德铁路/null 石心/null 石心木肠/null 石投大海/null 石担/null 石拐区/null 石拱/null 石敢当/null 石斑鱼/null 石料/null 石斛/null 石斛夜光丸/null 石斧/null 石方/null 石景/null 石景山/null 石末沉着病/null 石末肺/null 石材/null 石村/null 石松/null 石板/null 石板样/null 石板瓦/null 石板路/null 石林/null 石林县/null 石林风景区/null 石枯松老/null 石柱/null 石柱县/null 石栏/null 石栗/null 石桥/null 石梯/null 石棉/null 石棉水泥瓦/null 石棉瓦/null 石棉纤维/null 石棺/null 石楠/null 石楼/null 石榴/null 石榴子/null 石榴树/null 石榴石/null 石沉大海/null 石河子/null 石油/null 石油勘探/null 石油化学/null 石油化工/null 石油商/null 石油地理/null 石油工业/null 石油市场/null 石油换食品项目/null 石油气/null 石油精/null 石油蜡/null 石油输出国组织/null 石油醚/null 石泉/null 石洞/null 石涛/null 石渠/null 石渠阁/null 石渠阁议/null 石渣/null 石火电光/null 石灰/null 石灰乳/null 石灰化/null 石灰华/null 石灰岩/null 石灰水/null 石灰石/null 石灰窑/null 石灰质/null 石炭/null 石炭井/null 石炭井区/null 石炭系/null 石炭纪/null 石炭酸/null 石烂/null 石烂海枯/null 石煤/null 石燕/null 石片/null 石版/null 石版家/null 石版画/null 石状/null 石狮/null 石狮子/null 石玉昆/null 石田芳夫/null 石盐/null 石砌/null 石砬子/null 石破天惊/null 石砾/null 石硫合剂/null 石碇/null 石碇乡/null 石碑/null 石碓/null 石碣/null 石碴/null 石磙/null 石磨/null 石穿/null 石窑/null 石窟/null 石竹/null 石竹属/null 石竹目/null 石竹科/null 石笋/null 石笔/null 石粉/null 石级/null 石绵/null 石绿/null 石缝/null 石罅/null 石羊/null 石脑油/null 石腊/null 石膏/null 石膏像/null 石膏墙板/null 石膏粉/null 石膏绷带/null 石膏质/null 石臼/null 石舫/null 石花胶/null 石花菜/null 石苔/null 石英/null 石英卤素灯/null 石英岩/null 石英手表/null 石英脉/null 石英钟/null 石菖蒲/null 石蒜/null 石蕊/null 石蕊试纸/null 石虎/null 石蜡/null 石质/null 石酸/null 石钟乳/null 石铺/null 石锁/null 石门/null 石门乡/null 石阡/null 石阶/null 石雕/null 石雷/null 石青/null 石首/null 石首鱼/null 石鲮鱼/null 石鼓/null 石鼓区/null 石鼓文/null 石龙/null 石龙区/null 石龙子/null 矸子/null 矸石/null 矻矻/null 矽土/null 矽晶片/null 矽末病/null 矽片/null 矽石/null 矽肺/null 矽肺病/null 矽胶/null 矽藻/null 矽谷/null 矽酸/null 矽酸盐/null 矽钢/null 矽钢片/null 矽铝层/null 矽镁层/null 矾土/null 矾石/null 矿上/null 矿业/null 矿业经济/null 矿主/null 矿井/null 矿井口/null 矿产/null 矿产品/null 矿产综合利用/null 矿产资源/null 矿体/null 矿内/null 矿务/null 矿务局/null 矿区/null 矿厂/null 矿场/null 矿坑/null 矿尘/null 矿局/null 矿层/null 矿山/null 矿工/null 矿带/null 矿床/null 矿房/null 矿柱/null 矿棉/null 矿水/null 矿油精/null 矿泉/null 矿泉水/null 矿泥/null 矿洞/null 矿浆/null 矿渣/null 矿渣堆/null 矿渣棉/null 矿渣水泥/null 矿灯/null 矿物/null 矿物学/null 矿物油/null 矿物燃料/null 矿物纤维/null 矿物质/null 矿盐/null 矿石/null 矿石收音机/null 矿石机/null 矿砂/null 矿种/null 矿穴/null 矿类/null 矿粉/null 矿脂/null 矿脉/null 矿苗/null 矿藏/null 矿质/null 矿车/null 矿部/null 矿长/null 矿难/null 砀山/null 码位/null 码元/null 码分多址/null 码头/null 码子/null 码字/null 码尺/null 码放/null 码数/null 码线/null 码表/null 码长城/null 砂仁/null 砂器/null 砂土/null 砂型/null 砂堆/null 砂子/null 砂岩/null 砂布/null 砂心/null 砂拉越/null 砂样/null 砂模/null 砂浆/null 砂烬/null 砂眼/null 砂石/null 砂砾/null 砂礓/null 砂积矿床/null 砂箱/null 砂糖/null 砂纸/null 砂轮/null 砂金石/null 砂锅/null 砌体/null 砌合/null 砌合法/null 砌块/null 砌基脚/null 砌墙/null 砌层/null 砌成/null 砌末/null 砌石/null 砌砖/null 砌砖工/null 砌词捏控/null 砌路/null 砍下/null 砍价/null 砍伐/null 砍伐者/null 砍伤/null 砍倒/null 砍光/null 砍刀/null 砍到/null 砍去/null 砍坏/null 砍大山/null 砍头/null 砍头疮/null 砍开/null 砍得/null 砍成/null 砍掉/null 砍断/null 砍木/null 砍杀/null 砍林/null 砍柴/null 砍树/null 砍死/null 砍瓜切菜/null 砍痕/null 砑光/null 砒霜/null 研习/null 研京练都/null 研修/null 研修员/null 研修班/null 研光/null 研几探赜/null 研几析理/null 研判/null 研制/null 研制出/null 研制成/null 研制者/null 研制过程/null 研华/null 研发/null 研商对策/null 研定/null 研成/null 研拟/null 研析/null 研桑心计/null 研求/null 研深覃精/null 研碎/null 研磨/null 研磨剂/null 研磨料/null 研磨机/null 研磨材料/null 研磨用/null 研磨盘/null 研磨者/null 研究/琢磨,研讨,钻研 研究中心/null 研究人员/null 研究会/null 研究出/null 研究反应堆/null 研究员/null 研究室/null 研究小组/null 研究工作/null 研究成果/null 研究所/null 研究报告/null 研究机构/null 研究生/null 研究生院/null 研究者/null 研究资料/null 研究院/null 研究领域/null 研粉/null 研精苦思/null 研精覃奥/null 研精覃思/null 研精覃虑/null 研精钩深/null 研精铸史/null 研精静虑/null 研考/null 研讨/研究,钻研,琢磨 研讨会/null 研读/null 研钵/null 砖匠/null 砖厂/null 砖块/null 砖坯/null 砖墙/null 砖壁/null 砖头/null 砖工/null 砖房/null 砖模/null 砖瓦/null 砖石/null 砖石工/null 砖窑/null 砖窑场/null 砖窖/null 砖红土/null 砖色/null 砖茶/null 砖雕/null 砖面/null 砗磲/null 砘子/null 砚兄/null 砚兄砚弟/null 砚友/null 砚台/null 砚室/null 砚山/null 砚席/null 砚弟/null 砚水壶儿/null 砚池/null 砚滴/null 砚瓦/null 砚田/null 砚田之食/null 砚盒/null 砚石/null 砚耕/null 砝码/null 砟子/null 砢碜/null 砣子/null 砥兵砺伍/null 砥名励节/null 砥平绳直/null 砥柱/null 砥柱中流/null 砥石/null 砥砺/null 砥砺名号/null 砥砺名节/null 砥砺名行/null 砥砺廉隅/null 砥砺清节/null 砥砺风节/null 砥节奉公/null 砥节守公/null 砥节砺行/null 砥行磨名/null 砥行立名/null 砧台/null 砧子/null 砧木/null 砧板/null 砧骨/null 砬子/null 砭灸/null 砭灸术/null 砭石/null 砭针/null 砭骨/null 砰击声/null 砰地/null 砰地一声/null 砰声/null 砰然/null 砰然声/null 砰砰/null 破业失产/null 破了/null 破五/null 破亡/null 破产/null 破产法/null 破产者/null 破伤风/null 破体字/null 破例/null 破关/null 破关斩将/null 破冰/null 破冰型艏/null 破冰舰/null 破冰船/null 破击/null 破击战/null 破口/null 破口大骂/null 破句/null 破哓/null 破四/null 破四旧/null 破国亡宗/null 破土/null 破土典礼/null 破土动工/null 破坏/null 破坏分子/null 破坏力/null 破坏性/null 破坏无遗/null 破坏活动/null 破坏者/null 破城/null 破壁/null 破壁飞去/null 破壳/null 破处/null 破天荒/null 破家/null 破家为国/null 破家危国/null 破家散业/null 破家鬻子/null 破密/null 破局/null 破布/null 破帽/null 破庙/null 破开/null 破成/null 破戒/null 破折/null 破折号/null 破损/null 破掉/null 破敝/null 破旧/null 破旧不堪/null 破旧立新/null 破晓/null 破格/null 破案/null 破案率/null 破洞/null 破浪/null 破涕/null 破涕为笑/null 破溃/null 破漏/null 破灭/null 破烂/null 破烂不堪/null 破烂货/null 破片/null 破琴绝弦/null 破瓦寒窑/null 破瓦颓垣/null 破甑生尘/null 破甲弹/null 破的/null 破皮/null 破相/null 破破/null 破破烂烂/null 破碎/null 破碎支离/null 破碎片/null 破碗破摔/null 破竹之势/null 破竹建瓴/null 破约/null 破纪录/null 破绽/null 破绽百出/null 破缺/null 破罐破摔/null 破胆/null 破胆丧魂/null 破胆寒心/null 破脸/null 破船/null 破获/null 破落/null 破落户/null 破蛹/null 破衣/null 破衣服/null 破裂/null 破裂摩擦音/null 破裂音/null 破规为圜/null 破觚为圆/null 破觚为圜/null 破解/null 破计/null 破记录/null 破译/null 破读/null 破谜儿/null 破财/null 破财免灾/null 破败/null 破败不堪/null 破费/null 破身/null 破车/null 破釜沉舟/null 破釜沉船/null 破钞/null 破镜/null 破镜分钗/null 破镜重合/null 破镜重圆/null 破镜重归/null 破门/null 破门而入/null 破阵/null 破除/null 破除迷信/null 破鞋/null 破音字/null 破题/null 破颜/null 砷中毒/null 砷化氢/null 砷化物/null 砷酸盐/null 砷黄铁矿/null 砸下/null 砸了/null 砸伤/null 砸在/null 砸坏/null 砸夯/null 砸开/null 砸抢/null 砸死/null 砸毁/null 砸烂/null 砸破/null 砸碎/null 砸舌/null 砸锅/null 砸锅卖铁/null 砸饭碗/null 砺兵秣马/null 砺山带河/null 砺戈秣马/null 砻糠/null 砾层/null 砾岩/null 砾石/null 硅化木/null 硅土/null 硅晶片/null 硅橡胶/null 硅沙/null 硅油/null 硅灰石/null 硅片/null 硅石/null 硅砖/null 硅肺/null 硅肺病/null 硅胶/null 硅藻/null 硅藻土/null 硅藻门/null 硅质/null 硅质岩/null 硅酐/null 硅酸/null 硅酸氟铝/null 硅酸盐/null 硅酸盐工业/null 硅酸盐水泥/null 硅酸钠/null 硅酸铅/null 硅钢/null 硅钢片/null 硅铁/null 硅铝质/null 硇砂/null 硌牙/null 硌破/null 硐室/null 硕丽/null 硕士/null 硕士学位/null 硕士生/null 硕士研究生/null 硕大/null 硕大无朋/null 硕大无比/null 硕果/null 硕果仅存/null 硕果累累/null 硗确/null 硗薄/null 硙硙/null 硚口/null 硚口区/null 硚头/null 硝化/null 硝化作用/null 硝化甘油/null 硝基/null 硝基苯/null 硝氮/null 硝烟/null 硝烟弥漫/null 硝烟弹雨/null 硝烟滚滚/null 硝盐/null 硝石/null 硝碱/null 硝磺/null 硝胺/null 硝酸/null 硝酸甘油/null 硝酸盐/null 硝酸钙/null 硝酸钠/null 硝酸钾/null 硝酸铵/null 硝酸银/null 硝镪水/null 硫代硫酸钠/null 硫分/null 硫化/null 硫化橡胶/null 硫化氢/null 硫化汞/null 硫化物/null 硫化碱/null 硫化碳/null 硫化钠/null 硫化铁/null 硫化铅/null 硫化锌/null 硫华/null 硫氰酸/null 硫氰酸盐/null 硫氰酸酶/null 硫球/null 硫磷铵/null 硫磺/null 硫磺般/null 硫磺色/null 硫粉/null 硫胺素/null 硫苦/null 硫茚/null 硫酸/null 硫酸亚铁/null 硫酸亚铁铵/null 硫酸盐/null 硫酸钙/null 硫酸钠/null 硫酸钡/null 硫酸钾/null 硫酸铁/null 硫酸铜/null 硫酸铝/null 硫酸铵/null 硫酸锌/null 硫酸镁/null 硫醇/null 硫铁矿/null 硫黄/null 硬了/null 硬仗/null 硬件/null 硬件平台/null 硬体/null 硬冲/null 硬功夫/null 硬化/null 硬化症/null 硬卡/null 硬卧/null 硬取/null 硬块/null 硬壳/null 硬壳子/null 硬壳果/null 硬实/null 硬币/null 硬币坯/null 硬币形/null 硬席/null 硬干/null 硬度/null 硬度计/null 硬座/null 硬弓/null 硬性/null 硬性摊派/null 硬性规定/null 硬手/null 硬扯/null 硬拖/null 硬拷贝/null 硬拼/null 硬挣/null 硬挤/null 硬挺/null 硬推/null 硬撅撅/null 硬撑/null 硬是/null 硬朗/null 硬木/null 硬来/null 硬核/null 硬梆梆/null 硬棒/null 硬橡皮/null 硬橡胶/null 硬毛/null 硬气/null 硬水/null 硬汉/null 硬汉子/null 硬派/null 硬煤/null 硬玉/null 硬生生/null 硬的/null 硬皮/null 硬盘/null 硬目标/null 硬直/null 硬着/null 硬着头皮/null 硬着陆/null 硬石膏/null 硬硬/null 硬碟/null 硬碟机/null 硬碰/null 硬碰硬/null 硬磁盘/null 硬笔/null 硬糖/null 硬纸/null 硬纸板/null 硬结/null 硬给/null 硬而/null 硬背/null 硬脂/null 硬脂酸/null 硬脂酸钙/null 硬腭/null 硬花/null 硬要/null 硬记/null 硬语盘空/null 硬说/null 硬调/null 硬质/null 硬质合金/null 硬通货/null 硬逼/null 硬邦邦/null 硬闯/null 硬面/null 硬顶/null 硬顶跑车/null 硬领/null 硬饼/null 硬驱/null 硬骨/null 硬骨头/null 硬骨鱼/null 硭硝/null 确乎/null 确保/null 确信/null 确信无疑/null 确凿/null 确凿不移/null 确切/null 确切性/null 确切无疑/null 确守/null 确定/null 确定不移/null 确定性/null 确定效应/null 确实/null 确实性/null 确山/null 确当/null 确是/null 确有其事/null 确确实实/null 确立/null 确认/null 确证/null 确证者/null 确诊/null 确非易事/null 硷酸/null 硼化物/null 硼玻璃/null 硼砂/null 硼酸/null 硼酸盐/null 硼钢/null 硼铁/null 碇泊/null 碉堡/null 碉楼/null 碌曲/null 碌碌/null 碌碌庸才/null 碌碌庸流/null 碌碌无为/null 碌碌无能/null 碌碌无闻/null 碌碡/null 碍事/null 碍口/null 碍口识羞/null 碍手/null 碍手碍脚/null 碍物/null 碍眼/null 碍胃口/null 碍脚/null 碍难/null 碍难从命/null 碍面子/null 碎了/null 碎催/null 碎冰/null 碎冰船/null 碎嘴子/null 碎块/null 碎块儿/null 碎声/null 碎尸/null 碎屑/null 碎屑岩/null 碎屑沉积物/null 碎布/null 碎布条/null 碎心裂胆/null 碎成/null 碎掉/null 碎料/null 碎末/null 碎杏仁/null 碎步/null 碎步儿/null 碎片/null 碎片性/null 碎片整理/null 碎物/null 碎琼乱玉/null 碎皮/null 碎石/null 碎石堆/null 碎石路/null 碎粉状/null 碎纸/null 碎纸机/null 碎肉/null 碎肉器/null 碎裂/null 碎身粉骨/null 碎钻/null 碎首糜身/null 碎骨粉身/null 碑亭/null 碑刻/null 碑匾/null 碑帖/null 碑座/null 碑座儿/null 碑志/null 碑文/null 碑林/null 碑林区/null 碑珓/null 碑石/null 碑碣/null 碑记/null 碑铭/null 碑阴/null 碑额/null 碓房/null 碗儿/null 碗柜/null 碗橱/null 碗盆/null 碗盘/null 碗碗腔/null 碗碟/null 碗碟橱/null 碗筷/null 碗豆/null 碗边/null 碗里/null 碘中毒/null 碘仿/null 碘化物/null 碘化钠/null 碘化钾/null 碘化银/null 碘片/null 碘酒/null 碘酸/null 碘酸盐/null 碘钨灯/null 碟子/null 碟形/null 碟片/null 碟盆类/null 碧云/null 碧土/null 碧土县/null 碧桃/null 碧欧泉/null 碧水/null 碧水苍天/null 碧油油/null 碧波/null 碧海/null 碧海青天/null 碧潭/null 碧玉/null 碧玺/null 碧瑶/null 碧瓦/null 碧瓦朱甍/null 碧眼/null 碧空/null 碧绿/null 碧绿色/null 碧色/null 碧草/null 碧草如茵/null 碧落/null 碧落黄泉/null 碧蓝/null 碧螺春/null 碧血/null 碧血丹心/null 碰一鼻子灰/null 碰上/null 碰了/null 碰伤/null 碰倒/null 碰击/null 碰击声/null 碰到/null 碰劲儿/null 碰坏/null 碰壁/null 碰声/null 碰头/null 碰头会/null 碰巧/null 碰损/null 碰撞/null 碰撞造山/null 碰擦/null 碰杯/null 碰碰/null 碰碰车/null 碰磁/null 碰磁人/null 碰磁儿/null 碰翻/null 碰著/null 碰见/null 碰触/null 碰车/null 碰过/null 碰运/null 碰钉子/null 碰锁/null 碰面/null 碱化/null 碱叫/null 碱土/null 碱土金属/null 碱地/null 碱场/null 碱基/null 碱基互补配对/null 碱基对/null 碱基配对/null 碱度/null 碱式/null 碱式盐/null 碱性/null 碱性化/null 碱性土/null 碱性尘雾/null 碱性岩/null 碱性蓝/null 碱性金属/null 碱斑/null 碱水/null 碱水湖/null 碱法纸浆/null 碱洗/null 碱液/null 碱熔/null 碱类/null 碱腺/null 碱荒/null 碱试法/null 碱质/null 碱金属/null 碲化物/null 碳减排/null 碳化/null 碳化氢/null 碳化物/null 碳化硅/null 碳化钙/null 碳原子/null 碳棒/null 碳氢化合物/null 碳水/null 碳水化合物/null 碳汇/null 碳焙/null 碳粉/null 碳精/null 碳素/null 碳素钢/null 碳足印/null 碳酐/null 碳酰基/null 碳酰氯/null 碳酸/null 碳酸岩/null 碳酸气/null 碳酸氢钠/null 碳酸氢铵/null 碳酸盐/null 碳酸钙/null 碳酸钠/null 碳酸钾/null 碳酸铵/null 碳酸镁/null 碳钢/null 碳链/null 碳链纤维/null 碳隔离/null 碳黑/null 碴儿/null 碴土/null 碴子/null 碾压/null 碾场/null 碾坊/null 碾子/null 碾子山/null 碾子山区/null 碾平/null 碾槌/null 碾盘/null 碾砣/null 碾碎/null 碾磙子/null 碾磨/null 碾米/null 碾米机/null 碾轧/null 碾过/null 磁介质/null 磁体/null 磁倾角/null 磁偏角/null 磁共振/null 磁共振成像/null 磁力/null 磁力线/null 磁力计/null 磁力锁/null 磁动/null 磁化/null 磁化器/null 磁单极子/null 磁卡/null 磁合金/null 磁器/null 磁场/null 磁场强度/null 磁块/null 磁头/null 磁学/null 磁学家/null 磁导/null 磁导率/null 磁层/null 磁带/null 磁带机/null 磁异常/null 磁心/null 磁性/null 磁性录象/null 磁性录音/null 磁性瓷/null 磁悬浮/null 磁感应/null 磁感应强度/null 磁感线/null 磁控管/null 磁效应/null 磁暴/null 磁束/null 磁条/null 磁极/null 磁棒/null 磁气圈/null 磁泡/null 磁波/null 磁流/null 磁流体/null 磁流体发电/null 磁浮/null 磁片/null 磁珠/null 磁球/null 磁瓶/null 磁电/null 磁电学/null 磁电机/null 磁电管/null 磁疗/null 磁疗器/null 磁盘/null 磁盘片/null 磁盘驱动器/null 磁矩/null 磁石/null 磁碟/null 磁碟机/null 磁管/null 磁粉/null 磁线/null 磁能/null 磁膜/null 磁芯/null 磁质/null 磁路/null 磁轨/null 磁轴/null 磁选/null 磁通/null 磁通量/null 磁道/null 磁针/null 磁钉/null 磁钢/null 磁铁/null 磁铁矿/null 磁鼓/null 磅值/null 磅盘/null 磅礴/null 磅秤/null 磅达/null 磊磊/null 磊磊落落/null 磊磊轶荡/null 磊落/null 磊落不凡/null 磊落不羁/null 磊落大方/null 磋商/null 磋商会/null 磋商者/null 磋跎/null 磐安/null 磐石/null 磐石之安/null 磐石县/null 磕头/null 磕头如捣/null 磕头虫/null 磕巴/null 磕打/null 磕牙/null 磕牙料嘴/null 磕睡/null 磕碰/null 磕碰儿/null 磕磕/null 磕磕巴巴/null 磕磕撞撞/null 磕磕碰碰/null 磕磕绊绊/null 磕膝盖/null 磙子/null 磨不开/null 磨亮/null 磨人/null 磨伤/null 磨光/null 磨光器/null 磨具/null 磨出/null 磨刀/null 磨刀石/null 磨刀霍霍/null 磨制石器/null 磨削/null 磨厉以须/null 磨去/null 磨叨/null 磨叽/null 磨合/null 磨唧/null 磨嘴/null 磨嘴皮/null 磨嘴皮子/null 磨坊/null 磨坊主/null 磨子/null 磨工/null 磨工病/null 磨平/null 磨床/null 磨得开/null 磨快/null 磨性/null 磨成/null 磨成粉/null 磨折/null 磨拳擦掌/null 磨损/null 磨损了/null 磨损性/null 磨损率/null 磨掉/null 磨揉迁革/null 磨擦/null 磨擦声/null 磨料/null 磨机/null 磨杵成针/null 磨枪/null 磨洋工/null 磨灭/null 磨炼/null 磨烦/null 磨片/null 磨牙/null 磨盘/null 磨盾之暇/null 磨石/null 磨石砂砾/null 磨石粗砂岩/null 磨砂/null 磨砂玻璃/null 磨砂膏/null 磨研/null 磨砖对缝/null 磨破/null 磨破口舌/null 磨破嘴皮/null 磨破嘴皮子/null 磨砺/null 磨砺以须/null 磨砻砥砺/null 磨碎/null 磨碎机/null 磨磨蹭蹭/null 磨穿/null 磨穿铁砚/null 磨粉/null 磨粉厂/null 磨粉机/null 磨练/null 磨细/null 磨而不磷/null 磨耗/null 磨舌头/null 磨菇/null 磨蚀/null 磨谷物/null 磨豆腐/null 磨起泡/null 磨蹭/null 磨过/null 磨难/null 磨顶至踵/null 磨齿/null 磬竭/null 磴口/null 磷光/null 磷化/null 磷化氢/null 磷化钙/null 磷火/null 磷灰石/null 磷灰粉/null 磷石/null 磷矿/null 磷矿石/null 磷矿粉/null 磷磷/null 磷肥/null 磷脂/null 磷虾/null 磷酰基磷酸酶/null 磷酸/null 磷酸盐/null 磷酸盐岩/null 磷酸质/null 磷酸钙/null 磷酸钠/null 磷酸铵/null 磷铵/null 磺化/null 磺胺/null 磺胺噻唑/null 磺胺类/null 磺胺脒/null 磺酸/null 礁岛/null 礁岩/null 礁湖/null 礁湖星云/null 礁溪/null 礁溪乡/null 礁石/null 礌石/null 礜石/null 礞石/null 礤床/null 礤床儿/null 示人/null 示以/null 示众/null 示例/null 示例代码/null 示图/null 示复/null 示好/null 示威/null 示威游行/null 示威者/null 示威运动/null 示寂/null 示弱/null 示性/null 示性类/null 示恩/null 示意/null 示意图/null 示意性/null 示数器/null 示法/null 示波器/null 示波图/null 示波管/null 示波镜/null 示爱/null 示物/null 示现/null 示范/null 示范作用/null 示范动作/null 示范区/null 示范户/null 示范表演/null 示警/null 示踪原子/null 礼不亲授/null 礼义/null 礼义廉耻/null 礼之用和为贵/null 礼乐/null 礼乐崩坏/null 礼仪/null 礼俗/null 礼冠/null 礼制/null 礼券/null 礼单/null 礼品/null 礼器/null 礼坏乐崩/null 礼坏乐缺/null 礼堂/null 礼士亲贤/null 礼多人不怪/null 礼奢宁俭/null 礼宾/null 礼宾司/null 礼尚往来/null 礼崩乐坏/null 礼带/null 礼帽/null 礼废乐崩/null 礼成/null 礼拜/null 礼拜一/null 礼拜三/null 礼拜二/null 礼拜五/null 礼拜仪式/null 礼拜六/null 礼拜四/null 礼拜堂/null 礼拜天/null 礼拜室/null 礼拜式/null 礼拜日/null 礼教/null 礼教吃人/null 礼数/null 礼无不答/null 礼服/null 礼服呢/null 礼治/null 礼泉/null 礼法/null 礼炮/null 礼炮号/null 礼物/null 礼盒/null 礼盘/null 礼经/null 礼聘/null 礼节/null 礼节性/null 礼花/null 礼让/null 礼让为国/null 礼记/null 礼貌/null 礼貌待客/null 礼贤/null 礼贤下士/null 礼贤接士/null 礼贤远佞/null 礼赞/null 礼路儿/null 礼轻/null 礼轻人意重/null 礼轻情义重/null 礼轻情意重/null 礼遇/null 礼部/null 礼部尚书/null 礼金/null 礼顺人情/null 礼饼/null 社交/null 社交上/null 社交室/null 社交性/null 社交恐惧症/null 社交才能/null 社交界/null 社交舞/null 社交艺术/null 社交语言/null 社会/null 社会上/null 社会主义/null 社会主义国家共产党和工人党代表会议/null 社会主义国有化/null 社会主义工人国际/null 社会主义所有制/null 社会主义改造/null 社会主义教育运动/null 社会主义现实主义/null 社会主义社会/null 社会主义积累/null 社会主义者/null 社会主义革命/null 社会事业/null 社会保证基金/null 社会保险/null 社会保险基金/null 社会保障/null 社会党/null 社会党国际/null 社会公共利益/null 社会公德/null 社会关怀/null 社会关系/null 社会分工/null 社会制度/null 社会动乱/null 社会化/null 社会危机/null 社会名流/null 社会后备基金/null 社会团体/null 社会基本矛盾/null 社会存在/null 社会学/null 社会实践/null 社会工作/null 社会工作者/null 社会帝国主义/null 社会平等/null 社会形态/null 社会必要劳动/null 社会性/null 社会总产品/null 社会总需求/null 社会意识/null 社会意识形态/null 社会教育/null 社会服务/null 社会正义/null 社会民主/null 社会民主主义/null 社会民主党/null 社会沙文主义/null 社会活动/null 社会环境/null 社会生产两大部类/null 社会科学/null 社会科学院/null 社会等级/null 社会纯收入/null 社会经济/null 社会经济形态/null 社会经济结构/null 社会行动/null 社会语言学/null 社会阶层/null 社会青年/null 社保/null 社保体系/null 社区/null 社区发展/null 社区工作/null 社区意识/null 社友/null 社员/null 社团/null 社团组织/null 社址/null 社头/null 社头乡/null 社学/null 社工/null 社工人/null 社戏/null 社教/null 社旗/null 社民党/null 社火/null 社科/null 社科院/null 社稷/null 社稷为墟/null 社稷之器/null 社稷之役/null 社稷之臣/null 社稷生民/null 社纪/null 社维法/null 社群/null 社论/null 社评/null 社长/null 社队/null 社鼠城狐/null 祀为神/null 祀堂/null 祀奉/null 祀物/null 祀神/null 祁东/null 祁剧/null 祁奚/null 祁奚举午/null 祁奚举子/null 祁奚之举/null 祁奚之荐/null 祁寒暑雨/null 祁寒溽雨/null 祁山/null 祁红/null 祁连/null 祁连山/null 祁连山脉/null 祁门/null 祁阳/null 祆教/null 祆道/null 祈仙台/null 祈佑/null 祈使/null 祈使句/null 祈使法/null 祈免/null 祈愿/null 祈晴祷雨/null 祈望/null 祈树有缘/null 祈求/null 祈求者/null 祈祷/null 祈祷文/null 祈祷者/null 祈福/null 祈福禳灾/null 祈请/null 祈雨/null 祉助金/null 祉禄/null 祎隋/null 祓濯/null 祓禊/null 祓饰/null 祖上/null 祖业/null 祖产/null 祖传/null 祖传秘方/null 祖先/null 祖冲之/null 祖国/null 祖国光复会/null 祖国各地/null 祖国和平统一委员会/null 祖国统一/null 祖坟/null 祖姑母/null 祖孙/null 祖宗/null 祖居/null 祖师/null 祖师爷/null 祖性/null 祖本/null 祖母/null 祖母绿/null 祖父/null 祖父母/null 祖父辈/null 祖率/null 祖祖辈辈/null 祖籍/null 祖系/null 祖舜宗尧/null 祖语/null 祖辈/null 祖述/null 祖述尧舜宪章文武/null 祖逖之誓/null 祖遗/null 祖马/null 祖鲁/null 祖鲁人/null 祖鸟/null 祖鸟类/null 祖龙一炬/null 祛寒/null 祛暑/null 祛淤/null 祛疑/null 祛病/null 祛痰/null 祛痰剂/null 祛痰药/null 祛瘀/null 祛蠹除奸/null 祛邪/null 祛邪除灾/null 祛除/null 祛风/null 祛鬼/null 祝你/null 祝允明/null 祝发/null 祝君/null 祝哽祝噎/null 祝嘏/null 祝好/null 祝婚/null 祝宴/null 祝寿/null 祝寿延年/null 祝您/null 祝愿/null 祝捷/null 祝枝山/null 祝歌/null 祝祷/null 祝福/null 祝福者/null 祝融/null 祝词/null 祝谢/null 祝贺/null 祝贺者/null 祝贺词/null 祝辞/null 祝酒/null 祝酒歌/null 祝酒词/null 祝酒辞/null 祝颂/null 神上/null 神不主体/null 神不守舍/null 神不知鬼不觉/null 神丹/null 神丹妙药/null 神主/null 神乎其技/null 神乎其神/null 神交/null 神人/null 神人共悦/null 神人鉴知/null 神仙/null 神仙中人/null 神仙眷属/null 神会心契/null 神伤/null 神似/null 神位/null 神体/null 神佛/null 神侃/null 神僊/null 神像/null 神兵/null 神兽/null 神冈/null 神冈乡/null 神农/null 神农本草经/null 神农架/null 神农架地区/null 神农氏/null 神出鬼入/null 神出鬼没/null 神分志夺/null 神力/null 神功/null 神动色飞/null 神助/null 神助似/null 神劳形瘁/null 神勇/null 神化/null 神医/null 神号鬼哭/null 神名/null 神品/null 神器/null 神嚎鬼哭/null 神圣/null 神圣不可侵犯/null 神圣化/null 神圣同盟/null 神圣周/null 神圣罗马帝国/null 神坛/null 神塔/null 神头鬼面/null 神奇/null 神奇侠侣/null 神奇荒怪/null 神奈川/null 神奈川县/null 神奥/null 神女/null 神女峰/null 神女生涯/null 神妙/null 神妙隽美/null 神威/null 神婆/null 神学/null 神学士/null 神学家/null 神学研究所/null 神学者/null 神学院/null 神宇/null 神安气定/null 神完气足/null 神宗/null 神家园/null 神山/null 神州/null 神州大地/null 神州赤县/null 神州陆沉/null 神工妙力/null 神工鬼力/null 神工鬼斧/null 神巫/null 神差鬼使/null 神庙/null 神异/null 神往/null 神志/null 神志不清/null 神志昏迷/null 神态/null 神态自若/null 神怒人弃/null 神怒人怨/null 神怒天诛/null 神怒民怨/null 神怒民痛/null 神怒鬼怨/null 神思/null 神思恍惚/null 神怡/null 神怡心旷/null 神怡心醉/null 神性/null 神怪/null 神悟/null 神情/null 神情恍惚/null 神意/null 神慰/null 神成为人/null 神户/null 神探/null 神摇意夺/null 神摇目眩/null 神摇魂荡/null 神效/null 神教/null 神施鬼设/null 神明/null 神昏意乱/null 神智/null 神曲/null 神木/null 神术/null 神术妙法/null 神术妙策/null 神术妙计/null 神机妙术/null 神机妙用/null 神机妙策/null 神机妙算/null 神机莫测/null 神权/null 神权政治/null 神权统治/null 神来之笔/null 神枪手/null 神枯/null 神格/null 神武/null 神殿/null 神气/null 神气十足/null 神气扬扬/null 神气活现/null 神水/null 神汉/null 神池/null 神治国/null 神清气全/null 神清气正/null 神清气爽/null 神清气郎/null 神清骨秀/null 神游/null 神灯/null 神灵/null 神爱世人/null 神父/null 神爷/null 神物/null 神甫/null 神的儿子/null 神社/null 神祇/null 神祖/null 神祠/null 神离/null 神离貌合/null 神秘/null 神秘主义/null 神秘化/null 神秘学/null 神秘感/null 神秘色彩/null 神秘莫测/null 神童/null 神笔/null 神算/null 神籁自韵/null 神经/null 神经中枢/null 神经元/null 神经元网/null 神经原/null 神经外科/null 神经大条/null 神经失常/null 神经学/null 神经学家/null 神经官能症/null 神经性/null 神经性毒剂/null 神经性皮炎/null 神经性视损伤/null 神经末梢/null 神经毒素/null 神经氨酸酶/null 神经生物学/null 神经病/null 神经症/null 神经痛/null 神经科/null 神经突/null 神经管/null 神经系统/null 神经索/null 神经纤维/null 神经纤维瘤/null 神经组织/null 神经细胞/null 神经网/null 神经网络/null 神经网路/null 神经胶质/null 神经胶质细胞/null 神经节/null 神经衰弱/null 神经质/null 神经过敏/null 神经错乱/null 神经键/null 神而明之存乎其人/null 神聊/null 神职/null 神职人员/null 神职者/null 神舆/null 神舟/null 神舟号飞船/null 神舟电脑/null 神色/null 神色不动/null 神色不对/null 神色不惊/null 神色不挠/null 神色怡然/null 神色自得/null 神色自若/null 神药/null 神论/null 神话/null 神话故事/null 神话般/null 神谋妙策/null 神谋妙算/null 神谕/null 神谱/null 神迷/null 神迹/null 神通/null 神通广大/null 神通郁垒/null 神速/null 神道/null 神道教/null 神道碑/null 神道设教/null 神采/null 神采奕奕/null 神采奕然/null 神采焕发/null 神采英拔/null 神采飞扬/null 神雕侠侣/null 神韵/null 神风/null 神风特别攻击队/null 神风特攻队/null 神飞色动/null 神飞色舞/null 神马/null 神驰/null 神髓/null 神鬼不测/null 神鬼出没/null 神鬼莫测/null 神鬼难测/null 神魂/null 神魂摇荡/null 神魂撩乱/null 神魂荡扬/null 神魂颠倒/null 神魂飘荡/null 神魂飞越/null 神魔小说/null 神鸟/null 神龙失势/null 神龙汽车/null 神龙见首不见尾/null 神龛/null 祟高/null 祠堂/null 祠墓/null 祠庙/null 祥云/null 祥云瑞彩/null 祥云瑞气/null 祥光/null 祥和/null 祥春/null 祥林/null 祥物/null 祥瑞/null 祥符/null 祥补/null 祥麟威凤/null 祥麟瑞凤/null 票人/null 票价/null 票具/null 票券/null 票单/null 票友/null 票友儿/null 票口/null 票号/null 票员/null 票头/null 票夹/null 票子/null 票庄/null 票式/null 票戏/null 票房/null 票据/null 票据法/null 票据簿/null 票数/null 票样/null 票根/null 票款/null 票汇/null 票活/null 票源/null 票站/null 票签/null 票箱/null 票簿/null 票证/null 票贩子/null 票选/null 票面/null 票面值/null 票额/null 祭仪/null 祭位/null 祭典/null 祭司/null 祭司席/null 祭司权术/null 祭吊/null 祭告/null 祭品/null 祭器/null 祭地/null 祭坛/null 祭墓/null 祭天/null 祭奠/null 祭扫/null 祭拜/null 祭文/null 祭日/null 祭服/null 祭灶/null 祭物/null 祭礼/null 祭祀/null 祭祖/null 祭神/null 祭神如神在/null 祭赛/null 祭酒/null 祷告/null 祷室/null 祷念/null 祷文/null 祷祝/null 祷词/null 祷辞/null 祸不单行/null 祸不反踵/null 祸不妄至/null 祸不旋踵/null 祸中有福/null 祸为福先/null 祸乱/null 祸乱交兴/null 祸乱滔天/null 祸事/null 祸于/null 祸于福邻/null 祸从口出/null 祸从天降/null 祸作福阶/null 祸兴萧墙/null 祸出不测/null 祸及/null 祸发萧墙/null 祸发齿牙/null 祸因恶积/null 祸国/null 祸国殃民/null 祸在旦夕/null 祸在朝夕/null 祸害/null 祸心/null 祸患/null 祸枣灾梨/null 祸根/null 祸殃/null 祸水/null 祸生不测/null 祸生于忽/null 祸生肘腋/null 祸生萧墙/null 祸盈恶稔/null 祸福/null 祸福与共/null 祸福吉凶/null 祸福同门/null 祸福惟人/null 祸福无偏/null 祸福无常/null 祸福无门/null 祸福有命/null 祸福由人/null 祸福相倚/null 祸福相生/null 祸福靡常/null 祸种/null 祸稔恶盈/null 祸稔萧墙/null 祸端/null 祸结兵连/null 祸结衅深/null 祸绝福连/null 祸胎/null 祸至神昧/null 祸色/null 祸起萧墙/null 祸起隐微/null 祸起飞语/null 祸首/null 祸首罪魁/null 禀告/null 禀复/null 禀帖/null 禀性/null 禀承/null 禀报/null 禀明/null 禀赋/null 禀陈/null 禁不住/null 禁不起/null 禁书/null 禁令/null 禁伐/null 禁例/null 禁军/null 禁制/null 禁制令/null 禁制品/null 禁区/null 禁卫/null 禁卫军/null 禁受/null 禁受时间的考验/null 禁品/null 禁售/null 禁地/null 禁城/null 禁夜/null 禁奸除猾/null 禁子/null 禁得住/null 禁得起/null 禁忌/null 禁忌症/null 禁忌语/null 禁戒/null 禁捕/null 禁放/null 禁期/null 禁条/null 禁果/null 禁核/null 禁欲/null 禁欲主义/null 禁止/null 禁止令/null 禁止令行/null 禁止吸烟/null 禁止喧哗/null 禁止外出/null 禁止性/null 禁止核武器试验条约/null 禁止者/null 禁止通行/null 禁止驶入/null 禁毒/null 禁渔/null 禁演/null 禁烟/null 禁烟运动/null 禁猎/null 禁用/null 禁约/null 禁绝/null 禁网疏阔/null 禁脔/null 禁苑/null 禁药/null 禁见/null 禁语/null 禁购/null 禁赌/null 禁足/null 禁运/null 禁造/null 禁酒/null 禁酒令/null 禁酒法/null 禁锢/null 禁闭/null 禁阻/null 禁飞/null 禁食/null 禄丰/null 禄位/null 禄俸/null 禄养/null 禄劝/null 禄劝县/null 禄命/null 禄无常家福无定门/null 禄星/null 禄秩/null 禄籍/null 禄蠹/null 禄食/null 禄饵/null 禅位/null 禅功/null 禅城/null 禅城区/null 禅堂/null 禅学/null 禅宗/null 禅寺/null 禅师/null 禅思/null 禅房/null 禅机/null 禅杖/null 禅林/null 禅理/null 禅让/null 禅门五宗/null 禅院/null 福不徒来/null 福不重至祸必重来/null 福业相牵/null 福中/null 福为祸先/null 福为祸始/null 福于天齐/null 福份/null 福佑/null 福佬/null 福克/null 福克兰群岛/null 福克纳/null 福兮祸所伏/null 福兮祸所倚/null 福兴/null 福兴乡/null 福冈/null 福冈县/null 福分/null 福利/null 福利主义/null 福利事业/null 福利厂/null 福利待遇/null 福利政策/null 福利费/null 福利院/null 福善祸淫/null 福地/null 福地洞天/null 福如东海/null 福如山岳/null 福如海渊/null 福委会/null 福娃/null 福安/null 福寿/null 福寿双全/null 福寿天成/null 福寿年高/null 福寿康宁/null 福寿绵绵/null 福寿绵长/null 福寿螺/null 福寿齐天/null 福尔/null 福尔摩斯/null 福尔马林/null 福山/null 福山区/null 福岛/null 福岛县/null 福州戏/null 福布斯/null 福建事变/null 福惠双修/null 福报/null 福摩萨/null 福斯塔夫/null 福斯特/null 福无十全/null 福无双至祸不单行/null 福星/null 福星高照/null 福晋/null 福来/null 福林/null 福柯/null 福橘/null 福气/null 福泉/null 福泽/null 福泽谕吉/null 福海/null 福清/null 福煦/null 福物/null 福特/null 福特汽车/null 福生于微/null 福田/null 福田区/null 福相/null 福礼/null 福祉/null 福神/null 福祸/null 福禄双全/null 福禄贝尔/null 福维克/null 福至心灵/null 福贡/null 福过灾生/null 福音/null 福音书/null 福马林/null 福鼎/null 福齐南山/null 禧玛诺/null 禳补/null 禳解/null 禹会/null 禹会区/null 禹城/null 禹域/null 禹州/null 禹王台/null 禹王台区/null 禹行舜趋/null 离不/null 离不开/null 离不远/null 离世/null 离乡/null 离乡背井/null 离乳/null 离了/null 离京/null 离任/null 离休/null 离休干部/null 离你/null 离别/null 离去/null 离合/null 离合器/null 离合板/null 离合词/null 离合诗/null 离土不离乡/null 离地/null 离境/null 离奇/null 离奇有趣/null 离娄之明/null 离婚/null 离婚者/null 离婚证/null 离子/null 离子交换/null 离子交换树脂/null 离子化/null 离子束/null 离子键/null 离宫/null 离家/null 离家出走/null 离家别井/null 离层/null 离岗/null 离岛/null 离岸/null 离岸价/null 离差/null 离席/null 离座/null 离开/null 离开人世/null 离开故乡/null 离异/null 离弃/null 离弦/null 离弦之箭/null 离得/null 离得开/null 离心/null 离心分离机/null 离心力/null 离心机/null 离心泵/null 离心率/null 离心离德/null 离性/null 离恨/null 离您/null 离情/null 离情别绪/null 离愁/null 离手/null 离散/null 离散化/null 离散性/null 离散数学/null 离析/null 离校/null 离格/null 离格儿/null 离歌/null 离法/null 离港/null 离港大厅/null 离独/null 离瓣花冠/null 离着/null 离石/null 离石区/null 离离光光/null 离索/null 离线/null 离经/null 离经叛道/null 离群/null 离群索居/null 离者/null 离职/null 离解/null 离谱/null 离贰/null 离身/null 离轨/null 离辐/null 离辙/null 离远/null 离退休/null 离间/null 离队/null 离题/null 离题万里/null 离骚/null 离鸾别凤/null 禽兽/null 禽兽不如/null 禽困覆车/null 禽奔兽遁/null 禽息鸟视/null 禽流感/null 禽畜/null 禽类/null 禽肉/null 禽舍/null 禽蛋/null 禽贩/null 禽鸟/null 禽龙/null 禾场/null 禾木科/null 禾本科/null 禾秆/null 禾苗/null 禾草/null 禾谷/null 秀丽/null 秀出班行/null 秀发/null 秀发垂肩/null 秀外惠中/null 秀外慧中/null 秀媚/null 秀山/null 秀山县/null 秀屿/null 秀屿区/null 秀峰/null 秀峰区/null 秀才/null 秀才人情/null 秀拔/null 秀林/null 秀林乡/null 秀气/null 秀水/null 秀水乡/null 秀洲/null 秀洲区/null 秀眉/null 秀美/null 秀而不实/null 秀色/null 秀色可餐/null 秀色孙鲽/null 秀英/null 秀英区/null 秀逸/null 秀雅/null 私下/null 私下交易/null 私下谈/null 私之处/null 私买/null 私了/null 私事/null 私交/null 私产/null 私人/null 私人企业/null 私人关系/null 私人访问/null 私人资本/null 私人钥匙/null 私仇/null 私仇不及公/null 私企/null 私会/null 私信/null 私债/null 私偏/null 私党/null 私养/null 私分/null 私刑/null 私利/null 私刻/null 私办/null 私募/null 私募基金/null 私卖/null 私占/null 私印/null 私吞/null 私售/null 私商/null 私喻/null 私囊/null 私图/null 私塾/null 私增/null 私处/null 私奔/null 私娼/null 私学/null 私宅/null 私定终身/null 私室/null 私家/null 私家车/null 私密/null 私底下/null 私弊/null 私德/null 私心/null 私心杂念/null 私念/null 私怨/null 私恩小惠/null 私情/null 私意/null 私愤/null 私房/null 私房话/null 私房钱/null 私拿/null 私掠船/null 私方/null 私有/null 私有制/null 私有化/null 私有财产/null 私欲/null 私法/null 私活/null 私淑/null 私淑弟子/null 私生/null 私生子/null 私生子女/null 私生活/null 私用/null 私盐/null 私相传授/null 私相授受/null 私秘/null 私窝子/null 私立/null 私立学校/null 私章/null 私线/null 私罚/null 私股/null 私自/null 私船/null 私营/null 私营企业/null 私蓄/null 私藏/null 私行/null 私见/null 私设/null 私设公堂/null 私访/null 私话/null 私语/null 私谋叛国/null 私财/null 私货/null 私贩/null 私费/null 私运/null 私逃/null 私通/null 私通者/null 私道/null 私邸/null 私酒/null 私销/null 秃发/null 秃发症/null 秃头/null 秃子/null 秃宝盖/null 秃山/null 秃树/null 秃瓢/null 秃疮/null 秃石/null 秃秃/null 秃笔/null 秃顶/null 秃驴/null 秃鹫/null 秃鹰/null 秃鹰似/null 秆子/null 秆茎/null 秆锈病/null 秉公/null 秉公办事/null 秉公办理/null 秉公无私/null 秉公而断/null 秉性/null 秉承/null 秉持/null 秉政/null 秉烛/null 秉烛夜游/null 秉直/null 秉笏披袍/null 秉笔/null 秉笔直书/null 秉要执本/null 秉赋/null 秋令/null 秋假/null 秋兰/null 秋冬/null 秋冬季/null 秋决/null 秋凉/null 秋刀鱼/null 秋分点/null 秋千/null 秋叶/null 秋叶原/null 秋后/null 秋后算帐/null 秋后算账/null 秋地/null 秋声/null 秋天/null 秋子梨/null 秋季/null 秋审/null 秋庄稼/null 秋征/null 秋后/null 秋思/null 秋意/null 秋成/null 秋播/null 秋收/null 秋收冬藏/null 秋收起义/null 秋日/null 秋景/null 秋月/null 秋月寒江/null 秋月春花/null 秋月春风/null 秋树/null 秋残/null 秋毫/null 秋毫不犯/null 秋毫之末/null 秋毫无犯/null 秋水/null 秋水仙/null 秋水伊人/null 秋汛/null 秋波/null 秋海棠/null 秋海棠花/null 秋游/null 秋灌/null 秋熟/null 秋燥/null 秋狝/null 秋瑾/null 秋田/null 秋田县/null 秋社/null 秋秋/null 秋粮/null 秋老虎/null 秋耕/null 秋色/null 秋节/null 秋草人请/null 秋荼密网/null 秋菊傲霜/null 秋菜/null 秋葵/null 秋葵荚/null 秋虫/null 秋蝉/null 秋衣/null 秋裤/null 秋试/null 秋闱/null 秋雨/null 秋霜/null 秋风/null 秋风团扇/null 秋风扫落叶/null 秋风落叶/null 秋风过耳/null 秋风送爽/null 秋风飒飒/null 秋香/null 秋高气爽/null 秋高气肃/null 秋高马肥/null 秋麦/null 种上/null 种下/null 种了/null 种仁/null 种公畜/null 种养/null 种内杂交/null 种别/null 种在/null 种地/null 种块/null 种姓/null 种姓制/null 种姓制度/null 种子/null 种子园/null 种子地/null 种子处理/null 种子岛/null 种子植物/null 种子田/null 种子选手/null 种差/null 种形成/null 种数/null 种族/null 种族中心主义/null 种族主义/null 种族主义者/null 种族学/null 种族政策/null 种族歧视/null 种族清洗/null 种族清除/null 种族灭绝/null 种族间/null 种族隔离/null 种树/null 种植/null 种植业/null 种植园/null 种植场/null 种植者/null 种概念/null 种牛痘/null 种猪/null 种瓜/null 种瓜得瓜/null 种瓜得瓜种豆得豆/null 种田/null 种畜/null 种痘/null 种的/null 种皮/null 种禽/null 种种/null 种种迹像表明/null 种稻/null 种类/null 种籽/null 种粮/null 种系/null 种群/null 种肥/null 种脐/null 种花/null 种花人/null 种苗/null 种草/null 种菜/null 种薯/null 种蛋/null 种豆/null 种豆得豆/null 种马/null 种麦得麦/null 种麻/null 科举/null 科举制/null 科举考试/null 科什图尼察/null 科以/null 科伦坡/null 科佩尔/null 科克/null 科利奥兰纳斯/null 科别/null 科协/null 科协工作/null 科卿/null 科右中旗/null 科右前旗/null 科名/null 科员/null 科场/null 科大/null 科头箕裾/null 科头箕踞/null 科头跣足/null 科委/null 科威特/null 科威特人/null 科学/null 科学上/null 科学主义/null 科学共产主义/null 科学分析/null 科学化/null 科学卫星/null 科学发展观/null 科学史/null 科学学/null 科学实验/null 科学家/null 科学幻想/null 科学性/null 科学怪人/null 科学执政/null 科学技术/null 科学技术是第一生产力/null 科学技术现代化/null 科学教育影片/null 科学普及/null 科学界/null 科学的交流/null 科学知识/null 科学研究/null 科学社会主义/null 科学种田/null 科学管理/null 科学编辑/null 科学育儿/null 科学院/null 科室/null 科尔/null 科尔多瓦/null 科尔沁/null 科尔沁区/null 科尔沁左翼中/null 科尔沁左翼后/null 科尼赛克/null 科布多/null 科幻/null 科幻小说/null 科幻电影/null 科恩/null 科托努/null 科技/null 科技人员/null 科技司/null 科技型/null 科技大学/null 科技工作者/null 科技惊悚/null 科技惊悚小说/null 科技界/null 科技馆/null 科摩洛/null 科摩罗/null 科教/null 科教兴国/null 科教片/null 科教片儿/null 科斗/null 科普/null 科普读物/null 科林/null 科林・弗思/null 科林斯/null 科比・布莱恩特/null 科泽科德/null 科海/null 科特布斯/null 科特迪瓦/null 科特迪瓦共和国/null 科班/null 科班出身/null 科甲/null 科白/null 科目/null 科盲/null 科研/null 科研人员/null 科研小组/null 科研成果/null 科研所/null 科研样机/null 科研部/null 科第/null 科系/null 科索沃/null 科级/null 科纳克里/null 科组/null 科罗娜/null 科罗恩病/null 科罗拉多/null 科罗拉多大峡谷/null 科罗拉多州/null 科罗纳/null 科考/null 科考队/null 科股/null 科茨沃尔德/null 科莫多龙/null 科西嘉岛/null 科迪勒拉/null 科迪勒拉山系/null 科长/null 科隆/null 秒差距/null 秒杀/null 秒秒/null 秒表/null 秒针/null 秒钟/null 秕子/null 秕糠/null 秘书/null 秘书处/null 秘书学/null 秘书工作/null 秘书长/null 秘传/null 秘史/null 秘地/null 秘室/null 秘密/null 秘密会晤/null 秘密会社/null 秘密活动/null 秘密社会/null 秘密组织/null 秘密警察/null 秘技/null 秘教/null 秘方/null 秘本/null 秘法/null 秘法家/null 秘洞/null 秘牢/null 秘笈/null 秘籍/null 秘结/null 秘结性/null 秘而不宣/null 秘而不露/null 秘药/null 秘藏/null 秘议/null 秘诀/null 秘说/null 秘鲁/null 秘鲁人/null 秘鲁币/null 秘鲁苦蘵/null 租下/null 租人/null 租价/null 租佃/null 租佃关系/null 租住/null 租借/null 租借人/null 租借地/null 租借物/null 租借者/null 租债/null 租入/null 租出/null 租售/null 租地/null 租地人/null 租地人投标票权/null 租契/null 租子/null 租客/null 租屋/null 租屋人/null 租屋者/null 租得/null 租息/null 租户/null 租房/null 租房子/null 租方/null 租期/null 租用/null 租界/null 租税/null 租税转嫁/null 租籍/null 租米/null 租约/null 租给/null 租船/null 租让/null 租贷/null 租贷人/null 租费/null 租赁/null 租赁承包/null 租赁经营/null 租车/null 租金/null 租钱/null 租额/null 秣员/null 秣马/null 秣马利兵/null 秣马厉兵/null 秤坨/null 秤星/null 秤杆/null 秤架/null 秤毫/null 秤盘/null 秤盘子/null 秤砣/null 秤砣虽小压千斤/null 秤称/null 秤纽/null 秤钩/null 秤锤/null 秦代/null 秦军/null 秦吉了/null 秦国/null 秦失其鹿/null 秦始皇/null 秦始皇帝/null 秦始皇帝陵/null 秦始皇陵/null 秦孝公/null 秦安/null 秦岭/null 秦岭山脉/null 秦岭蜀栈道/null 秦州/null 秦州区/null 秦庭之哭/null 秦庭郎镜/null 秦惠文王/null 秦晋之好/null 秦晋之缘/null 秦朝/null 秦末/null 秦桧/null 秦椒/null 秦楼楚馆/null 秦楼谢馆/null 秦欢晋爱/null 秦汉/null 秦池/null 秦淮/null 秦淮区/null 秦火/null 秦牧/null 秦王/null 秦皇/null 秦皇岛/null 秦穆公/null 秦篆/null 秦腔/null 秦艽/null 秦都/null 秦都区/null 秦镜高悬/null 秦陵/null 秦韬玉/null 秧子/null 秧歌/null 秧歌剧/null 秧歌舞/null 秧田/null 秧脚/null 秧苗/null 秧鸡/null 秧龄/null 秩序/null 秩序井然/null 秩序美/null 秩然不紊/null 秩禄/null 秫秫/null 秫秸/null 秫米/null 秭归/null 积不相能/null 积久/null 积习/null 积习成俗/null 积习成常/null 积习生常/null 积习难改/null 积于忽微/null 积云/null 积云状/null 积储/null 积冰/null 积分/null 积分变换/null 积分学/null 积分常数/null 积分方程/null 积分榜/null 积分电路/null 积劳/null 积劳成疾/null 积卷云/null 积压/null 积压品/null 积压物资/null 积厚流广/null 积叠/null 积善/null 积善之家必有余庆/null 积善余庆/null 积善行/null 积土成山/null 积垢/null 积处/null 积存/null 积小成大/null 积少成多/null 积年/null 积年累月/null 积弊/null 积弱/null 积微成著/null 积德/null 积德累仁/null 积德累功/null 积忧成疾/null 积怨/null 积恶/null 积恶余殃/null 积愤/null 积攒/null 积数/null 积木/null 积极/null 积极分子/null 积极反应/null 积极性/null 积极浪漫主义/null 积极防御/null 积案/null 积欠/null 积毁销骨/null 积水/null 积水成渊/null 积淀/null 积渐/null 积温/null 积满/null 积灰/null 积物/null 积玉堆金/null 积甲山齐/null 积着/null 积祖/null 积福/null 积粮/null 积累/null 积累基金/null 积累性/null 积累毒性/null 积羽成舟/null 积羽沉舟/null 积聚/null 积聚物/null 积聚者/null 积肥/null 积草屯粮/null 积蓄/null 积薪厝火/null 积薪量水/null 积衰新造/null 积谷防饥/null 积贮/null 积贼/null 积重难返/null 积金累玉/null 积铢累寸/null 积雨云/null 积雪/null 积雪场/null 积非成是/null 积食/null 称上/null 称为/null 称之/null 称之为/null 称作/null 称便/null 称做/null 称兄道弟/null 称兵/null 称出/null 称号/null 称叹/null 称呼/null 称善/null 称多/null 称奇/null 称孤道寡/null 称家有无/null 称引/null 称得/null 称得上/null 称心/null 称心如意/null 称心满意/null 称快/null 称意/null 称愿/null 称扬/null 称斤注两/null 称曰/null 称王/null 称王称霸/null 称病/null 称羡/null 称职/null 称臣/null 称臣纳贡/null 称誉/null 称许/null 称说/null 称谓/null 称谢/null 称贤荐能/null 称贷/null 称赏/null 称赞/null 称身/null 称述/null 称道/null 称重/null 称重量/null 称量/null 称锤落井/null 称雄/null 称霸/null 称颂/null 秸杆/null 秸秆/null 移东就西/null 移东换西/null 移东补西/null 移了/null 移交/null 移伙/null 移位/null 移作/null 移值体/null 移入/null 移军/null 移出/null 移到/null 移动平均线/null 移动平均线指标/null 移动式/null 移动式电话/null 移动性/null 移动电话/null 移动设备/null 移动通信网络/null 移去/null 移向/null 移天徙日/null 移天易日/null 移孝为忠/null 移宫换羽/null 移居/null 移居者/null 移山/null 移山倒海/null 移山志/null 移山添海/null 移师/null 移开/null 移归/null 移往/null 移性/null 移情/null 移情别恋/null 移挪/null 移掉/null 移易/null 移星换斗/null 移有足无/null 移来/null 移栖/null 移栽/null 移植/null 移植性/null 移植手术/null 移植法/null 移樽就教/null 移步/null 移殖/null 移民/null 移民局/null 移民工/null 移民者/null 移液管/null 移灵/null 移用/null 移移/null 移置/null 移至/null 移花接木/null 移苗/null 移译/null 移调/null 移走/null 移转/null 移过/null 移近/null 移送/null 移送法办/null 移防/null 移除/null 移项/null 移风易俗/null 秽名/null 秽土/null 秽淫/null 秽物/null 秽行/null 秽语/null 秽迹/null 秽闻/null 稀世/null 稀世之鸟/null 稀世之宝/null 稀世珍宝/null 稀哩哗啦/null 稀土/null 稀土元素/null 稀土金属/null 稀奇/null 稀奇古怪/null 稀客/null 稀少/null 稀巴烂/null 稀有/null 稀有元素/null 稀有气体/null 稀有金属/null 稀朗/null 稀松/null 稀松骨质/null 稀泥/null 稀溜溜/null 稀烂/null 稀疏/null 稀盐酸/null 稀稀/null 稀稀拉拉/null 稀稀落落/null 稀粘液/null 稀粥/null 稀糟/null 稀缺/null 稀罕/null 稀落/null 稀薄/null 稀释/null 稀里光当/null 稀里哗啦/null 稀里糊涂/null 稀饭/null 程仪/null 程子/null 程序/null 程序上/null 程序员/null 程序库/null 程序性/null 程序控制/null 程序法/null 程序表/null 程序设计/null 程序语言/null 程度/null 程度不同/null 程式/null 程式动作/null 程式管理员/null 程式语言/null 程控/null 程控交换机/null 程控技术/null 程控机/null 程控机床/null 程控电话/null 程昱/null 程朱学派/null 程海湖/null 程潜/null 程砚秋/null 程邈/null 程门立雪/null 程限/null 程颐/null 程颢/null 稍不/null 稍个信/null 稍为/null 稍事/null 稍低/null 稍作/null 稍候/null 稍减/null 稍加/null 稍可/null 稍后/null 稍多/null 稍大/null 稍好/null 稍嫌/null 稍安勿躁/null 稍安毋躁/null 稍宽/null 稍小/null 稍尖/null 稍差/null 稍带/null 稍干/null 稍平/null 稍异/null 稍微/null 稍快/null 稍息/null 稍慢/null 稍懈/null 稍旧/null 稍早/null 稍早时/null 稍暗/null 稍有/null 稍歇/null 稍白/null 稍睡/null 稍知/null 稍短/null 稍稍/null 稍等/null 稍纵即逝/null 稍缓/null 稍老/null 稍胜一筹/null 稍许/null 稍迟/null 稍逊/null 稍逊一筹/null 稍长/null 稍顷/null 稍高/null 税人/null 税关/null 税则/null 税利/null 税制/null 税前/null 税务/null 税务员/null 税务局/null 税务所/null 税区/null 税单/null 税号/null 税名/null 税后/null 税后还贷/null 税员/null 税基/null 税契/null 税官/null 税局/null 税式/null 税户/null 税所/null 税捐/null 税捐稽征处/null 税收/null 税收制度/null 税收收入/null 税收政策/null 税收理论/null 税收管理/null 税改/null 税政/null 税权/null 税校/null 税款/null 税法/null 税源/null 税率/null 税目/null 税盲/null 税票/null 税种/null 税管/null 税类/null 税警/null 税负/null 税费/null 税赋/null 税金/null 税钱/null 税额/null 稔恶不悛/null 稗史/null 稗子/null 稗官小说/null 稗官野史/null 稚女/null 稚嫩/null 稚子/null 稚弱/null 稚拙/null 稚气/null 稚气未脱/null 稚虫/null 稞麦/null 稠人广众/null 稠人广座/null 稠密/null 稠度/null 稠油/null 稠糊/null 稳中有降/null 稳产/null 稳产高产/null 稳价/null 稳住/null 稳住阵脚/null 稳便/null 稳健/null 稳健派/null 稳准狠/null 稳压/null 稳压器/null 稳厚/null 稳固/null 稳坐/null 稳坐钓鱼台/null 稳如泰山/null 稳妥/null 稳婆/null 稳定/null 稳定塘/null 稳定增长/null 稳定局势/null 稳定平衡/null 稳定度/null 稳定性/null 稳定情绪/null 稳定收入/null 稳定物价/null 稳实/null 稳当/null 稳态/null 稳态理论/null 稳恒/null 稳恒态/null 稳扎稳打/null 稳打/null 稳拟/null 稳拿/null 稳操/null 稳操左券/null 稳操胜券/null 稳操胜算/null 稳步/null 稳步不前/null 稳步前进/null 稳步发展/null 稳步增长/null 稳流/null 稳稳/null 稳稳当当/null 稳练/null 稳胜/null 稳获/null 稳贴/null 稳赚/null 稳重/null 稳键/null 稳静/null 稷山/null 稻场/null 稻城/null 稻堆/null 稻壳/null 稻子/null 稻树/null 稻田/null 稻田皮炎/null 稻瘟/null 稻瘟病/null 稻白叶枯病/null 稻种/null 稻秧/null 稻穗/null 稻米/null 稻糠/null 稻苗/null 稻苞虫/null 稻草/null 稻草人/null 稻螟/null 稻谷/null 稻飞虱/null 稻香/null 稼穑/null 稼穑艰难/null 稽古/null 稽古振今/null 稽延/null 稽征/null 稽查/null 稽查人员/null 稽查员/null 稽核/null 稽留/null 稽留热/null 稽管/null 稽考/null 稽颡/null 稽首/null 稿人/null 稿件/null 稿员/null 稿子/null 稿底/null 稿本/null 稿约/null 稿纸/null 稿荐/null 稿费/null 稿酬/null 穆加贝/null 穆圣/null 穆如清风/null 穆巴拉克/null 穆斯林/null 穆桂英/null 穆棱/null 穆沙拉夫/null 穆然/null 穆索尔斯基/null 穆罕/null 穆罕默德/null 穆罕默德・欧玛/null 穆罕默德六世/null 穆萨维/null 穆迪/null 穆通/null 穗子/null 穗带/null 穗期/null 穗状/null 穗状花序/null 穗轴/null 穗选/null 穗饰/null 穰穰/null 穴中/null 穴位/null 穴位封闭/null 穴处之徒/null 穴处知雨/null 穴头/null 穴居/null 穴居人/null 穴居野处/null 穴播/null 穴施/null 穴脉/null 穴见小儒/null 穴道/null 穴鸟/null 究其/null 究其原因/null 究其根源/null 究办/null 究理/null 究竟/null 究诘/null 穷不失义/null 穷且益坚/null 穷乏/null 穷乡/null 穷乡僻壤/null 穷二代/null 穷人/null 穷光蛋/null 穷兵/null 穷兵极武/null 穷兵黩武/null 穷冬/null 穷凶极恶/null 穷凶极虐/null 穷则思变/null 穷匮/null 穷原竟委/null 穷困/null 穷困户/null 穷国/null 穷坑难满/null 穷境/null 穷大失居/null 穷天极地/null 穷奢极侈/null 穷奢极欲/null 穷妙极巧/null 穷家富路/null 穷寇/null 穷寇勿追/null 穷富极贵/null 穷尽/null 穷山/null 穷山僻壤/null 穷山恶水/null 穷工极巧/null 穷年累世/null 穷年累岁/null 穷年累月/null 穷幽极微/null 穷当益坚/null 穷形尽相/null 穷形极状/null 穷形极相/null 穷得/null 穷心剧力/null 穷忙/null 穷愁/null 穷愁潦倒/null 穷措大/null 穷摆/null 穷文人/null 穷日子/null 穷日落月/null 穷期/null 穷本极源/null 穷极其妙/null 穷极则变/null 穷极无聊/null 穷极要妙/null 穷根寻叶/null 穷根究底/null 穷棒子/null 穷池之鱼/null 穷源推本/null 穷源竟委/null 穷猿失木/null 穷猿奔林/null 穷猿投林/null 穷理/null 穷理尽性/null 穷病人/null 穷的/null 穷目/null 穷相/null 穷神知化/null 穷神观化/null 穷究/null 穷竭/null 穷竭心计/null 穷竭法/null 穷纤入微/null 穷结/null 穷结县/null 穷而后工/null 穷苦/null 穷贵极富/null 穷蹙/null 穷达有命/null 穷追/null 穷追不舍/null 穷途/null 穷途之哭/null 穷途日暮/null 穷途末路/null 穷途潦倒/null 穷途落魄/null 穷通皆命/null 穷酸/null 穷酸气/null 穷酸相/null 穷酸饿醋/null 穷醋大/null 穷阎漏屋/null 穷队/null 穷饿/null 穷鬼/null 穷鸟入怀/null 穷鼠啮狸/null 穹丘/null 穹天/null 穹庐/null 穹形/null 穹窿/null 穹肋/null 穹苍/null 穹隆/null 穹顶/null 空中/null 空中交通管制/null 空中交通管制员/null 空中加油/null 空中客车/null 空中小姐/null 空中少爷/null 空中核爆炸/null 空中格斗/null 空中楼阁/null 空中炮舰/null 空中走廊/null 空中飘浮/null 空中飞人/null 空乏/null 空了/null 空人/null 空位/null 空余/null 空信/null 空儿/null 空军/null 空军一号/null 空军司令/null 空军基地/null 空出/null 空前/null 空前团结/null 空前未有/null 空前绝后/null 空勤/null 空包弹/null 空匮/null 空口/null 空口无凭/null 空口汤圆/null 空口白话/null 空口说白话/null 空名/null 空吸/null 空喊/null 空地/null 空地导弹/null 空地战/null 空坦/null 空城/null 空城计/null 空域/null 空处/null 空头/null 空头支票/null 空姐/null 空子/null 空客公司/null 空室/null 空室清野/null 空寂/null 空对/null 空对地/null 空对空/null 空对空导弹/null 空就/null 空屋/null 空巢/null 空巷/null 空幻/null 空廓/null 空弹/null 空当/null 空当子/null 空心/null 空心儿/null 空心墙/null 空心大老官/null 空心架子/null 空心汤团/null 空心汤圆/null 空心砖/null 空心老大/null 空心莲子草/null 空心菜/null 空心萝卜/null 空心面/null 空怀/null 空怒/null 空性/null 空想/null 空想共产主义/null 空想家/null 空想社会主义/null 空想者/null 空战/null 空房/null 空房间/null 空手/null 空手而归/null 空手道/null 空扰/null 空投/null 空挡/null 空摄/null 空文/null 空无/null 空无一人/null 空无所有/null 空日/null 空旷/null 空暇/null 空板子/null 空架子/null 空格/null 空格键/null 空桐树/null 空档/null 空桶/null 空检/null 空气/null 空气剂量/null 空气动力/null 空气动力学/null 空气压缩机/null 空气取样/null 空气取样器/null 空气团/null 空气床/null 空气污染/null 空气流/null 空气流通/null 空气浴/null 空气状/null 空气缓冲间/null 空气调节/null 空气轴承/null 空气锤/null 空气阻力/null 空泛/null 空洞/null 空洞无物/null 空洞音/null 空灵/null 空炮/null 空理/null 空瓶/null 空疏/null 空白/null 空白支票/null 空白点/null 空的/null 空盘/null 空着/null 空着手/null 空穴/null 空穴型半导体/null 空穴来风/null 空穴来风未必无因/null 空空/null 空空如也/null 空空导弹/null 空空洞洞/null 空空荡荡/null 空竹/null 空等/null 空管/null 空箱/null 空给/null 空缺/null 空罐/null 空置/null 空翻/null 空耗/null 空肚/null 空肠/null 空腔/null 空腹/null 空腹便便/null 空腹高心/null 空舱/null 空花绣/null 空荡/null 空荡荡/null 空落落/null 空虚/null 空行/null 空袭/null 空言无补/null 空言虚语/null 空论/null 空论家/null 空话/null 空话连篇/null 空说/null 空调/null 空调器/null 空调机/null 空调车/null 空谈/null 空谈者/null 空谷传声/null 空谷幽兰/null 空谷足音/null 空跑/null 空跑一趟/null 空身/null 空车/null 空转/null 空载/null 空运/null 空运费/null 空速/null 空道/null 空钟/null 空门/null 空闲/null 空间/null 空间图形/null 空间局/null 空间性/null 空间探测/null 空间波/null 空间点阵/null 空间电荷/null 空间站/null 空阒/null 空阔/null 空防/null 空际/null 空降/null 空降兵/null 空隙/null 空难/null 空集/null 空页/null 空额/null 穿一条裤子/null 穿上/null 穿不下/null 穿云/null 穿云破雾/null 穿云裂石/null 穿以/null 穿住/null 穿便衣/null 穿入/null 穿凿/null 穿凿附会/null 穿制/null 穿制服/null 穿刺/null 穿回/null 穿在/null 穿坏/null 穿堂/null 穿堂儿/null 穿堂门/null 穿堂风/null 穿墙/null 穿好/null 穿孔/null 穿孔员/null 穿孔器/null 穿孔机/null 穿孔者/null 穿孝/null 穿小鞋/null 穿山甲/null 穿山越岭/null 穿带/null 穿帮/null 穿常风/null 穿廊/null 穿得/null 穿得好/null 穿心莲/null 穿戴/null 穿房入户/null 穿换/null 穿插/null 穿暖/null 穿来/null 穿杨/null 穿梭/null 穿梭外交/null 穿梭往返/null 穿洞/null 穿烂/null 穿用/null 穿用者/null 穿甲弹/null 穿着/null 穿着入时/null 穿着打扮/null 穿着者/null 穿着讲究/null 穿破/null 穿窬/null 穿窬之盗/null 穿红着绿/null 穿线/null 穿耳/null 穿花蛱蝶/null 穿著/null 穿行/null 穿衣/null 穿衣服/null 穿衣镜/null 穿袜/null 穿越/null 穿过/null 穿进/null 穿透/null 穿透性/null 穿透电流/null 穿透辐射/null 穿通/null 穿金戴银/null 穿针/null 穿针引线/null 穿针走线/null 穿钉/null 穿靴/null 穿鞋/null 穿马路/null 穿鼻/null 窀穸/null 突兀/null 突入/null 突出/null 突出点/null 突出表现/null 突出贡献/null 突击/null 突击手/null 突击检查/null 突击组/null 突击队/null 突击队员/null 突升/null 突厥/null 突厥人/null 突厥斯坦/null 突发/null 突发事件/null 突发奇想/null 突发性/null 突变/null 突变型/null 突变学/null 突变株/null 突变理论/null 突变种/null 突变论/null 突围/null 突围期/null 突地/null 突堤/null 突如/null 突如其来/null 突尼斯/null 突尼斯市/null 突尼西亚/null 突感/null 突显/null 突梯滑稽/null 突泉/null 突然/null 突然性/null 突然袭击/null 突然间/null 突现/null 突破/null 突破口/null 突破性/null 突破点/null 突破者/null 突破防御/null 突破难关/null 突突/null 突袭/null 突触/null 突触后/null 突起/null 突起部/null 突转/null 突进/null 突遭/null 突降/null 突飞/null 突飞猛进/null 窃位/null 窃位素餐/null 窃取/null 窃名/null 窃听/null 窃听器/null 窃喜/null 窃国/null 窃国者侯/null 窃密/null 窃幸乘宠/null 窃弄威权/null 窃据/null 窃权/null 窃案/null 窃物/null 窃犯/null 窃玉偷香/null 窃用/null 窃癖/null 窃盗/null 窃盗案/null 窃盗犯/null 窃盗癖/null 窃盗罪/null 窃窃/null 窃窃私语/null 窃窃细语/null 窃笑/null 窃簪之臣/null 窃蛋龙/null 窃蠹甲/null 窃谓/null 窃贼/null 窃走/null 窃钟掩耳/null 窃钩窃国/null 窃钩者诛/null 窄地/null 窄小/null 窄巴/null 窄巷/null 窄幅/null 窄床/null 窄打/null 窄播/null 窄桥/null 窄狭/null 窄用/null 窄缝/null 窄路/null 窄轨/null 窄道/null 窄门/null 窄门窄户/null 窅然/null 窈冥/null 窈窈/null 窈窕/null 窈窕冥冥/null 窈窕淑女/null 窈霭/null 窍门/null 窍门儿/null 窑内/null 窑场/null 窑坑/null 窑姐儿/null 窑子/null 窑工/null 窑洞/null 窑炉/null 窒息/null 窒息性毒剂/null 窒碍/null 窒闷/null 窕邃/null 窖子/null 窖肥/null 窖藏/null 窗体/null 窗侧/null 窗前/null 窗口/null 窗台/null 窗外/null 窗子/null 窗屉子/null 窗帘/null 窗幔/null 窗户/null 窗户棂/null 窗扇/null 窗旁/null 窗明/null 窗明几净/null 窗板/null 窗格/null 窗格子/null 窗框/null 窗棂/null 窗棂子/null 窗沿/null 窗洞/null 窗玻璃/null 窗盖/null 窗纱/null 窗花/null 窗钩/null 窗闩/null 窗间过马/null 窗饰/null 窘住/null 窘促/null 窘况/null 窘匮/null 窘困/null 窘地/null 窘境/null 窘态/null 窘色/null 窘迫/null 窜入/null 窜出/null 窜匿/null 窜扰/null 窜改/null 窜犯/null 窜红/null 窜踞/null 窜进/null 窜逃/null 窝上/null 窝主/null 窝停主人/null 窝儿/null 窝咑/null 窝囊/null 窝囊废/null 窝囊气/null 窝头/null 窝家/null 窝巢/null 窝工/null 窝心/null 窝憋/null 窝棚/null 窝火/null 窝瓜/null 窝窝/null 窝窝头/null 窝脓包/null 窝脖儿/null 窝藏/null 窝蜂/null 窝赃/null 窝边草/null 窝里/null 窝里反/null 窝里斗/null 窝铺/null 窝阔台/null 窝阔台汗/null 窟宅/null 窟穴/null 窟窿/null 窟窿眼儿/null 窟臀/null 窠臼/null 窥伺/null 窥全豹/null 窥孔/null 窥察/null 窥探/null 窥探者/null 窥望/null 窥求/null 窥测/null 窥牖小儿/null 窥看/null 窥知/null 窥见/null 窥视/null 窥视孔/null 窥豹/null 窥豹一斑/null 窥镜/null 窦娥冤/null 窦建德起义/null 窦状/null 窦窖/null 窦道/null 窨井/null 窬墙窥视/null 窳劣/null 窳惰/null 窳败/null 窸窣/null 立下/null 立业/null 立业安邦/null 立为/null 立于/null 立于不败之地/null 立井/null 立交/null 立交桥/null 立人/null 立人达人/null 立传/null 立体/null 立体交叉/null 立体几何/null 立体图/null 立体声/null 立体异构/null 立体异构体/null 立体性/null 立体感/null 立体摄像机/null 立体摄影/null 立体派/null 立体照片/null 立体电影/null 立体电影院/null 立体画/null 立体角/null 立体镜/null 立体音/null 立候/null 立像/null 立克次体/null 立党为公/null 立决/null 立刀旁/null 立刻/null 立功/null 立功受奖/null 立功喜报/null 立功立事/null 立功自效/null 立功赎罪/null 立升/null 立即/null 立卷/null 立吃地陷/null 立命/null 立命安身/null 立嗣/null 立国/null 立国之本/null 立国安邦/null 立地/null 立地书橱/null 立地成佛/null 立地金刚/null 立场/null 立契/null 立委/null 立委选举/null 立姿/null 立定/null 立定脚跟/null 立宪/null 立宪派/null 立山区/null 立异/null 立式/null 立式琴/null 立德/null 立德粉/null 立志/null 立性/null 立意/null 立感/null 立战功/null 立户/null 立扫千言/null 立据/null 立新/null 立方/null 立方体/null 立方公尺/null 立方厘米/null 立方形/null 立方根/null 立方米/null 立方英尺/null 立时/null 立时三刻/null 立有/null 立木/null 立杆见影/null 立枯病/null 立柜/null 立柱/null 立案/null 立案侦查/null 立正/null 立此/null 立此存照/null 立氏立克次体/null 立法/null 立法会/null 立法委员/null 立法委员会/null 立法机关/null 立法权/null 立法者/null 立法院/null 立派/null 立盹行眠/null 立眉瞪眼/null 立着/null 立碑/null 立竿/null 立竿见影/null 立等/null 立米/null 立约/null 立约人/null 立统/null 立者/null 立脚/null 立脚点/null 立著/null 立言/null 立誓/null 立论/null 立说/null 立谈之间/null 立贤无方/null 立起/null 立足/null 立足之地/null 立足于/null 立足处/null 立足点/null 立身/null 立身处世/null 立身扬名/null 立身行己/null 立身行道/null 立轴/null 立达/null 立遗嘱/null 立锥之土/null 立锥之地/null 立陶宛/null 立陶宛人/null 立面/null 立面图/null 立项/null 立顿/null 立马/null 立鱼/null 竖井/null 竖儒/null 竖写/null 竖在/null 竖子/null 竖子不足与谋/null 竖式/null 竖弯钩/null 竖折/null 竖挑眼/null 竖排/null 竖标/null 竖框/null 竖琴/null 竖琴似/null 竖目/null 竖直/null 竖直面/null 竖眉/null 竖眼/null 竖着/null 竖立/null 竖笔/null 竖笛/null 竖线/null 竖蜻蜓/null 竖行/null 竖起/null 竖起大拇指/null 竖起耳朵/null 竖起脊梁/null 竖钩/null 竖领/null 站上/null 站下/null 站不住/null 站不住脚/null 站了/null 站人/null 站位/null 站住/null 站住脚/null 站儿/null 站军姿/null 站到/null 站前/null 站前区/null 站友/null 站口/null 站台/null 站台票/null 站名/null 站员/null 站在/null 站地/null 站好/null 站姿/null 站定/null 站岗/null 站开/null 站得住/null 站得住脚/null 站得稳/null 站得高/null 站或坐/null 站拢/null 站柜台/null 站检/null 站点/null 站牌/null 站的/null 站直/null 站相/null 站着/null 站着说话不腰疼/null 站票/null 站稳/null 站稳脚跟/null 站立/null 站端/null 站管理/null 站著/null 站起/null 站起来/null 站长/null 站队/null 竞买/null 竞买人/null 竞争/null 竞争产品/null 竞争力/null 竞争和聚合/null 竞争性/null 竞争机制/null 竞争模式/null 竞争者/null 竞争能力/null 竞价/null 竞夺/null 竞得/null 竞态/null 竞技/null 竞技体操/null 竞技动物/null 竞技场/null 竞技性/null 竞技状态/null 竞板/null 竞标/null 竞渡/null 竞猜/null 竞相/null 竞短争长/null 竞秀/null 竞答/null 竞艳/null 竞购/null 竞赛/null 竞赛活动/null 竞赛者/null 竞走/null 竞选/null 竞选副手/null 竞选搭档/null 竞选活动/null 竞逐/null 竞金疏古/null 竟为/null 竟争/null 竟会/null 竟技场/null 竟敢/null 竟日/null 竟是/null 竟有/null 竟未/null 竟然/null 竟然会/null 竟能/null 竟自/null 竟至/null 竟达/null 竟陵/null 章丘/null 章决句断/null 章则/null 章句/null 章句之徒/null 章台/null 章台杨柳/null 章回/null 章回体/null 章回小说/null 章士钊/null 章太炎/null 章子/null 章子怡/null 章孝严/null 章服/null 章法/null 章炳麟/null 章甫/null 章甫荐履/null 章程/null 章节/null 章草/null 章贡/null 章贡区/null 章鱼/null 竣工/null 童乩/null 童仆/null 童便/null 童儿/null 童养媳/null 童养媳妇/null 童军/null 童叟无欺/null 童声/null 童女/null 童子/null 童子军/null 童子痨/null 童子鸡/null 童山/null 童工/null 童席/null 童帽/null 童年/null 童年期/null 童床/null 童心/null 童心未泯/null 童星/null 童服/null 童牛角马/null 童生/null 童男/null 童真/null 童稚/null 童蒙/null 童袜/null 童装/null 童裤/null 童言无忌/null 童话/null 童话故事/null 童语/null 童谣/null 童贞/null 童趣/null 童车/null 童难童女/null 童鞋/null 童音/null 童颜/null 童颜鹤发/null 竭力/null 竭尽/null 竭尽全力/null 竭心/null 竭智尽力/null 竭智尽忠/null 竭泽而渔/null 竭虑/null 竭诚/null 竭诚尽节/null 竭诚服务/null 竭蹶/null 端上/null 端五/null 端人正士/null 端倪/null 端出/null 端午/null 端口/null 端向/null 端坐/null 端委/null 端子/null 端子线/null 端州/null 端州区/null 端庄/null 端接/null 端整/null 端方/null 端木/null 端木赐/null 端本正源/null 端本清源/null 端机/null 端来/null 端架子/null 端柱/null 端正/null 端正党风/null 端水/null 端点/null 端然/null 端由/null 端电压/null 端的/null 端相/null 端着/null 端砚/null 端站/null 端端正正/null 端粒/null 端粒脢/null 端系统/null 端纳/null 端线/null 端绪/null 端节/null 端茶/null 端菜/null 端行/null 端视/null 端详/null 端赖/null 端量/null 端阳/null 端阳节/null 端面/null 竹东/null 竹东镇/null 竹丝鸡/null 竹书纪年/null 竹刀/null 竹制/null 竹刻/null 竹北/null 竹南/null 竹南镇/null 竹叶/null 竹叶青/null 竹叶青蛇/null 竹器/null 竹园/null 竹塘/null 竹塘乡/null 竹头木屑/null 竹子/null 竹山/null 竹山镇/null 竹岛/null 竹崎/null 竹崎乡/null 竹布/null 竹帘/null 竹帛/null 竹席/null 竹报平安/null 竹排/null 竹木/null 竹材/null 竹杠/null 竹条/null 竹板/null 竹板书/null 竹林/null 竹林七贤/null 竹林之游/null 竹枝/null 竹枝词/null 竹椅/null 竹楼/null 竹溪/null 竹片/null 竹片状/null 竹田/null 竹田乡/null 竹竿/null 竹笋/null 竹笙/null 竹笼/null 竹筏/null 竹筐/null 竹筒/null 竹筒倒豆子/null 竹筷/null 竹签/null 竹简/null 竹箍儿/null 竹管/null 竹篓/null 竹篦/null 竹篮/null 竹篮打水/null 竹篱笆/null 竹簧/null 竹类/null 竹纸/null 竹编/null 竹舆/null 竹节/null 竹节虫/null 竹芋/null 竹苞松茂/null 竹茹/null 竹马/null 竹马之交/null 竹马之友/null 竹马之好/null 竹鲛/null 竹鸡/null 竹黄/null 竺书/null 竺乾/null 竺可桢/null 竺学/null 竺教/null 竺法/null 竿头/null 竿头一步/null 竿子/null 竿跳/null 笃专/null 笃信/null 笃信好学/null 笃厚/null 笃学/null 笃学好古/null 笃守/null 笃定/null 笃实/null 笃志/null 笃志好学/null 笃志爱古/null 笃挚/null 笃爱/null 笃病/null 笃行/null 笄之年/null 笄冠/null 笄年/null 笄蛭/null 笆围/null 笆斗/null 笆篓/null 笆篱/null 笆篱子/null 笊篱/null 笋子/null 笋干/null 笋状/null 笋瓜/null 笋鸡/null 笑不可仰/null 笑不河清/null 笑了/null 笑傲/null 笑出/null 笑剧/null 笑口/null 笑口弥勒/null 笑后/null 笑吟吟/null 笑呵呵/null 笑咪咪/null 笑哈哈/null 笑啦/null 笑嘻嘻/null 笑噱/null 笑声/null 笑容/null 笑容可掬/null 笑影/null 笑得/null 笑意/null 笑掉/null 笑掉大牙/null 笑料/null 笑林/null 笑柄/null 笑死/null 笑气/null 笑涡/null 笑盈盈/null 笑眯眯/null 笑眼/null 笑着/null 笑破/null 笑破肚皮/null 笑窝/null 笑笑/null 笑纳/null 笑纹/null 笑者/null 笑脸/null 笑脸儿/null 笑脸相迎/null 笑著/null 笑著说/null 笑话/null 笑话书/null 笑语/null 笑说/null 笑谈/null 笑貌/null 笑贫不笑娼/null 笑逐颜开/null 笑里藏刀/null 笑面外交/null 笑面夜叉/null 笑面虎/null 笑靥/null 笑颜/null 笑骂/null 笑骂从汝/null 笔下/null 笔下生花/null 笔下超生/null 笔伐/null 笔会/null 笔供/null 笔具/null 笔写/null 笔刀/null 笔划/null 笔划检字表/null 笔削/null 笔力/null 笔势/null 笔勾/null 笔友/null 笔受/null 笔名/null 笔墨/null 笔墨官司/null 笔头/null 笔头儿/null 笔夹/null 笔套/null 笔尖/null 笔帽/null 笔底/null 笔底下/null 笔式/null 笔录/null 笔形/null 笔心/null 笔意/null 笔战/null 笔扫千军/null 笔挺/null 笔插/null 笔替/null 笔札/null 笔杆/null 笔杆儿/null 笔杆子/null 笔架/null 笔法/null 笔洗/null 笔电/null 笔画/null 笔画数/null 笔直/null 笔石/null 笔砚/null 笔端/null 笔筒/null 笔答/null 笔算/null 笔管/null 笔管面/null 笔翰如流/null 笔者/null 笔耕/null 笔耕不辍/null 笔胜于刀文比武强/null 笔致/null 笔舌/null 笔芯/null 笔触/null 笔记/null 笔记型电脑/null 笔记小说/null 笔记本/null 笔记本电脑/null 笔记本计算机/null 笔译/null 笔试/null 笔误/null 笔调/null 笔谈/null 笔资/null 笔走龙蛇/null 笔路/null 笔迹/null 笔铅/null 笔锋/null 笔顺/null 笔风/null 笙歌/null 笙歌鼎沸/null 笙管/null 笙箫/null 笙簧/null 笛卡儿/null 笛卡儿坐标制/null 笛卡尔/null 笛声/null 笛子/null 笛手/null 笛曲/null 笛沙格/null 笛膜/null 笞击/null 笞刑/null 笞打/null 笞挞/null 笞掠/null 笞杖/null 笞棰/null 笞背/null 笞臀/null 笞责/null 笞辱/null 笞骂/null 笠草/null 笤帚/null 笥匮囊空/null 符串/null 符号/null 符号为/null 符号化/null 符号学/null 符号法/null 符号论/null 符合/null 符合标准/null 符咒/null 符山石/null 符拉迪沃斯托克/null 符木/null 符板/null 符牌/null 符瑞/null 符箓/null 符类福音/null 符腾堡/null 符节/null 符记/null 符记环/null 笨举/null 笨人/null 笨伯/null 笨口拙舌/null 笨嘴拙腮/null 笨嘴拙舌/null 笨嘴笨舌/null 笨头笨脑/null 笨手笨脚/null 笨拙/null 笨拙不雅/null 笨死/null 笨瓜/null 笨的/null 笨笨/null 笨蛋/null 笨货/null 笨重/null 笨驴/null 笨鸟先飞/null 第一/null 第一世界/null 第一个/null 第一个层次/null 第一书记/null 第一产业/null 第一人称/null 第一位/null 第一例/null 第一信号系统/null 第一千/null 第一名/null 第一国际/null 第一型糖尿病/null 第一基本形式/null 第一声/null 第一天/null 第一夫人/null 第一季度/null 第一宇宙速度/null 第一届/null 第一年/null 第一手/null 第一手材料/null 第一把手/null 第一推动力/null 第一桶金/null 第一次/null 第一次世界大战/null 第一次国内革命战争/null 第一步/null 第一流/null 第一炮/null 第一百/null 第一百万/null 第一章/null 第一级/null 第一线/null 第一象限/null 第一路军/null 第一轮/null 第七/null 第七十/null 第七年/null 第七音/null 第三/null 第三世界/null 第三世界国家/null 第三产业/null 第三代/null 第三位/null 第三十/null 第三名/null 第三国/null 第三国际/null 第三声/null 第三天/null 第三季/null 第三季度/null 第三宇宙速度/null 第三年/null 第三方/null 第三梯队/null 第三次/null 第三次国内革命战争/null 第三步/null 第三流/null 第三等/null 第三等级/null 第三系/null 第三级/null 第三纪/null 第三者/null 第九/null 第九十/null 第九年/null 第二/null 第二世界/null 第二个/null 第二产业/null 第二位/null 第二信号系统/null 第二十/null 第二半国际/null 第二名/null 第二国际/null 第二型糖尿病/null 第二声/null 第二天/null 第二季度/null 第二宇宙速度/null 第二层/null 第二年/null 第二性/null 第二手/null 第二批/null 第二把手/null 第二日/null 第二次/null 第二次世界大战/null 第二次国内革命战争/null 第二流/null 第二线/null 第二轮/null 第二音/null 第五/null 第五个现代化/null 第五十/null 第五名/null 第五年/null 第五类/null 第五纵队/null 第八/null 第八个五年计划/null 第八十/null 第八年/null 第六/null 第六个/null 第六十/null 第六年/null 第六感/null 第六感觉/null 第几/null 第几层/null 第勒尼安海/null 第十/null 第十一/null 第十一届/null 第十七/null 第十三/null 第十九/null 第十二/null 第十二届/null 第十五/null 第十亿/null 第十八/null 第十六/null 第十四/null 第十年/null 第四/null 第四十/null 第四卷/null 第四台/null 第四名/null 第四国际/null 第四堵墙/null 第四声/null 第四季/null 第四季度/null 第四年/null 第四系/null 第四纪/null 第戎/null 第比利斯/null 第纳尔/null 笸箩/null 笸篮/null 笺本/null 笺注/null 笺纸/null 笺薄/null 笺言/null 笼中/null 笼中之鸟/null 笼中穷鸟/null 笼内/null 笼咚/null 笼嘴/null 笼头/null 笼子/null 笼屉/null 笼式/null 笼槛/null 笼火/null 笼络/null 笼络人心/null 笼统/null 笼罩/null 笼街喝道/null 笼鸟/null 笼鸟槛猿/null 筀竹/null 筅帚/null 等一下/null 等一下儿/null 等一会/null 等一会儿/null 等一等/null 等上/null 等不及/null 等中/null 等之/null 等了/null 等于/null 等于零/null 等人/null 等他/null 等价/null 等价交换/null 等价关系/null 等价物/null 等份/null 等位基因/null 等你/null 等侯/null 等倍/null 等倍数/null 等候/null 等值/null 等值线/null 等分/null 等到/null 等力/null 等势/null 等压/null 等压线/null 等变压线/null 等右/null 等号/null 等同/null 等同性/null 等周/null 等周不等式/null 等品/null 等因奉此/null 等国/null 等在/null 等地/null 等外/null 等外品/null 等奖/null 等宽/null 等差/null 等差数列/null 等差级数/null 等幅/null 等幅上涨/null 等度/null 等式/null 等待/null 等得/null 等我/null 等把/null 等效/null 等效电路/null 等效百万吨当量/null 等日/null 等时/null 等机/null 等次/null 等死/null 等比/null 等比数/null 等比数列/null 等比级数/null 等温/null 等温线/null 等熵线/null 等用/null 等电位/null 等着/null 等着瞧/null 等离子/null 等离子体/null 等离子态/null 等离子焊接/null 等第/null 等等/null 等米下锅/null 等类/null 等级/null 等级低/null 等级制/null 等级制度/null 等级森严/null 等而下之/null 等而视之/null 等腰/null 等腰三角形/null 等著/null 等补/null 等衰/null 等角/null 等货/null 等距/null 等距离/null 等轴晶系/null 等边/null 等边三角形/null 等速/null 等速运动/null 等量/null 等量齐观/null 等闲/null 等闲之辈/null 等闲观之/null 等闲视之/null 等震线/null 等面/null 等额/null 等额比基金/null 等高/null 等高种植/null 等高线/null 筊杯/null 筋圈/null 筋斗/null 筋斗云/null 筋疲力尽/null 筋疲力竭/null 筋络/null 筋肉/null 筋脉/null 筋腱/null 筋节/null 筋骨/null 筏子/null 筏道/null 筐子/null 筐箧/null 筐箧中物/null 筑土墙/null 筑坛拜将/null 筑坝/null 筑城/null 筑基/null 筑堤/null 筑墙/null 筑室反耕/null 筑室道谋/null 筑巢/null 筑成/null 筑沟/null 筑波/null 筑起/null 筑路/null 筑造/null 筑造学/null 筒似/null 筒子/null 筒子楼/null 筒形/null 筒灯/null 筒状花/null 筒瓦/null 筒纸/null 筒袜/null 筒裤/null 筒阀/null 答中/null 答儿/null 答允/null 答出/null 答卷/null 答声/null 答复/null 答对/null 答应/null 答式/null 答录/null 答录机/null 答拜/null 答数/null 答案/null 答理/null 答疑/null 答白/null 答礼/null 答答/null 答腔/null 答茬/null 答茬儿/null 答覆/null 答记者问/null 答访/null 答词/null 答话/null 答语/null 答读者问/null 答谢/null 答谢宴会/null 答辞/null 答辨/null 答辩/null 答辩状/null 答辩者/null 答问/null 答非所问/null 答题/null 策划/null 策划了/null 策划人/null 策划者/null 策动/null 策励/null 策勉/null 策勒/null 策反/null 策士/null 策应/null 策杖/null 策源地/null 策画/null 策略/null 策略上/null 策略性/null 策论/null 策试/null 策谋/null 策问/null 策马/null 筚篥/null 筚路蓝缕/null 筚门闺窦/null 筛分/null 筛去/null 筛子/null 筛板/null 筛查/null 筛检/null 筛法/null 筛状/null 筛眼/null 筛筛/null 筛管/null 筛糠/null 筛过/null 筛选/null 筛除/null 筛骨/null 筠连/null 筢子/null 筲箍/null 筲箕/null 筵上/null 筵宴/null 筵席/null 筵席捐/null 筵謦/null 筷子/null 筷子芥/null 筹借/null 筹出/null 筹划/null 筹办/null 筹募/null 筹商/null 筹备/null 筹备会/null 筹委会/null 筹子/null 筹建/null 筹得/null 筹思/null 筹拍/null 筹拨/null 筹措/null 筹款/null 筹画/null 筹略/null 筹码/null 筹算/null 筹组/null 筹议/null 筹设/null 筹谋/null 筹资/null 筹赈/null 筹钱/null 筹集/null 筹集者/null 筹集资金/null 筼筜/null 筼筜湖/null 签了/null 签于/null 签入/null 签写/null 签准/null 签出/null 签到/null 签单/null 签印/null 签发/null 签发地点/null 签发日期/null 签名/null 签名人/null 签名簿/null 签呈/null 签子/null 签字/null 签字笔/null 签字者/null 签字费/null 签完/null 签定/null 签封/null 签帐卡/null 签批/null 签报/null 签押/null 签收/null 签有/null 签条/null 签注/null 签派室/null 签牌/null 签章/null 签筒/null 签约/null 签约国/null 签约奖金/null 签约者/null 签署/null 签署者/null 签订/null 签认/null 签证/null 签语饼/null 签过/null 签退/null 签领/null 简・爱/null 简义/null 简介/null 简令/null 简仪/null 简任/null 简体/null 简体字/null 简作/null 简便/null 简册/null 简写/null 简况/null 简分/null 简分数/null 简划/null 简则/null 简化/null 简化字/null 简化汉字/null 简单/null 简单再生产/null 简单判断/null 简单劳动/null 简单化/null 简单协作/null 简单地说/null 简单多数/null 简单扼要/null 简单明了/null 简单易学/null 简单机械/null 简单生产/null 简单网络管理协议/null 简历/null 简古/null 简史/null 简图/null 简在帝心/null 简复/null 简字/null 简师/null 简帖/null 简帖儿/null 简并/null 简慢/null 简截了当/null 简扼/null 简报/null 简括/null 简拼/null 简捷/null 简政/null 简明/null 简明扼要/null 简易/null 简易师范/null 简易煤气/null 简本/null 简札/null 简朴/null 简板/null 简氏防务周刊/null 简洁/null 简炼/null 简爱/null 简牍/null 简略/null 简略见告/null 简直/null 简直不/null 简短/null 简短介绍/null 简码/null 简称/null 简章/null 简简单单/null 简繁/null 简繁转换/null 简约/null 简纳/null 简练/null 简编/null 简缩/null 简而言之/null 简表/null 简装/null 简要/null 简要介绍/null 简言之/null 简讯/null 简记/null 简论/null 简谐/null 简谐振动/null 简谐波/null 简谐运动/null 简谱/null 简述/null 简阳/null 简陋/null 简除/null 箅子/null 箍咒/null 箍嘴/null 箍子/null 箍带/null 箍桶/null 箍桶匠/null 箍桶店/null 箍紧/null 箍节儿/null 箍麻/null 箔匠/null 箔材/null 箔条/null 箔片/null 箔纸/null 箕子/null 箕山之志/null 箕山之节/null 箕帚之使/null 箕裘相继/null 箕踞/null 箕风毕雨/null 算上/null 算不了/null 算不得/null 算了/null 算人/null 算作/null 算做/null 算入/null 算出/null 算出来/null 算卦/null 算去/null 算命/null 算命先生/null 算命家/null 算命者/null 算哪根葱/null 算啦/null 算在/null 算子/null 算学/null 算定/null 算尺/null 算帐/null 算式/null 算得/null 算得了/null 算数/null 算方/null 算无遗策/null 算是/null 算术/null 算术化/null 算术家/null 算术平均/null 算术平均数/null 算术式/null 算术级数/null 算术题/null 算来/null 算法/null 算法语言/null 算清/null 算盘/null 算盘子儿/null 算草/null 算计/null 算计儿/null 算话/null 算账/null 算起/null 算进/null 算错/null 算题/null 箜篌/null 箜簧/null 箝制/null 箝口结舌/null 管不着/null 管严/null 管中/null 管中窥天/null 管中窥豹/null 管乐/null 管乐器/null 管了/null 管事/null 管井/null 管人/null 管他/null 管仲/null 管件/null 管住/null 管保/null 管儿/null 管制/null 管制区/null 管区/null 管卡/null 管取/null 管口/null 管吃/null 管圆线虫/null 管城区/null 管城回族区/null 管城毛颖/null 管壁/null 管壳/null 管处/null 管套/null 管好/null 管委会/null 管子/null 管子工/null 管子钳/null 管宁割席/null 管家/null 管家婆/null 管家职务/null 管工/null 管帐/null 管带/null 管店/null 管座/null 管弦/null 管弦乐/null 管弦乐团/null 管弦乐队/null 管形/null 管待/null 管情/null 管我/null 管户/null 管手管脚/null 管扳子/null 管扳手/null 管护/null 管押/null 管控/null 管教/null 管教好/null 管教无方/null 管机/null 管材/null 管束/null 管查/null 管死/null 管治/null 管灯/null 管片/null 管状/null 管状花/null 管理/null 管理人/null 管理信息库/null 管理功能/null 管理员/null 管理器/null 管理处/null 管理委员会/null 管理学/null 管理学院/null 管理局/null 管理层收购/null 管理所/null 管理接口/null 管理站/null 管理者/null 管理费/null 管用/null 管界/null 管窖人/null 管窥/null 管窥之见/null 管窥所及/null 管窥筐举/null 管窥蠡测/null 管纱/null 管线/null 管网/null 管胞/null 管脚/null 管自/null 管芯/null 管见/null 管见所及/null 管训/null 管谁/null 管账/null 管路/null 管辖/null 管辖权/null 管过/null 管道/null 管道工/null 管道运输/null 管钳/null 管钳子/null 管闲事/null 管队/null 管风琴/null 管饭/null 管鲍之交/null 管鲍分金/null 管龠/null 箢箕/null 箧笥/null 箧箧/null 箧衍/null 箩筐/null 箪瓢屡空/null 箪瓢陋巷/null 箪笥/null 箪食壶浆/null 箪食瓢饮/null 箫韶九成/null 箬帽/null 箬竹/null 箭在弦上/null 箭垛子/null 箭头/null 箭头键/null 箭尾/null 箭术/null 箭杆/null 箭杆杨/null 箭楼/null 箭步/null 箭毒蛙/null 箭牌/null 箭猪/null 箭矢/null 箭石/null 箭竹/null 箭筒/null 箭镞/null 箭靶子/null 箭鱼/null 箱体/null 箱内/null 箱包/null 箱子/null 箱底/null 箱柜/null 箱根/null 箱梁/null 箱检/null 箱笼/null 箱箧/null 箱门/null 箴规/null 箴言/null 箴言式/null 箸长碗短/null 篆书/null 篆体/null 篆刻/null 篆刻家/null 篆字/null 篆工/null 篆文/null 篇名/null 篇子/null 篇幅/null 篇目/null 篇章/null 篇集/null 篇页/null 篓子/null 篓筐/null 篙头/null 篙子/null 篝火/null 篝火狐鸣/null 篡位/null 篡党/null 篡军/null 篡夺/null 篡夺者/null 篡弑/null 篡改/null 篡政/null 篡权/null 篡窃/null 篡立/null 篡贼/null 篡逆/null 篦头/null 篦子/null 篦麻/null 篮协/null 篮圈/null 篮坛/null 篮子/null 篮板/null 篮板球/null 篮框/null 篮状/null 篮球/null 篮球场/null 篮球赛/null 篮球队/null 篮筐/null 篮细工/null 篱垣/null 篱墙/null 篱壁间物/null 篱栅/null 篱牢犬不入/null 篱笆/null 篱落/null 篷子/null 篷形/null 篷盖布/null 篷船/null 篷车/null 篷顶/null 篷首垢面/null 篷马车/null 篼子/null 篾匠/null 篾条/null 篾片/null 篾青/null 篾黄/null 簇叶/null 簇射/null 簇拥/null 簇新/null 簇状/null 簇生/null 簇茎石竹/null 簇鱼之祸/null 簇鱼堂燕/null 簉室/null 簌簌/null 簌簌发抖/null 簦过/null 簧片/null 簧秤/null 簧管/null 簧舌/null 簧风琴/null 簧鼓/null 簪子/null 簪缨世胄/null 簪缨门第/null 簸扬/null 簸箕/null 簸荡/null 簸谷/null 簿上/null 簿册/null 簿子/null 簿本/null 簿籍/null 簿藉/null 簿记/null 簿记员/null 簿记管理员/null 籀书/null 籀文/null 籍册/null 籍口/null 籍籍/null 籍籍无名/null 籍贯/null 米仓/null 米价/null 米兰/null 米凯拉/null 米利班德/null 米制/null 米厂/null 米哈伊尔・普罗霍罗夫/null 米团/null 米国/null 米夫/null 米奇/null 米尔斯/null 米尔顿/null 米尺/null 米店/null 米开朗基罗/null 米德尔伯里/null 米拉/null 米易/null 米林/null 米格/null 米格尔・德・塞万提斯・萨维德拉/null 米欧/null 米歇尔/null 米汤/null 米泉/null 米泔水/null 米波/null 米特・罗姆尼/null 米珠薪桂/null 米盐博辩/null 米票/null 米突/null 米粉/null 米粉肉/null 米粒/null 米粒之珠/null 米粥/null 米粮/null 米粮川/null 米糕/null 米糠/null 米纳尔迪/null 米线/null 米老鼠/null 米脂/null 米色/null 米芾/null 米苏里州/null 米行/null 米该亚/null 米诺安/null 米象/null 米酒/null 米铺/null 米面/null 米饭/null 米饼/null 米高扬/null 米麴菌/null 米黄/null 类义/null 类义字/null 类乌齐/null 类乎/null 类书/null 类于/null 类人/null 类人猿/null 类似/null 类似于/null 类似点/null 类似物/null 类似问题/null 类别/null 类化/null 类同/null 类固醇/null 类地行星/null 类型/null 类属/null 类属词典/null 类推/null 类推者/null 类新星/null 类星体/null 类有/null 类木行星/null 类次/null 类此/null 类毒素/null 类比/null 类比推理/null 类比法/null 类比策略/null 类比错误/null 类球面/null 类目/null 类群/null 类聚/null 类胡萝卜素/null 类脂醇/null 类语辞典/null 类质同像/null 类金属/null 类项/null 类频数/null 类风湿因子/null 类鼻疽/null 类鼻疽单细胞/null 籼稻/null 籼米/null 籽棉/null 籽粒/null 粉丝/null 粉刷/null 粉刺/null 粉剂/null 粉土/null 粉坊/null 粉墙/null 粉墨/null 粉墨登场/null 粉妆玉琢/null 粉嫩/null 粉尘/null 粉底/null 粉彩/null 粉扑/null 粉扑儿/null 粉擦/null 粉料/null 粉末/null 粉末冶金/null 粉末状/null 粉条/null 粉板/null 粉沙/null 粉沫/null 粉浆/null 粉煤/null 粉煤灰/null 粉牌/null 粉状/null 粉白/null 粉白墨黑/null 粉白黛绿/null 粉白黛黑/null 粉皮/null 粉盒/null 粉砂岩/null 粉砂石/null 粉碎/null 粉碎器/null 粉碎机/null 粉笔/null 粉红/null 粉红色/null 粉线/null 粉肠/null 粉膏/null 粉色/null 粉芡/null 粉蒸肉/null 粉蜜/null 粉蜡笔/null 粉蝶/null 粉语/null 粉身灰骨/null 粉身碎骨/null 粉酶/null 粉面/null 粉面油头/null 粉饰/null 粉饰太平/null 粉饼/null 粉骨碎身/null 粉黛/null 粑粑/null 粒儿/null 粒大/null 粒子/null 粒子加速器/null 粒子束/null 粒子流/null 粒子物理/null 粒子物理学/null 粒岩/null 粒度/null 粒径/null 粒状/null 粒状物/null 粒白细胞/null 粒米束薪/null 粒米狼戾/null 粒细胞/null 粒肥/null 粒质/null 粒选/null 粗中有细/null 粗人/null 粗估/null 粗体/null 粗体字/null 粗俗/null 粗俗人/null 粗俗话/null 粗制/null 粗制品/null 粗制滥造/null 粗刻/null 粗加工/null 粗加工制品/null 粗劣/null 粗劣作品/null 粗卤/null 粗厉/null 粗口/null 粗呢/null 粗哑/null 粗壮/null 粗声/null 粗声粗气/null 粗大/null 粗实/null 粗工/null 粗布/null 粗心/null 粗心大意/null 粗心浮气/null 粗拉/null 粗放/null 粗放经营/null 粗暴/null 粗服乱头/null 粗枝/null 粗枝大叶/null 粗查/null 粗榧/null 粗毛/null 粗毛羊/null 粗气/null 粗活/null 粗浅/null 粗犷/null 粗率/null 粗略/null 粗疏/null 粗盈守成/null 粗盈守虚/null 粗盐/null 粗眉/null 粗短/null 粗砂/null 粗硬/null 粗碾/null 粗笨/null 粗筛/null 粗管面/null 粗粗/null 粗粝/null 粗粮/null 粗糙/null 粗糠/null 粗纱/null 粗纺/null 粗线/null 粗线条/null 粗细/null 粗绒/null 粗绳/null 粗缝/null 粗而/null 粗腿病/null 粗茶/null 粗茶淡饭/null 粗蛋白质/null 粗衣淡饭/null 粗衣粝食/null 粗览/null 粗话/null 粗语/null 粗读/null 粗豪/null 粗货/null 粗贱/null 粗选/null 粗通/null 粗鄙/null 粗鄙下流/null 粗重/null 粗野/null 粗野无礼/null 粗长/null 粗陋/null 粗面/null 粗风暴雨/null 粗饭/null 粗饲料/null 粗鲁/null 粗鲁无礼/null 粗麻/null 粘上/null 粘丝体/null 粘乎乎/null 粘住/null 粘剂/null 粘合/null 粘合剂/null 粘合性/null 粘固/null 粘土/null 粘在/null 粘块/null 粘帖/null 粘度/null 粘弹性/null 粘性/null 粘性力/null 粘有/null 粘木/null 粘板/null 粘染/null 粘涎/null 粘液/null 粘液素/null 粘液质/null 粘滑/null 粘滞/null 粘滞度/null 粘滞性/null 粘牙/null 粘牢/null 粘皮带骨/null 粘皮著骨/null 粘着/null 粘着剂/null 粘着力/null 粘着性/null 粘稠/null 粘米/null 粘粘/null 粘糊/null 粘紧/null 粘结/null 粘缠/null 粘聚/null 粘胶/null 粘胶布/null 粘胶液/null 粘胶纤维/null 粘膜/null 粘膜炎/null 粘花惹絮/null 粘花惹草/null 粘菌/null 粘著/null 粘著性/null 粘虫/null 粘质/null 粘质物/null 粘贴/null 粘贴处/null 粘连/null 粘附/null 粘附力/null 粜风卖雨/null 粝食粗衣/null 粝食粗餐/null 粟子/null 粟米/null 粟类/null 粟红贯朽/null 粟裕/null 粟谷/null 粟陈贯朽/null 粤东/null 粤剧/null 粤拼/null 粤歌/null 粤汉铁路/null 粤海/null 粤港/null 粤犬吠雪/null 粤若稽古/null 粤菜/null 粤语拼音/null 粥似/null 粥少僧多/null 粥样/null 粥样硬化/null 粥状/null 粥粥无能/null 粪便/null 粪便学/null 粪凼/null 粪土/null 粪坑/null 粪堆/null 粪尿/null 粪桶/null 粪池/null 粪筐/null 粪箕子/null 粪耙/null 粪肥/null 粪蛆/null 粪蛋/null 粪车/null 粪道/null 粪金龟/null 粪金龟子/null 粪门/null 粪除/null 粪青/null 粮人/null 粮仓/null 粮价/null 粮农/null 粮农组织/null 粮多草广/null 粮尽援绝/null 粮库/null 粮店/null 粮户/null 粮本/null 粮栈/null 粮棉/null 粮款/null 粮油/null 粮田/null 粮票/null 粮秣/null 粮税/null 粮站/null 粮管所/null 粮船/null 粮草/null 粮草先行/null 粮荒/null 粮行/null 粮袋/null 粮谷/null 粮道/null 粮食/null 粮食作物/null 粮食局/null 粮饷/null 粲夸克/null 粲然/null 粲然可观/null 粳稻/null 粳米/null 粼粼/null 粽子/null 精义入神/null 精于/null 精于此道/null 精光/null 精兵/null 精兵猛将/null 精兵简政/null 精准/null 精减/null 精到/null 精制/null 精力/null 精力充沛/null 精包/null 精华/null 精卫/null 精卫填海/null 精卫添海/null 精品/null 精囊/null 精国/null 精图/null 精壮/null 精奇古怪/null 精妙/null 精妙入神/null 精妙绝伦/null 精子/null 精子密度/null 精审/null 精密/null 精密仪器/null 精密化/null 精密度/null 精巢/null 精工/null 精巧/null 精干/null 精干高效/null 精度/null 精当/null 精彩/null 精彩逼人/null 精微/null 精心/null 精心励志/null 精忠/null 精忠报国/null 精怪/null 精悍/null 精悍短小/null 精打/null 精打光/null 精打细算/null 精挑/null 精整/null 精明/null 精明强干/null 精明能干/null 精校本/null 精梳/null 精气/null 精气神/null 精氨酸/null 精河/null 精油/null 精液/null 精深/null 精深博大/null 精湛/null 精灵/null 精灵宝钻/null 精灵文/null 精炼/null 精炼厂/null 精疲力尽/null 精疲力竭/null 精益求精/null 精盐/null 精矿/null 精研/null 精确/null 精确度/null 精确性/null 精神/null 精神上/null 精神世界/null 精神健康/null 精神分析/null 精神分裂症/null 精神奕奕/null 精神好/null 精神学/null 精神学家/null 精神崩溃/null 精神性/null 精神性厌食症/null 精神恍惚/null 精神所加金石为开/null 精神抖擞/null 精神损耗/null 精神支柱/null 精神文明/null 精神满腹/null 精神焕发/null 精神状态/null 精神狂乱/null 精神生活/null 精神疗法/null 精神疾病/null 精神病/null 精神病医院/null 精神病学/null 精神病患/null 精神百倍/null 精神药物/null 精神衰弱/null 精神论/null 精神财富/null 精神错乱/null 精神领袖/null 精神饱满/null 精简/null 精简了/null 精简人员/null 精简开支/null 精简整编/null 精简机构/null 精算/null 精算师/null 精米/null 精粮/null 精粹/null 精索/null 精纯/null 精纺/null 精练/null 精细/null 精细管/null 精美/null 精耕/null 精耕细作/null 精肉/null 精致/null 精良/null 精英/null 精英奖/null 精英赛/null 精萃/null 精虫/null 精虫冲脑/null 精表/null 精装/null 精装书/null 精装本/null 精讲多练/null 精诚/null 精诚团结/null 精诚所加/null 精诚所加金石为开/null 精诚所至/null 精诚贯日/null 精读/null 精读课/null 精贯白日/null 精辟/null 精进/null 精选/null 精选者/null 精通/null 精采/null 精金百炼/null 精金美玉/null 精金良玉/null 精锐/null 精锐部队/null 精雕/null 精雕细刻/null 精雕细镂/null 精饲料/null 精馏/null 精馏塔/null 精髓/null 精魂/null 糅合/null 糊刷/null 糊剂/null 糊口/null 糊嘴/null 糊墙/null 糊墙纸/null 糊封/null 糊弄/null 糊弄局/null 糊料/null 糊涂/null 糊涂虫/null 糊涂账/null 糊状/null 糊状物/null 糊的/null 糊精/null 糊糊/null 糊糊涂涂/null 糊纸/null 糊话/null 糊里糊涂/null 糌粑/null 糍粑/null 糕干/null 糕点/null 糕饼/null 糖业/null 糖份/null 糖元/null 糖分/null 糖化/null 糖化物/null 糖厂/null 糖原/null 糖合物/null 糖块/null 糖寮/null 糖尿病/null 糖弹/null 糖心/null 糖房/null 糖料/null 糖果/null 糖果店/null 糖水/null 糖汁/null 糖浆/null 糖状/null 糖瓜/null 糖皮质激素/null 糖盒/null 糖稀/null 糖类/null 糖粉/null 糖精/null 糖纸/null 糖脂/null 糖膏/null 糖舌蜜口/null 糖苷/null 糖萝卜/null 糖萼/null 糖葫芦/null 糖蛋白/null 糖蜜/null 糖衣/null 糖衣宣传/null 糖衣炮弹/null 糖质/null 糖酯/null 糖酵解/null 糖酶/null 糖酸/null 糖酸盐/null 糖醇/null 糖醋/null 糖醋肉/null 糖醋里脊/null 糖醋鱼/null 糖量计/null 糖食/null 糗事/null 糗大/null 糙皮病/null 糙米/null 糙粮/null 糙面内质网/null 糜子/null 糜烂/null 糜烂性毒剂/null 糜费/null 糜鹿/null 糟了/null 糟塌/null 糟害/null 糟心/null 糟改/null 糟溜黄鱼/null 糟溜黄鱼片/null 糟粕/null 糟糕/null 糟糠/null 糟糠之妻/null 糟糠之妻不下堂/null 糟行/null 糟践/null 糟踏/null 糟蹋/null 糟透/null 糟齿类爬虫/null 糠油/null 糠疹/null 糠皮/null 糠秕/null 糠醛/null 糠麸/null 糢糊/null 糨子/null 糨糊/null 糯稻/null 糯米/null 糯米粉/null 糯米糍/null 糯米糕/null 糯米纸/null 糯米臀/null 糯麦/null 系上/null 系主任/null 系于/null 系人/null 系从/null 系以/null 系住/null 系内/null 系出名门/null 系刊/null 系列/null 系列产品/null 系列剧/null 系列化/null 系列放大器/null 系列片/null 系囚/null 系在/null 系外/null 系带/null 系念/null 系指/null 系数/null 系有/null 系柱/null 系栓/null 系泊/null 系牢/null 系由/null 系着/null 系窗/null 系紧/null 系结物/null 系统/null 系统分析/null 系统化/null 系统工程/null 系统工程学/null 系统性/null 系统控制/null 系统研究/null 系统管理/null 系统论/null 系绳/null 系缚/null 系而不食/null 系船/null 系词/null 系铃/null 系铃解铃/null 系领带/null 系风捕影/null 系风捕景/null 紊乱/null 紊流/null 素不相识/null 素丝羔羊/null 素丝良马/null 素交/null 素什锦/null 素以/null 素仰/null 素养/null 素净/null 素原促进/null 素口骂人/null 素席/null 素常/null 素性/null 素愿/null 素手/null 素描/null 素数/null 素斋/null 素日/null 素昧平生/null 素昧生平/null 素有/null 素服/null 素未/null 素朴/null 素朴实在论/null 素材/null 素来/null 素油/null 素淡/null 素爱/null 素筵/null 素缎/null 素色/null 素菜/null 素衣/null 素质/null 素质差/null 素质教育/null 素车白马/null 素酒/null 素钢/null 素门凡流/null 素闻/null 素隐行怪/null 素雅/null 素面朝天/null 素颜/null 素食/null 素食主义/null 素食者/null 素餐/null 素餐尸位/null 素馅/null 素馨花/null 素鸡/null 索人/null 索价/null 索价高/null 索债/null 索兴/null 索具/null 索具装置/null 索取/null 索句/null 索命/null 索回/null 索国/null 索垢寻疵/null 索多玛/null 索多玛与哈摩辣/null 索契/null 索子/null 索尔/null 索尔仁尼琴/null 索尔兹伯里平原/null 索尔兹伯里石环/null 索尼/null 索尽枯肠/null 索引/null 索引簿/null 索性/null 索戈拉特斯/null 索拿/null 索捕/null 索普/null 索杰纳/null 索桥/null 索求/null 索然/null 索然寡味/null 索然无味/null 索环/null 索福克勒斯/null 索福克里斯/null 索索/null 索绪尔/null 索罗斯/null 索罗门/null 索菲亚/null 索要/null 索解/null 索讨/null 索贿/null 索赔/null 索赔者/null 索还/null 索道/null 索邦大学/null 索里亚/null 索隐行怪/null 索非亚/null 索韵/null 索饵洄游/null 索马利/null 索马利亚/null 索马里/null 索马里亚/null 索马里人/null 紧了/null 紧促/null 紧俏/null 紧俏商品/null 紧俏货/null 紧凑/null 紧凑型车/null 紧凑渺子线圈/null 紧压茶/null 紧固/null 紧塞/null 紧密/null 紧密团结/null 紧密相联/null 紧密织物/null 紧密结合/null 紧密联系/null 紧密配合/null 紧巴/null 紧巴巴/null 紧带/null 紧张/null 紧张局势/null 紧张状况/null 紧张状态/null 紧张缓和/null 紧急/null 紧急事件/null 紧急会议/null 紧急关头/null 紧急医疗/null 紧急危害/null 紧急应变/null 紧急措施/null 紧急状态/null 紧急疏散/null 紧急通知/null 紧急集合/null 紧扣/null 紧抓/null 紧抱/null 紧挤/null 紧挨/null 紧排/null 紧接/null 紧接着/null 紧接著/null 紧握/null 紧日/null 紧日子/null 紧盯/null 紧着/null 紧箍咒/null 紧紧/null 紧紧张张/null 紧绌/null 紧绑/null 紧绷/null 紧绷绷/null 紧缩/null 紧缺/null 紧胸/null 紧腰衣/null 紧裹/null 紧要/null 紧要关头/null 紧贴/null 紧跟/null 紧跟形势/null 紧身/null 紧身儿/null 紧身衣/null 紧迫/null 紧迫性/null 紧迫感/null 紧迫盯人/null 紧追/null 紧逼/null 紧邻/null 紧锣密鼓/null 紧闭/null 紧附/null 紧随/null 紧随其后/null 紧集/null 紧靠/null 紫丁香/null 紫云/null 紫云英/null 紫光/null 紫坪铺/null 紫坪铺大坝/null 紫坪铺水库/null 紫堇/null 紫外/null 紫外光/null 紫外射线/null 紫外线/null 紫外线光/null 紫外线灯/null 紫式部/null 紫微宫/null 紫微斗数/null 紫斑/null 紫景天/null 紫晶/null 紫杉/null 紫檀/null 紫毫/null 紫气/null 紫气东来/null 紫水晶/null 紫河车/null 紫珠草/null 紫电清霜/null 紫癜/null 紫石英/null 紫石英号/null 紫禁城/null 紫穗槐/null 紫竹/null 紫红/null 紫红色/null 紫缓金章/null 紫罗/null 紫罗兰/null 紫罗兰色/null 紫翠玉/null 紫胶虫/null 紫色/null 紫芝/null 紫芝眉宇/null 紫花/null 紫花地丁/null 紫花苜蓿/null 紫苏/null 紫苏属/null 紫茉莉/null 紫荆/null 紫草/null 紫草科/null 紫草茸/null 紫药水/null 紫菀/null 紫菜/null 紫菜包饭/null 紫菜属/null 紫菜苔/null 紫萍/null 紫葳/null 紫蓝/null 紫薇/null 紫藤/null 紫袍/null 紫袍玉带/null 紫貂/null 紫金/null 紫金山/null 紫金山天文台/null 紫金牛/null 紫铜/null 紫阳/null 紫陌红尘/null 紫雪/null 紫雪糕/null 累世/null 累了/null 累人/null 累倒/null 累债/null 累减/null 累加/null 累加器/null 累加总数/null 累卵/null 累卵之危/null 累及/null 累土聚沙/null 累土至山/null 累坏/null 累块积苏/null 累坠/null 累垮/null 累年/null 累得/null 累得要死/null 累心/null 累教不改/null 累月/null 累月经年/null 累极/null 累次/null 累死/null 累死累活/null 累活/null 累牍/null 累牍连篇/null 累犯/null 累瓦结绳/null 累病/null 累积/null 累积剂量/null 累积者/null 累累/null 累见不鲜/null 累计/null 累赘/null 累足成步/null 累进/null 累进税/null 累进税率/null 累退/null 累鸟/null 絘布/null 絮叨/null 絮嘴/null 絮棉/null 絮烦/null 絮片/null 絮状/null 絮状物/null 絮球/null 絮絮/null 絮絮叨叨/null 絮聒/null 絮语/null 絮说/null 綦江/null 綷縩/null 繁丽/null 繁乱/null 繁体/null 繁体字/null 繁冗/null 繁分数/null 繁刑重敛/null 繁刑重赋/null 繁华/null 繁华损枝/null 繁博/null 繁叶饰/null 繁复/null 繁多/null 繁密/null 繁峙/null 繁弦急管/null 繁征博引/null 繁忙/null 繁文/null 繁文末节/null 繁文缛礼/null 繁文缛节/null 繁文褥节/null 繁昌/null 繁星/null 繁本/null 繁杂/null 繁殖/null 繁殖力/null 繁殖率/null 繁殖者/null 繁琐/null 繁盛/null 繁简/null 繁缛/null 繁育/null 繁芜/null 繁花/null 繁花似锦/null 繁茂/null 繁荣/null 繁荣富强/null 繁荣市场/null 繁荣昌盛/null 繁荣经济/null 繁衍/null 繁重/null 繁闹/null 繁难/null 纂修/null 纠众/null 纠偏/null 纠分/null 纠合/null 纠合之众/null 纠察/null 纠察员/null 纠察队/null 纠弹/null 纠查/null 纠正/null 纠纷/null 纠纷案/null 纠结/null 纠结点/null 纠编/null 纠缠/null 纠缠不休/null 纠缠不清/null 纠缪绳违/null 纠葛/null 纠错/null 纠集/null 纡介不遗/null 纡子/null 纡尊降贵/null 纡朱怀金/null 纡青拖紫/null 红三叶/null 红三叶草/null 红不棱登/null 红与黑/null 红专/null 红丝待选/null 红丝暗系/null 红丹/null 红了/null 红五军团/null 红五星旗/null 红人/null 红光/null 红光满面/null 红六军团/null 红军/null 红净/null 红利/null 红利股票/null 红包/null 红区/null 红十字/null 红卫兵/null 红原/null 红发/null 红古/null 红古区/null 红叶/null 红叶之题/null 红嘴鸥/null 红土/null 红土子/null 红地毯/null 红场/null 红堡/null 红塔/null 红塔区/null 红墨水/null 红壤/null 红外/null 红外光谱/null 红外对抗/null 红外技术/null 红外测距/null 红外热像仪/null 红外线/null 红外线导引飞弹/null 红外线摄影/null 红外线灯/null 红外线瞄准镜/null 红外线通信/null 红头发/null 红头菜/null 红头蝇/null 红契/null 红妆/null 红姑娘/null 红娘/null 红字/null 红学/null 红孩症/null 红安/null 红宝书/null 红宝石/null 红寡妇鸟/null 红寺堡/null 红寺堡区/null 红寺堡镇/null 红小兵/null 红小豆/null 红尘/null 红尘客梦/null 红山/null 红山区/null 红岗/null 红岗区/null 红巨星/null 红巾军/null 红巾起义/null 红布/null 红帽子/null 红彤彤/null 红得发紫/null 红心/null 红愁绿惨/null 红扑扑/null 红教/null 红斑/null 红斑性狼疮/null 红新月/null 红新月会/null 红旗/null 红旗区/null 红旗手/null 红旗报捷/null 红旗竞赛/null 红日/null 红日三竿/null 红星/null 红星区/null 红晕/null 红景天/null 红曲/null 红木/null 红杉/null 红杉木/null 红杏出墙/null 红松/null 红极一时/null 红果/null 红果儿/null 红枣/null 红枪会/null 红柳/null 红树/null 红树林/null 红样/null 红桃/null 红案/null 红桤树/null 红桥/null 红梅/null 红棉/null 红椒/null 红楼/null 红楼梦/null 红榜/null 红模子/null 红樱枪/null 红橙/null 红橙色/null 红橙黄绿蓝靛紫/null 红殷殷/null 红毛/null 红毛丹/null 红毛坭/null 红毯/null 红水晶/null 红汞/null 红河/null 红河哈尼族彝族自治州/null 红河州/null 红油/null 红泥月亮/null 红海/null 红润/null 红潮/null 红火/null 红火蚁/null 红灯/null 红灯区/null 红灯照/null 红灯记/null 红点颏/null 红烛/null 红烧/null 红烧肉/null 红热/null 红煤/null 红熊猫/null 红牌/null 红牛/null 红牛皮菜/null 红狐/null 红玉髓/null 红玛瑙/null 红珊瑚/null 红璧玺/null 红生/null 红男绿女/null 红瘦绿肥/null 红白/null 红白喜事/null 红的/null 红皮/null 红皮书/null 红盘/null 红眼/null 红眼圈/null 红眼病/null 红着脸/null 红矮星/null 红矾/null 红砒/null 红砖/null 红磷/null 红票/null 红种/null 红移/null 红笔/null 红筹股/null 红箍儿/null 红粉/null 红粉青楼/null 红粉青蛾/null 红糖/null 红红/null 红线/null 红细胞/null 红绸/null 红绿/null 红绿灯/null 红缨/null 红缨枪/null 红羊劫/null 红肠/null 红股/null 红肿/null 红背蜘蛛/null 红胡子/null 红脖子/null 红脸/null 红腐贯朽/null 红腹灰雀/null 红臂章/null 红色/null 红色娘子军/null 红色政权/null 红色高棉/null 红艳/null 红艳艳/null 红花/null 红花岗/null 红花岗区/null 红花草/null 红苕/null 红茶/null 红药水/null 红莲/null 红萍/null 红萝卜/null 红葡萄酒/null 红蓝/null 红薯/null 红藤/null 红藻/null 红蛋/null 红蜘蛛/null 红螺/null 红血球/null 红血球生成素/null 红衣/null 红衣主教/null 红衰绿减/null 红袄军/null 红袖添香/null 红装/null 红褐/null 红褐色/null 红角儿/null 红豆/null 红豆沙/null 红豆相思/null 红货/null 红超巨星/null 红轮/null 红辉/null 红辣椒/null 红辣椒粉/null 红运/null 红透/null 红通通/null 红遍/null 红醋栗/null 红铃虫/null 红铜/null 红铜时代/null 红锌矿/null 红隼/null 红霉素/null 红霞/null 红青/null 红鞋/null 红领巾/null 红颈瓣蹼鹬/null 红颜/null 红颜知己/null 红颜薄命/null 红马甲/null 红骨髓/null 红高粱/null 红魔鬼/null 红鱼/null 红鲣/null 红麻/null 红麻料儿/null 纣棍/null 纣辛/null 纤体/null 纤夫/null 纤密/null 纤小/null 纤尘/null 纤尘不染/null 纤屑/null 纤巧/null 纤度/null 纤弱/null 纤微/null 纤悉/null 纤悉不遗/null 纤悉无遗/null 纤手/null 纤指/null 纤柔/null 纤毛/null 纤毛动力蛋白/null 纤毛虫/null 纤毫/null 纤瘦/null 纤纤/null 纤细/null 纤绳/null 纤维/null 纤维丛/null 纤维囊泡症/null 纤维性/null 纤维板/null 纤维植物/null 纤维状/null 纤维症/null 纤维瘤/null 纤维素/null 纤维肌痛/null 纤维胶/null 纤维蛋白/null 纤维蛋白原/null 纤维镜/null 纤美/null 纤腰/null 纤芥/null 纤芯/null 纤芯直径/null 纤道/null 纥字不识/null 约为/null 约之/null 约书亚/null 约书亚记/null 约人/null 约他/null 约会/null 约会对象/null 约伯/null 约伯记/null 约但/null 约但河/null 约值/null 约克/null 约克郡/null 约出/null 约分/null 约制/null 约占/null 约去/null 约合/null 约同/null 约在/null 约坦/null 约塔/null 约契/null 约好/null 约定/null 约定俗成/null 约定资讯速率/null 约当现金/null 约成/null 约拿书/null 约据/null 约摸/null 约数/null 约旦/null 约旦人/null 约旦河/null 约晤/null 约有/null 约期/null 约束/null 约束力/null 约束条件/null 约柜/null 约根/null 约沙法/null 约法/null 约法三章/null 约珥书/null 约瑟/null 约瑟夫/null 约瑟夫・斯大林/null 约略/null 约略估计/null 约稿/null 约章/null 约等于/null 约纳/null 约维克/null 布朗起义/null 约翰・厄普代克/null 约翰・拉贝/null 约翰・本仁/null 约翰・霍金斯/null 约翰一书/null 约翰三书/null 约翰二书/null 约翰保罗/null 约翰内斯堡/null 约翰参书/null 约翰壹书/null 约翰斯顿/null 约翰福音/null 约翰贰书/null 约者/null 约莫/null 约西亚/null 约见/null 约言/null 约计/null 约请/null 约谈/null 约集/null 约需/null 级任/null 级别/null 级差/null 级差地租/null 级强/null 级数/null 级次/null 级联/null 级距/null 纨扇/null 纨绔子弟/null 纨绔弟子/null 纨裤子弟/null 纪事/null 纪事本末体/null 纪传体/null 纪元/null 纪元前/null 纪委/null 纪实/null 纪实小说/null 纪实文学/null 纪层/null 纪年/null 纪录/null 纪录创造者/null 纪录影片/null 纪录片/null 纪律/null 纪律严明/null 纪律处分/null 纪律性/null 纪律整顿/null 纪律科/null 纪念/null 纪念会/null 纪念册/null 纪念品/null 纪念堂/null 纪念塔/null 纪念奖/null 纪念封/null 纪念日/null 纪念活动/null 纪念物/null 纪念碑/null 纪念章/null 纪念邮票/null 纪念馆/null 纪效新书/null 纪昀/null 纪检/null 纪检委/null 纪纲/null 纪纲人伦/null 纪行/null 纪要/null 纫佩/null 纬书/null 纬圈/null 纬地经天/null 纬密/null 纬度/null 纬武经文/null 纬纱/null 纬线/null 纬线圈/null 纬编/null 纬锦/null 纭纭/null 纯一/null 纯为/null 纯作/null 纯净/null 纯利/null 纯利润/null 纯利益/null 纯化/null 纯品/null 纯小数/null 纯属/null 纯属偶然/null 纯度/null 纯态/null 纯情/null 纯收/null 纯收入/null 纯收益/null 纯文字/null 纯文字页/null 纯朴/null 纯棉/null 纯正/null 纯毛/null 纯氧/null 纯洁/null 纯然/null 纯熟/null 纯爱/null 纯牛奶/null 纯理/null 纯白/null 纯真/null 纯真无垢/null 纯碱/null 纯种/null 纯种马/null 纯粹/null 纯粹数学/null 纯系/null 纯素/null 纯素颜/null 纯素食/null 纯素食主义/null 纯素食者/null 纯纯/null 纯绵/null 纯美/null 纯色/null 纯苯/null 纯血种/null 纯血统/null 纯金/null 纯钢/null 纯铁/null 纯银/null 纯音/null 纰漏/null 纰缪/null 纱包/null 纱包线/null 纱厂/null 纱头/null 纱巾/null 纱布/null 纱布口罩/null 纱带/null 纱帽/null 纱支/null 纱橱/null 纱灯/null 纱窗/null 纱笼/null 纱筒/null 纱管/null 纱线/null 纱绽/null 纱罩/null 纱车/null 纱锭/null 纲丝绳/null 纲举目张/null 纲常/null 纲常扫地/null 纲目/null 纲目不疏/null 纲目体/null 纲索/null 纲纪/null 纲纪废弛/null 纲要/null 纲记/null 纲领/null 纲领性/null 纲领性文件/null 纳人/null 纳什/null 纳入/null 纳凉/null 纳匝肋/null 纳卫星/null 纳吉布/null 纳员/null 纳垢藏污/null 纳塔乃耳/null 纳士招贤/null 纳妾/null 纳尔逊/null 纳尼亚/null 纳尼亚传奇/null 纳屡踵决/null 纳彩/null 纳德阿里/null 纳扎尔巴耶夫/null 纳指/null 纳撒尼尔・霍桑/null 纳斯达克/null 纳新/null 纳新吐故/null 纳星/null 纳木错/null 纳杰夫/null 纳树/null 纳污/null 纳溪/null 纳溪区/null 纳瓦特尔语/null 纳瓦萨/null 纳福/null 纳秒/null 纳税/null 纳税人/null 纳米/null 纳米技术/null 纳米比亚/null 纳粮/null 纳粹/null 纳粹主义/null 纳粹党/null 纳粹分子/null 纳粹化/null 纳粹德国/null 纳罕/null 纳聘/null 纳芬/null 纳西/null 纳言/null 纳谏/null 纳谏如流/null 纳豆/null 纳豆菌/null 纳贡/null 纳贡称臣/null 纳贿/null 纳赛尔/null 纳赫雄/null 纳闷/null 纳闷儿/null 纳闽/null 纳降/null 纳雍/null 纳霍德卡/null 纳鞋/null 纳骨堂/null 纳鸿/null 纴织/null 纵令/null 纵任/null 纵使/null 纵停留时间/null 纵切面/null 纵列/null 纵剖面/null 纵向/null 纵坐标/null 纵声/null 纵容/null 纵帆/null 纵座标/null 纵情/null 纵情恣欲/null 纵情遂欲/null 纵情酒色/null 纵意/null 纵排/null 纵断面/null 纵曲枉直/null 纵杆/null 纵梁/null 纵横/null 纵横交贯/null 纵横交错/null 纵横天下/null 纵横字/null 纵横字谜/null 纵横家/null 纵横捭阖/null 纵横驰骋/null 纵欲/null 纵步/null 纵波/null 纵深/null 纵火/null 纵火犯/null 纵火者/null 纵然/null 纵目/null 纵神经索/null 纵纹/null 纵线/null 纵肌/null 纵虎归山/null 纵裂/null 纵观/null 纵览/null 纵言/null 纵论/null 纵谈/null 纵贯/null 纵身/null 纵轴/null 纵酒/null 纵长/null 纵队/null 纵隔/null 纵风止燎/null 纵马横刀/null 纶巾/null 纷乱/null 纷争/null 纷华/null 纷吹/null 纷呈/null 纷扰/null 纷披/null 纷杂/null 纷沓/null 纷繁/null 纷红骇绿/null 纷纭/null 纷纭杂沓/null 纷纶/null 纷纷/null 纷纷扬扬/null 纷纷攘攘/null 纷纷籍籍/null 纷聚/null 纷至沓来/null 纷落/null 纷飞/null 纸上/null 纸上谈兵/null 纸人/null 纸人纸马/null 纸伞/null 纸做/null 纸刀/null 纸包不住火/null 纸包饮品/null 纸卷/null 纸厂/null 纸压/null 纸叶子/null 纸品/null 纸团/null 纸型/null 纸垫/null 纸堆/null 纸头/null 纸夹/null 纸婚/null 纸媒/null 纸媒儿/null 纸孔/null 纸屑/null 纸巾/null 纸币/null 纸带/null 纸张/null 纸扇/null 纸捻/null 纸条/null 纸杯/null 纸板/null 纸板盒/null 纸样/null 纸框/null 纸桨/null 纸桶/null 纸浆/null 纸浆质/null 纸火柴/null 纸灯/null 纸灰/null 纸烟/null 纸煤儿/null 纸片/null 纸版/null 纸牌/null 纸盆/null 纸盒/null 纸盒纸/null 纸盘/null 纸短情长/null 纸笔/null 纸箔/null 纸管/null 纸箱/null 纸篓/null 纸簿/null 纸类/null 纸糊/null 纸绳/null 纸老虎/null 纸色/null 纸芯/null 纸花/null 纸茑/null 纸草/null 纸袋/null 纸证/null 纸贵洛城/null 纸边/null 纸醉金迷/null 纸里包不住火/null 纸钱/null 纸锭/null 纸面/null 纸页/null 纸饰/null 纸马/null 纸马儿/null 纸鱼/null 纸鸢/null 纸鹞/null 纸鹤/null 纸黄金/null 纹丝/null 纹丝不动/null 纹丝儿/null 纹儿/null 纹刺/null 纹印/null 纹层/null 纹布/null 纹沟/null 纹法/null 纹理/null 纹理状/null 纹眉/null 纹章/null 纹章学/null 纹线/null 纹缕/null 纹缕儿/null 纹路/null 纹路儿/null 纹身/null 纹银/null 纹面/null 纹风不动/null 纹饰/null 纺丝/null 纺成/null 纺纱/null 纺纱机/null 纺线/null 纺织/null 纺织业/null 纺织厂/null 纺织品/null 纺织娘/null 纺织工业/null 纺织工业部/null 纺织成/null 纺织机/null 纺织物/null 纺织纤维/null 纺织者/null 纺织部/null 纺绸/null 纺车/null 纺轮/null 纺锤/null 纺锤形/null 纺锤状/null 纺锭/null 纽伦堡/null 纽几内亚/null 纽卡斯尔/null 纽卡素/null 纽国/null 纽埃/null 纽子/null 纽带/null 纽扣/null 纽扣儿/null 纽时/null 纽泽西/null 纽瓦克/null 纽约/null 纽约人/null 纽约大学/null 纽约客/null 纽约州/null 纽约市/null 纽约帝国大厦/null 纽约时报/null 纽约证券交易所/null 纽约邮报/null 纽绊/null 纽芬兰/null 纽芬兰与拉布拉多/null 纽芬兰人/null 纽襻/null 纽西兰/null 纾困/null 纾缓/null 纾解/null 线上/null 线上查询/null 线下/null 线人/null 线卡/null 线呢/null 线哨/null 线团/null 线图/null 线圈/null 线圈般/null 线坯子/null 线型/null 线外/null 线头/null 线宽/null 线式/null 线形/null 线形动物/null 线性/null 线性代数/null 线性元件/null 线性函数/null 线性化/null 线性变换/null 线性方程/null 线性波/null 线性算子/null 线性系统/null 线性规划/null 线抽傀儡/null 线断风筝/null 线春/null 线杆/null 线材/null 线条/null 线栏/null 线桄子/null 线槽/null 线段/null 线毯/null 线民/null 线状/null 线球/null 线电压/null 线盘/null 线程/null 线粒体/null 线索/null 线绳/null 线缆/null 线胀系数/null 线脚/null 线膨胀/null 线般/null 线虫/null 线虫类/null 线衣/null 线袜/null 线装/null 线装书/null 线西/null 线西乡/null 线规/null 线路/null 线轴/null 线轴儿/null 线速度/null 线锯/null 线香/null 线麻/null 绀青/null 练习/null 练习册/null 练习场/null 练习曲/null 练习本/null 练习生/null 练习簿/null 练习题/null 练了/null 练人/null 练兵/null 练兵场/null 练功/null 练厂/null 练声/null 练字/null 练就/null 练成/null 练打/null 练拳/null 练武/null 练球/null 练练/null 练达/null 练达老成/null 练金/null 练队/null 练鹊/null 练齿/null 组件/null 组分/null 组别/null 组合/null 组合图/null 组合夹具/null 组合式/null 组合数学/null 组合机床/null 组合柜/null 组合论/null 组合音响/null 组员/null 组团/null 组图/null 组块/null 组委/null 组委会/null 组字/null 组屋/null 组建/null 组成/null 组成者/null 组成部分/null 组播/null 组曲/null 组歌/null 组氨酸/null 组版/null 组画/null 组稿/null 组织/null 组织上/null 组织体制/null 组织关系/null 组织化/null 组织原则/null 组织委员/null 组织委员会/null 组织学/null 组织性/null 组织沿革/null 组织法/null 组织活动/null 组织浆霉菌病/null 组织液/null 组织生活/null 组织疗法/null 组织纪律/null 组织纪律性/null 组织者/null 组织胞浆菌病/null 组织胺/null 组织观念/null 组织路线/null 组织部/null 组织部长/null 组织部门/null 组胺/null 组装/null 组训/null 组词/null 组配/null 组长/null 组间/null 组阁/null 组项/null 绅士/null 绅士们/null 绅士协定/null 绅宦/null 绅耆/null 细不容发/null 细丝/null 细丝带/null 细丝状/null 细了/null 细作/null 细分/null 细切/null 细则/null 细别/null 细动脉/null 细化/null 细发/null 细叶脉/null 细听/null 细咬/null 细品/null 细嚼/null 细嚼慢咽/null 细圆/null 细声/null 细声细气/null 细大不捐/null 细大不逾/null 细大无遗/null 细如/null 细嫩/null 细孔/null 细密/null 细察/null 细小/null 细尾獴/null 细工/null 细巧/null 细布/null 细帐/null 细底/null 细弱/null 细弹/null 细微/null 细微末节/null 细心/null 细情/null 细想/null 细挑/null 细故/null 细数/null 细明体/null 细木/null 细木工板/null 细末/null 细条/null 细条纹/null 细枝/null 细枝末节/null 细枝条/null 细枝状/null 细查/null 细梳/null 细棒/null 细毛/null 细毛羊/null 细水长流/null 细沙/null 细沟/null 细河/null 细河区/null 细活/null 细流/null 细润/null 细瓷/null 细痕/null 细的/null 细盐/null 细目/null 细看/null 细短/null 细砂/null 细碎/null 细磨刀石/null 细究/null 细算/null 细管/null 细类/null 细粉/null 细粒/null 细粮/null 细纱/null 细纺/null 细线/null 细细/null 细细品味/null 细细地流/null 细绳/null 细缝/null 细胞/null 细胞体/null 细胞内/null 细胞分裂/null 细胞周期/null 细胞器/null 细胞器官/null 细胞因子/null 细胞培养/null 细胞培养器/null 细胞壁/null 细胞外液/null 细胞学/null 细胞核/null 细胞毒/null 细胞毒性/null 细胞液/null 细胞生物学/null 细胞膜/null 细胞色素/null 细胞融合/null 细胞质/null 细胞骨架/null 细胶团/null 细腰/null 细腻/null 细致/null 细节/null 细菌/null 细菌学/null 细菌性痢疾/null 细菌战/null 细菌武器/null 细菌状/null 细菌病毒/null 细菌群/null 细菌肥料/null 细菜/null 细表/null 细语/null 细说/null 细读/null 细读者/null 细调/null 细谈/null 细软/null 细辛/null 细过/null 细述/null 细选/null 细部/null 细量/null 细针密线/null 细针密缕/null 细铅字/null 细长/null 细雨/null 细音/null 细颈/null 细颈瓶/null 细香葱/null 细高/null 细高挑儿/null 细齿/null 织为/null 织了/null 织入/null 织出/null 织厂/null 织合/null 织品/null 织在/null 织女/null 织女星/null 织工/null 织布/null 织布机/null 织式/null 织当访婢/null 织成/null 织机/null 织染/null 织法/null 织物/null 织物组织/null 织田信长/null 织着/null 织纴/null 织网/null 织花/null 织补/null 织补物/null 织袜/null 织边/null 织造/null 织金/null 织金锦/null 织锦/null 织锦回文/null 织锦画/null 织锦缎/null 终一/null 终世若一/null 终久/null 终了/null 终于/null 终产物/null 终伏/null 终会/null 终值/null 终傅/null 终其/null 终南/null 终南山/null 终南捷径/null 终古/null 终句/null 终因/null 终场/null 终场锣声/null 终声/null 终夜/null 终天/null 终天之恨/null 终天之慕/null 终天抱恨/null 终如/null 终始不渝/null 终审/null 终审法院/null 终将/null 终局/null 终岁/null 终年/null 终年积雪/null 终归/null 终性/null 终成/null 终成泡影/null 终成眷属/null 终战/null 终战日/null 终日/null 终曲/null 终有/null 终期/null 终期癌/null 终极/null 终止/null 终点/null 终点地址/null 终点站/null 终点线/null 终焉之志/null 终生/null 终生伴侣/null 终生教育/null 终究/null 终站/null 终竟/null 终端/null 终端机/null 终端用户/null 终端设备/null 终篇/null 终结/null 终结者/null 终结部/null 终老/null 终而复始/null 终身/null 终身为父/null 终身伴侣/null 终身制/null 终身大事/null 终身监禁/null 终身职/null 终速/null 终霜/null 终须/null 终须绿叶扶持/null 绉布/null 绉痕/null 绉纱/null 绉纹/null 绉褶/null 绉起/null 绉边/null 绊住/null 绊倒/null 绊网/null 绊脚/null 绊脚石/null 绊跤/null 绍介/null 绍兴/null 绍兴地区/null 绍兴酒/null 绍剧/null 绍莫吉州/null 绍酒/null 绎克一物/null 绎出/null 绎性/null 绎法/null 经一事长一智/null 经上级批准/null 经不住/null 经不起/null 经不起推究/null 经世/null 经世之才/null 经丝彩色显花/null 经久/null 经久不息/null 经久不衰/null 经久耐用/null 经书/null 经互会/null 经人介绍/null 经传/null 经典/null 经典动力系统/null 经典场论/null 经典案例/null 经典著作/null 经办/null 经办人/null 经匣/null 经卦/null 经卷/null 经历/null 经历风雨/null 经受/null 经受住/null 经史/null 经史子集/null 经合/null 经合组织/null 经售/null 经商/null 经国之才/null 经圈/null 经堂/null 经处/null 经天纬地/null 经委/null 经学/null 经官动府/null 经密/null 经已/null 经常/null 经常化/null 经常性/null 经幢/null 经年/null 经年累月/null 经度/null 经得住/null 经得起/null 经心/null 经意/null 经手/null 经手人/null 经援/null 经撞/null 经文/null 经文歌/null 经文纬武/null 经明行修/null 经期/null 经查/null 经武纬文/null 经气聚集/null 经洗/null 经济/null 经济上/null 经济主义/null 经济人/null 经济仓/null 经济体制/null 经济体系/null 经济作物/null 经济共同体/null 经济制度/null 经济制裁/null 经济前途/null 经济力量/null 经济区/null 经济协力开发机构/null 经济危机/null 经济危机周期/null 经济发展/null 经济合作与发展组织/null 经济周期/null 经济唯物主义/null 经济困境/null 经济基础/null 经济增加值/null 经济增长/null 经济增长率/null 经济学/null 经济学家/null 经济学者/null 经济安全/null 经济座/null 经济强区/null 经济强国/null 经济强省/null 经济情况/null 经济成分/null 经济改革/null 经济效益/null 经济斗争/null 经济日报/null 经济昆虫/null 经济有效/null 经济杂交/null 经济林/null 经济核算/null 经济法/null 经济活动/null 经济派/null 经济特区/null 经济状况/null 经济界/null 经济社会及文化权利国际公约/null 经济管理/null 经济紧缩/null 经济繁荣/null 经济罢工/null 经济舱/null 经济萧条/null 经济落后/null 经济衰退/null 经济规律/null 经济问题/null 经热/null 经理/null 经理部/null 经用/null 经由/null 经界/null 经略/null 经痛/null 经看/null 经研究决定/null 经筵/null 经管/null 经籍/null 经籍志/null 经纪/null 经纪业/null 经纪人/null 经纬/null 经纬仪/null 经纬天下/null 经纬度/null 经纬线/null 经纬网/null 经纱/null 经纶/null 经纶济世/null 经纶满腹/null 经线/null 经络/null 经编/null 经而/null 经脉/null 经营/null 经营之道/null 经营型/null 经营思想/null 经营承包/null 经营承包制/null 经营承包责任制/null 经营擘划/null 经营效果/null 经营方式/null 经营有术/null 经营机制/null 经营权/null 经营管理/null 经营管理和维护/null 经营管理权/null 经营者/null 经营自主权/null 经营费用/null 经营部/null 经血/null 经行/null 经表/null 经许可/null 经论/null 经贸/null 经贸公司/null 经贸合作/null 经贸部/null 经费/null 经费支出/null 经轴/null 经过/null 经邦论道/null 经部/null 经销/null 经销商/null 经销权/null 经销部/null 经锦/null 经闭/null 经陆路/null 经院/null 经院哲学/null 经风雨见世面/null 经验/null 经验一元论/null 经验丰富/null 经验主义/null 经验之谈/null 经验交流/null 经验交流会/null 经验性/null 经验总结/null 经验批判主义/null 经验教训/null 经验符号论/null 经验论/null 绑上/null 绑住/null 绑匪/null 绑在/null 绑定/null 绑好/null 绑带/null 绑扎/null 绑架/null 绑牢/null 绑票/null 绑紧/null 绑缚/null 绑腿/null 绑走/null 绑赴/null 绑赴市曹/null 绑起/null 绒丝带/null 绒似/null 绒头绳/null 绒布/null 绒帽/null 绒毛/null 绒毛似/null 绒毛性腺激素/null 绒毛状/null 绒毛膜/null 绒毯/null 绒状/null 绒的/null 绒类/null 绒线/null 绒绒/null 绒绣/null 绒花/null 绒螯蟹/null 绒衣/null 绒被/null 绒裤/null 绒面/null 绒领/null 绒鸟/null 结下/null 结业/null 结业生/null 结业证书/null 结为/null 结义/null 结了/null 结了婚/null 结交/null 结亲/null 结仇/null 结付/null 结伙/null 结伴/null 结伴而行/null 结余/null 结余归己/null 结党/null 结党联群/null 结党聚群/null 结党营私/null 结冰/null 结冻/null 结出/null 结单/null 结发/null 结发夫妻/null 结合/null 结合体/null 结合力/null 结合实际/null 结合律/null 结合模型/null 结合水/null 结合者/null 结合能/null 结合膜/null 结合过程/null 结喉/null 结块/null 结垢/null 结壳/null 结婚/null 结婚前/null 结婚后/null 结婚期/null 结婚登记/null 结婚礼/null 结婚纪念日/null 结婚证/null 结子/null 结存/null 结实/null 结实粗壮/null 结对子/null 结尾/null 结尾辞/null 结局/null 结巴/null 结帐/null 结带/null 结幕/null 结平/null 结庐/null 结彩/null 结怨/null 结成/null 结扎/null 结扎带/null 结扎线/null 结拜/null 结晶/null 结晶体/null 结晶学/null 结晶水/null 结晶状/null 结有/null 结末/null 结束/null 结束工作/null 结束语/null 结构/null 结构上/null 结构主义/null 结构力学/null 结构助词/null 结构图/null 结构式/null 结构性/null 结构模式/null 结构物/null 结构理论/null 结构设计/null 结构调整/null 结构钢/null 结果/null 结核/null 结核性/null 结核杆菌/null 结核病/null 结核菌素/null 结案/null 结欠/null 结欢/null 结止/null 结水/null 结汇/null 结清/null 结满/null 结点/null 结焦/null 结牢/null 结物/null 结环/null 结球甘蓝/null 结球白菜/null 结界/null 结疤/null 结痂/null 结症/null 结盟/null 结石/null 结石病/null 结社/null 结社自由/null 结穴/null 结算/null 结算方式/null 结纳/null 结结/null 结结实实/null 结结巴巴/null 结绳/null 结绳而治/null 结缔组织/null 结缘/null 结缡/null 结缨/null 结网/null 结肠/null 结肠炎/null 结肠镜检查/null 结脉/null 结膜/null 结膜炎/null 结舌/null 结舌杜口/null 结节/null 结草/null 结草悬环/null 结草衔环/null 结褵/null 结记/null 结论/null 结论性/null 结识/null 结语/null 结账/null 结转/null 结过/null 结过婚/null 结连/null 结邻/null 结队/null 结队成群/null 结集/null 结霜/null 结露/null 结驷联骑/null 绔子/null 绔带/null 绔裙/null 绕一周/null 绕以/null 绕口/null 绕口令/null 绕嘴/null 绕回/null 绕圈/null 绕圈子/null 绕地/null 绕地球/null 绕射/null 绕开/null 绕弯/null 绕弯儿/null 绕弯子/null 绕弯子儿/null 绕成/null 绕手/null 绕指柔肠/null 绕来绕去/null 绕梁三日/null 绕梁之音/null 绕毓/null 绕流/null 绕物/null 绕着/null 绕组/null 绕绕/null 绕脖/null 绕脖子/null 绕腾/null 绕膝/null 绕膝承欢/null 绕舌/null 绕航/null 绕虫/null 绕行/null 绕行者/null 绕越/null 绕路/null 绕过/null 绕远/null 绕远儿/null 绕道/null 绕道而行/null 绗缝/null 绘事/null 绘事后素/null 绘具箱/null 绘出/null 绘制/null 绘图/null 绘图仪/null 绘图技术/null 绘图机/null 绘图板/null 绘图法/null 绘声绘影/null 绘声绘色/null 绘影绘声/null 绘成/null 绘架座/null 绘画/null 绘画般/null 绘色/null 给与/null 给与者/null 给予/null 给事/null 给于/null 给人/null 给以/null 给你点颜色看看/null 给做/null 给养/null 给出/null 给力/null 给定/null 给水/null 给水保障/null 给水器材/null 给物/null 给用户/null 给穿/null 给药/null 给足/null 绚丽/null 绚丽多姿/null 绚丽多彩/null 绚烂/null 绛紫/null 络丝/null 络合/null 络合物/null 络子/null 络状/null 络盐/null 络线/null 络绎/null 络绎不绝/null 络腮/null 络腮胡子/null 络酸盐/null 绝不/null 绝不会/null 绝不止于此/null 绝不食言/null 绝世/null 绝世佳人/null 绝世出尘/null 绝世无伦/null 绝世无双/null 绝世独立/null 绝世超伦/null 绝了/null 绝交/null 绝产/null 绝人/null 绝仁弃义/null 绝代/null 绝代佳人/null 绝伦/null 绝作/null 绝佳/null 绝俗离世/null 绝倒/null 绝口/null 绝口不提/null 绝口不道/null 绝句/null 绝后/null 绝后光前/null 绝命/null 绝命书/null 绝品/null 绝响/null 绝唱/null 绝嗣/null 绝国殊俗/null 绝圣弃智/null 绝地/null 绝域/null 绝域异方/null 绝域殊方/null 绝境/null 绝壁/null 绝处逢生/null 绝大/null 绝大多数/null 绝大多数人/null 绝大部分/null 绝妙/null 绝妙好辞/null 绝子绝孙/null 绝学/null 绝密/null 绝密件/null 绝密文件/null 绝对/null 绝对主义/null 绝对值/null 绝对化/null 绝对命令/null 绝对唯心主义/null 绝对地址/null 绝对地租/null 绝对大多数/null 绝对平均主义/null 绝对性/null 绝对数/null 绝对数字/null 绝对民主/null 绝对温度/null 绝对温标/null 绝对湿度/null 绝对真理/null 绝对观念/null 绝对误差/null 绝对连续/null 绝对零度/null 绝对高度/null 绝少分甘/null 绝尘拔俗/null 绝径/null 绝念/null 绝情/null 绝户/null 绝才/null 绝技/null 绝招/null 绝无/null 绝无仅有/null 绝无可疑/null 绝早/null 绝景/null 绝望/null 绝望的境地/null 绝气/null 绝法/null 绝活/null 绝活儿/null 绝渡逢舟/null 绝灭/null 绝热/null 绝热漆/null 绝然/null 绝版/null 绝甘分少/null 绝症/null 绝着/null 绝种/null 绝笔/null 绝等/null 绝粒/null 绝粮/null 绝经/null 绝经期/null 绝续/null 绝缘/null 绝缘体/null 绝缘子/null 绝缘材料/null 绝缘漆/null 绝缘纸/null 绝罚/null 绝育/null 绝育术/null 绝色/null 绝色佳人/null 绝艺/null 绝裾而去/null 绝诗/null 绝诣/null 绝路/null 绝迹/null 绝配/null 绝长继短/null 绝长续短/null 绝长补短/null 绝门儿/null 绝非/null 绝非易事/null 绝顶/null 绝顶聪明/null 绝食/null 绝食抗议/null 绞丝/null 绞人/null 绞刀/null 绞刑/null 绞刑具/null 绞刑架/null 绞包针/null 绞合/null 绞尽脑汁/null 绞手/null 绞扭/null 绞接/null 绞杀/null 绞杀战/null 绞杀者/null 绞架/null 绞死/null 绞痛/null 绞盘/null 绞盘机/null 绞碎/null 绞索/null 绞绳/null 绞缠/null 绞缢/null 绞肉/null 绞肉机/null 绞肠痧/null 绞脑汁/null 绞衣机/null 绞起/null 绞车/null 绞链/null 绞首/null 统一/null 统一体/null 统一分配/null 统一化/null 统一发票/null 统一口径/null 统一大业/null 统一思想/null 统一性/null 统一战线/null 统一战线工作部/null 统一战线理论/null 统一招生/null 统一新罗/null 统一标准/null 统一码/null 统一祖国/null 统一组织/null 统一经营/null 统一者/null 统一规划/null 统一认识/null 统一资源/null 统一资源定位/null 统一资源定位符/null 统一领导/null 统借/null 统假设/null 统共/null 统分/null 统分结合/null 统制/null 统化/null 统合/null 统属/null 统帅/null 统帅体制/null 统帅机构/null 统帅部/null 统带/null 统建/null 统御/null 统御力/null 统感/null 统战/null 统战部/null 统揽/null 统摄/null 统操/null 统支/null 统收/null 统汉字/null 统治/null 统治权/null 统治者/null 统治阶级/null 统派/null 统独/null 统率/null 统由/null 统称/null 统称为/null 统稿/null 统筹/null 统筹兼顾/null 统筹学/null 统筹安排/null 统筹法/null 统管/null 统统/null 统缉/null 统编/null 统考/null 统舱/null 统观/null 统觉/null 统计/null 统计分析/null 统计员/null 统计学/null 统计学史/null 统计局/null 统计工作/null 统计指标/null 统计数字/null 统计数据/null 统计法/null 统计理论/null 统计监督/null 统计结果/null 统计表/null 统计调查/null 统计资料/null 统记/null 统讲/null 统货/null 统购/null 统购派购/null 统购统销/null 统辖/null 统还/null 统选/null 统通/null 统配/null 统铺/null 统销/null 统靴/null 统领/null 统驭/null 绠短汲深/null 绢丝/null 绢人/null 绢印/null 绢子/null 绢布/null 绢本/null 绢纺/null 绢绸/null 绢花/null 绣像/null 绣口锦心/null 绣品/null 绣墩/null 绣墩草/null 绣帷/null 绣房/null 绣法/null 绣球/null 绣球花/null 绣球藤/null 绣球风/null 绣花/null 绣花枕头/null 绣花鞋/null 绣虎雕龙/null 绣衣/null 绣边/null 绣鞋/null 绥中/null 绥化/null 绥化地区/null 绥宁/null 绥德/null 绥棱/null 绥江/null 绥滨/null 绥芬河/null 绥远/null 绥远省/null 绥阳/null 绥靖/null 绥靖主义/null 绥靖政策/null 绦子/null 绦带/null 绦纶/null 绦虫/null 绦虫病/null 绦虫纲/null 继业/null 继之/null 继亲/null 继任/null 继任者/null 继位/null 继发/null 继发性/null 继嗣/null 继天立极/null 继女/null 继子/null 继子女/null 继室/null 继往/null 继往开来/null 继志述事/null 继承/null 继承人/null 继承性/null 继承权/null 继承法/null 继承物/null 继承者/null 继承衣钵/null 继晷焚膏/null 继武/null 继母/null 继父/null 继父母/null 继电器/null 继绝兴亡/null 继绝存亡/null 继绝扶倾/null 继续/null 继续性/null 继续走/null 继续革命/null 继而/null 继起/null 继踵而至/null 继进/null 继配/null 绩效/null 绩效不彰/null 绩溪/null 绪上/null 绪言/null 绪论/null 绪语/null 绫子/null 绫绢/null 绫罗/null 续书/null 续任/null 续保/null 续借/null 续假/null 续前/null 续加/null 续发感染/null 续后/null 续和/null 续增/null 续娶/null 续存/null 续完/null 续局/null 续建/null 续弦/null 续报/null 续教/null 续文/null 续断/null 续期/null 续杯/null 续流/null 续版/null 续租/null 续签/null 续篇/null 续约/null 续续/null 续编/null 续聘/null 续航/null 续航力/null 续行/null 续表/null 续西游记/null 续订/null 续貂/null 续跌/null 续集/null 续革/null 续音/null 绮丽/null 绮云/null 绮井/null 绮室/null 绮岁/null 绮年/null 绮思/null 绮想/null 绮想曲/null 绮梦/null 绮灿/null 绮窗/null 绮筵/null 绮绣/null 绮罗/null 绮罗粉黛/null 绮色佳/null 绮衣/null 绮襦纨绔/null 绮语/null 绮貌/null 绮陌/null 绮靡/null 绯红/null 绯色新闻/null 绯闻/null 绰号/null 绰敬/null 绰有余裕/null 绰约/null 绰约多姿/null 绰绰/null 绰绰有余/null 绰绰有裕/null 绲边/null 绳之以法/null 绳儿/null 绳其祖武/null 绳厥祖武/null 绳墨/null 绳墨之言/null 绳套/null 绳子/null 绳带/null 绳床/null 绳床瓦灶/null 绳愆纠缪/null 绳愆纠谬/null 绳技/null 绳文/null 绳杆/null 绳枢之士/null 绳枢之子/null 绳栓/null 绳梯/null 绳环/null 绳索/null 绳索套/null 绳线/null 绳绑/null 绳结/null 绳网/null 绳趋尺步/null 绳锯木断/null 维也纳/null 维也纳会议/null 维京人/null 维他命/null 维修/null 维修保养/null 维修区/null 维修服务/null 维修部/null 维克多・雨果/null 维克托/null 维吉尔/null 维吉尼亚/null 维吾尔/null 维吾尔人/null 维吾尔语/null 维和/null 维和部队/null 维基/null 维基媒体基金会/null 维基数据/null 维基物种/null 维基词典/null 维多利亚/null 维多利亚公园/null 维多利亚女王/null 维多利亚岛/null 维多利亚州/null 维多利亚港/null 维多利亚湖/null 维多利亚瀑布/null 维奇/null 维妙维肖/null 维它命/null 维尔容/null 维尔斯特拉斯/null 维尔纽斯/null 维尼熊/null 维尼纶/null 维度/null 维德角/null 维恩图解/null 维扬/null 维扬区/null 维护/null 维护世界和平/null 维护和平/null 维护好/null 维护者/null 维拉/null 维持/null 维持会/null 维持原判/null 维持生活/null 维持秩序/null 维持费/null 维数/null 维文/null 维新/null 维新变法/null 维新派/null 维族/null 维权/null 维权人士/null 维棉布/null 维港/null 维特/null 维特根斯坦/null 维珍/null 维生/null 维生素/null 维管/null 维管束/null 维管束植物/null 维管柱/null 维系/null 维纳斯/null 维纶/null 维罗纳/null 维艰/null 维萨/null 维西傈僳族自治县/null 维西县/null 维谷/null 维达/null 维面/null 绵亘/null 绵力/null 绵力薄材/null 绵子/null 绵密/null 绵延/null 绵延不绝/null 绵延起伏/null 绵惙/null 绵白糖/null 绵竹/null 绵竹县/null 绵纸/null 绵绵/null 绵绵不息/null 绵绵不绝/null 绵绵瓜瓞/null 绵绸/null 绵羊/null 绵联/null 绵薄/null 绵裹秤锤/null 绵软/null 绵远/null 绵邈/null 绵里藏针/null 绵长/null 绵阳/null 绵阳地区/null 绵马/null 绶带/null 绶带鸟/null 绷住/null 绷场面/null 绷子/null 绷巴吊拷/null 绷带/null 绷床/null 绷开/null 绷得/null 绷扒吊拷/null 绷瓷/null 绷直/null 绷着脸/null 绷簧/null 绷紧/null 绷脸/null 绷著脸/null 绸丝/null 绸伞/null 绸子/null 绸布/null 绸纹纸/null 绸缎/null 绸缪/null 绸舞/null 绸锻/null 综上/null 综上所述/null 综丝/null 综合/null 综合业务数字网/null 综合体/null 综合分析/null 综合利用/null 综合叙述/null 综合商店/null 综合国力/null 综合大学/null 综合奖/null 综合布线/null 综合平衡/null 综合开发/null 综合征/null 综合性/null 综合报导/null 综合报道/null 综合服务数位网络/null 综合法/null 综合疗法/null 综合症/null 综合研究/null 综合经营/null 综合者/null 综合艺术/null 综合语/null 综合防治/null 综括/null 综效/null 综析/null 综艺/null 综艺大观/null 综艺节目/null 综观/null 综览/null 综计/null 综述/null 绽开/null 绽放/null 绽破/null 绽线/null 绽裂/null 绽露/null 绾带/null 绾毂/null 绿党/null 绿内障/null 绿化/null 绿化祖国/null 绿区/null 绿卡/null 绿叶/null 绿叶成荫/null 绿叶类蔬菜/null 绿园/null 绿园区/null 绿地/null 绿坝/null 绿坝・花季护航/null 绿头/null 绿头巾/null 绿头鸭/null 绿女红男/null 绿宝石/null 绿岛/null 绿岛乡/null 绿带区/null 绿帽/null 绿帽子/null 绿惨红愁/null 绿意/null 绿旗兵/null 绿春/null 绿暗红稀/null 绿松/null 绿松石/null 绿林/null 绿林好汉/null 绿林豪客/null 绿林起义/null 绿柱玉/null 绿柱石/null 绿树/null 绿树成荫/null 绿水/null 绿水青山/null 绿油油/null 绿泥石/null 绿洲/null 绿灯/null 绿灰色/null 绿玉髓/null 绿玛瑙/null 绿的/null 绿皮/null 绿皮书/null 绿眼/null 绿矾/null 绿竹/null 绿箭/null 绿篱/null 绿绿/null 绿肥/null 绿肥作物/null 绿肥红瘦/null 绿脓杆菌/null 绿色/null 绿色和平/null 绿色工程/null 绿色植物/null 绿色革命/null 绿色食品/null 绿芽/null 绿苔/null 绿茵/null 绿茵场/null 绿茵茵/null 绿茶/null 绿茸茸/null 绿草/null 绿草如茵/null 绿荫/null 绿莹莹/null 绿菜花/null 绿营/null 绿营兵/null 绿蓝/null 绿蔷薇/null 绿藻/null 绿衣使者/null 绿衣黄里/null 绿豆/null 绿豆蝇/null 绿赤杨/null 绿野/null 绿锈/null 绿闪石/null 绿阴/null 绿雀/null 绿霉素/null 绿青/null 绿鬓朱颜/null 缀合/null 缀字/null 缀字课本/null 缀文/null 缀文之士/null 缀饰/null 缄口/null 缄口不言/null 缄口如瓶/null 缄口结舌/null 缄封/null 缄舌封口/null 缄舌结口/null 缄舌闭口/null 缄言/null 缄默/null 缅元/null 缅因/null 缅因州/null 缅怀/null 缅想/null 缅文/null 缅甸人/null 缅甸币/null 缅甸联邦/null 缅甸语/null 缅茄/null 缅语/null 缅邈/null 缆桩/null 缆索/null 缆索吊椅/null 缆索道/null 缆线/null 缆绳/null 缆车/null 缆道/null 缉拿/null 缉捕/null 缉查/null 缉毒/null 缉毒犬/null 缉盗/null 缉私/null 缉获/null 缉访/null 缎子/null 缎布/null 缎带/null 缎纹/null 缎纹织/null 缎织/null 缓不济急/null 缓交/null 缓兵/null 缓兵之计/null 缓军/null 缓冲/null 缓冲剂/null 缓冲区/null 缓冲器/null 缓冲国/null 缓冲溶液/null 缓刑/null 缓办/null 缓动/null 缓发中子/null 缓召/null 缓和/null 缓和剂/null 缓和器/null 缓和战略/null 缓坡/null 缓存/null 缓建/null 缓役/null 缓征/null 缓急/null 缓急相济/null 缓急轻重/null 缓性/null 缓慢/null 缓效/null 缓期/null 缓期付款/null 缓步/null 缓步代车/null 缓气/null 缓泄药/null 缓流/null 缓缓/null 缓缓而行/null 缓聘/null 缓蚀剂/null 缓行/null 缓解/null 缓议/null 缓醒/null 缓释/null 缓量/null 缓降/null 缓降器/null 缓颊/null 缔交/null 缔构/null 缔约/null 缔约国/null 缔约方/null 缔结/null 缔缘/null 缔造/null 缔造者/null 缕息仅存/null 缕析/null 缕缕/null 缕花锯/null 缕述/null 缕陈/null 编上/null 编为/null 编书/null 编了/null 编余/null 编余人员/null 编修/null 编入/null 编内/null 编写/null 编写者/null 编列/null 编列预算/null 编制/null 编剧/null 编印/null 编发/null 编史/null 编号/null 编后记/null 编址/null 编外/null 编外人员/null 编委/null 编委会/null 编审/null 编导/null 编席/null 编年/null 编年体/null 编年史/null 编录/null 编得/null 编成/null 编报/null 编排/null 编撰/null 编整/null 编曲/null 编本/null 编档/null 编次/null 编法/null 编注/null 编派/null 编班/null 编班考试/null 编目/null 编码/null 编码器/null 编码字符集/null 编码方案/null 编码系统/null 编磬/null 编程/null 编程序/null 编篡/null 编篡人/null 编索/null 编紧/null 编纂/null 编纂委员会/null 编练/null 编组/null 编组站/null 编织/null 编织品/null 编织物/null 编结/null 编结业/null 编缉/null 编网/null 编者/null 编者按/null 编者案/null 编舞/null 编著/null 编订/null 编订者/null 编译/null 编译器/null 编译家/null 编译程序/null 编译者/null 编辑/null 编辑人员/null 编辑出版/null 编辑器/null 编辑室/null 编辑家/null 编辑工作/null 编辑按/null 编辑者/null 编辑词条/null 编辑部/null 编进/null 编选/null 编造/null 编造谎言/null 编遣/null 编钟/null 编队/null 编集/null 缘份/null 缘何/null 缘分/null 缘名失实/null 缘情体物/null 缘故/null 缘文生义/null 缘木求鱼/null 缘由/null 缘簿/null 缘薄/null 缘薄分浅/null 缘说/null 缘起/null 缘铿命蹇/null 缘饰/null 缙云/null 缙绅/null 缚上/null 缚住/null 缚带/null 缚束/null 缚牢/null 缚紧/null 缚鸡/null 缜匝/null 缜发/null 缜密/null 缜润/null 缝上/null 缝做/null 缝制/null 缝口/null 缝合/null 缝合带/null 缝合线/null 缝好/null 缝子/null 缝得/null 缝成/null 缝牢/null 缝穷/null 缝絍/null 缝纫/null 缝纫台/null 缝纫机/null 缝纫箱/null 缝纽机/null 缝线/null 缝缀/null 缝编/null 缝缝补补/null 缝缝连连/null 缝衣匠/null 缝衣工人/null 缝衣针/null 缝补/null 缝起/null 缝边/null 缝边者/null 缝针/null 缝针迹/null 缝隙/null 缟玛瑙/null 缟素/null 缠上/null 缠丝玛瑙/null 缠住/null 缠吻/null 缠在/null 缠头/null 缠夹/null 缠夹不清/null 缠夹二先生/null 缠好/null 缠悱/null 缠手/null 缠打/null 缠扰/null 缠扰不休/null 缠斗/null 缠着/null 缠磨/null 缠结/null 缠绕/null 缠绕器/null 缠绕茎/null 缠络/null 缠绵/null 缠绵悱恻/null 缠脚/null 缠裹/null 缠足/null 缠身/null 缢杀/null 缢死/null 缢颈/null 缣帛/null 缤纷/null 缥渺/null 缥缈/null 缧绁/null 缨子/null 缨帽/null 缨络/null 缨花/null 缩为/null 缩写/null 缩写式/null 缩减/null 缩减者/null 缩到/null 缩力/null 缩印/null 缩印本/null 缩合/null 缩回/null 缩图/null 缩在/null 缩地补天/null 缩多氨酸/null 缩头/null 缩头缩脑/null 缩头缩脚/null 缩孔/null 缩小/null 缩小模型/null 缩尺/null 缩尾/null 缩屋称贞/null 缩影/null 缩微/null 缩微图书/null 缩微工作/null 缩微本/null 缩性/null 缩成/null 缩成一团/null 缩手/null 缩手旁观/null 缩手缩脚/null 缩排/null 缩支/null 缩放/null 缩放仪/null 缩时/null 缩时摄影/null 缩比/null 缩氨酸/null 缩水/null 缩状/null 缩略/null 缩略字/null 缩略词/null 缩略语/null 缩着/null 缩瞳症/null 缩短/null 缩砂密/null 缩简/null 缩紧/null 缩约/null 缩编/null 缩缩/null 缩聚/null 缩聚反应/null 缩肌/null 缩胸/null 缩衣节口/null 缩衣节食/null 缩起/null 缩进/null 缪以千里/null 缪司/null 缪巧/null 缪悠之说/null 缪托知己/null 缪采虚声/null 缫丝/null 缬氨酸/null 缬草/null 缭乱/null 缭绕/null 缮写/null 缮发/null 缮清/null 缮甲厉兵/null 缮甲治兵/null 缰绳/null 缱绻/null 缳首/null 缴交/null 缴付/null 缴入/null 缴公/null 缴出/null 缴卷/null 缴卸/null 缴售/null 缴回/null 缴存/null 缴属/null 缴掉/null 缴枪/null 缴枪不杀/null 缴械/null 缴械投降/null 缴款/null 缴毁/null 缴清/null 缴满/null 缴租/null 缴税/null 缴纳/null 缴给/null 缴获/null 缴裹儿/null 缴费/null 缴过/null 缴销/null 缴齐/null 缵不可能的事/null 缸体/null 缸子/null 缸瓦/null 缸盆/null 缸盖/null 缸砖/null 缸管/null 缸里/null 缺一/null 缺乏/null 缺乏症/null 缺乏著/null 缺刻/null 缺勤/null 缺医少药/null 缺口/null 缺员/null 缺嘴/null 缺失/null 缺少/null 缺席/null 缺席者/null 缺德/null 缺德事/null 缺德鬼/null 缺心少肺/null 缺心眼/null 缺心眼儿/null 缺憾/null 缺损/null 缺料/null 缺斤少两/null 缺斤短两/null 缺月再圆/null 缺欠/null 缺氧/null 缺氧症/null 缺水/null 缺油/null 缺漏/null 缺点/null 缺略/null 缺疑/null 缺省/null 缺粮/null 缺编/null 缺考/null 缺血/null 缺衣少食/null 缺词/null 缺课/null 缺货/null 缺量/null 缺钱/null 缺门/null 缺陷/null 缺面/null 缺项/null 缺额/null 缺食无衣/null 罂子桐/null 罂粟/null 罂粟种子/null 罂粟科/null 罄匮/null 罄尽/null 罄然/null 罄竭/null 罄竹难书/null 罄笔难书/null 罄身/null 罄身儿/null 罅漏/null 罅隙/null 罐儿/null 罐头/null 罐头装/null 罐头起子/null 罐头食品/null 罐子/null 罐盖/null 罐笼/null 罐罐/null 罐装/null 罐车/null 网上/null 网上广播/null 网中/null 网人/null 网住/null 网儿/null 网兜/null 网兰/null 网关/null 网内/null 网制/null 网区/null 网卡/null 网友/null 网名/null 网吧/null 网员/null 网咖/null 网址/null 网套/null 网子/null 网孔/null 网屏/null 网巾/null 网布/null 网师园/null 网底/null 网店/null 网开一面/null 网开三面/null 网志/null 网恋/null 网捕/null 网捞/null 网族/null 网景/null 网杓/null 网板/null 网架/null 网格/null 网格线/null 网桥/null 网段/null 网民/null 网游/null 网漏吞舟/null 网点/null 网片/null 网特/null 网状/null 网状物/null 网状脉/null 网球/null 网球场/null 网球赛/null 网瘾/null 网皮/null 网盘/null 网眼/null 网禁/null 网站/null 网管/null 网管员/null 网管接口/null 网管系统/null 网箱/null 网篮/null 网纲/null 网纹/null 网线/null 网络/null 网络会所/null 网络俚语/null 网络化/null 网络协议/null 网络客/null 网络层/null 网络层协议/null 网络广告/null 网络应用/null 网络成瘾/null 网络打印机/null 网络技术/null 网络操作系统/null 网络日记/null 网络欺诈/null 网络浏览器/null 网络特工/null 网络环境/null 网络理论/null 网络用语/null 网络直径/null 网络科技/null 网络空间/null 网络管理/null 网络管理员/null 网络管理系统/null 网络规划人员/null 网络设备/null 网络设计/null 网络语言/null 网络语音/null 网络资源/null 网络迁移/null 网络铁路/null 网网/null 网罗/null 网罟座/null 网聚/null 网膜/null 网膜状/null 网虫/null 网蝽/null 网袋/null 网语/null 网购/null 网路/null 网路作业系统/null 网路平台/null 网路应用/null 网路服务/null 网路架构/null 网路特务/null 网路环境/null 网路节点/null 网路节点介面/null 网路费/null 网路链接层/null 网银/null 网际/null 网际协定/null 网际电话/null 网际网络/null 网际网路/null 网际网路协会/null 网际色情/null 网页/null 网页地址/null 网页设计/null 罔上虐下/null 罔知所措/null 罕事/null 罕到/null 罕有/null 罕物/null 罕用/null 罕至/null 罕见/null 罕觏/null 罕譬而喻/null 罕闻/null 罗一秀/null 罗世昌/null 罗东/null 罗东镇/null 罗丹/null 罗伦斯/null 罗伯斯庇尔/null 罗伯特/null 罗伯特・伯恩斯/null 罗伯特・佛洛斯特/null 罗伯特・路易斯・斯蒂文森/null 罗伯茨/null 罗伯逊/null 罗保铭/null 罗兰/null 罗切斯特/null 罗列/null 罗刹/null 罗勒/null 罗卜/null 罗口/null 罗哩罗嗦/null 罗唆/null 罗唣/null 罗喉/null 罗嗦/null 罗嘉良/null 罗圈/null 罗圈儿/null 罗圈儿揖/null 罗圈架/null 罗圈腿/null 罗城/null 罗城县/null 罗塞塔石碑/null 罗夫诺/null 罗姆人/null 罗姆酒/null 罗姗/null 罗安达/null 罗宋汤/null 罗定/null 罗家英/null 罗宾/null 罗宾汉/null 罗宾逊/null 罗密欧/null 罗密欧与朱丽叶/null 罗尔定理/null 罗尔斯・罗伊斯/null 罗山/null 罗巴切夫斯基/null 罗布/null 罗布林卡/null 罗布泊/null 罗布麻/null 罗平/null 罗庄/null 罗庄区/null 罗式几何/null 罗彻斯特/null 罗得岛/null 罗得斯岛/null 罗德岛/null 罗志祥/null 罗懋登/null 罗拉/null 罗拜/null 罗掘/null 罗掘一空/null 罗摩衍那/null 罗摩诺索夫/null 罗摩诺索夫山脊/null 罗文/null 罗斯/null 罗斯托克/null 罗斯托夫/null 罗斯涅夫/null 罗斯福/null 罗曼使/null 罗曼史/null 罗曼司/null 罗曼带克/null 罗曼蒂克/null 罗曼语族/null 罗曼诺/null 罗望/null 罗杰/null 罗杰斯/null 罗格/null 罗氏/null 罗氏几何/null 罗水/null 罗汉/null 罗汉拳/null 罗汉果/null 罗汉病/null 罗汉豆/null 罗汉鱼/null 罗江/null 罗洁爱尔之/null 罗浮宫/null 罗浮山/null 罗湖/null 罗湖区/null 罗源/null 罗琳/null 罗田/null 罗甸/null 罗皂/null 罗盘/null 罗盘度/null 罗盘座/null 罗盛教/null 罗素/null 罗索/null 罗纳/null 罗纳尔多/null 罗纳河/null 罗纹/null 罗织/null 罗经/null 罗绸/null 罗缎/null 罗缕纪存/null 罗网/null 罗致/null 罗荣桓/null 罗莎/null 罗讷河/null 罗语/null 罗说/null 罗贯中/null 罗里罗嗦/null 罗钳吉网/null 罗锅/null 罗锅儿/null 罗锅儿桥/null 罗雀/null 罗雀掘鼠/null 罗霄山/null 罗马/null 罗马书/null 罗马人/null 罗马公教/null 罗马化/null 罗马字/null 罗马字母/null 罗马尼亚/null 罗马帝国/null 罗马教廷/null 罗马数字/null 罗马法/null 罗马诺/null 罗马里奥/null 罚一劝百/null 罚不当罪/null 罚了不/null 罚俸/null 罚则/null 罚单/null 罚款/null 罚没/null 罚球/null 罚站/null 罚落/null 罚薪/null 罚跪/null 罚酒/null 罚金/null 罚钱/null 罚锾/null 罡风/null 罢了/null 罢于奔命/null 罢休/null 罢免/null 罢免权/null 罢兵/null 罢官/null 罢工/null 罢工者/null 罢市/null 罢手/null 罢教/null 罢职/null 罢论/null 罢课/null 罢黜/null 罢黜百家/null 罩上/null 罩以/null 罩住/null 罩儿/null 罩光漆/null 罩入/null 罩头/null 罩子/null 罩成/null 罩杯/null 罩棚/null 罩盖/null 罩纱/null 罩衣/null 罩衫/null 罩袍/null 罩袖/null 罩门/null 罩面/null 罪上加罪/null 罪不容诛/null 罪与罚/null 罪业深重/null 罪人/null 罪人不孥/null 罪以功除/null 罪加一等/null 罪名/null 罪大恶极/null 罪孽/null 罪孽深重/null 罪尤/null 罪当万死/null 罪性/null 罪恶/null 罪恶如山/null 罪恶昭彰/null 罪恶昭著/null 罪恶深重/null 罪恶滔天/null 罪恶行径/null 罪愆/null 罪戾/null 罪有应得/null 罪有攸归/null 罪案/null 罪汉/null 罪深/null 罪犯/null 罪状/null 罪疚/null 罪种/null 罪莫大焉/null 罪行/null 罪行累累/null 罪证/null 罪该/null 罪该万死/null 罪责/null 罪责难逃/null 罪过/null 罪逆深重/null 罪错/null 罪魁/null 罪魁祸首/null 置业/null 置中/null 置之/null 置之不理/null 置之不问/null 置之不顾/null 置之度外/null 置之死地/null 置之死地而后快/null 置之死地而后生/null 置之脑后/null 置之高阁/null 置买/null 置于/null 置于死地而后快/null 置信/null 置信区间/null 置信域/null 置信水平/null 置信系数/null 置信限/null 置入/null 置办/null 置后/null 置喙/null 置在/null 置地/null 置备/null 置外/null 置换/null 置换突变/null 置换群/null 置换者/null 置放/null 置放者/null 置有关法规于不顾/null 置死地而后快/null 置水之情/null 置水之清/null 置浮标/null 置疑/null 置而不问/null 置若罔闻/null 置装/null 置装费/null 置评/null 置诸高阁/null 置身/null 置身事外/null 置身于/null 置辩/null 置锥之地/null 置顶/null 署于/null 署假/null 署名/null 署期/null 署理/null 署者/null 署长/null 罴虎/null 罹患/null 罹灾/null 罹病/null 罹祸/null 罹难/null 羁勒/null 羁押/null 羁旅/null 羁留/null 羁縻/null 羁绊/null 羊乳/null 羊产/null 羊体嵇心/null 羊倌/null 羊入虎口/null 羊卓错/null 羊叫声/null 羊圈/null 羊场/null 羊城/null 羊头/null 羊头狗肉/null 羊奶/null 羊工/null 羊年/null 羊怪/null 羊拐/null 羊排/null 羊枣/null 羊栈/null 羊栏/null 羊桃/null 羊毛/null 羊毛出在羊身上/null 羊毛制/null 羊毛商/null 羊毛毯/null 羊毛状/null 羊毛疔/null 羊毛皮/null 羊毛线/null 羊毛脂/null 羊毛衫/null 羊毛袋/null 羊毫/null 羊水/null 羊水穿刺/null 羊油/null 羊狠狼贪/null 羊男/null 羊痒疫/null 羊痘/null 羊痫风/null 羊瘙痒病/null 羊瘙痒症/null 羊癫风/null 羊皮/null 羊皮帽/null 羊皮纸/null 羊皮衣/null 羊真孔草/null 羊绒/null 羊续悬鱼/null 羊羔/null 羊群/null 羊羹/null 羊肉/null 羊肉串/null 羊肉馅/null 羊肚儿手巾/null 羊肚蕈/null 羊肠/null 羊肠小径/null 羊肠小道/null 羊肠鸟道/null 羊胡子草/null 羊脂/null 羊腿/null 羊膜/null 羊膜穿刺术/null 羊落虎口/null 羊裘垂钓/null 羊角/null 羊角包/null 羊角村/null 羊角疯/null 羊角芹/null 羊角豆/null 羊角面包/null 羊角风/null 羊触藩篱/null 羊质虎皮/null 羊踏菜园/null 羊踯躅/null 羊道/null 羊革/null 羊驼/null 羊齿/null 羊齿类/null 羌人起义/null 羌无故实/null 羌活/null 羌笛/null 羌鹫/null 美不美/null 美不胜收/null 美东时间/null 美中/null 美中不足/null 美丽/null 美丽动人/null 美丽新世界/null 美丽的/null 美乃滋酱/null 美了/null 美事/null 美人/null 美人蕉/null 美人计/null 美人迟暮/null 美人香草/null 美人鱼/null 美他沙酮/null 美以美/null 美传/null 美体小铺/null 美侨/null 美俚/null 美元/null 美兰/null 美兰区/null 美其/null 美其名曰/null 美军/null 美冠/null 美分/null 美利奴羊/null 美制/null 美加/null 美化/null 美南部/null 美发/null 美发师/null 美口语/null 美名/null 美吨/null 美味/null 美味佳肴/null 美味可口/null 美善/null 美因茨/null 美国中央情报局/null 美国之音/null 美国交会/null 美国人/null 美国人民/null 美国众议院/null 美国佬/null 美国全国广播公司/null 美国兵/null 美国军人/null 美国化/null 美国华人/null 美国南北战争/null 美国参议院/null 美国国会/null 美国国务院/null 美国国家侦察局/null 美国国家航天航空局/null 美国国家航空航天局/null 美国国徽/null 美国国际集团/null 美国在线/null 美国地质局/null 美国地质调查局/null 美国存托凭证/null 美国宇航局/null 美国广播公司/null 美国总统/null 美国政治/null 美国最高法院/null 美国有线新闻网/null 美国海岸警卫队/null 美国独立战争/null 美国电话电报公司/null 美国联准/null 美国联邦储备/null 美国联邦航空局/null 美国能源部/null 美国航空/null 美国航空公司/null 美国证券交易委员会/null 美国资讯交换标准码/null 美国运通/null 美国陆军部/null 美国51区/null 美圆/null 美奖/null 美女/null 美女破舌/null 美女簪花/null 美好/null 美好生活/null 美如/null 美如冠玉/null 美妙/null 美姑/null 美姑河/null 美姿/null 美学/null 美学家/null 美宇航局/null 美容/null 美容业/null 美容女/null 美容师/null 美容店/null 美容手术/null 美容觉/null 美容院/null 美尼尔氏病/null 美尼尔氏综合症/null 美尼尔病/null 美展/null 美属维尔京群岛/null 美工/null 美差/null 美差事/null 美式/null 美式橄榄球/null 美式足球/null 美德/null 美意/null 美意延年/null 美感/null 美才/null 美方/null 美日/null 美景/null 美景良辰/null 美智子/null 美服/null 美朝/null 美术/null 美术史/null 美术品/null 美术字/null 美术家/null 美术片/null 美术片儿/null 美术界/null 美术馆/null 美林集团/null 美栗/null 美梦/null 美梦成真/null 美棉/null 美欧/null 美歌/null 美死/null 美气/null 美汁源/null 美沙酮/null 美泉宫/null 美洛昔康/null 美洲/null 美洲兀鹰/null 美洲国家/null 美洲国家组织/null 美洲国家组织宪章/null 美洲大陆/null 美洲小鸵/null 美洲狮/null 美洲虎/null 美洲豹/null 美洲鸵/null 美派/null 美浓/null 美浓纸/null 美浓镇/null 美溪/null 美溪区/null 美滋滋/null 美满/null 美玉/null 美玉无瑕/null 美玲/null 美甲/null 美男破老/null 美白/null 美的/null 美目/null 美眄/null 美眉/null 美瞳/null 美石/null 美神/null 美禄/null 美称/null 美籍/null 美籍华人/null 美粒果/null 美索不达米亚/null 美美/null 美联储/null 美联社/null 美育/null 美能达/null 美色/null 美艳/null 美苏/null 美英/null 美蓝/null 美衣玉食/null 美西/null 美西战争/null 美西部/null 美观/null 美观大方/null 美言/null 美言不信/null 美誉/null 美诗/null 美谈/null 美貌/null 美质/null 美足球/null 美轮美奂/null 美酒/null 美金/null 美钞/null 美院/null 美颜/null 美食/null 美食主义/null 美食学/null 美食家/null 美食法/null 美食甘寝/null 美食者/null 美餐/null 美饰/null 美馔/null 羔子/null 羔皮/null 羔羊/null 羔羊皮/null 羚牛/null 羚羊/null 羚羊挂角/null 羝羊触藩/null 羞与为伍/null 羞与哙伍/null 羞于启齿/null 羞人/null 羞人答答/null 羞以牛后/null 羞口难开/null 羞容/null 羞得/null 羞怯/null 羞怯成怒/null 羞恶/null 羞惭/null 羞愤/null 羞愧/null 羞愧难当/null 羞明/null 羞死/null 羞涩/null 羞答答/null 羞红/null 羞羞答答/null 羞耻/null 羞色/null 羞花/null 羞花闭目/null 羞赧/null 羞辱/null 羞辱性/null 羞辱者/null 羞面见人/null 羟基/null 羟基丁酸/null 羟基磷灰石/null 羟自由基/null 羡慕/null 群件/null 群众/null 群众关系/null 群众化/null 群众团体/null 群众大会/null 群众性/null 群众文艺/null 群众组织/null 群众观点/null 群众路线/null 群众运动/null 群体/null 群体中/null 群体性事件/null 群体管理/null 群像/null 群力/null 群口词/null 群口铄金/null 群婚/null 群子弹/null 群射/null 群居/null 群居和一/null 群居性/null 群居穴处/null 群居终日言不及义/null 群山/null 群岛/null 群岛弧/null 群峰/null 群情/null 群情振奋/null 群星/null 群架/null 群栖/null 群殴/null 群氓/null 群猴猴族/null 群策/null 群策群力/null 群系/null 群组/null 群而不党/null 群聚/null 群育/null 群臣/null 群花/null 群芳/null 群芳争妍/null 群英/null 群英会/null 群英毕集/null 群落/null 群蚁溃堤/null 群袭/null 群言/null 群言堂/null 群论/null 群谋/null 群贤/null 群贤毕至/null 群起/null 群起而攻之/null 群轻折轴/null 群雄/null 群雄逐鹿/null 群集/null 群雌粥粥/null 群青/null 群飞/null 群马县/null 群魔/null 群魔乱舞/null 群魔般/null 群鸟/null 群龙无首/null 羧基/null 羧基酸/null 羧甲司坦/null 羧酸/null 羯族/null 羯羊/null 羯胡/null 羯鼓/null 羯鼓催花/null 羰基/null 羲皇上人/null 羸弱/null 羹匙/null 羹汤/null 羹藜含糗/null 羹藜唅糗/null 羼杂/null 羼水/null 羽冠/null 羽化/null 羽化登仙/null 羽化飞天/null 羽坛/null 羽客/null 羽扇/null 羽扇纶巾/null 羽扇豆/null 羽林/null 羽檄交驰/null 羽檄飞驰/null 羽毛/null 羽毛丰满/null 羽毛未丰/null 羽毛状/null 羽毛球/null 羽毛球场/null 羽毛球运动/null 羽毛笔/null 羽毛缎/null 羽毛被/null 羽流/null 羽涅/null 羽状/null 羽状复叶/null 羽球/null 羽田/null 羽纱/null 羽绒/null 羽绒服/null 羽绒衫/null 羽缎/null 羽翮已就/null 羽翮飞肉/null 羽翼/null 羽翼丰满/null 羽翼已成/null 羽茎/null 羽衣/null 羽衣甘蓝/null 羽裂/null 羽蹈烈火/null 羽量级/null 羽鳃鲐/null 翁仲/null 翁声/null 翁婿/null 翁安县/null 翁山/null 翁山苏姬/null 翁源/null 翁牛特/null 翅子/null 翅展/null 翅果/null 翅汤/null 翅片/null 翅状/null 翅脉/null 翅膀/null 翅鞘/null 翌年/null 翌日/null 翌晨/null 翎子/null 翎毛/null 翔凤/null 翔回/null 翔安/null 翔安区/null 翔实/null 翕动/null 翕张/null 翕然/null 翘二郎腿/null 翘企/null 翘嘴/null 翘尾/null 翘尾巴/null 翘居群首/null 翘拇指/null 翘曲/null 翘望/null 翘材/null 翘板/null 翘棱/null 翘楚/null 翘盼/null 翘着/null 翘硬/null 翘翘板/null 翘舌音/null 翘课/null 翘起/null 翘足/null 翘足引领/null 翘足而待/null 翘辫/null 翘辫子/null 翘首/null 翘首以待/null 翘首企足/null 翘首引源/null 翘首引领/null 翟志刚/null 翟理斯/null 翠冠玉/null 翠屏区/null 翠岗/null 翠峦/null 翠峦区/null 翠巧/null 翠微/null 翠柏/null 翠淆红减/null 翠玉/null 翠竹/null 翠绿/null 翠绿色/null 翠英/null 翠莲/null 翠菊/null 翠青蛇/null 翠鸟/null 翡翠/null 翩然/null 翩然而飞/null 翩然而至/null 翩翩/null 翩翩起舞/null 翩若惊鸿/null 翩跹/null 翰墨/null 翰林/null 翰林学士/null 翰林院/null 翱翔/null 翳眼/null 翻一番/null 翻两番/null 翻书/null 翻了/null 翻了一番/null 翻云覆雨/null 翻作/null 翻供/null 翻修/null 翻倒/null 翻入/null 翻出/null 翻到/null 翻动/null 翻印/null 翻卷/null 翻去/null 翻唇弄舌/null 翻唱/null 翻嘴/null 翻土/null 翻地/null 翻墙/null 翻天/null 翻天复地/null 翻天覆地/null 翻子拳/null 翻寻/null 翻山/null 翻山越岭/null 翻工/null 翻建/null 翻开/null 翻弄/null 翻录/null 翻悔/null 翻成/null 翻手为云/null 翻手为云覆手变雨/null 翻手为云覆手雨/null 翻找/null 翻把/null 翻折/null 翻拌/null 翻拍/null 翻拣/null 翻掉/null 翻掘/null 翻搅/null 翻新/null 翻新后/null 翻旧账/null 翻晒/null 翻本/null 翻来/null 翻来复去/null 翻来覆去/null 翻查/null 翻案/null 翻检/null 翻椅/null 翻江倒海/null 翻沉/null 翻沙覆地/null 翻浆/null 翻涌/null 翻滚/null 翻炒/null 翻然/null 翻然悔悟/null 翻然改图/null 翻版/null 翻版碟/null 翻牌/null 翻番/null 翻白眼/null 翻皮/null 翻盖/null 翻看/null 翻着/null 翻砂/null 翻空出奇/null 翻筋斗/null 翻箱倒柜/null 翻箱倒笼/null 翻箱倒箧/null 翻篇儿/null 翻簧/null 翻翻/null 翻老账/null 翻耕/null 翻胃/null 翻脸/null 翻脸不认人/null 翻腾/null 翻船/null 翻花/null 翻茬/null 翻蔓儿/null 翻覆/null 翻覆无常/null 翻译/null 翻译人员/null 翻译员/null 翻译学/null 翻译家/null 翻译机/null 翻译理论/null 翻译者/null 翻起/null 翻越/null 翻跟头/null 翻跟斗/null 翻路/null 翻跳/null 翻身/null 翻车/null 翻车鱼/null 翻转/null 翻过/null 翻过来/null 翻造/null 翻造品/null 翻遍/null 翻阅/null 翻页/null 翻领/null 翻飞/null 翻黄/null 翻黄倒皂/null 翼侧/null 翼城/null 翼子板/null 翼展/null 翼形/null 翼手目/null 翼手龙/null 翼状/null 翼状物/null 翼翼/null 翼翼小心/null 翼间架/null 翼龙/null 耀光/null 耀县/null 耀州/null 耀州区/null 耀德/null 耀斑/null 耀武/null 耀武扬威/null 耀目/null 耀眼/null 耀祖/null 耀祖荣宗/null 耀西/null 老一代/null 老一套/null 老一辈/null 老丈/null 老三/null 老三篇/null 老不晓事/null 老丑/null 老两口儿/null 老中/null 老中青/null 老中青三结合/null 老乌恰/null 老九/null 老乡/null 老二/null 老于世故/null 老五/null 老井/null 老亲/null 老人/null 老人学/null 老人家/null 老人星/null 老伯/null 老伯伯/null 老伴/null 老伴儿/null 老体/null 老佛爷/null 老侄/null 老例/null 老俩口/null 老修/null 老倭瓜/null 老僧/null 老僧入定/null 老儿/null 老兄/null 老先生/null 老光/null 老八板/null 老八板儿/null 老八路/null 老八辈子/null 老公/null 老公公/null 老六/null 老兵/null 老农/null 老几/null 老到/null 老前辈/null 老化/null 老化酶/null 老区/null 老千/null 老厚/null 老去/null 老友/null 老叔/null 老叟/null 老古板/null 老古董/null 老同志/null 老君/null 老听/null 老吾老/null 老命/null 老哥/null 老坏蛋/null 老城/null 老城区/null 老塘/null 老境/null 老境堪忧/null 老声/null 老处女/null 老外/null 老大/null 老大哥/null 老大妈/null 老大娘/null 老大徒伤悲/null 老大无成/null 老大爷/null 老大自居/null 老大难/null 老天/null 老天拔地/null 老天爷/null 老太/null 老太公/null 老太太/null 老太婆/null 老太爷/null 老夫/null 老夫子/null 老头/null 老头乐/null 老头儿/null 老头子/null 老套/null 老套子/null 老女归宗/null 老奴/null 老奶奶/null 老奸巨滑/null 老奸巨猾/null 老好人/null 老妇/null 老妇人/null 老妈/null 老妈子/null 老妖/null 老妖似/null 老妪/null 老妪能解/null 老姐/null 老姑娘/null 老姜/null 老姥/null 老娘/null 老婆/null 老婆儿/null 老婆婆/null 老婆子/null 老婆孩子热炕头/null 老婆当军/null 老婆舌头/null 老媪/null 老子/null 老子婆娑/null 老字号/null 老宋体/null 老实/null 老实人/null 老实巴交/null 老实说/null 老客/null 老客儿/null 老家/null 老家儿/null 老家贼/null 老将/null 老小/null 老少/null 老少咸宜/null 老少无欺/null 老少皆宜/null 老少边穷/null 老山/null 老山自行车馆/null 老巢/null 老帅/null 老师/null 老师傅/null 老师宿儒/null 老帐/null 老干部/null 老年/null 老年人/null 老年学/null 老年性痴呆症/null 老年期/null 老年痴呆/null 老年痴呆症/null 老年间/null 老年黑格尔派/null 老幺/null 老幼/null 老庄/null 老庄学派/null 老底/null 老店/null 老式/null 老弗大/null 老弟/null 老张/null 老弦/null 老弱/null 老弱残兵/null 老弱病残/null 老当/null 老当益壮/null 老态/null 老态龙钟/null 老态龙锺/null 老总/null 老成/null 老成之见/null 老成持重/null 老成练达/null 老成见到/null 老战友/null 老战士/null 老手/null 老抽/null 老拙/null 老拳/null 老挝人/null 老掉牙/null 老搭挡/null 老搭档/null 老教师/null 老旦/null 老旧/null 老早/null 老是/null 老是往/null 老景/null 老有所为/null 老有所乐/null 老有所终/null 老朋友/null 老本/null 老朽/null 老李/null 老来/null 老来俏/null 老来少/null 老板/null 老板娘/null 老林/null 老枪/null 老树/null 老样/null 老样子/null 老根/null 老根据地/null 老框框/null 老死/null 老死不相往来/null 老死沟壑/null 老死牖下/null 老残/null 老残游记/null 老母/null 老毛病/null 老气/null 老气横秋/null 老水手/null 老汉/null 老江湖/null 老汤/null 老河口/null 老油子/null 老油条/null 老泪/null 老泪纵横/null 老派/null 老火/null 老烟枪/null 老烟鬼/null 老熊当道/null 老父/null 老爷/null 老爷子/null 老爷岭/null 老爷爷/null 老爷车/null 老爸/null 老爹/null 老牌/null 老牛/null 老牛吃嫩草/null 老牛拉破车/null 老牛破车/null 老牛舐犊/null 老狐狸/null 老玉米/null 老王/null 老王卖瓜/null 老生/null 老生常谈/null 老用户/null 老病/null 老百姓/null 老的/null 老皇历/null 老相/null 老相识/null 老眼/null 老眼光/null 老眼昏花/null 老着脸/null 老着脸皮/null 老祖/null 老祖宗/null 老神在在/null 老窝/null 老童/null 老等/null 老米/null 老粗/null 老糊涂/null 老红军/null 老练/null 老练兵/null 老罴当道/null 老美/null 老羞/null 老羞变怒/null 老羞成怒/null 老翁/null 老老/null 老老大大/null 老老实实/null 老老少少/null 老耄/null 老者/null 老而/null 老而不死是为贼/null 老而益壮/null 老脸/null 老腌儿/null 老腌瓜/null 老舍/null 老花/null 老花眼/null 老花镜/null 老茧/null 老莱娱亲/null 老营/null 老著/null 老蔫/null 老虎/null 老虎伍兹/null 老虎凳/null 老虎头上扑苍蝇/null 老虎头上打苍蝇/null 老虎机/null 老虎灶/null 老虎菜/null 老虎钳/null 老蚌生珠/null 老街/null 老表/null 老衰/null 老衰了/null 老衲/null 老西/null 老规矩/null 老视眼/null 老话/null 老说/null 老调/null 老调重弹/null 老谋/null 老谋深算/null 老谱/null 老豆/null 老豆腐/null 老财/null 老账/null 老资格/null 老趼/null 老路/null 老身/null 老身长子/null 老辈/null 老辣/null 老边/null 老边区/null 老迈/null 老迈龙钟/null 老远/null 老道/null 老酒/null 老醋/null 老金/null 老锡儿/null 老长/null 老院/null 老雕/null 老顽固/null 老饕/null 老马/null 老马为驹/null 老马嘶风/null 老马恋栈/null 老马识途/null 老骥/null 老骥伏枥/null 老骥嘶风/null 老骨头/null 老高/null 老鱼跳波/null 老鸟/null 老鸡/null 老鸡头/null 老鸦/null 老鸨/null 老鸹/null 老鹤成轩/null 老鹰/null 老鹰星云/null 老黄/null 老黄牛/null 老鼠/null 老鼠尾巴/null 老鼠拖木锨/null 老鼠洞/null 老鼠见猫/null 老鼠过街/null 老鼻子/null 老龄/null 老龄化/null 老龟/null 考上/null 考中/null 考人/null 考克斯/null 考克斯报告/null 考入/null 考其原因/null 考准/null 考分/null 考到/null 考勤/null 考勤制度/null 考勤簿/null 考区/null 考卷/null 考取/null 考古/null 考古学/null 考古学家/null 考古家/null 考名则实/null 考场/null 考完/null 考官/null 考察/null 考察团/null 考察报告/null 考察船/null 考察队/null 考得/null 考拉/null 考据/null 考文垂/null 考文垂市/null 考期/null 考查/null 考核/null 考核制度/null 考核成绩/null 考波什堡/null 考生/null 考研/null 考种/null 考究/null 考级/null 考绩/null 考绩幽明/null 考绩黜陟/null 考茨基主义/null 考虑/null 考虑不周/null 考虑到/null 考虑周到/null 考虑过/null 考订/null 考证/null 考评/null 考试/null 考试制度/null 考试卷/null 考试卷子/null 考试学/null 考试者/null 考试院/null 考语/null 考进/null 考释/null 考量/null 考问/null 考题/null 考验/null 耄倪/null 耄思/null 耄期/null 耄耋/null 耄耋之年/null 耄龄/null 者也之乎/null 耆儒硕德/null 耆儒硕望/null 耆儒硕老/null 耆年硕德/null 耆绅/null 耆老/null 而不需/null 而且/null 而于/null 而今/null 而今而后/null 而从/null 而做又是另外一回事/null 而况/null 而别/null 而又/null 而后/null 而处/null 而已/null 而是/null 而止/null 而知也无涯/null 而立/null 而立之年/null 而胜于蓝/null 而至/null 而被/null 而言/null 而达/null 而非/null 耍嘴皮/null 耍嘴皮子/null 耍坛子/null 耍奸/null 耍子/null 耍宝/null 耍小聪明/null 耍弄/null 耍得团团转/null 耍心眼/null 耍心眼儿/null 耍态度/null 耍把/null 耍无赖/null 耍派/null 耍滑/null 耍滑头/null 耍狮子/null 耍私情/null 耍笑/null 耍笔杆/null 耍笔杆子/null 耍耍/null 耍脾气/null 耍花招/null 耍花腔/null 耍蛇/null 耍贫嘴/null 耍赖/null 耍钱/null 耍闹/null 耐久/null 耐久力/null 耐久性/null 耐人/null 耐人寻味/null 耐住/null 耐光/null 耐克/null 耐力/null 耐劳/null 耐压/null 耐受/null 耐受力/null 耐受性/null 耐变/null 耐寒/null 耐心/null 耐心帮助/null 耐性/null 耐战/null 耐抗/null 耐旱/null 耐晒/null 耐水/null 耐水性/null 耐洗/null 耐洗涤性/null 耐火/null 耐火土/null 耐火材料/null 耐火砖/null 耐火黏土/null 耐烦/null 耐烫/null 耐热/null 耐热合金/null 耐用/null 耐用品/null 耐用消费品/null 耐看/null 耐着性子/null 耐碱/null 耐磨/null 耐磨性/null 耐穿/null 耐腐蚀/null 耐航/null 耐苦/null 耐药性/null 耐蚀/null 耐酸/null 耐震/null 耐风/null 耐风雨/null 耐飞/null 耐飞性/null 耐饥/null 耐高温/null 耒耜/null 耒耜之勤/null 耒耨之利/null 耒耨之教/null 耒阳/null 耕作/null 耕作制度/null 耕作层/null 耕具/null 耕农/null 耕地/null 耕地面积/null 耕奴/null 耕当问奴/null 耕战/null 耕机/null 耕法/null 耕牛/null 耕犁/null 耕田/null 耕畜/null 耕种/null 耕翻/null 耕耘/null 耕读/null 耗光/null 耗减/null 耗力/null 耗去/null 耗子/null 耗尽/null 耗损/null 耗损量/null 耗掉/null 耗散/null 耗散结构/null 耗料/null 耗时/null 耗时耗力/null 耗气/null 耗水/null 耗油/null 耗油率/null 耗油量/null 耗热/null 耗用/null 耗电/null 耗电量/null 耗竭/null 耗粮/null 耗能/null 耗费/null 耗资/null 耗量/null 耘锄/null 耙地/null 耙子/null 耙犁/null 耠子/null 耥耙/null 耦合/null 耦合器/null 耦园/null 耦居/null 耦联晶体管/null 耦语/null 耧播/null 耧车/null 耩子/null 耳上/null 耳下/null 耳下腺/null 耳光/null 耳刮子/null 耳力/null 耳听/null 耳听为虚/null 耳听八方/null 耳咽管/null 耳喻/null 耳坠/null 耳坠子/null 耳垂/null 耳垢/null 耳塞/null 耳声/null 耳壳/null 耳套/null 耳子/null 耳孔/null 耳尖/null 耳屎/null 耳屏/null 耳廓狐/null 耳性/null 耳房/null 耳报神/null 耳挖/null 耳挖勺儿/null 耳挖子/null 耳掴子/null 耳提面命/null 耳提面训/null 耳旁风/null 耳朵/null 耳朵底子/null 耳朵眼儿/null 耳朵软/null 耳机/null 耳染目濡/null 耳根/null 耳根清净/null 耳沉/null 耳洞/null 耳源性/null 耳满鼻满/null 耳濡目染/null 耳炎/null 耳熟/null 耳熟能详/null 耳片/null 耳状物/null 耳环/null 耳生/null 耳疾/null 耳痛/null 耳目/null 耳目一新/null 耳石/null 耳科/null 耳科学/null 耳穴/null 耳红面赤/null 耳罩/null 耳聋/null 耳聋眼花/null 耳聪目明/null 耳背/null 耳膜/null 耳草属/null 耳药水/null 耳蜗/null 耳蜡/null 耳视目听/null 耳视目食/null 耳语/null 耳语般/null 耳轮/null 耳软/null 耳软心活/null 耳边/null 耳边风/null 耳部/null 耳郭/null 耳针/null 耳针疗法/null 耳钉/null 耳镜/null 耳门/null 耳闻/null 耳闻不如一见/null 耳闻不如目见/null 耳闻目击/null 耳闻目睹/null 耳闻目见/null 耳顺/null 耳顺之年/null 耳风/null 耳食/null 耳食之言/null 耳食之谈/null 耳饰/null 耳鬓厮磨/null 耳鸣/null 耳麦/null 耳鼓/null 耳鼻/null 耳鼻咽喉/null 耳鼻喉/null 耳鼻喉科/null 耵聍/null 耶人/null 耶利米/null 耶利米书/null 耶利米哀歌/null 耶和/null 耶和华/null 耶和华见证人/null 耶哥尼雅/null 耶弗他/null 耶律大石/null 耶烈万/null 耶稣/null 耶稣会/null 耶稣会士/null 耶稣升天节/null 耶稣受难节/null 耶稣基督/null 耶稣基督后期圣徒教会/null 耶稣基督末世圣徒教会/null 耶稣教/null 耶稣降临节/null 耶莱娜・扬科维奇/null 耶西/null 耶诞/null 耶诞节/null 耶路/null 耶路撒冷/null 耶酥/null 耶酥会/null 耶酥会士/null 耶鲁/null 耶鲁大学/null 耷拉/null 耸人听闻/null 耸入/null 耸入云霄/null 耸出/null 耸动/null 耸壑昂霄/null 耸现/null 耸立/null 耸肩/null 耸起/null 耻居人下/null 耻笑/null 耻言人过/null 耻辱/null 耻骂/null 耻骨/null 耽于/null 耽于酒色/null 耽心/null 耽惊受怕/null 耽搁/null 耽溺/null 耽误/null 耽迷/null 耽迷肉欲/null 耿介/null 耿直/null 耿耿/null 耿耿于心/null 耿耿于怀/null 耿饼/null 耿马县/null 聂卫平/null 聂拉木/null 聂耳/null 聂聂/null 聂荣/null 聆取/null 聆听/null 聆听会/null 聆教/null 聆讯/null 聊且/null 聊了/null 聊事/null 聊以卒岁/null 聊以塞责/null 聊以自慰/null 聊以解嘲/null 聊以解闷/null 聊叙/null 聊城/null 聊城地区/null 聊复尔尔/null 聊天/null 聊天儿/null 聊天室/null 聊得/null 聊斋/null 聊斋志异/null 聊生/null 聊着/null 聊聊/null 聊胜于无/null 聊表/null 聊话/null 聊赖/null 聋了/null 聋人/null 聋哑/null 聋哑人/null 聋哑症/null 聋哑者/null 聋子/null 聋得/null 聋盲/null 聋聩/null 职业/null 职业上/null 职业中学/null 职业倦怠症/null 职业化/null 职业咨询/null 职业培训/null 职业学校/null 职业工会/null 职业性/null 职业教育/null 职业病/null 职业素质/null 职业辅导/null 职业运动员/null 职业道德/null 职业阶级/null 职业高中/null 职业高尔夫球协会/null 职代会/null 职位/null 职位高/null 职分/null 职别/null 职前教育/null 职务/null 职务上/null 职务工资/null 职务津贴/null 职务考核/null 职司/null 职员/null 职场/null 职大/null 职守/null 职官/null 职工/null 职工代表/null 职工代表大会/null 职工收入/null 职工福利待遇/null 职工队伍/null 职工食堂/null 职志/null 职掌/null 职数/null 职权/null 职权范围/null 职校/null 职涯/null 职称/null 职称改革/null 职称评定/null 职级/null 职能/null 职能部门/null 职衔/null 职责/null 聒噪/null 聒耳/null 联产/null 联产到劳/null 联产到户/null 联产到组/null 联产承包/null 联会/null 联体别墅/null 联俄/null 联保/null 联兆/null 联共/null 联军/null 联力/null 联办/null 联动/null 联华/null 联句/null 联合/null 联合会/null 联合体/null 联合作战/null 联合公报/null 联合军演/null 联合制/null 联合包裹服务公司/null 联合发表/null 联合古大陆/null 联合国儿童基金会/null 联合国大会/null 联合国安全理事会/null 联合国宪章/null 联合国开发计划署/null 联合国教科文组织/null 联合国气候变化框架公约/null 联合国海洋法公约/null 联合国环境规划署/null 联合国秘书处/null 联合国难民事务高级专员办事处/null 联合声明/null 联合宣言/null 联合式合成词/null 联合战线/null 联合技术公司/null 联合报/null 联合收割机/null 联合政府/null 联合机/null 联合核事故协调中心/null 联合演习/null 联合王国/null 联合组织/null 联合者/null 联合自强/null 联合航空公司/null 联合舰队/null 联合行动/null 联合通讯社/null 联合采煤机/null 联同/null 联名/null 联在/null 联大/null 联姻/null 联婚/null 联宗/null 联展/null 联展联销/null 联席/null 联席会议/null 联席董事/null 联建/null 联想/null 联想学习/null 联想起/null 联想集团/null 联成/null 联成一体/null 联成一片/null 联户/null 联手/null 联接/null 联播/null 联数/null 联星/null 联机/null 联机分析处理/null 联机帮助/null 联机服务/null 联机游戏/null 联次/null 联欢/null 联欢会/null 联欢性/null 联欢晚会/null 联欢节/null 联氨/null 联电/null 联盟/null 联盟号/null 联社/null 联票/null 联立方程/null 联系/null 联系业务/null 联系人/null 联系实际/null 联系方式/null 联系点/null 联系着/null 联系群众/null 联组/null 联结/null 联结主义/null 联结器/null 联络/null 联络员/null 联络处/null 联络小组/null 联络性/null 联络站/null 联络簿/null 联络部/null 联绵/null 联绵不断/null 联绵字/null 联缀/null 联网/null 联网环境/null 联署/null 联翩/null 联考/null 联航/null 联苯/null 联苯基/null 联营/null 联营企业/null 联营公司/null 联行/null 联袂/null 联诵/null 联调联试/null 联谊/null 联谊会/null 联贯/null 联赛/null 联轴器/null 联轴节/null 联运/null 联运票/null 联通红筹公司/null 联邦/null 联邦制/null 联邦化/null 联邦大楼/null 联邦州/null 联邦德国/null 联邦快递/null 联邦政府/null 联邦电信交通委员会/null 联邦紧急措施署/null 联邦调查局/null 联邦通信委员会/null 联销/null 联锁/null 联锁店/null 联队/null 联防/null 联防区/null 联防队/null 联音/null 聘为/null 聘书/null 聘任/null 聘任制/null 聘召/null 聘娶婚/null 聘期/null 聘用/null 聘用制/null 聘礼/null 聘约/null 聘请/null 聘选/null 聘金/null 聘问/null 聚丙烯/null 聚丙烯纤维/null 聚丙烯腈纤维/null 聚义/null 聚乙烯/null 聚乙烯塑料/null 聚乙烯醇/null 聚乙烯醇缩甲醛纤维/null 聚众/null 聚众斗殴/null 聚众赌博/null 聚众闹事/null 聚伙/null 聚会/null 聚伞花序/null 聚光/null 聚光太阳能/null 聚光灯/null 聚光镜/null 聚友/null 聚变/null 聚变反应/null 聚变武器/null 聚合/null 聚合体/null 聚合作用/null 聚合反应/null 聚合物/null 聚合脢/null 聚合资讯订阅/null 聚合酶/null 聚四氟乙烯/null 聚四氟乙烯塑料/null 聚在一起/null 聚头/null 聚宝/null 聚宝盆/null 聚对苯二甲酸乙二酯纤维/null 聚居/null 聚居地/null 聚性/null 聚拢/null 聚敛/null 聚散/null 聚晤/null 聚歼/null 聚氨酯/null 聚氯乙烯/null 聚沙之年/null 聚沙成塔/null 聚灯/null 聚点/null 聚焦/null 聚珍版/null 聚甲基丙烯酸甲酯塑料/null 聚甲醛/null 聚矿作用/null 聚碳酸酯/null 聚积/null 聚米为山/null 聚精会神/null 聚结/null 聚结剂/null 聚聚/null 聚脂/null 聚苯乙烯/null 聚苯乙烯塑料/null 聚萤映雪/null 聚萤积雪/null 聚落/null 聚蚁成雷/null 聚议/null 聚谈/null 聚财/null 聚赌/null 聚酯/null 聚酯树脂/null 聚酯纤维/null 聚酰亚胺/null 聚酰胺/null 聚酰胺纤维/null 聚集/null 聚餐/null 聚饮/null 聚首/null 聚齐/null 聪慧/null 聪慧过人/null 聪敏/null 聪明/null 聪明人/null 聪明伶俐/null 聪明反被聪明误/null 聪明才智/null 聪明绝顶/null 聪明能干/null 聪明过头/null 聪颖/null 聪颖过人/null 肃北县/null 肃反/null 肃反运动/null 肃坐/null 肃宁/null 肃州/null 肃州区/null 肃慎/null 肃敬/null 肃杀/null 肃清/null 肃清反革命分子/null 肃然/null 肃然起敬/null 肃穆/null 肃立/null 肃静/null 肄业/null 肄业生/null 肄业证书/null 肆业/null 肆力/null 肆意/null 肆意妄为/null 肆意攻击/null 肆扰/null 肆无忌惮/null 肆虐/null 肆行/null 肆行无忌/null 肆行无惮/null 肆言如狂/null 肆言无忌/null 肆言无惮/null 肆言植党/null 肆言詈辱/null 肇东/null 肇事/null 肇事人/null 肇事者/null 肇事逃逸/null 肇俊哲/null 肇因/null 肇始/null 肇州/null 肇庆/null 肇庆地区/null 肇庆大学/null 肇建/null 肇源/null 肇祸/null 肇端/null 肉丁/null 肉丝/null 肉中刺/null 肉中刺眼中钉/null 肉中毒/null 肉丸/null 肉价/null 肉体/null 肉体上/null 肉体化/null 肉体性/null 肉内/null 肉冠/null 肉冻/null 肉刑/null 肉制/null 肉制品/null 肉包/null 肉包子打狗/null 肉卷/null 肉商/null 肉嘟嘟/null 肉团/null 肉块/null 肉垂/null 肉头/null 肉夹馍/null 肉孜节/null 肉山酒海/null 肉峰/null 肉干/null 肉店/null 肉弹/null 肉感/null 肉排/null 肉搏/null 肉搏战/null 肉末/null 肉条/null 肉松/null 肉林酒池/null 肉果/null 肉桂/null 肉棒/null 肉欲/null 肉毒杆菌/null 肉毒杆菌毒素/null 肉毒梭状芽孢杆菌/null 肉毒素/null 肉汁/null 肉汁汤/null 肉汤/null 肉汤面/null 肉沫/null 肉片/null 肉牛/null 肉状/null 肉生痰/null 肉用/null 肉用鸡/null 肉畜/null 肉痛/null 肉瘤/null 肉皮/null 肉皮儿/null 肉眼/null 肉眼凡胎/null 肉眼图/null 肉眼愚眉/null 肉眼观察/null 肉碱/null 肉票/null 肉禽/null 肉穗花序/null 肉类/null 肉粽/null 肉糜/null 肉红/null 肉绽/null 肉绽皮开/null 肉羹/null 肉脯/null 肉色/null 肉芽/null 肉苁蓉/null 肉蛋/null 肉袒/null 肉豆/null 肉豆蔻/null 肉豆蔻料/null 肉质/null 肉质根/null 肉贩/null 肉赘/null 肉跳心惊/null 肉身/null 肉酱/null 肉酱面/null 肉铺/null 肉食/null 肉食动物/null 肉食品/null 肉食性/null 肉食者鄙/null 肉饼/null 肉馅/null 肉馅饼/null 肉馆/null 肉骨/null 肉鳍/null 肉鸡/null 肉麻/null 肋条/null 肋状/null 肋肉/null 肋肩累足/null 肋膜/null 肋膜炎/null 肋间/null 肋间肌/null 肋骨/null 肋骨状/null 肌体/null 肌动蛋白/null 肌原纤维/null 肌无完肤/null 肌炎/null 肌理/null 肌瘤/null 肌纤维/null 肌纤蛋白/null 肌肉/null 肌肉发达/null 肌肉松弛剂/null 肌肉注射/null 肌肉组织/null 肌肉萎缩症/null 肌肤/null 肌腱/null 肏你妈/null 肏屄/null 肏蛋/null 肏逼/null 肐膊/null 肓干/null 肖伯纳/null 肖像/null 肖像权/null 肖像画/null 肖恩/null 肖扬/null 肖邦/null 肘子/null 肘挤/null 肘推/null 肘状物/null 肘窝/null 肘腋/null 肘腋之忧/null 肘腋之患/null 肘部/null 肚儿/null 肚兜/null 肚喉科/null 肚子/null 肚子痛/null 肚孤/null 肚带/null 肚痛/null 肚白/null 肚皮/null 肚皮舞/null 肚肠/null 肚脐/null 肚脐眼/null 肚腩/null 肚腹/null 肚量/null 肛交/null 肛瘘/null 肛道/null 肛门/null 肛门直肠/null 肝儿/null 肝功能/null 肝吸虫/null 肝气/null 肝火/null 肝炎/null 肝片/null 肝疾/null 肝病/null 肝癌/null 肝硬化/null 肝硬变/null 肝糖/null 肝肠寸断/null 肝肿大/null 肝胆/null 肝胆楚越/null 肝胆涂地/null 肝胆照人/null 肝胆相照/null 肝胆胡越/null 肝脏/null 肝脑/null 肝脑涂地/null 肝色/null 肝蛭/null 肝部/null 肝风/null 肠仔/null 肠伤寒/null 肠儿/null 肠内/null 肠内脏/null 肠壁/null 肠套叠/null 肠子/null 肠支/null 肠断/null 肠梗阻/null 肠毒素/null 肠液/null 肠溃疡/null 肠激酶/null 肠炎/null 肠病毒/null 肠痈/null 肠癌/null 肠管/null 肠粉/null 肠系膜/null 肠线/null 肠绒毛/null 肠结核/null 肠绞痛/null 肠肚/null 肠肥脑满/null 肠胃/null 肠胃炎/null 肠胃病/null 肠胃病学/null 肠胃道/null 肠菌/null 肠虫/null 肠蠕动/null 肠衣/null 肠道/null 肠镜/null 肠阻塞/null 肠骨/null 股东/null 股东名册/null 股东大会/null 股东特别大会/null 股二头肌/null 股价/null 股份/null 股份公司/null 股份制/null 股份有限公司/null 股份经济/null 股分/null 股利/null 股动脉/null 股劲/null 股匪/null 股员/null 股四头肌/null 股子/null 股室/null 股市/null 股市低迷/null 股息/null 股指/null 股掌/null 股掌之上/null 股数/null 股本/null 股本金比率/null 股权/null 股栗/null 股栗肤粟/null 股款/null 股民/null 股沟/null 股疝/null 股癣/null 股票/null 股票交易/null 股票交易所/null 股票代号/null 股票市场/null 股票投资/null 股票指数/null 股绳/null 股肉/null 股肱/null 股资/null 股金/null 股长/null 股集资/null 股骨/null 肢体/null 肢势/null 肢窝/null 肢节/null 肢解/null 肤廓/null 肤泛/null 肤浅/null 肤皮/null 肤皮潦草/null 肤色/null 肤觉/null 肥东/null 肥乡/null 肥儿丸/null 肥分/null 肥力/null 肥厚/null 肥圆/null 肥城/null 肥墩墩/null 肥壮/null 肥大/null 肥大症/null 肥头/null 肥头大耳/null 肥实/null 肥差/null 肥效/null 肥料/null 肥水/null 肥水不流外人田/null 肥沃/null 肥源/null 肥煤/null 肥猪/null 肥田/null 肥田粉/null 肥田草/null 肥瘦/null 肥瘦儿/null 肥皂/null 肥皂剧/null 肥皂水/null 肥皂沫/null 肥皂泡/null 肥皂箱/null 肥皂般/null 肥硕/null 肥缺/null 肥美/null 肥肉/null 肥肠/null 肥肥/null 肥育/null 肥胖/null 肥胖症/null 肥腻/null 肥西/null 肥遁鸣高/null 肥马虬裘/null 肥马轻裘/null 肥鲜/null 肩上/null 肩头/null 肩宽/null 肩射导弹/null 肩带/null 肩并肩/null 肩扛/null 肩担两头脱/null 肩挑/null 肩摩毂击/null 肩摩踵接/null 肩窝/null 肩章/null 肩筐/null 肩背相望/null 肩胛/null 肩胛骨/null 肩膀/null 肩膊/null 肩负/null 肩负起/null 肩负重任/null 肩起/null 肩部/null 肩骨/null 肮脏/null 肯于/null 肯亚/null 肯切/null 肯堂肯构/null 肯塔基/null 肯塔基州/null 肯定/null 肯定句/null 肯定并例句/null 肯定性/null 肯尼亚/null 肯尼亚人/null 肯尼迪/null 肯尼迪航天中心/null 肯尼迪角/null 肯干/null 肯德基炸鸡/null 肯德拉/null 肯普索恩/null 肯构肯堂/null 肯沃伦/null 肯特/null 肯綮/null 肱三头肌/null 肱二头肌/null 肱动脉/null 肱骨/null 育人/null 育儿/null 育儿室/null 育婴/null 育婴堂/null 育婴室/null 育幼院/null 育成/null 育才/null 育林/null 育水/null 育种/null 育秧/null 育空/null 育空河/null 育肥/null 育苗/null 育雏/null 育龄/null 育龄期/null 肴馔/null 肺刺激性毒剂/null 肺动脉/null 肺叶/null 肺吸虫/null 肺尘/null 肺循环/null 肺心病/null 肺气肿/null 肺水肿/null 肺泡/null 肺活量/null 肺炎/null 肺炎克雷伯氏菌/null 肺炎双球菌/null 肺炎霉浆菌/null 肺病/null 肺病患者/null 肺病热/null 肺痨/null 肺癌/null 肺结核/null 肺结核病/null 肺脏/null 肺脓肿/null 肺腑/null 肺腑之言/null 肺蛭/null 肺通气/null 肺部/null 肺静脉/null 肺鱼/null 肽单位/null 肽基/null 肽聚糖/null 肽链/null 肽键/null 肾上/null 肾上腺/null 肾上腺皮质/null 肾上腺素/null 肾上腺髓质/null 肾亏/null 肾功能/null 肾囊/null 肾小球/null 肾炎/null 肾病/null 肾病综合症/null 肾盂/null 肾盂炎/null 肾结核/null 肾结石/null 肾脏/null 肾虚/null 肿伤/null 肿块/null 肿大/null 肿物/null 肿痛/null 肿瘤/null 肿瘤切除术/null 肿瘤学/null 肿瘤病医生/null 肿胀/null 肿起/null 肿骨鹿/null 胀力/null 胀大/null 胀气/null 胀满/null 胀破/null 胀胀/null 胀裂/null 胀起/null 胁从/null 胁从犯/null 胁持/null 胁肩谄笑/null 胁迫/null 胃下垂/null 胃中/null 胃内/null 胃口/null 胃壁/null 胃寒/null 胃扩张/null 胃毒剂/null 胃液/null 胃液素/null 胃溃疡/null 胃灼热/null 胃炎/null 胃疼/null 胃病/null 胃痛/null 胃癌/null 胃绕道/null 胃肠/null 胃肠炎/null 胃脘/null 胃腺/null 胃舒平/null 胃药/null 胃蛋白酶/null 胃部/null 胃酸/null 胃镜/null 胄子/null 胄甲/null 胄裔/null 胄裔繁衍/null 胆儿/null 胆力/null 胆力过人/null 胆囊/null 胆囊炎/null 胆固醇/null 胆壮/null 胆大/null 胆大包天/null 胆大如斗/null 胆大妄为/null 胆大心细/null 胆大无敌/null 胆子/null 胆寒/null 胆小/null 胆小如鼠/null 胆小怕事/null 胆小者/null 胆小鬼/null 胆怯/null 胆惊心寒/null 胆惊心战/null 胆惊心颤/null 胆战/null 胆战心寒/null 胆战心惊/null 胆敢/null 胆气/null 胆汁/null 胆瓶/null 胆略/null 胆石/null 胆石病/null 胆石症/null 胆石绞痛/null 胆矾/null 胆破/null 胆破心惊/null 胆碱/null 胆碱酯酶/null 胆管/null 胆红素/null 胆结石/null 胆绿素/null 胆胀瘟/null 胆色素/null 胆虚/null 胆识/null 胆识过人/null 胆道/null 胆量/null 胆颤心寒/null 胆颤心惊/null 胆魄/null 背上/null 背不住/null 背义忘恩/null 背书/null 背井/null 背井离乡/null 背侧/null 背信/null 背信弃义/null 背信忘义/null 背债/null 背光/null 背光式/null 背光性/null 背兴/null 背出/null 背包/null 背包客/null 背包游/null 背包袱/null 背叛/null 背叛者/null 背后/null 背后议论/null 背向/null 背囊/null 背地/null 背地里/null 背地风/null 背城一战/null 背城借一/null 背墙/null 背头/null 背子/null 背字/null 背对背/null 背山/null 背山临水/null 背山起楼/null 背带/null 背弃/null 背影/null 背影儿/null 背心/null 背心裤/null 背恩忘义/null 背悔/null 背搭子/null 背斜/null 背斜层/null 背日性/null 背旮旯儿/null 背时/null 背景/null 背景墙/null 背景音乐/null 背暗投明/null 背板/null 背椅/null 背榜/null 背槽抛粪/null 背气/null 背水一战/null 背水击/null 背水阵/null 背熟/null 背理/null 背生芒刺/null 背疼/null 背痛/null 背眼/null 背着/null 背着手/null 背离/null 背签/null 背篓/null 背篮/null 背篼/null 背紫腰金/null 背约/null 背脊/null 背脊骨/null 背若芒刺/null 背街/null 背袋/null 背誓/null 背诵/null 背谬/null 背负/null 背起/null 背躬/null 背过/null 背运/null 背逆/null 背道而驰/null 背部/null 背阔肌/null 背阴/null 背集/null 背静/null 背靠/null 背靠背/null 背面/null 背风/null 背饭/null 背驰/null 背骨/null 背鳍/null 背黑锅/null 胎中/null 胎位/null 胎便/null 胎儿/null 胎儿学/null 胎具/null 胎内/null 胎动/null 胎压/null 胎发/null 胎外/null 胎教/null 胎毒/null 胎毛/null 胎气/null 胎爆/null 胎生/null 胎生学/null 胎痣/null 胎盘/null 胎粪/null 胎膜/null 胎衣/null 胎记/null 胎面/null 胖乎乎/null 胖人/null 胖嘟嘟/null 胖墩儿/null 胖墩墩/null 胖大海/null 胖头鱼/null 胖子/null 胖瘦/null 胖的/null 胖胖/null 胚乳/null 胚体/null 胚叶/null 胚后发育/null 胚囊/null 胚子/null 胚孔/null 胚层/null 胚根/null 胚珠/null 胚盘/null 胚种/null 胚胎/null 胚胎发生/null 胚胎学/null 胚膜/null 胚芽/null 胚芽米/null 胚芽鞘/null 胚轴/null 胛骨/null 胜不骄/null 胜不骄败不馁/null 胜之/null 胜之不武/null 胜于/null 胜仗/null 胜任/null 胜任愉快/null 胜任能力/null 胜似/null 胜出/null 胜利/null 胜利在望/null 胜利果实/null 胜利者/null 胜券/null 胜地/null 胜天/null 胜数/null 胜景/null 胜智/null 胜朝/null 胜残去杀/null 胜算/null 胜者/null 胜诉/null 胜读十年书/null 胜负/null 胜负兵家常势/null 胜负难测/null 胜败/null 胜败乃兵家常事/null 胜过/null 胜过一个诸葛亮/null 胜迹/null 胜选/null 胜造七级浮屠/null 胞兄/null 胞叔/null 胞嘧啶/null 胞囊/null 胞妹/null 胞姐/null 胞子/null 胞弟/null 胞波/null 胞浆/null 胞状/null 胞胎/null 胞胚/null 胞芽/null 胞藻/null 胞虫/null 胞衣/null 胠箧/null 胠箧者流/null 胡乐/null 胡乱/null 胡人/null 胡佛/null 胡作非为/null 胡佳/null 胡借/null 胡克/null 胡克定律/null 胡匪/null 胡司战争/null 胡吃/null 胡吃海喝/null 胡吃海塞/null 胡同/null 胡吣/null 胡吹/null 胡吹乱捧/null 胡噜/null 胡图族/null 胡天/null 胡天胡帝/null 胡夫/null 胡姬花/null 胡子/null 胡子拉碴/null 胡子眉毛一把抓/null 胡家/null 胡弄/null 胡志强/null 胡志明/null 胡志明市/null 胡思/null 胡思乱想/null 胡思乱量/null 胡想/null 胡慧中/null 胡扯/null 胡扯八溜/null 胡扯淡/null 胡抡/null 胡搅/null 胡搅蛮缠/null 胡搞/null 胡服/null 胡来/null 胡杨/null 胡枝子/null 胡桃/null 胡桃木/null 胡桃树/null 胡桃色/null 胡椒/null 胡椒子/null 胡椒属/null 胡椒粉/null 胡椒粒/null 胡椒薄荷/null 胡涂/null 胡涂虫/null 胡温新政/null 胡燕妮/null 胡狼/null 胡琴/null 胡琴儿/null 胡瓜/null 胡瓜鱼/null 胡疵/null 胡笙/null 胡笳/null 胡紫微/null 胡紫薇/null 胡编乱造/null 胡缠/null 胡耀邦/null 胡芦巴/null 胡芫/null 胡花/null 胡茬/null 胡荽/null 胡萝卜/null 胡萝卜素/null 胡蜂/null 胡蝶/null 胡言/null 胡言乱语/null 胡言汉语/null 胡诌/null 胡诌乱傍/null 胡诌乱扯/null 胡诌乱说/null 胡诌乱道/null 胡诌八扯/null 胡话/null 胡说/null 胡说乱讲/null 胡说乱道/null 胡说八道/null 胡说白道/null 胡豆/null 胡适/null 胡鄂公/null 胡里胡涂/null 胡铨/null 胡锦涛/null 胡闹/null 胡须/null 胡颓子/null 胡风/null 胡髭/null 胡麻/null 胡麻籽/null 胥吏/null 胧的/null 胪列/null 胪陈/null 胫骨/null 胬肉/null 胭脂/null 胭脂红/null 胭脂鱼/null 胯下/null 胯下之辱/null 胯骨/null 胰子/null 胰岛/null 胰岛素/null 胰液/null 胰淀粉酶/null 胰脂酶/null 胰脏/null 胰脏炎/null 胰腺/null 胰腺炎/null 胰蛋白酶/null 胳肢/null 胳肢窝/null 胳膊/null 胳膊肘/null 胳膊肘子/null 胳膊肘朝外拐/null 胳膊腕子/null 胳臂/null 胳臂箍儿/null 胳臂肘儿/null 胴体/null 胶东/null 胶丝/null 胶乳/null 胶住/null 胶体/null 胶体化学/null 胶体溶液/null 胶剂/null 胶化体/null 胶南/null 胶印/null 胶卷/null 胶卷匣/null 胶原/null 胶原纤维/null 胶原蛋白/null 胶原质/null 胶合/null 胶合剂/null 胶合板/null 胶囊/null 胶圈/null 胶土/null 胶块/null 胶垫/null 胶塞/null 胶子/null 胶州/null 胶州湾/null 胶布/null 胶带/null 胶底/null 胶接/null 胶木/null 胶条/null 胶柱调瑟/null 胶柱鼓瑟/null 胶氨芹/null 胶水/null 胶水般/null 胶泥/null 胶济铁路/null 胶漆/null 胶片/null 胶片佩章/null 胶版/null 胶版纸/null 胶状/null 胶状体/null 胶状物/null 胶皮/null 胶盒/null 胶着/null 胶管/null 胶粉/null 胶粒/null 胶粘/null 胶粘剂/null 胶纸/null 胶结/null 胶膜/null 胶著/null 胶质/null 胶轮/null 胶轴/null 胶辊/null 胶靴/null 胶鞋/null 胶黏剂/null 胶黐/null 胸中/null 胸中宿物/null 胸中无数/null 胸中有数/null 胸侧/null 胸像/null 胸前/null 胸口/null 胸噎/null 胸围/null 胸墙/null 胸壁/null 胸外心脏按摩/null 胸大肌/null 胸宽/null 胸廓/null 胸廓切开术/null 胸怀/null 胸怀坦荡/null 胸怀大局/null 胸怀大志/null 胸无城府/null 胸无大志/null 胸无宿物/null 胸无点墨/null 胸有丘壑/null 胸有城府/null 胸有成略/null 胸有成竹/null 胸有成算/null 胸有甲兵/null 胸椎/null 胸槽/null 胸次/null 胸毛/null 胸甲/null 胸章/null 胸线/null 胸罩/null 胸肉/null 胸肌/null 胸胁/null 胸脯/null 胸腔/null 胸腹/null 胸腺/null 胸腺嘧啶/null 胸膛/null 胸膜/null 胸膜炎/null 胸臆/null 胸花/null 胸衣/null 胸襟/null 胸透/null 胸部/null 胸里/null 胸针/null 胸闷/null 胸靶/null 胸音/null 胸饰/null 胸骨/null 胸鳍/null 胺基酸/null 胼手胝足/null 胼手胼足/null 胼胝/null 胼胝体/null 能上/null 能上能下/null 能不/null 能不能/null 能为/null 能了解/null 能事/null 能交换/null 能人/null 能以/null 能传达/null 能传送/null 能伸/null 能伸能屈/null 能使/null 能偿债/null 能养活/null 能再/null 能写善算/null 能分开/null 能分泌/null 能力/null 能力素质/null 能劝告/null 能动性/null 能吃/null 能否/null 能吸收/null 能够/null 能容纳/null 能屈能伸/null 能工巧匠/null 能干/null 能弱能强/null 能彀/null 能征惯战/null 能愿动词/null 能手/null 能掐会算/null 能接受/null 能文能武/null 能歌善舞/null 能源/null 能源供应/null 能源危机/null 能源工业/null 能源开发/null 能源技术/null 能源短缺/null 能源科学/null 能源管理/null 能源经济/null 能者/null 能者为师/null 能者多劳/null 能耐/null 能育性/null 能胜任/null 能见度/null 能视度/null 能言取譬/null 能言善辩/null 能言快语/null 能言舌辩/null 能诗善文/null 能说/null 能说会道/null 能量/null 能量代谢/null 能量守恒/null 能量守恒定律/null 脂性/null 脂油/null 脂溢性皮炎/null 脂环烃/null 脂粉/null 脂粉气/null 脂肪/null 脂肪团/null 脂肪瘤/null 脂肪肝/null 脂肪质/null 脂肪酶/null 脂肪酸/null 脂膏/null 脂蛋白/null 脂质体/null 脂酸/null 脆弱/null 脆快/null 脆性/null 脆熟/null 脆片/null 脆生/null 脆皮/null 脆目/null 脆而不坚/null 脆耳/null 脆脆/null 脆谷乐/null 脆过/null 脆饼/null 脆骨/null 脉中/null 脉内/null 脉冲/null 脉冲技术/null 脉冲星/null 脉冲计/null 脉冲雷达/null 脉动/null 脉动星/null 脉动电流/null 脉压/null 脉口/null 脉息/null 脉搏/null 脉搏表/null 脉搏计/null 脉斑岩/null 脉案/null 脉横/null 脉波/null 脉波计/null 脉理/null 脉石/null 脉码/null 脉管/null 脉管组织/null 脉络/null 脉络膜/null 脉脉/null 脉诊/null 脉象/null 脉跳/null 脉轮/null 脉轮学说/null 脉轮理论/null 脉门/null 脊丘/null 脊令/null 脊柱/null 脊柱裂/null 脊梁/null 脊梁骨/null 脊椎/null 脊椎动物/null 脊椎动物门/null 脊椎指压治疗医生/null 脊椎指压治疗师/null 脊椎指压疗法/null 脊椎炎/null 脊椎骨/null 脊檩/null 脊神经/null 脊索/null 脊索动物/null 脊索动物门/null 脊线/null 脊肋/null 脊背/null 脊骨/null 脊髓/null 脊髓灰质炎/null 脊髓炎/null 脊鳍/null 脍不厌细/null 脍炙人口/null 脏乱/null 脏乱差/null 脏了/null 脏兮兮/null 脏器/null 脏土/null 脏字/null 脏弹/null 脏手/null 脏水/null 脏污/null 脏污着/null 脏煤/null 脏物/null 脏病/null 脏脏/null 脏腑/null 脏话/null 脏躁症/null 脏钱/null 脐屎/null 脐带/null 脐梗/null 脐橙/null 脐状/null 脐轮/null 脐风/null 脑上体/null 脑下/null 脑下垂体/null 脑下腺/null 脑中/null 脑中风/null 脑体倒挂/null 脑儿/null 脑充血/null 脑内啡/null 脑出血/null 脑力/null 脑力劳动/null 脑力劳动者/null 脑力激荡法/null 脑勺/null 脑勺子/null 脑卒中/null 脑变/null 脑叶/null 脑后/null 脑回/null 脑垂体/null 脑壳/null 脑子/null 脑子生锈/null 脑室/null 脑岛/null 脑干/null 脑性痲痹/null 脑性麻痹/null 脑成像技术/null 脑损伤/null 脑杓/null 脑桥/null 脑死亡/null 脑残/null 脑水肿/null 脑汁/null 脑沟/null 脑波/null 脑浆/null 脑海/null 脑涨/null 脑液/null 脑溢血/null 脑满/null 脑满肠肥/null 脑炎/null 脑状/null 脑瓜/null 脑瓜儿/null 脑瓜子/null 脑瓢儿/null 脑电图/null 脑电图版/null 脑电波/null 脑病/null 脑瘤/null 脑瘫/null 脑神经/null 脑积水/null 脑筋/null 脑筋好/null 脑细胞/null 脑肿瘤/null 脑胀/null 脑脊液/null 脑脊髓/null 脑膜/null 脑膜炎/null 脑血栓/null 脑血管屏障/null 脑血管疾病/null 脑袋/null 脑袋开花/null 脑袋瓜子/null 脑贫血/null 脑部/null 脑量/null 脑门/null 脑门子/null 脑际/null 脑震荡/null 脑颅/null 脑髓/null 脓包/null 脓口/null 脓毒病/null 脓水/null 脓汁/null 脓泡/null 脓液/null 脓疮/null 脓疱/null 脓疱病/null 脓疹/null 脓痰/null 脓肿/null 脓胸/null 脓血症/null 脔割/null 脖围/null 脖子/null 脖梗儿/null 脖梗子/null 脖领/null 脖颈/null 脖颈儿/null 脖颈子/null 脚上/null 脚下/null 脚不沾地/null 脚不点地/null 脚丫/null 脚丫子/null 脚位/null 脚凳/null 脚力/null 脚劲/null 脚印/null 脚后跟/null 脚垫/null 脚夫/null 脚孤拐/null 脚尖/null 脚带/null 脚底/null 脚底板/null 脚形/null 脚心/null 脚忙手乱/null 脚户/null 脚手架/null 脚扣/null 脚指/null 脚指头/null 脚指甲/null 脚掌/null 脚料/null 脚本/null 脚板/null 脚架/null 脚标/null 脚根/null 脚正不怕鞋歪/null 脚步/null 脚步声/null 脚步快/null 脚步轻盈/null 脚气/null 脚气病/null 脚注/null 脚灯/null 脚炉/null 脚爪/null 脚病/null 脚痛/null 脚痛医脚/null 脚癣/null 脚盆/null 脚背/null 脚脖子/null 脚腕/null 脚腕子/null 脚色/null 脚行/null 脚误/null 脚趾/null 脚趾头/null 脚趾尖/null 脚跟/null 脚跟稳/null 脚踏/null 脚踏两只船/null 脚踏两条船/null 脚踏实地/null 脚踏板/null 脚踏车/null 脚踝/null 脚踩两只船/null 脚蹬/null 脚蹼/null 脚轮/null 脚违例/null 脚迹/null 脚钱/null 脚链/null 脚镣/null 脚镣手铐/null 脚镯/null 脚门/null 脚面/null 脚鸭子/null 脯子/null 脯氨酸/null 脱下/null 脱不了身/null 脱了/null 脱了臼/null 脱产/null 脱产学习/null 脱产干部/null 脱位/null 脱俗/null 脱光/null 脱兔/null 脱党/null 脱出/null 脱北者/null 脱卸/null 脱去/null 脱发/null 脱口/null 脱口成章/null 脱口秀/null 脱口而出/null 脱咖啡因/null 脱坯/null 脱垂/null 脱壳/null 脱壳机/null 脱壳金蝉/null 脱孝/null 脱尽/null 脱岗/null 脱帽/null 脱序/null 脱开/null 脱手/null 脱换/null 脱掉/null 脱敏/null 脱散/null 脱期/null 脱机/null 脱来/null 脱档/null 脱模/null 脱毛/null 脱毛剂/null 脱毛用/null 脱氢/null 脱氢酶/null 脱氧/null 脱氧剂/null 脱氧核糖/null 脱氧核糖核酸/null 脱氧核苷酸/null 脱氧脱糖核酸/null 脱氧麻黄碱/null 脱水/null 脱水器/null 脱水机/null 脱泡/null 脱泥/null 脱洒/null 脱涩/null 脱溶/null 脱滑/null 脱漏/null 脱灰/null 脱然/null 脱班/null 脱略/null 脱皮/null 脱皮掉肉/null 脱盐/null 脱盲/null 脱硫/null 脱碳/null 脱离/null 脱离危险/null 脱离实际/null 脱离群众/null 脱离者/null 脱离苦海/null 脱离速度/null 脱秀/null 脱稿/null 脱空/null 脱空汉/null 脱粒/null 脱粒机/null 脱粟/null 脱线/null 脱缰/null 脱缰之马/null 脱网/null 脱罪/null 脱羽/null 脱者/null 脱肛/null 脱胎/null 脱胎成仙/null 脱胎换骨/null 脱胎漆器/null 脱胶/null 脱脂/null 脱脂乳/null 脱脂棉/null 脱脱/null 脱臼/null 脱色/null 脱色剂/null 脱节/null 脱落/null 脱落性/null 脱衣/null 脱衣服/null 脱衣舞/null 脱裤/null 脱裤子放屁/null 脱误/null 脱货/null 脱货求现/null 脱贫/null 脱贫致富/null 脱身/null 脱轨/null 脱逃/null 脱逃术/null 脱钩/null 脱销/null 脱除/null 脱险/null 脱靴/null 脱靴器/null 脱靶/null 脱鞋/null 脱颖/null 脱颖而出/null 脱骨成佛/null 脱骨换胎/null 脲醛/null 脸上/null 脸书/null 脸儿/null 脸厚/null 脸型/null 脸大/null 脸子/null 脸孔/null 脸庞/null 脸形/null 脸水/null 脸白/null 脸的/null 脸皮/null 脸皮厚/null 脸盆/null 脸盆架/null 脸盘/null 脸盘儿/null 脸盲症/null 脸相/null 脸红/null 脸红筋暴/null 脸红筋涨/null 脸红脖子粗/null 脸罩/null 脸膛/null 脸膛儿/null 脸色/null 脸薄/null 脸蛋/null 脸蛋儿/null 脸蛋子/null 脸谱/null 脸软/null 脸部/null 脸都绿了/null 脸青色/null 脸面/null 脸颊/null 脸额/null 脾寒/null 脾性/null 脾气/null 脾气倔/null 脾气坏/null 脾气大/null 脾气好/null 脾气暴燥/null 脾炎/null 脾病/null 脾肉之叹/null 脾肿大/null 脾胃/null 脾胃相投/null 脾脏/null 脾虚/null 腆然/null 腆着/null 腆著/null 腆颜/null 腈纶/null 腊八/null 腊八粥/null 腊制/null 腊味/null 腊月/null 腊染法/null 腊梅/null 腊烛/null 腊笔/null 腊纸/null 腊肉/null 腊肠/null 腊象/null 腊雪/null 腊鸭/null 腋下/null 腋内/null 腋毛/null 腋生/null 腋窝/null 腋臭/null 腋芽/null 腌制/null 腌汁/null 腌泡/null 腌泡汁/null 腌浸/null 腌渍/null 腌渍品/null 腌猪/null 腌猪肉/null 腌肉/null 腌臜/null 腌菜/null 腌蛋/null 腌货/null 腌货商/null 腌鱼/null 腌黄瓜/null 腐乳/null 腐儒/null 腐刑/null 腐化/null 腐化堕落/null 腐坏/null 腐尸/null 腐干/null 腐恶/null 腐旧/null 腐朽/null 腐朽思想/null 腐植/null 腐植质/null 腐植酸类肥料/null 腐植酸铵/null 腐殖土/null 腐殖覆盖物/null 腐殖质/null 腐殖酸/null 腐气/null 腐烂/null 腐烂变质/null 腐熟/null 腐生/null 腐生兰/null 腐生物/null 腐皮/null 腐竹/null 腐肉/null 腐肥/null 腐臭/null 腐蚀/null 腐蚀剂/null 腐蚀性/null 腐蚀掉/null 腐蚀药/null 腐败/null 腐败分子/null 腐败性/null 腐败无能/null 腐败现象/null 腐败罪/null 腑版/null 腑脏/null 腓利门书/null 腓力/null 腓尼基/null 腓特烈斯塔/null 腓立比/null 腓立比书/null 腓肠肌/null 腓骨/null 腔壁/null 腔子/null 腔棘鱼/null 腔肠动物/null 腔调/null 腔隙/null 腕关节/null 腕力/null 腕夺/null 腕套/null 腕子/null 腕带/null 腕级/null 腕足/null 腕足动物/null 腕部/null 腕镯/null 腕隧道症候群/null 腕骨/null 腕龙/null 腘动脉/null 腘旁腱肌/null 腘窝/null 腘窝囊肿/null 腘绳肌/null 腘肌/null 腘静脉/null 腠理/null 腥味/null 腥气/null 腥腥/null 腥膻/null 腥臊/null 腥臭/null 腥风血雨/null 腥黑穗病/null 腧穴/null 腩炙/null 腭裂/null 腮帮/null 腮帮子/null 腮托/null 腮红/null 腮胡/null 腮腺/null 腮腺炎/null 腮须/null 腮颊/null 腰下/null 腰伤/null 腰刀/null 腰力/null 腰包/null 腰围/null 腰垫/null 腰墙/null 腰子/null 腰巾/null 腰布/null 腰带/null 腰斩/null 腰杆/null 腰杆子/null 腰板/null 腰板儿/null 腰果/null 腰果鸡丁/null 腰椎/null 腰椎间盘/null 腰椎间盘突出/null 腰椎间盘突出症/null 腰痛/null 腰眼/null 腰窝/null 腰缠万贯/null 腰肉/null 腰肌劳损/null 腰肢/null 腰背/null 腰腿/null 腰花/null 腰身/null 腰部/null 腰酸/null 腰里/null 腰金拖紫/null 腰金衣紫/null 腰锅/null 腰间/null 腰际/null 腰饰/null 腰骨/null 腰鼓/null 腰鼓兄弟/null 腰鼓舞/null 腱子/null 腱弓/null 腱炎/null 腱鞘/null 腱鞘炎/null 腹上部/null 腹中/null 腹侧/null 腹吸盘/null 腹哀/null 腹地/null 腹壁/null 腹层/null 腹带/null 腹心/null 腹心之患/null 腹心之疾/null 腹有鳞甲/null 腹板/null 腹水/null 腹水肿/null 腹泄/null 腹泻/null 腹疾/null 腹痛/null 腹直肌/null 腹稿/null 腹笥便便/null 腹笥甚宽/null 腹肌/null 腹股沟/null 腹胀/null 腹背/null 腹背之毛/null 腹背受敌/null 腹背相亲/null 腹腔/null 腹膜/null 腹膜炎/null 腹话术/null 腹语/null 腹语师/null 腹语术/null 腹诽/null 腹诽心谤/null 腹足/null 腹足类/null 腹足纲/null 腹部/null 腹部绞痛/null 腹面/null 腹鳍/null 腹鸣/null 腺体/null 腺嘌呤/null 腺嘌呤核甘三磷酸/null 腺垂体/null 腺样/null 腺毛/null 腺状/null 腺病毒/null 腺瘤/null 腺癌/null 腺细胞/null 腺苷/null 腻了/null 腻人/null 腻友/null 腻味/null 腻子/null 腻歪/null 腻烦/null 腻胃/null 腻腻/null 腻虫/null 腼脸/null 腼腆/null 腽肭/null 腽肭兽/null 腽肭脐/null 腾云/null 腾云驾雾/null 腾冲/null 腾出/null 腾地/null 腾开/null 腾挪/null 腾格里沙漠/null 腾空/null 腾空而起/null 腾腾/null 腾虎/null 腾蛟起凤/null 腾让/null 腾讯控股有限公司/null 腾贵/null 腾起/null 腾越/null 腾跃/null 腾达/null 腾飞/null 腾骧/null 腾黄/null 腿上/null 腿力/null 腿号/null 腿号箍/null 腿后腱/null 腿子/null 腿带/null 腿弯部/null 腿样/null 腿疼/null 腿筋/null 腿肚子/null 腿脚/null 腿腕子/null 腿部/null 腿骨/null 膀大腰圆/null 膀子/null 膀胱/null 膀胱气化/null 膀胱炎/null 膀胱结石/null 膀臂/null 膂力/null 膈疝/null 膈肌/null 膈膜/null 膈食病/null 膏剂/null 膏唇拭舌/null 膏子/null 膏油/null 膏火/null 膏火自煎/null 膏状物/null 膏粱/null 膏粱子弟/null 膏粱文绣/null 膏粱锦绣/null 膏肓/null 膏肓之疾/null 膏腴/null 膏膏/null 膏药/null 膏药旗/null 膏血/null 膑刑/null 膘情/null 膘肥/null 膘肥体壮/null 膛内/null 膛径/null 膛线/null 膜孔/null 膜拜/null 膜炎/null 膜片/null 膜翅目/null 膜质/null 膝上/null 膝上型/null 膝上型电脑/null 膝上舞/null 膝下/null 膝关节/null 膝头/null 膝状/null 膝甲/null 膝痒挠背/null 膝盖/null 膝盖骨/null 膝礼/null 膝行/null 膝行肘步/null 膝袒/null 膝部/null 膨体/null 膨体纱/null 膨出/null 膨大/null 膨大海/null 膨松/null 膨润土/null 膨涨/null 膨胀/null 膨胀性/null 膨胀水泥/null 膨胀系数/null 膨胀计/null 膳写者/null 膳务员/null 膳宿/null 膳房/null 膳费/null 膳食/null 膳魔师/null 膺任/null 膺品/null 膺惩/null 膺赏/null 膺选/null 膺造/null 膻味/null 膻腥/null 臀产式分娩/null 臀位/null 臀位分娩/null 臀位取胎术/null 臀围/null 臀大肌/null 臀尖/null 臀瓣/null 臀疣/null 臀肌/null 臀部/null 臀鳍/null 臁疮/null 臂力/null 臂助/null 臂弯/null 臂环/null 臂章/null 臂纱/null 臂膀/null 臂膊/null 臂镯/null 臃肿/null 臆度/null 臆想/null 臆想狂/null 臆想病/null 臆想症/null 臆断/null 臆测/null 臆见/null 臆造/null 臊子/null 臊气/null 臊腥/null 臌胀/null 臣一主二/null 臣下/null 臣仆/null 臣僚/null 臣妾/null 臣子/null 臣属/null 臣服/null 臣民/null 臣臣/null 臣虏/null 臧否/null 臧否人物/null 自上/null 自上而下/null 自下/null 自下而上/null 自不/null 自不待言/null 自不必说/null 自不量力/null 自专/null 自东/null 自个/null 自个儿/null 自为/null 自为阶级/null 自主/null 自主创新/null 自主权/null 自主神经/null 自主系统/null 自主经营/null 自乘/null 自习/null 自书/null 自交作物/null 自交系/null 自产/null 自今/null 自从/null 自以为/null 自以为是/null 自以为然/null 自以得计/null 自会/null 自会直/null 自传/null 自住/null 自体/null 自体免疫疾病/null 自作/null 自作主张/null 自作多情/null 自作聪明/null 自作自受/null 自供/null 自供状/null 自便/null 自保/null 自信/null 自信心/null 自修/null 自做/null 自傲/null 自养/null 自决/null 自决权/null 自况/null 自净作用/null 自出/null 自出一家/null 自出机杼/null 自分/null 自刎/null 自创/null 自制/null 自制力/null 自制炸弹/null 自力/null 自力更生/null 自办/null 自动/null 自动付款机/null 自动伞/null 自动免疫/null 自动化/null 自动化技术/null 自动取款机/null 自动售货机/null 自动地工作/null 自动射线摄影/null 自动性/null 自动恢复/null 自动扶梯/null 自动挂挡/null 自动挡/null 自动控制/null 自动提款/null 自动提款机/null 自动播放/null 自动机/null 自动柜员机/null 自动档/null 自动梯/null 自动检测/null 自动检索/null 自动楼梯/null 自动步枪/null 自动步道/null 自动气象站/null 自动电话/null 自动离合/null 自动线/null 自动自发/null 自动装置/null 自动车/null 自动铅笔/null 自动防止辐射程序/null 自助/null 自助洗衣店/null 自助餐/null 自励/null 自勉/null 自卑/null 自卑心理/null 自卑情绪/null 自卑感/null 自卖/null 自卖自夸/null 自卫/null 自卫战争/null 自卫权/null 自卫还击/null 自卫队/null 自即日起/null 自卸车/null 自发/null 自发势力/null 自发对称破缺/null 自发性/null 自发电位/null 自发的唯物主义/null 自取/null 自取其咎/null 自取其辱/null 自取灭亡/null 自受/null 自变数/null 自变量/null 自叙/null 自古/null 自古以来/null 自叹/null 自叹不如/null 自各/null 自各儿/null 自同寒蝉/null 自名/null 自吹自擂/null 自告奋勇/null 自命/null 自命不凡/null 自命清高/null 自咎/null 自哪/null 自唱/null 自喜/null 自喻/null 自嘲/null 自圆其说/null 自在/null 自在不成人/null 自在之物/null 自在逍遥/null 自在阶级/null 自填/null 自处/null 自处理/null 自备/null 自外/null 自大/null 自大狂/null 自大者/null 自失/null 自夸/null 自奉/null 自奉俭约/null 自奉甚俭/null 自如/null 自始/null 自始至终/null 自娱/null 自存/null 自学/null 自学成才/null 自学方法/null 自学者/null 自定/null 自定义/null 自家/null 自寻/null 自寻死路/null 自寻烦恼/null 自导/null 自导引/null 自封/null 自尊/null 自尊心/null 自小/null 自尽/null 自居/null 自崖而反/null 自差/null 自己/null 自己人/null 自己做/null 自己动手/null 自己方便/null 自带/null 自干/null 自幼/null 自序/null 自应/null 自底向上/null 自度曲/null 自建/null 自弃/null 自强/null 自强不息/null 自强自立/null 自强运动/null 自当/null 自律/null 自律性/null 自律性组织/null 自得/null 自得其乐/null 自忖/null 自怜/null 自怨自艾/null 自恃/null 自恃清高/null 自恋/null 自悔/null 自惜羽毛/null 自惭形秽/null 自感/null 自感应/null 自感系数/null 自愧不如/null 自愧弗如/null 自愿/null 自愿互利/null 自愿性/null 自愿者/null 自慰/null 自成/null 自成一家/null 自成体系/null 自我/null 自我介绍/null 自我作故/null 自我催眠/null 自我发展/null 自我安慰/null 自我实现/null 自我意识/null 自我批评/null 自我改造/null 自我牺牲/null 自我的人/null 自我表现/null 自我解嘲/null 自我评价/null 自我调节/null 自我防卫/null 自我陶醉/null 自戒/null 自戕/null 自打/null 自扰/null 自找/null 自找苦吃/null 自找麻烦/null 自投罗网/null 自报/null 自报公议/null 自报家门/null 自拍/null 自拍器/null 自拍模式/null 自拔/null 自拔来归/null 自招/null 自持/null 自掏/null 自掘/null 自掘坟墓/null 自控/null 自提/null 自擂/null 自救/null 自救不暇/null 自料/null 自斟自酌/null 自新/null 自明/null 自是/null 自暴自弃/null 自有/null 自有品牌/null 自有肺肠/null 自本/null 自杀/null 自杀式/null 自杀式汽车炸弹袭击事件/null 自杀式炸弹/null 自杀式爆炸/null 自杀性/null 自杀炸弹杀手/null 自杀者/null 自来/null 自来水/null 自来水笔/null 自来水管/null 自来火/null 自来红/null 自查/null 自核/null 自检/null 自欺/null 自欺欺人/null 自此/null 自毁/null 自民党/null 自求多福/null 自治/null 自治体/null 自治区/null 自治县/null 自治州/null 自治市/null 自治旗/null 自治机关/null 自治权/null 自治领/null 自流/null 自流井/null 自流井区/null 自流灌溉/null 自淫/null 自渎/null 自溶/null 自溺/null 自满/null 自激/null 自焚/null 自然/null 自然主义/null 自然之友/null 自然人/null 自然保护区/null 自然免疫/null 自然分工/null 自然力/null 自然区/null 自然台/null 自然史/null 自然哲学/null 自然地/null 自然地理/null 自然学/null 自然数/null 自然数集/null 自然村/null 自然条件/null 自然林/null 自然法/null 自然灾害/null 自然环境/null 自然现象/null 自然界/null 自然疗法/null 自然码/null 自然神论/null 自然科学/null 自然科学史/null 自然科学基金会/null 自然科学的唯物主义/null 自然经济/null 自然美/null 自然而然/null 自然色/null 自然观/null 自然规律/null 自然语言/null 自然资源/null 自然辩证法/null 自然选择/null 自然铜/null 自然风光/null 自燃/null 自爆/null 自爱/null 自理/null 自甘堕落/null 自甘落后/null 自生自灭/null 自用/null 自由/null 自由中国/null 自由主义/null 自由亚洲电台/null 自由企业/null 自由体操/null 自由党/null 自由化/null 自由古巴/null 自由基/null 自由基清除剂/null 自由女神像/null 自由宪章/null 自由市/null 自由市场/null 自由度/null 自由式/null 自由恋爱/null 自由意志/null 自由意志主义/null 自由放任/null 自由散漫/null 自由权/null 自由民/null 自由民主党/null 自由泳/null 自由活动/null 自由派/null 自由港/null 自由漂移的状态/null 自由焓/null 自由王国/null 自由电子/null 自由神像/null 自由竞争/null 自由素食主义/null 自由职业/null 自由自在/null 自由落体/null 自由落体运动/null 自由行/null 自由行动/null 自由诗/null 自由贸易/null 自由贸易区/null 自由软件基金会/null 自由选择/null 自由选择权/null 自由降落/null 自画像/null 自留/null 自留地/null 自白/null 自白书/null 自白者/null 自的/null 自盗/null 自相/null 自相关/null 自相惊扰/null 自相残害/null 自相残杀/null 自相水火/null 自相矛盾/null 自相鱼肉/null 自省/null 自矜/null 自知/null 自知之明/null 自知理亏/null 自硬性/null 自私/null 自私自利/null 自称/null 自称者/null 自稳/null 自立/null 自立自强/null 自立门户/null 自筹/null 自筹资金/null 自繇自在/null 自经/null 自给/null 自给自足/null 自绝/null 自编/null 自编自演/null 自缚手脚/null 自缢/null 自罪/null 自耕农/null 自肥/null 自花/null 自花传粉/null 自若/null 自荐/null 自营/null 自营商/null 自行/null 自行其是/null 自行安排/null 自行火炮/null 自行设计/null 自行车/null 自行车架/null 自行车赛/null 自行车馆/null 自裁/null 自装/null 自西/null 自要/null 自视/null 自视清高/null 自视甚高/null 自觉/null 自觉性/null 自觉的能动性/null 自觉自愿/null 自觉行秽/null 自言自语/null 自认/null 自讨没趣/null 自讨苦吃/null 自许/null 自设/null 自诉/null 自诉人/null 自诒伊戚/null 自诩/null 自语/null 自诱导/null 自说自话/null 自请/null 自谋/null 自谋出路/null 自谋职业/null 自谦/null 自豪/null 自豪感/null 自负/null 自负不凡/null 自负盈亏/null 自贡/null 自责/null 自购/null 自费/null 自费生/null 自费留学/null 自贻伊戚/null 自赎/null 自走/null 自足/null 自身/null 自身利益/null 自身建设/null 自身难保/null 自转/null 自转轴/null 自轻自贱/null 自辱/null 自述/null 自述文件/null 自适应/null 自选/null 自选动作/null 自选商场/null 自选市场/null 自造词/null 自遣/null 自郐以下/null 自酌/null 自酿/null 自重/null 自量/null 自销/null 自闭症/null 自问/null 自雇/null 自顶向下/null 自顾/null 自顾不暇/null 自顾自/null 自食其力/null 自食其果/null 自食其言/null 自馁/null 自首/null 自驾汽车出租/null 自驾租赁/null 自高/null 自高自大/null 自鸣/null 自鸣得意/null 自鸣清高/null 臭不/null 臭不可当/null 臭不可闻/null 臭乎乎/null 臭事/null 臭名/null 臭名昭彰/null 臭名昭著/null 臭名远扬/null 臭味/null 臭味相投/null 臭子儿/null 臭屁/null 臭弹/null 臭架子/null 臭棋/null 臭椿/null 臭气/null 臭气熏天/null 臭氧/null 臭氧层/null 臭烘烘/null 臭熏熏/null 臭的/null 臭皮囊/null 臭美/null 臭老九/null 臭腺/null 臭虫/null 臭豆腐/null 臭迹/null 臭钱/null 臭骂/null 臭鱼/null 臭鼬/null 至上/null 至为/null 至于/null 至交/null 至交契友/null 至亲/null 至亲好友/null 至亲骨肉/null 至今/null 至今还/null 至公无私/null 至关/null 至关紧要/null 至关重要/null 至再至三/null 至善/null 至善至美/null 至圣/null 至多/null 至好/null 至始至终/null 至宝/null 至尊/null 至尊至贵/null 至少/null 至尾/null 至当/null 至德/null 至意诚心/null 至日/null 至极/null 至此/null 至死/null 至死不屈/null 至死不悟/null 至死靡他/null 至毒/null 至沓来/null 至爱/null 至理/null 至理名言/null 至矣尽矣/null 至终/null 至若/null 至诚/null 至诚无昧/null 至诚高节/null 至迟/null 至高/null 至高无上/null 至高统治权/null 至高至上/null 致上/null 致书/null 致于/null 致仕/null 致以/null 致伤/null 致使/null 致信/null 致公党/null 致冷/null 致冷剂/null 致函/null 致力/null 致力于/null 致命/null 致命伤/null 致和/null 致哀/null 致好/null 致密/null 致富/null 致意/null 致敬/null 致敬意/null 致敬礼/null 致欢/null 致歉/null 致死/null 致死剂量/null 致死性/null 致死性毒剂/null 致残/null 致用/null 致电/null 致畸/null 致病/null 致病菌/null 致癌/null 致癌物/null 致癌物质/null 致礼/null 致祝词/null 致胜/null 致良知/null 致词/null 致谢/null 致贺/null 致辞/null 致远任重/null 致邀/null 臻于完善/null 臻于郅治/null 臻沉沧海/null 臻至/null 臼石/null 臼齿/null 臾须/null 舀出/null 舀勺/null 舀子/null 舀水/null 舀汤/null 舀起/null 舅公/null 舅妈/null 舅嫂/null 舅子/null 舅母/null 舅父/null 舅爷/null 舅舅/null 舆台/null 舆图/null 舆情/null 舆论/null 舆论导向/null 舆论工具/null 舆论界/null 舆论监督/null 舆论调查/null 舌下/null 舌下含服/null 舌下片/null 舌下神经/null 舌下腺/null 舌剑唇枪/null 舌后/null 舌吻/null 舌咽神经/null 舌头/null 舌尖/null 舌尖前音/null 舌尖后音/null 舌尖音/null 舌尖颤音/null 舌干/null 舌战/null 舌敝唇焦/null 舌敝耳聋/null 舌根/null 舌根音/null 舌炎/null 舌片/null 舌状片/null 舌状花/null 舌状部/null 舌端/null 舌耕/null 舌苔/null 舌蝇/null 舌触/null 舌钉/null 舌锋/null 舌面/null 舌面前音/null 舌面后音/null 舌面音/null 舌音/null 舌音字/null 舌鳎/null 舍下/null 舍不得/null 舍亲/null 舍人/null 舍位/null 舍入/null 舍利/null 舍利塔/null 舍利子/null 舍利子塔/null 舍去/null 舍友/null 舍命/null 舍命救人/null 舍安就危/null 舍实求虚/null 舍己/null 舍己为人/null 舍己为公/null 舍己从人/null 舍己就人/null 舍己成人/null 舍己救人/null 舍己芸人/null 舍弃/null 舍弟/null 舍得/null 舍我其谁/null 舍我复谁/null 舍掉/null 舍本/null 舍本事末/null 舍本逐末/null 舍本问末/null 舍正从邪/null 舍死忘生/null 舍生取义/null 舍生存义/null 舍生忘死/null 舍监/null 舍短从长/null 舍短取长/null 舍短录长/null 舍短用长/null 舍给/null 舍身/null 舍身为国/null 舍身图报/null 舍身救人/null 舍身求法/null 舍车保帅/null 舍近/null 舍近务远/null 舍近即远/null 舍近求远/null 舍近谋远/null 舍间/null 舐犊/null 舐犊之爱/null 舐犊情深/null 舐食/null 舒兰/null 舒卷/null 舒同/null 舒喘灵/null 舒坦/null 舒城/null 舒声/null 舒展/null 舒张/null 舒张压/null 舒心/null 舒怀/null 舒散/null 舒曼/null 舒服/null 舒梦兰/null 舒泰/null 舒淇/null 舒畅/null 舒筋活血/null 舒缓/null 舒肤佳/null 舒舒服服/null 舒适/null 舒适音/null 舒通/null 舒马赫/null 舔去/null 舔吮/null 舔犊之念/null 舔犊之爱/null 舔犊之私/null 舔犊情深/null 舔糠及米/null 舔阴/null 舔食/null 舛误/null 舜帝陵/null 舜日尧天/null 舜日尧年/null 舞伎/null 舞会/null 舞会舞/null 舞伴/null 舞刀/null 舞刀跃马/null 舞剑/null 舞剧/null 舞动/null 舞厅/null 舞厅舞/null 舞台/null 舞台美术/null 舞台艺术/null 舞台音乐/null 舞场/null 舞女/null 舞妓/null 舞姿/null 舞娘/null 舞客/null 舞师/null 舞弄/null 舞弊/null 舞态/null 舞态生风/null 舞手/null 舞技/null 舞抃/null 舞文巧法/null 舞文巧诋/null 舞文弄墨/null 舞文弄法/null 舞文枉法/null 舞景/null 舞曲/null 舞榭歌台/null 舞榭歌楼/null 舞步/null 舞水端里/null 舞池/null 舞燕歌莺/null 舞爪张牙/null 舞牙弄爪/null 舞狮/null 舞男/null 舞着/null 舞票/null 舞种/null 舞者/null 舞艺/null 舞衫歌扇/null 舞蹈/null 舞蹈家/null 舞蹈术/null 舞蹈病/null 舞蹈造型/null 舞迷/null 舞钢/null 舞阳/null 舞鞋/null 舞鸾歌凤/null 舞龙/null 舟中敌国/null 舟子/null 舟山/null 舟山群岛/null 舟曲/null 舟桥/null 舟楫/null 舟车/null 舟车劳顿/null 舢板/null 舢舨/null 航务/null 航厦/null 航向/null 航员/null 航图/null 航天/null 航天中心/null 航天员/null 航天器/null 航天局/null 航天工业部/null 航天部/null 航天飞机/null 航宇/null 航徽/null 航拍/null 航政/null 航期/null 航权/null 航材/null 航标/null 航标灯/null 航校/null 航模/null 航次/null 航段/null 航母/null 航测/null 航海/null 航海史/null 航海图/null 航海多项运动/null 航海家/null 航海年表/null 航海术/null 航海者/null 航海证/null 航渡/null 航照/null 航班/null 航班表/null 航程/null 航空/null 航空业/null 航空事业/null 航空信/null 航空公司/null 航空兵/null 航空器/null 航空学/null 航空局/null 航空手表/null 航空摄影/null 航空摄影测量/null 航空术/null 航空植保/null 航空模型运动/null 航空母舰/null 航空母舰战斗群/null 航空港/null 航空病/null 航空站/null 航空线/null 航空自卫队/null 航空航天局/null 航空运单/null 航空邮件/null 航空队/null 航站/null 航线/null 航舰/null 航船/null 航行/null 航行于/null 航行率/null 航行者/null 航路/null 航运/null 航运史/null 航迹/null 航速/null 航道/null 航邮/null 般乐/null 般桓/null 般游/null 般若/null 般若波罗密/null 般若波罗密多心经/null 般配/null 般雀比拉多/null 舰上/null 舰只/null 舰员/null 舰地/null 舰塔/null 舰宽/null 舰岛/null 舰旗/null 舰日/null 舰桥/null 舰炮/null 舰空导弹/null 舰群/null 舰船/null 舰艇/null 舰载/null 舰载机/null 舰长/null 舰队/null 舰首/null 舰龄/null 舱位/null 舱口/null 舱外活动/null 舱室/null 舱底/null 舱房/null 舱盖/null 舱身/null 舱里/null 舱门/null 舱面/null 舳舻/null 舳舻千里/null 舳舻相接/null 舳舻相继/null 舵主/null 舵工/null 舵手/null 舵手室/null 舵把/null 舵旁/null 舵杆/null 舵轮/null 舶位/null 舶来品/null 舷侧/null 舷材/null 舷梯/null 舷灯/null 舷窗/null 舷窗盖/null 船上/null 船上交货/null 船下/null 船东/null 船中/null 船主/null 船位/null 船体/null 船侧/null 船内/null 船到桥头自然直/null 船到桥门/null 船到桥门自会直/null 船到江心/null 船到江心补漏迟/null 船到码头/null 船务/null 船厂/null 船友/null 船只/null 船台/null 船吃/null 船名/null 船员/null 船员们/null 船坞/null 船埠/null 船壳/null 船外/null 船夫/null 船头/null 船客/null 船室/null 船家/null 船尾/null 船尾座/null 船山/null 船山区/null 船工/null 船帆/null 船帆座/null 船帮/null 船床/null 船底/null 船底座/null 船形/null 船户/null 船支/null 船政大臣/null 船政学堂/null 船政局/null 船方/null 船期/null 船材/null 船板/null 船桅/null 船桨/null 船梁/null 船梯/null 船模/null 船歌/null 船民/null 船浆/null 船状/null 船票/null 船篷/null 船籍/null 船籍港/null 船索/null 船级/null 船缆/null 船老大/null 船者/null 船腹/null 船舰/null 船舱/null 船舵/null 船舶/null 船舶人造卫星导航/null 船舶奥米加导航/null 船舶避碰雷达/null 船舷/null 船艇/null 船艇勤务/null 船营/null 船营区/null 船蛆/null 船货/null 船身/null 船载/null 船边/null 船运/null 船运业/null 船钱/null 船长/null 船闸/null 船队/null 船首/null 船首舱/null 船龄/null 舾装/null 艄公/null 艅艎/null 艇甲板/null 艇长/null 艚子/null 艨冲/null 艨艟/null 良久/null 良乡/null 良人/null 良医/null 良友/null 良吉/null 良善/null 良图/null 良多/null 良好/null 良宵/null 良宵好景/null 良宵美景/null 良家/null 良家女子/null 良导体/null 良将/null 良工心苦/null 良师/null 良师益友/null 良庆/null 良庆区/null 良心/null 良心未泯/null 良心犯/null 良性/null 良性循环/null 良性肿瘤/null 良方/null 良时美景/null 良机/null 良材/null 良桐/null 良民/null 良民证/null 良渚/null 良渚文化/null 良港/null 良物/null 良田/null 良癞虾蟆/null 良知/null 良知良能/null 良禽择木/null 良禽择木而栖/null 良种/null 良种繁育/null 良策/null 良缘/null 良苦/null 良苦用心/null 良药/null 良药苦口/null 良莠/null 良莠不一/null 良莠不分/null 良莠不齐/null 良莠淆杂/null 良言/null 良质美手/null 良辰/null 良辰吉日/null 良辰媚景/null 良辰美景/null 良金美玉/null 良马/null 艰危/null 艰困/null 艰巨/null 艰巨性/null 艰涩/null 艰深/null 艰深晦涩/null 艰苦/null 艰苦创业/null 艰苦卓绝/null 艰苦奋斗/null 艰苦朴素/null 艰贞/null 艰辛/null 艰险/null 艰难/null 艰难困苦/null 艰难曲折/null 艰难竭蹶/null 艰难险阻/null 色不迷人人自迷/null 色令智昏/null 色光/null 色卡/null 色厉内荏/null 色厉词严/null 色原体/null 色友/null 色味/null 色域/null 色基/null 色夷/null 色子/null 色字头上一把刀/null 色差/null 色布/null 色带/null 色度/null 色度学/null 色度计/null 色弱/null 色当/null 色彩/null 色彩斑斓/null 色彩缤纷/null 色彩论/null 色性/null 色情/null 色情业/null 色情作品/null 色情小说/null 色情片/null 色情狂/null 色拉/null 色拉寺/null 色拉油/null 色拉酱/null 色授魂与/null 色散/null 色斑/null 色料/null 色条/null 色板/null 色样/null 色欲/null 色氨酸/null 色泽/null 色浅/null 色浆/null 色淡/null 色灯/null 色片/null 色版/null 色狼/null 色球/null 色盅/null 色目/null 色目人/null 色盲/null 色相/null 色笔/null 色素/null 色素体/null 色胆/null 色胆如天/null 色胆迷天/null 色胺酸/null 色色俱全/null 色色迷迷/null 色艺两绝/null 色艺无双/null 色艺绝轮/null 色若死灰/null 色荒/null 色衰/null 色衰爱寝/null 色衰爱驰/null 色觉/null 色诱/null 色调/null 色谱/null 色谱仪/null 色谱分析/null 色边/null 色达/null 色迷/null 色酒/null 色釉/null 色钟/null 色键/null 色长/null 色飞眉舞/null 色香味/null 色香味俱全/null 色鬼/null 色魔/null 艳丽/null 艳丽夺目/null 艳冶/null 艳史/null 艳如桃李/null 艳情/null 艳曲淫词/null 艳福/null 艳红色/null 艳绝一时/null 艳美无敌/null 艳羡/null 艳舞/null 艳色/null 艳色绝世/null 艳色耀目/null 艳诗/null 艳遇/null 艳阳/null 艳阳天/null 艺人/null 艺伎/null 艺匠/null 艺名/null 艺员/null 艺品/null 艺圃/null 艺场/null 艺坛/null 艺妓/null 艺廊/null 艺徒/null 艺文志/null 艺术/null 艺术中心/null 艺术交流/null 艺术享受/null 艺术价值/null 艺术体操/null 艺术作品/null 艺术修养/null 艺术创作/null 艺术品/null 艺术团/null 艺术境界/null 艺术大师/null 艺术学院/null 艺术家/null 艺术形式/null 艺术形象/null 艺术性/null 艺术感染/null 艺术水平/null 艺术流派/null 艺术片/null 艺术界/null 艺术节/null 艺术表演/null 艺术造街/null 艺术风格/null 艺术馆/null 艺林/null 艺校/null 艺渎/null 艺界/null 艺美/null 艺能/null 艺苑/null 艺苑奇葩/null 艺高/null 艺龄/null 艾丁湖/null 艾伦/null 艾伯塔/null 艾兹病/null 艾冬花/null 艾卷/null 艾叶/null 艾叶油/null 艾叶炭/null 艾哈迈德/null 艾哈迈德阿巴德/null 艾哈迈达巴德/null 艾哈迈迪内贾德/null 艾塔/null 艾奇逊/null 艾奥瓦/null 艾奥瓦州/null 艾子/null 艾实/null 艾尔伯塔/null 艾尔米塔什/null 艾尔米塔奇/null 艾弥尔/null 艾德蒙顿/null 艾德蕾德/null 艾扑西龙/null 艾未未/null 艾条/null 艾条温和灸/null 艾条灸/null 艾条雀啄灸/null 艾格尼丝・史沫特莱/null 艾森豪威尔/null 艾森豪威尔主义/null 艾比湖/null 艾滋/null 艾滋病/null 艾滋病患者/null 艾滋病抗体/null 艾滋病毒/null 艾滋病病毒/null 艾灸/null 艾炭/null 艾炷/null 艾炷灸/null 艾片/null 艾玛纽埃尔/null 艾登堡/null 艾窝窝/null 艾纳香/null 艾绒/null 艾美奖/null 艾艾/null 艾草/null 艾莉丝/null 艾菲尔铁塔/null 艾萨克/null 艾萨克・牛顿/null 艾蒿/null 艾赛克斯/null 艾迪/null 艾迪卡拉/null 艾迪生/null 艾附暖宫丸/null 艾青/null 节上生枝/null 节下/null 节令/null 节会/null 节余/null 节俭/null 节俭人/null 节俭力行/null 节俭躬行/null 节候/null 节假日/null 节减/null 节制/null 节制生育/null 节制资本/null 节前/null 节后/null 节哀/null 节哀顺变/null 节团/null 节外生枝/null 节多/null 节头/null 节奏/null 节奏布鲁斯/null 节奏性/null 节奏感/null 节子/null 节庆/null 节度/null 节度使/null 节录/null 节律/null 节拍/null 节拍器/null 节操/null 节支/null 节支动物/null 节日/null 节时/null 节期/null 节本/null 节棍/null 节欲/null 节气/null 节气门/null 节水/null 节水型/null 节油/null 节流/null 节流踏板/null 节流阀/null 节点/null 节烈/null 节煤/null 节煤型/null 节片/null 节理/null 节用/null 节用厚生/null 节用爱人/null 节用裕民/null 节电/null 节略/null 节略本/null 节疤/null 节瘤/null 节目/null 节目主持人/null 节目单/null 节省/null 节省时间/null 节约/null 节约者/null 节肢/null 节肢介体病毒/null 节肢动物/null 节育/null 节能/null 节能型/null 节能灯/null 节能降耗/null 节节/null 节节下挫/null 节节溃退/null 节节胜利/null 节节败退/null 节虫/null 节衣缩食/null 节足动物/null 节距/null 节车/null 节述/null 节选/null 节间/null 节阀/null 节食/null 节食缩衣/null 节骨眼/null 节骨眼儿/null 芊眠/null 芊绵/null 芊芊/null 芊萰/null 芋圆/null 芋头/null 芋泥/null 芋艿/null 芋螺毒素/null 芍药/null 芍陂/null 芎林/null 芎林乡/null 芎藭/null 芒刺/null 芒刺在背/null 芒剌/null 芒寒色正/null 芒康/null 芒果/null 芒果汁/null 芒涸魂汤/null 芒然自失/null 芒硝/null 芒芒苦海/null 芗剧/null 芗城/null 芗城区/null 芙蓉/null 芙蓉出水/null 芙蓉区/null 芙蓉国/null 芙蓉花/null 芙蕖/null 芜俚/null 芜劣/null 芜杂/null 芜湖/null 芜秽/null 芜累/null 芜繁/null 芜菁/null 芜菁甘蓝/null 芜词/null 芜鄙/null 芜驳/null 芝兰/null 芝兰之室/null 芝兰玉树/null 芝加哥/null 芝加哥大学/null 芝加哥市/null 芝士/null 芝士蛋糕/null 芝宇/null 芝焚蕙叹/null 芝罘/null 芝罘区/null 芝艾俱尽/null 芝麻/null 芝麻包/null 芝麻官/null 芝麻油/null 芝麻酱/null 芝麻饼/null 芟夷/null 芟秋/null 芟繁就简/null 芟荑/null 芟除/null 芡实/null 芡粉/null 芤脉/null 芥兰/null 芥兰牛肉/null 芥子/null 芥子气/null 芥子气伪膜/null 芥子气恶病质/null 芥子气水疱/null 芥末/null 芥菜/null 芥菜型油菜/null 芥菜类蔬菜/null 芥菜籽/null 芥蒂/null 芥蓝/null 芥蓝菜/null 芦山/null 芦席/null 芦木/null 芦柑/null 芦柴/null 芦柴棒/null 芦根/null 芦沟桥/null 芦沟桥事变/null 芦洲/null 芦洲市/null 芦淞区/null 芦溪/null 芦竹/null 芦竹乡/null 芦笋/null 芦笙/null 芦笙舞/null 芦笛/null 芦管/null 芦花/null 芦花黄雀/null 芦苇/null 芦苇状/null 芦荟/null 芦荻/null 芨芨草/null 芫花/null 芫花素/null 芫荽/null 芫荽叶/null 芬兰/null 芬兰乌/null 芬兰人/null 芬兰战争/null 芬兰语/null 芬园/null 芬园乡/null 芬芬/null 芬芳/null 芬香/null 芭乐/null 芭乐票/null 芭提雅/null 芭比/null 芭芭拉/null 芭菲/null 芭蕉/null 芭蕉扇/null 芭蕉芋/null 芭蕾/null 芭蕾舞/null 芭达雅/null 芮城/null 芮氏/null 芮氏规模/null 芯件/null 芯子/null 芯片/null 芯片组/null 花上/null 花不棱登/null 花丛/null 花丝/null 花了/null 花仙子/null 花会/null 花似/null 花俏/null 花儿/null 花儿匠/null 花儿样子/null 花儿洞子/null 花儿针/null 花光/null 花农/null 花冠/null 花分/null 花到/null 花刺/null 花前月下/null 花剑/null 花匠/null 花卉/null 花卷/null 花厂/null 花厅/null 花去/null 花县/null 花台/null 花名/null 花名册/null 花呢/null 花哨/null 花商/null 花团/null 花团锦簇/null 花园/null 花园口/null 花园口决堤事件/null 花圃/null 花圈/null 花在/null 花地玛堂区/null 花坊/null 花坛/null 花坛乡/null 花垣/null 花墙/null 花大姐/null 花天百日红/null 花天酒地/null 花头/null 花好月圆/null 花媳妇儿/null 花子/null 花子儿/null 花季/null 花完/null 花容/null 花容月貌/null 花展/null 花山/null 花山区/null 花岗岩/null 花岗石/null 花巧/null 花市/null 花布/null 花帐/null 花床/null 花序/null 花店/null 花开/null 花开了/null 花开著/null 花式/null 花彩/null 花径/null 花得/null 花心/null 花心思/null 花户/null 花房/null 花托/null 花扦儿/null 花把势/null 花把式/null 花押/null 花招/null 花括号/null 花拳/null 花拳绣腿/null 花掉/null 花插/null 花搭着/null 花斑/null 花斑癣/null 花料/null 花旗/null 花旗参/null 花旗国/null 花旗银行/null 花无百日红/null 花旦/null 花时间/null 花明柳暗/null 花晨月夕/null 花朝/null 花朝月夕/null 花朝月夜/null 花朝节/null 花期/null 花木/null 花木兰/null 花木瓜/null 花朵/null 花束/null 花果/null 花果山/null 花枝/null 花枝招展/null 花枪/null 花架/null 花架子/null 花柱/null 花柳/null 花柳病/null 花栗鼠/null 花样/null 花样游泳/null 花样滑冰/null 花样翻新/null 花梗/null 花梨/null 花棍舞/null 花棒/null 花棚/null 花椒/null 花椰菜/null 花榈木/null 花残月缺/null 花池/null 花池子/null 花洒/null 花海/null 花消/null 花溪/null 花溪区/null 花火/null 花灯/null 花灯戏/null 花炮/null 花点子/null 花烛/null 花烛洞房/null 花状/null 花王/null 花环/null 花瓣/null 花瓶/null 花生/null 花生油/null 花生浆/null 花生秀/null 花生米/null 花生豆儿/null 花生酱/null 花生饼/null 花用/null 花甲/null 花痴/null 花白/null 花的/null 花盆/null 花盒/null 花盘/null 花眼/null 花着/null 花石/null 花石峡/null 花石峡镇/null 花种/null 花科/null 花童/null 花筒/null 花篮/null 花簇/null 花簇锦攒/null 花簇锦簇/null 花籽/null 花粉/null 花粉热/null 花粉症/null 花粉管/null 花粉篮/null 花粉过敏/null 花糕/null 花絮/null 花红/null 花红柳绿/null 花纱布/null 花纹/null 花结/null 花缎/null 花胜/null 花脸/null 花腔/null 花般/null 花色/null 花色品种/null 花色繁多/null 花艺/null 花花/null 花花世界/null 花花公子/null 花花太岁/null 花花搭搭/null 花花绿绿/null 花花肠子/null 花芽/null 花苗/null 花苞/null 花茎/null 花茶/null 花草/null 花草树木/null 花药/null 花莲/null 花菜/null 花萼/null 花蒂/null 花蕊/null 花蕾/null 花虫/null 花虫类/null 花蛋/null 花蛤/null 花蜜/null 花街/null 花街柳巷/null 花街柳陌/null 花衣/null 花衫/null 花被/null 花言/null 花言巧语/null 花豹/null 花貌蓬心/null 花费/null 花费者/null 花车/null 花轴/null 花轿/null 花边/null 花边人物/null 花边儿/null 花边新闻/null 花遮柳掩/null 花遮柳隐/null 花都/null 花都区/null 花酒/null 花里胡哨/null 花钱/null 花钱找罪受/null 花销/null 花键/null 花镜/null 花门柳户/null 花闭月羞/null 花障/null 花雕/null 花露/null 花露水/null 花青素/null 花面狸/null 花项/null 花须/null 花颜月貌/null 花饰/null 花香/null 花香鸟语/null 花骨朵/null 花魁/null 花魔酒病/null 花鲢/null 花鲫鱼/null 花鸟/null 花鸟画/null 花鸡/null 花黄/null 花鼓/null 花鼓戏/null 花鼓舞/null 芳兰竟体/null 芳华/null 芳名/null 芳容/null 芳心/null 芳札/null 芳泽/null 芳烃/null 芳筵/null 芳苑/null 芳苑乡/null 芳草/null 芳菲/null 芳踪/null 芳醇/null 芳香/null 芳香族/null 芳香族化合物/null 芳香油/null 芳香烃/null 芳香环/null 芳香疗法/null 芳香醋/null 芳龄/null 芷江/null 芷江县/null 芸芸/null 芸芸众生/null 芸苔子/null 芸苔属/null 芸薹/null 芸薹属/null 芸豆/null 芸阁/null 芸香/null 芹菜/null 芽体/null 芽型/null 芽孢/null 芽接/null 芽眼/null 芽胞/null 芽苗/null 芽茶/null 芽虫/null 芽豆/null 苁蓉/null 苄基/null 苄胺/null 苇塘/null 苇子/null 苇席/null 苇箔/null 苋科/null 苋菜/null 苌弘化碧/null 苌楚/null 苍冥/null 苍凉/null 苍劲/null 苍南/null 苍天/null 苍头/null 苍山/null 苍惶/null 苍术/null 苍松/null 苍松翠柏/null 苍桑/null 苍梧/null 苍民/null 苍海/null 苍溪/null 苍生/null 苍生涂炭/null 苍白/null 苍白无力/null 苍白色/null 苍穹/null 苍翠/null 苍翠繁茂/null 苍老/null 苍耳/null 苍苍/null 苍茫/null 苍莽/null 苍蝇/null 苍蝇座/null 苍蝇拍/null 苍蝇拍子/null 苍蝇见血/null 苍郁/null 苍铅/null 苍颜/null 苍鹭/null 苍鹰/null 苍黄/null 苍黄翻覆/null 苍龙/null 苎麻/null 苏东坡/null 苏中/null 苏丹/null 苏丹人/null 苏仙/null 苏仙区/null 苏伊士/null 苏伊士河/null 苏伊士运河/null 苏俄/null 苏克雷/null 苏共/null 苏共中央/null 苏军/null 苏剧/null 苏北/null 苏区/null 苏占区/null 苏台德地区/null 苏合香/null 苏哈托/null 苏堤/null 苏姆盖特/null 苏子/null 苏家屯/null 苏家屯区/null 苏富比/null 苏尔/null 苏州/null 苏州地区/null 苏州大学/null 苏州河/null 苏州码子/null 苏州话/null 苏必利尔湖/null 苏打/null 苏打水/null 苏打粉/null 苏打饼干/null 苏报案/null 苏拉威西/null 苏方/null 苏日/null 苏易简/null 苏木/null 苏杭/null 苏枋/null 苏枋木/null 苏格兰人/null 苏格兰场/null 苏格兰女王玛丽/null 苏格兰帽/null 苏格兰折耳猫/null 苏格拉底/null 苏步青/null 苏武/null 苏氨酸/null 苏洵/null 苏海韩潮/null 苏澳/null 苏澳镇/null 苏珊/null 苏珊・波伊尔/null 苏瓦/null 苏白/null 苏禄/null 苏秦/null 苏绣/null 苏维埃/null 苏维埃俄国/null 苏维埃社会主义共和国联盟/null 苏美/null 苏美尔/null 苏联之友社/null 苏联人/null 苏联共产党/null 苏联卢布/null 苏联卫国战争/null 苏联最高苏维埃/null 苏胺酸/null 苏莱曼/null 苏菜/null 苏菲/null 苏西洛/null 苏贞昌/null 苏轼/null 苏辙/null 苏迪曼杯/null 苏醒/null 苏醒剂/null 苏里南/null 苏里南河/null 苏金达/null 苏铁/null 苏门答腊/null 苏门答腊岛/null 苏门达腊/null 苏非主义/null 苏黎世/null 苏黎世联邦理工学院/null 苏黎士/null 苑里/null 苑里镇/null 苒弱/null 苒苒/null 苓雅/null 苓雅区/null 苔丝/null 苔原/null 苔癣/null 苔藓/null 苔藓植物/null 苔衣/null 苕子/null 苗人/null 苗儿/null 苗圃/null 苗头/null 苗子/null 苗家/null 苗床/null 苗期/null 苗木/null 苗条/null 苗栗/null 苗种/null 苗而不秀/null 苗芽/null 苗苗/null 苗裔/null 苗距/null 苘麻/null 苛刻/null 苛吏/null 苛察/null 苛征/null 苛待/null 苛性碱/null 苛性钠/null 苛性钾/null 苛捐/null 苛捐杂税/null 苛政/null 苛政猛于虎/null 苛敛/null 苛斥/null 苛杂/null 苛求/null 苛细/null 苛薄/null 苛评/null 苛评家/null 苛责/null 苜蓿/null 苞片/null 苞米/null 苞米棒子/null 苞粟/null 苞苴/null 苞苴公行/null 苞苴竿牍/null 苞苴贿赂/null 苞藏祸心/null 苞谷/null 苟且/null 苟且偷安/null 苟且偷生/null 苟全/null 苟合/null 苟合取容/null 苟同/null 苟存/null 苟安/null 苟安一隅/null 苟延残喘/null 苟延残息/null 苟活/null 苟留残喘/null 苟简/null 苣荬菜/null 苤蓝/null 若不/null 若且/null 若且唯若/null 若丧考妣/null 若为/null 若以/null 若何/null 若你/null 若使/null 若出一辙/null 若即若离/null 若合符节/null 若在/null 若夫/null 若将/null 若尔盖/null 若干/null 若干个/null 若开山脉/null 若想/null 若按/null 若敖鬼馁/null 若数家珍/null 若无/null 若无其事/null 若时/null 若明若暗/null 若昧平生/null 若是/null 若有/null 若有所丧/null 若有所亡/null 若有所失/null 若有所思/null 若有若无/null 若望/null 若望福音/null 若果/null 若然/null 若然不报时晨未到/null 若真/null 若羌/null 若翰/null 若虫/null 若要/null 若要人不知/null 若释重负/null 若问/null 若隐若显/null 若隐若现/null 若非/null 若饥若渴/null 若骛/null 苦丁茶/null 苦不可言/null 苦不唧/null 苦不唧儿/null 苦不堪言/null 苦不聊生/null 苦中作乐/null 苦主/null 苦乐/null 苦争恶战/null 苦事/null 苦于/null 苦人/null 苦修/null 苦僧/null 苦况/null 苦刑/null 苦力/null 苦劝/null 苦功/null 苦劳/null 苦卤/null 苦参/null 苦口/null 苦口婆心/null 苦口逆耳/null 苦味/null 苦味酸/null 苦命/null 苦哈哈/null 苦因/null 苦境/null 苦处/null 苦夏/null 苦大仇深/null 苦头/null 苦学/null 苦守/null 苦害/null 苦寒/null 苦尽/null 苦尽焦思/null 苦尽甘来/null 苦尽甜来/null 苦工/null 苦差/null 苦差事/null 苦干/null 苦役/null 苦待/null 苦心/null 苦心孤诣/null 苦心极力/null 苦心焦思/null 苦心竭力/null 苦心经营/null 苦怔恶战/null 苦思/null 苦思冥想/null 苦思恶想/null 苦思苦想/null 苦恋/null 苦恼/null 苦情/null 苦想/null 苦感/null 苦戏/null 苦战/null 苦挣/null 苦斗/null 苦杏仁苷/null 苦果/null 苦根/null 苦楚/null 苦楝/null 苦槠/null 苦水/null 苦汁/null 苦求/null 苦活/null 苦活儿/null 苦海/null 苦海无涯/null 苦海无边/null 苦海茫茫/null 苦涩/null 苦熬/null 苦爱/null 苦瓜/null 苦瓜脸/null 苦甘/null 苦痛/null 苦的/null 苦相/null 苦竹/null 苦笑/null 苦累/null 苦练/null 苦肉计/null 苦胆/null 苦脸/null 苦艾/null 苦艾酒/null 苦苓/null 苦苣/null 苦苦/null 苦苦哀求/null 苦荬菜/null 苦菊/null 苦菜花/null 苦薄荷/null 苦蘵/null 苦行/null 苦行僧/null 苦行赎罪/null 苦衷/null 苦话/null 苦读/null 苦谏/null 苦趣/null 苦辣/null 苦迭打/null 苦酒/null 苦闷/null 苦难/null 苦难深重/null 苦集灭道/null 苦雨/null 苦雨凄风/null 苫布/null 苫眼铺眉/null 苫背/null 苯丙氨酸/null 苯丙胺/null 苯中毒/null 苯乙烯/null 苯基/null 苯并噻吩/null 苯氧基/null 苯氨/null 苯环/null 苯甲基/null 苯甲酰氯/null 苯甲酸/null 苯甲酸钠/null 苯甲醛/null 苯胺/null 苯那辛/null 苯酚/null 苯酮尿症/null 英两/null 英亩/null 英亩数/null 英人/null 英仙座/null 英仙臂/null 英代尔/null 英伟达/null 英伦/null 英俊/null 英俚/null 英军/null 英制/null 英制支数/null 英勇/null 英勇善战/null 英勇斗争/null 英勇牺牲/null 英勇献身/null 英华/null 英史/null 英吉利/null 英吉利海峡/null 英吉沙/null 英名/null 英吨/null 英哩/null 英中/中英 英国人/null 英国女王/null 英国广播公司/null 英国广播电台/null 英国式/null 英国文化协会/null 英国电讯公司/null 英国皇家学会/null 英国石油/null 英国石油公司/null 英国管/null 英国资产阶级革命/null 英声茂实/null 英姿/null 英姿迈往/null 英姿飒爽/null 英子/null 英宗/null 英寸/null 英寻/null 英尺/null 英尺高/null 英属/null 英属哥伦比亚/null 英属维尔京群岛/null 英山/null 英布战争/null 英年/null 英年早逝/null 英式/null 英式橄榄球/null 英式足球/null 英德/null 英才/null 英担/null 英方/null 英明/null 英明果断/null 英杰/null 英格兰人/null 英格兰银行/null 英模/null 英模事迹/null 英模代表/null 英武/null 英气/null 英汉/null 英汉对译/null 英汉通/null 英法/null 英灵/null 英烈/null 英特/null 英特尔/null 英特网/null 英特耐雄纳尔/null 英特迈往/null 英王/null 英石/null 英美/null 英联合王国/null 英联邦/null 英译/null 英译本/null 英语分词/null 英语化/null 英语学/null 英语教学/null 英语热/null 英语角/null 英豪/null 英货币/null 英超/null 英超赛/null 英里/null 英镑/null 英雄/null 英雄主义/null 英雄事迹/null 英雄人物/null 英雄好汉/null 英雄式/null 英雄形象/null 英雄所见略同/null 英雄无用武之地/null 英雄有用武之地/null 英雄模范/null 英雄气短/null 英雄短气/null 英雄辈出/null 英雄难过美人关/null 英魂/null 苴麻/null 苷酸/null 苹果/null 苹果公司/null 苹果手机/null 苹果核/null 苹果汁/null 苹果派/null 苹果渣/null 苹果电脑/null 苹果类/null 苹果绿/null 苹果蠹蛾/null 苹果酒/null 苹果酱/null 苹果饼/null 苹果馅饼/null 茀星/null 茁壮/null 茁壮成长/null 茁实/null 茁长/null 茁长素/null 茂亲/null 茂南/null 茂南区/null 茂名/null 茂实英声/null 茂密/null 茂才/null 茂林/null 茂林乡/null 茂汶县/null 茂港/null 茂港区/null 茂物/null 茂盛/null 茂竹/null 范仲淹/null 范例/null 范公偁/null 范围/null 范围内/null 范围广/null 范围是/null 范式/null 范张鸡黍/null 范德格拉夫/null 范德格拉夫起电机/null 范德瓦耳斯/null 范德瓦耳斯力/null 范志毅/null 范性/null 范性材料/null 范文/null 范斯坦/null 范晔/null 范本/null 范特西/null 范玮琪/null 范畴/null 范畴索引/null 范畴论/null 范缜/null 范蠡/null 茄二十八星瓢虫/null 茄克/null 茄克衫/null 茄子/null 茄子河区/null 茄果类蔬菜/null 茄科/null 茄红素/null 茄萣/null 茄萣乡/null 茅以升/null 茅厕/null 茅台/null 茅台酒/null 茅坑/null 茅塞/null 茅塞顿开/null 茅室土阶/null 茅屋/null 茅屋顶/null 茅庐/null 茅房/null 茅棚/null 茅盾/null 茅盾文学奖/null 茅箭/null 茅箭区/null 茅膏菜/null 茅舍/null 茅芦三顾/null 茅茨土阶/null 茅草/null 茉莉/null 茉莉花/null 茉莉花茶/null 茉莉菊酯/null 茌平/null 茎干/null 茎柄/null 茏葱/null 茑萝/null 茕茕/null 茕茕孑立/null 茕茕孤立/null 茗茶/null 茗葱/null 茜素/null 茜紫/null 茜草/null 茧丝/null 茧丝牛毛/null 茧儿/null 茧子/null 茧绸/null 茧衣/null 茨万吉拉伊/null 茨冈人/null 茨城/null 茨城县/null 茨欣瓦利/null 茨菰/null 茫崖/null 茫崖区/null 茫崖行政区/null 茫崖行政委员会/null 茫无头绪/null 茫若星河/null 茫昧/null 茫然/null 茫然不解/null 茫然失措/null 茫然自失/null 茫然若失/null 茫然若迷/null 茫然费解/null 茫茫/null 茫茫然/null 茫茫苦海/null 茬口/null 茬地/null 茬子/null 茭白/null 茯苓/null 茱莉亚/null 茱莉娅/null 茱莉雅/null 茱莉雅・吉拉德/null 茱萸/null 茳芏/null 茴芹/null 茴香/null 茴香籽/null 茵芋/null 茵陈蒿/null 茶亭/null 茶会/null 茶余酒后/null 茶余饭后/null 茶余饭饱/null 茶具/null 茶农/null 茶几/null 茶包/null 茶匙/null 茶博士/null 茶卤儿/null 茶叙会/null 茶叶/null 茶叶末儿/null 茶叶罐/null 茶叶花/null 茶叶蛋/null 茶味/null 茶商/null 茶园/null 茶场/null 茶坊/null 茶壶/null 茶壶嘴/null 茶室/null 茶宴/null 茶山/null 茶巾/null 茶市/null 茶庄/null 茶座/null 茶房/null 茶托/null 茶晶/null 茶杯/null 茶枯/null 茶树/null 茶楼/null 茶毛虫/null 茶水/null 茶汤/null 茶汤壶/null 茶油/null 茶炉/null 茶炊/null 茶点/null 茶点时间/null 茶盘/null 茶砖/null 茶碗/null 茶碟/null 茶碱/null 茶礼/null 茶社/null 茶税/null 茶筒/null 茶精/null 茶经/null 茶缸/null 茶缸子/null 茶罐/null 茶色/null 茶艺/null 茶花/null 茶花女/null 茶藨子/null 茶袋/null 茶褐色/null 茶话/null 茶话会/null 茶质/null 茶资/null 茶道/null 茶钱/null 茶锈/null 茶镜/null 茶陵/null 茶隼/null 茶青/null 茶食/null 茶饭/null 茶饭不思/null 茶饭无心/null 茶饼/null 茶馆/null 茶馆儿/null 茶香/null 茶马互市/null 茶马古道/null 茸毛/null 茸茸/null 茹古涵今/null 茹志鹃/null 茹柔吐刚/null 茹毛/null 茹毛饮血/null 茹泣吐悲/null 茹痛/null 茹素/null 茹苦含辛/null 茹荤/null 茹荤饮酒/null 茹藘/null 茹鱼/null 茺蔚/null 茼蒿/null 荀子/null 荀彧/null 荃湾/null 荆天棘地/null 荆山/null 荆州/null 荆州区/null 荆条/null 荆棘/null 荆棘丛生/null 荆棘塞途/null 荆棘多/null 荆棘载途/null 荆棘铜驼/null 荆楚网/null 荆楚网视/null 荆榛满目/null 荆江/null 荆芥/null 荆轲/null 荆钗布袄/null 荆钗布裙/null 荆钗裙布/null 荆门/null 荇菜/null 草丛/null 草乌/null 草书/null 草书体/null 草体/null 草偃风从/null 草偃风行/null 草写/null 草函/null 草创/null 草制/null 草刺儿/null 草动/null 草包/null 草原/null 草原巨蜥/null 草台班子/null 草叶/null 草图/null 草地/null 草地般/null 草场/null 草坪/null 草坪扫除机/null 草垛/null 草垫/null 草垫子/null 草堂/null 草堆/null 草大青/null 草头/null 草头天子/null 草字/null 草字头儿/null 草寇/null 草屋/null 草履虫/null 草屯/null 草屯镇/null 草山/null 草帘/null 草席/null 草帽/null 草帽缏/null 草庐/null 草庐三顾/null 草底/null 草底儿/null 草房/null 草拟/null 草料/null 草昧/null 草晴蛉/null 草木/null 草木一春/null 草木灰/null 草木犀/null 草木皆兵/null 草木鸟兽/null 草本/null 草本植物/null 草果/null 草标/null 草标儿/null 草根/null 草根网民/null 草案/null 草棉/null 草棚/null 草泥马/null 草泽/null 草洼/null 草测/null 草海/null 草温表/null 草满囹圄/null 草灰/null 草炭/null 草煤/null 草爬子/null 草状/null 草狐/null 草率/null 草率从事/null 草率将事/null 草率收兵/null 草率行事/null 草珊瑚/null 草用/null 草甸/null 草甸子/null 草皮/null 草石蚕/null 草码/null 草秆/null 草种/null 草科/null 草稿/null 草窝/null 草笠/null 草签/null 草类/null 草籽/null 草约/null 草纸/null 草绳/null 草绿/null 草绿色/null 草耙/null 草色/null 草芥/null 草苁蓉/null 草茉莉/null 草草/null 草草了事/null 草草收兵/null 草草收场/null 草荐/null 草荒/null 草药/null 草莓/null 草莓族/null 草莽/null 草菅/null 草菅人命/null 草菇/null 草虫/null 草蜻蛉/null 草行露宿/null 草衣木食/null 草裙舞/null 草褥/null 草豆/null 草豆蔻/null 草质茎/null 草酸/null 草酸盐/null 草野/null 草铺/null 草长莺飞/null 草间求活/null 草靡风行/null 草鞋/null 草食/null 草食动物/null 草饼/null 草驴/null 草鱼/null 草鸡/null 草鸮/null 草黄/null 荏弱/null 荏苒/null 荐举/null 荐任/null 荐头/null 荐头店/null 荐引/null 荐椎/null 荐者/null 荐言/null 荐贤/null 荐骨/null 荒丘/null 荒乱/null 荒信/null 荒僻/null 荒凉/null 荒原/null 荒发/null 荒唐/null 荒唐不经/null 荒唐事/null 荒唐无稽/null 荒唐言行/null 荒土/null 荒地/null 荒坡/null 荒子/null 荒寒/null 荒山/null 荒山野岭/null 荒岛/null 荒年/null 荒废/null 荒弃/null 荒怪不经/null 荒数/null 荒无/null 荒无人烟/null 荒旱/null 荒时/null 荒时暴月/null 荒村/null 荒歉/null 荒沙/null 荒淫/null 荒淫无耻/null 荒滩/null 荒漠/null 荒漠化/null 荒灾/null 荒烟蔓草/null 荒疏/null 荒瘠/null 荒芜/null 荒草/null 荒诞/null 荒诞不经/null 荒诞主义/null 荒诞无稽/null 荒诞派/null 荒谬/null 荒谬无稽/null 荒谬绝伦/null 荒遐/null 荒郊/null 荒郊旷野/null 荒野/null 荔城/null 荔城区/null 荔枝/null 荔枝核/null 荔波/null 荔浦/null 荔湾/null 荔湾区/null 荚果/null 荚膜/null 荚膜组织胞浆菌/null 荚蓬/null 荛花/null 荜拨/null 荜门圭窦/null 荜露蓝缕/null 荜露蓝蒌/null 荞麦/null 荞麦皮/null 荟萃/null 荠菜/null 荡产/null 荡产倾家/null 荡妇/null 荡寇/null 荡尽/null 荡平/null 荡性/null 荡来荡去/null 荡析离居/null 荡检逾闲/null 荡气/null 荡气回肠/null 荡涤/null 荡漾/null 荡然/null 荡然无存/null 荡秋千/null 荡肥/null 荡舟/null 荡船/null 荡荡/null 荡起/null 荣任/null 荣光/null 荣光颂/null 荣典/null 荣军/null 荣华/null 荣华富贵/null 荣威/null 荣宗耀祖/null 荣市/null 荣幸/null 荣归/null 荣归主/null 荣归故里/null 荣成/null 荣成湾/null 荣昌/null 荣景/null 荣格/null 荣毅仁/null 荣河县/null 荣登/null 荣登榜首/null 荣禄/null 荣禄大夫/null 荣立/null 荣美/null 荣耀/null 荣膺/null 荣获/null 荣誉/null 荣誉军人/null 荣誉博士/null 荣誉博士学位/null 荣誉奖/null 荣誉学位/null 荣誉感/null 荣誉教授/null 荣誉权/null 荣誉称号/null 荣誉章/null 荣辱/null 荣辱与共/null 荣辱观/null 荤油/null 荤笑话/null 荤粥/null 荤素/null 荤腥/null 荤菜/null 荤辛/null 荥经/null 荥阳/null 荥阳县/null 荦荦/null 荧光/null 荧光增白剂/null 荧光学/null 荧光屏/null 荧光性/null 荧光棒/null 荧光灯/null 荧光笔/null 荧光粉/null 荧屏/null 荧幕/null 荧惑/null 荧惑星/null 荧火/null 荧火虫/null 荧石/null 荧荧/null 荨麻/null 荨麻疹/null 荩臣/null 荩草/null 荫凉/null 荫子封妻/null 荫庇/null 荫棚/null 荫翳/null 荫蔽/null 荫道/null 荭草/null 药丸/null 药具/null 药典/null 药农/null 药到病除/null 药剂/null 药剂士/null 药剂师/null 药剂拌种/null 药力/null 药包/null 药单/null 药厂/null 药叉/null 药名/null 药味/null 药品/null 药商/null 药器/null 药囊/null 药学/null 药害/null 药局/null 药师/null 药师佛/null 药师如来/null 药师经/null 药库/null 药店/null 药店飞龙/null 药引子/null 药性/null 药性气/null 药房/null 药捻子/null 药效/null 药料/null 药方/null 药方儿/null 药材/null 药械/null 药检/null 药棉/null 药水/null 药水儿/null 药水瓶/null 药浴/null 药液/null 药渣/null 药片/null 药物/null 药物学/null 药物学家/null 药物性皮炎/null 药理/null 药理学/null 药瓶/null 药用/null 药用价值/null 药疗/null 药疗法/null 药疹/null 药皂/null 药监局/null 药盒/null 药石/null 药石之言/null 药种/null 药笼中物/null 药筒/null 药签/null 药箱/null 药粉/null 药罐/null 药罐子/null 药胰子/null 药膏/null 药膳/null 药苗/null 药茶/null 药草/null 药行/null 药衡/null 药补/null 药补不如食补/null 药费/null 药酒/null 药量/null 药铺/null 药锭/null 药面/null 药饵/null 荷兰/null 荷兰人/null 荷兰式拍卖/null 荷兰水/null 荷兰猪/null 荷兰王国/null 荷兰皇家航空/null 荷兰盾/null 荷兰石竹/null 荷兰芹/null 荷兰语/null 荷兰豆/null 荷包/null 荷包蛋/null 荷叶/null 荷塘/null 荷塘区/null 荷尔蒙/null 荷属安的列斯/null 荷巴特/null 荷枪实弹/null 荷泽/null 荷泽寺/null 荷脑/null 荷花/null 荷荷/null 荷莉・贝瑞/null 荷载/null 荷重/null 荷马/null 荸荠/null 荼毒/null 荼毒生灵/null 莅临/null 莅临指导/null 莅事者/null 莅任/null 莅会/null 莅止/null 莆仙戏/null 莆田/null 莆田地区/null 莉莉/null 莎士比亚/null 莎拉/null 莎拉・佩林/null 莎拉・布莱曼/null 莎拉波娃/null 莎翁/null 莎草/null 莎莎舞/null 莎车/null 莒光/null 莒光乡/null 莒南/null 莘莘/null 莜面/null 莜麦/null 莜麦菜/null 莞尔/null 莞熊/null 莠草/null 莨绸/null 莨菪/null 莪术/null 莪蒿/null 莫不/null 莫不如此/null 莫不是/null 莫不然/null 莫不逾侈/null 莫不闻/null 莫为/null 莫之能御/null 莫予毒也/null 莫伊谢耶夫/null 莫伯日/null 莫克姆湾/null 莫入/null 莫利森/null 莫利达瓦达斡尔族自治旗/null 莫卧儿王朝/null 莫及/null 莫可/null 莫可名状/null 莫可奈何/null 莫可指数/null 莫吉托/null 莫名/null 莫名其妙/null 莫哈韦沙漠/null 莫塔马湾/null 莫大/null 莫如/null 莫尔兹比港/null 莫尔斯/null 莫尔斯电码/null 莫尼卡・莱温斯基/null 莫展一筹/null 莫希/null 莫忘/null 莫怪/null 莫扎特/null 莫扎里拉/null 莫拉莱斯/null 莫措手足/null 莫撒谎/null 莫敌/null 莫敢谁何/null 莫斯特/null 莫斯科/null 莫明其妙/null 莫札特/null 莫杰斯特/null 莫桑比克/null 莫此为甚/null 莫氏硬度表/null 莫测/null 莫测高深/null 莫理/null 莫知与京/null 莫知所措/null 莫知所谓/null 莫管/null 莫管他家瓦上霜/null 莫罕达斯/null 莫罗尼/null 莫能/null 莫若/null 莫衷一是/null 莫言/null 莫让/null 莫讲/null 莫说/null 莫辨楮叶/null 莫过/null 莫过于/null 莫过如此/null 莫逆/null 莫逆之交/null 莫逆之友/null 莫道/null 莫邪/null 莫霍洛维奇/null 莫霍洛维奇不连续面/null 莫霍面/null 莫非/null 莫非是/null 莫须/null 莫须有/null 莫高/null 莫高窟/null 莰酮/null 莱伊尔/null 莱佛士/null 莱切/null 莱卡/null 莱因河/null 莱塞/null 莱姆/null 莱姆病/null 莱姆酒/null 莱山/null 莱山区/null 莱州/null 莱布尼兹/null 莱德杯/null 莱斯大学/null 莱斯沃斯岛/null 莱斯特/null 莱斯特郡/null 莱旺厄尔/null 莱昂纳多/null 莱比锡/null 莱温斯基/null 莱特/null 莱索托/null 莱芜/null 莱茵河/null 莱菔/null 莱西/null 莱里达/null 莱阳/null 莱顿/null 莱顿大学/null 莱齐耶三世/null 莲台/null 莲子/null 莲心/null 莲池/null 莲湖/null 莲湖区/null 莲花/null 莲花步步生/null 莲花落/null 莲菜/null 莲蓉/null 莲蓉包/null 莲蓬/null 莲蓬头/null 莲蓬子儿/null 莲藕/null 莲都/null 莲都区/null 莲雾/null 莳箩/null 莳萝/null 莳萝籽/null 莴笋/null 莴苣/null 获准/null 获刑/null 获利/null 获利者/null 获利颇巨/null 获到/null 获取/null 获嘉/null 获奖/null 获奖人/null 获奖作品/null 获奖者/null 获好评/null 获得/null 获得性/null 获得性免疫/null 获得者/null 获得胜利/null 获悉/null 获报/null 获救/null 获暴利者/null 获益/null 获益匪浅/null 获益者/null 获知/null 获罪/null 获胜/null 获胜者/null 获至/null 获致/null 获许/null 获评/null 获购/null 获赠/null 获赦/null 获选/null 获释/null 获颁/null 获鹿/null 获鹿镇/null 莹莹/null 莺俦燕侣/null 莺啼燕语/null 莺歌/null 莺歌燕舞/null 莺歌镇/null 莺类/null 莺鸟/null 莼羹鲈脍/null 莼菜/null 莼鲈之思/null 莽原/null 莽撞/null 莽汉/null 莽苍/null 莽草/null 莽莽/null 莿桐/null 莿桐乡/null 菁华/null 菁英/null 菁菁/null 菅直人/null 菊石/null 菊科/null 菊老荷枯/null 菊芋/null 菊花/null 菊花茶/null 菌丝/null 菌丝体/null 菌伞/null 菌体/null 菌力/null 菌子/null 菌托/null 菌柄/null 菌株/null 菌核/null 菌液/null 菌界/null 菌盖/null 菌种/null 菌类/null 菌类植物/null 菌肥/null 菌胶团/null 菌苗/null 菌落/null 菌陈蒿/null 菏兰/null 菏泽/null 菖蒲/null 菘菜/null 菘蓝/null 菜丝/null 菜价/null 菜农/null 菜刀/null 菜单/null 菜单条/null 菜单项/null 菜园/null 菜圃/null 菜地/null 菜场/null 菜墩子/null 菜子/null 菜子油/null 菜市/null 菜市场/null 菜帮/null 菜式/null 菜心/null 菜摊/null 菜板/null 菜枯/null 菜根/null 菜梗/null 菜汤/null 菜油/null 菜牛/null 菜瓜/null 菜田/null 菜畦/null 菜盆/null 菜盒/null 菜码儿/null 菜票/null 菜种/null 菜窖/null 菜筐/null 菜篮/null 菜篮子/null 菜类/null 菜籽/null 菜羊/null 菜肴/null 菜色/null 菜花/null 菜芽/null 菜苔/null 菜茹/null 菜蓝/null 菜蔬/null 菜薹/null 菜蚜/null 菜蛙/null 菜谱/null 菜豆/null 菜贩/null 菜锅/null 菜青/null 菜馆/null 菜鸟/null 菝葜/null 菟丝子/null 菠菜/null 菠萝/null 菠萝蜜/null 菡萏/null 菥蓂/null 菩提/null 菩提树/null 菩提达摩/null 菩提道场/null 菩萨/null 菩萨低眉/null 菩萨心肠/null 菰米/null 菱形/null 菱形窗/null 菱花镜/null 菱角/null 菱铁矿/null 菱锌矿/null 菱镁矿/null 菱镜/null 菱面/null 菱面体/null 菲亚特/null 菲仪/null 菲佣/null 菲利浦/null 菲力/null 菲力克斯/null 菲力牛排/null 菲姬/null 菲尔兹/null 菲尔兹奖/null 菲尔普斯/null 菲尔特/null 菲尼克斯/null 菲律宾/null 菲律宾人/null 菲律宾国/null 菲律宾大学/null 菲律宾语/null 菲德尔/null 菲才寡学/null 菲舍尔/null 菲茨杰拉德/null 菲菲/null 菲薄/null 菲衣恶食/null 菲酌/null 菲食卑宫/null 菲食薄衣/null 菸斗/null 菸硷/null 菸碱/null 菸碱酸/null 菸蒂/null 菹醢/null 菽水之欢/null 菽水承欢/null 萃取/null 萃萃蝇/null 萋斐贝锦/null 萋萋/null 萋风冷雨/null 萋风苦雨/null 萌动/null 萌发/null 萌渚岭/null 萌生/null 萌芽/null 萌芽林/null 萍乡/null 萍卡菲尔特/null 萍水/null 萍水相逢/null 萍水相遇/null 萍水相遭/null 萍蓬草/null 萍踪/null 萍踪梗迹/null 萍踪浪影/null 萍踪浪迹/null 萍飘蓬转/null 萎叶/null 萎缩/null 萎蔫/null 萎谢/null 萎陷疗法/null 萎靡/null 萎靡不振/null 萎黄病/null 萘丸/null 萘醌/null 萝北/null 萝卜/null 萝卜糕/null 萝卜花/null 萝岗/null 萝岗区/null 萝艻/null 萝芙木/null 萝莉/null 萝莉控/null 萤光/null 萤光幕/null 萤光素/null 萤光绿/null 萤光镜/null 萤幕/null 萤幕保护装置/null 萤火/null 萤火虫/null 萤焰/null 萤石/null 萤窗雪案/null 营业/null 营业人员/null 营业厅/null 营业员/null 营业室/null 营业所/null 营业执照/null 营业收入/null 营业时候/null 营业时间/null 营业税/null 营业部/null 营业额/null 营养/null 营养不良/null 营养卫生/null 营养品/null 营养学/null 营养液/null 营养物/null 营养物质/null 营养素/null 营养钵/null 营养面积/null 营利/null 营办/null 营区/null 营区规划/null 营卫/null 营口/null 营号/null 营地/null 营垒/null 营寨/null 营屯/null 营山/null 营巢/null 营工/null 营帐/null 营建/null 营房/null 营房保障/null 营收/null 营救/null 营火/null 营火会/null 营生/null 营田/null 营盘/null 营盘镇/null 营私/null 营私作弊/null 营私舞弊/null 营管/null 营谋/null 营谋遂顺/null 营运/null 营运资金/null 营造/null 营造司/null 营造商/null 营造尺/null 营部/null 营销/null 营长/null 营队/null 萦回/null 萦怀/null 萦纡/null 萦绕/null 萧一山/null 萧万长/null 萧乾/null 萧伯纳/null 萧墙/null 萧墙祸起/null 萧子显/null 萧山/null 萧山区/null 萧条/null 萧梁/null 萧森/null 萧然/null 萧瑟/null 萧疏/null 萧索/null 萧红/null 萧萧/null 萧行范篆/null 萧规曹随/null 萧邦/null 萧飒/null 萨丁尼亚岛/null 萨克/null 萨克拉门托/null 萨克斯/null 萨克斯管/null 萨克斯风/null 萨克森/null 萨克森州/null 萨克洛夫/null 萨克洛夫奖/null 萨克管/null 萨克逊/null 萨兰斯克/null 萨其马/null 萨博/null 萨卡什维利/null 萨哈林岛/null 萨哈洛夫/null 萨哈罗夫/null 萨哈罗夫人权奖/null 萨哈罗夫奖/null 萨哈诺夫/null 萨哈诺夫人权奖/null 萨嘎/null 萨噶达娃节/null 萨尔/null 萨尔图/null 萨尔图区/null 萨尔州/null 萨尔布吕肯/null 萨尔普斯堡/null 萨尔浒之战/null 萨尔温江/null 萨尔瓦多/null 萨尔瓦多共和国/null 萨尔科奇/null 萨尔科齐/null 萨尔茨堡/null 萨巴德罗/null 萨德尔/null 萨德尔市/null 萨拉丁/null 萨拉戈萨/null 萨拉曼卡/null 萨拉森帝国/null 萨拉热窝/null 萨拉热窝事件/null 萨摩/null 萨摩亚/null 萨摩亚群岛/null 萨摩耶/null 萨摩耶犬/null 萨摩麟/null 萨斯/null 萨斯卡通/null 萨斯喀彻温/null 萨斯病/null 萨格勒布/null 萨桑王朝/null 萨满教/null 萨特/null 萨珊王朝/null 萨瓦河/null 萨科齐/null 萨米人/null 萨莉/null 萨菲/null 萨蒂/null 萨达姆/null 萨达姆・侯赛因/null 萨达特/null 萨迦/null 萨迪克/null 萨里/null 萨里郡/null 萨非王朝/null 萨马兰奇/null 萨默塞特郡/null 萱堂/null 萱花椿树/null 萱草/null 萼片/null 萼状/null 落下/null 落乡/null 落于/null 落于下风/null 落井/null 落井下石/null 落价/null 落伍/null 落伍者/null 落体/null 落俗/null 落儿/null 落入/null 落入法网/null 落到/null 落到实处/null 落发/null 落叶/null 落叶乔木/null 落叶剂/null 落叶层/null 落叶归根/null 落叶性/null 落叶松/null 落叶树/null 落叶植物/null 落叶知秋/null 落后/null 落后地区/null 落后状况/null 落后面貌/null 落回/null 落在/null 落地/null 落地灯/null 落地窗/null 落地签/null 落坐/null 落埋怨/null 落基山/null 落墨/null 落子/null 落实/null 落实到人/null 落实到户/null 落实政策/null 落寞/null 落尘/null 落差/null 落幕/null 落度/null 落座/null 落弹/null 落得/null 落忍/null 落成/null 落户/null 落托/null 落扬/null 落拓/null 落拓不羁/null 落日/null 落晖/null 落月/null 落月屋梁/null 落枕/null 落果/null 落架/null 落标/null 落栈/null 落榜/null 落槽/null 落款/null 落水/null 落水狗/null 落水管/null 落汤鸡/null 落泊/null 落泪/null 落漠/null 落潮/null 落炕/null 落点/null 落照/null 落生/null 落石/null 落空/null 落笔/null 落笔审慎/null 落第/null 落纱/null 落网/null 落胆/null 落脚/null 落脚点/null 落腮胡/null 落腮胡子/null 落膘/null 落色/null 落花/null 落花有意流水无情/null 落花流水/null 落花生/null 落草/null 落荒/null 落荒而逃/null 落莫/null 落落/null 落落大方/null 落落寡交/null 落落寡合/null 落落寡欢/null 落落难合/null 落葬/null 落藉/null 落谷/null 落败/null 落跑/null 落选/null 落锤/null 落难/null 落雁沉鱼/null 落雨/null 落雷/null 落霞/null 落音/null 落马/null 落马洲/null 落魄/null 落魄不羁/null 葑菲之采/null 著书/null 著书立说/null 著作/null 著作权/null 著作等身/null 著作者/null 著力/null 著名/null 著名人士/null 著墨/null 著实/null 著录/null 著忙/null 著急/null 著手/null 著手成春/null 著文/null 著有/null 著有成效/null 著棋/null 著气/null 著火/null 著眉/null 著称/null 著称于世/null 著笔/null 著粪佛头/null 著者/null 著者索引/null 著色/null 著色液/null 著落/null 著衣/null 著谜/null 著走/null 著述/null 著述等身/null 著重/null 著陆/null 著魔/null 葛仙米/null 葛优/null 葛兰素史克/null 葛巾/null 葛布/null 葛根/null 葛法翁/null 葛洲坝/null 葛瑞格尔/null 葛粉/null 葛缕子/null 葛荣起义/null 葛莱美奖/null 葛藤/null 葡糖/null 葡糖胺/null 葡萄/null 葡萄乾/null 葡萄园/null 葡萄干/null 葡萄干儿/null 葡萄弹/null 葡萄柚/null 葡萄树/null 葡萄核/null 葡萄汁/null 葡萄灰/null 葡萄牙人/null 葡萄牙文/null 葡萄牙语/null 葡萄球菌/null 葡萄球菌肠毒素/null 葡萄糖/null 葡萄糖胺/null 葡萄紫/null 葡萄胎/null 葡萄藤/null 葡萄酒/null 董事/null 董事会/null 董事长/null 董仲舒/null 董卓/null 董奉/null 董建华/null 董必武/null 董阳孜/null 董鸡/null 葫芦/null 葫芦丝/null 葫芦岛/null 葫芦巴/null 葫芦科/null 葫芦藓/null 葫蔓藤/null 葬人/null 葬仪/null 葬仪车/null 葬地/null 葬埋/null 葬式/null 葬歌/null 葬玉埋香/null 葬礼/null 葬者/null 葬费/null 葬身/null 葬身鱼腹/null 葬送/null 葭莩/null 葭莩之亲/null 葱头/null 葱属/null 葱岭/null 葱白/null 葱白儿/null 葱绿/null 葱翠/null 葱花/null 葱茏/null 葱葱/null 葱蒜/null 葱蒜类蔬菜/null 葱郁/null 葱颜顺旨/null 葱黄/null 葳蕤/null 葵扇/null 葵涌/null 葵科/null 葵花/null 葵花子/null 葵青/null 葶苈/null 蒂固/null 蒂森克虏伯/null 蒋介石/null 蒋士铨/null 蒋家/null 蒋桂战争/null 蒋纬国/null 蒋经国/null 蒋雯丽/null 蒌叶/null 蒌蒿/null 蒐寻/null 蒐证/null 蒐集/null 蒙上/null 蒙事/null 蒙人/null 蒙代尔/null 蒙住/null 蒙冤/null 蒙受/null 蒙古人/null 蒙古人民共和国/null 蒙古人种/null 蒙古包/null 蒙古国/null 蒙古地区/null 蒙古时代/null 蒙古语/null 蒙召/null 蒙哄/null 蒙哥马利/null 蒙嘉慧/null 蒙在/null 蒙在鼓里/null 蒙地卡罗/null 蒙城/null 蒙塾/null 蒙大拿/null 蒙大拿州/null 蒙大纳州/null 蒙太奇/null 蒙头/null 蒙头转向/null 蒙娜丽莎/null 蒙学/null 蒙尘/null 蒙山/null 蒙山茶/null 蒙巴萨/null 蒙巴顿/null 蒙师/null 蒙帕纳斯/null 蒙席/null 蒙彼利埃/null 蒙得维的亚/null 蒙恩/null 蒙恬/null 蒙托罗拉/null 蒙损/null 蒙文/null 蒙族/null 蒙日/null 蒙昧/null 蒙昧主义/null 蒙松雨/null 蒙求/null 蒙汗药/null 蒙混/null 蒙混过关/null 蒙牛/null 蒙特利尔/null 蒙特卡洛/null 蒙特卡洛法/null 蒙特卡罗方法/null 蒙特塞拉特/null 蒙特雷/null 蒙皮/null 蒙眬/null 蒙眼/null 蒙着/null 蒙罗维亚/null 蒙羞/null 蒙胧/null 蒙自/null 蒙茏/null 蒙茸/null 蒙药/null 蒙蒙/null 蒙蒙亮/null 蒙蒙细雨/null 蒙蒙雨/null 蒙蒙黑/null 蒙蔽/null 蒙覆/null 蒙阴/null 蒙难/null 蒙面/null 蒙馆/null 蒙骗/null 蒜味/null 蒜头/null 蒜毫/null 蒜泥/null 蒜瓣/null 蒜瓣儿/null 蒜皮/null 蒜苔/null 蒜苗/null 蒜苗炒肉片/null 蒜茸/null 蒜茸钳/null 蒜蓉油菜/null 蒜蓉豆角/null 蒜薹/null 蒜黄/null 蒟蒻/null 蒭藁增二/null 蒲公英/null 蒲剑/null 蒲剧/null 蒲包/null 蒲团/null 蒲圻/null 蒲圻市/null 蒲城/null 蒲墩儿/null 蒲式耳/null 蒲扇/null 蒲松龄/null 蒲柳/null 蒲柳之姿/null 蒲桃/null 蒲棒/null 蒲江/null 蒲瓜/null 蒲甘/null 蒲甘王朝/null 蒲福风级/null 蒲绒/null 蒲节/null 蒲草/null 蒲草箱/null 蒲菜/null 蒲萄/null 蒲葵/null 蒲鉾/null 蒲陶/null 蒲隆地/null 蒲鞋/null 蒲鞭之政/null 蒴果/null 蒸化/null 蒸去/null 蒸发/null 蒸发性/null 蒸发掉/null 蒸发热/null 蒸发皿/null 蒸发空调/null 蒸发计/null 蒸发量/null 蒸掉/null 蒸气/null 蒸气浴/null 蒸气重整/null 蒸汽/null 蒸汽似/null 蒸汽机/null 蒸汽机车/null 蒸汽浴/null 蒸汽状/null 蒸汽疗法/null 蒸汽计/null 蒸汽锤/null 蒸沙成饭/null 蒸湘/null 蒸湘区/null 蒸溜/null 蒸溜器/null 蒸溜所/null 蒸溜液/null 蒸溜者/null 蒸烧/null 蒸熟/null 蒸笼/null 蒸粗麦粉/null 蒸糕/null 蒸肉丸/null 蒸腾/null 蒸腾作用/null 蒸蒸日上/null 蒸锅/null 蒸食/null 蒸饺/null 蒸饼/null 蒸馏/null 蒸馏器/null 蒸馏室/null 蒸馏水/null 蒸馏法/null 蒸馏液/null 蒸馏物/null 蒸馏酒/null 蒸鱼/null 蒹葭倚玉/null 蒺藜/null 蒽醌/null 蒿子/null 蒿子秆儿/null 蒿目时艰/null 蓁蓁/null 蓄养/null 蓄力器/null 蓄势/null 蓄势以待/null 蓄势待发/null 蓄心/null 蓄志/null 蓄念/null 蓄意/null 蓄水/null 蓄水池/null 蓄洪/null 蓄电/null 蓄电池/null 蓄积/null 蓄能/null 蓄谋/null 蓄谋已久/null 蓄财/null 蓄财者/null 蓄锐养威/null 蓄须明志/null 蓉树/null 蓊菜/null 蓊郁/null 蓑草/null 蓑衣/null 蓓蕾/null 蓖麻/null 蓖麻毒素/null 蓖麻油/null 蓖麻籽/null 蓖麻蚕/null 蓝侬/null 蓝光/null 蓝光光盘/null 蓝图/null 蓝天/null 蓝字/null 蓝宝石/null 蓝屏死机/null 蓝山/null 蓝巨星/null 蓝布/null 蓝晶/null 蓝晶晶/null 蓝晶石/null 蓝本/null 蓝桥/null 蓝毗尼/null 蓝波/null 蓝点/null 蓝点颏/null 蓝点鲅/null 蓝牙/null 蓝田/null 蓝田出玉/null 蓝田猿人/null 蓝田生玉/null 蓝田种玉/null 蓝的/null 蓝皮/null 蓝皮书/null 蓝盈盈/null 蓝矾/null 蓝移/null 蓝筹股/null 蓝精灵/null 蓝细菌/null 蓝绿/null 蓝绿菌/null 蓝绿藻/null 蓝缕/null 蓝耳病/null 蓝肤木/null 蓝舌病/null 蓝色/null 蓝色剂/null 蓝色小精灵/null 蓝花/null 蓝草莓/null 蓝莓/null 蓝莹莹/null 蓝菌/null 蓝菌门/null 蓝蓝/null 蓝藻/null 蓝藻门/null 蓝调/null 蓝铜矿/null 蓝闪石/null 蓝青/null 蓝青官话/null 蓝靛/null 蓝领/null 蓝颜知己/null 蓝饰带花/null 蓝鲸/null 蓝鸟/null 蓝黑/null 蓟北/null 蓟城/null 蓟门/null 蓟马/null 蓦地/null 蓦地里/null 蓦然/null 蓬乱/null 蓬勃/null 蓬勃发展/null 蓬壶/null 蓬头历齿/null 蓬头垢面/null 蓬头跣足/null 蓬安/null 蓬屋生辉/null 蓬布/null 蓬心/null 蓬户/null 蓬户垢牖/null 蓬户瓮牖/null 蓬散/null 蓬松/null 蓬江/null 蓬江区/null 蓬溪/null 蓬生麻中/null 蓬筚/null 蓬筚增辉/null 蓬筚生光/null 蓬筚生辉/null 蓬茸/null 蓬荜/null 蓬荜增辉/null 蓬荜生光/null 蓬荜生辉/null 蓬莱/null 蓬莱仙境/null 蓬蒿/null 蓬蓬/null 蓬蓬勃勃/null 蓬车/null 蓬门/null 蓬门筚户/null 蓬门荜户/null 蓬闾生辉/null 蓬首垢面/null 蓼科/null 蓼蓝/null 蔑称/null 蔑视/null 蔑语/null 蔓延/null 蔓延于/null 蔓延全国/null 蔓生/null 蔓生植物/null 蔓草/null 蔓菁/null 蔓藤/null 蔓越橘/null 蔓越莓/null 蔗农/null 蔗渣/null 蔗糖/null 蔗露/null 蔚为/null 蔚为大观/null 蔚兰/null 蔚山/null 蔚山市/null 蔚山广域市/null 蔚成/null 蔚然/null 蔚然成风/null 蔚蓝/null 蔚起/null 蔡东藩/null 蔡伦/null 蔡依林/null 蔡元培/null 蔡司公司/null 蔡国强/null 蔡志忠/null 蔡李佛/null 蔡甸/null 蔡甸区/null 蔡英文/null 蔡襄/null 蔡锷/null 蔫不唧/null 蔫儿/null 蔫儿坏/null 蔫呼呼/null 蔫土匪/null 蔬果/null 蔬果店/null 蔬菜/null 蔬菜学/null 蔬食/null 蔬食者/null 蔷薇/null 蔷薇似/null 蔷薇十字团/null 蔷薇园/null 蔷薇色/null 蔷薇花蕾/null 蔸距/null 蔺相如/null 蔻丹/null 蔻蔻/null 蔼然/null 蔼蔼/null 蔽之/null 蔽体/null 蔽塞/null 蔽天/null 蔽帚千金/null 蔽帚自珍/null 蔽护/null 蔽日/null 蔽物/null 蔽聪塞明/null 蔽芾/null 蔽身处/null 蕃主/null 蕃人/null 蕃庑/null 蕃茄/null 蕃茄色/null 蕃薯/null 蕃衍/null 蕈树/null 蕉城/null 蕉城区/null 蕉岭/null 蕉萃/null 蕉藕/null 蕉麻/null 蕊叶/null 蕙兰/null 蕙心兰质/null 蕙心纨质/null 蕙质兰心/null 蕞尔/null 蕠藘/null 蕨类/null 蕨类植物/null 蕨菜/null 蕲春/null 蕲求/null 蕲艾/null 蕲蛇/null 蕴于/null 蕴含/null 蕴和/null 蕴奇待价/null 蕴涵/null 蕴积/null 蕴结/null 蕴聚/null 蕴育/null 蕴蓄/null 蕴藉/null 蕴藏/null 蕴藏量/null 蕴酿/null 蕹菜/null 蕺菜/null 蕾丝/null 蕾丝花边/null 蕾丝边/null 蕾铃/null 薄一波/null 薄义/null 薄云/null 薄产/null 薄亲/null 薄养厚葬/null 薄冰/null 薄利/null 薄利多销/null 薄厚/null 薄命/null 薄地/null 薄壁/null 薄壳/null 薄尾乞怜/null 薄层/null 薄布/null 薄幸/null 薄弱/null 薄弱环节/null 薄待/null 薄情/null 薄技/null 薄收/null 薄明/null 薄晓/null 薄暗/null 薄暮/null 薄木板/null 薄木片/null 薄板/null 薄档/null 薄棉/null 薄棉布/null 薄毛呢/null 薄油层/null 薄海/null 薄烤饼/null 薄煎饼/null 薄熙来/null 薄片/null 薄片形/null 薄片状/null 薄版/null 薄物细故/null 薄瑞光/null 薄田/null 薄的/null 薄皮/null 薄礼/null 薄祚寒门/null 薄纱/null 薄纱罗/null 薄纸/null 薄细/null 薄织/null 薄绸/null 薄而脆/null 薄而透明/null 薄肉片/null 薄胎瓷器/null 薄脆/null 薄膜/null 薄膜电路/null 薄舌/null 薄荷/null 薄荷油/null 薄荷脑/null 薄荷醇/null 薄薄/null 薄衣/null 薄记员/null 薄软/null 薄透镜/null 薄酒/null 薄酬/null 薄钢/null 薄隔板/null 薄雪/null 薄雾/null 薄面/null 薄饼/null 薅锄/null 薏仁/null 薏米/null 薏苡/null 薏苡之谤/null 薏苡明珠/null 薛仁贵/null 薛城/null 薛城区/null 薛定谔/null 薛定谔方程/null 薛宝钗/null 薛居正/null 薛福成/null 薛稷/null 薜荔/null 薤露/null 薪优/null 薪优佣厚/null 薪俸/null 薪尽火传/null 薪晌/null 薪桂米珠/null 薪水/null 薪水册/null 薪津/null 薪炭林/null 薪给/null 薪资/null 薪酬/null 薪金/null 薪金制/null 薪饷/null 薮泽/null 薯条/null 薯片/null 薯类/null 薯粉/null 薯莨/null 薯莨绸/null 薯蓣/null 薯蓣科/null 薯饼/null 薰上/null 薰以/null 薰制/null 薰莸/null 薰莸不同器/null 薰衣草/null 薰香/null 薹草/null 薹草属/null 藁城/null 藁城县/null 藁本/null 藁草/null 藉以/null 藉其/null 藉口/null 藉故/null 藉此/null 藉由/null 藉着/null 藉著/null 藉资挹注/null 藏/null/0 藏之名山/null 藏书/null 藏书家/null 藏书癖/null 藏书票/null 藏人/null 藏传佛教/null 藏刀/null 藏医/null 藏匿/null 藏历/null 藏品/null 藏器待时/null 藏在/null 藏垢/null 藏垢纳污/null 藏处/null 藏头亢脑/null 藏头露尾/null 藏奸/null 藏好/null 藏娇/null 藏学/null 藏宝/null 藏室/null 藏富/null 藏尸/null 藏形匿影/null 藏戏/null 藏所/null 藏拙/null 藏掖/null 藏文/null 藏民/null 藏污纳垢/null 藏物/null 藏独/null 藏猫儿/null 藏猫猫/null 藏獒/null 藏着/null 藏红花/null 藏经/null 藏经洞/null 藏羚/null 藏羚羊/null 藏者/null 藏胞/null 藏茴香果/null 藏药/null 藏著/null 藏蓝/null 藏藏掖掖/null 藏语/null 藏诸名山/null 藏象/null 藏起/null 藏踪/null 藏身/null 藏身之处/null 藏身处/null 藏躲/null 藏酒/null 藏锋敛锷/null 藏镜人/null 藏间/null 藏闷儿/null 藏青/null 藏青果/null 藏青色/null 藏香/null 藏骨堂/null 藏龙卧虎/null 藐孤/null 藐小/null 藐忽/null 藐法/null 藐藐/null 藐视/null 藐视一切/null 藓苔/null 藕丝/null 藕合/null 藕断丝连/null 藕灰/null 藕粉/null 藕色/null 藕节/null 藕节儿/null 藕花/null 藕荷/null 藜芦/null 藤丛/null 藤木/null 藤制/null 藤器/null 藤子/null 藤床/null 藤本/null 藤本植物/null 藤杖/null 藤条/null 藤架/null 藤森/null 藤椅/null 藤泽/null 藤牌/null 藤球/null 藤箧/null 藤箱/null 藤菜/null 藤萝/null 藤蔓/null 藤野/null 藤野先生/null 藤鞭/null 藤黄/null 藩主/null 藩台/null 藩国/null 藩属/null 藩库/null 藩篱/null 藩镇/null 藻井/null 藻土/null 藻类/null 藻类学/null 藻类植物/null 藻饰/null 藿香/null 藿香正气丸/null 蘅塘退士/null 蘅芜/null 蘑菇/null 蘑菇云/null 蘑菇汤/null 蘖枝/null 蘧然/null 蘸上/null 蘸湿/null 蘸火/null 蘸破/null 蘸笔/null 蘸酱/null 蘼芜/null 虎不拉/null 虎丘/null 虎丘区/null 虎伏/null 虎体熊腰/null 虎兕出柙/null 虎入羊群/null 虎列拉/null 虎劲/null 虎势/null 虎口/null 虎口余生/null 虎口拔牙/null 虎口逃生/null 虎咽狼吞/null 虎啸/null 虎啸龙吟/null 虎头燕颔/null 虎头牌/null 虎头虎脑/null 虎头蛇尾/null 虎头蜂/null 虎头钳/null 虎头鼠尾/null 虎威/null 虎威狐假/null 虎子/null 虎字头/null 虎将/null 虎尾/null 虎尾春冰/null 虎尾镇/null 虎帐/null 虎年/null 虎彪彪/null 虎掷龙拿/null 虎斑鹦鹉/null 虎斗/null 虎斗龙争/null 虎林/null 虎步龙行/null 虎毒不食儿/null 虎爪派/null 虎父无犬子/null 虎牌/null 虎牙/null 虎狮兽/null 虎狼/null 虎略龙韬/null 虎疫/null 虎皮/null 虎皮宣/null 虎皮羊质/null 虎皮鹦鹉/null 虎眼石/null 虎穴/null 虎穴龙潭/null 虎窟龙潭/null 虎符/null 虎类/null 虎耳/null 虎耳草/null 虎背熊腰/null 虎荡羊群/null 虎落平川/null 虎虎/null 虎视/null 虎视眈眈/null 虎视鹰瞵/null 虎贲/null 虎起脸/null 虎跃龙腾/null 虎跳峡/null 虎踞/null 虎踞龙盘/null 虎踞龙蟠/null 虎蹲炮/null 虎钳/null 虎门/null 虎门条约/null 虎门镇/null 虎骨/null 虎骨酒/null 虎魄/null 虎鲸/null 虏获/null 虐刑/null 虐子孤臣/null 虐待/null 虐待狂/null 虐待症/null 虐打/null 虐政/null 虐杀/null 虐疾/null 虑及/null 虔信/null 虔信主义/null 虔信派/null 虔信者/null 虔婆/null 虔心/null 虔敬/null 虔诚/null 虚与委蛇/null 虚义/null 虚予委蛇/null 虚付/null 虚价/null 虚伪/null 虚伪类真/null 虚位/null 虚位以待/null 虚假/null 虚假设/null 虚像/null 虚减/null 虚列/null 虚化/null 虚发/null 虚名/null 虚土/null 虚增/null 虚头/null 虚夸/null 虚套子/null 虚妄/null 虚字/null 虚学/null 虚实/null 虚宫格/null 虚寒/null 虚岁/null 虚左以待/null 虚己以听/null 虚己受人/null 虚席/null 虚席以待/null 虚幻/null 虚幻飘渺/null 虚应/null 虚应故事/null 虚度/null 虚度光阴/null 虚度年华/null 虚张/null 虚张声势/null 虚弱/null 虚往实归/null 虚心/null 虚心使人进步/null 虚心好学/null 虚怀若谷/null 虚悬/null 虚情/null 虚情假意/null 虚惊/null 虚报/null 虚报冒领/null 虚拟/null 虚拟世界/null 虚拟幻觉/null 虚拟机/null 虚拟环境/null 虚拟现实/null 虚拟现实置标语言/null 虚拟网络/null 虚拟连接/null 虚拟通道标志符/null 虚拟通道连接/null 虚损/null 虚掩/null 虚提/null 虚收/null 虚数/null 虚文/null 虚文浮礼/null 虚无/null 虚无主义/null 虚无假设/null 虚无缥渺/null 虚无缥缈/null 虚无飘渺/null 虚星/null 虚晃/null 虚有其表/null 虚构/null 虚构小说/null 虚框/null 虚汗/null 虚浮/null 虚火/null 虚牝/null 虚生浪死/null 虚电路/null 虚症/null 虚痨/null 虚盈/null 虚礼/null 虚空/null 虚空藏菩萨/null 虚粒子/null 虚线/null 虚缺号/null 虚耗/null 虚肿/null 虚胖/null 虚脱/null 虚腕/null 虚舟飘瓦/null 虚荣/null 虚荣心/null 虚虚实实/null 虚言/null 虚誉/null 虚警/null 虚论高议/null 虚设/null 虚诈/null 虚词/null 虚话/null 虚谈高论/null 虚谎/null 虚象/null 虚转/null 虚辞/null 虚造/null 虚飘飘/null 虚饰/null 虚骄/null 虞世南/null 虞侯/null 虞喜/null 虞城/null 虞应龙/null 虞美人/null 虞舜/null 虫儿/null 虫蚁/null 虫卵/null 虫吃牙/null 虫声/null 虫媒病毒/null 虫媒花/null 虫子/null 虫子牙/null 虫孔/null 虫害/null 虫情/null 虫沙猿鹤/null 虫洞/null 虫灾/null 虫牙/null 虫状/null 虫病/null 虫瘿/null 虫白蜡/null 虫眼/null 虫类/null 虫胶/null 虫臂鼠肝/null 虫草/null 虫药/null 虫蛀/null 虫蜡/null 虫豸/null 虫鱼/null 虫鸟叫声/null 虫鸣/null 虬须/null 虬龙/null 虮子/null 虰蛵/null 虱卵/null 虱多不痒/null 虱子/null 虱目鱼/null 虹口/null 虹吸/null 虹吸现象/null 虹吸管/null 虹彩/null 虹桥/null 虹桥机场/null 虹膜/null 虹鳟/null 虺虺/null 虺蜥/null 虼蚤/null 虼螂/null 虽之/null 虽休勿休/null 虽则/null 虽对/null 虽小/null 虽已/null 虽是/null 虽有/null 虽未/null 虽死犹生/null 虽死犹荣/null 虽然/null 虽经/null 虽能用/null 虽覆能复/null 虽说/null 虾仁/null 虾兵蟹将/null 虾夷/null 虾夷葱/null 虾子/null 虾干/null 虾慌蟹乱/null 虾油/null 虾片/null 虾球/null 虾皮/null 虾米/null 虾虎鱼/null 虾虎鱼科/null 虾酱/null 虾面/null 虾须/null 虾饺/null 蚀刻/null 蚀刻师/null 蚀刻法/null 蚀损/null 蚀本/null 蚀船虫/null 蚁丘/null 蚁冢/null 蚁斗蜗争/null 蚁穴/null 蚁窝/null 蚁聚蜂屯/null 蚁蚕/null 蚁酸/null 蚁酸盐/null 蚁醛/null 蚁附/null 蚂蚁/null 蚂蚁啃骨头/null 蚂蚱/null 蚂螂/null 蚂蟥/null 蚂蟥钉/null 蚊力负山/null 蚊子/null 蚊帐/null 蚊烟/null 蚊类/null 蚊虫/null 蚊虫叮咬/null 蚊蝇/null 蚊香/null 蚌埠/null 蚌壳/null 蚌山/null 蚌山区/null 蚌蛎/null 蚍蜉/null 蚍蜉戴盆/null 蚍蜉撼大树/null 蚍蜉撼树/null 蚕丛/null 蚕丝/null 蚕丝业/null 蚕农/null 蚕卵/null 蚕子/null 蚕宝宝/null 蚕属/null 蚕山/null 蚕桑/null 蚕沙/null 蚕眠/null 蚕眠字/null 蚕种/null 蚕箔/null 蚕纸/null 蚕茧/null 蚕茧纸/null 蚕菜/null 蚕蔟/null 蚕薄/null 蚕蚁/null 蚕蛹/null 蚕蛹油/null 蚕蛾/null 蚕豆/null 蚕豆症/null 蚕豆象/null 蚕食/null 蚕食鲸吞/null 蚖虫/null 蚜虫/null 蚝油/null 蚤类/null 蚩尤/null 蚩蚩群氓/null 蚯蚓/null 蚰蜒/null 蚰蜒草/null 蚰蜒路/null 蚱虫/null 蚱蜢/null 蚱蝉/null 蚵仔煎/null 蚶子/null 蚺蛇/null 蛀坏/null 蛀孔/null 蛀心虫/null 蛀洞/null 蛀牙/null 蛀船虫/null 蛀虫/null 蛀蚀/null 蛀食/null 蛀齿/null 蛆虫/null 蛇一般/null 蛇口/null 蛇咬伤/null 蛇夫座/null 蛇头/null 蛇尾/null 蛇岛/null 蛇岛蝮/null 蛇崇拜/null 蛇年/null 蛇形/null 蛇心佛口/null 蛇性/null 蛇样/null 蛇根草/null 蛇毒/null 蛇毒素/null 蛇皮/null 蛇皮果/null 蛇神牛鬼/null 蛇类/null 蛇纹岩/null 蛇纹石/null 蛇绿岩/null 蛇绿混杂/null 蛇绿混杂岩/null 蛇绿混杂岩带/null 蛇胆/null 蛇莓/null 蛇蒿/null 蛇蜕/null 蛇蜕皮/null 蛇蜥/null 蛇蝎/null 蛇行/null 蛇足/null 蛇颈/null 蛇麻/null 蛇麻草/null 蛇鼠横行/null 蛊惑/null 蛊惑人心/null 蛊祝/null 蛋制品/null 蛋包/null 蛋包饭/null 蛋卷/null 蛋品/null 蛋塔/null 蛋壳/null 蛋奶/null 蛋奶酥/null 蛋子/null 蛋形/null 蛋挞/null 蛋氨酸/null 蛋清/null 蛋白/null 蛋白尿/null 蛋白石/null 蛋白素/null 蛋白胨/null 蛋白质/null 蛋白酶/null 蛋白银/null 蛋类/null 蛋粉/null 蛋糕/null 蛋糕裙/null 蛋花/null 蛋花汤/null 蛋酒/null 蛋青/null 蛋饼/null 蛋鸡/null 蛋黄/null 蛋黄素/null 蛋黄酱/null 蛎壳/null 蛎鹬/null 蛎黄/null 蛏子/null 蛏干/null 蛏田/null 蛐蛐儿/null 蛐蟮/null 蛔虫/null 蛔虫病/null 蛙人/null 蛙泳/null 蛙突/null 蛙类/null 蛙鞋/null 蛙鸣/null 蛙鼓/null 蛛丝/null 蛛丝虫迹/null 蛛丝马迹/null 蛛丝鼠迹/null 蛛形/null 蛛网/null 蛛网似/null 蛛网尘封/null 蛛网状/null 蛛蛛/null 蛞蝓/null 蛞蝼/null 蛟河/null 蛟龙/null 蛟龙得水/null 蛤类/null 蛤蚧/null 蛤蛎/null 蛤蜊/null 蛤蟆/null 蛤蟆夯/null 蛤蟆镜/null 蛤蟹/null 蛭石/null 蛮不讲理/null 蛮人/null 蛮像/null 蛮力/null 蛮劲/null 蛮化/null 蛮地/null 蛮夷/null 蛮好/null 蛮子/null 蛮干/null 蛮悍/null 蛮横/null 蛮横无理/null 蛮皮/null 蛮缠/null 蛮荒/null 蛮行/null 蛮邸/null 蛰伏/null 蛰居/null 蛰眠/null 蛰藏/null 蛰虫/null 蛱蝶/null 蛲虫/null 蛲虫病/null 蛴螬/null 蛹幼虫/null 蛹期/null 蛾子/null 蛾摩拉/null 蛾眉/null 蛾眉皓齿/null 蛾眉螓首/null 蛾类/null 蛾虫/null 蜀国/null 蜀山/null 蜀山区/null 蜀汉/null 蜀犬吠日/null 蜀相/null 蜀绣/null 蜀葵/null 蜀道/null 蜀锦/null 蜀魏/null 蜀黍/null 蜂乳/null 蜂后/null 蜂场/null 蜂密/null 蜂屯蚁聚/null 蜂巢/null 蜂巢胃/null 蜂房/null 蜂拥/null 蜂拥而上/null 蜂拥而来/null 蜂拥而至/null 蜂毒/null 蜂王/null 蜂王浆/null 蜂王精/null 蜂皇/null 蜂皇精/null 蜂目豺声/null 蜂窝/null 蜂窝煤/null 蜂窝状/null 蜂箱/null 蜂类/null 蜂糕/null 蜂群/null 蜂聚/null 蜂虿有毒/null 蜂蜜/null 蜂蜜梳子/null 蜂蜜酒/null 蜂蜡/null 蜂螨/null 蜂螫/null 蜂起/null 蜂鸟/null 蜂鸣/null 蜂鸣器/null 蜂鸣声/null 蜃景/null 蜃楼海市/null 蜈支洲岛/null 蜈蚣/null 蜈蚣草/null 蜉蝣/null 蜒蚰/null 蜕化/null 蜕化变质/null 蜕变/null 蜕壳/null 蜕皮/null 蜗利蝇名/null 蜗名蝇利/null 蜗居/null 蜗庐/null 蜗旋/null 蜗杆/null 蜗杆副/null 蜗牛/null 蜗窗/null 蜗蜒/null 蜗行/null 蜗角虚名/null 蜗角蝇头/null 蜗轮/null 蜘蛛/null 蜘蛛人/null 蜘蛛侠/null 蜘蛛抱蛋/null 蜘蛛星云/null 蜘蛛痣/null 蜘蛛类/null 蜘蛛网/null 蜘蛛般/null 蜚声/null 蜚声世界/null 蜚声海外/null 蜚短流长/null 蜚英腾茂/null 蜚蠊/null 蜚蠊科/null 蜚言/null 蜚语/null 蜜丸子/null 蜜囊/null 蜜月/null 蜜月假期/null 蜜枣/null 蜜柑/null 蜜桃/null 蜜樱桃/null 蜜汁/null 蜜洞/null 蜜源/null 蜜瓜/null 蜜糖/null 蜜罐/null 蜜腺/null 蜜般/null 蜜色/null 蜜蜂/null 蜜蜂房/null 蜜蜡/null 蜜语/null 蜜酒/null 蜜里调油/null 蜜露/null 蜜饯/null 蜡人/null 蜡像/null 蜡像馆/null 蜡制/null 蜡刻/null 蜡台/null 蜡嘴/null 蜡地/null 蜡坨/null 蜡坨儿/null 蜡坨子/null 蜡塑术/null 蜡扦/null 蜡板/null 蜡果/null 蜡枪/null 蜡染/null 蜡样/null 蜡油/null 蜡涂/null 蜡渣子/null 蜡烛/null 蜡烛不点不亮/null 蜡烛两头烧/null 蜡版/null 蜡画/null 蜡疗/null 蜡笔/null 蜡笔夹/null 蜡笔小新/null 蜡管/null 蜡纸/null 蜡色/null 蜡芯/null 蜡花/null 蜡虫/null 蜡质/null 蜡黄/null 蜣螂/null 蜥形纲/null 蜥易/null 蜥臀目/null 蜥蜴/null 蜥蜴类/null 蜩螗沸羹/null 蜱咬病/null 蜷伏/null 蜷卧/null 蜷发/null 蜷局/null 蜷曲/null 蜷毛/null 蜷着/null 蜷缩/null 蜻蛉/null 蜻蛉目/null 蜻蜓/null 蜻蜓撼石柱/null 蜻蜓点水/null 蜻蜓目/null 蜾蠃/null 蜿蜒/null 蜿蜒而行/null 蝇利蜗名/null 蝇卵/null 蝇名蜗利/null 蝇头/null 蝇头小利/null 蝇头微利/null 蝇头蜗角/null 蝇子/null 蝇拍/null 蝇甩儿/null 蝇粪/null 蝇粪点玉/null 蝇营狗苟/null 蝇虎/null 蝇蝇/null 蝈蝈/null 蝈蝈儿/null 蝈蝈笼/null 蝈螽/null 蝈螽属/null 蝉科/null 蝉纱/null 蝉翼/null 蝉翼纱/null 蝉联/null 蝉蜕/null 蝉衣/null 蝉鸣/null 蝌子/null 蝌蚪/null 蝎子/null 蝎子草/null 蝎虎/null 蝎虎座/null 蝗灾/null 蝗科/null 蝗虫/null 蝗蝻/null 蝙蝠/null 蝙蝠侠/null 蝙鱼/null 蝠鲼/null 蝤蛑/null 蝤蛴/null 蝮蛇/null 蝰蛇/null 蝲蛄/null 蝴蝶/null 蝴蝶效应/null 蝴蝶斑/null 蝴蝶犬/null 蝴蝶琴/null 蝴蝶瓦/null 蝴蝶结/null 蝴蝶花/null 蝴蝶装/null 蝴蝶酥/null 蝶兰/null 蝶山区/null 蝶形/null 蝶形花/null 蝶泳/null 蝶类/null 蝶粉蜂黄/null 蝶雷/null 蝶骨/null 蝻子/null 蝼蚁/null 蝼蛄/null 蝼蛄科/null 蝾螈/null 螃蟹/null 螃蠏/null 螉䗥/null 融为/null 融为一体/null 融会/null 融会贯通/null 融体/null 融入/null 融冰/null 融冻层/null 融券/null 融化/null 融合/null 融合为一/null 融合性/null 融和/null 融安/null 融安县/null 融掉/null 融水/null 融汇/null 融洽/null 融炉/null 融然/null 融融/null 融解/null 融贯/null 融资/null 融通/null 融雪/null 融雪天气/null 螓首蛾眉/null 螟害/null 螟虫/null 螟蛉/null 螟蛉畏/null 螟蛾/null 螨虫/null 螫毒/null 螯肢/null 螳臂当车/null 螳螂/null 螳螂捕蝉/null 螳螂捕蝉黄雀在后/null 螵蛸/null 螺丝/null 螺丝刀/null 螺丝帽/null 螺丝扣/null 螺丝攻/null 螺丝母/null 螺丝起子/null 螺丝钉/null 螺丝钳/null 螺丝钻/null 螺丝锥/null 螺刀/null 螺号/null 螺孔/null 螺帽/null 螺拴/null 螺攻/null 螺旋/null 螺旋体/null 螺旋千斤顶/null 螺旋形/null 螺旋性/null 螺旋曲面/null 螺旋桨/null 螺旋梯/null 螺旋测微器/null 螺旋状/null 螺旋线/null 螺旋菌/null 螺旋藻/null 螺旋钳/null 螺旋钻/null 螺旋面/null 螺杆/null 螺枪/null 螺栓/null 螺桨/null 螺桨毂/null 螺母/null 螺母螺栓/null 螺纹/null 螺线/null 螺线管/null 螺菌/null 螺蛳/null 螺距/null 螺钉/null 螺钿/null 螺髻/null 螽斯/null 螽斯总科/null 螽斯科/null 蟊贼/null 蟋蟀/null 蟋蟀草/null 蟏蛸/null 蟏蛸满室/null 蟑螂/null 蟒蛇/null 蟒袍/null 蟛蜞/null 蟠尾丝虫/null 蟠尾丝虫症/null 蟠曲/null 蟠桃/null 蟠桃胜会/null 蟠龙/null 蟢子/null 蟪蛄/null 蟪蛄不知春秋/null 蟭蟟/null 蟹人/null 蟹壳/null 蟹慌蟹乱/null 蟹爪兰/null 蟹状星云/null 蟹獴/null 蟹粉/null 蟹肉/null 蟹酱/null 蟹青/null 蟹黄/null 蟹黄水/null 蟾宫/null 蟾宫折桂/null 蟾蜍/null 蟾蜍石/null 蟾除/null 蠓虫儿/null 蠕动/null 蠕动前进/null 蠕形/null 蠕形动物/null 蠕虫/null 蠕虫状/null 蠕蠕/null 蠕行/null 蠖屈求伸/null 蠛蠓/null 蠡测/null 蠢事/null 蠢人/null 蠢动/null 蠢才/null 蠢材/null 蠢汉/null 蠢物/null 蠢猪/null 蠢笨/null 蠢者/null 蠢若木鸡/null 蠢蛋/null 蠢蠢/null 蠢蠢欲动/null 蠢话/null 蠢货/null 蠢驴/null 蠮螉/null 蠲体/null 蠲免/null 蠲减/null 蠲吉/null 蠲洁/null 蠲涤/null 蠲租/null 蠲苛/null 蠲赋/null 蠲除/null 蠲除苛政/null 蠹众木折/null 蠹吏/null 蠹国害民/null 蠹国殃民/null 蠹害/null 蠹居棋处/null 蠹弊/null 蠹政/null 蠹简/null 蠹虫/null 蠹蛀/null 蠹鱼/null 蠹鱼子/null 蠼螋/null 血丝/null 血中/null 血中毒/null 血书/null 血亏/null 血亲/null 血亲复仇/null 血债/null 血债累累/null 血债血偿/null 血债要用血来偿/null 血债要用血来还/null 血凝/null 血凝素/null 血刃/null 血制品/null 血印/null 血压/null 血压计/null 血友/null 血友病/null 血友症/null 血口/null 血口喷人/null 血史/null 血吸虫/null 血吸虫病/null 血块/null 血型/null 血塞/null 血小板/null 血尿/null 血尿症/null 血崩/null 血师/null 血库/null 血循环/null 血性/null 血战/null 血拼/null 血族/null 血晕/null 血本/null 血本无归/null 血枯病/null 血染/null 血栓/null 血栓形成/null 血栓病/null 血栓症/null 血案/null 血毒症/null 血气/null 血气方刚/null 血气方壮/null 血气方盛/null 血氧含量/null 血氧量/null 血水/null 血汗/null 血汗工厂/null 血污/null 血沉/null 血泊/null 血泪/null 血泪斑斑/null 血洗/null 血流/null 血流如注/null 血流成川/null 血流成河/null 血流成渠/null 血流漂杵/null 血流量/null 血浆/null 血浓于水/null 血海/null 血海深仇/null 血液/null 血液凝结/null 血液增强剂/null 血液学/null 血液循环/null 血液恐怖症/null 血液病/null 血液透析/null 血液透析机/null 血淋淋/null 血清/null 血清学/null 血清张力素/null 血清病/null 血清素/null 血渍/null 血渍斑斑/null 血滴/null 血球/null 血田/null 血痕/null 血瘤/null 血癌/null 血盆/null 血盆大口/null 血祭/null 血种/null 血竭/null 血管/null 血管摄影/null 血管粥样硬化/null 血管造影/null 血粉/null 血糊糊/null 血糖/null 血红/null 血红素/null 血红色/null 血红蛋白/null 血细胞/null 血统/null 血统工人/null 血统论/null 血缘/null 血缘关系/null 血缘婚/null 血肉/null 血肉之躯/null 血肉模糊/null 血肉横飞/null 血肉淋漓/null 血肉相联/null 血肉相连/null 血肠/null 血肿/null 血胸/null 血脂/null 血脉/null 血腥/null 血腥玛丽/null 血色/null 血色好/null 血色素/null 血色素沉积症/null 血花/null 血蓝素/null 血虚/null 血虫/null 血行/null 血衣/null 血衫/null 血证/null 血象/null 血账/null 血路/null 血迹/null 血迹斑斑/null 血郁/null 血钻/null 血防/null 血雨/null 血雨腥风/null 衅发萧墙/null 衅端/null 衅起萧墙/null 衅隙/null 行万里路/null 行万里路胜读万卷书/null 行上/null 行不/null 行不从径/null 行不及言/null 行不改姓/null 行不更名/null 行不更名坐不改姓/null 行不由径/null 行不苟合/null 行不苟容/null 行不通/null 行不逾方/null 行不顾言/null 行业/null 行业不正之风/null 行业语/null 行东/null 行中/null 行为/null 行为不端/null 行为主义/null 行为人/null 行为准则/null 行为科学/null 行为者/null 行为论/null 行之有年/null 行之有效/null 行乐/null 行乞/null 行书/null 行了/null 行事/null 行事历/null 行于/null 行于言色/null 行于辞色/null 行于颜色/null 行亏名缺/null 行云流水/null 行人/null 行人安全岛/null 行人径/null 行人情/null 行令/null 行伍/null 行会/null 行佣/null 行使/null 行使主权/null 行使职权/null 行侠仗义/null 行兵布阵/null 行其/null 行军/null 行军动众/null 行军床/null 行军礼/null 行军虫/null 行军路线/null 行凶/null 行凶作恶/null 行凶撒泼/null 行凶者/null 行刑/null 行刑队/null 行列/null 行列式/null 行刺/null 行割礼/null 行动/null 行动上/null 行动不便/null 行动主义/null 行动方案/null 行动电话/null 行动纲领/null 行动缓慢/null 行动者/null 行动自由/null 行动计划/null 行动迟缓/null 行劫/null 行化如神/null 行医/null 行千里路/null 行单影单/null 行单影只/null 行只影单/null 行号/null 行号巷哭/null 行合趋同/null 行吗/null 行吟坐咏/null 行呀/null 行唐/null 行商/null 行啦/null 行善/null 行囊/null 行在/null 行头/null 行好/null 行子/null 行孤影只/null 行孤影寡/null 行客/null 行宣福礼/null 行宫/null 行家/null 行家里手/null 行将/null 行将告罄/null 行将就木/null 行将结束/null 行尸走肉/null 行尸走骨/null 行尾/null 行己有耻/null 行市/null 行师动众/null 行帮/null 行当/null 行径/null 行得通/null 行必果/null 行思坐忆/null 行思坐想/null 行性/null 行恶/null 行情/null 行成于思/null 行成功满/null 行房/null 行所无事/null 行政/null 行政上/null 行政事业单位/null 行政会议/null 行政公署/null 行政区/null 行政区划/null 行政区划图/null 行政区域/null 行政区画/null 行政单位/null 行政员/null 行政命令/null 行政处分/null 行政学/null 行政官/null 行政开除/null 行政总厨/null 行政救济/null 行政机关/null 行政权/null 行政村/null 行政法/null 行政法学/null 行政法规/null 行政监察/null 行政监督/null 行政管理/null 行政行为/null 行政诉讼/null 行政诉讼法/null 行政责任/null 行政部门/null 行政长官/null 行政院/null 行数/null 行文/null 行方便/null 行旁/null 行旅/null 行无越思/null 行时/null 行易知难/null 行星/null 行星间/null 行星际/null 行有余力/null 行期/null 行李/null 行李传送带/null 行李卷儿/null 行李员/null 行李房/null 行李搬运工/null 行李架/null 行李票/null 行李箱/null 行李袋/null 行李车/null 行板/null 行栈/null 行检/null 行楷/null 行横/null 行次/null 行款/null 行止/null 行步如飞/null 行气/null 行波管/null 行浊言清/null 行淫/null 行满功圆/null 行满功成/null 行状/null 行猎/null 行疾如飞/null 行的/null 行省/null 行眠立盹/null 行短才乔/null 行短才高/null 行礼/null 行礼如仪/null 行程/null 行程表/null 行窃/null 行笔/null 行箧/null 行经/null 行署/null 行者/null 行脚/null 行腔/null 行船/null 行色/null 行色匆匆/null 行若无事/null 行若狗彘/null 行草/null 行营/null 行藏/null 行行/null 行行出状元/null 行装/null 行规/null 行许/null 行诈/null 行诗/null 行话/null 行语/null 行货/null 行贩/null 行贿/null 行贿受贿/null 行贿者/null 行赏/null 行走/null 行走如飞/null 行距/null 行路/null 行踪/null 行身/null 行车/null 行车道/null 行辈/null 行辕/null 行过/null 行进/null 行进挡/null 行远自迩/null 行述/null 行迹/null 行道/null 行道树/null 行都/null 行量/null 行销/null 行销诉求/null 行长/null 行间/null 行院/null 行随事迁/null 行频/null 行首/null 行驶/null 行骗/null 衍化/null 衍变/null 衍圣公/null 衍圣公府/null 衍射/null 衍射格子/null 衍射角/null 衍文/null 衍生/null 衍生产品/null 衍生物/null 衔儿/null 衔尾/null 衔冤/null 衔冤负屈/null 衔华佩实/null 衔尾相属/null 衔尾相随/null 衔恨/null 衔恨蒙枉/null 衔悲茹恨/null 衔接/null 衔枚/null 衔环结草/null 衔等/null 衔铁/null 街上/null 街事/null 街亭/null 街动/null 街区/null 街号巷哭/null 街名/null 街商/null 街场/null 街坊/null 街坊四邻/null 街坊邻里/null 街垒/null 街头/null 街头剧/null 街头巷尾/null 街头巷语/null 街头市尾/null 街头标贴/null 街头诗/null 街头霸王/null 街巷阡陌/null 街市/null 街心/null 街戏/null 街景/null 街机/null 街段/null 街沿/null 街灯/null 街灯柱/null 街角/null 街谈/null 街谈巷议/null 街谈巷说/null 街车/null 街边/null 街道/null 街道办事处/null 街部/null 街门/null 街面/null 街面儿上/null 衙内/null 衙官屈宋/null 衙役/null 衙署/null 衙运/null 衙门/null 衡东/null 衡制/null 衡力/null 衡南/null 衡器/null 衡学/null 衡定/null 衡平/null 衡平法/null 衡情酌理/null 衡水/null 衡水地区/null 衡酌/null 衡量/null 衡量制/null 衡门深巷/null 衡阳地区/null 衢县/null 衢州/null 衣不完采/null 衣不曳地/null 衣不盖体/null 衣不蔽体/null 衣不解带/null 衣不重彩/null 衣不重采/null 衣丰食足/null 衣丰食饱/null 衣兜/null 衣冠/null 衣冠云集/null 衣冠优孟/null 衣冠冢/null 衣冠枭獍/null 衣冠楚楚/null 衣冠沐猴/null 衣冠济楚/null 衣冠济济/null 衣冠甚伟/null 衣冠礼乐/null 衣冠禽兽/null 衣冠绪馀/null 衣冠蓝缕/null 衣冠赫奕/null 衣冠辐凑/null 衣冠齐楚/null 衣分/null 衣刷/null 衣勾/null 衣包/null 衣匠/null 衣单食薄/null 衣原体/null 衣原菌/null 衣夹/null 衣子/null 衣履/null 衣帛/null 衣帛食肉/null 衣带/null 衣帽/null 衣帽架/null 衣帽间/null 衣扣/null 衣料/null 衣服/null 衣服缝边/null 衣架/null 衣架饭囊/null 衣柜/null 衣样/null 衣橱/null 衣物/null 衣物柜/null 衣甲/null 衣着/null 衣租食税/null 衣箱/null 衣类/null 衣索比亚/null 衣紫腰金/null 衣紫腰黄/null 衣羊公鹤/null 衣胞/null 衣著/null 衣蛾/null 衣衫/null 衣衫蓝缕/null 衣衾/null 衣袋/null 衣袍/null 衣袖/null 衣被/null 衣装/null 衣裙/null 衣裤/null 衣裳/null 衣裳儿/null 衣裳楚楚/null 衣裳钩儿/null 衣襟/null 衣角/null 衣钩/null 衣钩儿/null 衣钵/null 衣钵相传/null 衣锈夜行/null 衣锈昼行/null 衣锦之荣/null 衣锦夜游/null 衣锦夜行/null 衣锦故乡/null 衣锦昼游/null 衣锦荣归/null 衣锦过乡/null 衣锦还乡/null 衣锦食肉/null 衣阿华/null 衣领/null 衣食/null 衣食之谋/null 衣食住行/null 衣食无虞/null 衣食父母/null 衣饰/null 衣饰边/null 衣香鬓影/null 衣鱼/null 补一次/null 补一补/null 补丁/null 补上/null 补上这一课/null 补习/null 补习班/null 补交/null 补付/null 补休/null 补体/null 补修/null 补假/null 补偏救弊/null 补偿/null 补偿性/null 补偿者/null 补偿贸易/null 补偿费/null 补充/null 补全/null 补充人员/null 补充医疗/null 补充品/null 补充法/null 补充物/null 补充规定/null 补充语/null 补充量/null 补入/null 补养/null 补写/null 补剂/null 补办/null 补助/null 补助组织/null 补助货币/null 补助费/null 补助金/null 补卡/null 补发/null 补品/null 补块/null 补天/null 补天浴日/null 补嫁/null 补差/null 补征/null 补情/null 补成/null 补报/null 补拨/null 补挽/null 补提/null 补收/null 补救/null 补数/null 补替/null 补校/null 补正/null 补残守缺/null 补气/null 补法/null 补注/null 补泻/null 补洞/null 补派/null 补液/null 补满/null 补漏/null 补漏迟/null 补炉/null 补片/null 补牌/null 补牙/null 补物/null 补电/null 补登/null 补登机/null 补白/null 补益/null 补短/null 补码/null 补票/null 补票处/null 补种/null 补税/null 补签/null 补纳/null 补给/null 补给品/null 补给站/null 补给线/null 补给舰/null 补给船/null 补缀/null 补编/null 补缺/null 补缺拾遗/null 补考/null 补胎/null 补胎片/null 补脑强身/null 补色/null 补花/null 补苗/null 补苴/null 补苴罅漏/null 补药/null 补血/null 补血剂/null 补衣/null 补补/null 补裰/null 补角/null 补计/null 补订/null 补记/null 补语/null 补说/null 补请/null 补课/null 补货/null 补贴/null 补贴费/null 补赏/null 补赏金/null 补足/null 补足物/null 补足音程/null 补足额/null 补过/null 补还/null 补述/null 补退/null 补选/null 补遗/null 补钉/null 补阙/null 补阙拾遗/null 补集/null 补鞋/null 补题/null 补齐/null 表上/null 表中/null 表为/null 表亲/null 表位/null 表侄/null 表侄女/null 表兄/null 表兄弟/null 表内/null 表册/null 表决/null 表决权/null 表功/null 表单/null 表叔/null 表号/null 表哥/null 表团/null 表土/null 表土层/null 表壳/null 表外/null 表头/null 表妹/null 表姊/null 表姊妹/null 表姐/null 表姐妹/null 表姑/null 表姨/null 表姨父/null 表字/null 表尺/null 表尾/null 表层/null 表带/null 表式/null 表弟/null 表形/null 表形码/null 表彰/null 表彰会/null 表彰大会/null 表征/null 表态/null 表性/null 表情/null 表情丰富/null 表意/null 表意文字/null 表意符阶段/null 表扬/null 表报/null 表明/null 表明态度/null 表明是/null 表格/null 表浅/null 表温/null 表演/null 表演唱/null 表演者/null 表演艺术/null 表演艺术家/null 表演赛/null 表演过火/null 表率/null 表率作用/null 表现/null 表现主义/null 表现力/null 表现型/null 表现自己/null 表白/null 表皮/null 表皮剥脱素/null 表盘/null 表示/null 表示同情/null 表示尊敬/null 表示层/null 表示敬意/null 表章/null 表笔/null 表舅/null 表舅母/null 表蒙子/null 表袋/null 表观/null 表记/null 表证/null 表语/null 表象/null 表达/null 表达力强/null 表达失语症/null 表达式/null 表达性/null 表达方式/null 表达法/null 表达清晰/null 表述/null 表里/null 表里一致/null 表里不一/null 表里受敌/null 表里如一/null 表里山河/null 表里相合/null 表里相应/null 表里相济/null 表针/null 表链/null 表露/null 表面/null 表面上/null 表面信息/null 表面光/null 表面化/null 表面外膜/null 表面张力/null 表面性/null 表面文章/null 表面波/null 表面活化剂/null 表面活性剂/null 表面积/null 表音/null 表音文字/null 表项/null 衬出/null 衬垫/null 衬字/null 衬布/null 衬底/null 衬托/null 衬料/null 衬映/null 衬纸/null 衬线/null 衬衣/null 衬衫/null 衬裙/null 衬裤/null 衬边/null 衬里/null 衬面/null 衬页/null 衬领/null 衮服/null 衮衮/null 衮衮诸公/null 衰世/null 衰之以属/null 衰乱/null 衰亡/null 衰减/null 衰减器/null 衰变/null 衰变曲线/null 衰变热/null 衰变链/null 衰弱/null 衰弱性/null 衰微/null 衰惫/null 衰替/null 衰期/null 衰朽/null 衰歇/null 衰竭/null 衰老/null 衰落/null 衰落者/null 衰败/null 衰迈/null 衰运/null 衰退/null 衰退中/null 衰退期/null 衰颓/null 衰飒/null 衷心/null 衷心希望/null 衷心感谢/null 衷情/null 衷曲/null 衷肠/null 衾寒枕冷/null 衾影无惭/null 袁世凯/null 袁于令/null 袁咏仪/null 袁头/null 袁宏道/null 袁州/null 袁州区/null 袁枚/null 袁桷/null 袁绍/null 袁静/null 袄子/null 袄教/null 袅娜/null 袅绕/null 袅袅/null 袅袅娉娉/null 袅袅婷婷/null 袈裟/null 袋中/null 袋内/null 袋口/null 袋子/null 袋子包/null 袋形/null 袋熊/null 袋状/null 袋狼/null 袋类/null 袋装/null 袋鼠/null 袍哥/null 袍子/null 袍泽/null 袍笏登场/null 袍罩儿/null 袒免/null 袒庇/null 袒护/null 袒缚/null 袒胸/null 袒胸露背/null 袒胸露腹/null 袒胸露臂/null 袒膊/null 袒衣/null 袒裼/null 袒裼裸裎/null 袒露/null 袖上/null 袖口/null 袖头/null 袖套/null 袖子/null 袖孔/null 袖手/null 袖手傍观/null 袖手旁观/null 袖扣/null 袖标/null 袖珍/null 袖珍人/null 袖珍型/null 袖珍本/null 袖珍辞典/null 袖珍音响/null 袖短/null 袖章/null 袖筒/null 袖筒儿/null 袖箍/null 袖管/null 袖箭/null 袜上/null 袜业/null 袜厂/null 袜套/null 袜子/null 袜带/null 袜底/null 袜筒/null 袜船/null 袜裤/null 被上诉人/null 被乘数/null 被人/null 被他/null 被以/null 被任命者/null 被优化掉/null 被估/null 被侵害/null 被侵略者/null 被俘/null 被保证人/null 被保险人/null 被关/null 被冻/null 被减数/null 被判/null 被判死刑/null 被刺/null 被剔除者/null 被剥/null 被剥削/null 被剥削者/null 被剥削阶级/null 被加数/null 被动/null 被动免疫/null 被动句/null 被动吸烟/null 被动局面/null 被动式/null 被劫/null 被单/null 被占/null 被占领土/null 被卧/null 被压迫/null 被发佯狂/null 被发射/null 被发左衽/null 被发徒跣/null 被发拊膺/null 被发文身/null 被发缨冠/null 被发详狂/null 被发阳狂/null 被召/null 被吓/null 被告/null 被告人/null 被告席/null 被和谐/null 被咬/null 被困/null 被坚执锐/null 被头/null 被夹/null 被套/null 被她/null 被子/null 被子植物/null 被子植物门/null 被宠若惊/null 被害/null 被害人/null 被害者/null 被山带河/null 被开方数/null 被弃/null 被弄/null 被录取者/null 被往情深/null 被征/null 被忘/null 被忽略了/null 被想到/null 被打/null 被扣/null 被扣押人/null 被承认了/null 被投诉/null 被抛弃了/null 被拒之于门外/null 被拘留者/null 被拥抱者/null 被指/null 被指名人/null 被捕/null 被授/null 被接见者/null 被控/null 被推荐者/null 被提名者/null 被提起/null 被搞/null 被支撑著/null 被收容者/null 被放逐者/null 被救济者/null 被施魔法/null 被服/null 被杀/null 被步后尘/null 被毛/null 被没收/null 被泽蒙庥/null 被流放者/null 被淹/null 被清除者/null 被灾蒙祸/null 被炸/null 被爆者/null 被爱/null 被用/null 被甲执兵/null 被甲枕戈/null 被疑者/null 被监护人/null 被盗/null 被瞒/null 被禁/null 被禁止/null 被称为/null 被窃/null 被窝/null 被窝儿/null 被絮/null 被绑/null 被统治者/null 被继承人/null 被罚/null 被罩/null 被膜/null 被自杀/null 被虐待狂/null 被袋/null 被装/null 被褐怀玉/null 被褐怀珠/null 被褥/null 被覆/null 被解散了/null 被誉为/null 被认为/null 被议/null 被访者/null 被评为/null 被迫/null 被选举权/null 被逐/null 被逐出者/null 被逼/null 被遗弃者/null 被邀请者/null 被里/null 被问/null 被限定了/null 被除数/null 被难/null 被雇/null 被面/null 被领导者/null 被风/null 被驱逐者/null 袭以成俗/null 袭击/null 袭击战/null 袭击者/null 袭占/null 袭取/null 袭扰/null 袭来/null 袭用/null 袭者/null 袴子/null 袷袄/null 袷袢/null 袼褙/null 裁下/null 裁人/null 裁兵/null 裁军/null 裁决/null 裁决人/null 裁减/null 裁减军备/null 裁刀/null 裁切/null 裁判/null 裁判上/null 裁判员/null 裁判官/null 裁判工作/null 裁判所/null 裁判权/null 裁判长/null 裁制/null 裁剪/null 裁剪好/null 裁员/null 裁培/null 裁处/null 裁夺/null 裁定/null 裁并/null 裁度/null 裁开/null 裁成/null 裁掉/null 裁撤/null 裁断/null 裁汰/null 裁答/null 裁纸/null 裁纸机/null 裁缝/null 裁缝师/null 裁缝店/null 裁衣/null 裂伤/null 裂体吸虫/null 裂化/null 裂变/null 裂变产物/null 裂变同位素/null 裂变材料/null 裂变武器/null 裂变炸弹/null 裂变碎片/null 裂口/null 裂合酶/null 裂图分茅/null 裂声/null 裂孔/null 裂开/null 裂开性/null 裂成/null 裂殖/null 裂殖菌/null 裂殖菌纲/null 裂沟/null 裂炼/null 裂片/null 裂璺/null 裂痕/null 裂眦嚼齿/null 裂纹/null 裂缝/null 裂罅/null 裂脑人/null 裂裳裹膝/null 裂裳裹足/null 裂解/null 裂解酶/null 裂谷/null 裂谷热病毒/null 裂隙/null 装上/null 装下/null 装为/null 装书/null 装了/null 装于/null 装人/null 装以/null 装作/null 装佯/null 装修/null 装假/null 装做/null 装傻/null 装傻充愣/null 装入/null 装具/null 装冷/null 装出/null 装到/null 装卸/null 装卸工/null 装卸队/null 装可爱/null 装哑/null 装在/null 装填/null 装填物/null 装备/null 装备定型/null 装备工作/null 装备的/null 装备管理/null 装备维修/null 装天/null 装套布/null 装好/null 装嫩/null 装小/null 装屄/null 装帧/null 装异/null 装弹/null 装得/null 装得下/null 装懂/null 装成/null 装扮/null 装料/null 装有/null 装本/null 装机/null 装机容量/null 装束/null 装样/null 装样子/null 装模/null 装模作样/null 装模做样/null 装死/null 装殓/null 装气/null 装水/null 装法/null 装洋蒜/null 装满/null 装潢/null 装点/null 装煤/null 装玻璃/null 装璜/null 装甲/null 装甲兵/null 装甲车/null 装甲车辆/null 装甲输送车/null 装甲部队/null 装疯/null 装疯卖傻/null 装病/null 装的/null 装皮带/null 装盘/null 装相/null 装着/null 装睡/null 装破/null 装神作鬼/null 装神弄鬼/null 装神扮鬼/null 装穷叫苦/null 装箱/null 装糊涂/null 装紧/null 装置/null 装置物/null 装聋/null 装聋作哑/null 装聋做哑/null 装聪/null 装聪明/null 装腔/null 装腔作势/null 装腔作态/null 装船/null 装药/null 装萌/null 装蒜/null 装袋/null 装裱/null 装裹/null 装订/null 装订商/null 装订所/null 装订线/null 装设/null 装货/null 装货者/null 装起/null 装车/null 装载/null 装载处/null 装载机/null 装载物/null 装载量/null 装边/null 装运/null 装进/null 装逼/null 装配/null 装配员/null 装配工/null 装配工厂/null 装配线/null 装酸哭穷/null 装钉/null 装门面/null 装阔佬/null 装饰/null 装饰品/null 装饰布/null 装饰机/null 装饰物/null 装饰用/null 装饰者/null 装饰音/null 装马具/null 装龙装哑/null 装B/null 裒多益寡/null 裒敛无厌/null 裒辑/null 裔人/null 裔胄/null 裕仁/null 裕华/null 裕华区/null 裕固/null 裕如/null 裕安/null 裕安区/null 裕民/null 裕隆/null 裘力斯・恺撒/null 裘甫起义/null 裘皮/null 裘馨氏肌肉萎缩症/null 裘马轻肥/null 裙子/null 裙屐少年/null 裙布荆钗/null 裙布钗荆/null 裙带/null 裙带关系/null 裙带菜/null 裙带风/null 裙料/null 裙舞/null 裙衬/null 裙装/null 裙裤/null 裙褶/null 裙钗/null 裣衽/null 裤兜/null 裤内/null 裤勾/null 裤口/null 裤子/null 裤带/null 裤带扣/null 裤料/null 裤管/null 裤脚/null 裤腰/null 裤腰带/null 裤腿/null 裤衩/null 裤衫/null 裤袋/null 裤袜/null 裤裆/null 裤裙/null 裨益/null 裨补/null 裱好/null 裱画/null 裱糊/null 裱糊匠/null 裱背/null 裱褙/null 裴济/null 裸体/null 裸体主义/null 裸体主义者/null 裸体画/null 裸像/null 裸地/null 裸地化/null 裸奔/null 裸婚/null 裸子植物/null 裸子植物门/null 裸官/null 裸岩/null 裸机/null 裸照/null 裸眼/null 裸线/null 裸胸/null 裸袒/null 裸袖揎衣/null 裸裎/null 裸身/null 裸辞/null 裸露/null 裸露狂/null 裸鲤/null 裸麦/null 裸麦酒/null 裹上/null 裹以/null 裹住/null 裹包/null 裹在/null 裹尸/null 裹尸布/null 裹尸马革/null 裹得/null 裹挟/null 裹着/null 裹紧/null 裹胁/null 裹脚/null 裹腿/null 裹起/null 裹足/null 裹足不前/null 裹足不进/null 裹过/null 裹面/null 裾马襟牛/null 褂子/null 褊急/null 褊狭/null 褐家鼠/null 褐斑/null 褐煤/null 褐色/null 褐色土/null 褐藻/null 褐铁矿/null 褐马鸡/null 褐黑/null 褒义/null 褒义词/null 褒呔/null 褒善贬恶/null 褒奖/null 褒忠/null 褒忠乡/null 褒扬/null 褒损/null 褒禅山/null 褒衣博带/null 褒贤遏恶/null 褒贬/null 褒贬不一/null 褒贬与夺/null 褒赏/null 褓姆/null 褙子/null 褚人获/null 褟绦子/null 褡包/null 褡裢/null 褥单/null 褥垫/null 褥套/null 褥子/null 褥疮/null 褥草/null 褥面/null 褪下/null 褪光/null 褪前擦后/null 褪去/null 褪套儿/null 褪色/null 褫夺/null 褴褛/null 褶多/null 褶子/null 褶子了/null 褶曲/null 褶皱/null 褶皱山系/null 褶皱山脉/null 褶边/null 襁褓/null 襄办/null 襄助/null 襄垣/null 襄城/null 襄城区/null 襄樊/null 襄汾/null 襄理/null 襄礼/null 襄阳/null 襄阳区/null 襄阳地区/null 襞褶/null 襟兄/null 襟度/null 襟弟/null 襟怀/null 襟怀坦白/null 襟怀夷旷/null 襟抱/null 襟素/null 襟翼/null 襟衫/null 襟裾马牛/null 襟里/null 西下/null 西东/null 西丰/null 西乃/null 西乃山/null 西乐/null 西乡/null 西乡塘/null 西乡塘区/null 西亚/null 西京/null 西人/null 西伯利亚/null 西侧/null 西元/null 西元前/null 西充/null 西兰花/null 西关/null 西典/null 西凉/null 西凤酒/null 西力生/null 西化/null 西北/null 西北农林科技大学/null 西北地区/null 西北大学/null 西北太平洋/null 西北工业大学/null 西北方/null 西北航空公司/null 西北角/null 西北部/null 西北风/null 西区/null 西医/null 西医结合/null 西半球/null 西华/null 西单/null 西南/null 西南中沙群岛/null 西南亚/null 西南交通大学/null 西南地区/null 西南大学/null 西南太平洋/null 西南角/null 西南部/null 西南风/null 西印度/null 西印度群岛/null 西历/null 西厢记/null 西双版纳/null 西双版纳傣族自治州/null 西双版纳州/null 西双版纳粗榧/null 西口/null 西吉/null 西向/null 西周/null 西和/null 西哈努克/null 西固/null 西固区/null 西垂/null 西城/null 西域/null 西域记/null 西塔/null 西塞山/null 西塞山区/null 西塞罗/null 西境/null 西墙/null 西夏/null 西夏区/null 西外/null 西天/null 西太平洋/null 西头/null 西奇/null 西奈/null 西奈半岛/null 西子捧心/null 西孟加拉邦/null 西学/null 西安事变/null 西安交通大学/null 西安区/null 西安外国语大学/null 西安梆子/null 西安电子科技大学/null 西安门/null 西屯区/null 西山/null 西山会议派/null 西山区/null 西山日薄/null 西山日迫/null 西山饿夫/null 西屿/null 西屿乡/null 西岗区/null 西岳/null 西岸/null 西峡/null 西峰/null 西峰区/null 西崽/null 西工区/null 西市区/null 西平/null 西床剪烛/null 西度/null 西康/null 西康省/null 西式/null 西弗/null 西弗吉尼亚/null 西弗吉尼亚州/null 西归/null 西征/null 西德/null 西德尼/null 西戎/null 西打/null 西拉雅族/null 西撒哈拉/null 西敏/null 西文/null 西斯塔尼/null 西斯廷/null 西斯汀/null 西方/null 西方人/null 西方净土/null 西方化/null 西方国家/null 西方极乐世界/null 西方狍/null 西方马脑炎病毒/null 西施/null 西施犬/null 西昌/null 西晋/null 西晒/null 西服/null 西望/null 西来庵/null 西松/null 西松建设/null 西林/null 西林区/null 西柚/null 西格玛/null 西格蒙德/null 西格马/null 西楼/null 西楼梦/null 西楼记/null 西欧/null 西欧各国/null 西欧国家/null 西欧联盟/null 西歪东倒/null 西段/null 西汉/null 西江/null 西池/null 西沙/null 西沙群岛/null 西河大鼓/null 西法/null 西洋/null 西洋人/null 西洋化/null 西洋参/null 西洋式/null 西洋景/null 西洋杉/null 西洋棋/null 西洋画/null 西洋菜/null 西洋镜/null 西洛赛宾/null 西海/null 西港/null 西港乡/null 西游补/null 西游记/null 西湖/null 西湖乡/null 西湖区/null 西澳大利亚/null 西澳大利亚州/null 西点/null 西照/null 西燕/null 西王母/null 西班牙人/null 西班牙战争/null 西班牙文/null 西班牙港/null 西瓜/null 西画/null 西番莲/null 西番雅书/null 西畴/null 西疆/null 西皮/null 西盟/null 西盟县/null 西直门/null 西秀/null 西秀区/null 西科尔斯基/null 西秦/null 西窗/null 西端/null 西米/null 西米德兰兹/null 西米德兰兹郡/null 西米露/null 西红柿/null 西经/null 西耶那/null 西艺/null 西花厅/null 西芹/null 西药/null 西药房/null 西菜/null 西萨摩亚/null 西葫芦/null 西蒙・舒斯特/null 西藏毛腿沙鸡/null 西藏百万农奴解放纪念日/null 西螺/null 西螺镇/null 西行/null 西街/null 西装/null 西装料/null 西装革履/null 西西/null 西西里/null 西西里人/null 西西里岛/null 西西里起义/null 西谷米/null 西贡/null 西贡市/null 西走/null 西距/null 西路/null 西边/null 西边儿/null 西辽/null 西郊/null 西部/null 西部片/null 西里尔/null 西里尔字母/null 西里西亚/null 西里西亚织工起义/null 西门/null 西门子/null 西门子公司/null 西门庆/null 西门町/null 西门豹/null 西闪/null 西闯/null 西除东荡/null 西陵/null 西陵区/null 西陵峡/null 西雅图/null 西青/null 西非/null 西面/null 西顿/null 西风/null 西餐/null 西饼/null 西魏/null 要不/null 要不就/null 要不得/null 要不是/null 要不然/null 要不要/null 要么/null 要义/null 要之/null 要事/null 要人/null 要件/null 要价/null 要公/null 要冲/null 要击/null 要加牛奶/null 要务/null 要劲/null 要劲儿/null 要员/null 要命/null 要图/null 要地/null 要地防空/null 要塞/null 要好/null 要好成歉/null 要子/null 要宠召祸/null 要害/null 要害之地/null 要帐/null 要强/null 要径/null 要得/null 要挟/null 要旨/null 要是/null 要晕/null 要有/null 要枢/null 要样儿/null 要案/null 要死/null 要死不活/null 要死要活/null 要求/null 要津/null 要点/null 要物/null 要犯/null 要略/null 要目/null 要看/null 要端/null 要素/null 要紧/null 要约/null 要而不言/null 要职/null 要脸/null 要角/null 要言不烦/null 要言妙道/null 要诀/null 要说/null 要谎/null 要路/null 要道/null 要钱/null 要闻/null 要隘/null 要面子/null 要领/null 要饭/null 要饭的/null 覃塘/null 覃塘区/null 覃第/null 覆上/null 覆亡/null 覆以/null 覆信/null 覆军杀将/null 覆去/null 覆去番来/null 覆去翻来/null 覆叠/null 覆地翻天/null 覆宗灭祀/null 覆宗绝嗣/null 覆审/null 覆巢之下无完卵/null 覆巢倾卵/null 覆巢无完卵/null 覆巢毁卵/null 覆巢破卵/null 覆护/null 覆有/null 覆查/null 覆核/null 覆水不收/null 覆水难收/null 覆没/null 覆海移山/null 覆灭/null 覆盂之固/null 覆盂之安/null 覆盆/null 覆盆之冤/null 覆盆子/null 覆盆难照/null 覆盖/null 覆盖图/null 覆盖物/null 覆盖率/null 覆盖面/null 覆着/null 覆膜/null 覆舟/null 覆舟之戒/null 覆舟载舟/null 覆蕉寻鹿/null 覆议/null 覆车之戒/null 覆车之轨/null 覆车之辙/null 覆车之鉴/null 覆车继轨/null 覆辙/null 覆述/null 覆雨翻云/null 覆面/null 覆面物/null 覆鹿寻蕉/null 覆鹿遗蕉/null 见不/null 见不得/null 见不得人/null 见世面/null 见义/null 见义勇为/null 见之/null 见之不取思之千里/null 见之于/null 见之实施/null 见习/null 见习医师/null 见习医生/null 见习员/null 见习生/null 见了/null 见事风生/null 见于/null 见亮/null 见人/null 见仁/null 见仁见智/null 见似/null 见光/null 见兔放鹰/null 见兔顾犬/null 见分晓/null 见利/null 见利忘义/null 见利思义/null 见到/null 见危之萌/null 见危受命/null 见危致命/null 见可而进知难而退/null 见噎废食/null 见图/null 见地/null 见外/null 见多不怪/null 见多识广/null 见天/null 见好/null 见好就收/null 见广/null 见底/null 见异/null 见异思迁/null 见弃/null 见得/null 见微知著/null 见德思齐/null 见怪/null 见怪不怪/null 见惯/null 见惯不惊/null 见惯司空/null 见所未见/null 见报/null 见招拆招/null 见效/null 见教/null 见新/null 见方/null 见景生情/null 见智/null 见智见仁/null 见机/null 见机而作/null 见机而行/null 见机行事/null 见死不救/null 见溺不救/null 见烈心喜/null 见爱/null 见物/null 见物不取失之千里/null 见物不见人/null 见状/null 见猎心喜/null 见着/null 见短/null 见礼/null 见神/null 见神见鬼/null 见票即付/null 见称/null 见笑/null 见笑大方/null 见红/null 见缝就钻/null 见缝插针/null 见罪/null 见者/null 见背/null 见色忘友/null 见血/null 见血封喉树/null 见表/null 见解/null 见访/null 见证/null 见证人/null 见识/null 见识浅/null 见说/null 见诸/null 见诸于/null 见诸报端/null 见诸行动/null 见谅/null 见貌辨色/null 见财起意/null 见贤不隐/null 见贤思齐/null 见轻/null 见过/null 见重/null 见钱眼开/null 见钱眼红/null 见长/null 见闻/null 见闻录/null 见闻有限/null 见难而上/null 见面/null 见面礼/null 见鞍思马/null 见风/null 见风使帆/null 见风使舵/null 见风是雨/null 见风转篷/null 见风转舵/null 见风驶舵/null 见马克思/null 见驾/null 见骥一毛/null 见鬼/null 见鬼去/null 观上/null 观世音/null 观世音菩萨/null 观众/null 观众席/null 观光/null 观光事业/null 观光区/null 观光客/null 观台/null 观后/null 观后感/null 观塘/null 观天/null 观客/null 观察/null 观察人士/null 观察仪器/null 观察力/null 观察员/null 观察哨/null 观察家/null 观察所/null 观察站/null 观察者/null 观形察色/null 观念/null 观念学/null 观念形态/null 观念更新/null 观感/null 观战/null 观护所/null 观掌/null 观摩/null 观摩会/null 观摩教学/null 观摩演出/null 观摹/null 观日/null 观星台/null 观景/null 观望/null 观机而动/null 观止/null 观测/null 观测卫星/null 观测员/null 观测所/null 观测站/null 观测者/null 观海/null 观涛/null 观潮派/null 观澜湖/null 观火/null 观点/null 观看/null 观看者/null 观瞻/null 观礼/null 观礼台/null 观者/null 观者云集/null 观者如云/null 观者如堵/null 观者如市/null 观者如织/null 观致/null 观色/null 观花/null 观花赏景/null 观落阴/null 观衅伺隙/null 观览/null 观说/null 观象/null 观象仪/null 观象台/null 观貌察色/null 观赏/null 观赏价值/null 观赏植物/null 观赏鱼/null 观过知仁/null 观通站/null 观音/null 观音乡/null 观音土/null 观音竹/null 观音菩萨/null 观风/null 规例/null 规划/null 规划人员/null 规划局/null 规划论/null 规则/null 规则化/null 规则性/null 规则性效应/null 规制/null 规劝/null 规勉/null 规圜矩方/null 规复/null 规定/null 规定了/null 规定价格/null 规定动作/null 规定性/null 规定者/null 规律/null 规律性/null 规念落后/null 规整/null 规条/null 规格/null 规格化/null 规模/null 规正/null 规派/null 规率/null 规矩/null 规矩准绳/null 规矩绳墨/null 规矩钩绳/null 规示/null 规程/null 规章/null 规章制度/null 规管/null 规约/null 规范/null 规范化/null 规范性/null 规范理论/null 规行矩上/null 规行矩步/null 规规矩矩/null 规言矩步/null 规诫/null 规诲/null 规谏/null 规费/null 规距仪/null 规退/null 规避/null 规那树/null 规重矩叠/null 觅取/null 觅句/null 觅宝/null 觅得/null 觅柳寻花/null 觅爱追欢/null 觅衣求食/null 觅食/null 觅食行为/null 视丹如绿/null 视为/null 视为畏途/null 视为知己/null 视之/null 视之不见听之不闻/null 视事/null 视人/null 视人如伤/null 视人如子/null 视作/null 视其/null 视准仪/null 视力/null 视力测定法/null 视力表/null 视力计/null 视区/null 视同/null 视同儿戏/null 视同己出/null 视同手足/null 视同秦越/null 视同若归/null 视同路人/null 视听/null 视听材料/null 视听觉/null 视哨/null 视唱/null 视图/null 视在功率/null 视场/null 视域/null 视塔/null 视如/null 视如土芥/null 视如寇仇/null 视如敝屣/null 视如敝履/null 视如粪土/null 视如草芥/null 视孔/null 视学/null 视察/null 视察员/null 视察工作/null 视导/null 视屏/null 视差/null 视微知着/null 视微知著/null 视情况而定/null 视感/null 视损伤/null 视景/null 视检/null 视死/null 视死如归/null 视死如生/null 视死如饴/null 视民如伤/null 视民如子/null 视点/null 视界/null 视盘/null 视盲/null 视神经/null 视神经乳头/null 视神经盘/null 视程/null 视空间系统/null 视窗/null 视窗加速器/null 视窗基准/null 视窗新技/null 视紫质/null 视线/null 视网膜/null 视而不见/null 视而弗见听而弗闻/null 视若儿戏/null 视若无睹/null 视若路人/null 视觉/null 视觉上/null 视觉加工技巧/null 视觉器官/null 视觉型/null 视角/null 视讯/null 视象/null 视距/null 视距仪/null 视野/null 视错觉/null 视镜/null 视阈/null 视险如夷/null 视险若夷/null 视障/null 视需要而定/null 视频/null 视频会议/null 视频点播/null 视频节目/null 觇标/null 览古/null 览胜/null 览表/null 觉世/null 觉出/null 觉到/null 觉察/null 觉得/null 觉悟/null 觉悟社/null 觉有/null 觉着/null 觉著/null 觉醒/null 觊觎/null 觊觎之心/null 觊觎之志/null 觌面/null 觐见/null 觑合/null 觑忽/null 觑机会/null 觑步/null 觑着眼/null 觑窥/null 觑糊/null 觑视/null 觑觑眼/null 角上/null 角伎/null 角位移/null 角儿/null 角分/null 角力/null 角加速度/null 角动量/null 角口/null 角回/null 角头/null 角妓/null 角子/null 角尺/null 角巾私第/null 角度/null 角度计/null 角弓/null 角弓反张/null 角形/null 角抵/null 角斗/null 角斗场/null 角斗士/null 角料/null 角暗里/null 角曲尺/null 角朊/null 角板/null 角果/null 角柱体/null 角标/null 角椅/null 角楼/null 角球/null 角砧/null 角票/null 角膜/null 角膜炎/null 角色/null 角色扮演游戏/null 角落/null 角蛋白/null 角规/null 角质/null 角质层/null 角质素/null 角逐/null 角速度/null 角钉/null 角钢/null 角铁/null 角锥/null 角门/null 角闪石/null 角雉/null 角频率/null 角马/null 角鸮/null 角黍/null 角龙/null 觖望/null 觜宿/null 觜蠵/null 觜觽/null 解下/null 解严/null 解乏/null 解书/null 解了/null 解交/null 解人/null 解付/null 解体/null 解作/null 解像/null 解元/null 解免/null 解入/null 解决/null 解决争端/null 解决办法/null 解决问题/null 解冻/null 解凝剂/null 解出/null 解剖/null 解剖学/null 解剖室/null 解剖者/null 解剖麻雀/null 解劝/null 解包/null 解压/null 解压缩/null 解去/null 解发佯狂/null 解吸/null 解和/null 解嘲/null 解囊/null 解囊相助/null 解困/null 解围/null 解场/null 解密/null 解密码/null 解寒/null 解对/null 解封/null 解带/null 解库/null 解廌/null 解开/null 解往/null 解得/null 解忧/null 解恨/null 解悟/null 解惑/null 解愁/null 解手/null 解扣/null 解放/null 解放事业/null 解放以来/null 解放军/null 解放军报/null 解放初期/null 解放前/null 解放区/null 解放后/null 解放巴勒斯坦人民阵线/null 解放后/null 解放思想/null 解放战争/null 解放日/null 解放日报/null 解放生产力/null 解放组织/null 解放者/null 解放运动/null 解放黑奴宣言/null 解救/null 解教/null 解散/null 解数/null 解文/null 解期/null 解构/null 解析/null 解析几何/null 解析几何学/null 解析函数/null 解析函数论/null 解析度/null 解析性/null 解析者/null 解梦/null 解槽/null 解款/null 解毒/null 解毒剂/null 解毒药/null 解民倒悬/null 解气/null 解池/null 解法/null 解深密经/null 解渴/null 解热/null 解理/null 解理方向/null 解理面/null 解甲/null 解甲休兵/null 解甲休士/null 解甲倒戈/null 解甲归田/null 解甲投戈/null 解甲释兵/null 解疑/null 解痉剂/null 解痉药/null 解痛/null 解码/null 解码器/null 解禁/null 解离/null 解答/null 解答者/null 解粮/null 解约/null 解纷/null 解组/null 解缆/null 解缚/null 解者/null 解职/null 解聘/null 解脱/null 解药/null 解衣/null 解衣卸甲/null 解表/null 解解/null 解译/null 解说/null 解说员/null 解说词/null 解读/null 解调/null 解调器/null 解谜/null 解运/null 解送/null 解酒/null 解酲/null 解酸药/null 解释/null 解释器/null 解释性/null 解释执行/null 解释者/null 解铃系铃/null 解铃还需系铃人/null 解铃须用系铃人/null 解锁/null 解闷/null 解除/null 解除武装/null 解难/null 解集/null 解雇/null 解雇期/null 解颐/null 解题/null 解颜/null 解饱/null 解饿/null 解馋/null 解骖推食/null 觥筹交错/null 觥觥/null 触事面墙/null 触击/null 触到/null 触动/null 触即/null 触压/null 触及/null 触发/null 触发器/null 触发引信/null 触发清单/null 触地/null 触地得分/null 触头/null 触媒/null 触媒作用/null 触屏/null 触底/null 触怒/null 触感/null 触手/null 触手可及/null 触技曲/null 触控式/null 触控式萤幕/null 触控板/null 触控点/null 触控萤幕/null 触摸/null 触摸屏/null 触摸屏幕/null 触摸者/null 触斗蛮争/null 触景/null 触景伤情/null 触景生怀/null 触景生情/null 触机/null 触机落阱/null 触杀/null 触杀剂/null 触毛/null 触法/null 触点/null 触犯/null 触电/null 触痛/null 触目/null 触目伤心/null 触目如故/null 触目恸心/null 触目惊心/null 触目成诵/null 触目皆是/null 触目警心/null 触目骇心/null 触知/null 触碰/null 触礁/null 触禁犯忌/null 触类旁通/null 触类而长/null 触线/null 触网/null 触肢/null 触觉/null 触角/null 触诊/null 触酶/null 触雷/null 触霉头/null 触面/null 触须/null 觱栗/null 觱篥/null 觳觫伏罪/null 言三语四/null 言下/null 言下之意/null 言不及义/null 言不及私/null 言不尽意/null 言不由中/null 言不由衷/null 言不诡随/null 言不谙典/null 言不践行/null 言不逮意/null 言不顾行/null 言中/null 言为心声/null 言之/null 言之不尽/null 言之不文行之不远/null 言之不渝/null 言之不预/null 言之凿凿/null 言之成理/null 言之无文行之不远/null 言之无文行而不远/null 言之无物/null 言之有物/null 言之有理/null 言之谆谆听之藐藐/null 言之过甚/null 言乱/null 言事若神/null 言人人殊/null 言从计纳/null 言从计行/null 言传/null 言传身教/null 言兵事疏/null 言出/null 言出患入/null 言出法随/null 言十妄九/null 言及/null 言听行从/null 言听计从/null 言听计用/null 言听计行/null 言和/null 言喻/null 言声/null 言外/null 言外之意/null 言多/null 言多失实/null 言多必失/null 言多语失/null 言字旁/null 言官/null 言尽指远/null 言尽旨远/null 言归于好/null 言归和好/null 言归正传/null 言微旨远/null 言必信/null 言必信行必果/null 言必有中/null 言必有据/null 言情/null 言情小说/null 言教/null 言教不如身教/null 言无不尽/null 言无二价/null 言明/null 言来语去/null 言犹在耳/null 言犹未尽/null 言狂意妄/null 言理学/null 言称/null 言笑嘻怡/null 言笑晏晏/null 言笑自如/null 言符其实/null 言简意明/null 言简意赅/null 言类悬河/null 言者/null 言者无意/null 言者无罪/null 言者无罪闻者足戒/null 言而不信/null 言而无信/null 言而无文行之不远/null 言而有信/null 言若悬河/null 言行/null 言行一致/null 言行不一/null 言行若一/null 言行计从/null 言表/null 言论/null 言论机关/null 言论界/null 言论自由/null 言论集/null 言词/null 言语/null 言语上/null 言语失常症/null 言语缺陷/null 言说/null 言谈/null 言谈举止/null 言谈林薮/null 言谈话语/null 言责/null 言赅/null 言路/null 言轻/null 言轻行浊/null 言辞/null 言过其实/null 言过其词/null 言近旨远/null 言道/null 言重/null 言颠语倒/null 言高语低/null 訾议/null 詈词/null 詈骂/null 詧雅县/null 詹天佑/null 詹姆斯/null 詹姆斯・乔伊斯/null 詹姆斯・庞德/null 詹姆斯・戈士林/null 詹姆斯・戈斯林/null 詹姆斯・高斯林/null 詹森/null 詹江布尔/null 誉上/null 誉为/null 誉寒天下/null 誉满全球/null 誉满天下/null 誉满寰中/null 誉过其实/null 誊书/null 誊写/null 誊写版/null 誊写钢版/null 誊印/null 誊录/null 誊本/null 誊清/null 誊稿/null 誓不/null 誓不两立/null 誓不两词/null 誓不反悔/null 誓不罢休/null 誓书/null 誓同生死/null 誓山盟海/null 誓师/null 誓师大会/null 誓必/null 誓愿/null 誓无二心/null 誓无二志/null 誓死/null 誓死不二/null 誓死不从/null 誓死不屈/null 誓死不降/null 誓海盟山/null 誓由/null 誓约/null 誓绝/null 誓者/null 誓言/null 誓词/null 誙誙/null 謇谔之风/null 謇谔自负/null 譁然/null 警世/null 警亭/null 警具/null 警力/null 警务/null 警匪/null 警区/null 警卫/null 警卫勤务/null 警卫员/null 警卫室/null 警句/null 警号/null 警告/null 警告者/null 警员/null 警备/null 警备勤务/null 警备区/null 警备司令部/null 警备条令/null 警备部队/null 警官/null 警察/null 警察们/null 警察制度/null 警察厅/null 警察史/null 警察局/null 警察署/null 警察部队/null 警局/null 警岗/null 警徽/null 警心涤虑/null 警悟/null 警惕/null 警惕性/null 警戒/null 警戒哨/null 警戒室/null 警戒线/null 警所/null 警护/null 警报/null 警报器/null 警报球/null 警探/null 警政署/null 警方/null 警服/null 警标/null 警棍/null 警棒/null 警民/null 警民冲突/null 警灯/null 警犬/null 警界/null 警示/null 警种/null 警笛/null 警署/null 警衔/null 警觉/null 警言/null 警讯/null 警诫/null 警语/null 警车/null 警辟/null 警醒/null 警钟/null 警钟声/null 警钟长鸣/null 警铃/null 警长/null 譬喻/null 譬如/null 计上/null 计上心头/null 计上心来/null 计不旋踵/null 计为/null 计付/null 计件/null 计件工资/null 计价/null 计价器/null 计会/null 计入/null 计出万全/null 计分/null 计分卡/null 计分环/null 计划/null 计划书/null 计划体制/null 计划内/null 计划司/null 计划商品经济/null 计划外/null 计划委员会/null 计划性/null 计划指标/null 计划生育/null 计划目标/null 计划等/null 计划经济/null 计划者/null 计划表/null 计功受爵/null 计功受赏/null 计功行赏/null 计功补过/null 计劳纳封/null 计发/null 计取/null 计在/null 计委/null 计将安出/null 计尘器/null 计尽/null 计尽力穷/null 计工/null 计征/null 计息/null 计提/null 计收/null 计数/null 计数器/null 计数法/null 计数率仪/null 计数管/null 计数者/null 计无所出/null 计无所施/null 计日奏功/null 计日程功/null 计日而俟/null 计日而待/null 计时/null 计时员/null 计时器/null 计时工资/null 计时收费/null 计时比赛/null 计时法/null 计时测验/null 计时赛/null 计有/null 计步器/null 计深虑远/null 计生/null 计画/null 计票/null 计秒/null 计秒表/null 计程/null 计程仪/null 计程器/null 计程表/null 计程车/null 计税/null 计穷/null 计穷力尽/null 计穷力屈/null 计穷力极/null 计穷力竭/null 计穷势蹙/null 计穷途拙/null 计策/null 计算/null 计算中心/null 计算器/null 计算尺/null 计算所/null 计算技术/null 计算数学/null 计算机/null 计算机制图/null 计算机动画/null 计算机工业/null 计算机断层/null 计算机模式/null 计算机模拟/null 计算机比喻/null 计算机科学/null 计算机科学家/null 计算机网络/null 计算机辅助设计/null 计算机集成制造/null 计算站/null 计算者/null 计算计/null 计经委/null 计行虑义/null 计表/null 计议/null 计谋/null 计费/null 计较/null 计过/null 计过自讼/null 计速/null 计都/null 计酬/null 计量/null 计量制/null 计量单位/null 计量器/null 计量学/null 计量局/null 计量棒/null 计量法/null 计量竿/null 计量经济学/null 计量者/null 计销/null 订下/null 订为/null 订书机/null 订书针/null 订书钉/null 订于/null 订交/null 订亲/null 订价/null 订位/null 订作/null 订做/null 订出/null 订制/null 订单/null 订单号/null 订合同/null 订契/null 订婚/null 订婚礼/null 订定/null 订座/null 订户/null 订房/null 订报/null 订明/null 订有/null 订本/null 订正/null 订票/null 订票中心/null 订立/null 订约/null 订货/null 订货会/null 订货单/null 订购/null 订购者/null 订费/null 订过婚/null 订金/null 订阅/null 订餐/null 讣告/null 讣文/null 讣闻/null 认不认识/null 认为/null 认为是/null 认了/null 认亲/null 认人/null 认人儿/null 认作/null 认值/null 认做/null 认养/null 认准/null 认出/null 认可/null 认可者/null 认同/null 认命/null 认头/null 认字/null 认定/null 认尸/null 认帐/null 认得/null 认得出/null 认捐/null 认明/null 认死扣儿/null 认死理/null 认死理儿/null 认清/null 认理/null 认生/null 认真/null 认真吸取/null 认真思考/null 认真负责/null 认知/null 认知失调/null 认知神经心理学/null 认缴/null 认罚/null 认罪/null 认罪服罪/null 认股/null 认脚/null 认认/null 认许/null 认证/null 认识/null 认识不能/null 认识到/null 认识力/null 认识水平/null 认识论/null 认账/null 认购/null 认贼为子/null 认贼作父/null 认赔/null 认输/null 认错/null 认领/null 讥刺/null 讥嘲/null 讥笑/null 讥讽/null 讥讽语/null 讥评/null 讥诮/null 讨乞/null 讨亲/null 讨人/null 讨人厌/null 讨人喜欢/null 讨人喜爱/null 讨人嫌/null 讨人欢心/null 讨价/null 讨价还价/null 讨伐/null 讨便宜/null 讨俏/null 讨保/null 讨债/null 讨厌/null 讨厌鬼/null 讨取/null 讨吃/null 讨好/null 讨好卖乖/null 讨嫌/null 讨巧/null 讨帐/null 讨平/null 讨底/null 讨底儿/null 讨恶剪暴/null 讨情/null 讨扰/null 讨教/null 讨是寻非/null 讨生活/null 讨究/null 讨米/null 讨论/null 讨论会/null 讨论决定/null 讨论区/null 讨论家/null 讨论的议题/null 讨论者/null 讨论课/null 讨论通过/null 讨账/null 讨赏/null 讨还/null 讨逆除暴/null 讨钱/null 讨饭/null 讨饶/null 让与/null 让与人/null 让与物/null 让予/null 让事实说话/null 让人/null 让人家去说/null 让人羡慕/null 让他/null 让价/null 让伤心/null 让位/null 让你/null 让先/null 让出/null 让利/null 让受/null 让售/null 让坐/null 让座/null 让开/null 让枣推梨/null 让步/null 让步地/null 让烟/null 让球/null 让礼一寸得礼一尺/null 让给/null 让胡路/null 让胡路区/null 让贤/null 让贤与能/null 让走/null 让路/null 讪笑/null 讪脸/null 讪讪/null 讫号/null 讫站/null 讫证/null 训人/null 训令/null 训兵秣马/null 训兽术/null 训勉/null 训喻/null 训导/null 训导职务/null 训导长/null 训戒/null 训斥/null 训条/null 训民正音/null 训示/null 训练/null 训练任务/null 训练保障/null 训练制度/null 训练大纲/null 训练师/null 训练有素/null 训练法/null 训练班/null 训练者/null 训练营/null 训练过/null 训育/null 训诂/null 训诂学/null 训词/null 训话/null 训诫/null 训诫者/null 训语/null 训诲/null 训谕/null 训迪/null 训马师/null 议不反顾/null 议事/null 议事单/null 议事日程/null 议事槌/null 议付/null 议价/null 议会/null 议会党团/null 议会制/null 议会斗争/null 议决/null 议办/null 议员/null 议和/null 议和团/null 议多/null 议好/null 议定/null 议定书/null 议席/null 议政/null 议案/null 议程/null 议者/null 议而不决/null 议论/null 议论文/null 议论纷纷/null 议论风生/null 议请/null 议购/null 议长/null 议院/null 议题/null 讯中/null 讯台/null 讯号/null 讯号炮/null 讯实/null 讯息/null 讯息传递中介/null 讯息原/null 讯框中继/null 讯问/null 讯问者/null 记上/null 记下/null 记不住/null 记不起/null 记为/null 记事/null 记事儿/null 记事册/null 记事本/null 记事簿/null 记于/null 记人/null 记仇/null 记传/null 记住/null 记作/null 记入/null 记出/null 记分/null 记分册/null 记分卡/null 记分板/null 记分牌/null 记分簿/null 记功/null 记取/null 记叙/null 记叙文/null 记号/null 记号法/null 记号笔/null 记名/null 记在/null 记大过/null 记好/null 记实/null 记工/null 记工员/null 记帐/null 记帐员/null 记录/null 记录员/null 记录器/null 记录在案/null 记录新闻/null 记录本/null 记录片/null 记录片儿/null 记得/null 记忆/null 记忆体/null 记忆力/null 记忆器/null 记忆广度/null 记忆犹新/null 记忆电路/null 记念/null 记念品/null 记性/null 记性好/null 记恨/null 记挂/null 记日记/null 记时/null 记时器/null 记时计/null 记有/null 记法/null 记牢/null 记的/null 记着/null 记者/null 记者会/null 记者报道/null 记者招待会/null 记者无国界/null 记者来信/null 记者站/null 记著/null 记要/null 记谱/null 记谱法/null 记账/null 记起/null 记载/null 记载了/null 记过/null 记述/null 记错/null 讲上/null 讲不通/null 讲个/null 讲义/null 讲习/null 讲习会/null 讲习所/null 讲习班/null 讲书/null 讲了/null 讲人/null 讲价/null 讲价钱/null 讲出/null 讲出来/null 讲到/null 讲卫生/null 讲去/null 讲古论今/null 讲台/null 讲史/null 讲吧/null 讲和/null 讲唱/null 讲唱文学/null 讲坛/null 讲坛社会主义/null 讲堂/null 讲学/null 讲完/null 讲实话/null 讲师/null 讲席/null 讲座/null 讲得/null 讲情/null 讲成/null 讲授/null 讲授提纲/null 讲排场/null 讲援提纲/null 讲文明/null 讲时/null 讲明/null 讲机/null 讲来/null 讲桌/null 讲求/null 讲求实效/null 讲法/null 讲清/null 讲清楚/null 讲演/null 讲演会/null 讲演者/null 讲理/null 讲盘儿/null 讲看/null 讲着/null 讲礼貌/null 讲稿/null 讲究/null 讲究卫生/null 讲笑/null 讲筵/null 讲经说法/null 讲给/null 讲解/null 讲解员/null 讲解者/null 讲讲/null 讲论/null 讲评/null 讲评官/null 讲词/null 讲话/null 讲话著/null 讲读/null 讲课/null 讲课后/null 讲谈/null 讲起/null 讲辞/null 讲过/null 讲述/null 讲述者/null 讲道/null 讲道义/null 讲道德/null 讲道理/null 讲闲话/null 讲题/null 讳名/null 讳恶不悛/null 讳疾忌医/null 讳称/null 讳莫如深/null 讳言/null 讳败推过/null 讴吟/null 讴歌/null 讶异/null 讷河/null 讷涩/null 讷讷/null 许下/null 许下愿心/null 许久/null 许亲/null 许仙/null 许仲琳/null 许信良/null 许可/null 许可协议/null 许可证/null 许和/null 许地山/null 许多/null 许多人/null 许多工作/null 许多年/null 许多方面/null 许多水/null 许婚/null 许嫁/null 许字/null 许廑父/null 许愿/null 许慎/null 许旺细胞/null 许昌/null 许昌地区/null 许是/null 许海峰/null 许给/null 许许多多/null 许诺/null 许配/null 讹人/null 讹传/null 讹夺/null 讹字/null 讹脱/null 讹舛/null 讹言惑众/null 讹言谎语/null 讹诈/null 讹误/null 讹谬/null 讹赖/null 论上/null 论丛/null 论个/null 论之/null 论争/null 论事/null 论人/null 论今说古/null 论从/null 论件/null 论价/null 论出/null 论列/null 论列是非/null 论功/null 论功封赏/null 论功行封/null 论功行赏/null 论及/null 论史/null 论坛/null 论堆/null 论处/null 论大/null 论定/null 论战/null 论持久战/null 论据/null 论敌/null 论文/null 论文索引/null 论文集/null 论斤估两/null 论断/null 论曰/null 论正/null 论法/null 论点/null 论理/null 论理学/null 论短/null 论称/null 论罪/null 论者/null 论著/null 论议风生/null 论证/null 论证会/null 论证法/null 论证过程/null 论语/null 论说/null 论说文/null 论谁/null 论调/null 论谈/null 论资排辈/null 论辩/null 论述/null 论道经邦/null 论长道短/null 论难/null 论集/null 论题/null 论黄数白/null 论黄数黑/null 讼争/null 讼事/null 讼师/null 讼棍/null 讼者/null 讼词/null 讽一劝百/null 讽今/null 讽刺/null 讽刺剧/null 讽刺家/null 讽刺性/null 讽刺文/null 讽刺文学/null 讽刺画/null 讽刺诗/null 讽刺话/null 讽剌/null 讽古/null 讽唯/null 讽喻/null 讽语/null 设下/null 设为/null 设于/null 设以/null 设伏/null 设使/null 设关/null 设卡/null 设厂/null 设圈套/null 设在/null 设坎/null 设埋伏/null 设备/null 设备厂/null 设备普查/null 设备管理/null 设定/null 设定区/null 设宴/null 设局/null 设岗/null 设帐/null 设张举措/null 设想/null 设或/null 设拉子/null 设摊/null 设施/null 设有/null 设来/null 设法/null 设法者/null 设点/null 设立/null 设置/null 设置障碍/null 设色/null 设若/null 设营/null 设言托意/null 设计/null 设计员/null 设计图/null 设计家/null 设计师/null 设计所/null 设计机构/null 设计理论/null 设计程序/null 设计程式/null 设计者/null 设计规范/null 设计说明/null 设计院/null 设路障/null 设身处地/null 设防/null 设限/null 设陷井/null 设题/null 访亲/null 访亲问友/null 访人/null 访华/null 访华团/null 访华报告/null 访友/null 访古/null 访台/null 访员/null 访客/null 访寻/null 访师求学/null 访录/null 访德/null 访日/null 访朝/null 访查/null 访求/null 访法/null 访港/null 访美/null 访者/null 访苏/null 访英/null 访谈/null 访贫问苦/null 访问/null 访问团/null 访问学者/null 访问方式/null 访问期间/null 访问演出/null 访问者/null 访问记/null 访问量/null 诀别/null 诀窍/null 诀要/null 证书/null 证交会/null 证交所/null 证人/null 证人席/null 证件/null 证券/null 证券交易所/null 证券代销/null 证券公司/null 证券化率/null 证券商/null 证券委/null 证券委员会/null 证券市场/null 证券柜台买卖中心/null 证券经纪人/null 证券经营/null 证卷/null 证卷交易所/null 证卷市场/null 证婚/null 证婚人/null 证实/null 证实礼/null 证据/null 证据确凿/null 证明/null 证明书/null 证明了/null 证明人/null 证明力/null 证明完毕/null 证明文件/null 证明是/null 证明者/null 证照/null 证物/null 证监会/null 证章/null 证给/null 证见/null 证言/null 证词/null 证验/null 诃叱/null 诃子/null 诃斥/null 评为/null 评书/null 评事/null 评介/null 评价/null 评价人/null 评价分类/null 评价者/null 评价高/null 评优/null 评传/null 评估/null 评估器/null 评出/null 评分/null 评分数/null 评判/null 评判人/null 评判员/null 评剧/null 评功/null 评头品足/null 评头论足/null 评奖/null 评委/null 评委会/null 评定/null 评审/null 评审员/null 评审团/null 评审团特别奖/null 评工/null 评弹/null 评戏/null 评断/null 评析/null 评核/null 评模/null 评比/null 评法/null 评注/null 评测/null 评点/null 评理/null 评章/null 评等/null 评级/null 评聘/null 评脉/null 评薪/null 评解/null 评议/null 评议会/null 评议员/null 评记/null 评论/null 评论员/null 评论员文章/null 评论家/null 评论文/null 评话/null 评语/null 评说/null 评述/null 评选/null 评选活动/null 评量/null 评鉴/null 评阅/null 评骘/null 诅咒/null 识丁/null 识别/null 识别卡/null 识别号/null 识别码/null 识到/null 识力/null 识图/null 识多/null 识多才广/null 识大体/null 识字/null 识字率/null 识度/null 识形/null 识得/null 识微见几/null 识才/null 识才尊贤/null 识文断字/null 识文谈字/null 识时务/null 识时务者/null 识时务者为俊杰/null 识时达务/null 识时达变/null 识时通变/null 识相/null 识破/null 识破机关/null 识礼知书/null 识羞/null 识荆/null 识荆恨晚/null 识见/null 识记/null 识货/null 识趣/null 识透/null 识途老马/null 诈冒/null 诈取/null 诈取者/null 诈取豪夺/null 诈哑佯聋/null 诈唬/null 诈婚/null 诈尸/null 诈晴/null 诈术/null 诈欺/null 诈欺者/null 诈死/null 诈病/null 诈称/null 诈语/null 诈谋奇计/null 诈败佯输/null 诈降/null 诈领/null 诈骗/null 诈骗犯/null 诈骗罪/null 诈骗者/null 诉不尽/null 诉之于/null 诉人/null 诉冤/null 诉愿/null 诉愿人/null 诉求/null 诉状/null 诉苦/null 诉论/null 诉讼/null 诉讼中/null 诉讼人/null 诉讼代理人/null 诉讼权/null 诉讼法/null 诉说/null 诉诸/null 诉诸于/null 诉诸公论/null 诉诸武力/null 诉述/null 诊室/null 诊察/null 诊心之论/null 诊所/null 诊断/null 诊断书/null 诊治/null 诊疗/null 诊疗所/null 诊病/null 诊脉/null 诊视/null 诊费/null 诋毁/null 词不达意/null 词严义密/null 词严义正/null 词中/null 词中选字/null 词义/null 词书/null 词人/null 词人墨客/null 词令/null 词优效应/null 词位/null 词余/null 词作/null 词儿/null 词典/null 词化/null 词华典瞻/null 词句/null 词头/null 词学/null 词尾/null 词干/null 词干启动/null 词序/null 词库/null 词形/null 词律/null 词态/null 词性/null 词意/null 词文/null 词族/null 词无枝叶/null 词曲/null 词条/null 词根/null 词汇/null 词汇分解/null 词汇判断/null 词汇判断任务/null 词汇判断作业/null 词汇判断法/null 词汇学/null 词汇表/null 词汇通路/null 词法/null 词派/null 词海/null 词清讼简/null 词源/null 词牌/null 词目/null 词相似效应/null 词穷理尽/null 词穷理屈/null 词穷理绝/null 词章/null 词类/null 词素/null 词素结构/null 词素通达模型/null 词约指明/null 词组/null 词缀/null 词缀剥除/null 词翰/null 词藻/null 词表/null 词让/null 词讼/null 词讼费/null 词话/null 词语/null 词语汇/null 词调/null 词谱/null 词赋/null 词跟语/null 词选/null 词通达模型/null 词锋/null 词长效应/null 词集/null 词韵/null 词项逻辑/null 词频/null 词频效应/null 词首/null 诎寸伸尺/null 诎寸信尺/null 诏书/null 诏令/null 诏安/null 诏旨/null 诏示/null 诏谕/null 译丛/null 译为/null 译写/null 译出/null 译制/null 译名/null 译员/null 译审/null 译意/null 译意风/null 译成/null 译文/null 译文集/null 译本/null 译林/null 译注/null 译电/null 译电员/null 译码/null 译码器/null 译笔/null 译者/null 译自/null 译著/null 译解/null 译词/null 译述/null 译错/null 译音/null 诒厥之谋/null 诒厥孙谋/null 诓言诈语/null 诓骗/null 试一试/null 试之/null 试乘/null 试产/null 试人/null 试以/null 试件/null 试作/null 试做/null 试养/null 试刊/null 试制/null 试制品/null 试剂/null 试办/null 试卷/null 试吃/null 试听/null 试听带/null 试图/null 试场/null 试坛/null 试婚/null 试客/null 试射/null 试将/null 试尝/null 试工/null 试征/null 试想/null 试戴/null 试手/null 试手儿/null 试探/null 试探性/null 试探者/null 试播/null 试映/null 试杯/null 试析/null 试样/null 试水器/null 试液/null 试演/null 试点/null 试点单位/null 试炼/null 试爆/null 试生产/null 试用/null 试用品/null 试用期/null 试电/null 试电笔/null 试看/null 试着/null 试种/null 试穿/null 试算/null 试算表/null 试管/null 试管受孕/null 试管婴儿/null 试纸/null 试编/null 试航/null 试药/null 试行/null 试衣/null 试表/null 试论/null 试试/null 试试看/null 试读/null 试车/null 试过/null 试运行/null 试述/null 试金/null 试金石/null 试金者/null 试销/null 试销品/null 试镜/null 试镜头/null 试问/null 试院/null 试题/null 试飞/null 试飞员/null 试饮/null 试验/null 试验中/null 试验区/null 试验场/null 试验性/null 试验报告/null 试验田/null 试验者/null 试验装置/null 试验设备/null 试验间/null 诖误/null 诗中/null 诗中有画/null 诗书/null 诗书礼乐/null 诗云/null 诗云子曰/null 诗人/null 诗仙/null 诗以言志/null 诗会/null 诗体/null 诗余/null 诗作/null 诗兴/null 诗剧/null 诗友/null 诗句/null 诗史/null 诗名/null 诗品/null 诗圣/null 诗坛/null 诗字/null 诗学/null 诗律/null 诗情/null 诗情画意/null 诗意/null 诗才/null 诗抄/null 诗文/null 诗曰/null 诗朋酒侣/null 诗朋酒友/null 诗歌/null 诗歌史/null 诗歌评论/null 诗法/null 诗派/null 诗画/null 诗礼/null 诗礼人家/null 诗礼传家/null 诗社/null 诗稿/null 诗章/null 诗篇/null 诗经/null 诗肠鼓吹/null 诗行/null 诗论/null 诗词/null 诗词歌赋/null 诗话/null 诗调/null 诗谜/null 诗赋/null 诗趣/null 诗选/null 诗酒朋侪/null 诗集/null 诗韵/null 诗韵学/null 诗页/null 诗风/null 诘屈/null 诘屈聱牙/null 诘问/null 诘难/null 诙谐/null 诙谐曲/null 诚信/null 诚如/null 诚实/null 诚实可靠/null 诚属/null 诚征/null 诚心/null 诚心敬意/null 诚心正意/null 诚心诚意/null 诚恐/null 诚恐诚惶/null 诚恳/null 诚恳待人/null 诚惶诚恐/null 诚惶诚惧/null 诚意/null 诚招/null 诚挚/null 诚有/null 诚服/null 诚朴/null 诚然/null 诚笃/null 诚至/null 诚诚恳恳/null 诛一警百/null 诛不避贵/null 诛凶殄逆/null 诛凶讨逆/null 诛尽杀绝/null 诛弑/null 诛心之论/null 诛戮/null 诛暴讨逆/null 诛杀/null 诛求/null 诛求无厌/null 诛求无已/null 诛流/null 诛灭/null 诛锄/null 诛锄异己/null 诛除/null 话不投机/null 话不投机半句多/null 话不虚传/null 话中/null 话中带刺/null 话中有刺/null 话中有话/null 话人/null 话使/null 话儿/null 话别/null 话到嘴边/null 话到嘴边留三分/null 话剧/null 话务/null 话务员/null 话匣/null 话匣子/null 话卡/null 话又说回来/null 话口儿/null 话号/null 话后/null 话外音/null 话多/null 话多不甜/null 话头/null 话少/null 话把/null 话把儿/null 话接/null 话旧/null 话是/null 话本/null 话机/null 话来/null 话柄/null 话梅/null 话碴/null 话筒/null 话簿/null 话者/null 话茬/null 话茬儿/null 话虽如此/null 话语/null 话说/null 话说回来/null 话费/null 话过/null 话里/null 话里套话/null 话里有话/null 话锋/null 话锋一转/null 话间/null 话音/null 话音刚落/null 话音未落/null 话题/null 话风/null 诞妄不经/null 诞生/null 诞生地/null 诞生石/null 诞育/null 诞辰/null 诟病/null 诟骂/null 诠次/null 诠注/null 诠解/null 诠释/null 诠释学/null 诡变多端/null 诡异/null 诡形怪状/null 诡怪/null 诡状殊形/null 诡秘/null 诡称/null 诡衔窃辔/null 诡计/null 诡计多端/null 诡论/null 诡诈/null 诡谋/null 诡谲/null 诡谲怪诞/null 诡谲无行/null 诡辞/null 诡辩/null 诡辩家/null 诡辩术/null 诡辩法/null 诡辩派/null 诡辩者/null 诡辩论/null 询事考言/null 询于刍荛/null 询价/null 询根问底/null 询盘/null 询者/null 询问/null 询问者/null 诣谒/null 诣门/null 诣阙/null 诤人/null 诤友/null 诤臣/null 诤言/null 诤讼/null 诤谏/null 该书/null 该亚/null 该人/null 该价/null 该做/null 该做的/null 该到/null 该区/null 该博/null 该厂/null 该反对/null 该受/null 该叹/null 该吃/null 该咒/null 该咒诅/null 该嘲笑/null 该团/null 该国/null 该地/null 该城/null 该埠/null 该处罚/null 该季/null 该将/null 该局/null 该州/null 该市/null 该帐/null 该年/null 该应/null 该当/null 该当何罪/null 该得/null 该户/null 该所/null 该打/null 该报/null 该接受/null 该改/null 该教/null 该数/null 该文/null 该是/null 该月/null 该有/null 该期/null 该死/null 该没收/null 该片/null 该省/null 该着/null 该社/null 该种/null 该税/null 该类/null 该给/null 该绝/null 该罚/null 该著/null 该记住/null 该责备/null 该过/null 该院/null 该隐/null 该项/null 详列/null 详加/null 详叙/null 详和/null 详图/null 详备/null 详实/null 详审/null 详密/null 详察/null 详尽/null 详尽无遗/null 详录/null 详悉/null 详情/null 详明/null 详查/null 详梦/null 详瑞/null 详略/null 详知/null 详细/null 详细信息/null 详细情况/null 详细资料/null 详虑/null 详见/null 详解/null 详讲/null 详论/null 详详细细/null 详说/null 详读/null 详谈/null 详赡/null 详载/null 详述/null 详阅/null 诧异/null 诨号/null 诨名/null 诫命/null 诫律/null 诫者/null 诬告/null 诬告陷害/null 诬害/null 诬控/null 诬枉/null 诬栽/null 诬称/null 诬罔/null 诬蔑/null 诬赖/null 诬陷/null 语不惊人/null 语不投机/null 语不择人/null 语义/null 语义上/null 语义分析/null 语义分类/null 语义哲学/null 语义学/null 语义空间/null 语云/null 语体/null 语体文/null 语典/null 语冰/null 语助词/null 语势/null 语原论/null 语句/null 语四言三/null 语型/null 语域/null 语塞/null 语境/null 语境依赖性/null 语境效应/null 语声/null 语失/null 语妙绝伦/null 语委/null 语尾/null 语序/null 语式/null 语录/null 语形学/null 语形论/null 语态/null 语惊四座/null 语意/null 语意学/null 语意性/null 语感/null 语支/null 语文/null 语文学/null 语文老师/null 语料/null 语料库/null 语族/null 语无伦次/null 语标/null 语根/null 语气/null 语气助词/null 语气词/null 语汇/null 语法/null 语法书/null 语法学/null 语法术语/null 语法树/null 语法结构/null 语源/null 语源学/null 语焉不详/null 语用学/null 语用论/null 语画/null 语病/null 语种/null 语笑喧呼/null 语笑喧哗/null 语笑喧阗/null 语系/null 语素/null 语聋症/null 语腔/null 语言/null 语言上/null 语言产生/null 语言匮乏/null 语言学/null 语言学家/null 语言实验室/null 语言文字/null 语言无味/null 语言缺陷/null 语言能力/null 语言艺术/null 语言规范化/null 语言誓约/null 语言训练/null 语言障碍/null 语词/null 语词定义/null 语译/null 语调/null 语调强/null 语里/null 语重心长/null 语锋/null 语镜/null 语音/null 语音信号/null 语音信箱/null 语音合成/null 语音失语症/null 语音学/null 语音意识/null 语音技巧/null 语音指令/null 语音识别/null 语音通讯通道/null 语风/null 误上贼船/null 误事/null 误人/null 误人子弟/null 误会/null 误传/null 误伤/null 误作/null 误信/null 误入/null 误入歧途/null 误入歧途效应/null 误写/null 误判/null 误判案/null 误区/null 误取/null 误叫/null 误听/null 误国/null 误国害民/null 误国殃民/null 误国殄民/null 误场/null 误失/null 误字/null 误字率/null 误导/null 误将/null 误工/null 误工费/null 误差/null 误引用/null 误征/null 误打/null 误打误撞/null 误报/null 误掉/null 误撞/null 误收/null 误时/null 误期/null 误机/null 误杀/null 误派/null 误点/null 误犯/null 误用/null 误看/null 误码/null 误码率/null 误称/null 误算/null 误纳/null 误给/null 误解/null 误认/null 误认为/null 误记/null 误译/null 误读/null 误车/null 误过/null 误述/null 误送/null 误闯/null 误食/null 误餐/null 诰命/null 诱之/null 诱人/null 诱使/null 诱供/null 诱入/null 诱出/null 诱动/null 诱发/null 诱变/null 诱变剂/null 诱哄/null 诱因/null 诱奸/null 诱导/null 诱导分娩/null 诱导剂/null 诱导性/null 诱导误导/null 诱引/null 诱惑/null 诱惑人/null 诱惑力/null 诱惑物/null 诱惑者/null 诱拐/null 诱拐者/null 诱捕/null 诱掖/null 诱掖后进/null 诱敌/null 诱敌深入/null 诱杀/null 诱歼/null 诱物/null 诱胁/null 诱致/null 诱虫灯/null 诱逼/null 诱降/null 诱陷/null 诱饵/null 诱骗/null 诱骗物/null 诲人/null 诲人不倦/null 诲尔谆谆听我藐藐/null 诲师/null 诲淫/null 诲淫性/null 诲淫诲盗/null 诲而不倦/null 诳玩/null 诳语/null 诳骗/null 说一不二/null 说一是一/null 说三道四/null 说上/null 说上几句/null 说不/null 说不上/null 说不准/null 说不出/null 说不出话来/null 说不完/null 说不定/null 说不尽/null 说不得/null 说不来/null 说不清/null 说不过去/null 说不通/null 说东谈西/null 说东道西/null 说中/null 说书/null 说了算/null 说二是二/null 说亲/null 说人情/null 说今/null 说今道古/null 说假话/null 说几句/null 说出/null 说到做到/null 说到底/null 说动/null 说古/null 说古谈今/null 说合/null 说和/null 说咸道淡/null 说唱/null 说唱文学/null 说啥/null 说嘴/null 说地谈天/null 说坏话/null 说大话/null 说大话使小钱/null 说头儿/null 说好/null 说妥/null 说媒/null 说完/null 说定/null 说定了/null 说实在的/null 说实话/null 说客/null 说岳全传/null 说帖/null 说废话/null 说开/null 说得上/null 说得来/null 说得过去/null 说心里话/null 说情/null 说情风/null 说慌者/null 说摞/null 说故事/null 说教/null 说教性/null 说教术/null 说文/null 说文解字/null 说文解字注/null 说时迟/null 说明/null 说明书/null 说明了/null 说明会/null 说明式/null 说明性/null 说明文/null 说明符/null 说明者/null 说是一回事/null 说是谈非/null 说曹操/null 说曹操曹操就到/null 说服/null 说服力/null 说服教育/null 说服者/null 说来/null 说来话长/null 说来道去/null 说梅止渴/null 说梦话/null 说法/null 说法不一/null 说溜嘴/null 说漏/null 说理/null 说白/null 说白了/null 说白话/null 说白道绿/null 说白道黑/null 说真的/null 说短论长/null 说短道长/null 说破/null 说穿/null 说笑/null 说笑话/null 说老实话/null 说者/null 说脏话/null 说英语/null 说葡萄酸/null 说词/null 说话/null 说话不当话/null 说话声/null 说话法/null 说话算数/null 说话算话/null 说话者/null 说话要算数/null 说说/null 说说笑笑/null 说说而已/null 说谎/null 说谎者/null 说起/null 说起来/null 说辞/null 说过/null 说通/null 说道/null 说部/null 说长论短/null 说长道短/null 说闲话/null 说项/null 说风凉话/null 说黄道黑/null 说黑道白/null 诵扬/null 诵经/null 诵诗/null 诵读/null 诶笑/null 诶诒/null 请与/null 请书/null 请予/null 请于/null 请人/null 请他/null 请你/null 请使用/null 请便/null 请假/null 请做/null 请准/null 请别见怪/null 请到/null 请功/null 请功受赏/null 请勿/null 请勿吸烟/null 请勿喧哗/null 请勿打扰/null 请医生/null 请单击/null 请原谅/null 请参阅/null 请向/null 请君入瓮/null 请听/null 请命/null 请喝茶/null 请喝酒/null 请在/null 请坐/null 请多关照/null 请安/null 请客/null 请客送礼/null 请将/null 请将不如激将/null 请帖/null 请您/null 请您回复/null 请愿/null 请愿书/null 请愿人/null 请战/null 请战书/null 请托/null 请批示/null 请批评指正/null 请拿/null 请提宝贵意见/null 请提意见/null 请援/null 请教/null 请春客/null 请来/null 请柬/null 请求/null 请求宽恕/null 请求者/null 请注意/null 请用/null 请电/null 请看/null 请示/null 请示报告/null 请神容易送神难/null 请缨/null 请罪/null 请者/null 请自隗始/null 请见/null 请讲/null 请说/null 请调/null 请谅解/null 请贴/null 请走/null 请转/null 请转交/null 请辞/null 请这/null 请进/null 请进来/null 请问/null 请降/null 诸事/null 诸位/null 诸侯/null 诸侯国/null 诸候/null 诸公/null 诸凡百事/null 诸君/null 诸国/null 诸城/null 诸多/null 诸如/null 诸如此类/null 诸子/null 诸子十家/null 诸子百家/null 诸宫调/null 诸家/null 诸将/null 诸岛/null 诸州/null 诸广山/null 诸暨/null 诸柘/null 诸生/null 诸相/null 诸种/null 诸税/null 诸般/null 诸色/null 诸葛/null 诸葛亮/null 诸葛亮会/null 诸项/null 诺丁汉/null 诺丁汉郡/null 诺亚/null 诺基亚/null 诺塞斯/null 诺夫哥罗德/null 诺奖/null 诺姆・乔姆斯基/null 诺尔/null 诺曼人/null 诺曼底/null 诺曼底人/null 诺曼底半岛/null 诺曼征服/null 诺曼第/null 诺格/null 诺特/null 诺矩罗/null 诺福克岛/null 诺美克斯/null 诺言/null 诺诺/null 诺诺而退/null 诺贝尔/null 诺贝尔和平奖/null 诺贝尔奖/null 诺贝尔奖金/null 诺贝尔文学奖/null 诺贝尔物理学奖/null 读一遍/null 读万卷书/null 读下/null 读不舍手/null 读串/null 读为/null 读书/null 读书人/null 读书会/null 读作/null 读入/null 读写/null 读写能力/null 读出/null 读到/null 读卖/null 读卖新闻/null 读卡/null 读卡器/null 读卡机/null 读友/null 读取/null 读后感/null 读唇术/null 读唇法/null 读图/null 读头/null 读字/null 读它/null 读完/null 读后/null 读得/null 读心术/null 读性/null 读懂/null 读成/null 读报/null 读数/null 读曰/null 读本/null 读来/null 读法/null 读熟/null 读物/null 读盘/null 读着/null 读破/null 读破句/null 读秒/null 读经/null 读经者/null 读罢/null 读者/null 读者文摘/null 读者来信/null 读若/null 读著/null 读谱/null 读过/null 读进/null 读重音/null 读错/null 读阅/null 读音/null 读音错误/null 诽谤/null 诽谤之木/null 诽谤性/null 诽谤罪/null 诽谤者/null 诽闻/null 课上/null 课业/null 课以/null 课余/null 课内/null 课卷/null 课取/null 课后/null 课堂/null 课堂教学/null 课处/null 课外/null 课外活动/null 课外读物/null 课外阅读/null 课室/null 课征/null 课后/null 课文/null 课文启动/null 课时/null 课本/null 课桌/null 课活/null 课由/null 课目/null 课程/null 课程表/null 课税/null 课经/null 课自/null 课表/null 课长/null 课间/null 课间操/null 课题/null 诿罪/null 谀者/null 谀辞/null 谁个/null 谁人/null 谁人乐队/null 谁会想到/null 谁手/null 谁是/null 谁是谁非/null 谁的/null 谁知/null 谁知道/null 谁笑到最后/null 谁笑在最后/null 谁笑得最好/null 谁说/null 谁边/null 调三斡四/null 调三窝四/null 调丝品竹/null 调丝弄竹/null 调了/null 调人/null 调令/null 调价/null 调任/null 调休/null 调低/null 调侃/null 调值/null 调停/null 调停人/null 调停者/null 调充/null 调光/null 调入/null 调兵/null 调兵山/null 调兵遣将/null 调养/null 调准/null 调出/null 调到/null 调制/null 调制器/null 调制波/null 调制解调器/null 调剂/null 调动/null 调匀/null 调包/null 调升/null 调协/null 调卷/null 调压/null 调变/null 调号/null 调合/null 调味/null 调味剂/null 调味品/null 调味料/null 调味汁/null 调味瓶/null 调味肉汁/null 调和/null 调和主义/null 调和分析/null 调和化/null 调和平均数/null 调和振动/null 调和鼎鼐/null 调唆/null 调唇弄舌/null 调嘴/null 调嘴学舌/null 调嘴弄舌/null 调嘴调舌/null 调回/null 调坎儿/null 调增/null 调墨弄笔/null 调处/null 调头/null 调好/null 调子/null 调子高/null 调察员/null 调幅/null 调幅器/null 调干/null 调度/null 调度员/null 调度室/null 调弄/null 调式/null 调弦品竹/null 调弦弄管/null 调往/null 调律/null 调情/null 调戏/null 调护/null 调拨/null 调挡/null 调换/null 调控/null 调摄/null 调教/null 调整/null 调整了/null 调整器/null 调整结构/null 调整者/null 调料/null 调查/null 调查人/null 调查人员/null 调查员/null 调查团/null 调查报告/null 调查研究/null 调查组/null 调查结果/null 调查者/null 调查表/null 调查部/null 调档/null 调正/null 调治/null 调波/null 调派/null 调温/null 调演/null 调焦/null 调理/null 调理素/null 调用/null 调皮/null 调相/null 调研/null 调研人员/null 调研员/null 调离/null 调笑/null 调类/null 调级/null 调经/null 调经剂/null 调给/null 调羹/null 调职/null 调脂弄粉/null 调舌弄唇/null 调色/null 调色剂/null 调色板/null 调色盘/null 调节/null 调节作用/null 调节剂/null 调节员/null 调节器/null 调节板/null 调节热/null 调节物/null 调节税/null 调节者/null 调节阀/null 调茬/null 调药刀/null 调薪/null 调虎离山/null 调虎离山之计/null 调解/null 调解人/null 调解员/null 调解委员会/null 调解者/null 调训/null 调试/null 调调/null 调谐/null 调谐器/null 调谑/null 调质处理/null 调资/null 调走/null 调赴/null 调车/null 调车场/null 调轨/null 调转/null 调迁/null 调运/null 调进/null 调适/null 调速/null 调遣/null 调配/null 调酒/null 调酒员/null 调酒师/null 调门/null 调门儿/null 调阅/null 调防/null 调集/null 调音/null 调页/null 调频/null 调风变俗/null 调风弄月/null 调驯/null 调高/null 谄上傲下/null 谄上抑下/null 谄媚/null 谄媚者/null 谄笑/null 谄词令色/null 谄谀/null 谄谀取容/null 谅察/null 谅必/null 谅解/null 谆谆/null 谆谆不倦/null 谆谆告诫/null 谆谆善诱/null 谆醉/null 谇骂/null 谈上/null 谈不/null 谈不上/null 谈不拢/null 谈中/null 谈了/null 谈些/null 谈今论古/null 谈价/null 谈何/null 谈何容易/null 谈判/null 谈判制度/null 谈判桌/null 谈判者/null 谈到/null 谈助/null 谈及/null 谈古说今/null 谈吐/null 谈吐不凡/null 谈吐如流/null 谈吐风生/null 谈天/null 谈天论地/null 谈天说地/null 谈妥/null 谈家/null 谈得上/null 谈得来/null 谈心/null 谈恋爱/null 谈情说爱/null 谈成/null 谈拢/null 谈星/null 谈朋友/null 谈柄/null 谈清/null 谈生意/null 谈的/null 谈笑/null 谈笑封候/null 谈笑自如/null 谈笑自若/null 谈笑风生/null 谈经说法/null 谈虎色变/null 谈言微中/null 谈论/null 谈论风生/null 谈话/null 谈话会/null 谈话室/null 谈说/null 谈谈/null 谈起/null 谈辞如云/null 谈过/null 谈逸事/null 谈锋/null 谋为不轨/null 谋事/null 谋事在人/null 谋划/null 谋划者/null 谋利/null 谋刺/null 谋反/null 谋取/null 谋取私利/null 谋取面试/null 谋叛/null 谋和/null 谋善/null 谋图不轨/null 谋士/null 谋夫孔多/null 谋夺/null 谋如涌泉/null 谋定/null 谋害/null 谋得/null 谋无遗策/null 谋智/null 谋杀/null 谋杀案/null 谋杀犯/null 谋杀罪/null 谋求/null 谋生/null 谋略/null 谋略学/null 谋略家/null 谋略思想/null 谋私/null 谋者/null 谋而后动/null 谋职/null 谋臣/null 谋臣如雨/null 谋臣武将/null 谋臣猛将/null 谋获/null 谋虑/null 谋虑深远/null 谋计/null 谋谟帷幄/null 谋财害命/null 谋远/null 谋逆不轨/null 谋面/null 谋食/null 谍报/null 谍报史/null 谎价/null 谎信/null 谎报/null 谎癖/null 谎称/null 谎者/null 谎花/null 谎言/null 谎话/null 谎说/null 谎骗/null 谏书/null 谏争如流/null 谏征/null 谏正/null 谏补/null 谏言/null 谏诤/null 谐函数/null 谐剧/null 谐和/null 谐声/null 谐婉/null 谐戏/null 谐振/null 谐振动/null 谐振器/null 谐振子/null 谐星/null 谐波/null 谐称/null 谐美/null 谐调/null 谐谈/null 谐谑/null 谐趣/null 谐音/null 谐音列/null 谑剧/null 谑戏/null 谑称/null 谑而不虐/null 谑语/null 谒者/null 谒见/null 谒访/null 谒陵/null 谒陵之旅/null 谓之/null 谓词/null 谓语/null 谔谔以昌/null 谕旨/null 谗佞/null 谗害/null 谗涎/null 谗言/null 谗诞欲滴/null 谗谄/null 谗邪/null 谘师访友/null 谘文/null 谘询/null 谘询员/null 谙晓/null 谙练/null 谚文/null 谚语/null 谛听/null 谛视/null 谜一般/null 谜你型/null 谜你装/null 谜儿/null 谜团/null 谜嬉装/null 谜宫/null 谜底/null 谜恋/null 谜惑/null 谜惑人/null 谜样/null 谜语/null 谜面/null 谜题/null 谠言嘉论/null 谠言直声/null 谠论侃侃/null 谢世/null 谢了/null 谢仪/null 谢你/null 谢候/null 谢函/null 谢却/null 谢司起义/null 谢天谢地/null 谢媒/null 谢孝/null 谢定/null 谢客/null 谢家集/null 谢家集区/null 谢尔巴人/null 谢尔盖/null 谢帖/null 谢幕/null 谢忱/null 谢恩/null 谢意/null 谢拉/null 谢灵运/null 谢电/null 谢病/null 谢礼/null 谢绝/null 谢绝参观/null 谢罪/null 谢肉节/null 谢词/null 谢谢/null 谢谢你/null 谢赫/null 谢辛/null 谢辞/null 谢过/null 谢通门/null 谢里夫/null 谢长廷/null 谢霆锋/null 谢顶/null 谣传/null 谣曲/null 谣言/null 谣言惑众/null 谣诼/null 谣风/null 谥号/null 谦以下士/null 谦卑/null 谦受益/null 谦受益满招损/null 谦和/null 谦恭/null 谦恭下士/null 谦称/null 谦虚/null 谦虚谨慎/null 谦让/null 谦词/null 谦诚/null 谦语/null 谦谦/null 谦谦下士/null 谦谦君子/null 谦辞/null 谦逊/null 谦逊下士/null 谨上/null 谨严/null 谨向/null 谨启/null 谨呈/null 谨守/null 谨小慎微/null 谨慎/null 谨慎从事/null 谨此/null 谨终追远/null 谨言慎行/null 谨记/null 谨访/null 谨防/null 谨防扒手/null 谨饬/null 谩上不谩下/null 谩天昧地/null 谩骂/null 谩骂者/null 谪居/null 谪戍/null 谫陋/null 谬以千里/null 谬奖/null 谬种/null 谬种流传/null 谬耄/null 谬见/null 谬论/null 谬误/null 谬说/null 谭咏麟/null 谭嗣同/null 谭天说地/null 谭富英/null 谭盾/null 谭鑫培/null 谭震林/null 谮言/null 谯城/null 谯城区/null 谯楼/null 谰言/null 谰调/null 谱儿/null 谱写/null 谱出/null 谱分/null 谱分析/null 谱号/null 谱图/null 谱子/null 谱学/null 谱带/null 谱成/null 谱斑/null 谱曲/null 谱氏/null 谱牒/null 谱盲/null 谱系/null 谱线/null 谱表/null 谲怪之谈/null 谲而不正/null 谲诈/null 谴散/null 谴责/null 谴责小说/null 谵妄/null 谵语/null 谶纬/null 谶语/null 谷仓/null 谷口/null 谷地/null 谷场/null 谷坊/null 谷城/null 谷堆/null 谷壳/null 谷子/null 谷子钻心虫/null 谷川/null 谷底/null 谷梁/null 谷梁传/null 谷氨酰胺/null 谷氨酸/null 谷物/null 谷神/null 谷神星/null 谷种/null 谷穗/null 谷类/null 谷类作物/null 谷粉/null 谷粒/null 谷糠/null 谷苗/null 谷草/null 谷贱伤农/null 谷鸟/null 豁亮/null 豁免/null 豁免权/null 豁出/null 豁出去/null 豁口/null 豁嘴/null 豁子/null 豁开/null 豁拳/null 豁朗/null 豁然/null 豁然大悟/null 豁然开悟/null 豁然开朗/null 豁然省悟/null 豁然贯通/null 豁裂/null 豁达/null 豁达大度/null 豆乳/null 豆佉/null 豆儿/null 豆制品/null 豆剖瓜分/null 豆嘴儿/null 豆夹/null 豆奶/null 豆娘/null 豆子/null 豆寇年华/null 豆形/null 豆料/null 豆条/null 豆汁/null 豆沙/null 豆沙包/null 豆油/null 豆浆/null 豆渣/null 豆渣脑筋/null 豆满江/null 豆状/null 豆瓣/null 豆瓣儿酱/null 豆瓣网/null 豆瓣菜/null 豆瓣酱/null 豆皀/null 豆皮/null 豆科/null 豆秸/null 豆类/null 豆类蔬菜/null 豆粉/null 豆粒/null 豆素/null 豆绿/null 豆腐/null 豆腐乳/null 豆腐干/null 豆腐心/null 豆腐渣/null 豆腐渣工程/null 豆腐皮/null 豆腐脑/null 豆腐脑儿/null 豆腐衣/null 豆花/null 豆花儿/null 豆芽/null 豆芽儿/null 豆芽菜/null 豆苗/null 豆荚/null 豆萁/null 豆蓉/null 豆蓉包/null 豆蔻/null 豆蔻年华/null 豆薯/null 豆薯属/null 豆角/null 豆角儿/null 豆豆/null 豆豉/null 豆豉酱/null 豆象/null 豆酱/null 豆重榆瞑/null 豆青/null 豆面/null 豆饼/null 豆鼠/null 豇豆/null 豉油/null 豌豆/null 豌豆粥/null 豌豆荚/null 豌豆象/null 豌豆赵/null 豕突狼奔/null 豕豞/null 豚鼠/null 象一/null 象不/null 象个/null 象之/null 象人/null 象他/null 象只/null 象在/null 象声词/null 象头/null 象她/null 象学/null 象将/null 象小/null 象山/null 象山区/null 象州/null 象年/null 象形/null 象形字/null 象形文字/null 象形文字论/null 象征/null 象征主义/null 象征化/null 象征学/null 象征性/null 象征派/null 象我/null 象拔蚌/null 象是/null 象样/null 象棋/null 象棋赛/null 象活/null 象海豹/null 象牙/null 象牙之塔/null 象牙制/null 象牙塔/null 象牙海岸/null 象牙质/null 象牙雕刻/null 象皮病/null 象看/null 象眼儿/null 象箸玉杯/null 象纸/null 象脚鼓/null 象虫/null 象蜗牛/null 象被/null 象要/null 象话/null 象限/null 象限仪/null 象鬼/null 象鼻/null 象鼻山/null 象鼻虫/null 象齿焚身/null 豢养/null 豢圉/null 豪举/null 豪伊杜・比豪尔/null 豪伊杜・比豪尔州/null 豪侠/null 豪兴/null 豪华/null 豪华型/null 豪华轿车/null 豪右/null 豪商/null 豪士/null 豪壮/null 豪夺/null 豪夺巧取/null 豪奢放逸/null 豪宅/null 豪客/null 豪富/null 豪强/null 豪情/null 豪情壮志/null 豪情满怀/null 豪情逸致/null 豪放/null 豪放不羁/null 豪杰/null 豪横/null 豪横跋扈/null 豪毛/null 豪气/null 豪气干云/null 豪油/null 豪爽/null 豪猪/null 豪绅/null 豪胜/null 豪萨语/null 豪言/null 豪言壮语/null 豪语/null 豪赌/null 豪迈/null 豪迈不群/null 豪门/null 豪门贵胄/null 豪雨/null 豪饮/null 豫剧/null 豫告/null 豫章/null 豱公/null 豹子/null 豹拳/null 豹死留皮/null 豹猫/null 豹皮/null 豺狼/null 豺狼塞路/null 豺狼塞道/null 豺狼座/null 豺狼当涂/null 豺狼当路/null 豺狼当道/null 豺狼成性/null 豺狼横道/null 豺狼虎豹/null 豺狼野心/null 豺虎肆虐/null 貂不足狗尾续/null 貂熊/null 貂皮/null 貂蝉/null 貂裘换酒/null 貂鼠/null 貉子/null 貉绒/null 貌似/null 貌凶/null 貌取/null 貌合心离/null 貌合情离/null 貌合神离/null 貌和心离/null 貌和行离/null 貌是情非/null 貌相/null 貌美/null 貔子/null 貔虎/null 貔貅/null 贝・布托/null 贝丘/null 贝九/null 贝克/null 贝克勒尔/null 贝克尔/null 贝克汉姆/null 贝利卡登/null 贝加尔湖/null 贝加莱/null 贝努力/null 贝勒/null 贝卡谷地/null 贝卢斯科尼/null 贝叶/null 贝叶树/null 贝叶棕/null 贝叶经/null 贝司/null 贝塔/null 贝塔斯曼/null 贝壳/null 贝壳儿/null 贝多/null 贝多罗树/null 贝多芬/null 贝娅特丽克丝/null 贝娜齐尔・布托/null 贝宁/null 贝宝/null 贝尔/null 贝尔实验室/null 贝尔格莱德/null 贝尔法斯特/null 贝尔湖/null 贝尔莫潘/null 贝币/null 贝拉/null 贝拉米/null 贝斯/null 贝斯吉他/null 贝母/null 贝特/null 贝类/null 贝纳通/null 贝聿铭/null 贝锦萁菲/null 贝阙珠宫/null 贝雕/null 贝雷帽/null 贝鲁特/null 贞丰/null 贞夫烈妇/null 贞女/null 贞妇/null 贞德/null 贞操/null 贞操带/null 贞洁/null 贞烈/null 贞节/null 贞观之治/null 贞观政要/null 贞风亮节/null 贞高绝俗/null 负义忘恩/null 负乘致寇/null 负于/null 负亏/null 负伤/null 负债/null 负债垒垒/null 负债累累/null 负值/null 负分/null 负压/null 负反馈/null 负号/null 负固不悛/null 负固不服/null 负图之托/null 负土成坟/null 负增长/null 负外部性/null 负屈含冤/null 负屈衔冤/null 负山戴岳/null 负差/null 负弩前驱/null 负心/null 负心人/null 负心违愿/null 负性/null 负才任气/null 负才使气/null 负担/null 负担不起/null 负担者/null 负担过重/null 负担量/null 负指数/null 负效应/null 负数/null 负整数/null 负方/null 负有/null 负有责任/null 负有重任/null 负极/null 负气/null 负气仗义/null 负氧/null 负片/null 负电/null 负电子/null 负电荷/null 负疚/null 负盈/null 负石赴河/null 负离子/null 负笈/null 负笈担簦/null 负累/null 负约/null 负罪/null 负翁/null 负老提幼/null 负荆/null 负荆请罪/null 负荷/null 负荷者/null 负薪之忧/null 负薪之疾/null 负薪之病/null 负薪之议/null 负薪之资/null 负薪救火/null 负责/null 负责人/null 负责任/null 负责制/null 负责同志/null 负责干部/null 负起/null 负载/null 负重/null 负重担/null 负重涉远/null 负重致远/null 负隅顽抗/null 负面/null 负项/null 负鼎之愿/null 负鼠/null 贡丸/null 贡井/null 贡井区/null 贡品/null 贡嘎/null 贡国/null 贡士/null 贡寮/null 贡寮乡/null 贡山/null 贡山县/null 贡物/null 贡献/null 贡献出/null 贡献力量/null 贡献者/null 贡生/null 贡礼/null 贡禹弹冠/null 贡税/null 贡缎/null 贡觉/null 贡赋/null 贡院/null 贡高我慢/null 财东/null 财主/null 财产/null 财产价值/null 财产保险/null 财产公证/null 财产权/null 财产税/null 财会/null 财利/null 财力/null 财力物力/null 财务/null 财务再保险/null 财务员/null 财务处/null 财务大臣/null 财务收支/null 财务秘书/null 财务管理/null 财务软件/null 财务预算/null 财势/null 财匮为绌/null 财团/null 财多命殆/null 财大气粗/null 财宝/null 财富/null 财帛/null 财年/null 财政/null 财政关税/null 财政危机/null 财政大臣/null 财政学/null 财政寡头/null 财政局/null 财政年度/null 财政资本/null 财政资金/null 财政部长/null 财权/null 财殚力尽/null 财气/null 财源/null 财源滚滚/null 财源茂盛/null 财物/null 财相/null 财礼/null 财神/null 财神爷/null 财税/null 财竭力尽/null 财经/null 财货/null 财贸/null 财赋/null 财路/null 财运/null 财运亨通/null 财迷/null 财迷心窍/null 财长/null 财阀/null 责令/null 责任/null 责任书/null 责任事故/null 责任人/null 责任制/null 责任区/null 责任心/null 责任感/null 责任田/null 责备/null 责备似/null 责实循名/null 责己/null 责怪/null 责成/null 责打/null 责无旁贷/null 责罚/null 责躬省过/null 责重山岳/null 责问/null 责难/null 责难似/null 责骂/null 贤人/null 贤侄/null 贤内/null 贤内助/null 贤劳/null 贤哲/null 贤士/null 贤契/null 贤妹/null 贤妻/null 贤妻良母/null 贤孙/null 贤弟/null 贤徒/null 贤德/null 贤惠/null 贤慧/null 贤才/null 贤才君子/null 贤明/null 贤淑/null 贤淑仁慈/null 贤王/null 贤相/null 贤者/null 贤能/null 贤臣/null 贤良/null 贤良方正/null 贤贤易色/null 贤路/null 贤达/null 败下阵来/null 败不成军/null 败不旋踵/null 败不馁/null 败也萧何/null 败了/null 败事/null 败事有余/null 败亡/null 败仗/null 败俗/null 败俗伤化/null 败俗伤风/null 败光/null 败兴/null 败兵/null 败军/null 败军之将/null 败化伤风/null 败北/null 败叶/null 败名/null 败国丧家/null 败国亡家/null 败坏/null 败子/null 败子回头/null 败家子/null 败将/null 败将残兵/null 败尽/null 败局/null 败德/null 败性/null 败战/null 败於垂成/null 败柳残花/null 败法乱纪/null 败火/null 败相/null 败笔/null 败类/null 败絮/null 败絮其中/null 败给/null 败绩/null 败者/null 败胃/null 败草/null 败落/null 败血/null 败血病/null 败血症/null 败诉/null 败走/null 败过/null 败退/null 败逃/null 败酱/null 败阵/null 败露/null 败鳞残甲/null 账册/null 账务/null 账单/null 账号/null 账户/null 账房/null 账房先生/null 账本/null 账本儿/null 账款/null 账目/null 账簿/null 账载/null 账面/null 货主/null 货亭/null 货仓/null 货价/null 货位/null 货值/null 货到/null 货到付款/null 货单/null 货号/null 货名/null 货员/null 货品/null 货商/null 货商场/null 货场/null 货垛/null 货币/null 货币主义/null 货币交换/null 货币供应量/null 货币兑换/null 货币危机/null 货币回笼/null 货币地租/null 货币学/null 货币市场/null 货币政策/null 货币流通/null 货币贬值/null 货币金融危机/null 货摊/null 货机/null 货架/null 货架子/null 货柜/null 货柜化/null 货柜船/null 货栈/null 货样/null 货梯/null 货棚/null 货款/null 货殖/null 货比三家/null 货比三家不吃亏/null 货源/null 货源充足/null 货物/null 货物周转量/null 货物税/null 货物运输/null 货盘/null 货真价实/null 货票/null 货种/null 货站/null 货箱/null 货舱/null 货船/null 货色/null 货贿/null 货贿公行/null 货赂公行/null 货车/null 货轮/null 货载/null 货运/null 货运列车/null 货运卡车/null 货运站/null 货郎/null 货郎鼓/null 货铺/null 货问三家不吃亏/null 质上/null 质优/null 质体/null 质劣/null 质化/null 质变/null 质因数/null 质地/null 质地薄/null 质妻鬻子/null 质子/null 质子数/null 质子轰击/null 质对/null 质层/null 质库/null 质心/null 质感/null 质数/null 质料/null 质明/null 质朴/null 质架/null 质检/null 质检局/null 质次价高/null 质点/null 质疑/null 质疑问难/null 质的/null 质的飞跃/null 质直/null 质直浑厚/null 质粒/null 质素/null 质而不俚/null 质而不野/null 质言/null 质言之/null 质询/null 质谱/null 质谱仪/null 质量/null 质量保障/null 质量关/null 质量块/null 质量守恒定律/null 质量数/null 质量标准/null 质量检查/null 质量检验/null 质量第一/null 质量管理/null 质铺/null 质问/null 质问者/null 质难/null 贩卖/null 贩卖人口/null 贩卖机/null 贩卖者/null 贩售/null 贩夫/null 贩夫俗子/null 贩夫走卒/null 贩奴/null 贩婴/null 贩子/null 贩官鬻爵/null 贩毒/null 贩毒分子/null 贩毒案/null 贩毒集团/null 贩私/null 贩运/null 贪位取容/null 贪位慕禄/null 贪便宜/null 贪冒荣宠/null 贪利/null 贪占/null 贪口福/null 贪吃/null 贪吃懒做/null 贪吃者/null 贪名图利/null 贪名逐利/null 贪吏猾胥/null 贪嘴/null 贪嘴人/null 贪图/null 贪图享受/null 贪图安逸/null 贪墨/null 贪墨之风/null 贪墨败度/null 贪声逐色/null 贪多/null 贪多务得/null 贪多嚼不烂/null 贪大/null 贪大求全/null 贪天之功/null 贪天之功为己有/null 贪夫徇财/null 贪婪/null 贪婪无厌/null 贪婪是万恶之源/null 贪官/null 贪官污吏/null 贪官蠹役/null 贪小/null 贪小便宜/null 贪小失大/null 贪得/null 贪得无厌/null 贪得无餍/null 贪心/null 贪心不足/null 贪心妄想/null 贪心无厌/null 贪心者/null 贪恋/null 贪权慕禄/null 贪权窃柄/null 贪杯/null 贪欲/null 贪欲无艺/null 贪求/null 贪求无厌/null 贪求无已/null 贪污/null 贪污分子/null 贪污受贿/null 贪污犯/null 贪污盗窃/null 贪污罪/null 贪污腐化/null 贪爵慕位/null 贪狠/null 贪猥无厌/null 贪玩/null 贪生/null 贪生害义/null 贪生怕死/null 贪生恶死/null 贪生畏死/null 贪生舍义/null 贪看/null 贪睡/null 贪睡者/null 贪者/null 贪而无信/null 贪脏/null 贪腐/null 贪色/null 贪花恋酒/null 贪荣冒宠/null 贪荣慕利/null 贪财/null 贪财图利/null 贪财好色/null 贪财好贿/null 贪财慕势/null 贪贿/null 贪贿无艺/null 贪赃/null 贪赃坏法/null 贪赃枉法/null 贪鄙/null 贪酒/null 贪钱/null 贪青/null 贪食/null 贫下/null 贫下中农/null 贫不足耻/null 贫乏/null 贫僧/null 贫农/null 贫化/null 贫嘴/null 贫嘴滑舌/null 贫嘴薄舌/null 贫嘴贱舌/null 贫困/null 贫困县/null 贫困地区/null 贫困户/null 贫困率/null 贫困线/null 贫国/null 贫女诗/null 贫富/null 贫富差距/null 贫富悬殊/null 贫寒/null 贫弱/null 贫户/null 贫无立锥/null 贫无立锥之地/null 贫民/null 贫民区/null 贫民窟/null 贫民院/null 贫气/null 贫油/null 贫油国/null 贫液/null 贫病/null 贫病交加/null 贫病交攻/null 贫病交迫/null 贫瘠/null 贫相/null 贫矿/null 贫穷/null 贫穷潦倒/null 贫穷落后/null 贫窭/null 贫而无谄/null 贫腔/null 贫苦/null 贫血/null 贫血性坏死/null 贫血症/null 贫贱/null 贫贱不能移/null 贫贱之交/null 贫贱糟糠/null 贫贱骄人/null 贫道/null 贫铀/null 贫雇农/null 贫骨头/null 贬义/null 贬义词/null 贬低/null 贬值/null 贬居/null 贬抑/null 贬损/null 贬斥/null 贬职/null 贬落/null 贬词/null 贬谪/null 贬责/null 贬逐/null 贬黜/null 购买/null 购买力/null 购买方法/null 购买者/null 购价/null 购入/null 购取/null 购屋/null 购建/null 购得/null 购房/null 购料/null 购方/null 购楼/null 购物/null 购物中心/null 购物券/null 购物单/null 购物大厦/null 购物广场/null 购物手推车/null 购物者/null 购物袋/null 购物车/null 购用/null 购票/null 购粮/null 购置/null 购货/null 购货人/null 购货单/null 购进/null 购销/null 购销两旺/null 购销差价/null 购销调存/null 购领/null 贮备/null 贮存/null 贮存器/null 贮存管/null 贮木场/null 贮水/null 贮水器/null 贮水处/null 贮水池/null 贮水量/null 贮液器/null 贮点红/null 贮热/null 贮物/null 贮窖/null 贮藏/null 贮藏器/null 贮藏处/null 贮藏室/null 贮藏所/null 贮藏物/null 贮藏箱/null 贮运/null 贯串/null 贯众/null 贯例/null 贯入/null 贯彻/null 贯彻始终/null 贯彻执行/null 贯时/null 贯朽粟红/null 贯朽粟腐/null 贯气/null 贯注/null 贯犯/null 贯穿/null 贯穿今古/null 贯穿辐射/null 贯穿驰骋/null 贯窃/null 贯耳/null 贯通/null 贯通一气/null 贯颐奋戟/null 贯鱼之次/null 贯鱼承宠/null 贰心/null 贰臣/null 贱买/null 贱买贵卖/null 贱人/null 贱价/null 贱内/null 贱冰履炭/null 贱卖/null 贱敛贵出/null 贱敛贵发/null 贱格/null 贱民/null 贱称/null 贱视/null 贱货/null 贱骨头/null 贲临/null 贲门/null 贴上/null 贴了/null 贴入/null 贴出/null 贴切/null 贴合/null 贴吧/null 贴在/null 贴士/null 贴处/null 贴好/null 贴广告/null 贴心/null 贴心人/null 贴息/null 贴息贷款/null 贴换/null 贴接/null 贴旦/null 贴服/null 贴标签/null 贴水/null 贴满/null 贴率/null 贴现/null 贴现率/null 贴生/null 贴用/null 贴画/null 贴着/null 贴纸/null 贴缝/null 贴耳/null 贴膜/null 贴花/null 贴补/null 贴足/null 贴身/null 贴身卫队/null 贴边/null 贴近/null 贴金/null 贴钱/null 贴锡箔/null 贴附/null 贴靠/null 贴题/null 贴饼子/null 贵不凌贱/null 贵不可言/null 贵为/null 贵人/null 贵人多事/null 贵人多忘/null 贵人多忘事/null 贵体/null 贵公司/null 贵刊/null 贵单位/null 贵南/null 贵厂/null 贵古贱今/null 贵台/null 贵国/null 贵在/null 贵地/null 贵处/null 贵妃/null 贵妃醉酒/null 贵妇/null 贵妇人/null 贵妇犬/null 贵姓/null 贵子/null 贵定/null 贵客/null 贵宾/null 贵宾室/null 贵宾席/null 贵宾犬/null 贵局/null 贵州日报/null 贵州苗族人民起义/null 贵州财经学院/null 贵庚/null 贵府/null 贵德/null 贵恙/null 贵戚/null 贵所/null 贵方/null 贵族/null 贵族似/null 贵族化/null 贵族式/null 贵族政治/null 贵族社会/null 贵族般/null 贵族身份/null 贵无常尊/null 贵显/null 贵极人臣/null 贵校/null 贵格会/null 贵池/null 贵池区/null 贵港/null 贵溪/null 贵的/null 贵省/null 贵站/null 贵耳贱目/null 贵胄/null 贵贱/null 贵贱无二/null 贵贱无常/null 贵贱高低/null 贵远贱近/null 贵远鄙近/null 贵重/null 贵重物品/null 贵金属/null 贵阳医学院/null 贵院/null 贷借/null 贷入/null 贷减/null 贷增/null 贷币/null 贷放/null 贷方/null 贷款/null 贷款人/null 贷款率/null 贷给/null 贷记/null 贷资/null 贸促会/null 贸易/null 贸易中心/null 贸易伙伴/null 贸易保护主义/null 贸易公司/null 贸易关系/null 贸易协定/null 贸易口岸/null 贸易商/null 贸易国/null 贸易壁垒/null 贸易夥伴/null 贸易市场/null 贸易战/null 贸易法/null 贸易界/null 贸易组织/null 贸易谈判/null 贸易货栈/null 贸易赤字/null 贸易逆差/null 贸易量/null 贸易顺差/null 贸易额/null 贸易风/null 贸然/null 贸贸然/null 费事/null 费人思索/null 费利克斯/null 费力/null 费力不讨好/null 费力劳心/null 费加罗/null 费加罗报/null 费劲/null 费劲儿/null 费卢杰/null 费口舌/null 费品率/null 费城/null 费奥多尔/null 费孝通/null 费尔巴哈/null 费尔干纳/null 费尔干纳槃地/null 费尔干纳盆地/null 费尔马/null 费尔马大定理/null 费尽/null 费尽心思/null 费尽心机/null 费尽心血/null 费工/null 费德勒/null 费心/null 费心劳力/null 费手脚/null 费拉德尔菲亚/null 费掉/null 费时/null 费时间/null 费曼/null 费气/null 费洛蒙/null 费率/null 费用/null 费用报销单/null 费电/null 费神/null 费米/null 费米子/null 费解/null 费话/null 费财劳民/null 费边主义/null 费边社会主义/null 费钱/null 费难/null 贺信/null 贺兰/null 贺兰山/null 贺兰山脉/null 贺军翔/null 贺函/null 贺卡/null 贺县/null 贺喜/null 贺子珍/null 贺客/null 贺岁/null 贺州/null 贺帖/null 贺年/null 贺年卡/null 贺年片/null 贺普丁/null 贺朝/null 贺片/null 贺电/null 贺知章/null 贺礼/null 贺表/null 贺词/null 贺诚/null 贺龙/null 贻人/null 贻人口实/null 贻厥孙谋/null 贻害/null 贻害无穷/null 贻燕/null 贻燕之训/null 贻笑/null 贻笑万世/null 贻笑千秋/null 贻笑大方/null 贻笑方家/null 贻范古今/null 贻诮多方/null 贻误/null 贻误军机/null 贻贝/null 贼亮/null 贼人心虚/null 贼人胆虚/null 贼党/null 贼去关门/null 贼喊捉贼/null 贼头贼脑/null 贼头鼠脑/null 贼子乱臣/null 贼心/null 贼心不死/null 贼星/null 贼死/null 贼皮贼骨/null 贼眉鼠眼/null 贼眼/null 贼窝/null 贼脏/null 贼脑/null 贼臣乱子/null 贼臣逆子/null 贼船/null 贼赃/null 贼鸥/null 贾人/null 贾伯斯/null 贾南德拉/null 贾夹威德/null 贾宝玉/null 贾宪三角/null 贾平凹/null 贾庆林/null 贾思勰/null 贾斯汀・比伯/null 贾汪/null 贾汪区/null 贾第虫/null 贾第虫属/null 贾第虫病/null 贾谊/null 贿络/null 贿货公行/null 贿赂/null 贿赂公行/null 贿赂并行/null 贿赂物/null 贿选/null 赀财/null 赀郎/null 赃字/null 赃官/null 赃官污吏/null 赃款/null 赃污狼籍/null 赃物/null 资中/null 资产/null 资产价值/null 资产剥离/null 资产担保证券/null 资产组合/null 资产者/null 资产负债表/null 资产阶级/null 资产阶级专政/null 资产阶级右派/null 资产阶级社会主义/null 资产阶级革命/null 资信/null 资修/null 资俸/null 资兴/null 资力/null 资助/null 资助人/null 资历/null 资历深/null 资已付/null 资怨助祸/null 资政/null 资料/null 资料介面/null 资料仓储/null 资料传输/null 资料传送服务/null 资料室/null 资料库/null 资料量/null 资料链结层/null 资料馆/null 资料/null 资斧/null 资方/null 资望/null 资本/null 资本主义/null 资本主义世界货币体系/null 资本主义国有化/null 资本主义基本矛盾/null 资本主义基本经济规律/null 资本主义工商业社会主义改造/null 资本主义所有制/null 资本主义机器大工业/null 资本主义社会/null 资本储备/null 资本化/null 资本原始积累/null 资本增殖/null 资本外逃/null 资本家/null 资本市场/null 资本帝国主义/null 资本循环/null 资本有机构成/null 资本积累/null 资本计提/null 资本论/null 资本输出/null 资材/null 资格/null 资格赛/null 资治通鉴/null 资浅/null 资浅望轻/null 资浅齿少/null 资深/null 资深望重/null 资源/null 资溪/null 资生堂/null 资用/null 资讯/null 资讯专栏/null 资讯工业/null 资讯科技/null 资讯网/null 资财/null 资质/null 资金/null 资阳/null 资阳区/null 赅博/null 赅括/null 赈恤/null 赈所/null 赈捐/null 赈救/null 赈款/null 赈济/null 赈灾/null 赈灾义演/null 赈穷济乏/null 赈粮/null 赈饥/null 赊买/null 赊借/null 赊债/null 赊卖/null 赊帐/null 赊欠/null 赊给/null 赊账/null 赊购/null 赊销/null 赋与/null 赋予/null 赋于/null 赋以/null 赋值/null 赋形剂/null 赋役/null 赋性/null 赋有/null 赋格/null 赋格曲/null 赋税/null 赋诗/null 赋闲/null 赋闲无事/null 赋间/null 赌东道/null 赌债/null 赌光/null 赌具/null 赌博/null 赌博场/null 赌博者/null 赌友/null 赌咒/null 赌咒发誓/null 赌场/null 赌客/null 赌局/null 赌帐/null 赌徒/null 赌斗/null 赌本/null 赌棍/null 赌气/null 赌法/null 赌注/null 赌牌/null 赌犯/null 赌窝/null 赌窟/null 赌账/null 赌赢/null 赌输/null 赌运气/null 赌金/null 赌钱/null 赌风/null 赌馆/null 赌马/null 赌鬼/null 赍志没地/null 赍志而殁/null 赍恨/null 赎买/null 赎取/null 赎命/null 赎回/null 赎当/null 赎款/null 赎罪/null 赎罪日/null 赎罪日战争/null 赎职/null 赎身/null 赎金/null 赏一劝众/null 赏不当功/null 赏不逾日/null 赏不逾时/null 赏不遗贱/null 赏与/null 赏付/null 赏光/null 赏力/null 赏功罚罪/null 赏号/null 赏同罚异/null 赏善罚恶/null 赏封/null 赏心/null 赏心乐事/null 赏心悦目/null 赏月/null 赏格/null 赏玩/null 赏给/null 赏罚/null 赏罚不信/null 赏罚不当/null 赏罚不明/null 赏罚严明/null 赏罚分明/null 赏罚无章/null 赏罚黜陟/null 赏脸/null 赏识/null 赏赉/null 赏赐/null 赏赐无度/null 赏还/null 赏金/null 赏鉴/null 赏钱/null 赏银/null 赏阅/null 赐与/null 赐予/null 赐姓/null 赐官/null 赐教/null 赐死/null 赐示/null 赐福/null 赐给/null 赑屃/null 赒人/null 赒急/null 赒急扶困/null 赒恤/null 赒济/null 赓续/null 赔上/null 赔不是/null 赔了/null 赔了夫人又折兵/null 赔产/null 赔人/null 赔付/null 赔偿/null 赔偿制度/null 赔偿损失/null 赔偿者/null 赔偿费/null 赔偿金/null 赔光/null 赔垫/null 赔小心/null 赔帐/null 赔得/null 赔本/null 赔款/null 赔礼/null 赔礼道歉/null 赔笑/null 赔笑脸/null 赔累/null 赔罪/null 赔者/null 赔补/null 赔话/null 赔赏/null 赔还/null 赔钱/null 赔额/null 赕佛/null 赖以/null 赖债/null 赖声川/null 赖婚/null 赖学/null 赖安/null 赖帐/null 赖床/null 赖掉/null 赖斯/null 赖昌星/null 赖校族/null 赖氨酸/null 赖特/null 赖皮/null 赖脸/null 赖著/null 赖补/null 赖词/null 赖词儿/null 赖账/null 赘余/null 赘婿/null 赘物/null 赘生/null 赘生物/null 赘疣/null 赘瘤/null 赘笔/null 赘肉/null 赘言/null 赘词/null 赘语/null 赘述/null 赙仪/null 赙赠/null 赚了/null 赚人/null 赚养费/null 赚到/null 赚取/null 赚哄/null 赚大钱/null 赚头/null 赚得/null 赚钱/null 赛义迪/null 赛事/null 赛会/null 赛似/null 赛前/null 赛力散/null 赛区/null 赛场/null 赛夏族/null 赛外/null 赛季/null 赛局/null 赛后/null 赛德克族/null 赛情/null 赛扬/null 赛段/null 赛点/null 赛特/null 赛璐玢/null 赛璐珞/null 赛百味/null 赛程/null 赛罕/null 赛罕区/null 赛船/null 赛艇/null 赛跑/null 赛跑场/null 赛跑马/null 赛车/null 赛车场/null 赛车场赛/null 赛车女郎/null 赛车手/null 赛过/null 赛过一个诸葛亮/null 赛过活神仙/null 赛过诸葛亮/null 赛里木湖/null 赛马/null 赛马会/null 赛马场/null 赛马迷/null 赛龙舟/null 赛龙船/null 赝品/null 赝币/null 赝本/null 赝碱/null 赝鼎/null 赞不容口/null 赞不绝口/null 赞丹/null 赞佩/null 赞助/null 赞助人/null 赞助商/null 赞口不绝/null 赞叹/null 赞叹不已/null 赞叹着/null 赞同/null 赞声不绝/null 赞成/null 赞成票/null 赞扬/null 赞歌/null 赞比亚/null 赞比亚人/null 赞皇/null 赞礼/null 赞美/null 赞美歌/null 赞美诗/null 赞者/null 赞西佩/null 赞誉/null 赞许/null 赞词/null 赞语/null 赞赏/null 赞辞/null 赞颂/null 赞颂者/null 赞飨/null 赠与/null 赠与者/null 赠予/null 赠人/null 赠别/null 赠券/null 赠品/null 赠本/null 赠款/null 赠物/null 赠礼/null 赠答/null 赠给/null 赠者/null 赠芍/null 赠言/null 赠送/null 赠送物/null 赠阅/null 赡养/null 赡养费/null 赡望/null 赢了/null 赢余/null 赢利/null 赢取/null 赢家/null 赢弱/null 赢得/null 赢钱/null 赢顿/null 赣剧/null 赣州/null 赣州地区/null 赣榆/null 赣江/null 赣语/null 赤体/null 赤体上阵/null 赤佬/null 赤光光/null 赤兔/null 赤化/null 赤匪/null 赤卫军/null 赤卫队/null 赤县/null 赤县神州/null 赤口日/null 赤口毒舌/null 赤口白舌/null 赤地/null 赤地千里/null 赤坎/null 赤坎区/null 赤城/null 赤壁/null 赤壁之战/null 赤壁县/null 赤壁鏖兵/null 赤子/null 赤子之心/null 赤字/null 赤字累累/null 赤小豆/null 赤峰/null 赤崁楼/null 赤嵌之战/null 赤嵌楼/null 赤带/null 赤心/null 赤心奉国/null 赤心忠胆/null 赤心报国/null 赤忱/null 赤手/null 赤手空拳/null 赤手起家/null 赤日/null 赤日炎炎/null 赤条/null 赤条条/null 赤杨/null 赤松/null 赤橙/null 赤水/null 赤水河/null 赤湾/null 赤潮/null 赤热/null 赤狐/null 赤痢/null 赤白痢/null 赤眉/null 赤眉起义/null 赤眼蜂/null 赤睛鱼/null 赤磷/null 赤红/null 赤练蛇/null 赤绳系足/null 赤绳绾足/null 赤老/null 赤胆/null 赤胆忠心/null 赤胆忠肝/null 赤背/null 赤脚/null 赤脚医生/null 赤脚律师/null 赤膊/null 赤膊上阵/null 赤臂/null 赤舌烧城/null 赤色/null 赤芍/null 赤藓糖醇/null 赤藓醇/null 赤血盐/null 赤裸/null 赤裸裸/null 赤褐/null 赤褐色/null 赤诚/null 赤诚相待/null 赤诚相见/null 赤豆/null 赤贫/null 赤贫如洗/null 赤足/null 赤身/null 赤身裸体/null 赤身露体/null 赤道/null 赤道仪/null 赤道几内亚/null 赤道逆流/null 赤道雨林/null 赤金/null 赤铁矿/null 赤铜/null 赤铜矿/null 赤陶/null 赤霉病/null 赤霉素/null 赤霉菌/null 赤露/null 赤革/null 赤麻鸭/null 赦令/null 赦免/null 赦罪/null 赦过宥罪/null 赧然/null 赧赧/null 赧颜/null 赧颜汗下/null 赫伯斯翼龙/null 赫伯特/null 赫兹/null 赫兹龙/null 赫哲语/null 赫图阿拉/null 赫塞哥维纳/null 赫奇帕奇/null 赫奕/null 赫尔/null 赫尔墨斯/null 赫尔曼/null 赫尔曼德/null 赫尔穆特/null 赫尔穆特・科尔/null 赫尔辛基/null 赫山/null 赫山区/null 赫德/null 赫拉/null 赫拉克利特/null 赫拉特/null 赫拉特省/null 赫斯之威/null 赫斯之怒/null 赫斯提亚/null 赫曼・麦尔维尔/null 赫本/null 赫然/null 赫然有声/null 赫特河公国/null 赫福特郡/null 赫章/null 赫耳墨斯/null 赫胥黎/null 赫赫/null 赫赫之光/null 赫赫之功/null 赫赫之名/null 赫赫扬扬/null 赫赫有名/null 赫赫炎炎/null 赫鲁晓夫/null 赫鲁雪夫/null 赭土/null 赭石/null 赭色/null 赭衣塞路/null 赭衣满道/null 走上/null 走上位/null 走下/null 走下坡/null 走下坡路/null 走两步/null 走为/null 走为上/null 走为上策/null 走为上计/null 走之/null 走乡随乡/null 走乱/null 走了/null 走了和尚走不了庙/null 走亲戚/null 走亲访友/null 走人/null 走低/null 走俏/null 走光/null 走入/null 走兽/null 走内线/null 走出/null 走到/null 走动/null 走势/null 走势凌厉/null 走势汹涌/null 走卒/null 走南闯北/null 走去/null 走及奔马/null 走后/null 走后门/null 走向/null 走向世界/null 走向断层/null 走向滑动断层/null 走吧/null 走味/null 走味儿/null 走哇/null 走啦/null 走喽/null 走嘴/null 走回/null 走圆场/null 走在/null 走墒/null 走壁/null 走失/null 走头无路/null 走头没路/null 走好/null 走好运/null 走娘家/null 走子/null 走完/null 走宝/null 走山/null 走帐/null 走带/null 走廊/null 走开/null 走弯路/null 走形/null 走形儿/null 走形式/null 走后/null 走后门/null 走得/null 走心/null 走慢/null 走扇/null 走投无路/null 走投没路/null 走掉/null 走散/null 走时/null 走村串户/null 走来/null 走来回/null 走来走去/null 走板/null 走极端/null 走查/null 走样/null 走样儿/null 走棋/null 走步/null 走歪/null 走水/null 走江湖/null 走流性/null 走漏/null 走漏天机/null 走漏消息/null 走漏风声/null 走火/null 走狗/null 走的/null 走相/null 走眼/null 走着/null 走着瞧/null 走石飞砂/null 走神/null 走神儿/null 走票/null 走禽/null 走秀/null 走私/null 走私品/null 走私案/null 走私犯/null 走私者/null 走私货/null 走穴/null 走笔/null 走笔成文/null 走笔成章/null 走索/null 走累/null 走红/null 走绳/null 走者/null 走肉/null 走肉行尸/null 走背字/null 走背字儿/null 走自己的路/null 走船/null 走色/null 走街串巷/null 走街穿巷/null 走访/null 走话/null 走读/null 走读生/null 走调/null 走调儿/null 走资派/null 走赢/null 走走/null 走起/null 走趟/null 走路/null 走路快/null 走边/null 走过/null 走过场/null 走运/null 走近/null 走进/null 走远/null 走遍/null 走道/null 走道儿/null 走避/null 走钢丝/null 走错/null 走错路/null 走镖/null 走险/null 走音/null 走题/null 走风/null 走马/null 走马上任/null 走马之任/null 走马到任/null 走马换将/null 走马灯/null 走马疳/null 走马看花/null 走马章台/null 走马观花/null 走马赴任/null 走骨行尸/null 走高/null 走鬼/null 赳赳/null 赳赳武夫/null 赴任/null 赴会/null 赴华/null 赴叩/null 赴台/null 赴宴/null 赴敌/null 赴死/null 赴死如归/null 赴汤投火/null 赴汤跳火/null 赴汤蹈火/null 赴火蹈刃/null 赴约/null 赴考/null 赴试/null 赴蹈汤火/null 赴阴曹/null 赴难/null 赵云/null 赵体/null 赵元任/null 赵公元帅/null 赵六/null 赵军/null 赵匡胤/null 赵国/null 赵宋/null 赵客/null 赵尔巽/null 赵岐/null 赵州桥/null 赵忠尧/null 赵惠文王/null 赵括/null 赵晔/null 赵本山/null 赵构/null 赵树理/null 赵紫阳/null 赵翼/null 赵薇/null 赶上/null 赶不/null 赶不上/null 赶不及/null 赶了/null 赶做/null 赶先进/null 赶入/null 赶写/null 赶出/null 赶到/null 赶制/null 赶前不赶后/null 赶办/null 赶印/null 赶去/null 赶向/null 赶嘴/null 赶回/null 赶在/null 赶场/null 赶完/null 赶尽杀绝/null 赶工/null 赶巧/null 赶帮/null 赶开/null 赶往/null 赶得/null 赶得上/null 赶得及/null 赶忙/null 赶快/null 赶急/null 赶拢/null 赶早/null 赶时髦/null 赶明儿/null 赶晚/null 赶来/null 赶汗/null 赶活/null 赶浪头/null 赶牲/null 赶着鸭子上架/null 赶紧/null 赶考/null 赶脚/null 赶走/null 赶赴/null 赶超/null 赶趟/null 赶趟儿/null 赶跑/null 赶路/null 赶车/null 赶车人/null 赶过/null 赶送/null 赶锥/null 赶集/null 赶骡/null 赶鸭子上架/null 起义/null 起义将领/null 起义者/null 起义领袖/null 起了/null 起事/null 起事者/null 起于/null 起云剂/null 起亚/null 起价/null 起伏/null 起伏变化/null 起作/null 起作用/null 起先/null 起兵/null 起兵动众/null 起决定作用/null 起初/null 起到/null 起动/null 起动器/null 起动钮/null 起劲/null 起劲儿/null 起卸/null 起司/null 起司蛋糕/null 起吊/null 起名/null 起名儿/null 起哄/null 起回声/null 起因/null 起圈/null 起场/null 起坐/null 起士/null 起士蛋糕/null 起声/null 起复/null 起夜/null 起头/null 起始/null 起子/null 起家/null 起封/null 起小儿/null 起居/null 起居作息/null 起居室/null 起岸/null 起师动众/null 起床/null 起床号/null 起开/null 起征/null 起急/null 起意/null 起手回春/null 起扑/null 起扑杆/null 起承转合/null 起折/null 起搏器/null 起搏点/null 起敬/null 起斑点/null 起早/null 起早摸黑/null 起早贪黑/null 起旱/null 起晒斑/null 起更/null 起来/null 起根/null 起模范/null 起止/null 起步/null 起死人肉白骨/null 起死回生/null 起毛/null 起毛机/null 起水/null 起泡/null 起泡沫/null 起波纹/null 起浪/null 起源/null 起源于/null 起火/null 起灵/null 起点/null 起点线/null 起爆/null 起用/null 起电/null 起电机/null 起电盘/null 起疑/null 起痉挛/null 起皱/null 起皱纹/null 起眼/null 起眼儿/null 起着/null 起码/null 起碇/null 起磁/null 起租/null 起程/null 起稿/null 起立/null 起站/null 起端/null 起笔/null 起算/null 起绉/null 起网/null 起脚/null 起自/null 起舞/null 起航/null 起色/null 起草/null 起草者/null 起获/null 起落/null 起落场/null 起落架/null 起落装置/null 起蚕/null 起行/null 起见/null 起解/null 起誓/null 起计/null 起讫/null 起讲/null 起诉/null 起诉书/null 起诉人/null 起诉员/null 起诉状/null 起诉者/null 起课/null 起货/null 起赃/null 起跑/null 起跑器/null 起跑线/null 起跳/null 起身/null 起迄/null 起运/null 起造员/null 起重/null 起重机/null 起重船/null 起重葫芦/null 起锅/null 起锚/null 起锚机/null 起降/null 起雷/null 起霜/null 起霸/null 起风/null 起飞/null 起飞前/null 起飞弹射/null 起首/null 趁乱逃脱/null 趁他/null 趁便/null 趁势/null 趁势落篷/null 趁墒/null 趁心/null 趁心如意/null 趁我/null 趁手/null 趁早/null 趁早儿/null 趁时/null 趁机/null 趁此机会/null 趁波逐浪/null 趁浪逐波/null 趁火打劫/null 趁火抢劫/null 趁热/null 趁热打铁/null 趁着/null 趁空/null 趁虚/null 趁虚而入/null 趁钱/null 超世之才/null 超世拔俗/null 超世绝伦/null 超世绝俗/null 超临界/null 超乎/null 超乎寻常/null 超产/null 超产奖励/null 超人/null 超人一等/null 超今冠古/null 超今绝古/null 超今越古/null 超以象外/null 超大/很大 超小/很小 超位/null 超低温/null 超低空/null 超俗/null 超俗绝世/null 超值/null 超假/null 超假不归/null 超储/null 超再生/null 超凡/null 超凡入圣/null 超凡出世/null 超凡脱俗/null 超出/null 超前/null 超前意识/null 超前消费/null 超前瞄准/null 超前绝后/null 超升/null 超卓人士/null 超压/null 超合金/null 超员/null 超商/null 超固态/null 超基性岩/null 超塑性/null 超声/null 超声扫描/null 超声显微镜/null 超声波/null 超声波加工/null 超声波学/null 超声波检查/null 超声波疗法/null 超声速/null 超声频/null 超外差/null 超外差式收音机/null 超大国/null 超大规模/null 超媒体/null 超子/null 超对称/null 超导/null 超导体/null 超导电/null 超导电体/null 超导电性/null 超小型/null 超小型化/null 超小型品/null 超尘出俗/null 超尘拔俗/null 超巨星/null 超市/null 超常/null 超平面/null 超库/null 超度/null 超弦/null 超弦理论/null 超强/null 超循环论/null 超微/null 超微结构/null 超心理学/null 超想/null 超感/null 超感觉/null 超我/null 超技/null 超拔/null 超支/null 超收/null 超敏反应/null 超敏性/null 超文件/null 超文件传输协定/null 超文本/null 超文本传输协定/null 超文本传送协议/null 超文本标记语言/null 超新星/null 超新星剩余/null 超时/null 超时间/null 超显微术/null 超显微镜/null 超期/null 超期服役/null 超标/null 超标准/null 超模/null 超水平/null 超泛神论/null 超流体/null 超消费/null 超渡/null 超滤体/null 超灵/null 超然/null 超然不群/null 超然世事/null 超然物外/null 超然独立/null 超然绝俗/null 超然自引/null 超然自得/null 超然象外/null 超然迈伦/null 超然远举/null 超然远引/null 超物理/null 超物质/null 超特快/null 超现代/null 超现代化/null 超生/null 超界/null 超短/null 超短波/null 超短篇/null 超短裙/null 超等/null 超类绝伦/null 超级/null 超级公路/null 超级大国/null 超级客机/null 超级市场/null 超级强国/null 超级文本/null 超级杯/null 超级电脑/null 超级终端/null 超级走廊/null 超级链接/null 超经济剥削/null 超经验/null 超绝/null 超维空间/null 超编/null 超缴/null 超群/null 超群出众/null 超群拔类/null 超群绝伦/null 超群越辈/null 超群轶类/null 超联/null 超联结/null 超脱/null 超自我/null 超自然/null 超自然力/null 超薄/null 超薄型/null 超行/null 超视/null 超负荷/null 超购/null 超超玄著/null 超越/null 超越函数/null 超越数/null 超足球/null 超距作用/null 超车/null 超轴/null 超轶绝尘/null 超载/null 超迁/null 超过/null 超过限度/null 超迈绝伦/null 超连结/null 超速/null 超速行驶/null 超速驾驶/null 超逸/null 超逸绝尘/null 超重/null 超重氢/null 超量/null 超链接/null 超阶级/null 超阶越次/null 超限/null 超集/null 超音/null 超音波/null 超音波学/null 超音速/null 超音速飞机/null 超频/null 超额/null 超额利润/null 超额完成/null 超额订购/null 超额认/null 超额认购/null 超额配/null 超额配股权/null 超高/null 超高压/null 超高压自由带电作业/null 超高压输电线/null 超高温/null 超高速/null 超高速乙太网路/null 超高频/null 超龄/null 越不/null 越位/null 越侨/null 越俎代庖/null 越光米/null 越共/null 越冬/null 越冬作物/null 越凫楚乙/null 越出/null 越出界线/null 越剧/null 越加/null 柬埔寨抗法战争/null 越南人/null 越南共产党/null 越南刺鳑鲏/null 越南战争/null 越南抗美救国战争/null 越南文/null 越南语/null 越发/null 越古超今/null 越国/null 越城/null 越城区/null 越城岭/null 越境/null 越境者/null 越墙/null 越多/null 越大/null 越好/null 越小/null 越少/null 越差/null 越席/null 越帮越忙/null 越快/null 越快越好/null 越慢/null 越战/null 越描越黑/null 越文/null 越是/null 越有/null 越权/null 越来/null 越来越/null 越来越多/null 越来越大/null 越来越好/null 越来越小/null 越来越少/null 越橘/null 越次超论/null 越次躐等/null 越洋/null 越洋电话/null 越浅/null 越海/null 越深/null 越狱/null 越狱犯/null 越王勾践/null 越瓜/null 越界/null 越看/null 越礼/null 越秀/null 越秀区/null 越累/null 越级/null 越线/null 越职/null 越西/null 越要/null 越轨/null 越过/null 越重/null 越野/null 越野赛/null 越野赛跑/null 越野跑/null 越野车/null 越长/null 越陷越深/null 越障/null 越雷池一步/null 越飞/null 越高/null 越鸟南栖/null 趋之/null 趋之若鹜/null 趋于/null 趋光/null 趋光性/null 趋冷/null 趋冷气候/null 趋利避害/null 趋前退后/null 趋力/null 趋势/null 趋势线/null 趋化作用/null 趋吉逃凶/null 趋吉避凶/null 趋同/null 趋向/null 趋向于/null 趋奉/null 趋好/null 趋时/null 趋权附势/null 趋炎奉势/null 趋炎附势/null 趋炎附热/null 趋缓/null 趋舍异路/null 趋近/null 趋附/null 趋附于/null 趑趄/null 趑趄不前/null 趑趄却顾/null 趑趄嗫嚅/null 趔趄/null 趟水/null 趟田/null 趟马/null 趣事/null 趣剧/null 趣味/null 趣味休闲/null 趣味性/null 趣园/null 趣地/null 趣多多/null 趣舍有时/null 趣话/null 趣闻/null 趣闻轶事/null 趦趄嗫嚅/null 足三里穴/null 足下/null 足不出户/null 足不窥户/null 足不逾户/null 足以/null 足以自慰/null 足使/null 足信/null 足先/null 足内/null 足利/null 足利・义政/null 足利・义满/null 足利义稙/null 足协/null 足印/null 足取/null 足可/null 足坛/null 足够/null 足大指/null 足尖/null 足岁/null 足底/null 足数/null 足智/null 足智多谋/null 足月/null 足有/null 足本/null 足板/null 足标/null 足浴/null 足球/null 足球协会/null 足球员/null 足球场/null 足球赛/null 足球迷/null 足球队/null 足用/null 足疗/null 足礼/null 足科/null 足类/null 足纹/null 足背/null 足致/null 足色/null 足见/null 足赤/null 足足/null 足趾/null 足跟/null 足踝靴/null 足蹈手舞/null 足轮/null 足迹/null 足部/null 足重/null 足量/null 足金/null 足银/null 足音跫然/null 足额/null 足食丰衣/null 足食足兵/null 足高气强/null 足高气扬/null 趴下/null 趴伏/null 趴在/null 趴架/null 趵趵/null 趸卖/null 趸售/null 趸批/null 趸船/null 趺坐/null 趼子/null 趼足/null 趾头/null 趾尖/null 趾甲/null 趾疔/null 趾行类/null 趾骨/null 趾高气扬/null 趿拉/null 趿拉儿/null 趿拉板儿/null 跂坐/null 跂想/null 跂望/null 跂訾/null 跂跂/null 跃上/null 跃入/null 跃动/null 跃升/null 跃居/null 跃居第一/null 跃居首位/null 跃然/null 跃然纸上/null 跃着/null 跃立/null 跃腾/null 跃至/null 跃起/null 跃跃/null 跃跃欲试/null 跃身/null 跃迁/null 跃过/null 跃进/null 跃马/null 跃马扬鞭/null 跃龙/null 跄跄/null 跄踉/null 跆拳道/null 跋前踬后/null 跋山涉川/null 跋山涉水/null 跋扈/null 跋扈自恣/null 跋扈飞扬/null 跋文/null 跋来报往/null 跋涉/null 跋涉山川/null 跋涉长途/null 跋语/null 跌下/null 跌交/null 跌价/null 跌份/null 跌伤/null 跌倒/null 跌停板/null 跌入/null 跌到/null 跌势/null 跌宕/null 跌宕不羁/null 跌宕昭彰/null 跌宕遒丽/null 跌市/null 跌幅/null 跌扑/null 跌打/null 跌打丸/null 跌打损伤/null 跌打药/null 跌断/null 跌死/null 跌水/null 跌狗吠尧/null 跌破/null 跌碎/null 跌脚捶胸/null 跌至/null 跌至谷底/null 跌荡/null 跌荡不羁/null 跌落/null 跌足/null 跌跌撞撞/null 跌跌跄跄/null 跌跤/null 跌进/null 跌风/null 跌鳖千里/null 跏趺/null 跑下/null 跑不了寺/null 跑不了庙/null 跑了/null 跑了和尚/null 跑出/null 跑到/null 跑动/null 跑单帮/null 跑去/null 跑反/null 跑合儿/null 跑向/null 跑味/null 跑味儿/null 跑啦/null 跑回/null 跑圆场/null 跑在/null 跑场/null 跑垒/null 跑垒员/null 跑堂/null 跑堂儿的/null 跑墒/null 跑外/null 跑完/null 跑差/null 跑开/null 跑开者/null 跑得/null 跑得了和尚/null 跑快/null 跑掉/null 跑旱船/null 跑来/null 跑来跑去/null 跑步/null 跑步者/null 跑气/null 跑江湖/null 跑法/null 跑源建设/null 跑电/null 跑着/null 跑码头/null 跑神儿/null 跑票/null 跑肚/null 跑腿/null 跑腿儿/null 跑街/null 跑表/null 跑警报/null 跑调/null 跑走/null 跑跑/null 跑跑跳跳/null 跑跑颠颠/null 跑路/null 跑车/null 跑辙/null 跑过/null 跑进/null 跑遍/null 跑道/null 跑酷/null 跑面/null 跑鞋/null 跑题/null 跑马/null 跑马厅/null 跑马圈地/null 跑马地/null 跑马场/null 跑马山/null 跑马观花/null 跑龙套/null 跗面/null 跛子/null 跛脚/null 跛腿/null 跛行/null 跛行症/null 跛足/null 跛鳖千里/null 距今/null 距状皮层/null 距离/null 距离差/null 跟上/null 跟不上/null 跟从/null 跟前/null 跟包/null 跟单/null 跟头/null 跟头虫/null 跟尾儿/null 跟屁股/null 跟屁虫/null 跟手/null 跟斗/null 跟来/null 跟注/null 跟班/null 跟着/null 跟稳/null 跟紧/null 跟群/null 跟脚/null 跟腱/null 跟著/null 跟踪/null 跟部/null 跟错/null 跟随/null 跟随者/null 跟鞋/null 跟风/null 跣足科头/null 跨上/null 跨世纪/null 跨乡/null 跨了/null 跨入/null 跨凤乘鸾/null 跨凤乘龙/null 跨出/null 跨刀/null 跨刀相助/null 跨区/null 跨国/null 跨国公司/null 跨国化/null 跨地区/null 跨坐/null 跨境/null 跨姿/null 跨学科/null 跨州越郡/null 跨州连郡/null 跨平台/null 跨年/null 跨年度/null 跨度/null 跨接/null 跨接器/null 跨文化/null 跨月/null 跨期/null 跨栏/null 跨栏比赛/null 跨栏赛跑/null 跨步/null 跨步电压/null 跨洋/null 跨洲/null 跨海/null 跨海大桥/null 跨灶/null 跨省/null 跨着/null 跨线/null 跨线桥/null 跨著/null 跨行/null 跨行业/null 跨语言/null 跨超出/null 跨越/null 跨越式/null 跨距/null 跨轨/null 跨过/null 跨进/null 跨部门/null 跨院/null 跨院儿/null 跨马/null 跨鹤/null 跨鹤扬州/null 跨鹤西游/null 跪下/null 跪伏/null 跪倒/null 跪到/null 跪叩/null 跪台/null 跪在/null 跪地求饶/null 跪垫/null 跪拜/null 跪拜台/null 跪拜者/null 跪毯/null 跪着/null 跪祷/null 跫然/null 跫然足音/null 跬步不离/null 跬步千里/null 路上/null 路上比终点更有意义/null 路不拾遗/null 路东/null 路人/null 路人皆知/null 路况/null 路加/null 路加福音/null 路劫/null 路北/null 路北区/null 路单/null 路南/null 路南区/null 路南彝族自治县/null 路口/null 路向/null 路基/null 路堑/null 路堤/null 路子/null 路宽/null 路局/null 路工/null 路引/null 路弯/null 路径/null 路得/null 路得记/null 路德/null 路德会/null 路德宗/null 路德维希/null 路德维希港/null 路怒症/null 路摊/null 路撒/null 路数/null 路旁/null 路无拾遗/null 路易/null 路易・皮埃尔・阿尔都塞/null 路易士/null 路易威登/null 路易斯/null 路易斯・伊纳西奥・卢拉・达席尔瓦/null 路易斯安那/null 路易斯安那州/null 路易港/null 路条/null 路林/null 路柳墙花/null 路标/null 路桥/null 路桥区/null 路段/null 路演/null 路灯/null 路牌/null 路由/null 路由协定/null 路由协议/null 路由器/null 路电/null 路痴/null 路矿/null 路码表/null 路祭/null 路程/null 路税/null 路窄/null 路端电压/null 路竹/null 路竹乡/null 路签/null 路线/null 路线图/null 路线教育/null 路线斗争/null 路经/null 路绝人稀/null 路缘/null 路虎/null 路西/null 路西弗/null 路西法/null 路见/null 路见不平/null 路见不平拔刀相助/null 路见不平拔剑相为/null 路见不平拔剑相助/null 路警/null 路费/null 路路/null 路轨/null 路转/null 路边/null 路过/null 路透/null 路透社/null 路透金融词典/null 路透集团/null 路途/null 路途遥远/null 路逢窄道/null 路遇/null 路道/null 路遥/null 路遥知马力/null 路里/null 路障/null 路霸/null 路面/null 路风/null 跳上/null 跳下/null 跳井/null 跳价/null 跳伞/null 跳伞人/null 跳伞塔/null 跳伞者/null 跳伞运动/null 跳入/null 跳入者/null 跳出/null 跳出火坑/null 跳出釜底进火坑/null 跳到/null 跳加官/null 跳动/null 跳去/null 跳台/null 跳台滑雪/null 跳回/null 跳场/null 跳墙/null 跳子棋/null 跳布扎/null 跳开/null 跳弹/null 跳房子/null 跳探/null 跳接/null 跳月/null 跳来跳去/null 跳板/null 跳栏/null 跳格/null 跳桥/null 跳梁/null 跳梁小丑/null 跳棋/null 跳楼/null 跳槽/null 跳水/null 跳水池/null 跳水者/null 跳河/null 跳海/null 跳班/null 跳的/null 跳皮筋/null 跳着/null 跳神/null 跳票/null 跳空/null 跳箱/null 跳级/null 跳级生/null 跳线/null 跳绳/null 跳背/null 跳脚/null 跳舞/null 跳舞会/null 跳舞厅/null 跳舞病/null 跳舞者/null 跳荡/null 跳虫/null 跳蚤/null 跳蚤市场/null 跳蛙/null 跳蝻/null 跳行/null 跳读/null 跳起/null 跳越/null 跳跃/null 跳跃者/null 跳踉/null 跳踢/null 跳车/null 跳过/null 跳进/null 跳进黄河洗不清/null 跳远/null 跳针/null 跳间/null 跳闸/null 跳集体舞/null 跳鞋/null 跳页/null 跳频/null 跳飞/null 跳马/null 跳高/null 跳鼠/null 践价/null 践祚/null 践约/null 践行/null 践诺/null 践踏/null 跷家/null 跷板/null 跷课/null 跷足以待/null 跷足而待/null 跷跷/null 跷跷板/null 跷蹊/null 跷蹊作怪/null 跺脚/null 跻身/null 跻身于/null 踅子/null 踅摸/null 踉跄/null 踉踉跄跄/null 踊跃/null 踊跃报名/null 踌伫/null 踌躇/null 踌躇不决/null 踌躇不前/null 踌躇不定/null 踌躇未决/null 踌躇满志/null 踏背相整/null 踏上/null 踏入/null 踏着/null 踏入政坛/null 踏入社会/null 踏出/null 踏到/null 踏动/null 踏勘/null 踏在/null 踏垫/null 踏实/null 踏寻/null 踏平/null 踏春/null 踏月/null 踏木/null 踏板/null 踏板车/null 踏查/null 踏歌/null 踏步/null 踏步不前/null 踏灭/null 踏看/null 踏破铁靴无觅处/null 踏破铁鞋无觅处/null 踏脚/null 踏脚处/null 踏脚石/null 踏舞/null 踏船/null 踏袭/null 踏访/null 踏足/null 踏足板/null 踏踏/null 踏踏实实/null 踏车/null 踏过/null 踏进/null 踏遍/null 踏错/null 踏雪/null 踏雪寻梅/null 踏青/null 踏青赏春/null 踏青赏花/null 踔厉/null 踔厉风发/null 踝关节/null 踝子骨/null 踝骨/null 踟蹰/null 踟蹰不前/null 踟躇/null 踢倒/null 踢出/null 踢出去/null 踢到/null 踢去/null 踢回/null 踢天弄井/null 踢开/null 踢得/null 踢掉/null 踢来/null 踢法/null 踢爆/null 踢球/null 踢球者/null 踢皮球/null 踢脚/null 踢脚线/null 踢腾/null 踢走/null 踢起/null 踢足球/null 踢踏/null 踢踏舞/null 踢踺/null 踢蹋舞/null 踢蹬/null 踢马刺/null 踥踥/null 踥蹀/null 踩住/null 踩倒/null 踩入/null 踩出/null 踩刹车/null 踩动/null 踩在/null 踩坏/null 踩死/null 踩水/null 踩灭/null 踩盘/null 踩熄/null 踩着/null 踩碎/null 踩线/null 踩踏/null 踩踏板/null 踩道/null 踩高跷/null 踪影/null 踪迹/null 踪迹诡秘/null 踮着脚/null 踮脚/null 踯地/null 踯躅/null 踱步/null 踵事增华/null 踵决肘见/null 踵接肩摩/null 踵武/null 踶跂/null 踺子/null 踽踽/null 踽踽凉凉/null 踽踽独行/null 蹀儿鸭子/null 蹀足/null 蹀蹀/null 蹀躞/null 蹁跹/null 蹂躏/null 蹄印/null 蹄声/null 蹄子/null 蹄形/null 蹄掌/null 蹄状体/null 蹄筋/null 蹄铁/null 蹄间三寻/null 蹇修/null 蹇拙/null 蹇涩/null 蹇滞/null 蹇谔之风/null 蹇运/null 蹈厉之志/null 蹈常袭故/null 蹈海/null 蹈矩循规/null 蹈藉/null 蹈袭/null 蹈规循矩/null 蹈赴汤火/null 蹉跌/null 蹉跎/null 蹉跎岁月/null 蹊径/null 蹊田夺牛/null 蹊跷/null 蹊部/null 蹑履/null 蹑影追风/null 蹑悄悄/null 蹑手蹑脚/null 蹑机/null 蹑登/null 蹑着脚/null 蹑脚/null 蹑脚根/null 蹑脚跟/null 蹑足/null 蹑足潜踪/null 蹑跟/null 蹑踪/null 蹑蹀/null 蹑迹/null 蹒跚/null 蹒跚而行/null 蹙国丧师/null 蹙眉/null 蹙额/null 蹦儿/null 蹦出来/null 蹦床/null 蹦极/null 蹦跳/null 蹦跶/null 蹦蹦/null 蹦蹦儿戏/null 蹦蹦儿车/null 蹦蹦跳跳/null 蹦达/null 蹦迪/null 蹦高/null 蹦高儿/null 蹧塌/null 蹧蹋/null 蹩脚/null 蹬了/null 蹬子/null 蹬技/null 蹬着/null 蹬脚/null 蹬腿/null 蹬蹬/null 蹬鼻子上脸/null 蹭吃/null 蹭吃蹭喝/null 蹭蹬/null 蹲下/null 蹲伏/null 蹲便器/null 蹲厕/null 蹲在/null 蹲坐/null 蹲坑/null 蹲点/null 蹲着/null 蹲膘/null 蹲苗/null 蹲著/null 蹲踞/null 蹲马步/null 蹴而/null 蹴鞠/null 蹶子/null 蹼足/null 蹿房越脊/null 蹿腾/null 蹿货/null 蹿跳/null 蹿蹦/null 躁动/null 躁狂/null 躁狂抑郁症/null 躁狂症/null 躁郁病/null 躁郁症/null 躇子/null 躞蹀/null 身上/null 身不由主/null 身不由己/null 身不遇时/null 身世/null 身临/null 身临其境/null 身为/null 身事/null 身亡/null 身价/null 身价倍增/null 身价百倍/null 身份/null 身份卡/null 身份盗窃/null 身份证/null 身份证号码/null 身份证明/null 身份识别卡/null 身体/null 身体上/null 身体健康/null 身体力行/null 身体检查/null 身体质量指数/null 身体部分/null 身体障害/null 身做身当/null 身先/null 身先士众/null 身先士卒/null 身先朝露/null 身兼/null 身兼数职/null 身分/null 身分证/null 身分证号码/null 身分证字号/null 身前/null 身历/null 身历声/null 身受/null 身名俱泰/null 身名俱灭/null 身后/null 身在/null 身在曹营心在汉/null 身在林泉心怀魏阙/null 身在江湖心悬魏阙/null 身在福中不知福/null 身型/null 身处/null 身外/null 身外之物/null 身契/null 身姿/null 身子/null 身子骨/null 身子骨儿/null 身孕/null 身家/null 身家性命/null 身寄虎吻/null 身居/null 身居要职/null 身居高位/null 身带/null 身废名裂/null 身强体壮/null 身强力壮/null 身当其境/null 身当矢石/null 身形/null 身影/null 身后/null 身微/null 身心/null 身心交病/null 身心交瘁/null 身心俱疲/null 身心健康/null 身心爽快/null 身心障碍/null 身怀六甲/null 身怀绝技/null 身态/null 身患/null 身手/null 身才/null 身披羽毛/null 身故/null 身教/null 身教胜于言教/null 身旁/null 身无/null 身无分文/null 身无完肤/null 身无寸缕/null 身无长物/null 身显名扬/null 身材/null 身材短/null 身材高大/null 身材魁梧/null 身条/null 身板/null 身板儿/null 身死名辱/null 身残志不残/null 身残志坚/null 身段/null 身法/null 身着/null 身穿/null 身经/null 身经百战/null 身自为之/null 身说/null 身负/null 身负重任/null 身负重伤/null 身败/null 身败名裂/null 身败名隳/null 身贫如洗/null 身躯/null 身轻/null 身轻体健/null 身轻如燕/null 身轻言微/null 身边/null 身远心近/null 身退功成/null 身遥心迩/null 身量/null 身长/null 身陷/null 身陷囹圄/null 身陷牢狱/null 身陷牢笼/null 身非木石/null 身首分离/null 身首异处/null 身高/null 躬亲/null 躬体力行/null 躬作/null 躬先士卒/null 躬先表率/null 躬履/null 躬擐甲胄/null 躬新细务/null 躬耕/null 躬耕乐道/null 躬自菲薄/null 躬行/null 躬行实践/null 躬行节俭/null 躬诣/null 躬蹈矢石/null 躬身/null 躬逢其盛/null 躯体/null 躯壳/null 躯干/null 躯骸/null 躲不起/null 躲债/null 躲入/null 躲向/null 躲在/null 躲年/null 躲开/null 躲得和尚躲不得寺/null 躲懒/null 躲清闲/null 躲猫猫/null 躲穷/null 躲蔽/null 躲藏/null 躲藏处/null 躲藏者/null 躲让/null 躲起/null 躲躲/null 躲躲藏藏/null 躲躲闪闪/null 躲过/null 躲进/null 躲逃/null 躲避/null 躲避球/null 躲闪/null 躲闪者/null 躲难/null 躲雨/null 躲风/null 躺下/null 躺了/null 躺倒/null 躺卧/null 躺在/null 躺平/null 躺开/null 躺柜/null 躺椅/null 躺着/null 躺著/null 軃神/null 輂辇/null 轗轲/null 轘裂/null 车上/null 车主/null 车份/null 车份儿/null 车位/null 车体/null 车修/null 车儿/null 车光/null 车内/null 车刀/null 车列/null 车到山前必有路/null 车到山前自有路/null 车到站/null 车前/null 车前草/null 车务/null 车务人员/null 车匙/null 车匠/null 车匪/null 车厂/null 车厢/null 车台/null 车后箱/null 车圈/null 车在马前/null 车场/null 车型/null 车垫/null 车城/null 车城乡/null 车壳/null 车夫/null 车头/null 车头相/null 车套/null 车奴/null 车子/null 车尔尼雪夫斯基/null 车尘马迹/null 车展/null 车工/null 车带/null 车床/null 车库/null 车底/null 车座/null 车后/null 车房/null 车手/null 车技/null 车把/null 车把式/null 车捐/null 车攻马同/null 车斗/null 车无退表/null 车条/null 车架/null 车棚/null 车模/null 车次/null 车殆马烦/null 车水/null 车水马龙/null 车流/null 车流量/null 车灯/null 车照/null 车牌/null 车用/null 车皮/null 车盖/null 车盘/null 车直/null 车票/null 车祸/null 车种/null 车程/null 车程表/null 车程计/null 车窗/null 车站/null 车箱/null 车篷/null 车籍/null 车组/null 车胎/null 车臣/null 车船/null 车花/null 车蓬/null 车行/null 车行通道/null 车行道/null 车补/null 车裂/null 车贴/null 车费/null 车资/null 车身/null 车轮/null 车轮子/null 车轮战/null 车轮饼/null 车轱辘/null 车轱辘话/null 车轴/null 车轴草/null 车载/null 车载斗量/null 车辆/null 车辆保养/null 车辆勤务/null 车辆发动机/null 车辆管理/null 车辐/null 车辕/null 车辙/null 车辙马迹/null 车边/null 车速/null 车道/null 车里/null 车里雅宾斯克/null 车量/null 车钩/null 车钱/null 车铃/null 车链/null 车锁/null 车长/null 车门/null 车间/null 车间主任/null 车队/null 车阵/null 车震/null 车顶/null 车马/null 车马盈门/null 车马费/null 车马辐辏/null 车马骈阗/null 车驾/null 车骑/null 车骨/null 车龄/null 轧伤/null 轧制/null 轧场/null 轧声/null 轧带/null 轧平/null 轧成/null 轧机/null 轧染/null 轧染机/null 轧棉/null 轧棉机/null 轧死/null 轧碎/null 轧花机/null 轧轧/null 轧轧声/null 轧辊/null 轧道机/null 轧道车/null 轧钢/null 轧钢厂/null 轧钢机/null 轧钢条/null 轧马路/null 轨度/null 轨杆/null 轨枕/null 轨范/null 轨距/null 轨辙/null 轨迹/null 轨迹球/null 轨迹线/null 轨道/null 轨道交通/null 轨道倾角/null 轨道机/null 轨道空间站/null 轨道舱/null 轩冕/null 轩掖/null 轩敞/null 轩昂/null 轩昂气宇/null 轩昂自若/null 轩槛/null 轩然/null 轩然大波/null 轩然巨波/null 轩轩甚得/null 轩轩自得/null 轩轾/null 轩辕/null 轩辕氏/null 转一趟/null 转世/null 转业/null 转业军人/null 转业干部/null 转为/null 转义/null 转乘/null 转交/null 转产/null 转亮/null 转付/null 转任/null 转会/null 转会费/null 转位/null 转位器/null 转位期/null 转体/null 转作/null 转供/null 转侧/null 转借/null 转借人/null 转借者/null 转储/null 转儿/null 转入/null 转入地下/null 转关系/null 转写/null 转出/null 转到/null 转剧/null 转办/null 转动/null 转动件/null 转动惯量/null 转动轴/null 转包/null 转包人/null 转化/null 转化率/null 转化糖/null 转卖/null 转卖给/null 转印/null 转危为安/null 转去/null 转发/null 转发器/null 转受让方/null 转变/null 转变抹角/null 转变期/null 转变立场/null 转变过程/null 转口/null 转口贸易/null 转台/null 转向/null 转向下/null 转向信号/null 转向器/null 转向灯/null 转呈/null 转告/null 转售/null 转喻/null 转回/null 转圈/null 转圜/null 转圜余地/null 转场/null 转型/null 转基因/null 转基因食品/null 转塔/null 转头/null 转好/null 转嫁/null 转子/null 转字锁/null 转存/null 转学/null 转学生/null 转守/null 转寄/null 转导/null 转差/null 转差率/null 转帆/null 转帐/null 转干/null 转年/null 转库/null 转开/null 转引/null 转弯/null 转弯处/null 转弯子/null 转弯抹角/null 转强/null 转归/null 转录/null 转往/null 转徙/null 转忧为喜/null 转念/null 转恣跋扈/null 转悠/null 转悲为喜/null 转愁为喜/null 转成/null 转战/null 转战千里/null 转手/null 转手倒卖/null 转托/null 转抄/null 转折/null 转折关头/null 转折点/null 转报/null 转抵/null 转拨/null 转换/null 转换器/null 转换断层/null 转捩/null 转捩点/null 转授/null 转接/null 转接器/null 转播/null 转播站/null 转收/null 转攻/null 转数/null 转文/null 转斗千里/null 转日回天/null 转晴/null 转机/null 转杆/null 转来/null 转来转去/null 转校/null 转椅/null 转欲难成/null 转款/null 转正/null 转步/null 转死沟壑/null 转死沟渠/null 转民/null 转氨基酶/null 转氨酶/null 转法轮/null 转注/null 转注字/null 转浑天仪/null 转游/null 转灾为福/null 转炉/null 转率/null 转环/null 转生/null 转用/null 转由/null 转盘/null 转眼/null 转眼之间/null 转眼便忘/null 转眼即逝/null 转着/null 转瞬/null 转瞬之间/null 转瞬间/null 转矩/null 转矩臂/null 转磨/null 转祸为福/null 转科/null 转租/null 转租人/null 转移/null 转移安置/null 转移性/null 转移支付/null 转移视线/null 转移酶/null 转移阵地/null 转筋/null 转精覃思/null 转系/null 转纽/null 转结/null 转给/null 转置/null 转而/null 转背/null 转胜/null 转脸/null 转腰子/null 转至/null 转舵/null 转船/null 转蓬/null 转行/null 转角/null 转让/null 转诊/null 转译/null 转请/null 转调/null 转败为功/null 转败为成/null 转败为胜/null 转账/null 转账卡/null 转贷/null 转赠/null 转距/null 转身/null 转车/null 转车台/null 转轨/null 转轨变型/null 转转/null 转转相因/null 转轮/null 转轮圣帝/null 转轮圣王/null 转轮手枪/null 转轮王/null 转轴/null 转轴儿/null 转载/null 转达/null 转过/null 转过来/null 转运/null 转运栈/null 转运站/null 转进/null 转述/null 转送/null 转递/null 转速/null 转速比/null 转速表/null 转速计/null 转道/null 转铃/null 转铃儿/null 转门/null 转院/null 转面无情/null 转韵/null 转鼓/null 轮上/null 轮任/null 轮休/null 轮伙/null 轮作/null 轮值/null 轮到/null 轮压机/null 轮台/null 轮台古城/null 轮唱/null 轮回/null 轮圈/null 轮埠/null 轮奸/null 轮子/null 轮带/null 轮廓/null 轮廓线/null 轮廓鲜明/null 轮式/null 轮式拖拉机/null 轮形/null 轮战/null 轮扁斫轮/null 轮指/null 轮换/null 轮旋曲/null 轮替/null 轮机/null 轮机手/null 轮机长/null 轮栽/null 轮椅/null 轮次/null 轮毂/null 轮毂罩/null 轮流/null 轮渡/null 轮滑/null 轮牧/null 轮状/null 轮班/null 轮生/null 轮番/null 轮盘/null 轮着/null 轮种/null 轮空/null 轮箍/null 轮系/null 轮组/null 轮缘/null 轮胎/null 轮胎壁/null 轮胎盖/null 轮脚/null 轮船/null 轮训/null 轮询/null 轮赌/null 轮距/null 轮转/null 轮转印刷/null 轮转机/null 轮转计/null 轮轴/null 轮辋/null 轮辐/null 轮退/null 轮驳/null 轮齿/null 软了/null 软件/null 软件企业/null 软件包/null 软件市场/null 软件平台/null 软件开发/null 软件开发人员/null 软件技术/null 软件系统/null 软任务/null 软伫/null 软体/null 软体业/null 软体业巨人/null 软体出版协会/null 软体动物/null 软体配送者/null 软冻/null 软刀/null 软刀子/null 软包/null 软包装/null 软化/null 软化剂/null 软卧/null 软口盖/null 软叭叭/null 软呢/null 软呢帽/null 软和/null 软坐/null 软垫/null 软壳/null 软实力/null 软尺/null 软布/null 软席/null 软帽/null 软床/null 软库/null 软座/null 软弱/null 软弱性/null 软弱无力/null 软弱无能/null 软弱涣散/null 软性/null 软指标/null 软木/null 软木塞/null 软木斛/null 软木材/null 软材/null 软板/null 软枣/null 软梯/null 软毛/null 软水/null 软沥青/null 软泥/null 软泥儿/null 软流圈/null 软流层/null 软片/null 软片盒/null 软玉/null 软玉娇香/null 软玉温香/null 软皂/null 软皮/null 软盘/null 软盘片/null 软着陆/null 软硬/null 软硬不吃/null 软硬件/null 软硬兼施/null 软硬木/null 软碟/null 软碟机/null 软磁盘/null 软磁碟/null 软磨/null 软磨硬泡/null 软禁/null 软科学/null 软管/null 软箱/null 软糖/null 软组织/null 软绵绵/null 软绸/null 软缎/null 软肿/null 软脂/null 软脂酸/null 软脚病/null 软腭/null 软膏/null 软自由/null 软语/null 软调/null 软软/null 软钉子/null 软钢/null 软锰矿/null 软革/null 软食/null 软饭/null 软饮/null 软饮料/null 软香温玉/null 软驱/null 软骨/null 软骨头/null 软骨病/null 软骨轮/null 软骨鱼/null 软骨鱼类/null 软龈音/null 轰倒/null 轰击/null 轰动/null 轰动一时/null 轰动效应/null 轰响/null 轰声/null 轰炸/null 轰炸员/null 轰炸机/null 轰然/null 轰走/null 轰赶/null 轰趴/null 轰轰/null 轰轰烈烈/null 轰轰隆隆/null 轰隆/null 轰隆声/null 轰雷贯耳/null 轰鸣/null 轱轳/null 轱辘/null 轴上/null 轴丝/null 轴向/null 轴套/null 轴子/null 轴孔/null 轴对称/null 轴形/null 轴心/null 轴心国/null 轴承/null 轴承销/null 轴挡/null 轴旋转/null 轴架/null 轴流泵/null 轴状/null 轴率/null 轴瓦/null 轴突/null 轴突运输/null 轴箱/null 轴索/null 轴线/null 轴衬/null 轴距/null 轴轳千里/null 轶事/null 轶事遗闻/null 轶尘/null 轶类超群/null 轶群/null 轶群绝类/null 轶话/null 轶闻/null 轸念/null 轸恤/null 轸悼/null 轸方/null 轺车/null 轻世傲物/null 轻举/null 轻举妄动/null 轻事重报/null 轻于/null 轻于鸿毛/null 轻伤/null 轻佻/null 轻侮/null 轻便/null 轻便式/null 轻信/null 轻偎低傍/null 轻元素/null 轻兵/null 轻击/null 轻击区/null 轻击声/null 轻击棒/null 轻击球/null 轻则/null 轻剑/null 轻动远举/null 轻卒锐兵/null 轻印刷/null 轻取/null 轻口薄舌/null 轻叩/null 轻吞慢吐/null 轻吟/null 轻吹/null 轻咬/null 轻哼/null 轻唱/null 轻嘴薄舌/null 轻型/null 轻声/null 轻声细语/null 轻如/null 轻如鸿毛/null 轻子/null 轻工/null 轻工业/null 轻工业部/null 轻工产品/null 轻工局/null 轻工部/null 轻巧/null 轻帆船/null 轻度/null 轻弹/null 轻待/null 轻徭薄税/null 轻徭薄赋/null 轻微/null 轻快/null 轻慢/null 轻手/null 轻手轻脚/null 轻打/null 轻扬/null 轻抚/null 轻拂/null 轻拉/null 轻拍/null 轻按/null 轻捏/null 轻捷/null 轻推/null 轻描淡写/null 轻摇/null 轻撞/null 轻擦/null 轻放/null 轻效/null 轻敌/null 轻敲/null 轻文/null 轻易/null 轻机关枪/null 轻机枪/null 轻松/null 轻染/null 轻柔/null 轻歌/null 轻歌慢舞/null 轻歌曼舞/null 轻歌舞/null 轻武/null 轻武器/null 轻水/null 轻水反应堆/null 轻油/null 轻泻/null 轻泻剂/null 轻活/null 轻浪浮薄/null 轻浮/null 轻灵/null 轻点/null 轻烟/null 轻狂/null 轻率/null 轻生/null 轻生重义/null 轻症/null 轻盈/null 轻省/null 轻看/null 轻税/null 轻窕/null 轻笑/null 轻粉/null 轻纱/null 轻纺/null 轻纺产品/null 轻罚/null 轻罪/null 轻者/null 轻而易举/null 轻脆/null 轻舟/null 轻航/null 轻若鸿毛/null 轻蔑/null 轻薄/null 轻薄无知/null 轻薄无行/null 轻虑浅谋/null 轻装/null 轻装上阵/null 轻装前进/null 轻裘环带/null 轻裘肥马/null 轻视/null 轻触/null 轻言/null 轻言寡信/null 轻言细语/null 轻诺/null 轻诺寡信/null 轻财任侠/null 轻财好义/null 轻财好施/null 轻财敬士/null 轻财贵义/null 轻财重义/null 轻财重士/null 轻质/null 轻质石油/null 轻质石油产品/null 轻贱/null 轻跑/null 轻踏/null 轻身重义/null 轻车/null 轻车介士/null 轻车熟路/null 轻车简从/null 轻轨/null 轻软/null 轻轻/null 轻轻吹/null 轻重/null 轻重主次/null 轻重倒置/null 轻重失宜/null 轻重缓急/null 轻量/null 轻量级/null 轻金属/null 轻钢/null 轻闲/null 轻鞭/null 轻音/null 轻音乐/null 轻风/null 轻飘/null 轻飘飘/null 轻食/null 轻饶/null 轻饶素放/null 轻骑/null 轻骑兵/null 轻骑简从/null 载乘/null 载于/null 载人/null 载人轨道空间站/null 载伯德/null 载体/null 载入/null 载入史册/null 载入器/null 载去/null 载在/null 载客/null 载客车/null 载客量/null 载弹量/null 载携/null 载文/null 载明/null 载有/null 载机/null 载歌且舞/null 载歌载舞/null 载沉载浮/null 载波/null 载波通信/null 载流子/null 载湉/null 载满/null 载漪/null 载火/null 载物/null 载率/null 载畜量/null 载笑载言/null 载籍/null 载舟/null 载舟覆舟/null 载荷/null 载誉/null 载誉归来/null 载记/null 载货/null 载货汽车/null 载货物/null 载运/null 载送/null 载途/null 载道/null 载道怨生/null 载酒问字/null 载重/null 载重汽车/null 载重能力/null 载重车/null 载重量/null 载量/null 载频/null 载驰载驱/null 载驳货船运输/null 轿夫/null 轿子/null 轿椅/null 轿短量长/null 轿车/null 轿门/null 较不/null 较严/null 较为/null 较久/null 较之/null 较优/null 较低/null 较低级/null 较低脂/null 较佳/null 较冷/null 较前/null 较劣/null 较劲/null 较劲儿/null 较厚/null 较受/null 较喜爱/null 较场/null 较场口事件/null 较坏/null 较多/null 较大/null 较好/null 较如画一/null 较妥/null 较宽/null 较小/null 较少/null 较差/null 较年轻/null 较广/null 较弱/null 较强/null 较快/null 较慢/null 较早/null 较时量力/null 较易/null 较晚/null 较有/null 较松/null 较次/null 较武论文/null 较比/null 较浅/null 较深/null 较然/null 较略/null 较真/null 较真儿/null 较短/null 较短絜长/null 较窄/null 较粗/null 较紧/null 较繁/null 较经久/null 较美丽/null 较老/null 较肥/null 较若画一/null 较著/null 较贵/null 较轻/null 较近/null 较远/null 较重/null 较量/null 较长/null 较长絜短/null 较难/null 较高/null 较高级/null 辅仁大学/null 辅以/null 辅佐/null 辅修/null 辅助/null 辅助医疗/null 辅助性/null 辅助物/null 辅助线/null 辅助语/null 辅助说明/null 辅导/null 辅导人/null 辅导员/null 辅导班/null 辅导站/null 辅射/null 辅币/null 辅弼/null 辅弼之勋/null 辅政/null 辅料/null 辅机/null 辅条/null 辅盖/null 辅课/null 辅车唇齿/null 辅车相依/null 辅酶/null 辅音/null 辅音释放时间/null 辆数/null 辇毂之下/null 辈份/null 辈儿/null 辈出/null 辈分/null 辈子/null 辈数/null 辈数儿/null 辉光/null 辉南/null 辉县/null 辉映/null 辉格党人/null 辉煌/null 辉煌夺目/null 辉瑞/null 辉石/null 辉绿/null 辉绿岩/null 辉赫/null 辉钴矿/null 辉钼矿/null 辉铜矿/null 辉银矿/null 辉锑矿/null 辉长岩/null 辊子/null 辊轴/null 辍业/null 辍学/null 辍学率/null 辍工/null 辍朝/null 辍止/null 辍演/null 辍笔/null 辍耕/null 辍食吐哺/null 辎重/null 辐合/null 辐射/null 辐射仪/null 辐射体/null 辐射侦察/null 辐射分解/null 辐射剂量/null 辐射剂量率/null 辐射场/null 辐射对称/null 辐射尘/null 辐射强度/null 辐射性/null 辐射敏感性/null 辐射散射/null 辐射波/null 辐射热/null 辐射状/null 辐射率/null 辐射直接效应/null 辐射育种/null 辐射能/null 辐射警告标志/null 辐射计/null 辐射防护/null 辐散/null 辐条/null 辐照/null 辐轴/null 辐辏/null 辑录/null 辑睦/null 辑穆/null 辑要/null 辑集/null 辒车/null 输不起/null 输光/null 输入/null 输入品/null 输入法/null 输入端/null 输入系统/null 输入设备/null 输入速度/null 输入项/null 输出/null 输出品/null 输出管/null 输卵/null 输卵管/null 输卵管结扎/null 输去/null 输址/null 输墨装置/null 输家/null 输密码/null 输将/null 输尿管/null 输往/null 输掉/null 输氧/null 输水/null 输水管/null 输沙量/null 输油/null 输油管/null 输油管线/null 输液/null 输理/null 输电/null 输电线/null 输移/null 输精管/null 输精管结扎/null 输给/null 输者/null 输肝剖胆/null 输肝沥胆/null 输血/null 输诚/null 输赢/null 输运/null 输送/null 输送媒介/null 输送带/null 输钱/null 辔头/null 辕子/null 辕门/null 辕马/null 辖下/null 辖制/null 辖区/null 辖地/null 辖境/null 辖管/null 辗侧不寐/null 辗轧/null 辗轧声/null 辗转/null 辗转反侧/null 辗转相传/null 辘轳/null 辘辘/null 辙乱旗靡/null 辙口/null 辙环天下/null 辙痕/null 辙鲋之急/null 辚辚/null 辛丑/null 辛丑条约/null 辛亥/null 辛亥革命/null 辛伐他汀/null 辛劳/null 辛勤/null 辛勤劳动/null 辛勤工作/null 辛勤耕耘/null 辛卯/null 辛夷/null 辛巳/null 辛巴威/null 辛普森/null 辛普森一家/null 辛未/null 辛格/null 辛烷/null 辛烷值/null 辛苦/null 辛贝特/null 辛辛苦苦/null 辛辣/null 辛迪加/null 辛酉/null 辛酸/null 辛集/null 辜恩背义/null 辜恩负义/null 辜振甫/null 辜负/null 辞上/null 辞不意逮/null 辞不获命/null 辞不达意/null 辞世/null 辞严义正/null 辞严气正/null 辞丰意雄/null 辞书/null 辞书学/null 辞令/null 辞任/null 辞典/null 辞别/null 辞卸/null 辞去/null 辞句/null 辞呈/null 辞喻横生/null 辞多受少/null 辞学/null 辞官/null 辞尊居卑/null 辞岁/null 辞巧理拙/null 辞微旨远/null 辞掉/null 辞旧迎新/null 辞格/null 辞汇/null 辞汇学/null 辞法/null 辞海/null 辞源/null 辞灵/null 辞章/null 辞简意足/null 辞职/null 辞职书/null 辞聘/null 辞色/null 辞藻/null 辞行/null 辞让/null 辞谢/null 辞费/null 辞赋/null 辞退/null 辞锋/null 辟为/null 辟作/null 辟地开天/null 辟头/null 辟恶除患/null 辟易/null 辟芷/null 辟谣/null 辟谷/null 辟邪/null 辟雍/null 辟雍砚/null 辣乎乎/null 辣味/null 辣哈布/null 辣妹/null 辣子/null 辣彼/null 辣手/null 辣根/null 辣椒/null 辣椒仔/null 辣椒油/null 辣椒酱/null 辣汁/null 辣汤/null 辣的/null 辣胡椒/null 辣腌菜/null 辣菜/null 辣辣/null 辣酱/null 辣酱油/null 辨出/null 辨别/null 辨别力/null 辨别方向/null 辨别真假/null 辨客/null 辨家/null 辨明/null 辨明是非/null 辨析/null 辨正/null 辨清/null 辨白/null 辨色/null 辨认/null 辨认出/null 辨证/null 辨证法/null 辨证论治/null 辨识/null 辨读/null 辨音/null 辩个/null 辩争/null 辩别/null 辩别力/null 辩口利舌/null 辩口利辞/null 辩士/null 辩子/null 辩家/null 辩才/null 辩才天/null 辩才无碍/null 辩护/null 辩护人/null 辩护士/null 辩护律师/null 辩护权/null 辩护者/null 辩明/null 辩正/null 辩法/null 辩状/null 辩白/null 辩称/null 辩答/null 辩者不善/null 辩解/null 辩解书/null 辩解文/null 辩解者/null 辩认/null 辩论/null 辩论会/null 辩论家/null 辩论术/null 辩证/null 辩证关系/null 辩证唯物主义/null 辩证唯物论/null 辩证家/null 辩证施治/null 辩证法/null 辩证统一/null 辩证逻辑/null 辩词/null 辩诬/null 辩说/null 辩辞/null 辩难/null 辩题/null 辩驳/null 辫儿/null 辫子/null 辰光/null 辰时/null 辰星/null 辰溪/null 辰砂/null 辰龙/null 辱名/null 辱命/null 辱国/null 辱国丧师/null 辱没/null 辱身败名/null 辱门败户/null 辱骂/null 辱骂者/null 边上/null 边墙/null 边儿/null 边关/null 边区/null 边卡/null 边厢/null 边哭/null 边地/null 边坝/null 边城/null 边塞/null 边境/null 边境冲突/null 边境地区/null 边境线/null 边境贸易/null 边声/null 边头/null 边寨/null 边币/null 边带/null 边幅/null 边干/null 边干边学/null 边度/null 边庭/null 边式/null 边形/null 边患/null 边想/null 边整边改/null 边料/null 边旁/null 边材/null 边框/null 边民/null 边沿/null 边海/null 边状/null 边界/null 边界冲突/null 边界层/null 边界线/null 边疆/null 边疆地区/null 边疆政策/null 边看/null 边窗/null 边站/null 边线/null 边缘/null 边缘化/null 边缘地区/null 边缘学科/null 边缘海/null 边缘科学/null 边衅/null 边行/null 边裔/null 边角/null 边角废料/null 边角料/null 边角科/null 边说/null 边贸/null 边走/null 边距/null 边远/null 边远地区/null 边鄙/null 边锋/null 边镜/null 边长/null 边门/null 边防/null 边防军/null 边防前线/null 边防哨所/null 边防战士/null 边防站/null 边防警察/null 边防部队/null 边际/null 边际成本/null 边际报酬/null 边陲/null 边音/null 边饰/null 边鼓/null 辽东/null 辽东半岛/null 辽中/null 辽代/null 辽史/null 辽国/null 辽宁古盗鸟/null 辽宁大学/null 辽沈战役/null 辽河/null 辽海/null 辽源/null 辽西/null 辽远/null 辽金/null 辽阔/null 辽阳/null 达・芬奇/null 达不到/null 达于极点/null 达人/null 达人知命/null 达人立人/null 达仁/null 达仁乡/null 达令/null 达克龙/null 达兰萨拉/null 达到/null 达到目标/null 达到目的/null 达到顶点/null 达到高潮/null 达卜/null 达卡/null 达味/null 达味王/null 达喀尔/null 达噜噶齐/null 达因/null 达坂城/null 达坂城区/null 达士通人/null 达奚/null 达姆弹/null 达孜/null 达官/null 达官显宦/null 达官显贵/null 达官贵人/null 达尔富尔/null 达尔文/null 达尔文主义/null 达尔文学徒/null 达尔文学说/null 达尔文港/null 达尔福尔/null 达尼亚/null 达州/null 达德利/null 达悟族/null 达意/null 达成/null 达成协议/null 达拉斯/null 达拉特/null 达摩/null 达文西密码/null 达斡尔/null 达斡尔语/null 达日/null 达旦/null 达朗贝尔/null 达权知变/null 达权通变/null 达标/null 达沃斯/null 达沃斯论坛/null 达特茅斯/null 达特茅斯学院/null 达科塔・芬妮/null 达累斯萨拉姆/null 达罗毗荼/null 达美/null 达致/null 达芬奇/null 达芬奇密码/null 达芬西/null 达茂旗/null 达菲/null 达观/null 达贸/null 达赖/null 达赖喇嘛/null 达达尼尔海峡/null 达阵/null 达马提亚/null 达鲁花赤/null 迁乔之望/null 迁入/null 迁出/null 迁到/null 迁善改过/null 迁善远罪/null 迁地/null 迁安/null 迁客骚人/null 迁就/null 迁居/null 迁居移民/null 迁延/null 迁往/null 迁徙/null 迁怒/null 迁怒于人/null 迁思回虑/null 迁栖/null 迁流/null 迁离/null 迁移/null 迁移性/null 迁移者/null 迁至/null 迁西/null 迁走/null 迁都/null 迁飞/null 迂儒/null 迂回/null 迂回奔袭/null 迂回曲折/null 迂夫子/null 迂怪不经/null 迂执/null 迂拘/null 迂拙/null 迂曲/null 迂气/null 迂滞/null 迂直/null 迂磨/null 迂缓/null 迂腐/null 迂见/null 迂讷/null 迂论/null 迂谈阔论/null 迂远/null 迂阔/null 迄今/null 迄今为止/null 迄未/null 迄未成功/null 迄某时/null 迄根/null 迄至/null 迅即/null 迅急/null 迅捷/null 迅猛/null 迅猛发展/null 迅疾/null 迅速/null 迅速发展/null 迅速增长/null 迅速蔓延/null 迅雷/null 迅雷不及掩耳/null 迅风暴雨/null 过一会儿/null 过不下/null 过不去/null 过不多久/null 过不多时/null 过不惯/null 过世/null 过严/null 过久/null 过乱/null 过了/null 过了头/null 过了片刻/null 过了这村没这店/null 过于/null 过云雨/null 过五关斩六将/null 过亮/null 过人/null 过从/null 过从甚密/null 过付/null 过价/null 过份/null 过份简单化/null 过低/null 过儿/null 过入/null 过共析钢/null 过关/null 过关斩将/null 过冬/null 过冬作物/null 过冷/null 过分/null 过剩/null 过劳/null 过劳死/null 过化存神/null 过午/null 过半/null 过半数/null 过厅/null 过去/null 过去了/null 过去事/null 过去几天/null 过去分词/null 过去式/null 过去时/null 过去经验/null 过右/null 过后/null 过场/null 过埠/null 过堂/null 过堂风/null 过境/null 过境签证/null 过多/null 过夜/null 过大/null 过天/null 过失/null 过头/null 过头话/null 过奖/null 过好/null 过客/null 过家家/null 过宽/null 过密/null 过小/null 过少/null 过屠门而大嚼/null 过山车/null 过山龙/null 过帐/null 过年/null 过度/null 过度关怀/null 过度学习到的/null 过度紧张/null 过庭/null 过庭之训/null 过庭录/null 过强/null 过当/null 过录/null 过往/null 过往行人/null 过得/null 过得去/null 过得惯/null 过得硬/null 过心/null 过快/null 过急/null 过惯/null 过意/null 过意不去/null 过慢/null 过户/null 过房/null 过手/null 过招/null 过敏/null 过敏原/null 过敏反应/null 过敏性/null 过敏性休克/null 过敏性反应/null 过敏症/null 过数/null 过日子/null 过早/null 过早死亡/null 过早起爆/null 过时/null 过时不候/null 过旺/null 过晌/null 过晚/null 过望/null 过期/null 过期作废/null 过来/null 过来人/null 过松/null 过档/null 过桥/null 过桥抽板/null 过桥拆桥/null 过死/null 过气/null 过氧/null 过氧化/null 过氧化氢/null 过氧化氢酶/null 过氧化物/null 过氧化苯甲酰/null 过氧物酶体/null 过氧苯甲酰/null 过江之鲫/null 过河/null 过河拆桥/null 过活/null 过海/null 过淋/null 过深/null 过渡/null 过渡内阁/null 过渡到/null 过渡形式/null 过渡性/null 过渡性贷款/null 过渡政府/null 过渡时期/null 过渡贷款/null 过渡金属/null 过滤/null 过滤嘴香烟/null 过滤器/null 过滥/null 过激/null 过激派/null 过激论/null 过火/null 过热/null 过热化/null 过熟/null 过犯/null 过犹不及/null 过猛/null 过甚/null 过甚其词/null 过生日/null 过生活/null 过电压/null 过瘾/null 过盛必衰/null 过目/null 过目不忘/null 过目成诵/null 过眼/null 过眼烟云/null 过着/null 过短/null 过硬/null 过磅/null 过磅员/null 过磅处/null 过磷酸钙/null 过礼/null 过福/null 过秤/null 过秤员/null 过稀/null 过程/null 过程中/null 过程比终点更美/null 过税/null 过窄/null 过站大厅/null 过筛/null 过紧/null 过繁/null 过线/null 过细/null 过继/null 过而能改/null 过耳秋风/null 过肩/null 过膝/null 过节/null 过节儿/null 过虑/null 过街/null 过街天桥/null 过街柳/null 过街楼/null 过誉/null 过访/null 过话/null 过谦/null 过贵/null 过费/null 过路/null 过路人/null 过路财神/null 过路费/null 过轻/null 过载/null 过过/null 过迟/null 过速/null 过逾/null 过道/null 过重/null 过量/null 过错/null 过长/null 过门/null 过门不入/null 过门儿/null 过问/null 过隙白驹/null 过食/null 过饱/null 过饱和/null 过马路/null 过高/null 迈丹尼克集中营/null 迈克尔/null 迈克尔・乔丹/null 迈克尔・克莱顿/null 迈克尔・杰克逊/null 迈入/null 迈凯伊/null 迈凯轮/null 迈出/null 迈向/null 迈巴赫/null 迈开/null 迈往/null 迈方步/null 迈步/null 迈着/null 迈科里/null 迈赫迪/null 迈赫迪军/null 迈越常流/null 迈过/null 迈进/null 迈阿密/null 迈阿密滩/null 迎上/null 迎亲/null 迎候/null 迎出/null 迎击/null 迎刃而解/null 迎合/null 迎头/null 迎头儿/null 迎头打击/null 迎头痛击/null 迎头赶上/null 迎奸卖俏/null 迎娶/null 迎客/null 迎宾/null 迎宾曲/null 迎宾馆/null 迎意承旨/null 迎战/null 迎接/null 迎接挑战/null 迎敌/null 迎新/null 迎新送故/null 迎新送旧/null 迎春/null 迎春花/null 迎来/null 迎来送往/null 迎江/null 迎江区/null 迎泽/null 迎泽区/null 迎火/null 迎着/null 迎神/null 迎神赛会/null 迎考/null 迎著/null 迎词/null 迎辞/null 迎迓/null 迎送/null 迎面/null 迎面而来/null 迎风/null 迎风开/null 迎风招展/null 迎风飘舞/null 运乖时蹇/null 运交/null 运人/null 运以/null 运价/null 运作/null 运使/null 运入/null 运兵车/null 运出/null 运出运费/null 运到/null 运力/null 运动/null 运动中/null 运动会/null 运动健将/null 运动员/null 运动场/null 运动学/null 运动定律/null 运动家/null 运动性/null 运动战/null 运动方程/null 运动服/null 运动病/null 运动神经/null 运动者/null 运动衣/null 运动衫/null 运动通信/null 运动量/null 运动队/null 运动防御/null 运动鞋/null 运动项目/null 运势/null 运匠/null 运十/null 运单/null 运命/null 运回/null 运城/null 运城地区/null 运将/null 运庆/null 运往/null 运思/null 运抵/null 运拙时乖/null 运拙时艰/null 运掉自如/null 运搬/null 运数/null 运斤成风/null 运智铺谋/null 运来/null 运气/null 运气不佳/null 运水/null 运河/null 运河区/null 运油/null 运煤/null 运煤船/null 运球/null 运用/null 运用之妙在于一心/null 运用之妙存乎一心/null 运用于/null 运用自如/null 运神/null 运程/null 运笔/null 运筹/null 运筹决胜/null 运筹千里/null 运筹学/null 运筹帷幄/null 运筹帷幄之中/null 运算/null 运算上/null 运算器/null 运算方法/null 运算法则/null 运算环境/null 运算符/null 运粮/null 运脚/null 运至/null 运营/null 运营商/null 运行/null 运行方式/null 运行时/null 运行时错误/null 运行机制/null 运行状况/null 运行着/null 运计铺谋/null 运货/null 运货单/null 运货员/null 运货马车/null 运费/null 运走/null 运蹇时乖/null 运转/null 运载/null 运载火箭/null 运载量/null 运输/null 运输业/null 运输体制/null 运输勤务/null 运输工具/null 运输机/null 运输线/null 运输统计/null 运输网/null 运输者/null 运输舰/null 运输船/null 运输量/null 运达/null 运进/null 运送/null 运送者/null 运道/null 运量/null 运销/null 运马车/null 近一年来/null 近一点/null 近世/null 近东/null 近两/null 近两年/null 近义词/null 近乎/null 近乎同步/null 近乎同步数位阶层/null 近乎零/null 近于/null 近于零/null 近些/null 近些年/null 近些年来/null 近些日子/null 近亲/null 近亲交配/null 近亲繁殖/null 近人/null 近代/null 近代化/null 近代史/null 近似/null 近似值/null 近似商/null 近似等级/null 近似解/null 近似计算/null 近位/null 近体/null 近体诗/null 近作/null 近便/null 近光灯/null 近况/null 近几个月/null 近几周来/null 近几天/null 近几天来/null 近几年/null 近几年来/null 近利/null 近前/null 近卫/null 近卫军/null 近卫文麿/null 近古/null 近因/null 近在/null 近在咫尺/null 近在眉睫/null 近地/null 近地天体/null 近地点/null 近墨/null 近墨者黑/null 近处/null 近岁/null 近岸/null 近年/null 近年来/null 近忧/null 近悦远来/null 近情/null 近战/null 近打/null 近打河/null 近支/null 近旁/null 近日/null 近日来/null 近日点/null 近景/null 近月点/null 近期/null 近期中/null 近期内/null 近朱者赤/null 近朱者赤近墨者黑/null 近朱近墨/null 近来/null 近极/null 近水/null 近水楼台/null 近水楼台先得月/null 近海/null 近海岸/null 近火/null 近火先焦/null 近点/null 近照/null 近现代史/null 近畿地方/null 近百年来/null 近的/null 近看/null 近程/null 近端胞浆/null 近臣/null 近色/null 近视/null 近视眼/null 近视眼镜/null 近距/null 近距离/null 近路/null 近迫作业/null 近道/null 近邻/null 近郊/null 近郊区/null 近闻/null 近陆/null 近零/null 近顷/null 返乡/null 返于/null 返修/null 返利/null 返券黄牛/null 返台/null 返回/null 返回地面/null 返国/null 返城/null 返家/null 返岗/null 返工/null 返本还源/null 返朴归真/null 返校/null 返正拨乱/null 返港/null 返潮/null 返点/null 返照/null 返照会光/null 返璞归真/null 返省/null 返碱/null 返祖/null 返祖现象/null 返程/null 返老归童/null 返老还童/null 返聘/null 返航/null 返躬内省/null 返还/null 返还占有/null 返送/null 返销/null 返销粮/null 返防/null 返青/null 返驶/null 还不/null 还不如/null 还为/null 还乡/null 还乡团/null 还书/null 还价/null 还休/null 还会/null 还俗/null 还借款/null 还债/null 还偿/null 还元返本/null 还击/null 还到/null 还包括/null 还原/null 还原剂/null 还原染料/null 还原焰/null 还去/null 还口/null 还可/null 还可与/null 还可以/null 还可能/null 还向/null 还嘴/null 还在/null 还好/null 还家/null 还将/null 还少/null 还师/null 还帐/null 还席/null 还年轻/null 还应/null 还情/null 还愿/null 还我/null 还手/null 还把/null 还报/null 还押/null 还政/null 还是/null 还有/null 还未/null 还本/null 还本付息/null 还款/null 还没/null 还没有/null 还治其人之身/null 还治其身/null 还淳反朴/null 还淳返朴/null 还清/null 还玩/null 还珠合浦/null 还珠返壁/null 还用/null 还礼/null 还童/null 还笑/null 还算/null 还算好/null 还给/null 还能/null 还行/null 还要/null 还说/null 还账/null 还贷/null 还钱/null 还长/null 还阳/null 还需/null 还须/null 还魂/null 还魂橡胶/null 还魂纸/null 这一下/null 这一招/null 这一来/null 这一次/null 这一点/null 这一类/null 这一阵子/null 这件/null 这下/null 这下子/null 这个/null 这个月/null 这么/null 这么些/null 这么回事/null 这么样/null 这么点儿/null 这么着/null 这些/null 这些个/null 这些年/null 这些年来/null 这人/null 这以后/null 这会儿/null 这位/null 这儿/null 这几天/null 这几天来/null 这几年/null 这几年来/null 这副/null 这双/null 这句话/null 这号/null 这咱/null 这回/null 这天/null 这太/null 这套/null 这封/null 这山望着那山高/null 这幅/null 这年头/null 这把/null 这搭/null 这早晚儿/null 这时/null 这时候/null 这是/null 这期/null 这本/null 这条/null 这样/null 这样子/null 这样一来/null 这样做/null 这次危机/null 这番话/null 这种/null 这程子/null 这篇/null 这类/null 这般/null 这边/null 这边儿/null 这还了得/null 这里/null 这钱/null 这阵儿/null 这阵子/null 这麽/null 进一层/null 进一步/null 进一步说/null 进不去/null 进中/null 进了/null 进了天堂/null 进京/null 进价/null 进位/null 进位制/null 进位法/null 进修/null 进修班/null 进修生/null 进入/null 进入者/null 进关/null 进兵/null 进军/null 进军号/null 进军西藏/null 进出/null 进出口/null 进出口公司/null 进出境/null 进击/null 进刀/null 进到/null 进制/null 进化/null 进化论/null 进午餐/null 进占/null 进厂/null 进去/null 进发/null 进取/null 进取心/null 进取性/null 进取精神/null 进口/null 进口商/null 进口商品/null 进口国/null 进口税/null 进口货/null 进口量/null 进口额/null 进可替不/null 进可替否/null 进场/null 进城/null 进士/null 进学/null 进宫/null 进寸退尺/null 进尺/null 进屋/null 进展/null 进山/null 进帐/null 进度/null 进度表/null 进得去/null 进德修业/null 进抵/null 进接/null 进接服务/null 进攻/null 进攻性/null 进攻者/null 进料/null 进早餐/null 进来/null 进来者/null 进栈/null 进款/null 进步/null 进步主义/null 进步事业/null 进步人士/null 进步力量/null 进步号/null 进气口/null 进水/null 进水口/null 进水闸/null 进法/null 进洞/null 进深/null 进港/null 进犯/null 进献/null 进球/null 进益/null 进程/null 进站/null 进纸/null 进线/null 进给/null 进给量/null 进者/null 进而/null 进而言之/null 进而讲/null 进行/null 进行中/null 进行交易/null 进行到底/null 进行性/null 进行性交/null 进行性失语/null 进行批评/null 进行改革/null 进行教育/null 进行曲/null 进行检查/null 进行着/null 进行研究/null 进行编程/null 进行谈判/null 进行通信/null 进补/null 进袭/null 进见/null 进言/null 进贡/null 进贤/null 进贤任能/null 进账/null 进货/null 进身/null 进身之阶/null 进进出出/null 进迫/null 进退/null 进退不得/null 进退两难/null 进退中绳/null 进退为难/null 进退失据/null 进退存亡/null 进退无据/null 进退无路/null 进退无门/null 进退有常/null 进退维谷/null 进退自如/null 进退首鼠/null 进逼/null 进道若蜷/null 进道若退/null 进酒/null 进销/null 进锐退速/null 进门/null 进阶/null 进项/null 进食/null 进餐/null 进香/null 进香客/null 进驻/null 远不及/null 远不可及/null 远不间亲/null 远东/null 远东地区/null 远东豹/null 远为/null 远举高飞/null 远了/null 远交近攻/null 远亲/null 远亲不如近邻/null 远人/null 远侧/null 远光灯/null 远别/null 远到/null 远劳/null 远升/null 远去/null 远及/null 远古/null 远古文化/null 远因/null 远图长虑/null 远在/null 远在千里近在眼前/null 远在天边/null 远地/null 远地点/null 远处/null 远大/null 远大理想/null 远天/null 远嫁/null 远安/null 远客/null 远害全身/null 远射/null 远山/null 远引曲喻/null 远引深潜/null 远征/null 远征军/null 远心点/null 远志/null 远愁近虑/null 远房/null 远扬/null 远投/null 远方/null 远方来鸿/null 远日点/null 远景/null 远景规划/null 远月点/null 远望/null 远期/null 远期合约/null 远未/null 远未解决/null 远比/null 远水不救近火/null 远水不解近渴/null 远水救不了近火/null 远水救不得近渴/null 远水难救近火/null 远洋/null 远洋渔业/null 远洋航行/null 远洋货轮/null 远洋轮船/null 远洋运输/null 远涉/null 远涉重洋/null 远渡重洋/null 远游/null 远溯/null 远火/null 远点/null 远照/null 远略/null 远的/null 远看/null 远眺/null 远祖/null 远离/null 远程/null 远程导弹/null 远程登录/null 远程监控/null 远程行军/null 远端/null 远端胞浆/null 远籍/null 远缘/null 远缘杂交/null 远者/null 远胄/null 远胜/null 远胜于/null 远胜过/null 远至/null 远航/null 远虑/null 远虑深思/null 远虑深计/null 远行/null 远见/null 远见卓识/null 远视/null 远视眼/null 远视眼镜/null 远视者/null 远识/null 远谋/null 远走/null 远走高飞/null 远赴/null 远超过/null 远足/null 远足者/null 远距/null 远距离/null 远距离监视/null 远路/null 远达/null 远近/null 远远/null 远途/null 远遁/null 远道/null 远道而来/null 远避/null 远邻/null 远郊/null 远郊区/null 远销/null 远门/null 远门近枝/null 远隔/null 远隔千里/null 远隔重洋/null 远非/null 远非如此/null 违令/null 违例/null 违信背约/null 违停/null 违傲/null 违利赴名/null 违别/null 违反/null 违反宪法/null 违反者/null 违命/null 违和/null 违天害理/null 违天悖理/null 违天逆理/null 违失/null 违宪/null 违害就利/null 违强凌弱/null 违强陵弱/null 违心/null 违心之言/null 违心之论/null 违忤/null 违恩负义/null 违悖/null 违戾/null 违抗/null 违拗/null 违时绝俗/null 违标/null 违法/null 违法乱纪/null 违法必究/null 违法活动/null 违法犯罪/null 违法者/null 违法行为/null 违犯/null 违犯者/null 违理/null 违碍/null 违禁/null 违禁品/null 违禁物品/null 违禁药品/null 违章/null 违章建筑/null 违章者/null 违约/null 违约金/null 违纪/null 违纪行为/null 违者/null 违者必究/null 违者罚款/null 违背/null 违背者/null 违规/null 违言/null 违误/null 违逆/null 连三并四/null 连三接二/null 连三接四/null 连上/null 连个/null 连中三元/null 连串/null 连乘/null 连书/null 连云/null 连云区/null 连云叠嶂/null 连云港/null 连亘/null 连人/null 连他/null 连任/null 连体/null 连体双胞胎/null 连体婴/null 连体婴儿/null 连作/null 连写/null 连击/null 连分数/null 连到/null 连动/null 连动债/null 连区/null 连南县/null 连卺/null 连县/null 连发/null 连句/null 连台本戏/null 连史纸/null 连号/null 连合/null 连同/null 连名/null 连哄带骗/null 连响/null 连在/null 连坐/null 连城/null 连城之珍/null 连城之璧/null 连城之阶/null 连声/null 连夜/null 连天/null 连天烽火/null 连奔带跑/null 连字号/null 连字符/null 连字符号/null 连宵/null 连射/null 连属/null 连山/null 连山区/null 连山县/null 连州/null 连带/null 连带责任/null 连平/null 连年/null 连年不断/null 连心/null 连忙/null 连想/null 连想都不敢想/null 连成/null 连成一片/null 连我/null 连战/null 连战连胜/null 连手/null 连打/null 连拱坝/null 连排/null 连接/null 连接口/null 连接号/null 连接器/null 连接埠/null 连接框/null 连接至/null 连接词/null 连接酶/null 连撞/null 连敲/null 连日/null 连日来/null 连有/null 连朝接夕/null 连本带利/null 连杆/null 连杆机构/null 连枝分叶/null 连枝带叶/null 连枝比翼/null 连枷/null 连根/null 连横/null 连歌/null 连比/null 连江/null 连滚带爬/null 连片/null 连环/null 连环保/null 连环图/null 连环杀手/null 连环画/null 连环计/null 连珠/null 连珠合璧/null 连珠炮/null 连理/null 连理草/null 连璧/null 连用/null 连番/null 连看都不看/null 连着/null 连种/null 连穿/null 连立/null 连章累牍/null 连笔/null 连篇/null 连篇累幅/null 连篇累牍/null 连类/null 连类比物/null 连系/null 连系词/null 连系辞/null 连累/null 连线/null 连线作业/null 连结/null 连结主义/null 连结器/null 连结环/null 连结者/null 连结词/null 连络/null 连络站/null 连续/null 连续不断/null 连续介质力学/null 连续作战/null 连续光谱/null 连续函数/null 连续分布/null 连续剧/null 连续区/null 连续变调/null 连续性/null 连续打/null 连续犯/null 连续监视/null 连续统假设/null 连续译码阶段/null 连续集/null 连续音/null 连绵/null 连绵不断/null 连绵不绝/null 连绵词/null 连绵起伏/null 连缀/null 连缀动词/null 连署/null 连翘/null 连翩/null 连耞/null 连胜/null 连脚裤/null 连茬/null 连衡/null 连衣裙/null 连衽成帷/null 连袂/null 连裆裤/null 连裤袜/null 连襟/null 连词/null 连说/null 连读/null 连败/null 连贯/null 连贯性/null 连赛/null 连赢/null 连起/null 连跑/null 连踢带打/null 连身/null 连轴转/null 连载/null 连输/null 连运/null 连连/null 连选连任/null 连通/null 连通器/null 连通性/null 连通管/null 连遭/null 连配/null 连铸/null 连销店/null 连锁/null 连锁功能/null 连锁反应/null 连锁商店/null 连锁店/null 连锁状/null 连锁着/null 连锅端/null 连镳并轸/null 连长/null 连闯/null 连队/null 连阴天/null 连阶累任/null 连除/null 连音/null 连骨肉/null 连鬓胡子/null 连鸡/null 迟了/null 迟于/null 迟交/null 迟产/null 迟做/null 迟到/null 迟到者/null 迟发性损伤/null 迟回/null 迟回观望/null 迟延/null 迟延物/null 迟慢/null 迟报/null 迟效/null 迟效肥料/null 迟於/null 迟早/null 迟暮/null 迟浩田/null 迟滞/null 迟疑/null 迟疑不决/null 迟疑未决/null 迟睡/null 迟缓/null 迟脉/null 迟误/null 迟迟/null 迟钝/null 迟钝人/null 迟钝化/null 迟顿/null 迢而不作/null 迢迢/null 迢迢千里/null 迤逦/null 迤逦不绝/null 迥乎不同/null 迥异/null 迥然/null 迥然不同/null 迥迥/null 迥隔霄壤/null 迦南/null 迦叶佛/null 迦太基/null 迦持/null 迩来/null 迪伦/null 迪克/null 迪厅/null 迪吧/null 迪士尼/null 迪士尼乐园/null 迪奥/null 迪庄/null 迪庆州/null 迪庆藏族自治州/null 迪戈・加西亚岛/null 迪戈加西亚岛/null 迪拜/null 迪斯尼/null 迪斯尼乐园/null 迪斯科/null 迪斯科厅/null 迪斯科吧/null 迪斯雷利/null 迫不及待/null 迫不得已/null 迫不急待/null 迫临/null 迫于/null 迫于眉睫/null 迫令/null 迫使/null 迫促/null 迫击炮/null 迫切/null 迫切希望/null 迫切性/null 迫切要求/null 迫切需要/null 迫在/null 迫在眉睫/null 迫害/null 迫害者/null 迫敌/null 迫紧/null 迫胁/null 迫至/null 迫视/null 迫近/null 迫问/null 迫降/null 迭代/null 迭加/null 迭印/null 迭层/null 迭影/null 迭次/null 迭片/null 迭瓦癣/null 迭盖/null 迭荡放言/null 迭见杂出/null 迭起/null 迭部/null 迭障/null 迭韵/null 迮径/null 述作/null 述及/null 述心/null 述法/null 述职/null 述论/null 述评/null 述词/null 述语/null 述说/null 迳向/null 迳庭/null 迳流/null 迳直/null 迳自/null 迳赛/null 迳迹/null 迷上/null 迷不知返/null 迷乱/null 迷了/null 迷于/null 迷人/null 迷人眼目/null 迷住/null 迷你/null 迷你品/null 迷你型/null 迷你裙/null 迷信/null 迷信活动/null 迷失/null 迷失方向/null 迷嬉装/null 迷宫/null 迷宫般/null 迷幻/null 迷幻剂/null 迷幻药/null 迷彩/null 迷彩服/null 迷念/null 迷思/null 迷恋/null 迷惑/null 迷惑不解/null 迷惑人/null 迷惑龙/null 迷惘/null 迷朦/null 迷梦/null 迷津/null 迷漫/null 迷留没乱/null 迷盲/null 迷瞪/null 迷离/null 迷离惝恍/null 迷离扑朔/null 迷离马虎/null 迷糊/null 迷而不反/null 迷而不返/null 迷而知返/null 迷航/null 迷花眼笑/null 迷茫/null 迷蒙/null 迷藏/null 迷误/null 迷走/null 迷走神经/null 迷路/null 迷踪失路/null 迷踪罗汉拳/null 迷迭香/null 迷迷糊糊/null 迷途/null 迷途知反/null 迷途知返/null 迷醉/null 迷阵/null 迷阵似/null 迷雾/null 迷魂/null 迷魂夺魄/null 迷魂汤/null 迷魂阵/null 迷魂香/null 迷鸟/null 迸出/null 迸出物/null 迸发/null 迸发出/null 迸流/null 迸裂/null 迹地/null 迹线/null 迹证/null 迹象/null 追上/null 追亡逐北/null 追交/null 追任/null 追偶/null 追光灯/null 追兵/null 追减/null 追击/null 追到/null 追剿/null 追加/null 追及/null 追叙/null 追名逐利/null 追命/null 追回/null 追奔逐北/null 追客/null 追寻/null 追寻现代中国/null 追封/null 追尊/null 追尾/null 追底/null 追征/null 追忆/null 追念/null 追怀/null 追思/null 追思会/null 追悔/null 追悔不及/null 追悔何及/null 追悔莫及/null 追悼/null 追悼会/null 追想/null 追打/null 追抓/null 追捕/null 追捧/null 追授/null 追昔/null 追星/null 追星族/null 追期/null 追本穷源/null 追本穹源/null 追杀/null 追来/null 追查/null 追查出/null 追根/null 追根求源/null 追根溯源/null 追根究底/null 追根究底儿/null 追根问底/null 追欢买笑/null 追欢取乐/null 追歼/null 追比/null 追求/null 追溯/null 追猎/null 追猎声/null 追着/null 追究/null 追究刑事责任/null 追究责任/null 追索/null 追索权/null 追缉/null 追缴/null 追者/null 追肥/null 追脏/null 追荐/null 追获/null 追补/null 追认/null 追讨/null 追记/null 追诉/null 追诉时效/null 追询/null 追购/null 追赃/null 追赔/null 追赠/null 追赶/null 追赶者/null 追踪/null 追踪号码/null 追踪报导/null 追踪报道/null 追踪觅影/null 追踪觅迹/null 追踪调查/null 追蹑/null 追过/null 追还/null 追远慎终/null 追述/null 追逐/null 追逐赛/null 追逼/null 追问/null 追随/null 追随者/null 追风捕影/null 追风觅影/null 追风蹑影/null 追风逐电/null 追驷不及/null 追魂摄魄/null 退一步/null 退一步讲/null 退一步说/null 退下/null 退下金/null 退亲/null 退付/null 退任/null 退伍/null 退伍军人/null 退伍军人节/null 退休/null 退休军官/null 退休制度/null 退休工人/null 退休干部/null 退休条例/null 退休者/null 退休费/null 退休金/null 退伙/null 退佃/null 退位/null 退保/null 退党/null 退入/null 退关/null 退兵/null 退养/null 退冰/null 退出/null 退出运行/null 退到/null 退化/null 退却/null 退去/null 退号/null 退后/null 退回/null 退场/null 退坡/null 退堂/null 退婚/null 退学/null 退守/null 退定/null 退居/null 退居二线/null 退席/null 退庭/null 退役/null 退役军官/null 退役制度/null 退役安置/null 退徙三舍/null 退思园/null 退思补过/null 退房/null 退押/null 退换/null 退换货/null 退掉/null 退敌/null 退料/null 退有后言/null 退朝/null 退格/null 退格键/null 退款/null 退步/null 退水/null 退汇/null 退浆/null 退潮/null 退火/null 退烧/null 退烧药/null 退热/null 退热药/null 退片/null 退现/null 退磁/null 退票/null 退离/null 退租/null 退税/null 退稿/null 退绕/null 退给/null 退缩/null 退缩不前/null 退而求其次/null 退耕还林/null 退职/null 退股/null 退色/null 退落/null 退行/null 退行性/null 退补/null 退让/null 退败/null 退货/null 退贴金/null 退赃/null 退赔/null 退走/null 退路/null 退还/null 退避/null 退避三舍/null 退钱/null 退隐/null 退青/null 退黑激素/null 送一/null 送上/null 送上太空/null 送上轨道/null 送与/null 送丧/null 送交/null 送亲/null 送人/null 送人情/null 送以/null 送信/null 送信人/null 送信儿/null 送入/null 送养/null 送出/null 送别/null 送到/null 送医/null 送去/null 送命/null 送回/null 送子/null 送存/null 送审/null 送客/null 送客台/null 送展/null 送岁/null 送往/null 送往事居/null 送往迎来/null 送情/null 送报/null 送报生/null 送掉/null 送故迎新/null 送方/null 送旧迎新/null 送时/null 送暖偷寒/null 送服/null 送来/null 送检/null 送死/null 送殡/null 送毕/null 送气/null 送气音/null 送煤/null 送电/null 送眼流眉/null 送礼/null 送礼会/null 送秋波/null 送稿/null 送粮/null 送终/null 送经/null 送给/null 送了/null 送股/null 送至/null 送葬/null 送行/null 送评/null 送话/null 送话器/null 送货/null 送货上门/null 送货人/null 送货到家/null 送货单/null 送走/null 送达/null 送返/null 送还/null 送进/null 送送/null 送钱/null 送错/null 送风机/null 送餐/null 送验/null 适中/null 适于/null 适人/null 适从/null 适以相成/null 适任/null 适体/null 适值/null 适切/null 适口/null 适可/null 适可而止/null 适合/null 适合于/null 适婚/null 适婚期/null 适存度/null 适宜/null 适宜于/null 适宜性/null 适应/null 适应力/null 适应性/null 适应症/null 适应者/null 适应能力/null 适度/null 适度微调/null 适当/null 适当性/null 适得/null 适得其反/null 适意/null 适感/null 适才/null 适於/null 适时/null 适格/null 适温/null 适用/null 适用于/null 适用性/null 适用技术/null 适用范围/null 适者生存/null 适航/null 适航性/null 适衡/null 适足/null 适逢/null 适逢其会/null 适配/null 适配器/null 适配层/null 适量/null 适销/null 适销对路/null 适间/null 适食性/null 适龄/null 逃不出/null 逃不掉/null 逃不过/null 逃之夭夭/null 逃亡/null 逃亡者/null 逃债/null 逃入/null 逃兵/null 逃出/null 逃到/null 逃北者/null 逃匿/null 逃却/null 逃反/null 逃命/null 逃回/null 逃奔/null 逃婚/null 逃学/null 逃学生/null 逃学者/null 逃家/null 逃席/null 逃开/null 逃归/null 逃往/null 逃掉/null 逃散/null 逃术/null 逃漏/null 逃灾躲难/null 逃灾避难/null 逃犯/null 逃狱/null 逃生/null 逃禄/null 逃离/null 逃税/null 逃税天堂/null 逃税者/null 逃窜/null 逃窜无踪/null 逃缴/null 逃罪/null 逃脱/null 逃脱术/null 逃脱法/null 逃脱者/null 逃荒/null 逃课/null 逃走/null 逃跑/null 逃路/null 逃过/null 逃进/null 逃逸/null 逃逸速度/null 逃遁/null 逃避/null 逃避现实/null 逃避者/null 逃避责任/null 逃难/null 逆产/null 逆伦/null 逆信/null 逆光/null 逆党/null 逆动/null 逆反/null 逆反应/null 逆反心理/null 逆取顺守/null 逆变/null 逆向/null 逆向拥塞通知/null 逆命/null 逆喻/null 逆回音/null 逆境/null 逆天/null 逆天悖理/null 逆天暴物/null 逆天犯顺/null 逆天背理/null 逆天违理/null 逆夷/null 逆子/null 逆子贼臣/null 逆定理/null 逆对数/null 逆差/null 逆序/null 逆心/null 逆情悖理/null 逆戟鲸/null 逆料/null 逆断层/null 逆施/null 逆旅/null 逆旋风/null 逆时针/null 逆映射/null 逆来顺受/null 逆水/null 逆水行舟/null 逆流/null 逆流溯源/null 逆流而上/null 逆浪/null 逆温层/null 逆火/null 逆理违天/null 逆电/null 逆耳/null 逆耳之言/null 逆耳利行/null 逆耳忠言/null 逆臣/null 逆臣贼子/null 逆行/null 逆行倒施/null 逆袭/null 逆贼/null 逆转/null 逆转录病毒/null 逆转录酶/null 逆运/null 逆运算/null 逆进/null 逆镜/null 逆风/null 逆风撑船/null 选上/null 选中/null 选为/null 选举/null 选举人/null 选举制/null 选举制度/null 选举前/null 选举委员会/null 选举权/null 选举法/null 选举法庭/null 选人/null 选任/null 选修/null 选修课/null 选入/null 选兵秣马/null 选准/null 选出/null 选刊/null 选区/null 选单/null 选取/null 选取框/null 选召/null 选号/null 选听/null 选场/null 选址/null 选型/null 选士厉兵/null 选好/null 选委/null 选字/null 选学/null 选定/null 选居/null 选年/null 选录/null 选徒/null 选得/null 选情/null 选战/null 选手/null 选投/null 选拔/null 选拔赛/null 选拣/null 选择/null 选择器/null 选择性/null 选择排序/null 选择权/null 选择者/null 选择题/null 选播/null 选收/null 选文/null 选料/null 选曲/null 选本/null 选材/null 选样/null 选民/null 选民参加率/null 选民投票登记卡/null 选民登记/null 选民证/null 选法/null 选派/null 选煤/null 选物/null 选用/null 选矿/null 选票/null 选票数/null 选秀/null 选秀节目/null 选种/null 选筛/null 选粹/null 选粹本/null 选编/null 选美/null 选美比赛/null 选美皇后/null 选者/null 选聘/null 选育/null 选自/null 选萃/null 选言判断/null 选词/null 选译/null 选读/null 选课/null 选调/null 选贤任能/null 选购/null 选赛/null 选路/null 选辑/null 选送/null 选配/null 选集/null 选项/null 选项板/null 选题/null 逊于/null 逊人/null 逊位/null 逊克/null 逊尼/null 逊尼派/null 逊志时敏/null 逊的/null 逊色/null 逊顺/null 逋峭/null 逋慢之罪/null 逋逃之臣/null 逋逃薮/null 逍遥/null 逍遥法外/null 逍遥游/null 逍遥自在/null 逍遥自娱/null 逍遥自得/null 透了/null 透亮/null 透亮儿/null 透信/null 透光/null 透入/null 透出/null 透力/null 透印版印刷/null 透压/null 透听力/null 透味/null 透墒/null 透孔/null 透射/null 透平机/null 透底/null 透彻/null 透性/null 透支/null 透支额/null 透明/null 透明体/null 透明图/null 透明度/null 透明程度/null 透明质酸/null 透有/null 透析/null 透析器/null 透析机/null 透析液/null 透气/null 透水/null 透水层/null 透水性/null 透汗/null 透河井/null 透漏/null 透热/null 透热疗法/null 透皮炭疽/null 透着/null 透红/null 透视/null 透视图/null 透视学/null 透视性/null 透视法/null 透视画/null 透视画法/null 透视缩影/null 透视装/null 透辟/null 透过/null 透过风/null 透透/null 透通性/null 透镜/null 透镜状/null 透雨/null 透露/null 透顶/null 透风/null 透骨/null 透骨通今/null 透骨酸心/null 逐一/null 逐个/null 逐出/null 逐出者/null 逐利争名/null 逐前/null 逐北/null 逐句/null 逐外/null 逐字/null 逐字逐句/null 逐客/null 逐客令/null 逐年/null 逐户/null 逐放/null 逐日/null 逐月/null 逐末舍本/null 逐条/null 逐次/null 逐次性/null 逐次近似/null 逐步/null 逐步升级/null 逐步完善/null 逐步形成/null 逐步推广/null 逐水/null 逐浪随波/null 逐渐/null 逐渐增加/null 逐渐废弃/null 逐渐形成/null 逐电追风/null 逐级/null 逐臭/null 逐臭之夫/null 逐行/null 逐行扫描/null 逐走/null 逐退/null 逐页/null 逐项/null 逐鹿/null 逐鹿中原/null 递上/null 递举/null 递交/null 递交国书/null 递信/null 递减/null 递加/null 递升/null 递呈/null 递回/null 递增/null 递嬗/null 递延/null 递归/null 递推/null 递推公式/null 递推关系/null 递条子/null 递眼色/null 递给/null 递补/null 递解/null 递进/null 递送/null 递送人/null 递降/null 途上/null 途中/null 途人/null 途径/null 途次/null 途程/null 途经/null 逗乐/null 逗人/null 逗人发笑/null 逗人喜爱/null 逗人笑/null 逗他/null 逗号/null 逗哈哈/null 逗哏/null 逗嘴/null 逗她/null 逗弄/null 逗引/null 逗得/null 逗性/null 逗恼/null 逗情/null 逗惹/null 逗点/null 逗牛/null 逗留/null 逗眼/null 逗笑/null 逗笑儿/null 逗趣/null 逗趣儿/null 逗遛/null 逗闷子/null 通义/null 通书/null 通事/null 通产/null 通亮/null 通人/null 通人情/null 通人达才/null 通什/null 通今博古/null 通令/null 通令嘉奖/null 通以/null 通体/null 通作/null 通例/null 通便/null 通俗/null 通俗剧/null 通俗化/null 通俗小说/null 通俗易懂/null 通俗科学/null 通俗读物/null 通信/null 通信中心/null 通信保障/null 通信兵/null 通信协定/null 通信卫星/null 通信员/null 通信器材/null 通信地址/null 通信处/null 通信安全/null 通信密度/null 通信对抗/null 通信工程/null 通信技术/null 通信服务/null 通信条令/null 通信枢纽/null 通信系统/null 通信线/null 通信线路/null 通信网/null 通信网络/null 通信联络/null 通信营/null 通信负载/null 通信量/null 通信集/null 通假/null 通假字/null 通入/null 通共/null 通关/null 通关文牒/null 通关滋肾丸/null 通关节/null 通典/null 通函/null 通分/null 通则/null 通判/null 通到/null 通力/null 通力合作/null 通功易事/null 通勤/null 通勤者/null 通化/null 通化地区/null 通县/null 通古斯/null 通史/null 通吃/null 通同/null 通名/null 通向/null 通告/null 通告板/null 通告者/null 通商/null 通商口岸/null 通国/null 通城/null 通夜/null 通大便/null 通天/null 通天彻地/null 通奸/null 通好/null 通婚/null 通学生/null 通宝/null 通宣理肺丸/null 通宵/null 通宵达旦/null 通家/null 通家之好/null 通宿/null 通山/null 通川区/null 通州/null 通布图/null 通常/null 通常指/null 通常用/null 通常用于/null 通年/null 通幽洞微/null 通廊/null 通式/null 通彻/null 通往/null 通心粉/null 通心菜/null 通心面/null 通志/null 通情达理/null 通才/null 通才练识/null 通报/null 通报批评/null 通敌/null 通敌者/null 通时达变/null 通明/null 通晓/null 通晓事理/null 通权达变/null 通条/null 通栏/null 通栏标题/null 通榆/null 通气/null 通气会/null 通气口/null 通气孔/null 通水/null 通水管/null 通江/null 通河/null 通法/null 通流电/null 通海/null 通渭/null 通灵术/null 通牒/null 通用/null 通用串行总线/null 通用化/null 通用字元组/null 通用字符集/null 通用性/null 通用拼音/null 通用汉字标准交换码/null 通用汽车/null 通用汽车公司/null 通用电器/null 通用电气/null 通用码/null 通用语/null 通用资源识别号/null 通电/null 通电话/null 通畅/null 通病/null 通盘/null 通盘考虑/null 通知/null 通知书/null 通知单/null 通知者/null 通票/null 通称/null 通窍/null 通篇/null 通红/null 通约/null 通约性/null 通经/null 通络/null 通统/null 通缉/null 通缉犯/null 通考/null 通者/null 通联/null 通胀/null 通胀率/null 通脱/null 通脱不拘/null 通脱木/null 通臂拳/null 通航/null 通船/null 通草/null 通菜/null 通融/null 通行/null 通行无阻/null 通行权/null 通行税/null 通行证/null 通衢/null 通衢广陌/null 通观/null 通观全局/null 通解/null 通讯/null 通讯协定/null 通讯卫星/null 通讯员/null 通讯处/null 通讯工作/null 通讯录/null 通讯社/null 通讯系统/null 通讯网/null 通讯者/null 通讯自动化/null 通讯行业/null 通讯通道/null 通讯院士/null 通许/null 通论/null 通识/null 通识培训/null 通识教育/null 通识课程/null 通译/null 通话/null 通语/null 通读/null 通谍/null 通象/null 通货/null 通货紧缩/null 通货膨胀/null 通货膨胀率/null 通路/null 通路名/null 通身/null 通车/null 通辑/null 通辽/null 通达/null 通迅员/null 通迅录/null 通过/null 通过了/null 通过事后/null 通过决议/null 通过学习/null 通过讨论/null 通过鉴定/null 通连/null 通透/null 通途/null 通通/null 通道/null 通道县/null 通邮/null 通都大邑/null 通配符/null 通量/null 通铺/null 通问/null 通霄/null 通霄达旦/null 通霄镇/null 通顺/null 通风/null 通风口/null 通风好/null 通风孔/null 通风报信/null 通风机/null 通风窗/null 通风管/null 通风道/null 逛去/null 逛完/null 逛来/null 逛荡/null 逛街/null 逛逛/null 逝世/null 逝去/null 逝名/null 逝川/null 逝者/null 逝者如斯/null 逞其口舌/null 逞凶/null 逞勇/null 逞威/null 逞己失众/null 逞异夸能/null 逞强/null 逞强称能/null 逞性妄为/null 逞性性/null 逞恶/null 逞能/null 速写/null 速决/null 速决战/null 速冻/null 速办/null 速发/null 速告/null 速射/null 速射炮/null 速度/null 速度快/null 速度慢/null 速度计/null 速归/null 速成/null 速战/null 速战速决/null 速手排/null 速把/null 速排/null 速攻/null 速效/null 速效性毒剂/null 速效肥料/null 速显/null 速查/null 速比/null 速测/null 速溶/null 速溶咖啡/null 速滑/null 速煮/null 速率/null 速简/null 速算/null 速胜/null 速行/null 速记/null 速记员/null 速记术/null 速记法/null 速读/null 速调管/null 速递/null 速食/null 速食店/null 速食面/null 速食餐厅/null 造价/null 造作/null 造假/null 造像/null 造册/null 造出/null 造势/null 造化/null 造化小儿/null 造化弄人/null 造反/null 造反派/null 造句/null 造句法/null 造园术/null 造型/null 造型艺术/null 造天立极/null 造字/null 造孽/null 造就/null 造山/null 造山作用/null 造山带/null 造山运动/null 造岩矿物/null 造币/null 造币厂/null 造币者/null 造府/null 造影/null 造微入妙/null 造成/null 造成了/null 造成直接经济损失/null 造成问题/null 造房/null 造极登峰/null 造林/null 造林于/null 造林学/null 造林术/null 造桥/null 造桥乡/null 造次/null 造爱/null 造物/null 造物主/null 造田/null 造福/null 造福万民/null 造福社群/null 造端/null 造纸/null 造纸厂/null 造纸工/null 造纸术/null 造罪/null 造舆论/null 造船/null 造船业/null 造船厂/null 造船台/null 造船工业/null 造船所/null 造茧自缚/null 造血/null 造血器官/null 造血干细胞/null 造访/null 造词/null 造诣/null 造谣/null 造谣中伤/null 造谣惑众/null 造谣生事/null 造谣者/null 造谤生事/null 造车/null 造陆运动/null 造雨者/null 造雪/null 造饭/null 逡巡/null 逡巡不前/null 逢一/null 逢人便讲/null 逢人说项/null 逢俉/null 逢凶化吉/null 逢到/null 逢场作乐/null 逢场作戏/null 逢山开道/null 逢年过节/null 逢春/null 逢迎/null 逢集/null 逮住/null 逮到/null 逮捕/null 逮捕法办/null 逮捕者/null 逮捕证/null 逶迤/null 逸世超群/null 逸乐/null 逸事/null 逸事遗闻/null 逸以待劳/null 逸兴遄飞/null 逸出/null 逸史/null 逸宕/null 逸尘/null 逸尘断鞅/null 逸居/null 逸态横生/null 逸散/null 逸民/null 逸游自恣/null 逸离/null 逸群/null 逸群之才/null 逸群绝伦/null 逸致/null 逸荡/null 逸话/null 逸豫/null 逸闻/null 逸闻轶事/null 逻各斯/null 逻辑/null 逻辑上/null 逻辑和/null 逻辑型/null 逻辑学/null 逻辑实证论/null 逻辑思维/null 逻辑性/null 逻辑推理/null 逻辑演算/null 逻辑炸弹/null 逻辑经验论/null 逻辑设计/null 逻辑链路控制/null 逻辑错误/null 逼上梁山/null 逼上粱山/null 逼人/null 逼人太甚/null 逼仄/null 逼住/null 逼使/null 逼供/null 逼供信/null 逼供讯/null 逼债/null 逼入/null 逼出/null 逼勒/null 逼和/null 逼奸/null 逼宫/null 逼将/null 逼死/null 逼死英雄汉/null 逼疯/null 逼真/null 逼真度/null 逼真性/null 逼着/null 逼肖/null 逼至/null 逼良为娼/null 逼视/null 逼走/null 逼近/null 逼进/null 逼迫/null 逼问/null 逾假未归/null 逾出/null 逾分/null 逾垣/null 逾墙越舍/null 逾墙钻穴/null 逾常/null 逾时/null 逾期/null 逾期费/null 逾树/null 逾越/null 逾越节/null 逾重/null 逾闲荡检/null 逾限/null 逾额/null 逾龄/null 遁世/null 遁世离群/null 遁入/null 遁入空门/null 遁名匿迹/null 遁形/null 遁词/null 遁走/null 遁走曲/null 遁身/null 遁迹/null 遁迹潜形/null 遁逃/null 遁道/null 遂为/null 遂于/null 遂其/null 遂在/null 遂宁/null 遂定/null 遂川/null 遂平/null 遂心/null 遂心如意/null 遂意/null 遂愿/null 遂昌/null 遂溪/null 遄征/null 遇上/null 遇之/null 遇事/null 遇事生风/null 遇人不淑/null 遇到/null 遇刺/null 遇合/null 遇害/null 遇敌/null 遇救/null 遇有/null 遇火/null 遇物持平/null 遇着/null 遇袭/null 遇见/null 遇险/null 遇难/null 遇难者/null 遇难船/null 遍于/null 遍体/null 遍体鳞伤/null 遍历/null 遍及/null 遍及全球/null 遍在/null 遍地/null 遍地开花/null 遍处/null 遍寻/null 遍布/null 遍布全国/null 遍览/null 遍访/null 遍身/null 遍野/null 遏制/null 遏制政策/null 遏恶扬善/null 遏抑/null 遏止/null 遏渐防萌/null 遏阻/null 遐举/null 遐尔闻名/null 遐布/null 遐年/null 遐弃/null 遐心/null 遐志/null 遐思/null 遐想/null 遐方/null 遐方绝域/null 遐方绝壤/null 遐眺/null 遐祉/null 遐福/null 遐终/null 遐胄/null 遐荒/null 遐轨/null 遐迩/null 遐迩一体/null 遐迩皆知/null 遐迩著闻/null 遐迩闻名/null 遐迹/null 遐龄/null 遑论/null 遑遑/null 遒劲/null 遒文壮节/null 道三不着两/null 道上/null 道不/null 道不同不相为谋/null 道不拾遗/null 道不相谋/null 道义/null 道义上/null 道之所存/null 道乏/null 道人/null 道会/null 道光/null 道光帝/null 道具/null 道出/null 道别/null 道劳/null 道卡斯族/null 道厉奋发/null 道口/null 道口儿/null 道台/null 道合志同/null 道同志合/null 道听涂说/null 道听途说/null 道员/null 道喜/null 道器/null 道在/null 道在屎溺/null 道地/null 道场/null 道坎/null 道士/null 道外/null 道外区/null 道头会尾/null 道奇/null 道姑/null 道子/null 道孚/null 道学/null 道家/null 道寡称孤/null 道尔顿/null 道尽涂穷/null 道尽途弹/null 道山/null 道山学海/null 道岔/null 道工/null 道床/null 道德/null 道德上/null 道德困境/null 道德家/null 道德沦丧/null 道德素质/null 道德经/null 道德观/null 道德认识/null 道德败坏/null 道德风尚/null 道情/null 道所存者/null 道指/null 道教/null 道教徒/null 道明/null 道木/null 道来/null 道林纸/null 道格拉斯/null 道格拉斯・麦克阿瑟/null 道次颠沛/null 道歉/null 道清/null 道牙/null 道班/null 道理/null 道琼/null 道琼斯/null 道琼斯指数/null 道白/null 道真/null 道真县/null 道真自治县/null 道短/null 道砟/null 道破/null 道碴/null 道管/null 道经/null 道统/null 道而不径/null 道若三寸舌/null 道藏/null 道行/null 道袍/null 道西说东/null 道观/null 道谢/null 道貌岸然/null 道贺/null 道路/null 道路以目/null 道路侧目/null 道路工程/null 道边/null 道远/null 道远任重/null 道远日暮/null 道远知骥/null 道道/null 道道儿/null 道道地地/null 道里/null 道里区/null 道钉/null 道长/null 道门/null 道间/null 道院/null 道首/null 道骨仙风/null 道高一尺/null 道高一尺魔高一丈/null 道高益安/null 遗下/null 遗世独立/null 遗世绝俗/null 遗书/null 遗事/null 遗产/null 遗传/null 遗传上/null 遗传信息/null 遗传型/null 遗传学/null 遗传工程/null 遗传性/null 遗传性疾病/null 遗传物质/null 遗传率/null 遗体/null 遗体告别式/null 遗作/null 遗俗/null 遗像/null 遗嘱/null 遗嘱等/null 遗址/null 遗境/null 遗墨/null 遗大投艰/null 遗失/null 遗妻/null 遗妻弃子/null 遗孀/null 遗孤/null 遗害无穷/null 遗容/null 遗少/null 遗尿/null 遗尿症/null 遗属/null 遗弃/null 遗弃物/null 遗弃者/null 遗志/null 遗忘/null 遗忘河/null 遗忘症/null 遗念/null 遗恨/null 遗恨千古/null 遗愿/null 遗憾/null 遗憾的是/null 遗教/null 遗文/null 遗族/null 遗案/null 遗毒/null 遗民/null 遗漏/null 遗照/null 遗爱/null 遗物/null 遗物箱/null 遗珠/null 遗珠弃璧/null 遗男/null 遗留/null 遗痕/null 遗矢/null 遗祸/null 遗稿/null 遗篇/null 遗簪坠屦/null 遗簪堕屦/null 遗精/null 遗编绝简/null 遗缺/null 遗老/null 遗腹/null 遗腹子/null 遗臣/null 遗臭/null 遗臭万年/null 遗臭万载/null 遗臭千年/null 遗芳馀烈/null 遗落/null 遗著/null 遗蜕/null 遗言/null 遗训/null 遗诏/null 遗诗/null 遗误/null 遗赠/null 遗赠人/null 遗赠者/null 遗迹/null 遗闻/null 遗难成祥/null 遗风/null 遗风遗泽/null 遗风馀思/null 遗风馀烈/null 遗骨/null 遗骸/null 遛弯/null 遛弯儿/null 遛狗/null 遛马/null 遛鸟/null 遣使/null 遣入/null 遣俘/null 遣兴陶情/null 遣兵调将/null 遣将/null 遣散/null 遣词/null 遣词立意/null 遣责/null 遣辞措意/null 遣返/null 遣送/null 遣送出境/null 遣闷/null 遥不可及/null 遥寄/null 遥想/null 遥感/null 遥感技术/null 遥控/null 遥控器/null 遥控操作/null 遥望/null 遥测/null 遥测术/null 遥相/null 遥相呼应/null 遥相应和/null 遥祝/null 遥祭/null 遥自/null 遥见/null 遥观/null 遥远/null 遥遥/null 遥遥华胄/null 遥遥无期/null 遥遥相对/null 遥遥领先/null 遨游/null 遭人/null 遭以/null 遭以为/null 遭侵蚀/null 遭到/null 遭劫/null 遭受/null 遭拒/null 遭殃/null 遭灾/null 遭瘟/null 遭罪/null 遭致/null 遭蹋/null 遭逢/null 遭遇/null 遭遇到/null 遭遇战/null 遭际/null 遭难/null 遭难船/null 遮丑/null 遮人耳目/null 遮以/null 遮住/null 遮光/null 遮光物/null 遮前掩后/null 遮天/null 遮天映日/null 遮天盖地/null 遮天蔽日/null 遮护板/null 遮拦/null 遮挡/null 遮掉/null 遮掩/null 遮断/null 遮断者/null 遮日/null 遮日篷/null 遮暗/null 遮檐/null 遮没/null 遮泥板/null 遮瑕膏/null 遮盖/null 遮眼/null 遮眼法/null 遮篷/null 遮羞/null 遮羞布/null 遮胸/null 遮脸/null 遮荫/null 遮蔽/null 遮蔽所/null 遮藏/null 遮遮/null 遮遮掩掩/null 遮避/null 遮门/null 遮闭/null 遮阳/null 遮阳伞/null 遮阳帽/null 遮阳板/null 遮阴/null 遮障/null 遮雨/null 遮面/null 遮风/null 遮风避雨/null 遴选/null 遵义会议/null 遵义地区/null 遵从/null 遵令/null 遵养待时/null 遵养时晦/null 遵办/null 遵化/null 遵化县/null 遵医嘱/null 遵命/null 遵奉/null 遵奉者/null 遵守/null 遵守纪律/null 遵循/null 遵旨/null 遵时养晦/null 遵法施行/null 遵照/null 遵照执行/null 遵纪/null 遵纪守法/null 遵而不失/null 遵行/null 遽然/null 避世/null 避世离俗/null 避世绝俗/null 避之惟恐不及/null 避乱/null 避人/null 避债/null 避免/null 避其锐气击其惰归/null 避凶趋吉/null 避坑落井/null 避嫌/null 避孕/null 避孕丸/null 避孕套/null 避孕环/null 避孕药/null 避实/null 避实击虚/null 避实就虚/null 避寒/null 避尘/null 避开/null 避弹/null 避弹坑/null 避役/null 避忌/null 避恶/null 避暑/null 避暑山庄/null 避暑胜地/null 避碰规则/null 避祸/null 避祸就福/null 避税/null 避税港/null 避署/null 避而不谈/null 避让/null 避讳/null 避过/null 避避风头/null 避邪/null 避重/null 避重就轻/null 避险/null 避难/null 避难就易/null 避难所/null 避难港/null 避难者/null 避雨/null 避雷/null 避雷器/null 避雷针/null 避风/null 避风处/null 避风港/null 邀击/null 邀功/null 邀功求赏/null 邀功请赏/null 邀名射利/null 邀游/null 邀约/null 邀聘/null 邀请/null 邀请信/null 邀请函/null 邀请者/null 邀请赛/null 邀集/null 邂逅/null 邂逅相逢/null 邂逅相遇/null 邃古/null 邃宇/null 邃密/null 邃户/null 邈冥冥/null 邈然/null 邈若山河/null 邈远/null 邈邈/null 邋塌/null 邋遢/null 邋里/null 邑犬群吠/null 邓世昌/null 邓丽君/null 邓亚萍/null 邓亮洪/null 邓加/null 邓小平/null 邓小平理论/null 邓州/null 邓拓/null 邓肯/null 邓迪/null 邓颖超/null 邕剧/null 邕宁/null 邕宁区/null 邕邕/null 邗江/null 邗江区/null 邙山/null 邙山行/null 邛崃/null 邛崃山/null 邛崃山脉/null 邢台/null 邢台地区/null 那一刻/null 那一点/null 那不/null 那不勒斯/null 那不勒斯王国/null 那世/null 那个/null 那个人/null 那串/null 那么/null 那么些/null 那么回事/null 那么样/null 那么点儿/null 那么着/null 那事/null 那些/null 那些天/null 那些年/null 那人/null 那件/null 那份/null 那会儿/null 那位/null 那倒是/null 那儿/null 那几年/null 那厮/null 那又/null 那双/null 那古屋/null 那咱/null 那喒/null 那块/null 那坡/null 那堪/null 那处/null 那天/null 那家/null 那将/null 那就/null 那就是说/null 那座/null 那张/null 那怎么行/null 那怕/null 那才/null 那拉提草原/null 那摩温/null 那支/null 那斯达克/null 那方/null 那日/null 那时/null 那时候/null 那时快/null 那昝/null 那是/null 那曲/null 那曲地区/null 那曲市/null 那有/null 那木巴尔・恩赫巴亚尔/null 那末/null 那条/null 那样/null 那次/null 那段/null 那点/null 那片/null 那玛夏/null 那玛夏乡/null 那的/null 那知/null 那种/null 那程子/null 那空沙旺/null 那笔/null 那维克/null 那能/null 那般/null 那话/null 那话儿/null 那车/null 那辆/null 那边/null 那达慕/null 那还用说/null 那部/null 那里/null 那间/null 那阵子/null 那鸿书/null 那麽/null 那麽些/null 那麽样/null 邦交/null 邦交正常化/null 邦国/null 邦德/null 邦联/null 邦迪/null 邪不干正/null 邪不敌正/null 邪不胜正/null 邪乎/null 邪僻/null 邪唬/null 邪径/null 邪心/null 邪念/null 邪恶/null 邪恶轴心/null 邪教/null 邪术/null 邪气/null 邪灵/null 邪物/null 邪神/null 邪祟/null 邪荡/null 邪行/null 邪语/null 邪说/null 邪说异端/null 邪财/null 邪路/null 邪途/null 邪道/null 邪门/null 邪门儿/null 邪门歪道/null 邪魔/null 邪魔外道/null 邮亭/null 邮件/null 邮册/null 邮出/null 邮包/null 邮区/null 邮寄/null 邮寄者/null 邮局/null 邮局编码/null 邮展/null 邮差/null 邮市/null 邮戮/null 邮戳/null 邮戳日期/null 邮报/null 邮政/null 邮政信箱/null 邮政划拨/null 邮政区码/null 邮政史/null 邮政编码/null 邮本/null 邮汇/null 邮电/null 邮电业/null 邮电局/null 邮电通信/null 邮电部/null 邮癖/null 邮码/null 邮票/null 邮筒/null 邮简/null 邮箱/null 邮箱名/null 邮编/null 邮船/null 邮花/null 邮袋/null 邮购/null 邮费/null 邮资/null 邮资已付/null 邮路/null 邮车/null 邮轮/null 邮运/null 邮递/null 邮递区号/null 邮递员/null 邮集/null 邯山/null 邯山区/null 邯郸/null 邯郸地区/null 邯郸学步/null 邱吉尔/null 邱比特/null 邳县/null 邳州/null 邵东/null 邵族/null 邵武/null 邵阳/null 邵阳地区/null 邵雍/null 邵飘萍/null 邷么儿/null 邸宅/null 邸报/null 邸阁/null 邹县/null 邹城/null 邹容/null 邹平/null 邹族/null 邹缨齐紫/null 邹衍/null 邹韬奋/null 邹鲁遗风/null 邻人/null 邻佑/null 邻区/null 邻县/null 邻右/null 邻国/null 邻域/null 邻境/null 邻家/null 邻居/null 邻左/null 邻座/null 邻接/null 邻村/null 邻水/null 邻海/null 邻省/null 邻睦/null 邻舍/null 邻苯醌/null 邻角/null 邻边/null 邻近/null 邻近词频率效果/null 邻邦/null 邻里/null 邻里乡党/null 郁卒/null 郁南/null 郁塞/null 郁悒/null 郁江/null 郁滞/null 郁烈/null 郁热/null 郁积/null 郁结/null 郁血/null 郁达夫/null 郁郁/null 郁郁不乐/null 郁郁寡欢/null 郁郁葱葱/null 郁金香/null 郁闭/null 郁闷/null 郅隆/null 郇山隐修会/null 郊区/null 郊县/null 郊外/null 郊寒岛瘦/null 郊游/null 郊狼/null 郊野/null 郎世宁/null 郎中/null 郎之万/null 郎君/null 郎平/null 郎当/null 郎才女姿/null 郎才女貌/null 郎月清风/null 郎朗/null 郎格罕氏岛/null 郎溪/null 郎猫/null 郎目疏眉/null 郎神/null 郎肯循环/null 郎舅/null 郑人买履/null 郑人争年/null 郑伊健/null 郑光祖/null 郑卫之声/null 郑卫之曲/null 郑卫之音/null 郑卫桑间/null 郑和/null 郑和下西洋/null 郑国渠/null 郑声/null 郑州大学/null 郑幸娟/null 郑成功/null 郑易里/null 郑梦准/null 郑玄/null 郑码/null 郑裕玲/null 郑重/null 郑重其事/null 郑重其辞/null 郓城/null 郝免/null 郝海东/null 郡主/null 郡会/null 郡候/null 郡县/null 郡县制/null 郡守/null 郡望/null 郡治/null 郡治安官/null 郡王/null 郡长/null 郢书燕说/null 郢匠挥斤/null 郦寄卖友/null 郧西/null 部下/null 部交/null 部件/null 部份/null 部份性/null 部众/null 部优/null 部位/null 部分/null 部分值/null 部分地区/null 部分质变/null 部区/null 部呈/null 部委/null 部属/null 部后/null 部族/null 部族间/null 部曲/null 部机关/null 部标/null 部类/null 部级/null 部署/null 部落/null 部落制/null 部落格/null 部长/null 部长会/null 部长会议/null 部长级/null 部长级会议/null 部门/null 部门主管/null 部队/null 部队建设/null 部颁/null 部颁标准/null 部首/null 部首编排法/null 郭城/null 郭小川/null 郭居静/null 郭晶晶/null 郭松焘/null 郭永怀/null 郭沫若/null 郭泉/null 郭茂倩/null 郯城/null 郴州/null 郸城/null 都什么年代了/null 都会/null 都会传奇/null 都伯林/null 都兰/null 都匀/null 都卜勒/null 都是/null 都在/null 都城/null 都头异姓/null 都好/null 都存/null 都安县/null 都察院/null 都对/null 都将/null 都尉/null 都市/null 都市人/null 都市传奇/null 都市化/null 都市化地区/null 都市味/null 都市式/null 都市间/null 都庞岭/null 都想/null 都愣/null 都拉斯/null 都无/null 都昌/null 都更案/null 都有/null 都柏林/null 都江堰/null 都灵/null 都督/null 都红/null 都说/null 都象/null 都铎王朝/null 郾城/null 郾城区/null 鄂伦春/null 鄂博/null 鄂城/null 鄂城区/null 鄂尔多斯/null 鄂尔多斯沙漠/null 鄂尔多斯高原/null 鄂州/null 鄂托克/null 鄂温克语/null 鄂西/null 鄂霍次克海/null 鄄城/null 鄙亵/null 鄙人/null 鄙俗/null 鄙俚/null 鄙劣/null 鄙吝/null 鄙吝复萌/null 鄙夫/null 鄙夷/null 鄙弃/null 鄙意/null 鄙斥/null 鄙称/null 鄙薄/null 鄙见/null 鄙视/null 鄙陋/null 鄞县/null 鄞州/null 鄞州区/null 鄢陵/null 鄯善/null 鄱阳/null 鄱阳湖/null 酃县/null 酆都/null 酆都城/null 酉时/null 酉牌时分/null 酉阳/null 酉阳县/null 酉鸡/null 酊剂/null 酋长/null 酋长国/null 酌予/null 酌减/null 酌办/null 酌加/null 酌古御今/null 酌处/null 酌处权/null 酌夺/null 酌定/null 酌情/null 酌情办理/null 酌情处理/null 酌收/null 酌核/null 酌满/null 酌献/null 酌裁/null 酌议/null 酌酒/null 酌量/null 配上/null 配乐/null 配人/null 配件/null 配件挂勾/null 配价/null 配伍/null 配位/null 配体/null 配偶/null 配偶体/null 配全/null 配列/null 配制/null 配发/null 配合/null 配合默契/null 配售/null 配器/null 配备/null 配备有/null 配套/null 配套完善/null 配套工程/null 配套成龙/null 配套技术/null 配套改革/null 配好/null 配子/null 配对/null 配对儿/null 配对物/null 配属/null 配工/null 配平/null 配得上/null 配戏/null 配成/null 配戴/null 配房/null 配手/null 配搭/null 配搭儿/null 配料/null 配方/null 配方法/null 配景/null 配有/null 配枪/null 配殿/null 配比/null 配用/null 配电/null 配电柜/null 配电盘/null 配电站/null 配眼镜/null 配种/null 配种季节/null 配称/null 配筋/null 配糖物/null 配系/null 配线/null 配给/null 配给品/null 配置/null 配置文件/null 配股/null 配色/null 配药/null 配药学/null 配药者/null 配菜/null 配补/null 配角/null 配载/null 配送/null 配送地址/null 配送者/null 配送费/null 配量/null 配钥匙/null 配销/null 配错/null 配音/null 配额/null 配餐/null 配饰/null 配齐/null 酎金/null 酏剂/null 酒不醉人人自醉/null 酒仓/null 酒仙/null 酒令/null 酒令儿/null 酒会/null 酒伴/null 酒保/null 酒入舌出/null 酒兴/null 酒具/null 酒刺/null 酒力/null 酒单/null 酒厂/null 酒后/null 酒后吐真言/null 酒后驾车/null 酒后驾驶/null 酒吧/null 酒吧间/null 酒员/null 酒味/null 酒嗉子/null 酒器/null 酒囊饭袋/null 酒地花天/null 酒坊/null 酒壶/null 酒娘/null 酒宴/null 酒家/null 酒巴/null 酒巴女/null 酒帘/null 酒席/null 酒庄/null 酒店/null 酒店业/null 酒店主/null 酒廊/null 酒徒/null 酒德/null 酒性/null 酒意/null 酒托女/null 酒曲/null 酒有别肠/null 酒望/null 酒杯/null 酒枣/null 酒柜/null 酒桶/null 酒楼/null 酒母/null 酒水/null 酒水饮料/null 酒池肉林/null 酒泉/null 酒泉地区/null 酒浆/null 酒涡/null 酒渣/null 酒渣鼻/null 酒烟/null 酒狂/null 酒瓮饭囊/null 酒瓶/null 酒疯/null 酒瘾/null 酒盅/null 酒石酸/null 酒碗/null 酒神/null 酒神祭/null 酒神节/null 酒税/null 酒窖/null 酒窝/null 酒窝儿/null 酒筵/null 酒筹/null 酒类/null 酒精/null 酒精中毒/null 酒精性/null 酒精灯/null 酒精表/null 酒精饮料/null 酒糟/null 酒糟鼻/null 酒糟鼻子/null 酒绿灯红/null 酒缸/null 酒罐/null 酒肆/null 酒肉/null 酒肉朋友/null 酒肴/null 酒至半酣/null 酒色/null 酒色之徒/null 酒色财气/null 酒花/null 酒药/null 酒菜/null 酒袋/null 酒言酒语/null 酒话/null 酒质/null 酒资/null 酒足饭饱/null 酒过/null 酒递/null 酒酣耳热/null 酒酸不售/null 酒酿/null 酒醉/null 酒醒/null 酒量/null 酒量大/null 酒钱/null 酒铺/null 酒间/null 酒食/null 酒食地狱/null 酒食征逐/null 酒食过从/null 酒饭/null 酒馆/null 酒馆儿/null 酒香/null 酒香不怕巷子深/null 酒驾/null 酒鬼/null 酒鬼酒/null 酒龄/null 酕醄/null 酗讼/null 酗酒/null 酗酒滋事/null 酚酞/null 酚醛/null 酚醛塑料/null 酚醛树脂/null 酚醛胶/null 酝酿/null 酢浆草/null 酣兴/null 酣嬉淋漓/null 酣形/null 酣态/null 酣战/null 酣梦/null 酣歌恒舞/null 酣畅/null 酣畅淋漓/null 酣眠/null 酣睡/null 酣絮/null 酣醉/null 酣饮/null 酥松/null 酥松油脂/null 酥油/null 酥油花/null 酥油茶/null 酥糖/null 酥胸/null 酥脆/null 酥软/null 酥酪/null 酥饼/null 酥麻/null 酦酵/null 酩酊/null 酩酊大醉/null 酪乳/null 酪农/null 酪农业/null 酪梨/null 酪氨酸/null 酪氨酸代谢病/null 酪素/null 酪蛋白/null 酪酸/null 酪饼/null 酬偿/null 酬劳/null 酬劳者/null 酬劳金/null 酬和/null 酬唱/null 酬宾/null 酬对/null 酬应/null 酬报/null 酬神/null 酬答/null 酬谢/null 酬赏/null 酬载/null 酬酢/null 酬金/null 酮基/null 酮糖/null 酯化/null 酯酶/null 酰胺/null 酱园/null 酱坊/null 酱料/null 酱汁/null 酱油/null 酱瓜/null 酱紫/null 酱缸/null 酱肉/null 酱色/null 酱菜/null 酱豆/null 酱豆腐/null 酵子/null 酵母/null 酵母菌/null 酵母醇/null 酵法/null 酵粉/null 酵素/null 酵菌/null 酵解作用/null 酵食/null 酶制剂/null 酶原/null 酶法脱毛/null 酶类/null 酷人/null 酷似/null 酷像/null 酷冷/null 酷刑/null 酷刑折磨/null 酷到/null 酷吏/null 酷寒/null 酷待/null 酷政/null 酷斯拉/null 酷暑/null 酷极了/null 酷毙/null 酷烈/null 酷热/null 酷爱/null 酷肖/null 酷虐/null 酷评/null 酷象/null 酷鹏/null 酸不溜丢/null 酸不溜秋/null 酸乳/null 酸乳酪/null 酸化/null 酸味/null 酸处理/null 酸奶/null 酸奶节/null 酸奶酪/null 酸定/null 酸度/null 酸式盐/null 酸心/null 酸性/null 酸懒/null 酸文假醋/null 酸曲/null 酸果汁/null 酸枣/null 酸根/null 酸梅/null 酸梅汤/null 酸楚/null 酸模/null 酸橙/null 酸毒症/null 酸水/null 酸洗/null 酸浆/null 酸涩/null 酸液/null 酸溜溜/null 酸牛奶/null 酸甜/null 酸甜苦辣/null 酸疼/null 酸痛/null 酸盐/null 酸碱/null 酸碱值/null 酸碱度/null 酸类/null 酸臭/null 酸苦/null 酸莓/null 酸菌/null 酸菜/null 酸葡萄/null 酸豆/null 酸败/null 酸软/null 酸辛/null 酸辣/null 酸辣土豆丝/null 酸辣汤/null 酸辣酱/null 酸过多/null 酸酐/null 酸酯/null 酸酸/null 酸量/null 酸钙/null 酸钠/null 酸钡/null 酸雨/null 酸麻/null 酸鼻/null 酿中/null 酿制/null 酿成/null 酿成大祸/null 酿母菌/null 酿热物/null 酿祸/null 酿蜜/null 酿造/null 酿造学/null 酿造所/null 酿造者/null 酿造酒/null 酿酒/null 酿酒业/null 酿酶/null 醇化/null 醇厚/null 醇和/null 醇类/null 醇美/null 醇胺/null 醇酒/null 醇酒妇人/null 醇酸/null 醇酸树脂/null 醇酿/null 醇香/null 醉乡/null 醉了/null 醉人/null 醉倒/null 醉卧/null 醉后/null 醉品/null 醉圣/null 醉心/null 醉心于/null 醉态/null 醉意/null 醉感/null 醉枣/null 醉汉/null 醉熏熏/null 醉生梦死/null 醉眼/null 醉翁/null 醉翁之意不在酒/null 醉舞狂歌/null 醉酒/null 醉酒饱德/null 醉酒驾车/null 醉醉/null 醉醺醺/null 醉马草/null 醉鬼/null 醉鸡/null 醋劲/null 醋劲儿/null 醋化/null 醋坛子/null 醋大/null 醋心/null 醋意/null 醋栗/null 醋海生波/null 醋液/null 醋瓶/null 醋精/null 醋酸/null 醋酸乙酯/null 醋酸盐/null 醋酸纤维/null 醍醐/null 醍醐灌顶/null 醑剂/null 醒世/null 醒世恒言/null 醒了/null 醒悟/null 醒木/null 醒来/null 醒来吧/null 醒狮/null 醒的/null 醒目/null 醒盹儿/null 醒眼/null 醒着/null 醒者/null 醒脾/null 醒觉/null 醒豁/null 醒过来/null 醒酒/null 醒醒/null 醚类/null 醚麻醉/null 醛固酮/null 醛基/null 醛糖/null 醛酸/null 醛醣/null 醣类/null 醪糟/null 醴泉县/null 醴陵/null 醺醺/null 采买/null 采伐/null 采倔/null 采光/null 采光剖璞/null 采兰赠芍/null 采写/null 采出/null 采制/null 采割/null 采办/null 采勘/null 采区/null 采取/null 采取措施/null 采取行动/null 采地/null 采场/null 采声/null 采录/null 采择/null 采捞/null 采排/null 采掘/null 采掘工业/null 采摘/null 采撷/null 采收/null 采收率/null 采景/null 采暖/null 采果/null 采样/null 采样率/null 采棉机/null 采沙坑/null 采油/null 采炼/null 采煤/null 采珠/null 采珠业/null 采珠人/null 采用/null 采石/null 采石场/null 采矿/null 采矿业/null 采矿场/null 采砂场/null 采种/null 采空区/null 采纳/null 采纳者/null 采结/null 采编/null 采脂/null 采自/null 采船不斫/null 采花/null 采花大盗/null 采花贼/null 采茶/null 采茶戏/null 采莲船/null 采薪之忧/null 采薪之疾/null 采蜜鸟/null 采访/null 采访员/null 采访层/null 采访工作/null 采访录/null 采访者/null 采访记者/null 采证/null 采货/null 采购/null 采购供应站/null 采购员/null 采购者/null 采选/null 采邑/null 采金/null 采金区/null 采集/null 采集箱/null 采风/null 采食/null 釉子/null 釉彩/null 釉术/null 釉烧/null 釉质/null 釉陶/null 释义/null 释人/null 释俗/null 释免/null 释典/null 释出/null 释卷/null 释名/null 释后/null 释学/null 释尊/null 释度/null 释念/null 释怀/null 释手/null 释放/null 释放出狱/null 释放者/null 释教/null 释文/null 释明/null 释梦/null 释法/null 释然/null 释疑/null 释疑解惑/null 释经/null 释者/null 释藏/null 释言/null 释读/null 释迦/null 释迦佛/null 释迦牟尼/null 释迦牟尼佛/null 释道/null 释重/null 释金/null 释错/null 释除/null 里人/null 里克特/null 里出外进/null 里加/null 里勾外连/null 里士满/null 里外/null 里外不是人/null 里外里/null 里头/null 里奇蒙/null 里奥斯/null 里奥格兰德/null 里子/null 里尔/null 里层/null 里屋/null 里岛/null 里巷/null 里希特霍芬/null 里带/null 里应/null 里应外合/null 里弄/null 里弗赛德/null 里弦/null 里急后重/null 里手/null 里拉/null 里斯本/null 里昂/null 里昂工人起义/null 里昂市/null 里来/null 里根/null 里氏/null 里氏震级/null 里海/null 里港/null 里港乡/null 里瓦几亚条约/null 里瓦尔多/null 里程/null 里程碑/null 里程表/null 里程计/null 里约/null 里约热内卢/null 里肌肉/null 里脊/null 里脚手/null 里色/null 里谈巷议/null 里贾纳/null 里边/null 里边儿/null 里进外出/null 里通外国/null 里里/null 里里外外/null 里间/null 里面/null 里首/null 重东西/null 重临/null 重义/null 重义轻利/null 重义轻生/null 重义轻财/null 重九/null 重于/null 重于泰山/null 重五/null 重价/null 重任/null 重传/null 重伤/null 重估/null 重估后/null 重作/null 重修/null 重修旧好/null 重做/null 重元素/null 重光/null 重光累洽/null 重入/null 重兵/null 重典/null 重写/null 重写本/null 重农/null 重农主义/null 重出/null 重击/null 重刊/null 重刑/null 重划/null 重则/null 重创/null 重判/null 重利/null 重利忘义/null 重利盘剥/null 重利轻义/null 重制/null 重剑/null 重力/null 重力加速度/null 重力场/null 重力异常/null 重力水/null 重办/null 重午/null 重印/null 重历旧游/null 重压/null 重厚少文/null 重又/null 重发/null 重叠/null 重合/null 重名/null 重听/null 重启/null 重命名/null 重唱/null 重商/null 重商主义/null 重器/null 重回/null 重围/null 重土/null 重地/null 重场/null 重型/null 重塑/null 重填/null 重复/null 重复句/null 重复启动效应/null 重复性/null 重复法/null 重复者/null 重复节/null 重复语境/null 重复说/null 重大/null 重大贡献/null 重头/null 重头戏/null 重奏/null 重奏曲/null 重奖/null 重好/null 重婚/null 重婚者/null 重子/null 重孙/null 重孙女/null 重孙子/null 重孝/null 重定/null 重定向/null 重实效/null 重审/null 重将/null 重屋/null 重山峻岭/null 重峦叠嶂/null 重工/null 重工业/null 重庆大学/null 重庆科技学院/null 重度/null 重建/null 重建家园/null 重开/null 重张/null 重弹/null 重形式轻内容/null 重彩/null 重影/null 重得/null 重心/null 重心低/null 重情/null 重惩/null 重想/null 重成/null 重打/null 重托/null 重抄/null 重担/null 重拍/null 重拨/null 重拳/null 重拾/null 重挫/null 重振/null 重振旗鼓/null 重排/null 重描/null 重提/null 重提旧事/null 重插/null 重播/null 重操旧业/null 重放/null 重敲/null 重整/null 重整旗鼓/null 重文/null 重文轻武/null 重新/null 重新做人/null 重新启动/null 重新审视/null 重新开始/null 重新开机/null 重新统一/null 重新装修/null 重新认识/null 重新评价/null 重新造林/null 重映/null 重晚/null 重晶石/null 重望/null 重机/null 重机关枪/null 重机枪/null 重来/null 重染/null 重查/null 重样/null 重核/null 重核子/null 重案/null 重楼/null 重正化/null 重步走/null 重武/null 重武器/null 重气轻身/null 重氢/null 重氢子/null 重水/null 重水反应堆/null 重水生产/null 重沓/null 重油/null 重法/null 重洋/null 重洗牌/null 重活/null 重活儿/null 重活化剂/null 重渊/null 重温/null 重温旧业/null 重温旧梦/null 重游/null 重演/null 重灾/null 重灾区/null 重炮/null 重点/null 重点企业/null 重点保护/null 重点单位/null 重点工作/null 重点工程/null 重点建设项目/null 重点项目/null 重熙累洽/null 重版/null 重物/null 重犯/null 重现/null 重瓣/null 重瓣胃/null 重生/null 重生父母/null 重用/null 重申/null 重电子/null 重男轻女/null 重画/null 重病/null 重病特护/null 重病特护区/null 重症/null 重的/null 重盐/null 重眼皮/null 重眼皮儿/null 重睹天日/null 重石/null 重码/null 重码词频/null 重碳/null 重碳酸盐/null 重碳酸钙/null 重磅/null 重离子/null 重离子物理学/null 重税/null 重算/null 重粘土/null 重级/null 重组/null 重结晶/null 重绕/null 重编/null 重罚/null 重罚不用/null 重罪/null 重罪人/null 重罪犯/null 重置/null 重考/null 重者/null 重聚/null 重肚天日/null 重臂/null 重臣/null 重色轻友/null 重茧/null 重茬/null 重茵/null 重荐/null 重荷/null 重获/null 重落/null 重行/null 重装/null 重要/null 重要性/null 重要文件/null 重要问题/null 重覆/null 重覆性/null 重见/null 重见天日/null 重规累矩/null 重规迭矩/null 重视/null 重视教育/null 重言/null 重计/null 重订/null 重记/null 重讲/null 重设/null 重访/null 重评/null 重译/null 重试/null 重话/null 重说/null 重读/null 重调/null 重负/null 重责/null 重贴/null 重赋/null 重赌/null 重赏/null 重赏之下必有勇夫/null 重赛/null 重走/null 重足而立/null 重趼/null 重踏/null 重蹈/null 重蹈覆辙/null 重身子/null 重轨/null 重载/null 重辣/null 重达/null 重迁/null 重返/null 重返家园/null 重还/null 重迭/null 重述/null 重选/null 重造/null 重逢/null 重酬/null 重重/null 重重困难/null 重量/null 重量单位/null 重量吨/null 重量级/null 重量轻质/null 重金/null 重金属/null 重铸/null 重锤/null 重镇/null 重门击柝/null 重霄/null 重音/null 重音节/null 野丫头/null 野人/null 野兔/null 野兽/null 野叟曝言/null 野史/null 野合/null 野味/null 野地/null 野外/null 野外作业/null 野外定向/null 野外工作/null 野外放养/null 野天鹅/null 野孩子/null 野小茴/null 野径/null 野心/null 野心勃勃/null 野心家/null 野性/null 野战/null 野战军/null 野无遗才/null 野无遗贤/null 野果/null 野汉子/null 野游/null 野火/null 野火春风/null 野火烧不尽/null 野炊/null 野炮/null 野牛/null 野狐禅/null 野狗/null 野狗似/null 野猪/null 野猫/null 野甘蓝/null 野生/null 野生动植物园/null 野生动物/null 野生植物/null 野生猫/null 野生生物/null 野生生物基金会/null 野田佳彦/null 野禽/null 野种/null 野胡萝卜/null 野腔/null 野芥子/null 野花/null 野花闲草/null 野芹菜/null 野草/null 野菊/null 野菜/null 野营/null 野营训练/null 野葛/null 野葡萄/null 野蔷薇/null 野蚕/null 野蛮/null 野蛮人/null 野蛮化/null 野蛮装卸/null 野蜂/null 野调无腔/null 野豌豆/null 野豕/null 野趣/null 野颠茄/null 野食/null 野食儿/null 野餐/null 野餐垫/null 野马/null 野驴/null 野鬼/null 野鸟/null 野鸡/null 野鸭/null 野鸭肉/null 野鸽/null 野麦/null 野麻/null 野鼠/null 野鼬瓣花/null 量人/null 量体温/null 量体裁衣/null 量体重/null 量值/null 量入为出/null 量具/null 量出/null 量出制入/null 量刑/null 量力/null 量力而为/null 量力而行/null 量化/null 量化逻辑/null 量变/null 量器/null 量多/null 量大/null 量好/null 量如江海/null 量子/null 量子力学/null 量子化/null 量子化学/null 量子场论/null 量子沫/null 量子电动力学/null 量子色动力学/null 量子论/null 量小/null 量小力微/null 量尺/null 量尺寸/null 量差/null 量度/null 量性/null 量才录用/null 量控/null 量时度力/null 量杯/null 量比/null 量气计/null 量油尺/null 量油计/null 量法/null 量深度/null 量热器/null 量瓶/null 量程/null 量等/null 量筒/null 量级/null 量纲/null 量腹/null 量衡/null 量表/null 量规/null 量角器/null 量角规/null 量计/null 量词/null 量贩式/null 量身/null 量身定制/null 量过/null 量重/null 量限/null 金三角/null 金不换/null 金东/null 金东区/null 金丝/null 金丝燕/null 金丝猴/null 金丝雀/null 金丹/null 金乌/null 金乌西坠/null 金乡/null 金代/null 金价/null 金伯利岩/null 金像/null 金元/null 金元券/null 金元外交/null 金光/null 金光闪烁/null 金光闪闪/null 金兰/null 金兰之交/null 金兰之契/null 金兰谱/null 金冠/null 金冠戴菊/null 金凤区/null 金刚/null 金刚努目/null 金刚山/null 金刚座/null 金刚怒目/null 金刚总持/null 金刚手菩萨/null 金刚狼/null 金刚石/null 金刚砂/null 金刚萨埵/null 金刚钻/null 金刚鹦鹉/null 金制/null 金匠/null 金匮/null 金匮石室/null 金华/null 金华地区/null 金华火腿/null 金卤/null 金印/null 金县/null 金友玉昆/null 金发/null 金发碧眼/null 金口/null 金口木舌/null 金口河/null 金口河区/null 金口玉言/null 金台/null 金台区/null 金史/null 金合欢/null 金吾不禁/null 金品/null 金嗓子/null 金器/null 金国汗/null 金圆券/null 金块/null 金坛/null 金城/null 金城江/null 金城江区/null 金城汤池/null 金城镇/null 金堂/null 金塔/null 金壁辉煌/null 金声玉振/null 金壳郎/null 金大中/null 金天翮/null 金奖/null 金威/null 金婚/null 金子/null 金字/null 金字塔/null 金字招牌/null 金宁/null 金宁乡/null 金宇中/null 金安/null 金安区/null 金家庄/null 金家庄区/null 金富轼/null 金寨/null 金小蜂/null 金屋/null 金屋藏娇/null 金屋贮娇/null 金属/null 金属丝/null 金属元素/null 金属切削加工/null 金属制品/null 金属塑料/null 金属外壳/null 金属学/null 金属性/null 金属探伤/null 金属材料/null 金属板/null 金属棒/null 金属模/null 金属疲劳/null 金属破片/null 金属线/null 金属薄片/null 金属键/null 金属陶瓷/null 金山/null 金山乡/null 金山寺/null 金山屯/null 金山屯区/null 金峰/null 金峰乡/null 金川/null 金川区/null 金州区/null 金工/null 金币/null 金帐汗国/null 金平/null 金平区/null 金平县/null 金平苗瑶傣自治县/null 金库/null 金店/null 金庸/null 金戈/null 金戈铁马/null 金成/null 金文/null 金斗/null 金斯敦/null 金无足赤/null 金日成/null 金昌/null 金明/null 金明区/null 金星/null 金晃晃/null 金曜日/null 金本位/null 金本位制/null 金条/null 金杯/null 金枝玉叶/null 金枪鱼/null 金柑/null 金柜/null 金柜石室/null 金桂冠/null 金桔/null 金榜/null 金榜挂名/null 金榜题名/null 金橘/null 金正云/null 金正恩/null 金正日/null 金正男/null 金正银/null 金殿/null 金毛狗/null 金水/null 金水区/null 金永南/null 金汤/null 金沙/null 金沙江/null 金沙萨/null 金沙镇/null 金泉/null 金泳三/null 金海/null 金湖/null 金湖镇/null 金湾/null 金湾区/null 金溪/null 金漆/null 金灿灿/null 金煌煌/null 金熊奖/null 金牌/null 金牌奖/null 金牙/null 金牛/null 金牛区/null 金牛座/null 金狮奖/null 金玉/null 金玉之言/null 金玉其外/null 金玉其外败絮其中/null 金玉其表/null 金玉满堂/null 金玉良言/null 金球奖/null 金瓜/null 金瓯/null 金瓯无缺/null 金瓶梅/null 金瓶梅词话/null 金田村/null 金田起义/null 金疮/null 金盆洗手/null 金盏花/null 金盘/null 金盘玉食/null 金目鲈/null 金相/null 金相玉质/null 金盾/null 金盾工程/null 金石/null 金石不渝/null 金石丝竹/null 金石为开/null 金石之交/null 金石之言/null 金石交情/null 金石文/null 金石至交/null 金石良言/null 金矿/null 金砖/null 金砖四国/null 金碧/null 金碧荧煌/null 金碧辉煌/null 金秀县/null 金秋/null 金科玉律/null 金科玉条/null 金童玉女/null 金笔/null 金箍/null 金箍棒/null 金箔/null 金箔匠/null 金粉/null 金粟兰/null 金红石/null 金绣/null 金缕玉衣/null 金翅/null 金翅擘海/null 金翅雀/null 金舌弊口/null 金色/null 金花/null 金花菜/null 金茂大厦/null 金莲/null 金莲花/null 金菇/null 金蛋/null 金蝉/null 金蝉脱壳/null 金融/null 金融业/null 金融体制/null 金融信息/null 金融区/null 金融危机/null 金融家/null 金融寡头/null 金融市场/null 金融改革/null 金融政策/null 金融时报/null 金融时报指数/null 金融机关/null 金融机构/null 金融杠杆/null 金融界/null 金融系统/null 金融衍生产品/null 金融衍生工具/null 金融资本/null 金融风暴/null 金融风波/null 金蟾脱壳/null 金衡/null 金表/null 金角湾/null 金谷酒数/null 金貂换酒/null 金质/null 金质奖/null 金质奖章/null 金边/null 金迷纸醉/null 金酒/null 金里奇/null 金量/null 金銮殿/null 金针/null 金针度人/null 金针花/null 金针菇/null 金针菜/null 金针虫/null 金钗/null 金钗十二/null 金钟/null 金钟儿/null 金钢/null 金钢石/null 金钥匙/null 金钱/null 金钱万能/null 金钱上/null 金钱不能买来幸福/null 金钱挂帅/null 金钱板/null 金钱至上/null 金钱花/null 金钱草/null 金钱豹/null 金钱非万能/null 金钵/null 金铃子/null 金铜合铸/null 金银/null 金银块/null 金银岛/null 金银箔/null 金银花/null 金银财宝/null 金银铜铁锡/null 金链/null 金锭/null 金镏子/null 金镑/null 金镯/null 金门/null 金门岛/null 金阁寺/null 金阊/null 金阊区/null 金阳/null 金陵/null 金陵大学/null 金雀花/null 金霉素/null 金顶戴菊/null 金顶戴菊鸟/null 金领/null 金额/null 金饭碗/null 金饰/null 金马奖/null 金马玉堂/null 金鱼/null 金鱼佬/null 金鱼草/null 金鱼藻/null 金鱼虫/null 金鸡/null 金鸡奖/null 金鸡独立/null 金鸡纳/null 金鸡纳树/null 金鸡纳霜/null 金黄/null 金黄色/null 金鼓/null 金鼓喧天/null 金鼓连天/null 金鼓齐鸣/null 金龟/null 金龟子/null 釜中之鱼/null 釜中生鱼/null 釜山/null 釜山市/null 釜山广域市/null 釜底抽薪/null 釜底枯鱼/null 釜底游鱼/null 釜里之鱼/null 釜鱼幕燕/null 鉴于/null 鉴于此/null 鉴价/null 鉴别/null 鉴别力/null 鉴定/null 鉴定人/null 鉴定会/null 鉴定委员会/null 鉴定家/null 鉴定者/null 鉴定证书/null 鉴往/null 鉴往知来/null 鉴戒/null 鉴明/null 鉴毛辨色/null 鉴真/null 鉴真和尚/null 鉴识/null 鉴貌辨色/null 鉴赏/null 鉴赏力/null 鉴赏家/null 鉴赏能力/null 銮驾/null 錾刀/null 錾子/null 鎏金/null 鏊子/null 鏖兵/null 鏖战/null 钇铁石榴石/null 针刺/null 针刺麻醉/null 针剂/null 针压法/null 针叶/null 针叶林/null 针叶树/null 针叶植物/null 针头/null 针孔/null 针孔摄影机/null 针对/null 针对性/null 针尖/null 针尖状/null 针形/null 针感/null 针杆/null 针棒/null 针毡/null 针法/null 针灸/null 针灸疗法/null 针状/null 针状体/null 针状叶/null 针疗/null 针眼/null 针砭/null 针筒/null 针箍/null 针箍儿/null 针管/null 针线/null 针线包/null 针线活/null 针线活儿/null 针线活计/null 针线盒/null 针线箔篱/null 针线袋/null 针织/null 针织品/null 针织机/null 针织物/null 针编/null 针脚/null 针芒/null 针角/null 针贬/null 针锋相对/null 针鱼/null 针黹/null 针鼢/null 针鼹/null 针鼻/null 针鼻儿/null 钉上/null 钉书/null 钉书机/null 钉书针/null 钉住/null 钉入/null 钉在/null 钉头/null 钉头槌/null 钉子/null 钉子户/null 钉帽/null 钉扣/null 钉枪/null 钉桩/null 钉梢/null 钉死/null 钉牢/null 钉眼/null 钉紧/null 钉耙/null 钉螺/null 钉进/null 钉钉/null 钉钯/null 钉钳/null 钉锤/null 钉鞋/null 钉齿耙/null 钌铞儿/null 钎头/null 钎子/null 钐镰/null 钒酸盐/null 钒钾铀矿石/null 钒铅矿/null 钓丝/null 钓具/null 钓名欺世/null 钓名沽誉/null 钓客/null 钓杆/null 钓竿/null 钓绳/null 钓誉沽名/null 钓钩/null 钓钩儿/null 钓铒/null 钓饵/null 钓鱼/null 钓鱼人/null 钓鱼列岛/null 钓鱼台/null 钓鱼岛/null 钓鱼式攻击/null 钓鱼执法/null 钓鱼杆/null 钓鱼用具/null 钓鱼者/null 钙化/null 钙塑材料/null 钙岩/null 钙片/null 钙质/null 钙镁磷肥/null 钛合金/null 钛铁矿/null 钜子/null 钜款/null 钜野战役/null 钜防/null 钜额/null 钝伤/null 钝化/null 钝器/null 钝头剑/null 钝形/null 钝态/null 钝角/null 钝音/null 钝齿/null 钞票/null 钟乐/null 钟乳石/null 钟匠/null 钟塔/null 钟声/null 钟头/null 钟室/null 钟山/null 钟山区/null 钟形/null 钟形虫/null 钟情/null 钟摆/null 钟楚红/null 钟楼/null 钟楼区/null 钟楼怪人/null 钟灵毓秀/null 钟点/null 钟点房/null 钟爱/null 钟相杨幺起义/null 钟祥/null 钟祥县/null 钟离/null 钟繇/null 钟罩/null 钟表/null 钟表匠/null 钟表学/null 钟表店/null 钟表盘/null 钟面/null 钟馗/null 钟鸣漏尽/null 钟鸣鼎食/null 钟鼎/null 钟鼎文/null 钟鼓/null 钠盐/null 钡矿/null 钡餐/null 钢丝/null 钢丝绳/null 钢丝锯/null 钢丸/null 钢产/null 钢产量/null 钢刀/null 钢制/null 钢包/null 钢化/null 钢化玻璃/null 钢印/null 钢厂/null 钢叉/null 钢圈/null 钢块/null 钢坯/null 钢尺/null 钢带/null 钢弹/null 钢扣/null 钢曲尺/null 钢材/null 钢条/null 钢板/null 钢柱/null 钢梁/null 钢水/null 钢渣/null 钢炉/null 钢炮/null 钢片/null 钢珠/null 钢琴/null 钢琴家/null 钢琴师/null 钢琴演奏/null 钢瓶/null 钢盔/null 钢码/null 钢砂/null 钢种/null 钢窗/null 钢笔/null 钢笔套/null 钢笔尖/null 钢笔画/null 钢筋/null 钢筋水泥/null 钢筋混凝土/null 钢筘/null 钢箍/null 钢管/null 钢管舞/null 钢箭/null 钢箱/null 钢粒/null 钢精/null 钢索/null 钢纸/null 钢结构/null 钢缆/null 钢耀/null 钢花/null 钢轨/null 钢轴/null 钢针/null 钢钎/null 钢铁/null 钢铁公司/null 钢铁厂/null 钢铁学院/null 钢铁工业/null 钢锭/null 钢锯/null 钢镚/null 钢鞭/null 钢骨/null 钢骨水泥/null 钣金件/null 钤记/null 钥匙/null 钥匙圈/null 钥匙孔/null 钥匙洞孔/null 钥匙链/null 钥孔/null 钦仰/null 钦佩/null 钦佩莫名/null 钦北/null 钦北区/null 钦南/null 钦南区/null 钦命/null 钦奈/null 钦定/null 钦州/null 钦州地区/null 钦差/null 钦差大臣/null 钦慕/null 钦挹/null 钦敬/null 钦羡/null 钦贤好士/null 钦赏/null 钦赐/null 钦迟/null 钧启/null 钧鉴/null 钨丝/null 钨丝灯/null 钨灯/null 钨矿/null 钨砂/null 钨粉/null 钨钢/null 钨钼/null 钨锰/null 钩上/null 钩住/null 钩儿/null 钩元提要/null 钩刀/null 钩刺/null 钩号/null 钩吻/null 钩头篙/null 钩子/null 钩形/null 钩心斗角/null 钩扣/null 钩枪/null 钩爪/null 钩爪锯牙/null 钩状/null 钩状物/null 钩玄提要/null 钩破/null 钩稽/null 钩章棘句/null 钩端螺旋体病/null 钩竿/null 钩紧/null 钩线/null 钩编/null 钩花/null 钩虫/null 钩身致远/null 钩边/null 钩针/null 钩隐抉微/null 钮带/null 钮扣/null 钮扣孔/null 钮扣状/null 钱三强/null 钱不是万能的没钱是万万不能的/null 钱串/null 钱串儿/null 钱串子/null 钱儿癣/null 钱其琛/null 钱包/null 钱可通神/null 钱塘/null 钱塘江/null 钱塘潮/null 钱多/null 钱多事少离家近/null 钱夹/null 钱学森/null 钱币/null 钱庄/null 钱库/null 钱是万恶之源/null 钱柜/null 钱树/null 钱款/null 钱永健/null 钱物/null 钱皮/null 钱票/null 钱筒/null 钱箱/null 钱粮/null 钱能通神/null 钱袋/null 钱谷/null 钱财/null 钱起/null 钱钞/null 钱钟书/null 钱铺/null 钱鼠/null 钱龙/null 钳住/null 钳制/null 钳口/null 钳口吞舌/null 钳口挢舌/null 钳口结舌/null 钳子/null 钳工/null 钳形突击/null 钳状/null 钳马衔枚/null 钴矿/null 钵僧/null 钵头/null 钵子/null 钵盂/null 钵衣/null 钻井/null 钻井人/null 钻井平台/null 钻井船/null 钻井队/null 钻入/null 钻具/null 钻出/null 钻到/null 钻劲/null 钻卡/null 钻压/null 钻圈/null 钻坚仰高/null 钻塔/null 钻天打洞/null 钻天杨/null 钻天柳/null 钻头/null 钻头卡盘/null 钻头夹盘/null 钻头就锁/null 钻子/null 钻孔/null 钻孔器/null 钻孔锥/null 钻床/null 钻开/null 钻心/null 钻心虫/null 钻戒/null 钻探/null 钻探机/null 钻故纸堆/null 钻木取火/null 钻机/null 钻杆/null 钻求/null 钻洞/null 钻火得冰/null 钻版/null 钻牛角/null 钻牛角尖/null 钻眼/null 钻石/null 钻石王老五/null 钻研/研究,琢磨,研讨 钻空子/null 钻粉/null 钻紧/null 钻营/null 钻谋/null 钻进/null 钻通/null 钻钻/null 钻锉/null 钼肥/null 钼钢/null 钾盐/null 钾矿/null 钾肥/null 钾骆/null 铀浓缩/null 铀矿/null 铁东/null 铁东区/null 铁丝/null 铁丝状/null 铁丝网/null 铁中铮铮/null 铁丹/null 铁了心/null 铁人/null 铁公鸡/null 铁兵求火/null 铁兵求酥/null 铁军/null 铁制/null 铁制品/null 铁力/null 铁力木/null 铁勺/null 铁匠/null 铁匠店/null 铁厂/null 铁叉/null 铁合金/null 铁哥们/null 铁哥们儿/null 铁嘴钢牙/null 铁器/null 铁器时代/null 铁圈球/null 铁块/null 铁坚仰高/null 铁塔/null 铁墙铜壁/null 铁壁/null 铁壳/null 铁头/null 铁定/null 铁尔梅兹/null 铁尺/null 铁屑/null 铁山/null 铁山区/null 铁山港区/null 铁岭/null 铁岭地区/null 铁峰/null 铁峰区/null 铁工/null 铁工厂/null 铁幕/null 铁床/null 铁形/null 铁心/null 铁心人/null 铁心石肠/null 铁扇/null 铁打/null 铁打心肠/null 铁托/null 铁扣/null 铁拳/null 铁搭/null 铁撬/null 铁杆/null 铁杆粉丝/null 铁杉/null 铁杖/null 铁杵成针/null 铁杵磨成针/null 铁板/null 铁板一块/null 铁板烧/null 铁板牛柳/null 铁板牛肉/null 铁板茄子/null 铁板钉钉/null 铁架/null 铁柜/null 铁栅/null 铁树/null 铁树开花/null 铁树花开/null 铁栓/null 铁格子/null 铁格架/null 铁案/null 铁案如山/null 铁桥/null 铁桶/null 铁棍/null 铁棒/null 铁棒磨成针/null 铁槌/null 铁橇/null 铁氧体/null 铁水/null 铁汉/null 铁法/null 铁法市/null 铁活/null 铁流/null 铁渣/null 铁渣子/null 铁炉/null 铁炭/null 铁片/null 铁片大鼓/null 铁牛/null 铁环/null 铁球/null 铁甲/null 铁甲舰/null 铁甲船/null 铁甲车/null 铁画/null 铁画银钩/null 铁的/null 铁皮/null 铁皮出羽/null 铁盐/null 铁盒/null 铁盖/null 铁石/null 铁石心肠/null 铁矾土/null 铁矿/null 铁矿石/null 铁砂/null 铁砚磨穿/null 铁砧/null 铁穴逾垣/null 铁穴逾墙/null 铁窗/null 铁笔/null 铁笼/null 铁筋/null 铁箍/null 铁管/null 铁箱/null 铁粉/null 铁索/null 铁索桥/null 铁纱/null 铁线/null 铁线蕨/null 铁罐/null 铁网/null 铁网珊瑚/null 铁肠石心/null 铁腕/null 铁臂/null 铁芯/null 铁蒺藜/null 铁蚕豆/null 铁蛋子/null 铁血宰相/null 铁血政策/null 铁西/null 铁西区/null 铁观音/null 铁证/null 铁证如山/null 铁质/null 铁路/null 铁路分局/null 铁路局/null 铁路干线/null 铁路桥梁/null 铁路线/null 铁路运输/null 铁蹄/null 铁轨/null 铁轮/null 铁轴/null 铁道/null 铁道兵/null 铁钉/null 铁钩/null 铁钩儿/null 铁钳/null 铁铲/null 铁链/null 铁锅/null 铁锈/null 铁锌/null 铁锚/null 铁锤/null 铁锨/null 铁锹/null 铁镁质/null 铁门/null 铁隙逾墙/null 铁青/null 铁面/null 铁面御史/null 铁面无私/null 铁饭碗/null 铁饼/null 铁饼状/null 铁马/null 铁马金戈/null 铁骑/null 铁骨铮铮/null 铁鸟/null 铁黑/null 铁齿铜牙/null 铃兰/null 铃医/null 铃响/null 铃响了/null 铃声/null 铃木/null 铃羊/null 铃虫/null 铃铛/null 铃鼓/null 铄石流金/null 铅丝/null 铅中毒/null 铅丸/null 铅丹/null 铅刀/null 铅刀一割/null 铅制/null 铅印/null 铅垂线/null 铅垂面/null 铅字/null 铅字合金/null 铅封/null 铅山/null 铅带/null 铅弹/null 铅条/null 铅板/null 铅毒/null 铅油/null 铅活字印刷机/null 铅版/null 铅版印刷/null 铅玻璃/null 铅球/null 铅直/null 铅矿/null 铅笔/null 铅笔刀/null 铅笔画/null 铅笔盒/null 铅箔/null 铅管/null 铅管工/null 铅粉/null 铅色/null 铅芯/null 铅质/null 铅酸蓄电池/null 铅针/null 铅钢/null 铅铁/null 铅锌/null 铅锤/null 铆劲/null 铆劲儿/null 铆工/null 铆接/null 铆焊/null 铆眼/null 铆钉/null 铆钉枪/null 铊中毒/null 铎尼达利敦/null 铐住/null 铐子/null 铐手铐/null 铗子/null 铙钹/null 铛铛/null 铛铛车/null 铜丝/null 铜乐/null 铜仁/null 铜仁地区/null 铜仁市/null 铜像/null 铜元/null 铜制/null 铜制品/null 铜匠/null 铜器/null 铜器时代/null 铜圆/null 铜墙/null 铜墙铁壁/null 铜头铁额/null 铜子儿/null 铜官山/null 铜官山区/null 铜导电/null 铜屑/null 铜山/null 铜山西崩洛钟东应/null 铜川/null 铜币/null 铜斑/null 铜材/null 铜条/null 铜板/null 铜柱/null 铜梁/null 铜棒/null 铜模/null 铜活/null 铜片/null 铜版/null 铜版画/null 铜牌/null 铜琶铁板/null 铜瓦/null 铜矿/null 铜筋/null 铜筋铁肋/null 铜筋铁骨/null 铜箔/null 铜管/null 铜管乐器/null 铜管乐队/null 铜线/null 铜绿/null 铜绿色/null 铜肥/null 铜臭/null 铜色/null 铜轴/null 铜钱/null 铜铃/null 铜锈/null 铜锣/null 铜锣乡/null 铜锣湾/null 铜锣烧/null 铜锤/null 铜镜/null 铜陵/null 铜陵县/null 铜驼荆棘/null 铜鼓/null 铝丝/null 铝冶术/null 铝制/null 铝合金/null 铝土/null 铝土矿/null 铝壶/null 铝处理/null 铝屑/null 铝带/null 铝材/null 铝板/null 铝棒/null 铝热剂/null 铝盆/null 铝矾土/null 铝矿/null 铝箔/null 铝箔纸/null 铝管/null 铝粉/null 铝锅/null 铝锭/null 铠甲/null 铡刀/null 铡草/null 铡草机/null 铢两/null 铢两悉称/null 铢积寸累/null 铢铢较量/null 铣刀/null 铣切/null 铣工/null 铣床/null 铣铁/null 铤而走险/null 铨叙/null 铨衡/null 铩羽而归/null 铫子/null 铬丝/null 铬钢/null 铬铁/null 铬铁矿/null 铬镍钢/null 铭刻/null 铭刻在心/null 铭心/null 铭心刻骨/null 铭心镂骨/null 铭感/null 铭文/null 铭旌/null 铭牌/null 铭瑄/null 铭言/null 铭记/null 铭记在心/null 铭谢/null 铭辞/null 铭饥镂骨/null 铮铮/null 铮铮铁汉/null 铮铮铁骨/null 铰刀/null 铰孔/null 铰接/null 铰链/null 铱金/null 铱金笔/null 铲出/null 铲凿/null 铲土/null 铲土机/null 铲子/null 铲平/null 铲掉/null 铲斗/null 铲起/null 铲蹚/null 铲车/null 铲运机/null 铲运车/null 铲除/null 铲雪车/null 铴锣/null 铵水/null 铵盐/null 银丝卷/null 银丝族/null 银两/null 银中毒/null 银丹/null 银亮/null 银价/null 银元/null 银光/null 银制/null 银匠/null 银发/null 银叶/null 银号/null 银器/null 银团/null 银圆/null 银块/null 银坛/null 银奖/null 银婚/null 银子/null 银屏/null 银屑/null 银山/null 银州/null 银州区/null 银币/null 银帆/null 银幕/null 银座/null 银晃晃/null 银本位/null 银本位制/null 银朱/null 银杏/null 银条/null 银条菜/null 银杯/null 银枞/null 银样镴枪头/null 银根/null 银桦/null 银楼/null 银汉/null 银河/null 银河星云/null 银河系/null 银洋/null 银海/null 银海区/null 银漂法/null 银灰/null 银灰色/null 银点/null 银熊奖/null 银燕/null 银牌/null 银狐/null 银狮奖/null 银环蛇/null 银瓶/null 银白/null 银白杨/null 银白色/null 银盘/null 银矿/null 银票/null 银箔/null 银粉/null 银红/null 银翘解毒丸/null 银耳/null 银联/null 银胶菊/null 银色/null 银苔/null 银苗/null 银莲花/null 银蓬花/null 银行/null 银行业/null 银行业务/null 银行卡/null 银行团/null 银行存款/null 银行家/null 银行帐号/null 银行户头/null 银角/null 银角子/null 银货两讫/null 银质/null 银质奖/null 银质奖章/null 银贷/null 银辉/null 银针/null 银钩铁画/null 银钱/null 银锭/null 银阁寺/null 银鱼/null 银鲳/null 银鼠/null 铸件/null 铸像/null 铸块/null 铸型/null 铸字/null 铸山煮海/null 铸工/null 铸币/null 铸成/null 铸成大错/null 铸术/null 铸模/null 铸版/null 铸石/null 铸造/null 铸造厂/null 铸造品/null 铸造物/null 铸金/null 铸钟/null 铸钢/null 铸铁/null 铸铜/null 铸错/null 铸锭/null 铸鼎象物/null 铺上/null 铺下/null 铺以/null 铺位/null 铺保/null 铺叙/null 铺在/null 铺地/null 铺地板/null 铺地毯/null 铺地石/null 铺垫/null 铺天盖地/null 铺好/null 铺子/null 铺家/null 铺展/null 铺席/null 铺席子/null 铺平/null 铺平道路/null 铺床/null 铺底/null 铺开/null 铺张/null 铺张扬厉/null 铺张浪费/null 铺成/null 铺户/null 铺捐/null 铺排/null 铺摆/null 铺摊/null 铺放/null 铺有/null 铺板/null 铺桥面/null 铺沙/null 铺满/null 铺炕/null 铺瓦/null 铺瓷砖/null 铺盖/null 铺盖卷/null 铺盖卷儿/null 铺眉苫眼/null 铺石/null 铺砌/null 铺磁/null 铺筑/null 铺管/null 铺网/null 铺草/null 铺草坪/null 铺行/null 铺衍/null 铺衬/null 铺设/null 铺谋定计/null 铺路/null 铺路工/null 铺路石/null 铺轨/null 铺道/null 铺铁轨/null 铺铺/null 铺锦列绣/null 铺陈/null 铺面/null 铺面于/null 铺面房/null 铺首/null 链传动/null 链住/null 链子/null 链孔/null 链带/null 链式/null 链式反应/null 链式裂变反应/null 链形/null 链接/null 链条/null 链板/null 链烃/null 链环/null 链球/null 链球菌/null 链结/null 链表/null 链路/null 链路层/null 链轨/null 链轮/null 链钳子/null 链锯/null 链霉素/null 铿声/null 铿然/null 铿铿声/null 铿锵/null 铿锵声/null 销价/null 销住/null 销假/null 销出/null 销势/null 销区/null 销号/null 销售/null 销售一空/null 销售价格/null 销售市场/null 销售总额/null 销售时点/null 销售时点情报系统/null 销售点/null 销售者/null 销售部/null 销售量/null 销售额/null 销地/null 销场/null 销声匿影/null 销声匿迹/null 销声敛迹/null 销子/null 销帐/null 销往/null 销案/null 销毁/null 销给/null 销脏/null 销蚀/null 销行/null 销账/null 销货/null 销货帐/null 销赃/null 销路/null 销路好/null 销量/null 销金窟/null 销钉/null 销铄/null 销魂/null 销魂夺魄/null 锁上/null 锁人/null 锁住/null 锁具/null 锁匙/null 锁匠/null 锁呐/null 锁国/null 锁头/null 锁好/null 锁孔/null 锁存器/null 锁定/null 锁店/null 锁扣/null 锁掉/null 锁掣/null 锁柜/null 锁眼/null 锁着/null 锁簧/null 锁紧/null 锁线/null 锁缝/null 锁钥/null 锁链/null 锁门/null 锁闩/null 锁频/null 锁骨/null 锂电池/null 锂离子电池/null 锃亮/null 锄仔/null 锄地/null 锄头/null 锄头雨/null 锄奸/null 锄强扶弱/null 锄掘/null 锄犁/null 锄田/null 锄草/null 锅上/null 锅中/null 锅伙/null 锅匠/null 锅台/null 锅圈/null 锅垢/null 锅垫/null 锅头/null 锅子/null 锅巴/null 锅庄/null 锅底/null 锅灶/null 锅炉/null 锅炉室/null 锅烟子/null 锅盔/null 锅盖/null 锅粑/null 锅贴/null 锅贴儿/null 锅里/null 锅铲/null 锅顶/null 锅饼/null 锅驼机/null 锆合金/null 锆石/null 锆英砂/null 锈了/null 锈坏/null 锈斑/null 锈病/null 锈色/null 锈蚀/null 锈迹/null 锈钢/null 锈铁/null 锉刀/null 锉切/null 锉去/null 锋刃/null 锋利/null 锋发韵流/null 锋口/null 锋芒/null 锋芒内敛/null 锋芒所向/null 锋芒毕露/null 锋芒逼人/null 锋钢/null 锋镝/null 锋镝余生/null 锋面/null 锌块/null 锌板/null 锌极/null 锌片/null 锌版/null 锌版术/null 锌版画/null 锌白/null 锌皮/null 锌矿/null 锌肥/null 锌钡白/null 锌锭/null 锌镀锌/null 锐不可当/null 锐减/null 锐利/null 锐势/null 锐化/null 锐升/null 锐变/null 锐器/null 锐增/null 锐声/null 锐志/null 锐意/null 锐意进取/null 锐敏/null 锐未可当/null 锐步/null 锐气/null 锐眼/null 锐角/null 锐进/null 锐齿/null 锑化物/null 锑华/null 锒铛/null 锒铛入狱/null 锔子/null 锔碗儿的/null 锕系元素/null 锖色/null 锗石/null 锗钩/null 错义突变/null 错乱/null 错了/null 错事/null 错交/null 错估/null 错位/null 错儿/null 错写/null 错列/null 错别字/null 错动/null 错印/null 错发/null 错号/null 错在/null 错填/null 错处/null 错失/null 错失良机/null 错字/null 错峰/null 错开/null 错式/null 错彩镂金/null 错征/null 错怪/null 错愕/null 错扣/null 错报/null 错收/null 错杂/null 错案/null 错法/null 错漏/null 错爱/null 错牌/null 错用/null 错疑/null 错的/null 错看/null 错算/null 错综/null 错综复杂/null 错者/null 错节盘根/null 错落/null 错落不齐/null 错落有致/null 错视/null 错觉/null 错觉结合/null 错角/null 错解/null 错认/null 错记/null 错译/null 错话/null 错误/null 错误率/null 错误倾向/null 错误思想/null 错误观点/null 错读/null 错路/null 错车/null 错转/null 错过/null 错退/null 错那/null 错金/null 错非/null 锚固/null 锚地/null 锚杆支架/null 锚爪/null 锚索/null 锚钩/null 锚链/null 锚链孔/null 锛子/null 锞子/null 锡伯/null 锡克/null 锡克教/null 锡兰/null 锡兰肉桂/null 锡制/null 锡剧/null 锡匠/null 锡嘴/null 锡器/null 锡婚/null 锡安/null 锡安山/null 锡尔河/null 锡山/null 锡山区/null 锡当河/null 锡拉库萨/null 锡杖/null 锡林浩特/null 锡林郭勒/null 锡瓦/null 锡石/null 锡矿/null 锡矿山/null 锡矿工/null 锡箔/null 锡箔纸/null 锡纸/null 锡蜡/null 锡酸盐/null 锡金/null 锡铁匠/null 锡铅/null 锡锭/null 锡镴/null 锡霍特/null 锡霍特・阿林/null 锡霍特・阿林山脉/null 锡霍特山脉/null 锡鼓/null 锢囚锋/null 锢漏锅/null 锢露/null 锣声/null 锣鼓/null 锣鼓听音/null 锣鼓喧天/null 锣齐鼓不齐/null 锤头鲨/null 锤子/null 锤打/null 锤炼/null 锤练/null 锤骨/null 锤骨柄/null 锥体/null 锥刀之利/null 锥刀之末/null 锥刀之用/null 锥刺股/null 锥处囊中/null 锥套/null 锥子/null 锥尖/null 锥度/null 锥形/null 锥形物/null 锥探/null 锥栗/null 锥状/null 锥虫病/null 锥面/null 锥骨/null 锥齿轮/null 锦上添花/null 锦县/null 锦囊/null 锦囊佳制/null 锦囊佳句/null 锦囊妙计/null 锦屏/null 锦州/null 锦帛/null 锦心绣口/null 锦心绣腹/null 锦旗/null 锦春/null 锦标/null 锦标主义/null 锦标赛/null 锦江/null 锦江区/null 锦片前程/null 锦瑟华年/null 锦瑟年华/null 锦生/null 锦盒/null 锦秀/null 锦纶/null 锦绣/null 锦绣前程/null 锦绣山河/null 锦绣心肠/null 锦绣江山/null 锦绣河山/null 锦缎/null 锦菜/null 锦葵/null 锦蛇/null 锦衣/null 锦衣玉食/null 锦西/null 锦西县/null 锦言/null 锦鸡/null 锭子/null 锭子油/null 键位/null 键值/null 键入/null 键击/null 键区/null 键名/null 键帽/null 键控/null 键槽/null 键盘/null 键盘乐器/null 键码/null 键词/null 锯切痕/null 锯子/null 锯屑/null 锯工/null 锯床/null 锯开/null 锯成/null 锯掉/null 锯断/null 锯木/null 锯木匠/null 锯木厂/null 锯木场/null 锯木架/null 锯末/null 锯材/null 锯条/null 锯架/null 锯棕榈/null 锯片/null 锯牙钩瓜/null 锯状/null 锯短/null 锯齿/null 锯齿形/null 锯齿状/null 锯齿草/null 锰土/null 锰矿/null 锰粉/null 锰结核/null 锰肥/null 锰钢/null 锰铁/null 锱珠/null 锱铢必较/null 锱铢较量/null 锲而不舍/null 锵声/null 锵锵/null 锹形虫/null 锻件/null 锻冶/null 锻制/null 锻压/null 锻工/null 锻工术/null 锻接/null 锻材/null 锻模/null 锻炉/null 锻炼/null 锻炼身体/null 锻烧/null 锻练/null 锻造/null 锻铁/null 锻铁炉/null 锻铸/null 锻链/null 锻锤/null 锼弓子/null 镀上/null 镀品/null 镀层/null 镀液/null 镀金/null 镀金于/null 镀铜/null 镀铬/null 镀铬钢/null 镀银/null 镀锌/null 镀锌铁/null 镀锌铁皮/null 镀锡/null 镀锡铁/null 镁光/null 镁光灯/null 镁合金/null 镁盐/null 镁矿/null 镁砂/null 镁砖/null 镁铝/null 镁铝石/null 镂冰雕朽/null 镂刻/null 镂尘吹影/null 镂心刻骨/null 镂月栽云/null 镂月裁云/null 镂空/null 镂蚀/null 镂骨铭心/null 镂骨铭肌/null 镆铘/null 镇上/null 镇企/null 镇住/null 镇区/null 镇压/null 镇压反革命运动/null 镇压器/null 镇压者/null 镇原/null 镇反/null 镇台/null 镇咳/null 镇坪/null 镇妖/null 镇子/null 镇宁/null 镇宁县/null 镇守/null 镇安/null 镇定/null 镇定剂/null 镇定物/null 镇定自若/null 镇定药/null 镇山/null 镇巴/null 镇平/null 镇康/null 镇得住/null 镇日/null 镇星/null 镇暴/null 镇民/null 镇江/null 镇江地区/null 镇沅县/null 镇流器/null 镇海/null 镇海区/null 镇源县/null 镇痉剂/null 镇痛/null 镇痛剂/null 镇痛物/null 镇痛药/null 镇纸/null 镇赉/null 镇远/null 镇里/null 镇长/null 镇雄/null 镇静/null 镇静剂/null 镇静自若/null 镇静药/null 镊子/null 镌刻/null 镌心铭骨/null 镌镂/null 镌骨铭心/null 镌黜/null 镍币/null 镍材/null 镍矿/null 镍箔/null 镍钢/null 镍钴/null 镍铬/null 镍铬丝/null 镏子/null 镏金/null 镏银器/null 镐京/null 镐头/null 镔铁/null 镕炉/null 镖客/null 镖局/null 镖师/null 镖枪/null 镗孔/null 镗床/null 镜中/null 镜像/null 镜像站点/null 镜匣/null 镜台/null 镜头/null 镜子/null 镜式/null 镜架/null 镜框/null 镜框舞台/null 镜湖/null 镜湖区/null 镜片/null 镜破钗分/null 镜般/null 镜花/null 镜花水月/null 镜花缘/null 镜象/null 镜鉴/null 镜铁矿/null 镜面/null 镜鱼/null 镜鸾/null 镣铐/null 镣锁/null 镧系元素/null 镩子/null 镪水/null 镫骨/null 镬子/null 镭射/null 镭射印表机/null 镭射气/null 镭疗法/null 镯子/null 镰仓/null 镰仓幕府/null 镰刀/null 镰刀斧头/null 镰刀细胞贫血/null 镰形血球贫血症/null 镰状细胞血症/null 镴箔/null 镶上/null 镶以/null 镶入/null 镶在/null 镶宝石/null 镶嵌/null 镶嵌物/null 镶嵌画/null 镶嵌著/null 镶木/null 镶牙/null 镶牙学/null 镶石/null 镶补/null 镶边/null 镶边石/null 镶金/null 长一志/null 长一智/null 长三角经济区/null 长上/null 长世/null 长丝/null 长丰/null 长为/null 长久/null 长久远源/null 长乐/null 长乐公主/null 长乐未央/null 长了/null 长于/null 长亭短亭/null 长亲/null 长信/null 长假/null 长兄/null 长兴/null 长凳/null 长出/null 长列/null 长制/null 长剑/null 长势/null 长势喜人/null 长勺之战/null 长发/null 长号/null 长叹/null 长吁短叹/null 长吃/null 长吨/null 长命/null 长命富贵/null 长命百岁/null 长啸/null 长嘴/null 长围巾/null 长圆/null 长圆形/null 长坂坡七进七出/null 长型/null 长垣/null 长城卡/null 长城饭店/null 长堤/null 长处/null 长外衣/null 长夜/null 长夜漫漫/null 长夜难明/null 长大/null 长大了/null 长大成人/null 长大衣/null 长女/null 长姊/null 长媳/null 长子/null 长子的名份/null 长存/null 长孙/null 长孙无忌/null 长宁/null 长安/null 长安区/null 长安大学/null 长安街/null 长安道上/null 长官/null 长官意志/null 长宽/null 长寿/null 长寿菜/null 长尾/null 长局/null 长山山脉/null 长岛/null 长岛冰茶/null 长岭/null 长峡/null 长崎/null 长工/null 长师/null 长平/null 长平之战/null 长年/null 长年累月/null 长幼/null 长庚/null 长度/null 长度单位/null 长度指示符/null 长廊/null 长形/null 长征/null 长得/null 长德/null 长忧/null 长思/null 长恨/null 长恶不悛/null 长成/null 长房/null 长拳/null 长掌义县龙/null 长排/null 长揖/null 长揖不拜/null 长支/null 长效/null 长整型/null 长文/null 长斋/null 长斜/null 长方/null 长方体/null 长方形/null 长日/null 长日照植物/null 长时/null 长时期/null 长时期以来/null 长时间/null 长明/null 长明灯/null 长春藤/null 长曲/null 长服/null 长期/null 长期以来/null 长期共存/null 长期化/null 长期存在/null 长期性/null 长期战/null 长期有效/null 长期稳定性/null 长期间/null 长木条/null 长机/null 长条/null 长条图/null 长枕/null 长枕大被/null 长林丰草/null 长枝/null 长枪/null 长柄/null 长柄勺子/null 长柄大镰刀/null 长梦/null 长梯/null 长棍/null 长椅/null 长歌当哭/null 长此/null 长此下去/null 长此以往/null 长武/null 长段时间/null 长毛/null 长毛绒/null 长毛象/null 长汀/null 长江/null 长江三峡/null 长江三桥/null 长江三角洲/null 长江三角洲经济区/null 长江中下游平原/null 长江口/null 长江大桥/null 长江流域/null 长沙湾/null 长河/null 长治/null 长治久安/null 长治乡/null 长法/null 长波/null 长泰/null 长洲区/null 长活/null 长流/null 长流不息/null 长海/null 长清/null 长清区/null 长满/null 长满草/null 长滨/null 长滨乡/null 长漂/null 长点/null 长点心眼/null 长烟/null 长烟袋/null 长熟/null 长片/null 长牙/null 长物/null 长班/null 长生/null 长生不死/null 长生不老/null 长生久视/null 长生果/null 长生禄位/null 长男/null 长疮/null 长痛不如短痛/null 长瘤/null 长白/null 长白县/null 长白山/null 长白山天池/null 长白镇/null 长的/null 长直/null 长相/null 长眠/null 长睡衣/null 长矛/null 长短/null 长短句/null 长石/null 长程/null 长空/null 长窄/null 长笛/null 长筒/null 长筒袜/null 长筒靴/null 长策/null 长算远略/null 长篇/null 长篇大论/null 长篇小说/null 长篇累牍/null 长篇连载/null 长篇阔论/null 长籼/null 长粗/null 长线/null 长绒/null 长绒棉/null 长统袜/null 长统靴/null 长绳系日/null 长绳系景/null 长编/null 长缨/null 长羽毛/null 长老/null 长老会/null 长者/null 长耳/null 长肥/null 长肥了/null 长胖/null 长脚/null 长腿/null 长膘/null 长臂/null 长臂猿/null 长臂虾/null 长至/null 长舌/null 长舌妇/null 长舌者/null 长草/null 长草区/null 长荣/null 长荣海运/null 长荣航空/null 长葛/null 长虫/null 长虹/null 长蛇座/null 长蛇阵/null 长街/null 长衣/null 长衫/null 长袋网/null 长袍/null 长袍儿/null 长袖/null 长袖善舞/null 长袜/null 长裙/null 长裙裤/null 长裤/null 长角/null 长角羊/null 长诗/null 长话/null 长调/null 长谈/null 长赘疣/null 长足/null 长足进展/null 长足进步/null 长跑/null 长跑运动员/null 长距离/null 长距离比赛/null 长跪/null 长路/null 长辈/null 长辔远御/null 长辔远驭/null 长辞/null 长达/null 长进/null 长远/null 长远利益/null 长远打算/null 长远目标/null 长远规划/null 长途/null 长途汽车/null 长途电话/null 长途网路/null 长途话费/null 长途跋涉/null 长途车/null 长途运输/null 长逝/null 长里/null 长野/null 长野县/null 长钉/null 长锤/null 长镜头/null 长长/null 长队/null 长青/null 长靠椅/null 长靴/null 长鞭/null 长音/null 长顺/null 长须/null 长须鲸/null 长颈/null 长颈瓶/null 长颈鹿/null 长颈龙/null 长风破浪/null 长驱/null 长驱径入/null 长驱直入/null 长驱而入/null 长骨/null 长高/null 长鼓/null 长鼓舞/null 长鼻/null 长鼻目/null 长齐/null 长龙/null 门丁/null 门上/null 门下/null 门不停宾/null 门不夜关/null 门不夜扃/null 门人/null 门侧/null 门儿/null 门兴格拉德巴赫/null 门内/null 门冬/null 门到户说/null 门到门/null 门到门服务/null 门前/null 门前三包/null 门卫/null 门厅/null 门口/null 门可张罗/null 门可罗雀/null 门号/null 门后/null 门地/null 门坎/null 门坎儿/null 门垫/null 门堪罗雀/null 门墙/null 门墙桃李/null 门墩/null 门外/null 门外汉/null 门头沟/null 门子/null 门客/null 门对/null 门将/null 门岗/null 门市/null 门市部/null 门帘/null 门店/null 门庭/null 门庭冷落/null 门庭若市/null 门庭若缡/null 门庭赫奕/null 门廊/null 门开/null 门当户对/null 门径/null 门徒/null 门志/null 门户/null 门户之争/null 门户之见/null 门户开放/null 门户开放政策/null 门户网站/null 门房/null 门扇/null 门扣/null 门技/null 门把/null 门挡/null 门捷列夫/null 门插/null 门插关儿/null 门插销/null 门斗/null 门无杂宾/null 门望/null 门板/null 门柄/null 门柱/null 门栓/null 门框/null 门桥/null 门楣/null 门楼/null 门槛/null 门槛儿/null 门洞/null 门洞儿/null 门派/null 门源/null 门源县/null 门烟/null 门牌/null 门牌号/null 门牙/null 门环/null 门环子/null 门球/null 门生/null 门生古吏/null 门电路/null 门神/null 门票/null 门禁/null 门禁森严/null 门窗/null 门童/null 门第/null 门类/null 门紧/null 门缝/null 门罗/null 门罗主义/null 门联/null 门脸/null 门脸儿/null 门萨/null 门衰祚薄/null 门见/null 门警/null 门诊/null 门诊室/null 门诊所/null 门诊部/null 门路/null 门边/null 门边框/null 门道/null 门里/null 门里出身/null 门钹/null 门铃/null 门锁/null 门门/null 门闩/null 门阀/null 门阶/null 门限/null 门隙/null 门静脉/null 门面/null 门面话/null 门额/null 门风/null 门首/null 门鼻儿/null 门齿/null 闩上/null 闩住/null 闩掩/null 闩锁/null 闩门/null 闪亮/null 闪亮儿/null 闪亮物/null 闪光/null 闪光灯/null 闪光点/null 闪出/null 闪击/null 闪击战/null 闪动/null 闪卡/null 闪含语系/null 闪回/null 闪失/null 闪婚/null 闪存/null 闪存盘/null 闪射/null 闪开/null 闪念/null 闪放/null 闪族/null 闪映/null 闪灯/null 闪灼/null 闪点/null 闪烁/null 闪烁体/null 闪烁其词/null 闪烁其辞/null 闪熠/null 闪现/null 闪电/null 闪电式/null 闪电式结婚/null 闪电战/null 闪痛/null 闪眼/null 闪石/null 闪耀/null 闪腰/null 闪语/null 闪身/null 闪躲/null 闪辉/null 闪过/null 闪避/null 闪铄/null 闪锌矿/null 闪闪/null 闪闪发光/null 闪露/null 闭上/null 闭上嘴巴/null 闭会/null 闭会祈祷/null 闭元音/null 闭关/null 闭关政策/null 闭关自守/null 闭关锁国/null 闭包/null 闭区间/null 闭卷考试/null 闭口/null 闭口不谈/null 闭口韵/null 闭合/null 闭合电路/null 闭嘴/null 闭图象定理/null 闭域/null 闭塞/null 闭塞眼睛捉麻雀/null 闭子集/null 闭居/null 闭幕/null 闭幕式/null 闭幕词/null 闭明塞聪/null 闭月/null 闭月羞花/null 闭架式/null 闭止/null 闭气/null 闭环/null 闭目/null 闭目养神/null 闭目塞听/null 闭眼/null 闭着/null 闭经/null 闭花/null 闭著/null 闭起/null 闭路/null 闭路电视/null 闭锁/null 闭锁期/null 闭门/null 闭门却扫/null 闭门塞窦/null 闭门思过/null 闭门羹/null 闭门觅句/null 闭门谢客/null 闭门造车/null 闭阁思过/null 闭音/null 闭音节/null 闭馆/null 问上/null 问世/null 问事/null 问人/null 问他/null 问价/null 问住/null 问你/null 问侯/null 问俗/null 问倒/null 问候/null 问出/null 问到/null 问卜/null 问卷/null 问及/null 问及此事/null 问句/null 问号/null 问名/null 问吧/null 问员/null 问她/null 问好/null 问安/null 问安视膳/null 问客杀鸡/null 问寒问暖/null 问心/null 问心无愧/null 问心有愧/null 问我/null 问政/null 问斩/null 问明/null 问柳寻花/null 问案/null 问法/null 问津/null 问牛知马/null 问着/null 问答/null 问答法/null 问答者/null 问罪/null 问罪之师/null 问羊知马/null 问者/null 问自己/null 问荆/null 问表/null 问讯/null 问诊/null 问话/null 问询/null 问诸水滨/null 问责/null 问责性/null 问起/null 问路/null 问这/null 问道/null 问道于盲/null 问钟点/null 问长问短/null 问问/null 问难/null 问题/null 问题儿童/null 问题在于/null 问题少年/null 问题是/null 问鼎/null 问鼎中原/null 问鼎轻重/null 闯事/null 闯入/null 闯入者/null 闯关/null 闯关者/null 闯出/null 闯劲/null 闯将/null 闯江湖/null 闯王/null 闯王陵/null 闯祸/null 闯红灯/null 闯练/null 闯荡/null 闯荡江湖/null 闯过/null 闯进/null 闰年/null 闰日/null 闰月/null 闰音/null 闱墨/null 闲不住/null 闲习/null 闲书/null 闲事/null 闲云孤鹤/null 闲云野鹤/null 闲人/null 闲冗/null 闲口/null 闲在/null 闲地/null 闲坐/null 闲官/null 闲居/null 闲工/null 闲工夫/null 闲差/null 闲差事/null 闲常/null 闲庭/null 闲弃/null 闲得/null 闲心/null 闲情/null 闲情逸致/null 闲情逸趣/null 闲愁/null 闲扯/null 闲散/null 闲日/null 闲时/null 闲晃/null 闲暇/null 闲杂/null 闲杂人员/null 闲杂人等/null 闲来/null 闲来无事/null 闲民/null 闲气/null 闲汉/null 闲混/null 闲游/null 闲着/null 闲磕牙/null 闲神野鬼/null 闲空/null 闲章/null 闲篇/null 闲置/null 闲置不用/null 闲聊/null 闲聊天/null 闲职/null 闲花/null 闲花野草/null 闲荡/null 闲著/null 闲言/null 闲言碎语/null 闲言闲语/null 闲话/null 闲话家常/null 闲语/null 闲诳/null 闲谈/null 闲谈者/null 闲适/null 闲逛/null 闲逸/null 闲遐/null 闲邪存诚/null 闲钱/null 闲雅/null 闲静/null 闳中肆外/null 间不容发/null 间不容息/null 间中/null 间低/null 间作/null 间做/null 间充/null 间充质/null 间充质干细胞/null 间内/null 间冰期/null 间发性/null 间壁/null 间奏/null 间奏曲/null 间层/null 间或/null 间接/null 间接宾语/null 间接推理/null 间接税/null 间接经验/null 间接肥料/null 间接证据/null 间接调控/null 间接贸易/null 间接选举/null 间数/null 间断/null 间日/null 间时/null 间有/null 间杂/null 间架/null 间柱/null 间歇/null 间歇热/null 间歇训练/null 间种/null 间续/null 间而/null 间脑/null 间苗/null 间谍/null 间谍战/null 间谍活动/null 间谍网/null 间谍罪/null 间谍软件/null 间质/null 间距/null 间道/null 间里/null 间量/null 间隔/null 间隔号/null 间隔性/null 间隔摄影/null 间隙/null 闵凶/null 闵科夫斯基/null 闶阆/null 闷人/null 闷住/null 闷倦/null 闷声不响/null 闷声闷气/null 闷头/null 闷头儿/null 闷子车/null 闷死/null 闷气/null 闷烧/null 闷热/null 闷睡/null 闷笑/null 闷罐车/null 闷葫芦/null 闷葫芦罐儿/null 闷谈/null 闷酒/null 闷锄/null 闷闷/null 闷闷不乐/null 闷雷/null 闸刀/null 闸北/null 闸口/null 闸坝/null 闸板/null 闸沟/null 闸瓦/null 闸电/null 闸盒/null 闸门/null 闸阀/null 闹个/null 闹乱/null 闹乱子/null 闹了/null 闹了归齐/null 闹事/null 闹事者/null 闹出/null 闹别扭/null 闹剧/null 闹区/null 闹哄/null 闹哄哄/null 闹噶/null 闹嚷嚷/null 闹场/null 闹声/null 闹天儿/null 闹宴/null 闹市/null 闹市区/null 闹得/null 闹心/null 闹情绪/null 闹意见/null 闹戏/null 闹成/null 闹房/null 闹新房/null 闹架/null 闹洞房/null 闹灾/null 闹热/null 闹独立性/null 闹玄虚/null 闹玩/null 闹病/null 闹着/null 闹着玩儿/null 闹矛盾/null 闹笑话/null 闹翻/null 闹翻天/null 闹者/null 闹肚子/null 闹脾气/null 闹腾/null 闹荒/null 闹轰轰/null 闹酒/null 闹钟/null 闹铃/null 闹铃时钟/null 闹闹/null 闹闹攘攘/null 闹饥荒/null 闹饮/null 闹鬼/null 闺女/null 闺怨/null 闺情/null 闺房/null 闺秀/null 闺窗/null 闺范/null 闺蜜/null 闺门/null 闺门旦/null 闺阁/null 闺阃/null 闻一多/null 闻一知十/null 闻上去/null 闻人/null 闻出/null 闻到/null 闻名/null 闻名不如见面/null 闻名中外/null 闻名于世/null 闻名全国/null 闻名遐尔/null 闻名遐迩/null 闻听/null 闻喜/null 闻声/null 闻得/null 闻悉/null 闻所未闻/null 闻知/null 闻者足戒/null 闻见/null 闻言/null 闻讯/null 闻诊/null 闻达/null 闻过则喜/null 闻闻/null 闻雷失箸/null 闻风/null 闻风丧胆/null 闻风而动/null 闻风而至/null 闻风而起/null 闻风而逃/null 闻风远扬/null 闻馨/null 闻鸡起舞/null 闽中/null 闽侯/null 闽剧/null 闽北/null 闽南/null 闽南话/null 闽江/null 闽清/null 闽籍/null 闽粤/null 闽菜/null 闽语/null 闾尾/null 闾左/null 闾巷/null 闾巷草野/null 闾里/null 闾阎/null 阀瓦/null 阀芯/null 阀门/null 阀阅/null 阁下/null 阁僚/null 阁员/null 阁子/null 阁室/null 阁揆/null 阁搂/null 阁楼/null 阁老/null 阁议/null 阃奥/null 阃寄/null 阃范/null 阅世/null 阅书架/null 阅兵/null 阅兵场/null 阅兵式/null 阅卷/null 阅历/null 阅完/null 阅微草堂笔记/null 阅悉/null 阅报/null 阅本/null 阅知/null 阅览/null 阅览室/null 阅览架/null 阅读/null 阅读器/null 阅读广度/null 阅读广度测验/null 阅读教学/null 阅读时间/null 阅读理解/null 阅读装置/null 阅读辅导/null 阅读障碍/null 阆中/null 阆凤山/null 阆苑/null 阆风/null 阆风巅/null 阇梨/null 阇黎/null 阈值/null 阉人/null 阉割/null 阉割者/null 阉然/null 阉竖/null 阊阖/null 阍者/null 阎君/null 阎王/null 阎王帐/null 阎王爷/null 阎罗/null 阎罗王/null 阎老/null 阎良/null 阎良区/null 阎锡山/null 阎魔/null 阏氏/null 阐发/null 阐扬/null 阐明/null 阐示/null 阐述/null 阐释/null 阑入/null 阑出/null 阑头/null 阑尾/null 阑尾切除术/null 阑尾炎/null 阑尾穴/null 阑干/null 阑槛/null 阑殚/null 阑珊/null 阑遗/null 阑风/null 阒寂/null 阒然/null 阔人/null 阔佬/null 阔别/null 阔叶/null 阔叶林/null 阔叶树/null 阔地/null 阔少/null 阔幅/null 阔度/null 阔性/null 阔斧/null 阔步/null 阔步前进/null 阔步高谈/null 阔气/null 阔绰/null 阔老/null 阔肩/null 阔论/null 阔论高谈/null 阔蹑/null 阔边帽/null 阔达/null 阖家/null 阖庐/null 阖第光临/null 阖闾/null 阖闾城/null 阖闾城遗址/null 阙事/null 阙如/null 阙文/null 阙特勤/null 阙疑/null 阜南/null 阜城/null 阜外/null 阜宁/null 阜平/null 阜康/null 阜成门/null 阜新/null 阜阳/null 阜阳地区/null 队中/null 队伍/null 队列/null 队列训练/null 队别/null 队医/null 队友/null 队名/null 队员/null 队尾/null 队式/null 队形/null 队徽/null 队旗/null 队日/null 队服/null 队歌/null 队礼/null 队花/null 队部/null 队里/null 队长/null 队队/null 阡陌/null 阪上走丸/null 阮元/null 阮咸/null 阮囊羞涩/null 阮安/null 阮崇武/null 阮晋勇/null 防不及防/null 防不胜防/null 防于/null 防人之口甚于防川/null 防修/null 防光/null 防冰/null 防冻/null 防冻剂/null 防冻油/null 防冻液/null 防凌/null 防功害能/null 防务/null 防务协定/null 防化兵/null 防化学兵/null 防化救援/null 防区/null 防卫/null 防卫大臣/null 防卫武器/null 防卫物/null 防卫计划/null 防原子/null 防喘振/null 防噪音/null 防地/null 防坦克炮/null 防城/null 防城区/null 防城县/null 防城各族自治县/null 防城港/null 防堵/null 防备/null 防夹/null 防守/null 防守者/null 防害/null 防寒/null 防寒服/null 防尘/null 防尘板/null 防己/null 防弊/null 防弹/null 防弹衣/null 防御/null 防御工事/null 防御性/null 防御战/null 防御术/null 防御物/null 防御者/null 防微杜渐/null 防微虑远/null 防患/null 防患于未然/null 防患未然/null 防患未萌/null 防意如城/null 防护/null 防护服/null 防护林/null 防护物/null 防护眼镜/null 防护著/null 防拴/null 防损/null 防控/null 防日晒/null 防旱/null 防晒/null 防晒油/null 防晒用品/null 防晒霜/null 防暑/null 防暑降温/null 防暴/null 防暴武器/null 防暴警察/null 防杜/null 防核/null 防核安全/null 防止/null 防毒/null 防毒围裙/null 防毒手套/null 防毒斗篷/null 防毒衣/null 防毒软件/null 防毒通道/null 防毒面具/null 防毒靴套/null 防民之口甚于防川/null 防民之水甚于防川/null 防水/null 防水布/null 防水衣/null 防水表/null 防汗/null 防汛/null 防沙林/null 防油溅网/null 防治/null 防治所/null 防波堤/null 防洪/null 防浪/null 防涝/null 防渗/null 防湿/null 防滑/null 防滑链/null 防漏/null 防潜/null 防潮/null 防潮垫/null 防潮堤/null 防火/null 防火墙/null 防火梯/null 防火线/null 防火衣/null 防火道/null 防火长城/null 防灾/null 防炸/null 防烟/null 防热/null 防爆/null 防特/null 防电剂/null 防疫/null 防疫注射证明/null 防疫站/null 防疫针/null 防病/null 防痨/null 防盗/null 防盗门/null 防砂/null 防碍/null 防碎/null 防磁/null 防磨/null 防空/null 防空军/null 防空壕/null 防空导弹/null 防空洞/null 防线/null 防细菌/null 防老/null 防老剂/null 防腐/null 防腐剂/null 防腐法/null 防臭/null 防臭剂/null 防艾/null 防芽遏萌/null 防范/null 防菌/null 防萌杜渐/null 防蔽耳目/null 防蚀剂/null 防蚊液/null 防血凝/null 防讯/null 防身/null 防避/null 防锈/null 防锈油/null 防锈漆/null 防长/null 防门/null 防闲/null 防除/null 防雨/null 防雨布/null 防雨帽/null 防雪/null 防雪装/null 防雷/null 防震/null 防霉/null 防霜/null 防霜林/null 防静电/null 防音/null 防风/null 防风固沙/null 防风林/null 防饥/null 防骇/null 防鼠/null 防龋/null 阳世/null 阳世间/null 阳东/null 阳九之会/null 阳伞/null 阳信/null 阳儒阴释/null 阳光/null 阳光明媚/null 阳光普照/null 阳光浴/null 阳光计划/null 阳关/null 阳关大道/null 阳关道/null 阳具/null 阳刚/null 阳历/null 阳原/null 阳台/null 阳台云雨/null 阳城/null 阳奉阴违/null 阳宗/null 阳寿/null 阳山/null 阳布/null 阳平/null 阳平声/null 阳性/null 阳性植物/null 阳文/null 阳新/null 阳明/null 阳明区/null 阳明山/null 阳春/null 阳春有脚/null 阳春白雪/null 阳春砂/null 阳曲/null 阳朔/null 阳板/null 阳极/null 阳极射线/null 阳气/null 阳江/null 阳沟/null 阳泉/null 阳炎/null 阳物/null 阳物像/null 阳电/null 阳电子/null 阳电极/null 阳电荷/null 阳畦/null 阳痿/null 阳离子/null 阳萎/null 阳虚/null 阳西/null 阳谋/null 阳谷/null 阳起石/null 阳道/null 阳间/null 阳面/null 阳韵/null 阳高/null 阴丹士林/null 阴云/null 阴冷/null 阴凉/null 阴凉处/null 阴刻/null 阴功/null 阴历/null 阴历年/null 阴历月/null 阴台/null 阴司/null 阴唇/null 阴囊/null 阴天/null 阴寿/null 阴山/null 阴山山脉/null 阴山背后/null 阴差阳错/null 阴帝/null 阴干/null 阴平/null 阴平声/null 阴府/null 阴影/null 阴径/null 阴德/null 阴德必有阳报/null 阴性/null 阴性植物/null 阴户/null 阴文/null 阴晴/null 阴暗/null 阴暗处/null 阴暗面/null 阴曹/null 阴曹地府/null 阴极/null 阴极射线管/null 阴核/null 阴桫/null 阴森/null 阴森森/null 阴毒/null 阴毛/null 阴气/null 阴沉/null 阴沉沉/null 阴沟/null 阴河/null 阴湿/null 阴狠/null 阴电/null 阴电子/null 阴盛阳衰/null 阴着儿/null 阴离/null 阴离子/null 阴离子部位/null 阴私/null 阴穴/null 阴笑/null 阴精/null 阴级射线/null 阴茎/null 阴著/null 阴蒂/null 阴虚/null 阴虚火旺/null 阴虱/null 阴谋/null 阴谋不轨/null 阴谋家/null 阴谋活动/null 阴谋者/null 阴谋论/null 阴谋诡计/null 阴谋颠覆政府罪/null 阴道/null 阴道口/null 阴道棕榈状壁/null 阴道炎/null 阴郁/null 阴部/null 阴错阳差/null 阴门/null 阴间/null 阴阜/null 阴阳/null 阴阳交错/null 阴阳历/null 阴阳家/null 阴阳怪气/null 阴阳易位/null 阴阳水/null 阴阳生/null 阴阴/null 阴险/null 阴险人/null 阴险毒辣/null 阴雨/null 阴霾/null 阴面/null 阴韵/null 阴风/null 阴骘/null 阴魂/null 阴魂不散/null 阴鸷/null 阵亡/null 阵亡战士纪念日/null 阵亡者/null 阵兵/null 阵列/null 阵前/null 阵势/null 阵发性/null 阵地/null 阵地战/null 阵地防御/null 阵子/null 阵容/null 阵式/null 阵形/null 阵法/null 阵痛/null 阵痛期/null 阵纪/null 阵线/null 阵脚/null 阵营/null 阵阵/null 阵雨/null 阵雨般/null 阵风/null 阶下/null 阶下囚/null 阶乘/null 阶地/null 阶层/null 阶数/null 阶梯/null 阶梯式/null 阶梯教室/null 阶梯状/null 阶梯计价/null 阶段/null 阶段分化/null 阶段划分/null 阶段性/null 阶石/null 阶级/null 阶级异己分子/null 阶级式/null 阶级性/null 阶级成分/null 阶级斗争/null 阶级社会/null 阶级观点/null 阶级路线/null 阻值/null 阻击/null 阻击战/null 阻力/null 阻塞/null 阻塞物/null 阻害/null 阻尼/null 阻截/null 阻扰/null 阻扰性/null 阻抗/null 阻抗匹配/null 阻抗变换器/null 阻拦/null 阻挠/null 阻挡/null 阻挡物/null 阻援/null 阻断/null 阻断器/null 阻桡/null 阻梗/null 阻止/null 阻止物/null 阻滞/null 阻滞剂/null 阻燃/null 阻留/null 阻碍/null 阻碍物/null 阻碍者/null 阻绝/null 阻遏/null 阻隔/null 阻难/null 阻雨/null 阿斯氏综合症/null 阿不来提/null 阿不都热西提/null 阿丹/null 阿丽亚娜/null 阿乡/null 阿亚图拉/null 阿亨/null 阿亨工业大学/null 阿亨科技大学/null 阿什哈巴德/null 阿什拉维/null 阿仙药/null 阿们/null 阿伊努/null 阿伊莎/null 阿伏伽德罗/null 阿伏伽德罗定律/null 阿伏伽德罗常数/null 阿伏伽德罗数/null 阿伦/null 阿伦达尔/null 阿伯/null 阿伯丁/null 阿佛洛狄忒/null 阿佤/null 阿依莎/null 阿保之功/null 阿保之劳/null 阿修罗/null 阿兄/null 阿克伦/null 阿克伦河/null 阿克塞县/null 阿克拉/null 阿克苏/null 阿克苏地区/null 阿克苏河/null 阿克赛钦/null 阿克陶/null 阿公/null 阿兰/null 阿兰文/null 阿兰若/null 阿兵哥/null 阿其所好/null 阿兹海默症病患/null 阿兹特克/null 阿凡提/null 阿凡达/null 阿列克西斯/null 阿列夫/null 阿初佛/null 阿利坎特/null 阿利藤/null 阿加维/null 阿加莎・克里斯蒂/null 阿加迪尔/null 阿勒泰/null 阿勒泰地区/null 阿华田/null 阿卜杜拉/null 阿卡/null 阿卡提/null 阿卡普尔科/null 阿卡迪亚/null 阿卡迪亚大学/null 阿卢巴/null 阿叔/null 阿史那骨咄禄/null 阿司匹林/null 阿合奇/null 阿哥/null 阿喀琉斯/null 阿嚏/null 阿囡/null 阿图什/null 阿图什县/null 阿土/null 阿坝/null 阿坝州/null 阿城/null 阿城区/null 阿基米德/null 阿堵/null 阿堵物/null 阿塞拜疆/null 阿塞拜疆人/null 阿多尼斯/null 阿多诺/null 阿奇里斯/null 阿奇霉素/null 阿奎纳/null 阿奶/null 阿妈/null 阿妹/null 阿姆哈拉/null 阿姆斯特丹/null 阿姆斯特朗/null 阿姆河/null 阿姨/null 阿娘/null 阿婆/null 阿婶/null 阿富汗/null 阿富汗人/null 阿富汗语/null 阿尊事贵/null 阿尔伯塔/null 阿尔伯特/null 阿尔加维/null 阿尔卑斯/null 阿尔卑斯山/null 阿尔卑斯山脉/null 阿尔卡特/null 阿尔及利亚/null 阿尔及利亚人/null 阿尔及尔/null 阿尔坎塔拉/null 阿尔山/null 阿尔巴尼亚/null 阿尔巴尼亚人/null 阿尔斯通公司/null 阿尔梅里亚/null 阿尔汉格尔斯克州/null 阿尔法/null 阿尔法・罗密欧/null 阿尔法粒子/null 阿尔泰/null 阿尔泰山/null 阿尔泰山脉/null 阿尔泰紫菀/null 阿尔泰语/null 阿尔瓦塞特/null 阿尔瓦雷/null 阿尔盖达/null 阿尔茨海默/null 阿尔茨海默氏病/null 阿尔茨海默氏症/null 阿尔茨海默病/null 阿尔茨海默症/null 阿尔萨斯/null 阿尔衮琴/null 阿尔都塞/null 阿尔滨/阿尔宾,阿尔斌 阿尼林/null 阿巴/null 阿巴拉契亚/null 阿巴斯/null 阿布叔醇/null 阿布哈兹/null 阿布扎比/null 阿布扎比市/null 阿布沙耶夫/null 阿布贾/null 阿希姆/null 阿弗洛狄忒/null 阿弟/null 阿弥佗佛/null 阿弥陀佛/null 阿弥陀如来/null 阿得莱德/null 阿德莱德/null 阿德雷德/null 阿意顺旨/null 阿房宫/null 阿托品/null 阿拉/null 阿拉丁/null 阿拉伯/null 阿拉伯人/null 阿拉伯共同市场/null 阿拉伯半岛/null 阿拉伯国家联盟/null 阿拉伯帝国/null 阿拉伯数字/null 阿拉伯数码/null 阿拉伯文/null 阿拉伯海/null 阿拉伯电信联盟/null 阿拉伯糖/null 阿拉伯联合酋长国/null 阿拉伯联盟/null 阿拉伯胶/null 阿拉伯胶树/null 阿拉伯茴香/null 阿拉伯语/null 阿拉伯阿湾/null 阿拉伯阿盟/null 阿拉善/null 阿拉塔斯/null 阿拉尔/null 阿拉巴马/null 阿拉巴马州/null 阿拉干山脉/null 阿拉弗拉海/null 阿拉摩/null 阿拉斯/null 阿拉斯加/null 阿拉斯加大学/null 阿拉斯加州/null 阿拉斯加雪撬犬/null 阿拉木图/null 阿拉法特/null 阿拉瓦/null 阿拉米语/null 阿拔斯王朝/null 阿拖品化/null 阿提拉/null 阿摩司书/null 阿摩尼亚/null 阿斗/null 阿斯伯格/null 阿斯佩尔格尔/null 阿斯兰/null 阿斯匹林/null 阿斯图里亚斯/null 阿斯塔纳/null 阿斯巴特/null 阿斯巴甜/null 阿斯旺/null 阿斯旺高坝/null 阿斯顿・马丁/null 阿斯马拉/null 阿旺曲培/null 阿旺曲沛/null 阿昌/null 阿明/null 阿昔洛韦/null 阿是穴/null 阿普吐龙/null 阿普尔顿/null 阿曼/null 阿曼湾/null 阿月浑子/null 阿月浑子实/null 阿月浑子树/null 阿木林/null 阿杜瓦战役/null 阿来/null 阿松森岛/null 阿根廷/null 阿根廷人/null 阿格尼迪/null 阿梵达/null 阿森/null 阿森斯/null 阿森松岛/null 阿比/null 阿比西尼亚/null 阿比西尼亚人/null 阿比西尼亚官话/null 阿比让/null 阿法尔/null 阿法尔沙漠/null 阿法罗密欧/null 阿波罗/null 阿波罗神/null 阿波罗计划/null 阿洛菲/null 阿灵顿国家公墓/null 阿爷/null 阿爸/null 阿爸父/null 阿爹/null 阿片/null 阿物儿/null 阿特兰蒂斯/null 阿特拉斯/null 阿特金斯/null 阿狄森氏病/null 阿狗/null 阿猫/null 阿猫阿狗/null 阿瑞斯/null 阿瑟/null 阿瑟县/null 阿瑟镇/null 阿瓦提/null 阿瓦里德/null 阿瓦鲁阿/null 阿甘正传/null 阿留申群岛/null 阿癞/null 阿的平/null 阿皮亚/null 阿盖达/null 阿盟/null 阿穆尔河/null 阿空加瓜/null 阿空加瓜山/null 阿米巴/null 阿米巴原虫/null 阿米巴病/null 阿米巴痢疾/null 阿米纳达布/null 阿维拉/null 阿罗汉/null 阿罗约/null 阿美尼亚/null 阿美恩斯/null 阿美族/null 阿耳忒弥斯/null 阿耳戈斯/null 阿耳法粒子/null 阿耳茨海默氏病/null 阿联酋/null 阿联酋航空/null 阿联酋长国/null 阿肯色/null 阿肯色大学/null 阿肯色州/null 阿育吠陀/null 阿育王/null 阿育魏实/null 阿胶/null 阿芒拿/null 阿芙乐尔号/null 阿芙罗狄忒/null 阿芙蓉/null 阿芝特克人/null 阿芝特克语/null 阿苏/null 阿苏山/null 阿苏火山/null 阿莫西林/null 阿莱奇冰川/null 阿莱曼/null 阿莲/null 阿莲乡/null 阿萨姆/null 阿萨德/null 阿蒙/null 阿衣奴/null 阿訇/null 阿诺/null 阿诺・施瓦辛格/null 阿诺德・施瓦辛格/null 阿谀/null 阿谀取容/null 阿谀奉承/null 阿谀逢迎/null 阿谀顺意/null 阿谀顺旨/null 阿贝尔/null 阿赫蒂萨里/null 阿达比尔/null 阿迪达斯/null 阿道司・赫胥黎/null 阿邑/null 阿里/null 阿里地区/null 阿里山/null 阿里山乡/null 阿里斯多德/null 阿里斯托芬/null 阿里斯托芳/null 阿里郎/null 阿金库尔/null 阿閦佛/null 阿门/null 阿阇梨/null 阿阇黎/null 阿附/null 阿难/null 阿难陀/null 阿非利加/null 阿非利加洲/null 阿顺取容/null 阿飞/null 阿马逊/null 阿魏/null 阿鲁巴/null 阿鲁科尔沁/null 阿鲁纳恰尔邦/null 阿黑门尼德王朝/null 阿鼻/null 阿鼻地狱/null 阿Q/null 阿Q正传/null 陀思妥也夫斯基/null 陀思妥耶夫斯基/null 陀罗/null 陀罗尼/null 陀螺/null 陂陀/null 附上/null 附上罔下/null 附下罔上/null 附中/null 附丽/null 附于/null 附从/null 附以/null 附件/null 附会/null 附体/null 附凤攀龙/null 附刊/null 附列/null 附则/null 附力/null 附加/null 附加值/null 附加元件/null 附加刑/null 附加条件/null 附加物/null 附加税/null 附加费/null 附加赛/null 附势/null 附单/null 附发/null 附合/null 附合声/null 附名/null 附后/null 附启/null 附和/null 附图/null 附在/null 附子/null 附寄/null 附小/null 附属/null 附属品/null 附属国/null 附属物/null 附属腺/null 附带/null 附带损害/null 附庸/null 附庸国/null 附庸风雅/null 附录/null 附征/null 附性/null 附报/null 附文/null 附有/null 附注/null 附点/null 附物/null 附生/null 附着/null 附着力/null 附着物/null 附睾/null 附笔/null 附签/null 附织/null 附耳/null 附肢/null 附背扼喉/null 附膺顿足/null 附膻逐秽/null 附膻逐臭/null 附营/null 附著/null 附著力/null 附著物/null 附表/null 附言/null 附议/null 附议者/null 附记/null 附设/null 附识/null 附赘县疣/null 附赘悬疣/null 附赠/null 附身/null 附载/null 附近/null 附近地区/null 附送/null 附逆/null 附随/null 附面层/null 附页/null 附骥/null 附骥攀鸿/null 际会/null 际会风云/null 际遇/null 陆上/null 陆丰/null 陆克文/null 陆军/null 陆军上校/null 陆军中尉/null 陆地/null 陆地棉/null 陆均松/null 陆块/null 陆坡/null 陆基/null 陆基导弹/null 陆委会/null 陆封/null 陆居者/null 陆岸/null 陆川/null 陆征祥/null 陆战/null 陆战区/null 陆战队/null 陆探微/null 陆架/null 陆标/null 陆栖/null 陆桥/null 陆棚/null 陆沉/null 陆河/null 陆海/null 陆海潘江/null 陆海空/null 陆海空三军/null 陆海空军/null 陆游/null 陆王学派/null 陆生/null 陆相沉积/null 陆离/null 陆离光怪/null 陆离斑驳/null 陆稻/null 陆续/null 陆羽/null 陆良/null 陆荣廷/null 陆西星/null 陆路/null 陆运/null 陆陆续续/null 陆风/null 陆龟/null 陇南/null 陇南地区/null 陇川/null 陇海/null 陇海铁路/null 陇西/null 陇间/null 陈书/null 陈云/null 陈云林/null 陈仁锡/null 陈仓/null 陈仓区/null 陈仲琳/null 陈伯达/null 陈元光/null 陈光/null 陈兵/null 陈再道/null 陈冠希/null 陈冲/null 陈凯歌/null 陈列/null 陈列台/null 陈列品/null 陈列室/null 陈列橱/null 陈列说明/null 陈列馆/null 陈力就列/null 陈厚/null 陈可雄/null 陈坚执锐/null 陈天华/null 陈奏/null 陈奕迅/null 陈套/null 陈娇/null 陈寿/null 陈尸/null 陈尸所/null 陈希同/null 陈年/null 陈年老帐/null 陈德良/null 陈忱/null 陈恭尹/null 陈情/null 陈情书/null 陈抟/null 陈放/null 陈方安生/null 陈旧/null 陈旧观念/null 陈景润/null 陈木胜/null 陈桥兵变/null 陈毅/null 陈水扁/null 陈炯明/null 陈独秀/null 陈皮/null 陈省身/null 陈米/null 陈纳德/null 陈绍/null 陈美/null 陈胜吴广起义/null 陈腐/null 陈腐无味/null 陈腔滥调/null 陈腔烂调/null 陈蔡之厄/null 陈规/null 陈规旧习/null 陈规陋习/null 陈言/null 陈言务去/null 陈设/null 陈诉/null 陈词/null 陈词滥调/null 陈说/null 陈谷/null 陈谷子烂芝麻/null 陈货/null 陈辞/null 陈述/null 陈述书/null 陈述句/null 陈述者/null 陈迹/null 陈酒/null 陈醋/null 陈陈/null 陈陈相因/null 陈雷胶漆/null 陈露/null 陈香梅/null 陋习/null 陋俗/null 陋地/null 陋室/null 陋寡/null 陋居/null 陋屋/null 陋巷/null 陋巷箪瓢/null 陋行/null 陋见/null 陋规/null 陌乖/null 陌生/null 陌生人/null 陌路/null 陌路人/null 陌路相逢/null 降下/null 降下帷幕/null 降世/null 降临/null 降临到/null 降临节/null 降为/null 降书/null 降价/null 降伏/null 降位/null 降低/null 降低利率/null 降低成本/null 降低消耗/null 降值/null 降到/null 降升/null 降半旗/null 降压/null 降压药/null 降噪/null 降妖/null 降妖伏磨/null 降将/null 降尘/null 降幂/null 降幅/null 降序/null 降度/null 降心相从/null 降志辱身/null 降息/null 降旗/null 降旨/null 降服/null 降格/null 降格一求/null 降格以求/null 降水/null 降水量/null 降法/null 降温/null 降温费/null 降火/null 降灵/null 降生/null 降祉/null 降神/null 降神术/null 降祸/null 降祸于/null 降福/null 降等/null 降级/null 降结肠/null 降职/null 降肾上腺素/null 降至/null 降落/null 降落伞/null 降落地点/null 降落跑道/null 降血压药/null 降血钙素/null 降表/null 降解/null 降调/null 降贵纡尊/null 降赐/null 降量/null 降雨/null 降雨量/null 降雪/null 降雪量/null 降顺/null 降香/null 降龙/null 降龙伏虎/null 限于/null 限产/null 限产压库/null 限令/null 限价/null 限位/null 限值/null 限内/null 限制/null 限制区/null 限制器/null 限制性/null 限制级/null 限制酶/null 限制酶图谱/null 限地/null 限定/null 限定性/null 限定词/null 限幅/null 限度/null 限时/null 限时信/null 限期/null 限期完成/null 限止/null 限此/null 限武谈判/null 限派/null 限流/null 限电/null 限界/null 限界线/null 限购/null 限速/null 限量/null 限长/null 限额/null 陕人/null 陕北/null 陕甘/null 陕甘回族人民起义/null 陕甘宁/null 陕甘宁边区/null 陕西大地震/null 陕西师范大学/null 陕西梆子/null 陕西科技大学/null 陕飞集团/null 陛下/null 陜西/null 陟岵瞻望/null 陡削/null 陡变/null 陡坡/null 陡增/null 陡壁/null 陡岸/null 陡峭/null 陡峻/null 陡崖/null 陡度/null 陡然/null 陡直/null 陡立/null 陡跌/null 陡降/null 院中/null 院会/null 院内/null 院制/null 院地/null 院址/null 院墙/null 院士/null 院外/null 院子/null 院定/null 院所/null 院方/null 院本/null 院校/null 院校体制/null 院校教育/null 院校训练/null 院牧/null 院的/null 院系/null 院职/null 院落/null 院试/null 院部/null 院里/null 院长/null 院门/null 除不尽/null 除丧/null 除了/null 除了他/null 除以/null 除冰/null 除却/null 除却巫山不是云/null 除去/null 除另有约定/null 除号/null 除名/null 除四害/null 除垢/null 除垢剂/null 除夕之夜/null 除外/null 除夜/null 除奸/null 除子/null 除害/null 除害物/null 除尘/null 除尘器/null 除尘机/null 除尽/null 除开/null 除弊/null 除得/null 除息/null 除恶/null 除恶务尽/null 除恶务本/null 除患兴利/null 除掉/null 除数/null 除旧/null 除旧布新/null 除旧更新/null 除暴/null 除暴安良/null 除服/null 除杂草/null 除权/null 除根/null 除此/null 除此之外/null 除此以外/null 除此而外/null 除残去秽/null 除毛/null 除污/null 除沾染/null 除法/null 除涝/null 除湿/null 除湿器/null 除湿机/null 除灾/null 除疾遗类/null 除病/null 除痰/null 除皮/null 除磁/null 除祟/null 除腥/null 除臭/null 除臭剂/null 除草/null 除草人/null 除草剂/null 除草机/null 除草者/null 除莠剂/null 除虫/null 除虫剂/null 除虫菊/null 除邪/null 除锈/null 除错/null 除雪机/null 除雾/null 除霜/null 除非/null 除非己莫为/null 除额/null 陨命/null 陨坑/null 陨星/null 陨星学/null 陨灭/null 陨石/null 陨石雨/null 陨获/null 陨落/null 陨越/null 陨铁/null 陨首/null 险乎/null 险些/null 险像/null 险兆/null 险地/null 险坑/null 险境/null 险家/null 险峰/null 险峻/null 险工/null 险性/null 险恶/null 险情/null 险时/null 险段/null 险毒/null 险滩/null 险球/null 险症/null 险胜/null 险被/null 险要/null 险诈/null 险象/null 险象环生/null 险遭/null 险阻/null 险阻艰难/null 险陡/null 险隘/null 陪产/null 陪伴/null 陪你/null 陪侍/null 陪吊/null 陪同/null 陪唱女/null 陪唱小姐/null 陪奁/null 陪嫁/null 陪审/null 陪审制/null 陪审制度/null 陪审员/null 陪审团/null 陪审席/null 陪客/null 陪床/null 陪我/null 陪房/null 陪拜/null 陪着/null 陪睡/null 陪礼/null 陪祭/null 陪笑/null 陪练/null 陪绑/null 陪罪/null 陪臣/null 陪著/null 陪葬/null 陪葬品/null 陪衬/null 陪衬物/null 陪读/null 陪送/null 陪都/null 陪酒/null 陪音/null 陴县/null 陵上虐下/null 陵园/null 陵墓/null 陵夷/null 陵寝/null 陵川/null 陵庙/null 陵替/null 陵水/null 陵水县/null 陶乐/null 陶乐县/null 陶俑/null 陶冶/null 陶冶情操/null 陶制/null 陶哲轩/null 陶喆/null 陶器/null 陶器厂/null 陶土/null 陶工/null 陶性/null 陶渊明/null 陶潜/null 陶然/null 陶然自得/null 陶犬瓦鸡/null 陶瓦/null 陶瓷/null 陶瓷器/null 陶甄/null 陶盅/null 陶砚/null 陶笛/null 陶管/null 陶粒/null 陶罐/null 陶艺/null 陶艺家/null 陶醉/null 陶钧/null 陶铸/null 陶陶/null 陶陶自得/null 陷下/null 陷于/null 陷于瘫痪/null 陷于绝境/null 陷井/null 陷住/null 陷入/null 陷入困境/null 陷入牢笼/null 陷入绝境/null 陷地/null 陷坑/null 陷处/null 陷害/null 陷拨/null 陷敌/null 陷没/null 陷溺/null 陷窝/null 陷网/null 陷者/null 陷落/null 陷落地震/null 陷落带/null 陷身/null 陷阱/null 陷阵/null 隅石/null 隆乳/null 隆乳手术/null 隆冬/null 隆准/null 隆刑峻法/null 隆化/null 隆古贱今/null 隆响/null 隆回/null 隆声/null 隆子/null 隆安/null 隆尧/null 隆德/null 隆恩/null 隆恩旷典/null 隆情/null 隆情厚谊/null 隆昌/null 隆替/null 隆林/null 隆林县/null 隆格尔/null 隆格尔县/null 隆河/null 隆盛/null 隆胸/null 隆起/null 隆重/null 隆重庆祝/null 隆重推出/null 隆阳/null 隆阳区/null 隆隆/null 隆隆响/null 隆隆声/null 隆鼻/null 隋书/null 隋代/null 隋唐/null 隋唐演义/null 隋文帝/null 隋文帝杨坚/null 隋朝/null 隋末/null 隋炀帝/null 随世沉浮/null 随之/null 随之而后/null 随之而来/null 随乡入乡/null 随乡入俗/null 随书/null 随从/null 随他/null 随传/null 随伴/null 随你/null 随侍/null 随便/null 随便说说/null 随俗/null 随俗沉浮/null 随俗浮沉/null 随信/null 随信附上/null 随候之珠/null 随其/null 随军/null 随到/null 随即/null 随县/null 随口/null 随口而出/null 随口胡诌/null 随叫随到/null 随同/null 随后/null 随员/null 随和/null 随喜/null 随团/null 随地/null 随声/null 随声是非/null 随声附和/null 随处/null 随处可见/null 随大流/null 随大溜/null 随它去/null 随寓而安/null 随州/null 随带/null 随干/null 随心/null 随心所欲/null 随想/null 随意/null 随意性/null 随意肌/null 随手/null 随文/null 随时/null 随时制宜/null 随时度势/null 随时待命/null 随时随地/null 随有/null 随机/null 随机化/null 随机存取/null 随机存取存储器/null 随机存取记忆体/null 随机应变/null 随机性/null 随机效应/null 随机数/null 随机时间/null 随机而变/null 随波/null 随波漂流/null 随波逊流/null 随波逐尘/null 随波逐流/null 随波逐浪/null 随洗/null 随物/null 随珠弹雀/null 随着/null 随礼/null 随笔/null 随缘/null 随缘乐助/null 随群/null 随而/null 随葬/null 随葬品/null 随行/null 随行人员/null 随行就市/null 随要/null 随访/null 随踵而至/null 随身/null 随身听/null 随身携带/null 随身碟/null 随车/null 随遇/null 随遇平衡/null 随遇而安/null 随道/null 随队/null 随附/null 随随便便/null 随顺/null 随风/null 随风倒/null 随风倒柳/null 随风倒舵/null 随风转舵/null 隐世/null 隐事/null 隐伏/null 隐位/null 隐修/null 隐修士/null 隐修院/null 隐函数/null 隐匿/null 隐匿处/null 隐去/null 隐名/null 隐名埋姓/null 隐君子/null 隐含/null 隐喻/null 隐喻性/null 隐土/null 隐士/null 隐处/null 隐头花序/null 隐姓埋名/null 隐密/null 隐射/null 隐居/null 隐居人/null 隐居性/null 隐居者/null 隐居隆中/null 隐式/null 隐形/null 隐形眼镜/null 隐忍/null 隐忍不发/null 隐忍不言/null 隐忧/null 隐性/null 隐性埋名/null 隐性基因/null 隐性感染/null 隐恶扬善/null 隐患/null 隐情/null 隐情不报/null 隐意/null 隐慝/null 隐映/null 隐显/null 隐显墨水/null 隐显目标/null 隐晦/null 隐晦曲折/null 隐暗/null 隐栖动物学/null 隐检/null 隐没/null 隐潭/null 隐灭/null 隐然/null 隐燃/null 隐现/null 隐生宙/null 隐疾/null 隐病不报/null 隐痛/null 隐的/null 隐睾/null 隐睾症/null 隐瞒/null 隐私/null 隐私政策/null 隐私权/null 隐秘/null 隐秘难言/null 隐约/null 隐约其辞/null 隐色/null 隐花/null 隐花植物/null 隐蔽/null 隐蔽处/null 隐蔽强迫下载/null 隐蔽所/null 隐蔽著/null 隐藏/null 隐藏处/null 隐藏所/null 隐藏物/null 隐血/null 隐衷/null 隐讳/null 隐语/null 隐身/null 隐身技术/null 隐身术/null 隐身草/null 隐身草儿/null 隐身飞机/null 隐迹/null 隐迹埋名/null 隐迹藏名/null 隐退/null 隐退处/null 隐逸/null 隐遁/null 隐遁者/null 隐避/null 隐避处/null 隐隐/null 隐隐作痛/null 隐隐约约/null 隐隐绰绰/null 隐颧/null 隐饰/null 隔三差五/null 隔世/null 隔代/null 隔军事分界线/null 隔周/null 隔墙/null 隔墙有耳/null 隔壁/null 隔壁有耳/null 隔声/null 隔夜/null 隔天/null 隔层/null 隔屋撺椽/null 隔山/null 隔岸/null 隔岸观火/null 隔年/null 隔年皇历/null 隔开/null 隔成/null 隔扇/null 隔断/null 隔断板/null 隔日/null 隔月/null 隔板/null 隔水/null 隔水层/null 隔油池/null 隔海/null 隔热/null 隔热材料/null 隔片/null 隔界/null 隔皮断货/null 隔着/null 隔离/null 隔离剂/null 隔离卡/null 隔离后/null 隔离墩/null 隔离室/null 隔离层/null 隔离带/null 隔离度/null 隔离开/null 隔离感/null 隔离柱/null 隔离栏/null 隔离法/null 隔离线/null 隔离网/null 隔离者/null 隔离舱/null 隔离霜/null 隔窗有耳/null 隔绝/null 隔膜/null 隔舱/null 隔行/null 隔行如隔山/null 隔行扫描/null 隔邻/null 隔都/null 隔间/null 隔阂/null 隔靴搔痒/null 隔音/null 隔音板/null 隔音符号/null 隔音纸/null 隘口/null 隘谷/null 隘路/null 隙地/null 隙大墙坏/null 隙缝/null 障于/null 障子/null 障目/null 障眼/null 障眼法/null 障碍/null 障碍性贫血/null 障碍滑雪/null 障碍物/null 障碍赛跑/null 障蔽/null 隧洞/null 隧道/null 隳肝沥胆/null 隳节败名/null 隶书/null 隶农/null 隶农制/null 隶圉/null 隶属/null 隶属于/null 隽品/null 隽妙/null 隽拔/null 隽敏/null 隽材/null 隽楚/null 隽永/null 隽茂/null 隽誉/null 隽语/null 难上加难/null 难上难/null 难下/null 难不成/null 难为/null 难为情/null 难乎为继/null 难买/null 难了解/null 难事/null 难于/null 难于接近/null 难于登天/null 难产/null 难人/null 难以/null 难以为继/null 难以克服/null 难以启齿/null 难以完成/null 难以实现/null 难以应付/null 难以忍受/null 难以忘怀/null 难以想像/null 难以抹去/null 难以捉摸/null 难以理解/null 难以相信/null 难以置信/null 难以自已/null 难以自拔/null 难以解决/null 难以达到/null 难以避免/null 难住/null 难使/null 难侨/null 难保/null 难信/null 难倒/null 难做/null 难兄难弟/null 难免/null 难关/null 难冠楚囚/null 难凭/null 难分/null 难分难舍/null 难分难解/null 难分高下/null 难到/null 难制/null 难制服/null 难割难舍/null 难办/null 难匹敌/null 难医/null 难却/null 难压制/null 难友/null 难反对/null 难取/null 难受/null 难句/null 难吃/null 难听/null 难和解/null 难喝/null 难堪/null 难处/null 难处理/null 难字/null 难学/null 难容/null 难宽恕/null 难对付/null 难对会/null 难寻/null 难尽/null 难局/null 难应付/null 难度/null 难弹/null 难当/null 难得/null 难得一见/null 难得到/null 难得糊涂/null 难忍/null 难忍受/null 难忘/null 难念/null 难怪/null 难懂/null 难懂话/null 难战胜/null 难找/null 难承认/null 难抑/null 难抵抗/null 难捉摸/null 难捱/null 难接近/null 难控/null 难控制/null 难操纵/null 难收/null 难改/null 难攻取/null 难敌/null 难教/null 难数/null 难易/null 难望/null 难民/null 难民营/null 难治/null 难治疗/null 难测/null 难消化/null 难混/null 难混合/null 难点/null 难熄灭/null 难熔化/null 难熬/null 难犯/null 难理解/null 难相处/null 难看/null 难童/null 难箕北斗/null 难管/null 难管制/null 难管理/null 难经/null 难统治/null 难缠/null 难耐/null 难胞/null 难能/null 难能可贵/null 难舍难分/null 难舍难离/null 难船/null 难色/null 难苦/null 难获得/null 难行/null 难被/null 难解/null 难解难分/null 难言/null 难言之隐/null 难言的苦衷/null 难记/null 难说/null 难调/null 难走/null 难辨/null 难辨认/null 难达到/null 难过/null 难返/null 难追踪/null 难逃/null 难逃法网/null 难道/null 难道说/null 难闻/null 难难/null 难预料/null 难题/null 难飞/null 难驯服/null 难驾/null 难驾御/null 难驾驭/null 难鸣/null 雀儿/null 雀儿山/null 雀噪/null 雀子/null 雀屏中选/null 雀巢/null 雀形目/null 雀斑/null 雀盲/null 雀盲眼/null 雀窝/null 雀类/null 雀角鼠牙/null 雀跃/null 雀鸟/null 雀鹰/null 雀麦/null 雁北/null 雁去鱼来/null 雁叫声/null 雁塔/null 雁塔区/null 雁塔题名/null 雁山/null 雁山区/null 雁峰/null 雁峰区/null 雁影分飞/null 雁来红/null 雁杳鱼沉/null 雁江/null 雁江区/null 雁荡/null 雁荡山/null 雁行/null 雁过拔毛/null 雁鸣/null 雄主/null 雄伟/null 雄健/null 雄关/null 雄兵/null 雄兽/null 雄劲/null 雄厚/null 雄器/null 雄图/null 雄壮/null 雄大/null 雄姿/null 雄姿英发/null 雄威/null 雄居/null 雄师/null 雄师百万/null 雄心/null 雄心勃勃/null 雄心壮志/null 雄性/null 雄性不育/null 雄性化/null 雄性激素/null 雄才/null 雄才伟略/null 雄才大略/null 雄据/null 雄文/null 雄材大略/null 雄浑/null 雄激素/null 雄火鸡/null 雄狮/null 雄猫/null 雄略/null 雄的/null 雄精/null 雄纠纠/null 雄花/null 雄蕊/null 雄蜂/null 雄视一世/null 雄赳赳/null 雄起/null 雄踞/null 雄辨/null 雄辩/null 雄辩家/null 雄辩术/null 雄辩高谈/null 雄配子/null 雄酯酮/null 雄长/null 雄雌/null 雄霸/null 雄风/null 雄飞突进/null 雄马/null 雄鸡/null 雄鸡断尾/null 雄鹰/null 雄鹿/null 雄黄/null 雄黄酒/null 雅丹地貌/null 雅丽/null 雅乐/null 雅事/null 雅人/null 雅人深致/null 雅什/null 雅俗共赏/null 雅克/null 雅兴/null 雅典/null 雅典卫城/null 雅典娜/null 雅典的泰门/null 雅利安/null 雅加达/null 雅号/null 雅司/null 雅司病/null 雅各/null 雅各书/null 雅各伯/null 雅各宾专政/null 雅各宾派/null 雅地/null 雅士/null 雅威/null 雅安/null 雅安地区/null 雅尔塔/null 雅尔塔会议/null 雅座/null 雅怀/null 雅思/null 雅恩德/null 雅意/null 雅房/null 雅拉神山/null 雅拉雪山/null 雅拉香波神山/null 雅拉香波雪山/null 雅故/null 雅教/null 雅歌/null 雅正/null 雅气/null 雅江/null 雅法/null 雅法港/null 雅洁/null 雅淡/null 雅温得/null 雅爱/null 雅片/null 雅玩/null 雅皮士/null 雅相/null 雅砻江/null 雅称/null 雅罗鱼/null 雅美族/null 雅而不俗/null 雅致/null 雅芳/null 雅观/null 雅言/null 雅语/null 雅诺什/null 雅趣/null 雅郑/null 雅量/null 雅鉴/null 雅间/null 雅阁/null 雅集/null 雅静/null 雅饬/null 雅驯/null 雅鲁藏布大峡谷/null 雅鲁藏布江/null 集上/null 集中/null 集中于/null 集中兵力/null 集中力量/null 集中化/null 集中器/null 集中地/null 集中性/null 集中托运/null 集中的策略/null 集中精力/null 集中营/null 集会/null 集会游行/null 集会结社/null 集体/null 集体主义/null 集体副业/null 集体化/null 集体坟墓/null 集体安全条约组织/null 集体强奸/null 集体户/null 集体所有制/null 集体经济/null 集体舞/null 集体行走/null 集体防护/null 集体领导/null 集刊/null 集合/null 集合体/null 集合名词/null 集合点/null 集合论/null 集合词/null 集团/null 集团作业/null 集团公司/null 集团军/null 集在/null 集场/null 集大成/null 集子/null 集宁/null 集宁区/null 集安/null 集居/null 集市/null 集市贸易/null 集录/null 集思/null 集思广益/null 集恩广益/null 集成/null 集成度/null 集成电子/null 集成电路/null 集拢/null 集散/null 集散地/null 集数/null 集料/null 集日/null 集权/null 集材/null 集束/null 集束式/null 集束炸弹/null 集油箱/null 集注/null 集流环/null 集电弓/null 集电杆/null 集电极/null 集管/null 集约/null 集约化/null 集约经营/null 集纳/null 集线器/null 集结/null 集结待命/null 集美/null 集美区/null 集群/null 集聚/null 集腋成裘/null 集苑集枯/null 集萃/null 集萤映雪/null 集装/null 集装箱/null 集装箱船/null 集训/null 集训队/null 集贤/null 集贸/null 集贸市场/null 集资/null 集资额/null 集运/null 集邮/null 集邮册/null 集邮家/null 集邮本/null 集邮癖/null 集邮簿/null 集部/null 集锦/null 集镇/null 集集/null 集集镇/null 集餐/null 雇主/null 雇人/null 雇佣/null 雇佣兵/null 雇佣兵役制/null 雇佣军/null 雇佣劳动/null 雇佣思想/null 雇佣观点/null 雇农/null 雇员/null 雇工/null 雇役/null 雇来/null 雇用/null 雇请/null 雇车/null 雉堞/null 雉鸠/null 雉鸡/null 雌三醇/null 雌伏/null 雌兽/null 雌性/null 雌性接口/null 雌性激素/null 雌激素/null 雌狮/null 雌禽/null 雌素/null 雌红/null 雌胭/null 雌花/null 雌蕊/null 雌蜂/null 雌雄/null 雌雄同体/null 雌雄同体人/null 雌雄同体性/null 雌雄同株/null 雌雄异体/null 雌雄异株/null 雌雄异色/null 雌雄未决/null 雌鸟/null 雌鹿/null 雌黄/null 雍和/null 雍和宫/null 雍容/null 雍容不迫/null 雍容华贵/null 雍容大度/null 雍容尔雅/null 雍容文雅/null 雍容闲雅/null 雍容雅步/null 雍正/null 雍睦/null 雍穆/null 雍重/null 雍阏/null 雍雍/null 雏儿/null 雏凤/null 雏型/null 雏妓/null 雏形/null 雏水鸭/null 雏燕/null 雏菊/null 雏菊花环/null 雏鸟/null 雏鸡/null 雏鸽/null 雏鹰/null 雕作/null 雕凿/null 雕像/null 雕像座/null 雕具座/null 雕刻/null 雕刻了/null 雕刻品/null 雕刻家/null 雕刻师/null 雕刻版/null 雕刻般/null 雕品/null 雕塑/null 雕塑品/null 雕塑家/null 雕工/null 雕梁画栋/null 雕楹碧槛/null 雕漆/null 雕版/null 雕琢/null 雕砌/null 雕章缋句/null 雕章镂句/null 雕肝琢肾/null 雕肝琢膂/null 雕肝镂肾/null 雕花/null 雕虫小技/null 雕虫小艺/null 雕虫篆刻/null 雕谢/null 雕铸像/null 雕镌/null 雕阑/null 雕零/null 雕饰/null 雕龙/null 雨丝/null 雨中/null 雨人/null 雨伞/null 雨停了/null 雨具/null 雨凇/null 雨刮/null 雨刷/null 雨前/null 雨势/null 雨区/null 雨后/null 雨后春笋/null 雨城/null 雨城区/null 雨声/null 雨夜/null 雨天/null 雨夹雪/null 雨季/null 雨层云/null 雨山/null 雨山区/null 雨布/null 雨帘/null 雨带/null 雨幕/null 雨急下/null 雨情/null 雨意/null 雨打/null 雨打风吹/null 雨披/null 雨散云收/null 雨林/null 雨果/null 雨柱/null 雨棚/null 雨水管/null 雨泽下注/null 雨淋/null 雨湖/null 雨湖区/null 雨滑/null 雨滴/null 雨点/null 雨点儿/null 雨点小/null 雨燕/null 雨珠/null 雨篷/null 雨线/null 雨罩/null 雨脚/null 雨花/null 雨花区/null 雨花台/null 雨花台区/null 雨蛙/null 雨衣/null 雨过天晴/null 雨过天青/null 雨量/null 雨量器/null 雨量表/null 雨量计/null 雨雪/null 雨雾/null 雨露/null 雨露之恩/null 雨靴/null 雨鞋/null 雨顺风调/null 雪上/null 雪上加霜/null 雪上运动/null 雪丘/null 雪中/null 雪中送炭/null 雪亮/null 雪人/null 雪仗/null 雪佛兰/null 雪佛莱/null 雪佛龙/null 雪佛龙公司/null 雪佛龙石油公司/null 雪儿/null 雪兰莪/null 雪冤/null 雪利酒/null 雪原/null 雪地/null 雪地追踪/null 雪城/null 雪堆/null 雪夜/null 雪天/null 雪子/null 雪山/null 雪山太子/null 雪山狮子/null 雪山狮子旗/null 雪峰/null 雪崩/null 雪恨/null 雪撬/null 雪景/null 雪暴/null 雪杉/null 雪条/null 雪松/null 雪板/null 雪柜/null 雪柳/null 雪案萤灯/null 雪案萤窗/null 雪梨/null 雪橇/null 雪水/null 雪泥/null 雪泥鸿爪/null 雪深/null 雪片/null 雪犁/null 雪球/null 雪白/null 雪盲/null 雪盲症/null 雪窖冰天/null 雪窗萤几/null 雪窗萤火/null 雪糁/null 雪糕/null 雪纺/null 雪线/null 雪耻/null 雪花/null 雪花膏/null 雪茄/null 雪茄烟/null 雪茄盒/null 雪莱/null 雪莲/null 雪菲尔德/null 雪虐风饕/null 雪融/null 雪豹/null 雪貂/null 雪路/null 雪连纸/null 雪酪/null 雪里红/null 雪里蕻/null 雪里送炭/null 雪量/null 雪铁龙/null 雪铲/null 雪青/null 雪鞋/null 雪顿/null 雪顿节/null 雪饼/null 雪鸟/null 雳声/null 零丁/null 零丁孤苦/null 零七八碎/null 零下/null 零买/null 零乱/null 零件/null 零件供货商/null 零位/null 零修/null 零值/null 零八宪章/null 零分/null 零功率堆/null 零卖/null 零号/null 零吃/null 零和/null 零和博弈/null 零售/null 零售业/null 零售价/null 零售价格/null 零售商/null 零售店/null 零售总额/null 零售物价/null 零售额/null 零嘴/null 零基/null 零基础/null 零声母/null 零备件/null 零头/null 零存/null 零存整取/null 零容忍/null 零工/null 零度/null 零打碎敲/null 零担/null 零散/null 零数/null 零敲碎打/null 零族/null 零时/null 零时区/null 零星/null 零曲率/null 零杂/null 零杂儿/null 零杂工/null 零比/null 零沽批发/null 零活/null 零活儿/null 零点/null 零点五/null 零点定理/null 零点能/null 零用/null 零用金/null 零用钱/null 零的/null 零的突破/null 零碎/null 零等待状态/null 零篇/null 零线/null 零组件/null 零缺点/null 零花/null 零花钱/null 零落/null 零落山丘/null 零蛋/null 零讯/null 零起点/null 零距离/null 零迅/null 零部件/null 零配件/null 零钱/null 零陵/null 零陵区/null 零零/null 零零散散/null 零零星星/null 零零碎碎/null 零食/null 雷・罗马诺/null 雷丸/null 雷人/null 雷光/null 雷克斯/null 雷克斯暴龙/null 雷克萨斯/null 雷克雅维克/null 雷公/null 雷公打豆腐/null 雷击/null 雷劈/null 雷动/null 雷厉风行/null 雷厉风飞/null 雷同/null 雷响/null 雷声/null 雷声大/null 雷大雨小/null 雷姆斯汀/null 雷害/null 雷射/null 雷山/null 雷峰/null 雷峰塔/null 雷州/null 雷州半岛/null 雷帽/null 雷德/null 雷恩/null 雷扎耶湖/null 雷打不动/null 雷日纳/null 雷暴/null 雷曼/null 雷曼兄弟/null 雷朗/null 雷朗族/null 雷根/null 雷汞/null 雷池/null 雷波/null 雷电/null 雷电计/null 雷电计图/null 雷盖/null 雷神公司/null 雷管/null 雷管线/null 雷米封/null 雷蒙德/null 雷诺/null 雷诺数/null 雷诺阿/null 雷轰/null 雷轰电掣/null 雷达/null 雷达兵训练/null 雷达反干扰/null 雷达员/null 雷达图/null 雷达天线/null 雷达对抗/null 雷达导航/null 雷达干扰/null 雷达技术/null 雷锋/null 雷锋精神/null 雷阵雨/null 雷阿尔城/null 雷雨/null 雷雨云/null 雷霆/null 雷霆万钧/null 雷霆之怒/null 雷霹/null 雷鬼/null 雷鸟/null 雷鸣/null 雷鸣瓦釜/null 雷龙/null 雹块/null 雹子/null 雹暴/null 雹灾/null 雹状/null 雾中/null 雾件/null 雾化/null 雾化器/null 雾化机/null 雾台/null 雾台乡/null 雾峰/null 雾峰乡/null 雾幔/null 雾幕/null 雾散/null 雾月十八日政变/null 雾气/null 雾水/null 雾浓/null 雾滴/null 雾灯/null 雾状/null 雾茫茫/null 雾蒙蒙/null 雾里看花/null 雾重/null 雾锁/null 雾霭/null 雾鬓风鬟/null 需将/null 需按/null 需方/null 需求/null 需求量/null 需用/null 需知/null 需要/null 需要坐/null 需要是发明之母/null 需要量/null 需设/null 霁月光风/null 霄壤/null 霄壤之别/null 霄壤之殊/null 霄汉/null 震中/null 震住/null 震动/null 震动力/null 震动器/null 震动性/null 震动计/null 震区/null 震古烁今/null 震古铄今/null 震响/null 震垮/null 震天/null 震天动地/null 震天骇地/null 震怒/null 震悚/null 震情/null 震惊/null 震惊中外/null 震惶/null 震感/null 震慑/null 震憾/null 震摄/null 震摇/null 震撼/null 震撼人心/null 震撼性/null 震旦/null 震旦纪/null 震昏/null 震栗/null 震波/null 震波图/null 震波圈/null 震波曲线/null 震源/null 震源机制/null 震灾/null 震眩弹/null 震级/null 震耳/null 震耳欲聋/null 震聋/null 震荡/null 震落/null 震裂/null 震觉/null 震音/null 震颤/null 震颤素/null 震颤麻痹/null 震骇/null 霉原/null 霉变/null 霉味/null 霉天/null 霉头/null 霉干菜/null 霉斑/null 霉料/null 霉气/null 霉浆菌肺炎/null 霉烂/null 霉病/null 霉素/null 霉臭/null 霉菌/null 霉菌毒素/null 霉菌病/null 霉蠹/null 霉运/null 霉雨/null 霉香/null 霍丘/null 霍乱/null 霍乱杆菌/null 霍乱毒素/null 霍乱菌苗/null 霍克/null 霍克松/null 霍克海姆/null 霍加狓/null 霍华得/null 霍华德/null 霍地/null 霍城/null 霍夫曼/null 霍尔/null 霍尔姆斯/null 霍尔布鲁克/null 霍尔木兹/null 霍尔木兹岛/null 霍尔木兹海峡/null 霍尔滕/null 霍尼亚拉/null 霍山/null 霍州/null 霍布斯/null 霍德/null 霍普金斯大学/null 霍林郭勒/null 霍格沃茨/null 霍比特人/null 霍洛维茨/null 霍然/null 霍然而愈/null 霍英东/null 霍赛/null 霍邱/null 霍金/null 霍金斯/null 霍闪/null 霍霍/null 霍顿/null 霎时/null 霎时间/null 霎眼/null 霎那/null 霎霎/null 霏微/null 霏霏/null 霓虹/null 霓虹灯/null 霓裳/null 霖雨/null 霜冻/null 霜叶/null 霜天/null 霜害/null 霜晨/null 霜期/null 霜条/null 霜淇淋/null 霜灾/null 霜状/null 霜白/null 霜花/null 霜雪/null 霜露/null 霜露之思/null 霜鬓/null 霞云/null 霞光/null 霞山/null 霞山区/null 霞帔/null 霞径/null 霞浦/null 霞石/null 霞蔚/null 霞辉/null 霞飞/null 霭滴/null 霭霭/null 霰弹/null 霰弹枪/null 霰粒肿/null 露一手/null 露丑/null 露乳/null 露体/null 露出/null 露出马脚/null 露台/null 露天/null 露天堆栈/null 露天大戏院/null 露天宿营/null 露天煤矿/null 露天矿/null 露头/null 露头角/null 露宿/null 露宿风餐/null 露富/null 露尸/null 露尾藏头/null 露布/null 露底/null 露怯/null 露才/null 露才扬己/null 露水/null 露水珠儿/null 露湿/null 露点/null 露牙/null 露现/null 露珠/null 露白/null 露相/null 露缝/null 露肩/null 露胆披肝/null 露背/null 露脊鲸/null 露脸/null 露苗/null 露茜/null 露营/null 露营者/null 露袒/null 露西/null 露酒/null 露阴癖/null 露面/null 露面抛头/null 露韩/null 露风/null 露馅/null 露馅儿/null 露马脚/null 露骨/null 露齿/null 露齿而笑/null 霸业/null 霸主/null 霸凌/null 霸占/null 霸县/null 霸州/null 霸据/null 霸权/null 霸权主义/null 霸气/null 霸王/null 霸王之道/null 霸王别姬/null 霸王树/null 霸王鞭/null 霸王风月/null 霸王龙/null 霸道/null 霹雳/null 霹雳啪啦/null 霹雳舞/null 霹雷/null 青丝/null 青云/null 青云万里/null 青云直上/null 青云谱/null 青云谱区/null 青光眼/null 青冈/null 青出于蓝/null 青原/null 青原区/null 青史/null 青史传名/null 青史名留/null 青史留名/null 青史留芳/null 青叶/null 青咏有耳/null 青囊/null 青囊经/null 青城山/null 青壮年/null 青天/null 青天大老爷/null 青天白日/null 青天霹雳/null 青女/null 青字头/null 青少年/null 青少年时代/null 青山/null 青山区/null 青山州/null 青山湖/null 青山湖区/null 青山绿水/null 青岛/null 青岛啤酒/null 青岩/null 青川/null 青州/null 青州从事/null 青工/null 青帮/null 青年/null 青年一代/null 青年人/null 青年会/null 青年团/null 青年学/null 青年学生/null 青年工人/null 青年干部/null 青年心理学/null 青年才俊/null 青年期/null 青年活动/null 青年社会学/null 青年突击手/null 青年组织/null 青年联欢节/null 青年节日/null 青年运动/null 青年黑格尔派/null 青救会/null 青旅/null 青春/null 青春不再/null 青春两敌/null 青春期/null 青春活力/null 青春痘/null 青春豆/null 青杨/null 青松/null 青果/null 青枣/null 青柠/null 青柠色/null 青梅/null 青梅竹马/null 青森/null 青森县/null 青椒/null 青椒牛柳/null 青楼/null 青檀/null 青檀树/null 青江菜/null 青河/null 青浦/null 青海湖/null 青涩/null 青灯黄卷/null 青灰/null 青灰色/null 青玉色/null 青瓜/null 青瓦台/null 青瓷/null 青田/null 青白/null 青白江/null 青皮/null 青盲/null 青眼/null 青睐/null 青石/null 青神/null 青秀/null 青秀区/null 青稞/null 青筋/null 青粗饲料/null 青紫/null 青红帮/null 青红皂白/null 青纱帐/null 青绿/null 青绿色/null 青羊/null 青羊区/null 青翠/null 青联/null 青肿/null 青脸獠牙/null 青色/null 青砖/null 青芥辣/null 青花/null 青花椰菜/null 青花瓷/null 青花菜/null 青苔/null 青苗/null 青茶/null 青荇/null 青草/null 青莲/null 青莲色/null 青菜/null 青菜豆腐保平安/null 青葙/null 青葙子/null 青葱/null 青蒜/null 青蒿/null 青蒿素/null 青蓝/null 青藏/null 青藏公路/null 青藏线/null 青藏铁路/null 青藏铁路线/null 青藏高原/null 青藤/null 青虾/null 青蚨/null 青蛙/null 青蝇染白/null 青蝇点素/null 青衣/null 青衿/null 青豆/null 青贮/null 青贮法/null 青过于蓝/null 青金石/null 青钱万选/null 青铜/null 青铜匠/null 青铜器/null 青铜器时代/null 青铜峡/null 青铜色/null 青阳/null 青霉素/null 青霉菌/null 青青/null 青靛/null 青面獠牙/null 青鞋布袜/null 青须公/null 青饲料/null 青马大桥/null 青鱼/null 青鲛/null 青麻/null 青黄/null 青黄不接/null 青鼬/null 青龙/null 青龙县/null 靓丽/null 靓仔/null 靓女/null 靓妆/null 靓妹/null 靖乱/null 靖国/null 靖国神社/null 靖宇/null 靖安/null 靖州/null 靖州县/null 靖康/null 靖江/null 靖西/null 靖边/null 靖远/null 靖难之役/null 静一静/null 静下来/null 静中带旺/null 静乐/null 静候/null 静像/null 静养/null 静冈县/null 静力/null 静力学/null 静力平衡/null 静区/null 静卧/null 静压/null 静听/null 静地/null 静坐/null 静坐不动/null 静坐不能/null 静坐抗议/null 静坐抗议示威/null 静坐示威/null 静坐罢工/null 静声/null 静夜/null 静如处女动如脱兔/null 静宁/null 静安/null 静宜/null 静寂/null 静山/null 静座/null 静待/null 静心/null 静态/null 静态型/null 静态存储器/null 静恬/null 静悄悄/null 静摩擦力/null 静止/null 静止锋/null 静气/null 静水/null 静水压/null 静海/null 静点/null 静热/null 静物/null 静物画/null 静电/null 静电力/null 静电喷漆/null 静电学/null 静电屏蔽/null 静电感应/null 静电计/null 静电除尘/null 静的/null 静穆/null 静肃/null 静脉/null 静脉内/null 静脉吸毒/null 静脉曲张/null 静脉注入/null 静脉注射/null 静脉点滴/null 静脉瘤/null 静脉血/null 静脉输血/null 静若寒蝉/null 静观/null 静谧/null 静象/null 静静/null 静音/null 静风/null 静默/null 靛油/null 靛白/null 靛色/null 靛花/null 靛蓝/null 靛蓝色/null 靛青/null 靛颏儿/null 非一日之寒/null 非一狐之白/null 非不/null 非专利/null 非专家/null 非个/null 非个人/null 非主要/null 非也/null 非亚/null 非交互/null 非交战/null 非亲非故/null 非人/null 非人不传/null 非人化/null 非人工/null 非人类/null 非人道/null 非份/null 非企业/null 非会员/null 非伪造/null 非但/null 非你莫属/null 非例外/null 非保密/null 非做/null 非党/null 非党人士/null 非党员/null 非公开/null 非公式/null 非公莫入/null 非关税/null 非典/null 非典型/null 非典型肺炎/null 非军事/null 非军事区/null 非农产品/null 非决定/null 非决定论/null 非凡/null 非凡人/null 非分/null 非分之念/null 非分之想/null 非刑/null 非利士/null 非利士族/null 非到/null 非动物性/null 非动物性名词/null 非卖品/null 非即/null 非原先/null 非古典/null 非可/null 非同/null 非同一般/null 非同以往/null 非同寻常/null 非同小可/null 非同步/null 非同步传输模式/null 非听觉/null 非吸烟/null 非周期/null 非命/null 非唯心/null 非国大/null 非均质/null 非复选/null 非天然/null 非妥/null 非婚生/null 非婚生子女/null 非学来/null 非宗教/null 非官方/null 非实在/null 非实质/null 非富则贵/null 非富即贵/null 非对偶/null 非对抗性/null 非对抗性矛盾/null 非对称/null 非对称式数据用户线/null 非导体/null 非小说/null 非尖峰/null 非尘世/null 非层岩/null 非层状/null 非属/null 非峰值/null 非常/null 非常低/null 非常多/null 非常好/null 非常感谢/null 非常手段/null 非常规战争/null 非常重/null 非平衡/null 非平衡态/null 非应用/null 非异人任/null 非彩色/null 非徒/null 非得/null 非微扰/null 非必要/null 非必需/null 非意/null 非意相干/null 非愚则诬/null 非我/null 非我族类七心必异/null 非战/null 非战斗/null 非拉丁字符/null 非政/null 非政府/null 非政府组织/null 非政治/null 非故/null 非故意/null 非数字/null 非斯/null 非昔是今/null 非晶体/null 非暴力/null 非有/null 非本/null 非本意/null 非本质/null 非本质联系/null 非机动车/null 非杠杆化/null 非条件刺激/null 非条件反射/null 非标准/null 非核/null 非核化/null 非核国家/null 非核地带/null 非核武器国家/null 非模态/null 非欧几何/null 非欧几何学/null 非正义战争/null 非正常/null 非正式/null 非正数/null 非正统/null 非正规/null 非正规军/null 非此/null 非此即彼/null 非比/null 非永久/null 非池中物/null 非法/null 非法定/null 非法性/null 非法斗争/null 非法者/null 非洲/null 非洲之角/null 非洲人/null 非洲人国民大会/null 非洲单源说/null 非洲国家/null 非洲大裂谷/null 非洲大陆/null 非洲宪章/null 非洲开发银行/null 非洲统一组织/null 非洲联盟/null 非洲锥虫病/null 非活动/null 非物质/null 非特/null 非独/null 非独立/null 非现世/null 非现实/null 非理智/null 非生产性/null 非生物/null 非电子/null 非电解质/null 非病原菌/null 非白人/null 非盈利/null 非盈利的组织/null 非盈利组织/null 非盟/null 非直接/null 非相对论性/null 非确定/null 非礼/null 非社会/null 非离散/null 非稳定/null 非空/null 非笑/null 非等/null 非纯种/null 非线性/null 非线性光学/null 非经/null 非羁押性/null 非而/null 非职/null 非职业/null 非自然/null 非致命/null 非艺术/null 非营利/null 非营利组织/null 非被/null 非裔/null 非要/null 非规整/null 非规范/null 非议/null 非词重复测验/null 非诚勿扰/null 非请/null 非负值/null 非负数/null 非赢利组织/null 非适应/null 非递推/null 非逻辑/null 非道德/null 非遗传多型性/null 非都会郡/null 非金属/null 非金属元素/null 非阿贝尔/null 非随机/null 非难/null 非难者/null 非零/null 非非/null 非音/null 非音乐/null 非预谋/null 非驴非马/null 非高峰/null 靠不住/null 靠了/null 靠人/null 靠住/null 靠你/null 靠准/null 靠右/null 靠吃/null 靠后/null 靠向/null 靠哪/null 靠在/null 靠垫/null 靠墙/null 靠处/null 靠外/null 靠外力/null 靠天/null 靠山/null 靠山吃山/null 靠岸/null 靠左/null 靠得住/null 靠手/null 靠把/null 靠拢/null 靠旗/null 靠枕/null 靠椅/null 靠模/null 靠水吃水/null 靠海/null 靠的/null 靠着/null 靠窗/null 靠窗座位/null 靠窗户/null 靠耧/null 靠背/null 靠背椅/null 靠背轮/null 靠著/null 靠谱/null 靠走廊/null 靠走道/null 靠边/null 靠边儿站/null 靠边站/null 靠近/null 靡不有初/null 靡不有初鲜克有终/null 靡丽/null 靡有孑遗/null 靡烂/null 靡然/null 靡然乡风/null 靡然从风/null 靡然向风/null 靡知所措/null 靡衣偷食/null 靡衣玉食/null 靡靡/null 靡靡之乐/null 靡靡之音/null 面上/null 面下/null 面不改色/null 面世/null 面临/null 面临困难/null 面为/null 面书/null 面交/null 面人/null 面人儿/null 面似/null 面体/null 面倒/null 面值/null 面像/null 面儿/null 面具/null 面前/null 面包/null 面包厂/null 面包屑/null 面包师/null 面包师傅/null 面包店/null 面包心/null 面包房/null 面包果/null 面包树/null 面包渣/null 面包片/null 面包皮/null 面包车/null 面北眉南/null 面卷/null 面友/null 面叙/null 面向/null 面向对象/null 面向连接/null 面呈/null 面告/null 面命相提/null 面和心不和/null 面商/null 面善/null 面团/null 面团团/null 面坊/null 面坯儿/null 面型/null 面塑/null 面墙/null 面墙而立/null 面壁/null 面壁功深/null 面壁思过/null 面奏/null 面如冠玉/null 面如土色/null 面如桃花/null 面如灰土/null 面嫩/null 面子/null 面子上/null 面孔/null 面容/null 面宽/null 面对/null 面对现实/null 面对面/null 面对面地/null 面层/null 面巾/null 面市/null 面带/null 面带愁容/null 面带病容/null 面带笑容/null 面带难色/null 面广/null 面庞/null 面形/null 面影/null 面心立方最密堆积/null 面手/null 面折廷争/null 面授/null 面授机宜/null 面料/null 面斥/null 面无人色/null 面晤/null 面有菜色/null 面有难色/null 面朝/null 面朝黄土背朝天/null 面条/null 面条儿/null 面板/null 面档/null 面汤/null 面油/null 面泛/null 面洽/null 面派/null 面点/null 面熟/null 面瓜/null 面生/null 面的/null 面皮/null 面皮薄/null 面盆/null 面目/null 面目一新/null 面目全非/null 面目可憎/null 面相/null 面码儿/null 面砖/null 面神经/null 面票/null 面禀/null 面积/null 面积分/null 面积图/null 面窝/null 面站/null 面筋/null 面类/null 面粉/null 面糊/null 面红/null 面红耳赤/null 面纱/null 面纸/null 面缚舆榇/null 面缚衔璧/null 面罄/null 面罩/null 面肥/null 面膜/null 面色/null 面色如土/null 面茶/null 面见/null 面誉/null 面誉背毁/null 面议/null 面试/null 面试会/null 面试工作/null 面试者/null 面语/null 面谀/null 面谈/null 面谕/null 面谢/null 面象/null 面貌/null 面貌一新/null 面邀/null 面部/null 面部表情/null 面镜/null 面陈/null 面霜/null 面露/null 面露不悦/null 面面/null 面面俱到/null 面面厮觑/null 面面相窥/null 面面相觑/null 面面观/null 面颊/null 面颜/null 面额/null 面食/null 面饼/null 面首/null 面黄/null 面黄肌瘦/null 面黄肌闳/null 面黄葫芦/null 革兰氏/null 革兰氏染色法/null 革兰氏阴性/null 革兰阳/null 革兰阳性/null 革凡登圣/null 革出/null 革出山门/null 革出教门/null 革制品/null 革匠/null 革吉/null 革命/null 革命乐观主义/null 革命先烈/null 革命党/null 革命军/null 革命军人委员会/null 革命化/null 革命卫队/null 革命史/null 革命家/null 革命志士/null 革命性/null 革命战争/null 革命派/null 革命浪漫主义/null 革命烈士/null 革命烈士家属/null 革命现实主义/null 革命者/null 革命英雄主义/null 革囊/null 革委会/null 革履/null 革心/null 革故鼎新/null 革新/null 革新者/null 革新能手/null 革旧鼎新/null 革翅目/null 革职/null 革退/null 革除/null 革面洗心/null 靴子/null 靴底/null 靴掖子/null 靴裤/null 靶台/null 靶场/null 靶子/null 靶心/null 靶机/null 靶纸/null 靶船/null 鞅掌/null 鞅牛/null 鞋业/null 鞋内/null 鞋内底/null 鞋刷/null 鞋匠/null 鞋厂/null 鞋口/null 鞋后跟/null 鞋垫/null 鞋子/null 鞋带/null 鞋帮/null 鞋帽/null 鞋底/null 鞋底钉/null 鞋店/null 鞋扣/null 鞋拔/null 鞋拔子/null 鞋擦/null 鞋料/null 鞋架/null 鞋样/null 鞋根/null 鞋油/null 鞋盒/null 鞋类/null 鞋粉/null 鞋脸/null 鞋袜/null 鞋跟/null 鞋钉/null 鞋面/null 鞍上/null 鞍前马后/null 鞍子/null 鞍山/null 鞍座/null 鞍形/null 鞍点/null 鞍状/null 鞍那劳顿/null 鞍部/null 鞍钢/null 鞍钢宪法/null 鞍马/null 鞍马劳倦/null 鞍马劳神/null 鞍马劳顿/null 鞍鼻/null 鞑子/null 鞑虏/null 鞑靼/null 鞑靼人/null 鞑靼海峡/null 鞘中/null 鞘掳/null 鞘翅/null 鞘翅目/null 鞘脂/null 鞝鞋/null 鞠躬/null 鞠躬尽力/null 鞠躬尽瘁/null 鞠躬尽瘁死而后已/null 鞣制/null 鞣制革/null 鞣料/null 鞣皮匠/null 鞣质/null 鞣酸/null 鞭上/null 鞭不及腹/null 鞭刑/null 鞭子/null 鞭尸/null 鞭打/null 鞭技/null 鞭挞/null 鞭毛/null 鞭毛纲/null 鞭毛藻/null 鞭毛虫/null 鞭炮/null 鞭炮声/null 鞭状/null 鞭痕/null 鞭笞/null 鞭笞天下/null 鞭策/null 鞭索/null 鞭绳/null 鞭节/null 鞭苔/null 鞭虫/null 鞭辟入里/null 鞭辟近里/null 鞭长莫及/null 鞭鞑/null 鞲鞴/null 韦伯/null 韦利/null 韦尔弗雷兹/null 韦尔瓦/null 韦布匹夫/null 韦应物/null 韦德/null 韦慕庭/null 韦斯卡/null 韦格纳/null 韦氏/null 韦氏拼法/null 韦瓦第/null 韦科/null 韦编三绝/null 韦达/null 韦驮菩萨/null 韧体/null 韧带/null 韧度/null 韧性/null 韧皮/null 韧皮纤维/null 韧皮部/null 韩世昌/null 韩亚/null 韩亚航空/null 韩亚龙/null 韩信/null 韩信破赵之战/null 韩元/null 韩升洙/null 韩半岛/null 韩卢逐块/null 韩卢逐逡/null 韩国人/null 韩国泡菜/null 韩国联合通讯社/null 韩国语/null 韩国银行/null 韩圆/null 韩城/null 韩城县/null 韩复矩/null 韩媒/null 韩寿偷香/null 韩寿分香/null 韩山师范学院/null 韩康卖药/null 韩彦直/null 韩德尔/null 韩愈/null 韩战/null 韩文/null 韩文字母/null 韩方/null 韩日/null 韩服/null 韩朝/null 韩朝苏海/null 韩村乐/null 韩棒子/null 韩江/null 韩海苏潮/null 韩澳/null 韩爱晶/null 韩素音/null 韩美/null 韩联社/null 韩语/null 韩邦庆/null 韩非/null 韩非子/null 韫椟待价/null 韫椟未酤/null 韬光俟奋/null 韬光养晦/null 韬光晦迹/null 韬光灭迹/null 韬光隐迹/null 韬光韫玉/null 韬声匿迹/null 韬戈偃武/null 韬戈卷甲/null 韬晦之计/null 韬晦待时/null 韬略/null 韬神晦迹/null 韬迹匿光/null 韭菜/null 韭菜花/null 韭葱/null 韭黄/null 音义/null 音乐/null 音乐上/null 音乐之声/null 音乐会/null 音乐光碟/null 音乐剧/null 音乐厅/null 音乐学/null 音乐学院/null 音乐家/null 音乐形象/null 音乐性/null 音乐电视/null 音乐界/null 音乐般/null 音乐节/null 音乐节目/null 音乐院/null 音位/null 音信/null 音信全无/null 音信杳无/null 音信杳然/null 音值/null 音像/null 音儿/null 音准/null 音势/null 音区/null 音协/null 音叉/null 音叉手表/null 音变/null 音名/null 音品/null 音响/null 音响器/null 音响好/null 音响学/null 音响效果/null 音响设备/null 音型/null 音域/null 音壁/null 音声如钟/null 音大/null 音容/null 音容凄断/null 音容如在/null 音容宛在/null 音容笑貌/null 音师/null 音带/null 音序/null 音序器/null 音度/null 音强/null 音律/null 音感/null 音拴/null 音效/null 音标/null 音栓/null 音步/null 音波/null 音波计/null 音爆/null 音码/null 音稀信杳/null 音程/null 音符/null 音管/null 音箱/null 音素/null 音素文字/null 音级/null 音缀/null 音美/null 音耗/null 音耗不绝/null 音色/null 音节/null 音节体/null 音节文字/null 音表/null 音视/null 音视频/null 音讯/null 音讯杳然/null 音译/null 音读/null 音调/null 音调高/null 音质/null 音轨/null 音速/null 音部/null 音量/null 音量控制/null 音长/null 音问/null 音问两绝/null 音问杳然/null 音问相继/null 音阶/null 音障/null 音韵/null 音韵学/null 音频/null 音频文件/null 音频设备/null 音高/null 音鼓/null 韵乐/null 韵书/null 韵事/null 韵人韵事/null 韵体/null 韵味/null 韵头/null 韵尾/null 韵律/null 韵律学/null 韵文/null 韵步/null 韵母/null 韵白/null 韵目/null 韵脚/null 韵腹/null 韵致/null 韵诗/null 韵语/null 韵调/null 韶光/null 韶光似箭/null 韶光淑气/null 韶光荏苒/null 韶关/null 韶关地区/null 韶华/null 韶华如驶/null 韶山/null 韶秀/null 韶颜稚齿/null 顇奴/null 页书/null 页号/null 页宽/null 页岩/null 页底/null 页心/null 页数/null 页框/null 页次/null 页眉/null 页码/null 页符/null 页脚/null 页蒿/null 页角/null 页边/null 页边距/null 页长/null 页面/null 页首/null 顶上/null 顶下/null 顶不住/null 顶个诸葛亮/null 顶了/null 顶事/null 顶交种/null 顶住/null 顶冒/null 顶刮刮/null 顶包/null 顶升法/null 顶叶/null 顶名/null 顶名冒姓/null 顶吹/null 顶呱呱/null 顶嘴/null 顶回/null 顶坏/null 顶多/null 顶天/null 顶天立地/null 顶头/null 顶头上司/null 顶夸克/null 顶好/null 顶子/null 顶客/null 顶宽/null 顶尖/null 顶尖儿/null 顶尖级/null 顶层/null 顶岗/null 顶峰/null 顶帽/null 顶得住/null 顶戴/null 顶技/null 顶拜/null 顶拱/null 顶挡/null 顶搂/null 顶撞/null 顶数/null 顶替/null 顶杆/null 顶板/null 顶架/null 顶梁/null 顶梁柱/null 顶棒/null 顶棚/null 顶楼/null 顶槽/null 顶灯/null 顶点/null 顶牛/null 顶牛儿/null 顶珠/null 顶班/null 顶球/null 顶用/null 顶盖/null 顶盘/null 顶目/null 顶真/null 顶着/null 顶碗/null 顶礼/null 顶礼膜拜/null 顶窗/null 顶端/null 顶箱/null 顶篷/null 顶级/null 顶缸/null 顶罪/null 顶肥/null 顶芽/null 顶著/null 顶蓬/null 顶行/null 顶视图/null 顶角/null 顶让/null 顶谢/null 顶起/null 顶轮/null 顶部/null 顶针/null 顶门/null 顶门儿/null 顶门壮户/null 顶阀/null 顶面/null 顶风/null 顶风停止/null 顶风冒雨/null 顶骨/null 顷久/null 顷之/null 顷刻/null 顷刻之间/null 顷刻间/null 顷者/null 项上人头/null 项下/null 项内/null 项圈/null 项城/null 项庄舞剑/null 项庄舞剑意在沛公/null 项数/null 项目/null 项目组/项目小组 项目小组/项目组 项目管理/null 项目表/null 项级/null 项羽/null 项背/null 项背相望/null 项英/null 项链/null 项颈/null 项饰/null 顺丁橡胶/null 顺丰/null 顺串/null 顺义/null 顺之者成逆之者败/null 顺之者昌逆之者亡/null 顺乎/null 顺乎民心/null 顺乎自然/null 顺产/null 顺人应天/null 顺人者昌逆人者亡/null 顺从/null 顺位/null 顺便/null 顺其自然/null 顺列/null 顺利/null 顺利发展/null 顺利完成/null 顺利实现/null 顺利性/null 顺利进行/null 顺势/null 顺势疗法/null 顺化/null 顺叙/null 顺口/null 顺口开河/null 顺口溜/null 顺口谈天/null 顺向/null 顺命/null 顺和/null 顺嘴/null 顺嘴儿/null 顺坦/null 顺城/null 顺城区/null 顺境/null 顺天/null 顺天应人/null 顺天应命/null 顺天应时/null 顺天恤民/null 顺天者存逆天者亡/null 顺天者昌逆天者亡/null 顺天者逸逆天者劳/null 顺导/null 顺差/null 顺带/null 顺平/null 顺庆/null 顺庆区/null 顺序/null 顺序数/null 顺应/null 顺应不良/null 顺应天时/null 顺应性/null 顺应潮流/null 顺延/null 顺式/null 顺当/null 顺德/null 顺德区/null 顺德者吉逆天者凶/null 顺德者昌逆德者亡/null 顺心/null 顺性/null 顺息万变/null 顺意/null 顺我者吉逆我者衰/null 顺我者昌/null 顺我者昌逆我者亡/null 顺我者生逆我者死/null 顺手/null 顺手儿/null 顺手推舟/null 顺手牵羊/null 顺承/null 顺旨/null 顺时/null 顺时针/null 顺昌/null 顺服/null 顺次/null 顺民/null 顺气/null 顺水/null 顺水人情/null 顺水推舟/null 顺水推船/null 顺水行舟/null 顺河区/null 顺河回族区/null 顺治/null 顺治帝/null 顺流/null 顺流而下/null 顺溜/null 顺潮/null 顺理成章/null 顺畅/null 顺眼/null 顺着/null 顺磁/null 顺耳/null 顺脚/null 顺著/null 顺藤摸瓜/null 顺藤模瓜/null 顺行/null 顺访/null 顺路/null 顺转/null 顺适/null 顺遂/null 顺道/null 顺道者昌逆德者亡/null 顺顺当当/null 顺风/null 顺风吹火/null 顺风扯旗/null 顺风耳/null 顺风车/null 顺风转舵/null 顺风驶帆/null 顺风驶船/null 顺驶/null 须丸/null 须作/null 须公/null 须到/null 须发/null 须后/null 须后水/null 须向/null 须在/null 须子/null 须将/null 须弥/null 须弥山/null 须得/null 须报/null 须持/null 须按/null 须有/null 须根/null 须毛/null 须生/null 须用/null 须由/null 须申报/null 须疮/null 须眉/null 须眉交白/null 须眉男子/null 须知/null 须经/null 须臾/null 须要/null 须送/null 须鲸/null 顽健/null 顽劣/null 顽匪/null 顽固/null 顽固不化/null 顽固派/null 顽固者/null 顽廉懦立/null 顽强/null 顽强拼搏/null 顽抗/null 顽抗到底/null 顽敌/null 顽梗/null 顽民/null 顽疾/null 顽症/null 顽癣/null 顽皮/null 顽石/null 顽石点头/null 顽童/null 顽而不顾/null 顽迷/null 顽逆/null 顽钝/null 顾三不顾四/null 顾不上/null 顾不得/null 顾主/null 顾全/null 顾全大局/null 顾全补牢/null 顾前/null 顾前不顾后/null 顾及/null 顾名/null 顾名思义/null 顾后瞻前/null 顾复之恩/null 顾大局/null 顾头不顾尾/null 顾客/null 顾客至上/null 顾小失大/null 顾左右而言他/null 顾影弄姿/null 顾影自怜/null 顾得上/null 顾忌/null 顾念/null 顾恺之/null 顾惜/null 顾意/null 顾曲周郎/null 顾此失彼/null 顾炎武/null 顾盼/null 顾盼生姿/null 顾盼生辉/null 顾盼神飞/null 顾盼自豪/null 顾盼自雄/null 顾眄/null 顾绣/null 顾者/null 顾虑/null 顾虑重重/null 顾问/null 顿丢/null 顿兵/null 顿口无言/null 顿号/null 顿开茅塞/null 顿悟/null 顿悟力/null 顿感/null 顿成/null 顿挫/null 顿挫抑扬/null 顿挫疗法/null 顿措抑扬/null 顿时/null 顿服量/null 顿河/null 顿涅斯克/null 顿涅茨克/null 顿点/null 顿然/null 顿绝法/null 顿觉/null 顿语/null 顿起/null 顿足/null 顿足捶胸/null 顿降/null 顿音/null 顿顿/null 顿首/null 颀长/null 颁发/null 颁奖/null 颁布/null 颁布实施/null 颁授/null 颁示/null 颁给/null 颁行/null 颁赏/null 颁赐/null 颁赠/null 颂古非今/null 颂声载道/null 颂德/null 颂扬/null 颂扬性/null 颂歌/null 颂经台/null 颂词/null 颂诗/null 颂赞/null 颂辞/null 预为/null 预习/null 预交/null 预产期/null 预付/null 预付款/null 预估/null 预作/null 预借/null 预兆/null 预先/null 预入/null 预冷/null 预冷器/null 预分/null 预制/null 预制板/null 预制构件/null 预加/null 预卜/null 预压力/null 预发/null 预后/null 预告/null 预告片/null 预售/null 预处理/null 预备/null 预备会议/null 预备党员/null 预备好/null 预备工作/null 预备役/null 预备役军人/null 预备役部队/null 预备生/null 预备知识/null 预备队/null 预定/null 预定义/null 预审/null 预尝/null 预展/null 预应力/null 预应力混凝土/null 预征/null 预想/null 预感/null 预托证券/null 预扣/null 预报/null 预拨/null 预提/null 预搔待痒/null 预支/null 预收/null 预收款/null 预收费/null 预料/null 预料之外/null 预断/null 预映/null 预有/null 预期/null 预期推理/null 预期收入票据/null 预期者/null 预案/null 预检/null 预测/null 预测器/null 预测学/null 预演/null 预烧/null 预热/null 预热器/null 预热机/null 预留/null 预知/null 预示/null 预示性/null 预祝/null 预科/null 预算/null 预算内/null 预算内资金/null 预算外/null 预算外资金/null 预算年度/null 预算赤字/null 预约/null 预缴/null 预置/null 预考/null 预行/null 预装/null 预见/null 预见性/null 预览/null 预觉/null 预解/null 预言/null 预言家/null 预言性/null 预言者/null 预警/null 预警机/null 预警系统/null 预计/null 预订/null 预设/null 预试/null 预谋/null 预谋杀人/null 预购/null 预贷/null 预赛/null 预述/null 预选/null 预选赛/null 预造/null 预配/null 预防/null 预防为主/null 预防免疫/null 预防剂/null 预防医学/null 预防器/null 预防性/null 预防接种/null 预防措施/null 预防法/null 预防注射/null 预防犯罪/null 预防药/null 预防针/null 预风/null 颅内/null 颅内压/null 颅底/null 颅测量/null 颅腔/null 颅骨/null 领主/null 领主权/null 领书/null 领了/null 领事/null 领事裁判权/null 领事馆/null 领他/null 领会/null 领先/null 领先地位/null 领先水平/null 领入/null 领兵/null 领养/null 领出/null 领到/null 领勾/null 领发/null 领取/null 领受/null 领受人/null 领受者/null 领口/null 领司/null 领命/null 领唱/null 领唱人/null 领回/null 领土/null 领土完整/null 领土问题/null 领地/null 领域/null 领外/null 领头/null 领头羊/null 领奖/null 领奖台/null 领子/null 领存/null 领导/null 领导人/null 领导力/null 领导层/null 领导干部/null 领导权/null 领导班子/null 领导者/null 领导职务/null 领导能力/null 领导部门/null 领导集体/null 领属/null 领工资/null 领巾/null 领巾夹/null 领巾类/null 领带/null 领带夹/null 领得/null 领悟/null 领悟力/null 领情/null 领扣/null 领执照/null 领报/null 领拨/null 领收/null 领教/null 领料/null 领料单/null 领有/null 领柩/null 领款/null 领款人/null 领水/null 领江/null 领洗/null 领海/null 领港/null 领港员/null 领照/null 领班/null 领用/null 领略/null 领着/null 领空/null 领章/null 领结/null 领罪/null 领航/null 领航员/null 领航学/null 领薪水/null 领衔/null 领衔主演/null 领袖/null 领袖人物/null 领证/null 领诺/null 领购/null 领走/null 领跑/null 领跑人/null 领路/null 领还/null 领进/null 领道/null 领针/null 领队/null 领饷/null 领馆/null 颇丰/null 颇为/null 颇久/null 颇似/null 颇佳/null 颇具/null 颇受/null 颇受欢迎/null 颇多/null 颇大/null 颇好/null 颇孚众望/null 颇得/null 颇感兴趣/null 颇有/null 颇有同感/null 颇爱/null 颇知/null 颇肥/null 颇能/null 颇觉/null 颇费周折/null 颇高/null 颈动脉/null 颈后/null 颈圈/null 颈子/null 颈椎/null 颈椎病/null 颈状/null 颈背/null 颈部/null 颈链/null 颈静脉/null 颈项/null 颈骨/null 颉颃/null 颊上/null 颊囊/null 颊窝/null 颊面/null 颊骨/null 颌下腺/null 颌骨/null 颍上/null 颍东/null 颍东区/null 颍州/null 颍州区/null 颍悟/null 颍泉/null 颍泉区/null 颐养/null 颐养天年/null 颐养精神/null 颐和园/null 颐性养寿/null 颐指/null 颐指如意/null 颐指气使/null 颐指进退/null 颐指风使/null 颐神养寿/null 颐神养气/null 颐精养性/null 颐精养神/null 频仍/null 频传/null 频催/null 频危物种/null 频宽/null 频密/null 频尿/null 频带/null 频度/null 频抗/null 频数/null 频数分布/null 频段/null 频率/null 频率合成/null 频率计/null 频率调制/null 频生/null 频眉蹙额/null 频繁/null 频谱/null 频道/null 频频/null 频频点头/null 颓丧/null 颓势/null 颓唐/null 颓圮/null 颓坏/null 颓垣断壁/null 颓塌/null 颓局/null 颓废/null 颓废主义/null 颓废派/null 颓废者/null 颓放/null 颓景/null 颓朽/null 颓然/null 颓老/null 颓萎/null 颓败/null 颓运/null 颓靡/null 颓风/null 颔下/null 颔下腺/null 颔联/null 颔首/null 颔首之交/null 颔首微笑/null 颖上县/null 颖异/null 颖性/null 颖悟/null 颖悟绝人/null 颖慧/null 颖果/null 颖脱而出/null 颗粒/null 颗粒剂/null 颗粒状/null 颗粒肥料/null 题中/null 题为/null 题写/null 题名/null 题外/null 题外话/null 题字/null 题库/null 题意/null 题旨/null 题材/null 题栏/null 题款/null 题注/null 题画/null 题的/null 题目/null 题目为/null 题签/null 题花/null 题解/null 题记/null 题词/null 题诗/null 题跋/null 题辞/null 题页/null 颚裂/null 颚足/null 颚部/null 颚音/null 颚骨/null 颚龈音/null 颛臾/null 颛顼/null 颜体/null 颜厚/null 颜厚有忸怩/null 颜回/null 颜射/null 颜料/null 颜渊/null 颜真卿/null 颜筋柳骨/null 颜色/null 颜貌/null 颜面/null 颜面扫地/null 颜骨柳筋/null 额上/null 额亲/null 额前/null 额勒贝格・道尔吉/null 额发/null 额叶/null 额吉/null 额外/null 额外利润/null 额外性/null 额外负担/null 额头/null 额定/null 额定值/null 额尔古纳/null 额尔古纳右旗/null 额尔古纳左旗/null 额尔古纳河/null 额尔金/null 额尔齐斯河/null 额度/null 额手之礼/null 额手称庆/null 额敏/null 额数/null 额比河/null 额济纳/null 额济纳地区/null 额济纳河/null 额满为止/null 额菲尔士/null 额菲尔士峰/null 额角/null 额达/null 额面/null 额首称庆/null 额首称颂/null 额骨/null 额鲁特/null 颞叶/null 颞颥/null 颞骨/null 颟顸/null 颠三倒四/null 颠乾倒坤/null 颠倒/null 颠倒反转/null 颠倒是非/null 颠倒温度表/null 颠倒衣裳/null 颠倒过来/null 颠倒阴阳/null 颠倒黑白/null 颠儿面/null 颠动/null 颠唇簸嘴/null 颠头颠脑/null 颠峰/null 颠扑不破/null 颠扑不碎/null 颠扑不磨/null 颠摇/null 颠末/null 颠来倒去/null 颠沛/null 颠沛流离/null 颠狂/null 颠簸/null 颠簸不破/null 颠簸而行/null 颠茄/null 颠覆/null 颠覆分子/null 颠覆国家罪/null 颠覆性/null 颠覆政府罪/null 颠覆罪/null 颠覆者/null 颠踣/null 颠连/null 颠颠/null 颠颠倒倒/null 颠鸾倒凤/null 颤动/null 颤声/null 颤巍/null 颤巍巍/null 颤悠/null 颤悸/null 颤抖/null 颤抖着/null 颤栗/null 颤音/null 颤颤巍巍/null 颤鸣/null 颤鸣声/null 颦眉/null 颦蹙/null 颧弓/null 颧骨/null 风不鸣条/null 风中/null 风中之烛/null 风中秉烛/null 风举云摇/null 风云/null 风云不测/null 风云之志/null 风云人物/null 风云变幻/null 风云变态/null 风云叱吒/null 风云开阖/null 风云月露/null 风云突变/null 风云际会/null 风从响应/null 风从虎云从龙/null 风传/null 风似/null 风俗/null 风俗习惯/null 风俗人情/null 风俗画/null 风信子/null 风信旗/null 风光/null 风光旖旎/null 风公正己/null 风兵草甲/null 风凉/null 风凉话/null 风凰竹/null 风刀霜剑/null 风切变/null 风前月下/null 风力/null 风力发电/null 风力水车/null 风力计/null 风动/null 风动工具/null 风势/null 风化/null 风化作用/null 风华/null 风华正茂/null 风华绝代/null 风卷残云/null 风卷残雪/null 风压/null 风压差/null 风压角/null 风发/null 风口/null 风口浪尖/null 风叶/null 风向/null 风向标/null 风向草偃/null 风吹/null 风吹日晒/null 风吹浪打/null 风吹草动/null 风吹雨打/null 风味/null 风味小吃/null 风和日丽/null 风和日暄/null 风和日暖/null 风和日美/null 风哮雨嚎/null 风唤/null 风圈/null 风土/null 风土人情/null 风土性植物/null 风土民情/null 风土驯化/null 风城/null 风声/null 风声目色/null 风声鹤唳/null 风声鹤唳草木皆兵/null 风大/null 风头/null 风姿/null 风姿绰约/null 风娇日暖/null 风媒花/null 风害/null 风寒/null 风尘/null 风尘仆仆/null 风尘外物/null 风尘物表/null 风尘表物/null 风尚/null 风尚不同/null 风帆/null 风帽/null 风干/null 风平/null 风平波息/null 风平波静/null 风平浪迹/null 风平浪静/null 风度/null 风度好/null 风微浪稳/null 风恬浪静/null 风情/null 风情月债/null 风情月思/null 风情月意/null 风成/null 风成化习/null 风戽/null 风扇/null 风扫/null 风掣雷行/null 风操/null 风斗/null 风景/null 风景优美/null 风景区/null 风景如画/null 风景点/null 风景画/null 风景秀丽/null 风景胜/null 风暖日丽/null 风暴/null 风暴潮/null 风月/null 风月常新/null 风月无边/null 风木之思/null 风木之悲/null 风木含悲/null 风机/null 风来/null 风标/null 风栉雨沐/null 风树之悲/null 风树之感/null 风格/null 风档玻璃/null 风樯阵马/null 风檐寸晷/null 风气/null 风水/null 风水先生/null 风水轮流/null 风水轮流转/null 风池穴/null 风沙/null 风油精/null 风波/null 风波平地/null 风泵/null 风泼/null 风洞/null 风派/null 风流/null 风流云散/null 风流人物/null 风流佳事/null 风流佳话/null 风流倜傥/null 风流债/null 风流儒雅/null 风流千古/null 风流宰相/null 风流尔雅/null 风流才子/null 风流潇洒/null 风流罪过/null 风流蕴藉/null 风流酝藉/null 风流雨散/null 风流韵事/null 风浪/null 风清弊绝/null 风清月明/null 风清月朗/null 风清月白/null 风清月皎/null 风湿/null 风湿关节炎/null 风湿性关节炎/null 风湿热/null 风湿病/null 风湿症/null 风潇雨晦/null 风潮/null 风激电飞/null 风激电骇/null 风火/null 风火墙/null 风火轮/null 风灯/null 风灾/null 风炉/null 风烛残年/null 风烛草露/null 风烟/null 风物/null 风琴/null 风琴手/null 风疹/null 风疹块/null 风痹/null 风瘫/null 风知/null 风磨/null 风移俗变/null 风移俗改/null 风移俗易/null 风穴/null 风窗/null 风笛/null 风笛曲/null 风筝/null 风管/null 风箱/null 风级/null 风纪/null 风纪扣/null 风能/null 风致/null 风色/null 风花雪月/null 风范/null 风范长存/null 风茄儿/null 风虎云龙/null 风蚀/null 风行/null 风行一时/null 风行云蒸/null 风行水上/null 风行电击/null 风行草从/null 风行草偃/null 风行草靡/null 风行雷厉/null 风衣/null 风言/null 风言俏语/null 风言醋语/null 风言风语/null 风调/null 风调雨顺/null 风谕/null 风谣/null 风貌/null 风起/null 风起云布/null 风起云涌/null 风起潮涌/null 风趣/null 风趣横生/null 风车/null 风车云马/null 风车雨马/null 风轮/null 风轻云净/null 风轻云淡/null 风轻日暖/null 风选/null 风速/null 风速表/null 风速计/null 风道/null 风邪/null 风采/null 风里/null 风里杨花/null 风量/null 风钻/null 风铃/null 风铲/null 风锤/null 风镐/null 风镜/null 风门/null 风门子/null 风闸/null 风闻/null 风阻尼器/null 风险/null 风险估计/null 风险投资/null 风险抵押/null 风险管理/null 风障/null 风雅/null 风雨/null 风雨不改/null 风雨不透/null 风雨交加/null 风雨凄凄/null 风雨同舟/null 风雨如晦/null 风雨如磐/null 风雨对床/null 风雨无阻/null 风雨时若/null 风雨晦冥/null 风雨晦暝/null 风雨欲来/null 风雨漂摇/null 风雨萧条/null 风雨飘摇/null 风雪/null 风雷/null 风霜/null 风静浪平/null 风靡/null 风靡一时/null 风靡云涌/null 风靡云蒸/null 风韵/null 风顺/null 风风火火/null 风风雨雨/null 风风韵韵/null 风飘/null 风飞云会/null 风飧水宿/null 风飧露宿/null 风餐水宿/null 风餐水栖/null 风餐雨宿/null 风餐露宿/null 风马不接/null 风马云车/null 风马牛/null 风马牛不相及/null 风驰/null 风驰电卷/null 风驰电掣/null 风驰电赴/null 风驰电逝/null 风驰雨骤/null 风驱电击/null 风驱电扫/null 风骚/null 风骨/null 风骨峭峻/null 风鬟雨鬓/null 风鬟雾鬓/null 风鸟/null 飐飐/null 飒然/null 飒爽/null 飒爽英姿/null 飒飒/null 飒飒声/null 飓风/null 飕声/null 飕飕/null 飕飕声/null 飘举/null 飘出/null 飘动/null 飘过/null 飘卷/null 飘失/null 飘尘/null 飘带/null 飘忽/null 飘忽不定/null 飘悠/null 飘扬/null 飘拂/null 飘摇/null 飘散/null 飘晃/null 飘来/null 飘泊/null 飘洋/null 飘洋过海/null 飘洒/null 飘流/null 飘浮/null 飘海/null 飘游/null 飘渺/null 飘溢/null 飘然/null 飘着/null 飘移/null 飘絮/null 飘缈/null 飘舞/null 飘荡/null 飘落/null 飘著/null 飘蓬/null 飘蓬断梗/null 飘起/null 飘逝/null 飘逸/null 飘雪/null 飘零/null 飘风/null 飘风急雨/null 飘风暴雨/null 飘风骤雨/null 飘飖/null 飘飘/null 飘飘欲出/null 飘飘然/null 飘飞/null 飘香/null 飙举电至/null 飙信/null 飙升/null 飙发电举/null 飙口水/null 飙汗/null 飙涨/null 飙车/null 飙风/null 飞临/null 飞书走檄/null 飞了/null 飞云掣电/null 飞人/null 飞出/null 飞出个未来/null 飞刀/null 飞刍挽粒/null 飞刍挽粟/null 飞刍挽粮/null 飞刍转饷/null 飞利浦/null 飞利浦公司/null 飞动/null 飞升/null 飞去/null 飞向/null 飞吻/null 飞回/null 飞土逐肉/null 飞地/null 飞墙走壁/null 飞声腾实/null 飞天/null 飞奔/null 飞射/null 飞将军/null 飞尘/null 飞廉/null 飞弹/null 飞归/null 飞往/null 飞征/null 飞得/null 飞得高/null 飞快/null 飞扑/null 飞扬/null 飞扬浮躁/null 飞扬跋扈/null 飞掠/null 飞掠而过/null 飞播/null 飞散/null 飞文染翰/null 飞旋/null 飞机/null 飞机场/null 飞机失事/null 飞机库/null 飞机棚/null 飞机票/null 飞机舱门/null 飞机餐/null 飞来/null 飞来横祸/null 飞来飞去/null 飞檐/null 飞檐走壁/null 飞檐走脊/null 飞殃走祸/null 飞毛/null 飞毛腿/null 飞沙扬砾/null 飞沙走石/null 飞沙走砾/null 飞沙转石/null 飞沫/null 飞沫传染/null 飞沫四溅/null 飞泉/null 飞洒/null 飞流短长/null 飞涨/null 飞溅/null 飞瀑/null 飞灵/null 飞灾/null 飞灾横祸/null 飞熊入梦/null 飞燕游龙/null 飞燕草/null 飞父子兵/null 飞球/null 飞白/null 飞盘/null 飞眼/null 飞眼传情/null 飞短流长/null 飞砂扬砾/null 飞砂走石/null 飞碟/null 飞祸/null 飞离/null 飞禽/null 飞禽走兽/null 飞秒/null 飞米转刍/null 飞粮挽秣/null 飞红/null 飞翔/null 飞腾/null 飞腿/null 飞舞/null 飞舟/null 飞航式导弹/null 飞船/null 飞艇/null 飞花/null 飞苍走黄/null 飞落/null 飞蓬/null 飞蓬乘风/null 飞蓬随风/null 飞虎/null 飞虎队/null 飞虫/null 飞蛾/null 飞蛾扑火/null 飞蛾投火/null 飞蛾投焰/null 飞蛾赴火/null 飞蛾赴烛/null 飞蛾赴焰/null 飞蝇垂珠/null 飞蝗/null 飞蝶/null 飞行/null 飞行云/null 飞行前/null 飞行半径/null 飞行员/null 飞行器/null 飞行家/null 飞行术/null 飞行甲板/null 飞行者/null 飞行记录/null 飞行记录仪/null 飞行记录器/null 飞行队/null 飞觥走斝/null 飞语/null 飞贼/null 飞走/null 飞赴/null 飞起/null 飞越/null 飞跃/null 飞跃道/null 飞跑/null 飞身/null 飞身翻腾/null 飞车/null 飞车走壁/null 飞转/null 飞轮/null 飞轮海/null 飞边/null 飞过/null 飞近/null 飞进/null 飞逝/null 飞速/null 飞遁离俗/null 飞针走线/null 飞镖/null 飞镳/null 飞难/null 飞雪/null 飞靶/null 飞马/null 飞马座/null 飞驰/null 飞驶/null 飞鱼/null 飞鱼座/null 飞鱼族/null 飞鸟/null 飞鸟依人/null 飞鸟时代/null 飞鸣/null 飞鸽/null 飞鸿/null 飞鸿印雪/null 飞鸿踏雪/null 飞鸿雪爪/null 飞鹰/null 飞鹰走犬/null 飞鹰走狗/null 飞鹰走马/null 飞黄腾达/null 飞鼠/null 飞龙/null 飞龙乘云/null 飞龙在天/null 食不下咽/null 食不二味/null 食不充口/null 食不充肠/null 食不充饥/null 食不兼味/null 食不兼肉/null 食不厌精/null 食不念饱/null 食不暇饱/null 食不果腹/null 食不求甘/null 食不求饱/null 食不甘味/null 食不知味/null 食不糊口/null 食不累味/null 食不终味/null 食不遑味/null 食不重味/null 食不重肉/null 食之五味弃之不甘/null 食之无味弃之可惜/null 食人/null 食人族/null 食人者/null 食人肉/null 食人鲨/null 食伴/null 食住/null 食俸/null 食具/null 食具柜/null 食具橱/null 食利者/null 食前方丈/null 食变星/null 食古不化/null 食味方丈/null 食品/null 食品公司/null 食品加工机/null 食品卫生/null 食品厂/null 食品室/null 食品工业/null 食品店/null 食品摊/null 食品柜/null 食品污染/null 食品药品监督局/null 食品药品监督管理局/null 食堂/null 食季/null 食客/null 食宿/null 食宿自理/null 食宿费/null 食少事繁/null 食尸鬼/null 食店/null 食心虫/null 食性/null 食指/null 食指大动/null 食料/null 食施/null 食无求饱/null 食既/null 食日万钱/null 食槽/null 食欲/null 食欲不振/null 食毛践土/null 食水/null 食油/null 食法/null 食火鸟/null 食火鸡/null 食物/null 食物中毒/null 食物及药品管理局/null 食物房/null 食物柜/null 食物橱/null 食物油/null 食物链/null 食玉炊桂/null 食甚/null 食用/null 食用猪/null 食疗/null 食癖/null 食盐/null 食盒/null 食相/null 食禁/null 食禄/null 食租衣税/null 食积/null 食管/null 食管癌/null 食粮/null 食糖/null 食而不化/null 食肆/null 食肉/null 食肉动物/null 食肉寝皮/null 食肉目/null 食肉类/null 食腐动物/null 食色/null 食色性也/null 食茱萸/null 食草/null 食草动物/null 食荼卧棘/null 食菌/null 食虫/null 食虫植物/null 食虫目/null 食虫类/null 食蚁/null 食蚁兽/null 食蜂鸟/null 食蟹獴/null 食补/null 食言/null 食言而肥/null 食谱/null 食谷类/null 食货/null 食道/null 食道癌/null 食醋/null 食量/null 食顷/null 食鱼/null 飨以闭门羹/null 飨客/null 飨宴/null 飨饮/null 餍于游乐/null 餍足/null 餐具/null 餐具室/null 餐具架/null 餐具柜/null 餐具橱/null 餐刀/null 餐券/null 餐前/null 餐厅/null 餐叉/null 餐台/null 餐后/null 餐器/null 餐室/null 餐巾/null 餐巾纸/null 餐布/null 餐料/null 餐末甜酒/null 餐杯/null 餐松啖柏/null 餐松饮涧/null 餐桌/null 餐桌盐/null 餐桌转盘/null 餐点/null 餐牌/null 餐物/null 餐用/null 餐礼/null 餐者/null 餐费/null 餐车/null 餐风吸露/null 餐风宿水/null 餐风宿雨/null 餐风宿露/null 餐风沐雨/null 餐食/null 餐饭/null 餐饮/null 餐饮店/null 餐馆/null 餮者/null 饔飧/null 饔飧不给/null 饔飧不饱/null 饔饩/null 饕口贪舌/null 饕客/null 饕餮/null 饕餮之徒/null 饕餮大餐/null 饕餮纹/null 饕餮者/null 饥不择食/null 饥冻交切/null 饥寒/null 饥寒交切/null 饥寒交迫/null 饥民/null 饥渴/null 饥渴交攻/null 饥渴交迫/null 饥火烧肠/null 饥肠/null 饥肠辘辘/null 饥色/null 饥荒/null 饥虎扑食/null 饥谨/null 饥附饱扬/null 饥餐渴饮/null 饥饱/null 饥饿/null 饥饿线/null 饥馑/null 饥馑荐臻/null 饫甘餍肥/null 饬令/null 饭前/null 饭勺/null 饭匙/null 饭厅/null 饭合/null 饭后/null 饭后一支烟/null 饭后服用/null 饭后百步走/null 饭后酒/null 饭囊/null 饭囊衣架/null 饭囊酒瓮/null 饭团/null 饭坑酒囊/null 饭堂/null 饭局/null 饭庄/null 饭店/null 饭后/null 饭时/null 饭来/null 饭来开口/null 饭桌/null 饭桶/null 饭盆/null 饭盒/null 饭碗/null 饭票/null 饭类/null 饭粒/null 饭糗茹草/null 饭菜/null 饭蔬饮水/null 饭袋/null 饭费/null 饭量/null 饭钱/null 饭铲/null 饭铺/null 饭锅/null 饭食/null 饭餸/null 饭馆/null 饭馆儿/null 饮下/null 饮冰茹檗/null 饮冰食檗/null 饮品/null 饮场/null 饮子/null 饮宴/null 饮弹/null 饮恨/null 饮恨吞声/null 饮恨而终/null 饮料/null 饮气吞声/null 饮水/null 饮水啜菽/null 饮水器/null 饮水思源/null 饮水曲肱/null 饮水机/null 饮水知源/null 饮水食菽/null 饮汤/null 饮河满腹/null 饮泣/null 饮泪/null 饮流怀源/null 饮灰洗胃/null 饮片/null 饮用/null 饮用水/null 饮者/null 饮茶/null 饮血/null 饮血茹毛/null 饮过量/null 饮酒/null 饮酒作乐/null 饮酒癖/null 饮酒驾车/null 饮醇自醉/null 饮露餐风/null 饮风餐露/null 饮食/null 饮食业/null 饮食店/null 饮食男女/null 饮食疗养/null 饮食疗法/null 饮食起居/null 饮马/null 饮马投钱/null 饮鸠止渴/null 饮鸩止渴/null 饯亭玉立/null 饯别/null 饯行/null 饰以/null 饰品/null 饰头巾/null 饰巾/null 饰带/null 饰有/null 饰板/null 饰演/null 饰物/null 饰者/null 饰词/null 饰边/null 饰过/null 饰钉/null 饰非拒谏/null 饰非文过/null 饰非遂过/null 饰面/null 饱享/null 饱人不知饿人饥/null 饱以老拳/null 饱受/null 饱含/null 饱和/null 饱和剂/null 饱和度/null 饱和溶液/null 饱和点/null 饱和状态/null 饱和电流/null 饱和脂肪/null 饱和脂肪酸/null 饱嗝/null 饱嗝儿/null 饱学/null 饱学之士/null 饱尝/null 饱暖/null 饱暖思淫欲/null 饱暖生淫欲/null 饱汉不知饿汉饥/null 饱满/null 饱眼福/null 饱私囊/null 饱经/null 饱经忧患/null 饱经沧桑/null 饱经霜雪/null 饱经风霜/null 饱绽/null 饱肚/null 饱胀/null 饱腹/null 饱览/null 饱读/null 饱足/null 饱雨/null 饱食/null 饱食思淫欲/null 饱食暖衣/null 饱食终日/null 饱食终日无所用心/null 饱餐/null 饱餐一顿/null 饱饱/null 饲养/null 饲养员/null 饲养场/null 饲养者/null 饲喂/null 饲料/null 饲槽/null 饲狗/null 饲育/null 饲育者/null 饲草/null 饴糖/null 饵敌/null 饵料/null 饵线/null 饵诱/null 饵雷/null 饵食/null 饶了/null 饶命/null 饶头/null 饶平/null 饶弯/null 饶恕/null 饶有/null 饶有兴趣/null 饶有风趣/null 饶河/null 饶舌/null 饶舌家/null 饶舌者/null 饶舌调唇/null 饶舌音乐/null 饶过/null 饶阳/null 饷银/null 饸饹/null 饺子/null 饺子馆/null 饺肉/null 饺饵/null 饼乾/null 饼图/null 饼型图/null 饼子/null 饼干/null 饼汤/null 饼状/null 饼状图/null 饼肥/null 饼铛/null 饼饵/null 饽约/null 饽饽/null 饿了/null 饿倒/null 饿坏/null 饿得/null 饿极/null 饿死/null 饿死了/null 饿死事小失节事大/null 饿殍/null 饿殍枕藉/null 饿殍相望/null 饿殍载道/null 饿汉/null 饿狼之口/null 饿病/null 饿瘦/null 饿着/null 饿肚子/null 饿莩/null 饿莩载道/null 饿莩遍野/null 饿虎吞羊/null 饿虎扑食/null 饿虎擒羊/null 饿饭/null 饿鬼/null 馀勇可贾/null 馂馅/null 馄炖/null 馄饨/null 馅儿/null 馅儿饼/null 馅饼/null 馅饼皮/null 馆内/null 馆区/null 馆员/null 馆地/null 馆外/null 馆子/null 馆宾/null 馆站/null 馆舍/null 馆藏/null 馆藏管理/null 馆长/null 馆陶/null 馈电/null 馈给/null 馈赠/null 馈送/null 馊主意/null 馊水/null 馋人/null 馋嘴/null 馋嘴蛙/null 馋慝之口/null 馋獠生诞/null 馋痨/null 馋言/null 馋言佞语/null 馋诞欲垂/null 馋鬼/null 馍糊/null 馍馍/null 馏分/null 馒头/null 馒首/null 馓子/null 馔玉炊金/null 馕嗓/null 馕糟/null 馕糠/null 首下尻高/null 首丘之念/null 首丘之思/null 首丘之情/null 首丘之望/null 首丘夙愿/null 首义/null 首付/null 首付款/null 首件/null 首任/null 首位/null 首例/null 首倡/null 首倡义举/null 首先/null 首先应/null 首创/null 首创精神/null 首创者/null 首办/null 首功/null 首县/null 首发/null 首句/null 首台/null 首唱/null 首唱义兵/null 首善之区/null 首善之地/null 首场/null 首夺/null 首如飞蓬/null 首字/null 首字母/null 首字母拚音词/null 首字母缩写/null 首季/null 首家/null 首富/null 首尔/null 首尔国立大学/null 首尔市/null 首尔特别市/null 首尾/null 首尾两端/null 首尾乖互/null 首尾共济/null 首尾受敌/null 首尾夹攻/null 首尾狼狈/null 首尾相卫/null 首尾相应/null 首尾相接/null 首尾相援/null 首尾相救/null 首尾相继/null 首尾相赴/null 首尾相连/null 首尾相邻/null 首尾贯通/null 首尾音/null 首层/null 首屈一指/null 首届/null 首席/null 首席代表/null 首席大法官/null 首席执行官/null 首席法官/null 首府/null 首度/null 首座/null 首开/null 首当/null 首当其冲/null 首恶/null 首恶必办/null 首战/null 首战告捷/null 首批/null 首推/null 首施两端/null 首日封/null 首映/null 首映式/null 首晚/null 首期/null 首枚/null 首架/null 首检/null 首次/null 首次公开招股/null 首次注视时间/null 首款/null 首演/null 首犯/null 首相/null 首离众盼/null 首级/null 首肯/null 首脑/null 首脑会晤/null 首脑会议/null 首脑会谈/null 首舱/null 首行/null 首要/null 首要任务/null 首要分子/null 首要地位/null 首要条件/null 首语/null 首足异处/null 首身分离/null 首车/null 首轮/null 首选/null 首选项/null 首途/null 首邑/null 首部/null 首都/null 首都剧场/null 首都国际机场/null 首都机场/null 首都经济贸易大学/null 首都经贸大学/null 首都领地/null 首重/null 首钢/null 首长/null 首队/null 首难/null 首音/null 首页/null 首项/null 首领/null 首饰/null 首鼠两端/null 首鼠模棱/null 香云纱/null 香会/null 香体剂/null 香兰/null 香几/null 香包/null 香口胶/null 香叶/null 香吻/null 香味/null 香味扑鼻/null 香喷喷/null 香囊/null 香坊/null 香坊区/null 香奈儿/null 香娇玉嫩/null 香子兰/null 香客/null 香山/null 香山区/null 香岛/null 香巢/null 香币/null 香干/null 香料/null 香料商/null 香料店/null 香料类/null 香木/null 香柏/null 香树/null 香根草/null 香格里拉/null 香桂/null 香案/null 香椿/null 香榧/null 香榭丽舍/null 香榭丽舍大街/null 香槟/null 香槟色/null 香槟酒/null 香樟/null 香橙/null 香橼/null 香檀/null 香气/null 香气扑鼻/null 香水/null 香水梨/null 香水瓶/null 香汤沐浴/null 香河/null 香油/null 香油树/null 香泡树/null 香波/null 香泽/null 香洲/null 香洲区/null 香浓/null 香消玉减/null 香消玉损/null 香消玉殒/null 香消玉碎/null 香润玉温/null 香液/null 香温玉软/null 香港中文大学/null 香港交易所/null 香港大学/null 香港岛/null 香港工会联合会/null 香港文化中心/null 香港湿地公园/null 香港理工大学/null 香港电台/null 香港科技大学/null 香港红十字会/null 香港脚/null 香港警察/null 香港贸易发展局/null 香港足球总会/null 香港金融管理局/null 香港银行公会/null 香滑/null 香火/null 香火不断/null 香火不绝/null 香火兄弟/null 香火因缘/null 香火姊妹/null 香灰/null 香炉/null 香烛/null 香烟/null 香熏/null 香熏疗法/null 香片/null 香獐子/null 香瓜/null 香甜/null 香皂/null 香的/null 香砂养胃丸/null 香粉/null 香精/null 香精油/null 香羊肚/null 香肠/null 香胰子/null 香脂/null 香脆/null 香腺/null 香臭/null 香艳/null 香花/null 香花供养/null 香芹/null 香茅/null 香茶/null 香草/null 香草兰/null 香草精/null 香草美人/null 香草醛/null 香荤/null 香荽/null 香菇/null 香菌/null 香菜/null 香菜叶/null 香菰/null 香葱/null 香蒜酱/null 香蒲/null 香蒿/null 香蕈/null 香蕉/null 香蕉人/null 香蕉水/null 香蕉苹果/null 香薄荷/null 香薰/null 香薷/null 香袋/null 香象渡河/null 香象绝流/null 香车宝马/null 香轮宝骑/null 香辣/null 香辣椒/null 香连丸/null 香酒/null 香酥/null 香醇/null 香醋/null 香销玉沉/null 香闺/null 香闺绣阁/null 香附/null 香附子/null 香风/null 香饥玉体/null 香饵/null 香饵之下必有死鱼/null 香饼/null 香饽饽/null 香香/null 香馥馥/null 香鱼/null 香鼬/null 馥郁/null 馥馥/null 馨心/null 馨花/null 馨香/null 馨香祷祝/null 马丁/null 马丁・路德/null 马丁・路德・金/null 马丁尼/null 马丁炉/null 马三立/null 马上/null 马上比武/null 马不停蹄/null 马丘比丘/null 马中锡/null 马亚人/null 马仰人翻/null 马伯乐/null 马伴/null 马但/null 马俊仁/null 马儿/null 马克/null 马克・吐温/null 马克思/null 马克思・列宁主义/null 马克思主义/null 马克思主义哲学/null 马克思主义政治经济学/null 马克思主义研究会/null 马克思主义者/null 马克思列宁主义/null 马克斯・普朗克/null 马克斯威尔/null 马克杯/null 马克沁/null 马克沁机枪/null 马克笔/null 马克西米连/null 马兜铃/null 马兜铃科/null 马公/null 马六甲/null 马六甲海峡/null 马兰/null 马兰基地/null 马兰花/null 马关/null 马关条约/null 马其顿/null 马其顿共和国/null 马具/null 马刀/null 马列/null 马列主义/null 马利亚/null 马利亚纳海沟/null 马利亚纳群岛/null 马利基/null 马到成功/null 马刺/null 马前/null 马前卒/null 马力/null 马勃牛溲/null 马勃菌/null 马勒/null 马勺/null 马匹/null 马南邨/null 马厩/null 马友友/null 马口铁/null 马口鱼/null 马可尼/null 马可波罗/null 马可福音/null 马号/null 马后/null 马后炮/null 马后脚/null 马哈/null 马哈拉施特拉邦/null 马哈迪/null 马嘴/null 马嘶声/null 马噶尔尼/null 马噶尔尼使团/null 马嚼子/null 马国/null 马场/null 马塞卢/null 马塞诸塞/null 马壮/null 马壮人强/null 马大/null 马大哈/null 马天尼/null 马太/null 马太沟/null 马太沟镇/null 马太福音/null 马夫/null 马失前蹄/null 马头/null 马头星云/null 马头琴/null 马奶/null 马奶酒/null 马威/null 马子/null 马家军/null 马尔他/null 马尔他人/null 马尔他语/null 马尔代夫/null 马尔克奥雷利/null 马尔可夫过程/null 马尔堡病毒/null 马尔库斯/null 马尔康/null 马尔康镇/null 马尔扎赫/null 马尔斯/null 马尔维纳斯群岛/null 马尔萨斯/null 马尔萨斯主义/null 马尔谷/null 马尔贾/null 马尔默/null 马尼托巴/null 马尼拉/null 马尼拉大学/null 马尼拉麻/null 马尾/null 马尾军港/null 马尾区/null 马尾巴/null 马尾松/null 马尾水/null 马尾水师学堂/null 马尾港/null 马尾穿豆腐/null 马尾藻/null 马尾辫/null 马屁/null 马屁精/null 马山/null 马工枚速/null 马帮/null 马年/null 马库色/null 马店/null 马座/null 马弁/null 马后炮/null 马德拉斯/null 马德拉群岛/null 马德望/null 马德里/null 马快/null 马恩列斯/null 马恩岛/null 马戏/null 马戏团/null 马戛尔尼/null 马戛尔尼使团/null 马房/null 马扎/null 马扎尔/null 马扎尔语/null 马托格罗索/null 马拉/null 马拉加/null 马拉博/null 马拉喀什/null 马拉地/null 马拉地语/null 马拉多纳/null 马拉开波/null 马拉松/null 马拉松比赛/null 马拉松赛/null 马拉松赛跑/null 马拉糕/null 马拉维/null 马掌/null 马提尼克/null 马放南山/null 马斯内/null 马斯喀特/null 马斯垂克/null 马斯河/null 马斯特里赫特/null 马无夜草不肥/null 马日事变/null 马普托/null 马服君/null 马服子/null 马札/null 马术/null 马术家/null 马村/null 马村区/null 马来/null 马来亚/null 马来亚人/null 马来人/null 马来半岛/null 马来文/null 马来群岛/null 马来西亚/null 马来西亚人/null 马来西亚语/null 马来语/null 马枪/null 马架/null 马格丽特/null 马格德堡/null 马桩/null 马桶/null 马桶拔/null 马棚/null 马槟榔/null 马槽/null 马歇尔/null 马步/null 马氏珍珠贝/null 马洛/null 马灯/null 马熊/null 马牛襟裾/null 马王堆/null 马球/null 马瑙斯/null 马甲/null 马略卡/null 马皮/null 马祖/null 马祖列岛/null 马科/null 马竿/null 马类/null 马粪/null 马粪纸/null 马糊/null 马约卡/null 马纳马/null 马绍尔群岛/null 马经/null 马绳/null 马缨花/null 马群/null 马耳东风/null 马耳他/null 马肉/null 马肚带/null 马背/null 马脚/null 马脸/null 马腿/null 马自达/null 马致远/null 马舞之灾/null 马良/null 马芬/null 马苏德/null 马苏里拉/null 马英九/null 马草夼/null 马草夼村/null 马荣/null 马莲/null 马萨诸塞/null 马萨诸塞州/null 马蓝/null 马蔺/null 马虎/null 马蛔虫/null 马蜂/null 马蜂窝/null 马蝇/null 马衔/null 马表/null 马裤/null 马裤呢/null 马褂/null 马褡子/null 马贩/null 马贼/null 马赛/null 马赛克/null 马赛族/null 马赛曲/null 马赫/null 马赫主义/null 马赫数/null 马赫计/null 马超/null 马趴/null 马路/null 马路口/null 马路沿儿/null 马路牙子/null 马蹄/null 马蹄形/null 马蹄星云/null 马蹄莲/null 马蹄蟹/null 马蹄表/null 马蹄袖/null 马蹄铁/null 马蹬/null 马车/null 马车夫/null 马边/null 马边县/null 马达/null 马达加斯加/null 马达加斯加岛/null 马连良/null 马道/null 马里/null 马里亚纳海沟/null 马里亚纳群岛/null 马里兰/null 马里兰州/null 马里博尔/null 马里奥/null 马钱/null 马钱子/null 马铃/null 马铃薯/null 马铃薯泥/null 马锅头/null 马镫/null 马队/null 马陆/null 马雅/null 马雅人/null 马雅族/null 马雅语/null 马面/null 马革/null 马革裹尸/null 马靴/null 马鞍/null 马鞍子/null 马鞍山/null 马鞍形/null 马鞭/null 马颈圈/null 马飞奔/null 马首/null 马首是瞻/null 马马虎虎/null 马驹/null 马驹儿/null 马驹子/null 马骝/null 马骡/null 马鬃/null 马鲛鱼/null 马鳖/null 马鹿/null 马鹿易形/null 马鼻疽/null 马齿徒增/null 马齿苋/null 马龙/null 驭兽术/null 驭手/null 驭气/null 驮兽/null 驮子/null 驮畜/null 驮筐/null 驮篓/null 驮绒/null 驮著/null 驮轿/null 驮运/null 驮运路/null 驮重/null 驮马/null 驯从/null 驯养/null 驯养繁殖/null 驯养繁殖场/null 驯化/null 驯善/null 驯悍记/null 驯扰/null 驯服/null 驯服手/null 驯服者/null 驯熟/null 驯狗/null 驯良/null 驯虎/null 驯顺/null 驯马/null 驯马人/null 驯马场/null 驯马师/null 驯驼/null 驯鹿/null 驰名/null 驰名世界/null 驰名中外/null 驰援/null 驰突/null 驰誉/null 驰道/null 驰驱/null 驰骋/null 驰骤/null 驰鹜/null 驰龙科/null 驱体/null 驱使/null 驱出/null 驱动/null 驱动力/null 驱动器/null 驱动程序/null 驱动程式/null 驱动轮/null 驱去/null 驱干/null 驱开/null 驱役/null 驱恶/null 驱散/null 驱潜艇/null 驱病/null 驱离/null 驱策/null 驱虫/null 驱虫剂/null 驱走/null 驱赶/null 驱车/null 驱迫/null 驱逐/null 驱逐令/null 驱逐出境/null 驱逐机/null 驱逐者/null 驱逐舰/null 驱遣/null 驱邪/null 驱邪避恶/null 驱除/null 驱除鞑虏/null 驱雾/null 驱风剂/null 驱马/null 驱驰/null 驱驶/null 驱鬼/null 驱魔/null 驱魔赶鬼/null 驳不倒/null 驳倒/null 驳击/null 驳回/null 驳回上诉/null 驳壳/null 驳壳枪/null 驳复/null 驳子/null 驳岸/null 驳得/null 驳接/null 驳斥/null 驳杂/null 驳正/null 驳船/null 驳议/null 驳词/null 驳辞/null 驳运/null 驳运费/null 驳难/null 驳面子/null 驴前马后/null 驴叫/null 驴唇不对马嘴/null 驴唇马嘴/null 驴唇马觜/null 驴头不对马嘴/null 驴子/null 驴心狗肺/null 驴打滚/null 驴生戟角/null 驴生笄角/null 驴皮影/null 驴皮胶/null 驴粪/null 驴车/null 驴骡/null 驴鸣狗吠/null 驵侩/null 驶入/null 驶出/null 驶去/null 驶向/null 驶回/null 驶往/null 驶抵/null 驶来/null 驶流/null 驶离/null 驶过/null 驶近/null 驶进/null 驷不及舌/null 驷之过隙/null 驷马/null 驷马难追/null 驷马高车/null 驸马/null 驹光/null 驹子/null 驹齿未落/null 驺从/null 驺虞/null 驻京/null 驻兵/null 驻军/null 驻北京/null 驻华/null 驻华使节/null 驻华大使/null 驻华大使馆/null 驻华盛顿/null 驻厂/null 驻在/null 驻在国/null 驻地/null 驻场/null 驻外/null 驻外使馆/null 驻大陆/null 驻守/null 驻屯/null 驻扎/null 驻有/null 驻波/null 驻港/null 驻点/null 驻留/null 驻留时间/null 驻节/null 驻足/null 驻足不前/null 驻跸/null 驻车制动/null 驻防/null 驻颜/null 驻香港/null 驻马店/null 驻马店地区/null 驼员/null 驼子/null 驼峰/null 驼毛/null 驼绒/null 驼背/null 驼背人/null 驼背者/null 驼背鲸/null 驼色/null 驼鸟/null 驼鸡/null 驼鹿/null 驽马/null 驽马十舍/null 驽马十驾/null 驽马恋栈/null 驽马恋栈豆/null 驽马恋豆/null 驽马铅刀/null 驽骀/null 驾临/null 驾于/null 驾云/null 驾凌/null 驾到/null 驾崩/null 驾帆船/null 驾御/null 驾机/null 驾校/null 驾照/null 驾船/null 驾艇/null 驾车/null 驾车者/null 驾轻就熟/null 驾辕/null 驾进/null 驾雾腾云/null 驾驭/null 驾驭着/null 驾驳/null 驾驶/null 驾驶人/null 驾驶员/null 驾驶室/null 驾驶席/null 驾驶执照/null 驾驶盘/null 驾驶者/null 驾驶舱/null 驾驶证/null 驾鹤成仙/null 驾鹤西去/null 驾鹤西归/null 驾鹤西游/null 驾龄/null 驿书/null 驿传/null 驿城/null 驿城区/null 驿站/null 驿舍/null 驿道/null 驿马/null 骀荡/null 骁勇/null 骁勇善战/null 骁将/null 骁悍/null 骁骑/null 骂不绝口/null 骂人/null 骂名/null 骂声/null 骂天骂/null 骂她/null 骂我/null 骂架/null 骂着/null 骂笑/null 骂者/null 骂著/null 骂街/null 骂走/null 骂题/null 骂骂咧咧/null 骄人/null 骄傲/null 骄傲使人落后/null 骄傲自满/null 骄儿/null 骄兵必败/null 骄兵自败/null 骄奢/null 骄奢淫佚/null 骄奢淫逸/null 骄娇二气/null 骄子/null 骄慢/null 骄敌/null 骄横/null 骄气/null 骄狂/null 骄矜/null 骄纵/null 骄者/null 骄蹇/null 骄阳/null 骄阳似火/null 骅骝/null 骆马/null 骆驼/null 骆驼刺/null 骆驼夫/null 骆驼祥子/null 骆驼绒/null 骆驿不绝/null 骇人/null 骇人听闻/null 骇客/null 骇异/null 骇怕/null 骇怪/null 骇愕/null 骇术/null 骇浪/null 骇浪惊涛/null 骇然/null 骇目/null 骇闻/null 骈体/null 骈俪/null 骈偶文风/null 骈四俪六/null 骈拇枝指/null 骈文/null 骈枝/null 骈肩/null 骈肩累足/null 骈肩累踵/null 骈肩累迹/null 骈胁/null 骈阗/null 骊姬之乱/null 骊山/null 骊歌/null 骊黄牝牡/null 骋怀/null 骋用/null 骋目/null 验上/null 验中/null 验乳计/null 验伤/null 验光/null 验光师/null 验光法/null 验光配镜业/null 验光配镜法/null 验关/null 验历/null 验发/null 验墒/null 验声/null 验定/null 验尸/null 验尸官/null 验尿/null 验性/null 验戮/null 验收/null 验收报告/null 验放/null 验教/null 验方/null 验明/null 验明正身/null 验查/null 验核/null 验物/null 验电/null 验电器/null 验电笔/null 验看/null 验票/null 验算/null 验线/null 验者/null 验血/null 验讫/null 验证/null 验证人/null 验证码/null 验说/null 验货/null 验资/null 验迄/null 验过/null 验钞器/null 验钞机/null 验验/null 骏足/null 骏马/null 骐骥/null 骐骥一毛/null 骐麟/null 骑上/null 骑上马/null 骑乘/null 骑了/null 骑从/null 骑兵/null 骑兵连/null 骑兵队/null 骑土/null 骑在/null 骑墙/null 骑墙者/null 骑士/null 骑士团/null 骑士气概/null 骑士道/null 骑士风格/null 骑射/null 骑师/null 骑得/null 骑手/null 骑术/null 骑枪兵/null 骑楼/null 骑牛觅牛/null 骑用/null 骑用马/null 骑田岭/null 骑着/null 骑缝/null 骑者/null 骑者善堕/null 骑虎/null 骑虎难下/null 骑警/null 骑警队/null 骑车/null 骑马/null 骑马人/null 骑马找马/null 骑马者/null 骑马裤/null 骑驴/null 骑驴觅驴/null 骑骑/null 骑鹤/null 骑鹤上扬州/null 骑鼓/null 骒马/null 骖乘/null 骗买骗卖/null 骗人/null 骗你/null 骗供/null 骗入/null 骗取/null 骗吃/null 骗售/null 骗喝/null 骗她/null 骗子/null 骗局/null 骗徒/null 骗术/null 骗案/null 骗用/null 骗税/null 骗者/null 骗腿儿/null 骗色/null 骗财/null 骗走/null 骗过/null 骗钱/null 骗马/null 骗鬼/null 骚乱/null 骚乱性/null 骚乱者/null 骚人/null 骚人墨客/null 骚体/null 骚动/null 骚包/null 骚味/null 骚客/null 骚情/null 骚扰/null 骚扰客蚤/null 骚搅/null 骚然/null 骚话/null 骚货/null 骚闹/null 骚驴/null 骛远/null 骠悍/null 骠骑/null 骡夫/null 骡子/null 骡马/null 骡马大车/null 骤减/null 骤变/null 骤增/null 骤死/null 骤死式/null 骤然/null 骤燃/null 骤至/null 骤落/null 骤起/null 骤降/null 骤雨/null 骤雨狂风/null 骥子龙文/null 骥服盐车/null 骥骜/null 骨关节/null 骨关节病/null 骨内膜/null 骨刺/null 骨刻/null 骨力/null 骨化/null 骨器/null 骨坛/null 骨头/null 骨头架子/null 骨头节儿/null 骨子/null 骨子里/null 骨干/null 骨干企业/null 骨干力量/null 骨干网路/null 骨库/null 骨形/null 骨感/null 骨折/null 骨料/null 骨朵/null 骨朵儿/null 骨架/null 骨殖/null 骨气/null 骨法/null 骨灰/null 骨灰盒/null 骨炭/null 骨烬/null 骨片/null 骨牌/null 骨牌效应/null 骨病/null 骨痛/null 骨痛热/null 骨痨/null 骨瘤/null 骨瘦如柴/null 骨瘦如豺/null 骨癌/null 骨盆/null 骨碌/null 骨碌碌/null 骨碎补/null 骨科/null 骨科学/null 骨立/null 骨粉/null 骨结核/null 骨肉/null 骨肉分离/null 骨肉同胞/null 骨肉团圆/null 骨肉情/null 骨肉相残/null 骨肉相连/null 骨肉离散/null 骨肉至亲/null 骨肥厚/null 骨胳/null 骨胳肌/null 骨胶/null 骨胶原/null 骨腾肉飞/null 骨膜/null 骨膜炎/null 骨节/null 骨董/null 骨蒸/null 骨血/null 骨质/null 骨质增生/null 骨质疏松/null 骨质疏松症/null 骨都都/null 骨针/null 骨颤肉惊/null 骨骸/null 骨骺/null 骨骼/null 骨骼肌/null 骨髓/null 骨髓炎/null 骨髓移植/null 骨髓腔/null 骨鲠/null 骨鲠之臣/null 骨鲠在喉/null 骰塔/null 骰子/null 骰子盒/null 骰盅/null 骰钟/null 骶骨/null 骷髅/null 骸骨/null 骺软骨板/null 骼肌/null 髀肉复生/null 髂窝/null 髂骨/null 髋关节/null 髋部/null 髋骨/null 髌骨/null 髑髅/null 髓结/null 髓脑/null 髓膜/null 髓质/null 髓过氧化物酶/null 髓鞘/null 高一/高1 高二/高2 高三/高3 高下/null 高下任心/null 高下其手/null 高下在心/null 高不/null 高不凑低不就/null 高不可攀/null 高不可登/null 高不成/null 高不成低不就/null 高不辏低不就/null 高业弟子/null 高个/null 高个子/null 高中/null 高中学生/null 高中生/null 高丽/null 高丽八万大藏经/null 高丽参/null 高丽大藏经/null 高丽朝/null 高丽棒子/null 高丽王朝/null 高丽纸/null 高丽菜/null 高举/null 高举远蹈/null 高义薄云/null 高于/null 高于一切/null 高云/null 高亢/null 高产/null 高产稳产/null 高产量/null 高人/null 高人一头/null 高人一等/null 高人胜士/null 高人逸士/null 高价/null 高仿/null 高估/null 高位/null 高位厚禄/null 高位重禄/null 高低/null 高低不就/null 高低杠/null 高低潮/null 高体鳑鲏/null 高保真/null 高保真度/null 高倍/null 高值/null 高傲/null 高僧/null 高元音/null 高八度/null 高兴/null 高凸/null 高出/null 高分/null 高分低能/null 高分子/null 高分子化合物/null 高分子化学/null 高分辨/null 高分辨率/null 高利/null 高利率/null 高利贷/null 高利贷者/null 高利贷资本/null 高功/null 高功率/null 高加索/null 高加索山/null 高加索山脉/null 高勾丽/null 高升/null 高卡路里/null 高卢/null 高卢语/null 高卧/null 高卧东山/null 高压/null 高压手段/null 高压政策/null 高压氧/null 高压氧治疗/null 高压氧疗法/null 高压电/null 高压线/null 高压脊/null 高压蒸汽灭菌器/null 高压釜/null 高压锅/null 高原/null 高原寒区/null 高参/null 高叉泳装/null 高发/null 高句丽/null 高台/null 高名/null 高启/null 高呼/null 高品质/null 高唐/null 高唤/null 高唱/null 高唱入云/null 高喊/null 高地/null 高坐/null 高坡/null 高坪/null 高坪区/null 高城深池/null 高堂/null 高塔/null 高墙/null 高声/null 高处/null 高大/null 高天/null 高天厚地/null 高头/null 高妙/null 高学历/null 高安/null 高宗/null 高官/null 高官厚禄/null 高官显爵/null 高官极品/null 高密/null 高密度/null 高寒/null 高寒区/null 高寒地区/null 高对/null 高寿/null 高射/null 高射机关枪/null 高射机枪/null 高射炮/null 高小/null 高尔基/null 高尔基体/null 高尔基复合体/null 高尔夫/null 高尔夫球/null 高尔夫球场/null 高尔察克/null 高尔机体/null 高尚/null 高尚风格/null 高就/null 高层/null 高层云/null 高层建筑/null 高层执行员/null 高层旅馆/null 高层次/null 高居/null 高屋/null 高屋建瓴/null 高山/null 高山仰之/null 高山仰止/null 高山区/null 高山反应/null 高山景行/null 高山流水/null 高山病/null 高岭土/null 高岭石/null 高岸/null 高岸深谷/null 高峰/null 高峰会/null 高峰会议/null 高峰期/null 高峻/null 高州/null 高工/null 高差/null 高帮/null 高帽/null 高帽子/null 高干/null 高平/null 高平县/null 高年/null 高年级/null 高年级生/null 高度/null 高度表/null 高度角/null 高度计/null 高座/null 高强/null 高强度/null 高徒/null 高德纳/null 高性能/null 高悬/null 高慢/null 高手/null 高手林立/null 高才/null 高才卓识/null 高才博学/null 高才大学/null 高才大德/null 高才捷足/null 高才生/null 高才硕学/null 高才绝学/null 高才远识/null 高扬/null 高技/null 高技术/null 高报/null 高抬/null 高抬明镜/null 高抬贵手/null 高招/null 高拨子/null 高挂/null 高攀/null 高攀不上/null 高效/null 高效率/null 高效能/null 高教/null 高敞/null 高文典册/null 高文大册/null 高斯/null 高新/null 高新技术/null 高旷/null 高昂/null 高明/null 高明区/null 高明远见/null 高明远视/null 高显/null 高朋故戚/null 高朋满座/null 高朗/null 高本汉/null 高材/null 高材捷足/null 高材生/null 高材疾足/null 高村正彦/null 高枕/null 高枕不虞/null 高枕勿忧/null 高枕安卧/null 高枕安寝/null 高枕无事/null 高枕无忧/null 高枕无虞/null 高枕而卧/null 高果糖玉米糖浆/null 高架/null 高架桥/null 高架道路/null 高标/null 高标准/null 高标号/null 高栏/null 高树/null 高树乡/null 高校/null 高根/null 高根鞋/null 高档/null 高档商品/null 高档服装/null 高桥留美子/null 高梁/null 高梁川/null 高梁市/null 高梁蚜/null 高棉/null 高棉人/null 高棉语/null 高棚/null 高楼/null 高楼大厦/null 高橱/null 高次/null 高次方程/null 高歌/null 高歌猛进/null 高步云衢/null 高步通衢/null 高比重/null 高气压/null 高气压区/null 高水平/null 高汤/null 高沸点/null 高法/null 高洁/null 高浓缩铀/null 高消费/null 高涨/null 高深/null 高深莫测/null 高淳/null 高清/null 高清数字电视/null 高清晰度/null 高清电视/null 高温/null 高温作业/null 高温堆肥/null 高温热流/null 高温计/null 高港/null 高港区/null 高潮/null 高潮线/null 高潮迭起/null 高炉/null 高点/null 高烟囱/null 高烧/null 高热/null 高热病/null 高热量/null 高照/null 高燥/null 高爵丰禄/null 高爵厚禄/null 高爵重禄/null 高牙大纛/null 高球/null 高球场/null 高球杯/null 高甲戏/null 高男/null 高画质/null 高瘦/null 高的/null 高盛/null 高看/null 高眼鲽/null 高着/null 高瞻远嘱/null 高瞻远瞩/null 高矗/null 高矮/null 高矮胖瘦/null 高碑店/null 高碳钢/null 高祖/null 高祖母/null 高祖父/null 高票/null 高秆作物/null 高科技/null 高积云/null 高程/null 高税/null 高空/null 高空作业/null 高空弹跳/null 高空槽/null 高空病/null 高窗/null 高立/null 高端/null 高等/null 高等代数/null 高等动物/null 高等学校/null 高等教育/null 高等数学/null 高等植物/null 高等法院/null 高等院校/null 高筋面粉/null 高筑/null 高管/null 高粱/null 高粱米/null 高精/null 高精尖/null 高精度/null 高纤维/null 高级/null 高级专员/null 高级中学/null 高级人民法院/null 高级会计师/null 高级军官/null 高级农艺师/null 高级小学/null 高级工程师/null 高级干部/null 高级建筑师/null 高级教师/null 高级法院/null 高级班/null 高级的/null 高级研究/null 高级社/null 高级神经中枢/null 高级神经活动/null 高级经济师/null 高级职务/null 高级职员/null 高级职称/null 高级语言/null 高级阶段/null 高级领导人/null 高纬度/null 高维/null 高维代数簇/null 高维空间/null 高绵/null 高罗佩/null 高翔/null 高考/null 高者/null 高而不危/null 高而尖/null 高耸/null 高耸入云/null 高职/null 高职院校/null 高聚物/null 高背/null 高胡/null 高能/null 高能烈性炸药/null 高能物理/null 高能粒子/null 高能量/null 高脂血症/null 高脚/null 高脚杯/null 高脚椅/null 高脚橱/null 高腔/null 高腰/null 高自位置/null 高自标树/null 高自标置/null 高自骄大/null 高致病性/null 高良姜/null 高节清风/null 高节迈俗/null 高薪/null 高薪养廉/null 高薪厚禄/null 高薪聘请/null 高薪酬/null 高蛋白/null 高血压/null 高血压病/null 高血糖/null 高行健/null 高要/null 高见/null 高见远视/null 高视/null 高视阔步/null 高论/null 高识远度/null 高识远见/null 高调/null 高谈/null 高谈阔论/null 高质/null 高质量/null 高贵/null 高贵者/null 高赀/null 高起/null 高超/null 高足/null 高足弟子/null 高跟/null 高跟儿鞋/null 高跟鞋/null 高跷/null 高踞/null 高蹈/null 高车驷马/null 高辛氏/null 高达/null 高迁/null 高过/null 高迈/null 高远/null 高挑/高通 高通/高挑 高通公司/null 高速/null 高速乙太网路/null 高速公路/null 高速切削/null 高速度/null 高速挡/null 高速率/null 高速缓冲存储器/null 高速缓存/null 高速网络/null 高速路/null 高速钢/null 高邑/null 高邮/null 高邻/null 高铁/null 高铁血红蛋白/null 高锰酸钾/null 高阁/null 高阳/null 高阳公子/null 高阳狂客/null 高阳酒徒/null 高阶/null 高阶语言/null 高限/null 高院/null 高陵/null 高难/null 高难度/null 高雅/null 高雅简朴/null 高青/null 高音/null 高音喇叭/null 高音符/null 高音调/null 高音部/null 高频/null 高频加热/null 高频率/null 高频电波/null 高额/null 高额头/null 高风/null 高风亮节/null 高风劲节/null 高风峻节/null 高风险/null 高风险区/null 高飞/null 高飞球/null 高飞远举/null 高飞远翔/null 高飞远走/null 高飞远遁/null 高飞远集/null 高高/null 高高低低/null 高高兴兴/null 高高在上/null 高高手/null 高高手儿/null 高高挂起/null 高龄/null 髝髞/null 髫年/null 髫龄/null 髯口/null 髯须/null 鬃刷/null 鬃毛/null 鬈曲/null 鬓发/null 鬓发斑白/null 鬓毛/null 鬓角/null 鬣毛/null 鬣狗/null 鬣蜥/null 鬻儿卖女/null 鬻官卖爵/null 鬼似/null 鬼佬/null 鬼使/null 鬼使神差/null 鬼出电入/null 鬼剃头/null 鬼压床/null 鬼压身/null 鬼叫/null 鬼哭/null 鬼哭狼嚎/null 鬼哭神嚎/null 鬼大/null 鬼天气/null 鬼头鬼脑/null 鬼婆/null 鬼子/null 鬼子姜/null 鬼屋/null 鬼崇/null 鬼怕恶人/null 鬼怪/null 鬼才/null 鬼才信/null 鬼扯/null 鬼扯脚/null 鬼扯腿/null 鬼把戏/null 鬼摸脑壳/null 鬼故事/null 鬼斧/null 鬼斧神功/null 鬼斧神工/null 鬼楼/null 鬼气/null 鬼混/null 鬼火/null 鬼点/null 鬼点子/null 鬼物/null 鬼由心生/null 鬼画符/null 鬼目/null 鬼神/null 鬼神学/null 鬼祟/null 鬼笔/null 鬼胎/null 鬼脸/null 鬼节/null 鬼蜮/null 鬼蜮伎俩/null 鬼计/null 鬼计多端/null 鬼话/null 鬼说/null 鬼迷心窍/null 鬼针草/null 鬼门/null 鬼门关/null 鬼风疙瘩/null 鬼鬼祟祟/null 鬼魂/null 鬼魅/null 鬼魅伎俩/null 鬼魔/null 魁伟/null 魁元/null 魁北克/null 魁北克市/null 魁岸/null 魁星/null 魁星阁/null 魁梧/null 魁蚶/null 魁首/null 魂不守舍/null 魂不附体/null 魂断/null 魂梦/null 魂灵/null 魂牵梦系/null 魂牵梦绕/null 魂牵梦萦/null 魂飞/null 魂飞魄散/null 魂魄/null 魄力/null 魄散/null 魄散魂飞/null 魅力/null 魅力四射/null 魅影/null 魅惑/null 魅惑者/null 魆魆/null 魇寐/null 魍魅/null 魍魉/null 魍魉鬼怪/null 魏书/null 魏京生/null 魏国/null 魏巍/null 魏征/null 魏德迈/null 魏忠贤/null 魏收/null 魏文帝/null 魏晋/null 魏晋南北朝/null 魏格纳/null 魏玛/null 魏碑/null 魏紫姚黄/null 魏都/null 魏都区/null 魏阙/null 魑魅/null 魑魅魍魉/null 魔似/null 魔兽世界/null 魔力/null 魔咒/null 魔头/null 魔女/null 魔宫/null 魔宫传奇/null 魔幻/null 魔影/null 魔怔/null 魔怪/null 魔戒/null 魔手/null 魔掌/null 魔方/null 魔术/null 魔术师/null 魔术方块/null 魔术棒/null 魔术箱/null 魔术贴/null 魔杖/null 魔棒/null 魔法/null 魔法师/null 魔爪/null 魔王/null 魔王撒旦/null 魔界/null 魔盘/null 魔窟/null 魔符/null 魔羯座/null 魔芋/null 魔赛克/null 魔道/null 魔障/null 魔高一丈/null 魔鬼/null 魔鬼岛/null 魔鬼般/null 魟鱼/null 魣鱼/null 鮟鱇/null 鮨科/null 鱆鱼/null 鱼与熊掌/null 鱼与熊掌不可兼得/null 鱼丸/null 鱼儿/null 鱼具/null 鱼冻/null 鱼刺/null 鱼叉/null 鱼口/null 鱼台/null 鱼和炸土豆条儿/null 鱼唇/null 鱼嘴鞋/null 鱼场/null 鱼块/null 鱼塘/null 鱼夫/null 鱼头/null 鱼子/null 鱼子酱/null 鱼尾/null 鱼尾板/null 鱼尾状/null 鱼尾纹/null 鱼峰/null 鱼峰区/null 鱼惊鸟散/null 鱼惊鸟溃/null 鱼排/null 鱼杆/null 鱼条/null 鱼松/null 鱼死网破/null 鱼水/null 鱼水和谐/null 鱼水情/null 鱼汛/null 鱼汛期/null 鱼池/null 鱼池乡/null 鱼沉雁杳/null 鱼沉雁渺/null 鱼沉雁落/null 鱼油/null 鱼油精/null 鱼津/null 鱼游釜中/null 鱼游釜底/null 鱼溃鸟散/null 鱼漂/null 鱼烂土崩/null 鱼烂而亡/null 鱼片/null 鱼狗/null 鱼生火/null 鱼白/null 鱼目/null 鱼目混珠/null 鱼眼/null 鱼石脂/null 鱼种/null 鱼科/null 鱼秧/null 鱼秧子/null 鱼竿/null 鱼米之乡/null 鱼类/null 鱼类学/null 鱼粉/null 鱼粥/null 鱼缸/null 鱼网/null 鱼群/null 鱼翅/null 鱼翅汤/null 鱼翅瓜/null 鱼肉/null 鱼肉百姓/null 鱼肚/null 鱼肚白/null 鱼肝油/null 鱼胶/null 鱼腥/null 鱼腥草/null 鱼腩/null 鱼腹/null 鱼舱/null 鱼船/null 鱼花/null 鱼苗/null 鱼草/null 鱼藤/null 鱼虫/null 鱼虾/null 鱼质龙文/null 鱼贩/null 鱼贯/null 鱼贯而入/null 鱼贯而出/null 鱼跃/null 鱼跃鸢飞/null 鱼道/null 鱼钩/null 鱼钩儿/null 鱼雷/null 鱼雷快艇/null 鱼雷艇/null 鱼露/null 鱼饵/null 鱼饼/null 鱼香肉丝/null 鱼香茄子/null 鱼骨/null 鱼鱼雅雅/null 鱼鲜/null 鱼鳍/null 鱼鳔/null 鱼鳞/null 鱼鳞坑/null 鱼鳞松/null 鱼鹰/null 鱼鼓/null 鱼鼓道情/null 鱼龙/null 鱼龙变化/null 鱼龙混杂/null 鱼龙漫衍/null 鱿鱼/null 鲁人/null 鲁佛尔宫/null 鲁凯族/null 鲁史/null 鲁君/null 鲁国/null 鲁国人/null 鲁子敬/null 鲁宾/null 鲁尔/null 鲁尔河/null 鲁山/null 鲁德维格/null 鲁昂/null 鲁棒/null 鲁棒性/null 鲁殿灵光/null 鲁毕克方块/null 鲁汶/null 鲁滨孙/null 鲁特啤酒/null 鲁班/null 鲁班尺/null 鲁甸/null 鲁米那/null 鲁肃/null 鲁莽/null 鲁莽灭裂/null 鲁菜/null 鲁语/null 鲁迅/null 鲁迅研究/null 鲁道夫/null 鲁钝/null 鲁钝者/null 鲁鱼亥豕/null 鲁鱼帝虎/null 鲃鱼/null 鲅鱼/null 鲅鱼圈/null 鲅鱼圈区/null 鲈鱼/null 鲍勃・伍德沃德/null 鲍勃・马利/null 鲍威尔/null 鲍德里亚/null 鲍罗丁/null 鲍罗廷/null 鲍耶/null 鲍鱼/null 鲎虫/null 鲑鱼/null 鲗鱼涌/null 鲛人/null 鲛鱼/null 鲜为人知/null 鲜丽/null 鲜于/null 鲜亮/null 鲜克有终/null 鲜卑/null 鲜卑族/null 鲜味/null 鲜啤酒/null 鲜奶/null 鲜嫩/null 鲜明/null 鲜明个性/null 鲜有/null 鲜果/null 鲜橙多/null 鲜活/null 鲜活货物/null 鲜烈/null 鲜爽/null 鲜红/null 鲜红色/null 鲜绿/null 鲜绿色/null 鲜美/null 鲜肉/null 鲜艳/null 鲜艳夺目/null 鲜花/null 鲜菜/null 鲜蛋/null 鲜血/null 鲜血淋漓/null 鲜衣美食/null 鲜见/null 鲜货/null 鲜闻/null 鲜食/null 鲜鱼/null 鲞鱼/null 鲟鱼/null 鲢鱼/null 鲣鸟/null 鲤城/null 鲤城区/null 鲤鱼/null 鲤鱼旗/null 鲤鱼跳龙门/null 鲤鲸/null 鲥鱼/null 鲨皮/null 鲨鱼/null 鲨鱼皮/null 鲫鱼/null 鲭鱼/null 鲮鱼/null 鲮鲤/null 鲮鲤甲/null 鲮鲤科/null 鲰生/null 鲱鱼/null 鲲鹏/null 鲲鹏展翅/null 鲳鱼/null 鲶鱼/null 鲸吞/null 鲸吞虎噬/null 鲸油/null 鲸波/null 鲸目/null 鲸类/null 鲸背/null 鲸脂/null 鲸须/null 鲸骨/null 鲸鱼/null 鲸鱼座/null 鲸鲨/null 鲻鱼/null 鲽片/null 鲽鲛/null 鲽鹣/null 鳀鱼/null 鳃如朝露/null 鳃弓/null 鳃若崇寄/null 鳃若崇梦/null 鳃若朝露/null 鳃裂/null 鳄晰/null 鳄梨/null 鳄蜥/null 鳄鱼/null 鳄鱼夹/null 鳄鱼眼泪/null 鳄龙/null 鳆鱼/null 鳊鱼/null 鳌头/null 鳌头独占/null 鳌抃/null 鳌背负山/null 鳍状肢/null 鳍类/null 鳍足/null 鳍足目/null 鳍鲸/null 鳏夫/null 鳏寡/null 鳏寡孤独/null 鳏居/null 鳑鲏/null 鳔胶/null 鳕鱼/null 鳖甲/null 鳖类/null 鳖裙/null 鳖鱼/null 鳗草/null 鳗鱼/null 鳗鲡/null 鳙鱼/null 鳜鱼/null 鳝鱼/null 鳞伤/null 鳞次/null 鳞次栉比/null 鳞波/null 鳞点/null 鳞爪/null 鳞片/null 鳞状/null 鳞状细胞癌/null 鳞甲/null 鳞癣/null 鳞翅/null 鳞翅目/null 鳞翅类/null 鳞茎/null 鳟鱼/null 鳯凰/null 鵖鴔/null 鶗鴂/null 鶗鴃/null 鸂鶒/null 鸜鹆/null 鸟不生蛋/null 鸟人/null 鸟依/null 鸟儿/null 鸟兽/null 鸟兽散/null 鸟冠/null 鸟击/null 鸟叫/null 鸟叫声/null 鸟合之众/null 鸟名/null 鸟啼/null 鸟喙状/null 鸟嘌呤/null 鸟嘴/null 鸟嘴状/null 鸟声/null 鸟害/null 鸟尽/null 鸟尽弓藏/null 鸟尾/null 鸟屋/null 鸟巢/null 鸟弓/null 鸟托邦/null 鸟散鱼溃/null 鸟机/null 鸟松/null 鸟松乡/null 鸟枪/null 鸟枪换炮/null 鸟澡盆/null 鸟疫/null 鸟疫衣原体/null 鸟眼/null 鸟眼纹/null 鸟瞰/null 鸟瞰图/null 鸟禽/null 鸟种/null 鸟窝/null 鸟笼/null 鸟篆/null 鸟类/null 鸟类学/null 鸟粪/null 鸟粪层/null 鸟群/null 鸟羽/null 鸟翼/null 鸟肉/null 鸟胺酸/null 鸟脚下目/null 鸟脚亚目/null 鸟舍/null 鸟虫书/null 鸟蛋/null 鸟语/null 鸟语花香/null 鸟身/null 鸟道/null 鸟道羊肠/null 鸟铳/null 鸟雀/null 鸟食/null 鸟饵/null 鸟鸣/null 鸟龙类/null 鸠占鹊巢/null 鸠合/null 鸠山/null 鸠山由纪夫/null 鸠摩罗什/null 鸠江/null 鸠江区/null 鸡丁/null 鸡不及凤/null 鸡东/null 鸡丝/null 鸡公车/null 鸡内金/null 鸡冠/null 鸡冠区/null 鸡冠子/null 鸡冠石/null 鸡冠花/null 鸡冠菜/null 鸡厩/null 鸡口牛后/null 鸡叫/null 鸡同鸭讲/null 鸡场/null 鸡块/null 鸡头/null 鸡头牛后/null 鸡头米/null 鸡奸/null 鸡奸者/null 鸡婆/null 鸡子/null 鸡子儿/null 鸡尸牛从/null 鸡尾/null 鸡尾酒/null 鸡尾酒会/null 鸡巴/null 鸡年/null 鸡心/null 鸡排/null 鸡新城疫/null 鸡杂/null 鸡枞/null 鸡栏/null 鸡棚/null 鸡毛/null 鸡毛信/null 鸡毛帚/null 鸡毛店/null 鸡毛掸子/null 鸡毛蒜皮/null 鸡汤/null 鸡泽/null 鸡爪/null 鸡爪疯/null 鸡犬不宁/null 鸡犬不惊/null 鸡犬不留/null 鸡犬升天/null 鸡犬桑麻/null 鸡珍/null 鸡瘟/null 鸡皮/null 鸡皮疙瘩/null 鸡皮鹤发/null 鸡皮鹤法/null 鸡眼/null 鸡窝/null 鸡笼/null 鸡类/null 鸡粥/null 鸡精/null 鸡翅/null 鸡肉/null 鸡肋/null 鸡肠鼠肚/null 鸡肤鹤发/null 鸡胸/null 鸡脚/null 鸡腿/null 鸡腿菇/null 鸡舍/null 鸡菇/null 鸡虫得失/null 鸡虱/null 鸡蛋/null 鸡蛋壳儿/null 鸡蛋果/null 鸡蛋炒饭/null 鸡蛋里挑骨头/null 鸡血/null 鸡血石/null 鸡血藤/null 鸡西/null 鸡零狗碎/null 鸡霍乱/null 鸡飞/null 鸡飞狗走/null 鸡飞蛋打/null 鸡首/null 鸡骨支床/null 鸡鸡/null 鸡鸣/null 鸡鸣狗盗/null 鸡鸣而起/null 鸡鸭鱼肉/null 鸡鹜/null 鸡鹜争食/null 鸡鹜相争/null 鸡黄/null 鸢尾/null 鸢尾花/null 鸢飞鱼跃/null 鸣不平/null 鸣乎哀哉/null 鸣冤/null 鸣冤叫屈/null 鸣叫/null 鸣叫物/null 鸣咽/null 鸣响/null 鸣哭声/null 鸣唱/null 鸣声/null 鸣放/null 鸣曲/null 鸣枪/null 鸣炮/null 鸣禽/null 鸣禽类/null 鸣笛/null 鸣角鸮/null 鸣谢/null 鸣金/null 鸣金收兵/null 鸣金收军/null 鸣钟/null 鸣钟列鼎/null 鸣钟者/null 鸣锣/null 鸣锣开道/null 鸣镝/null 鸣鸟/null 鸣鼓/null 鸣鼓而攻/null 鸥类/null 鸦片/null 鸦片剂/null 鸦片战争/null 鸦胆子/null 鸦雀/null 鸦雀无声/null 鸦雀无闻/null 鸦飞雀乱/null 鸦飞鹊乱/null 鸦默雀静/null 鸨母/null 鸩毒/null 鸩羽/null 鸬鹚/null 鸭儿广梨/null 鸭儿梨/null 鸭嘴/null 鸭嘴兽/null 鸭嘴笔/null 鸭嘴龙/null 鸭子/null 鸭子儿/null 鸭子汤/null 鸭掌/null 鸭梨/null 鸭步鹅行/null 鸭毛/null 鸭绒/null 鸭绿江/null 鸭肉/null 鸭脚/null 鸭舌帽/null 鸭蛋/null 鸭蛋圆/null 鸭蛋青/null 鸭行鹅步/null 鸭饭/null 鸭黄/null 鸮叫/null 鸱吻/null 鸱枭/null 鸱甍/null 鸱目虎吻/null 鸲鹆/null 鸳俦凤侣/null 鸳绮/null 鸳鸯/null 鸳鸯戏水/null 鸳鸯蝴蝶/null 鸳鸯蝴蝶派/null 鸳鸯锅/null 鸴鸠笑鹏/null 鸵鸟/null 鸵鸟政策/null 鸷鸟/null 鸸鹋/null 鸻科/null 鸽子/null 鸽房/null 鸽派/null 鸽笼/null 鸽群/null 鸾凤/null 鸾凤和鸣/null 鸾翔凤翥/null 鸾翔凤集/null 鸾飘凤泊/null 鸾飘凤翥/null 鸿业/null 鸿书/null 鸿儒/null 鸿图/null 鸿图大计/null 鸿志/null 鸿恩/null 鸿案鹿车/null 鸿毛/null 鸿毛泰山/null 鸿毛泰岱/null 鸿沟/null 鸿海/null 鸿爪/null 鸿福/null 鸿稀鳞绝/null 鸿章/null 鸿篇巨制/null 鸿篇巨帙/null 鸿蒙/null 鸿运/null 鸿门宴/null 鸿雁/null 鸿鹄/null 鸿鹄之志/null 鹁鸪/null 鹁鸽/null 鹂鸟/null 鹃形目/null 鹄候回音/null 鹄形鸠面/null 鹄望/null 鹄的/null 鹄立/null 鹅卵石/null 鹅口疮/null 鹅喉羚/null 鹅掌/null 鹅掌楸/null 鹅掌风/null 鹅毛/null 鹅毛大雪/null 鹅笔/null 鹅绒/null 鹅群/null 鹅肉/null 鹅肝/null 鹅膏蕈/null 鹅膏蕈素/null 鹅莓/null 鹅蛋/null 鹅行鸭步/null 鹅观草/null 鹅銮鼻/null 鹅颈/null 鹅黄/null 鹈鹕/null 鹊巢鸠占/null 鹊桥/null 鹊起/null 鹌鹑/null 鹍弦/null 鹍鸡/null 鹍鸡曲/null 鹍鹏/null 鹏抟/null 鹏程/null 鹏程万里/null 鹏飞/null 鹏鸟/null 鹑衣/null 鹑衣百结/null 鹘突/null 鹙鹭/null 鹜舲/null 鹞子/null 鹞鲼/null 鹞鹰/null 鹡鸰/null 鹣鲽/null 鹣鹣/null 鹤佬人/null 鹤俸/null 鹤发童颜/null 鹤发鸡皮/null 鹤唳风声/null 鹤嘴镐/null 鹤城/null 鹤城区/null 鹤壁/null 鹤山/null 鹤山区/null 鹤岗/null 鹤峰/null 鹤庆/null 鹤立/null 鹤立鸡群/null 鹤算龟龄/null 鹤膝风/null 鹤长凫短/null 鹦哥/null 鹦哥绿/null 鹦鹉/null 鹦鹉学舌/null 鹦鹉热/null 鹦鹉病/null 鹦鹉螺/null 鹧鸪/null 鹧鸪菜/null 鹩哥/null 鹪鹩/null 鹫科/null 鹫鸟/null 鹬蚌相争/null 鹬蚌相争渔人获利/null 鹬蚌相持渔人得利/null 鹬蚌相持渔人获利/null 鹬鸵/null 鹭类/null 鹭鸶/null 鹰击长空/null 鹰厦铁路/null 鹰嘴/null 鹰嘴豆/null 鹰嘴豆面粉/null 鹰头狮/null 鹰巢/null 鹰手营子矿/null 鹰手营子矿区/null 鹰扬虎视/null 鹰星云/null 鹰架栈台/null 鹰洋/null 鹰派/null 鹰潭/null 鹰爪/null 鹰爪翻子拳/null 鹰犬/null 鹰状星云/null 鹰瞵鹗视/null 鹰类/null 鹰般/null 鹰钩/null 鹰钩鼻/null 鹰鼻鹞眼/null 鹿人/null 鹿儿/null 鹿儿岛/null 鹿城/null 鹿城区/null 鹿寨/null 鹿寨县/null 鹿死/null 鹿死不择音/null 鹿死谁手/null 鹿泉/null 鹿港/null 鹿港镇/null 鹿特丹/null 鹿皮/null 鹿皮靴/null 鹿砦/null 鹿肉/null 鹿脯/null 鹿苑寺/null 鹿茸/null 鹿草/null 鹿草乡/null 鹿裘不完/null 鹿角/null 鹿角菜/null 鹿谷/null 鹿谷乡/null 鹿豹座/null 鹿邑/null 鹿野/null 鹿野乡/null 麂子/null 麂皮/null 麇集/null 麋沸蚁动/null 麋沸蚁聚/null 麋至沓来/null 麋鹿/null 麒麟/null 麒麟区/null 麒麟座/null 麒麟菜/null 麝牛/null 麝香/null 麝香石竹/null 麝香草/null 麝鼠/null 麟凤龟龙/null 麟子凤雏/null 麟洛/null 麟洛乡/null 麟游/null 麟经/null 麟肝凤髓/null 麟角凤嘴/null 麟角凤毛/null 麟角凤觜/null 麟角凤距/null 麟趾呈祥/null 麦乳精/null 麦克/null 麦克德莫特/null 麦克斯韦/null 麦克白/null 麦克白夫人/null 麦克米兰/null 麦克维/null 麦克阿瑟/null 麦克风/null 麦冬/null 麦凯恩/null 麦加/null 麦卡锡主义/null 麦口期/null 麦可/null 麦司卡林/null 麦哲伦/null 麦地/null 麦地那/null 麦子/null 麦寮/null 麦寮乡/null 麦尔维尔/null 麦当劳/null 麦当劳叔叔/null 麦当娜/null 麦德林/null 麦德蒙/null 麦德龙/null 麦收/null 麦晶/null 麦曲/null 麦杆/null 麦枷/null 麦浪/null 麦片/null 麦片汤/null 麦片粥/null 麦牙醋/null 麦田/null 麦田怪圈/null 麦盖提/null 麦秆/null 麦秋/null 麦科里/null 麦积/null 麦积区/null 麦积山石窟/null 麦秸/null 麦稃/null 麦穗/null 麦穗两岐/null 麦类锈病/null 麦类黑穗病/null 麦粒/null 麦粒肿/null 麦精/null 麦纳麦/null 麦肯锡/null 麦胚/null 麦芒/null 麦芽/null 麦芽汁/null 麦芽糖/null 麦芽糖醇/null 麦苗/null 麦茬/null 麦草/null 麦蚜/null 麦蛾/null 麦蜘蛛/null 麦角/null 麦迪逊/null 麦迪逊广场花园/null 麦迪逊花园广场/null 麦道/null 麦酒/null 麦金塔/null 麦金塔电脑/null 麦门冬/null 麦阿密/null 麦霸/null 麦香堡/null 麦麸/null 麸子/null 麸皮/null 麸皮面包/null 麸质/null 麸质状/null 麻仁/null 麻仁丸/null 麻俐/null 麻刀/null 麻利/null 麻制/null 麻力/null 麻包/null 麻嗖嗖/null 麻城/null 麻婆/null 麻婆豆腐/null 麻子/null 麻将/null 麻将牌/null 麻山/null 麻山区/null 麻州/null 麻布/null 麻捣/null 麻木/null 麻木不仁/null 麻木状态/null 麻栎/null 麻栗坡/null 麻江/null 麻油/null 麻渣/null 麻点/null 麻烦/null 麻烦事/null 麻瓜/null 麻生/null 麻生・太郎/null 麻疯/null 麻疯病/null 麻疹/null 麻痹/null 麻痹不仁/null 麻痹大意/null 麻痹思想/null 麻瘢/null 麻癫/null 麻省/null 麻省理工学院/null 麻秸/null 麻章/null 麻章区/null 麻类/null 麻糖/null 麻糬/null 麻絮/null 麻纱/null 麻纺/null 麻线/null 麻织/null 麻织品/null 麻经儿/null 麻绳/null 麻绳菜/null 麻脸/null 麻色/null 麻花/null 麻花辫/null 麻茎/null 麻药/null 麻薯/null 麻蝇/null 麻衣/null 麻袋/null 麻袋布/null 麻豆/null 麻豆腐/null 麻豆镇/null 麻蹄声/null 麻辣/null 麻酥/null 麻酱/null 麻醉/null 麻醉剂/null 麻醉品/null 麻醉学/null 麻醉学者/null 麻醉师/null 麻醉性/null 麻醉状态/null 麻醉药/null 麻醉药品/null 麻阳/null 麻阳县/null 麻雀/null 麻雀战/null 麻雀虽小/null 麻雷子/null 麻风/null 麻风病/null 麻鸭/null 麻麻/null 麻麻亮/null 麻麻黑/null 麻黄/null 麻黄碱/null 麻黄素/null 麾下/null 黄不溜秋/null 黄了/null 黄以静/null 黄体/null 黄体期/null 黄体酮/null 黄信/null 黄光裕/null 黄克强/null 黄兴/null 黄冈/null 黄册/null 黄刺玫/null 黄包车/null 黄南/null 黄南州/null 黄南藏族自治州/null 黄卷青灯/null 黄历/null 黄原胶/null 黄原酸盐/null 黄发鲐背/null 黄口孺子/null 黄口小儿/null 黄叶/null 黄嘌呤/null 黄土/null 黄土不露天/null 黄土地/null 黄土地貌/null 黄土高原/null 黄埃/null 黄埔/null 黄埔军校/null 黄埔区/null 黄埔同学会/null 黄埔条约/null 黄埔江/null 黄埔系/null 黄壤/null 黄大仙/null 黄天荡之战/null 黄姜/null 黄守瓜/null 黄宗羲/null 黄宾虹/null 黄富平/null 黄小疮/null 黄屋/null 黄山区/null 黄岛/null 黄岛区/null 黄岩/null 黄岩区/null 黄岩岛/null 黄州/null 黄州区/null 黄巢/null 黄巢之乱/null 黄巢起义/null 黄巾/null 黄巾之乱/null 黄巾军/null 黄巾民变/null 黄巾起义/null 黄帝/null 黄帝八十一难经/null 黄帝内经/null 黄帝宅经/null 黄帝族/null 黄平/null 黄庭坚/null 黄庭经/null 黄建南/null 黄忠/null 黄教/null 黄斑/null 黄旗/null 黄明胶/null 黄昏/null 黄昏恋/null 黄昏时/null 黄曲霉/null 黄曲霉毒素/null 黄杨/null 黄杨厄闰/null 黄极/null 黄果树大瀑布/null 黄果树瀑布/null 黄枯/null 黄柏/null 黄栌/null 黄梁一梦/null 黄梁梦/null 黄梅/null 黄梅季/null 黄梅戏/null 黄梅雨/null 黄榜/null 黄檀/null 黄檗/null 黄毛/null 黄毛丫头/null 黄水/null 黄水仙/null 黄水晶/null 黄江/null 黄汤/null 黄沙/null 黄河/null 黄河大合唱/null 黄河故道/null 黄河流域/null 黄油/null 黄泉/null 黄泥/null 黄流/null 黄流镇/null 黄浦/null 黄浦江/null 黄海/null 黄海北道/null 黄海南道/null 黄海道/null 黄淮/null 黄滔/null 黄漂/null 黄澄澄/null 黄灰色/null 黄灿灿/null 黄炎贵胄/null 黄热病/null 黄热病毒/null 黄熟/null 黄父鬼/null 黄片/null 黄牌/null 黄牌警告/null 黄牛/null 黄牛票/null 黄玉/null 黄瓜/null 黄疸/null 黄疸病/null 黄病/null 黄癣/null 黄白/null 黄白交点/null 黄的/null 黄皮/null 黄皮书/null 黄石/null 黄石公/null 黄石公三略/null 黄石港/null 黄石港区/null 黄碘/null 黄磷/null 黄祸/null 黄秋葵/null 黄种/null 黄种人/null 黄童白叟/null 黄童皓首/null 黄简/null 黄米/null 黄粱/null 黄粱梦/null 黄粱美梦/null 黄精/null 黄糖/null 黄纸/null 黄绵土/null 黄绿/null 黄绿色/null 黄羊/null 黄耆/null 黄胆/null 黄胶/null 黄脸/null 黄脸婆/null 黄色/null 黄色书刊/null 黄色人种/null 黄色国际/null 黄色工会/null 黄色文学/null 黄色炸药/null 黄色音乐/null 黄芩/null 黄芪/null 黄花/null 黄花地丁/null 黄花女/null 黄花女儿/null 黄花姑娘/null 黄花岗/null 黄花岗七十二烈士/null 黄花岗起义/null 黄花幼女/null 黄花晚节/null 黄花梨木/null 黄花苜蓿/null 黄花菜/null 黄花闺女/null 黄花鱼/null 黄莺/null 黄菊/null 黄菜/null 黄萎病/null 黄葛树/null 黄蜂/null 黄蜡/null 黄血盐/null 黄表纸/null 黄袍/null 黄袍加体/null 黄袍加身/null 黄褐/null 黄褐色/null 黄豆/null 黄赤交角/null 黄赤色/null 黄连/null 黄连木/null 黄连素/null 黄道/null 黄道十二宫/null 黄道吉日/null 黄道带/null 黄遵宪/null 黄酒/null 黄酮/null 黄酱/null 黄酶/null 黄酸盐/null 黄金/null 黄金价格/null 黄金储备/null 黄金分割/null 黄金周/null 黄金季节/null 黄金宝/null 黄金市场/null 黄金时代/null 黄金时段/null 黄金树/null 黄金档/null 黄金辉/null 黄钟大吕/null 黄钟毁弃/null 黄钟毁弃瓦釜雷鸣/null 黄钺/null 黄铁矿/null 黄铜/null 黄铜矿/null 黄锈病/null 黄长烨/null 黄陂/null 黄陂区/null 黄陵/null 黄雀/null 黄雀伺蝉/null 黄雀在后/null 黄雀衔环/null 黄雏/null 黄页/null 黄颔蛇/null 黄飞鸿/null 黄饼/null 黄骠马/null 黄骨髓/null 黄鱼/null 黄鱼车/null 黄鳝/null 黄鸟/null 黄鸭/null 黄鹂/null 黄鹏/null 黄鹤/null 黄鹤楼/null 黄麻/null 黄麻起义/null 黄黄/null 黄鼠/null 黄鼠狼/null 黄鼠狼给鸡拜年/null 黄鼬/null 黄龙/null 黍子/null 黍离麦秀/null 黍粉/null 黍粥/null 黎元/null 黎城/null 黎川/null 黎巴嫩/null 黎平/null 黎庶/null 黎明/null 黎明前/null 黎明前的黑暗/null 黎明时分/null 黎曼/null 黎曼几何/null 黎曼几何学/null 黎曼曲面/null 黎曼空间/null 黎曼罗赫定理/null 黎曼面/null 黎民/null 黎民百姓/null 黎黑/null 黏住/null 黏儿/null 黏合/null 黏合剂/null 黏土/null 黏土动画/null 黏度/null 黏性/null 黏涎/null 黏涎子/null 黏液/null 黏液性水肿/null 黏痰/null 黏着/null 黏着力/null 黏着语/null 黏稠/null 黏稠度/null 黏米/null 黏糊/null 黏糊糊/null 黏结/null 黏胶/null 黏膜/null 黏菌/null 黏著物/null 黏虫/null 黏贴/null 黏附/null 黏附力/null 黐线/null 黑下/null 黑不溜秋/null 黑乎乎/null 黑了/null 黑云/null 黑云压城城欲摧/null 黑云母/null 黑亮/null 黑人/null 黑人似/null 黑人住/null 黑体/null 黑体字/null 黑体辐射/null 黑信/null 黑光/null 黑光灯/null 黑内障/null 黑冠长臂猿/null 黑加仑/null 黑匣子/null 黑压压/null 黑发/null 黑口/null 黑叶猴/null 黑名单/null 黑呢/null 黑呼呼/null 黑咕隆咚/null 黑嘴/null 黑土/null 黑地/null 黑塞哥维那/null 黑墨水/null 黑夜/null 黑天/null 黑天半夜/null 黑头/null 黑奴/null 黑奴吁天录/null 黑子/null 黑字/null 黑客/null 黑客帝国/null 黑客文/null 黑家鼠/null 黑尿症/null 黑屏/null 黑山/null 黑山军/null 黑市/null 黑布/null 黑帖/null 黑带/null 黑帮/null 黑幕/null 黑店/null 黑影/null 黑心/null 黑忽忽/null 黑户/null 黑手/null 黑手党/null 黑斑/null 黑斑病/null 黑斑蚊/null 黑旋风/null 黑旗军/null 黑时/null 黑晶/null 黑暗/null 黑暗时代/null 黑暗面/null 黑更半夜/null 黑木耳/null 黑松/null 黑板/null 黑板报/null 黑板擦/null 黑板架/null 黑枕黄鹂/null 黑枣/null 黑枪/null 黑枯茗/null 黑格/null 黑格尔/null 黑格尔辩证法/null 黑桃/null 黑框/null 黑桦/null 黑森林/null 黑森林蛋糕/null 黑森森/null 黑死病/null 黑水/null 黑水城/null 黑汗王朝/null 黑沉沉/null 黑河/null 黑河地区/null 黑油油/null 黑泽明/null 黑洞/null 黑洞洞/null 黑海/null 黑海海峡/null 黑漆/null 黑漆一团/null 黑漆漆/null 黑漆皮灯/null 黑潮/null 黑火/null 黑灯下火/null 黑灯瞎火/null 黑灰/null 黑炭/null 黑点/null 黑点病/null 黑烟/null 黑热病/null 黑煤/null 黑煤玉/null 黑熊/null 黑狗/null 黑猩猩/null 黑猪/null 黑疸/null 黑痣/null 黑瘦/null 黑白/null 黑白不分/null 黑白分明/null 黑白无常/null 黑白混淆/null 黑白片/null 黑白片儿/null 黑白电视/null 黑白电视机/null 黑白胶片/null 黑白菜/null 黑的/null 黑皮肤/null 黑盒/null 黑盒子/null 黑眉蝮蛇/null 黑眼圈/null 黑眼珠/null 黑着/null 黑着脸/null 黑瞎子/null 黑瞎子岛/null 黑矮星/null 黑石/null 黑砖窑/null 黑社会/null 黑种/null 黑种人/null 黑穗病/null 黑窝/null 黑竹/null 黑箍/null 黑管/null 黑箱/null 黑箱子/null 黑籍冤魂/null 黑粉病/null 黑糊糊/null 黑糖/null 黑素/null 黑素瘤/null 黑索今/null 黑纱/null 黑纹/null 黑线/null 黑肺病/null 黑背/null 黑胡椒/null 黑胶绸/null 黑脸色/null 黑色/null 黑色恐怖/null 黑色火药/null 黑色素/null 黑色金属/null 黑芝麻/null 黑芝麻糊/null 黑花/null 黑茶藨子/null 黑莓/null 黑莓子/null 黑落德/null 黑藻/null 黑虎拳/null 黑衣/null 黑角/null 黑话/null 黑豆/null 黑豹/null 黑貂/null 黑贝/null 黑货/null 黑路/null 黑车/null 黑道/null 黑道家族/null 黑醋/null 黑醋栗/null 黑金/null 黑钙土/null 黑钨矿/null 黑钱/null 黑铁皮/null 黑锅/null 黑键/null 黑陶/null 黑陶文化/null 黑霉/null 黑非洲/null 黑面/null 黑面包/null 黑领结/null 黑颈鹤/null 黑颜料/null 黑马/null 黑骨胧东/null 黑鬼/null 黑魆魆/null 黑魖魖/null 黑鱼/null 黑鲩/null 黑鹰/null 黑麦/null 黑黑/null 黑黝黝/null 黑黢黢/null 黑鼠/null 黑龌/null 黑龙江河/null 黔东南/null 黔东南州/null 黔剧/null 黔南/null 黔南州/null 黔江/null 黔西/null 黔西南/null 黔西南州/null 黔阳/null 黔阳县/null 黔首/null 黔驴/null 黔驴之技/null 黔驴技穷/null 默不作声/null 默书/null 默从/null 默克尔/null 默写/null 默剧/null 默叹/null 默哀/null 默坐/null 默多克/null 默契/null 默字/null 默志/null 默念/null 默思/null 默想/null 默拉皮/null 默求/null 默然/null 默片/null 默示/null 默祝/null 默祷/null 默算/null 默罕默德/null 默背/null 默西亚/null 默西河/null 默视/null 默认/null 默认值/null 默记/null 默许/null 默诵/null 默诵佛号/null 默读/null 默问/null 默默/null 默默无言/null 默默无语/null 默默无闻/null 黛安娜/null 黛绿/null 黜免/null 黜陟/null 黜陟幽明/null 黝暗/null 黝黑/null 黝黝/null 黢黑/null 黩武/null 黩武穷兵/null 黯淡/null 黯然/null 黯然失色/null 黯然销魂/null 黾勉/null 鼅鼄/null 鼋鱼/null 鼋鸣鳖应/null 鼎力/null 鼎力支助/null 鼎力相助/null 鼎助/null 鼎城/null 鼎城区/null 鼎峙/null 鼎新/null 鼎新革故/null 鼎族/null 鼎沸/null 鼎湖/null 鼎湖区/null 鼎盛/null 鼎盛时期/null 鼎盛期/null 鼎立/null 鼎足/null 鼎足三分/null 鼎足之势/null 鼎铛玉石/null 鼎镬刀锯/null 鼎革/null 鼎食/null 鼎食钟鸣/null 鼎鼎/null 鼎鼎大名/null 鼎鼐调和/null 鼓乐/null 鼓书/null 鼓作/null 鼓儿词/null 鼓出/null 鼓动/null 鼓动者/null 鼓励/null 鼓劲/null 鼓号/null 鼓吹/null 鼓吹者/null 鼓唇摇舌/null 鼓噪/null 鼓声/null 鼓子词/null 鼓室/null 鼓山/null 鼓山区/null 鼓师/null 鼓手/null 鼓捣/null 鼓掌/null 鼓板/null 鼓楼/null 鼓楼区/null 鼓槌/null 鼓气/null 鼓浪屿/null 鼓点/null 鼓点子/null 鼓盆/null 鼓盆之戚/null 鼓眼/null 鼓眼睛/null 鼓箧/null 鼓翼/null 鼓胀/null 鼓腹含哺/null 鼓膜/null 鼓舌/null 鼓舌摇唇/null 鼓舞/null 鼓著/null 鼓角/null 鼓起/null 鼓起勇气/null 鼓足/null 鼓足勇气/null 鼓足干劲/null 鼓里/null 鼓铸/null 鼓面/null 鼓风/null 鼓风口/null 鼓风机/null 鼓风炉/null 鼓鼓/null 鼓鼓囊囊/null 鼙鼓/null 鼠型斑疹伤寒/null 鼠多/null 鼠害/null 鼠尾草/null 鼠年/null 鼠得克/null 鼠曲草/null 鼠标/null 鼠标器/null 鼠标垫/null 鼠洞/null 鼠海豚/null 鼠牙雀角/null 鼠疫/null 鼠疫杆菌/null 鼠疫菌苗/null 鼠疮/null 鼠目/null 鼠目寸光/null 鼠目獐头/null 鼠穴/null 鼠窃/null 鼠窃狗偷/null 鼠窃狗盗/null 鼠窜/null 鼠窝/null 鼠类/null 鼠肚鸡肠/null 鼠肝虫臂/null 鼠胆/null 鼠胶/null 鼠腹鸡肠/null 鼠药/null 鼠蚤型斑疹伤寒/null 鼠蜘/null 鼠蹊/null 鼠辈/null 鼢鼠/null 鼩鼱/null 鼬属/null 鼬獾/null 鼬科/null 鼬鲨/null 鼬鼠/null 鼯鼠/null 鼷鼠/null 鼹鼠/null 鼹鼠皮/null 鼻中/null 鼻中隔/null 鼻儿/null 鼻出血/null 鼻化元音/null 鼻口/null 鼻口部分/null 鼻后/null 鼻咽/null 鼻咽炎/null 鼻咽癌/null 鼻塞/null 鼻声/null 鼻头/null 鼻子/null 鼻子眼儿/null 鼻孔/null 鼻尖/null 鼻屎/null 鼻息/null 鼻息肉/null 鼻旁窦/null 鼻梁/null 鼻梁儿/null 鼻毛/null 鼻水/null 鼻洼子/null 鼻涕/null 鼻涕虫/null 鼻渊/null 鼻炎/null 鼻烟/null 鼻烟壶/null 鼻烟盒/null 鼻牛儿/null 鼻甲/null 鼻甲骨/null 鼻疽/null 鼻病毒/null 鼻祖/null 鼻科/null 鼻科学/null 鼻窦/null 鼻窦炎/null 鼻管/null 鼻箫/null 鼻翅儿/null 鼻翼/null 鼻脸/null 鼻腔/null 鼻血/null 鼻衄/null 鼻观/null 鼻部/null 鼻酸/null 鼻针疗法/null 鼻青眼肿/null 鼻青脸肿/null 鼻音/null 鼻韵母/null 鼻饲/null 鼻饲法/null 鼻骨/null 鼻黏膜/null 鼾声/null 鼾声如雷/null 鼾睡/null 鼾鼾/null 齌怒/null 齐一/null 齐东野语/null 齐书/null 齐人攫金/null 齐全/null 齐内丁・齐达内/null 齐列/null 齐刷刷/null 齐力/null 齐动/null 齐发/null 齐名/null 齐名并价/null 齐唱/null 齐国/null 齐墩果/null 齐声/null 齐声叫好/null 齐备/null 齐大非偶/null 齐大非耦/null 齐天大圣/null 齐天洪福/null 齐头/null 齐头并进/null 齐奏/null 齐宣王/null 齐家文化/null 齐家治国/null 齐射/null 齐州九点/null 齐平/null 齐心/null 齐心一力/null 齐心协力/null 齐心合力/null 齐心同力/null 齐心并力/null 齐心戮力/null 齐心涤虑/null 齐性/null 齐截/null 齐手/null 齐打夯儿地/null 齐抓共管/null 齐放/null 齐整/null 齐整如一/null 齐柏林/null 齐柏林飞艇/null 齐根/null 齐桓公/null 齐楚/null 齐次/null 齐步/null 齐步走/null 齐武成/null 齐民要术/null 齐河/null 齐湣王/null 齐炸/null 齐烟九点/null 齐牙/null 齐白石/null 齐眉/null 齐眉举案/null 齐眉穗儿/null 齐纨鲁缟/null 齐绑/null 齐美/null 齐美尔瓦尔得会议/null 齐聚一堂/null 齐肩/null 齐腰深/null 齐腰身/null 齐膝/null 齐观/null 齐趋并驾/null 齐足并驰/null 齐足并驱/null 齐足跳/null 齐集/null 齐驱并驾/null 齐驱并骤/null 齐高/null 齐鲁/null 齐鸣/null 齐齐/null 齐齐哈尔/null 齐齿/null 齐齿呼/null 齑粉/null 齧咬/null 齱齵/null 齿亡舌存/null 齿冠/null 齿冷/null 齿列/null 齿印/null 齿危发秀/null 齿及/null 齿唇音/null 齿如含贝/null 齿如齐贝/null 齿孔/null 齿嵴/null 齿式/null 齿录/null 齿形/null 齿敝舌存/null 齿数/null 齿更/null 齿条/null 齿条千斤顶/null 齿条齿轮/null 齿板/null 齿根/null 齿槽/null 齿牙为猾/null 齿牙为祸/null 齿牙余论/null 齿状/null 齿状物/null 齿痕/null 齿科学/null 齿类/null 齿腔/null 齿若编贝/null 齿蠹/null 齿豁头童/null 齿质/null 齿轮/null 齿轮传动/null 齿轮加工机床/null 齿轮箱/null 齿轴/null 齿边/null 齿音/null 齿髓/null 齿鲸/null 齿鸟类/null 齿龈/null 齿龈炎/null 齿龈音/null 齿龋/null 齿龋炎/null 龃龉/null 龃龉不合/null 龄期/null 龅牙/null 龆年稚齿/null 龇牙/null 龇牙咧嘴/null 龈擦音/null 龈炎/null 龈病/null 龈脓肿/null 龈腭音/null 龈辅音/null 龈音/null 龈颚音/null 龋洞/null 龋蠹/null 龋齿/null 龋齿性/null 龌浊/null 龌龊/null 龙争虎斗/null 龙井/null 龙井乡/null 龙井茶/null 龙亭/null 龙亭区/null 龙似/null 龙体/null 龙公/null 龙凤/null 龙凤区/null 龙凤胎/null 龙利/null 龙利叶/null 龙华/null 龙华区/null 龙南/null 龙卷/null 龙卷风/null 龙口/null 龙口夺食/null 龙君/null 龙吟/null 龙吟虎啸/null 龙城/null 龙城区/null 龙头/null 龙头企业/null 龙头老大/null 龙头蛇尾/null 龙套/null 龙女/null 龙子湖/null 龙子湖区/null 龙安/null 龙安区/null 龙安寺/null 龙宫/null 龙宫贝/null 龙山/null 龙山区/null 龙山文化/null 龙岗/null 龙岗区/null 龙岩/null 龙岩地区/null 龙崎/null 龙崎乡/null 龙嵩/null 龙嵩叶/null 龙川/null 龙州/null 龙巾/null 龙年/null 龙床/null 龙庭/null 龙形拳/null 龙战虎争/null 龙文/null 龙文区/null 龙树/null 龙树菩萨/null 龙江/null 龙沙/null 龙沙区/null 龙泉/null 龙泉窑/null 龙泉驿/null 龙洞/null 龙海/null 龙涎香/null 龙港/null 龙港区/null 龙游/null 龙湖/null 龙湖区/null 龙湾/null 龙湾区/null 龙潭/null 龙潭乡/null 龙潭区/null 龙潭沟/null 龙潭虎穴/null 龙潭虎窟/null 龙灯/null 龙爪槐/null 龙牙草/null 龙猫/null 龙王/null 龙生九子/null 龙的传人/null 龙盘虎踞/null 龙眉凤目/null 龙眉皓发/null 龙眼/null 龙睛鱼/null 龙章凤姿/null 龙羊/null 龙羊峡/null 龙肝凤胆/null 龙肝凤髓/null 龙肝豹胎/null 龙胆/null 龙胆根/null 龙胆泻肝丸/null 龙胆紫/null 龙胜县/null 龙脉/null 龙脑/null 龙脑树/null 龙腾虎跃/null 龙舌/null 龙舌兰/null 龙舌草/null 龙舞/null 龙舟/null 龙船/null 龙芯/null 龙芽草/null 龙葵/null 龙蒿/null 龙虎/null 龙虎斗/null 龙虱/null 龙虾/null 龙蛇/null 龙蛇混杂/null 龙蛇飞动/null 龙蟠/null 龙蟠凤逸/null 龙蟠虎踞/null 龙血树/null 龙行虎步/null 龙袍/null 龙豆/null 龙趸/null 龙跃凤鸣/null 龙车/null 龙里/null 龙钟/null 龙门/null 龙门刨/null 龙门吊/null 龙门山/null 龙门山断层/null 龙门断层/null 龙门架/null 龙门石窟/null 龙阳/null 龙阳君/null 龙陵/null 龙须草/null 龙须菜/null 龙颜/null 龙飞/null 龙飞凤舞/null 龙首/null 龙马/null 龙马潭区/null 龙马精神/null 龙驹/null 龙驹凤雏/null 龙骧虎步/null 龙骧虎视/null 龙骨/null 龙骨台/null 龙骨车/null 龚古尔/null 龚行天罚/null 龛影/null 龛着/null 龟儿子/null 龟公/null 龟兹/null 龟壳/null 龟壳花/null 龟头/null 龟尾市/null 龟山/null 龟山乡/null 龟年鹤寿/null 龟文鸟迹/null 龟板/null 龟毛/null 龟毛兔角/null 龟王/null 龟甲/null 龟甲宝螺/null 龟甲状/null 龟类/null 龟缩/null 龟背竹/null 龟船/null 龟裂/null 龟足/null 龟趺/null 龟速/null 龟鉴/null 龟鳖/null 龟龄鹤算/null 龟龙麟凤/null 龟龟琐琐/null 邔侯国/null 邟乡/null 兀突骨/null 兀自/null 兀兀穷年/null 兀鹫/null 兀立/null 兀良哈/null 兀颜光/null 兀鹰/null 兀鲁思/null 逿倒/null 鄃侯国/null 鄃县/null 鄅国/null 鄅国故都遗址/null 邥垂/null 鄛乡/null 醂柿/null 鄡单/null 鄡县/null 鄡阳/null 墅质/null RediSearch-1.2.2/src/dep/cndict/lex/lex-nation.lex000066400000000000000000000013561364126773500217330ustar00rootroot00000000000000东非/null 中华/null 中华/null 中华人民共和国/null 中华民国/null 中国/null 中國/null 中非/null 乌克兰/null 也门/null 以色列/null 伊拉克/null 伊朗/null 俄罗斯/null 分类/null 加拿大/null 南非/null 古巴/null 台湾/null 埃及/null 塞尔维亚/null 墨西哥/null 威尔士/null 尼日利亚/null 巴比伦/null 希腊/null 德国/null 德意志/null 意大利/null 捷克/null 日本/null 朝鲜/null 比利时/null 法兰西/null 法国/null 波兰/null 波黑/null 瑞典/null 瑞士/null 白俄罗斯/null 缅甸/null 美利坚/null 美利坚合众国/null 美国/null 老挝/null 苏格兰/null 苏联/null 英国/null 英格兰/null 葡萄牙/null 蒙古/null 西班牙/null 越南/null 韩国/null RediSearch-1.2.2/src/dep/cndict/lex/lex-net.lex000066400000000000000000000006051364126773500212250ustar00rootroot00000000000000油条哥/null 活雷锋/null 夕阳红/null 帮扶村/null 后援会/null 复炸油/null 献血哥/null 放心姐/null 啃老族/null 特训班/null 平头男/null 爆头哥/null 楼主/null 有两把刷子/null 非典/null 微信/null 微博/null 吊丝/null 高富帅/null 矮穷挫/null 白富美/null 狮子的魂/null 仓老师/仓井空 郭德纲/null 单田芳/null 李笑笑/null RediSearch-1.2.2/src/dep/cndict/lex/lex-org.lex000066400000000000000000000004101364126773500212200ustar00rootroot00000000000000上海合作组织/null 世卫/null 世界卫生组织/null 世界银行/null 东盟/null 亚太经合组织/null 人权理事会/null 六方会谈/null 北约/null 哈马斯/null 安全理事会/null 安理会/null 欧佩克/null 红十字会/null 联合国/null RediSearch-1.2.2/src/dep/cndict/lex/lex-sname.lex000066400000000000000000000015141364126773500215420ustar00rootroot00000000000000#中文单名词库 敏 伟 勇 军 斌 静 丽 涛 芳 杰 萍 强 俊 明 燕 磊 玲 华 平 鹏 健 波 红 丹 辉 超 艳 莉 刚 娟 峰 婷 亮 洁 颖 琳 英 慧 飞 霞 浩 凯 宇 毅 林 佳 云 莹 娜 晶 洋 文 鑫 欣 琴 宁 琼 兵 青 琦 翔 彬 锋 阳 璐 旭 蕾 剑 虹 蓉 建 倩 梅 宏 威 博 君 力 龙 晨 薇 雪 琪 欢 荣 江 炜 成 庆 冰 东 帆 雷 楠 锐 进 海 凡 巍 维 迪 媛 玮 杨 群 瑛 悦 春 瑶 婧 兰 茜 松 爽 立 瑜 睿 晖 聪 帅 瑾 骏 雯 晓 昊 勤 新 瑞 岩 星 忠 志 怡 坤 康 航 利 畅 坚 雄 智 萌 哲 岚 洪 捷 珊 恒 靖 清 扬 昕 乐 武 玉 诚 菲 锦 凤 珍 晔 妍 璇 胜 菁 科 芬 露 越 彤 曦 义 良 鸣 芸 方 月 铭 光 震 冬 源 政 虎 莎 彪 蓓 钢 凌 奇 卫 彦 烨 可 黎 川 淼 惠 祥 然 三 逗 高 潇 正 硕 RediSearch-1.2.2/src/dep/cndict/lex/lex-stopword.lex000066400000000000000000000110651364126773500223220ustar00rootroot00000000000000#en-punctuation ! " # $ % & ' ( ) * + , - . / #0 #1 #2 #3 #4 #5 #6 #7 #8 #9 : ; < = > ? @ [ \ ] ^ _ ` #a #b #c #d #e #f #g #h #i #j #k #l #m #n #o #p #q #r #s #t #u #v #w #x #y #z { | } ~ ! #fullwidth ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ ⦅ ⦆ 。 「 」 、 ・ #cn-punctuation 、 。 〃 〄 々 〆 〇 〈 〉 《 》 「 」 『 』 【 】 〒 〓 〔 〕 〖 〗 〘 〙 〚 〛 〜 〝 〞 〟 #中文 的 吗 不 我 们 起 就 最 在 人 有 是 为 以 于 上 他 而 后 之 来 由 及 了 下 可 到 这 与 也 因 此 但 并 个 其 已 无 小 今 去 再 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 从 到 得 打 凡 儿 尔 该 各 给 跟 和 何 还 即 几 既 看 据 距 靠 啦 了 另 么 每 们 嘛 拿 哪 那 您 凭 且 却 让 仍 啥 如 若 使 谁 虽 随 同 所 她 哇 嗡 往 哪 些 向 沿 哟 用 于 咱 则 怎 曾 至 致 着 诸 自 啊 #英文 to can could dare do did does may might would should must will ought shall need is a am are about according after against all almost also although among an and another any anything approximately as asked at back because before besides between both but by call called currently despite did do dr during each earlier eight even eventually every everything five for four from he her here his how however i if in indeed instead it its just last like major many may maybe meanwhile more moreover most mr mrs ms much my neither net never nevertheless nine no none not nothing now of on once one only or other our over partly perhaps prior regarding separately seven several she should similarly since six so some somehow still such ten that the their then there therefore these they this those though three to two under unless unlike until volume we what whatever whats when where which while why with without yesterday yet you your aboard about above according to across afore after against agin along alongside amid amidst among amongst anent around as aslant astride at athwart bar because of before behind below beneath beside besides between betwixt beyond but by circa despite down during due to ere except for from in inside into less like mid midst minus near next nigh nigher nighest notwithstanding of off on on to onto out out of outside over past pending per plus qua re round sans save since through throughout thru till to toward towards under underneath unlike until unto up upon versus via vice with within without he her herself hers him himself his I it its itself me mine my myself ours she their theirs them themselves they us we our ourselves you your yours yourselves yourself this that these those a about above across after afterwards again against all almost alone along already also although always am among amongst amoungst amount an and another any anyhow anyone anything anyway anywhere are around as at back be became because become becomes becoming been before beforehand behind being below beside besides between beyond bill both bottom but by call can cannot cant co computer con could couldnt cry de describe detail do done down due during each eg eight either eleven else elsewhere empty enough etc even ever every everyone everything everywhere except few fifteen fify fill find fire first five for former formerly forty found four from front full further get give go had has hasnt have he hence her here hereafter hereby herein hereupon hers herself him himself his how however hundred i ie if in inc indeed interest into is it its itself keep last latter latterly least less ltd made many may me meanwhile might mill mine more moreover most mostly move much must my myself name namely neither never nevertheless next nine no nobody none noone nor not nothing now nowhere of off often on once one only onto or other others otherwise our ours ourselves out over own part per perhaps please put rather re same see seem seemed seeming seems serious several she should show side since sincere six sixty so some somehow someone something sometime sometimes somewhere still such take ten than that the their them themselves then thence there thereafter thereby therefore therein thereupon these they thick thin third this those though three through throughout thru thus to together too top toward towards twelve twenty two un under until up upon us very via was we well were what whatever when whence whenever where whereafter whereas whereby wherein whereupon wherever whether which while whither who whoever whole whom whose why will with within without would yet you your yours yourself yourselves #other number RediSearch-1.2.2/src/dep/cndict/lex/lex-touris.lex000066400000000000000000000001321364126773500217570ustar00rootroot00000000000000世博园/null 世博会/null 长城/null 黄山/null 衡山/null 华山/null 泰山/null RediSearch-1.2.2/src/dep/cndict/lex/lex-units.lex000066400000000000000000000003141364126773500215760ustar00rootroot00000000000000#中文单字单位词库 #长度 米 寸 尺 丈 里 #时间 年 月 日 时 #分 秒 #币 元 角 #容量 升 斗 石 瓶 袋 盒 #重量 吨 克 斤 两 担 #地积 亩 顷 #其他 折 件 番 ℃ ℉ RediSearch-1.2.2/src/dep/cndict/read_friso.py000077500000000000000000000026161364126773500210450ustar00rootroot00000000000000#!/usr/bin/env python import zlib import struct from argparse import ArgumentParser from cStringIO import StringIO ap = ArgumentParser() ap.add_argument('-f', '--file', default='CNDICT.out') opts = ap.parse_args() fp = open(opts.file) # Read the header/version version = struct.unpack('!I', fp.read(4))[0] print "VERSION", version TYPE_MASK = 0x1F F_SYNS = 0x01 << 5 F_FREQS = 0x02 << 5 def print_header(hdrbyte): print "Type: {0}. Has Syns={1}, Has Freqs={2}".format( hdrbyte & TYPE_MASK, bool(hdrbyte & F_SYNS), bool(hdrbyte & F_FREQS) ) def read_zstr(fp): ret = bytearray() while True: s = fp.read(1) if len(s) == 0 or ord(s) == 0: return ret.decode('utf-8') ret += s def read_entry(fp): firstbyte = fp.read(1) if len(firstbyte) == 0: raise EOFError() hdrinfo = ord(firstbyte) print_header(hdrinfo) # Read up to the first buf term = read_zstr(fp) syns = [] freqs = 0 if hdrinfo & F_SYNS: # Check the number of syns we're to read syncount = struct.unpack("!h", fp.read(2))[0] for _ in range(syncount): syns.append(read_zstr(fp)) if hdrinfo & F_FREQS: freqs = struct.unpack("!I", fp.read(4))[0] return term, syns, freqs sio = StringIO(zlib.decompress(fp.read())) while True: term, syns, freqs = read_entry(sio) print term, freqsRediSearch-1.2.2/src/dep/friso/000077500000000000000000000000001364126773500162245ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/friso/CMakeLists.txt000066400000000000000000000004561364126773500207710ustar00rootroot00000000000000IF ("${CMAKE_C_COMPILER_ID}" MATCHES "Clang") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-tautological-compare") ENDIF() ADD_LIBRARY(friso OBJECT friso.c friso_array.c friso_hash.c friso_lexicon.c friso_link.c friso_string.c friso_ctype.c friso_UTF8.c friso_GBK.c)RediSearch-1.2.2/src/dep/friso/LICENSE.md000066400000000000000000000305431364126773500176350ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ========================================================================== The following license applies to the Friso ANSI C library -------------------------------------------------------------------------- Copyright (c) 2010 lionsoul Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. RediSearch-1.2.2/src/dep/friso/Makefile000066400000000000000000000054221364126773500176670ustar00rootroot00000000000000############################################################# # friso chinese word segmentation makefile. # # do not use it for commercial use. # # @author chenxin # # @email chenxin619315@gmail.com # ############################################################# #complie CC = gcc #include directory INCLUDE = . #complie flags for devolep CFLAGS = -g -Wall #complile flags for products FFLAGS = -O2 -Wall -fPIC #FFLAGS = -g -Wall -fPIC #extension libs for friso ELIB = m LIB_FILE = libfriso.so STA_FILE = libfriso.a LIBRARY_DIR = /usr/lib INCLUDE_DIR = /usr/include/friso INSTALL_DIR = /usr/local/bin OBJECT = friso.o friso_array.o friso_hash.o friso_lexicon.o friso_link.o friso_string.o friso_ctype.o friso_UTF8.o friso_GBK.o SOURCE = friso_ctype.c friso_hash.c friso_UTF8.c friso_lexicon.c friso_array.c friso_GBK.c friso_link.c friso.c friso_string.c all: share friso static: $(OBJECT) ar -cr $(STA_FILE) $(OBJECT) share: $(OBJECT) $(CC) $(FFLAGS) $(OBJECT) -fPIC -shared -l$(ELIB) -o $(LIB_FILE) ##debug: $(SOURCE) ## $(CC) $(CFLAGS) $(SOURCE) -o friso friso: tst-friso.o $(CC) tst-friso.o -o ./friso -L. -lfriso tst-friso.o: friso_API.h friso.h tst-friso.c $(CC) $(FFLAGS) -c tst-friso.c friso.o: friso.c friso.h friso_API.h $(CC) $(FFLAGS) -c friso.c -l$(ELIB) friso_array.o: friso_array.c friso_API.h $(CC) $(FFLAGS) -c friso_array.c friso_hash.o: friso_hash.c friso_API.h $(CC) $(FFLAGS) -c friso_hash.c friso_lexicon.o: friso_hash.c friso_lexicon.c friso_API.h friso.h $(CC) $(FFLAGS) -c friso_lexicon.c friso_link.o: friso_link.c friso_API.h $(CC) $(FFLAGS) -c friso_link.c friso_string.o: friso_string.c friso_API.h $(CC) $(FFLAGS) -c friso_string.c friso_ctype.o: friso_API.h friso_ctype.h friso_ctype.c $(CC) $(FFLAGS) -c friso_ctype.c friso_UTF8.o: friso_API.h friso_ctype.h friso_UTF8.c $(CC) $(FFLAGS) -c friso_UTF8.c friso_GBK.o: friso_API.h friso_ctype.h friso_GBK.c $(CC) $(FFLAGS) -c friso_GBK.c #clean all the object files. .PHONY: clean clean: find . -name \*.so | xargs rm -f find . -name \*.o | xargs rm -f @if [ -f friso ];\ then\ rm -f friso;\ fi #install friso install: friso @if [ -d $(INSTALL_DIR) ] && [ -d $(LIBRARY_DIR) ];\ then\ cp friso $(INSTALL_DIR);\ chmod a+x $(INSTALL_DIR)/friso;\ chmod og-w $(INSTALL_DIR)/friso;\ cp $(LIB_FILE) $(LIBRARY_DIR);\ chmod a+x $(LIBRARY_DIR)/$(LIB_FILE);\ chmod og-w $(LIBRARY_DIR)/$(LIB_FILE);\ echo "install friso successfully.";\ echo "Usage: friso -init friso configuration file path.";\ else\ echo "Sorry, $(INSTALL_DIR) or $(LIBRARY_DIR) does not exits.";\ fi @if [ ! -d $(INCLUDE_DIR) ];\ then\ mkdir $(INCLUDE_DIR);\ fi @cp *.h $(INCLUDE_DIR);\ chmod a+r $(INCLUDE_DIR)/*.h;\ chmod a+x $(INCLUDE_DIR)/*.h; RediSearch-1.2.2/src/dep/friso/Makefile.RediSearch000066400000000000000000000003751364126773500217010ustar00rootroot00000000000000SOURCEDIR = . CC_SOURCES = $(wildcard $(SOURCEDIR)/*.c) CC_OBJECTS = $(sort $(patsubst $(SOURCEDIR)/%.c, $(SOURCEDIR)/%.o , $(CC_SOURCES))) .SUFFIXES: .c .cc .o all: libfriso.a libfriso.a: $(CC_OBJECTS) ar rc $@ $^ clean: rm -rf *.xo *.so *.o *.a RediSearch-1.2.2/src/dep/friso/friso.c000066400000000000000000001726351364126773500175300ustar00rootroot00000000000000/* * friso main file implemented the friso main functions. * starts with friso_ in the friso header file "friso.h"; * * @author chenxin */ #include #include #include #include #include "friso_API.h" #include "friso_ctype.h" #include "friso.h" //----------------------------------------------------------------- //friso instance about function /* {{{ create a new friso configuration variable. */ FRISO_API friso_t friso_new( void ) { friso_t e = ( friso_t ) FRISO_MALLOC( sizeof( friso_entry ) ); if ( e == NULL ) { ___ALLOCATION_ERROR___ } e->dic = NULL; e->charset = FRISO_UTF8; //set default charset UTF8. return e; } /* }}} */ /* {{{ creat a new friso with initialize item from a configuration file. * * @return 1 for successfully and 0 for failed. */ FRISO_API int friso_init_from_ifile( friso_t friso, friso_config_t config, fstring __ifile ) { FILE *__stream; char __chars__[256], __key__[128], *__line__; char __lexi__[160], lexpath[160]; uint_t i, t, __hit__ = 0, __length__; char *slimiter = NULL; uint_t flen = 0; //get the base part of the path of the __ifile if ( (slimiter = strrchr(__ifile, '/')) != NULL ) { flen = slimiter - __ifile + 1; } //yat, start to parse the friso.ini configuration file if ( ( __stream = fopen( __ifile, "rb" ) ) != NULL ) { //initialize the entry with the value from the ifile. while ( ( __line__ = file_get_line( __chars__, __stream ) ) != NULL ) { //comments filter. if ( __line__[0] == '#' ) continue; if ( __line__[0] == '\t' ) continue; if ( __line__[0] == ' ' || __line__[0] == '\0' ) continue; __length__ = strlen( __line__ ); for ( i = 0; i < __length__; i++ ) { if ( __line__[i] == ' ' || __line__[i] == '\t' || __line__[i] == '=' ) { break; } __key__[i] = __line__[i]; } __key__[i] = '\0'; //position the euqals char '='. if ( __line__[i] == ' ' || __line__[i] == '\t' ) { for ( i++ ; i < __length__; i++ ) { if ( __line__[i] == '=' ) { break; } } } //clear the left whitespace of the value. for ( i++; i < __length__ && ( __line__[i] == ' ' || __line__[i] == '\t' ); i++ ); for ( t = 0; i < __length__; i++, t++ ) { if ( __line__[i] == ' ' || __line__[i] == '\t' ) { break; } __line__[t] = __line__[i]; } __line__[t] = '\0'; //printf("key=%s, value=%s\n", __key__, __line__ ); if ( strcmp( __key__, "friso.lex_dir" ) == 0 ) { /* * here copy the value of the lex_dir. * cause we need the value of friso.max_len to finish all * the work when we call function friso_dic_load_from_ifile to * initiliaze the friso dictionary. */ if ( __hit__ == 0 ) { __hit__ = t; for ( t = 0; t < __hit__; t++ ) { __lexi__[t] = __line__[t]; } __lexi__[t] = '\0'; } } else if ( strcmp( __key__, "friso.max_len" ) == 0 ) { config->max_len = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.r_name" ) == 0 ) { config->r_name = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.mix_len" ) == 0 ) { config->mix_len = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.lna_len" ) == 0 ) { config->lna_len = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.add_syn" ) == 0 ) { config->add_syn = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.clr_stw" ) == 0 ) { config->clr_stw = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.keep_urec" ) == 0 ) { config->keep_urec = ( uint_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.spx_out" ) == 0 ) { config->spx_out = ( ushort_t ) atoi( __line__ ); } else if ( strcmp( __key__, "friso.nthreshold" ) == 0 ) { config->nthreshold = atoi( __line__ ); } else if ( strcmp( __key__, "friso.mode" ) == 0 ) { //config->mode = ( friso_mode_t ) atoi( __line__ ); friso_set_mode(config, (friso_mode_t) atoi( __line__ )); } else if ( strcmp( __key__, "friso.charset" ) == 0 ) { friso->charset = (friso_charset_t) atoi( __line__ ); } else if ( strcmp( __key__, "friso.en_sseg") == 0 ) { config->en_sseg = (ushort_t) atoi( __line__ ); } else if ( strcmp( __key__, "friso.st_minl") == 0 ) { config->st_minl = (ushort_t) atoi( __line__ ); } else if ( strcmp( __key__, "friso.kpuncs") == 0 ) { //t is the length of the __line__. memcpy(config->kpuncs, __line__, t); //printf("friso_init_from_ifile#kpuncs: %s\n", config->kpuncs); } } /* * intialize the friso dictionary here. * use the setting from the ifile parse above * we copied the value in the __lexi__ */ if ( __hit__ != 0 ) { //add relative path search support //@added: 2014-05-24 //convert the relative path to absolute path base on the path of friso.ini //improved at @date: 2014-10-26 #ifdef FRISO_WINNT if ( __lexi__[1] != ':' && flen != 0 ) { #else if ( __lexi__[0] != '/' && flen != 0 ) { #endif if ( (flen + __hit__) > sizeof(lexpath) - 1 ) { fprintf(stderr, "[Error]: Buffer is not long enough to hold the final lexicon path"); fprintf(stderr, " with a length of {%d} at function friso.c#friso_init_from_ifile", flen + __hit__); return 0; } memcpy(lexpath, __ifile, flen); memcpy(lexpath + flen, __lexi__, __hit__ - 1); //count the new length flen = flen + __hit__ - 1; if ( lexpath[flen-1] != '/' ) lexpath[flen] = '/'; lexpath[flen+1] = '\0'; } else { memcpy(lexpath, __lexi__, __hit__); lexpath[__hit__] = '\0'; if ( lexpath[__hit__ - 1] != '/' ) { lexpath[__hit__] = '/'; lexpath[__hit__+1] = '\0'; } } friso->dic = friso_dic_new(); //add charset check for max word length counting friso_dic_load_from_ifile( friso, config, lexpath, config->max_len * (friso->charset == FRISO_UTF8 ? 3 : 2) ); } else { fprintf(stderr, "[Error]: failed get lexicon path, check lex_dir in friso.ini \n"); return 0; } fclose( __stream ); return 1; } return 0; } /* }}} */ /* {{{ friso free functions. * here we have to free its dictionary. */ FRISO_API void friso_free( friso_t friso ) { //free the dictionary if ( friso->dic != NULL ) { friso_dic_free( friso->dic ); } FRISO_FREE( friso ); } /* }}} */ /* {{{ set the current split mode * view the friso.h#friso_mode_t */ FRISO_API void friso_set_mode( friso_config_t config, friso_mode_t mode ) { config->mode = mode; switch ( config->mode ) { case __FRISO_SIMPLE_MODE__: config->next_token = next_mmseg_token; config->next_cjk = next_simple_cjk; break; case __FRISO_DETECT_MODE__: config->next_token = next_detect_token; break; default: config->next_token = next_mmseg_token; config->next_cjk = next_complex_cjk; break; } } /* }}} */ /* {{{ create a new friso configuration entry and initialize * it with default value.*/ FRISO_API friso_config_t friso_new_config( void ) { friso_config_t cfg = (friso_config_t) FRISO_MALLOC(sizeof(friso_config_entry)); if ( cfg == NULL ) { ___ALLOCATION_ERROR___; } //initialize the configuration entry. friso_init_config(cfg); return cfg; } /* }}} */ /* {{{ initialize the specified friso config entry with default value.*/ FRISO_API void friso_init_config( friso_config_t cfg ) { cfg->max_len = DEFAULT_SEGMENT_LENGTH; cfg->r_name = 1; cfg->mix_len = DEFAULT_MIX_LENGTH; cfg->lna_len = DEFAULT_LNA_LENGTH; cfg->add_syn = 1; cfg->clr_stw = 0; cfg->keep_urec = 0; cfg->spx_out = 0; cfg->en_sseg = 1; //default start the secondary segmentaion. cfg->st_minl = 1; //min length for secondary split sub token. cfg->nthreshold = DEFAULT_NTHRESHOLD; cfg->mode = ( friso_mode_t ) DEFAULT_SEGMENT_MODE; friso_set_mode(cfg, cfg->mode); //Zero fill the kpuncs buffer. memset(cfg->kpuncs, 0x00, sizeof(cfg->kpuncs)); } /* }}} */ /* {{{ create a new segment task entry. */ FRISO_API friso_task_t friso_new_task() { friso_task_t task = ( friso_task_t ) FRISO_MALLOC( sizeof( friso_task_entry ) ); if ( task == NULL ) { ___ALLOCATION_ERROR___ } //initliaze the segment. task->text = NULL; task->idx = 0; task->length = 0; task->bytes = 0; task->unicode = 0; task->ctrlMask = 0; task->pool = new_link_list(); task->sbuf = new_string_buffer(); task->token = friso_new_token(); return task; } /* }}} */ /* {{{ free the specified task*/ FRISO_API void friso_free_task( friso_task_t task ) { //free the allocation of the poll link list. if ( task->pool != NULL ) { free_link_list( task->pool ); } //release the allocation of the sbuff string_buffer_t. if ( task->sbuf != NULL ) { free_string_buffer(task->sbuf); } //free the allocations of the token. if ( task->token != NULL ) { friso_free_token( task->token ); } FRISO_FREE( task ); } /* }}} */ /* {{{ create a new friso token */ FRISO_API friso_token_t friso_new_token( void ) { friso_token_t token = ( friso_token_t ) FRISO_MALLOC( sizeof( friso_token_entry ) ); if ( token == NULL ) { ___ALLOCATION_ERROR___ } //initialize token->type = (uchar_t) __LEX_OTHER_WORDS__; token->length = 0; token->rlen = 0; token->pos = '\0'; token->offset = -1; memset(token->word, 0x00, __HITS_WORD_LENGTH__); return token; } /* }}} */ /* {{{ set the text of the current segmentation. * that means we could re-use the segment. * also we have to reset the idx and the length of the segmentation. * and the most important one - clear the poll link list. */ FRISO_API void friso_set_text( friso_task_t task, fstring text ) { task->text = text; task->idx = 0; //reset the index task->length = strlen( text ); task->pool = link_list_clear( task->pool ); //clear the word poll string_buffer_clear( task->sbuf ); //crear the string buffer. } /* }}} */ //-------------------------------------------------------------------- //friso core part 1: simple mode tokenize handler functions /* {{{ read the next word from the current position. * * @return int the bytes of the readed word. */ __STATIC_API__ uint_t readNextWord( friso_t friso, //friso instance friso_task_t task, //token task uint_t *idx, //current index. fstring __word ) //work buffer. { if ( friso->charset == FRISO_UTF8 ) { //@reader: task->unicode = get_utf8_unicode(task->buffer) is moved insite // function utf8_next_word from friso 1.6.0 . return utf8_next_word( task, idx, __word ); } else if ( friso->charset == FRISO_GBK ) { return gbk_next_word( task, idx, __word ); } return 0; //unknow charset. } /* }}} */ /* {{{ get the next cjk word from the current position, with simple mode. */ FRISO_API lex_entry_t next_simple_cjk( friso_t friso, friso_config_t config, friso_task_t task ) { uint_t t, idx = task->idx, __length__; string_buffer_t sb = new_string_buffer_with_string( task->buffer ); lex_entry_t e = friso_dic_get( friso->dic, __LEX_CJK_WORDS__, sb->buffer ); /* * here bak the e->length in the task->token->type. * we will use it to count the task->idx. * for the sake of use less variable. */ __length__ = e->length; for ( t = 1; t < config->max_len && ( task->bytes = readNextWord( friso, task, &idx, task->buffer ) ) != 0; t++ ) { if ( friso_whitespace( friso->charset, task ) ) break; if ( ! friso_cn_string( friso->charset, task ) ) break; string_buffer_append( sb, task->buffer ); //check the existence of the word by search the dictionary. if ( friso_dic_match( friso->dic, __LEX_CJK_WORDS__, sb->buffer ) ) { e = friso_dic_get( friso->dic, __LEX_CJK_WORDS__, sb->buffer ); } } //correct the offset of the segment. task->idx += ( e->length - __length__ ); free_string_buffer( sb ); //free the buffer /* * check the stopwords dictionary, * make sure the current tokenzier is not stopwords. * @warning: friso.clr_stw must be open in friso.ini configuration file. */ if ( config->clr_stw && friso_dic_match( friso->dic, __LEX_STOPWORDS__, e->word ) ) { return NULL; } return e; } /* }}} */ //------------------------------------------------------------------- //friso core part 2: basic latin handler functions /* {{{ basic latin segmentation*/ /*convert full-width char to half-width*/ #define convert_full_to_half( friso, task, convert ) \ do {\ if ( friso_fullwidth_en_char( friso->charset, task ) ) { \ if ( friso->charset == FRISO_UTF8 ) \ task->unicode -= 65248; \ else if ( friso->charset == FRISO_GBK ) \ {\ task->buffer[0] = ((uchar_t)task->buffer[1]) - 128; \ task->buffer[1] = '\0'; \ }\ convert = 1; \ } \ } while (0) /*convert uppercase char to lowercase char*/ #define convert_upper_to_lower( friso, task, convert ) \ do {\ if ( friso_uppercase_letter( friso->charset, task ) ) { \ if ( friso->charset == FRISO_UTF8 ) \ task->unicode += 32; \ /* With the above logic(full to half), * here we just need to check half-width*/ \ else if ( friso->charset == FRISO_GBK ) \ task->buffer[0] = task->buffer[0] + 32; \ convert = 1; \ } \ } while (0) /* convert the unicode to utf-8 bytes. (FRISO_UTF8) */ #define convert_work_apply( friso, task, convert ) \ do {\ if ( convert == 1 && friso->charset == FRISO_UTF8 ) { \ memset( task->buffer, 0x00, 7 ); \ unicode_to_utf8( task->unicode, task->buffer ); \ convert = 0; \ } \ } while ( 0 ) //get the next latin word from the current position. __STATIC_API__ lex_entry_t next_basic_latin( friso_t friso, friso_config_t config, friso_task_t task ) { int __convert = 0, t = 0, blen = 0; int chkecm = 0, chkunits = 1, wspace = 0; /* cause friso will convert full-width numeric and letters * (Not punctuations) to half-width ones. so, here we need * wlen to record the real length of the lex_entry_t. * */ uint_t wlen = task->bytes; uint_t idx = task->idx; string_buffer_t sb, tmp = NULL; lex_entry_t e = NULL; //condition controller to start the secondary segmente. int ssseg = 0; int fdunits = 0; //secondray segmente. int tcount = 1; //number fo different type of char. friso_enchar_t _ctype, _TYPE; task_ssseg_close(task); //full-half width and upper-lower case exchange. convert_full_to_half( friso, task, __convert ); convert_upper_to_lower( friso, task, __convert ); convert_work_apply( friso, task, __convert ); //creat a new fstring buffer and append the task->buffer insite. sb = new_string_buffer_with_string( task->buffer ); _TYPE = friso_enchar_type( friso->charset, task ); //segmentation. while ( ( task->bytes = readNextWord( friso, task, &idx, task->buffer ) ) != 0 ) { //convert full-width to half-width. convert_full_to_half(friso, task, __convert); _ctype = friso_enchar_type( friso->charset, task ); if ( _ctype == FRISO_EN_WHITESPACE ) { wspace = 1; break; } if ( _ctype == FRISO_EN_PUNCTUATION ) { //clear the full-width punctuations. if ( task->bytes > 1 ) break; if ( ! friso_en_kpunc( config, task->buffer[0] ) ) break; } /* check if is an FRISO_EN_NUMERIC, or FRISO_EN_LETTER. * here just need to make sure it is not FRISO_EN_UNKNOW. * */ if ( _ctype == FRISO_EN_UNKNOW ) { if ( friso_cn_string( friso->charset, task ) ) chkecm = 1; break; } //upper-lower case convert convert_upper_to_lower( friso, task, __convert ); convert_work_apply( friso, task, __convert ); //sound a little crazy, i did't limit the length of this //@Added: 2015-01-16 night if ( (wlen + task->bytes) >= __HITS_WORD_LENGTH__ ) { break; } string_buffer_append( sb, task->buffer ); wlen += task->bytes; task->idx += task->bytes; /* Char type counter. * make the condition to start the secondary segmentation. * * @TODO: 2013-12-22 * */ if ( _ctype != _TYPE ) { tcount++; _TYPE = _ctype; } } /* * 1. clear the useless english punctuation * from the end of the buffer. * 2. check the english and punctuation mixed word. * * set _ctype to as the status for the existence of punctuation * at the end of the sb cause we need to plus the tcount * to avoid the secondary check for work like 'c+', 'chenxin.'. */ _ctype = 0; for ( ; sb->length > 0 && sb->buffer[ sb->length - 1 ] != '%' && is_en_punctuation( friso->charset, sb->buffer[ sb->length - 1 ] ); ) { //check the english punctuation mixed word. if ( friso_dic_match( friso->dic, __LEX_ENPUN_WORDS__, sb->buffer ) ) { e = friso_dic_get(friso->dic, __LEX_ENPUN_WORDS__, sb->buffer); chkunits = 0; break; } //mark the end of the buffer. sb->buffer[ --sb->length ] = '\0'; wlen--; task->idx--; /*check and plus the tcount*/ if ( _ctype == 0 ) { tcount--; _ctype = 1; } } //check the condition to start the secondary segmentation. ssseg = (tcount > 1) && (chkunits == 1); //check the tokenize loop is break by whitespace. // no need for all the following work if it is. //@added 2013-11-19 if ( wspace == 1 || task->idx == task->length ) { blen = sb->length; e = new_lex_entry( string_buffer_devote(sb), NULL, 0, blen, __LEX_OTHER_WORDS__ ); e->rlen = wlen; //set the secondary mask. if ( ssseg ) task_ssseg_open(task); return e; } if ( chkecm != 1 ) { /* * check the single words unit. * not only the chinese word but also other kinds of word. * so we can recongnize the complex unit like '℉,℃'' eg.. * @date 2013-10-14 */ if ( chkunits && ( friso_numeric_string( friso->charset, sb->buffer ) || friso_decimal_string( friso->charset, sb->buffer ) ) ) { idx = task->idx; if ( ( task->bytes = readNextWord( friso, task, &idx, task->buffer ) ) != 0 ) { //check the EC dictionary. if ( friso_dic_match( friso->dic, __LEX_CJK_UNITS__, task->buffer ) ) { fdunits = 1; string_buffer_append(sb, task->buffer); wlen += task->bytes; task->idx += task->bytes; } } } //set the START_SS_MASK if ( fdunits != 1 && ssseg ) { task_ssseg_open(task); } //creat the lexicon entry and return it. blen = sb->length; e = new_lex_entry( string_buffer_devote(sb), NULL, 0, blen, __LEX_OTHER_WORDS__ ); e->rlen = wlen; return e; } //Try to find a english chinese mixed word. tmp = new_string_buffer_with_string( sb->buffer ); idx = task->idx; for ( t = 0; t < config->mix_len && ( task->bytes = readNextWord( friso, task, &idx, task->buffer ) ) != 0; t++ ) { //if ( ! friso_cn_string( friso->charset, task ) ) { // task->idx -= task->bytes; // break; //} //replace with the whitespace check. //more complex mixed words could be find here. // (no only english and chinese mix word) //@date 2013-10-14 if ( friso_whitespace( friso->charset, task ) ) { break; } string_buffer_append( tmp, task->buffer ); //check the mixed word dictionary. if ( friso_dic_match( friso->dic, __LEX_ECM_WORDS__, tmp->buffer ) ) { e = friso_dic_get( friso->dic, __LEX_ECM_WORDS__, tmp->buffer ); } } free_string_buffer( tmp ); /* e is not NULL does't mean it must be EC mixed word. * it could be an english and punctuation mixed word, like 'c++' * But we don't need to check and set the START_SS_MASK mask here. * */ if ( e != NULL ) { task->idx += (e->length - sb->length); free_string_buffer(sb); return e; } //no match for mix word, try to find a single unit. if ( chkunits && ( friso_numeric_string( friso->charset, sb->buffer ) || friso_decimal_string( friso->charset, sb->buffer ) ) ) { idx = task->idx; if ( ( task->bytes = readNextWord( friso, task, &idx, task->buffer ) ) != 0 ) { //check the single chinese units dictionary. if ( friso_dic_match( friso->dic, __LEX_CJK_UNITS__, task->buffer ) ) { fdunits = 1; string_buffer_append( sb, task->buffer ); wlen += task->bytes; task->idx += task->bytes; } } } //set the START_SS_MASK. if ( fdunits != 1 && ssseg ) { task_ssseg_open(task); } //create the lexicon entry and return it. blen = sb->length; e = new_lex_entry( string_buffer_devote(sb), NULL, 0, blen, __LEX_OTHER_WORDS__ ); e->rlen = wlen; return e; } /* }}} */ //------------------------------------------------------------------- //friso core part 3: mmseg tokenize implements functions //mmseg algorithm implemented functions - start /* {{{ get the next match from the current position, * throught the dictionary this will return all the matchs. * * @return friso_array_t that contains all the matchs. */ __STATIC_API__ friso_array_t get_next_match( friso_t friso, friso_config_t config, friso_task_t task, uint_t idx ) { register uint_t t; string_buffer_t sb = new_string_buffer_with_string( task->buffer ); //create a match dynamic array. friso_array_t match = new_array_list_with_opacity( config->max_len ); array_list_add(match, friso_dic_get(friso->dic, __LEX_CJK_WORDS__, task->buffer)); for ( t = 1; t < config->max_len && ( task->bytes = readNextWord( friso, task, &idx, task->buffer ) ) != 0; t++ ) { if ( friso_whitespace( friso->charset, task ) ) break; if ( ! friso_cn_string( friso->charset, task ) ) break; //append the task->buffer to the buffer. string_buffer_append( sb, task->buffer ); //check the CJK dictionary. if ( friso_dic_match( friso->dic, __LEX_CJK_WORDS__, sb->buffer ) ) { /* * add the lex_entry_t insite. * here is a key point: * we use friso_dic_get function * to get the address of the lex_entry_cdt * that store in the dictionary, * not create a new lex_entry_cdt. * so : * 1.we will not bother to the allocations of * the newly created lex_entry_cdt. * 2.more efficient of course. */ array_list_add( match, friso_dic_get( friso->dic, __LEX_CJK_WORDS__, sb->buffer ) ); } } /*buffer allocations clear*/ free_string_buffer( sb ); //array_list_trim( match ); return match; } /* }}} */ /* {{{ chunk for mmseg defines and functions to handle them.*/ typedef struct { friso_array_t words; uint_t length; float average_word_length; float word_length_variance; float single_word_dmf; } friso_chunk_entry; typedef friso_chunk_entry * friso_chunk_t; /* }}} */ /* {{{ create a new chunks*/ __STATIC_API__ friso_chunk_t new_chunk( friso_array_t words, uint_t length ) { friso_chunk_t chunk = ( friso_chunk_t ) FRISO_MALLOC( sizeof( friso_chunk_entry ) ); if ( chunk == NULL ) { ___ALLOCATION_ERROR___ } chunk->words = words; chunk->length = length; chunk->average_word_length = -1; chunk->word_length_variance = -1; chunk->single_word_dmf = -1; return chunk; } /* }}} */ /* {{{ free the specified chunk */ __STATIC_API__ void free_chunk( friso_chunk_t chunk ) { FRISO_FREE( chunk ); } /* }}} */ /* {{{ a static function to count the average word length * of the given chunk. */ __STATIC_API__ float count_chunk_avl( friso_chunk_t chunk ) { chunk->average_word_length = ((float) chunk->length) / chunk->words->length; return chunk->average_word_length; } /* }}} */ /* {{{ a static function to count the word length variance * of the given chunk. */ __STATIC_API__ float count_chunk_var( friso_chunk_t chunk ) { float var = 0, tmp = 0; //snapshot register uint_t t; lex_entry_t e; for ( t = 0; t < chunk->words->length; t++ ) { e = ( lex_entry_t ) chunk->words->items[t]; tmp = e->length - chunk->average_word_length; var += tmp * tmp; } chunk->word_length_variance = var / chunk->words->length; return chunk->word_length_variance; } /* }}} */ /* {{{ a static function to count the single word morpheme degree of freedom * of the given chunk. */ __STATIC_API__ float count_chunk_mdf( friso_chunk_t chunk ) { float __mdf__ = 0; register uint_t t; lex_entry_t e; for ( t = 0; t < chunk->words->length; t++ ) { e = ( lex_entry_t ) chunk->words->items[t]; //single CJK(UTF-8)/chinese(GBK) word. //better add a charset check here, but this will works find. //all CJK words will take 3 bytes with UTF-8 encoding. //all chinese words take 2 bytes with GBK encoding. if ( e->length == 3 || e->length == 2 ) { __mdf__ += (float) log( (float)e->fre); } } chunk->single_word_dmf = __mdf__; return chunk->single_word_dmf; } /* }}} */ /* {{{ chunk printer - use for for debug*/ #define ___CHUNK_PRINTER___( _chunks_ ) \ for ( t = 0; t < _chunks_->length; t++ ) { \ __tmp__ = (( friso_chunk_t ) _chunks_->items[t])->words; \ for ( j = 0; j < __tmp__->length; j++ ) { \ printf("%s/ ", ( ( lex_entry_t ) __tmp__->items[j] )->word ); \ } \ putchar('\n'); \ } \ putchar('\n'); \ /* }}} */ /* {{{ mmseg algorithm core invoke * here, * we use four rules to filter all the chunks to get the best chunk. * and this is the core of the mmseg alogrithm. * 1. maximum match word length. * 2. larget average word length. * 3. smallest word length variance. * 4. largest single word morpheme degrees of freedom. */ __STATIC_API__ friso_chunk_t mmseg_core_invoke( friso_array_t chunks ) { register uint_t t/*, j*/; float max; friso_chunk_t e; friso_array_t __res__, __tmp__; __res__ = new_array_list_with_opacity( chunks->length ); //1.get the maximum matched chunks. //count the maximum length max = ( float ) ( ( friso_chunk_t ) chunks->items[0] )->length; for ( t = 1; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( e->length > max ) max = ( float ) e->length; } //get the chunk items that owns the maximum length. for ( t = 0; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( e->length >= max ) { array_list_add( __res__, e ); } else { free_array_list( e->words ); free_chunk( e ); } } //check the left chunks if ( __res__->length == 1 ) { e = ( friso_chunk_t ) __res__->items[0]; free_array_list( __res__ ); free_array_list( chunks ); return e; } else { __tmp__ = array_list_clear( chunks ); chunks = __res__; __res__ = __tmp__; } //2.get the largest average word length chunks. //count the maximum average word length. max = count_chunk_avl( ( friso_chunk_t ) chunks->items[0] ); for ( t = 1; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( count_chunk_avl( e ) > max ) { max = e->average_word_length; } } //get the chunks items that own the largest average word length. for ( t = 0; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( e->average_word_length >= max ) { array_list_add( __res__, e ); } else { free_array_list( e->words ); free_chunk( e ); } } //check the left chunks if ( __res__->length == 1 ) { e = ( friso_chunk_t ) __res__->items[0]; free_array_list( __res__); free_array_list( chunks ); return e; } else { __tmp__ = array_list_clear( chunks ); chunks = __res__; __res__ = __tmp__; } //3.get the smallest word length variance chunks //count the smallest word length variance max = count_chunk_var( ( friso_chunk_t ) chunks->items[0] ); for ( t = 1; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( count_chunk_var( e ) < max ) { max = e->word_length_variance; } } //get the chunks that own the smallest word length variance. for ( t = 0; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( e->word_length_variance <= max ) { array_list_add( __res__, e ); } else { free_array_list( e->words ); free_chunk( e ); } } //check the left chunks if ( __res__->length == 1 ) { e = ( friso_chunk_t ) __res__->items[0]; free_array_list( chunks ); free_array_list( __res__ ); return e; } else { __tmp__ = array_list_clear( chunks ); chunks = __res__; __res__ = __tmp__; } //4.get the largest single word morpheme degrees of freedom. //count the maximum single word morpheme degreees of freedom max = count_chunk_mdf( ( friso_chunk_t ) chunks->items[0] ); for ( t = 1; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( count_chunk_mdf( e ) > max ) { max = e->single_word_dmf; } } //get the chunks that own the largest single word word morpheme degrees of freedom. for ( t = 0; t < chunks->length; t++ ) { e = ( friso_chunk_t ) chunks->items[t]; if ( e->single_word_dmf >= max ) { array_list_add( __res__, e ); } else { free_array_list( e->words ); free_chunk( e ); } } /* * there is still more than one chunks? * well, this rarely happen but still happens. * here we simple return the first chunk as the final result, * and we need to free the all the chunks that __res__ * points to except the 1th one. * you have to do two things to totaly free a chunk: * 1. call free_array_list to free the allocations of a chunk's words. * 2. call free_chunk to the free the allocations of a chunk. */ for ( t = 1; t < __res__->length; t++ ) { e = ( friso_chunk_t ) __res__->items[t]; free_array_list( e->words ); free_chunk( e ); } e = ( friso_chunk_t ) __res__->items[0]; free_array_list( chunks ); free_array_list( __res__ ); return e; } /* }}} */ /* {{{ get the next cjk word from the current position with complex mode. * this is the core of the mmseg chinese word segemetation algorithm. * we use four rules to filter the matched chunks and get the best one * as the final result. * * @see mmseg_core_invoke( chunks ); */ FRISO_API lex_entry_t next_complex_cjk( friso_t friso, friso_config_t config, friso_task_t task ) { register uint_t x, y, z; /*bakup the task->bytes here*/ uint_t __idx__ = task->bytes; lex_entry_t fe, se, te; friso_chunk_t e; friso_array_t words, chunks; friso_array_t smatch, tmatch, fmatch = get_next_match( friso, config, task, task->idx ); /* * here: * if the length of the fmatch is 1, mean we don't have to * continue the following work. ( no matter what we get the same result. ) */ if ( fmatch->length == 1 ) { fe = ( ( lex_entry_t ) fmatch->items[0] ); free_array_list( fmatch ); /* * check and clear the stop words . * @date 2013-06-13 */ if ( config->clr_stw && friso_dic_match( friso->dic, __LEX_STOPWORDS__, fe->word ) ) { return NULL; } return fe; } chunks = new_array_list(); task->idx -= __idx__; for ( x = 0; x < fmatch->length; x++ ) { /*get the word and try the second layer match*/ fe = ( lex_entry_t ) array_list_get( fmatch, x ); __idx__ = task->idx + fe->length; readNextWord( friso, task, &__idx__, task->buffer ); if ( task->bytes != 0 && friso_cn_string(friso->charset, task ) && friso_dic_match(friso->dic, __LEX_CJK_WORDS__, task->buffer)) { //get the next matchs smatch = get_next_match( friso, config, task, __idx__ ); for ( y = 0; y < smatch->length; y++ ) { /*get the word and try the third layer match*/ se = ( lex_entry_t ) array_list_get( smatch, y ); __idx__ = task->idx + fe->length + se->length; readNextWord( friso, task, &__idx__, task->buffer ); if ( task->bytes != 0 && friso_cn_string( friso->charset, task ) && friso_dic_match( friso->dic, __LEX_CJK_WORDS__, task->buffer ) ) { //get the matchs. tmatch = get_next_match( friso, config, task, __idx__ ); for ( z = 0; z < tmatch->length; z++ ) { te = ( lex_entry_t ) array_list_get( tmatch, z ); words = new_array_list_with_opacity(3); array_list_add( words, fe ); array_list_add( words, se ); array_list_add( words, te ); array_list_add( chunks, new_chunk( words, fe->length + se->length + te->length ) ); } //free the third matched array list free_array_list( tmatch ); } else { words = new_array_list_with_opacity(2); array_list_add( words, fe ); array_list_add( words, se ); //add the chunk array_list_add( chunks, new_chunk( words, fe->length + se->length ) ); } } //free the second match array list free_array_list( smatch ); } else { words = new_array_list_with_opacity(1); array_list_add( words, fe ); array_list_add( chunks, new_chunk( words, fe->length ) ); } } //free the first match array list free_array_list( fmatch ); /* * filter the chunks with the four rules of the mmseg algorithm * and get best chunk as the final result. * * @see mmseg_core_invoke( chunks ); * @date 2012-12-13 */ if ( chunks->length > 1 ) { e = mmseg_core_invoke( chunks ); } else { e = ( friso_chunk_t ) chunks->items[0]; } fe = ( lex_entry_t ) e->words->items[0]; task->idx += fe->length; //reset the idx of the task. free_array_list(e->words); //free the chunks words allocation free_chunk( e ); //clear the stop words if ( config->clr_stw && friso_dic_match( friso->dic, __LEX_STOPWORDS__, fe->word ) ) { return NULL; } return fe; } /* }}} */ //----------------end of mmseg core //------------------------------------------------------------------------------------- //mmseg core logic controller, output style controller and macro defines /* {{{ A macro function to check and free * the lex_entry_t with type of __LEX_OTHER_WORDS__. */ #define check_free_otlex_entry( lex ) \ do { \ if ( lex->type == __LEX_OTHER_WORDS__ ) { \ FRISO_FREE( lex->word ); \ free_lex_entry( lex ); \ }\ } while (0) /* }}} */ /* {{{ sphinx style output synonyms words append. * * @param task * @param lex * */ __STATIC_API__ void token_sphinx_output( friso_task_t task, lex_entry_t lex ) { uint_t i, j, len; fstring _word; len = lex->length; //append the synoyums words. for ( i = 0; i < lex->syn->length; i++ ) { _word = ( fstring ) lex->syn->items[i]; j = strlen(_word); if ( ( len + j + 1 ) >= __HITS_WORD_LENGTH__ ) break; memcpy(task->token->word + len, "|", 1); len += 1; memcpy(task->token->word + len, _word, j); len += j; } //set the new end of the buffer. task->token->word[len] = '\0'; } /* }}} */ /* {{{ normal style output synonyms words append. * * @param task * @param lex * @param front 1 for add the synoyum words from the head and * 0 for append from the tail. * */ __STATIC_API__ void token_normal_output( friso_task_t task, lex_entry_t lex, int front ) { uint_t i; fstring _word; lex_entry_t e; for ( i = 0; i < lex->syn->length; i++ ) { _word = ( fstring ) lex->syn->items[i]; e = new_lex_entry( _word, NULL, 0, strlen(_word), __LEX_NCSYN_WORDS__ ); e->offset = lex->offset; //add to the buffer. if ( front ) { link_list_add_first( task->pool, e ); } else { link_list_add( task->pool, e); } } } /* }}} */ /* {{{ do the secondary segmentation of the complex english token. * * @param friso * @param config * @param task * @param lex * @param retfw -Wether to return the first word. * @return lex_entry_t(NULL or the first sub token of the lex) */ __STATIC_API__ lex_entry_t en_second_seg( friso_t friso, friso_config_t config, friso_task_t task, lex_entry_t lex, int retfw ) { //printf("sseg: %d\n", (task->ctrlMask & START_SS_MASK)); int j, p = 0, start = 0; fstring str = lex->word; lex_entry_t fword = NULL, sword = NULL; int _ctype, _TYPE = get_enchar_type(str[0]); string_buffer_clear(task->sbuf); string_buffer_append_char(task->sbuf, str[0]); for ( j = 1; j < lex->length; j++ ) { //get the type of the char _ctype = get_enchar_type(str[j]); if ( _ctype == FRISO_EN_WHITESPACE ) { _TYPE = FRISO_EN_WHITESPACE; p++; continue; } if ( _ctype == _TYPE ) { string_buffer_append_char(task->sbuf, str[j]); } else { start = j - task->sbuf->length - p; /* If the number of chars of current type * is larger than config->st_minl then we will * create a new lex_entry_t and append it to the task->wordPool. * */ if ( task->sbuf->length >= config->st_minl && ! ( config->clr_stw && friso_dic_match( friso->dic, __LEX_STOPWORDS__, task->sbuf->buffer ) ) ) { /* the allocation of lex_entry_t and its word * should be released and the type of the lex_entry_t * must be __LEX_OTHER_WORDS__. * */ sword = new_lex_entry(strdup(task->sbuf->buffer), NULL, 0, task->sbuf->length, __LEX_OTHER_WORDS__); sword->offset = lex->offset + start; if ( retfw && fword == NULL ) { fword = sword; } else { link_list_add(task->pool, sword); } } string_buffer_clear(task->sbuf); string_buffer_append_char(task->sbuf, str[j]); p = 0; _TYPE = _ctype; } } //continue to check the last item. if ( task->sbuf->length >= config->st_minl && ! ( config->clr_stw && friso_dic_match( friso->dic, __LEX_STOPWORDS__, task->sbuf->buffer ) ) ) { start = j - task->sbuf->length; sword = new_lex_entry(strdup(task->sbuf->buffer), NULL, 0, task->sbuf->length, __LEX_OTHER_WORDS__); sword->offset = j - task->sbuf->length; if ( retfw && fword == NULL ) { fword = sword; } else { link_list_add(task->pool, sword); } } return fword; } /*}}}*/ /* {{{ english synoyums words check and append macro define.*/ #define append_en_syn( lex, tmp, front )\ do {\ if ( ( tmp = friso_dic_get(friso->dic, \ __LEX_EN_WORDS__, lex->word) ) != NULL \ && (tmp->syn) != NULL ) \ {\ if ( config->spx_out == 1 ) \ token_sphinx_output(task, tmp); \ else \ {\ tmp->offset = lex->offset; \ token_normal_output(task, tmp, front); \ }\ }\ } while (0) /* }}} */ /* {{{ get the next segmentation. * and also this is the friso enterface function. * * @param friso. * @param config. * @return task. */ FRISO_API friso_token_t next_mmseg_token( friso_t friso, friso_config_t config, friso_task_t task ) { uint_t j, len = 0; string_buffer_t sb = NULL; lex_entry_t lex = NULL, tmp = NULL, sword = NULL; /* {{{ task word pool check */ if ( ! link_list_empty( task->pool ) ) { /* * load word from the word poll if it is not empty. * this will make the next word more convenient and efficient. * often synonyms, newly created word will be stored in the poll. */ lex = ( lex_entry_t ) link_list_remove_first( task->pool ); memcpy(task->token->word, lex->word, lex->length); task->token->type = lex->type; task->token->length = lex->length; task->token->rlen = lex->rlen; task->token->offset = lex->offset; task->token->word[lex->length] = '\0'; /* check and handle the english synonyms words append mask. * Also we have to close the mask after finish the operation. * * 1. we've check the config->add_syn before open the * _LEX_APPENSYN_MASK mask. * 2. we should add the synonyms words of the curren * lex_entry_t from the head. * * @since: 1.6.0 * */ if ( lex_appensyn_check(lex) ) { lex_appensyn_close(lex); append_en_syn(lex, tmp, 1); } /* * __LEX_NCSYN_WORDS__: * these lex_entry_t was created to store the the synonyums words. * and its word pointed to the lex_entry_t's synonyms word of * friso->dic, so : * free the lex_entry_t but not its word here. * * __LEX_OTHER_WORDS__: * newly created lexicon entry, like the chinese and english mixed word. * during the invoke of function next_basic_latin. * * other type: * they must exist in the dictionary, so just pass them. */ switch ( lex->type ) { case __LEX_OTHER_WORDS__: FRISO_FREE( lex->word ); free_lex_entry( lex ); break; case __LEX_NCSYN_WORDS__: free_lex_entry( lex ); break; } return task->token; } /* }}} */ while ( task->idx < task->length ) { //read the next word from the current position. task->bytes = readNextWord( friso, task, &task->idx, task->buffer ); if ( task->bytes == 0 ) break; //clear up the whitespace. if ( friso_whitespace( friso->charset, task ) ) continue; /* {{{ CJK words recongnize block. */ if ( friso_cn_string( friso->charset, task ) ) { /* check the dictionary. * and return the unrecognized CJK char as a single word. * */ if ( ! friso_dic_match( friso->dic, __LEX_CJK_WORDS__, task->buffer) ) { memcpy(task->token->word, task->buffer, task->bytes ); task->token->type = __LEX_PUNC_WORDS__; task->token->length = task->bytes; task->token->rlen = task->bytes; task->token->offset = task->idx - task->bytes; task->token->word[(int)task->bytes] = '\0'; return task->token; } //specifield mode split. //if ( config->mode == __FRISO_COMPLEX_MODE__ ) // lex = next_complex_cjk( friso, config, task ); //else lex = next_simple_cjk( friso, config, task ); lex = config->next_cjk(friso, config, task); if ( lex == NULL ) continue; //find a stopwrod. lex->offset = task->idx - lex->rlen; /* * try to find a chinese and english mixed words, like '卡拉ok' * keep in mind that is not english and chinese mixed words * like 'x射线'. * * @reader: * 1. only if the char after the current word is an english char. * 2. if the first point meet, friso will call next_basic_latin() to * get the next basic latin. (yeah, you have to handle it). * 3. if match a CE word, set lex to the newly match CE word. * 4. if no match a CE word, we will have to append the basic latin * to the pool, and it should after the append of synonyms words. * 5. do not use the task->buffer and task->unicode as the check * condition for the CE word identify. * 6. Add friso_numeric_letter check so can get work like '高3' * * @date 2013-09-02 */ if ( ( task->idx < task->length ) && ((int)task->text[task->idx]) > 0 && ( friso_en_letter( friso->charset, task ) || friso_numeric_letter(friso->charset, task) ) ) { //create a string buffer sb = new_string_buffer_with_string(lex->word); //find the next basic latin. task->buffer[0] = task->text[task->idx++]; task->buffer[1] = '\0'; tmp = next_basic_latin(friso, config, task); tmp->offset = task->idx - tmp->length; string_buffer_append( sb, tmp->word ); //check the CE dictionary. if ( friso_dic_match( friso->dic, __LEX_CEM_WORDS__, sb->buffer ) ) { j = lex->offset; //bakup the offset. lex = friso_dic_get( friso->dic, __LEX_CEM_WORDS__, sb->buffer ); lex->offset = j; check_free_otlex_entry(tmp); free_string_buffer(sb); tmp = NULL; sb = NULL; } } /* * copy the lex_entry to the result token * * @reader: (boodly lession, added 2013-08-31): * don't bother to handle the task->token->offset problem. * is has been sovled perfectly above. */ len = (int) lex->length; memcpy(task->token->word, lex->word, lex->length); task->token->type = lex->type; task->token->length = lex->length; task->token->rlen = lex->rlen; task->token->offset = lex->offset; task->token->word[len] = '\0'; //check and append the synonyms words if ( config->add_syn && lex->syn != NULL ) { if ( config->spx_out == 1 ) { token_sphinx_output(task, lex); } else { token_normal_output(task, lex, 0); } } /* {{{ here: handle the newly found basic latin created when * we try to find a CE word. * * @reader: * when tmp is not NULL and sb will not be NULL too * except a CE word is found. * * @TODO: finished append the synonyms words on 2013-12-19. */ if ( tmp != NULL && sb != NULL ) { //check the secondary split. if ( config->en_sseg == 1 && task_ssseg_check(task) ) { en_second_seg(friso, config, task, tmp, 0); } free_string_buffer( sb ); link_list_add( task->pool, tmp ); //check if append synoyums words. if ( config->add_syn == 1 ) { lex_appensyn_open(tmp); } } /* }}} */ return task->token; } /* }}} */ /* {{{ basic english/latin recongnize block. */ else if ( friso_halfwidth_en_char( friso->charset, task ) || friso_fullwidth_en_char( friso->charset, task ) ) { /* * handle the english punctuation. * * @todo: * 1. commen all the code of the following if * and uncomment the continue to clear up the punctuation directly. * * @reader: * 2. keep in mind that ALL the english punctuation will be handled here, * (when a english punctuation is found during the other process, we will * reset the task->idx back to it and then back here) * except the keep punctuation(define in file friso_string.c) * that will make up a word with the english chars around it. */ if ( friso_en_punctuation( friso->charset, task ) ) { if ( config->clr_stw && friso_dic_match(friso->dic, __LEX_STOPWORDS__, task->buffer) ) { continue; } //count the punctuation in. task->token->word[0] = task->buffer[0]; task->token->type = __LEX_PUNC_WORDS__; task->token->length = task->bytes; task->token->rlen = task->bytes; task->token->offset = task->idx - task->bytes; task->token->word[1] = '\0'; return task->token; //continue } //get the next basic latin word. lex = next_basic_latin( friso, config, task ); lex->offset = task->idx - lex->rlen; /* @added: 2013-12-22 * check and do the secondary segmentation work. * this will split 'qq2013' to 'qq, 2013' * */ sword = NULL; if ( config->en_sseg == 1 && task_ssseg_check(task) ) { sword = en_second_seg(friso, config, task, lex, 1); } //check if it is a stopword. if ( config->clr_stw && friso_dic_match( friso->dic, __LEX_STOPWORDS__, lex->word ) ) { //free the newly created lexicon entry. check_free_otlex_entry( lex ); if ( sword == NULL ) continue; lex = sword; } else if ( sword != NULL ) { if ( config->add_syn == 1 ) lex_appensyn_open(lex); link_list_add(task->pool, lex); /* If the sub token is not NULL: * add the lex to the task->pool if it is not NULL * and return the sub token istead of lex so * the sub tokens will be output ahead of lex. * */ lex = sword; } //if the token is longer than __HITS_WORD_LENGTH__, drop it //copy the word to the task token buffer. //if ( lex->length >= __HITS_WORD_LENGTH__ ) continue; memcpy(task->token->word, lex->word, lex->length); task->token->type = lex->type; task->token->length = lex->length; task->token->rlen = lex->rlen; task->token->offset = lex->offset; task->token->word[lex->length] = '\0'; /* If sword is NULL, continue to check and append * tye synoyums words for the current lex_entry_t. * */ if ( sword == NULL && config->add_syn == 1 ) { append_en_syn(lex, tmp, 0); } //free the newly create lex_entry_t check_free_otlex_entry( lex ); return task->token; } /* }}} */ /* {{{ Keep the chinese punctuation. * @added 2013-08-31) */ else if ( friso_cn_punctuation( friso->charset, task ) ) { if ( config->clr_stw && friso_dic_match(friso->dic, __LEX_STOPWORDS__, task->buffer) ) { continue; } //count the punctuation in. memcpy(task->token->word, task->buffer, task->bytes); task->token->type = __LEX_PUNC_WORDS__; task->token->length = task->bytes; task->token->offset = task->idx - task->bytes; task->token->word[task->bytes] = '\0'; return task->token; } /* }}} */ //else if ( friso_letter_number( friso->charset, task ) ) //{ //} //else if ( friso_other_number( friso->charset, task ) ) //{ //} /* {{{ keep the unrecognized words? //@date 2013-10-14 */ else if ( config->keep_urec ) { memcpy(task->token->word, task->buffer, task->bytes); task->token->type = __LEX_UNKNOW_WORDS__; task->token->length = task->bytes; task->token->offset = task->idx - task->bytes; task->token->word[task->bytes] = '\0'; return task->token; } /* }}} */ } return NULL; } /* }}} */ //---------------------------------------------------------------------- //detect core logic controller: detect tokenize mode handler functions /** {{{ get the next splited token with detect mode * detect mode will only return the words in the dictionary * with simple forward maximum matching algorithm */ FRISO_API friso_token_t next_detect_token( friso_t friso, friso_config_t config, friso_task_t task ) { lex_entry_t lex = NULL; int i, __convert = 0, tbytes, wbytes; /* {{{ task word pool check */ if ( ! link_list_empty( task->pool ) ) { /* * load word from the word poll if it is not empty. * this will make the next word more convenient and efficient. * often synonyms, newly created word will be stored in the poll. */ lex = ( lex_entry_t ) link_list_remove_first( task->pool ); memcpy(task->token->word, lex->word, lex->length); task->token->type = lex->type; task->token->length = lex->length; task->token->rlen = lex->rlen; task->token->offset = lex->offset; task->token->word[lex->length] = '\0'; /* * __LEX_NCSYN_WORDS__: * these lex_entry_t was created to store the the synonyums words. * and its word pointed to the lex_entry_t's synonyms word of * friso->dic, so : * free the lex_entry_t but not its word here. */ if ( lex->type == __LEX_NCSYN_WORDS__ ) { free_lex_entry( lex ); } return task->token; } /* }}} */ while ( task->idx < task->length ) { lex = NULL; //read the next word from the current position. task->bytes = readNextWord( friso, task, &task->idx, task->buffer ); if ( task->bytes == 0 ) break; //clear up the whitespace. if ( friso_whitespace( friso->charset, task ) ) continue; //convert full-width to half-width // and uppercase to lowercase for english chars wbytes = 0; tbytes = task->bytes; convert_full_to_half( friso, task, __convert ); convert_upper_to_lower( friso, task, __convert ); convert_work_apply( friso, task, __convert ); string_buffer_clear(task->sbuf); string_buffer_append(task->sbuf, task->buffer); if ( friso_dic_match(friso->dic, __LEX_CJK_WORDS__, task->sbuf->buffer) ) { lex = friso_dic_get(friso->dic, __LEX_CJK_WORDS__, task->sbuf->buffer); wbytes = tbytes; } for ( i = 1; i < config->max_len; i++ ) { task->bytes = readNextWord( friso, task, &task->idx, task->buffer ); if ( task->bytes == 0 ) break; //convert full-width to half-width // and uppercase to lowercase for english chars tbytes += task->bytes; convert_full_to_half( friso, task, __convert ); convert_upper_to_lower( friso, task, __convert ); convert_work_apply( friso, task, __convert ); string_buffer_append(task->sbuf, task->buffer); if ( friso_dic_match(friso->dic, __LEX_CJK_WORDS__, task->sbuf->buffer) ) { lex = friso_dic_get(friso->dic, __LEX_CJK_WORDS__, task->sbuf->buffer); wbytes = tbytes; } } /* * matches no word in the dictionary * reset the task->idx to the correct value */ if ( lex == NULL ) { task->idx -= (tbytes - 1); continue; } //yat, matched a item and tanke it to initialize the returning token // also we need to push back the none-matched part by reset the task->idx task->idx -= (tbytes - wbytes); memcpy(task->token->word, lex->word, lex->length); task->token->type = __LEX_CJK_WORDS__; task->token->length = lex->length; task->token->rlen = wbytes; task->token->offset = task->idx - wbytes; task->token->word[(int)lex->length] = '\0'; //check and append the synonyms words if ( config->add_syn && lex->syn != NULL ) { if ( config->spx_out == 1 ) { token_sphinx_output(task, lex); } else { token_normal_output(task, lex, 0); } } return task->token; } return NULL; } /* }}} */ RediSearch-1.2.2/src/dep/friso/friso.h000066400000000000000000000307701364126773500175260ustar00rootroot00000000000000/* * main interface file for friso - free soul. * you could modify it and re-release it but never for commercial use. * * @author chenxin */ #ifndef _friso_h #define _friso_h #include "friso_API.h" #include /* {{{ friso main interface define :: start*/ #define FRISO_VERSION "1.6.2" #define friso_version() FRISO_VERSION #define DEFAULT_SEGMENT_LENGTH 5 #define DEFAULT_MIX_LENGTH 2 #define DEFAULT_LNA_LENGTH 1 #define DEFAULT_NTHRESHOLD 1000000 #define DEFAULT_SEGMENT_MODE 2 /* * Type: friso_lex_t * ----------- * This type used to represent the type of the lexicon. */ typedef enum { __LEX_CJK_WORDS__ = 0, __LEX_CJK_UNITS__ = 1, __LEX_ECM_WORDS__ = 2, //english and chinese mixed words. __LEX_CEM_WORDS__ = 3, //chinese and english mixed words. __LEX_CN_LNAME__ = 4, __LEX_CN_SNAME__ = 5, __LEX_CN_DNAME1__ = 6, __LEX_CN_DNAME2__ = 7, __LEX_CN_LNA__ = 8, __LEX_STOPWORDS__ = 9, __LEX_ENPUN_WORDS__ = 10, __LEX_EN_WORDS__ = 11, __LEX_OTHER_WORDS__ = 15, __LEX_NCSYN_WORDS__ = 16, __LEX_PUNC_WORDS__ = 17, //punctuations __LEX_UNKNOW_WORDS__ = 18 //unrecognized words. } friso_lex_t; typedef friso_hash_t * friso_dic_t; #define __FRISO_LEXICON_LENGTH__ 12 //charset that Friso now support. typedef enum { FRISO_UTF8 = 0, //UTF-8 FRISO_GBK = 1 //GBK } friso_charset_t; /* * Type: friso_mode_t * ------------------ * use to identidy the mode that the friso use. */ typedef enum { __FRISO_SIMPLE_MODE__ = 1, __FRISO_COMPLEX_MODE__ = 2, __FRISO_DETECT_MODE__ = 3 } friso_mode_t; /* friso entry.*/ typedef struct { friso_dic_t dic; //friso dictionary friso_charset_t charset; //project charset. } friso_entry; typedef friso_entry * friso_t; /* * Type: lex_entry_cdt * ------------------- * This type used to represent the lexicon entry struct. */ #define _LEX_APPENSYN_MASK (1 << 0) //append synoyums words. #define lex_appensyn_open(e) e->ctrlMask |= _LEX_APPENSYN_MASK #define lex_appensyn_close(e) e->ctrlMask &= ~_LEX_APPENSYN_MASK #define lex_appensyn_check(e) ((e->ctrlMask & _LEX_APPENSYN_MASK) != 0) typedef struct { /* * the type of the lexicon item. * available value is all the elements in friso_lex_t enum. * and if it is __LEX_OTHER_WORDS__, we need to free it after use it. */ uchar_t length; //the length of the token.(after the convertor of Friso.) uchar_t rlen; //the real length of the token.(before any convert) uchar_t type; uchar_t ctrlMask; //function control mask, like append the synoyums words. uint_t offset; //offset index. fstring word; //fstring py; //pinyin of the word.(invalid) friso_array_t syn; //synoyums words. friso_array_t pos; //part of speech. uint_t fre; //single word frequency. } lex_entry_cdt; typedef lex_entry_cdt * lex_entry_t; /*the segmentation token entry.*/ #define __HITS_WORD_LENGTH__ 64 typedef struct { uchar_t type; //type of the word. (item of friso_lex_t) uchar_t length; //length of the token. uchar_t rlen; //the real length of the token.(in orgin strng) char pos; //part of speech. int offset; //start offset of the word. char word[__HITS_WORD_LENGTH__]; //char py[0]; } friso_token_entry; typedef friso_token_entry * friso_token_t; /* * Type: friso_task_entry * This type used to represent the current segmentation content. * like the text to split, and the current index, token buffer eg.... */ //action control mask for #FRISO_TASK_T#. #define _TASK_CHECK_CF_MASK (1 << 0) //Wether to check the chinese fraction. #define _TASK_START_SS_MASK (1 << 1) //Wether to start the secondary segmentation. #define task_ssseg_open(task) task->ctrlMask |= _TASK_START_SS_MASK #define task_ssseg_close(task) task->ctrlMask &= ~_TASK_START_SS_MASK #define task_ssseg_check(task) ((task->ctrlMask & _TASK_START_SS_MASK) != 0) typedef struct { fstring text; //text to tokenize uint_t idx; //start offset index. uint_t length; //length of the text. uint_t bytes; //latest word bytes in C. uint_t unicode; //latest word unicode number. uint_t ctrlMask; //action control mask. friso_link_t pool; //task pool. string_buffer_t sbuf; //string buffer. friso_token_t token; //token result token; char buffer[7]; //word buffer. (1-6 bytes for an utf-8 word in C). } friso_task_entry; typedef friso_task_entry * friso_task_t; /* task configuration entry.*/ #define _FRISO_KEEP_PUNC_LEN 13 #define friso_en_kpunc(config, ch) (strchr(config->kpuncs, ch) != 0) //typedef friso_token_t ( * friso_next_hit_fn ) ( friso_t, void *, friso_task_t ); //typedef lex_entry_t ( * friso_next_lex_fn ) ( friso_t, void *, friso_task_t ); struct friso_config_struct { ushort_t max_len; //the max match length (4 - 7). ushort_t r_name; //1 for open chinese name recognition 0 for close it. ushort_t mix_len; //the max length for the CJK words in a mix string. ushort_t lna_len; //the max length for the chinese last name adron. ushort_t add_syn; //append synonyms tokenizer words. ushort_t clr_stw; //clear the stopwords. ushort_t keep_urec; //keep the unrecongnized words. ushort_t spx_out; //use sphinx output customize. ushort_t en_sseg; //start the secondary segmentation. ushort_t st_minl; //min length of the secondary segmentation token. uint_t nthreshold; //the threshold value for a char to make up a chinese name. friso_mode_t mode; //Complex mode or simple mode //pointer to the function to get the next token friso_token_t (*next_token) (friso_t, struct friso_config_struct *, friso_task_t); //pointer to the function to get the next cjk lex_entry_t lex_entry_t (*next_cjk ) (friso_t, struct friso_config_struct *, friso_task_t); char kpuncs[_FRISO_KEEP_PUNC_LEN]; //keep punctuations buffer. }; typedef struct friso_config_struct friso_config_entry; typedef friso_config_entry * friso_config_t; /* * Function: friso_new; * Usage: vars = friso_new( void ); * -------------------------------- * This function used to create a new empty friso friso_t; * with default value. */ FRISO_API friso_t friso_new( void ); //creat a friso entry with a default value from a configuratile file. //@return 1 for successfully and 0 for failed. FRISO_API int friso_init_from_ifile( friso_t, friso_config_t, fstring ); /* * Function: friso_free_vars; * Usage: friso_free( vars ); * -------------------------- * This function is used to free the allocation of the given vars. */ FRISO_API void friso_free( friso_t ); /* * Function: friso_set_dic * Usage: dic = friso_set_dic( vars, dic ); * ---------------------------------------- * This function is used to set the dictionary for friso. * and firso_dic_t is the pointer of a hash table array. */ //FRISO_API void friso_set_dic( friso_t, friso_dic_t ); #define friso_set_dic(friso, dic)\ do {\ friso->dic = dic;\ } while (0) /* * Function: friso_set_mode * Usage: friso_set_mode( vars, mode ); * ------------------------------------ * This function is used to set the mode(complex or simple) that you want to friso to use. */ FRISO_API void friso_set_mode( friso_config_t, friso_mode_t ); /*create a new friso configuration entry and initialize it with the default value.*/ FRISO_API friso_config_t friso_new_config( void ); //initialize the specified friso config entry with default value. FRISO_API void friso_init_config( friso_config_t ); //free the specified friso configuration entry. //FRISO_API void friso_free_config( friso_config_t ); #define friso_free_config(cfg) FRISO_FREE(cfg) /* * Function: friso_new_task; * Usage: segment = friso_new_task( void ); * ---------------------------------------- * This function is used to create a new friso segment type; */ FRISO_API friso_task_t friso_new_task( void ); /* * Function: friso_free_task; * Usage: friso_free_task( task ); * ------------------------------- * This function is used to free the allocation of function friso_new_segment(); */ FRISO_API void friso_free_task( friso_task_t ); //create a new friso token FRISO_API friso_token_t friso_new_token( void ); //free the given friso token //FRISO_API void friso_free_token( friso_token_t ); #define friso_free_token(token) FRISO_FREE(token) /* * Function: friso_set_text * Usage: friso_set_text( task, text ); * ------------------------------------ * This function is used to set the text that is going to segment. */ FRISO_API void friso_set_text( friso_task_t, fstring ); //get the next cjk word with mmseg simple mode FRISO_API lex_entry_t next_simple_cjk( friso_t, friso_config_t, friso_task_t ); //get the next cjk word with mmseg complex mode(mmseg core algorithm) FRISO_API lex_entry_t next_complex_cjk( friso_t, friso_config_t, friso_task_t ); /* * Function: next_mmseg_token * Usage: word = next_mmseg_token( vars, seg ); * -------------------------------------- * This function is used to get next word that friso segmented * with a split mode of __FRISO_SIMPLE_MODE__ or __FRISO_COMPLEX_MODE__ */ FRISO_API friso_token_t next_mmseg_token( friso_t, friso_config_t, friso_task_t ); //__FRISO_DETECT_MODE__ FRISO_API friso_token_t next_detect_token( friso_t, friso_config_t, friso_task_t ); /* }}} friso main interface define :: end*/ /* {{{ lexicon interface define :: start*/ /* * Function: friso_dic_new * Usage: dic = friso_new_dic(); * ----------------------------- * This function used to create a new dictionary.(memory allocation). */ FRISO_API friso_dic_t friso_dic_new( void ); FRISO_API fstring file_get_line( fstring, FILE * ); /* * Function: friso_dic_free * Usage: friso_dic_free( void ); * ------------------------------ * This function is used to free all the allocation of friso_dic_new. */ FRISO_API void friso_dic_free( friso_dic_t ); //create a new lexicon entry. FRISO_API lex_entry_t new_lex_entry( fstring, friso_array_t, uint_t, uint_t, uint_t ); //free the given lexicon entry. //free all the allocations that its synonyms word's items pointed to //when the second arguments is 1 FRISO_API void free_lex_entry_full( lex_entry_t ); FRISO_API void free_lex_entry( lex_entry_t ); /* * Function: friso_dic_load * Usage: friso_dic_load( friso, friso_lex_t, path, length ); * -------------------------------------------------- * This function is used to load dictionary from a given path. * no length limit when length less than 0. */ FRISO_API void friso_dic_load( friso_t, friso_config_t, friso_lex_t, fstring, uint_t ); /* * load the lexicon configuration file. * and load all the valid lexicon from the conf file. */ FRISO_API void friso_dic_load_from_ifile( friso_t, friso_config_t, fstring, uint_t ); /* * Function: friso_dic_match * Usage: friso_dic_add( dic, friso_lex_t, word, syn ); * ---------------------------------------------- * This function used to put new word into the dictionary. */ FRISO_API void friso_dic_add( friso_dic_t, friso_lex_t, fstring, friso_array_t ); /* * Function: friso_dic_add_with_fre * Usage: friso_dic_add_with_fre( dic, friso_lex_t, word, value, syn, fre ); * ------------------------------------------------------------------- * This function used to put new word width frequency into the dictionary. */ FRISO_API void friso_dic_add_with_fre( friso_dic_t, friso_lex_t, fstring, friso_array_t, uint_t ); /* * Function: friso_dic_match * Usage: result = friso_dic_match( dic, friso_lex_t, word ); * ---------------------------------------------------- * This function is used to check the given word is in the dictionary or not. */ FRISO_API int friso_dic_match( friso_dic_t, friso_lex_t, fstring ); /* * Function: friso_dic_get * Usage: friso_dic_get( dic, friso_lex_t, word ); * ----------------------------------------- * This function is used to search the specified lex_entry_t. */ FRISO_API lex_entry_t friso_dic_get( friso_dic_t, friso_lex_t, fstring ); /* * Function: friso_spec_dic_size * Usage: friso_spec_dic_size( dic, friso_lex_t ) * This function is used to get the size of the dictionary with a specified type. */ FRISO_API uint_t friso_spec_dic_size( friso_dic_t, friso_lex_t ); FRISO_API uint_t friso_all_dic_size( friso_dic_t ); /* }}} lexicon interface define :: end*/ #endif /*end ifndef*/ RediSearch-1.2.2/src/dep/friso/friso_API.h000066400000000000000000000261411364126773500202140ustar00rootroot00000000000000/* * friso ADT application interface header source file. * 1. string bufffer interface. * 2. hashmap interface. * 3. dynamaic array interface. * 4. double link list interface. * * @author chenxin */ #ifndef _friso_api_h #define _friso_api_h #include #include //yat, just take it as this way, 99 percent you will find no problem #if ( defined(_WIN32) || defined(_WINDOWS_) || defined(__WINDOWS_) ) # define FRISO_WINNT #else # define FRISO_LINUX #endif #ifdef FRISO_WINNT # define FRISO_API extern __declspec(dllexport) # define __STATIC_API__ static #else /*platform shared library statement :: unix*/ # define FRISO_API extern # define __STATIC_API__ static inline #endif #define ___ALLOCATION_ERROR___ \ printf("Unable to do the memory allocation, program will now exit\n" ); \ exit(1); #define print(str) printf("%s", str ) #define println(str) printf("%s\n", str ) /* * memory allocation macro definition. * cause we should use emalloc,ecalloc .ege. in php. * so you could make it better apdat the php environment. */ #define FRISO_CALLOC(_bytes, _blocks) calloc(_bytes, _blocks) #define FRISO_MALLOC(_bytes) malloc(_bytes) #define FRISO_FREE( _ptr ) free( _ptr ) typedef unsigned short ushort_t; typedef unsigned char uchar_t; typedef unsigned int uint_t; typedef char * fstring; /* {{{ fstring handle interface define::start. */ #define __CHAR_BYTES__ 8 #define __BUFFER_DEFAULT_LENGTH__ 16 typedef struct { fstring buffer; uint_t length; uint_t allocs; } string_buffer_entry; typedef string_buffer_entry * string_buffer_t; //FRISO_API string_buffer_t new_string_buffer( void ); #define new_string_buffer() \ new_string_buffer_with_opacity( __DEFAULT_ARRAY_LIST_OPACITY__ ); FRISO_API string_buffer_t new_string_buffer_with_opacity( uint_t ); FRISO_API string_buffer_t new_string_buffer_with_string( fstring str ); /* * this function will copy the chars that the fstring pointed. * to the buffer. * this may cause the resize action of the buffer. */ FRISO_API void string_buffer_append( string_buffer_t, fstring ); FRISO_API void string_buffer_append_char( string_buffer_t, char ); //insert the given fstring from the specified position. FRISO_API void string_buffer_insert( string_buffer_t, uint_t idx, fstring ); //remove the char in the specified position. FRISO_API fstring string_buffer_remove( string_buffer_t, uint_t idx, uint_t ); /* * turn the string_buffer to a string. * or return the buffer of the string_buffer. */ FRISO_API string_buffer_t string_buffer_trim( string_buffer_t ); /* * free the given fstring buffer. * and this function will not free the allocations of the * the string_buffer_t->buffer, we return it to you, if there is * a necessary you could free it youself by calling free(); */ FRISO_API fstring string_buffer_devote( string_buffer_t ); /* * clear the given fstring buffer. * reset its buffer with 0 and reset its length to 0. */ FRISO_API void string_buffer_clear( string_buffer_t ); //free the fstring buffer include the buffer. FRISO_API void free_string_buffer( string_buffer_t ); /** * fstring specified chars tokenizer functions * * @date 2013-06-08 */ typedef struct { fstring source; uint_t srcLen; fstring delimiter; uint_t delLen; uint_t idx; } string_split_entry; typedef string_split_entry * string_split_t; /** * create a new string_split_entry. * * @param source * @return string_split_t; */ FRISO_API string_split_t new_string_split( fstring, fstring ); FRISO_API void string_split_reset( string_split_t, fstring, fstring ); FRISO_API void string_split_set_source( string_split_t, fstring ); FRISO_API void string_split_set_delimiter( string_split_t, fstring ); FRISO_API void free_string_split( string_split_t ); /** * get the next split fstring, and copy the * splited fstring into the __dst buffer . * * @param string_split_t * @param __dst * @return fstring (NULL if reach the end of the source * or there is no more segmentation) */ FRISO_API fstring string_split_next( string_split_t, fstring ); /* }}} */ /* {{{ dynamaic array interface define::start*/ #define __DEFAULT_ARRAY_LIST_OPACITY__ 8 /*friso array list entry struct*/ typedef struct { void **items; uint_t allocs; uint_t length; } friso_array_entry; typedef friso_array_entry * friso_array_t; //create a new friso dynamic array. //FRISO_API friso_array_t new_array_list( void ); #define new_array_list() new_array_list_with_opacity(__DEFAULT_ARRAY_LIST_OPACITY__) //create a new friso dynamic array with the given opacity FRISO_API friso_array_t new_array_list_with_opacity( uint_t ); /* * free the given friso array. * and its items, but never where the items's item to pointed to . */ FRISO_API void free_array_list( friso_array_t ); //add a new item to the array. FRISO_API void array_list_add( friso_array_t, void * ); //insert a new item at a specifed position. FRISO_API void array_list_insert( friso_array_t, uint_t, void * ); //get a item at a specified position. FRISO_API void *array_list_get( friso_array_t, uint_t ); /* * set the item at a specified position. * this will return the old value. */ FRISO_API void *array_list_set( friso_array_t, uint_t, void * ); /* * remove the given item at a specified position. * this will return the value of the removed item. */ FRISO_API void *array_list_remove( friso_array_t, uint_t ); /*trim the array list for final use.*/ FRISO_API friso_array_t array_list_trim( friso_array_t ); /* * clear the array list. * this function will free all the allocations that the pointer pointed. * but will not free the point array allocations, * and will reset the length of it. */ FRISO_API friso_array_t array_list_clear( friso_array_t ); //return the size of the array. //FRISO_API uint_t array_list_size( friso_array_t ); #define array_list_size( array ) array->length //return the allocations of the array. //FRISO_API uint_t array_list_allocs( friso_array_t ); #define array_list_allocs( array ) array->allocs //check if the array is empty. //FRISO_API int array_list_empty( friso_array_t ); #define array_list_empty( array ) ( array->length == 0 ) /* }}} dynamaic array interface define::end*/ /* {{{ link list interface define::start*/ struct friso_link_node { void *value; struct friso_link_node *prev; struct friso_link_node *next; }; typedef struct friso_link_node link_node_entry; typedef link_node_entry * link_node_t; /* * link list adt */ typedef struct { link_node_t head; link_node_t tail; uint_t size; } friso_link_entry; typedef friso_link_entry * friso_link_t; //create a new link list FRISO_API friso_link_t new_link_list( void ); //free the specified link list FRISO_API void free_link_list( friso_link_t ); //return the size of the current link list. //FRISO_API uint_t link_list_size( friso_link_t ); #define link_list_size( link ) link->size //check the given link is empty or not. //FRISO_API int link_list_empty( friso_link_t ); #define link_list_empty( link ) (link->size == 0) //clear all the nodes in the link list( except the head and the tail ). FRISO_API friso_link_t link_list_clear( friso_link_t link ); //add a new node to the link list.(append from the tail) FRISO_API void link_list_add( friso_link_t, void * ); //add a new node before the specified node FRISO_API void link_list_insert_before( friso_link_t, uint_t, void * ); //get the node in the current index. FRISO_API void *link_list_get( friso_link_t, uint_t ); //modify the node in the current index. FRISO_API void *link_list_set( friso_link_t, uint_t, void * ); //remove the specified link node FRISO_API void *link_list_remove( friso_link_t, uint_t ); //remove the given node FRISO_API void *link_list_remove_node( friso_link_t, link_node_t ); //remove the node from the frist. FRISO_API void *link_list_remove_first( friso_link_t ); //remove the last node from the link list FRISO_API void *link_list_remove_last( friso_link_t ); //append a node from the end. FRISO_API void link_list_add_last( friso_link_t, void * ); //add a node at the begining of the link list. FRISO_API void link_list_add_first( friso_link_t, void * ); /* }}} link list interface define::end*/ /* {{{ hashtable interface define :: start*/ struct hash_entry { fstring _key; //the node key void * _val; //the node value struct hash_entry * _next; }; typedef struct hash_entry friso_hash_entry; typedef friso_hash_entry * hash_entry_t; typedef void (*fhash_callback_fn_t)( hash_entry_t ); typedef struct { uint_t length; uint_t size; float factor; uint_t threshold; hash_entry_t *table; } friso_hash_cdt; typedef friso_hash_cdt * friso_hash_t; //default value for friso_hash_cdt #define DEFAULT_LENGTH 31 #define DEFAULT_FACTOR 0.85f /* * Function: new_hash_table * Usage: table = new_hash_table(); * -------------------------------- * this function allocates a new symbol table with no entries. */ FRISO_API friso_hash_t new_hash_table( void ); /* * Function: free_hash_table * Usage: free_hash_table( table ); * -------------------------------------- * this function will free all the allocation for memory. */ FRISO_API void free_hash_table( friso_hash_t, fhash_callback_fn_t ); /* * Function: put_new_mapping * Usage: put_mapping( table, key, value ); * ---------------------------------------- * the function associates the specified key with the given value. */ FRISO_API void *hash_put_mapping( friso_hash_t, fstring, void * ); /* * Function: is_mapping_exists * Usage: bool = is_mapping_exists( table, key ); * ---------------------------------------------- * this function check the given key mapping is exists or not. */ FRISO_API int hash_exist_mapping( friso_hash_t, fstring ); /* * Function: get_mapping_value * Usage: value = get_mapping_value( table, key ); * ----------------------------------------------- * this function return the value associated with the given key. * UNDEFINED will be return if the mapping is not exists. */ FRISO_API void * hash_get_value( friso_hash_t, fstring ); /* * Function: remove_mapping * Usage: remove_mapping( table, key ); * ------------------------------------ * This function is used to remove the mapping associated with the given key. */ FRISO_API hash_entry_t hash_remove_mapping( friso_hash_t, fstring ); /* * Function: get_table_size * Usage: size = get_table_size( table ); * -------------------------------------- * This function is used to count the size of the specified table. */ //FRISO_API uint_t hash_get_size( friso_hash_t ); #define hash_get_size( hash ) hash->size /* }}} hashtable interface define :: end*/ /* {{{ utf8 string interface define :: start*/ /* * Function: get_utf8_bytes * * */ FRISO_API int get_utf8_bytes(char); /* * Function: get_utf8_unicode * * */ FRISO_API int get_utf8_unicode(const fstring); /* * Function: unicode_to_utf8 * * */ FRISO_API int unicode_to_utf8(uint_t, fstring); /* }}} utf8 string interface define :: start*/ #endif /*end ifndef*/ RediSearch-1.2.2/src/dep/friso/friso_GBK.c000066400000000000000000000211201364126773500201710ustar00rootroot00000000000000/** * Friso GBK about function implements source file. * @package src/friso_GBK.c . * * @author chenxin */ #include #include #include #include "friso_API.h" #include "friso_ctype.h" /* read the next GBK word from the specified position. * * @return int the bytes of the current readed word. */ FRISO_API int gbk_next_word( friso_task_t task, uint_t *idx, fstring __word ) { int c; if ( *idx >= task->length ) return 0; c = (uchar_t)task->text[*idx]; if ( c <= 0x80 ) { task->bytes = 1; } else { task->bytes = 2; } //copy the word to the buffer. memcpy(__word, task->text + (*idx), task->bytes); (*idx) += task->bytes; __word[task->bytes] = '\0'; return task->bytes; } //get the bytes of a gbk char. //FRISO_API int get_gbk_bytes( char c ) //{ // return 1; //} //check if the given buffer is a gbk word (ANSII string). // included the simplified and traditional words. FRISO_API int gbk_cn_string(char *str) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; //GBK/2: gb2312 chinese word. return ( ((c1 >= 0xb0 && c1 <= 0xf7) && (c2 >= 0xa1 && c2 <= 0xfe)) //GBK/3: extend chinese words. || ((c1 >= 0x81 && c1 <= 0xa0) && ( (c2 >= 0x40 && c2 <= 0x7e) || (c2 >= 0x80 && c2 <= 0xfe) )) //GBK/4: extend chinese words. || ((c1 >= 0xaa && c1 <= 0xfe) && ( (c2 >= 0x40 && c2 <= 0xfe) || (c2 >= 0x80 && c2 <= 0xa0) )) ); } /*check if the given char is a ASCII letter * include all the arabic number, letters and english puntuations.*/ FRISO_API int gbk_halfwidth_en_char( char c ) { int u = (uchar_t) c; return ( u >= 32 && u <= 126 ); } /* * check if the given char is a full-width latain. * include the full-width arabic numeber, letters. * but not the full-width puntuations. */ FRISO_API int gbk_fullwidth_en_char( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; return ( (c1 == 0xA3) && ( (c2 >= 0xB0 && c2 <= 0xB9) //arabic numbers. || ( c2 >= 0xC1 && c2 <= 0xDA ) //uppercase letters. || ( c2 >= 0xE1 && c2 <= 0xFA) ) ); //lowercase letters. } //check if the given char is a upper case english letter. // included the full-width and half-width letters. FRISO_API int gbk_uppercase_letter( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; if ( c1 <= 0x80 ) { //half-width return ( c1 >= 65 && c1 <= 90 ); } else { //full-width return ( c1 == 0xa3 && ( c2 >= 0xc1 && c2 <= 0xda ) ); } } //check if the given char is a lower case char. // included the full-width and half-width letters. FRISO_API int gbk_lowercase_letter( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; if ( c1 <= 0x80 ) { //half-width return ( c1 >= 97 && c1 <= 122 ); } else { //full-width return ( c1 == 0xa3 && ( c2 >= 0xe1 && c2 <= 0xfa ) ); } } //check if the given char is a arabic numeric. // included the full-width and half-width arabic numeric. FRISO_API int gbk_numeric_letter( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; if ( c1 <= 0x80 ) { //half-width return ( c1 >= 48 && c1 <= 57 ); } else { //full-width return ( ( c1 == 0xa3 ) && ( c2 >= 0xb0 && c2 <= 0xb9 ) ); } } /* * check if the given fstring is make up with numeric chars. * both full-width,half-width numeric is ok. */ FRISO_API int gbk_numeric_string( char *str ) { char *s = str; int c1 = 0; int c2 = 0; while ( *s != '\0' ) { c1 = (uchar_t) (*s++); if ( c1 <= 0x80 ) { //half-width if ( c1 < 48 || c2 > 57 ) return 0; } else { //full-width if ( c1 != 0xa3 ) return 0; c2 = (uchar_t) (*s++); if ( c2 < 0xb0 || c2 > 0xb9 ) return 0; } } return 1; } FRISO_API int gbk_decimal_string( char *str ) { int c1 = 0; int c2 = 0; int len = strlen(str), i, p = 0; //point header check. if ( str[0] == '.' || str[len - 1] == '.' ) return 0; for ( i = 0; i < len; ) { c1 = (uchar_t) str[i++]; //count the number of the points. if ( c1 == 46 ) { p++; continue; } if ( c1 <= 0x80 ) { //half-width if ( c1 < 48 || c1 > 57 ) return 0; } else { //full-width if ( c1 != 0xa3 ) return 0; c2 = (uchar_t) str[i++]; if ( c2 < 0xb0 || c2 > 0xb9 ) return 0; } } return (p == 1); } //check if the given char is a english(ASCII) letter. // (full-width and half-width), not the punctuation/arabic of course. FRISO_API int gbk_en_letter( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; if ( c1 <= 0x80 ) { return ( (c1 >= 65 && c1 <= 90) //lowercase || (c1 >= 97 && c1 <= 122)); //uppercase } else { return ( (c1 == 0xa3) && ( ( c2 >= 0xc1 && c2 <= 0xda ) //lowercase || ( c2 >= 0xe1 && c2 <= 0xfa ) ) ); //uppercase } return 0; } //check the given char is a whitespace or not. // included full-width and half-width whitespace. FRISO_API int gbk_whitespace( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; if ( c1 <= 0x80 ) { return (c1 == 32); } else { return ( c1 == 0xa3 && c2 == 0xa0 ); } } /* check if the given char is a letter number like 'ⅠⅡ' */ FRISO_API int gbk_letter_number( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; return ( (c1 == 0xa2) && ( ( c2 >= 0xa1 && c2 <= 0xb0 ) //lowercase || ( c2 >= 0xf0 && c2 <= 0xfe ) ) ); //uppercase } /* * check if the given char is a other number like '①⑩⑽㈩' */ FRISO_API int gbk_other_number( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; return ( ( c1 == 0xa2 ) && ( c2 >= 0xc5 && c2 <= 0xee ) ); } //check if the given char is a english punctuation. FRISO_API int gbk_en_punctuation( char c ) { int u = (uchar_t) c; return ( (u > 32 && u < 48) || ( u > 57 && u < 65 ) || ( u > 90 && u < 97 ) || ( u > 122 && u < 127 ) ); } //check the given char is a chinese punctuation. FRISO_API int gbk_cn_punctuation( char *str ) { int c1 = (uchar_t) str[0]; int c2 = (uchar_t) str[1]; //full-width en punctuation. return ( (c1 == 0xa3 && (( c2 >= 0xa1 && c2 <= 0xaf ) || ( c2 >= 0xba && c2 <= 0xc0 ) || ( c2 >= 0xdb && c2 <= 0xe0 ) || ( c2 >= 0xfb && c2 <= 0xfe ) )) //chinese punctuation. || (c1 == 0xa1 && ( (c2 >= 0xa1 && c2 <= 0xae) || ( c2 >= 0xb0 && c2 <= 0xbf ) )) //A6 area special punctuations:" " || (c1 == 0xa6 && (c2 >= 0xf9 && c2 <= 0xfe)) //A8 area special punctuations: " ˊˋ˙–―‥‵℅ " || (c1 == 0xa8 && (c2 >= 0x40 && c2 <= 0x47)) ); } /* {{{ '@', '$','%', '^', '&', '-', ':', '.', '/', '\'', '#', '+' */ //cause it it the same as utf-8, we use utf8's interface instead. //@see the friso_ctype.h#gbk_keep_punctuation macro defined. //static friso_hash_t __keep_punctuations_hash__ = NULL; /* @Deprecated * check the given char is an english keep punctuation.*/ //FRISO_API int gbk_keep_punctuation( char *str ) //{ // if ( __keep_punctuations_hash__ == NULL ) { // __keep_punctuations_hash__ = new_hash_table(); // hash_put_mapping( __keep_punctuations_hash__, "@", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "$", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "%", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "^", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "&", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "-", NULL ); // hash_put_mapping( __keep_punctuations_hash__, ":", NULL ); // hash_put_mapping( __keep_punctuations_hash__, ".", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "/", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "'", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "#", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "+", NULL ); // } // //check the hash. // return hash_exist_mapping( __keep_punctuations_hash__, str ); //} /* }}} */ //check if the given english char is a full-width char or not. //FRISO_API int gbk_fullwidth_char( char *str ) //{ // return 1; //} RediSearch-1.2.2/src/dep/friso/friso_UTF8.c000066400000000000000000000312521364126773500203230ustar00rootroot00000000000000/** * Friso utf8 about function implements source file. * @package src/friso_UTF8.c . * * @author chenxin */ #include #include #include #include "friso_API.h" #include "friso_ctype.h" #include "friso_simptrad.h" /* read the next utf-8 word from the specified position. * * @return int the bytes of the current readed word. */ FRISO_API int utf8_next_word( friso_task_t task, uint_t *idx, fstring __word ) { if ( *idx >= task->length ) return 0; // Get the number of bytes the current Unicode character occupies in UTF-8 task->unicode = get_utf8_unicode(task->text + (*idx)); if (task->unicode >= Cn_T2S_MinChr && task->unicode <= Cn_T2S_MaxChr) { uint16_t alt = Cn_T2S[task->unicode]; if (alt) { task->unicode = alt; } } // Encode to UTF-8 task->bytes = unicode_to_utf8(task->unicode, __word); __word[task->bytes] = '\0'; *idx += task->bytes; return task->bytes; } /* * print a character in a binary style. * * @param int */ FRISO_API void print_char_binary( char value ) { register uint_t t; for ( t = 0; t < __CHAR_BYTES__; t++ ) { if ( ( value & 0x80 ) == 0x80 ) { printf("1"); } else { printf("0"); } value <<= 1; } } /* * get the bytes of a utf-8 char. * between 1 - 6. * * @param __char * @return int */ FRISO_API int get_utf8_bytes( char value ) { register uint_t t = 0; //one byte ascii char. if ( ( value & 0x80 ) == 0 ) return 1; for ( ; ( value & 0x80 ) != 0; value <<= 1 ) { t++; } return t; } /* * get the unicode serial of a utf-8 char. * * @param ch * @return int. */ FRISO_API int get_utf8_unicode( const fstring ch ) { int code = 0, bytes = get_utf8_bytes( *ch ); register uchar_t *bit = ( uchar_t * ) &code; register char b1,b2,b3; switch ( bytes ) { case 1: *bit = *ch; break; case 2: b1 = *ch; b2 = *(ch + 1); *bit = (b1 << 6) + (b2 & 0x3F); *(bit+1) = (b1 >> 2) & 0x07; break; case 3: b1 = *ch; b2 = *(ch + 1); b3 = *(ch + 2); *bit = (b2 << 6) + (b3 & 0x3F); *(bit+1) = (b1 << 4) + ((b2 >> 2) & 0x0F); break; //ignore the ones that are larger than 3 bytes; } return code; } //turn the unicode serial to a utf-8 string. FRISO_API int unicode_to_utf8( uint_t u, fstring __word ) { if ( u <= 0x0000007F ) { //U-00000000 - U-0000007F //0xxxxxxx *__word = ( u & 0x7F ); return 1; } else if ( u >= 0x00000080 && u <= 0x000007FF ) { //U-00000080 - U-000007FF //110xxxxx 10xxxxxx *( __word + 1 ) = ( u & 0x3F) | 0x80; *__word = ((u >> 6) & 0x1F) | 0xC0; return 2; } else if ( u >= 0x00000800 && u <= 0x0000FFFF ) { //U-00000800 - U-0000FFFF //1110xxxx 10xxxxxx 10xxxxxx *( __word + 2 ) = ( u & 0x3F) | 0x80; *( __word + 1 ) = ((u >> 6) & 0x3F) | 0x80; *__word = ((u >> 12) & 0x0F) | 0xE0; return 3; } else if ( u >= 0x00010000 && u <= 0x001FFFFF ) { //U-00010000 - U-001FFFFF //11110xxx 10xxxxxx 10xxxxxx 10xxxxxx *( __word + 3 ) = ( u & 0x3F) | 0x80; *( __word + 2 ) = ((u >> 6) & 0x3F) | 0x80; *( __word + 1 ) = ((u >> 12) & 0x3F) | 0x80; *__word = ((u >> 18) & 0x07) | 0xF0; return 4; } else if ( u >= 0x00200000 && u <= 0x03FFFFFF ) { //U-00200000 - U-03FFFFFF //111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx *( __word + 4 ) = ( u & 0x3F) | 0x80; *( __word + 3 ) = ((u >> 6) & 0x3F) | 0x80; *( __word + 2 ) = ((u >> 12) & 0x3F) | 0x80; *( __word + 1 ) = ((u >> 18) & 0x3F) | 0x80; *__word = ((u >> 24) & 0x03) | 0xF8; return 5; } else if ( u >= 0x04000000 && u <= 0x7FFFFFFF ) { //U-04000000 - U-7FFFFFFF //1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx *( __word + 5 ) = ( u & 0x3F) | 0x80; *( __word + 4 ) = ((u >> 6) & 0x3F) | 0x80; *( __word + 3 ) = ((u >> 12) & 0x3F) | 0x80; *( __word + 2 ) = ((u >> 18) & 0x3F) | 0x80; *( __word + 1 ) = ((u >> 24) & 0x3F) | 0x80; *__word = ((u >> 30) & 0x01) | 0xFC; return 6; } return 0; } /* * check the given char is a CJK char or not. * 2E80-2EFF CJK 部首补充 * 2F00-2FDF 康熙字典部首 * 3000-303F CJK 符号和标点 --ignore * 31C0-31EF CJK 笔画 * 3200-32FF 封闭式 CJK 文字和月份 --ignore. * 3300-33FF CJK 兼容 * 3400-4DBF CJK 统一表意符号扩展 A * 4DC0-4DFF 易经六十四卦符号 * 4E00-9FBF CJK 统一表意符号 * F900-FAFF CJK 兼容象形文字 * FE30-FE4F CJK 兼容形式 * FF00-FFEF 全角ASCII、全角标点 --ignore (as basic latin) * * Japanese: * 3040-309F 日本平假名 * 30A0-30FF 日本片假名 * 31F0-31FF 日本片假名拼音扩展 * * Korean: * AC00-D7AF 韩文拼音 * 1100-11FF 韩文字母 * 3130-318F 韩文兼容字母 * * @param ch :pointer to the char * @return int : 1 for yes and 0 for not. */ //Comment one of the following macro define //to clear the check of the specified language. #define FRISO_CJK_CHK_C //#define FRISO_CJK_CHK_J //#define FRISO_CJK_CHK_K FRISO_API int utf8_cjk_string( uint_t u ) { int c = 0, j = 0, k = 0; //Chinese. #ifdef FRISO_CJK_CHK_C c = ( ( u >= 0x4E00 && u <= 0x9FBF ) || ( u >= 0x2E80 && u <= 0x2EFF ) || ( u >= 0x2F00 && u <= 0x2FDF ) || ( u >= 0x31C0 && u <= 0x31EF ) //|| ( u >= 0x3200 && u <= 0x32FF ) || ( u >= 0x3300 && u <= 0x33FF ) //|| ( u >= 0x3400 && u <= 0x4DBF ) || ( u >= 0x4DC0 && u <= 0x4DFF ) || ( u >= 0xF900 && u <= 0xFAFF ) || ( u >= 0xFE30 && u <= 0xFE4F ) ); #endif //Japanese. #ifdef FRISO_CJK_CHK_J j = ( ( u >= 0x3040 && u <= 0x309F ) || ( u >= 0x30A0 && u <= 0x30FF ) || ( u >= 0x31F0 && u <= 0x31FF ) ); #endif //Korean #ifdef FRISO_CJK_CHK_K k = ( ( u >= 0xAC00 && u <= 0xD7AF ) || ( u >= 0x1100 && u <= 0x11FF ) || ( u >= 0x3130 && u <= 0x318F ) ); #endif return ( c || j || k ); } /* * check the given char is a Basic Latin letter or not. * include all the letters and english punctuations. * * @param c * @return int 1 for yes and 0 for not. */ FRISO_API int utf8_halfwidth_en_char( uint_t u ) { return ( u >= 32 && u <= 126 ); } /* * check the given char is a full-width latain or not. * include the full-width arabic numeber, letters. * but not the full-width punctuations. * * @param c * @return int */ FRISO_API int utf8_fullwidth_en_char( uint_t u ) { return ( (u >= 65296 && u <= 65305 ) //arabic number || ( u >= 65313 && u <= 65338 ) //upper case letters || ( u >= 65345 && u <= 65370 ) ); //lower case letters } //check the given char is a upper case letters or not. // included the full-width and half-width letters. FRISO_API int utf8_uppercase_letter( uint_t u ) { if ( u > 65280 ) u -= 65248; return ( u >= 65 && u <= 90 ); } //check the given char is a upper case letters or not. // included the full-width and half-width letters. FRISO_API int utf8_lowercase_letter( uint_t u ) { if ( u > 65280 ) u -= 65248; return ( u >= 97 && u <= 122 ); } //check the given char is a numeric // included the full-width and half-width arabic numeric. FRISO_API int utf8_numeric_letter( uint_t u ) { if ( u > 65280 ) u -= 65248; //make full-width half-width. return ( ( u >= 48 && u <= 57 ) ); } //check the given char is a english letter.(included the full-width) // not the punctuation of course. FRISO_API int utf8_en_letter( uint_t u ) { if ( u > 65280 ) u -= 65248; return ( ( u >= 65 && u <= 90 ) || ( u >= 97 && u <= 122 ) ); } /* * check if the given fstring is make up with numeric. * both full-width,half-width numeric is ok. * * @param str * @return int * 65296, 0 * 65297, 1 * 65298, 2 * 65299, 3 * 65300, 4 * 65301, 5 * 65302, 6 * 65303, 7 * 65304, 8 * 65305, 9 */ FRISO_API int utf8_numeric_string( const fstring str ) { fstring s = str; int bytes, u; while ( *s != '\0' ) { //if ( ! utf8_numeric_letter( get_utf8_unicode( s++ ) ) ) { // return 0; //} //new implemention. //@date 2013-10-14 bytes = 1; if ( *s < 0 ) { //full-width chars. u = get_utf8_unicode(s); bytes = get_utf8_bytes(*s); if ( u < 65296 || u > 65305 ) return 0; } else if ( *s < 48 || *s > 57 ) { return 0; } s += bytes; } return 1; } FRISO_API int utf8_decimal_string( const fstring str ) { int len = strlen(str), i, p = 0; int bytes = 0, u; if ( str[0] == '.' || str[len-1] == '.' ) return 0; for ( i = 1; i < len; bytes = 1 ) { //count the number of char '.' if ( str[i] == '.' ) { i++; p++; continue; } else if ( str[i] < 0 ) { //full-width numeric. u = get_utf8_unicode(str+i); bytes = get_utf8_bytes(str[i]); if ( u < 65296 || u > 65305 ) return 0; } else if ( str[i] < 48 || str[i] > 57 ) { return 0; } i += bytes; } return (p == 1); } /* * check the given char is a whitespace or not. * * @param ch * @return int 1 for yes and 0 for not. */ FRISO_API int utf8_whitespace( uint_t u ) { if ( u == 32 || u == 12288 ) { return 1; } return 0; } /* * check the given char is a english punctuation. * * @param ch * @return int */ FRISO_API int utf8_en_punctuation( uint_t u ) { //if ( u > 65280 ) u = u - 65248; //make full-width half-width return ( (u > 32 && u < 48) || ( u > 57 && u < 65 ) || ( u > 90 && u < 97 ) //added @2013-08-31 || ( u > 122 && u < 127 ) ); } /* * check the given char is a chinese punctuation. * @date 2013-08-31 added. * * @param ch * @return int */ FRISO_API int utf8_cn_punctuation( uint_t u ) { return ( ( u > 65280 && u < 65296 ) || ( u > 65305 && u < 65312 ) || ( u > 65338 && u < 65345 ) || ( u > 65370 && u < 65382 ) //cjk symbol and punctuation.(added 2013-09-06) //from http://www.unicode.org/charts/PDF/U3000.pdf || ( u >= 12289 && u <= 12319) ); } /* * check if the given char is a letter number in unicode. * like 'ⅠⅡ'. * @param ch * @return int */ FRISO_API int utf8_letter_number( uint_t u ) { return 0; } /* * check if the given char is a other number in unicode. * like '①⑩⑽㈩'. * @param ch * @return int */ FRISO_API int utf8_other_number( uint_t u ) { return 0; } //A macro define has replace this. //FRISO_API int is_en_punctuation( char c ) //{ // return utf8_en_punctuation( (uint_t) c ); //} /* {{{ '@', '$','%', '^', '&', '-', ':', '.', '/', '\'', '#', '+' */ //static friso_hash_t __keep_punctuations_hash__ = NULL; /* @Deprecated * check the given char is an english keep punctuation.*/ //FRISO_API int utf8_keep_punctuation( fstring str ) //{ // if ( __keep_punctuations_hash__ == NULL ) // { // __keep_punctuations_hash__ = new_hash_table(); // hash_put_mapping( __keep_punctuations_hash__, "@", NULL ); // //hash_put_mapping( __keep_punctuations_hash__, "$", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "%", NULL ); // //hash_put_mapping( __keep_punctuations_hash__, "^", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "&", NULL ); // //hash_put_mapping( __keep_punctuations_hash__, "-", NULL ); // //hash_put_mapping( __keep_punctuations_hash__, ":", NULL ); // hash_put_mapping( __keep_punctuations_hash__, ".", NULL ); // //hash_put_mapping( __keep_punctuations_hash__, "/", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "'", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "#", NULL ); // hash_put_mapping( __keep_punctuations_hash__, "+", NULL ); // } // //check the hash. // return hash_exist_mapping( __keep_punctuations_hash__, str ); //} /* }}} */ /* * check the given english char is a full-width char or not. * * @param ch * @return 1 for yes and 0 for not. */ //FRISO_API int utf8_fullwidth_char( uint_t u ) //{ // if ( u == 12288 ) // return 1; //full-width space // //(32 - 126) ascii code // return (u > 65280 && u <= 65406); //} RediSearch-1.2.2/src/dep/friso/friso_array.c000066400000000000000000000134741364126773500207210ustar00rootroot00000000000000/* * friso dynamaic interface implemented functions file * that defined in header file "friso_API.h". * never use it for commercial use. * * @author chenxini */ #include "friso_API.h" #include /* ******************************************** * friso array list static functions block * **********************************************/ __STATIC_API__ void **create_array_entries( uint_t __blocks ) { register uint_t t; void **block = ( void ** ) FRISO_CALLOC( sizeof( void * ), __blocks ); if ( block == NULL ) { ___ALLOCATION_ERROR___ } //initialize for ( t = 0; t < __blocks; t++ ) { block[t] = NULL; } return block; } //resize the array. (the opacity should not be smaller than array->length) __STATIC_API__ friso_array_t resize_array_list( friso_array_t array, uint_t opacity ) { register uint_t t; void **block = create_array_entries( opacity ); for ( t = 0; t < array->length ; t++ ) { block[t] = array->items[t]; } FRISO_FREE( array->items ); array->items = block; array->allocs = opacity; return array; } /* ******************************************** * friso array list FRISO_API functions block * **********************************************/ //create a new array list. (A macro define has replace this.) //FRISO_API friso_array_t new_array_list( void ) { // return new_array_list_with_opacity( __DEFAULT_ARRAY_LIST_OPACITY__ ); //} //create a new array list with a given opacity. FRISO_API friso_array_t new_array_list_with_opacity( uint_t opacity ) { friso_array_t array = ( friso_array_t ) FRISO_MALLOC( sizeof( friso_array_entry ) ); if ( array == NULL ) { ___ALLOCATION_ERROR___ } //initialize array->items = create_array_entries( opacity ); array->allocs = opacity; array->length = 0; return array; } /* * free the given friso array. * and its items, but never where its items item pointed to . */ FRISO_API void free_array_list( friso_array_t array ) { //free the allocation that all the items pointed to //register int t; //if ( flag == 1 ) { // for ( t = 0; t < array->length; t++ ) { // if ( array->items[t] == NULL ) continue; // FRISO_FREE( array->items[t] ); // array->items[t] = NULL; // } //} FRISO_FREE( array->items ); FRISO_FREE( array ); } //add a new item to the array. FRISO_API void array_list_add( friso_array_t array, void *value ) { //check the condition to resize. if ( array->length == array->allocs ) { resize_array_list( array, array->length * 2 + 1 ); } array->items[array->length++] = value; } //insert a new item at a specified position. FRISO_API void array_list_insert( friso_array_t array, uint_t idx, void *value ) { register uint_t t; if ( idx <= array->length ) { //check the condition to resize the array. if ( array->length == array->allocs ) { resize_array_list( array, array->length * 2 + 1 ); } //move the elements after idx. //for ( t = idx; t < array->length; t++ ) { // array->items[t+1] = array->items[t]; //} for ( t = array->length - 1; t >= idx; t-- ) { array->items[t+1] = array->items[t]; } array->items[idx] = value; array->length++; } } //get the item at a specified position. FRISO_API void *array_list_get( friso_array_t array, uint_t idx ) { if ( idx < array->length ) { return array->items[idx]; } return NULL; } //set the value of the item at a specified position. //this will return the old value. FRISO_API void * array_list_set( friso_array_t array, uint_t idx, void * value ) { void * oval = NULL; if ( idx < array->length ) { oval = array->items[idx]; array->items[idx] = value; } return oval; } //remove the item at a specified position. //this will return the value of the removed item. FRISO_API void * array_list_remove( friso_array_t array, uint_t idx ) { register uint_t t; void *oval = NULL; if ( idx < array->length ) { oval = array->items[idx]; //move the elements after idx. for ( t = idx; t < array->length - 1; t++ ) { array->items[t] = array->items[ t + 1 ]; } array->items[array->length - 1] = NULL; array->length--; } return oval; } /*trim the array list*/ FRISO_API friso_array_t array_list_trim( friso_array_t array ) { if ( array->length < array->allocs ) { return resize_array_list( array, array->length ); } return array; } /* * clear the array list. * this function will free all the allocations that the pointer pointed. * but will not free the point array allocations, * and will reset the length of it. */ FRISO_API friso_array_t array_list_clear( friso_array_t array ) { register uint_t t; //free all the allocations that the array->length's pointer pointed. for ( t = 0; t < array->length; t++ ) { /*if ( array->items[t] == NULL ) continue; FRISO_FREE( array->items[t] ); */ array->items[t] = NULL; } //attribute reset. array->length = 0; return array; } //get the size of the array list. (A macro define has replace this.) //FRISO_API uint_t array_list_size( friso_array_t array ) { // return array->length; //} //return the allocations of the array list.(A macro define has replace this) //FRISO_API uint_t array_list_allocs( friso_array_t array ) { // return array->allocs; //} //check if the array is empty.(A macro define has replace this.) //FRISO_API int array_list_empty( friso_array_t array ) //{ // return ( array->length == 0 ); //} RediSearch-1.2.2/src/dep/friso/friso_ctype.c000066400000000000000000000151641364126773500207250ustar00rootroot00000000000000/** * friso string type check function interface, * like english/CJK, full-wdith/half-width, punctuation or not. * @ses friso_UTF8.c and friso_GBK.c for detail. * * @author chenxin */ #include #include #include #include "friso_ctype.h" #include "friso_API.h" /* check if the specified string is a cn string. * * @return int (true for cn string or false) * */ FRISO_API int friso_cn_string( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_cjk_string(task->unicode); } else if ( charset == FRISO_GBK ) { return gbk_cn_string(task->buffer); } return 0; } //check if the specified word is a whitespace. FRISO_API int friso_whitespace( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_whitespace(task->unicode); } else if ( charset == FRISO_GBK ) { return gbk_whitespace(task->buffer); } return 0; } //check if the specifiled word is a numeric letter. FRISO_API int friso_numeric_letter( friso_charset_t charset, friso_task_t task) { if ( charset == FRISO_UTF8 ) { return utf8_numeric_letter((uint_t) task->text[task->idx]); } else if ( charset == FRISO_GBK ) { return gbk_numeric_letter(task->text + task->idx); } return 0; } //check if the specified word is aa english letter. FRISO_API int friso_en_letter( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_en_letter( ( uint_t ) task->text[task->idx]); } else if ( charset == FRISO_GBK ) { return gbk_en_letter( task->text + task->idx ); } return 0; } //check if the specified word is a half-width letter. // punctuations are inclued. FRISO_API int friso_halfwidth_en_char( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_halfwidth_en_char(task->unicode); } else if ( charset == FRISO_GBK ) { return gbk_halfwidth_en_char(task->buffer[0]); } return 0; } //check if the specified word is a full-width letter. // full-width punctuations are not included. FRISO_API int friso_fullwidth_en_char( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_fullwidth_en_char( task->unicode ); } else if ( charset == FRISO_GBK ) { return gbk_fullwidth_en_char( task->buffer ); } return 0; } //check if the specified word is an english punctuations. FRISO_API int friso_en_punctuation( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_en_punctuation( task->unicode ); } else if ( charset == FRISO_GBK ) { return gbk_en_punctuation( task->buffer[0] ); } return 0; } //check if the specified word ia sn chinese punctuation. FRISO_API int friso_cn_punctuation( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_cn_punctuation( task->unicode ); } else if ( charset == FRISO_GBK ) { return gbk_cn_punctuation( task->buffer ); } return 0; } FRISO_API int friso_letter_number( friso_charset_t charset, friso_task_t task ) { return 0; } FRISO_API int friso_other_number( friso_charset_t charset, friso_task_t task ) { return 0; } //check if the word is a keep punctuation. //@Deprecated //FRISO_API int friso_keep_punctuation( // friso_charset_t charset, // friso_task_t task ) //{ // if ( charset == FRISO_UTF8 ) // return utf8_keep_punctuation( task->buffer ); // else if ( charset == FRISO_GBK ) // return gbk_keep_punctuation( task->buffer ); // return 0; //} //check if the specified char is en english punctuation. // this function is the same as friso_en_punctuation. FRISO_API int is_en_punctuation( friso_charset_t charset, char c ) { if ( charset == FRISO_UTF8 ) { return utf8_en_punctuation( (uint_t) c); } else if ( charset == FRISO_GBK ) { return gbk_en_punctuation( c ); } return 0; } //check the specified string is make up with numeric. FRISO_API int friso_numeric_string( friso_charset_t charset, char *buffer ) { if ( charset == FRISO_UTF8 ) { return utf8_numeric_string( buffer ); } else if ( charset == FRISO_GBK ) { return gbk_numeric_string( buffer ); } return 0; } //check the specified string is a decimal string. FRISO_API int friso_decimal_string( friso_charset_t charset, char *buffer ) { if ( charset == FRISO_UTF8 ) { return utf8_decimal_string( buffer ); } else if ( charset == FRISO_GBK ) { return gbk_decimal_string( buffer ); } return 0; } //check if the specified char is english uppercase letter. // included full-width and half-width letters. FRISO_API int friso_uppercase_letter( friso_charset_t charset, friso_task_t task ) { if ( charset == FRISO_UTF8 ) { return utf8_uppercase_letter( task->unicode ); } else if ( charset == FRISO_GBK ) { return gbk_uppercase_letter( task->buffer ); } return 0; } /* get the type of the specified char. * the type will be the constants defined above. * (include the fullwidth english char.) */ FRISO_API friso_enchar_t friso_enchar_type( friso_charset_t charset, friso_task_t task ) { //Unicode or ASCII.(Both UTF-8 and GBK are valid) uint_t u = 0; if ( charset == FRISO_UTF8 ) { u = task->unicode; //if ( u >= 65280 ) u = 65280 - 65248; } else if ( charset == FRISO_GBK ) { u = (uchar_t)task->buffer[0]; //if ( u == 0xa3 ) ; //full-width. } //range check. if ( u > 126 || u < 32 ) return FRISO_EN_UNKNOW; if ( u == 32 ) return FRISO_EN_WHITESPACE; if ( u >= 48 && u <= 57 ) return FRISO_EN_NUMERIC; if ( u >= 65 && u <= 90 ) return FRISO_EN_LETTER; if ( u >= 97 && u <= 122 ) return FRISO_EN_LETTER; return FRISO_EN_PUNCTUATION; } /* get the type of the specified en char. * the type will be the constants defined above. * (the char should be half-width english char only) */ FRISO_API friso_enchar_t get_enchar_type( char ch ) { uint_t u = (uchar_t) ch; //range check. if ( u > 126 || u < 32 ) return FRISO_EN_UNKNOW; if ( u == 32 ) return FRISO_EN_WHITESPACE; if ( u >= 48 && u <= 57 ) return FRISO_EN_NUMERIC; if ( u >= 65 && u <= 90 ) return FRISO_EN_LETTER; if ( u >= 97 && u <= 122 ) return FRISO_EN_LETTER; return FRISO_EN_PUNCTUATION; } RediSearch-1.2.2/src/dep/friso/friso_ctype.h000066400000000000000000000176771364126773500207450ustar00rootroot00000000000000/** * Friso charset about function interface header file. * @package src/friso_charset.h . * Available charset for now: * 1. UTF8 - function start with utf8 * 2. GBK - function start with gbk * * @author chenxin */ #ifndef _friso_charset_h #define _friso_charset_h #include #include #include #include "friso.h" #include "friso_API.h" /** {{{ wrap interface */ /* check if the specified string is a cn string. * * @return int (true for cn string or false) * */ FRISO_API int friso_cn_string( friso_charset_t, friso_task_t ); //check if the specified word is a whitespace. FRISO_API int friso_whitespace( friso_charset_t, friso_task_t ); //check if the specifiled word is a numeric letter. FRISO_API int friso_numeric_letter(friso_charset_t, friso_task_t); //check if the specified word is a english letter. FRISO_API int friso_en_letter( friso_charset_t, friso_task_t ); //check if the specified word is a half-width letter. // punctuations are inclued. FRISO_API int friso_halfwidth_en_char( friso_charset_t, friso_task_t ); //check if the specified word is a full-width letter. // full-width punctuations are not included. FRISO_API int friso_fullwidth_en_char( friso_charset_t, friso_task_t ); //check if the specified word is an english punctuations. FRISO_API int friso_en_punctuation( friso_charset_t, friso_task_t ); //check if the specified word ia sn chinese punctuation. FRISO_API int friso_cn_punctuation( friso_charset_t, friso_task_t ); FRISO_API int friso_letter_number( friso_charset_t, friso_task_t ); FRISO_API int friso_other_number( friso_charset_t, friso_task_t ); //check if the word is a keep punctuation. //@Deprecated //FRISO_API int friso_keep_punctuation( friso_charset_t, friso_task_t ); //check the specified string is numeric string. FRISO_API int friso_numeric_string( friso_charset_t, char * ); //check the specified string is a decimal string. FRISO_API int friso_decimal_string( friso_charset_t, char * ); //check if the specified char is english uppercase letter. // included full-width and half-width letters. FRISO_API int friso_uppercase_letter( friso_charset_t, friso_task_t ); //en char type. //#define FRISO_EN_LETTER 0 //a-z && A-Z //#define FRISO_EN_NUMERIC 1 //0-9 //#define FRISO_EN_PUNCTUATION 2 //english punctuations //#define FRISO_EN_WHITESPACE 3 //whitespace //#define FRISO_EN_UNKNOW -1 //beyond 32-122 typedef enum { FRISO_EN_LETTER = 0, //A-Z, a-z FRISO_EN_NUMERIC = 1, //0-9 FRISO_EN_PUNCTUATION = 2, //english punctuations FRISO_EN_WHITESPACE = 3, //whitespace FRISO_EN_UNKNOW = -1 //unkow(beyond 32-126) } friso_enchar_t; /* get the type of the specified char. * the type will be the constants defined above. * (include the fullwidth english char.) */ FRISO_API friso_enchar_t friso_enchar_type( friso_charset_t, friso_task_t ); /* get the type of the specified en char. * the type will be the constants defined above. * (the char should be half-width english char only) */ FRISO_API friso_enchar_t get_enchar_type( char ); /* }}} */ /** {{{ UTF8 interface*/ /* read the next utf-8 word from the specified position. * * @return int the bytes of the current readed word. */ FRISO_API int utf8_next_word( friso_task_t, uint_t *, fstring ); //get the bytes of a utf-8 char. FRISO_API int get_utf8_bytes( char ); //return the unicode serial number of a given string. FRISO_API int get_utf8_unicode( const fstring ); //convert the unicode serial to a utf-8 string. FRISO_API int unicode_to_utf8( uint_t, fstring ); //check if the given char is a CJK. FRISO_API int utf8_cjk_string( uint_t ) ; /*check the given char is a Basic Latin letter or not. * include all the letters and english puntuations.*/ FRISO_API int utf8_halfwidth_en_char( uint_t ); /* * check the given char is a full-width latain or not. * include the full-width arabic numeber, letters. * but not the full-width puntuations. */ FRISO_API int utf8_fullwidth_en_char( uint_t ); //check the given char is a upper case letter or not. // included all the full-width and half-width letters. FRISO_API int utf8_uppercase_letter( uint_t ); //check the given char is a lower case letter or not. // included all the full-width and half-width letters. FRISO_API int utf8_lowercase_letter( uint_t ); //check the given char is a numeric. // included the full-width and half-width arabic numeric. FRISO_API int utf8_numeric_letter( uint_t ); /* * check if the given fstring is make up with numeric chars. * both full-width,half-width numeric is ok. */ FRISO_API int utf8_numeric_string( char * ); FRISO_API int utf8_decimal_string( char * ); //check the given char is a english char. //(full-width and half-width) //not the punctuation of course. FRISO_API int utf8_en_letter( uint_t ); //check the given char is a whitespace or not. FRISO_API int utf8_whitespace( uint_t ); /* check if the given char is a letter number like 'ⅠⅡ' */ FRISO_API int utf8_letter_number( uint_t ); /* * check if the given char is a other number like '①⑩⑽㈩' */ FRISO_API int utf8_other_number( uint_t ); //check if the given char is a english punctuation. FRISO_API int utf8_en_punctuation( uint_t ) ; //check if the given char is a chinese punctuation. FRISO_API int utf8_cn_punctuation( uint_t u ); FRISO_API int is_en_punctuation( friso_charset_t, char ); //#define is_en_punctuation( c ) utf8_en_punctuation((uint_t) c) //@Deprecated //FRISO_API int utf8_keep_punctuation( fstring ); /* }}} */ /** {{{ GBK interface */ /* read the next GBK word from the specified position. * * @return int the bytes of the current readed word. */ FRISO_API int gbk_next_word( friso_task_t, uint_t *, fstring ); //get the bytes of a utf-8 char. FRISO_API int get_gbk_bytes( char ); //check if the given char is a gbk char (ANSII string). FRISO_API int gbk_cn_string( char * ) ; /*check if the given char is a ASCII letter * include all the letters and english puntuations.*/ FRISO_API int gbk_halfwidth_en_char( char ); /* * check if the given char is a full-width latain. * include the full-width arabic numeber, letters. * but not the full-width puntuations. */ FRISO_API int gbk_fullwidth_en_char( char * ); //check if the given char is a upper case char. // included all the full-width and half-width letters. FRISO_API int gbk_uppercase_letter( char * ); //check if the given char is a lower case char. // included all the full-width and half-width letters. FRISO_API int gbk_lowercase_letter( char * ); //check if the given char is a numeric. // included the full-width and half-width arabic numeric. FRISO_API int gbk_numeric_letter( char * ); /* * check if the given fstring is make up with numeric chars. * both full-width,half-width numeric is ok. */ FRISO_API int gbk_numeric_string( char * ); FRISO_API int gbk_decimal_string( char * ); //check if the given char is a english(ASCII) char. //(full-width and half-width) //not the punctuation of course. FRISO_API int gbk_en_letter( char * ); //check the specified char is a whitespace or not. FRISO_API int gbk_whitespace( char * ); /* check if the given char is a letter number like 'ⅠⅡ' */ FRISO_API int gbk_letter_number( char * ); /* * check if the given char is a other number like '①⑩⑽㈩' */ FRISO_API int gbk_other_number( char * ); //check if the given char is a english punctuation. FRISO_API int gbk_en_punctuation( char ) ; //check the given char is a chinese punctuation. FRISO_API int gbk_cn_punctuation( char * ); //cause the logic handle is the same as the utf8. // here invoke the utf8 interface directly. //FRISO_API int gbk_keep_punctuation( char * ); //@Deprecated //#define gbk_keep_punctuation( str ) utf8_keep_punctuation(str) //check if the given english char is a full-width char or not. //FRISO_API int gbk_fullwidth_char( char * ) ; /* }}}*/ #endif /*end _friso_charset_h*/ RediSearch-1.2.2/src/dep/friso/friso_hash.c000066400000000000000000000163241364126773500205230ustar00rootroot00000000000000/* * friso hash table implements functions * defined in header file "friso_API.h". * * @author chenxin */ #include "friso_API.h" #include #include //-166411799L //31 131 1331 13331 133331 .. //31 131 1313 13131 131313 .. the best #define HASH_FACTOR 1313131 /* ************************ * mapping function area * **************************/ __STATIC_API__ uint_t hash( fstring str, uint_t length ) { //hash code uint_t h = 0; while ( *str != '\0' ) { h = h * HASH_FACTOR + ( *str++ ); } return (h % length); } /*test if a integer is a prime.*/ __STATIC_API__ int is_prime( int n ) { int j; if ( n == 2 || n == 3 ) { return 1; } if ( n == 1 || n % 2 == 0 ) { return 0; } for ( j = 3; j * j < n; j++ ) { if ( n % j == 0 ) { return 0; } } return 1; } /*get the next prime just after the speicified integer.*/ __STATIC_API__ int next_prime( int n ) { if ( n % 2 == 0 ) n++; for ( ; ! is_prime( n ); n = n + 2 ) ; return n; } //fstring copy, return the pointer of the new string. //static fstring string_copy( fstring _src ) { //int bytes = strlen( _src ); //fstring _dst = ( fstring ) FRISO_MALLOC( bytes + 1 ); //register int t = 0; //do { //_dst[t] = _src[t]; //t++; //} while ( _src[t] != '\0' ); //_dst[t] = '\0'; //return _dst; //} /* ********************************* * static hashtable function area. * ***********************************/ __STATIC_API__ hash_entry_t new_hash_entry( fstring key, void * value, hash_entry_t next ) { hash_entry_t e = ( hash_entry_t ) FRISO_MALLOC( sizeof( friso_hash_entry ) ); if ( e == NULL ) { ___ALLOCATION_ERROR___ } //e->_key = string_copy( key ); e->_key = key; e->_val = value; e->_next = next; return e; } //create blocks copy of entries. __STATIC_API__ hash_entry_t * create_hash_entries( uint_t blocks ) { register uint_t t; hash_entry_t *e = ( hash_entry_t * ) FRISO_CALLOC( sizeof( hash_entry_t ), blocks ); if ( e == NULL ) { ___ALLOCATION_ERROR___ } for ( t = 0; t < blocks; t++ ) { e[t] = NULL; } return e; } //a static function to do the re-hash work. __STATIC_API__ void rebuild_hash( friso_hash_t _hash ) { //printf("rehashed.\n"); //find the next prime as the length of the hashtable. uint_t t, length = next_prime( _hash->length * 2 + 1 ); hash_entry_t e, next, *_src = _hash->table, \ *table = create_hash_entries( length ); uint_t bucket; //copy the nodes for ( t = 0; t < _hash->length; t++ ) { e = *( _src + t ); if ( e != NULL ) { do { next = e->_next; bucket = hash( e->_key, length ); e->_next = table[bucket]; table[bucket] = e; e = next; } while ( e != NULL ); } } _hash->table = table; _hash->length = length; _hash->threshold = ( uint_t ) ( _hash->length * _hash->factor ); //free the old hash_entry_t blocks allocations. FRISO_FREE( _src ); } /* ******************************** * hashtable interface functions. * * ********************************/ //create a new hash table. FRISO_API friso_hash_t new_hash_table( void ) { friso_hash_t _hash = ( friso_hash_t ) FRISO_MALLOC( sizeof ( friso_hash_cdt ) ); if ( _hash == NULL ) { ___ALLOCATION_ERROR___ } //initialize the the hashtable _hash->length = DEFAULT_LENGTH; _hash->size = 0; _hash->factor = DEFAULT_FACTOR; _hash->threshold = ( uint_t ) ( _hash->length * _hash->factor ); _hash->table = create_hash_entries( _hash->length ); return _hash; } FRISO_API void free_hash_table( friso_hash_t _hash, fhash_callback_fn_t fentry_func ) { register uint_t j; hash_entry_t e, n; for ( j = 0; j < _hash->length; j++ ) { e = *( _hash->table + j ); for ( ; e != NULL ; ) { n = e->_next; if ( fentry_func != NULL ) fentry_func(e); FRISO_FREE( e ); e = n; } } //free the pointer array block ( 4 * htable->length continuous bytes ). FRISO_FREE( _hash->table ); FRISO_FREE( _hash ); } //put a new mapping insite. //the value cannot be NULL. FRISO_API void *hash_put_mapping( friso_hash_t _hash, fstring key, void * value ) { uint_t bucket = ( key == NULL ) ? 0 : hash( key, _hash->length ); hash_entry_t e = *( _hash->table + bucket ); void *oval = NULL; //check the given key is already exists or not. for ( ; e != NULL; e = e->_next ) { if ( key == e->_key || ( key != NULL && e->_key != NULL && strcmp( key, e->_key ) == 0 ) ) { oval = e->_val; //bak the old value e->_key = key; e->_val = value; return oval; } } //put a new mapping into the hashtable. _hash->table[bucket] = new_hash_entry( key, value, _hash->table[bucket] ); _hash->size++; //check the condition to rebuild the hashtable. if ( _hash->size >= _hash->threshold ) { rebuild_hash( _hash ); } return oval; } //check the existence of the mapping associated with the given key. FRISO_API int hash_exist_mapping( friso_hash_t _hash, fstring key ) { uint_t bucket = ( key == NULL ) ? 0 : hash( key, _hash->length ); hash_entry_t e; for ( e = *( _hash->table + bucket ); e != NULL; e = e->_next ) { if ( key == e->_key || ( key != NULL && e->_key != NULL && strcmp( key, e->_key ) == 0 )) { return 1; } } return 0; } //get the value associated with the given key. FRISO_API void *hash_get_value( friso_hash_t _hash, fstring key ) { uint_t bucket = ( key == NULL ) ? 0 : hash( key, _hash->length ); hash_entry_t e; for ( e = *( _hash->table + bucket ); e != NULL; e = e->_next ) { if ( key == e->_key || ( key != NULL && e->_key != NULL && strcmp( key, e->_key ) == 0 )) { return e->_val; } } return NULL; } //remove the mapping associated with the given key. FRISO_API hash_entry_t hash_remove_mapping( friso_hash_t _hash, fstring key ) { uint_t bucket = ( key == NULL ) ? 0 : hash( key, _hash->length ); hash_entry_t e, prev = NULL; hash_entry_t b; for ( e = *( _hash->table + bucket ); e != NULL; prev = e, e = e->_next ) { if ( key == e->_key || ( key != NULL && e->_key != NULL && strcmp( key, e->_key ) == 0 ) ) { b = e; //the node located at *( htable->table + bucket ) if ( prev == NULL ) { _hash->table[bucket] = e->_next; } else { prev->_next = e->_next; } //printf("%s was removed\n", b->_key); _hash->size--; //FRISO_FREE( b ); return b; } } return NULL; } //count the size.(A macro define has replace this.) //FRISO_API uint_t hash_get_size( friso_hash_t _hash ) { // return _hash->size; //} RediSearch-1.2.2/src/dep/friso/friso_lexicon.c000066400000000000000000000374761364126773500212540ustar00rootroot00000000000000/* * friso lexicon implemented functions. * used to deal with the friso lexicon, like: load,remove,match... * * @author chenxin */ #include #include #include "friso_API.h" #include "friso.h" #define __SPLIT_MAX_TOKENS__ 5 #define __LEX_FILE_DELIME__ '#' #define __FRISO_LEX_IFILE__ "friso.lex.ini" //create a new lexicon FRISO_API friso_dic_t friso_dic_new() { register uint_t t; friso_dic_t dic = ( friso_dic_t ) FRISO_CALLOC( sizeof( friso_hash_t ), __FRISO_LEXICON_LENGTH__ ); if ( dic == NULL ) { ___ALLOCATION_ERROR___ } for ( t = 0; t < __FRISO_LEXICON_LENGTH__; t++ ) { dic[t] = new_hash_table(); } return dic; } /** * default callback function to invoke * when free the friso dictionary . * * @date 2013-06-12 */ __STATIC_API__ void default_fdic_callback( hash_entry_t e ) { register uint_t i; friso_array_t syn; lex_entry_t lex = ( lex_entry_t ) e->_val; //free the lex->word FRISO_FREE( lex->word ); //free the lex->syn if it is not NULL if ( lex->syn != NULL ) { syn = lex->syn; for ( i = 0; i < syn->length; i++ ) { FRISO_FREE( syn->items[i] ); } free_array_list( syn ); } //free the e->_val //@date 2014-01-28 posted by mlemay@gmail.com FRISO_FREE(lex); } FRISO_API void friso_dic_free( friso_dic_t dic ) { register uint_t t; for ( t = 0; t < __FRISO_LEXICON_LENGTH__; t++ ) { //free the hash table free_hash_table( dic[t], default_fdic_callback ); } FRISO_FREE( dic ); } //create a new lexicon entry FRISO_API lex_entry_t new_lex_entry( fstring word, friso_array_t syn, uint_t fre, uint_t length, uint_t type ) { lex_entry_t e = ( lex_entry_t ) FRISO_MALLOC( sizeof( lex_entry_cdt ) ); if ( e == NULL ) { ___ALLOCATION_ERROR___ } //initialize. e->word = word; e->syn = syn; //synoyum words array list. e->pos = NULL; //part of speech array list. //e->py = NULL; //set to NULL first. e->fre = fre; e->length = (uchar_t) length; //length e->rlen = (uchar_t) length; //set to length by default. e->type = (uchar_t) type; //type e->ctrlMask = 0; //control mask. e->offset = -1; return e; } /** * free the given lexicon entry. * you have to do three thing maybe: * 1. free where its syn items points to. (not implemented) * 2. free its syn. (friso_array_t) * 3. free its pos. (friso_array_t) * 4. free the lex_entry_t. */ FRISO_API void free_lex_entry_full( lex_entry_t e ) { register uint_t i; friso_array_t syn; //free the lex->word FRISO_FREE( e->word ); //free the lex->syn if it is not NULL if ( e->syn != NULL ) { syn = e->syn; for ( i = 0; i < syn->length; i++ ) { FRISO_FREE( syn->items[i] ); } free_array_list( syn ); } //free the e->_val //@date 2014-01-28 posted by mlemay@gmail.com FRISO_FREE(e); } FRISO_API void free_lex_entry( lex_entry_t e ) { //if ( e->syn != NULL ) { // if ( flag == 1 ) free_array_list( e->syn); // else free_array_list( e->syn ); //} FRISO_FREE(e); } //add a new entry to the dictionary. FRISO_API void friso_dic_add( friso_dic_t dic, friso_lex_t lex, fstring word, friso_array_t syn ) { void *olex = NULL; if ( lex >= 0 && lex < __FRISO_LEXICON_LENGTH__ ) { //printf("lex=%d, word=%s, syn=%s\n", lex, word, syn); olex = hash_put_mapping( dic[lex], word, new_lex_entry( word, syn, 0, (uint_t) strlen(word), (uint_t) lex ) ); if ( olex != NULL ) { free_lex_entry_full((lex_entry_t)olex); } } } FRISO_API void friso_dic_add_with_fre( friso_dic_t dic, friso_lex_t lex, fstring word, friso_array_t syn, uint_t frequency ) { void *olex = NULL; if ( lex >= 0 && lex < __FRISO_LEXICON_LENGTH__ ) { olex = hash_put_mapping( dic[lex], word, new_lex_entry( word, syn, frequency, ( uint_t ) strlen(word), ( uint_t ) lex ) ); if ( olex != NULL ) { free_lex_entry_full((lex_entry_t)olex); } } } /* * read a line from a specified stream. * the newline will be cleared. * * @date 2012-11-24 */ FRISO_API fstring file_get_line( fstring __dst, FILE * _stream ) { register int c; fstring cs; cs = __dst; while ( ( c = fgetc( _stream ) ) != EOF ) { if ( c == '\n' ) break; *cs++ = c; } *cs = '\0'; return ( c == EOF && cs == __dst ) ? NULL : __dst; } /* * static function to copy a string. */ ///instead of memcpy __STATIC_API__ fstring string_copy( fstring _src, fstring __dst, uint_t blocks ) { register fstring __src = _src; register uint_t t; for ( t = 0; t < blocks; t++ ) { if ( *__src == '\0' ) break; __dst[t] = *__src++; } __dst[t] = '\0'; return __dst; } /** * make a heap allocation, and copy the * source fstring to the new allocation, and * you should free it after use it . * * @param _src source fstring * @param blocks number of bytes to copy */ __STATIC_API__ fstring string_copy_heap( fstring _src, uint_t blocks ) { register uint_t t; fstring str = ( fstring ) FRISO_MALLOC( blocks + 1 ); if ( str == NULL ) { ___ALLOCATION_ERROR___; } for ( t = 0; t < blocks; t++ ) { //if ( *_src == '\0' ) break; str[t] = *_src++; } str[t] = '\0'; return str; } /* * find the postion of the first appear of the given char. * address of the char in the fstring will be return . * if not found NULL will be return . */ __STATIC_API__ fstring indexOf( fstring __str, char delimiter ) { uint_t i, __length__; __length__ = strlen( __str ); for ( i = 0; i < __length__; i++ ) { if ( __str[i] == delimiter ) { return __str + i; } } return NULL; } /** * load all the valid wors from a specified lexicon file . * * @param dic friso dictionary instance (A hash array) * @param lex the lexicon type * @param lex_file the path of the lexicon file * @param length the maximum length of the word item */ FRISO_API void friso_dic_load( friso_t friso, friso_config_t config, friso_lex_t lex, fstring lex_file, uint_t length ) { FILE * _stream; char __char[1024], _buffer[512]; fstring _line; string_split_entry sse; fstring _word; char _sbuffer[512]; fstring _syn; friso_array_t sywords; uint_t _fre; if ( ( _stream = fopen( lex_file, "rb" ) ) != NULL ) { while ( ( _line = file_get_line( __char, _stream ) ) != NULL ) { //clear up the notes //make sure the length of the line is greater than 1. //like the single '#' mark in stopwords dictionary. if ( _line[0] == '#' && strlen(_line) > 1 ) continue; //handle the stopwords. if ( lex == __LEX_STOPWORDS__ ) { //clean the chinese words that its length is greater than max length. if ( ((int)_line[0]) < 0 && strlen( _line ) > length ) continue; friso_dic_add( friso->dic, __LEX_STOPWORDS__, string_copy_heap( _line, strlen(_line) ), NULL ); continue; } //split the fstring with '/'. string_split_reset( &sse, "/", _line); if ( string_split_next( &sse, _buffer ) == NULL ) { continue; } //1. get the word. _word = string_copy_heap( _buffer, strlen(_buffer) ); if ( string_split_next( &sse, _buffer ) == NULL ) { //normal lexicon type, //add them to the dictionary directly friso_dic_add( friso->dic, lex, _word, NULL ); continue; } /* * filter out the words that its length is larger * than the specified limit. * but not for __LEX_ECM_WORDS__ and english __LEX_STOPWORDS__ * and __LEX_CEM_WORDS__. */ if ( ! ( lex == __LEX_ECM_WORDS__ || lex == __LEX_CEM_WORDS__ ) && strlen( _word ) > length ) { FRISO_FREE(_word); continue; } //2. get the synonyms words. _syn = NULL; if ( strcmp( _buffer, "null" ) != 0 ) { _syn = string_copy( _buffer, _sbuffer, strlen(_buffer) ); } //3. get the word frequency if it available. _fre = 0; if ( string_split_next( &sse, _buffer ) != NULL ) { _fre = atoi( _buffer ); } /** * Here: * split the synonyms words with mark "," * and put them in a array list if the synonyms is not NULL */ sywords = NULL; if ( config->add_syn && _syn != NULL ) { string_split_reset( &sse, ",", _sbuffer ); sywords = new_array_list_with_opacity(5); while ( string_split_next( &sse, _buffer ) != NULL ) { if ( strlen(_buffer) > length ) continue; array_list_add( sywords, string_copy_heap(_buffer, strlen(_buffer)) ); } sywords = array_list_trim( sywords ); } //4. add the word item friso_dic_add_with_fre( friso->dic, lex, _word, sywords, _fre ); } fclose( _stream ); } else { fprintf(stderr, "Warning: Fail to open lexicon file %s\n", lex_file); fprintf(stderr, "Warning: Without lexicon file, segment results will not correct \n"); } } /** * get the lexicon type index with the specified * type keywords . * * @see friso.h#friso_lex_t * @param _key * @return int */ __STATIC_API__ friso_lex_t get_lexicon_type_with_constant( fstring _key ) { if ( strcmp( _key, "__LEX_CJK_WORDS__" ) == 0 ) { return __LEX_CJK_WORDS__; } else if ( strcmp( _key, "__LEX_CJK_UNITS__" ) == 0 ) { return __LEX_CJK_UNITS__; } else if ( strcmp( _key, "__LEX_ECM_WORDS__" ) == 0 ) { return __LEX_ECM_WORDS__; } else if ( strcmp( _key, "__LEX_CEM_WORDS__" ) == 0 ) { return __LEX_CEM_WORDS__; } else if ( strcmp( _key, "__LEX_CN_LNAME__" ) == 0 ) { return __LEX_CN_LNAME__; } else if ( strcmp( _key, "__LEX_CN_SNAME__" ) == 0 ) { return __LEX_CN_SNAME__; } else if ( strcmp( _key, "__LEX_CN_DNAME1__" ) == 0 ) { return __LEX_CN_DNAME1__; } else if ( strcmp( _key, "__LEX_CN_DNAME2__" ) == 0 ) { return __LEX_CN_DNAME2__; } else if ( strcmp( _key, "__LEX_CN_LNA__" ) == 0 ) { return __LEX_CN_LNA__; } else if ( strcmp( _key, "__LEX_STOPWORDS__" ) == 0 ) { return __LEX_STOPWORDS__; } else if ( strcmp( _key, "__LEX_ENPUN_WORDS__" ) == 0 ) { return __LEX_ENPUN_WORDS__; } else if ( strcmp( _key, "__LEX_EN_WORDS__" ) == 0 ) { return __LEX_EN_WORDS__; } return -1; } /* * load the lexicon configuration file. * and load all the valid lexicon from the configuration file. * * @param friso friso instance * @param config friso_config instance * @param _path dictionary directory * @param _limitts words length limit */ FRISO_API void friso_dic_load_from_ifile( friso_t friso, friso_config_t config, fstring _path, uint_t _limits ) { //1.parse the configuration file. FILE *__stream; char __chars__[1024], __key__[30], *__line__; uint_t __length__, i, t; friso_lex_t lex_t; string_buffer_t sb; //get the lexicon configruation file path sb = new_string_buffer(); string_buffer_append( sb, _path ); string_buffer_append( sb, __FRISO_LEX_IFILE__ ); //printf("%s\n", sb->buffer); if ( ( __stream = fopen( sb->buffer, "rb" ) ) != NULL ) { while ( ( __line__ = file_get_line( __chars__, __stream ) ) != NULL ) { //comment filter. if ( __line__[0] == '#' ) continue; if ( __line__[0] == '\0' ) continue; __length__ = strlen( __line__ ); //item start if ( __line__[ __length__ - 1 ] == '[' ) { //get the type key for ( i = 0; i < __length__ && ( __line__[i] == ' ' || __line__[i] == '\t' ); i++ ); for ( t = 0; i < __length__; i++,t++ ) { if ( __line__[i] == ' ' || __line__[i] == '\t' || __line__[i] == ':' ) break; __key__[t] = __line__[i]; } __key__[t] = '\0'; //get the lexicon type lex_t = get_lexicon_type_with_constant(__key__); if ( lex_t == -1 ) continue; //printf("key=%s, type=%d\n", __key__, lex_t ); while ( ( __line__ = file_get_line( __chars__, __stream ) ) != NULL ) { //comments filter. if ( __line__[0] == '#' ) continue; if ( __line__[0] == '\0' ) continue; __length__ = strlen( __line__ ); if ( __line__[ __length__ - 1 ] == ']' ) break; for ( i = 0; i < __length__ && ( __line__[i] == ' ' || __line__[i] == '\t' ); i++ ); for ( t = 0; i < __length__; i++,t++ ) { if ( __line__[i] == ' ' || __line__[i] == '\t' || __line__[i] == ';' ) break; __key__[t] = __line__[i]; } __key__[t] = '\0'; //load the lexicon item from the lexicon file. string_buffer_clear( sb ); string_buffer_append( sb, _path ); string_buffer_append( sb, __key__ ); //printf("key=%s, type=%d\n", __key__, lex_t); friso_dic_load( friso, config, lex_t, sb->buffer, _limits ); } } } //end while fclose( __stream ); } else { fprintf(stderr, "Warning: Fail to open the lexicon configuration file %s\n", sb->buffer); fprintf(stderr, "Warning: Without lexicon file, segment results will not correct \n"); } free_string_buffer(sb); } //match the item. FRISO_API int friso_dic_match( friso_dic_t dic, friso_lex_t lex, fstring word ) { if ( lex >= 0 && lex < __FRISO_LEXICON_LENGTH__ ) { return hash_exist_mapping( dic[lex], word ); } return 0; } //get the lex_entry_t associated with the word. FRISO_API lex_entry_t friso_dic_get( friso_dic_t dic, friso_lex_t lex, fstring word ) { if ( lex >= 0 && lex < __FRISO_LEXICON_LENGTH__ ) { return ( lex_entry_t ) hash_get_value( dic[lex], word ); } return NULL; } //get the size of the specified type dictionary. FRISO_API uint_t friso_spec_dic_size( friso_dic_t dic, friso_lex_t lex ) { if ( lex >= 0 && lex < __FRISO_LEXICON_LENGTH__ ) { return hash_get_size( dic[lex] ); } return 0; } //get size of the whole dictionary. FRISO_API uint_t friso_all_dic_size( friso_dic_t dic ) { register uint_t size = 0, t; for ( t = 0; t < __FRISO_LEXICON_LENGTH__; t++ ) { size += hash_get_size( dic[t] ); } return size; } RediSearch-1.2.2/src/dep/friso/friso_link.c000066400000000000000000000143711364126773500205350ustar00rootroot00000000000000/* * link list implemented functions * defined in header file "friso_API.h". * when the link_node is being deleted, here we just free * the allocation of the node, not the allcation of it's value. * * @author chenxin */ #include "friso_API.h" #include //create a new link list node. __STATIC_API__ link_node_t new_node_entry( void * value, link_node_t prev, link_node_t next ) { link_node_t node = ( link_node_t ) FRISO_MALLOC( sizeof( link_node_entry ) ); if ( node == NULL ) { ___ALLOCATION_ERROR___ } node->value = value; node->prev = prev; node->next = next; return node; } //create a new link list FRISO_API friso_link_t new_link_list( void ) { friso_link_t e = ( friso_link_t ) FRISO_MALLOC( sizeof( friso_link_entry ) ); if ( e == NULL ) { ___ALLOCATION_ERROR___ } //initialize the entry e->head = new_node_entry( NULL, NULL, NULL ); e->tail = new_node_entry( NULL, e->head, NULL ); e->head->next = e->tail; e->size = 0; return e; } //free the given link list FRISO_API void free_link_list( friso_link_t link ) { link_node_t node, next; for ( node = link->head; node != NULL; ) { next = node->next; FRISO_FREE( node ); node = next; } FRISO_FREE( link ); } //clear all nodes in the link list. FRISO_API friso_link_t link_list_clear( friso_link_t link ) { link_node_t node, next; //free all the middle nodes. for ( node = link->head->next; node != link->tail; ) { next = node->next; FRISO_FREE( node ); node = next; } link->head->next = link->tail; link->tail->prev = link->head; link->size = 0; return link; } //get the size of the link list. //FRISO_API uint_t link_list_size( friso_link_t link ) { // return link->size; //} //check if the link list is empty //FRISO_API int link_list_empty( friso_link_t link ) { // return ( link->size == 0 ); //} /* * find the node at a specified position. * static */ __STATIC_API__ link_node_t get_node( friso_link_t link, uint_t idx ) { link_node_t p = NULL; register uint_t t; if ( idx >= 0 && idx < link->size ) { if ( idx < link->size / 2 ) { //find from the head. p = link->head; for ( t = 0; t <= idx; t++ ) p = p->next; } else { //find from the tail. p = link->tail; for ( t = link->size; t > idx; t-- ) p = p->prev; } } return p; } /* * insert a node before the given node. * static */ //__STATIC_API__ void insert_before( // friso_link_t link, // link_node_t node, // void * value ) //{ // link_node_t e = new_node_entry( value, node->prev, node ); // e->prev->next = e; // e->next->prev = e; // //node->prev = e; // // link->size++; //} #define insert_before( link, node, value ) \ { \ link_node_t e = new_node_entry( value, node->prev, node ); \ e->prev->next = e; \ e->next->prev = e; \ link->size++; \ } /* * static function: * remove the given node, the allocation of the value will not free, * but we return it to you, you will free it youself when there is a necessary. * * @return the value of the removed node. */ __STATIC_API__ void * remove_node( friso_link_t link, link_node_t node ) { void * _value = node->value; node->prev->next = node->next; node->next->prev = node->prev; link->size--; FRISO_FREE( node ); return _value; } //add a new node to the link list.(insert just before the tail) FRISO_API void link_list_add( friso_link_t link, void * value ) { insert_before( link, link->tail, value ); } //add a new node before the given index. FRISO_API void link_list_insert_before( friso_link_t link, uint_t idx, void * value ) { link_node_t node = get_node( link, idx ); if ( node != NULL ) { insert_before( link, node, value ); } } /* * get the value with the specified node. * * @return the value of the node. */ FRISO_API void * link_list_get( friso_link_t link, uint_t idx ) { link_node_t node = get_node( link, idx ); if ( node != NULL ) { return node->value; } return NULL; } /* * set the value of the node that located in the specified position. * we did't free the allocation of the old value, we return it to you. * free it yourself when it is necessary. * * @return the old value. */ FRISO_API void *link_list_set( friso_link_t link, uint_t idx, void * value ) { link_node_t node = get_node( link, idx ); void * _value = NULL; if ( node != NULL ) { _value = node->value; node->value = value; } return _value; } /* * remove the node located in the specified position. * * @see remove_node * @return the value of the node removed. */ FRISO_API void *link_list_remove( friso_link_t link, uint_t idx ) { link_node_t node = get_node( link, idx ); if ( node != NULL ) { //printf("idx=%d, node->value=%s\n", idx, (string) node->value ); return remove_node( link, node ); } return NULL; } /* * remove the given node from the given link list. * * @see remove_node. * @return the value of the node removed. */ FRISO_API void *link_list_remove_node( friso_link_t link, link_node_t node ) { return remove_node( link, node ); } //remove the first node after the head FRISO_API void *link_list_remove_first( friso_link_t link ) { if ( link->size > 0 ) { return remove_node( link, link->head->next ); } return NULL; } //remove the last node just before the tail. FRISO_API void *link_list_remove_last( friso_link_t link ) { if ( link->size > 0 ) { return remove_node( link, link->tail->prev ); } return NULL; } //append a node from the tail. FRISO_API void link_list_add_last( friso_link_t link, void *value ) { insert_before( link, link->tail, value ); } //append a note just after the head. FRISO_API void link_list_add_first( friso_link_t link, void *value ) { insert_before( link, link->head->next, value ); } RediSearch-1.2.2/src/dep/friso/friso_simptrad.h000066400000000000000000001416761364126773500214410ustar00rootroot00000000000000 /** * Generated by ./gen_simp_trad.py -f cn_t2s.json on 2017-12-05 09:02:20.311119 * */ #include static const uint16_t Cn_T2S_MinChr = 175; static const uint16_t Cn_T2S_MaxChr = 65131; static uint16_t Cn_T2S[65132]={ [0x8604]=0x8572, [0x8A87]=0x5938, [0x6C08]=0x6BE1, [0x6F0A]=0x6E87, [0x9810]=0x9884, [0x9F95]=0x9F9B, [0x8599]=0x5243, [0x8FAE]=0x8FAB, [0x7020]=0x6F46, [0x74A3]=0x7391, [0x9322]=0x94B1, [0x5AA7]=0x5A32, [0x7926]=0x77FF, [0x9DA9]=0x9E5C, [0x9C28]=0x9CCE, [0x8CB3]=0x8D30, [0x8E34]=0x8E0A, [0x92B7]=0x9500, [0x9136]=0x90D0, [0x95B9]=0x9609, [0x9438]=0x94CE, [0x58BB]=0x5899, [0x991A]=0x80B4, [0x8F0A]=0x8F7E, [0x8AC7]=0x8C08, [0x8C48]=0x5C82, [0x93CD]=0x9559, [0x99D1]=0x9A7D, [0x7E54]=0x7EC7, [0x8156]=0x80E8, [0x8EDF]=0x8F6F, [0x9060]=0x8FDC, [0x5DBA]=0x5CAD, [0x7664]=0x7596, [0x7DE9]=0x7F13, [0x5C68]=0x5C66, [0x9F6A]=0x9F8A, [0x98E9]=0x9968, [0x6B72]=0x5C81, [0x943F]=0x9571, [0x9BFD]=0x9CAB, [0x9EFF]=0x9F0B, [0x700B]=0x6C88, [0x80C7]=0x80BA, [0x528C]=0x523F, [0x558E]=0x359E, [0x9911]=0x997D, [0x9C13]=0x9CC3, [0x9B92]=0x9C8B, [0x9F15]=0x51AC, [0x7E94]=0x624D, [0x6519]=0x6400, [0x9832]=0x988B, [0x8B1D]=0x8C22, [0x6A9C]=0x6867, [0x4E1F]=0x4E22, [0x7121]=0x65E0, [0x93A2]=0x94A8, [0x7725]=0x7726, [0x96A4]=0x9893, [0x79A6]=0x5FA1, [0x6C33]=0x6C32, [0x6BB2]=0x6B7C, [0x6F35]=0x6E86, [0x9237]=0x94B4, [0x983B]=0x9891, [0x5ABC]=0x5AAA, [0xFE3F]=0x2227, [0x7DBE]=0x7EEB, [0x6443]=0x625B, [0x66C4]=0x6654, [0x8CC8]=0x8D3E, [0x904B]=0x8FD0, [0x934D]=0x9540, [0x92CC]=0x94E4, [0x964F]=0x968B, [0x55CE]=0x5417, [0x9951]=0x9965, [0x885B]=0x536B, [0x8ADC]=0x8C0D, [0x8E5F]=0x8FF9, [0x7463]=0x7410, [0x53E2]=0x4E1B, [0x76E4]=0x76D8, [0x59E6]=0x5978, [0x866F]=0x866C, [0x4F75]=0x5E76, [0x5277]=0x94F2, [0x6583]=0x6BD9, [0x8806]=0x867F, [0x8D08]=0x8D60, [0x528D]=0x5251, [0x978F]=0x5DE9, [0x540E]=0x540E, [0x5891]=0x5892, [0x9F59]=0x9F85, [0x7D93]=0x7ECF, [0x5F14]=0x540A, [0x6397]=0x631C, [0x499B]=0x49B6, [0x861A]=0x85D3, [0x925B]=0x94C5, [0x99B1]=0x9A6E, [0x95A3]=0x9601, [0x9DDA]=0x9E68, [0x56A5]=0x54BD, [0x9724]=0x6E9C, [0x9826]=0x988F, [0x9D28]=0x9E2D, [0x61AB]=0x60AF, [0x68B1]=0x6346, [0x5538]=0x5FF5, [0x763A]=0x7618, [0x5ABD]=0x5988, [0x9D72]=0x9E4A, [0x7C3E]=0x5E18, [0x8846]=0x4F17, [0x560D]=0x55BD, [0x91CB]=0x91CA, [0x6E4A]=0x51D1, [0x8E63]=0x8E52, [0x544E]=0x5C3A, [0x78D1]=0x7859, [0x5950]=0x5942, [0x9DD3]=0x9E67, [0x9F54]=0x9F80, [0x8056]=0x5723, [0x6558]=0x53D9, [0x6ADD]=0x691F, [0x8B5C]=0x8C31, [0x6FDF]=0x6D4E, [0x9262]=0x94B5, [0x5BE7]=0x5B81, [0x9D3F]=0x9E3D, [0x9CE9]=0x9E20, [0x7D68]=0x7ED2, [0x7E6A]=0x7ED8, [0x87EF]=0x86F2, [0x8A72]=0x8BE5, [0x93F7]=0x9564, [0x8A6B]=0x8BE7, [0x91C1]=0x8845, [0x8784]=0x86F3, [0x8E8A]=0x8E0C, [0x720D]=0x70C1, [0x938C]=0x9570, [0x570F]=0x5708, [0x9811]=0x987D, [0x7D13]=0x7EBE, [0x7E15]=0x7F0A, [0x9F94]=0x9F9A, [0x8A1D]=0x8BB6, [0x8B9C]=0x8C20, [0x8F1F]=0x8F8D, [0x8C9E]=0x8D1E, [0x7523]=0x4EA7, [0x72A2]=0x728A, [0x9B27]=0x95F9, [0x9C29]=0x9CD0, [0x5DA8]=0x5CC3, [0x812B]=0x8131, [0x8831]=0x86CA, [0x8AB2]=0x8BFE, [0x76BA]=0x76B1, [0x84F4]=0x83BC, [0x87C4]=0x86F0, [0x8ECA]=0x8F66, [0x924D]=0x94CB, [0x93CC]=0x9546, [0x774F]=0x56F0, [0x99D0]=0x9A7B, [0x9D42]=0x9E3A, [0x9AD2]=0x810F, [0x7E55]=0x7F2E, [0x8EF8]=0x8F74, [0x9225]=0x94AC, [0x6F5F]=0x8204, [0x8CDE]=0x8D4F, [0x5563]=0x8854, [0x52E2]=0x52BF, [0x5665]=0x54DD, [0x7B67]=0x7B15, [0x7C69]=0x7B3E, [0x7DE8]=0x7F16, [0x616B]=0x6002, [0x84EE]=0x83B2, [0x8FF4]=0x56DE, [0x7377]=0x72B7, [0x9479]=0x9569, [0x5F7F]=0x4F5B, [0x7CFE]=0x7EA0, [0x6200]=0x604B, [0x8D0A]=0x8D5E, [0x300C]=0x300C, [0x9B91]=0x9C8D, [0x7E93]=0x7F28, [0x9912]=0x9981, [0x932F]=0x9519, [0x8F1E]=0x8F8B, [0x93A1]=0x9543, [0x95A5]=0x9600, [0x5FA9]=0x590D, [0x802C]=0x8027, [0x672E]=0x672F, [0x6EB3]=0x6DA2, [0x8932]=0x88E4, [0x50B7]=0x4F24, [0x7336]=0x72B9, [0x5638]=0x5452, [0x7F3E]=0x74F6, [0x8B46]=0x563B, [0x51CD]=0x51BB, [0x74CF]=0x73D1, [0x9952]=0x9976, [0x9C54]=0x9CDD, [0x6ADB]=0x6809, [0x89DD]=0x62B5, [0x53E1]=0x777F, [0x7260]=0x5B83, [0x76E3]=0x76D1, [0x7162]=0x8315, [0x95E5]=0x95FC, [0x7464]=0x7476, [0x78E7]=0x789B, [0x9D6A]=0x9E4C, [0x64EF]=0x6448, [0x8A70]=0x8BD8, [0x8972]=0x88AD, [0x6DF5]=0x6E0A, [0x9376]=0x9536, [0x5678]=0x5428, [0x5AFB]=0x5A34, [0x8514]=0x535C, [0x6182]=0x5FE7, [0x8F09]=0x8F7D, [0x6E88]=0x6CA9, [0x7D15]=0x7EB0, [0x5D17]=0x5C97, [0x8396]=0x830E, [0x6698]=0x9633, [0x8A1B]=0x8BB9, [0x8B02]=0x8C13, [0x92A0]=0x94D1, [0x9BA6]=0x9C96, [0x9DAA]=0x4D17, [0x642F]=0x638F, [0x8AB0]=0x8C01, [0x89B2]=0x89D0, [0x8CB4]=0x8D35, [0x76B8]=0x76B2, [0x993D]=0x9988, [0x78BC]=0x7801, [0x64C4]=0x63B3, [0x6BC6]=0x6BB4, [0x8F49]=0x8F6C, [0x524B]=0x514B, [0x99D2]=0x9A79, [0x7D55]=0x7EDD, [0x8A5B]=0x8BC5, [0x895D]=0x88E3, [0x88DC]=0x8865, [0x9663]=0x9635, [0x9867]=0x987E, [0x5BE6]=0x5B9E, [0x9EE8]=0x515A, [0x826B]=0x823B, [0x646F]=0x631A, [0x9D52]=0x9E46, [0x8CF4]=0x8D56, [0x9077]=0x8FC1, [0x75FA]=0x75F9, [0x98FC]=0x9972, [0x6504]=0x6445, [0x8E89]=0x8DB8, [0x958F]=0x95F0, [0x992C]=0x7CCA, [0x9812]=0x9881, [0x7D14]=0x7EAF, [0x8216]=0x94FA, [0x689D]=0x6761, [0x9320]=0x952D, [0x9EA9]=0x9EB8, [0x9D09]=0x9E26, [0x9032]=0x8FDB, [0x8B5F]=0x566A, [0x743A]=0x73D0, [0x500B]=0x4E2A, [0x7DBF]=0x7EF5, [0x7E3E]=0x7EE9, [0x8A46]=0x8BCB, [0x4F48]=0x5E03, [0x9A36]=0x9A7A, [0x514C]=0x5151, [0x5852]=0x57D8, [0x8F38]=0x8F93, [0x958E]=0x95F3, [0x88DD]=0x88C5, [0x695C]=0x80E1, [0x6E5E]=0x6D48, [0x9D07]=0x9E28, [0x5A66]=0x5987, [0x5EE9]=0x5EEA, [0x83EB]=0x5807, [0x7C6A]=0x7C16, [0x8AF1]=0x8BB3, [0x8B70]=0x8BAE, [0x8CF5]=0x8D57, [0x95BF]=0x960C, [0x91F7]=0x948D, [0x9276]=0x94CF, [0x8F15]=0x8F7B, [0x58FD]=0x5BFF, [0x797C]=0x88F8, [0x5E7E]=0x51E0, [0x6703]=0x4F1A, [0x8907]=0x590D, [0x8A86]=0x8BD3, [0x530B]=0x9676, [0x300D]=0x300D, [0x968E]=0x9636, [0x9B90]=0x9C90, [0x5D94]=0x5D5A, [0x8B1B]=0x8BB2, [0x649A]=0x62C8, [0x899C]=0x773A, [0x6D1F]=0x6D95, [0x4E9E]=0x4E9A, [0x50A2]=0x5BB6, [0x9425]=0x4985, [0x95A4]=0x5408, [0x9DF0]=0x71D5, [0x7FA8]=0x7FA1, [0x9246]=0x94BB, [0x8A31]=0x8BB8, [0x8F33]=0x8F8F, [0x8EF2]=0x8F71, [0x5137]=0x4FEA, [0x7B3B]=0x7B47, [0x7D3F]=0x7ED0, [0x63C0]=0x62E3, [0x944A]=0x956C, [0x4947]=0x4982, [0x934B]=0x9505, [0x8CCA]=0x8D3C, [0x554F]=0x95EE, [0x5DD4]=0x5DC5, [0x99AE]=0x51AF, [0x64DA]=0x636E, [0x885D]=0x51B2, [0x9465]=0x9565, [0x5967]=0x5965, [0x7E69]=0x7EF3, [0x9E7D]=0x76D0, [0x636B]=0x626A, [0x89A6]=0x89CE, [0x97D3]=0x97E9, [0x8A71]=0x8BDD, [0x68F2]=0x6816, [0x92F6]=0x950D, [0x5679]=0x5F53, [0x6B0A]=0x6743, [0x9283]=0x94F3, [0x7D91]=0x6346, [0x5F12]=0x5F11, [0x962F]=0x5740, [0x6516]=0x6484, [0x6A9F]=0x69DA, [0x95A1]=0x9602, [0x9420]=0x9568, [0x846F]=0x836F, [0x9D26]=0x9E2F, [0x64AB]=0x629A, [0x5B2A]=0x5AD4, [0x6F32]=0x6DA8, [0x8A34]=0x8BC9, [0x95C6]=0x677F, [0x5ABF]=0x6127, [0x593E]=0x5939, [0x6440]=0x6342, [0x97CD]=0x97E8, [0x92CF]=0x94D7, [0x7C50]=0x85E4, [0x58D3]=0x538B, [0x9862]=0x989F, [0x9C68]=0x9CBF, [0x81D9]=0x80ED, [0x6ADF]=0x680E, [0x95E1]=0x9610, [0x9460]=0x94C4, [0x50E3]=0x50ED, [0x9264]=0x94A9, [0x7D66]=0x7ED9, [0x7868]=0x7817, [0x8266]=0x8230, [0x616E]=0x8651, [0x7576]=0x5F53, [0x91F9]=0x9495, [0x9078]=0x9009, [0x737A]=0x736D, [0x7E7C]=0x7EE7, [0x5AFF]=0x5A73, [0x9A2E]=0x9A9D, [0x946A]=0x7089, [0x540B]=0x5BF8, [0x8B8A]=0x53D8, [0x570D]=0x56F4, [0x568C]=0x54DC, [0x5D11]=0x6606, [0x9813]=0x987F, [0x9DEF]=0x9E69, [0x8617]=0x8616, [0x8F1D]=0x8F89, [0x8A1F]=0x8BBC, [0x92F1]=0x94FD, [0x5023]=0x4EFF, [0x9370]=0x953E, [0x98A8]=0x98CE, [0x9BAA]=0x9C94, [0x61AE]=0x6003, [0x8CB0]=0x8D33, [0x8FB2]=0x519C, [0x95B6]=0x960A, [0x9C3B]=0x9CD7, [0x7F3D]=0x94B5, [0x9EBC]=0x4E48, [0x8541]=0x8368, [0x84C0]=0x836A, [0x8345]=0x7B54, [0x8949]=0x88E5, [0x744B]=0x73AE, [0x56CC]=0x82CF, [0x9D51]=0x9E43, [0x9853]=0x989B, [0x7FD2]=0x4E60, [0x9AD4]=0x4F53, [0x63DA]=0x626C, [0x6A5F]=0x673A, [0x7063]=0x6E7E, [0x9365]=0x9532, [0x92E4]=0x9504, [0x7DE6]=0x7F0C, [0x5969]=0x5941, [0x9BEA]=0x9CAE, [0x66EC]=0x6652, [0x55F6]=0x54D4, [0x93FA]=0x497D, [0x8183]=0x817D, [0x8EFB]=0x8F72, [0x6F87]=0x6D9D, [0x8B80]=0x8BFB, [0x958B]=0x5F00, [0x8A0A]=0x8BAF, [0x300E]=0x2018, [0x7D10]=0x7EBD, [0x6416]=0x6447, [0x6E9D]=0x6C9F, [0x8F1C]=0x8F8E, [0x9D84]=0x4D16, [0x74A1]=0x740E, [0x92A5]=0x94F1, [0x78A9]=0x7855, [0x9928]=0x9986, [0x802E]=0x8022, [0xFE5F]=0xFF03, [0x5436]=0x5450, [0x5138]=0x7F57, [0x7DBB]=0x7EFD, [0x723A]=0x7237, [0x64C1]=0x62E5, [0x61C3]=0x52E4, [0x6642]=0x65F6, [0x95CB]=0x9615, [0x9463]=0x9573, [0x904E]=0x8FC7, [0x5D50]=0x5C9A, [0x7E52]=0x7F2F, [0x9AD5]=0x9ACC, [0x6158]=0x60E8, [0x54E1]=0x5458, [0x91E3]=0x9493, [0x7662]=0x75D2, [0x92E5]=0x9503, [0x9364]=0x9538, [0x58E9]=0x575D, [0x5DBD]=0x5CB3, [0x9A6A]=0x9A8A, [0x83EF]=0x534E, [0x69F3]=0x6868, [0x8B74]=0x8C34, [0x57F7]=0x6267, [0x50F9]=0x4EF7, [0x7DFB]=0x81F4, [0x927A]=0x94D2, [0x9EFD]=0x9EFE, [0x9BFF]=0x9CCA, [0x6384]=0x62A1, [0x8F07]=0x8F81, [0x8988]=0x6838, [0x760D]=0x75A1, [0x7C11]=0x84D1, [0x9913]=0x997F, [0x91C5]=0x917D, [0x8D1B]=0x8D63, [0x889E]=0x886E, [0x5225]=0x522B, [0x7AAA]=0x6D3C, [0x862D]=0x5170, [0x9BC9]=0x9CA4, [0x8933]=0x88E2, [0x9D3B]=0x9E3F, [0x7E3D]=0x603B, [0x58BE]=0x57A6, [0x4F47]=0x4F2B, [0x97CC]=0x97E7, [0x944C]=0x9554, [0x9B74]=0x9C82, [0x9A55]=0x9A84, [0x9BD4]=0x9CBB, [0x81D8]=0x814A, [0x6FDC]=0x6D55, [0x6B5F]=0x6B24, [0x75E0]=0x9178, [0x87FA]=0x87EE, [0x93E4]=0x9542, [0x9F67]=0x556E, [0x87EC]=0x8749, [0x6EF2]=0x6E17, [0x8A75]=0x8BDC, [0x7E7D]=0x7F24, [0x5B7F]=0x5B6A, [0x98FE]=0x9970, [0x8600]=0x841A, [0x6283]=0x62DA, [0x8A08]=0x8BA1, [0x908F]=0x903B, [0x5F91]=0x5F84, [0x7E10]=0x7EC9, [0x9D12]=0x9E30, [0x7995]=0x794E, [0x6399]=0x6323, [0x689F]=0x67AD, [0x6B1E]=0x68C2, [0x92A3]=0x94F7, [0x7522]=0x4EA7, [0x7CA7]=0x5986, [0x9F91]=0x4DAE, [0x7A28]=0x6241, [0x66AB]=0x6682, [0x792A]=0x783A, [0x842C]=0x4E07, [0xAF]=0x2C9, [0x5C5C]=0x5C49, [0x6FB1]=0x6DC0, [0x8E30]=0x903E, [0x6AB3]=0x69DF, [0x54B7]=0x5555, [0x9D08]=0x96C1, [0x9238]=0x94B9, [0x513A]=0x50A9, [0x7DBD]=0x7EF0, [0x9C3C]=0x9CDB, [0x9E0A]=0x4D19, [0x8CC7]=0x8D44, [0x8F46]=0x8F98, [0x6A48]=0x6861, [0x96CB]=0x96BD, [0x694A]=0x6768, [0x92E3]=0x94D8, [0x70CF]=0x4E4C, [0x734E]=0x5956, [0xFE50]=0xFF0C, [0x5D52]=0x5CA9, [0x99D5]=0x9A7E, [0x9854]=0x989C, [0x8EDB]=0x8F6D, [0x615A]=0x60ED, [0x68DF]=0x680B, [0x57E1]=0x57AD, [0x5660]=0x54D2, [0x52E3]=0x7EE9, [0x7562]=0x6BD5, [0x7064]=0x6EE6, [0x7CE7]=0x7CAE, [0x7F66]=0x7F58, [0x7BE9]=0x7B5B, [0x7A68]=0x9893, [0x92BB]=0x9511, [0x596A]=0x593A, [0x85ED]=0x44D6, [0x9D93]=0x9E4B, [0x6FF1]=0x6EE8, [0x5BE9]=0x5BA1, [0x6AF3]=0x680A, [0x93F9]=0x956A, [0x9278]=0x94F0, [0x98FF]=0x9973, [0x9A41]=0x9A9C, [0x6582]=0x655B, [0x8105]=0x80C1, [0x4F86]=0x6765, [0x760B]=0x75AF, [0x300F]=0x2019, [0x6417]=0x6363, [0x6E1B]=0x51CF, [0x619A]=0x60EE, [0x881F]=0x8721, [0x6B9E]=0x6B92, [0x9223]=0x9499, [0x70A4]=0x7167, [0x9C27]=0x4CA2, [0x9B29]=0x960B, [0x79AA]=0x7985, [0x852D]=0x836B, [0x8AF3]=0x8C19, [0x8DB2]=0x8DB1, [0x65C2]=0x65D7, [0x8FC6]=0x8FE4, [0x8B49]=0x8BC1, [0x5DD2]=0x5CE6, [0x8457]=0x7740, [0xFE63]=0xFF0D, [0x81DA]=0x80EA, [0x8CDC]=0x8D50, [0x95E2]=0x8F9F, [0x7165]=0x7115, [0x9C67]=0x9CE2, [0xFE33]=0xFF5C, [0x59EA]=0x4F84, [0x856D]=0x8427, [0x64EC]=0x62DF, [0x806F]=0x8054, [0x63EE]=0x6325, [0x8A73]=0x8BE6, [0x6975]=0x6781, [0x9477]=0x954A, [0x5379]=0x6064, [0x52F8]=0x529D, [0x91FA]=0x948E, [0x6383]=0x626B, [0x6085]=0x60A6, [0x6D87]=0x6CFE, [0x6A89]=0x67FD, [0x750C]=0x74EF, [0xFE59]=0xFF08, [0x9B93]=0x9C8A, [0x9C12]=0x9CC6, [0x7895]=0x5D0E, [0x9914]=0x54FA, [0x8C9D]=0x8D1D, [0x499F]=0x49B7, [0x6A1E]=0x67A2, [0x93A3]=0x84E5, [0x5DA7]=0x5CC4, [0x7AA9]=0x7A9D, [0x9B28]=0x54C4, [0x6F86]=0x6D47, [0x652C]=0x63FD, [0x71DC]=0x7116, [0x92B9]=0x9508, [0x9338]=0x94FC, [0x96DE]=0x9E21, [0x7D3C]=0x7ECB, [0x79BF]=0x79C3, [0x9A3E]=0x9AA1, [0x6144]=0x6817, [0x8AC9]=0x8BFF, [0x97CB]=0x97E6, [0x884A]=0x8511, [0x524E]=0x5239, [0x98E2]=0x9965, [0x700F]=0x6D4F, [0x8656]=0x547C, [0x6FDB]=0x8499, [0x6CDD]=0x6EAF, [0x8A5E]=0x8BCD, [0x76E1]=0x5C3D, [0x50E5]=0x4FA5, [0xFE66]=0xFF1D, [0x9B68]=0x8C5A, [0x92E6]=0x9514, [0x8A13]=0x8BAD, [0x6F70]=0x6E83, [0x72F9]=0x72ED, [0x7378]=0x517D, [0x507A]=0x54B1, [0x5CFD]=0x5CE1, [0x99FF]=0x9A8F, [0x6894]=0x6800, [0x570B]=0x56FD, [0x958C]=0x95F6, [0x7E11]=0x7F23, [0x9319]=0x9531, [0x8F1B]=0x8F86, [0x9E1B]=0x9E73, [0x8A9E]=0x8BED, [0x7621]=0x75AE, [0x8271]=0x8270, [0x819A]=0x80A4, [0x8B77]=0x62A4, [0x78AA]=0x7827, [0x65AC]=0x65A9, [0x8B33]=0x8BB4, [0x8CB2]=0x8D40, [0x56B6]=0x5624, [0x9239]=0x94CD, [0x70BA]=0x4E3A, [0x7C3D]=0x7B7E, [0x5DBC]=0x5C7F, [0x993F]=0x998A, [0x88CA]=0x8885, [0x95CC]=0x9611, [0xFE51]=0x3001, [0x7E79]=0x7ECE, [0x99D4]=0x9A75, [0x6557]=0x8D25, [0x66D6]=0x66A7, [0x8259]=0x8231, [0x6F5B]=0x6F5C, [0x737B]=0x732E, [0x6ADE]=0x6A7C, [0x7661]=0x75F4, [0x91E4]=0x9490, [0x7950]=0x4F51, [0x7A69]=0x7A33, [0x707D]=0x707E, [0x8FA6]=0x529E, [0x6FF0]=0x6F4D, [0x89F4]=0x89DE, [0x9577]=0x957F, [0x797F]=0x7984, [0x6F54]=0x6D01, [0x7D81]=0x7ED1, [0x89AA]=0x4EB2, [0x9B8D]=0x9C8F, [0xFA0C]=0x5140, [0x7E8F]=0x7F20, [0x5191]=0x80C4, [0x9312]=0x9515, [0x5614]=0x5455, [0x8558]=0x835B, [0x8D99]=0x8D75, [0x6F1A]=0x6CA4, [0x851E]=0x848C, [0x9B22]=0x9B13, [0x7FA5]=0x7F9F, [0x72A7]=0x727A, [0x95A9]=0x95FD, [0x8ADD]=0x8C1E, [0x8506]=0x83F1, [0x6BAD]=0x50F5, [0x64B3]=0x63FF, [0x8332]=0x5179, [0x9936]=0x9989, [0x7DB9]=0x7EFA, [0x9DD6]=0x9E65, [0x8CC3]=0x8D41, [0x7A4C]=0x7A23, [0x7D4E]=0x7ED7, [0x8AD7]=0x8C02, [0x8956]=0x8884, [0x990E]=0x9979, [0x9BE7]=0x9CB3, [0x9CF6]=0x9E22, [0x55E9]=0x5522, [0x776A]=0x777E, [0x8A6C]=0x8BDF, [0x6EEF]=0x6EDE, [0x8070]=0x806A, [0x6372]=0x5377, [0x67F5]=0x6805, [0x5DF9]=0x537A, [0x9C78]=0x9C88, [0x93FD]=0x9508, [0xFE6A]=0xFF05, [0x8F05]=0x8F82, [0x6207]=0x6206, [0x8186]=0x55C9, [0x6488]=0x635E, [0x9B0D]=0x80E1, [0x936C]=0x9539, [0x9090]=0x9026, [0x9413]=0x9566, [0x8A17]=0x6258, [0x8996]=0x89C6, [0x7E43]=0x7EF7, [0x4F9A]=0x5F87, [0x9257]=0x94B3, [0x7C23]=0x7BD1, [0x9227]=0x94AA, [0x8AAC]=0x8BF4, [0x9A37]=0x9A9A, [0x7D39]=0x7ECD, [0x92BC]=0x9509, [0x95BE]=0x9608, [0x8F45]=0x8F95, [0x6EC4]=0x6CA7, [0x584B]=0x8314, [0x7B4D]=0x7B0B, [0x8A57]=0x8BC7, [0x865F]=0x53F7, [0x9C63]=0x9CE3, [0x5BE2]=0x5BDD, [0x5F65]=0x5F66, [0x71E6]=0x707F, [0x9A62]=0x9A74, [0x8B6D]=0x6BC1, [0x6AEC]=0x6987, [0x6E6F]=0x6C64, [0x6473]=0x62A0, [0x7DD2]=0x7EEA, [0x7D79]=0x7EE2, [0x92FC]=0x94A2, [0x75FE]=0x75B4, [0x6A02]=0x4E50, [0x860A]=0x8574, [0x5B0C]=0x5A07, [0x5C0E]=0x5BFC, [0x5091]=0x6770, [0x5110]=0x50A7, [0x9593]=0x95F4, [0x5695]=0x565C, [0x5AAF]=0x59AB, [0x5920]=0x591F, [0x7DA3]=0x7EFB, [0x9EA5]=0x9EA6, [0x93A7]=0x94E0, [0x7026]=0x6F74, [0x9D5D]=0x9E45, [0x8B2C]=0x8C2C, [0x8FAF]=0x8FA9, [0x6232]=0x620F, [0x9234]=0x94C3, [0x6EC5]=0x706D, [0x8F44]=0x8F96, [0x6046]=0x6052, [0x920D]=0x949D, [0x5B4C]=0x5A08, [0x50D1]=0x4FA8, [0x95D3]=0x95FF, [0x8CD9]=0x8D52, [0x7DF9]=0x7F07, [0x7DE3]=0x7F18, [0x7A62]=0x79FD, [0x8AED]=0x8C15, [0x60F1]=0x607C, [0x9C3E]=0x9CD4, [0x9E15]=0x9E2C, [0x71FB]=0x718F, [0x9E7A]=0x9E7E, [0x72FD]=0x72C8, [0x737C]=0x7315, [0x97FF]=0x54CD, [0x947E]=0x92AE, [0x8588]=0x835F, [0x9A0D]=0x9A92, [0x5011]=0x4EEC, [0x8B17]=0x8C24, [0x611B]=0x7231, [0x8E9A]=0x8DF9, [0x9C0D]=0x9CC5, [0x849E]=0x8385, [0x9821]=0x9889, [0x9D23]=0x9E2A, [0x5E25]=0x5E05, [0x95A8]=0x95FA, [0x96AA]=0x9669, [0x8A2D]=0x8BBE, [0x8F2F]=0x8F91, [0x81C9]=0x8138, [0x9DF2]=0x9E6B, [0x67B4]=0x62D0, [0x98B6]=0x98D3, [0x9C39]=0x9CA3, [0x5DB8]=0x5D58, [0x513B]=0x50A5, [0x923D]=0x94B8, [0x89C0]=0x89C2, [0x6AC2]=0x68F9, [0x8449]=0x53F6, [0x994B]=0x9988, [0x7A4D]=0x79EF, [0x8523]=0x848B, [0x9F4F]=0x9F51, [0x7051]=0x6D12, [0x71D0]=0x78F7, [0x5553]=0x542F, [0x92D2]=0x950B, [0x68D6]=0x67A8, [0x6C59]=0x6C61, [0x875F]=0x732C, [0x81FA]=0x53F0, [0xFE65]=0xFF1E, [0x7469]=0x83B9, [0x56EA]=0x56F1, [0x8A6D]=0x8BE1, [0x6BEC]=0x7403, [0x6F6F]=0x6D54, [0x9B77]=0x9C7F, [0x9DF8]=0x9E6C, [0x727D]=0x7275, [0x798D]=0x7978, [0x980C]=0x9882, [0x7210]=0x7089, [0x9112]=0x90B9, [0x9414]=0x9561, [0x6B16]=0x6984, [0x8085]=0x8083, [0x649F]=0x6322, [0x5922]=0x68A6, [0x9DA5]=0x9E5B, [0x9D87]=0x9E2B, [0x9326]=0x9526, [0x9628]=0x5384, [0x752A]=0x89D2, [0x7D33]=0x7EC5, [0x8CAF]=0x8D2E, [0x43B1]=0x43AC, [0x6230]=0x6218, [0x5FB9]=0x5F7B, [0x52BB]=0x5321, [0x7D3A]=0x7EC0, [0x74BF]=0x7487, [0x773E]=0x4F17, [0x980A]=0x987C, [0x60C7]=0x6566, [0x9C60]=0x9C99, [0x5ACB]=0x8885, [0x9F66]=0x9F88, [0x59CD]=0x59D7, [0x984C]=0x9898, [0x5F4E]=0x5F2F, [0x93D1]=0x955D, [0x56D3]=0x556E, [0x5152]=0x513F, [0x95D5]=0x9619, [0x9454]=0x9572, [0x68D7]=0x67A3, [0x8B56]=0x8C2E, [0x9DF9]=0x9E70, [0x9BE1]=0x9CB1, [0x5EE3]=0x5E7F, [0x9DE5]=0x9E36, [0x5C64]=0x5C42, [0x6AEB]=0x6A65, [0x9D15]=0x9E35, [0x8F3F]=0x8206, [0x7FF9]=0x7FD8, [0x52FB]=0x5300, [0x907C]=0x8FBD, [0x8B01]=0x8C12, [0x9BC0]=0x9CA7, [0x8D05]=0x8D58, [0x6386]=0x39CF, [0x6688]=0x6655, [0x858A]=0x84DF, [0x7613]=0x75EA, [0x7192]=0x8367, [0x7515]=0x74EE, [0x8B96]=0x8C36, [0x396E]=0x3918, [0x641F]=0x64C0, [0x879E]=0x8682, [0x5B21]=0x5AD2, [0x7E23]=0x53BF, [0x7027]=0x6CF7, [0x93A6]=0x954F, [0x56A8]=0x5499, [0x55AA]=0x4E27, [0x6FAE]=0x6D4D, [0x61B2]=0x5BAA, [0x9837]=0x9894, [0x7DBA]=0x7EEE, [0x743F]=0x73F2, [0x5274]=0x5240, [0x8B41]=0x54D7, [0x8CC4]=0x8D3F, [0x9A4D]=0x9A81, [0x5653]=0x5618, [0x71D2]=0x70E7, [0x74D4]=0x748E, [0x6DDA]=0x6CEA, [0x9918]=0x4F59, [0x645F]=0x6402, [0x5E63]=0x5E01, [0x99E2]=0x9A88, [0x6A6B]=0x6A2A, [0x4E26]=0x5E76, [0x696D]=0x4E1A, [0x9D53]=0x9E41, [0x6673]=0x6670, [0x61F2]=0x60E9, [0x6575]=0x654C, [0x64F4]=0x6269, [0x5BF6]=0x5B9D, [0xFE55]=0xFF1A, [0x927B]=0x94EC, [0x9DFA]=0x9E6D, [0x947F]=0x51FF, [0x6A81]=0x6AA9, [0x8B00]=0x8C0B, [0x8D04]=0x8D3D, [0x6689]=0x6656, [0x7B8B]=0x7B3A, [0x840A]=0x83B1, [0x990C]=0x9975, [0x7D8F]=0x7EE5, [0x5291]=0x5242, [0x9310]=0x9525, [0x8A16]=0x8BAB, [0x4E99]=0x4E98, [0x639B]=0x6302, [0x611C]=0x60EC, [0x859F]=0x83B6, [0x861E]=0x8539, [0x8607]=0x82CF, [0x9226]=0x949B, [0x6BAB]=0x6B9A, [0x9109]=0x4E61, [0x8F5F]=0x8F70, [0x9670]=0x9634, [0x9C5D]=0x9CBC, [0x513C]=0x4FE8, [0x75BF]=0x75F1, [0x6FC3]=0x6D53, [0x938A]=0x9551, [0x8CC5]=0x8D45, [0x61C7]=0x6073, [0x9C23]=0x9CA5, [0x66C9]=0x6653, [0x9DAC]=0x9E27, [0x7BCB]=0x7BA7, [0x994C]=0x9994, [0x77D3]=0x772C, [0x7665]=0x75C7, [0x63DB]=0x6362, [0x665E]=0x66E6, [0x5862]=0x575E, [0x9CE5]=0x9E1F, [0x9D8F]=0x9E21, [0x91E7]=0x948F, [0x8490]=0x641C, [0x9768]=0x9765, [0x746A]=0x739B, [0x896C]=0x6446, [0x8072]=0x58F0, [0x2574]=0xFF3F, [0x9C7A]=0x9CA1, [0x816B]=0x80BF, [0x6A01]=0x6869, [0x6B80]=0x592D, [0x8F03]=0x8F83, [0x5B0B]=0x5A75, [0x93C3]=0x955E, [0x9211]=0x94A3, [0x5713]=0x5706, [0x9594]=0x95F5, [0x6E19]=0x6DA3, [0x7BA0]=0x68F0, [0x9C25]=0x9CCF, [0x9127]=0x9093, [0x92A6]=0x94DF, [0x5629]=0x54D7, [0x8B2B]=0x8C2A, [0x89AC]=0x89CA, [0x6EAE]=0x6D49, [0x8435]=0x83B4, [0x9937]=0x9987, [0x7AB6]=0x7AAD, [0x7E39]=0x7F25, [0x9E75]=0x5364, [0x733B]=0x72F2, [0x91BC]=0x5BB4, [0x8A41]=0x8BC2, [0x6BC0]=0x6BC1, [0x6147]=0x6BB7, [0x6649]=0x664B, [0x87C8]=0x8748, [0x64CA]=0x51FB, [0x984D]=0x989D, [0x5ECE]=0x5EBC, [0x9251]=0x94C2, [0x9455]=0x9527, [0x95D4]=0x9616, [0x8AD6]=0x8BBA, [0x6FD8]=0x6CDE, [0x8CDA]=0x8D49, [0x7A61]=0x7A51, [0x7BE0]=0x7B71, [0x9F63]=0x51FA, [0x58E2]=0x575C, [0x7C65]=0x9FA0, [0x5167]=0x5185, [0x52E6]=0x527F, [0x7669]=0x765E, [0x8B6B]=0x8C35, [0x6271]=0x63D2, [0x60F2]=0x607D, [0x7AF6]=0x7ADE, [0x5E79]=0x5E72, [0x537B]=0x5374, [0x9CFE]=0x4D13, [0x507D]=0x4F2A, [0x71FC]=0x70EC, [0x8B85]=0x8C09, [0x6506]=0x64B5, [0x9F8D]=0x9F99, [0x96E2]=0x79BB, [0x790E]=0x7840, [0x9591]=0x95F2, [0x9410]=0x9563, [0x5712]=0x56ED, [0x9214]=0x949E, [0x8D16]=0x8D4E, [0x8B1A]=0x8C25, [0x9DA1]=0x9E56, [0x9C20]=0x9CCB, [0x7526]=0x82CF, [0x7028]=0x6FD1, [0x8CAB]=0x8D2F, [0x8FAD]=0x8F9E, [0x6E2C]=0x6D4B, [0x6AAF]=0x53F0, [0x9838]=0x9888, [0x8F42]=0x6BC2, [0x9DBA]=0x9E61, [0x66C7]=0x6619, [0x8546]=0x8487, [0x61C9]=0x5E94, [0x834A]=0x8346, [0x9ACF]=0x9AC5, [0x98B8]=0x98D4, [0x8B5A]=0x8C2D, [0x865C]=0x864F, [0x7DE1]=0x7F17, [0x7C60]=0x7B3C, [0x78E3]=0x789C, [0x9A64]=0x9AA7, [0x76E7]=0x5362, [0x91E9]=0x9492, [0x736A]=0x72EF, [0x9266]=0x94B2, [0x9EF7]=0x9EE9, [0x767C]=0x53D1, [0x6F82]=0x6F84, [0x8B05]=0x8BCC, [0x8A84]=0x8BD4, [0x6607]=0x5347, [0x5C0B]=0x5BFB, [0x838A]=0x5E84, [0x7E8C]=0x7EED, [0x9A0F]=0x9A90, [0x798E]=0x796F, [0x9315]=0x951F, [0x6898]=0x67A7, [0x8B9A]=0x8D5E, [0x819E]=0x43DD, [0x7D21]=0x7EBA, [0x9B25]=0x6597, [0x7627]=0x759F, [0x6C2B]=0x6C22, [0x93AA]=0x953C, [0x69AE]=0x8363, [0x62B4]=0x66F3, [0x7E37]=0x7F15, [0x78B8]=0x781C, [0x9BBA]=0x9C9D, [0x973D]=0x9701, [0x923F]=0x94BF, [0x71BE]=0x70BD, [0x8CC0]=0x8D3A, [0x4FC2]=0x7CFB, [0x8AC4]=0x8C06, [0x9ECC]=0x9EC9, [0x9A4F]=0x9AA3, [0x8ECC]=0x8F68, [0x9D70]=0x96D5, [0x6959]=0x8302, [0x61DE]=0x8499, [0x7D61]=0x7EDC, [0x907A]=0x9057, [0x7667]=0x75AC, [0x5169]=0x4E24, [0x50E8]=0x507E, [0x73EA]=0x572D, [0x6EEC]=0x6CAA, [0x2571]=0xFF0F, [0x64F0]=0x62E7, [0x8073]=0x8038, [0x87F2]=0x866B, [0x5E77]=0x5E76, [0x7DF6]=0x7F0F, [0x9C52]=0x9CDF, [0x927F]=0x94EA, [0x71FE]=0x7118, [0x9D1D]=0x9E32, [0x8A85]=0x8BDB, [0x6B04]=0x680F, [0x6406]=0x6784, [0x8108]=0x8109, [0x820A]=0x65E7, [0x7E8D]=0x7D2F, [0x7B8F]=0x7B5D, [0x980E]=0x9880, [0x9E0C]=0x9E71, [0x6F97]=0x6DA7, [0x5CA1]=0x5188, [0x5D20]=0x5CBD, [0x5B24]=0x5B37, [0x9426]=0x950E, [0x522A]=0x5220, [0x6F2C]=0x6E0D, [0x6BAF]=0x6BA1, [0x96DC]=0x6742, [0x95BB]=0x960E, [0x93BF]=0x954E, [0x703E]=0x6F9C, [0x6CC1]=0x51B5, [0x9D61]=0x9E49, [0x69C3]=0x76D8, [0x7DCB]=0x7EEF, [0x9336]=0x8868, [0x5F4C]=0x5F25, [0x984E]=0x816D, [0x91D3]=0x9486, [0x7652]=0x6108, [0x52D5]=0x52A8, [0x5354]=0x534F, [0x8C56]=0x4E8D, [0x65DB]=0x5E61, [0x805E]=0x95FB, [0x9D60]=0x9E44, [0x7E62]=0x7F0B, [0x9F90]=0x5E9E, [0x686E]=0x676F, [0x64F1]=0x6401, [0x7169]=0x70E6, [0x4E82]=0x4E71, [0x6A05]=0x679E, [0x7D0B]=0x7EB9, [0x5F8C]=0x540E, [0x9215]=0x94AE, [0x9394]=0x9555, [0x6C96]=0x51B2, [0x8998]=0x89C7, [0x651B]=0x64BA, [0x8A9A]=0x8BEE, [0x7C21]=0x7B80, [0x7DA0]=0x7EFF, [0x9727]=0x96FE, [0x74A6]=0x7477, [0x92AA]=0x94D5, [0x5F37]=0x5F3A, [0x9839]=0x9893, [0x9375]=0x952E, [0x7ABA]=0x7AA5, [0x77BC]=0x7751, [0x50BE]=0x503E, [0x6747]=0x572C, [0x84C6]=0x5E2D, [0x924B]=0x5228, [0x81CD]=0x8110, [0x58CE]=0x57D9, [0x9451]=0x9274, [0x95D0]=0x9617, [0x9255]=0x94B7, [0x8A3A]=0x8BCA, [0x6ADA]=0x6988, [0x665D]=0x663C, [0x7DE0]=0x7F14, [0x5EE2]=0x5E9F, [0x9A65]=0x9AA5, [0x7BE4]=0x7B03, [0x7069]=0x6EDF, [0x92EA]=0x94FA, [0x6FEC]=0x6D5A, [0x8B6F]=0x8BD1, [0x6173]=0x60AD, [0x83F4]=0x5EB5, [0x7F77]=0x7F62, [0x7CF6]=0x7C9C, [0x5879]=0x5811, [0x99F8]=0x9A8E, [0x91FE]=0x497A, [0x967D]=0x9633, [0x57FC]=0x5D0E, [0x8706]=0x86AC, [0x8208]=0x5174, [0x9C0C]=0x4CA1, [0x95AC]=0x9606, [0x9293]=0x94E8, [0x9658]=0x9649, [0x8A18]=0x8BB0, [0x8ADB]=0x8C00, [0x8B04]=0x8A8A, [0xFE31]=0xFF5C, [0x5D22]=0x5CE5, [0x9824]=0x9890, [0x93A9]=0x94E9, [0x6EAB]=0x6E29, [0x512A]=0x4F18, [0x6C2C]=0x6C29, [0x9A38]=0x9A9F, [0x96BB]=0x53EA, [0x993A]=0x998E, [0x95BD]=0x960D, [0x6FC1]=0x6D4A, [0x93E1]=0x955C, [0x6AC3]=0x67DC, [0x64C7]=0x62E9, [0x7C4C]=0x7B79, [0x9B4E]=0x9B49, [0x91D5]=0x948C, [0x9054]=0x8FBE, [0x8A58]=0x8BCE, [0x7FA9]=0x4E49, [0x645C]=0x63BC, [0x9464]=0x5228, [0xFE60]=0xFF06, [0x9AE3]=0x4EFF, [0x7D62]=0x7EDA, [0x7864]=0x7856, [0x9766]=0x817C, [0x8EEB]=0x8F78, [0x8C6C]=0x732A, [0x9DBC]=0x9E63, [0x2572]=0xFF3C, [0x9F76]=0x816D, [0x96FB]=0x7535, [0x947C]=0x9523, [0x937E]=0x949F, [0x6F01]=0x6E14, [0x8A03]=0x8BA3, [0x8407]=0x82CC, [0x7E0B]=0x7F12, [0x618A]=0x60EB, [0x5D0D]=0x5D03, [0x9343]=0x952A, [0x980F]=0x9883, [0x5690]=0x5C1D, [0x9592]=0x95F2, [0x5115]=0x4FAA, [0x84EF]=0x82C1, [0x4F96]=0x4ED1, [0x8B19]=0x8C26, [0x8A98]=0x8BF1, [0x651D]=0x6444, [0x9A23]=0x9B03, [0x5DA2]=0x5CE3, [0x9427]=0x950F, [0x97A6]=0x79CB, [0x92A8]=0x94F5, [0x8E2B]=0x78B0, [0x51AA]=0x5E42, [0x8CAC]=0x8D23, [0x6BAE]=0x6B93, [0x7C37]=0x6A90, [0x7FB6]=0x81BB, [0x763B]=0x7618, [0x54BC]=0x5459, [0x6F41]=0x988D, [0x8EC0]=0x8EAF, [0x68C4]=0x5F03, [0x584F]=0x57B2, [0x9678]=0x9646, [0x8B59]=0x8C2F, [0x865B]=0x865A, [0x9F61]=0x9F84, [0x5EE0]=0x5382, [0x9369]=0x9518, [0x92E8]=0x9507, [0x8CEC]=0x8D26, [0x6771]=0x4E1C, [0x8CD2]=0x8D4A, [0x9C77]=0x9CC4, [0x73FE]=0x73B0, [0x8606]=0x82A6, [0x7F8B]=0x8288, [0x9A0E]=0x9A91, [0x9412]=0x94F9, [0x5114]=0x4FE6, [0x651C]=0x643A, [0x9BA3]=0x4C9F, [0x92A9]=0x94E5, [0x9328]=0x951A, [0x89AF]=0x89CF, [0x66B1]=0x6635, [0x60B5]=0x6005, [0x6134]=0x6006, [0x7E36]=0x7D77, [0x9BEB]=0x9CB0, [0x5B38]=0x5A76, [0x8B4E]=0x8C32, [0x8ADE]=0x8C1D, [0x74BD]=0x73BA, [0x723E]=0x5C14, [0x6944]=0x533E, [0x79CF]=0x8017, [0x7A4E]=0x9896, [0x56D1]=0x5631, [0x9452]=0x9274, [0x50D5]=0x4EC6, [0xFE69]=0xFF04, [0x8B58]=0x8BC6, [0x885A]=0x80E1, [0x61DF]=0x603C, [0x625E]=0x634D, [0x5EE1]=0x5E91, [0x9F60]=0x9F86, [0x5C62]=0x5C61, [0x98E5]=0x9966, [0x5666]=0x54D5, [0x52E9]=0x52DA, [0x7368]=0x72EC, [0x6FEB]=0x6EE5, [0x506A]=0x903C, [0x8CED]=0x8D4C, [0x6D6C]=0x91CC, [0x8A6E]=0x8BE0, [0x9BE8]=0x9CB8, [0x9D06]=0x9E29, [0x5B78]=0x5B66, [0x97FB]=0x97F5, [0x71FF]=0x8000, [0x6F80]=0x6DA9, [0x98EA]=0x996A, [0x8805]=0x8747, [0x6209]=0x94BA, [0x7C0D]=0x7BD3, [0x990F]=0x997B, [0x7015]=0x6FD2, [0x6E96]=0x51C6, [0x6A19]=0x6807, [0x6B98]=0x6B8B, [0x5FA0]=0x5F95, [0x56A6]=0x5456, [0x73A8]=0x73CF, [0x64B2]=0x6251, [0x2035]=0xFF40, [0x9D37]=0x4D15, [0x9148]=0x90E6, [0x78BA]=0x786E, [0x5DCB]=0x5CBF, [0x8CC2]=0x8D42, [0x66C6]=0x5386, [0x9F4B]=0x658B, [0x80CA]=0x6710, [0x5C4D]=0x5C38, [0x7F4C]=0x7F42, [0x5562]=0x5521, [0x7055]=0x6F13, [0x91D4]=0x9487, [0x6BD8]=0x6BD7, [0x615F]=0x6078, [0x7E61]=0x7EE3, [0x9865]=0x98A2, [0x93E8]=0x933E, [0x896F]=0x886C, [0x8AEE]=0x8C18, [0x8373]=0x8C46, [0x64F2]=0x63B7, [0x8075]=0x8069, [0x9EF6]=0x9EE1, [0x58FA]=0x58F6, [0x947D]=0x94BB, [0x9354]=0x9537, [0x5000]=0x4F25, [0x9D89]=0x9E51, [0x5C08]=0x4E13, [0x8810]=0x86F4, [0x8C93]=0x732B, [0x6B12]=0x683E, [0x9116]=0x90E7, [0x9418]=0x949F, [0x7A1C]=0x68F1, [0x9D1E]=0x9E2E, [0x92C1]=0x94DD, [0x64A3]=0x63B8, [0x8F2A]=0x8F6E, [0x53AD]=0x538C, [0x5E33]=0x5E10, [0x975C]=0x9759, [0x79B1]=0x7977, [0x9830]=0x988A, [0x5FB5]=0x5F81, [0x7E34]=0x7EA4, [0x873A]=0x9713, [0x6BBD]=0x80B4, [0x8A3C]=0x8BC1, [0x71C1]=0x70E8, [0x7AC7]=0x7AA6, [0x9DC9]=0x4D18, [0x9C48]=0x9CD5, [0x9F4A]=0x9F50, [0x66CF]=0x5411, [0x854E]=0x835E, [0x8CD3]=0x5BBE, [0xFE62]=0xFF0B, [0x6FD5]=0x6E7F, [0x52D7]=0x52D6, [0x7156]=0x6696, [0x75D9]=0x75C9, [0x98DB]=0x98DE, [0x975A]=0x9753, [0x9BDD]=0x9CB4, [0x5EDF]=0x5E99, [0x7D5E]=0x7EDE, [0x64E3]=0x6363, [0x6AE7]=0x69E0, [0x4F6A]=0x5F8A, [0x926C]=0x94BC, [0x98BC]=0x98D5, [0x99F1]=0x9A86, [0x9870]=0x98A6, [0x9CF3]=0x51E4, [0x6176]=0x5E86, [0x85F9]=0x853C, [0x8A7C]=0x8BD9, [0x6EFF]=0x6EE1, [0x9341]=0x9528, [0x9403]=0x94D9, [0x9382]=0x9541, [0x9684]=0x5824, [0x7D09]=0x7EAB, [0x830D]=0x82DF, [0x8B92]=0x8C17, [0x4F15]=0x592B, [0x96E3]=0x96BE, [0x5B1D]=0x8885, [0x7E1F]=0x7F1B, [0x7D9E]=0x7F0D, [0x83A2]=0x835A, [0x69A6]=0x5E72, [0x6D29]=0x6CC4, [0x8CA8]=0x8D27, [0x502B]=0x4F26, [0x532D]=0x5326, [0x92AC]=0x94D0, [0x562F]=0x5578, [0x55AE]=0x5355, [0x7931]=0x783B, [0x9C33]=0x9CD3, [0x7672]=0x766B, [0x5F35]=0x5F20, [0x61B6]=0x5FC6, [0x883B]=0x86EE, [0x6B3D]=0x94A6, [0x8ABC]=0x8C0A, [0x7A47]=0x415F, [0x85CE]=0x8369, [0x8ED4]=0x8F6B, [0x5257]=0x522C, [0x985B]=0x98A0, [0x77DA]=0x77A9, [0x5E5F]=0x5E1C, [0x7DDE]=0x7F0E, [0x8161]=0x8136, [0x98C6]=0x98D9, [0x566F]=0x55F3, [0x7BF2]=0x5F57, [0x7F75]=0x9A82, [0x9EF4]=0x9709, [0x8277]=0x8273, [0x61F6]=0x61D2, [0x67FA]=0x62D0, [0x8B7D]=0x8A89, [0x8AFC]=0x8C16, [0x9081]=0x8FC8, [0x5100]=0x4EEA, [0x9583]=0x95EA, [0x7B87]=0x4E2A, [0x9806]=0x987A, [0x7D08]=0x7EA8, [0x7E0A]=0x7F22, [0x630C]=0x683C, [0x8E95]=0x8E70, [0x8F14]=0x8F85, [0x9397]=0x67AA, [0x5016]=0x5E78, [0x9A05]=0x9A93, [0x361A]=0x360E, [0x7C1E]=0x7BAA, [0x91B1]=0x53D1, [0x9DB4]=0x9E64, [0x8CA9]=0x8D29, [0x91AB]=0x533B, [0x942E]=0x9570, [0x98B1]=0x53F0, [0x5009]=0x4ED3, [0x9EB5]=0x9762, [0x9C5F]=0x9C8E, [0x863A]=0x84E0, [0x8B3C]=0x547C, [0x6C3E]=0x6CDB, [0x9E1E]=0x9E3E, [0x95C3]=0x9612, [0x56C5]=0x5181, [0x9744]=0x972D, [0x9BC7]=0x9CA9, [0x9846]=0x9897, [0x9AAF]=0x80AE, [0x96B8]=0x96B6, [0x8A52]=0x8BD2, [0x4F54]=0x5360, [0x93D7]=0x94FF, [0x99DB]=0x9A76, [0x60E1]=0x6076, [0x536C]=0x6602, [0x77EF]=0x77EB, [0x9DF3]=0x9E47, [0x9E79]=0x54B8, [0x8076]=0x8042, [0x6578]=0x6570, [0x8AE7]=0x8C10, [0x7001]=0x6F3E, [0x9C09]=0x9CC7, [0x7D88]=0x7EE8, [0x7E8A]=0x7EA9, [0x8811]=0x877E, [0x8D13]=0x8D43, [0x8A92]=0x8BF6, [0x6F94]=0x6D69, [0x5096]=0x4F27, [0x9419]=0x956B, [0x9598]=0x95F8, [0x991B]=0x9984, [0x769A]=0x7691, [0x8021]=0x52A9, [0x81A0]=0x80F6, [0x6523]=0x631B, [0x8DA8]=0x8D8B, [0x8EAA]=0x8E8F, [0x722D]=0x4E89, [0x93AC]=0x9550, [0x5831]=0x62A5, [0x5D33]=0x5D5B, [0x7E35]=0x7F26, [0x60B6]=0x95F7, [0x893B]=0x4EB5, [0x6BBC]=0x58F3, [0x6F3F]=0x6D46, [0x7CF4]=0x7C74, [0x91C0]=0x917F, [0x5DA0]=0x5CE4, [0x9C49]=0x9CD6, [0x614B]=0x6001, [0x8AD2]=0x8C05, [0x8E55]=0x8DF8, [0x9249]=0x94C9, [0x9470]=0x94A5, [0x9F5F]=0x9F83, [0x7CDE]=0x7CAA, [0x81E0]=0x8114, [0x6DE8]=0x51C0, [0x926D]=0x94BD, [0x9871]=0x9885, [0x7D73]=0x7EDB, [0x5E75]=0x5F00, [0x86FA]=0x86F1, [0x6F7F]=0x6DA0, [0x8CFE]=0x8D5C, [0x9200]=0x94AF, [0x5102]=0x4FAC, [0x9B06]=0x677E, [0x7E08]=0x8426, [0x648F]=0x6326, [0x8A10]=0x8BA6, [0x8E93]=0x8E2C, [0x8D95]=0x8D76, [0x9428]=0x9544, [0x98AE]=0x98D1, [0x599D]=0x5986, [0x981C]=0x988C, [0x63A1]=0x91C7, [0x6FA9]=0x6CF6, [0x92AB]=0x94EF, [0x9A30]=0x817E, [0x7DB5]=0x5F69, [0x6336]=0x5C40, [0x6ABB]=0x69DB, [0x89BD]=0x89C8, [0x8CBF]=0x8D38, [0x8F3E]=0x8F97, [0x9240]=0x94BE, [0x76C3]=0x676F, [0x9444]=0x94F8, [0x58C7]=0x575B, [0x7B46]=0x7B14, [0x7E48]=0x8941, [0x62CB]=0x629B, [0x61CD]=0x61D4, [0x8A50]=0x8BC8, [0x8C54]=0x8273, [0x97D9]=0x97EA, [0x7658]=0x75A0, [0x99DD]=0x9A7C, [0xFE64]=0xFF1C, [0x85E5]=0x836F, [0x8464]=0x836E, [0x68E7]=0x6808, [0x71ED]=0x70DB, [0x5EF3]=0x5385, [0x60F7]=0x8822, [0x6AFB]=0x6A31, [0x9301]=0x951E, [0x9280]=0x94F6, [0x9807]=0x9878, [0x9F09]=0x9F0D, [0x7E88]=0x7F2C, [0x820B]=0x8845, [0x9D8A]=0x9E52, [0x9396]=0x9501, [0x5A1B]=0x5A31, [0x559A]=0x5524, [0x589C]=0x5760, [0x9C1F]=0x9CD1, [0x5F9E]=0x4ECE, [0x8525]=0x8471, [0x8F64]=0x8F73, [0x8F29]=0x8F88, [0x912D]=0x90D1, [0x942F]=0x4983, [0x9B31]=0x90C1, [0x7E33]=0x7F1A, [0x71C8]=0x706F, [0x66B8]=0x4E86, [0x8A3B]=0x6CE8, [0x85BA]=0x8360, [0x8C3F]=0x6EAA, [0x6FBE]=0x3CE0, [0x7341]=0x72B8, [0x72C0]=0x72B6, [0x9F34]=0x9F39, [0x5EC8]=0x53A6, [0x7DCA]=0x7D27, [0x614D]=0x6120, [0x87CE]=0x87A8, [0x6AD0]=0x7D2F, [0x9A5B]=0x9A7F, [0x55DA]=0x545C, [0x7C5F]=0x7C41, [0x81E2]=0x81DC, [0x6DEA]=0x6CA6, [0x746F]=0x7405, [0x7E73]=0x7F34, [0x5CF4]=0x5C98, [0x8077]=0x804C, [0x66F8]=0x4E66, [0x8A7B]=0x54AF, [0x85FA]=0x853A, [0x8207]=0x4E0E, [0x6FFE]=0x6EE4, [0x5504]=0x5457, [0x8A91]=0x8BF3, [0x8B10]=0x8C27, [0x6812]=0x65EC, [0x7197]=0x709D, [0x5699]=0x556E, [0x5718]=0x56E2, [0x991C]=0x9983, [0x7E1E]=0x7F1F, [0x64A5]=0x62E8, [0x6524]=0x644A, [0x965D]=0x9655, [0x50AD]=0x4F63, [0x562E]=0x5520, [0x5B30]=0x5A74, [0x7832]=0x70AE, [0x7CB5]=0x7CA4, [0x9D34]=0x9E3B, [0x6236]=0x6237, [0x6E3E]=0x6D51, [0x52C1]=0x52B2, [0x5340]=0x533A, [0x97C3]=0x9791, [0x5F48]=0x5F39, [0x8AD1]=0x8BFC, [0x6B50]=0x6B27, [0x8852]=0x70AB, [0x8CD5]=0x8D47, [0x91D7]=0x948A, [0x96D9]=0x53CC, [0x7BDB]=0x7BAC, [0x995C]=0x990D, [0x7E5E]=0x7ED5, [0x87E3]=0x866E, [0x943A]=0x94DB, [0x69E7]=0x6920, [0x6A66]=0x5E62, [0x716C]=0x7080, [0x766E]=0x763E, [0x9069]=0x9002, [0x9DBF]=0x9E5A, [0x61F7]=0x6000, [0x81E8]=0x4E34, [0x8778]=0x8717, [0x88FD]=0x5236, [0x4E7E]=0x5E72, [0x9201]=0x94AB, [0x7380]=0x7321, [0x9340]=0x951D, [0x7E09]=0x7F19, [0x7F88]=0x7F81, [0x650F]=0x62E2, [0x6A11]=0x6881, [0x7D19]=0x7EB8, [0x8F13]=0x633D, [0x7296]=0x8366, [0x7798]=0x770D, [0x581D]=0x57DA, [0x9D1F]=0x9E31, [0x6425]=0x6376, [0x8AA6]=0x8BF5, [0x932B]=0x9521, [0x8CAA]=0x8D2A, [0x8173]=0x811A, [0x56AE]=0x5411, [0x7A31]=0x79F0, [0x5F33]=0x5F2A, [0x96F2]=0x4E91, [0x9C35]=0x9CD8, [0x7DB4]=0x7F00, [0x6137]=0x607A, [0x7F48]=0x575B, [0x9921]=0x9985, [0x50C2]=0x507B, [0x9F77]=0x9F8C, [0x7947]=0x53EA, [0xFE54]=0xFF1B, [0x5CF6]=0x5C9B, [0x61CC]=0x603F, [0x9291]=0x94E3, [0x5157]=0x5156, [0x9B5B]=0x9C7D, [0x74DA]=0x74D2, [0x9EDE]=0x70B9, [0x8AFA]=0x8C1A, [0x8AE6]=0x8C1B, [0x736B]=0x7303, [0x8CEA]=0x8D28, [0x71EC]=0x6BC1, [0x8CC1]=0x8D32, [0x9BF0]=0x9C87, [0x9852]=0x9899, [0x7DF4]=0x7EC3, [0x64FA]=0x6446, [0x6EFE]=0x6EDA, [0x7385]=0x5999, [0x9204]=0x94AD, [0x7D06]=0x7EA1, [0x9808]=0x987B, [0x8F12]=0x8F84, [0x8B95]=0x8C30, [0x7018]=0x6CF8, [0x931A]=0x94EE, [0x9BDB]=0x9CB7, [0x991E]=0x996F, [0x6722]=0x671B, [0x8828]=0x87CF, [0x9433]=0x956D, [0x7DB1]=0x7EB2, [0x58B3]=0x575F, [0x8CBB]=0x8D39, [0xFE5E]=0xFF3D, [0x4E3C]=0x4E95, [0x8ABF]=0x8C03, [0x96B4]=0x9647, [0x9742]=0x96F3, [0x5244]=0x522D, [0x7D46]=0x7ECA, [0x64CB]=0x6321, [0x814E]=0x80BE, [0x8C50]=0x4E30, [0x8A54]=0x8BCF, [0x71D9]=0x70EB, [0x7058]=0x6EE9, [0x935A]=0x9496, [0xFE5C]=0xFF5D, [0x995E]=0x998B, [0x8264]=0x8223, [0x8A66]=0x8BD5, [0x766C]=0x7663, [0x92EF]=0x9506, [0x7DF1]=0x7F11, [0x9F72]=0x9F8B, [0x5BF5]=0x5BA0, [0x8CFB]=0x8D59, [0x897E]=0x897F, [0x5284]=0x672D, [0x9E07]=0x9E6F, [0x7D86]=0x7EE0, [0x9909]=0x9977, [0x6A94]=0x6863, [0x5617]=0x5C1D, [0x5098]=0x4F1E, [0x9C1B]=0x9CC1, [0x939A]=0x9524, [0x7E9C]=0x7F06, [0x7A1F]=0x7980, [0x87A2]=0x8424, [0x9580]=0x95E8, [0x942B]=0x954C, [0x7D31]=0x7EC2, [0x8139]=0x80C0, [0x6EBC]=0x6E7F, [0x7043]=0x6CA3, [0x7345]=0x72EE, [0x9949]=0x9991, [0x98C8]=0x98DA, [0x9BCA]=0x9CA8, [0x8AA3]=0x8BEC, [0x8853]=0x672F, [0x95D6]=0x95EF, [0x7159]=0x70DF, [0x9A5F]=0x9AA4, [0x64E0]=0x6324, [0x6E67]=0x6D8C, [0x78FD]=0x7857, [0x7D71]=0x7EDF, [0x7CF0]=0x56E2, [0x9873]=0x989E, [0x85F6]=0x82C8, [0x7E7E]=0x7F31, [0x9CF4]=0x9E23, [0x8EFC]=0x8F76, [0x8A7F]=0x8BD6, [0x9481]=0x4986, [0x9183]=0x814C, [0x7602]=0x75D6, [0x9285]=0x94DC, [0x9304]=0x5F55, [0x9908]=0x7CCD, [0x8D10]=0x8D46, [0x8993]=0x89C5, [0x8A95]=0x8BDE, [0x8B14]=0x8C11, [0x5099]=0x5907, [0x5118]=0x5C3D, [0x8622]=0x830F, [0x55AB]=0x5403, [0x8A2A]=0x8BBF, [0x7D30]=0x7EC6, [0x99B3]=0x9A70, [0x7E32]=0x7F27, [0x7AB5]=0x7A8E, [0x6436]=0x62A2, [0x91C3]=0x917E, [0x7642]=0x7597, [0x92C5]=0x950C, [0x5344]=0x5EFF, [0x5C46]=0x5C4A, [0x9948]=0x9990, [0x9A4A]=0x9A85, [0x8CD1]=0x8D48, [0x69D3]=0x6760, [0x9BE2]=0x9CB5, [0x8B54]=0x64B0, [0x925A]=0x94C6, [0x5EDD]=0x53AE, [0x9F5C]=0x9F87, [0x985E]=0x7C7B, [0x64E1]=0x62AC, [0x61E3]=0x61D1, [0x6662]=0x6670, [0x6968]=0x6862, [0x91E6]=0x6263, [0x7D70]=0x7ED6, [0x5AF5]=0x59A9, [0x7B74]=0x7B56, [0x6476]=0x629F, [0x8178]=0x80A0, [0x627A]=0x62B5, [0x6BFF]=0x6BF5, [0x4FC1]=0x4FE3, [0x9384]=0x953F, [0x9F07]=0x9CCC, [0xFE40]=0x2228, [0x9296]=0x94E2, [0x8E92]=0x8DDE, [0x8A15]=0x8BAA, [0x9019]=0x8FD9, [0x7D1B]=0x7EB7, [0x929A]=0x94EB, [0x7E1D]=0x7F1C, [0x9F9C]=0x9F9F, [0x8123]=0x5507, [0x66A2]=0x7545, [0x8AAA]=0x8BF4, [0x532F]=0x6C47, [0x9C31]=0x9CA2, [0x7DB0]=0x7EFE, [0x9933]=0x9967, [0x56C2]=0x56A3, [0x9245]=0x949C, [0x79C8]=0x7C7C, [0x7ACA]=0x7A83, [0x6953]=0x67AB, [0x8ED2]=0x8F69, [0x8A55]=0x8BC4, [0x74D6]=0x9576, [0x9059]=0x9065, [0x91D8]=0x9489, [0x7D5B]=0x7EE6, [0x72DA]=0x65E6, [0xFE5D]=0xFF3B, [0x58DE]=0x574F, [0x923E]=0x94C0, [0x6163]=0x60EF, [0x8FFA]=0x4E43, [0x8CE6]=0x8D4B, [0x69E8]=0x6901, [0x756B]=0x753B, [0x6AEA]=0x67A5, [0x766D]=0x763F, [0x5DF0]=0x5DEF, [0x9EF2]=0x9EEA, [0x9BF4]=0x9CBA, [0x8079]=0x804D, [0x61F8]=0x60AC, [0x82FA]=0x8393, [0x6FFC]=0x6CFA, [0x6B7F]=0x6B81, [0x92DD]=0x950A, [0x5283]=0x5212, [0x7A08]=0x79C6, [0x990A]=0x517B, [0x808F]=0x64CD, [0x91AC]=0x9171, [0x8E10]=0x8DF5, [0x8A02]=0x8BA2, [0x8814]=0x869D, [0x5716]=0x56FE, [0x5399]=0x538D, [0x9C1C]=0x9CD2, [0x6522]=0x6512, [0x8024]=0x85C9, [0x8CA7]=0x8D2B, [0x8F26]=0x8F87, [0x85DD]=0x827A, [0x7006]=0x6E0E, [0x95AD]=0x95FE, [0x50AF]=0x506C, [0x932E]=0x9522, [0xFE30]=0x2236, [0x7D32]=0x7EC1, [0x5834]=0x573A, [0x8B3E]=0x8C29, [0x97C1]=0x7F30, [0x92C3]=0x9512, [0x51C5]=0x6DB8, [0x7044]=0x6EE0, [0x5F46]=0x522B, [0x7BC9]=0x7B51, [0x994A]=0x9993, [0x85CD]=0x84DD, [0x6AD3]=0x6A79, [0x7258]=0x724D, [0x7DDD]=0x7F09, [0x7C5C]=0x7BA8, [0x58DF]=0x5784, [0x5864]=0x57D9, [0x8562]=0x8489, [0x81E5]=0x5367, [0x8CE7]=0x8D55, [0x896A]=0x889C, [0x736E]=0x72DD, [0x7E70]=0x7F32, [0x7D72]=0x4E1D, [0x9874]=0x98A7, [0x64F7]=0x64B7, [0x63F9]=0x80CC, [0x8278]=0x8279, [0x6EFB]=0x6D50, [0x8B7E]=0x8C2B, [0x5680]=0x549B, [0x9203]=0x9498, [0x9582]=0x95E9, [0x5105]=0x5F53, [0x9084]=0x8FD8, [0x5C07]=0x5C06, [0x7F86]=0x7F74, [0x860B]=0x82F9, [0x89BF]=0x89CC, [0x7C6C]=0x7BF1, [0x6A13]=0x697C, [0x58EF]=0x58EE, [0x7319]=0x72F0, [0x9298]=0x94ED, [0x7E1B]=0x7F1A, [0x7D1D]=0x7EB4, [0x9B9E]=0x9C95, [0x9E1A]=0x9E66, [0x6FA6]=0x6EEA, [0x8AA8]=0x8BF2, [0x69AA]=0x6769, [0x93AE]=0x9547, [0x7DB2]=0x7F51, [0x9935]=0x5582, [0x8CBC]=0x8D34, [0x56C0]=0x556D, [0x6F51]=0x6CFC, [0x6DD2]=0x51C4, [0xFE5B]=0xFF5B, [0x7D5D]=0x7ED4, [0x66E0]=0x65F7, [0x8263]=0x6A79, [0x6AE8]=0x680C, [0x73EE]=0x4F69, [0x3A73]=0x39D0, [0x7DF2]=0x7F08, [0x98F4]=0x9974, [0x8477]=0x8364, [0x87F6]=0x86CF, [0x61FA]=0x5FCF, [0x8CFC]=0x8D2D, [0x687F]=0x6746, [0x7DD4]=0x7EF1, [0x7681]=0x7682, [0x5104]=0x4EBF, [0x5D87]=0x5C96, [0x5B08]=0x5A06, [0x580A]=0x57A9, [0x8E91]=0x8E2F, [0x8B93]=0x8BA9, [0x5616]=0x5567, [0x9318]=0x9524, [0x7D1C]=0x7EAD, [0x913A]=0x909D, [0x6E26]=0x6DA1, [0x8B28]=0x8C1F, [0x922E]=0x94CC, [0x9C32]=0x9CCC, [0x65B7]=0x65AD, [0x8CBD]=0x8D3B, [0x69BF]=0x6864, [0x56C1]=0x55EB, [0x53C3]=0x53C2, [0x5442]=0x5415, [0x50C5]=0x4EC5, [0x7DC7]=0x7F01, [0x7E46]=0x7F2A, [0x7D0D]=0x7EB3, [0x584A]=0x5757, [0x81CF]=0x8191, [0x52D9]=0x52A1, [0x9358]=0x94E1, [0x7CDD]=0x7CC1, [0x9D5C]=0x9E48, [0x99DF]=0x9A77, [0xFE6B]=0xFF20, [0x8DFC]=0x5C40, [0x756C]=0x7572, [0x526E]=0x5250, [0x5EF1]=0x75C8, [0x7F70]=0x7F5A, [0x7BF3]=0x7B5A, [0x7C72]=0x5401, [0x85F7]=0x85AF, [0x8CFD]=0x8D5B, [0x9482]=0x954B, [0x7005]=0x6EE2, [0x7D07]=0x7EA5, [0x993E]=0x998F, [0x588A]=0x57AB, [0x640D]=0x635F, [0x858C]=0x8297, [0x6C92]=0x6CA1, [0x9398]=0x9549, [0x509A]=0x6548, [0x7D9C]=0x7EFC, [0x8AC2]=0x8C04, [0x64A2]=0x63B8, [0x2025]=0xA8, [0x61A4]=0x6124, [0x8EA6]=0x8E9C, [0x8A29]=0x8BBB, [0x88AA]=0x795B, [0x55AC]=0x4E54, [0x7E31]=0x7EB5, [0x98F2]=0x996E, [0x99B4]=0x9A6F, [0x6537]=0x8003, [0x8F3B]=0x8F90, [0x6DBC]=0x51C9, [0x9DF4]=0x9E47, [0x5641]=0x6076, [0x7343]=0x5446, [0x71C4]=0x7130, [0x8A23]=0x8BC0, [0x7DA2]=0x7EF8, [0x89D4]=0x7B4B, [0x5557]=0x5556, [0x96D6]=0x867D, [0x93D8]=0x9535, [0x8C4E]=0x7AD6, [0x5C5D]=0x6249, [0x995F]=0x9995, [0x4661]=0x464C, [0x6065]=0x803B, [0x8A69]=0x8BD7, [0x946D]=0x9567, [0x92EE]=0x94D6, [0x7CF2]=0x7C9D, [0x5875]=0x5C18, [0x8577]=0x84E3, [0x8EFE]=0x8F7C, [0x7E2B]=0x7F1D, [0x8AFE]=0x8BFA, [0x7F85]=0x7F57, [0x5287]=0x5267, [0x9106]=0x90D3, [0x9589]=0x95ED, [0x8A0C]=0x8BA7, [0x6191]=0x51ED, [0x6493]=0x6320, [0x9BAE]=0x9C9C, [0x89A1]=0x89CB, [0xFE5A]=0xFF09, [0x85A9]=0x8428, [0x6428]=0x6253, [0x58AB]=0x6A3D, [0x9931]=0x7CC7, [0x9BAD]=0x9C91, [0x7D2E]=0x624E, [0x71B1]=0x70ED, [0x7030]=0x5F25, [0x99C1]=0x9A73, [0x88E1]=0x91CC, [0x8B0A]=0x8C0E, [0x5C37]=0x5C34, [0x92C7]=0x94A1, [0x64D3]=0x39DF, [0x8A62]=0x8BE2, [0x5AD7]=0x59AA, [0x7DD9]=0x7F02, [0x9C58]=0x9C9F, [0x5F5A]=0x6C47, [0x93DD]=0x9558, [0x555E]=0x54D1, [0x8CE3]=0x5356, [0x8E64]=0x8E2A, [0x82E7]=0x82CE, [0x8166]=0x8111, [0x98EB]=0x996B, [0x5A6C]=0x6DEB, [0x9D6E]=0x9E50, [0x51F1]=0x51EF, [0x7372]=0x83B7, [0x5674]=0x55B7, [0x8AF7]=0x8BBD, [0x60FB]=0x607B, [0x9186]=0x76CF, [0x8A8C]=0x5FD7, [0x8090]=0x80F3, [0x5D19]=0x4ED1, [0x9945]=0x9992, [0x929C]=0x8854, [0x9436]=0x956E, [0x6C23]=0x6C14, [0x8F25]=0x8F8A, [0x6227]=0x6217, [0x982B]=0x4FEF, [0x5B2D]=0x5976, [0x7E2F]=0x6F14, [0x70B0]=0x70AE, [0x5433]=0x5434, [0x53B2]=0x5389, [0x56B4]=0x4E25, [0x8CB8]=0x8D37, [0x863F]=0x841D, [0x98C0]=0x98D7, [0x7C43]=0x7BEE, [0x5EC4]=0x53A9, [0x5247]=0x5219, [0x91C6]=0x91C7, [0x8755]=0x8680, [0x984F]=0x989C, [0x9A57]=0x9A8C, [0x765F]=0x762A, [0x95DE]=0x961A, [0x8EE4]=0x8F77, [0x2267]=0x2265, [0x8569]=0x8361, [0x986B]=0x98A4, [0x7E6F]=0x7F33, [0x937C]=0x9488, [0x3473]=0x3447, [0x5775]=0x4E18, [0x89F6]=0x89EF, [0x6D79]=0x6D43, [0x8CF8]=0x5269, [0x6FFA]=0x6E85, [0x7D83]=0x7EE1, [0x9387]=0x9545, [0x5006]=0x4FE9, [0x7489]=0x740F, [0x898B]=0x89C1, [0x8A8D]=0x8BA4, [0x962C]=0x5751, [0x5816]=0x57B4, [0x7D18]=0x7EAE, [0x7E1A]=0x7EE6, [0x9DB1]=0x9A9E, [0x8A22]=0x6B23, [0x8EA5]=0x8E7F, [0x83A7]=0x82CB, [0x98B3]=0x522E, [0x9130]=0x90BB, [0x7232]=0x4E3A, [0x8836]=0x8695, [0x643E]=0x69A8, [0x9A42]=0x9A96, [0x93C7]=0x955F, [0x69CB]=0x6784, [0x8ACD]=0x8BE4, [0x6C4E]=0x6CDB, [0x2252]=0x2248, [0x9BD7]=0x9C9E, [0x7E5A]=0x7F2D, [0x52DD]=0x80DC, [0x945E]=0x9574, [0x68E1]=0x3B4E, [0x8960]=0x88C6, [0x6A62]=0x692D, [0x6F64]=0x6DA6, [0x9BE4]=0x9CB2, [0x7C6E]=0x7BA9, [0x50F1]=0x96C7, [0x75F3]=0x9EBB, [0x8E7A]=0x8DF7, [0x7E6B]=0x7CFB, [0x9801]=0x9875, [0x9307]=0x952B, [0x9409]=0x94E3, [0x968A]=0x961F, [0x8B8C]=0x5BB4, [0x8011]=0x7AEF, [0x6190]=0x601C, [0x986F]=0x663E, [0x9D98]=0x9E55, [0x811B]=0x80EB, [0x6AA2]=0x68C0, [0x6FA4]=0x6CFD, [0x792B]=0x783E, [0x9A2D]=0x9A98, [0x9031]=0x5468, [0x92B2]=0x710A, [0x5635]=0x54D3, [0x84CB]=0x76D6, [0x64BE]=0x631D, [0x7D43]=0x5F26, [0x7E45]=0x7F2B, [0x9347]=0x9534, [0x95C8]=0x95F1, [0x6BCC]=0x6BCB, [0x8655]=0x5904, [0x8AF8]=0x8BF8, [0x7C59]=0x7B93, [0x7DD8]=0x7F04, [0x5EDA]=0x53A8, [0x525D]=0x5265, [0x93DC]=0x9557, [0x8AE2]=0x8BE8, [0x6FE4]=0x6D9B, [0x5A6D]=0x5A05, [0x5BEC]=0x5BBD, [0x9F52]=0x9F7F, [0x6B77]=0x5386, [0x8EFA]=0x8F7A, [0x64FE]=0x6270, [0x9B81]=0x9C85, [0x9087]=0x8FE9, [0x9306]=0x9516, [0x91D9]=0x948B, [0x6595]=0x6593, [0x729B]=0x7266, [0x7D1A]=0x7EA7, [0x9904]=0x9978, [0x652A]=0x6405, [0x99AD]=0x9A6D, [0x9230]=0x94C8, [0x56B3]=0x55BE, [0x5132]=0x50A8, [0x9E1D]=0x9E42, [0x82BB]=0x520D, [0x81BD]=0x80C6, [0x64BF]=0x6361, [0x9BC1]=0x9CA0, [0x7A40]=0x8C37, [0x9EC3]=0x9EC4, [0x7942]=0x4ED6, [0x9346]=0x9494, [0x97C9]=0x97AF, [0x8C8D]=0x72F8, [0x8ACB]=0x8BF7, [0x69CD]=0x67AA, [0x8F4E]=0x8F7F, [0x6250]=0x4EC2, [0x7DB8]=0x7EB6, [0x5E58]=0x5E3B, [0x52DB]=0x52CB, [0x91DD]=0x9488, [0x905C]=0x900A, [0x775E]=0x7750, [0x8A60]=0x548F, [0x6DE5]=0x6E0C, [0x856A]=0x829C, [0x99ED]=0x9A87, [0x986C]=0x98A5, [0x9114]=0x90AC, [0x7D05]=0x7EA2, [0x7386]=0x5179, [0x758A]=0x53E0, [0x9D43]=0x9E3C, [0x6192]=0x6126, [0x8494]=0x83B3, [0x9817]=0x9887, [0x7E98]=0x7F35, [0x721B]=0x70C2, [0x9D9A]=0x9E57, [0x779E]=0x7792, [0x8AA0]=0x8BDA, [0x2027]=0xB7, [0x9A2B]=0x9A9E, [0x5331]=0x532E, [0x8837]=0x883C, [0x5E43]=0x5E0F, [0x9749]=0x53C6, [0x56C8]=0x5453, [0x6A4B]=0x6865, [0x95CA]=0x9614, [0x8555]=0x83B8, [0x64D4]=0x62C5, [0x5857]=0x6D82, [0x9BD6]=0x9CAD, [0x5F59]=0x6C47, [0x525B]=0x521A, [0x7DDA]=0x7EBF, [0x97DE]=0x97EB, [0x6B61]=0x6B22, [0x8AE0]=0x55A7, [0x6E63]=0x95F5, [0x937A]=0x9517, [0x8CE4]=0x8D31, [0x91D0]=0x5398, [0x66E8]=0x663D, [0x7A6B]=0x83B7, [0x85EA]=0x85AE, [0x9E7C]=0x7877, [0x92F0]=0x9502, [0x9673]=0x9648, [0x6EF8]=0x6D52, [0x6DFA]=0x6D45, [0x9802]=0x9876, [0x7D04]=0x7EA6, [0x9689]=0x9667, [0x6514]=0x62E6, [0x9A16]=0x9A9B, [0x8F54]=0x8F9A, [0x761E]=0x7617, [0x8AA1]=0x8BEB, [0x8B20]=0x8C23, [0x9BAB]=0x9C9B, [0x78AD]=0x7800, [0x792C]=0x77FE, [0x9DAF]=0x83BA, [0x7E2E]=0x7F29, [0x92B1]=0x94DE, [0x7032]=0x6F4B, [0x89B7]=0x89D1, [0x8A36]=0x8BC3, [0x6F38]=0x6E10, [0x60BD]=0x51C4, [0x940B]=0x94F4, [0x7D44]=0x7EC4, [0x7246]=0x5899, [0x56C9]=0x5570, [0x9748]=0x7075, [0x5E36]=0x5E26, [0x62D1]=0x94B3, [0x965E]=0x5347, [0x2266]=0x2264, [0x8768]=0x8671, [0x5BEB]=0x5199, [0x98ED]=0x996C, [0x7DEF]=0x7EAC, [0x52F1]=0x52A2, [0x7370]=0x72DE, [0x9072]=0x8FDF, [0x8A76]=0x916C, [0x8EF9]=0x8F75, [0x6C7A]=0x51B3, [0x617C]=0x621A, [0x9A01]=0x9A8B, [0x76EA]=0x8361, [0x5D84]=0x5D2D, [0x7609]=0x6108, [0x880D]=0x874E, [0x8D0F]=0x8D62, [0x8594]=0x8537, [0x931B]=0x951B, [0x701D]=0x6CA5, [0x919C]=0x4E11, [0x6F23]=0x6D9F, [0x95C7]=0x6697, [0x982D]=0x5934, [0x99AC]=0x9A6C, [0x9D2F]=0x9E38, [0x93B0]=0x9552, [0x9435]=0x94C1, [0x8AB6]=0x8C07, [0x8CBA]=0x8D36, [0x5A41]=0x5A04, [0x7BC0]=0x8282, [0x9C45]=0x9CD9, [0x7DC4]=0x7EF2, [0x5147]=0x51F6, [0x7649]=0x7605, [0x74CA]=0x743C, [0x9023]=0x8FDE, [0x6ECE]=0x8365, [0x9957]=0x98E8, [0x9AD6]=0x9ACB, [0x7E59]=0x7FFB, [0x935B]=0x953B, [0x705D]=0x704F, [0x51DC]=0x51DB, [0x555F]=0x542F, [0x76DE]=0x76CF, [0x8A61]=0x8BE9, [0x5B6B]=0x5B59, [0x9D6F]=0x9E4E, [0x93F0]=0x955A, [0x9475]=0x7F50, [0x8AF6]=0x8C0C, [0x8CFA]=0x8D5A, [0x807D]=0x542C, [0x61FC]=0x60E7, [0x5D81]=0x5D5D, [0x7C00]=0x7BA6, [0x9DD7]=0x9E25, [0x5687]=0x5413, [0x98EF]=0x996D, [0x890E]=0x8896, [0x8591]=0x59DC, [0x6214]=0x620B, [0x9E97]=0x4E3D, [0x7D16]=0x7EBC, [0x9818]=0x9886, [0x9B1A]=0x987B, [0x561C]=0x551B, [0x6F22]=0x6C49, [0x8526]=0x8311, [0x81A9]=0x817B, [0x7AAF]=0x7A91, [0x95B1]=0x9605, [0x50B3]=0x4F20, [0x93B5]=0x9553, [0x81DF]=0x810F, [0x8B9E]=0x8C33, [0x6D36]=0x6C79, [0x64BB]=0x631E, [0x613E]=0x5FFE, [0x9A44]=0x9AA2, [0x71C9]=0x7096, [0x934A]=0x70BC, [0x8E4C]=0x8DC4, [0x8ACF]=0x8BF9, [0x99D9]=0x9A78, [0x9858]=0x613F, [0x9B5A]=0x9C7C, [0x92DF]=0x9513, [0x8DE1]=0x8FF9, [0x8F62]=0x8F79, [0x9210]=0x94A4, [0x5E6C]=0x5E31, [0x596E]=0x594B, [0x92E9]=0x94D3, [0x93F5]=0x94E7, [0x7274]=0x62B5, [0x6EF7]=0x5364, [0x64FB]=0x64DE, [0x617E]=0x6B32, [0x9803]=0x9877, [0x9586]=0x95EB, [0x5109]=0x4FED, [0x8B16]=0x8C21, [0x898E]=0x89C3, [0x6490]=0x6491, [0x6294]=0x62B1, [0x7E17]=0x7F1E, [0x9D96]=0x9E59, [0x7919]=0x788D, [0x9B9A]=0x9C92, [0x919E]=0x915D, [0x8CA0]=0x8D1F, [0x8823]=0x86CE, [0x8AA4]=0x8BEF, [0x85A6]=0x8350, [0x8129]=0x4FEE, [0x98FD]=0x9971, [0x7C2B]=0x7BAB, [0x79AE]=0x793C, [0x74B0]=0x73AF, [0x9472]=0x9576, [0x9156]=0x9E29, [0x6BBA]=0x6740, [0x9D1B]=0x9E33, [0x81BE]=0x810D, [0x9D41]=0x4D14, [0x7843]=0x6731, [0x7AC4]=0x7A9C, [0x7647]=0x75EB, [0x55C6]=0x545B, [0x7149]=0x70BC, [0x8F4D]=0x8F99, [0x6ECC]=0x6DA4, [0x5E57]=0x5E3C, [0x5DD6]=0x5CA9, [0x58D8]=0x5792, [0x76DC]=0x76D7, [0x8CE0]=0x8D54, [0x8AE4]=0x8C14, [0x8667]=0x4E8F, [0x5EEC]=0x5E90, [0x99EE]=0x9A73, [0x7375]=0x730E, [0x6DF6]=0x6D9E, [0x647B]=0x63BA, [0x61FE]=0x6151, [0x7D00]=0x7EAA, [0x7787]=0x772F, [0x5108]=0x4FA9, [0x8E8D]=0x8DC3, [0x9805]=0x9879, [0x8CA1]=0x8D22, [0x6E22]=0x6CA8, [0x8AA5]=0x8BF0, [0x6128]=0x60AB, [0x7DAB]=0x7EBF, [0x9CE7]=0x51EB, [0x8209]=0x4E3E, [0x9132]=0x90F8, [0x4FB7]=0x5C40, [0x8938]=0x891B, [0x6A3A]=0x6866, [0x7D40]=0x7ECC, [0x7AC5]=0x7A8D, [0x77C7]=0x8499, [0x50C9]=0x4F65, [0x5C0D]=0x5BF9, [0x8ECD]=0x519B, [0x9C56]=0x9CDC, [0x58D9]=0x5739, [0x9A5A]=0x60CA, [0x775C]=0x7741, [0x93DF]=0x94F2, [0x905E]=0x9012, [0x8CE1]=0x8D53, [0x6AE5]=0x6A71, [0x8E67]=0x7CDF, [0x8466]=0x82C7, [0x9DE6]=0x9E6A, [0x9F6C]=0x9F89, [0x7570]=0x5F02, [0x5672]=0x54D9, [0x52F5]=0x52B1, [0x8C76]=0x8C6E, [0x9015]=0x8FF3, [0x477C]=0x478D, [0x807E]=0x804B, [0x9903]=0x997A, [0x5E82]=0x4EC4, [0x7A05]=0x7A0E, [0x7B84]=0x7B85, [0x5707]=0x56F5, [0x9A40]=0x84E6, [0x7009]=0x6CFB, [0x8D0B]=0x8D5D, [0x528A]=0x523D, [0x6B0F]=0x6924, [0x9C08]=0x9CBD, [0x779C]=0x4056, [0x931F]=0x952C, [0x8A25]=0x8BB7, [0x6BA4]=0x6B87, [0x6727]=0x80E7, [0x64A6]=0x626F, [0x7E2D]=0x7F21, [0x5FAC]=0x65C1, [0x58AE]=0x5815, [0x7431]=0x96D5, [0x53B4]=0x53A3, [0x8CB6]=0x8D2C, [0x9943]=0x998D, [0x5EC2]=0x53A2, [0x9A45]=0x9A71, [0x7BC4]=0x8303, [0x5049]=0x4F1F, [0x51C8]=0x51C0, [0x8B4F]=0x8BA5, [0x6451]=0x63B4, [0x9859]=0x98A1, [0x99D8]=0x9A80, [0x9F4E]=0x8D4D, [0x565D]=0x549D, [0x57DC]=0x91CE, [0x50DE]=0x4F2A, [0x61E8]=0x6079, [0x7E6D]=0x8327, [0x7FEC]=0x7FDA, [0x9B6F]=0x9C81, [0x7152]=0x709C, [0x5275]=0x521B, [0x6F77]=0x6ED7, [0x8879]=0x53EA, [0x89F8]=0x89E6, [0x6AFA]=0x68C2, [0xFE57]=0xFF01, [0x7D02]=0x7EA3, [0x9208]=0x949A, [0x8E8B]=0x8DFB, [0x6C0C]=0x6C07, [0x8B0E]=0x8C1C, [0x8195]=0x8158, [0x9DD9]=0x9E37, [0x969B]=0x9645, [0x5AAE]=0x5077, [0x6AA3]=0x6A2F, [0x5EAB]=0x5E93, [0x7DAD]=0x7EF4, [0x98AF]=0x98D2, [0x9B2E]=0x9604, [0x5630]=0x53FD, [0x92B3]=0x9510, [0x8CB7]=0x4E70, [0x6A38]=0x6734, [0x633E]=0x631F, [0x5E40]=0x5E27, [0x7D42]=0x7EC8, [0x9746]=0x53C7, [0x9248]=0x94CA, [0x8ECB]=0x8F67, [0x88CF]=0x91CC, [0x6B4E]=0x53F9, [0x8552]=0x836C, [0x81D5]=0x8198, [0x96DB]=0x96CF, [0x90DF]=0x90CF, [0x7C64]=0x7B7E, [0x8E60]=0x8DD6, [0x98BA]=0x626C, [0x8766]=0x867E, [0x616A]=0x6004, [0x5C6C]=0x5C5E, [0x78EF]=0x77F6, [0x95BC]=0x960F, [0x7670]=0x75C8, [0x52F3]=0x52CB, [0x91F5]=0x9497, [0x5074]=0x4FA7, [0x86FB]=0x8715, [0x8AEB]=0x8C0F, [0x9A03]=0x5446, [0x9905]=0x997C, [0x518A]=0x518C, [0x8D0D]=0x8D61, [0x8B8E]=0x96E0, [0x5B19]=0x5AF1, [0x95AB]=0x9603, [0x551D]=0x55CA, [0x701F]=0x6F47, [0x6A23]=0x6837, [0x93E2]=0x9556, [0x5E2B]=0x5E08, [0x582F]=0x5C27, [0x5BAE]=0x5BAB, [0x76B0]=0x75B1, [0x9233]=0x94B6, [0x55B2]=0x54DF, [0x50B4]=0x4F1B, [0x4FB6]=0x4FA3, [0x8B39]=0x8C28, [0x6AB8]=0x67E0, [0x89BA]=0x89C9, [0x84BC]=0x82CD, [0x9A43]=0x9AA0, [0x9DC2]=0x9E5E, [0x7945]=0x7946, [0x98C4]=0x98D8, [0x97C6]=0x5343, [0x993C]=0x9969, [0x9C37]=0x9CA6, [0x9C57]=0x9CDE, [0x97DC]=0x97EC, [0x755D]=0x4EA9, [0x92FB]=0x9274, [0x93DE]=0x955B, [0x8F61]=0x8F94, [0x8A63]=0x8BE3, [0x5E6B]=0x5E2E, [0x786F]=0x781A, [0x75F2]=0x9EBB, [0x70F4]=0x70C3, [0x4C77]=0x4CA3, [0x6AF8]=0x6989, [0x667B]=0x6697, [0x64FC]=0x64B8, [0x9B83]=0x9C86, [0x9C02]=0x9C97, [0x7904]=0x785A, [0x7587]=0x7574, [0x5606]=0x53F9, [0x5289]=0x5218, [0x9308]=0x9529, [0x6C8D]=0x51B1, [0x898F]=0x89C4, [0x8A0E]=0x8BA8, [0x92F8]=0x952F, [0x5D97]=0x5D02, [0x921E]=0x94A7, [0x8EA1]=0x8E51, [0x58DA]=0x5786, [0x9D30]=0x9E39, [0x7D2C]=0x4337, [0x7A2E]=0x79CD, [0x96B1]=0x9690, [0x93B3]=0x954D, [0x9432]=0x956F, [0x50B5]=0x503A, [0x9134]=0x90BA, [0x8AB9]=0x8BFD, [0x6B38]=0x5509, [0x87BB]=0x877C, [0x81BF]=0x8113, [0x5EC1]=0x5395, [0xFE61]=0xFF0A, [0x55C7]=0x556C, [0x7646]=0x75E8, [0x904A]=0x6E38, [0x8A4E]=0x8BB5, [0x8452]=0x836D, [0x7DD7]=0x7F03, [0xFE56]=0xFF1F, [0x9B58]=0x9B47, [0x585A]=0x51A2, [0x9055]=0x8FDD, [0x9DBB]=0x9E58, [0x71DF]=0x8425, [0x925E]=0x94BA, [0x923A]=0x94B0, [0x8964]=0x8934, [0x6368]=0x820D, [0x9D6C]=0x9E4F, [0x7472]=0x73B1, [0x90F5]=0x90AE, [0x6B78]=0x5F52, [0x87FB]=0x8681, [0x84FD]=0x835C, [0x5805]=0x575A, [0x9209]=0x94A0, [0x908A]=0x8FB9, [0x690F]=0x6860, [0x7D17]=0x7EB1, [0x7E96]=0x7EA4, [0x9A19]=0x9A97, [0x941D]=0x9562, [0x511F]=0x507F, [0x7344]=0x72F1, [0x8E21]=0x8737, [0x6FA0]=0x6E11, [0x8CA2]=0x8D21, [0x9695]=0x9668, [0x6229]=0x622C, [0x9C2D]=0x9CCD, [0x7DAC]=0x7EF6, [0x7AAE]=0x7A77, [0x9333]=0x9530, [0x6A39]=0x6811, [0x65BC]=0x4E8E, [0x5B43]=0x5A18, [0x5249]=0x9509, [0x93C8]=0x94FE, [0x50CA]=0x4ED9, [0x6C4D]=0x4E38, [0x5BD8]=0x7F6E, [0x78DA]=0x7816, [0x95DC]=0x5173, [0x52DE]=0x52B3, [0x4FE0]=0x4FA0, [0x8CE2]=0x8D24, [0x7D50]=0x7ED3, [0x5F6B]=0x96D5, [0x9C6D]=0x9C9A, [0x7DEC]=0x7F05, [0x9AEE]=0x53D1, [0x7671]=0x762B, [0xFE52]=0xFF0E, [0x5075]=0x4FA6, [0x71F4]=0x70E9, [0x96A8]=0x968F, }; RediSearch-1.2.2/src/dep/friso/friso_string.c000066400000000000000000000171551364126773500211110ustar00rootroot00000000000000/* * utf-8 handle function implements. * you could modify it or re-release it but never for commercial use. * * @author chenxin */ #include "friso_API.h" #include #include #include /* ****************************************** * fstring buffer functions implements. * ********************************************/ /** * create a new buffer * @Note: * 1. it's real length is 1 byte greater than the specifield value * 2. we did not do any optimization for the memory allocation to ... * avoid the memory defragmentation. * * @date: 2014-10-16 */ __STATIC_API__ fstring create_buffer( uint_t length ) { fstring buffer = ( fstring ) FRISO_MALLOC( length + 1 ); if ( buffer == NULL ) { ___ALLOCATION_ERROR___ } memset( buffer, 0x00, length + 1 ); return buffer; } //the __allocs should not be smaller than sb->length __STATIC_API__ string_buffer_t resize_buffer( string_buffer_t sb, uint_t __allocs ) { //create a new buffer. //if ( __allocs < sb->length ) __allocs = sb->length + 1; fstring str = create_buffer( __allocs ); //register uint_t t; //for ( t = 0; t < sb->length; t++ ) { // str[t] = sb->buffer[t]; //} memcpy( str, sb->buffer, sb->length ); FRISO_FREE( sb->buffer ); sb->buffer = str; sb->allocs = __allocs; return sb; } //create a new fstring buffer with a default opacity. //FRISO_API string_buffer_t new_string_buffer( void ) //{ // return new_string_buffer_with_opacity( __BUFFER_DEFAULT_LENGTH__ ); //} //create a new fstring buffer with the given opacity. FRISO_API string_buffer_t new_string_buffer_with_opacity( uint_t opacity ) { string_buffer_t sb = ( string_buffer_t ) FRISO_MALLOC( sizeof( string_buffer_entry ) ); if ( sb == NULL ) { ___ALLOCATION_ERROR___ } sb->buffer = create_buffer( opacity ); sb->length = 0; sb->allocs = opacity; return sb; } //create a buffer with the given string. FRISO_API string_buffer_t new_string_buffer_with_string( fstring str ) { //buffer allocations. string_buffer_t sb = ( string_buffer_t ) FRISO_MALLOC( sizeof( string_buffer_entry ) ); if ( sb == NULL ) { ___ALLOCATION_ERROR___ } //initialize sb->length = strlen( str ); sb->buffer = create_buffer( sb->length + __BUFFER_DEFAULT_LENGTH__ ); sb->allocs = sb->length + __BUFFER_DEFAULT_LENGTH__; //register uint_t t; //copy the str to the buffer. //for ( t = 0; t < sb->length; t++ ) { // sb->buffer[t] = str[t]; //} memcpy( sb->buffer, str, sb->length ); return sb; } FRISO_API void string_buffer_append( string_buffer_t sb, fstring __str ) { register uint_t __len__ = strlen( __str ); //check the necessity to resize the buffer. if ( sb->length + __len__ > sb->allocs ) { sb = resize_buffer( sb, ( sb->length + __len__ ) * 2 + 1 ); } //register uint_t t; ////copy the __str to the buffer. //for ( t = 0; t < __len__; t++ ) { // sb->buffer[ sb->length++ ] = __str[t]; //} memcpy( sb->buffer + sb->length, __str, __len__ ); sb->length += __len__; } FRISO_API void string_buffer_append_char( string_buffer_t sb, char ch ) { //check the necessity to resize the buffer. if ( sb->length + 1 > sb->allocs ) { sb = resize_buffer( sb, sb->length * 2 + 1 ); } sb->buffer[sb->length++] = ch; } FRISO_API void string_buffer_insert( string_buffer_t sb, uint_t idx, fstring __str ) { } /* * remove the given bytes from the buffer start from idx. * this will cause the byte move after the idx+length. * * @return the new string. */ FRISO_API fstring string_buffer_remove( string_buffer_t sb, uint_t idx, uint_t length ) { uint_t t; //move the bytes after the idx + length for ( t = idx + length; t < sb->length; t++ ) { sb->buffer[t - length] = sb->buffer[t]; } sb->buffer[t] = '\0'; //memcpy( sb->buffer + idx, // sb->buffer + idx + length, // sb->length - idx - length ); t = sb->length - idx; if ( t > 0 ) { sb->length -= ( t > length ) ? length : t; } sb->buffer[sb->length-1] = '\0'; return sb->buffer; } /* * turn the string_buffer to a string. * or return the buffer of the string_buffer. */ FRISO_API string_buffer_t string_buffer_trim( string_buffer_t sb ) { //resize the buffer. if ( sb->length < sb->allocs - 1 ) { sb = resize_buffer( sb, sb->length + 1 ); } return sb; } /* * free the given fstring buffer. * and this function will not free the allocations of the * string_buffer_t->buffer, we return it to you, if there is * a necessary you could free it youself by calling free(); */ FRISO_API fstring string_buffer_devote( string_buffer_t sb ) { fstring buffer = sb->buffer; FRISO_FREE( sb ); return buffer; } /* * clear the given fstring buffer. * reset its buffer with 0 and reset its length to 0. */ FRISO_API void string_buffer_clear( string_buffer_t sb ) { memset( sb->buffer, 0x00, sb->length ); sb->length = 0; } //free everything of the fstring buffer. FRISO_API void free_string_buffer( string_buffer_t sb ) { FRISO_FREE( sb->buffer ); FRISO_FREE( sb ); } /** * create a new string_split_entry. * * @param source * @return string_split_t; */ FRISO_API string_split_t new_string_split( fstring delimiter, fstring source ) { string_split_t e = ( string_split_t ) FRISO_MALLOC( sizeof( string_split_entry ) ); if ( e == NULL ) { ___ALLOCATION_ERROR___; } e->delimiter = delimiter; e->delLen = strlen(delimiter); e->source = source; e->srcLen = strlen(source); e->idx = 0; return e; } FRISO_API void string_split_reset( string_split_t sst, fstring delimiter, fstring source ) { sst->delimiter = delimiter; sst->delLen = strlen(delimiter); sst->source = source; sst->srcLen = strlen(source); sst->idx = 0; } FRISO_API void string_split_set_source( string_split_t sst, fstring source ) { sst->source = source; sst->srcLen = strlen(source); sst->idx = 0; } FRISO_API void string_split_set_delimiter( string_split_t sst, fstring delimiter ) { sst->delimiter = delimiter; sst->delLen = strlen( delimiter ); sst->idx = 0; } FRISO_API void free_string_split( string_split_t sst ) { FRISO_FREE(sst); } /** * get the next split fstring, and copy the * splited fstring into the __dst buffer . * * @param string_split_t * @param __dst * @return fstring (NULL if reach the end of the source * or there is no more segmentation) */ FRISO_API fstring string_split_next( string_split_t sst, fstring __dst) { uint_t i, _ok; fstring _dst = __dst; //check if reach the end of the fstring if ( sst->idx >= sst->srcLen ) return NULL; while ( 1 ) { _ok = 1; for ( i = 0; i < sst->delLen && (sst->idx + i < sst->srcLen); i++ ) { if ( sst->source[sst->idx+i] != sst->delimiter[i] ) { _ok = 0; break; } } //find the delimiter here, //break the loop and self plus the sst->idx, then return the buffer . if ( _ok == 1 ) { sst->idx += sst->delLen; break; } //coy the char to the buffer *_dst++ = sst->source[sst->idx++]; //check if reach the end of the fstring if ( sst->idx >= sst->srcLen ) break; } *_dst = '\0'; return _dst; } RediSearch-1.2.2/src/dep/hll/000077500000000000000000000000001364126773500156615ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/hll/LICENSE000077500000000000000000000020611364126773500166700ustar00rootroot00000000000000Copyright (c) 2015 Artem Zaytsev Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. RediSearch-1.2.2/src/dep/hll/hll.c000077500000000000000000000053561364126773500166200ustar00rootroot00000000000000#include #include #include #include #include #include "../../util/fnv.h" #include "hll.h" static __inline uint8_t _hll_rank(uint32_t hash, uint8_t bits) { uint8_t i; for (i = 1; i <= 32 - bits; i++) { if (hash & 1) break; hash >>= 1; } return i; } int hll_init(struct HLL *hll, uint8_t bits) { if (bits < 4 || bits > 20) { errno = ERANGE; return -1; } hll->bits = bits; hll->size = (size_t)1 << bits; hll->registers = calloc(hll->size, 1); return 0; } void hll_destroy(struct HLL *hll) { free(hll->registers); hll->registers = NULL; } static __inline void _hll_add_hash(struct HLL *hll, uint32_t hash) { uint32_t index = hash >> (32 - hll->bits); uint8_t rank = _hll_rank(hash, hll->bits); if (rank > hll->registers[index]) { hll->registers[index] = rank; } } void hll_add_hash(struct HLL *hll, uint32_t h) { _hll_add_hash(hll, h); } void hll_add(struct HLL *hll, const void *buf, size_t size) { uint32_t hash = rs_fnv_32a_buf((void *)buf, (uint32_t)size, 0x5f61767a); _hll_add_hash(hll, hash); } double hll_count(const struct HLL *hll) { double alpha_mm; uint32_t i; switch (hll->bits) { case 4: alpha_mm = 0.673; break; case 5: alpha_mm = 0.697; break; case 6: alpha_mm = 0.709; break; default: alpha_mm = 0.7213 / (1.0 + 1.079 / (double)hll->size); break; } alpha_mm *= ((double)hll->size * (double)hll->size); double sum = 0; for (i = 0; i < hll->size; i++) { sum += 1.0 / (1 << hll->registers[i]); } double estimate = alpha_mm / sum; if (estimate <= 5.0 / 2.0 * (double)hll->size) { int zeros = 0; for (i = 0; i < hll->size; i++) zeros += (hll->registers[i] == 0); if (zeros) estimate = (double)hll->size * log((double)hll->size / zeros); } else if (estimate > (1.0 / 30.0) * 4294967296.0) { estimate = -4294967296.0 * log(1.0 - (estimate / 4294967296.0)); } return estimate; } int hll_merge(struct HLL *dst, const struct HLL *src) { uint32_t i; if (dst->bits != src->bits) { errno = EINVAL; return -1; } for (i = 0; i < dst->size; i++) { if (src->registers[i] > dst->registers[i]) dst->registers[i] = src->registers[i]; } return 0; } int hll_load(struct HLL *hll, const void *registers, size_t size) { uint8_t bits = 0; size_t s = size; while (s) { if (s & 1) break; bits++; s >>= 1; } if (!bits || ((size_t)1 << bits) != size) { errno = EINVAL; return -1; } if (hll_init(hll, bits) == -1) return -1; memcpy(hll->registers, registers, size); return 0; } extern uint32_t _hll_hash(const struct HLL *hll) { return rs_fnv_32a_buf(hll->registers, (uint32_t)hll->size, 0); } RediSearch-1.2.2/src/dep/hll/hll.h000077500000000000000000000011551364126773500166160ustar00rootroot00000000000000#ifndef AVZ_HLL_H #define AVZ_HLL_H #include #include struct HLL { uint8_t bits; size_t size; uint8_t *registers; }; extern int hll_init(struct HLL *hll, uint8_t bits); extern int hll_load(struct HLL *hll, const void *registers, size_t size); extern void hll_destroy(struct HLL *hll); extern int hll_merge(struct HLL *dst, const struct HLL *src); extern void hll_add(struct HLL *hll, const void *buf, size_t size); void hll_add_hash(struct HLL *hll, uint32_t h); extern double hll_count(const struct HLL *hll); extern uint32_t _hll_hash(const struct HLL *hll); #endif /* AVZ_HLL_H */ RediSearch-1.2.2/src/dep/libnu/000077500000000000000000000000001364126773500162135ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/libnu/LICENSE000066400000000000000000000020771364126773500172260ustar00rootroot00000000000000Copyright (c) 2013 Aleksey Tulinov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. RediSearch-1.2.2/src/dep/libnu/Makefile000066400000000000000000000013571364126773500176610ustar00rootroot00000000000000# find the OS uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') # Compile flags for non-osx / osx ifneq ($(uname_S),Darwin) CFLAGS ?= -W -Wall -fno-common -g -ggdb -fPIC -std=c99 -O2 CPPFLAGS ?= -W -Wall -fno-common -g -ggdb else CFLAGS ?= -W -Wall -dynamic -fno-common -g -fPIC -ggdb -std=c99 -O2 CPPFLAGS ?= -W -Wall -dynamic -fno-common -g -ggdb -O2 endif SOURCEDIR = . CC_SOURCES = $(wildcard $(SOURCEDIR)/*.c) CC_OBJECTS = $(sort $(patsubst $(SOURCEDIR)/%.c, $(SOURCEDIR)/%.o, $(CC_SOURCES))) .SUFFIXES: .c .cc .o all: libnu.a # $(SOURCEDIR)/%.o: $(SOURCEDIR)/%.c # $(CC) -I. $(SHOBJ_CFLAGS) -fPIC -fpermissive -c $< -o $@ # test1.xo: ../redismodule.h libnu.a: $(CC_OBJECTS) ar rcs $@ $^ clean: rm -rf *.xo *.so *.o *.a RediSearch-1.2.2/src/dep/libnu/README.md000066400000000000000000000003021364126773500174650ustar00rootroot00000000000000# Libnu The files in this folder are taken from the (excellent) **nunicode** library by Aleksey Tulinov. See [https://bitbucket.org/alekseyt/nunicode](https://bitbucket.org/alekseyt/nunicode) RediSearch-1.2.2/src/dep/libnu/casemap.h000066400000000000000000000102721364126773500177770ustar00rootroot00000000000000#ifndef NU_TOUPPER_H #define NU_TOUPPER_H #include #include "config.h" #include "defines.h" #include "strings.h" #include "udb.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif /** Synonim to nu_casemap_read. It is recommended to use * nu_casemap_read instead. */ #define NU_CASEMAP_DECODING_FUNCTION NU_UDB_DECODING_FUNCTION /** Read (decoding) function for use with transformation results of * casemapping functions. E.g. nu_casemap_read(nu_tolower(0x0041)); * will read first codepoint of 'A' transformed to lower case. */ #define nu_casemap_read (nu_udb_read) /** Casemap codepoint * * @ingroup transformations */ typedef nu_transformation_t nu_casemapping_t; #ifdef NU_WITH_TOUPPER /** Return uppercase value of codepoint. Uncoditional casemapping. * * @ingroup transformations * @param codepoint unicode codepoint * @return uppercase codepoint or 0 if mapping doesn't exist */ NU_EXPORT const char* nu_toupper(uint32_t codepoint); /** Return uppercase value of codepoint. Context-sensitivity is not * implemented internally, returned result is equal to calling nu_toupper() * on corresponding codepoint. * * @ingroup transformations_internal * @param encoded pointer to encoded string * @param limit memory limit of encoded string or NU_UNLIMITED * @param read read (decoding) function * @param u (optional) codepoint which was (or wasn't) transformed * @param transform output value of codepoint transformed into uppercase or 0 * if mapping doesn't exist. Can't be NULL, supposed to be decoded with * nu_casemap_read * @param context not used * @return pointer to the next codepoint in string */ NU_EXPORT const char* _nu_toupper(const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transform, void *context); #endif /* NU_WITH_TOUPPER */ #ifdef NU_WITH_TOLOWER /** Return lowercase value of codepoint. Unconditional casemapping. * * @ingroup transformations * @param codepoint unicode codepoint * @return lowercase codepoint or 0 if mapping doesn't exist */ NU_EXPORT const char* nu_tolower(uint32_t codepoint); /** Return lowercase value of codepoint. Will transform uppercase * Sigma ('Σ') into final sigma ('ς') if it occurs at string boundary or * followed by U+0000. Might require single read-ahead when * encountering Sigma. * * @ingroup transformations_internal * @param encoded pointer to encoded string * @param limit memory limit of encoded string or NU_UNLIMITED * @param read read (decoding) function * @param u (optional) codepoint which was (or wasn't) transformed * @param transform output value of codepoint transformed into lowercase or 0 * if mapping doesn't exist. Can't be NULL, supposed to be decoded with * nu_casemap_read * @param context not used * @return pointer to the next codepoint in string */ NU_EXPORT const char* _nu_tolower(const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transform, void *context); #endif /* NU_WITH_TOLOWER */ #ifdef NU_WITH_TOFOLD /** Return value of codepoint with case differences eliminated * * @ingroup transformations * @param codepoint unicode codepoint * @return casefolded codepoint or 0 if mapping doesn't exist */ NU_EXPORT const char* nu_tofold(uint32_t codepoint); /** Return value of codepoint with case differences eliminated. * Context-sensitivity is not implemented internally, returned result is equal * to calling nu_tofold() on corresponding codepoint. * * @ingroup transformations_internal * @param encoded pointer to encoded string * @param limit memory limit of encoded string or NU_UNLIMITED * @param read read (decoding) function * @param u (optional) codepoint which was (or wasn't) transformed * @param transform output value of casefolded codepoint or 0 * if mapping doesn't exist. Can't be NULL, supposed to be decoded with * nu_casemap_read * @param context not used * @return pointer to the next codepoint in string */ NU_EXPORT const char* _nu_tofold(const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transform, void *context); #endif /* NU_WITH_TOFOLD */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_TOUPPER_H */ RediSearch-1.2.2/src/dep/libnu/casemap_internal.h000066400000000000000000000007271364126773500216770ustar00rootroot00000000000000#ifndef NU_CASEMAP_INTERNAL_H #define NU_CASEMAP_INTERNAL_H #include #include #include "udb.h" /** Casemap codepoint * * @ingroup transformations */ static inline const char* _nu_to_something(uint32_t codepoint, const int16_t *G, size_t G_SIZE, const uint32_t *VALUES_C, const uint16_t *VALUES_I, const uint8_t *COMBINED) { return nu_udb_lookup(codepoint, G, G_SIZE, VALUES_C, VALUES_I, COMBINED); } #endif /* NU_CASEMAP_INTERNAL_H */ RediSearch-1.2.2/src/dep/libnu/cesu8.c000066400000000000000000000023141364126773500174060ustar00rootroot00000000000000#include "cesu8.h" #ifdef NU_WITH_CESU8_READER #ifdef NU_WITH_VALIDATION int nu_cesu8_validread(const char *encoded, size_t max_len) { const unsigned char *up = (const unsigned char *)(encoded); /* i guess there is no way to detect misplaceed CESU-8 * trail surrogate alone, it will produce valid UTF-8 sequence * greater than U+10000 */ /* 6-bytes sequence * * 11101101 followed by 1010xxxx should be * then followed by xxxxxxxx 11101101 1011xxxx xxxxxxxx */ if (*(up) == 0xED && (*(up + 1) & 0xF0) == 0xA0) { if (max_len < 6) { return 0; } if (*(up + 3) != 0xED || (*(up + 4) & 0xF0) != 0xB0) { return 0; } return 6; } return utf8_validread_basic(encoded, max_len); } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_CESU8_READER */ #ifdef NU_WITH_CESU8_WRITER char* nu_cesu8_write(uint32_t unicode, char *cesu8) { unsigned codepoint_len = cesu8_codepoint_length(unicode); if (cesu8 != 0) { switch (codepoint_len) { case 1: *cesu8 = (char)(unicode); break; case 2: b2_utf8(unicode, cesu8); break; case 3: b3_utf8(unicode, cesu8); break; default: b6_cesu8(unicode, cesu8); break; /* len == 6 */ } } return cesu8 + codepoint_len; } #endif /* NU_WITH_CESU8_WRITER */ RediSearch-1.2.2/src/dep/libnu/cesu8.h000066400000000000000000000057611364126773500174240ustar00rootroot00000000000000#ifndef NU_CESU8_H #define NU_CESU8_H #include #include #include "config.h" #include "cesu8_internal.h" #include "defines.h" #include "utf8_internal.h" /** @defgroup cesu8 CESU-8 support * * http://www.unicode.org/reports/tr26/ */ #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_CESU8_READER /** Read codepoint from UTF-8 string * * @ingroup cesu8 * @param cesu8 pointer to CESU-8 encoded string * @param unicode output unicode codepoint or 0 * @return pointer to next codepoint in CESU-8 string */ static inline const char* nu_cesu8_read(const char *cesu8, uint32_t *unicode) { uint32_t c = *(unsigned char *)(cesu8); if (c == 0xED) { /* 6-bytes sequence */ if (unicode != 0) { cesu8_6b(cesu8, unicode); } return cesu8 + 6; } else if (c >= 0x80) { if (c < 0xE0) { if (unicode != 0) { utf8_2b(cesu8, unicode); } return cesu8 + 2; } else { if (unicode != 0) { utf8_3b(cesu8, unicode); } return cesu8 + 3; } } else if (unicode != 0) { *unicode = c; } return cesu8 + 1; } #ifdef NU_WITH_REVERSE_READ /** Read codepoint from CESU-8 string in backward direction * * Note that it is your responsibility to check that this call * is not going under beginning of encoded string. Normally you * shouldn't call it like this: nu_cesu8_revread(&u, "hello"); which * will result in undefined behavior * * @ingroup cesu8 * @param unicode output unicode codepoint or 0 * @param cesu8 pointer to CESU-8 encoded string * @return pointer to previous codepoint in CESU-8 string */ static inline const char* nu_cesu8_revread(uint32_t *unicode, const char *cesu8) { /* valid CESU-8 has either 10xxxxxx (continuation byte) * or beginning of byte sequence * * one exception is 11101101 followed by 1011xxxx which is * trail surrogate of 6-byte sequence. */ const char *p = cesu8 - 1; while (((unsigned char)(*p) & 0xC0) == 0x80) { /* skip every 0b10000000 */ --p; } if ((unsigned char)(*p) == 0xED && ((unsigned char)*(p + 1) & 0xF0) == 0xB0) { /* trail surrogate */ p -= 3; } if (unicode != 0) { nu_cesu8_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** Validate codepoint in string * * @ingroup cesu8 * @param encoded buffer with encoded string * @param max_len buffer length * @return codepoint length or 0 on error */ NU_EXPORT int nu_cesu8_validread(const char *encoded, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_CESU8_READER */ #ifdef NU_WITH_CESU8_WRITER /** Write unicode codepoints into CESU-8 encoded string * * @ingroup cesu8 * @param unicode unicode codepoint * @param cesu8 pointer to buffer to write CESU-8 encoded text to, * shoud be large enough to hold encoded value * @return pointer to byte after last written */ NU_EXPORT char* nu_cesu8_write(uint32_t unicode, char *cesu8); #endif /* NU_WITH_CESU8_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_CESU8_H */ RediSearch-1.2.2/src/dep/libnu/cesu8_internal.h000066400000000000000000000051531364126773500213130ustar00rootroot00000000000000#ifndef NU_CESU8_INTERNAL_H #define NU_CESU8_INTERNAL_H #include "utf8_internal.h" static inline unsigned cesu8_char_length(const char c) { if ((unsigned char)(c) == 0xED) { return 6; } return utf8_char_length(c); } static inline void cesu8_6b(const char *p, uint32_t *codepoint) { const unsigned char *up = (const unsigned char *)(p); /* CESU-8: 11101101 1010xxxx 10xxxxxx 11101101 1011xxxx 10xxxxxx * * |__ 1st unicode octet * 1010xxxx -> 0000xxxx 00000000 00000000 | * -------- * 10xxxxxx << 2 -> 0000xxxx xxxxxx00 00000000 |__ 2nd unicode octet * 1011xxxx >> 2 -> 0000xxxx xxxxxxxx 00000000 | * -------- * 1011xxxx << 6 -> 0000xxxx xxxxxxxx xx000000 |__ 3rd unicode octet * 10xxxxxx -> 0000xxxx xxxxxxxx xxxxxxxx | * -------- */ *codepoint = (((*(up + 1) & 0x0F) + 1) << 16) | (((*(up + 2) & 0x3F) << 2 | (*(up + 4) & 0x0C) >> 2) << 8) | ((*(up + 4) & 0x03) << 6 | (*(up + 5) & 0x3F)); } static inline unsigned cesu8_codepoint_length(uint32_t codepoint) { if (codepoint > 0xFFFF) { return 6; } return utf8_codepoint_length(codepoint); } static inline void b6_cesu8(uint32_t codepoint, char *p) { unsigned char *up = (unsigned char *)(p); /* UNICODE: 0000xxxx xxxxxxxx xxxxxxxx * * -> 11101101 10100000 10000000 11101101 10110000 10000000 * |__ 2nd CESU-8 octet * 0000xxxx >> 16 -> 11101101 1010xxxx 10000000 11101101 10110000 10000000 | * -------- * |__ 3rd CESU-8 octet * xxxxxxxx >> 10 -> 11101101 1010xxxx 10xxxxxx 11101101 10110000 10000000 | * -------- * xxxxxxxx >> 6 -> 11101101 1010xxxx 10xxxxxx 11101101 1011xx00 10000000 |__ 5th CESU-8 octet * xxxxxxxx >> 6 -> 11101101 1011xxxx 10xxxxxx 11101101 1011xxxx 10000000 | * -------- * |__ 6th CESU-8 octet * xxxxxxxx -> 11101101 1011xxxx 10xxxxxx 11101101 1011xxxx 10xxxxxx | * -------- */ *(up) = 0xED; *(up + 1) = 0xA0 | (((codepoint & 0x1F0000) >> 16) - 1); *(up + 2) = 0x80 | (codepoint & 0xFC00) >> 10; *(up + 3) = 0xED; *(up + 4) = 0xB0 | (codepoint & 0x0C00) >> 6 | (codepoint & 0xC0) >> 6; *(up + 5) = 0x80 | (codepoint & 0x3F); } #endif /* NU_CESU8_INTERNAL_H */ RediSearch-1.2.2/src/dep/libnu/config.h000066400000000000000000000133071364126773500176350ustar00rootroot00000000000000#ifndef NU_BUILD_CONFIG_H #define NU_BUILD_CONFIG_H #define NU_WITH_EVERYTHING /** @file config.h * * This file list available build options and provide some shortcuts, * like NU_WITH_UTF16 will enable NU_WITH_UTF16LE + NU_WITH_UTF16BE. * * At build time you might set either particular option or shortcut. Either * way you don't have to and shouldn't modify this file, just set build flags * at the environment. * * This file will also enable several dependencies for you: case-mapping * depends on NU_WITH_UDB, NU_UTF8_READER and so. */ /* Definitions not covered in this file which should be defined * externally. * * NU_BUILD_STATIC: will change functions visibility to "hidden" (GCC). * @see defines.h * * NU_DISABLE_CONTRACTIONS: disables forward-reading during collation, * only weights of a single codepoints will be compared (enabled in release build) */ /* Enable everything, see below for details on a specific option */ #ifdef NU_WITH_EVERYTHING # define NU_WITH_UTF8 # define NU_WITH_CESU8 # define NU_WITH_UTF16 # define NU_WITH_UTF16HE # define NU_WITH_UTF32 # define NU_WITH_UTF32HE # define NU_WITH_STRINGS # define NU_WITH_EXTRA # define NU_WITH_REVERSE_READ # define NU_WITH_VALIDATION # define NU_WITH_COLLATION # define NU_WITH_CASEMAP #endif /* NU_WITH_EVERYTHING */ /* Enable UTF-8 decoding and encoding */ #ifdef NU_WITH_UTF8 # define NU_WITH_UTF8_READER /* UTF-8 decoding functions */ # define NU_WITH_UTF8_WRITER /* UTF-8 encoding functions */ #endif /* NU_WITH_UTF8 */ /* Enable CESU-8 decoding and encoding */ #ifdef NU_WITH_CESU8 # define NU_WITH_CESU8_READER # define NU_WITH_CESU8_WRITER #endif /* NU_WITH_CESU8 */ /* Enable UTF-16LE decoding and encoding */ #ifdef NU_WITH_UTF16LE # define NU_WITH_UTF16LE_READER # define NU_WITH_UTF16LE_WRITER #endif /* NU_WITH_UTF16LE */ /* Enable UTF-16BE decoding and encoding */ #ifdef NU_WITH_UTF16BE # define NU_WITH_UTF16BE_READER # define NU_WITH_UTF16BE_WRITER #endif /* NU_WITH_UTF16BE */ /* Enable UTF-16HE decoding and encoding */ #ifdef NU_WITH_UTF16HE # define NU_WITH_UTF16HE_READER # define NU_WITH_UTF16HE_WRITER #endif /* NU_WITH_UTF16HE */ /* Enable all UTF-16 options */ #ifdef NU_WITH_UTF16 # define NU_WITH_UTF16_READER # define NU_WITH_UTF16_WRITER #endif /* NU_WITH_UTF16 */ /* Enable UTF-16LE and BE decoders of UTF-16 decoder is requested */ #ifdef NU_WITH_UTF16_READER # define NU_WITH_UTF16LE_READER # define NU_WITH_UTF16BE_READER #endif /* NU_WITH_UTF16_READER */ /* Enable UTF-16LE and BE encoders of UTF-16 encoder is requested */ #ifdef NU_WITH_UTF16_WRITER # define NU_WITH_UTF16LE_WRITER # define NU_WITH_UTF16BE_WRITER #endif /* NU_WITH_UTF16_WRITER */ /* Enable UTF-32LE decoding and encoding */ #ifdef NU_WITH_UTF32LE # define NU_WITH_UTF32LE_READER # define NU_WITH_UTF32LE_WRITER #endif /* NU_WITH_UTF32LE */ /* Enable UTF-32BE decoding and encoding */ #ifdef NU_WITH_UTF32BE # define NU_WITH_UTF32BE_READER # define NU_WITH_UTF32BE_WRITER #endif /* NU_WITH_UTF32BE */ /* Enable UTF-32HE decoding and encoding */ #ifdef NU_WITH_UTF32HE # define NU_WITH_UTF32HE_READER # define NU_WITH_UTF32HE_WRITER #endif /* NU_WITH_UTF32HE */ /* Enable all UTF-32 options */ #ifdef NU_WITH_UTF32 # define NU_WITH_UTF32_READER # define NU_WITH_UTF32_WRITER #endif /* NU_WITH_UTF32 */ /* Enable UTF-32LE and BE decoders of UTF-32 decoder is requested */ #ifdef NU_WITH_UTF32_READER # define NU_WITH_UTF32LE_READER # define NU_WITH_UTF32BE_READER #endif /* NU_WITH_UTF32_READER */ /* Enable UTF-32LE and BE encoders of UTF-32 encoder is requested */ #ifdef NU_WITH_UTF32_WRITER # define NU_WITH_UTF32LE_WRITER # define NU_WITH_UTF32BE_WRITER #endif /* NU_WITH_UTF32_WRITER */ /* Shortcut for all string functions */ #ifdef NU_WITH_STRINGS # define NU_WITH_Z_STRINGS /* 0-terminated string functions */ # define NU_WITH_N_STRINGS /* unterminated string functions */ #endif /* NU_WITH_STRINGS */ /* Shortcut for extra string functions */ #ifdef NU_WITH_EXTRA # define NU_WITH_Z_EXTRA /* extra functions for 0-terminated strings */ # define NU_WITH_N_EXTRA /* extra functions for unterminated strings */ #endif /* NU_WITH_STRINGS */ /* Enable collation functions */ #ifdef NU_WITH_COLLATION # define NU_WITH_Z_COLLATION /* collation functions for 0-terminated strings */ # define NU_WITH_N_COLLATION /* collation functions for unterminated strings */ #endif /* NU_WITH_COLLATION */ /* Requirements for collation functions on 0-terminated strings */ #ifdef NU_WITH_Z_COLLATION # define NU_WITH_Z_STRINGS # define NU_WITH_TOUPPER /* nu_toupper() */ #endif /* Requirements for collation functions * on unterminated strings */ #ifdef NU_WITH_N_COLLATION # define NU_WITH_N_STRINGS # define NU_WITH_TOUPPER #endif /* Requirements for casemap functions */ #ifdef NU_WITH_CASEMAP # define NU_WITH_TOLOWER /* nu_tolower() */ # define NU_WITH_TOUPPER # define NU_WITH_TOFOLD #endif /* NU_WITH_CASEMAP */ /* More requirements for collation functions all collation functions depends * on NU_WITH_DUCET */ #if (defined NU_WITH_Z_COLLATION) || (defined NU_WITH_N_COLLATION) # ifndef NU_WITH_DUCET # define NU_WITH_DUCET # endif #endif /* All collation and casemapping functions depends on NU_WITH_UDB */ #if (defined NU_WITH_Z_COLLATION) || (defined NU_WITH_N_COLLATION) \ || (defined NU_WITH_TOLOWER) || (defined NU_WITH_TOUPPER) || (defined NU_WITH_TOFOLD) # ifndef NU_WITH_UDB # define NU_WITH_UDB /* nu_udb_* functions, pretty much internal stuff */ # endif /* NU_WITH_UDB */ #endif /* DUCET implementation depends on NU_WITH_UDB */ #ifdef NU_WITH_DUCET # define NU_WITH_UDB #endif /* NU_WITH_DUCET */ /* NU_WITH_UDB depends on NU_WITH_UTF8_READER because internal encoding * of UDB is UTF-8 */ #ifdef NU_WITH_UDB # define NU_WITH_UTF8_READER #endif /* NU_WITH_UDB */ #endif /* NU_BUILD_CONFIG_H */ RediSearch-1.2.2/src/dep/libnu/defines.h000066400000000000000000000014031364126773500177770ustar00rootroot00000000000000#ifndef NU_DEFINES_H #define NU_DEFINES_H /** @file */ /** @defgroup defines Defines */ #ifndef NU_EXPORT # ifdef _WIN32 # define NU_EXPORT __declspec(dllexport) # elif __GNUC__ >= 4 # ifdef NU_BUILD_STATIC # define NU_EXPORT __attribute__ ((visibility ("hidden"))) # else # define NU_EXPORT __attribute__ ((visibility ("default"))) # endif # else # define NU_EXPORT # endif #endif /* NU_EXPORT */ /** Integer version of Unicode specification implemented. 900 == 9.0.0 * * @ingroup defines */ #define NU_UNICODE_VERSION 900 /** Special limit value to unset limit on string. Used internally by nunicode. * * @ingroup defines */ #define NU_UNLIMITED ((const void *)(-1)) #ifdef _MSC_VER #define ssize_t ptrdiff_t #endif #endif /* NU_DEFINES_H */ RediSearch-1.2.2/src/dep/libnu/ducet.c000066400000000000000000000037601364126773500174710ustar00rootroot00000000000000#include #include "ducet.h" #include "udb.h" #ifdef NU_WITH_DUCET #include "gen/_ducet.c" #ifndef NU_DISABLE_CONTRACTIONS # include "gen/_ducet_switch.c" #else const size_t _NU_DUCET_CONTRACTIONS = 0; #endif static size_t _nu_ducet_weights_count() { return NU_DUCET_G_SIZE + _NU_DUCET_CONTRACTIONS; } int32_t nu_ducet_weight(uint32_t codepoint, int32_t *weight, void *context) { (void)(weight); (void)(context); assert(_nu_ducet_weights_count() < 0x7FFFFFFF - 0x10FFFF); #ifndef NU_DISABLE_CONTRACTIONS int32_t switch_value = _nu_ducet_weight_switch(codepoint, weight, context); /* weight switch should return weight (if any) and fill value of *weight * with fallback (if needed). returned value of 0 is impossible result - this * special case is already handled above, this return value indicates that switch * couldn't find weight for a codepoint */ if (switch_value != 0) { return switch_value; } #endif /* special case switch after contractions switch * to let state-machine figure out its state on abort */ if (codepoint == 0) { return 0; } uint32_t mph_value = nu_udb_lookup_value(codepoint, NU_DUCET_G, NU_DUCET_G_SIZE, NU_DUCET_VALUES_C, NU_DUCET_VALUES_I); return (mph_value != 0 ? (int32_t)(mph_value) : (int32_t)(codepoint + _nu_ducet_weights_count())); /* ISO/IEC 14651 requests that codepoints with undefined weight should be * sorted before max weight in collation table. This way all codepoints * defined in ducet would have weight under a value of _nu_ducet_weights_count(), * all undefined codepoints would have weight under * 0x10FFFF + _nu_ducet_weights_count() - 1, max weight will be * 0x10FFFF + _nu_ducet_weights_count() */ /* Regarding integer overflow: * * int32_t can hold 0xFFFFFFFF / 2 = 0x7FFFFFFF positive numbers, this * function can safely offset codepoint value up to +2146369536 without * risk of overflow. Thus max collation table size supported is * 2146369536 (0x7FFFFFFF - 0x10FFFF) */ } #endif /* NU_WITH_DUCET */ RediSearch-1.2.2/src/dep/libnu/ducet.h000066400000000000000000000015761364126773500175010ustar00rootroot00000000000000#ifndef NU_DUCET_H #define NU_DUCET_H #include #include "config.h" #include "defines.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_DUCET /** Get DUCET value of codepoint * * Normally, for unlisted codepoints, this function will return number greater * than max weight of listed codepoints, hence putting all unlisted codepoints * (not letters and not numbers) to the end of the sorted list (in codepoint * order). * * @ingroup udb * @param codepoint codepoint * @param weight previous weight for compound weight (not used here) * @param context pointer passed to nu_strcoll() * @return comparable weight of the codepoint */ NU_EXPORT int32_t nu_ducet_weight(uint32_t codepoint, int32_t *weight, void *context); #endif /* NU_WITH_DUCET */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_DUCET_H */ RediSearch-1.2.2/src/dep/libnu/extra.c000066400000000000000000000104101364126773500174760ustar00rootroot00000000000000#include "defines.h" #include "extra.h" #include "strings.h" #if defined (NU_WITH_Z_EXTRA) || defined(NU_WITH_N_EXTRA) static int _nu_readstr(const char *encoded, const char *limit, uint32_t *unicode, nu_read_iterator_t it) { const char *p = encoded; size_t i = 0; while (p < limit) { p = it(p, unicode + i); if (*(unicode + i) == 0) { break; } ++i; } return 0; } static int _nu_writestr(const uint32_t *unicode, const uint32_t *limit, char *encoded, nu_write_iterator_t it) { char *p = encoded; const uint32_t *u = unicode; while (u < limit) { p = it(*u, p); if (*u == 0) { break; } ++u; } return 0; } static int _nu_transformstr(const char *source, const char *limit, char *dest, nu_read_iterator_t read_it, nu_write_iterator_t write_it) { const char *p = source; char *d = dest; while (p < limit) { uint32_t u = 0; p = read_it(p, &u); d = write_it(u, d); if (u == 0) { break; } } return 0; } static ssize_t _nu_strtransformnlen_unconditional(const char *encoded, const char *limit, nu_read_iterator_t read, nu_transformation_t transform, nu_read_iterator_t transform_read) { ssize_t unicode_len = 0; const char *p = encoded; while (p < limit) { uint32_t u; p = read(p, &u); if (u == 0) { break; } const char *map = transform(u); if (map == 0) { ++unicode_len; continue; } uint32_t mu = 0; while (1) { map = transform_read(map, &mu); if (mu == 0) { break; } ++unicode_len; } } return unicode_len; } static ssize_t _nu_strtransformnlen_internal(const char *encoded, const char *limit, nu_read_iterator_t read, nu_transform_read_t it, nu_read_iterator_t transform_read, void *context) { ssize_t unicode_len = 0; const char *p = encoded; while (p < limit) { const char *map = 0; uint32_t u = 0; p = it(p, limit, read, &u, &map, context); if (u == 0) { break; } if (map == 0) { ++unicode_len; continue; } uint32_t mu = 0; while (1) { map = transform_read(map, &mu); if (mu == 0) { break; } ++unicode_len; } } return unicode_len; } #endif /* NU_WITH_N_EXTRA || NU_WITH_Z_EXTRA */ #ifdef NU_WITH_Z_EXTRA int nu_readstr(const char *encoded, uint32_t *unicode, nu_read_iterator_t it) { return _nu_readstr(encoded, NU_UNLIMITED, unicode, it); } int nu_writestr(const uint32_t *unicode, char *encoded, nu_write_iterator_t it) { return _nu_writestr(unicode, NU_UNLIMITED, encoded, it); } int nu_transformstr(const char *source, char *dest, nu_read_iterator_t read_it, nu_write_iterator_t write_it) { return _nu_transformstr(source, NU_UNLIMITED, dest, read_it, write_it); } ssize_t nu_strtransformlen(const char *encoded, nu_read_iterator_t read, nu_transformation_t transform, nu_read_iterator_t transform_read) { return _nu_strtransformnlen_unconditional(encoded, NU_UNLIMITED, read, transform, transform_read); } ssize_t _nu_strtransformlen(const char *encoded, nu_read_iterator_t read, nu_transform_read_t transform, nu_read_iterator_t transform_read, void *context) { return _nu_strtransformnlen_internal(encoded, NU_UNLIMITED, read, transform, transform_read, context); } #endif /* NU_WITH_Z_EXTRA */ #ifdef NU_WITH_N_EXTRA int nu_readnstr(const char *encoded, size_t max_len, uint32_t *unicode, nu_read_iterator_t it) { return _nu_readstr(encoded, encoded + max_len, unicode, it); } int nu_writenstr(const uint32_t *unicode, size_t max_len, char *encoded, nu_write_iterator_t it) { return _nu_writestr(unicode, unicode + max_len, encoded, it); } int nu_transformnstr(const char *source, size_t max_len, char *dest, nu_read_iterator_t read_it, nu_write_iterator_t write_it) { return _nu_transformstr(source, source + max_len, dest, read_it, write_it); } ssize_t nu_strtransformnlen(const char *encoded, size_t max_len, nu_read_iterator_t read, nu_transformation_t transform, nu_read_iterator_t transform_read) { return _nu_strtransformnlen_unconditional(encoded, encoded + max_len, read, transform, transform_read); } ssize_t _nu_strtransformnlen(const char *encoded, size_t max_len, nu_read_iterator_t read, nu_transform_read_t transform, nu_read_iterator_t transform_read, void *context) { return _nu_strtransformnlen_internal(encoded, encoded + max_len, read, transform, transform_read, context); } #endif /* NU_WITH_N_EXTRA */ RediSearch-1.2.2/src/dep/libnu/extra.h000066400000000000000000000077571364126773500175270ustar00rootroot00000000000000#ifndef NU_EXTRA_H #define NU_EXTRA_H /** @defgroup extra Extra string functions * * Note on "n" functions variant: those are not for memory overrun control. * They are just for strings not having terminating 0 byte and those * functions won't go further than n-th *codepoint* in string, not byte. */ #include #include #include "config.h" #include "strings.h" #include "udb.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #define NU_TRANSFORM_DECODING_FUNCTION NU_UDB_DECODING_FUNCTION #ifdef NU_WITH_Z_EXTRA /** Read 0-terminated string * * @ingroup extra * @param encoded source buffer * @param unicode destination buffer, should be large enough to hold * decoded string * @param it read (decode) function * @return 0 * * @see nu_utf8_read * @see nu_readnstr */ NU_EXPORT int nu_readstr(const char *encoded, uint32_t *unicode, nu_read_iterator_t it); /** Write 0-terminated string * * @ingroup extra * @param unicode 0x0000-terminated codepoints * @param encoded destination buffer, should be large enough to hold * encoded string * @param it write (encode) function * @return 0 * * @see nu_bytenlen * @see nu_utf8_write * @see nu_writenstr */ NU_EXPORT int nu_writestr(const uint32_t *unicode, char *encoded, nu_write_iterator_t it); /** Recode string * * @ingroup extra * @param source source encoded string * @param dest dest encoded string, should be large enough * @param read_it decoding function * @param write_it encoding function * @return 0 * * @see nu_bytenlen * @see nu_utf8_read * @see nu_utf8_write * @see nu_transformnstr */ NU_EXPORT int nu_transformstr(const char *source, char *dest, nu_read_iterator_t read_it, nu_write_iterator_t write_it); /** Get decoded string codepoint length taking into account transformation * * @ingroup extra * @param encoded encoded string * @param read read (decode) function * @param transform transformation to take into account * @param transform_read transformation result decoding function * @return number of codepoints in transformed string * * @see nu_toupper * @see nu_tolower */ NU_EXPORT ssize_t nu_strtransformlen(const char *encoded, nu_read_iterator_t read, nu_transformation_t transform, nu_read_iterator_t transform_read); /** Get decoded string codepoint length taking into account transformation * (internal version) * * @ingroup extra * @param encoded encoded string * @param read read (decode) function * @param transform transformation to take into account * @param transform_read transformation result decoding function * @param context pointer passed to each call of transformation * @return number of codepoints in transformed string * * @see _nu_tolower * @see _nu_toupper */ NU_EXPORT ssize_t _nu_strtransformlen(const char *encoded, nu_read_iterator_t read, nu_transform_read_t transform, nu_read_iterator_t transform_read, void *context); #endif /* NU_WITH_Z_EXTRA */ #ifdef NU_WITH_N_EXTRA /** * @ingroup extra * @see nu_readstr */ NU_EXPORT int nu_readnstr(const char *encoded, size_t max_len, uint32_t *unicode, nu_read_iterator_t it); /** * @ingroup extra * @see nu_writestr */ NU_EXPORT int nu_writenstr(const uint32_t *unicode, size_t max_len, char *encoded, nu_write_iterator_t it); /** * @ingroup extra * @see nu_transformstr */ NU_EXPORT int nu_transformnstr(const char *source, size_t max_len, char *dest, nu_read_iterator_t read_it, nu_write_iterator_t write_it); /** * @ingroup extra * @see nu_strtransformlen */ NU_EXPORT ssize_t nu_strtransformnlen(const char *encoded, size_t max_len, nu_read_iterator_t read, nu_transformation_t transform, nu_read_iterator_t transform_read); /** * @ingroup extra * @see _nu_strtransformlen */ NU_EXPORT ssize_t _nu_strtransformnlen(const char *encoded, size_t max_len, nu_read_iterator_t read, nu_transform_read_t transform, nu_read_iterator_t transform_read, void *context); #endif /* NU_WITH_N_EXTRA */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_EXTRA_H */ RediSearch-1.2.2/src/dep/libnu/gen/000077500000000000000000000000001364126773500167645ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/libnu/gen/README000066400000000000000000000002501364126773500176410ustar00rootroot00000000000000Automatically generated files, see unicode.org/Makefile:gen, see tools/ If you are going to regen these files, you need python, shell and you better have a Linux box. RediSearch-1.2.2/src/dep/libnu/gen/_ducet.c000066400000000000000000016366241364126773500204150ustar00rootroot00000000000000/* Automatically generated file (mph.py), 1466614870 * * Tag : NU_DUCET * Prime : 01000193, * G size : 19581, * Combined length : 0, * Encoding : UTF-8 */ #include const int16_t NU_DUCET_G[] = { 0, -19581, -19580, -19579, -19578, -19577, -19576, -19575, -19574, -19573, -19572, -19571, -19570, -19569, -19568, -19567, -19566, -19565, -19564, -19563, -19562, -19561, -19560, -19559, -19558, -19557, -19556, -19555, -19554, -19553, 2, -19552, -19551, -19550, -19549, -19548, -19547, -19546, -19545, -19544, -19543, -19542, -19541, 2, 4, -19540, -19539, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19538, -19537, -19536, -19535, -19534, -19533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 7, -19532, -19531, -19530, -19529, 4, 4, 1, 3, 6, 17, 16, 16, 1, 16, 1, 7, 10, 24, 32, 32, 2, 9, 8, 14, 8, -19528, 32, 32, 7, 32, -19527, -19526, -19525, -19524, -19523, -19522, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19521, -19520, -19519, -19518, -19517, -19516, 1, 1, 1, 1, 9, 10, -19515, -19514, -19513, 1, -19512, -19511, 0, -19510, 4, 1, 1, 1, 1, 1, 1, -19509, 1, 3, 1, 3, -19508, 3, 1, -19507, 1, -19506, 0, -19505, 0, -19504, -19503, 1, -19502, -19501, 1, -19500, 1, 1, -19499, 5, -19498, -19497, 0, -19496, -19495, -19494, 0, 0, 0, 0, -19493, 0, -19492, -19491, -19490, 0, -19489, 0, 3, -19488, 5, 1, -19487, -19486, 10, 10, 1, -19485, 2, 1, 3, 21, 20, 1, 3, 18, -19484, -19483, 3, 7, 20, 36, -19482, -19481, 22, 34, -19480, -19479, 0, 0, 0, -19478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -19477, -19476, -19475, -19474, -19473, -19472, -19471, -19470, -19469, -19468, -19467, -19466, 0, -19461, -19447, -19446, -19445, -19444, -19443, -19442, -19441, 0, 0, -19440, -19439, -19438, 2, 5, 16, 16, 16, 16, 1, 1, 5, 6, 9, 1, 9, 12, 2, 1, 6, 17, 2, -19429, 28, 28, 1, 6, 2, 5, 1, 32, 2, 32, 3, 32, 19, 42, -19428, 58, -19427, -19426, -19425, -19424, -19421, -19420, -19419, -19418, -19413, -19412, -19409, -19408, 1, 1, 4, 1, 1, 1, 8, 11, 1, 1, -19407, -19385, 6, 10, -19384, -19381, -19380, -19379, -19378, -19377, -19376, -19375, -19374, -19371, 0, 0, -19370, -19369, 0, 0, 0, 0, -19368, -19367, -19366, -19365, 0, 0, 1, 1, -19364, -19363, 0, -19362, -19361, -19360, 0, 0, 0, 0, 0, 0, 0, 0, -19359, -19358, -19357, -19356, -19355, -19354, -19351, -19350, -19341, -19340, -19321, -19320, 0, 0, 0, -19319, -19318, -19317, -19316, -19315, -19314, -19313, -19312, -19311, -19310, -19285, 1, 1, 1, 1, 8, 8, 1, 1, 16, 22, 20, 25, 24, 24, 31, 32, 33, 35, 47, 50, 33, 34, 32, 43, -19273, -19271, 48, 50, 48, 59, 57, 65, 14, 1, 64, 64, 68, 72, 73, 76, 64, 67, -19270, -19269, -19268, -19267, -19266, -19265, -19264, -19263, -19262, -19261, -19253, -19245, 64, 64, 69, 72, 72, 96, 96, 100, 99, 103, 4, 6, 7, 8, 9, 12, 17, 19, 18, 26, 194, 198, 25, 204, -19244, -19243, 2, 1, -19242, -19241, -19240, -19239, -19238, -19237, -19236, -19235, -19234, -19233, -19232, -19231, -19230, -19229, -19228, -19227, -19226, -19225, -19222, -19221, 157, 169, -19220, -19218, 192, 192, 192, 204, 193, -19215, -19214, -19213, -19212, -19211, 207, -19210, -19198, -19197, -19196, -19195, -19194, -19166, -19165, -19164, -19163, -19162, -19161, -19145, -19144, -19143, -19142, -19141, 1, 1, 16, 20, 20, 25, 25, 45, 55, 58, 54, 54, 46, 67, 298, 301, 304, -19140, 320, 320, 51, -19139, 331, 334, -19138, 319, 2, 2, 20, 124, 23, 123, 324, 324, 320, 320, -19137, -19136, 332, 332, -19135, -19134, -19133, -19132, -19131, -19130, -19129, -19117, -19116, 320, 368, 368, -19115, -19114, -19113, -19112, -19111, -19110, -19109, -19108, -19107, -19106, -19105, -19104, 256, 261, 264, 264, 257, 305, 461, 468, 292, 292, 290, 290, 290, 290, 369, 449, 462, 809, 496, 496, 369, 448, 939, 1545, 888, 929, 56, 459, 63, 845, 769, 773, 1226, 1296, 1571, 1574, -19103, -19102, -19101, -19100, -19099, -19098, -19097, -19096, -19084, -19083, -19082, -19081, 1576, 1576, 1576, 1576, 465, 828, 1720, 1732, 1733, 1736, 144, 144, 144, 190, 219, 240, 240, 842, -19077, -19076, 254, 881, -19075, -19074, -19073, -19072, -19069, -19068, 63, 1041, -19067, -19066, -19065, -19064, -19063, -19062, -19061, -19060, -19059, 1070, -19056, -19054, 1039, 1096, 1096, 1096, 1104, 1104, 1123, 1127, 1145, 1192, 1236, 1251, 1312, 1312, 1280, 1284, 1284, 1291, 1324, 1326, 2562, 2562, 1333, 1337, 1342, 1342, 2600, 2602, 2604, 2615, 2595, 2625, 2624, 2630, 2624, 2636, 2636, 2652, 2560, 2571, 2590, 2601, 2688, 2690, 2692, 2699, 2688, 2688, 2697, 2742, 2750, 2752, 2754, -19053, 2758, 2758, -19040, -19039, -19035, -19034, -19032, -19031, 2752, -19030, 2768, 2778, 2785, 2786, 2784, 2797, 2769, 2816, -19028, 2816, 2816, 2816, 2816, 2816, -19027, 0, 2816, 2816, -19026, -19025, -19024, -19023, -19022, 2816, 2816, 2816, -19021, -19020, -19019, -19018, -19017, -19016, -19015, -19014, -19013, -19012, -19011, -19010, 2816, 2816, 2816, -19009, -19008, 2816, 2816, 2816, -19007, -19006, -19005, -19003, -19002, -19001, -19000, -18999, 2816, 2816, 2817, -18998, -18997, 2816, 2824, 2824, 2816, 2816, -18996, 0, 0, -18995, -18994, -18993, -18992, -18991, -18990, -18989, -18988, -18987, 2816, -18986, -18985, -18984, 2816, 2820, 2824, 2826, 2828, 2830, 2816, 2816, -18983, 2820, -18982, 2823, -18981, -18980, -18979, -18978, 2816, 2816, -18977, 2816, -18976, -18975, 2816, 2816, 2817, 2820, -18974, -18973, -18972, -18971, -18970, 2816, 2816, 2816, -18969, -18968, -18967, -18966, 2817, 2820, -18965, -18964, 2816, 2819, -18963, -18962, -18961, -18960, -18959, -18958, -18956, 2816, 2816, 2819, 2817, -18955, 2816, 2819, 2819, 2825, 2825, 2828, 2816, 2816, -18954, -18953, 2817, -18952, -18951, 2817, 2816, -18949, -18947, -18946, 0, 0, 2816, 2816, 0, 0, 0, 0, 0, 0, 0, 0, -18945, -18944, -18943, -18942, -18941, -18940, 516, 516, 410, 516, 9, 12, 12, 12, 8, 20, 20, 20, 32, 34, 32, 37, 20, 25, 45, 46, 13, 1, 12, 12, 64, 67, 393, 1024, 72, 1024, 1026, 70, 4, 1025, 4, 8, 12, 1025, 1040, 1040, 64, 64, 64, 68, 29, 65, 72, 74, 29, 110, 69, 119, 2, 2, 31, 101, 73, 75, 1024, 1029, 1066, 1066, 1071, 1072, 1026, 1026, 260, 1028, 1024, 1024, 1034, 1036, 1024, 9, 1024, 24, 1029, 256, 1040, 1042, 1026, 1038, 1057, 1059, 1032, 1037, 1057, 1058, -18939, -18938, 1057, 5, 1056, 1060, 1066, 1084, -18937, -18936, 1024, 1045, 1049, 1050, 1108, 1120, 1120, 1123, 10, 264, 268, 268, 276, 288, 268, 268, 1136, 293, 76, 269, -18935, 1137, -18934, -18933, 73, 136, 261, 1, 1, 1, 5, 8, 8, 8, 2, 1, 1, 23, 9, 26, 2, 9, 32, 2, 32, 2, 6, 52, 6, 52, 3, 32, 52, 52, 40, 48, 343, 376, 384, 325, 385, 390, 390, 397, 392, 404, 404, 384, 417, 404, 410, 426, 20, 26, 7, 21, 4, 64, 20, 68, 420, 430, 385, 80, 513, 515, 446, 514, 1, 1, 512, 4, 10, 23, 164, 384, 1036, 1056, 2, 14, 413, 406, 394, 515, 472, 9, 5, 33, 36, 33, 5, 6, 21, 27, 10, 35, 515, 516, 461, 513, 3, 7, 33, 512, 516, 130, 512, 512, 1028, 4, 1024, 1024, 129, 178, 1025, 1026, 494, 512, 4, 4, 20, 431, 12, 132, 25, 136, 16, 2, 16, 20, 50, 1, 512, 512, 512, 216, 188, 313, 135, 142, 142, 153, 159, 148, 160, 169, 160, 151, 167, 153, 180, 166, 1024, 165, 1024, 1024, 167, 168, 179, 185, 1024, 192, 1025, 1031, 167, 135, 192, 192, 191, 193, 1024, 201, 207, 201, 198, 204, 143, 232, 228, 248, 157, 249, 512, 204, 512, 512, 203, 512, 512, 512, 512, 227, 512, 512, 1025, 224, 238, 512, 512, 185, 512, 512, 512, 512, 512, 512, 512, 512, 1024, 512, 1027, 1027, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 148, 512, 137, 512, 512, 170, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 1027, 1028, 1038, 1043, 1062, 1066, 1069, 1056, 1056, 1060, 1060, 1057, 1062, 1067, 1078, 1056, 1069, 1088, 1088, 1088, 1090, 1088, 1094, 1088, 1091, 1097, 1098, 1058, 1090, 1099, 1106, 1094, 1112, 1112, 1112, 1105, 1110, 1113, 1115, 1088, 1121, 1125, 1127, 1140, 1143, 1149, 1152, 1140, 1140, 1152, 1152, 1138, 1153, 1152, 1163, 1027, 1038, 1040, 1115, -18932, 1036, 1112, 1152, 1142, 1152, -18931, 1152, -18930, -18929, 1152, 1152, 1152, 1152, 1160, 1160, 1174, 1174, 1178, 1178, 1152, 1152, -18928, 1181, -18927, -18926, 1161, 1184, 1155, 1158, 1175, 1186, 1184, 1199, 1200, 1204, 1192, 1213, 1227, 1229, 1153, 1154, 1152, 1156, 1160, 1164, 1174, 1216, 1155, 1168, 1225, 1226, 1225, 1227, 1228, 1233, 1159, 1166, 1174, 1231, 1244, 2048, 2048, 2048, 1531, 2048, 2048, 2051, 2048, 2048, 2048, 2048, -18924, -18923, -18922, -18921, -18918, -18903, -18895, -18887, -18883, -18882, -18881, -18880, -18831, -18830, -18829, -18828, -18827, -18826, -18825, -18824, -18823, -18822, -18821, -18820, -18819, -18818, -18817, -18816, -18815, -18814, -18813, -18812, -18811, -18810, -18809, -18808, -18807, -18806, -18805, -18804, -18803, -18802, -18801, -18800, -18799, -18798, -18797, -18796, -18795, -18794, -18793, -18792, -18791, -18790, -18789, -18788, -18787, -18786, -18785, -18784, -18783, -18782, -18781, -18780, -18779, -18778, -18777, -18776, -18775, -18774, -18773, -18772, -18771, -18770, -18769, -18768, -18767, -18766, -18765, -18764, -18763, -18762, -18761, -18760, -18759, -18758, -18757, -18756, -18755, -18754, -18753, -18752, -18751, -18750, -18749, -18748, -18747, -18746, -18745, -18744, -18743, -18742, -18741, -18740, -18739, -18738, -18737, -18736, -18735, -18734, -18733, -18732, -18731, -18730, -18729, -18728, -18727, -18726, -18725, -18724, -18723, -18722, -18721, -18720, -18719, 160, 984, 911, 1360, 1360, 1360, 1441, 1446, 1488, 1792, 1802, 1800, 1824, 1834, 1873, 2078, 1922, 2090, 2032, 2090, 2089, 2100, 2116, 2089, 2084, 2132, 2140, 2145, 2147, 2150, 2156, 2108, -18718, -18717, 2112, 2118, -18716, -18715, -18714, -18713, -18712, -18711, -18710, -18709, -18708, -18707, -18706, -18705, 2113, 2120, 2124, 2127, 2136, 2136, 2140, 2129, 2135, 2137, 2176, 2176, 2178, 2180, 2177, 2184, 2176, -18704, -18703, -18702, 2176, 2176, 2176, 2084, 2176, 2088, 2176, 2176, 2176, 2180, 2176, 2176, -18701, -18700, -18699, -18698, -18697, -18696, -18695, -18694, -18693, -18692, -18691, -18690, -18689, -18688, -18687, -18686, 2176, 2176, 2176, 2176, 2178, 2176, 2192, 2176, 2193, 2195, 2193, 2199, 2193, 2195, 2193, 2216, 2177, 2179, 2177, 2183, 2177, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2208, 2048, -18685, -18684, -18683, 2048, 2054, 2048, 2053, -18682, -18681, -18680, -18679, 2049, -18678, 2048, -18677, 2048, 2050, 2048, 2061, -18676, 2050, 2048, 2058, -18675, -18674, -18673, -18672, -18671, -18670, -18669, -18668, 2049, 2052, 2058, 2048, -18667, 2056, 2056, 2048, 2052, 2048, 2053, 2073, -18666, 2077, -18665, 2074, 2049, 2089, 2049, 2104, 2095, 2109, 2105, 2091, 2098, 2171, -18664, 2155, 2308, 2359, 2336, 2172, 2065, 2396, 2395, 2458, 2455, 2473, 2478, 2464, 2311, 2471, 2337, 2472, 2472, 2472, 2476, 2473, 2464, -18663, 2502, 2492, 2504, 2508, -18662, 2474, 2478, 2497, 2487, 2471, 2508, 2517, 2511, 2512, 2501, 2501, 2501, 2517, 2513, 2528, 2528, 2510, 2506, 2504, 2508, 2548, 2533, 2562, 2544, 2539, 2545, 2545, 2545, 2545, 2559, 2546, 2576, 2455, 2438, 2503, 2521, 2616, 2524, 2621, 2629, 2498, 2077, 2109, 2668, 132, 132, 136, 136, 101, 139, 158, 1642, 153, 150, 170, 172, 161, 203, 260, 260, 186, 276, 158, 276, 120, 190, 256, 258, 161, 256, 256, 266, 260, 141, 256, 260, 263, 260, 266, 295, 258, 266, 266, 269, 257, 297, 322, 322, 257, 259, 261, 320, 324, 324, 324, 332, 261, 290, 309, 334, 362, 265, 328, 404, 308, 412, 464, 466, 2170, 2614, 2577, 2895, 2152, -18661, -18660, 2638, 2144, -18659, -18658, -18657, -18656, 2882, 2894, 3622, 268, 279, 308, 460, 3628, 270, 448, 455, 2163, 3032, 2167, 3620, 3632, -18655, -18654, -18653, -18652, -18651, -18650, -18649, -18648, -18647, -18646, -18645, -18644, -18643, -18642, -18641, -18640, -18639, -18638, -18637, -18636, -18635, -18634, -18633, -18632, -18631, -18630, -18629, -18628, -18627, -18626, -18625, -18624, 289, 3589, 3592, 3592, 3592, 3596, 3602, 3635, 3635, 3643, 3698, 3713, 3713, 3716, 3721, 3727, 3712, 3718, 3716, 3718, 3724, 3720, 3727, 3730, 3738, 3744, 3811, -18623, -18622, -18621, -18620, -18619, -18618, -18617, -18616, -18615, -18614, -18613, -18612, 3777, 3780, 3786, 3790, 3874, 3881, 3868, 3880, 3902, 4096, 4096, 4096, 4096, 4096, 4096, 4104, -18611, -18610, -18609, -18608, -18607, -18606, -18605, -18604, -18603, -18602, -18601, -18600, -18599, -18598, -18597, 4096, -18596, -18595, -18594, -18593, -18592, -18591, -18590, -18589, -18588, -18587, -18586, -18585, -18584, -18583, -18582, -18581, 4096, 4096, 4096, 4096, 4096, 4098, 4096, 4109, -18580, -18579, 4112, 4114, -18578, -18577, -18576, -18575, 4096, 4096, 4096, 4096, 4104, 4099, 4104, 4104, -18574, -18573, 4098, 4102, -18572, -18571, -18570, -18569, -18568, -18567, 400, 402, -18566, 0, 0, -18565, -18564, -18563, -18562, 0, 0, -18561, -18560, -18559, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -18558, 1, -18557, -18556, 1, 1, -18555, -18554, -18553, -18552, -18551, -18550, -18549, -18548, -18547, -18546, -18545, -18544, 1, 2, 4, 1, 3, 8, 2, 2, 1, 1, 1, 1, 16, 1, 1, 1, -18543, -18542, 1, 1, -18541, -18540, -18539, -18538, -18537, 0, 0, 0, 0, 0, 0, 0, -18536, -18535, -18534, -18533, -18532, -18531, -18530, -18529, -18528, 1, 3, 1, 9, 1, 3, 8, -18527, 0, 0, -18526, 0, 0, 0, 0, 0, -18525, -18524, -18523, -18522, -18521, -18520, -18519, 3, 1, 4, 6, 8, -18518, -18517, -18516, -18515, -18514, -18513, -18512, -18511, -18510, 0, -18509, -18508, -18507, -18506, -18505, -18504, -18503, -18502, -18501, 0, 1, 1, 1, -18500, -18499, -18498, -18497, 8, 5, 12, -18496, 9, 16, 21, 16, 4, 20, 27, 20, 6, 36, 38, 42, 5, 5, 9, 12, 4, 11, 36, 41, 33, 11, 6, 2, 64, 10, 3, 73, 73, 67, 68, 82, 84, -18495, -18494, 107, 70, 77, 64, 132, 251, 301, 66, 333, 392, 384, 389, 387, 385, 385, 416, 416, 385, 418, 388, 424, 416, 424, 430, 430, 292, 386, 388, 420, 426, 426, 465, 456, 444, -18493, -18492, -18491, -18490, -18489, -18488, -18487, -18486, -18485, -18484, -18483, -18482, -18481, -18480, -18479, 0, -18478, -18477, 400, -18476, -18475, -18474, -18473, 504, 498, 496, 4097, 396, 4104, 4136, 4136, -18472, 464, 464, 4128, 4128, 4128, -18471, -18470, 140, 4128, 442, 4128, 477, 4129, 443, 4128, 468, 256, 260, 361, 256, 368, 459, 480, 483, 420, 483, 4096, 4096, 4098, 4100, 4097, 505, 4101, 4103, 4106, 4108, 4113, 4107, 4112, 4112, 4112, 4128, 4128, 4128, 4130, 4140, 4129, 4136, 4099, 4113, 4118, 4166, 4168, 4168, 4168, 4179, 4176, 4176, 4192, 4180, 4192, 4192, 4197, 4181, 4196, 4196, 4196, 4210, 4219, 4210, 4222, 484, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4224, 4228, 4230, 4236, 4248, 4244, 4256, 4228, 4224, 4224, 4224, 4256, 4226, 4264, 4268, 4256, 4256, 4272, 4280, 4256, 4284, 4288, 4288, 4229, 4290, 4296, 4302, 4296, 4304, 4303, 4308, 4280, 4304, 4304, 4320, 4231, 4322, 4304, 4329, 4288, 4318, 4240, 4321, 4323, 4321, 4240, 4336, 4328, 4518, 4332, 4523, 4336, -18469, -18468, 4521, 256, 256, 256, 256, 264, 256, 258, 256, 258, 309, 361, 366, 369, 381, 416, 388, 401, 424, 404, 438, 434, 458, 454, 457, 406, 426, 464, 464, 476, 473, 465, 472, 393, 477, 461, 518, 520, 522, 524, 521, 452, 464, 513, 518, 517, 521, 521, 521, 514, 458, 513, 515, 512, 514, 519, 524, 528, 512, 512, 516, -18467, -18466, -18465, -18464, 488, 441, 512, 512, 512, 512, 512, 512, -18463, 512, 512, 512, -18462, -18461, -18460, -18459, 512, 512, 516, 512, 512, 512, 520, 512, -18458, -18457, 512, 512, -18456, -18455, -18454, -18453, -18452, -18451, -18450, -18449, -18448, -18447, -18446, -18445, -18444, -18443, -18442, -18441, -18440, -18439, -18438, -18437, -18436, -18435, -18434, -18433, -18432, -18431, -18430, -18429, -18428, -18427, -18426, -18425, -18424, -18423, -18422, -18421, 458, 398, 435, 494, 512, 512, 516, 516, 514, 2, 2, 2, -18420, 1, 1, 1, 8, 2, 15, 18, 16, -18419, -18418, 16, 29, 32, 1, 33, 33, 33, 24, 32, -18417, -18416, -18415, -18414, -18413, -18412, -18411, -18410, -18409, -18408, -18407, -18406, -18405, -18404, -18403, -18402, -18401, -18400, -18399, -18398, -18397, 0, -18396, -18395, -18394, -18393, -18392, -18391, -18390, -18389, -18388, -18387, 6, 3, 3, 4, 12, 1, 9, 2, 6, 4, 17, -18386, -18385, 18, 16, 24, -18384, -18383, -18382, 0, -18381, -18380, 0, 0, 1, 8, 2, -18379, -18378, 8, 8, 12, 12, 1, 16, -18377, 0, -18376, -18375, 9, -18374, 0, 0, 0, 0, 0, 0, 0, -18373, -18372, -18371, -18370, -18369, -18368, -18367, -18366, -18365, -18364, -18363, -18362, 0, 0, -18361, -18360, -18359, -18358, -18357, -18356, -18355, -18354, -18353, -18352, -18351, 1, 3, 5, 43, 20, 3, 44, 32, -18350, -18349, 33, 34, 0, 0, -18348, -18347, -18346, -18345, -18344, -18343, -18342, -18341, -18340, -18339, -18338, -18337, -18336, -18335, -18334, -18333, -18332, -18331, 16, 16, 16, 25, 19, 25, 27, 3, -18330, 65, 73, 74, -18329, -18328, -18327, 0, 64, -18326, 67, 0, -18325, -18324, -18323, 1, 1, 1, 5, 24, 26, 3, 33, 10, 2, 7, 15, 17, 19, 20, 32, 44, -18322, 36, 52, 43, -18321, -18320, -18319, -18318, 53, 51, 53, -18317, 406, 416, 420, 8, 11, 399, 409, -18316, -18315, 400, 435, -18314, -18313, -18312, -18311, 0, -18310, -18309, -18308, 387, 385, 389, 400, 395, 400, 400, 455, 426, -18307, -18306, -18305, -18304, 410, 404, -18303, -18302, 400, 386, 448, 448, 448, 415, 448, -18301, -18300, 266, 289, -18299, -18298, -18297, -18296, -18295, -18294, -18293, -18292, -18291, -18290, -18289, -18288, -18287, -18286, -18285, -18284, -18283, -18282, -18281, -18280, 260, 257, 261, 261, 266, 265, 267, 272, 391, 256, 261, 259, 271, 283, 285, 430, 257, 261, 263, 269, 388, 384, 384, 421, 256, 450, 416, 454, 432, 456, 416, 457, 435, 331, 394, 415, 329, 500, 417, 6144, 434, 393, 385, 393, 384, 402, 399, 6144, -18279, 6144, 432, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 420, 6144, 6144, 6144, 6144, 6144, 502, 436, 6144, 6144, 6144, 6144, 6144, 6144, -18278, -18277, -18276, -18275, -18274, -18273, -18272, -18271, 6144, 6144, 6144, 6144, 6144, -18270, -18269, -18268, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 99, 264, 268, 276, 258, 282, 266, 281, 272, -18267, -18266, -18265, -18264, -18263, -18262, -18261, -18260, 0, 0, 0, -18259, -18258, -18257, -18256, -18255, -18254, -18253, -18252, -18251, -18250, -18249, -18248, -18247, -18246, -18245, -18244, -18243, -18242, -18241, -18240, -18239, -18238, -18237, -18236, -18235, -18234, -18233, -18232, 0, 0, 0, -18231, 0, 0, 0, 0, 0, 0, 0, 0, -18230, -18229, 0, 0, -18228, -18227, -18226, -18225, -18224, -18223, -18222, -18221, -18220, -18219, -18218, -18217, -18216, -18215, -18214, -18213, -18212, -18211, -18210, -18209, -18208, -18207, -18206, -18205, -18204, -18203, -18202, -18201, -18200, -18199, -18198, -18197, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18196, -18195, -18194, -18193, -18192, -18191, 0, 265, 277, 302, 391, -18190, -18189, 385, 421, -18188, 0, 0, 0, 0, 0, 0, 0, -18187, -18186, -18185, -18184, -18183, -18182, -18181, -18180, -18179, -18178, -18177, -18176, -18175, -18174, -18173, -18172, 0, 0, 0, 0, -18171, -18170, -18169, 0, -18168, -18167, -18166, -18165, -18164, -18163, -18162, -18161, -18160, 1, 1, -18159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18158, -18157, -18156, -18155, -18154, -18153, -18152, -18151, -18150, -18149, -18148, -18147, -18146, -18145, -18144, -18143, -18142, -18141, -18140, -18139, -18138, -18137, -18136, -18135, 0, 0, -18134, -18133, 0, 0, 0, 0, 0, 0, 0, 0, -18132, -18131, -18130, 0, -18129, -18128, -18127, -18126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18125, -18124, -18123, -18122, -18121, -18120, -18119, -18118, 0, -18117, 1, 17, -18116, -18115, -18114, -18113, 17, 13, 17, 22, 16, 24, 38, 52, -18112, 0, -18111, -18110, 0, -18109, 0, 0, 0, -18108, -18107, -18106, -18105, -18104, -18103, -18102, -18101, -18100, -18099, -18098, -18097, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -18096, -18095, -18094, -18093, -18092, -18091, -18090, -18089, -18088, -18087, -18086, -18085, -18084, -18083, -18082, -18081, -18080, -18079, -18078, -18077, -18076, -18075, -18074, -18073, -18072, -18071, -18070, -18069, -18068, -18067, -18066, -18065, -18064, -18063, -18062, -18061, -18060, -18059, -18058, -18057, -18056, -18055, -18054, -18053, -18052, -18051, -18050, -18049, -18048, -18047, -18046, -18045, -18044, -18043, -18042, -18041, 0, 0, 0, -18040, 0, 0, 0, 0, -18039, -18038, -18037, -18036, -18035, -18034, -18033, 113, 40, 79, 47, -18032, 115, 126, 124, -18031, -18030, -18029, -18028, -18027, -18026, -18025, -18024, 64, 64, 69, 128, 123, 160, 164, 163, 161, 166, 160, 168, 176, 176, 160, 180, 193, 194, 192, 196, 200, 192, 192, 201, 199, 139, 192, 192, 130, 192, 212, 208, 159, 193, 148, 192, 192, 226, 231, 232, 224, 240, 240, 249, 255, 258, 256, 272, 142, 260, 181, 264, -18023, -18022, -18021, 269, -18020, -18019, -18018, -18017, -18016, -18015, -18014, -18013, 258, 260, 260, 266, 256, 264, 266, 287, 262, 258, 286, 289, 259, 291, 295, 295, -18012, -18011, -18010, -18009, -18008, -18007, -18006, -18005, -18004, -18003, -18002, -18001, -18000, -17999, -17998, -17997, -17996, 0, -17995, -17994, -17993, 0, 0, 0, 0, -17992, -17991, -17990, -17989, -17988, -17987, -17986, 14, 16, 22, 22, 29, 24, 24, 37, -17985, 62, 116, 80, -17984, -17983, -17982, -17981, 135, 194, 147, 269, 197, 274, 200, 279, 156, 251, 256, 269, 257, 288, 276, 289, -17980, -17979, -17978, -17977, -17976, -17975, -17974, -17973, 0, -17972, -17971, -17970, -17969, -17968, -17967, -17966, -17965, 0, -17964, -17963, -17962, -17961, 0, -17960, -17959, -17958, -17957, -17956, -17955, 0, -17954, -17953, -17952, -17951, -17950, -17949, -17948, -17947, -17946, -17945, -17944, -17943, -17942, -17941, -17940, -17939, -17938, -17937, -17936, -17935, -17934, -17933, -17932, 0, 0, -17931, -17930, -17929, -17928, -17927, -17926, -17925, -17924, -17923, -17922, -17921, -17920, -17919, -17918, 0, 0, -17917, -17916, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17915, -17914, -17913, -17912, -17911, -17910, -17909, -17908, -17907, 65, 68, 70, 64, 80, 86, 90, 79, 141, 137, 140, 168, -17906, -17905, 168, 128, 153, 160, 160, 169, 160, 170, 174, -17904, -17903, -17902, -17901, -17900, -17899, -17898, -17897, -17896, -17895, -17894, -17893, -17892, -17891, -17890, -17889, 130, 143, 193, 150, 192, 192, 192, 192, 197, 144, 385, 214, -17888, -17887, -17886, -17885, -17884, -17883, -17882, -17881, -17880, -17879, -17878, -17877, -17876, -17875, -17874, -17873, 0, 0, 0, -17872, -17871, 0, 0, 0, 0, 0, 0, 0, 0, -17870, -17869, -17868, -17867, 0, 0, 0, -17866, 384, 202, 384, 384, 384, 384, 384, 384, -17865, -17864, 0, -17863, -17862, -17861, -17860, 0, 0, 0, 0, 0, 0, 0, 0, -17859, 0, 0, 0, -17858, -17857, -17856, -17855, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17854, -17853, -17852, -17851, -17850, -17849, -17848, 66, 49, 72, 55, 87, 89, 91, 97, -17847, -17846, -17845, 123, -17844, -17843, -17842, -17841, -17840, -17839, -17838, -17837, -17836, -17835, -17834, -17833, -17832, -17831, -17830, -17829, -17828, -17827, -17826, -17825, -17824, -17823, -17822, -17821, -17820, -17819, -17818, -17817, -17816, -17815, -17814, -17813, -17812, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17811, -17810, -17809, -17808, -17807, -17806, -17805, -17804, -17803, -17802, -17801, -17800, -17799, -17798, -17797, -17796, -17795, -17794, -17793, -17792, -17791, -17790, -17789, -17788, 0, 132, 132, -17787, -17786, -17785, 0, 0, -17784, -17783, -17782, -17781, 0, 0, -17780, -17779, 0, 0, 0, 0, 0, 0, 0, -17778, 132, 16, -17777, 119, 129, -17776, 128, 140, 132, 128, 141, 133, 178, 150, 180, 173, 170, 192, 194, 209, 205, 208, 224, 192, 160, 1, 1, 1, 16, 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 162, 180, 180, 180, 180, 184, 205, 188, 209, 194, 196, 208, 196, 209, 210, 208, 1, 1, 1, 1, 208, 220, 220, 228, 220, 248, 250, 254, 254, 520, 520, 520, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 25, 26, 1, 1, 4, 1, 35, 1, 13, 34, -17775, 537, 571, 575, 1, 1, 576, -17774, 595, 531, 1, 1, 1, 1, 564, 591, -17773, -17772, -17771, -17770, -17769, -17768, -17767, -17766, 618, 625, 591, 636, 620, -17765, -17764, -17763, -17762, 587, 627, 632, -17761, 639, 777, 780, 276, 263, 280, 280, 283, 280, 280, 303, 272, -17760, -17759, -17758, -17757, -17756, -17755, -17754, -17753, -17752, 105, 106, 108, 265, 271, 276, 273, 283, 288, 292, 280, 289, 291, 298, 262, 266, 259, 268, 272, 320, -17751, 323, 334, 340, 323, 329, -17750, 321, -17749, 341, 285, 287, 273, 320, 259, 273, 320, 327, 282, 320, 321, 348, 342, 493, 436, 440, 272, 396, 397, 912, 926, 933, -17748, -17747, 422, 928, 928, 931, -17746, -17745, -17744, -17743, 929, 956, 0, 0, -17742, -17741, 0, -17740, -17739, -17738, -17737, -17736, 0, 0, 0, -17735, -17734, -17733, -17732, -17731, 306, 313, -17730, -17729, -17728, 312, 900, 900, -17727, -17726, -17725, 960, 291, 505, -17724, -17723, -17722, -17721, -17720, -17719, -17718, -17717, -17716, -17715, 0, 0, 0, -17714, -17713, -17712, -17711, -17710, 0, 0, -17709, -17708, -17707, -17706, -17705, -17704, 0, 0, -17703, -17702, -17701, -17700, 784, 784, 784, 792, 784, 790, 787, 807, 788, 791, 787, 802, 811, 817, 777, 779, 793, 809, 329, 812, 814, 1024, 836, 1024, 1024, 1027, 1034, 1094, 1024, 1038, 796, 1156, 1162, 1167, 1172, 1175, 1187, 1192, 1188, 1191, 1211, 1215, 1216, 1216, 1216, 1216, 1153, 1161, 1154, 1164, 1160, 1160, 1160, 1182, 1173, -17699, 1186, -17698, 1186, -17697, 1185, -17696, 1186, 1194, 1162, 1184, -17695, -17694, 1184, 1186, 1208, 1208, 1184, 1199, -17693, -17692, 1208, 1210, 1154, 1754, 1158, 6313, 6317, 6320, 6321, 6323, 6324, 6327, 6321, 6328, -17691, -17690, 6336, 6336, 6306, 6337, 6307, 6336, 6336, 6336, 6350, 6352, 6345, 6352, 6352, 6352, 6352, 6352, 6360, 6363, 310, 388, 358, 358, 419, 452, 391, 409, 450, 1, 1, 1, 1, 1, 1, 1, 1, 1, 355, 399, 407, 416, 400, 416, 407, 404, 400, 416, 416, 416, 424, 429, 400, 424, 448, 450, 448, 448, 448, 448, 448, 384, 384, 390, 393, 395, 384, 398, 398, 389, 448, 450, 448, 448, 448, 456, 448, 450, 410, 454, 448, 461, 464, 468, 497, -17689, -17688, -17687, -17686, -17685, -17684, -17683, -17682, 384, 388, 402, 400, 400, 417, 6169, 6199, 393, 6209, 6214, 6213, 6222, 6228, 6239, 6232, 6257, 6272, 6272, 6272, 6276, 6281, 6283, 6280, 6285, 6285, 6285, 6272, 6288, 6288, 6288, 6273, -17681, -17680, -17679, -17678, -17677, -17676, -17675, -17674, -17673, -17672, -17671, -17670, -17669, -17668, -17667, -17666, 6272, 6272, 6272, 6272, -17665, -17664, -17663, -17662, -17661, -17660, -17659, -17658, -17657, -17656, -17655, -17654, 290, 340, 307, 358, 371, 392, 392, 396, 384, 400, 390, 401, -17653, -17652, 412, 389, 416, 384, 432, 416, 432, 385, 440, 384, 389, 448, 448, 451, 451, 454, 456, 449, 392, 384, 392, 394, 392, 384, 397, 392, 449, 449, 449, 449, 449, 449, 449, 469, 454, 452, 482, 464, 489, 480, 496, 6144, -17651, -17650, 397, 6144, -17649, -17648, -17647, -17646, 386, 384, 6144, 418, -17645, -17644, -17643, -17642, 6144, 6146, 6155, 398, 6160, 6164, 6160, 6160, 6160, 6165, 6161, 439, 6174, 6163, 6176, 6162, 6154, 6166, 6173, 6167, 6208, 6208, 6213, 6208, 6161, 6209, 6166, 6208, 6208, 6208, 6208, 6213, 6210, 6208, 6212, 6208, -17641, -17640, -17639, -17638, 6208, 6208, 6212, 6208, 6219, 6208, 6240, -17637, -17636, -17635, -17634, -17633, -17632, -17631, -17630, -17629, -17628, -17627, -17626, -17625, -17624, -17623, -17622, 295, 345, 349, 356, 376, 417, 424, 426, -17621, -17620, 384, 386, -17619, -17618, -17617, -17616, -17615, -17614, -17613, -17612, -17611, -17610, -17609, -17608, -17607, -17606, -17605, -17604, -17603, -17602, -17601, -17600, -17599, -17598, -17597, -17596, -17595, -17594, -17593, -17592, -17591, -17590, -17589, -17588, -17587, -17586, -17585, -17584, -17583, -17582, -17581, -17580, -17579, -17578, -17577, -17576, -17575, -17574, -17573, -17572, -17571, -17570, -17569, -17568, -17567, -17566, -17565, -17564, -17563, -17562, -17561, -17560, -17559, -17558, -17557, -17556, -17555, -17554, -17553, -17552, -17551, -17550, -17549, -17548, -17547, -17546, -17545, -17544, -17543, -17542, -17541, -17540, -17539, -17538, -17537, -17536, -17535, -17534, -17533, -17532, -17531, -17530, -17529, -17528, -17527, -17526, -17525, -17524, -17523, -17522, -17521, -17520, 385, 385, 385, 385, -17519, -17518, 384, -17517, 384, -17516, -17515, 0, 0, 0, -17514, -17513, 0, -17512, 0, 0, -17511, 0, 0, 0, -17510, -17509, 0, 0, -17508, -17507, -17506, -17505, -17504, -17503, -17502, -17501, -17500, -17499, -17498, -17497, 0, 0, -17496, -17495, -17494, -17493, -17492, -17491, 0, 0, 0, 0, 0, -17490, 0, -17489, -17488, -17487, 0, -17486, -17485, 0, -17484, -17483, -17482, -17481, -17480, -17479, -17478, -17477, -17476, -17475, -17474, -17473, -17472, -17471, -17470, -17469, -17468, -17467, 0, 0, 0, 0, -17466, -17465, -17464, 0, 0, 0, -17463, -17462, 0, -17461, 0, 0, -17460, -17459, -17458, -17457, -17456, -17455, -17454, -17453, -17452, -17451, -17450, -17449, -17448, -17447, -17446, -17445, -17444, -17443, -17442, -17441, -17440, -17439, -17438, -17437, -17436, -17435, -17434, -17433, -17432, -17431, -17430, -17429, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17428, -17427, -17426, -17425, -17424, -17423, -17422, 1, 2, 4, 6, 3, 9, 13, 13, -17421, -17420, 2, 2, -17419, -17418, -17417, -17416, -17415, -17414, -17413, -17412, -17411, -17410, -17409, -17408, -17407, -17406, -17405, -17404, -17403, 0, -17402, -17401, -17400, 0, 0, 0, 0, 0, 0, 0, 0, -17399, -17398, -17397, -17396, -17395, -17394, -17393, -17392, -17391, -17390, -17389, -17388, -17387, -17386, -17385, -17384, -17383, -17382, -17381, -17380, 0, 0, -17379, -17378, 0, 0, 0, 0, 0, 0, 0, 0, -17377, -17376, -17375, -17374, -17373, -17372, -17371, -17370, -17369, -17368, -17367, -17366, -17365, -17364, -17363, -17362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -17361, -17360, -17359, -17358, -17357, -17356, -17355, -17354, 0, 0, 0, 0, 0, 0, 0, 0, -17353, -17352, -17351, -17350, -17349, -17348, -17347, -17346, -17345, -17344, -17343, -17342, -17341, -17340, -17339, -17338, -17337, -17336, -17335, -17334, -17333, -17332, -17331, -17330, -17329, -17328, -17327, -17326, -17325, -17324, -17323, -17322, -17321, -17320, -17319, -17318, -17317, -17316, -17315, -17314, -17313, -17312, -17311, -17310, -17309, -17308, -17307, -17306, -17305, -17304, -17303, -17302, -17301, -17300, -17299, -17298, -17297, -17296, -17295, -17294, -17293, -17292, -17291, -17290, -17289, -17288, -17287, -17286, -17285, -17284, -17283, -17282, -17281, -17280, -17279, -17278, -17277, -17276, -17275, -17274, -17273, -17272, -17271, -17270, -17269, -17268, -17267, -17266, -17265, -17264, 2, 1, 8, 8, 8, -17263, -17262, 1, 1, -17261, -17260, -17259, -17258, -17257, -17256, -17255, -17254, -17253, -17252, -17251, -17250, -17249, -17248, -17247, -17246, -17245, -17244, -17243, -17242, -17241, -17240, -17239, -17238, -17237, -17236, -17235, -17234, -17233, -17232, -17231, -17230, -17229, -17228, -17227, -17226, -17225, -17224, -17223, -17222, -17221, -17220, -17219, -17218, -17217, -17216, -17215, -17214, -17213, -17212, -17211, -17210, -17209, -17208, -17207, -17206, -17205, -17204, -17203, -17202, -17201, -17200, -17199, -17198, -17197, -17196, -17195, -17194, -17193, -17192, -17191, -17190, -17189, -17188, -17187, -17186, -17185, -17184, -17183, -17182, -17181, -17180, -17179, -17178, -17177, -17176, -17175, -17174, -17173, -17172, -17171, -17170, -17169, -17168, -17167, -17166, -17165, -17164, -17163, -17162, -17161, -17160, -17159, -17158, -17157, -17156, -17155, -17154, -17153, -17152, -17151, -17150, -17149, -17148, -17147, -17146, -17145, -17144, -17143, -17142, -17141, -17140, -17139, -17138, -17137, -17136, -17135, -17134, -17133, -17132, -17131, -17130, -17129, -17128, -17127, -17126, -17125, -17124, -17123, -17122, -17121, -17120, -17119, -17118, -17117, -17116, -17115, -17114, -17113, -17112, -17111, -17110, -17109, -17108, -17107, -17106, -17105, -17104, -17103, -17102, -17101, -17100, -17099, -17098, -17097, -17096, -17095, -17094, -17093, -17092, -17091, -17090, -17089, -17088, -17087, -17086, -17085, -17084, -17083, -17082, -17081, -17080, -17079, -17078, -17077, -17076, -17075, -17074, -17073, -17072, -17071, -17070, -17069, -17068, -17067, -17066, -17065, 0, 0, 0, 0, -17064, -17063, -17062, -17061, -17060, -17059, -17058, -17057, -17056, -17055, -17054, -17053, -17052, -17051, -17050, -17049, -17048, -17047, -17046, -17045, -17044, -17043, 0, 0, -17042, -17041, -17040, -17039, -17038, -17037, -17036, -17035, -17034, -17033, -17032, -17031, -17030, -17029, -17028, -17027, -17026, -17025, -17024, -17023, -17022, -17021, -17020, -17019, -17018, -17017, -17016, -17015, -17014, -17013, -17012, -17011, -17010, -17009, -17008, -17007, -17006, -17005, -17004, -17003, -17002, -17001, -17000, -16999, -16998, -16997, -16996, -16995, -16994, -16993, -16992, -16991, -16990, -16989, -16988, -16987, -16986, -16985, -16984, -16983, -16982, -16981, -16980, -16979, -16978, -16977, -16976, -16975, -16974, -16973, -16972, -16971, 0, 0, 0, 0, -16970, -16969, -16968, -16967, -16966, -16965, -16964, -16963, -16962, -16961, -16960, -16959, -16958, -16957, -16956, -16955, -16954, -16953, -16952, -16951, -16950, -16949, -16948, -16947, 0, 0, -16946, -16945, 0, 0, 0, 0, -16944, -16943, -16942, -16941, -16940, -16939, -16938, -16937, -16936, -16935, -16934, -16933, -16932, -16931, -16930, -16929, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16928, -16927, -16926, -16925, -16924, -16923, -16922, -16921, -16920, -16919, -16918, -16917, 0, -16916, -16915, -16914, -16913, -16912, -16911, -16910, -16909, -16908, -16907, -16906, -16905, -16904, -16903, -16902, -16901, -16900, -16899, -16898, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16897, 0, 0, 0, -16896, -16895, -16894, -16893, -16892, -16891, -16890, -16889, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16888, -16887, -16886, 0, 0, -16885, -16884, -16883, 0, 0, 0, -16882, -16881, -16880, -16879, -16878, -16877, -16876, -16875, -16874, -16873, -16872, -16871, -16870, -16869, -16868, -16867, -16866, -16865, -16864, -16863, -16862, -16861, -16860, -16859, -16858, -16857, -16856, -16855, -16854, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -16853, 0, -16852, -16851, -16850, 1, -16849, 1, 1, 2, 2, 6, 3, 1, -16848, 1, 1, -16847, 1, 1, -16846, -16845, -16844, 1, 1, -16843, -16842, 1, 1, 1, 1, 1, 1, -16841, -16840, -16839, -16838, 1, 1, 1, -16837, 1, 1, 1, -16836, 1, -16835, 1, -16834, -16833, 1, 1, 1, -16832, -16831, -16830, -16829, -16828, -16827, -16826, -16825, -16824, -16823, -16822, -16821, -16820, -16819, -16818, -16817, -16816, -16815, -16814, -16813, -16812, -16811, -16810, -16809, -16808, -16807, -16806, 0, -16805, -16804, -16803, -16802, -16801, -16800, 0, -16799, -16798, -16797, -16796, -16795, -16794, -16793, -16792, -16791, -16790, -16789, -16788, -16787, -16786, -16785, -16784, -16783, -16782, -16781, -16780, 0, 0, -16779, -16778, 0, 0, 0, 0, 0, -16777, -16776, -16775, -16774, -16773, -16772, -16771, 1, 2, 4, 1, 3, 8, 2, 2, 1, 1, 1, 1, 16, 1, 1, 1, 0, -16770, -16769, -16768, -16767, -16766, -16765, -16764, -16763, 0, -16762, -16761, -16760, -16759, -16758, -16757, -16756, -16755, 0, -16754, 0, 0, 0, 0, -16753, -16752, 1, -16751, -16750, 1, -16749, -16748, -16747, -16746, -16745, -16744, 0, -16743, -16742, -16741, -16740, 0, -16739, -16738, 0, -16737, 0, 0, -16736, -16735, 0, -16734, 0, -16733, 0, -16732, 0, 0, -16731, 0, 0, -16730, 0, 0, 0, -16729, 0, -16728, 0, -16727, -16726, -16725, 0, 0, -16724, -16723, -16722, -16721, -16720, -16719, -16718, -16717, -16716, -16715, 0, 0, -16714, -16713, 1, -16712, 1, 1, -16711, 1, -16710, -16709, 1, 1, 1, 1, 9, 11, 1, 1, 1, 1, 5, 1, 17, 1, 17, 17, 1, 1, 1, 1, 1, 1, 1, -16708, -16707, -16706, -16705, -16704, -16703, -16702, -16701, -16700, -16699, -16698, -16697, -16696, 0, 0, -16695, -16694, 0, 0, 0, 0, 0, 0, 0, 0, -16693, -16692, -16691, -16690, -16689, -16688, -16687, -16686, -16685, -16684, -16683, -16682, -16681, -16680, -16679, -16678, -16677, -16676, -16675, -16674, 0, 0, -16673, -16672, -16671, -16670, -16669, -16668, -16667, -16666, -16665, -16664, -16663, -16662, -16661, -16660, -16659, -16658, -16657, 2, 1, 1, 4, 1, 1, 9, 1, 3, -16656, 2, 2, 1, -16655, -16654, -16653, 0, -16652, -16651, -16650, -16649, -16648, -16647, -16646, 1, 1, -16645, -16644, 1, 1, 1, 1, -16643, -16642, -16641, -16640, -16639, -16638, -16637, -16636, -16635, -16634, -16633, -16632, -16631, -16630, -16629, -16628, -16627, -16626, -16625, -16624, -16623, -16622, -16621, -16620, -16619, -16618, -16617, -16616, -16615, -16614, -16613, -16612, -16611, -16610, 4, 8, 8, 8, 8, 8, 8, -16609, -16608, -16607, -16606, -16605, 0, 0, 0, -16604, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16603, -16602, -16601, -16600, -16599, -16598, -16597, -16596, -16595, -16594, -16593, -16592, -16591, -16590, -16589, -16588, -16587, -16586, -16585, -16584, -16583, -16582, -16581, 1, 1, 1, 1, -16580, 1, 1, 1, 1, -16579, -16578, -16577, -16576, -16575, -16574, -16573, -16572, -16571, -16570, -16569, -16568, -16567, -16566, -16565, -16564, 1, 1, 1, 1, -16563, -16562, -16561, 1, 1, -16560, -16559, 0, -16558, -16557, -16556, -16555, -16554, -16553, -16552, -16551, -16550, -16549, -16548, -16547, 1, 1, 1, -16546, 1, 1, 1, 1, -16545, -16544, -16543, 1, -16542, -16541, -16540, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16539, -16538, -16537, -16536, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16535, -16534, -16533, -16532, -16531, -16530, -16529, -16528, -16527, -16526, -16525, -16524, -16523, -16522, -16521, -16520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16519, -16518, -16517, -16516, -16515, -16514, -16513, -16512, 0, 0, 0, 0, 0, 0, 0, 0, -16511, -16510, -16509, -16508, -16507, -16506, -16505, -16504, -16503, -16502, -16501, -16500, 0, -16499, -16498, -16497, -16496, -16495, -16494, -16493, -16492, -16491, -16490, -16489, -16488, -16487, -16486, -16485, -16484, -16483, -16482, -16481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16480, -16479, 0, 0, -16478, -16477, -16476, -16475, -16474, -16473, -16472, -16471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16470, -16469, -16468, -16467, -16466, -16465, -16464, -16463, -16462, -16457, -16456, -16455, -16454, -16453, -16452, -16451, -16450, -16449, -16448, -16447, -16446, -16445, -16444, -16443, -16442, -16433, -16432, -16431, -16430, -16429, -16428, -16427, 0, -16426, -16425, -16424, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16423, -16422, -16421, -16420, -16419, -16418, -16417, -16416, -16415, -16414, -16413, -16412, -16411, -16410, -16409, -16408, -16407, -16406, -16405, -16404, -16403, -16402, -16401, -16400, -16399, -16398, -16397, -16396, -16395, -16394, -16393, -16392, -16391, -16389, -16388, -16387, -16386, -16385, -16384, -16383, -16382, -16380, -16379, -16378, -16377, -16376, -16374, -16372, 0, -16371, -16369, -16368, 0, 0, 0, 0, -16367, -16366, 0, 0, -16365, -16362, -16361, -16360, -16359, -16358, -16357, -16356, -16355, -16354, -16353, -16352, -16351, -16350, -16349, -16348, -16347, -16346, -16345, -16344, -16343, -16342, -16341, -16340, -16339, -16338, -16337, -16336, -16335, -16334, -16333, -16331, -16330, -16328, -16325, -16324, -16323, -16318, -16313, -16312, -16311, -16306, -16303, -16302, -16301, -16300, -16299, -16298, -16289, -16288, -16285, -16283, -16282, -16275, -16274, -16265, -16264, -16263, -16262, -16261, -16260, -16259, -16258, -16257, -16256, -16255, -16254, -16253, -16252, -16251, -16250, -16249, -16248, -16247, -16246, -16245, -16244, -16243, -16242, -16241, -16240, -16239, -16238, -16237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16236, -16235, -16234, -16233, -16232, -16231, -16230, -16229, 0, 0, 0, -16228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16227, -16226, -16225, -16224, -16223, -16222, -16221, -16220, -16219, -16218, -16217, -16216, 0, -16215, -16214, -16213, -16212, -16211, -16210, -16209, -16208, -16207, -16206, -16205, -16204, -16203, -16202, -16201, -16200, -16199, -16198, -16197, -16196, -16195, -16194, -16193, -16192, -16191, -16190, -16189, -16188, -16187, -16186, -16185, -16184, -16183, -16182, -16181, -16180, 0, 0, 0, -16179, -16178, -16177, -16176, -16175, -16174, -16173, -16172, -16171, -16170, -16169, -16168, 0, -16167, -16166, -16165, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -16164, -16163, -16162, -16161, -16160, -16159, -16158, -16157, -16156, -16155, -16154, -16153, -16152, -16151, -16150, -16149, -16148, -16147, -16146, -16145, -16144, -16143, -16142, -16141, 0, -16140, -16139, -16138, 0, 0, 0, -16137, -16136, -16135, -16134, 0, 0, 0, 0, -16133, 0, 0, 0, 0, 0, 0, 0, 0, -16132, -16131, -16082, -16080, 0, 0, 0, -16079, 0, 0, 0, 0, 0, 0, 0, 0, -16077, -16054, -16053, 0, -16052, -16051, -16050, -16049, -16048, -16047, -16046, -16045, -16044, -16043, -16042, -16041, -16040, -16039, -16038, -16037, -16036, -16035, -16034, -16033, -16032, -16031, -16030, -16027, -16026, -16025, -16024, -16023, -16022, 0, 0, 0, -16021, -16020, -16019, -16018, -16017, -16016, -16015, -16014, -16013, -16012, -16011, -16010, 0, 0, 0, 0, -16009, -16008, 0, 0, -16007, -16006, -16005, -16004, -16003, -16002, -16001, -16000, -15999, -15998, -15997, -15996, 0, -15995, -15994, -15991, 0, 0, 0, 0, 0, 0, 0, 0, -15990, -15989, -15988, -15987, -15986, -15985, -15984, -15981, -15980, -15979, -15978, -15975, -15974, -15973, -15972, -15971, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15970, -15969, -15968, 0, -15967, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15966, -15965, -15964, -15963, -15962, -15961, -15960, -15959, -15958, -15957, -15956, -15955, -15954, -15953, -15952, -15951, -15950, -15949, -15948, -15947, -15946, -15945, -15944, -15943, -15942, -15941, -15940, -15939, -15938, -15937, -15936, -15935, -15934, 0, 0, 0, -15933, -15932, -15929, -15928, -15923, -15922, -15919, -15918, -15917, -15916, -15915, -15914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15913, -15912, -15911, -15910, -15909, -15908, -15901, -15900, -15898, -15759, -15758, -15757, -15756, -15755, -15754, -15753, -15752, -15751, -15750, -15749, -15748, -15747, -15746, -15745, -15744, -15743, -15742, -15741, -15740, -15739, -15738, -15737, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15736, -15735, -15734, -15733, -15732, -15731, -15730, -15729, 0, 0, -15728, -15727, 0, 0, 0, 0, -15726, -15725, -15724, -15723, -15722, -15721, -15720, 1, -15719, -15718, -15717, -15716, -15715, -15714, -15713, 0, -15712, -15711, -15710, -15709, -15708, -15707, -15706, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -15705, -15704, -15703, 1, 1, 1, 1, 1, 1, 1, -15702, 1, 1, 1, 1, 1, 1, 1, -15701, 1, 1, 1, 1, -15700, -15699, -15698, 0, -15697, -15696, -15695, -15694, 1, 1, 1, -15693, 1, 1, 1, 1, 1, 1, 1, -15692, 1, 1, 1, 1, 1, 1, -15691, 0, 1, 1, 1, 1, 1, 1, 1, -15690, 1, 1, 1, 1, -15689, -15688, -15687, 0, -15686, -15685, -15684, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15683, -15682, -15681, -15680, -15679, -15678, -15677, 1, 1, 1, 1, 1, 1, 1, 1, 1, -15676, -15675, -15674, -15673, -15672, -15671, -15670, -15669, -15668, -15667, -15666, -15665, -15664, -15663, -15662, -15661, -15659, -15656, -15654, -15653, -15652, -15649, -15644, -15642, -15641, -15628, -15627, -15626, -15625, -15624, -15623, -15622, -15621, -15620, -15619, -15618, -15617, -15616, -15615, -15614, -15613, -15612, -15611, -15610, 0, -15609, -15608, 0, 0, 0, 0, 0, 0, -15607, 0, -15606, -15605, -15604, -15603, -15602, -15601, -15600, -15599, -15598, -15597, -15596, -15595, -15594, -15593, -15592, -15591, -15590, -15589, -15588, -15587, -15586, -15585, -15584, -15583, -15582, -15581, -15580, -15579, -15578, -15577, -15576, -15575, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15574, -15573, -15572, -15571, -15570, -15569, -15568, -15567, 0, 0, 0, 0, 0, 0, 0, 0, -15566, -15565, -15564, -15563, -15562, -15561, -15560, -15559, -15558, 1, -15557, -15556, 1, 1, 1, 1, 1, 1, 1, 1, 8, 1, 3, 1, 15, -15555, -15554, -15553, -15552, 2, 6, 2, -15551, 1, 1, 1, 5, 1, -15550, -15549, 3, 6, 13, -15548, 17, 18, 11, 24, -15547, -15546, -15545, 53, 64, -15544, -15543, 64, -15542, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, -15541, 64, 64, 88, 64, 66, -15540, -15539, -15538, 5, -15537, -15536, -15535, -15534, -15533, -15532, -15531, -15530, 1, 1, 1, -15529, -15528, -15527, -15526, -15525, -15524, -15523, -15522, -15521, -15520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15519, 0, -15518, -15517, -15516, -15515, 0, 0, 0, -15514, -15513, 0, 0, -15512, -15511, -15510, -15509, -15508, -15507, -15506, -15505, -15504, -15503, -15502, -15501, -15500, -15499, 1, 1, 1, 5, 1, 1, 1, 8, 1, 1, 1, 1, 1, -15498, 18, 1, 2, 4, 1, 3, -15497, 2, 32, 1, 9, 21, -15496, 32, 34, -15495, 33, 37, 2, 4, 1, 3, 8, 2, 2, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 5, -15494, 1, 64, 2, 4, -15493, -15492, -15491, 2, -15490, -15489, -15488, -15487, 1, 1, 1, -15486, 1, 1, 1, 1, 1, 1, 1, 1, -15485, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -15484, -15483, 1, -15482, -15481, 6, 12, -15480, -15479, -15478, -15477, -15476, -15475, -15474, -15473, -15472, -15471, -15470, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15469, 0, -15468, -15467, -15466, -15465, -15464, -15463, -15462, -15461, -15460, -15459, -15458, -15457, -15456, -15455, -15454, -15453, -15452, -15451, -15450, -15449, -15448, -15447, -15446, -15445, -15444, -15443, -15442, -15441, -15440, -15439, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15438, -15437, -15436, -15435, -15434, -15433, -15432, -15431, -15430, -15429, -15428, -15427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15426, -15425, -15424, -15423, -15422, -15421, -15420, -15419, -15418, -15417, -15416, -15415, -15414, -15413, -15412, -15411, -15410, -15409, -15408, -15407, -15406, -15405, -15404, -15403, -15402, -15401, -15400, -15399, -15398, -15397, -15396, -15395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15394, -15393, -15392, -15391, -15390, -15389, -15388, -15387, -15386, -15385, -15384, -15383, 0, -15382, -15381, -15380, 0, 0, 0, 0, 0, 0, 0, 0, -15379, -15378, -15377, -15376, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15375, -15374, -15373, -15372, -15371, -15370, -15369, -15368, -15367, -15366, -15365, -15364, -15363, -15362, -15361, -15360, -15359, -15358, -15357, -15356, -15355, -15354, -15353, -15352, -15351, -15350, -15349, -15348, -15347, -15346, -15345, -15344, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15343, -15342, -15341, -15340, -15339, -15338, -15337, -15336, -15335, -15334, -15333, -15332, -15331, -15330, -15329, -15328, -15327, -15326, -15325, -15324, -15323, -15322, -15321, -15320, 0, 0, -15319, -15318, 0, 0, 0, 0, 0, 0, 0, 0, -15317, 0, -15316, -15315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15314, -15313, 0, 0, 0, 0, -15312, -15311, 0, -15310, -15309, -15308, -15307, -15306, -15305, -15304, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -15303, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -15302, 1, 1, 1, -15301, 0, 0, 0, 1, -15300, -15299, -15298, -15297, -15296, -15295, -15294, -15293, 1, 1, 1, 1, 1, 1, 1, -15292, -15291, -15290, -15289, -15288, -15287, -15286, -15285, -15284, -15283, -15282, -15281, -15280, -15279, -15278, -15277, -15276, 0, 0, -15275, -15274, 0, 0, 0, 0, 0, 0, 0, 0, -15273, 0, 0, -15272, -15271, 1, 1, 1, -15270, -15269, -15268, -15267, -15266, -15265, -15264, -15263, -15262, -15261, -15260, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -15259, -15258, -15257, -15256, -15255, -15254, -15253, -15252, -15251, -15250, -15249, -15248, -15247, -15246, -15245, -15244, 0, 0, 0, 0, -15243, -15242, -15241, 0, -15240, -15239, -15238, -15237, -15236, -15233, -15229, -15227, -15226, -15223, -15222, 0, -15221, -15220, -15219, -15218, -15216, -15214, -15213, -15212, -15211, -15210, -15209, -15208, -15207, -15206, -15204, -15203, -15202, -15201, -15200, -15199, -15198, -15197, -15196, -15195, 0, 0, -15194, -15193, -15192, -15191, -15190, -15189, -15188, -15187, -15186, -15185, -15184, -15183, -15182, -15181, -15180, -15179, -15178, -15177, -15176, -15175, -15174, -15173, -15172, -15171, -15170, -15169, -15168, -15166, -15165, -15164, -15163, -15162, -15159, -15158, -15157, -15156, -15150, -15144, -15142, -15139, -15137, -15136, -15135, -15133, -15132, -15131, -15129, -15126, -15125, -15123, -15122, -15121, -15120, -15118, -15117, -15116, -15114, -15111, -15110, -15109, -15108, -15106, -15104, -15103, -15102, -15101, -15100, -15098, -15097, -15096, 0, -15095, -15093, -15092, 0, -15089, -15088, -15087, 1, -15085, -15084, -15083, 1, -15075, -15074, 1, 2, -15071, -15070, -15069, -15068, 4, 9, 4, 8, 8, 16, 8, 8, 1, 3, 7, 19, 17, 19, 17, 24, 2, 4, 2, 9, 2, 2, 2, 8, 3, 1, -15067, 5, -15066, -15065, -15063, -15062, -15061, -15059, -15057, -15055, -15054, -15053, -15052, -15051, -15050, -15049, -15048, -15047, -15046, -15045, -15044, -15041, -15040, -15039, -15038, -15037, -15036, -15035, -15034, -15033, -15032, -15028, -15027, -15026, -15025, -15024, -15023, -15022, -15020, -15019, -15018, -15017, -15016, -15015, -15014, -15013, -15012, -15011, -15009, -15008, -15006, -15005, -15004, 0, -15002, -15001, -15000, -14999, 0, 0, 0, -14998, -14997, -14995, -14994, -14993, -14992, -14991, -14988, -14987, -14986, -14985, -14984, -14983, -14982, -14981, -14980, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14979, -14978, -14977, -14976, -14975, -14974, -14973, -14972, -14971, -14970, -14969, 1, 1, -14968, -14967, -14966, -14965, -14964, -14963, -14962, -14961, -14960, -14959, -14958, -14957, -14956, -14955, -14954, -14953, -14952, -14951, -14950, -14949, -14948, -14947, 0, 0, 0, -14946, -14945, -14944, -14943, 0, -14942, -14941, -14940, -14939, 0, -14938, 1, 1, -14937, -14936, -14935, -14934, 1, -14933, 1, 1, 1, -14932, -14931, -14930, -14929, -14928, -14927, -14926, -14925, -14924, -14923, -14922, -14921, -14920, -14919, 0, -14918, -14917, -14916, -14915, -14914, 1, 1, 1, 1, 1, 1, 1, 1, -14913, -14912, 1, 1, -14911, -14910, -14909, -14908, -14907, -14906, -14905, -14904, -14903, -14902, -14901, -14900, -14899, -14898, -14897, -14896, -14895, -14894, -14893, -14892, -14891, -14890, -14889, -14888, -14887, -14886, -14885, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14884, -14883, -14882, -14881, -14880, -14879, -14878, -14877, -14876, -14875, -14874, -14873, -14872, -14871, -14870, -14869, -14868, -14867, -14866, -14865, -14864, -14863, -14861, -14860, -14857, -14856, -14855, -14854, -14851, -14850, -14849, -14848, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14847, -14846, -14845, -14844, -14843, -14842, -14841, -14840, -14839, -14838, -14837, -14836, -14835, -14834, -14833, -14832, -14831, -14830, -14829, -14828, -14827, -14826, -14825, -14824, 0, 0, -14823, -14822, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14821, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14820, -14819, -14818, -14817, -14816, -14815, -14814, -14813, 0, 0, -14812, -14811, 0, 0, 0, 0, -14810, 11, 12, 0, -14809, -14808, -14807, -14806, -14805, -14804, -14803, -14802, -14801, -14800, -14799, -14798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14797, -14796, -14795, -14794, -14793, -14792, -14791, 1, 1, 1, 1, 1, 1, 1, 1, -14790, -14789, 1, 1, -14788, -14787, -14786, -14785, 1, 1, 1, -14784, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -14783, -14782, -14781, -14780, -14779, -14778, -14777, -14776, 1, 1, 1, 1, 1, 1, 1, 1, -14775, -14774, -14773, -14772, -14771, -14770, -14769, -14768, -14767, 0, -14766, -14765, -14764, 0, 0, 0, 0, 0, 0, 0, 0, -14763, 0, 0, 0, -14762, -14761, -14760, -14759, -14758, -14757, -14756, -14755, -14754, -14753, -14752, -14751, -14750, -14749, -14748, -14746, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14745, -14738, -14732, -14731, -14730, -14729, -14728, -14727, -14726, -14725, -14724, -14723, -14722, -14721, -14720, -14719, -14718, -14717, -14716, -14715, -14714, -14713, -14712, -14711, -14710, -14709, -14708, -14707, -14706, -14705, -14704, -14703, -14702, -14701, -14700, -14699, -14698, -14697, -14696, -14695, 0, 0, 0, -14694, 0, 0, 0, 0, -14693, -14692, -14691, -14690, -14689, -14688, -14687, -14686, -14685, -14684, -14683, -14682, -14681, -14680, -14679, -14678, 0, 0, 0, -14677, -14676, -14675, -14674, -14673, -14672, -14671, -14670, -14669, -14668, -14667, -14666, -14665, -14664, -14663, -14662, -14661, -14660, -14659, -14658, -14657, -14656, -14655, -14654, -14653, -14652, -14651, -14650, -14649, -14648, -14647, -14646, -14645, -14644, -14643, -14642, -14641, -14640, -14639, -14638, -14637, -14636, -14635, -14634, -14633, -14632, -14631, -14630, -14629, -14628, -14627, -14626, -14625, -14624, -14623, -14622, -14621, -14620, -14619, -14618, -14617, -14616, -14615, -14614, -14613, -14612, -14611, -14610, -14609, -14608, -14607, -14606, -14605, -14604, -14603, -14602, -14601, -14600, -14599, -14598, -14597, -14596, -14595, -14594, -14593, -14592, -14591, -14590, -14589, -14588, -14587, -14586, -14585, -14584, -14583, -14582, -14581, -14580, -14579, -14578, -14577, -14576, -14575, -14574, -14573, -14572, -14571, -14570, -14569, -14568, -14567, -14566, -14565, -14564, -14563, -14562, -14561, -14560, -14559, -14558, -14557, -14556, -14555, -14554, -14553, -14552, -14551, -14550, -14549, -14548, -14547, -14546, -14545, -14544, -14543, -14542, -14541, -14540, -14539, -14538, -14537, -14536, -14535, -14534, -14533, -14532, -14531, -14530, -14529, -14528, -14527, -14526, -14525, -14524, -14523, -14522, -14521, -14520, -14519, -14518, -14517, -14516, -14515, -14514, -14513, -14512, -14511, -14510, -14509, -14508, -14507, -14506, -14505, -14504, -14503, -14502, -14500, -14499, -14498, -14497, -14496, -14495, -14494, -14493, -14492, -14491, -14490, -14489, -14488, -14487, -14486, -14485, -14484, -14483, -14482, -14481, -14480, -14479, -14478, -14477, -14476, -14475, -14474, -14473, -14472, -14471, -14470, -14469, -14468, -14467, -14466, -14465, -14464, -14463, -14462, -14461, -14460, -14459, -14458, -14457, -14456, -14455, -14454, -14453, -14452, -14451, -14450, -14449, -14448, -14447, -14446, -14438, -14437, -14436, -14435, -14434, -14433, -14432, -14431, -14430, -14429, -14428, -14426, -14421, -14420, -14419, -14415, -14409, -14408, -14407, -14406, -14405, -14404, -14403, -14402, -14401, -14400, -14399, -14398, -14397, -14396, -14395, -14394, -14393, -14392, -14391, -14390, -14389, -14388, -14387, -14386, -14385, -14384, -14383, -14382, -14381, -14380, -14379, -14378, -14377, -14376, -14375, -14374, -14373, -14372, -14371, -14370, -14369, -14368, -14367, -14366, -14365, -14364, -14363, -14362, -14361, -14360, -14359, -14358, -14357, -14356, -14355, -14354, -14353, -14352, -14351, -14350, -14349, -14348, -14347, -14346, -14345, -14344, -14343, -14342, -14341, -14340, -14339, -14338, -14337, -14336, -14335, -14334, -14333, -14332, -14331, -14330, -14329, -14328, -14327, -14326, -14325, -14324, -14323, -14322, -14321, -14320, -14319, -14318, -14316, -14315, -14314, -14313, -14312, -14311, -14310, -14309, -14308, -14307, -14306, -14305, -14304, -14303, -14302, -14301, -14300, -14299, -14298, -14297, -14296, -14295, -14293, -14292, -14291, -14290, -14289, -14288, -14287, -14286, -14285, -14284, -14283, -14282, -14281, -14280, -14279, -14278, -14277, -14276, -14275, -14274, -14273, -14272, -14271, -14270, -14269, -14267, -14266, -14265, -14264, -14263, -14262, -14261, -14260, -14259, -14258, -14257, 1, 1, 1, 1, 1, 1, 1, 9, 1, 1, 16, 1, 16, 16, 16, 20, -14256, -14255, -14254, -14253, -14252, -14251, -14250, -14248, -14246, -14244, -14243, -14242, -14241, -14240, -14239, -14238, -14237, -14236, -14234, -14233, -14232, -14231, -14230, -14229, -14227, -14226, -14225, -14224, -14223, -14221, -14219, -14218, -14217, -14216, -14215, -14214, -14213, -14212, -14211, -14210, -14209, -14208, -14207, -14206, -14205, -14204, -14203, -14202, -14201, -14200, -14199, -14198, -14197, -14196, -14195, -14194, -14192, -14190, -14189, -14187, -14186, -14184, -14183, -14180, -14168, -14165, -14163, -14162, -14161, -14160, -14159, -14158, -14157, -14156, -14154, -14153, -14152, -14150, -14149, -14142, -14140, -14137, -14136, -14135, -14133, -14132, -14131, -14129, -14123, -14118, -14117, -14116, -14113, -14112, -14111, -14110, 1, 1, 1, -14109, -14108, -14107, -14106, -14089, -14088, -14087, -14086, -14085, -14084, -14083, -14082, -14081, -14080, -14079, -14078, 1, 1, 1, 1, 1, 1, 1, -14077, 1, 1, 1, 1, 1, -14076, -14075, -14074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14073, -14072, -14071, -14070, -14069, -14068, -14067, -14066, -14065, -14064, -14063, -14062, 0, -14061, -14060, -14059, -14058, -14057, -14056, -14055, -14054, -14053, -14052, -14051, -14050, -14048, -14047, -14046, -14045, -14044, -14043, -14042, 0, 0, 0, -14041, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -14040, -14039, 0, 0, -14038, -14037, -14036, -14035, -14034, -14033, -14032, -14031, -14030, -14029, -14028, -14027, -14026, -14025, -14024, -14023, -14022, -14021, -14020, -14019, -14018, -14017, -14016, -14015, 0, 0, 0, -14014, 0, 0, 0, -14013, -14012, -14011, -14010, -14009, -14008, -14007, -14006, -14005, -14004, -14003, -14002, -14001, -14000, -13999, -13998, -13997, -13996, -13995, -13994, -13993, -13992, -13991, -13990, -13989, -13988, -13987, -13986, -13985, -13984, -13983, -13982, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13979, -13970, -13965, -13964, -13962, -13961, -13960, -13959, -13958, -13956, -13955, -13954, -13953, -13952, -13951, -13950, -13949, -13947, -13944, -13943, -13942, -13941, -13940, -13939, -13938, 0, -13937, -13936, -13935, -13934, -13933, -13932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13931, -13930, -13929, -13928, -13927, -13926, -13925, -13924, 0, 0, 0, 0, -13923, -13922, -13921, 0, -13920, 0, -13919, -13918, -13917, -13916, -13915, -13914, -13913, -13912, -13911, -13910, -13909, -13908, -13907, -13906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13905, -13904, -13903, -13902, -13901, -13900, -13899, -13898, -13897, -13896, -13895, -13894, -13893, -13892, -13891, -13890, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13889, -13888, -13887, -13886, -13885, -13884, -13883, -13882, -13881, -13880, -13879, -13878, 0, 0, -13877, -13876, -13875, -13874, -13873, -13872, -13871, -13870, -13869, -13860, -13859, -13858, -13856, -13855, -13854, -13853, -13852, -13850, -13849, -13848, -13846, -13845, -13843, -13842, -13835, -13834, -13833, -13832, -13831, -13830, -13829, -13828, -13827, -13826, -13825, -13824, -13823, -13822, -13821, -13820, -13819, -13818, 0, 0, 0, -13817, 0, 0, 0, 0, -13816, -13815, -13814, -13813, -13812, -13811, -13810, -13809, -13808, -13807, -13806, -13805, -13804, -13803, -13802, -13801, -13800, -13799, -13798, -13797, -13796, -13795, -13794, -13793, -13792, -13791, -13790, -13789, 0, -13788, -13787, -13786, -13785, -13784, -13783, -13782, -13781, -13780, -13779, -13778, -13777, -13776, -13775, -13774, -13773, -13772, -13771, -13770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13769, -13768, -13767, -13766, -13765, -13764, -13763, -13762, 0, 0, -13761, -13760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -13759, -13758, -13757, -13756, -13755, -13754, -13753, -13752, -13751, -13750, -13749, -13748, -13747, -13746, -13745, -13744, -13743, -13742, -13741, -13740, -13739, -13738, -13737, -13736, -13735, -13734, -13733, -13732, -13731, -13730, -13729, -13728, -13727, -13726, -13725, -13724, -13723, -13722, -13721, -13720, -13719, -13718, -13717, -13716, -13715, -13714, -13713, -13712, -13711, -13710, -13709, -13708, -13707, -13706, -13705, -13704, -13703, -13702, -13701, -13700, -13699, -13698, -13697, -13696, -13695, -13693, -13692, -13688, -13683, -13682, -13681, -13680, -13679, -13678, -13677, -13676, -13675, -13674, -13671, -13670, -13669, -13668, -13663, -13662, -13659, -13658, -13657, -13656, -13654, -13653, -13652, -13617, -13616, -13603, -13599, -13598, -13597, -13591, -13590, -13589, -13588, -13587, -13569, -13568, -13555, -13554, -13553, -13552, -13551, -13548, -13540, -13538, -13535, -13534, -13531, -13530, -13529, -13528, -13527, -13526, -13525, -13524, -13522, -13519, -13518, -13513, -13512, -13509, -13507, -13506, -13498, -13494, -13491, -13490, -13489, -13488, -13485, -13484, -13482, -13475, -13473, -13472, -13471, -13470, -13469, -13468, -13467, -13466, -13465, -13464, -13463, -13462, -13461, -13459, -13455, -13451, -13450, -13449, -13448, -13446, -13445, -13444, -13439, -13438, -13437, -13436, -13433, -13432, -13429, -13428, -13415, -13414, -13411, -13410, -13409, -13408, -13405, -13404, -13403, -13402, -13400, -13399, -13398, -13397, -13396, -13391, -13390, -13389, -13388, -13387, -13386, -13385, -13383, -13382, -13381, -13380, -13374, -13369, -13368, -13367, -13366, -13365, -13364, -13363, -13362, -13361, -13360, -13357, -13356, -13355, -13347, -13343, -13342, -13341, -13340, -13339, -13338, -13337, -13336, -13335, -13334, -13333, -13332, -13331, -13327, -13325, -13320, -13318, -13309, -13308, -13299, -13298, -13297, -13296, -13293, -13292, -13287, -13286, -13283, -13282, -13281, -13280, -13277, -13276, -13271, -13270, -13267, -13266, -13263, -13262, -13259, -13258, -13257, -13256, -13255, -13254, -13253, -13252, -13246, -13241, -13240, -13237, -13236, -13235, -13233, -13232, -13229, -13228, -13219, -13218, -13213, -13212, -13209, -13187, -13186, -13185, -13184, -13183, -13182, -13181, -13180, -13179, -13178, -13177, -13176, -13175, -13174, -13173, -13172, -13171, -13170, -13169, -13168, -13167, -13166, -13165, -13164, -13163, -13162, -13161, -13160, -13158, -13157, -13156, -13155, -13154, -13151, -13145, -13144, -13143, -13142, -13141, -13140, -13139, -13138, -13135, -13127, -13121, -13120, -13118, -13117, -13116, -13115, -13114, -13106, -13105, -13104, -13102, -13100, -13099, -13097, -13096, -13095, -13094, -13093, -13092, -13091, -13090, -13089, -13088, -13087, -13086, -13085, -13084, -13083, -13082, -13081, -13080, -13079, -13078, -13077, -13076, -13075, -13074, -13073, -13072, -13071, -13070, -13069, -13068, -13067, -13066, -13065, -13064, -13063, -13062, -13061, -13060, -13059, -13058, -13057, -13056, -13055, -13054, -13053, -13052, -13051, -13050, -13049, -13048, -13047, -13046, -13045, -13044, -13043, -13042, -13041, -13040, -13039, -13038, -13037, -13036, -13035, -13034, -13033, -13032, -13031, -13030, -13029, -13028, -13027, -13026, -13025, -13024, -13023, -13022, -13021, -13020, -13019, -13018, -13017, -13016, -13015, -13014, -13013, -13012, -13011, -13010, -13009, -13008, -13007, -13006, -13005, -13004, -13003, -13002, -13001, -13000, -12999, -12998, -12997, -12996, -12995, -12994, -12993, -12992, -12991, -12989, -12988, -12987, -12985, -12984, -12983, -12982, -12981, -12980, -12979, -12978, -12977, -12976, -12975, -12974, -12973, -12972, -12971, -12970, -12969, -12968, -12967, -12966, -12965, -12964, -12963, -12962, -12961, -12960, -12959, -12958, -12957, -12956, -12955, -12954, -12953, -12952, -12951, -12950, -12949, -12948, -12947, -12946, -12945, -12944, -12943, -12942, -12941, -12940, -12939, -12938, -12937, -12936, -12935, -12934, -12933, -12932, -12931, -12930, -12929, -12928, -12927, -12926, -12925, -12924, -12923, -12922, -12921, -12920, -12919, -12918, -12917, -12916, -12915, -12914, -12913, -12912, -12911, 1, 1, 1, 1, 1, -12910, -12909, 1, 1, -12908, -12907, -12906, -12905, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -12904, -12903, -12902, -12901, -12900, -12899, -12898, -12897, -12882, -12872, -12871, -12870, -12869, -12868, -12867, -12866, -12865, -12864, -12863, -12862, -12861, -12860, -12859, -12858, -12857, -12856, -12855, -12854, -12853, -12852, -12851, -12850, -12849, -12848, -12847, 0, 0, 0, -12846, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12845, -12844, -12843, -12832, 0, 0, 0, -12831, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12830, -12829, -12828, -12827, -12826, -12825, -12824, -12823, -12822, -12821, -12820, -12819, -12818, -12817, -12816, -12815, -12814, -12813, -12812, -12811, -12810, -12809, -12808, -12807, -12806, -12805, -12804, -12803, -12802, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -12801, -12800, -12799, -12798, -12797, -12796, -12795, -12794, -12793, -12792, -12790, -12789, -12788, -12787, -12784, -12783, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -12782, 1, 1, 1, 1, -12781, -12780, -12779, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -12778, -12777, -12776, -12775, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -12774, -12773, -12772, -12771, -12770, -12769, -12768, -12767, -12766, -12765, -12764, -12763, -12762, -12761, -12760, -12759, -12758, -12757, -12756, -12755, -12754, -12753, -12752, -12751, -12750, -12749, -12748, -12747, -12746, -12745, -12744, -12740, -12715, -12705, -12701, -12672, -12671, -12670, -12669, -12668, -12667, -12666, -12665, -12664, -12663, -12662, -12661, -12660, -12659, -12658, -12657, -12656, -12655, -12654, -12653, -12652, -12651, -12650, -12649, -12648, -12647, -12646, -12645, -12644, -12643, -12642, -12641, -12640, -12639, -12638, -12637, -12636, -12635, -12634, -12633, -12632, -12631, -12630, -12629, -12628, -12617, -12616, -12615, -12614, -12613, -12612, -12611, -12610, -12609, -12608, -12607, -12606, -12605, -12604, -12603, -12602, -12601, -12600, -12599, -12598, -12596, -12593, -12592, -12590, -12588, -12587, -12585, -12583, -12582, -12581, -12580, -12578, -12577, -12576, -12575, -12574, -12573, -12572, -12571, -12570, -12569, -12568, -12567, -12566, -12565, -12564, -12563, -12562, -12561, -12560, -12559, -12558, -12557, -12556, -12555, -12554, -12553, -12552, -12551, -12550, -12549, -12548, -12547, -12546, -12545, -12544, -12543, -12542, -12541, -12540, -12539, -12538, -12537, -12536, -12535, -12534, -12533, -12532, -12531, -12530, -12529, -12528, -12527, -12526, -12525, -12524, -12523, -12522, -12521, -12520, -12519, -12518, -12517, -12516, -12515, -12514, -12513, -12512, -12511, -12510, -12509, -12508, -12507, -12506, -12505, -12504, -12503, -12502, -12501, -12500, -12499, -12498, -12497, -12496, -12495, -12494, -12493, -12492, -12491, -12490, -12489, -12488, -12487, -12486, -12485, -12484, -12483, -12482, -12481, -12474, -12470, -12469, -12466, -12465, -12464, -12463, -12462, -12461, -12459, -12458, -12457, -12448, -12445, -12444, -12443, -12442, -12441, -12440, -12439, -12438, -12437, -12436, -12435, -12434, -12433, -12432, -12430, -12428, -12427, -12426, -12425, -12420, -12416, -12415, -12414, -12413, -12412, -12411, -12410, -12409, -12408, -12406, -12405, -12404, -12401, -12400, -12399, -12398, -12397, 0, 0, 0, 0, 0, 0, -12396, -12395, -12394, -12393, -12392, -12391, -12390, -12389, 0, 0, -12388, -12387, 0, 0, 0, 0, -12386, -12385, -12384, -12383, -12382, -12381, -12380, -12379, 0, 0, 0, -12378, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12377, -12376, -12374, -12373, -12372, -12363, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 34, 34, 1, 1, 1, 1, 1, 4, 1, 1, 37, 1, 10, 12, 6, 6, 10, 20, 10, 23, 26, 26, 65, 74, 74, 77, 84, 90, 68, 102, 128, 128, 128, 128, 128, 128, 128, 128, -12360, -12359, -12358, -12357, -12356, -12355, -12354, -12353, -12352, -12351, -12350, -12349, -12348, -12347, -12346, -12345, 128, 128, 128, 128, -12344, -12343, -12342, -12341, -12340, -12339, -12338, -12337, -12336, -12335, -12334, -12333, -12332, -12331, -12328, -12327, -12326, -12325, -12324, -12323, -12322, -12321, -12320, -12319, -12318, -12317, -12316, -12315, -12314, -12313, 0, 0, 0, -12312, -12311, -12310, -12309, -12308, -12307, -12306, -12305, -12304, 0, -12303, 128, 128, -12302, -12301, -12300, -12299, -12298, -12297, -12294, -12293, -12292, -12291, -12290, -12289, -12288, -12287, -12286, -12285, -12284, -12283, -12282, -12281, -12280, -12279, -12278, -12277, -12276, -12275, -12274, -12273, -12272, -12271, -12270, -12269, -12268, -12267, -12266, -12265, -12264, -12263, -12262, -12261, -12260, -12259, -12258, -12257, -12256, -12255, -12254, -12253, -12252, -12251, -12250, -12249, -12248, -12247, -12246, -12245, -12244, -12243, -12242, -12241, -12240, -12239, -12238, -12237, -12236, -12235, -12234, -12233, -12232, -12231, -12230, -12229, -12228, -12227, -12226, -12225, -12224, -12223, -12222, -12221, -12220, -12219, -12218, -12217, -12216, -12215, -12214, -12213, -12212, -12211, -12210, -12209, -12208, -12207, -12206, -12205, -12204, -12203, -12202, -12201, -12200, -12199, -12198, -12197, -12196, -12195, -12194, -12193, -12192, -12191, -12190, -12189, -12188, -12187, -12186, -12185, -12184, -12183, -12182, -12181, -12180, -12179, -12178, -12177, -12176, -12175, -12174, -12168, -12167, -12166, -12165, -12164, -12163, -12162, -12161, -12160, -12159, -12158, -12157, -12156, -12155, -12154, -12153, -12152, -12151, -12150, -12149, -12148, -12147, -12146, -12145, -12144, -12143, -12142, -12141, -12140, -12139, -12138, -12137, -12136, -12135, -12134, -12133, -12132, -12131, -12130, -12129, -12128, -12127, -12126, -12125, -12124, -12123, -12122, -12121, -12120, -12119, -12118, -12117, -12116, -12115, -12114, -12113, -12112, -12111, -12110, -12109, -12108, -12107, -12106, -12105, -12104, -12103, -12102, -12101, -12100, -12099, -12098, -12097, -12096, -12095, -12094, -12093, -12092, -12091, -12090, -12089, -12088, -12087, -12086, -12085, -12084, -12083, -12082, -12081, -12080, -12079, -12078, -12077, -12076, -12075, -12074, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12073, -12072, -12071, -12070, -12069, -12068, -12067, -12066, -12065, -12064, -12063, -12062, 0, -12061, -12060, -12059, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12058, -12057, -12056, -12055, -12054, -12053, -12052, -12051, -12050, -12049, -12048, -12047, -12046, -12045, -12044, -12043, -12042, -12041, -12040, -12039, -12038, -12037, -12036, -12035, -12034, -12033, -12032, -12031, -12030, -12029, -12028, -12027, -12026, -12025, -12024, -12023, -12022, -12021, -12020, -12019, -12018, -12017, -12016, -12015, -12014, -12013, -12012, -12011, -12010, -12009, -12008, -12007, -12006, -12005, -12004, -12003, -12002, -12001, -12000, -11999, -11998, -11997, -11996, -11995, -11994, -11993, -11992, -11991, -11990, -11988, -11985, -11984, -11983, -11982, -11981, -11980, -11979, -11978, -11977, -11976, -11975, -11974, -11973, -11972, -11971, -11970, -11969, -11968, -11966, -11963, -11961, -11960, -11959, -11958, -11957, -11956, -11955, -11954, -11951, -11937, -11936, -11934, -11933, -11932, -11931, -11930, -11927, -11915, -11913, -11912, -11911, -11910, -11909, -11908, -11907, -11906, -11905, -11904, -11903, -11902, -11901, -11900, -11899, -11898, -11897, -11896, -11895, -11894, -11893, -11892, -11891, -11890, -11889, -11888, -11887, -11886, -11885, -11884, -11883, -11882, -11881, -11880, -11879, -11878, -11877, -11876, -11875, -11874, -11873, -11872, -11871, -11870, -11869, -11868, -11867, -11866, -11865, -11864, -11863, -11862, -11861, -11860, -11859, -11858, -11857, -11856, -11855, -11854, -11853, -11852, -11851, -11850, -11849, -11848, -11847, -11846, -11845, -11844, -11843, -11842, -11841, -11840, -11839, -11838, -11837, -11836, -11835, -11834, -11833, -11832, -11831, -11830, -11829, -11828, -11827, -11826, -11825, -11824, -11823, -11822, -11821, -11820, -11819, -11818, -11817, -11816, -11815, -11814, -11813, -11812, -11811, -11810, -11809, -11808, -11807, -11806, -11805, -11804, -11803, -11802, -11801, -11800, -11799, -11798, -11797, -11796, -11795, -11794, -11793, -11792, -11791, -11790, -11789, -11788, -11787, -11786, -11785, -11784, -11782, -11781, -11780, -11779, -11777, -11641, -11640, -11639, -11638, -11637, -11636, -11635, -11634, -11633, -11626, -11516, -11515, -11514, -11513, -11512, -11511, -11510, -11509, -11508, -11507, -11506, -11505, -11488, -11487, -11486, -11485, -11484, -11482, -11481, -11480, -11479, -11478, -11477, -11476, -11475, -11474, -11473, -11472, -11471, -11470, -11469, -11468, -11467, -11466, -11465, -11463, -11460, -11459, -11458, -11457, -11264, -11263, -11262, -11261, -11260, -11259, -11258, -11257, -11256, -11255, -11254, -11253, -11252, -11251, -11250, -11249, -11248, -11247, -11245, -11242, -11240, -11239, -11236, -11235, -11229, -11228, -11225, -11222, -11221, -11220, -11219, -11218, -11217, -11216, -11215, -11214, -11213, -11212, -11211, -11210, -11209, -11208, -11207, -11206, -11205, -11204, -11203, -11202, -11201, -11200, -11199, -11198, -11197, -11196, -11195, -11194, -11193, -11192, -11191, -11190, -11189, -11188, -11186, -11185, -11184, -11183, -11182, -11181, -11180, -11179, -11177, -11176, -11175, -11174, -11173, -11172, -11171, -11170, -11169, -11168, -11167, -11166, -11165, -11164, -11163, -11162, -11161, -11160, -11159, -11158, -11157, -11156, -11155, -11150, -11149, -11148, -11146, -11145, -11143, -11142, -11141, -11140, -11139, -11138, -11137, -11136, -11135, -11134, -11133, -11132, -11131, -11130, -11129, -11128, -11127, -11126, -11125, -11124, -11123, -11122, -11121, -11120, -11118, -11117, -11116, -11115, -11114, -11113, -11112, -11111, -11110, -11109, -11108, -11107, -11106, -11105, -11104, -11103, -11102, -11101, -11100, -11098, -11097, -11096, -11095, -11094, -11093, -11092, -11091, -11090, -11089, -11088, -11087, -11086, -11085, -11084, -11082, -11081, -11080, -11079, -11078, -11077, -11076, -11075, -11074, -11073, -11072, -11071, -11070, -11068, -11067, -11066, -11064, -11063, -11062, -11061, -11059, -11058, -11056, -11055, -11054, -11053, -11052, -11051, -11048, -11047, -11044, -11043, -11042, -11041, -11040, -11039, -11038, -11037, -11036, -11035, -11034, -11033, -11032, -11031, -11030, -11029, -11028, -11027, -11026, -11025, -11024, -11023, -11022, -11021, -11020, -11019, -11018, -11017, -11016, -11015, -11014, -11013, -11012, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -11011, -11010, -11009, -11008, -11007, -11006, -11005, -11004, -11003, -11002, -10993, -10992, -10990, -10989, -10988, -10987, -10986, -10979, -10971, -10970, -10969, -10968, -10967, -10966, -10965, -10964, -10963, -10962, -10961, -10960, -10959, -10958, -10957, -10956, -10955, -10954, -10953, -10952, -10951, -10950, -10949, -10948, -10947, -10946, -10939, -10931, -10923, -10913, -10912, -10910, -10909, -10908, -10907, -10906, -10899, -10893, -10891, -10890, -10889, -10888, -10887, -10886, -10885, -10884, -10883, -10882, -10881, -10880, -10879, -10878, -10877, -10876, -10875, -10874, -10873, -10872, -10871, -10870, -10869, -10868, -10867, -10866, -10865, -10864, -10863, -10862, -10861, -10860, -10859, -10858, -10857, -10856, -10855, -10854, -10853, -10852, -10851, -10850, -10849, -10848, -10847, -10846, -10845, -10844, -10843, -10842, -10841, -10840, -10839, -10838, -10837, -10836, -10835, -10834, -10833, -10832, -10831, -10830, -10829, -10828, -10827, -10826, -10825, -10824, -10823, -10822, -10821, -10820, -10819, -10818, -10817, -10816, -10815, -10814, -10813, -10812, -10811, -10810, -10809, -10808, -10807, -10806, -10805, -10804, -10803, -10802, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -10801, -10800, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -10799, -10798, -10797, -10795, -10794, -10793, -10792, -10791, -10790, -10789, -10788, -10787, -10786, -10785, -10784, -10783, -10782, -10781, -10780, -10779, -10778, -10777, -10776, -10775, -10774, -10773, -10772, -10771, -10770, -10769, -10768, -10767, -10766, -10765, -10764, -10763, -10762, -10761, -10760, -10759, -10758, -10757, -10756, -10755, -10754, -10753, -10752, -10751, -10750, -10749, -10748, -10747, -10740, -10739, -10726, -10725, -10724, -10723, -10719, -10716, -10715, -10714, -10713, -10712, -10711, -10710, -10709, -10708, -10707, -10706, -10705, -10704, -10702, -10701, -10700, -10699, -10698, -10697, -10696, -10695, -10694, -10693, -10692, -10691, -10690, -10689, -10688, -10687, -10685, -10684, -10683, -10678, -10677, -10676, -10674, -10666, -10656, -10655, -10654, -10653, -10652, -10651, -10650, -10649, -10648, -10647, -10646, -10645, -10643, -10642, -10641, -10639, -10638, -10629, -10628, -10627, -10626, -10610, -10609, -10598, -10597, -10596, -10595, -10584, -10583, -10582, -10581, -10580, -10579, -10578, -10576, -10575, -10574, -10573, -10572, -10571, -10570, -10569, -10568, -10567, -10566, -10565, -10564, -10563, -10562, -10561, -10560, -10559, -10557, -10556, -10555, -10528, -10500, -10499, -10498, -10497, -10496, -10495, -10494, -10493, -10492, -10491, -10490, -10489, -10488, -10487, -10486, -10485, -10484, -10483, -10482, -10481, -10480, -10479, -10478, -10477, -10476, -10475, -10474, -10473, -10472, -10471, -10470, -10469, -10468, -10467, -10466, -10465, -10464, -10463, -10462, -10461, -10460, -10459, -10458, -10457, -10456, -10455, -10454, -10453, -10452, -10451, -10450, -10449, -10448, -10447, -10446, -10445, -10444, -10443, -10442, -10441, -10440, -10439, -10438, -10437, -10436, -10435, -10434, -10433, -10432, -10431, -10430, -10429, -10428, -10427, -10426, -10425, -10424, -10423, -10422, -10421, -10420, -10419, -10418, -10417, -10416, -10415, -10414, -10413, -10412, -10411, -10410, -10409, -10408, -10407, -10406, -10405, -10404, -10403, -10402, -10401, -10400, -10399, -10398, -10397, -10396, -10395, -10394, -10393, -10392, -10391, -10390, -10389, -10388, -10387, -10386, -10385, -10384, -10383, -10382, -10381, -10380, -10379, -10378, -10377, -10376, -10375, -10374, -10373, -10372, -10371, -10370, -10369, -10368, -10367, -10366, -10365, -10364, -10363, -10362, -10361, -10360, -10359, -10358, -10357, -10356, -10355, -10354, -10353, -10352, -10351, -10350, -10349, -10348, -10347, -10346, -10345, -10344, -10343, -10342, -10341, -10340, -10339, -10338, -10337, -10336, -10335, -10334, -10333, -10332, -10331, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 36, 36, 36, 36, 3, 4, 6, 8, 10, 10, 12, 14, 4, 1, 7, 33, 37, 42, 40, 58, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 8, 13, 13, 132, 14, 14, 64, 64, 8, 8, 64, 64, 64, 64, 64, 64, 132, 132, 132, 132, 48, 134, 132, 137, 26, 26, 138, 151, 128, 128, 132, 132, 188, 190, 196, 196, 12, 12, 35, 46, 40, 42, 40, 181, 180, 180, 181, 189, 196, 196, 196, 196, 196, 204, 204, 204, 217, 240, 240, 240, 196, 221, 220, 220, 228, 228, 260, 260, 237, 256, 258, 260, 149, 257, 264, 266, 276, 286, 288, 288, 260, 260, 264, 266, 258, 258, 262, 266, 85, 261, 288, 288, 288, 288, 288, 288, 260, 262, 260, 264, 257, 260, 260, 260, 256, 261, 260, 260, 257, 260, 260, 310, 318, 333, 332, 345, 257, 261, 268, 294, 267, 281, 327, 332, 324, 324, 330, 350, 324, 324, 324, 388, 327, 384, 384, 387, 384, 384, 384, 384, 384, 384, 404, 404, 390, 390, 420, 420, 344, 384, 386, 390, 266, 270, 349, 387, 389, 442, 512, 512, 469, 472, 472, 472, 452, 469, 512, 512, 392, 394, 392, 456, 512, 512, 512, 512, 512, 512, 512, 512, 456, 456, 456, 512, 457, 475, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 456, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, -10330, -10329, -10328, -10327, -10326, -10325, -10324, -10323, -10322, -10321, -10320, -10319, -10318, -10317, -10316, -10315, -10314, -10313, -10311, -10310, -10309, -10308, -10307, -10306, -10305, -10304, -10303, -10302, -10301, -10300, -10299, -10298, 512, 512, -10297, -10296, -10295, -10294, 512, -10293, -10292, 512, 512, -10291, -10290, 512, 512, 512, -10289, -10288, -10287, -10286, -10285, -10284, -10283, -10282, -10281, 512, -10280, -10279, -10278, -10277, -10276, -10275, 512, 512, 512, 512, -10274, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, -10273, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, -10272, -10271, -10270, -10269, -10268, -10267, -10266, -10265, -10264, -10263, -10262, -10261, -10260, -10259, -10258, -10257, -10256, -10255, -10254, -10253, -10251, -10250, -10249, -10248, -10247, -10246, -10245, -10244, -10243, -10242, -10241, -10240, 512, 512, 512, 512, 512, 512, 512, 512, -10239, -10238, 512, 512, -10237, -10236, -10235, -10234, -10233, -10232, -10231, -10230, -10229, -10228, -10227, -10226, -10225, -10224, -10223, -10222, -10221, -10220, -10219, -10218, 512, 512, 512, 512, 512, 512, 512, 512, -10217, 512, 512, 512, -10216, -10215, -10214, -10213, 512, 512, 512, -10212, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, -10211, 512, 512, 512, -10210, -10209, -10208, -10207, 512, 512, 512, -10206, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, 22, 32, 32, 55, 75, 77, 90, 170, 170, 170, 184, 204, -10205, -10204, -10203, -10202, 0, 0, 0, 0, 0, -10201, 0, 0, 0, -10200, -10199, -10198, -10197, -10196, 0, -10195, -10194, -10193, -10192, -10191, -10190, -10189, -10188, -10187, -10186, -10185, -10184, -10183, -10182, -10181, -10180, -10179, -10178, 0, -10177, -10176, -10175, -10174, -10173, -10172, -10171, -10170, -10169, -10168, -10167, -10166, -10165, -10164, -10163, -10162, -10161, -10160, -10159, -10158, -10157, -10156, -10155, -10154, -10153, -10152, -10151, -10150, -10149, -10148, -10147, -10146, -10145, -10144, -10143, -10142, -10141, -10140, -10139, -10138, -10137, -10136, -10135, -10134, -10133, -10130, -10129, -10128, -10126, -10125, -10124, 0, -10122, -10121, -10119, -10115, -10112, -10111, -10110, -10109, -10108, -10107, -10106, -10105, -10104, -10103, -10102, -10101, -10100, -10099, -10098, -10097, -10096, -10095, -10094, -10093, -10092, -10091, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10090, -10089, -10088, -10087, -10086, -10085, 0, 0, -10084, 0, 0, 0, -10083, 0, -10082, -10081, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10080, -10079, -10078, -10077, -10076, -10075, -10074, -10073, -10072, -10071, -10070, -10069, -10068, -10067, -10066, -10065, -10064, -10063, -10062, -10061, -10060, -10059, -10058, -10057, -10056, -10055, -10054, -10053, -10052, -10051, -10050, -10049, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10048, -10047, -10046, -10045, -10044, -10043, -10042, -10041, -10040, -10039, -10038, -10037, -10036, -10035, -10034, -10033, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -10032, -10031, -10030, -10029, -10028, -10027, -10026, -10025, -10024, -10023, -10022, -10021, 4, 4, 4, 4, 4, 12, 12, 12, 4, 40, 40, 40, 4, 20, 20, 20, 29, 30, 28, 119, 12, 114, 128, 128, 12, 128, 129, 131, 128, 130, 148, 148, -10020, -10019, -10018, -10017, -10016, -10015, -10014, -10013, -10012, -10011, -10010, -10009, -10008, -10007, -10006, -10005, 164, 164, 168, 173, 132, 165, 211, 216, 8, 208, 209, 211, -10004, 211, 212, 258, -10003, -10002, -10001, -10000, -9999, -9998, -9997, -9996, -9995, -9994, -9993, -9992, -9991, -9990, -9989, -9988, -9987, -9986, -9985, -9983, -9966, -9965, -9964, -9963, -9962, -9961, -9960, -9959, -9958, -9957, -9956, -9955, -9954, -9953, -9952, -9951, -9950, -9949, -9948, -9947, -9945, -9944, -9943, -9941, -9906, -9886, -9885, -9880, -9879, -9878, -9877, -9876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9875, -9874, -9873, -9860, -9858, -9841, -9839, -9838, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9832, -9831, -9824, -9823, -9822, -9821, -9820, -9819, -9818, -9817, -9816, -9815, -9814, -9813, -9812, -9811, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9810, -9809, -9808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -9807, -9806, -9805, -9804, -9793, -9714, -9709, -9704, 0, -9703, -9702, -9694, 0, 0, 0, 0, -9693, -9691, -9690, -9670, -9666, -9665, -9664, -9663, -9654, -9653, -9652, -9651, -9650, -9649, -9648, -9647, -9646, -9645, -9644, -9643, -9642, -9625, -9621, -9620, -9619, -9618, -9615, -9609, -9608, -9607, -9606, -9602, -9601, -9597, -9596, 0, -9595, -9590, -9589, -9587, -9586, -9585, -9582, -9576, -9562, -9542, -9541, -9540, -9539, -9538, -9537, -9536, -9535, -9534, -9529, -9526, -9525, -9524, -9523, -9522, -9521, -9516, -9515, -9514, -9509, -9508, -9507, -9506, 0, -9505, -9504, -9503, 0, 0, 0, 0, 0, 0, 0, 0, -9502, -9501, -9500, -9498, -9495, -9491, -9490, -9485, -9484, -9481, -9480, -9479, -9478, -9477, -9476, -9475, -9474, -9473, -9472, -9470, -9466, -9459, -9450, -9449, -9448, -9447, -9446, -9445, -9444, -9443, -9442, -9441, -9440, -9439, -9438, 0, -9437, -9436, -9435, -9434, -9433, -9431, -9430, -9429, -9428, -9427, -9426, -9425, -9424, -9423, -9422, -9421, -9420, -9419, -9418, -9417, -9416, -9415, -9414, -9413, -9411, -9410, -9409, -9408, 0, 0, -9407, -9406, 0, 0, 0, 0, -9405, -9403, 0, 0, -9402, -9401, -9400, -9399, -9398, -9397, -9396, -9395, -9393, -9392, -9391, -9390, -9389, -9388, -9387, -9386, -9376, -9374, -9363, -9361, -9352, -9342, -9341, -9340, -9323, -9320, -9319, -9315, -9285, -9284, -9281, -9279, -9278, -9274, -9273, -9272, -9269, -9265, -9261, -9259, -9248, -9247, -9246, -9245, -9244, -9243, -9242, -9241, -9240, -9239, -9234, -9233, -9232, -9230, -9228, -9226, -9223, -9222, -9221, -9218, -9217, -9216, -9215, -9213, -9212, -9204, -9203, -9202, -9201, -9200, -9199, -9198, -9197, -9196, -9195, -9190, -9189, -9187, -9184, -9183, -9178, -9177, -9174, -9173, -9172, -9171, -9168, -9167, -9162, -9161, -9158, -9157, -9153, -9150, -9148, -9144, -9140, -9138, -9137, -9136, -9135, -9132, -9121, -9120, -9118, -9106, -9105, -9102, -9101, -9100, -9099, -9098, -9096, -9095, -9094, -9085, -9084, -9082, -9077, -9071, -9070, -9069, -9068, -9066, -9065, -9064, -9063, -9061, -9059, -9058, -9057, -9051, -9045, -9042, -9041, -9035, -9033, -9026, -9001, -8993, -8978, -8972, -8966, -8965, -8964, -8963, -8962, -8961, -8960, -8959, -8958, -8956, -8955, -8954, -8953, -8952, -8951, -8950, -8949, -8942, -8941, -8937, -8936, -8935, -8934, -8933, -8931, -8930, -8929, -8924, -8922, -8920, -8919, -8918, -8917, -8916, -8915, -8914, -8913, -8912, -8911, -8910, -8909, -8908, -8907, -8906, -8905, -8902, -8901, -8900, -8897, -8892, -8884, -8881, -8879, -8878, -8858, -8855, -8849, -8848, -8840, -8838, -8837, -8836, -8835, -8834, -8833, -8832, -8831, -8830, -8829, -8828, -8827, -8826, -8825, -8824, -8823, -8822, -8821, -8820, -8819, -8818, -8817, -8816, -8815, -8814, -8813, -8812, -8811, -8810, -8809, -8808, -8807, -8806, -8805, -8804, -8802, -8801, -8800, -8799, -8798, -8797, -8796, -8795, -8794, -8793, -8792, -8791, -8790, -8789, -8788, -8787, -8786, -8785, -8784, -8783, -8779, -8778, -8777, -8776, 0, 0, -8775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8774, -8773, -8772, -8771, 0, 0, -8770, -8768, 0, 0, 0, 0, 0, 0, 0, 0, -8766, -8765, -8764, -8763, -8762, -8761, -8760, -8759, -8758, -8757, -8756, -8755, -8754, -8753, -8752, -8751, -8750, -8749, -8748, -8747, -8746, -8745, -8744, -8743, -8742, -8741, -8740, -8739, -8738, -8737, -8736, -8732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8731, -8730, -8729, -8727, -8726, -8724, -8723, -8720, 0, -8717, -8713, -8710, 0, 0, 0, 0, -8708, -8707, 0, -8706, -8705, -8702, -8701, -8700, -8699, -8697, -8696, -8694, -8693, -8692, -8691, -8689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8688, -8687, -8686, -8685, -8683, -8682, -8681, -8680, -8676, -8675, -8674, -8673, -8670, -8669, -8668, -8667, -8666, -8665, -8663, -8662, -8661, -8660, -8659, -8658, -8657, -8654, -8653, -8650, -8649, -8647, -8646, -8645, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -8644, -8640, -8639, 0, -8638, -8637, -8633, -8631, -8630, -8629, -8627, -8626, -8624, -8623, -8622, -8621, -8620, -8619, -8618, -8599, -8598, -8597, -8596, -8593, -8592, -8591, -8590, -8588, -8587, -8585, -8584, -8583, -8582, -8581, -8579, -8578, -8577, -8576, -8575, -8574, -8572, -8571, 280, 280, 264, 264, 8192, 8192, 8192, 8192, 276, 303, 309, 8192, 271, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 257, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -8569, -8568, 8192, -8567, -8566, -8565, -8564, -8563, -8562, -8561, -8560, -8559, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -8558, -8557, 8192, -8556, -8555, -8554, -8553, -8552, -8551, -8550, -8549, -8548, -8547, -8546, -8544, 8192, 8192, -8543, -8542, -8541, -8540, -8539, -8538, -8537, -8536, -8535, -8534, -8532, -8530, -8526, -8525, -8524, -8523, -8522, -8521, -8520, -8519, -8518, -8517, -8516, -8515, -8513, -8512, -8511, -8510, -8509, -8508, -8507, -8506, -8505, -8504, 8192, 8192, 8193, 8196, 8192, 8192, 8192, 8200, 8192, 8192, 8192, 8209, 8192, 8192, 8192, 8208, 8192, 8192, 8225, 8253, 8192, 8192, 8192, 8192, 8192, 8192, 8247, 8256, 8192, 8192, 8192, 8256, -8503, -8502, -8501, -8500, -8499, -8498, -8495, -8493, -8492, -8491, -8490, -8489, -8488, -8487, -8486, -8485, 8192, 8192, 8192, -8484, 8192, 8192, 8192, 8192, -8483, 8192, 8192, 8192, -8481, -8480, -8479, -8477, 8192, 8192, 8192, -8475, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 4, 4, 8192, 8192, -8474, -8472, 8192, 8194, 8192, 8197, -8469, -8468, 8192, -8466, 6296, 4, 4, 4, 4, 1, 4, 4, 1, 4, 16, 16, 4, 1, 6404, 6404, -8465, 8192, 8192, 8192, 8192, -8464, 8192, 8192, 8192, 8192, 8192, -8463, -8462, 8192, -8461, 8192, -8460, 8192, 8192, 8192, -8459, -8458, -8457, -8456, 8192, 8192, -8455, -8437, 8192, -8422, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -8418, 8192, 8192, 8192, 8192, 8192, -8415, -8407, -8405, -8404, -8403, -8396, -8395, -8394, -8392, -8391, -8373, -8366, 8192, -8362, 8192, 8192, -1970, -1944, -1595, -1588, -1580, -1567, -1566, -1564, -1563, -1561, -1559, -1555, -1550, 8192, -1548, -1547, -1546, -1545, 8192, 8192, 8192, 8192, 8192, 8192, -1536, -1535, 8192, 8192, -1534, -1533, -1532, -1531, -1530, -1529, 8192, 8192, 8192, 8192, -1528, -1527, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -1526, 8192, 8192, 8192, -1525, -1524, -1523, -1522, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -1521, -1520, 8192, 8192, -1519, -1518, 8192, -1517, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -1516, -1515, -1514, 8192, -1513, -1512, -1511, -1510, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -1509, -1508, -1507, -1506, -1505, -1504, -1503, -1502, -1501, -1500, -1499, -1498, -1497, -1496, -1495, -1494, 8192, 8192, -1493, -1492, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -1491, -1490, 8192, 8192, 8192, 8192, -1489, -1488, 8192, 8192, 8192, 8192, 8192, 8192, 8192, 8192, -1487, -1486, -1485, -1484, -1483, -1482, -1481, -1480, -1479, -1478, -1477, -1476, -1475, -1474, -1473, -1472, -1471, -1470, 6146, 6148, 6148, 6148, 6155, 6247, 6248, 6248, 6156, 6160, 6161, 6163, 6240, 6240, 1, 1, 4, 4, 8, 8, 6152, 2, 6, 1, 1, 4, 6148, 6246, 4, 20, 1, 1, 4, 4, 8, 8, 2, 2, 10, 10, 32, 42, 24, 42, 4, 41, 6212, 6212, 6189, 6190, 6200, 6223, 6154, 6198, 6285, 6344, 6224, 6336, 6338, 6341, 6355, 6356, 6369, 6370, 6185, 6296, 6296, 6299, 6426, 6426, 6430, 6430, 6586, 6625, 6636, 6638, 6464, 6641, 6656, 6656, 6447, 6657, 6662, 6662, 6664, 6664, 6668, 6668, 6657, 6663, 6673, 6675, 6660, 6673, 6680, 6680, 6663, 6666, 6664, 6668, 6656, 6656, 6664, 6666, 6657, 6676, 6678, 6682, 6660, 6696, 1, 1, 4, 4, 6656, 6656, 2, 2, 6671, 6683, 6664, 6687, 6712, 6712, 6723, 6724, 1, 1, 4, 4, 8, 8, 2, 2, 8192, 6, 4, 1, 7, 34, 20, 28, -1469, 6656, 6661, 6665, 6690, 6690, 6656, -1468, 6656, 6656, -1467, 6656, 6663, 6665, 6672, 6672, 6672, -1466, 6683, 6684, 6720, 6727, 6721, 6722, 6720, 6724, 6721, -1465, 6720, 6727, -1464, 6720, 1, 1, 20, 20, 20, 20, 1, 1, 6656, 6656, 6656, 1, 6656, 6658, 6664, 6664, 4, 4, 9, 10, 8192, 6, 4, 8, 20, 32, 2, 22, 20, 40, 4, 1, 6657, 6658, 6656, 6656, 6657, 6664, -1463, 6663, -1462, 6681, 6691, 6697, -1461, -1460, 6694, 6717, 6820, 6820, 6667, 6690, 6712, 6804, 6820, 6820, 6848, 6848, 6849, 6850, 6848, 6854, 6850, 6850, 7, 9, 6848, 6, 6848, 6848, 2, 7, 6912, 10, 3, 6916, 10, 15, 6912, 4, 4, 6920, 6912, 6916, 13, 36, 1, 6915, 6919, 1, 1, 1, 1, 1, 6915, 6930, 8193, 2, 44, 60, 52, 54, 48, 64, 6912, 6912, 43, 64, 6912, 6912, 6912, 6912, 64, 6913, 6912, 6912, 6912, 6912, 6928, 9, 6931, 9, 7, 8193, 8, 10, 6941, 6969, 6973, -1459, -1458, 24, -1457, -1456, -1455, 6915, 6920, -1454, 6912, 6914, 6918, -1453, 6913, 6975, -1452, 7168, 6984, 6992, 7002, 7169, 7168, 7168, 7168, 7168, 6993, 7020, 7169, 7170, 7168, 7181, 7184, 4, 8, 10, 7187, 7193, 6945, 6981, 7002, -1451, 7170, 7172, 7173, 7181, 7187, 7189, 7202, 7202, 7182, 7184, 8, 8, 7168, 7168, 6, 6, 11, 21, 4, 4, 28, 39, 2, 7172, 7170, 6, 4, 14, 5, 10, 4, 26, 26, 35, 37, 38, 32, 41, 7040, 7072, 7184, 7184, 6, 11, 1, 7184, 1, 1, 1, 10, 6, 7184, 7188, 32, 1, 1, 7170, 26, 6, 58, 2, 7169, 7168, 7168, 9, 12, 7168, 7170, 2, 7182, 14, 63, 7, 70, 9, 84, 6, 13, 12, 68, 7168, 10, 72, 74, 76, 93, 7168, 7168, 7177, 7180, 7180, 7180, 7176, 7181, 7184, 7184, 7185, 7186, 11, 7185, 33, 60, 7187, 7194, 7169, 7170, 7168, 7172, 7168, 7173, -1450, 7177, 7184, 7184, 7184, 7184, 7175, 7184, 4, 1, 4, 7191, 12, 14, 1, 4, 7168, 7168, 7172, 7176, 7176, 7176, 7170, 7170, 7179, 7183, 28, 31, 37, 52, 7169, 7170, 21, 52, 36, 41, 170, 170, 54, 175, 214, 7169, 308, 393, 395, 426, 44, 117, 51, 96, 122, 174, 12, 173, 191, 222, 6668, 6668, 6147, 6150, 6, 14, 6, 6207, 14, 14, 34, 34, 44, 6174, 63, 66, 22, 65, 6272, 68, 85, 86, 64, 6151, 6240, 6276, 66, 74, -1449, 6273, 85, 6273, 70, 70, 70, 70, 6, 77, 76, 78, 125, 137, 6272, 119, 107, 121, 159, 180, 6272, 6272, 6274, 5, 6273, 6284, 6280, 6283, 6288, 6288, 6289, 6290, -1448, 6289, 6288, 6288, 6298, 6298, 6272, 6272, 6272, 6276, 6284, 6284, 6284, 6284, 6286, 6288, 6290, 6293, 6289, 6296, 6297, 6299, -1447, 6311, 6314, 6314, 6280, 6310, 6308, 6328, 129, 6287, 6322, 6340, 6338, 6342, -1446, -1445, 133, 143, 152, 152, 6288, 6288, 150, 160, 170, 172, 187, 188, 244, 254, 193, 6288, 6352, 196, 202, 206, 263, 301, 193, 257, 295, 320, 42, 267, 313, 325, 6287, 6323, 6144, 6144, 20, 58, 321, 6144, -1444, 61, 28, 327, 59, 6144, 6149, 6151, 234, 331, 6162, 326, 6161, 232, 335, 6148, 6160, 6163, 390, 390, 6201, 6400, 6164, 6204, 394, 419, 395, 396, 454, 454, 358, 373, 8192, 461, 6191, 488, 380, 392, 389, 714, 6156, 6232, 6401, 6402, 6400, 6410, 6216, 6216, 388, 660, 392, 6231, 6270, 369, 6265, 405, 6400, 6405, 6412, 6417, 6416, 6416, 6402, 6418, 6416, 6424, 6416, 6416, 6416, 6432, 6432, 6432, 425, 437, 6449, 6450, 6448, 6454, 6448, 647, 6449, 6456, 6448, 6448, 6448, 6461, -1443, 6464, 6464, 6464, 6464, 6464, 436, 436, 6410, 6466, 640, 647, 690, 989, 708, 1026, 1024, 1032, 1, 2, 4, 13, 6480, 13, 8280, 8280, 8269, 8273, -1442, -1441, 8344, 8344, -1440, 8302, -1439, -1438, -1437, -1436, 8264, 8264, 105, 6144, 127, 196, 100, 192, 226, 260, 309, 321, 264, 6144, 8260, 8265, 8265, 41, 8264, 8264, 8256, 8256, 8280, 8280, -1435, -1434, 8281, -1433, 8256, 8256, 8296, 8330, 8257, 8337, 8337, 8348, 8355, 8362, 8360, 8365, 8363, 8384, 8384, 8384, -1432, -1431, -1430, -1429, -1428, -1427, -1426, -1425, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 6144, 292, 326, 38, 358, 6144, 358, 8351, 8355, -1424, -1423, 0, -1422, -1421, -1420, -1419, -1418, -1417, -1416, -1415, -1414, 0, -1413, 6144, 6144, 6144, 6144, 6144, 6146, 6152, 6152, -1412, -1411, -1410, -1409, -1408, -1407, 8332, 8332, 6144, 6144, 373, 447, 8240, 394, 287, 345, 396, 453, 547, 555, 6144, 360, 424, 580, 29, 82, 281, 299, 45, 336, 425, 576, 310, 583, 6144, 6144, 6144, 6144, 577, 590, 600, 6144, 276, 606, 285, 637, 604, 625, 6146, 699, 446, 1078, 316, 1077, 277, 1076, 1076, 1079, 6144, 1073, 1075, 1280, 6144, 6146, 1300, 6153, 378, 1058, 1294, 1294, 1304, 1304, 1350, 1404, 1290, 1290, 1344, 1504, 1460, 1460, 1408, 1408, 6169, 6175, 6163, 6179, 6181, 1332, 1358, 1358, 1421, 1429, 270, 302, 1433, 1456, 1408, 1408, 6150, 6154, 6210, 6213, 6216, 6216, 6210, 6210, 6213, 6230, 6208, 6208, 6226, 1417, 6272, 6272, 1418, 1423, 1419, 1444, 2577, 2602, 1453, 2565, 1408, 1416, 6260, 1345, 2564, 2568, 2579, 2605, 6248, 6258, 1525, 2563, 2746, 2749, 6274, 6274, 2617, 2621, 2666, 2736, 2750, 2754, 2697, 2727, 328, 1025, 6273, 485, 1034, 1034, 104, 251, 239, 277, 266, 292, 289, 302, 309, 350, 6218, 6255, -1406, 8200, 8205, 8207, 8221, -1405, 8219, 8224, 8211, 8224, 8224, 8227, -1404, -1403, -1402, -1401, 8196, 8201, 8200, 8200, 8200, -1400, -1399, -1398, 8194, 8194, -1397, -1396, -1395, 0, -1394, -1393, -1392, -1391, -1390, -1389, 8192, 8195, 8200, 8200, -1388, 8200, 8201, 8207, 8196, 8199, -1387, -1386, 0, -1385, -1384, -1383, 0, 0, 0, 0, 0, 0, 0, -1382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1381, -1380, 0, 0, 0, 0, 0, 0, 0, -1379, 0, 0, 0, -1378, -1377, 0, 0, 8192, 8192, 8193, 8196, 0, 0, -1376, -1375, -1374, -1373, -1372, -1371, -1370, -1369, -1368, -1367, 0, -1366, -1365, -1364, -1363, -1362, -1361, -1360, -1359, -1358, -1357, -1356, -1355, -1354, 0, 0, 0, 0, -1353, -1352, -1351, 0, -1350, -1349, -1348, -1347, -1346, -1345, 0, -1344, -1343, -1342, -1341, -1340, -1339, -1338, 8192, 8192, -1337, -1336, 8200, 8200, -1335, -1334, 8202, -1333, 8208, 8230, 8228, 8238, 8244, 8246, 8244, 8256, -1332, -1331, -1330, 8256, 8256, 8256, 8257, 8261, -1329, -1328, -1327, -1326, -1325, -1324, -1323, -1322, -1321, 8192, 8202, 8202, -1320, -1319, -1318, -1317, -1316, -1315, -1314, -1313, -1312, -1311, -1310, -1309, -1308, -1307, -1306, -1305, -1304, -1303, -1302, -1301, -1300, -1299, -1157, -1042, -1041, -1040, -1039, -1038, 8198, -1037, 8197, 8216, -1036, 8212, 8216, 8219, -1035, -1030, 8192, 8195, 8241, 8242, -1029, -1028, 8245, 8321, 8330, 8333, 8336, 8336, 8336, 8336, -1027, -1026, -1025, -1022, -1021, -1020, -1019, -1018, -1017, -1016, -1015, -1012, -1011, -1008, -1007, -1006, -1005, -1004, 0, 0, 0, 0, -1003, -1002, 8192, 8192, 8192, 8192, -1001, -1000, -999, 8192, -998, -997, -995, -994, -993, -992, -991, -982, -981, -978, -977, -975, -974, -973, -972, -971, -970, -969, -968, -967, -966, -965, -964, -963, -960, -959, -954, -953, -950, -949, -948, -945, -944, -942, -941, -940, -939, -938, -935, -934, -933, -932, -931, -930, -929, -928, -927, -926, -925, -924, -923, -922, -921, -920, -919, -918, -917, -916, -915, -864, -840, -815, -793, -787, -269, -159, -153, -148, -142, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; const size_t NU_DUCET_G_SIZE = sizeof(NU_DUCET_G) / sizeof(*NU_DUCET_G); /* codepoints */ const uint32_t NU_DUCET_VALUES_C[] = { 0x000104, 0x000105, 0x000103, 0x000106, 0x000100, 0x000101, 0x000102, 0x000107, 0x000155, 0x00A6CC, 0x00010B, 0x000153, 0x01330B, 0x000109, 0x00010A, 0x013306, 0x000112, 0x000113, 0x013307, 0x000116, 0x00011C, 0x013305, 0x000130, 0x000111, 0x00011E, 0x00011D, 0x000110, 0x00011F, 0x013314, 0x013315, 0x013316, 0x01330A, 0x013312, 0x013311, 0x013317, 0x013313, 0x013310, 0x01331D, 0x01331E, 0x01331B, 0x013318, 0x013319, 0x01331F, 0x01331A, 0x01326B, 0x01332B, 0x013304, 0x000136, 0x01332A, 0x00010F, 0x000133, 0x01326A, 0x000114, 0x000115, 0x01331C, 0x000132, 0x000118, 0x000119, 0x00011A, 0x00011B, 0x000137, 0x000131, 0x000108, 0x013269, 0x001840, 0x00010D, 0x001842, 0x00010E, 0x001844, 0x001845, 0x001846, 0x001847, 0x001848, 0x013303, 0x00184A, 0x00184B, 0x00184C, 0x00184D, 0x00184E, 0x00184F, 0x013308, 0x013265, 0x013266, 0x01330D, 0x001854, 0x00010C, 0x01330E, 0x01330F, 0x000156, 0x013301, 0x013309, 0x013302, 0x00185C, 0x000157, 0x01330C, 0x013264, 0x001860, 0x001861, 0x001862, 0x001863, 0x000123, 0x013300, 0x000138, 0x001867, 0x001868, 0x001869, 0x00186A, 0x00186B, 0x00186C, 0x00186D, 0x00186E, 0x00186F, 0x001870, 0x001871, 0x000135, 0x000139, 0x001874, 0x001875, 0x001876, 0x001877, 0x000134, 0x00013D, 0x00013E, 0x00013F, 0x013337, 0x013267, 0x00013A, 0x00013B, 0x013329, 0x013331, 0x013332, 0x013333, 0x00015C, 0x00015D, 0x00015E, 0x000143, 0x00012C, 0x00012D, 0x00015F, 0x013327, 0x000144, 0x00A6CD, 0x01334B, 0x013356, 0x013320, 0x013321, 0x013353, 0x00A6CE, 0x013350, 0x013351, 0x013352, 0x000142, 0x00A6CF, 0x013345, 0x013346, 0x013347, 0x013358, 0x01334A, 0x00A6C8, 0x013357, 0x01332E, 0x000121, 0x000122, 0x000120, 0x000124, 0x000125, 0x000126, 0x000127, 0x00012E, 0x00012F, 0x00012A, 0x00012B, 0x01326C, 0x000176, 0x013324, 0x000167, 0x013322, 0x013323, 0x013326, 0x013325, 0x01333C, 0x01333D, 0x01332F, 0x013328, 0x00013C, 0x000171, 0x000172, 0x000173, 0x000128, 0x000129, 0x000177, 0x01337B, 0x013330, 0x013335, 0x013336, 0x013334, 0x013338, 0x013339, 0x01333A, 0x01333B, 0x0001E8, 0x0001E9, 0x01333E, 0x01333F, 0x000146, 0x000145, 0x013268, 0x000147, 0x01326E, 0x01326F, 0x000152, 0x000151, 0x0133E8, 0x0133E9, 0x000150, 0x000154, 0x0133EC, 0x0133ED, 0x0133EE, 0x0133EF, 0x01335A, 0x013359, 0x00015B, 0x01335B, 0x00015A, 0x01326D, 0x0001E2, 0x0001E1, 0x0001E0, 0x0001ED, 0x0001EC, 0x0001E6, 0x0133FC, 0x0133FD, 0x0001EE, 0x0001EF, 0x0133FE, 0x0001E5, 0x0001E4, 0x0133E5, 0x0133E6, 0x0133E7, 0x0133E2, 0x0133E3, 0x0001EA, 0x0133E1, 0x0133E0, 0x0133FF, 0x0001FC, 0x0001FD, 0x0133E4, 0x0133EA, 0x0133F4, 0x0133F9, 0x0133F8, 0x0001EB, 0x0133F0, 0x0133F1, 0x0133F6, 0x0133F5, 0x0001F4, 0x0001F5, 0x0001F6, 0x0133FA, 0x0001CC, 0x0001CD, 0x0001CE, 0x0001CF, 0x00A6C9, 0x01D363, 0x0001E3, 0x0133C7, 0x0133C0, 0x0133C1, 0x0133C2, 0x0133C3, 0x0133C4, 0x0133C5, 0x0133C6, 0x0133CF, 0x0001DC, 0x0001DD, 0x0001FE, 0x0001FF, 0x0133CC, 0x0133CD, 0x0133CB, 0x0133CE, 0x0133D0, 0x0133D1, 0x0133F2, 0x0133F3, 0x0001F8, 0x0001F9, 0x0133F7, 0x0001FA, 0x0001AC, 0x0001AD, 0x0001AE, 0x0001AF, 0x0133A6, 0x0133A5, 0x0001F7, 0x0133A9, 0x0133A0, 0x0133A1, 0x0133A2, 0x0133A3, 0x0133AC, 0x0133AD, 0x00FEAD, 0x0001F3, 0x0001BC, 0x0133A4, 0x0133AE, 0x0133AF, 0x0001F0, 0x0001F1, 0x0001F2, 0x0001FB, 0x0133B0, 0x01D5DE, 0x000117, 0x0001D4, 0x0133C8, 0x0133C9, 0x0133CA, 0x01D5D9, 0x01D5D8, 0x00FEC0, 0x00FEC1, 0x0133A8, 0x00FEC3, 0x01D5DA, 0x00FEC5, 0x00FEC6, 0x00FEC7, 0x00FEC8, 0x00FEC9, 0x00FECA, 0x0001D2, 0x0001D1, 0x00FECD, 0x00FECE, 0x00FECF, 0x0001D0, 0x0001DA, 0x0001DB, 0x0001D8, 0x0001D9, 0x00FED5, 0x0001D5, 0x0001DE, 0x00FED8, 0x00FED9, 0x0001DF, 0x00FEDB, 0x00FEDC, 0x00FEDD, 0x00FEDE, 0x00FEDF, 0x00FEE0, 0x00FEE1, 0x00FEE2, 0x00FEE3, 0x0133DC, 0x00FEE5, 0x00FEE6, 0x00FEE7, 0x0001C4, 0x0001E7, 0x01D5DB, 0x0133DD, 0x0001C8, 0x0133DE, 0x0133DF, 0x0133D2, 0x0133D8, 0x0133FB, 0x0133D3, 0x0001C9, 0x00FEF4, 0x0001CA, 0x0001CB, 0x000183, 0x00FEF8, 0x00FEF9, 0x00FEFA, 0x00FEFB, 0x00FEFC, 0x000182, 0x000181, 0x000180, 0x000185, 0x000184, 0x00018A, 0x000186, 0x000187, 0x000189, 0x00018B, 0x000191, 0x000190, 0x000193, 0x000192, 0x000195, 0x000194, 0x000197, 0x000196, 0x000199, 0x000198, 0x00019B, 0x00019A, 0x01339A, 0x01339B, 0x013396, 0x013395, 0x013397, 0x013399, 0x013398, 0x0133A7, 0x00018E, 0x00018D, 0x01339D, 0x01339F, 0x013394, 0x000188, 0x00018F, 0x01339E, 0x0001A2, 0x0001A3, 0x0001A6, 0x0001A7, 0x0001BD, 0x01D5DF, 0x013383, 0x0001BE, 0x013382, 0x013381, 0x00018C, 0x0001BF, 0x00019C, 0x00019D, 0x00019E, 0x00019F, 0x0133AA, 0x0133AB, 0x0133BA, 0x0133BB, 0x013390, 0x013391, 0x013392, 0x013393, 0x0133B6, 0x0133B7, 0x013380, 0x0133B3, 0x0133B1, 0x01339C, 0x0133EB, 0x0133B2, 0x0001D6, 0x0001D7, 0x0001C2, 0x0001C3, 0x013384, 0x013385, 0x013386, 0x013387, 0x013388, 0x013389, 0x01338A, 0x01338B, 0x01338C, 0x01338D, 0x01338E, 0x01338F, 0x01D5D4, 0x01D5D5, 0x01D5D6, 0x01D5D7, 0x0001A0, 0x0001A1, 0x0001C1, 0x0001D3, 0x0001A4, 0x0001A5, 0x0133D6, 0x0133D7, 0x0001A8, 0x0001A9, 0x0001AA, 0x0001AB, 0x0001C6, 0x0001C5, 0x0001C0, 0x0001C7, 0x0001B0, 0x0001B1, 0x0001B2, 0x0001B3, 0x0001B4, 0x0001B5, 0x0001B6, 0x0001B7, 0x0001B8, 0x0001B9, 0x0001BA, 0x0001BB, 0x0133DA, 0x0133D9, 0x01D5C3, 0x0133DB, 0x0133B4, 0x0133B5, 0x0133D5, 0x000207, 0x0133B8, 0x0133B9, 0x0133D4, 0x000203, 0x0133BC, 0x0133BD, 0x0133BE, 0x0133BF, 0x000200, 0x000201, 0x000202, 0x00020B, 0x00020E, 0x00020D, 0x00020F, 0x01340B, 0x01341C, 0x01341D, 0x01341E, 0x013407, 0x00021C, 0x00021D, 0x00021E, 0x00021F, 0x000208, 0x000209, 0x00020A, 0x013417, 0x013410, 0x013411, 0x013412, 0x013413, 0x013414, 0x013415, 0x013416, 0x01341F, 0x013402, 0x013401, 0x013403, 0x01341B, 0x000204, 0x000205, 0x000206, 0x01342B, 0x000030, 0x000031, 0x000032, 0x000033, 0x000034, 0x000035, 0x000036, 0x000037, 0x000038, 0x000039, 0x01D5A5, 0x000237, 0x013418, 0x013419, 0x01341A, 0x000233, 0x000232, 0x000041, 0x000042, 0x000043, 0x000044, 0x000045, 0x000046, 0x000047, 0x000048, 0x000049, 0x00004A, 0x00004B, 0x00004C, 0x00004D, 0x00004E, 0x00004F, 0x000050, 0x000051, 0x000052, 0x000053, 0x000054, 0x000055, 0x000056, 0x000057, 0x000058, 0x000059, 0x00005A, 0x01D5D1, 0x01D5D2, 0x01D5D0, 0x01D5AD, 0x000257, 0x01D5AC, 0x000061, 0x000062, 0x000063, 0x000064, 0x000065, 0x000066, 0x000067, 0x000068, 0x000069, 0x00006A, 0x00006B, 0x00006C, 0x00006D, 0x00006E, 0x00006F, 0x000070, 0x000071, 0x000072, 0x000073, 0x000074, 0x000075, 0x000076, 0x000077, 0x000078, 0x000079, 0x00007A, 0x00020C, 0x01D5AA, 0x01D5A9, 0x01D5A4, 0x01D5A8, 0x013406, 0x00022C, 0x000251, 0x013400, 0x000255, 0x00022D, 0x000256, 0x000254, 0x000250, 0x00025A, 0x00022E, 0x00022F, 0x01D5AE, 0x000259, 0x01D5AF, 0x013426, 0x013404, 0x013405, 0x013422, 0x013423, 0x013409, 0x013421, 0x01340A, 0x013408, 0x01340E, 0x013420, 0x01D599, 0x01340F, 0x01D59A, 0x01D598, 0x01D5A2, 0x01D589, 0x01D5A3, 0x01D587, 0x01D5A6, 0x01D593, 0x01340C, 0x01340D, 0x01D590, 0x01D591, 0x01D592, 0x01D59B, 0x0000AA, 0x01D5A1, 0x000238, 0x000239, 0x01D597, 0x013427, 0x000230, 0x000231, 0x0000B2, 0x0000B3, 0x000235, 0x0000B5, 0x000236, 0x000234, 0x00023A, 0x0000B9, 0x0000BA, 0x00023B, 0x0000BC, 0x0000BD, 0x0000BE, 0x01D5A7, 0x0000C0, 0x0000C1, 0x0000C2, 0x0000C3, 0x0000C4, 0x0000C5, 0x0000C6, 0x0000C7, 0x0000C8, 0x0000C9, 0x0000CA, 0x0000CB, 0x0000CC, 0x0000CD, 0x0000CE, 0x0000CF, 0x0000D0, 0x0000D1, 0x0000D2, 0x0000D3, 0x0000D4, 0x0000D5, 0x0000D6, 0x000253, 0x0000D8, 0x0000D9, 0x0000DA, 0x0000DB, 0x0000DC, 0x0000DD, 0x0000DE, 0x0000DF, 0x0000E0, 0x0000E1, 0x0000E2, 0x0000E3, 0x0000E4, 0x0000E5, 0x0000E6, 0x0000E7, 0x0000E8, 0x0000E9, 0x0000EA, 0x0000EB, 0x0000EC, 0x0000ED, 0x0000EE, 0x0000EF, 0x0000F0, 0x0000F1, 0x0000F2, 0x0000F3, 0x0000F4, 0x0000F5, 0x0000F6, 0x000252, 0x0000F8, 0x0000F9, 0x0000FA, 0x0000FB, 0x0000FC, 0x0000FD, 0x0000FE, 0x0000FF, 0x01D588, 0x01D5A0, 0x013425, 0x01D596, 0x013429, 0x01342D, 0x01342A, 0x013428, 0x013424, 0x01342E, 0x01D5BC, 0x01D5BD, 0x01D5D3, 0x01D5AB, 0x01D594, 0x01D595, 0x01D59E, 0x01D59F, 0x00A6CA, 0x01D622, 0x01D654, 0x01D66C, 0x01D621, 0x01D605, 0x00A6CB, 0x01D60E, 0x01D708, 0x01D609, 0x01D608, 0x01D659, 0x01D74C, 0x01D74D, 0x01D74E, 0x000399, 0x01D655, 0x01D653, 0x01D612, 0x01D613, 0x01D656, 0x01D657, 0x01D616, 0x01D652, 0x01D650, 0x01D651, 0x01D65A, 0x01D65B, 0x00A6C4, 0x01D61F, 0x00039A, 0x00039B, 0x01D722, 0x01D721, 0x01D723, 0x01D63C, 0x01D63D, 0x01D64D, 0x01D62C, 0x01D66D, 0x01342C, 0x01D72C, 0x01D720, 0x01D62D, 0x000394, 0x01D72D, 0x000140, 0x000141, 0x01D623, 0x01D761, 0x01D772, 0x01D773, 0x01D776, 0x00A6C5, 0x000148, 0x000149, 0x00014A, 0x00014B, 0x00014C, 0x00014D, 0x00014E, 0x00014F, 0x01D64C, 0x01D64B, 0x01D750, 0x01D751, 0x000398, 0x01D752, 0x01D756, 0x01D755, 0x000158, 0x000159, 0x000258, 0x01D759, 0x01D75A, 0x01D75B, 0x01D754, 0x00A6C6, 0x000160, 0x000161, 0x000162, 0x000163, 0x000164, 0x000165, 0x000166, 0x01D757, 0x000168, 0x000169, 0x00016A, 0x00016B, 0x00016C, 0x00016D, 0x00016E, 0x00016F, 0x000170, 0x01D753, 0x01D46C, 0x01D46D, 0x000174, 0x000175, 0x01D56C, 0x01D565, 0x000178, 0x000179, 0x00017A, 0x00017B, 0x00017C, 0x00017D, 0x00017E, 0x00017F, 0x01D56A, 0x01D56F, 0x01D742, 0x01D741, 0x01D743, 0x000393, 0x01D745, 0x01D748, 0x01D740, 0x01D747, 0x01D758, 0x01D749, 0x01D74A, 0x01D74B, 0x01D744, 0x01D777, 0x01D75E, 0x01D75F, 0x00A6C7, 0x00A6C0, 0x00A6C1, 0x00A6C2, 0x00A6C3, 0x00A6DC, 0x00A6DD, 0x00A6DE, 0x00A6DF, 0x00A6D8, 0x00A6D9, 0x00A6DA, 0x00A6DB, 0x00A6D4, 0x00A6D5, 0x00A6D6, 0x00A6D7, 0x00A6D0, 0x00A6D1, 0x00A6D2, 0x00A6D3, 0x000390, 0x01D696, 0x00A6AC, 0x00A6AD, 0x00A6AE, 0x00A6AF, 0x00A6A8, 0x01D69C, 0x00A6A9, 0x00A6AA, 0x000391, 0x000392, 0x00A6AB, 0x00A6A4, 0x00A6A5, 0x01D6A4, 0x01D6A5, 0x00A6A6, 0x00A6A7, 0x01D6A8, 0x01D6A9, 0x01D6AA, 0x01D6AB, 0x00A6A0, 0x00A6A1, 0x01D6AE, 0x01D6AF, 0x00A6A2, 0x00A6A3, 0x00A6BC, 0x00A6BD, 0x00A6BE, 0x00A6BF, 0x00A6B8, 0x00A6B9, 0x00A6BA, 0x00A6BB, 0x00A6B4, 0x00A6B5, 0x00A6B6, 0x000395, 0x00A6B7, 0x00A6B0, 0x01D6C8, 0x01D6C9, 0x00A6B1, 0x00A6B2, 0x01D6C4, 0x01D6C5, 0x01D6C6, 0x01D6C7, 0x01D6CA, 0x000396, 0x000397, 0x01D6CB, 0x00A6B3, 0x00A68C, 0x00A68D, 0x00A68E, 0x00A68F, 0x01D6D1, 0x00A688, 0x00A689, 0x00A68B, 0x00A684, 0x00A685, 0x00A682, 0x00A683, 0x00A698, 0x00A699, 0x00A69A, 0x00A69B, 0x00A694, 0x01D65E, 0x01D65F, 0x00A695, 0x00A696, 0x01D663, 0x01D6E3, 0x00A697, 0x00A690, 0x00A691, 0x00A692, 0x00A693, 0x00A76C, 0x00A76D, 0x00A76E, 0x01D6EC, 0x01D6ED, 0x00A76F, 0x00A768, 0x00A769, 0x00A762, 0x00A763, 0x00A778, 0x01D676, 0x01D677, 0x01D6F6, 0x01D6F7, 0x00A779, 0x00A775, 0x000C7A, 0x00A772, 0x00A773, 0x00A74C, 0x00A74D, 0x00A74E, 0x01D784, 0x01D508, 0x01D706, 0x01D783, 0x01D504, 0x01D505, 0x01D503, 0x01D507, 0x01D7CE, 0x01D788, 0x01D50A, 0x01D502, 0x01D7C8, 0x01D7CF, 0x01D509, 0x01D78E, 0x01D701, 0x01D703, 0x01D712, 0x01D713, 0x01D73B, 0x01D705, 0x01D716, 0x01D704, 0x01D718, 0x01D71E, 0x01D71F, 0x01D70F, 0x01D51C, 0x01D50D, 0x01D50E, 0x01D50F, 0x01D7A1, 0x01D7A3, 0x01D500, 0x01D501, 0x01D524, 0x01D525, 0x01D52E, 0x01D52F, 0x01D533, 0x01D529, 0x01D528, 0x01D52B, 0x01D7A0, 0x01D7A6, 0x01D532, 0x01D7A7, 0x01D709, 0x01D73D, 0x01D70E, 0x01D7E3, 0x01D7A4, 0x01D7A5, 0x01D7AC, 0x01D7AD, 0x01D7AA, 0x01D7A8, 0x01D7AB, 0x01D7BB, 0x01D7BC, 0x01D7BD, 0x01D7AE, 0x01D7AF, 0x01D541, 0x01D546, 0x01D542, 0x01D543, 0x01D7DD, 0x01D7CA, 0x01D7DE, 0x01D7DC, 0x01D540, 0x01D571, 0x01D7DA, 0x01D7D9, 0x01D4EC, 0x01D7D8, 0x01D7DF, 0x01D7C7, 0x01D572, 0x01D7D1, 0x01D7D2, 0x01D7D3, 0x01D7D0, 0x01D7DB, 0x01D72F, 0x01D729, 0x01D7D4, 0x01D7D5, 0x01D7D6, 0x01D7D7, 0x01D55D, 0x01D544, 0x01D55C, 0x01D7EC, 0x01D7C6, 0x01D7C5, 0x01D7ED, 0x01D54A, 0x01D73C, 0x01D7C2, 0x01D7F6, 0x01D7F7, 0x01D54B, 0x01D54F, 0x01D7C0, 0x01D7C1, 0x01D7FC, 0x01D4ED, 0x01D726, 0x01D727, 0x01D534, 0x01D531, 0x00A74F, 0x01D54E, 0x01D536, 0x01D535, 0x01D537, 0x01D530, 0x01D573, 0x01D539, 0x01D53B, 0x01D7C9, 0x01D7C4, 0x01D72A, 0x01D53E, 0x01D538, 0x01D4BD, 0x01D786, 0x01D4D2, 0x01D4C6, 0x01D484, 0x01D485, 0x01D798, 0x01D4BE, 0x01D488, 0x01D489, 0x01D4DB, 0x01D4D1, 0x01D49E, 0x01D48C, 0x01D48E, 0x01D48F, 0x01D793, 0x01D4AE, 0x01D495, 0x01D493, 0x01D792, 0x01D496, 0x01D492, 0x00FA20, 0x00FA21, 0x00FA22, 0x00FA23, 0x01D4D3, 0x01D49F, 0x00FA26, 0x00FA27, 0x01D4C5, 0x01D560, 0x01D561, 0x01D4BF, 0x01D563, 0x00FA25, 0x01D4A6, 0x01D4B5, 0x01D4B7, 0x01D4AA, 0x01D796, 0x01D5EE, 0x01D4AB, 0x01D5EF, 0x01D4A5, 0x01D4AF, 0x01D4A9, 0x01D4B0, 0x01D4B1, 0x01D4B2, 0x01D4B3, 0x01D574, 0x01D575, 0x01D4DA, 0x00FA4D, 0x01D57A, 0x01D579, 0x01D57B, 0x00FA44, 0x01D57E, 0x01D57F, 0x01D578, 0x00FA48, 0x00FA49, 0x00FA4A, 0x00FA4B, 0x01D5C2, 0x00FA4F, 0x00FA4E, 0x01D5C0, 0x01D5C1, 0x01D5C4, 0x01D5C5, 0x01D5CB, 0x01D5CF, 0x00FA55, 0x01D5CA, 0x01D5C6, 0x01D5C7, 0x01D5E8, 0x01D5E9, 0x01D576, 0x01D577, 0x01D5CC, 0x01D5CD, 0x01D5FE, 0x00FA62, 0x01D5C9, 0x00FA72, 0x00FA71, 0x01D5C8, 0x01D5DC, 0x01D5DD, 0x00FA61, 0x01D5CE, 0x01D5E0, 0x01D5E1, 0x01D5F8, 0x01D5EB, 0x01D570, 0x01D785, 0x01D4C7, 0x00FA78, 0x01D54C, 0x01D54D, 0x01D5E5, 0x00FA74, 0x00FA7D, 0x00FA7E, 0x01D5FA, 0x01D5F9, 0x00FA79, 0x00FA7A, 0x00FA7B, 0x00FA7F, 0x01D5F3, 0x01D5EA, 0x01D5F6, 0x01D5F7, 0x01D5F2, 0x01D5F1, 0x01D5FB, 0x01D5FF, 0x01D5F0, 0x01D5F5, 0x01D5F4, 0x01D5E4, 0x00A748, 0x00A749, 0x00A74A, 0x00A74B, 0x00A744, 0x00A745, 0x00A746, 0x00A747, 0x00A740, 0x00A741, 0x00A742, 0x00A743, 0x00A75C, 0x00A75D, 0x00A75E, 0x00A75F, 0x00A758, 0x00A759, 0x00A75A, 0x00A75B, 0x00A754, 0x00A755, 0x00A751, 0x00A752, 0x00A753, 0x00A72C, 0x00A72D, 0x00A72E, 0x00A72F, 0x00A728, 0x00A729, 0x00A727, 0x000C2A, 0x000C2B, 0x00A73A, 0x00A734, 0x00A735, 0x00A730, 0x00A731, 0x000C36, 0x000C37, 0x000C30, 0x000C31, 0x000C32, 0x000C33, 0x000C0C, 0x000C0E, 0x000C0F, 0x000C08, 0x000C09, 0x000C0A, 0x000C0B, 0x000C05, 0x000C06, 0x000C07, 0x000C1C, 0x000C1D, 0x000C1E, 0x000C1F, 0x000C18, 0x000C19, 0x000C1A, 0x000C1B, 0x000C14, 0x000C15, 0x000C16, 0x000C17, 0x000C10, 0x000C12, 0x000C13, 0x000CEC, 0x000CED, 0x000CEE, 0x000CEF, 0x000CE8, 0x000CE9, 0x000CEA, 0x000CEB, 0x00A7FA, 0x00A7FB, 0x00A7F7, 0x000CF1, 0x000CF2, 0x000CDE, 0x00A7AC, 0x00A7AD, 0x00A7AE, 0x00A7A8, 0x00A7A9, 0x00A7A7, 0x000CA6, 0x000CA7, 0x000CA0, 0x000CA1, 0x000CA2, 0x000CA3, 0x000CBD, 0x00A7B4, 0x00A7B5, 0x00A7B0, 0x00A7B1, 0x00A7B2, 0x000CB2, 0x000CB3, 0x000C8C, 0x00A78B, 0x00A782, 0x00A79F, 0x01D6F2, 0x01D6F3, 0x01D6CC, 0x01D6CD, 0x01D6CE, 0x01D6CF, 0x01D6C0, 0x01D6C2, 0x01D6C3, 0x01D6DC, 0x01D6DD, 0x01D6DE, 0x01D6DF, 0x01D6D8, 0x01D6D9, 0x01D6DA, 0x01D6D4, 0x01D6D5, 0x00A4D2, 0x00A4D3, 0x01D6A0, 0x01D6A1, 0x01D6A2, 0x01D6A3, 0x01D6BC, 0x01D6BD, 0x01D68E, 0x01D688, 0x01D689, 0x01D692, 0x01D693, 0x01D76C, 0x01D76D, 0x000D9D, 0x01D76A, 0x01D76B, 0x00A57B, 0x00A501, 0x00A5F8, 0x00A5F9, 0x00A5CF, 0x00A5D5, 0x00A5B5, 0x00A241, 0x00A2F0, 0x00A2D9, 0x00A2D4, 0x00A2D0, 0x00A2D3, 0x00A2AC, 0x00A2AD, 0x00A2AF, 0x00A2A8, 0x00A374, 0x00A375, 0x00A371, 0x00A373, 0x00A32B, 0x00A326, 0x00A338, 0x00A337, 0x00A332, 0x00A309, 0x00A398, 0x00A399, 0x00A39A, 0x00A39B, 0x00A394, 0x00A395, 0x00A396, 0x00A397, 0x00A390, 0x00A391, 0x00A392, 0x00A393, 0x00A06C, 0x00A06D, 0x00A06E, 0x00A06F, 0x00A068, 0x00A069, 0x00A062, 0x00A063, 0x00A078, 0x00A079, 0x00A04E, 0x00A04F, 0x00A04A, 0x00A04B, 0x00A044, 0x00A045, 0x00A046, 0x00A047, 0x00A040, 0x00A041, 0x00A042, 0x00A043, 0x00A05C, 0x00A05D, 0x00A05E, 0x00A05F, 0x00A058, 0x00A059, 0x00A052, 0x00A053, 0x00A02C, 0x00A02D, 0x00A02F, 0x00A028, 0x00A029, 0x00A03A, 0x00A034, 0x00A035, 0x00A030, 0x00A031, 0x00A01E, 0x00A01F, 0x00A018, 0x00A019, 0x00091F, 0x00A0E2, 0x00A0E3, 0x00A0F8, 0x00A0F9, 0x00A0FA, 0x00A0FB, 0x00A0F4, 0x00A0F5, 0x00A0F0, 0x00A0F1, 0x001600, 0x001605, 0x001608, 0x00160F, 0x001606, 0x001604, 0x00160D, 0x001607, 0x00A0C8, 0x00A0C9, 0x00A0CA, 0x00A0CB, 0x001E6C, 0x00A0C5, 0x001609, 0x00160A, 0x001630, 0x001631, 0x00A0C6, 0x00163B, 0x001636, 0x001634, 0x00A0C7, 0x001637, 0x00A0C0, 0x001635, 0x00A0C1, 0x00A0C2, 0x00160C, 0x00A0C3, 0x00A0DC, 0x00160E, 0x001E62, 0x001E61, 0x001632, 0x001633, 0x001E60, 0x001E6E, 0x001E63, 0x001E67, 0x001639, 0x001E69, 0x001E6A, 0x00A0DD, 0x001E68, 0x001E6D, 0x001638, 0x001E6F, 0x001610, 0x001E74, 0x001612, 0x00A0DE, 0x001614, 0x001E75, 0x001E76, 0x001616, 0x001E79, 0x00163A, 0x00A0DF, 0x001E7B, 0x001E7C, 0x001E7D, 0x001E7E, 0x001E7F, 0x001620, 0x001624, 0x001E42, 0x001E41, 0x001ECD, 0x001625, 0x001626, 0x001ECC, 0x001EC8, 0x001EC9, 0x001ECE, 0x001E40, 0x001628, 0x001629, 0x00162A, 0x001ECF, 0x001E4E, 0x001E45, 0x00162C, 0x001E53, 0x001E44, 0x00162E, 0x001E46, 0x001E57, 0x001E58, 0x001E48, 0x001E4A, 0x001E4B, 0x001E49, 0x00162F, 0x001E4D, 0x00162D, 0x001E77, 0x001E73, 0x000666, 0x000667, 0x001EF4, 0x001EF5, 0x001EF6, 0x001E71, 0x001EE8, 0x001EE9, 0x001EEA, 0x001E7A, 0x001E4C, 0x001E70, 0x001E78, 0x001EEF, 0x001623, 0x001621, 0x001622, 0x001627, 0x00163C, 0x00163D, 0x00163E, 0x001EF7, 0x001E72, 0x00163F, 0x001EFB, 0x001EF3, 0x001EF1, 0x001EF0, 0x00162B, 0x001EF2, 0x001EC1, 0x001660, 0x001EC7, 0x00166B, 0x001667, 0x001669, 0x001EC0, 0x001666, 0x001EC6, 0x00FCC8, 0x00FCCE, 0x00FCCA, 0x00164C, 0x00164D, 0x00FCC5, 0x00FCC6, 0x00FCC9, 0x001EC5, 0x00FCCB, 0x001ECB, 0x001664, 0x00167C, 0x00FCFD, 0x00FCE2, 0x001678, 0x00FCE0, 0x00FCF1, 0x001EC4, 0x00167E, 0x00FCFC, 0x00FCF7, 0x00166F, 0x001674, 0x00FCF9, 0x00FCCD, 0x001663, 0x00FCF8, 0x00FCF5, 0x001676, 0x00FCFF, 0x00FCCF, 0x001679, 0x00167A, 0x00FCF2, 0x00FCF3, 0x00167D, 0x00FCFB, 0x00FCF6, 0x001672, 0x00FCA8, 0x00FCA9, 0x00FCAA, 0x00FCAB, 0x00FCAC, 0x00FCAD, 0x00FCAE, 0x00FCAF, 0x001671, 0x001675, 0x001ECA, 0x001662, 0x00FCF4, 0x001670, 0x001677, 0x001640, 0x001641, 0x001642, 0x00167B, 0x001646, 0x001EDC, 0x00165E, 0x001643, 0x0016E8, 0x00165D, 0x00FCC4, 0x00FCD6, 0x0016E4, 0x0016E5, 0x0016EE, 0x0016EF, 0x001650, 0x001651, 0x001652, 0x00165F, 0x001654, 0x001655, 0x001656, 0x001657, 0x00FCD7, 0x00FCD4, 0x00165A, 0x00165B, 0x00FCD3, 0x001659, 0x001658, 0x00FCD2, 0x00FCD1, 0x0016E0, 0x00FCD9, 0x00FCDA, 0x00FCDB, 0x00FCD0, 0x00FCDF, 0x001647, 0x001644, 0x00FCC0, 0x00164A, 0x00164B, 0x00FCC3, 0x001645, 0x0016E6, 0x00164F, 0x001648, 0x001661, 0x00164E, 0x00FCFA, 0x001EC3, 0x001665, 0x001673, 0x00FCFE, 0x00167F, 0x001649, 0x00FCDD, 0x00FCC2, 0x00165C, 0x00FCCC, 0x00FCD5, 0x00FCDE, 0x00FCF0, 0x00FCD8, 0x00FCC1, 0x000D69, 0x00FCC7, 0x00FCDC, 0x00AB01, 0x00A430, 0x00AB02, 0x00AB03, 0x00A437, 0x00A432, 0x00AB06, 0x00A433, 0x00FC82, 0x00FC83, 0x00AB0A, 0x00AB0B, 0x00AB04, 0x00AB05, 0x00FC81, 0x00FC80, 0x00FC86, 0x00AB11, 0x00AB12, 0x00AB13, 0x00AB14, 0x00AB15, 0x00AB16, 0x00FC84, 0x00FC85, 0x00FC87, 0x00A438, 0x00FC98, 0x00FC99, 0x00FC9E, 0x00FC8B, 0x00FC9D, 0x00FC9F, 0x00AB26, 0x00AB22, 0x00AB23, 0x00AB20, 0x00FC8E, 0x00FCB2, 0x00FC8C, 0x00AB28, 0x00AB29, 0x00FCB1, 0x00FC88, 0x00FC89, 0x00FC8A, 0x00AB2E, 0x00FC8D, 0x00FC8F, 0x00AB3D, 0x00AB3C, 0x00FCB3, 0x00AB3E, 0x00AB35, 0x01D61C, 0x00AB3F, 0x00A40C, 0x00AB39, 0x01D60C, 0x00A40E, 0x00AB38, 0x01D606, 0x00A408, 0x01D607, 0x01D600, 0x01D604, 0x00AB43, 0x01D602, 0x01D60B, 0x00AB46, 0x00AB42, 0x00AB47, 0x00FCA1, 0x00FCA2, 0x00FCA3, 0x000D7C, 0x000D6B, 0x00AB4D, 0x00AB4E, 0x00AB4C, 0x00AB51, 0x000D6A, 0x00AB52, 0x00AB53, 0x00AB50, 0x00FCA0, 0x000D76, 0x00FCA6, 0x00AB58, 0x00AB59, 0x00AB5A, 0x00FCBD, 0x00FCB9, 0x000D60, 0x00FCA5, 0x00FCA7, 0x000D77, 0x00FCBE, 0x00FCBF, 0x00AB63, 0x00AB64, 0x00AB65, 0x00A46C, 0x00A46D, 0x000D7D, 0x00A468, 0x00FCB4, 0x000D74, 0x00FCBC, 0x00FCBA, 0x00FCBB, 0x00FCB8, 0x000D7E, 0x00AB71, 0x00AB73, 0x00AB70, 0x00AB77, 0x000D7F, 0x01D660, 0x01D661, 0x00AB74, 0x00FCB0, 0x00AB7A, 0x00AB7B, 0x00AB75, 0x00AB7C, 0x00AB7F, 0x00AB76, 0x00FCB5, 0x00FCB6, 0x00FCB7, 0x00069D, 0x00A094, 0x00A095, 0x000694, 0x000695, 0x000681, 0x01D67C, 0x00A192, 0x00A193, 0x00069A, 0x00069B, 0x00A18F, 0x00A19B, 0x00A19F, 0x00A0D8, 0x00A096, 0x00A092, 0x00A090, 0x00A091, 0x00A097, 0x00A093, 0x00A190, 0x00A191, 0x001F60, 0x00A09A, 0x001F6B, 0x001F62, 0x0017AC, 0x00A09B, 0x001F66, 0x001F67, 0x0017A8, 0x0017A9, 0x0017AA, 0x001F65, 0x000D6E, 0x0017AD, 0x0017AE, 0x0017AF, 0x0006B1, 0x00A0D9, 0x00A199, 0x00069C, 0x001F64, 0x001F6D, 0x000683, 0x001F6C, 0x001F68, 0x001F69, 0x001F6A, 0x00A19A, 0x001F7C, 0x001F7D, 0x001F6E, 0x001F6F, 0x001F78, 0x001F63, 0x001F61, 0x001668, 0x001F75, 0x00166C, 0x001F76, 0x001F74, 0x001F79, 0x00FD60, 0x00FD61, 0x000D6C, 0x00166A, 0x001F7A, 0x00FCE3, 0x001F7B, 0x00FD67, 0x000D6F, 0x00FD69, 0x00FCE1, 0x00FD6B, 0x00FCE5, 0x00FD6D, 0x00FD6F, 0x000D68, 0x001F70, 0x001F77, 0x000D66, 0x0017DC, 0x000D67, 0x00FD7D, 0x00FD7E, 0x0017E0, 0x0017E1, 0x0017E2, 0x0017E3, 0x000D6D, 0x0017E6, 0x00ABE0, 0x00ABE1, 0x00ABE2, 0x0017F9, 0x0017F8, 0x0017E9, 0x0017E4, 0x0017E5, 0x0017E8, 0x0017E7, 0x0017F0, 0x0017F1, 0x0017F2, 0x0017F3, 0x0017F6, 0x0017F5, 0x00ABF0, 0x0017F7, 0x00ABF2, 0x0017F4, 0x00ABF4, 0x00ABF5, 0x00ABF6, 0x00ABF7, 0x00ABF8, 0x00ABF9, 0x00FD7F, 0x00FD79, 0x000803, 0x000802, 0x000800, 0x000801, 0x000804, 0x000805, 0x00080F, 0x000808, 0x00ABC2, 0x00ABC3, 0x00080A, 0x000809, 0x000806, 0x000807, 0x00080C, 0x00ABCB, 0x000813, 0x000812, 0x000810, 0x000811, 0x000814, 0x000815, 0x00ABC8, 0x00080D, 0x000D54, 0x000D55, 0x01D60A, 0x01D64A, 0x00A42C, 0x00ABC9, 0x000D2A, 0x000D2B, 0x00A452, 0x00A453, 0x00ABDE, 0x00ABDD, 0x01D620, 0x00ABCC, 0x00ABF3, 0x000D3D, 0x00A43C, 0x00A43D, 0x00080E, 0x01D60F, 0x000D20, 0x000D21, 0x00A420, 0x00A421, 0x00ABCE, 0x00ABCD, 0x00ABCF, 0x00A43B, 0x00A43E, 0x00A43F, 0x000D38, 0x000D78, 0x01D630, 0x01D631, 0x00A436, 0x00A476, 0x000D26, 0x000D27, 0x000846, 0x000845, 0x000856, 0x000857, 0x000850, 0x000851, 0x000842, 0x000843, 0x000841, 0x00084D, 0x000840, 0x000849, 0x000844, 0x00084C, 0x01D632, 0x01D633, 0x01D634, 0x01D635, 0x000853, 0x000852, 0x000855, 0x000854, 0x00ABD9, 0x00ABD5, 0x000D24, 0x000858, 0x00ABD6, 0x00084F, 0x01D636, 0x00ABD7, 0x000848, 0x00084B, 0x00ABDA, 0x00ABDB, 0x000D56, 0x000D25, 0x00A422, 0x00ABD4, 0x00084E, 0x00ABDF, 0x00A56A, 0x000D29, 0x00084A, 0x00A423, 0x00A564, 0x00A427, 0x00A16C, 0x00A16D, 0x00A16E, 0x00A56B, 0x01D364, 0x01D365, 0x00ABD8, 0x01D367, 0x01D360, 0x01D361, 0x01D362, 0x01D366, 0x01D626, 0x01D627, 0x01D36B, 0x01D36F, 0x00A17C, 0x00A17D, 0x01D36A, 0x01D36E, 0x0008A8, 0x01D637, 0x0008AE, 0x0008AC, 0x01D370, 0x01D371, 0x01D77E, 0x0008A9, 0x01D368, 0x01D369, 0x01D778, 0x01D63B, 0x00ABAB, 0x00ABA5, 0x00A47F, 0x01D77F, 0x00ABA6, 0x000C92, 0x000D61, 0x00ABA7, 0x00A424, 0x00A425, 0x01D673, 0x00ABA4, 0x000D2E, 0x000D2F, 0x000C96, 0x000C97, 0x01D638, 0x01D639, 0x0008AA, 0x0008AB, 0x0008A3, 0x0008A2, 0x0008A0, 0x0008A1, 0x0008A4, 0x0008A5, 0x0008BC, 0x0008AD, 0x01D628, 0x000A6F, 0x000D2C, 0x000D2D, 0x0008A6, 0x0008A7, 0x00A42A, 0x00A42B, 0x0008B3, 0x0008B2, 0x0008B0, 0x0008B1, 0x0008B4, 0x0008AF, 0x0008B9, 0x0008BD, 0x01D625, 0x0008BA, 0x0008B8, 0x0008BB, 0x0008B6, 0x0008B7, 0x01D62E, 0x01D62F, 0x01D629, 0x01D624, 0x00ABBC, 0x00ABBD, 0x000D5F, 0x000D4E, 0x000D28, 0x00A449, 0x00A44F, 0x00A450, 0x00A426, 0x00A448, 0x000A5A, 0x000D5A, 0x01D63E, 0x01D63F, 0x00A455, 0x00A444, 0x000D70, 0x00ABD1, 0x000D5B, 0x01D645, 0x000D75, 0x00ABD3, 0x01D643, 0x000A69, 0x000D5C, 0x000D5D, 0x01D644, 0x00ABD2, 0x00A45A, 0x00A45B, 0x00A451, 0x01D658, 0x00A473, 0x01D65C, 0x000A2C, 0x00ABAD, 0x00ABAE, 0x01D65D, 0x00A454, 0x000A6B, 0x01D63A, 0x000A6A, 0x000D5E, 0x00ABA9, 0x00A44E, 0x00ABAA, 0x000D7A, 0x000A74, 0x00ABA8, 0x00ABAF, 0x00ABAC, 0x00A471, 0x01D642, 0x000D73, 0x000D71, 0x000D7B, 0x01D647, 0x000D72, 0x00A470, 0x00ABD0, 0x000D22, 0x000D35, 0x000D36, 0x000D34, 0x000D32, 0x000D30, 0x00A201, 0x00A200, 0x00A203, 0x00A205, 0x000D39, 0x000D3A, 0x00A207, 0x00A238, 0x00A209, 0x00A208, 0x00A210, 0x00A20D, 0x00A206, 0x00A217, 0x01D40B, 0x01D40D, 0x01D464, 0x01D407, 0x01D40A, 0x01D401, 0x00A20E, 0x00A211, 0x00A213, 0x00A21C, 0x00A212, 0x01D40F, 0x01D42F, 0x00A21D, 0x01D41A, 0x01D46B, 0x01D42E, 0x01D466, 0x01D415, 0x01D414, 0x01D417, 0x01D411, 0x01D402, 0x00A223, 0x01D41B, 0x01D410, 0x01D41D, 0x01D41C, 0x00A20A, 0x01D419, 0x00A226, 0x00A221, 0x01D429, 0x00A222, 0x00A215, 0x00A233, 0x00A214, 0x00A21A, 0x00A23D, 0x00A216, 0x00A20C, 0x00A239, 0x00A23F, 0x00A23B, 0x00A236, 0x00A21B, 0x01D43A, 0x01D437, 0x00A237, 0x01D40C, 0x01D433, 0x00A24D, 0x00A24C, 0x00A267, 0x01D431, 0x01D435, 0x01D400, 0x01D436, 0x00A27C, 0x00A248, 0x01D41E, 0x00A24F, 0x01D474, 0x00A249, 0x01D446, 0x00A266, 0x01D470, 0x01D619, 0x01D447, 0x01D443, 0x00A260, 0x01D47F, 0x01D614, 0x01D467, 0x00A27D, 0x01D441, 0x01D440, 0x01D617, 0x01D611, 0x00A26B, 0x00A255, 0x01D47A, 0x01D471, 0x00A27E, 0x01D465, 0x00A27F, 0x00A220, 0x01D45D, 0x00A25A, 0x00A22B, 0x00A23C, 0x01D45C, 0x01D610, 0x01D47B, 0x01D475, 0x00A225, 0x00A224, 0x01D43E, 0x01D430, 0x01D469, 0x00A273, 0x01D61A, 0x00A261, 0x01D618, 0x00A272, 0x00A22A, 0x00A23E, 0x01D472, 0x00A25B, 0x01D473, 0x01D434, 0x01D439, 0x01D438, 0x01D43F, 0x01D432, 0x00A280, 0x00A283, 0x00A2B3, 0x00A285, 0x00A284, 0x00A287, 0x00A286, 0x00099E, 0x00099F, 0x00A288, 0x000995, 0x000996, 0x000997, 0x000990, 0x000994, 0x00A29D, 0x00A293, 0x000999, 0x00099D, 0x00A297, 0x00A292, 0x000998, 0x00099C, 0x00099A, 0x00099B, 0x00A290, 0x00A294, 0x00A2B7, 0x00A299, 0x00A29A, 0x00A295, 0x00A2A7, 0x01D494, 0x01D497, 0x00A28F, 0x01D499, 0x01D498, 0x01D49B, 0x01D49A, 0x01D491, 0x00A2A0, 0x01D49C, 0x00A2A2, 0x01D48B, 0x00A2A5, 0x00A2A4, 0x000A68, 0x01D6E0, 0x01D61E, 0x00A28E, 0x01D77A, 0x01D6E8, 0x01D6EE, 0x00A2AE, 0x01D47D, 0x00A29C, 0x00A28D, 0x00A28C, 0x01D483, 0x01D46E, 0x01D4B9, 0x01D4B8, 0x00A269, 0x01D490, 0x01D481, 0x01D480, 0x01D487, 0x00A2CE, 0x00A26A, 0x01D4A2, 0x00A2CF, 0x01D4BB, 0x01D4B4, 0x01D482, 0x01D4B6, 0x00A2C8, 0x00A2EA, 0x00A264, 0x00A265, 0x01D46A, 0x01D468, 0x01D486, 0x01D4EE, 0x01D4C2, 0x01D4EA, 0x01D48A, 0x01D4C3, 0x01D4E9, 0x01D48D, 0x01D4E8, 0x01D4EF, 0x01D46F, 0x01D47E, 0x01D478, 0x01D479, 0x00A2E4, 0x00A2E5, 0x00A2EC, 0x01D6FC, 0x01D4DC, 0x01D4FE, 0x00A2E0, 0x00A2E1, 0x00A2EE, 0x00A2ED, 0x01D6FD, 0x00A2E9, 0x00A2E7, 0x01D4E5, 0x01D4E7, 0x01D4FF, 0x01D4E2, 0x01D4E1, 0x00A2B2, 0x00A2E6, 0x00A2FC, 0x00A2FD, 0x00A2B6, 0x00A2EB, 0x01D4E6, 0x00A2B9, 0x01D4E0, 0x01D4FA, 0x01D4FB, 0x01D4EB, 0x01D4F4, 0x01D4F5, 0x00A302, 0x00A303, 0x00A305, 0x00A307, 0x01D4F0, 0x01D4F1, 0x00A300, 0x00A306, 0x01D4F8, 0x01D4F9, 0x01D4E4, 0x01D4FD, 0x000AEC, 0x000A07, 0x01D51E, 0x000A09, 0x00A312, 0x00A313, 0x000AAC, 0x000AED, 0x00A31C, 0x00A31D, 0x00A30A, 0x01D51F, 0x00A319, 0x00A318, 0x00A31E, 0x00A31F, 0x000A9D, 0x000AAA, 0x01D514, 0x00A30B, 0x01D516, 0x01D517, 0x01D512, 0x01D513, 0x01D510, 0x01D511, 0x00A304, 0x01D51A, 0x00A329, 0x00A328, 0x01D519, 0x01D51B, 0x000AAD, 0x000A9E, 0x000A0F, 0x000A1F, 0x000A98, 0x000A0A, 0x01D527, 0x01D526, 0x01D52C, 0x01D52D, 0x000A06, 0x01D52A, 0x00A32C, 0x00A32D, 0x00A32E, 0x00A32F, 0x000A9C, 0x000AE9, 0x000AE8, 0x000A93, 0x01D520, 0x01D521, 0x01D522, 0x01D523, 0x000AEA, 0x00A347, 0x01D518, 0x00A343, 0x01D53D, 0x01D53C, 0x00A342, 0x00A34A, 0x000AEE, 0x01D555, 0x000AEF, 0x00A34B, 0x00A346, 0x00A345, 0x00A353, 0x00A352, 0x00A35E, 0x00A341, 0x00A35F, 0x00A356, 0x01D55A, 0x01D559, 0x00A35C, 0x00A26F, 0x00A358, 0x00A359, 0x000AE1, 0x01D557, 0x00A340, 0x00A368, 0x01D550, 0x01D463, 0x01D552, 0x01D55B, 0x01D553, 0x01D55F, 0x00A36E, 0x000AE0, 0x01D556, 0x01D55E, 0x00A344, 0x01D566, 0x00A369, 0x01D569, 0x01D562, 0x01D567, 0x000AF9, 0x01D568, 0x01D56B, 0x01D56D, 0x01D56E, 0x000AEB, 0x000AE6, 0x000AE7, 0x01D564, 0x000A87, 0x01D558, 0x000A85, 0x000A8A, 0x000A8B, 0x01D554, 0x01D57C, 0x000A86, 0x00A3AA, 0x00A38C, 0x00A38D, 0x01D57D, 0x00A3A7, 0x00A389, 0x00A388, 0x00A38E, 0x00A38F, 0x00A3A6, 0x000A9F, 0x00A3A4, 0x01D585, 0x01D586, 0x01D584, 0x01D582, 0x01D583, 0x01D580, 0x01D581, 0x01D58B, 0x01D58F, 0x01D58D, 0x01D58C, 0x01D58A, 0x000AA7, 0x01D5BA, 0x000A8F, 0x01D5B8, 0x000AB3, 0x00A3A2, 0x00A3A3, 0x000A9B, 0x01D5BE, 0x000A88, 0x000A89, 0x01D58E, 0x01D5BB, 0x01D59D, 0x01D59C, 0x00A3A0, 0x00A3A1, 0x000A8D, 0x01D5B9, 0x00A3BA, 0x00A3AB, 0x00A3B2, 0x00A3B0, 0x00A3B6, 0x000A95, 0x00A3BC, 0x00A3BD, 0x00A3B7, 0x00A3B1, 0x00A3B9, 0x00A3B8, 0x00A3BE, 0x00A3BF, 0x01D724, 0x00A3A5, 0x000AAF, 0x00A3BB, 0x01D5B6, 0x01D5B7, 0x01D5B2, 0x01D5B3, 0x01D5B0, 0x01D5B1, 0x00A26C, 0x01D5BF, 0x000A8C, 0x01D779, 0x01D5B4, 0x01D5B5, 0x000A13, 0x01D746, 0x000A10, 0x000AD0, 0x000AAB, 0x000AAE, 0x000A16, 0x000A33, 0x000A1B, 0x01D77B, 0x01D460, 0x000A17, 0x000A36, 0x000AA8, 0x000AB6, 0x000A94, 0x000AB7, 0x000A99, 0x000AA2, 0x000AA3, 0x000AA0, 0x000AA1, 0x000ABD, 0x000AA5, 0x000AA4, 0x000AA6, 0x00A26D, 0x00A26E, 0x00A3E9, 0x00A3E8, 0x00A3EE, 0x00A3EF, 0x000AB8, 0x000AB2, 0x000AB0, 0x000AB5, 0x01D5E6, 0x01D5E7, 0x01D5E2, 0x01D5E3, 0x000A9A, 0x000AB9, 0x01D461, 0x01D462, 0x01D5ED, 0x01D5EC, 0x000B1A, 0x000B07, 0x000B08, 0x000B19, 0x000B05, 0x01D774, 0x01D73E, 0x01D775, 0x000B09, 0x000B0F, 0x000B0B, 0x000B0A, 0x000B36, 0x000B06, 0x01D5FD, 0x01D5FC, 0x000B15, 0x000B13, 0x000A15, 0x000B17, 0x00A413, 0x000A1E, 0x000B10, 0x00A510, 0x000B16, 0x000A90, 0x00A513, 0x000A1A, 0x000A97, 0x000B22, 0x000B14, 0x000B1B, 0x00FAD9, 0x01D667, 0x000B28, 0x000B25, 0x000A1D, 0x00A514, 0x000B21, 0x000B2B, 0x00A51B, 0x000B24, 0x000B30, 0x00A554, 0x000B0C, 0x000B23, 0x000B27, 0x000A5E, 0x000B39, 0x000B37, 0x000B33, 0x000B32, 0x000B38, 0x000B1C, 0x00A517, 0x000B35, 0x000B1E, 0x000A14, 0x000B1F, 0x000B18, 0x000A96, 0x000B1D, 0x000A19, 0x000B3D, 0x00A417, 0x000B68, 0x000B67, 0x000A25, 0x000A05, 0x00A512, 0x00A412, 0x00A506, 0x00A503, 0x00A508, 0x00A480, 0x00A523, 0x00A486, 0x000B69, 0x00A50E, 0x000A08, 0x00FAD6, 0x000A24, 0x000B66, 0x000A2F, 0x000B5F, 0x01D736, 0x01D702, 0x01D739, 0x000A18, 0x000A1C, 0x01D707, 0x000B6D, 0x00A516, 0x00A522, 0x000B6A, 0x00A525, 0x000B5C, 0x000B2D, 0x01D694, 0x01D737, 0x000B2E, 0x00A51A, 0x000B20, 0x000B2F, 0x01D717, 0x01D71C, 0x00FAD7, 0x01D728, 0x01D69A, 0x00A485, 0x000B2A, 0x01D71A, 0x000B74, 0x000B2C, 0x000B26, 0x000B72, 0x000B75, 0x000B71, 0x000A30, 0x000B73, 0x000B76, 0x000A32, 0x000A35, 0x000B77, 0x000B5D, 0x000B61, 0x000B6B, 0x000B60, 0x000BB6, 0x000A22, 0x00A533, 0x000BB7, 0x000B85, 0x000BB5, 0x00FA91, 0x000B83, 0x000B89, 0x000B88, 0x000B87, 0x000B8A, 0x000BB0, 0x01D699, 0x000B8F, 0x000B8E, 0x000B9A, 0x000B9E, 0x000BB9, 0x000B94, 0x000B93, 0x000B9F, 0x000B90, 0x000B95, 0x000B9C, 0x01D70D, 0x000B99, 0x000B92, 0x01D665, 0x000BB1, 0x01D70A, 0x01D70B, 0x00FACF, 0x00A538, 0x000B86, 0x000BAA, 0x000BAE, 0x000A91, 0x000A2E, 0x000BAF, 0x000A2D, 0x000A23, 0x000A21, 0x00A48C, 0x000A20, 0x000BA4, 0x000BA9, 0x01D666, 0x000BB2, 0x00FB6D, 0x00A524, 0x01D725, 0x00A52B, 0x01D72B, 0x00A536, 0x00A537, 0x00A53E, 0x00A539, 0x00A53F, 0x01D680, 0x01D7EA, 0x01D7EE, 0x000A38, 0x000A39, 0x000A28, 0x01D70C, 0x01D738, 0x000B6C, 0x000B6E, 0x000B6F, 0x01D6E6, 0x000A72, 0x000BD0, 0x000A5C, 0x01D733, 0x000BEC, 0x01D73F, 0x01D72E, 0x00A57C, 0x00A57D, 0x01D732, 0x000A59, 0x000A66, 0x000A67, 0x00A526, 0x00A55A, 0x01D770, 0x01D771, 0x01D6EB, 0x00FB68, 0x000A73, 0x00A551, 0x00FB6E, 0x01D7E6, 0x01D7EB, 0x000A5B, 0x000A26, 0x000A27, 0x000BE9, 0x000BA3, 0x01D73A, 0x00A557, 0x00A549, 0x000A2A, 0x01D7EF, 0x00A487, 0x000BEE, 0x000BEF, 0x000BEA, 0x000BEB, 0x000BE6, 0x000BE7, 0x00A483, 0x000BED, 0x01D7E7, 0x00A520, 0x000BB4, 0x01D7E8, 0x000BF2, 0x01D7E4, 0x000BB8, 0x000BF1, 0x000BF0, 0x01D75C, 0x01D695, 0x000BE8, 0x00FB65, 0x00A4DF, 0x00A53C, 0x00A53D, 0x000D1B, 0x00A548, 0x00A481, 0x00FB7E, 0x01D75D, 0x01D6D3, 0x01D730, 0x01D731, 0x00FAC3, 0x01D734, 0x01D6E7, 0x000D31, 0x00A411, 0x00A51D, 0x01D697, 0x01D69B, 0x01D7FE, 0x01D615, 0x000D09, 0x00FAC2, 0x01D62A, 0x01D711, 0x01D61B, 0x01D71B, 0x00A5EA, 0x00A401, 0x01D7BE, 0x01D7FF, 0x00A40D, 0x000D0B, 0x00A407, 0x00A507, 0x000D37, 0x00FAD5, 0x00A5AA, 0x00A5EB, 0x01D601, 0x00A469, 0x00A5EC, 0x000DEC, 0x00A59B, 0x000D1D, 0x00A51C, 0x00A5ED, 0x00A5E9, 0x00A5A0, 0x00A5EE, 0x000D1A, 0x01D7BF, 0x00A41B, 0x01D719, 0x00A4EA, 0x01D7E5, 0x01D62B, 0x01D7E2, 0x00A40F, 0x00A5AB, 0x01D714, 0x01D710, 0x01D7E1, 0x00A596, 0x00A594, 0x01D7E0, 0x00A410, 0x01D66E, 0x00A500, 0x00A505, 0x00A515, 0x00A5E0, 0x01D67D, 0x000D18, 0x00A439, 0x00A59A, 0x00A4ED, 0x00A416, 0x01D6FE, 0x01D7FD, 0x01D7B4, 0x00A5E6, 0x01D603, 0x01D6E9, 0x00A5E7, 0x01D7F9, 0x000DEA, 0x01D7F8, 0x000D59, 0x01D668, 0x000D23, 0x01D669, 0x01D6E1, 0x01D7CB, 0x01D6F4, 0x00A5E4, 0x00A457, 0x01D66A, 0x000DED, 0x000DE8, 0x01D7FB, 0x00A5E5, 0x00A4E0, 0x01D7F4, 0x00A56C, 0x01D7FA, 0x00A56E, 0x00A5FC, 0x00A5FD, 0x01D66F, 0x00A4EB, 0x00A569, 0x000C94, 0x00A568, 0x00A56F, 0x00A4E6, 0x01D66B, 0x000C9B, 0x01D7F5, 0x000D58, 0x00A5FE, 0x000D10, 0x01D763, 0x01D7F0, 0x01D7F1, 0x00A5F7, 0x00A5E1, 0x00A456, 0x01D760, 0x00A5FF, 0x01D762, 0x01D6FA, 0x01D664, 0x000DC2, 0x01D6FF, 0x00A484, 0x00A489, 0x01D7F3, 0x01D60D, 0x000D8E, 0x00A583, 0x00A4EE, 0x000D33, 0x01D77D, 0x01D7F2, 0x01D77C, 0x00A46E, 0x01D6F5, 0x00FB51, 0x00A580, 0x00A581, 0x00FB2D, 0x00FB52, 0x00A59C, 0x01D662, 0x00A4E1, 0x01D6AD, 0x01D6E2, 0x01D79D, 0x000DEB, 0x00A595, 0x000DC6, 0x00A59D, 0x00FB2E, 0x01D797, 0x00A4D8, 0x00A589, 0x000DC0, 0x01D69D, 0x00A591, 0x01D791, 0x00A586, 0x00A587, 0x01D794, 0x01D795, 0x01D698, 0x00A585, 0x01D790, 0x00A5AE, 0x01D79F, 0x01D6F8, 0x00FB2F, 0x01D61D, 0x000D1F, 0x000DEE, 0x000D8D, 0x01D7A2, 0x00A58B, 0x000DB3, 0x01D69F, 0x00A409, 0x00A4DE, 0x000D17, 0x00A4DC, 0x00A5BD, 0x00A415, 0x00A4E4, 0x00A48B, 0x00A593, 0x01D6D2, 0x01D799, 0x01D6D0, 0x01D7B1, 0x01D79A, 0x01D79B, 0x01D6EA, 0x000D8C, 0x00A58A, 0x00A588, 0x00A58E, 0x00A48A, 0x01D78A, 0x01D7B8, 0x00A5A5, 0x01D7E9, 0x00A511, 0x00A5A6, 0x01D782, 0x01D787, 0x01D7B5, 0x01D78B, 0x01D78C, 0x01D78D, 0x00A58D, 0x01D7BA, 0x00A58C, 0x01D6E4, 0x00A5A1, 0x00A5A4, 0x01D7B9, 0x00FB5B, 0x01D781, 0x000DC3, 0x01D780, 0x00A509, 0x00A50C, 0x01D6EF, 0x01D78F, 0x00A592, 0x01D79E, 0x01D79C, 0x000DEF, 0x01D69E, 0x00A5A2, 0x00A597, 0x00A5BB, 0x00A5A3, 0x00A590, 0x00A5BC, 0x01D6F9, 0x00A5B3, 0x01D700, 0x00A5B7, 0x01D6AC, 0x000C95, 0x00A5BE, 0x00A5BF, 0x00A4E5, 0x00FB59, 0x00A5B6, 0x00A4D9, 0x00A5B8, 0x00A5B9, 0x01D7B2, 0x01D7B3, 0x000D15, 0x01D71D, 0x01D7B6, 0x00FB4D, 0x00FB4F, 0x01D7B7, 0x01D6E5, 0x01D7B0, 0x00FB41, 0x00A609, 0x00A608, 0x00FB46, 0x00FB4A, 0x00FB78, 0x00FB7D, 0x00FA93, 0x00FB47, 0x00FB61, 0x00FB60, 0x00FB63, 0x00FB62, 0x00FB66, 0x00FB75, 0x00FB76, 0x00FB7C, 0x00FB67, 0x00A61E, 0x00FB7F, 0x00FB4E, 0x00FB4C, 0x00A621, 0x00A620, 0x00A623, 0x00A622, 0x00A625, 0x00A624, 0x00A627, 0x00A626, 0x00FB70, 0x00FB77, 0x00A62B, 0x00A62A, 0x00A629, 0x00FAD0, 0x000D19, 0x00A628, 0x00FB6A, 0x00FB6C, 0x00FA92, 0x00FB69, 0x00FB7B, 0x00FB7A, 0x00FB6F, 0x00FB71, 0x00FB79, 0x00FB73, 0x00FB72, 0x00FAD8, 0x00FACE, 0x00FB74, 0x00FAC8, 0x00FAD4, 0x000D14, 0x00A643, 0x000D88, 0x00FB57, 0x00A654, 0x00A655, 0x00A65E, 0x00A656, 0x000D8A, 0x00A641, 0x00A65A, 0x00A642, 0x00A64B, 0x00FB50, 0x00A640, 0x00A647, 0x00A651, 0x00A657, 0x00A41C, 0x00A650, 0x00A414, 0x00A65F, 0x00A652, 0x00A653, 0x00A659, 0x00A405, 0x00A65B, 0x00A403, 0x00A41D, 0x00A41A, 0x00A400, 0x00A658, 0x00A661, 0x00A660, 0x00A663, 0x00A662, 0x00A644, 0x00A645, 0x00FB43, 0x000D8F, 0x00FB4B, 0x00A66D, 0x00A64A, 0x00A66A, 0x00A666, 0x00A66C, 0x00A667, 0x000C90, 0x00FB6B, 0x00FB44, 0x00FB48, 0x00FB58, 0x00FB5D, 0x00A404, 0x00FB64, 0x00FB54, 0x00FB5C, 0x00FB5E, 0x00FB5F, 0x00A406, 0x00A65C, 0x00A65D, 0x00FB55, 0x00FB40, 0x00FB5A, 0x00FB49, 0x00FB56, 0x00FB02, 0x00FB01, 0x00A790, 0x00FB03, 0x00FB06, 0x00FB05, 0x000C9A, 0x000D92, 0x00FB27, 0x000D93, 0x000C99, 0x00FB22, 0x000D91, 0x00FB00, 0x00FB04, 0x00FB24, 0x00FB16, 0x00FB14, 0x000D96, 0x00FB13, 0x000D90, 0x00FB15, 0x000DB6, 0x00FB17, 0x00FB20, 0x00FB2B, 0x00A797, 0x00FB26, 0x00FB25, 0x00FB1D, 0x00FB1F, 0x000C9D, 0x00FB21, 0x00FB38, 0x00FB23, 0x00FB3E, 0x00FBAC, 0x00A4EC, 0x00FB3C, 0x000C9E, 0x00FBA8, 0x00FBA9, 0x00FBAE, 0x00A79B, 0x00FBAD, 0x00FBAF, 0x00A40A, 0x00A796, 0x00FB30, 0x00A795, 0x00FB33, 0x000C98, 0x00FB34, 0x000C9F, 0x00FB32, 0x00A794, 0x00A566, 0x000C9C, 0x00FB3A, 0x00FB31, 0x00FB39, 0x00FB35, 0x00FB36, 0x00FB3B, 0x00A4E8, 0x00A79A, 0x00FB53, 0x00FB28, 0x00FBE4, 0x00FBE5, 0x00FBE6, 0x00A4E9, 0x00FBE8, 0x00FBE9, 0x00FBEA, 0x00FBEB, 0x00FBEC, 0x00FBED, 0x00FBEE, 0x00FBEF, 0x00FB2C, 0x00FB2A, 0x000C93, 0x00FBD3, 0x00FBFC, 0x00FBD5, 0x00FBD6, 0x00FBD7, 0x00FBD8, 0x00FBD9, 0x00FBDE, 0x00FBDB, 0x00FBDC, 0x00FBDD, 0x000DC1, 0x00FBDF, 0x00FBE1, 0x00FBE2, 0x00FBE3, 0x000D85, 0x000D89, 0x00FBF5, 0x00FBE7, 0x00FBE0, 0x00FBF9, 0x00FBFA, 0x00FBFB, 0x000D8B, 0x00FBFD, 0x00FBFE, 0x00FBFF, 0x00FBF8, 0x00FBF0, 0x00FBF1, 0x00FBF2, 0x00FBF3, 0x00FBF4, 0x00FBF7, 0x00FBF6, 0x000E10, 0x000E11, 0x000E04, 0x000E01, 0x000E05, 0x000E03, 0x000E16, 0x000E17, 0x000E09, 0x000E0B, 0x000E30, 0x00FB9C, 0x014413, 0x000E0F, 0x000E0D, 0x000E0A, 0x000E19, 0x000E13, 0x000E1E, 0x000E02, 0x000E15, 0x000E14, 0x000E1F, 0x000E12, 0x000E32, 0x000E18, 0x000E06, 0x000E07, 0x000E1A, 0x000E1C, 0x000E1B, 0x000E1D, 0x000E33, 0x000E20, 0x000E23, 0x000E22, 0x000E2E, 0x000E21, 0x000E27, 0x000E26, 0x000E08, 0x000E2F, 0x000E2B, 0x000E2A, 0x000E0C, 0x000E25, 0x000E0E, 0x000E24, 0x014427, 0x00FB82, 0x01442A, 0x00FB80, 0x014426, 0x01440B, 0x00FB84, 0x00FB87, 0x00FB8B, 0x00FB8C, 0x014418, 0x00FB86, 0x014414, 0x014415, 0x014419, 0x01441E, 0x014412, 0x014425, 0x014416, 0x014417, 0x000E45, 0x000E44, 0x01441B, 0x014411, 0x01441A, 0x014410, 0x00FB85, 0x01441F, 0x014402, 0x014401, 0x014409, 0x014403, 0x014439, 0x014406, 0x014400, 0x014407, 0x01440A, 0x01440F, 0x01443E, 0x01443F, 0x014405, 0x01443A, 0x014404, 0x01443B, 0x014435, 0x014423, 0x00FB89, 0x014434, 0x01440C, 0x01440D, 0x01440E, 0x014436, 0x000A6C, 0x01442F, 0x014408, 0x00FB8A, 0x01441C, 0x01441D, 0x00FB8D, 0x00FBA3, 0x000A6E, 0x000A6D, 0x014433, 0x00A792, 0x014432, 0x00FB8E, 0x00FB88, 0x00FBA2, 0x014431, 0x00FB8F, 0x00FBA1, 0x014430, 0x00FBA0, 0x00FBD4, 0x00FBB1, 0x00FBDA, 0x00FBAA, 0x014429, 0x00FBA4, 0x00FBB0, 0x000E81, 0x000E82, 0x00FBA5, 0x014437, 0x00A791, 0x00FBAB, 0x000E87, 0x00FBA6, 0x00FBA7, 0x000E88, 0x014614, 0x014424, 0x000E8D, 0x01444C, 0x014482, 0x014483, 0x00FA15, 0x014485, 0x01444D, 0x000E97, 0x000E95, 0x000E94, 0x01448B, 0x000E96, 0x000E99, 0x01448A, 0x000E9B, 0x000E9A, 0x000E9D, 0x000E9E, 0x000E9F, 0x000E9C, 0x00FA12, 0x00FA10, 0x00FA11, 0x00FA16, 0x000EAE, 0x000EAF, 0x000EA5, 0x00A565, 0x00FA17, 0x01449D, 0x00FA1A, 0x000EAA, 0x000EAD, 0x014421, 0x000EAB, 0x014422, 0x00FA14, 0x00FA1B, 0x000EB3, 0x000EB2, 0x014428, 0x000EB0, 0x0144AB, 0x014420, 0x01442C, 0x01447C, 0x01442E, 0x014460, 0x014479, 0x01447D, 0x014478, 0x0144B3, 0x014474, 0x01447E, 0x01447F, 0x000ED7, 0x014438, 0x000ED0, 0x000ED4, 0x014467, 0x01443C, 0x01443D, 0x00A550, 0x000EDF, 0x014446, 0x01445C, 0x014458, 0x014459, 0x014447, 0x000ED3, 0x000ED1, 0x000ED2, 0x014441, 0x000EC3, 0x000ED5, 0x000ED6, 0x01445A, 0x01445B, 0x000ED9, 0x00A567, 0x014450, 0x014451, 0x014445, 0x000ED8, 0x000EC2, 0x0144D5, 0x014456, 0x014457, 0x0144DB, 0x0144DA, 0x00A52A, 0x00A561, 0x014454, 0x014455, 0x01445E, 0x01445F, 0x014440, 0x00A560, 0x0144EC, 0x014475, 0x014463, 0x01444A, 0x014444, 0x01444F, 0x00FA19, 0x0144ED, 0x01447A, 0x01444B, 0x014462, 0x0144EE, 0x000EDE, 0x00A572, 0x014472, 0x014471, 0x014473, 0x01444E, 0x014470, 0x00A793, 0x000F00, 0x014461, 0x01447B, 0x014449, 0x014476, 0x00A811, 0x014448, 0x00A817, 0x00A810, 0x014477, 0x00FA03, 0x00FA02, 0x00FA01, 0x00FA00, 0x00A808, 0x00A809, 0x00A815, 0x00FA05, 0x00FA07, 0x00A816, 0x00A8D6, 0x00FA06, 0x00A813, 0x00A812, 0x00FA0B, 0x00A8D7, 0x00FA1C, 0x00FA1D, 0x00A8D4, 0x00FA04, 0x00A80D, 0x00A80F, 0x00FA18, 0x00FA1E, 0x000F25, 0x000F24, 0x00A81A, 0x00FA1F, 0x000F29, 0x000F28, 0x000F2B, 0x000F2A, 0x000F2D, 0x000F2C, 0x000F2F, 0x000F2E, 0x000D13, 0x000F33, 0x00A81B, 0x00FA0A, 0x00A818, 0x00A819, 0x000F32, 0x00A81F, 0x00A8FD, 0x000D12, 0x00A807, 0x00A8F5, 0x00A8F6, 0x00A8F7, 0x00A8F4, 0x00A814, 0x00A8FB, 0x000F49, 0x000F43, 0x000F4B, 0x000F4A, 0x000F42, 0x000D07, 0x000F45, 0x000D06, 0x000F58, 0x000F4D, 0x000F41, 0x000F5C, 0x000F44, 0x000F5E, 0x000F5F, 0x000F54, 0x000F55, 0x000D16, 0x000D0F, 0x000D0A, 0x000F52, 0x000F53, 0x00AA51, 0x000F40, 0x000F5A, 0x000F5B, 0x000D1C, 0x000F5D, 0x000D05, 0x000D1E, 0x000F59, 0x000F69, 0x00A8F2, 0x000F68, 0x00A81E, 0x000F65, 0x000F64, 0x000F46, 0x000F47, 0x00AA62, 0x014551, 0x000F6B, 0x000F6A, 0x000F4C, 0x000F6C, 0x000F4E, 0x000F4F, 0x00FAC1, 0x00FAC4, 0x00FACD, 0x00FA09, 0x00A8F3, 0x000D08, 0x00A84F, 0x00A849, 0x00A80E, 0x00FA3A, 0x00AA74, 0x00AA75, 0x014550, 0x00A80C, 0x00FA34, 0x000D0E, 0x00FA39, 0x014571, 0x014576, 0x014577, 0x01457A, 0x00FACC, 0x01457B, 0x00A891, 0x00FA3B, 0x00A897, 0x00A89B, 0x00FA3C, 0x00A890, 0x00A889, 0x0145AD, 0x00A888, 0x0145AE, 0x0145AF, 0x00A894, 0x00A895, 0x014588, 0x00A896, 0x00AA94, 0x00AA95, 0x00A893, 0x00A892, 0x01458E, 0x01458D, 0x01446B, 0x0145E1, 0x00FA3D, 0x00FA3F, 0x0145F4, 0x0145E4, 0x00A86C, 0x00FA38, 0x00AA9A, 0x0145FA, 0x00A8AC, 0x0145FB, 0x0145AC, 0x00A883, 0x00A8AD, 0x00FA3E, 0x00A8AE, 0x0145F5, 0x00A8AF, 0x00A882, 0x0145B4, 0x0145B5, 0x00A89E, 0x00A8A9, 0x00A8A8, 0x0145A9, 0x00A89F, 0x000D0C, 0x00A88B, 0x0145A8, 0x00A886, 0x00A885, 0x00A86D, 0x00A887, 0x00A899, 0x0145B2, 0x00A89A, 0x00A898, 0x00A89D, 0x0145B6, 0x00A89C, 0x00A884, 0x00A8A4, 0x00A8D2, 0x00A8D3, 0x00A8D1, 0x00A88C, 0x00A8A5, 0x00A8A6, 0x0145C3, 0x00A8AB, 0x00A88D, 0x00A8D0, 0x00A88A, 0x00A8D5, 0x00A8AA, 0x00A88E, 0x00A88F, 0x00A86E, 0x0145C6, 0x0145C2, 0x0145DD, 0x0145DC, 0x0145C7, 0x0145D2, 0x0145D3, 0x00AB92, 0x00A8D8, 0x0145D0, 0x00A8D9, 0x0145D6, 0x0145D7, 0x0145D4, 0x0145D9, 0x0145DF, 0x0145DB, 0x00A8A2, 0x00A8A3, 0x00A8A1, 0x0145D5, 0x0145C1, 0x00AB96, 0x00A8A0, 0x0145C0, 0x0145C5, 0x0145F0, 0x0145C4, 0x0145CD, 0x0145C9, 0x00A8A7, 0x0145CE, 0x00A8B1, 0x0145F6, 0x00A8B0, 0x0145F7, 0x0145CF, 0x0145CC, 0x0145F1, 0x00A868, 0x00A869, 0x00A8B3, 0x001091, 0x001092, 0x001093, 0x00A8B2, 0x00A86F, 0x00A91C, 0x00A91D, 0x00A903, 0x00A901, 0x00A902, 0x00A900, 0x00A907, 0x00A905, 0x00A90B, 0x00A918, 0x001210, 0x001211, 0x001212, 0x001213, 0x001214, 0x001215, 0x001216, 0x001217, 0x00A913, 0x00A912, 0x00A911, 0x00121B, 0x00A910, 0x00A916, 0x00A914, 0x00A91B, 0x00A909, 0x00A91A, 0x00A915, 0x00A91F, 0x00A917, 0x00A919, 0x00A921, 0x00A920, 0x00A908, 0x00A925, 0x00A904, 0x001106, 0x00A906, 0x001107, 0x001090, 0x00A922, 0x00A90A, 0x00A923, 0x00A85D, 0x00110C, 0x00A924, 0x001105, 0x001147, 0x00A81C, 0x001149, 0x00A803, 0x00A90E, 0x00A80A, 0x00A847, 0x00A81D, 0x00A939, 0x00A938, 0x00110E, 0x00A93F, 0x00A93D, 0x00A93C, 0x00110F, 0x00A93E, 0x00A800, 0x00A801, 0x00A943, 0x00A942, 0x00110A, 0x00110B, 0x001097, 0x00151D, 0x00151E, 0x00151F, 0x00A804, 0x001154, 0x00115A, 0x00115B, 0x00A805, 0x001155, 0x00A820, 0x00A821, 0x001159, 0x00A853, 0x00112A, 0x00112B, 0x00A857, 0x00A852, 0x00A850, 0x00A851, 0x001142, 0x001143, 0x001140, 0x001141, 0x001124, 0x001095, 0x001096, 0x001099, 0x00A822, 0x001158, 0x00A96C, 0x00A96D, 0x001597, 0x00A856, 0x00A969, 0x00A968, 0x001134, 0x001135, 0x00113E, 0x00113F, 0x00A96F, 0x00A96E, 0x00A830, 0x00A831, 0x00115C, 0x00115D, 0x00113A, 0x00113B, 0x00A832, 0x00A833, 0x00A834, 0x00A835, 0x00A858, 0x00A859, 0x00A85E, 0x00A85F, 0x00A85A, 0x00A85B, 0x00A854, 0x001146, 0x001148, 0x00A848, 0x00115E, 0x001145, 0x00A846, 0x00A986, 0x00A989, 0x00A988, 0x00A98B, 0x00A98E, 0x00115F, 0x00A843, 0x001294, 0x001295, 0x00A991, 0x00A990, 0x00A993, 0x00A992, 0x00A995, 0x00129B, 0x00A997, 0x00A994, 0x00A855, 0x00A99A, 0x00A99B, 0x00A998, 0x00A99D, 0x00A85C, 0x00A99F, 0x001503, 0x00A9A3, 0x00A9A0, 0x0012A8, 0x0012A9, 0x00A9A1, 0x0012AB, 0x0012AC, 0x0012AD, 0x0012AE, 0x00A9A8, 0x00A9AB, 0x00A9A9, 0x00A9AF, 0x00A9AC, 0x00A9A4, 0x00A9A5, 0x00A840, 0x00A841, 0x001169, 0x001172, 0x00114A, 0x00114B, 0x00A867, 0x00151C, 0x001081, 0x00A9AD, 0x0012C0, 0x00A9AE, 0x0012C2, 0x0012C3, 0x0012C4, 0x0012C5, 0x00A9D2, 0x00A9D5, 0x0012C8, 0x0012C9, 0x0012CA, 0x0012CB, 0x0012CC, 0x0012CD, 0x0012CE, 0x0012CF, 0x0012D0, 0x0012D1, 0x001502, 0x0012D3, 0x0012D4, 0x00A9D9, 0x00A9D3, 0x00A9D6, 0x0012D8, 0x0012D9, 0x00A9D7, 0x0012DB, 0x0012DC, 0x0012DD, 0x0012DE, 0x0012DF, 0x0012E0, 0x0012E1, 0x0012E2, 0x0012E3, 0x0012E4, 0x0012E5, 0x0012E6, 0x0012E7, 0x0012E8, 0x0012E9, 0x0012EA, 0x0012EB, 0x0012EC, 0x0012ED, 0x0012EE, 0x0012EF, 0x0012F0, 0x00A9E9, 0x0012F2, 0x00A9E8, 0x0012F4, 0x0012F5, 0x00A9D4, 0x0012F7, 0x0012F8, 0x0012F9, 0x0012FA, 0x0012FB, 0x0012FC, 0x0012FD, 0x0012FE, 0x0012FF, 0x00A9D8, 0x001118, 0x00A9EC, 0x00A9ED, 0x00A9EE, 0x00A9EF, 0x00111F, 0x00AA03, 0x00AA00, 0x00AA05, 0x00AA06, 0x00111B, 0x00AA1C, 0x001119, 0x00111A, 0x00AA1E, 0x00AA09, 0x00AA02, 0x0011DE, 0x00AA0B, 0x001115, 0x001114, 0x00AA15, 0x00AA10, 0x00AA1A, 0x00AA1B, 0x00AA1D, 0x0011D9, 0x00AA17, 0x00AA16, 0x0011D8, 0x00AA18, 0x001137, 0x00AA19, 0x00AA14, 0x01D67B, 0x00AA1F, 0x001131, 0x00111C, 0x00AA01, 0x0011E7, 0x00AA27, 0x00111D, 0x00AA0D, 0x00AA21, 0x00AA07, 0x00AA08, 0x001101, 0x001132, 0x001133, 0x0011FE, 0x00111E, 0x001102, 0x001103, 0x00AA04, 0x00AA25, 0x0011F8, 0x0011F9, 0x001109, 0x00AA20, 0x0011FD, 0x00AA23, 0x00AA22, 0x0011FF, 0x00AA0E, 0x00AA0F, 0x00AA0C, 0x001100, 0x00AA0A, 0x001346, 0x00AA45, 0x00AA56, 0x00AA44, 0x00AA49, 0x00AA41, 0x001173, 0x001130, 0x001136, 0x001171, 0x001593, 0x001351, 0x00AA42, 0x01D648, 0x001350, 0x001356, 0x01D646, 0x00AA71, 0x00AA4A, 0x00AA53, 0x00AA52, 0x00AA50, 0x01D674, 0x00AA58, 0x0011F4, 0x01D675, 0x01D649, 0x00AA13, 0x00AA59, 0x01D641, 0x00AA57, 0x00AA4B, 0x00AA6D, 0x00AA24, 0x00AA40, 0x0011F5, 0x00AA47, 0x00AA60, 0x00AA61, 0x00AA26, 0x00AA46, 0x01D64F, 0x00AA65, 0x00AA68, 0x00AA48, 0x001371, 0x00AA6C, 0x001370, 0x01D64E, 0x00AA73, 0x001376, 0x00AA6B, 0x00AA67, 0x00137A, 0x00AA72, 0x01D640, 0x001379, 0x00AA28, 0x00AA69, 0x00AA6E, 0x001198, 0x00119D, 0x01D672, 0x00AA7A, 0x00AA6F, 0x00119E, 0x00119F, 0x00AA8E, 0x00AA8F, 0x00AA89, 0x00119B, 0x00119A, 0x001199, 0x00AA9C, 0x00AA88, 0x001191, 0x001190, 0x001193, 0x001192, 0x001195, 0x001194, 0x00AA99, 0x00AA85, 0x00AA9E, 0x00AA9F, 0x00AA98, 0x00AA9D, 0x00AA82, 0x00AA83, 0x001196, 0x001197, 0x00AA12, 0x001182, 0x001183, 0x00AA84, 0x001186, 0x001185, 0x001187, 0x00AA81, 0x00AA80, 0x00AA86, 0x00AA8A, 0x00AAE9, 0x00AA8B, 0x00AA87, 0x001181, 0x001184, 0x00AAA8, 0x00AAA9, 0x001180, 0x0011B2, 0x00118D, 0x00118E, 0x00AAAF, 0x00AAB5, 0x00AABA, 0x001189, 0x001188, 0x00AAB9, 0x00119C, 0x0011B3, 0x00AAA5, 0x00118F, 0x0011DA, 0x0011C3, 0x00AAA1, 0x0011C2, 0x0011D5, 0x00AABB, 0x0011DF, 0x0011D4, 0x0011A8, 0x0011DB, 0x0011AE, 0x0011AC, 0x01D678, 0x00118C, 0x0011AD, 0x0011AF, 0x00AAA4, 0x00AAAE, 0x00AA7E, 0x00AA8D, 0x0011D2, 0x00AA8C, 0x0011D1, 0x0011D3, 0x0011D0, 0x01D679, 0x0011D6, 0x00AADC, 0x01D67A, 0x01D671, 0x0011D7, 0x01D670, 0x00AAC2, 0x0011A9, 0x0011AA, 0x00AAAA, 0x0011A4, 0x0011A5, 0x00AA64, 0x00AAA0, 0x00AA6A, 0x00AAA3, 0x00AAAD, 0x01D67E, 0x00AAA2, 0x00AAAC, 0x0011AB, 0x00AAE3, 0x0011B0, 0x0011B1, 0x00AAA6, 0x0011B7, 0x00AAAB, 0x00AAA7, 0x00AAB6, 0x00AA55, 0x0011B4, 0x0011BA, 0x00AA76, 0x0011BB, 0x0011B5, 0x00AAF2, 0x0011B6, 0x00AAB1, 0x0012B3, 0x001501, 0x00AABC, 0x00AABD, 0x00AA7F, 0x00129C, 0x0012B9, 0x00AA9B, 0x01D67F, 0x00A84E, 0x001500, 0x0012B2, 0x014589, 0x014498, 0x014496, 0x001507, 0x00129E, 0x001286, 0x0012B5, 0x00129D, 0x014497, 0x014490, 0x001282, 0x014591, 0x00129F, 0x01449A, 0x00AA11, 0x014488, 0x001283, 0x001284, 0x00131B, 0x001312, 0x014493, 0x001281, 0x001285, 0x0144AE, 0x00128C, 0x001299, 0x001506, 0x001287, 0x014492, 0x001280, 0x00128D, 0x014491, 0x00128A, 0x001288, 0x0012A1, 0x001505, 0x0144B9, 0x0012D2, 0x014481, 0x0012B4, 0x014480, 0x00114D, 0x0012D6, 0x01449F, 0x0012A5, 0x00A84B, 0x014489, 0x0012D5, 0x0013B5, 0x001170, 0x01448D, 0x00128B, 0x014487, 0x014495, 0x00129A, 0x0012A7, 0x01449E, 0x01449C, 0x0144B5, 0x01449B, 0x0012A0, 0x014494, 0x014499, 0x014486, 0x001334, 0x0144B8, 0x0144BA, 0x00A84C, 0x014484, 0x0144A6, 0x00A84D, 0x0144A9, 0x001168, 0x001504, 0x0144AA, 0x01450E, 0x0144C5, 0x01448C, 0x01448E, 0x01448F, 0x0012F6, 0x0012A4, 0x0012A6, 0x0144C7, 0x00A866, 0x01456C, 0x001335, 0x0012DA, 0x0012AF, 0x0012A3, 0x0012AA, 0x0012F3, 0x0144B4, 0x00AB93, 0x014509, 0x0144BB, 0x0144CA, 0x001144, 0x0012A2, 0x00AB97, 0x0012B0, 0x00A842, 0x0012BD, 0x001176, 0x0144A3, 0x0012BC, 0x001177, 0x0012BE, 0x0012F1, 0x0012B8, 0x0012BA, 0x0012BB, 0x014508, 0x0144B7, 0x0144BE, 0x00133A, 0x001321, 0x001291, 0x00132C, 0x001293, 0x001290, 0x0144B0, 0x0144B6, 0x0144B2, 0x00150A, 0x00132D, 0x0144B1, 0x00F9A6, 0x001326, 0x014559, 0x00F9C8, 0x00F9DE, 0x001292, 0x014521, 0x01454B, 0x00AA63, 0x00F9A5, 0x00F98C, 0x01450C, 0x001296, 0x01450D, 0x00F9FE, 0x014520, 0x01450F, 0x01453A, 0x001345, 0x00F9BF, 0x00F9A8, 0x014535, 0x01452B, 0x001322, 0x014579, 0x00F9BA, 0x001297, 0x00AB9F, 0x00FB91, 0x00133C, 0x00F9B4, 0x00F9B5, 0x00F9B8, 0x014534, 0x01453B, 0x00F9A4, 0x014537, 0x014530, 0x00F911, 0x014527, 0x00133E, 0x001320, 0x00133D, 0x00F9B9, 0x001323, 0x001339, 0x00133F, 0x001377, 0x00133B, 0x00F9B2, 0x001327, 0x001338, 0x00F9B0, 0x00F9B1, 0x014533, 0x014536, 0x00F9B7, 0x00F9BB, 0x014531, 0x00AAC0, 0x00F9B6, 0x0013E8, 0x0013EC, 0x0013CA, 0x014532, 0x00AAE6, 0x001347, 0x014554, 0x00AA66, 0x00F9DA, 0x0145E0, 0x001353, 0x00FB92, 0x014555, 0x00AAEA, 0x001340, 0x00F9E1, 0x00F9D9, 0x0013DD, 0x00AA54, 0x00F9D8, 0x001341, 0x01455B, 0x014552, 0x01457C, 0x00F9D7, 0x0145D1, 0x0013EE, 0x0013EF, 0x00114F, 0x00AADB, 0x0013EA, 0x0013EB, 0x0145FC, 0x001357, 0x0145DE, 0x00AAE8, 0x0013E4, 0x00114C, 0x00AAE4, 0x00AAE5, 0x00AAE2, 0x00A84A, 0x00AAE0, 0x00AAE1, 0x00A845, 0x0145FD, 0x0145EF, 0x0145E6, 0x001508, 0x00AAE7, 0x0145E2, 0x0145E3, 0x0145F8, 0x0013E9, 0x0145FE, 0x0145FF, 0x001301, 0x001303, 0x001352, 0x001302, 0x001330, 0x001331, 0x001336, 0x001305, 0x00130A, 0x00130F, 0x001308, 0x00130D, 0x01451A, 0x001304, 0x001307, 0x014514, 0x014507, 0x014503, 0x001332, 0x014501, 0x00131C, 0x00131D, 0x00131E, 0x001300, 0x001319, 0x001318, 0x00131F, 0x00131A, 0x001306, 0x014518, 0x01451B, 0x001337, 0x014515, 0x014517, 0x014513, 0x014516, 0x014510, 0x014511, 0x014512, 0x014519, 0x01451E, 0x001309, 0x01451C, 0x00130B, 0x00132B, 0x001329, 0x014538, 0x01450B, 0x001333, 0x001325, 0x014506, 0x01452D, 0x014529, 0x014528, 0x01452E, 0x01453E, 0x00130C, 0x014539, 0x00130E, 0x00132F, 0x014504, 0x014505, 0x001324, 0x00132A, 0x014500, 0x001343, 0x014502, 0x014523, 0x01453F, 0x01453D, 0x01450A, 0x01452C, 0x00134E, 0x01451D, 0x00134F, 0x01451F, 0x001342, 0x001344, 0x00134B, 0x001358, 0x014542, 0x001372, 0x014543, 0x001359, 0x001355, 0x001354, 0x014549, 0x00134C, 0x00134D, 0x014547, 0x00137B, 0x014548, 0x001315, 0x014558, 0x00135A, 0x001313, 0x014541, 0x014557, 0x00F98E, 0x00136F, 0x014556, 0x01456B, 0x01455F, 0x014540, 0x001328, 0x001348, 0x00132E, 0x00134A, 0x0145E8, 0x001349, 0x00136A, 0x00136B, 0x014566, 0x014546, 0x014522, 0x001374, 0x00136D, 0x01457D, 0x001375, 0x01456A, 0x00137C, 0x001373, 0x01454F, 0x014563, 0x014564, 0x001369, 0x00F98D, 0x00F9B3, 0x014570, 0x014565, 0x014526, 0x014567, 0x014561, 0x01455D, 0x01457E, 0x01457F, 0x01453C, 0x01455C, 0x001383, 0x01455E, 0x001380, 0x001381, 0x001382, 0x001387, 0x001384, 0x001385, 0x001386, 0x014586, 0x014584, 0x014585, 0x014587, 0x00138E, 0x014598, 0x014599, 0x01459A, 0x00138F, 0x001314, 0x0013D6, 0x0013D7, 0x01459B, 0x00138D, 0x001298, 0x00138C, 0x014583, 0x014594, 0x014595, 0x014596, 0x014582, 0x00138A, 0x001389, 0x014597, 0x00138B, 0x0145E9, 0x001388, 0x0145BF, 0x0013A3, 0x0145A6, 0x0145A7, 0x0013AF, 0x0013B2, 0x0013BC, 0x0013D0, 0x0013AB, 0x0145E7, 0x014581, 0x0013BD, 0x014580, 0x0013BF, 0x0013B0, 0x0013B1, 0x0013B3, 0x00A873, 0x0013AE, 0x0145B1, 0x01456E, 0x0145B3, 0x0145B0, 0x01459C, 0x0145A5, 0x0145B7, 0x01459E, 0x01459D, 0x0145A3, 0x01459F, 0x0145D8, 0x0145A4, 0x0013D1, 0x0013C6, 0x0013D2, 0x0013D3, 0x014574, 0x01458F, 0x00F9F9, 0x01458A, 0x01458C, 0x01458B, 0x0145A2, 0x0145C8, 0x01454C, 0x0013AC, 0x0013C4, 0x01456D, 0x001094, 0x0145DA, 0x0013A4, 0x0013A9, 0x0013A8, 0x0145A0, 0x00136C, 0x0013A5, 0x0013A6, 0x0013A7, 0x0013AD, 0x001098, 0x00136E, 0x0013AA, 0x00F9E7, 0x0145AA, 0x0145AB, 0x0013E5, 0x0145A1, 0x0013F4, 0x014562, 0x0013BB, 0x014560, 0x0013B6, 0x00F9E5, 0x0013B7, 0x0145ED, 0x0145EC, 0x001378, 0x0145EE, 0x00F9F1, 0x00F9D0, 0x0013B8, 0x0145F9, 0x014575, 0x0145BD, 0x0145BC, 0x014553, 0x00F9FA, 0x0145B9, 0x0145BA, 0x0145BB, 0x0145B8, 0x00F986, 0x00F983, 0x0145BE, 0x00F981, 0x00F91D, 0x00F99F, 0x00F980, 0x00F984, 0x00F91F, 0x0010BA, 0x00F90D, 0x00F914, 0x00F915, 0x00F932, 0x00F999, 0x00F91B, 0x00F991, 0x00F998, 0x00F993, 0x00F992, 0x00F99D, 0x00F990, 0x00F994, 0x00F910, 0x00F916, 0x00F917, 0x00F99B, 0x00F99A, 0x00F99E, 0x00F995, 0x00F996, 0x00F997, 0x00F988, 0x00F906, 0x00F982, 0x00F93E, 0x00F901, 0x00F903, 0x00F9A2, 0x00F9BD, 0x00F91C, 0x00F90E, 0x00F9BE, 0x00F98B, 0x00F9AD, 0x00F905, 0x00F912, 0x00F9AE, 0x00F919, 0x00F985, 0x00F90B, 0x00F987, 0x00F9A0, 0x00F93A, 0x00F9A3, 0x00F904, 0x00F918, 0x00F91E, 0x00F91A, 0x00F9BC, 0x00F99C, 0x00F989, 0x00F98A, 0x00F98F, 0x00F92E, 0x00F9C7, 0x001433, 0x00F94A, 0x00F93D, 0x00F9C0, 0x00F9D1, 0x00F93F, 0x00F92B, 0x00F909, 0x00F9CD, 0x00F913, 0x00F90C, 0x00F9CE, 0x00F9C4, 0x00F92F, 0x00F944, 0x00F939, 0x0010B8, 0x00F9C6, 0x00F9DD, 0x00F9DB, 0x00F9D4, 0x00F9D3, 0x00F9D2, 0x00F9DC, 0x00F9E8, 0x001174, 0x00F938, 0x001403, 0x00F9C5, 0x00A872, 0x00F9C1, 0x00F9A1, 0x00F9C3, 0x00F9A7, 0x0010B9, 0x00F94F, 0x00F9C2, 0x00F9E3, 0x00F9CB, 0x00F9EB, 0x00F953, 0x00F920, 0x00F9E0, 0x00F9CC, 0x00F9EF, 0x00F923, 0x00F931, 0x00F9F5, 0x00F934, 0x00F933, 0x00F9E4, 0x014617, 0x00F9E2, 0x00F93B, 0x00F9FC, 0x00F936, 0x00F9EA, 0x00F9AB, 0x00F935, 0x00F9E9, 0x00F937, 0x00F9E6, 0x001402, 0x00FA98, 0x014607, 0x001432, 0x00FA9A, 0x01461B, 0x01460E, 0x001406, 0x001080, 0x00FA9F, 0x00140D, 0x00141C, 0x00141D, 0x001437, 0x014615, 0x01461A, 0x00FA9B, 0x00141E, 0x00141F, 0x00FA97, 0x00FA90, 0x001407, 0x001401, 0x00108E, 0x00FA86, 0x014612, 0x014613, 0x014610, 0x014611, 0x00FA95, 0x00FA96, 0x001404, 0x014616, 0x00140B, 0x014601, 0x0144A0, 0x0144A1, 0x0144A2, 0x001405, 0x0144A4, 0x0144A5, 0x00FA88, 0x0144A7, 0x0144A8, 0x00140F, 0x01460B, 0x00143A, 0x0144AC, 0x0144AD, 0x00FA9D, 0x0144AF, 0x0010B3, 0x00FA9E, 0x00FA8B, 0x014619, 0x014618, 0x00140A, 0x0010BB, 0x00FA80, 0x014606, 0x014603, 0x00FA9C, 0x00FAB3, 0x0144BC, 0x0144BD, 0x01461F, 0x0144BF, 0x0144C0, 0x0144C1, 0x0144C2, 0x0144C3, 0x0144C4, 0x00FA83, 0x0144C6, 0x0010B4, 0x0144C8, 0x0144C9, 0x0010B5, 0x0144CB, 0x0144CC, 0x0144CD, 0x0144CE, 0x0144CF, 0x0144D0, 0x0144D1, 0x0144D2, 0x0144D3, 0x0144D4, 0x01461E, 0x0144D6, 0x0144D7, 0x0144D8, 0x0144D9, 0x0010B6, 0x0010B7, 0x0144DC, 0x0144DD, 0x0144DE, 0x0144DF, 0x0144E0, 0x0144E1, 0x0144E2, 0x0144E3, 0x0144E4, 0x0144E5, 0x0144E6, 0x0144E7, 0x0144E8, 0x0144E9, 0x0144EA, 0x0144EB, 0x0010B0, 0x0010B1, 0x0010B2, 0x0144EF, 0x0144F0, 0x0144F1, 0x0144F2, 0x0144F3, 0x0144F4, 0x0144F5, 0x0144F6, 0x0144F7, 0x0144F8, 0x0144F9, 0x0144FA, 0x0144FB, 0x0144FC, 0x0144FD, 0x0144FE, 0x0144FF, 0x001408, 0x001409, 0x014608, 0x001426, 0x014626, 0x014605, 0x014604, 0x00A467, 0x01460C, 0x014609, 0x01460A, 0x01460F, 0x00140C, 0x01460D, 0x00140E, 0x00143C, 0x014625, 0x001455, 0x001450, 0x01463A, 0x014600, 0x001423, 0x014602, 0x014630, 0x01461C, 0x01461D, 0x001427, 0x01462F, 0x001422, 0x00142A, 0x00142B, 0x001421, 0x001429, 0x001420, 0x014627, 0x01462A, 0x014525, 0x001431, 0x001430, 0x014524, 0x01452A, 0x001435, 0x001436, 0x00143D, 0x00143F, 0x001439, 0x00143E, 0x01452F, 0x001438, 0x001457, 0x001434, 0x00143B, 0x014633, 0x014637, 0x014632, 0x00144F, 0x01463D, 0x014634, 0x01463B, 0x014631, 0x014636, 0x01463E, 0x01463F, 0x014635, 0x014544, 0x01462B, 0x00A860, 0x00A861, 0x00A862, 0x00A863, 0x014545, 0x00A844, 0x014646, 0x01454D, 0x001453, 0x01454A, 0x00A871, 0x00144E, 0x01454E, 0x014643, 0x00A870, 0x00A47A, 0x00A461, 0x001456, 0x00142C, 0x014642, 0x00A44D, 0x00A460, 0x001451, 0x01455A, 0x001424, 0x001425, 0x001428, 0x00142D, 0x00142E, 0x00142F, 0x00A44C, 0x014629, 0x00A47B, 0x00145B, 0x001452, 0x014621, 0x014622, 0x014623, 0x014568, 0x014569, 0x014624, 0x00A475, 0x014620, 0x00144D, 0x00FA94, 0x01456F, 0x001472, 0x00A472, 0x014572, 0x014573, 0x00144C, 0x014641, 0x00A474, 0x00A47E, 0x014578, 0x00FA84, 0x014638, 0x014639, 0x01463C, 0x001459, 0x001458, 0x00FAD2, 0x00FAD1, 0x0010A1, 0x0010A0, 0x014644, 0x0010A5, 0x014645, 0x00FAC5, 0x00FACA, 0x0010AA, 0x0010AB, 0x00ABBE, 0x00FAC9, 0x014640, 0x00ABBF, 0x00ABB4, 0x00ABB5, 0x00ABA3, 0x0010A4, 0x0010BE, 0x0010BF, 0x014590, 0x00ABA2, 0x014592, 0x014593, 0x00ABA0, 0x00ABA1, 0x00A864, 0x0010A3, 0x00A86A, 0x0010A2, 0x00F921, 0x00F922, 0x00A464, 0x00F924, 0x00F925, 0x00F926, 0x00F927, 0x001471, 0x00F929, 0x00F92A, 0x00A86B, 0x00F92C, 0x00F92D, 0x001470, 0x0010BC, 0x00ABB8, 0x00151A, 0x00FA13, 0x00FB93, 0x0010BD, 0x01462E, 0x001175, 0x001454, 0x00ABBB, 0x00FAAD, 0x00ABB9, 0x00ABBA, 0x00F93C, 0x00145A, 0x00A47C, 0x014628, 0x00F940, 0x00F941, 0x00F942, 0x00F943, 0x00A47D, 0x00F945, 0x00F946, 0x00F947, 0x00F948, 0x00F949, 0x00A46A, 0x00F94B, 0x00F94C, 0x00F94D, 0x00F94E, 0x00FAD3, 0x00F950, 0x00F951, 0x00F952, 0x00A466, 0x00F954, 0x00F955, 0x00F956, 0x00F957, 0x00A465, 0x00F959, 0x00A865, 0x00F95B, 0x00F95C, 0x00F95D, 0x00F95E, 0x00A46B, 0x00F960, 0x00F961, 0x00F962, 0x00F963, 0x00F964, 0x00F965, 0x00F966, 0x00F967, 0x00F968, 0x00F969, 0x00F96A, 0x00F96B, 0x00F96C, 0x00F96D, 0x00F96E, 0x00F96F, 0x00F970, 0x00F971, 0x00F972, 0x00F973, 0x00F974, 0x00F975, 0x00F976, 0x00F977, 0x00F978, 0x00F979, 0x00F97A, 0x00F97B, 0x00F97C, 0x00F97D, 0x00F97E, 0x00F97F, 0x01462D, 0x01462C, 0x001250, 0x00121F, 0x001255, 0x00FA81, 0x00FA82, 0x00FA8D, 0x00FA8C, 0x00FAAB, 0x00FA8A, 0x00FA89, 0x001237, 0x001218, 0x00FA8E, 0x00FA8F, 0x00121A, 0x00FA85, 0x00FAB5, 0x00FA87, 0x001219, 0x00ABB0, 0x00FABF, 0x001206, 0x00FAAC, 0x001202, 0x001203, 0x001200, 0x001201, 0x001207, 0x00120A, 0x00FAAA, 0x00FAA3, 0x00FAA4, 0x00120B, 0x0016A8, 0x00125B, 0x001205, 0x00FAAF, 0x00FAA2, 0x00121C, 0x001204, 0x00F9A9, 0x00F9AA, 0x00F9AC, 0x00F9AF, 0x00121D, 0x00121E, 0x00FABA, 0x00FABB, 0x00FAB2, 0x00FAB7, 0x00FAB9, 0x00FAB1, 0x00FAB4, 0x00FAB0, 0x001251, 0x00FAB8, 0x001222, 0x001221, 0x00FAB6, 0x00FABC, 0x001220, 0x001208, 0x001209, 0x00120C, 0x00FAA8, 0x00120E, 0x00120D, 0x00FACB, 0x00120F, 0x001253, 0x001226, 0x00F9CA, 0x001227, 0x0016AF, 0x00FAC0, 0x00F9C9, 0x00F9CF, 0x001225, 0x00FAC7, 0x001256, 0x00ABB6, 0x001252, 0x00122F, 0x00122A, 0x00122B, 0x001238, 0x001239, 0x00123A, 0x001223, 0x00123D, 0x00F9DF, 0x001234, 0x00123C, 0x00123E, 0x00ABB7, 0x00FAA1, 0x00FAA6, 0x00FAA7, 0x00FAA0, 0x00123F, 0x00FAAE, 0x00FAA9, 0x001232, 0x00FAA5, 0x001233, 0x001236, 0x00F9EC, 0x00F9ED, 0x00F9EE, 0x001231, 0x00F9F0, 0x001230, 0x00FAC6, 0x00F9F3, 0x00123B, 0x001235, 0x00F9F2, 0x00F9F7, 0x001711, 0x001710, 0x00FA6A, 0x00FA69, 0x00FABE, 0x00F9FD, 0x001682, 0x00FABD, 0x00168F, 0x00FB83, 0x001683, 0x00AB89, 0x001681, 0x001687, 0x00168B, 0x001685, 0x0016B5, 0x001689, 0x00FD27, 0x001684, 0x00AB9E, 0x001686, 0x001518, 0x001699, 0x001698, 0x0016BB, 0x00169A, 0x001688, 0x0016B4, 0x00168A, 0x001613, 0x001260, 0x00126A, 0x00126B, 0x00126C, 0x001224, 0x001269, 0x00168C, 0x00122C, 0x001228, 0x001229, 0x00168E, 0x00168D, 0x001265, 0x00122D, 0x001264, 0x00122E, 0x00AB84, 0x0016BA, 0x001279, 0x0016B7, 0x0016BE, 0x001278, 0x0016B3, 0x0016B2, 0x0016B1, 0x001268, 0x0016B8, 0x00179A, 0x0016B0, 0x0016B6, 0x0016BD, 0x0016B9, 0x001274, 0x001519, 0x001242, 0x001243, 0x00124D, 0x001275, 0x00AB88, 0x00127A, 0x001240, 0x001241, 0x00124A, 0x00124B, 0x00AB8E, 0x00AB8F, 0x00ABB1, 0x0016A4, 0x001246, 0x001247, 0x001270, 0x00127B, 0x001254, 0x001248, 0x00ABB3, 0x001277, 0x001258, 0x001276, 0x00125A, 0x00ABB2, 0x00125C, 0x00125D, 0x001244, 0x001245, 0x00126E, 0x0016A2, 0x00AB8C, 0x00AB8D, 0x001267, 0x0016A1, 0x001271, 0x0016AA, 0x00126F, 0x0016A9, 0x0016A3, 0x001263, 0x00124C, 0x0016AB, 0x001262, 0x0016AD, 0x001273, 0x00FD25, 0x0016A0, 0x0016A7, 0x001272, 0x0016BC, 0x001266, 0x001261, 0x00127C, 0x00FD54, 0x00FB81, 0x00126D, 0x00127E, 0x00127D, 0x00127F, 0x0016BF, 0x001701, 0x001700, 0x001703, 0x001702, 0x001705, 0x001704, 0x001707, 0x001706, 0x001709, 0x001708, 0x00170B, 0x00170A, 0x0016C4, 0x00170C, 0x00170F, 0x00170E, 0x0016E2, 0x0016E1, 0x00FD7B, 0x00FD7A, 0x0016C5, 0x00FD74, 0x00FD2D, 0x00FD2E, 0x00FD5E, 0x00FB98, 0x00161A, 0x0016E3, 0x00FB99, 0x001619, 0x00FD5D, 0x00161F, 0x001722, 0x001720, 0x001723, 0x00FB9A, 0x001727, 0x001721, 0x001724, 0x001725, 0x001729, 0x001728, 0x00172B, 0x00172A, 0x00172D, 0x00172C, 0x001726, 0x00172E, 0x001731, 0x001730, 0x00FD28, 0x00FD29, 0x00FD2B, 0x00FD24, 0x00FD2C, 0x00FD2F, 0x00FD2A, 0x0016E9, 0x0016EA, 0x00FD62, 0x00FD63, 0x00FB9E, 0x00FD68, 0x00172F, 0x0016C2, 0x00FD6C, 0x00116A, 0x00116B, 0x00174C, 0x0016C1, 0x00174F, 0x00114E, 0x00FB9F, 0x001748, 0x001749, 0x00174A, 0x001164, 0x001165, 0x00174D, 0x00174E, 0x001751, 0x001750, 0x0016D2, 0x0016D0, 0x0016D1, 0x00FB9D, 0x0016D7, 0x0016D6, 0x00117B, 0x00FD6A, 0x0016DB, 0x0016D3, 0x00117A, 0x0016D9, 0x00FD6E, 0x00FD52, 0x001763, 0x001310, 0x00FD5B, 0x001762, 0x0016C0, 0x001761, 0x001760, 0x00FD5A, 0x0016F8, 0x00FD5C, 0x00FD71, 0x0016E7, 0x0016C6, 0x0016C7, 0x00161E, 0x001767, 0x0016D8, 0x001618, 0x0016DC, 0x0016DD, 0x0016D4, 0x0016D5, 0x0016DE, 0x0016CB, 0x0016DA, 0x00FD50, 0x00FD53, 0x00FD58, 0x00FA99, 0x00FD78, 0x00FD5F, 0x0016DF, 0x0013E0, 0x00FD56, 0x00FD51, 0x0016AE, 0x00FD55, 0x0013E6, 0x00FD59, 0x0013E7, 0x00FD57, 0x00F900, 0x00FD04, 0x00F902, 0x00FD0A, 0x00FD0F, 0x00FD09, 0x00FD00, 0x00F907, 0x00F90F, 0x00F908, 0x00F90A, 0x00FD1E, 0x00FD08, 0x00FD1D, 0x00FD0B, 0x00FD1F, 0x00FD11, 0x00FD18, 0x00FD13, 0x00FD12, 0x0013ED, 0x00FD01, 0x00FD1A, 0x00FD03, 0x00FD1C, 0x00FD02, 0x0013A2, 0x00116C, 0x00FD14, 0x001602, 0x00FD1B, 0x00116D, 0x00FD06, 0x00116E, 0x001611, 0x00FD07, 0x00FD0D, 0x001615, 0x00FC13, 0x0013A0, 0x0013A1, 0x00F928, 0x00FD0E, 0x0013B4, 0x0013E1, 0x00FD0C, 0x001653, 0x00FD05, 0x00F930, 0x0013BA, 0x0013B9, 0x00FD31, 0x00FD32, 0x00FD36, 0x0013BE, 0x0013CE, 0x00FD33, 0x0013C2, 0x0013C3, 0x0013F8, 0x0013C5, 0x00FD37, 0x0013C7, 0x00FC9B, 0x00FCA4, 0x001617, 0x0013C1, 0x0013C0, 0x0013CF, 0x0013CB, 0x00161B, 0x0013F1, 0x0013D4, 0x0013F0, 0x0013F9, 0x0013F5, 0x0013D5, 0x00161D, 0x00116F, 0x0013DC, 0x0013C9, 0x0013C8, 0x0013FB, 0x0013DE, 0x0013DF, 0x0013FA, 0x00FD3D, 0x001603, 0x0016AC, 0x001601, 0x00F95A, 0x00F958, 0x00F95F, 0x00FC96, 0x0016C3, 0x0013D8, 0x0013FC, 0x00FC10, 0x00FD22, 0x0013CD, 0x00FD26, 0x00FC9C, 0x0013CC, 0x0013DA, 0x0013DB, 0x00160B, 0x00FC17, 0x00FD39, 0x00FD38, 0x0013D9, 0x00FD23, 0x0013E2, 0x00FD30, 0x0013E3, 0x0013F3, 0x00161C, 0x0013FD, 0x00FC95, 0x0013F2, 0x00FC94, 0x00FD3B, 0x00FC9A, 0x00FD3C, 0x00FC12, 0x00FD35, 0x00FD34, 0x00FD3A, 0x00FC11, 0x00FD81, 0x00FD80, 0x00FD83, 0x00FD82, 0x00FD85, 0x00FC14, 0x00FD87, 0x00FC69, 0x00FD89, 0x001983, 0x00FC1C, 0x00FD8A, 0x001981, 0x00FC04, 0x00FC1A, 0x00199C, 0x00FC90, 0x00FC15, 0x00FC2B, 0x00FC93, 0x00198B, 0x00FD94, 0x00FC92, 0x00198A, 0x00FD99, 0x00FD98, 0x00FD9B, 0x00FD9A, 0x00FD9D, 0x00FD9C, 0x00FD9F, 0x00FD9E, 0x00FDA1, 0x001982, 0x00FDA3, 0x00FDA2, 0x00FDA5, 0x00FD21, 0x00FDA7, 0x00FDA6, 0x00FDA9, 0x00FC03, 0x00FC18, 0x00FDAA, 0x001987, 0x001980, 0x00FC64, 0x00FC19, 0x00FDA0, 0x0019B3, 0x0019D3, 0x00FC1B, 0x00199D, 0x00FDB4, 0x00FC16, 0x00FDBF, 0x00FDB9, 0x00FDBB, 0x001985, 0x00FDB8, 0x00FDBE, 0x00FDBC, 0x00FDBA, 0x00FDBD, 0x00FDC1, 0x00FDC2, 0x00FDC3, 0x001986, 0x001984, 0x00FDC6, 0x00FDC7, 0x00FC0A, 0x00FC0C, 0x00FDC0, 0x00198F, 0x00198C, 0x00FC24, 0x00FDC5, 0x00198E, 0x001988, 0x001989, 0x00FC01, 0x00FC02, 0x00198D, 0x00FC1D, 0x00FC1F, 0x00FC0B, 0x00FC06, 0x00FC1E, 0x00FC6A, 0x00F9D6, 0x00FD20, 0x00FC00, 0x00FC05, 0x00FC07, 0x0019A2, 0x00FCE8, 0x0019BA, 0x0019D2, 0x00FC33, 0x00FCE4, 0x00FC6B, 0x0019B2, 0x00FC97, 0x00FD64, 0x00FCE9, 0x00FCEA, 0x00FCEB, 0x00FCEE, 0x00FCED, 0x00FCEC, 0x00FCEF, 0x00FDF8, 0x00FC3B, 0x00F9F6, 0x0019B1, 0x00F9F4, 0x00F9D5, 0x0019BB, 0x00FDF4, 0x00FC91, 0x00F9F8, 0x00FDFB, 0x00F9FB, 0x0017A7, 0x00F9FF, 0x00FDFA, 0x00FDF9, 0x00FC08, 0x00189E, 0x00FC0E, 0x0017A4, 0x00FC0D, 0x00FC0F, 0x0017A6, 0x001990, 0x001991, 0x001992, 0x001993, 0x001994, 0x0017AB, 0x001996, 0x001995, 0x00FC09, 0x00199B, 0x001899, 0x00189A, 0x001912, 0x001898, 0x00189D, 0x001997, 0x0018A3, 0x001880, 0x001911, 0x001883, 0x0018BD, 0x001887, 0x0018BF, 0x0018BC, 0x0018B8, 0x0018B9, 0x0018BA, 0x00FC22, 0x00FC23, 0x0018BE, 0x00FC21, 0x00199A, 0x00189C, 0x00FC28, 0x00FC29, 0x00FC2A, 0x00189F, 0x00FC3C, 0x00FC2D, 0x00FC2E, 0x00FC2F, 0x0017A5, 0x00FC3D, 0x00FB94, 0x00FC32, 0x00FB95, 0x00FC30, 0x00FC34, 0x00FC31, 0x00FC38, 0x00FC3E, 0x00FC39, 0x00FC3A, 0x00FC35, 0x00FC3F, 0x00FC37, 0x00FC36, 0x0018DD, 0x00FC41, 0x00FC42, 0x0018D6, 0x0018DE, 0x0018DF, 0x0018D7, 0x0018D1, 0x0018DB, 0x0018D3, 0x0018D2, 0x00FB9B, 0x0018D0, 0x0018D5, 0x0018D8, 0x0018DA, 0x001913, 0x00FC51, 0x00FC52, 0x00FC53, 0x00FC54, 0x0018D9, 0x00FC5E, 0x0018A1, 0x00FC58, 0x00FC59, 0x00199E, 0x00FC5B, 0x0018C1, 0x00FC5D, 0x00FC5A, 0x00FC5F, 0x0018A0, 0x0018AA, 0x0018A8, 0x0018C7, 0x0018A7, 0x00199F, 0x0018C3, 0x001999, 0x00FC68, 0x00FC6D, 0x00FC6E, 0x0018C0, 0x0018D4, 0x001998, 0x00FC6C, 0x00FC6F, 0x0018F2, 0x0018C9, 0x0018F3, 0x0018DC, 0x0018C8, 0x001910, 0x0018CA, 0x001902, 0x001785, 0x00178E, 0x00178C, 0x00178B, 0x00178D, 0x001787, 0x001786, 0x001909, 0x00178F, 0x00178A, 0x001903, 0x001788, 0x001784, 0x001901, 0x001789, 0x00FEE4, 0x0017B1, 0x001900, 0x001819, 0x001904, 0x00190D, 0x00190B, 0x001907, 0x00191A, 0x001852, 0x001918, 0x001919, 0x00191D, 0x00191C, 0x001857, 0x00191E, 0x00183D, 0x0017B3, 0x001823, 0x0018E4, 0x001834, 0x00183E, 0x001821, 0x001822, 0x0017B2, 0x001908, 0x00190A, 0x00182B, 0x00190C, 0x001820, 0x00190F, 0x00190E, 0x00183F, 0x00FF68, 0x00FF69, 0x001832, 0x001831, 0x001830, 0x00FF6D, 0x001833, 0x00FF6F, 0x001818, 0x00183A, 0x001838, 0x001839, 0x001837, 0x001835, 0x001836, 0x00194C, 0x0018EB, 0x00194A, 0x00FF7D, 0x00195C, 0x00194D, 0x00194E, 0x0018F4, 0x001959, 0x00FB90, 0x00194B, 0x001949, 0x00195E, 0x00195D, 0x00FF4A, 0x00FB96, 0x00FB97, 0x001952, 0x001951, 0x0017B0, 0x001950, 0x001953, 0x001954, 0x001956, 0x0018CE, 0x00FF49, 0x00FF47, 0x001957, 0x001955, 0x00195B, 0x00195A, 0x00FF7C, 0x0018E3, 0x001971, 0x0017A3, 0x0018E2, 0x0018E1, 0x0018F5, 0x0017A2, 0x00FF4E, 0x0018CC, 0x0018F0, 0x00FF45, 0x0017A1, 0x0018E7, 0x0018CD, 0x0017A0, 0x00FF46, 0x0018E0, 0x00FF6A, 0x00FF79, 0x001972, 0x0018EE, 0x0018E5, 0x0018E6, 0x00FF7E, 0x00FF7F, 0x0018ED, 0x00FF6E, 0x00FF66, 0x00FF78, 0x001974, 0x0018F1, 0x001973, 0x00FF74, 0x001824, 0x001812, 0x00FF7B, 0x00FF6B, 0x001873, 0x00FF67, 0x00FF4D, 0x00FF7A, 0x001829, 0x001815, 0x00FEA2, 0x00FF17, 0x00182D, 0x00179C, 0x00FEA6, 0x001798, 0x00179D, 0x00183C, 0x001811, 0x00FE8C, 0x00FF2D, 0x00179E, 0x00179F, 0x00FEAE, 0x00FEA0, 0x00FF12, 0x00FF13, 0x001799, 0x00FF11, 0x00FF16, 0x00182F, 0x00FEA4, 0x00FEBD, 0x001856, 0x001827, 0x00FEB5, 0x001825, 0x001826, 0x00FEAC, 0x001F72, 0x00FEAA, 0x00FF31, 0x00FF32, 0x00FF33, 0x00FF37, 0x00FF24, 0x00FF2C, 0x001783, 0x001782, 0x00FF30, 0x00FF2B, 0x00FF2A, 0x00FF29, 0x00FF2E, 0x00FF35, 0x00FF36, 0x00FF28, 0x001781, 0x00FEC4, 0x00183B, 0x00FF14, 0x00FF2F, 0x00FEA9, 0x00FF34, 0x00FF19, 0x00FF15, 0x00FF18, 0x00FF10, 0x00FEB8, 0x001872, 0x00FEBE, 0x00FEBF, 0x00FF4B, 0x00FF50, 0x00FF56, 0x00185E, 0x00FF57, 0x00FED7, 0x001850, 0x001810, 0x001858, 0x00185D, 0x00185A, 0x001814, 0x00FF44, 0x001816, 0x001817, 0x001859, 0x00FED0, 0x00FF53, 0x001851, 0x00FED2, 0x00FE7A, 0x00FF52, 0x00185F, 0x001853, 0x00FED1, 0x00FED6, 0x00FED3, 0x00FEAF, 0x00182C, 0x00182E, 0x00FF51, 0x00182A, 0x00185B, 0x00FEA3, 0x00FF21, 0x00FF23, 0x001849, 0x001828, 0x00FEC2, 0x00FEA1, 0x001841, 0x001780, 0x00FEDA, 0x001855, 0x00FEA5, 0x00FF59, 0x00FE7B, 0x00FEA7, 0x00FF39, 0x00FF42, 0x00FF38, 0x00FF58, 0x00FF41, 0x00FF55, 0x00FF43, 0x0010C0, 0x00FF54, 0x0010C4, 0x0010C5, 0x00FF3A, 0x0010C7, 0x00FE74, 0x00FF5A, 0x00FECB, 0x00FE84, 0x00FF9C, 0x00FE88, 0x00FF82, 0x0010CD, 0x00FE8E, 0x00FE8F, 0x0010F1, 0x00FF98, 0x0010F0, 0x00FE8B, 0x00FF99, 0x00FE89, 0x00FF9D, 0x0010F7, 0x00FE8A, 0x00FF92, 0x00FF93, 0x0010F6, 0x00FF91, 0x00FF95, 0x00FF9A, 0x00FF97, 0x00FF96, 0x00FE92, 0x00FF9B, 0x0010F3, 0x0010F5, 0x00FF94, 0x00FE8D, 0x00FF86, 0x0010F2, 0x00FF81, 0x00FF80, 0x00FFA4, 0x00FF83, 0x00FFA8, 0x00FF85, 0x00FF87, 0x00FFAE, 0x00FFAB, 0x00FFAA, 0x00FFAC, 0x00FEB6, 0x00FEB7, 0x00FFA9, 0x00FFAF, 0x00FFAD, 0x00FE91, 0x001A12, 0x00FEB1, 0x00FEB3, 0x00FEB9, 0x00FEB4, 0x001A10, 0x00FEB2, 0x001BE4, 0x001A02, 0x001A03, 0x001A01, 0x00FEBC, 0x00FEBA, 0x00FEBB, 0x00FEB0, 0x00FFC2, 0x0010C3, 0x00147B, 0x00FFD2, 0x00FFCD, 0x00FFD7, 0x00FFD6, 0x001474, 0x00FFC4, 0x00FFC5, 0x00FFCB, 0x00FFC3, 0x0010DE, 0x00FFD5, 0x00FFC6, 0x00FFC7, 0x0010D9, 0x0010D8, 0x0010DF, 0x0010DC, 0x0010DD, 0x001A11, 0x001473, 0x00FFD3, 0x00FE7D, 0x001A13, 0x00FFCA, 0x001BE5, 0x001A16, 0x00FFDC, 0x001BE0, 0x001A14, 0x00FEAB, 0x00FEA8, 0x001A15, 0x00FEEB, 0x00FEEE, 0x001448, 0x00FEEA, 0x014464, 0x014465, 0x014466, 0x00FEE8, 0x0010C2, 0x014469, 0x01446A, 0x014468, 0x01446C, 0x01446D, 0x01446E, 0x01446F, 0x001A07, 0x00FEED, 0x00FEEF, 0x0010C1, 0x001A00, 0x0010A9, 0x0010A8, 0x0010AF, 0x001B90, 0x00FEEC, 0x00FEE9, 0x00FE79, 0x00FE7E, 0x001A98, 0x0010D6, 0x001B9B, 0x001B96, 0x001B94, 0x0010AD, 0x001A82, 0x001A81, 0x0010D1, 0x001A83, 0x0010D3, 0x0010D2, 0x001B97, 0x001A80, 0x001A87, 0x001A99, 0x0010AE, 0x001B92, 0x0010D7, 0x0010D0, 0x001B91, 0x001A86, 0x001B95, 0x001A08, 0x001A05, 0x010099, 0x001A85, 0x0010A6, 0x0010A7, 0x001A06, 0x001A04, 0x0100AA, 0x001A09, 0x001A0B, 0x010082, 0x001A0A, 0x001A0D, 0x010083, 0x010086, 0x001A84, 0x001A3A, 0x010081, 0x0100A4, 0x0100B4, 0x001A21, 0x010013, 0x0100BA, 0x001A0C, 0x010080, 0x010085, 0x0100B0, 0x001A23, 0x001A3F, 0x001A0E, 0x001A0F, 0x010087, 0x0100B3, 0x001A25, 0x01009E, 0x001A26, 0x0010DB, 0x01009C, 0x01009D, 0x01009F, 0x010088, 0x010011, 0x001A2B, 0x001A24, 0x01008D, 0x010084, 0x001BE1, 0x001A2F, 0x001A28, 0x01008B, 0x01008A, 0x01008C, 0x0010D5, 0x010089, 0x01008E, 0x01008F, 0x001A29, 0x001A2A, 0x0100A2, 0x0100A3, 0x001A53, 0x0100BD, 0x0010D4, 0x001A20, 0x0100A1, 0x0100BE, 0x001A22, 0x001A51, 0x0100BC, 0x0100BF, 0x001A27, 0x0100A0, 0x001A3D, 0x001BE3, 0x0100B6, 0x001A3C, 0x0010AC, 0x0100B5, 0x010012, 0x001A32, 0x001A31, 0x001A33, 0x0010DA, 0x001A30, 0x001A35, 0x001A36, 0x001BE2, 0x001A38, 0x001A39, 0x0100B1, 0x0100B2, 0x001A3B, 0x001A34, 0x001A3E, 0x001A37, 0x0100B7, 0x0100B8, 0x0100B9, 0x0100BB, 0x001004, 0x001005, 0x00100E, 0x00100F, 0x001008, 0x01001C, 0x00100B, 0x0102CD, 0x00100C, 0x00100D, 0x0102F9, 0x0102C6, 0x001914, 0x001915, 0x01001A, 0x0102FB, 0x001014, 0x001015, 0x001916, 0x001917, 0x001018, 0x00191B, 0x0102E2, 0x00101B, 0x010014, 0x0102F8, 0x00101E, 0x00101F, 0x0102C4, 0x0102E7, 0x0102E1, 0x001023, 0x001024, 0x001025, 0x001022, 0x0102F4, 0x001026, 0x001021, 0x001020, 0x001027, 0x001A2E, 0x001A2D, 0x00102A, 0x001028, 0x001B31, 0x0102E3, 0x001F3C, 0x001B32, 0x001F34, 0x001F3F, 0x0102A5, 0x0102A6, 0x0102A7, 0x001F39, 0x001F3A, 0x001F38, 0x001A2C, 0x001F3D, 0x0102FA, 0x00103F, 0x001044, 0x001A43, 0x001042, 0x001043, 0x001045, 0x001A41, 0x001A42, 0x001A47, 0x001A4A, 0x001049, 0x001A40, 0x001048, 0x001A4F, 0x001A4B, 0x001A46, 0x001A45, 0x001050, 0x0100ED, 0x001052, 0x001053, 0x001054, 0x001055, 0x001A52, 0x001A49, 0x001A50, 0x001A54, 0x00105B, 0x001A44, 0x00105C, 0x010094, 0x00105A, 0x01001E, 0x001061, 0x0102CB, 0x01001B, 0x0102C3, 0x01009B, 0x001065, 0x010018, 0x001066, 0x01009A, 0x001A48, 0x001A4D, 0x001A4C, 0x010098, 0x001A4E, 0x00106E, 0x00106F, 0x001070, 0x001078, 0x00107E, 0x0100E4, 0x001075, 0x001076, 0x00107F, 0x001077, 0x001F3E, 0x00107A, 0x001079, 0x00107B, 0x00107C, 0x00107D, 0x0100E8, 0x0100EE, 0x0100EF, 0x010003, 0x0102C2, 0x0102CE, 0x0100EB, 0x0100EA, 0x001F25, 0x0102C1, 0x0100E9, 0x010111, 0x010000, 0x010002, 0x001F24, 0x001F2A, 0x010114, 0x001F2B, 0x01011F, 0x010118, 0x001F29, 0x01001D, 0x01011A, 0x010001, 0x01001F, 0x001F28, 0x010119, 0x01016E, 0x01016D, 0x010006, 0x010112, 0x010019, 0x010164, 0x01011B, 0x0019A1, 0x0019A3, 0x0019A5, 0x0019A0, 0x0019A6, 0x01016F, 0x001F22, 0x0019A7, 0x0019A4, 0x0019A9, 0x0019AA, 0x001F21, 0x0019A8, 0x010005, 0x01016A, 0x001F20, 0x010007, 0x001F26, 0x01011D, 0x001F27, 0x0019BD, 0x0019BC, 0x0019B0, 0x0019BE, 0x0019B9, 0x0019B5, 0x0019BF, 0x0019AB, 0x0019B6, 0x0019B4, 0x0019B8, 0x0019B7, 0x0019C0, 0x01011E, 0x0019C2, 0x0019C3, 0x0019C4, 0x0019C1, 0x0019C6, 0x0019C7, 0x0019C8, 0x0019C9, 0x001F54, 0x001F41, 0x01016B, 0x0019C5, 0x001F5B, 0x010169, 0x0019D0, 0x0019D1, 0x001F53, 0x001F51, 0x0019D4, 0x0019D5, 0x0019D6, 0x0019D7, 0x0019D8, 0x0019D9, 0x0019DA, 0x001F52, 0x001F50, 0x001F55, 0x001F56, 0x001F57, 0x001F40, 0x001F43, 0x0010E2, 0x0010E3, 0x0010E4, 0x001F45, 0x001F44, 0x001F48, 0x001F42, 0x001F49, 0x0010EA, 0x0010EB, 0x001F2C, 0x001F2D, 0x001F2E, 0x001F2F, 0x001B93, 0x001F73, 0x001F4A, 0x001F4B, 0x0010F4, 0x001F4D, 0x001F4C, 0x001F71, 0x0010F8, 0x0010F9, 0x0010FA, 0x001F59, 0x001F5D, 0x001F5F, 0x0010FE, 0x0010FF, 0x001C01, 0x001C00, 0x001475, 0x001C05, 0x001477, 0x001C04, 0x001C07, 0x00141A, 0x001C09, 0x001C08, 0x001C0B, 0x001C0A, 0x001C0D, 0x001C0C, 0x001C0F, 0x001C0E, 0x001F00, 0x001F01, 0x001F04, 0x01018B, 0x01018A, 0x001F05, 0x001C06, 0x001F07, 0x001F0B, 0x001F30, 0x001F36, 0x001F35, 0x001F0F, 0x001F09, 0x001F06, 0x001F08, 0x001C21, 0x001C20, 0x001C23, 0x001C22, 0x001419, 0x00145F, 0x001F0D, 0x001447, 0x001F31, 0x0100AD, 0x0100A9, 0x001443, 0x001F0E, 0x001F0A, 0x0100A7, 0x0100A6, 0x001490, 0x001491, 0x001492, 0x001493, 0x001494, 0x001495, 0x001496, 0x001497, 0x0100AB, 0x001F32, 0x001F33, 0x00149B, 0x001FFC, 0x001F0C, 0x0100A5, 0x001F23, 0x001FD0, 0x001C40, 0x001C43, 0x001C42, 0x001C5D, 0x001C41, 0x001C5C, 0x001C46, 0x001C45, 0x001FD7, 0x0100C3, 0x0100DD, 0x0100C0, 0x001C5E, 0x001C4F, 0x001C4E, 0x001C51, 0x001C50, 0x001C53, 0x001C52, 0x001C55, 0x001C54, 0x001C57, 0x001C56, 0x001C59, 0x001C58, 0x001C5B, 0x001C5A, 0x0100D9, 0x0100DE, 0x001C5F, 0x0100D4, 0x0100DF, 0x0100D8, 0x001FC3, 0x0100DC, 0x001C47, 0x0100C2, 0x001C44, 0x0100DA, 0x0100DB, 0x0100C1, 0x0100C6, 0x0100C5, 0x001CEC, 0x0100C7, 0x001CEA, 0x001CEE, 0x001C71, 0x001C70, 0x0102E5, 0x001FD6, 0x001CF0, 0x001CF1, 0x001C77, 0x001C76, 0x0102E6, 0x001FD9, 0x001FDA, 0x001FD8, 0x001FF8, 0x001FF9, 0x001FC2, 0x001F3B, 0x0014A9, 0x0014AE, 0x00148F, 0x001C15, 0x001484, 0x001D88, 0x001483, 0x001486, 0x001488, 0x001D89, 0x00148A, 0x001489, 0x00148C, 0x001D80, 0x001D8F, 0x00148D, 0x0014AD, 0x001C11, 0x001C17, 0x001D84, 0x001D86, 0x0014AC, 0x001C12, 0x0014AF, 0x001CEF, 0x001D8D, 0x00149A, 0x00149D, 0x00149C, 0x001C10, 0x00149E, 0x001C13, 0x001C14, 0x0014A1, 0x001C02, 0x0014A3, 0x001C16, 0x0014A0, 0x0014A2, 0x0014DB, 0x001D29, 0x0014A8, 0x0014D1, 0x0014AA, 0x0103A2, 0x001D8C, 0x001D8E, 0x010284, 0x001C1A, 0x0014AB, 0x0014B8, 0x001C82, 0x0014BC, 0x0014BD, 0x001C1B, 0x001C80, 0x0014A5, 0x0014B3, 0x01028D, 0x0014BA, 0x0014D7, 0x0014B9, 0x0014A7, 0x0014BF, 0x01028F, 0x001C83, 0x010293, 0x001C03, 0x01029B, 0x010288, 0x010289, 0x01028A, 0x01028B, 0x001C81, 0x010290, 0x0014DA, 0x01028E, 0x001C1D, 0x001C1F, 0x010296, 0x001C87, 0x0103C8, 0x0103C9, 0x001C1E, 0x0103CB, 0x0103CC, 0x0103CD, 0x0103CE, 0x0103CF, 0x001C19, 0x001C18, 0x010292, 0x010291, 0x010294, 0x001C85, 0x001C86, 0x0014D2, 0x0102A2, 0x0102BD, 0x010297, 0x0102A3, 0x001C84, 0x01028C, 0x0102A0, 0x0102A1, 0x0102BC, 0x0102B1, 0x0102BE, 0x0102BF, 0x0102B6, 0x0102B5, 0x0102B7, 0x001D70, 0x0102B8, 0x001D72, 0x001C88, 0x001D74, 0x001D75, 0x001D76, 0x001D77, 0x0014D3, 0x001CE9, 0x0102B3, 0x001D7B, 0x001C1C, 0x0102B0, 0x010295, 0x0102B2, 0x0014EB, 0x0014CD, 0x001553, 0x0014E6, 0x001D83, 0x001552, 0x0014CE, 0x00153B, 0x001551, 0x010281, 0x010280, 0x010283, 0x010282, 0x010285, 0x0014C8, 0x010287, 0x010286, 0x0014EE, 0x001D81, 0x0014E7, 0x0014E4, 0x00150B, 0x001532, 0x001D8B, 0x0014E9, 0x0014E8, 0x001533, 0x0014EA, 0x0014FC, 0x0014FD, 0x0014EF, 0x0014ED, 0x0014F5, 0x010299, 0x010298, 0x001509, 0x01029A, 0x00150F, 0x01029C, 0x00150E, 0x0014E2, 0x0014E1, 0x0014FF, 0x0014FB, 0x0014E0, 0x0014E3, 0x0102A4, 0x0014FE, 0x0014F1, 0x0102A9, 0x0102A8, 0x0102AB, 0x0102AA, 0x0102AD, 0x0102AC, 0x0102AF, 0x0102AE, 0x00150D, 0x0014F6, 0x0014F4, 0x0014F9, 0x0014F8, 0x0102B4, 0x0014FA, 0x001D82, 0x0102B9, 0x001D87, 0x0102BB, 0x0102BA, 0x0014DF, 0x001D1C, 0x0014F0, 0x00150C, 0x0014DE, 0x0102C0, 0x001D1D, 0x001D03, 0x001D85, 0x001D1E, 0x0102C7, 0x0014F7, 0x0102C9, 0x0102C8, 0x001535, 0x0102CA, 0x001536, 0x001537, 0x0102CF, 0x001534, 0x0014F3, 0x0102D0, 0x001D1A, 0x0014F2, 0x001D19, 0x001D18, 0x001D1F, 0x00152F, 0x001529, 0x0014CB, 0x0014C3, 0x001528, 0x001531, 0x0014C1, 0x001543, 0x0014C4, 0x001541, 0x0014CA, 0x00152A, 0x001530, 0x0014C5, 0x0014C6, 0x0014C7, 0x00152C, 0x001D8A, 0x0014DC, 0x0014CF, 0x0014DD, 0x00152D, 0x00152E, 0x01E864, 0x001538, 0x00153F, 0x01E869, 0x01E868, 0x01E86B, 0x01E86A, 0x01E86D, 0x01E86C, 0x01E86F, 0x01E86E, 0x001D92, 0x0014D8, 0x001413, 0x0014D9, 0x001D90, 0x001D91, 0x001D01, 0x0103CA, 0x001D97, 0x001D0B, 0x001D00, 0x001D95, 0x001D96, 0x001D02, 0x001590, 0x001591, 0x001592, 0x001D0A, 0x001412, 0x001595, 0x001596, 0x001594, 0x001598, 0x001599, 0x00159A, 0x00159B, 0x01039A, 0x001D93, 0x010399, 0x01039B, 0x010360, 0x001D23, 0x001D0C, 0x010383, 0x001D9A, 0x01039C, 0x001D0F, 0x001D0D, 0x001D08, 0x001D09, 0x010381, 0x010382, 0x001D04, 0x001D22, 0x001D0E, 0x001D07, 0x010387, 0x001D94, 0x010380, 0x01031B, 0x010385, 0x010386, 0x001D20, 0x010319, 0x0103B9, 0x010398, 0x001D2A, 0x001D71, 0x0103A3, 0x0103BB, 0x01039D, 0x0103B4, 0x001540, 0x001545, 0x001542, 0x00156B, 0x001544, 0x0014C2, 0x001546, 0x001547, 0x001D98, 0x001410, 0x001416, 0x00154B, 0x00156C, 0x00156D, 0x01031E, 0x01031F, 0x001550, 0x001555, 0x0014D6, 0x00155B, 0x001556, 0x001554, 0x001411, 0x001557, 0x010318, 0x00141B, 0x00155A, 0x01031A, 0x00155C, 0x00155D, 0x00155E, 0x010314, 0x001D21, 0x0014C0, 0x0014D5, 0x001563, 0x001D24, 0x001D25, 0x001D26, 0x001D27, 0x00156F, 0x001568, 0x001569, 0x00156A, 0x00157C, 0x001D99, 0x001D2B, 0x00156E, 0x001567, 0x001560, 0x001561, 0x001562, 0x0014D4, 0x001564, 0x001565, 0x001566, 0x001578, 0x001579, 0x00157A, 0x010362, 0x00157E, 0x00157D, 0x001D28, 0x00157F, 0x0103A1, 0x0103B8, 0x0103BC, 0x010301, 0x0103BA, 0x01031D, 0x0103BD, 0x0103BE, 0x0103BF, 0x001C63, 0x01E892, 0x001C67, 0x01E893, 0x001C4D, 0x001440, 0x01E891, 0x001C68, 0x001C6E, 0x01E910, 0x001C62, 0x001FAC, 0x01E8A5, 0x01E862, 0x01E863, 0x01E8BE, 0x001FAD, 0x001C69, 0x001FE2, 0x001C60, 0x01E8BF, 0x01E90D, 0x01E90C, 0x001C73, 0x001C6A, 0x01E911, 0x01E917, 0x01E913, 0x01E912, 0x01E915, 0x01E914, 0x001415, 0x01E916, 0x01E919, 0x01E918, 0x01E91B, 0x01E91A, 0x001C61, 0x001417, 0x01E91F, 0x01E91E, 0x01E921, 0x01E920, 0x01E923, 0x01E922, 0x01E925, 0x01E924, 0x01E927, 0x01E926, 0x01E929, 0x001C74, 0x01E92B, 0x01E92A, 0x01E92D, 0x01E92C, 0x01E8A3, 0x001C75, 0x01E8BC, 0x001FAE, 0x01E933, 0x01E932, 0x01E92E, 0x01E8CC, 0x01E92F, 0x010396, 0x01036C, 0x0102ED, 0x00145D, 0x01E928, 0x01E93D, 0x01E93C, 0x010397, 0x001414, 0x01E941, 0x01E940, 0x01E943, 0x01E942, 0x010349, 0x01034A, 0x010395, 0x010390, 0x01E801, 0x010393, 0x001FD1, 0x01E87D, 0x001FD2, 0x010392, 0x010391, 0x001C72, 0x01036D, 0x01E950, 0x010394, 0x01E952, 0x01036F, 0x01E8B8, 0x00145E, 0x01E953, 0x01E959, 0x01E958, 0x01E957, 0x010369, 0x010365, 0x010367, 0x010363, 0x010364, 0x001C49, 0x01036A, 0x001418, 0x0102EB, 0x010368, 0x001C48, 0x01036B, 0x0102E4, 0x0102E9, 0x0102EA, 0x0102E8, 0x001FDB, 0x001F37, 0x0102EE, 0x0102EF, 0x01036E, 0x001E83, 0x001E82, 0x01E951, 0x0102EC, 0x01E956, 0x001F93, 0x001F90, 0x001F91, 0x001F85, 0x001F9B, 0x001F97, 0x001F95, 0x001F96, 0x001F86, 0x001F84, 0x001F8A, 0x01E883, 0x01E899, 0x01E896, 0x001F92, 0x01E895, 0x001F8F, 0x001E99, 0x001E98, 0x001F8B, 0x001E9A, 0x001E9D, 0x001E9C, 0x001E9F, 0x001E9E, 0x01E882, 0x01E894, 0x01E88D, 0x01E881, 0x001FA7, 0x01E88C, 0x001F8C, 0x001FB7, 0x01E89C, 0x001F89, 0x01E897, 0x01E890, 0x001F88, 0x01E89D, 0x001F8D, 0x001F8E, 0x001FA1, 0x001FAB, 0x001FB1, 0x01E8B0, 0x01E8B3, 0x001FB3, 0x01E860, 0x001FA6, 0x001FB2, 0x01E865, 0x01E91C, 0x001F94, 0x001FB0, 0x001FA2, 0x001FA3, 0x01E8BD, 0x001FE3, 0x01E8B5, 0x001FFA, 0x001FD3, 0x01E8B1, 0x001FF7, 0x01E89E, 0x01E901, 0x01E902, 0x01E903, 0x01E900, 0x01E898, 0x01E906, 0x01E89B, 0x01E89F, 0x001FF6, 0x01E89A, 0x01E91D, 0x01E880, 0x01E93B, 0x01E861, 0x01E88A, 0x01E93A, 0x01E886, 0x01E904, 0x01E939, 0x01E88B, 0x01E888, 0x01E907, 0x01E885, 0x01E934, 0x01E909, 0x001FA0, 0x01E90B, 0x01E884, 0x001FA4, 0x01E936, 0x001FA5, 0x01E905, 0x0014E5, 0x001FA9, 0x001FBC, 0x001FAA, 0x01E908, 0x01E90A, 0x01E88E, 0x001FBA, 0x01E90F, 0x01E90E, 0x001FB8, 0x01E867, 0x01E931, 0x001FA8, 0x001FBB, 0x001FB6, 0x001FB4, 0x01E8BA, 0x001FAF, 0x001FB9, 0x01E935, 0x0014EC, 0x01E937, 0x01E930, 0x001FBE, 0x01E8CD, 0x01E8B9, 0x01051A, 0x01E8B6, 0x01E8B2, 0x01E8C1, 0x01E8B4, 0x001449, 0x00144A, 0x01E8B7, 0x01E87C, 0x01E8C0, 0x01E8BB, 0x001E94, 0x01E8C4, 0x001E80, 0x001E87, 0x01E866, 0x001E95, 0x00145C, 0x01051C, 0x001E85, 0x001E92, 0x01051E, 0x010518, 0x001E89, 0x001EB2, 0x010502, 0x001E8B, 0x010504, 0x001E8A, 0x010519, 0x010503, 0x001E8C, 0x001ED3, 0x001EB3, 0x001E84, 0x001E8D, 0x001E86, 0x001EA2, 0x001E88, 0x010500, 0x010501, 0x001E18, 0x01050B, 0x001EA3, 0x001E8E, 0x001E8F, 0x010507, 0x010505, 0x001EBC, 0x001EA9, 0x001E97, 0x001EBE, 0x001EBF, 0x010506, 0x001E1A, 0x001EB9, 0x001EBA, 0x010532, 0x010533, 0x001EBD, 0x001EB8, 0x010536, 0x010531, 0x010522, 0x010530, 0x010534, 0x010535, 0x010537, 0x01051D, 0x01053B, 0x01051F, 0x010550, 0x001ED8, 0x001EC2, 0x010551, 0x001E19, 0x001EDE, 0x001EDF, 0x010557, 0x010508, 0x001E96, 0x01050A, 0x010509, 0x01050C, 0x01050D, 0x01050E, 0x01050F, 0x001E9B, 0x001EDA, 0x01055B, 0x010553, 0x001ED9, 0x010524, 0x010552, 0x001C6C, 0x001EA1, 0x001EA0, 0x001EAE, 0x001C6D, 0x001EA5, 0x001EA6, 0x001EA7, 0x001EAA, 0x010520, 0x010523, 0x001EAB, 0x001EA4, 0x001E1E, 0x001EA8, 0x001EAF, 0x010521, 0x001EB1, 0x001EB0, 0x010527, 0x001EB4, 0x001EB5, 0x001EB6, 0x001EB7, 0x001EAC, 0x001E1F, 0x010525, 0x001EBB, 0x001EDD, 0x001EAD, 0x01053D, 0x010526, 0x010556, 0x010538, 0x001E02, 0x01053A, 0x010539, 0x01053C, 0x001E00, 0x01053E, 0x01053F, 0x001E09, 0x01049D, 0x010482, 0x001E0D, 0x010484, 0x001E0B, 0x001E03, 0x010486, 0x001E01, 0x010498, 0x01049A, 0x001E1C, 0x001E1D, 0x001E07, 0x01048B, 0x001E04, 0x010511, 0x010510, 0x010513, 0x010512, 0x010515, 0x010514, 0x010517, 0x010516, 0x010494, 0x01049C, 0x01051B, 0x01049B, 0x001E93, 0x010495, 0x010496, 0x010499, 0x010480, 0x001E0A, 0x001E23, 0x010483, 0x0104A9, 0x001476, 0x001E0F, 0x001E38, 0x001E3C, 0x001E3A, 0x001E33, 0x001E0C, 0x001E3F, 0x001E3E, 0x001E32, 0x001E08, 0x001E39, 0x010481, 0x0104B2, 0x010414, 0x001E3D, 0x001E0E, 0x0104B6, 0x010487, 0x0104B5, 0x0104B1, 0x0104B0, 0x0104B3, 0x0104B4, 0x010485, 0x001E2E, 0x0104B7, 0x001E47, 0x001E28, 0x01041B, 0x0104A1, 0x001E2D, 0x01048D, 0x0104A6, 0x01041A, 0x01048E, 0x010489, 0x01048A, 0x010488, 0x01048F, 0x01048C, 0x0104A7, 0x001E5A, 0x001E59, 0x0104D3, 0x0104D2, 0x001E2C, 0x001E50, 0x0104A5, 0x0104D8, 0x001E21, 0x001E20, 0x001E81, 0x001E22, 0x001E25, 0x001E24, 0x001E27, 0x001E26, 0x001F81, 0x010418, 0x001F80, 0x001F87, 0x001E2A, 0x001E29, 0x0104A3, 0x0104A2, 0x001E30, 0x001E31, 0x0104BC, 0x001E35, 0x001E37, 0x001E36, 0x001E90, 0x001E91, 0x001E4F, 0x0104A0, 0x001E3B, 0x0104D0, 0x001E34, 0x001E5F, 0x001E2B, 0x001E2F, 0x0104C0, 0x0104B9, 0x0104B8, 0x0104BB, 0x0104BA, 0x0104BD, 0x010419, 0x0104BF, 0x0104BE, 0x002189, 0x002188, 0x010402, 0x010401, 0x00A30E, 0x00A308, 0x00A316, 0x00A30F, 0x00A310, 0x01E816, 0x01E811, 0x01E812, 0x01E813, 0x01E8A4, 0x01E8A0, 0x01E815, 0x01E817, 0x01E810, 0x01E8AA, 0x01E819, 0x01E8AB, 0x01E8AD, 0x01E81A, 0x01E8CE, 0x01E81B, 0x01E8AC, 0x01E80D, 0x00A311, 0x00A317, 0x01E81D, 0x002186, 0x00A33E, 0x01E81C, 0x00A33F, 0x010491, 0x01E803, 0x002185, 0x002184, 0x00A339, 0x00A33A, 0x00A33B, 0x00A314, 0x00A315, 0x00A30C, 0x00A30D, 0x00A330, 0x00A331, 0x00A335, 0x00A333, 0x010493, 0x01E807, 0x00A336, 0x01E802, 0x01E800, 0x01041E, 0x01041D, 0x01E81E, 0x01E938, 0x00A334, 0x01E8A2, 0x01E814, 0x01E81F, 0x01041F, 0x01E93E, 0x01E93F, 0x00A34C, 0x00A37D, 0x01E818, 0x00A37A, 0x00A349, 0x010492, 0x00A348, 0x01E8A1, 0x00A34D, 0x01E805, 0x00A34E, 0x00A34F, 0x00A350, 0x00A351, 0x00A35A, 0x00A35B, 0x00A377, 0x00A355, 0x00A354, 0x00A357, 0x00A31B, 0x01E954, 0x01E8CA, 0x01E8CB, 0x00A37E, 0x00A37B, 0x00A31A, 0x00A376, 0x00A322, 0x00A321, 0x00A323, 0x00A324, 0x00A320, 0x00A325, 0x00A327, 0x010497, 0x010464, 0x00A370, 0x00A32A, 0x010469, 0x002070, 0x01046B, 0x01046A, 0x01046C, 0x002077, 0x01046E, 0x002079, 0x002078, 0x00A37F, 0x00A372, 0x002074, 0x002075, 0x002076, 0x010490, 0x002082, 0x00A33C, 0x002083, 0x00A33D, 0x002087, 0x002081, 0x002080, 0x00A282, 0x002085, 0x002084, 0x002088, 0x002089, 0x00A281, 0x00A2DD, 0x00A28B, 0x002086, 0x002111, 0x002110, 0x002113, 0x002112, 0x00A2DE, 0x002115, 0x00A298, 0x00A291, 0x00A296, 0x00A2AA, 0x00A2A9, 0x00211B, 0x00A2C7, 0x00A2DF, 0x00A28A, 0x00A219, 0x00A29E, 0x00A29B, 0x00A098, 0x00A099, 0x002183, 0x00A29F, 0x00A360, 0x00A361, 0x00A364, 0x00A0D4, 0x00A366, 0x00A365, 0x00A367, 0x00A0D6, 0x00A36A, 0x00A36B, 0x00A2C6, 0x00A2F1, 0x00A36C, 0x00A36D, 0x00A0D7, 0x00A36F, 0x00A2B0, 0x00A2B1, 0x00A2A1, 0x00A2A3, 0x00A2B4, 0x00A2B5, 0x00A2AB, 0x00A2F2, 0x00A218, 0x00A2B8, 0x00A2BA, 0x00A2BB, 0x00A2BC, 0x00A2BD, 0x00A2BE, 0x00A2BF, 0x00A0D0, 0x00A0D1, 0x00A3EA, 0x00A0D2, 0x00A0D3, 0x00A0AC, 0x00A362, 0x00A363, 0x00A3C8, 0x00A3C9, 0x00A3CC, 0x00A3CD, 0x00A0AD, 0x00A0AE, 0x00A0AF, 0x00A3CE, 0x00A0A8, 0x00A2D2, 0x00A2F3, 0x00A2D5, 0x00A2D6, 0x002182, 0x002181, 0x00A2D7, 0x00A0A9, 0x00A2D1, 0x00A2DB, 0x00A0A7, 0x00A378, 0x00A379, 0x002180, 0x00A0BA, 0x00A3F8, 0x00A3F9, 0x00A3E2, 0x00A3E3, 0x00A3F5, 0x00A2DA, 0x00A3E7, 0x00A3F4, 0x00A37C, 0x00A3E1, 0x00A3E0, 0x00A3FA, 0x00A3EC, 0x00A3ED, 0x00A0B4, 0x00A3EB, 0x00A3FC, 0x00A3F6, 0x00A3E6, 0x00A3E5, 0x00A3FE, 0x00A3FD, 0x00A3F7, 0x00A16F, 0x00A3FF, 0x002187, 0x00A3F2, 0x00A3F3, 0x00A3F0, 0x00A3F1, 0x00A3E4, 0x00A3FB, 0x00A0B5, 0x00A0B0, 0x00A0B1, 0x00A0B2, 0x00A0B3, 0x00A08F, 0x00A089, 0x00A08B, 0x00A084, 0x00A082, 0x00A09F, 0x00A168, 0x01E80E, 0x00A16A, 0x00A16B, 0x01E809, 0x01E804, 0x00A160, 0x01E806, 0x00A161, 0x00A14E, 0x01E80A, 0x00A14A, 0x01E80B, 0x00A14B, 0x00A144, 0x00A145, 0x01E80F, 0x00A141, 0x00A15E, 0x00A15A, 0x00A15B, 0x00A154, 0x00A155, 0x00A156, 0x00A157, 0x00A150, 0x00A151, 0x00A152, 0x00A3C6, 0x00A153, 0x00A3C5, 0x00A3C4, 0x00A12C, 0x00A12D, 0x00A12E, 0x00A12F, 0x00A128, 0x00A129, 0x00A10A, 0x00A10B, 0x00A104, 0x00A105, 0x00A106, 0x00A107, 0x00A100, 0x00A101, 0x00A102, 0x00A103, 0x00A3CA, 0x00A11C, 0x00A11D, 0x00A11E, 0x00A11F, 0x00A118, 0x00A119, 0x00A11A, 0x00A11B, 0x00A114, 0x00A115, 0x00A116, 0x00A117, 0x0106CD, 0x0106CE, 0x0106CF, 0x00A110, 0x0106C8, 0x00A111, 0x0106C9, 0x00A112, 0x00A113, 0x00A1EC, 0x00A1ED, 0x00A1EE, 0x00A1EF, 0x00A1E8, 0x00A1E9, 0x00A1EA, 0x00A1EB, 0x00A1E6, 0x01E808, 0x00A1E7, 0x00A1E0, 0x00A1E1, 0x00A1E2, 0x00A1E3, 0x00A1FC, 0x00A1FD, 0x00A1FE, 0x00A1FF, 0x00A1F8, 0x00A1F9, 0x00A1FB, 0x00A1F4, 0x00A1DA, 0x00A1DB, 0x00A1D4, 0x00A1D5, 0x00A1D6, 0x00A1D7, 0x00A1D0, 0x00A1D1, 0x00A1D2, 0x00A1AC, 0x00A1AD, 0x0106F1, 0x000696, 0x000697, 0x0106F2, 0x000690, 0x000691, 0x000692, 0x000693, 0x00076C, 0x00076D, 0x00A3C7, 0x00076E, 0x00076F, 0x000768, 0x000769, 0x00076A, 0x010702, 0x00076B, 0x000764, 0x010701, 0x000765, 0x000766, 0x000767, 0x000760, 0x00A3CB, 0x01E83B, 0x000761, 0x000762, 0x000763, 0x00077C, 0x01E83A, 0x01E82C, 0x01071D, 0x01E80C, 0x01E82B, 0x01071E, 0x01E829, 0x010714, 0x01071F, 0x01E82F, 0x01E82D, 0x01071B, 0x01E835, 0x010718, 0x01E834, 0x01E837, 0x01071A, 0x010719, 0x00077D, 0x00077E, 0x00077F, 0x000778, 0x000779, 0x00077A, 0x00077B, 0x01E836, 0x000774, 0x000775, 0x01E823, 0x000776, 0x000777, 0x000770, 0x01E831, 0x000771, 0x01E830, 0x01E820, 0x01E821, 0x000772, 0x000773, 0x00074D, 0x00074E, 0x01E822, 0x01E827, 0x01E825, 0x00074F, 0x00075C, 0x00075D, 0x00075E, 0x01E83C, 0x00075F, 0x000758, 0x01E826, 0x01E833, 0x000759, 0x00075A, 0x01E83D, 0x01E832, 0x00075B, 0x000754, 0x000755, 0x000756, 0x000757, 0x000750, 0x000751, 0x01E843, 0x000752, 0x000753, 0x00072C, 0x00072D, 0x00072E, 0x00072F, 0x00A3C2, 0x00A3C3, 0x000728, 0x000729, 0x00072A, 0x00072B, 0x00A3C0, 0x00A3C1, 0x00A3CF, 0x000724, 0x000725, 0x000726, 0x000727, 0x01E853, 0x000720, 0x000721, 0x000722, 0x000723, 0x00071C, 0x01E85D, 0x00071D, 0x00071E, 0x00071F, 0x000718, 0x01E85E, 0x000719, 0x00071A, 0x01E85F, 0x00071B, 0x000714, 0x000715, 0x000716, 0x01E854, 0x01E855, 0x000717, 0x000710, 0x000712, 0x000713, 0x01E852, 0x0007E8, 0x01E856, 0x01E85A, 0x0007E9, 0x01E857, 0x01E838, 0x01E839, 0x0007EA, 0x01E85B, 0x00A3DB, 0x0007E4, 0x01E83E, 0x01E83F, 0x0007E5, 0x0007E6, 0x00A3DA, 0x0007E7, 0x0007E0, 0x00A3D4, 0x0007E1, 0x0007E2, 0x0007E3, 0x0007CC, 0x00A3D6, 0x00A3D5, 0x00A3D0, 0x0007CD, 0x0007CE, 0x0007CF, 0x0007C8, 0x0007C9, 0x0007CA, 0x0007CB, 0x0007C4, 0x0007C5, 0x0007C6, 0x0007C7, 0x0007C0, 0x0007C1, 0x0007C2, 0x0007C3, 0x0007DC, 0x0007DD, 0x0007DE, 0x0007DF, 0x0007D8, 0x0007D9, 0x0007DA, 0x0007DB, 0x0007D4, 0x0007D5, 0x0007D6, 0x0007D7, 0x0007D0, 0x0007D1, 0x0007D2, 0x0007D3, 0x00A3D9, 0x0007A4, 0x00A3D8, 0x0007A5, 0x0007A0, 0x0007A1, 0x0007A2, 0x0007A3, 0x0007B1, 0x00078C, 0x00078D, 0x00078E, 0x00078F, 0x00A3DD, 0x00A3DE, 0x00A3DC, 0x000788, 0x000789, 0x00078A, 0x00078B, 0x000784, 0x000785, 0x000786, 0x000787, 0x000780, 0x000781, 0x000782, 0x000783, 0x00079C, 0x00079D, 0x00079E, 0x00079F, 0x000798, 0x000799, 0x00079A, 0x00079B, 0x00A3D1, 0x000794, 0x000795, 0x000796, 0x000797, 0x000790, 0x000791, 0x000792, 0x000793, 0x00046C, 0x00046D, 0x00046E, 0x00046F, 0x000468, 0x000469, 0x00046A, 0x00046B, 0x000464, 0x000465, 0x000466, 0x000467, 0x000460, 0x000461, 0x000462, 0x000463, 0x00047C, 0x00047D, 0x00047E, 0x00047F, 0x000478, 0x000479, 0x00047A, 0x00047B, 0x000474, 0x000475, 0x000476, 0x00A3AE, 0x000477, 0x00A3AF, 0x010801, 0x010800, 0x010803, 0x010802, 0x00A3D7, 0x00A383, 0x000470, 0x000471, 0x00A387, 0x010808, 0x01080C, 0x01080A, 0x01080E, 0x000472, 0x01080F, 0x01080D, 0x000473, 0x00A385, 0x00A3AD, 0x00A386, 0x00A384, 0x00A39C, 0x00A39D, 0x00A39E, 0x010819, 0x010818, 0x00A39F, 0x01081A, 0x01081D, 0x01081C, 0x01081F, 0x01081E, 0x010821, 0x010820, 0x010823, 0x010822, 0x00044C, 0x00044D, 0x010827, 0x00044E, 0x010829, 0x010828, 0x00044F, 0x01082A, 0x01082D, 0x01082C, 0x00A3B5, 0x01082E, 0x010833, 0x010830, 0x000448, 0x010832, 0x010835, 0x010834, 0x010837, 0x000449, 0x00A3B3, 0x010838, 0x00044A, 0x00044B, 0x000444, 0x01083C, 0x01083F, 0x000445, 0x000446, 0x000447, 0x000440, 0x000441, 0x000442, 0x000443, 0x00045C, 0x00045D, 0x00045E, 0x00045F, 0x000458, 0x000459, 0x00045A, 0x00045B, 0x000454, 0x00A3B4, 0x000455, 0x010850, 0x000456, 0x010852, 0x010855, 0x010854, 0x00A3D3, 0x000457, 0x000450, 0x000451, 0x01085B, 0x000452, 0x000453, 0x00042C, 0x00042D, 0x00042E, 0x00A3AC, 0x00A3D2, 0x00A382, 0x00042F, 0x000428, 0x00A380, 0x00A381, 0x00A38A, 0x00A38B, 0x00A3A8, 0x00A3A9, 0x000429, 0x00042A, 0x00042B, 0x000424, 0x000425, 0x000426, 0x000427, 0x000420, 0x00A3DF, 0x000421, 0x000422, 0x000423, 0x00043C, 0x00043D, 0x00043E, 0x00043F, 0x000438, 0x000439, 0x00A442, 0x00A443, 0x00A402, 0x00A477, 0x00A441, 0x00043A, 0x00A446, 0x00A447, 0x00A42D, 0x00A40B, 0x00A478, 0x00043B, 0x01EE01, 0x00A42E, 0x01EE03, 0x01EE02, 0x01EE05, 0x00A479, 0x01EE07, 0x01EE06, 0x00A45C, 0x00A45D, 0x00A440, 0x00A445, 0x00A418, 0x00A419, 0x000434, 0x00A45E, 0x01EE00, 0x00A45F, 0x00A41E, 0x00A41F, 0x00A562, 0x01EE14, 0x000435, 0x01EE1F, 0x01EE19, 0x01EE1B, 0x00A52C, 0x01EE18, 0x01EE1E, 0x01EE1C, 0x01EE1A, 0x01EE1D, 0x00A52E, 0x00A52D, 0x00A52F, 0x01EE22, 0x00A429, 0x00A431, 0x01EE27, 0x00A43A, 0x00A534, 0x00A435, 0x00A434, 0x00A428, 0x00A578, 0x00A579, 0x00A57A, 0x000436, 0x00A42F, 0x00A56D, 0x00A57E, 0x00A57F, 0x00A571, 0x00A543, 0x000437, 0x00A573, 0x000430, 0x00A575, 0x00A576, 0x00A577, 0x00A570, 0x00A574, 0x000431, 0x000432, 0x00A55C, 0x00A55D, 0x000433, 0x00A55E, 0x00A542, 0x00A541, 0x00A458, 0x00A55F, 0x00040C, 0x00A545, 0x00A546, 0x00A547, 0x00A540, 0x00A559, 0x00040D, 0x00040E, 0x00040F, 0x00A558, 0x000408, 0x00A459, 0x000409, 0x00040A, 0x00040B, 0x000404, 0x00A544, 0x000405, 0x000406, 0x000407, 0x000400, 0x00A563, 0x00A54A, 0x00A54B, 0x01EE61, 0x01EE68, 0x000401, 0x01EE62, 0x01EE6F, 0x01EE64, 0x01EE67, 0x000402, 0x01EE69, 0x000403, 0x00041C, 0x01EE6A, 0x01EE6D, 0x01EE6C, 0x00A54C, 0x01EE6E, 0x00A54E, 0x00A54D, 0x00A54F, 0x00041D, 0x00041E, 0x00041F, 0x00A482, 0x000418, 0x000419, 0x00041A, 0x00041B, 0x000414, 0x00A488, 0x01EE7C, 0x000415, 0x000416, 0x01EE81, 0x01EE80, 0x01EE83, 0x01EE85, 0x01EE86, 0x01EE87, 0x01E85C, 0x01EE84, 0x01EE89, 0x01EE88, 0x01EE8B, 0x000417, 0x01EE8D, 0x000410, 0x000411, 0x01EE8E, 0x01EE91, 0x01EE90, 0x01EE93, 0x01EE92, 0x01EE95, 0x01EE94, 0x01EE97, 0x01EE96, 0x01EE99, 0x000412, 0x01EE9B, 0x01EE9A, 0x000413, 0x0004EC, 0x0004ED, 0x0004EE, 0x01EEA1, 0x0004EF, 0x01EEA3, 0x01EEA2, 0x01EEA5, 0x0004E8, 0x01EEA7, 0x01EEA6, 0x01EEA9, 0x0004E9, 0x01EEAB, 0x0004EA, 0x01EEAD, 0x01EEAC, 0x0004EB, 0x01EEAE, 0x01EEB1, 0x01EEB0, 0x0004E4, 0x0004E5, 0x01EEB5, 0x01EEB4, 0x0004E6, 0x0004E7, 0x01EEB9, 0x01EEB8, 0x01EEBB, 0x01EEBA, 0x0004E0, 0x0004E1, 0x00A44A, 0x00A44B, 0x0004E2, 0x0004E3, 0x0004FC, 0x0004FD, 0x00A4D0, 0x00A4D1, 0x0004FE, 0x0004FF, 0x00A4D4, 0x00A4D5, 0x00A4D6, 0x00A4D7, 0x0004F8, 0x0004F9, 0x00A4DA, 0x00A4DB, 0x0004FA, 0x00A4DD, 0x0004FB, 0x0004F4, 0x00A462, 0x00A463, 0x00A4E2, 0x00A4E3, 0x0004F5, 0x0004F6, 0x0004F7, 0x0004F0, 0x0004F1, 0x0004F2, 0x0004F3, 0x0004CC, 0x0004CD, 0x0004CE, 0x00A46F, 0x00A4EF, 0x00A4F0, 0x00A4F1, 0x00A4F2, 0x00A4F3, 0x00A4F6, 0x0004CF, 0x0004C8, 0x00A4F7, 0x0004C9, 0x0004CA, 0x0004CB, 0x0004C4, 0x00A4F4, 0x00A4F5, 0x0004C5, 0x0004C6, 0x0004C7, 0x00A556, 0x00A502, 0x0004C0, 0x00A504, 0x0004C1, 0x00A53A, 0x0004C2, 0x00A527, 0x0004C3, 0x0004DC, 0x0004DD, 0x00A535, 0x00A50A, 0x00A50B, 0x00A58F, 0x0004DE, 0x0004DF, 0x0004D8, 0x0004D9, 0x0004DA, 0x0004DB, 0x0004D4, 0x0004D5, 0x0004D6, 0x0004D7, 0x00A552, 0x00A553, 0x00A50D, 0x00A50F, 0x00A51E, 0x00A51F, 0x00A5AC, 0x00A531, 0x00A55B, 0x00A530, 0x0004D0, 0x00A529, 0x0004D1, 0x00A5A7, 0x00A5A8, 0x00A5A9, 0x0004D2, 0x00A555, 0x00A5AD, 0x00A5AF, 0x0004D3, 0x00A53B, 0x00A5F4, 0x0004AC, 0x0004AD, 0x0004AE, 0x00A5B0, 0x00A5B4, 0x00A532, 0x0004AF, 0x0004A8, 0x00A5FB, 0x0004A9, 0x00A5BA, 0x00A5FA, 0x0004AA, 0x0004AB, 0x00A5EF, 0x00A5D0, 0x00A5D1, 0x00A5D8, 0x00A5D9, 0x00A5D6, 0x00A5D4, 0x00A5D7, 0x00A5F5, 0x00A5F0, 0x00A5C7, 0x00A5DA, 0x00A5DB, 0x00A5C0, 0x00A5C1, 0x00A5C2, 0x00A5C3, 0x00A5C9, 0x00A5C4, 0x00A5CA, 0x00A5C8, 0x00A5F2, 0x00A5F1, 0x00A5C6, 0x00A5C5, 0x00A5DC, 0x00A5D2, 0x00A5CB, 0x00A5D3, 0x0004A4, 0x00A5DD, 0x00A5DE, 0x00A5DF, 0x0004A5, 0x0004A6, 0x002469, 0x002468, 0x0004A7, 0x00246A, 0x00A5CC, 0x00A5CD, 0x00246F, 0x00A5CE, 0x002471, 0x002470, 0x002473, 0x002472, 0x002475, 0x002474, 0x00A528, 0x002476, 0x00A5E2, 0x00A5E3, 0x00247B, 0x0004A0, 0x0004A1, 0x0004A2, 0x00A5E8, 0x00A5F6, 0x002481, 0x00A5F3, 0x002483, 0x002482, 0x002485, 0x002480, 0x002487, 0x0004A3, 0x002489, 0x002488, 0x010A00, 0x00248A, 0x00248D, 0x00248C, 0x00248F, 0x00248E, 0x0004BC, 0x002490, 0x0004BD, 0x002492, 0x002495, 0x002484, 0x002497, 0x002486, 0x002499, 0x002498, 0x00248B, 0x00249A, 0x00A519, 0x0004BE, 0x00A59E, 0x0004BF, 0x00A584, 0x010A19, 0x00A59F, 0x010A1B, 0x010A1A, 0x010A1D, 0x010A1C, 0x010A1F, 0x010A1E, 0x0004B8, 0x0004B9, 0x0004BA, 0x0004BB, 0x0004B4, 0x0004B5, 0x0004B6, 0x0004B7, 0x00A518, 0x0004B0, 0x0004B1, 0x0004B2, 0x0004B3, 0x00048C, 0x00048D, 0x00048E, 0x00048F, 0x00048A, 0x00A5B2, 0x00048B, 0x000480, 0x000481, 0x00049C, 0x00049D, 0x00049E, 0x00049F, 0x00A582, 0x000498, 0x000499, 0x00049A, 0x00049B, 0x000494, 0x000495, 0x000496, 0x000497, 0x000490, 0x000491, 0x000492, 0x000493, 0x00056C, 0x00056D, 0x00056E, 0x00056F, 0x000568, 0x000569, 0x00056A, 0x00A5B1, 0x00056B, 0x000564, 0x000565, 0x000566, 0x000567, 0x000561, 0x000562, 0x000563, 0x00057C, 0x00057D, 0x00057E, 0x00057F, 0x000578, 0x000579, 0x00057A, 0x00057B, 0x000574, 0x000575, 0x0024EB, 0x0024EA, 0x0024ED, 0x0024EC, 0x0024EF, 0x0024EE, 0x0024F1, 0x0024F3, 0x000576, 0x0024F2, 0x0024F0, 0x0024F4, 0x0024F7, 0x0024F6, 0x0024FB, 0x000577, 0x0024F8, 0x0024F9, 0x0024F5, 0x000570, 0x0024FF, 0x000571, 0x000572, 0x000573, 0x00054C, 0x00054D, 0x00054E, 0x00054F, 0x000548, 0x000549, 0x00054A, 0x010A88, 0x010A89, 0x00054B, 0x000544, 0x010A8C, 0x010A8D, 0x010A8E, 0x010A8F, 0x000545, 0x000546, 0x00A20F, 0x00A21E, 0x00A21F, 0x000547, 0x010A8A, 0x00A202, 0x000540, 0x00A204, 0x000541, 0x000542, 0x000543, 0x000554, 0x000555, 0x000556, 0x000550, 0x000551, 0x000552, 0x000553, 0x00A20B, 0x00A22C, 0x00A22D, 0x00A22E, 0x00052C, 0x00052D, 0x00052E, 0x00A22F, 0x00A227, 0x00A228, 0x00A229, 0x00052F, 0x000528, 0x000529, 0x00052A, 0x00052B, 0x000524, 0x00A230, 0x00A231, 0x000525, 0x00A232, 0x00A23A, 0x00A235, 0x00A234, 0x000526, 0x000527, 0x000520, 0x000521, 0x000522, 0x000523, 0x00053C, 0x00053D, 0x00053E, 0x00A250, 0x00A251, 0x00A258, 0x00A243, 0x00A256, 0x00A254, 0x00A257, 0x00A242, 0x010AC4, 0x00A240, 0x00A259, 0x010AC9, 0x00A24B, 0x010ACB, 0x010ACA, 0x010ACD, 0x010ACC, 0x010ACF, 0x010ACE, 0x00053F, 0x00A244, 0x00A245, 0x00A246, 0x00A247, 0x00A25C, 0x00A24E, 0x00A24A, 0x00A253, 0x00A25E, 0x00A25D, 0x00A25F, 0x00A252, 0x00A262, 0x000538, 0x00A263, 0x010AE1, 0x010AE0, 0x010AE3, 0x010AE2, 0x000539, 0x010AE4, 0x00A268, 0x00053A, 0x00053B, 0x000534, 0x010AEB, 0x000535, 0x000536, 0x00A270, 0x00A271, 0x00A279, 0x00A277, 0x000537, 0x000531, 0x000532, 0x00A278, 0x00A27A, 0x00A27B, 0x000533, 0x00050C, 0x00A274, 0x00A275, 0x00A276, 0x00050D, 0x00050E, 0x00050F, 0x000508, 0x010B01, 0x010B00, 0x010B03, 0x010B02, 0x010B05, 0x000509, 0x010B07, 0x010B06, 0x00050A, 0x00050B, 0x000504, 0x000505, 0x010B1D, 0x010B1C, 0x010B1F, 0x000506, 0x010B11, 0x010B10, 0x010B13, 0x010B12, 0x010B15, 0x010B14, 0x01E84C, 0x01E84E, 0x01E84F, 0x010B18, 0x010B1B, 0x010B1A, 0x010B19, 0x010B16, 0x010B17, 0x010B1E, 0x000507, 0x000500, 0x000501, 0x000502, 0x000503, 0x00051C, 0x00051D, 0x00051E, 0x00051F, 0x000518, 0x000519, 0x00051A, 0x00051B, 0x01E874, 0x01E87E, 0x01E876, 0x01E87F, 0x01E878, 0x01E879, 0x01E87A, 0x01E87B, 0x000514, 0x000515, 0x000516, 0x000517, 0x01E870, 0x01E871, 0x01E872, 0x000510, 0x00A2C0, 0x00A2C1, 0x00A2C2, 0x00A2C3, 0x00A2C5, 0x01E877, 0x00A2C4, 0x00A2CA, 0x01E875, 0x010B44, 0x010B4E, 0x00A2CB, 0x010B48, 0x010B4B, 0x010B4A, 0x010B4D, 0x010B49, 0x010B4F, 0x010B4C, 0x000511, 0x000512, 0x00A2CC, 0x000513, 0x0005E8, 0x00A2D8, 0x00A2C9, 0x00A2F8, 0x00A2F9, 0x01E873, 0x00A2DC, 0x00A2CD, 0x0005E9, 0x0005EA, 0x0005E4, 0x00A2E2, 0x00A2E3, 0x010B60, 0x010B63, 0x0005E5, 0x010B65, 0x00A2FB, 0x010B67, 0x010B66, 0x0005E6, 0x00A2E8, 0x00A2EF, 0x00A2FE, 0x00A2FA, 0x00A2F5, 0x00A2FF, 0x00A2F6, 0x010B72, 0x010B70, 0x00A2F7, 0x010B71, 0x01E842, 0x01E841, 0x00A2F4, 0x000621, 0x01E84D, 0x01E840, 0x01E845, 0x01E84A, 0x01E844, 0x010B7C, 0x01E846, 0x01E847, 0x010B82, 0x010B80, 0x010B83, 0x01E84B, 0x010B87, 0x010B81, 0x010B84, 0x010B85, 0x010B89, 0x010B88, 0x010B8B, 0x010B8A, 0x010B8D, 0x010B8C, 0x010B86, 0x010B8E, 0x01F103, 0x01F100, 0x01F101, 0x01F102, 0x000620, 0x000629, 0x01F105, 0x01F106, 0x01F107, 0x000622, 0x000623, 0x000624, 0x000625, 0x000626, 0x000627, 0x010B8F, 0x000638, 0x00062A, 0x00062B, 0x00063C, 0x00062D, 0x00062E, 0x00062F, 0x000631, 0x010BA9, 0x000632, 0x000633, 0x000630, 0x000635, 0x000636, 0x000637, 0x010BAE, 0x000639, 0x00063A, 0x00063B, 0x000634, 0x00063D, 0x00063E, 0x00063F, 0x0005E7, 0x000641, 0x000642, 0x000643, 0x000644, 0x000645, 0x000646, 0x000647, 0x000648, 0x000649, 0x00064A, 0x0005E0, 0x0005E1, 0x0005E2, 0x0005E3, 0x0005F0, 0x0005F1, 0x0005F2, 0x0005DC, 0x0005DD, 0x0005DE, 0x0005DF, 0x0005D8, 0x0005D9, 0x0005DA, 0x0005DB, 0x0005D4, 0x0005D5, 0x0005D6, 0x0005D7, 0x0005D0, 0x0005D1, 0x000660, 0x000661, 0x000662, 0x000663, 0x000664, 0x000665, 0x0005D2, 0x0005D3, 0x000628, 0x000669, 0x000668, 0x00066E, 0x00062C, 0x000584, 0x000585, 0x00066F, 0x000586, 0x000671, 0x000672, 0x000673, 0x000674, 0x000675, 0x000676, 0x000677, 0x000678, 0x000679, 0x00067A, 0x00067B, 0x00067C, 0x00067D, 0x00067E, 0x00067F, 0x000680, 0x000587, 0x000682, 0x000580, 0x000684, 0x000685, 0x000686, 0x000687, 0x000688, 0x000689, 0x00068A, 0x00068B, 0x00068C, 0x00068D, 0x00068E, 0x00068F, 0x000581, 0x000582, 0x000583, 0x00026C, 0x00026D, 0x00026E, 0x00026F, 0x000268, 0x000698, 0x000699, 0x00A598, 0x00A599, 0x000269, 0x00026A, 0x00069E, 0x00069F, 0x0006A0, 0x0006A1, 0x0006A2, 0x0006A3, 0x0006A4, 0x0006A5, 0x0006A6, 0x0006A7, 0x0006A8, 0x0006A9, 0x0006AA, 0x0006AB, 0x0006AC, 0x0006AD, 0x0006AE, 0x0006AF, 0x0006B0, 0x00026B, 0x0006B2, 0x0006B3, 0x0006B4, 0x0006B5, 0x0006B6, 0x0006B7, 0x0006B8, 0x0006B9, 0x0006BA, 0x0006BB, 0x0006BC, 0x0006BD, 0x0006BE, 0x0006BF, 0x0006C0, 0x0006C1, 0x0006C2, 0x0006C3, 0x0006C4, 0x0006C5, 0x0006C6, 0x0006C7, 0x0006C8, 0x0006C9, 0x0006CA, 0x0006CB, 0x0006CC, 0x0006CD, 0x0006CE, 0x0006CF, 0x0006D0, 0x0006D1, 0x0006D2, 0x0006D3, 0x000264, 0x0006D5, 0x000265, 0x000266, 0x000267, 0x00A799, 0x000260, 0x000261, 0x000262, 0x000263, 0x00027C, 0x00027D, 0x00027E, 0x00027F, 0x000278, 0x000279, 0x00027A, 0x00027B, 0x000274, 0x000275, 0x000276, 0x000277, 0x000270, 0x000271, 0x000272, 0x000273, 0x0006EE, 0x0006EF, 0x0006F0, 0x0006F1, 0x0006F2, 0x0006F3, 0x0006F4, 0x0006F5, 0x0006F6, 0x0006F7, 0x0006F8, 0x0006F9, 0x0006FA, 0x0006FB, 0x0006FC, 0x00A798, 0x00024C, 0x0006FF, 0x00024D, 0x00024E, 0x00024F, 0x000248, 0x000249, 0x00024A, 0x00024B, 0x000244, 0x000245, 0x000246, 0x000247, 0x000240, 0x000241, 0x000242, 0x000243, 0x00025C, 0x00025D, 0x00025E, 0x00025F, 0x00025B, 0x000228, 0x000229, 0x00022A, 0x00022B, 0x000224, 0x000225, 0x000226, 0x000227, 0x000220, 0x000221, 0x000222, 0x000223, 0x00023C, 0x00023D, 0x00023E, 0x00023F, 0x000218, 0x000219, 0x00021A, 0x00021B, 0x000214, 0x000215, 0x000216, 0x000217, 0x000210, 0x000211, 0x000212, 0x000213, 0x0002AC, 0x0002AD, 0x0002AE, 0x0002AF, 0x0002A8, 0x0002A9, 0x0002AA, 0x0002AB, 0x0002A4, 0x0002A5, 0x0002A6, 0x0002A7, 0x0002A0, 0x0002A1, 0x0002A2, 0x0002A3, 0x00028C, 0x00028D, 0x00028E, 0x00028F, 0x000288, 0x000289, 0x00028A, 0x00028B, 0x000284, 0x000285, 0x000286, 0x000287, 0x000280, 0x000281, 0x000282, 0x000283, 0x00029C, 0x00029D, 0x00029E, 0x00029F, 0x000298, 0x000299, 0x00029A, 0x00029B, 0x000294, 0x000295, 0x000296, 0x000297, 0x000290, 0x000291, 0x000292, 0x000293, 0x00037C, 0x00037D, 0x00037F, 0x00037B, 0x000376, 0x000377, 0x000370, 0x000371, 0x000372, 0x000373, 0x0003EC, 0x0003ED, 0x0003EE, 0x0003EF, 0x0003E8, 0x0003E9, 0x0003EA, 0x0003EB, 0x0003E4, 0x0003E5, 0x0003E6, 0x0003E7, 0x0003E0, 0x0003E1, 0x0003E2, 0x0003E3, 0x0003FC, 0x0003FD, 0x0003FE, 0x0003FF, 0x0003F8, 0x0003F9, 0x002781, 0x002780, 0x0003FA, 0x002782, 0x002785, 0x002784, 0x0003FB, 0x002786, 0x0003F4, 0x0003F5, 0x00278B, 0x0003F7, 0x0003F0, 0x0003F1, 0x00278F, 0x0003F2, 0x0003F3, 0x0003CC, 0x002793, 0x002792, 0x0003CD, 0x0003CE, 0x0003CF, 0x0003C8, 0x0003C9, 0x0003CA, 0x0003CB, 0x0003C4, 0x0003C5, 0x0003C6, 0x0003C7, 0x0003C0, 0x0003C1, 0x0003C2, 0x0003C3, 0x0003DC, 0x0003DD, 0x0003DE, 0x0003DF, 0x0003D8, 0x0003D9, 0x0003DA, 0x0003DB, 0x0003D4, 0x0003D5, 0x0003D6, 0x0003D7, 0x0003D0, 0x0003D1, 0x0003D2, 0x0003D3, 0x0003AC, 0x0003AD, 0x0003AE, 0x0003AF, 0x0003A8, 0x0003A9, 0x0003AA, 0x0003AB, 0x0003A4, 0x0003A5, 0x0003A6, 0x0003A7, 0x0003A0, 0x0003A1, 0x0003A3, 0x0003BC, 0x0003BD, 0x0003BE, 0x0003BF, 0x0003B8, 0x0003B9, 0x0003BA, 0x0003BB, 0x0003B4, 0x0003B5, 0x0003B6, 0x0003B7, 0x0003B0, 0x0003B1, 0x0003B2, 0x0003B3, 0x00038C, 0x00038E, 0x00038F, 0x000388, 0x000389, 0x00038A, 0x000386, 0x00039C, 0x00039D, 0x00039E, 0x00039F, 0x013274, 0x013270, 0x013271, 0x013272, 0x013273, 0x01324F, 0x013254, 0x013250, 0x013251, 0x013252, 0x013253, 0x01322F, 0x013220, 0x013221, 0x013222, 0x013223, 0x01323C, 0x01323D, 0x01323E, 0x01323F, 0x013238, 0x013239, 0x01323A, 0x01323B, 0x013234, 0x013235, 0x013236, 0x013237, 0x013230, 0x013231, 0x013232, 0x013233, 0x01320E, 0x01320F, 0x013200, 0x013201, 0x013202, 0x013203, 0x01321C, 0x01321D, 0x01321E, 0x01321F, 0x013218, 0x013219, 0x01321A, 0x01321B, 0x00080B, 0x013214, 0x013215, 0x013216, 0x013217, 0x013210, 0x013211, 0x013212, 0x013213, 0x0132EC, 0x0132ED, 0x0132EE, 0x0132EF, 0x0132E8, 0x0132E9, 0x0132EA, 0x0132EB, 0x0132E4, 0x0132E5, 0x0132E6, 0x0132E7, 0x0132CB, 0x0132AB, 0x0132A0, 0x0132A1, 0x0132A2, 0x0132A3, 0x0132BC, 0x0132BD, 0x0132BF, 0x0132B8, 0x0132B9, 0x0132BA, 0x0132BB, 0x0132B4, 0x0132B5, 0x0132B6, 0x0132B7, 0x0132B3, 0x01328C, 0x01328F, 0x013288, 0x01328A, 0x01328B, 0x013284, 0x013285, 0x013280, 0x013281, 0x013282, 0x013283, 0x01329C, 0x01329D, 0x01329E, 0x01329F, 0x013298, 0x013299, 0x01329A, 0x01329B, 0x013294, 0x013295, 0x000847, 0x013296, 0x013297, 0x013290, 0x013291, 0x013292, 0x013293, 0x01336C, 0x01336D, 0x01336E, 0x01336F, 0x013368, 0x013369, 0x01336A, 0x01336B, 0x013364, 0x013365, 0x013366, 0x013367, 0x013060, 0x013061, 0x013062, 0x013063, 0x01307C, 0x01307D, 0x01307E, 0x01307F, 0x013078, 0x013079, 0x01307A, 0x01307B, 0x013074, 0x013075, 0x013076, 0x013077, 0x013070, 0x013071, 0x013072, 0x013073, 0x01304C, 0x01304D, 0x01304E, 0x01304F, 0x013048, 0x013049, 0x01304A, 0x01304B, 0x013044, 0x013045, 0x013046, 0x013047, 0x013040, 0x013041, 0x013042, 0x013043, 0x01305C, 0x01305D, 0x01305E, 0x01305F, 0x013058, 0x013059, 0x01305A, 0x01305B, 0x013054, 0x013055, 0x013056, 0x013057, 0x013050, 0x013051, 0x013052, 0x013053, 0x01302C, 0x01302D, 0x01302E, 0x01302F, 0x013028, 0x013029, 0x01302A, 0x01302B, 0x013024, 0x013025, 0x013026, 0x013027, 0x013020, 0x013021, 0x013022, 0x013023, 0x01303C, 0x01303D, 0x01303E, 0x01303F, 0x013038, 0x013039, 0x01303A, 0x01303B, 0x013034, 0x013035, 0x013036, 0x013037, 0x013030, 0x013031, 0x013032, 0x013033, 0x01300C, 0x01300D, 0x01300E, 0x01300F, 0x013008, 0x013009, 0x01300A, 0x01300B, 0x013004, 0x013005, 0x013006, 0x013007, 0x013000, 0x013001, 0x013002, 0x013003, 0x01301C, 0x01301D, 0x01301E, 0x01301F, 0x013018, 0x013019, 0x01301A, 0x01301B, 0x013014, 0x013015, 0x013016, 0x013017, 0x013010, 0x013011, 0x013012, 0x013013, 0x0130EC, 0x0130ED, 0x0130EE, 0x0130EF, 0x0130E8, 0x0130E9, 0x0130EA, 0x0130EB, 0x0130E4, 0x0130E5, 0x0130E6, 0x0130E7, 0x0130E0, 0x0130E1, 0x0130E2, 0x0130E3, 0x0130FC, 0x0130FD, 0x0130FE, 0x0130FF, 0x0130F8, 0x0130F9, 0x0130FA, 0x0130FB, 0x0130F4, 0x0130F5, 0x0130F6, 0x0130F7, 0x0130F0, 0x0130F1, 0x0130F2, 0x0130F3, 0x0130CC, 0x0130CD, 0x0130CE, 0x0130CF, 0x0130C8, 0x0130C9, 0x0130CA, 0x0130CB, 0x0130C4, 0x0130C5, 0x0130C6, 0x0130C7, 0x0130C0, 0x0130C1, 0x0130C2, 0x0130C3, 0x0130DC, 0x0130DD, 0x0130DE, 0x0130DF, 0x0130D8, 0x0130D9, 0x000904, 0x000905, 0x000906, 0x000907, 0x000908, 0x000909, 0x00090A, 0x00090B, 0x00090C, 0x00090D, 0x00090E, 0x00090F, 0x000910, 0x000911, 0x000912, 0x000913, 0x000914, 0x000915, 0x000916, 0x000917, 0x000918, 0x000919, 0x00091A, 0x00091B, 0x00091C, 0x00091D, 0x00091E, 0x0130DA, 0x000920, 0x000921, 0x000922, 0x000923, 0x000924, 0x000925, 0x000926, 0x000927, 0x000928, 0x000929, 0x00092A, 0x00092B, 0x00092C, 0x00092D, 0x00092E, 0x00092F, 0x000930, 0x000931, 0x000932, 0x000933, 0x000934, 0x000935, 0x000936, 0x000937, 0x000938, 0x000939, 0x0130DB, 0x0130D4, 0x0130D5, 0x00093D, 0x0130D6, 0x0130D7, 0x0130D0, 0x0130D1, 0x0130D2, 0x0130D3, 0x0130AC, 0x0130AD, 0x0130AE, 0x0130AF, 0x0130A8, 0x0130A9, 0x0130AA, 0x0130AB, 0x0130A4, 0x0130A5, 0x0130A6, 0x0130A7, 0x000950, 0x0130A0, 0x0130A1, 0x0130A2, 0x0130A3, 0x0130BC, 0x0130BD, 0x0130BE, 0x000958, 0x000959, 0x00095A, 0x00095B, 0x00095C, 0x00095D, 0x00095E, 0x00095F, 0x000960, 0x000961, 0x0130BF, 0x0130B8, 0x0130B9, 0x0130BA, 0x000966, 0x000967, 0x000968, 0x000969, 0x00096A, 0x00096B, 0x00096C, 0x00096D, 0x00096E, 0x00096F, 0x0130BB, 0x0130B4, 0x000972, 0x000973, 0x000974, 0x000975, 0x000976, 0x000977, 0x000978, 0x000979, 0x00097A, 0x00097B, 0x00097C, 0x00097D, 0x00097E, 0x00097F, 0x000980, 0x0130B5, 0x0130B6, 0x0130B7, 0x0130B0, 0x000985, 0x000986, 0x000987, 0x000988, 0x000989, 0x00098A, 0x00098B, 0x00098C, 0x0130B1, 0x0130B2, 0x00098F, 0x0130B3, 0x01308C, 0x01308D, 0x000993, 0x01308E, 0x01308F, 0x013088, 0x013089, 0x01308A, 0x01308B, 0x013084, 0x013085, 0x013086, 0x013087, 0x013080, 0x013081, 0x0009A0, 0x0009A1, 0x0009A2, 0x0009A3, 0x0009A4, 0x0009A5, 0x0009A6, 0x0009A7, 0x0009A8, 0x013082, 0x0009AA, 0x0009AB, 0x0009AC, 0x0009AD, 0x0009AE, 0x0009AF, 0x0009B0, 0x013083, 0x0009B2, 0x01309C, 0x01309D, 0x01309E, 0x0009B6, 0x0009B7, 0x0009B8, 0x0009B9, 0x01309F, 0x013098, 0x013099, 0x0009BD, 0x01309A, 0x01309B, 0x013094, 0x013095, 0x013096, 0x013097, 0x013090, 0x013091, 0x013092, 0x013093, 0x01316C, 0x01316D, 0x01316E, 0x01316F, 0x013168, 0x013169, 0x0009CE, 0x01316A, 0x01316B, 0x013164, 0x013165, 0x013166, 0x013167, 0x013160, 0x013161, 0x013162, 0x013163, 0x01317C, 0x01317D, 0x01317E, 0x0009DC, 0x0009DD, 0x01317F, 0x0009DF, 0x0009E0, 0x0009E1, 0x013178, 0x013179, 0x01317A, 0x01317B, 0x0009E6, 0x0009E7, 0x0009E8, 0x0009E9, 0x0009EA, 0x0009EB, 0x0009EC, 0x0009ED, 0x0009EE, 0x0009EF, 0x0009F0, 0x0009F1, 0x013174, 0x013175, 0x0009F4, 0x0009F5, 0x0009F6, 0x0009F7, 0x0009F8, 0x0009F9, 0x013176, 0x013177, 0x013170, 0x013171, 0x013172, 0x013173, 0x01314C, 0x01314D, 0x01314E, 0x01314F, 0x013148, 0x013149, 0x01314A, 0x01314B, 0x013144, 0x013145, 0x013146, 0x013147, 0x013140, 0x013141, 0x013142, 0x013143, 0x01315C, 0x01315D, 0x01315E, 0x01315F, 0x013158, 0x013159, 0x01315A, 0x01315B, 0x013154, 0x013155, 0x013156, 0x013157, 0x013150, 0x013151, 0x013152, 0x013153, 0x01312C, 0x01312D, 0x01312E, 0x01312F, 0x013128, 0x013129, 0x01312A, 0x01312B, 0x013124, 0x013125, 0x013126, 0x000A2B, 0x013127, 0x013120, 0x013121, 0x01310C, 0x01310D, 0x013102, 0x013103, 0x01311C, 0x01311D, 0x01311E, 0x01311F, 0x013118, 0x013119, 0x01311A, 0x01311B, 0x013114, 0x013115, 0x013116, 0x013117, 0x013110, 0x013111, 0x013112, 0x013113, 0x0131EC, 0x0131ED, 0x0131EE, 0x0131EF, 0x0131E8, 0x0131E9, 0x0131EA, 0x0131EB, 0x0131E4, 0x0131E5, 0x0131E6, 0x0131E7, 0x0131E0, 0x0131E1, 0x0131E2, 0x0131E3, 0x0131FC, 0x0131FD, 0x0131FE, 0x0131FF, 0x0131F8, 0x0131F9, 0x0131FA, 0x0131FB, 0x0131F4, 0x0131F5, 0x0131F6, 0x0131F7, 0x0131F0, 0x0131F1, 0x0131F2, 0x0131F3, 0x0131CC, 0x0131CD, 0x0131CE, 0x0131CF, 0x0131C8, 0x0131C9, 0x0131CA, 0x0131CB, 0x0131C4, 0x0131C5, 0x0131C6, 0x0131C7, 0x0131C0, 0x0131C1, 0x0131C2, 0x0131C3, 0x0131DC, 0x0131DD, 0x0131DE, 0x0131DF, 0x0131D8, 0x0131D9, 0x0131DA, 0x0131DB, 0x0131D4, 0x0131D5, 0x0131D6, 0x0131D7, 0x0131D0, 0x0131D1, 0x0131D2, 0x0131D3, 0x0131AC, 0x0131AD, 0x0131AE, 0x0131AF, 0x0131A8, 0x0131A9, 0x0131AA, 0x0131AB, 0x011003, 0x0131A4, 0x011005, 0x011004, 0x011007, 0x011006, 0x011009, 0x0131A5, 0x01100B, 0x01100A, 0x01100D, 0x01100C, 0x01100F, 0x01100E, 0x0131A6, 0x0131A7, 0x0131A0, 0x0131A1, 0x0131A2, 0x011014, 0x0131A3, 0x0131BC, 0x011019, 0x011018, 0x01101B, 0x01101A, 0x01101D, 0x01101C, 0x01101F, 0x01101E, 0x011021, 0x0131BD, 0x011023, 0x011022, 0x011025, 0x011024, 0x011027, 0x011026, 0x011029, 0x0131BE, 0x01102B, 0x01102A, 0x01102D, 0x01102C, 0x01102F, 0x01102E, 0x011031, 0x0131BF, 0x011033, 0x011032, 0x011035, 0x011034, 0x011037, 0x011036, 0x0131B8, 0x0131B9, 0x0131BA, 0x0131BB, 0x0131B4, 0x0131B5, 0x0131B6, 0x0131B7, 0x0131B0, 0x0131B1, 0x0131B2, 0x0131B3, 0x01318C, 0x01318D, 0x01318E, 0x01318F, 0x013188, 0x013189, 0x01318A, 0x01318B, 0x013184, 0x013185, 0x013186, 0x013187, 0x013180, 0x013181, 0x011053, 0x011052, 0x011055, 0x011054, 0x011057, 0x011056, 0x011059, 0x013182, 0x01105B, 0x01105A, 0x01105D, 0x01105C, 0x01105F, 0x01105E, 0x013183, 0x01319C, 0x01319D, 0x01319E, 0x01319F, 0x011064, 0x013198, 0x013199, 0x011069, 0x011068, 0x01106B, 0x01106A, 0x01106D, 0x01106C, 0x01106F, 0x01106E, 0x01319A, 0x01319B, 0x013194, 0x013195, 0x013196, 0x013197, 0x013190, 0x013191, 0x013192, 0x013193, 0x02F86C, 0x02F86D, 0x02F86E, 0x02F86F, 0x02F868, 0x02F869, 0x02F86A, 0x02F86B, 0x02F864, 0x02F865, 0x02F866, 0x02F867, 0x02F860, 0x02F861, 0x02F862, 0x02F863, 0x02F87C, 0x02F87D, 0x02F87E, 0x02F87F, 0x02F878, 0x02F879, 0x02F87A, 0x02F87B, 0x02F874, 0x02F875, 0x02F876, 0x02F877, 0x02F870, 0x02F871, 0x02F872, 0x02F873, 0x02F84C, 0x01D6B9, 0x01D6BB, 0x02F84D, 0x02F84E, 0x01D6B5, 0x01D6BA, 0x02F84F, 0x02F848, 0x02F849, 0x02F84A, 0x02F84B, 0x02F844, 0x01D6B4, 0x02F845, 0x02F846, 0x01D6B0, 0x02F847, 0x02F840, 0x02F841, 0x02F842, 0x01D6B7, 0x02F843, 0x02F85C, 0x02F85D, 0x01D6B6, 0x02F85E, 0x02F85F, 0x02F858, 0x02F859, 0x02F85A, 0x02F85B, 0x02F854, 0x02F855, 0x02F856, 0x02F857, 0x02F850, 0x02F851, 0x02F852, 0x01D6B2, 0x02F853, 0x02F82C, 0x02F82D, 0x02F82E, 0x02F82F, 0x02F828, 0x02F829, 0x02F82A, 0x02F82B, 0x02F824, 0x02F825, 0x02F826, 0x02F827, 0x02F820, 0x02F821, 0x01D6D7, 0x02F822, 0x02F823, 0x02F83C, 0x02F83D, 0x02F83E, 0x02F83F, 0x02F838, 0x02F839, 0x02F83A, 0x02F83B, 0x02F834, 0x02F835, 0x02F836, 0x02F837, 0x02F830, 0x02F831, 0x02F832, 0x02F833, 0x02F80C, 0x0110E4, 0x02F80D, 0x02F80E, 0x02F80F, 0x02F808, 0x02F809, 0x02F80A, 0x02F80B, 0x02F804, 0x02F805, 0x02F806, 0x02F807, 0x02F800, 0x02F801, 0x02F802, 0x02F803, 0x02F81C, 0x02F81D, 0x02F81E, 0x02F81F, 0x02F818, 0x02F819, 0x02F81A, 0x02F81B, 0x02F814, 0x01D6D6, 0x02F815, 0x02F816, 0x01D6B8, 0x02F817, 0x02F810, 0x02F811, 0x01D6F0, 0x01D6F1, 0x01D6BE, 0x01D6BF, 0x02F812, 0x02F813, 0x02F8EC, 0x02F8ED, 0x02F8EE, 0x02F8EF, 0x02F8E8, 0x02F8E9, 0x02F8EA, 0x02F8EB, 0x02F8E4, 0x02F8E5, 0x02F8E6, 0x02F8E7, 0x02F8E0, 0x02F8E1, 0x02F8E2, 0x02F8E3, 0x02F8FC, 0x02F8FD, 0x02F8FE, 0x02F8FF, 0x02F8F8, 0x000BA8, 0x02F8F9, 0x02F8FA, 0x02F8FB, 0x02F8F4, 0x02F8F5, 0x02F8F6, 0x02F8F7, 0x02F8F0, 0x000BB3, 0x02F8F1, 0x02F8F2, 0x02F8F3, 0x02F8CC, 0x02F8CD, 0x02F8CE, 0x02F8CF, 0x02F8C8, 0x02F8C9, 0x02F8CA, 0x02F8CB, 0x02F8C4, 0x02F8C5, 0x02F8C6, 0x02F8C7, 0x02F8C0, 0x02F8C1, 0x02F8C2, 0x02F8C3, 0x02F8DC, 0x02F8DD, 0x02F8DE, 0x02F8DF, 0x02F8D8, 0x02F8D9, 0x02F8DA, 0x02F8DB, 0x02F8D4, 0x02F8D5, 0x02F8D6, 0x02F8D7, 0x02F8D0, 0x02F8D1, 0x02F8D2, 0x02F8D3, 0x01D684, 0x01D685, 0x02F8AC, 0x01D683, 0x01D681, 0x02F8AD, 0x02F8AE, 0x01D682, 0x01D68C, 0x01D68D, 0x01D686, 0x01D687, 0x02F8AF, 0x02F8A8, 0x01D68A, 0x01D68B, 0x02F8A9, 0x02F8AA, 0x01D68F, 0x02F8AB, 0x01D690, 0x01D691, 0x02F8A4, 0x01D6B3, 0x02F8A5, 0x02F8A6, 0x02F8A7, 0x02F8A0, 0x02F8A1, 0x02F8A2, 0x02F8A3, 0x02F8BC, 0x02F8BD, 0x02F8BE, 0x02F8BF, 0x02F8B8, 0x02F8B9, 0x02F8BA, 0x02F8BB, 0x02F8B4, 0x02F8B5, 0x02F8B6, 0x002C01, 0x002C00, 0x01D6B1, 0x002C02, 0x000C22, 0x000C21, 0x002C07, 0x002C06, 0x002C0A, 0x002C08, 0x002C0B, 0x002C03, 0x002C0F, 0x002C09, 0x000C20, 0x002C0D, 0x000C26, 0x000C25, 0x01D76E, 0x000C27, 0x002C36, 0x002C34, 0x002C04, 0x002C37, 0x002C19, 0x002C18, 0x002C1F, 0x002C1A, 0x002C1D, 0x002C1C, 0x002C3B, 0x002C1E, 0x002C21, 0x002C20, 0x002C23, 0x002C22, 0x002C31, 0x002C24, 0x002C27, 0x002C26, 0x002C29, 0x002C25, 0x002C2B, 0x002C2A, 0x002C0C, 0x002C28, 0x002C2C, 0x002C2E, 0x000C38, 0x000C39, 0x002C33, 0x000C23, 0x000C34, 0x000C35, 0x002C3E, 0x000C3D, 0x002C3A, 0x002C38, 0x01D765, 0x002C32, 0x002C3F, 0x002C39, 0x002C3C, 0x002C3D, 0x002C41, 0x002C40, 0x002C43, 0x002C42, 0x002C45, 0x002C44, 0x002C47, 0x01D764, 0x002C49, 0x002C48, 0x002C4B, 0x002C4A, 0x002C4D, 0x002C4C, 0x002C4F, 0x002C4E, 0x01D766, 0x01D767, 0x000C58, 0x000C59, 0x000C66, 0x002C57, 0x000C67, 0x002C53, 0x002C59, 0x002C58, 0x000C5A, 0x002C5A, 0x002C5D, 0x002C5C, 0x000C6B, 0x002C5E, 0x000C78, 0x000C61, 0x002C63, 0x000C60, 0x000C24, 0x000C7D, 0x002C60, 0x000C7C, 0x000C28, 0x000C2C, 0x000C7E, 0x002C67, 0x000C2D, 0x002C2D, 0x000C2E, 0x000C2F, 0x002C71, 0x002C70, 0x002C73, 0x002C72, 0x002C75, 0x002C74, 0x002C77, 0x002C76, 0x002C79, 0x002C78, 0x002C7B, 0x002C7A, 0x000C79, 0x000C7B, 0x002C7F, 0x002C7E, 0x002C81, 0x002C80, 0x002C83, 0x002C82, 0x002C8B, 0x002C84, 0x002C85, 0x002C86, 0x000C80, 0x000C86, 0x000C87, 0x002C8D, 0x002C8E, 0x002CD5, 0x002C8C, 0x002C87, 0x000C8B, 0x002CD1, 0x002CD2, 0x002CD3, 0x002CD4, 0x002CA0, 0x002CD6, 0x002CD7, 0x000C85, 0x002CDB, 0x000C89, 0x002C9A, 0x002C9D, 0x002C9C, 0x002C9F, 0x002C9E, 0x000CA8, 0x000CAE, 0x000CAA, 0x000CAB, 0x002CBC, 0x000CA5, 0x000CAF, 0x000CA4, 0x000C88, 0x000CAD, 0x000C8A, 0x000CAC, 0x002CBE, 0x000C8E, 0x002CBF, 0x000C8F, 0x002CB1, 0x002CB0, 0x002CB7, 0x002CB2, 0x002CB9, 0x000CB1, 0x002CBD, 0x002CB6, 0x002CBB, 0x000CB0, 0x000CB8, 0x000CB9, 0x002CBA, 0x000CB5, 0x000CB6, 0x000CB7, 0x02F8B7, 0x02F8B0, 0x02F8B1, 0x02F8B2, 0x002CC5, 0x002CC4, 0x02F8B3, 0x002CC6, 0x02F88C, 0x02F88D, 0x02F88E, 0x02F88F, 0x02F888, 0x02F889, 0x02F88A, 0x02F88B, 0x02F884, 0x02F885, 0x02F886, 0x02F887, 0x02F880, 0x02F881, 0x02F882, 0x02F883, 0x02F89C, 0x02F89D, 0x002CDF, 0x02F89E, 0x02F89F, 0x02F898, 0x02F899, 0x02F89A, 0x000CE0, 0x000CE1, 0x000CE6, 0x000C69, 0x002CA4, 0x000C68, 0x000CE7, 0x002CA7, 0x002CA8, 0x002CA9, 0x002CAA, 0x000C6A, 0x002CAC, 0x002CAD, 0x002CAE, 0x002CAF, 0x02F89B, 0x02F894, 0x02F895, 0x02F896, 0x02F897, 0x02F890, 0x02F891, 0x02F892, 0x02F893, 0x02F96C, 0x02F96D, 0x02F96E, 0x000C6C, 0x000C6D, 0x000C6E, 0x000C6F, 0x000DAA, 0x000DA9, 0x01D768, 0x01D769, 0x000DAF, 0x000DA8, 0x000D9E, 0x000D9F, 0x000DAB, 0x011281, 0x011283, 0x01128B, 0x011280, 0x011286, 0x011284, 0x011282, 0x002D11, 0x002D10, 0x002D13, 0x002D12, 0x002D15, 0x002D14, 0x002D17, 0x002D16, 0x01129D, 0x011291, 0x002D1B, 0x011293, 0x011292, 0x011295, 0x011290, 0x011297, 0x011296, 0x011299, 0x011298, 0x01129B, 0x01129A, 0x011294, 0x01129C, 0x01129F, 0x01128A, 0x0112A4, 0x000DA0, 0x0112A3, 0x0112A2, 0x0112A1, 0x011285, 0x0112A7, 0x0112A5, 0x011288, 0x01128C, 0x0112A8, 0x000DA5, 0x01128D, 0x01128F, 0x000DA6, 0x000DA4, 0x0112B1, 0x0112B3, 0x0112BE, 0x0112B0, 0x0112B6, 0x0112B4, 0x0112B2, 0x0112B5, 0x0112B9, 0x0112B8, 0x0112BB, 0x0112BA, 0x0112BD, 0x0112BC, 0x0112BF, 0x0112B7, 0x0112C1, 0x0112C0, 0x0112C3, 0x0112C2, 0x0112C5, 0x0112C4, 0x0112C7, 0x0112C6, 0x0112C9, 0x0112C8, 0x0112CB, 0x0112CA, 0x0112CD, 0x0112CC, 0x0112CF, 0x0112CE, 0x0112D1, 0x000DC5, 0x0112D3, 0x0112D2, 0x0112D5, 0x0112D4, 0x0112D7, 0x0112D6, 0x0112D9, 0x0112D8, 0x0112DB, 0x0112DA, 0x0112DD, 0x0112DC, 0x000DC4, 0x0112DE, 0x02F96F, 0x000DE6, 0x000DE7, 0x000DAC, 0x000DAD, 0x000DAE, 0x0112A6, 0x02F968, 0x02F969, 0x02F96A, 0x02F96B, 0x02F964, 0x02F965, 0x02F966, 0x02F967, 0x02F960, 0x0112F1, 0x0112F0, 0x0112F3, 0x0112F2, 0x0112F8, 0x0112F4, 0x0112F7, 0x002D81, 0x002D80, 0x002D83, 0x002D82, 0x002D85, 0x002D84, 0x002D87, 0x002D86, 0x0112F9, 0x011306, 0x002D8B, 0x002D8A, 0x002D8D, 0x002D8C, 0x011307, 0x002D8E, 0x011305, 0x011309, 0x002D93, 0x01130B, 0x01130A, 0x011339, 0x011308, 0x01130F, 0x01130C, 0x011318, 0x011310, 0x011313, 0x01131C, 0x011315, 0x011314, 0x011317, 0x011316, 0x011319, 0x002DA3, 0x01131B, 0x01131A, 0x01131D, 0x01131E, 0x01131F, 0x002DA9, 0x002DA8, 0x011330, 0x002DAA, 0x002DAD, 0x002DAC, 0x011337, 0x002DAE, 0x002DB1, 0x002DB0, 0x002DB3, 0x002DB2, 0x002DB5, 0x002DB4, 0x011335, 0x002DB6, 0x002DB9, 0x002DB8, 0x002DBB, 0x002DBA, 0x002DBD, 0x002DBC, 0x011333, 0x002DBE, 0x002DC1, 0x002DC0, 0x002DC3, 0x002DC2, 0x002DC5, 0x002DC4, 0x011336, 0x002DC6, 0x011332, 0x000DA1, 0x002DCB, 0x000D9A, 0x000D94, 0x000D95, 0x000D86, 0x000D87, 0x002DD1, 0x002DD0, 0x002DD3, 0x002DD2, 0x002DD5, 0x002DD4, 0x000D9B, 0x002DD6, 0x002DD9, 0x000DE9, 0x002DDB, 0x002DDA, 0x002DDD, 0x002DDC, 0x011350, 0x002DDE, 0x000DB8, 0x000DB9, 0x000DA2, 0x000DA3, 0x000DBD, 0x01135D, 0x000DA7, 0x01135F, 0x01135E, 0x011320, 0x011321, 0x011322, 0x011323, 0x011324, 0x011325, 0x011326, 0x011327, 0x011328, 0x000D9C, 0x01132A, 0x01132B, 0x000DB1, 0x01132D, 0x01132C, 0x01132F, 0x000DB0, 0x000DBA, 0x000DBB, 0x000DB4, 0x000DB5, 0x000DB7, 0x01132E, 0x02F961, 0x011338, 0x02F962, 0x02F963, 0x02F97C, 0x02F97D, 0x01133D, 0x02F97E, 0x02F97F, 0x02F978, 0x02F979, 0x02F97A, 0x02F97B, 0x02F974, 0x02F975, 0x02F976, 0x02F977, 0x02F970, 0x02F971, 0x02F972, 0x02F973, 0x02F94C, 0x02F94D, 0x02F94E, 0x02F94F, 0x02F948, 0x02F949, 0x02F94A, 0x02F94B, 0x02F944, 0x02F945, 0x02F946, 0x02F947, 0x02F940, 0x02F941, 0x02F942, 0x02F943, 0x02F95C, 0x02F95D, 0x02F95E, 0x02F95F, 0x02F958, 0x02F959, 0x02F95A, 0x02F95B, 0x02F954, 0x02F955, 0x02F956, 0x02F957, 0x02F950, 0x02F951, 0x02F952, 0x02F953, 0x02F92C, 0x02F92D, 0x02F92E, 0x02F92F, 0x02F928, 0x02F929, 0x02F92A, 0x02F92B, 0x02F924, 0x02F925, 0x02F926, 0x02F927, 0x02F920, 0x02F921, 0x02F922, 0x02F923, 0x02F93C, 0x02F93D, 0x02F93E, 0x02F93F, 0x02F938, 0x02F939, 0x02F93A, 0x02F93B, 0x02F934, 0x02F935, 0x02F936, 0x02F937, 0x02F930, 0x02F931, 0x02F932, 0x02F933, 0x02F90C, 0x02F90D, 0x02F90E, 0x02F90F, 0x02F908, 0x02F909, 0x02F90A, 0x02F90B, 0x02F904, 0x02F905, 0x02F906, 0x02F907, 0x02F900, 0x02F901, 0x02F902, 0x02F903, 0x02F91C, 0x02F91D, 0x02F91E, 0x02F91F, 0x02F918, 0x02F919, 0x02F91A, 0x02F91B, 0x02F914, 0x02F915, 0x02F916, 0x02F917, 0x02F910, 0x02F911, 0x02F912, 0x02F913, 0x02F9EC, 0x02F9ED, 0x02F9EE, 0x02F9EF, 0x02F9E8, 0x02F9E9, 0x02F9EA, 0x02F9EB, 0x02F9E4, 0x02F9E5, 0x02F9E6, 0x02F9E7, 0x02F9E0, 0x02F9E1, 0x02F9E2, 0x02F9E3, 0x02F9FC, 0x02F9FD, 0x02F9FE, 0x02F9FF, 0x011401, 0x02F9F8, 0x011403, 0x011402, 0x011405, 0x011404, 0x011407, 0x011406, 0x011409, 0x011408, 0x01140B, 0x01140A, 0x01140D, 0x02F9F9, 0x01140F, 0x01140E, 0x02F9FA, 0x02F9FB, 0x02F9F4, 0x02F9F5, 0x02F9F6, 0x011414, 0x02F9F7, 0x02F9F0, 0x011419, 0x011418, 0x01141B, 0x01141A, 0x01141D, 0x01141C, 0x01141F, 0x01141E, 0x011421, 0x011420, 0x011423, 0x011422, 0x011425, 0x02F9F1, 0x011427, 0x011426, 0x02F9F2, 0x02F9F3, 0x02F9CC, 0x02F9CD, 0x02F9CE, 0x02F9CF, 0x02F9C8, 0x02F9C9, 0x011431, 0x02F9CA, 0x011433, 0x011432, 0x02F9CB, 0x011434, 0x02F9C4, 0x02F9C5, 0x02F9C6, 0x02F9C7, 0x02F9C0, 0x02F9C1, 0x02F9C2, 0x02F9C3, 0x02F9DC, 0x02F9DD, 0x02F9DE, 0x02F9DF, 0x02F9D8, 0x02F9D9, 0x02F9DA, 0x02F9DB, 0x02F9D4, 0x02F9D5, 0x011449, 0x011448, 0x02F9D6, 0x01144A, 0x02F9D7, 0x02F9D0, 0x02F9D1, 0x02F9D2, 0x02F9D3, 0x02F9AC, 0x02F9AD, 0x02F9AE, 0x02F9AF, 0x02F9A8, 0x02F9A9, 0x02F9AA, 0x02F9AB, 0x02F9A4, 0x02F9A5, 0x02F9A6, 0x02F9A7, 0x02F9A0, 0x02F9A1, 0x02F9A2, 0x02F9A3, 0x02F9BC, 0x02F9BD, 0x02F9BE, 0x02F9BF, 0x02F9B8, 0x02F9B9, 0x02F9BA, 0x02F9BB, 0x02F9B4, 0x02F9B5, 0x02F9B6, 0x02F9B7, 0x02F9B0, 0x02F9B1, 0x02F9B2, 0x02F9B3, 0x02F98C, 0x02F98D, 0x02F98E, 0x02F98F, 0x02F988, 0x02F989, 0x02F98A, 0x02F98B, 0x02F984, 0x02F985, 0x02F986, 0x02F987, 0x02F980, 0x02F981, 0x02F982, 0x02F983, 0x02F99C, 0x02F99D, 0x02F99E, 0x02F99F, 0x02F998, 0x02F999, 0x02F99A, 0x02F99B, 0x02F994, 0x02F995, 0x02F996, 0x02F997, 0x02F990, 0x02F991, 0x02F992, 0x02F993, 0x01246C, 0x01246D, 0x01246E, 0x012468, 0x012469, 0x01246A, 0x01246B, 0x012464, 0x012465, 0x012466, 0x012467, 0x012460, 0x012461, 0x012462, 0x012463, 0x01244C, 0x01244D, 0x01244E, 0x01244F, 0x012448, 0x012449, 0x01244A, 0x01244B, 0x012444, 0x012445, 0x012446, 0x012447, 0x012440, 0x012441, 0x012442, 0x012443, 0x01245C, 0x01245D, 0x01245E, 0x01245F, 0x012458, 0x012459, 0x01245A, 0x01245B, 0x012454, 0x012455, 0x012456, 0x012457, 0x012450, 0x012451, 0x012452, 0x012453, 0x01242C, 0x01242D, 0x01242E, 0x01242F, 0x012428, 0x012429, 0x01242A, 0x01242B, 0x012424, 0x012425, 0x012426, 0x012427, 0x012420, 0x012421, 0x012422, 0x012423, 0x01243C, 0x01243D, 0x01243E, 0x01243F, 0x012438, 0x012439, 0x01243A, 0x01243B, 0x012434, 0x012435, 0x012436, 0x012437, 0x012430, 0x012431, 0x012432, 0x012433, 0x01240C, 0x01240D, 0x01240E, 0x01240F, 0x012408, 0x012409, 0x01240A, 0x01240B, 0x012404, 0x012405, 0x012406, 0x012407, 0x012400, 0x012401, 0x012402, 0x012403, 0x01241C, 0x01241D, 0x01241E, 0x01241F, 0x012418, 0x012419, 0x01241A, 0x01241B, 0x012414, 0x012415, 0x012416, 0x012417, 0x012410, 0x012411, 0x012412, 0x000F88, 0x000F89, 0x000F8A, 0x000F8B, 0x000F8C, 0x012413, 0x0124EC, 0x0124ED, 0x0124EE, 0x0124EF, 0x0124E8, 0x0124E9, 0x0124EA, 0x0124EB, 0x0124E4, 0x0124E5, 0x0124E6, 0x0124E7, 0x0124E0, 0x0124E1, 0x0124E2, 0x0124E3, 0x0124FC, 0x0124FD, 0x0124FE, 0x0124FF, 0x0124F8, 0x0124F9, 0x0124FA, 0x0124FB, 0x0124F4, 0x0124F5, 0x0124F6, 0x0124F7, 0x0124F0, 0x0124F1, 0x0124F2, 0x0124F3, 0x0124CC, 0x0124CD, 0x0124CE, 0x0124CF, 0x0124C8, 0x0124C9, 0x0124CA, 0x0124CB, 0x0124C4, 0x0124C5, 0x0124C6, 0x0124C7, 0x0124C0, 0x0124C1, 0x0124C2, 0x0124C3, 0x0124DC, 0x0124DD, 0x0124DE, 0x0124DF, 0x0124D8, 0x0124D9, 0x0124DA, 0x0124DB, 0x0124D4, 0x0124D5, 0x0124D6, 0x0124D7, 0x0124D0, 0x0124D1, 0x0124D2, 0x0124D3, 0x0124AC, 0x0124AD, 0x0124AE, 0x0124AF, 0x0124A8, 0x0124A9, 0x0124AA, 0x0124AB, 0x0124A4, 0x0124A5, 0x0124A6, 0x0124A7, 0x0124A0, 0x0124A1, 0x0124A2, 0x0124A3, 0x0124BC, 0x0124BD, 0x0124BE, 0x0124BF, 0x0124B8, 0x0124B9, 0x0124BA, 0x0124BB, 0x0124B4, 0x0124B5, 0x0124B6, 0x0124B7, 0x0124B0, 0x0124B1, 0x0124B2, 0x0124B3, 0x01248C, 0x01248D, 0x01248E, 0x01248F, 0x012488, 0x012489, 0x01248A, 0x01248B, 0x012484, 0x012485, 0x012486, 0x012487, 0x012480, 0x012481, 0x012482, 0x012483, 0x01249C, 0x01249D, 0x01249E, 0x01249F, 0x012498, 0x012499, 0x01249A, 0x01249B, 0x003007, 0x003006, 0x012494, 0x012495, 0x012496, 0x012497, 0x012490, 0x012491, 0x01BC6A, 0x01BC64, 0x01BC65, 0x01BC66, 0x01BC67, 0x01BC60, 0x01BC61, 0x01BC62, 0x01BC63, 0x01BC7C, 0x01BC78, 0x01BC79, 0x01BC7A, 0x01BC7B, 0x01BC74, 0x01BC75, 0x01BC76, 0x01BC77, 0x01BC70, 0x01BC71, 0x01BC72, 0x01BC73, 0x01BC4C, 0x01BC4D, 0x01BC4E, 0x01BC4F, 0x003029, 0x003028, 0x01BC48, 0x01BC49, 0x01BC4A, 0x01BC4B, 0x01BC44, 0x01BC45, 0x01BC46, 0x01BC47, 0x01BC40, 0x01BC41, 0x01BC42, 0x01BC43, 0x01BC5C, 0x01BC5D, 0x01BC5A, 0x01BC5B, 0x01BC54, 0x01BC55, 0x01BC56, 0x01BC57, 0x01BC50, 0x01BC51, 0x01BC52, 0x01BC53, 0x01BC2C, 0x01BC2D, 0x01BC2E, 0x01BC2F, 0x01BC28, 0x01BC29, 0x003049, 0x003048, 0x012516, 0x00304A, 0x00304D, 0x00304C, 0x00304F, 0x00304E, 0x003051, 0x003050, 0x003053, 0x012517, 0x012510, 0x012511, 0x003057, 0x012512, 0x012513, 0x01BC88, 0x01BC84, 0x01BC85, 0x01BC86, 0x01BC87, 0x01BC80, 0x01BC81, 0x01BC82, 0x01BC83, 0x01BC98, 0x01BC99, 0x01BC94, 0x01BC95, 0x01BC96, 0x01BC97, 0x01BC90, 0x01BC91, 0x01BC92, 0x01BC93, 0x01226C, 0x01226D, 0x01226E, 0x01226F, 0x012268, 0x003070, 0x003073, 0x012269, 0x01226A, 0x01226B, 0x003077, 0x012264, 0x012265, 0x012266, 0x012267, 0x012260, 0x012261, 0x012262, 0x012263, 0x01227C, 0x003089, 0x003080, 0x003083, 0x01227D, 0x00308C, 0x003087, 0x00308E, 0x00308F, 0x01227E, 0x01227F, 0x012278, 0x012279, 0x003088, 0x01227A, 0x00308A, 0x01227B, 0x012274, 0x012275, 0x012276, 0x012277, 0x012270, 0x012271, 0x012272, 0x012273, 0x01224C, 0x01224D, 0x01224E, 0x01224F, 0x012248, 0x00308D, 0x00309F, 0x012249, 0x0030A1, 0x0030A2, 0x0030A7, 0x0030BB, 0x0030B7, 0x0030B4, 0x0030B5, 0x0030B6, 0x01224A, 0x01224B, 0x012244, 0x0030A3, 0x012245, 0x012246, 0x012247, 0x012240, 0x012241, 0x012242, 0x0030B1, 0x0030B2, 0x012243, 0x01225C, 0x0030BF, 0x0030B0, 0x0030BA, 0x01225D, 0x0030B8, 0x0030B3, 0x0030BE, 0x0030B9, 0x0030BC, 0x0030BD, 0x01225E, 0x01225F, 0x012258, 0x012259, 0x01225A, 0x01225B, 0x012254, 0x012255, 0x012256, 0x012257, 0x012250, 0x012251, 0x012252, 0x012253, 0x01222C, 0x01222D, 0x01222E, 0x01222F, 0x012228, 0x012229, 0x01222A, 0x01222B, 0x012224, 0x012225, 0x012226, 0x012227, 0x012220, 0x012221, 0x012222, 0x012223, 0x01223C, 0x01223D, 0x01223E, 0x01223F, 0x012238, 0x012239, 0x01223A, 0x01223B, 0x012234, 0x012235, 0x012236, 0x012237, 0x012230, 0x012231, 0x012232, 0x012233, 0x01220C, 0x01220D, 0x01220E, 0x01220F, 0x012208, 0x012209, 0x01220A, 0x01220B, 0x012204, 0x012205, 0x012206, 0x012207, 0x012200, 0x012201, 0x012202, 0x012203, 0x01221C, 0x01221D, 0x01221E, 0x01221F, 0x012218, 0x012219, 0x01221A, 0x01221B, 0x012214, 0x012215, 0x012216, 0x012217, 0x012210, 0x012211, 0x012212, 0x012213, 0x0122EC, 0x0122ED, 0x0122EE, 0x0122EF, 0x0122E8, 0x0122E9, 0x0122EA, 0x0122EB, 0x0122E4, 0x0122E5, 0x0122E6, 0x0122E7, 0x0122E0, 0x0122E1, 0x0122E2, 0x0122E3, 0x0122FC, 0x0122FD, 0x0122FE, 0x0122FF, 0x011698, 0x0122F8, 0x0122F9, 0x0122FA, 0x0122FB, 0x01169F, 0x0122F4, 0x0116A1, 0x0122F5, 0x0122F6, 0x0116A2, 0x0122F7, 0x0116A4, 0x0122F0, 0x0122F1, 0x0116A9, 0x0116A8, 0x0122F2, 0x0116AA, 0x0122F3, 0x0122CC, 0x0122CD, 0x0122CE, 0x0122CF, 0x0122C8, 0x0122C9, 0x0122CA, 0x0122CB, 0x0122C4, 0x0122C5, 0x0122C6, 0x0122C7, 0x0122C0, 0x0122C1, 0x0122C2, 0x0122C3, 0x0122DC, 0x0122DD, 0x0122DE, 0x0116C1, 0x0116C0, 0x0116C3, 0x0116C2, 0x0116C5, 0x0116C4, 0x0116C7, 0x0116C6, 0x0116C9, 0x0116C8, 0x0122DF, 0x0122D8, 0x0122D9, 0x0122DA, 0x0122DB, 0x0122D4, 0x0122D5, 0x0122D6, 0x0122D7, 0x0122D0, 0x0122D1, 0x0122D2, 0x0122D3, 0x0122AC, 0x0122AD, 0x0122AE, 0x0122AF, 0x0122A8, 0x0122A9, 0x0122AA, 0x0122AB, 0x0122A4, 0x0122A5, 0x0122A6, 0x0122A7, 0x0122A0, 0x0122A1, 0x0122A2, 0x0122A3, 0x0122BC, 0x0122BD, 0x0122BE, 0x0122BF, 0x0122B8, 0x0122B9, 0x0122BA, 0x0122BB, 0x0122B4, 0x0122B5, 0x0122B6, 0x0122B7, 0x0122B0, 0x0122B1, 0x0122B2, 0x0122B3, 0x003181, 0x003180, 0x003183, 0x003182, 0x003185, 0x003184, 0x003187, 0x003186, 0x003189, 0x003188, 0x00318B, 0x00318A, 0x00318D, 0x00318C, 0x011701, 0x00318E, 0x011703, 0x011700, 0x01170A, 0x01170B, 0x011702, 0x011704, 0x011705, 0x011709, 0x011707, 0x01B001, 0x011710, 0x01B000, 0x01228C, 0x01170C, 0x011714, 0x011706, 0x01228D, 0x011719, 0x0031A3, 0x011718, 0x011708, 0x01170D, 0x01170E, 0x01170F, 0x0031A9, 0x0031A8, 0x01228E, 0x0031AA, 0x0031AD, 0x0031AC, 0x0031AF, 0x0031AE, 0x0031B1, 0x0031B0, 0x0031B3, 0x0031B2, 0x0031B5, 0x0031B4, 0x0031B7, 0x0031B6, 0x0031B9, 0x0031B8, 0x011733, 0x0031BA, 0x011731, 0x011736, 0x011737, 0x011732, 0x011735, 0x01173B, 0x011730, 0x01228F, 0x01173A, 0x011734, 0x011738, 0x012288, 0x012289, 0x01228A, 0x01228B, 0x012284, 0x012285, 0x012286, 0x012287, 0x012280, 0x012281, 0x012282, 0x012283, 0x01229C, 0x01229D, 0x01229E, 0x01229F, 0x012298, 0x012299, 0x01229A, 0x01229B, 0x012294, 0x012295, 0x012296, 0x012297, 0x012290, 0x012291, 0x012292, 0x012293, 0x01236C, 0x01236D, 0x01236E, 0x01237F, 0x012378, 0x012379, 0x01237A, 0x01234B, 0x012344, 0x012345, 0x012342, 0x01232F, 0x012328, 0x0031F1, 0x0031F0, 0x012329, 0x01232A, 0x01232B, 0x012324, 0x0031F7, 0x012325, 0x012326, 0x012327, 0x012320, 0x012321, 0x012322, 0x012323, 0x01233C, 0x01233D, 0x01233E, 0x01230F, 0x012308, 0x012309, 0x01230A, 0x01230B, 0x012304, 0x012305, 0x012306, 0x012307, 0x012300, 0x012301, 0x012302, 0x012303, 0x01231C, 0x01231D, 0x01231E, 0x01231F, 0x012318, 0x012319, 0x01231A, 0x01231B, 0x012314, 0x012315, 0x012316, 0x012317, 0x012310, 0x012311, 0x012312, 0x012313, 0x016F44, 0x016F40, 0x003221, 0x003220, 0x003223, 0x003222, 0x003225, 0x003224, 0x003227, 0x003226, 0x003229, 0x003228, 0x016F41, 0x016F42, 0x016F43, 0x016F50, 0x016F2C, 0x016F2D, 0x016F2E, 0x016F2F, 0x016F28, 0x016F29, 0x016F2A, 0x016F2B, 0x016F24, 0x016F25, 0x016F26, 0x016F27, 0x016F20, 0x016F21, 0x016F22, 0x016F23, 0x016F3C, 0x016F3D, 0x016F3E, 0x016F3F, 0x016F38, 0x016F39, 0x016F3A, 0x016F3B, 0x016F34, 0x016F35, 0x003249, 0x003248, 0x00324B, 0x00324A, 0x00324D, 0x00324C, 0x00324F, 0x00324E, 0x003251, 0x016F36, 0x003253, 0x003252, 0x003255, 0x003254, 0x003257, 0x003256, 0x003259, 0x003258, 0x00325B, 0x00325A, 0x00325D, 0x00325C, 0x00325F, 0x00325E, 0x016F37, 0x016F30, 0x016F31, 0x016F32, 0x016F33, 0x016F0C, 0x016F0D, 0x016F0E, 0x016F1F, 0x016F18, 0x016F19, 0x016F1A, 0x016F15, 0x016F16, 0x012391, 0x012392, 0x012393, 0x01206C, 0x01206D, 0x01206E, 0x01206F, 0x012068, 0x012069, 0x01206A, 0x01206B, 0x012064, 0x012065, 0x012066, 0x012067, 0x012060, 0x012061, 0x012062, 0x012063, 0x01207C, 0x01207D, 0x01207E, 0x01207F, 0x012078, 0x012079, 0x01207A, 0x01207B, 0x012074, 0x012075, 0x012076, 0x012077, 0x012070, 0x012071, 0x012072, 0x012073, 0x01204C, 0x01204D, 0x01204E, 0x01204F, 0x012048, 0x012049, 0x01204A, 0x01204B, 0x012044, 0x012045, 0x012046, 0x012047, 0x012040, 0x012041, 0x012042, 0x012043, 0x01205C, 0x01205D, 0x01205E, 0x01205F, 0x012058, 0x012059, 0x01205A, 0x01205B, 0x012054, 0x012055, 0x012056, 0x012057, 0x012050, 0x012051, 0x012052, 0x012053, 0x01202C, 0x01202D, 0x01202E, 0x01202F, 0x012028, 0x012029, 0x01202A, 0x01202B, 0x0032B2, 0x012024, 0x012025, 0x012026, 0x0032B1, 0x012027, 0x012020, 0x012021, 0x012022, 0x012023, 0x01203C, 0x01203D, 0x01203E, 0x01203F, 0x012038, 0x012039, 0x01203A, 0x01203B, 0x012034, 0x012035, 0x012036, 0x012037, 0x012030, 0x012031, 0x012032, 0x012033, 0x01200C, 0x01200D, 0x01200E, 0x01200F, 0x012008, 0x012009, 0x01200A, 0x01200B, 0x012004, 0x012005, 0x012006, 0x012007, 0x012000, 0x012001, 0x012002, 0x012003, 0x01201C, 0x01201D, 0x01201E, 0x01201F, 0x012018, 0x012019, 0x01201A, 0x01201B, 0x012014, 0x012015, 0x012016, 0x012017, 0x012010, 0x012011, 0x012012, 0x012013, 0x0120EC, 0x0120ED, 0x0120EE, 0x0120EF, 0x0120E8, 0x0120E9, 0x0120EA, 0x0120EB, 0x0120E4, 0x0120E5, 0x0120E6, 0x0120E7, 0x0120E0, 0x0120E1, 0x0120E2, 0x0120E3, 0x0120FC, 0x0120FD, 0x0120FE, 0x0120FF, 0x0120F8, 0x0120F9, 0x0120FA, 0x0120FB, 0x0120F4, 0x0120F5, 0x0120F6, 0x0120F7, 0x0120F0, 0x0120F1, 0x0120F2, 0x0120F3, 0x0120CC, 0x0120CD, 0x0120CE, 0x0120CF, 0x0120C8, 0x0120C9, 0x0120CA, 0x0120CB, 0x0120C4, 0x0120C5, 0x0120C6, 0x0120C7, 0x0120C0, 0x0120C1, 0x0120C2, 0x0120C3, 0x0120DC, 0x0120DD, 0x0120DE, 0x0120DF, 0x0120D8, 0x0120D9, 0x0118A1, 0x0120DA, 0x0120DB, 0x0118A2, 0x0120D4, 0x0118A4, 0x0120D5, 0x0120D6, 0x0120D7, 0x0118A8, 0x0118AB, 0x0118AA, 0x0118AD, 0x0118AC, 0x0118AF, 0x0118AE, 0x0120D0, 0x0120D1, 0x0120D2, 0x0120D3, 0x0120AC, 0x0118B4, 0x0120AD, 0x0120AE, 0x0118B9, 0x0118B8, 0x0118BB, 0x0118BA, 0x0118BD, 0x0120AF, 0x0118BF, 0x0118BE, 0x0118C1, 0x0118C0, 0x0118C3, 0x0118C2, 0x0118C5, 0x0120A8, 0x0118C7, 0x0118C6, 0x0120A9, 0x0120AA, 0x0120AB, 0x0120A4, 0x0120A5, 0x0120A6, 0x0120A7, 0x0120A0, 0x0118D1, 0x0118D0, 0x0118D3, 0x0118D2, 0x0118D5, 0x0120A1, 0x0118D7, 0x0118D6, 0x0120A2, 0x0120A3, 0x0120BC, 0x0120BD, 0x0120BE, 0x0118DC, 0x0120BF, 0x0120B8, 0x0120B9, 0x0120BA, 0x0120BB, 0x0120B4, 0x0120B5, 0x0120B6, 0x0120B7, 0x0120B0, 0x0120B1, 0x0120B2, 0x0120B3, 0x01208C, 0x01208D, 0x01208E, 0x01208F, 0x012088, 0x012089, 0x01208A, 0x01208B, 0x012084, 0x012085, 0x012086, 0x012087, 0x012080, 0x012081, 0x012082, 0x00A000, 0x00A001, 0x00A002, 0x00A003, 0x00A004, 0x00A005, 0x00A006, 0x00A007, 0x00A008, 0x00A009, 0x00A00A, 0x00A00B, 0x00A00C, 0x00A00D, 0x00A00E, 0x00A00F, 0x00A010, 0x00A011, 0x00A012, 0x00A013, 0x00A014, 0x012083, 0x00A016, 0x00A017, 0x01209C, 0x01209D, 0x00A01A, 0x00A01B, 0x00A01C, 0x00A01D, 0x01209E, 0x01209F, 0x00A020, 0x00A021, 0x00A022, 0x00A023, 0x00A024, 0x00A025, 0x00A026, 0x00A027, 0x012098, 0x012099, 0x00A02A, 0x00A02B, 0x01209A, 0x01209B, 0x00A02E, 0x012094, 0x012095, 0x012096, 0x00A032, 0x00A033, 0x012097, 0x012090, 0x00A036, 0x00A037, 0x00A038, 0x00A039, 0x012091, 0x00A03B, 0x00A03C, 0x00A03D, 0x00A03E, 0x00A03F, 0x012092, 0x012093, 0x01216C, 0x01216D, 0x01216E, 0x01216F, 0x012168, 0x012169, 0x00A048, 0x00A049, 0x01216A, 0x01216B, 0x00A04C, 0x00A04D, 0x012164, 0x012165, 0x00A050, 0x00A051, 0x012166, 0x012167, 0x00A054, 0x00A055, 0x00A056, 0x00A057, 0x012160, 0x012161, 0x00A05A, 0x00A05B, 0x012162, 0x012163, 0x01217C, 0x01217D, 0x00A060, 0x00A061, 0x01217E, 0x01217F, 0x00A064, 0x00A065, 0x00A066, 0x00A067, 0x012178, 0x012179, 0x00A06A, 0x00A06B, 0x01217A, 0x01217B, 0x012174, 0x012175, 0x00A070, 0x00A071, 0x00A072, 0x00A073, 0x00A074, 0x00A075, 0x00A076, 0x00A077, 0x012176, 0x012177, 0x00A07A, 0x00A07B, 0x00A07C, 0x00A07D, 0x00A07E, 0x00A07F, 0x00A080, 0x00A081, 0x012170, 0x00A083, 0x012171, 0x00A085, 0x00A086, 0x00A087, 0x00A088, 0x012172, 0x00A08A, 0x012173, 0x00A08C, 0x00A08D, 0x00A08E, 0x01214C, 0x01214D, 0x01214E, 0x01214F, 0x012148, 0x012149, 0x01214A, 0x01214B, 0x012144, 0x012145, 0x012146, 0x012147, 0x012140, 0x00A09C, 0x00A09D, 0x00A09E, 0x012141, 0x00A0A0, 0x00A0A1, 0x00A0A2, 0x00A0A3, 0x00A0A4, 0x00A0A5, 0x00A0A6, 0x012142, 0x012143, 0x01215C, 0x00A0AA, 0x00A0AB, 0x01215D, 0x01215E, 0x01215F, 0x012158, 0x012159, 0x01215A, 0x01215B, 0x012154, 0x012155, 0x012156, 0x00A0B6, 0x00A0B7, 0x00A0B8, 0x00A0B9, 0x012157, 0x00A0BB, 0x00A0BC, 0x00A0BD, 0x00A0BE, 0x00A0BF, 0x012150, 0x012151, 0x012152, 0x012153, 0x00A0C4, 0x01212C, 0x01212D, 0x01212E, 0x01212F, 0x012128, 0x012129, 0x01212A, 0x00A0CC, 0x00A0CD, 0x00A0CE, 0x00A0CF, 0x01212B, 0x012124, 0x012125, 0x012126, 0x012127, 0x00A0D5, 0x012120, 0x012121, 0x012122, 0x012123, 0x00A0DA, 0x00A0DB, 0x01213C, 0x01213D, 0x01213E, 0x01213F, 0x00A0E0, 0x00A0E1, 0x012138, 0x012139, 0x00A0E4, 0x00A0E5, 0x00A0E6, 0x00A0E7, 0x00A0E8, 0x00A0E9, 0x00A0EA, 0x00A0EB, 0x00A0EC, 0x00A0ED, 0x00A0EE, 0x00A0EF, 0x01213A, 0x01213B, 0x00A0F2, 0x00A0F3, 0x012134, 0x012135, 0x00A0F6, 0x00A0F7, 0x012136, 0x012137, 0x012130, 0x012131, 0x00A0FC, 0x00A0FD, 0x00A0FE, 0x00A0FF, 0x012132, 0x012133, 0x01210C, 0x00A13E, 0x01210D, 0x01210E, 0x01210F, 0x012108, 0x00A108, 0x00A109, 0x00A10E, 0x012109, 0x00A10C, 0x00A10D, 0x00A10F, 0x01210A, 0x00A127, 0x01210B, 0x012104, 0x012105, 0x012106, 0x012107, 0x012100, 0x012101, 0x012102, 0x012103, 0x01211C, 0x01211D, 0x01211E, 0x01211F, 0x00A13F, 0x012118, 0x00A120, 0x00A121, 0x00A122, 0x00A123, 0x00A124, 0x00A125, 0x012119, 0x00A136, 0x01211A, 0x01211B, 0x00A13A, 0x00A12B, 0x012114, 0x012115, 0x012116, 0x012117, 0x00A130, 0x00A131, 0x012110, 0x00A133, 0x00A134, 0x00A135, 0x012111, 0x00A137, 0x00A138, 0x00A139, 0x00A132, 0x00A13B, 0x00A13C, 0x00A13D, 0x012112, 0x012113, 0x00A140, 0x0121EC, 0x00A142, 0x00A143, 0x0121ED, 0x0121EE, 0x00A146, 0x00A147, 0x00A148, 0x00A149, 0x0121EF, 0x0121E8, 0x00A14C, 0x00A14D, 0x0121E9, 0x00A14F, 0x0121EA, 0x0121EB, 0x0121E4, 0x0121E5, 0x0121E6, 0x0121E7, 0x0121E0, 0x0121E1, 0x00A158, 0x00A159, 0x0121E2, 0x0121E3, 0x00A15C, 0x00A15D, 0x0121FC, 0x00A15F, 0x0121FD, 0x00A164, 0x00A162, 0x00A163, 0x00A166, 0x00A165, 0x00A126, 0x00A167, 0x0121FE, 0x00A169, 0x00A12A, 0x0121FF, 0x0121F8, 0x0121F9, 0x0121FA, 0x0121FB, 0x00A170, 0x00A171, 0x00A172, 0x00A173, 0x00A174, 0x00A175, 0x00A176, 0x00A177, 0x00A178, 0x00A179, 0x00A17A, 0x00A17B, 0x0121F4, 0x0121F5, 0x00A17E, 0x00A17F, 0x00A180, 0x00A181, 0x00A182, 0x00A183, 0x00A184, 0x00A185, 0x00A186, 0x00A187, 0x00A188, 0x00A189, 0x00A18A, 0x00A18B, 0x00A18C, 0x00A18D, 0x00A18E, 0x0121F6, 0x0121F7, 0x0121F0, 0x0121F1, 0x0121F2, 0x00A194, 0x00A195, 0x00A196, 0x00A197, 0x00A198, 0x0121F3, 0x0121CC, 0x0121CD, 0x00A19C, 0x00A19D, 0x00A19E, 0x0121CE, 0x00A1A0, 0x00A1A1, 0x00A1A2, 0x00A1A3, 0x00A1A4, 0x00A1A5, 0x00A1A6, 0x00A1A7, 0x00A1A8, 0x00A1A9, 0x00A1AA, 0x00A1AB, 0x0121CF, 0x0121C8, 0x00A1AE, 0x00A1AF, 0x00A1B0, 0x00A1B1, 0x00A1B2, 0x00A1B3, 0x00A1B4, 0x00A1B5, 0x00A1B6, 0x00A1B7, 0x00A1B8, 0x00A1B9, 0x00A1BA, 0x00A1BB, 0x00A1BC, 0x00A1BD, 0x00A1BE, 0x00A1BF, 0x00A1C0, 0x00A1C1, 0x00A1C2, 0x00A1C3, 0x00A1C4, 0x00A1C5, 0x00A1C6, 0x00A1C7, 0x00A1C8, 0x00A1C9, 0x00A1CA, 0x00A1CB, 0x00A1CC, 0x00A1CD, 0x00A1CE, 0x00A1CF, 0x0121C9, 0x0121CA, 0x0121CB, 0x00A1D3, 0x0121C4, 0x0121C5, 0x0121C6, 0x0121C7, 0x00A1D8, 0x00A1D9, 0x0121C0, 0x0121C1, 0x00A1DC, 0x00A1DD, 0x00A1DE, 0x00A1DF, 0x0121C2, 0x0121C3, 0x0121DC, 0x0121DD, 0x00A1E4, 0x00A1E5, 0x0121DE, 0x0121DF, 0x0121D8, 0x0121D9, 0x0121DA, 0x0121DB, 0x0121D4, 0x0121D5, 0x0121D6, 0x0121D7, 0x00A1F0, 0x00A1F1, 0x00A1F2, 0x00A1F3, 0x0121D0, 0x00A1F5, 0x00A1F6, 0x00A1F7, 0x0121D1, 0x0121D2, 0x00A1FA, 0x0121D3, 0x0121AC, 0x0121AD, 0x0121AE, 0x0121AF, 0x0121A8, 0x0121A9, 0x0121AA, 0x0121AB, 0x0121A4, 0x0121A5, 0x0121A6, 0x0121A7, 0x0121A0, 0x0121A1, 0x0121A2, 0x0121A3, 0x0121BC, 0x0121BD, 0x0121BE, 0x0121BF, 0x0121B8, 0x0121B9, 0x0121BA, 0x0121BB, 0x0121B4, 0x0121B5, 0x0121B6, 0x0121B7, 0x0121B0, 0x0121B1, 0x0121B2, 0x0121B3, 0x01218C, 0x01218D, 0x01218E, 0x01218F, 0x012188, 0x012189, 0x01218A, 0x01218B, 0x012184, 0x012185, 0x012186, 0x012187, 0x012180, 0x012181, 0x012182, 0x012183, 0x01219C, 0x01219D, 0x01219E, 0x01219F, 0x012198, 0x012199, 0x01219A, 0x01219B, 0x012194, 0x012195, 0x012196, 0x012197, 0x012190, 0x012191, 0x012192, 0x012193, 0x016A68, 0x016A69, 0x016A64, 0x016A65, 0x016A66, 0x016A67, 0x016A60, 0x016A61, 0x016A62, 0x016A63, 0x016A4C, 0x016A4D, 0x016A4E, 0x016A4F, 0x016A48, 0x016A49, 0x016A4A, 0x016A4B, 0x016A44, 0x016A45, 0x016A46, 0x016A47, 0x016A40, 0x016A41, 0x016A42, 0x016A43, 0x016A5C, 0x016A5D, 0x016A5E, 0x016A58, 0x016A59, 0x016A5A, 0x016A5B, 0x016A54, 0x016A55, 0x016A56, 0x016A57, 0x016A50, 0x016A51, 0x016A52, 0x016A53, 0x016A2C, 0x016A2D, 0x016A2E, 0x016A2F, 0x016A28, 0x016A29, 0x016A2A, 0x016A2B, 0x016A24, 0x016A25, 0x016A26, 0x016A27, 0x016A20, 0x016A21, 0x016A22, 0x016A23, 0x016A38, 0x016A34, 0x016A35, 0x016A36, 0x016A37, 0x016A30, 0x016A31, 0x016A32, 0x016A33, 0x016A0C, 0x016A0D, 0x016A0E, 0x016A0F, 0x016A08, 0x016A09, 0x016A0A, 0x016A0B, 0x016A04, 0x016A05, 0x00A289, 0x016801, 0x016800, 0x016803, 0x016802, 0x016805, 0x016A06, 0x016A07, 0x016806, 0x016A00, 0x016A01, 0x01680B, 0x016A02, 0x016A03, 0x016A1C, 0x016807, 0x016A1D, 0x016A1E, 0x016A1F, 0x016A18, 0x016A19, 0x016804, 0x016A1A, 0x016A1B, 0x016A14, 0x016808, 0x016809, 0x01680A, 0x01680F, 0x01681D, 0x01681C, 0x00A2A6, 0x01681E, 0x016A15, 0x016A16, 0x016A17, 0x016A10, 0x016A11, 0x016A12, 0x016A13, 0x016AEC, 0x016AED, 0x016AE8, 0x016AE9, 0x016AEA, 0x016AEB, 0x016AE4, 0x016AE5, 0x016AE6, 0x016AE7, 0x016AE0, 0x016AE1, 0x016AE2, 0x016AE3, 0x016ADC, 0x016ADD, 0x016ADE, 0x016ADF, 0x016AD8, 0x016AD9, 0x016ADA, 0x016ADB, 0x016AD4, 0x016AD5, 0x016AD6, 0x016AD7, 0x016AD0, 0x016AD1, 0x016AD2, 0x016AD3, 0x016B6C, 0x016B6D, 0x016B6E, 0x016B6F, 0x016B68, 0x016B69, 0x016B6A, 0x016B6B, 0x016B64, 0x016B65, 0x016B66, 0x016B67, 0x016B60, 0x016B61, 0x016B63, 0x016B7D, 0x016B7E, 0x016B7F, 0x016B74, 0x016B75, 0x016B76, 0x016B77, 0x016B70, 0x016B71, 0x016B72, 0x016B73, 0x016B5C, 0x016B5D, 0x016B5E, 0x016B5F, 0x016B58, 0x016B59, 0x016B5B, 0x016B54, 0x016B55, 0x016B56, 0x016B57, 0x016B50, 0x016B51, 0x01686D, 0x01686C, 0x016B52, 0x01686E, 0x016B53, 0x016B2C, 0x016B2D, 0x016B2E, 0x016B2F, 0x016B28, 0x016B29, 0x016B2A, 0x00A301, 0x016B2B, 0x016B24, 0x016B25, 0x016B26, 0x016B27, 0x011C00, 0x016B20, 0x016B21, 0x011C05, 0x011C04, 0x011C07, 0x011C06, 0x016B22, 0x011C08, 0x011C0B, 0x011C0A, 0x011C0D, 0x011C0C, 0x011C0F, 0x011C0E, 0x011C11, 0x016B23, 0x011C13, 0x011C12, 0x016B0C, 0x016B0D, 0x016B0E, 0x016B0F, 0x016B08, 0x016B09, 0x016B0A, 0x016B0B, 0x016B04, 0x016B05, 0x016B06, 0x016B07, 0x016B00, 0x016B01, 0x016B02, 0x016B03, 0x016B1C, 0x016B1D, 0x016B1E, 0x016B1F, 0x016B18, 0x016B19, 0x016B1A, 0x016B1B, 0x016B14, 0x016B15, 0x016B16, 0x016B17, 0x016B10, 0x016B11, 0x016B12, 0x016B13, 0x011C6C, 0x011C68, 0x011C69, 0x011C6A, 0x011C6B, 0x011C64, 0x011C65, 0x011C66, 0x011C67, 0x011C60, 0x011C61, 0x011C62, 0x011C63, 0x011C7C, 0x011C7D, 0x011C7E, 0x011C7F, 0x011C78, 0x011C79, 0x011C7A, 0x011C7B, 0x011C74, 0x011C75, 0x011C76, 0x011C77, 0x011C72, 0x011C73, 0x011C40, 0x011C5C, 0x011C5D, 0x011C5E, 0x011C5F, 0x011C58, 0x011C59, 0x011C5A, 0x00A35D, 0x011C5B, 0x011C54, 0x011C55, 0x011C56, 0x011C57, 0x011C50, 0x011C51, 0x011C52, 0x011C53, 0x011C2C, 0x011C2D, 0x011C2E, 0x011C28, 0x011C29, 0x011C2A, 0x011C2B, 0x011C24, 0x011C25, 0x011C26, 0x011C27, 0x011C20, 0x011C21, 0x011C22, 0x011C23, 0x016B8C, 0x016B8D, 0x016B8E, 0x016B84, 0x011C01, 0x011C02, 0x011C03, 0x011C1C, 0x011C1D, 0x011C1E, 0x011C1F, 0x011C18, 0x011C19, 0x011C1A, 0x011C1B, 0x011C14, 0x011C81, 0x011C80, 0x011C83, 0x011C82, 0x011C85, 0x0104E5, 0x011C87, 0x011C86, 0x0104CD, 0x011C88, 0x011C8B, 0x011C8A, 0x0104CC, 0x011C84, 0x0104CE, 0x0104CF, 0x011C15, 0x011C16, 0x011C17, 0x011C10, 0x01686F, 0x016868, 0x016869, 0x01686A, 0x011C8C, 0x011C89, 0x01686B, 0x016864, 0x016865, 0x011C8D, 0x011C8E, 0x011C8F, 0x0104E0, 0x016866, 0x0104E2, 0x0104E3, 0x0104A4, 0x0104E1, 0x0104E6, 0x016867, 0x0104A8, 0x016860, 0x016861, 0x016862, 0x0104E7, 0x016863, 0x01687C, 0x01687D, 0x0104F0, 0x0104F4, 0x01687E, 0x0104F2, 0x01687F, 0x0104F5, 0x0104F6, 0x0104F7, 0x0104F8, 0x0104FB, 0x0104FA, 0x016878, 0x016879, 0x0104F9, 0x01687A, 0x01687B, 0x016874, 0x0104CB, 0x016875, 0x016876, 0x016877, 0x016870, 0x016871, 0x016872, 0x016873, 0x01684C, 0x0104DE, 0x01684D, 0x0104DC, 0x0104DD, 0x01684E, 0x0104DF, 0x0104C1, 0x0104D1, 0x0104D9, 0x0104C3, 0x0104C9, 0x0104C6, 0x0104C4, 0x0104C2, 0x0104DA, 0x0104C7, 0x01684F, 0x0104DB, 0x0104CA, 0x016848, 0x016849, 0x0104C8, 0x01684A, 0x01684B, 0x0104F3, 0x016844, 0x016845, 0x0104C5, 0x016846, 0x0104F1, 0x016847, 0x016840, 0x016841, 0x016842, 0x016843, 0x01685C, 0x01685D, 0x01685E, 0x01685F, 0x016858, 0x016859, 0x01685A, 0x01685B, 0x016854, 0x016855, 0x016856, 0x016857, 0x016850, 0x016851, 0x016852, 0x016853, 0x01682C, 0x01682D, 0x01682E, 0x01682F, 0x016828, 0x01055D, 0x016829, 0x01055C, 0x01682A, 0x01682B, 0x016824, 0x016825, 0x016826, 0x01055E, 0x016827, 0x016820, 0x016821, 0x016822, 0x016823, 0x01683C, 0x01055F, 0x01683D, 0x01683E, 0x01683F, 0x016838, 0x016839, 0x01683A, 0x01683B, 0x016834, 0x016835, 0x01055A, 0x016836, 0x010558, 0x016837, 0x010559, 0x016830, 0x016831, 0x016832, 0x016833, 0x01680C, 0x01680D, 0x01680E, 0x01681F, 0x016818, 0x016819, 0x01681A, 0x01681B, 0x016814, 0x016815, 0x016816, 0x016817, 0x016810, 0x016811, 0x010543, 0x016812, 0x016813, 0x0168EC, 0x0168ED, 0x0168EE, 0x0168EF, 0x0168E8, 0x0168E9, 0x0168EA, 0x0168EB, 0x0168E4, 0x0168E5, 0x0168E6, 0x0168E7, 0x0168E0, 0x0168E1, 0x0168E2, 0x0168E3, 0x0168FC, 0x0168FD, 0x0168FE, 0x0168FF, 0x0168F8, 0x0168F9, 0x0168FA, 0x010555, 0x0168FB, 0x0168F4, 0x0168F5, 0x0168F6, 0x0168F7, 0x0168F0, 0x0168F1, 0x0168F2, 0x0168F3, 0x0168CC, 0x0168CD, 0x0168CE, 0x0168CF, 0x0168C8, 0x0168C9, 0x0168CA, 0x0168CB, 0x0168C4, 0x0168C5, 0x0168C6, 0x0168C7, 0x0168C0, 0x010554, 0x0168C1, 0x0168C2, 0x0168C3, 0x0168DC, 0x0168DD, 0x0168DE, 0x0168DF, 0x0168D8, 0x0168D9, 0x0168DA, 0x0168DB, 0x0168D4, 0x0168D5, 0x0168D6, 0x0168D7, 0x0168D0, 0x0168D1, 0x0168D2, 0x0168D3, 0x0168AC, 0x0168AD, 0x0168AE, 0x0168AF, 0x0168A8, 0x0168A9, 0x0168AA, 0x0168AB, 0x0168A4, 0x0168A5, 0x0168A6, 0x0168A7, 0x0168A0, 0x0168A1, 0x0168A2, 0x0168A3, 0x0168BC, 0x0168BD, 0x0168BE, 0x0168BF, 0x0168B8, 0x0168B9, 0x0168BA, 0x0168BB, 0x0168B4, 0x0168B5, 0x0168B6, 0x0168B7, 0x0168B0, 0x0168B1, 0x0168B2, 0x0168B3, 0x01688C, 0x01688D, 0x01688E, 0x01688F, 0x016888, 0x016889, 0x01688A, 0x01688B, 0x016884, 0x016885, 0x016886, 0x016887, 0x016880, 0x016881, 0x016882, 0x016883, 0x01689C, 0x01689D, 0x01689E, 0x01689F, 0x016898, 0x016899, 0x01689A, 0x01689B, 0x016894, 0x016895, 0x016896, 0x016897, 0x016890, 0x016891, 0x016892, 0x016893, 0x01696C, 0x01696D, 0x01696E, 0x01696F, 0x016968, 0x016969, 0x01696A, 0x01696B, 0x016964, 0x010540, 0x010541, 0x010542, 0x010547, 0x010549, 0x016965, 0x01054B, 0x01054A, 0x010548, 0x016966, 0x016967, 0x016960, 0x010544, 0x01054C, 0x010545, 0x010546, 0x016961, 0x00A4E7, 0x016962, 0x016963, 0x01697C, 0x01697D, 0x01697E, 0x01697F, 0x016978, 0x016979, 0x01697A, 0x01697B, 0x016974, 0x01054D, 0x01054E, 0x01054F, 0x010560, 0x010561, 0x010562, 0x010563, 0x016975, 0x016976, 0x016977, 0x016970, 0x016971, 0x016972, 0x016973, 0x01694C, 0x01694D, 0x01694E, 0x01694F, 0x016948, 0x016949, 0x01694A, 0x01694B, 0x016944, 0x016945, 0x016946, 0x016947, 0x016940, 0x016941, 0x016942, 0x016943, 0x01695C, 0x01695D, 0x01695E, 0x01695F, 0x016958, 0x016959, 0x01695A, 0x01695B, 0x016954, 0x016955, 0x016956, 0x016957, 0x016950, 0x016951, 0x016952, 0x016953, 0x01692C, 0x01692D, 0x01692E, 0x01692F, 0x016928, 0x016929, 0x01692A, 0x01692B, 0x016924, 0x016925, 0x016926, 0x016927, 0x016920, 0x016921, 0x016922, 0x016923, 0x00A521, 0x01693C, 0x01693D, 0x01693E, 0x01693F, 0x016938, 0x016939, 0x01693A, 0x01693B, 0x016934, 0x016935, 0x016936, 0x016937, 0x016930, 0x016931, 0x016932, 0x016933, 0x01690C, 0x01690D, 0x01690E, 0x01690F, 0x016908, 0x016909, 0x01690A, 0x01690B, 0x016904, 0x016905, 0x016906, 0x016907, 0x016900, 0x016901, 0x016902, 0x016903, 0x01691C, 0x01691D, 0x01691E, 0x01691F, 0x016918, 0x016919, 0x01691A, 0x01691B, 0x016914, 0x016915, 0x016916, 0x016917, 0x016910, 0x016911, 0x016912, 0x016913, 0x0169EC, 0x0169ED, 0x0169EE, 0x0169EF, 0x0169E8, 0x0169E9, 0x0169EA, 0x0169EB, 0x0169E4, 0x0169E5, 0x0169E6, 0x0169E7, 0x0169E0, 0x0169E1, 0x0169E2, 0x0169E3, 0x0169FC, 0x0169FD, 0x0169FE, 0x0169FF, 0x0169F8, 0x0169F9, 0x0169FA, 0x0169FB, 0x0169F4, 0x0169F5, 0x0169F6, 0x0169F7, 0x0169F0, 0x0169F1, 0x0169F2, 0x0169F3, 0x0169CC, 0x0169CD, 0x0169CE, 0x0169CF, 0x0169C8, 0x0169C9, 0x0169CA, 0x0169CB, 0x0169C4, 0x0169C5, 0x0169C6, 0x0169C7, 0x0169C0, 0x0169C1, 0x0169C2, 0x0169C3, 0x0169DC, 0x0169DD, 0x0169DE, 0x0169DF, 0x0169D8, 0x0169D9, 0x0169DA, 0x0169DB, 0x0169D4, 0x0169D5, 0x0169D6, 0x0169D7, 0x0169D0, 0x0169D1, 0x0169D2, 0x0169D3, 0x0169AC, 0x0169AD, 0x0169AE, 0x0169AF, 0x0169A8, 0x0169A9, 0x0169AA, 0x0169AB, 0x0169A4, 0x0169A5, 0x0169A6, 0x0169A7, 0x0169A0, 0x0169A1, 0x0169A2, 0x0169A3, 0x0169BC, 0x0169BD, 0x0169BE, 0x0169BF, 0x0169B8, 0x0169B9, 0x0169BA, 0x0169BB, 0x0169B4, 0x0169B5, 0x0169B6, 0x0169B7, 0x0169B0, 0x0169B1, 0x0169B2, 0x0169B3, 0x01698C, 0x01698D, 0x01698E, 0x01698F, 0x016988, 0x016989, 0x01698A, 0x01698B, 0x016984, 0x016985, 0x016986, 0x016987, 0x016980, 0x016981, 0x016982, 0x016983, 0x01699C, 0x01699D, 0x01699E, 0x01699F, 0x016998, 0x016999, 0x01699A, 0x01699B, 0x016994, 0x016995, 0x016996, 0x016997, 0x016990, 0x016991, 0x016992, 0x016993, 0x011AEC, 0x011AED, 0x011AEE, 0x011AEF, 0x011AE8, 0x011AE9, 0x011AEA, 0x011AEB, 0x011AE4, 0x011AE5, 0x011AE6, 0x011AE7, 0x011AE0, 0x011AE1, 0x011AE2, 0x011AE3, 0x011AF8, 0x011AF4, 0x011AF5, 0x011AF6, 0x011AF7, 0x011AF0, 0x011AF1, 0x011AF2, 0x011AF3, 0x011ACC, 0x011ACD, 0x011ACE, 0x011ACF, 0x011AC8, 0x011AC9, 0x011ACA, 0x011ACB, 0x011AC4, 0x011AC5, 0x011AC6, 0x011AC7, 0x011AC0, 0x011AC1, 0x011AC2, 0x011AC3, 0x011ADC, 0x011ADD, 0x011ADE, 0x011ADF, 0x011AD8, 0x011AD9, 0x011ADA, 0x011ADB, 0x011AD4, 0x011AD5, 0x011AD6, 0x011AD7, 0x011AD0, 0x011AD1, 0x016B81, 0x016B80, 0x016B83, 0x016B82, 0x016B85, 0x011AD2, 0x016B87, 0x016B86, 0x016B89, 0x016B88, 0x016B8B, 0x016B8A, 0x011AD3, 0x0118EC, 0x016B8F, 0x0118ED, 0x0118EE, 0x0118EF, 0x0118E8, 0x0118E9, 0x0118EA, 0x0118EB, 0x0118E4, 0x0118E5, 0x0118E6, 0x0118E7, 0x0118E0, 0x0118E1, 0x0118E2, 0x0118E3, 0x0118FF, 0x0118F0, 0x0118F1, 0x0118F2, 0x0118CC, 0x0118CD, 0x0118CE, 0x0118CF, 0x0118C8, 0x0118C9, 0x0118CA, 0x0118CB, 0x0118C4, 0x0118DD, 0x0118DE, 0x0118DF, 0x0118D8, 0x0118D9, 0x0118DA, 0x0118DB, 0x0118D4, 0x0118A9, 0x0118A5, 0x0118A6, 0x0118A7, 0x0118A0, 0x0118A3, 0x0118BC, 0x0118B5, 0x0118B6, 0x0118B7, 0x0118B0, 0x0118B1, 0x0118B2, 0x0118B3, 0x0032BC, 0x0032BD, 0x0032BE, 0x0032BF, 0x0032B8, 0x0032B9, 0x0032BA, 0x0032BB, 0x0032B4, 0x0032B5, 0x0032B6, 0x0032B7, 0x0032B3, 0x003288, 0x003289, 0x003284, 0x003285, 0x003286, 0x003287, 0x003280, 0x003281, 0x003282, 0x003283, 0x011644, 0x011658, 0x011659, 0x011654, 0x011655, 0x011656, 0x011657, 0x011650, 0x011651, 0x011652, 0x011653, 0x01162C, 0x01162D, 0x01162E, 0x01162F, 0x011628, 0x011629, 0x01162A, 0x01162B, 0x011624, 0x011625, 0x011626, 0x011627, 0x011620, 0x011621, 0x011622, 0x011623, 0x01160C, 0x01160D, 0x01160E, 0x01160F, 0x00A680, 0x00A681, 0x011608, 0x011609, 0x01160A, 0x01160B, 0x00A686, 0x00A687, 0x011604, 0x011605, 0x00A68A, 0x011606, 0x011607, 0x011600, 0x011601, 0x011602, 0x011603, 0x01161C, 0x01161D, 0x01161E, 0x01161F, 0x011618, 0x011619, 0x01161A, 0x01161B, 0x011614, 0x011615, 0x011616, 0x011617, 0x011610, 0x011611, 0x011612, 0x011613, 0x00306C, 0x00306D, 0x00306E, 0x00306F, 0x003068, 0x003069, 0x00306A, 0x00306B, 0x003064, 0x003065, 0x003066, 0x003067, 0x003060, 0x003061, 0x003062, 0x003063, 0x00307C, 0x00307D, 0x00307E, 0x00307F, 0x003078, 0x003079, 0x00307A, 0x00307B, 0x003074, 0x003075, 0x003076, 0x003071, 0x003072, 0x00304B, 0x003044, 0x003045, 0x003046, 0x003047, 0x003041, 0x003042, 0x003043, 0x00305C, 0x00305D, 0x00305E, 0x00305F, 0x003058, 0x003059, 0x00305A, 0x00305B, 0x003054, 0x003055, 0x003056, 0x003052, 0x0116A5, 0x0116A6, 0x0116A7, 0x0116A0, 0x0116A3, 0x003024, 0x003025, 0x003026, 0x003027, 0x003021, 0x003022, 0x003023, 0x00303C, 0x003038, 0x003039, 0x00303A, 0x01168C, 0x01168D, 0x01168E, 0x01168F, 0x011688, 0x011689, 0x01168A, 0x01168B, 0x011684, 0x011685, 0x011686, 0x011687, 0x011680, 0x011681, 0x011682, 0x011683, 0x01169C, 0x01169D, 0x01169E, 0x011699, 0x01169A, 0x01169B, 0x011694, 0x011695, 0x011696, 0x011697, 0x011690, 0x011691, 0x011692, 0x011693, 0x0030EC, 0x0030ED, 0x0030EE, 0x0030EF, 0x0030E8, 0x0030E9, 0x0030EA, 0x0030EB, 0x0030E4, 0x00A73D, 0x00A73C, 0x0030E5, 0x0030E6, 0x0030E7, 0x0030E0, 0x0030E1, 0x00A73E, 0x0030E2, 0x0030E3, 0x0030FF, 0x0030F8, 0x0030F9, 0x0030FA, 0x00A723, 0x0030F4, 0x0030F5, 0x0030F6, 0x00A73F, 0x0030F7, 0x0030F0, 0x00A738, 0x0030F1, 0x0030F2, 0x0030F3, 0x0030CC, 0x0030CD, 0x0030CE, 0x0030CF, 0x0030C8, 0x0030C9, 0x0030CA, 0x00A739, 0x0030CB, 0x0030C4, 0x0030C5, 0x0030C6, 0x0030C7, 0x0030C0, 0x0030C1, 0x00A73B, 0x00A732, 0x00A733, 0x0030C2, 0x0030C3, 0x0030DC, 0x0030DD, 0x0030DE, 0x0030DF, 0x0030D8, 0x0030D9, 0x0030DA, 0x0030DB, 0x00A736, 0x00A737, 0x0030D4, 0x0030D5, 0x0030D6, 0x0030D7, 0x0030D0, 0x0030D1, 0x0030D2, 0x0030D3, 0x0030AC, 0x0030AD, 0x0030AE, 0x0030AF, 0x00A77D, 0x0030A8, 0x00A77C, 0x0030A9, 0x00A750, 0x0030AA, 0x0030AB, 0x0030A4, 0x00A761, 0x0030A5, 0x0030A6, 0x011739, 0x00308B, 0x003084, 0x003085, 0x003086, 0x00A756, 0x00A757, 0x003081, 0x003082, 0x00A774, 0x00A77A, 0x00A722, 0x00A77B, 0x00A724, 0x00A725, 0x00A726, 0x011715, 0x011716, 0x011717, 0x00A72B, 0x011711, 0x011712, 0x011713, 0x00A776, 0x00A72A, 0x003094, 0x003095, 0x00A777, 0x003096, 0x003090, 0x003091, 0x003092, 0x00A771, 0x003093, 0x00316C, 0x00316D, 0x00316E, 0x00316F, 0x00A77E, 0x003168, 0x00A77F, 0x003169, 0x00316A, 0x00316B, 0x003164, 0x00A78C, 0x00A78D, 0x003165, 0x00A78E, 0x003166, 0x003167, 0x003160, 0x00A78F, 0x003161, 0x003162, 0x003163, 0x00317C, 0x00A79D, 0x00317D, 0x00317E, 0x00A79C, 0x00A787, 0x00317F, 0x00A79E, 0x003178, 0x003179, 0x00317A, 0x00A781, 0x00317B, 0x003174, 0x003175, 0x00A783, 0x003176, 0x00A780, 0x00A7A2, 0x003177, 0x00A7A3, 0x003170, 0x00A785, 0x00A786, 0x00A784, 0x00A7A0, 0x00A7A1, 0x003171, 0x00A7A4, 0x00A7A5, 0x00A7AA, 0x00A7A6, 0x00A7AB, 0x003172, 0x003173, 0x00314C, 0x00314D, 0x00A7B6, 0x00A7B7, 0x00314E, 0x00314F, 0x003148, 0x003149, 0x00314A, 0x00A7B3, 0x00314B, 0x003144, 0x003145, 0x003146, 0x003147, 0x003140, 0x003141, 0x003142, 0x003143, 0x00315C, 0x00315D, 0x00315E, 0x00315F, 0x003158, 0x003159, 0x00315A, 0x00315B, 0x003154, 0x003155, 0x003156, 0x003157, 0x003150, 0x003151, 0x003152, 0x003153, 0x00312C, 0x00312D, 0x003128, 0x003129, 0x00312A, 0x00312B, 0x003124, 0x003125, 0x003126, 0x003127, 0x003120, 0x003121, 0x00A760, 0x003122, 0x003123, 0x00313C, 0x00313D, 0x00313E, 0x00313F, 0x003138, 0x003139, 0x00313A, 0x00A766, 0x00313B, 0x00A767, 0x003134, 0x003135, 0x003136, 0x003137, 0x003131, 0x003132, 0x00A764, 0x00A765, 0x003133, 0x00310C, 0x00A7FC, 0x00310D, 0x00A76A, 0x00A76B, 0x00A7FD, 0x00310E, 0x00A7FE, 0x00A7FF, 0x00310F, 0x003108, 0x003109, 0x00310A, 0x00310B, 0x003105, 0x003106, 0x003107, 0x00311C, 0x00311D, 0x00311E, 0x00311F, 0x003118, 0x003119, 0x00311A, 0x00311B, 0x003114, 0x003115, 0x003116, 0x003117, 0x003110, 0x003111, 0x003112, 0x003113, 0x0031FC, 0x0031FD, 0x0031FE, 0x0031FF, 0x0031F8, 0x0031F9, 0x0031FA, 0x0031FB, 0x0031F4, 0x0031F5, 0x0031F6, 0x0031F2, 0x0031F3, 0x011447, 0x011458, 0x011459, 0x011454, 0x011455, 0x011456, 0x011457, 0x011450, 0x011451, 0x011452, 0x011453, 0x01142C, 0x01142D, 0x01142E, 0x01142F, 0x011428, 0x011429, 0x01142A, 0x01142B, 0x011424, 0x0031AB, 0x0031A4, 0x0031A5, 0x0031A6, 0x0031A7, 0x0031A0, 0x0031A1, 0x0031A2, 0x011430, 0x01140C, 0x011400, 0x011415, 0x011416, 0x011417, 0x011410, 0x011411, 0x011412, 0x011413, 0x003194, 0x003195, 0x003192, 0x003193, 0x0114C4, 0x0114C5, 0x0114C7, 0x0114D8, 0x0114D9, 0x0114D4, 0x0114D5, 0x0114D6, 0x0114D7, 0x0114D0, 0x0114D1, 0x0114D2, 0x0114D3, 0x0114AC, 0x0114AD, 0x0114AE, 0x0114AF, 0x0114A8, 0x0114A9, 0x0114AA, 0x0114AB, 0x0114A4, 0x0114A5, 0x0114A6, 0x0114A7, 0x0114A0, 0x0114A1, 0x0114A2, 0x0114A3, 0x01148C, 0x01148D, 0x01148E, 0x01148F, 0x011488, 0x011489, 0x01148A, 0x01148B, 0x011484, 0x011485, 0x011486, 0x011487, 0x011480, 0x011481, 0x011482, 0x011483, 0x01149C, 0x01149D, 0x01149E, 0x01149F, 0x011498, 0x011499, 0x01149A, 0x01149B, 0x011494, 0x011495, 0x011496, 0x011497, 0x011490, 0x011491, 0x011492, 0x011493, 0x0115D8, 0x0115D9, 0x0115DA, 0x0115DB, 0x0115AC, 0x0115AD, 0x0115AE, 0x0115A8, 0x0115A9, 0x0115AA, 0x0115AB, 0x0115A4, 0x0115A5, 0x0115A6, 0x0115A7, 0x0115A0, 0x0115A1, 0x0115A2, 0x0115A3, 0x01158C, 0x01158D, 0x01158E, 0x01158F, 0x011588, 0x011589, 0x01158A, 0x01158B, 0x011584, 0x011585, 0x011586, 0x011587, 0x011580, 0x011581, 0x011582, 0x011583, 0x01159C, 0x01159D, 0x01159E, 0x01159F, 0x011598, 0x011599, 0x01159A, 0x01159B, 0x011594, 0x011595, 0x011596, 0x011597, 0x011590, 0x011591, 0x011592, 0x011593, 0x011228, 0x011229, 0x01122A, 0x01122B, 0x011224, 0x011225, 0x011226, 0x011227, 0x011220, 0x011221, 0x011222, 0x011223, 0x01120C, 0x01120D, 0x01120E, 0x01120F, 0x011208, 0x011209, 0x01120A, 0x01120B, 0x011204, 0x011205, 0x011206, 0x011207, 0x011200, 0x011201, 0x011202, 0x011203, 0x01121C, 0x01121D, 0x01121E, 0x01121F, 0x011218, 0x011219, 0x01121A, 0x01121B, 0x011214, 0x011215, 0x011216, 0x011217, 0x011210, 0x011211, 0x011213, 0x002C6C, 0x002C6D, 0x002C6E, 0x002C6F, 0x002C68, 0x002C69, 0x002C6A, 0x002C6B, 0x002C64, 0x002C65, 0x002C66, 0x002C61, 0x002C62, 0x0112F5, 0x0112F6, 0x002C46, 0x0112D0, 0x002C5B, 0x002C54, 0x002C55, 0x002C56, 0x002C50, 0x002C51, 0x002C52, 0x0112A0, 0x002C35, 0x002C30, 0x002C0E, 0x002C05, 0x002C1B, 0x002C14, 0x002C15, 0x002C16, 0x002C17, 0x002C10, 0x002C11, 0x002C12, 0x002C13, 0x002CEC, 0x002CED, 0x002CEE, 0x011360, 0x011361, 0x002CEB, 0x002CE4, 0x002CE0, 0x002CE1, 0x002CE2, 0x002CE3, 0x002CFD, 0x002CF2, 0x002CF3, 0x002CCC, 0x002CCD, 0x002CCE, 0x002CCF, 0x002CC8, 0x002CC9, 0x002CCA, 0x002CCB, 0x002CC7, 0x002CC0, 0x002CC1, 0x002CC2, 0x002CC3, 0x002CDC, 0x002CDD, 0x002CDE, 0x002CD8, 0x002CD9, 0x002CDA, 0x002CD0, 0x002CAB, 0x002CA5, 0x002CA6, 0x002CA1, 0x002CA2, 0x002CA3, 0x002CB8, 0x002CB4, 0x002CB5, 0x002CB3, 0x002C8F, 0x002C88, 0x002C89, 0x002C8A, 0x002C98, 0x002C99, 0x002C9B, 0x002C94, 0x002C95, 0x002C96, 0x002C97, 0x002C90, 0x002C91, 0x002C92, 0x002C93, 0x002D64, 0x002D65, 0x002D66, 0x002D67, 0x002D60, 0x002D61, 0x002D62, 0x002D63, 0x002D4C, 0x002D4D, 0x002D4E, 0x002D4F, 0x002D48, 0x002D49, 0x002D4A, 0x002D4B, 0x002D44, 0x002D45, 0x002D46, 0x002D47, 0x002D40, 0x002D41, 0x002D42, 0x002D43, 0x002D5C, 0x002D5D, 0x002D5E, 0x002D5F, 0x002D58, 0x002D59, 0x002D5A, 0x002D5B, 0x002D54, 0x002D55, 0x002D56, 0x002D57, 0x002D50, 0x002D51, 0x002D52, 0x002D53, 0x002D2D, 0x002D24, 0x002D25, 0x002D27, 0x002D20, 0x002D21, 0x002D22, 0x002D23, 0x002D3C, 0x002D3D, 0x002D3E, 0x002D3F, 0x002D38, 0x002D39, 0x002D3A, 0x002D3B, 0x002D34, 0x002D35, 0x002D36, 0x002D37, 0x002D30, 0x002D31, 0x016F01, 0x016F00, 0x016F03, 0x016F02, 0x016F05, 0x016F04, 0x016F07, 0x016F06, 0x016F09, 0x016F08, 0x016F0B, 0x016F0A, 0x002D32, 0x002D33, 0x016F0F, 0x002D0C, 0x016F11, 0x016F10, 0x016F13, 0x016F12, 0x002D0D, 0x016F14, 0x016F17, 0x002D0E, 0x002D0F, 0x002D08, 0x016F1B, 0x002D09, 0x016F1D, 0x016F1C, 0x002D0A, 0x016F1E, 0x002D0B, 0x002D04, 0x002D05, 0x002D06, 0x002D07, 0x002D00, 0x002D01, 0x002D02, 0x002D03, 0x002D1C, 0x002D1D, 0x002D1E, 0x002D1F, 0x002D18, 0x002D19, 0x002D1A, 0x011065, 0x011066, 0x011067, 0x011060, 0x011061, 0x011062, 0x011063, 0x002DCC, 0x002DCD, 0x002DCE, 0x002DC8, 0x002DC9, 0x002DCA, 0x011058, 0x002DD8, 0x011028, 0x011020, 0x002DAB, 0x002DA4, 0x002DA5, 0x002DA6, 0x002DA0, 0x002DA1, 0x002DA2, 0x011030, 0x011008, 0x002D8F, 0x002D88, 0x002D89, 0x011015, 0x011016, 0x011017, 0x011010, 0x011011, 0x011012, 0x011013, 0x002D94, 0x002D95, 0x002D96, 0x0110E8, 0x002D90, 0x002D91, 0x002D92, 0x0110E5, 0x0110E6, 0x0110E7, 0x0110E0, 0x0110E1, 0x0110E2, 0x0110E3, 0x0110F8, 0x0110F9, 0x0110F4, 0x0110F5, 0x0110F6, 0x0110F7, 0x0110F0, 0x0110F1, 0x0110F2, 0x0110F3, 0x0110DC, 0x0110DD, 0x0110DE, 0x0110DF, 0x0110D8, 0x0110D9, 0x0110DA, 0x0110DB, 0x0110D4, 0x0110D5, 0x0110D6, 0x0110D7, 0x0110D0, 0x0110D1, 0x0110D2, 0x0110D3, 0x0110AC, 0x0110AD, 0x0110AE, 0x0110AF, 0x0110A8, 0x0110A9, 0x0110AA, 0x01BC01, 0x01BC00, 0x01BC03, 0x01BC02, 0x01BC05, 0x01BC04, 0x01230D, 0x01230C, 0x01BC09, 0x01230E, 0x01BC0B, 0x01BC0A, 0x01BC08, 0x01BC0C, 0x01BC0F, 0x01BC0E, 0x01BC11, 0x01BC10, 0x01BC13, 0x01BC12, 0x01BC15, 0x01BC14, 0x01BC17, 0x01BC16, 0x01BC19, 0x01BC18, 0x01BC1B, 0x01BC1A, 0x01BC1D, 0x01BC1C, 0x01BC1F, 0x01BC1E, 0x01BC3A, 0x01BC3B, 0x01BC36, 0x01BC34, 0x01BC06, 0x01BC07, 0x01232D, 0x01232C, 0x01BC0D, 0x01232E, 0x012331, 0x012330, 0x012333, 0x012332, 0x012335, 0x012334, 0x012337, 0x012336, 0x012339, 0x012338, 0x01233B, 0x01233A, 0x01BC30, 0x01BC31, 0x01233F, 0x01BC33, 0x012341, 0x012340, 0x012343, 0x01BC37, 0x01BC32, 0x01BC35, 0x012347, 0x012346, 0x012349, 0x012348, 0x01BC22, 0x01234A, 0x01234D, 0x01234C, 0x01234F, 0x01234E, 0x012351, 0x012350, 0x012353, 0x012352, 0x012355, 0x012354, 0x012357, 0x012356, 0x012359, 0x012358, 0x01235B, 0x01235A, 0x01235D, 0x01235C, 0x01235F, 0x01235E, 0x012361, 0x012360, 0x012363, 0x012362, 0x012365, 0x012364, 0x012367, 0x012366, 0x012369, 0x012368, 0x01236B, 0x01236A, 0x01BC3C, 0x01BC23, 0x01236F, 0x01BC3D, 0x012371, 0x012370, 0x012373, 0x012372, 0x012375, 0x012374, 0x012377, 0x012376, 0x01BC38, 0x01BC3E, 0x01237B, 0x01BC3F, 0x01237D, 0x01237C, 0x01BC39, 0x01237E, 0x012381, 0x012380, 0x012383, 0x012382, 0x012385, 0x012384, 0x012387, 0x012386, 0x012389, 0x012388, 0x01238B, 0x01238A, 0x01238D, 0x01238C, 0x01238F, 0x01238E, 0x0110AB, 0x012390, 0x0110A4, 0x0110A5, 0x012395, 0x012394, 0x012397, 0x012396, 0x012399, 0x012398, 0x0110A6, 0x0110A7, 0x0110A0, 0x0110A1, 0x0110A2, 0x0110A3, 0x01108C, 0x01108D, 0x01108E, 0x01108F, 0x011088, 0x011089, 0x01BC20, 0x01BC21, 0x01108A, 0x01108B, 0x01BC24, 0x01BC25, 0x01BC26, 0x01BC27, 0x011084, 0x011085, 0x01BC2A, 0x01BC2B, 0x011086, 0x011087, 0x011083, 0x01109C, 0x01109D, 0x01109E, 0x01109F, 0x011098, 0x011099, 0x01109A, 0x01109B, 0x011094, 0x011095, 0x011096, 0x011097, 0x011090, 0x011091, 0x011092, 0x011093, 0x01116C, 0x01116D, 0x01116E, 0x01116F, 0x011168, 0x011169, 0x01116A, 0x01116B, 0x011164, 0x011165, 0x011166, 0x011167, 0x011160, 0x011161, 0x011162, 0x011163, 0x011176, 0x011170, 0x011171, 0x011172, 0x01115C, 0x01115D, 0x01115E, 0x01115F, 0x011158, 0x01BC58, 0x01BC59, 0x011159, 0x01115A, 0x01115B, 0x011154, 0x01BC5E, 0x01BC5F, 0x011155, 0x011156, 0x011157, 0x011150, 0x011151, 0x011152, 0x011153, 0x011124, 0x01BC68, 0x01BC69, 0x011125, 0x011126, 0x011120, 0x011121, 0x011122, 0x011123, 0x01113C, 0x01113D, 0x01113E, 0x01113F, 0x011138, 0x011139, 0x01113A, 0x01113B, 0x011136, 0x011137, 0x01110C, 0x01110D, 0x01110E, 0x01110F, 0x011108, 0x011109, 0x01110A, 0x01110B, 0x011104, 0x011105, 0x011106, 0x011107, 0x011103, 0x01111C, 0x01111D, 0x01111E, 0x01111F, 0x011118, 0x012492, 0x012493, 0x011119, 0x01111A, 0x01111B, 0x011114, 0x011115, 0x011116, 0x011117, 0x011110, 0x011111, 0x011112, 0x011113, 0x0111EC, 0x0111ED, 0x0111EE, 0x0111EF, 0x0111E8, 0x0111E9, 0x0111EA, 0x0111EB, 0x0111E4, 0x0111E5, 0x0111E6, 0x0111E7, 0x0111E1, 0x0111E2, 0x00D7B1, 0x00D7B0, 0x00D7B3, 0x00D7B2, 0x00D7B5, 0x00D7B4, 0x00D7B7, 0x00D7B6, 0x00D7B9, 0x00D7B8, 0x00D7BB, 0x00D7BA, 0x00D7BD, 0x00D7BC, 0x00D7BF, 0x00D7BE, 0x00D7C1, 0x00D7C0, 0x00D7C3, 0x00D7C2, 0x00D7C5, 0x00D7C4, 0x0111E3, 0x00D7C6, 0x0111F4, 0x0111F0, 0x00D7CB, 0x0111F1, 0x00D7CD, 0x00D7CC, 0x00D7CF, 0x00D7CE, 0x00D7D1, 0x00D7D0, 0x00D7D3, 0x00D7D2, 0x00D7D5, 0x00D7D4, 0x00D7D7, 0x00D7D6, 0x00D7D9, 0x00D7D8, 0x00D7DB, 0x00D7DA, 0x00D7DD, 0x00D7DC, 0x00D7DF, 0x00D7DE, 0x00D7E1, 0x00D7E0, 0x00D7E3, 0x00D7E2, 0x00D7E5, 0x00D7E4, 0x00D7E7, 0x00D7E6, 0x00D7E9, 0x00D7E8, 0x00D7EB, 0x00D7EA, 0x00D7ED, 0x00D7EC, 0x00D7EF, 0x00D7EE, 0x00D7F1, 0x00D7F0, 0x00D7F3, 0x00D7F2, 0x00D7F5, 0x00D7F4, 0x00D7F7, 0x00D7F6, 0x00D7F9, 0x00D7F8, 0x00D7FB, 0x00D7FA, 0x0111F2, 0x0111F3, 0x0111C4, 0x0111C1, 0x0111C2, 0x0111C3, 0x0111DC, 0x0111D8, 0x0111D9, 0x0111DA, 0x0111D4, 0x0111D5, 0x0111D6, 0x0111D7, 0x0111D0, 0x0111D1, 0x0111D2, 0x0111D3, 0x0111AC, 0x0111AD, 0x0111AE, 0x0111AF, 0x0111A8, 0x0111A9, 0x0111AA, 0x0111AB, 0x0111A4, 0x0111A5, 0x0111A6, 0x0111A7, 0x0111A0, 0x0111A1, 0x0111A2, 0x0111A3, 0x0111B0, 0x0111B1, 0x0111B2, 0x01118C, 0x01118D, 0x01118E, 0x01118F, 0x011188, 0x011189, 0x01118A, 0x01118B, 0x011184, 0x011185, 0x011186, 0x011187, 0x011183, 0x01119C, 0x01119D, 0x01119E, 0x01119F, 0x011198, 0x011199, 0x01119A, 0x01119B, 0x011194, 0x011195, 0x011196, 0x011197, 0x011190, 0x011191, 0x011192, 0x011193, 0x010E6C, 0x010E6D, 0x010E6E, 0x010E6F, 0x010E68, 0x010E69, 0x010E6A, 0x010E6B, 0x010E64, 0x010E65, 0x010E66, 0x010E67, 0x010E60, 0x010E61, 0x010E62, 0x010E63, 0x010E7C, 0x010E7D, 0x010E7E, 0x010E78, 0x010E79, 0x010E7A, 0x010E7B, 0x010E74, 0x010E75, 0x010E76, 0x010E77, 0x010E70, 0x010E71, 0x010E72, 0x010E73, 0x010C48, 0x010C44, 0x010C45, 0x010C46, 0x010C47, 0x010C40, 0x010C41, 0x010C42, 0x010C43, 0x010C2C, 0x010C2D, 0x010C2E, 0x010C2F, 0x010C28, 0x010C29, 0x010C2A, 0x010C2B, 0x010C24, 0x010C25, 0x010C26, 0x010C27, 0x010C20, 0x010C21, 0x010C22, 0x010C23, 0x010C3C, 0x010C3D, 0x010C3E, 0x010C3F, 0x010C38, 0x010C39, 0x010C3A, 0x010C3B, 0x010C34, 0x010C35, 0x010C36, 0x010C37, 0x010C30, 0x012501, 0x012500, 0x012503, 0x012502, 0x012505, 0x012504, 0x012507, 0x012506, 0x010C31, 0x010C32, 0x01250B, 0x01250A, 0x01250D, 0x01250C, 0x01250F, 0x01250E, 0x010C33, 0x010C0C, 0x012537, 0x010C0D, 0x012515, 0x012514, 0x010C0E, 0x010C0F, 0x012519, 0x012518, 0x01251B, 0x01251A, 0x01251D, 0x01251C, 0x01251F, 0x01251E, 0x010C08, 0x010C09, 0x010C0A, 0x010C0B, 0x010C04, 0x010C05, 0x01253C, 0x01253D, 0x010C06, 0x01253E, 0x012508, 0x012509, 0x012538, 0x010C07, 0x010C00, 0x010C01, 0x012531, 0x012530, 0x012533, 0x012539, 0x010C02, 0x01253F, 0x012532, 0x012536, 0x012534, 0x010C03, 0x010C1C, 0x010C1D, 0x01253A, 0x01253B, 0x010C1E, 0x012535, 0x010C1F, 0x010C18, 0x012524, 0x010C19, 0x010C1A, 0x010C1B, 0x010C14, 0x010C15, 0x010C16, 0x010C17, 0x010C10, 0x010C11, 0x010C12, 0x010C13, 0x010CEC, 0x010CED, 0x010CEE, 0x010CEF, 0x010CE8, 0x010CE9, 0x010CEA, 0x010CEB, 0x010CE4, 0x010CE5, 0x010CE6, 0x010CE7, 0x010CE0, 0x010CE1, 0x010CE2, 0x010CE3, 0x010CFC, 0x010CFD, 0x010CFE, 0x012525, 0x012523, 0x010CFF, 0x010CFA, 0x010CFB, 0x010CF0, 0x010CF1, 0x012522, 0x010CF2, 0x010CCC, 0x012521, 0x010CCD, 0x012520, 0x010CCE, 0x010CCF, 0x010CC8, 0x010CC9, 0x010CCA, 0x012527, 0x010CCB, 0x010CC4, 0x010CC5, 0x010CC6, 0x010CC7, 0x010CC0, 0x010CC1, 0x010CC2, 0x012526, 0x010CC3, 0x010CDC, 0x010CDD, 0x010CDE, 0x010CDF, 0x010CD8, 0x010CD9, 0x010CDA, 0x010CDB, 0x010CD4, 0x010CD5, 0x010CD6, 0x010CD7, 0x010CD0, 0x010CD1, 0x010CD2, 0x010CD3, 0x010CAC, 0x010CAD, 0x010CAE, 0x010CAF, 0x010CA8, 0x010CA9, 0x010CAA, 0x010CAB, 0x010CA4, 0x010CA5, 0x010CA6, 0x010CA7, 0x010CA0, 0x010CA1, 0x010CA2, 0x010CA3, 0x010CB0, 0x010CB1, 0x010CB2, 0x010C8C, 0x010C8D, 0x010C8E, 0x010C8F, 0x010C88, 0x010C89, 0x010C8A, 0x012528, 0x012529, 0x01252A, 0x01252B, 0x01252C, 0x01252D, 0x01252E, 0x01252F, 0x010C8B, 0x010C84, 0x010C85, 0x010C86, 0x010C87, 0x010C80, 0x010C81, 0x010C82, 0x010C83, 0x010C9C, 0x010C9D, 0x010C9E, 0x010C9F, 0x010C98, 0x010C99, 0x010C9A, 0x012540, 0x012541, 0x012542, 0x012543, 0x010C9B, 0x010C94, 0x010C95, 0x010C96, 0x010C97, 0x010C90, 0x010C91, 0x010C92, 0x010C93, 0x00277C, 0x00277D, 0x00277E, 0x00277F, 0x002778, 0x002779, 0x00277A, 0x00277B, 0x002776, 0x002777, 0x010A6C, 0x010A6D, 0x010A6E, 0x010A6F, 0x010A68, 0x010A69, 0x010A6A, 0x010A6B, 0x010A64, 0x010A65, 0x010A66, 0x010A67, 0x010A60, 0x010A61, 0x010A62, 0x010A63, 0x010A7C, 0x010A7D, 0x010A7E, 0x010A78, 0x010A79, 0x010A7A, 0x010A7B, 0x010A74, 0x010A75, 0x010A76, 0x010A77, 0x010A70, 0x010A71, 0x010A72, 0x010A73, 0x010A44, 0x010A45, 0x010A46, 0x010A47, 0x010A40, 0x010A41, 0x010A42, 0x010A43, 0x010A2C, 0x010A2D, 0x010A2E, 0x010A2F, 0x010A28, 0x010A29, 0x010A2A, 0x010A2B, 0x010A24, 0x010A25, 0x010A26, 0x010A27, 0x010A20, 0x010A21, 0x010A22, 0x010A23, 0x010A30, 0x010A31, 0x010A32, 0x010A33, 0x00278C, 0x00278D, 0x00278E, 0x002788, 0x002789, 0x00278A, 0x002787, 0x002783, 0x010A15, 0x010A16, 0x010A17, 0x010A10, 0x010A11, 0x010A12, 0x010A13, 0x010AEC, 0x010AED, 0x010AEE, 0x010AEF, 0x002790, 0x002791, 0x00246C, 0x00246D, 0x00246E, 0x00246B, 0x002464, 0x002465, 0x002466, 0x002467, 0x002460, 0x002461, 0x002462, 0x002463, 0x00247C, 0x00247D, 0x00247E, 0x00247F, 0x002478, 0x002479, 0x00247A, 0x002477, 0x010AC5, 0x010AC6, 0x010AC7, 0x010AC0, 0x010AC1, 0x010AC2, 0x010AC3, 0x010ADC, 0x010ADD, 0x010ADE, 0x010ADF, 0x010AD8, 0x010AD9, 0x010ADA, 0x010ADB, 0x010AD4, 0x010AD5, 0x010AD6, 0x010AD7, 0x010AD0, 0x010AD1, 0x010AD2, 0x010AD3, 0x01F10C, 0x01F108, 0x01F109, 0x01F10A, 0x01F10B, 0x01F104, 0x010A8B, 0x010A84, 0x010A85, 0x010A86, 0x010A87, 0x010A80, 0x010A81, 0x010A82, 0x010A83, 0x010A9C, 0x010A9D, 0x010A9E, 0x010A9F, 0x010A98, 0x010A99, 0x010A9A, 0x010A9B, 0x010A94, 0x010A95, 0x010A96, 0x010A97, 0x010A90, 0x010A91, 0x010A92, 0x010A93, 0x010B6C, 0x010B6D, 0x010B6E, 0x010B6F, 0x010B68, 0x010B69, 0x010B6A, 0x010B6B, 0x010B64, 0x010B61, 0x010B62, 0x010B7D, 0x010B7E, 0x010B7F, 0x010B78, 0x010B79, 0x010B7A, 0x010B7B, 0x0024FC, 0x0024FD, 0x0024FE, 0x0024FA, 0x010B45, 0x010B46, 0x010B47, 0x010B40, 0x010B41, 0x010B42, 0x010B43, 0x010B5C, 0x010B5D, 0x010B5E, 0x010B5F, 0x010B58, 0x010B59, 0x010B5A, 0x010B5B, 0x010B54, 0x010B55, 0x010B50, 0x010B51, 0x010B52, 0x010B53, 0x010B2C, 0x010B2D, 0x010B2E, 0x010B2F, 0x010B28, 0x010B29, 0x010B2A, 0x010B2B, 0x010B24, 0x010B25, 0x010B26, 0x010B27, 0x010B20, 0x010B21, 0x010B22, 0x010B23, 0x010B34, 0x010B35, 0x010B30, 0x010B31, 0x010B32, 0x010B33, 0x010B0C, 0x010B0D, 0x010B0E, 0x010B0F, 0x010B08, 0x010B09, 0x010B0A, 0x010B0B, 0x010B04, 0x00249B, 0x002494, 0x002496, 0x002491, 0x002493, 0x01EE7E, 0x01EE79, 0x01EE7A, 0x01EE7B, 0x01EE74, 0x01EE75, 0x01EE76, 0x01EE77, 0x01EE70, 0x01EE71, 0x01EE72, 0x01EE4D, 0x01EE4E, 0x01EE4F, 0x01EE49, 0x01EE4B, 0x01EE47, 0x01EE42, 0x01EE5D, 0x01EE5F, 0x01EE59, 0x01EE5B, 0x01EE54, 0x01EE57, 0x01EE51, 0x01EE52, 0x01EE2C, 0x01EE2D, 0x01EE2E, 0x01EE2F, 0x01EE29, 0x01EE2A, 0x01EE2B, 0x01EE24, 0x010BAC, 0x010BAD, 0x010BAF, 0x01EE21, 0x010BAA, 0x010BAB, 0x01EE39, 0x01EE3B, 0x01EE34, 0x01EE35, 0x01EE36, 0x01EE37, 0x01EE30, 0x01EE31, 0x01EE32, 0x01EE0C, 0x01EE0D, 0x01EE0E, 0x01EE0F, 0x01EE08, 0x01EE09, 0x01EE0A, 0x01EE0B, 0x01EE15, 0x01EE16, 0x01EE17, 0x01EE10, 0x01EE11, 0x01EE12, 0x01EE13, 0x010B90, 0x010B91, 0x01086C, 0x01086D, 0x01086E, 0x01086F, 0x010868, 0x010869, 0x01086A, 0x01086B, 0x010864, 0x010865, 0x010866, 0x010867, 0x010860, 0x010861, 0x010862, 0x010863, 0x01087C, 0x01087D, 0x01087E, 0x01087F, 0x010879, 0x01087A, 0x01087B, 0x010874, 0x010875, 0x010876, 0x010870, 0x010871, 0x010872, 0x010873, 0x01084C, 0x01084D, 0x01084E, 0x01084F, 0x010848, 0x010849, 0x01084A, 0x01084B, 0x010844, 0x010845, 0x010846, 0x010847, 0x010840, 0x010841, 0x010842, 0x010843, 0x01085C, 0x01085D, 0x01085E, 0x01085F, 0x010858, 0x010859, 0x01085A, 0x01EEAF, 0x01EEA8, 0x010851, 0x010853, 0x01082F, 0x01082B, 0x010824, 0x010825, 0x010826, 0x01EEB6, 0x01EEB7, 0x01EEB2, 0x01EEB3, 0x01EE8C, 0x01EE8F, 0x010831, 0x01EE82, 0x01080B, 0x010804, 0x010805, 0x01EE98, 0x01081B, 0x010814, 0x010815, 0x010816, 0x010817, 0x010810, 0x010811, 0x010812, 0x010813, 0x0108EC, 0x0108ED, 0x0108EE, 0x0108EF, 0x0108E8, 0x0108E9, 0x0108EA, 0x0108EB, 0x0108E4, 0x0108E5, 0x0108E6, 0x0108E7, 0x0108E0, 0x0108E1, 0x0108E2, 0x0108E3, 0x0108FC, 0x0108FD, 0x0108FE, 0x0108FF, 0x0108FB, 0x0108F4, 0x0108F5, 0x0108F0, 0x0108F1, 0x0108F2, 0x0108AC, 0x0108AD, 0x0108AE, 0x0108AF, 0x0108A8, 0x0108A9, 0x0108AA, 0x0108AB, 0x0108A7, 0x01088C, 0x01088D, 0x01088E, 0x01088F, 0x010888, 0x010889, 0x01088A, 0x01088B, 0x010884, 0x010885, 0x010886, 0x010887, 0x010880, 0x010881, 0x010882, 0x010883, 0x01089C, 0x01089D, 0x01089E, 0x010898, 0x010899, 0x01089A, 0x01089B, 0x010894, 0x010895, 0x010896, 0x010897, 0x010890, 0x010891, 0x010892, 0x010893, 0x01092C, 0x01092D, 0x01092E, 0x01092F, 0x010928, 0x010929, 0x01092A, 0x01092B, 0x010924, 0x010925, 0x010926, 0x010927, 0x010920, 0x010921, 0x010922, 0x010923, 0x010938, 0x010939, 0x010934, 0x010935, 0x010936, 0x010937, 0x010930, 0x010931, 0x010932, 0x010933, 0x01090C, 0x01090D, 0x01090E, 0x01090F, 0x010908, 0x010909, 0x01090A, 0x01090B, 0x010904, 0x010905, 0x010906, 0x010907, 0x010900, 0x010901, 0x010902, 0x010903, 0x010918, 0x010919, 0x01091A, 0x01091B, 0x010914, 0x010915, 0x010916, 0x010917, 0x010910, 0x010911, 0x010912, 0x010913, 0x0109EC, 0x0109ED, 0x0109EE, 0x0109EF, 0x0109E8, 0x0109E9, 0x0109EA, 0x0109EB, 0x0109E4, 0x0109E5, 0x0109E6, 0x0109E7, 0x0109E0, 0x0109E1, 0x0109E2, 0x0109E3, 0x0109FC, 0x0109FD, 0x0109FE, 0x0109FF, 0x0109F8, 0x0109F9, 0x0109FA, 0x0109FB, 0x0109F4, 0x0109F5, 0x0109F6, 0x0109F7, 0x0109F0, 0x0109F1, 0x0109F2, 0x0109F3, 0x0109CC, 0x0109CD, 0x0109CE, 0x0109CF, 0x0109C8, 0x0109C9, 0x0109CA, 0x0109CB, 0x0109C4, 0x0109C5, 0x0109C6, 0x0109C7, 0x0109C0, 0x0109C1, 0x0109C2, 0x0109C3, 0x0109DC, 0x0109DD, 0x0109DE, 0x0109DF, 0x0109D8, 0x0109D9, 0x0109DA, 0x0109DB, 0x0109D4, 0x0109D5, 0x0109D6, 0x0109D7, 0x0109D2, 0x0109D3, 0x0109AC, 0x0109AD, 0x0109AE, 0x0109AF, 0x0109A8, 0x0109A9, 0x0109AA, 0x0109AB, 0x0109A4, 0x0109A5, 0x0109A6, 0x0109A7, 0x0109A0, 0x0109A1, 0x0109A2, 0x0109A3, 0x0109BC, 0x0109BD, 0x0109BE, 0x0109BF, 0x0109B4, 0x0109B5, 0x0109B6, 0x0109B7, 0x0109B0, 0x0109B1, 0x0109B2, 0x0109B3, 0x01098C, 0x01098D, 0x01098E, 0x01098F, 0x010988, 0x010989, 0x01098A, 0x01098B, 0x010984, 0x010985, 0x010986, 0x010987, 0x010980, 0x010981, 0x010982, 0x010983, 0x01099C, 0x01099D, 0x01099E, 0x01099F, 0x010998, 0x010999, 0x01099A, 0x01099B, 0x010994, 0x010995, 0x010996, 0x010997, 0x010990, 0x010991, 0x010992, 0x010993, 0x01066C, 0x01066D, 0x01066E, 0x01066F, 0x010668, 0x010669, 0x01066A, 0x01066B, 0x010664, 0x010665, 0x010666, 0x010667, 0x010660, 0x010661, 0x010662, 0x010663, 0x01067C, 0x01067D, 0x01067E, 0x01067F, 0x010678, 0x010679, 0x01067A, 0x01067B, 0x010674, 0x010675, 0x010676, 0x010677, 0x010670, 0x010671, 0x010672, 0x010673, 0x01064C, 0x01064D, 0x01064E, 0x01064F, 0x010648, 0x010649, 0x01064A, 0x01064B, 0x010644, 0x010645, 0x010646, 0x010647, 0x010640, 0x010641, 0x010642, 0x010643, 0x01065C, 0x01065D, 0x01065E, 0x01065F, 0x010658, 0x010659, 0x01065A, 0x01065B, 0x010654, 0x010655, 0x010656, 0x010657, 0x010650, 0x010651, 0x010652, 0x010653, 0x01062C, 0x01062D, 0x01062E, 0x01062F, 0x010628, 0x010629, 0x01062A, 0x01062B, 0x010624, 0x010625, 0x010626, 0x010627, 0x010620, 0x010621, 0x010622, 0x010623, 0x01063C, 0x01063D, 0x01063E, 0x01063F, 0x010638, 0x010639, 0x01063A, 0x01063B, 0x010634, 0x010635, 0x010636, 0x010637, 0x010630, 0x010631, 0x010632, 0x010633, 0x01060C, 0x01060D, 0x01060E, 0x01060F, 0x010608, 0x010609, 0x01060A, 0x01060B, 0x010604, 0x010605, 0x010606, 0x010607, 0x010600, 0x010601, 0x010602, 0x010603, 0x01061C, 0x01061D, 0x01061E, 0x01061F, 0x010618, 0x010619, 0x01061A, 0x01061B, 0x010614, 0x010615, 0x010616, 0x010617, 0x010610, 0x010611, 0x010612, 0x010613, 0x0106EC, 0x0106ED, 0x0106EE, 0x0106EF, 0x0106E8, 0x0106E9, 0x0106EA, 0x0106EB, 0x0106E4, 0x0106E5, 0x0106E6, 0x0106E7, 0x0106E0, 0x0106E1, 0x0106E2, 0x0106E3, 0x0106FC, 0x0106FD, 0x0106FE, 0x0106FF, 0x0106F8, 0x0106F9, 0x0106FA, 0x0106FB, 0x0106F4, 0x0106F5, 0x0106F6, 0x0106F7, 0x0106F0, 0x0106F3, 0x0106CC, 0x0106CA, 0x0106CB, 0x0106C4, 0x0106C5, 0x0106C6, 0x0106C7, 0x0106C0, 0x0106C1, 0x0106C2, 0x0106C3, 0x0106DC, 0x0106DD, 0x0106DE, 0x0106DF, 0x0106D8, 0x0106D9, 0x0106DA, 0x0106DB, 0x0106D4, 0x0106D5, 0x0106D6, 0x0106D7, 0x0106D0, 0x0106D1, 0x0106D2, 0x0106D3, 0x0106AC, 0x0106AD, 0x0106AE, 0x0106AF, 0x0106A8, 0x0106A9, 0x0106AA, 0x0106AB, 0x0106A4, 0x0106A5, 0x0106A6, 0x0106A7, 0x0106A0, 0x0106A1, 0x0106A2, 0x0106A3, 0x0106BC, 0x0106BD, 0x0106BE, 0x0106BF, 0x0106B8, 0x0106B9, 0x0106BA, 0x0106BB, 0x0106B4, 0x0106B5, 0x0106B6, 0x0106B7, 0x0106B0, 0x0106B1, 0x0106B2, 0x0106B3, 0x01068C, 0x01068D, 0x01068E, 0x01068F, 0x010688, 0x010689, 0x01068A, 0x01068B, 0x010684, 0x010685, 0x010686, 0x010687, 0x010680, 0x010681, 0x010682, 0x010683, 0x01069C, 0x01069D, 0x01069E, 0x01069F, 0x010698, 0x010699, 0x01069A, 0x01069B, 0x010694, 0x010695, 0x010696, 0x010697, 0x010690, 0x010691, 0x010692, 0x010693, 0x010764, 0x010765, 0x010766, 0x010767, 0x010760, 0x010761, 0x010762, 0x010763, 0x01074C, 0x01074D, 0x01074E, 0x01074F, 0x010748, 0x010749, 0x01074A, 0x01074B, 0x010744, 0x010745, 0x010746, 0x010747, 0x010740, 0x010741, 0x010742, 0x010743, 0x010754, 0x010755, 0x010750, 0x010751, 0x010752, 0x010753, 0x01072C, 0x01072D, 0x01072E, 0x01072F, 0x010728, 0x010729, 0x01072A, 0x01072B, 0x010724, 0x010725, 0x010726, 0x010727, 0x010720, 0x010721, 0x010722, 0x010723, 0x010734, 0x010735, 0x010736, 0x010730, 0x010731, 0x010732, 0x010733, 0x01070C, 0x01070D, 0x01070E, 0x01070F, 0x010708, 0x010709, 0x01070A, 0x01070B, 0x010704, 0x010705, 0x010706, 0x010707, 0x010700, 0x010703, 0x01071C, 0x010715, 0x010716, 0x010717, 0x010710, 0x010711, 0x010712, 0x010713, 0x00216C, 0x00216D, 0x00216E, 0x00216F, 0x002168, 0x002169, 0x00216A, 0x00216B, 0x002164, 0x002165, 0x002166, 0x002167, 0x002160, 0x002161, 0x002162, 0x002163, 0x00217C, 0x00217D, 0x00217E, 0x00217F, 0x002178, 0x002179, 0x00217A, 0x00217B, 0x002174, 0x002175, 0x002176, 0x002177, 0x002170, 0x002171, 0x002172, 0x002173, 0x00214E, 0x002148, 0x002149, 0x002145, 0x002146, 0x002147, 0x00215C, 0x00215D, 0x00215E, 0x00215F, 0x002158, 0x002159, 0x00215A, 0x00215B, 0x002154, 0x002155, 0x002156, 0x002157, 0x002150, 0x002151, 0x002152, 0x002153, 0x00212C, 0x00212D, 0x00212F, 0x002128, 0x00212A, 0x00212B, 0x002124, 0x002126, 0x00213C, 0x00213D, 0x00213E, 0x00213F, 0x002138, 0x002139, 0x002134, 0x002135, 0x002136, 0x002137, 0x002130, 0x002131, 0x002132, 0x002133, 0x00210C, 0x00210D, 0x00210E, 0x00210F, 0x00210A, 0x00210B, 0x002107, 0x002102, 0x00211C, 0x00211D, 0x002119, 0x00211A, 0x01046D, 0x01046F, 0x010468, 0x010465, 0x010466, 0x010467, 0x010460, 0x010461, 0x010462, 0x010463, 0x01047C, 0x01047D, 0x01047E, 0x01047F, 0x010478, 0x010479, 0x01047A, 0x01047B, 0x010474, 0x010475, 0x010476, 0x010477, 0x010470, 0x010471, 0x010472, 0x010473, 0x01044C, 0x01044D, 0x01044E, 0x01044F, 0x010448, 0x010449, 0x01044A, 0x01044B, 0x010444, 0x010445, 0x010446, 0x010447, 0x010440, 0x010441, 0x010442, 0x010443, 0x01045C, 0x01045D, 0x01045E, 0x01045F, 0x010458, 0x010459, 0x01045A, 0x01045B, 0x010454, 0x010455, 0x010456, 0x010457, 0x010450, 0x010451, 0x010452, 0x010453, 0x01042C, 0x01042D, 0x01042E, 0x01042F, 0x010428, 0x010429, 0x01042A, 0x01042B, 0x010424, 0x010425, 0x010426, 0x010427, 0x010420, 0x010421, 0x010422, 0x010423, 0x01043C, 0x01043D, 0x01043E, 0x01043F, 0x010438, 0x010439, 0x01043A, 0x01043B, 0x010434, 0x010435, 0x010436, 0x010437, 0x010430, 0x010431, 0x010432, 0x010433, 0x01040C, 0x01040D, 0x01040E, 0x01040F, 0x010408, 0x010409, 0x01040A, 0x01040B, 0x010404, 0x010405, 0x010406, 0x010407, 0x010400, 0x010403, 0x01041C, 0x010415, 0x010416, 0x010417, 0x010410, 0x010411, 0x010412, 0x010413, 0x0104EC, 0x0104ED, 0x0104EE, 0x0104EF, 0x0104E8, 0x0104E9, 0x0104EA, 0x0104EB, 0x0104E4, 0x001E6B, 0x001E64, 0x001E65, 0x001E66, 0x001E43, 0x001E5C, 0x001E5D, 0x001E5E, 0x001E5B, 0x001E54, 0x001E55, 0x001E56, 0x001E51, 0x001E52, 0x001E05, 0x001E06, 0x001E1B, 0x001E14, 0x001E15, 0x001E16, 0x001E17, 0x001E10, 0x001E11, 0x001E12, 0x001E13, 0x001EEC, 0x001EED, 0x001EEE, 0x001EEB, 0x001EE4, 0x001EE5, 0x001EE6, 0x001EE7, 0x001EE0, 0x001EE1, 0x001EE2, 0x001EE3, 0x001EFC, 0x001EFD, 0x001EFE, 0x001EFF, 0x001EF8, 0x001EF9, 0x001EFA, 0x001EDB, 0x001ED4, 0x001ED5, 0x001ED6, 0x001ED7, 0x001ED0, 0x001ED1, 0x001ED2, 0x01E848, 0x01E849, 0x01E858, 0x01E859, 0x01E850, 0x01E851, 0x01E82E, 0x01E828, 0x01E82A, 0x01E824, 0x001F02, 0x001F03, 0x001F1C, 0x001F1D, 0x001F18, 0x001F19, 0x001F1A, 0x001F1B, 0x001F14, 0x001F15, 0x001F10, 0x001F11, 0x001F12, 0x001F13, 0x001FEC, 0x001FE8, 0x001FE9, 0x001FEA, 0x001FEB, 0x001FE4, 0x001FE5, 0x001FE6, 0x001FE7, 0x001FE0, 0x001FE1, 0x01E8CF, 0x01E8C8, 0x01E8C9, 0x001FFB, 0x001FF4, 0x01E8C7, 0x01E8C2, 0x01E8C3, 0x001FF2, 0x001FF3, 0x001FCC, 0x001FC8, 0x001FC9, 0x001FCA, 0x001FCB, 0x001FC4, 0x001FC6, 0x001FC7, 0x01E8AE, 0x01E8AF, 0x01E8A8, 0x01E8A9, 0x01E8A6, 0x01E8A7, 0x01E88F, 0x01E889, 0x01E887, 0x001F82, 0x001F83, 0x001F9C, 0x001F9D, 0x001F9E, 0x001F9F, 0x001F98, 0x001F99, 0x001F9A, 0x001C6F, 0x001C6B, 0x001C64, 0x001C65, 0x001C66, 0x0102F5, 0x0102F6, 0x0102F7, 0x0102F0, 0x0102F1, 0x0102F2, 0x0102F3, 0x0102CC, 0x0102C5, 0x01E955, 0x010366, 0x010361, 0x001CEB, 0x010374, 0x010375, 0x010370, 0x010371, 0x010372, 0x010373, 0x001CF5, 0x001CF6, 0x010348, 0x010344, 0x010345, 0x010346, 0x010347, 0x010340, 0x010341, 0x010342, 0x010343, 0x01035C, 0x01035D, 0x01035E, 0x01035F, 0x010358, 0x010359, 0x01035A, 0x01035B, 0x010354, 0x010355, 0x010356, 0x010357, 0x010350, 0x010351, 0x010352, 0x010353, 0x010320, 0x010321, 0x010322, 0x010323, 0x01033C, 0x01033D, 0x01033E, 0x01033F, 0x010338, 0x010339, 0x01033A, 0x01033B, 0x010334, 0x010335, 0x010336, 0x010337, 0x010330, 0x010331, 0x010332, 0x010333, 0x01030C, 0x01030D, 0x01030E, 0x01030F, 0x010308, 0x010309, 0x01030A, 0x01030B, 0x010304, 0x010305, 0x010306, 0x010307, 0x010300, 0x010302, 0x010303, 0x01031C, 0x010315, 0x010316, 0x010317, 0x010310, 0x010311, 0x010312, 0x010313, 0x001D6C, 0x001D6D, 0x001D6E, 0x001D6F, 0x001D6B, 0x001D7C, 0x001D7D, 0x001D7E, 0x001D7F, 0x001D79, 0x001D7A, 0x001D73, 0x0103C0, 0x0103C1, 0x0103C2, 0x0103C3, 0x0103D4, 0x0103D5, 0x0103D1, 0x0103D2, 0x0103D3, 0x0103AC, 0x0103AD, 0x0103AE, 0x0103AF, 0x0103A8, 0x0103A9, 0x0103AA, 0x0103AB, 0x0103A4, 0x0103A5, 0x0103A6, 0x0103A7, 0x0103A0, 0x0103B5, 0x0103B6, 0x0103B7, 0x0103B0, 0x0103B1, 0x0103B2, 0x0103B3, 0x01038C, 0x01038D, 0x01038E, 0x01038F, 0x010388, 0x010389, 0x01038A, 0x01038B, 0x010384, 0x001D05, 0x001D06, 0x001D1B, 0x001D14, 0x001D15, 0x001D16, 0x001D17, 0x001D10, 0x001D11, 0x001D12, 0x001D13, 0x01004C, 0x01004D, 0x010048, 0x010049, 0x01004A, 0x01004B, 0x010044, 0x010045, 0x010046, 0x010047, 0x010040, 0x010041, 0x010042, 0x010043, 0x01005C, 0x01005D, 0x010058, 0x010059, 0x01005A, 0x01005B, 0x010054, 0x010055, 0x010056, 0x010057, 0x010050, 0x010051, 0x010052, 0x010053, 0x01002C, 0x01002D, 0x01002E, 0x01002F, 0x010028, 0x010029, 0x01002A, 0x01002B, 0x010024, 0x010025, 0x010026, 0x010020, 0x010021, 0x010022, 0x010023, 0x01003C, 0x01003D, 0x01003F, 0x010038, 0x010039, 0x01003A, 0x010034, 0x010035, 0x010036, 0x010037, 0x010030, 0x010031, 0x010032, 0x010033, 0x01000D, 0x01000E, 0x01000F, 0x010008, 0x010009, 0x01000A, 0x01000B, 0x010004, 0x010015, 0x010016, 0x010017, 0x010010, 0x0100EC, 0x0100E5, 0x0100E6, 0x0100E7, 0x0100E0, 0x0100E1, 0x0100E2, 0x0100E3, 0x0100F8, 0x0100F9, 0x0100FA, 0x0100F4, 0x0100F5, 0x0100F6, 0x0100F7, 0x0100F0, 0x0100F1, 0x0100F2, 0x0100F3, 0x0100CC, 0x0100CD, 0x0100CE, 0x0100CF, 0x0100C8, 0x0100C9, 0x0100CA, 0x0100CB, 0x0100C4, 0x0100D5, 0x0100D6, 0x0100D7, 0x0100D0, 0x0100D1, 0x0100D2, 0x0100D3, 0x0100AC, 0x0100AE, 0x0100AF, 0x0100A8, 0x010095, 0x010096, 0x010097, 0x010090, 0x010091, 0x010092, 0x010093, 0x01016C, 0x010168, 0x010165, 0x010166, 0x010167, 0x010160, 0x010161, 0x010162, 0x010163, 0x010178, 0x010174, 0x010175, 0x010176, 0x010177, 0x010170, 0x010171, 0x010172, 0x010173, 0x01014C, 0x01014D, 0x01014E, 0x01014F, 0x010148, 0x010149, 0x01014A, 0x01014B, 0x010144, 0x010145, 0x010146, 0x010147, 0x010140, 0x010141, 0x010142, 0x010143, 0x01015C, 0x01015D, 0x01015E, 0x01015F, 0x010158, 0x010159, 0x01015A, 0x01015B, 0x010154, 0x010155, 0x010156, 0x010157, 0x010150, 0x010151, 0x010152, 0x010153, 0x01012C, 0x01012D, 0x01012E, 0x01012F, 0x010128, 0x010129, 0x01012A, 0x01012B, 0x010124, 0x010125, 0x010126, 0x010127, 0x010120, 0x010121, 0x010122, 0x010123, 0x010130, 0x010131, 0x010132, 0x010133, 0x01010C, 0x01010D, 0x01010E, 0x01010F, 0x010108, 0x010109, 0x01010A, 0x01010B, 0x010107, 0x001A88, 0x001A89, 0x01011C, 0x010115, 0x010116, 0x010117, 0x010110, 0x010113, 0x001A94, 0x001A95, 0x001A96, 0x001A97, 0x001A90, 0x001A91, 0x001A92, 0x001A93, 0x001B48, 0x001B49, 0x001B4A, 0x001B4B, 0x001B45, 0x001B46, 0x001B47, 0x001B58, 0x001B59, 0x001B54, 0x001B55, 0x001B56, 0x001B57, 0x001B50, 0x001B51, 0x001B52, 0x001B53, 0x001B2C, 0x001B2D, 0x001B2E, 0x001B2F, 0x001B28, 0x001B29, 0x001B2A, 0x001B2B, 0x001B24, 0x001B25, 0x001B26, 0x001B27, 0x001B20, 0x001B21, 0x001B22, 0x001B23, 0x001B30, 0x001B33, 0x001B0C, 0x001B0D, 0x001B0E, 0x001B0F, 0x001B08, 0x001B09, 0x001B0A, 0x001B0B, 0x001B05, 0x001B06, 0x001B07, 0x001B1C, 0x001B1D, 0x001B1E, 0x001B1F, 0x001B18, 0x001B19, 0x001B1A, 0x001B1B, 0x001B14, 0x001B15, 0x001B16, 0x001B17, 0x001B10, 0x001B11, 0x001B12, 0x001B13, 0x00FE7C, 0x00FE7F, 0x00FE78, 0x00FE76, 0x00FE77, 0x00FE70, 0x00FE71, 0x00FE72, 0x00FE73, 0x001BCC, 0x001BCD, 0x001BCE, 0x001BCF, 0x001BC8, 0x001BC9, 0x001BCA, 0x001BCB, 0x001BC4, 0x001BC5, 0x001BC6, 0x001BC7, 0x001BC0, 0x001BC1, 0x001BC2, 0x001BC3, 0x001BDC, 0x001BDD, 0x001BDE, 0x001BDF, 0x001BD8, 0x001BD9, 0x001BDA, 0x001BDB, 0x001BD4, 0x001BD5, 0x001BD6, 0x001BD7, 0x001BD0, 0x001BD1, 0x001BD2, 0x001BD3, 0x001BAE, 0x001BAF, 0x001BA0, 0x001BBC, 0x001BBD, 0x001BBE, 0x001BBF, 0x001BB8, 0x001BB9, 0x001BBA, 0x001BBB, 0x001BB4, 0x001BB5, 0x001BB6, 0x001BB7, 0x001BB0, 0x001BB1, 0x001BB2, 0x001BB3, 0x001B8C, 0x001B8D, 0x001B8E, 0x001B8F, 0x001B88, 0x001B89, 0x001B8A, 0x001B8B, 0x001B84, 0x001B85, 0x001B86, 0x001B87, 0x001B83, 0x001B9C, 0x001B9D, 0x001B9E, 0x001B9F, 0x001B98, 0x001B99, 0x001B9A, 0x001864, 0x001865, 0x001866, 0x00FEF5, 0x00FEF6, 0x00FEF7, 0x00FEF0, 0x00FEF1, 0x00FEF2, 0x00FEF3, 0x00FECC, 0x00FED4, 0x00FE85, 0x00FE86, 0x00FE87, 0x00FE80, 0x00FE81, 0x00FE82, 0x00FE83, 0x00FE9C, 0x00FE9D, 0x00FE9E, 0x00FE9F, 0x00FE98, 0x00FE99, 0x00FE9A, 0x00FE9B, 0x00FE94, 0x00FE95, 0x00FE96, 0x00FE97, 0x00FE90, 0x00FE93, 0x00FF6C, 0x001813, 0x0018EC, 0x0018EF, 0x0018E8, 0x0018E9, 0x0018EA, 0x00FF75, 0x00FF76, 0x00FF77, 0x00FF71, 0x00FF72, 0x00FF73, 0x00FF4C, 0x00FF4F, 0x00FF48, 0x0018CF, 0x0018CB, 0x0018C4, 0x0018C5, 0x0018C6, 0x0018C2, 0x00FF25, 0x00FF26, 0x00FF27, 0x00FF22, 0x0018A4, 0x0018A5, 0x0018A6, 0x0018A2, 0x0018BB, 0x0018B4, 0x0018B5, 0x0018B6, 0x0018B7, 0x0018B0, 0x0018B1, 0x0018B2, 0x0018B3, 0x00188C, 0x00188D, 0x00188E, 0x00188F, 0x001888, 0x001889, 0x00188A, 0x00188B, 0x001884, 0x001881, 0x001882, 0x00189B, 0x001894, 0x001895, 0x001896, 0x001897, 0x001890, 0x001891, 0x001892, 0x001893, 0x00196C, 0x00196D, 0x001968, 0x001969, 0x00196A, 0x00196B, 0x001964, 0x001965, 0x001966, 0x001967, 0x001960, 0x001961, 0x001962, 0x001963, 0x00FFCC, 0x00FFCE, 0x00FFCF, 0x001970, 0x00194F, 0x001948, 0x001946, 0x001947, 0x00FFDA, 0x00FFDB, 0x00FFD4, 0x00195F, 0x001958, 0x00FFA5, 0x00FFA6, 0x00FFA7, 0x00FFA0, 0x00FFA1, 0x00FFA2, 0x00FFA3, 0x00FFBC, 0x00FFBD, 0x00FFBE, 0x00FFB8, 0x00FFB9, 0x00FFBA, 0x00FFBB, 0x00FFB4, 0x00FFB5, 0x00FFB6, 0x00FFB7, 0x00FFB0, 0x00FFB1, 0x00FFB2, 0x00FFB3, 0x00FF8C, 0x00FF8D, 0x00FF8E, 0x00FF8F, 0x00FF88, 0x00FF89, 0x00FF8A, 0x00FF8B, 0x00FF84, 0x001905, 0x001906, 0x00FF90, 0x00FC65, 0x00FC66, 0x00FC67, 0x00FC60, 0x00FC61, 0x00FC62, 0x00FC63, 0x00FC7C, 0x00FC7D, 0x00FC7E, 0x00FC7F, 0x00FC78, 0x00FC79, 0x00FC7A, 0x00FC7B, 0x00FC74, 0x00FC75, 0x00FC76, 0x00FC77, 0x00FC70, 0x00FC71, 0x00FC72, 0x00FC73, 0x00FC4C, 0x00FC4D, 0x00FC4E, 0x00FC4F, 0x00FC48, 0x00FC49, 0x00FC4A, 0x00FC4B, 0x00FC44, 0x00FC45, 0x00FC46, 0x00FC47, 0x00FC40, 0x00FC43, 0x00FC5C, 0x00FC55, 0x00FC56, 0x00FC57, 0x00FC50, 0x00FC2C, 0x00FC25, 0x00FC26, 0x00FC27, 0x00FC20, 0x00FCE6, 0x00FCE7, 0x00FD65, 0x00FD66, 0x00FD7C, 0x00FD75, 0x00FD76, 0x00FD77, 0x00FD70, 0x00FD72, 0x00FD73, 0x0016F4, 0x0016F5, 0x0016F6, 0x0016F7, 0x0016F0, 0x0016F1, 0x0016F2, 0x0016F3, 0x0016CC, 0x0016CD, 0x0016CE, 0x0016CF, 0x0016C8, 0x0016C9, 0x0016CA, 0x0016A5, 0x0016A6, 0x00FD19, 0x00FD15, 0x00FD16, 0x00FD17, 0x00FD10, 0x001694, 0x001695, 0x001696, 0x001697, 0x001690, 0x001691, 0x001692, 0x001693, 0x00176C, 0x00176E, 0x00176F, 0x001768, 0x001769, 0x00176A, 0x00176B, 0x001764, 0x001765, 0x001766, 0x00FDF5, 0x00FDF6, 0x00FDF7, 0x00FDF0, 0x00FDF1, 0x00FDF2, 0x00FDF3, 0x001770, 0x00FDC4, 0x00174B, 0x001744, 0x001745, 0x001746, 0x001747, 0x001740, 0x001741, 0x001742, 0x001743, 0x00FDAC, 0x00FDAD, 0x00FDAE, 0x00FDAF, 0x00FDA8, 0x00FDAB, 0x00FDA4, 0x00FDB5, 0x00FDB6, 0x00FDB7, 0x00FDB0, 0x00FDB1, 0x00FDB2, 0x00FDB3, 0x00FD8C, 0x00FD8D, 0x00FD8E, 0x00FD8F, 0x00FD88, 0x00FD8B, 0x00FD84, 0x00FD86, 0x00FD95, 0x00FD96, 0x00FD97, 0x00FD92, 0x00FD93, 0x00FA6C, 0x00FA6D, 0x00FA68, 0x00FA6B, 0x00FA64, 0x00FA65, 0x00FA66, 0x00FA67, 0x00FA60, 0x00FA63, 0x00FA7C, 0x00FA75, 0x00FA76, 0x00FA77, 0x00FA70, 0x00FA73, 0x00FA4C, 0x00FA45, 0x00FA46, 0x00FA47, 0x00FA40, 0x00FA41, 0x00FA42, 0x00FA43, 0x00FA5C, 0x00FA5D, 0x00FA5E, 0x00FA5F, 0x00FA58, 0x00FA59, 0x00FA5A, 0x00FA5B, 0x00FA54, 0x00FA56, 0x00FA57, 0x00FA50, 0x00FA51, 0x00FA52, 0x00FA53, 0x00FA2C, 0x00FA2D, 0x00FA2E, 0x00FA2F, 0x00FA28, 0x00FA29, 0x00FA2A, 0x00FA2B, 0x00FA24, 0x00FA35, 0x00FA36, 0x00FA37, 0x00FA30, 0x00FA31, 0x00FA32, 0x00FA33, 0x00FA0C, 0x00FA0D, 0x00FA0E, 0x00FA0F, 0x00FA08, 0x00179B, 0x001794, 0x001795, 0x001796, 0x001797, 0x001790, 0x001791, 0x001792, 0x001793, 0x00146C, 0x00146D, 0x00146E, 0x00146F, 0x001468, 0x001469, 0x00146A, 0x00146B, 0x001464, 0x001465, 0x001466, 0x001467, 0x001460, 0x001461, 0x001462, 0x001463, 0x00147C, 0x00147D, 0x00147E, 0x00147F, 0x001478, 0x001479, 0x00147A, 0x00144B, 0x001444, 0x001445, 0x001446, 0x001441, 0x001442, 0x0014CC, 0x0014C9, 0x0014D0, 0x0014A4, 0x0014A6, 0x0014BE, 0x0014BB, 0x0014B4, 0x0014B5, 0x0014B6, 0x0014B7, 0x0014B0, 0x0014B1, 0x0014B2, 0x00148E, 0x00148B, 0x001485, 0x001487, 0x001480, 0x001481, 0x001482, 0x00149F, 0x001498, 0x001499, 0x00157B, 0x001574, 0x001575, 0x001576, 0x001577, 0x001570, 0x001571, 0x001572, 0x001573, 0x00154C, 0x00154D, 0x00154E, 0x00154F, 0x001548, 0x001549, 0x00154A, 0x00155F, 0x001558, 0x001559, 0x00152B, 0x001524, 0x001525, 0x001526, 0x001527, 0x001520, 0x001521, 0x001522, 0x001523, 0x00153C, 0x00153D, 0x00153E, 0x001539, 0x00153A, 0x00151B, 0x001514, 0x001515, 0x001516, 0x001517, 0x001510, 0x001511, 0x001512, 0x001513, 0x0015EC, 0x0015ED, 0x0015EE, 0x0015EF, 0x0015E8, 0x0015E9, 0x0015EA, 0x0015EB, 0x0015E4, 0x0015E5, 0x0015E6, 0x0015E7, 0x0015E0, 0x0015E1, 0x0015E2, 0x0015E3, 0x0015FC, 0x0015FD, 0x0015FE, 0x0015FF, 0x0015F8, 0x0015F9, 0x0015FA, 0x0015FB, 0x0015F4, 0x0015F5, 0x0015F6, 0x0015F7, 0x0015F0, 0x0015F1, 0x0015F2, 0x0015F3, 0x0015CC, 0x0015CD, 0x0015CE, 0x0015CF, 0x0015C8, 0x0015C9, 0x0015CA, 0x0015CB, 0x0015C4, 0x0015C5, 0x0015C6, 0x0015C7, 0x0015C0, 0x0015C1, 0x0015C2, 0x0015C3, 0x0015DC, 0x0015DD, 0x0015DE, 0x0015DF, 0x0015D8, 0x0015D9, 0x0015DA, 0x0015DB, 0x0015D4, 0x0015D5, 0x0015D6, 0x0015D7, 0x0015D0, 0x0015D1, 0x0015D2, 0x0015D3, 0x0015AC, 0x0015AD, 0x0015AE, 0x0015AF, 0x0015A8, 0x0015A9, 0x0015AA, 0x0015AB, 0x0015A4, 0x0015A5, 0x0015A6, 0x0015A7, 0x0015A0, 0x0015A1, 0x0015A2, 0x0015A3, 0x0015BC, 0x0015BD, 0x0015BE, 0x0015BF, 0x0015B8, 0x0015B9, 0x0015BA, 0x0015BB, 0x0015B4, 0x0015B5, 0x0015B6, 0x0015B7, 0x0015B0, 0x0015B1, 0x0015B2, 0x0015B3, 0x00158C, 0x00158D, 0x00158E, 0x00158F, 0x001588, 0x001589, 0x00158A, 0x00158B, 0x01D40E, 0x01D403, 0x01D412, 0x01D413, 0x01D404, 0x01D405, 0x01D416, 0x01D406, 0x01D418, 0x01D409, 0x01D408, 0x01D41F, 0x02FA01, 0x02FA00, 0x02FA03, 0x02FA02, 0x02FA05, 0x02FA04, 0x02FA07, 0x02FA06, 0x02FA09, 0x02FA08, 0x02FA0B, 0x02FA0A, 0x02FA0D, 0x02FA0C, 0x02FA0F, 0x02FA0E, 0x02FA11, 0x02FA10, 0x02FA13, 0x02FA12, 0x02FA15, 0x02FA14, 0x02FA17, 0x02FA16, 0x02FA19, 0x02FA18, 0x02FA1B, 0x02FA1A, 0x02FA1D, 0x02FA1C, 0x01D423, 0x01D426, 0x01D420, 0x01D421, 0x01D422, 0x01D427, 0x001584, 0x001585, 0x001586, 0x001587, 0x01D424, 0x01D425, 0x01D42C, 0x001580, 0x01D42A, 0x01D428, 0x01D42B, 0x01D43B, 0x01D43C, 0x01D43D, 0x01D42D, 0x001581, 0x01D448, 0x01D449, 0x01D44A, 0x01D44C, 0x01D444, 0x01D445, 0x01D44D, 0x001582, 0x01D458, 0x01D459, 0x01D45A, 0x01D45B, 0x01D44E, 0x01D44F, 0x01D45E, 0x01D44B, 0x01D452, 0x01D451, 0x01D453, 0x01D456, 0x01D450, 0x01D442, 0x001583, 0x01D457, 0x01D45F, 0x00159C, 0x00159D, 0x00159E, 0x00159F, 0x01D454, 0x014442, 0x014443, 0x01445D, 0x014452, 0x014453, 0x01442D, 0x01442B, 0x0145EA, 0x0145EB, 0x0145E5, 0x0145F2, 0x0145F3, 0x0145CA, 0x0145CB, 0x00AA96, 0x00AA97, 0x00AA90, 0x00AA91, 0x00AA92, 0x00AA93, 0x00AB60, 0x00AB61, 0x01D476, 0x00AB62, 0x01D477, 0x00AB7D, 0x00AB7E, 0x00AB78, 0x00AB79, 0x00AB72, 0x00AB4F, 0x01D47C, 0x00AB48, 0x00AB49, 0x00AB4A, 0x00AB4B, 0x00AB44, 0x00AB45, 0x00AB40, 0x00AB41, 0x001046, 0x001047, 0x001040, 0x001041, 0x00105D, 0x00AB54, 0x00AB55, 0x00AB56, 0x00AB57, 0x00AB2C, 0x00AB2D, 0x001051, 0x00AB2A, 0x00AB2B, 0x00AB24, 0x00AB25, 0x001029, 0x00AB21, 0x00AB3A, 0x00AB3B, 0x00AB34, 0x00AB36, 0x00AB37, 0x00AB30, 0x00AB31, 0x00AB32, 0x00AB33, 0x00AB0C, 0x00AB0D, 0x00AB0E, 0x00AB09, 0x001009, 0x00100A, 0x001006, 0x001007, 0x001000, 0x001001, 0x001002, 0x01D4AC, 0x001003, 0x00101C, 0x00101D, 0x001019, 0x00101A, 0x001016, 0x001017, 0x001010, 0x001011, 0x001012, 0x001013, 0x0010EC, 0x0010ED, 0x0010EE, 0x0010EF, 0x0010E8, 0x0010E9, 0x0010E5, 0x0010E6, 0x0010E7, 0x0010E0, 0x0010E1, 0x0010FD, 0x00ABF1, 0x01D4C8, 0x00ABCA, 0x00ABC4, 0x00ABC5, 0x01D4CB, 0x00ABC6, 0x00ABC7, 0x01D4C9, 0x01D4DD, 0x01D4CA, 0x00ABC0, 0x00ABC1, 0x01D4D0, 0x01D4C1, 0x01D4DE, 0x01D4D4, 0x01D4D5, 0x01D4D6, 0x01D4D7, 0x01D4D9, 0x01D4C0, 0x01D4D8, 0x01D4CE, 0x01D4CF, 0x00ABDC, 0x00AB8A, 0x01D4DF, 0x00AB8B, 0x01D4E3, 0x01D4F2, 0x00AB85, 0x00AB86, 0x00AB87, 0x00AB80, 0x00AB81, 0x00AB82, 0x00AB83, 0x00AB9C, 0x00AB9D, 0x00AB98, 0x00AB99, 0x01D4CC, 0x01D4CD, 0x00AB9A, 0x00AB9B, 0x00AB94, 0x00AB95, 0x00AB90, 0x00AB91, 0x01D4F6, 0x01D4F7, 0x01D4FC, 0x001166, 0x001167, 0x001160, 0x001161, 0x01D4F3, 0x013204, 0x013205, 0x013206, 0x013207, 0x013208, 0x013209, 0x01320A, 0x01320B, 0x01320C, 0x01320D, 0x001162, 0x001163, 0x00117C, 0x00117D, 0x00117E, 0x00117F, 0x001178, 0x001179, 0x001156, 0x001157, 0x001150, 0x001151, 0x001152, 0x001153, 0x00112C, 0x00112D, 0x00112E, 0x00112F, 0x001128, 0x001129, 0x001125, 0x001126, 0x013224, 0x013225, 0x013226, 0x013227, 0x013228, 0x013229, 0x01322A, 0x01322B, 0x01322C, 0x01322D, 0x01322E, 0x001127, 0x001120, 0x001121, 0x001122, 0x001123, 0x00113C, 0x00113D, 0x001138, 0x001139, 0x00110D, 0x001108, 0x001104, 0x001116, 0x001117, 0x001110, 0x001111, 0x001112, 0x013240, 0x013241, 0x013242, 0x013243, 0x013244, 0x013245, 0x013246, 0x013247, 0x013248, 0x013249, 0x01324A, 0x01324B, 0x01324C, 0x01324D, 0x01324E, 0x001113, 0x0011EC, 0x0011ED, 0x0011EE, 0x0011EF, 0x0011E8, 0x013255, 0x013256, 0x013257, 0x013258, 0x013259, 0x01325A, 0x01325B, 0x01325C, 0x01325D, 0x01325E, 0x01325F, 0x013260, 0x013261, 0x013262, 0x013263, 0x013065, 0x013064, 0x013067, 0x013066, 0x013069, 0x013068, 0x01306B, 0x01306A, 0x01306D, 0x01306C, 0x01306F, 0x01306E, 0x0011E9, 0x0011EA, 0x0011EB, 0x0011E4, 0x0011E5, 0x013275, 0x013276, 0x013277, 0x013278, 0x013279, 0x01327A, 0x01327B, 0x01327C, 0x01327D, 0x01327E, 0x01327F, 0x0011E6, 0x0011E0, 0x0011E1, 0x0011E2, 0x0011E3, 0x0011FC, 0x013286, 0x013287, 0x0011FA, 0x013289, 0x0011FB, 0x0011F6, 0x0011F7, 0x01328D, 0x01328E, 0x0011F0, 0x0011F1, 0x0011F2, 0x0011F3, 0x0011CC, 0x0011CD, 0x0011CE, 0x0011CF, 0x0011C8, 0x0011C9, 0x0011CA, 0x0011CB, 0x0011C4, 0x0011C5, 0x0011C6, 0x0011C7, 0x0011C0, 0x0011C1, 0x0011DC, 0x0011DD, 0x0011A6, 0x0132A4, 0x0132A5, 0x0132A6, 0x0132A7, 0x0132A8, 0x0132A9, 0x0132AA, 0x0011A7, 0x0132AC, 0x0132AD, 0x0132AE, 0x0132AF, 0x0132B0, 0x0132B1, 0x0132B2, 0x0011A0, 0x0011A1, 0x0011A2, 0x0011A3, 0x0011BC, 0x0011BD, 0x0011BE, 0x0011BF, 0x0011B8, 0x0011B9, 0x00118A, 0x0132BE, 0x00118B, 0x0132C0, 0x0132C1, 0x0132C2, 0x0132C3, 0x0132C4, 0x0132C5, 0x0132C6, 0x0132C7, 0x0132C8, 0x0132C9, 0x0132CA, 0x00A96A, 0x0132CC, 0x0132CD, 0x0132CE, 0x0132CF, 0x0132D0, 0x0132D1, 0x0132D2, 0x0132D3, 0x0132D4, 0x0132D5, 0x0132D6, 0x0132D7, 0x0132D8, 0x0132D9, 0x0132DA, 0x0132DB, 0x0132DC, 0x0132DD, 0x0132DE, 0x0132DF, 0x0132E0, 0x0132E1, 0x0132E2, 0x0132E3, 0x00A96B, 0x00A964, 0x00A965, 0x00A966, 0x00A967, 0x00A960, 0x00A961, 0x00A962, 0x00A963, 0x00A97C, 0x00A978, 0x00A979, 0x0132F0, 0x0132F1, 0x0132F2, 0x0132F3, 0x0132F4, 0x0132F5, 0x0132F6, 0x0132F7, 0x0132F8, 0x0132F9, 0x0132FA, 0x0132FB, 0x0132FC, 0x0132FD, 0x0132FE, 0x0132FF, 0x013101, 0x013100, 0x00A97A, 0x00A97B, 0x013105, 0x013104, 0x013107, 0x013106, 0x013109, 0x013108, 0x01310B, 0x01310A, 0x00A974, 0x00A975, 0x01310F, 0x01310E, 0x00A976, 0x00A977, 0x00A970, 0x00A971, 0x00A972, 0x00A973, 0x00A944, 0x00A945, 0x00A946, 0x00A940, 0x00A941, 0x000E40, 0x000E41, 0x000E42, 0x000E43, 0x000E58, 0x000E59, 0x000E54, 0x013123, 0x013122, 0x000E55, 0x000E56, 0x000E57, 0x000E50, 0x000E51, 0x000E52, 0x000E53, 0x000E2C, 0x01332C, 0x01332D, 0x000E2D, 0x000E28, 0x013131, 0x013130, 0x013133, 0x013132, 0x013135, 0x013134, 0x013137, 0x013136, 0x013139, 0x013138, 0x01313B, 0x01313A, 0x01313D, 0x01313C, 0x01313F, 0x01313E, 0x013340, 0x013341, 0x013342, 0x013343, 0x013344, 0x000E29, 0x00A93A, 0x00A93B, 0x013348, 0x013349, 0x00A934, 0x00A935, 0x01334C, 0x01334D, 0x01334E, 0x01334F, 0x00A936, 0x00A937, 0x00A930, 0x00A931, 0x013354, 0x013355, 0x00A932, 0x00A933, 0x00A90C, 0x00A90D, 0x00A90F, 0x00A91E, 0x01335C, 0x01335D, 0x01335E, 0x01335F, 0x013360, 0x013361, 0x013362, 0x013363, 0x00A9EA, 0x00A9EB, 0x00A9E4, 0x00A9E7, 0x00A9E0, 0x00A9E1, 0x00A9E2, 0x00A9E3, 0x00A9FC, 0x00A9FD, 0x01D36C, 0x01D36D, 0x013370, 0x013371, 0x013372, 0x013373, 0x013374, 0x013375, 0x013376, 0x013377, 0x013378, 0x013379, 0x01337A, 0x00A9FE, 0x01337C, 0x01337D, 0x01337E, 0x01337F, 0x00A9F8, 0x00A9F9, 0x00A9FA, 0x00A9FB, 0x00A9F4, 0x00A9F5, 0x00A9F6, 0x00A9F7, 0x00A9F0, 0x00A9F1, 0x00A9F2, 0x00A9F3, 0x000EC4, 0x000EC0, 0x000EC1, 0x000EDC, 0x000EDD, 0x00A9D0, 0x00A9D1, 0x00A9AA, 0x00A9A6, 0x00A9A7, 0x00A9A2, 0x000EA7, 0x000EA1, 0x000EA2, 0x000EA3, 0x000EBD, 0x00A9B0, 0x00A9B1, 0x00A9B2, 0x00A98C, 0x00A98D, 0x00A98F, 0x00A98A, 0x00A984, 0x00A985, 0x00A987, 0x000E8A, 0x000E84, 0x00A99C, 0x00A99E, 0x00A999, 0x00A996, 0x00A66E, 0x00A668, 0x00A669, 0x00A66B, 0x00A664, 0x00A665, 0x000F66, 0x000F67, 0x000F60, 0x000F61, 0x000F62, 0x000F63, 0x00A64C, 0x00A64D, 0x00A64E, 0x00A64F, 0x00A648, 0x00A649, 0x00A646, 0x000F56, 0x000F57, 0x000F50, 0x000F51, 0x000F26, 0x000F27, 0x000F20, 0x000F21, 0x000F22, 0x000F23, 0x000F30, 0x000F31, 0x00A60A, 0x00A60B, 0x00A604, 0x00A605, 0x00A606, 0x00A607, 0x00A600, 0x00A601, 0x00A602, 0x00A603, 0x00A61C, 0x00A61D, 0x00A61F, 0x00A618, 0x00A619, 0x00A61A, 0x00A61B, 0x00A614, 0x00A615, 0x00A616, 0x00A617, 0x00A610, 0x00A611, 0x00A612, 0x00A613, 0x00A6EC, 0x00A6ED, 0x00A6EE, 0x00A6EF, 0x00A6E8, 0x00A6E9, 0x00A6EA, 0x00A6EB, 0x00A6E4, 0x00A6E5, 0x00A6E6, 0x00A6E7, 0x00A6E0, 0x00A6E1, 0x00A6E2, 0x00A6E3, }; /* indexes */ const uint16_t NU_DUCET_VALUES_I[] = { 0x027D, 0x0252, 0x0240, 0x02C8, 0x027E, 0x0253, 0x026B, 0x02BE, 0x055E, 0x2656, 0x02C1, 0x04E4, 0x4080, 0x02BF, 0x02CB, 0x407B, 0x033B, 0x031F, 0x407C, 0x0337, 0x038D, 0x407A, 0x03EC, 0x02E2, 0x038C, 0x0381, 0x02F4, 0x0380, 0x4089, 0x408A, 0x408B, 0x407F, 0x4087, 0x4086, 0x408C, 0x4088, 0x4085, 0x4092, 0x4093, 0x4090, 0x408D, 0x408E, 0x4094, 0x408F, 0x3FE0, 0x40A0, 0x4079, 0x0428, 0x409F, 0x02DF, 0x03DF, 0x3FDF, 0x032E, 0x0312, 0x4091, 0x03F8, 0x033A, 0x031E, 0x0334, 0x0318, 0x041F, 0x03FC, 0x02C9, 0x3FDE, 0x1FFB, 0x02C0, 0x1FFD, 0x02F1, 0x1FA1, 0x1FA4, 0x1FAA, 0x1FAC, 0x1FAF, 0x4078, 0x1FB6, 0x1FBB, 0x1FBD, 0x1FC0, 0x1FC2, 0x1FC7, 0x407D, 0x3FDA, 0x3FDB, 0x4082, 0x1FF1, 0x02CA, 0x4083, 0x4084, 0x056F, 0x4076, 0x407E, 0x4077, 0x1FDA, 0x0561, 0x4081, 0x3FD9, 0x1FB2, 0x1FAD, 0x1FB7, 0x1FEC, 0x0384, 0x4075, 0x055C, 0x1FCB, 0x1FD3, 0x1FD6, 0x1FDE, 0x1FE8, 0x1FF6, 0x1FF9, 0x1FF2, 0x1FF4, 0x2000, 0x1FD9, 0x040B, 0x044E, 0x1FED, 0x1FE4, 0x1FE9, 0x1FDF, 0x0410, 0x044F, 0x043E, 0x0456, 0x40AC, 0x3FDC, 0x043D, 0x0450, 0x409E, 0x40A6, 0x40A7, 0x40A8, 0x05B0, 0x059D, 0x05B4, 0x049E, 0x03E6, 0x03CE, 0x05A1, 0x409C, 0x0490, 0x2657, 0x40C0, 0x40CB, 0x4095, 0x4096, 0x40C8, 0x2658, 0x40C5, 0x40C6, 0x40C7, 0x0440, 0x2659, 0x40BA, 0x40BB, 0x40BC, 0x40CD, 0x40BF, 0x2652, 0x40CC, 0x40A3, 0x0383, 0x0390, 0x038F, 0x03B4, 0x03A8, 0x03B9, 0x03AD, 0x03ED, 0x03D4, 0x03EE, 0x03D5, 0x3FE1, 0x06B6, 0x4099, 0x05EB, 0x4097, 0x4098, 0x409B, 0x409A, 0x40B1, 0x40B2, 0x40A4, 0x409D, 0x043F, 0x0605, 0x062A, 0x0608, 0x03EB, 0x03D3, 0x06A9, 0x40F0, 0x40A5, 0x40AA, 0x40AB, 0x40A9, 0x40AD, 0x40AE, 0x40AF, 0x40B0, 0x0427, 0x041E, 0x40B3, 0x40B4, 0x0495, 0x04A3, 0x3FDD, 0x04A0, 0x3FE3, 0x3FE4, 0x050E, 0x04C9, 0x415D, 0x415E, 0x04F3, 0x056C, 0x4161, 0x4162, 0x4163, 0x4164, 0x40CF, 0x40CE, 0x059B, 0x40D0, 0x05AE, 0x3FE2, 0x028A, 0x0251, 0x027C, 0x04D3, 0x04FD, 0x038E, 0x4171, 0x4172, 0x06EE, 0x06EC, 0x4173, 0x039A, 0x039B, 0x415A, 0x415B, 0x415C, 0x4157, 0x4158, 0x04FC, 0x4156, 0x4155, 0x4174, 0x0289, 0x025E, 0x4159, 0x415F, 0x4169, 0x416E, 0x416D, 0x04D2, 0x4165, 0x4166, 0x416B, 0x416A, 0x038B, 0x037F, 0x03C0, 0x416F, 0x049B, 0x0275, 0x024A, 0x03E8, 0x2653, 0x01F5, 0x025F, 0x413C, 0x4135, 0x4136, 0x4137, 0x4138, 0x4139, 0x413A, 0x413B, 0x4144, 0x0602, 0x034F, 0x04FB, 0x04D1, 0x4141, 0x4142, 0x4140, 0x4143, 0x4145, 0x4146, 0x4167, 0x4168, 0x049F, 0x0491, 0x416C, 0x0277, 0x05F2, 0x05F1, 0x05F4, 0x0630, 0x411B, 0x411A, 0x06FC, 0x411E, 0x4115, 0x4116, 0x4117, 0x4118, 0x4121, 0x4122, 0x0DA0, 0x02EB, 0x0713, 0x4119, 0x4123, 0x4124, 0x040C, 0x02FE, 0x02FC, 0x024C, 0x4125, 0x042D, 0x031B, 0x05FE, 0x413D, 0x413E, 0x413F, 0x0372, 0x0346, 0x0E31, 0x0E53, 0x411D, 0x0E47, 0x0395, 0x0E5F, 0x0E5E, 0x0E5A, 0x0E5C, 0x0E72, 0x0E6B, 0x04C6, 0x04F0, 0x0E84, 0x0E7E, 0x0E7A, 0x03D0, 0x0603, 0x0624, 0x0601, 0x0625, 0x0EC6, 0x0626, 0x0279, 0x0EBF, 0x0EE4, 0x024E, 0x0ED2, 0x0ED9, 0x0F35, 0x0F24, 0x0F17, 0x0F22, 0x0F5C, 0x0F55, 0x0F48, 0x4151, 0x0F84, 0x0F75, 0x0F69, 0x02FF, 0x0382, 0x03BD, 0x4152, 0x0459, 0x4153, 0x4154, 0x4147, 0x414D, 0x4170, 0x4148, 0x0448, 0x0FED, 0x04AA, 0x04A9, 0x02B9, 0x0F26, 0x0F38, 0x0F27, 0x0F39, 0x0F28, 0x02BA, 0x02B8, 0x02B0, 0x0714, 0x0715, 0x0308, 0x051F, 0x02D8, 0x0306, 0x030B, 0x037A, 0x0356, 0x039E, 0x0379, 0x03BF, 0x03A4, 0x0404, 0x0408, 0x0430, 0x0431, 0x0476, 0x0463, 0x410F, 0x4110, 0x410B, 0x410A, 0x410C, 0x410E, 0x410D, 0x411C, 0x0350, 0x06D1, 0x4112, 0x4114, 0x4109, 0x02D7, 0x0353, 0x4113, 0x03A6, 0x03A5, 0x057B, 0x0711, 0x0712, 0x045C, 0x40F8, 0x05DA, 0x40F7, 0x40F6, 0x030A, 0x06FB, 0x064F, 0x04B0, 0x04B1, 0x052B, 0x411F, 0x4120, 0x412F, 0x4130, 0x4105, 0x4106, 0x4107, 0x4108, 0x412B, 0x412C, 0x40F5, 0x4128, 0x4126, 0x4111, 0x4160, 0x4127, 0x0604, 0x0623, 0x0729, 0x072A, 0x40F9, 0x40FA, 0x40FB, 0x40FC, 0x40FD, 0x40FE, 0x40FF, 0x4100, 0x4101, 0x4102, 0x4103, 0x4104, 0x0291, 0x02AE, 0x02D0, 0x0300, 0x0504, 0x04DA, 0x0728, 0x0620, 0x0546, 0x0545, 0x414B, 0x414C, 0x0710, 0x05C6, 0x05C9, 0x05F0, 0x02EC, 0x02FD, 0x0727, 0x045A, 0x060E, 0x0654, 0x066F, 0x06C3, 0x06C2, 0x06DE, 0x06DD, 0x06ED, 0x06F1, 0x06F0, 0x06F3, 0x0709, 0x414F, 0x414E, 0x040E, 0x4150, 0x4129, 0x412A, 0x414A, 0x0324, 0x412D, 0x412E, 0x4149, 0x0256, 0x4131, 0x4132, 0x4133, 0x4134, 0x0280, 0x0255, 0x0281, 0x03D8, 0x0503, 0x04D8, 0x04D9, 0x4180, 0x4191, 0x4192, 0x4193, 0x417C, 0x06C8, 0x06C7, 0x03B5, 0x03A9, 0x03F0, 0x03D7, 0x03F1, 0x418C, 0x4185, 0x4186, 0x4187, 0x4188, 0x4189, 0x418A, 0x418B, 0x4194, 0x4177, 0x4176, 0x4178, 0x4190, 0x033F, 0x0323, 0x0340, 0x41A0, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0215, 0x021F, 0x022A, 0x0234, 0x0372, 0x0413, 0x418D, 0x418E, 0x418F, 0x06AE, 0x06BA, 0x0268, 0x02A9, 0x02C7, 0x02F0, 0x032B, 0x036E, 0x038A, 0x03B3, 0x03E3, 0x040F, 0x0425, 0x044D, 0x047F, 0x049D, 0x04E7, 0x0539, 0x0552, 0x056B, 0x05AD, 0x05DE, 0x061B, 0x0660, 0x0680, 0x0695, 0x06B3, 0x06D3, 0x0694, 0x06B2, 0x067F, 0x04AB, 0x0307, 0x0485, 0x023D, 0x02A3, 0x02BD, 0x02DE, 0x030F, 0x0363, 0x037E, 0x03A7, 0x03CB, 0x040A, 0x041C, 0x043C, 0x0478, 0x048F, 0x04BD, 0x0534, 0x054E, 0x055D, 0x059A, 0x05CD, 0x05F9, 0x0656, 0x0676, 0x068D, 0x06A6, 0x06C9, 0x0502, 0x042D, 0x0412, 0x0346, 0x03FB, 0x417B, 0x04F7, 0x029C, 0x4175, 0x02D9, 0x04CD, 0x0305, 0x051E, 0x029A, 0x035A, 0x04F8, 0x04CE, 0x0510, 0x0352, 0x053D, 0x419B, 0x4179, 0x417A, 0x4197, 0x4198, 0x417E, 0x4196, 0x417F, 0x417D, 0x4183, 0x4195, 0x05DD, 0x4184, 0x061A, 0x05AC, 0x02D0, 0x02EF, 0x0300, 0x02A8, 0x0395, 0x049C, 0x4181, 0x4182, 0x0424, 0x044C, 0x047E, 0x065F, 0x0292, 0x02AE, 0x02EA, 0x0550, 0x056A, 0x419C, 0x04F9, 0x04CF, 0x01DB, 0x01F0, 0x04B7, 0x07F7, 0x05F5, 0x0471, 0x0295, 0x01BD, 0x0511, 0x02D3, 0x01C3, 0x01C1, 0x01F2, 0x03BD, 0x026A, 0x0269, 0x0270, 0x027A, 0x0278, 0x0276, 0x0288, 0x02CC, 0x032D, 0x032C, 0x032F, 0x0335, 0x03E5, 0x03E4, 0x03E7, 0x03E9, 0x02FA, 0x04A1, 0x04E9, 0x04E8, 0x04EB, 0x04F4, 0x04F1, 0x02B7, 0x04FA, 0x061D, 0x061C, 0x061F, 0x0622, 0x06B4, 0x06F6, 0x05A7, 0x023F, 0x023E, 0x0245, 0x024F, 0x024D, 0x024B, 0x025D, 0x02C2, 0x0311, 0x0310, 0x0313, 0x0319, 0x03CD, 0x03CC, 0x03CF, 0x03D1, 0x02E8, 0x0493, 0x04BF, 0x04BE, 0x04C1, 0x04CA, 0x04C7, 0x02A0, 0x04D0, 0x05FB, 0x05FA, 0x05FD, 0x0600, 0x06A7, 0x06F5, 0x06AB, 0x02C6, 0x0291, 0x419A, 0x0551, 0x419E, 0x41A2, 0x419F, 0x419D, 0x4199, 0x41A3, 0x02C6, 0x02EF, 0x06D2, 0x045C, 0x04E6, 0x0538, 0x06B2, 0x06D2, 0x2654, 0x0267, 0x06BE, 0x067F, 0x06DB, 0x0694, 0x2655, 0x0395, 0x07FC, 0x02AE, 0x0291, 0x02EF, 0x0865, 0x0869, 0x0885, 0x07D9, 0x06DB, 0x069C, 0x042D, 0x045C, 0x0267, 0x02A8, 0x0510, 0x0688, 0x063C, 0x0669, 0x032A, 0x036D, 0x264E, 0x069C, 0x07EE, 0x07F3, 0x07BF, 0x078F, 0x07C5, 0x0291, 0x02AE, 0x0578, 0x0424, 0x0694, 0x41A1, 0x082A, 0x0783, 0x044C, 0x076D, 0x07C5, 0x0445, 0x0451, 0x02A8, 0x07FA, 0x0767, 0x076C, 0x07AA, 0x264F, 0x0492, 0x0719, 0x04BB, 0x04BA, 0x04FE, 0x04D4, 0x04EA, 0x04C0, 0x0554, 0x053D, 0x0779, 0x07C2, 0x07C3, 0x07ED, 0x0760, 0x0819, 0x056D, 0x055F, 0x0359, 0x076E, 0x0783, 0x078F, 0x0827, 0x2650, 0x05B1, 0x059E, 0x05E1, 0x05D1, 0x05DF, 0x05CE, 0x05EC, 0x0765, 0x0628, 0x0606, 0x062B, 0x0609, 0x061E, 0x05FC, 0x0621, 0x05FF, 0x0627, 0x0861, 0x0346, 0x0372, 0x0683, 0x0679, 0x0291, 0x05DD, 0x06B7, 0x06D4, 0x06CA, 0x06D7, 0x06CD, 0x06D6, 0x06CC, 0x05A8, 0x06B2, 0x0300, 0x07FC, 0x07F8, 0x0800, 0x0768, 0x0819, 0x082F, 0x07F2, 0x082F, 0x0769, 0x083B, 0x0850, 0x0861, 0x080C, 0x07C2, 0x07E7, 0x07F0, 0x2651, 0x264A, 0x264B, 0x264C, 0x264D, 0x2666, 0x2667, 0x2668, 0x2669, 0x2662, 0x2663, 0x2664, 0x2665, 0x265E, 0x265F, 0x2660, 0x2661, 0x265A, 0x265B, 0x265C, 0x265D, 0x07D4, 0x047E, 0x2636, 0x2637, 0x2638, 0x2639, 0x2632, 0x05AC, 0x2633, 0x2634, 0x074A, 0x0764, 0x2635, 0x262E, 0x262F, 0x03FD, 0x0414, 0x2630, 0x2631, 0x0760, 0x0765, 0x0769, 0x076E, 0x262A, 0x262B, 0x07BF, 0x07C5, 0x262C, 0x262D, 0x2646, 0x2647, 0x2648, 0x2649, 0x2642, 0x2643, 0x2644, 0x2645, 0x263E, 0x263F, 0x2640, 0x077A, 0x2641, 0x263A, 0x07AA, 0x07C2, 0x263B, 0x263C, 0x0767, 0x076C, 0x0779, 0x078D, 0x07D8, 0x078E, 0x07AB, 0x07ED, 0x263D, 0x09ED, 0x09EC, 0x0A28, 0x0A27, 0x0819, 0x0972, 0x0971, 0x09F2, 0x095C, 0x095B, 0x0976, 0x0975, 0x09CF, 0x09CC, 0x09CF, 0x09CC, 0x0A18, 0x03E2, 0x040E, 0x0A17, 0x0A46, 0x049C, 0x0765, 0x0A45, 0x0A2C, 0x0A2B, 0x0A34, 0x0A33, 0x0705, 0x0704, 0x0707, 0x07F4, 0x07FA, 0x0706, 0x06FE, 0x06FD, 0x06EA, 0x06E9, 0x0708, 0x0395, 0x03BD, 0x085E, 0x0863, 0x02FB, 0x0596, 0x01C9, 0x0472, 0x048E, 0x0526, 0x0525, 0x050F, 0x0850, 0x0346, 0x07F2, 0x083B, 0x0291, 0x02AE, 0x06D2, 0x0300, 0x019D, 0x0885, 0x0395, 0x06B2, 0x0827, 0x01B1, 0x0372, 0x0827, 0x078D, 0x07C2, 0x0865, 0x0869, 0x078D, 0x07ED, 0x0779, 0x07D8, 0x07ED, 0x0769, 0x076E, 0x083B, 0x06BE, 0x0412, 0x042D, 0x045C, 0x07C5, 0x083D, 0x067F, 0x0694, 0x0389, 0x03B2, 0x0551, 0x056A, 0x065F, 0x044C, 0x0424, 0x049C, 0x082A, 0x0867, 0x061A, 0x086B, 0x0800, 0x07C2, 0x082F, 0x01B1, 0x085E, 0x0863, 0x0767, 0x076C, 0x0749, 0x089A, 0x0763, 0x082F, 0x082F, 0x083B, 0x0779, 0x078D, 0x0412, 0x0510, 0x042D, 0x045C, 0x020E, 0x0787, 0x021A, 0x01FA, 0x03FB, 0x0372, 0x01CF, 0x01B1, 0x02C6, 0x019D, 0x0224, 0x0861, 0x0395, 0x01E4, 0x01FA, 0x020E, 0x01CF, 0x01E4, 0x083D, 0x0802, 0x021A, 0x0224, 0x022F, 0x0239, 0x044C, 0x0485, 0x0424, 0x019D, 0x07ED, 0x07C2, 0x01B1, 0x05BC, 0x07AA, 0x0885, 0x019D, 0x01B1, 0x05E9, 0x069C, 0x0865, 0x0869, 0x021A, 0x02EF, 0x07F4, 0x07FA, 0x067F, 0x05DD, 0x04E5, 0x0688, 0x06B2, 0x0694, 0x06D2, 0x05AC, 0x03BD, 0x02AE, 0x0300, 0x0819, 0x0779, 0x0816, 0x0395, 0x0291, 0x03B2, 0x0865, 0x02D0, 0x0551, 0x02C6, 0x02EF, 0x07E7, 0x03E2, 0x0389, 0x03B2, 0x045C, 0x02AE, 0x02D0, 0x0424, 0x047E, 0x049C, 0x076E, 0x05BC, 0x05DD, 0x056A, 0x0769, 0x061A, 0x0551, 0x4666, 0x4711, 0x4690, 0x4712, 0x0300, 0x0300, 0x46B8, 0x4714, 0x0538, 0x04E6, 0x0538, 0x040E, 0x056A, 0x46B0, 0x042D, 0x06DB, 0x02A8, 0x0510, 0x07BF, 0x0267, 0x053D, 0x02A8, 0x0412, 0x05E9, 0x04AB, 0x063C, 0x0669, 0x0688, 0x069C, 0x03FB, 0x0412, 0x042D, 0x45E3, 0x0510, 0x04AB, 0x053D, 0x4554, 0x05BC, 0x05E9, 0x0485, 0x459D, 0x45A4, 0x45B7, 0x45DB, 0x03E2, 0x45E4, 0x45E2, 0x0389, 0x03B2, 0x0424, 0x044C, 0x056A, 0x065F, 0x45F4, 0x0551, 0x047E, 0x049C, 0x063C, 0x0669, 0x042D, 0x045C, 0x05AC, 0x05DD, 0x0551, 0x4692, 0x0538, 0x4446, 0x4451, 0x04E6, 0x03FB, 0x0412, 0x4688, 0x061A, 0x0485, 0x04AB, 0x0424, 0x069C, 0x0346, 0x0861, 0x056A, 0x448F, 0x063C, 0x0669, 0x0578, 0x4441, 0x44A7, 0x44B0, 0x047E, 0x044C, 0x448A, 0x448E, 0x4494, 0x44B3, 0x036D, 0x0688, 0x03E2, 0x040E, 0x032A, 0x02EF, 0x049C, 0x056A, 0x02C6, 0x03B2, 0x0389, 0x0554, 0x0462, 0x0461, 0x052D, 0x052C, 0x0439, 0x0438, 0x045F, 0x045E, 0x0435, 0x0434, 0x0437, 0x0436, 0x0599, 0x0598, 0x066C, 0x066B, 0x0558, 0x0557, 0x057E, 0x057D, 0x054A, 0x0549, 0x0541, 0x0548, 0x0547, 0x070D, 0x070C, 0x070F, 0x070E, 0x05E8, 0x05DC, 0x03C8, 0x1415, 0x1416, 0x028B, 0x028D, 0x0262, 0x0373, 0x05BD, 0x141F, 0x1420, 0x141B, 0x141C, 0x141D, 0x1423, 0x13F7, 0x13F9, 0x13FA, 0x13F2, 0x13F3, 0x13F4, 0x13F5, 0x13EF, 0x13F0, 0x13F1, 0x1407, 0x1409, 0x140A, 0x140B, 0x1402, 0x1403, 0x1404, 0x1406, 0x13FE, 0x13FF, 0x1400, 0x1401, 0x13FB, 0x13FC, 0x13FD, 0x0215, 0x021F, 0x022A, 0x0234, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0650, 0x037D, 0x0401, 0x145C, 0x145D, 0x145A, 0x0397, 0x046C, 0x03FF, 0x05B9, 0x05A6, 0x0568, 0x1448, 0x1449, 0x1442, 0x1443, 0x1444, 0x1445, 0x145B, 0x02BC, 0x02BB, 0x043B, 0x05F8, 0x0419, 0x1453, 0x1459, 0x142F, 0x071D, 0x0577, 0x0619, 0x082A, 0x07C5, 0x07F2, 0x07F8, 0x07FC, 0x0800, 0x089A, 0x0749, 0x0763, 0x0779, 0x07C2, 0x07ED, 0x0861, 0x0865, 0x0869, 0x0885, 0x082F, 0x083B, 0x31A0, 0x31A1, 0x067F, 0x0694, 0x06B2, 0x06D2, 0x085E, 0x0863, 0x032A, 0x06BE, 0x06DB, 0x03E2, 0x040E, 0x0867, 0x086B, 0x14B5, 0x085E, 0x0863, 0x2592, 0x250D, 0x2616, 0x2617, 0x25EA, 0x25F2, 0x25CF, 0x2F52, 0x3001, 0x2FEA, 0x2FE5, 0x2FE1, 0x2FE4, 0x2FBD, 0x2FBE, 0x2FC0, 0x2FB9, 0x3085, 0x3086, 0x3082, 0x3084, 0x303C, 0x3037, 0x3049, 0x3048, 0x3043, 0x301A, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x2D7D, 0x2D7E, 0x2D7F, 0x2D80, 0x2D79, 0x2D7A, 0x2D73, 0x2D74, 0x2D89, 0x2D8A, 0x2D5F, 0x2D60, 0x2D5B, 0x2D5C, 0x2D55, 0x2D56, 0x2D57, 0x2D58, 0x2D51, 0x2D52, 0x2D53, 0x2D54, 0x2D6D, 0x2D6E, 0x2D6F, 0x2D70, 0x2D69, 0x2D6A, 0x2D63, 0x2D64, 0x2D3D, 0x2D3E, 0x2D40, 0x2D39, 0x2D3A, 0x2D4B, 0x2D45, 0x2D46, 0x2D41, 0x2D42, 0x2D2F, 0x2D30, 0x2D29, 0x2D2A, 0x12CB, 0x2DF3, 0x2DF4, 0x2E09, 0x2E0A, 0x2E0B, 0x2E0C, 0x2E05, 0x2E06, 0x2E01, 0x2E02, 0x2331, 0x2336, 0x2339, 0x2340, 0x2337, 0x2335, 0x233E, 0x2338, 0x2DD9, 0x2DDA, 0x2DDB, 0x2DDC, 0x05E2, 0x2DD6, 0x233A, 0x233B, 0x2361, 0x2362, 0x2DD7, 0x236C, 0x2367, 0x2365, 0x2DD8, 0x2368, 0x2DD1, 0x2366, 0x2DD2, 0x2DD3, 0x233D, 0x2DD4, 0x2DED, 0x233F, 0x05B5, 0x05A0, 0x2363, 0x2364, 0x05B3, 0x05E5, 0x05A2, 0x059F, 0x236A, 0x05A3, 0x05E0, 0x2DEE, 0x05B6, 0x05D2, 0x2369, 0x05D5, 0x2341, 0x0639, 0x2343, 0x2DEF, 0x2345, 0x0617, 0x0638, 0x2347, 0x0607, 0x236B, 0x2DF0, 0x060A, 0x0661, 0x0657, 0x0662, 0x0658, 0x2351, 0x2355, 0x0482, 0x047A, 0x04E0, 0x2356, 0x2357, 0x050A, 0x03EF, 0x03D6, 0x0501, 0x0481, 0x2359, 0x235A, 0x235B, 0x04D7, 0x04F6, 0x0494, 0x235D, 0x04D5, 0x04A2, 0x235F, 0x04A4, 0x0536, 0x056E, 0x04A6, 0x04A5, 0x0497, 0x0498, 0x2360, 0x04CB, 0x235E, 0x0616, 0x0615, 0x0215, 0x021F, 0x06BC, 0x06B0, 0x06BB, 0x05D4, 0x0631, 0x060F, 0x0632, 0x062C, 0x04F5, 0x05E4, 0x0629, 0x0611, 0x2354, 0x2352, 0x2353, 0x2358, 0x236D, 0x236E, 0x236F, 0x06AF, 0x0637, 0x2370, 0x0449, 0x06A8, 0x0613, 0x0635, 0x235C, 0x06B5, 0x0315, 0x2391, 0x0326, 0x239C, 0x2398, 0x239A, 0x0331, 0x2397, 0x0342, 0x0ED7, 0x0F49, 0x0F1B, 0x237D, 0x237E, 0x0ED4, 0x0ED5, 0x0F18, 0x0316, 0x0F1D, 0x03D9, 0x2395, 0x23A3, 0x0E04, 0x0CB1, 0x239F, 0x0C7C, 0x0FEF, 0x0332, 0x23A5, 0x0DDF, 0x0E76, 0x22A6, 0x22C3, 0x0E87, 0x0F21, 0x2394, 0x0E77, 0x0E56, 0x22C5, 0x0D65, 0x0F4D, 0x23A0, 0x23A1, 0x0009, 0x000D, 0x23A4, 0x0DDE, 0x0E57, 0x22C1, 0x0D2F, 0x0D59, 0x0D5A, 0x0D6A, 0x0D6B, 0x0DBF, 0x0DC1, 0x0DC3, 0x22C0, 0x22C4, 0x03F2, 0x2393, 0x0011, 0x22B7, 0x239E, 0x2371, 0x2372, 0x2373, 0x23A2, 0x2377, 0x0506, 0x238F, 0x2374, 0x245C, 0x238E, 0x0ED3, 0x0F71, 0x2456, 0x2459, 0x242F, 0x2445, 0x2381, 0x2382, 0x2383, 0x2390, 0x2385, 0x2386, 0x2387, 0x2388, 0x0F9F, 0x0F6F, 0x238B, 0x238C, 0x0F6D, 0x238A, 0x2389, 0x0F6A, 0x0F53, 0x2453, 0x0F9E, 0x0FE7, 0x0FE8, 0x0F50, 0x0C7B, 0x2378, 0x2375, 0x0E94, 0x237B, 0x237C, 0x0EBD, 0x2376, 0x245A, 0x2380, 0x2379, 0x2392, 0x237F, 0x0E88, 0x0317, 0x2396, 0x22C2, 0x0E05, 0x23A6, 0x237A, 0x0FEA, 0x0EBC, 0x238D, 0x0F1F, 0x0F70, 0x0FEC, 0x0FEE, 0x0FA0, 0x0E96, 0x01DF, 0x0ED6, 0x0FE9, 0x111A, 0x3141, 0x111B, 0x111C, 0x3148, 0x3143, 0x111F, 0x3144, 0x0EDF, 0x0EE2, 0x11E2, 0x11E3, 0x111D, 0x111E, 0x0EDE, 0x0EDD, 0x0F33, 0x11C2, 0x11C3, 0x11C4, 0x11C5, 0x11C6, 0x11C7, 0x0EE3, 0x0F30, 0x0F34, 0x3149, 0x0C74, 0x0C75, 0x0CAC, 0x0F7D, 0x0CAB, 0x0CAD, 0x122A, 0x1226, 0x1227, 0x1224, 0x0F82, 0x0E14, 0x0F7E, 0x123C, 0x123D, 0x0E12, 0x0F56, 0x0F5A, 0x0F7C, 0x1242, 0x0F81, 0x0F83, 0x0514, 0x04BC, 0x0E15, 0x051D, 0x0374, 0x063C, 0x0522, 0x311D, 0x046A, 0x0346, 0x311F, 0x0469, 0x06B2, 0x3119, 0x06D2, 0x05AC, 0x067F, 0x051A, 0x061A, 0x0300, 0x057C, 0x0518, 0x0590, 0x0CE2, 0x0CE4, 0x0CE7, 0x1491, 0x0209, 0x05C7, 0x063E, 0x0594, 0x0643, 0x01F5, 0x0649, 0x06A2, 0x0642, 0x0CAE, 0x0059, 0x0D09, 0x06A0, 0x06A1, 0x06C6, 0x0E7C, 0x0E5B, 0x1467, 0x0CED, 0x0D2E, 0x005A, 0x0E92, 0x0E93, 0x0701, 0x02A2, 0x089B, 0x317D, 0x317E, 0x1493, 0x3179, 0x0E2C, 0x0057, 0x0E7B, 0x0E66, 0x0E68, 0x0E48, 0x149A, 0x2038, 0x203C, 0x2036, 0x2044, 0x1471, 0x0424, 0x044C, 0x203E, 0x0DC4, 0x204A, 0x204C, 0x2040, 0x204E, 0x2054, 0x2042, 0x0E2D, 0x0E2E, 0x0E30, 0x0E41, 0x2DA5, 0x2DA6, 0x0DAC, 0x0DAD, 0x0D76, 0x0485, 0x2EA3, 0x2EA4, 0x0E06, 0x0E07, 0x2EA0, 0x2EAC, 0x2EB0, 0x2DE9, 0x2DA7, 0x2DA3, 0x2DA1, 0x2DA2, 0x2DA8, 0x2DA4, 0x2EA1, 0x2EA2, 0x086E, 0x2DAB, 0x0892, 0x0871, 0x1DAA, 0x2DAC, 0x0873, 0x087B, 0x1DA6, 0x1DA7, 0x1DA8, 0x0877, 0x022A, 0x1DAB, 0x1DAC, 0x1DAD, 0x0F04, 0x2DEA, 0x2EAA, 0x0E08, 0x086F, 0x0890, 0x0D40, 0x0888, 0x0887, 0x088F, 0x088A, 0x2EAB, 0x0880, 0x087E, 0x088C, 0x0894, 0x080B, 0x0879, 0x0876, 0x2399, 0x07A3, 0x239D, 0x07D0, 0x07A5, 0x080A, 0x0DC6, 0x0DC5, 0x0215, 0x239B, 0x0848, 0x0CEF, 0x0847, 0x0DF5, 0x0234, 0x0DF3, 0x0CB0, 0x0DE8, 0x0D0B, 0x0DE9, 0x0E35, 0x01C9, 0x0742, 0x07CF, 0x0198, 0x1DA0, 0x01A2, 0x0E95, 0x0EC1, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x021F, 0x0215, 0x1507, 0x1508, 0x1509, 0x0234, 0x022A, 0x0234, 0x01F5, 0x0209, 0x022A, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x0215, 0x0209, 0x0198, 0x021F, 0x01C9, 0x01F5, 0x01F5, 0x0209, 0x0215, 0x021F, 0x022A, 0x0234, 0x0EC2, 0x0E7F, 0x0C48, 0x0C47, 0x0C45, 0x0C46, 0x0C49, 0x0C4A, 0x0C54, 0x0C4D, 0x14DE, 0x14DF, 0x0C4F, 0x0C4E, 0x0C4B, 0x0C4C, 0x0C51, 0x14E7, 0x0C58, 0x0C57, 0x0C55, 0x0C56, 0x0C59, 0x0C5A, 0x14E4, 0x0C52, 0x148D, 0x148F, 0x02D0, 0x0510, 0x313D, 0x14E5, 0x1488, 0x1489, 0x3163, 0x3164, 0x1505, 0x1504, 0x06BE, 0x14E8, 0x01DF, 0x149F, 0x314D, 0x314E, 0x0C53, 0x03BD, 0x147C, 0x147D, 0x3131, 0x3132, 0x14EA, 0x14E9, 0x14EB, 0x314C, 0x314F, 0x3150, 0x1497, 0x005B, 0x04E6, 0x0538, 0x3147, 0x3187, 0x1483, 0x1484, 0x1047, 0x1046, 0x1057, 0x1058, 0x1051, 0x1052, 0x1043, 0x1044, 0x1042, 0x104E, 0x1041, 0x104A, 0x1045, 0x104D, 0x0551, 0x056A, 0x05AC, 0x05DD, 0x1054, 0x1053, 0x1056, 0x1055, 0x14F5, 0x14F1, 0x1481, 0x1059, 0x14F2, 0x1050, 0x061A, 0x14F3, 0x1049, 0x104C, 0x14F6, 0x1502, 0x149C, 0x1482, 0x3133, 0x14F0, 0x104F, 0x1506, 0x257F, 0x1487, 0x104B, 0x3134, 0x2579, 0x3138, 0x2E7D, 0x2E7E, 0x2E7F, 0x2581, 0x0209, 0x0215, 0x14F4, 0x022A, 0x01A2, 0x01C9, 0x01DF, 0x021F, 0x032A, 0x036D, 0x0191, 0x0195, 0x2E8D, 0x2E8E, 0x0190, 0x0194, 0x0C98, 0x065F, 0x0D94, 0x0C9A, 0x0196, 0x0197, 0x080C, 0x0C99, 0x0234, 0x018F, 0x07D8, 0x06D2, 0x20AC, 0x20A0, 0x3190, 0x0819, 0x20A2, 0x1434, 0x1469, 0x20A4, 0x3135, 0x3136, 0x0300, 0x209E, 0x148C, 0x148E, 0x1438, 0x1439, 0x067F, 0x0694, 0x0DB9, 0x0FDB, 0x0E62, 0x0D55, 0x0CD7, 0x0CD9, 0x0EAE, 0x0ECF, 0x0ECD, 0x0C9C, 0x0389, 0x0234, 0x148A, 0x148B, 0x0F45, 0x0F66, 0x313B, 0x313C, 0x0E8E, 0x0DBA, 0x0F02, 0x0FD7, 0x0EFC, 0x0E42, 0x0DBB, 0x0F8F, 0x02EF, 0x1016, 0x0D2A, 0x0EA7, 0x0CDA, 0x0CDB, 0x047E, 0x049C, 0x03B2, 0x02C6, 0x20CE, 0x20D0, 0x1463, 0x1491, 0x1485, 0x315A, 0x3160, 0x3161, 0x3137, 0x3159, 0x1341, 0x004E, 0x02D0, 0x0300, 0x3166, 0x3155, 0x0053, 0x14ED, 0x004F, 0x0412, 0x0058, 0x14EF, 0x03BD, 0x01DF, 0x0050, 0x0051, 0x03FB, 0x14EE, 0x316B, 0x316C, 0x3162, 0x02C6, 0x3184, 0x0389, 0x1357, 0x20B0, 0x20B2, 0x03B2, 0x3165, 0x0209, 0x06B2, 0x01F5, 0x0052, 0x20A8, 0x315F, 0x20AA, 0x1480, 0x132D, 0x20A6, 0x20B4, 0x20AE, 0x3182, 0x0395, 0x0056, 0x0054, 0x1486, 0x045C, 0x0055, 0x3181, 0x14EC, 0x147E, 0x1494, 0x1495, 0x149B, 0x1492, 0x1490, 0x2F12, 0x2F11, 0x2F14, 0x2F16, 0x1498, 0x149E, 0x2F18, 0x2F49, 0x2F1A, 0x2F19, 0x2F21, 0x2F1E, 0x2F17, 0x2F28, 0x045C, 0x04AB, 0x067F, 0x03BD, 0x042D, 0x02AE, 0x2F1F, 0x2F22, 0x2F24, 0x2F2D, 0x2F23, 0x053D, 0x065F, 0x2F2E, 0x0267, 0x0300, 0x061A, 0x06B2, 0x0669, 0x063C, 0x069C, 0x0578, 0x02D0, 0x2F34, 0x02A8, 0x0554, 0x02EF, 0x02C6, 0x2F1B, 0x06DB, 0x2F37, 0x2F32, 0x0538, 0x2F33, 0x2F26, 0x2F44, 0x2F25, 0x2F2B, 0x2F4E, 0x2F27, 0x2F1D, 0x2F4A, 0x2F50, 0x2F4C, 0x2F47, 0x2F2C, 0x0395, 0x0300, 0x2F48, 0x0485, 0x06D2, 0x2F5E, 0x2F5D, 0x2F78, 0x0694, 0x02AE, 0x0291, 0x02D0, 0x2F8D, 0x2F59, 0x032A, 0x2F60, 0x0485, 0x2F5A, 0x05BC, 0x2F77, 0x03FB, 0x0578, 0x05E9, 0x053D, 0x2F71, 0x069C, 0x0485, 0x06D2, 0x2F8E, 0x04AB, 0x0485, 0x053D, 0x0412, 0x2F7C, 0x2F66, 0x05BC, 0x0412, 0x2F8F, 0x0694, 0x2F90, 0x2F31, 0x0538, 0x2F6B, 0x2F3C, 0x2F4D, 0x04E6, 0x03FB, 0x05E9, 0x04AB, 0x2F36, 0x2F35, 0x042D, 0x067F, 0x02AE, 0x2F84, 0x05BC, 0x2F72, 0x0554, 0x2F83, 0x2F3B, 0x2F4F, 0x042D, 0x2F6C, 0x045C, 0x0291, 0x0372, 0x0346, 0x045C, 0x06B2, 0x2F91, 0x2F94, 0x2FC4, 0x2F96, 0x2F95, 0x2F98, 0x2F97, 0x130F, 0x1310, 0x2F99, 0x1306, 0x1307, 0x1308, 0x1303, 0x1305, 0x2FAE, 0x2FA4, 0x130A, 0x130E, 0x2FA8, 0x2FA3, 0x1309, 0x130D, 0x130B, 0x130C, 0x2FA1, 0x2FA5, 0x2FC8, 0x2FAA, 0x2FAB, 0x2FA6, 0x2FB8, 0x05AC, 0x065F, 0x2FA0, 0x0694, 0x067F, 0x06D2, 0x06B2, 0x0538, 0x2FB1, 0x0291, 0x2FB3, 0x040E, 0x2FB6, 0x2FB5, 0x01C9, 0x0827, 0x0688, 0x2F9F, 0x07F2, 0x07BF, 0x07FE, 0x2FBF, 0x0669, 0x2FAD, 0x2F9E, 0x2F9D, 0x02A8, 0x0395, 0x02EF, 0x02C6, 0x2F7A, 0x04E6, 0x06DB, 0x06BE, 0x036D, 0x2FDF, 0x2F7B, 0x0395, 0x2FE0, 0x036D, 0x06BE, 0x0267, 0x0267, 0x2FD9, 0x2FFB, 0x2F75, 0x2F76, 0x02D0, 0x0291, 0x032A, 0x032A, 0x047E, 0x0267, 0x03E2, 0x049C, 0x06DB, 0x044C, 0x06BE, 0x036D, 0x03BD, 0x0688, 0x0554, 0x0578, 0x2FF5, 0x2FF6, 0x2FFD, 0x0749, 0x0485, 0x061A, 0x2FF1, 0x2FF2, 0x2FFF, 0x2FFE, 0x0763, 0x2FFA, 0x2FF8, 0x0669, 0x069C, 0x065F, 0x05BC, 0x0578, 0x2FC3, 0x2FF7, 0x300D, 0x300E, 0x2FC7, 0x2FFC, 0x0688, 0x2FCA, 0x0554, 0x0551, 0x056A, 0x02A8, 0x0424, 0x044C, 0x3013, 0x3014, 0x3016, 0x3018, 0x0389, 0x03B2, 0x3011, 0x3017, 0x04E6, 0x0538, 0x063C, 0x05DD, 0x0215, 0x1337, 0x0267, 0x132F, 0x3023, 0x3024, 0x1388, 0x021F, 0x302D, 0x302E, 0x301B, 0x02A8, 0x302A, 0x3029, 0x302F, 0x3030, 0x137A, 0x1386, 0x0554, 0x301C, 0x05BC, 0x05E9, 0x0510, 0x053D, 0x0485, 0x04AB, 0x3015, 0x0688, 0x303A, 0x3039, 0x0669, 0x069C, 0x1389, 0x137B, 0x1339, 0x134A, 0x1374, 0x1330, 0x040E, 0x03E2, 0x04E6, 0x0538, 0x1333, 0x047E, 0x303D, 0x303E, 0x303F, 0x3040, 0x1378, 0x01DF, 0x01C9, 0x136F, 0x02C6, 0x02EF, 0x032A, 0x036D, 0x01F5, 0x3058, 0x063C, 0x3054, 0x0372, 0x0346, 0x3053, 0x305B, 0x022A, 0x02EF, 0x0234, 0x305C, 0x3057, 0x3056, 0x3064, 0x3063, 0x306F, 0x3052, 0x3070, 0x3067, 0x03E2, 0x03B2, 0x306D, 0x2F80, 0x3069, 0x306A, 0x136A, 0x036D, 0x3051, 0x3079, 0x06BE, 0x065F, 0x0267, 0x040E, 0x02A8, 0x049C, 0x307F, 0x1368, 0x032A, 0x047E, 0x3055, 0x061A, 0x307A, 0x0694, 0x0551, 0x065F, 0x1379, 0x067F, 0x06D2, 0x02AE, 0x02D0, 0x0209, 0x0198, 0x01A2, 0x05AC, 0x1363, 0x0389, 0x1361, 0x1366, 0x1367, 0x02C6, 0x0554, 0x1362, 0x30BB, 0x309D, 0x309E, 0x0578, 0x30B8, 0x309A, 0x3099, 0x309F, 0x30A0, 0x30B7, 0x137C, 0x30B5, 0x06DB, 0x0267, 0x06BE, 0x0688, 0x069C, 0x063C, 0x0669, 0x036D, 0x040E, 0x03B2, 0x0389, 0x032A, 0x1384, 0x0267, 0x136C, 0x06BE, 0x1393, 0x30B3, 0x30B4, 0x1377, 0x032A, 0x1364, 0x1365, 0x03E2, 0x02A8, 0x0694, 0x067F, 0x30B1, 0x30B2, 0x136B, 0x06DB, 0x30CB, 0x30BC, 0x30C3, 0x30C1, 0x30C7, 0x1371, 0x30CD, 0x30CE, 0x30C8, 0x30C2, 0x30CA, 0x30C9, 0x30CF, 0x30D0, 0x07E7, 0x30B6, 0x138B, 0x30CC, 0x0688, 0x069C, 0x05BC, 0x05E9, 0x0554, 0x0578, 0x2F7D, 0x036D, 0x1369, 0x07ED, 0x063C, 0x0669, 0x1331, 0x0827, 0x1334, 0x1360, 0x1387, 0x138A, 0x133E, 0x135D, 0x1345, 0x07F8, 0x05AC, 0x1340, 0x133B, 0x1385, 0x138F, 0x1370, 0x1390, 0x1375, 0x137F, 0x1380, 0x137D, 0x137E, 0x1394, 0x1382, 0x1381, 0x1383, 0x2F7E, 0x2F7F, 0x30FA, 0x30F9, 0x30FF, 0x3100, 0x1391, 0x138D, 0x138C, 0x138E, 0x05BC, 0x05E9, 0x0510, 0x053D, 0x1376, 0x1392, 0x05DD, 0x061A, 0x06DB, 0x06BE, 0x13A8, 0x1397, 0x1398, 0x13A7, 0x1395, 0x0779, 0x07D8, 0x078D, 0x1399, 0x139F, 0x139B, 0x139A, 0x13C5, 0x1396, 0x0538, 0x04E6, 0x13A3, 0x13A1, 0x133D, 0x13A5, 0x3124, 0x1349, 0x13A0, 0x251D, 0x13A4, 0x136D, 0x2520, 0x1344, 0x1373, 0x13B1, 0x13A2, 0x13A9, 0x4709, 0x056A, 0x13B8, 0x13B5, 0x1348, 0x2521, 0x13AF, 0x13BA, 0x2528, 0x13B4, 0x13C0, 0x2565, 0x139D, 0x13B3, 0x13B7, 0x1356, 0x13C8, 0x13C6, 0x13C2, 0x13C1, 0x13C7, 0x13AA, 0x2524, 0x13C3, 0x13AC, 0x1335, 0x13AD, 0x13A6, 0x1372, 0x13AB, 0x1343, 0x13C9, 0x3128, 0x01C9, 0x01A2, 0x1350, 0x1332, 0x251F, 0x3123, 0x2512, 0x250F, 0x2514, 0x3191, 0x2531, 0x3197, 0x01DF, 0x251B, 0x1338, 0x479C, 0x134F, 0x0198, 0x135A, 0x13BF, 0x0749, 0x07AA, 0x076C, 0x1342, 0x1346, 0x07F8, 0x021F, 0x2523, 0x2530, 0x01F5, 0x2533, 0x13B0, 0x13BC, 0x0424, 0x0763, 0x13BD, 0x2527, 0x13AE, 0x13BE, 0x07C2, 0x0760, 0x47B4, 0x07FE, 0x0551, 0x3196, 0x13B9, 0x0827, 0x003F, 0x13BB, 0x13B6, 0x003D, 0x0040, 0x13C4, 0x135B, 0x003E, 0x0041, 0x135C, 0x135E, 0x0042, 0x13B2, 0x139E, 0x0209, 0x139C, 0x13EB, 0x134D, 0x2541, 0x13EC, 0x13CB, 0x13E5, 0x453B, 0x13D7, 0x13CF, 0x13CE, 0x13CD, 0x13D0, 0x13E3, 0x0538, 0x13D2, 0x13D1, 0x13DA, 0x13DB, 0x13EE, 0x13D6, 0x13D5, 0x13DC, 0x13D3, 0x13D8, 0x13EA, 0x082F, 0x13D9, 0x13D4, 0x0538, 0x13E8, 0x080C, 0x0819, 0x4770, 0x2547, 0x13CC, 0x13E0, 0x13E1, 0x136E, 0x1359, 0x13E2, 0x1358, 0x134E, 0x134C, 0x319D, 0x134B, 0x13DE, 0x13E9, 0x0551, 0x13E4, 0x0EAB, 0x2532, 0x07F0, 0x2539, 0x081B, 0x2545, 0x2546, 0x254D, 0x2548, 0x254E, 0x0554, 0x022F, 0x01CF, 0x133A, 0x133C, 0x1353, 0x0827, 0x0767, 0x0215, 0x022A, 0x0234, 0x0783, 0x1336, 0x13CA, 0x135F, 0x086B, 0x0215, 0x07ED, 0x0832, 0x2593, 0x2594, 0x0867, 0x133F, 0x0198, 0x01A2, 0x2534, 0x256D, 0x0749, 0x0763, 0x07F0, 0x0D1A, 0x132E, 0x2561, 0x0EB4, 0x01FA, 0x0239, 0x1347, 0x1351, 0x1352, 0x01DF, 0x13DD, 0x0779, 0x2568, 0x2559, 0x1354, 0x01E4, 0x3198, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0198, 0x01A2, 0x3194, 0x021F, 0x020E, 0x252E, 0x13E6, 0x021A, 0x004B, 0x01CF, 0x13ED, 0x004A, 0x0049, 0x07BF, 0x044C, 0x01C9, 0x0D27, 0x31AD, 0x254B, 0x254C, 0x1477, 0x2558, 0x3192, 0x0D54, 0x07C5, 0x082F, 0x085E, 0x0863, 0x46B1, 0x089A, 0x078F, 0x149D, 0x3122, 0x252A, 0x049C, 0x056A, 0x022F, 0x04AB, 0x1464, 0x46A9, 0x03E2, 0x0861, 0x05E9, 0x0819, 0x2608, 0x3112, 0x0850, 0x0239, 0x311E, 0x1466, 0x3118, 0x2513, 0x1496, 0x4793, 0x25C3, 0x2609, 0x05DD, 0x317A, 0x260A, 0x0215, 0x25B4, 0x1479, 0x2529, 0x260B, 0x2607, 0x25B9, 0x260C, 0x1476, 0x0861, 0x312C, 0x0861, 0x31BA, 0x01E4, 0x040E, 0x019D, 0x3120, 0x25C4, 0x0885, 0x0850, 0x0239, 0x25AF, 0x25AD, 0x022F, 0x3121, 0x06B2, 0x250C, 0x2511, 0x2522, 0x25FE, 0x04AB, 0x1474, 0x314A, 0x25B3, 0x31B9, 0x3127, 0x0767, 0x0224, 0x07F2, 0x2604, 0x065F, 0x07C5, 0x2605, 0x01E4, 0x01F5, 0x01CF, 0x004D, 0x05AC, 0x147F, 0x05DD, 0x0819, 0x0785, 0x0832, 0x2602, 0x3168, 0x061A, 0x021F, 0x01C9, 0x020E, 0x2603, 0x31AE, 0x022F, 0x2582, 0x01FA, 0x2584, 0x261A, 0x261B, 0x06D2, 0x31B8, 0x257E, 0x1436, 0x257D, 0x2586, 0x31B4, 0x065F, 0x143D, 0x0239, 0x004C, 0x261C, 0x146C, 0x0802, 0x01FA, 0x020E, 0x2615, 0x25FF, 0x3167, 0x07F4, 0x261D, 0x07FE, 0x089A, 0x04E6, 0x14D6, 0x076C, 0x3195, 0x319A, 0x0224, 0x0372, 0x14A9, 0x259A, 0x31BC, 0x1499, 0x0800, 0x021A, 0x07FC, 0x317F, 0x083D, 0x0C66, 0x2597, 0x2598, 0x0C2A, 0x0CC6, 0x25B5, 0x047E, 0x31AF, 0x078F, 0x0760, 0x0802, 0x0209, 0x25AE, 0x14DA, 0x25B6, 0x0BE2, 0x07C5, 0x31A6, 0x25A2, 0x14D4, 0x05DD, 0x25AA, 0x0765, 0x259E, 0x259F, 0x0783, 0x078F, 0x04E6, 0x259C, 0x0760, 0x25C7, 0x081B, 0x0867, 0x0BE3, 0x0669, 0x147B, 0x022A, 0x14A8, 0x0832, 0x25A4, 0x14CA, 0x065F, 0x311A, 0x31AC, 0x1473, 0x31AA, 0x25D7, 0x3126, 0x31B2, 0x319C, 0x25AC, 0x0827, 0x07F0, 0x080C, 0x07C2, 0x07F4, 0x07FA, 0x07E7, 0x14A7, 0x25A3, 0x25A1, 0x25A7, 0x319B, 0x0779, 0x080C, 0x25BE, 0x0224, 0x251E, 0x25BF, 0x082F, 0x0869, 0x07F8, 0x07C2, 0x07ED, 0x0861, 0x25A6, 0x0827, 0x25A5, 0x0769, 0x25BA, 0x25BD, 0x0819, 0x0CCF, 0x082F, 0x14D7, 0x0827, 0x2515, 0x2518, 0x0802, 0x0819, 0x25AB, 0x0816, 0x07FE, 0x0234, 0x061A, 0x25BB, 0x25B0, 0x25D5, 0x25BC, 0x25A9, 0x25D6, 0x086B, 0x25CC, 0x0779, 0x25D1, 0x0783, 0x1437, 0x25D8, 0x25D9, 0x31B3, 0x0CC9, 0x25D0, 0x31A7, 0x25D2, 0x25D3, 0x07D8, 0x07ED, 0x1470, 0x0765, 0x07FC, 0x0C07, 0x0BE6, 0x0800, 0x076E, 0x07AA, 0x0C16, 0x2627, 0x2626, 0x0C1F, 0x0C2D, 0x0D41, 0x0D4C, 0x4545, 0x0C22, 0x0D20, 0x0D1F, 0x0D28, 0x0D29, 0x0D1D, 0x0D47, 0x0D44, 0x0D4B, 0x0D1C, 0x25EE, 0x0D53, 0x0C1B, 0x0BEA, 0x01A2, 0x0198, 0x01DF, 0x01C9, 0x0209, 0x01F5, 0x021F, 0x0215, 0x0EB1, 0x0D43, 0x25ED, 0x2585, 0x0234, 0x476F, 0x1475, 0x022A, 0x0EAD, 0x0EAA, 0x4544, 0x0D1B, 0x0D4D, 0x0D4E, 0x0EB3, 0x0EB2, 0x0D42, 0x0D48, 0x0D49, 0x4707, 0x470A, 0x0D46, 0x46E0, 0x4737, 0x146F, 0x0969, 0x14A3, 0x0CCA, 0x0A64, 0x0A63, 0x0A86, 0x0A66, 0x14A5, 0x0963, 0x0A74, 0x096A, 0x0A04, 0x0C67, 0x0964, 0x0985, 0x0A4E, 0x0A65, 0x312D, 0x0A4F, 0x3125, 0x0A85, 0x0A5C, 0x0A5B, 0x0A6F, 0x3116, 0x0A73, 0x3114, 0x312E, 0x312B, 0x3111, 0x0A70, 0x0A25, 0x0A26, 0x0943, 0x0944, 0x096E, 0x096D, 0x0C1D, 0x14AA, 0x0BF7, 0x09CC, 0x0A06, 0x09CF, 0x09B7, 0x09CF, 0x09B6, 0x1433, 0x0EAC, 0x0C1A, 0x0C24, 0x0CC8, 0x0CCE, 0x3115, 0x0D26, 0x0CC3, 0x0CCD, 0x0D22, 0x0D21, 0x3117, 0x0A78, 0x0A77, 0x0CC4, 0x0C13, 0x0CD0, 0x0C29, 0x0CCB, 0x036B, 0x036A, 0x04B4, 0x0368, 0x05AB, 0x05AA, 0x143C, 0x14AD, 0x0C25, 0x14AE, 0x143B, 0x0BF2, 0x14AC, 0x0367, 0x0369, 0x0C08, 0x0BCF, 0x0BB7, 0x14B1, 0x0BBA, 0x14AB, 0x0BB8, 0x14CD, 0x0BB9, 0x0C18, 0x0C27, 0x02B4, 0x0C10, 0x0C0D, 0x0C01, 0x0C04, 0x143F, 0x0BE7, 0x0BFF, 0x0BF5, 0x0C0F, 0x0FAB, 0x31BB, 0x0C0C, 0x1440, 0x0FB1, 0x0FB2, 0x101B, 0x025C, 0x0FAC, 0x1019, 0x311B, 0x02B5, 0x0BE4, 0x03C1, 0x0BF0, 0x143A, 0x0BF4, 0x1441, 0x0BED, 0x02D6, 0x257B, 0x143E, 0x0C0A, 0x0BE9, 0x0C02, 0x0BF8, 0x0BFC, 0x0C06, 0x31B6, 0x0287, 0x0CC5, 0x0C2E, 0x100D, 0x100C, 0x100A, 0x31B7, 0x0FDD, 0x0FDE, 0x0C8C, 0x0C7E, 0x0C90, 0x0C83, 0x0C91, 0x0C84, 0x0C2B, 0x0C28, 0x1435, 0x0EFA, 0x1006, 0x0EF7, 0x0EF8, 0x0FCB, 0x0FCA, 0x0FC7, 0x0FD6, 0x0FCF, 0x0FCE, 0x0FCC, 0x14D5, 0x0FD5, 0x0FC3, 0x0FD2, 0x0FD1, 0x14A0, 0x14A4, 0x0C87, 0x100B, 0x0FC4, 0x0C95, 0x0C88, 0x0C78, 0x14A6, 0x1005, 0x1003, 0x1004, 0x0C79, 0x0C93, 0x0C86, 0x0C92, 0x0C85, 0x0C94, 0x0C8A, 0x0C97, 0x18B3, 0x18B9, 0x186B, 0x1859, 0x1871, 0x1865, 0x18D7, 0x18DD, 0x1889, 0x1895, 0x196E, 0x0F05, 0x41F1, 0x18AD, 0x18A1, 0x188F, 0x18E9, 0x18C5, 0x1907, 0x185F, 0x18D1, 0x18CB, 0x190D, 0x18BF, 0x196F, 0x18E3, 0x1877, 0x187D, 0x18EF, 0x18FB, 0x18F5, 0x1901, 0x1970, 0x1913, 0x1925, 0x191F, 0x1967, 0x1919, 0x193D, 0x1937, 0x1883, 0x196D, 0x1955, 0x194F, 0x189B, 0x1931, 0x18A7, 0x192B, 0x4205, 0x0D93, 0x4208, 0x0D51, 0x4204, 0x41E9, 0x0D90, 0x0D96, 0x0DB1, 0x0DA9, 0x41F6, 0x0D97, 0x41F2, 0x41F3, 0x41F7, 0x41FC, 0x41F0, 0x4203, 0x41F4, 0x41F5, 0x1976, 0x1975, 0x41F9, 0x41EF, 0x41F8, 0x41EE, 0x0D8F, 0x41FD, 0x41E0, 0x41DF, 0x41E7, 0x41E1, 0x4217, 0x41E4, 0x41DE, 0x41E5, 0x41E8, 0x41ED, 0x421C, 0x421D, 0x41E3, 0x4218, 0x41E2, 0x4219, 0x4213, 0x4201, 0x0D89, 0x4212, 0x41EA, 0x41EB, 0x41EC, 0x4214, 0x0215, 0x420D, 0x41E6, 0x0DB2, 0x41FA, 0x41FB, 0x0DA8, 0x0F92, 0x022A, 0x021F, 0x4211, 0x02D5, 0x4210, 0x0EF1, 0x0D8A, 0x0F91, 0x420F, 0x0EF0, 0x0F93, 0x420E, 0x0F94, 0x0EF9, 0x101A, 0x0FC6, 0x0FAE, 0x4207, 0x0FBA, 0x101C, 0x197D, 0x1983, 0x0FB9, 0x4215, 0x04B3, 0x0FAD, 0x198F, 0x0FB4, 0x0FB3, 0x1995, 0x43F2, 0x4202, 0x19AD, 0x422A, 0x4260, 0x4261, 0x4456, 0x4263, 0x422B, 0x19C5, 0x19B9, 0x19B3, 0x4269, 0x19BF, 0x19CB, 0x4268, 0x19D7, 0x19D1, 0x19E3, 0x19E9, 0x19EF, 0x19DD, 0x453B, 0x44A3, 0x470D, 0x45AD, 0x1A2B, 0x1A31, 0x1A07, 0x257A, 0x45CD, 0x427B, 0x45E8, 0x199B, 0x1A25, 0x41FF, 0x1A13, 0x4200, 0x470F, 0x45EC, 0x1A34, 0x1A33, 0x4206, 0x1A32, 0x4289, 0x41FE, 0x420A, 0x425A, 0x420C, 0x423E, 0x4257, 0x425B, 0x4256, 0x4291, 0x4252, 0x425C, 0x425D, 0x021F, 0x4216, 0x0198, 0x01F5, 0x4245, 0x421A, 0x421B, 0x2560, 0x19A7, 0x4224, 0x423A, 0x4236, 0x4237, 0x4225, 0x01DF, 0x01A2, 0x01C9, 0x421F, 0x1A39, 0x0209, 0x0215, 0x4238, 0x4239, 0x0234, 0x257C, 0x422E, 0x422F, 0x4223, 0x022A, 0x1A38, 0x42B3, 0x4234, 0x4235, 0x42B9, 0x42B8, 0x2538, 0x2576, 0x4232, 0x4233, 0x423C, 0x423D, 0x421E, 0x2574, 0x42CA, 0x4253, 0x4241, 0x4228, 0x4222, 0x422D, 0x45E7, 0x42CB, 0x4258, 0x4229, 0x4240, 0x42CC, 0x1977, 0x2589, 0x4250, 0x424F, 0x4251, 0x422C, 0x424E, 0x02D4, 0x1B93, 0x423F, 0x4259, 0x4227, 0x4254, 0x1518, 0x4226, 0x151E, 0x1517, 0x4255, 0x4602, 0x451A, 0x44E0, 0x4459, 0x1510, 0x1511, 0x151C, 0x4573, 0x46AA, 0x151D, 0x0215, 0x453F, 0x151A, 0x1519, 0x44E7, 0x021F, 0x46E0, 0x4600, 0x01F5, 0x44C0, 0x1514, 0x1516, 0x45E0, 0x461C, 0x0209, 0x01F5, 0x1521, 0x4710, 0x0234, 0x022A, 0x01CB, 0x01A4, 0x01F7, 0x01E1, 0x0217, 0x020B, 0x146E, 0x019A, 0x1522, 0x4687, 0x151F, 0x1520, 0x0236, 0x1526, 0x12A0, 0x146D, 0x150F, 0x12F5, 0x12F5, 0x12F5, 0x12F5, 0x151B, 0x12F6, 0x1B71, 0x1B6C, 0x1B73, 0x1B72, 0x1B6B, 0x1461, 0x1B6E, 0x1460, 0x1B80, 0x1B75, 0x1B6A, 0x1B84, 0x1B6D, 0x1B86, 0x1B87, 0x1B7C, 0x1B7D, 0x1472, 0x146B, 0x1465, 0x1B7A, 0x1B7B, 0x01A2, 0x1B67, 0x1B82, 0x1B83, 0x1478, 0x1B85, 0x145F, 0x147A, 0x1B81, 0x1B68, 0x12F4, 0x1B92, 0x1525, 0x1B8F, 0x1B8E, 0x1B6F, 0x1B70, 0x1CF5, 0x432F, 0x1B69, 0x1B8B, 0x1B74, 0x1B8C, 0x1B76, 0x1B77, 0x469E, 0x46BC, 0x46F3, 0x46D0, 0x12F5, 0x1462, 0x1BF1, 0x1BEB, 0x1515, 0x44A5, 0x1D56, 0x1D57, 0x432E, 0x1513, 0x4469, 0x146A, 0x44A2, 0x434F, 0x4354, 0x4355, 0x4358, 0x46E7, 0x4359, 0x1539, 0x44CC, 0x153F, 0x1543, 0x44CE, 0x1538, 0x1531, 0x438B, 0x1530, 0x438C, 0x438D, 0x153C, 0x153D, 0x4366, 0x153E, 0x1AB3, 0x1AB9, 0x153B, 0x153A, 0x436C, 0x436B, 0x4249, 0x43BF, 0x44FD, 0x4509, 0x43D2, 0x43C2, 0x1BE9, 0x4497, 0x1AD7, 0x43D8, 0x1554, 0x43D9, 0x438A, 0x152B, 0x1555, 0x4507, 0x1556, 0x43D3, 0x1557, 0x152A, 0x4392, 0x4393, 0x1546, 0x1551, 0x1550, 0x4387, 0x1547, 0x1468, 0x1533, 0x4386, 0x152E, 0x152D, 0x1BFC, 0x152F, 0x1541, 0x4390, 0x1542, 0x1540, 0x1545, 0x4394, 0x1544, 0x152C, 0x154C, 0x01C9, 0x01DF, 0x01A2, 0x1534, 0x154D, 0x154E, 0x43A1, 0x1553, 0x1535, 0x0198, 0x1532, 0x0209, 0x1552, 0x1536, 0x1537, 0x1C02, 0x43A4, 0x43A0, 0x43BB, 0x43BA, 0x43A5, 0x43B0, 0x43B1, 0x207A, 0x022A, 0x43AE, 0x0234, 0x43B4, 0x43B5, 0x43B2, 0x43B7, 0x43BD, 0x43B9, 0x154A, 0x154B, 0x1549, 0x43B3, 0x439F, 0x2082, 0x1548, 0x439E, 0x43A3, 0x43CE, 0x43A2, 0x43AB, 0x43A7, 0x154F, 0x43AC, 0x1559, 0x43D4, 0x1558, 0x43D5, 0x43AD, 0x43AA, 0x43CF, 0x1BFB, 0x1BE6, 0x155B, 0x01A2, 0x01C9, 0x01DF, 0x155A, 0x1C05, 0x1CD9, 0x1CDA, 0x01DF, 0x01A2, 0x01C9, 0x0198, 0x021F, 0x0209, 0x1CC8, 0x1CD5, 0x10EB, 0x10EC, 0x10ED, 0x10EE, 0x10EF, 0x10F0, 0x10F1, 0x10F2, 0x1CD0, 0x1CCF, 0x1CCE, 0x10F6, 0x1CCD, 0x1CD3, 0x1CD1, 0x1CD8, 0x0234, 0x1CD7, 0x1CD2, 0x1CDC, 0x1CD4, 0x1CD6, 0x1CDE, 0x1CDD, 0x022A, 0x1CE2, 0x01F5, 0x29EC, 0x0215, 0x29EF, 0x0198, 0x1CDF, 0x1CC7, 0x1CE0, 0x1C07, 0x29FE, 0x1CE1, 0x29E9, 0x2A5D, 0x1523, 0x2A60, 0x150C, 0x1CCB, 0x1512, 0x1BE5, 0x1524, 0x1CB9, 0x1CB8, 0x2A04, 0x1CBF, 0x1CBD, 0x1CBC, 0x2A07, 0x1CBE, 0x150A, 0x150B, 0x1CC3, 0x1CC2, 0x29F8, 0x29FB, 0x021F, 0x2246, 0x2247, 0x2248, 0x150D, 0x2A6C, 0x2A75, 0x2A76, 0x150E, 0x2A6D, 0x1527, 0x1528, 0x2A73, 0x1BF5, 0x2A38, 0x2A39, 0x1BFA, 0x1BF4, 0x1BF2, 0x1BF3, 0x2A58, 0x2A59, 0x2A55, 0x2A57, 0x2A30, 0x0209, 0x0215, 0x0234, 0x1529, 0x2A71, 0x2A86, 0x2A87, 0x22C7, 0x1BF9, 0x2A83, 0x2A82, 0x2A48, 0x2A49, 0x2A53, 0x2A54, 0x2A89, 0x2A88, 0x0043, 0x0044, 0x2A77, 0x2A78, 0x2A4F, 0x2A50, 0x0045, 0x0046, 0x0047, 0x0048, 0x1BFD, 0x1C00, 0x1C0C, 0x1C0D, 0x1C01, 0x1C03, 0x1BF7, 0x2A5C, 0x2A5F, 0x1BEA, 0x2A79, 0x2A5B, 0x1BE4, 0x1F6C, 0x1F6F, 0x1F6E, 0x1F71, 0x1F74, 0x2A97, 0x1BE1, 0x117A, 0x117B, 0x1F77, 0x1F76, 0x1F79, 0x1F78, 0x1F7B, 0x1182, 0x1F7D, 0x1F7A, 0x1BF8, 0x1F80, 0x1F81, 0x1F7E, 0x1F83, 0x1C04, 0x1F85, 0x222C, 0x1F89, 0x1F86, 0x1191, 0x1192, 0x1F87, 0x1194, 0x1195, 0x1196, 0x1197, 0x1F8E, 0x1F91, 0x1F8F, 0x1F95, 0x1F92, 0x1F8A, 0x1F8B, 0x1BDE, 0x1BDF, 0x2AB3, 0x2ACE, 0x2A61, 0x2A62, 0x1BF6, 0x2245, 0x1D3D, 0x1F93, 0x11A5, 0x1F94, 0x11A6, 0x11A7, 0x11A8, 0x11A9, 0x01C9, 0x0209, 0x11AA, 0x11AB, 0x11AC, 0x11AD, 0x11AE, 0x11AF, 0x11B0, 0x11B1, 0x11B2, 0x11B3, 0x222B, 0x11B5, 0x11B6, 0x0234, 0x01DF, 0x0215, 0x11B9, 0x11BA, 0x021F, 0x11BC, 0x11BD, 0x11BE, 0x11BF, 0x11C0, 0x11C8, 0x11C9, 0x11CA, 0x11CB, 0x11CC, 0x11CD, 0x11CE, 0x11CF, 0x11D0, 0x11D1, 0x11D2, 0x11D3, 0x11D4, 0x11D5, 0x11D6, 0x11D7, 0x11D8, 0x1CEA, 0x11DA, 0x1D27, 0x11DC, 0x11DD, 0x01F5, 0x11DF, 0x11E7, 0x11E8, 0x11E9, 0x11EA, 0x11EB, 0x11EC, 0x11ED, 0x11EE, 0x022A, 0x2A1A, 0x1D00, 0x1D0E, 0x1D11, 0x1D15, 0x2A26, 0x1F03, 0x1F00, 0x1F05, 0x1F06, 0x2A1F, 0x1F1C, 0x2A1B, 0x2A1C, 0x1F1E, 0x1F09, 0x1F02, 0x2B7B, 0x1F0B, 0x2A16, 0x2A14, 0x1F15, 0x1F10, 0x1F1A, 0x1F1B, 0x1F1D, 0x2B74, 0x1F17, 0x1F16, 0x2B73, 0x1F18, 0x2A4C, 0x1F19, 0x1F14, 0x045C, 0x1F1F, 0x2A44, 0x2A20, 0x1F01, 0x2B85, 0x1F27, 0x2A22, 0x1F0D, 0x1F21, 0x1F07, 0x1F08, 0x29DD, 0x2A45, 0x2A47, 0x2B9E, 0x2A24, 0x29E0, 0x29E3, 0x1F04, 0x1F25, 0x2B98, 0x2B99, 0x29F5, 0x1F20, 0x2B9D, 0x1F23, 0x1F22, 0x2B9F, 0x1F0E, 0x1F0F, 0x1F0C, 0x29DA, 0x1F0A, 0x1249, 0x1F2D, 0x0215, 0x1F2C, 0x1F31, 0x1F2A, 0x2AD1, 0x2A43, 0x2A4A, 0x2ACB, 0x22BD, 0x1258, 0x1F2B, 0x0485, 0x1257, 0x125D, 0x042D, 0x1D40, 0x1F32, 0x01DF, 0x01C9, 0x0198, 0x0346, 0x022A, 0x2B94, 0x0372, 0x04AB, 0x1F13, 0x0234, 0x0372, 0x021F, 0x1F33, 0x1D3E, 0x1F24, 0x1F29, 0x2B95, 0x1F2F, 0x1CE9, 0x1CF2, 0x1F26, 0x1F2E, 0x05E9, 0x1D05, 0x1D0D, 0x1F30, 0x0234, 0x1D3B, 0x022A, 0x05BC, 0x1D31, 0x0060, 0x1D20, 0x1D0B, 0x0064, 0x1CFB, 0x0346, 0x0063, 0x1F28, 0x1D10, 0x1D3F, 0x2B02, 0x2B07, 0x02D0, 0x1D32, 0x1D25, 0x2B08, 0x2B0A, 0x1A8F, 0x1A95, 0x1A71, 0x2B05, 0x2B04, 0x2B03, 0x1AE3, 0x1A6B, 0x2AF8, 0x2AF7, 0x2AFC, 0x2AFA, 0x2AFF, 0x2AFD, 0x1AD1, 0x1A59, 0x1AEF, 0x1AF5, 0x1ACB, 0x1AE9, 0x1A47, 0x1A4D, 0x2B00, 0x2B01, 0x1F12, 0x2AE6, 0x2AE7, 0x1A53, 0x2AEC, 0x2AEA, 0x2AED, 0x1A41, 0x1A3B, 0x1A5F, 0x1A77, 0x1500, 0x1A7D, 0x1A65, 0x2AE5, 0x2AE8, 0x1B2B, 0x1B31, 0x2AE4, 0x2B3F, 0x2AF4, 0x2AF5, 0x1B55, 0x1B5C, 0x1B5F, 0x2AF0, 0x2AEE, 0x1B5E, 0x2B06, 0x2B42, 0x1B19, 0x2AF6, 0x2B76, 0x2B58, 0x1B01, 0x2B57, 0x2B6F, 0x1B60, 0x2B7C, 0x2B6E, 0x2B2B, 0x2B77, 0x2B37, 0x2B31, 0x03FB, 0x2AF3, 0x2B34, 0x2B38, 0x1B13, 0x1B4F, 0x1CF6, 0x1A89, 0x2B6B, 0x1A83, 0x2B6A, 0x2B6C, 0x2B69, 0x0412, 0x2B70, 0x1B66, 0x042D, 0x02AE, 0x2B71, 0x0291, 0x1B64, 0x2B2C, 0x2B2D, 0x1B37, 0x2B10, 0x2B11, 0x1CFF, 0x1AFB, 0x1D1C, 0x1B0D, 0x1B49, 0x0510, 0x1B07, 0x1B43, 0x2B30, 0x14FA, 0x2B39, 0x2B3C, 0x1B1F, 0x2B4C, 0x1B3D, 0x1B25, 0x1B5D, 0x0209, 0x2B45, 0x2B4F, 0x1D58, 0x2B50, 0x2B48, 0x14DB, 0x2B4B, 0x1B5B, 0x119B, 0x222A, 0x1B61, 0x1B62, 0x1D02, 0x1183, 0x119F, 0x1ADD, 0x053D, 0x1BF0, 0x2229, 0x119A, 0x4367, 0x4276, 0x4274, 0x2230, 0x1185, 0x116F, 0x119D, 0x1184, 0x4275, 0x426E, 0x116B, 0x436F, 0x1186, 0x4278, 0x1F11, 0x4266, 0x116C, 0x116D, 0x1209, 0x1202, 0x4271, 0x116A, 0x116E, 0x428C, 0x1174, 0x1180, 0x222F, 0x1170, 0x4270, 0x1169, 0x1175, 0x426F, 0x1172, 0x1171, 0x1189, 0x222E, 0x4297, 0x11B4, 0x425F, 0x119C, 0x425E, 0x2A65, 0x11B8, 0x427D, 0x118D, 0x1BED, 0x4267, 0x11B7, 0x2061, 0x2AC8, 0x426B, 0x1173, 0x4265, 0x4273, 0x1181, 0x118F, 0x427C, 0x427A, 0x4293, 0x4279, 0x1188, 0x4272, 0x4277, 0x4264, 0x122F, 0x4296, 0x4298, 0x1BEE, 0x4262, 0x4284, 0x1BEF, 0x4287, 0x2AB0, 0x222D, 0x4288, 0x42EC, 0x42A3, 0x426A, 0x426C, 0x426D, 0x11DE, 0x118C, 0x118E, 0x42A5, 0x1C10, 0x434A, 0x1230, 0x11BB, 0x1198, 0x118B, 0x1193, 0x11DB, 0x4292, 0x207C, 0x42E7, 0x4299, 0x42A8, 0x2A5A, 0x118A, 0x2084, 0x1199, 0x1BE0, 0x11A3, 0x2ADA, 0x4281, 0x11A2, 0x2ADB, 0x11A4, 0x11D9, 0x119E, 0x11A0, 0x11A1, 0x42E6, 0x4295, 0x429C, 0x1236, 0x1213, 0x1177, 0x121F, 0x1179, 0x1176, 0x428E, 0x4294, 0x4290, 0x2233, 0x1220, 0x428F, 0x45FC, 0x1218, 0x4337, 0x454B, 0x447E, 0x1178, 0x42FF, 0x4329, 0x1CF8, 0x4567, 0x4564, 0x42EA, 0x117C, 0x42EB, 0x464D, 0x42FE, 0x42ED, 0x4318, 0x1248, 0x455B, 0x4431, 0x4313, 0x4309, 0x1214, 0x4357, 0x442D, 0x117D, 0x2094, 0x0EEF, 0x1238, 0x46E5, 0x4435, 0x46D7, 0x4312, 0x4319, 0x4521, 0x4315, 0x430E, 0x4675, 0x4305, 0x123A, 0x1212, 0x1239, 0x4500, 0x1215, 0x1235, 0x123B, 0x0061, 0x1237, 0x46DB, 0x1219, 0x1234, 0x4631, 0x46C1, 0x4311, 0x4314, 0x46BD, 0x443E, 0x430F, 0x1B63, 0x45ED, 0x20C7, 0x20CF, 0x208B, 0x4310, 0x14FD, 0x124A, 0x4332, 0x1D09, 0x4550, 0x43BE, 0x125A, 0x0F01, 0x4333, 0x1501, 0x1243, 0x4547, 0x4502, 0x20B1, 0x01F5, 0x44F1, 0x1244, 0x4339, 0x4330, 0x435A, 0x46A8, 0x43AF, 0x20D3, 0x20D5, 0x2A67, 0x1B65, 0x20CB, 0x20CD, 0x43DA, 0x125E, 0x43BC, 0x14FF, 0x20BF, 0x2A63, 0x14FB, 0x14FC, 0x14F9, 0x1BEC, 0x14F7, 0x14F8, 0x1BE3, 0x43DB, 0x43CD, 0x43C4, 0x2231, 0x14FE, 0x43C0, 0x43C1, 0x43D6, 0x20C9, 0x43DC, 0x43DD, 0x11F1, 0x11F3, 0x1259, 0x11F2, 0x122B, 0x122C, 0x1231, 0x11F5, 0x11FB, 0x1200, 0x11F9, 0x11FE, 0x42F8, 0x11F4, 0x11F7, 0x42F2, 0x42E5, 0x42E1, 0x122D, 0x42DF, 0x120A, 0x120B, 0x120C, 0x11F0, 0x1207, 0x1206, 0x120D, 0x1208, 0x11F6, 0x42F6, 0x42F9, 0x1232, 0x42F3, 0x42F5, 0x42F1, 0x42F4, 0x42EE, 0x42EF, 0x42F0, 0x42F7, 0x42FC, 0x11FA, 0x42FA, 0x11FC, 0x121E, 0x121C, 0x4316, 0x42E9, 0x122E, 0x1217, 0x42E4, 0x430B, 0x4307, 0x4306, 0x430C, 0x431C, 0x11FD, 0x4317, 0x11FF, 0x1222, 0x42E2, 0x42E3, 0x1216, 0x121D, 0x42DE, 0x1246, 0x42E0, 0x4301, 0x431D, 0x431B, 0x42E8, 0x430A, 0x1251, 0x42FB, 0x1252, 0x42FD, 0x1245, 0x1247, 0x124E, 0x1264, 0x4320, 0x005C, 0x4321, 0x1265, 0x125C, 0x125B, 0x4327, 0x124F, 0x1250, 0x4325, 0x0065, 0x4326, 0x1205, 0x4336, 0x1266, 0x1203, 0x431F, 0x4335, 0x44DF, 0x021F, 0x4334, 0x4349, 0x433D, 0x431E, 0x121B, 0x124B, 0x1221, 0x124D, 0x43C6, 0x124C, 0x01C9, 0x01DF, 0x4344, 0x4324, 0x4300, 0x005E, 0x0209, 0x435B, 0x005F, 0x4348, 0x0066, 0x005D, 0x432D, 0x4341, 0x4342, 0x01A2, 0x46AB, 0x46DF, 0x434E, 0x4343, 0x4304, 0x4345, 0x433F, 0x433B, 0x435C, 0x435D, 0x431A, 0x433A, 0x10FE, 0x433C, 0x10FB, 0x10FC, 0x10FD, 0x114D, 0x114A, 0x114B, 0x114C, 0x4364, 0x4362, 0x4363, 0x4365, 0x1261, 0x4376, 0x4377, 0x4378, 0x1262, 0x1204, 0x20A3, 0x20A5, 0x4379, 0x1260, 0x117F, 0x125F, 0x4361, 0x4372, 0x4373, 0x4374, 0x4360, 0x1255, 0x1254, 0x4375, 0x1256, 0x43C7, 0x1253, 0x439D, 0x203D, 0x4384, 0x4385, 0x2055, 0x205B, 0x206F, 0x2097, 0x204D, 0x43C5, 0x435F, 0x2071, 0x435E, 0x2075, 0x2057, 0x2059, 0x205D, 0x1C11, 0x2053, 0x438F, 0x434C, 0x4391, 0x438E, 0x437A, 0x4383, 0x4395, 0x437C, 0x437B, 0x4381, 0x437D, 0x43B6, 0x4382, 0x2099, 0x2083, 0x209B, 0x209D, 0x4352, 0x436D, 0x45FF, 0x4368, 0x436A, 0x4369, 0x4380, 0x43A6, 0x432A, 0x204F, 0x207F, 0x434B, 0x01F5, 0x43B8, 0x203F, 0x2049, 0x2047, 0x437E, 0x01F5, 0x2041, 0x2043, 0x2045, 0x2051, 0x022A, 0x0215, 0x204B, 0x467D, 0x4388, 0x4389, 0x20C1, 0x437F, 0x20DF, 0x4340, 0x206D, 0x433E, 0x2063, 0x45C7, 0x2065, 0x43CB, 0x43CA, 0x0062, 0x43CC, 0x46D5, 0x46E8, 0x2067, 0x43D7, 0x4353, 0x439B, 0x439A, 0x4331, 0x45AB, 0x4397, 0x4398, 0x4399, 0x4396, 0x46CC, 0x4536, 0x439C, 0x44B5, 0x4560, 0x4599, 0x4481, 0x458F, 0x4667, 0x0B6A, 0x4510, 0x455B, 0x4572, 0x45A1, 0x465D, 0x442C, 0x452E, 0x46A7, 0x459C, 0x458B, 0x4463, 0x4511, 0x45BD, 0x4668, 0x459A, 0x45B4, 0x46C8, 0x46AF, 0x4486, 0x45EE, 0x460F, 0x4633, 0x46FD, 0x447A, 0x44E9, 0x4653, 0x4541, 0x469C, 0x44E4, 0x44C9, 0x4474, 0x45CC, 0x4535, 0x4540, 0x45B3, 0x4427, 0x4681, 0x45BA, 0x46BB, 0x45DF, 0x448D, 0x46F2, 0x467C, 0x46FA, 0x44F7, 0x4587, 0x465A, 0x45A2, 0x46F0, 0x44C4, 0x445A, 0x4700, 0x4462, 0x450A, 0x4452, 0x4461, 0x215C, 0x44A8, 0x460C, 0x459F, 0x4448, 0x46C7, 0x45AC, 0x44B2, 0x45C4, 0x46B3, 0x44B1, 0x45D9, 0x4708, 0x4468, 0x45FD, 0x46F4, 0x0B64, 0x46CE, 0x445B, 0x45B0, 0x443A, 0x46D2, 0x4514, 0x46D4, 0x4680, 0x2AD4, 0x46DE, 0x212C, 0x453C, 0x1BFF, 0x45CB, 0x468A, 0x46B2, 0x45AE, 0x0B67, 0x4609, 0x4660, 0x4570, 0x4583, 0x446F, 0x4636, 0x46FB, 0x4539, 0x45B6, 0x45BE, 0x4663, 0x455E, 0x457C, 0x462F, 0x45CF, 0x45B5, 0x43F5, 0x4556, 0x45DA, 0x4694, 0x466A, 0x46D9, 0x44D8, 0x4665, 0x46BE, 0x46A3, 0x4617, 0x212B, 0x4588, 0x43E5, 0x215B, 0x458A, 0x43F9, 0x43EC, 0x212F, 0x1D35, 0x45AA, 0x2136, 0x2145, 0x2146, 0x2160, 0x43F3, 0x43F8, 0x4591, 0x2147, 0x2148, 0x4576, 0x4532, 0x2130, 0x212A, 0x1D26, 0x44FF, 0x43F0, 0x43F1, 0x43EE, 0x43EF, 0x4565, 0x4568, 0x212D, 0x43F4, 0x2134, 0x43DF, 0x427E, 0x427F, 0x4280, 0x212E, 0x4282, 0x4283, 0x4501, 0x4285, 0x4286, 0x2138, 0x43E9, 0x2163, 0x428A, 0x428B, 0x45D7, 0x428D, 0x0B55, 0x45A5, 0x450F, 0x43F7, 0x43F6, 0x2133, 0x0B6D, 0x44BA, 0x43E4, 0x43E1, 0x459D, 0x464E, 0x429A, 0x429B, 0x43FD, 0x429D, 0x429E, 0x429F, 0x42A0, 0x42A1, 0x42A2, 0x44E8, 0x42A4, 0x0B58, 0x42A6, 0x42A7, 0x0B5B, 0x42A9, 0x42AA, 0x42AB, 0x42AC, 0x42AD, 0x42AE, 0x42AF, 0x42B0, 0x42B1, 0x42B2, 0x43FC, 0x42B4, 0x42B5, 0x42B6, 0x42B7, 0x0B5E, 0x0B61, 0x42BA, 0x42BB, 0x42BC, 0x42BD, 0x42BE, 0x42BF, 0x42C0, 0x42C1, 0x42C2, 0x42C3, 0x42C4, 0x42C5, 0x42C6, 0x42C7, 0x42C8, 0x42C9, 0x0B49, 0x0B4C, 0x0B4F, 0x42CD, 0x42CE, 0x42CF, 0x42D0, 0x42D1, 0x42D2, 0x42D3, 0x42D4, 0x42D5, 0x42D6, 0x42D7, 0x42D8, 0x42D9, 0x42DA, 0x42DB, 0x42DC, 0x42DD, 0x2131, 0x2132, 0x43E6, 0x214F, 0x4404, 0x43E3, 0x43E2, 0x3178, 0x43EA, 0x43E7, 0x43E8, 0x43ED, 0x2135, 0x43EB, 0x2137, 0x2165, 0x4403, 0x217E, 0x2179, 0x4418, 0x43DE, 0x214C, 0x43E0, 0x440E, 0x43FA, 0x43FB, 0x2150, 0x440D, 0x214B, 0x2153, 0x2154, 0x214A, 0x2152, 0x2149, 0x4405, 0x4408, 0x4303, 0x215A, 0x2159, 0x4302, 0x4308, 0x215E, 0x215F, 0x2166, 0x2168, 0x2162, 0x2167, 0x430D, 0x2161, 0x2180, 0x215D, 0x2164, 0x4411, 0x4415, 0x4410, 0x2178, 0x441B, 0x4412, 0x4419, 0x440F, 0x4414, 0x441C, 0x441D, 0x4413, 0x4322, 0x4409, 0x1C0E, 0x1C0F, 0x1C08, 0x1C09, 0x4323, 0x1BE2, 0x4424, 0x432B, 0x217C, 0x4328, 0x1BFE, 0x2177, 0x432C, 0x4421, 0x1C06, 0x318B, 0x3172, 0x217F, 0x2155, 0x4420, 0x315E, 0x3171, 0x217A, 0x4338, 0x214D, 0x214E, 0x2151, 0x2156, 0x2157, 0x2158, 0x315D, 0x4407, 0x318C, 0x2184, 0x217B, 0x43FF, 0x4400, 0x4401, 0x4346, 0x4347, 0x4402, 0x3186, 0x43FE, 0x2176, 0x4549, 0x434D, 0x219B, 0x3183, 0x4350, 0x4351, 0x2175, 0x441F, 0x3185, 0x318F, 0x4356, 0x44EF, 0x4416, 0x4417, 0x441A, 0x2182, 0x2181, 0x472C, 0x4779, 0x0B16, 0x0B13, 0x4422, 0x0B22, 0x4423, 0x46C3, 0x46E3, 0x0B34, 0x0B37, 0x20D2, 0x46E1, 0x441E, 0x20D4, 0x20BE, 0x20C0, 0x209C, 0x0B1F, 0x0B76, 0x0B7C, 0x436E, 0x209A, 0x4370, 0x4371, 0x2096, 0x2098, 0x1C0A, 0x0B1C, 0x1BE7, 0x0B19, 0x44D3, 0x458E, 0x3175, 0x4685, 0x4518, 0x463B, 0x4678, 0x219A, 0x4544, 0x4578, 0x1BE8, 0x46B5, 0x4434, 0x2199, 0x0B70, 0x20C6, 0x2243, 0x470E, 0x0F00, 0x0B73, 0x440C, 0x2AD7, 0x217D, 0x20CC, 0x45F9, 0x20C8, 0x20CA, 0x45E9, 0x2183, 0x318D, 0x4406, 0x46FC, 0x468E, 0x44A9, 0x44EB, 0x318E, 0x4635, 0x45A7, 0x45DC, 0x469B, 0x46DC, 0x317B, 0x44CB, 0x455C, 0x457D, 0x4589, 0x4736, 0x4612, 0x46CF, 0x4467, 0x3177, 0x4455, 0x4454, 0x45F0, 0x460D, 0x3176, 0x46D1, 0x1C0B, 0x4519, 0x455B, 0x4691, 0x4429, 0x317C, 0x44F9, 0x45B0, 0x45C6, 0x446E, 0x45DE, 0x4438, 0x44F3, 0x4425, 0x456E, 0x4534, 0x4608, 0x4477, 0x44A4, 0x45D1, 0x465B, 0x468A, 0x4568, 0x46AD, 0x456C, 0x451D, 0x4649, 0x4523, 0x45C5, 0x442E, 0x4447, 0x4453, 0x4553, 0x4604, 0x4641, 0x468D, 0x46BF, 0x446A, 0x440B, 0x440A, 0x1136, 0x10FA, 0x113B, 0x44BE, 0x44E6, 0x4525, 0x4515, 0x45DD, 0x4506, 0x4509, 0x1118, 0x10F3, 0x4528, 0x452A, 0x10F5, 0x44F4, 0x4673, 0x4505, 0x10F4, 0x20B6, 0x4693, 0x10E0, 0x45F5, 0x10DC, 0x10DD, 0x10DA, 0x10DB, 0x10E1, 0x10E4, 0x45D4, 0x45C2, 0x45C9, 0x10E5, 0x240F, 0x113F, 0x10DF, 0x460A, 0x45C0, 0x10F7, 0x10DE, 0x4499, 0x44C3, 0x44FA, 0x461B, 0x10F8, 0x10F9, 0x4690, 0x468C, 0x4630, 0x4686, 0x468B, 0x4615, 0x4658, 0x460F, 0x1137, 0x4688, 0x1102, 0x1101, 0x4684, 0x4692, 0x1100, 0x10E2, 0x10E3, 0x10E6, 0x45D0, 0x10E8, 0x10E7, 0x46E4, 0x10E9, 0x1139, 0x1106, 0x4576, 0x1107, 0x2415, 0x4696, 0x454E, 0x4607, 0x1105, 0x46DA, 0x113C, 0x20C2, 0x1138, 0x110F, 0x110A, 0x110B, 0x1120, 0x1121, 0x1122, 0x1103, 0x1125, 0x44CD, 0x1115, 0x1124, 0x1126, 0x20C4, 0x45BB, 0x45CD, 0x45CE, 0x45AD, 0x1127, 0x45FE, 0x45D5, 0x1113, 0x45CA, 0x1114, 0x1117, 0x4584, 0x447F, 0x45A0, 0x1112, 0x4664, 0x1111, 0x46D3, 0x46FE, 0x1123, 0x1116, 0x46F6, 0x45F6, 0x1C41, 0x1C40, 0x46E7, 0x46E3, 0x468F, 0x442F, 0x23EE, 0x4691, 0x23FB, 0x0D92, 0x23EF, 0x2068, 0x23ED, 0x23F3, 0x23F7, 0x23F1, 0x241B, 0x23F5, 0x0DF7, 0x23F0, 0x2092, 0x23F2, 0x2241, 0x2405, 0x2404, 0x2422, 0x2406, 0x23F4, 0x241A, 0x23F6, 0x2344, 0x1142, 0x1151, 0x1152, 0x1153, 0x1104, 0x1150, 0x23F8, 0x110C, 0x1108, 0x1109, 0x23FA, 0x23F9, 0x1147, 0x110D, 0x1146, 0x110E, 0x205E, 0x2421, 0x1161, 0x241E, 0x2425, 0x1160, 0x2419, 0x2418, 0x2417, 0x114F, 0x2455, 0x1D97, 0x2416, 0x241C, 0x2424, 0x241F, 0x115B, 0x2242, 0x112B, 0x112C, 0x1135, 0x115C, 0x2066, 0x1162, 0x1129, 0x112A, 0x1132, 0x1133, 0x2072, 0x2074, 0x20B8, 0x240A, 0x112F, 0x1130, 0x1157, 0x1163, 0x113A, 0x1131, 0x20BC, 0x115E, 0x113D, 0x115D, 0x113E, 0x20BA, 0x1140, 0x1141, 0x112D, 0x112E, 0x1155, 0x2409, 0x206E, 0x2070, 0x1149, 0x2408, 0x1158, 0x244E, 0x1156, 0x2410, 0x2452, 0x1145, 0x1134, 0x2450, 0x1144, 0x2412, 0x115A, 0x0DF2, 0x2407, 0x240D, 0x1159, 0x2423, 0x1148, 0x1143, 0x1164, 0x0CE8, 0x0D52, 0x1154, 0x1166, 0x1165, 0x1167, 0x2426, 0x1C32, 0x1C31, 0x1C34, 0x1C33, 0x1C36, 0x1C35, 0x1C38, 0x1C37, 0x1C3A, 0x1C39, 0x1C3C, 0x1C3B, 0x242C, 0x1C3D, 0x1C3F, 0x1C3E, 0x2458, 0x2457, 0x0E80, 0x0E81, 0x242D, 0x0E50, 0x0DE3, 0x0DE4, 0x0DD0, 0x0F0B, 0x234B, 0x2454, 0x0F0C, 0x234A, 0x0DC0, 0x2350, 0x1C44, 0x1C42, 0x1C45, 0x0F08, 0x1C49, 0x1C43, 0x1C46, 0x1C47, 0x1C4B, 0x1C4A, 0x1C4D, 0x1C4C, 0x1C4F, 0x1C4E, 0x1C48, 0x1C50, 0x1C53, 0x1C52, 0x0DF9, 0x0DF8, 0x0E1B, 0x0E38, 0x0E36, 0x0DE6, 0x0DD3, 0x2420, 0x2436, 0x0DD5, 0x0DC7, 0x0F8E, 0x0DE5, 0x1C51, 0x2429, 0x0DFB, 0x2AB6, 0x2AB9, 0x1C60, 0x2428, 0x1C63, 0x2A66, 0x0F8D, 0x1C5C, 0x1C5D, 0x1C5E, 0x2AA4, 0x2AA7, 0x1C61, 0x1C62, 0x1C65, 0x1C64, 0x243E, 0x243C, 0x243D, 0x0F06, 0x2443, 0x2441, 0x2ADF, 0x0DFA, 0x2448, 0x243F, 0x2ADE, 0x2446, 0x0E33, 0x0CE5, 0x1C69, 0x1201, 0x0D5E, 0x1C68, 0x2427, 0x1C67, 0x1C66, 0x0D5F, 0x2451, 0x0DC2, 0x0E4F, 0x245B, 0x242E, 0x2430, 0x234F, 0x1C6D, 0x2444, 0x2349, 0x2449, 0x244A, 0x2440, 0x2432, 0x244B, 0x2435, 0x2447, 0x0CE3, 0x0CE6, 0x0D35, 0x4586, 0x0E6E, 0x0DD4, 0x244C, 0x20B7, 0x0CEB, 0x0CF4, 0x2413, 0x0CEA, 0x20C3, 0x0D30, 0x20C5, 0x0CEC, 0x4697, 0x0D75, 0x46A5, 0x0E00, 0x0E21, 0x0DFF, 0x0D66, 0x470A, 0x4619, 0x470A, 0x46C0, 0x0D39, 0x0E40, 0x0D38, 0x0E01, 0x0D6E, 0x0E51, 0x0DD7, 0x0E70, 0x0E52, 0x20D1, 0x0D3E, 0x0DFD, 0x0D74, 0x0D61, 0x0D3F, 0x203B, 0x2ABC, 0x0E71, 0x2333, 0x0D60, 0x2ABF, 0x0E28, 0x2AC2, 0x2342, 0x0E3F, 0x0E02, 0x2346, 0x0D17, 0x2037, 0x2039, 0x44E5, 0x0DDC, 0x205F, 0x20B9, 0x0E03, 0x2384, 0x0E27, 0x4530, 0x206B, 0x2069, 0x0DC8, 0x0DEA, 0x0DCC, 0x2073, 0x2093, 0x0E49, 0x207B, 0x207D, 0x20D6, 0x2081, 0x0DEC, 0x2085, 0x0C77, 0x0CE9, 0x2348, 0x2079, 0x2077, 0x2095, 0x208D, 0x234C, 0x20D9, 0x209F, 0x20D7, 0x20D8, 0x20E1, 0x20A1, 0x234E, 0x2AC5, 0x20AF, 0x2089, 0x2087, 0x20DC, 0x20B3, 0x20B5, 0x20DA, 0x0CA2, 0x2334, 0x2411, 0x2332, 0x4695, 0x4659, 0x44C3, 0x0FFA, 0x242B, 0x20A7, 0x20DE, 0x0D05, 0x0E1E, 0x2091, 0x0DF4, 0x0CAA, 0x208F, 0x20AB, 0x20AD, 0x233C, 0x0D63, 0x0DEE, 0x0DED, 0x20A9, 0x0E37, 0x20BB, 0x0DE7, 0x20BD, 0x20DD, 0x234D, 0x20E0, 0x0FF9, 0x20DB, 0x0FF8, 0x0E5D, 0x0C76, 0x0CA0, 0x0D16, 0x0DCB, 0x0DCA, 0x0E4D, 0x0D15, 0x0F2E, 0x0F2C, 0x0F19, 0x0F2D, 0x0F2F, 0x0D18, 0x0F31, 0x0C89, 0x0F4E, 0x1DE4, 0x0DD9, 0x0F4F, 0x1DDA, 0x0C96, 0x0D72, 0x1E61, 0x0FE0, 0x0D3B, 0x0E85, 0x0FF5, 0x1E0C, 0x0FA2, 0x0FF4, 0x1E07, 0x0F78, 0x0F6C, 0x0F7F, 0x0F80, 0x0FEB, 0x0FF6, 0x0CF3, 0x0CB4, 0x0CF6, 0x1DDF, 0x0CFB, 0x0CF5, 0x0D37, 0x0E1D, 0x0D36, 0x0D33, 0x0E1A, 0x0C95, 0x0D64, 0x0DF6, 0x1DF8, 0x1DD5, 0x0C7F, 0x0D71, 0x0CF2, 0x1EB4, 0x01DF, 0x0D73, 0x1E66, 0x0EBE, 0x0D3D, 0x0D5D, 0x0F59, 0x0EE0, 0x1DEE, 0x0F6B, 0x0D34, 0x0F2A, 0x0F1A, 0x0F76, 0x0E9A, 0x0CB3, 0x0ED8, 0x1DF3, 0x1DE9, 0x0DD2, 0x0F79, 0x0CC1, 0x0D01, 0x0F57, 0x1E20, 0x1E11, 0x0E3C, 0x0E16, 0x1E1B, 0x1DFD, 0x1E02, 0x0C8E, 0x0C8F, 0x1E16, 0x0DDA, 0x0DDD, 0x0D00, 0x0CBD, 0x0DDB, 0x0CB5, 0x457E, 0x0D6F, 0x0C8D, 0x0CBC, 0x0CBE, 0x1E7F, 0x0DCE, 0x1EBB, 0x01C9, 0x0EC7, 0x0CF0, 0x0CB6, 0x1EB3, 0x0C73, 0x0E19, 0x0DEF, 0x0DF0, 0x0EDA, 0x0F73, 0x0F23, 0x0EDB, 0x0F74, 0x0FC0, 0x0EE9, 0x463C, 0x1EB2, 0x454D, 0x44D1, 0x1EBC, 0x0F5F, 0x0FF3, 0x45F8, 0x0D3C, 0x4597, 0x1DA5, 0x445C, 0x0E24, 0x0E23, 0x0CBF, 0x2002, 0x0D03, 0x1DA2, 0x0D02, 0x0D04, 0x1DA4, 0x1E25, 0x1E2A, 0x1E2F, 0x1E34, 0x1E39, 0x1DA9, 0x1E43, 0x1E3E, 0x0CC0, 0x1E5C, 0x2012, 0x1FC4, 0x1C26, 0x2008, 0x1FCD, 0x1E48, 0x2010, 0x1F99, 0x1C25, 0x1F9C, 0x23B4, 0x1F9F, 0x23B6, 0x23B3, 0x23AF, 0x23B0, 0x23B1, 0x0E3A, 0x0E3B, 0x23B5, 0x0E26, 0x1E57, 0x1FCC, 0x0E60, 0x0E73, 0x0E75, 0x2005, 0x0EEA, 0x0E9E, 0x0E9F, 0x0EA0, 0x1DA3, 0x0EEB, 0x0EFE, 0x0EA3, 0x0EFF, 0x0EA1, 0x0EC9, 0x0EA2, 0x0EE6, 0x0EEC, 0x0EE7, 0x0EE8, 0x0ECA, 0x0F3A, 0x0EE5, 0x0ECB, 0x23D4, 0x0F3C, 0x0F3D, 0x23CD, 0x23D5, 0x23D6, 0x23CE, 0x23C8, 0x23D2, 0x23CA, 0x23C9, 0x0F07, 0x23C7, 0x23CC, 0x23CF, 0x23D1, 0x1C27, 0x0FA6, 0x0FA7, 0x0FA8, 0x0FA9, 0x23D0, 0x0005, 0x200B, 0x0FFF, 0x1000, 0x1E6B, 0x0D87, 0x23B8, 0x0FE2, 0x1001, 0x0007, 0x2009, 0x2017, 0x200E, 0x23BE, 0x2016, 0x1E70, 0x23BA, 0x1E52, 0x0C88, 0x0CB8, 0x0CB9, 0x23B7, 0x23CB, 0x1E4D, 0x0CB7, 0x0CBA, 0x23E9, 0x23C0, 0x23EA, 0x23D3, 0x23BF, 0x1C24, 0x23C1, 0x1C14, 0x1D82, 0x1D8B, 0x1D89, 0x1D88, 0x1D8A, 0x1D84, 0x1D83, 0x1C1C, 0x1D8C, 0x1D87, 0x1C15, 0x1D85, 0x1D81, 0x1C13, 0x1D86, 0x0F54, 0x1DAF, 0x1C12, 0x0234, 0x1C16, 0x1C21, 0x1C1E, 0x1C19, 0x1C2E, 0x1FD8, 0x1C2C, 0x1C2D, 0x1C1B, 0x1C30, 0x1FEB, 0x1C1F, 0x1FF3, 0x1DB1, 0x1FA9, 0x23DB, 0x1FD7, 0x1FF7, 0x1FA0, 0x1FA3, 0x1DB0, 0x1C1A, 0x1C1D, 0x1FBC, 0x1C20, 0x1F9E, 0x1C23, 0x1C22, 0x1FFA, 0x2BDA, 0x2BE1, 0x1FD1, 0x1FCA, 0x1FC9, 0x2C9C, 0x1FD4, 0x2C3B, 0x022A, 0x1FEA, 0x1FE5, 0x1FE7, 0x1FE3, 0x1FDC, 0x1FE0, 0x0215, 0x23E2, 0x01F5, 0x2C22, 0x1DBE, 0x021F, 0x022A, 0x23EB, 0x1DBB, 0x0EEE, 0x0209, 0x01DF, 0x1DC0, 0x1DBF, 0x040D, 0x0F0E, 0x0F0D, 0x1DB4, 0x1DB3, 0x1DAE, 0x1DB2, 0x1DB5, 0x1DB6, 0x1DB8, 0x23C5, 0x03DB, 0x0386, 0x1DB9, 0x1DB7, 0x1DBD, 0x1DBC, 0x2C1C, 0x23DA, 0x1DD1, 0x1DA1, 0x23D9, 0x23D8, 0x23EC, 0x1D9F, 0x0499, 0x23C3, 0x23E7, 0x0329, 0x1D9E, 0x23DE, 0x23C4, 0x1D9D, 0x0365, 0x23D7, 0x2BE9, 0x2C0A, 0x1DD2, 0x23E5, 0x23DC, 0x23DD, 0x2C27, 0x2C2C, 0x23E4, 0x2CA3, 0x2CCA, 0x2C03, 0x1DD4, 0x23E8, 0x1DD3, 0x2BEB, 0x1FAB, 0x01C9, 0x2C15, 0x2BEF, 0x1FA6, 0x2BD4, 0x047C, 0x2C0F, 0x1FB5, 0x0209, 0x0D5C, 0x0220, 0x1FC1, 0x1D99, 0x0D6D, 0x1D95, 0x1D9A, 0x1FF0, 0x01A2, 0x0C7A, 0x0483, 0x1D9B, 0x1D9C, 0x0D9F, 0x0D31, 0x01CA, 0x01E0, 0x1D96, 0x01A3, 0x0216, 0x1FC8, 0x0D5B, 0x0E39, 0x1FE6, 0x1FB3, 0x0DFE, 0x1FAE, 0x1FB0, 0x0D85, 0x0777, 0x0D81, 0x0553, 0x0575, 0x05B8, 0x0687, 0x02F8, 0x0457, 0x1D80, 0x1D7F, 0x053C, 0x042B, 0x0411, 0x03F4, 0x04A7, 0x063A, 0x0663, 0x03BC, 0x1D7E, 0x0E4C, 0x1FEF, 0x01F6, 0x050C, 0x0D82, 0x05E6, 0x0235, 0x020A, 0x022B, 0x0199, 0x0DEB, 0x1FE2, 0x0E32, 0x0E2B, 0x0422, 0x0537, 0x0659, 0x1FA5, 0x067E, 0x0EBB, 0x1FD2, 0x0198, 0x1FF5, 0x1FA2, 0x1FFE, 0x01F5, 0x02E6, 0x0215, 0x021F, 0x1FF8, 0x0E7D, 0x05A5, 0x1FD5, 0x0E98, 0x0012, 0x0567, 0x1FA8, 0x1FDD, 0x0E9D, 0x0EC0, 0x0E91, 0x0DA6, 0x1FBF, 0x1FC6, 0x054F, 0x1FBA, 0x1FFF, 0x0D58, 0x0286, 0x02CE, 0x1FB1, 0x1FB4, 0x0E4E, 0x0D62, 0x1FFC, 0x1D7D, 0x0EDC, 0x1FE1, 0x0D70, 0x06B1, 0x0010, 0x0D69, 0x06BD, 0x02A7, 0x0698, 0x0690, 0x025B, 0x0618, 0x02C4, 0x0B7F, 0x05D6, 0x0B79, 0x0B82, 0x06DA, 0x0B86, 0x0006, 0x06D0, 0x0E65, 0x0C62, 0x2CC0, 0x0C6C, 0x2C3E, 0x0B8C, 0x0C9F, 0x0CBB, 0x0B26, 0x2CAE, 0x0B7D, 0x0C72, 0x2CB2, 0x0C8B, 0x2CCD, 0x0B84, 0x0C7D, 0x2C8F, 0x2C92, 0x0B83, 0x2C8C, 0x2C9E, 0x2CB6, 0x2CAA, 0x2CA5, 0x0CAF, 0x2CBA, 0x0B50, 0x0B80, 0x2C98, 0x0CA1, 0x2C4F, 0x0B3B, 0x2C36, 0x2C31, 0x29E2, 0x2C43, 0x29E8, 0x2C4C, 0x2C53, 0x2B47, 0x2B3E, 0x2B3B, 0x2B41, 0x0DF1, 0x0DE2, 0x29EB, 0x2B4A, 0x2B44, 0x0CA9, 0x1C88, 0x0DD8, 0x0DBE, 0x0E1F, 0x0DC9, 0x1C86, 0x0DCF, 0x1CAE, 0x1C78, 0x1C79, 0x1C77, 0x0E17, 0x0E18, 0x0E11, 0x0DA5, 0x2A9D, 0x0B52, 0x21A4, 0x2AC1, 0x2AB8, 0x2AD0, 0x2ACD, 0x219D, 0x2AA3, 0x2AA6, 0x2AB2, 0x2AA0, 0x0B41, 0x2ACA, 0x2AA9, 0x2AAC, 0x0B2F, 0x0B2C, 0x0B44, 0x0B38, 0x0B3E, 0x1C87, 0x219C, 0x2AC4, 0x0014, 0x1C89, 0x2AAF, 0x1CAF, 0x1C8C, 0x2AD9, 0x1CAA, 0x1C8A, 0x0D86, 0x0D6C, 0x1C8B, 0x0F9D, 0x0FBE, 0x2171, 0x0FA4, 0x4242, 0x4243, 0x4244, 0x0F72, 0x0B3D, 0x4247, 0x4248, 0x4246, 0x424A, 0x424B, 0x424C, 0x424D, 0x1C7D, 0x0FBF, 0x0FE1, 0x0B28, 0x1C76, 0x0B31, 0x0B2E, 0x0B46, 0x17BC, 0x0FA3, 0x0FA5, 0x000C, 0x0018, 0x022A, 0x0B23, 0x17C9, 0x17C2, 0x17C0, 0x0B40, 0x01C9, 0x01A2, 0x0B14, 0x01DF, 0x0B1A, 0x0B17, 0x17C3, 0x0198, 0x021F, 0x0234, 0x0B43, 0x17BE, 0x0B29, 0x0B11, 0x17BD, 0x0215, 0x17C1, 0x1C7E, 0x1C7B, 0x35AF, 0x0209, 0x0B25, 0x0B2B, 0x1C7C, 0x1C7A, 0x35C0, 0x1C7F, 0x1C81, 0x3598, 0x1C80, 0x1C83, 0x3599, 0x359C, 0x01F5, 0x1EE5, 0x3597, 0x35BA, 0x35CA, 0x1ECC, 0x3550, 0x35D0, 0x1C82, 0x3596, 0x359B, 0x35C6, 0x1ECE, 0x1EEA, 0x1C84, 0x1C85, 0x359D, 0x35C9, 0x1ED0, 0x35B4, 0x1ED1, 0x0B35, 0x35B2, 0x35B3, 0x35B5, 0x359E, 0x354E, 0x1ED6, 0x1ECF, 0x35A3, 0x359A, 0x1CAB, 0x1EDA, 0x1ED3, 0x35A1, 0x35A0, 0x35A2, 0x0B20, 0x359F, 0x35A4, 0x35A5, 0x1ED4, 0x1ED5, 0x35B8, 0x35B9, 0x1EF9, 0x35D3, 0x0B1D, 0x1ECB, 0x35B7, 0x35D4, 0x1ECD, 0x1EFE, 0x35D2, 0x35D5, 0x1ED2, 0x35B6, 0x1EE8, 0x1CAD, 0x35CC, 0x1EE7, 0x0B3A, 0x35CB, 0x354F, 0x1EDD, 0x1EDC, 0x1EDE, 0x0B32, 0x1EDB, 0x1EE0, 0x1EE1, 0x1CAC, 0x1EE3, 0x1EE4, 0x35C7, 0x35C8, 0x1EE6, 0x1EDF, 0x1EE9, 0x1EE2, 0x35CD, 0x35CE, 0x35CF, 0x35D1, 0x1CEE, 0x1CF0, 0x1D0F, 0x1D12, 0x1CFC, 0x3559, 0x1D08, 0x3328, 0x1D0A, 0x1D0C, 0x00EA, 0x3321, 0x1C28, 0x1C29, 0x3557, 0x00EC, 0x1D1E, 0x1D21, 0x1C2A, 0x1C2B, 0x1D2B, 0x1C2F, 0x01C9, 0x1D30, 0x3551, 0x00E9, 0x1D39, 0x1D3C, 0x331F, 0x021F, 0x01A2, 0x1D4A, 0x1D4B, 0x1D4C, 0x1D49, 0x00E5, 0x1D4D, 0x1D48, 0x1D41, 0x1D52, 0x1ED9, 0x1ED8, 0x1D55, 0x1D53, 0x1F65, 0x01DF, 0x07DB, 0x1F66, 0x07C8, 0x07E1, 0x3300, 0x3301, 0x3302, 0x07DE, 0x07DC, 0x07DA, 0x1ED7, 0x07DF, 0x00EB, 0x1D3A, 0x01F5, 0x1EEE, 0x01C9, 0x01DF, 0x0209, 0x1EEC, 0x1EED, 0x1EF3, 0x1EF6, 0x0234, 0x1EEB, 0x022A, 0x1EFC, 0x1EF7, 0x1EF1, 0x1EF0, 0x1D36, 0x3603, 0x1D4E, 0x1D4F, 0x1D50, 0x1D51, 0x1EFF, 0x1EF5, 0x1EFD, 0x1EF2, 0x1CFD, 0x1EEF, 0x1D43, 0x35AA, 0x1CEF, 0x355B, 0x1D01, 0x3326, 0x3558, 0x331E, 0x35B1, 0x1D38, 0x3555, 0x1D47, 0x35B0, 0x1EF4, 0x1EFA, 0x1EF8, 0x35AE, 0x1EFB, 0x1D13, 0x1D45, 0x1D46, 0x1CF1, 0x1D24, 0x35FA, 0x1CE4, 0x1CE6, 0x1D29, 0x1CE8, 0x07DD, 0x1D04, 0x1CFA, 0x1D19, 0x1D1F, 0x1D23, 0x35FE, 0x3604, 0x3605, 0x3541, 0x331D, 0x3329, 0x3601, 0x3600, 0x079C, 0x331C, 0x35FF, 0x008B, 0x353E, 0x3540, 0x0794, 0x07AF, 0x008E, 0x07B7, 0x0099, 0x0092, 0x07B4, 0x355A, 0x0094, 0x353F, 0x355C, 0x07AC, 0x0093, 0x00D0, 0x00CF, 0x3544, 0x008C, 0x3556, 0x00C6, 0x0095, 0x1E7A, 0x1E84, 0x1E8E, 0x1E75, 0x1E93, 0x00D1, 0x0796, 0x1E98, 0x1E89, 0x1EA2, 0x1EA7, 0x079B, 0x1E9D, 0x3543, 0x00CC, 0x0793, 0x3545, 0x0798, 0x0097, 0x07A0, 0x1EBE, 0x1EBD, 0x1EB1, 0x1EBF, 0x1EBA, 0x1EB6, 0x1EC0, 0x1EAC, 0x1EB7, 0x1EB5, 0x1EB9, 0x1EB8, 0x1EC1, 0x0098, 0x1EC3, 0x1EC4, 0x1EC5, 0x1EC2, 0x1EC7, 0x1EC8, 0x1EC9, 0x1ECA, 0x0840, 0x0807, 0x00CD, 0x1EC6, 0x0854, 0x00CB, 0x0198, 0x01A2, 0x0845, 0x0843, 0x01F5, 0x0209, 0x0215, 0x021F, 0x022A, 0x0234, 0x01A2, 0x0841, 0x083F, 0x0844, 0x0842, 0x0846, 0x0804, 0x0809, 0x0B4D, 0x0B53, 0x0B56, 0x0808, 0x0805, 0x080E, 0x0806, 0x0811, 0x0B68, 0x0B6B, 0x07AD, 0x07B5, 0x07B1, 0x07B9, 0x17BF, 0x0776, 0x0810, 0x0813, 0x0B77, 0x0812, 0x080F, 0x0740, 0x0B87, 0x0B88, 0x0B89, 0x0852, 0x0853, 0x0855, 0x0B8D, 0x0B8E, 0x1BB8, 0x1BB7, 0x219E, 0x1BBC, 0x21A0, 0x1BBB, 0x1BBE, 0x2143, 0x1BC0, 0x1BBF, 0x1BC5, 0x1BC4, 0x1BC7, 0x1BC6, 0x1BC9, 0x1BC8, 0x0730, 0x0738, 0x0731, 0x00DA, 0x0198, 0x0739, 0x1BBD, 0x073D, 0x0756, 0x07C7, 0x07CA, 0x07CC, 0x0758, 0x0753, 0x0735, 0x074B, 0x1BDB, 0x1BDA, 0x1BDD, 0x1BDC, 0x2142, 0x2188, 0x0754, 0x2170, 0x07CB, 0x35C3, 0x35BF, 0x216C, 0x0750, 0x074E, 0x35BD, 0x35BC, 0x21B9, 0x21BA, 0x21BB, 0x21BC, 0x21BD, 0x21BE, 0x21BF, 0x21C0, 0x35C1, 0x07C9, 0x07CD, 0x21C4, 0x0899, 0x074C, 0x35BB, 0x079E, 0x07D1, 0x0198, 0x01DF, 0x01C9, 0x201B, 0x01A2, 0x201A, 0x0215, 0x0209, 0x07D6, 0x35D9, 0x35F3, 0x35D6, 0x201C, 0x1BC3, 0x1BC2, 0x01A2, 0x0198, 0x01DF, 0x01C9, 0x0209, 0x01F5, 0x021F, 0x0215, 0x0234, 0x022A, 0x2019, 0x2018, 0x35EF, 0x35F4, 0x201D, 0x35EA, 0x35F5, 0x35EE, 0x07A9, 0x35F2, 0x021F, 0x35D8, 0x01F5, 0x35F0, 0x35F1, 0x35D7, 0x35DC, 0x35DB, 0x12F1, 0x35DD, 0x12F1, 0x12F1, 0x202F, 0x202E, 0x0209, 0x07D2, 0x12F1, 0x12F1, 0x2035, 0x2034, 0x0215, 0x07E6, 0x07E3, 0x07E4, 0x0815, 0x0814, 0x07A6, 0x07E0, 0x21D2, 0x21D7, 0x21B8, 0x1BCF, 0x21AD, 0x0544, 0x21AC, 0x21AF, 0x21B1, 0x0586, 0x21B3, 0x21B2, 0x21B5, 0x02B6, 0x0296, 0x21B6, 0x21D6, 0x1BCB, 0x1BD1, 0x042F, 0x0488, 0x21D5, 0x1BCC, 0x21D8, 0x12F1, 0x069D, 0x21C3, 0x21C6, 0x21C5, 0x1BCA, 0x21C7, 0x1BCD, 0x1BCE, 0x21CA, 0x1BB9, 0x21CC, 0x1BD0, 0x21C9, 0x21CB, 0x2204, 0x082B, 0x21D1, 0x21FA, 0x21D3, 0x38ED, 0x066D, 0x06E0, 0x32E2, 0x1BD4, 0x21D4, 0x21E1, 0x09CC, 0x21E5, 0x21E6, 0x1BD5, 0x092A, 0x21CE, 0x21DC, 0x32EB, 0x21E3, 0x2200, 0x21E2, 0x21D0, 0x21E8, 0x32ED, 0x09E3, 0x32F1, 0x1BBA, 0x32F9, 0x32E6, 0x32E7, 0x32E8, 0x32E9, 0x093B, 0x32EE, 0x2203, 0x32EC, 0x1BD7, 0x1BD9, 0x32F4, 0x0A59, 0x390F, 0x3910, 0x1BD8, 0x3912, 0x3913, 0x3914, 0x3915, 0x3916, 0x1BD3, 0x1BD2, 0x32F0, 0x32EF, 0x32F2, 0x09EA, 0x0A4C, 0x21FB, 0x32FD, 0x3318, 0x32F5, 0x32FE, 0x09EA, 0x32EA, 0x32FB, 0x32FC, 0x3317, 0x330C, 0x3319, 0x331A, 0x3311, 0x3310, 0x3312, 0x04AE, 0x3313, 0x0582, 0x0A05, 0x05BE, 0x05EF, 0x06DF, 0x03A0, 0x21FC, 0x12F0, 0x330E, 0x0405, 0x1BD6, 0x330B, 0x32F3, 0x330D, 0x2214, 0x21F6, 0x227C, 0x220F, 0x039C, 0x227B, 0x21F7, 0x2264, 0x227A, 0x32DF, 0x32DE, 0x32E1, 0x32E0, 0x32E3, 0x21F1, 0x32E5, 0x32E4, 0x2217, 0x0304, 0x2210, 0x220D, 0x2234, 0x225B, 0x05C8, 0x2212, 0x2211, 0x225C, 0x2213, 0x2225, 0x2226, 0x2218, 0x2216, 0x221E, 0x32F7, 0x32F6, 0x2232, 0x32F8, 0x2238, 0x32FA, 0x2237, 0x220B, 0x220A, 0x2228, 0x2224, 0x2209, 0x220C, 0x32FF, 0x2227, 0x221A, 0x3304, 0x3303, 0x3306, 0x3305, 0x3308, 0x3307, 0x330A, 0x3309, 0x2236, 0x221F, 0x221D, 0x2222, 0x2221, 0x330F, 0x2223, 0x0378, 0x3314, 0x04B5, 0x3316, 0x3315, 0x2208, 0x063D, 0x2219, 0x2235, 0x2207, 0x331B, 0x063F, 0x02B2, 0x046E, 0x0640, 0x3322, 0x2220, 0x3324, 0x3323, 0x225E, 0x3325, 0x225F, 0x2260, 0x332A, 0x225D, 0x221C, 0x332B, 0x0584, 0x221B, 0x057F, 0x053E, 0x0651, 0x2258, 0x2252, 0x21F4, 0x21EC, 0x2251, 0x225A, 0x21EA, 0x226C, 0x21ED, 0x226A, 0x21F3, 0x2253, 0x2259, 0x21EE, 0x21EF, 0x21F0, 0x2255, 0x05BF, 0x2205, 0x21F8, 0x2206, 0x2256, 0x2257, 0x2935, 0x2261, 0x2268, 0x293A, 0x2939, 0x293C, 0x293B, 0x293E, 0x293D, 0x2940, 0x293F, 0x034C, 0x2201, 0x213C, 0x2202, 0x029F, 0x0309, 0x0297, 0x3911, 0x0523, 0x042E, 0x0293, 0x0354, 0x0406, 0x0298, 0x22BA, 0x22BB, 0x22BC, 0x0415, 0x213B, 0x22BF, 0x22C6, 0x22BE, 0x22C8, 0x22C9, 0x22CA, 0x22CB, 0x38E7, 0x0358, 0x38E6, 0x38E8, 0x0AFB, 0x06EF, 0x0460, 0x38D0, 0x06F2, 0x38E9, 0x0512, 0x0486, 0x035E, 0x0402, 0x38CE, 0x38CF, 0x02D1, 0x06DC, 0x04AD, 0x0347, 0x38D4, 0x035D, 0x38CD, 0x3362, 0x38D2, 0x38D3, 0x066A, 0x3360, 0x3904, 0x38E5, 0x086C, 0x0543, 0x38EE, 0x3906, 0x38EA, 0x38FF, 0x2269, 0x226E, 0x226B, 0x2294, 0x226D, 0x21EB, 0x226F, 0x2270, 0x05CB, 0x2139, 0x213F, 0x2274, 0x2295, 0x2296, 0x3365, 0x3355, 0x2279, 0x227E, 0x21FF, 0x2284, 0x227F, 0x227D, 0x213A, 0x2280, 0x335F, 0x2144, 0x2283, 0x3361, 0x2285, 0x2286, 0x2287, 0x335B, 0x0689, 0x21E9, 0x21FE, 0x228C, 0x0720, 0x0721, 0x076A, 0x07F5, 0x2298, 0x2291, 0x2292, 0x2293, 0x22D7, 0x0648, 0x09A1, 0x2297, 0x2290, 0x2289, 0x228A, 0x228B, 0x21FD, 0x228D, 0x228E, 0x228F, 0x22A1, 0x22A2, 0x22A3, 0x0AFD, 0x22A7, 0x22A5, 0x081C, 0x22A8, 0x38EC, 0x3903, 0x3907, 0x3347, 0x3905, 0x3364, 0x3908, 0x3909, 0x390A, 0x2021, 0x2963, 0x2025, 0x2964, 0x1BC1, 0x2169, 0x2962, 0x2026, 0x202C, 0x29B7, 0x2020, 0x0889, 0x2976, 0x2933, 0x2934, 0x298F, 0x0891, 0x2027, 0x084D, 0x201E, 0x2990, 0x29B1, 0x29AF, 0x2031, 0x2028, 0x29B9, 0x29C5, 0x29BD, 0x29BB, 0x29C1, 0x29BF, 0x213E, 0x29C3, 0x29C9, 0x29C7, 0x29CD, 0x29CB, 0x201F, 0x2140, 0x29D5, 0x29D3, 0x29D9, 0x29D7, 0x2998, 0x2996, 0x299C, 0x299A, 0x29A0, 0x299E, 0x29A4, 0x2032, 0x29A8, 0x29A6, 0x29AC, 0x29AA, 0x2974, 0x2033, 0x298D, 0x088D, 0x29B8, 0x29B6, 0x29AE, 0x0215, 0x29B0, 0x38E3, 0x0B07, 0x00DE, 0x2186, 0x29A2, 0x29CC, 0x29CA, 0x38E4, 0x213D, 0x29D4, 0x29D2, 0x29D8, 0x29D6, 0x337F, 0x3380, 0x38E2, 0x38DD, 0x28D2, 0x38E0, 0x07D7, 0x294E, 0x07D5, 0x38DF, 0x38DE, 0x2030, 0x0B08, 0x0198, 0x38E1, 0x01C9, 0x0B0A, 0x2989, 0x2187, 0x01DF, 0x0234, 0x022A, 0x021F, 0x0B04, 0x0B00, 0x0B02, 0x0AFE, 0x0AFF, 0x0234, 0x0B05, 0x2141, 0x00DC, 0x0B03, 0x022A, 0x0B06, 0x01F5, 0x0234, 0x00DB, 0x022A, 0x07E2, 0x07CE, 0x00DF, 0x00E0, 0x0B09, 0x0677, 0x0681, 0x01A2, 0x00DD, 0x0215, 0x079F, 0x079A, 0x07A2, 0x073A, 0x07B8, 0x07A1, 0x079D, 0x0799, 0x0736, 0x0732, 0x074F, 0x2954, 0x296A, 0x2967, 0x0797, 0x2966, 0x0759, 0x06AA, 0x067A, 0x0757, 0x0266, 0x05C4, 0x05C3, 0x030E, 0x05BA, 0x2953, 0x2965, 0x295E, 0x2952, 0x087C, 0x295D, 0x074D, 0x0746, 0x296D, 0x075A, 0x2968, 0x2961, 0x0752, 0x296E, 0x0755, 0x0751, 0x087D, 0x0893, 0x0747, 0x2981, 0x2984, 0x0748, 0x2931, 0x0874, 0x0743, 0x2936, 0x29CF, 0x0795, 0x0744, 0x0872, 0x087A, 0x298E, 0x084C, 0x2986, 0x0898, 0x07D4, 0x2982, 0x0883, 0x296F, 0x2999, 0x299B, 0x299D, 0x2997, 0x2969, 0x29A3, 0x296C, 0x2970, 0x0882, 0x296B, 0x29D1, 0x2951, 0x29C8, 0x2932, 0x295B, 0x29C6, 0x2957, 0x299F, 0x29C4, 0x295C, 0x2959, 0x29A5, 0x2956, 0x29BA, 0x29A9, 0x0875, 0x29AD, 0x2955, 0x0870, 0x29BE, 0x0878, 0x29A1, 0x220E, 0x0896, 0x075F, 0x088B, 0x29A7, 0x29AB, 0x295F, 0x075C, 0x29B5, 0x29B3, 0x075D, 0x2938, 0x29B4, 0x088E, 0x075B, 0x0745, 0x0741, 0x298B, 0x0895, 0x075E, 0x29BC, 0x2215, 0x29C0, 0x29B2, 0x07C6, 0x021F, 0x298A, 0x34C4, 0x2987, 0x2983, 0x2992, 0x2985, 0x2172, 0x2173, 0x2988, 0x294D, 0x2991, 0x298C, 0x06D9, 0x2995, 0x0682, 0x067C, 0x2937, 0x06CF, 0x2185, 0x34C6, 0x067B, 0x06D8, 0x34C8, 0x34C2, 0x067D, 0x026F, 0x34AC, 0x068F, 0x34AE, 0x0697, 0x34C3, 0x34AD, 0x0696, 0x04C3, 0x0244, 0x0684, 0x068E, 0x0685, 0x027F, 0x0686, 0x34AA, 0x34AB, 0x0343, 0x34B5, 0x0254, 0x06B9, 0x06AD, 0x34B1, 0x34AF, 0x0336, 0x0249, 0x05CF, 0x0330, 0x0314, 0x34B0, 0x0344, 0x0325, 0x033E, 0x34D4, 0x34D5, 0x031A, 0x0341, 0x34D8, 0x34D3, 0x34CC, 0x34D2, 0x34D6, 0x34D7, 0x34D9, 0x34C7, 0x34DD, 0x34C9, 0x34F2, 0x050B, 0x0333, 0x34F3, 0x0327, 0x0508, 0x04DE, 0x34F9, 0x34B2, 0x03B0, 0x34B4, 0x34B3, 0x34B6, 0x34B7, 0x34B8, 0x34B9, 0x05A9, 0x0505, 0x34FD, 0x34F5, 0x04E1, 0x34CE, 0x34F4, 0x202A, 0x0257, 0x0282, 0x026C, 0x202B, 0x0246, 0x0272, 0x0247, 0x0273, 0x34CA, 0x34CD, 0x0248, 0x0271, 0x036F, 0x0274, 0x0241, 0x34CB, 0x0242, 0x026D, 0x34D1, 0x026E, 0x0243, 0x0283, 0x0258, 0x0284, 0x0364, 0x34CF, 0x0322, 0x04DC, 0x0259, 0x34DF, 0x34D0, 0x34F8, 0x34DA, 0x02AA, 0x34DC, 0x34DB, 0x34DE, 0x0285, 0x34E0, 0x34E1, 0x02C3, 0x34A9, 0x348E, 0x02E3, 0x3490, 0x02E0, 0x02A4, 0x3492, 0x025A, 0x34A4, 0x34A6, 0x0339, 0x031D, 0x02A6, 0x3497, 0x02AB, 0x34BB, 0x34BA, 0x34BD, 0x34BC, 0x34BF, 0x34BE, 0x34C1, 0x34C0, 0x34A0, 0x34A8, 0x34C5, 0x34A7, 0x06CE, 0x34A1, 0x34A2, 0x34A5, 0x348C, 0x02F2, 0x03AB, 0x348F, 0x0234, 0x219F, 0x02E5, 0x0453, 0x0454, 0x0455, 0x0420, 0x02F5, 0x0479, 0x0480, 0x0429, 0x02CD, 0x0442, 0x348D, 0x20E7, 0x33AA, 0x0443, 0x02F7, 0x20EF, 0x3493, 0x20ED, 0x20E5, 0x20E3, 0x20E9, 0x20EB, 0x3491, 0x03EA, 0x20F1, 0x0496, 0x03B8, 0x33B8, 0x01A2, 0x03DA, 0x3499, 0x0215, 0x33B6, 0x349A, 0x3495, 0x3496, 0x3494, 0x349B, 0x3498, 0x021F, 0x0572, 0x0560, 0x2129, 0x2127, 0x03F3, 0x0500, 0x0209, 0x20E2, 0x0385, 0x0391, 0x0678, 0x03B7, 0x03AE, 0x03BA, 0x03AA, 0x03B6, 0x073F, 0x33B2, 0x0737, 0x073E, 0x03BB, 0x03AC, 0x01DF, 0x01C9, 0x0426, 0x041D, 0x20FB, 0x0421, 0x0441, 0x0452, 0x06D5, 0x06CB, 0x04CC, 0x0198, 0x0444, 0x2123, 0x042A, 0x0566, 0x03AF, 0x03D2, 0x2103, 0x20F5, 0x20F3, 0x20F9, 0x20F7, 0x20FD, 0x33B4, 0x2101, 0x20FF, 0x01A1, 0x006C, 0x3386, 0x3384, 0x301F, 0x3019, 0x3027, 0x3020, 0x3021, 0x28E7, 0x28E2, 0x28E3, 0x28E4, 0x2975, 0x2971, 0x28E6, 0x28E8, 0x28E1, 0x297B, 0x28EA, 0x297C, 0x297E, 0x28EB, 0x022A, 0x28EC, 0x297D, 0x28DE, 0x3022, 0x3028, 0x28EE, 0x006A, 0x304F, 0x28ED, 0x3050, 0x349D, 0x28D4, 0x0215, 0x02DA, 0x304A, 0x304B, 0x304C, 0x3025, 0x3026, 0x301D, 0x301E, 0x3041, 0x3042, 0x3046, 0x3044, 0x349F, 0x28D8, 0x3047, 0x28D3, 0x28D1, 0x33BE, 0x33BC, 0x28EF, 0x29C2, 0x3045, 0x2973, 0x28E5, 0x28F0, 0x33C0, 0x29CE, 0x29D0, 0x305D, 0x308E, 0x28E9, 0x308B, 0x305A, 0x349E, 0x3059, 0x2972, 0x305E, 0x28D6, 0x305F, 0x3060, 0x3061, 0x3062, 0x306B, 0x306C, 0x3088, 0x3066, 0x3065, 0x3068, 0x302C, 0x01F5, 0x01F5, 0x0209, 0x308F, 0x308C, 0x302B, 0x3087, 0x3033, 0x3032, 0x3034, 0x3035, 0x3031, 0x3036, 0x3038, 0x34A3, 0x33E5, 0x3081, 0x303B, 0x33EA, 0x019F, 0x33EC, 0x33EB, 0x33ED, 0x0227, 0x33EF, 0x023B, 0x0232, 0x3090, 0x3083, 0x0206, 0x0211, 0x021D, 0x349C, 0x01DC, 0x304D, 0x01F1, 0x304E, 0x0228, 0x01BE, 0x01A0, 0x2F93, 0x0212, 0x0207, 0x0233, 0x023C, 0x2F92, 0x2FEE, 0x2F9C, 0x021E, 0x03FB, 0x03FB, 0x044C, 0x045C, 0x2FEF, 0x04AB, 0x2FA9, 0x2FA2, 0x2FA7, 0x2FBB, 0x2FBA, 0x0578, 0x2FD8, 0x2FF0, 0x2F9B, 0x2F2A, 0x2FAF, 0x2FAC, 0x2DA9, 0x2DAA, 0x02DB, 0x2FB0, 0x3071, 0x3072, 0x3075, 0x2DE5, 0x3077, 0x3076, 0x3078, 0x2DE7, 0x307B, 0x307C, 0x2FD7, 0x3002, 0x307D, 0x307E, 0x2DE8, 0x3080, 0x2FC1, 0x2FC2, 0x2FB2, 0x2FB4, 0x2FC5, 0x2FC6, 0x2FBC, 0x3003, 0x2F29, 0x2FC9, 0x2FCB, 0x2FCC, 0x2FCD, 0x2FCE, 0x2FCF, 0x2FD0, 0x2DE1, 0x2DE2, 0x30FB, 0x2DE3, 0x2DE4, 0x2DBD, 0x3073, 0x3074, 0x30D9, 0x30DA, 0x30DD, 0x30DE, 0x2DBE, 0x2DBF, 0x2DC0, 0x30DF, 0x2DB9, 0x2FE3, 0x3004, 0x2FE6, 0x2FE7, 0x0069, 0x0068, 0x2FE8, 0x2DBA, 0x2FE2, 0x2FEC, 0x2DB8, 0x3089, 0x308A, 0x0067, 0x2DCB, 0x3109, 0x310A, 0x30F3, 0x30F4, 0x3106, 0x2FEB, 0x30F8, 0x3105, 0x308D, 0x30F2, 0x30F1, 0x310B, 0x30FD, 0x30FE, 0x2DC5, 0x30FC, 0x310D, 0x3107, 0x30F7, 0x30F6, 0x310F, 0x310E, 0x3108, 0x2E80, 0x3110, 0x006B, 0x3103, 0x3104, 0x3101, 0x3102, 0x30F5, 0x310C, 0x2DC6, 0x2DC1, 0x2DC2, 0x2DC3, 0x2DC4, 0x2DA0, 0x2D9A, 0x2D9C, 0x2D95, 0x2D93, 0x2DB0, 0x2E79, 0x28DF, 0x2E7B, 0x2E7C, 0x28DA, 0x28D5, 0x2E71, 0x28D7, 0x2E72, 0x2E5F, 0x28DB, 0x2E5B, 0x28DC, 0x2E5C, 0x2E55, 0x2E56, 0x28E0, 0x2E52, 0x2E6F, 0x2E6B, 0x2E6C, 0x2E65, 0x2E66, 0x2E67, 0x2E68, 0x2E61, 0x2E62, 0x2E63, 0x30D7, 0x2E64, 0x30D6, 0x30D5, 0x2E3D, 0x2E3E, 0x2E3F, 0x2E40, 0x2E39, 0x2E3A, 0x2E1B, 0x2E1C, 0x2E15, 0x2E16, 0x2E17, 0x2E18, 0x2E11, 0x2E12, 0x2E13, 0x2E14, 0x30DB, 0x2E2D, 0x2E2E, 0x2E2F, 0x2E30, 0x2E29, 0x2E2A, 0x2E2B, 0x2E2C, 0x2E25, 0x2E26, 0x2E27, 0x2E28, 0x36DE, 0x36DF, 0x36E0, 0x2E21, 0x36D9, 0x2E22, 0x36DA, 0x2E23, 0x2E24, 0x2EFD, 0x2EFE, 0x2EFF, 0x2F00, 0x2EF9, 0x2EFA, 0x2EFB, 0x2EFC, 0x2EF7, 0x28D9, 0x2EF8, 0x2EF1, 0x2EF2, 0x2EF3, 0x2EF4, 0x2F0D, 0x2F0E, 0x2F0F, 0x2F10, 0x2F09, 0x2F0A, 0x2F0C, 0x2F05, 0x2EEB, 0x2EEC, 0x2EE5, 0x2EE6, 0x2EE7, 0x2EE8, 0x2EE1, 0x2EE2, 0x2EE3, 0x2EBD, 0x2EBE, 0x3702, 0x0DAE, 0x0DAF, 0x3703, 0x0D99, 0x0DA7, 0x0DAA, 0x0DAB, 0x0DB7, 0x0E0B, 0x30D8, 0x0D7B, 0x0D7C, 0x0F99, 0x0F9A, 0x0F44, 0x3713, 0x0DB6, 0x0F14, 0x3712, 0x0F64, 0x0F65, 0x0F98, 0x0EB5, 0x30DC, 0x290C, 0x0EB6, 0x0F10, 0x0F13, 0x0D7E, 0x290B, 0x28FD, 0x372E, 0x28DD, 0x28FC, 0x372F, 0x28FA, 0x3725, 0x3730, 0x2900, 0x28FE, 0x372C, 0x2906, 0x3729, 0x2905, 0x2908, 0x372B, 0x372A, 0x0E0D, 0x0E0E, 0x0EF5, 0x0FD9, 0x0FDA, 0x101D, 0x101E, 0x2907, 0x0C70, 0x1013, 0x28F4, 0x1014, 0x1015, 0x0E0C, 0x2902, 0x0DB8, 0x2901, 0x28F1, 0x28F2, 0x0D7D, 0x0C6F, 0x102B, 0x1032, 0x28F3, 0x28F8, 0x28F6, 0x103B, 0x0E0A, 0x0E8B, 0x0E8C, 0x290D, 0x0E8D, 0x0D7A, 0x28F7, 0x2904, 0x0D9B, 0x0D9C, 0x290E, 0x2903, 0x0DB5, 0x0CD5, 0x0CD6, 0x0CD8, 0x0D79, 0x0CD1, 0x0CD2, 0x2914, 0x0CD3, 0x0CD4, 0x1040, 0x1021, 0x1024, 0x1027, 0x30D3, 0x30D4, 0x103C, 0x103D, 0x103E, 0x103F, 0x30D1, 0x30D2, 0x30E0, 0x1037, 0x1038, 0x1039, 0x103A, 0x2924, 0x1033, 0x1034, 0x1035, 0x1036, 0x102E, 0x292E, 0x102F, 0x1030, 0x1031, 0x1029, 0x292F, 0x102A, 0x102C, 0x2930, 0x102D, 0x1023, 0x1026, 0x1025, 0x2925, 0x2926, 0x1028, 0x101F, 0x1020, 0x1022, 0x2923, 0x108E, 0x2927, 0x292B, 0x1090, 0x2928, 0x2909, 0x290A, 0x1093, 0x292C, 0x30EC, 0x109E, 0x290F, 0x2910, 0x109F, 0x10A0, 0x30EB, 0x10A1, 0x109A, 0x30E5, 0x109B, 0x109C, 0x109D, 0x1083, 0x30E7, 0x30E6, 0x30E1, 0x1084, 0x1085, 0x1086, 0x022A, 0x0234, 0x1081, 0x1082, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x1096, 0x1097, 0x1098, 0x1099, 0x1091, 0x1092, 0x1094, 0x1095, 0x108B, 0x108C, 0x108D, 0x108F, 0x1087, 0x1088, 0x1089, 0x108A, 0x30EA, 0x1073, 0x30E9, 0x1068, 0x106F, 0x1070, 0x1065, 0x1066, 0x1080, 0x106D, 0x1071, 0x1072, 0x1074, 0x30EE, 0x30EF, 0x30ED, 0x1067, 0x1069, 0x106A, 0x106B, 0x1061, 0x1062, 0x1063, 0x1064, 0x105A, 0x105D, 0x105E, 0x105F, 0x1060, 0x1076, 0x1077, 0x1078, 0x106E, 0x105B, 0x105C, 0x106C, 0x30E2, 0x107C, 0x107D, 0x107E, 0x107F, 0x1075, 0x1079, 0x107A, 0x107B, 0x0A7A, 0x0A79, 0x0A7C, 0x0A7B, 0x0A76, 0x0A75, 0x0A72, 0x0A71, 0x0A6C, 0x0A6B, 0x0A6E, 0x0A6D, 0x0A1A, 0x0A19, 0x0A5A, 0x0A58, 0x0A20, 0x0A1F, 0x0A1C, 0x0A1B, 0x0A08, 0x0A07, 0x0A22, 0x0A21, 0x0A83, 0x0A81, 0x0A84, 0x30BF, 0x0A82, 0x30C0, 0x3767, 0x3766, 0x3769, 0x3768, 0x30E8, 0x3094, 0x0A7E, 0x0A7D, 0x3098, 0x376C, 0x376F, 0x376D, 0x3771, 0x0A80, 0x3772, 0x3770, 0x0A7F, 0x3096, 0x30BE, 0x3097, 0x3095, 0x30AD, 0x30AE, 0x30AF, 0x377C, 0x377B, 0x30B0, 0x377D, 0x3780, 0x377F, 0x3782, 0x3781, 0x3784, 0x3783, 0x3786, 0x3785, 0x0A54, 0x0A5D, 0x378A, 0x0A61, 0x378C, 0x378B, 0x0A67, 0x378D, 0x3790, 0x378F, 0x30C6, 0x3791, 0x3796, 0x3793, 0x0A43, 0x3795, 0x3798, 0x3797, 0x3799, 0x0A47, 0x30C4, 0x379A, 0x0A4B, 0x0A50, 0x0A09, 0x379B, 0x379C, 0x0A0B, 0x0A23, 0x0A2D, 0x09DC, 0x09E2, 0x09E9, 0x09F6, 0x098E, 0x0978, 0x09F7, 0x0A41, 0x0989, 0x09AA, 0x09C6, 0x09F4, 0x0951, 0x30C5, 0x096B, 0x3868, 0x0981, 0x386A, 0x386D, 0x386C, 0x30E4, 0x0982, 0x094A, 0x094C, 0x00FE, 0x0941, 0x092D, 0x0A55, 0x0A5F, 0x0A62, 0x30BD, 0x30E3, 0x3093, 0x0A68, 0x0A44, 0x3091, 0x3092, 0x309B, 0x309C, 0x30B9, 0x30BA, 0x0A48, 0x0A4D, 0x0A52, 0x0A0A, 0x0A0C, 0x0A24, 0x0A2F, 0x09DD, 0x30F0, 0x09E4, 0x09EB, 0x09FB, 0x09B2, 0x09B8, 0x09CA, 0x09D4, 0x0977, 0x0987, 0x3153, 0x3154, 0x3113, 0x3188, 0x3152, 0x098D, 0x3157, 0x3158, 0x313E, 0x311C, 0x3189, 0x099F, 0x0CA8, 0x313F, 0x0D80, 0x0D2C, 0x0FBD, 0x318A, 0x0D57, 0x0DA4, 0x316D, 0x316E, 0x3151, 0x3156, 0x3129, 0x312A, 0x093A, 0x316F, 0x0C9E, 0x3170, 0x312F, 0x3130, 0x2577, 0x0DE1, 0x0949, 0x0EB8, 0x0E2A, 0x0E79, 0x253A, 0x0D84, 0x0EA5, 0x0CA6, 0x0E59, 0x0F8C, 0x253C, 0x253B, 0x253D, 0x0D2C, 0x313A, 0x3142, 0x0D57, 0x314B, 0x2543, 0x3146, 0x3145, 0x3139, 0x258F, 0x2590, 0x2591, 0x0953, 0x3140, 0x2583, 0x2595, 0x2596, 0x2588, 0x2552, 0x095F, 0x258A, 0x091B, 0x258C, 0x258D, 0x258E, 0x2587, 0x258B, 0x0927, 0x0929, 0x2570, 0x2571, 0x092C, 0x2572, 0x2551, 0x2550, 0x3169, 0x2573, 0x0990, 0x2554, 0x2555, 0x2556, 0x254F, 0x256C, 0x097C, 0x09FC, 0x0A42, 0x2569, 0x098A, 0x316A, 0x09AB, 0x09C7, 0x09F5, 0x0952, 0x2553, 0x096C, 0x0983, 0x0984, 0x094E, 0x2578, 0x255A, 0x255B, 0x0CA8, 0x0E46, 0x0950, 0x0D2C, 0x0E64, 0x0F9C, 0x0D57, 0x0942, 0x0FE5, 0x0930, 0x09B3, 0x0ED1, 0x0F68, 0x0F47, 0x255C, 0x0DBD, 0x255E, 0x255D, 0x255F, 0x09B9, 0x09CD, 0x09D5, 0x3193, 0x097B, 0x0988, 0x098F, 0x09A0, 0x093C, 0x3199, 0x0CA6, 0x094D, 0x0956, 0x0CA8, 0x0C9E, 0x0D80, 0x0FBD, 0x0DA4, 0x0D57, 0x292D, 0x0F9C, 0x0FE5, 0x0E46, 0x0F16, 0x0961, 0x0F68, 0x091E, 0x0928, 0x0DBD, 0x0E10, 0x0E90, 0x0D9E, 0x0EBA, 0x0CE0, 0x0DE1, 0x0D68, 0x0D07, 0x0E2A, 0x092B, 0x0E79, 0x0E59, 0x092F, 0x0A60, 0x0A5E, 0x09FF, 0x0CA8, 0x09FA, 0x0D80, 0x0D2C, 0x0FBD, 0x09D2, 0x0D57, 0x0DA4, 0x0FE5, 0x09D0, 0x0F16, 0x09D3, 0x0F68, 0x0F47, 0x09D1, 0x0DBD, 0x0E10, 0x0E90, 0x097D, 0x0979, 0x0CE0, 0x0DE1, 0x09CE, 0x09CB, 0x0E2A, 0x0D84, 0x0E79, 0x0E59, 0x0970, 0x096F, 0x315B, 0x315C, 0x097E, 0x097A, 0x0A0E, 0x0A0D, 0x319E, 0x319F, 0x0A10, 0x0A0F, 0x31A2, 0x31A3, 0x31A4, 0x31A5, 0x0A53, 0x0A51, 0x31A8, 0x31A9, 0x0935, 0x31AB, 0x0934, 0x0A30, 0x3173, 0x3174, 0x31B0, 0x31B1, 0x0A2E, 0x0939, 0x0938, 0x09FD, 0x09F8, 0x09FE, 0x09F9, 0x0A37, 0x09B5, 0x09B4, 0x3180, 0x31BD, 0x31BE, 0x31BF, 0x31C0, 0x31C1, 0x31C4, 0x0A8B, 0x09C0, 0x31C5, 0x09BD, 0x09BC, 0x0A38, 0x0993, 0x31C2, 0x31C3, 0x09A3, 0x09A2, 0x09C1, 0x2567, 0x250E, 0x0A8C, 0x2510, 0x0957, 0x2549, 0x0954, 0x2535, 0x0994, 0x0958, 0x0955, 0x2544, 0x2516, 0x2517, 0x25A8, 0x0962, 0x0960, 0x0923, 0x0921, 0x0924, 0x0922, 0x0926, 0x0925, 0x094F, 0x094B, 0x2562, 0x2564, 0x251A, 0x251C, 0x252B, 0x252D, 0x25C5, 0x253F, 0x256F, 0x253E, 0x091F, 0x2537, 0x091C, 0x25C0, 0x25C1, 0x25C2, 0x0920, 0x2566, 0x25C6, 0x25C8, 0x091D, 0x254A, 0x2612, 0x09F1, 0x09F0, 0x0A01, 0x25C9, 0x25CD, 0x2540, 0x0A00, 0x0A88, 0x2619, 0x0A87, 0x25D4, 0x2618, 0x09E8, 0x09E7, 0x260D, 0x25EB, 0x25EC, 0x25F5, 0x25F7, 0x25F3, 0x25F1, 0x25F4, 0x2613, 0x260E, 0x25E1, 0x25F8, 0x25F9, 0x25DA, 0x25DB, 0x25DC, 0x25DD, 0x25E3, 0x25DE, 0x25E4, 0x25E2, 0x2610, 0x260F, 0x25E0, 0x25DF, 0x25FA, 0x25EF, 0x25E5, 0x25F0, 0x09C5, 0x25FB, 0x25FC, 0x25FD, 0x09C4, 0x09D9, 0x01B3, 0x023A, 0x09D8, 0x01B4, 0x25E7, 0x25E8, 0x01B9, 0x25E9, 0x01BB, 0x01BA, 0x01D1, 0x01BC, 0x0024, 0x0019, 0x2536, 0x0026, 0x2600, 0x2601, 0x002B, 0x0996, 0x0995, 0x09BF, 0x2606, 0x2614, 0x001E, 0x2611, 0x0020, 0x001F, 0x0022, 0x001D, 0x0025, 0x09BE, 0x01CD, 0x01A6, 0x1807, 0x01E3, 0x0219, 0x020D, 0x022E, 0x0223, 0x0A3E, 0x0238, 0x0A3D, 0x01A8, 0x01AB, 0x0021, 0x01AD, 0x0023, 0x01AF, 0x01AE, 0x01F9, 0x01B0, 0x2526, 0x0A40, 0x25B7, 0x0A3F, 0x259B, 0x180F, 0x25B8, 0x1811, 0x1810, 0x1813, 0x1812, 0x1815, 0x1814, 0x0A3A, 0x0A39, 0x0A14, 0x0A13, 0x0A2A, 0x0A29, 0x0A36, 0x0A35, 0x2525, 0x0A03, 0x0A02, 0x0A12, 0x0A11, 0x0A57, 0x0A56, 0x09DF, 0x09DE, 0x0980, 0x25CB, 0x097F, 0x09DB, 0x09DA, 0x099A, 0x0999, 0x0998, 0x0997, 0x2599, 0x0948, 0x0947, 0x0992, 0x0991, 0x0937, 0x0936, 0x095E, 0x095D, 0x0931, 0x092E, 0x0933, 0x0932, 0x0BA6, 0x0BA8, 0x0BAA, 0x0BAC, 0x0B9E, 0x0BA0, 0x0BA2, 0x25CA, 0x0BA4, 0x0B95, 0x0B97, 0x0B9A, 0x0B9C, 0x0B8F, 0x0B91, 0x0B93, 0x0BCA, 0x0BCC, 0x0BCE, 0x0BD1, 0x0BC2, 0x0BC4, 0x0BC6, 0x0BC8, 0x0BB6, 0x0BBC, 0x01B4, 0x019E, 0x01B6, 0x01B5, 0x01B8, 0x01B7, 0x01BA, 0x01BC, 0x0BBE, 0x01BB, 0x01B9, 0x01D1, 0x01E5, 0x01D0, 0x0225, 0x0BC0, 0x01FB, 0x020F, 0x01B2, 0x0BAE, 0x019E, 0x0BB0, 0x0BB2, 0x0BB4, 0x0BCB, 0x0BCD, 0x0BD0, 0x0BD2, 0x0BC3, 0x0BC5, 0x0BC7, 0x37C2, 0x37C3, 0x0BC9, 0x0BBB, 0x37C6, 0x37C7, 0x37C8, 0x37C9, 0x0BBD, 0x0BBF, 0x2F20, 0x2F2F, 0x2F30, 0x0BC1, 0x37C4, 0x2F13, 0x0BAF, 0x2F15, 0x0BB1, 0x0BB3, 0x0BB5, 0x0BDC, 0x0BDE, 0x0BE0, 0x0BD4, 0x0BD6, 0x0BD8, 0x0BDA, 0x2F1C, 0x2F3D, 0x2F3E, 0x2F3F, 0x0A32, 0x0A31, 0x09A5, 0x2F40, 0x2F38, 0x2F39, 0x2F3A, 0x09A4, 0x09BB, 0x09BA, 0x095A, 0x0959, 0x09D7, 0x2F41, 0x2F42, 0x09D6, 0x2F43, 0x2F4B, 0x2F46, 0x2F45, 0x0A16, 0x0A15, 0x09A9, 0x09A8, 0x09C3, 0x09C2, 0x0BA7, 0x0BA9, 0x0BAB, 0x2F61, 0x2F62, 0x2F69, 0x2F54, 0x2F67, 0x2F65, 0x2F68, 0x2F53, 0x38AD, 0x2F51, 0x2F6A, 0x38B1, 0x2F5C, 0x38B3, 0x38B2, 0x38B5, 0x38B4, 0x38B7, 0x38B6, 0x0BAD, 0x2F55, 0x2F56, 0x2F57, 0x2F58, 0x2F6D, 0x2F5F, 0x2F5B, 0x2F64, 0x2F6F, 0x2F6E, 0x2F70, 0x2F63, 0x2F73, 0x0B9F, 0x2F74, 0x38C9, 0x38C8, 0x38CB, 0x38CA, 0x0BA1, 0x38CC, 0x2F79, 0x0BA3, 0x0BA5, 0x0B96, 0x01A2, 0x0B99, 0x0B9B, 0x2F81, 0x2F82, 0x2F8A, 0x2F88, 0x0B9D, 0x0B90, 0x0B92, 0x2F89, 0x2F8B, 0x2F8C, 0x0B94, 0x09E6, 0x2F85, 0x2F86, 0x2F87, 0x09E5, 0x09EF, 0x09EE, 0x09AF, 0x37D8, 0x37D7, 0x37DA, 0x37D9, 0x37DC, 0x09AE, 0x37DE, 0x37DD, 0x09C9, 0x09C8, 0x0966, 0x0965, 0x37F4, 0x37F3, 0x37F6, 0x0974, 0x37E8, 0x37E7, 0x37EA, 0x37E9, 0x37EC, 0x37EB, 0x291D, 0x291F, 0x2920, 0x37EF, 0x37F2, 0x37F1, 0x37F0, 0x37ED, 0x37EE, 0x37F5, 0x0973, 0x093E, 0x093D, 0x0946, 0x0945, 0x0A8A, 0x0A89, 0x099C, 0x099B, 0x0A6A, 0x0A69, 0x099E, 0x099D, 0x2945, 0x294F, 0x2947, 0x2950, 0x2949, 0x294A, 0x294B, 0x294C, 0x09B1, 0x09B0, 0x09E1, 0x09E0, 0x2941, 0x2942, 0x2943, 0x0968, 0x2FD1, 0x2FD2, 0x2FD3, 0x2FD4, 0x2FD6, 0x2948, 0x2FD5, 0x2FDB, 0x2946, 0x3872, 0x387C, 0x2FDC, 0x3876, 0x3879, 0x3878, 0x387B, 0x3877, 0x387D, 0x387A, 0x0967, 0x09A7, 0x2FDD, 0x09A6, 0x0C23, 0x2FE9, 0x2FDA, 0x3009, 0x300A, 0x2944, 0x2FED, 0x2FDE, 0x0C26, 0x0C2C, 0x0C19, 0x2FF3, 0x2FF4, 0x3884, 0x3887, 0x0C20, 0x3889, 0x300C, 0x388B, 0x388A, 0x0C1E, 0x2FF9, 0x3000, 0x300F, 0x300B, 0x3006, 0x3010, 0x3007, 0x3896, 0x3894, 0x3008, 0x3895, 0x2913, 0x2912, 0x3005, 0x0C5B, 0x291E, 0x2911, 0x2916, 0x291B, 0x2915, 0x010A, 0x2917, 0x2918, 0x3899, 0x3897, 0x389A, 0x291C, 0x389E, 0x3898, 0x389B, 0x389C, 0x38A0, 0x389F, 0x38A2, 0x38A1, 0x38A4, 0x38A3, 0x389D, 0x38A5, 0x01CC, 0x019C, 0x019B, 0x01A5, 0x1012, 0x0CDC, 0x01F8, 0x020C, 0x0218, 0x0C5E, 0x0C61, 0x0C68, 0x0C6B, 0x0C71, 0x0C9B, 0x38A6, 0x0E58, 0x0CDF, 0x0D06, 0x0F12, 0x0D56, 0x0D67, 0x0D7F, 0x0D9D, 0x01A2, 0x0DA3, 0x0DBC, 0x0D83, 0x0E0F, 0x0E29, 0x0E45, 0x010F, 0x0E63, 0x0E78, 0x0F11, 0x0DE0, 0x100F, 0x1010, 0x1011, 0x0C21, 0x0E8F, 0x0EB9, 0x0ED0, 0x0F15, 0x0F46, 0x0F67, 0x0F9B, 0x0FBB, 0x0FDC, 0x0FE3, 0x0C12, 0x0C15, 0x0C17, 0x0C1C, 0x0BF9, 0x0BFA, 0x0C03, 0x0C0B, 0x0C11, 0x0C0E, 0x0C14, 0x0BFE, 0x0C00, 0x0C09, 0x0C05, 0x0BF3, 0x0BF6, 0x0BFB, 0x0BFD, 0x0BE1, 0x0BE8, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0BEC, 0x0BEF, 0x0CA7, 0x0234, 0x022A, 0x0CA5, 0x0D2B, 0x0BDB, 0x0BDD, 0x0EB7, 0x0BDF, 0x0C65, 0x0C64, 0x0C6E, 0x0C5C, 0x0C9D, 0x0FBC, 0x0FC9, 0x0FE4, 0x0D19, 0x0D1E, 0x0CC2, 0x0D23, 0x0D24, 0x0CC7, 0x0D25, 0x0CCC, 0x0B98, 0x0D77, 0x0BD3, 0x0D45, 0x0D78, 0x0D4A, 0x0D50, 0x0D88, 0x0D8B, 0x0D8C, 0x0D8D, 0x0D8E, 0x0D91, 0x0D95, 0x0D98, 0x0BD5, 0x0BD7, 0x0BD9, 0x046B, 0x046F, 0x0473, 0x064E, 0x0403, 0x0DB0, 0x0DB3, 0x25B1, 0x25B2, 0x0407, 0x03FE, 0x0E43, 0x0E61, 0x0E89, 0x0EA4, 0x0EA6, 0x0EA8, 0x0EA9, 0x0EAF, 0x0EB0, 0x0ECC, 0x0ECE, 0x0EED, 0x0EF2, 0x0EF3, 0x0EF4, 0x0EF6, 0x0EFB, 0x0EFD, 0x0F03, 0x0467, 0x0F09, 0x0F0A, 0x0F0F, 0x0F40, 0x0F41, 0x0F42, 0x0F43, 0x0F97, 0x0F8B, 0x0F90, 0x0F95, 0x0F96, 0x0FAA, 0x0D4F, 0x0FB8, 0x0FAF, 0x0FB0, 0x0FB5, 0x0FC1, 0x0FC2, 0x0FC5, 0x0FC8, 0x0FCD, 0x0FD0, 0x0FD3, 0x0FD4, 0x1002, 0x1007, 0x1008, 0x0FD8, 0x1009, 0x100E, 0x1017, 0x1018, 0x0362, 0x0FB7, 0x064A, 0x03C2, 0x03CA, 0x0375, 0x039D, 0x0396, 0x0399, 0x03A3, 0x0589, 0x058A, 0x058D, 0x058F, 0x054C, 0x0583, 0x0585, 0x0587, 0x04AC, 0x052A, 0x0515, 0x052E, 0x0652, 0x0489, 0x04AF, 0x04B6, 0x0D9A, 0x0DB4, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0215, 0x021F, 0x022A, 0x0234, 0x0E09, 0x0E44, 0x0E8A, 0x0376, 0x0581, 0x0FB6, 0x0580, 0x06C1, 0x06C0, 0x0417, 0x0416, 0x055B, 0x055A, 0x0645, 0x0675, 0x034B, 0x034A, 0x06E5, 0x0718, 0x0717, 0x02B1, 0x035B, 0x035F, 0x0360, 0x041A, 0x0355, 0x0338, 0x031C, 0x04F2, 0x04C8, 0x06E2, 0x06E1, 0x027B, 0x0250, 0x04B2, 0x030C, 0x0532, 0x0531, 0x02D2, 0x0464, 0x05EE, 0x05C1, 0x05B7, 0x05A4, 0x05E3, 0x05D3, 0x062E, 0x060C, 0x062F, 0x060D, 0x0570, 0x0562, 0x0571, 0x0563, 0x072D, 0x072E, 0x064C, 0x064D, 0x05D9, 0x036C, 0x044A, 0x044B, 0x02EE, 0x02ED, 0x05DA, 0x05DB, 0x0559, 0x0724, 0x0725, 0x02EB, 0x0674, 0x068C, 0x0477, 0x06BF, 0x05F3, 0x0644, 0x0653, 0x066E, 0x041B, 0x05CA, 0x05CC, 0x05F7, 0x057A, 0x0595, 0x05C0, 0x05C5, 0x03BE, 0x0418, 0x043A, 0x045D, 0x072C, 0x02AF, 0x0361, 0x039F, 0x0716, 0x071F, 0x0726, 0x072B, 0x06E3, 0x06E4, 0x06EB, 0x06F4, 0x0834, 0x0838, 0x07E9, 0x0836, 0x0789, 0x0788, 0x0791, 0x0790, 0x089F, 0x089E, 0x0908, 0x0907, 0x0910, 0x090F, 0x08F4, 0x08F3, 0x0902, 0x0901, 0x08EC, 0x08EB, 0x08EE, 0x08ED, 0x089D, 0x089C, 0x08E2, 0x08E1, 0x082C, 0x0837, 0x0835, 0x0839, 0x08A0, 0x0831, 0x01D0, 0x01B2, 0x081E, 0x01E5, 0x021B, 0x020F, 0x081D, 0x0225, 0x07C4, 0x0778, 0x01D0, 0x08A1, 0x07EB, 0x0826, 0x021B, 0x082E, 0x07E8, 0x080A, 0x01B3, 0x023A, 0x0847, 0x087E, 0x07EF, 0x0868, 0x086D, 0x07D3, 0x084B, 0x083A, 0x083E, 0x085F, 0x0864, 0x0817, 0x0823, 0x0833, 0x082D, 0x0786, 0x0784, 0x0820, 0x081F, 0x0822, 0x0821, 0x078B, 0x078A, 0x085D, 0x0860, 0x0818, 0x07EC, 0x0762, 0x07C1, 0x085B, 0x085C, 0x0740, 0x0776, 0x07A3, 0x07CF, 0x086A, 0x0886, 0x07E5, 0x0859, 0x083C, 0x0851, 0x0862, 0x0866, 0x081A, 0x0828, 0x0830, 0x07F6, 0x07FB, 0x07FF, 0x0803, 0x07C0, 0x07C6, 0x07EA, 0x07F1, 0x076B, 0x076F, 0x078C, 0x0792, 0x084C, 0x072F, 0x0761, 0x0766, 0x0814, 0x0856, 0x0897, 0x0781, 0x07BC, 0x07E2, 0x075B, 0x07F9, 0x07FD, 0x0801, 0x080D, 0x3FE9, 0x3FE5, 0x3FE6, 0x3FE7, 0x3FE8, 0x3FC4, 0x3FC9, 0x3FC5, 0x3FC6, 0x3FC7, 0x3FC8, 0x3FA4, 0x3F95, 0x3F96, 0x3F97, 0x3F98, 0x3FB1, 0x3FB2, 0x3FB3, 0x3FB4, 0x3FAD, 0x3FAE, 0x3FAF, 0x3FB0, 0x3FA9, 0x3FAA, 0x3FAB, 0x3FAC, 0x3FA5, 0x3FA6, 0x3FA7, 0x3FA8, 0x3F83, 0x3F84, 0x3F75, 0x3F76, 0x3F77, 0x3F78, 0x3F91, 0x3F92, 0x3F93, 0x3F94, 0x3F8D, 0x3F8E, 0x3F8F, 0x3F90, 0x0C50, 0x3F89, 0x3F8A, 0x3F8B, 0x3F8C, 0x3F85, 0x3F86, 0x3F87, 0x3F88, 0x4061, 0x4062, 0x4063, 0x4064, 0x405D, 0x405E, 0x405F, 0x4060, 0x4059, 0x405A, 0x405B, 0x405C, 0x4040, 0x4020, 0x4015, 0x4016, 0x4017, 0x4018, 0x4031, 0x4032, 0x4034, 0x402D, 0x402E, 0x402F, 0x4030, 0x4029, 0x402A, 0x402B, 0x402C, 0x4028, 0x4001, 0x4004, 0x3FFD, 0x3FFF, 0x4000, 0x3FF9, 0x3FFA, 0x3FF5, 0x3FF6, 0x3FF7, 0x3FF8, 0x4011, 0x4012, 0x4013, 0x4014, 0x400D, 0x400E, 0x400F, 0x4010, 0x4009, 0x400A, 0x1048, 0x400B, 0x400C, 0x4005, 0x4006, 0x4007, 0x4008, 0x40E1, 0x40E2, 0x40E3, 0x40E4, 0x40DD, 0x40DE, 0x40DF, 0x40E0, 0x40D9, 0x40DA, 0x40DB, 0x40DC, 0x3DD5, 0x3DD6, 0x3DD7, 0x3DD8, 0x3DF1, 0x3DF2, 0x3DF3, 0x3DF4, 0x3DED, 0x3DEE, 0x3DEF, 0x3DF0, 0x3DE9, 0x3DEA, 0x3DEB, 0x3DEC, 0x3DE5, 0x3DE6, 0x3DE7, 0x3DE8, 0x3DC1, 0x3DC2, 0x3DC3, 0x3DC4, 0x3DBD, 0x3DBE, 0x3DBF, 0x3DC0, 0x3DB9, 0x3DBA, 0x3DBB, 0x3DBC, 0x3DB5, 0x3DB6, 0x3DB7, 0x3DB8, 0x3DD1, 0x3DD2, 0x3DD3, 0x3DD4, 0x3DCD, 0x3DCE, 0x3DCF, 0x3DD0, 0x3DC9, 0x3DCA, 0x3DCB, 0x3DCC, 0x3DC5, 0x3DC6, 0x3DC7, 0x3DC8, 0x3DA1, 0x3DA2, 0x3DA3, 0x3DA4, 0x3D9D, 0x3D9E, 0x3D9F, 0x3DA0, 0x3D99, 0x3D9A, 0x3D9B, 0x3D9C, 0x3D95, 0x3D96, 0x3D97, 0x3D98, 0x3DB1, 0x3DB2, 0x3DB3, 0x3DB4, 0x3DAD, 0x3DAE, 0x3DAF, 0x3DB0, 0x3DA9, 0x3DAA, 0x3DAB, 0x3DAC, 0x3DA5, 0x3DA6, 0x3DA7, 0x3DA8, 0x3D81, 0x3D82, 0x3D83, 0x3D84, 0x3D7D, 0x3D7E, 0x3D7F, 0x3D80, 0x3D79, 0x3D7A, 0x3D7B, 0x3D7C, 0x3D75, 0x3D76, 0x3D77, 0x3D78, 0x3D91, 0x3D92, 0x3D93, 0x3D94, 0x3D8D, 0x3D8E, 0x3D8F, 0x3D90, 0x3D89, 0x3D8A, 0x3D8B, 0x3D8C, 0x3D85, 0x3D86, 0x3D87, 0x3D88, 0x3E61, 0x3E62, 0x3E63, 0x3E64, 0x3E5D, 0x3E5E, 0x3E5F, 0x3E60, 0x3E59, 0x3E5A, 0x3E5B, 0x3E5C, 0x3E55, 0x3E56, 0x3E57, 0x3E58, 0x3E71, 0x3E72, 0x3E73, 0x3E74, 0x3E6D, 0x3E6E, 0x3E6F, 0x3E70, 0x3E69, 0x3E6A, 0x3E6B, 0x3E6C, 0x3E65, 0x3E66, 0x3E67, 0x3E68, 0x3E41, 0x3E42, 0x3E43, 0x3E44, 0x3E3D, 0x3E3E, 0x3E3F, 0x3E40, 0x3E39, 0x3E3A, 0x3E3B, 0x3E3C, 0x3E35, 0x3E36, 0x3E37, 0x3E38, 0x3E51, 0x3E52, 0x3E53, 0x3E54, 0x3E4D, 0x3E4E, 0x12A2, 0x12A3, 0x12A4, 0x12AA, 0x12AB, 0x12AC, 0x12AD, 0x12AE, 0x12B0, 0x12B2, 0x12B3, 0x12B4, 0x12B5, 0x12B6, 0x12B7, 0x12B8, 0x12B9, 0x12BA, 0x12BC, 0x12BE, 0x12C1, 0x12C2, 0x12C3, 0x12C4, 0x12C5, 0x12C9, 0x12CA, 0x3E4F, 0x12CC, 0x12CE, 0x12D1, 0x12D3, 0x12D4, 0x12D5, 0x12D6, 0x12D7, 0x12D8, 0x12D9, 0x12DA, 0x12DB, 0x12DD, 0x12DF, 0x12E0, 0x12E1, 0x12E4, 0x12E5, 0x12E6, 0x12E7, 0x12E8, 0x12E9, 0x12EA, 0x12EB, 0x12EC, 0x12ED, 0x3E50, 0x3E49, 0x3E4A, 0x12EE, 0x3E4B, 0x3E4C, 0x3E45, 0x3E46, 0x3E47, 0x3E48, 0x3E21, 0x3E22, 0x3E23, 0x3E24, 0x3E1D, 0x3E1E, 0x3E1F, 0x3E20, 0x3E19, 0x3E1A, 0x3E1B, 0x3E1C, 0x129F, 0x3E15, 0x3E16, 0x3E17, 0x3E18, 0x3E31, 0x3E32, 0x3E33, 0x12BB, 0x12BD, 0x12BF, 0x12C6, 0x12CF, 0x12D2, 0x12DC, 0x12E2, 0x12AF, 0x12B1, 0x3E34, 0x3E2D, 0x3E2E, 0x3E2F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0215, 0x021F, 0x022A, 0x0234, 0x3E30, 0x3E29, 0x12A1, 0x12A5, 0x12A6, 0x12A7, 0x12A8, 0x12A9, 0x12CD, 0x12C7, 0x12E3, 0x12C0, 0x12C8, 0x12EF, 0x12D0, 0x12DE, 0x12F7, 0x3E2A, 0x3E2B, 0x3E2C, 0x3E25, 0x12F8, 0x12F9, 0x12FA, 0x12FB, 0x12FC, 0x12FD, 0x12FE, 0x1300, 0x3E26, 0x3E27, 0x1302, 0x3E28, 0x3E01, 0x3E02, 0x1304, 0x3E03, 0x3E04, 0x3DFD, 0x3DFE, 0x3DFF, 0x3E00, 0x3DF9, 0x3DFA, 0x3DFB, 0x3DFC, 0x3DF5, 0x3DF6, 0x1311, 0x1312, 0x1314, 0x1316, 0x1317, 0x1319, 0x131A, 0x131B, 0x131C, 0x3DF7, 0x131D, 0x131E, 0x131F, 0x1320, 0x1321, 0x1322, 0x1324, 0x3DF8, 0x1326, 0x3E11, 0x3E12, 0x3E13, 0x1328, 0x1329, 0x132A, 0x132B, 0x3E14, 0x3E0D, 0x3E0E, 0x132C, 0x3E0F, 0x3E10, 0x3E09, 0x3E0A, 0x3E0B, 0x3E0C, 0x3E05, 0x3E06, 0x3E07, 0x3E08, 0x3EE1, 0x3EE2, 0x3EE3, 0x3EE4, 0x3EDD, 0x3EDE, 0x1318, 0x3EDF, 0x3EE0, 0x3ED9, 0x3EDA, 0x3EDB, 0x3EDC, 0x3ED5, 0x3ED6, 0x3ED7, 0x3ED8, 0x3EF1, 0x3EF2, 0x3EF3, 0x1313, 0x1315, 0x3EF4, 0x1323, 0x12FF, 0x1301, 0x3EED, 0x3EEE, 0x3EEF, 0x3EF0, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0215, 0x021F, 0x022A, 0x0234, 0x1325, 0x1327, 0x3EE9, 0x3EEA, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x3EEB, 0x3EEC, 0x3EE5, 0x3EE6, 0x3EE7, 0x3EE8, 0x3EC1, 0x3EC2, 0x3EC3, 0x3EC4, 0x3EBD, 0x3EBE, 0x3EBF, 0x3EC0, 0x3EB9, 0x3EBA, 0x3EBB, 0x3EBC, 0x3EB5, 0x3EB6, 0x3EB7, 0x3EB8, 0x3ED1, 0x3ED2, 0x3ED3, 0x3ED4, 0x3ECD, 0x3ECE, 0x3ECF, 0x3ED0, 0x3EC9, 0x3ECA, 0x3ECB, 0x3ECC, 0x3EC5, 0x3EC6, 0x3EC7, 0x3EC8, 0x3EA1, 0x3EA2, 0x3EA3, 0x3EA4, 0x3E9D, 0x3E9E, 0x3E9F, 0x3EA0, 0x3E99, 0x3E9A, 0x3E9B, 0x1355, 0x3E9C, 0x3E95, 0x3E96, 0x3E81, 0x3E82, 0x3E77, 0x3E78, 0x3E91, 0x3E92, 0x3E93, 0x3E94, 0x3E8D, 0x3E8E, 0x3E8F, 0x3E90, 0x3E89, 0x3E8A, 0x3E8B, 0x3E8C, 0x3E85, 0x3E86, 0x3E87, 0x3E88, 0x3F61, 0x3F62, 0x3F63, 0x3F64, 0x3F5D, 0x3F5E, 0x3F5F, 0x3F60, 0x3F59, 0x3F5A, 0x3F5B, 0x3F5C, 0x3F55, 0x3F56, 0x3F57, 0x3F58, 0x3F71, 0x3F72, 0x3F73, 0x3F74, 0x3F6D, 0x3F6E, 0x3F6F, 0x3F70, 0x3F69, 0x3F6A, 0x3F6B, 0x3F6C, 0x3F65, 0x3F66, 0x3F67, 0x3F68, 0x3F41, 0x3F42, 0x3F43, 0x3F44, 0x3F3D, 0x3F3E, 0x3F3F, 0x3F40, 0x3F39, 0x3F3A, 0x3F3B, 0x3F3C, 0x3F35, 0x3F36, 0x3F37, 0x3F38, 0x3F51, 0x3F52, 0x3F53, 0x3F54, 0x3F4D, 0x3F4E, 0x3F4F, 0x3F50, 0x3F49, 0x3F4A, 0x3F4B, 0x3F4C, 0x3F45, 0x3F46, 0x3F47, 0x3F48, 0x3F21, 0x3F22, 0x3F23, 0x3F24, 0x3F1D, 0x3F1E, 0x3F1F, 0x3F20, 0x1801, 0x3F19, 0x17D2, 0x1802, 0x17D4, 0x17D3, 0x17D6, 0x3F1A, 0x17D8, 0x17D7, 0x17DA, 0x17D9, 0x17DC, 0x17DB, 0x3F1B, 0x3F1C, 0x3F15, 0x3F16, 0x3F17, 0x17E1, 0x3F18, 0x3F31, 0x17E6, 0x17E5, 0x17E8, 0x17E7, 0x17EA, 0x17E9, 0x17EC, 0x17EB, 0x17EE, 0x3F32, 0x17F0, 0x17EF, 0x17F2, 0x17F1, 0x17F4, 0x17F3, 0x17F6, 0x3F33, 0x17F8, 0x17F7, 0x17FA, 0x17F9, 0x17FC, 0x17FB, 0x17FE, 0x3F34, 0x1800, 0x17FF, 0x1804, 0x1803, 0x1806, 0x1805, 0x3F2D, 0x3F2E, 0x3F2F, 0x3F30, 0x3F29, 0x3F2A, 0x3F2B, 0x3F2C, 0x3F25, 0x3F26, 0x3F27, 0x3F28, 0x3F01, 0x3F02, 0x3F03, 0x3F04, 0x3EFD, 0x3EFE, 0x3EFF, 0x3F00, 0x3EF9, 0x3EFA, 0x3EFB, 0x3EFC, 0x3EF5, 0x3EF6, 0x01C9, 0x01A2, 0x01F5, 0x01DF, 0x0215, 0x0209, 0x022A, 0x3EF7, 0x0113, 0x0234, 0x0115, 0x0114, 0x0117, 0x0116, 0x3EF8, 0x3F11, 0x3F12, 0x3F13, 0x3F14, 0x011C, 0x3F0D, 0x3F0E, 0x01DF, 0x01C9, 0x0209, 0x01F5, 0x021F, 0x0215, 0x0234, 0x022A, 0x3F0F, 0x3F10, 0x3F09, 0x3F0A, 0x3F0B, 0x3F0C, 0x3F05, 0x3F06, 0x3F07, 0x3F08, 0x4766, 0x44C1, 0x44C2, 0x44C3, 0x471D, 0x44BD, 0x44BF, 0x44BF, 0x44B9, 0x44B6, 0x44BB, 0x471C, 0x4764, 0x4765, 0x44B7, 0x44B8, 0x44D2, 0x476A, 0x44D5, 0x44D4, 0x44CE, 0x44D0, 0x44CF, 0x4769, 0x44ED, 0x44C8, 0x471E, 0x44CA, 0x44C5, 0x4767, 0x44C6, 0x44C7, 0x4495, 0x07C5, 0x083D, 0x449B, 0x4496, 0x0802, 0x0832, 0x4498, 0x4490, 0x4491, 0x4493, 0x449A, 0x448B, 0x07FE, 0x448C, 0x448C, 0x07E7, 0x448E, 0x4485, 0x4487, 0x4488, 0x081B, 0x4489, 0x44AD, 0x44AE, 0x0816, 0x44AF, 0x44B4, 0x44A6, 0x4763, 0x44AB, 0x44AC, 0x449F, 0x449C, 0x44A1, 0x44A0, 0x4459, 0x44AA, 0x449D, 0x07F4, 0x449E, 0x4470, 0x4471, 0x4472, 0x4473, 0x446B, 0x446C, 0x446D, 0x446E, 0x471B, 0x4465, 0x4466, 0x4469, 0x445D, 0x445E, 0x0861, 0x445F, 0x4460, 0x4484, 0x4480, 0x4482, 0x4483, 0x4762, 0x447B, 0x447C, 0x447D, 0x4761, 0x4594, 0x4478, 0x4479, 0x4475, 0x4476, 0x4476, 0x4476, 0x4717, 0x351A, 0x475E, 0x4442, 0x4443, 0x443B, 0x443C, 0x443F, 0x443D, 0x4432, 0x4436, 0x4437, 0x4439, 0x442A, 0x4428, 0x442B, 0x475A, 0x47BC, 0x4457, 0x4458, 0x471A, 0x444F, 0x4430, 0x4450, 0x4451, 0x4445, 0x0850, 0x444B, 0x475D, 0x082A, 0x444E, 0x4444, 0x4449, 0x0816, 0x081B, 0x0867, 0x086B, 0x475B, 0x4718, 0x477B, 0x455F, 0x472D, 0x4561, 0x4558, 0x4559, 0x455A, 0x455D, 0x4555, 0x4551, 0x4557, 0x472C, 0x454C, 0x4552, 0x4554, 0x477A, 0x456D, 0x456F, 0x456B, 0x4571, 0x4768, 0x13DF, 0x477E, 0x456A, 0x477F, 0x4566, 0x4568, 0x4569, 0x477D, 0x477C, 0x13E7, 0x4562, 0x472E, 0x4563, 0x4542, 0x453A, 0x472A, 0x453D, 0x4531, 0x4533, 0x4773, 0x4538, 0x452D, 0x452F, 0x452C, 0x4727, 0x4526, 0x4524, 0x4726, 0x452B, 0x4548, 0x4778, 0x472B, 0x454F, 0x4544, 0x4545, 0x4546, 0x454A, 0x4543, 0x453E, 0x4637, 0x4743, 0x4729, 0x4728, 0x444C, 0x444D, 0x063C, 0x0669, 0x450D, 0x05E9, 0x0578, 0x450B, 0x450C, 0x05BC, 0x02C6, 0x02EF, 0x0688, 0x069C, 0x450E, 0x4505, 0x0267, 0x02A8, 0x4504, 0x4508, 0x036D, 0x4509, 0x0389, 0x03B2, 0x476E, 0x07FA, 0x44FE, 0x4503, 0x4504, 0x44FC, 0x4725, 0x4724, 0x44FD, 0x4522, 0x4527, 0x4772, 0x4529, 0x4771, 0x451E, 0x451C, 0x4520, 0x4516, 0x4517, 0x451B, 0x0A90, 0x0A8E, 0x07F0, 0x0A92, 0x140E, 0x140D, 0x0A9C, 0x0A9A, 0x0AA2, 0x0A9E, 0x0AA4, 0x0A94, 0x0AAC, 0x0AA0, 0x140C, 0x0AA8, 0x1412, 0x1411, 0x089A, 0x1413, 0x0A99, 0x0A95, 0x0A96, 0x0A9B, 0x0AC0, 0x0ABE, 0x0ACC, 0x0AC2, 0x0AC8, 0x0AC6, 0x0AA3, 0x0ACA, 0x0AD0, 0x0ACE, 0x0AD4, 0x0AD2, 0x0A8F, 0x0AD6, 0x0ADC, 0x0ADA, 0x0AE0, 0x0AD8, 0x0AE4, 0x0AE2, 0x0AA6, 0x0ADE, 0x0AE6, 0x0AEA, 0x1421, 0x1422, 0x0A93, 0x140F, 0x1424, 0x141E, 0x0AA9, 0x1426, 0x0AA1, 0x0A9D, 0x081B, 0x0A91, 0x0AAB, 0x0A9F, 0x0AA5, 0x0AA7, 0x0AAF, 0x0AAD, 0x0AB3, 0x0AB1, 0x0AB7, 0x0AB5, 0x0ABB, 0x0816, 0x0ABF, 0x0ABD, 0x0AC3, 0x0AC1, 0x0AC7, 0x0AC5, 0x0ACB, 0x0AC9, 0x082A, 0x07C5, 0x1405, 0x1408, 0x0198, 0x0ADB, 0x01A2, 0x0AD3, 0x0ADF, 0x0ADD, 0x1425, 0x0AE1, 0x0AE7, 0x0AE5, 0x0209, 0x0AE9, 0x0198, 0x13F8, 0x0540, 0x13F6, 0x1410, 0x01C9, 0x0466, 0x01A2, 0x1414, 0x1417, 0x01DF, 0x03C5, 0x1418, 0x0AE8, 0x1419, 0x141A, 0x0670, 0x02A1, 0x068A, 0x068B, 0x03C7, 0x0671, 0x054D, 0x03C6, 0x0588, 0x034E, 0x0351, 0x0529, 0x01A2, 0x01DF, 0x06E6, 0x05C2, 0x08A2, 0x08A3, 0x08A4, 0x08A5, 0x08AE, 0x08A7, 0x08A6, 0x08A9, 0x145E, 0x1428, 0x1429, 0x08B0, 0x08B3, 0x08FF, 0x08B1, 0x08A8, 0x142D, 0x08FB, 0x08FE, 0x08FD, 0x0900, 0x08CC, 0x0906, 0x0905, 0x1427, 0x090B, 0x142B, 0x08C2, 0x08C7, 0x08C8, 0x08C9, 0x08CA, 0x144A, 0x144F, 0x144B, 0x144C, 0x08C6, 0x1447, 0x1450, 0x1446, 0x142A, 0x144E, 0x142C, 0x144D, 0x08DE, 0x1431, 0x08DD, 0x1432, 0x08DB, 0x08DC, 0x08AC, 0x0912, 0x08BB, 0x1452, 0x08C5, 0x08AD, 0x08C3, 0x1451, 0x1457, 0x1458, 0x08C4, 0x1454, 0x1455, 0x1456, 0x451F, 0x450F, 0x4510, 0x4512, 0x08E7, 0x08E8, 0x4513, 0x08EA, 0x44E2, 0x44E3, 0x44E5, 0x47C6, 0x4720, 0x476B, 0x4721, 0x44E1, 0x44DB, 0x44DC, 0x44DD, 0x44DE, 0x44D6, 0x44D9, 0x44DA, 0x471F, 0x44F2, 0x44F5, 0x0915, 0x44F6, 0x44F8, 0x479E, 0x44EE, 0x44F0, 0x142E, 0x1430, 0x0198, 0x01DF, 0x08D0, 0x01C9, 0x01A2, 0x08D1, 0x08D4, 0x08D3, 0x08D6, 0x01F5, 0x08D8, 0x08D7, 0x08DA, 0x08D9, 0x4723, 0x44EC, 0x44EC, 0x4722, 0x4774, 0x44EA, 0x476D, 0x476D, 0x463E, 0x460B, 0x473F, 0x460E, 0x0215, 0x021F, 0x022A, 0x0234, 0x14C2, 0x14C1, 0x0832, 0x083D, 0x14C7, 0x14C0, 0x14B6, 0x14B7, 0x14C3, 0x163E, 0x1640, 0x1648, 0x163D, 0x1645, 0x1643, 0x163F, 0x0B4B, 0x0B48, 0x0B54, 0x0B4E, 0x0B5A, 0x0B57, 0x0B60, 0x0B5D, 0x1659, 0x164D, 0x0B6C, 0x164F, 0x164E, 0x1651, 0x164C, 0x1653, 0x1652, 0x1655, 0x1654, 0x1657, 0x1656, 0x1650, 0x1658, 0x165A, 0x1647, 0x165F, 0x14B8, 0x165E, 0x165D, 0x165C, 0x1644, 0x1660, 0x1641, 0x1646, 0x1649, 0x1661, 0x14BD, 0x164A, 0x164B, 0x14BE, 0x14BC, 0x160F, 0x1611, 0x161C, 0x160E, 0x1614, 0x1612, 0x1610, 0x1613, 0x1617, 0x1616, 0x1619, 0x1618, 0x161B, 0x161A, 0x161D, 0x1615, 0x161F, 0x161E, 0x1621, 0x1620, 0x1623, 0x1622, 0x1625, 0x1624, 0x1627, 0x1626, 0x1629, 0x1628, 0x162B, 0x162A, 0x162D, 0x162C, 0x162F, 0x14D9, 0x1631, 0x1630, 0x1633, 0x1632, 0x1635, 0x1634, 0x1637, 0x1636, 0x1639, 0x1638, 0x163B, 0x163A, 0x14D8, 0x163C, 0x4610, 0x0198, 0x01A2, 0x14C4, 0x14C5, 0x14C6, 0x1642, 0x4605, 0x4603, 0x4606, 0x479D, 0x473D, 0x479B, 0x4601, 0x473E, 0x473C, 0x01A2, 0x0198, 0x01DF, 0x01C9, 0x022A, 0x01F5, 0x021F, 0x10FF, 0x10EA, 0x1119, 0x1110, 0x114E, 0x1128, 0x1168, 0x115F, 0x0234, 0x1664, 0x11C1, 0x1190, 0x11EF, 0x11E0, 0x1665, 0x11F8, 0x1663, 0x1667, 0x120E, 0x1669, 0x1668, 0x1692, 0x1666, 0x166D, 0x166B, 0x1674, 0x166E, 0x166F, 0x1678, 0x1671, 0x1670, 0x1673, 0x1672, 0x1675, 0x126A, 0x1677, 0x1676, 0x1679, 0x167A, 0x167B, 0x126F, 0x126E, 0x168B, 0x1270, 0x1273, 0x1272, 0x1690, 0x1274, 0x1276, 0x1275, 0x1278, 0x1277, 0x127A, 0x1279, 0x168E, 0x127B, 0x127D, 0x127C, 0x127F, 0x127E, 0x1281, 0x1280, 0x168D, 0x1282, 0x1284, 0x1283, 0x1286, 0x1285, 0x1288, 0x1287, 0x168F, 0x1289, 0x168C, 0x14B9, 0x128D, 0x14B2, 0x14AF, 0x14B0, 0x14A1, 0x14A2, 0x1292, 0x1291, 0x1294, 0x1293, 0x1296, 0x1295, 0x14B3, 0x1297, 0x1299, 0x01DF, 0x129B, 0x129A, 0x129D, 0x129C, 0x1662, 0x129E, 0x14CF, 0x14D0, 0x14BA, 0x14BB, 0x14D3, 0x1696, 0x14BF, 0x1695, 0x1694, 0x167C, 0x167D, 0x167E, 0x167F, 0x1680, 0x1681, 0x1682, 0x1683, 0x1684, 0x14B4, 0x1685, 0x1686, 0x14C9, 0x1688, 0x1687, 0x168A, 0x14C8, 0x14D1, 0x14D2, 0x14CB, 0x14CC, 0x14CE, 0x1689, 0x479A, 0x1691, 0x45FA, 0x45FB, 0x47A4, 0x4632, 0x1693, 0x47A5, 0x4634, 0x461A, 0x461D, 0x4630, 0x47A3, 0x4741, 0x47A1, 0x4618, 0x47A2, 0x4614, 0x4740, 0x479F, 0x47A0, 0x4739, 0x4794, 0x45D8, 0x45DA, 0x45D5, 0x4737, 0x45D6, 0x4738, 0x4792, 0x45D2, 0x45D3, 0x45D3, 0x45D0, 0x4790, 0x478F, 0x4791, 0x4798, 0x4799, 0x4799, 0x45F7, 0x473B, 0x45F1, 0x45F2, 0x45F3, 0x4796, 0x4797, 0x45EC, 0x45EF, 0x45DD, 0x473A, 0x4795, 0x45E5, 0x4732, 0x4732, 0x45B8, 0x45B9, 0x45AF, 0x45B1, 0x4731, 0x45B2, 0x45A8, 0x45A9, 0x4788, 0x4789, 0x45A3, 0x45A5, 0x45A6, 0x4787, 0x478D, 0x478E, 0x4734, 0x4735, 0x45C6, 0x476C, 0x45C8, 0x478C, 0x45C1, 0x478A, 0x45C3, 0x478B, 0x45BB, 0x45BC, 0x45BF, 0x4733, 0x4585, 0x4781, 0x457F, 0x458C, 0x4581, 0x4582, 0x472F, 0x4586, 0x457A, 0x457B, 0x4780, 0x4574, 0x4575, 0x4579, 0x4576, 0x4577, 0x459B, 0x4784, 0x459E, 0x4786, 0x4596, 0x4595, 0x4598, 0x475C, 0x4591, 0x4590, 0x4730, 0x4593, 0x4782, 0x4783, 0x458D, 0x4592, 0x46CA, 0x47B9, 0x46CB, 0x474F, 0x46C5, 0x46C6, 0x46C4, 0x46C9, 0x46B9, 0x47B8, 0x46BA, 0x46C2, 0x47B6, 0x47B7, 0x46B4, 0x46B7, 0x4753, 0x47BF, 0x46E4, 0x46E4, 0x169A, 0x4751, 0x169C, 0x169B, 0x169E, 0x169D, 0x16A0, 0x169F, 0x16A2, 0x16A1, 0x16A4, 0x16A3, 0x16A6, 0x4752, 0x16A8, 0x16A7, 0x46E2, 0x47BE, 0x44D7, 0x46DD, 0x47BB, 0x16AD, 0x47BD, 0x46CD, 0x16B2, 0x16B1, 0x16B4, 0x16B3, 0x16B6, 0x16B5, 0x16B8, 0x16B7, 0x16BA, 0x16B9, 0x16BC, 0x16BB, 0x16BE, 0x47BA, 0x16C0, 0x16BF, 0x4750, 0x46D8, 0x47B2, 0x474D, 0x474E, 0x4689, 0x474C, 0x4682, 0x16CA, 0x4719, 0x16CC, 0x16CB, 0x47B1, 0x16CD, 0x467B, 0x47B0, 0x467E, 0x467F, 0x4676, 0x4677, 0x474B, 0x467A, 0x46A4, 0x4760, 0x46A6, 0x46A9, 0x47B5, 0x475F, 0x46A2, 0x46A1, 0x4699, 0x469A, 0x1697, 0x16CF, 0x469F, 0x1698, 0x46A0, 0x468F, 0x4696, 0x4698, 0x47B3, 0x4662, 0x47AC, 0x4747, 0x4748, 0x465E, 0x465F, 0x4661, 0x47AF, 0x47A9, 0x47AB, 0x47AA, 0x4746, 0x464F, 0x4654, 0x4655, 0x4656, 0x4671, 0x4672, 0x4674, 0x474A, 0x466D, 0x4670, 0x466F, 0x4673, 0x466A, 0x466B, 0x466C, 0x466E, 0x47AD, 0x47AE, 0x4749, 0x4669, 0x463F, 0x46AC, 0x4745, 0x4644, 0x47A7, 0x4776, 0x4777, 0x463E, 0x4744, 0x463A, 0x44BC, 0x47A6, 0x4775, 0x4742, 0x4638, 0x4639, 0x464C, 0x4652, 0x4657, 0x465C, 0x4649, 0x464B, 0x4650, 0x4651, 0x4647, 0x4648, 0x464A, 0x47A8, 0x4643, 0x4645, 0x4464, 0x4646, 0x021F, 0x022A, 0x0234, 0x018E, 0x01F5, 0x0209, 0x0215, 0x018A, 0x018B, 0x018C, 0x018D, 0x0186, 0x0187, 0x0188, 0x0189, 0x01F5, 0x0209, 0x0215, 0x01A2, 0x0234, 0x0234, 0x01C9, 0x01DF, 0x022A, 0x022A, 0x0234, 0x0234, 0x0215, 0x021F, 0x021F, 0x021F, 0x0182, 0x0183, 0x0184, 0x0185, 0x01A2, 0x01C9, 0x0180, 0x0181, 0x0209, 0x0209, 0x01C9, 0x01DF, 0x01C9, 0x01DF, 0x01F5, 0x01F5, 0x01A2, 0x01C9, 0x01DF, 0x01DF, 0x0215, 0x021F, 0x022A, 0x0234, 0x01DF, 0x01DF, 0x01F5, 0x0209, 0x01DF, 0x01F5, 0x0209, 0x01C9, 0x01F5, 0x01F5, 0x01F5, 0x01F5, 0x01F5, 0x0209, 0x01DF, 0x01DF, 0x01A2, 0x01C9, 0x01DF, 0x01DF, 0x01F5, 0x0209, 0x017E, 0x017F, 0x021F, 0x022A, 0x0234, 0x01F5, 0x01DF, 0x01F5, 0x0209, 0x0215, 0x0215, 0x021F, 0x022A, 0x0234, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x022A, 0x0234, 0x01A2, 0x01C9, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0234, 0x01A2, 0x01C9, 0x01DF, 0x0209, 0x0215, 0x021F, 0x1B94, 0x1B95, 0x1B97, 0x1B98, 0x1B96, 0x022A, 0x3D1D, 0x3D1E, 0x3D1F, 0x3D20, 0x3D19, 0x3D1A, 0x3D1B, 0x3D1C, 0x3D15, 0x3D16, 0x3D17, 0x3D18, 0x3D11, 0x3D12, 0x3D13, 0x3D14, 0x3D2D, 0x3D2E, 0x3D2F, 0x3D30, 0x3D29, 0x3D2A, 0x3D2B, 0x3D2C, 0x3D25, 0x3D26, 0x3D27, 0x3D28, 0x3D21, 0x3D22, 0x3D23, 0x3D24, 0x3CFD, 0x3CFE, 0x3CFF, 0x3D00, 0x3CF9, 0x3CFA, 0x3CFB, 0x3CFC, 0x3CF5, 0x3CF6, 0x3CF7, 0x3CF8, 0x3CF1, 0x3CF2, 0x3CF3, 0x3CF4, 0x3D0D, 0x3D0E, 0x3D0F, 0x3D10, 0x3D09, 0x3D0A, 0x3D0B, 0x3D0C, 0x3D05, 0x3D06, 0x3D07, 0x3D08, 0x3D01, 0x3D02, 0x3D03, 0x3D04, 0x3CDD, 0x3CDE, 0x3CDF, 0x3CE0, 0x3CD9, 0x3CDA, 0x3CDB, 0x3CDC, 0x3CD5, 0x3CD6, 0x3CD7, 0x3CD8, 0x3CD1, 0x3CD2, 0x3CD3, 0x3CD4, 0x3CED, 0x3CEE, 0x3CEF, 0x3CF0, 0x3CE9, 0x3CEA, 0x3CEB, 0x3CEC, 0x3CE5, 0x3CE6, 0x3CE7, 0x3CE8, 0x3CE1, 0x3CE2, 0x3CE3, 0x3CE4, 0x3CBD, 0x3CBE, 0x3CBF, 0x3CC0, 0x3CB9, 0x3CBA, 0x3CBB, 0x3CBC, 0x3CB5, 0x3CB6, 0x3CB7, 0x3CB8, 0x3CB1, 0x3CB2, 0x3CB3, 0x3CB4, 0x3CCD, 0x3CCE, 0x3CCF, 0x3CD0, 0x3CC9, 0x3CCA, 0x3CCB, 0x3CCC, 0x0198, 0x2C16, 0x3CC5, 0x3CC6, 0x3CC7, 0x3CC8, 0x3CC1, 0x3CC2, 0x346B, 0x3465, 0x3466, 0x3467, 0x3468, 0x3461, 0x3462, 0x3463, 0x3464, 0x3478, 0x3474, 0x3475, 0x3476, 0x3477, 0x3470, 0x3471, 0x3472, 0x3473, 0x346C, 0x346D, 0x346E, 0x346F, 0x344D, 0x344E, 0x344F, 0x3450, 0x0234, 0x022A, 0x3449, 0x344A, 0x344B, 0x344C, 0x3445, 0x3446, 0x3447, 0x3448, 0x3441, 0x3442, 0x3443, 0x3444, 0x345D, 0x345E, 0x345B, 0x345C, 0x3455, 0x3456, 0x3457, 0x3458, 0x3451, 0x3452, 0x3453, 0x3454, 0x342D, 0x342E, 0x342F, 0x3430, 0x3429, 0x342A, 0x2BEC, 0x2BE7, 0x3D47, 0x2BED, 0x2BF9, 0x2BF4, 0x2BFE, 0x2BFA, 0x2C05, 0x2BFF, 0x2C0B, 0x3D48, 0x3D41, 0x3D42, 0x2C17, 0x3D43, 0x3D44, 0x3481, 0x347D, 0x347E, 0x347F, 0x3480, 0x3479, 0x347A, 0x347B, 0x347C, 0x348A, 0x348B, 0x3486, 0x3487, 0x3488, 0x3489, 0x3482, 0x3483, 0x3484, 0x3485, 0x3B85, 0x3B86, 0x3B87, 0x3B88, 0x3B81, 0x2C5B, 0x2C63, 0x3B82, 0x3B83, 0x3B84, 0x2C6C, 0x3B7D, 0x3B7E, 0x3B7F, 0x3B80, 0x3B77, 0x3B78, 0x3B79, 0x3B7C, 0x3B95, 0x2CA7, 0x2C89, 0x2C93, 0x3B96, 0x2CB3, 0x2CA0, 0x2CBB, 0x2CBC, 0x3B97, 0x3B98, 0x3B91, 0x3B92, 0x2CA1, 0x3B93, 0x2CAB, 0x3B94, 0x3B8D, 0x3B8E, 0x3B8F, 0x3B90, 0x3B89, 0x3B8A, 0x3B8B, 0x3B8C, 0x3B63, 0x3B64, 0x3B65, 0x3B66, 0x3B5F, 0x2CB7, 0x2CA6, 0x3B60, 0x2BD3, 0x2BD5, 0x2BE8, 0x2C25, 0x2C1A, 0x2C0E, 0x2C13, 0x2C14, 0x3B61, 0x3B62, 0x3B5B, 0x2BD9, 0x3B5C, 0x3B5D, 0x3B5E, 0x3B57, 0x3B58, 0x3B59, 0x2C08, 0x2C09, 0x3B5A, 0x3B73, 0x2C2F, 0x2C02, 0x2C21, 0x3B74, 0x2C1B, 0x2C0D, 0x2C2B, 0x2C20, 0x2C26, 0x2C2A, 0x3B75, 0x3B76, 0x3B6F, 0x3B70, 0x3B71, 0x3B72, 0x3B6B, 0x3B6C, 0x3B6D, 0x3B6E, 0x3B67, 0x3B68, 0x3B69, 0x3B6A, 0x3B43, 0x3B44, 0x3B45, 0x3B46, 0x3B3F, 0x3B40, 0x3B41, 0x3B42, 0x3B3B, 0x3B3C, 0x3B3D, 0x3B3E, 0x3B37, 0x3B38, 0x3B39, 0x3B3A, 0x3B53, 0x3B54, 0x3B55, 0x3B56, 0x3B4F, 0x3B50, 0x3B51, 0x3B52, 0x3B4B, 0x3B4C, 0x3B4D, 0x3B4E, 0x3B47, 0x3B48, 0x3B49, 0x3B4A, 0x3B23, 0x3B24, 0x3B25, 0x3B26, 0x3B1F, 0x3B20, 0x3B21, 0x3B22, 0x3B1B, 0x3B1C, 0x3B1D, 0x3B1E, 0x3B17, 0x3B18, 0x3B19, 0x3B1A, 0x3B33, 0x3B34, 0x3B35, 0x3B36, 0x3B2F, 0x3B30, 0x3B31, 0x3B32, 0x3B2B, 0x3B2C, 0x3B2D, 0x3B2E, 0x3B27, 0x3B28, 0x3B29, 0x3B2A, 0x3C03, 0x3C04, 0x3C05, 0x3C06, 0x3BFF, 0x3C00, 0x3C01, 0x3C02, 0x3BFB, 0x3BFC, 0x3BFD, 0x3BFE, 0x3BF7, 0x3BF8, 0x3BF9, 0x3BFA, 0x3C13, 0x3C14, 0x3C15, 0x3C16, 0x1782, 0x3C0F, 0x3C10, 0x3C11, 0x3C12, 0x1789, 0x3C0B, 0x178B, 0x3C0C, 0x3C0D, 0x178C, 0x3C0E, 0x178E, 0x3C07, 0x3C08, 0x1773, 0x1771, 0x3C09, 0x1791, 0x3C0A, 0x3BE5, 0x3BE6, 0x3BE7, 0x3BE8, 0x3BE1, 0x3BE2, 0x3BE3, 0x3BE4, 0x3BDD, 0x3BDE, 0x3BDF, 0x3BE0, 0x3BD9, 0x3BDA, 0x3BDB, 0x3BDC, 0x3BF3, 0x3BF4, 0x3BF5, 0x01A2, 0x0198, 0x01DF, 0x01C9, 0x0209, 0x01F5, 0x021F, 0x0215, 0x0234, 0x022A, 0x3BF6, 0x3BEF, 0x3BF0, 0x3BF1, 0x3BF2, 0x3B7A, 0x3B7B, 0x3BED, 0x3BEE, 0x3BE9, 0x3BEA, 0x3BEB, 0x3BEC, 0x3BC5, 0x3BC6, 0x3BC7, 0x3BC8, 0x3BC1, 0x3BC2, 0x3BC3, 0x3BC4, 0x3BBD, 0x3BBE, 0x3BBF, 0x3BC0, 0x3BB9, 0x3BBA, 0x3BBB, 0x3BBC, 0x3BD5, 0x3BD6, 0x3BD7, 0x3BD8, 0x3BD1, 0x3BD2, 0x3BD3, 0x3BD4, 0x3BCD, 0x3BCE, 0x3BCF, 0x3BD0, 0x3BC9, 0x3BCA, 0x3BCB, 0x3BCC, 0x2A64, 0x2A5E, 0x2B92, 0x2B90, 0x2A72, 0x2A70, 0x2AE9, 0x2A74, 0x2AEF, 0x2AEB, 0x2AFB, 0x2AF9, 0x2B09, 0x2AFE, 0x1793, 0x2B0D, 0x1795, 0x1792, 0x179C, 0x179D, 0x1794, 0x1796, 0x1797, 0x179B, 0x1799, 0x2C9F, 0x17A2, 0x2BE5, 0x3BA5, 0x179E, 0x17A6, 0x1798, 0x3BA6, 0x17AB, 0x2CDB, 0x17AA, 0x179A, 0x179F, 0x17A0, 0x17A1, 0x2CF3, 0x2D0F, 0x3BA7, 0x2D0B, 0x2CDF, 0x2D08, 0x2CFF, 0x2CFC, 0x2D07, 0x2D06, 0x2D0C, 0x2D04, 0x2CD7, 0x2CD1, 0x2CE1, 0x2CDD, 0x2CF0, 0x2CEF, 0x01DF, 0x2CF1, 0x01A2, 0x0215, 0x021F, 0x01C9, 0x0209, 0x0112, 0x0198, 0x3BA8, 0x0111, 0x01F5, 0x022A, 0x3BA1, 0x3BA2, 0x3BA3, 0x3BA4, 0x3B9D, 0x3B9E, 0x3B9F, 0x3BA0, 0x3B99, 0x3B9A, 0x3B9B, 0x3B9C, 0x3BB5, 0x3BB6, 0x3BB7, 0x3BB8, 0x3BB1, 0x3BB2, 0x3BB3, 0x3BB4, 0x3BAD, 0x3BAE, 0x3BAF, 0x3BB0, 0x3BA9, 0x3BAA, 0x3BAB, 0x3BAC, 0x3C83, 0x3C84, 0x3C85, 0x3C96, 0x3C8F, 0x3C90, 0x3C91, 0x3C62, 0x3C5B, 0x3C5C, 0x3C59, 0x3C46, 0x3C3F, 0x2C19, 0x2C00, 0x3C40, 0x3C41, 0x3C42, 0x3C3B, 0x2C6D, 0x3C3C, 0x3C3D, 0x3C3E, 0x3C37, 0x3C38, 0x3C39, 0x3C3A, 0x3C53, 0x3C54, 0x3C55, 0x3C26, 0x3C1F, 0x3C20, 0x3C21, 0x3C22, 0x3C1B, 0x3C1C, 0x3C1D, 0x3C1E, 0x3C17, 0x3C18, 0x3C19, 0x3C1A, 0x3C33, 0x3C34, 0x3C35, 0x3C36, 0x3C2F, 0x3C30, 0x3C31, 0x3C32, 0x3C2B, 0x3C2C, 0x3C2D, 0x3C2E, 0x3C27, 0x3C28, 0x3C29, 0x3C2A, 0x320A, 0x3206, 0x0031, 0x002D, 0x0036, 0x002F, 0x0034, 0x0032, 0x0033, 0x002E, 0x0035, 0x0030, 0x3207, 0x3208, 0x3209, 0x320B, 0x31F2, 0x31F3, 0x31F4, 0x31F5, 0x31EE, 0x31EF, 0x31F0, 0x31F1, 0x31EB, 0x31EA, 0x31EC, 0x31ED, 0x31E6, 0x31E7, 0x31E8, 0x31E9, 0x3202, 0x3203, 0x3205, 0x3204, 0x31FE, 0x31FF, 0x3200, 0x3201, 0x31FA, 0x31FB, 0x01D1, 0x01B3, 0x01FC, 0x01E6, 0x021C, 0x0210, 0x0231, 0x0226, 0x01D2, 0x31FC, 0x01D4, 0x01D3, 0x01D6, 0x01D5, 0x01D8, 0x01D7, 0x01DA, 0x01D9, 0x01E7, 0x01E6, 0x01E9, 0x01E8, 0x01EB, 0x01EA, 0x31FD, 0x31F6, 0x31F7, 0x31F8, 0x31F9, 0x31D2, 0x31D3, 0x31D4, 0x31E5, 0x31DE, 0x31DF, 0x31E0, 0x31DB, 0x31DC, 0x3CA8, 0x3CA9, 0x3CAA, 0x3983, 0x3984, 0x3985, 0x3986, 0x397F, 0x3980, 0x3981, 0x3982, 0x397B, 0x397C, 0x397D, 0x397E, 0x3977, 0x3978, 0x3979, 0x397A, 0x3993, 0x3994, 0x3995, 0x3996, 0x398F, 0x3990, 0x3991, 0x3992, 0x398B, 0x398C, 0x398D, 0x398E, 0x3987, 0x3988, 0x3989, 0x398A, 0x3963, 0x3964, 0x3965, 0x3966, 0x395F, 0x3960, 0x3961, 0x3962, 0x395B, 0x395C, 0x395D, 0x395E, 0x3957, 0x3958, 0x3959, 0x395A, 0x3973, 0x3974, 0x3975, 0x3976, 0x396F, 0x3970, 0x3971, 0x3972, 0x396B, 0x396C, 0x396D, 0x396E, 0x3967, 0x3968, 0x3969, 0x396A, 0x3943, 0x3944, 0x3945, 0x3946, 0x393F, 0x3940, 0x3941, 0x3942, 0x01ED, 0x393B, 0x393C, 0x393D, 0x01EC, 0x393E, 0x3937, 0x3938, 0x3939, 0x393A, 0x3953, 0x3954, 0x3955, 0x3956, 0x394F, 0x3950, 0x3951, 0x3952, 0x394B, 0x394C, 0x394D, 0x394E, 0x3947, 0x3948, 0x3949, 0x394A, 0x3923, 0x3924, 0x3925, 0x3926, 0x391F, 0x3920, 0x3921, 0x3922, 0x391B, 0x391C, 0x391D, 0x391E, 0x3917, 0x3918, 0x3919, 0x391A, 0x3933, 0x3934, 0x3935, 0x3936, 0x392F, 0x3930, 0x3931, 0x3932, 0x392B, 0x392C, 0x392D, 0x392E, 0x3927, 0x3928, 0x3929, 0x392A, 0x3A03, 0x3A04, 0x3A05, 0x3A06, 0x39FF, 0x3A00, 0x3A01, 0x3A02, 0x39FB, 0x39FC, 0x39FD, 0x39FE, 0x39F7, 0x39F8, 0x39F9, 0x39FA, 0x3A13, 0x3A14, 0x3A15, 0x3A16, 0x3A0F, 0x3A10, 0x3A11, 0x3A12, 0x3A0B, 0x3A0C, 0x3A0D, 0x3A0E, 0x3A07, 0x3A08, 0x3A09, 0x3A0A, 0x39E3, 0x39E4, 0x39E5, 0x39E6, 0x39DF, 0x39E0, 0x39E1, 0x39E2, 0x39DB, 0x39DC, 0x39DD, 0x39DE, 0x39D7, 0x39D8, 0x39D9, 0x39DA, 0x39F3, 0x39F4, 0x39F5, 0x39F6, 0x39EF, 0x39F0, 0x3210, 0x39F1, 0x39F2, 0x3212, 0x39EB, 0x3216, 0x39EC, 0x39ED, 0x39EE, 0x321E, 0x3224, 0x3222, 0x3228, 0x3226, 0x322C, 0x322A, 0x39E7, 0x39E8, 0x39E9, 0x39EA, 0x39C3, 0x3236, 0x39C4, 0x39C5, 0x3240, 0x323E, 0x3244, 0x3242, 0x3248, 0x39C6, 0x324C, 0x324A, 0x320F, 0x320D, 0x3213, 0x3211, 0x3217, 0x39BF, 0x321B, 0x3219, 0x39C0, 0x39C1, 0x39C2, 0x39BB, 0x39BC, 0x39BD, 0x39BE, 0x39B7, 0x322F, 0x322D, 0x3233, 0x3231, 0x3237, 0x39B8, 0x323B, 0x3239, 0x39B9, 0x39BA, 0x39D3, 0x39D4, 0x39D5, 0x3245, 0x39D6, 0x39CF, 0x39D0, 0x39D1, 0x39D2, 0x39CB, 0x39CC, 0x39CD, 0x39CE, 0x39C7, 0x39C8, 0x39C9, 0x39CA, 0x39A3, 0x39A4, 0x39A5, 0x39A6, 0x399F, 0x39A0, 0x39A1, 0x39A2, 0x399B, 0x399C, 0x399D, 0x399E, 0x3997, 0x3998, 0x3999, 0x2D12, 0x2D13, 0x2D14, 0x2D15, 0x2D16, 0x2D17, 0x2D18, 0x2D19, 0x2D1A, 0x2D1B, 0x2D1C, 0x2D1D, 0x2D1E, 0x2D1F, 0x2D20, 0x2D21, 0x2D22, 0x2D23, 0x2D24, 0x2D25, 0x2D26, 0x399A, 0x2D27, 0x2D28, 0x39B3, 0x39B4, 0x2D2B, 0x2D2C, 0x2D2D, 0x2D2E, 0x39B5, 0x39B6, 0x2D31, 0x2D32, 0x2D33, 0x2D34, 0x2D35, 0x2D36, 0x2D37, 0x2D38, 0x39AF, 0x39B0, 0x2D3B, 0x2D3C, 0x39B1, 0x39B2, 0x2D3F, 0x39AB, 0x39AC, 0x39AD, 0x2D43, 0x2D44, 0x39AE, 0x39A7, 0x2D47, 0x2D48, 0x2D49, 0x2D4A, 0x39A8, 0x2D4C, 0x2D4D, 0x2D4E, 0x2D4F, 0x2D50, 0x39A9, 0x39AA, 0x3A83, 0x3A84, 0x3A85, 0x3A86, 0x3A7F, 0x3A80, 0x2D59, 0x2D5A, 0x3A81, 0x3A82, 0x2D5D, 0x2D5E, 0x3A7B, 0x3A7C, 0x2D61, 0x2D62, 0x3A7D, 0x3A7E, 0x2D65, 0x2D66, 0x2D67, 0x2D68, 0x3A77, 0x3A78, 0x2D6B, 0x2D6C, 0x3A79, 0x3A7A, 0x3A93, 0x3A94, 0x2D71, 0x2D72, 0x3A95, 0x3A96, 0x2D75, 0x2D76, 0x2D77, 0x2D78, 0x3A8F, 0x3A90, 0x2D7B, 0x2D7C, 0x3A91, 0x3A92, 0x3A8B, 0x3A8C, 0x2D81, 0x2D82, 0x2D83, 0x2D84, 0x2D85, 0x2D86, 0x2D87, 0x2D88, 0x3A8D, 0x3A8E, 0x2D8B, 0x2D8C, 0x2D8D, 0x2D8E, 0x2D8F, 0x2D90, 0x2D91, 0x2D92, 0x3A87, 0x2D94, 0x3A88, 0x2D96, 0x2D97, 0x2D98, 0x2D99, 0x3A89, 0x2D9B, 0x3A8A, 0x2D9D, 0x2D9E, 0x2D9F, 0x3A63, 0x3A64, 0x3A65, 0x3A66, 0x3A5F, 0x3A60, 0x3A61, 0x3A62, 0x3A5B, 0x3A5C, 0x3A5D, 0x3A5E, 0x3A57, 0x2DAD, 0x2DAE, 0x2DAF, 0x3A58, 0x2DB1, 0x2DB2, 0x2DB3, 0x2DB4, 0x2DB5, 0x2DB6, 0x2DB7, 0x3A59, 0x3A5A, 0x3A73, 0x2DBB, 0x2DBC, 0x3A74, 0x3A75, 0x3A76, 0x3A6F, 0x3A70, 0x3A71, 0x3A72, 0x3A6B, 0x3A6C, 0x3A6D, 0x2DC7, 0x2DC8, 0x2DC9, 0x2DCA, 0x3A6E, 0x2DCC, 0x2DCD, 0x2DCE, 0x2DCF, 0x2DD0, 0x3A67, 0x3A68, 0x3A69, 0x3A6A, 0x2DD5, 0x3A43, 0x3A44, 0x3A45, 0x3A46, 0x3A3F, 0x3A40, 0x3A41, 0x2DDD, 0x2DDE, 0x2DDF, 0x2DE0, 0x3A42, 0x3A3B, 0x3A3C, 0x3A3D, 0x3A3E, 0x2DE6, 0x3A37, 0x3A38, 0x3A39, 0x3A3A, 0x2DEB, 0x2DEC, 0x3A53, 0x3A54, 0x3A55, 0x3A56, 0x2DF1, 0x2DF2, 0x3A4F, 0x3A50, 0x2DF5, 0x2DF6, 0x2DF7, 0x2DF8, 0x2DF9, 0x2DFA, 0x2DFB, 0x2DFC, 0x2DFD, 0x2DFE, 0x2DFF, 0x2E00, 0x3A51, 0x3A52, 0x2E03, 0x2E04, 0x3A4B, 0x3A4C, 0x2E07, 0x2E08, 0x3A4D, 0x3A4E, 0x3A47, 0x3A48, 0x2E0D, 0x2E0E, 0x2E0F, 0x2E10, 0x3A49, 0x3A4A, 0x3A23, 0x2E4F, 0x3A24, 0x3A25, 0x3A26, 0x3A1F, 0x2E19, 0x2E1A, 0x2E1F, 0x3A20, 0x2E1D, 0x2E1E, 0x2E20, 0x3A21, 0x2E38, 0x3A22, 0x3A1B, 0x3A1C, 0x3A1D, 0x3A1E, 0x3A17, 0x3A18, 0x3A19, 0x3A1A, 0x3A33, 0x3A34, 0x3A35, 0x3A36, 0x2E50, 0x3A2F, 0x2E31, 0x2E32, 0x2E33, 0x2E34, 0x2E35, 0x2E36, 0x3A30, 0x2E47, 0x3A31, 0x3A32, 0x2E4B, 0x2E3C, 0x3A2B, 0x3A2C, 0x3A2D, 0x3A2E, 0x2E41, 0x2E42, 0x3A27, 0x2E44, 0x2E45, 0x2E46, 0x3A28, 0x2E48, 0x2E49, 0x2E4A, 0x2E43, 0x2E4C, 0x2E4D, 0x2E4E, 0x3A29, 0x3A2A, 0x2E51, 0x3B03, 0x2E53, 0x2E54, 0x3B04, 0x3B05, 0x2E57, 0x2E58, 0x2E59, 0x2E5A, 0x3B06, 0x3AFF, 0x2E5D, 0x2E5E, 0x3B00, 0x2E60, 0x3B01, 0x3B02, 0x3AFB, 0x3AFC, 0x3AFD, 0x3AFE, 0x3AF7, 0x3AF8, 0x2E69, 0x2E6A, 0x3AF9, 0x3AFA, 0x2E6D, 0x2E6E, 0x3B13, 0x2E70, 0x3B14, 0x2E75, 0x2E73, 0x2E74, 0x2E77, 0x2E76, 0x2E37, 0x2E78, 0x3B15, 0x2E7A, 0x2E3B, 0x3B16, 0x3B0F, 0x3B10, 0x3B11, 0x3B12, 0x2E81, 0x2E82, 0x2E83, 0x2E84, 0x2E85, 0x2E86, 0x2E87, 0x2E88, 0x2E89, 0x2E8A, 0x2E8B, 0x2E8C, 0x3B0B, 0x3B0C, 0x2E8F, 0x2E90, 0x2E91, 0x2E92, 0x2E93, 0x2E94, 0x2E95, 0x2E96, 0x2E97, 0x2E98, 0x2E99, 0x2E9A, 0x2E9B, 0x2E9C, 0x2E9D, 0x2E9E, 0x2E9F, 0x3B0D, 0x3B0E, 0x3B07, 0x3B08, 0x3B09, 0x2EA5, 0x2EA6, 0x2EA7, 0x2EA8, 0x2EA9, 0x3B0A, 0x3AE3, 0x3AE4, 0x2EAD, 0x2EAE, 0x2EAF, 0x3AE5, 0x2EB1, 0x2EB2, 0x2EB3, 0x2EB4, 0x2EB5, 0x2EB6, 0x2EB7, 0x2EB8, 0x2EB9, 0x2EBA, 0x2EBB, 0x2EBC, 0x3AE6, 0x3ADF, 0x2EBF, 0x2EC0, 0x2EC1, 0x2EC2, 0x2EC3, 0x2EC4, 0x2EC5, 0x2EC6, 0x2EC7, 0x2EC8, 0x2EC9, 0x2ECA, 0x2ECB, 0x2ECC, 0x2ECD, 0x2ECE, 0x2ECF, 0x2ED0, 0x2ED1, 0x2ED2, 0x2ED3, 0x2ED4, 0x2ED5, 0x2ED6, 0x2ED7, 0x2ED8, 0x2ED9, 0x2EDA, 0x2EDB, 0x2EDC, 0x2EDD, 0x2EDE, 0x2EDF, 0x2EE0, 0x3AE0, 0x3AE1, 0x3AE2, 0x2EE4, 0x3ADB, 0x3ADC, 0x3ADD, 0x3ADE, 0x2EE9, 0x2EEA, 0x3AD7, 0x3AD8, 0x2EED, 0x2EEE, 0x2EEF, 0x2EF0, 0x3AD9, 0x3ADA, 0x3AF3, 0x3AF4, 0x2EF5, 0x2EF6, 0x3AF5, 0x3AF6, 0x3AEF, 0x3AF0, 0x3AF1, 0x3AF2, 0x3AEB, 0x3AEC, 0x3AED, 0x3AEE, 0x2F01, 0x2F02, 0x2F03, 0x2F04, 0x3AE7, 0x2F06, 0x2F07, 0x2F08, 0x3AE8, 0x3AE9, 0x2F0B, 0x3AEA, 0x3AC3, 0x3AC4, 0x3AC5, 0x3AC6, 0x3ABF, 0x3AC0, 0x3AC1, 0x3AC2, 0x3ABB, 0x3ABC, 0x3ABD, 0x3ABE, 0x3AB7, 0x3AB8, 0x3AB9, 0x3ABA, 0x3AD3, 0x3AD4, 0x3AD5, 0x3AD6, 0x3ACF, 0x3AD0, 0x3AD1, 0x3AD2, 0x3ACB, 0x3ACC, 0x3ACD, 0x3ACE, 0x3AC7, 0x3AC8, 0x3AC9, 0x3ACA, 0x3AA3, 0x3AA4, 0x3AA5, 0x3AA6, 0x3A9F, 0x3AA0, 0x3AA1, 0x3AA2, 0x3A9B, 0x3A9C, 0x3A9D, 0x3A9E, 0x3A97, 0x3A98, 0x3A99, 0x3A9A, 0x3AB3, 0x3AB4, 0x3AB5, 0x3AB6, 0x3AAF, 0x3AB0, 0x3AB1, 0x3AB2, 0x3AAB, 0x3AAC, 0x3AAD, 0x3AAE, 0x3AA7, 0x3AA8, 0x3AA9, 0x3AAA, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x352B, 0x352C, 0x352D, 0x352E, 0x3527, 0x3528, 0x3529, 0x352A, 0x3523, 0x3524, 0x3525, 0x3526, 0x351F, 0x3520, 0x3521, 0x3522, 0x353B, 0x353C, 0x353D, 0x3537, 0x3538, 0x3539, 0x353A, 0x3533, 0x3534, 0x3535, 0x3536, 0x352F, 0x3530, 0x3531, 0x3532, 0x28A6, 0x28A7, 0x28A8, 0x28A9, 0x28A2, 0x28A3, 0x28A4, 0x28A5, 0x289E, 0x289F, 0x28A0, 0x28A1, 0x289A, 0x289B, 0x289C, 0x289D, 0x28B2, 0x28AE, 0x28AF, 0x28B0, 0x28B1, 0x28AA, 0x28AB, 0x28AC, 0x28AD, 0x2886, 0x2887, 0x2888, 0x2889, 0x2882, 0x2883, 0x2884, 0x2885, 0x287E, 0x287F, 0x2F9A, 0x267B, 0x267A, 0x267D, 0x267C, 0x267F, 0x2880, 0x2881, 0x2680, 0x287A, 0x287B, 0x2685, 0x287C, 0x287D, 0x2896, 0x2681, 0x2897, 0x2898, 0x2899, 0x2892, 0x2893, 0x267E, 0x2894, 0x2895, 0x288E, 0x2682, 0x2683, 0x2684, 0x2689, 0x2697, 0x2696, 0x2FB7, 0x2698, 0x288F, 0x2890, 0x2891, 0x288A, 0x288B, 0x288C, 0x288D, 0x28CF, 0x28D0, 0x28CB, 0x28CC, 0x28CD, 0x28CE, 0x28C7, 0x28C8, 0x28C9, 0x28CA, 0x28C3, 0x28C4, 0x28C5, 0x28C6, 0x28BF, 0x28C0, 0x28C1, 0x28C2, 0x28BB, 0x28BC, 0x28BD, 0x28BE, 0x28B7, 0x28B8, 0x28B9, 0x28BA, 0x28B3, 0x28B4, 0x28B5, 0x28B6, 0x32BF, 0x32C0, 0x32C1, 0x32C2, 0x32BB, 0x32BC, 0x32BD, 0x32BE, 0x32B7, 0x32B8, 0x32B9, 0x32BA, 0x0145, 0x0146, 0x32B6, 0x32CB, 0x32CC, 0x32CD, 0x32C7, 0x32C8, 0x32C9, 0x32CA, 0x32C3, 0x32C4, 0x32C5, 0x32C6, 0x0141, 0x0142, 0x0143, 0x0144, 0x022A, 0x0234, 0x0140, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x26E7, 0x26E6, 0x01C9, 0x26E8, 0x01DF, 0x32B2, 0x32B3, 0x32B4, 0x32B5, 0x32AE, 0x32AF, 0x32B0, 0x3012, 0x32B1, 0x32AA, 0x32AB, 0x32AC, 0x32AD, 0x182A, 0x32A6, 0x32A7, 0x182F, 0x182E, 0x1831, 0x1830, 0x32A8, 0x1832, 0x1834, 0x1833, 0x1836, 0x1835, 0x1838, 0x1837, 0x183A, 0x32A9, 0x183C, 0x183B, 0x3292, 0x3293, 0x3294, 0x3295, 0x328E, 0x328F, 0x3290, 0x3291, 0x328A, 0x328B, 0x328C, 0x328D, 0x3286, 0x3287, 0x3288, 0x3289, 0x32A2, 0x32A3, 0x32A4, 0x32A5, 0x329E, 0x329F, 0x32A0, 0x32A1, 0x329A, 0x329B, 0x329C, 0x329D, 0x3296, 0x3297, 0x3298, 0x3299, 0x012B, 0x0127, 0x0128, 0x0129, 0x012A, 0x0123, 0x0124, 0x0125, 0x0126, 0x021F, 0x022A, 0x0234, 0x0122, 0x1BA3, 0x1BA4, 0x1BA5, 0x1BA6, 0x1B9F, 0x1BA0, 0x1BA1, 0x1BA2, 0x1B9B, 0x1B9C, 0x1B9D, 0x1B9E, 0x1B99, 0x1B9A, 0x1858, 0x01DF, 0x01F5, 0x0209, 0x0215, 0x022A, 0x0234, 0x01A2, 0x306E, 0x01C9, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x1855, 0x1856, 0x1857, 0x1851, 0x1852, 0x1853, 0x1854, 0x184D, 0x184E, 0x184F, 0x1850, 0x1849, 0x184A, 0x184B, 0x184C, 0x32DA, 0x32DB, 0x32DC, 0x32D2, 0x182B, 0x182C, 0x182D, 0x1845, 0x1846, 0x1847, 0x1848, 0x1841, 0x1842, 0x1843, 0x1844, 0x183D, 0x1BA8, 0x1BA7, 0x1BAA, 0x1BA9, 0x1BAC, 0x20FC, 0x1BAE, 0x1BAD, 0x211D, 0x1BAF, 0x1BB2, 0x1BB1, 0x211B, 0x1BAB, 0x211F, 0x2121, 0x183E, 0x183F, 0x1840, 0x1839, 0x26E9, 0x26E2, 0x26E3, 0x26E4, 0x1BB3, 0x1BB0, 0x26E5, 0x26DE, 0x26DF, 0x1BB4, 0x1BB5, 0x1BB6, 0x20F2, 0x26E0, 0x20F6, 0x20F8, 0x01F5, 0x20F4, 0x20FE, 0x26E1, 0x022A, 0x26DA, 0x26DB, 0x26DC, 0x2100, 0x26DD, 0x26F6, 0x26F7, 0x2112, 0x211A, 0x26F8, 0x2116, 0x26F9, 0x211C, 0x211E, 0x2120, 0x2122, 0x2128, 0x2126, 0x26F2, 0x26F3, 0x2124, 0x26F4, 0x26F5, 0x26EE, 0x2119, 0x26EF, 0x26F0, 0x26F1, 0x26EA, 0x26EB, 0x26EC, 0x26ED, 0x26C6, 0x20EE, 0x26C7, 0x20EA, 0x20EC, 0x26C8, 0x20F0, 0x2105, 0x2125, 0x20E4, 0x2109, 0x2115, 0x210F, 0x210B, 0x2107, 0x20E6, 0x2111, 0x26C9, 0x20E8, 0x2117, 0x26C2, 0x26C3, 0x2113, 0x26C4, 0x26C5, 0x2118, 0x26BE, 0x26BF, 0x210D, 0x26C0, 0x2114, 0x26C1, 0x26BA, 0x26BB, 0x26BC, 0x26BD, 0x26D6, 0x26D7, 0x26D8, 0x26D9, 0x26D2, 0x26D3, 0x26D4, 0x26D5, 0x26CE, 0x26CF, 0x26D0, 0x26D1, 0x26CA, 0x26CB, 0x26CC, 0x26CD, 0x26A6, 0x26A7, 0x26A8, 0x26A9, 0x26A2, 0x34FF, 0x26A3, 0x34FE, 0x26A4, 0x26A5, 0x269E, 0x269F, 0x26A0, 0x3500, 0x26A1, 0x269A, 0x269B, 0x269C, 0x269D, 0x26B6, 0x3501, 0x26B7, 0x26B8, 0x26B9, 0x26B2, 0x26B3, 0x26B4, 0x26B5, 0x26AE, 0x26AF, 0x34FC, 0x26B0, 0x34FA, 0x26B1, 0x34FB, 0x26AA, 0x26AB, 0x26AC, 0x26AD, 0x2686, 0x2687, 0x2688, 0x2699, 0x2692, 0x2693, 0x2694, 0x2695, 0x268E, 0x268F, 0x2690, 0x2691, 0x268A, 0x268B, 0x34E5, 0x268C, 0x268D, 0x2766, 0x2767, 0x2768, 0x2769, 0x2762, 0x2763, 0x2764, 0x2765, 0x275E, 0x275F, 0x2760, 0x2761, 0x275A, 0x275B, 0x275C, 0x275D, 0x2776, 0x2777, 0x2778, 0x2779, 0x2772, 0x2773, 0x2774, 0x34F7, 0x2775, 0x276E, 0x276F, 0x2770, 0x2771, 0x276A, 0x276B, 0x276C, 0x276D, 0x2746, 0x2747, 0x2748, 0x2749, 0x2742, 0x2743, 0x2744, 0x2745, 0x273E, 0x273F, 0x2740, 0x2741, 0x273A, 0x34F6, 0x273B, 0x273C, 0x273D, 0x2756, 0x2757, 0x2758, 0x2759, 0x2752, 0x2753, 0x2754, 0x2755, 0x274E, 0x274F, 0x2750, 0x2751, 0x274A, 0x274B, 0x274C, 0x274D, 0x2726, 0x2727, 0x2728, 0x2729, 0x2722, 0x2723, 0x2724, 0x2725, 0x271E, 0x271F, 0x2720, 0x2721, 0x271A, 0x271B, 0x271C, 0x271D, 0x2736, 0x2737, 0x2738, 0x2739, 0x2732, 0x2733, 0x2734, 0x2735, 0x272E, 0x272F, 0x2730, 0x2731, 0x272A, 0x272B, 0x272C, 0x272D, 0x2706, 0x2707, 0x2708, 0x2709, 0x2702, 0x2703, 0x2704, 0x2705, 0x26FE, 0x26FF, 0x2700, 0x2701, 0x26FA, 0x26FB, 0x26FC, 0x26FD, 0x2716, 0x2717, 0x2718, 0x2719, 0x2712, 0x2713, 0x2714, 0x2715, 0x270E, 0x270F, 0x2710, 0x2711, 0x270A, 0x270B, 0x270C, 0x270D, 0x27E6, 0x27E7, 0x27E8, 0x27E9, 0x27E2, 0x27E3, 0x27E4, 0x27E5, 0x27DE, 0x34E2, 0x34E3, 0x34E4, 0x34E9, 0x34EB, 0x27DF, 0x34ED, 0x34EC, 0x34EA, 0x27E0, 0x27E1, 0x27DA, 0x34E6, 0x34EE, 0x34E7, 0x34E8, 0x27DB, 0x31B5, 0x27DC, 0x27DD, 0x27F6, 0x27F7, 0x27F8, 0x27F9, 0x27F2, 0x27F3, 0x27F4, 0x27F5, 0x27EE, 0x34EF, 0x34F0, 0x34F1, 0x3502, 0x3503, 0x3504, 0x3505, 0x27EF, 0x27F0, 0x27F1, 0x27EA, 0x27EB, 0x27EC, 0x27ED, 0x27C6, 0x27C7, 0x27C8, 0x27C9, 0x27C2, 0x27C3, 0x27C4, 0x27C5, 0x27BE, 0x27BF, 0x27C0, 0x27C1, 0x27BA, 0x27BB, 0x27BC, 0x27BD, 0x27D6, 0x27D7, 0x27D8, 0x27D9, 0x27D2, 0x27D3, 0x27D4, 0x27D5, 0x27CE, 0x27CF, 0x27D0, 0x27D1, 0x27CA, 0x27CB, 0x27CC, 0x27CD, 0x27A6, 0x27A7, 0x27A8, 0x27A9, 0x27A2, 0x27A3, 0x27A4, 0x27A5, 0x279E, 0x279F, 0x27A0, 0x27A1, 0x279A, 0x279B, 0x279C, 0x279D, 0x252F, 0x27B6, 0x27B7, 0x27B8, 0x27B9, 0x27B2, 0x27B3, 0x27B4, 0x27B5, 0x27AE, 0x27AF, 0x27B0, 0x27B1, 0x27AA, 0x27AB, 0x27AC, 0x27AD, 0x2786, 0x2787, 0x2788, 0x2789, 0x2782, 0x2783, 0x2784, 0x2785, 0x277E, 0x277F, 0x2780, 0x2781, 0x277A, 0x277B, 0x277C, 0x277D, 0x2796, 0x2797, 0x2798, 0x2799, 0x2792, 0x2793, 0x2794, 0x2795, 0x278E, 0x278F, 0x2790, 0x2791, 0x278A, 0x278B, 0x278C, 0x278D, 0x2866, 0x2867, 0x2868, 0x2869, 0x2862, 0x2863, 0x2864, 0x2865, 0x285E, 0x285F, 0x2860, 0x2861, 0x285A, 0x285B, 0x285C, 0x285D, 0x2876, 0x2877, 0x2878, 0x2879, 0x2872, 0x2873, 0x2874, 0x2875, 0x286E, 0x286F, 0x2870, 0x2871, 0x286A, 0x286B, 0x286C, 0x286D, 0x2846, 0x2847, 0x2848, 0x2849, 0x2842, 0x2843, 0x2844, 0x2845, 0x283E, 0x283F, 0x2840, 0x2841, 0x283A, 0x283B, 0x283C, 0x283D, 0x2856, 0x2857, 0x2858, 0x2859, 0x2852, 0x2853, 0x2854, 0x2855, 0x284E, 0x284F, 0x2850, 0x2851, 0x284A, 0x284B, 0x284C, 0x284D, 0x2826, 0x2827, 0x2828, 0x2829, 0x2822, 0x2823, 0x2824, 0x2825, 0x281E, 0x281F, 0x2820, 0x2821, 0x281A, 0x281B, 0x281C, 0x281D, 0x2836, 0x2837, 0x2838, 0x2839, 0x2832, 0x2833, 0x2834, 0x2835, 0x282E, 0x282F, 0x2830, 0x2831, 0x282A, 0x282B, 0x282C, 0x282D, 0x2806, 0x2807, 0x2808, 0x2809, 0x2802, 0x2803, 0x2804, 0x2805, 0x27FE, 0x27FF, 0x2800, 0x2801, 0x27FA, 0x27FB, 0x27FC, 0x27FD, 0x2816, 0x2817, 0x2818, 0x2819, 0x2812, 0x2813, 0x2814, 0x2815, 0x280E, 0x280F, 0x2810, 0x2811, 0x280A, 0x280B, 0x280C, 0x280D, 0x327D, 0x3280, 0x327E, 0x3272, 0x3278, 0x3276, 0x3284, 0x327F, 0x3271, 0x3277, 0x3275, 0x3283, 0x326C, 0x326D, 0x326E, 0x326F, 0x3282, 0x3279, 0x3281, 0x327C, 0x327A, 0x3285, 0x3274, 0x3273, 0x327B, 0x3260, 0x3261, 0x3262, 0x3263, 0x325C, 0x325D, 0x325E, 0x325F, 0x3258, 0x3259, 0x325A, 0x325B, 0x3254, 0x3255, 0x3256, 0x3257, 0x3269, 0x326A, 0x3270, 0x326B, 0x3250, 0x3251, 0x3252, 0x3253, 0x3268, 0x324D, 0x324E, 0x324F, 0x3264, 0x3265, 0x32CF, 0x32CE, 0x32D1, 0x32D0, 0x32D3, 0x3266, 0x32D5, 0x32D4, 0x32D7, 0x32D6, 0x32D9, 0x32D8, 0x3267, 0x0139, 0x32DD, 0x013A, 0x013B, 0x013C, 0x022A, 0x0234, 0x0137, 0x0138, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x320C, 0x013D, 0x013E, 0x013F, 0x3225, 0x3227, 0x3229, 0x322B, 0x321D, 0x321F, 0x3221, 0x3223, 0x3215, 0x3247, 0x3249, 0x324B, 0x323D, 0x323F, 0x3241, 0x3243, 0x3235, 0x3220, 0x3218, 0x321A, 0x321C, 0x320E, 0x3214, 0x3246, 0x3238, 0x323A, 0x323C, 0x322E, 0x3230, 0x3232, 0x3234, 0x0203, 0x0204, 0x0205, 0x0210, 0x01FF, 0x0200, 0x0201, 0x0202, 0x01EF, 0x01FC, 0x01FD, 0x01FE, 0x01EE, 0x4624, 0x4629, 0x4626, 0x4628, 0x4622, 0x4627, 0x4621, 0x4625, 0x4623, 0x462A, 0x1766, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x1762, 0x1763, 0x1764, 0x1765, 0x175E, 0x175F, 0x1760, 0x1761, 0x175A, 0x175B, 0x175C, 0x175D, 0x1756, 0x1757, 0x1758, 0x1759, 0x1742, 0x1743, 0x1744, 0x1745, 0x0940, 0x093F, 0x173E, 0x173F, 0x1740, 0x1741, 0x0A3C, 0x0A3B, 0x173A, 0x173B, 0x09F3, 0x173C, 0x173D, 0x1736, 0x1737, 0x1738, 0x1739, 0x1752, 0x1753, 0x1754, 0x1755, 0x174E, 0x174F, 0x1750, 0x1751, 0x174A, 0x174B, 0x174C, 0x174D, 0x1746, 0x1747, 0x1748, 0x1749, 0x2C50, 0x2C54, 0x2C57, 0x2C5A, 0x2C44, 0x2C45, 0x2C4A, 0x2C4D, 0x2C38, 0x2C39, 0x2C3F, 0x2C40, 0x2C2E, 0x2C32, 0x2C33, 0x2C37, 0x2C7B, 0x2C7C, 0x2C83, 0x2C86, 0x2C72, 0x2C73, 0x2C74, 0x2C7A, 0x2C64, 0x2C6A, 0x2C6B, 0x2C5C, 0x2C62, 0x2BF3, 0x2BD8, 0x2BDD, 0x2BDE, 0x2BE6, 0x2BD1, 0x2BD2, 0x2BD7, 0x2C24, 0x2C28, 0x2C29, 0x2C2D, 0x2C18, 0x2C1D, 0x2C1E, 0x2C23, 0x2C0C, 0x2C11, 0x2C12, 0x2C06, 0x178F, 0x1790, 0x1772, 0x178A, 0x178D, 0x01F5, 0x0209, 0x0215, 0x021F, 0x01A2, 0x01C9, 0x01DF, 0x2C82, 0x461E, 0x461F, 0x4620, 0x1776, 0x1777, 0x1778, 0x1779, 0x176F, 0x1770, 0x1774, 0x1775, 0x176B, 0x176C, 0x176D, 0x176E, 0x1767, 0x1768, 0x1769, 0x176A, 0x1786, 0x1787, 0x1788, 0x1783, 0x1784, 0x1785, 0x177E, 0x177F, 0x1780, 0x1781, 0x177A, 0x177B, 0x177C, 0x177D, 0x2CB5, 0x2CB9, 0x2CBD, 0x2CBE, 0x2CA4, 0x2CA9, 0x2CAD, 0x2CB1, 0x2C97, 0x0265, 0x0290, 0x2C9B, 0x2C9D, 0x2CA2, 0x2C8B, 0x2C8E, 0x02DD, 0x2C91, 0x2C95, 0x2C10, 0x2CC3, 0x2CC6, 0x2CC9, 0x071A, 0x2BE3, 0x2BF5, 0x2C07, 0x02DC, 0x2CBF, 0x2CC2, 0x028F, 0x2CC5, 0x2CC8, 0x2CCC, 0x2C52, 0x2C55, 0x2C58, 0x2C5E, 0x2C47, 0x2C48, 0x2C4B, 0x0264, 0x2C4E, 0x2C3C, 0x2C3D, 0x2C41, 0x2C42, 0x2C30, 0x2C34, 0x0260, 0x028C, 0x0261, 0x2C35, 0x2C3A, 0x2C7F, 0x2C80, 0x2C84, 0x2C87, 0x2C76, 0x2C77, 0x2C78, 0x2C7E, 0x028E, 0x0263, 0x2C68, 0x2C6E, 0x2C6F, 0x2C70, 0x2C5F, 0x2C60, 0x2C66, 0x2C67, 0x2BF7, 0x2BFB, 0x2BFC, 0x2C01, 0x0394, 0x2BEA, 0x0366, 0x2BEE, 0x0542, 0x2BF0, 0x2BF6, 0x2BDB, 0x065E, 0x2BE0, 0x2BE2, 0x0234, 0x2CAF, 0x2C94, 0x2C99, 0x2C9A, 0x0556, 0x0555, 0x2C8D, 0x2C90, 0x04B9, 0x02E9, 0x071B, 0x0371, 0x0723, 0x0722, 0x03C9, 0x17A7, 0x17A8, 0x17A9, 0x070A, 0x17A3, 0x17A4, 0x17A5, 0x0597, 0x070B, 0x2BDF, 0x2BF2, 0x05F6, 0x2C04, 0x2CC1, 0x2CC4, 0x2CC7, 0x030D, 0x2CCB, 0x2B72, 0x2B75, 0x2A21, 0x2B7A, 0x03A2, 0x2B5F, 0x03A1, 0x2B64, 0x2B67, 0x2B6D, 0x2A99, 0x071C, 0x064B, 0x2A15, 0x0470, 0x2A17, 0x2B5D, 0x2ACF, 0x071E, 0x2AD2, 0x2AD5, 0x2AD8, 0x2A42, 0x04E3, 0x2A46, 0x2A4B, 0x050D, 0x05D8, 0x2A56, 0x063B, 0x2A3A, 0x2A3C, 0x2A3E, 0x0474, 0x2A40, 0x2A2D, 0x2A2F, 0x0569, 0x2A34, 0x0475, 0x042C, 0x2A37, 0x0423, 0x2B7D, 0x05A8, 0x05E7, 0x05BB, 0x0393, 0x0387, 0x2A23, 0x04A8, 0x049A, 0x03C3, 0x0576, 0x035C, 0x2A25, 0x2A28, 0x2A0B, 0x2A0E, 0x0530, 0x052F, 0x2A11, 0x2A9C, 0x29FF, 0x2A02, 0x2A05, 0x06A3, 0x2A08, 0x2A2A, 0x29F6, 0x29F9, 0x29FC, 0x2A1D, 0x29ED, 0x29F0, 0x29F3, 0x2AC3, 0x2AC6, 0x2AC9, 0x2ACC, 0x2AB7, 0x2ABA, 0x2ABD, 0x2AC0, 0x2AAB, 0x2AAE, 0x2AB1, 0x2AB4, 0x2A9F, 0x2AA2, 0x2AA5, 0x2AA8, 0x2CE6, 0x2D11, 0x2D0D, 0x2D10, 0x2CD4, 0x2CDE, 0x2D03, 0x2D05, 0x2D09, 0x2D0A, 0x2CFE, 0x2D00, 0x0668, 0x2D01, 0x2D02, 0x2B40, 0x2B43, 0x2B46, 0x2B49, 0x29E7, 0x29EA, 0x2B3A, 0x06FA, 0x2B3D, 0x06F9, 0x29E1, 0x2B32, 0x2B35, 0x29E4, 0x29DB, 0x29DE, 0x06F8, 0x06F7, 0x2B2E, 0x2CD9, 0x054B, 0x2CDA, 0x0703, 0x0702, 0x048C, 0x2CDC, 0x0400, 0x048D, 0x2CE0, 0x2CD3, 0x2CD5, 0x2CD6, 0x2CD8, 0x2CCE, 0x2CD0, 0x2CD2, 0x2CF7, 0x2CF8, 0x2CFB, 0x2CFD, 0x2CED, 0x2CEE, 0x2CF2, 0x2CF4, 0x2CE8, 0x2CE9, 0x2CEA, 0x2CEB, 0x2CE2, 0x2CE4, 0x2CE5, 0x2CE7, 0x2CAC, 0x2CB0, 0x2CB4, 0x2CB8, 0x2C75, 0x2C7D, 0x2C8A, 0x2CA8, 0x2C51, 0x2C5D, 0x2C65, 0x2C1F, 0x2C46, 0x16CE, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x16C5, 0x16C6, 0x16C7, 0x16C8, 0x16C1, 0x16C2, 0x16C3, 0x16C4, 0x16BD, 0x2D0E, 0x2CF9, 0x2CFA, 0x2CF6, 0x2CF5, 0x2CCF, 0x2CEC, 0x2CE3, 0x16C9, 0x16A5, 0x1699, 0x16AE, 0x16AF, 0x16B0, 0x16A9, 0x16AA, 0x16AB, 0x16AC, 0x462C, 0x462E, 0x462B, 0x462D, 0x1701, 0x1702, 0x16D0, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x16FD, 0x16FE, 0x16FF, 0x1700, 0x16F9, 0x16FA, 0x16FB, 0x16FC, 0x16F5, 0x16F6, 0x16F7, 0x16F8, 0x16F1, 0x16F2, 0x16F3, 0x16F4, 0x16DD, 0x16DE, 0x16DF, 0x16E0, 0x16D9, 0x16DA, 0x16DB, 0x16DC, 0x16D5, 0x16D6, 0x16D7, 0x16D8, 0x16D1, 0x16D2, 0x16D3, 0x16D4, 0x16ED, 0x16EE, 0x16EF, 0x16F0, 0x16E9, 0x16EA, 0x16EB, 0x16EC, 0x16E5, 0x16E6, 0x16E7, 0x16E8, 0x16E1, 0x16E2, 0x16E3, 0x16E4, 0x1706, 0x1707, 0x1709, 0x170B, 0x1733, 0x1734, 0x1735, 0x172F, 0x1730, 0x1731, 0x1732, 0x172B, 0x172C, 0x172D, 0x172E, 0x1727, 0x1728, 0x1729, 0x172A, 0x1713, 0x1714, 0x1715, 0x1716, 0x170F, 0x1710, 0x1711, 0x1712, 0x170A, 0x170C, 0x170D, 0x170E, 0x1703, 0x1704, 0x1705, 0x1708, 0x1723, 0x1724, 0x1725, 0x1726, 0x171F, 0x1720, 0x1721, 0x1722, 0x171B, 0x171C, 0x171D, 0x171E, 0x1717, 0x1718, 0x1719, 0x171A, 0x160A, 0x160B, 0x160C, 0x160D, 0x1606, 0x1607, 0x1608, 0x1609, 0x1602, 0x1603, 0x1604, 0x1605, 0x15EF, 0x15F0, 0x15F1, 0x15F2, 0x15EB, 0x15EC, 0x15ED, 0x15EE, 0x15E7, 0x15E8, 0x15E9, 0x15EA, 0x15E3, 0x15E4, 0x15E5, 0x15E6, 0x15FE, 0x15FF, 0x1600, 0x1601, 0x15FA, 0x15FB, 0x15FC, 0x15FD, 0x15F6, 0x15F7, 0x15F8, 0x15F9, 0x15F3, 0x15F4, 0x15F5, 0x06E7, 0x029D, 0x048A, 0x029B, 0x03C4, 0x0433, 0x0432, 0x06E8, 0x058B, 0x0294, 0x05ED, 0x0465, 0x0468, 0x0209, 0x0215, 0x0AB9, 0x162E, 0x0AE3, 0x0AD5, 0x0AD7, 0x0AD9, 0x0ACD, 0x0ACF, 0x0AD1, 0x165B, 0x0A97, 0x0A8D, 0x0AAA, 0x0A98, 0x0AC4, 0x0AB6, 0x0AB8, 0x0ABA, 0x0ABC, 0x0AAE, 0x0AB0, 0x0AB2, 0x0AB4, 0x08E3, 0x0904, 0x0903, 0x166A, 0x166C, 0x08E4, 0x08B9, 0x0918, 0x0917, 0x091A, 0x0919, 0x0083, 0x08F0, 0x08EF, 0x08F8, 0x08F7, 0x08FA, 0x08F9, 0x08F2, 0x08F1, 0x08F6, 0x08F5, 0x08E9, 0x08E0, 0x08DF, 0x08E6, 0x08E5, 0x090E, 0x090D, 0x0916, 0x090A, 0x0909, 0x090C, 0x08FC, 0x08D5, 0x08CF, 0x08D2, 0x08CB, 0x08CE, 0x08CD, 0x08BC, 0x0914, 0x0913, 0x0911, 0x08B2, 0x08AB, 0x08AA, 0x08AF, 0x08C0, 0x08BF, 0x08C1, 0x08BA, 0x08B8, 0x08BE, 0x08BD, 0x08B5, 0x08B4, 0x08B7, 0x08B6, 0x10D8, 0x10D9, 0x10AE, 0x10C7, 0x10D4, 0x10D5, 0x10D6, 0x10D7, 0x10BF, 0x10C0, 0x10C1, 0x10C2, 0x10BB, 0x10BC, 0x10BD, 0x10BE, 0x10B7, 0x10B8, 0x10B9, 0x10BA, 0x10B3, 0x10B4, 0x10B5, 0x10B6, 0x10D0, 0x10D1, 0x10D2, 0x10D3, 0x10CC, 0x10CD, 0x10CE, 0x10CF, 0x10C8, 0x10C9, 0x10CA, 0x10CB, 0x10C3, 0x10C4, 0x10C5, 0x10C6, 0x0B8B, 0x0B78, 0x0B81, 0x0B85, 0x0B7E, 0x0B27, 0x0B3C, 0x0B51, 0x10AF, 0x10B0, 0x10B1, 0x10B2, 0x10AA, 0x10AB, 0x10AC, 0x10AD, 0x10A6, 0x10A7, 0x10A8, 0x10A9, 0x10A2, 0x10A3, 0x31C7, 0x31C6, 0x31C9, 0x31C8, 0x31CC, 0x31CA, 0x31CD, 0x31CB, 0x31CF, 0x31CE, 0x31D1, 0x31D0, 0x10A4, 0x10A5, 0x31D5, 0x0B39, 0x31D8, 0x31D6, 0x31D7, 0x31D9, 0x0B3F, 0x31DA, 0x31DD, 0x0B42, 0x0B45, 0x0B2D, 0x31E1, 0x0B30, 0x31E3, 0x31E2, 0x0B33, 0x31E4, 0x0B36, 0x0B1E, 0x0B21, 0x0B24, 0x0B2A, 0x0B12, 0x0B15, 0x0B18, 0x0B1B, 0x0B6F, 0x0B72, 0x0B75, 0x0B7B, 0x0B63, 0x0B66, 0x0B69, 0x011D, 0x0198, 0x01A2, 0x0118, 0x0119, 0x011A, 0x011B, 0x128E, 0x128F, 0x1290, 0x128A, 0x128B, 0x128C, 0x021F, 0x1298, 0x17F5, 0x17ED, 0x1271, 0x126B, 0x126C, 0x126D, 0x1267, 0x1268, 0x1269, 0x17FD, 0x17D5, 0x121A, 0x117E, 0x1187, 0x17E2, 0x17E3, 0x17E4, 0x17DD, 0x17DE, 0x17DF, 0x17E0, 0x120F, 0x1210, 0x1211, 0x351E, 0x1223, 0x1233, 0x1263, 0x351B, 0x351C, 0x351D, 0x3516, 0x3517, 0x3518, 0x3519, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x3512, 0x3513, 0x3514, 0x3515, 0x350E, 0x350F, 0x3510, 0x3511, 0x350A, 0x350B, 0x350C, 0x350D, 0x3506, 0x3507, 0x3508, 0x3509, 0x1585, 0x1586, 0x1587, 0x1588, 0x1582, 0x1583, 0x1584, 0x3402, 0x3401, 0x3404, 0x3403, 0x3406, 0x3405, 0x3C24, 0x3C23, 0x340A, 0x3C25, 0x340C, 0x340B, 0x3409, 0x340D, 0x3410, 0x340F, 0x3412, 0x3411, 0x3414, 0x3413, 0x3416, 0x3415, 0x3418, 0x3417, 0x341A, 0x3419, 0x341C, 0x341B, 0x341E, 0x341D, 0x3420, 0x341F, 0x343B, 0x343C, 0x3437, 0x3435, 0x3407, 0x3408, 0x3C44, 0x3C43, 0x340E, 0x3C45, 0x3C48, 0x3C47, 0x3C4A, 0x3C49, 0x3C4C, 0x3C4B, 0x3C4E, 0x3C4D, 0x3C50, 0x3C4F, 0x3C52, 0x3C51, 0x3431, 0x3432, 0x3C56, 0x3434, 0x3C58, 0x3C57, 0x3C5A, 0x3438, 0x3433, 0x3436, 0x3C5E, 0x3C5D, 0x3C60, 0x3C5F, 0x3423, 0x3C61, 0x3C64, 0x3C63, 0x3C66, 0x3C65, 0x3C68, 0x3C67, 0x3C6A, 0x3C69, 0x3C6C, 0x3C6B, 0x3C6E, 0x3C6D, 0x3C70, 0x3C6F, 0x3C72, 0x3C71, 0x3C74, 0x3C73, 0x3C76, 0x3C75, 0x3C78, 0x3C77, 0x3C7A, 0x3C79, 0x3C7C, 0x3C7B, 0x3C7E, 0x3C7D, 0x3C80, 0x3C7F, 0x3C82, 0x3C81, 0x343D, 0x3424, 0x3C86, 0x343E, 0x3C88, 0x3C87, 0x3C8A, 0x3C89, 0x3C8C, 0x3C8B, 0x3C8E, 0x3C8D, 0x3439, 0x343F, 0x3C92, 0x3440, 0x3C94, 0x3C93, 0x343A, 0x3C95, 0x3C98, 0x3C97, 0x3C9A, 0x3C99, 0x3C9C, 0x3C9B, 0x3C9E, 0x3C9D, 0x3CA0, 0x3C9F, 0x3CA2, 0x3CA1, 0x3CA4, 0x3CA3, 0x3CA6, 0x3CA5, 0x157F, 0x3CA7, 0x157D, 0x157E, 0x3CAC, 0x3CAB, 0x3CAE, 0x3CAD, 0x3CB0, 0x3CAF, 0x1580, 0x1581, 0x1579, 0x157A, 0x157B, 0x157C, 0x1565, 0x1566, 0x1567, 0x1568, 0x1561, 0x1562, 0x3421, 0x3422, 0x1563, 0x1564, 0x3425, 0x3426, 0x3427, 0x3428, 0x155D, 0x155E, 0x342B, 0x342C, 0x155F, 0x1560, 0x155C, 0x1575, 0x1576, 0x1577, 0x1578, 0x1571, 0x1572, 0x1573, 0x1574, 0x156D, 0x156E, 0x156F, 0x1570, 0x1569, 0x156A, 0x156B, 0x156C, 0x15A5, 0x15A6, 0x15A7, 0x15A8, 0x15A1, 0x15A2, 0x15A3, 0x15A4, 0x159D, 0x159E, 0x159F, 0x15A0, 0x1599, 0x159A, 0x159B, 0x159C, 0x15A9, 0x15AA, 0x15AB, 0x15AC, 0x1595, 0x1596, 0x1597, 0x1598, 0x1591, 0x3459, 0x345A, 0x1592, 0x1593, 0x1594, 0x158D, 0x345F, 0x3460, 0x158E, 0x158F, 0x1590, 0x1589, 0x158A, 0x158B, 0x158C, 0x1D7A, 0x3469, 0x346A, 0x1D7B, 0x1D7C, 0x1D76, 0x1D77, 0x1D78, 0x1D79, 0x0215, 0x021F, 0x022A, 0x0234, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x0198, 0x01A2, 0x1D62, 0x1D63, 0x1D64, 0x1D65, 0x1D5E, 0x1D5F, 0x1D60, 0x1D61, 0x1D5A, 0x1D5B, 0x1D5C, 0x1D5D, 0x1D59, 0x1D72, 0x1D73, 0x1D74, 0x1D75, 0x1D6E, 0x3CC3, 0x3CC4, 0x1D6F, 0x1D70, 0x1D71, 0x1D6A, 0x1D6B, 0x1D6C, 0x1D6D, 0x1D66, 0x1D67, 0x1D68, 0x1D69, 0x012E, 0x012F, 0x0130, 0x0131, 0x022A, 0x0234, 0x012C, 0x012D, 0x01F5, 0x0209, 0x0215, 0x021F, 0x01A2, 0x01C9, 0x2B15, 0x2B14, 0x2B17, 0x2B16, 0x2B19, 0x2B18, 0x2B1B, 0x2B1A, 0x2B1D, 0x2B1C, 0x2B1F, 0x2B1E, 0x2B21, 0x2B20, 0x2B23, 0x2B22, 0x2B25, 0x2B24, 0x2B27, 0x2B26, 0x2B29, 0x2B28, 0x01DF, 0x2B2A, 0x0136, 0x0132, 0x2BA0, 0x0133, 0x2BA2, 0x2BA1, 0x2BA4, 0x2BA3, 0x2BA6, 0x2BA5, 0x2BA8, 0x2BA7, 0x2BAA, 0x2BA9, 0x2BAC, 0x2BAB, 0x2BAE, 0x2BAD, 0x2BB0, 0x2BAF, 0x2BB2, 0x2BB1, 0x2BB4, 0x2BB3, 0x2BB6, 0x2BB5, 0x2BB8, 0x2BB7, 0x2BBA, 0x2BB9, 0x2BBC, 0x2BBB, 0x2BBE, 0x2BBD, 0x2BC0, 0x2BBF, 0x2BC2, 0x2BC1, 0x2BC4, 0x2BC3, 0x2BC6, 0x2BC5, 0x2BC8, 0x2BC7, 0x2BCA, 0x2BC9, 0x2BCC, 0x2BCB, 0x2BCE, 0x2BCD, 0x2BD0, 0x2BCF, 0x0134, 0x0135, 0x15AD, 0x15DF, 0x15E0, 0x15E1, 0x15E2, 0x022A, 0x0234, 0x15AE, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x15D8, 0x15D9, 0x15DA, 0x15DB, 0x15D4, 0x15D5, 0x15D6, 0x15D7, 0x15D0, 0x15D1, 0x15D2, 0x15D3, 0x15CC, 0x15CD, 0x15CE, 0x15CF, 0x15DC, 0x15DD, 0x15DE, 0x15B8, 0x15B9, 0x15BA, 0x15BB, 0x15B4, 0x15B5, 0x15B6, 0x15B7, 0x15B0, 0x15B1, 0x15B2, 0x15B3, 0x15AF, 0x15C8, 0x15C9, 0x15CA, 0x15CB, 0x15C4, 0x15C5, 0x15C6, 0x15C7, 0x15C0, 0x15C1, 0x15C2, 0x15C3, 0x15BC, 0x15BD, 0x15BE, 0x15BF, 0x0070, 0x0071, 0x0072, 0x0073, 0x0234, 0x006D, 0x006E, 0x006F, 0x0209, 0x0215, 0x021F, 0x022A, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0080, 0x0081, 0x0082, 0x007C, 0x007D, 0x007E, 0x007F, 0x0078, 0x0079, 0x007A, 0x007B, 0x0074, 0x0075, 0x0076, 0x0077, 0x250B, 0x2507, 0x2508, 0x2509, 0x250A, 0x2503, 0x2504, 0x2505, 0x2506, 0x24EF, 0x24F0, 0x24F1, 0x24F2, 0x24EB, 0x24EC, 0x24ED, 0x24EE, 0x24E7, 0x24E8, 0x24E9, 0x24EA, 0x24E3, 0x24E4, 0x24E5, 0x24E6, 0x24FF, 0x2500, 0x2501, 0x2502, 0x24FB, 0x24FC, 0x24FD, 0x24FE, 0x24F7, 0x24F8, 0x24F9, 0x24FA, 0x24F3, 0x3D32, 0x3D31, 0x3D34, 0x3D33, 0x3D36, 0x3D35, 0x3D38, 0x3D37, 0x24F4, 0x24F5, 0x3D3C, 0x3D3B, 0x3D3E, 0x3D3D, 0x3D40, 0x3D3F, 0x24F6, 0x24CF, 0x3D68, 0x24D0, 0x3D46, 0x3D45, 0x24D1, 0x24D2, 0x3D4A, 0x3D49, 0x3D4C, 0x3D4B, 0x3D4E, 0x3D4D, 0x3D50, 0x3D4F, 0x24CB, 0x24CC, 0x24CD, 0x24CE, 0x24C7, 0x24C8, 0x3D6D, 0x3D6E, 0x24C9, 0x3D6F, 0x3D39, 0x3D3A, 0x3D69, 0x24CA, 0x24C3, 0x24C4, 0x3D62, 0x3D61, 0x3D64, 0x3D6A, 0x24C5, 0x3D70, 0x3D63, 0x3D67, 0x3D65, 0x24C6, 0x24DF, 0x24E0, 0x3D6B, 0x3D6C, 0x24E1, 0x3D66, 0x24E2, 0x24DB, 0x3D55, 0x24DC, 0x24DD, 0x24DE, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24B5, 0x24B6, 0x24B9, 0x24BB, 0x24AD, 0x24AF, 0x24B1, 0x24B2, 0x24A5, 0x24A7, 0x24A9, 0x24AB, 0x249D, 0x249F, 0x24A1, 0x24A2, 0x0086, 0x0087, 0x0088, 0x3D56, 0x3D54, 0x0089, 0x01A2, 0x0209, 0x24BD, 0x24BF, 0x3D53, 0x24C1, 0x2475, 0x3D52, 0x2477, 0x3D51, 0x2479, 0x247B, 0x246D, 0x246F, 0x2470, 0x3D58, 0x2471, 0x2465, 0x2467, 0x2469, 0x246B, 0x245D, 0x245E, 0x2461, 0x3D57, 0x2463, 0x2494, 0x2497, 0x2498, 0x2499, 0x248D, 0x248F, 0x2491, 0x2493, 0x2485, 0x2487, 0x2489, 0x248B, 0x247D, 0x247E, 0x2481, 0x2483, 0x24B7, 0x24B8, 0x24BA, 0x24BC, 0x24AE, 0x24B0, 0x24B3, 0x24B4, 0x24A6, 0x24A8, 0x24AA, 0x24AC, 0x249E, 0x24A0, 0x24A3, 0x24A4, 0x24BE, 0x24C0, 0x24C2, 0x2476, 0x2478, 0x247A, 0x247C, 0x246E, 0x2472, 0x2473, 0x3D59, 0x3D5A, 0x3D5B, 0x3D5C, 0x3D5D, 0x3D5E, 0x3D5F, 0x3D60, 0x2474, 0x2466, 0x2468, 0x246A, 0x246C, 0x245F, 0x2460, 0x2462, 0x2464, 0x2496, 0x249A, 0x249B, 0x249C, 0x248E, 0x2490, 0x2492, 0x3D71, 0x3D72, 0x3D73, 0x3D74, 0x2495, 0x2486, 0x2488, 0x248A, 0x248C, 0x247F, 0x2480, 0x2482, 0x2484, 0x0225, 0x0230, 0x023A, 0x01B3, 0x01E5, 0x01FB, 0x020F, 0x021B, 0x01B2, 0x01D0, 0x37A9, 0x37AA, 0x37AB, 0x37AC, 0x37A5, 0x37A6, 0x37A7, 0x37A8, 0x37A1, 0x37A2, 0x37A3, 0x37A4, 0x379D, 0x379E, 0x379F, 0x37A0, 0x37B9, 0x01A2, 0x00F8, 0x37B5, 0x37B6, 0x37B7, 0x37B8, 0x37B1, 0x37B2, 0x37B3, 0x37B4, 0x37AD, 0x37AE, 0x37AF, 0x37B0, 0x011E, 0x011F, 0x0120, 0x0121, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x1822, 0x1823, 0x1824, 0x1825, 0x181E, 0x181F, 0x1820, 0x1821, 0x181A, 0x181B, 0x181C, 0x181D, 0x1816, 0x1817, 0x1818, 0x1819, 0x1826, 0x1827, 0x1828, 0x1829, 0x01E5, 0x01FB, 0x020F, 0x023A, 0x01B3, 0x01B2, 0x0230, 0x01FB, 0x180C, 0x180D, 0x180E, 0x1808, 0x1809, 0x180A, 0x180B, 0x0209, 0x0103, 0x0104, 0x0105, 0x0225, 0x0230, 0x01B6, 0x01B7, 0x01B8, 0x01B5, 0x020F, 0x021B, 0x0225, 0x0230, 0x01B2, 0x01D0, 0x01E5, 0x01FB, 0x002C, 0x001A, 0x001B, 0x001C, 0x0028, 0x0029, 0x002A, 0x0027, 0x38AE, 0x38AF, 0x38B0, 0x38A9, 0x38AA, 0x38AB, 0x38AC, 0x38C4, 0x38C5, 0x38C6, 0x38C7, 0x38C0, 0x38C1, 0x38C2, 0x38C3, 0x38BC, 0x38BD, 0x38BE, 0x38BF, 0x38B8, 0x38B9, 0x38BA, 0x38BB, 0x019E, 0x0222, 0x022D, 0x0237, 0x019E, 0x01E2, 0x37C5, 0x37BE, 0x37BF, 0x37C0, 0x37C1, 0x37BA, 0x37BB, 0x37BC, 0x37BD, 0x37D6, 0x01A2, 0x00F9, 0x00FA, 0x37D2, 0x37D3, 0x37D4, 0x37D5, 0x37CE, 0x37CF, 0x37D0, 0x37D1, 0x37CA, 0x37CB, 0x37CC, 0x37CD, 0x3890, 0x3891, 0x3892, 0x3893, 0x388C, 0x388D, 0x388E, 0x388F, 0x3888, 0x3885, 0x3886, 0x010B, 0x010C, 0x010D, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0230, 0x023A, 0x01B3, 0x021B, 0x3873, 0x3874, 0x3875, 0x386E, 0x386F, 0x3870, 0x3871, 0x0106, 0x0107, 0x0108, 0x0109, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x3882, 0x3883, 0x387E, 0x387F, 0x3880, 0x3881, 0x3803, 0x3804, 0x3805, 0x3806, 0x37FF, 0x3800, 0x3801, 0x3802, 0x37FB, 0x37FC, 0x37FD, 0x37FE, 0x37F7, 0x37F8, 0x37F9, 0x37FA, 0x380B, 0x380C, 0x3807, 0x3808, 0x3809, 0x380A, 0x37E3, 0x37E4, 0x37E5, 0x37E6, 0x37DF, 0x37E0, 0x37E1, 0x37E2, 0x37DB, 0x01CE, 0x01AA, 0x01AC, 0x01A7, 0x01A9, 0x0EA5, 0x0E2A, 0x0E59, 0x0E79, 0x0DE1, 0x0CE0, 0x0D07, 0x0D68, 0x0E90, 0x0E10, 0x0EBA, 0x0F68, 0x0DBD, 0x0E64, 0x0FE5, 0x0F16, 0x0D57, 0x0D2C, 0x0F8C, 0x0EB8, 0x0E2A, 0x0E79, 0x0DE1, 0x0D68, 0x0E10, 0x0EBA, 0x0F47, 0x0F68, 0x0DBD, 0x0E64, 0x0FE5, 0x0ED1, 0x0F16, 0x0F9C, 0x01F5, 0x010E, 0x0110, 0x0CA8, 0x01C9, 0x01DF, 0x0E2A, 0x0E79, 0x0DE1, 0x0CE0, 0x0D07, 0x0D68, 0x0E90, 0x0E10, 0x0EBA, 0x0F47, 0x0F68, 0x0DBD, 0x0E64, 0x0E46, 0x0FE5, 0x0ED1, 0x0F16, 0x0CE0, 0x0D07, 0x0D68, 0x0E90, 0x0E10, 0x0EBA, 0x0D9E, 0x38A7, 0x38A8, 0x3819, 0x381B, 0x381A, 0x381C, 0x3815, 0x3816, 0x3817, 0x3818, 0x3811, 0x3812, 0x3813, 0x3814, 0x380D, 0x380E, 0x380F, 0x3810, 0x01F5, 0x0209, 0x00F0, 0x00F1, 0x01A2, 0x01C9, 0x01DF, 0x3821, 0x3822, 0x3823, 0x381D, 0x381E, 0x381F, 0x3820, 0x3864, 0x3865, 0x3866, 0x3867, 0x3860, 0x3861, 0x3862, 0x3863, 0x385C, 0x385D, 0x385E, 0x385F, 0x3858, 0x3859, 0x385A, 0x385B, 0x00FF, 0x0100, 0x0101, 0x0102, 0x01A2, 0x01C9, 0x01DF, 0x0E64, 0x0E46, 0x3869, 0x386B, 0x3792, 0x378E, 0x3787, 0x3788, 0x3789, 0x0D07, 0x0D68, 0x0EBA, 0x0D9E, 0x0F47, 0x0E64, 0x3794, 0x0D2C, 0x376E, 0x376A, 0x376B, 0x0D84, 0x377E, 0x3777, 0x3778, 0x3779, 0x377A, 0x3773, 0x3774, 0x3775, 0x3776, 0x384F, 0x3850, 0x3851, 0x3852, 0x384B, 0x384C, 0x384D, 0x384E, 0x3847, 0x3848, 0x3849, 0x384A, 0x3843, 0x3844, 0x3845, 0x3846, 0x0209, 0x00F5, 0x00F6, 0x00F7, 0x01A2, 0x3856, 0x3857, 0x3853, 0x3854, 0x3855, 0x0209, 0x00F2, 0x00F3, 0x00F4, 0x01C9, 0x01DF, 0x01F5, 0x01F5, 0x01A2, 0x3831, 0x3830, 0x3833, 0x3832, 0x382C, 0x382D, 0x382E, 0x382F, 0x3828, 0x3829, 0x382B, 0x382A, 0x3825, 0x3824, 0x3827, 0x3826, 0x3841, 0x3840, 0x3842, 0x383C, 0x383D, 0x383E, 0x383F, 0x3839, 0x3838, 0x383A, 0x383B, 0x3835, 0x3834, 0x3837, 0x3836, 0x3338, 0x3339, 0x333A, 0x333B, 0x3334, 0x3335, 0x3336, 0x3337, 0x3330, 0x3331, 0x3332, 0x3333, 0x332C, 0x332D, 0x332E, 0x332F, 0x3344, 0x3345, 0x3340, 0x3341, 0x3342, 0x3343, 0x333C, 0x333D, 0x333E, 0x333F, 0x0C3B, 0x0C3C, 0x0C3D, 0x0C3E, 0x0C37, 0x0C38, 0x0C39, 0x0C3A, 0x0C33, 0x0C34, 0x0C35, 0x0C36, 0x0C2F, 0x0C30, 0x0C31, 0x0C32, 0x00FC, 0x00FD, 0x01C9, 0x01DF, 0x0C43, 0x0C44, 0x01A2, 0x00FB, 0x0C3F, 0x0C40, 0x0C41, 0x0C42, 0x0168, 0x0169, 0x016A, 0x016B, 0x0164, 0x0165, 0x0166, 0x0167, 0x0160, 0x0161, 0x0162, 0x0163, 0x015C, 0x015D, 0x015E, 0x015F, 0x0179, 0x017A, 0x017B, 0x017C, 0x0175, 0x0176, 0x0177, 0x0178, 0x0170, 0x0171, 0x0173, 0x0174, 0x016C, 0x016D, 0x016E, 0x016F, 0x014A, 0x014B, 0x014C, 0x014D, 0x0234, 0x0147, 0x0148, 0x0149, 0x0209, 0x0215, 0x021F, 0x022A, 0x01A2, 0x01C9, 0x01DF, 0x01F5, 0x0158, 0x0159, 0x015A, 0x015B, 0x0154, 0x0155, 0x0156, 0x0157, 0x0150, 0x0151, 0x0152, 0x0153, 0x014E, 0x014F, 0x41C0, 0x41C2, 0x41C4, 0x41C6, 0x41B5, 0x41B7, 0x41BA, 0x41BD, 0x41AC, 0x41AE, 0x41B0, 0x41B3, 0x41A4, 0x41A6, 0x41A8, 0x41AA, 0x017D, 0x0172, 0x41DA, 0x41DB, 0x41D0, 0x41D3, 0x41D6, 0x41D8, 0x41C7, 0x41CA, 0x41CC, 0x41CE, 0x41BB, 0x41BC, 0x41BE, 0x41BF, 0x41B4, 0x41B6, 0x41B8, 0x41B9, 0x41AD, 0x41AF, 0x41B1, 0x41B2, 0x41A5, 0x41A7, 0x41A9, 0x41AB, 0x41D7, 0x41D9, 0x41DC, 0x41DD, 0x41D1, 0x41D2, 0x41D4, 0x41D5, 0x41C9, 0x41CB, 0x41CD, 0x41CF, 0x41C1, 0x41C3, 0x41C5, 0x41C8, 0x367D, 0x367E, 0x367F, 0x3680, 0x3679, 0x367A, 0x367B, 0x367C, 0x3675, 0x3676, 0x3677, 0x3678, 0x3671, 0x3672, 0x3673, 0x3674, 0x368D, 0x368E, 0x368F, 0x3690, 0x3689, 0x368A, 0x368B, 0x368C, 0x3685, 0x3686, 0x3687, 0x3688, 0x3681, 0x3682, 0x3683, 0x3684, 0x365D, 0x365E, 0x365F, 0x3660, 0x3659, 0x365A, 0x365B, 0x365C, 0x3655, 0x3656, 0x3657, 0x3658, 0x3651, 0x3652, 0x3653, 0x3654, 0x366D, 0x366E, 0x366F, 0x3670, 0x3669, 0x366A, 0x366B, 0x366C, 0x3665, 0x3666, 0x3667, 0x3668, 0x3661, 0x3662, 0x3663, 0x3664, 0x363D, 0x363E, 0x363F, 0x3640, 0x3639, 0x363A, 0x363B, 0x363C, 0x3635, 0x3636, 0x3637, 0x3638, 0x3631, 0x3632, 0x3633, 0x3634, 0x364D, 0x364E, 0x364F, 0x3650, 0x3649, 0x364A, 0x364B, 0x364C, 0x3645, 0x3646, 0x3647, 0x3648, 0x3641, 0x3642, 0x3643, 0x3644, 0x361D, 0x361E, 0x361F, 0x3620, 0x3619, 0x361A, 0x361B, 0x361C, 0x3615, 0x3616, 0x3617, 0x3618, 0x3611, 0x3612, 0x3613, 0x3614, 0x362D, 0x362E, 0x362F, 0x3630, 0x3629, 0x362A, 0x362B, 0x362C, 0x3625, 0x3626, 0x3627, 0x3628, 0x3621, 0x3622, 0x3623, 0x3624, 0x36FD, 0x36FE, 0x36FF, 0x3700, 0x36F9, 0x36FA, 0x36FB, 0x36FC, 0x36F5, 0x36F6, 0x36F7, 0x36F8, 0x36F1, 0x36F2, 0x36F3, 0x36F4, 0x370D, 0x370E, 0x370F, 0x3710, 0x3709, 0x370A, 0x370B, 0x370C, 0x3705, 0x3706, 0x3707, 0x3708, 0x3701, 0x3704, 0x36DD, 0x36DB, 0x36DC, 0x36D5, 0x36D6, 0x36D7, 0x36D8, 0x36D1, 0x36D2, 0x36D3, 0x36D4, 0x36ED, 0x36EE, 0x36EF, 0x36F0, 0x36E9, 0x36EA, 0x36EB, 0x36EC, 0x36E5, 0x36E6, 0x36E7, 0x36E8, 0x36E1, 0x36E2, 0x36E3, 0x36E4, 0x36BD, 0x36BE, 0x36BF, 0x36C0, 0x36B9, 0x36BA, 0x36BB, 0x36BC, 0x36B5, 0x36B6, 0x36B7, 0x36B8, 0x36B1, 0x36B2, 0x36B3, 0x36B4, 0x36CD, 0x36CE, 0x36CF, 0x36D0, 0x36C9, 0x36CA, 0x36CB, 0x36CC, 0x36C5, 0x36C6, 0x36C7, 0x36C8, 0x36C1, 0x36C2, 0x36C3, 0x36C4, 0x369D, 0x369E, 0x369F, 0x36A0, 0x3699, 0x369A, 0x369B, 0x369C, 0x3695, 0x3696, 0x3697, 0x3698, 0x3691, 0x3692, 0x3693, 0x3694, 0x36AD, 0x36AE, 0x36AF, 0x36B0, 0x36A9, 0x36AA, 0x36AB, 0x36AC, 0x36A5, 0x36A6, 0x36A7, 0x36A8, 0x36A1, 0x36A2, 0x36A3, 0x36A4, 0x3762, 0x3763, 0x3764, 0x3765, 0x375E, 0x375F, 0x3760, 0x3761, 0x3754, 0x3755, 0x3756, 0x3757, 0x3750, 0x3751, 0x3752, 0x3753, 0x374C, 0x374D, 0x374E, 0x374F, 0x3748, 0x3749, 0x374A, 0x374B, 0x375C, 0x375D, 0x3758, 0x3759, 0x375A, 0x375B, 0x373D, 0x373E, 0x373F, 0x3740, 0x3739, 0x373A, 0x373B, 0x373C, 0x3735, 0x3736, 0x3737, 0x3738, 0x3731, 0x3732, 0x3733, 0x3734, 0x3745, 0x3746, 0x3747, 0x3741, 0x3742, 0x3743, 0x3744, 0x371D, 0x371E, 0x371F, 0x3720, 0x3719, 0x371A, 0x371B, 0x371C, 0x3715, 0x3716, 0x3717, 0x3718, 0x3711, 0x3714, 0x372D, 0x3726, 0x3727, 0x3728, 0x3721, 0x3722, 0x3723, 0x3724, 0x0458, 0x02CF, 0x02F9, 0x0484, 0x03FA, 0x0699, 0x069A, 0x069B, 0x0664, 0x0665, 0x0666, 0x0667, 0x03F5, 0x03F6, 0x03F7, 0x03F9, 0x0447, 0x02C5, 0x02E7, 0x047D, 0x03E1, 0x0691, 0x0692, 0x0693, 0x065A, 0x065B, 0x065C, 0x065D, 0x03DC, 0x03DD, 0x03DE, 0x03E0, 0x037B, 0x03E2, 0x040E, 0x0300, 0x02EF, 0x032A, 0x01F4, 0x0214, 0x0229, 0x01BF, 0x0208, 0x01C5, 0x0213, 0x01C7, 0x01DD, 0x01C4, 0x01DE, 0x01F3, 0x01C6, 0x01C8, 0x01C0, 0x01C2, 0x02AE, 0x02D0, 0x032A, 0x06DB, 0x0425, 0x0276, 0x06DB, 0x0886, 0x0819, 0x0767, 0x0769, 0x081B, 0x0BF1, 0x03E2, 0x04E6, 0x0BE5, 0x0BEB, 0x0BEE, 0x0346, 0x0372, 0x037C, 0x0485, 0x03BD, 0x03BD, 0x03B2, 0x03AD, 0x0389, 0x03BD, 0x0357, 0x02D0, 0x0578, 0x0578, 0x053D, 0x0554, 0x33EE, 0x33F0, 0x33E9, 0x33E6, 0x33E7, 0x33E8, 0x33E1, 0x33E2, 0x33E3, 0x33E4, 0x33FD, 0x33FE, 0x33FF, 0x3400, 0x33F9, 0x33FA, 0x33FB, 0x33FC, 0x33F5, 0x33F6, 0x33F7, 0x33F8, 0x33F1, 0x33F2, 0x33F3, 0x33F4, 0x33C9, 0x33CB, 0x33CD, 0x33CF, 0x33C1, 0x33C3, 0x33C5, 0x33C7, 0x33B9, 0x33BB, 0x33BD, 0x33BF, 0x33B1, 0x33B3, 0x33B5, 0x33B7, 0x33DD, 0x33DE, 0x33DF, 0x33E0, 0x33D9, 0x33DA, 0x33DB, 0x33DC, 0x33D5, 0x33D6, 0x33D7, 0x33D8, 0x33D1, 0x33D2, 0x33D3, 0x33D4, 0x3389, 0x338B, 0x338D, 0x338F, 0x3381, 0x3383, 0x3385, 0x3387, 0x33CA, 0x33CC, 0x33CE, 0x33D0, 0x33C2, 0x33C4, 0x33C6, 0x33C8, 0x33A9, 0x33AB, 0x33AD, 0x33AF, 0x33A1, 0x33A3, 0x33A5, 0x33A7, 0x3399, 0x339B, 0x339D, 0x339F, 0x3391, 0x3393, 0x3395, 0x3397, 0x339A, 0x339C, 0x339E, 0x33A0, 0x3392, 0x3394, 0x3396, 0x3398, 0x338A, 0x338C, 0x338E, 0x3390, 0x3382, 0x3388, 0x33BA, 0x33AC, 0x33AE, 0x33B0, 0x33A2, 0x33A4, 0x33A6, 0x33A8, 0x210A, 0x210C, 0x210E, 0x2110, 0x2102, 0x2104, 0x2106, 0x2108, 0x20FA, 0x05D0, 0x05AF, 0x059C, 0x05B2, 0x047B, 0x0573, 0x0565, 0x0574, 0x0564, 0x053A, 0x0535, 0x053B, 0x04D6, 0x04FF, 0x02A5, 0x02AC, 0x0328, 0x033D, 0x0321, 0x033C, 0x0320, 0x02F3, 0x02E1, 0x02F6, 0x02E4, 0x0634, 0x0612, 0x0633, 0x0610, 0x0636, 0x0614, 0x062D, 0x060B, 0x0507, 0x04DD, 0x0509, 0x04DF, 0x0673, 0x0672, 0x06C5, 0x06C4, 0x06B8, 0x06AC, 0x045B, 0x04DB, 0x04EF, 0x04C5, 0x04EE, 0x04C4, 0x04EC, 0x04C2, 0x04ED, 0x2919, 0x291A, 0x2929, 0x292A, 0x2921, 0x2922, 0x28FF, 0x28F9, 0x28FB, 0x28F5, 0x0733, 0x073B, 0x077C, 0x077F, 0x077B, 0x077E, 0x077D, 0x0780, 0x0771, 0x0774, 0x0770, 0x0773, 0x0772, 0x0775, 0x0829, 0x0858, 0x085A, 0x0857, 0x0856, 0x0824, 0x0825, 0x084A, 0x084E, 0x0849, 0x084F, 0x0234, 0x01C9, 0x01DF, 0x0897, 0x087F, 0x01A2, 0x2993, 0x2994, 0x0881, 0x0884, 0x07BE, 0x0782, 0x0781, 0x07BD, 0x07BC, 0x07A4, 0x07A7, 0x07A8, 0x297F, 0x2980, 0x2979, 0x297A, 0x2977, 0x2978, 0x2960, 0x295A, 0x2958, 0x0734, 0x073C, 0x07AE, 0x07B6, 0x07B2, 0x07BA, 0x07B3, 0x07BB, 0x07B0, 0x202D, 0x2029, 0x2022, 0x2023, 0x2024, 0x00E6, 0x00E7, 0x00E8, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x3327, 0x3320, 0x0209, 0x0B01, 0x0AFC, 0x12F1, 0x0B0F, 0x0B10, 0x0B0B, 0x0B0C, 0x0B0D, 0x0B0E, 0x12F2, 0x12F3, 0x337E, 0x337A, 0x337B, 0x337C, 0x337D, 0x3376, 0x3377, 0x3378, 0x3379, 0x0AF7, 0x0AF8, 0x0AF9, 0x0AFA, 0x0AF3, 0x0AF4, 0x0AF5, 0x0AF6, 0x0AEF, 0x0AF0, 0x0AF1, 0x0AF2, 0x0AEB, 0x0AEC, 0x0AED, 0x0AEE, 0x01A2, 0x0209, 0x0084, 0x0085, 0x3372, 0x3373, 0x3374, 0x3375, 0x336E, 0x336F, 0x3370, 0x3371, 0x336A, 0x336B, 0x336C, 0x336D, 0x3366, 0x3367, 0x3368, 0x3369, 0x3352, 0x3353, 0x3354, 0x3356, 0x334E, 0x334F, 0x3350, 0x3351, 0x334A, 0x334B, 0x334C, 0x334D, 0x3346, 0x3348, 0x3349, 0x3363, 0x335C, 0x335D, 0x335E, 0x3357, 0x3358, 0x3359, 0x335A, 0x02B3, 0x0303, 0x0377, 0x0487, 0x0641, 0x0409, 0x053F, 0x0647, 0x0655, 0x0388, 0x05D7, 0x058E, 0x390B, 0x390C, 0x390D, 0x390E, 0x00EE, 0x00EF, 0x01A2, 0x01C9, 0x00ED, 0x38F7, 0x38F8, 0x38F9, 0x38FA, 0x38F3, 0x38F4, 0x38F5, 0x38F6, 0x38EF, 0x38F0, 0x38F1, 0x38F2, 0x38EB, 0x3900, 0x3901, 0x3902, 0x38FB, 0x38FC, 0x38FD, 0x38FE, 0x38D9, 0x38DA, 0x38DB, 0x38DC, 0x38D5, 0x38D6, 0x38D7, 0x38D8, 0x38D1, 0x0301, 0x0302, 0x05EA, 0x0516, 0x0533, 0x0527, 0x0528, 0x0520, 0x0513, 0x0521, 0x051C, 0x3586, 0x3587, 0x3582, 0x3583, 0x3584, 0x3585, 0x357E, 0x357F, 0x3580, 0x3581, 0x357A, 0x357B, 0x357C, 0x357D, 0x3594, 0x3595, 0x3590, 0x3591, 0x3592, 0x3593, 0x358C, 0x358D, 0x358E, 0x358F, 0x3588, 0x3589, 0x358A, 0x358B, 0x3568, 0x3569, 0x356A, 0x356B, 0x3564, 0x3565, 0x3566, 0x3567, 0x3561, 0x3562, 0x3563, 0x355D, 0x355E, 0x355F, 0x3560, 0x3577, 0x3578, 0x3579, 0x3574, 0x3575, 0x3576, 0x3570, 0x3571, 0x3572, 0x3573, 0x356C, 0x356D, 0x356E, 0x356F, 0x354A, 0x354B, 0x354C, 0x3546, 0x3547, 0x3548, 0x3549, 0x3542, 0x3552, 0x3553, 0x3554, 0x354D, 0x3602, 0x35FB, 0x35FC, 0x35FD, 0x35F6, 0x35F7, 0x35F8, 0x35F9, 0x360E, 0x360F, 0x3610, 0x360A, 0x360B, 0x360C, 0x360D, 0x3606, 0x3607, 0x3608, 0x3609, 0x35E2, 0x35E3, 0x35E4, 0x35E5, 0x35DE, 0x35DF, 0x35E0, 0x35E1, 0x35DA, 0x35EB, 0x35EC, 0x35ED, 0x35E6, 0x35E7, 0x35E8, 0x35E9, 0x35C2, 0x35C4, 0x35C5, 0x35BE, 0x35AB, 0x35AC, 0x35AD, 0x35A6, 0x35A7, 0x35A8, 0x35A9, 0x00CE, 0x00CA, 0x00C7, 0x00C8, 0x00C9, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00D9, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D2, 0x00D3, 0x00D4, 0x0209, 0x00B7, 0x00B8, 0x00B9, 0x0209, 0x0209, 0x00B4, 0x00B5, 0x00B6, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00AE, 0x00AF, 0x01A2, 0x0209, 0x01C9, 0x01C9, 0x01C9, 0x0209, 0x01A2, 0x01A2, 0x01A2, 0x01C9, 0x00BE, 0x00BF, 0x00C0, 0x00C1, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x009A, 0x009B, 0x009C, 0x009D, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x0215, 0x021F, 0x022A, 0x0234, 0x01C9, 0x01DF, 0x01F5, 0x0209, 0x01A2, 0x022A, 0x0234, 0x0096, 0x008F, 0x0090, 0x0091, 0x008A, 0x008D, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x1F5A, 0x1F63, 0x1F67, 0x1F68, 0x1F43, 0x1F44, 0x1F54, 0x022A, 0x0234, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x1F5F, 0x1F60, 0x1F61, 0x1F62, 0x1F5B, 0x1F5C, 0x1F5D, 0x1F5E, 0x1F56, 0x1F57, 0x1F58, 0x1F59, 0x1F51, 0x1F52, 0x1F53, 0x1F55, 0x1F64, 0x1F69, 0x1F3B, 0x1F3C, 0x1F3D, 0x1F3E, 0x1F37, 0x1F38, 0x1F39, 0x1F3A, 0x1F34, 0x1F35, 0x1F36, 0x1F4D, 0x1F4E, 0x1F4F, 0x1F50, 0x1F49, 0x1F4A, 0x1F4B, 0x1F4C, 0x1F45, 0x1F46, 0x1F47, 0x1F48, 0x1F3F, 0x1F40, 0x1F41, 0x1F42, 0x0015, 0x0017, 0x000E, 0x000A, 0x0008, 0x0003, 0x0002, 0x0004, 0x0001, 0x1C98, 0x1C98, 0x1C99, 0x1C9A, 0x1C94, 0x1C95, 0x1C96, 0x1C97, 0x1C90, 0x1C91, 0x1C92, 0x1C93, 0x1C8D, 0x1C8E, 0x1C8F, 0x1C90, 0x1CA6, 0x1CA7, 0x1CA8, 0x1CA9, 0x1CA3, 0x1CA4, 0x1CA4, 0x1CA5, 0x1C9F, 0x1CA0, 0x1CA1, 0x1CA2, 0x1C9B, 0x1C9C, 0x1C9D, 0x1C9E, 0x17B6, 0x17D0, 0x17D1, 0x17CC, 0x17C5, 0x17B5, 0x17C7, 0x022A, 0x0234, 0x17AD, 0x17CA, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x17B8, 0x17B9, 0x17BA, 0x17BB, 0x17B2, 0x17B3, 0x17B4, 0x17B7, 0x17AE, 0x17AF, 0x17B0, 0x17B1, 0x17AC, 0x17CB, 0x17CD, 0x17CE, 0x17CF, 0x17C4, 0x17C6, 0x17C8, 0x1FC3, 0x1FC5, 0x1FBE, 0x0F36, 0x0F25, 0x0F37, 0x0FDF, 0x0FFB, 0x0FF0, 0x0FE6, 0x0E6A, 0x0E97, 0x0C6A, 0x0C69, 0x0C6D, 0x0C5D, 0x0C60, 0x0C5F, 0x0C63, 0x0D0A, 0x0D3A, 0x0D32, 0x0D2D, 0x0CEE, 0x0D14, 0x0D0D, 0x0D08, 0x0CDD, 0x0CFF, 0x0CF1, 0x0CE1, 0x0CB2, 0x0CDE, 0x2C96, 0x01DF, 0x23E3, 0x23E6, 0x23DF, 0x23E0, 0x23E1, 0x2BF1, 0x2BF8, 0x2BFD, 0x2BD6, 0x2BDC, 0x2BE4, 0x0446, 0x04E2, 0x03B1, 0x23C6, 0x23C2, 0x23BB, 0x23BC, 0x23BD, 0x23B9, 0x0345, 0x0370, 0x0392, 0x02AD, 0x1FCF, 0x1FD0, 0x2015, 0x1FCE, 0x23B2, 0x23AB, 0x23AC, 0x23AD, 0x23AE, 0x23A7, 0x23A8, 0x23A9, 0x23AA, 0x2001, 0x2003, 0x2004, 0x2006, 0x1FA7, 0x1FEE, 0x1FB8, 0x1FDB, 0x1F9D, 0x1F9A, 0x1F9B, 0x1FB9, 0x200F, 0x2011, 0x2013, 0x2014, 0x2007, 0x200A, 0x200C, 0x200D, 0x1DCE, 0x1DCF, 0x1DCA, 0x1DCB, 0x1DCC, 0x1DCD, 0x1DC6, 0x1DC7, 0x1DC8, 0x1DC9, 0x1DC2, 0x1DC3, 0x1DC4, 0x1DC5, 0x2AB5, 0x2ABB, 0x2ABE, 0x1DD0, 0x0234, 0x01C9, 0x0198, 0x01A2, 0x2AD3, 0x2AD6, 0x2AC7, 0x1DC1, 0x1DBA, 0x2B33, 0x2B36, 0x29E5, 0x2A9A, 0x29DC, 0x29DF, 0x2B2F, 0x2A0C, 0x2A0F, 0x2A12, 0x2A00, 0x2A03, 0x2A06, 0x2A09, 0x2A2B, 0x29F7, 0x29FA, 0x29FD, 0x2A1E, 0x29EE, 0x29F1, 0x29F4, 0x2C71, 0x2C79, 0x2C81, 0x2C85, 0x2C56, 0x2C59, 0x2C61, 0x2C69, 0x2C49, 0x1C17, 0x1C18, 0x2C88, 0x0C80, 0x0C81, 0x0C82, 0x000B, 0x000F, 0x0013, 0x0016, 0x0E9B, 0x0E9C, 0x0EC4, 0x0EC5, 0x0D10, 0x0D11, 0x0D12, 0x0D13, 0x0CFD, 0x0CFE, 0x0D0E, 0x0D0F, 0x0CF7, 0x0CF8, 0x0CF9, 0x0CFC, 0x0F86, 0x0F87, 0x0F88, 0x0F89, 0x0F61, 0x0F62, 0x0F63, 0x0F85, 0x0F3F, 0x0F5D, 0x0F5E, 0x0F60, 0x0F3B, 0x0F3E, 0x0DA1, 0x0FFC, 0x0FFD, 0x0FFE, 0x0F8A, 0x0E86, 0x0E3E, 0x0E54, 0x0E55, 0x0E20, 0x0D0C, 0x0DCD, 0x0E13, 0x0E1C, 0x0E99, 0x0E6C, 0x0E6D, 0x0E69, 0x0E2F, 0x0E4A, 0x0E4B, 0x2414, 0x242A, 0x2442, 0x244F, 0x240E, 0x241D, 0x243A, 0x244D, 0x2437, 0x2438, 0x2439, 0x243B, 0x2431, 0x2433, 0x2434, 0x240B, 0x240C, 0x0DFC, 0x0E82, 0x0E83, 0x0DD6, 0x0E3D, 0x2400, 0x2401, 0x2402, 0x2403, 0x23FC, 0x23FD, 0x23FE, 0x23FF, 0x1C72, 0x1C73, 0x1C74, 0x1C6E, 0x1C6F, 0x1C70, 0x1C71, 0x1C6A, 0x1C6B, 0x1C6C, 0x0E22, 0x0DA2, 0x0E74, 0x0E25, 0x0EC8, 0x0CA4, 0x0CA3, 0x1C75, 0x0E67, 0x1C5F, 0x1C58, 0x1C59, 0x1C5A, 0x1C5B, 0x1C54, 0x1C55, 0x1C56, 0x1C57, 0x0F2B, 0x0F32, 0x0FF2, 0x0FF1, 0x0DD1, 0x0E34, 0x0CFA, 0x0F1C, 0x0E6F, 0x0EE1, 0x0FF7, 0x0F5B, 0x0EC3, 0x0F7B, 0x0F4A, 0x0F4C, 0x0F51, 0x0F52, 0x0F20, 0x0F58, 0x0F29, 0x0F1E, 0x0F6E, 0x0F7A, 0x0F77, 0x0F4B, 0x0FA1, 0x4785, 0x4640, 0x46DA, 0x44FB, 0x469D, 0x469E, 0x46AE, 0x46B0, 0x4683, 0x4693, 0x44A3, 0x444A, 0x4465, 0x446B, 0x4426, 0x4433, 0x45E1, 0x4579, 0x4580, 0x458A, 0x450F, 0x4531, 0x4537, 0x453D, 0x463D, 0x4642, 0x4642, 0x465C, 0x4611, 0x4613, 0x4616, 0x4630, 0x45F1, 0x45F9, 0x460F, 0x45E5, 0x45E6, 0x45EA, 0x45EB, 0x46EC, 0x46F9, 0x46B6, 0x46D6, 0x4715, 0x4716, 0x46EA, 0x46EB, 0x4713, 0x4471, 0x448F, 0x4495, 0x4436, 0x443F, 0x4442, 0x4466, 0x4440, 0x4492, 0x470B, 0x470C, 0x4679, 0x1D98, 0x1D91, 0x1D92, 0x1D93, 0x1D94, 0x1D8D, 0x1D8E, 0x1D8F, 0x1D90, 0x2195, 0x2196, 0x2197, 0x2198, 0x2191, 0x2192, 0x2193, 0x2194, 0x218D, 0x218E, 0x218F, 0x2190, 0x2189, 0x218A, 0x218B, 0x218C, 0x21A5, 0x21A6, 0x21A7, 0x21A8, 0x21A1, 0x21A2, 0x21A3, 0x2174, 0x216D, 0x216E, 0x216F, 0x216A, 0x216B, 0x21F5, 0x21F2, 0x21F9, 0x21CD, 0x21CF, 0x21E7, 0x21E4, 0x21DD, 0x21DE, 0x21DF, 0x21E0, 0x21D9, 0x21DA, 0x21DB, 0x21B7, 0x21B4, 0x21AE, 0x21B0, 0x21A9, 0x21AA, 0x21AB, 0x21C8, 0x21C1, 0x21C2, 0x22A4, 0x229D, 0x229E, 0x229F, 0x22A0, 0x2299, 0x229A, 0x229B, 0x229C, 0x2275, 0x2276, 0x2277, 0x2278, 0x2271, 0x2272, 0x2273, 0x2288, 0x2281, 0x2282, 0x2254, 0x224D, 0x224E, 0x224F, 0x2250, 0x2249, 0x224A, 0x224B, 0x224C, 0x2265, 0x2266, 0x2267, 0x2262, 0x2263, 0x2244, 0x223D, 0x223E, 0x223F, 0x2240, 0x2239, 0x223A, 0x223B, 0x223C, 0x231D, 0x231E, 0x231F, 0x2320, 0x2319, 0x231A, 0x231B, 0x231C, 0x2315, 0x2316, 0x2317, 0x2318, 0x2311, 0x2312, 0x2313, 0x2314, 0x232D, 0x232E, 0x232F, 0x2330, 0x2329, 0x232A, 0x232B, 0x232C, 0x2325, 0x2326, 0x2327, 0x2328, 0x2321, 0x2322, 0x2323, 0x2324, 0x22FD, 0x22FE, 0x22FF, 0x2300, 0x22F9, 0x22FA, 0x22FB, 0x22FC, 0x22F5, 0x22F6, 0x22F7, 0x22F8, 0x22F1, 0x22F2, 0x22F3, 0x22F4, 0x230D, 0x230E, 0x230F, 0x2310, 0x2309, 0x230A, 0x230B, 0x230C, 0x2305, 0x2306, 0x2307, 0x2308, 0x2301, 0x2302, 0x2303, 0x2304, 0x22DD, 0x22DE, 0x22DF, 0x22E0, 0x22D9, 0x22DA, 0x22DB, 0x22DC, 0x22D4, 0x22D5, 0x22D6, 0x22D8, 0x22D0, 0x22D1, 0x22D2, 0x22D3, 0x22ED, 0x22EE, 0x22EF, 0x22F0, 0x22E9, 0x22EA, 0x22EB, 0x22EC, 0x22E5, 0x22E6, 0x22E7, 0x22E8, 0x22E1, 0x22E2, 0x22E3, 0x22E4, 0x22B5, 0x22B6, 0x22B8, 0x22B9, 0x22B1, 0x22B2, 0x22B3, 0x22B4, 0x0510, 0x0300, 0x05BC, 0x05E9, 0x0346, 0x0372, 0x0688, 0x0395, 0x06BE, 0x0412, 0x03FB, 0x036D, 0x47C0, 0x46E6, 0x4754, 0x46E9, 0x46EE, 0x46ED, 0x46F1, 0x46EF, 0x47C1, 0x4755, 0x46F5, 0x46F3, 0x4756, 0x46F7, 0x46F8, 0x4757, 0x4758, 0x47C2, 0x47C4, 0x47C3, 0x46FF, 0x47C5, 0x4701, 0x4759, 0x4703, 0x4702, 0x4705, 0x4704, 0x47C7, 0x4706, 0x040E, 0x047E, 0x0389, 0x03B2, 0x03E2, 0x049C, 0x22AD, 0x22AE, 0x22AF, 0x22B0, 0x0424, 0x044C, 0x05AC, 0x22A9, 0x0551, 0x04E6, 0x056A, 0x03BD, 0x03FB, 0x0412, 0x05DD, 0x22AA, 0x063C, 0x0669, 0x0688, 0x06BE, 0x0554, 0x0578, 0x06DB, 0x22AB, 0x0424, 0x044C, 0x047E, 0x049C, 0x0267, 0x02A8, 0x0551, 0x069C, 0x032A, 0x02EF, 0x036D, 0x03E2, 0x02C6, 0x0510, 0x22AC, 0x040E, 0x056A, 0x22CC, 0x22CD, 0x22CE, 0x22CF, 0x0389, 0x4220, 0x4221, 0x423B, 0x4230, 0x4231, 0x420B, 0x4209, 0x43C8, 0x43C9, 0x43C3, 0x43D0, 0x43D1, 0x43A8, 0x43A9, 0x1ABF, 0x1AC5, 0x1A9B, 0x1AA1, 0x1AA7, 0x1AAD, 0x06FF, 0x0700, 0x0510, 0x0524, 0x053D, 0x2050, 0x2052, 0x2046, 0x2048, 0x203A, 0x0646, 0x063C, 0x0591, 0x058C, 0x0592, 0x0593, 0x051B, 0x0579, 0x0519, 0x0517, 0x0215, 0x021F, 0x0198, 0x01A2, 0x1D44, 0x06A4, 0x06A5, 0x069E, 0x069F, 0x1240, 0x1241, 0x1D37, 0x123E, 0x123F, 0x1228, 0x1229, 0x1D54, 0x1225, 0x048B, 0x04B8, 0x034D, 0x0398, 0x046D, 0x029E, 0x0299, 0x0348, 0x0349, 0x11E4, 0x11E5, 0x11E6, 0x11E1, 0x1D03, 0x1D07, 0x1CF3, 0x1CF7, 0x1CE3, 0x1CE5, 0x1CE7, 0x0554, 0x1CEB, 0x1D33, 0x1D34, 0x1D2E, 0x1D2F, 0x1D22, 0x1D28, 0x1D16, 0x1D17, 0x1D18, 0x1D1B, 0x0B6E, 0x0B71, 0x0B74, 0x0B7A, 0x0B62, 0x0B65, 0x0B59, 0x0B5C, 0x0B5F, 0x0B47, 0x0B4A, 0x0B8A, 0x01A2, 0x05AC, 0x14E6, 0x14E0, 0x14E1, 0x065F, 0x14E2, 0x14E3, 0x05DD, 0x04AB, 0x061A, 0x14DC, 0x14DD, 0x0291, 0x044C, 0x0510, 0x0346, 0x0372, 0x0395, 0x03BD, 0x0412, 0x0424, 0x03FB, 0x06B2, 0x06D2, 0x1503, 0x206A, 0x053D, 0x206C, 0x05E9, 0x03E2, 0x2060, 0x2062, 0x2064, 0x2056, 0x2058, 0x205A, 0x205C, 0x208E, 0x2090, 0x2086, 0x2088, 0x067F, 0x0694, 0x208A, 0x208C, 0x207E, 0x2080, 0x2076, 0x2078, 0x047E, 0x049C, 0x05AC, 0x2AAA, 0x2AAD, 0x2A98, 0x2A9B, 0x040E, 0x3F79, 0x3F7A, 0x3F7B, 0x3F7C, 0x3F7D, 0x3F7E, 0x3F7F, 0x3F80, 0x3F81, 0x3F82, 0x2A9E, 0x2AA1, 0x2AE0, 0x2AE1, 0x2AE2, 0x2AE3, 0x2ADC, 0x2ADD, 0x2A6E, 0x2A6F, 0x2A68, 0x2A69, 0x2A6A, 0x2A6B, 0x2A3B, 0x2A3D, 0x2A3F, 0x2A41, 0x2A35, 0x2A36, 0x2A31, 0x2A32, 0x3F99, 0x3F9A, 0x3F9B, 0x3F9C, 0x3F9D, 0x3F9E, 0x3F9F, 0x3FA0, 0x3FA1, 0x3FA2, 0x3FA3, 0x2A33, 0x2A27, 0x2A29, 0x2A2C, 0x2A2E, 0x2A51, 0x2A52, 0x2A4D, 0x2A4E, 0x2A01, 0x29F2, 0x29E6, 0x2A18, 0x2A19, 0x2A0A, 0x2A0D, 0x2A10, 0x3FB5, 0x3FB6, 0x3FB7, 0x3FB8, 0x3FB9, 0x3FBA, 0x3FBB, 0x3FBC, 0x3FBD, 0x3FBE, 0x3FBF, 0x3FC0, 0x3FC1, 0x3FC2, 0x3FC3, 0x2A13, 0x2B8A, 0x2B8B, 0x2B8C, 0x2B8D, 0x2B86, 0x3FCA, 0x3FCB, 0x3FCC, 0x3FCD, 0x3FCE, 0x3FCF, 0x3FD0, 0x3FD1, 0x3FD2, 0x3FD3, 0x3FD4, 0x3FD5, 0x3FD6, 0x3FD7, 0x3FD8, 0x3DDA, 0x3DD9, 0x3DDC, 0x3DDB, 0x3DDE, 0x3DDD, 0x3DE0, 0x3DDF, 0x3DE2, 0x3DE1, 0x3DE4, 0x3DE3, 0x2B87, 0x2B88, 0x2B89, 0x2B82, 0x2B83, 0x3FEA, 0x3FEB, 0x3FEC, 0x3FED, 0x3FEE, 0x3FEF, 0x3FF0, 0x3FF1, 0x3FF2, 0x3FF3, 0x3FF4, 0x2B84, 0x2B7E, 0x2B7F, 0x2B80, 0x2B81, 0x2B9C, 0x3FFB, 0x3FFC, 0x2B9A, 0x3FFE, 0x2B9B, 0x2B96, 0x2B97, 0x4002, 0x4003, 0x2B8E, 0x2B8F, 0x2B91, 0x2B93, 0x2B63, 0x2B65, 0x2B66, 0x2B68, 0x2B5E, 0x2B60, 0x2B61, 0x2B62, 0x2B59, 0x2B5A, 0x2B5B, 0x2B5C, 0x2B55, 0x2B56, 0x2B78, 0x2B79, 0x2B12, 0x4019, 0x401A, 0x401B, 0x401C, 0x401D, 0x401E, 0x401F, 0x2B13, 0x4021, 0x4022, 0x4023, 0x4024, 0x4025, 0x4026, 0x4027, 0x2B0B, 0x2B0C, 0x2B0E, 0x2B0F, 0x2B51, 0x2B52, 0x2B53, 0x2B54, 0x2B4D, 0x2B4E, 0x2AF1, 0x4033, 0x2AF2, 0x4035, 0x4036, 0x4037, 0x4038, 0x4039, 0x403A, 0x403B, 0x403C, 0x403D, 0x403E, 0x403F, 0x2A84, 0x4041, 0x4042, 0x4043, 0x4044, 0x4045, 0x4046, 0x4047, 0x4048, 0x4049, 0x404A, 0x404B, 0x404C, 0x404D, 0x404E, 0x404F, 0x4050, 0x4051, 0x4052, 0x4053, 0x4054, 0x4055, 0x4056, 0x4057, 0x4058, 0x2A85, 0x2A7E, 0x2A7F, 0x2A80, 0x2A81, 0x2A7A, 0x2A7B, 0x2A7C, 0x2A7D, 0x2A96, 0x2A92, 0x2A93, 0x4065, 0x4066, 0x4067, 0x4068, 0x4069, 0x406A, 0x406B, 0x406C, 0x406D, 0x406E, 0x406F, 0x4070, 0x4071, 0x4072, 0x4073, 0x4074, 0x3E76, 0x3E75, 0x2A94, 0x2A95, 0x3E7A, 0x3E79, 0x3E7C, 0x3E7B, 0x3E7E, 0x3E7D, 0x3E80, 0x3E7F, 0x2A8E, 0x2A8F, 0x3E84, 0x3E83, 0x2A90, 0x2A91, 0x2A8A, 0x2A8B, 0x2A8C, 0x2A8D, 0x1CC4, 0x1CC5, 0x1CC6, 0x1CC0, 0x1CC1, 0x1971, 0x1972, 0x1973, 0x1974, 0x022A, 0x0234, 0x01F5, 0x3E98, 0x3E97, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x195B, 0x40A1, 0x40A2, 0x1961, 0x1943, 0x3EA6, 0x3EA5, 0x3EA8, 0x3EA7, 0x3EAA, 0x3EA9, 0x3EAC, 0x3EAB, 0x3EAE, 0x3EAD, 0x3EB0, 0x3EAF, 0x3EB2, 0x3EB1, 0x3EB4, 0x3EB3, 0x40B5, 0x40B6, 0x40B7, 0x40B8, 0x40B9, 0x1949, 0x1CBA, 0x1CBB, 0x40BD, 0x40BE, 0x1CB4, 0x1CB5, 0x40C1, 0x40C2, 0x40C3, 0x40C4, 0x1CB6, 0x1CB7, 0x1CB0, 0x1CB1, 0x40C9, 0x40CA, 0x1CB2, 0x1CB3, 0x1CC9, 0x1CCA, 0x1CCC, 0x1CDB, 0x40D1, 0x40D2, 0x40D3, 0x40D4, 0x40D5, 0x40D6, 0x40D7, 0x40D8, 0x1CED, 0x1CF9, 0x1D2C, 0x1D06, 0x1CEC, 0x1CF4, 0x1CFE, 0x1D14, 0x1D1D, 0x1D2A, 0x0192, 0x0193, 0x40E5, 0x40E6, 0x40E7, 0x40E8, 0x40E9, 0x40EA, 0x40EB, 0x40EC, 0x40ED, 0x40EE, 0x40EF, 0x1D2D, 0x40F1, 0x40F2, 0x40F3, 0x40F4, 0x022A, 0x0234, 0x1D42, 0x1D1A, 0x01F5, 0x0209, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x1A3A, 0x1A36, 0x1A37, 0x1A19, 0x1A1F, 0x0198, 0x01A2, 0x1F90, 0x1F8C, 0x1F8D, 0x1F88, 0x1A0D, 0x19F5, 0x19FB, 0x1A01, 0x1A35, 0x1F96, 0x1F97, 0x1F98, 0x1F72, 0x1F73, 0x1F75, 0x1F70, 0x1F6A, 0x1F6B, 0x1F6D, 0x19A1, 0x1989, 0x1F82, 0x1F84, 0x1F7F, 0x1F7C, 0x09CC, 0x09CF, 0x09CC, 0x09CC, 0x09AD, 0x09AC, 0x1B90, 0x1B91, 0x1B88, 0x1B89, 0x1B8A, 0x1B8D, 0x0A1E, 0x0A1D, 0x0A4A, 0x0A49, 0x098C, 0x098B, 0x0986, 0x1B7E, 0x1B7F, 0x1B78, 0x1B79, 0x0215, 0x021F, 0x0198, 0x01A2, 0x01C9, 0x01DF, 0x0221, 0x022C, 0x2628, 0x2629, 0x2622, 0x2623, 0x2624, 0x2625, 0x261E, 0x261F, 0x2620, 0x2621, 0x25CE, 0x25E6, 0x25F6, 0x256B, 0x256E, 0x2575, 0x259D, 0x252C, 0x2542, 0x2557, 0x2563, 0x256A, 0x2580, 0x25A0, 0x2519, 0x2676, 0x2677, 0x2678, 0x2679, 0x2672, 0x2673, 0x2674, 0x2675, 0x266E, 0x266F, 0x2670, 0x2671, 0x266A, 0x266B, 0x266C, 0x266D, }; RediSearch-1.2.2/src/dep/libnu/gen/_ducet_switch.c000066400000000000000000001165441364126773500217670ustar00rootroot00000000000000/* Automatically generated file (contractions-toc), 1466614860 * * Tag : _nu_ducet * Contractions : 820 */ #include #include "../udb.h" const size_t _NU_DUCET_CONTRACTIONS = 820; /* contractions included in switch */ const size_t _NU_DUCET_CODEPOINTS = 19581; /* complementary codepoints number */ #define state_00AAB9 -838 #define state_000438 -826 #define state_0019B5 -749 #define state_001B09 -745 #define state_0019B7 -744 #define state_0019BA -737 #define state_00006C -712 #define state_0019B6 -686 #define state_00064A -684 #define state_000648 -674 #define state_00AABB -667 #define state_000418 -500 #define state_001B07 -482 #define state_001B05 -454 #define state_00AABC -394 #define state_000627 -391 #define state_000B92 -381 #define state_00004C -343 #define state_001B0D -252 #define state_001025 -217 #define state_000E40 -198 #define state_000E41 -197 #define state_000E42 -196 #define state_000E43 -195 #define state_000E44 -194 #define state_00AAB5 -171 #define state_00AAB6 -161 #define state_000EC1 -114 #define state_000EC0 -113 #define state_000EC3 -112 #define state_000EC2 -111 #define state_000EC4 -109 #define state_001B0B -59 #define state_001B11 -24 const int16_t _NU_DUCET_ROOTS_G[] = { 0, -34, 0, 0, -33, -32, -31, -30, -29, -28, 2, -26, -15, 0, 0, 3, 0, 0, -14, -13, -12, 8, 1, 8, -10, 0, -7, -6, 5, 20, 4, -4, -2, 0, }; const size_t _NU_DUCET_ROOTS_G_SIZE = sizeof(_NU_DUCET_ROOTS_G) / sizeof(*_NU_DUCET_ROOTS_G); /* codepoints */ const uint32_t _NU_DUCET_ROOTS_VALUES_C[] = { 0x00004C, 0x001B0D, 0x000648, 0x000EC0, 0x00064A, 0x000E44, 0x001B0B, 0x000EC1, 0x000EC3, 0x001B05, 0x000E41, 0x000E43, 0x00006C, 0x000627, 0x0019B5, 0x001025, 0x001B07, 0x00AAB9, 0x000E40, 0x0019B7, 0x000E42, 0x00AABC, 0x001B09, 0x0019BA, 0x000EC2, 0x0019B6, 0x000B92, 0x000418, 0x00AABB, 0x000438, 0x00AAB5, 0x00AAB6, 0x001B11, 0x000EC4, }; /* indexes */ const uint16_t _NU_DUCET_ROOTS_VALUES_I[] = { 0x0157, 0x00FC, 0x02A2, 0x0071, 0x02AC, 0x00C2, 0x003B, 0x0072, 0x0070, 0x01C6, 0x00C5, 0x00C3, 0x02C8, 0x0187, 0x02ED, 0x00D9, 0x01E2, 0x0346, 0x00C6, 0x02E8, 0x00C4, 0x018A, 0x02E9, 0x02E1, 0x006F, 0x02AE, 0x017D, 0x01F4, 0x029B, 0x033A, 0x00AB, 0x00A1, 0x0018, 0x006D, }; /* MPH lookup for root codepoints + binary search on balanced tree * for intermediate states */ int32_t _nu_ducet_weight_switch(uint32_t u, int32_t *w, void *context) { (void)(context); if (w == 0) { /* first entry, root states */ uint32_t state = nu_udb_lookup_value(u, _NU_DUCET_ROOTS_G, _NU_DUCET_ROOTS_G_SIZE, _NU_DUCET_ROOTS_VALUES_C, _NU_DUCET_ROOTS_VALUES_I); if (state != 0) { return -state; /* VALUES_I store negated (positive) states */ } } if (w != 0) { /* re-entry, intermediate states */ int32_t weight = *w; *w = 0; if (weight == state_00004C) { switch (u) { case 0x000387: return 0x000456; case 0x0000B7: return 0x000456; } *w = 1; return 0x00044D; } else if (weight < state_00004C) { if (weight == state_00064A) { switch (u) { case 0x000654: return 0x000C71; } *w = 1; return 0x000FE3; } else if (weight < state_00064A) { if (weight == state_0019B7) { switch (u) { case 0x0019A2: return 0x001E82; case 0x001999: return 0x001E55; case 0x001981: return 0x001DDD; case 0x00198E: return 0x001E1E; case 0x001988: return 0x001E00; case 0x001994: return 0x001E3C; case 0x0019A6: return 0x001E96; case 0x00198A: return 0x001E0A; case 0x001984: return 0x001DEC; case 0x00199D: return 0x001E69; case 0x001991: return 0x001E2D; case 0x0019A3: return 0x001E87; case 0x001980: return 0x001DD8; case 0x00198D: return 0x001E19; case 0x001995: return 0x001E41; case 0x0019A7: return 0x001E9B; case 0x00199A: return 0x001E5A; case 0x0019AA: return 0x001EAA; case 0x00199E: return 0x001E6E; case 0x001992: return 0x001E32; case 0x001987: return 0x001DFB; case 0x001996: return 0x001E46; case 0x0019A0: return 0x001E78; case 0x00199B: return 0x001E5F; case 0x001983: return 0x001DE7; case 0x0019AB: return 0x001EAF; case 0x0019A4: return 0x001E8C; case 0x00199F: return 0x001E73; case 0x001993: return 0x001E37; case 0x00198C: return 0x001E14; case 0x001986: return 0x001DF6; case 0x0019A8: return 0x001EA0; case 0x001997: return 0x001E4B; case 0x0019A1: return 0x001E7D; case 0x00199C: return 0x001E64; case 0x001998: return 0x001E50; case 0x001982: return 0x001DE2; case 0x00198F: return 0x001E23; case 0x001989: return 0x001E05; case 0x0019A5: return 0x001E91; case 0x00198B: return 0x001E0F; case 0x001985: return 0x001DF1; case 0x0019A9: return 0x001EA5; case 0x001990: return 0x001E28; } *w = 1; return 0x001EB8; } else if (weight < state_0019B7) { if (weight == state_0019B5) { switch (u) { case 0x0019A8: return 0x001E9E; case 0x00199F: return 0x001E71; case 0x001993: return 0x001E35; case 0x0019AA: return 0x001EA8; case 0x0019A7: return 0x001E99; case 0x001982: return 0x001DE0; case 0x00198F: return 0x001E21; case 0x001997: return 0x001E49; case 0x00199C: return 0x001E62; case 0x0019A0: return 0x001E76; case 0x00198B: return 0x001E0D; case 0x0019A9: return 0x001EA3; case 0x001990: return 0x001E26; case 0x0019A4: return 0x001E8A; case 0x001985: return 0x001DEF; case 0x001994: return 0x001E3A; case 0x0019AB: return 0x001EAD; case 0x001981: return 0x001DDB; case 0x0019A1: return 0x001E7B; case 0x00198E: return 0x001E1C; case 0x001998: return 0x001E4E; case 0x00199D: return 0x001E67; case 0x001991: return 0x001E2B; case 0x0019A5: return 0x001E8F; case 0x00198A: return 0x001E08; case 0x001984: return 0x001DEA; case 0x001995: return 0x001E3F; case 0x001989: return 0x001E03; case 0x00199A: return 0x001E58; case 0x001980: return 0x001DD6; case 0x00198D: return 0x001E17; case 0x001999: return 0x001E53; case 0x00199E: return 0x001E6C; case 0x0019A2: return 0x001E80; case 0x001987: return 0x001DF9; case 0x001992: return 0x001E30; case 0x001988: return 0x001DFE; case 0x0019A6: return 0x001E94; case 0x001983: return 0x001DE5; case 0x001996: return 0x001E44; case 0x00199B: return 0x001E5D; case 0x0019A3: return 0x001E85; case 0x00198C: return 0x001E12; case 0x001986: return 0x001DF4; } *w = 1; return 0x001EB6; } else if (weight < state_0019B5) { if (weight == state_000438) { switch (u) { case 0x000306: return 0x000987; } *w = 1; return 0x000977; } else if (weight < state_000438) { if (weight == state_00AAB9) { switch (u) { case 0x00AA92: return 0x001AAA; case 0x00AAA5: return 0x001B1C; case 0x00AAAC: return 0x001B46; case 0x00AA8F: return 0x001A98; case 0x00AA82: return 0x001A4A; case 0x00AA9C: return 0x001AE6; case 0x00AAA1: return 0x001B04; case 0x00AA97: return 0x001AC8; case 0x00AAAD: return 0x001B4C; case 0x00AA86: return 0x001A62; case 0x00AA93: return 0x001AB0; case 0x00AA9D: return 0x001AEC; case 0x00AA8A: return 0x001A7A; case 0x00AAA6: return 0x001B22; case 0x00AA94: return 0x001AB6; case 0x00AA8E: return 0x001A92; case 0x00AAAE: return 0x001B52; case 0x00AA81: return 0x001A44; case 0x00AAA2: return 0x001B0A; case 0x00AA90: return 0x001A9E; case 0x00AA9E: return 0x001AF2; case 0x00AAAA: return 0x001B3A; case 0x00AA85: return 0x001A5C; case 0x00AA9A: return 0x001ADA; case 0x00AAA7: return 0x001B28; case 0x00AA95: return 0x001ABC; case 0x00AA89: return 0x001A74; case 0x00AA8D: return 0x001A8C; case 0x00AA80: return 0x001A3E; case 0x00AA98: return 0x001ACE; case 0x00AAA3: return 0x001B10; case 0x00AA91: return 0x001AA4; case 0x00AAA8: return 0x001B2E; case 0x00AAAF: return 0x001B58; case 0x00AA84: return 0x001A56; case 0x00AA8C: return 0x001A86; case 0x00AA9F: return 0x001AF8; case 0x00AAA4: return 0x001B16; case 0x00AAAB: return 0x001B40; case 0x00AA88: return 0x001A6E; case 0x00AA83: return 0x001A50; case 0x00AA99: return 0x001AD4; case 0x00AA9B: return 0x001AE0; case 0x00AAA0: return 0x001AFE; case 0x00AA96: return 0x001AC2; case 0x00AAA9: return 0x001B34; case 0x00AA87: return 0x001A68; case 0x00AA8B: return 0x001A80; } *w = 1; return 0x001B5E; } } } else { /* weight > state_0019B5 */ if (weight == state_001B09) { switch (u) { case 0x001B35: return 0x001F39; } *w = 1; return 0x001F38; } } } else { /* weight > state_0019B7 */ if (weight == state_00006C) { switch (u) { case 0x0000B7: return 0x000445; case 0x000387: return 0x000445; } *w = 1; return 0x00043C; } else if (weight < state_00006C) { if (weight == state_0019BA) { switch (u) { case 0x00198F: return 0x001E24; case 0x0019A2: return 0x001E83; case 0x001995: return 0x001E42; case 0x00199C: return 0x001E65; case 0x001980: return 0x001DD9; case 0x001991: return 0x001E2E; case 0x0019A7: return 0x001E9C; case 0x001984: return 0x001DED; case 0x00199D: return 0x001E6A; case 0x00198A: return 0x001E0B; case 0x0019A3: return 0x001E88; case 0x001983: return 0x001DE8; case 0x00198E: return 0x001E1F; case 0x001996: return 0x001E47; case 0x0019A4: return 0x001E8D; case 0x001987: return 0x001DFC; case 0x00199E: return 0x001E6F; case 0x001992: return 0x001E33; case 0x0019A0: return 0x001E79; case 0x00199A: return 0x001E5B; case 0x001982: return 0x001DE3; case 0x00198D: return 0x001E1A; case 0x0019AA: return 0x001EAB; case 0x001997: return 0x001E4C; case 0x0019A5: return 0x001E92; case 0x001986: return 0x001DF7; case 0x0019A8: return 0x001EA1; case 0x001989: return 0x001E06; case 0x001993: return 0x001E38; case 0x00198C: return 0x001E15; case 0x0019A1: return 0x001E7E; case 0x001998: return 0x001E51; case 0x00199F: return 0x001E74; case 0x001994: return 0x001E3D; case 0x00199B: return 0x001E60; case 0x001981: return 0x001DDE; case 0x0019A9: return 0x001EA6; case 0x0019AB: return 0x001EB0; case 0x001988: return 0x001E01; case 0x001990: return 0x001E29; case 0x00198B: return 0x001E10; case 0x0019A6: return 0x001E97; case 0x001999: return 0x001E56; case 0x001985: return 0x001DF2; } *w = 1; return 0x001EBB; } } else { /* weight > state_00006C */ if (weight == state_0019B6) { switch (u) { case 0x001995: return 0x001E40; case 0x0019A3: return 0x001E86; case 0x00199A: return 0x001E59; case 0x001980: return 0x001DD7; case 0x00198D: return 0x001E18; case 0x001989: return 0x001E04; case 0x0019AA: return 0x001EA9; case 0x0019A7: return 0x001E9A; case 0x00199E: return 0x001E6D; case 0x001990: return 0x001E27; case 0x001985: return 0x001DF0; case 0x001994: return 0x001E3B; case 0x0019A2: return 0x001E81; case 0x001981: return 0x001DDC; case 0x00198E: return 0x001E1D; case 0x0019A6: return 0x001E95; case 0x00199D: return 0x001E68; case 0x00198A: return 0x001E09; case 0x001986: return 0x001DF5; case 0x001993: return 0x001E36; case 0x0019A1: return 0x001E7C; case 0x001982: return 0x001DE1; case 0x00198F: return 0x001E22; case 0x001997: return 0x001E4A; case 0x0019A5: return 0x001E90; case 0x00199C: return 0x001E63; case 0x00198B: return 0x001E0E; case 0x001987: return 0x001DFA; case 0x0019A9: return 0x001EA4; case 0x001992: return 0x001E31; case 0x0019A0: return 0x001E77; case 0x001999: return 0x001E54; case 0x001983: return 0x001DE6; case 0x001996: return 0x001E45; case 0x0019A4: return 0x001E8B; case 0x00199B: return 0x001E5E; case 0x00198C: return 0x001E13; case 0x001988: return 0x001DFF; case 0x0019AB: return 0x001EAE; case 0x0019A8: return 0x001E9F; case 0x00199F: return 0x001E72; case 0x001991: return 0x001E2C; case 0x001998: return 0x001E4F; case 0x001984: return 0x001DEB; } *w = 1; return 0x001EB7; } } } } else { /* weight > state_00064A */ if (weight == state_001B05) { switch (u) { case 0x001B35: return 0x001F35; } *w = 1; return 0x001F34; } else if (weight < state_001B05) { if (weight == state_000418) { switch (u) { case 0x000306: return 0x000988; } *w = 1; return 0x00097B; } else if (weight < state_000418) { if (weight == state_00AABB) { switch (u) { case 0x00AAA0: return 0x001AFF; case 0x00AA8D: return 0x001A8D; case 0x00AA81: return 0x001A45; case 0x00AA99: return 0x001AD5; case 0x00AA90: return 0x001A9F; case 0x00AAAF: return 0x001B59; case 0x00AA9D: return 0x001AED; case 0x00AA85: return 0x001A5D; case 0x00AA8A: return 0x001A7B; case 0x00AAAB: return 0x001B41; case 0x00AA89: return 0x001A75; case 0x00AAA7: return 0x001B29; case 0x00AA8E: return 0x001A93; case 0x00AA82: return 0x001A4B; case 0x00AA98: return 0x001ACF; case 0x00AA97: return 0x001AC9; case 0x00AAAE: return 0x001B53; case 0x00AAA3: return 0x001B11; case 0x00AA86: return 0x001A63; case 0x00AA8B: return 0x001A81; case 0x00AA93: return 0x001AB1; case 0x00AAAA: return 0x001B3B; case 0x00AAA6: return 0x001B23; case 0x00AA8F: return 0x001A99; case 0x00AA83: return 0x001A51; case 0x00AA9C: return 0x001AE7; case 0x00AA96: return 0x001AC3; case 0x00AAAD: return 0x001B4D; case 0x00AAA2: return 0x001B0B; case 0x00AA87: return 0x001A69; case 0x00AAA9: return 0x001B35; case 0x00AA8C: return 0x001A87; case 0x00AA92: return 0x001AAB; case 0x00AA9F: return 0x001AF9; case 0x00AAA5: return 0x001B1D; case 0x00AA9B: return 0x001AE1; case 0x00AA95: return 0x001ABD; case 0x00AAA1: return 0x001B05; case 0x00AA80: return 0x001A3F; case 0x00AAA8: return 0x001B2F; case 0x00AA91: return 0x001AA5; case 0x00AA9E: return 0x001AF3; case 0x00AA84: return 0x001A57; case 0x00AAA4: return 0x001B17; case 0x00AAAC: return 0x001B47; case 0x00AA9A: return 0x001ADB; case 0x00AA94: return 0x001AB7; case 0x00AA88: return 0x001A6F; } *w = 1; return 0x001B60; } else if (weight < state_00AABB) { if (weight == state_000648) { switch (u) { case 0x000654: return 0x000C68; } *w = 1; return 0x000FBB; } } } else { /* weight > state_000418 */ if (weight == state_001B07) { switch (u) { case 0x001B35: return 0x001F37; } *w = 1; return 0x001F36; } } } else { /* weight > state_001B05 */ if (weight == state_000627) { switch (u) { case 0x000653: return 0x000C5E; case 0x000655: return 0x000C6B; case 0x000654: return 0x000C61; } *w = 1; return 0x000C9B; } else if (weight < state_000627) { if (weight == state_00AABC) { switch (u) { case 0x00AA95: return 0x001ABE; case 0x00AAA1: return 0x001B06; case 0x00AA84: return 0x001A58; case 0x00AA98: return 0x001AD0; case 0x00AA91: return 0x001AA6; case 0x00AAAC: return 0x001B48; case 0x00AA9E: return 0x001AF4; case 0x00AA88: return 0x001A70; case 0x00AAA6: return 0x001B24; case 0x00AA8D: return 0x001A8E; case 0x00AA9A: return 0x001ADC; case 0x00AA96: return 0x001AC4; case 0x00AAA2: return 0x001B0C; case 0x00AA83: return 0x001A52; case 0x00AA99: return 0x001AD6; case 0x00AA92: return 0x001AAC; case 0x00AAAD: return 0x001B4E; case 0x00AA9F: return 0x001AFA; case 0x00AA87: return 0x001A6A; case 0x00AAA7: return 0x001B2A; case 0x00AA8C: return 0x001A88; case 0x00AA9B: return 0x001AE2; case 0x00AA97: return 0x001ACA; case 0x00AAA3: return 0x001B12; case 0x00AA82: return 0x001A4C; case 0x00AA93: return 0x001AB2; case 0x00AAAE: return 0x001B54; case 0x00AA86: return 0x001A64; case 0x00AAA8: return 0x001B30; case 0x00AA8B: return 0x001A82; case 0x00AAAA: return 0x001B3C; case 0x00AA9C: return 0x001AE8; case 0x00AAA4: return 0x001B18; case 0x00AA8F: return 0x001A9A; case 0x00AA81: return 0x001A46; case 0x00AA94: return 0x001AB8; case 0x00AAAF: return 0x001B5A; case 0x00AAA0: return 0x001B00; case 0x00AA85: return 0x001A5E; case 0x00AAA9: return 0x001B36; case 0x00AA8A: return 0x001A7C; case 0x00AA90: return 0x001AA0; case 0x00AAAB: return 0x001B42; case 0x00AA9D: return 0x001AEE; case 0x00AA89: return 0x001A76; case 0x00AAA5: return 0x001B1E; case 0x00AA8E: return 0x001A94; case 0x00AA80: return 0x001A40; } *w = 1; return 0x001B61; } } else { /* weight > state_000627 */ if (weight == state_000B92) { switch (u) { case 0x000BD7: return 0x0013D6; } *w = 1; return 0x0013D4; } } } } } else { /* weight > state_00004C */ if (weight == state_00AAB6) { switch (u) { case 0x00AA9D: return 0x001AEB; case 0x00AA87: return 0x001A67; case 0x00AA8A: return 0x001A79; case 0x00AAA9: return 0x001B33; case 0x00AAAD: return 0x001B4B; case 0x00AA92: return 0x001AA9; case 0x00AAA0: return 0x001AFD; case 0x00AA99: return 0x001AD3; case 0x00AA83: return 0x001A4F; case 0x00AA96: return 0x001AC1; case 0x00AA8F: return 0x001A97; case 0x00AAA4: return 0x001B15; case 0x00AA9C: return 0x001AE5; case 0x00AA88: return 0x001A6D; case 0x00AA8B: return 0x001A7F; case 0x00AAA8: return 0x001B2D; case 0x00AAAC: return 0x001B45; case 0x00AA91: return 0x001AA3; case 0x00AA98: return 0x001ACD; case 0x00AA84: return 0x001A55; case 0x00AA95: return 0x001ABB; case 0x00AAA3: return 0x001B0F; case 0x00AA80: return 0x001A3D; case 0x00AA9B: return 0x001ADF; case 0x00AA89: return 0x001A73; case 0x00AA8C: return 0x001A85; case 0x00AAA7: return 0x001B27; case 0x00AAAB: return 0x001B3F; case 0x00AA90: return 0x001A9D; case 0x00AA9F: return 0x001AF7; case 0x00AA85: return 0x001A5B; case 0x00AAAF: return 0x001B57; case 0x00AA94: return 0x001AB5; case 0x00AAA2: return 0x001B09; case 0x00AA81: return 0x001A43; case 0x00AA9A: return 0x001AD9; case 0x00AA8D: return 0x001A8B; case 0x00AAA6: return 0x001B21; case 0x00AAAA: return 0x001B39; case 0x00AA9E: return 0x001AF1; case 0x00AA86: return 0x001A61; case 0x00AAAE: return 0x001B51; case 0x00AA93: return 0x001AAF; case 0x00AAA1: return 0x001B03; case 0x00AA82: return 0x001A49; case 0x00AA97: return 0x001AC7; case 0x00AA8E: return 0x001A91; case 0x00AAA5: return 0x001B1B; } *w = 1; return 0x001B5D; } else if (weight < state_00AAB6) { if (weight == state_000E42) { switch (u) { case 0x000E1C: return 0x0018FE; case 0x000E16: return 0x0018DA; case 0x000E24: return 0x00192E; case 0x000E07: return 0x001880; case 0x000E0C: return 0x00189E; case 0x000E12: return 0x0018C2; case 0x000E1F: return 0x001910; case 0x000E2D: return 0x001964; case 0x000E21: return 0x00191C; case 0x000E1B: return 0x0018F8; case 0x000E15: return 0x0018D4; case 0x000E25: return 0x001934; case 0x000E2A: return 0x001952; case 0x000E23: return 0x001928; case 0x000E11: return 0x0018BC; case 0x000E1E: return 0x00190A; case 0x000E2E: return 0x00196A; case 0x000E04: return 0x00186E; case 0x000E1A: return 0x0018F2; case 0x000E14: return 0x0018CE; case 0x000E08: return 0x001886; case 0x000E0D: return 0x0018A4; case 0x000E01: return 0x00185C; case 0x000E19: return 0x0018EC; case 0x000E28: return 0x001946; case 0x000E10: return 0x0018B6; case 0x000E26: return 0x00193A; case 0x000E1D: return 0x001904; case 0x000E2B: return 0x001958; case 0x000E05: return 0x001874; case 0x000E0A: return 0x001892; case 0x000E09: return 0x00188C; case 0x000E0E: return 0x0018AA; case 0x000E02: return 0x001862; case 0x000E18: return 0x0018E6; case 0x000E17: return 0x0018E0; case 0x000E27: return 0x001940; case 0x000E2C: return 0x00195E; case 0x000E06: return 0x00187A; case 0x000E0B: return 0x001898; case 0x000E13: return 0x0018C8; case 0x000E29: return 0x00194C; case 0x000E20: return 0x001916; case 0x000E22: return 0x001922; case 0x000E0F: return 0x0018B0; case 0x000E03: return 0x001868; } *w = 1; return 0x001973; } else if (weight < state_000E42) { if (weight == state_000E40) { switch (u) { case 0x000E04: return 0x00186C; case 0x000E27: return 0x00193E; case 0x000E11: return 0x0018BA; case 0x000E2C: return 0x00195C; case 0x000E1E: return 0x001908; case 0x000E18: return 0x0018E4; case 0x000E0D: return 0x0018A2; case 0x000E01: return 0x00185A; case 0x000E1A: return 0x0018F0; case 0x000E14: return 0x0018CC; case 0x000E05: return 0x001872; case 0x000E0A: return 0x001890; case 0x000E20: return 0x001914; case 0x000E10: return 0x0018B4; case 0x000E29: return 0x00194A; case 0x000E1D: return 0x001902; case 0x000E0E: return 0x0018A8; case 0x000E24: return 0x00192C; case 0x000E17: return 0x0018DE; case 0x000E02: return 0x001860; case 0x000E2D: return 0x001962; case 0x000E21: return 0x00191A; case 0x000E13: return 0x0018C6; case 0x000E22: return 0x001920; case 0x000E06: return 0x001878; case 0x000E0B: return 0x001896; case 0x000E25: return 0x001932; case 0x000E2A: return 0x001950; case 0x000E1C: return 0x0018FC; case 0x000E16: return 0x0018D8; case 0x000E0F: return 0x0018AE; case 0x000E03: return 0x001866; case 0x000E2E: return 0x001968; case 0x000E08: return 0x001884; case 0x000E12: return 0x0018C0; case 0x000E1F: return 0x00190E; case 0x000E07: return 0x00187E; case 0x000E0C: return 0x00189C; case 0x000E26: return 0x001938; case 0x000E2B: return 0x001956; case 0x000E1B: return 0x0018F6; case 0x000E19: return 0x0018EA; case 0x000E23: return 0x001926; case 0x000E28: return 0x001944; case 0x000E09: return 0x00188A; case 0x000E15: return 0x0018D2; } *w = 1; return 0x001971; } else if (weight < state_000E40) { if (weight == state_001025) { switch (u) { case 0x00102E: return 0x001D4D; } *w = 1; return 0x001D4C; } else if (weight < state_001025) { if (weight == state_001B0D) { switch (u) { case 0x001B35: return 0x001F3D; } *w = 1; return 0x001F3C; } } } else { /* weight > state_000E40 */ if (weight == state_000E41) { switch (u) { case 0x000E2C: return 0x00195D; case 0x000E26: return 0x001939; case 0x000E14: return 0x0018CD; case 0x000E01: return 0x00185B; case 0x000E0E: return 0x0018A9; case 0x000E08: return 0x001885; case 0x000E1D: return 0x001903; case 0x000E11: return 0x0018BB; case 0x000E0A: return 0x001891; case 0x000E04: return 0x00186D; case 0x000E29: return 0x00194B; case 0x000E2B: return 0x001957; case 0x000E25: return 0x001933; case 0x000E15: return 0x0018D3; case 0x000E1A: return 0x0018F1; case 0x000E0D: return 0x0018A3; case 0x000E21: return 0x00191B; case 0x000E2E: return 0x001969; case 0x000E1E: return 0x001909; case 0x000E23: return 0x001927; case 0x000E07: return 0x00187F; case 0x000E2A: return 0x001951; case 0x000E24: return 0x00192D; case 0x000E12: return 0x0018C1; case 0x000E03: return 0x001867; case 0x000E20: return 0x001915; case 0x000E16: return 0x0018D9; case 0x000E28: return 0x001945; case 0x000E2D: return 0x001963; case 0x000E1B: return 0x0018F7; case 0x000E0C: return 0x00189D; case 0x000E06: return 0x001879; case 0x000E1F: return 0x00190F; case 0x000E13: return 0x0018C7; case 0x000E18: return 0x0018E5; case 0x000E02: return 0x001861; case 0x000E0F: return 0x0018AF; case 0x000E27: return 0x00193F; case 0x000E17: return 0x0018DF; case 0x000E1C: return 0x0018FD; case 0x000E0B: return 0x001897; case 0x000E09: return 0x00188B; case 0x000E22: return 0x001921; case 0x000E10: return 0x0018B5; case 0x000E19: return 0x0018EB; case 0x000E05: return 0x001873; } *w = 1; return 0x001972; } } } else { /* weight > state_000E42 */ if (weight == state_000E44) { switch (u) { case 0x000E1E: return 0x00190C; case 0x000E10: return 0x0018B8; case 0x000E08: return 0x001888; case 0x000E01: return 0x00185E; case 0x000E28: return 0x001948; case 0x000E0E: return 0x0018AC; case 0x000E14: return 0x0018D0; case 0x000E2B: return 0x00195A; case 0x000E27: return 0x001942; case 0x000E29: return 0x00194E; case 0x000E0A: return 0x001894; case 0x000E18: return 0x0018E8; case 0x000E22: return 0x001924; case 0x000E1D: return 0x001906; case 0x000E13: return 0x0018CA; case 0x000E09: return 0x00188E; case 0x000E06: return 0x00187C; case 0x000E17: return 0x0018E2; case 0x000E1C: return 0x001900; case 0x000E2C: return 0x001960; case 0x000E02: return 0x001864; case 0x000E0F: return 0x0018B2; case 0x000E12: return 0x0018C4; case 0x000E24: return 0x001930; case 0x000E0B: return 0x00189A; case 0x000E07: return 0x001882; case 0x000E16: return 0x0018DC; case 0x000E20: return 0x001918; case 0x000E23: return 0x00192A; case 0x000E1B: return 0x0018FA; case 0x000E2D: return 0x001966; case 0x000E03: return 0x00186A; case 0x000E1F: return 0x001912; case 0x000E25: return 0x001936; case 0x000E0C: return 0x0018A0; case 0x000E04: return 0x001870; case 0x000E11: return 0x0018BE; case 0x000E21: return 0x00191E; case 0x000E2E: return 0x00196C; case 0x000E0D: return 0x0018A6; case 0x000E15: return 0x0018D6; case 0x000E1A: return 0x0018F4; case 0x000E2A: return 0x001954; case 0x000E26: return 0x00193C; case 0x000E05: return 0x001876; case 0x000E19: return 0x0018EE; } *w = 1; return 0x001975; } else if (weight < state_000E44) { if (weight == state_000E43) { switch (u) { case 0x000E02: return 0x001863; case 0x000E22: return 0x001923; case 0x000E13: return 0x0018C9; case 0x000E25: return 0x001935; case 0x000E2A: return 0x001953; case 0x000E06: return 0x00187B; case 0x000E0B: return 0x001899; case 0x000E28: return 0x001947; case 0x000E1C: return 0x0018FF; case 0x000E2E: return 0x00196B; case 0x000E20: return 0x001917; case 0x000E0F: return 0x0018B1; case 0x000E01: return 0x00185D; case 0x000E14: return 0x0018CF; case 0x000E24: return 0x00192F; case 0x000E05: return 0x001875; case 0x000E0A: return 0x001893; case 0x000E10: return 0x0018B7; case 0x000E1D: return 0x001905; case 0x000E2D: return 0x001965; case 0x000E09: return 0x00188D; case 0x000E0E: return 0x0018AB; case 0x000E15: return 0x0018D5; case 0x000E27: return 0x001941; case 0x000E2C: return 0x00195F; case 0x000E04: return 0x00186F; case 0x000E18: return 0x0018E7; case 0x000E11: return 0x0018BD; case 0x000E1E: return 0x00190B; case 0x000E08: return 0x001887; case 0x000E23: return 0x001929; case 0x000E0D: return 0x0018A5; case 0x000E1A: return 0x0018F3; case 0x000E16: return 0x0018DB; case 0x000E26: return 0x00193B; case 0x000E2B: return 0x001959; case 0x000E03: return 0x001869; case 0x000E19: return 0x0018ED; case 0x000E29: return 0x00194D; case 0x000E12: return 0x0018C3; case 0x000E1F: return 0x001911; case 0x000E07: return 0x001881; case 0x000E0C: return 0x00189F; case 0x000E1B: return 0x0018F9; case 0x000E17: return 0x0018E1; case 0x000E21: return 0x00191D; } *w = 1; return 0x001974; } } else { /* weight > state_000E44 */ if (weight == state_00AAB5) { switch (u) { case 0x00AAA8: return 0x001B2C; case 0x00AA9F: return 0x001AF6; case 0x00AA93: return 0x001AAE; case 0x00AAAA: return 0x001B38; case 0x00AAA7: return 0x001B26; case 0x00AA82: return 0x001A48; case 0x00AA8F: return 0x001A96; case 0x00AA97: return 0x001AC6; case 0x00AAAE: return 0x001B50; case 0x00AA9C: return 0x001AE4; case 0x00AAA0: return 0x001AFC; case 0x00AA8B: return 0x001A7E; case 0x00AAA9: return 0x001B32; case 0x00AA90: return 0x001A9C; case 0x00AAA4: return 0x001B14; case 0x00AA85: return 0x001A5A; case 0x00AA94: return 0x001AB4; case 0x00AAAB: return 0x001B3E; case 0x00AA81: return 0x001A42; case 0x00AAA1: return 0x001B02; case 0x00AA8E: return 0x001A90; case 0x00AA98: return 0x001ACC; case 0x00AAAF: return 0x001B56; case 0x00AA9D: return 0x001AEA; case 0x00AA91: return 0x001AA2; case 0x00AAA5: return 0x001B1A; case 0x00AA8A: return 0x001A78; case 0x00AA84: return 0x001A54; case 0x00AA95: return 0x001ABA; case 0x00AA89: return 0x001A72; case 0x00AAAC: return 0x001B44; case 0x00AA9A: return 0x001AD8; case 0x00AA80: return 0x001A3C; case 0x00AA8D: return 0x001A8A; case 0x00AA99: return 0x001AD2; case 0x00AA9E: return 0x001AF0; case 0x00AAA2: return 0x001B08; case 0x00AA87: return 0x001A66; case 0x00AA92: return 0x001AA8; case 0x00AA88: return 0x001A6C; case 0x00AAA6: return 0x001B20; case 0x00AA83: return 0x001A4E; case 0x00AA96: return 0x001AC0; case 0x00AAAD: return 0x001B4A; case 0x00AA9B: return 0x001ADE; case 0x00AAA3: return 0x001B0E; case 0x00AA8C: return 0x001A84; case 0x00AA86: return 0x001A60; } *w = 1; return 0x001B5C; } } } } else { /* weight > state_00AAB6 */ if (weight == state_000EC2) { switch (u) { case 0x000E82: return 0x001986; case 0x000E9B: return 0x0019DA; case 0x000EDD: return 0x001A22; case 0x000EAD: return 0x001A28; case 0x000E9F: return 0x0019F2; case 0x000EAA: return 0x00199E; case 0x000E81: return 0x001980; case 0x000E9C: return 0x0019E0; case 0x000E94: return 0x0019B6; case 0x000EDC: return 0x001A1C; case 0x000EAE: return 0x001A2E; case 0x000EA1: return 0x0019F8; case 0x000E84: return 0x00198C; case 0x000EA5: return 0x001A0A; case 0x000EAB: return 0x001A16; case 0x000E95: return 0x0019BC; case 0x000EA2: return 0x0019FE; case 0x000E99: return 0x0019CE; case 0x000E8A: return 0x0019A4; case 0x000EDF: return 0x0019AA; case 0x000E88: return 0x001998; case 0x000E9D: return 0x0019E6; case 0x000E87: return 0x001992; case 0x000E96: return 0x0019C2; case 0x000E8D: return 0x0019B0; case 0x000E9A: return 0x0019D4; case 0x000EA3: return 0x001A04; case 0x000EDE: return 0x00197A; case 0x000E9E: return 0x0019EC; case 0x000EA7: return 0x001A10; case 0x000E97: return 0x0019C8; } *w = 1; return 0x001A38; } else if (weight < state_000EC2) { if (weight == state_000EC0) { switch (u) { case 0x000E84: return 0x00198A; case 0x000E9D: return 0x0019E4; case 0x000E8A: return 0x0019A2; case 0x000EAB: return 0x001A14; case 0x000E88: return 0x001996; case 0x000E99: return 0x0019CC; case 0x000E96: return 0x0019C0; case 0x000EA2: return 0x0019FC; case 0x000E87: return 0x001990; case 0x000E9E: return 0x0019EA; case 0x000EDE: return 0x001978; case 0x000E9A: return 0x0019D2; case 0x000EA7: return 0x001A0E; case 0x000E82: return 0x001984; case 0x000E8D: return 0x0019AE; case 0x000E97: return 0x0019C6; case 0x000EA3: return 0x001A02; case 0x000EAD: return 0x001A26; case 0x000EDD: return 0x001A20; case 0x000E9F: return 0x0019F0; case 0x000E94: return 0x0019B4; case 0x000E9B: return 0x0019D8; case 0x000EAE: return 0x001A2C; case 0x000E81: return 0x00197E; case 0x000EAA: return 0x00199C; case 0x000EA5: return 0x001A08; case 0x000EDC: return 0x001A1A; case 0x000E95: return 0x0019BA; case 0x000E9C: return 0x0019DE; case 0x000EA1: return 0x0019F6; case 0x000EDF: return 0x0019A8; } *w = 1; return 0x001A36; } else if (weight < state_000EC0) { if (weight == state_000EC1) { switch (u) { case 0x000EAD: return 0x001A27; case 0x000E97: return 0x0019C7; case 0x000EA1: return 0x0019F7; case 0x000E9C: return 0x0019DF; case 0x000E82: return 0x001985; case 0x000EDE: return 0x001979; case 0x000EA5: return 0x001A09; case 0x000E87: return 0x001991; case 0x000E96: return 0x0019C1; case 0x000E9B: return 0x0019D9; case 0x000E99: return 0x0019CD; case 0x000E88: return 0x001997; case 0x000EAB: return 0x001A15; case 0x000E9F: return 0x0019F1; case 0x000E84: return 0x00198B; case 0x000EDF: return 0x0019A9; case 0x000EA3: return 0x001A03; case 0x000E8D: return 0x0019AF; case 0x000E95: return 0x0019BB; case 0x000EDC: return 0x001A1B; case 0x000EA7: return 0x001A0F; case 0x000E9A: return 0x0019D3; case 0x000EAA: return 0x00199D; case 0x000E9E: return 0x0019EB; case 0x000EA2: return 0x0019FD; case 0x000E81: return 0x00197F; case 0x000EAE: return 0x001A2D; case 0x000E94: return 0x0019B5; case 0x000E8A: return 0x0019A3; case 0x000EDD: return 0x001A21; case 0x000E9D: return 0x0019E5; } *w = 1; return 0x001A37; } } else { /* weight > state_000EC0 */ if (weight == state_000EC3) { switch (u) { case 0x000E96: return 0x0019C3; case 0x000EAE: return 0x001A2F; case 0x000E9C: return 0x0019E1; case 0x000EA1: return 0x0019F9; case 0x000EDE: return 0x00197B; case 0x000EA5: return 0x001A0B; case 0x000E84: return 0x00198D; case 0x000E95: return 0x0019BD; case 0x000EAD: return 0x001A29; case 0x000E9B: return 0x0019DB; case 0x000E99: return 0x0019CF; case 0x000EDF: return 0x0019AB; case 0x000E9F: return 0x0019F3; case 0x000E94: return 0x0019B7; case 0x000E88: return 0x001999; case 0x000EDC: return 0x001A1D; case 0x000E81: return 0x001981; case 0x000E9A: return 0x0019D5; case 0x000E8D: return 0x0019B1; case 0x000E9E: return 0x0019ED; case 0x000EA3: return 0x001A05; case 0x000EA7: return 0x001A11; case 0x000EAB: return 0x001A17; case 0x000E82: return 0x001987; case 0x000E97: return 0x0019C9; case 0x000E9D: return 0x0019E7; case 0x000EA2: return 0x0019FF; case 0x000E87: return 0x001993; case 0x000E8A: return 0x0019A5; case 0x000EDD: return 0x001A23; case 0x000EAA: return 0x00199F; } *w = 1; return 0x001A39; } } } else { /* weight > state_000EC2 */ if (weight == state_001B0B) { switch (u) { case 0x001B35: return 0x001F3B; } *w = 1; return 0x001F3A; } else if (weight < state_001B0B) { if (weight == state_000EC4) { switch (u) { case 0x000EDD: return 0x001A24; case 0x000E9F: return 0x0019F4; case 0x000EAA: return 0x0019A0; case 0x000EA7: return 0x001A12; case 0x000E82: return 0x001988; case 0x000E97: return 0x0019CA; case 0x000EDC: return 0x001A1E; case 0x000EAE: return 0x001A30; case 0x000E9C: return 0x0019E2; case 0x000E94: return 0x0019B8; case 0x000EAB: return 0x001A18; case 0x000E81: return 0x001982; case 0x000EA1: return 0x0019FA; case 0x000EDF: return 0x0019AC; case 0x000E9D: return 0x0019E8; case 0x000EA5: return 0x001A0C; case 0x000E8A: return 0x0019A6; case 0x000E84: return 0x00198E; case 0x000E95: return 0x0019BE; case 0x000E9A: return 0x0019D6; case 0x000E8D: return 0x0019B2; case 0x000E99: return 0x0019D0; case 0x000E9E: return 0x0019EE; case 0x000EA2: return 0x001A00; case 0x000E87: return 0x001994; case 0x000EDE: return 0x00197C; case 0x000E88: return 0x00199A; case 0x000E96: return 0x0019C4; case 0x000EAD: return 0x001A2A; case 0x000E9B: return 0x0019DC; case 0x000EA3: return 0x001A06; } *w = 1; return 0x001A3A; } } else { /* weight > state_001B0B */ if (weight == state_001B11) { switch (u) { case 0x001B35: return 0x001F41; } *w = 1; return 0x001F40; } } } } } } return 0; } RediSearch-1.2.2/src/dep/libnu/gen/_tofold.c000066400000000000000000002007201364126773500205570ustar00rootroot00000000000000/* Automatically generated file (mph.py), 1466614855 * * Tag : NU_TOFOLD * Prime : 01000193, * G size : 1401, * Combined length : 5423, * Encoding : UTF-8 */ #include const int16_t NU_TOFOLD_G[] = { 1, 1, -1401, -1400, -1399, -1398, -1397, -1396, -1395, -1394, -1393, -1392, -1391, -1390, -1389, -1388, -1387, -1386, -1385, -1384, -1383, -1382, -1381, -1380, 1, -1379, 1, 0, -1378, -1377, -1376, -1375, -1374, -1373, -1372, -1371, -1370, -1369, -1368, -1367, 0, -1366, 0, 1, 0, -1365, 0, -1364, 0, -1363, 0, -1362, 0, -1361, 0, -1360, -1359, -1358, -1357, -1356, 0, -1355, -1354, -1353, 0, 0, 0, 0, 0, 0, 0, 0, -1352, -1351, -1350, -1349, -1348, -1347, -1346, -1345, -1344, -1343, -1342, -1341, -1340, -1339, -1338, -1337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1336, 0, -1335, 0, -1334, 0, -1333, 0, -1332, 0, -1330, 0, -1328, 0, -1327, 0, 0, 0, -1326, 0, 0, 0, 0, 0, -1325, 0, 0, 0, -1324, 0, -1323, 0, -1322, 0, -1321, 0, -1320, 0, -1319, 0, -1318, 0, -1317, 0, -1316, 0, -1315, 0, -1313, 0, -1312, 0, -1311, 0, -1310, 0, -1309, 0, -1307, 0, -1306, 0, -1305, 0, -1304, 0, -1303, -1302, -1299, 0, -1297, 0, -1296, 0, -1294, 0, -1293, 0, -1292, -1291, 0, -1290, -1289, -1288, 0, -1287, 0, 1, 0, -1286, -1285, -1284, 0, -1283, 0, 0, -1282, 0, -1281, 0, -1280, 0, -1279, 0, -1278, 0, -1277, 0, -1276, 0, -1275, 0, -1274, 0, -1273, 0, -1272, 0, -1271, 0, 1, 0, 1, -1270, 1, -1269, -1268, 5, -1267, -1266, -1265, 2, 1, -1263, 9, 4, -1262, 1, 1, -1261, 2, 7, -1259, 3, 1, 7, 1, 5, 1, 1, 1, 16, 1, 1, 1, 17, 1, 25, 1, -1257, -1256, -1255, 0, -1254, 0, 0, 0, -1253, 0, -1252, 0, -1251, -1250, -1249, 0, 1, -1248, -1247, 1, -1246, 1, 1, -1245, 1, 1, -1244, 4, -1243, 1, -1242, 1, 0, -1241, 0, -1240, 0, 0, -1239, 0, 0, 0, 0, 0, 0, -1238, 0, -1237, -1236, -1232, 1, -1231, 1, 7, -1230, 2, -1229, -1228, 4, 2, 2, 9, 9, -1226, 8, 2, 1, 1, 1, 1, 3, 8, 9, 1, 2, 1, 6, 27, 32, 6, 32, 6, 64, 2, 65, 5, 66, 4, 71, 2, 1, 1, 1, 1, 1, 2, 2, -1224, 2, -1223, 6, -1221, 11, -1220, 12, -1219, 1, -1218, 1, -1217, 1, -1216, 6, -1211, -1210, 0, -1209, 0, -1208, 0, -1207, 0, -1206, 0, -1205, 0, -1204, 0, -1203, -1202, 0, -1201, 0, -1200, 0, -1199, 0, 0, -1198, 0, -1197, 0, 1, -1196, 1, -1195, 1, -1194, 1, -1193, 1, -1192, 1, -1191, 1, -1190, 2, -1189, 1, -1188, 1, -1187, 1, -1186, 1, -1185, 1, -1184, 1, 3, -1183, 2, -1182, 1, 0, -1181, -1180, -1179, 1, 1, -1178, -1177, 1, -1176, 2, -1175, 4, -1174, 4, -1173, 1, 4, 1, 1, 4, 7, 8, 12, -1172, 17, -1169, -1168, 1, -1167, 17, -1166, 1, -1165, -1162, -1161, 1, -1159, -1157, 0, -1154, 0, -1153, 0, 0, 0, 0, 0, 0, 0, -1151, -1150, -1143, -1141, -1140, -1139, -1131, -1122, -1120, -1117, -1116, -1115, -1113, -1112, -1111, -1109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, -1107, 9, -1106, 8, -1105, 11, 14, 8, 16, 8, -1104, 8, 16, 8, 16, 1, -1099, 1, -1097, 1, -1095, 8, -1091, 56, -1089, 56, -1087, 56, -1085, 56, -1083, 3, -1081, 7, -1079, 8, -1077, 11, 0, -1073, 0, -1066, 0, -1063, 0, -1062, 0, -1060, 0, -1057, 0, -1044, 0, 32, -1043, 32, -1021, 32, -1020, 37, -1019, 41, -996, 38, -992, 41, -991, 40, -990, 34, -989, 38, -988, 40, -987, 57, -986, 33, -984, 39, -983, 34, -982, 57, -980, -978, 0, -976, 0, -975, 0, -974, 0, -973, 0, -972, 0, 0, 0, 0, 0, 0, 0, -971, -970, 0, 0, 0, 0, 0, 0, -967, 0, -962, 0, 0, 0, 0, -961, 0, 0, -960, -958, -957, 7, -956, 9, 16, 9, -955, -954, -953, 30, -951, 27, 40, 40, 45, 41, 64, 64, 67, -949, 65, 65, 68, -948, -947, -945, -938, 64, 64, 64, 4, 65, 8, 64, 8, -935, -933, -932, 14, -857, 4, -856, 40, 0, -836, 0, -835, 0, -834, 0, -832, -827, 10, 12, -825, -823, -821, -820, -818, 65, -817, 64, 67, -816, 64, -815, 64, 0, -814, 0, 0, 0, -813, -812, -811, 2, -809, -808, 2, 4, 1, 9, 1, 13, 1, 1, 1, 19, 1, 27, 1, 32, 32, -807, -806, -805, 28, -803, -801, -799, 1, 34, 1, 10, 33, 20, 32, -797, -783, -779, 17, 36, -776, 0, 0, -775, -773, 0, -769, -768, 0, 0, -767, 4, 0, 11, -766, 9, 11, 16, -765, -763, -762, -758, -757, 0, 0, 0, 0, 0, 0, -756, -742, 0, -712, -710, 0, 0, -707, 0, -706, 0, -705, 0, -704, 0, -703, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -702, 0, 0, 0, 0, 0, -701, -700, -698, 0, -697, -696, 0, -695, -694, 0, -693, -692, -690, 0, 0, -688, 0, 1, 0, -687, 0, 1, 0, 4, 0, 5, 0, 1, 0, 8, 0, -686, 0, -685, 0, 0, 0, -683, 0, -681, 0, -680, 0, -678, 0, -676, 0, -675, 0, -674, 0, -673, 0, -672, 0, -671, 0, -670, 0, -669, 0, -668, 0, -667, 0, 1, -666, 1, -665, 1, -664, 1, -662, 1, -661, 1, -660, 1, -659, 1, -658, -657, -656, -655, -654, -653, -652, -651, 1, -650, 1, -649, -648, 1, 1, -647, -646, 1, -645, -644, 0, 1, -643, -642, -641, 1, -639, 2, -638, -637, -636, -635, -634, 1, -633, 1, 1, 1, -632, 1, -631, 1, -630, 1, -629, -628, -627, 6, 5, 1, 17, 8, -626, 2, 18, 22, 0, 4, 16, 5, -625, -624, 0, -623, -621, 33, 10, 0, -619, 32, 15, -617, 32, 35, 36, 38, 40, -615, -611, -610, -607, -606, -605, 0, 0, -604, -602, 0, -601, -600, -597, -596, -595, 0, 0, 0, -594, -593, -587, 0, 0, -585, -581, 0, -579, -577, -574, -573, -572, 0, 0, 0, -568, 0, 0, 0, 0, 0, 0, 0, 0, -566, -565, -564, -451, 0, 0, -450, -449, 0, 0, 0, 0, 0, 0, 0, 0, -448, -447, -446, -445, -444, -443, -442, -441, 0, 0, 0, 0, 0, 0, 0, 0, -440, -438, -434, -424, -423, -387, -384, -381, 0, 0, 0, 0, 0, 0, 0, 0, -380, -378, -377, -371, -363, -361, -359, -358, 0, -357, 0, -355, 0, -354, 0, -353, -351, 0, -349, 0, -347, 0, -345, 0, 0, 0, 0, 0, 0, 0, 0, 0, -343, -341, -338, -337, 0, 0, 32, -334, -333, 0, -331, 0, -330, 0, -328, 0, -326, 0, -325, 0, -323, 0, -322, 0, 39, 0, 43, 0, 43, 0, 48, 0, 2, -320, 2, -319, 1, -318, 10, -317, 79, -316, -315, -308, 17, 2, 128, -295, 20, -293, 1, 3, -292, -290, 56, 0, -289, -285, -284, -282, -277, -275, -272, -271, -270, -269, -268, -267, -266, -265, 0, -263, -262, -261, -257, -256, -254, -252, -250, -246, -245, -244, -243, -242, 0, 6, -241, 2, 0, -238, -236, 4, -232, -231, -230, -229, -228, -227, -226, -225, -214, -212, 0, -211, 0, -209, 0, -191, 0, -187, -185, 57, -184, 58, -183, 37, -181, 57, -180, 65, -179, 6, -178, 64, -177, 45, 0, -176, 0, -175, 0, -174, 0, -171, 0, -169, 0, -160, 0, -157, 0, -142, -138, 70, -137, 37, 0, -133, 0, -129, 0, -128, 0, 3, 0, -120, 0, -119, -55, 132, -53, 40, -52, 40, -51, 77, -50, 133, -49, 17, -48, 17, -47, 16, 0, -46, 0, -45, 0, -44, 0, -43, 0, -42, 0, -41, 0, -40, 0, -39, 0, -38, -37, -36, 0, -35, -34, 1, -33, 1, 0, -32, 0, -31, 0, -30, -27, 4, 9, 1, 12, 1, 16, 4, 19, 4, 16, 1, 16, 1, 16, 1, 1, 1, -26, 12, -21, 8, -20, 38, -19, 1, -18, 12, -17, 8, -16, 37, 0, -15, 0, -14, 0, -13, 0, -11, 0, -10, 0, -9, 0, -8, 0, -5, -1, 4, 9, 1, 8, 1, 8, 4, 6, 24, 3, 3, 7, 26, 26, }; const size_t NU_TOFOLD_G_SIZE = sizeof(NU_TOFOLD_G) / sizeof(*NU_TOFOLD_G); /* codepoints */ const uint32_t NU_TOFOLD_VALUES_C[] = { 0x010423, 0x000041, 0x000042, 0x000043, 0x001E46, 0x000045, 0x000047, 0x001E40, 0x001E42, 0x001E5C, 0x001E5E, 0x000587, 0x001E58, 0x001E5A, 0x001E54, 0x01040D, 0x01040F, 0x010409, 0x01040B, 0x010405, 0x010407, 0x000055, 0x000056, 0x000054, 0x000059, 0x010401, 0x010413, 0x00005A, 0x000058, 0x001E36, 0x001E30, 0x001E32, 0x00FB15, 0x00FB17, 0x001E08, 0x001E0A, 0x00FB13, 0x001E04, 0x001E06, 0x001E00, 0x001E02, 0x001E1C, 0x001E1E, 0x001E18, 0x001E1A, 0x001E14, 0x0104CD, 0x0104CF, 0x0104C9, 0x0104CB, 0x0104C5, 0x0104C7, 0x0104C1, 0x0010A1, 0x0104C3, 0x0010A3, 0x002C1B, 0x0010A5, 0x002C12, 0x0010A7, 0x002C0C, 0x0010A9, 0x002C0E, 0x0010AB, 0x0010A8, 0x0010AE, 0x0010AC, 0x002C15, 0x002C08, 0x0010B1, 0x000048, 0x0010B3, 0x000053, 0x0010B5, 0x00004E, 0x0010B7, 0x000044, 0x0010B9, 0x000046, 0x0010BB, 0x002C11, 0x002126, 0x002C13, 0x0010BF, 0x0010BD, 0x0010C1, 0x0010C0, 0x0010C3, 0x0010C7, 0x010C83, 0x010C82, 0x0010C2, 0x010C81, 0x0010C4, 0x010C80, 0x010C89, 0x002C22, 0x010C86, 0x0010C5, 0x010C8D, 0x00004C, 0x002C21, 0x010C87, 0x010C91, 0x010C90, 0x002C19, 0x002C1A, 0x010C95, 0x010C84, 0x002C18, 0x002C1F, 0x010C9C, 0x010C9B, 0x0010CD, 0x010C9F, 0x010C9D, 0x010C99, 0x010C8F, 0x001EE6, 0x001EE0, 0x002C01, 0x000051, 0x000052, 0x002C02, 0x002C00, 0x000050, 0x000057, 0x001EFC, 0x001EFE, 0x002C09, 0x002C0A, 0x002C0B, 0x001EF8, 0x002C0D, 0x002C0F, 0x010CB1, 0x0104D1, 0x0104D3, 0x002161, 0x002160, 0x002163, 0x001EF6, 0x002165, 0x002164, 0x002167, 0x002162, 0x002169, 0x002C7F, 0x00216B, 0x002C1D, 0x002C1E, 0x002C1C, 0x00216F, 0x002C75, 0x002C69, 0x002168, 0x001EF0, 0x002C6E, 0x002C6F, 0x001EF2, 0x002166, 0x002C29, 0x002C2B, 0x002C28, 0x002C2C, 0x00216A, 0x002C2E, 0x002C6B, 0x001ECC, 0x002C70, 0x001ECE, 0x002C72, 0x002183, 0x001EC8, 0x001ECA, 0x001EC4, 0x0104BD, 0x0104BF, 0x0104B9, 0x0104BB, 0x0104B5, 0x002C6D, 0x0104B7, 0x0104B1, 0x0104B3, 0x002C80, 0x001ED6, 0x002C82, 0x002CA4, 0x002CAC, 0x001ED0, 0x002C86, 0x002CA8, 0x0000D1, 0x002CAA, 0x002CAE, 0x002C84, 0x0000D5, 0x0000CE, 0x0000CC, 0x002C98, 0x0000CA, 0x002C9A, 0x0000DB, 0x002C9C, 0x002C92, 0x002C9E, 0x0000C8, 0x001ED2, 0x002C90, 0x001EAC, 0x001EAE, 0x0000DC, 0x00024C, 0x002C96, 0x002C94, 0x0000D0, 0x0000D8, 0x0000D2, 0x0000DA, 0x0000D4, 0x0000D3, 0x0000D6, 0x0000DE, 0x001EA8, 0x00024E, 0x001EAA, 0x000248, 0x001EA4, 0x00024A, 0x001EA6, 0x000244, 0x002C88, 0x002CB2, 0x002C8A, 0x000246, 0x002C8C, 0x001EA2, 0x002C8E, 0x002CB0, 0x00A66C, 0x001EB8, 0x00A668, 0x001EBA, 0x00A66A, 0x001EB4, 0x002CB6, 0x002CB4, 0x0000C0, 0x00A664, 0x0000C2, 0x001EB6, 0x0000C4, 0x00A666, 0x0000C6, 0x001EB0, 0x00A660, 0x000100, 0x000104, 0x000102, 0x001EB2, 0x00A662, 0x001E8C, 0x000106, 0x001E8E, 0x00022C, 0x001E88, 0x00022E, 0x001E8A, 0x000228, 0x001E84, 0x00022A, 0x00011C, 0x000110, 0x001E86, 0x000112, 0x000224, 0x00011E, 0x000114, 0x000116, 0x00011A, 0x001E80, 0x002CC0, 0x000226, 0x001E82, 0x002CC2, 0x000118, 0x002CDE, 0x000220, 0x001E9E, 0x002CED, 0x00A64E, 0x001E9A, 0x000124, 0x001E94, 0x000126, 0x002CD8, 0x000128, 0x001C80, 0x00012A, 0x002CD2, 0x00012C, 0x002CD4, 0x00012E, 0x001C84, 0x002CD0, 0x001C86, 0x001E90, 0x002CDA, 0x002CDC, 0x002CD6, 0x002CC6, 0x001C85, 0x001C88, 0x00A640, 0x001E92, 0x001F6C, 0x001F6E, 0x001F68, 0x001F6A, 0x000143, 0x000202, 0x00021C, 0x000141, 0x00021E, 0x000218, 0x000147, 0x00021A, 0x000149, 0x000214, 0x000216, 0x00014A, 0x000210, 0x001F4C, 0x00014C, 0x00014E, 0x001F48, 0x001F49, 0x000150, 0x000152, 0x001F4A, 0x000154, 0x001F4B, 0x000156, 0x001F5D, 0x000158, 0x001F5F, 0x00015A, 0x001F59, 0x00015C, 0x001F5B, 0x00015E, 0x001F54, 0x001F56, 0x001F50, 0x000162, 0x001F52, 0x001F2C, 0x001F2D, 0x000166, 0x001F2E, 0x0118A6, 0x001F2F, 0x00016A, 0x00017D, 0x0118AC, 0x0118A9, 0x0118AB, 0x000178, 0x000160, 0x001F28, 0x00017F, 0x000170, 0x000174, 0x000172, 0x000176, 0x001F29, 0x001F2A, 0x00017B, 0x001F2B, 0x001F3C, 0x0118B8, 0x000179, 0x001F3D, 0x000181, 0x000186, 0x001F3E, 0x000182, 0x0118BF, 0x000187, 0x0118BA, 0x000184, 0x000189, 0x0118A5, 0x00018B, 0x0118A7, 0x0118B4, 0x00018A, 0x00018F, 0x00018E, 0x000191, 0x000194, 0x000193, 0x0118A4, 0x00019D, 0x0118B1, 0x000197, 0x0118B3, 0x00019C, 0x0118B5, 0x000198, 0x0118B7, 0x0118B6, 0x0118B9, 0x00019F, 0x0118BB, 0x0118B2, 0x0118AD, 0x0118B0, 0x0118AA, 0x0118A3, 0x0001A4, 0x001F3F, 0x001F38, 0x0001A9, 0x0001E8, 0x0001EA, 0x0001EC, 0x0001EE, 0x0001AC, 0x0001AF, 0x0001AE, 0x0001B1, 0x001F39, 0x0001B3, 0x0001B2, 0x0001B5, 0x001F3A, 0x0001B7, 0x001F3B, 0x001F0C, 0x001F0D, 0x001F0E, 0x001F0F, 0x001F08, 0x001F09, 0x001F0A, 0x001F0B, 0x001F1C, 0x001F1D, 0x001F18, 0x00AB7A, 0x0001E4, 0x00AB7C, 0x0001E6, 0x00AB7E, 0x0001CF, 0x0001C8, 0x00AB79, 0x0001CA, 0x00AB7B, 0x00AB73, 0x00AB7D, 0x0001CD, 0x00AB7F, 0x00AB71, 0x0001D3, 0x00AB74, 0x0001D5, 0x0001D1, 0x0001D7, 0x00AB75, 0x00AB77, 0x00AB81, 0x00AB80, 0x00AB83, 0x00AB82, 0x00AB87, 0x00AB84, 0x00A642, 0x0001E2, 0x00AB8E, 0x00AB8B, 0x00AB8C, 0x00AB8A, 0x00AB85, 0x0001E0, 0x00AB86, 0x00AB89, 0x00AB91, 0x00AB98, 0x00AB93, 0x00AB88, 0x00AB96, 0x00AB9D, 0x00AB9F, 0x00AB90, 0x00AB9A, 0x0001F0, 0x0001F1, 0x00AB99, 0x0001FC, 0x0001F2, 0x00AB9C, 0x00AB9B, 0x0001F8, 0x00ABA3, 0x0001FA, 0x0001F4, 0x0001FE, 0x0001F7, 0x0001F6, 0x00ABA1, 0x00ABA9, 0x00ABA5, 0x00ABAB, 0x00ABAD, 0x00ABA7, 0x00AB8D, 0x00ABAF, 0x00AB8F, 0x00ABB2, 0x000208, 0x00ABB6, 0x00020E, 0x00020C, 0x00ABB0, 0x00ABB4, 0x01E903, 0x00ABB9, 0x00ABB8, 0x00ABBB, 0x00ABBA, 0x00ABBE, 0x01E901, 0x00ABBF, 0x00ABBD, 0x01E90B, 0x000222, 0x00A648, 0x01E90F, 0x01E909, 0x01E907, 0x01E915, 0x01E911, 0x01E91B, 0x01E913, 0x01E90D, 0x01E91D, 0x01E91F, 0x01E917, 0x000200, 0x00A65C, 0x00A646, 0x00A65A, 0x01E905, 0x00A658, 0x000206, 0x01E919, 0x000204, 0x00A64A, 0x00A65E, 0x000212, 0x001F19, 0x001F1A, 0x001F1B, 0x00A654, 0x001FEC, 0x000232, 0x00023B, 0x00020A, 0x001FE8, 0x001FE9, 0x001FEA, 0x00023D, 0x00023E, 0x001FEB, 0x000245, 0x001FE4, 0x000241, 0x001FE6, 0x000243, 0x00A64C, 0x00A652, 0x001FE7, 0x00ABB1, 0x001FE2, 0x00ABB5, 0x00ABB3, 0x00A650, 0x00ABB7, 0x00A656, 0x001FE3, 0x001FFC, 0x001FF8, 0x001FF9, 0x001FFA, 0x00A682, 0x00A686, 0x001FFB, 0x001FF4, 0x001FF6, 0x00A680, 0x001FF7, 0x001FF2, 0x001FF3, 0x001FCC, 0x00A688, 0x00A68A, 0x00FF2C, 0x00FF2D, 0x00A690, 0x00A684, 0x00A692, 0x00FF2E, 0x00A694, 0x00FF24, 0x00A696, 0x00FF27, 0x00A698, 0x00FF23, 0x00A69A, 0x00A68C, 0x00A68E, 0x001FD8, 0x00FF37, 0x001FAE, 0x001FAF, 0x001FA8, 0x001FAA, 0x001FA4, 0x001FA6, 0x001FA2, 0x001FBC, 0x00A76C, 0x001FBE, 0x00A76E, 0x001FB8, 0x001FBA, 0x000230, 0x001FB4, 0x00A764, 0x001FB6, 0x00A760, 0x001FB2, 0x001F8C, 0x001F8D, 0x001F88, 0x001F89, 0x001F8B, 0x001F85, 0x001F86, 0x001F87, 0x001F80, 0x001F81, 0x001F82, 0x001F83, 0x001F9C, 0x001F9E, 0x001F98, 0x001F9A, 0x001F94, 0x00A644, 0x001F96, 0x001F90, 0x001F92, 0x00A75C, 0x00A75E, 0x00A758, 0x00A75A, 0x00A754, 0x00A756, 0x00A750, 0x00A752, 0x00A72C, 0x00A72E, 0x001E10, 0x00A728, 0x001E12, 0x00A72A, 0x00A724, 0x001E16, 0x00A726, 0x001E2E, 0x00A722, 0x00A73C, 0x0003E6, 0x0003E2, 0x001E0C, 0x0003FD, 0x001E0E, 0x0003FE, 0x0003FF, 0x0003F9, 0x0003FA, 0x0003F4, 0x0003F5, 0x0003F7, 0x00023A, 0x0003F0, 0x0003F1, 0x0003CF, 0x0003C2, 0x0003DC, 0x0003DE, 0x0003D8, 0x0003DA, 0x001E28, 0x001E20, 0x0003D5, 0x001E22, 0x0003D6, 0x001E24, 0x001E2A, 0x001E26, 0x010403, 0x010402, 0x010408, 0x010415, 0x01040E, 0x001E2C, 0x01041B, 0x010419, 0x001E34, 0x01040A, 0x010400, 0x01041D, 0x010406, 0x01041F, 0x010414, 0x010410, 0x001E3C, 0x001E38, 0x001E3E, 0x001E3A, 0x010412, 0x010416, 0x010411, 0x010418, 0x001E44, 0x010417, 0x0003D0, 0x01041C, 0x01041A, 0x01041E, 0x010424, 0x010420, 0x010404, 0x001E48, 0x001E4E, 0x001E4A, 0x010422, 0x010426, 0x010421, 0x01040C, 0x0003D1, 0x0003A8, 0x0003A9, 0x010425, 0x001E4C, 0x010427, 0x0003AA, 0x0003AB, 0x001E50, 0x0003A4, 0x0003A0, 0x002C64, 0x002C67, 0x002C60, 0x001E52, 0x00A734, 0x001EE4, 0x002C62, 0x00A732, 0x002C63, 0x002C7E, 0x00A73E, 0x00A736, 0x0118AE, 0x00A738, 0x001EEC, 0x001E70, 0x0118AF, 0x0104C2, 0x001E6C, 0x00A73A, 0x001E6E, 0x00A740, 0x001E72, 0x00A742, 0x001E56, 0x00A744, 0x0104CA, 0x00A746, 0x001E76, 0x00A748, 0x0118A8, 0x00A74A, 0x0118A0, 0x00A74C, 0x0118A1, 0x00A74E, 0x0118A2, 0x001EC0, 0x0118BC, 0x0118BD, 0x0118BE, 0x000391, 0x000392, 0x001E97, 0x0013F9, 0x0013FA, 0x0013FB, 0x00A7B4, 0x002C2D, 0x00A7B1, 0x002C2A, 0x002C24, 0x001E9B, 0x002C25, 0x002C26, 0x00A762, 0x002C27, 0x001E96, 0x002C20, 0x00A766, 0x002C23, 0x001E99, 0x00A768, 0x00A76A, 0x001E98, 0x00A786, 0x001EDC, 0x00A780, 0x00A782, 0x00A79C, 0x000345, 0x00FF22, 0x001EEE, 0x001EA0, 0x00FF26, 0x00FF2F, 0x00A779, 0x00FF2A, 0x00A77B, 0x00FF2B, 0x00A77D, 0x00FF29, 0x00FF28, 0x00A77E, 0x0104C4, 0x0104B0, 0x0104B2, 0x001EF4, 0x0104B4, 0x00004D, 0x00004F, 0x00A78B, 0x0104BC, 0x001EBE, 0x0104B6, 0x0104D2, 0x00A7AC, 0x00A7AD, 0x00A784, 0x001EBC, 0x00FF31, 0x001EE8, 0x00FF34, 0x001EEA, 0x00A79A, 0x001EC2, 0x00A792, 0x00FF35, 0x00A790, 0x00FF39, 0x00FF25, 0x00FF21, 0x00A798, 0x00037F, 0x00A796, 0x000370, 0x00A7A2, 0x00A7A0, 0x000372, 0x00FF32, 0x00FF36, 0x00A7A4, 0x00FF33, 0x00A7A6, 0x00FF30, 0x00A7A8, 0x00A7AB, 0x00A7AA, 0x000376, 0x00FF38, 0x00FF3A, 0x00A7AE, 0x001EFA, 0x001EDA, 0x001EE2, 0x00038F, 0x00039D, 0x0104B8, 0x00A79E, 0x000388, 0x001EDE, 0x00038A, 0x00039F, 0x0013FC, 0x001EC6, 0x0013F8, 0x001ED4, 0x000393, 0x000390, 0x000397, 0x0013FD, 0x000394, 0x00039B, 0x000396, 0x000399, 0x000398, 0x000386, 0x00039A, 0x000395, 0x00039C, 0x00A78D, 0x00039E, 0x001ED8, 0x0003B0, 0x0104C8, 0x000049, 0x00004A, 0x0104CC, 0x00004B, 0x0003A3, 0x0104CE, 0x002C04, 0x0003A1, 0x000389, 0x00038C, 0x0003A6, 0x0003A7, 0x00038E, 0x002C05, 0x0104C0, 0x002C06, 0x002C07, 0x002C03, 0x0003A5, 0x002C14, 0x0104C6, 0x002C16, 0x002C17, 0x002C10, 0x001C87, 0x001C81, 0x001C82, 0x0104D0, 0x001C83, 0x002CEB, 0x002CE0, 0x00A7B0, 0x00A7B2, 0x0104BA, 0x00A7B3, 0x002CE2, 0x0104BE, 0x00A7B6, 0x01E920, 0x01E921, 0x002CF2, 0x002CCC, 0x002CCE, 0x002CC8, 0x002CCA, 0x0024B6, 0x002CC4, 0x0024B8, 0x01E90C, 0x0024BA, 0x01E90E, 0x01E908, 0x01E90A, 0x0024BE, 0x01E904, 0x01E906, 0x01E900, 0x01E902, 0x01E91C, 0x01E91E, 0x01E918, 0x0024B7, 0x0003E0, 0x0024B9, 0x01E91A, 0x0003EC, 0x0003E4, 0x0024BD, 0x0024BC, 0x0024BF, 0x0024BB, 0x0024C1, 0x0024C5, 0x0024C4, 0x0003E8, 0x0003EA, 0x0003EE, 0x0024C7, 0x0024C3, 0x0024C0, 0x0024CA, 0x0024C9, 0x0024C2, 0x0024CD, 0x0024CC, 0x0024C6, 0x0024C8, 0x01E914, 0x01E916, 0x01E910, 0x0024CB, 0x0024CE, 0x0024CF, 0x000403, 0x000400, 0x000407, 0x000402, 0x000405, 0x000404, 0x000401, 0x000406, 0x000409, 0x000408, 0x001F6D, 0x00040A, 0x001F6B, 0x00040C, 0x001F69, 0x00040E, 0x001F4D, 0x001F6F, 0x01E912, 0x002CA6, 0x00040D, 0x000417, 0x000413, 0x000416, 0x000419, 0x000418, 0x00041D, 0x00040B, 0x00041E, 0x000414, 0x00040F, 0x00041B, 0x002CA0, 0x000420, 0x000423, 0x002CA2, 0x000425, 0x002CBC, 0x002CBE, 0x000426, 0x001F84, 0x002CB8, 0x00042B, 0x00042A, 0x000428, 0x00042C, 0x001F8A, 0x00042E, 0x002CBA, 0x001F8F, 0x001F8E, 0x001F91, 0x0000CD, 0x001F93, 0x0000CF, 0x001F95, 0x0000C9, 0x001F97, 0x0000CB, 0x001F99, 0x0000C5, 0x001F9B, 0x0000C7, 0x001F9D, 0x0000C1, 0x001F9F, 0x0000C3, 0x001FA1, 0x001FA0, 0x001FA3, 0x0000DD, 0x001FA5, 0x0000DF, 0x001FA7, 0x0000D9, 0x001FA9, 0x001FAC, 0x001FAB, 0x001FAD, 0x00AB78, 0x00AB76, 0x00AB70, 0x00AB72, 0x0000B5, 0x010CAC, 0x001FB3, 0x010CAD, 0x010CAE, 0x010CAF, 0x001FB7, 0x010CA8, 0x010CA9, 0x010CAA, 0x001FBB, 0x001FB9, 0x010CAB, 0x000464, 0x010CA4, 0x000460, 0x000466, 0x000462, 0x00047E, 0x001FD2, 0x001FD6, 0x00046A, 0x000468, 0x010CA5, 0x001FC2, 0x001FC6, 0x001FDA, 0x00046C, 0x00046E, 0x000472, 0x000470, 0x010CA6, 0x010CA7, 0x010CA0, 0x001FD3, 0x010CA1, 0x000476, 0x001FD7, 0x000478, 0x00047C, 0x00047A, 0x000474, 0x010CA2, 0x010CA3, 0x001FD9, 0x00016C, 0x00016E, 0x001FDB, 0x001FC8, 0x000168, 0x001FC3, 0x010CB0, 0x001FC4, 0x010CB2, 0x000164, 0x001FC7, 0x001FCB, 0x010C8C, 0x010C8E, 0x010C88, 0x010C8A, 0x010C8B, 0x001FCA, 0x001FC9, 0x010C85, 0x010C9E, 0x010C98, 0x010C9A, 0x010C94, 0x010C96, 0x010C97, 0x010C92, 0x010C93, 0x000145, 0x0010AD, 0x0010AF, 0x0010AA, 0x0010A4, 0x0010A6, 0x0010A0, 0x0010A2, 0x0010BC, 0x0010BE, 0x0010B8, 0x0010BA, 0x0010B4, 0x0010B6, 0x0010B0, 0x0010B2, 0x000120, 0x000122, 0x00013D, 0x00013F, 0x000139, 0x00013B, 0x000134, 0x000136, 0x000130, 0x000132, 0x00010C, 0x00010E, 0x000108, 0x00010A, 0x00ABAC, 0x00FB04, 0x00FB00, 0x00FB06, 0x00FB02, 0x00ABAE, 0x00ABA8, 0x00ABAA, 0x00ABA4, 0x00ABA6, 0x00ABA0, 0x00FB03, 0x00ABA2, 0x00ABBC, 0x00FB01, 0x00AB9E, 0x0004CB, 0x00AB94, 0x00AB95, 0x00AB97, 0x00AB92, 0x0001CB, 0x00FB14, 0x00FB05, 0x00FB16, 0x0001C4, 0x0001C5, 0x0001C7, 0x0001DE, 0x0001D9, 0x0001DB, 0x00042D, 0x00042F, 0x000429, 0x000424, 0x000427, 0x000421, 0x000422, 0x0001A6, 0x0001A7, 0x0001A0, 0x0001A2, 0x0001BC, 0x0001B8, 0x00216C, 0x00216D, 0x00216E, 0x0004E8, 0x00041C, 0x0004EA, 0x00041F, 0x00041A, 0x000415, 0x0004EE, 0x000410, 0x000411, 0x000412, 0x0004EC, 0x000196, 0x000190, 0x0004E4, 0x0004E6, 0x0004E0, 0x0004E2, 0x0004FC, 0x0004FE, 0x0004F8, 0x0004FA, 0x0004F4, 0x0004F6, 0x0004F0, 0x0004F2, 0x0004CD, 0x00212A, 0x00212B, 0x0004C9, 0x0004C5, 0x0004C7, 0x0004C0, 0x0004C1, 0x0004C3, 0x0004DC, 0x0004DE, 0x0004D8, 0x000514, 0x0004DA, 0x0004D4, 0x000516, 0x0004D6, 0x000510, 0x000512, 0x002132, 0x0004D0, 0x0004D2, 0x0004AC, 0x0004AE, 0x0004A8, 0x00051A, 0x0004AA, 0x0004A4, 0x0004A6, 0x0004A0, 0x0004A2, 0x000520, 0x0004BC, 0x0004BE, 0x0004B8, 0x0004BA, 0x0004B4, 0x0004B6, 0x0004B0, 0x0004B2, 0x00048C, 0x00048E, 0x00048A, 0x000480, 0x00049C, 0x00049E, 0x000531, 0x000498, 0x000533, 0x00049A, 0x000494, 0x000496, 0x000490, 0x000492, 0x00054C, 0x00054D, 0x00054E, 0x00054F, 0x000548, 0x000549, 0x00054A, 0x00054B, 0x000544, 0x000545, 0x000546, 0x000547, 0x000540, 0x000541, 0x000542, 0x000543, 0x000554, 0x000555, 0x000556, 0x000550, 0x000551, 0x000552, 0x000553, 0x00052C, 0x00052E, 0x000528, 0x00052A, 0x000524, 0x000526, 0x000522, 0x00053C, 0x00053D, 0x00053E, 0x00053F, 0x000538, 0x000539, 0x00053A, 0x00053B, 0x000534, 0x000535, 0x000536, 0x000537, 0x000532, 0x00050C, 0x001E68, 0x00050E, 0x001E6A, 0x000508, 0x001E64, 0x00050A, 0x001E66, 0x000504, 0x001E60, 0x000506, 0x001E62, 0x000500, 0x001E7C, 0x000502, 0x001E7E, 0x00051C, 0x001E78, 0x00051E, 0x001E7A, 0x000518, 0x001E74, }; /* indexes */ const uint16_t NU_TOFOLD_VALUES_I[] = { 0x0656, 0x0001, 0x0003, 0x0005, 0x0A22, 0x0009, 0x000D, 0x0A16, 0x0A1A, 0x0A4E, 0x0A52, 0x05A2, 0x0A46, 0x0A4A, 0x0A3E, 0x05E8, 0x05F2, 0x05D4, 0x05DE, 0x05C0, 0x05CA, 0x0029, 0x002B, 0x0027, 0x0031, 0x05AC, 0x0606, 0x0033, 0x002F, 0x0A02, 0x09F6, 0x09FA, 0x14B8, 0x14C2, 0x09A6, 0x09AA, 0x14AE, 0x099E, 0x09A2, 0x0996, 0x099A, 0x09CE, 0x09D2, 0x09C6, 0x09CA, 0x09BE, 0x0700, 0x070A, 0x06EC, 0x06F6, 0x06D8, 0x06E2, 0x06C4, 0x0727, 0x06CE, 0x072F, 0x1058, 0x0737, 0x1034, 0x073F, 0x101C, 0x0747, 0x1024, 0x074F, 0x0743, 0x075B, 0x0753, 0x1040, 0x100C, 0x0767, 0x000F, 0x076F, 0x0025, 0x0777, 0x001B, 0x077F, 0x0007, 0x0787, 0x000B, 0x078F, 0x1030, 0x0F34, 0x1038, 0x079F, 0x0797, 0x07A7, 0x07A3, 0x07AF, 0x07BB, 0x07CE, 0x07C9, 0x07AB, 0x07C4, 0x07B3, 0x07BF, 0x07EC, 0x1074, 0x07DD, 0x07B7, 0x0800, 0x0017, 0x1070, 0x07E2, 0x0814, 0x080F, 0x1050, 0x1054, 0x0828, 0x07D3, 0x104C, 0x1068, 0x084B, 0x0846, 0x08BE, 0x085A, 0x0850, 0x083C, 0x080A, 0x0C13, 0x0C07, 0x0FF0, 0x0021, 0x0023, 0x0FF4, 0x0FEC, 0x001F, 0x002D, 0x0C3F, 0x0C43, 0x1010, 0x1014, 0x1018, 0x0C37, 0x1020, 0x1028, 0x08B4, 0x0714, 0x071E, 0x0F44, 0x0F40, 0x0F4C, 0x0C33, 0x0F54, 0x0F50, 0x0F5C, 0x0F48, 0x0F64, 0x10D9, 0x0F6C, 0x1060, 0x1064, 0x105C, 0x0F7C, 0x10D2, 0x10BA, 0x0F60, 0x0C27, 0x10C5, 0x10C8, 0x0C2B, 0x0F58, 0x1090, 0x1098, 0x108C, 0x109C, 0x0F68, 0x10A4, 0x10BE, 0x0BDF, 0x10CB, 0x0BE3, 0x10CE, 0x0F80, 0x0BD7, 0x0BDB, 0x0BCF, 0x06B0, 0x06BA, 0x069C, 0x06A6, 0x0688, 0x10C2, 0x0692, 0x0674, 0x067E, 0x10DC, 0x0BF3, 0x10E0, 0x1124, 0x1134, 0x0BE7, 0x10E8, 0x112C, 0x006B, 0x1130, 0x1138, 0x10E4, 0x0077, 0x0062, 0x005C, 0x110C, 0x0056, 0x1110, 0x0086, 0x1114, 0x1100, 0x1118, 0x0050, 0x0BEB, 0x10FC, 0x0B9F, 0x0BA3, 0x0089, 0x029A, 0x1108, 0x1104, 0x0068, 0x007D, 0x006E, 0x0083, 0x0074, 0x0071, 0x007A, 0x008F, 0x0B97, 0x029D, 0x0B9B, 0x0294, 0x0B8F, 0x0297, 0x0B93, 0x028B, 0x10EC, 0x1140, 0x10F0, 0x0291, 0x10F4, 0x0B8B, 0x10F8, 0x113C, 0x1208, 0x0BB7, 0x1200, 0x0BBB, 0x1204, 0x0BAF, 0x1148, 0x1144, 0x0038, 0x11F8, 0x003E, 0x0BB3, 0x0044, 0x11FC, 0x004A, 0x0BA7, 0x11F0, 0x0095, 0x009B, 0x0098, 0x0BAB, 0x11F4, 0x0AAE, 0x009E, 0x0AB2, 0x026B, 0x0AA6, 0x026E, 0x0AAA, 0x0265, 0x0A9E, 0x0268, 0x00BF, 0x00AD, 0x0AA2, 0x00B0, 0x025F, 0x00C2, 0x00B3, 0x00B6, 0x00BC, 0x0A96, 0x115C, 0x0262, 0x0A9A, 0x1160, 0x00B9, 0x1198, 0x0259, 0x0B84, 0x11A8, 0x11CC, 0x0B7C, 0x00CB, 0x0B68, 0x00CE, 0x118C, 0x00D1, 0x097A, 0x00D4, 0x1180, 0x00D7, 0x1184, 0x00DA, 0x0986, 0x117C, 0x098C, 0x0AB6, 0x1190, 0x1194, 0x1188, 0x1168, 0x0989, 0x0992, 0x11B0, 0x0B5A, 0x0D11, 0x0D19, 0x0D01, 0x0D09, 0x00F9, 0x022C, 0x0253, 0x00F6, 0x0256, 0x024D, 0x00FF, 0x0250, 0x0102, 0x0247, 0x024A, 0x0106, 0x0241, 0x0CCF, 0x0109, 0x010C, 0x0CBF, 0x0CC3, 0x010F, 0x0112, 0x0CC7, 0x0115, 0x0CCB, 0x0118, 0x0CF9, 0x011B, 0x0CFD, 0x011E, 0x0CF1, 0x0121, 0x0CF5, 0x0124, 0x0CE3, 0x0CEA, 0x0CD7, 0x012A, 0x0CDC, 0x0C8F, 0x0C93, 0x0130, 0x0C97, 0x08E0, 0x0C9B, 0x0136, 0x0154, 0x08FE, 0x08EF, 0x08F9, 0x014B, 0x0127, 0x0C7F, 0x0157, 0x013F, 0x0145, 0x0142, 0x0148, 0x0C83, 0x0C87, 0x0151, 0x0C8B, 0x0CAF, 0x093A, 0x014E, 0x0CB3, 0x0159, 0x0162, 0x0CB7, 0x015C, 0x095D, 0x0165, 0x0944, 0x015F, 0x0168, 0x08DB, 0x016E, 0x08E5, 0x0926, 0x016B, 0x0174, 0x0171, 0x017A, 0x0180, 0x017D, 0x08D6, 0x018F, 0x0917, 0x0186, 0x0921, 0x018C, 0x092B, 0x0189, 0x0935, 0x0930, 0x093F, 0x0192, 0x0949, 0x091C, 0x0903, 0x0912, 0x08F4, 0x08D1, 0x019B, 0x0CBB, 0x0C9F, 0x01A4, 0x01FE, 0x0201, 0x0204, 0x0207, 0x01A7, 0x01AD, 0x01AA, 0x01B0, 0x0CA3, 0x01B6, 0x01B3, 0x01B9, 0x0CA7, 0x01BC, 0x0CAB, 0x0C57, 0x0C5B, 0x0C5F, 0x0C63, 0x0C47, 0x0C4B, 0x0C4F, 0x0C53, 0x0C77, 0x0C7B, 0x0C67, 0x137F, 0x01F8, 0x1387, 0x01FB, 0x138F, 0x01DA, 0x01CE, 0x137B, 0x01D1, 0x1383, 0x1363, 0x138B, 0x01D7, 0x1393, 0x135B, 0x01E0, 0x1367, 0x01E3, 0x01DD, 0x01E6, 0x136B, 0x1373, 0x139B, 0x1397, 0x13A3, 0x139F, 0x13B3, 0x13A7, 0x11B4, 0x01F5, 0x13CF, 0x13C3, 0x13C7, 0x13BF, 0x13AB, 0x01F2, 0x13AF, 0x13BB, 0x13DB, 0x13F7, 0x13E3, 0x13B7, 0x13EF, 0x140B, 0x1413, 0x13D7, 0x13FF, 0x020A, 0x020E, 0x13FB, 0x0223, 0x0211, 0x1407, 0x1403, 0x021D, 0x1423, 0x0220, 0x0214, 0x0226, 0x021A, 0x0217, 0x141B, 0x143B, 0x142B, 0x1443, 0x144B, 0x1433, 0x13CB, 0x1453, 0x13D3, 0x145F, 0x0235, 0x146F, 0x023E, 0x023B, 0x1457, 0x1467, 0x0AC9, 0x147B, 0x1477, 0x1483, 0x147F, 0x148F, 0x0ABF, 0x1493, 0x148B, 0x0AF1, 0x025C, 0x11C0, 0x0B05, 0x0AE7, 0x0ADD, 0x0B23, 0x0B0F, 0x0B41, 0x0B19, 0x0AFB, 0x0B4B, 0x0B55, 0x0B2D, 0x0229, 0x11E8, 0x11BC, 0x11E4, 0x0AD3, 0x11E0, 0x0232, 0x0B37, 0x022F, 0x11C4, 0x11EC, 0x0244, 0x0C6B, 0x0C6F, 0x0C73, 0x11D8, 0x0EFF, 0x0274, 0x027B, 0x0238, 0x0EEF, 0x0EF3, 0x0EF7, 0x027E, 0x0281, 0x0EFB, 0x028E, 0x0EDE, 0x0285, 0x0EE3, 0x0288, 0x11C8, 0x11D4, 0x0EE8, 0x145B, 0x0ED0, 0x146B, 0x1463, 0x11D0, 0x1473, 0x11DC, 0x0ED7, 0x0F2F, 0x0F1F, 0x0F23, 0x0F27, 0x1210, 0x1218, 0x0F2B, 0x0F0E, 0x0F13, 0x120C, 0x0F18, 0x0F03, 0x0F09, 0x0EA1, 0x121C, 0x1220, 0x14F3, 0x14F7, 0x122C, 0x1214, 0x1230, 0x14FB, 0x1234, 0x14D3, 0x1238, 0x14DF, 0x123C, 0x14CF, 0x1240, 0x1224, 0x1228, 0x0EC0, 0x151F, 0x0E35, 0x0E3B, 0x0E11, 0x0E1D, 0x0DF9, 0x0E05, 0x0DED, 0x0E6D, 0x12D4, 0x0E72, 0x12D8, 0x0E5D, 0x0E65, 0x0271, 0x0E4C, 0x12C4, 0x0E51, 0x12BC, 0x0E41, 0x0D69, 0x0D6F, 0x0D51, 0x0D57, 0x0D63, 0x0D3F, 0x0D45, 0x0D4B, 0x0D21, 0x0D27, 0x0D2D, 0x0D33, 0x0DC9, 0x0DD5, 0x0DB1, 0x0DBD, 0x0D99, 0x11B8, 0x0DA5, 0x0D81, 0x0D8D, 0x12B4, 0x12B8, 0x12AC, 0x12B0, 0x12A4, 0x12A8, 0x129C, 0x12A0, 0x1258, 0x125C, 0x09B6, 0x1250, 0x09BA, 0x1254, 0x1248, 0x09C2, 0x124C, 0x09F2, 0x1244, 0x1274, 0x0347, 0x0341, 0x09AE, 0x036B, 0x09B2, 0x036E, 0x0371, 0x0365, 0x0368, 0x035C, 0x035F, 0x0362, 0x0277, 0x0356, 0x0359, 0x0323, 0x0320, 0x0338, 0x033B, 0x0332, 0x0335, 0x09E6, 0x09D6, 0x032C, 0x09DA, 0x032F, 0x09DE, 0x09EA, 0x09E2, 0x05B6, 0x05B1, 0x05CF, 0x0610, 0x05ED, 0x09EE, 0x062E, 0x0624, 0x09FE, 0x05D9, 0x05A7, 0x0638, 0x05C5, 0x0642, 0x060B, 0x05F7, 0x0A0E, 0x0A06, 0x0A12, 0x0A0A, 0x0601, 0x0615, 0x05FC, 0x061F, 0x0A1E, 0x061A, 0x0326, 0x0633, 0x0629, 0x063D, 0x065B, 0x0647, 0x05BB, 0x0A26, 0x0A32, 0x0A2A, 0x0651, 0x0665, 0x064C, 0x05E3, 0x0329, 0x030D, 0x0310, 0x0660, 0x0A2E, 0x066A, 0x0313, 0x0316, 0x0A36, 0x0301, 0x02F8, 0x10B3, 0x10B6, 0x10A8, 0x0A3A, 0x1264, 0x0C0F, 0x10AC, 0x1260, 0x10AF, 0x10D6, 0x1278, 0x1268, 0x0908, 0x126C, 0x0C1F, 0x0A76, 0x090D, 0x06C9, 0x0A6E, 0x1270, 0x0A72, 0x127C, 0x0A7A, 0x1280, 0x0A42, 0x1284, 0x06F1, 0x1288, 0x0A82, 0x128C, 0x08EA, 0x1290, 0x08C2, 0x1294, 0x08C7, 0x1298, 0x08CC, 0x0BC7, 0x094E, 0x0953, 0x0958, 0x02CB, 0x02CE, 0x0B70, 0x0966, 0x096A, 0x096E, 0x134F, 0x10A0, 0x1345, 0x1094, 0x107C, 0x0B80, 0x1080, 0x1084, 0x12C0, 0x1088, 0x0B6C, 0x106C, 0x12C8, 0x1078, 0x0B78, 0x12CC, 0x12D0, 0x0B74, 0x12F8, 0x0BFF, 0x12EC, 0x12F0, 0x1317, 0x02A0, 0x14CB, 0x0C23, 0x0B87, 0x14DB, 0x14FF, 0x12DC, 0x14EB, 0x12E0, 0x14EF, 0x12E4, 0x14E7, 0x14E3, 0x12E8, 0x06D3, 0x066F, 0x0679, 0x0C2F, 0x0683, 0x0019, 0x001D, 0x12FC, 0x06AB, 0x0BC3, 0x068D, 0x0719, 0x1339, 0x133C, 0x12F4, 0x0BBF, 0x1507, 0x0C17, 0x1513, 0x0C1B, 0x1313, 0x0BCB, 0x1307, 0x1517, 0x1303, 0x1527, 0x14D7, 0x14C7, 0x130F, 0x02AC, 0x130B, 0x02A3, 0x1323, 0x131F, 0x02A6, 0x150B, 0x151B, 0x1327, 0x150F, 0x132B, 0x1503, 0x132F, 0x1336, 0x1333, 0x02A9, 0x1523, 0x152B, 0x133F, 0x0C3B, 0x0BFB, 0x0C0B, 0x02C1, 0x02EF, 0x0697, 0x131B, 0x02B2, 0x0C03, 0x02B8, 0x02F5, 0x0972, 0x0BD3, 0x0962, 0x0BEF, 0x02D1, 0x02C4, 0x02DD, 0x0976, 0x02D4, 0x02E9, 0x02DA, 0x02E3, 0x02E0, 0x02AF, 0x02E6, 0x02D7, 0x02EC, 0x1300, 0x02F2, 0x0BF7, 0x0319, 0x06E7, 0x0011, 0x0013, 0x06FB, 0x0015, 0x02FE, 0x0705, 0x0FFC, 0x02FB, 0x02B5, 0x02BB, 0x0307, 0x030A, 0x02BE, 0x1000, 0x06BF, 0x1004, 0x1008, 0x0FF8, 0x0304, 0x103C, 0x06DD, 0x1044, 0x1048, 0x102C, 0x098F, 0x097D, 0x0980, 0x070F, 0x0983, 0x11A4, 0x119C, 0x1342, 0x1348, 0x06A1, 0x134B, 0x11A0, 0x06B5, 0x1353, 0x0B5E, 0x0B63, 0x11AC, 0x1174, 0x1178, 0x116C, 0x1170, 0x0F84, 0x1164, 0x0F8C, 0x0AF6, 0x0F94, 0x0B00, 0x0AE2, 0x0AEC, 0x0FA4, 0x0ACE, 0x0AD8, 0x0ABA, 0x0AC4, 0x0B46, 0x0B50, 0x0B32, 0x0F88, 0x033E, 0x0F90, 0x0B3C, 0x0350, 0x0344, 0x0FA0, 0x0F9C, 0x0FA8, 0x0F98, 0x0FB0, 0x0FC0, 0x0FBC, 0x034A, 0x034D, 0x0353, 0x0FC8, 0x0FB8, 0x0FAC, 0x0FD4, 0x0FD0, 0x0FB4, 0x0FE0, 0x0FDC, 0x0FC4, 0x0FCC, 0x0B1E, 0x0B28, 0x0B0A, 0x0FD8, 0x0FE4, 0x0FE8, 0x037D, 0x0374, 0x0389, 0x037A, 0x0383, 0x0380, 0x0377, 0x0386, 0x038F, 0x038C, 0x0D15, 0x0392, 0x0D0D, 0x0398, 0x0D05, 0x039E, 0x0CD3, 0x0D1D, 0x0B14, 0x1128, 0x039B, 0x03B9, 0x03AD, 0x03B6, 0x03BF, 0x03BC, 0x03CB, 0x0395, 0x03CE, 0x03B0, 0x03A1, 0x03C5, 0x111C, 0x03D4, 0x03DD, 0x1120, 0x03E3, 0x1154, 0x1158, 0x03E6, 0x0D39, 0x114C, 0x03F5, 0x03F2, 0x03EC, 0x03F8, 0x0D5D, 0x03FE, 0x1150, 0x0D7B, 0x0D75, 0x0D87, 0x005F, 0x0D93, 0x0065, 0x0D9F, 0x0053, 0x0DAB, 0x0059, 0x0DB7, 0x0047, 0x0DC3, 0x004D, 0x0DCF, 0x003B, 0x0DDB, 0x0041, 0x0DE7, 0x0DE1, 0x0DF3, 0x008C, 0x0DFF, 0x0092, 0x0E0B, 0x0080, 0x0E17, 0x0E29, 0x0E23, 0x0E2F, 0x1377, 0x136F, 0x1357, 0x135F, 0x0035, 0x089B, 0x0E47, 0x08A0, 0x08A5, 0x08AA, 0x0E56, 0x0887, 0x088C, 0x0891, 0x0E69, 0x0E61, 0x0896, 0x040A, 0x0873, 0x0404, 0x040D, 0x0407, 0x0431, 0x0EA6, 0x0EB4, 0x0413, 0x0410, 0x0878, 0x0E75, 0x0E85, 0x0EC8, 0x0416, 0x0419, 0x041F, 0x041C, 0x087D, 0x0882, 0x085F, 0x0EAD, 0x0864, 0x0425, 0x0EB9, 0x0428, 0x042E, 0x042B, 0x0422, 0x0869, 0x086E, 0x0EC4, 0x0139, 0x013C, 0x0ECC, 0x0E91, 0x0133, 0x0E7B, 0x08AF, 0x0E80, 0x08B9, 0x012D, 0x0E8A, 0x0E9D, 0x07FB, 0x0805, 0x07E7, 0x07F1, 0x07F6, 0x0E99, 0x0E95, 0x07D8, 0x0855, 0x0837, 0x0841, 0x0823, 0x082D, 0x0832, 0x0819, 0x081E, 0x00FC, 0x0757, 0x075F, 0x074B, 0x0733, 0x073B, 0x0723, 0x072B, 0x0793, 0x079B, 0x0783, 0x078B, 0x0773, 0x077B, 0x0763, 0x076B, 0x00C5, 0x00C8, 0x00F0, 0x00F3, 0x00EA, 0x00ED, 0x00E4, 0x00E7, 0x00DD, 0x00E1, 0x00A7, 0x00AA, 0x00A1, 0x00A4, 0x1447, 0x14A4, 0x1497, 0x14AB, 0x149D, 0x144F, 0x1437, 0x143F, 0x1427, 0x142F, 0x1417, 0x14A0, 0x141F, 0x1487, 0x149A, 0x140F, 0x049A, 0x13E7, 0x13EB, 0x13F3, 0x13DF, 0x01D4, 0x14B3, 0x14A8, 0x14BD, 0x01C5, 0x01C8, 0x01CB, 0x01EF, 0x01E9, 0x01EC, 0x03FB, 0x0401, 0x03EF, 0x03E0, 0x03E9, 0x03D7, 0x03DA, 0x019E, 0x01A1, 0x0195, 0x0198, 0x01C2, 0x01BF, 0x0F70, 0x0F74, 0x0F78, 0x04C4, 0x03C8, 0x04C7, 0x03D1, 0x03C2, 0x03B3, 0x04CD, 0x03A4, 0x03A7, 0x03AA, 0x04CA, 0x0183, 0x0177, 0x04BE, 0x04C1, 0x04B8, 0x04BB, 0x04E2, 0x04E5, 0x04DC, 0x04DF, 0x04D6, 0x04D9, 0x04D0, 0x04D3, 0x049D, 0x0F37, 0x0F39, 0x0497, 0x0491, 0x0494, 0x0488, 0x048B, 0x048E, 0x04B2, 0x04B5, 0x04AC, 0x0506, 0x04AF, 0x04A6, 0x0509, 0x04A9, 0x0500, 0x0503, 0x0F3C, 0x04A0, 0x04A3, 0x046A, 0x046D, 0x0464, 0x050F, 0x0467, 0x045E, 0x0461, 0x0458, 0x045B, 0x0518, 0x0482, 0x0485, 0x047C, 0x047F, 0x0476, 0x0479, 0x0470, 0x0473, 0x043A, 0x043D, 0x0437, 0x0434, 0x0452, 0x0455, 0x0530, 0x044C, 0x0536, 0x044F, 0x0446, 0x0449, 0x0440, 0x0443, 0x0581, 0x0584, 0x0587, 0x058A, 0x0575, 0x0578, 0x057B, 0x057E, 0x0569, 0x056C, 0x056F, 0x0572, 0x055D, 0x0560, 0x0563, 0x0566, 0x0599, 0x059C, 0x059F, 0x058D, 0x0590, 0x0593, 0x0596, 0x052A, 0x052D, 0x0524, 0x0527, 0x051E, 0x0521, 0x051B, 0x0551, 0x0554, 0x0557, 0x055A, 0x0545, 0x0548, 0x054B, 0x054E, 0x0539, 0x053C, 0x053F, 0x0542, 0x0533, 0x04FA, 0x0A66, 0x04FD, 0x0A6A, 0x04F4, 0x0A5E, 0x04F7, 0x0A62, 0x04EE, 0x0A56, 0x04F1, 0x0A5A, 0x04E8, 0x0A8E, 0x04EB, 0x0A92, 0x0512, 0x0A86, 0x0515, 0x0A8A, 0x050C, 0x0A7E, }; const uint8_t NU_TOFOLD_COMBINED[] = { 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C, 0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7A, 0x00, 0xCE, 0xBC, 0x00, 0xC3, 0xA0, 0x00, 0xC3, 0xA1, 0x00, 0xC3, 0xA2, 0x00, 0xC3, 0xA3, 0x00, 0xC3, 0xA4, 0x00, 0xC3, 0xA5, 0x00, 0xC3, 0xA6, 0x00, 0xC3, 0xA7, 0x00, 0xC3, 0xA8, 0x00, 0xC3, 0xA9, 0x00, 0xC3, 0xAA, 0x00, 0xC3, 0xAB, 0x00, 0xC3, 0xAC, 0x00, 0xC3, 0xAD, 0x00, 0xC3, 0xAE, 0x00, 0xC3, 0xAF, 0x00, 0xC3, 0xB0, 0x00, 0xC3, 0xB1, 0x00, 0xC3, 0xB2, 0x00, 0xC3, 0xB3, 0x00, 0xC3, 0xB4, 0x00, 0xC3, 0xB5, 0x00, 0xC3, 0xB6, 0x00, 0xC3, 0xB8, 0x00, 0xC3, 0xB9, 0x00, 0xC3, 0xBA, 0x00, 0xC3, 0xBB, 0x00, 0xC3, 0xBC, 0x00, 0xC3, 0xBD, 0x00, 0xC3, 0xBE, 0x00, 0x73, 0x73, 0x00, 0xC4, 0x81, 0x00, 0xC4, 0x83, 0x00, 0xC4, 0x85, 0x00, 0xC4, 0x87, 0x00, 0xC4, 0x89, 0x00, 0xC4, 0x8B, 0x00, 0xC4, 0x8D, 0x00, 0xC4, 0x8F, 0x00, 0xC4, 0x91, 0x00, 0xC4, 0x93, 0x00, 0xC4, 0x95, 0x00, 0xC4, 0x97, 0x00, 0xC4, 0x99, 0x00, 0xC4, 0x9B, 0x00, 0xC4, 0x9D, 0x00, 0xC4, 0x9F, 0x00, 0xC4, 0xA1, 0x00, 0xC4, 0xA3, 0x00, 0xC4, 0xA5, 0x00, 0xC4, 0xA7, 0x00, 0xC4, 0xA9, 0x00, 0xC4, 0xAB, 0x00, 0xC4, 0xAD, 0x00, 0xC4, 0xAF, 0x00, 0x69, 0xCC, 0x87, 0x00, 0xC4, 0xB3, 0x00, 0xC4, 0xB5, 0x00, 0xC4, 0xB7, 0x00, 0xC4, 0xBA, 0x00, 0xC4, 0xBC, 0x00, 0xC4, 0xBE, 0x00, 0xC5, 0x80, 0x00, 0xC5, 0x82, 0x00, 0xC5, 0x84, 0x00, 0xC5, 0x86, 0x00, 0xC5, 0x88, 0x00, 0xCA, 0xBC, 0x6E, 0x00, 0xC5, 0x8B, 0x00, 0xC5, 0x8D, 0x00, 0xC5, 0x8F, 0x00, 0xC5, 0x91, 0x00, 0xC5, 0x93, 0x00, 0xC5, 0x95, 0x00, 0xC5, 0x97, 0x00, 0xC5, 0x99, 0x00, 0xC5, 0x9B, 0x00, 0xC5, 0x9D, 0x00, 0xC5, 0x9F, 0x00, 0xC5, 0xA1, 0x00, 0xC5, 0xA3, 0x00, 0xC5, 0xA5, 0x00, 0xC5, 0xA7, 0x00, 0xC5, 0xA9, 0x00, 0xC5, 0xAB, 0x00, 0xC5, 0xAD, 0x00, 0xC5, 0xAF, 0x00, 0xC5, 0xB1, 0x00, 0xC5, 0xB3, 0x00, 0xC5, 0xB5, 0x00, 0xC5, 0xB7, 0x00, 0xC3, 0xBF, 0x00, 0xC5, 0xBA, 0x00, 0xC5, 0xBC, 0x00, 0xC5, 0xBE, 0x00, 0x73, 0x00, 0xC9, 0x93, 0x00, 0xC6, 0x83, 0x00, 0xC6, 0x85, 0x00, 0xC9, 0x94, 0x00, 0xC6, 0x88, 0x00, 0xC9, 0x96, 0x00, 0xC9, 0x97, 0x00, 0xC6, 0x8C, 0x00, 0xC7, 0x9D, 0x00, 0xC9, 0x99, 0x00, 0xC9, 0x9B, 0x00, 0xC6, 0x92, 0x00, 0xC9, 0xA0, 0x00, 0xC9, 0xA3, 0x00, 0xC9, 0xA9, 0x00, 0xC9, 0xA8, 0x00, 0xC6, 0x99, 0x00, 0xC9, 0xAF, 0x00, 0xC9, 0xB2, 0x00, 0xC9, 0xB5, 0x00, 0xC6, 0xA1, 0x00, 0xC6, 0xA3, 0x00, 0xC6, 0xA5, 0x00, 0xCA, 0x80, 0x00, 0xC6, 0xA8, 0x00, 0xCA, 0x83, 0x00, 0xC6, 0xAD, 0x00, 0xCA, 0x88, 0x00, 0xC6, 0xB0, 0x00, 0xCA, 0x8A, 0x00, 0xCA, 0x8B, 0x00, 0xC6, 0xB4, 0x00, 0xC6, 0xB6, 0x00, 0xCA, 0x92, 0x00, 0xC6, 0xB9, 0x00, 0xC6, 0xBD, 0x00, 0xC7, 0x86, 0x00, 0xC7, 0x86, 0x00, 0xC7, 0x89, 0x00, 0xC7, 0x89, 0x00, 0xC7, 0x8C, 0x00, 0xC7, 0x8C, 0x00, 0xC7, 0x8E, 0x00, 0xC7, 0x90, 0x00, 0xC7, 0x92, 0x00, 0xC7, 0x94, 0x00, 0xC7, 0x96, 0x00, 0xC7, 0x98, 0x00, 0xC7, 0x9A, 0x00, 0xC7, 0x9C, 0x00, 0xC7, 0x9F, 0x00, 0xC7, 0xA1, 0x00, 0xC7, 0xA3, 0x00, 0xC7, 0xA5, 0x00, 0xC7, 0xA7, 0x00, 0xC7, 0xA9, 0x00, 0xC7, 0xAB, 0x00, 0xC7, 0xAD, 0x00, 0xC7, 0xAF, 0x00, 0x6A, 0xCC, 0x8C, 0x00, 0xC7, 0xB3, 0x00, 0xC7, 0xB3, 0x00, 0xC7, 0xB5, 0x00, 0xC6, 0x95, 0x00, 0xC6, 0xBF, 0x00, 0xC7, 0xB9, 0x00, 0xC7, 0xBB, 0x00, 0xC7, 0xBD, 0x00, 0xC7, 0xBF, 0x00, 0xC8, 0x81, 0x00, 0xC8, 0x83, 0x00, 0xC8, 0x85, 0x00, 0xC8, 0x87, 0x00, 0xC8, 0x89, 0x00, 0xC8, 0x8B, 0x00, 0xC8, 0x8D, 0x00, 0xC8, 0x8F, 0x00, 0xC8, 0x91, 0x00, 0xC8, 0x93, 0x00, 0xC8, 0x95, 0x00, 0xC8, 0x97, 0x00, 0xC8, 0x99, 0x00, 0xC8, 0x9B, 0x00, 0xC8, 0x9D, 0x00, 0xC8, 0x9F, 0x00, 0xC6, 0x9E, 0x00, 0xC8, 0xA3, 0x00, 0xC8, 0xA5, 0x00, 0xC8, 0xA7, 0x00, 0xC8, 0xA9, 0x00, 0xC8, 0xAB, 0x00, 0xC8, 0xAD, 0x00, 0xC8, 0xAF, 0x00, 0xC8, 0xB1, 0x00, 0xC8, 0xB3, 0x00, 0xE2, 0xB1, 0xA5, 0x00, 0xC8, 0xBC, 0x00, 0xC6, 0x9A, 0x00, 0xE2, 0xB1, 0xA6, 0x00, 0xC9, 0x82, 0x00, 0xC6, 0x80, 0x00, 0xCA, 0x89, 0x00, 0xCA, 0x8C, 0x00, 0xC9, 0x87, 0x00, 0xC9, 0x89, 0x00, 0xC9, 0x8B, 0x00, 0xC9, 0x8D, 0x00, 0xC9, 0x8F, 0x00, 0xCE, 0xB9, 0x00, 0xCD, 0xB1, 0x00, 0xCD, 0xB3, 0x00, 0xCD, 0xB7, 0x00, 0xCF, 0xB3, 0x00, 0xCE, 0xAC, 0x00, 0xCE, 0xAD, 0x00, 0xCE, 0xAE, 0x00, 0xCE, 0xAF, 0x00, 0xCF, 0x8C, 0x00, 0xCF, 0x8D, 0x00, 0xCF, 0x8E, 0x00, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCE, 0xB1, 0x00, 0xCE, 0xB2, 0x00, 0xCE, 0xB3, 0x00, 0xCE, 0xB4, 0x00, 0xCE, 0xB5, 0x00, 0xCE, 0xB6, 0x00, 0xCE, 0xB7, 0x00, 0xCE, 0xB8, 0x00, 0xCE, 0xB9, 0x00, 0xCE, 0xBA, 0x00, 0xCE, 0xBB, 0x00, 0xCE, 0xBC, 0x00, 0xCE, 0xBD, 0x00, 0xCE, 0xBE, 0x00, 0xCE, 0xBF, 0x00, 0xCF, 0x80, 0x00, 0xCF, 0x81, 0x00, 0xCF, 0x83, 0x00, 0xCF, 0x84, 0x00, 0xCF, 0x85, 0x00, 0xCF, 0x86, 0x00, 0xCF, 0x87, 0x00, 0xCF, 0x88, 0x00, 0xCF, 0x89, 0x00, 0xCF, 0x8A, 0x00, 0xCF, 0x8B, 0x00, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCF, 0x83, 0x00, 0xCF, 0x97, 0x00, 0xCE, 0xB2, 0x00, 0xCE, 0xB8, 0x00, 0xCF, 0x86, 0x00, 0xCF, 0x80, 0x00, 0xCF, 0x99, 0x00, 0xCF, 0x9B, 0x00, 0xCF, 0x9D, 0x00, 0xCF, 0x9F, 0x00, 0xCF, 0xA1, 0x00, 0xCF, 0xA3, 0x00, 0xCF, 0xA5, 0x00, 0xCF, 0xA7, 0x00, 0xCF, 0xA9, 0x00, 0xCF, 0xAB, 0x00, 0xCF, 0xAD, 0x00, 0xCF, 0xAF, 0x00, 0xCE, 0xBA, 0x00, 0xCF, 0x81, 0x00, 0xCE, 0xB8, 0x00, 0xCE, 0xB5, 0x00, 0xCF, 0xB8, 0x00, 0xCF, 0xB2, 0x00, 0xCF, 0xBB, 0x00, 0xCD, 0xBB, 0x00, 0xCD, 0xBC, 0x00, 0xCD, 0xBD, 0x00, 0xD1, 0x90, 0x00, 0xD1, 0x91, 0x00, 0xD1, 0x92, 0x00, 0xD1, 0x93, 0x00, 0xD1, 0x94, 0x00, 0xD1, 0x95, 0x00, 0xD1, 0x96, 0x00, 0xD1, 0x97, 0x00, 0xD1, 0x98, 0x00, 0xD1, 0x99, 0x00, 0xD1, 0x9A, 0x00, 0xD1, 0x9B, 0x00, 0xD1, 0x9C, 0x00, 0xD1, 0x9D, 0x00, 0xD1, 0x9E, 0x00, 0xD1, 0x9F, 0x00, 0xD0, 0xB0, 0x00, 0xD0, 0xB1, 0x00, 0xD0, 0xB2, 0x00, 0xD0, 0xB3, 0x00, 0xD0, 0xB4, 0x00, 0xD0, 0xB5, 0x00, 0xD0, 0xB6, 0x00, 0xD0, 0xB7, 0x00, 0xD0, 0xB8, 0x00, 0xD0, 0xB9, 0x00, 0xD0, 0xBA, 0x00, 0xD0, 0xBB, 0x00, 0xD0, 0xBC, 0x00, 0xD0, 0xBD, 0x00, 0xD0, 0xBE, 0x00, 0xD0, 0xBF, 0x00, 0xD1, 0x80, 0x00, 0xD1, 0x81, 0x00, 0xD1, 0x82, 0x00, 0xD1, 0x83, 0x00, 0xD1, 0x84, 0x00, 0xD1, 0x85, 0x00, 0xD1, 0x86, 0x00, 0xD1, 0x87, 0x00, 0xD1, 0x88, 0x00, 0xD1, 0x89, 0x00, 0xD1, 0x8A, 0x00, 0xD1, 0x8B, 0x00, 0xD1, 0x8C, 0x00, 0xD1, 0x8D, 0x00, 0xD1, 0x8E, 0x00, 0xD1, 0x8F, 0x00, 0xD1, 0xA1, 0x00, 0xD1, 0xA3, 0x00, 0xD1, 0xA5, 0x00, 0xD1, 0xA7, 0x00, 0xD1, 0xA9, 0x00, 0xD1, 0xAB, 0x00, 0xD1, 0xAD, 0x00, 0xD1, 0xAF, 0x00, 0xD1, 0xB1, 0x00, 0xD1, 0xB3, 0x00, 0xD1, 0xB5, 0x00, 0xD1, 0xB7, 0x00, 0xD1, 0xB9, 0x00, 0xD1, 0xBB, 0x00, 0xD1, 0xBD, 0x00, 0xD1, 0xBF, 0x00, 0xD2, 0x81, 0x00, 0xD2, 0x8B, 0x00, 0xD2, 0x8D, 0x00, 0xD2, 0x8F, 0x00, 0xD2, 0x91, 0x00, 0xD2, 0x93, 0x00, 0xD2, 0x95, 0x00, 0xD2, 0x97, 0x00, 0xD2, 0x99, 0x00, 0xD2, 0x9B, 0x00, 0xD2, 0x9D, 0x00, 0xD2, 0x9F, 0x00, 0xD2, 0xA1, 0x00, 0xD2, 0xA3, 0x00, 0xD2, 0xA5, 0x00, 0xD2, 0xA7, 0x00, 0xD2, 0xA9, 0x00, 0xD2, 0xAB, 0x00, 0xD2, 0xAD, 0x00, 0xD2, 0xAF, 0x00, 0xD2, 0xB1, 0x00, 0xD2, 0xB3, 0x00, 0xD2, 0xB5, 0x00, 0xD2, 0xB7, 0x00, 0xD2, 0xB9, 0x00, 0xD2, 0xBB, 0x00, 0xD2, 0xBD, 0x00, 0xD2, 0xBF, 0x00, 0xD3, 0x8F, 0x00, 0xD3, 0x82, 0x00, 0xD3, 0x84, 0x00, 0xD3, 0x86, 0x00, 0xD3, 0x88, 0x00, 0xD3, 0x8A, 0x00, 0xD3, 0x8C, 0x00, 0xD3, 0x8E, 0x00, 0xD3, 0x91, 0x00, 0xD3, 0x93, 0x00, 0xD3, 0x95, 0x00, 0xD3, 0x97, 0x00, 0xD3, 0x99, 0x00, 0xD3, 0x9B, 0x00, 0xD3, 0x9D, 0x00, 0xD3, 0x9F, 0x00, 0xD3, 0xA1, 0x00, 0xD3, 0xA3, 0x00, 0xD3, 0xA5, 0x00, 0xD3, 0xA7, 0x00, 0xD3, 0xA9, 0x00, 0xD3, 0xAB, 0x00, 0xD3, 0xAD, 0x00, 0xD3, 0xAF, 0x00, 0xD3, 0xB1, 0x00, 0xD3, 0xB3, 0x00, 0xD3, 0xB5, 0x00, 0xD3, 0xB7, 0x00, 0xD3, 0xB9, 0x00, 0xD3, 0xBB, 0x00, 0xD3, 0xBD, 0x00, 0xD3, 0xBF, 0x00, 0xD4, 0x81, 0x00, 0xD4, 0x83, 0x00, 0xD4, 0x85, 0x00, 0xD4, 0x87, 0x00, 0xD4, 0x89, 0x00, 0xD4, 0x8B, 0x00, 0xD4, 0x8D, 0x00, 0xD4, 0x8F, 0x00, 0xD4, 0x91, 0x00, 0xD4, 0x93, 0x00, 0xD4, 0x95, 0x00, 0xD4, 0x97, 0x00, 0xD4, 0x99, 0x00, 0xD4, 0x9B, 0x00, 0xD4, 0x9D, 0x00, 0xD4, 0x9F, 0x00, 0xD4, 0xA1, 0x00, 0xD4, 0xA3, 0x00, 0xD4, 0xA5, 0x00, 0xD4, 0xA7, 0x00, 0xD4, 0xA9, 0x00, 0xD4, 0xAB, 0x00, 0xD4, 0xAD, 0x00, 0xD4, 0xAF, 0x00, 0xD5, 0xA1, 0x00, 0xD5, 0xA2, 0x00, 0xD5, 0xA3, 0x00, 0xD5, 0xA4, 0x00, 0xD5, 0xA5, 0x00, 0xD5, 0xA6, 0x00, 0xD5, 0xA7, 0x00, 0xD5, 0xA8, 0x00, 0xD5, 0xA9, 0x00, 0xD5, 0xAA, 0x00, 0xD5, 0xAB, 0x00, 0xD5, 0xAC, 0x00, 0xD5, 0xAD, 0x00, 0xD5, 0xAE, 0x00, 0xD5, 0xAF, 0x00, 0xD5, 0xB0, 0x00, 0xD5, 0xB1, 0x00, 0xD5, 0xB2, 0x00, 0xD5, 0xB3, 0x00, 0xD5, 0xB4, 0x00, 0xD5, 0xB5, 0x00, 0xD5, 0xB6, 0x00, 0xD5, 0xB7, 0x00, 0xD5, 0xB8, 0x00, 0xD5, 0xB9, 0x00, 0xD5, 0xBA, 0x00, 0xD5, 0xBB, 0x00, 0xD5, 0xBC, 0x00, 0xD5, 0xBD, 0x00, 0xD5, 0xBE, 0x00, 0xD5, 0xBF, 0x00, 0xD6, 0x80, 0x00, 0xD6, 0x81, 0x00, 0xD6, 0x82, 0x00, 0xD6, 0x83, 0x00, 0xD6, 0x84, 0x00, 0xD6, 0x85, 0x00, 0xD6, 0x86, 0x00, 0xD5, 0xA5, 0xD6, 0x82, 0x00, 0xF0, 0x90, 0x90, 0xA8, 0x00, 0xF0, 0x90, 0x90, 0xA9, 0x00, 0xF0, 0x90, 0x90, 0xAA, 0x00, 0xF0, 0x90, 0x90, 0xAB, 0x00, 0xF0, 0x90, 0x90, 0xAC, 0x00, 0xF0, 0x90, 0x90, 0xAD, 0x00, 0xF0, 0x90, 0x90, 0xAE, 0x00, 0xF0, 0x90, 0x90, 0xAF, 0x00, 0xF0, 0x90, 0x90, 0xB0, 0x00, 0xF0, 0x90, 0x90, 0xB1, 0x00, 0xF0, 0x90, 0x90, 0xB2, 0x00, 0xF0, 0x90, 0x90, 0xB3, 0x00, 0xF0, 0x90, 0x90, 0xB4, 0x00, 0xF0, 0x90, 0x90, 0xB5, 0x00, 0xF0, 0x90, 0x90, 0xB6, 0x00, 0xF0, 0x90, 0x90, 0xB7, 0x00, 0xF0, 0x90, 0x90, 0xB8, 0x00, 0xF0, 0x90, 0x90, 0xB9, 0x00, 0xF0, 0x90, 0x90, 0xBA, 0x00, 0xF0, 0x90, 0x90, 0xBB, 0x00, 0xF0, 0x90, 0x90, 0xBC, 0x00, 0xF0, 0x90, 0x90, 0xBD, 0x00, 0xF0, 0x90, 0x90, 0xBE, 0x00, 0xF0, 0x90, 0x90, 0xBF, 0x00, 0xF0, 0x90, 0x91, 0x80, 0x00, 0xF0, 0x90, 0x91, 0x81, 0x00, 0xF0, 0x90, 0x91, 0x82, 0x00, 0xF0, 0x90, 0x91, 0x83, 0x00, 0xF0, 0x90, 0x91, 0x84, 0x00, 0xF0, 0x90, 0x91, 0x85, 0x00, 0xF0, 0x90, 0x91, 0x86, 0x00, 0xF0, 0x90, 0x91, 0x87, 0x00, 0xF0, 0x90, 0x91, 0x88, 0x00, 0xF0, 0x90, 0x91, 0x89, 0x00, 0xF0, 0x90, 0x91, 0x8A, 0x00, 0xF0, 0x90, 0x91, 0x8B, 0x00, 0xF0, 0x90, 0x91, 0x8C, 0x00, 0xF0, 0x90, 0x91, 0x8D, 0x00, 0xF0, 0x90, 0x91, 0x8E, 0x00, 0xF0, 0x90, 0x91, 0x8F, 0x00, 0xF0, 0x90, 0x93, 0x98, 0x00, 0xF0, 0x90, 0x93, 0x99, 0x00, 0xF0, 0x90, 0x93, 0x9A, 0x00, 0xF0, 0x90, 0x93, 0x9B, 0x00, 0xF0, 0x90, 0x93, 0x9C, 0x00, 0xF0, 0x90, 0x93, 0x9D, 0x00, 0xF0, 0x90, 0x93, 0x9E, 0x00, 0xF0, 0x90, 0x93, 0x9F, 0x00, 0xF0, 0x90, 0x93, 0xA0, 0x00, 0xF0, 0x90, 0x93, 0xA1, 0x00, 0xF0, 0x90, 0x93, 0xA2, 0x00, 0xF0, 0x90, 0x93, 0xA3, 0x00, 0xF0, 0x90, 0x93, 0xA4, 0x00, 0xF0, 0x90, 0x93, 0xA5, 0x00, 0xF0, 0x90, 0x93, 0xA6, 0x00, 0xF0, 0x90, 0x93, 0xA7, 0x00, 0xF0, 0x90, 0x93, 0xA8, 0x00, 0xF0, 0x90, 0x93, 0xA9, 0x00, 0xF0, 0x90, 0x93, 0xAA, 0x00, 0xF0, 0x90, 0x93, 0xAB, 0x00, 0xF0, 0x90, 0x93, 0xAC, 0x00, 0xF0, 0x90, 0x93, 0xAD, 0x00, 0xF0, 0x90, 0x93, 0xAE, 0x00, 0xF0, 0x90, 0x93, 0xAF, 0x00, 0xF0, 0x90, 0x93, 0xB0, 0x00, 0xF0, 0x90, 0x93, 0xB1, 0x00, 0xF0, 0x90, 0x93, 0xB2, 0x00, 0xF0, 0x90, 0x93, 0xB3, 0x00, 0xF0, 0x90, 0x93, 0xB4, 0x00, 0xF0, 0x90, 0x93, 0xB5, 0x00, 0xF0, 0x90, 0x93, 0xB6, 0x00, 0xF0, 0x90, 0x93, 0xB7, 0x00, 0xF0, 0x90, 0x93, 0xB8, 0x00, 0xF0, 0x90, 0x93, 0xB9, 0x00, 0xF0, 0x90, 0x93, 0xBA, 0x00, 0xF0, 0x90, 0x93, 0xBB, 0x00, 0xE2, 0xB4, 0x80, 0x00, 0xE2, 0xB4, 0x81, 0x00, 0xE2, 0xB4, 0x82, 0x00, 0xE2, 0xB4, 0x83, 0x00, 0xE2, 0xB4, 0x84, 0x00, 0xE2, 0xB4, 0x85, 0x00, 0xE2, 0xB4, 0x86, 0x00, 0xE2, 0xB4, 0x87, 0x00, 0xE2, 0xB4, 0x88, 0x00, 0xE2, 0xB4, 0x89, 0x00, 0xE2, 0xB4, 0x8A, 0x00, 0xE2, 0xB4, 0x8B, 0x00, 0xE2, 0xB4, 0x8C, 0x00, 0xE2, 0xB4, 0x8D, 0x00, 0xE2, 0xB4, 0x8E, 0x00, 0xE2, 0xB4, 0x8F, 0x00, 0xE2, 0xB4, 0x90, 0x00, 0xE2, 0xB4, 0x91, 0x00, 0xE2, 0xB4, 0x92, 0x00, 0xE2, 0xB4, 0x93, 0x00, 0xE2, 0xB4, 0x94, 0x00, 0xE2, 0xB4, 0x95, 0x00, 0xE2, 0xB4, 0x96, 0x00, 0xE2, 0xB4, 0x97, 0x00, 0xE2, 0xB4, 0x98, 0x00, 0xE2, 0xB4, 0x99, 0x00, 0xE2, 0xB4, 0x9A, 0x00, 0xE2, 0xB4, 0x9B, 0x00, 0xE2, 0xB4, 0x9C, 0x00, 0xE2, 0xB4, 0x9D, 0x00, 0xE2, 0xB4, 0x9E, 0x00, 0xE2, 0xB4, 0x9F, 0x00, 0xE2, 0xB4, 0xA0, 0x00, 0xE2, 0xB4, 0xA1, 0x00, 0xE2, 0xB4, 0xA2, 0x00, 0xE2, 0xB4, 0xA3, 0x00, 0xE2, 0xB4, 0xA4, 0x00, 0xE2, 0xB4, 0xA5, 0x00, 0xE2, 0xB4, 0xA7, 0x00, 0xF0, 0x90, 0xB3, 0x80, 0x00, 0xF0, 0x90, 0xB3, 0x81, 0x00, 0xF0, 0x90, 0xB3, 0x82, 0x00, 0xF0, 0x90, 0xB3, 0x83, 0x00, 0xF0, 0x90, 0xB3, 0x84, 0x00, 0xF0, 0x90, 0xB3, 0x85, 0x00, 0xF0, 0x90, 0xB3, 0x86, 0x00, 0xF0, 0x90, 0xB3, 0x87, 0x00, 0xF0, 0x90, 0xB3, 0x88, 0x00, 0xF0, 0x90, 0xB3, 0x89, 0x00, 0xF0, 0x90, 0xB3, 0x8A, 0x00, 0xF0, 0x90, 0xB3, 0x8B, 0x00, 0xF0, 0x90, 0xB3, 0x8C, 0x00, 0xF0, 0x90, 0xB3, 0x8D, 0x00, 0xF0, 0x90, 0xB3, 0x8E, 0x00, 0xF0, 0x90, 0xB3, 0x8F, 0x00, 0xF0, 0x90, 0xB3, 0x90, 0x00, 0xF0, 0x90, 0xB3, 0x91, 0x00, 0xF0, 0x90, 0xB3, 0x92, 0x00, 0xF0, 0x90, 0xB3, 0x93, 0x00, 0xF0, 0x90, 0xB3, 0x94, 0x00, 0xF0, 0x90, 0xB3, 0x95, 0x00, 0xF0, 0x90, 0xB3, 0x96, 0x00, 0xF0, 0x90, 0xB3, 0x97, 0x00, 0xF0, 0x90, 0xB3, 0x98, 0x00, 0xF0, 0x90, 0xB3, 0x99, 0x00, 0xF0, 0x90, 0xB3, 0x9A, 0x00, 0xF0, 0x90, 0xB3, 0x9B, 0x00, 0xF0, 0x90, 0xB3, 0x9C, 0x00, 0xF0, 0x90, 0xB3, 0x9D, 0x00, 0xF0, 0x90, 0xB3, 0x9E, 0x00, 0xF0, 0x90, 0xB3, 0x9F, 0x00, 0xF0, 0x90, 0xB3, 0xA0, 0x00, 0xF0, 0x90, 0xB3, 0xA1, 0x00, 0xF0, 0x90, 0xB3, 0xA2, 0x00, 0xF0, 0x90, 0xB3, 0xA3, 0x00, 0xF0, 0x90, 0xB3, 0xA4, 0x00, 0xF0, 0x90, 0xB3, 0xA5, 0x00, 0xF0, 0x90, 0xB3, 0xA6, 0x00, 0xF0, 0x90, 0xB3, 0xA7, 0x00, 0xF0, 0x90, 0xB3, 0xA8, 0x00, 0xF0, 0x90, 0xB3, 0xA9, 0x00, 0xF0, 0x90, 0xB3, 0xAA, 0x00, 0xF0, 0x90, 0xB3, 0xAB, 0x00, 0xF0, 0x90, 0xB3, 0xAC, 0x00, 0xF0, 0x90, 0xB3, 0xAD, 0x00, 0xF0, 0x90, 0xB3, 0xAE, 0x00, 0xF0, 0x90, 0xB3, 0xAF, 0x00, 0xF0, 0x90, 0xB3, 0xB0, 0x00, 0xF0, 0x90, 0xB3, 0xB1, 0x00, 0xF0, 0x90, 0xB3, 0xB2, 0x00, 0xE2, 0xB4, 0xAD, 0x00, 0xF0, 0x91, 0xA3, 0x80, 0x00, 0xF0, 0x91, 0xA3, 0x81, 0x00, 0xF0, 0x91, 0xA3, 0x82, 0x00, 0xF0, 0x91, 0xA3, 0x83, 0x00, 0xF0, 0x91, 0xA3, 0x84, 0x00, 0xF0, 0x91, 0xA3, 0x85, 0x00, 0xF0, 0x91, 0xA3, 0x86, 0x00, 0xF0, 0x91, 0xA3, 0x87, 0x00, 0xF0, 0x91, 0xA3, 0x88, 0x00, 0xF0, 0x91, 0xA3, 0x89, 0x00, 0xF0, 0x91, 0xA3, 0x8A, 0x00, 0xF0, 0x91, 0xA3, 0x8B, 0x00, 0xF0, 0x91, 0xA3, 0x8C, 0x00, 0xF0, 0x91, 0xA3, 0x8D, 0x00, 0xF0, 0x91, 0xA3, 0x8E, 0x00, 0xF0, 0x91, 0xA3, 0x8F, 0x00, 0xF0, 0x91, 0xA3, 0x90, 0x00, 0xF0, 0x91, 0xA3, 0x91, 0x00, 0xF0, 0x91, 0xA3, 0x92, 0x00, 0xF0, 0x91, 0xA3, 0x93, 0x00, 0xF0, 0x91, 0xA3, 0x94, 0x00, 0xF0, 0x91, 0xA3, 0x95, 0x00, 0xF0, 0x91, 0xA3, 0x96, 0x00, 0xF0, 0x91, 0xA3, 0x97, 0x00, 0xF0, 0x91, 0xA3, 0x98, 0x00, 0xF0, 0x91, 0xA3, 0x99, 0x00, 0xF0, 0x91, 0xA3, 0x9A, 0x00, 0xF0, 0x91, 0xA3, 0x9B, 0x00, 0xF0, 0x91, 0xA3, 0x9C, 0x00, 0xF0, 0x91, 0xA3, 0x9D, 0x00, 0xF0, 0x91, 0xA3, 0x9E, 0x00, 0xF0, 0x91, 0xA3, 0x9F, 0x00, 0xE1, 0x8F, 0xB0, 0x00, 0xE1, 0x8F, 0xB1, 0x00, 0xE1, 0x8F, 0xB2, 0x00, 0xE1, 0x8F, 0xB3, 0x00, 0xE1, 0x8F, 0xB4, 0x00, 0xE1, 0x8F, 0xB5, 0x00, 0xD0, 0xB2, 0x00, 0xD0, 0xB4, 0x00, 0xD0, 0xBE, 0x00, 0xD1, 0x81, 0x00, 0xD1, 0x82, 0x00, 0xD1, 0x82, 0x00, 0xD1, 0x8A, 0x00, 0xD1, 0xA3, 0x00, 0xEA, 0x99, 0x8B, 0x00, 0xE1, 0xB8, 0x81, 0x00, 0xE1, 0xB8, 0x83, 0x00, 0xE1, 0xB8, 0x85, 0x00, 0xE1, 0xB8, 0x87, 0x00, 0xE1, 0xB8, 0x89, 0x00, 0xE1, 0xB8, 0x8B, 0x00, 0xE1, 0xB8, 0x8D, 0x00, 0xE1, 0xB8, 0x8F, 0x00, 0xE1, 0xB8, 0x91, 0x00, 0xE1, 0xB8, 0x93, 0x00, 0xE1, 0xB8, 0x95, 0x00, 0xE1, 0xB8, 0x97, 0x00, 0xE1, 0xB8, 0x99, 0x00, 0xE1, 0xB8, 0x9B, 0x00, 0xE1, 0xB8, 0x9D, 0x00, 0xE1, 0xB8, 0x9F, 0x00, 0xE1, 0xB8, 0xA1, 0x00, 0xE1, 0xB8, 0xA3, 0x00, 0xE1, 0xB8, 0xA5, 0x00, 0xE1, 0xB8, 0xA7, 0x00, 0xE1, 0xB8, 0xA9, 0x00, 0xE1, 0xB8, 0xAB, 0x00, 0xE1, 0xB8, 0xAD, 0x00, 0xE1, 0xB8, 0xAF, 0x00, 0xE1, 0xB8, 0xB1, 0x00, 0xE1, 0xB8, 0xB3, 0x00, 0xE1, 0xB8, 0xB5, 0x00, 0xE1, 0xB8, 0xB7, 0x00, 0xE1, 0xB8, 0xB9, 0x00, 0xE1, 0xB8, 0xBB, 0x00, 0xE1, 0xB8, 0xBD, 0x00, 0xE1, 0xB8, 0xBF, 0x00, 0xE1, 0xB9, 0x81, 0x00, 0xE1, 0xB9, 0x83, 0x00, 0xE1, 0xB9, 0x85, 0x00, 0xE1, 0xB9, 0x87, 0x00, 0xE1, 0xB9, 0x89, 0x00, 0xE1, 0xB9, 0x8B, 0x00, 0xE1, 0xB9, 0x8D, 0x00, 0xE1, 0xB9, 0x8F, 0x00, 0xE1, 0xB9, 0x91, 0x00, 0xE1, 0xB9, 0x93, 0x00, 0xE1, 0xB9, 0x95, 0x00, 0xE1, 0xB9, 0x97, 0x00, 0xE1, 0xB9, 0x99, 0x00, 0xE1, 0xB9, 0x9B, 0x00, 0xE1, 0xB9, 0x9D, 0x00, 0xE1, 0xB9, 0x9F, 0x00, 0xE1, 0xB9, 0xA1, 0x00, 0xE1, 0xB9, 0xA3, 0x00, 0xE1, 0xB9, 0xA5, 0x00, 0xE1, 0xB9, 0xA7, 0x00, 0xE1, 0xB9, 0xA9, 0x00, 0xE1, 0xB9, 0xAB, 0x00, 0xE1, 0xB9, 0xAD, 0x00, 0xE1, 0xB9, 0xAF, 0x00, 0xE1, 0xB9, 0xB1, 0x00, 0xE1, 0xB9, 0xB3, 0x00, 0xE1, 0xB9, 0xB5, 0x00, 0xE1, 0xB9, 0xB7, 0x00, 0xE1, 0xB9, 0xB9, 0x00, 0xE1, 0xB9, 0xBB, 0x00, 0xE1, 0xB9, 0xBD, 0x00, 0xE1, 0xB9, 0xBF, 0x00, 0xE1, 0xBA, 0x81, 0x00, 0xE1, 0xBA, 0x83, 0x00, 0xE1, 0xBA, 0x85, 0x00, 0xE1, 0xBA, 0x87, 0x00, 0xE1, 0xBA, 0x89, 0x00, 0xE1, 0xBA, 0x8B, 0x00, 0xE1, 0xBA, 0x8D, 0x00, 0xE1, 0xBA, 0x8F, 0x00, 0xE1, 0xBA, 0x91, 0x00, 0xF0, 0x9E, 0xA4, 0xA2, 0x00, 0xF0, 0x9E, 0xA4, 0xA3, 0x00, 0xF0, 0x9E, 0xA4, 0xA4, 0x00, 0xF0, 0x9E, 0xA4, 0xA5, 0x00, 0xF0, 0x9E, 0xA4, 0xA6, 0x00, 0xF0, 0x9E, 0xA4, 0xA7, 0x00, 0xF0, 0x9E, 0xA4, 0xA8, 0x00, 0xF0, 0x9E, 0xA4, 0xA9, 0x00, 0xF0, 0x9E, 0xA4, 0xAA, 0x00, 0xF0, 0x9E, 0xA4, 0xAB, 0x00, 0xF0, 0x9E, 0xA4, 0xAC, 0x00, 0xF0, 0x9E, 0xA4, 0xAD, 0x00, 0xF0, 0x9E, 0xA4, 0xAE, 0x00, 0xF0, 0x9E, 0xA4, 0xAF, 0x00, 0xF0, 0x9E, 0xA4, 0xB0, 0x00, 0xF0, 0x9E, 0xA4, 0xB1, 0x00, 0xF0, 0x9E, 0xA4, 0xB2, 0x00, 0xF0, 0x9E, 0xA4, 0xB3, 0x00, 0xF0, 0x9E, 0xA4, 0xB4, 0x00, 0xF0, 0x9E, 0xA4, 0xB5, 0x00, 0xF0, 0x9E, 0xA4, 0xB6, 0x00, 0xF0, 0x9E, 0xA4, 0xB7, 0x00, 0xF0, 0x9E, 0xA4, 0xB8, 0x00, 0xF0, 0x9E, 0xA4, 0xB9, 0x00, 0xF0, 0x9E, 0xA4, 0xBA, 0x00, 0xF0, 0x9E, 0xA4, 0xBB, 0x00, 0xF0, 0x9E, 0xA4, 0xBC, 0x00, 0xF0, 0x9E, 0xA4, 0xBD, 0x00, 0xF0, 0x9E, 0xA4, 0xBE, 0x00, 0xF0, 0x9E, 0xA4, 0xBF, 0x00, 0xF0, 0x9E, 0xA5, 0x80, 0x00, 0xF0, 0x9E, 0xA5, 0x81, 0x00, 0xE1, 0xBA, 0x93, 0x00, 0xF0, 0x9E, 0xA5, 0x82, 0x00, 0xF0, 0x9E, 0xA5, 0x83, 0x00, 0xE1, 0xBA, 0x95, 0x00, 0x68, 0xCC, 0xB1, 0x00, 0x74, 0xCC, 0x88, 0x00, 0x77, 0xCC, 0x8A, 0x00, 0x79, 0xCC, 0x8A, 0x00, 0x61, 0xCA, 0xBE, 0x00, 0xE1, 0xB9, 0xA1, 0x00, 0x73, 0x73, 0x00, 0xE1, 0xBA, 0xA1, 0x00, 0xE1, 0xBA, 0xA3, 0x00, 0xE1, 0xBA, 0xA5, 0x00, 0xE1, 0xBA, 0xA7, 0x00, 0xE1, 0xBA, 0xA9, 0x00, 0xE1, 0xBA, 0xAB, 0x00, 0xE1, 0xBA, 0xAD, 0x00, 0xE1, 0xBA, 0xAF, 0x00, 0xE1, 0xBA, 0xB1, 0x00, 0xE1, 0xBA, 0xB3, 0x00, 0xE1, 0xBA, 0xB5, 0x00, 0xE1, 0xBA, 0xB7, 0x00, 0xE1, 0xBA, 0xB9, 0x00, 0xE1, 0xBA, 0xBB, 0x00, 0xE1, 0xBA, 0xBD, 0x00, 0xE1, 0xBA, 0xBF, 0x00, 0xE1, 0xBB, 0x81, 0x00, 0xE1, 0xBB, 0x83, 0x00, 0xE1, 0xBB, 0x85, 0x00, 0xE1, 0xBB, 0x87, 0x00, 0xE1, 0xBB, 0x89, 0x00, 0xE1, 0xBB, 0x8B, 0x00, 0xE1, 0xBB, 0x8D, 0x00, 0xE1, 0xBB, 0x8F, 0x00, 0xE1, 0xBB, 0x91, 0x00, 0xE1, 0xBB, 0x93, 0x00, 0xE1, 0xBB, 0x95, 0x00, 0xE1, 0xBB, 0x97, 0x00, 0xE1, 0xBB, 0x99, 0x00, 0xE1, 0xBB, 0x9B, 0x00, 0xE1, 0xBB, 0x9D, 0x00, 0xE1, 0xBB, 0x9F, 0x00, 0xE1, 0xBB, 0xA1, 0x00, 0xE1, 0xBB, 0xA3, 0x00, 0xE1, 0xBB, 0xA5, 0x00, 0xE1, 0xBB, 0xA7, 0x00, 0xE1, 0xBB, 0xA9, 0x00, 0xE1, 0xBB, 0xAB, 0x00, 0xE1, 0xBB, 0xAD, 0x00, 0xE1, 0xBB, 0xAF, 0x00, 0xE1, 0xBB, 0xB1, 0x00, 0xE1, 0xBB, 0xB3, 0x00, 0xE1, 0xBB, 0xB5, 0x00, 0xE1, 0xBB, 0xB7, 0x00, 0xE1, 0xBB, 0xB9, 0x00, 0xE1, 0xBB, 0xBB, 0x00, 0xE1, 0xBB, 0xBD, 0x00, 0xE1, 0xBB, 0xBF, 0x00, 0xE1, 0xBC, 0x80, 0x00, 0xE1, 0xBC, 0x81, 0x00, 0xE1, 0xBC, 0x82, 0x00, 0xE1, 0xBC, 0x83, 0x00, 0xE1, 0xBC, 0x84, 0x00, 0xE1, 0xBC, 0x85, 0x00, 0xE1, 0xBC, 0x86, 0x00, 0xE1, 0xBC, 0x87, 0x00, 0xE1, 0xBC, 0x90, 0x00, 0xE1, 0xBC, 0x91, 0x00, 0xE1, 0xBC, 0x92, 0x00, 0xE1, 0xBC, 0x93, 0x00, 0xE1, 0xBC, 0x94, 0x00, 0xE1, 0xBC, 0x95, 0x00, 0xE1, 0xBC, 0xA0, 0x00, 0xE1, 0xBC, 0xA1, 0x00, 0xE1, 0xBC, 0xA2, 0x00, 0xE1, 0xBC, 0xA3, 0x00, 0xE1, 0xBC, 0xA4, 0x00, 0xE1, 0xBC, 0xA5, 0x00, 0xE1, 0xBC, 0xA6, 0x00, 0xE1, 0xBC, 0xA7, 0x00, 0xE1, 0xBC, 0xB0, 0x00, 0xE1, 0xBC, 0xB1, 0x00, 0xE1, 0xBC, 0xB2, 0x00, 0xE1, 0xBC, 0xB3, 0x00, 0xE1, 0xBC, 0xB4, 0x00, 0xE1, 0xBC, 0xB5, 0x00, 0xE1, 0xBC, 0xB6, 0x00, 0xE1, 0xBC, 0xB7, 0x00, 0xE1, 0xBD, 0x80, 0x00, 0xE1, 0xBD, 0x81, 0x00, 0xE1, 0xBD, 0x82, 0x00, 0xE1, 0xBD, 0x83, 0x00, 0xE1, 0xBD, 0x84, 0x00, 0xE1, 0xBD, 0x85, 0x00, 0xCF, 0x85, 0xCC, 0x93, 0x00, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0x00, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0x00, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0x00, 0xE1, 0xBD, 0x91, 0x00, 0xE1, 0xBD, 0x93, 0x00, 0xE1, 0xBD, 0x95, 0x00, 0xE1, 0xBD, 0x97, 0x00, 0xE1, 0xBD, 0xA0, 0x00, 0xE1, 0xBD, 0xA1, 0x00, 0xE1, 0xBD, 0xA2, 0x00, 0xE1, 0xBD, 0xA3, 0x00, 0xE1, 0xBD, 0xA4, 0x00, 0xE1, 0xBD, 0xA5, 0x00, 0xE1, 0xBD, 0xA6, 0x00, 0xE1, 0xBD, 0xA7, 0x00, 0xE1, 0xBC, 0x80, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x81, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x82, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x83, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x84, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x85, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x86, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x87, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x80, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x81, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x82, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x83, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x84, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x85, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x86, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0x87, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA0, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA1, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA2, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA3, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA4, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA5, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA6, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA7, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA0, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA1, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA2, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA3, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA4, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA5, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA6, 0xCE, 0xB9, 0x00, 0xE1, 0xBC, 0xA7, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA0, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA1, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA2, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA3, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA4, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA5, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA6, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA7, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA0, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA1, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA2, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA3, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA4, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA5, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA6, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xA7, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xB0, 0xCE, 0xB9, 0x00, 0xCE, 0xB1, 0xCE, 0xB9, 0x00, 0xCE, 0xAC, 0xCE, 0xB9, 0x00, 0xCE, 0xB1, 0xCD, 0x82, 0x00, 0xCE, 0xB1, 0xCD, 0x82, 0xCE, 0xB9, 0x00, 0xE1, 0xBE, 0xB0, 0x00, 0xE1, 0xBE, 0xB1, 0x00, 0xE1, 0xBD, 0xB0, 0x00, 0xE1, 0xBD, 0xB1, 0x00, 0xCE, 0xB1, 0xCE, 0xB9, 0x00, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xB4, 0xCE, 0xB9, 0x00, 0xCE, 0xB7, 0xCE, 0xB9, 0x00, 0xCE, 0xAE, 0xCE, 0xB9, 0x00, 0xCE, 0xB7, 0xCD, 0x82, 0x00, 0xCE, 0xB7, 0xCD, 0x82, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xB2, 0x00, 0xE1, 0xBD, 0xB3, 0x00, 0xE1, 0xBD, 0xB4, 0x00, 0xE1, 0xBD, 0xB5, 0x00, 0xCE, 0xB7, 0xCE, 0xB9, 0x00, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0x00, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCE, 0xB9, 0xCD, 0x82, 0x00, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0x00, 0xE1, 0xBF, 0x90, 0x00, 0xE1, 0xBF, 0x91, 0x00, 0xE1, 0xBD, 0xB6, 0x00, 0xE1, 0xBD, 0xB7, 0x00, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0x00, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCF, 0x81, 0xCC, 0x93, 0x00, 0xCF, 0x85, 0xCD, 0x82, 0x00, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0x00, 0xE1, 0xBF, 0xA0, 0x00, 0xE1, 0xBF, 0xA1, 0x00, 0xE1, 0xBD, 0xBA, 0x00, 0xE1, 0xBD, 0xBB, 0x00, 0xE1, 0xBF, 0xA5, 0x00, 0xE1, 0xBD, 0xBC, 0xCE, 0xB9, 0x00, 0xCF, 0x89, 0xCE, 0xB9, 0x00, 0xCF, 0x8E, 0xCE, 0xB9, 0x00, 0xCF, 0x89, 0xCD, 0x82, 0x00, 0xCF, 0x89, 0xCD, 0x82, 0xCE, 0xB9, 0x00, 0xE1, 0xBD, 0xB8, 0x00, 0xE1, 0xBD, 0xB9, 0x00, 0xE1, 0xBD, 0xBC, 0x00, 0xE1, 0xBD, 0xBD, 0x00, 0xCF, 0x89, 0xCE, 0xB9, 0x00, 0xCF, 0x89, 0x00, 0x6B, 0x00, 0xC3, 0xA5, 0x00, 0xE2, 0x85, 0x8E, 0x00, 0xE2, 0x85, 0xB0, 0x00, 0xE2, 0x85, 0xB1, 0x00, 0xE2, 0x85, 0xB2, 0x00, 0xE2, 0x85, 0xB3, 0x00, 0xE2, 0x85, 0xB4, 0x00, 0xE2, 0x85, 0xB5, 0x00, 0xE2, 0x85, 0xB6, 0x00, 0xE2, 0x85, 0xB7, 0x00, 0xE2, 0x85, 0xB8, 0x00, 0xE2, 0x85, 0xB9, 0x00, 0xE2, 0x85, 0xBA, 0x00, 0xE2, 0x85, 0xBB, 0x00, 0xE2, 0x85, 0xBC, 0x00, 0xE2, 0x85, 0xBD, 0x00, 0xE2, 0x85, 0xBE, 0x00, 0xE2, 0x85, 0xBF, 0x00, 0xE2, 0x86, 0x84, 0x00, 0xE2, 0x93, 0x90, 0x00, 0xE2, 0x93, 0x91, 0x00, 0xE2, 0x93, 0x92, 0x00, 0xE2, 0x93, 0x93, 0x00, 0xE2, 0x93, 0x94, 0x00, 0xE2, 0x93, 0x95, 0x00, 0xE2, 0x93, 0x96, 0x00, 0xE2, 0x93, 0x97, 0x00, 0xE2, 0x93, 0x98, 0x00, 0xE2, 0x93, 0x99, 0x00, 0xE2, 0x93, 0x9A, 0x00, 0xE2, 0x93, 0x9B, 0x00, 0xE2, 0x93, 0x9C, 0x00, 0xE2, 0x93, 0x9D, 0x00, 0xE2, 0x93, 0x9E, 0x00, 0xE2, 0x93, 0x9F, 0x00, 0xE2, 0x93, 0xA0, 0x00, 0xE2, 0x93, 0xA1, 0x00, 0xE2, 0x93, 0xA2, 0x00, 0xE2, 0x93, 0xA3, 0x00, 0xE2, 0x93, 0xA4, 0x00, 0xE2, 0x93, 0xA5, 0x00, 0xE2, 0x93, 0xA6, 0x00, 0xE2, 0x93, 0xA7, 0x00, 0xE2, 0x93, 0xA8, 0x00, 0xE2, 0x93, 0xA9, 0x00, 0xE2, 0xB0, 0xB0, 0x00, 0xE2, 0xB0, 0xB1, 0x00, 0xE2, 0xB0, 0xB2, 0x00, 0xE2, 0xB0, 0xB3, 0x00, 0xE2, 0xB0, 0xB4, 0x00, 0xE2, 0xB0, 0xB5, 0x00, 0xE2, 0xB0, 0xB6, 0x00, 0xE2, 0xB0, 0xB7, 0x00, 0xE2, 0xB0, 0xB8, 0x00, 0xE2, 0xB0, 0xB9, 0x00, 0xE2, 0xB0, 0xBA, 0x00, 0xE2, 0xB0, 0xBB, 0x00, 0xE2, 0xB0, 0xBC, 0x00, 0xE2, 0xB0, 0xBD, 0x00, 0xE2, 0xB0, 0xBE, 0x00, 0xE2, 0xB0, 0xBF, 0x00, 0xE2, 0xB1, 0x80, 0x00, 0xE2, 0xB1, 0x81, 0x00, 0xE2, 0xB1, 0x82, 0x00, 0xE2, 0xB1, 0x83, 0x00, 0xE2, 0xB1, 0x84, 0x00, 0xE2, 0xB1, 0x85, 0x00, 0xE2, 0xB1, 0x86, 0x00, 0xE2, 0xB1, 0x87, 0x00, 0xE2, 0xB1, 0x88, 0x00, 0xE2, 0xB1, 0x89, 0x00, 0xE2, 0xB1, 0x8A, 0x00, 0xE2, 0xB1, 0x8B, 0x00, 0xE2, 0xB1, 0x8C, 0x00, 0xE2, 0xB1, 0x8D, 0x00, 0xE2, 0xB1, 0x8E, 0x00, 0xE2, 0xB1, 0x8F, 0x00, 0xE2, 0xB1, 0x90, 0x00, 0xE2, 0xB1, 0x91, 0x00, 0xE2, 0xB1, 0x92, 0x00, 0xE2, 0xB1, 0x93, 0x00, 0xE2, 0xB1, 0x94, 0x00, 0xE2, 0xB1, 0x95, 0x00, 0xE2, 0xB1, 0x96, 0x00, 0xE2, 0xB1, 0x97, 0x00, 0xE2, 0xB1, 0x98, 0x00, 0xE2, 0xB1, 0x99, 0x00, 0xE2, 0xB1, 0x9A, 0x00, 0xE2, 0xB1, 0x9B, 0x00, 0xE2, 0xB1, 0x9C, 0x00, 0xE2, 0xB1, 0x9D, 0x00, 0xE2, 0xB1, 0x9E, 0x00, 0xE2, 0xB1, 0xA1, 0x00, 0xC9, 0xAB, 0x00, 0xE1, 0xB5, 0xBD, 0x00, 0xC9, 0xBD, 0x00, 0xE2, 0xB1, 0xA8, 0x00, 0xE2, 0xB1, 0xAA, 0x00, 0xE2, 0xB1, 0xAC, 0x00, 0xC9, 0x91, 0x00, 0xC9, 0xB1, 0x00, 0xC9, 0x90, 0x00, 0xC9, 0x92, 0x00, 0xE2, 0xB1, 0xB3, 0x00, 0xE2, 0xB1, 0xB6, 0x00, 0xC8, 0xBF, 0x00, 0xC9, 0x80, 0x00, 0xE2, 0xB2, 0x81, 0x00, 0xE2, 0xB2, 0x83, 0x00, 0xE2, 0xB2, 0x85, 0x00, 0xE2, 0xB2, 0x87, 0x00, 0xE2, 0xB2, 0x89, 0x00, 0xE2, 0xB2, 0x8B, 0x00, 0xE2, 0xB2, 0x8D, 0x00, 0xE2, 0xB2, 0x8F, 0x00, 0xE2, 0xB2, 0x91, 0x00, 0xE2, 0xB2, 0x93, 0x00, 0xE2, 0xB2, 0x95, 0x00, 0xE2, 0xB2, 0x97, 0x00, 0xE2, 0xB2, 0x99, 0x00, 0xE2, 0xB2, 0x9B, 0x00, 0xE2, 0xB2, 0x9D, 0x00, 0xE2, 0xB2, 0x9F, 0x00, 0xE2, 0xB2, 0xA1, 0x00, 0xE2, 0xB2, 0xA3, 0x00, 0xE2, 0xB2, 0xA5, 0x00, 0xE2, 0xB2, 0xA7, 0x00, 0xE2, 0xB2, 0xA9, 0x00, 0xE2, 0xB2, 0xAB, 0x00, 0xE2, 0xB2, 0xAD, 0x00, 0xE2, 0xB2, 0xAF, 0x00, 0xE2, 0xB2, 0xB1, 0x00, 0xE2, 0xB2, 0xB3, 0x00, 0xE2, 0xB2, 0xB5, 0x00, 0xE2, 0xB2, 0xB7, 0x00, 0xE2, 0xB2, 0xB9, 0x00, 0xE2, 0xB2, 0xBB, 0x00, 0xE2, 0xB2, 0xBD, 0x00, 0xE2, 0xB2, 0xBF, 0x00, 0xE2, 0xB3, 0x81, 0x00, 0xE2, 0xB3, 0x83, 0x00, 0xE2, 0xB3, 0x85, 0x00, 0xE2, 0xB3, 0x87, 0x00, 0xE2, 0xB3, 0x89, 0x00, 0xE2, 0xB3, 0x8B, 0x00, 0xE2, 0xB3, 0x8D, 0x00, 0xE2, 0xB3, 0x8F, 0x00, 0xE2, 0xB3, 0x91, 0x00, 0xE2, 0xB3, 0x93, 0x00, 0xE2, 0xB3, 0x95, 0x00, 0xE2, 0xB3, 0x97, 0x00, 0xE2, 0xB3, 0x99, 0x00, 0xE2, 0xB3, 0x9B, 0x00, 0xE2, 0xB3, 0x9D, 0x00, 0xE2, 0xB3, 0x9F, 0x00, 0xE2, 0xB3, 0xA1, 0x00, 0xE2, 0xB3, 0xA3, 0x00, 0xE2, 0xB3, 0xAC, 0x00, 0xE2, 0xB3, 0xAE, 0x00, 0xE2, 0xB3, 0xB3, 0x00, 0xEA, 0x99, 0x81, 0x00, 0xEA, 0x99, 0x83, 0x00, 0xEA, 0x99, 0x85, 0x00, 0xEA, 0x99, 0x87, 0x00, 0xEA, 0x99, 0x89, 0x00, 0xEA, 0x99, 0x8B, 0x00, 0xEA, 0x99, 0x8D, 0x00, 0xEA, 0x99, 0x8F, 0x00, 0xEA, 0x99, 0x91, 0x00, 0xEA, 0x99, 0x93, 0x00, 0xEA, 0x99, 0x95, 0x00, 0xEA, 0x99, 0x97, 0x00, 0xEA, 0x99, 0x99, 0x00, 0xEA, 0x99, 0x9B, 0x00, 0xEA, 0x99, 0x9D, 0x00, 0xEA, 0x99, 0x9F, 0x00, 0xEA, 0x99, 0xA1, 0x00, 0xEA, 0x99, 0xA3, 0x00, 0xEA, 0x99, 0xA5, 0x00, 0xEA, 0x99, 0xA7, 0x00, 0xEA, 0x99, 0xA9, 0x00, 0xEA, 0x99, 0xAB, 0x00, 0xEA, 0x99, 0xAD, 0x00, 0xEA, 0x9A, 0x81, 0x00, 0xEA, 0x9A, 0x83, 0x00, 0xEA, 0x9A, 0x85, 0x00, 0xEA, 0x9A, 0x87, 0x00, 0xEA, 0x9A, 0x89, 0x00, 0xEA, 0x9A, 0x8B, 0x00, 0xEA, 0x9A, 0x8D, 0x00, 0xEA, 0x9A, 0x8F, 0x00, 0xEA, 0x9A, 0x91, 0x00, 0xEA, 0x9A, 0x93, 0x00, 0xEA, 0x9A, 0x95, 0x00, 0xEA, 0x9A, 0x97, 0x00, 0xEA, 0x9A, 0x99, 0x00, 0xEA, 0x9A, 0x9B, 0x00, 0xEA, 0x9C, 0xA3, 0x00, 0xEA, 0x9C, 0xA5, 0x00, 0xEA, 0x9C, 0xA7, 0x00, 0xEA, 0x9C, 0xA9, 0x00, 0xEA, 0x9C, 0xAB, 0x00, 0xEA, 0x9C, 0xAD, 0x00, 0xEA, 0x9C, 0xAF, 0x00, 0xEA, 0x9C, 0xB3, 0x00, 0xEA, 0x9C, 0xB5, 0x00, 0xEA, 0x9C, 0xB7, 0x00, 0xEA, 0x9C, 0xB9, 0x00, 0xEA, 0x9C, 0xBB, 0x00, 0xEA, 0x9C, 0xBD, 0x00, 0xEA, 0x9C, 0xBF, 0x00, 0xEA, 0x9D, 0x81, 0x00, 0xEA, 0x9D, 0x83, 0x00, 0xEA, 0x9D, 0x85, 0x00, 0xEA, 0x9D, 0x87, 0x00, 0xEA, 0x9D, 0x89, 0x00, 0xEA, 0x9D, 0x8B, 0x00, 0xEA, 0x9D, 0x8D, 0x00, 0xEA, 0x9D, 0x8F, 0x00, 0xEA, 0x9D, 0x91, 0x00, 0xEA, 0x9D, 0x93, 0x00, 0xEA, 0x9D, 0x95, 0x00, 0xEA, 0x9D, 0x97, 0x00, 0xEA, 0x9D, 0x99, 0x00, 0xEA, 0x9D, 0x9B, 0x00, 0xEA, 0x9D, 0x9D, 0x00, 0xEA, 0x9D, 0x9F, 0x00, 0xEA, 0x9D, 0xA1, 0x00, 0xEA, 0x9D, 0xA3, 0x00, 0xEA, 0x9D, 0xA5, 0x00, 0xEA, 0x9D, 0xA7, 0x00, 0xEA, 0x9D, 0xA9, 0x00, 0xEA, 0x9D, 0xAB, 0x00, 0xEA, 0x9D, 0xAD, 0x00, 0xEA, 0x9D, 0xAF, 0x00, 0xEA, 0x9D, 0xBA, 0x00, 0xEA, 0x9D, 0xBC, 0x00, 0xE1, 0xB5, 0xB9, 0x00, 0xEA, 0x9D, 0xBF, 0x00, 0xEA, 0x9E, 0x81, 0x00, 0xEA, 0x9E, 0x83, 0x00, 0xEA, 0x9E, 0x85, 0x00, 0xEA, 0x9E, 0x87, 0x00, 0xEA, 0x9E, 0x8C, 0x00, 0xC9, 0xA5, 0x00, 0xEA, 0x9E, 0x91, 0x00, 0xEA, 0x9E, 0x93, 0x00, 0xEA, 0x9E, 0x97, 0x00, 0xEA, 0x9E, 0x99, 0x00, 0xEA, 0x9E, 0x9B, 0x00, 0xEA, 0x9E, 0x9D, 0x00, 0xEA, 0x9E, 0x9F, 0x00, 0xEA, 0x9E, 0xA1, 0x00, 0xEA, 0x9E, 0xA3, 0x00, 0xEA, 0x9E, 0xA5, 0x00, 0xEA, 0x9E, 0xA7, 0x00, 0xEA, 0x9E, 0xA9, 0x00, 0xC9, 0xA6, 0x00, 0xC9, 0x9C, 0x00, 0xC9, 0xA1, 0x00, 0xC9, 0xAC, 0x00, 0xC9, 0xAA, 0x00, 0xCA, 0x9E, 0x00, 0xCA, 0x87, 0x00, 0xCA, 0x9D, 0x00, 0xEA, 0xAD, 0x93, 0x00, 0xEA, 0x9E, 0xB5, 0x00, 0xEA, 0x9E, 0xB7, 0x00, 0xE1, 0x8E, 0xA0, 0x00, 0xE1, 0x8E, 0xA1, 0x00, 0xE1, 0x8E, 0xA2, 0x00, 0xE1, 0x8E, 0xA3, 0x00, 0xE1, 0x8E, 0xA4, 0x00, 0xE1, 0x8E, 0xA5, 0x00, 0xE1, 0x8E, 0xA6, 0x00, 0xE1, 0x8E, 0xA7, 0x00, 0xE1, 0x8E, 0xA8, 0x00, 0xE1, 0x8E, 0xA9, 0x00, 0xE1, 0x8E, 0xAA, 0x00, 0xE1, 0x8E, 0xAB, 0x00, 0xE1, 0x8E, 0xAC, 0x00, 0xE1, 0x8E, 0xAD, 0x00, 0xE1, 0x8E, 0xAE, 0x00, 0xE1, 0x8E, 0xAF, 0x00, 0xE1, 0x8E, 0xB0, 0x00, 0xE1, 0x8E, 0xB1, 0x00, 0xE1, 0x8E, 0xB2, 0x00, 0xE1, 0x8E, 0xB3, 0x00, 0xE1, 0x8E, 0xB4, 0x00, 0xE1, 0x8E, 0xB5, 0x00, 0xE1, 0x8E, 0xB6, 0x00, 0xE1, 0x8E, 0xB7, 0x00, 0xE1, 0x8E, 0xB8, 0x00, 0xE1, 0x8E, 0xB9, 0x00, 0xE1, 0x8E, 0xBA, 0x00, 0xE1, 0x8E, 0xBB, 0x00, 0xE1, 0x8E, 0xBC, 0x00, 0xE1, 0x8E, 0xBD, 0x00, 0xE1, 0x8E, 0xBE, 0x00, 0xE1, 0x8E, 0xBF, 0x00, 0xE1, 0x8F, 0x80, 0x00, 0xE1, 0x8F, 0x81, 0x00, 0xE1, 0x8F, 0x82, 0x00, 0xE1, 0x8F, 0x83, 0x00, 0xE1, 0x8F, 0x84, 0x00, 0xE1, 0x8F, 0x85, 0x00, 0xE1, 0x8F, 0x86, 0x00, 0xE1, 0x8F, 0x87, 0x00, 0xE1, 0x8F, 0x88, 0x00, 0xE1, 0x8F, 0x89, 0x00, 0xE1, 0x8F, 0x8A, 0x00, 0xE1, 0x8F, 0x8B, 0x00, 0xE1, 0x8F, 0x8C, 0x00, 0xE1, 0x8F, 0x8D, 0x00, 0xE1, 0x8F, 0x8E, 0x00, 0xE1, 0x8F, 0x8F, 0x00, 0xE1, 0x8F, 0x90, 0x00, 0xE1, 0x8F, 0x91, 0x00, 0xE1, 0x8F, 0x92, 0x00, 0xE1, 0x8F, 0x93, 0x00, 0xE1, 0x8F, 0x94, 0x00, 0xE1, 0x8F, 0x95, 0x00, 0xE1, 0x8F, 0x96, 0x00, 0xE1, 0x8F, 0x97, 0x00, 0xE1, 0x8F, 0x98, 0x00, 0xE1, 0x8F, 0x99, 0x00, 0xE1, 0x8F, 0x9A, 0x00, 0xE1, 0x8F, 0x9B, 0x00, 0xE1, 0x8F, 0x9C, 0x00, 0xE1, 0x8F, 0x9D, 0x00, 0xE1, 0x8F, 0x9E, 0x00, 0xE1, 0x8F, 0x9F, 0x00, 0xE1, 0x8F, 0xA0, 0x00, 0xE1, 0x8F, 0xA1, 0x00, 0xE1, 0x8F, 0xA2, 0x00, 0xE1, 0x8F, 0xA3, 0x00, 0xE1, 0x8F, 0xA4, 0x00, 0xE1, 0x8F, 0xA5, 0x00, 0xE1, 0x8F, 0xA6, 0x00, 0xE1, 0x8F, 0xA7, 0x00, 0xE1, 0x8F, 0xA8, 0x00, 0xE1, 0x8F, 0xA9, 0x00, 0xE1, 0x8F, 0xAA, 0x00, 0xE1, 0x8F, 0xAB, 0x00, 0xE1, 0x8F, 0xAC, 0x00, 0xE1, 0x8F, 0xAD, 0x00, 0xE1, 0x8F, 0xAE, 0x00, 0xE1, 0x8F, 0xAF, 0x00, 0x66, 0x66, 0x00, 0x66, 0x69, 0x00, 0x66, 0x6C, 0x00, 0x66, 0x66, 0x69, 0x00, 0x66, 0x66, 0x6C, 0x00, 0x73, 0x74, 0x00, 0x73, 0x74, 0x00, 0xD5, 0xB4, 0xD5, 0xB6, 0x00, 0xD5, 0xB4, 0xD5, 0xA5, 0x00, 0xD5, 0xB4, 0xD5, 0xAB, 0x00, 0xD5, 0xBE, 0xD5, 0xB6, 0x00, 0xD5, 0xB4, 0xD5, 0xAD, 0x00, 0xEF, 0xBD, 0x81, 0x00, 0xEF, 0xBD, 0x82, 0x00, 0xEF, 0xBD, 0x83, 0x00, 0xEF, 0xBD, 0x84, 0x00, 0xEF, 0xBD, 0x85, 0x00, 0xEF, 0xBD, 0x86, 0x00, 0xEF, 0xBD, 0x87, 0x00, 0xEF, 0xBD, 0x88, 0x00, 0xEF, 0xBD, 0x89, 0x00, 0xEF, 0xBD, 0x8A, 0x00, 0xEF, 0xBD, 0x8B, 0x00, 0xEF, 0xBD, 0x8C, 0x00, 0xEF, 0xBD, 0x8D, 0x00, 0xEF, 0xBD, 0x8E, 0x00, 0xEF, 0xBD, 0x8F, 0x00, 0xEF, 0xBD, 0x90, 0x00, 0xEF, 0xBD, 0x91, 0x00, 0xEF, 0xBD, 0x92, 0x00, 0xEF, 0xBD, 0x93, 0x00, 0xEF, 0xBD, 0x94, 0x00, 0xEF, 0xBD, 0x95, 0x00, 0xEF, 0xBD, 0x96, 0x00, 0xEF, 0xBD, 0x97, 0x00, 0xEF, 0xBD, 0x98, 0x00, 0xEF, 0xBD, 0x99, 0x00, 0xEF, 0xBD, 0x9A, 0x00, }; RediSearch-1.2.2/src/dep/libnu/gen/_tolower.c000066400000000000000000001667211364126773500207770ustar00rootroot00000000000000/* Automatically generated file (mph.py), 1466614871 * * Tag : NU_TOLOWER * Prime : 01000193, * G size : 1304, * Combined length : 5006, * Encoding : UTF-8 */ #include const int16_t NU_TOLOWER_G[] = { 0, 1, 0, 1, -1279, 1, 0, 1, 1, 0, 1, -1277, 1, -1271, 1, -1269, 1, 0, 1, 0, -1267, 0, 1, 0, 1, 1, 1, 1, 0, 1, -1265, 1, 0, -1256, 0, -1254, -1238, -1236, -1220, 1, -1194, 1, 0, 1, -1160, -1153, -1147, -1143, 0, 1, -1135, -1133, -1131, 1, 0, 1, 1, 1, 5, 1, 1, 1, 9, 1, -1129, 3, -1117, 2, -1116, 1, -1115, 1, -1112, 1, -1111, 1, -1110, 1, -1108, 1, -1106, 1, -1103, 1, -1101, 1, -1090, 1, 0, 1, 0, 5, 0, 32, 0, 32, 0, 1, 0, 1, 0, 1, 0, 1, -1052, 1, -1049, 1, -1019, 1, -1016, 1, -1013, 3, -1012, 4, -1010, 1, -1007, 1, -1005, -1000, -999, -998, -997, -996, -995, -994, 0, 3, 0, 2, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 4, 0, 1, 0, 5, 0, 1, 0, 4, -992, 1, -991, 4, -990, 1, -989, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, -985, -984, -982, 1, 0, -981, -980, -979, 0, 1, 0, 1, 0, 1, 0, 1, -978, 2, -977, 1, -976, 1, -975, 1, -974, 1, -973, 1, -972, 2, -971, 1, -970, 3, -969, 2, -968, 1, -966, 1, -964, 1, -963, 1, -962, 2, -961, 1, 0, -949, 0, -904, 0, -902, 0, -900, 0, -898, 0, -896, 0, -894, 0, -893, 0, -892, 0, -891, 0, -890, 0, -889, 0, -888, 0, -887, 0, -881, 0, -879, 0, -878, 0, -877, 0, -876, 0, -875, -874, 1, -873, 1, 0, 1, -872, 1, -871, 2, -870, 14, 0, 24, -869, 24, -866, 1, -865, 1, -864, 1, -863, 4, 14, 1, 25, 1, 29, 1, 49, 1, -862, 2, -861, 1, -860, 2, -859, 2, 0, -858, 0, -856, 0, -854, 0, -853, 0, 0, 0, 0, 0, 0, 0, 0, -852, -849, -848, -847, -846, -845, 0, 0, 1, -844, -843, -842, -841, -840, -839, -838, -837, -836, -834, -832, -831, -830, -828, -826, -824, -822, -821, -820, -819, -818, -817, -816, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -815, -814, -813, -812, -811, -810, -809, -808, -807, -804, -798, -797, -796, -795, -793, -790, -788, -785, -783, -782, -778, -777, -776, -775, 9, 42, 45, 46, 76, 76, 94, 97, -774, 104, 125, 126, -773, -772, -770, -768, 185, 186, 191, -767, 197, 208, 224, 236, 5, 6, 56, 56, 60, 60, 71, 81, -766, -765, -764, -763, -762, -761, -760, -759, 31, 74, 80, 85, 88, 92, 92, 92, -758, -757, -756, -754, -753, -752, -751, -750, 0, 0, 0, 0, 0, 0, 0, 0, -749, -748, -747, 0, -746, -745, -744, -743, 1, 1, 1, 4, 2, -742, 16, 18, 0, -741, 0, 0, 0, -740, -739, 0, 0, -738, -737, -734, -731, -730, 0, -728, 0, 0, 0, 0, 0, -725, 0, 0, -724, -723, 0, 0, 0, 0, 0, 0, -722, 0, -721, -720, -719, -718, -717, -716, -715, -714, -713, -712, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -711, 0, -710, 0, -709, 0, -708, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -707, 0, 0, 0, -706, -705, -704, -703, 1, -702, -701, 1, -700, 1, 1, -699, 1, 1, 1, -698, 0, -697, 0, -696, 0, -695, 0, -694, 0, -693, 0, -692, 0, -691, 0, -690, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -689, -688, -687, -686, -685, -684, -683, -682, -681, 3, -680, 2, -679, 2, -678, -677, -676, -675, -674, -673, 1, -672, -671, -670, -669, -668, -667, -666, -665, -664, -663, -662, -661, -660, -659, -658, -657, -656, -655, -654, -653, 8, -652, 8, -651, 40, -650, -649, -648, 4, -647, 64, -646, 72, -645, 72, -644, 56, -643, 56, -642, 65, -641, 65, 8, -640, -639, -638, 0, 0, 8, -637, -636, -635, -634, -633, 0, -632, 0, -631, -630, -629, -628, -627, -626, -625, -624, -623, -622, 64, -621, 64, -620, 64, -619, 64, -618, -617, 0, -616, 0, -615, -614, -613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -612, 0, -611, 0, -610, 0, -609, 0, -608, 0, -607, 0, -606, 0, -605, 0, -604, 0, -603, 0, -602, 0, -601, 0, -600, 0, -599, 0, -598, 0, -597, 0, 1, 0, -596, 0, -595, 0, -594, -593, 1, 0, -591, 0, 1, -589, -587, 0, 2, 0, -585, 0, 4, 0, 14, 0, 19, 0, 20, 0, 16, 0, 17, 0, -584, 0, -583, 0, -582, 0, -581, 0, -580, 0, -578, 0, -571, 0, -569, -568, -567, -566, -565, 0, 4, -563, 4, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, -562, 0, -561, 0, 0, -560, -559, 0, 0, -558, 0, -557, 0, -556, 0, -554, 0, -553, 0, -552, 0, -551, 0, -550, 0, -549, 0, -548, 0, -546, 0, -544, 0, -543, 0, -542, 0, 0, 0, 0, 0, -541, 0, -540, 0, -539, 0, -538, 0, -537, 0, -536, 0, -535, 0, -534, -533, -532, -531, -530, -529, -528, -527, -526, -525, -524, -523, -522, -521, -520, -519, -518, -517, -516, -515, -514, -513, -511, -509, -507, -505, -503, -501, -499, -498, -497, -495, -493, 0, 32, -491, 32, 0, -489, 0, -487, 0, -485, 0, -484, 0, -481, 0, -479, -478, 40, -477, 40, -476, 41, -474, 41, -472, 33, -471, 33, -470, 51, -468, 53, 0, -466, 0, -464, 0, -463, 0, -462, 0, -461, 0, -459, 0, -457, 0, -456, 0, -455, 0, -453, 0, -452, 0, -451, 0, -450, 0, -449, 0, -447, 0, -444, 0, 34, 0, 33, 0, 33, 0, 79, 0, 92, 0, 92, 0, 126, 0, 167, -439, 4, -438, 4, -437, 8, -436, 8, -432, 26, -428, 38, -421, 40, -419, 40, 47, 8, 73, 423, 73, 76, 89, 105, 132, 241, 305, 306, 317, 318, 324, 324, 244, 9, 459, 8, -416, 142, -415, 44, -412, -410, 0, -409, 0, -405, -403, -395, 1, 64, 9, 65, 1, 64, 4, 64, -393, 81, 128, 65, -390, 81, -389, 80, 1, 64, 1, 64, 145, 76, 159, 83, 213, 84, 379, 87, 377, 107, 377, 109, -388, -387, -386, -385, 0, 0, 0, -383, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 2, 64, -375, 80, -371, 64, -369, 80, -359, 80, 0, -357, -355, 80, -353, 14, -343, 32, 0, -339, 0, 37, -335, 112, -330, 197, -327, 193, -320, 200, -315, 174, 288, 34, 0, 0, -308, -303, 236, 201, 358, -285, 544, 1, -254, 2, 544, 33, 548, 32, 32, 32, 32, 32, 0, 17, -252, -250, 14, 1, 0, 17, 4, 1, 37, 6, 9, 2, -232, 8, 21, 40, 32, -231, 39, 40, 41, -230, -228, 86, -226, 1, -152, 227, -143, 6, }; const size_t NU_TOLOWER_G_SIZE = sizeof(NU_TOLOWER_G) / sizeof(*NU_TOLOWER_G); /* codepoints */ const uint32_t NU_TOLOWER_VALUES_C[] = { 0x01E908, 0x001E92, 0x001E90, 0x01E90A, 0x000533, 0x001E94, 0x00054A, 0x000548, 0x01E912, 0x00054C, 0x00004D, 0x000055, 0x00050C, 0x00054E, 0x00050E, 0x001E9E, 0x000520, 0x001EA2, 0x01E91A, 0x000522, 0x001EA0, 0x001EA4, 0x000508, 0x001EA6, 0x000512, 0x000510, 0x000056, 0x000057, 0x001E8C, 0x00004C, 0x001E8E, 0x000516, 0x01E90C, 0x001EB0, 0x000532, 0x001EB2, 0x000059, 0x001EB4, 0x000058, 0x001EB6, 0x000541, 0x001EB8, 0x000543, 0x001EBA, 0x000518, 0x001EBC, 0x00051A, 0x001EBE, 0x001EC4, 0x001EC0, 0x00005A, 0x001EC2, 0x01E91B, 0x000054, 0x01E910, 0x001EC6, 0x001ECC, 0x000555, 0x000553, 0x001ECA, 0x01E914, 0x001EC8, 0x01E916, 0x001ECE, 0x000551, 0x001ED2, 0x001ED0, 0x000514, 0x01E91D, 0x000534, 0x001ED4, 0x001ED6, 0x00051E, 0x001ED8, 0x01041B, 0x001EDA, 0x00004A, 0x001EDC, 0x00004B, 0x001EDE, 0x01E919, 0x001EE0, 0x01E91E, 0x001EE2, 0x000535, 0x001EE4, 0x01E91F, 0x001EE6, 0x00FF28, 0x001EE8, 0x000053, 0x00FF2A, 0x00FF2C, 0x00FF2D, 0x00FF2E, 0x00FF2F, 0x000531, 0x01E920, 0x000536, 0x001EF2, 0x001EF0, 0x001EF4, 0x000537, 0x001EF6, 0x01041A, 0x001EF8, 0x00FF38, 0x001EFA, 0x010419, 0x001EFC, 0x010418, 0x001EFE, 0x000048, 0x000049, 0x00004E, 0x00004F, 0x010423, 0x01E91C, 0x00FF24, 0x00FF26, 0x000052, 0x0118A2, 0x0118A0, 0x01041D, 0x000051, 0x0118A4, 0x000050, 0x0118A6, 0x01E90E, 0x0118A8, 0x000047, 0x0118AA, 0x0118AE, 0x0118AC, 0x00054B, 0x01E903, 0x0118B2, 0x0118B0, 0x01041E, 0x01041F, 0x001F39, 0x0118B4, 0x001F2D, 0x0118B6, 0x000526, 0x0118B8, 0x00FF32, 0x0118BA, 0x0118BE, 0x0118BC, 0x000046, 0x001F2F, 0x001F08, 0x001F28, 0x001F2C, 0x001F0A, 0x001F0C, 0x001F0D, 0x001F0E, 0x001F0F, 0x010422, 0x01E921, 0x010402, 0x00051C, 0x001F3C, 0x000045, 0x001F3F, 0x00053B, 0x000044, 0x010421, 0x001F18, 0x001F3A, 0x001F3E, 0x010420, 0x001F38, 0x001F3B, 0x010424, 0x010425, 0x010426, 0x00053A, 0x010401, 0x01041C, 0x010400, 0x010427, 0x001F49, 0x001F48, 0x001F4B, 0x001F4A, 0x0104B5, 0x001F4C, 0x000547, 0x001FBB, 0x0000C4, 0x0000C0, 0x000545, 0x0000C2, 0x0000DC, 0x0000CB, 0x0000DE, 0x0000C6, 0x001F59, 0x0000C8, 0x001F5B, 0x0000CA, 0x001F5D, 0x0000CC, 0x001F5F, 0x0000CE, 0x0000C9, 0x0000D0, 0x0000CF, 0x0000D2, 0x001F6D, 0x0000D4, 0x0000D8, 0x0000D6, 0x0000DA, 0x001F68, 0x001F6B, 0x001F6A, 0x001F69, 0x001F6C, 0x001F6F, 0x001F6E, 0x0104B1, 0x001F29, 0x0104B7, 0x001F2B, 0x00FF3A, 0x0004AC, 0x0004A8, 0x001F3D, 0x01040A, 0x0104B0, 0x01040B, 0x0104B2, 0x001F2A, 0x0104B4, 0x010409, 0x0104B6, 0x0104BA, 0x0104B8, 0x001F8A, 0x01E902, 0x0104BE, 0x0104B3, 0x0104BC, 0x000191, 0x000042, 0x0004B8, 0x000043, 0x000181, 0x0000CD, 0x00FF25, 0x000041, 0x01E90B, 0x001FBC, 0x000100, 0x01040F, 0x000102, 0x001F9C, 0x000104, 0x001F9E, 0x000106, 0x001FD8, 0x000108, 0x001FDA, 0x00010A, 0x001F98, 0x00010C, 0x001F9A, 0x00010E, 0x001FA9, 0x000110, 0x0024BB, 0x000112, 0x001F8B, 0x000114, 0x01040E, 0x000116, 0x01040C, 0x001FAD, 0x001FAB, 0x00011A, 0x000190, 0x000118, 0x001FAF, 0x00FF23, 0x001FB8, 0x000122, 0x000120, 0x001FBA, 0x001F1A, 0x01040D, 0x000124, 0x000126, 0x001FF8, 0x000128, 0x001FFA, 0x00012A, 0x001FFC, 0x00012C, 0x001F1C, 0x00012E, 0x001F89, 0x000132, 0x001F8E, 0x001F1D, 0x000130, 0x000134, 0x001F8F, 0x000136, 0x001FE8, 0x001FEC, 0x001F1B, 0x00FF22, 0x00011C, 0x001F2E, 0x00011E, 0x00FF35, 0x0010B0, 0x0010B1, 0x0010B6, 0x0010B7, 0x001F8D, 0x00FF30, 0x00FF37, 0x00FF36, 0x001FD9, 0x00FF31, 0x001FDB, 0x00014A, 0x00FF34, 0x00014C, 0x00FF33, 0x00014E, 0x000154, 0x000150, 0x000496, 0x000152, 0x001FEA, 0x001F8C, 0x001FE9, 0x000156, 0x00015C, 0x001FA8, 0x001FAA, 0x00015A, 0x001FAC, 0x000158, 0x001FAE, 0x00015E, 0x001FEB, 0x000160, 0x002C2D, 0x000162, 0x002C2E, 0x000164, 0x002C29, 0x000166, 0x00016A, 0x000168, 0x001FFB, 0x001FF9, 0x0010B2, 0x00016C, 0x0010B3, 0x00016E, 0x002C2B, 0x000170, 0x002C25, 0x000172, 0x0010A3, 0x000174, 0x002C27, 0x000176, 0x0010C1, 0x000178, 0x0010C3, 0x0010C2, 0x0010C0, 0x0010C7, 0x001FCC, 0x000193, 0x001FC8, 0x001FC9, 0x001FCA, 0x001FCB, 0x002C1D, 0x002C1F, 0x00018F, 0x000186, 0x002C1B, 0x000187, 0x00052C, 0x00018A, 0x00018E, 0x0010C5, 0x0010C4, 0x00018B, 0x0001B7, 0x0001B1, 0x002CED, 0x000182, 0x00052E, 0x000184, 0x000194, 0x000196, 0x000528, 0x00052A, 0x0001B2, 0x002CEB, 0x0001B5, 0x0010B4, 0x01E90D, 0x01E90F, 0x0010A2, 0x0001A0, 0x01E915, 0x0001A2, 0x01E917, 0x0001A4, 0x0001B3, 0x0001A6, 0x0001A9, 0x0010A1, 0x0010B5, 0x01E911, 0x000189, 0x0010A0, 0x0001AF, 0x01E913, 0x0010A4, 0x0010A5, 0x0010A6, 0x001F9D, 0x001F9F, 0x001F99, 0x001F9B, 0x0010A7, 0x000198, 0x0001B8, 0x0001BC, 0x002CAC, 0x00019C, 0x00019D, 0x002CAE, 0x00019F, 0x002CA8, 0x002CAA, 0x002CA4, 0x002CA6, 0x002CA0, 0x0001C4, 0x002CA2, 0x002CBC, 0x002CBE, 0x0001C8, 0x002CB8, 0x0001CA, 0x002CBA, 0x002CB4, 0x002CB6, 0x002CB0, 0x0001D1, 0x002CB2, 0x0001D3, 0x010CAD, 0x0001D5, 0x010CAF, 0x010CA9, 0x010CAB, 0x0001D9, 0x010CA5, 0x0001DB, 0x010CA7, 0x010CA1, 0x010CA3, 0x002C9C, 0x0001DE, 0x002C9E, 0x0001E2, 0x0001E0, 0x002C98, 0x002C9A, 0x0001E4, 0x002C94, 0x0001E6, 0x002C96, 0x0001E8, 0x010CB1, 0x0001EA, 0x010C8C, 0x0001EC, 0x010C8D, 0x0001EE, 0x010C8E, 0x010C8F, 0x010C88, 0x0001F2, 0x010C89, 0x0001F4, 0x010C8A, 0x0001F6, 0x010C8B, 0x0001F8, 0x010C84, 0x0001FA, 0x010C85, 0x0001FC, 0x010C86, 0x0001FE, 0x010C87, 0x010C80, 0x010C81, 0x010C82, 0x010C83, 0x010C9C, 0x010C9D, 0x010C9E, 0x010C9F, 0x010C98, 0x010C99, 0x010C9A, 0x010C9B, 0x010C94, 0x010C95, 0x010C96, 0x010C97, 0x010C90, 0x010C91, 0x010C92, 0x010C93, 0x00A68C, 0x00A68E, 0x00A688, 0x00A68A, 0x00A684, 0x00A686, 0x00A680, 0x00A682, 0x00A698, 0x00A69A, 0x00A694, 0x000222, 0x00A696, 0x000226, 0x00A690, 0x00A692, 0x00A76C, 0x00A76E, 0x00A768, 0x00A76A, 0x00A764, 0x000224, 0x00A766, 0x00A760, 0x00A762, 0x00A77D, 0x00A77E, 0x00A779, 0x00A77B, 0x000245, 0x000232, 0x00A740, 0x000241, 0x00A742, 0x000243, 0x00A75C, 0x00022A, 0x00A75E, 0x00023A, 0x000228, 0x00022C, 0x00022E, 0x00023E, 0x000244, 0x00A758, 0x000246, 0x00A75A, 0x00A754, 0x00A756, 0x00A750, 0x00A752, 0x000220, 0x000248, 0x00A73C, 0x00024A, 0x00023D, 0x00024C, 0x00A738, 0x00024E, 0x00023B, 0x00A734, 0x00A736, 0x000230, 0x00020C, 0x00020E, 0x000208, 0x00020A, 0x000204, 0x000206, 0x000200, 0x000202, 0x00021C, 0x00021E, 0x000218, 0x00021A, 0x000214, 0x000216, 0x000210, 0x000212, 0x00A7AC, 0x00A7AD, 0x00A7AE, 0x00A7A8, 0x00A7AA, 0x00A7AB, 0x0013ED, 0x0013EF, 0x0013E9, 0x0013EB, 0x0013E4, 0x0013E5, 0x0013E6, 0x0013E7, 0x0013E0, 0x0013E1, 0x0013E2, 0x0013E3, 0x00A7B4, 0x00A7B6, 0x00A7B0, 0x00A7B1, 0x00A7B2, 0x00A7B3, 0x0013F4, 0x0013F0, 0x0013F1, 0x0013F2, 0x0013CD, 0x0013CF, 0x0013C9, 0x0013CB, 0x0013C5, 0x0013C7, 0x0013C1, 0x0013C3, 0x0013DC, 0x0013DD, 0x0013DF, 0x0013D9, 0x0013DB, 0x0013D4, 0x0013D5, 0x0013D6, 0x0013D7, 0x0013D0, 0x0013D1, 0x0013D2, 0x0013D3, 0x0013AC, 0x0013AD, 0x0013AE, 0x0013AF, 0x0013A8, 0x0013A9, 0x0013AA, 0x0013AB, 0x0013A4, 0x0013A5, 0x0013A6, 0x0013A0, 0x0013A1, 0x0013A2, 0x0013A3, 0x0013BC, 0x0013BD, 0x0013BF, 0x0013B9, 0x0013BB, 0x0013B4, 0x0013B5, 0x0013B6, 0x0013B7, 0x0013B0, 0x0013B1, 0x0013B2, 0x0013B3, 0x0003EC, 0x0003EE, 0x0003E8, 0x0003EA, 0x0003E4, 0x0003E6, 0x0003E0, 0x0003E2, 0x00216C, 0x002168, 0x00216B, 0x002165, 0x002166, 0x002160, 0x002161, 0x002162, 0x002163, 0x0003CF, 0x0003DC, 0x0003DE, 0x0003D8, 0x0003DA, 0x0003A8, 0x0003A9, 0x0003AA, 0x0003AB, 0x0003A4, 0x0003A5, 0x0003A6, 0x0003A7, 0x0003A0, 0x0003A1, 0x0003A3, 0x00212A, 0x00212B, 0x002126, 0x002164, 0x002167, 0x00038C, 0x002169, 0x00038E, 0x00038F, 0x00216A, 0x00216D, 0x000388, 0x00216F, 0x00216E, 0x000389, 0x00038A, 0x0010CD, 0x000386, 0x002132, 0x00039E, 0x000394, 0x000395, 0x000396, 0x000397, 0x000391, 0x000392, 0x000393, 0x0010AC, 0x0010AD, 0x0010AE, 0x0010AF, 0x0010A8, 0x002183, 0x0010A9, 0x0010AA, 0x0010AB, 0x0010BC, 0x0010BD, 0x0010BE, 0x0010BF, 0x0010B8, 0x0010B9, 0x0010BA, 0x0010BB, 0x010408, 0x010404, 0x00A640, 0x010405, 0x00A642, 0x010406, 0x010407, 0x010403, 0x010414, 0x010415, 0x010416, 0x010417, 0x00A646, 0x00A65A, 0x00A65C, 0x010410, 0x010411, 0x00A65E, 0x010412, 0x00A650, 0x00A652, 0x010413, 0x00A654, 0x0024CC, 0x00A656, 0x00A644, 0x0024CD, 0x00A658, 0x0024CE, 0x0024CF, 0x0024C8, 0x0024C9, 0x00A64A, 0x00A648, 0x00A660, 0x00A64C, 0x00A662, 0x0024CA, 0x00A664, 0x00A64E, 0x0024CB, 0x0024C4, 0x0024C5, 0x0024C6, 0x0024C7, 0x0024C0, 0x0024C1, 0x0024C2, 0x0024C3, 0x0104CC, 0x0104CD, 0x0104CE, 0x0104CF, 0x0104C8, 0x0104C9, 0x0104CA, 0x00A666, 0x0104CB, 0x00A668, 0x0104C4, 0x00A66A, 0x0104C5, 0x00A66C, 0x0104C6, 0x0104C7, 0x0104C0, 0x002C01, 0x0104C1, 0x002C03, 0x0104C2, 0x0104C3, 0x0024BC, 0x0024BD, 0x0024BE, 0x0024BF, 0x0024B8, 0x0024B9, 0x0024BA, 0x0024B6, 0x0024B7, 0x0104D0, 0x0104D1, 0x0104D2, 0x002C15, 0x002C13, 0x0104D3, 0x001E6C, 0x001E6E, 0x002C17, 0x001E68, 0x002C11, 0x001E6A, 0x0104BD, 0x0104BF, 0x0104B9, 0x0104BB, 0x0000C5, 0x0000C7, 0x0000C1, 0x0000C3, 0x002C23, 0x002C21, 0x0000DD, 0x0000D9, 0x0000DB, 0x0000D5, 0x0000D1, 0x0000D3, 0x001E5C, 0x001E5E, 0x001E58, 0x001E5A, 0x001E54, 0x00FF27, 0x001E56, 0x000372, 0x000370, 0x00FF2B, 0x000376, 0x00FF29, 0x001E50, 0x001E52, 0x001E2C, 0x001E2E, 0x001E28, 0x001E2A, 0x001E24, 0x001E26, 0x00037F, 0x001E20, 0x002C00, 0x001E22, 0x002C02, 0x001E3C, 0x002C6D, 0x001E3E, 0x002C6E, 0x001E38, 0x002C6F, 0x002C69, 0x002C06, 0x002C1A, 0x002C1C, 0x00039D, 0x00039C, 0x002C1E, 0x002C70, 0x002C10, 0x002C12, 0x002C72, 0x002C14, 0x002C75, 0x002C16, 0x002C04, 0x000399, 0x002C18, 0x00039B, 0x00039A, 0x000398, 0x00039F, 0x002C0A, 0x002C08, 0x002C20, 0x002C0C, 0x002C22, 0x002C62, 0x002C24, 0x002C0E, 0x002C60, 0x002C63, 0x010CA0, 0x010CA8, 0x010CA2, 0x010CAA, 0x002C64, 0x010CA4, 0x002C67, 0x010CA6, 0x010CB0, 0x002C7F, 0x010CB2, 0x001F0B, 0x001E3A, 0x001F09, 0x002C26, 0x000197, 0x002C28, 0x010CAC, 0x002C2A, 0x002CDC, 0x002C2C, 0x010CAE, 0x002C6B, 0x002C7E, 0x0118AD, 0x0118AF, 0x0118A9, 0x0118AB, 0x002CD8, 0x0118A5, 0x002CDA, 0x0118A7, 0x0118A1, 0x0118A3, 0x0118BD, 0x0118BF, 0x0118B9, 0x0118BB, 0x0118B5, 0x0118B7, 0x0118B1, 0x0118B3, 0x001EEC, 0x00017D, 0x001EEE, 0x000179, 0x002C07, 0x001EEA, 0x00017B, 0x002C19, 0x002C05, 0x002CD4, 0x000145, 0x000147, 0x000141, 0x000143, 0x002CDE, 0x001EAC, 0x00013D, 0x001EAE, 0x00013F, 0x001EA8, 0x000139, 0x001EAA, 0x002C80, 0x002C88, 0x002C82, 0x002C8A, 0x00013B, 0x002C84, 0x00042D, 0x002C86, 0x002C90, 0x00042F, 0x002C92, 0x000429, 0x00042B, 0x0003F4, 0x0003F7, 0x000425, 0x0003F9, 0x002C8C, 0x000427, 0x0003FA, 0x0003FD, 0x002C8E, 0x0003FF, 0x0003FE, 0x00053E, 0x000400, 0x00053F, 0x000402, 0x002CC0, 0x000404, 0x002CC2, 0x000406, 0x000539, 0x000408, 0x000538, 0x00040A, 0x002CC4, 0x00040C, 0x002CC6, 0x00040E, 0x002CCA, 0x000410, 0x000413, 0x000412, 0x000411, 0x000414, 0x000417, 0x000416, 0x000421, 0x00041A, 0x000418, 0x000423, 0x000415, 0x00041C, 0x002C0B, 0x00041E, 0x00A722, 0x000420, 0x00A726, 0x000422, 0x002CCC, 0x000424, 0x002CCE, 0x000426, 0x002CE0, 0x00042A, 0x00A724, 0x002CE2, 0x000428, 0x00042C, 0x002CC8, 0x00042E, 0x002CD2, 0x002CD0, 0x000549, 0x00A732, 0x00054D, 0x0004D6, 0x00054F, 0x002CD6, 0x0013C0, 0x00A72A, 0x002CF2, 0x00A73A, 0x00A728, 0x00A72C, 0x00A72E, 0x00A73E, 0x00A744, 0x00040D, 0x00A746, 0x00048A, 0x0013C4, 0x0013CC, 0x0013C6, 0x0013CE, 0x01E901, 0x00A748, 0x01E900, 0x00A74A, 0x00040F, 0x00A74C, 0x000409, 0x00A74E, 0x01E906, 0x00040B, 0x01E907, 0x000405, 0x00049C, 0x000407, 0x000401, 0x000403, 0x01E904, 0x01E905, 0x00041D, 0x00041F, 0x000419, 0x000498, 0x0013A7, 0x00049E, 0x0013E8, 0x000460, 0x0013EA, 0x000462, 0x0013EC, 0x000464, 0x0013EE, 0x000466, 0x00041B, 0x000468, 0x0001F7, 0x00046A, 0x0004E8, 0x00046C, 0x0001F1, 0x00046E, 0x000474, 0x0013BA, 0x0013B8, 0x000472, 0x0013BE, 0x000470, 0x0004E4, 0x000476, 0x00053C, 0x00053D, 0x0001CD, 0x00047A, 0x000478, 0x00047C, 0x0013C2, 0x00047E, 0x0004E6, 0x00FF39, 0x0004AA, 0x00A78B, 0x0004D2, 0x00A78D, 0x0004AE, 0x0001CF, 0x0013D8, 0x001E00, 0x0013DA, 0x001E02, 0x001E06, 0x001E04, 0x00048C, 0x00048E, 0x0004B0, 0x001E0A, 0x001E08, 0x0004B2, 0x0004B4, 0x001E0C, 0x0004B6, 0x001E0E, 0x00A790, 0x001E10, 0x00A792, 0x001E12, 0x000492, 0x001E14, 0x00A79A, 0x001E16, 0x001E1A, 0x001E18, 0x000480, 0x0004A2, 0x0004A6, 0x001E1C, 0x0004A0, 0x001E1E, 0x0013C8, 0x0001CB, 0x0013CA, 0x0004BA, 0x0004A4, 0x0004BC, 0x0013DE, 0x00FF21, 0x000490, 0x000494, 0x002C09, 0x0013F3, 0x002C0D, 0x0013F5, 0x002C0F, 0x001F88, 0x00A780, 0x001E30, 0x00A782, 0x001E32, 0x001E36, 0x001E34, 0x00A796, 0x0004BE, 0x0004C1, 0x001F19, 0x0004C3, 0x0001C5, 0x0004C5, 0x00A784, 0x0004C7, 0x00A786, 0x0004C9, 0x001E40, 0x0004CB, 0x001E42, 0x0004CD, 0x001E44, 0x001E48, 0x001E46, 0x001E4A, 0x0004D0, 0x0004D4, 0x0004FE, 0x00A79C, 0x0001C7, 0x00A79E, 0x01E918, 0x00A798, 0x0004D8, 0x01E909, 0x0004DA, 0x001E4C, 0x0004DC, 0x001E4E, 0x0004DE, 0x00A7A0, 0x0004E0, 0x00A7A2, 0x0004E2, 0x00A7A4, 0x0004F8, 0x00A7A6, 0x0004FA, 0x001E62, 0x001E60, 0x00049A, 0x0004EA, 0x001E66, 0x0004EC, 0x001E64, 0x0004EE, 0x001F4D, 0x0004F0, 0x0001D7, 0x0004F2, 0x0001AC, 0x0004F4, 0x0001AE, 0x0004F6, 0x001E74, 0x001E70, 0x001FB9, 0x001E72, 0x0004C0, 0x0004FC, 0x0001A7, 0x001E76, 0x000540, 0x001E78, 0x000542, 0x001E7A, 0x000500, 0x001E7C, 0x000502, 0x001E7E, 0x000524, 0x001E80, 0x000546, 0x001E82, 0x000504, 0x001E84, 0x000506, 0x001E86, 0x00050A, 0x000550, 0x000552, 0x001E8A, 0x000554, 0x001E88, 0x000556, 0x000544, }; /* indexes */ const uint16_t NU_TOLOWER_VALUES_I[] = { 0x0BC6, 0x0C3E, 0x0B9A, 0x0BD0, 0x04FB, 0x0C4C, 0x0540, 0x053A, 0x0BF8, 0x0546, 0x0019, 0x0029, 0x04BF, 0x054C, 0x04C2, 0x0C50, 0x04DD, 0x0C57, 0x0C20, 0x04E0, 0x0C53, 0x0C5B, 0x04B9, 0x0C5F, 0x04C8, 0x04C5, 0x002B, 0x002D, 0x0B92, 0x0017, 0x0B96, 0x04CE, 0x0BDA, 0x0C73, 0x04F8, 0x0C77, 0x0031, 0x0C7B, 0x002F, 0x0C7F, 0x0525, 0x0C83, 0x052B, 0x0C87, 0x04D1, 0x0C8B, 0x04D4, 0x0C8F, 0x0C9B, 0x0C93, 0x0033, 0x0C97, 0x0C25, 0x0027, 0x0BEE, 0x0C9F, 0x0CAB, 0x0561, 0x055B, 0x0CA7, 0x0C02, 0x0CA3, 0x0C0C, 0x0CAF, 0x0555, 0x0CB7, 0x0CB3, 0x04CB, 0x0C2F, 0x04FE, 0x0CBB, 0x0CBF, 0x04DA, 0x0CC3, 0x05EE, 0x0CC7, 0x0013, 0x0CCB, 0x0015, 0x0CCF, 0x0C1B, 0x0CD3, 0x0C34, 0x0CD7, 0x0501, 0x0CDB, 0x0C39, 0x0CDF, 0x12D2, 0x0CE3, 0x0025, 0x12DA, 0x12E2, 0x12E6, 0x12EA, 0x12EE, 0x04F5, 0x0C42, 0x0504, 0x0CF7, 0x0CF3, 0x0CFB, 0x0507, 0x0CFF, 0x05E9, 0x0D03, 0x1312, 0x0D07, 0x05E4, 0x0D0B, 0x05DF, 0x0D0F, 0x000F, 0x0011, 0x001B, 0x001D, 0x0616, 0x0C2A, 0x12C2, 0x12CA, 0x0023, 0x088C, 0x0882, 0x05F8, 0x0021, 0x0896, 0x001F, 0x08A0, 0x0BE4, 0x08AA, 0x000D, 0x08B4, 0x08C8, 0x08BE, 0x0543, 0x0BAD, 0x08DC, 0x08D2, 0x05FD, 0x0602, 0x0D6F, 0x08E6, 0x0D5F, 0x08F0, 0x04E6, 0x08FA, 0x12FA, 0x0904, 0x0918, 0x090E, 0x000B, 0x0D67, 0x0D13, 0x0D4B, 0x0D5B, 0x0D1B, 0x0D23, 0x0D27, 0x0D2B, 0x0D2F, 0x0611, 0x0C47, 0x0571, 0x04D7, 0x0D7B, 0x0009, 0x0D87, 0x0513, 0x0007, 0x060C, 0x0D33, 0x0D73, 0x0D83, 0x0607, 0x0D6B, 0x0D77, 0x061B, 0x0620, 0x0625, 0x0510, 0x056C, 0x05F3, 0x0567, 0x062A, 0x0D8F, 0x0D8B, 0x0D97, 0x0D93, 0x0648, 0x0D9B, 0x0537, 0x0E3F, 0x0041, 0x0035, 0x0531, 0x003B, 0x0086, 0x0056, 0x008C, 0x0047, 0x0DA3, 0x004D, 0x0DA7, 0x0053, 0x0DAB, 0x0059, 0x0DAF, 0x005F, 0x0050, 0x0065, 0x0062, 0x006B, 0x0DC7, 0x0071, 0x007A, 0x0077, 0x0080, 0x0DB3, 0x0DBF, 0x0DBB, 0x0DB7, 0x0DC3, 0x0DCF, 0x0DCB, 0x0634, 0x0D4F, 0x0652, 0x0D57, 0x131A, 0x042F, 0x0429, 0x0D7F, 0x0599, 0x062F, 0x059E, 0x0639, 0x0D53, 0x0643, 0x0594, 0x064D, 0x0661, 0x0657, 0x132A, 0x0BA8, 0x0675, 0x063E, 0x066B, 0x016C, 0x0003, 0x0441, 0x0005, 0x014B, 0x005C, 0x12C6, 0x0001, 0x0BD5, 0x1382, 0x008F, 0x05B2, 0x0092, 0x1352, 0x0095, 0x135A, 0x0098, 0x0E5B, 0x009B, 0x0E63, 0x009E, 0x1342, 0x00A1, 0x134A, 0x00A4, 0x1366, 0x00A7, 0x0EF7, 0x00AA, 0x132E, 0x00AD, 0x05AD, 0x00B0, 0x05A3, 0x1376, 0x136E, 0x00B6, 0x0169, 0x00B3, 0x137E, 0x12BE, 0x0E33, 0x00C2, 0x00BF, 0x0E3B, 0x0D3B, 0x05A8, 0x00C5, 0x00C8, 0x0E7F, 0x00CB, 0x0E87, 0x00CE, 0x138A, 0x00D1, 0x0D43, 0x00D4, 0x1326, 0x00D9, 0x133A, 0x0D47, 0x131E, 0x00DC, 0x133E, 0x00DF, 0x0E6B, 0x0E7B, 0x0D3F, 0x12BA, 0x00B9, 0x0D63, 0x00BC, 0x1306, 0x0723, 0x0727, 0x073B, 0x073F, 0x1336, 0x12F2, 0x130E, 0x130A, 0x0E5F, 0x12F6, 0x0E67, 0x00FA, 0x1302, 0x00FD, 0x12FE, 0x0100, 0x0109, 0x0103, 0x040E, 0x0106, 0x0E73, 0x1332, 0x0E6F, 0x010C, 0x0115, 0x1362, 0x136A, 0x0112, 0x1372, 0x010F, 0x137A, 0x0118, 0x0E77, 0x011B, 0x0FFF, 0x011E, 0x1003, 0x0121, 0x0FEF, 0x0124, 0x012A, 0x0127, 0x0E8B, 0x0E83, 0x072B, 0x012D, 0x072F, 0x0130, 0x0FF7, 0x0133, 0x0FDF, 0x0136, 0x06EF, 0x0139, 0x0FE7, 0x013C, 0x0767, 0x013F, 0x076F, 0x076B, 0x0763, 0x077B, 0x1386, 0x016F, 0x0E47, 0x0E4B, 0x0E4F, 0x0E53, 0x0FBF, 0x0FC7, 0x0166, 0x0154, 0x0FB7, 0x0157, 0x04EF, 0x015D, 0x0163, 0x0777, 0x0773, 0x0160, 0x01AE, 0x01A2, 0x1107, 0x014E, 0x04F2, 0x0151, 0x0172, 0x0175, 0x04E9, 0x04EC, 0x01A5, 0x1103, 0x01AB, 0x0733, 0x0BDF, 0x0BE9, 0x06EB, 0x0187, 0x0C07, 0x018A, 0x0C11, 0x018D, 0x01A8, 0x0190, 0x0196, 0x06E7, 0x0737, 0x0BF3, 0x015A, 0x06E3, 0x019F, 0x0BFD, 0x06F3, 0x06F7, 0x06FB, 0x1356, 0x135E, 0x1346, 0x134E, 0x06FF, 0x017B, 0x01B1, 0x01B4, 0x1093, 0x017E, 0x0181, 0x1097, 0x0184, 0x108B, 0x108F, 0x1083, 0x1087, 0x107B, 0x01B7, 0x107F, 0x10B3, 0x10B7, 0x01C0, 0x10AB, 0x01C3, 0x10AF, 0x10A3, 0x10A7, 0x109B, 0x01CF, 0x109F, 0x01D2, 0x0860, 0x01D5, 0x086A, 0x084C, 0x0856, 0x01DB, 0x0838, 0x01DE, 0x0842, 0x0824, 0x082E, 0x1073, 0x01E1, 0x1077, 0x01E7, 0x01E4, 0x106B, 0x106F, 0x01EA, 0x1063, 0x01ED, 0x1067, 0x01F0, 0x0874, 0x01F3, 0x07BB, 0x01F6, 0x07C0, 0x01F9, 0x07C5, 0x07CA, 0x07A7, 0x01FF, 0x07AC, 0x0202, 0x07B1, 0x0205, 0x07B6, 0x020B, 0x0793, 0x020E, 0x0798, 0x0211, 0x079D, 0x0214, 0x07A2, 0x077F, 0x0784, 0x0789, 0x078E, 0x080B, 0x0810, 0x0815, 0x081A, 0x07F7, 0x07FC, 0x0801, 0x0806, 0x07E3, 0x07E8, 0x07ED, 0x07F2, 0x07CF, 0x07D4, 0x07D9, 0x07DE, 0x1183, 0x1187, 0x117B, 0x117F, 0x1173, 0x1177, 0x116B, 0x116F, 0x119B, 0x119F, 0x1193, 0x024A, 0x1197, 0x0250, 0x118B, 0x118F, 0x1233, 0x1237, 0x122B, 0x122F, 0x1223, 0x024D, 0x1227, 0x121B, 0x121F, 0x1243, 0x1247, 0x123B, 0x123F, 0x027C, 0x0262, 0x11DB, 0x0273, 0x11DF, 0x0276, 0x1213, 0x0256, 0x1217, 0x0265, 0x0253, 0x0259, 0x025C, 0x026F, 0x0279, 0x120B, 0x027F, 0x120F, 0x1203, 0x1207, 0x11FB, 0x11FF, 0x0247, 0x0282, 0x11D3, 0x0285, 0x026C, 0x0288, 0x11CB, 0x028B, 0x0269, 0x11C3, 0x11C7, 0x025F, 0x0229, 0x022C, 0x0223, 0x0226, 0x021D, 0x0220, 0x0217, 0x021A, 0x0241, 0x0244, 0x023B, 0x023E, 0x0235, 0x0238, 0x022F, 0x0232, 0x1298, 0x129B, 0x129E, 0x128E, 0x1292, 0x1295, 0x0A56, 0x0A5E, 0x0A46, 0x0A4E, 0x0A32, 0x0A36, 0x0A3A, 0x0A3E, 0x0A22, 0x0A26, 0x0A2A, 0x0A2E, 0x12AE, 0x12B2, 0x12A1, 0x12A4, 0x12A7, 0x12AA, 0x0A72, 0x0A62, 0x0A66, 0x0A6A, 0x09D6, 0x09DE, 0x09C6, 0x09CE, 0x09B6, 0x09BE, 0x09A6, 0x09AE, 0x0A12, 0x0A16, 0x0A1E, 0x0A06, 0x0A0E, 0x09F2, 0x09F6, 0x09FA, 0x09FE, 0x09E2, 0x09E6, 0x09EA, 0x09EE, 0x0952, 0x0956, 0x095A, 0x095E, 0x0942, 0x0946, 0x094A, 0x094E, 0x0932, 0x0936, 0x093A, 0x0922, 0x0926, 0x092A, 0x092E, 0x0992, 0x0996, 0x099E, 0x0986, 0x098E, 0x0972, 0x0976, 0x097A, 0x097E, 0x0962, 0x0966, 0x096A, 0x096E, 0x031E, 0x0321, 0x0318, 0x031B, 0x0312, 0x0315, 0x030C, 0x030F, 0x0ECF, 0x0EBF, 0x0ECB, 0x0EB3, 0x0EB7, 0x0E9F, 0x0EA3, 0x0EA7, 0x0EAB, 0x02FD, 0x0306, 0x0309, 0x0300, 0x0303, 0x02F1, 0x02F4, 0x02F7, 0x02FA, 0x02E5, 0x02E8, 0x02EB, 0x02EE, 0x02DC, 0x02DF, 0x02E2, 0x0E96, 0x0E98, 0x0E93, 0x0EAF, 0x0EBB, 0x02A6, 0x0EC3, 0x02A9, 0x02AC, 0x0EC7, 0x0ED3, 0x029D, 0x0EDB, 0x0ED7, 0x02A0, 0x02A3, 0x087E, 0x029A, 0x0E9B, 0x02D6, 0x02B8, 0x02BB, 0x02BE, 0x02C1, 0x02AF, 0x02B2, 0x02B5, 0x0713, 0x0717, 0x071B, 0x071F, 0x0703, 0x0EDF, 0x0707, 0x070B, 0x070F, 0x0753, 0x0757, 0x075B, 0x075F, 0x0743, 0x0747, 0x074B, 0x074F, 0x058F, 0x057B, 0x110F, 0x0580, 0x1113, 0x0585, 0x058A, 0x0576, 0x05CB, 0x05D0, 0x05D5, 0x05DA, 0x111B, 0x1143, 0x1147, 0x05B7, 0x05BC, 0x114B, 0x05C1, 0x112F, 0x1133, 0x05C6, 0x1137, 0x0F3B, 0x113B, 0x1117, 0x0F3F, 0x113F, 0x0F43, 0x0F47, 0x0F2B, 0x0F2F, 0x1123, 0x111F, 0x114F, 0x1127, 0x1153, 0x0F33, 0x1157, 0x112B, 0x0F37, 0x0F1B, 0x0F1F, 0x0F23, 0x0F27, 0x0F0B, 0x0F0F, 0x0F13, 0x0F17, 0x06BB, 0x06C0, 0x06C5, 0x06CA, 0x06A7, 0x06AC, 0x06B1, 0x115B, 0x06B6, 0x115F, 0x0693, 0x1163, 0x0698, 0x1167, 0x069D, 0x06A2, 0x067F, 0x0F4F, 0x0684, 0x0F57, 0x0689, 0x068E, 0x0EFB, 0x0EFF, 0x0F03, 0x0F07, 0x0EEB, 0x0EEF, 0x0EF3, 0x0EE3, 0x0EE7, 0x06CF, 0x06D4, 0x06D9, 0x0F9F, 0x0F97, 0x06DE, 0x0B52, 0x0B56, 0x0FA7, 0x0B4A, 0x0F8F, 0x0B4E, 0x0670, 0x067A, 0x065C, 0x0666, 0x0044, 0x004A, 0x0038, 0x003E, 0x0FD7, 0x0FCF, 0x0089, 0x007D, 0x0083, 0x0074, 0x0068, 0x006E, 0x0B32, 0x0B36, 0x0B2A, 0x0B2E, 0x0B22, 0x12CE, 0x0B26, 0x0291, 0x028E, 0x12DE, 0x0294, 0x12D6, 0x0B1A, 0x0B1E, 0x0AD2, 0x0AD6, 0x0ACA, 0x0ACE, 0x0AC2, 0x0AC6, 0x0297, 0x0ABA, 0x0F4B, 0x0ABE, 0x0F53, 0x0AF2, 0x1021, 0x0AF6, 0x1024, 0x0AEA, 0x1027, 0x1019, 0x0F63, 0x0FB3, 0x0FBB, 0x02D3, 0x02D0, 0x0FC3, 0x102A, 0x0F8B, 0x0F93, 0x102D, 0x0F9B, 0x1031, 0x0FA3, 0x0F5B, 0x02C7, 0x0FAB, 0x02CD, 0x02CA, 0x02C4, 0x02D9, 0x0F73, 0x0F6B, 0x0FCB, 0x0F7B, 0x0FD3, 0x100B, 0x0FDB, 0x0F83, 0x1007, 0x100E, 0x081F, 0x0847, 0x0829, 0x0851, 0x1012, 0x0833, 0x1015, 0x083D, 0x086F, 0x1038, 0x0879, 0x0D1F, 0x0AEE, 0x0D17, 0x0FE3, 0x0178, 0x0FEB, 0x085B, 0x0FF3, 0x10F3, 0x0FFB, 0x0865, 0x101D, 0x1035, 0x08C3, 0x08CD, 0x08AF, 0x08B9, 0x10EB, 0x089B, 0x10EF, 0x08A5, 0x0887, 0x0891, 0x0913, 0x091D, 0x08FF, 0x0909, 0x08EB, 0x08F5, 0x08D7, 0x08E1, 0x0CEB, 0x0148, 0x0CEF, 0x0142, 0x0F67, 0x0CE7, 0x0145, 0x0FAF, 0x0F5F, 0x10E3, 0x00F4, 0x00F7, 0x00EE, 0x00F1, 0x10F7, 0x0C6B, 0x00E8, 0x0C6F, 0x00EB, 0x0C63, 0x00E2, 0x0C67, 0x103B, 0x104B, 0x103F, 0x104F, 0x00E5, 0x1043, 0x03C0, 0x1047, 0x105B, 0x03C6, 0x105F, 0x03B4, 0x03BA, 0x0324, 0x0327, 0x03A8, 0x032A, 0x1053, 0x03AE, 0x032D, 0x0330, 0x1057, 0x0336, 0x0333, 0x051C, 0x0339, 0x051F, 0x033F, 0x10BB, 0x0345, 0x10BF, 0x034B, 0x050D, 0x0351, 0x050A, 0x0357, 0x10C3, 0x035D, 0x10C7, 0x0363, 0x10CF, 0x0369, 0x0372, 0x036F, 0x036C, 0x0375, 0x037E, 0x037B, 0x039C, 0x0387, 0x0381, 0x03A2, 0x0378, 0x038D, 0x0F77, 0x0393, 0x11A3, 0x0399, 0x11AB, 0x039F, 0x10D3, 0x03A5, 0x10D7, 0x03AB, 0x10FB, 0x03B7, 0x11A7, 0x10FF, 0x03B1, 0x03BD, 0x10CB, 0x03C3, 0x10DF, 0x10DB, 0x053D, 0x11BF, 0x0549, 0x046E, 0x054F, 0x10E7, 0x09A2, 0x11B3, 0x110B, 0x11CF, 0x11AF, 0x11B7, 0x11BB, 0x11D7, 0x11E3, 0x0360, 0x11E7, 0x03FC, 0x09B2, 0x09D2, 0x09BA, 0x09DA, 0x0BA3, 0x11EB, 0x0B9E, 0x11EF, 0x0366, 0x11F3, 0x0354, 0x11F7, 0x0BBC, 0x035A, 0x0BC1, 0x0348, 0x0417, 0x034E, 0x033C, 0x0342, 0x0BB2, 0x0BB7, 0x0390, 0x0396, 0x0384, 0x0411, 0x093E, 0x041A, 0x0A42, 0x03C9, 0x0A4A, 0x03CC, 0x0A52, 0x03CF, 0x0A5A, 0x03D2, 0x038A, 0x03D5, 0x0208, 0x03D8, 0x0489, 0x03DB, 0x01FC, 0x03DE, 0x03E7, 0x098A, 0x0982, 0x03E4, 0x099A, 0x03E1, 0x0483, 0x03EA, 0x0516, 0x0519, 0x01C9, 0x03F0, 0x03ED, 0x03F3, 0x09AA, 0x03F6, 0x0486, 0x1316, 0x042C, 0x125B, 0x0468, 0x125F, 0x0432, 0x01CC, 0x0A02, 0x0A7A, 0x0A0A, 0x0A7E, 0x0A86, 0x0A82, 0x03FF, 0x0402, 0x0435, 0x0A8E, 0x0A8A, 0x0438, 0x043B, 0x0A92, 0x043E, 0x0A96, 0x1262, 0x0A9A, 0x1266, 0x0A9E, 0x0408, 0x0AA2, 0x1272, 0x0AA6, 0x0AAE, 0x0AAA, 0x03F9, 0x0420, 0x0426, 0x0AB2, 0x041D, 0x0AB6, 0x09C2, 0x01C6, 0x09CA, 0x0444, 0x0423, 0x0447, 0x0A1A, 0x12B6, 0x0405, 0x040B, 0x0F6F, 0x0A6E, 0x0F7F, 0x0A76, 0x0F87, 0x1322, 0x124B, 0x0ADA, 0x124F, 0x0ADE, 0x0AE6, 0x0AE2, 0x126A, 0x044A, 0x0450, 0x0D37, 0x0453, 0x01BA, 0x0456, 0x1253, 0x0459, 0x1257, 0x045C, 0x0AFA, 0x045F, 0x0AFE, 0x0462, 0x0B02, 0x0B0A, 0x0B06, 0x0B0E, 0x0465, 0x046B, 0x04AA, 0x1276, 0x01BD, 0x127A, 0x0C16, 0x126E, 0x0471, 0x0BCB, 0x0474, 0x0B12, 0x0477, 0x0B16, 0x047A, 0x127E, 0x047D, 0x1282, 0x0480, 0x1286, 0x04A1, 0x128A, 0x04A4, 0x0B3E, 0x0B3A, 0x0414, 0x048C, 0x0B46, 0x048F, 0x0B42, 0x0492, 0x0D9F, 0x0495, 0x01D8, 0x0498, 0x0199, 0x049B, 0x019C, 0x049E, 0x0B62, 0x0B5A, 0x0E37, 0x0B5E, 0x044D, 0x04A7, 0x0193, 0x0B66, 0x0522, 0x0B6A, 0x0528, 0x0B6E, 0x04AD, 0x0B72, 0x04B0, 0x0B76, 0x04E3, 0x0B7A, 0x0534, 0x0B7E, 0x04B3, 0x0B82, 0x04B6, 0x0B86, 0x04BC, 0x0552, 0x0558, 0x0B8E, 0x055E, 0x0B8A, 0x0564, 0x052E, }; const uint8_t NU_TOLOWER_COMBINED[] = { 0x00, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64, 0x00, 0x65, 0x00, 0x66, 0x00, 0x67, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6B, 0x00, 0x6C, 0x00, 0x6D, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x70, 0x00, 0x71, 0x00, 0x72, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, 0x76, 0x00, 0x77, 0x00, 0x78, 0x00, 0x79, 0x00, 0x7A, 0x00, 0xC3, 0xA0, 0x00, 0xC3, 0xA1, 0x00, 0xC3, 0xA2, 0x00, 0xC3, 0xA3, 0x00, 0xC3, 0xA4, 0x00, 0xC3, 0xA5, 0x00, 0xC3, 0xA6, 0x00, 0xC3, 0xA7, 0x00, 0xC3, 0xA8, 0x00, 0xC3, 0xA9, 0x00, 0xC3, 0xAA, 0x00, 0xC3, 0xAB, 0x00, 0xC3, 0xAC, 0x00, 0xC3, 0xAD, 0x00, 0xC3, 0xAE, 0x00, 0xC3, 0xAF, 0x00, 0xC3, 0xB0, 0x00, 0xC3, 0xB1, 0x00, 0xC3, 0xB2, 0x00, 0xC3, 0xB3, 0x00, 0xC3, 0xB4, 0x00, 0xC3, 0xB5, 0x00, 0xC3, 0xB6, 0x00, 0xC3, 0xB8, 0x00, 0xC3, 0xB9, 0x00, 0xC3, 0xBA, 0x00, 0xC3, 0xBB, 0x00, 0xC3, 0xBC, 0x00, 0xC3, 0xBD, 0x00, 0xC3, 0xBE, 0x00, 0xC4, 0x81, 0x00, 0xC4, 0x83, 0x00, 0xC4, 0x85, 0x00, 0xC4, 0x87, 0x00, 0xC4, 0x89, 0x00, 0xC4, 0x8B, 0x00, 0xC4, 0x8D, 0x00, 0xC4, 0x8F, 0x00, 0xC4, 0x91, 0x00, 0xC4, 0x93, 0x00, 0xC4, 0x95, 0x00, 0xC4, 0x97, 0x00, 0xC4, 0x99, 0x00, 0xC4, 0x9B, 0x00, 0xC4, 0x9D, 0x00, 0xC4, 0x9F, 0x00, 0xC4, 0xA1, 0x00, 0xC4, 0xA3, 0x00, 0xC4, 0xA5, 0x00, 0xC4, 0xA7, 0x00, 0xC4, 0xA9, 0x00, 0xC4, 0xAB, 0x00, 0xC4, 0xAD, 0x00, 0xC4, 0xAF, 0x00, 0x69, 0x00, 0xC4, 0xB3, 0x00, 0xC4, 0xB5, 0x00, 0xC4, 0xB7, 0x00, 0xC4, 0xBA, 0x00, 0xC4, 0xBC, 0x00, 0xC4, 0xBE, 0x00, 0xC5, 0x80, 0x00, 0xC5, 0x82, 0x00, 0xC5, 0x84, 0x00, 0xC5, 0x86, 0x00, 0xC5, 0x88, 0x00, 0xC5, 0x8B, 0x00, 0xC5, 0x8D, 0x00, 0xC5, 0x8F, 0x00, 0xC5, 0x91, 0x00, 0xC5, 0x93, 0x00, 0xC5, 0x95, 0x00, 0xC5, 0x97, 0x00, 0xC5, 0x99, 0x00, 0xC5, 0x9B, 0x00, 0xC5, 0x9D, 0x00, 0xC5, 0x9F, 0x00, 0xC5, 0xA1, 0x00, 0xC5, 0xA3, 0x00, 0xC5, 0xA5, 0x00, 0xC5, 0xA7, 0x00, 0xC5, 0xA9, 0x00, 0xC5, 0xAB, 0x00, 0xC5, 0xAD, 0x00, 0xC5, 0xAF, 0x00, 0xC5, 0xB1, 0x00, 0xC5, 0xB3, 0x00, 0xC5, 0xB5, 0x00, 0xC5, 0xB7, 0x00, 0xC3, 0xBF, 0x00, 0xC5, 0xBA, 0x00, 0xC5, 0xBC, 0x00, 0xC5, 0xBE, 0x00, 0xC9, 0x93, 0x00, 0xC6, 0x83, 0x00, 0xC6, 0x85, 0x00, 0xC9, 0x94, 0x00, 0xC6, 0x88, 0x00, 0xC9, 0x96, 0x00, 0xC9, 0x97, 0x00, 0xC6, 0x8C, 0x00, 0xC7, 0x9D, 0x00, 0xC9, 0x99, 0x00, 0xC9, 0x9B, 0x00, 0xC6, 0x92, 0x00, 0xC9, 0xA0, 0x00, 0xC9, 0xA3, 0x00, 0xC9, 0xA9, 0x00, 0xC9, 0xA8, 0x00, 0xC6, 0x99, 0x00, 0xC9, 0xAF, 0x00, 0xC9, 0xB2, 0x00, 0xC9, 0xB5, 0x00, 0xC6, 0xA1, 0x00, 0xC6, 0xA3, 0x00, 0xC6, 0xA5, 0x00, 0xCA, 0x80, 0x00, 0xC6, 0xA8, 0x00, 0xCA, 0x83, 0x00, 0xC6, 0xAD, 0x00, 0xCA, 0x88, 0x00, 0xC6, 0xB0, 0x00, 0xCA, 0x8A, 0x00, 0xCA, 0x8B, 0x00, 0xC6, 0xB4, 0x00, 0xC6, 0xB6, 0x00, 0xCA, 0x92, 0x00, 0xC6, 0xB9, 0x00, 0xC6, 0xBD, 0x00, 0xC7, 0x86, 0x00, 0xC7, 0x86, 0x00, 0xC7, 0x89, 0x00, 0xC7, 0x89, 0x00, 0xC7, 0x8C, 0x00, 0xC7, 0x8C, 0x00, 0xC7, 0x8E, 0x00, 0xC7, 0x90, 0x00, 0xC7, 0x92, 0x00, 0xC7, 0x94, 0x00, 0xC7, 0x96, 0x00, 0xC7, 0x98, 0x00, 0xC7, 0x9A, 0x00, 0xC7, 0x9C, 0x00, 0xC7, 0x9F, 0x00, 0xC7, 0xA1, 0x00, 0xC7, 0xA3, 0x00, 0xC7, 0xA5, 0x00, 0xC7, 0xA7, 0x00, 0xC7, 0xA9, 0x00, 0xC7, 0xAB, 0x00, 0xC7, 0xAD, 0x00, 0xC7, 0xAF, 0x00, 0xC7, 0xB3, 0x00, 0xC7, 0xB3, 0x00, 0xC7, 0xB5, 0x00, 0xC6, 0x95, 0x00, 0xC6, 0xBF, 0x00, 0xC7, 0xB9, 0x00, 0xC7, 0xBB, 0x00, 0xC7, 0xBD, 0x00, 0xC7, 0xBF, 0x00, 0xC8, 0x81, 0x00, 0xC8, 0x83, 0x00, 0xC8, 0x85, 0x00, 0xC8, 0x87, 0x00, 0xC8, 0x89, 0x00, 0xC8, 0x8B, 0x00, 0xC8, 0x8D, 0x00, 0xC8, 0x8F, 0x00, 0xC8, 0x91, 0x00, 0xC8, 0x93, 0x00, 0xC8, 0x95, 0x00, 0xC8, 0x97, 0x00, 0xC8, 0x99, 0x00, 0xC8, 0x9B, 0x00, 0xC8, 0x9D, 0x00, 0xC8, 0x9F, 0x00, 0xC6, 0x9E, 0x00, 0xC8, 0xA3, 0x00, 0xC8, 0xA5, 0x00, 0xC8, 0xA7, 0x00, 0xC8, 0xA9, 0x00, 0xC8, 0xAB, 0x00, 0xC8, 0xAD, 0x00, 0xC8, 0xAF, 0x00, 0xC8, 0xB1, 0x00, 0xC8, 0xB3, 0x00, 0xE2, 0xB1, 0xA5, 0x00, 0xC8, 0xBC, 0x00, 0xC6, 0x9A, 0x00, 0xE2, 0xB1, 0xA6, 0x00, 0xC9, 0x82, 0x00, 0xC6, 0x80, 0x00, 0xCA, 0x89, 0x00, 0xCA, 0x8C, 0x00, 0xC9, 0x87, 0x00, 0xC9, 0x89, 0x00, 0xC9, 0x8B, 0x00, 0xC9, 0x8D, 0x00, 0xC9, 0x8F, 0x00, 0xCD, 0xB1, 0x00, 0xCD, 0xB3, 0x00, 0xCD, 0xB7, 0x00, 0xCF, 0xB3, 0x00, 0xCE, 0xAC, 0x00, 0xCE, 0xAD, 0x00, 0xCE, 0xAE, 0x00, 0xCE, 0xAF, 0x00, 0xCF, 0x8C, 0x00, 0xCF, 0x8D, 0x00, 0xCF, 0x8E, 0x00, 0xCE, 0xB1, 0x00, 0xCE, 0xB2, 0x00, 0xCE, 0xB3, 0x00, 0xCE, 0xB4, 0x00, 0xCE, 0xB5, 0x00, 0xCE, 0xB6, 0x00, 0xCE, 0xB7, 0x00, 0xCE, 0xB8, 0x00, 0xCE, 0xB9, 0x00, 0xCE, 0xBA, 0x00, 0xCE, 0xBB, 0x00, 0xCE, 0xBC, 0x00, 0xCE, 0xBD, 0x00, 0xCE, 0xBE, 0x00, 0xCE, 0xBF, 0x00, 0xCF, 0x80, 0x00, 0xCF, 0x81, 0x00, 0xCF, 0x83, 0x00, 0xCF, 0x84, 0x00, 0xCF, 0x85, 0x00, 0xCF, 0x86, 0x00, 0xCF, 0x87, 0x00, 0xCF, 0x88, 0x00, 0xCF, 0x89, 0x00, 0xCF, 0x8A, 0x00, 0xCF, 0x8B, 0x00, 0xCF, 0x97, 0x00, 0xCF, 0x99, 0x00, 0xCF, 0x9B, 0x00, 0xCF, 0x9D, 0x00, 0xCF, 0x9F, 0x00, 0xCF, 0xA1, 0x00, 0xCF, 0xA3, 0x00, 0xCF, 0xA5, 0x00, 0xCF, 0xA7, 0x00, 0xCF, 0xA9, 0x00, 0xCF, 0xAB, 0x00, 0xCF, 0xAD, 0x00, 0xCF, 0xAF, 0x00, 0xCE, 0xB8, 0x00, 0xCF, 0xB8, 0x00, 0xCF, 0xB2, 0x00, 0xCF, 0xBB, 0x00, 0xCD, 0xBB, 0x00, 0xCD, 0xBC, 0x00, 0xCD, 0xBD, 0x00, 0xD1, 0x90, 0x00, 0xD1, 0x91, 0x00, 0xD1, 0x92, 0x00, 0xD1, 0x93, 0x00, 0xD1, 0x94, 0x00, 0xD1, 0x95, 0x00, 0xD1, 0x96, 0x00, 0xD1, 0x97, 0x00, 0xD1, 0x98, 0x00, 0xD1, 0x99, 0x00, 0xD1, 0x9A, 0x00, 0xD1, 0x9B, 0x00, 0xD1, 0x9C, 0x00, 0xD1, 0x9D, 0x00, 0xD1, 0x9E, 0x00, 0xD1, 0x9F, 0x00, 0xD0, 0xB0, 0x00, 0xD0, 0xB1, 0x00, 0xD0, 0xB2, 0x00, 0xD0, 0xB3, 0x00, 0xD0, 0xB4, 0x00, 0xD0, 0xB5, 0x00, 0xD0, 0xB6, 0x00, 0xD0, 0xB7, 0x00, 0xD0, 0xB8, 0x00, 0xD0, 0xB9, 0x00, 0xD0, 0xBA, 0x00, 0xD0, 0xBB, 0x00, 0xD0, 0xBC, 0x00, 0xD0, 0xBD, 0x00, 0xD0, 0xBE, 0x00, 0xD0, 0xBF, 0x00, 0xD1, 0x80, 0x00, 0xD1, 0x81, 0x00, 0xD1, 0x82, 0x00, 0xD1, 0x83, 0x00, 0xD1, 0x84, 0x00, 0xD1, 0x85, 0x00, 0xD1, 0x86, 0x00, 0xD1, 0x87, 0x00, 0xD1, 0x88, 0x00, 0xD1, 0x89, 0x00, 0xD1, 0x8A, 0x00, 0xD1, 0x8B, 0x00, 0xD1, 0x8C, 0x00, 0xD1, 0x8D, 0x00, 0xD1, 0x8E, 0x00, 0xD1, 0x8F, 0x00, 0xD1, 0xA1, 0x00, 0xD1, 0xA3, 0x00, 0xD1, 0xA5, 0x00, 0xD1, 0xA7, 0x00, 0xD1, 0xA9, 0x00, 0xD1, 0xAB, 0x00, 0xD1, 0xAD, 0x00, 0xD1, 0xAF, 0x00, 0xD1, 0xB1, 0x00, 0xD1, 0xB3, 0x00, 0xD1, 0xB5, 0x00, 0xD1, 0xB7, 0x00, 0xD1, 0xB9, 0x00, 0xD1, 0xBB, 0x00, 0xD1, 0xBD, 0x00, 0xD1, 0xBF, 0x00, 0xD2, 0x81, 0x00, 0xD2, 0x8B, 0x00, 0xD2, 0x8D, 0x00, 0xD2, 0x8F, 0x00, 0xD2, 0x91, 0x00, 0xD2, 0x93, 0x00, 0xD2, 0x95, 0x00, 0xD2, 0x97, 0x00, 0xD2, 0x99, 0x00, 0xD2, 0x9B, 0x00, 0xD2, 0x9D, 0x00, 0xD2, 0x9F, 0x00, 0xD2, 0xA1, 0x00, 0xD2, 0xA3, 0x00, 0xD2, 0xA5, 0x00, 0xD2, 0xA7, 0x00, 0xD2, 0xA9, 0x00, 0xD2, 0xAB, 0x00, 0xD2, 0xAD, 0x00, 0xD2, 0xAF, 0x00, 0xD2, 0xB1, 0x00, 0xD2, 0xB3, 0x00, 0xD2, 0xB5, 0x00, 0xD2, 0xB7, 0x00, 0xD2, 0xB9, 0x00, 0xD2, 0xBB, 0x00, 0xD2, 0xBD, 0x00, 0xD2, 0xBF, 0x00, 0xD3, 0x8F, 0x00, 0xD3, 0x82, 0x00, 0xD3, 0x84, 0x00, 0xD3, 0x86, 0x00, 0xD3, 0x88, 0x00, 0xD3, 0x8A, 0x00, 0xD3, 0x8C, 0x00, 0xD3, 0x8E, 0x00, 0xD3, 0x91, 0x00, 0xD3, 0x93, 0x00, 0xD3, 0x95, 0x00, 0xD3, 0x97, 0x00, 0xD3, 0x99, 0x00, 0xD3, 0x9B, 0x00, 0xD3, 0x9D, 0x00, 0xD3, 0x9F, 0x00, 0xD3, 0xA1, 0x00, 0xD3, 0xA3, 0x00, 0xD3, 0xA5, 0x00, 0xD3, 0xA7, 0x00, 0xD3, 0xA9, 0x00, 0xD3, 0xAB, 0x00, 0xD3, 0xAD, 0x00, 0xD3, 0xAF, 0x00, 0xD3, 0xB1, 0x00, 0xD3, 0xB3, 0x00, 0xD3, 0xB5, 0x00, 0xD3, 0xB7, 0x00, 0xD3, 0xB9, 0x00, 0xD3, 0xBB, 0x00, 0xD3, 0xBD, 0x00, 0xD3, 0xBF, 0x00, 0xD4, 0x81, 0x00, 0xD4, 0x83, 0x00, 0xD4, 0x85, 0x00, 0xD4, 0x87, 0x00, 0xD4, 0x89, 0x00, 0xD4, 0x8B, 0x00, 0xD4, 0x8D, 0x00, 0xD4, 0x8F, 0x00, 0xD4, 0x91, 0x00, 0xD4, 0x93, 0x00, 0xD4, 0x95, 0x00, 0xD4, 0x97, 0x00, 0xD4, 0x99, 0x00, 0xD4, 0x9B, 0x00, 0xD4, 0x9D, 0x00, 0xD4, 0x9F, 0x00, 0xD4, 0xA1, 0x00, 0xD4, 0xA3, 0x00, 0xD4, 0xA5, 0x00, 0xD4, 0xA7, 0x00, 0xD4, 0xA9, 0x00, 0xD4, 0xAB, 0x00, 0xD4, 0xAD, 0x00, 0xD4, 0xAF, 0x00, 0xD5, 0xA1, 0x00, 0xD5, 0xA2, 0x00, 0xD5, 0xA3, 0x00, 0xD5, 0xA4, 0x00, 0xD5, 0xA5, 0x00, 0xD5, 0xA6, 0x00, 0xD5, 0xA7, 0x00, 0xD5, 0xA8, 0x00, 0xD5, 0xA9, 0x00, 0xD5, 0xAA, 0x00, 0xD5, 0xAB, 0x00, 0xD5, 0xAC, 0x00, 0xD5, 0xAD, 0x00, 0xD5, 0xAE, 0x00, 0xD5, 0xAF, 0x00, 0xD5, 0xB0, 0x00, 0xD5, 0xB1, 0x00, 0xD5, 0xB2, 0x00, 0xD5, 0xB3, 0x00, 0xD5, 0xB4, 0x00, 0xD5, 0xB5, 0x00, 0xD5, 0xB6, 0x00, 0xD5, 0xB7, 0x00, 0xD5, 0xB8, 0x00, 0xD5, 0xB9, 0x00, 0xD5, 0xBA, 0x00, 0xD5, 0xBB, 0x00, 0xD5, 0xBC, 0x00, 0xD5, 0xBD, 0x00, 0xD5, 0xBE, 0x00, 0xD5, 0xBF, 0x00, 0xD6, 0x80, 0x00, 0xD6, 0x81, 0x00, 0xD6, 0x82, 0x00, 0xD6, 0x83, 0x00, 0xD6, 0x84, 0x00, 0xD6, 0x85, 0x00, 0xD6, 0x86, 0x00, 0xF0, 0x90, 0x90, 0xA8, 0x00, 0xF0, 0x90, 0x90, 0xA9, 0x00, 0xF0, 0x90, 0x90, 0xAA, 0x00, 0xF0, 0x90, 0x90, 0xAB, 0x00, 0xF0, 0x90, 0x90, 0xAC, 0x00, 0xF0, 0x90, 0x90, 0xAD, 0x00, 0xF0, 0x90, 0x90, 0xAE, 0x00, 0xF0, 0x90, 0x90, 0xAF, 0x00, 0xF0, 0x90, 0x90, 0xB0, 0x00, 0xF0, 0x90, 0x90, 0xB1, 0x00, 0xF0, 0x90, 0x90, 0xB2, 0x00, 0xF0, 0x90, 0x90, 0xB3, 0x00, 0xF0, 0x90, 0x90, 0xB4, 0x00, 0xF0, 0x90, 0x90, 0xB5, 0x00, 0xF0, 0x90, 0x90, 0xB6, 0x00, 0xF0, 0x90, 0x90, 0xB7, 0x00, 0xF0, 0x90, 0x90, 0xB8, 0x00, 0xF0, 0x90, 0x90, 0xB9, 0x00, 0xF0, 0x90, 0x90, 0xBA, 0x00, 0xF0, 0x90, 0x90, 0xBB, 0x00, 0xF0, 0x90, 0x90, 0xBC, 0x00, 0xF0, 0x90, 0x90, 0xBD, 0x00, 0xF0, 0x90, 0x90, 0xBE, 0x00, 0xF0, 0x90, 0x90, 0xBF, 0x00, 0xF0, 0x90, 0x91, 0x80, 0x00, 0xF0, 0x90, 0x91, 0x81, 0x00, 0xF0, 0x90, 0x91, 0x82, 0x00, 0xF0, 0x90, 0x91, 0x83, 0x00, 0xF0, 0x90, 0x91, 0x84, 0x00, 0xF0, 0x90, 0x91, 0x85, 0x00, 0xF0, 0x90, 0x91, 0x86, 0x00, 0xF0, 0x90, 0x91, 0x87, 0x00, 0xF0, 0x90, 0x91, 0x88, 0x00, 0xF0, 0x90, 0x91, 0x89, 0x00, 0xF0, 0x90, 0x91, 0x8A, 0x00, 0xF0, 0x90, 0x91, 0x8B, 0x00, 0xF0, 0x90, 0x91, 0x8C, 0x00, 0xF0, 0x90, 0x91, 0x8D, 0x00, 0xF0, 0x90, 0x91, 0x8E, 0x00, 0xF0, 0x90, 0x91, 0x8F, 0x00, 0xF0, 0x90, 0x93, 0x98, 0x00, 0xF0, 0x90, 0x93, 0x99, 0x00, 0xF0, 0x90, 0x93, 0x9A, 0x00, 0xF0, 0x90, 0x93, 0x9B, 0x00, 0xF0, 0x90, 0x93, 0x9C, 0x00, 0xF0, 0x90, 0x93, 0x9D, 0x00, 0xF0, 0x90, 0x93, 0x9E, 0x00, 0xF0, 0x90, 0x93, 0x9F, 0x00, 0xF0, 0x90, 0x93, 0xA0, 0x00, 0xF0, 0x90, 0x93, 0xA1, 0x00, 0xF0, 0x90, 0x93, 0xA2, 0x00, 0xF0, 0x90, 0x93, 0xA3, 0x00, 0xF0, 0x90, 0x93, 0xA4, 0x00, 0xF0, 0x90, 0x93, 0xA5, 0x00, 0xF0, 0x90, 0x93, 0xA6, 0x00, 0xF0, 0x90, 0x93, 0xA7, 0x00, 0xF0, 0x90, 0x93, 0xA8, 0x00, 0xF0, 0x90, 0x93, 0xA9, 0x00, 0xF0, 0x90, 0x93, 0xAA, 0x00, 0xF0, 0x90, 0x93, 0xAB, 0x00, 0xF0, 0x90, 0x93, 0xAC, 0x00, 0xF0, 0x90, 0x93, 0xAD, 0x00, 0xF0, 0x90, 0x93, 0xAE, 0x00, 0xF0, 0x90, 0x93, 0xAF, 0x00, 0xF0, 0x90, 0x93, 0xB0, 0x00, 0xF0, 0x90, 0x93, 0xB1, 0x00, 0xF0, 0x90, 0x93, 0xB2, 0x00, 0xF0, 0x90, 0x93, 0xB3, 0x00, 0xF0, 0x90, 0x93, 0xB4, 0x00, 0xF0, 0x90, 0x93, 0xB5, 0x00, 0xF0, 0x90, 0x93, 0xB6, 0x00, 0xF0, 0x90, 0x93, 0xB7, 0x00, 0xF0, 0x90, 0x93, 0xB8, 0x00, 0xF0, 0x90, 0x93, 0xB9, 0x00, 0xF0, 0x90, 0x93, 0xBA, 0x00, 0xF0, 0x90, 0x93, 0xBB, 0x00, 0xE2, 0xB4, 0x80, 0x00, 0xE2, 0xB4, 0x81, 0x00, 0xE2, 0xB4, 0x82, 0x00, 0xE2, 0xB4, 0x83, 0x00, 0xE2, 0xB4, 0x84, 0x00, 0xE2, 0xB4, 0x85, 0x00, 0xE2, 0xB4, 0x86, 0x00, 0xE2, 0xB4, 0x87, 0x00, 0xE2, 0xB4, 0x88, 0x00, 0xE2, 0xB4, 0x89, 0x00, 0xE2, 0xB4, 0x8A, 0x00, 0xE2, 0xB4, 0x8B, 0x00, 0xE2, 0xB4, 0x8C, 0x00, 0xE2, 0xB4, 0x8D, 0x00, 0xE2, 0xB4, 0x8E, 0x00, 0xE2, 0xB4, 0x8F, 0x00, 0xE2, 0xB4, 0x90, 0x00, 0xE2, 0xB4, 0x91, 0x00, 0xE2, 0xB4, 0x92, 0x00, 0xE2, 0xB4, 0x93, 0x00, 0xE2, 0xB4, 0x94, 0x00, 0xE2, 0xB4, 0x95, 0x00, 0xE2, 0xB4, 0x96, 0x00, 0xE2, 0xB4, 0x97, 0x00, 0xE2, 0xB4, 0x98, 0x00, 0xE2, 0xB4, 0x99, 0x00, 0xE2, 0xB4, 0x9A, 0x00, 0xE2, 0xB4, 0x9B, 0x00, 0xE2, 0xB4, 0x9C, 0x00, 0xE2, 0xB4, 0x9D, 0x00, 0xE2, 0xB4, 0x9E, 0x00, 0xE2, 0xB4, 0x9F, 0x00, 0xE2, 0xB4, 0xA0, 0x00, 0xE2, 0xB4, 0xA1, 0x00, 0xE2, 0xB4, 0xA2, 0x00, 0xE2, 0xB4, 0xA3, 0x00, 0xE2, 0xB4, 0xA4, 0x00, 0xE2, 0xB4, 0xA5, 0x00, 0xE2, 0xB4, 0xA7, 0x00, 0xF0, 0x90, 0xB3, 0x80, 0x00, 0xF0, 0x90, 0xB3, 0x81, 0x00, 0xF0, 0x90, 0xB3, 0x82, 0x00, 0xF0, 0x90, 0xB3, 0x83, 0x00, 0xF0, 0x90, 0xB3, 0x84, 0x00, 0xF0, 0x90, 0xB3, 0x85, 0x00, 0xF0, 0x90, 0xB3, 0x86, 0x00, 0xF0, 0x90, 0xB3, 0x87, 0x00, 0xF0, 0x90, 0xB3, 0x88, 0x00, 0xF0, 0x90, 0xB3, 0x89, 0x00, 0xF0, 0x90, 0xB3, 0x8A, 0x00, 0xF0, 0x90, 0xB3, 0x8B, 0x00, 0xF0, 0x90, 0xB3, 0x8C, 0x00, 0xF0, 0x90, 0xB3, 0x8D, 0x00, 0xF0, 0x90, 0xB3, 0x8E, 0x00, 0xF0, 0x90, 0xB3, 0x8F, 0x00, 0xF0, 0x90, 0xB3, 0x90, 0x00, 0xF0, 0x90, 0xB3, 0x91, 0x00, 0xF0, 0x90, 0xB3, 0x92, 0x00, 0xF0, 0x90, 0xB3, 0x93, 0x00, 0xF0, 0x90, 0xB3, 0x94, 0x00, 0xF0, 0x90, 0xB3, 0x95, 0x00, 0xF0, 0x90, 0xB3, 0x96, 0x00, 0xF0, 0x90, 0xB3, 0x97, 0x00, 0xF0, 0x90, 0xB3, 0x98, 0x00, 0xF0, 0x90, 0xB3, 0x99, 0x00, 0xF0, 0x90, 0xB3, 0x9A, 0x00, 0xF0, 0x90, 0xB3, 0x9B, 0x00, 0xF0, 0x90, 0xB3, 0x9C, 0x00, 0xF0, 0x90, 0xB3, 0x9D, 0x00, 0xF0, 0x90, 0xB3, 0x9E, 0x00, 0xF0, 0x90, 0xB3, 0x9F, 0x00, 0xF0, 0x90, 0xB3, 0xA0, 0x00, 0xF0, 0x90, 0xB3, 0xA1, 0x00, 0xF0, 0x90, 0xB3, 0xA2, 0x00, 0xF0, 0x90, 0xB3, 0xA3, 0x00, 0xF0, 0x90, 0xB3, 0xA4, 0x00, 0xF0, 0x90, 0xB3, 0xA5, 0x00, 0xF0, 0x90, 0xB3, 0xA6, 0x00, 0xF0, 0x90, 0xB3, 0xA7, 0x00, 0xF0, 0x90, 0xB3, 0xA8, 0x00, 0xF0, 0x90, 0xB3, 0xA9, 0x00, 0xF0, 0x90, 0xB3, 0xAA, 0x00, 0xF0, 0x90, 0xB3, 0xAB, 0x00, 0xF0, 0x90, 0xB3, 0xAC, 0x00, 0xF0, 0x90, 0xB3, 0xAD, 0x00, 0xF0, 0x90, 0xB3, 0xAE, 0x00, 0xF0, 0x90, 0xB3, 0xAF, 0x00, 0xF0, 0x90, 0xB3, 0xB0, 0x00, 0xF0, 0x90, 0xB3, 0xB1, 0x00, 0xF0, 0x90, 0xB3, 0xB2, 0x00, 0xE2, 0xB4, 0xAD, 0x00, 0xF0, 0x91, 0xA3, 0x80, 0x00, 0xF0, 0x91, 0xA3, 0x81, 0x00, 0xF0, 0x91, 0xA3, 0x82, 0x00, 0xF0, 0x91, 0xA3, 0x83, 0x00, 0xF0, 0x91, 0xA3, 0x84, 0x00, 0xF0, 0x91, 0xA3, 0x85, 0x00, 0xF0, 0x91, 0xA3, 0x86, 0x00, 0xF0, 0x91, 0xA3, 0x87, 0x00, 0xF0, 0x91, 0xA3, 0x88, 0x00, 0xF0, 0x91, 0xA3, 0x89, 0x00, 0xF0, 0x91, 0xA3, 0x8A, 0x00, 0xF0, 0x91, 0xA3, 0x8B, 0x00, 0xF0, 0x91, 0xA3, 0x8C, 0x00, 0xF0, 0x91, 0xA3, 0x8D, 0x00, 0xF0, 0x91, 0xA3, 0x8E, 0x00, 0xF0, 0x91, 0xA3, 0x8F, 0x00, 0xF0, 0x91, 0xA3, 0x90, 0x00, 0xF0, 0x91, 0xA3, 0x91, 0x00, 0xF0, 0x91, 0xA3, 0x92, 0x00, 0xF0, 0x91, 0xA3, 0x93, 0x00, 0xF0, 0x91, 0xA3, 0x94, 0x00, 0xF0, 0x91, 0xA3, 0x95, 0x00, 0xF0, 0x91, 0xA3, 0x96, 0x00, 0xF0, 0x91, 0xA3, 0x97, 0x00, 0xF0, 0x91, 0xA3, 0x98, 0x00, 0xF0, 0x91, 0xA3, 0x99, 0x00, 0xF0, 0x91, 0xA3, 0x9A, 0x00, 0xF0, 0x91, 0xA3, 0x9B, 0x00, 0xF0, 0x91, 0xA3, 0x9C, 0x00, 0xF0, 0x91, 0xA3, 0x9D, 0x00, 0xF0, 0x91, 0xA3, 0x9E, 0x00, 0xF0, 0x91, 0xA3, 0x9F, 0x00, 0xEA, 0xAD, 0xB0, 0x00, 0xEA, 0xAD, 0xB1, 0x00, 0xEA, 0xAD, 0xB2, 0x00, 0xEA, 0xAD, 0xB3, 0x00, 0xEA, 0xAD, 0xB4, 0x00, 0xEA, 0xAD, 0xB5, 0x00, 0xEA, 0xAD, 0xB6, 0x00, 0xEA, 0xAD, 0xB7, 0x00, 0xEA, 0xAD, 0xB8, 0x00, 0xEA, 0xAD, 0xB9, 0x00, 0xEA, 0xAD, 0xBA, 0x00, 0xEA, 0xAD, 0xBB, 0x00, 0xEA, 0xAD, 0xBC, 0x00, 0xEA, 0xAD, 0xBD, 0x00, 0xEA, 0xAD, 0xBE, 0x00, 0xEA, 0xAD, 0xBF, 0x00, 0xEA, 0xAE, 0x80, 0x00, 0xEA, 0xAE, 0x81, 0x00, 0xEA, 0xAE, 0x82, 0x00, 0xEA, 0xAE, 0x83, 0x00, 0xEA, 0xAE, 0x84, 0x00, 0xEA, 0xAE, 0x85, 0x00, 0xEA, 0xAE, 0x86, 0x00, 0xEA, 0xAE, 0x87, 0x00, 0xEA, 0xAE, 0x88, 0x00, 0xEA, 0xAE, 0x89, 0x00, 0xEA, 0xAE, 0x8A, 0x00, 0xEA, 0xAE, 0x8B, 0x00, 0xEA, 0xAE, 0x8C, 0x00, 0xEA, 0xAE, 0x8D, 0x00, 0xEA, 0xAE, 0x8E, 0x00, 0xEA, 0xAE, 0x8F, 0x00, 0xEA, 0xAE, 0x90, 0x00, 0xEA, 0xAE, 0x91, 0x00, 0xEA, 0xAE, 0x92, 0x00, 0xEA, 0xAE, 0x93, 0x00, 0xEA, 0xAE, 0x94, 0x00, 0xEA, 0xAE, 0x95, 0x00, 0xEA, 0xAE, 0x96, 0x00, 0xEA, 0xAE, 0x97, 0x00, 0xEA, 0xAE, 0x98, 0x00, 0xEA, 0xAE, 0x99, 0x00, 0xEA, 0xAE, 0x9A, 0x00, 0xEA, 0xAE, 0x9B, 0x00, 0xEA, 0xAE, 0x9C, 0x00, 0xEA, 0xAE, 0x9D, 0x00, 0xEA, 0xAE, 0x9E, 0x00, 0xEA, 0xAE, 0x9F, 0x00, 0xEA, 0xAE, 0xA0, 0x00, 0xEA, 0xAE, 0xA1, 0x00, 0xEA, 0xAE, 0xA2, 0x00, 0xEA, 0xAE, 0xA3, 0x00, 0xEA, 0xAE, 0xA4, 0x00, 0xEA, 0xAE, 0xA5, 0x00, 0xEA, 0xAE, 0xA6, 0x00, 0xEA, 0xAE, 0xA7, 0x00, 0xEA, 0xAE, 0xA8, 0x00, 0xEA, 0xAE, 0xA9, 0x00, 0xEA, 0xAE, 0xAA, 0x00, 0xEA, 0xAE, 0xAB, 0x00, 0xEA, 0xAE, 0xAC, 0x00, 0xEA, 0xAE, 0xAD, 0x00, 0xEA, 0xAE, 0xAE, 0x00, 0xEA, 0xAE, 0xAF, 0x00, 0xEA, 0xAE, 0xB0, 0x00, 0xEA, 0xAE, 0xB1, 0x00, 0xEA, 0xAE, 0xB2, 0x00, 0xEA, 0xAE, 0xB3, 0x00, 0xEA, 0xAE, 0xB4, 0x00, 0xEA, 0xAE, 0xB5, 0x00, 0xEA, 0xAE, 0xB6, 0x00, 0xEA, 0xAE, 0xB7, 0x00, 0xEA, 0xAE, 0xB8, 0x00, 0xEA, 0xAE, 0xB9, 0x00, 0xEA, 0xAE, 0xBA, 0x00, 0xEA, 0xAE, 0xBB, 0x00, 0xEA, 0xAE, 0xBC, 0x00, 0xEA, 0xAE, 0xBD, 0x00, 0xEA, 0xAE, 0xBE, 0x00, 0xEA, 0xAE, 0xBF, 0x00, 0xE1, 0x8F, 0xB8, 0x00, 0xE1, 0x8F, 0xB9, 0x00, 0xE1, 0x8F, 0xBA, 0x00, 0xE1, 0x8F, 0xBB, 0x00, 0xE1, 0x8F, 0xBC, 0x00, 0xE1, 0x8F, 0xBD, 0x00, 0xE1, 0xB8, 0x81, 0x00, 0xE1, 0xB8, 0x83, 0x00, 0xE1, 0xB8, 0x85, 0x00, 0xE1, 0xB8, 0x87, 0x00, 0xE1, 0xB8, 0x89, 0x00, 0xE1, 0xB8, 0x8B, 0x00, 0xE1, 0xB8, 0x8D, 0x00, 0xE1, 0xB8, 0x8F, 0x00, 0xE1, 0xB8, 0x91, 0x00, 0xE1, 0xB8, 0x93, 0x00, 0xE1, 0xB8, 0x95, 0x00, 0xE1, 0xB8, 0x97, 0x00, 0xE1, 0xB8, 0x99, 0x00, 0xE1, 0xB8, 0x9B, 0x00, 0xE1, 0xB8, 0x9D, 0x00, 0xE1, 0xB8, 0x9F, 0x00, 0xE1, 0xB8, 0xA1, 0x00, 0xE1, 0xB8, 0xA3, 0x00, 0xE1, 0xB8, 0xA5, 0x00, 0xE1, 0xB8, 0xA7, 0x00, 0xE1, 0xB8, 0xA9, 0x00, 0xE1, 0xB8, 0xAB, 0x00, 0xE1, 0xB8, 0xAD, 0x00, 0xE1, 0xB8, 0xAF, 0x00, 0xE1, 0xB8, 0xB1, 0x00, 0xE1, 0xB8, 0xB3, 0x00, 0xE1, 0xB8, 0xB5, 0x00, 0xE1, 0xB8, 0xB7, 0x00, 0xE1, 0xB8, 0xB9, 0x00, 0xE1, 0xB8, 0xBB, 0x00, 0xE1, 0xB8, 0xBD, 0x00, 0xE1, 0xB8, 0xBF, 0x00, 0xE1, 0xB9, 0x81, 0x00, 0xE1, 0xB9, 0x83, 0x00, 0xE1, 0xB9, 0x85, 0x00, 0xE1, 0xB9, 0x87, 0x00, 0xE1, 0xB9, 0x89, 0x00, 0xE1, 0xB9, 0x8B, 0x00, 0xE1, 0xB9, 0x8D, 0x00, 0xE1, 0xB9, 0x8F, 0x00, 0xE1, 0xB9, 0x91, 0x00, 0xE1, 0xB9, 0x93, 0x00, 0xE1, 0xB9, 0x95, 0x00, 0xE1, 0xB9, 0x97, 0x00, 0xE1, 0xB9, 0x99, 0x00, 0xE1, 0xB9, 0x9B, 0x00, 0xE1, 0xB9, 0x9D, 0x00, 0xE1, 0xB9, 0x9F, 0x00, 0xE1, 0xB9, 0xA1, 0x00, 0xE1, 0xB9, 0xA3, 0x00, 0xE1, 0xB9, 0xA5, 0x00, 0xE1, 0xB9, 0xA7, 0x00, 0xE1, 0xB9, 0xA9, 0x00, 0xE1, 0xB9, 0xAB, 0x00, 0xE1, 0xB9, 0xAD, 0x00, 0xE1, 0xB9, 0xAF, 0x00, 0xE1, 0xB9, 0xB1, 0x00, 0xE1, 0xB9, 0xB3, 0x00, 0xE1, 0xB9, 0xB5, 0x00, 0xE1, 0xB9, 0xB7, 0x00, 0xE1, 0xB9, 0xB9, 0x00, 0xE1, 0xB9, 0xBB, 0x00, 0xE1, 0xB9, 0xBD, 0x00, 0xE1, 0xB9, 0xBF, 0x00, 0xE1, 0xBA, 0x81, 0x00, 0xE1, 0xBA, 0x83, 0x00, 0xE1, 0xBA, 0x85, 0x00, 0xE1, 0xBA, 0x87, 0x00, 0xE1, 0xBA, 0x89, 0x00, 0xE1, 0xBA, 0x8B, 0x00, 0xE1, 0xBA, 0x8D, 0x00, 0xE1, 0xBA, 0x8F, 0x00, 0xE1, 0xBA, 0x91, 0x00, 0xF0, 0x9E, 0xA4, 0xA2, 0x00, 0xF0, 0x9E, 0xA4, 0xA3, 0x00, 0xF0, 0x9E, 0xA4, 0xA4, 0x00, 0xF0, 0x9E, 0xA4, 0xA5, 0x00, 0xF0, 0x9E, 0xA4, 0xA6, 0x00, 0xF0, 0x9E, 0xA4, 0xA7, 0x00, 0xF0, 0x9E, 0xA4, 0xA8, 0x00, 0xF0, 0x9E, 0xA4, 0xA9, 0x00, 0xF0, 0x9E, 0xA4, 0xAA, 0x00, 0xF0, 0x9E, 0xA4, 0xAB, 0x00, 0xF0, 0x9E, 0xA4, 0xAC, 0x00, 0xF0, 0x9E, 0xA4, 0xAD, 0x00, 0xF0, 0x9E, 0xA4, 0xAE, 0x00, 0xF0, 0x9E, 0xA4, 0xAF, 0x00, 0xF0, 0x9E, 0xA4, 0xB0, 0x00, 0xF0, 0x9E, 0xA4, 0xB1, 0x00, 0xF0, 0x9E, 0xA4, 0xB2, 0x00, 0xF0, 0x9E, 0xA4, 0xB3, 0x00, 0xF0, 0x9E, 0xA4, 0xB4, 0x00, 0xF0, 0x9E, 0xA4, 0xB5, 0x00, 0xF0, 0x9E, 0xA4, 0xB6, 0x00, 0xF0, 0x9E, 0xA4, 0xB7, 0x00, 0xF0, 0x9E, 0xA4, 0xB8, 0x00, 0xF0, 0x9E, 0xA4, 0xB9, 0x00, 0xF0, 0x9E, 0xA4, 0xBA, 0x00, 0xF0, 0x9E, 0xA4, 0xBB, 0x00, 0xF0, 0x9E, 0xA4, 0xBC, 0x00, 0xF0, 0x9E, 0xA4, 0xBD, 0x00, 0xF0, 0x9E, 0xA4, 0xBE, 0x00, 0xF0, 0x9E, 0xA4, 0xBF, 0x00, 0xF0, 0x9E, 0xA5, 0x80, 0x00, 0xF0, 0x9E, 0xA5, 0x81, 0x00, 0xE1, 0xBA, 0x93, 0x00, 0xF0, 0x9E, 0xA5, 0x82, 0x00, 0xF0, 0x9E, 0xA5, 0x83, 0x00, 0xE1, 0xBA, 0x95, 0x00, 0xC3, 0x9F, 0x00, 0xE1, 0xBA, 0xA1, 0x00, 0xE1, 0xBA, 0xA3, 0x00, 0xE1, 0xBA, 0xA5, 0x00, 0xE1, 0xBA, 0xA7, 0x00, 0xE1, 0xBA, 0xA9, 0x00, 0xE1, 0xBA, 0xAB, 0x00, 0xE1, 0xBA, 0xAD, 0x00, 0xE1, 0xBA, 0xAF, 0x00, 0xE1, 0xBA, 0xB1, 0x00, 0xE1, 0xBA, 0xB3, 0x00, 0xE1, 0xBA, 0xB5, 0x00, 0xE1, 0xBA, 0xB7, 0x00, 0xE1, 0xBA, 0xB9, 0x00, 0xE1, 0xBA, 0xBB, 0x00, 0xE1, 0xBA, 0xBD, 0x00, 0xE1, 0xBA, 0xBF, 0x00, 0xE1, 0xBB, 0x81, 0x00, 0xE1, 0xBB, 0x83, 0x00, 0xE1, 0xBB, 0x85, 0x00, 0xE1, 0xBB, 0x87, 0x00, 0xE1, 0xBB, 0x89, 0x00, 0xE1, 0xBB, 0x8B, 0x00, 0xE1, 0xBB, 0x8D, 0x00, 0xE1, 0xBB, 0x8F, 0x00, 0xE1, 0xBB, 0x91, 0x00, 0xE1, 0xBB, 0x93, 0x00, 0xE1, 0xBB, 0x95, 0x00, 0xE1, 0xBB, 0x97, 0x00, 0xE1, 0xBB, 0x99, 0x00, 0xE1, 0xBB, 0x9B, 0x00, 0xE1, 0xBB, 0x9D, 0x00, 0xE1, 0xBB, 0x9F, 0x00, 0xE1, 0xBB, 0xA1, 0x00, 0xE1, 0xBB, 0xA3, 0x00, 0xE1, 0xBB, 0xA5, 0x00, 0xE1, 0xBB, 0xA7, 0x00, 0xE1, 0xBB, 0xA9, 0x00, 0xE1, 0xBB, 0xAB, 0x00, 0xE1, 0xBB, 0xAD, 0x00, 0xE1, 0xBB, 0xAF, 0x00, 0xE1, 0xBB, 0xB1, 0x00, 0xE1, 0xBB, 0xB3, 0x00, 0xE1, 0xBB, 0xB5, 0x00, 0xE1, 0xBB, 0xB7, 0x00, 0xE1, 0xBB, 0xB9, 0x00, 0xE1, 0xBB, 0xBB, 0x00, 0xE1, 0xBB, 0xBD, 0x00, 0xE1, 0xBB, 0xBF, 0x00, 0xE1, 0xBC, 0x80, 0x00, 0xE1, 0xBC, 0x81, 0x00, 0xE1, 0xBC, 0x82, 0x00, 0xE1, 0xBC, 0x83, 0x00, 0xE1, 0xBC, 0x84, 0x00, 0xE1, 0xBC, 0x85, 0x00, 0xE1, 0xBC, 0x86, 0x00, 0xE1, 0xBC, 0x87, 0x00, 0xE1, 0xBC, 0x90, 0x00, 0xE1, 0xBC, 0x91, 0x00, 0xE1, 0xBC, 0x92, 0x00, 0xE1, 0xBC, 0x93, 0x00, 0xE1, 0xBC, 0x94, 0x00, 0xE1, 0xBC, 0x95, 0x00, 0xE1, 0xBC, 0xA0, 0x00, 0xE1, 0xBC, 0xA1, 0x00, 0xE1, 0xBC, 0xA2, 0x00, 0xE1, 0xBC, 0xA3, 0x00, 0xE1, 0xBC, 0xA4, 0x00, 0xE1, 0xBC, 0xA5, 0x00, 0xE1, 0xBC, 0xA6, 0x00, 0xE1, 0xBC, 0xA7, 0x00, 0xE1, 0xBC, 0xB0, 0x00, 0xE1, 0xBC, 0xB1, 0x00, 0xE1, 0xBC, 0xB2, 0x00, 0xE1, 0xBC, 0xB3, 0x00, 0xE1, 0xBC, 0xB4, 0x00, 0xE1, 0xBC, 0xB5, 0x00, 0xE1, 0xBC, 0xB6, 0x00, 0xE1, 0xBC, 0xB7, 0x00, 0xE1, 0xBD, 0x80, 0x00, 0xE1, 0xBD, 0x81, 0x00, 0xE1, 0xBD, 0x82, 0x00, 0xE1, 0xBD, 0x83, 0x00, 0xE1, 0xBD, 0x84, 0x00, 0xE1, 0xBD, 0x85, 0x00, 0xE1, 0xBD, 0x91, 0x00, 0xE1, 0xBD, 0x93, 0x00, 0xE1, 0xBD, 0x95, 0x00, 0xE1, 0xBD, 0x97, 0x00, 0xE1, 0xBD, 0xA0, 0x00, 0xE1, 0xBD, 0xA1, 0x00, 0xE1, 0xBD, 0xA2, 0x00, 0xE1, 0xBD, 0xA3, 0x00, 0xE1, 0xBD, 0xA4, 0x00, 0xE1, 0xBD, 0xA5, 0x00, 0xE1, 0xBD, 0xA6, 0x00, 0xE1, 0xBD, 0xA7, 0x00, 0xE1, 0xBE, 0x80, 0x00, 0xE1, 0xBE, 0x81, 0x00, 0xE1, 0xBE, 0x82, 0x00, 0xE1, 0xBE, 0x83, 0x00, 0xE1, 0xBE, 0x84, 0x00, 0xE1, 0xBE, 0x85, 0x00, 0xE1, 0xBE, 0x86, 0x00, 0xE1, 0xBE, 0x87, 0x00, 0xE1, 0xBE, 0x90, 0x00, 0xE1, 0xBE, 0x91, 0x00, 0xE1, 0xBE, 0x92, 0x00, 0xE1, 0xBE, 0x93, 0x00, 0xE1, 0xBE, 0x94, 0x00, 0xE1, 0xBE, 0x95, 0x00, 0xE1, 0xBE, 0x96, 0x00, 0xE1, 0xBE, 0x97, 0x00, 0xE1, 0xBE, 0xA0, 0x00, 0xE1, 0xBE, 0xA1, 0x00, 0xE1, 0xBE, 0xA2, 0x00, 0xE1, 0xBE, 0xA3, 0x00, 0xE1, 0xBE, 0xA4, 0x00, 0xE1, 0xBE, 0xA5, 0x00, 0xE1, 0xBE, 0xA6, 0x00, 0xE1, 0xBE, 0xA7, 0x00, 0xE1, 0xBE, 0xB0, 0x00, 0xE1, 0xBE, 0xB1, 0x00, 0xE1, 0xBD, 0xB0, 0x00, 0xE1, 0xBD, 0xB1, 0x00, 0xE1, 0xBE, 0xB3, 0x00, 0xE1, 0xBD, 0xB2, 0x00, 0xE1, 0xBD, 0xB3, 0x00, 0xE1, 0xBD, 0xB4, 0x00, 0xE1, 0xBD, 0xB5, 0x00, 0xE1, 0xBF, 0x83, 0x00, 0xE1, 0xBF, 0x90, 0x00, 0xE1, 0xBF, 0x91, 0x00, 0xE1, 0xBD, 0xB6, 0x00, 0xE1, 0xBD, 0xB7, 0x00, 0xE1, 0xBF, 0xA0, 0x00, 0xE1, 0xBF, 0xA1, 0x00, 0xE1, 0xBD, 0xBA, 0x00, 0xE1, 0xBD, 0xBB, 0x00, 0xE1, 0xBF, 0xA5, 0x00, 0xE1, 0xBD, 0xB8, 0x00, 0xE1, 0xBD, 0xB9, 0x00, 0xE1, 0xBD, 0xBC, 0x00, 0xE1, 0xBD, 0xBD, 0x00, 0xE1, 0xBF, 0xB3, 0x00, 0xCF, 0x89, 0x00, 0x6B, 0x00, 0xC3, 0xA5, 0x00, 0xE2, 0x85, 0x8E, 0x00, 0xE2, 0x85, 0xB0, 0x00, 0xE2, 0x85, 0xB1, 0x00, 0xE2, 0x85, 0xB2, 0x00, 0xE2, 0x85, 0xB3, 0x00, 0xE2, 0x85, 0xB4, 0x00, 0xE2, 0x85, 0xB5, 0x00, 0xE2, 0x85, 0xB6, 0x00, 0xE2, 0x85, 0xB7, 0x00, 0xE2, 0x85, 0xB8, 0x00, 0xE2, 0x85, 0xB9, 0x00, 0xE2, 0x85, 0xBA, 0x00, 0xE2, 0x85, 0xBB, 0x00, 0xE2, 0x85, 0xBC, 0x00, 0xE2, 0x85, 0xBD, 0x00, 0xE2, 0x85, 0xBE, 0x00, 0xE2, 0x85, 0xBF, 0x00, 0xE2, 0x86, 0x84, 0x00, 0xE2, 0x93, 0x90, 0x00, 0xE2, 0x93, 0x91, 0x00, 0xE2, 0x93, 0x92, 0x00, 0xE2, 0x93, 0x93, 0x00, 0xE2, 0x93, 0x94, 0x00, 0xE2, 0x93, 0x95, 0x00, 0xE2, 0x93, 0x96, 0x00, 0xE2, 0x93, 0x97, 0x00, 0xE2, 0x93, 0x98, 0x00, 0xE2, 0x93, 0x99, 0x00, 0xE2, 0x93, 0x9A, 0x00, 0xE2, 0x93, 0x9B, 0x00, 0xE2, 0x93, 0x9C, 0x00, 0xE2, 0x93, 0x9D, 0x00, 0xE2, 0x93, 0x9E, 0x00, 0xE2, 0x93, 0x9F, 0x00, 0xE2, 0x93, 0xA0, 0x00, 0xE2, 0x93, 0xA1, 0x00, 0xE2, 0x93, 0xA2, 0x00, 0xE2, 0x93, 0xA3, 0x00, 0xE2, 0x93, 0xA4, 0x00, 0xE2, 0x93, 0xA5, 0x00, 0xE2, 0x93, 0xA6, 0x00, 0xE2, 0x93, 0xA7, 0x00, 0xE2, 0x93, 0xA8, 0x00, 0xE2, 0x93, 0xA9, 0x00, 0xE2, 0xB0, 0xB0, 0x00, 0xE2, 0xB0, 0xB1, 0x00, 0xE2, 0xB0, 0xB2, 0x00, 0xE2, 0xB0, 0xB3, 0x00, 0xE2, 0xB0, 0xB4, 0x00, 0xE2, 0xB0, 0xB5, 0x00, 0xE2, 0xB0, 0xB6, 0x00, 0xE2, 0xB0, 0xB7, 0x00, 0xE2, 0xB0, 0xB8, 0x00, 0xE2, 0xB0, 0xB9, 0x00, 0xE2, 0xB0, 0xBA, 0x00, 0xE2, 0xB0, 0xBB, 0x00, 0xE2, 0xB0, 0xBC, 0x00, 0xE2, 0xB0, 0xBD, 0x00, 0xE2, 0xB0, 0xBE, 0x00, 0xE2, 0xB0, 0xBF, 0x00, 0xE2, 0xB1, 0x80, 0x00, 0xE2, 0xB1, 0x81, 0x00, 0xE2, 0xB1, 0x82, 0x00, 0xE2, 0xB1, 0x83, 0x00, 0xE2, 0xB1, 0x84, 0x00, 0xE2, 0xB1, 0x85, 0x00, 0xE2, 0xB1, 0x86, 0x00, 0xE2, 0xB1, 0x87, 0x00, 0xE2, 0xB1, 0x88, 0x00, 0xE2, 0xB1, 0x89, 0x00, 0xE2, 0xB1, 0x8A, 0x00, 0xE2, 0xB1, 0x8B, 0x00, 0xE2, 0xB1, 0x8C, 0x00, 0xE2, 0xB1, 0x8D, 0x00, 0xE2, 0xB1, 0x8E, 0x00, 0xE2, 0xB1, 0x8F, 0x00, 0xE2, 0xB1, 0x90, 0x00, 0xE2, 0xB1, 0x91, 0x00, 0xE2, 0xB1, 0x92, 0x00, 0xE2, 0xB1, 0x93, 0x00, 0xE2, 0xB1, 0x94, 0x00, 0xE2, 0xB1, 0x95, 0x00, 0xE2, 0xB1, 0x96, 0x00, 0xE2, 0xB1, 0x97, 0x00, 0xE2, 0xB1, 0x98, 0x00, 0xE2, 0xB1, 0x99, 0x00, 0xE2, 0xB1, 0x9A, 0x00, 0xE2, 0xB1, 0x9B, 0x00, 0xE2, 0xB1, 0x9C, 0x00, 0xE2, 0xB1, 0x9D, 0x00, 0xE2, 0xB1, 0x9E, 0x00, 0xE2, 0xB1, 0xA1, 0x00, 0xC9, 0xAB, 0x00, 0xE1, 0xB5, 0xBD, 0x00, 0xC9, 0xBD, 0x00, 0xE2, 0xB1, 0xA8, 0x00, 0xE2, 0xB1, 0xAA, 0x00, 0xE2, 0xB1, 0xAC, 0x00, 0xC9, 0x91, 0x00, 0xC9, 0xB1, 0x00, 0xC9, 0x90, 0x00, 0xC9, 0x92, 0x00, 0xE2, 0xB1, 0xB3, 0x00, 0xE2, 0xB1, 0xB6, 0x00, 0xC8, 0xBF, 0x00, 0xC9, 0x80, 0x00, 0xE2, 0xB2, 0x81, 0x00, 0xE2, 0xB2, 0x83, 0x00, 0xE2, 0xB2, 0x85, 0x00, 0xE2, 0xB2, 0x87, 0x00, 0xE2, 0xB2, 0x89, 0x00, 0xE2, 0xB2, 0x8B, 0x00, 0xE2, 0xB2, 0x8D, 0x00, 0xE2, 0xB2, 0x8F, 0x00, 0xE2, 0xB2, 0x91, 0x00, 0xE2, 0xB2, 0x93, 0x00, 0xE2, 0xB2, 0x95, 0x00, 0xE2, 0xB2, 0x97, 0x00, 0xE2, 0xB2, 0x99, 0x00, 0xE2, 0xB2, 0x9B, 0x00, 0xE2, 0xB2, 0x9D, 0x00, 0xE2, 0xB2, 0x9F, 0x00, 0xE2, 0xB2, 0xA1, 0x00, 0xE2, 0xB2, 0xA3, 0x00, 0xE2, 0xB2, 0xA5, 0x00, 0xE2, 0xB2, 0xA7, 0x00, 0xE2, 0xB2, 0xA9, 0x00, 0xE2, 0xB2, 0xAB, 0x00, 0xE2, 0xB2, 0xAD, 0x00, 0xE2, 0xB2, 0xAF, 0x00, 0xE2, 0xB2, 0xB1, 0x00, 0xE2, 0xB2, 0xB3, 0x00, 0xE2, 0xB2, 0xB5, 0x00, 0xE2, 0xB2, 0xB7, 0x00, 0xE2, 0xB2, 0xB9, 0x00, 0xE2, 0xB2, 0xBB, 0x00, 0xE2, 0xB2, 0xBD, 0x00, 0xE2, 0xB2, 0xBF, 0x00, 0xE2, 0xB3, 0x81, 0x00, 0xE2, 0xB3, 0x83, 0x00, 0xE2, 0xB3, 0x85, 0x00, 0xE2, 0xB3, 0x87, 0x00, 0xE2, 0xB3, 0x89, 0x00, 0xE2, 0xB3, 0x8B, 0x00, 0xE2, 0xB3, 0x8D, 0x00, 0xE2, 0xB3, 0x8F, 0x00, 0xE2, 0xB3, 0x91, 0x00, 0xE2, 0xB3, 0x93, 0x00, 0xE2, 0xB3, 0x95, 0x00, 0xE2, 0xB3, 0x97, 0x00, 0xE2, 0xB3, 0x99, 0x00, 0xE2, 0xB3, 0x9B, 0x00, 0xE2, 0xB3, 0x9D, 0x00, 0xE2, 0xB3, 0x9F, 0x00, 0xE2, 0xB3, 0xA1, 0x00, 0xE2, 0xB3, 0xA3, 0x00, 0xE2, 0xB3, 0xAC, 0x00, 0xE2, 0xB3, 0xAE, 0x00, 0xE2, 0xB3, 0xB3, 0x00, 0xEA, 0x99, 0x81, 0x00, 0xEA, 0x99, 0x83, 0x00, 0xEA, 0x99, 0x85, 0x00, 0xEA, 0x99, 0x87, 0x00, 0xEA, 0x99, 0x89, 0x00, 0xEA, 0x99, 0x8B, 0x00, 0xEA, 0x99, 0x8D, 0x00, 0xEA, 0x99, 0x8F, 0x00, 0xEA, 0x99, 0x91, 0x00, 0xEA, 0x99, 0x93, 0x00, 0xEA, 0x99, 0x95, 0x00, 0xEA, 0x99, 0x97, 0x00, 0xEA, 0x99, 0x99, 0x00, 0xEA, 0x99, 0x9B, 0x00, 0xEA, 0x99, 0x9D, 0x00, 0xEA, 0x99, 0x9F, 0x00, 0xEA, 0x99, 0xA1, 0x00, 0xEA, 0x99, 0xA3, 0x00, 0xEA, 0x99, 0xA5, 0x00, 0xEA, 0x99, 0xA7, 0x00, 0xEA, 0x99, 0xA9, 0x00, 0xEA, 0x99, 0xAB, 0x00, 0xEA, 0x99, 0xAD, 0x00, 0xEA, 0x9A, 0x81, 0x00, 0xEA, 0x9A, 0x83, 0x00, 0xEA, 0x9A, 0x85, 0x00, 0xEA, 0x9A, 0x87, 0x00, 0xEA, 0x9A, 0x89, 0x00, 0xEA, 0x9A, 0x8B, 0x00, 0xEA, 0x9A, 0x8D, 0x00, 0xEA, 0x9A, 0x8F, 0x00, 0xEA, 0x9A, 0x91, 0x00, 0xEA, 0x9A, 0x93, 0x00, 0xEA, 0x9A, 0x95, 0x00, 0xEA, 0x9A, 0x97, 0x00, 0xEA, 0x9A, 0x99, 0x00, 0xEA, 0x9A, 0x9B, 0x00, 0xEA, 0x9C, 0xA3, 0x00, 0xEA, 0x9C, 0xA5, 0x00, 0xEA, 0x9C, 0xA7, 0x00, 0xEA, 0x9C, 0xA9, 0x00, 0xEA, 0x9C, 0xAB, 0x00, 0xEA, 0x9C, 0xAD, 0x00, 0xEA, 0x9C, 0xAF, 0x00, 0xEA, 0x9C, 0xB3, 0x00, 0xEA, 0x9C, 0xB5, 0x00, 0xEA, 0x9C, 0xB7, 0x00, 0xEA, 0x9C, 0xB9, 0x00, 0xEA, 0x9C, 0xBB, 0x00, 0xEA, 0x9C, 0xBD, 0x00, 0xEA, 0x9C, 0xBF, 0x00, 0xEA, 0x9D, 0x81, 0x00, 0xEA, 0x9D, 0x83, 0x00, 0xEA, 0x9D, 0x85, 0x00, 0xEA, 0x9D, 0x87, 0x00, 0xEA, 0x9D, 0x89, 0x00, 0xEA, 0x9D, 0x8B, 0x00, 0xEA, 0x9D, 0x8D, 0x00, 0xEA, 0x9D, 0x8F, 0x00, 0xEA, 0x9D, 0x91, 0x00, 0xEA, 0x9D, 0x93, 0x00, 0xEA, 0x9D, 0x95, 0x00, 0xEA, 0x9D, 0x97, 0x00, 0xEA, 0x9D, 0x99, 0x00, 0xEA, 0x9D, 0x9B, 0x00, 0xEA, 0x9D, 0x9D, 0x00, 0xEA, 0x9D, 0x9F, 0x00, 0xEA, 0x9D, 0xA1, 0x00, 0xEA, 0x9D, 0xA3, 0x00, 0xEA, 0x9D, 0xA5, 0x00, 0xEA, 0x9D, 0xA7, 0x00, 0xEA, 0x9D, 0xA9, 0x00, 0xEA, 0x9D, 0xAB, 0x00, 0xEA, 0x9D, 0xAD, 0x00, 0xEA, 0x9D, 0xAF, 0x00, 0xEA, 0x9D, 0xBA, 0x00, 0xEA, 0x9D, 0xBC, 0x00, 0xE1, 0xB5, 0xB9, 0x00, 0xEA, 0x9D, 0xBF, 0x00, 0xEA, 0x9E, 0x81, 0x00, 0xEA, 0x9E, 0x83, 0x00, 0xEA, 0x9E, 0x85, 0x00, 0xEA, 0x9E, 0x87, 0x00, 0xEA, 0x9E, 0x8C, 0x00, 0xC9, 0xA5, 0x00, 0xEA, 0x9E, 0x91, 0x00, 0xEA, 0x9E, 0x93, 0x00, 0xEA, 0x9E, 0x97, 0x00, 0xEA, 0x9E, 0x99, 0x00, 0xEA, 0x9E, 0x9B, 0x00, 0xEA, 0x9E, 0x9D, 0x00, 0xEA, 0x9E, 0x9F, 0x00, 0xEA, 0x9E, 0xA1, 0x00, 0xEA, 0x9E, 0xA3, 0x00, 0xEA, 0x9E, 0xA5, 0x00, 0xEA, 0x9E, 0xA7, 0x00, 0xEA, 0x9E, 0xA9, 0x00, 0xC9, 0xA6, 0x00, 0xC9, 0x9C, 0x00, 0xC9, 0xA1, 0x00, 0xC9, 0xAC, 0x00, 0xC9, 0xAA, 0x00, 0xCA, 0x9E, 0x00, 0xCA, 0x87, 0x00, 0xCA, 0x9D, 0x00, 0xEA, 0xAD, 0x93, 0x00, 0xEA, 0x9E, 0xB5, 0x00, 0xEA, 0x9E, 0xB7, 0x00, 0xEF, 0xBD, 0x81, 0x00, 0xEF, 0xBD, 0x82, 0x00, 0xEF, 0xBD, 0x83, 0x00, 0xEF, 0xBD, 0x84, 0x00, 0xEF, 0xBD, 0x85, 0x00, 0xEF, 0xBD, 0x86, 0x00, 0xEF, 0xBD, 0x87, 0x00, 0xEF, 0xBD, 0x88, 0x00, 0xEF, 0xBD, 0x89, 0x00, 0xEF, 0xBD, 0x8A, 0x00, 0xEF, 0xBD, 0x8B, 0x00, 0xEF, 0xBD, 0x8C, 0x00, 0xEF, 0xBD, 0x8D, 0x00, 0xEF, 0xBD, 0x8E, 0x00, 0xEF, 0xBD, 0x8F, 0x00, 0xEF, 0xBD, 0x90, 0x00, 0xEF, 0xBD, 0x91, 0x00, 0xEF, 0xBD, 0x92, 0x00, 0xEF, 0xBD, 0x93, 0x00, 0xEF, 0xBD, 0x94, 0x00, 0xEF, 0xBD, 0x95, 0x00, 0xEF, 0xBD, 0x96, 0x00, 0xEF, 0xBD, 0x97, 0x00, 0xEF, 0xBD, 0x98, 0x00, 0xEF, 0xBD, 0x99, 0x00, 0xEF, 0xBD, 0x9A, 0x00, 0x69, 0xCC, 0x87, 0x00, 0xE1, 0xBE, 0x80, 0x00, 0xE1, 0xBE, 0x81, 0x00, 0xE1, 0xBE, 0x82, 0x00, 0xE1, 0xBE, 0x83, 0x00, 0xE1, 0xBE, 0x84, 0x00, 0xE1, 0xBE, 0x85, 0x00, 0xE1, 0xBE, 0x86, 0x00, 0xE1, 0xBE, 0x87, 0x00, 0xE1, 0xBE, 0x90, 0x00, 0xE1, 0xBE, 0x91, 0x00, 0xE1, 0xBE, 0x92, 0x00, 0xE1, 0xBE, 0x93, 0x00, 0xE1, 0xBE, 0x94, 0x00, 0xE1, 0xBE, 0x95, 0x00, 0xE1, 0xBE, 0x96, 0x00, 0xE1, 0xBE, 0x97, 0x00, 0xE1, 0xBE, 0xA0, 0x00, 0xE1, 0xBE, 0xA1, 0x00, 0xE1, 0xBE, 0xA2, 0x00, 0xE1, 0xBE, 0xA3, 0x00, 0xE1, 0xBE, 0xA4, 0x00, 0xE1, 0xBE, 0xA5, 0x00, 0xE1, 0xBE, 0xA6, 0x00, 0xE1, 0xBE, 0xA7, 0x00, 0xE1, 0xBE, 0xB3, 0x00, 0xE1, 0xBF, 0x83, 0x00, 0xE1, 0xBF, 0xB3, 0x00, }; RediSearch-1.2.2/src/dep/libnu/gen/_toupper.c000066400000000000000000002014471364126773500207750ustar00rootroot00000000000000/* Automatically generated file (mph.py), 1466614870 * * Tag : NU_TOUPPER * Prime : 01000193, * G size : 1396, * Combined length : 5530, * Encoding : UTF-8 */ #include const int16_t NU_TOUPPER_G[] = { 1, -1396, 1, -1395, 1, -1394, 1, -1393, 1, -1392, 1, -1391, 1, -1390, 1, -1389, 1, 1, 1, 5, 8, 1, 4, 9, -1388, 0, -1387, 0, -1386, 0, -1385, 0, -1384, 0, -1383, 0, -1382, 0, -1381, 0, -1380, 0, -1379, 0, -1377, 0, -1376, 0, -1375, 0, -1374, 0, 0, -1373, 0, 0, -1372, 1, -1371, 1, -1370, 1, -1369, 1, 7, 10, -1368, 12, 2, -1367, 2, -1366, -1365, 0, -1364, 0, -1363, 0, -1362, 0, 2, -1361, 1, -1360, 1, -1359, 1, -1358, -1357, -1355, -1354, 0, -1353, 0, 17, 0, -1352, -1351, 19, 0, 0, -1350, 0, 0, 1, -1349, -1348, 1, -1347, -1346, 3, -1345, -1343, -1342, -1341, 4, -1340, -1339, -1338, 2, 0, 0, 0, -1337, 0, 2, 0, -1336, -1335, -1334, 8, -1333, 1, 8, 1, 9, 1, 1, 1, 7, 28, 31, 1, 33, -1332, -1331, -1330, 1, 0, 0, -1329, 0, 0, -1327, 0, -1325, 0, -1324, 0, -1322, 0, -1320, 0, -1319, 1, -1316, 1, 1, -1314, -1312, -1310, -1308, -1306, 1, 1, -1304, 1, -1302, 1, 1, -1300, 1, -1298, 1, 1, 1, -1296, 1, -1295, -1292, 1, -1290, 1, -1288, 1, -1286, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, 0, 1, 0, 1, 0, 2, 0, 2, 0, 2, 0, 1, 0, -1284, 0, -1282, 0, -1280, 0, -1276, 0, -1275, 0, -1274, 0, -1272, 0, -1271, 0, -1270, 0, -1269, 0, -1267, 0, -1265, 0, -1264, 0, -1263, 0, 0, -1262, 0, 0, 0, -1261, 0, -1260, -1259, 0, -1258, 0, -1257, 0, -1256, 0, -1255, 0, -1254, 0, -1253, 0, -1252, 0, -1250, 0, -1248, 0, -1247, 0, -1246, 0, -1245, 0, -1242, 0, -1241, 0, -1240, 0, 0, -1239, 0, -1238, 0, -1237, 0, -1236, -1235, 0, -1234, -1233, -1231, 0, -1230, 0, 48, -1229, 49, -1227, 63, -1223, 64, -1220, -1219, 64, -1218, -1216, 68, 70, -1214, 69, 64, -1126, 64, -1115, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, -1114, -1111, -1110, -1109, -906, -893, -891, -887, -884, -883, -881, -872, -870, -868, -862, -860, 32, 32, 32, 32, 33, -859, 33, 40, -858, -857, -853, -850, -848, -846, 35, -839, -837, -836, -833, -830, -828, -826, 17, -825, -824, -823, -822, -820, -819, -818, -817, -816, -812, -810, -808, -804, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -802, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, -800, 32, -799, -798, -797, 33, -796, 32, -794, 35, -792, 32, -790, 32, -788, 40, -786, 40, -784, 40, -783, 40, -782, 33, -781, 33, -780, 33, -778, 33, -776, -774, 0, -772, 0, -770, 0, -768, 0, -766, 0, -761, 0, -760, 0, -758, 0, -756, 0, -754, 0, -748, 0, -747, 0, -746, 0, -745, 0, -743, 0, -742, 0, -741, 0, -736, 0, -734, 0, 1, 0, -732, 0, 4, 0, -730, 0, -720, 0, -717, 0, -706, 0, 1, 0, -703, 0, -701, 0, -689, 0, -671, 0, -669, 0, -668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -667, -666, -665, -641, 5, -640, 5, -639, -638, -635, -634, 11, -615, -613, -612, -610, -608, 2, -607, 6, 2, 1, 1, 5, -606, -605, -604, -603, 0, -602, -601, -597, 0, 0, 0, 0, -594, -592, -588, 0, -587, -584, -581, -580, -578, -577, -576, -575, -574, -573, -572, -571, -570, -569, -568, 1, -567, -564, -563, -562, -561, -560, -558, -556, 1, 1, 1, 1, -555, -554, 9, 10, -553, -552, -551, -550, -549, -548, -547, -546, -545, -544, -543, -542, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -541, 1, 16, 1, -540, -539, -538, -537, -536, -534, -532, -530, -528, -526, -525, -524, 1, 1, 1, 4, 1, -523, 16, 19, 12, 1, 16, -522, 16, -521, 64, -520, -519, 0, -518, 0, -517, -516, 17, -515, -514, 30, 28, -513, -512, 32, -510, 41, 0, -508, -506, 47, -504, -503, -502, -497, 0, 0, -496, 0, 12, 0, -494, -490, -489, 0, 0, 0, 44, 0, 53, 0, 67, 0, 69, 0, 31, 0, 32, 0, 39, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, -488, 0, 0, 0, 0, -486, 0, -484, 0, 0, 0, 0, 0, 0, 0, 0, 0, -482, 0, -480, 0, -476, 0, -475, 0, 0, 0, -474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -473, -472, -471, -470, -469, -468, -467, -466, -465, -463, -461, -455, -451, -449, -439, -428, -424, -423, -422, -384, -383, -382, -381, -380, -379, -377, 4, -376, -375, -374, -373, -372, -371, -370, -369, -363, 2, -361, -352, -351, -350, 0, 0, 0, -349, -348, 0, -347, -346, -345, 2, 5, -344, -343, -342, -341, -340, -339, -338, -337, -335, -323, -322, -312, -311, -308, -307, -306, -305, 1, 0, 0, 0, 0, 0, 0, -304, 0, 0, 0, 4, 3, 8, 0, 1, -303, -302, 1, 4, 0, -301, 0, 1, -300, -299, 23, 2, -298, -297, -296, 4, -294, -293, -291, 1, -289, 5, -287, 36, -285, 53, 1, 8, 12, 9, 40, 1, 40, 1, 40, 11, -279, 64, -264, 64, -263, 64, -262, 4, 45, 4, 44, 76, -261, 11, 41, -260, 0, -259, 0, 0, 0, 0, 0, 66, 69, 68, 79, 180, 4, 186, 189, 70, -258, -257, 81, 93, -256, 100, -255, 5, 67, 65, -254, 5, 67, 4, 131, 68, -253, 78, -252, 68, -251, 115, -250, 81, -249, 98, -248, 101, -247, 101, -246, 0, 0, 0, 0, -245, 0, -244, 0, 3, 167, 2, 169, 1, -243, 1, -242, 1, 0, 1, 0, -241, 0, -240, 0, 136, -239, 139, -238, -237, 0, 15, -236, -235, 0, -234, 0, -233, 0, -232, 0, 158, -231, 157, -230, 136, -229, 142, -228, -227, -226, -225, -223, 0, 0, -221, -215, 183, -214, -168, 199, 141, -167, -163, -161, -156, 0, -155, 0, -154, 0, -153, 0, 1, 0, 1, 0, 1, 1, 1, -152, 1, 1, -151, 1, -150, 0, -148, 0, -147, 0, -145, -144, -143, -142, -141, -140, 2, 0, -139, 0, 2, 0, 1, 0, 1, 0, 1, 0, -138, -137, 9, 0, -136, 0, 1, 0, 48, -135, 54, -134, 6, -133, 1, -132, 1, -131, 1, 23, -130, -129, 16, 0, 1, 39, 1, -128, 1, -127, 81, 46, 22, -126, 83, -125, 89, -124, 98, -123, -122, 0, -121, 0, -120, 0, -119, 0, 1, -117, 1, -115, 1, -112, 1, -111, -110, 0, -109, 0, -108, 0, -107, 0, -106, 0, -105, 0, -104, 0, -103, 0, 39, 0, 43, 0, 8, 0, 35, 0, 32, 0, 32, 0, 32, 0, 37, 0, 77, 0, 82, 0, 7, 0, 8, 0, 1, 0, 20, 0, 38, 0, 40, 0, -102, 0, -101, 0, -100, 0, -99, 0, -98, 0, -97, 0, -96, 0, -95, 0, 5, 0, 10, 0, 75, 0, 79, 0, 5, 0, 11, 0, -94, 0, 83, 0, -93, 0, -92, 0, -91, 0, -90, 0, -89, 0, -88, 0, -87, 0, -86, 0, -85, 0, -84, 0, -83, 0, -82, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, -81, 1, -80, 1, -79, 1, -78, 1, -77, 1, -76, 1, -75, 1, -74, 1, 0, 1, 0, 2, 0, 1, 0, -73, 0, -72, 0, -71, 0, -70, 0, -69, 0, -68, 0, -67, 0, -66, 0, 1, 0, 1, 0, 2, 0, 1, 0, 1, -65, 1, -64, 16, -62, 162, -60, 0, 0, -58, -57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -55, -53, -52, -51, -50, -49, -47, -45, -40, -39, -38, -37, -36, -35, -34, -33, -32, -31, -30, 0, -29, -27, -26, -25, -24, -23, -22, -21, 14, 37, 64, 67, 72, -20, 75, -18, -16, 0, -14, 0, -12, 0, -11, 0, -10, 0, -9, 0, 0, 0, -8, 0, -7, -6, -5, -4, 68, -3, -2, -1, }; const size_t NU_TOUPPER_G_SIZE = sizeof(NU_TOUPPER_G) / sizeof(*NU_TOUPPER_G); /* codepoints */ const uint32_t NU_TOUPPER_VALUES_C[] = { 0x0104F4, 0x0104F5, 0x0104F6, 0x0104F0, 0x0104F1, 0x0104F2, 0x0104F3, 0x000481, 0x00049D, 0x00049F, 0x000499, 0x00049B, 0x000581, 0x000495, 0x000583, 0x000497, 0x000585, 0x0104DC, 0x000587, 0x0104DE, 0x000568, 0x000569, 0x00056A, 0x00056B, 0x000564, 0x000565, 0x000566, 0x00052D, 0x000567, 0x000561, 0x000562, 0x000563, 0x00057C, 0x00057D, 0x00057E, 0x00057F, 0x000578, 0x000579, 0x00057A, 0x00057B, 0x00FB01, 0x00FB05, 0x00FB03, 0x00FB02, 0x000574, 0x00FB00, 0x000575, 0x00FB06, 0x000576, 0x000577, 0x000570, 0x000571, 0x000572, 0x00FB04, 0x000573, 0x002184, 0x0024E8, 0x0024E9, 0x00FB13, 0x0024E4, 0x00FB15, 0x0024E6, 0x00FB17, 0x0024E0, 0x0024E2, 0x001E61, 0x001E63, 0x001E7D, 0x001E7F, 0x001E79, 0x001E7B, 0x001E75, 0x001E77, 0x0024DC, 0x0024DE, 0x0024D8, 0x0024DA, 0x0024D4, 0x0024D6, 0x0024D0, 0x0024D2, 0x001E51, 0x001E53, 0x001E2D, 0x001E2F, 0x001E29, 0x001E2B, 0x001E25, 0x001E27, 0x001E21, 0x001E23, 0x001E3D, 0x001E3F, 0x001E3B, 0x001E09, 0x001E0B, 0x001E05, 0x001E07, 0x001E01, 0x001E03, 0x001E1D, 0x001E1F, 0x001EF9, 0x001EFB, 0x001EF5, 0x001EF7, 0x001EF1, 0x001EF3, 0x001ECD, 0x001ECF, 0x000584, 0x000586, 0x000071, 0x000073, 0x000580, 0x000072, 0x000582, 0x000070, 0x001EC1, 0x001EC3, 0x001EDD, 0x001EDF, 0x00FF4C, 0x00FF4E, 0x00FF48, 0x00FF4A, 0x00FF46, 0x000268, 0x000266, 0x001EAB, 0x00FF5A, 0x00FF54, 0x00FF56, 0x00FF50, 0x00FF52, 0x001EBB, 0x000272, 0x001EB7, 0x001E89, 0x000240, 0x001E85, 0x000242, 0x001E87, 0x00025C, 0x001E81, 0x002C30, 0x001E83, 0x000259, 0x00214E, 0x00025B, 0x001E99, 0x000250, 0x000229, 0x00022B, 0x000225, 0x000227, 0x002C3D, 0x002C3C, 0x002C3F, 0x002C3E, 0x001F64, 0x002C68, 0x001F65, 0x002C6C, 0x0000B5, 0x00217C, 0x001F66, 0x001F61, 0x002C4C, 0x00217E, 0x002C6A, 0x00217F, 0x002C4D, 0x002C5D, 0x002C4F, 0x002C4E, 0x002C51, 0x002C50, 0x002C53, 0x002C52, 0x002C55, 0x002C54, 0x002C57, 0x002C56, 0x002C59, 0x002C58, 0x002C5B, 0x002C5A, 0x002175, 0x002C5C, 0x002177, 0x002C5E, 0x002179, 0x002171, 0x00217B, 0x00217A, 0x00217D, 0x002174, 0x002176, 0x002178, 0x0000E9, 0x0000E1, 0x0000EB, 0x0000E3, 0x0000ED, 0x0000E5, 0x0000EF, 0x0000E7, 0x002C61, 0x0000F1, 0x002C73, 0x0000F3, 0x0000F5, 0x001F62, 0x001F7C, 0x002C76, 0x002C66, 0x002C65, 0x0000F9, 0x0000FB, 0x001F7D, 0x0000FD, 0x001F78, 0x0000FF, 0x001F79, 0x001F7A, 0x001F7B, 0x001F74, 0x001F76, 0x001F70, 0x001F72, 0x000209, 0x00020B, 0x000205, 0x000207, 0x001F44, 0x000203, 0x001F40, 0x001F42, 0x000219, 0x00021B, 0x001F54, 0x001F56, 0x00A681, 0x00A683, 0x001F24, 0x001F26, 0x001F20, 0x001F22, 0x01E92C, 0x01E92E, 0x01E928, 0x01E92A, 0x001F30, 0x01E93C, 0x01E93E, 0x01E939, 0x01E93A, 0x00A74D, 0x00A74F, 0x0118CE, 0x0118C4, 0x0118C6, 0x0118C0, 0x002C89, 0x002C81, 0x002C8B, 0x002C83, 0x002C8D, 0x002C85, 0x002C8F, 0x002C87, 0x000111, 0x002C91, 0x000113, 0x002C93, 0x002C95, 0x000117, 0x0118C2, 0x000115, 0x000119, 0x00011B, 0x002C99, 0x002C9B, 0x0118D6, 0x002C9D, 0x0118D0, 0x002C9F, 0x0118D2, 0x000161, 0x001FF4, 0x000163, 0x00A729, 0x001FF6, 0x002CC7, 0x00028C, 0x00A725, 0x001FF2, 0x000289, 0x00028A, 0x00A73D, 0x00A739, 0x001FC6, 0x00A733, 0x001FD7, 0x001FD0, 0x001FD1, 0x001FD2, 0x002CD5, 0x000175, 0x001FD3, 0x001FAC, 0x00017E, 0x00017C, 0x00017A, 0x00017F, 0x001C85, 0x002CD9, 0x001C87, 0x001C88, 0x000171, 0x001FAD, 0x001FAE, 0x000173, 0x002CE1, 0x000165, 0x002CE3, 0x000167, 0x000177, 0x000169, 0x002CEC, 0x00016B, 0x002CEE, 0x00016D, 0x001FAF, 0x00016F, 0x001FA8, 0x001FA9, 0x001FAA, 0x001FAB, 0x001FA4, 0x001FA5, 0x001FA6, 0x001FA7, 0x001FA2, 0x001FA3, 0x001FBC, 0x001FBE, 0x00037B, 0x000377, 0x001FB4, 0x000371, 0x002D20, 0x002D21, 0x002D22, 0x002D23, 0x002D25, 0x002D04, 0x002D27, 0x002D06, 0x001FB6, 0x002D08, 0x001FB0, 0x002D0A, 0x002D24, 0x002D0C, 0x002D2D, 0x002D0E, 0x001FB1, 0x001FB2, 0x001FB3, 0x001F8C, 0x001F8D, 0x001F8E, 0x001F8F, 0x001F88, 0x001F8A, 0x010CED, 0x001F8B, 0x001F84, 0x001F85, 0x001F86, 0x001F87, 0x001F80, 0x002D11, 0x000180, 0x000183, 0x002D13, 0x000195, 0x002D05, 0x000185, 0x002D07, 0x002D17, 0x002D09, 0x000199, 0x002D0B, 0x000188, 0x002D0D, 0x00018C, 0x002D0F, 0x010CC5, 0x010CC4, 0x010CC7, 0x010CC6, 0x010CC9, 0x010CC8, 0x010CCB, 0x010CCA, 0x010CCD, 0x010CCC, 0x010CCF, 0x010CCE, 0x010CD1, 0x010CD0, 0x010CD3, 0x010CD2, 0x0001A1, 0x002D01, 0x0001A3, 0x002D03, 0x0001A5, 0x001F81, 0x001F82, 0x001F83, 0x010CD5, 0x0001A8, 0x010CD4, 0x001F9C, 0x010CE1, 0x010CF1, 0x010CE3, 0x010CE2, 0x010CE0, 0x0001B9, 0x010CE7, 0x010CEB, 0x0001B6, 0x002D15, 0x001F9D, 0x010CEA, 0x002D1E, 0x002D1C, 0x002D1A, 0x002D1F, 0x0001BD, 0x010CF0, 0x0001BF, 0x010CF2, 0x001F9E, 0x010CE5, 0x001F9F, 0x010CE4, 0x0001C5, 0x010CE9, 0x001F98, 0x0001C6, 0x0001C9, 0x0001C8, 0x0001CB, 0x010CEF, 0x001F99, 0x0001CC, 0x001F9A, 0x0001CE, 0x001F9B, 0x001F94, 0x001F95, 0x001F96, 0x001F97, 0x001F90, 0x001F91, 0x001F92, 0x001F93, 0x00A7A9, 0x00A7A5, 0x00A7A7, 0x0001DD, 0x0001DC, 0x0001DF, 0x00A7A1, 0x0001E1, 0x00A7A3, 0x0001E3, 0x00A7B5, 0x0001E5, 0x00A7B7, 0x0001E7, 0x00A78C, 0x00A797, 0x0003F8, 0x0001EB, 0x0001E9, 0x0001ED, 0x00A791, 0x0001EF, 0x0003F5, 0x0003F0, 0x0001F0, 0x0001F3, 0x0001F2, 0x0001F5, 0x0003F1, 0x0003F2, 0x0003F3, 0x0001F9, 0x0003CD, 0x0001FB, 0x0003CE, 0x0001FD, 0x0003C9, 0x0001FF, 0x0003CB, 0x0003C4, 0x0003C7, 0x0003C0, 0x0003C2, 0x0003C3, 0x0003DD, 0x0003DF, 0x010CEC, 0x010CEE, 0x010CE8, 0x010CE6, 0x002C48, 0x002C49, 0x002C4A, 0x000201, 0x002C4B, 0x000211, 0x002C44, 0x000213, 0x002C45, 0x000215, 0x002C46, 0x000217, 0x002C47, 0x002C40, 0x002C41, 0x002C42, 0x002C43, 0x0003BF, 0x010CC0, 0x010CC1, 0x010CC2, 0x010CC3, 0x010CDC, 0x010CDD, 0x010CDE, 0x010CDF, 0x010CD8, 0x010CD9, 0x010CDA, 0x010CDB, 0x010CD6, 0x010CD7, 0x002C38, 0x00022D, 0x002C39, 0x00022F, 0x002C3A, 0x002C3B, 0x002C34, 0x002C35, 0x002C36, 0x001D79, 0x001D7D, 0x002C37, 0x002C31, 0x002C32, 0x002C33, 0x00006C, 0x00006D, 0x00006E, 0x00006F, 0x000068, 0x000069, 0x00006A, 0x00006B, 0x00026C, 0x000064, 0x000065, 0x000247, 0x00AB53, 0x000066, 0x000249, 0x00024B, 0x000067, 0x000061, 0x00024D, 0x00026A, 0x00024F, 0x000062, 0x000251, 0x000063, 0x000253, 0x000252, 0x000078, 0x000254, 0x000257, 0x000256, 0x000079, 0x00007A, 0x000074, 0x000075, 0x000076, 0x000077, 0x00AB79, 0x00AB7B, 0x000261, 0x00AB74, 0x000263, 0x00AB75, 0x00AB76, 0x0118C1, 0x00AB77, 0x0118CF, 0x000269, 0x0118C5, 0x00026B, 0x0118C7, 0x00AB7A, 0x00AB7C, 0x00026F, 0x00AB70, 0x00AB7D, 0x00AB7F, 0x00AB78, 0x00AB7E, 0x000275, 0x000265, 0x00A643, 0x000260, 0x000271, 0x00AB71, 0x00AB72, 0x00A641, 0x00027D, 0x00AB73, 0x001C84, 0x001C86, 0x001C80, 0x000280, 0x000283, 0x000287, 0x00ABB1, 0x00AB90, 0x00ABB3, 0x00AB92, 0x00023F, 0x00AB94, 0x00028B, 0x00AB96, 0x00ABB0, 0x00AB98, 0x00ABB9, 0x00AB9A, 0x00020D, 0x00020F, 0x00A665, 0x000292, 0x00A667, 0x00029D, 0x00021D, 0x00021F, 0x001C81, 0x001C82, 0x001C83, 0x002CF3, 0x002CCD, 0x00029E, 0x002CCF, 0x000288, 0x00AB8C, 0x00AB8D, 0x00AB8E, 0x00AB8F, 0x00ABA1, 0x00AB91, 0x00A66D, 0x00AB93, 0x00A647, 0x00AB95, 0x0118CD, 0x00AB97, 0x0118C3, 0x00AB99, 0x000223, 0x00AB9B, 0x002CC9, 0x0118C9, 0x00A64B, 0x0118CB, 0x0118D9, 0x00A645, 0x0118D3, 0x0118DB, 0x0118D1, 0x0118D4, 0x0118DA, 0x000233, 0x002CCB, 0x001E15, 0x002CC5, 0x000231, 0x0118DD, 0x002CC1, 0x0118DF, 0x001E0D, 0x0118D5, 0x00A649, 0x001E0F, 0x00A657, 0x0118C8, 0x0118CC, 0x00A669, 0x0118CA, 0x002CC3, 0x00A64D, 0x00A663, 0x002CDD, 0x001E13, 0x00A64F, 0x001E17, 0x00A661, 0x0118D8, 0x001E11, 0x00A66B, 0x0118D7, 0x0118DC, 0x002CDF, 0x0118DE, 0x002CDB, 0x00A653, 0x002CD7, 0x00A655, 0x002CD1, 0x00A65D, 0x00A659, 0x00A651, 0x00A65B, 0x002CD3, 0x002CAD, 0x002CAF, 0x00A65F, 0x002CA9, 0x002CAB, 0x002CA5, 0x002CA7, 0x00A687, 0x001E19, 0x001E37, 0x00A685, 0x00A689, 0x002CA1, 0x00A68B, 0x002CA3, 0x00A68D, 0x002CBD, 0x00A68F, 0x002CBF, 0x002CB9, 0x001E1B, 0x001E35, 0x00023C, 0x001E41, 0x002CBB, 0x001E43, 0x002CB5, 0x001E45, 0x002CB7, 0x001E47, 0x002CB1, 0x001E49, 0x002CB3, 0x001E4B, 0x0000EC, 0x001E4D, 0x0000EE, 0x001E4F, 0x0000E8, 0x0000EA, 0x0000E4, 0x0000E6, 0x0000E0, 0x001E55, 0x0000E2, 0x001E57, 0x0000FC, 0x001E59, 0x0000FE, 0x001E5B, 0x0000F8, 0x001E5D, 0x0000FA, 0x001E5F, 0x0000F4, 0x0000F6, 0x002C97, 0x0000F0, 0x0000F2, 0x001E65, 0x0000DF, 0x001E67, 0x00ABAC, 0x001E69, 0x001E6B, 0x001E39, 0x00ABAD, 0x001E6D, 0x00ABAE, 0x001E6F, 0x00ABAF, 0x001E71, 0x001E73, 0x00A697, 0x00ABA8, 0x00ABA9, 0x00ABAA, 0x00ABAB, 0x00ABA4, 0x001E33, 0x00ABA5, 0x00ABA6, 0x00ABA7, 0x00ABA0, 0x00ABA2, 0x001E31, 0x00ABA3, 0x001ED1, 0x00ABBC, 0x001EDB, 0x00A693, 0x00ABBD, 0x000345, 0x001ED5, 0x00ABBE, 0x00ABBF, 0x001E8B, 0x00ABB8, 0x001EBD, 0x001E8D, 0x001E8F, 0x00A691, 0x001EBF, 0x001E91, 0x00ABBA, 0x001E93, 0x00ABBB, 0x001E95, 0x00ABB4, 0x001E97, 0x001E96, 0x00ABB5, 0x001E98, 0x001E9B, 0x001E9A, 0x00ABB6, 0x00ABB7, 0x00ABB2, 0x00AB88, 0x001EA1, 0x00AB89, 0x001EEF, 0x00A695, 0x001EA5, 0x001EA3, 0x001EA7, 0x00AB8A, 0x00A699, 0x00AB8B, 0x00A69B, 0x00AB84, 0x001EAD, 0x00A741, 0x001EAF, 0x00A743, 0x001EB1, 0x00A761, 0x001EB3, 0x00A74B, 0x00AB85, 0x000373, 0x00AB86, 0x00AB87, 0x001EB9, 0x001EA9, 0x00AB80, 0x001ED9, 0x001EB5, 0x00037C, 0x00AB81, 0x001EED, 0x00AB82, 0x001ED7, 0x001EE1, 0x00037D, 0x001EC5, 0x001EE5, 0x001EC7, 0x001EE7, 0x001EC9, 0x00A75D, 0x001ECB, 0x001EEB, 0x001EE9, 0x00AB83, 0x00A723, 0x00A76D, 0x00A765, 0x00A727, 0x001ED3, 0x0024E5, 0x00A72D, 0x000390, 0x001EFD, 0x00A76F, 0x001EFF, 0x00A77C, 0x00A72F, 0x00A72B, 0x0013FD, 0x0003D9, 0x0013FC, 0x00A737, 0x0013F9, 0x0013F8, 0x0013FB, 0x0013FA, 0x0003E5, 0x00A77F, 0x00A73B, 0x00A73F, 0x0003E7, 0x00A735, 0x00A763, 0x001EE3, 0x0003AC, 0x00A745, 0x00A749, 0x00A747, 0x0003AD, 0x0003BD, 0x0003AF, 0x0003AE, 0x0003B1, 0x0003B0, 0x0003B3, 0x0003B2, 0x0003B5, 0x0003B4, 0x0003B7, 0x0003B6, 0x0003B9, 0x0003B8, 0x0003BB, 0x0003BA, 0x00A75F, 0x0003BC, 0x001F06, 0x0003BE, 0x00A759, 0x0003D1, 0x00A75B, 0x0003D0, 0x00A755, 0x0003D5, 0x0003ED, 0x00A757, 0x0003EF, 0x0003E9, 0x00A767, 0x0003DB, 0x00A751, 0x01E925, 0x01E927, 0x0003E3, 0x0003C1, 0x001F11, 0x01E923, 0x001F13, 0x0003E1, 0x00A769, 0x00A76B, 0x0003D6, 0x0003C6, 0x0003C5, 0x001F15, 0x0003D7, 0x010429, 0x01042B, 0x01E936, 0x00A753, 0x01042D, 0x0003C8, 0x01042F, 0x0003CC, 0x01043A, 0x010430, 0x00A77A, 0x010432, 0x010438, 0x010434, 0x0003CA, 0x010436, 0x01E943, 0x001F35, 0x001F37, 0x01E941, 0x01043B, 0x01043F, 0x001F33, 0x01043D, 0x0003EB, 0x010440, 0x010443, 0x0003FB, 0x001F10, 0x001F14, 0x010445, 0x001F12, 0x001F25, 0x001F03, 0x001F27, 0x001F21, 0x010448, 0x001F01, 0x01044C, 0x001F02, 0x00A783, 0x01E93D, 0x001F45, 0x00A793, 0x00A787, 0x00A781, 0x01E92D, 0x001F00, 0x001F53, 0x01E922, 0x01E93F, 0x001F51, 0x001F55, 0x01E926, 0x001F57, 0x01E929, 0x00A799, 0x01E938, 0x00A785, 0x01E92F, 0x0024D1, 0x000438, 0x0024D3, 0x01E92B, 0x0024D5, 0x01E933, 0x0024D7, 0x00A79B, 0x0024D9, 0x01E931, 0x0024DB, 0x01E932, 0x0024DD, 0x00043A, 0x0024DF, 0x00043B, 0x0024E1, 0x01E93B, 0x0024E3, 0x01E930, 0x001F31, 0x001F32, 0x001F23, 0x01E937, 0x000431, 0x001F36, 0x000433, 0x000434, 0x000435, 0x01E934, 0x000437, 0x000436, 0x000439, 0x000430, 0x000432, 0x01E935, 0x00FF45, 0x00043C, 0x00FF4F, 0x0024E7, 0x00A79D, 0x000440, 0x00FF49, 0x000442, 0x00A79F, 0x000444, 0x000447, 0x000446, 0x000449, 0x001F89, 0x0104DD, 0x0104DF, 0x00044D, 0x0104D9, 0x00044F, 0x0104D8, 0x000451, 0x000450, 0x000453, 0x01E924, 0x00AB9C, 0x00AB9D, 0x00AB9E, 0x00FF4D, 0x000459, 0x00AB9F, 0x002D00, 0x00045A, 0x00045D, 0x00045C, 0x00045F, 0x001FA1, 0x000461, 0x001FA0, 0x000463, 0x001F60, 0x000465, 0x002D02, 0x000467, 0x0104F7, 0x00FF41, 0x00046B, 0x00FF43, 0x000469, 0x00046D, 0x00046F, 0x00FF47, 0x001F07, 0x000471, 0x001FB7, 0x000473, 0x001F34, 0x000475, 0x001F04, 0x000477, 0x00FF58, 0x000479, 0x00FF57, 0x00047B, 0x001F05, 0x00FF55, 0x001FC2, 0x00047F, 0x00047D, 0x00FF59, 0x001FC4, 0x001FC7, 0x001FC3, 0x001FE0, 0x00FF4B, 0x001F41, 0x001F43, 0x001FE4, 0x0104DB, 0x001FE6, 0x00FF53, 0x00048D, 0x00FF42, 0x00048F, 0x00FF51, 0x001F63, 0x01E942, 0x00FF44, 0x001FD6, 0x0104E1, 0x01E940, 0x0104E3, 0x001FCC, 0x0104E5, 0x0104EC, 0x0104E7, 0x0104EF, 0x0104E9, 0x0104ED, 0x0104EB, 0x0104EA, 0x001FE5, 0x0104E8, 0x001FE7, 0x0104EE, 0x001FE1, 0x0004A1, 0x001F67, 0x001FE3, 0x001F71, 0x001F73, 0x001FE2, 0x0004A3, 0x0104F9, 0x001FF3, 0x0104FB, 0x001FF7, 0x0004B1, 0x001F52, 0x0004B3, 0x0104DA, 0x0004B5, 0x001F50, 0x0004B7, 0x001F75, 0x0004B9, 0x001FFC, 0x0004BB, 0x001F77, 0x0004BD, 0x002D1D, 0x0004BF, 0x002D18, 0x0004CC, 0x002D19, 0x002D1B, 0x002D14, 0x0004CE, 0x0004C4, 0x002D16, 0x0004C6, 0x0004CF, 0x0004C8, 0x002D10, 0x0004CA, 0x002D12, 0x00014D, 0x00014F, 0x00048B, 0x000148, 0x000149, 0x00014B, 0x000144, 0x000146, 0x000140, 0x000142, 0x00015D, 0x00015F, 0x000159, 0x000491, 0x000493, 0x00015B, 0x000155, 0x000157, 0x000151, 0x0004E1, 0x000153, 0x0004E3, 0x00012D, 0x00012F, 0x000129, 0x00012B, 0x000125, 0x000127, 0x000121, 0x000123, 0x00013C, 0x00013E, 0x00013A, 0x000135, 0x000137, 0x000131, 0x0004F3, 0x000133, 0x0004F1, 0x00010D, 0x00010F, 0x000109, 0x00010B, 0x0004E9, 0x000105, 0x000107, 0x000101, 0x0004FD, 0x0004FF, 0x0004ED, 0x000103, 0x000501, 0x00011D, 0x000503, 0x00011F, 0x000505, 0x00044C, 0x000507, 0x00044E, 0x000509, 0x000448, 0x00050B, 0x00044A, 0x00050D, 0x00050F, 0x00044B, 0x000445, 0x000511, 0x000441, 0x000513, 0x000443, 0x000515, 0x00045E, 0x000517, 0x000458, 0x000519, 0x00045B, 0x00051B, 0x000454, 0x00051D, 0x000455, 0x00051F, 0x000456, 0x000521, 0x000457, 0x000523, 0x000452, 0x000525, 0x000527, 0x0001D8, 0x0001DA, 0x000529, 0x0001D4, 0x00052B, 0x0001D6, 0x0001D0, 0x00056D, 0x0001D2, 0x00056C, 0x0001AD, 0x00043D, 0x00043E, 0x00043F, 0x002170, 0x002172, 0x002173, 0x0001B4, 0x0001B0, 0x01044D, 0x01044E, 0x01044F, 0x010449, 0x01044A, 0x01044B, 0x00052F, 0x010444, 0x010446, 0x010447, 0x010441, 0x010442, 0x00019E, 0x00019A, 0x0004EF, 0x0004EB, 0x0004E5, 0x000192, 0x00056E, 0x0004E7, 0x01042C, 0x01042E, 0x010428, 0x01042A, 0x0004F9, 0x0004FB, 0x0004F5, 0x0004F7, 0x01043C, 0x01043E, 0x010439, 0x010435, 0x010437, 0x010431, 0x010433, 0x0004C2, 0x0004DD, 0x0004DF, 0x0004D9, 0x0004DB, 0x00056F, 0x0004D5, 0x0004D7, 0x0004D1, 0x0004D3, 0x0004AD, 0x0004AF, 0x0004A9, 0x0004AB, 0x0004A5, 0x0004A7, 0x0104E4, 0x0104E6, 0x0104E0, 0x0104E2, 0x00FB14, 0x00FB16, 0x0104F8, 0x0104FA, }; /* indexes */ const uint16_t NU_TOUPPER_VALUES_I[] = { 0x0714, 0x0719, 0x071E, 0x0700, 0x0705, 0x070A, 0x070F, 0x0452, 0x0470, 0x0473, 0x046A, 0x046D, 0x05AE, 0x0464, 0x05B4, 0x0467, 0x05BA, 0x069C, 0x137B, 0x06A6, 0x0563, 0x0566, 0x0569, 0x056C, 0x0557, 0x055A, 0x055D, 0x0548, 0x0560, 0x054E, 0x0551, 0x0554, 0x059F, 0x05A2, 0x05A5, 0x05A8, 0x0593, 0x0596, 0x0599, 0x059C, 0x156D, 0x157B, 0x1573, 0x1570, 0x0587, 0x156A, 0x058A, 0x157E, 0x058D, 0x0590, 0x057B, 0x057E, 0x0581, 0x1577, 0x0584, 0x0D78, 0x0DDC, 0x0DE0, 0x1581, 0x0DCC, 0x158B, 0x0DD4, 0x1595, 0x0DBC, 0x0DC4, 0x09D7, 0x09DB, 0x0A0F, 0x0A13, 0x0A07, 0x0A0B, 0x09FF, 0x0A03, 0x0DAC, 0x0DB4, 0x0D9C, 0x0DA4, 0x0D8C, 0x0D94, 0x0D7C, 0x0D84, 0x09B7, 0x09BB, 0x096F, 0x0973, 0x0967, 0x096B, 0x095F, 0x0963, 0x0957, 0x095B, 0x098F, 0x0993, 0x098B, 0x0927, 0x092B, 0x091F, 0x0923, 0x0917, 0x091B, 0x094F, 0x0953, 0x0BA1, 0x0BA5, 0x0B99, 0x0B9D, 0x0B91, 0x0B95, 0x0B49, 0x0B4D, 0x05B7, 0x05BD, 0x0021, 0x0025, 0x05AB, 0x0023, 0x05B1, 0x001F, 0x0B31, 0x0B35, 0x0B69, 0x0B6D, 0x1326, 0x132E, 0x1316, 0x131E, 0x130E, 0x0288, 0x0284, 0x0B05, 0x135E, 0x1346, 0x134E, 0x1336, 0x133E, 0x0B25, 0x02A1, 0x0B1D, 0x0A27, 0x023E, 0x0A1F, 0x0242, 0x0A23, 0x0272, 0x0A17, 0x0DE4, 0x0A1B, 0x026C, 0x0D34, 0x026F, 0x138C, 0x0254, 0x0225, 0x0228, 0x021F, 0x0222, 0x0E18, 0x0E14, 0x0E20, 0x0E1C, 0x0C61, 0x0EAA, 0x0C65, 0x0EB2, 0x0035, 0x0D68, 0x0C69, 0x0C55, 0x0E54, 0x0D70, 0x0EAE, 0x0D74, 0x0E58, 0x0E98, 0x0E60, 0x0E5C, 0x0E68, 0x0E64, 0x0E70, 0x0E6C, 0x0E78, 0x0E74, 0x0E80, 0x0E7C, 0x0E88, 0x0E84, 0x0E90, 0x0E8C, 0x0D4C, 0x0E94, 0x0D54, 0x0E9C, 0x0D5C, 0x0D3C, 0x0D64, 0x0D60, 0x0D6C, 0x0D48, 0x0D50, 0x0D58, 0x0053, 0x003B, 0x0059, 0x0041, 0x005F, 0x0047, 0x0065, 0x004D, 0x0EA0, 0x006B, 0x0EB6, 0x0071, 0x0077, 0x0C59, 0x0CA1, 0x0EBA, 0x0EA7, 0x0EA4, 0x0080, 0x0086, 0x0CA5, 0x008C, 0x0C91, 0x0092, 0x0C95, 0x0C99, 0x0C9D, 0x0C81, 0x0C89, 0x0C71, 0x0C79, 0x01F8, 0x01FB, 0x01F2, 0x01F5, 0x0C39, 0x01EF, 0x0C29, 0x0C31, 0x0210, 0x0213, 0x13A0, 0x13A7, 0x108E, 0x1092, 0x0BF9, 0x0C01, 0x0BE9, 0x0BF1, 0x0A6D, 0x0A77, 0x0A59, 0x0A63, 0x0C09, 0x0AC1, 0x0ACB, 0x0AB2, 0x0AB7, 0x1116, 0x111A, 0x0881, 0x084F, 0x0859, 0x083B, 0x0ECE, 0x0EBE, 0x0ED2, 0x0EC2, 0x0ED6, 0x0EC6, 0x0EDA, 0x0ECA, 0x00AD, 0x0EDE, 0x00B0, 0x0EE2, 0x0EE6, 0x00B6, 0x0845, 0x00B3, 0x00B9, 0x00BC, 0x0EEE, 0x0EF2, 0x08A9, 0x0EF6, 0x088B, 0x0EFA, 0x0895, 0x0121, 0x1554, 0x0124, 0x10D2, 0x1559, 0x0F4A, 0x02C1, 0x10CA, 0x1549, 0x02B8, 0x02BB, 0x10F6, 0x10EE, 0x14FF, 0x10E2, 0x1523, 0x0D1C, 0x0D20, 0x1510, 0x0F66, 0x013F, 0x1517, 0x14B6, 0x014B, 0x0148, 0x0145, 0x014E, 0x0902, 0x0F6E, 0x0908, 0x090B, 0x0139, 0x14BC, 0x14C2, 0x013C, 0x0F7E, 0x0127, 0x0F82, 0x012A, 0x0142, 0x012D, 0x0F86, 0x0130, 0x0F8A, 0x0133, 0x14C8, 0x0136, 0x149E, 0x14A4, 0x14AA, 0x14B0, 0x1486, 0x148C, 0x1492, 0x1498, 0x147A, 0x1480, 0x14EA, 0x0D15, 0x02DB, 0x02D8, 0x14D9, 0x02D2, 0x1012, 0x1016, 0x101A, 0x101E, 0x1026, 0x0FA2, 0x102A, 0x0FAA, 0x14DE, 0x0FB2, 0x0D09, 0x0FBA, 0x1022, 0x0FC2, 0x102E, 0x0FCA, 0x0D0D, 0x14CE, 0x14D4, 0x13F6, 0x13FC, 0x1402, 0x1408, 0x13DE, 0x13EA, 0x081D, 0x13F0, 0x13C6, 0x13CC, 0x13D2, 0x13D8, 0x13AE, 0x0FD6, 0x0150, 0x0153, 0x0FDE, 0x0162, 0x0FA6, 0x0156, 0x0FAE, 0x0FEE, 0x0FB6, 0x0165, 0x0FBE, 0x0159, 0x0FC6, 0x015C, 0x0FCE, 0x0755, 0x0750, 0x075F, 0x075A, 0x0769, 0x0764, 0x0773, 0x076E, 0x077D, 0x0778, 0x0787, 0x0782, 0x0791, 0x078C, 0x079B, 0x0796, 0x016E, 0x0F96, 0x0171, 0x0F9E, 0x0174, 0x13B4, 0x13BA, 0x13C0, 0x07A5, 0x0177, 0x07A0, 0x1456, 0x07E1, 0x0831, 0x07EB, 0x07E6, 0x07DC, 0x0186, 0x07FF, 0x0813, 0x0183, 0x0FE6, 0x145C, 0x080E, 0x100A, 0x1002, 0x0FFA, 0x100E, 0x0189, 0x082C, 0x018C, 0x0836, 0x1462, 0x07F5, 0x1468, 0x07F0, 0x018F, 0x0809, 0x143E, 0x0192, 0x0198, 0x0195, 0x019B, 0x0827, 0x1444, 0x019E, 0x144A, 0x01A1, 0x1450, 0x1426, 0x142C, 0x1432, 0x1438, 0x140E, 0x1414, 0x141A, 0x1420, 0x11AA, 0x11A2, 0x11A6, 0x01B9, 0x01B6, 0x01BC, 0x119A, 0x01BF, 0x119E, 0x01C2, 0x11AE, 0x01C5, 0x11B2, 0x01C8, 0x117A, 0x1186, 0x038C, 0x01CE, 0x01CB, 0x01D1, 0x117E, 0x01D4, 0x0389, 0x037D, 0x1369, 0x01DA, 0x01D7, 0x01DD, 0x0380, 0x0383, 0x0386, 0x01E0, 0x0344, 0x01E3, 0x0347, 0x01E6, 0x0338, 0x01E9, 0x033E, 0x0329, 0x0332, 0x031D, 0x0323, 0x0326, 0x035F, 0x0362, 0x0818, 0x0822, 0x0804, 0x07FA, 0x0E44, 0x0E48, 0x0E4C, 0x01EC, 0x0E50, 0x0204, 0x0E34, 0x0207, 0x0E38, 0x020A, 0x0E3C, 0x020D, 0x0E40, 0x0E24, 0x0E28, 0x0E2C, 0x0E30, 0x031A, 0x073C, 0x0741, 0x0746, 0x074B, 0x07C8, 0x07CD, 0x07D2, 0x07D7, 0x07B4, 0x07B9, 0x07BE, 0x07C3, 0x07AA, 0x07AF, 0x0E04, 0x022B, 0x0E08, 0x022E, 0x0E0C, 0x0E10, 0x0DF4, 0x0DF8, 0x0DFC, 0x090F, 0x0913, 0x0E00, 0x0DE8, 0x0DEC, 0x0DF0, 0x0017, 0x0019, 0x001B, 0x001D, 0x000F, 0x0011, 0x0013, 0x0015, 0x0296, 0x0007, 0x0009, 0x0245, 0x11B6, 0x000B, 0x0248, 0x024B, 0x000D, 0x0001, 0x024E, 0x028E, 0x0251, 0x0003, 0x0258, 0x0005, 0x0260, 0x025C, 0x002F, 0x0263, 0x0269, 0x0266, 0x0031, 0x0033, 0x0027, 0x0029, 0x002B, 0x002D, 0x11DE, 0x11E6, 0x0279, 0x11CA, 0x027D, 0x11CE, 0x11D2, 0x0840, 0x11D6, 0x0886, 0x028B, 0x0854, 0x0292, 0x085E, 0x11E2, 0x11EA, 0x029A, 0x11BA, 0x11EE, 0x11F6, 0x11DA, 0x11F2, 0x02A4, 0x0280, 0x1036, 0x0276, 0x029D, 0x11BE, 0x11C2, 0x1032, 0x02A7, 0x11C6, 0x08FF, 0x0905, 0x08F3, 0x02AB, 0x02AE, 0x02B1, 0x12BE, 0x123A, 0x12C6, 0x1242, 0x023A, 0x124A, 0x02BE, 0x1252, 0x12BA, 0x125A, 0x12DE, 0x1262, 0x01FE, 0x0201, 0x107A, 0x02C4, 0x107E, 0x02C7, 0x0216, 0x0219, 0x08F6, 0x08F9, 0x08FC, 0x0F8E, 0x0F56, 0x02CB, 0x0F5A, 0x02B5, 0x122A, 0x122E, 0x1232, 0x1236, 0x127E, 0x123E, 0x108A, 0x1246, 0x103E, 0x124E, 0x087C, 0x1256, 0x084A, 0x125E, 0x021C, 0x1266, 0x0F4E, 0x0868, 0x1046, 0x0872, 0x08B8, 0x103A, 0x089A, 0x08C2, 0x0890, 0x089F, 0x08BD, 0x0234, 0x0F52, 0x093F, 0x0F46, 0x0231, 0x08CC, 0x0F3E, 0x08D6, 0x092F, 0x08A4, 0x1042, 0x0933, 0x105E, 0x0863, 0x0877, 0x1082, 0x086D, 0x0F42, 0x104A, 0x1076, 0x0F76, 0x093B, 0x104E, 0x0943, 0x1072, 0x08B3, 0x0937, 0x1086, 0x08AE, 0x08C7, 0x0F7A, 0x08D1, 0x0F72, 0x1056, 0x0F6A, 0x105A, 0x0F5E, 0x106A, 0x1062, 0x1052, 0x1066, 0x0F62, 0x0F16, 0x0F1A, 0x106E, 0x0F0E, 0x0F12, 0x0F06, 0x0F0A, 0x109A, 0x0947, 0x0983, 0x1096, 0x109E, 0x0EFE, 0x10A2, 0x0F02, 0x10A6, 0x0F36, 0x10AA, 0x0F3A, 0x0F2E, 0x094B, 0x097F, 0x0237, 0x0997, 0x0F32, 0x099B, 0x0F26, 0x099F, 0x0F2A, 0x09A3, 0x0F1E, 0x09A7, 0x0F22, 0x09AB, 0x005C, 0x09AF, 0x0062, 0x09B3, 0x0050, 0x0056, 0x0044, 0x004A, 0x0038, 0x09BF, 0x003E, 0x09C3, 0x0089, 0x09C7, 0x008F, 0x09CB, 0x007D, 0x09CF, 0x0083, 0x09D3, 0x0074, 0x007A, 0x0EEA, 0x0068, 0x006E, 0x09DF, 0x1362, 0x09E3, 0x12AA, 0x09E7, 0x09EB, 0x0987, 0x12AE, 0x09EF, 0x12B2, 0x09F3, 0x12B6, 0x09F7, 0x09FB, 0x10BA, 0x129A, 0x129E, 0x12A2, 0x12A6, 0x128A, 0x097B, 0x128E, 0x1292, 0x1296, 0x127A, 0x1282, 0x0977, 0x1286, 0x0B51, 0x12EA, 0x0B65, 0x10B2, 0x12EE, 0x02CF, 0x0B59, 0x12F2, 0x12F6, 0x0A2B, 0x12DA, 0x0B29, 0x0A2F, 0x0A33, 0x10AE, 0x0B2D, 0x0A37, 0x12E2, 0x0A81, 0x12E6, 0x0AE9, 0x12CA, 0x1384, 0x1380, 0x12CE, 0x1388, 0x0AED, 0x1390, 0x12D2, 0x12D6, 0x12C2, 0x121A, 0x0AF1, 0x121E, 0x0B8D, 0x10B6, 0x0AF9, 0x0AF5, 0x0AFD, 0x1222, 0x10BE, 0x1226, 0x10C2, 0x120A, 0x0B09, 0x10FE, 0x0B0D, 0x1102, 0x0B11, 0x113E, 0x0B15, 0x1112, 0x120E, 0x02D5, 0x1212, 0x1216, 0x0B21, 0x0B01, 0x11FA, 0x0B61, 0x0B19, 0x02DE, 0x11FE, 0x0B89, 0x1202, 0x0B5D, 0x0B71, 0x02E1, 0x0B39, 0x0B79, 0x0B3D, 0x0B7D, 0x0B41, 0x1136, 0x0B45, 0x0B85, 0x0B81, 0x1206, 0x10C6, 0x1156, 0x1146, 0x10CE, 0x0B55, 0x0DD0, 0x10DA, 0x136D, 0x0BA9, 0x115A, 0x0BAD, 0x1162, 0x10DE, 0x10D6, 0x08EF, 0x0359, 0x08EB, 0x10EA, 0x08DF, 0x08DB, 0x08E7, 0x08E3, 0x036B, 0x1166, 0x10F2, 0x10FA, 0x036E, 0x10E6, 0x1142, 0x0B75, 0x02E4, 0x1106, 0x110E, 0x110A, 0x02E7, 0x0314, 0x02ED, 0x02EA, 0x02F0, 0x1374, 0x02F6, 0x02F3, 0x02FC, 0x02F9, 0x0302, 0x02FF, 0x0308, 0x0305, 0x030E, 0x030B, 0x113A, 0x0311, 0x0BC9, 0x0317, 0x112E, 0x034D, 0x1132, 0x034A, 0x1126, 0x0350, 0x0377, 0x112A, 0x037A, 0x0371, 0x114A, 0x035C, 0x111E, 0x0A4A, 0x0A54, 0x0368, 0x0320, 0x0BD5, 0x0A40, 0x0BDD, 0x0365, 0x114E, 0x1152, 0x0353, 0x032F, 0x032C, 0x0BE5, 0x0356, 0x05C5, 0x05CF, 0x0AA3, 0x1122, 0x05D9, 0x0335, 0x05E3, 0x0341, 0x061A, 0x05E8, 0x115E, 0x05F2, 0x0610, 0x05FC, 0x033B, 0x0606, 0x0AE4, 0x0C1D, 0x0C25, 0x0ADA, 0x061F, 0x0633, 0x0C15, 0x0629, 0x0374, 0x0638, 0x0647, 0x038F, 0x0BD1, 0x0BE1, 0x0651, 0x0BD9, 0x0BFD, 0x0BBD, 0x0C05, 0x0BED, 0x0660, 0x0BB5, 0x0674, 0x0BB9, 0x116E, 0x0AC6, 0x0C3D, 0x1182, 0x1176, 0x116A, 0x0A72, 0x0BB1, 0x0C45, 0x0A3B, 0x0AD0, 0x0C41, 0x0C49, 0x0A4F, 0x0C4D, 0x0A5E, 0x118A, 0x0AAD, 0x1172, 0x0A7C, 0x0D80, 0x03AA, 0x0D88, 0x0A68, 0x0D90, 0x0A94, 0x0D98, 0x118E, 0x0DA0, 0x0A8A, 0x0DA8, 0x0A8F, 0x0DB0, 0x03B0, 0x0DB8, 0x03B3, 0x0DC0, 0x0ABC, 0x0DC8, 0x0A85, 0x0C0D, 0x0C11, 0x0BF5, 0x0AA8, 0x0395, 0x0C21, 0x039B, 0x039E, 0x03A1, 0x0A99, 0x03A7, 0x03A4, 0x03AD, 0x0392, 0x0398, 0x0A9E, 0x130A, 0x03B6, 0x1332, 0x0DD8, 0x1192, 0x03C2, 0x131A, 0x03C8, 0x1196, 0x03CE, 0x03D7, 0x03D4, 0x03DD, 0x13E4, 0x06A1, 0x06AB, 0x03E9, 0x068D, 0x03EF, 0x0688, 0x03F5, 0x03F2, 0x03FB, 0x0A45, 0x126A, 0x126E, 0x1272, 0x132A, 0x040D, 0x1276, 0x0F92, 0x0410, 0x0419, 0x0416, 0x041F, 0x1474, 0x0422, 0x146E, 0x0425, 0x0C51, 0x0428, 0x0F9A, 0x042B, 0x0723, 0x12FA, 0x0431, 0x1302, 0x042E, 0x0434, 0x0437, 0x1312, 0x0BCD, 0x043A, 0x14E3, 0x043D, 0x0C19, 0x0440, 0x0BC1, 0x0443, 0x1356, 0x0446, 0x1352, 0x0449, 0x0BC5, 0x134A, 0x14EF, 0x044F, 0x044C, 0x135A, 0x14FA, 0x1504, 0x14F5, 0x0D24, 0x1322, 0x0C2D, 0x0C35, 0x1538, 0x0697, 0x153D, 0x1342, 0x0458, 0x12FE, 0x045B, 0x133A, 0x0C5D, 0x0ADF, 0x1306, 0x151E, 0x06B5, 0x0AD5, 0x06BF, 0x150B, 0x06C9, 0x06EC, 0x06D3, 0x06FB, 0x06DD, 0x06F1, 0x06E7, 0x06E2, 0x0D2C, 0x06D8, 0x1542, 0x06F6, 0x0D28, 0x0476, 0x0C6D, 0x1531, 0x0C75, 0x0C7D, 0x152A, 0x0479, 0x072D, 0x154F, 0x0737, 0x155E, 0x048E, 0x1399, 0x0491, 0x0692, 0x0494, 0x1394, 0x0497, 0x0C85, 0x049A, 0x1565, 0x049D, 0x0C8D, 0x04A0, 0x1006, 0x04A3, 0x0FF2, 0x04B5, 0x0FF6, 0x0FFE, 0x0FE2, 0x04B8, 0x04A9, 0x0FEA, 0x04AC, 0x04BB, 0x04AF, 0x0FD2, 0x04B2, 0x0FDA, 0x0103, 0x0106, 0x0455, 0x00FD, 0x1365, 0x0100, 0x00F7, 0x00FA, 0x00F1, 0x00F4, 0x011B, 0x011E, 0x0115, 0x045E, 0x0461, 0x0118, 0x010F, 0x0112, 0x0109, 0x04D6, 0x010C, 0x04D9, 0x00D7, 0x00DA, 0x00D1, 0x00D4, 0x00CB, 0x00CE, 0x00C5, 0x00C8, 0x00EB, 0x00EE, 0x00E8, 0x00E2, 0x00E5, 0x00DD, 0x04F1, 0x00DF, 0x04EE, 0x00A7, 0x00AA, 0x00A1, 0x00A4, 0x04E2, 0x009B, 0x009E, 0x0095, 0x0500, 0x0503, 0x04E8, 0x0098, 0x0506, 0x00BF, 0x0509, 0x00C2, 0x050C, 0x03E6, 0x050F, 0x03EC, 0x0512, 0x03DA, 0x0515, 0x03E0, 0x0518, 0x051B, 0x03E3, 0x03D1, 0x051E, 0x03C5, 0x0521, 0x03CB, 0x0524, 0x041C, 0x0527, 0x040A, 0x052A, 0x0413, 0x052D, 0x03FE, 0x0530, 0x0401, 0x0533, 0x0404, 0x0536, 0x0407, 0x0539, 0x03F8, 0x053C, 0x053F, 0x01B0, 0x01B3, 0x0542, 0x01AA, 0x0545, 0x01AD, 0x01A4, 0x0572, 0x01A7, 0x056F, 0x017A, 0x03B9, 0x03BC, 0x03BF, 0x0D38, 0x0D40, 0x0D44, 0x0180, 0x017D, 0x0679, 0x067E, 0x0683, 0x0665, 0x066A, 0x066F, 0x054B, 0x064C, 0x0656, 0x065B, 0x063D, 0x0642, 0x016B, 0x0168, 0x04EB, 0x04E5, 0x04DC, 0x015F, 0x0575, 0x04DF, 0x05D4, 0x05DE, 0x05C0, 0x05CA, 0x04FA, 0x04FD, 0x04F4, 0x04F7, 0x0624, 0x062E, 0x0615, 0x0601, 0x060B, 0x05ED, 0x05F7, 0x04A6, 0x04D0, 0x04D3, 0x04CA, 0x04CD, 0x0578, 0x04C4, 0x04C7, 0x04BE, 0x04C1, 0x0488, 0x048B, 0x0482, 0x0485, 0x047C, 0x047F, 0x06C4, 0x06CE, 0x06B0, 0x06BA, 0x1586, 0x1590, 0x0728, 0x0732, }; const uint8_t NU_TOUPPER_COMBINED[] = { 0x00, 0x41, 0x00, 0x42, 0x00, 0x43, 0x00, 0x44, 0x00, 0x45, 0x00, 0x46, 0x00, 0x47, 0x00, 0x48, 0x00, 0x49, 0x00, 0x4A, 0x00, 0x4B, 0x00, 0x4C, 0x00, 0x4D, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x50, 0x00, 0x51, 0x00, 0x52, 0x00, 0x53, 0x00, 0x54, 0x00, 0x55, 0x00, 0x56, 0x00, 0x57, 0x00, 0x58, 0x00, 0x59, 0x00, 0x5A, 0x00, 0xCE, 0x9C, 0x00, 0xC3, 0x80, 0x00, 0xC3, 0x81, 0x00, 0xC3, 0x82, 0x00, 0xC3, 0x83, 0x00, 0xC3, 0x84, 0x00, 0xC3, 0x85, 0x00, 0xC3, 0x86, 0x00, 0xC3, 0x87, 0x00, 0xC3, 0x88, 0x00, 0xC3, 0x89, 0x00, 0xC3, 0x8A, 0x00, 0xC3, 0x8B, 0x00, 0xC3, 0x8C, 0x00, 0xC3, 0x8D, 0x00, 0xC3, 0x8E, 0x00, 0xC3, 0x8F, 0x00, 0xC3, 0x90, 0x00, 0xC3, 0x91, 0x00, 0xC3, 0x92, 0x00, 0xC3, 0x93, 0x00, 0xC3, 0x94, 0x00, 0xC3, 0x95, 0x00, 0xC3, 0x96, 0x00, 0xC3, 0x98, 0x00, 0xC3, 0x99, 0x00, 0xC3, 0x9A, 0x00, 0xC3, 0x9B, 0x00, 0xC3, 0x9C, 0x00, 0xC3, 0x9D, 0x00, 0xC3, 0x9E, 0x00, 0xC5, 0xB8, 0x00, 0xC4, 0x80, 0x00, 0xC4, 0x82, 0x00, 0xC4, 0x84, 0x00, 0xC4, 0x86, 0x00, 0xC4, 0x88, 0x00, 0xC4, 0x8A, 0x00, 0xC4, 0x8C, 0x00, 0xC4, 0x8E, 0x00, 0xC4, 0x90, 0x00, 0xC4, 0x92, 0x00, 0xC4, 0x94, 0x00, 0xC4, 0x96, 0x00, 0xC4, 0x98, 0x00, 0xC4, 0x9A, 0x00, 0xC4, 0x9C, 0x00, 0xC4, 0x9E, 0x00, 0xC4, 0xA0, 0x00, 0xC4, 0xA2, 0x00, 0xC4, 0xA4, 0x00, 0xC4, 0xA6, 0x00, 0xC4, 0xA8, 0x00, 0xC4, 0xAA, 0x00, 0xC4, 0xAC, 0x00, 0xC4, 0xAE, 0x00, 0x49, 0x00, 0xC4, 0xB2, 0x00, 0xC4, 0xB4, 0x00, 0xC4, 0xB6, 0x00, 0xC4, 0xB9, 0x00, 0xC4, 0xBB, 0x00, 0xC4, 0xBD, 0x00, 0xC4, 0xBF, 0x00, 0xC5, 0x81, 0x00, 0xC5, 0x83, 0x00, 0xC5, 0x85, 0x00, 0xC5, 0x87, 0x00, 0xC5, 0x8A, 0x00, 0xC5, 0x8C, 0x00, 0xC5, 0x8E, 0x00, 0xC5, 0x90, 0x00, 0xC5, 0x92, 0x00, 0xC5, 0x94, 0x00, 0xC5, 0x96, 0x00, 0xC5, 0x98, 0x00, 0xC5, 0x9A, 0x00, 0xC5, 0x9C, 0x00, 0xC5, 0x9E, 0x00, 0xC5, 0xA0, 0x00, 0xC5, 0xA2, 0x00, 0xC5, 0xA4, 0x00, 0xC5, 0xA6, 0x00, 0xC5, 0xA8, 0x00, 0xC5, 0xAA, 0x00, 0xC5, 0xAC, 0x00, 0xC5, 0xAE, 0x00, 0xC5, 0xB0, 0x00, 0xC5, 0xB2, 0x00, 0xC5, 0xB4, 0x00, 0xC5, 0xB6, 0x00, 0xC5, 0xB9, 0x00, 0xC5, 0xBB, 0x00, 0xC5, 0xBD, 0x00, 0x53, 0x00, 0xC9, 0x83, 0x00, 0xC6, 0x82, 0x00, 0xC6, 0x84, 0x00, 0xC6, 0x87, 0x00, 0xC6, 0x8B, 0x00, 0xC6, 0x91, 0x00, 0xC7, 0xB6, 0x00, 0xC6, 0x98, 0x00, 0xC8, 0xBD, 0x00, 0xC8, 0xA0, 0x00, 0xC6, 0xA0, 0x00, 0xC6, 0xA2, 0x00, 0xC6, 0xA4, 0x00, 0xC6, 0xA7, 0x00, 0xC6, 0xAC, 0x00, 0xC6, 0xAF, 0x00, 0xC6, 0xB3, 0x00, 0xC6, 0xB5, 0x00, 0xC6, 0xB8, 0x00, 0xC6, 0xBC, 0x00, 0xC7, 0xB7, 0x00, 0xC7, 0x84, 0x00, 0xC7, 0x84, 0x00, 0xC7, 0x87, 0x00, 0xC7, 0x87, 0x00, 0xC7, 0x8A, 0x00, 0xC7, 0x8A, 0x00, 0xC7, 0x8D, 0x00, 0xC7, 0x8F, 0x00, 0xC7, 0x91, 0x00, 0xC7, 0x93, 0x00, 0xC7, 0x95, 0x00, 0xC7, 0x97, 0x00, 0xC7, 0x99, 0x00, 0xC7, 0x9B, 0x00, 0xC6, 0x8E, 0x00, 0xC7, 0x9E, 0x00, 0xC7, 0xA0, 0x00, 0xC7, 0xA2, 0x00, 0xC7, 0xA4, 0x00, 0xC7, 0xA6, 0x00, 0xC7, 0xA8, 0x00, 0xC7, 0xAA, 0x00, 0xC7, 0xAC, 0x00, 0xC7, 0xAE, 0x00, 0xC7, 0xB1, 0x00, 0xC7, 0xB1, 0x00, 0xC7, 0xB4, 0x00, 0xC7, 0xB8, 0x00, 0xC7, 0xBA, 0x00, 0xC7, 0xBC, 0x00, 0xC7, 0xBE, 0x00, 0xC8, 0x80, 0x00, 0xC8, 0x82, 0x00, 0xC8, 0x84, 0x00, 0xC8, 0x86, 0x00, 0xC8, 0x88, 0x00, 0xC8, 0x8A, 0x00, 0xC8, 0x8C, 0x00, 0xC8, 0x8E, 0x00, 0xC8, 0x90, 0x00, 0xC8, 0x92, 0x00, 0xC8, 0x94, 0x00, 0xC8, 0x96, 0x00, 0xC8, 0x98, 0x00, 0xC8, 0x9A, 0x00, 0xC8, 0x9C, 0x00, 0xC8, 0x9E, 0x00, 0xC8, 0xA2, 0x00, 0xC8, 0xA4, 0x00, 0xC8, 0xA6, 0x00, 0xC8, 0xA8, 0x00, 0xC8, 0xAA, 0x00, 0xC8, 0xAC, 0x00, 0xC8, 0xAE, 0x00, 0xC8, 0xB0, 0x00, 0xC8, 0xB2, 0x00, 0xC8, 0xBB, 0x00, 0xE2, 0xB1, 0xBE, 0x00, 0xE2, 0xB1, 0xBF, 0x00, 0xC9, 0x81, 0x00, 0xC9, 0x86, 0x00, 0xC9, 0x88, 0x00, 0xC9, 0x8A, 0x00, 0xC9, 0x8C, 0x00, 0xC9, 0x8E, 0x00, 0xE2, 0xB1, 0xAF, 0x00, 0xE2, 0xB1, 0xAD, 0x00, 0xE2, 0xB1, 0xB0, 0x00, 0xC6, 0x81, 0x00, 0xC6, 0x86, 0x00, 0xC6, 0x89, 0x00, 0xC6, 0x8A, 0x00, 0xC6, 0x8F, 0x00, 0xC6, 0x90, 0x00, 0xEA, 0x9E, 0xAB, 0x00, 0xC6, 0x93, 0x00, 0xEA, 0x9E, 0xAC, 0x00, 0xC6, 0x94, 0x00, 0xEA, 0x9E, 0x8D, 0x00, 0xEA, 0x9E, 0xAA, 0x00, 0xC6, 0x97, 0x00, 0xC6, 0x96, 0x00, 0xEA, 0x9E, 0xAE, 0x00, 0xE2, 0xB1, 0xA2, 0x00, 0xEA, 0x9E, 0xAD, 0x00, 0xC6, 0x9C, 0x00, 0xE2, 0xB1, 0xAE, 0x00, 0xC6, 0x9D, 0x00, 0xC6, 0x9F, 0x00, 0xE2, 0xB1, 0xA4, 0x00, 0xC6, 0xA6, 0x00, 0xC6, 0xA9, 0x00, 0xEA, 0x9E, 0xB1, 0x00, 0xC6, 0xAE, 0x00, 0xC9, 0x84, 0x00, 0xC6, 0xB1, 0x00, 0xC6, 0xB2, 0x00, 0xC9, 0x85, 0x00, 0xC6, 0xB7, 0x00, 0xEA, 0x9E, 0xB2, 0x00, 0xEA, 0x9E, 0xB0, 0x00, 0xCE, 0x99, 0x00, 0xCD, 0xB0, 0x00, 0xCD, 0xB2, 0x00, 0xCD, 0xB6, 0x00, 0xCF, 0xBD, 0x00, 0xCF, 0xBE, 0x00, 0xCF, 0xBF, 0x00, 0xCE, 0x86, 0x00, 0xCE, 0x88, 0x00, 0xCE, 0x89, 0x00, 0xCE, 0x8A, 0x00, 0xCE, 0x91, 0x00, 0xCE, 0x92, 0x00, 0xCE, 0x93, 0x00, 0xCE, 0x94, 0x00, 0xCE, 0x95, 0x00, 0xCE, 0x96, 0x00, 0xCE, 0x97, 0x00, 0xCE, 0x98, 0x00, 0xCE, 0x99, 0x00, 0xCE, 0x9A, 0x00, 0xCE, 0x9B, 0x00, 0xCE, 0x9C, 0x00, 0xCE, 0x9D, 0x00, 0xCE, 0x9E, 0x00, 0xCE, 0x9F, 0x00, 0xCE, 0xA0, 0x00, 0xCE, 0xA1, 0x00, 0xCE, 0xA3, 0x00, 0xCE, 0xA3, 0x00, 0xCE, 0xA4, 0x00, 0xCE, 0xA5, 0x00, 0xCE, 0xA6, 0x00, 0xCE, 0xA7, 0x00, 0xCE, 0xA8, 0x00, 0xCE, 0xA9, 0x00, 0xCE, 0xAA, 0x00, 0xCE, 0xAB, 0x00, 0xCE, 0x8C, 0x00, 0xCE, 0x8E, 0x00, 0xCE, 0x8F, 0x00, 0xCE, 0x92, 0x00, 0xCE, 0x98, 0x00, 0xCE, 0xA6, 0x00, 0xCE, 0xA0, 0x00, 0xCF, 0x8F, 0x00, 0xCF, 0x98, 0x00, 0xCF, 0x9A, 0x00, 0xCF, 0x9C, 0x00, 0xCF, 0x9E, 0x00, 0xCF, 0xA0, 0x00, 0xCF, 0xA2, 0x00, 0xCF, 0xA4, 0x00, 0xCF, 0xA6, 0x00, 0xCF, 0xA8, 0x00, 0xCF, 0xAA, 0x00, 0xCF, 0xAC, 0x00, 0xCF, 0xAE, 0x00, 0xCE, 0x9A, 0x00, 0xCE, 0xA1, 0x00, 0xCF, 0xB9, 0x00, 0xCD, 0xBF, 0x00, 0xCE, 0x95, 0x00, 0xCF, 0xB7, 0x00, 0xCF, 0xBA, 0x00, 0xD0, 0x90, 0x00, 0xD0, 0x91, 0x00, 0xD0, 0x92, 0x00, 0xD0, 0x93, 0x00, 0xD0, 0x94, 0x00, 0xD0, 0x95, 0x00, 0xD0, 0x96, 0x00, 0xD0, 0x97, 0x00, 0xD0, 0x98, 0x00, 0xD0, 0x99, 0x00, 0xD0, 0x9A, 0x00, 0xD0, 0x9B, 0x00, 0xD0, 0x9C, 0x00, 0xD0, 0x9D, 0x00, 0xD0, 0x9E, 0x00, 0xD0, 0x9F, 0x00, 0xD0, 0xA0, 0x00, 0xD0, 0xA1, 0x00, 0xD0, 0xA2, 0x00, 0xD0, 0xA3, 0x00, 0xD0, 0xA4, 0x00, 0xD0, 0xA5, 0x00, 0xD0, 0xA6, 0x00, 0xD0, 0xA7, 0x00, 0xD0, 0xA8, 0x00, 0xD0, 0xA9, 0x00, 0xD0, 0xAA, 0x00, 0xD0, 0xAB, 0x00, 0xD0, 0xAC, 0x00, 0xD0, 0xAD, 0x00, 0xD0, 0xAE, 0x00, 0xD0, 0xAF, 0x00, 0xD0, 0x80, 0x00, 0xD0, 0x81, 0x00, 0xD0, 0x82, 0x00, 0xD0, 0x83, 0x00, 0xD0, 0x84, 0x00, 0xD0, 0x85, 0x00, 0xD0, 0x86, 0x00, 0xD0, 0x87, 0x00, 0xD0, 0x88, 0x00, 0xD0, 0x89, 0x00, 0xD0, 0x8A, 0x00, 0xD0, 0x8B, 0x00, 0xD0, 0x8C, 0x00, 0xD0, 0x8D, 0x00, 0xD0, 0x8E, 0x00, 0xD0, 0x8F, 0x00, 0xD1, 0xA0, 0x00, 0xD1, 0xA2, 0x00, 0xD1, 0xA4, 0x00, 0xD1, 0xA6, 0x00, 0xD1, 0xA8, 0x00, 0xD1, 0xAA, 0x00, 0xD1, 0xAC, 0x00, 0xD1, 0xAE, 0x00, 0xD1, 0xB0, 0x00, 0xD1, 0xB2, 0x00, 0xD1, 0xB4, 0x00, 0xD1, 0xB6, 0x00, 0xD1, 0xB8, 0x00, 0xD1, 0xBA, 0x00, 0xD1, 0xBC, 0x00, 0xD1, 0xBE, 0x00, 0xD2, 0x80, 0x00, 0xD2, 0x8A, 0x00, 0xD2, 0x8C, 0x00, 0xD2, 0x8E, 0x00, 0xD2, 0x90, 0x00, 0xD2, 0x92, 0x00, 0xD2, 0x94, 0x00, 0xD2, 0x96, 0x00, 0xD2, 0x98, 0x00, 0xD2, 0x9A, 0x00, 0xD2, 0x9C, 0x00, 0xD2, 0x9E, 0x00, 0xD2, 0xA0, 0x00, 0xD2, 0xA2, 0x00, 0xD2, 0xA4, 0x00, 0xD2, 0xA6, 0x00, 0xD2, 0xA8, 0x00, 0xD2, 0xAA, 0x00, 0xD2, 0xAC, 0x00, 0xD2, 0xAE, 0x00, 0xD2, 0xB0, 0x00, 0xD2, 0xB2, 0x00, 0xD2, 0xB4, 0x00, 0xD2, 0xB6, 0x00, 0xD2, 0xB8, 0x00, 0xD2, 0xBA, 0x00, 0xD2, 0xBC, 0x00, 0xD2, 0xBE, 0x00, 0xD3, 0x81, 0x00, 0xD3, 0x83, 0x00, 0xD3, 0x85, 0x00, 0xD3, 0x87, 0x00, 0xD3, 0x89, 0x00, 0xD3, 0x8B, 0x00, 0xD3, 0x8D, 0x00, 0xD3, 0x80, 0x00, 0xD3, 0x90, 0x00, 0xD3, 0x92, 0x00, 0xD3, 0x94, 0x00, 0xD3, 0x96, 0x00, 0xD3, 0x98, 0x00, 0xD3, 0x9A, 0x00, 0xD3, 0x9C, 0x00, 0xD3, 0x9E, 0x00, 0xD3, 0xA0, 0x00, 0xD3, 0xA2, 0x00, 0xD3, 0xA4, 0x00, 0xD3, 0xA6, 0x00, 0xD3, 0xA8, 0x00, 0xD3, 0xAA, 0x00, 0xD3, 0xAC, 0x00, 0xD3, 0xAE, 0x00, 0xD3, 0xB0, 0x00, 0xD3, 0xB2, 0x00, 0xD3, 0xB4, 0x00, 0xD3, 0xB6, 0x00, 0xD3, 0xB8, 0x00, 0xD3, 0xBA, 0x00, 0xD3, 0xBC, 0x00, 0xD3, 0xBE, 0x00, 0xD4, 0x80, 0x00, 0xD4, 0x82, 0x00, 0xD4, 0x84, 0x00, 0xD4, 0x86, 0x00, 0xD4, 0x88, 0x00, 0xD4, 0x8A, 0x00, 0xD4, 0x8C, 0x00, 0xD4, 0x8E, 0x00, 0xD4, 0x90, 0x00, 0xD4, 0x92, 0x00, 0xD4, 0x94, 0x00, 0xD4, 0x96, 0x00, 0xD4, 0x98, 0x00, 0xD4, 0x9A, 0x00, 0xD4, 0x9C, 0x00, 0xD4, 0x9E, 0x00, 0xD4, 0xA0, 0x00, 0xD4, 0xA2, 0x00, 0xD4, 0xA4, 0x00, 0xD4, 0xA6, 0x00, 0xD4, 0xA8, 0x00, 0xD4, 0xAA, 0x00, 0xD4, 0xAC, 0x00, 0xD4, 0xAE, 0x00, 0xD4, 0xB1, 0x00, 0xD4, 0xB2, 0x00, 0xD4, 0xB3, 0x00, 0xD4, 0xB4, 0x00, 0xD4, 0xB5, 0x00, 0xD4, 0xB6, 0x00, 0xD4, 0xB7, 0x00, 0xD4, 0xB8, 0x00, 0xD4, 0xB9, 0x00, 0xD4, 0xBA, 0x00, 0xD4, 0xBB, 0x00, 0xD4, 0xBC, 0x00, 0xD4, 0xBD, 0x00, 0xD4, 0xBE, 0x00, 0xD4, 0xBF, 0x00, 0xD5, 0x80, 0x00, 0xD5, 0x81, 0x00, 0xD5, 0x82, 0x00, 0xD5, 0x83, 0x00, 0xD5, 0x84, 0x00, 0xD5, 0x85, 0x00, 0xD5, 0x86, 0x00, 0xD5, 0x87, 0x00, 0xD5, 0x88, 0x00, 0xD5, 0x89, 0x00, 0xD5, 0x8A, 0x00, 0xD5, 0x8B, 0x00, 0xD5, 0x8C, 0x00, 0xD5, 0x8D, 0x00, 0xD5, 0x8E, 0x00, 0xD5, 0x8F, 0x00, 0xD5, 0x90, 0x00, 0xD5, 0x91, 0x00, 0xD5, 0x92, 0x00, 0xD5, 0x93, 0x00, 0xD5, 0x94, 0x00, 0xD5, 0x95, 0x00, 0xD5, 0x96, 0x00, 0xF0, 0x90, 0x90, 0x80, 0x00, 0xF0, 0x90, 0x90, 0x81, 0x00, 0xF0, 0x90, 0x90, 0x82, 0x00, 0xF0, 0x90, 0x90, 0x83, 0x00, 0xF0, 0x90, 0x90, 0x84, 0x00, 0xF0, 0x90, 0x90, 0x85, 0x00, 0xF0, 0x90, 0x90, 0x86, 0x00, 0xF0, 0x90, 0x90, 0x87, 0x00, 0xF0, 0x90, 0x90, 0x88, 0x00, 0xF0, 0x90, 0x90, 0x89, 0x00, 0xF0, 0x90, 0x90, 0x8A, 0x00, 0xF0, 0x90, 0x90, 0x8B, 0x00, 0xF0, 0x90, 0x90, 0x8C, 0x00, 0xF0, 0x90, 0x90, 0x8D, 0x00, 0xF0, 0x90, 0x90, 0x8E, 0x00, 0xF0, 0x90, 0x90, 0x8F, 0x00, 0xF0, 0x90, 0x90, 0x90, 0x00, 0xF0, 0x90, 0x90, 0x91, 0x00, 0xF0, 0x90, 0x90, 0x92, 0x00, 0xF0, 0x90, 0x90, 0x93, 0x00, 0xF0, 0x90, 0x90, 0x94, 0x00, 0xF0, 0x90, 0x90, 0x95, 0x00, 0xF0, 0x90, 0x90, 0x96, 0x00, 0xF0, 0x90, 0x90, 0x97, 0x00, 0xF0, 0x90, 0x90, 0x98, 0x00, 0xF0, 0x90, 0x90, 0x99, 0x00, 0xF0, 0x90, 0x90, 0x9A, 0x00, 0xF0, 0x90, 0x90, 0x9B, 0x00, 0xF0, 0x90, 0x90, 0x9C, 0x00, 0xF0, 0x90, 0x90, 0x9D, 0x00, 0xF0, 0x90, 0x90, 0x9E, 0x00, 0xF0, 0x90, 0x90, 0x9F, 0x00, 0xF0, 0x90, 0x90, 0xA0, 0x00, 0xF0, 0x90, 0x90, 0xA1, 0x00, 0xF0, 0x90, 0x90, 0xA2, 0x00, 0xF0, 0x90, 0x90, 0xA3, 0x00, 0xF0, 0x90, 0x90, 0xA4, 0x00, 0xF0, 0x90, 0x90, 0xA5, 0x00, 0xF0, 0x90, 0x90, 0xA6, 0x00, 0xF0, 0x90, 0x90, 0xA7, 0x00, 0xF0, 0x90, 0x92, 0xB0, 0x00, 0xF0, 0x90, 0x92, 0xB1, 0x00, 0xF0, 0x90, 0x92, 0xB2, 0x00, 0xF0, 0x90, 0x92, 0xB3, 0x00, 0xF0, 0x90, 0x92, 0xB4, 0x00, 0xF0, 0x90, 0x92, 0xB5, 0x00, 0xF0, 0x90, 0x92, 0xB6, 0x00, 0xF0, 0x90, 0x92, 0xB7, 0x00, 0xF0, 0x90, 0x92, 0xB8, 0x00, 0xF0, 0x90, 0x92, 0xB9, 0x00, 0xF0, 0x90, 0x92, 0xBA, 0x00, 0xF0, 0x90, 0x92, 0xBB, 0x00, 0xF0, 0x90, 0x92, 0xBC, 0x00, 0xF0, 0x90, 0x92, 0xBD, 0x00, 0xF0, 0x90, 0x92, 0xBE, 0x00, 0xF0, 0x90, 0x92, 0xBF, 0x00, 0xF0, 0x90, 0x93, 0x80, 0x00, 0xF0, 0x90, 0x93, 0x81, 0x00, 0xF0, 0x90, 0x93, 0x82, 0x00, 0xF0, 0x90, 0x93, 0x83, 0x00, 0xF0, 0x90, 0x93, 0x84, 0x00, 0xF0, 0x90, 0x93, 0x85, 0x00, 0xF0, 0x90, 0x93, 0x86, 0x00, 0xF0, 0x90, 0x93, 0x87, 0x00, 0xF0, 0x90, 0x93, 0x88, 0x00, 0xF0, 0x90, 0x93, 0x89, 0x00, 0xF0, 0x90, 0x93, 0x8A, 0x00, 0xF0, 0x90, 0x93, 0x8B, 0x00, 0xF0, 0x90, 0x93, 0x8C, 0x00, 0xF0, 0x90, 0x93, 0x8D, 0x00, 0xF0, 0x90, 0x93, 0x8E, 0x00, 0xF0, 0x90, 0x93, 0x8F, 0x00, 0xF0, 0x90, 0x93, 0x90, 0x00, 0xF0, 0x90, 0x93, 0x91, 0x00, 0xF0, 0x90, 0x93, 0x92, 0x00, 0xF0, 0x90, 0x93, 0x93, 0x00, 0xF0, 0x90, 0xB2, 0x80, 0x00, 0xF0, 0x90, 0xB2, 0x81, 0x00, 0xF0, 0x90, 0xB2, 0x82, 0x00, 0xF0, 0x90, 0xB2, 0x83, 0x00, 0xF0, 0x90, 0xB2, 0x84, 0x00, 0xF0, 0x90, 0xB2, 0x85, 0x00, 0xF0, 0x90, 0xB2, 0x86, 0x00, 0xF0, 0x90, 0xB2, 0x87, 0x00, 0xF0, 0x90, 0xB2, 0x88, 0x00, 0xF0, 0x90, 0xB2, 0x89, 0x00, 0xF0, 0x90, 0xB2, 0x8A, 0x00, 0xF0, 0x90, 0xB2, 0x8B, 0x00, 0xF0, 0x90, 0xB2, 0x8C, 0x00, 0xF0, 0x90, 0xB2, 0x8D, 0x00, 0xF0, 0x90, 0xB2, 0x8E, 0x00, 0xF0, 0x90, 0xB2, 0x8F, 0x00, 0xF0, 0x90, 0xB2, 0x90, 0x00, 0xF0, 0x90, 0xB2, 0x91, 0x00, 0xF0, 0x90, 0xB2, 0x92, 0x00, 0xF0, 0x90, 0xB2, 0x93, 0x00, 0xF0, 0x90, 0xB2, 0x94, 0x00, 0xF0, 0x90, 0xB2, 0x95, 0x00, 0xF0, 0x90, 0xB2, 0x96, 0x00, 0xF0, 0x90, 0xB2, 0x97, 0x00, 0xF0, 0x90, 0xB2, 0x98, 0x00, 0xF0, 0x90, 0xB2, 0x99, 0x00, 0xF0, 0x90, 0xB2, 0x9A, 0x00, 0xF0, 0x90, 0xB2, 0x9B, 0x00, 0xF0, 0x90, 0xB2, 0x9C, 0x00, 0xF0, 0x90, 0xB2, 0x9D, 0x00, 0xF0, 0x90, 0xB2, 0x9E, 0x00, 0xF0, 0x90, 0xB2, 0x9F, 0x00, 0xF0, 0x90, 0xB2, 0xA0, 0x00, 0xF0, 0x90, 0xB2, 0xA1, 0x00, 0xF0, 0x90, 0xB2, 0xA2, 0x00, 0xF0, 0x90, 0xB2, 0xA3, 0x00, 0xF0, 0x90, 0xB2, 0xA4, 0x00, 0xF0, 0x90, 0xB2, 0xA5, 0x00, 0xF0, 0x90, 0xB2, 0xA6, 0x00, 0xF0, 0x90, 0xB2, 0xA7, 0x00, 0xF0, 0x90, 0xB2, 0xA8, 0x00, 0xF0, 0x90, 0xB2, 0xA9, 0x00, 0xF0, 0x90, 0xB2, 0xAA, 0x00, 0xF0, 0x90, 0xB2, 0xAB, 0x00, 0xF0, 0x90, 0xB2, 0xAC, 0x00, 0xF0, 0x90, 0xB2, 0xAD, 0x00, 0xF0, 0x90, 0xB2, 0xAE, 0x00, 0xF0, 0x90, 0xB2, 0xAF, 0x00, 0xF0, 0x90, 0xB2, 0xB0, 0x00, 0xF0, 0x90, 0xB2, 0xB1, 0x00, 0xF0, 0x90, 0xB2, 0xB2, 0x00, 0xF0, 0x91, 0xA2, 0xA0, 0x00, 0xF0, 0x91, 0xA2, 0xA1, 0x00, 0xF0, 0x91, 0xA2, 0xA2, 0x00, 0xF0, 0x91, 0xA2, 0xA3, 0x00, 0xF0, 0x91, 0xA2, 0xA4, 0x00, 0xF0, 0x91, 0xA2, 0xA5, 0x00, 0xF0, 0x91, 0xA2, 0xA6, 0x00, 0xF0, 0x91, 0xA2, 0xA7, 0x00, 0xF0, 0x91, 0xA2, 0xA8, 0x00, 0xF0, 0x91, 0xA2, 0xA9, 0x00, 0xF0, 0x91, 0xA2, 0xAA, 0x00, 0xF0, 0x91, 0xA2, 0xAB, 0x00, 0xF0, 0x91, 0xA2, 0xAC, 0x00, 0xF0, 0x91, 0xA2, 0xAD, 0x00, 0xF0, 0x91, 0xA2, 0xAE, 0x00, 0xF0, 0x91, 0xA2, 0xAF, 0x00, 0xF0, 0x91, 0xA2, 0xB0, 0x00, 0xF0, 0x91, 0xA2, 0xB1, 0x00, 0xF0, 0x91, 0xA2, 0xB2, 0x00, 0xF0, 0x91, 0xA2, 0xB3, 0x00, 0xF0, 0x91, 0xA2, 0xB4, 0x00, 0xF0, 0x91, 0xA2, 0xB5, 0x00, 0xF0, 0x91, 0xA2, 0xB6, 0x00, 0xF0, 0x91, 0xA2, 0xB7, 0x00, 0xF0, 0x91, 0xA2, 0xB8, 0x00, 0xF0, 0x91, 0xA2, 0xB9, 0x00, 0xF0, 0x91, 0xA2, 0xBA, 0x00, 0xF0, 0x91, 0xA2, 0xBB, 0x00, 0xF0, 0x91, 0xA2, 0xBC, 0x00, 0xF0, 0x91, 0xA2, 0xBD, 0x00, 0xF0, 0x91, 0xA2, 0xBE, 0x00, 0xF0, 0x91, 0xA2, 0xBF, 0x00, 0xE1, 0x8F, 0xB0, 0x00, 0xE1, 0x8F, 0xB1, 0x00, 0xE1, 0x8F, 0xB2, 0x00, 0xE1, 0x8F, 0xB3, 0x00, 0xE1, 0x8F, 0xB4, 0x00, 0xE1, 0x8F, 0xB5, 0x00, 0xD0, 0x92, 0x00, 0xD0, 0x94, 0x00, 0xD0, 0x9E, 0x00, 0xD0, 0xA1, 0x00, 0xD0, 0xA2, 0x00, 0xD0, 0xA2, 0x00, 0xD0, 0xAA, 0x00, 0xD1, 0xA2, 0x00, 0xEA, 0x99, 0x8A, 0x00, 0xEA, 0x9D, 0xBD, 0x00, 0xE2, 0xB1, 0xA3, 0x00, 0xE1, 0xB8, 0x80, 0x00, 0xE1, 0xB8, 0x82, 0x00, 0xE1, 0xB8, 0x84, 0x00, 0xE1, 0xB8, 0x86, 0x00, 0xE1, 0xB8, 0x88, 0x00, 0xE1, 0xB8, 0x8A, 0x00, 0xE1, 0xB8, 0x8C, 0x00, 0xE1, 0xB8, 0x8E, 0x00, 0xE1, 0xB8, 0x90, 0x00, 0xE1, 0xB8, 0x92, 0x00, 0xE1, 0xB8, 0x94, 0x00, 0xE1, 0xB8, 0x96, 0x00, 0xE1, 0xB8, 0x98, 0x00, 0xE1, 0xB8, 0x9A, 0x00, 0xE1, 0xB8, 0x9C, 0x00, 0xE1, 0xB8, 0x9E, 0x00, 0xE1, 0xB8, 0xA0, 0x00, 0xE1, 0xB8, 0xA2, 0x00, 0xE1, 0xB8, 0xA4, 0x00, 0xE1, 0xB8, 0xA6, 0x00, 0xE1, 0xB8, 0xA8, 0x00, 0xE1, 0xB8, 0xAA, 0x00, 0xE1, 0xB8, 0xAC, 0x00, 0xE1, 0xB8, 0xAE, 0x00, 0xE1, 0xB8, 0xB0, 0x00, 0xE1, 0xB8, 0xB2, 0x00, 0xE1, 0xB8, 0xB4, 0x00, 0xE1, 0xB8, 0xB6, 0x00, 0xE1, 0xB8, 0xB8, 0x00, 0xE1, 0xB8, 0xBA, 0x00, 0xE1, 0xB8, 0xBC, 0x00, 0xE1, 0xB8, 0xBE, 0x00, 0xE1, 0xB9, 0x80, 0x00, 0xE1, 0xB9, 0x82, 0x00, 0xE1, 0xB9, 0x84, 0x00, 0xE1, 0xB9, 0x86, 0x00, 0xE1, 0xB9, 0x88, 0x00, 0xE1, 0xB9, 0x8A, 0x00, 0xE1, 0xB9, 0x8C, 0x00, 0xE1, 0xB9, 0x8E, 0x00, 0xE1, 0xB9, 0x90, 0x00, 0xE1, 0xB9, 0x92, 0x00, 0xE1, 0xB9, 0x94, 0x00, 0xE1, 0xB9, 0x96, 0x00, 0xE1, 0xB9, 0x98, 0x00, 0xE1, 0xB9, 0x9A, 0x00, 0xE1, 0xB9, 0x9C, 0x00, 0xE1, 0xB9, 0x9E, 0x00, 0xE1, 0xB9, 0xA0, 0x00, 0xE1, 0xB9, 0xA2, 0x00, 0xE1, 0xB9, 0xA4, 0x00, 0xE1, 0xB9, 0xA6, 0x00, 0xE1, 0xB9, 0xA8, 0x00, 0xE1, 0xB9, 0xAA, 0x00, 0xE1, 0xB9, 0xAC, 0x00, 0xE1, 0xB9, 0xAE, 0x00, 0xE1, 0xB9, 0xB0, 0x00, 0xE1, 0xB9, 0xB2, 0x00, 0xE1, 0xB9, 0xB4, 0x00, 0xE1, 0xB9, 0xB6, 0x00, 0xE1, 0xB9, 0xB8, 0x00, 0xE1, 0xB9, 0xBA, 0x00, 0xE1, 0xB9, 0xBC, 0x00, 0xE1, 0xB9, 0xBE, 0x00, 0xE1, 0xBA, 0x80, 0x00, 0xE1, 0xBA, 0x82, 0x00, 0xE1, 0xBA, 0x84, 0x00, 0xE1, 0xBA, 0x86, 0x00, 0xE1, 0xBA, 0x88, 0x00, 0xE1, 0xBA, 0x8A, 0x00, 0xE1, 0xBA, 0x8C, 0x00, 0xE1, 0xBA, 0x8E, 0x00, 0xE1, 0xBA, 0x90, 0x00, 0xF0, 0x9E, 0xA4, 0x80, 0x00, 0xF0, 0x9E, 0xA4, 0x81, 0x00, 0xF0, 0x9E, 0xA4, 0x82, 0x00, 0xF0, 0x9E, 0xA4, 0x83, 0x00, 0xF0, 0x9E, 0xA4, 0x84, 0x00, 0xF0, 0x9E, 0xA4, 0x85, 0x00, 0xF0, 0x9E, 0xA4, 0x86, 0x00, 0xF0, 0x9E, 0xA4, 0x87, 0x00, 0xF0, 0x9E, 0xA4, 0x88, 0x00, 0xF0, 0x9E, 0xA4, 0x89, 0x00, 0xF0, 0x9E, 0xA4, 0x8A, 0x00, 0xF0, 0x9E, 0xA4, 0x8B, 0x00, 0xF0, 0x9E, 0xA4, 0x8C, 0x00, 0xF0, 0x9E, 0xA4, 0x8D, 0x00, 0xE1, 0xBA, 0x92, 0x00, 0xF0, 0x9E, 0xA4, 0x8E, 0x00, 0xF0, 0x9E, 0xA4, 0x8F, 0x00, 0xF0, 0x9E, 0xA4, 0x90, 0x00, 0xF0, 0x9E, 0xA4, 0x91, 0x00, 0xF0, 0x9E, 0xA4, 0x92, 0x00, 0xF0, 0x9E, 0xA4, 0x93, 0x00, 0xF0, 0x9E, 0xA4, 0x94, 0x00, 0xF0, 0x9E, 0xA4, 0x95, 0x00, 0xF0, 0x9E, 0xA4, 0x96, 0x00, 0xF0, 0x9E, 0xA4, 0x97, 0x00, 0xF0, 0x9E, 0xA4, 0x98, 0x00, 0xF0, 0x9E, 0xA4, 0x99, 0x00, 0xF0, 0x9E, 0xA4, 0x9A, 0x00, 0xF0, 0x9E, 0xA4, 0x9B, 0x00, 0xF0, 0x9E, 0xA4, 0x9C, 0x00, 0xF0, 0x9E, 0xA4, 0x9D, 0x00, 0xF0, 0x9E, 0xA4, 0x9E, 0x00, 0xF0, 0x9E, 0xA4, 0x9F, 0x00, 0xF0, 0x9E, 0xA4, 0xA0, 0x00, 0xF0, 0x9E, 0xA4, 0xA1, 0x00, 0xE1, 0xBA, 0x94, 0x00, 0xE1, 0xB9, 0xA0, 0x00, 0xE1, 0xBA, 0xA0, 0x00, 0xE1, 0xBA, 0xA2, 0x00, 0xE1, 0xBA, 0xA4, 0x00, 0xE1, 0xBA, 0xA6, 0x00, 0xE1, 0xBA, 0xA8, 0x00, 0xE1, 0xBA, 0xAA, 0x00, 0xE1, 0xBA, 0xAC, 0x00, 0xE1, 0xBA, 0xAE, 0x00, 0xE1, 0xBA, 0xB0, 0x00, 0xE1, 0xBA, 0xB2, 0x00, 0xE1, 0xBA, 0xB4, 0x00, 0xE1, 0xBA, 0xB6, 0x00, 0xE1, 0xBA, 0xB8, 0x00, 0xE1, 0xBA, 0xBA, 0x00, 0xE1, 0xBA, 0xBC, 0x00, 0xE1, 0xBA, 0xBE, 0x00, 0xE1, 0xBB, 0x80, 0x00, 0xE1, 0xBB, 0x82, 0x00, 0xE1, 0xBB, 0x84, 0x00, 0xE1, 0xBB, 0x86, 0x00, 0xE1, 0xBB, 0x88, 0x00, 0xE1, 0xBB, 0x8A, 0x00, 0xE1, 0xBB, 0x8C, 0x00, 0xE1, 0xBB, 0x8E, 0x00, 0xE1, 0xBB, 0x90, 0x00, 0xE1, 0xBB, 0x92, 0x00, 0xE1, 0xBB, 0x94, 0x00, 0xE1, 0xBB, 0x96, 0x00, 0xE1, 0xBB, 0x98, 0x00, 0xE1, 0xBB, 0x9A, 0x00, 0xE1, 0xBB, 0x9C, 0x00, 0xE1, 0xBB, 0x9E, 0x00, 0xE1, 0xBB, 0xA0, 0x00, 0xE1, 0xBB, 0xA2, 0x00, 0xE1, 0xBB, 0xA4, 0x00, 0xE1, 0xBB, 0xA6, 0x00, 0xE1, 0xBB, 0xA8, 0x00, 0xE1, 0xBB, 0xAA, 0x00, 0xE1, 0xBB, 0xAC, 0x00, 0xE1, 0xBB, 0xAE, 0x00, 0xE1, 0xBB, 0xB0, 0x00, 0xE1, 0xBB, 0xB2, 0x00, 0xE1, 0xBB, 0xB4, 0x00, 0xE1, 0xBB, 0xB6, 0x00, 0xE1, 0xBB, 0xB8, 0x00, 0xE1, 0xBB, 0xBA, 0x00, 0xE1, 0xBB, 0xBC, 0x00, 0xE1, 0xBB, 0xBE, 0x00, 0xE1, 0xBC, 0x88, 0x00, 0xE1, 0xBC, 0x89, 0x00, 0xE1, 0xBC, 0x8A, 0x00, 0xE1, 0xBC, 0x8B, 0x00, 0xE1, 0xBC, 0x8C, 0x00, 0xE1, 0xBC, 0x8D, 0x00, 0xE1, 0xBC, 0x8E, 0x00, 0xE1, 0xBC, 0x8F, 0x00, 0xE1, 0xBC, 0x98, 0x00, 0xE1, 0xBC, 0x99, 0x00, 0xE1, 0xBC, 0x9A, 0x00, 0xE1, 0xBC, 0x9B, 0x00, 0xE1, 0xBC, 0x9C, 0x00, 0xE1, 0xBC, 0x9D, 0x00, 0xE1, 0xBC, 0xA8, 0x00, 0xE1, 0xBC, 0xA9, 0x00, 0xE1, 0xBC, 0xAA, 0x00, 0xE1, 0xBC, 0xAB, 0x00, 0xE1, 0xBC, 0xAC, 0x00, 0xE1, 0xBC, 0xAD, 0x00, 0xE1, 0xBC, 0xAE, 0x00, 0xE1, 0xBC, 0xAF, 0x00, 0xE1, 0xBC, 0xB8, 0x00, 0xE1, 0xBC, 0xB9, 0x00, 0xE1, 0xBC, 0xBA, 0x00, 0xE1, 0xBC, 0xBB, 0x00, 0xE1, 0xBC, 0xBC, 0x00, 0xE1, 0xBC, 0xBD, 0x00, 0xE1, 0xBC, 0xBE, 0x00, 0xE1, 0xBC, 0xBF, 0x00, 0xE1, 0xBD, 0x88, 0x00, 0xE1, 0xBD, 0x89, 0x00, 0xE1, 0xBD, 0x8A, 0x00, 0xE1, 0xBD, 0x8B, 0x00, 0xE1, 0xBD, 0x8C, 0x00, 0xE1, 0xBD, 0x8D, 0x00, 0xE1, 0xBD, 0x99, 0x00, 0xE1, 0xBD, 0x9B, 0x00, 0xE1, 0xBD, 0x9D, 0x00, 0xE1, 0xBD, 0x9F, 0x00, 0xE1, 0xBD, 0xA8, 0x00, 0xE1, 0xBD, 0xA9, 0x00, 0xE1, 0xBD, 0xAA, 0x00, 0xE1, 0xBD, 0xAB, 0x00, 0xE1, 0xBD, 0xAC, 0x00, 0xE1, 0xBD, 0xAD, 0x00, 0xE1, 0xBD, 0xAE, 0x00, 0xE1, 0xBD, 0xAF, 0x00, 0xE1, 0xBE, 0xBA, 0x00, 0xE1, 0xBE, 0xBB, 0x00, 0xE1, 0xBF, 0x88, 0x00, 0xE1, 0xBF, 0x89, 0x00, 0xE1, 0xBF, 0x8A, 0x00, 0xE1, 0xBF, 0x8B, 0x00, 0xE1, 0xBF, 0x9A, 0x00, 0xE1, 0xBF, 0x9B, 0x00, 0xE1, 0xBF, 0xB8, 0x00, 0xE1, 0xBF, 0xB9, 0x00, 0xE1, 0xBF, 0xAA, 0x00, 0xE1, 0xBF, 0xAB, 0x00, 0xE1, 0xBF, 0xBA, 0x00, 0xE1, 0xBF, 0xBB, 0x00, 0xE1, 0xBE, 0x88, 0x00, 0xE1, 0xBE, 0x89, 0x00, 0xE1, 0xBE, 0x8A, 0x00, 0xE1, 0xBE, 0x8B, 0x00, 0xE1, 0xBE, 0x8C, 0x00, 0xE1, 0xBE, 0x8D, 0x00, 0xE1, 0xBE, 0x8E, 0x00, 0xE1, 0xBE, 0x8F, 0x00, 0xE1, 0xBE, 0x98, 0x00, 0xE1, 0xBE, 0x99, 0x00, 0xE1, 0xBE, 0x9A, 0x00, 0xE1, 0xBE, 0x9B, 0x00, 0xE1, 0xBE, 0x9C, 0x00, 0xE1, 0xBE, 0x9D, 0x00, 0xE1, 0xBE, 0x9E, 0x00, 0xE1, 0xBE, 0x9F, 0x00, 0xE1, 0xBE, 0xA8, 0x00, 0xE1, 0xBE, 0xA9, 0x00, 0xE1, 0xBE, 0xAA, 0x00, 0xE1, 0xBE, 0xAB, 0x00, 0xE1, 0xBE, 0xAC, 0x00, 0xE1, 0xBE, 0xAD, 0x00, 0xE1, 0xBE, 0xAE, 0x00, 0xE1, 0xBE, 0xAF, 0x00, 0xE1, 0xBE, 0xB8, 0x00, 0xE1, 0xBE, 0xB9, 0x00, 0xE1, 0xBE, 0xBC, 0x00, 0xCE, 0x99, 0x00, 0xE1, 0xBF, 0x8C, 0x00, 0xE1, 0xBF, 0x98, 0x00, 0xE1, 0xBF, 0x99, 0x00, 0xE1, 0xBF, 0xA8, 0x00, 0xE1, 0xBF, 0xA9, 0x00, 0xE1, 0xBF, 0xAC, 0x00, 0xE1, 0xBF, 0xBC, 0x00, 0xE2, 0x84, 0xB2, 0x00, 0xE2, 0x85, 0xA0, 0x00, 0xE2, 0x85, 0xA1, 0x00, 0xE2, 0x85, 0xA2, 0x00, 0xE2, 0x85, 0xA3, 0x00, 0xE2, 0x85, 0xA4, 0x00, 0xE2, 0x85, 0xA5, 0x00, 0xE2, 0x85, 0xA6, 0x00, 0xE2, 0x85, 0xA7, 0x00, 0xE2, 0x85, 0xA8, 0x00, 0xE2, 0x85, 0xA9, 0x00, 0xE2, 0x85, 0xAA, 0x00, 0xE2, 0x85, 0xAB, 0x00, 0xE2, 0x85, 0xAC, 0x00, 0xE2, 0x85, 0xAD, 0x00, 0xE2, 0x85, 0xAE, 0x00, 0xE2, 0x85, 0xAF, 0x00, 0xE2, 0x86, 0x83, 0x00, 0xE2, 0x92, 0xB6, 0x00, 0xE2, 0x92, 0xB7, 0x00, 0xE2, 0x92, 0xB8, 0x00, 0xE2, 0x92, 0xB9, 0x00, 0xE2, 0x92, 0xBA, 0x00, 0xE2, 0x92, 0xBB, 0x00, 0xE2, 0x92, 0xBC, 0x00, 0xE2, 0x92, 0xBD, 0x00, 0xE2, 0x92, 0xBE, 0x00, 0xE2, 0x92, 0xBF, 0x00, 0xE2, 0x93, 0x80, 0x00, 0xE2, 0x93, 0x81, 0x00, 0xE2, 0x93, 0x82, 0x00, 0xE2, 0x93, 0x83, 0x00, 0xE2, 0x93, 0x84, 0x00, 0xE2, 0x93, 0x85, 0x00, 0xE2, 0x93, 0x86, 0x00, 0xE2, 0x93, 0x87, 0x00, 0xE2, 0x93, 0x88, 0x00, 0xE2, 0x93, 0x89, 0x00, 0xE2, 0x93, 0x8A, 0x00, 0xE2, 0x93, 0x8B, 0x00, 0xE2, 0x93, 0x8C, 0x00, 0xE2, 0x93, 0x8D, 0x00, 0xE2, 0x93, 0x8E, 0x00, 0xE2, 0x93, 0x8F, 0x00, 0xE2, 0xB0, 0x80, 0x00, 0xE2, 0xB0, 0x81, 0x00, 0xE2, 0xB0, 0x82, 0x00, 0xE2, 0xB0, 0x83, 0x00, 0xE2, 0xB0, 0x84, 0x00, 0xE2, 0xB0, 0x85, 0x00, 0xE2, 0xB0, 0x86, 0x00, 0xE2, 0xB0, 0x87, 0x00, 0xE2, 0xB0, 0x88, 0x00, 0xE2, 0xB0, 0x89, 0x00, 0xE2, 0xB0, 0x8A, 0x00, 0xE2, 0xB0, 0x8B, 0x00, 0xE2, 0xB0, 0x8C, 0x00, 0xE2, 0xB0, 0x8D, 0x00, 0xE2, 0xB0, 0x8E, 0x00, 0xE2, 0xB0, 0x8F, 0x00, 0xE2, 0xB0, 0x90, 0x00, 0xE2, 0xB0, 0x91, 0x00, 0xE2, 0xB0, 0x92, 0x00, 0xE2, 0xB0, 0x93, 0x00, 0xE2, 0xB0, 0x94, 0x00, 0xE2, 0xB0, 0x95, 0x00, 0xE2, 0xB0, 0x96, 0x00, 0xE2, 0xB0, 0x97, 0x00, 0xE2, 0xB0, 0x98, 0x00, 0xE2, 0xB0, 0x99, 0x00, 0xE2, 0xB0, 0x9A, 0x00, 0xE2, 0xB0, 0x9B, 0x00, 0xE2, 0xB0, 0x9C, 0x00, 0xE2, 0xB0, 0x9D, 0x00, 0xE2, 0xB0, 0x9E, 0x00, 0xE2, 0xB0, 0x9F, 0x00, 0xE2, 0xB0, 0xA0, 0x00, 0xE2, 0xB0, 0xA1, 0x00, 0xE2, 0xB0, 0xA2, 0x00, 0xE2, 0xB0, 0xA3, 0x00, 0xE2, 0xB0, 0xA4, 0x00, 0xE2, 0xB0, 0xA5, 0x00, 0xE2, 0xB0, 0xA6, 0x00, 0xE2, 0xB0, 0xA7, 0x00, 0xE2, 0xB0, 0xA8, 0x00, 0xE2, 0xB0, 0xA9, 0x00, 0xE2, 0xB0, 0xAA, 0x00, 0xE2, 0xB0, 0xAB, 0x00, 0xE2, 0xB0, 0xAC, 0x00, 0xE2, 0xB0, 0xAD, 0x00, 0xE2, 0xB0, 0xAE, 0x00, 0xE2, 0xB1, 0xA0, 0x00, 0xC8, 0xBA, 0x00, 0xC8, 0xBE, 0x00, 0xE2, 0xB1, 0xA7, 0x00, 0xE2, 0xB1, 0xA9, 0x00, 0xE2, 0xB1, 0xAB, 0x00, 0xE2, 0xB1, 0xB2, 0x00, 0xE2, 0xB1, 0xB5, 0x00, 0xE2, 0xB2, 0x80, 0x00, 0xE2, 0xB2, 0x82, 0x00, 0xE2, 0xB2, 0x84, 0x00, 0xE2, 0xB2, 0x86, 0x00, 0xE2, 0xB2, 0x88, 0x00, 0xE2, 0xB2, 0x8A, 0x00, 0xE2, 0xB2, 0x8C, 0x00, 0xE2, 0xB2, 0x8E, 0x00, 0xE2, 0xB2, 0x90, 0x00, 0xE2, 0xB2, 0x92, 0x00, 0xE2, 0xB2, 0x94, 0x00, 0xE2, 0xB2, 0x96, 0x00, 0xE2, 0xB2, 0x98, 0x00, 0xE2, 0xB2, 0x9A, 0x00, 0xE2, 0xB2, 0x9C, 0x00, 0xE2, 0xB2, 0x9E, 0x00, 0xE2, 0xB2, 0xA0, 0x00, 0xE2, 0xB2, 0xA2, 0x00, 0xE2, 0xB2, 0xA4, 0x00, 0xE2, 0xB2, 0xA6, 0x00, 0xE2, 0xB2, 0xA8, 0x00, 0xE2, 0xB2, 0xAA, 0x00, 0xE2, 0xB2, 0xAC, 0x00, 0xE2, 0xB2, 0xAE, 0x00, 0xE2, 0xB2, 0xB0, 0x00, 0xE2, 0xB2, 0xB2, 0x00, 0xE2, 0xB2, 0xB4, 0x00, 0xE2, 0xB2, 0xB6, 0x00, 0xE2, 0xB2, 0xB8, 0x00, 0xE2, 0xB2, 0xBA, 0x00, 0xE2, 0xB2, 0xBC, 0x00, 0xE2, 0xB2, 0xBE, 0x00, 0xE2, 0xB3, 0x80, 0x00, 0xE2, 0xB3, 0x82, 0x00, 0xE2, 0xB3, 0x84, 0x00, 0xE2, 0xB3, 0x86, 0x00, 0xE2, 0xB3, 0x88, 0x00, 0xE2, 0xB3, 0x8A, 0x00, 0xE2, 0xB3, 0x8C, 0x00, 0xE2, 0xB3, 0x8E, 0x00, 0xE2, 0xB3, 0x90, 0x00, 0xE2, 0xB3, 0x92, 0x00, 0xE2, 0xB3, 0x94, 0x00, 0xE2, 0xB3, 0x96, 0x00, 0xE2, 0xB3, 0x98, 0x00, 0xE2, 0xB3, 0x9A, 0x00, 0xE2, 0xB3, 0x9C, 0x00, 0xE2, 0xB3, 0x9E, 0x00, 0xE2, 0xB3, 0xA0, 0x00, 0xE2, 0xB3, 0xA2, 0x00, 0xE2, 0xB3, 0xAB, 0x00, 0xE2, 0xB3, 0xAD, 0x00, 0xE2, 0xB3, 0xB2, 0x00, 0xE1, 0x82, 0xA0, 0x00, 0xE1, 0x82, 0xA1, 0x00, 0xE1, 0x82, 0xA2, 0x00, 0xE1, 0x82, 0xA3, 0x00, 0xE1, 0x82, 0xA4, 0x00, 0xE1, 0x82, 0xA5, 0x00, 0xE1, 0x82, 0xA6, 0x00, 0xE1, 0x82, 0xA7, 0x00, 0xE1, 0x82, 0xA8, 0x00, 0xE1, 0x82, 0xA9, 0x00, 0xE1, 0x82, 0xAA, 0x00, 0xE1, 0x82, 0xAB, 0x00, 0xE1, 0x82, 0xAC, 0x00, 0xE1, 0x82, 0xAD, 0x00, 0xE1, 0x82, 0xAE, 0x00, 0xE1, 0x82, 0xAF, 0x00, 0xE1, 0x82, 0xB0, 0x00, 0xE1, 0x82, 0xB1, 0x00, 0xE1, 0x82, 0xB2, 0x00, 0xE1, 0x82, 0xB3, 0x00, 0xE1, 0x82, 0xB4, 0x00, 0xE1, 0x82, 0xB5, 0x00, 0xE1, 0x82, 0xB6, 0x00, 0xE1, 0x82, 0xB7, 0x00, 0xE1, 0x82, 0xB8, 0x00, 0xE1, 0x82, 0xB9, 0x00, 0xE1, 0x82, 0xBA, 0x00, 0xE1, 0x82, 0xBB, 0x00, 0xE1, 0x82, 0xBC, 0x00, 0xE1, 0x82, 0xBD, 0x00, 0xE1, 0x82, 0xBE, 0x00, 0xE1, 0x82, 0xBF, 0x00, 0xE1, 0x83, 0x80, 0x00, 0xE1, 0x83, 0x81, 0x00, 0xE1, 0x83, 0x82, 0x00, 0xE1, 0x83, 0x83, 0x00, 0xE1, 0x83, 0x84, 0x00, 0xE1, 0x83, 0x85, 0x00, 0xE1, 0x83, 0x87, 0x00, 0xE1, 0x83, 0x8D, 0x00, 0xEA, 0x99, 0x80, 0x00, 0xEA, 0x99, 0x82, 0x00, 0xEA, 0x99, 0x84, 0x00, 0xEA, 0x99, 0x86, 0x00, 0xEA, 0x99, 0x88, 0x00, 0xEA, 0x99, 0x8A, 0x00, 0xEA, 0x99, 0x8C, 0x00, 0xEA, 0x99, 0x8E, 0x00, 0xEA, 0x99, 0x90, 0x00, 0xEA, 0x99, 0x92, 0x00, 0xEA, 0x99, 0x94, 0x00, 0xEA, 0x99, 0x96, 0x00, 0xEA, 0x99, 0x98, 0x00, 0xEA, 0x99, 0x9A, 0x00, 0xEA, 0x99, 0x9C, 0x00, 0xEA, 0x99, 0x9E, 0x00, 0xEA, 0x99, 0xA0, 0x00, 0xEA, 0x99, 0xA2, 0x00, 0xEA, 0x99, 0xA4, 0x00, 0xEA, 0x99, 0xA6, 0x00, 0xEA, 0x99, 0xA8, 0x00, 0xEA, 0x99, 0xAA, 0x00, 0xEA, 0x99, 0xAC, 0x00, 0xEA, 0x9A, 0x80, 0x00, 0xEA, 0x9A, 0x82, 0x00, 0xEA, 0x9A, 0x84, 0x00, 0xEA, 0x9A, 0x86, 0x00, 0xEA, 0x9A, 0x88, 0x00, 0xEA, 0x9A, 0x8A, 0x00, 0xEA, 0x9A, 0x8C, 0x00, 0xEA, 0x9A, 0x8E, 0x00, 0xEA, 0x9A, 0x90, 0x00, 0xEA, 0x9A, 0x92, 0x00, 0xEA, 0x9A, 0x94, 0x00, 0xEA, 0x9A, 0x96, 0x00, 0xEA, 0x9A, 0x98, 0x00, 0xEA, 0x9A, 0x9A, 0x00, 0xEA, 0x9C, 0xA2, 0x00, 0xEA, 0x9C, 0xA4, 0x00, 0xEA, 0x9C, 0xA6, 0x00, 0xEA, 0x9C, 0xA8, 0x00, 0xEA, 0x9C, 0xAA, 0x00, 0xEA, 0x9C, 0xAC, 0x00, 0xEA, 0x9C, 0xAE, 0x00, 0xEA, 0x9C, 0xB2, 0x00, 0xEA, 0x9C, 0xB4, 0x00, 0xEA, 0x9C, 0xB6, 0x00, 0xEA, 0x9C, 0xB8, 0x00, 0xEA, 0x9C, 0xBA, 0x00, 0xEA, 0x9C, 0xBC, 0x00, 0xEA, 0x9C, 0xBE, 0x00, 0xEA, 0x9D, 0x80, 0x00, 0xEA, 0x9D, 0x82, 0x00, 0xEA, 0x9D, 0x84, 0x00, 0xEA, 0x9D, 0x86, 0x00, 0xEA, 0x9D, 0x88, 0x00, 0xEA, 0x9D, 0x8A, 0x00, 0xEA, 0x9D, 0x8C, 0x00, 0xEA, 0x9D, 0x8E, 0x00, 0xEA, 0x9D, 0x90, 0x00, 0xEA, 0x9D, 0x92, 0x00, 0xEA, 0x9D, 0x94, 0x00, 0xEA, 0x9D, 0x96, 0x00, 0xEA, 0x9D, 0x98, 0x00, 0xEA, 0x9D, 0x9A, 0x00, 0xEA, 0x9D, 0x9C, 0x00, 0xEA, 0x9D, 0x9E, 0x00, 0xEA, 0x9D, 0xA0, 0x00, 0xEA, 0x9D, 0xA2, 0x00, 0xEA, 0x9D, 0xA4, 0x00, 0xEA, 0x9D, 0xA6, 0x00, 0xEA, 0x9D, 0xA8, 0x00, 0xEA, 0x9D, 0xAA, 0x00, 0xEA, 0x9D, 0xAC, 0x00, 0xEA, 0x9D, 0xAE, 0x00, 0xEA, 0x9D, 0xB9, 0x00, 0xEA, 0x9D, 0xBB, 0x00, 0xEA, 0x9D, 0xBE, 0x00, 0xEA, 0x9E, 0x80, 0x00, 0xEA, 0x9E, 0x82, 0x00, 0xEA, 0x9E, 0x84, 0x00, 0xEA, 0x9E, 0x86, 0x00, 0xEA, 0x9E, 0x8B, 0x00, 0xEA, 0x9E, 0x90, 0x00, 0xEA, 0x9E, 0x92, 0x00, 0xEA, 0x9E, 0x96, 0x00, 0xEA, 0x9E, 0x98, 0x00, 0xEA, 0x9E, 0x9A, 0x00, 0xEA, 0x9E, 0x9C, 0x00, 0xEA, 0x9E, 0x9E, 0x00, 0xEA, 0x9E, 0xA0, 0x00, 0xEA, 0x9E, 0xA2, 0x00, 0xEA, 0x9E, 0xA4, 0x00, 0xEA, 0x9E, 0xA6, 0x00, 0xEA, 0x9E, 0xA8, 0x00, 0xEA, 0x9E, 0xB4, 0x00, 0xEA, 0x9E, 0xB6, 0x00, 0xEA, 0x9E, 0xB3, 0x00, 0xE1, 0x8E, 0xA0, 0x00, 0xE1, 0x8E, 0xA1, 0x00, 0xE1, 0x8E, 0xA2, 0x00, 0xE1, 0x8E, 0xA3, 0x00, 0xE1, 0x8E, 0xA4, 0x00, 0xE1, 0x8E, 0xA5, 0x00, 0xE1, 0x8E, 0xA6, 0x00, 0xE1, 0x8E, 0xA7, 0x00, 0xE1, 0x8E, 0xA8, 0x00, 0xE1, 0x8E, 0xA9, 0x00, 0xE1, 0x8E, 0xAA, 0x00, 0xE1, 0x8E, 0xAB, 0x00, 0xE1, 0x8E, 0xAC, 0x00, 0xE1, 0x8E, 0xAD, 0x00, 0xE1, 0x8E, 0xAE, 0x00, 0xE1, 0x8E, 0xAF, 0x00, 0xE1, 0x8E, 0xB0, 0x00, 0xE1, 0x8E, 0xB1, 0x00, 0xE1, 0x8E, 0xB2, 0x00, 0xE1, 0x8E, 0xB3, 0x00, 0xE1, 0x8E, 0xB4, 0x00, 0xE1, 0x8E, 0xB5, 0x00, 0xE1, 0x8E, 0xB6, 0x00, 0xE1, 0x8E, 0xB7, 0x00, 0xE1, 0x8E, 0xB8, 0x00, 0xE1, 0x8E, 0xB9, 0x00, 0xE1, 0x8E, 0xBA, 0x00, 0xE1, 0x8E, 0xBB, 0x00, 0xE1, 0x8E, 0xBC, 0x00, 0xE1, 0x8E, 0xBD, 0x00, 0xE1, 0x8E, 0xBE, 0x00, 0xE1, 0x8E, 0xBF, 0x00, 0xE1, 0x8F, 0x80, 0x00, 0xE1, 0x8F, 0x81, 0x00, 0xE1, 0x8F, 0x82, 0x00, 0xE1, 0x8F, 0x83, 0x00, 0xE1, 0x8F, 0x84, 0x00, 0xE1, 0x8F, 0x85, 0x00, 0xE1, 0x8F, 0x86, 0x00, 0xE1, 0x8F, 0x87, 0x00, 0xE1, 0x8F, 0x88, 0x00, 0xE1, 0x8F, 0x89, 0x00, 0xE1, 0x8F, 0x8A, 0x00, 0xE1, 0x8F, 0x8B, 0x00, 0xE1, 0x8F, 0x8C, 0x00, 0xE1, 0x8F, 0x8D, 0x00, 0xE1, 0x8F, 0x8E, 0x00, 0xE1, 0x8F, 0x8F, 0x00, 0xE1, 0x8F, 0x90, 0x00, 0xE1, 0x8F, 0x91, 0x00, 0xE1, 0x8F, 0x92, 0x00, 0xE1, 0x8F, 0x93, 0x00, 0xE1, 0x8F, 0x94, 0x00, 0xE1, 0x8F, 0x95, 0x00, 0xE1, 0x8F, 0x96, 0x00, 0xE1, 0x8F, 0x97, 0x00, 0xE1, 0x8F, 0x98, 0x00, 0xE1, 0x8F, 0x99, 0x00, 0xE1, 0x8F, 0x9A, 0x00, 0xE1, 0x8F, 0x9B, 0x00, 0xE1, 0x8F, 0x9C, 0x00, 0xE1, 0x8F, 0x9D, 0x00, 0xE1, 0x8F, 0x9E, 0x00, 0xE1, 0x8F, 0x9F, 0x00, 0xE1, 0x8F, 0xA0, 0x00, 0xE1, 0x8F, 0xA1, 0x00, 0xE1, 0x8F, 0xA2, 0x00, 0xE1, 0x8F, 0xA3, 0x00, 0xE1, 0x8F, 0xA4, 0x00, 0xE1, 0x8F, 0xA5, 0x00, 0xE1, 0x8F, 0xA6, 0x00, 0xE1, 0x8F, 0xA7, 0x00, 0xE1, 0x8F, 0xA8, 0x00, 0xE1, 0x8F, 0xA9, 0x00, 0xE1, 0x8F, 0xAA, 0x00, 0xE1, 0x8F, 0xAB, 0x00, 0xE1, 0x8F, 0xAC, 0x00, 0xE1, 0x8F, 0xAD, 0x00, 0xE1, 0x8F, 0xAE, 0x00, 0xE1, 0x8F, 0xAF, 0x00, 0xEF, 0xBC, 0xA1, 0x00, 0xEF, 0xBC, 0xA2, 0x00, 0xEF, 0xBC, 0xA3, 0x00, 0xEF, 0xBC, 0xA4, 0x00, 0xEF, 0xBC, 0xA5, 0x00, 0xEF, 0xBC, 0xA6, 0x00, 0xEF, 0xBC, 0xA7, 0x00, 0xEF, 0xBC, 0xA8, 0x00, 0xEF, 0xBC, 0xA9, 0x00, 0xEF, 0xBC, 0xAA, 0x00, 0xEF, 0xBC, 0xAB, 0x00, 0xEF, 0xBC, 0xAC, 0x00, 0xEF, 0xBC, 0xAD, 0x00, 0xEF, 0xBC, 0xAE, 0x00, 0xEF, 0xBC, 0xAF, 0x00, 0xEF, 0xBC, 0xB0, 0x00, 0xEF, 0xBC, 0xB1, 0x00, 0xEF, 0xBC, 0xB2, 0x00, 0xEF, 0xBC, 0xB3, 0x00, 0xEF, 0xBC, 0xB4, 0x00, 0xEF, 0xBC, 0xB5, 0x00, 0xEF, 0xBC, 0xB6, 0x00, 0xEF, 0xBC, 0xB7, 0x00, 0xEF, 0xBC, 0xB8, 0x00, 0xEF, 0xBC, 0xB9, 0x00, 0xEF, 0xBC, 0xBA, 0x00, 0x53, 0x53, 0x00, 0xCA, 0xBC, 0x4E, 0x00, 0x4A, 0xCC, 0x8C, 0x00, 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCE, 0xA5, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xD4, 0xB5, 0xD5, 0x92, 0x00, 0x48, 0xCC, 0xB1, 0x00, 0x54, 0xCC, 0x88, 0x00, 0x57, 0xCC, 0x8A, 0x00, 0x59, 0xCC, 0x8A, 0x00, 0x41, 0xCA, 0xBE, 0x00, 0xCE, 0xA5, 0xCC, 0x93, 0x00, 0xCE, 0xA5, 0xCC, 0x93, 0xCC, 0x80, 0x00, 0xCE, 0xA5, 0xCC, 0x93, 0xCC, 0x81, 0x00, 0xCE, 0xA5, 0xCC, 0x93, 0xCD, 0x82, 0x00, 0xE1, 0xBC, 0x88, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x89, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8A, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8B, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8C, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8D, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8E, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8F, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x88, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x89, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8A, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8B, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8C, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8D, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8E, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0x8F, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xA8, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xA9, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAA, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAB, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAC, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAD, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAE, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAF, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xA8, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xA9, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAA, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAB, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAC, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAD, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAE, 0xCE, 0x99, 0x00, 0xE1, 0xBC, 0xAF, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xA8, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xA9, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAA, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAB, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAC, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAD, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAE, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAF, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xA8, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xA9, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAA, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAB, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAC, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAD, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAE, 0xCE, 0x99, 0x00, 0xE1, 0xBD, 0xAF, 0xCE, 0x99, 0x00, 0xE1, 0xBE, 0xBA, 0xCE, 0x99, 0x00, 0xCE, 0x91, 0xCE, 0x99, 0x00, 0xCE, 0x86, 0xCE, 0x99, 0x00, 0xCE, 0x91, 0xCD, 0x82, 0x00, 0xCE, 0x91, 0xCD, 0x82, 0xCE, 0x99, 0x00, 0xCE, 0x91, 0xCE, 0x99, 0x00, 0xE1, 0xBF, 0x8A, 0xCE, 0x99, 0x00, 0xCE, 0x97, 0xCE, 0x99, 0x00, 0xCE, 0x89, 0xCE, 0x99, 0x00, 0xCE, 0x97, 0xCD, 0x82, 0x00, 0xCE, 0x97, 0xCD, 0x82, 0xCE, 0x99, 0x00, 0xCE, 0x97, 0xCE, 0x99, 0x00, 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x80, 0x00, 0xCE, 0x99, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCE, 0x99, 0xCD, 0x82, 0x00, 0xCE, 0x99, 0xCC, 0x88, 0xCD, 0x82, 0x00, 0xCE, 0xA5, 0xCC, 0x88, 0xCC, 0x80, 0x00, 0xCE, 0xA5, 0xCC, 0x88, 0xCC, 0x81, 0x00, 0xCE, 0xA1, 0xCC, 0x93, 0x00, 0xCE, 0xA5, 0xCD, 0x82, 0x00, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x82, 0x00, 0xE1, 0xBF, 0xBA, 0xCE, 0x99, 0x00, 0xCE, 0xA9, 0xCE, 0x99, 0x00, 0xCE, 0x8F, 0xCE, 0x99, 0x00, 0xCE, 0xA9, 0xCD, 0x82, 0x00, 0xCE, 0xA9, 0xCD, 0x82, 0xCE, 0x99, 0x00, 0xCE, 0xA9, 0xCE, 0x99, 0x00, 0x46, 0x46, 0x00, 0x46, 0x49, 0x00, 0x46, 0x4C, 0x00, 0x46, 0x46, 0x49, 0x00, 0x46, 0x46, 0x4C, 0x00, 0x53, 0x54, 0x00, 0x53, 0x54, 0x00, 0xD5, 0x84, 0xD5, 0x86, 0x00, 0xD5, 0x84, 0xD4, 0xB5, 0x00, 0xD5, 0x84, 0xD4, 0xBB, 0x00, 0xD5, 0x8E, 0xD5, 0x86, 0x00, 0xD5, 0x84, 0xD4, 0xBD, 0x00, }; RediSearch-1.2.2/src/dep/libnu/libnu.h000066400000000000000000000007211364126773500174750ustar00rootroot00000000000000#ifndef NU_LIBNUNICODE_H #define NU_LIBNUNICODE_H #include "casemap.h" #include "cesu8.h" #include "defines.h" #include "ducet.h" #include "extra.h" #include "strcoll.h" #include "strings.h" #include "validate.h" #include "version.h" #include "udb.h" #include "utf16.h" #include "utf16be.h" #include "utf16he.h" #include "utf16le.h" #include "utf32.h" #include "utf32be.h" #include "utf32he.h" #include "utf32le.h" #include "utf8.h" #endif /* NU_LIBNUNICODE_H */ RediSearch-1.2.2/src/dep/libnu/mph.h000066400000000000000000000026271364126773500171570ustar00rootroot00000000000000#ifndef NU_MPH_H #define NU_MPH_H /* Intentionally undocumented * * http://iswsa.acm.org/mphf/index.html */ #include #include #include "config.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UDB /* those need to be the same values as used in MPH generation */ #define PRIME 0x01000193 /** Calculate G offset from codepoint */ static inline uint32_t _nu_hash(uint32_t hash, uint32_t codepoint) { if (hash == 0) { hash = PRIME; } return hash ^ codepoint; } /** Get hash value of Unicode codepoint */ static inline uint32_t nu_mph_hash(const int16_t *G, size_t G_SIZE, uint32_t codepoint) { uint32_t h = _nu_hash(0, codepoint); int16_t offset = G[h % G_SIZE]; if (offset < 0) { return (uint32_t)(-offset - 1); } return (_nu_hash(offset, codepoint) % G_SIZE); } /** Lookup value in MPH */ static inline uint32_t nu_mph_lookup(const uint32_t *V_C, const uint16_t *V_I, uint32_t codepoint, uint32_t hash) { const uint32_t *c = (V_C + hash); const uint16_t *i = (V_I + hash); /* due to nature of minimal perfect hash, it will always * produce collision for codepoints outside of MPH original set. * thus VALUES_C contain original codepoint to check if * collision occurred */ return (*c != codepoint ? 0 : *i); } #endif /* NU_WITH_UDB */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_MPH_H */ RediSearch-1.2.2/src/dep/libnu/strcoll.c000066400000000000000000000251101364126773500200400ustar00rootroot00000000000000#include #include "defines.h" #include "ducet.h" #include "strcoll.h" #include "strcoll_internal.h" #if (defined NU_WITH_Z_COLLATION) || (defined NU_WITH_N_COLLATION) int32_t _compound_weight(int32_t w, const char **encoded, const char *limit, nu_read_iterator_t read, nu_compound_read_t com, const char **tail, nu_codepoint_weight_t weight, void *context) { const char *tailp = *tail; const char *p = *encoded; int32_t new_w = w; int32_t consumed = 1; /* one codepoint was consumed at the top of the stack (_nu_strcoll) */ while (p < limit) { uint32_t u = 0; const char *np = com(p, limit, read, &u, &tailp); new_w = weight(u, &w, context); /* after this point, w might hold rollback value * and new_w holds actual weight */ ++consumed; if (new_w >= 0) { /* if w == 0 or w == 1, then *p or *np is already pointing * to needed place, otherwise re-read encoded in the forward * direction preserving correctness of tail pointer */ if (w != 0 && w != 1) { assert(consumed + w > 1); np = *encoded; tailp = *tail; for (int32_t i = 0; i < consumed - w; ++i) { np = com(np, limit, read, 0, &tailp); } w = 0; } *encoded = (w == 0 ? np : p); *tail = tailp; break; } p = np; w = new_w; } if (new_w < 0) { new_w = weight(0, &w, context); } assert(new_w >= 0); return new_w; } inline int _nu_strcoll(const char *lhs, const char *lhs_limit, const char *rhs, const char *rhs_limit, nu_read_iterator_t it1, nu_read_iterator_t it2, nu_compound_read_t com1, nu_compound_read_t com2, nu_codepoint_weight_t weight, void *context, ssize_t *collated_left, ssize_t *collated_right) { int cmp = 0; const char *lp = lhs, *rp = rhs; const char *ltailp = 0, *rtailp = 0; uint32_t u1 = 0, u2 = 0; while ((lp < lhs_limit && rp < rhs_limit) || (ltailp != 0 && rp < rhs_limit) || (rtailp != 0 && lp < lhs_limit)) { lp = com1(lp, lhs_limit, it1, &u1, <ailp); rp = com2(rp, rhs_limit, it2, &u2, &rtailp); #ifdef NU_DISABLE_CONTRACTIONS /* if contractions are disabled, then same codepoints * will produce same weights and there is no need * to weight each, i.e. weight(u1) == weight(u2) and * collation may proceed to next codepoints */ if (u1 != u2) { #endif int32_t w1 = weight(u1, 0, context); int32_t w2 = weight(u2, 0, context); if (w1 < 0) { w1 = _compound_weight(w1, &lp, lhs_limit, it1, com1, <ailp, weight, context); } if (w2 < 0) { w2 = _compound_weight(w2, &rp, rhs_limit, it2, com2, &rtailp, weight, context); } assert(w1 >= 0); assert(w2 >= 0); if (w1 < w2) { cmp = -1; break; } else if (w1 > w2) { cmp = 1; break; } #ifdef NU_DISABLE_CONTRACTIONS } #endif if (u1 == 0 || u2 == 0) { break; } } /* collated_left and collated_right should count * number of successfully collated bytes, not taking * into account limits. therefore if cmp != 0, * number of collated bytes is decreased by (at least) 1 * and cmp is limits-fixed afterwards */ if (collated_left != 0) { *collated_left = (lp - lhs) - (cmp == 0 ? 0 : 1); } if (collated_right != 0) { *collated_right = (rp - rhs) - (cmp == 0 ? 0 : 1); } if (cmp == 0) { if (rp < rhs_limit && lp >= lhs_limit) { cmp = -1; } else if (lp < lhs_limit && rp >= rhs_limit) { cmp = 1; } } return cmp; } inline const char* _nu_strchr(const char *lhs, const char *lhs_limit, uint32_t c, nu_read_iterator_t read, nu_compound_read_t com, nu_casemapping_t casemap, nu_read_iterator_t casemap_read) { const char *p = lhs; const char *tail = 0; uint32_t u = 0; const char *rhs = 0; if (casemap != 0) { rhs = casemap(c); if (rhs != 0) { rhs = casemap_read(rhs, &c); /* read new lead codepoint */ } } while (p < lhs_limit) { const char *np = com(p, lhs_limit, read, &u, &tail); if (u == 0) { break; } if (u == c) { if (rhs == 0) { return p; } /* rhs != 0 */ const char *rp = rhs; uint32_t u2 = 0; do { rp = casemap_read(rp, &u2); if (u2 == 0) { return p; /* succ exit point */ } if (np >= lhs_limit) { return 0; } np = com(np, lhs_limit, read, &u, &tail); if (u == 0) { return 0; } if (u != u2) { break; } } while (u2 != 0); } p = np; } return 0; } inline const char* _nu_strrchr(const char *encoded, const char *limit, uint32_t c, nu_read_iterator_t read, nu_compound_read_t com, nu_casemapping_t casemap, nu_read_iterator_t casemap_read) { /* there is probably not much sense in finding string end by decoding it * and then reverse read string again to find last codepoint, therefore * this is a sequence of _nu_strchr() in forward direction * * please let me know if i'm wrong */ const char *p = encoded; const char *last = 0; while (p < limit) { p = _nu_strchr(p, limit, c, read, com, casemap, casemap_read); if (p == 0) { return last; } last = p; p = read(p, 0); /* skip one codepoint and continue */ } return last; } inline const char* _nu_strstr(const char *haystack, const char *haystack_limit, const char *needle, const char *needle_limit, nu_read_iterator_t it1, nu_read_iterator_t it2, nu_compound_read_t com1, nu_compound_read_t com2, nu_casemapping_t casemap, nu_read_iterator_t casemap_read, nu_codepoint_weight_t weight, void *context) { uint32_t n0 = 0; if (needle_limit != needle) { it2(needle, &n0); } if (needle_limit == needle || n0 == 0) { return haystack; } ssize_t needle_len = (needle_limit != NU_UNLIMITED ? (needle_limit - needle) : nu_strbytelen(needle, it2)); const char *h0 = haystack; do { h0 = _nu_strchr(h0, haystack_limit, n0, it1, com1, casemap, casemap_read); if (h0 == 0) { break; } ssize_t collated_left = 0, collated_right = 0; _nu_strcoll(h0, haystack_limit, needle, needle_limit, it1, it2, com1, com2, weight, context, &collated_left, &collated_right); /* it doesn't matter what collate result is * if whole needle was successfully collated */ if (collated_right >= needle_len) { return h0; } /* skip one codepoint in haystack */ if (h0 < haystack_limit) { h0 = it1(h0, 0); } } while (h0 != 0 && h0 < haystack_limit); return 0; } #ifdef NU_WITH_Z_COLLATION const char* nu_strchr(const char *encoded, uint32_t c, nu_read_iterator_t read) { return _nu_strchr(encoded, NU_UNLIMITED, c, read, nu_default_compound_read, 0, 0); } const char* nu_strcasechr(const char *encoded, uint32_t c, nu_read_iterator_t read) { return _nu_strchr(encoded, NU_UNLIMITED, c, read, nu_nocase_compound_read, NU_FOLDING_FUNCTION, nu_casemap_read); } const char* nu_strrchr(const char *encoded, uint32_t c, nu_read_iterator_t read) { return _nu_strrchr(encoded, NU_UNLIMITED, c, read, nu_default_compound_read, 0, 0); } const char* nu_strrcasechr(const char *encoded, uint32_t c, nu_read_iterator_t read) { return _nu_strrchr(encoded, NU_UNLIMITED, c, read, nu_nocase_compound_read, NU_FOLDING_FUNCTION, nu_casemap_read); } int nu_strcoll(const char *s1, const char *s2, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read) { return _nu_strcoll(s1, NU_UNLIMITED, s2, NU_UNLIMITED, s1_read, s2_read, nu_default_compound_read, nu_default_compound_read, nu_ducet_weight, 0, 0, 0); } int nu_strcasecoll(const char *s1, const char *s2, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read) { return _nu_strcoll(s1, NU_UNLIMITED, s2, NU_UNLIMITED, s1_read, s2_read, nu_nocase_compound_read, nu_nocase_compound_read, nu_ducet_weight, 0, 0, 0); } const char* nu_strstr(const char *haystack, const char *needle, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read) { return _nu_strstr(haystack, NU_UNLIMITED, needle, NU_UNLIMITED, haystack_read, needle_read, nu_default_compound_read, nu_default_compound_read, 0, 0, nu_ducet_weight, 0); } const char* nu_strcasestr(const char *haystack, const char *needle, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read) { return _nu_strstr(haystack, NU_UNLIMITED, needle, NU_UNLIMITED, haystack_read, needle_read, nu_nocase_compound_read, nu_nocase_compound_read, NU_FOLDING_FUNCTION, nu_casemap_read, nu_ducet_weight, 0); } #endif /* NU_WITH_Z_COLLATION */ #ifdef NU_WITH_N_COLLATION const char* nu_strnchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read) { return _nu_strchr(encoded, encoded + max_len, c, read, nu_default_compound_read, 0, 0); } const char* nu_strcasenchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read) { return _nu_strchr(encoded, encoded + max_len, c, read, nu_nocase_compound_read, NU_FOLDING_FUNCTION, nu_casemap_read); } const char* nu_strrnchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read) { return _nu_strrchr(encoded, encoded + max_len, c, read, nu_default_compound_read, 0, 0); } const char* nu_strrcasenchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read) { return _nu_strrchr(encoded, encoded + max_len, c, read, nu_nocase_compound_read, NU_FOLDING_FUNCTION, nu_casemap_read); } int nu_strncoll(const char *s1, size_t s1_max_len, const char *s2, size_t s2_max_len, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read) { return _nu_strcoll(s1, s1 + s1_max_len, s2, s2 + s2_max_len, s1_read, s2_read, nu_default_compound_read, nu_default_compound_read, nu_ducet_weight, 0, 0, 0); } int nu_strcasencoll(const char *s1, size_t s1_max_len, const char *s2, size_t s2_max_len, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read) { return _nu_strcoll(s1, s1 + s1_max_len, s2, s2 + s2_max_len, s1_read, s2_read, nu_nocase_compound_read, nu_nocase_compound_read, nu_ducet_weight, 0, 0, 0); } const char* nu_strnstr(const char *haystack, size_t haystack_max_len, const char *needle, size_t needle_max_len, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read) { return _nu_strstr(haystack, haystack + haystack_max_len, needle, needle + needle_max_len, haystack_read, needle_read, nu_default_compound_read, nu_default_compound_read, 0, 0, nu_ducet_weight, 0); } const char* nu_strcasenstr(const char *haystack, size_t haystack_max_len, const char *needle, size_t needle_max_len, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read) { return _nu_strstr(haystack, haystack + haystack_max_len, needle, needle + needle_max_len, haystack_read, needle_read, nu_nocase_compound_read, nu_nocase_compound_read, NU_FOLDING_FUNCTION, nu_casemap_read, nu_ducet_weight, 0); } #endif /* NU_WITH_N_COLLATION */ #endif /* NU_WITH_Z_COLLATION || NU_WITH_N_COLLATION */ RediSearch-1.2.2/src/dep/libnu/strcoll.h000066400000000000000000000115641364126773500200550ustar00rootroot00000000000000#ifndef NU_STRCOLL_H #define NU_STRCOLL_H /** @defgroup collation Collation functions * * All functions in this group are following full Unicode collation rules, * i.e. nu_strstr(haystack, "Æ") will find "AE" in haystack and * nu_strstr(haystack, "ß") will find "ss". * * Same applies for *every* function, nu_strchr(str, 0x00DF), as you would * guess, will also find "ss" in str. * * Please expect this. * * Note on "n" functions variant: please see comment on this topic * in strings.h */ #include #include "config.h" #include "casemap.h" #include "defines.h" #include "strings.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_TOFOLD # define NU_FOLDING_FUNCTION nu_tofold #else # define NU_FOLDING_FUNCTION nu_toupper #endif /* NU_WITH_TOFOLD */ #ifdef NU_WITH_Z_COLLATION /** Locate codepoint in string * * @ingroup collation * @param encoded encoded string * @param c charater to locate * @param read read (decode) function for encoded string * @return pointer to codepoint in string or 0 */ NU_EXPORT const char* nu_strchr(const char *encoded, uint32_t c, nu_read_iterator_t read); /** Locate codepoint in string ignoring case * * @ingroup collation * @see nu_strchr */ NU_EXPORT const char* nu_strcasechr(const char *encoded, uint32_t c, nu_read_iterator_t read); /** Locate codepoint in string in reverse direction * * @ingroup collation * @param encoded encoded string * @param c charater to locate * @param read read (decode) function for encoded string * @return pointer to codepoint in string or 0 */ NU_EXPORT const char* nu_strrchr(const char *encoded, uint32_t c, nu_read_iterator_t read); /** Locate codepoint in string in reverse direction, case-insensitive * * @ingroup collation * @see nu_strrchr */ NU_EXPORT const char* nu_strrcasechr(const char *encoded, uint32_t c, nu_read_iterator_t read); /** Compare strings in case-sensitive manner. * * @ingroup collation * @param s1 first encoded strings * @param s2 second encoded strings * @param s1_read read (decode) function for first string * @param s2_read read (decode) function for second string * @return -1, 0, 1 */ NU_EXPORT int nu_strcoll(const char *s1, const char *s2, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read); /** Compare strings in case-insensitive manner. * * @ingroup collation * @see nu_strcoll */ NU_EXPORT int nu_strcasecoll(const char *s1, const char *s2, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read); /** Find needle in haystack * * @ingroup collation * @param haystack encoded haystack * @param needle encoded needle * @param haystack_read haystack read (decode) function * @param needle_read needle read (decode) function * @return pointer to found string or 0, will return * haystack if needle is empty string */ NU_EXPORT const char* nu_strstr(const char *haystack, const char *needle, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read); /** Find needle in haystack (case-insensitive) * * @ingroup collation * @see nu_strstr */ NU_EXPORT const char* nu_strcasestr(const char *haystack, const char *needle, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read); #endif /* NU_WITH_Z_COLLATION */ #ifdef NU_WITH_N_COLLATION /** * @ingroup collation * @see nu_strchr */ NU_EXPORT const char* nu_strnchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read); /** * @ingroup collation * @see nu_strcasechr */ NU_EXPORT const char* nu_strcasenchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read); /** * @ingroup collation * @see nu_strrchr */ NU_EXPORT const char* nu_strrnchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read); /** * @ingroup collation * @see nu_strrcasechr */ NU_EXPORT const char* nu_strrcasenchr(const char *encoded, size_t max_len, uint32_t c, nu_read_iterator_t read); /** * @ingroup collation * @see nu_strcoll */ NU_EXPORT int nu_strncoll(const char *s1, size_t s1_max_len, const char *s2, size_t s2_max_len, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read); /** * @ingroup collation * @see nu_strncoll */ NU_EXPORT int nu_strcasencoll(const char *s1, size_t s1_max_len, const char *s2, size_t s2_max_len, nu_read_iterator_t s1_read, nu_read_iterator_t s2_read); /** * @ingroup collation * @see nu_strstr */ NU_EXPORT const char* nu_strnstr(const char *haystack, size_t haystack_max_len, const char *needle, size_t needle_max_len, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read); /** * @ingroup collation * @see nu_strcasestr */ NU_EXPORT const char* nu_strcasenstr(const char *haystack, size_t haystack_max_len, const char *needle, size_t needle_max_len, nu_read_iterator_t haystack_read, nu_read_iterator_t needle_read); #endif /* NU_WITH_N_COLLATION */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_STRCOLL_H */ RediSearch-1.2.2/src/dep/libnu/strcoll_internal.h000066400000000000000000000165411364126773500217510ustar00rootroot00000000000000#ifndef NU_STRCOLL_INTERNAL_H #define NU_STRCOLL_INTERNAL_H /** @defgroup collation_internal Internal collation functions * * Functions in this group are mostly for the internal use. PLease use them * with care. */ #include "config.h" #include "casemap.h" #include "defines.h" #include "strings.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif /** Read (decode) iterator with transformation applied inside of it * * @ingroup collation_internal * @see nu_default_compound_read * @see nu_nocase_compound_read */ typedef const char* (*nu_compound_read_t)( const char *encoded, const char *encoded_limit, nu_read_iterator_t encoded_read, uint32_t *unicode, const char **tail); /** Weight unicode codepoint (or several codepoints) * * 0 should always be weighted to 0. If your weight function need more * than one codepoint - return negative value, which will be passed back to * this function along with next codepoint. * * When function decided on weight and returned positive result, it has to * fill weight with how many (Unicode) codepoints nunicode should rollback. * E.g. function consumed "ZZS" and decided weight (in Hungarian collation), * it fills 0 to \*weight because no rollback is needed. Then function * consumed "ZZZ" and no weight available for such contraction - it * returns weight for "Z" and fills \*weight with 2, to rollback * redundant "ZZ". * * If string suddenly ends before weight function can decide (string limit * reached), 0 will be passed additionally to the previous string to signal * end of the string. * * @ingroup collation_internal * @param u unicode codepoint to weight * @param weight 0 at first call or (on sequential calls) pointer to negative * weight previously returned by this function * @param context pointer passed to _nu_strcoll() or _nu_strstr() * @return positive codepoint weight or negative value if function need more * codepoints */ typedef int32_t (*nu_codepoint_weight_t)(uint32_t u, int32_t *weight, void *context); #if (defined NU_WITH_Z_COLLATION) || (defined NU_WITH_N_COLLATION) /** Default compound read, equal to simply calling encoded_read(encoded, &unicode) * * @ingroup collation_internal * @param encoded encoded string * @param encoded_limit upper limit for encoded. NU_UNLIMITED for 0-terminated * strings * @param encoded_read read (decode) function * @param unicode output unicode codepoint * @param tail output pointer to compound tail, should never be 0 * @return pointer to next encoded codepoint */ static inline const char* nu_default_compound_read(const char *encoded, const char *encoded_limit, nu_read_iterator_t encoded_read, uint32_t *unicode, const char **tail) { (void)(encoded_limit); (void)(tail); return encoded_read(encoded, unicode); } /** Case-ignoring compound read, equal to calling * encoded_read(encoded, &unicode) with nu_toupper() applied internally * * @ingroup collation_internal * @param encoded encoded string * @param encoded_limit upper limit for encoded. NU_UNLIMITED for 0-terminated * strings * @param encoded_read read (decode) function * @param unicode output unicode codepoint * @param tail output pointer to compound tail, should never be 0 * @return pointer to next encoded codepoint */ static inline const char* nu_nocase_compound_read(const char *encoded, const char *encoded_limit, nu_read_iterator_t encoded_read, uint32_t *unicode, const char **tail) { /* re-entry with tail != 0 */ if (*tail != 0) { *tail = nu_casemap_read(*tail, unicode); if (*unicode != 0) { return encoded; } *tail = 0; // fall thru } if (encoded >= encoded_limit) { *unicode = 0; return encoded; } const char *p = encoded_read(encoded, unicode); if (*unicode == 0) { return p; } const char *map = NU_FOLDING_FUNCTION(*unicode); if (map != 0) { *tail = nu_casemap_read(map, unicode); } return p; } /** Internal interface for nu_strcoll * * @ingroup collation_internal * @param lhs left-hand side encoded string * @param lhs_limit upper limit for lhs, use NU_UNLIMITED for 0-terminated * strings * @param rhs right-hand side encoded string * @param rhs_limit upper limit for rhs, use NU_UNLIMITED for 0-terminated * strings * @param it1 lhs read (decoding) function * @param it2 rhs read (decoding) function * @param com1 lhs compound read function * @param com2 rhs compound read function * @param weight codepoint weighting function * @param context pointer which will be passed to weight * @param collated_left (optional) number of codepoints collated in lhs * @param collated_right (optional) number of codepoints collated in rhs * * @see nu_strcoll * @see nu_default_compound_read * @see nu_nocase_compound_read * @see nu_ducet_weight */ NU_EXPORT int _nu_strcoll(const char *lhs, const char *lhs_limit, const char *rhs, const char *rhs_limit, nu_read_iterator_t it1, nu_read_iterator_t it2, nu_compound_read_t com1, nu_compound_read_t com2, nu_codepoint_weight_t weight, void *context, ssize_t *collated_left, ssize_t *collated_right); /** Internal interface for nu_strchr * * @ingroup collation_internal * @param lhs left-hand side encoded string * @param lhs_limit upper limit for lhs, use NU_UNLIMITED for 0-terminated * strings * @param c unicode codepoint to look for * @param read lhs read (decoding) function * @param com lhs compound read function * @param casemap casemapping function * @param casemap_read casemapping result decoding function * * @see nu_strchr * @see nu_default_compound_read * @see nu_nocase_compound_read * @see nu_toupper * @see nu_tolower */ NU_EXPORT const char* _nu_strchr(const char *lhs, const char *lhs_limit, uint32_t c, nu_read_iterator_t read, nu_compound_read_t com, nu_casemapping_t casemap, nu_read_iterator_t casemap_read); /** Internal interface for nu_strchr * * @ingroup collation_internal * @see _nu_strchr */ NU_EXPORT const char* _nu_strrchr(const char *encoded, const char *limit, uint32_t c, nu_read_iterator_t read, nu_compound_read_t com, nu_casemapping_t casemap, nu_read_iterator_t casemap_read); /** Internal interface for nu_strcoll * * @ingroup collation_internal * @param haystack encoded haystack * @param haystack_limit upper limit for haystack, use NU_UNLIMITED for * 0-terminated strings * @param needle encoded needle string * @param needle_limit upper limit for needle, use NU_UNLIMITED for * 0-terminated strings * @param it1 haystack read (decoding) function * @param it2 needle read (decoding) function * @param com1 haystack compound read function * @param com2 needle compound read function * @param casemap casemapping function * @param casemap_read casemapping result decoding function * @param weight codepoint weighting function * @param context pointer which will be passed to weight * * @see nu_strstr * @see nu_default_compound_read * @see nu_nocase_compound_read * @see nu_toupper * @see nu_tolower * @see nu_ducet_weight */ NU_EXPORT const char* _nu_strstr(const char *haystack, const char *haystack_limit, const char *needle, const char *needle_limit, nu_read_iterator_t it1, nu_read_iterator_t it2, nu_compound_read_t com1, nu_compound_read_t com2, nu_casemapping_t casemap, nu_read_iterator_t casemap_read, nu_codepoint_weight_t weight, void *context); #endif /* (defined NU_WITH_Z_COLLATION) || (defined NU_WITH_N_COLLATION) */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_STRCOLL_INTERNAL_H */ RediSearch-1.2.2/src/dep/libnu/strings.c000066400000000000000000000034461364126773500200570ustar00rootroot00000000000000#include "defines.h" #include "strings.h" #if defined (NU_WITH_Z_STRINGS) || defined(NU_WITH_N_STRINGS) static ssize_t _nu_strlen(const char *encoded, const char *limit, nu_read_iterator_t it) { ssize_t len = 0; const char *p = encoded; while (p < limit) { uint32_t u = 0; p = it(p, &u); if (u == 0) { break; } ++len; } return len; } static ssize_t _nu_bytelen(const uint32_t *unicode, const uint32_t *limit, nu_write_iterator_t it) { ssize_t len = 0; const uint32_t *p = unicode; while (p < limit) { if (*p == 0) { break; } /* nu_write_iterator_t will return offset relative to 0 * which is effectively bytes length of codepoint */ size_t byte_len = (size_t)it(*p, 0); len += byte_len; ++p; } return len; } static ssize_t _nu_strbytelen(const char *encoded, const char *limit, nu_read_iterator_t it) { uint32_t u = 0; const char *p = encoded; while (p < limit) { const char *np = it(p, &u); if (u == 0) { return (p - encoded); } p = np; } return 0; } #endif /* NU_WITH_N_STRINGS || NU_WITH_Z_STRINGS */ #ifdef NU_WITH_Z_STRINGS ssize_t nu_strlen(const char *encoded, nu_read_iterator_t it) { return _nu_strlen(encoded, NU_UNLIMITED, it); } ssize_t nu_bytelen(const uint32_t *unicode, nu_write_iterator_t it) { return _nu_bytelen(unicode, NU_UNLIMITED, it); } ssize_t nu_strbytelen(const char *encoded, nu_read_iterator_t it) { return _nu_strbytelen(encoded, NU_UNLIMITED, it); } #endif /* NU_WITH_Z_STRINGS */ #ifdef NU_WITH_N_STRINGS ssize_t nu_strnlen(const char *encoded, size_t max_len, nu_read_iterator_t it) { return _nu_strlen(encoded, encoded + max_len, it); } ssize_t nu_bytenlen(const uint32_t *unicode, size_t max_len, nu_write_iterator_t it) { return _nu_bytelen(unicode, unicode + max_len, it); } #endif /* NU_WITH_N_STRINGS */ RediSearch-1.2.2/src/dep/libnu/strings.h000066400000000000000000000070421364126773500200600ustar00rootroot00000000000000#ifndef NU_STRINGS_H #define NU_STRINGS_H /** @defgroup strings String functions * * Note on "n" functions variant: "n" is in bytes in all functions, * note though that those are not for memory overrun control. * They are just for strings not having terminating 0 byte and those * functions won't go further than m-th *codepoint* in string, but might go * further than n-th byte in case of multibyte sequence. * * E.g.: ``nu_strnlen("абв", 3, nu_utf8_read);``. * Since codepoints are 2-byte sequences, nu_strnlen() won't go further than 2nd * codepoint, but will go further than 3rd byte while reading "б". */ /** @defgroup transformations Codepoint transformations * * @example folding.c */ /** @defgroup transformations_internal Codepoint transformations (internal) * * @example special_casing.c */ #include #include #include "config.h" #include "defines.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif /** @defgroup iterators Iterators */ /** Read (decode) iterator * * @ingroup iterators * @see nu_utf8_read */ typedef const char* (*nu_read_iterator_t)(const char *encoded, uint32_t *unicode); /** Read (decode) backwards iterator * * Arguments intentionally reversed to not mix this with nu_read_iterator_t. * Reverse read is not compatible with any of string functions. * * @ingroup iterators * @see nu_utf8_revread */ typedef const char* (*nu_revread_iterator_t)(uint32_t *unicode, const char *encoded); /** Write (encode) iterator * * @ingroup iterators * @see nu_utf8_write */ typedef char* (*nu_write_iterator_t)(uint32_t unicode, char *encoded); /** Transform codepoint * * @ingroup transformations * @see nu_toupper * @see nu_tolower */ typedef const char* (*nu_transformation_t)(uint32_t codepoint); /** Transform codepoint (used internally). This kind of transformation * delegates iteration on string to transformation implementation. * * @ingroup transformations_internal * @see _nu_toupper * @see _nu_tolower */ typedef const char* (*nu_transform_read_t)( const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transformed, void *context); #if (defined NU_WITH_Z_STRINGS) || (defined NU_WITH_N_STRINGS) #endif /* NU_WITH_Z_STRINGS NU_WITH_N_STRINGS */ #ifdef NU_WITH_Z_STRINGS /** Get decoded string codepoints length * * @ingroup strings * @param encoded encoded string * @param it decoding function * @return string length or negative error * * @see nu_strnlen */ NU_EXPORT ssize_t nu_strlen(const char *encoded, nu_read_iterator_t it); /** Get encoded string bytes length (encoding variant) * * @ingroup strings * @param unicode unicode codepoints * @param it encoding function * @return byte length or negative error * * @see nu_bytenlen */ NU_EXPORT ssize_t nu_bytelen(const uint32_t *unicode, nu_write_iterator_t it); /** Get encoded string bytes length * * @ingroup strings * @param encoded encoded string * @param it decoding function * @return string length or negative error */ NU_EXPORT ssize_t nu_strbytelen(const char *encoded, nu_read_iterator_t it); #endif /* NU_WITH_Z_STRINGS */ #ifdef NU_WITH_N_STRINGS /** * @ingroup strings * @see nu_strlen */ NU_EXPORT ssize_t nu_strnlen(const char *encoded, size_t max_len, nu_read_iterator_t it); /** * @ingroup strings * @see nu_bytelen */ NU_EXPORT ssize_t nu_bytenlen(const uint32_t *unicode, size_t max_len, nu_write_iterator_t it); #endif /* NU_WITH_N_STRINGS */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_STRINGS_H */ RediSearch-1.2.2/src/dep/libnu/tofold.c000066400000000000000000000011521364126773500176450ustar00rootroot00000000000000#include "casemap.h" #ifdef NU_WITH_TOFOLD #include "casemap_internal.h" #include "gen/_tofold.c" const char* nu_tofold(uint32_t codepoint) { return _nu_to_something(codepoint, NU_TOFOLD_G, NU_TOFOLD_G_SIZE, NU_TOFOLD_VALUES_C, NU_TOFOLD_VALUES_I, NU_TOFOLD_COMBINED); } const char* _nu_tofold(const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transform, void *context) { (void)(limit); (void)(context); uint32_t _u = 0; const char *np = read(encoded, &_u); *transform = nu_tofold(_u); if (u != 0) { *u = _u; } return np; } #endif /* NU_WITH_TOFOLD */ RediSearch-1.2.2/src/dep/libnu/tolower.c000066400000000000000000000021341364126773500200520ustar00rootroot00000000000000#include #include "casemap.h" #ifdef NU_WITH_TOLOWER #include "casemap_internal.h" #include "gen/_tolower.c" /* in nu_casemap_read (UTF-8), zero-terminated */ static const char *__nu_final_sigma = "ς"; const char* nu_tolower(uint32_t codepoint) { return _nu_to_something(codepoint, NU_TOLOWER_G, NU_TOLOWER_G_SIZE, NU_TOLOWER_VALUES_C, NU_TOLOWER_VALUES_I, NU_TOLOWER_COMBINED); } const char* _nu_tolower(const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transform, void *context) { (void)(context); uint32_t _u = 0; const char *np = read(encoded, &_u); if (u != 0) { *u = _u; } /* handling of 0x03A3 ('Σ') * * this is the only language-independent exception described in * SpecialCasing.txt (Unicode 7.0) */ assert(nu_casemap_read == nu_utf8_read); if (_u == 0x03A3) { if (np >= limit) { *transform = __nu_final_sigma; return np; } uint32_t nu = 0; read(np, &nu); if (nu == 0) { *transform = __nu_final_sigma; return np; } } *transform = nu_tolower(_u); return np; } #endif /* NU_WITH_TOLOWER */ RediSearch-1.2.2/src/dep/libnu/toupper.c000066400000000000000000000011651364126773500200600ustar00rootroot00000000000000#include "casemap.h" #ifdef NU_WITH_TOUPPER #include "casemap_internal.h" #include "gen/_toupper.c" const char* nu_toupper(uint32_t codepoint) { return _nu_to_something(codepoint, NU_TOUPPER_G, NU_TOUPPER_G_SIZE, NU_TOUPPER_VALUES_C, NU_TOUPPER_VALUES_I, NU_TOUPPER_COMBINED); } const char* _nu_toupper(const char *encoded, const char *limit, nu_read_iterator_t read, uint32_t *u, const char **transform, void *context) { (void)(limit); (void)(context); uint32_t _u = 0; const char *np = read(encoded, &_u); *transform = nu_toupper(_u); if (u != 0) { *u = _u; } return np; } #endif /* NU_WITH_TOUPPER */ RediSearch-1.2.2/src/dep/libnu/udb.h000066400000000000000000000036111364126773500171370ustar00rootroot00000000000000#ifndef NU_UDB_H #define NU_UDB_H #include #include #include "config.h" #include "defines.h" #include "mph.h" #include "strings.h" #include "utf8.h" /** @defgroup udb Unicode database * * Note: never use it directly, it is subject to change in next releases */ #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UDB #define NU_UDB_DECODING_FUNCTION (nu_utf8_read) #define nu_udb_read (nu_utf8_read) /** Lookup value in UDB * * Similar to nu_udb_lookup(), but doesn't look into COMBINED * * @ingroup udb * @see nu_udb_lookup * @return raw value from VALUES_I or 0 if value wasn't found */ static inline uint32_t nu_udb_lookup_value(uint32_t codepoint, const int16_t *G, size_t G_SIZE, const uint32_t *VALUES_C, const uint16_t *VALUES_I) { uint32_t hash = nu_mph_hash(G, G_SIZE, codepoint); uint32_t value = nu_mph_lookup(VALUES_C, VALUES_I, codepoint, hash); return value; } /** Lookup data in UDB * * Returned data is encoded, therefore you need to use p = it(p, &u) to * fetch it. Returned string might contain more than 1 codepoint. * * @ingroup udb * @param codepoint unicode codepoint * @param G first MPH table * @param G_SIZE first table number of elements (original MPH set size) * @param VALUES_C codepoints array * @param VALUES_I offsets array * @param COMBINED joined values addressed by index stored in VALUES * @return looked up data or 0 */ static inline const char* nu_udb_lookup(uint32_t codepoint, const int16_t *G, size_t G_SIZE, const uint32_t *VALUES_C, const uint16_t *VALUES_I, const uint8_t *COMBINED) { uint32_t combined_offset = nu_udb_lookup_value(codepoint, G, G_SIZE, VALUES_C, VALUES_I); if (combined_offset == 0) { return 0; } return (const char *)(COMBINED + combined_offset); } #endif /* NU_WITH_UDB */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UDB_H */ RediSearch-1.2.2/src/dep/libnu/utf16.c000066400000000000000000000027061364126773500173310ustar00rootroot00000000000000#include "utf16.h" #include "utf16be.h" #include "utf16le.h" #ifdef NU_WITH_UTF16_READER const char* nu_utf16_read_bom(const char *encoded, nu_utf16_bom_t *bom) { unsigned char bom0 = *(unsigned char *)(encoded); unsigned char bom1 = *(unsigned char *)(encoded + 1); if (bom0 == 0xFF && bom1 == 0xFE) { if (bom != 0) { #ifdef NU_WITH_UTF16_WRITER bom->write_bom = nu_utf16le_write_bom; #endif bom->read = nu_utf16le_read; bom->write = nu_utf16le_write; #ifdef NU_WITH_REVERSE_READ bom->revread = nu_utf16le_revread; #endif #ifdef NU_WITH_VALIDATION bom->validread = nu_utf16le_validread; #endif } } else { if (bom != 0) { #ifdef NU_WITH_UTF16_WRITER bom->write_bom = nu_utf16be_write_bom; #endif bom->read = nu_utf16be_read; bom->write = nu_utf16be_write; #ifdef NU_WITH_REVERSE_READ bom->revread = nu_utf16be_revread; #endif #ifdef NU_WITH_VALIDATION bom->validread = nu_utf16be_validread; #endif } if (bom0 == 0xFE && bom1 == 0xFF) { return encoded + 2; } else { return encoded; } } return encoded + 2; } #endif /* NU_WITH_UTF16_READER */ #ifdef NU_WITH_UTF16_WRITER char* nu_utf16le_write_bom(char *encoded) { unsigned char *p = (unsigned char *)(encoded); *(p) = 0xFF; *(p + 1) = 0xFE; return encoded + 2; } char* nu_utf16be_write_bom(char *encoded) { unsigned char *p = (unsigned char *)(encoded); *(p) = 0xFE; *(p + 1) = 0xFF; return encoded + 2; } #endif /* NU_WITH_UTF16_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf16.h000066400000000000000000000042241364126773500173330ustar00rootroot00000000000000#ifndef NU_UTF16_H #define NU_UTF16_H #include #include "config.h" #include "defines.h" #include "strings.h" #include "validate.h" /** @defgroup utf16 UTF-16 support * * @example utf16.c */ #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #if (defined NU_WITH_UTF16_READER) || (defined NU_WITH_UTF16_WRITER) /** For sizeof() only * * @ingroup utf16 */ static const uint16_t NU_UTF16_BOM = 0; #endif /** Endianess-specific function to write BOM * * @ingroup utf16 * @see nu_utf16le_write_bom */ typedef char* (*nu_utf16_write_bom_t)(char *); #ifdef NU_WITH_UTF16_READER /** Holder for endianess-specific UTF-16 functions * * @ingroup utf16 */ typedef struct { /** Read (decode) function */ nu_read_iterator_t read; /** Write (encode) function */ nu_write_iterator_t write; /** Reverse-read (decode) function */ nu_revread_iterator_t revread; /** Validation function */ nu_validread_iterator_t validread; /** BOM writing function */ nu_utf16_write_bom_t write_bom; } nu_utf16_bom_t; /** Read BOM from encoded string * * Note that if BOM is not specified in string, it defaults to big-endian * * @ingroup utf16 * @param encoded pointer to encoded strings * @param bom optional, this struct will be filled with read, write, etc * function for detected BOM. Note revread, validread and write might be 0 * if not enabled in build options * @return pointer to next codepoint in UTF-16 string or encoded if BOM is * not found */ NU_EXPORT const char* nu_utf16_read_bom(const char *encoded, nu_utf16_bom_t *bom); #endif /* NU_WITH_UTF16_READER */ #ifdef NU_WITH_UTF16_WRITER /** Write little-endian BOM to a string * * @ingroup utf16 * @param encoded pointer to encoded string or 0 * @return pointer to byte after written BOM */ NU_EXPORT char* nu_utf16le_write_bom(char *encoded); /** Write big-endian BOM to a string * * @ingroup utf16 * @param encoded pointer to encoded string or 0 * @return pointer to byte after written BOM */ NU_EXPORT char* nu_utf16be_write_bom(char *encoded); #endif /* NU_WITH_UTF16_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF16_H */ RediSearch-1.2.2/src/dep/libnu/utf16_internal.h000066400000000000000000000053101364126773500212240ustar00rootroot00000000000000#ifndef NU_UTF16_INTERNAL_H #define NU_UTF16_INTERNAL_H #include static inline uint16_t nu_letohs(const char *p) { const unsigned char *up = (const unsigned char *)(p); return (*(up + 1) << 8 | *(up)); } static inline void nu_htoles(uint16_t s, char *p) { unsigned char *up = (unsigned char *)(p); *(up) = (s & 0xFF); *(up + 1) = ((s & 0xFF00) >> 8); } static inline uint16_t nu_betohs(const char *p) { const unsigned char *up = (const unsigned char *)(p); return (*(up) << 8 | *(up + 1)); } static inline void nu_htobes(uint16_t s, char *p) { unsigned char *up = (unsigned char *)(p); *(up + 1) = (s & 0xFF); *(up) = ((s & 0xFF00) >> 8); } static inline unsigned utf16_char_length(uint16_t c) { if (c >= 0xD800 && c <= 0xDBFF) { return 4; } return 2; } static inline unsigned utf16_codepoint_length(uint32_t codepoint) { if (codepoint >= 0x10000) { return 4; } return 2; } static inline void b4_utf16(uint32_t codepoint, uint16_t *lead, uint16_t *trail) { /** UNICODE: 00000000 0000xxxx xxxxxxyy yyyyyyyy * * 0000xxxx xxxxxxyy >> 10 -> 110110xx xxxxxxxx |__ lead * | * xxxxxxyy yyyyyyyy -> 110111yy yyyyyyyy |__ trail * | * */ *lead = 0xD800 | ((codepoint - 0x10000) & 0x000FFC00) >> 10; *trail = 0xDC00 | (codepoint & 0x03FF); } static inline int utf16_valid_lead(char lead_high_byte) { unsigned char up = (unsigned char)(lead_high_byte); return (up >= 0xD8 && up <= 0xDB) ? 1 : 0; } static inline int utf16_valid_trail(char trail_high_byte) { unsigned char up = (unsigned char)(trail_high_byte); return (up >= 0xDC && up <= 0xDF) ? 1 : 0; } static inline int utf16_validread(const char *lead_high_byte, size_t max_len) { /* this implementation use the fact that * lead surrogate high byte and trail surrogate high byte * are always 2 bytes away from each other independently * from endianess. therefore pointer passed to this function * is called lead_high_byte and pointing to endianess-dependent * lead's high byte * * e.g. * UTF-16LE: 0x41 0xD8 0x00 0xDC * ^-------------- lead_high_byte * UTF-16BE: 0xD8 0x41 0xDC 0x00 * ^------------------- lead_high_byte * * note though that max_len is real max_len of original pointer */ if (utf16_valid_lead(*lead_high_byte) != 0) { /* lead surrogate */ if (max_len < 4) { return 0; } if (utf16_valid_trail(*(lead_high_byte + 2)) == 0) { /* trail surrogate */ return 0; } return 4; } /* detect misplaced surrogates */ if (utf16_valid_trail(*lead_high_byte) != 0) { return 0; } return 2; } #endif /* NU_UTF16_INTERNAL_H */ RediSearch-1.2.2/src/dep/libnu/utf16be.c000066400000000000000000000014211364126773500176310ustar00rootroot00000000000000#include "utf16be.h" #ifdef NU_WITH_UTF16BE_READER #ifdef NU_WITH_VALIDATION int nu_utf16be_validread(const char *encoded, size_t max_len) { if (max_len < 2) { return 0; } return utf16_validread(encoded, max_len); } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF16BE_READER */ #ifdef NU_WITH_UTF16BE_WRITER char* nu_utf16be_write(uint32_t unicode, char *utf16) { unsigned codepoint_len = utf16_codepoint_length(unicode); if (utf16 != 0) { switch (codepoint_len) { case 2: nu_htobes((uint16_t)(unicode), utf16); break; default: { /* len == 4 */ uint16_t c0 = 0, c1 = 0; b4_utf16(unicode, &c0, &c1); nu_htobes(c0, utf16); nu_htobes(c1, utf16 + 2); break; } } } return utf16 + codepoint_len; } #endif /* NU_WITH_UTF16BE_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf16be.h000066400000000000000000000031771364126773500176500ustar00rootroot00000000000000#ifndef NU_UTF16BE_H #define NU_UTF16BE_H #include #include #include "config.h" #include "defines.h" #include "utf16_internal.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF16BE_READER /** * @ingroup utf16 * @see nu_utf16le_read */ static inline const char* nu_utf16be_read(const char *utf16, uint32_t *unicode) { uint32_t c = nu_betohs(utf16); if (c >= 0xD800 && c <= 0xDBFF) { if (unicode != 0) { *unicode = ((c & 0x03FF) << 10 | (nu_betohs(utf16 + 2) & 0x03FF)) + 0x10000; } return utf16 + 4; } else if (unicode != 0) { *unicode = c; } return utf16 + 2; } #ifdef NU_WITH_REVERSE_READ /** * @ingroup utf16 * @see nu_utf16le_revread */ static inline const char* nu_utf16be_revread(uint32_t *unicode, const char *utf16) { /* valid UTF-16 sequences are either 2 or 4 bytes long * trail sequences are between 0xDC00 .. 0xDFFF */ const char *p = utf16 - 2; uint16_t ec = nu_betohs(p); if (ec >= 0xDC00 && ec <= 0xDFFF) { /* trail surrogate */ p -= 2; } if (unicode != 0) { nu_utf16be_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** * @ingroup utf16 * @see nu_utf16le_validread */ NU_EXPORT int nu_utf16be_validread(const char *encoded, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF16BE_READER */ #ifdef NU_WITH_UTF16BE_WRITER /** * @ingroup utf16 * @see nu_utf16le_write */ NU_EXPORT char* nu_utf16be_write(uint32_t unicode, char *utf16); #endif /* NU_WITH_UTF16BE_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF16BE_H */ RediSearch-1.2.2/src/dep/libnu/utf16he.c000066400000000000000000000021271364126773500176430ustar00rootroot00000000000000#include "utf16he.h" #include "utf16_internal.h" #ifdef NU_WITH_UTF16HE_READER #ifdef NU_WITH_VALIDATION int nu_utf16he_validread(const char *encoded, size_t max_len) { if (max_len < 2) { return 0; } char lead = (*(uint16_t *)(encoded) & 0xFF00) >> 8; if (utf16_valid_lead(lead) != 0) { if (max_len < 4) { return 0; } char trail = (*(uint16_t *)(encoded + 2) & 0xFF00) >> 8; if (utf16_valid_trail(trail) == 0) { return 0; } return 4; } if (utf16_valid_trail(lead) != 0) { return 0; } return 2; } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF16HE_READER */ #ifdef NU_WITH_UTF16HE_WRITER char* nu_utf16he_write(uint32_t unicode, char *utf16) { unsigned codepoint_len = utf16_codepoint_length(unicode); if (utf16 != 0) { switch (codepoint_len) { case 2: *(uint16_t *)(utf16) = (uint16_t)(unicode); break; default: { /* len == 4 */ uint16_t c0 = 0, c1 = 0; b4_utf16(unicode, &c0, &c1); *(uint16_t *)(utf16) = c0; *(uint16_t *)(utf16 + 2) = c1; break; } } } return utf16 + codepoint_len; } #endif /* NU_WITH_UTF16HE_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf16he.h000066400000000000000000000034461364126773500176550ustar00rootroot00000000000000#ifndef NU_UTF16HE_H #define NU_UTF16HE_H #include #include #include "config.h" #include "defines.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF16HE_READER /** Read codepoint from UTF-16 string * * @ingroup utf16 * @see nu_utf16le_read */ static inline const char* nu_utf16he_read(const char *utf16, uint32_t *unicode) { uint32_t c = *(uint16_t *)(utf16); if (c >= 0xD800 && c <= 0xDBFF) { if (unicode != 0) { *unicode = ((c & 0x03FF) << 10 | (*(uint16_t *)(utf16 + 2) & 0x03FF)) + 0x10000; } return utf16 + 4; } else if (unicode != 0) { *unicode = c; } return utf16 + 2; } #ifdef NU_WITH_REVERSE_READ /** Read codepoint from UTF-16 string in backward direction * * @ingroup utf16 * @see nu_utf16le_revread */ static inline const char* nu_utf16he_revread(uint32_t *unicode, const char *utf16) { /* valid UTF-16 sequences are either 2 or 4 bytes long * trail sequences are between 0xDC00 .. 0xDFFF */ const char *p = utf16 - 2; uint16_t ec = *(uint16_t *)(p); if (ec >= 0xDC00 && ec <= 0xDFFF) { /* trail surrogate */ p -= 2; } if (unicode != 0) { nu_utf16he_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** Validate codepoint in string * * @ingroup utf16 * @see nu_utf16le_validread */ NU_EXPORT int nu_utf16he_validread(const char *encoded, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF16HE_READER */ #ifdef NU_WITH_UTF16HE_WRITER /** Write unicode codepoints into UTF-16 encoded string * * @ingroup utf16 * @see nu_utf16le_write */ NU_EXPORT char* nu_utf16he_write(uint32_t unicode, char *utf16); #endif /* NU_WITH_UTF16HE_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF16HE_H */ RediSearch-1.2.2/src/dep/libnu/utf16le.c000066400000000000000000000014251364126773500176470ustar00rootroot00000000000000#include "utf16le.h" #ifdef NU_WITH_UTF16LE_READER #ifdef NU_WITH_VALIDATION int nu_utf16le_validread(const char *encoded, size_t max_len) { if (max_len < 2) { return 0; } return utf16_validread(encoded + 1, max_len); } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF16LE_READER */ #ifdef NU_WITH_UTF16LE_WRITER char* nu_utf16le_write(uint32_t unicode, char *utf16) { unsigned codepoint_len = utf16_codepoint_length(unicode); if (utf16 != 0) { switch (codepoint_len) { case 2: nu_htoles((uint16_t)(unicode), utf16); break; default: { /* len == 4 */ uint16_t c0 = 0, c1 = 0; b4_utf16(unicode, &c0, &c1); nu_htoles(c0, utf16); nu_htoles(c1, utf16 + 2); break; } } } return utf16 + codepoint_len; } #endif /* NU_WITH_UTF16LE_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf16le.h000066400000000000000000000055761364126773500176670ustar00rootroot00000000000000#ifndef NU_UTF16LE_H #define NU_UTF16LE_H #include #include #include "config.h" #include "defines.h" #include "utf16_internal.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF16LE_READER /** Read codepoint from UTF-16 string * * @ingroup utf16 * @param utf16 pointer to UTF-16 encoded string * @param unicode output unicode codepoint or 0 * @return pointer to next codepoint in UTF-16 string */ static inline const char* nu_utf16le_read(const char *utf16, uint32_t *unicode) { uint32_t c = nu_letohs(utf16); if (c >= 0xD800 && c <= 0xDBFF) { if (unicode != 0) { *unicode = ((c & 0x03FF) << 10 | (nu_letohs(utf16 + 2) & 0x03FF)) + 0x10000; } return utf16 + 4; } else if (unicode != 0) { *unicode = c; } return utf16 + 2; } #ifdef NU_WITH_REVERSE_READ /** Read codepoint from UTF-16 string in backward direction * * Note that it is your responsibility to check that this call * is not going under beginning of encoded string. Normally you * shouldn't call it like this: nu_utf16_revread(&u, "\x67\x00"); which * will result in undefined behavior. * * Also don't mess with pointers, nu_utf16_revread(&u, "\x67\x00\x67\x00" + 3); * won't work correctly. You are supposed to pass pointer received from * nu_utf16le_read(). * * @ingroup utf16 * @param unicode output unicode codepoint or 0 * @param utf16 pointer to UTF-8 encoded string * @return pointer to previous codepoint in UTF-16 string */ static inline const char* nu_utf16le_revread(uint32_t *unicode, const char *utf16) { /* valid UTF-16 sequences are either 2 or 4 bytes long * trail sequences are between 0xDC00 .. 0xDFFF */ const char *p = utf16 - 2; uint16_t ec = nu_letohs(p); if (ec >= 0xDC00 && ec <= 0xDFFF) { /* trail surrogate */ p -= 2; } if (unicode != 0) { nu_utf16le_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** Validate codepoint in string * * @ingroup utf16 * @param encoded buffer with encoded string * @param max_len buffer length * @return codepoint length or 0 on error */ NU_EXPORT int nu_utf16le_validread(const char *encoded, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF16LE_READER */ #ifdef NU_WITH_UTF16LE_WRITER /** Write unicode codepoints into UTF-16 encoded string * * Note that length of decoded UTF-16 string is not entirely strlen(encoded) / 2. * You need to use nu_strlen(encoded, nu_utf16_read) to find out exact value. * * @ingroup utf16 * @param unicode unicode codepoint * @param utf16 pointer to buffer to write UTF-16 encoded text to, * should be large enough to hold encoded value * @return pointer to byte after last written */ NU_EXPORT char* nu_utf16le_write(uint32_t unicode, char *utf16); #endif /* NU_WITH_UTF16LE_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF16LE_H */ RediSearch-1.2.2/src/dep/libnu/utf32.c000066400000000000000000000032501364126773500173220ustar00rootroot00000000000000#include "utf32.h" #include "utf32be.h" #include "utf32le.h" #ifdef NU_WITH_UTF32_READER const char* nu_utf32_read_bom(const char *encoded, nu_utf32_bom_t *bom) { unsigned char bom0 = *(unsigned char *)(encoded); unsigned char bom1 = *(unsigned char *)(encoded + 1); unsigned char bom2 = *(unsigned char *)(encoded + 2); unsigned char bom3 = *(unsigned char *)(encoded + 3); if (bom0 == 0xFF && bom1 == 0xFE && bom2 == 0 && bom3 == 0) { if (bom != 0) { #ifdef NU_WITH_UTF32_WRITER bom->write_bom = nu_utf32le_write_bom; #endif bom->read = nu_utf32le_read; bom->write = nu_utf32le_write; #ifdef NU_WITH_REVERSE_READ bom->revread = nu_utf32le_revread; #endif #ifdef NU_WITH_VALIDATION bom->validread = nu_utf32le_validread; #endif } } else { if (bom != 0) { #ifdef NU_WITH_UTF32_WRITER bom->write_bom = nu_utf32be_write_bom; #endif bom->read = nu_utf32be_read; bom->write = nu_utf32be_write; #ifdef NU_WITH_REVERSE_READ bom->revread = nu_utf32be_revread; #endif #ifdef NU_WITH_VALIDATION bom->validread = nu_utf32be_validread; #endif } if (bom0 == 0 && bom1 == 0 && bom2 == 0xFE && bom3 == 0xFF) { return encoded + 4; } else { return encoded; } } return encoded + 4; } #endif /* NU_WITH_UTF32_READER */ #ifdef NU_WITH_UTF32_WRITER char* nu_utf32le_write_bom(char *encoded) { unsigned char *p = (unsigned char *)(encoded); *(p) = 0xFF; *(p + 1) = 0xFE; *(p + 2) = 0; *(p + 3) = 0; return encoded + 4; } char* nu_utf32be_write_bom(char *encoded) { unsigned char *p = (unsigned char *)(encoded); *(p) = 0; *(p + 1) = 0; *(p + 2) = 0xFE; *(p + 3) = 0xFF; return encoded + 4; } #endif /* NU_WITH_UTF32_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf32.h000066400000000000000000000030151364126773500173260ustar00rootroot00000000000000#ifndef NU_UTF32_H #define NU_UTF32_H #include #include "config.h" #include "defines.h" #include "strings.h" #include "validate.h" /** @defgroup utf32 UTF-32 support */ #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #if (defined NU_WITH_UTF32_READER) || (defined NU_WITH_UTF32_WRITER) /** For sizeof() only * * @ingroup utf32 */ static const uint32_t NU_UTF32_BOM = 0; #endif /** Endianess-specific UTF-32 write BOM function */ typedef char* (*nu_utf32_write_bom_t)(char *); #ifdef NU_WITH_UTF32_READER /** Holder for endianess-specific UTF-32 functions * * @ingroup utf32 * @see nu_utf32_write_bom */ typedef struct { /** Read (decode) function */ nu_read_iterator_t read; /** Write (encode) function */ nu_write_iterator_t write; /** Reverse-read (decode) function */ nu_revread_iterator_t revread; /** Validation function */ nu_validread_iterator_t validread; /** BOM writing function */ nu_utf32_write_bom_t write_bom; } nu_utf32_bom_t; /** * @ingroup utf32 * @see nu_utf16_read_bom */ NU_EXPORT const char* nu_utf32_read_bom(const char *encoded, nu_utf32_bom_t *bom); #endif /* NU_WITH_UTF32_READER */ #ifdef NU_WITH_UTF32_WRITER /** * @ingroup utf32 * @see nu_utf16le_write_bom */ NU_EXPORT char* nu_utf32le_write_bom(char *encoded); /** * @ingroup utf32 * @see nu_utf16be_write_bom */ NU_EXPORT char* nu_utf32be_write_bom(char *encoded); #endif /* NU_WITH_UTF32_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF32_H */ RediSearch-1.2.2/src/dep/libnu/utf32_internal.h000066400000000000000000000021531364126773500212240ustar00rootroot00000000000000#ifndef NU_UTF32_INTERNAL_H #define NU_UTF32_INTERNAL_H #include #define NU_UTF32_MAX_CODEPOINT (0x0010FFFF) static inline uint32_t nu_letohl(const char *p) { const unsigned char *up = (const unsigned char *)(p); return (*(up + 3) << 24 | *(up + 2) << 16 | *(up + 1) << 8 | *(up)); } static inline void nu_htolel(uint32_t s, char *p) { unsigned char *up = (unsigned char *)(p); *(up) = (s & 0xFF); *(up + 1) = ((s & 0xFF00) >> 8); *(up + 2) = ((s & 0xFF0000) >> 16); *(up + 3) = ((s & 0xFF000000) >> 24); } static inline uint32_t nu_betohl(const char *p) { const unsigned char *up = (const unsigned char *)(p); return (*(up) << 24 | *(up + 1) << 16 | *(up + 2) << 8 | *(up + 3)); } static inline void nu_htobel(uint32_t s, char *p) { unsigned char *up = (unsigned char *)(p); *(up + 3) = (s & 0xFF); *(up + 2) = (s & 0xFF00) >> 8; *(up + 1) = (s & 0xFF0000) >> 16; *(up) = (s & 0xFF000000) >> 24; } static inline int utf32_validread_basic(const char *p, size_t max_len) { (void)(p); return (max_len >= 4 ? 4 : 0); /* UTF-32 is ok with any 4-byte sequence */ } #endif /* NU_UTF32_INTERNAL_H */ RediSearch-1.2.2/src/dep/libnu/utf32be.c000066400000000000000000000011411364126773500176260ustar00rootroot00000000000000#include "utf32be.h" #ifdef NU_WITH_UTF32BE_READER #ifdef NU_WITH_VALIDATION int nu_utf32be_validread(const char *p, size_t max_len) { if (utf32_validread_basic(p, max_len) == 0) { return 0; } uint32_t u = 0; nu_utf32be_read(p, &u); if (u > NU_UTF32_MAX_CODEPOINT) { return 0; } return (u >= 0xD800 && u <= 0xDFFF ? 0 : 4); } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF32BE_READER */ #ifdef NU_WITH_UTF32BE_WRITER char* nu_utf32be_write(uint32_t unicode, char *utf32) { if (utf32 != 0) { nu_htobel(unicode, utf32); } return utf32 + 4; } #endif /* NU_WITH_UTF32BE_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf32be.h000066400000000000000000000023531364126773500176410ustar00rootroot00000000000000#ifndef NU_UTF32BE_H #define NU_UTF32BE_H #include #include #include "config.h" #include "defines.h" #include "utf32_internal.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF32BE_READER /** * @ingroup utf32 * @see nu_utf16be_read */ static inline const char* nu_utf32be_read(const char *utf32, uint32_t *unicode) { if (unicode != 0) { *unicode = nu_betohl(utf32); } return utf32 + 4; } #ifdef NU_WITH_REVERSE_READ /* * @ingroup utf32 * @see nu_utf16be_revread */ static inline const char* nu_utf32be_revread(uint32_t *unicode, const char *utf32) { const char *p = utf32 - 4; if (unicode != 0) { nu_utf32be_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** * @ingroup utf32 * @see nu_utf16be_validread */ NU_EXPORT int nu_utf32be_validread(const char *p, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF32BE_READER */ #ifdef NU_WITH_UTF32BE_WRITER /** * @ingroup utf32 * @see nu_utf16be_write */ NU_EXPORT char* nu_utf32be_write(uint32_t unicode, char *utf32); #endif /* NU_WITH_UTF32BE_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF32BE_H */ RediSearch-1.2.2/src/dep/libnu/utf32he.c000066400000000000000000000012171364126773500176400ustar00rootroot00000000000000#include "utf32he.h" #ifdef NU_WITH_UTF32HE_READER #ifdef NU_WITH_REVERSE_READ #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION int nu_utf32he_validread(const char *p, size_t max_len) { if (utf32_validread_basic(p, max_len) == 0) { return 0; } uint32_t u = 0; nu_utf32he_read(p, &u); if (u > NU_UTF32_MAX_CODEPOINT) { return 0; } return (u >= 0xD800 && u <= 0xDFFF ? 0 : 4); } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF32HE_READER */ #ifdef NU_WITH_UTF32HE_WRITER char* nu_utf32he_write(uint32_t unicode, char *utf32) { *(uint32_t *)(utf32) = unicode; return utf32 + 4; } #endif /* NU_WITH_UTF32HE_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf32he.h000066400000000000000000000023571364126773500176530ustar00rootroot00000000000000#ifndef NU_UTF32HE_H #define NU_UTF32HE_H #include #include #include "config.h" #include "defines.h" #include "utf32_internal.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF32HE_READER /** * @ingroup utf32 * @see nu_utf16le_read */ static inline const char* nu_utf32he_read(const char *utf32, uint32_t *unicode) { if (unicode != 0) { *unicode = *(uint32_t *)(utf32); } return utf32 + 4; } #ifdef NU_WITH_REVERSE_READ /* * @ingroup utf32 * @see nu_utf16le_revread */ static inline const char* nu_utf32he_revread(uint32_t *unicode, const char *utf32) { const char *p = utf32 - 4; if (unicode != 0) { nu_utf32he_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** * @ingroup utf32 * @see nu_utf16le_validread */ NU_EXPORT int nu_utf32he_validread(const char *p, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF32HE_READER */ #ifdef NU_WITH_UTF32HE_WRITER /** * @ingroup utf32 * @see nu_utf16le_write */ NU_EXPORT char* nu_utf32he_write(uint32_t unicode, char *utf32); #endif /* NU_WITH_UTF32LE_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF32HE_H */ RediSearch-1.2.2/src/dep/libnu/utf32le.c000066400000000000000000000011411364126773500176400ustar00rootroot00000000000000#include "utf32le.h" #ifdef NU_WITH_UTF32LE_READER #ifdef NU_WITH_VALIDATION int nu_utf32le_validread(const char *p, size_t max_len) { if (utf32_validread_basic(p, max_len) == 0) { return 0; } uint32_t u = 0; nu_utf32le_read(p, &u); if (u > NU_UTF32_MAX_CODEPOINT) { return 0; } return (u >= 0xD800 && u <= 0xDFFF ? 0 : 4); } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF32LE_READER */ #ifdef NU_WITH_UTF32LE_WRITER char* nu_utf32le_write(uint32_t unicode, char *utf32) { if (utf32 != 0) { nu_htolel(unicode, utf32); } return utf32 + 4; } #endif /* NU_WITH_UTF32LE_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf32le.h000066400000000000000000000023531364126773500176530ustar00rootroot00000000000000#ifndef NU_UTF32LE_H #define NU_UTF32LE_H #include #include #include "config.h" #include "defines.h" #include "utf32_internal.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF32LE_READER /** * @ingroup utf32 * @see nu_utf16le_read */ static inline const char* nu_utf32le_read(const char *utf32, uint32_t *unicode) { if (unicode != 0) { *unicode = nu_letohl(utf32); } return utf32 + 4; } #ifdef NU_WITH_REVERSE_READ /* * @ingroup utf32 * @see nu_utf16le_revread */ static inline const char* nu_utf32le_revread(uint32_t *unicode, const char *utf32) { const char *p = utf32 - 4; if (unicode != 0) { nu_utf32le_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** * @ingroup utf32 * @see nu_utf16le_validread */ NU_EXPORT int nu_utf32le_validread(const char *p, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF32LE_READER */ #ifdef NU_WITH_UTF32LE_WRITER /** * @ingroup utf32 * @see nu_utf16le_write */ NU_EXPORT char* nu_utf32le_write(uint32_t unicode, char *utf32); #endif /* NU_WITH_UTF32LE_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF32LE_H */ RediSearch-1.2.2/src/dep/libnu/utf8.c000066400000000000000000000036401364126773500172500ustar00rootroot00000000000000#include "utf8.h" #ifdef NU_WITH_UTF8_READER #ifdef NU_WITH_VALIDATION int nu_utf8_validread(const char *encoded, size_t max_len) { int len = utf8_validread_basic(encoded, max_len); if (len <= 0) { return 0; } /* Unicode core spec, D92, Table 3-7 */ switch (len) { /* case 1: single byte sequence can't be > 0x7F and produce len == 1 */ case 2: { uint8_t p1 = *(const unsigned char *)(encoded); if (p1 < 0xC2) { /* 2-byte sequences with p1 > 0xDF are 3-byte sequences */ return 0; } /* the rest will be handled by utf8_validread_basic() */ break; } case 3: { uint8_t p1 = *(const unsigned char *)(encoded); /* 3-byte sequences with p1 < 0xE0 are 2-byte sequences, * 3-byte sequences with p1 > 0xEF are 4-byte sequences */ uint8_t p2 = *(const unsigned char *)(encoded + 1); if (p1 == 0xE0 && p2 < 0xA0) { return 0; } else if (p1 == 0xED && p2 > 0x9F) { return 0; } /* (p2 < 0x80 || p2 > 0xBF) and p3 will be covered * by utf8_validread_basic() */ break; } case 4: { uint8_t p1 = *(const unsigned char *)(encoded); if (p1 > 0xF4) { /* 4-byte sequence with p1 < 0xF0 are 3-byte sequences */ return 0; } uint8_t p2 = *(const unsigned char *)(encoded + 1); if (p1 == 0xF0 && p2 < 0x90) { return 0; } /* (p2 < 0x80 || p2 > 0xBF) and the rest (p3, p4) * will be covered by utf8_validread_basic() */ break; } } /* switch */ return len; } #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF8_READER */ #ifdef NU_WITH_UTF8_WRITER char* nu_utf8_write(uint32_t unicode, char *utf8) { unsigned codepoint_len = utf8_codepoint_length(unicode); if (utf8 != 0) { switch (codepoint_len) { case 1: *utf8 = (char)(unicode); break; case 2: b2_utf8(unicode, utf8); break; case 3: b3_utf8(unicode, utf8); break; default: b4_utf8(unicode, utf8); break; /* len == 4 */ } } return utf8 + codepoint_len; } #endif /* NU_WITH_UTF8_WRITER */ RediSearch-1.2.2/src/dep/libnu/utf8.h000066400000000000000000000054641364126773500172630ustar00rootroot00000000000000#ifndef NU_UTF8_H #define NU_UTF8_H #include #include #include "config.h" #include "defines.h" #include "utf8_internal.h" /** @defgroup utf8 UTF-8 support * * Note: There is no utf8_string[i] equivalent - it will be slow, * use nu_utf8_read() and nu_utf8_revread() instead * * @example utf8.c * @example revread.c */ #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif #ifdef NU_WITH_UTF8_READER /** Read codepoint from UTF-8 string * * @ingroup utf8 * @param utf8 pointer to UTF-8 encoded string * @param unicode output unicode codepoint or 0 * @return pointer to next codepoint in UTF-8 string */ static inline const char* nu_utf8_read(const char *utf8, uint32_t *unicode) { uint32_t c = *(unsigned char *)(utf8); if (c >= 0x80) { if (c < 0xE0) { if (unicode != 0) { utf8_2b(utf8, unicode); } return utf8 + 2; } else if (c < 0xF0) { if (unicode != 0) { utf8_3b(utf8, unicode); } return utf8 + 3; } else { if (unicode != 0) { utf8_4b(utf8, unicode); } return utf8 + 4; } } else if (unicode != 0) { *unicode = c; } return utf8 + 1; } #ifdef NU_WITH_REVERSE_READ /** Read codepoint from UTF-8 string in backward direction * * Note that it is your responsibility to check that this call * is not going under beginning of encoded string. Normally you * shouldn't call it like this: nu_utf8_revread(&u, "hello"); which * will result in undefined behavior * * @ingroup utf8 * @param unicode output unicode codepoint or 0 * @param utf8 pointer to UTF-8 encoded string * @return pointer to previous codepoint in UTF-8 string */ static inline const char* nu_utf8_revread(uint32_t *unicode, const char *utf8) { /* valid UTF-8 has either 10xxxxxx (continuation byte) * or beginning of byte sequence */ const char *p = utf8 - 1; while (((unsigned char)(*p) & 0xC0) == 0x80) { /* skip every 0b10000000 */ --p; } if (unicode != 0) { nu_utf8_read(p, unicode); } return p; } #endif /* NU_WITH_REVERSE_READ */ #ifdef NU_WITH_VALIDATION /** Validate codepoint in string * * @ingroup utf8 * @param encoded buffer with encoded string * @param max_len buffer length * @return codepoint length or 0 on error */ NU_EXPORT int nu_utf8_validread(const char *encoded, size_t max_len); #endif /* NU_WITH_VALIDATION */ #endif /* NU_WITH_UTF8_READER */ #ifdef NU_WITH_UTF8_WRITER /** Write unicode codepoints into UTF-8 encoded string * * @ingroup utf8 * @param unicode unicode codepoint * @param utf8 pointer to buffer to write UTF-8 encoded text to, * should be large enough to hold encoded value * @return pointer to byte after last written */ NU_EXPORT char* nu_utf8_write(uint32_t unicode, char *utf8); #endif /* NU_WITH_UTF8_WRITER */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_UTF8_H */ RediSearch-1.2.2/src/dep/libnu/utf8_internal.h000066400000000000000000000130421364126773500211460ustar00rootroot00000000000000#ifndef NU_UTF8_INTERNAL_H #define NU_UTF8_INTERNAL_H #include static inline unsigned utf8_char_length(const char c) { const unsigned char uc = c; if ((uc & 0x80) == 0) return 1; if ((uc & 0xE0) == 0xC0) return 2; if ((uc & 0xF0) == 0xE0) return 3; if ((uc & 0xF8) == 0xF0) return 4; return 0; /* undefined */ } static inline void utf8_2b(const char *p, uint32_t *codepoint) { const unsigned char *up = (const unsigned char *)(p); /* UTF-8: 110xxxxx 10xxxxxx * |__ 1st unicode octet * 110xxx00 << 6 -> 00000xxx 00000000 | * -------- * 110000xx << 6 -> 00000xxx xx000000 |__ 2nd unicode octet * 10xxxxxx -> 00000xxx xxxxxxxx | * -------- */ *codepoint = (*(up) & 0x1C) << 6 | ((*(up) & 0x03) << 6 | (*(up + 1) & 0x3F)); } static inline void utf8_3b(const char *p, uint32_t *codepoint) { const unsigned char *up = (const unsigned char *)(p); /* UTF-8: 1110xxxx 10xxxxxx 10xxxxxx * * 1110xxxx << 12 -> xxxx0000 0000000 |__ 1st unicode octet * 10xxxx00 << 6 -> xxxxxxxx 0000000 | * -------- * 100000xx << 6 -> xxxxxxxx xx00000 |__ 2nd unicode octet * 10xxxxxx -> xxxxxxxx xxxxxxx | * ------- */ *codepoint = ((*(up) & 0x0F) << 12 | (*(up + 1) & 0x3C) << 6) | ((*(up + 1) & 0x03) << 6 | (*(up + 2) & 0x3F)); } static inline void utf8_4b(const char *p, uint32_t *codepoint) { const unsigned char *up = (const unsigned char *)(p); /* UTF-8: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx * * 11110xxx << 18 -> 00xxx00 00000000 00000000 |__ 1st unicode octet * 10xx0000 << 12 -> 00xxxxx 00000000 00000000 | * ------- * 1000xxxx << 12 -> 00xxxxx xxxx0000 00000000 |__ 2nd unicode octet * 10xxxx00 << 6 -> 00xxxxx xxxxxxxx 00000000 | * -------- * 100000xx << 6 -> 00xxxxx xxxxxxxx xx000000 |__ 3rd unicode octet * 10xxxxxx -> 00xxxxx xxxxxxxx xxxxxxxx | * --------- */ *codepoint = ((*(up) & 0x07) << 18 | (*(up + 1) & 0x30) << 12) | ((*(up + 1) & 0x0F) << 12 | (*(up + 2) & 0x3C) << 6) | ((*(up + 2) & 0x03) << 6 | (*(up + 3) & 0x3F)); } static inline unsigned utf8_codepoint_length(uint32_t codepoint) { if (codepoint < 128) return 1; if (codepoint < 0x0800) return 2; if (codepoint < 0x10000) return 3; return 4; /* de facto max length in UTF-8 */ } static inline void b2_utf8(uint32_t codepoint, char *p) { unsigned char *up = (unsigned char *)(p); /* UNICODE: 00000xxx xxxxxxxx * * 00000xxx >> 6 -> 110xxx00 10000000 |__ 1st UTF-8 octet * xxxxxxxx >> 6 -> 110xxxxx 10000000 | * -------- * |__ 2nd UTF-8 octet * xxxxxxxx -> 110xxxxx 10xxxxxx | * -------- */ *(up) = (0xC0 | (codepoint & 0xFF00) >> 6 | (codepoint & 0xFF) >> 6); *(up + 1) = (0x80 | (codepoint & 0x3F)); } static inline void b3_utf8(uint32_t codepoint, char *p) { unsigned char *up = (unsigned char *)(p); /* UNICODE: xxxxxxxx xxxxxxxx * |__ 1st UTF-8 octet * xxxxxxxx >> 12 -> 1110xxxx 10000000 10000000 | * -------- * xxxxxxxx >> 6 -> 1110xxxx 10xxxx00 10000000 |__ 2nd UTF-8 octet * xxxxxxxx >> 6 -> 1110xxxx 10xxxxxx 10000000 | * -------- * |__ 3rd UTF-8 octet * xxxxxxxx -> 1110xxxx 10xxxxxx 10xxxxxx | * -------- */ *(up) = (0xE0 | (codepoint & 0xF000) >> 12); *(up + 1) = (0x80 | (codepoint & 0x0F00) >> 6 | (codepoint & 0xC0) >> 6); *(up + 2) = (0x80 | (codepoint & 0x3F)); } static inline void b4_utf8(uint32_t codepoint, char *p) { unsigned char *up = (unsigned char *)(p); /* UNICODE: 000xxxxx xxxxxxxx xxxxxxxx * |__ 1st UTF-8 octet * 000xxxxx >> 18 -> 11110xxx 1000000 10000000 10000000 | * -------- * 000xxxxx >> 12 -> 11110xxx 10xx000 10000000 10000000 |__ 2nd UTF-8 octet * xxxxxxxx >> 12 -> 11110xxx 10xxxxx 10000000 10000000 | * ------- * xxxxxxxx >> 6 -> 11110xxx 10xxxxx 10xxxxx0 10000000 |__ 3rd UTF-8 octet * xxxxxxxx >> 6 -> 11110xxx 10xxxxx 10xxxxxx 10000000 | * -------- * |__ 4th UTF-8 octet * xxxxxxxx -> 11110xxx 10xxxxx 10xxxxxx 10000000 | */ *(up) = (0xF0 | ((codepoint & 0x1C0000) >> 18)); *(up + 1) = (0x80 | (codepoint & 0x030000) >> 12 | (codepoint & 0x00E000) >> 12); *(up + 2) = (0x80 | (codepoint & 0x001F00) >> 6 | (codepoint & 0x0000E0) >> 6); *(up + 3) = (0x80 | (codepoint & 0x3F)); } static inline int utf8_validread_basic(const char *p, size_t max_len) { const unsigned char *up = (const unsigned char *)(p); /* it should be 0xxxxxxx or 110xxxxx or 1110xxxx or 11110xxx * latter should be followed by number of 10xxxxxx */ unsigned len = utf8_char_length(*p); /* codepoints longer than 6 bytes does not currently exist * and not currently supported * TODO: longer UTF-8 sequences support */ if (max_len < len) { return 0; } switch (len) { case 1: return 1; /* one byte codepoint */ case 2: return ((*(up + 1) & 0xC0) == 0x80 ? 2 : 0); case 3: return ((*(up + 1) & 0xC0) == 0x80 && (*(up + 2) & 0xC0) == 0x80 ? 3 : 0); case 4: return ((*(up + 1) & 0xC0) == 0x80 && (*(up + 2) & 0xC0) == 0x80 && (*(up + 3) & 0xC0) == 0x80 ? 4 : 0); } return 0; } #endif /* NU_UTF8_INTERNAL_H */ RediSearch-1.2.2/src/dep/libnu/validate.c000066400000000000000000000006341364126773500201530ustar00rootroot00000000000000#include "validate.h" #ifdef NU_WITH_VALIDATION const char* nu_validate(const char *encoded, size_t max_len, nu_validread_iterator_t it) { const char *p = encoded; while (p < encoded + max_len) { /* max_len should be tested inside of it() call */ int byte_len = it(p, max_len - (p - encoded)); if (byte_len <= 0) { return p; } p += byte_len; } return 0; } #endif /* NU_WITH_VALIDATION */ RediSearch-1.2.2/src/dep/libnu/validate.h000066400000000000000000000022221364126773500201530ustar00rootroot00000000000000#ifndef NU_VALIDATE_H #define NU_VALIDATE_H /** @defgroup validation Encoding validation */ #include #include #include "config.h" #include "defines.h" #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif /** Validation function * * @ingroup iterators * @see nu_utf8_validread */ typedef int (*nu_validread_iterator_t)(const char *p, size_t max_len); #ifdef NU_WITH_VALIDATION /** Validate string encoding * * If this check fails then none of the nunicode functions is applicable to * 'encoded'. Calling any function on such string will lead to undefined * behavior. * * @ingroup validation * @param encoded encoded string * @param max_len length of the buffer, nu_validate() won't go further * than this * @param it validating iterator (e.g. nu_utf8_validread) * @return 0 on valid string, pointer to invalid segment in string on * validation error * * @see nu_utf8_validread */ NU_EXPORT const char* nu_validate(const char *encoded, size_t max_len, nu_validread_iterator_t it); #endif /* NU_WITH_VALIDATION */ #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_VALIDATE_H */ RediSearch-1.2.2/src/dep/libnu/version.c000066400000000000000000000002121364126773500200370ustar00rootroot00000000000000#include "version.h" static const char *__nu_version_string = NU_VERSION; const char* nu_version(void) { return __nu_version_string; } RediSearch-1.2.2/src/dep/libnu/version.h000066400000000000000000000007611364126773500200550ustar00rootroot00000000000000#ifndef NU_VERSION_H #define NU_VERSION_H #include "defines.h" /** @defgroup other Other */ #if defined (__cplusplus) || defined (c_plusplus) extern "C" { #endif /** This define holds human-readable version of nunicode * * @ingroup defines */ #define NU_VERSION "custom" /** Human-readable version of nunicode * * @ingroup other * @return version string */ NU_EXPORT const char* nu_version(void); #if defined (__cplusplus) || defined (c_plusplus) } #endif #endif /* NU_VERSION_H */ RediSearch-1.2.2/src/dep/miniz/000077500000000000000000000000001364126773500162305ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/miniz/Makefile000066400000000000000000000000661364126773500176720ustar00rootroot00000000000000all: libminiz.a libminiz.a: miniz.o $(AR) rcs $@ $^ RediSearch-1.2.2/src/dep/miniz/miniz.c000066400000000000000000011441571364126773500175370ustar00rootroot00000000000000/************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #include "miniz.h" typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1]; typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1]; typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; #ifdef __cplusplus extern "C" { #endif /* ------------------- zlib-style API's */ mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) { mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; if (!ptr) return MZ_ADLER32_INIT; while (buf_len) { for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; } for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; } return (s2 << 16) + s1; } /* Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ */ #if 0 mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) { static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; mz_uint32 crcu32 = (mz_uint32)crc; if (!ptr) return MZ_CRC32_INIT; crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } return ~crcu32; } #else /* Faster, but larger CPU cache footprint. */ mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) { static const mz_uint32 s_crc_table[256] = { 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D }; mz_uint32 crc32 = (mz_uint32)crc ^ 0xFFFFFFFF; const mz_uint8 *pByte_buf = (const mz_uint8 *)ptr; while (buf_len >= 4) { crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF]; crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[1]) & 0xFF]; crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[2]) & 0xFF]; crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[3]) & 0xFF]; pByte_buf += 4; buf_len -= 4; } while (buf_len) { crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF]; ++pByte_buf; --buf_len; } return ~crc32; } #endif void mz_free(void *p) { MZ_FREE(p); } void *miniz_def_alloc_func(void *opaque, size_t items, size_t size) { (void)opaque, (void)items, (void)size; return MZ_MALLOC(items * size); } void miniz_def_free_func(void *opaque, void *address) { (void)opaque, (void)address; MZ_FREE(address); } void *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size) { (void)opaque, (void)address, (void)items, (void)size; return MZ_REALLOC(address, items * size); } const char *mz_version(void) { return MZ_VERSION; } #ifndef MINIZ_NO_ZLIB_APIS int mz_deflateInit(mz_streamp pStream, int level) { return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); } int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) { tdefl_compressor *pComp; mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); if (!pStream) return MZ_STREAM_ERROR; if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) return MZ_PARAM_ERROR; pStream->data_type = 0; pStream->adler = MZ_ADLER32_INIT; pStream->msg = NULL; pStream->reserved = 0; pStream->total_in = 0; pStream->total_out = 0; if (!pStream->zalloc) pStream->zalloc = miniz_def_alloc_func; if (!pStream->zfree) pStream->zfree = miniz_def_free_func; pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); if (!pComp) return MZ_MEM_ERROR; pStream->state = (struct mz_internal_state *)pComp; if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) { mz_deflateEnd(pStream); return MZ_PARAM_ERROR; } return MZ_OK; } int mz_deflateReset(mz_streamp pStream) { if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) return MZ_STREAM_ERROR; pStream->total_in = pStream->total_out = 0; tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL, ((tdefl_compressor *)pStream->state)->m_flags); return MZ_OK; } int mz_deflate(mz_streamp pStream, int flush) { size_t in_bytes, out_bytes; mz_ulong orig_total_in, orig_total_out; int mz_status = MZ_OK; if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; if (!pStream->avail_out) return MZ_BUF_ERROR; if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; if (((tdefl_compressor *)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; orig_total_in = pStream->total_in; orig_total_out = pStream->total_out; for (;;) { tdefl_status defl_status; in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; defl_status = tdefl_compress((tdefl_compressor *)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state); pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; if (defl_status < 0) { mz_status = MZ_STREAM_ERROR; break; } else if (defl_status == TDEFL_STATUS_DONE) { mz_status = MZ_STREAM_END; break; } else if (!pStream->avail_out) break; else if ((!pStream->avail_in) && (flush != MZ_FINISH)) { if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) break; return MZ_BUF_ERROR; /* Can't make forward progress without some input. */ } } return mz_status; } int mz_deflateEnd(mz_streamp pStream) { if (!pStream) return MZ_STREAM_ERROR; if (pStream->state) { pStream->zfree(pStream->opaque, pStream->state); pStream->state = NULL; } return MZ_OK; } mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) { (void)pStream; /* This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) */ return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); } int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) { int status; mz_stream stream; memset(&stream, 0, sizeof(stream)); /* In case mz_ulong is 64-bits (argh I hate longs). */ if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; stream.next_in = pSource; stream.avail_in = (mz_uint32)source_len; stream.next_out = pDest; stream.avail_out = (mz_uint32)*pDest_len; status = mz_deflateInit(&stream, level); if (status != MZ_OK) return status; status = mz_deflate(&stream, MZ_FINISH); if (status != MZ_STREAM_END) { mz_deflateEnd(&stream); return (status == MZ_OK) ? MZ_BUF_ERROR : status; } *pDest_len = stream.total_out; return mz_deflateEnd(&stream); } int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) { return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); } mz_ulong mz_compressBound(mz_ulong source_len) { return mz_deflateBound(NULL, source_len); } typedef struct { tinfl_decompressor m_decomp; mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; int m_window_bits; mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; tinfl_status m_last_status; } inflate_state; int mz_inflateInit2(mz_streamp pStream, int window_bits) { inflate_state *pDecomp; if (!pStream) return MZ_STREAM_ERROR; if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; pStream->data_type = 0; pStream->adler = 0; pStream->msg = NULL; pStream->total_in = 0; pStream->total_out = 0; pStream->reserved = 0; if (!pStream->zalloc) pStream->zalloc = miniz_def_alloc_func; if (!pStream->zfree) pStream->zfree = miniz_def_free_func; pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); if (!pDecomp) return MZ_MEM_ERROR; pStream->state = (struct mz_internal_state *)pDecomp; tinfl_init(&pDecomp->m_decomp); pDecomp->m_dict_ofs = 0; pDecomp->m_dict_avail = 0; pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; pDecomp->m_first_call = 1; pDecomp->m_has_flushed = 0; pDecomp->m_window_bits = window_bits; return MZ_OK; } int mz_inflateInit(mz_streamp pStream) { return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); } int mz_inflate(mz_streamp pStream, int flush) { inflate_state *pState; mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; size_t in_bytes, out_bytes, orig_avail_in; tinfl_status status; if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; pState = (inflate_state *)pStream->state; if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; orig_avail_in = pStream->avail_in; first_call = pState->m_first_call; pState->m_first_call = 0; if (pState->m_last_status < 0) return MZ_DATA_ERROR; if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; pState->m_has_flushed |= (flush == MZ_FINISH); if ((flush == MZ_FINISH) && (first_call)) { /* MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. */ decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); pState->m_last_status = status; pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; if (status < 0) return MZ_DATA_ERROR; else if (status != TINFL_STATUS_DONE) { pState->m_last_status = TINFL_STATUS_FAILED; return MZ_BUF_ERROR; } return MZ_STREAM_END; } /* flush != MZ_FINISH then we must assume there's more input. */ if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; if (pState->m_dict_avail) { n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; } for (;;) { in_bytes = pStream->avail_in; out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); pState->m_last_status = status; pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); pState->m_dict_avail = (mz_uint)out_bytes; n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); if (status < 0) return MZ_DATA_ERROR; /* Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). */ else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) return MZ_BUF_ERROR; /* Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. */ else if (flush == MZ_FINISH) { /* The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. */ if (status == TINFL_STATUS_DONE) return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; /* status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. */ else if (!pStream->avail_out) return MZ_BUF_ERROR; } else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) break; } return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; } int mz_inflateEnd(mz_streamp pStream) { if (!pStream) return MZ_STREAM_ERROR; if (pStream->state) { pStream->zfree(pStream->opaque, pStream->state); pStream->state = NULL; } return MZ_OK; } int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) { mz_stream stream; int status; memset(&stream, 0, sizeof(stream)); /* In case mz_ulong is 64-bits (argh I hate longs). */ if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; stream.next_in = pSource; stream.avail_in = (mz_uint32)source_len; stream.next_out = pDest; stream.avail_out = (mz_uint32)*pDest_len; status = mz_inflateInit(&stream); if (status != MZ_OK) return status; status = mz_inflate(&stream, MZ_FINISH); if (status != MZ_STREAM_END) { mz_inflateEnd(&stream); return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; } *pDest_len = stream.total_out; return mz_inflateEnd(&stream); } const char *mz_error(int err) { static struct { int m_err; const char *m_pDesc; } s_error_descs[] = { { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } }; mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; return NULL; } #endif /*MINIZ_NO_ZLIB_APIS */ #ifdef __cplusplus } #endif /* This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to */ /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifdef __cplusplus extern "C" { #endif /* ------------------- Low-level Compression (independent from all decompression API's) */ /* Purposely making these tables static for faster init and thread safety. */ static const mz_uint16 s_tdefl_len_sym[256] = { 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268, 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285 }; static const mz_uint8 s_tdefl_len_extra[256] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0 }; static const mz_uint8 s_tdefl_small_dist_sym[512] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17 }; static const mz_uint8 s_tdefl_small_dist_extra[512] = { 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }; static const mz_uint8 s_tdefl_large_dist_sym[128] = { 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; static const mz_uint8 s_tdefl_large_dist_extra[128] = { 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 }; /* Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. */ typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq *pSyms0, tdefl_sym_freq *pSyms1) { mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_OBJ(hist); for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; } while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) { const mz_uint32 *pHist = &hist[pass << 8]; mz_uint offsets[256], cur_ofs = 0; for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; { tdefl_sym_freq *t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; } } return pCur_syms; } /* tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. */ static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) { int root, leaf, next, avbl, used, dpth; if (n == 0) return; else if (n == 1) { A[0].m_key = 1; return; } A[0].m_key += A[1].m_key; root = 0; leaf = 2; for (next = 1; next < n - 1; next++) { if (leaf >= n || A[root].m_key < A[leaf].m_key) { A[next].m_key = A[root].m_key; A[root++].m_key = (mz_uint16)next; } else A[next].m_key = A[leaf++].m_key; if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) { A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key); A[root++].m_key = (mz_uint16)next; } else A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key); } A[n - 2].m_key = 0; for (next = n - 3; next >= 0; next--) A[next].m_key = A[A[next].m_key].m_key + 1; avbl = 1; used = dpth = 0; root = n - 2; next = n - 1; while (avbl > 0) { while (root >= 0 && (int)A[root].m_key == dpth) { used++; root--; } while (avbl > used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; } avbl = 2 * used; dpth++; used = 0; } } /* Limits canonical Huffman code table's max code size. */ enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) { int i; mz_uint32 total = 0; if (code_list_len <= 1) return; for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; for (i = max_code_size; i > 0; i--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); while (total != (1UL << max_code_size)) { pNum_codes[max_code_size]--; for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } total--; } } static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) { int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_OBJ(num_codes); if (static_table) { for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++; } else { tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; int num_used_syms = 0; const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; } pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); for (i = 1, j = num_used_syms; i <= code_size_limit; i++) for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); } next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1); for (i = 0; i < table_len; i++) { mz_uint rev_code = 0, code, code_size; if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; } } #define TDEFL_PUT_BITS(b, l) \ do \ { \ mz_uint bits = b; \ mz_uint len = l; \ MZ_ASSERT(bits <= ((1U << len) - 1U)); \ d->m_bit_buffer |= (bits << d->m_bits_in); \ d->m_bits_in += len; \ while (d->m_bits_in >= 8) \ { \ if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ d->m_bit_buffer >>= 8; \ d->m_bits_in -= 8; \ } \ } \ MZ_MACRO_END #define TDEFL_RLE_PREV_CODE_SIZE() \ { \ if (rle_repeat_count) \ { \ if (rle_repeat_count < 3) \ { \ d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ while (rle_repeat_count--) \ packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ } \ else \ { \ d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \ packed_code_sizes[num_packed_code_sizes++] = 16; \ packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ } \ rle_repeat_count = 0; \ } \ } #define TDEFL_RLE_ZERO_CODE_SIZE() \ { \ if (rle_z_count) \ { \ if (rle_z_count < 3) \ { \ d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \ while (rle_z_count--) \ packed_code_sizes[num_packed_code_sizes++] = 0; \ } \ else if (rle_z_count <= 10) \ { \ d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \ packed_code_sizes[num_packed_code_sizes++] = 17; \ packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ } \ else \ { \ d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \ packed_code_sizes[num_packed_code_sizes++] = 18; \ packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ } \ rle_z_count = 0; \ } \ } static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; static void tdefl_start_dynamic_block(tdefl_compressor *d) { int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; d->m_huff_count[0][256] = 1; tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0; memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); for (i = 0; i < total_code_sizes_to_pack; i++) { mz_uint8 code_size = code_sizes_to_pack[i]; if (!code_size) { TDEFL_RLE_PREV_CODE_SIZE(); if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); } } else { TDEFL_RLE_ZERO_CODE_SIZE(); if (code_size != prev_code_size) { TDEFL_RLE_PREV_CODE_SIZE(); d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size; } else if (++rle_repeat_count == 6) { TDEFL_RLE_PREV_CODE_SIZE(); } } prev_code_size = code_size; } if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); } tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); TDEFL_PUT_BITS(2, 2); TDEFL_PUT_BITS(num_lit_codes - 257, 5); TDEFL_PUT_BITS(num_dist_codes - 1, 5); for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break; num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4); for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes;) { mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); } } static void tdefl_start_static_block(tdefl_compressor *d) { mz_uint i; mz_uint8 *p = &d->m_huff_code_sizes[0][0]; for (i = 0; i <= 143; ++i) *p++ = 8; for (; i <= 255; ++i) *p++ = 9; for (; i <= 279; ++i) *p++ = 7; for (; i <= 287; ++i) *p++ = 8; memset(d->m_huff_code_sizes[1], 5, 32); tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); TDEFL_PUT_BITS(1, 2); } static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { mz_uint flags; mz_uint8 *pLZ_codes; mz_uint8 *pOutput_buf = d->m_pOutput_buf; mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; mz_uint64 bit_buffer = d->m_bit_buffer; mz_uint bits_in = d->m_bits_in; #define TDEFL_PUT_BITS_FAST(b, l) \ { \ bit_buffer |= (((mz_uint64)(b)) << bits_in); \ bits_in += (l); \ } flags = 1; for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) { if (flags == 1) flags = *pLZ_codes++ | 0x100; if (flags & 1) { mz_uint s0, s1, n0, n1, sym, num_extra_bits; mz_uint match_len = pLZ_codes[0], match_dist = *(const mz_uint16 *)(pLZ_codes + 1); pLZ_codes += 3; MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); /* This sequence coaxes MSVC into using cmov's vs. jmp's. */ s0 = s_tdefl_small_dist_sym[match_dist & 511]; n0 = s_tdefl_small_dist_extra[match_dist & 511]; s1 = s_tdefl_large_dist_sym[match_dist >> 8]; n1 = s_tdefl_large_dist_extra[match_dist >> 8]; sym = (match_dist < 512) ? s0 : s1; num_extra_bits = (match_dist < 512) ? n0 : n1; MZ_ASSERT(d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); } else { mz_uint lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) { flags >>= 1; lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) { flags >>= 1; lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); } } } if (pOutput_buf >= d->m_pOutput_buf_end) return MZ_FALSE; *(mz_uint64 *)pOutput_buf = bit_buffer; pOutput_buf += (bits_in >> 3); bit_buffer >>= (bits_in & ~7); bits_in &= 7; } #undef TDEFL_PUT_BITS_FAST d->m_pOutput_buf = pOutput_buf; d->m_bits_in = 0; d->m_bit_buffer = 0; while (bits_in) { mz_uint32 n = MZ_MIN(bits_in, 16); TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); bit_buffer >>= n; bits_in -= n; } TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); return (d->m_pOutput_buf < d->m_pOutput_buf_end); } #else static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) { mz_uint flags; mz_uint8 *pLZ_codes; flags = 1; for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) { if (flags == 1) flags = *pLZ_codes++ | 0x100; if (flags & 1) { mz_uint sym, num_extra_bits; mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); if (match_dist < 512) { sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist]; } else { sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; } MZ_ASSERT(d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); } else { mz_uint lit = *pLZ_codes++; MZ_ASSERT(d->m_huff_code_sizes[0][lit]); TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); } } TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); return (d->m_pOutput_buf < d->m_pOutput_buf_end); } #endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS */ static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) { if (static_block) tdefl_start_static_block(d); else tdefl_start_dynamic_block(d); return tdefl_compress_lz_codes(d); } static int tdefl_flush_block(tdefl_compressor *d, int flush) { mz_uint saved_bit_buf, saved_bits_in; mz_uint8 *pSaved_output_buf; mz_bool comp_block_succeeded = MZ_FALSE; int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; d->m_pOutput_buf = pOutput_buf_start; d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; MZ_ASSERT(!d->m_output_flush_remaining); d->m_output_flush_ofs = 0; d->m_output_flush_remaining = 0; *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) { TDEFL_PUT_BITS(0x78, 8); TDEFL_PUT_BITS(0x01, 8); } TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in; if (!use_raw_block) comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); /* If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. */ if (((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size)) { mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; TDEFL_PUT_BITS(0, 2); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) { TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); } for (i = 0; i < d->m_total_lz_bytes; ++i) { TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); } } /* Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. */ else if (!comp_block_succeeded) { d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; tdefl_compress_block(d, MZ_TRUE); } if (flush) { if (flush == TDEFL_FINISH) { if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } } } else { mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); } } } MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++; if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) { if (d->m_pPut_buf_func) { *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); } else if (pOutput_buf_start == d->m_output_buf) { int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); d->m_out_buf_ofs += bytes_to_copy; if ((n -= bytes_to_copy) != 0) { d->m_output_flush_ofs = bytes_to_copy; d->m_output_flush_remaining = n; } } else { d->m_out_buf_ofs += n; } } return d->m_output_flush_remaining; } #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES #ifdef MINIZ_UNALIGNED_USE_MEMCPY static inline mz_uint16 TDEFL_READ_UNALIGNED_WORD(const mz_uint8* p) { mz_uint16 ret; memcpy(&ret, p, sizeof(mz_uint16)); return ret; } static inline mz_uint16 TDEFL_READ_UNALIGNED_WORD2(const mz_uint16* p) { mz_uint16 ret; memcpy(&ret, p, sizeof(mz_uint16)); return ret; } #else #define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p) #define TDEFL_READ_UNALIGNED_WORD2(p) *(const mz_uint16 *)(p) #endif static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; const mz_uint16 *s = (const mz_uint16 *)(d->m_dict + pos), *p, *q; mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD2(s); MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; for (;;) { for (;;) { if (--num_probes_left == 0) return; #define TDEFL_PROBE \ next_probe_pos = d->m_next[probe_pos]; \ if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ return; \ probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \ break; TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; } if (!dist) break; q = (const mz_uint16 *)(d->m_dict + probe_pos); if (TDEFL_READ_UNALIGNED_WORD2(q) != s01) continue; p = s; probe_len = 32; do { } while ((TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (--probe_len > 0)); if (!probe_len) { *pMatch_dist = dist; *pMatch_len = MZ_MIN(max_match_len, (mz_uint)TDEFL_MAX_MATCH_LEN); break; } else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q)) > match_len) { *pMatch_dist = dist; if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) break; c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); } } } #else static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) { mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; const mz_uint8 *s = d->m_dict + pos, *p, *q; mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; for (;;) { for (;;) { if (--num_probes_left == 0) return; #define TDEFL_PROBE \ next_probe_pos = d->m_next[probe_pos]; \ if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ return; \ probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) \ break; TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; } if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break; if (probe_len > match_len) { *pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return; c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; } } } #endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES */ #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN static mz_bool tdefl_compress_fast(tdefl_compressor *d) { /* Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. */ mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) { const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); d->m_src_buf_left -= num_bytes_to_process; lookahead_size += num_bytes_to_process; while (num_bytes_to_process) { mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); memcpy(d->m_dict + dst_pos, d->m_pSrc, n); if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); d->m_pSrc += n; dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; num_bytes_to_process -= n; } dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) break; while (lookahead_size >= 4) { mz_uint cur_match_dist, cur_match_len = 1; mz_uint8 *pCur_dict = d->m_dict + cur_pos; mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; mz_uint probe_pos = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)lookahead_pos; if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((*(const mz_uint32 *)(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) { const mz_uint16 *p = (const mz_uint16 *)pCur_dict; const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); mz_uint32 probe_len = 32; do { } while ((TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (TDEFL_READ_UNALIGNED_WORD2(++p) == TDEFL_READ_UNALIGNED_WORD2(++q)) && (--probe_len > 0)); cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); if (!probe_len) cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U * 1024U))) { cur_match_len = 1; *pLZ_code_buf++ = (mz_uint8)first_trigram; *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); d->m_huff_count[0][(mz_uint8)first_trigram]++; } else { mz_uint32 s0, s1; cur_match_len = MZ_MIN(cur_match_len, lookahead_size); MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); cur_match_dist--; pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; pLZ_code_buf += 3; *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; } } else { *pLZ_code_buf++ = (mz_uint8)first_trigram; *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); d->m_huff_count[0][(mz_uint8)first_trigram]++; } if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } total_lz_bytes += cur_match_len; lookahead_pos += cur_match_len; dict_size = MZ_MIN(dict_size + cur_match_len, (mz_uint)TDEFL_LZ_DICT_SIZE); cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; MZ_ASSERT(lookahead_size >= cur_match_len); lookahead_size -= cur_match_len; if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) { int n; d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; if ((n = tdefl_flush_block(d, 0)) != 0) return (n < 0) ? MZ_FALSE : MZ_TRUE; total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; } } while (lookahead_size) { mz_uint8 lit = d->m_dict[cur_pos]; total_lz_bytes++; *pLZ_code_buf++ = lit; *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } d->m_huff_count[0][lit]++; lookahead_pos++; dict_size = MZ_MIN(dict_size + 1, (mz_uint)TDEFL_LZ_DICT_SIZE); cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; lookahead_size--; if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) { int n; d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; if ((n = tdefl_flush_block(d, 0)) != 0) return (n < 0) ? MZ_FALSE : MZ_TRUE; total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; } } } d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; return MZ_TRUE; } #endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN */ static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) { d->m_total_lz_bytes++; *d->m_pLZ_code_buf++ = lit; *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } d->m_huff_count[0][lit]++; } static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) { mz_uint32 s0, s1; MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); d->m_total_lz_bytes += match_len; d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); match_dist -= 1; d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3; *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; if (match_len >= TDEFL_MIN_MATCH_LEN) d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; } static mz_bool tdefl_compress_normal(tdefl_compressor *d) { const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left; tdefl_flush flush = d->m_flush; while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) { mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; /* Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. */ if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) { mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; src_buf_left -= num_bytes_to_process; d->m_lookahead_size += num_bytes_to_process; while (pSrc != pSrc_end) { mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++; } } else { while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) { mz_uint8 c = *pSrc++; mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; src_buf_left--; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) { mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); } } } d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) break; /* Simple lazy/greedy parsing state machine. */ len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) { if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) { mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1; } } else { tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); } if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U * 1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) { cur_match_dist = cur_match_len = 0; } if (d->m_saved_match_len) { if (cur_match_len > d->m_saved_match_len) { tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); if (cur_match_len >= 128) { tdefl_record_match(d, cur_match_len, cur_match_dist); d->m_saved_match_len = 0; len_to_move = cur_match_len; } else { d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; } } else { tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0; } } else if (!cur_match_dist) tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) { tdefl_record_match(d, cur_match_len, cur_match_dist); len_to_move = cur_match_len; } else { d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; } /* Move the lookahead forward by len_to_move bytes. */ d->m_lookahead_pos += len_to_move; MZ_ASSERT(d->m_lookahead_size >= len_to_move); d->m_lookahead_size -= len_to_move; d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE); /* Check if it's time to flush the current LZ codes to the internal output buffer. */ if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || ((d->m_total_lz_bytes > 31 * 1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) { int n; d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; if ((n = tdefl_flush_block(d, 0)) != 0) return (n < 0) ? MZ_FALSE : MZ_TRUE; } } d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; return MZ_TRUE; } static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) { if (d->m_pIn_buf_size) { *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; } if (d->m_pOut_buf_size) { size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); d->m_output_flush_ofs += (mz_uint)n; d->m_output_flush_remaining -= (mz_uint)n; d->m_out_buf_ofs += n; *d->m_pOut_buf_size = d->m_out_buf_ofs; } return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; } tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) { if (!d) { if (pIn_buf_size) *pIn_buf_size = 0; if (pOut_buf_size) *pOut_buf_size = 0; return TDEFL_STATUS_BAD_PARAM; } d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size; d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size; d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; d->m_out_buf_ofs = 0; d->m_flush = flush; if (((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf)) { if (pIn_buf_size) *pIn_buf_size = 0; if (pOut_buf_size) *pOut_buf_size = 0; return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); } d->m_wants_to_finish |= (flush == TDEFL_FINISH); if ((d->m_output_flush_remaining) || (d->m_finished)) return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) { if (!tdefl_compress_fast(d)) return d->m_prev_return_status; } else #endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN */ { if (!tdefl_compress_normal(d)) return d->m_prev_return_status; } if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) { if (tdefl_flush_block(d, flush) < 0) return d->m_prev_return_status; d->m_finished = (flush == TDEFL_FINISH); if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); MZ_CLEAR_OBJ(d->m_next); d->m_dict_size = 0; } } return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); } tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) { MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); } tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) { d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user; d->m_flags = (mz_uint)(flags); d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY; d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1; d->m_pIn_buf = NULL; d->m_pOut_buf = NULL; d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL; d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0; if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_dict); memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); return TDEFL_STATUS_OKAY; } tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) { return d->m_prev_return_status; } mz_uint32 tdefl_get_adler32(tdefl_compressor *d) { return d->m_adler32; } mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) { tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE; succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); MZ_FREE(pComp); return succeeded; } typedef struct { size_t m_size, m_capacity; mz_uint8 *m_pBuf; mz_bool m_expandable; } tdefl_output_buffer; static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) { tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; size_t new_size = p->m_size + len; if (new_size > p->m_capacity) { size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; if (!p->m_expandable) return MZ_FALSE; do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity); if (!pNew_buf) return MZ_FALSE; p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; } memcpy((mz_uint8 *)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size; return MZ_TRUE; } void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) { tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); if (!pOut_len) return MZ_FALSE; else *pOut_len = 0; out_buf.m_expandable = MZ_TRUE; if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return NULL; *pOut_len = out_buf.m_size; return out_buf.m_pBuf; } size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) { tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); if (!pOut_buf) return 0; out_buf.m_pBuf = (mz_uint8 *)pOut_buf; out_buf.m_capacity = out_buf_len; if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0; return out_buf.m_size; } static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; /* level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). */ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) { mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES; else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK; else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES; return comp_flags; } #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4204) /* nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) */ #endif /* Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. */ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) { /* Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. */ static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); tdefl_output_buffer out_buf; int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; if (!pComp) return NULL; MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h); if (NULL == (out_buf.m_pBuf = (mz_uint8 *)MZ_MALLOC(out_buf.m_capacity))) { MZ_FREE(pComp); return NULL; } /* write dummy header */ for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); /* compress image data */ tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8 *)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } /* write real header */ *pLen_out = out_buf.m_size - 41; { static const mz_uint8 chans[] = { 0x00, 0x00, 0x04, 0x02, 0x06 }; mz_uint8 pnghdr[41] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x44, 0x41, 0x54 }; pnghdr[18] = (mz_uint8)(w >> 8); pnghdr[19] = (mz_uint8)w; pnghdr[22] = (mz_uint8)(h >> 8); pnghdr[23] = (mz_uint8)h; pnghdr[25] = chans[num_chans]; pnghdr[33] = (mz_uint8)(*pLen_out >> 24); pnghdr[34] = (mz_uint8)(*pLen_out >> 16); pnghdr[35] = (mz_uint8)(*pLen_out >> 8); pnghdr[36] = (mz_uint8)*pLen_out; c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17); for (i = 0; i < 4; ++i, c <<= 8) ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24); memcpy(out_buf.m_pBuf, pnghdr, 41); } /* write footer (IDAT CRC-32, followed by IEND chunk) */ if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { *pLen_out = 0; MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4, *pLen_out + 4); for (i = 0; i < 4; ++i, c <<= 8) (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8)(c >> 24); /* compute final size of file, grab compressed data buffer and return */ *pLen_out += 57; MZ_FREE(pComp); return out_buf.m_pBuf; } void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) { /* Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) */ return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); } /* Allocate the tdefl_compressor and tinfl_decompressor structures in C so that */ /* non-C language bindings to tdefL_ and tinfl_ API don't need to worry about */ /* structure size and allocation mechanism. */ tdefl_compressor *tdefl_compressor_alloc() { return (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); } void tdefl_compressor_free(tdefl_compressor *pComp) { MZ_FREE(pComp); } #ifdef _MSC_VER #pragma warning(pop) #endif #ifdef __cplusplus } #endif /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifdef __cplusplus extern "C" { #endif /* ------------------- Low-level Decompression (completely independent from all compression API's) */ #define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) #define TINFL_MEMSET(p, c, l) memset(p, c, l) #define TINFL_CR_BEGIN \ switch (r->m_state) \ { \ case 0: #define TINFL_CR_RETURN(state_index, result) \ do \ { \ status = result; \ r->m_state = state_index; \ goto common_exit; \ case state_index:; \ } \ MZ_MACRO_END #define TINFL_CR_RETURN_FOREVER(state_index, result) \ do \ { \ for (;;) \ { \ TINFL_CR_RETURN(state_index, result); \ } \ } \ MZ_MACRO_END #define TINFL_CR_FINISH } #define TINFL_GET_BYTE(state_index, c) \ do \ { \ while (pIn_buf_cur >= pIn_buf_end) \ { \ TINFL_CR_RETURN(state_index, (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); \ } \ c = *pIn_buf_cur++; \ } \ MZ_MACRO_END #define TINFL_NEED_BITS(state_index, n) \ do \ { \ mz_uint c; \ TINFL_GET_BYTE(state_index, c); \ bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ num_bits += 8; \ } while (num_bits < (mz_uint)(n)) #define TINFL_SKIP_BITS(state_index, n) \ do \ { \ if (num_bits < (mz_uint)(n)) \ { \ TINFL_NEED_BITS(state_index, n); \ } \ bit_buf >>= (n); \ num_bits -= (n); \ } \ MZ_MACRO_END #define TINFL_GET_BITS(state_index, b, n) \ do \ { \ if (num_bits < (mz_uint)(n)) \ { \ TINFL_NEED_BITS(state_index, n); \ } \ b = bit_buf & ((1 << (n)) - 1); \ bit_buf >>= (n); \ num_bits -= (n); \ } \ MZ_MACRO_END /* TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. */ /* It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a */ /* Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the */ /* bit buffer contains >=15 bits (deflate's max. Huffman code size). */ #define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ do \ { \ temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ if (temp >= 0) \ { \ code_len = temp >> 9; \ if ((code_len) && (num_bits >= code_len)) \ break; \ } \ else if (num_bits > TINFL_FAST_LOOKUP_BITS) \ { \ code_len = TINFL_FAST_LOOKUP_BITS; \ do \ { \ temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ } while ((temp < 0) && (num_bits >= (code_len + 1))); \ if (temp >= 0) \ break; \ } \ TINFL_GET_BYTE(state_index, c); \ bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ num_bits += 8; \ } while (num_bits < 15); /* TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read */ /* beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully */ /* decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. */ /* The slow path is only executed at the very end of the input buffer. */ /* v1.16: The original macro handled the case at the very end of the passed-in input buffer, but we also need to handle the case where the user passes in 1+zillion bytes */ /* following the deflate data and our non-conservative read-ahead path won't kick in here on this code. This is much trickier. */ #define TINFL_HUFF_DECODE(state_index, sym, pHuff) \ do \ { \ int temp; \ mz_uint code_len, c; \ if (num_bits < 15) \ { \ if ((pIn_buf_end - pIn_buf_cur) < 2) \ { \ TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ } \ else \ { \ bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \ pIn_buf_cur += 2; \ num_bits += 16; \ } \ } \ if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ code_len = temp >> 9, temp &= 511; \ else \ { \ code_len = TINFL_FAST_LOOKUP_BITS; \ do \ { \ temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ } while (temp < 0); \ } \ sym = temp; \ bit_buf >>= code_len; \ num_bits -= code_len; \ } \ MZ_MACRO_END tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) { static const int s_length_base[31] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 }; static const int s_length_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0 }; static const int s_dist_base[32] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 }; static const int s_dist_extra[32] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; static const mz_uint8 s_length_dezigzag[19] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; static const int s_min_table_sizes[3] = { 257, 1, 4 }; tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; /* Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). */ if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; } num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start; TINFL_CR_BEGIN bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1; if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) { TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1); counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (r->m_zhdr0 >> 4))))); if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } } do { TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1; if (r->m_type == 0) { TINFL_SKIP_BITS(5, num_bits & 7); for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); } if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); } while ((counter) && (num_bits)) { TINFL_GET_BITS(51, dist, 8); while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); } *pOut_buf_cur++ = (mz_uint8)dist; counter--; } while (counter) { size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); } while (pIn_buf_cur >= pIn_buf_end) { TINFL_CR_RETURN(38, (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); } n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n; } } else if (r->m_type == 3) { TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); } else { if (r->m_type == 1) { mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i; r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); for (i = 0; i <= 143; ++i) *p++ = 8; for (; i <= 255; ++i) *p++ = 9; for (; i <= 279; ++i) *p++ = 7; for (; i <= 287; ++i) *p++ = 8; } else { for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; } MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; } r->m_table_sizes[2] = 19; } for (; (int)r->m_type >= 0; r->m_type--) { int tree_next, tree_cur; tinfl_huff_table *pTable; mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pTable = &r->m_tables[r->m_type]; MZ_CLEAR_OBJ(total_syms); MZ_CLEAR_OBJ(pTable->m_look_up); MZ_CLEAR_OBJ(pTable->m_tree); for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pTable->m_code_size[i]]++; used_syms = 0, total = 0; next_code[0] = next_code[1] = 0; for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); } if ((65536 != total) && (used_syms > 1)) { TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); } for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) { mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; if (!code_size) continue; cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pTable->m_look_up[rev_code] = k; rev_code += (1 << code_size); } continue; } if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) { tree_cur -= ((rev_code >>= 1) & 1); if (!pTable->m_tree[-tree_cur - 1]) { pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTable->m_tree[-tree_cur - 1]; } tree_cur -= ((rev_code >>= 1) & 1); pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; } if (r->m_type == 2) { for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]);) { mz_uint s; TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; } if ((dist == 16) && (!counter)) { TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); } num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16]; TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s; } if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) { TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); } TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); } } for (;;) { mz_uint8 *pSrc; for (;;) { if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) { TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); if (counter >= 256) break; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } *pOut_buf_cur++ = (mz_uint8)counter; } else { int sym2; mz_uint code_len; #if TINFL_USE_64BIT_BITBUF if (num_bits < 30) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); pIn_buf_cur += 4; num_bits += 32; } #else if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } #endif if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) code_len = sym2 >> 9; else { code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); } counter = sym2; bit_buf >>= code_len; num_bits -= code_len; if (counter & 256) break; #if !TINFL_USE_64BIT_BITBUF if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } #endif if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) code_len = sym2 >> 9; else { code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); } bit_buf >>= code_len; num_bits -= code_len; pOut_buf_cur[0] = (mz_uint8)counter; if (sym2 & 256) { pOut_buf_cur++; counter = sym2; break; } pOut_buf_cur[1] = (mz_uint8)sym2; pOut_buf_cur += 2; } } if ((counter &= 511) == 256) break; num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; } TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); num_extra = s_dist_extra[dist]; dist = s_dist_base[dist]; if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; } dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) { TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); } pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) { while (counter--) { while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); } *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; } continue; } #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES else if ((counter >= 9) && (counter <= dist)) { const mz_uint8 *pSrc_end = pSrc + (counter & ~7); do { ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; pOut_buf_cur += 8; } while ((pSrc += 8) < pSrc_end); if ((counter &= 7) < 3) { if (counter) { pOut_buf_cur[0] = pSrc[0]; if (counter > 1) pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur += counter; } continue; } } #endif do { pOut_buf_cur[0] = pSrc[0]; pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur[2] = pSrc[2]; pOut_buf_cur += 3; pSrc += 3; } while ((int)(counter -= 3) > 2); if ((int)counter > 0) { pOut_buf_cur[0] = pSrc[0]; if ((int)counter > 1) pOut_buf_cur[1] = pSrc[1]; pOut_buf_cur += counter; } } } } while (!(r->m_final & 1)); /* Ensure byte alignment and put back any bytes from the bitbuf if we've looked ahead too far on gzip, or other Deflate streams followed by arbitrary data. */ /* I'm being super conservative here. A number of simplifications can be made to the byte alignment part, and the Adler32 check shouldn't ever need to worry about reading from the bitbuf now. */ TINFL_SKIP_BITS(32, num_bits & 7); while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) { --pIn_buf_cur; num_bits -= 8; } bit_buf &= (tinfl_bit_buf_t)((((mz_uint64)1) << num_bits) - (mz_uint64)1); MZ_ASSERT(!num_bits); /* if this assert fires then we've read beyond the end of non-deflate/zlib streams with following data (such as gzip streams). */ if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) { for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; } } TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); TINFL_CR_FINISH common_exit: /* As long as we aren't telling the caller that we NEED more input to make forward progress: */ /* Put back any bytes from the bitbuf in case we've looked ahead too far on gzip, or other Deflate streams followed by arbitrary data. */ /* We need to be very careful here to NOT push back any bytes we definitely know we need to make forward progress, though, or we'll lock the caller up into an inf loop. */ if ((status != TINFL_STATUS_NEEDS_MORE_INPUT) && (status != TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS)) { while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) { --pIn_buf_cur; num_bits -= 8; } } r->m_num_bits = num_bits; r->m_bit_buf = bit_buf & (tinfl_bit_buf_t)((((mz_uint64)1) << num_bits) - (mz_uint64)1); r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) { const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; while (buf_len) { for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; } for (; i < block_len; ++i) s1 += *ptr++, s2 += s1; s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; } r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; } return status; } /* Higher level helper functions. */ void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) { tinfl_decompressor decomp; void *pBuf = NULL, *pNew_buf; size_t src_buf_ofs = 0, out_buf_capacity = 0; *pOut_len = 0; tinfl_init(&decomp); for (;;) { size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL, &dst_buf_size, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) { MZ_FREE(pBuf); *pOut_len = 0; return NULL; } src_buf_ofs += src_buf_size; *pOut_len += dst_buf_size; if (status == TINFL_STATUS_DONE) break; new_out_buf_capacity = out_buf_capacity * 2; if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); if (!pNew_buf) { MZ_FREE(pBuf); *pOut_len = 0; return NULL; } pBuf = pNew_buf; out_buf_capacity = new_out_buf_capacity; } return pBuf; } size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) { tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp); status = tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf, &src_buf_len, (mz_uint8 *)pOut_buf, (mz_uint8 *)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; } int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) { int result = 0; tinfl_decompressor decomp; mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; if (!pDict) return TINFL_STATUS_FAILED; tinfl_init(&decomp); for (;;) { size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); in_buf_ofs += in_buf_size; if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) break; if (status != TINFL_STATUS_HAS_MORE_OUTPUT) { result = (status == TINFL_STATUS_DONE); break; } dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); } MZ_FREE(pDict); *pIn_buf_size = in_buf_ofs; return result; } tinfl_decompressor *tinfl_decompressor_alloc() { tinfl_decompressor *pDecomp = (tinfl_decompressor *)MZ_MALLOC(sizeof(tinfl_decompressor)); if (pDecomp) tinfl_init(pDecomp); return pDecomp; } void tinfl_decompressor_free(tinfl_decompressor *pDecomp) { MZ_FREE(pDecomp); } #ifdef __cplusplus } #endif /************************************************************************** * * Copyright 2013-2014 RAD Game Tools and Valve Software * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC * Copyright 2016 Martin Raiber * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * **************************************************************************/ #ifndef MINIZ_NO_ARCHIVE_APIS #ifdef __cplusplus extern "C" { #endif /* ------------------- .ZIP archive reading */ #ifdef MINIZ_NO_STDIO #define MZ_FILE void * #else #include #if defined(_MSC_VER) || defined(__MINGW64__) static FILE *mz_fopen(const char *pFilename, const char *pMode) { FILE *pFile = NULL; fopen_s(&pFile, pFilename, pMode); return pFile; } static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) { FILE *pFile = NULL; if (freopen_s(&pFile, pPath, pMode, pStream)) return NULL; return pFile; } #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN mz_fopen #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 _ftelli64 #define MZ_FSEEK64 _fseeki64 #define MZ_FILE_STAT_STRUCT _stat #define MZ_FILE_STAT _stat #define MZ_FFLUSH fflush #define MZ_FREOPEN mz_freopen #define MZ_DELETE_FILE remove #elif defined(__MINGW32__) #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftello64 #define MZ_FSEEK64 fseeko64 #define MZ_FILE_STAT_STRUCT _stat #define MZ_FILE_STAT _stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove #elif defined(__TINYC__) #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftell #define MZ_FSEEK64 fseek #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove #elif defined(__GNUC__) && _LARGEFILE64_SOURCE #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen64(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftello64 #define MZ_FSEEK64 fseeko64 #define MZ_FILE_STAT_STRUCT stat64 #define MZ_FILE_STAT stat64 #define MZ_FFLUSH fflush #define MZ_FREOPEN(p, m, s) freopen64(p, m, s) #define MZ_DELETE_FILE remove #elif defined(__APPLE__) && _LARGEFILE64_SOURCE #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #define MZ_FTELL64 ftello #define MZ_FSEEK64 fseeko #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(p, m, s) freopen(p, m, s) #define MZ_DELETE_FILE remove #else #pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.") #ifndef MINIZ_NO_TIME #include #endif #define MZ_FOPEN(f, m) fopen(f, m) #define MZ_FCLOSE fclose #define MZ_FREAD fread #define MZ_FWRITE fwrite #ifdef __STRICT_ANSI__ #define MZ_FTELL64 ftell #define MZ_FSEEK64 fseek #else #define MZ_FTELL64 ftello #define MZ_FSEEK64 fseeko #endif #define MZ_FILE_STAT_STRUCT stat #define MZ_FILE_STAT stat #define MZ_FFLUSH fflush #define MZ_FREOPEN(f, m, s) freopen(f, m, s) #define MZ_DELETE_FILE remove #endif /* #ifdef _MSC_VER */ #endif /* #ifdef MINIZ_NO_STDIO */ #define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c)) /* Various ZIP archive enums. To completely avoid cross platform compiler alignment and platform endian issues, miniz.c doesn't use structs for any of this stuff. */ enum { /* ZIP archive identifiers and record sizes */ MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50, MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50, MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50, MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, /* ZIP64 archive identifier and record sizes */ MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, /* Central directory header record offsets */ MZ_ZIP_CDH_SIG_OFS = 0, MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6, MZ_ZIP_CDH_BIT_FLAG_OFS = 8, MZ_ZIP_CDH_METHOD_OFS = 10, MZ_ZIP_CDH_FILE_TIME_OFS = 12, MZ_ZIP_CDH_FILE_DATE_OFS = 14, MZ_ZIP_CDH_CRC32_OFS = 16, MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20, MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24, MZ_ZIP_CDH_FILENAME_LEN_OFS = 28, MZ_ZIP_CDH_EXTRA_LEN_OFS = 30, MZ_ZIP_CDH_COMMENT_LEN_OFS = 32, MZ_ZIP_CDH_DISK_START_OFS = 34, MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36, MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38, MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42, /* Local directory header offsets */ MZ_ZIP_LDH_SIG_OFS = 0, MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4, MZ_ZIP_LDH_BIT_FLAG_OFS = 6, MZ_ZIP_LDH_METHOD_OFS = 8, MZ_ZIP_LDH_FILE_TIME_OFS = 10, MZ_ZIP_LDH_FILE_DATE_OFS = 12, MZ_ZIP_LDH_CRC32_OFS = 14, MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18, MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22, MZ_ZIP_LDH_FILENAME_LEN_OFS = 26, MZ_ZIP_LDH_EXTRA_LEN_OFS = 28, MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR = 1 << 3, /* End of central directory offsets */ MZ_ZIP_ECDH_SIG_OFS = 0, MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4, MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6, MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8, MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10, MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, /* ZIP64 End of central directory locator offsets */ MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ /* ZIP64 End of central directory header offsets */ MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 }; typedef struct { void *m_p; size_t m_size, m_capacity; mz_uint m_element_size; } mz_zip_array; struct mz_zip_internal_state_tag { mz_zip_array m_central_dir; mz_zip_array m_central_dir_offsets; mz_zip_array m_sorted_central_dir_offsets; /* The flags passed in when the archive is initially opened. */ uint32_t m_init_flags; /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc. */ mz_bool m_zip64; /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64 will also be slammed to true too, even if we didn't find a zip64 end of central dir header, etc.) */ mz_bool m_zip64_has_extended_info_fields; /* These fields are used by the file, FILE, memory, and memory/heap read/write helpers. */ MZ_FILE *m_pFile; mz_uint64 m_file_archive_start_ofs; void *m_pMem; size_t m_mem_size; size_t m_mem_capacity; }; #define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) (array_ptr)->m_element_size = element_size #if defined(DEBUG) || defined(_DEBUG) || defined(NDEBUG) static MZ_FORCEINLINE mz_uint mz_zip_array_range_check(const mz_zip_array *pArray, mz_uint index) { MZ_ASSERT(index < pArray->m_size); return index; } #define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[mz_zip_array_range_check(array_ptr, index)] #else #define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[index] #endif static MZ_FORCEINLINE void mz_zip_array_init(mz_zip_array *pArray, mz_uint32 element_size) { memset(pArray, 0, sizeof(mz_zip_array)); pArray->m_element_size = element_size; } static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip, mz_zip_array *pArray) { pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p); memset(pArray, 0, sizeof(mz_zip_array)); } static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, mz_zip_array *pArray, size_t min_new_capacity, mz_uint growing) { void *pNew_p; size_t new_capacity = min_new_capacity; MZ_ASSERT(pArray->m_element_size); if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE; if (growing) { new_capacity = MZ_MAX(1, pArray->m_capacity); while (new_capacity < min_new_capacity) new_capacity *= 2; } if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p, pArray->m_element_size, new_capacity))) return MZ_FALSE; pArray->m_p = pNew_p; pArray->m_capacity = new_capacity; return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_capacity, mz_uint growing) { if (new_capacity > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing)) return MZ_FALSE; } return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, mz_uint growing) { if (new_size > pArray->m_capacity) { if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing)) return MZ_FALSE; } pArray->m_size = new_size; return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, mz_zip_array *pArray, size_t n) { return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE); } static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray, const void *pElements, size_t n) { size_t orig_size = pArray->m_size; if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE)) return MZ_FALSE; memcpy((mz_uint8 *)pArray->m_p + orig_size * pArray->m_element_size, pElements, n * pArray->m_element_size); return MZ_TRUE; } #ifndef MINIZ_NO_TIME static MZ_TIME_T mz_zip_dos_to_time_t(int dos_time, int dos_date) { struct tm tm; memset(&tm, 0, sizeof(tm)); tm.tm_isdst = -1; tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900; tm.tm_mon = ((dos_date >> 5) & 15) - 1; tm.tm_mday = dos_date & 31; tm.tm_hour = (dos_time >> 11) & 31; tm.tm_min = (dos_time >> 5) & 63; tm.tm_sec = (dos_time << 1) & 62; return mktime(&tm); } #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS static void mz_zip_time_t_to_dos_time(MZ_TIME_T time, mz_uint16 *pDOS_time, mz_uint16 *pDOS_date) { #ifdef _MSC_VER struct tm tm_struct; struct tm *tm = &tm_struct; errno_t err = localtime_s(tm, &time); if (err) { *pDOS_date = 0; *pDOS_time = 0; return; } #else struct tm *tm = localtime(&time); #endif /* #ifdef _MSC_VER */ *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) + ((tm->tm_sec) >> 1)); *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) + ((tm->tm_mon + 1) << 5) + tm->tm_mday); } #endif /* MINIZ_NO_ARCHIVE_WRITING_APIS */ #ifndef MINIZ_NO_STDIO #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS static mz_bool mz_zip_get_file_modified_time(const char *pFilename, MZ_TIME_T *pTime) { struct MZ_FILE_STAT_STRUCT file_stat; /* On Linux with x86 glibc, this call will fail on large files (I think >= 0x80000000 bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh. */ if (MZ_FILE_STAT(pFilename, &file_stat) != 0) return MZ_FALSE; *pTime = file_stat.st_mtime; return MZ_TRUE; } #endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS*/ static mz_bool mz_zip_set_file_times(const char *pFilename, MZ_TIME_T access_time, MZ_TIME_T modified_time) { struct utimbuf t; memset(&t, 0, sizeof(t)); t.actime = access_time; t.modtime = modified_time; return !utime(pFilename, &t); } #endif /* #ifndef MINIZ_NO_STDIO */ #endif /* #ifndef MINIZ_NO_TIME */ static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, mz_zip_error err_num) { if (pZip) pZip->m_last_error = err_num; return MZ_FALSE; } static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, mz_uint flags) { (void)flags; if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!pZip->m_pAlloc) pZip->m_pAlloc = miniz_def_alloc_func; if (!pZip->m_pFree) pZip->m_pFree = miniz_def_free_func; if (!pZip->m_pRealloc) pZip->m_pRealloc = miniz_def_realloc_func; pZip->m_archive_size = 0; pZip->m_central_directory_file_ofs = 0; pZip->m_total_files = 0; pZip->m_last_error = MZ_ZIP_NO_ERROR; if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); pZip->m_pState->m_init_flags = flags; pZip->m_pState->m_zip64 = MZ_FALSE; pZip->m_pState->m_zip64_has_extended_info_fields = MZ_FALSE; pZip->m_zip_mode = MZ_ZIP_MODE_READING; return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, mz_uint r_index) { const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS), r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS); mz_uint8 l = 0, r = 0; pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pE = pL + MZ_MIN(l_len, r_len); while (pL < pE) { if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; pL++; pR++; } return (pL == pE) ? (l_len < r_len) : (l < r); } #define MZ_SWAP_UINT32(a, b) \ do \ { \ mz_uint32 t = a; \ a = b; \ b = t; \ } \ MZ_MACRO_END /* Heap sort of lowercased filenames, used to help accelerate plain central directory searches by mz_zip_reader_locate_file(). (Could also use qsort(), but it could allocate memory.) */ static void mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) { mz_zip_internal_state *pState = pZip->m_pState; const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; const mz_zip_array *pCentral_dir = &pState->m_central_dir; mz_uint32 *pIndices; mz_uint32 start, end; const mz_uint32 size = pZip->m_total_files; if (size <= 1U) return; pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); start = (size - 2U) >> 1U; for (;;) { mz_uint64 child, root = start; for (;;) { if ((child = (root << 1U) + 1U) >= size) break; child += (((child + 1U) < size) && (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U]))); if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) break; MZ_SWAP_UINT32(pIndices[root], pIndices[child]); root = child; } if (!start) break; start--; } end = size - 1; while (end > 0) { mz_uint64 child, root = 0; MZ_SWAP_UINT32(pIndices[end], pIndices[0]); for (;;) { if ((child = (root << 1U) + 1U) >= end) break; child += (((child + 1U) < end) && mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U])); if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) break; MZ_SWAP_UINT32(pIndices[root], pIndices[child]); root = child; } end--; } } static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, mz_uint32 record_sig, mz_uint32 record_size, mz_int64 *pOfs) { mz_int64 cur_file_ofs; mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; mz_uint8 *pBuf = (mz_uint8 *)buf_u32; /* Basic sanity checks - reject files which are too small */ if (pZip->m_archive_size < record_size) return MZ_FALSE; /* Find the record by scanning the file from the end towards the beginning. */ cur_file_ofs = MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); for (;;) { int i, n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) return MZ_FALSE; for (i = n - 4; i >= 0; --i) { mz_uint s = MZ_READ_LE32(pBuf + i); if (s == record_sig) { if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) break; } } if (i >= 0) { cur_file_ofs += i; break; } /* Give up if we've searched the entire file, or we've gone back "too far" (~64kb) */ if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= (MZ_UINT16_MAX + record_size))) return MZ_FALSE; cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); } *pOfs = cur_file_ofs; return MZ_TRUE; } static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, mz_uint flags) { mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, cdir_disk_index = 0; mz_uint64 cdir_ofs = 0; mz_int64 cur_file_ofs = 0; const mz_uint8 *p; mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; mz_uint8 *pBuf = (mz_uint8 *)buf_u32; mz_bool sort_central_dir = ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); mz_uint32 zip64_end_of_central_dir_locator_u32[(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32; mz_uint32 zip64_end_of_central_dir_header_u32[(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pZip64_end_of_central_dir = (mz_uint8 *)zip64_end_of_central_dir_header_u32; mz_uint64 zip64_end_of_central_dir_ofs = 0; /* Basic sanity checks - reject files which are too small, and check the first 4 bytes of the file to make sure a local header is there. */ if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (!mz_zip_reader_locate_header_sig(pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); /* Read and verify the end of central directory record. */ if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) { if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, pZip64_locator, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) { if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) { zip64_end_of_central_dir_ofs = MZ_READ_LE64(pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); if (zip64_end_of_central_dir_ofs > (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs, pZip64_end_of_central_dir, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) { if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) == MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) { pZip->m_pState->m_zip64 = MZ_TRUE; } } } } } pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); cdir_entries_on_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); if (pZip->m_pState->m_zip64) { mz_uint32 zip64_total_num_of_disks = MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); mz_uint64 zip64_size_of_central_directory = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS); if (zip64_size_of_end_of_central_dir_record < (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (zip64_total_num_of_disks != 1U) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); /* Check for miniz's practical limits */ if (zip64_cdir_total_entries > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); cdir_entries_on_this_disk = (mz_uint32)zip64_cdir_total_entries_on_this_disk; /* Check for miniz's current practical limits (sorry, this should be enough for millions of files) */ if (zip64_size_of_central_directory > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); cdir_size = (mz_uint32)zip64_size_of_central_directory; num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); cdir_ofs = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS); } if (pZip->m_total_files != cdir_entries_on_this_disk) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); if (((num_this_disk | cdir_disk_index) != 0) && ((num_this_disk != 1) || (cdir_disk_index != 1))) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pZip->m_central_directory_file_ofs = cdir_ofs; if (pZip->m_total_files) { mz_uint i, n; /* Read the entire central directory into a heap block, and allocate another heap block to hold the unsorted central dir file record offsets, and possibly another to hold the sorted indices. */ if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, MZ_FALSE)) || (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, pZip->m_total_files, MZ_FALSE))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (sort_central_dir) { if (!mz_zip_array_resize(pZip, &pZip->m_pState->m_sorted_central_dir_offsets, pZip->m_total_files, MZ_FALSE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, pZip->m_pState->m_central_dir.m_p, cdir_size) != cdir_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); /* Now create an index into the central directory file records, do some basic sanity checking on each record */ p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) { mz_uint total_header_size, disk_index, bit_flags, filename_size, ext_data_size; mz_uint64 comp_size, decomp_size, local_header_ofs; if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, i) = (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); if (sort_central_dir) MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, mz_uint32, i) = i; comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && (ext_data_size) && (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == MZ_UINT32_MAX)) { /* Attempt to find zip64 extended information field in the entry's extra data */ mz_uint32 extra_size_remaining = ext_data_size; if (extra_size_remaining) { const mz_uint8 *pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size; do { mz_uint32 field_id; mz_uint32 field_data_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); if ((field_data_size + sizeof(mz_uint16) * 2) > extra_size_remaining) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { /* Ok, the archive didn't have any zip64 headers but it uses a zip64 extended information field so mark it as zip64 anyway (this can occur with infozip's zip util when it reads compresses files from stdin). */ pZip->m_pState->m_zip64 = MZ_TRUE; pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE; break; } pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; extra_size_remaining = extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; } while (extra_size_remaining); } } /* I've seen archives that aren't marked as zip64 that uses zip64 ext data, argh */ if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) { if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && (decomp_size != comp_size)) || (decomp_size && !comp_size)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); if ((disk_index == MZ_UINT16_MAX) || ((disk_index != num_this_disk) && (disk_index != 1))) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); if (comp_size != MZ_UINT32_MAX) { if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > n) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); n -= total_header_size; p += total_header_size; } } if (sort_central_dir) mz_zip_reader_sort_central_dir_offsets_by_filename(pZip); return MZ_TRUE; } void mz_zip_zero_struct(mz_zip_archive *pZip) { if (pZip) MZ_CLEAR_OBJ(*pZip); } static mz_bool mz_zip_reader_end_internal(mz_zip_archive *pZip, mz_bool set_last_error) { mz_bool status = MZ_TRUE; if (!pZip) return MZ_FALSE; if ((!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) { if (set_last_error) pZip->m_last_error = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } if (pZip->m_pState) { mz_zip_internal_state *pState = pZip->m_pState; pZip->m_pState = NULL; mz_zip_array_clear(pZip, &pState->m_central_dir); mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); #ifndef MINIZ_NO_STDIO if (pState->m_pFile) { if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) { if (MZ_FCLOSE(pState->m_pFile) == EOF) { if (set_last_error) pZip->m_last_error = MZ_ZIP_FILE_CLOSE_FAILED; status = MZ_FALSE; } } pState->m_pFile = NULL; } #endif /* #ifndef MINIZ_NO_STDIO */ pZip->m_pFree(pZip->m_pAlloc_opaque, pState); } pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; return status; } mz_bool mz_zip_reader_end(mz_zip_archive *pZip) { return mz_zip_reader_end_internal(pZip, MZ_TRUE); } mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags) { if ((!pZip) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_USER; pZip->m_archive_size = size; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; size_t s = (file_ofs >= pZip->m_archive_size) ? 0 : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n); memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s); return s; } mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags) { if (!pMem) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_MEMORY; pZip->m_archive_size = size; pZip->m_pRead = mz_zip_mem_read_func; pZip->m_pIO_opaque = pZip; pZip->m_pNeeds_keepalive = NULL; #ifdef __cplusplus pZip->m_pState->m_pMem = const_cast(pMem); #else pZip->m_pState->m_pMem = (void *)pMem; #endif pZip->m_pState->m_mem_size = size; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } #ifndef MINIZ_NO_STDIO static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); file_ofs += pZip->m_pState->m_file_archive_start_ofs; if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) return 0; return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile); } mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags) { return mz_zip_reader_init_file_v2(pZip, pFilename, flags, 0, 0); } mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size) { mz_uint64 file_size; MZ_FILE *pFile; if ((!pZip) || (!pFilename) || ((archive_size) && (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pFile = MZ_FOPEN(pFilename, "rb"); if (!pFile) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); file_size = archive_size; if (!file_size) { if (MZ_FSEEK64(pFile, 0, SEEK_END)) { MZ_FCLOSE(pFile); return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); } file_size = MZ_FTELL64(pFile); } /* TODO: Better sanity check archive_size and the # of actual remaining bytes */ if (file_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) { MZ_FCLOSE(pFile); return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); } if (!mz_zip_reader_init_internal(pZip, flags)) { MZ_FCLOSE(pFile); return MZ_FALSE; } pZip->m_zip_type = MZ_ZIP_TYPE_FILE; pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; pZip->m_pState->m_pFile = pFile; pZip->m_archive_size = file_size; pZip->m_pState->m_file_archive_start_ofs = file_start_ofs; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags) { mz_uint64 cur_file_ofs; if ((!pZip) || (!pFile)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); cur_file_ofs = MZ_FTELL64(pFile); if (!archive_size) { if (MZ_FSEEK64(pFile, 0, SEEK_END)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); archive_size = MZ_FTELL64(pFile) - cur_file_ofs; if (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); } if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_CFILE; pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; pZip->m_pState->m_pFile = pFile; pZip->m_archive_size = archive_size; pZip->m_pState->m_file_archive_start_ofs = cur_file_ofs; if (!mz_zip_reader_read_central_dir(pZip, flags)) { mz_zip_reader_end_internal(pZip, MZ_FALSE); return MZ_FALSE; } return MZ_TRUE; } #endif /* #ifndef MINIZ_NO_STDIO */ static MZ_FORCEINLINE const mz_uint8 *mz_zip_get_cdh(mz_zip_archive *pZip, mz_uint file_index) { if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files)) return NULL; return &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); } mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index) { mz_uint m_bit_flag; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); return (m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) != 0; } mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index) { mz_uint bit_flag; mz_uint method; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); if ((method != 0) && (method != MZ_DEFLATED)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); return MZ_FALSE; } if (bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); return MZ_FALSE; } if (bit_flag & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); return MZ_FALSE; } return MZ_TRUE; } mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index) { mz_uint filename_len, attribute_mapping_id, external_attr; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); if (filename_len) { if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/') return MZ_TRUE; } /* Bugfix: This code was also checking if the internal attribute was non-zero, which wasn't correct. */ /* Most/all zip writers (hopefully) set DOS file/directory attributes in the low 16-bits, so check for the DOS directory flag and ignore the source OS ID in the created by field. */ /* FIXME: Remove this check? Is it necessary - we already check the filename. */ attribute_mapping_id = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS) >> 8; (void)attribute_mapping_id; external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); if ((external_attr & MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG) != 0) { return MZ_TRUE; } return MZ_FALSE; } static mz_bool mz_zip_file_stat_internal(mz_zip_archive *pZip, mz_uint file_index, const mz_uint8 *pCentral_dir_header, mz_zip_archive_file_stat *pStat, mz_bool *pFound_zip64_extra_data) { mz_uint n; const mz_uint8 *p = pCentral_dir_header; if (pFound_zip64_extra_data) *pFound_zip64_extra_data = MZ_FALSE; if ((!p) || (!pStat)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Extract fields from the central directory record. */ pStat->m_file_index = file_index; pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index); pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS); pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS); pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); #ifndef MINIZ_NO_TIME pStat->m_time = mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS), MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS)); #endif pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS); pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS); pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); /* Copy as much of the filename and comment as possible. */ n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1); memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); pStat->m_filename[n] = '\0'; n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS); n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1); pStat->m_comment_size = n; memcpy(pStat->m_comment, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), n); pStat->m_comment[n] = '\0'; /* Set some flags for convienance */ pStat->m_is_directory = mz_zip_reader_is_file_a_directory(pZip, file_index); pStat->m_is_encrypted = mz_zip_reader_is_file_encrypted(pZip, file_index); pStat->m_is_supported = mz_zip_reader_is_file_supported(pZip, file_index); /* See if we need to read any zip64 extended information fields. */ /* Confusingly, these zip64 fields can be present even on non-zip64 archives (Debian zip on a huge files from stdin piped to stdout creates them). */ if (MZ_MAX(MZ_MAX(pStat->m_comp_size, pStat->m_uncomp_size), pStat->m_local_header_ofs) == MZ_UINT32_MAX) { /* Attempt to find zip64 extended information field in the entry's extra data */ mz_uint32 extra_size_remaining = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); if (extra_size_remaining) { const mz_uint8 *pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); do { mz_uint32 field_id; mz_uint32 field_data_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); if ((field_data_size + sizeof(mz_uint16) * 2) > extra_size_remaining) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { const mz_uint8 *pField_data = pExtra_data + sizeof(mz_uint16) * 2; mz_uint32 field_data_remaining = field_data_size; if (pFound_zip64_extra_data) *pFound_zip64_extra_data = MZ_TRUE; if (pStat->m_uncomp_size == MZ_UINT32_MAX) { if (field_data_remaining < sizeof(mz_uint64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pStat->m_uncomp_size = MZ_READ_LE64(pField_data); pField_data += sizeof(mz_uint64); field_data_remaining -= sizeof(mz_uint64); } if (pStat->m_comp_size == MZ_UINT32_MAX) { if (field_data_remaining < sizeof(mz_uint64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pStat->m_comp_size = MZ_READ_LE64(pField_data); pField_data += sizeof(mz_uint64); field_data_remaining -= sizeof(mz_uint64); } if (pStat->m_local_header_ofs == MZ_UINT32_MAX) { if (field_data_remaining < sizeof(mz_uint64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pStat->m_local_header_ofs = MZ_READ_LE64(pField_data); pField_data += sizeof(mz_uint64); field_data_remaining -= sizeof(mz_uint64); } break; } pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; extra_size_remaining = extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; } while (extra_size_remaining); } } return MZ_TRUE; } static MZ_FORCEINLINE mz_bool mz_zip_string_equal(const char *pA, const char *pB, mz_uint len, mz_uint flags) { mz_uint i; if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) return 0 == memcmp(pA, pB, len); for (i = 0; i < len; ++i) if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) return MZ_FALSE; return MZ_TRUE; } static MZ_FORCEINLINE int mz_zip_filename_compare(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, mz_uint r_len) { const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS); mz_uint8 l = 0, r = 0; pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; pE = pL + MZ_MIN(l_len, r_len); while (pL < pE) { if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break; pL++; pR++; } return (pL == pE) ? (int)(l_len - r_len) : (l - r); } static mz_bool mz_zip_locate_file_binary_search(mz_zip_archive *pZip, const char *pFilename, mz_uint32 *pIndex) { mz_zip_internal_state *pState = pZip->m_pState; const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; const mz_zip_array *pCentral_dir = &pState->m_central_dir; mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); const uint32_t size = pZip->m_total_files; const mz_uint filename_len = (mz_uint)strlen(pFilename); if (pIndex) *pIndex = 0; if (size) { /* yes I could use uint32_t's, but then we would have to add some special case checks in the loop, argh, and */ /* honestly the major expense here on 32-bit CPU's will still be the filename compare */ mz_int64 l = 0, h = (mz_int64)size - 1; while (l <= h) { mz_int64 m = l + ((h - l) >> 1); uint32_t file_index = pIndices[(uint32_t)m]; int comp = mz_zip_filename_compare(pCentral_dir, pCentral_dir_offsets, file_index, pFilename, filename_len); if (!comp) { if (pIndex) *pIndex = file_index; return MZ_TRUE; } else if (comp < 0) l = m + 1; else h = m - 1; } } return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND); } int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags) { mz_uint32 index; if (!mz_zip_reader_locate_file_v2(pZip, pName, pComment, flags, &index)) return -1; else return (int)index; } mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *pIndex) { mz_uint file_index; size_t name_len, comment_len; if (pIndex) *pIndex = 0; if ((!pZip) || (!pZip->m_pState) || (!pName)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* See if we can use a binary search */ if (((pZip->m_pState->m_init_flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0) && (pZip->m_zip_mode == MZ_ZIP_MODE_READING) && ((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) && (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) { return mz_zip_locate_file_binary_search(pZip, pName, pIndex); } /* Locate the entry by scanning the entire central directory */ name_len = strlen(pName); if (name_len > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); comment_len = pComment ? strlen(pComment) : 0; if (comment_len > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); for (file_index = 0; file_index < pZip->m_total_files; file_index++) { const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS); const char *pFilename = (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; if (filename_len < name_len) continue; if (comment_len) { mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS), file_comment_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS); const char *pFile_comment = pFilename + filename_len + file_extra_len; if ((file_comment_len != comment_len) || (!mz_zip_string_equal(pComment, pFile_comment, file_comment_len, flags))) continue; } if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) { int ofs = filename_len - 1; do { if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') || (pFilename[ofs] == ':')) break; } while (--ofs >= 0); ofs++; pFilename += ofs; filename_len -= ofs; } if ((filename_len == name_len) && (mz_zip_string_equal(pName, pFilename, filename_len, flags))) { if (pIndex) *pIndex = file_index; return MZ_TRUE; } } return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND); } mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) { int status = TINFL_STATUS_DONE; mz_uint64 needed_size, cur_file_ofs, comp_remaining, out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail; mz_zip_archive_file_stat file_stat; void *pRead_buf; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; tinfl_decompressor inflator; if ((!pZip) || (!pZip->m_pState) || ((buf_size) && (!pBuf)) || ((user_read_buf_size) && (!pUser_read_buf)) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; /* A directory or zero length file */ if ((file_stat.m_is_directory) || (!file_stat.m_comp_size)) return MZ_TRUE; /* Encryption and patch files are not supported. */ if (file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); /* This function only supports decompressing stored and deflate. */ if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); /* Ensure supplied output buffer is large enough. */ needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size : file_stat.m_uncomp_size; if (buf_size < needed_size) return mz_zip_set_error(pZip, MZ_ZIP_BUF_TOO_SMALL); /* Read and parse the local directory entry. */ cur_file_ofs = file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { /* The file is stored or the caller has requested the compressed data. */ if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, (size_t)needed_size) != needed_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) == 0) { if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32) return mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED); } #endif return MZ_TRUE; } /* Decompress the file either directly from memory or from a file input buffer. */ tinfl_init(&inflator); if (pZip->m_pState->m_pMem) { /* Read directly from the archive in memory. */ pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; read_buf_size = read_buf_avail = file_stat.m_comp_size; comp_remaining = 0; } else if (pUser_read_buf) { /* Use a user provided read buffer. */ if (!user_read_buf_size) return MZ_FALSE; pRead_buf = (mz_uint8 *)pUser_read_buf; read_buf_size = user_read_buf_size; read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } else { /* Temporarily allocate a read buffer. */ read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } do { /* The size_t cast here should be OK because we've verified that the output buffer is >= file_stat.m_uncomp_size above */ size_t in_buf_size, out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs); if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) { read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { status = TINFL_STATUS_FAILED; mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); break; } cur_file_ofs += read_buf_avail; comp_remaining -= read_buf_avail; read_buf_ofs = 0; } in_buf_size = (size_t)read_buf_avail; status = tinfl_decompress(&inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size, TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF | (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0)); read_buf_avail -= in_buf_size; read_buf_ofs += in_buf_size; out_buf_ofs += out_buf_size; } while (status == TINFL_STATUS_NEEDS_MORE_INPUT); if (status == TINFL_STATUS_DONE) { /* Make sure the entire file was decompressed, and check its CRC. */ if (out_buf_ofs != file_stat.m_uncomp_size) { mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); status = TINFL_STATUS_FAILED; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS else if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32) { mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED); status = TINFL_STATUS_FAILED; } #endif } if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf)) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return status == TINFL_STATUS_DONE; } mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, pUser_read_buf, user_read_buf_size); } mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags) { return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, NULL, 0); } mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags) { return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf, buf_size, flags, NULL, 0); } void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags) { mz_uint64 comp_size, uncomp_size, alloc_size; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); void *pBuf; if (pSize) *pSize = 0; if (!p) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return NULL; } comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size; if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) { mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); return NULL; } if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); return NULL; } if (!mz_zip_reader_extract_to_mem(pZip, file_index, pBuf, (size_t)alloc_size, flags)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return NULL; } if (pSize) *pSize = (size_t)alloc_size; return pBuf; } void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) { if (pSize) *pSize = 0; return MZ_FALSE; } return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags); } mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) { int status = TINFL_STATUS_DONE; mz_uint file_crc32 = MZ_CRC32_INIT; mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining, out_buf_ofs = 0, cur_file_ofs; mz_zip_archive_file_stat file_stat; void *pRead_buf = NULL; void *pWrite_buf = NULL; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; if ((!pZip) || (!pZip->m_pState) || (!pCallback) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; /* A directory or zero length file */ if ((file_stat.m_is_directory) || (!file_stat.m_comp_size)) return MZ_TRUE; /* Encryption and patch files are not supported. */ if (file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); /* This function only supports decompressing stored and deflate. */ if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); /* Read and do some minimal validation of the local directory entry (this doesn't crack the zip64 stuff, which we already have from the central dir) */ cur_file_ofs = file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); /* Decompress the file either directly from memory or from a file input buffer. */ if (pZip->m_pState->m_pMem) { pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; read_buf_size = read_buf_avail = file_stat.m_comp_size; comp_remaining = 0; } else { read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); read_buf_avail = 0; comp_remaining = file_stat.m_comp_size; } if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { /* The file is stored or the caller has requested the compressed data. */ if (pZip->m_pState->m_pMem) { if (((sizeof(size_t) == sizeof(mz_uint32))) && (file_stat.m_comp_size > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)file_stat.m_comp_size) != file_stat.m_comp_size) { mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); status = TINFL_STATUS_FAILED; } else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)file_stat.m_comp_size); #endif } cur_file_ofs += file_stat.m_comp_size; out_buf_ofs += file_stat.m_comp_size; comp_remaining = 0; } else { while (comp_remaining) { read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); status = TINFL_STATUS_FAILED; break; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail); } #endif if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); status = TINFL_STATUS_FAILED; break; } cur_file_ofs += read_buf_avail; out_buf_ofs += read_buf_avail; comp_remaining -= read_buf_avail; } } } else { tinfl_decompressor inflator; tinfl_init(&inflator); if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); status = TINFL_STATUS_FAILED; } else { do { mz_uint8 *pWrite_buf_cur = (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) { read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); status = TINFL_STATUS_FAILED; break; } cur_file_ofs += read_buf_avail; comp_remaining -= read_buf_avail; read_buf_ofs = 0; } in_buf_size = (size_t)read_buf_avail; status = tinfl_decompress(&inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size, comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); read_buf_avail -= in_buf_size; read_buf_ofs += in_buf_size; if (out_buf_size) { if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) != out_buf_size) { mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); status = TINFL_STATUS_FAILED; break; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS file_crc32 = (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size); #endif if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) { mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); status = TINFL_STATUS_FAILED; break; } } } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) || (status == TINFL_STATUS_HAS_MORE_OUTPUT)); } } if ((status == TINFL_STATUS_DONE) && (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) { /* Make sure the entire file was decompressed, and check its CRC. */ if (out_buf_ofs != file_stat.m_uncomp_size) { mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); status = TINFL_STATUS_FAILED; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS else if (file_crc32 != file_stat.m_crc32) { mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); status = TINFL_STATUS_FAILED; } #endif } if (!pZip->m_pState->m_pMem) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); if (pWrite_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); return status == TINFL_STATUS_DONE; } mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque, flags); } mz_zip_reader_extract_iter_state* mz_zip_reader_extract_iter_new(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags) { mz_zip_reader_extract_iter_state *pState; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; /* Argument sanity check */ if ((!pZip) || (!pZip->m_pState)) return NULL; /* Allocate an iterator status structure */ pState = (mz_zip_reader_extract_iter_state*)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_reader_extract_iter_state)); if (!pState) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); return NULL; } /* Fetch file details */ if (!mz_zip_reader_file_stat(pZip, file_index, &pState->file_stat)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* Encryption and patch files are not supported. */ if (pState->file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* This function only supports decompressing stored and deflate. */ if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (pState->file_stat.m_method != 0) && (pState->file_stat.m_method != MZ_DEFLATED)) { mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* Init state - save args */ pState->pZip = pZip; pState->flags = flags; /* Init state - reset variables to defaults */ pState->status = TINFL_STATUS_DONE; #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS pState->file_crc32 = MZ_CRC32_INIT; #endif pState->read_buf_ofs = 0; pState->out_buf_ofs = 0; pState->pRead_buf = NULL; pState->pWrite_buf = NULL; pState->out_blk_remain = 0; /* Read and parse the local directory entry. */ pState->cur_file_ofs = pState->file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, pState->cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } pState->cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); if ((pState->cur_file_ofs + pState->file_stat.m_comp_size) > pZip->m_archive_size) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } /* Decompress the file either directly from memory or from a file input buffer. */ if (pZip->m_pState->m_pMem) { pState->pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + pState->cur_file_ofs; pState->read_buf_size = pState->read_buf_avail = pState->file_stat.m_comp_size; pState->comp_remaining = pState->file_stat.m_comp_size; } else { if (!((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!pState->file_stat.m_method))) { /* Decompression required, therefore intermediate read buffer required */ pState->read_buf_size = MZ_MIN(pState->file_stat.m_comp_size, MZ_ZIP_MAX_IO_BUF_SIZE); if (NULL == (pState->pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)pState->read_buf_size))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } } else { /* Decompression not required - we will be reading directly into user buffer, no temp buf required */ pState->read_buf_size = 0; } pState->read_buf_avail = 0; pState->comp_remaining = pState->file_stat.m_comp_size; } if (!((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!pState->file_stat.m_method))) { /* Decompression required, init decompressor */ tinfl_init( &pState->inflator ); /* Allocate write buffer */ if (NULL == (pState->pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (pState->pRead_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pState->pRead_buf); pZip->m_pFree(pZip->m_pAlloc_opaque, pState); return NULL; } } return pState; } mz_zip_reader_extract_iter_state* mz_zip_reader_extract_file_iter_new(mz_zip_archive *pZip, const char *pFilename, mz_uint flags) { mz_uint32 file_index; /* Locate file index by name */ if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) return NULL; /* Construct iterator */ return mz_zip_reader_extract_iter_new(pZip, file_index, flags); } size_t mz_zip_reader_extract_iter_read(mz_zip_reader_extract_iter_state* pState, void* pvBuf, size_t buf_size) { size_t copied_to_caller = 0; /* Argument sanity check */ if ((!pState) || (!pState->pZip) || (!pState->pZip->m_pState) || (!pvBuf)) return 0; if ((pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!pState->file_stat.m_method)) { /* The file is stored or the caller has requested the compressed data, calc amount to return. */ copied_to_caller = MZ_MIN( buf_size, pState->comp_remaining ); /* Zip is in memory....or requires reading from a file? */ if (pState->pZip->m_pState->m_pMem) { /* Copy data to caller's buffer */ memcpy( pvBuf, pState->pRead_buf, copied_to_caller ); pState->pRead_buf = ((mz_uint8*)pState->pRead_buf) + copied_to_caller; } else { /* Read directly into caller's buffer */ if (pState->pZip->m_pRead(pState->pZip->m_pIO_opaque, pState->cur_file_ofs, pvBuf, copied_to_caller) != copied_to_caller) { /* Failed to read all that was asked for, flag failure and alert user */ mz_zip_set_error(pState->pZip, MZ_ZIP_FILE_READ_FAILED); pState->status = TINFL_STATUS_FAILED; copied_to_caller = 0; } } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS /* Compute CRC if not returning compressed data only */ if (!(pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) pState->file_crc32 = (mz_uint32)mz_crc32(pState->file_crc32, (const mz_uint8 *)pvBuf, copied_to_caller); #endif /* Advance offsets, dec counters */ pState->cur_file_ofs += copied_to_caller; pState->out_buf_ofs += copied_to_caller; pState->comp_remaining -= copied_to_caller; } else { do { /* Calc ptr to write buffer - given current output pos and block size */ mz_uint8 *pWrite_buf_cur = (mz_uint8 *)pState->pWrite_buf + (pState->out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); /* Calc max output size - given current output pos and block size */ size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE - (pState->out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); if (!pState->out_blk_remain) { /* Read more data from file if none available (and reading from file) */ if ((!pState->read_buf_avail) && (!pState->pZip->m_pState->m_pMem)) { /* Calc read size */ pState->read_buf_avail = MZ_MIN(pState->read_buf_size, pState->comp_remaining); if (pState->pZip->m_pRead(pState->pZip->m_pIO_opaque, pState->cur_file_ofs, pState->pRead_buf, (size_t)pState->read_buf_avail) != pState->read_buf_avail) { mz_zip_set_error(pState->pZip, MZ_ZIP_FILE_READ_FAILED); pState->status = TINFL_STATUS_FAILED; break; } /* Advance offsets, dec counters */ pState->cur_file_ofs += pState->read_buf_avail; pState->comp_remaining -= pState->read_buf_avail; pState->read_buf_ofs = 0; } /* Perform decompression */ in_buf_size = (size_t)pState->read_buf_avail; pState->status = tinfl_decompress(&pState->inflator, (const mz_uint8 *)pState->pRead_buf + pState->read_buf_ofs, &in_buf_size, (mz_uint8 *)pState->pWrite_buf, pWrite_buf_cur, &out_buf_size, pState->comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); pState->read_buf_avail -= in_buf_size; pState->read_buf_ofs += in_buf_size; /* Update current output block size remaining */ pState->out_blk_remain = out_buf_size; } if (pState->out_blk_remain) { /* Calc amount to return. */ size_t to_copy = MZ_MIN( (buf_size - copied_to_caller), pState->out_blk_remain ); /* Copy data to caller's buffer */ memcpy( (uint8_t*)pvBuf + copied_to_caller, pWrite_buf_cur, to_copy ); #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS /* Perform CRC */ pState->file_crc32 = (mz_uint32)mz_crc32(pState->file_crc32, pWrite_buf_cur, to_copy); #endif /* Decrement data consumed from block */ pState->out_blk_remain -= to_copy; /* Inc output offset, while performing sanity check */ if ((pState->out_buf_ofs += to_copy) > pState->file_stat.m_uncomp_size) { mz_zip_set_error(pState->pZip, MZ_ZIP_DECOMPRESSION_FAILED); pState->status = TINFL_STATUS_FAILED; break; } /* Increment counter of data copied to caller */ copied_to_caller += to_copy; } } while ( (copied_to_caller < buf_size) && ((pState->status == TINFL_STATUS_NEEDS_MORE_INPUT) || (pState->status == TINFL_STATUS_HAS_MORE_OUTPUT)) ); } /* Return how many bytes were copied into user buffer */ return copied_to_caller; } mz_bool mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state* pState) { int status; /* Argument sanity check */ if ((!pState) || (!pState->pZip) || (!pState->pZip->m_pState)) return MZ_FALSE; /* Was decompression completed and requested? */ if ((pState->status == TINFL_STATUS_DONE) && (!(pState->flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) { /* Make sure the entire file was decompressed, and check its CRC. */ if (pState->out_buf_ofs != pState->file_stat.m_uncomp_size) { mz_zip_set_error(pState->pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); pState->status = TINFL_STATUS_FAILED; } #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS else if (pState->file_crc32 != pState->file_stat.m_crc32) { mz_zip_set_error(pState->pZip, MZ_ZIP_DECOMPRESSION_FAILED); pState->status = TINFL_STATUS_FAILED; } #endif } /* Free buffers */ if (!pState->pZip->m_pState->m_pMem) pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState->pRead_buf); if (pState->pWrite_buf) pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState->pWrite_buf); /* Save status */ status = pState->status; /* Free context */ pState->pZip->m_pFree(pState->pZip->m_pAlloc_opaque, pState); return status == TINFL_STATUS_DONE; } #ifndef MINIZ_NO_STDIO static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, const void *pBuf, size_t n) { (void)ofs; return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *)pOpaque); } mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags) { mz_bool status; mz_zip_archive_file_stat file_stat; MZ_FILE *pFile; if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); pFile = MZ_FOPEN(pDst_filename, "wb"); if (!pFile) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); status = mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); if (MZ_FCLOSE(pFile) == EOF) { if (status) mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); status = MZ_FALSE; } #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) if (status) mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); #endif return status; } mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags); } mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *pFile, mz_uint flags) { mz_zip_archive_file_stat file_stat; if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE; if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); return mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); } mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags) { mz_uint32 file_index; if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL, flags, &file_index)) return MZ_FALSE; return mz_zip_reader_extract_to_cfile(pZip, file_index, pFile, flags); } #endif /* #ifndef MINIZ_NO_STDIO */ static size_t mz_zip_compute_crc32_callback(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) { mz_uint32 *p = (mz_uint32 *)pOpaque; (void)file_ofs; *p = (mz_uint32)mz_crc32(*p, (const mz_uint8 *)pBuf, n); return n; } mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags) { mz_zip_archive_file_stat file_stat; mz_zip_internal_state *pState; const mz_uint8 *pCentral_dir_header; mz_bool found_zip64_ext_data_in_cdir = MZ_FALSE; mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; mz_uint64 local_header_ofs = 0; mz_uint32 local_header_filename_len, local_header_extra_len, local_header_crc32; mz_uint64 local_header_comp_size, local_header_uncomp_size; mz_uint32 uncomp_crc32 = MZ_CRC32_INIT; mz_bool has_data_descriptor; mz_uint32 local_header_bit_flags; mz_zip_array file_data_array; mz_zip_array_init(&file_data_array, 1); if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (file_index > pZip->m_total_files) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; pCentral_dir_header = mz_zip_get_cdh(pZip, file_index); if (!mz_zip_file_stat_internal(pZip, file_index, pCentral_dir_header, &file_stat, &found_zip64_ext_data_in_cdir)) return MZ_FALSE; /* A directory or zero length file */ if ((file_stat.m_is_directory) || (!file_stat.m_uncomp_size)) return MZ_TRUE; /* Encryption and patch files are not supported. */ if (file_stat.m_is_encrypted) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); /* This function only supports stored and deflate. */ if ((file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); if (!file_stat.m_is_supported) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); /* Read and parse the local directory entry. */ local_header_ofs = file_stat.m_local_header_ofs; if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); local_header_filename_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS); local_header_extra_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); local_header_comp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS); local_header_uncomp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS); local_header_crc32 = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_CRC32_OFS); local_header_bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); has_data_descriptor = (local_header_bit_flags & 8) != 0; if (local_header_filename_len != strlen(file_stat.m_filename)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if ((local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size) > pZip->m_archive_size) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (!mz_zip_array_resize(pZip, &file_data_array, MZ_MAX(local_header_filename_len, local_header_extra_len), MZ_FALSE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (local_header_filename_len) { if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE, file_data_array.m_p, local_header_filename_len) != local_header_filename_len) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); goto handle_failure; } /* I've seen 1 archive that had the same pathname, but used backslashes in the local dir and forward slashes in the central dir. Do we care about this? For now, this case will fail validation. */ if (memcmp(file_stat.m_filename, file_data_array.m_p, local_header_filename_len) != 0) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); goto handle_failure; } } if ((local_header_extra_len) && ((local_header_comp_size == MZ_UINT32_MAX) || (local_header_uncomp_size == MZ_UINT32_MAX))) { mz_uint32 extra_size_remaining = local_header_extra_len; const mz_uint8 *pExtra_data = (const mz_uint8 *)file_data_array.m_p; if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len, file_data_array.m_p, local_header_extra_len) != local_header_extra_len) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); goto handle_failure; } do { mz_uint32 field_id, field_data_size, field_total_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); field_total_size = field_data_size + sizeof(mz_uint16) * 2; if (field_total_size > extra_size_remaining) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { const mz_uint8 *pSrc_field_data = pExtra_data + sizeof(mz_uint32); if (field_data_size < sizeof(mz_uint64) * 2) { mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); goto handle_failure; } local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data); local_header_comp_size = MZ_READ_LE64(pSrc_field_data + sizeof(mz_uint64)); found_zip64_ext_data_in_ldir = MZ_TRUE; break; } pExtra_data += field_total_size; extra_size_remaining -= field_total_size; } while (extra_size_remaining); } /* TODO: parse local header extra data when local_header_comp_size is 0xFFFFFFFF! (big_descriptor.zip) */ /* I've seen zips in the wild with the data descriptor bit set, but proper local header values and bogus data descriptors */ if ((has_data_descriptor) && (!local_header_comp_size) && (!local_header_crc32)) { mz_uint8 descriptor_buf[32]; mz_bool has_id; const mz_uint8 *pSrc; mz_uint32 file_crc32; mz_uint64 comp_size = 0, uncomp_size = 0; mz_uint32 num_descriptor_uint32s = ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) ? 6 : 4; if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size, descriptor_buf, sizeof(mz_uint32) * num_descriptor_uint32s) != (sizeof(mz_uint32) * num_descriptor_uint32s)) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); goto handle_failure; } has_id = (MZ_READ_LE32(descriptor_buf) == MZ_ZIP_DATA_DESCRIPTOR_ID); pSrc = has_id ? (descriptor_buf + sizeof(mz_uint32)) : descriptor_buf; file_crc32 = MZ_READ_LE32(pSrc); if ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) { comp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32)); uncomp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32) + sizeof(mz_uint64)); } else { comp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32)); uncomp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32) + sizeof(mz_uint32)); } if ((file_crc32 != file_stat.m_crc32) || (comp_size != file_stat.m_comp_size) || (uncomp_size != file_stat.m_uncomp_size)) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); goto handle_failure; } } else { if ((local_header_crc32 != file_stat.m_crc32) || (local_header_comp_size != file_stat.m_comp_size) || (local_header_uncomp_size != file_stat.m_uncomp_size)) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); goto handle_failure; } } mz_zip_array_clear(pZip, &file_data_array); if ((flags & MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY) == 0) { if (!mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_compute_crc32_callback, &uncomp_crc32, 0)) return MZ_FALSE; /* 1 more check to be sure, although the extract checks too. */ if (uncomp_crc32 != file_stat.m_crc32) { mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); return MZ_FALSE; } } return MZ_TRUE; handle_failure: mz_zip_array_clear(pZip, &file_data_array); return MZ_FALSE; } mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags) { mz_zip_internal_state *pState; uint32_t i; if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; /* Basic sanity checks */ if (!pState->m_zip64) { if (pZip->m_total_files > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (pZip->m_archive_size > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); } else { if (pZip->m_total_files >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); } for (i = 0; i < pZip->m_total_files; i++) { if (MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG & flags) { mz_uint32 found_index; mz_zip_archive_file_stat stat; if (!mz_zip_reader_file_stat(pZip, i, &stat)) return MZ_FALSE; if (!mz_zip_reader_locate_file_v2(pZip, stat.m_filename, NULL, 0, &found_index)) return MZ_FALSE; /* This check can fail if there are duplicate filenames in the archive (which we don't check for when writing - that's up to the user) */ if (found_index != i) return mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); } if (!mz_zip_validate_file(pZip, i, flags)) return MZ_FALSE; } return MZ_TRUE; } mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr) { mz_bool success = MZ_TRUE; mz_zip_archive zip; mz_zip_error actual_err = MZ_ZIP_NO_ERROR; if ((!pMem) || (!size)) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } mz_zip_zero_struct(&zip); if (!mz_zip_reader_init_mem(&zip, pMem, size, flags)) { if (pErr) *pErr = zip.m_last_error; return MZ_FALSE; } if (!mz_zip_validate_archive(&zip, flags)) { actual_err = zip.m_last_error; success = MZ_FALSE; } if (!mz_zip_reader_end_internal(&zip, success)) { if (!actual_err) actual_err = zip.m_last_error; success = MZ_FALSE; } if (pErr) *pErr = actual_err; return success; } #ifndef MINIZ_NO_STDIO mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr) { mz_bool success = MZ_TRUE; mz_zip_archive zip; mz_zip_error actual_err = MZ_ZIP_NO_ERROR; if (!pFilename) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } mz_zip_zero_struct(&zip); if (!mz_zip_reader_init_file_v2(&zip, pFilename, flags, 0, 0)) { if (pErr) *pErr = zip.m_last_error; return MZ_FALSE; } if (!mz_zip_validate_archive(&zip, flags)) { actual_err = zip.m_last_error; success = MZ_FALSE; } if (!mz_zip_reader_end_internal(&zip, success)) { if (!actual_err) actual_err = zip.m_last_error; success = MZ_FALSE; } if (pErr) *pErr = actual_err; return success; } #endif /* #ifndef MINIZ_NO_STDIO */ /* ------------------- .ZIP archive writing */ #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS static MZ_FORCEINLINE void mz_write_le16(mz_uint8 *p, mz_uint16 v) { p[0] = (mz_uint8)v; p[1] = (mz_uint8)(v >> 8); } static MZ_FORCEINLINE void mz_write_le32(mz_uint8 *p, mz_uint32 v) { p[0] = (mz_uint8)v; p[1] = (mz_uint8)(v >> 8); p[2] = (mz_uint8)(v >> 16); p[3] = (mz_uint8)(v >> 24); } static MZ_FORCEINLINE void mz_write_le64(mz_uint8 *p, mz_uint64 v) { mz_write_le32(p, (mz_uint32)v); mz_write_le32(p + sizeof(mz_uint32), (mz_uint32)(v >> 32)); } #define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v)) #define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v)) #define MZ_WRITE_LE64(p, v) mz_write_le64((mz_uint8 *)(p), (mz_uint64)(v)) static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; mz_zip_internal_state *pState = pZip->m_pState; mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size); if (!n) return 0; /* An allocation this big is likely to just fail on 32-bit systems, so don't even go there. */ if ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)) { mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); return 0; } if (new_size > pState->m_mem_capacity) { void *pNew_block; size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity); while (new_capacity < new_size) new_capacity *= 2; if (NULL == (pNew_block = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity))) { mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); return 0; } pState->m_pMem = pNew_block; pState->m_mem_capacity = new_capacity; } memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n); pState->m_mem_size = (size_t)new_size; return n; } static mz_bool mz_zip_writer_end_internal(mz_zip_archive *pZip, mz_bool set_last_error) { mz_zip_internal_state *pState; mz_bool status = MZ_TRUE; if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) && (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))) { if (set_last_error) mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return MZ_FALSE; } pState = pZip->m_pState; pZip->m_pState = NULL; mz_zip_array_clear(pZip, &pState->m_central_dir); mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); #ifndef MINIZ_NO_STDIO if (pState->m_pFile) { if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) { if (MZ_FCLOSE(pState->m_pFile) == EOF) { if (set_last_error) mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); status = MZ_FALSE; } } pState->m_pFile = NULL; } #endif /* #ifndef MINIZ_NO_STDIO */ if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem); pState->m_pMem = NULL; } pZip->m_pFree(pZip->m_pAlloc_opaque, pState); pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; return status; } mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags) { mz_bool zip64 = (flags & MZ_ZIP_FLAG_WRITE_ZIP64) != 0; if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) { if (!pZip->m_pRead) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } if (pZip->m_file_offset_alignment) { /* Ensure user specified file offset alignment is a power of 2. */ if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } if (!pZip->m_pAlloc) pZip->m_pAlloc = miniz_def_alloc_func; if (!pZip->m_pFree) pZip->m_pFree = miniz_def_free_func; if (!pZip->m_pRealloc) pZip->m_pRealloc = miniz_def_realloc_func; pZip->m_archive_size = existing_size; pZip->m_central_directory_file_ofs = 0; pZip->m_total_files = 0; if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); pZip->m_pState->m_zip64 = zip64; pZip->m_pState->m_zip64_has_extended_info_fields = zip64; pZip->m_zip_type = MZ_ZIP_TYPE_USER; pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; return MZ_TRUE; } mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) { return mz_zip_writer_init_v2(pZip, existing_size, 0); } mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size, mz_uint flags) { pZip->m_pWrite = mz_zip_heap_write_func; pZip->m_pNeeds_keepalive = NULL; if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) pZip->m_pRead = mz_zip_mem_read_func; pZip->m_pIO_opaque = pZip; if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning, flags)) return MZ_FALSE; pZip->m_zip_type = MZ_ZIP_TYPE_HEAP; if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size, size_to_reserve_at_beginning))) { if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, initial_allocation_size))) { mz_zip_writer_end_internal(pZip, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } pZip->m_pState->m_mem_capacity = initial_allocation_size; } return MZ_TRUE; } mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size) { return mz_zip_writer_init_heap_v2(pZip, size_to_reserve_at_beginning, initial_allocation_size, 0); } #ifndef MINIZ_NO_STDIO static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) { mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); file_ofs += pZip->m_pState->m_file_archive_start_ofs; if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) { mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); return 0; } return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile); } mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning) { return mz_zip_writer_init_file_v2(pZip, pFilename, size_to_reserve_at_beginning, 0); } mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags) { MZ_FILE *pFile; pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pNeeds_keepalive = NULL; if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning, flags)) return MZ_FALSE; if (NULL == (pFile = MZ_FOPEN(pFilename, (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) ? "w+b" : "wb"))) { mz_zip_writer_end(pZip); return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); } pZip->m_pState->m_pFile = pFile; pZip->m_zip_type = MZ_ZIP_TYPE_FILE; if (size_to_reserve_at_beginning) { mz_uint64 cur_ofs = 0; char buf[4096]; MZ_CLEAR_OBJ(buf); do { size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) { mz_zip_writer_end(pZip); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_ofs += n; size_to_reserve_at_beginning -= n; } while (size_to_reserve_at_beginning); } return MZ_TRUE; } mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags) { pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pNeeds_keepalive = NULL; if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) pZip->m_pRead = mz_zip_file_read_func; pZip->m_pIO_opaque = pZip; if (!mz_zip_writer_init_v2(pZip, 0, flags)) return MZ_FALSE; pZip->m_pState->m_pFile = pFile; pZip->m_pState->m_file_archive_start_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); pZip->m_zip_type = MZ_ZIP_TYPE_CFILE; return MZ_TRUE; } #endif /* #ifndef MINIZ_NO_STDIO */ mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags) { mz_zip_internal_state *pState; if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (flags & MZ_ZIP_FLAG_WRITE_ZIP64) { /* We don't support converting a non-zip64 file to zip64 - this seems like more trouble than it's worth. (What about the existing 32-bit data descriptors that could follow the compressed data?) */ if (!pZip->m_pState->m_zip64) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } /* No sense in trying to write to an archive that's already at the support max size */ if (pZip->m_pState->m_zip64) { if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if (pZip->m_total_files == MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); if ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); } pState = pZip->m_pState; if (pState->m_pFile) { #ifdef MINIZ_NO_STDIO (void)pFilename; return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); #else if (pZip->m_pIO_opaque != pZip) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) { if (!pFilename) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Archive is being read from stdio and was originally opened only for reading. Try to reopen as writable. */ if (NULL == (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) { /* The mz_zip_archive is now in a bogus state because pState->m_pFile is NULL, so just close it. */ mz_zip_reader_end_internal(pZip, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); } } pZip->m_pWrite = mz_zip_file_write_func; pZip->m_pNeeds_keepalive = NULL; #endif /* #ifdef MINIZ_NO_STDIO */ } else if (pState->m_pMem) { /* Archive lives in a memory block. Assume it's from the heap that we can resize using the realloc callback. */ if (pZip->m_pIO_opaque != pZip) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState->m_mem_capacity = pState->m_mem_size; pZip->m_pWrite = mz_zip_heap_write_func; pZip->m_pNeeds_keepalive = NULL; } /* Archive is being read via a user provided read function - make sure the user has specified a write function too. */ else if (!pZip->m_pWrite) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Start writing new files at the archive's current central directory location. */ /* TODO: We could add a flag that lets the user start writing immediately AFTER the existing central dir - this would be safer. */ pZip->m_archive_size = pZip->m_central_directory_file_ofs; pZip->m_central_directory_file_ofs = 0; /* Clear the sorted central dir offsets, they aren't useful or maintained now. */ /* Even though we're now in write mode, files can still be extracted and verified, but file locates will be slow. */ /* TODO: We could easily maintain the sorted central directory offsets. */ mz_zip_array_clear(pZip, &pZip->m_pState->m_sorted_central_dir_offsets); pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; return MZ_TRUE; } mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename) { return mz_zip_writer_init_from_reader_v2(pZip, pFilename, 0); } /* TODO: pArchive_name is a terrible name here! */ mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags) { return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0, level_and_flags, 0, 0); } typedef struct { mz_zip_archive *m_pZip; mz_uint64 m_cur_archive_file_ofs; mz_uint64 m_comp_size; } mz_zip_writer_add_state; static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len, void *pUser) { mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser; if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque, pState->m_cur_archive_file_ofs, pBuf, len) != len) return MZ_FALSE; pState->m_cur_archive_file_ofs += len; pState->m_comp_size += len; return MZ_TRUE; } #define MZ_ZIP64_MAX_LOCAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 2) #define MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 3) static mz_uint32 mz_zip_writer_create_zip64_extra_data(mz_uint8 *pBuf, mz_uint64 *pUncomp_size, mz_uint64 *pComp_size, mz_uint64 *pLocal_header_ofs) { mz_uint8 *pDst = pBuf; mz_uint32 field_size = 0; MZ_WRITE_LE16(pDst + 0, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID); MZ_WRITE_LE16(pDst + 2, 0); pDst += sizeof(mz_uint16) * 2; if (pUncomp_size) { MZ_WRITE_LE64(pDst, *pUncomp_size); pDst += sizeof(mz_uint64); field_size += sizeof(mz_uint64); } if (pComp_size) { MZ_WRITE_LE64(pDst, *pComp_size); pDst += sizeof(mz_uint64); field_size += sizeof(mz_uint64); } if (pLocal_header_ofs) { MZ_WRITE_LE64(pDst, *pLocal_header_ofs); pDst += sizeof(mz_uint64); field_size += sizeof(mz_uint64); } MZ_WRITE_LE16(pBuf + 2, field_size); return (mz_uint32)(pDst - pBuf); } static mz_bool mz_zip_writer_create_local_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date) { (void)pZip; memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, MZ_MIN(comp_size, MZ_UINT32_MAX)); MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, MZ_MIN(uncomp_size, MZ_UINT32_MAX)); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size); MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size); return MZ_TRUE; } static mz_bool mz_zip_writer_create_central_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes) { (void)pZip; memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, MZ_MIN(comp_size, MZ_UINT32_MAX)); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, MZ_MIN(uncomp_size, MZ_UINT32_MAX)); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size); MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes); MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, MZ_MIN(local_header_ofs, MZ_UINT32_MAX)); return MZ_TRUE; } static mz_bool mz_zip_writer_add_to_central_dir(mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size, const void *pExtra, mz_uint16 extra_size, const void *pComment, mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs, mz_uint32 ext_attributes, const char *user_extra_data, mz_uint user_extra_data_len) { mz_zip_internal_state *pState = pZip->m_pState; mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size; size_t orig_central_dir_size = pState->m_central_dir.m_size; mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; if (!pZip->m_pState->m_zip64) { if (local_header_ofs > 0xFFFFFFFF) return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); } /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size + user_extra_data_len + comment_size) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); if (!mz_zip_writer_create_central_dir_header(pZip, central_dir_header, filename_size, extra_size + user_extra_data_len, comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_header_ofs, ext_attributes)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename, filename_size)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra, extra_size)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, user_extra_data, user_extra_data_len)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment, comment_size)) || (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, ¢ral_dir_ofs, 1))) { /* Try to resize the central directory array back into its original state. */ mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } return MZ_TRUE; } static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) { /* Basic ZIP archive filename validity checks: Valid filenames cannot start with a forward slash, cannot contain a drive letter, and cannot use DOS-style backward slashes. */ if (*pArchive_name == '/') return MZ_FALSE; while (*pArchive_name) { if ((*pArchive_name == '\\') || (*pArchive_name == ':')) return MZ_FALSE; pArchive_name++; } return MZ_TRUE; } static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(mz_zip_archive *pZip) { mz_uint32 n; if (!pZip->m_file_offset_alignment) return 0; n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1)); return (mz_uint)((pZip->m_file_offset_alignment - n) & (pZip->m_file_offset_alignment - 1)); } static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip, mz_uint64 cur_file_ofs, mz_uint32 n) { char buf[4096]; memset(buf, 0, MZ_MIN(sizeof(buf), n)); while (n) { mz_uint32 s = MZ_MIN(sizeof(buf), n); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_file_ofs += s; n -= s; } return MZ_TRUE; } mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32) { return mz_zip_writer_add_mem_ex_v2(pZip, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, uncomp_size, uncomp_crc32, NULL, NULL, 0, NULL, 0); } mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) { mz_uint16 method = 0, dos_time = 0, dos_date = 0; mz_uint level, ext_attributes = 0, num_alignment_padding_bytes; mz_uint64 local_dir_header_ofs = pZip->m_archive_size, cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0; size_t archive_name_size; mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; tdefl_compressor *pComp = NULL; mz_bool store_data_uncompressed; mz_zip_internal_state *pState; mz_uint8 *pExtra_data = NULL; mz_uint32 extra_size = 0; mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE]; mz_uint16 bit_flags = 0; if (uncomp_size || (buf_size && !(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) bit_flags |= MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR; if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME)) bit_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8; if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; level = level_and_flags & 0xF; store_data_uncompressed = ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)); if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; if (pState->m_zip64) { if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if (pZip->m_total_files == MZ_UINT16_MAX) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */ } if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ } } if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_writer_validate_archive_name(pArchive_name)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); #ifndef MINIZ_NO_TIME if (last_modified != NULL) { mz_zip_time_t_to_dos_time(*last_modified, &dos_time, &dos_date); } else { MZ_TIME_T cur_time; time(&cur_time); mz_zip_time_t_to_dos_time(cur_time, &dos_time, &dos_date); } #endif /* #ifndef MINIZ_NO_TIME */ archive_name_size = strlen(pArchive_name); if (archive_name_size > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); if (!pState->m_zip64) { /* Bail early if the archive would obviously become too large */ if ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + user_extra_data_len + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + user_extra_data_central_len + MZ_ZIP_DATA_DESCRIPTER_SIZE32) > 0xFFFFFFFF) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ } } if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) { /* Set DOS Subdirectory attribute bit. */ ext_attributes |= MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG; /* Subdirectories cannot contain data. */ if ((buf_size) || (uncomp_size)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); } /* Try to do any allocations before writing to the archive, so if an allocation fails the file remains unmodified. (A good idea if we're doing an in-place modification.) */ if ((!mz_zip_array_ensure_room(pZip, &pState->m_central_dir, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + (pState->m_zip64 ? MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE : 0))) || (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if ((!store_data_uncompressed) && (buf_size)) { if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return MZ_FALSE; } local_dir_header_ofs += num_alignment_padding_bytes; if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } cur_archive_file_ofs += num_alignment_padding_bytes; MZ_CLEAR_OBJ(local_dir_header); if (!store_data_uncompressed || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { method = MZ_DEFLATED; } if (pState->m_zip64) { if (uncomp_size >= MZ_UINT32_MAX || local_dir_header_ofs >= MZ_UINT32_MAX) { pExtra_data = extra_data; extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, extra_size + user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; if (pExtra_data != NULL) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += extra_size; } } else { if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; } if (user_extra_data_len > 0) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += user_extra_data_len; } if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) { uncomp_crc32 = (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size); uncomp_size = buf_size; if (uncomp_size <= 3) { level = 0; store_data_uncompressed = MZ_TRUE; } } if (store_data_uncompressed) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf, buf_size) != buf_size) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += buf_size; comp_size = buf_size; } else if (buf_size) { mz_zip_writer_add_state state; state.m_pZip = pZip; state.m_cur_archive_file_ofs = cur_archive_file_ofs; state.m_comp_size = 0; if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) || (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) != TDEFL_STATUS_DONE)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); return mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED); } comp_size = state.m_comp_size; cur_archive_file_ofs = state.m_cur_archive_file_ofs; } pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); pComp = NULL; if (uncomp_size) { mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64]; mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32; MZ_ASSERT(bit_flags & MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR); MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID); MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32); if (pExtra_data == NULL) { if (comp_size > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); MZ_WRITE_LE32(local_dir_footer + 8, comp_size); MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size); } else { MZ_WRITE_LE64(local_dir_footer + 8, comp_size); MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size); local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64; } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size) return MZ_FALSE; cur_archive_file_ofs += local_dir_footer_size; } if (pExtra_data != NULL) { extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, pExtra_data, extra_size, pComment, comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes, user_extra_data_central, user_extra_data_central_len)) return MZ_FALSE; pZip->m_total_files++; pZip->m_archive_size = cur_archive_file_ofs; return MZ_TRUE; } #ifndef MINIZ_NO_STDIO mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 size_to_add, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) { mz_uint16 gen_flags = MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR; mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes; mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0; mz_uint64 local_dir_header_ofs, cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = size_to_add, comp_size = 0; size_t archive_name_size; mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; mz_uint8 *pExtra_data = NULL; mz_uint32 extra_size = 0; mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE]; mz_zip_internal_state *pState; if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME)) gen_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8; if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; level = level_and_flags & 0xF; /* Sanity checks */ if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; if ((!pState->m_zip64) && (uncomp_size > MZ_UINT32_MAX)) { /* Source file is too large for non-zip64 */ /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ pState->m_zip64 = MZ_TRUE; } /* We could support this, but why? */ if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_writer_validate_archive_name(pArchive_name)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); if (pState->m_zip64) { if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if (pZip->m_total_files == MZ_UINT16_MAX) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */ } } archive_name_size = strlen(pArchive_name); if (archive_name_size > MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); if (!pState->m_zip64) { /* Bail early if the archive would obviously become too large */ if ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + user_extra_data_len + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 1024 + MZ_ZIP_DATA_DESCRIPTER_SIZE32 + user_extra_data_central_len) > 0xFFFFFFFF) { pState->m_zip64 = MZ_TRUE; /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ } } #ifndef MINIZ_NO_TIME if (pFile_time) { mz_zip_time_t_to_dos_time(*pFile_time, &dos_time, &dos_date); } #endif if (uncomp_size <= 3) level = 0; if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes)) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += num_alignment_padding_bytes; local_dir_header_ofs = cur_archive_file_ofs; if (pZip->m_file_offset_alignment) { MZ_ASSERT((cur_archive_file_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } if (uncomp_size && level) { method = MZ_DEFLATED; } MZ_CLEAR_OBJ(local_dir_header); if (pState->m_zip64) { if (uncomp_size >= MZ_UINT32_MAX || local_dir_header_ofs >= MZ_UINT32_MAX) { pExtra_data = extra_data; extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, extra_size + user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += extra_size; } else { if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date)) return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += sizeof(local_dir_header); if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) { return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_archive_file_ofs += archive_name_size; } if (user_extra_data_len > 0) { if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_archive_file_ofs += user_extra_data_len; } if (uncomp_size) { mz_uint64 uncomp_remaining = uncomp_size; void *pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE); if (!pRead_buf) { return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!level) { while (uncomp_remaining) { mz_uint n = (mz_uint)MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining); if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) || (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf, n) != n)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n); uncomp_remaining -= n; cur_archive_file_ofs += n; } comp_size = uncomp_size; } else { mz_bool result = MZ_FALSE; mz_zip_writer_add_state state; tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)); if (!pComp) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } state.m_pZip = pZip; state.m_cur_archive_file_ofs = cur_archive_file_ofs; state.m_comp_size = 0; if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) { pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); } for (;;) { size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); tdefl_status status; tdefl_flush flush = TDEFL_NO_FLUSH; if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size) { mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); break; } uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size); uncomp_remaining -= in_buf_size; if (pZip->m_pNeeds_keepalive != NULL && pZip->m_pNeeds_keepalive(pZip->m_pIO_opaque)) flush = TDEFL_FULL_FLUSH; status = tdefl_compress_buffer(pComp, pRead_buf, in_buf_size, uncomp_remaining ? flush : TDEFL_FINISH); if (status == TDEFL_STATUS_DONE) { result = MZ_TRUE; break; } else if (status != TDEFL_STATUS_OKAY) { mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED); break; } } pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); if (!result) { pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); return MZ_FALSE; } comp_size = state.m_comp_size; cur_archive_file_ofs = state.m_cur_archive_file_ofs; } pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); } { mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64]; mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32; MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID); MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32); if (pExtra_data == NULL) { if (comp_size > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); MZ_WRITE_LE32(local_dir_footer + 8, comp_size); MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size); } else { MZ_WRITE_LE64(local_dir_footer + 8, comp_size); MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size); local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64; } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size) return MZ_FALSE; cur_archive_file_ofs += local_dir_footer_size; } if (pExtra_data != NULL) { extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); } if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, pExtra_data, extra_size, pComment, comment_size, uncomp_size, comp_size, uncomp_crc32, method, gen_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes, user_extra_data_central, user_extra_data_central_len)) return MZ_FALSE; pZip->m_total_files++; pZip->m_archive_size = cur_archive_file_ofs; return MZ_TRUE; } mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) { MZ_FILE *pSrc_file = NULL; mz_uint64 uncomp_size = 0; MZ_TIME_T file_modified_time; MZ_TIME_T *pFile_time = NULL; mz_bool status; memset(&file_modified_time, 0, sizeof(file_modified_time)); #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) pFile_time = &file_modified_time; if (!mz_zip_get_file_modified_time(pSrc_filename, &file_modified_time)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_STAT_FAILED); #endif pSrc_file = MZ_FOPEN(pSrc_filename, "rb"); if (!pSrc_file) return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); MZ_FSEEK64(pSrc_file, 0, SEEK_END); uncomp_size = MZ_FTELL64(pSrc_file); MZ_FSEEK64(pSrc_file, 0, SEEK_SET); status = mz_zip_writer_add_cfile(pZip, pArchive_name, pSrc_file, uncomp_size, pFile_time, pComment, comment_size, level_and_flags, NULL, 0, NULL, 0); MZ_FCLOSE(pSrc_file); return status; } #endif /* #ifndef MINIZ_NO_STDIO */ static mz_bool mz_zip_writer_update_zip64_extension_block(mz_zip_array *pNew_ext, mz_zip_archive *pZip, const mz_uint8 *pExt, uint32_t ext_len, mz_uint64 *pComp_size, mz_uint64 *pUncomp_size, mz_uint64 *pLocal_header_ofs, mz_uint32 *pDisk_start) { /* + 64 should be enough for any new zip64 data */ if (!mz_zip_array_reserve(pZip, pNew_ext, ext_len + 64, MZ_FALSE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); mz_zip_array_resize(pZip, pNew_ext, 0, MZ_FALSE); if ((pUncomp_size) || (pComp_size) || (pLocal_header_ofs) || (pDisk_start)) { mz_uint8 new_ext_block[64]; mz_uint8 *pDst = new_ext_block; mz_write_le16(pDst, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID); mz_write_le16(pDst + sizeof(mz_uint16), 0); pDst += sizeof(mz_uint16) * 2; if (pUncomp_size) { mz_write_le64(pDst, *pUncomp_size); pDst += sizeof(mz_uint64); } if (pComp_size) { mz_write_le64(pDst, *pComp_size); pDst += sizeof(mz_uint64); } if (pLocal_header_ofs) { mz_write_le64(pDst, *pLocal_header_ofs); pDst += sizeof(mz_uint64); } if (pDisk_start) { mz_write_le32(pDst, *pDisk_start); pDst += sizeof(mz_uint32); } mz_write_le16(new_ext_block + sizeof(mz_uint16), (mz_uint16)((pDst - new_ext_block) - sizeof(mz_uint16) * 2)); if (!mz_zip_array_push_back(pZip, pNew_ext, new_ext_block, pDst - new_ext_block)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if ((pExt) && (ext_len)) { mz_uint32 extra_size_remaining = ext_len; const mz_uint8 *pExtra_data = pExt; do { mz_uint32 field_id, field_data_size, field_total_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); field_total_size = field_data_size + sizeof(mz_uint16) * 2; if (field_total_size > extra_size_remaining) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); if (field_id != MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { if (!mz_zip_array_push_back(pZip, pNew_ext, pExtra_data, field_total_size)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } pExtra_data += field_total_size; extra_size_remaining -= field_total_size; } while (extra_size_remaining); } return MZ_TRUE; } /* TODO: This func is now pretty freakin complex due to zip64, split it up? */ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index) { mz_uint n, bit_flags, num_alignment_padding_bytes, src_central_dir_following_data_size; mz_uint64 src_archive_bytes_remaining, local_dir_header_ofs; mz_uint64 cur_src_file_ofs, cur_dst_file_ofs; mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; mz_uint8 new_central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; size_t orig_central_dir_size; mz_zip_internal_state *pState; void *pBuf; const mz_uint8 *pSrc_central_header; mz_zip_archive_file_stat src_file_stat; mz_uint32 src_filename_len, src_comment_len, src_ext_len; mz_uint32 local_header_filename_size, local_header_extra_len; mz_uint64 local_header_comp_size, local_header_uncomp_size; mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE; /* Sanity checks */ if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pSource_zip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; /* Don't support copying files from zip64 archives to non-zip64, even though in some cases this is possible */ if ((pSource_zip->m_pState->m_zip64) && (!pZip->m_pState->m_zip64)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); /* Get pointer to the source central dir header and crack it */ if (NULL == (pSrc_central_header = mz_zip_get_cdh(pSource_zip, src_file_index))) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_SIG_OFS) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); src_filename_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS); src_comment_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS); src_ext_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS); src_central_dir_following_data_size = src_filename_len + src_ext_len + src_comment_len; /* TODO: We don't support central dir's >= MZ_UINT32_MAX bytes right now (+32 fudge factor in case we need to add more extra data) */ if ((pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_central_dir_following_data_size + 32) >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); if (!pState->m_zip64) { if (pZip->m_total_files == MZ_UINT16_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { /* TODO: Our zip64 support still has some 32-bit limits that may not be worth fixing. */ if (pZip->m_total_files == MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } if (!mz_zip_file_stat_internal(pSource_zip, src_file_index, pSrc_central_header, &src_file_stat, NULL)) return MZ_FALSE; cur_src_file_ofs = src_file_stat.m_local_header_ofs; cur_dst_file_ofs = pZip->m_archive_size; /* Read the source archive's local dir header */ if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; /* Compute the total size we need to copy (filename+extra data+compressed data) */ local_header_filename_size = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS); local_header_extra_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); local_header_comp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS); local_header_uncomp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS); src_archive_bytes_remaining = local_header_filename_size + local_header_extra_len + src_file_stat.m_comp_size; /* Try to find a zip64 extended information field */ if ((local_header_extra_len) && ((local_header_comp_size == MZ_UINT32_MAX) || (local_header_uncomp_size == MZ_UINT32_MAX))) { mz_zip_array file_data_array; const mz_uint8 *pExtra_data; mz_uint32 extra_size_remaining = local_header_extra_len; mz_zip_array_init(&file_data_array, 1); if (!mz_zip_array_resize(pZip, &file_data_array, local_header_extra_len, MZ_FALSE)) { return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, src_file_stat.m_local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_size, file_data_array.m_p, local_header_extra_len) != local_header_extra_len) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } pExtra_data = (const mz_uint8 *)file_data_array.m_p; do { mz_uint32 field_id, field_data_size, field_total_size; if (extra_size_remaining < (sizeof(mz_uint16) * 2)) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } field_id = MZ_READ_LE16(pExtra_data); field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); field_total_size = field_data_size + sizeof(mz_uint16) * 2; if (field_total_size > extra_size_remaining) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) { const mz_uint8 *pSrc_field_data = pExtra_data + sizeof(mz_uint32); if (field_data_size < sizeof(mz_uint64) * 2) { mz_zip_array_clear(pZip, &file_data_array); return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); } local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data); local_header_comp_size = MZ_READ_LE64(pSrc_field_data + sizeof(mz_uint64)); /* may be 0 if there's a descriptor */ found_zip64_ext_data_in_ldir = MZ_TRUE; break; } pExtra_data += field_total_size; extra_size_remaining -= field_total_size; } while (extra_size_remaining); mz_zip_array_clear(pZip, &file_data_array); } if (!pState->m_zip64) { /* Try to detect if the new archive will most likely wind up too big and bail early (+(sizeof(mz_uint32) * 4) is for the optional descriptor which could be present, +64 is a fudge factor). */ /* We also check when the archive is finalized so this doesn't need to be perfect. */ mz_uint64 approx_new_archive_size = cur_dst_file_ofs + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + src_archive_bytes_remaining + (sizeof(mz_uint32) * 4) + pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_central_dir_following_data_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 64; if (approx_new_archive_size >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); } /* Write dest archive padding */ if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs, num_alignment_padding_bytes)) return MZ_FALSE; cur_dst_file_ofs += num_alignment_padding_bytes; local_dir_header_ofs = cur_dst_file_ofs; if (pZip->m_file_offset_alignment) { MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); } /* The original zip's local header+ext block doesn't change, even with zip64, so we can just copy it over to the dest zip */ if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; /* Copy over the source archive bytes to the dest archive, also ensure we have enough buf space to handle optional data descriptor */ if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)MZ_MAX(32U, MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, src_archive_bytes_remaining))))) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); while (src_archive_bytes_remaining) { n = (mz_uint)MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, src_archive_bytes_remaining); if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } cur_src_file_ofs += n; if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_dst_file_ofs += n; src_archive_bytes_remaining -= n; } /* Now deal with the optional data descriptor */ bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); if (bit_flags & 8) { /* Copy data descriptor */ if ((pSource_zip->m_pState->m_zip64) || (found_zip64_ext_data_in_ldir)) { /* src is zip64, dest must be zip64 */ /* name uint32_t's */ /* id 1 (optional in zip64?) */ /* crc 1 */ /* comp_size 2 */ /* uncomp_size 2 */ if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, (sizeof(mz_uint32) * 6)) != (sizeof(mz_uint32) * 6)) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID) ? 6 : 5); } else { /* src is NOT zip64 */ mz_bool has_id; if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); } has_id = (MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID); if (pZip->m_pState->m_zip64) { /* dest is zip64, so upgrade the data descriptor */ const mz_uint32 *pSrc_descriptor = (const mz_uint32 *)((const mz_uint8 *)pBuf + (has_id ? sizeof(mz_uint32) : 0)); const mz_uint32 src_crc32 = pSrc_descriptor[0]; const mz_uint64 src_comp_size = pSrc_descriptor[1]; const mz_uint64 src_uncomp_size = pSrc_descriptor[2]; mz_write_le32((mz_uint8 *)pBuf, MZ_ZIP_DATA_DESCRIPTOR_ID); mz_write_le32((mz_uint8 *)pBuf + sizeof(mz_uint32) * 1, src_crc32); mz_write_le64((mz_uint8 *)pBuf + sizeof(mz_uint32) * 2, src_comp_size); mz_write_le64((mz_uint8 *)pBuf + sizeof(mz_uint32) * 4, src_uncomp_size); n = sizeof(mz_uint32) * 6; } else { /* dest is NOT zip64, just copy it as-is */ n = sizeof(mz_uint32) * (has_id ? 4 : 3); } } if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) { pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); } cur_src_file_ofs += n; cur_dst_file_ofs += n; } pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); /* Finally, add the new central dir header */ orig_central_dir_size = pState->m_central_dir.m_size; memcpy(new_central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); if (pState->m_zip64) { /* This is the painful part: We need to write a new central dir header + ext block with updated zip64 fields, and ensure the old fields (if any) are not included. */ const mz_uint8 *pSrc_ext = pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_filename_len; mz_zip_array new_ext_block; mz_zip_array_init(&new_ext_block, sizeof(mz_uint8)); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, MZ_UINT32_MAX); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, MZ_UINT32_MAX); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, MZ_UINT32_MAX); if (!mz_zip_writer_update_zip64_extension_block(&new_ext_block, pZip, pSrc_ext, src_ext_len, &src_file_stat.m_comp_size, &src_file_stat.m_uncomp_size, &local_dir_header_ofs, NULL)) { mz_zip_array_clear(pZip, &new_ext_block); return MZ_FALSE; } MZ_WRITE_LE16(new_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS, new_ext_block.m_size); if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) { mz_zip_array_clear(pZip, &new_ext_block); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, src_filename_len)) { mz_zip_array_clear(pZip, &new_ext_block); mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_ext_block.m_p, new_ext_block.m_size)) { mz_zip_array_clear(pZip, &new_ext_block); mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_filename_len + src_ext_len, src_comment_len)) { mz_zip_array_clear(pZip, &new_ext_block); mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } mz_zip_array_clear(pZip, &new_ext_block); } else { /* sanity checks */ if (cur_dst_file_ofs > MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); if (local_dir_header_ofs >= MZ_UINT32_MAX) return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_dir_header_ofs); if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, src_central_dir_following_data_size)) { mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } } /* This shouldn't trigger unless we screwed up during the initial sanity checks */ if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) { /* TODO: Support central dirs >= 32-bits in size */ mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); } n = (mz_uint32)orig_central_dir_size; if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) { mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); } pZip->m_total_files++; pZip->m_archive_size = cur_dst_file_ofs; return MZ_TRUE; } mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) { mz_zip_internal_state *pState; mz_uint64 central_dir_ofs, central_dir_size; mz_uint8 hdr[256]; if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); pState = pZip->m_pState; if (pState->m_zip64) { if ((pZip->m_total_files > MZ_UINT32_MAX) || (pState->m_central_dir.m_size >= MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } else { if ((pZip->m_total_files > MZ_UINT16_MAX) || ((pZip->m_archive_size + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX)) return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); } central_dir_ofs = 0; central_dir_size = 0; if (pZip->m_total_files) { /* Write central directory */ central_dir_ofs = pZip->m_archive_size; central_dir_size = pState->m_central_dir.m_size; pZip->m_central_directory_file_ofs = central_dir_ofs; if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs, pState->m_central_dir.m_p, (size_t)central_dir_size) != central_dir_size) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); pZip->m_archive_size += central_dir_size; } if (pState->m_zip64) { /* Write zip64 end of central directory header */ mz_uint64 rel_ofs_to_zip64_ecdr = pZip->m_archive_size; MZ_CLEAR_OBJ(hdr); MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDH_SIG_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - sizeof(mz_uint32) - sizeof(mz_uint64)); MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS, 0x031E); /* TODO: always Unix */ MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_NEEDED_OFS, 0x002D); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, pZip->m_total_files); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_SIZE_OFS, central_dir_size); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_OFS_OFS, central_dir_ofs); if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE; /* Write zip64 end of central directory locator */ MZ_CLEAR_OBJ(hdr); MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_SIG_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG); MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS, rel_ofs_to_zip64_ecdr); MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS, 1); if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) != MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE; } /* Write end of central directory record */ MZ_CLEAR_OBJ(hdr); MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG); MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files)); MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files)); MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, MZ_MIN(MZ_UINT32_MAX, central_dir_size)); MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, MZ_MIN(MZ_UINT32_MAX, central_dir_ofs)); if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); #ifndef MINIZ_NO_STDIO if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) return mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); #endif /* #ifndef MINIZ_NO_STDIO */ pZip->m_archive_size += MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE; pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED; return MZ_TRUE; } mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize) { if ((!ppBuf) || (!pSize)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); *ppBuf = NULL; *pSize = 0; if ((!pZip) || (!pZip->m_pState)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (pZip->m_pWrite != mz_zip_heap_write_func) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); if (!mz_zip_writer_finalize_archive(pZip)) return MZ_FALSE; *ppBuf = pZip->m_pState->m_pMem; *pSize = pZip->m_pState->m_mem_size; pZip->m_pState->m_pMem = NULL; pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0; return MZ_TRUE; } mz_bool mz_zip_writer_end(mz_zip_archive *pZip) { return mz_zip_writer_end_internal(pZip, MZ_TRUE); } #ifndef MINIZ_NO_STDIO mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) { return mz_zip_add_mem_to_archive_file_in_place_v2(pZip_filename, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, NULL); } mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr) { mz_bool status, created_new_archive = MZ_FALSE; mz_zip_archive zip_archive; struct MZ_FILE_STAT_STRUCT file_stat; mz_zip_error actual_err = MZ_ZIP_NO_ERROR; mz_zip_zero_struct(&zip_archive); if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL; if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) || ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return MZ_FALSE; } if (!mz_zip_writer_validate_archive_name(pArchive_name)) { if (pErr) *pErr = MZ_ZIP_INVALID_FILENAME; return MZ_FALSE; } /* Important: The regular non-64 bit version of stat() can fail here if the file is very large, which could cause the archive to be overwritten. */ /* So be sure to compile with _LARGEFILE64_SOURCE 1 */ if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) { /* Create a new archive. */ if (!mz_zip_writer_init_file_v2(&zip_archive, pZip_filename, 0, level_and_flags)) { if (pErr) *pErr = zip_archive.m_last_error; return MZ_FALSE; } created_new_archive = MZ_TRUE; } else { /* Append to an existing archive. */ if (!mz_zip_reader_init_file_v2(&zip_archive, pZip_filename, level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) { if (pErr) *pErr = zip_archive.m_last_error; return MZ_FALSE; } if (!mz_zip_writer_init_from_reader_v2(&zip_archive, pZip_filename, level_and_flags)) { if (pErr) *pErr = zip_archive.m_last_error; mz_zip_reader_end_internal(&zip_archive, MZ_FALSE); return MZ_FALSE; } } status = mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, 0, 0); actual_err = zip_archive.m_last_error; /* Always finalize, even if adding failed for some reason, so we have a valid central directory. (This may not always succeed, but we can try.) */ if (!mz_zip_writer_finalize_archive(&zip_archive)) { if (!actual_err) actual_err = zip_archive.m_last_error; status = MZ_FALSE; } if (!mz_zip_writer_end_internal(&zip_archive, status)) { if (!actual_err) actual_err = zip_archive.m_last_error; status = MZ_FALSE; } if ((!status) && (created_new_archive)) { /* It's a new archive and something went wrong, so just delete it. */ int ignoredStatus = MZ_DELETE_FILE(pZip_filename); (void)ignoredStatus; } if (pErr) *pErr = actual_err; return status; } void *mz_zip_extract_archive_file_to_heap_v2(const char *pZip_filename, const char *pArchive_name, const char *pComment, size_t *pSize, mz_uint flags, mz_zip_error *pErr) { mz_uint32 file_index; mz_zip_archive zip_archive; void *p = NULL; if (pSize) *pSize = 0; if ((!pZip_filename) || (!pArchive_name)) { if (pErr) *pErr = MZ_ZIP_INVALID_PARAMETER; return NULL; } mz_zip_zero_struct(&zip_archive); if (!mz_zip_reader_init_file_v2(&zip_archive, pZip_filename, flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) { if (pErr) *pErr = zip_archive.m_last_error; return NULL; } if (mz_zip_reader_locate_file_v2(&zip_archive, pArchive_name, pComment, flags, &file_index)) { p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags); } mz_zip_reader_end_internal(&zip_archive, p != NULL); if (pErr) *pErr = zip_archive.m_last_error; return p; } void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags) { return mz_zip_extract_archive_file_to_heap_v2(pZip_filename, pArchive_name, NULL, pSize, flags, NULL); } #endif /* #ifndef MINIZ_NO_STDIO */ #endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */ /* ------------------- Misc utils */ mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip) { return pZip ? pZip->m_zip_mode : MZ_ZIP_MODE_INVALID; } mz_zip_type mz_zip_get_type(mz_zip_archive *pZip) { return pZip ? pZip->m_zip_type : MZ_ZIP_TYPE_INVALID; } mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num) { mz_zip_error prev_err; if (!pZip) return MZ_ZIP_INVALID_PARAMETER; prev_err = pZip->m_last_error; pZip->m_last_error = err_num; return prev_err; } mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip) { if (!pZip) return MZ_ZIP_INVALID_PARAMETER; return pZip->m_last_error; } mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip) { return mz_zip_set_last_error(pZip, MZ_ZIP_NO_ERROR); } mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip) { mz_zip_error prev_err; if (!pZip) return MZ_ZIP_INVALID_PARAMETER; prev_err = pZip->m_last_error; pZip->m_last_error = MZ_ZIP_NO_ERROR; return prev_err; } const char *mz_zip_get_error_string(mz_zip_error mz_err) { switch (mz_err) { case MZ_ZIP_NO_ERROR: return "no error"; case MZ_ZIP_UNDEFINED_ERROR: return "undefined error"; case MZ_ZIP_TOO_MANY_FILES: return "too many files"; case MZ_ZIP_FILE_TOO_LARGE: return "file too large"; case MZ_ZIP_UNSUPPORTED_METHOD: return "unsupported method"; case MZ_ZIP_UNSUPPORTED_ENCRYPTION: return "unsupported encryption"; case MZ_ZIP_UNSUPPORTED_FEATURE: return "unsupported feature"; case MZ_ZIP_FAILED_FINDING_CENTRAL_DIR: return "failed finding central directory"; case MZ_ZIP_NOT_AN_ARCHIVE: return "not a ZIP archive"; case MZ_ZIP_INVALID_HEADER_OR_CORRUPTED: return "invalid header or archive is corrupted"; case MZ_ZIP_UNSUPPORTED_MULTIDISK: return "unsupported multidisk archive"; case MZ_ZIP_DECOMPRESSION_FAILED: return "decompression failed or archive is corrupted"; case MZ_ZIP_COMPRESSION_FAILED: return "compression failed"; case MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE: return "unexpected decompressed size"; case MZ_ZIP_CRC_CHECK_FAILED: return "CRC-32 check failed"; case MZ_ZIP_UNSUPPORTED_CDIR_SIZE: return "unsupported central directory size"; case MZ_ZIP_ALLOC_FAILED: return "allocation failed"; case MZ_ZIP_FILE_OPEN_FAILED: return "file open failed"; case MZ_ZIP_FILE_CREATE_FAILED: return "file create failed"; case MZ_ZIP_FILE_WRITE_FAILED: return "file write failed"; case MZ_ZIP_FILE_READ_FAILED: return "file read failed"; case MZ_ZIP_FILE_CLOSE_FAILED: return "file close failed"; case MZ_ZIP_FILE_SEEK_FAILED: return "file seek failed"; case MZ_ZIP_FILE_STAT_FAILED: return "file stat failed"; case MZ_ZIP_INVALID_PARAMETER: return "invalid parameter"; case MZ_ZIP_INVALID_FILENAME: return "invalid filename"; case MZ_ZIP_BUF_TOO_SMALL: return "buffer too small"; case MZ_ZIP_INTERNAL_ERROR: return "internal error"; case MZ_ZIP_FILE_NOT_FOUND: return "file not found"; case MZ_ZIP_ARCHIVE_TOO_LARGE: return "archive is too large"; case MZ_ZIP_VALIDATION_FAILED: return "validation failed"; case MZ_ZIP_WRITE_CALLBACK_FAILED: return "write calledback failed"; default: break; } return "unknown error"; } /* Note: Just because the archive is not zip64 doesn't necessarily mean it doesn't have Zip64 extended information extra field, argh. */ mz_bool mz_zip_is_zip64(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return MZ_FALSE; return pZip->m_pState->m_zip64; } size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return 0; return pZip->m_pState->m_central_dir.m_size; } mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) { return pZip ? pZip->m_total_files : 0; } mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip) { if (!pZip) return 0; return pZip->m_archive_size; } mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return 0; return pZip->m_pState->m_file_archive_start_ofs; } MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip) { if ((!pZip) || (!pZip->m_pState)) return 0; return pZip->m_pState->m_pFile; } size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n) { if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pZip->m_pRead)) return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return pZip->m_pRead(pZip->m_pIO_opaque, file_ofs, pBuf, n); } mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size) { mz_uint n; const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); if (!p) { if (filename_buf_size) pFilename[0] = '\0'; mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); return 0; } n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); if (filename_buf_size) { n = MZ_MIN(n, filename_buf_size - 1); memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); pFilename[n] = '\0'; } return n + 1; } mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat) { return mz_zip_file_stat_internal(pZip, file_index, mz_zip_get_cdh(pZip, file_index), pStat, NULL); } mz_bool mz_zip_end(mz_zip_archive *pZip) { if (!pZip) return MZ_FALSE; if (pZip->m_zip_mode == MZ_ZIP_MODE_READING) return mz_zip_reader_end(pZip); #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS else if ((pZip->m_zip_mode == MZ_ZIP_MODE_WRITING) || (pZip->m_zip_mode == MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED)) return mz_zip_writer_end(pZip); #endif return MZ_FALSE; } #ifdef __cplusplus } #endif #endif /*#ifndef MINIZ_NO_ARCHIVE_APIS*/ RediSearch-1.2.2/src/dep/miniz/miniz.h000066400000000000000000002025721364126773500175370ustar00rootroot00000000000000/* miniz.c 2.0.6 beta - public domain deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing See "unlicense" statement at the end of this file. Rich Geldreich , last updated Oct. 13, 2013 Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt Most API's defined in miniz.c are optional. For example, to disable the archive related functions just define MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO (see the list below for more macros). * Low-level Deflate/Inflate implementation notes: Compression: Use the "tdefl" API's. The compressor supports raw, static, and dynamic blocks, lazy or greedy parsing, match length filtering, RLE-only, and Huffman-only streams. It performs and compresses approximately as well as zlib. Decompression: Use the "tinfl" API's. The entire decompressor is implemented as a single function coroutine: see tinfl_decompress(). It supports decompression into a 32KB (or larger power of 2) wrapping buffer, or into a memory block large enough to hold the entire file. The low-level tdefl/tinfl API's do not make any use of dynamic memory allocation. * zlib-style API notes: miniz.c implements a fairly large subset of zlib. There's enough functionality present for it to be a drop-in zlib replacement in many apps: The z_stream struct, optional memory allocation callbacks deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound inflateInit/inflateInit2/inflate/inflateEnd compress, compress2, compressBound, uncompress CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly routines. Supports raw deflate streams or standard zlib streams with adler-32 checking. Limitations: The callback API's are not implemented yet. No support for gzip headers or zlib static dictionaries. I've tried to closely emulate zlib's various flavors of stream flushing and return status codes, but there are no guarantees that miniz.c pulls this off perfectly. * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function, originally written by Alex Evans. Supports 1-4 bytes/pixel images. * ZIP archive API notes: The ZIP archive API's where designed with simplicity and efficiency in mind, with just enough abstraction to get the job done with minimal fuss. There are simple API's to retrieve file information, read files from existing archives, create new archives, append new files to existing archives, or clone archive data from one archive to another. It supports archives located in memory or the heap, on disk (using stdio.h), or you can specify custom file read/write callbacks. - Archive reading: Just call this function to read a single file from a disk archive: void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint zip_flags); For more complex cases, use the "mz_zip_reader" functions. Upon opening an archive, the entire central directory is located and read as-is into memory, and subsequent file access only occurs when reading individual files. - Archives file scanning: The simple way is to use this function to scan a loaded archive for a specific file: int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); The locate operation can optionally check file comments too, which (as one example) can be used to identify multiple versions of the same file in an archive. This function uses a simple linear search through the central directory, so it's not very fast. Alternately, you can iterate through all the files in an archive (using mz_zip_reader_get_num_files()) and retrieve detailed info on each file by calling mz_zip_reader_file_stat(). - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer immediately writes compressed file data to disk and builds an exact image of the central directory in memory. The central directory image is written all at once at the end of the archive file when the archive is finalized. The archive writer can optionally align each file's local header and file data to any power of 2 alignment, which can be useful when the archive will be read from optical media. Also, the writer supports placing arbitrary data blobs at the very beginning of ZIP archives. Archives written using either feature are still readable by any ZIP tool. - Archive appending: The simple way to add a single file to an archive is to call this function: mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); The archive will be created if it doesn't already exist, otherwise it'll be appended to. Note the appending is done in-place and is not an atomic operation, so if something goes wrong during the operation it's possible the archive could be left without a central directory (although the local file headers and file data will be fine, so the archive will be recoverable). For more complex archive modification scenarios: 1. The safest way is to use a mz_zip_reader to read the existing archive, cloning only those bits you want to preserve into a new archive using using the mz_zip_writer_add_from_zip_reader() function (which compiles the compressed file data as-is). When you're done, delete the old archive and rename the newly written archive, and you're done. This is safe but requires a bunch of temporary disk space or heap memory. 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using mz_zip_writer_init_from_reader(), append new files as needed, then finalize the archive which will write an updated central directory to the original archive. (This is basically what mz_zip_add_mem_to_archive_file_in_place() does.) There's a possibility that the archive's central directory could be lost with this method if anything goes wrong, though. - ZIP archive support limitations: No zip64 or spanning support. Extraction functions can only handle unencrypted, stored or deflated files. Requires streams capable of seeking. * This is a header file library, like stb_image.c. To get only a header file, either cut and paste the below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then include miniz.c from it. * Important: For best perf. be sure to customize the below macros for your target platform: #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 #define MINIZ_LITTLE_ENDIAN 1 #define MINIZ_HAS_64BIT_REGISTERS 1 * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before including miniz.c to ensure miniz uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be able to process large files (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes). */ #pragma once /* Defines to completely disable specific portions of miniz.c: If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. */ /* Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. */ /*#define MINIZ_NO_STDIO */ /* If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or */ /* get/set file times, and the C run-time funcs that get/set times won't be called. */ /* The current downside is the times written to your archives will be from 1979. */ /*#define MINIZ_NO_TIME */ /* Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. */ /*#define MINIZ_NO_ARCHIVE_APIS */ /* Define MINIZ_NO_ARCHIVE_WRITING_APIS to disable all writing related ZIP archive API's. */ /*#define MINIZ_NO_ARCHIVE_WRITING_APIS */ /* Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. */ /*#define MINIZ_NO_ZLIB_APIS */ /* Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. */ /*#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES */ /* Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. */ /*#define MINIZ_NO_MALLOC */ #if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) /* TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux */ #define MINIZ_NO_TIME #endif #include #if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) #include #endif #if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) /* MINIZ_X86_OR_X64_CPU is only used to help set the below macros. */ #define MINIZ_X86_OR_X64_CPU 1 #else #define MINIZ_X86_OR_X64_CPU 0 #endif #if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU /* Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. */ #define MINIZ_LITTLE_ENDIAN 1 #else #define MINIZ_LITTLE_ENDIAN 0 #endif #if MINIZ_X86_OR_X64_CPU /* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */ #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 #else #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 0 #endif #if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) /* Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). */ #define MINIZ_HAS_64BIT_REGISTERS 1 #else #define MINIZ_HAS_64BIT_REGISTERS 0 #endif #ifdef __cplusplus extern "C" { #endif /* ------------------- zlib-style API Definitions. */ /* For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! */ typedef unsigned long mz_ulong; /* mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. */ void mz_free(void *p); #define MZ_ADLER32_INIT (1) /* mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. */ mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); #define MZ_CRC32_INIT (0) /* mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. */ mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); /* Compression strategies. */ enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; /* Method */ #define MZ_DEFLATED 8 /* Heap allocation callbacks. Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. */ typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); typedef void (*mz_free_func)(void *opaque, void *address); typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); /* Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. */ enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; #define MZ_VERSION "10.0.1" #define MZ_VERNUM 0xA010 #define MZ_VER_MAJOR 10 #define MZ_VER_MINOR 0 #define MZ_VER_REVISION 1 #define MZ_VER_SUBREVISION 0 #ifndef MINIZ_NO_ZLIB_APIS /* Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). */ enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; /* Return status codes. MZ_PARAM_ERROR is non-standard. */ enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; /* Window bits */ #define MZ_DEFAULT_WINDOW_BITS 15 struct mz_internal_state; /* Compression/decompression stream struct. */ typedef struct mz_stream_s { const unsigned char *next_in; /* pointer to next byte to read */ unsigned int avail_in; /* number of bytes available at next_in */ mz_ulong total_in; /* total number of bytes consumed so far */ unsigned char *next_out; /* pointer to next byte to write */ unsigned int avail_out; /* number of bytes that can be written to next_out */ mz_ulong total_out; /* total number of bytes produced so far */ char *msg; /* error msg (unused) */ struct mz_internal_state *state; /* internal state, allocated by zalloc/zfree */ mz_alloc_func zalloc; /* optional heap allocation function (defaults to malloc) */ mz_free_func zfree; /* optional heap free function (defaults to free) */ void *opaque; /* heap alloc function user pointer */ int data_type; /* data_type (unused) */ mz_ulong adler; /* adler32 of the source or uncompressed data */ mz_ulong reserved; /* not used */ } mz_stream; typedef mz_stream *mz_streamp; /* Returns the version string of miniz.c. */ const char *mz_version(void); /* mz_deflateInit() initializes a compressor with default options: */ /* Parameters: */ /* pStream must point to an initialized mz_stream struct. */ /* level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. */ /* level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. */ /* (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) */ /* Return values: */ /* MZ_OK on success. */ /* MZ_STREAM_ERROR if the stream is bogus. */ /* MZ_PARAM_ERROR if the input parameters are bogus. */ /* MZ_MEM_ERROR on out of memory. */ int mz_deflateInit(mz_streamp pStream, int level); /* mz_deflateInit2() is like mz_deflate(), except with more control: */ /* Additional parameters: */ /* method must be MZ_DEFLATED */ /* window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) */ /* mem_level must be between [1, 9] (it's checked but ignored by miniz.c) */ int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); /* Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). */ int mz_deflateReset(mz_streamp pStream); /* mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. */ /* Parameters: */ /* pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. */ /* flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. */ /* Return values: */ /* MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). */ /* MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. */ /* MZ_STREAM_ERROR if the stream is bogus. */ /* MZ_PARAM_ERROR if one of the parameters is invalid. */ /* MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) */ int mz_deflate(mz_streamp pStream, int flush); /* mz_deflateEnd() deinitializes a compressor: */ /* Return values: */ /* MZ_OK on success. */ /* MZ_STREAM_ERROR if the stream is bogus. */ int mz_deflateEnd(mz_streamp pStream); /* mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. */ mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); /* Single-call compression functions mz_compress() and mz_compress2(): */ /* Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. */ int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); /* mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). */ mz_ulong mz_compressBound(mz_ulong source_len); /* Initializes a decompressor. */ int mz_inflateInit(mz_streamp pStream); /* mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: */ /* window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). */ int mz_inflateInit2(mz_streamp pStream, int window_bits); /* Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. */ /* Parameters: */ /* pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. */ /* flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. */ /* On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). */ /* MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. */ /* Return values: */ /* MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. */ /* MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. */ /* MZ_STREAM_ERROR if the stream is bogus. */ /* MZ_DATA_ERROR if the deflate stream is invalid. */ /* MZ_PARAM_ERROR if one of the parameters is invalid. */ /* MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again */ /* with more input data, or with more room in the output buffer (except when using single call decompression, described above). */ int mz_inflate(mz_streamp pStream, int flush); /* Deinitializes a decompressor. */ int mz_inflateEnd(mz_streamp pStream); /* Single-call decompression. */ /* Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. */ int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); /* Returns a string description of the specified error code, or NULL if the error code is invalid. */ const char *mz_error(int err); /* Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. */ /* Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. */ #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES typedef unsigned char Byte; typedef unsigned int uInt; typedef mz_ulong uLong; typedef Byte Bytef; typedef uInt uIntf; typedef char charf; typedef int intf; typedef void *voidpf; typedef uLong uLongf; typedef void *voidp; typedef void *const voidpc; #define Z_NULL 0 #define Z_NO_FLUSH MZ_NO_FLUSH #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH #define Z_SYNC_FLUSH MZ_SYNC_FLUSH #define Z_FULL_FLUSH MZ_FULL_FLUSH #define Z_FINISH MZ_FINISH #define Z_BLOCK MZ_BLOCK #define Z_OK MZ_OK #define Z_STREAM_END MZ_STREAM_END #define Z_NEED_DICT MZ_NEED_DICT #define Z_ERRNO MZ_ERRNO #define Z_STREAM_ERROR MZ_STREAM_ERROR #define Z_DATA_ERROR MZ_DATA_ERROR #define Z_MEM_ERROR MZ_MEM_ERROR #define Z_BUF_ERROR MZ_BUF_ERROR #define Z_VERSION_ERROR MZ_VERSION_ERROR #define Z_PARAM_ERROR MZ_PARAM_ERROR #define Z_NO_COMPRESSION MZ_NO_COMPRESSION #define Z_BEST_SPEED MZ_BEST_SPEED #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY #define Z_FILTERED MZ_FILTERED #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY #define Z_RLE MZ_RLE #define Z_FIXED MZ_FIXED #define Z_DEFLATED MZ_DEFLATED #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS #define alloc_func mz_alloc_func #define free_func mz_free_func #define internal_state mz_internal_state #define z_stream mz_stream #define deflateInit mz_deflateInit #define deflateInit2 mz_deflateInit2 #define deflateReset mz_deflateReset #define deflate mz_deflate #define deflateEnd mz_deflateEnd #define deflateBound mz_deflateBound #define compress mz_compress #define compress2 mz_compress2 #define compressBound mz_compressBound #define inflateInit mz_inflateInit #define inflateInit2 mz_inflateInit2 #define inflate mz_inflate #define inflateEnd mz_inflateEnd #define uncompress mz_uncompress #define crc32 mz_crc32 #define adler32 mz_adler32 #define MAX_WBITS 15 #define MAX_MEM_LEVEL 9 #define zError mz_error #define ZLIB_VERSION MZ_VERSION #define ZLIB_VERNUM MZ_VERNUM #define ZLIB_VER_MAJOR MZ_VER_MAJOR #define ZLIB_VER_MINOR MZ_VER_MINOR #define ZLIB_VER_REVISION MZ_VER_REVISION #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION #define zlibVersion mz_version #define zlib_version mz_version() #endif /* #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES */ #endif /* MINIZ_NO_ZLIB_APIS */ #ifdef __cplusplus } #endif #pragma once #include #include #include #include /* ------------------- Types and macros */ typedef unsigned char mz_uint8; typedef signed short mz_int16; typedef unsigned short mz_uint16; typedef unsigned int mz_uint32; typedef unsigned int mz_uint; typedef int64_t mz_int64; typedef uint64_t mz_uint64; typedef int mz_bool; #define MZ_FALSE (0) #define MZ_TRUE (1) /* Works around MSVC's spammy "warning C4127: conditional expression is constant" message. */ #ifdef _MSC_VER #define MZ_MACRO_END while (0, 0) #else #define MZ_MACRO_END while (0) #endif #ifdef MINIZ_NO_STDIO #define MZ_FILE void * #else #include #define MZ_FILE FILE #endif /* #ifdef MINIZ_NO_STDIO */ #ifdef MINIZ_NO_TIME typedef struct mz_dummy_time_t_tag { int m_dummy; } mz_dummy_time_t; #define MZ_TIME_T mz_dummy_time_t #else #define MZ_TIME_T time_t #endif #define MZ_ASSERT(x) assert(x) #ifdef MINIZ_NO_MALLOC #define MZ_MALLOC(x) NULL #define MZ_FREE(x) (void)x, ((void)0) #define MZ_REALLOC(p, x) NULL #else #define MZ_MALLOC(x) malloc(x) #define MZ_FREE(x) free(x) #define MZ_REALLOC(p, x) realloc(p, x) #endif #define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b)) #define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) #else #define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) #define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) #endif #define MZ_READ_LE64(p) (((mz_uint64)MZ_READ_LE32(p)) | (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) << 32U)) #ifdef _MSC_VER #define MZ_FORCEINLINE __forceinline #elif defined(__GNUC__) #define MZ_FORCEINLINE __inline__ __attribute__((__always_inline__)) #else #define MZ_FORCEINLINE inline #endif #ifdef __cplusplus extern "C" { #endif extern void *miniz_def_alloc_func(void *opaque, size_t items, size_t size); extern void miniz_def_free_func(void *opaque, void *address); extern void *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size); #define MZ_UINT16_MAX (0xFFFFU) #define MZ_UINT32_MAX (0xFFFFFFFFU) #ifdef __cplusplus } #endif #pragma once #ifdef __cplusplus extern "C" { #endif /* ------------------- Low-level Compression API Definitions */ /* Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). */ #define TDEFL_LESS_MEMORY 0 /* tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): */ /* TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). */ enum { TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF }; /* TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. */ /* TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). */ /* TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. */ /* TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). */ /* TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) */ /* TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. */ /* TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. */ /* TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. */ /* The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). */ enum { TDEFL_WRITE_ZLIB_HEADER = 0x01000, TDEFL_COMPUTE_ADLER32 = 0x02000, TDEFL_GREEDY_PARSING_FLAG = 0x04000, TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, TDEFL_RLE_MATCHES = 0x10000, TDEFL_FILTER_MATCHES = 0x20000, TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 }; /* High level compression functions: */ /* tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). */ /* On entry: */ /* pSrc_buf, src_buf_len: Pointer and size of source block to compress. */ /* flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. */ /* On return: */ /* Function returns a pointer to the compressed data, or NULL on failure. */ /* *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. */ /* The caller must free() the returned block when it's no longer needed. */ void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); /* tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. */ /* Returns 0 on failure. */ size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); /* Compresses an image to a compressed PNG file in memory. */ /* On entry: */ /* pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. */ /* The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. */ /* level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL */ /* If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). */ /* On return: */ /* Function returns a pointer to the compressed data, or NULL on failure. */ /* *pLen_out will be set to the size of the PNG image file. */ /* The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. */ void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); /* Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. */ typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); /* tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. */ mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; /* TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). */ #if TDEFL_LESS_MEMORY enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; #else enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; #endif /* The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. */ typedef enum { TDEFL_STATUS_BAD_PARAM = -2, TDEFL_STATUS_PUT_BUF_FAILED = -1, TDEFL_STATUS_OKAY = 0, TDEFL_STATUS_DONE = 1 } tdefl_status; /* Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums */ typedef enum { TDEFL_NO_FLUSH = 0, TDEFL_SYNC_FLUSH = 2, TDEFL_FULL_FLUSH = 3, TDEFL_FINISH = 4 } tdefl_flush; /* tdefl's compression state structure. */ typedef struct { tdefl_put_buf_func_ptr m_pPut_buf_func; void *m_pPut_buf_user; mz_uint m_flags, m_max_probes[2]; int m_greedy_parsing; mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; tdefl_status m_prev_return_status; const void *m_pIn_buf; void *m_pOut_buf; size_t *m_pIn_buf_size, *m_pOut_buf_size; tdefl_flush m_flush; const mz_uint8 *m_pSrc; size_t m_src_buf_left, m_out_buf_ofs; mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; } tdefl_compressor; /* Initializes the compressor. */ /* There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. */ /* pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. */ /* If pBut_buf_func is NULL the user should always call the tdefl_compress() API. */ /* flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) */ tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); /* Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. */ tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); /* tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. */ /* tdefl_compress_buffer() always consumes the entire input buffer. */ tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); mz_uint32 tdefl_get_adler32(tdefl_compressor *d); /* Create tdefl_compress() flags given zlib-style compression parameters. */ /* level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) */ /* window_bits may be -15 (raw deflate) or 15 (zlib) */ /* strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED */ mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); /* Allocate the tdefl_compressor structure in C so that */ /* non-C language bindings to tdefl_ API don't need to worry about */ /* structure size and allocation mechanism. */ tdefl_compressor *tdefl_compressor_alloc(); void tdefl_compressor_free(tdefl_compressor *pComp); #ifdef __cplusplus } #endif #pragma once /* ------------------- Low-level Decompression API Definitions */ #ifdef __cplusplus extern "C" { #endif /* Decompression flags used by tinfl_decompress(). */ /* TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. */ /* TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. */ /* TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). */ /* TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. */ enum { TINFL_FLAG_PARSE_ZLIB_HEADER = 1, TINFL_FLAG_HAS_MORE_INPUT = 2, TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, TINFL_FLAG_COMPUTE_ADLER32 = 8 }; /* High level decompression functions: */ /* tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). */ /* On entry: */ /* pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. */ /* On return: */ /* Function returns a pointer to the decompressed data, or NULL on failure. */ /* *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. */ /* The caller must call mz_free() on the returned block when it's no longer needed. */ void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); /* tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. */ /* Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. */ #define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); /* tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. */ /* Returns 1 on success or 0 on failure. */ typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; /* Allocate the tinfl_decompressor structure in C so that */ /* non-C language bindings to tinfl_ API don't need to worry about */ /* structure size and allocation mechanism. */ tinfl_decompressor *tinfl_decompressor_alloc(); void tinfl_decompressor_free(tinfl_decompressor *pDecomp); /* Max size of LZ dictionary. */ #define TINFL_LZ_DICT_SIZE 32768 /* Return status. */ typedef enum { /* This flags indicates the inflator needs 1 or more input bytes to make forward progress, but the caller is indicating that no more are available. The compressed data */ /* is probably corrupted. If you call the inflator again with more bytes it'll try to continue processing the input but this is a BAD sign (either the data is corrupted or you called it incorrectly). */ /* If you call it again with no input you'll just get TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS again. */ TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS = -4, /* This flag indicates that one or more of the input parameters was obviously bogus. (You can try calling it again, but if you get this error the calling code is wrong.) */ TINFL_STATUS_BAD_PARAM = -3, /* This flags indicate the inflator is finished but the adler32 check of the uncompressed data didn't match. If you call it again it'll return TINFL_STATUS_DONE. */ TINFL_STATUS_ADLER32_MISMATCH = -2, /* This flags indicate the inflator has somehow failed (bad code, corrupted input, etc.). If you call it again without resetting via tinfl_init() it it'll just keep on returning the same status failure code. */ TINFL_STATUS_FAILED = -1, /* Any status code less than TINFL_STATUS_DONE must indicate a failure. */ /* This flag indicates the inflator has returned every byte of uncompressed data that it can, has consumed every byte that it needed, has successfully reached the end of the deflate stream, and */ /* if zlib headers and adler32 checking enabled that it has successfully checked the uncompressed data's adler32. If you call it again you'll just get TINFL_STATUS_DONE over and over again. */ TINFL_STATUS_DONE = 0, /* This flag indicates the inflator MUST have more input data (even 1 byte) before it can make any more forward progress, or you need to clear the TINFL_FLAG_HAS_MORE_INPUT */ /* flag on the next call if you don't have any more source data. If the source data was somehow corrupted it's also possible (but unlikely) for the inflator to keep on demanding input to */ /* proceed, so be sure to properly set the TINFL_FLAG_HAS_MORE_INPUT flag. */ TINFL_STATUS_NEEDS_MORE_INPUT = 1, /* This flag indicates the inflator definitely has 1 or more bytes of uncompressed data available, but it cannot write this data into the output buffer. */ /* Note if the source compressed data was corrupted it's possible for the inflator to return a lot of uncompressed data to the caller. I've been assuming you know how much uncompressed data to expect */ /* (either exact or worst case) and will stop calling the inflator and fail after receiving too much. In pure streaming scenarios where you have no idea how many bytes to expect this may not be possible */ /* so I may need to add some code to address this. */ TINFL_STATUS_HAS_MORE_OUTPUT = 2 } tinfl_status; /* Initializes the decompressor to its initial state. */ #define tinfl_init(r) \ do \ { \ (r)->m_state = 0; \ } \ MZ_MACRO_END #define tinfl_get_adler32(r) (r)->m_check_adler32 /* Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. */ /* This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. */ tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); /* Internal/private bits follow. */ enum { TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS }; typedef struct { mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; } tinfl_huff_table; #if MINIZ_HAS_64BIT_REGISTERS #define TINFL_USE_64BIT_BITBUF 1 #else #define TINFL_USE_64BIT_BITBUF 0 #endif #if TINFL_USE_64BIT_BITBUF typedef mz_uint64 tinfl_bit_buf_t; #define TINFL_BITBUF_SIZE (64) #else typedef mz_uint32 tinfl_bit_buf_t; #define TINFL_BITBUF_SIZE (32) #endif struct tinfl_decompressor_tag { mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; tinfl_bit_buf_t m_bit_buf; size_t m_dist_from_out_buf_start; tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; }; #ifdef __cplusplus } #endif #pragma once /* ------------------- ZIP archive reading/writing */ #ifndef MINIZ_NO_ARCHIVE_APIS #ifdef __cplusplus extern "C" { #endif enum { /* Note: These enums can be reduced as needed to save memory or stack space - they are pretty conservative. */ MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 512, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 512 }; typedef struct { /* Central directory file index. */ mz_uint32 m_file_index; /* Byte offset of this entry in the archive's central directory. Note we currently only support up to UINT_MAX or less bytes in the central dir. */ mz_uint64 m_central_dir_ofs; /* These fields are copied directly from the zip's central dir. */ mz_uint16 m_version_made_by; mz_uint16 m_version_needed; mz_uint16 m_bit_flag; mz_uint16 m_method; #ifndef MINIZ_NO_TIME MZ_TIME_T m_time; #endif /* CRC-32 of uncompressed data. */ mz_uint32 m_crc32; /* File's compressed size. */ mz_uint64 m_comp_size; /* File's uncompressed size. Note, I've seen some old archives where directory entries had 512 bytes for their uncompressed sizes, but when you try to unpack them you actually get 0 bytes. */ mz_uint64 m_uncomp_size; /* Zip internal and external file attributes. */ mz_uint16 m_internal_attr; mz_uint32 m_external_attr; /* Entry's local header file offset in bytes. */ mz_uint64 m_local_header_ofs; /* Size of comment in bytes. */ mz_uint32 m_comment_size; /* MZ_TRUE if the entry appears to be a directory. */ mz_bool m_is_directory; /* MZ_TRUE if the entry uses encryption/strong encryption (which miniz_zip doesn't support) */ mz_bool m_is_encrypted; /* MZ_TRUE if the file is not encrypted, a patch file, and if it uses a compression method we support. */ mz_bool m_is_supported; /* Filename. If string ends in '/' it's a subdirectory entry. */ /* Guaranteed to be zero terminated, may be truncated to fit. */ char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; /* Comment field. */ /* Guaranteed to be zero terminated, may be truncated to fit. */ char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; } mz_zip_archive_file_stat; typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n); typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n); typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); struct mz_zip_internal_state_tag; typedef struct mz_zip_internal_state_tag mz_zip_internal_state; typedef enum { MZ_ZIP_MODE_INVALID = 0, MZ_ZIP_MODE_READING = 1, MZ_ZIP_MODE_WRITING = 2, MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 } mz_zip_mode; typedef enum { MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100, MZ_ZIP_FLAG_IGNORE_PATH = 0x0200, MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400, MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800, MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG = 0x1000, /* if enabled, mz_zip_reader_locate_file() will be called on each file as its validated to ensure the func finds the file in the central dir (intended for testing) */ MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY = 0x2000, /* validate the local headers, but don't decompress the entire file and check the crc32 */ MZ_ZIP_FLAG_WRITE_ZIP64 = 0x4000, /* always use the zip64 file format, instead of the original zip file format with automatic switch to zip64. Use as flags parameter with mz_zip_writer_init*_v2 */ MZ_ZIP_FLAG_WRITE_ALLOW_READING = 0x8000, MZ_ZIP_FLAG_ASCII_FILENAME = 0x10000 } mz_zip_flags; typedef enum { MZ_ZIP_TYPE_INVALID = 0, MZ_ZIP_TYPE_USER, MZ_ZIP_TYPE_MEMORY, MZ_ZIP_TYPE_HEAP, MZ_ZIP_TYPE_FILE, MZ_ZIP_TYPE_CFILE, MZ_ZIP_TOTAL_TYPES } mz_zip_type; /* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or modify this enum. */ typedef enum { MZ_ZIP_NO_ERROR = 0, MZ_ZIP_UNDEFINED_ERROR, MZ_ZIP_TOO_MANY_FILES, MZ_ZIP_FILE_TOO_LARGE, MZ_ZIP_UNSUPPORTED_METHOD, MZ_ZIP_UNSUPPORTED_ENCRYPTION, MZ_ZIP_UNSUPPORTED_FEATURE, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, MZ_ZIP_NOT_AN_ARCHIVE, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, MZ_ZIP_UNSUPPORTED_MULTIDISK, MZ_ZIP_DECOMPRESSION_FAILED, MZ_ZIP_COMPRESSION_FAILED, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, MZ_ZIP_CRC_CHECK_FAILED, MZ_ZIP_UNSUPPORTED_CDIR_SIZE, MZ_ZIP_ALLOC_FAILED, MZ_ZIP_FILE_OPEN_FAILED, MZ_ZIP_FILE_CREATE_FAILED, MZ_ZIP_FILE_WRITE_FAILED, MZ_ZIP_FILE_READ_FAILED, MZ_ZIP_FILE_CLOSE_FAILED, MZ_ZIP_FILE_SEEK_FAILED, MZ_ZIP_FILE_STAT_FAILED, MZ_ZIP_INVALID_PARAMETER, MZ_ZIP_INVALID_FILENAME, MZ_ZIP_BUF_TOO_SMALL, MZ_ZIP_INTERNAL_ERROR, MZ_ZIP_FILE_NOT_FOUND, MZ_ZIP_ARCHIVE_TOO_LARGE, MZ_ZIP_VALIDATION_FAILED, MZ_ZIP_WRITE_CALLBACK_FAILED, MZ_ZIP_TOTAL_ERRORS } mz_zip_error; typedef struct { mz_uint64 m_archive_size; mz_uint64 m_central_directory_file_ofs; /* We only support up to UINT32_MAX files in zip64 mode. */ mz_uint32 m_total_files; mz_zip_mode m_zip_mode; mz_zip_type m_zip_type; mz_zip_error m_last_error; mz_uint64 m_file_offset_alignment; mz_alloc_func m_pAlloc; mz_free_func m_pFree; mz_realloc_func m_pRealloc; void *m_pAlloc_opaque; mz_file_read_func m_pRead; mz_file_write_func m_pWrite; mz_file_needs_keepalive m_pNeeds_keepalive; void *m_pIO_opaque; mz_zip_internal_state *m_pState; } mz_zip_archive; typedef struct { mz_zip_archive *pZip; mz_uint flags; int status; #ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS mz_uint file_crc32; #endif mz_uint64 read_buf_size, read_buf_ofs, read_buf_avail, comp_remaining, out_buf_ofs, cur_file_ofs; mz_zip_archive_file_stat file_stat; void *pRead_buf; void *pWrite_buf; size_t out_blk_remain; tinfl_decompressor inflator; } mz_zip_reader_extract_iter_state; /* -------- ZIP reading */ /* Inits a ZIP archive reader. */ /* These functions read and validate the archive's central directory. */ mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags); mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags); #ifndef MINIZ_NO_STDIO /* Read a archive from a disk file. */ /* file_start_ofs is the file offset where the archive actually begins, or 0. */ /* actual_archive_size is the true total size of the archive, which may be smaller than the file's actual size on disk. If zero the entire file is treated as the archive. */ mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags); mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size); /* Read an archive from an already opened FILE, beginning at the current file position. */ /* The archive is assumed to be archive_size bytes long. If archive_size is < 0, then the entire rest of the file is assumed to contain the archive. */ /* The FILE will NOT be closed when mz_zip_reader_end() is called. */ mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags); #endif /* Ends archive reading, freeing all allocations, and closing the input archive file if mz_zip_reader_init_file() was used. */ mz_bool mz_zip_reader_end(mz_zip_archive *pZip); /* -------- ZIP reading or writing */ /* Clears a mz_zip_archive struct to all zeros. */ /* Important: This must be done before passing the struct to any mz_zip functions. */ void mz_zip_zero_struct(mz_zip_archive *pZip); mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip); mz_zip_type mz_zip_get_type(mz_zip_archive *pZip); /* Returns the total number of files in the archive. */ mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip); mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip); MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip); /* Reads n bytes of raw archive data, starting at file offset file_ofs, to pBuf. */ size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n); /* Attempts to locates a file in the archive's central directory. */ /* Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH */ /* Returns -1 if the file cannot be found. */ int mz_zip_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); /* Returns MZ_FALSE if the file cannot be found. */ mz_bool mz_zip_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *pIndex); /* All mz_zip funcs set the m_last_error field in the mz_zip_archive struct. These functions retrieve/manipulate this field. */ /* Note that the m_last_error functionality is not thread safe. */ mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num); mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip); mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip); mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip); const char *mz_zip_get_error_string(mz_zip_error mz_err); /* MZ_TRUE if the archive file entry is a directory entry. */ mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index); /* MZ_TRUE if the file is encrypted/strong encrypted. */ mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index); /* MZ_TRUE if the compression method is supported, and the file is not encrypted, and the file is not a compressed patch file. */ mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index); /* Retrieves the filename of an archive file entry. */ /* Returns the number of bytes written to pFilename, or if filename_buf_size is 0 this function returns the number of bytes needed to fully store the filename. */ mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size); /* Attempts to locates a file in the archive's central directory. */ /* Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH */ /* Returns -1 if the file cannot be found. */ int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); int mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *file_index); /* Returns detailed information about an archive file entry. */ mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); /* MZ_TRUE if the file is in zip64 format. */ /* A file is considered zip64 if it contained a zip64 end of central directory marker, or if it contained any zip64 extended file information fields in the central directory. */ mz_bool mz_zip_is_zip64(mz_zip_archive *pZip); /* Returns the total central directory size in bytes. */ /* The current max supported size is <= MZ_UINT32_MAX. */ size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip); /* Extracts a archive file to a memory buffer using no memory allocation. */ /* There must be at least enough room on the stack to store the inflator's state (~34KB or so). */ mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); /* Extracts a archive file to a memory buffer. */ mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags); mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags); /* Extracts a archive file to a dynamically allocated heap buffer. */ /* The memory will be allocated via the mz_zip_archive's alloc/realloc functions. */ /* Returns NULL and sets the last error on failure. */ void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags); void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags); /* Extracts a archive file using a callback function to output the file's data. */ mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); /* Extract a file iteratively */ mz_zip_reader_extract_iter_state* mz_zip_reader_extract_iter_new(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); mz_zip_reader_extract_iter_state* mz_zip_reader_extract_file_iter_new(mz_zip_archive *pZip, const char *pFilename, mz_uint flags); size_t mz_zip_reader_extract_iter_read(mz_zip_reader_extract_iter_state* pState, void* pvBuf, size_t buf_size); mz_bool mz_zip_reader_extract_iter_free(mz_zip_reader_extract_iter_state* pState); #ifndef MINIZ_NO_STDIO /* Extracts a archive file to a disk file and sets its last accessed and modified times. */ /* This function only extracts files, not archive directory records. */ mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); /* Extracts a archive file starting at the current position in the destination FILE stream. */ mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *File, mz_uint flags); mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags); #endif #if 0 /* TODO */ typedef void *mz_zip_streaming_extract_state_ptr; mz_zip_streaming_extract_state_ptr mz_zip_streaming_extract_begin(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); uint64_t mz_zip_streaming_extract_get_size(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); uint64_t mz_zip_streaming_extract_get_cur_ofs(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); mz_bool mz_zip_streaming_extract_seek(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, uint64_t new_ofs); size_t mz_zip_streaming_extract_read(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, void *pBuf, size_t buf_size); mz_bool mz_zip_streaming_extract_end(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); #endif /* This function compares the archive's local headers, the optional local zip64 extended information block, and the optional descriptor following the compressed data vs. the data in the central directory. */ /* It also validates that each file can be successfully uncompressed unless the MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY is specified. */ mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); /* Validates an entire archive by calling mz_zip_validate_file() on each file. */ mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags); /* Misc utils/helpers, valid for ZIP reading or writing */ mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr); mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr); /* Universal end function - calls either mz_zip_reader_end() or mz_zip_writer_end(). */ mz_bool mz_zip_end(mz_zip_archive *pZip); /* -------- ZIP writing */ #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS /* Inits a ZIP archive writer. */ /*Set pZip->m_pWrite (and pZip->m_pIO_opaque) before calling mz_zip_writer_init or mz_zip_writer_init_v2*/ /*The output is streamable, i.e. file_ofs in mz_file_write_func always increases only by n*/ mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags); mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size); mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size, mz_uint flags); #ifndef MINIZ_NO_STDIO mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning); mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags); mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags); #endif /* Converts a ZIP archive reader object into a writer object, to allow efficient in-place file appends to occur on an existing archive. */ /* For archives opened using mz_zip_reader_init_file, pFilename must be the archive's filename so it can be reopened for writing. If the file can't be reopened, mz_zip_reader_end() will be called. */ /* For archives opened using mz_zip_reader_init_mem, the memory block must be growable using the realloc callback (which defaults to realloc unless you've overridden it). */ /* Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's user provided m_pWrite function cannot be NULL. */ /* Note: In-place archive modification is not recommended unless you know what you're doing, because if execution stops or something goes wrong before */ /* the archive is finalized the file's central directory will be hosed. */ mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename); mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags); /* Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive. */ /* To add a directory entry, call this method with an archive name ending in a forwardslash with an empty buffer. */ /* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags); /* Like mz_zip_writer_add_mem(), except you can specify a file comment field, and optionally supply the function with already compressed data. */ /* uncomp_size/uncomp_crc32 are only used if the MZ_ZIP_FLAG_COMPRESSED_DATA flag is specified. */ mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32); mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified, const char *user_extra_data_local, mz_uint user_extra_data_local_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len); #ifndef MINIZ_NO_STDIO /* Adds the contents of a disk file to an archive. This function also records the disk file's modified time into the archive. */ /* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); /* Like mz_zip_writer_add_file(), except the file data is read from the specified FILE stream. */ mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 size_to_add, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data_local, mz_uint user_extra_data_local_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len); #endif /* Adds a file to an archive by fully cloning the data from another archive. */ /* This function fully clones the source file's compressed data (no recompression), along with its full filename, extra data (it may add or modify the zip64 local header extra data field), and the optional descriptor following the compressed data. */ mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index); /* Finalizes the archive by writing the central directory records followed by the end of central directory record. */ /* After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end(). */ /* An archive must be manually finalized by calling this function for it to be valid. */ mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); /* Finalizes a heap archive, returning a poiner to the heap block and its size. */ /* The heap block will be allocated using the mz_zip_archive's alloc/realloc callbacks. */ mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize); /* Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used. */ /* Note for the archive to be valid, it *must* have been finalized before ending (this function will not do it for you). */ mz_bool mz_zip_writer_end(mz_zip_archive *pZip); /* -------- Misc. high-level helper functions: */ /* mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) appends a memory blob to a ZIP archive. */ /* Note this is NOT a fully safe operation. If it crashes or dies in some way your archive can be left in a screwed up state (without a central directory). */ /* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ /* TODO: Perhaps add an option to leave the existing central dir in place in case the add dies? We could then truncate the file (so the old central dir would be at the end) if something goes wrong. */ mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr); /* Reads a single file from an archive into a heap block. */ /* If pComment is not NULL, only the file with the specified comment will be extracted. */ /* Returns NULL on failure. */ void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags); void *mz_zip_extract_archive_file_to_heap_v2(const char *pZip_filename, const char *pArchive_name, const char *pComment, size_t *pSize, mz_uint flags, mz_zip_error *pErr); #endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */ #ifdef __cplusplus } #endif #endif /* MINIZ_NO_ARCHIVE_APIS */ RediSearch-1.2.2/src/dep/snowball/000077500000000000000000000000001364126773500167235ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/snowball/AUTHORS000066400000000000000000000013171364126773500177750ustar00rootroot00000000000000Authors ======= Martin Porter ------------- - Designed the snowball language. - Implemented the snowball to C compiler. - Implemented the stemming algorithms in C. - Wrote the documentation. Richard Boulton --------------- - Implemented Java backend of the snowball compiler. - Developed build system. - Assisted with website maintenance. Assistance from --------------- Olivier Bornet - fixes to java packaging and build system. Andreas Jung - useful bug reports on the libstemmer library. Olly Betts - several patches, bug reports, and performance improvements. Sebastiano Vigna and Oerd Cukalla - patches for the Java stemming algorithms. Ralf Junker - fix a potential memory leak in sb_stemmer_new(). RediSearch-1.2.2/src/dep/snowball/CMakeLists.txt000066400000000000000000000002421364126773500214610ustar00rootroot00000000000000FILE(GLOB SNOWBALL_SRC "src_c/*.c" "libstemmer/libstemmer.c" "runtime/*.c") INCLUDE_DIRECTORIES(include) ADD_LIBRARY(snowball OBJECT ${SNOWBALL_SRC}) RediSearch-1.2.2/src/dep/snowball/COPYING000066400000000000000000000030241364126773500177550ustar00rootroot00000000000000Copyright (c) 2001, Dr Martin Porter Copyright (c) 2004,2005, Richard Boulton All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the Snowball project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. RediSearch-1.2.2/src/dep/snowball/Makefile000066400000000000000000000003701364126773500203630ustar00rootroot00000000000000include mkinc.mak CFLAGS+=-Iinclude all: libstemmer.o stemwords libstemmer.o: $(snowball_sources:.c=.o) $(AR) -cru $@ $^ stemwords: examples/stemwords.o libstemmer.o $(CC) -o $@ $^ clean: rm -f stemwords *.o src_c/*.o runtime/*.o libstemmer/*.o RediSearch-1.2.2/src/dep/snowball/README000066400000000000000000000117701364126773500176110ustar00rootroot00000000000000libstemmer_c ============ This document pertains to the C version of the libstemmer distribution, available for download from: http://snowballstem.org/dist/libstemmer_c.tgz Compiling the library ===================== A simple makefile is provided for Unix style systems. On such systems, it should be possible simply to run "make", and the file "libstemmer.o" and the example program "stemwords" will be generated. If this doesn't work on your system, you need to write your own build system (or call the compiler directly). The files to compile are all contained in the "libstemmer", "runtime" and "src_c" directories, and the public header file is contained in the "include" directory. The library comes in two flavours; UTF-8 only, and UTF-8 plus other character sets. To use the utf-8 only flavour, compile "libstemmer_utf8.c" instead of "libstemmer.c". For convenience "mkinc.mak" is a makefile fragment listing the source files and header files used to compile the standard version of the library. "mkinc_utf8.mak" is a comparable makefile fragment listing just the source files for the UTF-8 only version of the library. Using the library ================= The library provides a simple C API. Essentially, a new stemmer can be obtained by using "sb_stemmer_new". "sb_stemmer_stem" is then used to stem a word, "sb_stemmer_length" returns the stemmed length of the last word processed, and "sb_stemmer_delete" is used to delete a stemmer. Creating a stemmer is a relatively expensive operation - the expected usage pattern is that a new stemmer is created when needed, used to stem many words, and deleted after some time. Stemmers are re-entrant, but not threadsafe. In other words, if you wish to access the same stemmer object from multiple threads, you must ensure that all access is protected by a mutex or similar device. libstemmer does not currently incorporate any mechanism for caching the results of stemming operations. Such caching can greatly increase the performance of a stemmer under certain situations, so suitable patches will be considered for inclusion. The standard libstemmer sources contain an algorithm for each of the supported languages. The algorithm may be selected using the english name of the language, or using the 2 or 3 letter ISO 639 language codes. In addition, the traditional "Porter" stemming algorithm for english is included for backwards compatibility purposes, but we recommend use of the "English" stemmer in preference for new projects. (Some minor algorithms which are included only as curiosities in the snowball website, such as the Lovins stemmer and the Kraaij Pohlmann stemmer, are not included in the standard libstemmer sources. These are not really supported by the snowball project, but it would be possible to compile a modified libstemmer library containing these if desired.) The stemwords example ===================== The stemwords example program allows you to run any of the stemmers compiled into the libstemmer library on a sample vocabulary. For details on how to use it, run it with the "-h" command line option. Using the library in a larger system ==================================== If you are incorporating the library into the build system of a larger program, I recommend copying the unpacked tarball without modification into a subdirectory of the sources of your program. Future versions of the library are intended to keep the same structure, so this will keep the work required to move to a new version of the library to a minimum. As an additional convenience, the list of source and header files used in the library is detailed in mkinc.mak - a file which is in a suitable format for inclusion by a Makefile. By including this file in your build system, you can link the snowball system into your program with a few extra rules. Using the library in a system using GNU autotools ================================================= The libstemmer_c library can be integrated into a larger system which uses the GNU autotool framework (and in particular, automake and autoconf) as follows: 1) Unpack libstemmer_c.tgz in the top level project directory so that there is a libstemmer_c subdirectory of the top level directory of the project. 2) Add a file "Makefile.am" to the unpacked libstemmer_c folder, containing: noinst_LTLIBRARIES = libstemmer.la include $(srcdir)/mkinc.mak noinst_HEADERS = $(snowball_headers) libstemmer_la_SOURCES = $(snowball_sources) (You may also need to add other lines to this, for example, if you are using compiler options which are not compatible with compiling the libstemmer library.) 3) Add libstemmer_c to the AC_CONFIG_FILES declaration in the project's configure.ac file. 4) Add to the top level makefile the following lines (or modify existing assignments to these variables appropriately): AUTOMAKE_OPTIONS = subdir-objects AM_CPPFLAGS = -I$(top_srcdir)/libstemmer_c/include SUBDIRS=libstemmer_c _LIBADD = libstemmer_c/libstemmer.la (Where is the name of the library or executable which links against libstemmer.) RediSearch-1.2.2/src/dep/snowball/examples/000077500000000000000000000000001364126773500205415ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/snowball/examples/stemwords.c000066400000000000000000000123511364126773500227360ustar00rootroot00000000000000/* This is a simple program which uses libstemmer to provide a command * line interface for stemming using any of the algorithms provided. */ #include #include /* for malloc, free */ #include /* for memmove */ #include /* for isupper, tolower */ #include "libstemmer.h" const char * progname; static int pretty = 1; static void stem_file(struct sb_stemmer * stemmer, FILE * f_in, FILE * f_out) { #define INC 10 int lim = INC; sb_symbol * b = (sb_symbol *) malloc(lim * sizeof(sb_symbol)); while(1) { int ch = getc(f_in); if (ch == EOF) { free(b); return; } { int i = 0; int inlen = 0; while(1) { if (ch == '\n' || ch == EOF) break; if (i == lim) { sb_symbol * newb; newb = (sb_symbol *) realloc(b, (lim + INC) * sizeof(sb_symbol)); if (newb == 0) goto error; b = newb; lim = lim + INC; } /* Update count of utf-8 characters. */ if (ch < 0x80 || ch > 0xBF) inlen += 1; /* force lower case: */ if (isupper(ch)) ch = tolower(ch); b[i] = ch; i++; ch = getc(f_in); } { const sb_symbol * stemmed = sb_stemmer_stem(stemmer, b, i); if (stemmed == NULL) { fprintf(stderr, "Out of memory"); exit(1); } else { if (pretty == 1) { fwrite(b, i, 1, f_out); fputs(" -> ", f_out); } else if (pretty == 2) { fwrite(b, i, 1, f_out); if (sb_stemmer_length(stemmer) > 0) { int j; if (inlen < 30) { for (j = 30 - inlen; j > 0; j--) fputs(" ", f_out); } else { fputs("\n", f_out); for (j = 30; j > 0; j--) fputs(" ", f_out); } } } fputs((const char *)stemmed, f_out); putc('\n', f_out); } } } } error: if (b != 0) free(b); return; } /** Display the command line syntax, and then exit. * @param n The value to exit with. */ static void usage(int n) { printf("usage: %s [-l ] [-i ] [-o ] [-c ] [-p[2]] [-h]\n" "\n" "The input file consists of a list of words to be stemmed, one per\n" "line. Words should be in lower case, but (for English) A-Z letters\n" "are mapped to their a-z equivalents anyway. If omitted, stdin is\n" "used.\n" "\n" "If -c is given, the argument is the character encoding of the input\n" "and output files. If it is omitted, the UTF-8 encoding is used.\n" "\n" "If -p is given the output file consists of each word of the input\n" "file followed by \"->\" followed by its stemmed equivalent.\n" "If -p2 is given the output file is a two column layout containing\n" "the input words in the first column and the stemmed equivalents in\n" "the second column.\n" "Otherwise, the output file consists of the stemmed words, one per\n" "line.\n" "\n" "-h displays this help\n", progname); exit(n); } int main(int argc, char * argv[]) { char * in = 0; char * out = 0; FILE * f_in; FILE * f_out; struct sb_stemmer * stemmer; char * language = "english"; char * charenc = NULL; char * s; int i = 1; pretty = 0; progname = argv[0]; while(i < argc) { s = argv[i++]; if (s[0] == '-') { if (strcmp(s, "-o") == 0) { if (i >= argc) { fprintf(stderr, "%s requires an argument\n", s); exit(1); } out = argv[i++]; } else if (strcmp(s, "-i") == 0) { if (i >= argc) { fprintf(stderr, "%s requires an argument\n", s); exit(1); } in = argv[i++]; } else if (strcmp(s, "-l") == 0) { if (i >= argc) { fprintf(stderr, "%s requires an argument\n", s); exit(1); } language = argv[i++]; } else if (strcmp(s, "-c") == 0) { if (i >= argc) { fprintf(stderr, "%s requires an argument\n", s); exit(1); } charenc = argv[i++]; } else if (strcmp(s, "-p2") == 0) { pretty = 2; } else if (strcmp(s, "-p") == 0) { pretty = 1; } else if (strcmp(s, "-h") == 0) { usage(0); } else { fprintf(stderr, "option %s unknown\n", s); usage(1); } } else { fprintf(stderr, "unexpected parameter %s\n", s); usage(1); } } /* prepare the files */ f_in = (in == 0) ? stdin : fopen(in, "r"); if (f_in == 0) { fprintf(stderr, "file %s not found\n", in); exit(1); } f_out = (out == 0) ? stdout : fopen(out, "w"); if (f_out == 0) { fprintf(stderr, "file %s cannot be opened\n", out); exit(1); } /* do the stemming process: */ stemmer = sb_stemmer_new(language, charenc); if (stemmer == 0) { if (charenc == NULL) { fprintf(stderr, "language `%s' not available for stemming\n", language); exit(1); } else { fprintf(stderr, "language `%s' not available for stemming in encoding `%s'\n", language, charenc); exit(1); } } stem_file(stemmer, f_in, f_out); sb_stemmer_delete(stemmer); if (in != 0) (void) fclose(f_in); if (out != 0) (void) fclose(f_out); return 0; } RediSearch-1.2.2/src/dep/snowball/include/000077500000000000000000000000001364126773500203465ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/snowball/include/libstemmer.h000066400000000000000000000055441364126773500226720ustar00rootroot00000000000000 /* Make header file work when included from C++ */ #ifdef __cplusplus extern "C" { #endif struct sb_stemmer; typedef unsigned char sb_symbol; /* FIXME - should be able to get a version number for each stemming * algorithm (which will be incremented each time the output changes). */ /** Returns an array of the names of the available stemming algorithms. * Note that these are the canonical names - aliases (ie, other names for * the same algorithm) will not be included in the list. * The list is terminated with a null pointer. * * The list must not be modified in any way. */ const char ** sb_stemmer_list(void); /** Create a new stemmer object, using the specified algorithm, for the * specified character encoding. * * All algorithms will usually be available in UTF-8, but may also be * available in other character encodings. * * @param algorithm The algorithm name. This is either the english * name of the algorithm, or the 2 or 3 letter ISO 639 codes for the * language. Note that case is significant in this parameter - the * value should be supplied in lower case. * * @param charenc The character encoding. NULL may be passed as * this value, in which case UTF-8 encoding will be assumed. Otherwise, * the argument may be one of "UTF_8", "ISO_8859_1" (ie, Latin 1), * "CP850" (ie, MS-DOS Latin 1) or "KOI8_R" (Russian). Note that * case is significant in this parameter. * * @return NULL if the specified algorithm is not recognised, or the * algorithm is not available for the requested encoding. Otherwise, * returns a pointer to a newly created stemmer for the requested algorithm. * The returned pointer must be deleted by calling sb_stemmer_delete(). * * @note NULL will also be returned if an out of memory error occurs. */ struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc); /** Delete a stemmer object. * * This frees all resources allocated for the stemmer. After calling * this function, the supplied stemmer may no longer be used in any way. * * It is safe to pass a null pointer to this function - this will have * no effect. */ void sb_stemmer_delete(struct sb_stemmer * stemmer); /** Stem a word. * * The return value is owned by the stemmer - it must not be freed or * modified, and it will become invalid when the stemmer is called again, * or if the stemmer is freed. * * The length of the return value can be obtained using sb_stemmer_length(). * * If an out-of-memory error occurs, this will return NULL. */ const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size); /** Get the length of the result of the last stemmed word. * This should not be called before sb_stemmer_stem() has been called. */ int sb_stemmer_length(struct sb_stemmer * stemmer); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/libstemmer/000077500000000000000000000000001364126773500210665ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/snowball/libstemmer/libstemmer.c000066400000000000000000000042531364126773500234010ustar00rootroot00000000000000 #include #include #include "../include/libstemmer.h" #include "../runtime/api.h" #include "modules.h" struct sb_stemmer { struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); struct SN_env * env; }; extern const char ** sb_stemmer_list(void) { return algorithm_names; } static stemmer_encoding_t sb_getenc(const char * charenc) { struct stemmer_encoding * encoding; if (charenc == NULL) return ENC_UTF_8; for (encoding = encodings; encoding->name != 0; encoding++) { if (strcmp(encoding->name, charenc) == 0) break; } if (encoding->name == NULL) return ENC_UNKNOWN; return encoding->enc; } extern struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc) { stemmer_encoding_t enc; struct stemmer_modules * module; struct sb_stemmer * stemmer; enc = sb_getenc(charenc); if (enc == ENC_UNKNOWN) return NULL; for (module = modules; module->name != 0; module++) { if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; } if (module->name == NULL) return NULL; stemmer = (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); if (stemmer == NULL) return NULL; stemmer->create = module->create; stemmer->close = module->close; stemmer->stem = module->stem; stemmer->env = stemmer->create(); if (stemmer->env == NULL) { sb_stemmer_delete(stemmer); return NULL; } return stemmer; } void sb_stemmer_delete(struct sb_stemmer * stemmer) { if (stemmer == 0) return; if (stemmer->close == 0) return; stemmer->close(stemmer->env); stemmer->close = 0; free(stemmer); } const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) { int ret; if (SN_set_current(stemmer->env, size, (const symbol *)(word))) { stemmer->env->l = 0; return NULL; } ret = stemmer->stem(stemmer->env); if (ret < 0) return NULL; stemmer->env->p[stemmer->env->l] = 0; return (const sb_symbol *)(stemmer->env->p); } int sb_stemmer_length(struct sb_stemmer * stemmer) { return stemmer->env->l; } RediSearch-1.2.2/src/dep/snowball/libstemmer/libstemmer_c.in000066400000000000000000000042551364126773500240710ustar00rootroot00000000000000 #include #include #include "../include/libstemmer.h" #include "../runtime/api.h" #include "@MODULES_H@" struct sb_stemmer { struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); struct SN_env * env; }; extern const char ** sb_stemmer_list(void) { return algorithm_names; } static stemmer_encoding_t sb_getenc(const char * charenc) { struct stemmer_encoding * encoding; if (charenc == NULL) return ENC_UTF_8; for (encoding = encodings; encoding->name != 0; encoding++) { if (strcmp(encoding->name, charenc) == 0) break; } if (encoding->name == NULL) return ENC_UNKNOWN; return encoding->enc; } extern struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc) { stemmer_encoding_t enc; struct stemmer_modules * module; struct sb_stemmer * stemmer; enc = sb_getenc(charenc); if (enc == ENC_UNKNOWN) return NULL; for (module = modules; module->name != 0; module++) { if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; } if (module->name == NULL) return NULL; stemmer = (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); if (stemmer == NULL) return NULL; stemmer->create = module->create; stemmer->close = module->close; stemmer->stem = module->stem; stemmer->env = stemmer->create(); if (stemmer->env == NULL) { sb_stemmer_delete(stemmer); return NULL; } return stemmer; } void sb_stemmer_delete(struct sb_stemmer * stemmer) { if (stemmer == 0) return; if (stemmer->close == 0) return; stemmer->close(stemmer->env); stemmer->close = 0; free(stemmer); } const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) { int ret; if (SN_set_current(stemmer->env, size, (const symbol *)(word))) { stemmer->env->l = 0; return NULL; } ret = stemmer->stem(stemmer->env); if (ret < 0) return NULL; stemmer->env->p[stemmer->env->l] = 0; return (const sb_symbol *)(stemmer->env->p); } int sb_stemmer_length(struct sb_stemmer * stemmer) { return stemmer->env->l; } RediSearch-1.2.2/src/dep/snowball/libstemmer/libstemmer_utf8.c000066400000000000000000000042601364126773500243450ustar00rootroot00000000000000 #include #include #include "../include/libstemmer.h" #include "../runtime/api.h" #include "modules_utf8.h" struct sb_stemmer { struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); struct SN_env * env; }; extern const char ** sb_stemmer_list(void) { return algorithm_names; } static stemmer_encoding_t sb_getenc(const char * charenc) { struct stemmer_encoding * encoding; if (charenc == NULL) return ENC_UTF_8; for (encoding = encodings; encoding->name != 0; encoding++) { if (strcmp(encoding->name, charenc) == 0) break; } if (encoding->name == NULL) return ENC_UNKNOWN; return encoding->enc; } extern struct sb_stemmer * sb_stemmer_new(const char * algorithm, const char * charenc) { stemmer_encoding_t enc; struct stemmer_modules * module; struct sb_stemmer * stemmer; enc = sb_getenc(charenc); if (enc == ENC_UNKNOWN) return NULL; for (module = modules; module->name != 0; module++) { if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; } if (module->name == NULL) return NULL; stemmer = (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); if (stemmer == NULL) return NULL; stemmer->create = module->create; stemmer->close = module->close; stemmer->stem = module->stem; stemmer->env = stemmer->create(); if (stemmer->env == NULL) { sb_stemmer_delete(stemmer); return NULL; } return stemmer; } void sb_stemmer_delete(struct sb_stemmer * stemmer) { if (stemmer == 0) return; if (stemmer->close == 0) return; stemmer->close(stemmer->env); stemmer->close = 0; free(stemmer); } const sb_symbol * sb_stemmer_stem(struct sb_stemmer * stemmer, const sb_symbol * word, int size) { int ret; if (SN_set_current(stemmer->env, size, (const symbol *)(word))) { stemmer->env->l = 0; return NULL; } ret = stemmer->stem(stemmer->env); if (ret < 0) return NULL; stemmer->env->p[stemmer->env->l] = 0; return (const sb_symbol *)(stemmer->env->p); } int sb_stemmer_length(struct sb_stemmer * stemmer) { return stemmer->env->l; } RediSearch-1.2.2/src/dep/snowball/libstemmer/modules.h000066400000000000000000000322721364126773500227150ustar00rootroot00000000000000/* libstemmer/modules.h: List of stemming modules. * * This file is generated by mkmodules.pl from a list of module names. * Do not edit manually. * * Modules included by this file are: arabic, danish, dutch, english, finnish, * french, german, hungarian, italian, norwegian, porter, portuguese, * romanian, russian, spanish, swedish, tamil, turkish */ #include "../src_c/stem_UTF_8_arabic.h" #include "../src_c/stem_ISO_8859_1_danish.h" #include "../src_c/stem_UTF_8_danish.h" #include "../src_c/stem_ISO_8859_1_dutch.h" #include "../src_c/stem_UTF_8_dutch.h" #include "../src_c/stem_ISO_8859_1_english.h" #include "../src_c/stem_UTF_8_english.h" #include "../src_c/stem_ISO_8859_1_finnish.h" #include "../src_c/stem_UTF_8_finnish.h" #include "../src_c/stem_ISO_8859_1_french.h" #include "../src_c/stem_UTF_8_french.h" #include "../src_c/stem_ISO_8859_1_german.h" #include "../src_c/stem_UTF_8_german.h" #include "../src_c/stem_ISO_8859_2_hungarian.h" #include "../src_c/stem_UTF_8_hungarian.h" #include "../src_c/stem_ISO_8859_1_italian.h" #include "../src_c/stem_UTF_8_italian.h" #include "../src_c/stem_ISO_8859_1_norwegian.h" #include "../src_c/stem_UTF_8_norwegian.h" #include "../src_c/stem_ISO_8859_1_porter.h" #include "../src_c/stem_UTF_8_porter.h" #include "../src_c/stem_ISO_8859_1_portuguese.h" #include "../src_c/stem_UTF_8_portuguese.h" #include "../src_c/stem_ISO_8859_2_romanian.h" #include "../src_c/stem_UTF_8_romanian.h" #include "../src_c/stem_KOI8_R_russian.h" #include "../src_c/stem_UTF_8_russian.h" #include "../src_c/stem_ISO_8859_1_spanish.h" #include "../src_c/stem_UTF_8_spanish.h" #include "../src_c/stem_ISO_8859_1_swedish.h" #include "../src_c/stem_UTF_8_swedish.h" #include "../src_c/stem_UTF_8_tamil.h" #include "../src_c/stem_UTF_8_turkish.h" typedef enum { ENC_UNKNOWN=0, ENC_ISO_8859_1, ENC_ISO_8859_2, ENC_KOI8_R, ENC_UTF_8 } stemmer_encoding_t; struct stemmer_encoding { const char * name; stemmer_encoding_t enc; }; static struct stemmer_encoding encodings[] = { {"ISO_8859_1", ENC_ISO_8859_1}, {"ISO_8859_2", ENC_ISO_8859_2}, {"KOI8_R", ENC_KOI8_R}, {"UTF_8", ENC_UTF_8}, {0,ENC_UNKNOWN} }; struct stemmer_modules { const char * name; stemmer_encoding_t enc; struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); }; static struct stemmer_modules modules[] = { {"ar", ENC_UTF_8, arabic_UTF_8_create_env, arabic_UTF_8_close_env, arabic_UTF_8_stem}, {"ara", ENC_UTF_8, arabic_UTF_8_create_env, arabic_UTF_8_close_env, arabic_UTF_8_stem}, {"arabic", ENC_UTF_8, arabic_UTF_8_create_env, arabic_UTF_8_close_env, arabic_UTF_8_stem}, {"da", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"dan", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"danish", ENC_ISO_8859_1, danish_ISO_8859_1_create_env, danish_ISO_8859_1_close_env, danish_ISO_8859_1_stem}, {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"de", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"deu", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"dut", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"dutch", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"en", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, {"eng", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, {"english", ENC_ISO_8859_1, english_ISO_8859_1_create_env, english_ISO_8859_1_close_env, english_ISO_8859_1_stem}, {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, {"es", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"esl", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"fi", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"fin", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"finnish", ENC_ISO_8859_1, finnish_ISO_8859_1_create_env, finnish_ISO_8859_1_close_env, finnish_ISO_8859_1_stem}, {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"fr", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"fra", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"fre", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"french", ENC_ISO_8859_1, french_ISO_8859_1_create_env, french_ISO_8859_1_close_env, french_ISO_8859_1_stem}, {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"ger", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"german", ENC_ISO_8859_1, german_ISO_8859_1_create_env, german_ISO_8859_1_close_env, german_ISO_8859_1_stem}, {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"hu", ENC_ISO_8859_2, hungarian_ISO_8859_2_create_env, hungarian_ISO_8859_2_close_env, hungarian_ISO_8859_2_stem}, {"hu", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"hun", ENC_ISO_8859_2, hungarian_ISO_8859_2_create_env, hungarian_ISO_8859_2_close_env, hungarian_ISO_8859_2_stem}, {"hun", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"hungarian", ENC_ISO_8859_2, hungarian_ISO_8859_2_create_env, hungarian_ISO_8859_2_close_env, hungarian_ISO_8859_2_stem}, {"hungarian", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"it", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"ita", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"italian", ENC_ISO_8859_1, italian_ISO_8859_1_create_env, italian_ISO_8859_1_close_env, italian_ISO_8859_1_stem}, {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"nl", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"nld", ENC_ISO_8859_1, dutch_ISO_8859_1_create_env, dutch_ISO_8859_1_close_env, dutch_ISO_8859_1_stem}, {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"no", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"nor", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"norwegian", ENC_ISO_8859_1, norwegian_ISO_8859_1_create_env, norwegian_ISO_8859_1_close_env, norwegian_ISO_8859_1_stem}, {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"por", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"porter", ENC_ISO_8859_1, porter_ISO_8859_1_create_env, porter_ISO_8859_1_close_env, porter_ISO_8859_1_stem}, {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem}, {"portuguese", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"pt", ENC_ISO_8859_1, portuguese_ISO_8859_1_create_env, portuguese_ISO_8859_1_close_env, portuguese_ISO_8859_1_stem}, {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"ro", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"ro", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"romanian", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"romanian", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"ron", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"ron", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"ru", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"rum", ENC_ISO_8859_2, romanian_ISO_8859_2_create_env, romanian_ISO_8859_2_close_env, romanian_ISO_8859_2_stem}, {"rum", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"rus", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"russian", ENC_KOI8_R, russian_KOI8_R_create_env, russian_KOI8_R_close_env, russian_KOI8_R_stem}, {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"spa", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"spanish", ENC_ISO_8859_1, spanish_ISO_8859_1_create_env, spanish_ISO_8859_1_close_env, spanish_ISO_8859_1_stem}, {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"sv", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"swe", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"swedish", ENC_ISO_8859_1, swedish_ISO_8859_1_create_env, swedish_ISO_8859_1_close_env, swedish_ISO_8859_1_stem}, {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"ta", ENC_UTF_8, tamil_UTF_8_create_env, tamil_UTF_8_close_env, tamil_UTF_8_stem}, {"tam", ENC_UTF_8, tamil_UTF_8_create_env, tamil_UTF_8_close_env, tamil_UTF_8_stem}, {"tamil", ENC_UTF_8, tamil_UTF_8_create_env, tamil_UTF_8_close_env, tamil_UTF_8_stem}, {"tr", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {"tur", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {"turkish", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {0,ENC_UNKNOWN,0,0,0} }; static const char * algorithm_names[] = { "arabic", "danish", "dutch", "english", "finnish", "french", "german", "hungarian", "italian", "norwegian", "porter", "portuguese", "romanian", "russian", "spanish", "swedish", "tamil", "turkish", 0 }; RediSearch-1.2.2/src/dep/snowball/libstemmer/modules.txt000066400000000000000000000051061364126773500233010ustar00rootroot00000000000000# This file contains a list of stemmers to include in the distribution. # The format is a set of space separated lines - on each line: # First item is name of stemmer. # Second item is comma separated list of character sets. # Third item is comma separated list of names to refer to the stemmer by. # # Lines starting with a #, or blank lines, are ignored. # List all the main algorithms for each language, in UTF-8, and also with # the most commonly used encoding. arabic UTF_8 arabic,ar,ara danish UTF_8,ISO_8859_1 danish,da,dan dutch UTF_8,ISO_8859_1 dutch,nl,dut,nld english UTF_8,ISO_8859_1 english,en,eng finnish UTF_8,ISO_8859_1 finnish,fi,fin french UTF_8,ISO_8859_1 french,fr,fre,fra german UTF_8,ISO_8859_1 german,de,ger,deu hungarian UTF_8,ISO_8859_2 hungarian,hu,hun italian UTF_8,ISO_8859_1 italian,it,ita norwegian UTF_8,ISO_8859_1 norwegian,no,nor portuguese UTF_8,ISO_8859_1 portuguese,pt,por romanian UTF_8,ISO_8859_2 romanian,ro,rum,ron russian UTF_8,KOI8_R russian,ru,rus spanish UTF_8,ISO_8859_1 spanish,es,esl,spa swedish UTF_8,ISO_8859_1 swedish,sv,swe tamil UTF_8 tamil,ta,tam turkish UTF_8 turkish,tr,tur # Also include the traditional porter algorithm for english. # The porter algorithm is included in the libstemmer distribution to assist # with backwards compatibility, but for new systems the english algorithm # should be used in preference. porter UTF_8,ISO_8859_1 porter # Some other stemmers in the snowball project are not included in the standard # distribution. To compile a libstemmer with them in, add them to this list, # and regenerate the distribution. (You will need a full source checkout for # this.) They are included in the snowball website as curiosities, but are not # intended for general use, and use of them is is not fully supported. These # algorithms are: # # german2 - This is a slight modification of the german stemmer. #german2 UTF_8,ISO_8859_1 german2 # # kraaij_pohlmann - This is a different dutch stemmer. #kraaij_pohlmann UTF_8,ISO_8859_1 kraaij_pohlmann # # lovins - This is an english stemmer, but fairly outdated, and # only really applicable to a restricted type of input text # (keywords in academic publications). #lovins UTF_8,ISO_8859_1 lovins RediSearch-1.2.2/src/dep/snowball/libstemmer/modules_utf8.h000066400000000000000000000161001364126773500236530ustar00rootroot00000000000000/* libstemmer/modules_utf8.h: List of stemming modules. * * This file is generated by mkmodules.pl from a list of module names. * Do not edit manually. * * Modules included by this file are: arabic, danish, dutch, english, finnish, * french, german, hungarian, italian, norwegian, porter, portuguese, * romanian, russian, spanish, swedish, tamil, turkish */ #include "../src_c/stem_UTF_8_arabic.h" #include "../src_c/stem_UTF_8_danish.h" #include "../src_c/stem_UTF_8_dutch.h" #include "../src_c/stem_UTF_8_english.h" #include "../src_c/stem_UTF_8_finnish.h" #include "../src_c/stem_UTF_8_french.h" #include "../src_c/stem_UTF_8_german.h" #include "../src_c/stem_UTF_8_hungarian.h" #include "../src_c/stem_UTF_8_italian.h" #include "../src_c/stem_UTF_8_norwegian.h" #include "../src_c/stem_UTF_8_porter.h" #include "../src_c/stem_UTF_8_portuguese.h" #include "../src_c/stem_UTF_8_romanian.h" #include "../src_c/stem_UTF_8_russian.h" #include "../src_c/stem_UTF_8_spanish.h" #include "../src_c/stem_UTF_8_swedish.h" #include "../src_c/stem_UTF_8_tamil.h" #include "../src_c/stem_UTF_8_turkish.h" typedef enum { ENC_UNKNOWN=0, ENC_UTF_8 } stemmer_encoding_t; struct stemmer_encoding { const char * name; stemmer_encoding_t enc; }; static struct stemmer_encoding encodings[] = { {"UTF_8", ENC_UTF_8}, {0,ENC_UNKNOWN} }; struct stemmer_modules { const char * name; stemmer_encoding_t enc; struct SN_env * (*create)(void); void (*close)(struct SN_env *); int (*stem)(struct SN_env *); }; static struct stemmer_modules modules[] = { {"ar", ENC_UTF_8, arabic_UTF_8_create_env, arabic_UTF_8_close_env, arabic_UTF_8_stem}, {"ara", ENC_UTF_8, arabic_UTF_8_create_env, arabic_UTF_8_close_env, arabic_UTF_8_stem}, {"arabic", ENC_UTF_8, arabic_UTF_8_create_env, arabic_UTF_8_close_env, arabic_UTF_8_stem}, {"da", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"dan", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"danish", ENC_UTF_8, danish_UTF_8_create_env, danish_UTF_8_close_env, danish_UTF_8_stem}, {"de", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"deu", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"dut", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"dutch", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"en", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, {"eng", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, {"english", ENC_UTF_8, english_UTF_8_create_env, english_UTF_8_close_env, english_UTF_8_stem}, {"es", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"esl", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"fi", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"fin", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"finnish", ENC_UTF_8, finnish_UTF_8_create_env, finnish_UTF_8_close_env, finnish_UTF_8_stem}, {"fr", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"fra", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"fre", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"french", ENC_UTF_8, french_UTF_8_create_env, french_UTF_8_close_env, french_UTF_8_stem}, {"ger", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"german", ENC_UTF_8, german_UTF_8_create_env, german_UTF_8_close_env, german_UTF_8_stem}, {"hu", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"hun", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"hungarian", ENC_UTF_8, hungarian_UTF_8_create_env, hungarian_UTF_8_close_env, hungarian_UTF_8_stem}, {"it", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"ita", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"italian", ENC_UTF_8, italian_UTF_8_create_env, italian_UTF_8_close_env, italian_UTF_8_stem}, {"nl", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"nld", ENC_UTF_8, dutch_UTF_8_create_env, dutch_UTF_8_close_env, dutch_UTF_8_stem}, {"no", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"nor", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"norwegian", ENC_UTF_8, norwegian_UTF_8_create_env, norwegian_UTF_8_close_env, norwegian_UTF_8_stem}, {"por", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"porter", ENC_UTF_8, porter_UTF_8_create_env, porter_UTF_8_close_env, porter_UTF_8_stem}, {"portuguese", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"pt", ENC_UTF_8, portuguese_UTF_8_create_env, portuguese_UTF_8_close_env, portuguese_UTF_8_stem}, {"ro", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"romanian", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"ron", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"ru", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"rum", ENC_UTF_8, romanian_UTF_8_create_env, romanian_UTF_8_close_env, romanian_UTF_8_stem}, {"rus", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"russian", ENC_UTF_8, russian_UTF_8_create_env, russian_UTF_8_close_env, russian_UTF_8_stem}, {"spa", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"spanish", ENC_UTF_8, spanish_UTF_8_create_env, spanish_UTF_8_close_env, spanish_UTF_8_stem}, {"sv", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"swe", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"swedish", ENC_UTF_8, swedish_UTF_8_create_env, swedish_UTF_8_close_env, swedish_UTF_8_stem}, {"ta", ENC_UTF_8, tamil_UTF_8_create_env, tamil_UTF_8_close_env, tamil_UTF_8_stem}, {"tam", ENC_UTF_8, tamil_UTF_8_create_env, tamil_UTF_8_close_env, tamil_UTF_8_stem}, {"tamil", ENC_UTF_8, tamil_UTF_8_create_env, tamil_UTF_8_close_env, tamil_UTF_8_stem}, {"tr", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {"tur", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {"turkish", ENC_UTF_8, turkish_UTF_8_create_env, turkish_UTF_8_close_env, turkish_UTF_8_stem}, {0,ENC_UNKNOWN,0,0,0} }; static const char * algorithm_names[] = { "arabic", "danish", "dutch", "english", "finnish", "french", "german", "hungarian", "italian", "norwegian", "porter", "portuguese", "romanian", "russian", "spanish", "swedish", "tamil", "turkish", 0 }; RediSearch-1.2.2/src/dep/snowball/libstemmer/modules_utf8.txt000066400000000000000000000050251364126773500242470ustar00rootroot00000000000000# This file contains a list of stemmers to include in the distribution. # The format is a set of space separated lines - on each line: # First item is name of stemmer. # Second item is comma separated list of character sets. # Third item is comma separated list of names to refer to the stemmer by. # # Lines starting with a #, or blank lines, are ignored. # List all the main algorithms for each language, in UTF-8. arabic UTF_8 arabic,ar,ara danish UTF_8 danish,da,dan dutch UTF_8 dutch,nl,dut,nld english UTF_8 english,en,eng finnish UTF_8 finnish,fi,fin french UTF_8 french,fr,fre,fra german UTF_8 german,de,ger,deu hungarian UTF_8 hungarian,hu,hun italian UTF_8 italian,it,ita norwegian UTF_8 norwegian,no,nor portuguese UTF_8 portuguese,pt,por romanian UTF_8 romanian,ro,rum,ron russian UTF_8 russian,ru,rus spanish UTF_8 spanish,es,esl,spa swedish UTF_8 swedish,sv,swe tamil UTF_8 tamil,ta,tam turkish UTF_8 turkish,tr,tur # Also include the traditional porter algorithm for english. # The porter algorithm is included in the libstemmer distribution to assist # with backwards compatibility, but for new systems the english algorithm # should be used in preference. porter UTF_8 porter # Some other stemmers in the snowball project are not included in the standard # distribution. To compile a libstemmer with them in, add them to this list, # and regenerate the distribution. (You will need a full source checkout for # this.) They are included in the snowball website as curiosities, but are not # intended for general use, and use of them is is not fully supported. These # algorithms are: # # german2 - This is a slight modification of the german stemmer. #german2 UTF_8 german2 # # kraaij_pohlmann - This is a different dutch stemmer. #kraaij_pohlmann UTF_8 kraaij_pohlmann # # lovins - This is an english stemmer, but fairly outdated, and # only really applicable to a restricted type of input text # (keywords in academic publications). #lovins UTF_8 lovins RediSearch-1.2.2/src/dep/snowball/mkinc.mak000066400000000000000000000052741364126773500205260ustar00rootroot00000000000000# libstemmer/mkinc.mak: List of stemming module source files # # This file is generated by mkmodules.pl from a list of module names. # Do not edit manually. # # Modules included by this file are: arabic, danish, dutch, english, finnish, # french, german, hungarian, italian, norwegian, porter, portuguese, # romanian, russian, spanish, swedish, tamil, turkish snowball_sources= \ src_c/stem_UTF_8_arabic.c \ src_c/stem_ISO_8859_1_danish.c \ src_c/stem_UTF_8_danish.c \ src_c/stem_ISO_8859_1_dutch.c \ src_c/stem_UTF_8_dutch.c \ src_c/stem_ISO_8859_1_english.c \ src_c/stem_UTF_8_english.c \ src_c/stem_ISO_8859_1_finnish.c \ src_c/stem_UTF_8_finnish.c \ src_c/stem_ISO_8859_1_french.c \ src_c/stem_UTF_8_french.c \ src_c/stem_ISO_8859_1_german.c \ src_c/stem_UTF_8_german.c \ src_c/stem_ISO_8859_2_hungarian.c \ src_c/stem_UTF_8_hungarian.c \ src_c/stem_ISO_8859_1_italian.c \ src_c/stem_UTF_8_italian.c \ src_c/stem_ISO_8859_1_norwegian.c \ src_c/stem_UTF_8_norwegian.c \ src_c/stem_ISO_8859_1_porter.c \ src_c/stem_UTF_8_porter.c \ src_c/stem_ISO_8859_1_portuguese.c \ src_c/stem_UTF_8_portuguese.c \ src_c/stem_ISO_8859_2_romanian.c \ src_c/stem_UTF_8_romanian.c \ src_c/stem_KOI8_R_russian.c \ src_c/stem_UTF_8_russian.c \ src_c/stem_ISO_8859_1_spanish.c \ src_c/stem_UTF_8_spanish.c \ src_c/stem_ISO_8859_1_swedish.c \ src_c/stem_UTF_8_swedish.c \ src_c/stem_UTF_8_tamil.c \ src_c/stem_UTF_8_turkish.c \ runtime/api.c \ runtime/utilities.c \ libstemmer/libstemmer.c snowball_headers= \ src_c/stem_UTF_8_arabic.h \ src_c/stem_ISO_8859_1_danish.h \ src_c/stem_UTF_8_danish.h \ src_c/stem_ISO_8859_1_dutch.h \ src_c/stem_UTF_8_dutch.h \ src_c/stem_ISO_8859_1_english.h \ src_c/stem_UTF_8_english.h \ src_c/stem_ISO_8859_1_finnish.h \ src_c/stem_UTF_8_finnish.h \ src_c/stem_ISO_8859_1_french.h \ src_c/stem_UTF_8_french.h \ src_c/stem_ISO_8859_1_german.h \ src_c/stem_UTF_8_german.h \ src_c/stem_ISO_8859_2_hungarian.h \ src_c/stem_UTF_8_hungarian.h \ src_c/stem_ISO_8859_1_italian.h \ src_c/stem_UTF_8_italian.h \ src_c/stem_ISO_8859_1_norwegian.h \ src_c/stem_UTF_8_norwegian.h \ src_c/stem_ISO_8859_1_porter.h \ src_c/stem_UTF_8_porter.h \ src_c/stem_ISO_8859_1_portuguese.h \ src_c/stem_UTF_8_portuguese.h \ src_c/stem_ISO_8859_2_romanian.h \ src_c/stem_UTF_8_romanian.h \ src_c/stem_KOI8_R_russian.h \ src_c/stem_UTF_8_russian.h \ src_c/stem_ISO_8859_1_spanish.h \ src_c/stem_UTF_8_spanish.h \ src_c/stem_ISO_8859_1_swedish.h \ src_c/stem_UTF_8_swedish.h \ src_c/stem_UTF_8_tamil.h \ src_c/stem_UTF_8_turkish.h \ include/libstemmer.h \ libstemmer/modules.h \ runtime/api.h \ runtime/header.h RediSearch-1.2.2/src/dep/snowball/mkinc_utf8.mak000066400000000000000000000032271364126773500214700ustar00rootroot00000000000000# libstemmer/mkinc_utf8.mak: List of stemming module source files # # This file is generated by mkmodules.pl from a list of module names. # Do not edit manually. # # Modules included by this file are: arabic, danish, dutch, english, finnish, # french, german, hungarian, italian, norwegian, porter, portuguese, # romanian, russian, spanish, swedish, tamil, turkish snowball_sources= \ src_c/stem_UTF_8_arabic.c \ src_c/stem_UTF_8_danish.c \ src_c/stem_UTF_8_dutch.c \ src_c/stem_UTF_8_english.c \ src_c/stem_UTF_8_finnish.c \ src_c/stem_UTF_8_french.c \ src_c/stem_UTF_8_german.c \ src_c/stem_UTF_8_hungarian.c \ src_c/stem_UTF_8_italian.c \ src_c/stem_UTF_8_norwegian.c \ src_c/stem_UTF_8_porter.c \ src_c/stem_UTF_8_portuguese.c \ src_c/stem_UTF_8_romanian.c \ src_c/stem_UTF_8_russian.c \ src_c/stem_UTF_8_spanish.c \ src_c/stem_UTF_8_swedish.c \ src_c/stem_UTF_8_tamil.c \ src_c/stem_UTF_8_turkish.c \ runtime/api.c \ runtime/utilities.c \ libstemmer/libstemmer_utf8.c snowball_headers= \ src_c/stem_UTF_8_arabic.h \ src_c/stem_UTF_8_danish.h \ src_c/stem_UTF_8_dutch.h \ src_c/stem_UTF_8_english.h \ src_c/stem_UTF_8_finnish.h \ src_c/stem_UTF_8_french.h \ src_c/stem_UTF_8_german.h \ src_c/stem_UTF_8_hungarian.h \ src_c/stem_UTF_8_italian.h \ src_c/stem_UTF_8_norwegian.h \ src_c/stem_UTF_8_porter.h \ src_c/stem_UTF_8_portuguese.h \ src_c/stem_UTF_8_romanian.h \ src_c/stem_UTF_8_russian.h \ src_c/stem_UTF_8_spanish.h \ src_c/stem_UTF_8_swedish.h \ src_c/stem_UTF_8_tamil.h \ src_c/stem_UTF_8_turkish.h \ include/libstemmer.h \ libstemmer/modules_utf8.h \ runtime/api.h \ runtime/header.h RediSearch-1.2.2/src/dep/snowball/runtime/000077500000000000000000000000001364126773500204065ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/snowball/runtime/api.c000066400000000000000000000025501364126773500213250ustar00rootroot00000000000000 #include /* for calloc, free */ #include "header.h" extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) { struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); if (z == NULL) return NULL; z->p = create_s(); if (z->p == NULL) goto error; if (S_size) { int i; z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); if (z->S == NULL) goto error; for (i = 0; i < S_size; i++) { z->S[i] = create_s(); if (z->S[i] == NULL) goto error; } } if (I_size) { z->I = (int *) calloc(I_size, sizeof(int)); if (z->I == NULL) goto error; } if (B_size) { z->B = (unsigned char *) calloc(B_size, sizeof(unsigned char)); if (z->B == NULL) goto error; } return z; error: SN_close_env(z, S_size); return NULL; } extern void SN_close_env(struct SN_env * z, int S_size) { if (z == NULL) return; if (S_size) { int i; for (i = 0; i < S_size; i++) { lose_s(z->S[i]); } free(z->S); } free(z->I); free(z->B); if (z->p) lose_s(z->p); free(z); } extern int SN_set_current(struct SN_env * z, int size, const symbol * s) { int err = replace_s(z, 0, z->l, size, s, NULL); z->c = 0; return err; } RediSearch-1.2.2/src/dep/snowball/runtime/api.h000066400000000000000000000013731364126773500213340ustar00rootroot00000000000000 typedef unsigned char symbol; /* Or replace 'char' above with 'short' for 16 bit characters. More precisely, replace 'char' with whatever type guarantees the character width you need. Note however that sizeof(symbol) should divide HEAD, defined in header.h as 2*sizeof(int), without remainder, otherwise there is an alignment problem. In the unlikely event of a problem here, consult Martin Porter. */ struct SN_env { symbol * p; int c; int l; int lb; int bra; int ket; symbol * * S; int * I; unsigned char * B; }; extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size); extern void SN_close_env(struct SN_env * z, int S_size); extern int SN_set_current(struct SN_env * z, int size, const symbol * s); RediSearch-1.2.2/src/dep/snowball/runtime/header.h000066400000000000000000000047371364126773500220220ustar00rootroot00000000000000 #include #include "api.h" #define MAXINT INT_MAX #define MININT INT_MIN #define HEAD 2*sizeof(int) #define SIZE(p) ((int *)(p))[-1] #define SET_SIZE(p, n) ((int *)(p))[-1] = n #define CAPACITY(p) ((int *)(p))[-2] struct among { int s_size; /* number of chars in string */ const symbol * s; /* search string */ int substring_i;/* index to longest matching substring */ int result; /* result of the lookup */ int (* function)(struct SN_env *); }; extern symbol * create_s(void); extern void lose_s(symbol * p); extern int skip_utf8(const symbol * p, int c, int lb, int l, int n); extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat); extern int eq_s(struct SN_env * z, int s_size, const symbol * s); extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s); extern int eq_v(struct SN_env * z, const symbol * p); extern int eq_v_b(struct SN_env * z, const symbol * p); extern int find_among(struct SN_env * z, const struct among * v, int v_size); extern int find_among_b(struct SN_env * z, const struct among * v, int v_size); extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjustment); extern int slice_from_s(struct SN_env * z, int s_size, const symbol * s); extern int slice_from_v(struct SN_env * z, const symbol * p); extern int slice_del(struct SN_env * z); extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s); extern int insert_v(struct SN_env * z, int bra, int ket, const symbol * p); extern symbol * slice_to(struct SN_env * z, symbol * p); extern symbol * assign_to(struct SN_env * z, symbol * p); extern int len_utf8(const symbol * p); extern void debug(struct SN_env * z, int number, int line_count); RediSearch-1.2.2/src/dep/snowball/runtime/utilities.c000066400000000000000000000315461364126773500225760ustar00rootroot00000000000000 #include #include #include #include "header.h" #define CREATE_SIZE 1 extern symbol * create_s(void) { symbol * p; void * mem = malloc(HEAD + (CREATE_SIZE + 1) * sizeof(symbol)); if (mem == NULL) return NULL; p = (symbol *) (HEAD + (char *) mem); CAPACITY(p) = CREATE_SIZE; SET_SIZE(p, 0); return p; } extern void lose_s(symbol * p) { if (p == NULL) return; free((char *) p - HEAD); } /* new_p = skip_utf8(p, c, lb, l, n); skips n characters forwards from p + c if n +ve, or n characters backwards from p + c - 1 if n -ve. new_p is the new position, or 0 on failure. -- used to implement hop and next in the utf8 case. */ extern int skip_utf8(const symbol * p, int c, int lb, int l, int n) { int b; if (n >= 0) { for (; n > 0; n--) { if (c >= l) return -1; b = p[c++]; if (b >= 0xC0) { /* 1100 0000 */ while (c < l) { b = p[c]; if (b >= 0xC0 || b < 0x80) break; /* break unless b is 10------ */ c++; } } } } else { for (; n < 0; n++) { if (c <= lb) return -1; b = p[--c]; if (b >= 0x80) { /* 1000 0000 */ while (c > lb) { b = p[c]; if (b >= 0xC0) break; /* 1100 0000 */ c--; } } } } return c; } /* Code for character groupings: utf8 cases */ static int get_utf8(const symbol * p, int c, int l, int * slot) { int b0, b1; if (c >= l) return 0; b0 = p[c++]; if (b0 < 0xC0 || c == l) { /* 1100 0000 */ * slot = b0; return 1; } b1 = p[c++]; if (b0 < 0xE0 || c == l) { /* 1110 0000 */ * slot = (b0 & 0x1F) << 6 | (b1 & 0x3F); return 2; } * slot = (b0 & 0xF) << 12 | (b1 & 0x3F) << 6 | (p[c] & 0x3F); return 3; } static int get_b_utf8(const symbol * p, int c, int lb, int * slot) { int b0, b1; if (c <= lb) return 0; b0 = p[--c]; if (b0 < 0x80 || c == lb) { /* 1000 0000 */ * slot = b0; return 1; } b1 = p[--c]; if (b1 >= 0xC0 || c == lb) { /* 1100 0000 */ * slot = (b1 & 0x1F) << 6 | (b0 & 0x3F); return 2; } * slot = (p[c] & 0xF) << 12 | (b1 & 0x3F) << 6 | (b0 & 0x3F); return 3; } extern int in_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_utf8(z->p, z->c, z->l, & ch); if (!w) return -1; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return w; z->c += w; } while (repeat); return 0; } extern int in_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_b_utf8(z->p, z->c, z->lb, & ch); if (!w) return -1; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return w; z->c -= w; } while (repeat); return 0; } extern int out_grouping_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_utf8(z->p, z->c, z->l, & ch); if (!w) return -1; if (!(ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)) return w; z->c += w; } while (repeat); return 0; } extern int out_grouping_b_U(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; int w = get_b_utf8(z->p, z->c, z->lb, & ch); if (!w) return -1; if (!(ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)) return w; z->c -= w; } while (repeat); return 0; } /* Code for character groupings: non-utf8 cases */ extern int in_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c >= z->l) return -1; ch = z->p[z->c]; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 1; z->c++; } while (repeat); return 0; } extern int in_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c <= z->lb) return -1; ch = z->p[z->c - 1]; if (ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0) return 1; z->c--; } while (repeat); return 0; } extern int out_grouping(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c >= z->l) return -1; ch = z->p[z->c]; if (!(ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)) return 1; z->c++; } while (repeat); return 0; } extern int out_grouping_b(struct SN_env * z, const unsigned char * s, int min, int max, int repeat) { do { int ch; if (z->c <= z->lb) return -1; ch = z->p[z->c - 1]; if (!(ch > max || (ch -= min) < 0 || (s[ch >> 3] & (0X1 << (ch & 0X7))) == 0)) return 1; z->c--; } while (repeat); return 0; } extern int eq_s(struct SN_env * z, int s_size, const symbol * s) { if (z->l - z->c < s_size || memcmp(z->p + z->c, s, s_size * sizeof(symbol)) != 0) return 0; z->c += s_size; return 1; } extern int eq_s_b(struct SN_env * z, int s_size, const symbol * s) { if (z->c - z->lb < s_size || memcmp(z->p + z->c - s_size, s, s_size * sizeof(symbol)) != 0) return 0; z->c -= s_size; return 1; } extern int eq_v(struct SN_env * z, const symbol * p) { return eq_s(z, SIZE(p), p); } extern int eq_v_b(struct SN_env * z, const symbol * p) { return eq_s_b(z, SIZE(p), p); } extern int find_among(struct SN_env * z, const struct among * v, int v_size) { int i = 0; int j = v_size; int c = z->c; int l = z->l; symbol * q = z->p + c; const struct among * w; int common_i = 0; int common_j = 0; int first_key_inspected = 0; while(1) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; /* smaller */ w = v + k; { int i2; for (i2 = common; i2 < w->s_size; i2++) { if (c + common == l) { diff = -1; break; } diff = q[common] - w->s[i2]; if (diff != 0) break; common++; } } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) break; /* v->s has been inspected */ if (j == i) break; /* only one item in v */ /* - but now we need to go round once more to get v->s inspected. This looks messy, but is actually the optimal approach. */ if (first_key_inspected) break; first_key_inspected = 1; } } while(1) { w = v + i; if (common_i >= w->s_size) { z->c = c + w->s_size; if (w->function == 0) return w->result; { int res = w->function(z); z->c = c + w->s_size; if (res) return w->result; } } i = w->substring_i; if (i < 0) return 0; } } /* find_among_b is for backwards processing. Same comments apply */ extern int find_among_b(struct SN_env * z, const struct among * v, int v_size) { int i = 0; int j = v_size; int c = z->c; int lb = z->lb; symbol * q = z->p + c - 1; const struct among * w; int common_i = 0; int common_j = 0; int first_key_inspected = 0; while(1) { int k = i + ((j - i) >> 1); int diff = 0; int common = common_i < common_j ? common_i : common_j; w = v + k; { int i2; for (i2 = w->s_size - 1 - common; i2 >= 0; i2--) { if (c - common == lb) { diff = -1; break; } diff = q[- common] - w->s[i2]; if (diff != 0) break; common++; } } if (diff < 0) { j = k; common_j = common; } else { i = k; common_i = common; } if (j - i <= 1) { if (i > 0) break; if (j == i) break; if (first_key_inspected) break; first_key_inspected = 1; } } while(1) { w = v + i; if (common_i >= w->s_size) { z->c = c - w->s_size; if (w->function == 0) return w->result; { int res = w->function(z); z->c = c - w->s_size; if (res) return w->result; } } i = w->substring_i; if (i < 0) return 0; } } /* Increase the size of the buffer pointed to by p to at least n symbols. * If insufficient memory, returns NULL and frees the old buffer. */ static symbol * increase_size(symbol * p, int n) { symbol * q; int new_size = n + 20; void * mem = realloc((char *) p - HEAD, HEAD + (new_size + 1) * sizeof(symbol)); if (mem == NULL) { lose_s(p); return NULL; } q = (symbol *) (HEAD + (char *)mem); CAPACITY(q) = new_size; return q; } /* to replace symbols between c_bra and c_ket in z->p by the s_size symbols at s. Returns 0 on success, -1 on error. Also, frees z->p (and sets it to NULL) on error. */ extern int replace_s(struct SN_env * z, int c_bra, int c_ket, int s_size, const symbol * s, int * adjptr) { int adjustment; int len; if (z->p == NULL) { z->p = create_s(); if (z->p == NULL) return -1; } adjustment = s_size - (c_ket - c_bra); len = SIZE(z->p); if (adjustment != 0) { if (adjustment + len > CAPACITY(z->p)) { z->p = increase_size(z->p, adjustment + len); if (z->p == NULL) return -1; } memmove(z->p + c_ket + adjustment, z->p + c_ket, (len - c_ket) * sizeof(symbol)); SET_SIZE(z->p, adjustment + len); z->l += adjustment; if (z->c >= c_ket) z->c += adjustment; else if (z->c > c_bra) z->c = c_bra; } if (s_size) memmove(z->p + c_bra, s, s_size * sizeof(symbol)); if (adjptr != NULL) *adjptr = adjustment; return 0; } static int slice_check(struct SN_env * z) { if (z->bra < 0 || z->bra > z->ket || z->ket > z->l || z->p == NULL || z->l > SIZE(z->p)) /* this line could be removed */ { #if 0 fprintf(stderr, "faulty slice operation:\n"); debug(z, -1, 0); #endif return -1; } return 0; } extern int slice_from_s(struct SN_env * z, int s_size, const symbol * s) { if (slice_check(z)) return -1; return replace_s(z, z->bra, z->ket, s_size, s, NULL); } extern int slice_from_v(struct SN_env * z, const symbol * p) { return slice_from_s(z, SIZE(p), p); } extern int slice_del(struct SN_env * z) { return slice_from_s(z, 0, 0); } extern int insert_s(struct SN_env * z, int bra, int ket, int s_size, const symbol * s) { int adjustment; if (replace_s(z, bra, ket, s_size, s, &adjustment)) return -1; if (bra <= z->bra) z->bra += adjustment; if (bra <= z->ket) z->ket += adjustment; return 0; } extern int insert_v(struct SN_env * z, int bra, int ket, const symbol * p) { int adjustment; if (replace_s(z, bra, ket, SIZE(p), p, &adjustment)) return -1; if (bra <= z->bra) z->bra += adjustment; if (bra <= z->ket) z->ket += adjustment; return 0; } extern symbol * slice_to(struct SN_env * z, symbol * p) { if (slice_check(z)) { lose_s(p); return NULL; } { int len = z->ket - z->bra; if (CAPACITY(p) < len) { p = increase_size(p, len); if (p == NULL) return NULL; } memmove(p, z->p + z->bra, len * sizeof(symbol)); SET_SIZE(p, len); } return p; } extern symbol * assign_to(struct SN_env * z, symbol * p) { int len = z->l; if (CAPACITY(p) < len) { p = increase_size(p, len); if (p == NULL) return NULL; } memmove(p, z->p, len * sizeof(symbol)); SET_SIZE(p, len); return p; } extern int len_utf8(const symbol * p) { int size = SIZE(p); int len = 0; while (size--) { symbol b = *p++; if (b >= 0xC0 || b < 0x80) ++len; } return len; } #if 0 extern void debug(struct SN_env * z, int number, int line_count) { int i; int limit = SIZE(z->p); /*if (number >= 0) printf("%3d (line %4d): '", number, line_count);*/ if (number >= 0) printf("%3d (line %4d): [%d]'", number, line_count,limit); for (i = 0; i <= limit; i++) { if (z->lb == i) printf("{"); if (z->bra == i) printf("["); if (z->c == i) printf("|"); if (z->ket == i) printf("]"); if (z->l == i) printf("}"); if (i < limit) { int ch = z->p[i]; if (ch == 0) ch = '#'; printf("%c", ch); } } printf("'\n"); } #endif RediSearch-1.2.2/src/dep/snowball/src_c/000077500000000000000000000000001364126773500200145ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_danish.c000066400000000000000000000272611364126773500241150ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int danish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_undouble(struct SN_env * z); static int r_other_suffix(struct SN_env * z); static int r_consonant_pair(struct SN_env * z); static int r_main_suffix(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * danish_ISO_8859_1_create_env(void); extern void danish_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[3] = { 'h', 'e', 'd' }; static const symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; static const symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; static const symbol s_0_3[1] = { 'e' }; static const symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; static const symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; static const symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; static const symbol s_0_7[3] = { 'e', 'n', 'e' }; static const symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; static const symbol s_0_9[3] = { 'e', 'r', 'e' }; static const symbol s_0_10[2] = { 'e', 'n' }; static const symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; static const symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; static const symbol s_0_13[2] = { 'e', 'r' }; static const symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; static const symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; static const symbol s_0_16[1] = { 's' }; static const symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; static const symbol s_0_18[2] = { 'e', 's' }; static const symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; static const symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; static const symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; static const symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; static const symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; static const symbol s_0_24[3] = { 'e', 'n', 's' }; static const symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; static const symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; static const symbol s_0_27[3] = { 'e', 'r', 's' }; static const symbol s_0_28[3] = { 'e', 't', 's' }; static const symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; static const symbol s_0_30[2] = { 'e', 't' }; static const symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; static const struct among a_0[32] = { /* 0 */ { 3, s_0_0, -1, 1, 0}, /* 1 */ { 5, s_0_1, 0, 1, 0}, /* 2 */ { 4, s_0_2, -1, 1, 0}, /* 3 */ { 1, s_0_3, -1, 1, 0}, /* 4 */ { 5, s_0_4, 3, 1, 0}, /* 5 */ { 4, s_0_5, 3, 1, 0}, /* 6 */ { 6, s_0_6, 5, 1, 0}, /* 7 */ { 3, s_0_7, 3, 1, 0}, /* 8 */ { 4, s_0_8, 3, 1, 0}, /* 9 */ { 3, s_0_9, 3, 1, 0}, /* 10 */ { 2, s_0_10, -1, 1, 0}, /* 11 */ { 5, s_0_11, 10, 1, 0}, /* 12 */ { 4, s_0_12, 10, 1, 0}, /* 13 */ { 2, s_0_13, -1, 1, 0}, /* 14 */ { 5, s_0_14, 13, 1, 0}, /* 15 */ { 4, s_0_15, 13, 1, 0}, /* 16 */ { 1, s_0_16, -1, 2, 0}, /* 17 */ { 4, s_0_17, 16, 1, 0}, /* 18 */ { 2, s_0_18, 16, 1, 0}, /* 19 */ { 5, s_0_19, 18, 1, 0}, /* 20 */ { 7, s_0_20, 19, 1, 0}, /* 21 */ { 4, s_0_21, 18, 1, 0}, /* 22 */ { 5, s_0_22, 18, 1, 0}, /* 23 */ { 4, s_0_23, 18, 1, 0}, /* 24 */ { 3, s_0_24, 16, 1, 0}, /* 25 */ { 6, s_0_25, 24, 1, 0}, /* 26 */ { 5, s_0_26, 24, 1, 0}, /* 27 */ { 3, s_0_27, 16, 1, 0}, /* 28 */ { 3, s_0_28, 16, 1, 0}, /* 29 */ { 5, s_0_29, 28, 1, 0}, /* 30 */ { 2, s_0_30, -1, 1, 0}, /* 31 */ { 4, s_0_31, 30, 1, 0} }; static const symbol s_1_0[2] = { 'g', 'd' }; static const symbol s_1_1[2] = { 'd', 't' }; static const symbol s_1_2[2] = { 'g', 't' }; static const symbol s_1_3[2] = { 'k', 't' }; static const struct among a_1[4] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0}, /* 2 */ { 2, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0} }; static const symbol s_2_0[2] = { 'i', 'g' }; static const symbol s_2_1[3] = { 'l', 'i', 'g' }; static const symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; static const symbol s_2_3[3] = { 'e', 'l', 's' }; static const symbol s_2_4[4] = { 'l', 0xF8, 's', 't' }; static const struct among a_2[5] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 4, s_2_2, 1, 1, 0}, /* 3 */ { 3, s_2_3, -1, 1, 0}, /* 4 */ { 4, s_2_4, -1, 2, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; static const unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; static const symbol s_0[] = { 's', 't' }; static const symbol s_1[] = { 'i', 'g' }; static const symbol s_2[] = { 'l', 0xF8, 's' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 31 */ { int c_test1 = z->c; /* test, line 33 */ { int ret = z->c + 3; /* hop, line 33 */ if (0 > ret || ret > z->l) return 0; z->c = ret; } z->I[1] = z->c; /* setmark x, line 33 */ z->c = c_test1; } if (out_grouping(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 34 */ { /* gopast */ /* non v, line 34 */ int ret = in_grouping(z, g_v, 97, 248, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 34 */ /* try, line 35 */ if (!(z->I[0] < z->I[1])) goto lab0; /* $p1 < , line 35 */ z->I[0] = z->I[1]; /* $p1 = , line 35 */ lab0: return 1; } static int r_main_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 41 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 41 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 41 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851440 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 41 */ among_var = find_among_b(z, a_0, 32); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 41 */ z->lb = mlimit1; } switch (among_var) { /* among, line 42 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 48 */ if (ret < 0) return ret; } break; case 2: if (in_grouping_b(z, g_s_ending, 97, 229, 0)) return 0; /* grouping s_ending, line 50 */ { int ret = slice_del(z); /* delete, line 50 */ if (ret < 0) return ret; } break; } return 1; } static int r_consonant_pair(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 55 */ { int m2 = z->l - z->c; (void)m2; /* setlimit, line 56 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 56 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; z->ket = z->c; /* [, line 56 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 116)) { z->lb = mlimit2; return 0; } /* substring, line 56 */ if (!(find_among_b(z, a_1, 4))) { z->lb = mlimit2; return 0; } z->bra = z->c; /* ], line 56 */ z->lb = mlimit2; } z->c = z->l - m_test1; } if (z->c <= z->lb) return 0; z->c--; /* next, line 62 */ z->bra = z->c; /* ], line 62 */ { int ret = slice_del(z); /* delete, line 62 */ if (ret < 0) return ret; } return 1; } static int r_other_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* do, line 66 */ z->ket = z->c; /* [, line 66 */ if (!(eq_s_b(z, 2, s_0))) goto lab0; /* literal, line 66 */ z->bra = z->c; /* ], line 66 */ if (!(eq_s_b(z, 2, s_1))) goto lab0; /* literal, line 66 */ { int ret = slice_del(z); /* delete, line 66 */ if (ret < 0) return ret; } lab0: z->c = z->l - m1; } { int m2 = z->l - z->c; (void)m2; /* setlimit, line 67 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 67 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; z->ket = z->c; /* [, line 67 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit2; return 0; } /* substring, line 67 */ among_var = find_among_b(z, a_2, 5); if (!(among_var)) { z->lb = mlimit2; return 0; } z->bra = z->c; /* ], line 67 */ z->lb = mlimit2; } switch (among_var) { /* among, line 68 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 70 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* do, line 70 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 70 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m3; } break; case 2: { int ret = slice_from_s(z, 3, s_2); /* <-, line 72 */ if (ret < 0) return ret; } break; } return 1; } static int r_undouble(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 76 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 76 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 76 */ if (out_grouping_b(z, g_v, 97, 248, 0)) { z->lb = mlimit1; return 0; } /* non v, line 76 */ z->bra = z->c; /* ], line 76 */ z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ if (z->S[0] == 0) return -1; /* -> ch, line 76 */ z->lb = mlimit1; } if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ { int ret = slice_del(z); /* delete, line 78 */ if (ret < 0) return ret; } return 1; } extern int danish_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 84 */ { int ret = r_mark_regions(z); /* call mark_regions, line 84 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 85 */ { int m2 = z->l - z->c; (void)m2; /* do, line 86 */ { int ret = r_main_suffix(z); /* call main_suffix, line 86 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 87 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 87 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 88 */ { int ret = r_other_suffix(z); /* call other_suffix, line 88 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 89 */ { int ret = r_undouble(z); /* call undouble, line 89 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = z->l - m5; } z->c = z->lb; return 1; } extern struct SN_env * danish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 0); } extern void danish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 1); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_danish.h000066400000000000000000000005421364126773500241130ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * danish_ISO_8859_1_create_env(void); extern void danish_ISO_8859_1_close_env(struct SN_env * z); extern int danish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_dutch.c000066400000000000000000000522361364126773500237560ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int dutch_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_standard_suffix(struct SN_env * z); static int r_undouble(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_en_ending(struct SN_env * z); static int r_e_ending(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * dutch_ISO_8859_1_create_env(void); extern void dutch_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 0xE1 }; static const symbol s_0_2[1] = { 0xE4 }; static const symbol s_0_3[1] = { 0xE9 }; static const symbol s_0_4[1] = { 0xEB }; static const symbol s_0_5[1] = { 0xED }; static const symbol s_0_6[1] = { 0xEF }; static const symbol s_0_7[1] = { 0xF3 }; static const symbol s_0_8[1] = { 0xF6 }; static const symbol s_0_9[1] = { 0xFA }; static const symbol s_0_10[1] = { 0xFC }; static const struct among a_0[11] = { /* 0 */ { 0, 0, -1, 6, 0}, /* 1 */ { 1, s_0_1, 0, 1, 0}, /* 2 */ { 1, s_0_2, 0, 1, 0}, /* 3 */ { 1, s_0_3, 0, 2, 0}, /* 4 */ { 1, s_0_4, 0, 2, 0}, /* 5 */ { 1, s_0_5, 0, 3, 0}, /* 6 */ { 1, s_0_6, 0, 3, 0}, /* 7 */ { 1, s_0_7, 0, 4, 0}, /* 8 */ { 1, s_0_8, 0, 4, 0}, /* 9 */ { 1, s_0_9, 0, 5, 0}, /* 10 */ { 1, s_0_10, 0, 5, 0} }; static const symbol s_1_1[1] = { 'I' }; static const symbol s_1_2[1] = { 'Y' }; static const struct among a_1[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_1_1, 0, 2, 0}, /* 2 */ { 1, s_1_2, 0, 1, 0} }; static const symbol s_2_0[2] = { 'd', 'd' }; static const symbol s_2_1[2] = { 'k', 'k' }; static const symbol s_2_2[2] = { 't', 't' }; static const struct among a_2[3] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 2, s_2_2, -1, -1, 0} }; static const symbol s_3_0[3] = { 'e', 'n', 'e' }; static const symbol s_3_1[2] = { 's', 'e' }; static const symbol s_3_2[2] = { 'e', 'n' }; static const symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; static const symbol s_3_4[1] = { 's' }; static const struct among a_3[5] = { /* 0 */ { 3, s_3_0, -1, 2, 0}, /* 1 */ { 2, s_3_1, -1, 3, 0}, /* 2 */ { 2, s_3_2, -1, 2, 0}, /* 3 */ { 5, s_3_3, 2, 1, 0}, /* 4 */ { 1, s_3_4, -1, 3, 0} }; static const symbol s_4_0[3] = { 'e', 'n', 'd' }; static const symbol s_4_1[2] = { 'i', 'g' }; static const symbol s_4_2[3] = { 'i', 'n', 'g' }; static const symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; static const symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; static const symbol s_4_5[3] = { 'b', 'a', 'r' }; static const struct among a_4[6] = { /* 0 */ { 3, s_4_0, -1, 1, 0}, /* 1 */ { 2, s_4_1, -1, 2, 0}, /* 2 */ { 3, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 3, 0}, /* 4 */ { 4, s_4_4, -1, 4, 0}, /* 5 */ { 3, s_4_5, -1, 5, 0} }; static const symbol s_5_0[2] = { 'a', 'a' }; static const symbol s_5_1[2] = { 'e', 'e' }; static const symbol s_5_2[2] = { 'o', 'o' }; static const symbol s_5_3[2] = { 'u', 'u' }; static const struct among a_5[4] = { /* 0 */ { 2, s_5_0, -1, -1, 0}, /* 1 */ { 2, s_5_1, -1, -1, 0}, /* 2 */ { 2, s_5_2, -1, -1, 0}, /* 3 */ { 2, s_5_3, -1, -1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const symbol s_0[] = { 'a' }; static const symbol s_1[] = { 'e' }; static const symbol s_2[] = { 'i' }; static const symbol s_3[] = { 'o' }; static const symbol s_4[] = { 'u' }; static const symbol s_5[] = { 'Y' }; static const symbol s_6[] = { 'I' }; static const symbol s_7[] = { 'Y' }; static const symbol s_8[] = { 'y' }; static const symbol s_9[] = { 'i' }; static const symbol s_10[] = { 'g', 'e', 'm' }; static const symbol s_11[] = { 'h', 'e', 'i', 'd' }; static const symbol s_12[] = { 'h', 'e', 'i', 'd' }; static const symbol s_13[] = { 'e', 'n' }; static const symbol s_14[] = { 'i', 'g' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ int among_var; { int c_test1 = z->c; /* test, line 42 */ while(1) { /* repeat, line 42 */ int c2 = z->c; z->bra = z->c; /* [, line 43 */ if (z->c >= z->l || z->p[z->c + 0] >> 5 != 7 || !((340306450 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 6; else /* substring, line 43 */ among_var = find_among(z, a_0, 11); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 43 */ switch (among_var) { /* among, line 43 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ if (ret < 0) return ret; } break; case 6: if (z->c >= z->l) goto lab0; z->c++; /* next, line 54 */ break; } continue; lab0: z->c = c2; break; } z->c = c_test1; } { int c3 = z->c; /* try, line 57 */ z->bra = z->c; /* [, line 57 */ if (z->c == z->l || z->p[z->c] != 'y') { z->c = c3; goto lab1; } /* literal, line 57 */ z->c++; z->ket = z->c; /* ], line 57 */ { int ret = slice_from_s(z, 1, s_5); /* <-, line 57 */ if (ret < 0) return ret; } lab1: ; } while(1) { /* repeat, line 58 */ int c4 = z->c; while(1) { /* goto, line 58 */ int c5 = z->c; if (in_grouping(z, g_v, 97, 232, 0)) goto lab3; /* grouping v, line 59 */ z->bra = z->c; /* [, line 59 */ { int c6 = z->c; /* or, line 59 */ if (z->c == z->l || z->p[z->c] != 'i') goto lab5; /* literal, line 59 */ z->c++; z->ket = z->c; /* ], line 59 */ if (in_grouping(z, g_v, 97, 232, 0)) goto lab5; /* grouping v, line 59 */ { int ret = slice_from_s(z, 1, s_6); /* <-, line 59 */ if (ret < 0) return ret; } goto lab4; lab5: z->c = c6; if (z->c == z->l || z->p[z->c] != 'y') goto lab3; /* literal, line 60 */ z->c++; z->ket = z->c; /* ], line 60 */ { int ret = slice_from_s(z, 1, s_7); /* <-, line 60 */ if (ret < 0) return ret; } } lab4: z->c = c5; break; lab3: z->c = c5; if (z->c >= z->l) goto lab2; z->c++; /* goto, line 58 */ } continue; lab2: z->c = c4; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 66 */ z->I[1] = z->l; /* $p2 = , line 67 */ { /* gopast */ /* grouping v, line 69 */ int ret = out_grouping(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 69 */ int ret = in_grouping(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 69 */ /* try, line 70 */ if (!(z->I[0] < 3)) goto lab0; /* $p1 < , line 70 */ z->I[0] = 3; /* $p1 = , line 70 */ lab0: { /* gopast */ /* grouping v, line 71 */ int ret = out_grouping(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 71 */ int ret = in_grouping(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 71 */ return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 75 */ int c1 = z->c; z->bra = z->c; /* [, line 77 */ if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 89)) among_var = 3; else /* substring, line 77 */ among_var = find_among(z, a_1, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 77 */ switch (among_var) { /* among, line 77 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_8); /* <-, line 78 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_9); /* <-, line 79 */ if (ret < 0) return ret; } break; case 3: if (z->c >= z->l) goto lab0; z->c++; /* next, line 80 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 87 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 88 */ return 1; } static int r_undouble(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 91 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1050640 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 91 */ if (!(find_among_b(z, a_2, 3))) return 0; z->c = z->l - m_test1; } z->ket = z->c; /* [, line 91 */ if (z->c <= z->lb) return 0; z->c--; /* next, line 91 */ z->bra = z->c; /* ], line 91 */ { int ret = slice_del(z); /* delete, line 91 */ if (ret < 0) return ret; } return 1; } static int r_e_ending(struct SN_env * z) { /* backwardmode */ z->B[0] = 0; /* unset e_found, line 95 */ z->ket = z->c; /* [, line 96 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 96 */ z->c--; z->bra = z->c; /* ], line 96 */ { int ret = r_R1(z); /* call R1, line 96 */ if (ret <= 0) return ret; } { int m_test1 = z->l - z->c; /* test, line 96 */ if (out_grouping_b(z, g_v, 97, 232, 0)) return 0; /* non v, line 96 */ z->c = z->l - m_test1; } { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } z->B[0] = 1; /* set e_found, line 97 */ { int ret = r_undouble(z); /* call undouble, line 98 */ if (ret <= 0) return ret; } return 1; } static int r_en_ending(struct SN_env * z) { /* backwardmode */ { int ret = r_R1(z); /* call R1, line 102 */ if (ret <= 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* and, line 102 */ if (out_grouping_b(z, g_v, 97, 232, 0)) return 0; /* non v, line 102 */ z->c = z->l - m1; { int m2 = z->l - z->c; (void)m2; /* not, line 102 */ if (!(eq_s_b(z, 3, s_10))) goto lab0; /* literal, line 102 */ return 0; lab0: z->c = z->l - m2; } } { int ret = slice_del(z); /* delete, line 102 */ if (ret < 0) return ret; } { int ret = r_undouble(z); /* call undouble, line 103 */ if (ret <= 0) return ret; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* do, line 107 */ z->ket = z->c; /* [, line 108 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((540704 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0; /* substring, line 108 */ among_var = find_among_b(z, a_3, 5); if (!(among_var)) goto lab0; z->bra = z->c; /* ], line 108 */ switch (among_var) { /* among, line 108 */ case 0: goto lab0; case 1: { int ret = r_R1(z); /* call R1, line 110 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } { int ret = slice_from_s(z, 4, s_11); /* <-, line 110 */ if (ret < 0) return ret; } break; case 2: { int ret = r_en_ending(z); /* call en_ending, line 113 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } break; case 3: { int ret = r_R1(z); /* call R1, line 116 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } if (out_grouping_b(z, g_v_j, 97, 232, 0)) goto lab0; /* non v_j, line 116 */ { int ret = slice_del(z); /* delete, line 116 */ if (ret < 0) return ret; } break; } lab0: z->c = z->l - m1; } { int m2 = z->l - z->c; (void)m2; /* do, line 120 */ { int ret = r_e_ending(z); /* call e_ending, line 120 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 122 */ z->ket = z->c; /* [, line 122 */ if (!(eq_s_b(z, 4, s_12))) goto lab2; /* literal, line 122 */ z->bra = z->c; /* ], line 122 */ { int ret = r_R2(z); /* call R2, line 122 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* not, line 122 */ if (z->c <= z->lb || z->p[z->c - 1] != 'c') goto lab3; /* literal, line 122 */ z->c--; goto lab2; lab3: z->c = z->l - m4; } { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 123 */ if (!(eq_s_b(z, 2, s_13))) goto lab2; /* literal, line 123 */ z->bra = z->c; /* ], line 123 */ { int ret = r_en_ending(z); /* call en_ending, line 123 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m5 = z->l - z->c; (void)m5; /* do, line 126 */ z->ket = z->c; /* [, line 127 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((264336 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab4; /* substring, line 127 */ among_var = find_among_b(z, a_4, 6); if (!(among_var)) goto lab4; z->bra = z->c; /* ], line 127 */ switch (among_var) { /* among, line 127 */ case 0: goto lab4; case 1: { int ret = r_R2(z); /* call R2, line 129 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 129 */ if (ret < 0) return ret; } { int m6 = z->l - z->c; (void)m6; /* or, line 130 */ z->ket = z->c; /* [, line 130 */ if (!(eq_s_b(z, 2, s_14))) goto lab6; /* literal, line 130 */ z->bra = z->c; /* ], line 130 */ { int ret = r_R2(z); /* call R2, line 130 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } { int m7 = z->l - z->c; (void)m7; /* not, line 130 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab7; /* literal, line 130 */ z->c--; goto lab6; lab7: z->c = z->l - m7; } { int ret = slice_del(z); /* delete, line 130 */ if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_undouble(z); /* call undouble, line 130 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: break; case 2: { int ret = r_R2(z); /* call R2, line 133 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* not, line 133 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab8; /* literal, line 133 */ z->c--; goto lab4; lab8: z->c = z->l - m8; } { int ret = slice_del(z); /* delete, line 133 */ if (ret < 0) return ret; } break; case 3: { int ret = r_R2(z); /* call R2, line 136 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 136 */ if (ret < 0) return ret; } { int ret = r_e_ending(z); /* call e_ending, line 136 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 139 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 139 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 142 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } break; } lab4: z->c = z->l - m5; } { int m9 = z->l - z->c; (void)m9; /* do, line 146 */ if (out_grouping_b(z, g_v_I, 73, 232, 0)) goto lab9; /* non v_I, line 147 */ { int m_test10 = z->l - z->c; /* test, line 148 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((2129954 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab9; /* among, line 149 */ if (!(find_among_b(z, a_5, 4))) goto lab9; if (out_grouping_b(z, g_v, 97, 232, 0)) goto lab9; /* non v, line 150 */ z->c = z->l - m_test10; } z->ket = z->c; /* [, line 152 */ if (z->c <= z->lb) goto lab9; z->c--; /* next, line 152 */ z->bra = z->c; /* ], line 152 */ { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } lab9: z->c = z->l - m9; } return 1; } extern int dutch_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 159 */ { int ret = r_prelude(z); /* call prelude, line 159 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 160 */ { int ret = r_mark_regions(z); /* call mark_regions, line 160 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 161 */ { int m3 = z->l - z->c; (void)m3; /* do, line 162 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 162 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } z->c = z->lb; { int c4 = z->c; /* do, line 163 */ { int ret = r_postlude(z); /* call postlude, line 163 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = c4; } return 1; } extern struct SN_env * dutch_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } extern void dutch_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_dutch.h000066400000000000000000000005371364126773500237600ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * dutch_ISO_8859_1_create_env(void); extern void dutch_ISO_8859_1_close_env(struct SN_env * z); extern int dutch_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_english.c000066400000000000000000001153231364126773500242750ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int english_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_exception2(struct SN_env * z); static int r_exception1(struct SN_env * z); static int r_Step_5(struct SN_env * z); static int r_Step_4(struct SN_env * z); static int r_Step_3(struct SN_env * z); static int r_Step_2(struct SN_env * z); static int r_Step_1c(struct SN_env * z); static int r_Step_1b(struct SN_env * z); static int r_Step_1a(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_shortv(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * english_ISO_8859_1_create_env(void); extern void english_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[5] = { 'a', 'r', 's', 'e', 'n' }; static const symbol s_0_1[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; static const symbol s_0_2[5] = { 'g', 'e', 'n', 'e', 'r' }; static const struct among a_0[3] = { /* 0 */ { 5, s_0_0, -1, -1, 0}, /* 1 */ { 6, s_0_1, -1, -1, 0}, /* 2 */ { 5, s_0_2, -1, -1, 0} }; static const symbol s_1_0[1] = { '\'' }; static const symbol s_1_1[3] = { '\'', 's', '\'' }; static const symbol s_1_2[2] = { '\'', 's' }; static const struct among a_1[3] = { /* 0 */ { 1, s_1_0, -1, 1, 0}, /* 1 */ { 3, s_1_1, 0, 1, 0}, /* 2 */ { 2, s_1_2, -1, 1, 0} }; static const symbol s_2_0[3] = { 'i', 'e', 'd' }; static const symbol s_2_1[1] = { 's' }; static const symbol s_2_2[3] = { 'i', 'e', 's' }; static const symbol s_2_3[4] = { 's', 's', 'e', 's' }; static const symbol s_2_4[2] = { 's', 's' }; static const symbol s_2_5[2] = { 'u', 's' }; static const struct among a_2[6] = { /* 0 */ { 3, s_2_0, -1, 2, 0}, /* 1 */ { 1, s_2_1, -1, 3, 0}, /* 2 */ { 3, s_2_2, 1, 2, 0}, /* 3 */ { 4, s_2_3, 1, 1, 0}, /* 4 */ { 2, s_2_4, 1, -1, 0}, /* 5 */ { 2, s_2_5, 1, -1, 0} }; static const symbol s_3_1[2] = { 'b', 'b' }; static const symbol s_3_2[2] = { 'd', 'd' }; static const symbol s_3_3[2] = { 'f', 'f' }; static const symbol s_3_4[2] = { 'g', 'g' }; static const symbol s_3_5[2] = { 'b', 'l' }; static const symbol s_3_6[2] = { 'm', 'm' }; static const symbol s_3_7[2] = { 'n', 'n' }; static const symbol s_3_8[2] = { 'p', 'p' }; static const symbol s_3_9[2] = { 'r', 'r' }; static const symbol s_3_10[2] = { 'a', 't' }; static const symbol s_3_11[2] = { 't', 't' }; static const symbol s_3_12[2] = { 'i', 'z' }; static const struct among a_3[13] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_3_1, 0, 2, 0}, /* 2 */ { 2, s_3_2, 0, 2, 0}, /* 3 */ { 2, s_3_3, 0, 2, 0}, /* 4 */ { 2, s_3_4, 0, 2, 0}, /* 5 */ { 2, s_3_5, 0, 1, 0}, /* 6 */ { 2, s_3_6, 0, 2, 0}, /* 7 */ { 2, s_3_7, 0, 2, 0}, /* 8 */ { 2, s_3_8, 0, 2, 0}, /* 9 */ { 2, s_3_9, 0, 2, 0}, /* 10 */ { 2, s_3_10, 0, 1, 0}, /* 11 */ { 2, s_3_11, 0, 2, 0}, /* 12 */ { 2, s_3_12, 0, 1, 0} }; static const symbol s_4_0[2] = { 'e', 'd' }; static const symbol s_4_1[3] = { 'e', 'e', 'd' }; static const symbol s_4_2[3] = { 'i', 'n', 'g' }; static const symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; static const symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; static const symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; static const struct among a_4[6] = { /* 0 */ { 2, s_4_0, -1, 2, 0}, /* 1 */ { 3, s_4_1, 0, 1, 0}, /* 2 */ { 3, s_4_2, -1, 2, 0}, /* 3 */ { 4, s_4_3, -1, 2, 0}, /* 4 */ { 5, s_4_4, 3, 1, 0}, /* 5 */ { 5, s_4_5, -1, 2, 0} }; static const symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; static const symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; static const symbol s_5_2[3] = { 'o', 'g', 'i' }; static const symbol s_5_3[2] = { 'l', 'i' }; static const symbol s_5_4[3] = { 'b', 'l', 'i' }; static const symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; static const symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; static const symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; static const symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; static const symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; static const symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; static const symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; static const symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; static const symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; static const symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; static const symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; static const symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; static const symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; static const symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; static const symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; static const symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; static const struct among a_5[24] = { /* 0 */ { 4, s_5_0, -1, 3, 0}, /* 1 */ { 4, s_5_1, -1, 2, 0}, /* 2 */ { 3, s_5_2, -1, 13, 0}, /* 3 */ { 2, s_5_3, -1, 16, 0}, /* 4 */ { 3, s_5_4, 3, 12, 0}, /* 5 */ { 4, s_5_5, 4, 4, 0}, /* 6 */ { 4, s_5_6, 3, 8, 0}, /* 7 */ { 5, s_5_7, 3, 14, 0}, /* 8 */ { 6, s_5_8, 3, 15, 0}, /* 9 */ { 5, s_5_9, 3, 10, 0}, /* 10 */ { 5, s_5_10, 3, 5, 0}, /* 11 */ { 5, s_5_11, -1, 8, 0}, /* 12 */ { 6, s_5_12, -1, 12, 0}, /* 13 */ { 5, s_5_13, -1, 11, 0}, /* 14 */ { 6, s_5_14, -1, 1, 0}, /* 15 */ { 7, s_5_15, 14, 7, 0}, /* 16 */ { 5, s_5_16, -1, 8, 0}, /* 17 */ { 5, s_5_17, -1, 7, 0}, /* 18 */ { 7, s_5_18, 17, 6, 0}, /* 19 */ { 4, s_5_19, -1, 6, 0}, /* 20 */ { 4, s_5_20, -1, 7, 0}, /* 21 */ { 7, s_5_21, -1, 11, 0}, /* 22 */ { 7, s_5_22, -1, 9, 0}, /* 23 */ { 7, s_5_23, -1, 10, 0} }; static const symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; static const symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; static const symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; static const symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_6_7[3] = { 'f', 'u', 'l' }; static const symbol s_6_8[4] = { 'n', 'e', 's', 's' }; static const struct among a_6[9] = { /* 0 */ { 5, s_6_0, -1, 4, 0}, /* 1 */ { 5, s_6_1, -1, 6, 0}, /* 2 */ { 5, s_6_2, -1, 3, 0}, /* 3 */ { 5, s_6_3, -1, 4, 0}, /* 4 */ { 4, s_6_4, -1, 4, 0}, /* 5 */ { 6, s_6_5, -1, 1, 0}, /* 6 */ { 7, s_6_6, 5, 2, 0}, /* 7 */ { 3, s_6_7, -1, 5, 0}, /* 8 */ { 4, s_6_8, -1, 5, 0} }; static const symbol s_7_0[2] = { 'i', 'c' }; static const symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_7_5[3] = { 'a', 't', 'e' }; static const symbol s_7_6[3] = { 'i', 'v', 'e' }; static const symbol s_7_7[3] = { 'i', 'z', 'e' }; static const symbol s_7_8[3] = { 'i', 't', 'i' }; static const symbol s_7_9[2] = { 'a', 'l' }; static const symbol s_7_10[3] = { 'i', 's', 'm' }; static const symbol s_7_11[3] = { 'i', 'o', 'n' }; static const symbol s_7_12[2] = { 'e', 'r' }; static const symbol s_7_13[3] = { 'o', 'u', 's' }; static const symbol s_7_14[3] = { 'a', 'n', 't' }; static const symbol s_7_15[3] = { 'e', 'n', 't' }; static const symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; static const symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; static const struct among a_7[18] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 4, s_7_1, -1, 1, 0}, /* 2 */ { 4, s_7_2, -1, 1, 0}, /* 3 */ { 4, s_7_3, -1, 1, 0}, /* 4 */ { 4, s_7_4, -1, 1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 3, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 3, s_7_8, -1, 1, 0}, /* 9 */ { 2, s_7_9, -1, 1, 0}, /* 10 */ { 3, s_7_10, -1, 1, 0}, /* 11 */ { 3, s_7_11, -1, 2, 0}, /* 12 */ { 2, s_7_12, -1, 1, 0}, /* 13 */ { 3, s_7_13, -1, 1, 0}, /* 14 */ { 3, s_7_14, -1, 1, 0}, /* 15 */ { 3, s_7_15, -1, 1, 0}, /* 16 */ { 4, s_7_16, 15, 1, 0}, /* 17 */ { 5, s_7_17, 16, 1, 0} }; static const symbol s_8_0[1] = { 'e' }; static const symbol s_8_1[1] = { 'l' }; static const struct among a_8[2] = { /* 0 */ { 1, s_8_0, -1, 1, 0}, /* 1 */ { 1, s_8_1, -1, 2, 0} }; static const symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; static const symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; static const symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; static const symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; static const symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; static const symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; static const symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; static const symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; static const struct among a_9[8] = { /* 0 */ { 7, s_9_0, -1, -1, 0}, /* 1 */ { 7, s_9_1, -1, -1, 0}, /* 2 */ { 6, s_9_2, -1, -1, 0}, /* 3 */ { 7, s_9_3, -1, -1, 0}, /* 4 */ { 6, s_9_4, -1, -1, 0}, /* 5 */ { 7, s_9_5, -1, -1, 0}, /* 6 */ { 7, s_9_6, -1, -1, 0}, /* 7 */ { 6, s_9_7, -1, -1, 0} }; static const symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; static const symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; static const symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; static const symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; static const symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; static const symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; static const symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; static const symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; static const symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; static const symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; static const symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; static const symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; static const symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; static const symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; static const symbol s_10_14[4] = { 's', 'k', 'i', 's' }; static const symbol s_10_15[3] = { 's', 'k', 'y' }; static const symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; static const symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; static const struct among a_10[18] = { /* 0 */ { 5, s_10_0, -1, -1, 0}, /* 1 */ { 5, s_10_1, -1, -1, 0}, /* 2 */ { 4, s_10_2, -1, -1, 0}, /* 3 */ { 6, s_10_3, -1, -1, 0}, /* 4 */ { 5, s_10_4, -1, 3, 0}, /* 5 */ { 5, s_10_5, -1, 9, 0}, /* 6 */ { 6, s_10_6, -1, 7, 0}, /* 7 */ { 4, s_10_7, -1, -1, 0}, /* 8 */ { 4, s_10_8, -1, 6, 0}, /* 9 */ { 5, s_10_9, -1, 4, 0}, /* 10 */ { 4, s_10_10, -1, -1, 0}, /* 11 */ { 4, s_10_11, -1, 10, 0}, /* 12 */ { 6, s_10_12, -1, 11, 0}, /* 13 */ { 5, s_10_13, -1, 2, 0}, /* 14 */ { 4, s_10_14, -1, 1, 0}, /* 15 */ { 3, s_10_15, -1, -1, 0}, /* 16 */ { 5, s_10_16, -1, 5, 0}, /* 17 */ { 4, s_10_17, -1, 8, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1 }; static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; static const unsigned char g_valid_LI[] = { 55, 141, 2 }; static const symbol s_0[] = { 'Y' }; static const symbol s_1[] = { 'Y' }; static const symbol s_2[] = { 's', 's' }; static const symbol s_3[] = { 'i' }; static const symbol s_4[] = { 'i', 'e' }; static const symbol s_5[] = { 'e', 'e' }; static const symbol s_6[] = { 'e' }; static const symbol s_7[] = { 'e' }; static const symbol s_8[] = { 'i' }; static const symbol s_9[] = { 't', 'i', 'o', 'n' }; static const symbol s_10[] = { 'e', 'n', 'c', 'e' }; static const symbol s_11[] = { 'a', 'n', 'c', 'e' }; static const symbol s_12[] = { 'a', 'b', 'l', 'e' }; static const symbol s_13[] = { 'e', 'n', 't' }; static const symbol s_14[] = { 'i', 'z', 'e' }; static const symbol s_15[] = { 'a', 't', 'e' }; static const symbol s_16[] = { 'a', 'l' }; static const symbol s_17[] = { 'f', 'u', 'l' }; static const symbol s_18[] = { 'o', 'u', 's' }; static const symbol s_19[] = { 'i', 'v', 'e' }; static const symbol s_20[] = { 'b', 'l', 'e' }; static const symbol s_21[] = { 'o', 'g' }; static const symbol s_22[] = { 'f', 'u', 'l' }; static const symbol s_23[] = { 'l', 'e', 's', 's' }; static const symbol s_24[] = { 't', 'i', 'o', 'n' }; static const symbol s_25[] = { 'a', 't', 'e' }; static const symbol s_26[] = { 'a', 'l' }; static const symbol s_27[] = { 'i', 'c' }; static const symbol s_28[] = { 's', 'k', 'i' }; static const symbol s_29[] = { 's', 'k', 'y' }; static const symbol s_30[] = { 'd', 'i', 'e' }; static const symbol s_31[] = { 'l', 'i', 'e' }; static const symbol s_32[] = { 't', 'i', 'e' }; static const symbol s_33[] = { 'i', 'd', 'l' }; static const symbol s_34[] = { 'g', 'e', 'n', 't', 'l' }; static const symbol s_35[] = { 'u', 'g', 'l', 'i' }; static const symbol s_36[] = { 'e', 'a', 'r', 'l', 'i' }; static const symbol s_37[] = { 'o', 'n', 'l', 'i' }; static const symbol s_38[] = { 's', 'i', 'n', 'g', 'l' }; static const symbol s_39[] = { 'y' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset Y_found, line 26 */ { int c1 = z->c; /* do, line 27 */ z->bra = z->c; /* [, line 27 */ if (z->c == z->l || z->p[z->c] != '\'') goto lab0; /* literal, line 27 */ z->c++; z->ket = z->c; /* ], line 27 */ { int ret = slice_del(z); /* delete, line 27 */ if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 28 */ z->bra = z->c; /* [, line 28 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab1; /* literal, line 28 */ z->c++; z->ket = z->c; /* ], line 28 */ { int ret = slice_from_s(z, 1, s_0); /* <-, line 28 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 28 */ lab1: z->c = c2; } { int c3 = z->c; /* do, line 29 */ while(1) { /* repeat, line 29 */ int c4 = z->c; while(1) { /* goto, line 29 */ int c5 = z->c; if (in_grouping(z, g_v, 97, 121, 0)) goto lab4; /* grouping v, line 29 */ z->bra = z->c; /* [, line 29 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab4; /* literal, line 29 */ z->c++; z->ket = z->c; /* ], line 29 */ z->c = c5; break; lab4: z->c = c5; if (z->c >= z->l) goto lab3; z->c++; /* goto, line 29 */ } { int ret = slice_from_s(z, 1, s_1); /* <-, line 29 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 29 */ continue; lab3: z->c = c4; break; } z->c = c3; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 33 */ z->I[1] = z->l; /* $p2 = , line 34 */ { int c1 = z->c; /* do, line 35 */ { int c2 = z->c; /* or, line 41 */ if (z->c + 4 >= z->l || z->p[z->c + 4] >> 5 != 3 || !((2375680 >> (z->p[z->c + 4] & 0x1f)) & 1)) goto lab2; /* among, line 36 */ if (!(find_among(z, a_0, 3))) goto lab2; goto lab1; lab2: z->c = c2; { /* gopast */ /* grouping v, line 41 */ int ret = out_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 41 */ int ret = in_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } } lab1: z->I[0] = z->c; /* setmark p1, line 42 */ { /* gopast */ /* grouping v, line 43 */ int ret = out_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 43 */ int ret = in_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 43 */ lab0: z->c = c1; } return 1; } static int r_shortv(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 51 */ if (out_grouping_b(z, g_v_WXY, 89, 121, 0)) goto lab1; /* non v_WXY, line 50 */ if (in_grouping_b(z, g_v, 97, 121, 0)) goto lab1; /* grouping v, line 50 */ if (out_grouping_b(z, g_v, 97, 121, 0)) goto lab1; /* non v, line 50 */ goto lab0; lab1: z->c = z->l - m1; if (out_grouping_b(z, g_v, 97, 121, 0)) return 0; /* non v, line 52 */ if (in_grouping_b(z, g_v, 97, 121, 0)) return 0; /* grouping v, line 52 */ if (z->c > z->lb) return 0; /* atlimit, line 52 */ } lab0: return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 55 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 56 */ return 1; } static int r_Step_1a(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* try, line 59 */ z->ket = z->c; /* [, line 60 */ if (z->c <= z->lb || (z->p[z->c - 1] != 39 && z->p[z->c - 1] != 115)) { z->c = z->l - m1; goto lab0; } /* substring, line 60 */ among_var = find_among_b(z, a_1, 3); if (!(among_var)) { z->c = z->l - m1; goto lab0; } z->bra = z->c; /* ], line 60 */ switch (among_var) { /* among, line 60 */ case 0: { z->c = z->l - m1; goto lab0; } case 1: { int ret = slice_del(z); /* delete, line 62 */ if (ret < 0) return ret; } break; } lab0: ; } z->ket = z->c; /* [, line 65 */ if (z->c <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 115)) return 0; /* substring, line 65 */ among_var = find_among_b(z, a_2, 6); if (!(among_var)) return 0; z->bra = z->c; /* ], line 65 */ switch (among_var) { /* among, line 65 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_2); /* <-, line 66 */ if (ret < 0) return ret; } break; case 2: { int m2 = z->l - z->c; (void)m2; /* or, line 68 */ { int ret = z->c - 2; /* hop, line 68 */ if (z->lb > ret || ret > z->l) goto lab2; z->c = ret; } { int ret = slice_from_s(z, 1, s_3); /* <-, line 68 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m2; { int ret = slice_from_s(z, 2, s_4); /* <-, line 68 */ if (ret < 0) return ret; } } lab1: break; case 3: if (z->c <= z->lb) return 0; z->c--; /* next, line 69 */ { /* gopast */ /* grouping v, line 69 */ int ret = out_grouping_b(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } { int ret = slice_del(z); /* delete, line 69 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_1b(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 75 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33554576 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 75 */ among_var = find_among_b(z, a_4, 6); if (!(among_var)) return 0; z->bra = z->c; /* ], line 75 */ switch (among_var) { /* among, line 75 */ case 0: return 0; case 1: { int ret = r_R1(z); /* call R1, line 77 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 2, s_5); /* <-, line 77 */ if (ret < 0) return ret; } break; case 2: { int m_test1 = z->l - z->c; /* test, line 80 */ { /* gopast */ /* grouping v, line 80 */ int ret = out_grouping_b(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } z->c = z->l - m_test1; } { int ret = slice_del(z); /* delete, line 80 */ if (ret < 0) return ret; } { int m_test2 = z->l - z->c; /* test, line 81 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else /* substring, line 81 */ among_var = find_among_b(z, a_3, 13); if (!(among_var)) return 0; z->c = z->l - m_test2; } switch (among_var) { /* among, line 81 */ case 0: return 0; case 1: { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_6); /* <+, line 83 */ z->c = saved_c; } if (ret < 0) return ret; } break; case 2: z->ket = z->c; /* [, line 86 */ if (z->c <= z->lb) return 0; z->c--; /* next, line 86 */ z->bra = z->c; /* ], line 86 */ { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } break; case 3: if (z->c != z->I[0]) return 0; /* atmark, line 87 */ { int m_test3 = z->l - z->c; /* test, line 87 */ { int ret = r_shortv(z); /* call shortv, line 87 */ if (ret <= 0) return ret; } z->c = z->l - m_test3; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_7); /* <+, line 87 */ z->c = saved_c; } if (ret < 0) return ret; } break; } break; } return 1; } static int r_Step_1c(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 94 */ { int m1 = z->l - z->c; (void)m1; /* or, line 94 */ if (z->c <= z->lb || z->p[z->c - 1] != 'y') goto lab1; /* literal, line 94 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 'Y') return 0; /* literal, line 94 */ z->c--; } lab0: z->bra = z->c; /* ], line 94 */ if (out_grouping_b(z, g_v, 97, 121, 0)) return 0; /* non v, line 95 */ { int m2 = z->l - z->c; (void)m2; /* not, line 95 */ if (z->c > z->lb) goto lab2; /* atlimit, line 95 */ return 0; lab2: z->c = z->l - m2; } { int ret = slice_from_s(z, 1, s_8); /* <-, line 96 */ if (ret < 0) return ret; } return 1; } static int r_Step_2(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 100 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 100 */ among_var = find_among_b(z, a_5, 24); if (!(among_var)) return 0; z->bra = z->c; /* ], line 100 */ { int ret = r_R1(z); /* call R1, line 100 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 100 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_9); /* <-, line 101 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_10); /* <-, line 102 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_11); /* <-, line 103 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 4, s_12); /* <-, line 104 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_13); /* <-, line 105 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 3, s_14); /* <-, line 107 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_15); /* <-, line 109 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 2, s_16); /* <-, line 111 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 3, s_17); /* <-, line 112 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 3, s_18); /* <-, line 114 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 3, s_19); /* <-, line 116 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 3, s_20); /* <-, line 118 */ if (ret < 0) return ret; } break; case 13: if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 119 */ z->c--; { int ret = slice_from_s(z, 2, s_21); /* <-, line 119 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 3, s_22); /* <-, line 120 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_from_s(z, 4, s_23); /* <-, line 121 */ if (ret < 0) return ret; } break; case 16: if (in_grouping_b(z, g_valid_LI, 99, 116, 0)) return 0; /* grouping valid_LI, line 122 */ { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_3(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 127 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 127 */ among_var = find_among_b(z, a_6, 9); if (!(among_var)) return 0; z->bra = z->c; /* ], line 127 */ { int ret = r_R1(z); /* call R1, line 127 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 127 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_24); /* <-, line 128 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_25); /* <-, line 129 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_26); /* <-, line 130 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 2, s_27); /* <-, line 132 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } break; case 6: { int ret = r_R2(z); /* call R2, line 136 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 136 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_4(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 141 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1864232 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 141 */ among_var = find_among_b(z, a_7, 18); if (!(among_var)) return 0; z->bra = z->c; /* ], line 141 */ { int ret = r_R2(z); /* call R2, line 141 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 141 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 144 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 145 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab1; /* literal, line 145 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 't') return 0; /* literal, line 145 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 145 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_5(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 150 */ if (z->c <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) return 0; /* substring, line 150 */ among_var = find_among_b(z, a_8, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 150 */ switch (among_var) { /* among, line 150 */ case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 151 */ { int ret = r_R2(z); /* call R2, line 151 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_R1(z); /* call R1, line 151 */ if (ret <= 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* not, line 151 */ { int ret = r_shortv(z); /* call shortv, line 151 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } return 0; lab2: z->c = z->l - m2; } } lab0: { int ret = slice_del(z); /* delete, line 151 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 152 */ if (ret <= 0) return ret; } if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 152 */ z->c--; { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } break; } return 1; } static int r_exception2(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 158 */ if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0; /* substring, line 158 */ if (!(find_among_b(z, a_9, 8))) return 0; z->bra = z->c; /* ], line 158 */ if (z->c > z->lb) return 0; /* atlimit, line 158 */ return 1; } static int r_exception1(struct SN_env * z) { /* forwardmode */ int among_var; z->bra = z->c; /* [, line 170 */ if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((42750482 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0; /* substring, line 170 */ among_var = find_among(z, a_10, 18); if (!(among_var)) return 0; z->ket = z->c; /* ], line 170 */ if (z->c < z->l) return 0; /* atlimit, line 170 */ switch (among_var) { /* among, line 170 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 3, s_28); /* <-, line 174 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_29); /* <-, line 175 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 3, s_30); /* <-, line 176 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 3, s_31); /* <-, line 177 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_32); /* <-, line 178 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 3, s_33); /* <-, line 182 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 5, s_34); /* <-, line 183 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 4, s_35); /* <-, line 184 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 5, s_36); /* <-, line 185 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 4, s_37); /* <-, line 186 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 5, s_38); /* <-, line 187 */ if (ret < 0) return ret; } break; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ if (!(z->B[0])) return 0; /* Boolean test Y_found, line 203 */ while(1) { /* repeat, line 203 */ int c1 = z->c; while(1) { /* goto, line 203 */ int c2 = z->c; z->bra = z->c; /* [, line 203 */ if (z->c == z->l || z->p[z->c] != 'Y') goto lab1; /* literal, line 203 */ z->c++; z->ket = z->c; /* ], line 203 */ z->c = c2; break; lab1: z->c = c2; if (z->c >= z->l) goto lab0; z->c++; /* goto, line 203 */ } { int ret = slice_from_s(z, 1, s_39); /* <-, line 203 */ if (ret < 0) return ret; } continue; lab0: z->c = c1; break; } return 1; } extern int english_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* or, line 207 */ { int ret = r_exception1(z); /* call exception1, line 207 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } goto lab0; lab1: z->c = c1; { int c2 = z->c; /* not, line 208 */ { int ret = z->c + 3; /* hop, line 208 */ if (0 > ret || ret > z->l) goto lab3; z->c = ret; } goto lab2; lab3: z->c = c2; } goto lab0; lab2: z->c = c1; { int c3 = z->c; /* do, line 209 */ { int ret = r_prelude(z); /* call prelude, line 209 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = c3; } { int c4 = z->c; /* do, line 210 */ { int ret = r_mark_regions(z); /* call mark_regions, line 210 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = c4; } z->lb = z->c; z->c = z->l; /* backwards, line 211 */ { int m5 = z->l - z->c; (void)m5; /* do, line 213 */ { int ret = r_Step_1a(z); /* call Step_1a, line 213 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* or, line 215 */ { int ret = r_exception2(z); /* call exception2, line 215 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } goto lab7; lab8: z->c = z->l - m6; { int m7 = z->l - z->c; (void)m7; /* do, line 217 */ { int ret = r_Step_1b(z); /* call Step_1b, line 217 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 218 */ { int ret = r_Step_1c(z); /* call Step_1c, line 218 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } lab10: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 220 */ { int ret = r_Step_2(z); /* call Step_2, line 220 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } lab11: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 221 */ { int ret = r_Step_3(z); /* call Step_3, line 221 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } lab12: z->c = z->l - m10; } { int m11 = z->l - z->c; (void)m11; /* do, line 222 */ { int ret = r_Step_4(z); /* call Step_4, line 222 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } lab13: z->c = z->l - m11; } { int m12 = z->l - z->c; (void)m12; /* do, line 224 */ { int ret = r_Step_5(z); /* call Step_5, line 224 */ if (ret == 0) goto lab14; if (ret < 0) return ret; } lab14: z->c = z->l - m12; } } lab7: z->c = z->lb; { int c13 = z->c; /* do, line 227 */ { int ret = r_postlude(z); /* call postlude, line 227 */ if (ret == 0) goto lab15; if (ret < 0) return ret; } lab15: z->c = c13; } } lab0: return 1; } extern struct SN_env * english_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } extern void english_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_english.h000066400000000000000000000005451364126773500243010ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * english_ISO_8859_1_create_env(void); extern void english_ISO_8859_1_close_env(struct SN_env * z); extern int english_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_finnish.c000066400000000000000000000645131364126773500243060ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int finnish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_tidy(struct SN_env * z); static int r_other_endings(struct SN_env * z); static int r_t_plural(struct SN_env * z); static int r_i_plural(struct SN_env * z); static int r_case_ending(struct SN_env * z); static int r_VI(struct SN_env * z); static int r_LONG(struct SN_env * z); static int r_possessive(struct SN_env * z); static int r_particle_etc(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * finnish_ISO_8859_1_create_env(void); extern void finnish_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[2] = { 'p', 'a' }; static const symbol s_0_1[3] = { 's', 't', 'i' }; static const symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; static const symbol s_0_3[3] = { 'h', 'a', 'n' }; static const symbol s_0_4[3] = { 'k', 'i', 'n' }; static const symbol s_0_5[3] = { 'h', 0xE4, 'n' }; static const symbol s_0_6[4] = { 'k', 0xE4, 0xE4, 'n' }; static const symbol s_0_7[2] = { 'k', 'o' }; static const symbol s_0_8[2] = { 'p', 0xE4 }; static const symbol s_0_9[2] = { 'k', 0xF6 }; static const struct among a_0[10] = { /* 0 */ { 2, s_0_0, -1, 1, 0}, /* 1 */ { 3, s_0_1, -1, 2, 0}, /* 2 */ { 4, s_0_2, -1, 1, 0}, /* 3 */ { 3, s_0_3, -1, 1, 0}, /* 4 */ { 3, s_0_4, -1, 1, 0}, /* 5 */ { 3, s_0_5, -1, 1, 0}, /* 6 */ { 4, s_0_6, -1, 1, 0}, /* 7 */ { 2, s_0_7, -1, 1, 0}, /* 8 */ { 2, s_0_8, -1, 1, 0}, /* 9 */ { 2, s_0_9, -1, 1, 0} }; static const symbol s_1_0[3] = { 'l', 'l', 'a' }; static const symbol s_1_1[2] = { 'n', 'a' }; static const symbol s_1_2[3] = { 's', 's', 'a' }; static const symbol s_1_3[2] = { 't', 'a' }; static const symbol s_1_4[3] = { 'l', 't', 'a' }; static const symbol s_1_5[3] = { 's', 't', 'a' }; static const struct among a_1[6] = { /* 0 */ { 3, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0}, /* 2 */ { 3, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0}, /* 4 */ { 3, s_1_4, 3, -1, 0}, /* 5 */ { 3, s_1_5, 3, -1, 0} }; static const symbol s_2_0[3] = { 'l', 'l', 0xE4 }; static const symbol s_2_1[2] = { 'n', 0xE4 }; static const symbol s_2_2[3] = { 's', 's', 0xE4 }; static const symbol s_2_3[2] = { 't', 0xE4 }; static const symbol s_2_4[3] = { 'l', 't', 0xE4 }; static const symbol s_2_5[3] = { 's', 't', 0xE4 }; static const struct among a_2[6] = { /* 0 */ { 3, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 3, s_2_2, -1, -1, 0}, /* 3 */ { 2, s_2_3, -1, -1, 0}, /* 4 */ { 3, s_2_4, 3, -1, 0}, /* 5 */ { 3, s_2_5, 3, -1, 0} }; static const symbol s_3_0[3] = { 'l', 'l', 'e' }; static const symbol s_3_1[3] = { 'i', 'n', 'e' }; static const struct among a_3[2] = { /* 0 */ { 3, s_3_0, -1, -1, 0}, /* 1 */ { 3, s_3_1, -1, -1, 0} }; static const symbol s_4_0[3] = { 'n', 's', 'a' }; static const symbol s_4_1[3] = { 'm', 'm', 'e' }; static const symbol s_4_2[3] = { 'n', 'n', 'e' }; static const symbol s_4_3[2] = { 'n', 'i' }; static const symbol s_4_4[2] = { 's', 'i' }; static const symbol s_4_5[2] = { 'a', 'n' }; static const symbol s_4_6[2] = { 'e', 'n' }; static const symbol s_4_7[2] = { 0xE4, 'n' }; static const symbol s_4_8[3] = { 'n', 's', 0xE4 }; static const struct among a_4[9] = { /* 0 */ { 3, s_4_0, -1, 3, 0}, /* 1 */ { 3, s_4_1, -1, 3, 0}, /* 2 */ { 3, s_4_2, -1, 3, 0}, /* 3 */ { 2, s_4_3, -1, 2, 0}, /* 4 */ { 2, s_4_4, -1, 1, 0}, /* 5 */ { 2, s_4_5, -1, 4, 0}, /* 6 */ { 2, s_4_6, -1, 6, 0}, /* 7 */ { 2, s_4_7, -1, 5, 0}, /* 8 */ { 3, s_4_8, -1, 3, 0} }; static const symbol s_5_0[2] = { 'a', 'a' }; static const symbol s_5_1[2] = { 'e', 'e' }; static const symbol s_5_2[2] = { 'i', 'i' }; static const symbol s_5_3[2] = { 'o', 'o' }; static const symbol s_5_4[2] = { 'u', 'u' }; static const symbol s_5_5[2] = { 0xE4, 0xE4 }; static const symbol s_5_6[2] = { 0xF6, 0xF6 }; static const struct among a_5[7] = { /* 0 */ { 2, s_5_0, -1, -1, 0}, /* 1 */ { 2, s_5_1, -1, -1, 0}, /* 2 */ { 2, s_5_2, -1, -1, 0}, /* 3 */ { 2, s_5_3, -1, -1, 0}, /* 4 */ { 2, s_5_4, -1, -1, 0}, /* 5 */ { 2, s_5_5, -1, -1, 0}, /* 6 */ { 2, s_5_6, -1, -1, 0} }; static const symbol s_6_0[1] = { 'a' }; static const symbol s_6_1[3] = { 'l', 'l', 'a' }; static const symbol s_6_2[2] = { 'n', 'a' }; static const symbol s_6_3[3] = { 's', 's', 'a' }; static const symbol s_6_4[2] = { 't', 'a' }; static const symbol s_6_5[3] = { 'l', 't', 'a' }; static const symbol s_6_6[3] = { 's', 't', 'a' }; static const symbol s_6_7[3] = { 't', 't', 'a' }; static const symbol s_6_8[3] = { 'l', 'l', 'e' }; static const symbol s_6_9[3] = { 'i', 'n', 'e' }; static const symbol s_6_10[3] = { 'k', 's', 'i' }; static const symbol s_6_11[1] = { 'n' }; static const symbol s_6_12[3] = { 'h', 'a', 'n' }; static const symbol s_6_13[3] = { 'd', 'e', 'n' }; static const symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; static const symbol s_6_15[3] = { 'h', 'e', 'n' }; static const symbol s_6_16[4] = { 't', 't', 'e', 'n' }; static const symbol s_6_17[3] = { 'h', 'i', 'n' }; static const symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; static const symbol s_6_19[3] = { 'h', 'o', 'n' }; static const symbol s_6_20[3] = { 'h', 0xE4, 'n' }; static const symbol s_6_21[3] = { 'h', 0xF6, 'n' }; static const symbol s_6_22[1] = { 0xE4 }; static const symbol s_6_23[3] = { 'l', 'l', 0xE4 }; static const symbol s_6_24[2] = { 'n', 0xE4 }; static const symbol s_6_25[3] = { 's', 's', 0xE4 }; static const symbol s_6_26[2] = { 't', 0xE4 }; static const symbol s_6_27[3] = { 'l', 't', 0xE4 }; static const symbol s_6_28[3] = { 's', 't', 0xE4 }; static const symbol s_6_29[3] = { 't', 't', 0xE4 }; static const struct among a_6[30] = { /* 0 */ { 1, s_6_0, -1, 8, 0}, /* 1 */ { 3, s_6_1, 0, -1, 0}, /* 2 */ { 2, s_6_2, 0, -1, 0}, /* 3 */ { 3, s_6_3, 0, -1, 0}, /* 4 */ { 2, s_6_4, 0, -1, 0}, /* 5 */ { 3, s_6_5, 4, -1, 0}, /* 6 */ { 3, s_6_6, 4, -1, 0}, /* 7 */ { 3, s_6_7, 4, 9, 0}, /* 8 */ { 3, s_6_8, -1, -1, 0}, /* 9 */ { 3, s_6_9, -1, -1, 0}, /* 10 */ { 3, s_6_10, -1, -1, 0}, /* 11 */ { 1, s_6_11, -1, 7, 0}, /* 12 */ { 3, s_6_12, 11, 1, 0}, /* 13 */ { 3, s_6_13, 11, -1, r_VI}, /* 14 */ { 4, s_6_14, 11, -1, r_LONG}, /* 15 */ { 3, s_6_15, 11, 2, 0}, /* 16 */ { 4, s_6_16, 11, -1, r_VI}, /* 17 */ { 3, s_6_17, 11, 3, 0}, /* 18 */ { 4, s_6_18, 11, -1, r_VI}, /* 19 */ { 3, s_6_19, 11, 4, 0}, /* 20 */ { 3, s_6_20, 11, 5, 0}, /* 21 */ { 3, s_6_21, 11, 6, 0}, /* 22 */ { 1, s_6_22, -1, 8, 0}, /* 23 */ { 3, s_6_23, 22, -1, 0}, /* 24 */ { 2, s_6_24, 22, -1, 0}, /* 25 */ { 3, s_6_25, 22, -1, 0}, /* 26 */ { 2, s_6_26, 22, -1, 0}, /* 27 */ { 3, s_6_27, 26, -1, 0}, /* 28 */ { 3, s_6_28, 26, -1, 0}, /* 29 */ { 3, s_6_29, 26, 9, 0} }; static const symbol s_7_0[3] = { 'e', 'j', 'a' }; static const symbol s_7_1[3] = { 'm', 'm', 'a' }; static const symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; static const symbol s_7_3[3] = { 'm', 'p', 'a' }; static const symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; static const symbol s_7_5[3] = { 'm', 'm', 'i' }; static const symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; static const symbol s_7_7[3] = { 'm', 'p', 'i' }; static const symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; static const symbol s_7_9[3] = { 'e', 'j', 0xE4 }; static const symbol s_7_10[3] = { 'm', 'm', 0xE4 }; static const symbol s_7_11[4] = { 'i', 'm', 'm', 0xE4 }; static const symbol s_7_12[3] = { 'm', 'p', 0xE4 }; static const symbol s_7_13[4] = { 'i', 'm', 'p', 0xE4 }; static const struct among a_7[14] = { /* 0 */ { 3, s_7_0, -1, -1, 0}, /* 1 */ { 3, s_7_1, -1, 1, 0}, /* 2 */ { 4, s_7_2, 1, -1, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 4, s_7_4, 3, -1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 4, s_7_6, 5, -1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 4, s_7_8, 7, -1, 0}, /* 9 */ { 3, s_7_9, -1, -1, 0}, /* 10 */ { 3, s_7_10, -1, 1, 0}, /* 11 */ { 4, s_7_11, 10, -1, 0}, /* 12 */ { 3, s_7_12, -1, 1, 0}, /* 13 */ { 4, s_7_13, 12, -1, 0} }; static const symbol s_8_0[1] = { 'i' }; static const symbol s_8_1[1] = { 'j' }; static const struct among a_8[2] = { /* 0 */ { 1, s_8_0, -1, -1, 0}, /* 1 */ { 1, s_8_1, -1, -1, 0} }; static const symbol s_9_0[3] = { 'm', 'm', 'a' }; static const symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; static const struct among a_9[2] = { /* 0 */ { 3, s_9_0, -1, 1, 0}, /* 1 */ { 4, s_9_1, 0, -1, 0} }; static const unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; static const unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; static const unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; static const unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; static const symbol s_0[] = { 'k', 's', 'e' }; static const symbol s_1[] = { 'k', 's', 'i' }; static const symbol s_2[] = { 'i', 'e' }; static const symbol s_3[] = { 'p', 'o' }; static const symbol s_4[] = { 'p', 'o' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 43 */ z->I[1] = z->l; /* $p2 = , line 44 */ if (out_grouping(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 46 */ { /* gopast */ /* non V1, line 46 */ int ret = in_grouping(z, g_V1, 97, 246, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 46 */ if (out_grouping(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 47 */ { /* gopast */ /* non V1, line 47 */ int ret = in_grouping(z, g_V1, 97, 246, 1); if (ret < 0) return 0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 47 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 52 */ return 1; } static int r_particle_etc(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 55 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 55 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 55 */ among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 55 */ z->lb = mlimit1; } switch (among_var) { /* among, line 56 */ case 0: return 0; case 1: if (in_grouping_b(z, g_particle_end, 97, 246, 0)) return 0; /* grouping particle_end, line 62 */ break; case 2: { int ret = r_R2(z); /* call R2, line 64 */ if (ret <= 0) return ret; } break; } { int ret = slice_del(z); /* delete, line 66 */ if (ret < 0) return ret; } return 1; } static int r_possessive(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 69 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 69 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 69 */ among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 69 */ z->lb = mlimit1; } switch (among_var) { /* among, line 70 */ case 0: return 0; case 1: { int m2 = z->l - z->c; (void)m2; /* not, line 72 */ if (z->c <= z->lb || z->p[z->c - 1] != 'k') goto lab0; /* literal, line 72 */ z->c--; return 0; lab0: z->c = z->l - m2; } { int ret = slice_del(z); /* delete, line 72 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 74 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 74 */ if (!(eq_s_b(z, 3, s_0))) return 0; /* literal, line 74 */ z->bra = z->c; /* ], line 74 */ { int ret = slice_from_s(z, 3, s_1); /* <-, line 74 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 78 */ if (ret < 0) return ret; } break; case 4: if (z->c - 1 <= z->lb || z->p[z->c - 1] != 97) return 0; /* among, line 81 */ if (!(find_among_b(z, a_1, 6))) return 0; { int ret = slice_del(z); /* delete, line 81 */ if (ret < 0) return ret; } break; case 5: if (z->c - 1 <= z->lb || z->p[z->c - 1] != 228) return 0; /* among, line 83 */ if (!(find_among_b(z, a_2, 6))) return 0; { int ret = slice_del(z); /* delete, line 84 */ if (ret < 0) return ret; } break; case 6: if (z->c - 2 <= z->lb || z->p[z->c - 1] != 101) return 0; /* among, line 86 */ if (!(find_among_b(z, a_3, 2))) return 0; { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } break; } return 1; } static int r_LONG(struct SN_env * z) { /* backwardmode */ if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ return 1; } static int r_VI(struct SN_env * z) { /* backwardmode */ if (z->c <= z->lb || z->p[z->c - 1] != 'i') return 0; /* literal, line 93 */ z->c--; if (in_grouping_b(z, g_V2, 97, 246, 0)) return 0; /* grouping V2, line 93 */ return 1; } static int r_case_ending(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 96 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 96 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 96 */ among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 96 */ z->lb = mlimit1; } switch (among_var) { /* among, line 97 */ case 0: return 0; case 1: if (z->c <= z->lb || z->p[z->c - 1] != 'a') return 0; /* literal, line 98 */ z->c--; break; case 2: if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 99 */ z->c--; break; case 3: if (z->c <= z->lb || z->p[z->c - 1] != 'i') return 0; /* literal, line 100 */ z->c--; break; case 4: if (z->c <= z->lb || z->p[z->c - 1] != 'o') return 0; /* literal, line 101 */ z->c--; break; case 5: if (z->c <= z->lb || z->p[z->c - 1] != 0xE4) return 0; /* literal, line 102 */ z->c--; break; case 6: if (z->c <= z->lb || z->p[z->c - 1] != 0xF6) return 0; /* literal, line 103 */ z->c--; break; case 7: { int m2 = z->l - z->c; (void)m2; /* try, line 111 */ { int m3 = z->l - z->c; (void)m3; /* and, line 113 */ { int m4 = z->l - z->c; (void)m4; /* or, line 112 */ { int ret = r_LONG(z); /* call LONG, line 111 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m4; if (!(eq_s_b(z, 2, s_2))) { z->c = z->l - m2; goto lab0; } /* literal, line 112 */ } lab1: z->c = z->l - m3; if (z->c <= z->lb) { z->c = z->l - m2; goto lab0; } z->c--; /* next, line 113 */ } z->bra = z->c; /* ], line 113 */ lab0: ; } break; case 8: if (in_grouping_b(z, g_V1, 97, 246, 0)) return 0; /* grouping V1, line 119 */ if (out_grouping_b(z, g_V1, 97, 246, 0)) return 0; /* non V1, line 119 */ break; case 9: if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 121 */ z->c--; break; } { int ret = slice_del(z); /* delete, line 138 */ if (ret < 0) return ret; } z->B[0] = 1; /* set ending_removed, line 139 */ return 1; } static int r_other_endings(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 142 */ int mlimit1; if (z->c < z->I[1]) return 0; z->c = z->I[1]; /* tomark, line 142 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 142 */ among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 142 */ z->lb = mlimit1; } switch (among_var) { /* among, line 143 */ case 0: return 0; case 1: { int m2 = z->l - z->c; (void)m2; /* not, line 146 */ if (!(eq_s_b(z, 2, s_3))) goto lab0; /* literal, line 146 */ return 0; lab0: z->c = z->l - m2; } break; } { int ret = slice_del(z); /* delete, line 151 */ if (ret < 0) return ret; } return 1; } static int r_i_plural(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 154 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 154 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 154 */ if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 106)) { z->lb = mlimit1; return 0; } /* substring, line 154 */ if (!(find_among_b(z, a_8, 2))) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 154 */ z->lb = mlimit1; } { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } return 1; } static int r_t_plural(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 161 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 161 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 162 */ if (z->c <= z->lb || z->p[z->c - 1] != 't') { z->lb = mlimit1; return 0; } /* literal, line 162 */ z->c--; z->bra = z->c; /* ], line 162 */ { int m_test2 = z->l - z->c; /* test, line 162 */ if (in_grouping_b(z, g_V1, 97, 246, 0)) { z->lb = mlimit1; return 0; } /* grouping V1, line 162 */ z->c = z->l - m_test2; } { int ret = slice_del(z); /* delete, line 163 */ if (ret < 0) return ret; } z->lb = mlimit1; } { int m3 = z->l - z->c; (void)m3; /* setlimit, line 165 */ int mlimit3; if (z->c < z->I[1]) return 0; z->c = z->I[1]; /* tomark, line 165 */ mlimit3 = z->lb; z->lb = z->c; z->c = z->l - m3; z->ket = z->c; /* [, line 165 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] != 97) { z->lb = mlimit3; return 0; } /* substring, line 165 */ among_var = find_among_b(z, a_9, 2); if (!(among_var)) { z->lb = mlimit3; return 0; } z->bra = z->c; /* ], line 165 */ z->lb = mlimit3; } switch (among_var) { /* among, line 166 */ case 0: return 0; case 1: { int m4 = z->l - z->c; (void)m4; /* not, line 167 */ if (!(eq_s_b(z, 2, s_4))) goto lab0; /* literal, line 167 */ return 0; lab0: z->c = z->l - m4; } break; } { int ret = slice_del(z); /* delete, line 170 */ if (ret < 0) return ret; } return 1; } static int r_tidy(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 173 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 173 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; { int m2 = z->l - z->c; (void)m2; /* do, line 174 */ { int m3 = z->l - z->c; (void)m3; /* and, line 174 */ { int ret = r_LONG(z); /* call LONG, line 174 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } z->c = z->l - m3; z->ket = z->c; /* [, line 174 */ if (z->c <= z->lb) goto lab0; z->c--; /* next, line 174 */ z->bra = z->c; /* ], line 174 */ { int ret = slice_del(z); /* delete, line 174 */ if (ret < 0) return ret; } } lab0: z->c = z->l - m2; } { int m4 = z->l - z->c; (void)m4; /* do, line 175 */ z->ket = z->c; /* [, line 175 */ if (in_grouping_b(z, g_AEI, 97, 228, 0)) goto lab1; /* grouping AEI, line 175 */ z->bra = z->c; /* ], line 175 */ if (out_grouping_b(z, g_V1, 97, 246, 0)) goto lab1; /* non V1, line 175 */ { int ret = slice_del(z); /* delete, line 175 */ if (ret < 0) return ret; } lab1: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 176 */ z->ket = z->c; /* [, line 176 */ if (z->c <= z->lb || z->p[z->c - 1] != 'j') goto lab2; /* literal, line 176 */ z->c--; z->bra = z->c; /* ], line 176 */ { int m6 = z->l - z->c; (void)m6; /* or, line 176 */ if (z->c <= z->lb || z->p[z->c - 1] != 'o') goto lab4; /* literal, line 176 */ z->c--; goto lab3; lab4: z->c = z->l - m6; if (z->c <= z->lb || z->p[z->c - 1] != 'u') goto lab2; /* literal, line 176 */ z->c--; } lab3: { int ret = slice_del(z); /* delete, line 176 */ if (ret < 0) return ret; } lab2: z->c = z->l - m5; } { int m7 = z->l - z->c; (void)m7; /* do, line 177 */ z->ket = z->c; /* [, line 177 */ if (z->c <= z->lb || z->p[z->c - 1] != 'o') goto lab5; /* literal, line 177 */ z->c--; z->bra = z->c; /* ], line 177 */ if (z->c <= z->lb || z->p[z->c - 1] != 'j') goto lab5; /* literal, line 177 */ z->c--; { int ret = slice_del(z); /* delete, line 177 */ if (ret < 0) return ret; } lab5: z->c = z->l - m7; } z->lb = mlimit1; } if (in_grouping_b(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* non V1, line 179 */ z->ket = z->c; /* [, line 179 */ if (z->c <= z->lb) return 0; z->c--; /* next, line 179 */ z->bra = z->c; /* ], line 179 */ z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ if (z->S[0] == 0) return -1; /* -> x, line 179 */ if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } return 1; } extern int finnish_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 185 */ { int ret = r_mark_regions(z); /* call mark_regions, line 185 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->B[0] = 0; /* unset ending_removed, line 186 */ z->lb = z->c; z->c = z->l; /* backwards, line 187 */ { int m2 = z->l - z->c; (void)m2; /* do, line 188 */ { int ret = r_particle_etc(z); /* call particle_etc, line 188 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 189 */ { int ret = r_possessive(z); /* call possessive, line 189 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 190 */ { int ret = r_case_ending(z); /* call case_ending, line 190 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 191 */ { int ret = r_other_endings(z); /* call other_endings, line 191 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* or, line 192 */ if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ { int m7 = z->l - z->c; (void)m7; /* do, line 192 */ { int ret = r_i_plural(z); /* call i_plural, line 192 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m7; } goto lab5; lab6: z->c = z->l - m6; { int m8 = z->l - z->c; (void)m8; /* do, line 192 */ { int ret = r_t_plural(z); /* call t_plural, line 192 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m8; } } lab5: { int m9 = z->l - z->c; (void)m9; /* do, line 193 */ { int ret = r_tidy(z); /* call tidy, line 193 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m9; } z->c = z->lb; return 1; } extern struct SN_env * finnish_ISO_8859_1_create_env(void) { return SN_create_env(1, 2, 1); } extern void finnish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 1); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_finnish.h000066400000000000000000000005451364126773500243060ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * finnish_ISO_8859_1_create_env(void); extern void finnish_ISO_8859_1_close_env(struct SN_env * z); extern int finnish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_french.c000066400000000000000000001361601364126773500241130ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int french_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_un_accent(struct SN_env * z); static int r_un_double(struct SN_env * z); static int r_residual_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_i_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * french_ISO_8859_1_create_env(void); extern void french_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[3] = { 'c', 'o', 'l' }; static const symbol s_0_1[3] = { 'p', 'a', 'r' }; static const symbol s_0_2[3] = { 't', 'a', 'p' }; static const struct among a_0[3] = { /* 0 */ { 3, s_0_0, -1, -1, 0}, /* 1 */ { 3, s_0_1, -1, -1, 0}, /* 2 */ { 3, s_0_2, -1, -1, 0} }; static const symbol s_1_1[1] = { 'I' }; static const symbol s_1_2[1] = { 'U' }; static const symbol s_1_3[1] = { 'Y' }; static const struct among a_1[4] = { /* 0 */ { 0, 0, -1, 4, 0}, /* 1 */ { 1, s_1_1, 0, 1, 0}, /* 2 */ { 1, s_1_2, 0, 2, 0}, /* 3 */ { 1, s_1_3, 0, 3, 0} }; static const symbol s_2_0[3] = { 'i', 'q', 'U' }; static const symbol s_2_1[3] = { 'a', 'b', 'l' }; static const symbol s_2_2[3] = { 'I', 0xE8, 'r' }; static const symbol s_2_3[3] = { 'i', 0xE8, 'r' }; static const symbol s_2_4[3] = { 'e', 'u', 's' }; static const symbol s_2_5[2] = { 'i', 'v' }; static const struct among a_2[6] = { /* 0 */ { 3, s_2_0, -1, 3, 0}, /* 1 */ { 3, s_2_1, -1, 3, 0}, /* 2 */ { 3, s_2_2, -1, 4, 0}, /* 3 */ { 3, s_2_3, -1, 4, 0}, /* 4 */ { 3, s_2_4, -1, 2, 0}, /* 5 */ { 2, s_2_5, -1, 1, 0} }; static const symbol s_3_0[2] = { 'i', 'c' }; static const symbol s_3_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_3_2[2] = { 'i', 'v' }; static const struct among a_3[3] = { /* 0 */ { 2, s_3_0, -1, 2, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0}, /* 2 */ { 2, s_3_2, -1, 3, 0} }; static const symbol s_4_0[4] = { 'i', 'q', 'U', 'e' }; static const symbol s_4_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; static const symbol s_4_2[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_4_3[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_4_4[5] = { 'l', 'o', 'g', 'i', 'e' }; static const symbol s_4_5[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_4_6[4] = { 'i', 's', 'm', 'e' }; static const symbol s_4_7[4] = { 'e', 'u', 's', 'e' }; static const symbol s_4_8[4] = { 'i', 's', 't', 'e' }; static const symbol s_4_9[3] = { 'i', 'v', 'e' }; static const symbol s_4_10[2] = { 'i', 'f' }; static const symbol s_4_11[5] = { 'u', 's', 'i', 'o', 'n' }; static const symbol s_4_12[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_4_13[5] = { 'u', 't', 'i', 'o', 'n' }; static const symbol s_4_14[5] = { 'a', 't', 'e', 'u', 'r' }; static const symbol s_4_15[5] = { 'i', 'q', 'U', 'e', 's' }; static const symbol s_4_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; static const symbol s_4_17[5] = { 'a', 'n', 'c', 'e', 's' }; static const symbol s_4_18[5] = { 'e', 'n', 'c', 'e', 's' }; static const symbol s_4_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; static const symbol s_4_20[5] = { 'a', 'b', 'l', 'e', 's' }; static const symbol s_4_21[5] = { 'i', 's', 'm', 'e', 's' }; static const symbol s_4_22[5] = { 'e', 'u', 's', 'e', 's' }; static const symbol s_4_23[5] = { 'i', 's', 't', 'e', 's' }; static const symbol s_4_24[4] = { 'i', 'v', 'e', 's' }; static const symbol s_4_25[3] = { 'i', 'f', 's' }; static const symbol s_4_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; static const symbol s_4_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; static const symbol s_4_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; static const symbol s_4_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; static const symbol s_4_30[5] = { 'm', 'e', 'n', 't', 's' }; static const symbol s_4_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; static const symbol s_4_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; static const symbol s_4_33[4] = { 'i', 't', 0xE9, 's' }; static const symbol s_4_34[4] = { 'm', 'e', 'n', 't' }; static const symbol s_4_35[5] = { 'e', 'm', 'e', 'n', 't' }; static const symbol s_4_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; static const symbol s_4_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; static const symbol s_4_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; static const symbol s_4_39[3] = { 'a', 'u', 'x' }; static const symbol s_4_40[4] = { 'e', 'a', 'u', 'x' }; static const symbol s_4_41[3] = { 'e', 'u', 'x' }; static const symbol s_4_42[3] = { 'i', 't', 0xE9 }; static const struct among a_4[43] = { /* 0 */ { 4, s_4_0, -1, 1, 0}, /* 1 */ { 6, s_4_1, -1, 2, 0}, /* 2 */ { 4, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 5, 0}, /* 4 */ { 5, s_4_4, -1, 3, 0}, /* 5 */ { 4, s_4_5, -1, 1, 0}, /* 6 */ { 4, s_4_6, -1, 1, 0}, /* 7 */ { 4, s_4_7, -1, 11, 0}, /* 8 */ { 4, s_4_8, -1, 1, 0}, /* 9 */ { 3, s_4_9, -1, 8, 0}, /* 10 */ { 2, s_4_10, -1, 8, 0}, /* 11 */ { 5, s_4_11, -1, 4, 0}, /* 12 */ { 5, s_4_12, -1, 2, 0}, /* 13 */ { 5, s_4_13, -1, 4, 0}, /* 14 */ { 5, s_4_14, -1, 2, 0}, /* 15 */ { 5, s_4_15, -1, 1, 0}, /* 16 */ { 7, s_4_16, -1, 2, 0}, /* 17 */ { 5, s_4_17, -1, 1, 0}, /* 18 */ { 5, s_4_18, -1, 5, 0}, /* 19 */ { 6, s_4_19, -1, 3, 0}, /* 20 */ { 5, s_4_20, -1, 1, 0}, /* 21 */ { 5, s_4_21, -1, 1, 0}, /* 22 */ { 5, s_4_22, -1, 11, 0}, /* 23 */ { 5, s_4_23, -1, 1, 0}, /* 24 */ { 4, s_4_24, -1, 8, 0}, /* 25 */ { 3, s_4_25, -1, 8, 0}, /* 26 */ { 6, s_4_26, -1, 4, 0}, /* 27 */ { 6, s_4_27, -1, 2, 0}, /* 28 */ { 6, s_4_28, -1, 4, 0}, /* 29 */ { 6, s_4_29, -1, 2, 0}, /* 30 */ { 5, s_4_30, -1, 15, 0}, /* 31 */ { 6, s_4_31, 30, 6, 0}, /* 32 */ { 9, s_4_32, 31, 12, 0}, /* 33 */ { 4, s_4_33, -1, 7, 0}, /* 34 */ { 4, s_4_34, -1, 15, 0}, /* 35 */ { 5, s_4_35, 34, 6, 0}, /* 36 */ { 8, s_4_36, 35, 12, 0}, /* 37 */ { 6, s_4_37, 34, 13, 0}, /* 38 */ { 6, s_4_38, 34, 14, 0}, /* 39 */ { 3, s_4_39, -1, 10, 0}, /* 40 */ { 4, s_4_40, 39, 9, 0}, /* 41 */ { 3, s_4_41, -1, 1, 0}, /* 42 */ { 3, s_4_42, -1, 7, 0} }; static const symbol s_5_0[3] = { 'i', 'r', 'a' }; static const symbol s_5_1[2] = { 'i', 'e' }; static const symbol s_5_2[4] = { 'i', 's', 's', 'e' }; static const symbol s_5_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; static const symbol s_5_4[1] = { 'i' }; static const symbol s_5_5[4] = { 'i', 'r', 'a', 'i' }; static const symbol s_5_6[2] = { 'i', 'r' }; static const symbol s_5_7[4] = { 'i', 'r', 'a', 's' }; static const symbol s_5_8[3] = { 'i', 'e', 's' }; static const symbol s_5_9[4] = { 0xEE, 'm', 'e', 's' }; static const symbol s_5_10[5] = { 'i', 's', 's', 'e', 's' }; static const symbol s_5_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; static const symbol s_5_12[4] = { 0xEE, 't', 'e', 's' }; static const symbol s_5_13[2] = { 'i', 's' }; static const symbol s_5_14[5] = { 'i', 'r', 'a', 'i', 's' }; static const symbol s_5_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; static const symbol s_5_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; static const symbol s_5_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; static const symbol s_5_18[5] = { 'i', 'r', 'o', 'n', 's' }; static const symbol s_5_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; static const symbol s_5_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; static const symbol s_5_21[2] = { 'i', 't' }; static const symbol s_5_22[5] = { 'i', 'r', 'a', 'i', 't' }; static const symbol s_5_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; static const symbol s_5_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; static const symbol s_5_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; static const symbol s_5_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; static const symbol s_5_27[5] = { 'i', 'r', 'e', 'n', 't' }; static const symbol s_5_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; static const symbol s_5_29[5] = { 'i', 'r', 'o', 'n', 't' }; static const symbol s_5_30[2] = { 0xEE, 't' }; static const symbol s_5_31[5] = { 'i', 'r', 'i', 'e', 'z' }; static const symbol s_5_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; static const symbol s_5_33[4] = { 'i', 'r', 'e', 'z' }; static const symbol s_5_34[5] = { 'i', 's', 's', 'e', 'z' }; static const struct among a_5[35] = { /* 0 */ { 3, s_5_0, -1, 1, 0}, /* 1 */ { 2, s_5_1, -1, 1, 0}, /* 2 */ { 4, s_5_2, -1, 1, 0}, /* 3 */ { 7, s_5_3, -1, 1, 0}, /* 4 */ { 1, s_5_4, -1, 1, 0}, /* 5 */ { 4, s_5_5, 4, 1, 0}, /* 6 */ { 2, s_5_6, -1, 1, 0}, /* 7 */ { 4, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 1, 0}, /* 9 */ { 4, s_5_9, -1, 1, 0}, /* 10 */ { 5, s_5_10, -1, 1, 0}, /* 11 */ { 8, s_5_11, -1, 1, 0}, /* 12 */ { 4, s_5_12, -1, 1, 0}, /* 13 */ { 2, s_5_13, -1, 1, 0}, /* 14 */ { 5, s_5_14, 13, 1, 0}, /* 15 */ { 6, s_5_15, 13, 1, 0}, /* 16 */ { 6, s_5_16, -1, 1, 0}, /* 17 */ { 7, s_5_17, -1, 1, 0}, /* 18 */ { 5, s_5_18, -1, 1, 0}, /* 19 */ { 6, s_5_19, -1, 1, 0}, /* 20 */ { 7, s_5_20, -1, 1, 0}, /* 21 */ { 2, s_5_21, -1, 1, 0}, /* 22 */ { 5, s_5_22, 21, 1, 0}, /* 23 */ { 6, s_5_23, 21, 1, 0}, /* 24 */ { 6, s_5_24, -1, 1, 0}, /* 25 */ { 7, s_5_25, -1, 1, 0}, /* 26 */ { 8, s_5_26, -1, 1, 0}, /* 27 */ { 5, s_5_27, -1, 1, 0}, /* 28 */ { 6, s_5_28, -1, 1, 0}, /* 29 */ { 5, s_5_29, -1, 1, 0}, /* 30 */ { 2, s_5_30, -1, 1, 0}, /* 31 */ { 5, s_5_31, -1, 1, 0}, /* 32 */ { 6, s_5_32, -1, 1, 0}, /* 33 */ { 4, s_5_33, -1, 1, 0}, /* 34 */ { 5, s_5_34, -1, 1, 0} }; static const symbol s_6_0[1] = { 'a' }; static const symbol s_6_1[3] = { 'e', 'r', 'a' }; static const symbol s_6_2[4] = { 'a', 's', 's', 'e' }; static const symbol s_6_3[4] = { 'a', 'n', 't', 'e' }; static const symbol s_6_4[2] = { 0xE9, 'e' }; static const symbol s_6_5[2] = { 'a', 'i' }; static const symbol s_6_6[4] = { 'e', 'r', 'a', 'i' }; static const symbol s_6_7[2] = { 'e', 'r' }; static const symbol s_6_8[2] = { 'a', 's' }; static const symbol s_6_9[4] = { 'e', 'r', 'a', 's' }; static const symbol s_6_10[4] = { 0xE2, 'm', 'e', 's' }; static const symbol s_6_11[5] = { 'a', 's', 's', 'e', 's' }; static const symbol s_6_12[5] = { 'a', 'n', 't', 'e', 's' }; static const symbol s_6_13[4] = { 0xE2, 't', 'e', 's' }; static const symbol s_6_14[3] = { 0xE9, 'e', 's' }; static const symbol s_6_15[3] = { 'a', 'i', 's' }; static const symbol s_6_16[5] = { 'e', 'r', 'a', 'i', 's' }; static const symbol s_6_17[4] = { 'i', 'o', 'n', 's' }; static const symbol s_6_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; static const symbol s_6_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; static const symbol s_6_20[5] = { 'e', 'r', 'o', 'n', 's' }; static const symbol s_6_21[4] = { 'a', 'n', 't', 's' }; static const symbol s_6_22[2] = { 0xE9, 's' }; static const symbol s_6_23[3] = { 'a', 'i', 't' }; static const symbol s_6_24[5] = { 'e', 'r', 'a', 'i', 't' }; static const symbol s_6_25[3] = { 'a', 'n', 't' }; static const symbol s_6_26[5] = { 'a', 'I', 'e', 'n', 't' }; static const symbol s_6_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; static const symbol s_6_28[5] = { 0xE8, 'r', 'e', 'n', 't' }; static const symbol s_6_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; static const symbol s_6_30[5] = { 'e', 'r', 'o', 'n', 't' }; static const symbol s_6_31[2] = { 0xE2, 't' }; static const symbol s_6_32[2] = { 'e', 'z' }; static const symbol s_6_33[3] = { 'i', 'e', 'z' }; static const symbol s_6_34[5] = { 'e', 'r', 'i', 'e', 'z' }; static const symbol s_6_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; static const symbol s_6_36[4] = { 'e', 'r', 'e', 'z' }; static const symbol s_6_37[1] = { 0xE9 }; static const struct among a_6[38] = { /* 0 */ { 1, s_6_0, -1, 3, 0}, /* 1 */ { 3, s_6_1, 0, 2, 0}, /* 2 */ { 4, s_6_2, -1, 3, 0}, /* 3 */ { 4, s_6_3, -1, 3, 0}, /* 4 */ { 2, s_6_4, -1, 2, 0}, /* 5 */ { 2, s_6_5, -1, 3, 0}, /* 6 */ { 4, s_6_6, 5, 2, 0}, /* 7 */ { 2, s_6_7, -1, 2, 0}, /* 8 */ { 2, s_6_8, -1, 3, 0}, /* 9 */ { 4, s_6_9, 8, 2, 0}, /* 10 */ { 4, s_6_10, -1, 3, 0}, /* 11 */ { 5, s_6_11, -1, 3, 0}, /* 12 */ { 5, s_6_12, -1, 3, 0}, /* 13 */ { 4, s_6_13, -1, 3, 0}, /* 14 */ { 3, s_6_14, -1, 2, 0}, /* 15 */ { 3, s_6_15, -1, 3, 0}, /* 16 */ { 5, s_6_16, 15, 2, 0}, /* 17 */ { 4, s_6_17, -1, 1, 0}, /* 18 */ { 6, s_6_18, 17, 2, 0}, /* 19 */ { 7, s_6_19, 17, 3, 0}, /* 20 */ { 5, s_6_20, -1, 2, 0}, /* 21 */ { 4, s_6_21, -1, 3, 0}, /* 22 */ { 2, s_6_22, -1, 2, 0}, /* 23 */ { 3, s_6_23, -1, 3, 0}, /* 24 */ { 5, s_6_24, 23, 2, 0}, /* 25 */ { 3, s_6_25, -1, 3, 0}, /* 26 */ { 5, s_6_26, -1, 3, 0}, /* 27 */ { 7, s_6_27, 26, 2, 0}, /* 28 */ { 5, s_6_28, -1, 2, 0}, /* 29 */ { 6, s_6_29, -1, 3, 0}, /* 30 */ { 5, s_6_30, -1, 2, 0}, /* 31 */ { 2, s_6_31, -1, 3, 0}, /* 32 */ { 2, s_6_32, -1, 2, 0}, /* 33 */ { 3, s_6_33, 32, 2, 0}, /* 34 */ { 5, s_6_34, 33, 2, 0}, /* 35 */ { 6, s_6_35, 33, 3, 0}, /* 36 */ { 4, s_6_36, 32, 2, 0}, /* 37 */ { 1, s_6_37, -1, 2, 0} }; static const symbol s_7_0[1] = { 'e' }; static const symbol s_7_1[4] = { 'I', 0xE8, 'r', 'e' }; static const symbol s_7_2[4] = { 'i', 0xE8, 'r', 'e' }; static const symbol s_7_3[3] = { 'i', 'o', 'n' }; static const symbol s_7_4[3] = { 'I', 'e', 'r' }; static const symbol s_7_5[3] = { 'i', 'e', 'r' }; static const symbol s_7_6[1] = { 0xEB }; static const struct among a_7[7] = { /* 0 */ { 1, s_7_0, -1, 3, 0}, /* 1 */ { 4, s_7_1, 0, 2, 0}, /* 2 */ { 4, s_7_2, 0, 2, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 3, s_7_4, -1, 2, 0}, /* 5 */ { 3, s_7_5, -1, 2, 0}, /* 6 */ { 1, s_7_6, -1, 4, 0} }; static const symbol s_8_0[3] = { 'e', 'l', 'l' }; static const symbol s_8_1[4] = { 'e', 'i', 'l', 'l' }; static const symbol s_8_2[3] = { 'e', 'n', 'n' }; static const symbol s_8_3[3] = { 'o', 'n', 'n' }; static const symbol s_8_4[3] = { 'e', 't', 't' }; static const struct among a_8[5] = { /* 0 */ { 3, s_8_0, -1, -1, 0}, /* 1 */ { 4, s_8_1, -1, -1, 0}, /* 2 */ { 3, s_8_2, -1, -1, 0}, /* 3 */ { 3, s_8_3, -1, -1, 0}, /* 4 */ { 3, s_8_4, -1, -1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; static const unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const symbol s_0[] = { 'U' }; static const symbol s_1[] = { 'I' }; static const symbol s_2[] = { 'Y' }; static const symbol s_3[] = { 'Y' }; static const symbol s_4[] = { 'U' }; static const symbol s_5[] = { 'i' }; static const symbol s_6[] = { 'u' }; static const symbol s_7[] = { 'y' }; static const symbol s_8[] = { 'i', 'c' }; static const symbol s_9[] = { 'i', 'q', 'U' }; static const symbol s_10[] = { 'l', 'o', 'g' }; static const symbol s_11[] = { 'u' }; static const symbol s_12[] = { 'e', 'n', 't' }; static const symbol s_13[] = { 'a', 't' }; static const symbol s_14[] = { 'e', 'u', 'x' }; static const symbol s_15[] = { 'i' }; static const symbol s_16[] = { 'a', 'b', 'l' }; static const symbol s_17[] = { 'i', 'q', 'U' }; static const symbol s_18[] = { 'a', 't' }; static const symbol s_19[] = { 'i', 'c' }; static const symbol s_20[] = { 'i', 'q', 'U' }; static const symbol s_21[] = { 'e', 'a', 'u' }; static const symbol s_22[] = { 'a', 'l' }; static const symbol s_23[] = { 'e', 'u', 'x' }; static const symbol s_24[] = { 'a', 'n', 't' }; static const symbol s_25[] = { 'e', 'n', 't' }; static const symbol s_26[] = { 'i' }; static const symbol s_27[] = { 'g', 'u' }; static const symbol s_28[] = { 'e' }; static const symbol s_29[] = { 'i' }; static const symbol s_30[] = { 'c' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ while(1) { /* repeat, line 38 */ int c1 = z->c; while(1) { /* goto, line 38 */ int c2 = z->c; { int c3 = z->c; /* or, line 44 */ if (in_grouping(z, g_v, 97, 251, 0)) goto lab3; /* grouping v, line 40 */ z->bra = z->c; /* [, line 40 */ { int c4 = z->c; /* or, line 40 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab5; /* literal, line 40 */ z->c++; z->ket = z->c; /* ], line 40 */ if (in_grouping(z, g_v, 97, 251, 0)) goto lab5; /* grouping v, line 40 */ { int ret = slice_from_s(z, 1, s_0); /* <-, line 40 */ if (ret < 0) return ret; } goto lab4; lab5: z->c = c4; if (z->c == z->l || z->p[z->c] != 'i') goto lab6; /* literal, line 41 */ z->c++; z->ket = z->c; /* ], line 41 */ if (in_grouping(z, g_v, 97, 251, 0)) goto lab6; /* grouping v, line 41 */ { int ret = slice_from_s(z, 1, s_1); /* <-, line 41 */ if (ret < 0) return ret; } goto lab4; lab6: z->c = c4; if (z->c == z->l || z->p[z->c] != 'y') goto lab3; /* literal, line 42 */ z->c++; z->ket = z->c; /* ], line 42 */ { int ret = slice_from_s(z, 1, s_2); /* <-, line 42 */ if (ret < 0) return ret; } } lab4: goto lab2; lab3: z->c = c3; z->bra = z->c; /* [, line 45 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab7; /* literal, line 45 */ z->c++; z->ket = z->c; /* ], line 45 */ if (in_grouping(z, g_v, 97, 251, 0)) goto lab7; /* grouping v, line 45 */ { int ret = slice_from_s(z, 1, s_3); /* <-, line 45 */ if (ret < 0) return ret; } goto lab2; lab7: z->c = c3; if (z->c == z->l || z->p[z->c] != 'q') goto lab1; /* literal, line 47 */ z->c++; z->bra = z->c; /* [, line 47 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab1; /* literal, line 47 */ z->c++; z->ket = z->c; /* ], line 47 */ { int ret = slice_from_s(z, 1, s_4); /* <-, line 47 */ if (ret < 0) return ret; } } lab2: z->c = c2; break; lab1: z->c = c2; if (z->c >= z->l) goto lab0; z->c++; /* goto, line 38 */ } continue; lab0: z->c = c1; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 52 */ z->I[1] = z->l; /* $p1 = , line 53 */ z->I[2] = z->l; /* $p2 = , line 54 */ { int c1 = z->c; /* do, line 56 */ { int c2 = z->c; /* or, line 58 */ if (in_grouping(z, g_v, 97, 251, 0)) goto lab2; /* grouping v, line 57 */ if (in_grouping(z, g_v, 97, 251, 0)) goto lab2; /* grouping v, line 57 */ if (z->c >= z->l) goto lab2; z->c++; /* next, line 57 */ goto lab1; lab2: z->c = c2; if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((331776 >> (z->p[z->c + 2] & 0x1f)) & 1)) goto lab3; /* among, line 59 */ if (!(find_among(z, a_0, 3))) goto lab3; goto lab1; lab3: z->c = c2; if (z->c >= z->l) goto lab0; z->c++; /* next, line 66 */ { /* gopast */ /* grouping v, line 66 */ int ret = out_grouping(z, g_v, 97, 251, 1); if (ret < 0) goto lab0; z->c += ret; } } lab1: z->I[0] = z->c; /* setmark pV, line 67 */ lab0: z->c = c1; } { int c3 = z->c; /* do, line 69 */ { /* gopast */ /* grouping v, line 70 */ int ret = out_grouping(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 70 */ int ret = in_grouping(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 70 */ { /* gopast */ /* grouping v, line 71 */ int ret = out_grouping(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 71 */ int ret = in_grouping(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 71 */ lab4: z->c = c3; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 75 */ int c1 = z->c; z->bra = z->c; /* [, line 77 */ if (z->c >= z->l || z->p[z->c + 0] >> 5 != 2 || !((35652096 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 4; else /* substring, line 77 */ among_var = find_among(z, a_1, 4); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 77 */ switch (among_var) { /* among, line 77 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_5); /* <-, line 78 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_6); /* <-, line 79 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_7); /* <-, line 80 */ if (ret < 0) return ret; } break; case 4: if (z->c >= z->l) goto lab0; z->c++; /* next, line 81 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 87 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 88 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 89 */ return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 92 */ among_var = find_among_b(z, a_4, 43); /* substring, line 92 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ switch (among_var) { /* among, line 92 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 96 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 99 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 100 */ z->ket = z->c; /* [, line 100 */ if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m1; goto lab0; } /* literal, line 100 */ z->bra = z->c; /* ], line 100 */ { int m2 = z->l - z->c; (void)m2; /* or, line 100 */ { int ret = r_R2(z); /* call R2, line 100 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 100 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m2; { int ret = slice_from_s(z, 3, s_9); /* <-, line 100 */ if (ret < 0) return ret; } } lab1: lab0: ; } break; case 3: { int ret = r_R2(z); /* call R2, line 104 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_10); /* <-, line 104 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 107 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_11); /* <-, line 107 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 110 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_12); /* <-, line 110 */ if (ret < 0) return ret; } break; case 6: { int ret = r_RV(z); /* call RV, line 114 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 114 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 115 */ z->ket = z->c; /* [, line 116 */ among_var = find_among_b(z, a_2, 6); /* substring, line 116 */ if (!(among_var)) { z->c = z->l - m3; goto lab3; } z->bra = z->c; /* ], line 116 */ switch (among_var) { /* among, line 116 */ case 0: { z->c = z->l - m3; goto lab3; } case 1: { int ret = r_R2(z); /* call R2, line 117 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 117 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 117 */ if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m3; goto lab3; } /* literal, line 117 */ z->bra = z->c; /* ], line 117 */ { int ret = r_R2(z); /* call R2, line 117 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 117 */ if (ret < 0) return ret; } break; case 2: { int m4 = z->l - z->c; (void)m4; /* or, line 118 */ { int ret = r_R2(z); /* call R2, line 118 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 118 */ if (ret < 0) return ret; } goto lab4; lab5: z->c = z->l - m4; { int ret = r_R1(z); /* call R1, line 118 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_from_s(z, 3, s_14); /* <-, line 118 */ if (ret < 0) return ret; } } lab4: break; case 3: { int ret = r_R2(z); /* call R2, line 120 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 120 */ if (ret < 0) return ret; } break; case 4: { int ret = r_RV(z); /* call RV, line 122 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_from_s(z, 1, s_15); /* <-, line 122 */ if (ret < 0) return ret; } break; } lab3: ; } break; case 7: { int ret = r_R2(z); /* call R2, line 129 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 129 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 130 */ z->ket = z->c; /* [, line 131 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m5; goto lab6; } /* substring, line 131 */ among_var = find_among_b(z, a_3, 3); if (!(among_var)) { z->c = z->l - m5; goto lab6; } z->bra = z->c; /* ], line 131 */ switch (among_var) { /* among, line 131 */ case 0: { z->c = z->l - m5; goto lab6; } case 1: { int m6 = z->l - z->c; (void)m6; /* or, line 132 */ { int ret = r_R2(z); /* call R2, line 132 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 132 */ if (ret < 0) return ret; } goto lab7; lab8: z->c = z->l - m6; { int ret = slice_from_s(z, 3, s_16); /* <-, line 132 */ if (ret < 0) return ret; } } lab7: break; case 2: { int m7 = z->l - z->c; (void)m7; /* or, line 133 */ { int ret = r_R2(z); /* call R2, line 133 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 133 */ if (ret < 0) return ret; } goto lab9; lab10: z->c = z->l - m7; { int ret = slice_from_s(z, 3, s_17); /* <-, line 133 */ if (ret < 0) return ret; } } lab9: break; case 3: { int ret = r_R2(z); /* call R2, line 134 */ if (ret == 0) { z->c = z->l - m5; goto lab6; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } break; } lab6: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 141 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 141 */ if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* try, line 142 */ z->ket = z->c; /* [, line 142 */ if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m8; goto lab11; } /* literal, line 142 */ z->bra = z->c; /* ], line 142 */ { int ret = r_R2(z); /* call R2, line 142 */ if (ret == 0) { z->c = z->l - m8; goto lab11; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 142 */ if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m8; goto lab11; } /* literal, line 142 */ z->bra = z->c; /* ], line 142 */ { int m9 = z->l - z->c; (void)m9; /* or, line 142 */ { int ret = r_R2(z); /* call R2, line 142 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } goto lab12; lab13: z->c = z->l - m9; { int ret = slice_from_s(z, 3, s_20); /* <-, line 142 */ if (ret < 0) return ret; } } lab12: lab11: ; } break; case 9: { int ret = slice_from_s(z, 3, s_21); /* <-, line 144 */ if (ret < 0) return ret; } break; case 10: { int ret = r_R1(z); /* call R1, line 145 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 2, s_22); /* <-, line 145 */ if (ret < 0) return ret; } break; case 11: { int m10 = z->l - z->c; (void)m10; /* or, line 147 */ { int ret = r_R2(z); /* call R2, line 147 */ if (ret == 0) goto lab15; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 147 */ if (ret < 0) return ret; } goto lab14; lab15: z->c = z->l - m10; { int ret = r_R1(z); /* call R1, line 147 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_23); /* <-, line 147 */ if (ret < 0) return ret; } } lab14: break; case 12: { int ret = r_R1(z); /* call R1, line 150 */ if (ret <= 0) return ret; } if (out_grouping_b(z, g_v, 97, 251, 0)) return 0; /* non v, line 150 */ { int ret = slice_del(z); /* delete, line 150 */ if (ret < 0) return ret; } break; case 13: { int ret = r_RV(z); /* call RV, line 155 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_24); /* <-, line 155 */ if (ret < 0) return ret; } return 0; /* fail, line 155 */ break; case 14: { int ret = r_RV(z); /* call RV, line 156 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_25); /* <-, line 156 */ if (ret < 0) return ret; } return 0; /* fail, line 156 */ break; case 15: { int m_test11 = z->l - z->c; /* test, line 158 */ if (in_grouping_b(z, g_v, 97, 251, 0)) return 0; /* grouping v, line 158 */ { int ret = r_RV(z); /* call RV, line 158 */ if (ret <= 0) return ret; } z->c = z->l - m_test11; } { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } return 0; /* fail, line 158 */ break; } return 1; } static int r_i_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 163 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 163 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 164 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68944418 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 164 */ among_var = find_among_b(z, a_5, 35); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 164 */ switch (among_var) { /* among, line 164 */ case 0: { z->lb = mlimit1; return 0; } case 1: if (out_grouping_b(z, g_v, 97, 251, 0)) { z->lb = mlimit1; return 0; } /* non v, line 170 */ { int ret = slice_del(z); /* delete, line 170 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 174 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 174 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 175 */ among_var = find_among_b(z, a_6, 38); /* substring, line 175 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 175 */ switch (among_var) { /* among, line 175 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = r_R2(z); /* call R2, line 177 */ if (ret == 0) { z->lb = mlimit1; return 0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 177 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 185 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 190 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 191 */ z->ket = z->c; /* [, line 191 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') { z->c = z->l - m2; goto lab0; } /* literal, line 191 */ z->c--; z->bra = z->c; /* ], line 191 */ { int ret = slice_del(z); /* delete, line 191 */ if (ret < 0) return ret; } lab0: ; } break; } z->lb = mlimit1; } return 1; } static int r_residual_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* try, line 199 */ z->ket = z->c; /* [, line 199 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') { z->c = z->l - m1; goto lab0; } /* literal, line 199 */ z->c--; z->bra = z->c; /* ], line 199 */ { int m_test2 = z->l - z->c; /* test, line 199 */ if (out_grouping_b(z, g_keep_with_s, 97, 232, 0)) { z->c = z->l - m1; goto lab0; } /* non keep_with_s, line 199 */ z->c = z->l - m_test2; } { int ret = slice_del(z); /* delete, line 199 */ if (ret < 0) return ret; } lab0: ; } { int m3 = z->l - z->c; (void)m3; /* setlimit, line 200 */ int mlimit3; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 200 */ mlimit3 = z->lb; z->lb = z->c; z->c = z->l - m3; z->ket = z->c; /* [, line 201 */ among_var = find_among_b(z, a_7, 7); /* substring, line 201 */ if (!(among_var)) { z->lb = mlimit3; return 0; } z->bra = z->c; /* ], line 201 */ switch (among_var) { /* among, line 201 */ case 0: { z->lb = mlimit3; return 0; } case 1: { int ret = r_R2(z); /* call R2, line 202 */ if (ret == 0) { z->lb = mlimit3; return 0; } if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* or, line 202 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab2; /* literal, line 202 */ z->c--; goto lab1; lab2: z->c = z->l - m4; if (z->c <= z->lb || z->p[z->c - 1] != 't') { z->lb = mlimit3; return 0; } /* literal, line 202 */ z->c--; } lab1: { int ret = slice_del(z); /* delete, line 202 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_26); /* <-, line 204 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 205 */ if (ret < 0) return ret; } break; case 4: if (!(eq_s_b(z, 2, s_27))) { z->lb = mlimit3; return 0; } /* literal, line 206 */ { int ret = slice_del(z); /* delete, line 206 */ if (ret < 0) return ret; } break; } z->lb = mlimit3; } return 1; } static int r_un_double(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 212 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1069056 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 212 */ if (!(find_among_b(z, a_8, 5))) return 0; z->c = z->l - m_test1; } z->ket = z->c; /* [, line 212 */ if (z->c <= z->lb) return 0; z->c--; /* next, line 212 */ z->bra = z->c; /* ], line 212 */ { int ret = slice_del(z); /* delete, line 212 */ if (ret < 0) return ret; } return 1; } static int r_un_accent(struct SN_env * z) { /* backwardmode */ { int i = 1; while(1) { /* atleast, line 216 */ if (out_grouping_b(z, g_v, 97, 251, 0)) goto lab0; /* non v, line 216 */ i--; continue; lab0: break; } if (i > 0) return 0; } z->ket = z->c; /* [, line 217 */ { int m1 = z->l - z->c; (void)m1; /* or, line 217 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xE9) goto lab2; /* literal, line 217 */ z->c--; goto lab1; lab2: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 0xE8) return 0; /* literal, line 217 */ z->c--; } lab1: z->bra = z->c; /* ], line 217 */ { int ret = slice_from_s(z, 1, s_28); /* <-, line 217 */ if (ret < 0) return ret; } return 1; } extern int french_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 223 */ { int ret = r_prelude(z); /* call prelude, line 223 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 224 */ { int ret = r_mark_regions(z); /* call mark_regions, line 224 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 225 */ { int m3 = z->l - z->c; (void)m3; /* do, line 227 */ { int m4 = z->l - z->c; (void)m4; /* or, line 237 */ { int m5 = z->l - z->c; (void)m5; /* and, line 233 */ { int m6 = z->l - z->c; (void)m6; /* or, line 229 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 229 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_i_verb_suffix(z); /* call i_verb_suffix, line 230 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } goto lab5; lab7: z->c = z->l - m6; { int ret = r_verb_suffix(z); /* call verb_suffix, line 231 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: z->c = z->l - m5; { int m7 = z->l - z->c; (void)m7; /* try, line 234 */ z->ket = z->c; /* [, line 234 */ { int m8 = z->l - z->c; (void)m8; /* or, line 234 */ if (z->c <= z->lb || z->p[z->c - 1] != 'Y') goto lab10; /* literal, line 234 */ z->c--; z->bra = z->c; /* ], line 234 */ { int ret = slice_from_s(z, 1, s_29); /* <-, line 234 */ if (ret < 0) return ret; } goto lab9; lab10: z->c = z->l - m8; if (z->c <= z->lb || z->p[z->c - 1] != 0xE7) { z->c = z->l - m7; goto lab8; } /* literal, line 235 */ z->c--; z->bra = z->c; /* ], line 235 */ { int ret = slice_from_s(z, 1, s_30); /* <-, line 235 */ if (ret < 0) return ret; } } lab9: lab8: ; } } goto lab3; lab4: z->c = z->l - m4; { int ret = r_residual_suffix(z); /* call residual_suffix, line 238 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } { int m9 = z->l - z->c; (void)m9; /* do, line 243 */ { int ret = r_un_double(z); /* call un_double, line 243 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } lab11: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 244 */ { int ret = r_un_accent(z); /* call un_accent, line 244 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } lab12: z->c = z->l - m10; } z->c = z->lb; { int c11 = z->c; /* do, line 246 */ { int ret = r_postlude(z); /* call postlude, line 246 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } lab13: z->c = c11; } return 1; } extern struct SN_env * french_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } extern void french_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_french.h000066400000000000000000000005421364126773500241120ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * french_ISO_8859_1_create_env(void); extern void french_ISO_8859_1_close_env(struct SN_env * z); extern int french_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_german.c000066400000000000000000000441471364126773500241220ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int german_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_standard_suffix(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * german_ISO_8859_1_create_env(void); extern void german_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 'U' }; static const symbol s_0_2[1] = { 'Y' }; static const symbol s_0_3[1] = { 0xE4 }; static const symbol s_0_4[1] = { 0xF6 }; static const symbol s_0_5[1] = { 0xFC }; static const struct among a_0[6] = { /* 0 */ { 0, 0, -1, 6, 0}, /* 1 */ { 1, s_0_1, 0, 2, 0}, /* 2 */ { 1, s_0_2, 0, 1, 0}, /* 3 */ { 1, s_0_3, 0, 3, 0}, /* 4 */ { 1, s_0_4, 0, 4, 0}, /* 5 */ { 1, s_0_5, 0, 5, 0} }; static const symbol s_1_0[1] = { 'e' }; static const symbol s_1_1[2] = { 'e', 'm' }; static const symbol s_1_2[2] = { 'e', 'n' }; static const symbol s_1_3[3] = { 'e', 'r', 'n' }; static const symbol s_1_4[2] = { 'e', 'r' }; static const symbol s_1_5[1] = { 's' }; static const symbol s_1_6[2] = { 'e', 's' }; static const struct among a_1[7] = { /* 0 */ { 1, s_1_0, -1, 2, 0}, /* 1 */ { 2, s_1_1, -1, 1, 0}, /* 2 */ { 2, s_1_2, -1, 2, 0}, /* 3 */ { 3, s_1_3, -1, 1, 0}, /* 4 */ { 2, s_1_4, -1, 1, 0}, /* 5 */ { 1, s_1_5, -1, 3, 0}, /* 6 */ { 2, s_1_6, 5, 2, 0} }; static const symbol s_2_0[2] = { 'e', 'n' }; static const symbol s_2_1[2] = { 'e', 'r' }; static const symbol s_2_2[2] = { 's', 't' }; static const symbol s_2_3[3] = { 'e', 's', 't' }; static const struct among a_2[4] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 2, s_2_1, -1, 1, 0}, /* 2 */ { 2, s_2_2, -1, 2, 0}, /* 3 */ { 3, s_2_3, 2, 1, 0} }; static const symbol s_3_0[2] = { 'i', 'g' }; static const symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; static const struct among a_3[2] = { /* 0 */ { 2, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0} }; static const symbol s_4_0[3] = { 'e', 'n', 'd' }; static const symbol s_4_1[2] = { 'i', 'g' }; static const symbol s_4_2[3] = { 'u', 'n', 'g' }; static const symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; static const symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; static const symbol s_4_5[2] = { 'i', 'k' }; static const symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; static const symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; static const struct among a_4[8] = { /* 0 */ { 3, s_4_0, -1, 1, 0}, /* 1 */ { 2, s_4_1, -1, 2, 0}, /* 2 */ { 3, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 3, 0}, /* 4 */ { 4, s_4_4, -1, 2, 0}, /* 5 */ { 2, s_4_5, -1, 2, 0}, /* 6 */ { 4, s_4_6, -1, 3, 0}, /* 7 */ { 4, s_4_7, -1, 4, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; static const unsigned char g_s_ending[] = { 117, 30, 5 }; static const unsigned char g_st_ending[] = { 117, 30, 4 }; static const symbol s_0[] = { 's', 's' }; static const symbol s_1[] = { 'U' }; static const symbol s_2[] = { 'Y' }; static const symbol s_3[] = { 'y' }; static const symbol s_4[] = { 'u' }; static const symbol s_5[] = { 'a' }; static const symbol s_6[] = { 'o' }; static const symbol s_7[] = { 'u' }; static const symbol s_8[] = { 'n', 'i', 's' }; static const symbol s_9[] = { 'i', 'g' }; static const symbol s_10[] = { 'e', 'r' }; static const symbol s_11[] = { 'e', 'n' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ { int c_test1 = z->c; /* test, line 35 */ while(1) { /* repeat, line 35 */ int c2 = z->c; { int c3 = z->c; /* or, line 38 */ z->bra = z->c; /* [, line 37 */ if (z->c == z->l || z->p[z->c] != 0xDF) goto lab2; /* literal, line 37 */ z->c++; z->ket = z->c; /* ], line 37 */ { int ret = slice_from_s(z, 2, s_0); /* <-, line 37 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = c3; if (z->c >= z->l) goto lab0; z->c++; /* next, line 38 */ } lab1: continue; lab0: z->c = c2; break; } z->c = c_test1; } while(1) { /* repeat, line 41 */ int c4 = z->c; while(1) { /* goto, line 41 */ int c5 = z->c; if (in_grouping(z, g_v, 97, 252, 0)) goto lab4; /* grouping v, line 42 */ z->bra = z->c; /* [, line 42 */ { int c6 = z->c; /* or, line 42 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab6; /* literal, line 42 */ z->c++; z->ket = z->c; /* ], line 42 */ if (in_grouping(z, g_v, 97, 252, 0)) goto lab6; /* grouping v, line 42 */ { int ret = slice_from_s(z, 1, s_1); /* <-, line 42 */ if (ret < 0) return ret; } goto lab5; lab6: z->c = c6; if (z->c == z->l || z->p[z->c] != 'y') goto lab4; /* literal, line 43 */ z->c++; z->ket = z->c; /* ], line 43 */ if (in_grouping(z, g_v, 97, 252, 0)) goto lab4; /* grouping v, line 43 */ { int ret = slice_from_s(z, 1, s_2); /* <-, line 43 */ if (ret < 0) return ret; } } lab5: z->c = c5; break; lab4: z->c = c5; if (z->c >= z->l) goto lab3; z->c++; /* goto, line 41 */ } continue; lab3: z->c = c4; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 49 */ z->I[1] = z->l; /* $p2 = , line 50 */ { int c_test1 = z->c; /* test, line 52 */ { int ret = z->c + 3; /* hop, line 52 */ if (0 > ret || ret > z->l) return 0; z->c = ret; } z->I[2] = z->c; /* setmark x, line 52 */ z->c = c_test1; } { /* gopast */ /* grouping v, line 54 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 54 */ int ret = in_grouping(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 54 */ /* try, line 55 */ if (!(z->I[0] < z->I[2])) goto lab0; /* $p1 < , line 55 */ z->I[0] = z->I[2]; /* $p1 = , line 55 */ lab0: { /* gopast */ /* grouping v, line 56 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 56 */ int ret = in_grouping(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 56 */ return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 60 */ int c1 = z->c; z->bra = z->c; /* [, line 62 */ among_var = find_among(z, a_0, 6); /* substring, line 62 */ if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 62 */ switch (among_var) { /* among, line 62 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_3); /* <-, line 63 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_4); /* <-, line 64 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_5); /* <-, line 65 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_6); /* <-, line 66 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_7); /* <-, line 67 */ if (ret < 0) return ret; } break; case 6: if (z->c >= z->l) goto lab0; z->c++; /* next, line 68 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 75 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 76 */ return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* do, line 79 */ z->ket = z->c; /* [, line 80 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((811040 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0; /* substring, line 80 */ among_var = find_among_b(z, a_1, 7); if (!(among_var)) goto lab0; z->bra = z->c; /* ], line 80 */ { int ret = r_R1(z); /* call R1, line 80 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } switch (among_var) { /* among, line 80 */ case 0: goto lab0; case 1: { int ret = slice_del(z); /* delete, line 82 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 85 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 86 */ z->ket = z->c; /* [, line 86 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') { z->c = z->l - m2; goto lab1; } /* literal, line 86 */ z->c--; z->bra = z->c; /* ], line 86 */ if (!(eq_s_b(z, 3, s_8))) { z->c = z->l - m2; goto lab1; } /* literal, line 86 */ { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } lab1: ; } break; case 3: if (in_grouping_b(z, g_s_ending, 98, 116, 0)) goto lab0; /* grouping s_ending, line 89 */ { int ret = slice_del(z); /* delete, line 89 */ if (ret < 0) return ret; } break; } lab0: z->c = z->l - m1; } { int m3 = z->l - z->c; (void)m3; /* do, line 93 */ z->ket = z->c; /* [, line 94 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1327104 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab2; /* substring, line 94 */ among_var = find_among_b(z, a_2, 4); if (!(among_var)) goto lab2; z->bra = z->c; /* ], line 94 */ { int ret = r_R1(z); /* call R1, line 94 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } switch (among_var) { /* among, line 94 */ case 0: goto lab2; case 1: { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; case 2: if (in_grouping_b(z, g_st_ending, 98, 116, 0)) goto lab2; /* grouping st_ending, line 99 */ { int ret = z->c - 3; /* hop, line 99 */ if (z->lb > ret || ret > z->l) goto lab2; z->c = ret; } { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } break; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 103 */ z->ket = z->c; /* [, line 104 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1051024 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab3; /* substring, line 104 */ among_var = find_among_b(z, a_4, 8); if (!(among_var)) goto lab3; z->bra = z->c; /* ], line 104 */ { int ret = r_R2(z); /* call R2, line 104 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } switch (among_var) { /* among, line 104 */ case 0: goto lab3; case 1: { int ret = slice_del(z); /* delete, line 106 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 107 */ z->ket = z->c; /* [, line 107 */ if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m5; goto lab4; } /* literal, line 107 */ z->bra = z->c; /* ], line 107 */ { int m6 = z->l - z->c; (void)m6; /* not, line 107 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab5; /* literal, line 107 */ z->c--; { z->c = z->l - m5; goto lab4; } lab5: z->c = z->l - m6; } { int ret = r_R2(z); /* call R2, line 107 */ if (ret == 0) { z->c = z->l - m5; goto lab4; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 107 */ if (ret < 0) return ret; } lab4: ; } break; case 2: { int m7 = z->l - z->c; (void)m7; /* not, line 110 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab6; /* literal, line 110 */ z->c--; goto lab3; lab6: z->c = z->l - m7; } { int ret = slice_del(z); /* delete, line 110 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 113 */ if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* try, line 114 */ z->ket = z->c; /* [, line 115 */ { int m9 = z->l - z->c; (void)m9; /* or, line 115 */ if (!(eq_s_b(z, 2, s_10))) goto lab9; /* literal, line 115 */ goto lab8; lab9: z->c = z->l - m9; if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m8; goto lab7; } /* literal, line 115 */ } lab8: z->bra = z->c; /* ], line 115 */ { int ret = r_R1(z); /* call R1, line 115 */ if (ret == 0) { z->c = z->l - m8; goto lab7; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 115 */ if (ret < 0) return ret; } lab7: ; } break; case 4: { int ret = slice_del(z); /* delete, line 119 */ if (ret < 0) return ret; } { int m10 = z->l - z->c; (void)m10; /* try, line 120 */ z->ket = z->c; /* [, line 121 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 103 && z->p[z->c - 1] != 104)) { z->c = z->l - m10; goto lab10; } /* substring, line 121 */ among_var = find_among_b(z, a_3, 2); if (!(among_var)) { z->c = z->l - m10; goto lab10; } z->bra = z->c; /* ], line 121 */ { int ret = r_R2(z); /* call R2, line 121 */ if (ret == 0) { z->c = z->l - m10; goto lab10; } if (ret < 0) return ret; } switch (among_var) { /* among, line 121 */ case 0: { z->c = z->l - m10; goto lab10; } case 1: { int ret = slice_del(z); /* delete, line 123 */ if (ret < 0) return ret; } break; } lab10: ; } break; } lab3: z->c = z->l - m4; } return 1; } extern int german_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 134 */ { int ret = r_prelude(z); /* call prelude, line 134 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 135 */ { int ret = r_mark_regions(z); /* call mark_regions, line 135 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 136 */ { int m3 = z->l - z->c; (void)m3; /* do, line 137 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 137 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } z->c = z->lb; { int c4 = z->c; /* do, line 138 */ { int ret = r_postlude(z); /* call postlude, line 138 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = c4; } return 1; } extern struct SN_env * german_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } extern void german_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_german.h000066400000000000000000000005421364126773500241160ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * german_ISO_8859_1_create_env(void); extern void german_ISO_8859_1_close_env(struct SN_env * z); extern int german_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_italian.c000066400000000000000000001171641364126773500242720ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int italian_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_vowel_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_attached_pronoun(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * italian_ISO_8859_1_create_env(void); extern void italian_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[2] = { 'q', 'u' }; static const symbol s_0_2[1] = { 0xE1 }; static const symbol s_0_3[1] = { 0xE9 }; static const symbol s_0_4[1] = { 0xED }; static const symbol s_0_5[1] = { 0xF3 }; static const symbol s_0_6[1] = { 0xFA }; static const struct among a_0[7] = { /* 0 */ { 0, 0, -1, 7, 0}, /* 1 */ { 2, s_0_1, 0, 6, 0}, /* 2 */ { 1, s_0_2, 0, 1, 0}, /* 3 */ { 1, s_0_3, 0, 2, 0}, /* 4 */ { 1, s_0_4, 0, 3, 0}, /* 5 */ { 1, s_0_5, 0, 4, 0}, /* 6 */ { 1, s_0_6, 0, 5, 0} }; static const symbol s_1_1[1] = { 'I' }; static const symbol s_1_2[1] = { 'U' }; static const struct among a_1[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_1_1, 0, 1, 0}, /* 2 */ { 1, s_1_2, 0, 2, 0} }; static const symbol s_2_0[2] = { 'l', 'a' }; static const symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; static const symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; static const symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; static const symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; static const symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; static const symbol s_2_6[2] = { 'l', 'e' }; static const symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; static const symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; static const symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; static const symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; static const symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; static const symbol s_2_12[2] = { 'n', 'e' }; static const symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; static const symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; static const symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; static const symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; static const symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; static const symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; static const symbol s_2_19[2] = { 'c', 'i' }; static const symbol s_2_20[2] = { 'l', 'i' }; static const symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; static const symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; static const symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; static const symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; static const symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; static const symbol s_2_26[3] = { 'g', 'l', 'i' }; static const symbol s_2_27[2] = { 'm', 'i' }; static const symbol s_2_28[2] = { 's', 'i' }; static const symbol s_2_29[2] = { 't', 'i' }; static const symbol s_2_30[2] = { 'v', 'i' }; static const symbol s_2_31[2] = { 'l', 'o' }; static const symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; static const symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; static const symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; static const symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; static const symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; static const struct among a_2[37] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 4, s_2_1, 0, -1, 0}, /* 2 */ { 6, s_2_2, 0, -1, 0}, /* 3 */ { 4, s_2_3, 0, -1, 0}, /* 4 */ { 4, s_2_4, 0, -1, 0}, /* 5 */ { 4, s_2_5, 0, -1, 0}, /* 6 */ { 2, s_2_6, -1, -1, 0}, /* 7 */ { 4, s_2_7, 6, -1, 0}, /* 8 */ { 6, s_2_8, 6, -1, 0}, /* 9 */ { 4, s_2_9, 6, -1, 0}, /* 10 */ { 4, s_2_10, 6, -1, 0}, /* 11 */ { 4, s_2_11, 6, -1, 0}, /* 12 */ { 2, s_2_12, -1, -1, 0}, /* 13 */ { 4, s_2_13, 12, -1, 0}, /* 14 */ { 6, s_2_14, 12, -1, 0}, /* 15 */ { 4, s_2_15, 12, -1, 0}, /* 16 */ { 4, s_2_16, 12, -1, 0}, /* 17 */ { 4, s_2_17, 12, -1, 0}, /* 18 */ { 4, s_2_18, 12, -1, 0}, /* 19 */ { 2, s_2_19, -1, -1, 0}, /* 20 */ { 2, s_2_20, -1, -1, 0}, /* 21 */ { 4, s_2_21, 20, -1, 0}, /* 22 */ { 6, s_2_22, 20, -1, 0}, /* 23 */ { 4, s_2_23, 20, -1, 0}, /* 24 */ { 4, s_2_24, 20, -1, 0}, /* 25 */ { 4, s_2_25, 20, -1, 0}, /* 26 */ { 3, s_2_26, 20, -1, 0}, /* 27 */ { 2, s_2_27, -1, -1, 0}, /* 28 */ { 2, s_2_28, -1, -1, 0}, /* 29 */ { 2, s_2_29, -1, -1, 0}, /* 30 */ { 2, s_2_30, -1, -1, 0}, /* 31 */ { 2, s_2_31, -1, -1, 0}, /* 32 */ { 4, s_2_32, 31, -1, 0}, /* 33 */ { 6, s_2_33, 31, -1, 0}, /* 34 */ { 4, s_2_34, 31, -1, 0}, /* 35 */ { 4, s_2_35, 31, -1, 0}, /* 36 */ { 4, s_2_36, 31, -1, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; static const symbol s_3_2[2] = { 'a', 'r' }; static const symbol s_3_3[2] = { 'e', 'r' }; static const symbol s_3_4[2] = { 'i', 'r' }; static const struct among a_3[5] = { /* 0 */ { 4, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0}, /* 2 */ { 2, s_3_2, -1, 2, 0}, /* 3 */ { 2, s_3_3, -1, 2, 0}, /* 4 */ { 2, s_3_4, -1, 2, 0} }; static const symbol s_4_0[2] = { 'i', 'c' }; static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_4_2[2] = { 'o', 's' }; static const symbol s_4_3[2] = { 'i', 'v' }; static const struct among a_4[4] = { /* 0 */ { 2, s_4_0, -1, -1, 0}, /* 1 */ { 4, s_4_1, -1, -1, 0}, /* 2 */ { 2, s_4_2, -1, -1, 0}, /* 3 */ { 2, s_4_3, -1, 1, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_5_2[2] = { 'i', 'v' }; static const struct among a_5[3] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 2, s_5_2, -1, 1, 0} }; static const symbol s_6_0[3] = { 'i', 'c', 'a' }; static const symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; static const symbol s_6_2[3] = { 'o', 's', 'a' }; static const symbol s_6_3[4] = { 'i', 's', 't', 'a' }; static const symbol s_6_4[3] = { 'i', 'v', 'a' }; static const symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; static const symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; static const symbol s_6_7[3] = { 'i', 'c', 'e' }; static const symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; static const symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; static const symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; static const symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; static const symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; static const symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; static const symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; static const symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; static const symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; static const symbol s_6_17[3] = { 'o', 's', 'e' }; static const symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; static const symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_21[4] = { 'i', 's', 't', 'e' }; static const symbol s_6_22[3] = { 'i', 'v', 'e' }; static const symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; static const symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; static const symbol s_6_25[3] = { 'i', 'c', 'i' }; static const symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; static const symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; static const symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; static const symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; static const symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; static const symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; static const symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; static const symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; static const symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; static const symbol s_6_35[3] = { 'o', 's', 'i' }; static const symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; static const symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; static const symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; static const symbol s_6_39[4] = { 'i', 's', 't', 'i' }; static const symbol s_6_40[3] = { 'i', 'v', 'i' }; static const symbol s_6_41[3] = { 'i', 'c', 'o' }; static const symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; static const symbol s_6_43[3] = { 'o', 's', 'o' }; static const symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; static const symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; static const symbol s_6_46[3] = { 'i', 'v', 'o' }; static const symbol s_6_47[3] = { 'i', 't', 0xE0 }; static const symbol s_6_48[4] = { 'i', 's', 't', 0xE0 }; static const symbol s_6_49[4] = { 'i', 's', 't', 0xE8 }; static const symbol s_6_50[4] = { 'i', 's', 't', 0xEC }; static const struct among a_6[51] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 5, s_6_1, -1, 3, 0}, /* 2 */ { 3, s_6_2, -1, 1, 0}, /* 3 */ { 4, s_6_3, -1, 1, 0}, /* 4 */ { 3, s_6_4, -1, 9, 0}, /* 5 */ { 4, s_6_5, -1, 1, 0}, /* 6 */ { 4, s_6_6, -1, 5, 0}, /* 7 */ { 3, s_6_7, -1, 1, 0}, /* 8 */ { 6, s_6_8, 7, 1, 0}, /* 9 */ { 4, s_6_9, -1, 1, 0}, /* 10 */ { 5, s_6_10, -1, 3, 0}, /* 11 */ { 5, s_6_11, -1, 1, 0}, /* 12 */ { 5, s_6_12, -1, 1, 0}, /* 13 */ { 6, s_6_13, -1, 4, 0}, /* 14 */ { 6, s_6_14, -1, 2, 0}, /* 15 */ { 6, s_6_15, -1, 4, 0}, /* 16 */ { 5, s_6_16, -1, 2, 0}, /* 17 */ { 3, s_6_17, -1, 1, 0}, /* 18 */ { 4, s_6_18, -1, 1, 0}, /* 19 */ { 5, s_6_19, -1, 1, 0}, /* 20 */ { 6, s_6_20, 19, 7, 0}, /* 21 */ { 4, s_6_21, -1, 1, 0}, /* 22 */ { 3, s_6_22, -1, 9, 0}, /* 23 */ { 4, s_6_23, -1, 1, 0}, /* 24 */ { 4, s_6_24, -1, 5, 0}, /* 25 */ { 3, s_6_25, -1, 1, 0}, /* 26 */ { 6, s_6_26, 25, 1, 0}, /* 27 */ { 4, s_6_27, -1, 1, 0}, /* 28 */ { 5, s_6_28, -1, 1, 0}, /* 29 */ { 5, s_6_29, -1, 1, 0}, /* 30 */ { 4, s_6_30, -1, 1, 0}, /* 31 */ { 6, s_6_31, -1, 4, 0}, /* 32 */ { 6, s_6_32, -1, 2, 0}, /* 33 */ { 6, s_6_33, -1, 4, 0}, /* 34 */ { 5, s_6_34, -1, 2, 0}, /* 35 */ { 3, s_6_35, -1, 1, 0}, /* 36 */ { 4, s_6_36, -1, 1, 0}, /* 37 */ { 6, s_6_37, -1, 6, 0}, /* 38 */ { 6, s_6_38, -1, 6, 0}, /* 39 */ { 4, s_6_39, -1, 1, 0}, /* 40 */ { 3, s_6_40, -1, 9, 0}, /* 41 */ { 3, s_6_41, -1, 1, 0}, /* 42 */ { 4, s_6_42, -1, 1, 0}, /* 43 */ { 3, s_6_43, -1, 1, 0}, /* 44 */ { 6, s_6_44, -1, 6, 0}, /* 45 */ { 6, s_6_45, -1, 6, 0}, /* 46 */ { 3, s_6_46, -1, 9, 0}, /* 47 */ { 3, s_6_47, -1, 8, 0}, /* 48 */ { 4, s_6_48, -1, 1, 0}, /* 49 */ { 4, s_6_49, -1, 1, 0}, /* 50 */ { 4, s_6_50, -1, 1, 0} }; static const symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; static const symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; static const symbol s_7_2[3] = { 'a', 't', 'a' }; static const symbol s_7_3[3] = { 'i', 't', 'a' }; static const symbol s_7_4[3] = { 'u', 't', 'a' }; static const symbol s_7_5[3] = { 'a', 'v', 'a' }; static const symbol s_7_6[3] = { 'e', 'v', 'a' }; static const symbol s_7_7[3] = { 'i', 'v', 'a' }; static const symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; static const symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; static const symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; static const symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; static const symbol s_7_12[3] = { 'a', 'r', 'e' }; static const symbol s_7_13[3] = { 'e', 'r', 'e' }; static const symbol s_7_14[3] = { 'i', 'r', 'e' }; static const symbol s_7_15[4] = { 'a', 's', 's', 'e' }; static const symbol s_7_16[3] = { 'a', 't', 'e' }; static const symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; static const symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; static const symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; static const symbol s_7_20[3] = { 'e', 't', 'e' }; static const symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; static const symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; static const symbol s_7_23[3] = { 'i', 't', 'e' }; static const symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; static const symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; static const symbol s_7_26[3] = { 'u', 't', 'e' }; static const symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; static const symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; static const symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; static const symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; static const symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; static const symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; static const symbol s_7_33[4] = { 'a', 's', 's', 'i' }; static const symbol s_7_34[3] = { 'a', 't', 'i' }; static const symbol s_7_35[3] = { 'i', 't', 'i' }; static const symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; static const symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; static const symbol s_7_38[3] = { 'u', 't', 'i' }; static const symbol s_7_39[3] = { 'a', 'v', 'i' }; static const symbol s_7_40[3] = { 'e', 'v', 'i' }; static const symbol s_7_41[3] = { 'i', 'v', 'i' }; static const symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; static const symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; static const symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; static const symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; static const symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; static const symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; static const symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; static const symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; static const symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; static const symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; static const symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; static const symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; static const symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; static const symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; static const symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; static const symbol s_7_58[3] = { 'a', 'n', 'o' }; static const symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; static const symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; static const symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; static const symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; static const symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; static const symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; static const symbol s_7_65[3] = { 'o', 'n', 'o' }; static const symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; static const symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; static const symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; static const symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; static const symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; static const symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; static const symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; static const symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; static const symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; static const symbol s_7_75[3] = { 'a', 't', 'o' }; static const symbol s_7_76[3] = { 'i', 't', 'o' }; static const symbol s_7_77[3] = { 'u', 't', 'o' }; static const symbol s_7_78[3] = { 'a', 'v', 'o' }; static const symbol s_7_79[3] = { 'e', 'v', 'o' }; static const symbol s_7_80[3] = { 'i', 'v', 'o' }; static const symbol s_7_81[2] = { 'a', 'r' }; static const symbol s_7_82[2] = { 'i', 'r' }; static const symbol s_7_83[3] = { 'e', 'r', 0xE0 }; static const symbol s_7_84[3] = { 'i', 'r', 0xE0 }; static const symbol s_7_85[3] = { 'e', 'r', 0xF2 }; static const symbol s_7_86[3] = { 'i', 'r', 0xF2 }; static const struct among a_7[87] = { /* 0 */ { 4, s_7_0, -1, 1, 0}, /* 1 */ { 4, s_7_1, -1, 1, 0}, /* 2 */ { 3, s_7_2, -1, 1, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 3, s_7_4, -1, 1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 3, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 6, s_7_8, -1, 1, 0}, /* 9 */ { 6, s_7_9, -1, 1, 0}, /* 10 */ { 4, s_7_10, -1, 1, 0}, /* 11 */ { 4, s_7_11, -1, 1, 0}, /* 12 */ { 3, s_7_12, -1, 1, 0}, /* 13 */ { 3, s_7_13, -1, 1, 0}, /* 14 */ { 3, s_7_14, -1, 1, 0}, /* 15 */ { 4, s_7_15, -1, 1, 0}, /* 16 */ { 3, s_7_16, -1, 1, 0}, /* 17 */ { 5, s_7_17, 16, 1, 0}, /* 18 */ { 5, s_7_18, 16, 1, 0}, /* 19 */ { 5, s_7_19, 16, 1, 0}, /* 20 */ { 3, s_7_20, -1, 1, 0}, /* 21 */ { 5, s_7_21, 20, 1, 0}, /* 22 */ { 5, s_7_22, 20, 1, 0}, /* 23 */ { 3, s_7_23, -1, 1, 0}, /* 24 */ { 6, s_7_24, -1, 1, 0}, /* 25 */ { 6, s_7_25, -1, 1, 0}, /* 26 */ { 3, s_7_26, -1, 1, 0}, /* 27 */ { 4, s_7_27, -1, 1, 0}, /* 28 */ { 4, s_7_28, -1, 1, 0}, /* 29 */ { 4, s_7_29, -1, 1, 0}, /* 30 */ { 4, s_7_30, -1, 1, 0}, /* 31 */ { 4, s_7_31, -1, 1, 0}, /* 32 */ { 4, s_7_32, -1, 1, 0}, /* 33 */ { 4, s_7_33, -1, 1, 0}, /* 34 */ { 3, s_7_34, -1, 1, 0}, /* 35 */ { 3, s_7_35, -1, 1, 0}, /* 36 */ { 6, s_7_36, -1, 1, 0}, /* 37 */ { 6, s_7_37, -1, 1, 0}, /* 38 */ { 3, s_7_38, -1, 1, 0}, /* 39 */ { 3, s_7_39, -1, 1, 0}, /* 40 */ { 3, s_7_40, -1, 1, 0}, /* 41 */ { 3, s_7_41, -1, 1, 0}, /* 42 */ { 4, s_7_42, -1, 1, 0}, /* 43 */ { 4, s_7_43, -1, 1, 0}, /* 44 */ { 4, s_7_44, -1, 1, 0}, /* 45 */ { 4, s_7_45, -1, 1, 0}, /* 46 */ { 4, s_7_46, -1, 1, 0}, /* 47 */ { 5, s_7_47, -1, 1, 0}, /* 48 */ { 5, s_7_48, -1, 1, 0}, /* 49 */ { 5, s_7_49, -1, 1, 0}, /* 50 */ { 5, s_7_50, -1, 1, 0}, /* 51 */ { 5, s_7_51, -1, 1, 0}, /* 52 */ { 6, s_7_52, -1, 1, 0}, /* 53 */ { 4, s_7_53, -1, 1, 0}, /* 54 */ { 4, s_7_54, -1, 1, 0}, /* 55 */ { 6, s_7_55, 54, 1, 0}, /* 56 */ { 6, s_7_56, 54, 1, 0}, /* 57 */ { 4, s_7_57, -1, 1, 0}, /* 58 */ { 3, s_7_58, -1, 1, 0}, /* 59 */ { 6, s_7_59, 58, 1, 0}, /* 60 */ { 5, s_7_60, 58, 1, 0}, /* 61 */ { 5, s_7_61, 58, 1, 0}, /* 62 */ { 5, s_7_62, 58, 1, 0}, /* 63 */ { 6, s_7_63, -1, 1, 0}, /* 64 */ { 6, s_7_64, -1, 1, 0}, /* 65 */ { 3, s_7_65, -1, 1, 0}, /* 66 */ { 6, s_7_66, 65, 1, 0}, /* 67 */ { 5, s_7_67, 65, 1, 0}, /* 68 */ { 5, s_7_68, 65, 1, 0}, /* 69 */ { 5, s_7_69, 65, 1, 0}, /* 70 */ { 8, s_7_70, -1, 1, 0}, /* 71 */ { 8, s_7_71, -1, 1, 0}, /* 72 */ { 6, s_7_72, -1, 1, 0}, /* 73 */ { 6, s_7_73, -1, 1, 0}, /* 74 */ { 6, s_7_74, -1, 1, 0}, /* 75 */ { 3, s_7_75, -1, 1, 0}, /* 76 */ { 3, s_7_76, -1, 1, 0}, /* 77 */ { 3, s_7_77, -1, 1, 0}, /* 78 */ { 3, s_7_78, -1, 1, 0}, /* 79 */ { 3, s_7_79, -1, 1, 0}, /* 80 */ { 3, s_7_80, -1, 1, 0}, /* 81 */ { 2, s_7_81, -1, 1, 0}, /* 82 */ { 2, s_7_82, -1, 1, 0}, /* 83 */ { 3, s_7_83, -1, 1, 0}, /* 84 */ { 3, s_7_84, -1, 1, 0}, /* 85 */ { 3, s_7_85, -1, 1, 0}, /* 86 */ { 3, s_7_86, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; static const unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; static const unsigned char g_CG[] = { 17 }; static const symbol s_0[] = { 0xE0 }; static const symbol s_1[] = { 0xE8 }; static const symbol s_2[] = { 0xEC }; static const symbol s_3[] = { 0xF2 }; static const symbol s_4[] = { 0xF9 }; static const symbol s_5[] = { 'q', 'U' }; static const symbol s_6[] = { 'U' }; static const symbol s_7[] = { 'I' }; static const symbol s_8[] = { 'i' }; static const symbol s_9[] = { 'u' }; static const symbol s_10[] = { 'e' }; static const symbol s_11[] = { 'i', 'c' }; static const symbol s_12[] = { 'l', 'o', 'g' }; static const symbol s_13[] = { 'u' }; static const symbol s_14[] = { 'e', 'n', 't', 'e' }; static const symbol s_15[] = { 'a', 't' }; static const symbol s_16[] = { 'a', 't' }; static const symbol s_17[] = { 'i', 'c' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ int among_var; { int c_test1 = z->c; /* test, line 35 */ while(1) { /* repeat, line 35 */ int c2 = z->c; z->bra = z->c; /* [, line 36 */ among_var = find_among(z, a_0, 7); /* substring, line 36 */ if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 36 */ switch (among_var) { /* among, line 36 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 37 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 38 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_2); /* <-, line 39 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_3); /* <-, line 40 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_4); /* <-, line 41 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ if (ret < 0) return ret; } break; case 7: if (z->c >= z->l) goto lab0; z->c++; /* next, line 43 */ break; } continue; lab0: z->c = c2; break; } z->c = c_test1; } while(1) { /* repeat, line 46 */ int c3 = z->c; while(1) { /* goto, line 46 */ int c4 = z->c; if (in_grouping(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 47 */ z->bra = z->c; /* [, line 47 */ { int c5 = z->c; /* or, line 47 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab4; /* literal, line 47 */ z->c++; z->ket = z->c; /* ], line 47 */ if (in_grouping(z, g_v, 97, 249, 0)) goto lab4; /* grouping v, line 47 */ { int ret = slice_from_s(z, 1, s_6); /* <-, line 47 */ if (ret < 0) return ret; } goto lab3; lab4: z->c = c5; if (z->c == z->l || z->p[z->c] != 'i') goto lab2; /* literal, line 48 */ z->c++; z->ket = z->c; /* ], line 48 */ if (in_grouping(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 48 */ { int ret = slice_from_s(z, 1, s_7); /* <-, line 48 */ if (ret < 0) return ret; } } lab3: z->c = c4; break; lab2: z->c = c4; if (z->c >= z->l) goto lab1; z->c++; /* goto, line 46 */ } continue; lab1: z->c = c3; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 54 */ z->I[1] = z->l; /* $p1 = , line 55 */ z->I[2] = z->l; /* $p2 = , line 56 */ { int c1 = z->c; /* do, line 58 */ { int c2 = z->c; /* or, line 60 */ if (in_grouping(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 59 */ { int c3 = z->c; /* or, line 59 */ if (out_grouping(z, g_v, 97, 249, 0)) goto lab4; /* non v, line 59 */ { /* gopast */ /* grouping v, line 59 */ int ret = out_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 59 */ { /* gopast */ /* non v, line 59 */ int ret = in_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping(z, g_v, 97, 249, 0)) goto lab0; /* non v, line 61 */ { int c4 = z->c; /* or, line 61 */ if (out_grouping(z, g_v, 97, 249, 0)) goto lab6; /* non v, line 61 */ { /* gopast */ /* grouping v, line 61 */ int ret = out_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping(z, g_v, 97, 249, 0)) goto lab0; /* grouping v, line 61 */ if (z->c >= z->l) goto lab0; z->c++; /* next, line 61 */ } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 62 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 64 */ { /* gopast */ /* grouping v, line 65 */ int ret = out_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 65 */ int ret = in_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 65 */ { /* gopast */ /* grouping v, line 66 */ int ret = out_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 66 */ int ret = in_grouping(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 66 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 70 */ int c1 = z->c; z->bra = z->c; /* [, line 72 */ if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else /* substring, line 72 */ among_var = find_among(z, a_1, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 72 */ switch (among_var) { /* among, line 72 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_8); /* <-, line 73 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_9); /* <-, line 74 */ if (ret < 0) return ret; } break; case 3: if (z->c >= z->l) goto lab0; z->c++; /* next, line 75 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 82 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 83 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 84 */ return 1; } static int r_attached_pronoun(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 87 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33314 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 87 */ if (!(find_among_b(z, a_2, 37))) return 0; z->bra = z->c; /* ], line 87 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0; /* among, line 97 */ among_var = find_among_b(z, a_3, 5); if (!(among_var)) return 0; { int ret = r_RV(z); /* call RV, line 97 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 97 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 98 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_10); /* <-, line 99 */ if (ret < 0) return ret; } break; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 104 */ among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 104 */ switch (among_var) { /* among, line 104 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 111 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 111 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 113 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 113 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 114 */ z->ket = z->c; /* [, line 114 */ if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m1; goto lab0; } /* literal, line 114 */ z->bra = z->c; /* ], line 114 */ { int ret = r_R2(z); /* call R2, line 114 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 114 */ if (ret < 0) return ret; } lab0: ; } break; case 3: { int ret = r_R2(z); /* call R2, line 117 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_12); /* <-, line 117 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 119 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_13); /* <-, line 119 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 121 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 4, s_14); /* <-, line 121 */ if (ret < 0) return ret; } break; case 6: { int ret = r_RV(z); /* call RV, line 123 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 123 */ if (ret < 0) return ret; } break; case 7: { int ret = r_R1(z); /* call R1, line 125 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 125 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 126 */ z->ket = z->c; /* [, line 127 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4722696 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m2; goto lab1; } /* substring, line 127 */ among_var = find_among_b(z, a_4, 4); if (!(among_var)) { z->c = z->l - m2; goto lab1; } z->bra = z->c; /* ], line 127 */ { int ret = r_R2(z); /* call R2, line 127 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 127 */ if (ret < 0) return ret; } switch (among_var) { /* among, line 127 */ case 0: { z->c = z->l - m2; goto lab1; } case 1: z->ket = z->c; /* [, line 128 */ if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m2; goto lab1; } /* literal, line 128 */ z->bra = z->c; /* ], line 128 */ { int ret = r_R2(z); /* call R2, line 128 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 128 */ if (ret < 0) return ret; } break; } lab1: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 134 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 135 */ z->ket = z->c; /* [, line 136 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m3; goto lab2; } /* substring, line 136 */ among_var = find_among_b(z, a_5, 3); if (!(among_var)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; /* ], line 136 */ switch (among_var) { /* among, line 136 */ case 0: { z->c = z->l - m3; goto lab2; } case 1: { int ret = r_R2(z); /* call R2, line 137 */ if (ret == 0) { z->c = z->l - m3; goto lab2; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 137 */ if (ret < 0) return ret; } break; } lab2: ; } break; case 9: { int ret = r_R2(z); /* call R2, line 142 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 143 */ z->ket = z->c; /* [, line 143 */ if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m4; goto lab3; } /* literal, line 143 */ z->bra = z->c; /* ], line 143 */ { int ret = r_R2(z); /* call R2, line 143 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 143 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 143 */ if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m4; goto lab3; } /* literal, line 143 */ z->bra = z->c; /* ], line 143 */ { int ret = r_R2(z); /* call R2, line 143 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 143 */ if (ret < 0) return ret; } lab3: ; } break; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 148 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 148 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 149 */ among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 149 */ switch (among_var) { /* among, line 149 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = slice_del(z); /* delete, line 163 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_vowel_suffix(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* try, line 171 */ z->ket = z->c; /* [, line 172 */ if (in_grouping_b(z, g_AEIO, 97, 242, 0)) { z->c = z->l - m1; goto lab0; } /* grouping AEIO, line 172 */ z->bra = z->c; /* ], line 172 */ { int ret = r_RV(z); /* call RV, line 172 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 172 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 173 */ if (z->c <= z->lb || z->p[z->c - 1] != 'i') { z->c = z->l - m1; goto lab0; } /* literal, line 173 */ z->c--; z->bra = z->c; /* ], line 173 */ { int ret = r_RV(z); /* call RV, line 173 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 173 */ if (ret < 0) return ret; } lab0: ; } { int m2 = z->l - z->c; (void)m2; /* try, line 175 */ z->ket = z->c; /* [, line 176 */ if (z->c <= z->lb || z->p[z->c - 1] != 'h') { z->c = z->l - m2; goto lab1; } /* literal, line 176 */ z->c--; z->bra = z->c; /* ], line 176 */ if (in_grouping_b(z, g_CG, 99, 103, 0)) { z->c = z->l - m2; goto lab1; } /* grouping CG, line 176 */ { int ret = r_RV(z); /* call RV, line 176 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 176 */ if (ret < 0) return ret; } lab1: ; } return 1; } extern int italian_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 182 */ { int ret = r_prelude(z); /* call prelude, line 182 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 183 */ { int ret = r_mark_regions(z); /* call mark_regions, line 183 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 184 */ { int m3 = z->l - z->c; (void)m3; /* do, line 185 */ { int ret = r_attached_pronoun(z); /* call attached_pronoun, line 185 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 186 */ { int m5 = z->l - z->c; (void)m5; /* or, line 186 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 186 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } goto lab4; lab5: z->c = z->l - m5; { int ret = r_verb_suffix(z); /* call verb_suffix, line 186 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } } lab4: lab3: z->c = z->l - m4; } { int m6 = z->l - z->c; (void)m6; /* do, line 187 */ { int ret = r_vowel_suffix(z); /* call vowel_suffix, line 187 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m6; } z->c = z->lb; { int c7 = z->c; /* do, line 189 */ { int ret = r_postlude(z); /* call postlude, line 189 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = c7; } return 1; } extern struct SN_env * italian_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } extern void italian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_italian.h000066400000000000000000000005451364126773500242710ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * italian_ISO_8859_1_create_env(void); extern void italian_ISO_8859_1_close_env(struct SN_env * z); extern int italian_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_norwegian.c000066400000000000000000000242131364126773500246320ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int norwegian_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_other_suffix(struct SN_env * z); static int r_consonant_pair(struct SN_env * z); static int r_main_suffix(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * norwegian_ISO_8859_1_create_env(void); extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 'a' }; static const symbol s_0_1[1] = { 'e' }; static const symbol s_0_2[3] = { 'e', 'd', 'e' }; static const symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; static const symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; static const symbol s_0_5[3] = { 'a', 'n', 'e' }; static const symbol s_0_6[3] = { 'e', 'n', 'e' }; static const symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; static const symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; static const symbol s_0_9[2] = { 'e', 'n' }; static const symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; static const symbol s_0_11[2] = { 'a', 'r' }; static const symbol s_0_12[2] = { 'e', 'r' }; static const symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; static const symbol s_0_14[1] = { 's' }; static const symbol s_0_15[2] = { 'a', 's' }; static const symbol s_0_16[2] = { 'e', 's' }; static const symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; static const symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; static const symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; static const symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; static const symbol s_0_21[3] = { 'e', 'n', 's' }; static const symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; static const symbol s_0_23[3] = { 'e', 'r', 's' }; static const symbol s_0_24[3] = { 'e', 't', 's' }; static const symbol s_0_25[2] = { 'e', 't' }; static const symbol s_0_26[3] = { 'h', 'e', 't' }; static const symbol s_0_27[3] = { 'e', 'r', 't' }; static const symbol s_0_28[3] = { 'a', 's', 't' }; static const struct among a_0[29] = { /* 0 */ { 1, s_0_0, -1, 1, 0}, /* 1 */ { 1, s_0_1, -1, 1, 0}, /* 2 */ { 3, s_0_2, 1, 1, 0}, /* 3 */ { 4, s_0_3, 1, 1, 0}, /* 4 */ { 4, s_0_4, 1, 1, 0}, /* 5 */ { 3, s_0_5, 1, 1, 0}, /* 6 */ { 3, s_0_6, 1, 1, 0}, /* 7 */ { 6, s_0_7, 6, 1, 0}, /* 8 */ { 4, s_0_8, 1, 3, 0}, /* 9 */ { 2, s_0_9, -1, 1, 0}, /* 10 */ { 5, s_0_10, 9, 1, 0}, /* 11 */ { 2, s_0_11, -1, 1, 0}, /* 12 */ { 2, s_0_12, -1, 1, 0}, /* 13 */ { 5, s_0_13, 12, 1, 0}, /* 14 */ { 1, s_0_14, -1, 2, 0}, /* 15 */ { 2, s_0_15, 14, 1, 0}, /* 16 */ { 2, s_0_16, 14, 1, 0}, /* 17 */ { 4, s_0_17, 16, 1, 0}, /* 18 */ { 5, s_0_18, 16, 1, 0}, /* 19 */ { 4, s_0_19, 16, 1, 0}, /* 20 */ { 7, s_0_20, 19, 1, 0}, /* 21 */ { 3, s_0_21, 14, 1, 0}, /* 22 */ { 6, s_0_22, 21, 1, 0}, /* 23 */ { 3, s_0_23, 14, 1, 0}, /* 24 */ { 3, s_0_24, 14, 1, 0}, /* 25 */ { 2, s_0_25, -1, 1, 0}, /* 26 */ { 3, s_0_26, 25, 1, 0}, /* 27 */ { 3, s_0_27, -1, 3, 0}, /* 28 */ { 3, s_0_28, -1, 1, 0} }; static const symbol s_1_0[2] = { 'd', 't' }; static const symbol s_1_1[2] = { 'v', 't' }; static const struct among a_1[2] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0} }; static const symbol s_2_0[3] = { 'l', 'e', 'g' }; static const symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; static const symbol s_2_2[2] = { 'i', 'g' }; static const symbol s_2_3[3] = { 'e', 'i', 'g' }; static const symbol s_2_4[3] = { 'l', 'i', 'g' }; static const symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; static const symbol s_2_6[3] = { 'e', 'l', 's' }; static const symbol s_2_7[3] = { 'l', 'o', 'v' }; static const symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; static const symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; static const symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; static const struct among a_2[11] = { /* 0 */ { 3, s_2_0, -1, 1, 0}, /* 1 */ { 4, s_2_1, 0, 1, 0}, /* 2 */ { 2, s_2_2, -1, 1, 0}, /* 3 */ { 3, s_2_3, 2, 1, 0}, /* 4 */ { 3, s_2_4, 2, 1, 0}, /* 5 */ { 4, s_2_5, 4, 1, 0}, /* 6 */ { 3, s_2_6, -1, 1, 0}, /* 7 */ { 3, s_2_7, -1, 1, 0}, /* 8 */ { 4, s_2_8, 7, 1, 0}, /* 9 */ { 4, s_2_9, 7, 1, 0}, /* 10 */ { 7, s_2_10, 9, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; static const unsigned char g_s_ending[] = { 119, 125, 149, 1 }; static const symbol s_0[] = { 'e', 'r' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 28 */ { int c_test1 = z->c; /* test, line 30 */ { int ret = z->c + 3; /* hop, line 30 */ if (0 > ret || ret > z->l) return 0; z->c = ret; } z->I[1] = z->c; /* setmark x, line 30 */ z->c = c_test1; } if (out_grouping(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 31 */ { /* gopast */ /* non v, line 31 */ int ret = in_grouping(z, g_v, 97, 248, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 31 */ /* try, line 32 */ if (!(z->I[0] < z->I[1])) goto lab0; /* $p1 < , line 32 */ z->I[0] = z->I[1]; /* $p1 = , line 32 */ lab0: return 1; } static int r_main_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 38 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 38 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 38 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851426 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 38 */ among_var = find_among_b(z, a_0, 29); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 38 */ z->lb = mlimit1; } switch (among_var) { /* among, line 39 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 2: { int m2 = z->l - z->c; (void)m2; /* or, line 46 */ if (in_grouping_b(z, g_s_ending, 98, 122, 0)) goto lab1; /* grouping s_ending, line 46 */ goto lab0; lab1: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'k') return 0; /* literal, line 46 */ z->c--; if (out_grouping_b(z, g_v, 97, 248, 0)) return 0; /* non v, line 46 */ } lab0: { int ret = slice_del(z); /* delete, line 46 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_0); /* <-, line 48 */ if (ret < 0) return ret; } break; } return 1; } static int r_consonant_pair(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 53 */ { int m2 = z->l - z->c; (void)m2; /* setlimit, line 54 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 54 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; z->ket = z->c; /* [, line 54 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 116) { z->lb = mlimit2; return 0; } /* substring, line 54 */ if (!(find_among_b(z, a_1, 2))) { z->lb = mlimit2; return 0; } z->bra = z->c; /* ], line 54 */ z->lb = mlimit2; } z->c = z->l - m_test1; } if (z->c <= z->lb) return 0; z->c--; /* next, line 59 */ z->bra = z->c; /* ], line 59 */ { int ret = slice_del(z); /* delete, line 59 */ if (ret < 0) return ret; } return 1; } static int r_other_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 63 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 63 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 63 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718720 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 63 */ among_var = find_among_b(z, a_2, 11); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 63 */ z->lb = mlimit1; } switch (among_var) { /* among, line 64 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 67 */ if (ret < 0) return ret; } break; } return 1; } extern int norwegian_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 74 */ { int ret = r_mark_regions(z); /* call mark_regions, line 74 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 75 */ { int m2 = z->l - z->c; (void)m2; /* do, line 76 */ { int ret = r_main_suffix(z); /* call main_suffix, line 76 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 77 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 77 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 78 */ { int ret = r_other_suffix(z); /* call other_suffix, line 78 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } z->c = z->lb; return 1; } extern struct SN_env * norwegian_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } extern void norwegian_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_norwegian.h000066400000000000000000000005531364126773500246400ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * norwegian_ISO_8859_1_create_env(void); extern void norwegian_ISO_8859_1_close_env(struct SN_env * z); extern int norwegian_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_porter.c000066400000000000000000000621351364126773500241610ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int porter_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_Step_5b(struct SN_env * z); static int r_Step_5a(struct SN_env * z); static int r_Step_4(struct SN_env * z); static int r_Step_3(struct SN_env * z); static int r_Step_2(struct SN_env * z); static int r_Step_1c(struct SN_env * z); static int r_Step_1b(struct SN_env * z); static int r_Step_1a(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_shortv(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * porter_ISO_8859_1_create_env(void); extern void porter_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 's' }; static const symbol s_0_1[3] = { 'i', 'e', 's' }; static const symbol s_0_2[4] = { 's', 's', 'e', 's' }; static const symbol s_0_3[2] = { 's', 's' }; static const struct among a_0[4] = { /* 0 */ { 1, s_0_0, -1, 3, 0}, /* 1 */ { 3, s_0_1, 0, 2, 0}, /* 2 */ { 4, s_0_2, 0, 1, 0}, /* 3 */ { 2, s_0_3, 0, -1, 0} }; static const symbol s_1_1[2] = { 'b', 'b' }; static const symbol s_1_2[2] = { 'd', 'd' }; static const symbol s_1_3[2] = { 'f', 'f' }; static const symbol s_1_4[2] = { 'g', 'g' }; static const symbol s_1_5[2] = { 'b', 'l' }; static const symbol s_1_6[2] = { 'm', 'm' }; static const symbol s_1_7[2] = { 'n', 'n' }; static const symbol s_1_8[2] = { 'p', 'p' }; static const symbol s_1_9[2] = { 'r', 'r' }; static const symbol s_1_10[2] = { 'a', 't' }; static const symbol s_1_11[2] = { 't', 't' }; static const symbol s_1_12[2] = { 'i', 'z' }; static const struct among a_1[13] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_1_1, 0, 2, 0}, /* 2 */ { 2, s_1_2, 0, 2, 0}, /* 3 */ { 2, s_1_3, 0, 2, 0}, /* 4 */ { 2, s_1_4, 0, 2, 0}, /* 5 */ { 2, s_1_5, 0, 1, 0}, /* 6 */ { 2, s_1_6, 0, 2, 0}, /* 7 */ { 2, s_1_7, 0, 2, 0}, /* 8 */ { 2, s_1_8, 0, 2, 0}, /* 9 */ { 2, s_1_9, 0, 2, 0}, /* 10 */ { 2, s_1_10, 0, 1, 0}, /* 11 */ { 2, s_1_11, 0, 2, 0}, /* 12 */ { 2, s_1_12, 0, 1, 0} }; static const symbol s_2_0[2] = { 'e', 'd' }; static const symbol s_2_1[3] = { 'e', 'e', 'd' }; static const symbol s_2_2[3] = { 'i', 'n', 'g' }; static const struct among a_2[3] = { /* 0 */ { 2, s_2_0, -1, 2, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 3, s_2_2, -1, 2, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; static const symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; static const symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; static const symbol s_3_3[3] = { 'e', 'l', 'i' }; static const symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; static const symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; static const symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; static const symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; static const symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; static const symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; static const symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; static const symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; static const symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; static const symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; static const symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; static const symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; static const symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; static const struct among a_3[20] = { /* 0 */ { 4, s_3_0, -1, 3, 0}, /* 1 */ { 4, s_3_1, -1, 2, 0}, /* 2 */ { 4, s_3_2, -1, 4, 0}, /* 3 */ { 3, s_3_3, -1, 6, 0}, /* 4 */ { 4, s_3_4, -1, 9, 0}, /* 5 */ { 5, s_3_5, -1, 12, 0}, /* 6 */ { 5, s_3_6, -1, 5, 0}, /* 7 */ { 5, s_3_7, -1, 10, 0}, /* 8 */ { 6, s_3_8, -1, 14, 0}, /* 9 */ { 5, s_3_9, -1, 13, 0}, /* 10 */ { 6, s_3_10, -1, 1, 0}, /* 11 */ { 7, s_3_11, 10, 8, 0}, /* 12 */ { 5, s_3_12, -1, 10, 0}, /* 13 */ { 5, s_3_13, -1, 8, 0}, /* 14 */ { 7, s_3_14, 13, 7, 0}, /* 15 */ { 4, s_3_15, -1, 7, 0}, /* 16 */ { 4, s_3_16, -1, 8, 0}, /* 17 */ { 7, s_3_17, -1, 13, 0}, /* 18 */ { 7, s_3_18, -1, 11, 0}, /* 19 */ { 7, s_3_19, -1, 12, 0} }; static const symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; static const symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; static const symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; static const symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_4_5[3] = { 'f', 'u', 'l' }; static const symbol s_4_6[4] = { 'n', 'e', 's', 's' }; static const struct among a_4[7] = { /* 0 */ { 5, s_4_0, -1, 2, 0}, /* 1 */ { 5, s_4_1, -1, 3, 0}, /* 2 */ { 5, s_4_2, -1, 1, 0}, /* 3 */ { 5, s_4_3, -1, 2, 0}, /* 4 */ { 4, s_4_4, -1, 2, 0}, /* 5 */ { 3, s_4_5, -1, 3, 0}, /* 6 */ { 4, s_4_6, -1, 3, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_5_5[3] = { 'a', 't', 'e' }; static const symbol s_5_6[3] = { 'i', 'v', 'e' }; static const symbol s_5_7[3] = { 'i', 'z', 'e' }; static const symbol s_5_8[3] = { 'i', 't', 'i' }; static const symbol s_5_9[2] = { 'a', 'l' }; static const symbol s_5_10[3] = { 'i', 's', 'm' }; static const symbol s_5_11[3] = { 'i', 'o', 'n' }; static const symbol s_5_12[2] = { 'e', 'r' }; static const symbol s_5_13[3] = { 'o', 'u', 's' }; static const symbol s_5_14[3] = { 'a', 'n', 't' }; static const symbol s_5_15[3] = { 'e', 'n', 't' }; static const symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; static const symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; static const symbol s_5_18[2] = { 'o', 'u' }; static const struct among a_5[19] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 4, s_5_2, -1, 1, 0}, /* 3 */ { 4, s_5_3, -1, 1, 0}, /* 4 */ { 4, s_5_4, -1, 1, 0}, /* 5 */ { 3, s_5_5, -1, 1, 0}, /* 6 */ { 3, s_5_6, -1, 1, 0}, /* 7 */ { 3, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 1, 0}, /* 9 */ { 2, s_5_9, -1, 1, 0}, /* 10 */ { 3, s_5_10, -1, 1, 0}, /* 11 */ { 3, s_5_11, -1, 2, 0}, /* 12 */ { 2, s_5_12, -1, 1, 0}, /* 13 */ { 3, s_5_13, -1, 1, 0}, /* 14 */ { 3, s_5_14, -1, 1, 0}, /* 15 */ { 3, s_5_15, -1, 1, 0}, /* 16 */ { 4, s_5_16, 15, 1, 0}, /* 17 */ { 5, s_5_17, 16, 1, 0}, /* 18 */ { 2, s_5_18, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1 }; static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; static const symbol s_0[] = { 's', 's' }; static const symbol s_1[] = { 'i' }; static const symbol s_2[] = { 'e', 'e' }; static const symbol s_3[] = { 'e' }; static const symbol s_4[] = { 'e' }; static const symbol s_5[] = { 'i' }; static const symbol s_6[] = { 't', 'i', 'o', 'n' }; static const symbol s_7[] = { 'e', 'n', 'c', 'e' }; static const symbol s_8[] = { 'a', 'n', 'c', 'e' }; static const symbol s_9[] = { 'a', 'b', 'l', 'e' }; static const symbol s_10[] = { 'e', 'n', 't' }; static const symbol s_11[] = { 'e' }; static const symbol s_12[] = { 'i', 'z', 'e' }; static const symbol s_13[] = { 'a', 't', 'e' }; static const symbol s_14[] = { 'a', 'l' }; static const symbol s_15[] = { 'a', 'l' }; static const symbol s_16[] = { 'f', 'u', 'l' }; static const symbol s_17[] = { 'o', 'u', 's' }; static const symbol s_18[] = { 'i', 'v', 'e' }; static const symbol s_19[] = { 'b', 'l', 'e' }; static const symbol s_20[] = { 'a', 'l' }; static const symbol s_21[] = { 'i', 'c' }; static const symbol s_22[] = { 'Y' }; static const symbol s_23[] = { 'Y' }; static const symbol s_24[] = { 'y' }; static int r_shortv(struct SN_env * z) { /* backwardmode */ if (out_grouping_b(z, g_v_WXY, 89, 121, 0)) return 0; /* non v_WXY, line 19 */ if (in_grouping_b(z, g_v, 97, 121, 0)) return 0; /* grouping v, line 19 */ if (out_grouping_b(z, g_v, 97, 121, 0)) return 0; /* non v, line 19 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 21 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 22 */ return 1; } static int r_Step_1a(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 25 */ if (z->c <= z->lb || z->p[z->c - 1] != 115) return 0; /* substring, line 25 */ among_var = find_among_b(z, a_0, 4); if (!(among_var)) return 0; z->bra = z->c; /* ], line 25 */ switch (among_var) { /* among, line 25 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 29 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_1b(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 34 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0; /* substring, line 34 */ among_var = find_among_b(z, a_2, 3); if (!(among_var)) return 0; z->bra = z->c; /* ], line 34 */ switch (among_var) { /* among, line 34 */ case 0: return 0; case 1: { int ret = r_R1(z); /* call R1, line 35 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ if (ret < 0) return ret; } break; case 2: { int m_test1 = z->l - z->c; /* test, line 38 */ { /* gopast */ /* grouping v, line 38 */ int ret = out_grouping_b(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } z->c = z->l - m_test1; } { int ret = slice_del(z); /* delete, line 38 */ if (ret < 0) return ret; } { int m_test2 = z->l - z->c; /* test, line 39 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else /* substring, line 39 */ among_var = find_among_b(z, a_1, 13); if (!(among_var)) return 0; z->c = z->l - m_test2; } switch (among_var) { /* among, line 39 */ case 0: return 0; case 1: { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ z->c = saved_c; } if (ret < 0) return ret; } break; case 2: z->ket = z->c; /* [, line 44 */ if (z->c <= z->lb) return 0; z->c--; /* next, line 44 */ z->bra = z->c; /* ], line 44 */ { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 3: if (z->c != z->I[0]) return 0; /* atmark, line 45 */ { int m_test3 = z->l - z->c; /* test, line 45 */ { int ret = r_shortv(z); /* call shortv, line 45 */ if (ret <= 0) return ret; } z->c = z->l - m_test3; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ z->c = saved_c; } if (ret < 0) return ret; } break; } break; } return 1; } static int r_Step_1c(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 52 */ { int m1 = z->l - z->c; (void)m1; /* or, line 52 */ if (z->c <= z->lb || z->p[z->c - 1] != 'y') goto lab1; /* literal, line 52 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 'Y') return 0; /* literal, line 52 */ z->c--; } lab0: z->bra = z->c; /* ], line 52 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping_b(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } { int ret = slice_from_s(z, 1, s_5); /* <-, line 54 */ if (ret < 0) return ret; } return 1; } static int r_Step_2(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 58 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 58 */ among_var = find_among_b(z, a_3, 20); if (!(among_var)) return 0; z->bra = z->c; /* ], line 58 */ { int ret = r_R1(z); /* call R1, line 58 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 58 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_6); /* <-, line 59 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_7); /* <-, line 60 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_8); /* <-, line 61 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 4, s_9); /* <-, line 62 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_10); /* <-, line 63 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_11); /* <-, line 64 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_12); /* <-, line 66 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 3, s_13); /* <-, line 68 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 2, s_14); /* <-, line 69 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 2, s_15); /* <-, line 71 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 3, s_16); /* <-, line 72 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 3, s_17); /* <-, line 74 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_from_s(z, 3, s_18); /* <-, line 76 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 3, s_19); /* <-, line 77 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_3(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 82 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 82 */ among_var = find_among_b(z, a_4, 7); if (!(among_var)) return 0; z->bra = z->c; /* ], line 82 */ { int ret = r_R1(z); /* call R1, line 82 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 82 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_20); /* <-, line 83 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_21); /* <-, line 85 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 87 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_4(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 92 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((3961384 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 92 */ among_var = find_among_b(z, a_5, 19); if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ { int ret = r_R2(z); /* call R2, line 92 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 92 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 95 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 96 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab1; /* literal, line 96 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 't') return 0; /* literal, line 96 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_5a(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 101 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 101 */ z->c--; z->bra = z->c; /* ], line 101 */ { int m1 = z->l - z->c; (void)m1; /* or, line 102 */ { int ret = r_R2(z); /* call R2, line 102 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_R1(z); /* call R1, line 102 */ if (ret <= 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* not, line 102 */ { int ret = r_shortv(z); /* call shortv, line 102 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } return 0; lab2: z->c = z->l - m2; } } lab0: { int ret = slice_del(z); /* delete, line 103 */ if (ret < 0) return ret; } return 1; } static int r_Step_5b(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 107 */ if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 107 */ z->c--; z->bra = z->c; /* ], line 107 */ { int ret = r_R2(z); /* call R2, line 108 */ if (ret <= 0) return ret; } if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 108 */ z->c--; { int ret = slice_del(z); /* delete, line 109 */ if (ret < 0) return ret; } return 1; } extern int porter_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset Y_found, line 115 */ { int c1 = z->c; /* do, line 116 */ z->bra = z->c; /* [, line 116 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab0; /* literal, line 116 */ z->c++; z->ket = z->c; /* ], line 116 */ { int ret = slice_from_s(z, 1, s_22); /* <-, line 116 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 116 */ lab0: z->c = c1; } { int c2 = z->c; /* do, line 117 */ while(1) { /* repeat, line 117 */ int c3 = z->c; while(1) { /* goto, line 117 */ int c4 = z->c; if (in_grouping(z, g_v, 97, 121, 0)) goto lab3; /* grouping v, line 117 */ z->bra = z->c; /* [, line 117 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab3; /* literal, line 117 */ z->c++; z->ket = z->c; /* ], line 117 */ z->c = c4; break; lab3: z->c = c4; if (z->c >= z->l) goto lab2; z->c++; /* goto, line 117 */ } { int ret = slice_from_s(z, 1, s_23); /* <-, line 117 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 117 */ continue; lab2: z->c = c3; break; } z->c = c2; } z->I[0] = z->l; /* $p1 = , line 119 */ z->I[1] = z->l; /* $p2 = , line 120 */ { int c5 = z->c; /* do, line 121 */ { /* gopast */ /* grouping v, line 122 */ int ret = out_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 122 */ int ret = in_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 122 */ { /* gopast */ /* grouping v, line 123 */ int ret = out_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 123 */ int ret = in_grouping(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 123 */ lab4: z->c = c5; } z->lb = z->c; z->c = z->l; /* backwards, line 126 */ { int m6 = z->l - z->c; (void)m6; /* do, line 127 */ { int ret = r_Step_1a(z); /* call Step_1a, line 127 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = z->l - m6; } { int m7 = z->l - z->c; (void)m7; /* do, line 128 */ { int ret = r_Step_1b(z); /* call Step_1b, line 128 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 129 */ { int ret = r_Step_1c(z); /* call Step_1c, line 129 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 130 */ { int ret = r_Step_2(z); /* call Step_2, line 130 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 131 */ { int ret = r_Step_3(z); /* call Step_3, line 131 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m10; } { int m11 = z->l - z->c; (void)m11; /* do, line 132 */ { int ret = r_Step_4(z); /* call Step_4, line 132 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } lab10: z->c = z->l - m11; } { int m12 = z->l - z->c; (void)m12; /* do, line 133 */ { int ret = r_Step_5a(z); /* call Step_5a, line 133 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } lab11: z->c = z->l - m12; } { int m13 = z->l - z->c; (void)m13; /* do, line 134 */ { int ret = r_Step_5b(z); /* call Step_5b, line 134 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } lab12: z->c = z->l - m13; } z->c = z->lb; { int c14 = z->c; /* do, line 137 */ if (!(z->B[0])) goto lab13; /* Boolean test Y_found, line 137 */ while(1) { /* repeat, line 137 */ int c15 = z->c; while(1) { /* goto, line 137 */ int c16 = z->c; z->bra = z->c; /* [, line 137 */ if (z->c == z->l || z->p[z->c] != 'Y') goto lab15; /* literal, line 137 */ z->c++; z->ket = z->c; /* ], line 137 */ z->c = c16; break; lab15: z->c = c16; if (z->c >= z->l) goto lab14; z->c++; /* goto, line 137 */ } { int ret = slice_from_s(z, 1, s_24); /* <-, line 137 */ if (ret < 0) return ret; } continue; lab14: z->c = c15; break; } lab13: z->c = c14; } return 1; } extern struct SN_env * porter_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 1); } extern void porter_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_porter.h000066400000000000000000000005421364126773500241600ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * porter_ISO_8859_1_create_env(void); extern void porter_ISO_8859_1_close_env(struct SN_env * z); extern int porter_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_portuguese.c000066400000000000000000001137441364126773500250530ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int portuguese_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_residual_form(struct SN_env * z); static int r_residual_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * portuguese_ISO_8859_1_create_env(void); extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 0xE3 }; static const symbol s_0_2[1] = { 0xF5 }; static const struct among a_0[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_0_1, 0, 1, 0}, /* 2 */ { 1, s_0_2, 0, 2, 0} }; static const symbol s_1_1[2] = { 'a', '~' }; static const symbol s_1_2[2] = { 'o', '~' }; static const struct among a_1[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_1_1, 0, 1, 0}, /* 2 */ { 2, s_1_2, 0, 2, 0} }; static const symbol s_2_0[2] = { 'i', 'c' }; static const symbol s_2_1[2] = { 'a', 'd' }; static const symbol s_2_2[2] = { 'o', 's' }; static const symbol s_2_3[2] = { 'i', 'v' }; static const struct among a_2[4] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 2, s_2_2, -1, -1, 0}, /* 3 */ { 2, s_2_3, -1, 1, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; static const symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; static const symbol s_3_2[4] = { 0xED, 'v', 'e', 'l' }; static const struct among a_3[3] = { /* 0 */ { 4, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0}, /* 2 */ { 4, s_3_2, -1, 1, 0} }; static const symbol s_4_0[2] = { 'i', 'c' }; static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_4_2[2] = { 'i', 'v' }; static const struct among a_4[3] = { /* 0 */ { 2, s_4_0, -1, 1, 0}, /* 1 */ { 4, s_4_1, -1, 1, 0}, /* 2 */ { 2, s_4_2, -1, 1, 0} }; static const symbol s_5_0[3] = { 'i', 'c', 'a' }; static const symbol s_5_1[5] = { 0xE2, 'n', 'c', 'i', 'a' }; static const symbol s_5_2[5] = { 0xEA, 'n', 'c', 'i', 'a' }; static const symbol s_5_3[5] = { 'l', 'o', 'g', 'i', 'a' }; static const symbol s_5_4[3] = { 'i', 'r', 'a' }; static const symbol s_5_5[5] = { 'a', 'd', 'o', 'r', 'a' }; static const symbol s_5_6[3] = { 'o', 's', 'a' }; static const symbol s_5_7[4] = { 'i', 's', 't', 'a' }; static const symbol s_5_8[3] = { 'i', 'v', 'a' }; static const symbol s_5_9[3] = { 'e', 'z', 'a' }; static const symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; static const symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; static const symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; static const symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; static const symbol s_5_14[4] = { 0xE1, 'v', 'e', 'l' }; static const symbol s_5_15[4] = { 0xED, 'v', 'e', 'l' }; static const symbol s_5_16[3] = { 'i', 'c', 'o' }; static const symbol s_5_17[4] = { 'i', 's', 'm', 'o' }; static const symbol s_5_18[3] = { 'o', 's', 'o' }; static const symbol s_5_19[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; static const symbol s_5_20[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; static const symbol s_5_21[3] = { 'i', 'v', 'o' }; static const symbol s_5_22[5] = { 'a', 0xE7, 'a', '~', 'o' }; static const symbol s_5_23[5] = { 'u', 0xE7, 'a', '~', 'o' }; static const symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; static const symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; static const symbol s_5_26[6] = { 0xEA, 'n', 'c', 'i', 'a', 's' }; static const symbol s_5_27[6] = { 'l', 'o', 'g', 'i', 'a', 's' }; static const symbol s_5_28[4] = { 'i', 'r', 'a', 's' }; static const symbol s_5_29[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; static const symbol s_5_30[4] = { 'o', 's', 'a', 's' }; static const symbol s_5_31[5] = { 'i', 's', 't', 'a', 's' }; static const symbol s_5_32[4] = { 'i', 'v', 'a', 's' }; static const symbol s_5_33[4] = { 'e', 'z', 'a', 's' }; static const symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; static const symbol s_5_35[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; static const symbol s_5_36[5] = { 'a', 'n', 't', 'e', 's' }; static const symbol s_5_37[6] = { 'a', 0xE7, 'o', '~', 'e', 's' }; static const symbol s_5_38[6] = { 'u', 0xE7, 'o', '~', 'e', 's' }; static const symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; static const symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; static const symbol s_5_41[4] = { 'o', 's', 'o', 's' }; static const symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; static const symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; static const symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; static const struct among a_5[45] = { /* 0 */ { 3, s_5_0, -1, 1, 0}, /* 1 */ { 5, s_5_1, -1, 1, 0}, /* 2 */ { 5, s_5_2, -1, 4, 0}, /* 3 */ { 5, s_5_3, -1, 2, 0}, /* 4 */ { 3, s_5_4, -1, 9, 0}, /* 5 */ { 5, s_5_5, -1, 1, 0}, /* 6 */ { 3, s_5_6, -1, 1, 0}, /* 7 */ { 4, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 8, 0}, /* 9 */ { 3, s_5_9, -1, 1, 0}, /* 10 */ { 5, s_5_10, -1, 7, 0}, /* 11 */ { 4, s_5_11, -1, 1, 0}, /* 12 */ { 5, s_5_12, -1, 6, 0}, /* 13 */ { 6, s_5_13, 12, 5, 0}, /* 14 */ { 4, s_5_14, -1, 1, 0}, /* 15 */ { 4, s_5_15, -1, 1, 0}, /* 16 */ { 3, s_5_16, -1, 1, 0}, /* 17 */ { 4, s_5_17, -1, 1, 0}, /* 18 */ { 3, s_5_18, -1, 1, 0}, /* 19 */ { 6, s_5_19, -1, 1, 0}, /* 20 */ { 6, s_5_20, -1, 1, 0}, /* 21 */ { 3, s_5_21, -1, 8, 0}, /* 22 */ { 5, s_5_22, -1, 1, 0}, /* 23 */ { 5, s_5_23, -1, 3, 0}, /* 24 */ { 4, s_5_24, -1, 1, 0}, /* 25 */ { 4, s_5_25, -1, 1, 0}, /* 26 */ { 6, s_5_26, -1, 4, 0}, /* 27 */ { 6, s_5_27, -1, 2, 0}, /* 28 */ { 4, s_5_28, -1, 9, 0}, /* 29 */ { 6, s_5_29, -1, 1, 0}, /* 30 */ { 4, s_5_30, -1, 1, 0}, /* 31 */ { 5, s_5_31, -1, 1, 0}, /* 32 */ { 4, s_5_32, -1, 8, 0}, /* 33 */ { 4, s_5_33, -1, 1, 0}, /* 34 */ { 6, s_5_34, -1, 7, 0}, /* 35 */ { 6, s_5_35, -1, 1, 0}, /* 36 */ { 5, s_5_36, -1, 1, 0}, /* 37 */ { 6, s_5_37, -1, 1, 0}, /* 38 */ { 6, s_5_38, -1, 3, 0}, /* 39 */ { 4, s_5_39, -1, 1, 0}, /* 40 */ { 5, s_5_40, -1, 1, 0}, /* 41 */ { 4, s_5_41, -1, 1, 0}, /* 42 */ { 7, s_5_42, -1, 1, 0}, /* 43 */ { 7, s_5_43, -1, 1, 0}, /* 44 */ { 4, s_5_44, -1, 8, 0} }; static const symbol s_6_0[3] = { 'a', 'd', 'a' }; static const symbol s_6_1[3] = { 'i', 'd', 'a' }; static const symbol s_6_2[2] = { 'i', 'a' }; static const symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; static const symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; static const symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; static const symbol s_6_6[3] = { 'a', 'r', 'a' }; static const symbol s_6_7[3] = { 'e', 'r', 'a' }; static const symbol s_6_8[3] = { 'i', 'r', 'a' }; static const symbol s_6_9[3] = { 'a', 'v', 'a' }; static const symbol s_6_10[4] = { 'a', 's', 's', 'e' }; static const symbol s_6_11[4] = { 'e', 's', 's', 'e' }; static const symbol s_6_12[4] = { 'i', 's', 's', 'e' }; static const symbol s_6_13[4] = { 'a', 's', 't', 'e' }; static const symbol s_6_14[4] = { 'e', 's', 't', 'e' }; static const symbol s_6_15[4] = { 'i', 's', 't', 'e' }; static const symbol s_6_16[2] = { 'e', 'i' }; static const symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; static const symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; static const symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; static const symbol s_6_20[2] = { 'a', 'm' }; static const symbol s_6_21[3] = { 'i', 'a', 'm' }; static const symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; static const symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; static const symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; static const symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; static const symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; static const symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; static const symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; static const symbol s_6_29[2] = { 'e', 'm' }; static const symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; static const symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; static const symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; static const symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; static const symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; static const symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; static const symbol s_6_36[3] = { 'a', 'd', 'o' }; static const symbol s_6_37[3] = { 'i', 'd', 'o' }; static const symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; static const symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; static const symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; static const symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; static const symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; static const symbol s_6_44[2] = { 'a', 'r' }; static const symbol s_6_45[2] = { 'e', 'r' }; static const symbol s_6_46[2] = { 'i', 'r' }; static const symbol s_6_47[2] = { 'a', 's' }; static const symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; static const symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; static const symbol s_6_50[3] = { 'i', 'a', 's' }; static const symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; static const symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; static const symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; static const symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; static const symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; static const symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; static const symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; static const symbol s_6_58[2] = { 'e', 's' }; static const symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; static const symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; static const symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; static const symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; static const symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; static const symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; static const symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; static const symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; static const symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; static const symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; static const symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; static const symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; static const symbol s_6_71[2] = { 'i', 's' }; static const symbol s_6_72[3] = { 'a', 'i', 's' }; static const symbol s_6_73[3] = { 'e', 'i', 's' }; static const symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; static const symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; static const symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; static const symbol s_6_77[5] = { 0xE1, 'r', 'e', 'i', 's' }; static const symbol s_6_78[5] = { 0xE9, 'r', 'e', 'i', 's' }; static const symbol s_6_79[5] = { 0xED, 'r', 'e', 'i', 's' }; static const symbol s_6_80[6] = { 0xE1, 's', 's', 'e', 'i', 's' }; static const symbol s_6_81[6] = { 0xE9, 's', 's', 'e', 'i', 's' }; static const symbol s_6_82[6] = { 0xED, 's', 's', 'e', 'i', 's' }; static const symbol s_6_83[5] = { 0xE1, 'v', 'e', 'i', 's' }; static const symbol s_6_84[4] = { 0xED, 'e', 'i', 's' }; static const symbol s_6_85[6] = { 'a', 'r', 0xED, 'e', 'i', 's' }; static const symbol s_6_86[6] = { 'e', 'r', 0xED, 'e', 'i', 's' }; static const symbol s_6_87[6] = { 'i', 'r', 0xED, 'e', 'i', 's' }; static const symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; static const symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; static const symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; static const symbol s_6_91[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; static const symbol s_6_92[6] = { 0xE9, 'r', 'a', 'm', 'o', 's' }; static const symbol s_6_93[6] = { 0xED, 'r', 'a', 'm', 'o', 's' }; static const symbol s_6_94[6] = { 0xE1, 'v', 'a', 'm', 'o', 's' }; static const symbol s_6_95[5] = { 0xED, 'a', 'm', 'o', 's' }; static const symbol s_6_96[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; static const symbol s_6_97[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; static const symbol s_6_98[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; static const symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; static const symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; static const symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; static const symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; static const symbol s_6_103[7] = { 0xE1, 's', 's', 'e', 'm', 'o', 's' }; static const symbol s_6_104[7] = { 0xEA, 's', 's', 'e', 'm', 'o', 's' }; static const symbol s_6_105[7] = { 0xED, 's', 's', 'e', 'm', 'o', 's' }; static const symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; static const symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; static const symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; static const symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; static const symbol s_6_110[4] = { 0xE1, 'm', 'o', 's' }; static const symbol s_6_111[4] = { 'a', 'r', 0xE1, 's' }; static const symbol s_6_112[4] = { 'e', 'r', 0xE1, 's' }; static const symbol s_6_113[4] = { 'i', 'r', 0xE1, 's' }; static const symbol s_6_114[2] = { 'e', 'u' }; static const symbol s_6_115[2] = { 'i', 'u' }; static const symbol s_6_116[2] = { 'o', 'u' }; static const symbol s_6_117[3] = { 'a', 'r', 0xE1 }; static const symbol s_6_118[3] = { 'e', 'r', 0xE1 }; static const symbol s_6_119[3] = { 'i', 'r', 0xE1 }; static const struct among a_6[120] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 3, s_6_1, -1, 1, 0}, /* 2 */ { 2, s_6_2, -1, 1, 0}, /* 3 */ { 4, s_6_3, 2, 1, 0}, /* 4 */ { 4, s_6_4, 2, 1, 0}, /* 5 */ { 4, s_6_5, 2, 1, 0}, /* 6 */ { 3, s_6_6, -1, 1, 0}, /* 7 */ { 3, s_6_7, -1, 1, 0}, /* 8 */ { 3, s_6_8, -1, 1, 0}, /* 9 */ { 3, s_6_9, -1, 1, 0}, /* 10 */ { 4, s_6_10, -1, 1, 0}, /* 11 */ { 4, s_6_11, -1, 1, 0}, /* 12 */ { 4, s_6_12, -1, 1, 0}, /* 13 */ { 4, s_6_13, -1, 1, 0}, /* 14 */ { 4, s_6_14, -1, 1, 0}, /* 15 */ { 4, s_6_15, -1, 1, 0}, /* 16 */ { 2, s_6_16, -1, 1, 0}, /* 17 */ { 4, s_6_17, 16, 1, 0}, /* 18 */ { 4, s_6_18, 16, 1, 0}, /* 19 */ { 4, s_6_19, 16, 1, 0}, /* 20 */ { 2, s_6_20, -1, 1, 0}, /* 21 */ { 3, s_6_21, 20, 1, 0}, /* 22 */ { 5, s_6_22, 21, 1, 0}, /* 23 */ { 5, s_6_23, 21, 1, 0}, /* 24 */ { 5, s_6_24, 21, 1, 0}, /* 25 */ { 4, s_6_25, 20, 1, 0}, /* 26 */ { 4, s_6_26, 20, 1, 0}, /* 27 */ { 4, s_6_27, 20, 1, 0}, /* 28 */ { 4, s_6_28, 20, 1, 0}, /* 29 */ { 2, s_6_29, -1, 1, 0}, /* 30 */ { 4, s_6_30, 29, 1, 0}, /* 31 */ { 4, s_6_31, 29, 1, 0}, /* 32 */ { 4, s_6_32, 29, 1, 0}, /* 33 */ { 5, s_6_33, 29, 1, 0}, /* 34 */ { 5, s_6_34, 29, 1, 0}, /* 35 */ { 5, s_6_35, 29, 1, 0}, /* 36 */ { 3, s_6_36, -1, 1, 0}, /* 37 */ { 3, s_6_37, -1, 1, 0}, /* 38 */ { 4, s_6_38, -1, 1, 0}, /* 39 */ { 4, s_6_39, -1, 1, 0}, /* 40 */ { 4, s_6_40, -1, 1, 0}, /* 41 */ { 5, s_6_41, -1, 1, 0}, /* 42 */ { 5, s_6_42, -1, 1, 0}, /* 43 */ { 5, s_6_43, -1, 1, 0}, /* 44 */ { 2, s_6_44, -1, 1, 0}, /* 45 */ { 2, s_6_45, -1, 1, 0}, /* 46 */ { 2, s_6_46, -1, 1, 0}, /* 47 */ { 2, s_6_47, -1, 1, 0}, /* 48 */ { 4, s_6_48, 47, 1, 0}, /* 49 */ { 4, s_6_49, 47, 1, 0}, /* 50 */ { 3, s_6_50, 47, 1, 0}, /* 51 */ { 5, s_6_51, 50, 1, 0}, /* 52 */ { 5, s_6_52, 50, 1, 0}, /* 53 */ { 5, s_6_53, 50, 1, 0}, /* 54 */ { 4, s_6_54, 47, 1, 0}, /* 55 */ { 4, s_6_55, 47, 1, 0}, /* 56 */ { 4, s_6_56, 47, 1, 0}, /* 57 */ { 4, s_6_57, 47, 1, 0}, /* 58 */ { 2, s_6_58, -1, 1, 0}, /* 59 */ { 5, s_6_59, 58, 1, 0}, /* 60 */ { 5, s_6_60, 58, 1, 0}, /* 61 */ { 5, s_6_61, 58, 1, 0}, /* 62 */ { 4, s_6_62, 58, 1, 0}, /* 63 */ { 4, s_6_63, 58, 1, 0}, /* 64 */ { 4, s_6_64, 58, 1, 0}, /* 65 */ { 5, s_6_65, 58, 1, 0}, /* 66 */ { 5, s_6_66, 58, 1, 0}, /* 67 */ { 5, s_6_67, 58, 1, 0}, /* 68 */ { 5, s_6_68, 58, 1, 0}, /* 69 */ { 5, s_6_69, 58, 1, 0}, /* 70 */ { 5, s_6_70, 58, 1, 0}, /* 71 */ { 2, s_6_71, -1, 1, 0}, /* 72 */ { 3, s_6_72, 71, 1, 0}, /* 73 */ { 3, s_6_73, 71, 1, 0}, /* 74 */ { 5, s_6_74, 73, 1, 0}, /* 75 */ { 5, s_6_75, 73, 1, 0}, /* 76 */ { 5, s_6_76, 73, 1, 0}, /* 77 */ { 5, s_6_77, 73, 1, 0}, /* 78 */ { 5, s_6_78, 73, 1, 0}, /* 79 */ { 5, s_6_79, 73, 1, 0}, /* 80 */ { 6, s_6_80, 73, 1, 0}, /* 81 */ { 6, s_6_81, 73, 1, 0}, /* 82 */ { 6, s_6_82, 73, 1, 0}, /* 83 */ { 5, s_6_83, 73, 1, 0}, /* 84 */ { 4, s_6_84, 73, 1, 0}, /* 85 */ { 6, s_6_85, 84, 1, 0}, /* 86 */ { 6, s_6_86, 84, 1, 0}, /* 87 */ { 6, s_6_87, 84, 1, 0}, /* 88 */ { 4, s_6_88, -1, 1, 0}, /* 89 */ { 4, s_6_89, -1, 1, 0}, /* 90 */ { 4, s_6_90, -1, 1, 0}, /* 91 */ { 6, s_6_91, 90, 1, 0}, /* 92 */ { 6, s_6_92, 90, 1, 0}, /* 93 */ { 6, s_6_93, 90, 1, 0}, /* 94 */ { 6, s_6_94, 90, 1, 0}, /* 95 */ { 5, s_6_95, 90, 1, 0}, /* 96 */ { 7, s_6_96, 95, 1, 0}, /* 97 */ { 7, s_6_97, 95, 1, 0}, /* 98 */ { 7, s_6_98, 95, 1, 0}, /* 99 */ { 4, s_6_99, -1, 1, 0}, /*100 */ { 6, s_6_100, 99, 1, 0}, /*101 */ { 6, s_6_101, 99, 1, 0}, /*102 */ { 6, s_6_102, 99, 1, 0}, /*103 */ { 7, s_6_103, 99, 1, 0}, /*104 */ { 7, s_6_104, 99, 1, 0}, /*105 */ { 7, s_6_105, 99, 1, 0}, /*106 */ { 4, s_6_106, -1, 1, 0}, /*107 */ { 5, s_6_107, -1, 1, 0}, /*108 */ { 5, s_6_108, -1, 1, 0}, /*109 */ { 5, s_6_109, -1, 1, 0}, /*110 */ { 4, s_6_110, -1, 1, 0}, /*111 */ { 4, s_6_111, -1, 1, 0}, /*112 */ { 4, s_6_112, -1, 1, 0}, /*113 */ { 4, s_6_113, -1, 1, 0}, /*114 */ { 2, s_6_114, -1, 1, 0}, /*115 */ { 2, s_6_115, -1, 1, 0}, /*116 */ { 2, s_6_116, -1, 1, 0}, /*117 */ { 3, s_6_117, -1, 1, 0}, /*118 */ { 3, s_6_118, -1, 1, 0}, /*119 */ { 3, s_6_119, -1, 1, 0} }; static const symbol s_7_0[1] = { 'a' }; static const symbol s_7_1[1] = { 'i' }; static const symbol s_7_2[1] = { 'o' }; static const symbol s_7_3[2] = { 'o', 's' }; static const symbol s_7_4[1] = { 0xE1 }; static const symbol s_7_5[1] = { 0xED }; static const symbol s_7_6[1] = { 0xF3 }; static const struct among a_7[7] = { /* 0 */ { 1, s_7_0, -1, 1, 0}, /* 1 */ { 1, s_7_1, -1, 1, 0}, /* 2 */ { 1, s_7_2, -1, 1, 0}, /* 3 */ { 2, s_7_3, -1, 1, 0}, /* 4 */ { 1, s_7_4, -1, 1, 0}, /* 5 */ { 1, s_7_5, -1, 1, 0}, /* 6 */ { 1, s_7_6, -1, 1, 0} }; static const symbol s_8_0[1] = { 'e' }; static const symbol s_8_1[1] = { 0xE7 }; static const symbol s_8_2[1] = { 0xE9 }; static const symbol s_8_3[1] = { 0xEA }; static const struct among a_8[4] = { /* 0 */ { 1, s_8_0, -1, 1, 0}, /* 1 */ { 1, s_8_1, -1, 2, 0}, /* 2 */ { 1, s_8_2, -1, 1, 0}, /* 3 */ { 1, s_8_3, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; static const symbol s_0[] = { 'a', '~' }; static const symbol s_1[] = { 'o', '~' }; static const symbol s_2[] = { 0xE3 }; static const symbol s_3[] = { 0xF5 }; static const symbol s_4[] = { 'l', 'o', 'g' }; static const symbol s_5[] = { 'u' }; static const symbol s_6[] = { 'e', 'n', 't', 'e' }; static const symbol s_7[] = { 'a', 't' }; static const symbol s_8[] = { 'a', 't' }; static const symbol s_9[] = { 'i', 'r' }; static const symbol s_10[] = { 'c' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 36 */ int c1 = z->c; z->bra = z->c; /* [, line 37 */ if (z->c >= z->l || (z->p[z->c + 0] != 227 && z->p[z->c + 0] != 245)) among_var = 3; else /* substring, line 37 */ among_var = find_among(z, a_0, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 37 */ switch (among_var) { /* among, line 37 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ if (ret < 0) return ret; } break; case 3: if (z->c >= z->l) goto lab0; z->c++; /* next, line 40 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 46 */ z->I[1] = z->l; /* $p1 = , line 47 */ z->I[2] = z->l; /* $p2 = , line 48 */ { int c1 = z->c; /* do, line 50 */ { int c2 = z->c; /* or, line 52 */ if (in_grouping(z, g_v, 97, 250, 0)) goto lab2; /* grouping v, line 51 */ { int c3 = z->c; /* or, line 51 */ if (out_grouping(z, g_v, 97, 250, 0)) goto lab4; /* non v, line 51 */ { /* gopast */ /* grouping v, line 51 */ int ret = out_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping(z, g_v, 97, 250, 0)) goto lab2; /* grouping v, line 51 */ { /* gopast */ /* non v, line 51 */ int ret = in_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping(z, g_v, 97, 250, 0)) goto lab0; /* non v, line 53 */ { int c4 = z->c; /* or, line 53 */ if (out_grouping(z, g_v, 97, 250, 0)) goto lab6; /* non v, line 53 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping(z, g_v, 97, 250, 0)) goto lab0; /* grouping v, line 53 */ if (z->c >= z->l) goto lab0; z->c++; /* next, line 53 */ } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 54 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 56 */ { /* gopast */ /* grouping v, line 57 */ int ret = out_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 57 */ int ret = in_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 57 */ { /* gopast */ /* grouping v, line 58 */ int ret = out_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 58 */ int ret = in_grouping(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 58 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 62 */ int c1 = z->c; z->bra = z->c; /* [, line 63 */ if (z->c + 1 >= z->l || z->p[z->c + 1] != 126) among_var = 3; else /* substring, line 63 */ among_var = find_among(z, a_1, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 63 */ switch (among_var) { /* among, line 63 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_2); /* <-, line 64 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_3); /* <-, line 65 */ if (ret < 0) return ret; } break; case 3: if (z->c >= z->l) goto lab0; z->c++; /* next, line 66 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 72 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 73 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 74 */ return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 77 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((823330 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 77 */ among_var = find_among_b(z, a_5, 45); if (!(among_var)) return 0; z->bra = z->c; /* ], line 77 */ switch (among_var) { /* among, line 77 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 93 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 93 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 98 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ if (ret < 0) return ret; } break; case 3: { int ret = r_R2(z); /* call R2, line 102 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 106 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R1(z); /* call R1, line 110 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 110 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 111 */ z->ket = z->c; /* [, line 112 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m1; goto lab0; } /* substring, line 112 */ among_var = find_among_b(z, a_2, 4); if (!(among_var)) { z->c = z->l - m1; goto lab0; } z->bra = z->c; /* ], line 112 */ { int ret = r_R2(z); /* call R2, line 112 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 112 */ if (ret < 0) return ret; } switch (among_var) { /* among, line 112 */ case 0: { z->c = z->l - m1; goto lab0; } case 1: z->ket = z->c; /* [, line 113 */ if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m1; goto lab0; } /* literal, line 113 */ z->bra = z->c; /* ], line 113 */ { int ret = r_R2(z); /* call R2, line 113 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 113 */ if (ret < 0) return ret; } break; } lab0: ; } break; case 6: { int ret = r_R2(z); /* call R2, line 122 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 123 */ z->ket = z->c; /* [, line 124 */ if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) { z->c = z->l - m2; goto lab1; } /* substring, line 124 */ among_var = find_among_b(z, a_3, 3); if (!(among_var)) { z->c = z->l - m2; goto lab1; } z->bra = z->c; /* ], line 124 */ switch (among_var) { /* among, line 124 */ case 0: { z->c = z->l - m2; goto lab1; } case 1: { int ret = r_R2(z); /* call R2, line 127 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 127 */ if (ret < 0) return ret; } break; } lab1: ; } break; case 7: { int ret = r_R2(z); /* call R2, line 134 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 135 */ z->ket = z->c; /* [, line 136 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m3; goto lab2; } /* substring, line 136 */ among_var = find_among_b(z, a_4, 3); if (!(among_var)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; /* ], line 136 */ switch (among_var) { /* among, line 136 */ case 0: { z->c = z->l - m3; goto lab2; } case 1: { int ret = r_R2(z); /* call R2, line 139 */ if (ret == 0) { z->c = z->l - m3; goto lab2; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 139 */ if (ret < 0) return ret; } break; } lab2: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 146 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 146 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 147 */ z->ket = z->c; /* [, line 148 */ if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m4; goto lab3; } /* literal, line 148 */ z->bra = z->c; /* ], line 148 */ { int ret = r_R2(z); /* call R2, line 148 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 148 */ if (ret < 0) return ret; } lab3: ; } break; case 9: { int ret = r_RV(z); /* call RV, line 153 */ if (ret <= 0) return ret; } if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 153 */ z->c--; { int ret = slice_from_s(z, 2, s_9); /* <-, line 154 */ if (ret < 0) return ret; } break; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 159 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 159 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 160 */ among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 160 */ switch (among_var) { /* among, line 160 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_residual_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 184 */ among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 184 */ switch (among_var) { /* among, line 184 */ case 0: return 0; case 1: { int ret = r_RV(z); /* call RV, line 187 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 187 */ if (ret < 0) return ret; } break; } return 1; } static int r_residual_form(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 192 */ among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 192 */ switch (among_var) { /* among, line 192 */ case 0: return 0; case 1: { int ret = r_RV(z); /* call RV, line 194 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 194 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 194 */ { int m1 = z->l - z->c; (void)m1; /* or, line 194 */ if (z->c <= z->lb || z->p[z->c - 1] != 'u') goto lab1; /* literal, line 194 */ z->c--; z->bra = z->c; /* ], line 194 */ { int m_test2 = z->l - z->c; /* test, line 194 */ if (z->c <= z->lb || z->p[z->c - 1] != 'g') goto lab1; /* literal, line 194 */ z->c--; z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 'i') return 0; /* literal, line 195 */ z->c--; z->bra = z->c; /* ], line 195 */ { int m_test3 = z->l - z->c; /* test, line 195 */ if (z->c <= z->lb || z->p[z->c - 1] != 'c') return 0; /* literal, line 195 */ z->c--; z->c = z->l - m_test3; } } lab0: { int ret = r_RV(z); /* call RV, line 195 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 195 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_10); /* <-, line 196 */ if (ret < 0) return ret; } break; } return 1; } extern int portuguese_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 202 */ { int ret = r_prelude(z); /* call prelude, line 202 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 203 */ { int ret = r_mark_regions(z); /* call mark_regions, line 203 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 204 */ { int m3 = z->l - z->c; (void)m3; /* do, line 205 */ { int m4 = z->l - z->c; (void)m4; /* or, line 209 */ { int m5 = z->l - z->c; (void)m5; /* and, line 207 */ { int m6 = z->l - z->c; (void)m6; /* or, line 206 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 206 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_verb_suffix(z); /* call verb_suffix, line 206 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: z->c = z->l - m5; { int m7 = z->l - z->c; (void)m7; /* do, line 207 */ z->ket = z->c; /* [, line 207 */ if (z->c <= z->lb || z->p[z->c - 1] != 'i') goto lab7; /* literal, line 207 */ z->c--; z->bra = z->c; /* ], line 207 */ { int m_test8 = z->l - z->c; /* test, line 207 */ if (z->c <= z->lb || z->p[z->c - 1] != 'c') goto lab7; /* literal, line 207 */ z->c--; z->c = z->l - m_test8; } { int ret = r_RV(z); /* call RV, line 207 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 207 */ if (ret < 0) return ret; } lab7: z->c = z->l - m7; } } goto lab3; lab4: z->c = z->l - m4; { int ret = r_residual_suffix(z); /* call residual_suffix, line 209 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } { int m9 = z->l - z->c; (void)m9; /* do, line 211 */ { int ret = r_residual_form(z); /* call residual_form, line 211 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m9; } z->c = z->lb; { int c10 = z->c; /* do, line 213 */ { int ret = r_postlude(z); /* call postlude, line 213 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = c10; } return 1; } extern struct SN_env * portuguese_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } extern void portuguese_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_portuguese.h000066400000000000000000000005561364126773500250540ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * portuguese_ISO_8859_1_create_env(void); extern void portuguese_ISO_8859_1_close_env(struct SN_env * z); extern int portuguese_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_spanish.c000066400000000000000000001210331364126773500243040ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int spanish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_residual_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_y_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_attached_pronoun(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * spanish_ISO_8859_1_create_env(void); extern void spanish_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 0xE1 }; static const symbol s_0_2[1] = { 0xE9 }; static const symbol s_0_3[1] = { 0xED }; static const symbol s_0_4[1] = { 0xF3 }; static const symbol s_0_5[1] = { 0xFA }; static const struct among a_0[6] = { /* 0 */ { 0, 0, -1, 6, 0}, /* 1 */ { 1, s_0_1, 0, 1, 0}, /* 2 */ { 1, s_0_2, 0, 2, 0}, /* 3 */ { 1, s_0_3, 0, 3, 0}, /* 4 */ { 1, s_0_4, 0, 4, 0}, /* 5 */ { 1, s_0_5, 0, 5, 0} }; static const symbol s_1_0[2] = { 'l', 'a' }; static const symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; static const symbol s_1_2[2] = { 'l', 'e' }; static const symbol s_1_3[2] = { 'm', 'e' }; static const symbol s_1_4[2] = { 's', 'e' }; static const symbol s_1_5[2] = { 'l', 'o' }; static const symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; static const symbol s_1_7[3] = { 'l', 'a', 's' }; static const symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; static const symbol s_1_9[3] = { 'l', 'e', 's' }; static const symbol s_1_10[3] = { 'l', 'o', 's' }; static const symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; static const symbol s_1_12[3] = { 'n', 'o', 's' }; static const struct among a_1[13] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 4, s_1_1, 0, -1, 0}, /* 2 */ { 2, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0}, /* 4 */ { 2, s_1_4, -1, -1, 0}, /* 5 */ { 2, s_1_5, -1, -1, 0}, /* 6 */ { 4, s_1_6, 5, -1, 0}, /* 7 */ { 3, s_1_7, -1, -1, 0}, /* 8 */ { 5, s_1_8, 7, -1, 0}, /* 9 */ { 3, s_1_9, -1, -1, 0}, /* 10 */ { 3, s_1_10, -1, -1, 0}, /* 11 */ { 5, s_1_11, 10, -1, 0}, /* 12 */ { 3, s_1_12, -1, -1, 0} }; static const symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; static const symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; static const symbol s_2_3[4] = { 0xE1, 'n', 'd', 'o' }; static const symbol s_2_4[5] = { 'i', 0xE9, 'n', 'd', 'o' }; static const symbol s_2_5[2] = { 'a', 'r' }; static const symbol s_2_6[2] = { 'e', 'r' }; static const symbol s_2_7[2] = { 'i', 'r' }; static const symbol s_2_8[2] = { 0xE1, 'r' }; static const symbol s_2_9[2] = { 0xE9, 'r' }; static const symbol s_2_10[2] = { 0xED, 'r' }; static const struct among a_2[11] = { /* 0 */ { 4, s_2_0, -1, 6, 0}, /* 1 */ { 5, s_2_1, -1, 6, 0}, /* 2 */ { 5, s_2_2, -1, 7, 0}, /* 3 */ { 4, s_2_3, -1, 2, 0}, /* 4 */ { 5, s_2_4, -1, 1, 0}, /* 5 */ { 2, s_2_5, -1, 6, 0}, /* 6 */ { 2, s_2_6, -1, 6, 0}, /* 7 */ { 2, s_2_7, -1, 6, 0}, /* 8 */ { 2, s_2_8, -1, 3, 0}, /* 9 */ { 2, s_2_9, -1, 4, 0}, /* 10 */ { 2, s_2_10, -1, 5, 0} }; static const symbol s_3_0[2] = { 'i', 'c' }; static const symbol s_3_1[2] = { 'a', 'd' }; static const symbol s_3_2[2] = { 'o', 's' }; static const symbol s_3_3[2] = { 'i', 'v' }; static const struct among a_3[4] = { /* 0 */ { 2, s_3_0, -1, -1, 0}, /* 1 */ { 2, s_3_1, -1, -1, 0}, /* 2 */ { 2, s_3_2, -1, -1, 0}, /* 3 */ { 2, s_3_3, -1, 1, 0} }; static const symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; static const struct among a_4[3] = { /* 0 */ { 4, s_4_0, -1, 1, 0}, /* 1 */ { 4, s_4_1, -1, 1, 0}, /* 2 */ { 4, s_4_2, -1, 1, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_5_2[2] = { 'i', 'v' }; static const struct among a_5[3] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 2, s_5_2, -1, 1, 0} }; static const symbol s_6_0[3] = { 'i', 'c', 'a' }; static const symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; static const symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; static const symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; static const symbol s_6_4[3] = { 'o', 's', 'a' }; static const symbol s_6_5[4] = { 'i', 's', 't', 'a' }; static const symbol s_6_6[3] = { 'i', 'v', 'a' }; static const symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; static const symbol s_6_8[5] = { 'l', 'o', 'g', 0xED, 'a' }; static const symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; static const symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; static const symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_15[5] = { 'a', 'c', 'i', 0xF3, 'n' }; static const symbol s_6_16[5] = { 'u', 'c', 'i', 0xF3, 'n' }; static const symbol s_6_17[3] = { 'i', 'c', 'o' }; static const symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; static const symbol s_6_19[3] = { 'o', 's', 'o' }; static const symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; static const symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; static const symbol s_6_22[3] = { 'i', 'v', 'o' }; static const symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; static const symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; static const symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; static const symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; static const symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; static const symbol s_6_28[4] = { 'o', 's', 'a', 's' }; static const symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; static const symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; static const symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; static const symbol s_6_32[6] = { 'l', 'o', 'g', 0xED, 'a', 's' }; static const symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; static const symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; static const symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; static const symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; static const symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; static const symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; static const symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; static const symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; static const symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; static const symbol s_6_42[4] = { 'o', 's', 'o', 's' }; static const symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; static const symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; static const symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; static const struct among a_6[46] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 5, s_6_1, -1, 2, 0}, /* 2 */ { 5, s_6_2, -1, 5, 0}, /* 3 */ { 5, s_6_3, -1, 2, 0}, /* 4 */ { 3, s_6_4, -1, 1, 0}, /* 5 */ { 4, s_6_5, -1, 1, 0}, /* 6 */ { 3, s_6_6, -1, 9, 0}, /* 7 */ { 4, s_6_7, -1, 1, 0}, /* 8 */ { 5, s_6_8, -1, 3, 0}, /* 9 */ { 4, s_6_9, -1, 8, 0}, /* 10 */ { 4, s_6_10, -1, 1, 0}, /* 11 */ { 4, s_6_11, -1, 1, 0}, /* 12 */ { 4, s_6_12, -1, 2, 0}, /* 13 */ { 5, s_6_13, -1, 7, 0}, /* 14 */ { 6, s_6_14, 13, 6, 0}, /* 15 */ { 5, s_6_15, -1, 2, 0}, /* 16 */ { 5, s_6_16, -1, 4, 0}, /* 17 */ { 3, s_6_17, -1, 1, 0}, /* 18 */ { 4, s_6_18, -1, 1, 0}, /* 19 */ { 3, s_6_19, -1, 1, 0}, /* 20 */ { 7, s_6_20, -1, 1, 0}, /* 21 */ { 7, s_6_21, -1, 1, 0}, /* 22 */ { 3, s_6_22, -1, 9, 0}, /* 23 */ { 4, s_6_23, -1, 2, 0}, /* 24 */ { 4, s_6_24, -1, 1, 0}, /* 25 */ { 6, s_6_25, -1, 2, 0}, /* 26 */ { 6, s_6_26, -1, 5, 0}, /* 27 */ { 6, s_6_27, -1, 2, 0}, /* 28 */ { 4, s_6_28, -1, 1, 0}, /* 29 */ { 5, s_6_29, -1, 1, 0}, /* 30 */ { 4, s_6_30, -1, 9, 0}, /* 31 */ { 5, s_6_31, -1, 1, 0}, /* 32 */ { 6, s_6_32, -1, 3, 0}, /* 33 */ { 6, s_6_33, -1, 8, 0}, /* 34 */ { 5, s_6_34, -1, 1, 0}, /* 35 */ { 5, s_6_35, -1, 1, 0}, /* 36 */ { 7, s_6_36, -1, 2, 0}, /* 37 */ { 7, s_6_37, -1, 4, 0}, /* 38 */ { 6, s_6_38, -1, 2, 0}, /* 39 */ { 5, s_6_39, -1, 2, 0}, /* 40 */ { 4, s_6_40, -1, 1, 0}, /* 41 */ { 5, s_6_41, -1, 1, 0}, /* 42 */ { 4, s_6_42, -1, 1, 0}, /* 43 */ { 8, s_6_43, -1, 1, 0}, /* 44 */ { 8, s_6_44, -1, 1, 0}, /* 45 */ { 4, s_6_45, -1, 9, 0} }; static const symbol s_7_0[2] = { 'y', 'a' }; static const symbol s_7_1[2] = { 'y', 'e' }; static const symbol s_7_2[3] = { 'y', 'a', 'n' }; static const symbol s_7_3[3] = { 'y', 'e', 'n' }; static const symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; static const symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; static const symbol s_7_6[2] = { 'y', 'o' }; static const symbol s_7_7[3] = { 'y', 'a', 's' }; static const symbol s_7_8[3] = { 'y', 'e', 's' }; static const symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; static const symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; static const symbol s_7_11[2] = { 'y', 0xF3 }; static const struct among a_7[12] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 2, s_7_1, -1, 1, 0}, /* 2 */ { 3, s_7_2, -1, 1, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 5, s_7_4, -1, 1, 0}, /* 5 */ { 5, s_7_5, -1, 1, 0}, /* 6 */ { 2, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 3, s_7_8, -1, 1, 0}, /* 9 */ { 4, s_7_9, -1, 1, 0}, /* 10 */ { 5, s_7_10, -1, 1, 0}, /* 11 */ { 2, s_7_11, -1, 1, 0} }; static const symbol s_8_0[3] = { 'a', 'b', 'a' }; static const symbol s_8_1[3] = { 'a', 'd', 'a' }; static const symbol s_8_2[3] = { 'i', 'd', 'a' }; static const symbol s_8_3[3] = { 'a', 'r', 'a' }; static const symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; static const symbol s_8_5[2] = { 0xED, 'a' }; static const symbol s_8_6[4] = { 'a', 'r', 0xED, 'a' }; static const symbol s_8_7[4] = { 'e', 'r', 0xED, 'a' }; static const symbol s_8_8[4] = { 'i', 'r', 0xED, 'a' }; static const symbol s_8_9[2] = { 'a', 'd' }; static const symbol s_8_10[2] = { 'e', 'd' }; static const symbol s_8_11[2] = { 'i', 'd' }; static const symbol s_8_12[3] = { 'a', 's', 'e' }; static const symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; static const symbol s_8_14[4] = { 'a', 's', 't', 'e' }; static const symbol s_8_15[4] = { 'i', 's', 't', 'e' }; static const symbol s_8_16[2] = { 'a', 'n' }; static const symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; static const symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; static const symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; static const symbol s_8_20[3] = { 0xED, 'a', 'n' }; static const symbol s_8_21[5] = { 'a', 'r', 0xED, 'a', 'n' }; static const symbol s_8_22[5] = { 'e', 'r', 0xED, 'a', 'n' }; static const symbol s_8_23[5] = { 'i', 'r', 0xED, 'a', 'n' }; static const symbol s_8_24[2] = { 'e', 'n' }; static const symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; static const symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; static const symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; static const symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; static const symbol s_8_29[4] = { 'a', 'r', 0xE1, 'n' }; static const symbol s_8_30[4] = { 'e', 'r', 0xE1, 'n' }; static const symbol s_8_31[4] = { 'i', 'r', 0xE1, 'n' }; static const symbol s_8_32[3] = { 'a', 'd', 'o' }; static const symbol s_8_33[3] = { 'i', 'd', 'o' }; static const symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; static const symbol s_8_36[2] = { 'a', 'r' }; static const symbol s_8_37[2] = { 'e', 'r' }; static const symbol s_8_38[2] = { 'i', 'r' }; static const symbol s_8_39[2] = { 'a', 's' }; static const symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; static const symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; static const symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; static const symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; static const symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; static const symbol s_8_45[3] = { 0xED, 'a', 's' }; static const symbol s_8_46[5] = { 'a', 'r', 0xED, 'a', 's' }; static const symbol s_8_47[5] = { 'e', 'r', 0xED, 'a', 's' }; static const symbol s_8_48[5] = { 'i', 'r', 0xED, 'a', 's' }; static const symbol s_8_49[2] = { 'e', 's' }; static const symbol s_8_50[4] = { 'a', 's', 'e', 's' }; static const symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; static const symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; static const symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; static const symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; static const symbol s_8_55[4] = { 0xED, 'a', 'i', 's' }; static const symbol s_8_56[6] = { 'a', 'r', 0xED, 'a', 'i', 's' }; static const symbol s_8_57[6] = { 'e', 'r', 0xED, 'a', 'i', 's' }; static const symbol s_8_58[6] = { 'i', 'r', 0xED, 'a', 'i', 's' }; static const symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; static const symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; static const symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; static const symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; static const symbol s_8_63[3] = { 0xE1, 'i', 's' }; static const symbol s_8_64[3] = { 0xE9, 'i', 's' }; static const symbol s_8_65[5] = { 'a', 'r', 0xE9, 'i', 's' }; static const symbol s_8_66[5] = { 'e', 'r', 0xE9, 'i', 's' }; static const symbol s_8_67[5] = { 'i', 'r', 0xE9, 'i', 's' }; static const symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; static const symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; static const symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; static const symbol s_8_71[6] = { 0xE1, 'b', 'a', 'm', 'o', 's' }; static const symbol s_8_72[6] = { 0xE1, 'r', 'a', 'm', 'o', 's' }; static const symbol s_8_73[7] = { 'i', 0xE9, 'r', 'a', 'm', 'o', 's' }; static const symbol s_8_74[5] = { 0xED, 'a', 'm', 'o', 's' }; static const symbol s_8_75[7] = { 'a', 'r', 0xED, 'a', 'm', 'o', 's' }; static const symbol s_8_76[7] = { 'e', 'r', 0xED, 'a', 'm', 'o', 's' }; static const symbol s_8_77[7] = { 'i', 'r', 0xED, 'a', 'm', 'o', 's' }; static const symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; static const symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; static const symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; static const symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; static const symbol s_8_82[6] = { 0xE1, 's', 'e', 'm', 'o', 's' }; static const symbol s_8_83[7] = { 'i', 0xE9, 's', 'e', 'm', 'o', 's' }; static const symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; static const symbol s_8_85[4] = { 'a', 'r', 0xE1, 's' }; static const symbol s_8_86[4] = { 'e', 'r', 0xE1, 's' }; static const symbol s_8_87[4] = { 'i', 'r', 0xE1, 's' }; static const symbol s_8_88[2] = { 0xED, 's' }; static const symbol s_8_89[3] = { 'a', 'r', 0xE1 }; static const symbol s_8_90[3] = { 'e', 'r', 0xE1 }; static const symbol s_8_91[3] = { 'i', 'r', 0xE1 }; static const symbol s_8_92[3] = { 'a', 'r', 0xE9 }; static const symbol s_8_93[3] = { 'e', 'r', 0xE9 }; static const symbol s_8_94[3] = { 'i', 'r', 0xE9 }; static const symbol s_8_95[2] = { 'i', 0xF3 }; static const struct among a_8[96] = { /* 0 */ { 3, s_8_0, -1, 2, 0}, /* 1 */ { 3, s_8_1, -1, 2, 0}, /* 2 */ { 3, s_8_2, -1, 2, 0}, /* 3 */ { 3, s_8_3, -1, 2, 0}, /* 4 */ { 4, s_8_4, -1, 2, 0}, /* 5 */ { 2, s_8_5, -1, 2, 0}, /* 6 */ { 4, s_8_6, 5, 2, 0}, /* 7 */ { 4, s_8_7, 5, 2, 0}, /* 8 */ { 4, s_8_8, 5, 2, 0}, /* 9 */ { 2, s_8_9, -1, 2, 0}, /* 10 */ { 2, s_8_10, -1, 2, 0}, /* 11 */ { 2, s_8_11, -1, 2, 0}, /* 12 */ { 3, s_8_12, -1, 2, 0}, /* 13 */ { 4, s_8_13, -1, 2, 0}, /* 14 */ { 4, s_8_14, -1, 2, 0}, /* 15 */ { 4, s_8_15, -1, 2, 0}, /* 16 */ { 2, s_8_16, -1, 2, 0}, /* 17 */ { 4, s_8_17, 16, 2, 0}, /* 18 */ { 4, s_8_18, 16, 2, 0}, /* 19 */ { 5, s_8_19, 16, 2, 0}, /* 20 */ { 3, s_8_20, 16, 2, 0}, /* 21 */ { 5, s_8_21, 20, 2, 0}, /* 22 */ { 5, s_8_22, 20, 2, 0}, /* 23 */ { 5, s_8_23, 20, 2, 0}, /* 24 */ { 2, s_8_24, -1, 1, 0}, /* 25 */ { 4, s_8_25, 24, 2, 0}, /* 26 */ { 5, s_8_26, 24, 2, 0}, /* 27 */ { 4, s_8_27, -1, 2, 0}, /* 28 */ { 5, s_8_28, -1, 2, 0}, /* 29 */ { 4, s_8_29, -1, 2, 0}, /* 30 */ { 4, s_8_30, -1, 2, 0}, /* 31 */ { 4, s_8_31, -1, 2, 0}, /* 32 */ { 3, s_8_32, -1, 2, 0}, /* 33 */ { 3, s_8_33, -1, 2, 0}, /* 34 */ { 4, s_8_34, -1, 2, 0}, /* 35 */ { 5, s_8_35, -1, 2, 0}, /* 36 */ { 2, s_8_36, -1, 2, 0}, /* 37 */ { 2, s_8_37, -1, 2, 0}, /* 38 */ { 2, s_8_38, -1, 2, 0}, /* 39 */ { 2, s_8_39, -1, 2, 0}, /* 40 */ { 4, s_8_40, 39, 2, 0}, /* 41 */ { 4, s_8_41, 39, 2, 0}, /* 42 */ { 4, s_8_42, 39, 2, 0}, /* 43 */ { 4, s_8_43, 39, 2, 0}, /* 44 */ { 5, s_8_44, 39, 2, 0}, /* 45 */ { 3, s_8_45, 39, 2, 0}, /* 46 */ { 5, s_8_46, 45, 2, 0}, /* 47 */ { 5, s_8_47, 45, 2, 0}, /* 48 */ { 5, s_8_48, 45, 2, 0}, /* 49 */ { 2, s_8_49, -1, 1, 0}, /* 50 */ { 4, s_8_50, 49, 2, 0}, /* 51 */ { 5, s_8_51, 49, 2, 0}, /* 52 */ { 5, s_8_52, -1, 2, 0}, /* 53 */ { 5, s_8_53, -1, 2, 0}, /* 54 */ { 6, s_8_54, -1, 2, 0}, /* 55 */ { 4, s_8_55, -1, 2, 0}, /* 56 */ { 6, s_8_56, 55, 2, 0}, /* 57 */ { 6, s_8_57, 55, 2, 0}, /* 58 */ { 6, s_8_58, 55, 2, 0}, /* 59 */ { 5, s_8_59, -1, 2, 0}, /* 60 */ { 6, s_8_60, -1, 2, 0}, /* 61 */ { 6, s_8_61, -1, 2, 0}, /* 62 */ { 6, s_8_62, -1, 2, 0}, /* 63 */ { 3, s_8_63, -1, 2, 0}, /* 64 */ { 3, s_8_64, -1, 1, 0}, /* 65 */ { 5, s_8_65, 64, 2, 0}, /* 66 */ { 5, s_8_66, 64, 2, 0}, /* 67 */ { 5, s_8_67, 64, 2, 0}, /* 68 */ { 4, s_8_68, -1, 2, 0}, /* 69 */ { 4, s_8_69, -1, 2, 0}, /* 70 */ { 4, s_8_70, -1, 2, 0}, /* 71 */ { 6, s_8_71, 70, 2, 0}, /* 72 */ { 6, s_8_72, 70, 2, 0}, /* 73 */ { 7, s_8_73, 70, 2, 0}, /* 74 */ { 5, s_8_74, 70, 2, 0}, /* 75 */ { 7, s_8_75, 74, 2, 0}, /* 76 */ { 7, s_8_76, 74, 2, 0}, /* 77 */ { 7, s_8_77, 74, 2, 0}, /* 78 */ { 4, s_8_78, -1, 1, 0}, /* 79 */ { 6, s_8_79, 78, 2, 0}, /* 80 */ { 6, s_8_80, 78, 2, 0}, /* 81 */ { 6, s_8_81, 78, 2, 0}, /* 82 */ { 6, s_8_82, 78, 2, 0}, /* 83 */ { 7, s_8_83, 78, 2, 0}, /* 84 */ { 4, s_8_84, -1, 2, 0}, /* 85 */ { 4, s_8_85, -1, 2, 0}, /* 86 */ { 4, s_8_86, -1, 2, 0}, /* 87 */ { 4, s_8_87, -1, 2, 0}, /* 88 */ { 2, s_8_88, -1, 2, 0}, /* 89 */ { 3, s_8_89, -1, 2, 0}, /* 90 */ { 3, s_8_90, -1, 2, 0}, /* 91 */ { 3, s_8_91, -1, 2, 0}, /* 92 */ { 3, s_8_92, -1, 2, 0}, /* 93 */ { 3, s_8_93, -1, 2, 0}, /* 94 */ { 3, s_8_94, -1, 2, 0}, /* 95 */ { 2, s_8_95, -1, 2, 0} }; static const symbol s_9_0[1] = { 'a' }; static const symbol s_9_1[1] = { 'e' }; static const symbol s_9_2[1] = { 'o' }; static const symbol s_9_3[2] = { 'o', 's' }; static const symbol s_9_4[1] = { 0xE1 }; static const symbol s_9_5[1] = { 0xE9 }; static const symbol s_9_6[1] = { 0xED }; static const symbol s_9_7[1] = { 0xF3 }; static const struct among a_9[8] = { /* 0 */ { 1, s_9_0, -1, 1, 0}, /* 1 */ { 1, s_9_1, -1, 2, 0}, /* 2 */ { 1, s_9_2, -1, 1, 0}, /* 3 */ { 2, s_9_3, -1, 1, 0}, /* 4 */ { 1, s_9_4, -1, 1, 0}, /* 5 */ { 1, s_9_5, -1, 2, 0}, /* 6 */ { 1, s_9_6, -1, 1, 0}, /* 7 */ { 1, s_9_7, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; static const symbol s_0[] = { 'a' }; static const symbol s_1[] = { 'e' }; static const symbol s_2[] = { 'i' }; static const symbol s_3[] = { 'o' }; static const symbol s_4[] = { 'u' }; static const symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; static const symbol s_6[] = { 'a', 'n', 'd', 'o' }; static const symbol s_7[] = { 'a', 'r' }; static const symbol s_8[] = { 'e', 'r' }; static const symbol s_9[] = { 'i', 'r' }; static const symbol s_10[] = { 'i', 'c' }; static const symbol s_11[] = { 'l', 'o', 'g' }; static const symbol s_12[] = { 'u' }; static const symbol s_13[] = { 'e', 'n', 't', 'e' }; static const symbol s_14[] = { 'a', 't' }; static const symbol s_15[] = { 'a', 't' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 33 */ z->I[1] = z->l; /* $p1 = , line 34 */ z->I[2] = z->l; /* $p2 = , line 35 */ { int c1 = z->c; /* do, line 37 */ { int c2 = z->c; /* or, line 39 */ if (in_grouping(z, g_v, 97, 252, 0)) goto lab2; /* grouping v, line 38 */ { int c3 = z->c; /* or, line 38 */ if (out_grouping(z, g_v, 97, 252, 0)) goto lab4; /* non v, line 38 */ { /* gopast */ /* grouping v, line 38 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping(z, g_v, 97, 252, 0)) goto lab2; /* grouping v, line 38 */ { /* gopast */ /* non v, line 38 */ int ret = in_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping(z, g_v, 97, 252, 0)) goto lab0; /* non v, line 40 */ { int c4 = z->c; /* or, line 40 */ if (out_grouping(z, g_v, 97, 252, 0)) goto lab6; /* non v, line 40 */ { /* gopast */ /* grouping v, line 40 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping(z, g_v, 97, 252, 0)) goto lab0; /* grouping v, line 40 */ if (z->c >= z->l) goto lab0; z->c++; /* next, line 40 */ } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 41 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 43 */ { /* gopast */ /* grouping v, line 44 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 44 */ int ret = in_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 44 */ { /* gopast */ /* grouping v, line 45 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 45 */ int ret = in_grouping(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 45 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 49 */ int c1 = z->c; z->bra = z->c; /* [, line 50 */ if (z->c >= z->l || z->p[z->c + 0] >> 5 != 7 || !((67641858 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 6; else /* substring, line 50 */ among_var = find_among(z, a_0, 6); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 50 */ switch (among_var) { /* among, line 50 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ if (ret < 0) return ret; } break; case 6: if (z->c >= z->l) goto lab0; z->c++; /* next, line 57 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 63 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 64 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 65 */ return 1; } static int r_attached_pronoun(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 68 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((557090 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 68 */ if (!(find_among_b(z, a_1, 13))) return 0; z->bra = z->c; /* ], line 68 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0; /* substring, line 72 */ among_var = find_among_b(z, a_2, 11); if (!(among_var)) return 0; { int ret = r_RV(z); /* call RV, line 72 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 72 */ case 0: return 0; case 1: z->bra = z->c; /* ], line 73 */ { int ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ if (ret < 0) return ret; } break; case 2: z->bra = z->c; /* ], line 74 */ { int ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ if (ret < 0) return ret; } break; case 3: z->bra = z->c; /* ], line 75 */ { int ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ if (ret < 0) return ret; } break; case 4: z->bra = z->c; /* ], line 76 */ { int ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ if (ret < 0) return ret; } break; case 5: z->bra = z->c; /* ], line 77 */ { int ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_del(z); /* delete, line 81 */ if (ret < 0) return ret; } break; case 7: if (z->c <= z->lb || z->p[z->c - 1] != 'u') return 0; /* literal, line 82 */ z->c--; { int ret = slice_del(z); /* delete, line 82 */ if (ret < 0) return ret; } break; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 87 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((835634 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 87 */ among_var = find_among_b(z, a_6, 46); if (!(among_var)) return 0; z->bra = z->c; /* ], line 87 */ switch (among_var) { /* among, line 87 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 99 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 105 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 105 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 106 */ z->ket = z->c; /* [, line 106 */ if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m1; goto lab0; } /* literal, line 106 */ z->bra = z->c; /* ], line 106 */ { int ret = r_R2(z); /* call R2, line 106 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 106 */ if (ret < 0) return ret; } lab0: ; } break; case 3: { int ret = r_R2(z); /* call R2, line 111 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_11); /* <-, line 111 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 115 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_12); /* <-, line 115 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 119 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 4, s_13); /* <-, line 119 */ if (ret < 0) return ret; } break; case 6: { int ret = r_R1(z); /* call R1, line 123 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 123 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 124 */ z->ket = z->c; /* [, line 125 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m2; goto lab1; } /* substring, line 125 */ among_var = find_among_b(z, a_3, 4); if (!(among_var)) { z->c = z->l - m2; goto lab1; } z->bra = z->c; /* ], line 125 */ { int ret = r_R2(z); /* call R2, line 125 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 125 */ if (ret < 0) return ret; } switch (among_var) { /* among, line 125 */ case 0: { z->c = z->l - m2; goto lab1; } case 1: z->ket = z->c; /* [, line 126 */ if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m2; goto lab1; } /* literal, line 126 */ z->bra = z->c; /* ], line 126 */ { int ret = r_R2(z); /* call R2, line 126 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 126 */ if (ret < 0) return ret; } break; } lab1: ; } break; case 7: { int ret = r_R2(z); /* call R2, line 135 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 135 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 136 */ z->ket = z->c; /* [, line 137 */ if (z->c - 3 <= z->lb || z->p[z->c - 1] != 101) { z->c = z->l - m3; goto lab2; } /* substring, line 137 */ among_var = find_among_b(z, a_4, 3); if (!(among_var)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; /* ], line 137 */ switch (among_var) { /* among, line 137 */ case 0: { z->c = z->l - m3; goto lab2; } case 1: { int ret = r_R2(z); /* call R2, line 140 */ if (ret == 0) { z->c = z->l - m3; goto lab2; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 140 */ if (ret < 0) return ret; } break; } lab2: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 147 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 147 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 148 */ z->ket = z->c; /* [, line 149 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m4; goto lab3; } /* substring, line 149 */ among_var = find_among_b(z, a_5, 3); if (!(among_var)) { z->c = z->l - m4; goto lab3; } z->bra = z->c; /* ], line 149 */ switch (among_var) { /* among, line 149 */ case 0: { z->c = z->l - m4; goto lab3; } case 1: { int ret = r_R2(z); /* call R2, line 152 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } break; } lab3: ; } break; case 9: { int ret = r_R2(z); /* call R2, line 159 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 159 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 160 */ z->ket = z->c; /* [, line 161 */ if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m5; goto lab4; } /* literal, line 161 */ z->bra = z->c; /* ], line 161 */ { int ret = r_R2(z); /* call R2, line 161 */ if (ret == 0) { z->c = z->l - m5; goto lab4; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 161 */ if (ret < 0) return ret; } lab4: ; } break; } return 1; } static int r_y_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 168 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 168 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 168 */ among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 168 */ z->lb = mlimit1; } switch (among_var) { /* among, line 168 */ case 0: return 0; case 1: if (z->c <= z->lb || z->p[z->c - 1] != 'u') return 0; /* literal, line 171 */ z->c--; { int ret = slice_del(z); /* delete, line 171 */ if (ret < 0) return ret; } break; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 176 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 176 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 176 */ among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 176 */ z->lb = mlimit1; } switch (among_var) { /* among, line 176 */ case 0: return 0; case 1: { int m2 = z->l - z->c; (void)m2; /* try, line 179 */ if (z->c <= z->lb || z->p[z->c - 1] != 'u') { z->c = z->l - m2; goto lab0; } /* literal, line 179 */ z->c--; { int m_test3 = z->l - z->c; /* test, line 179 */ if (z->c <= z->lb || z->p[z->c - 1] != 'g') { z->c = z->l - m2; goto lab0; } /* literal, line 179 */ z->c--; z->c = z->l - m_test3; } lab0: ; } z->bra = z->c; /* ], line 179 */ { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 200 */ if (ret < 0) return ret; } break; } return 1; } static int r_residual_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 205 */ among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 205 */ switch (among_var) { /* among, line 205 */ case 0: return 0; case 1: { int ret = r_RV(z); /* call RV, line 208 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 208 */ if (ret < 0) return ret; } break; case 2: { int ret = r_RV(z); /* call RV, line 210 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 210 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 210 */ z->ket = z->c; /* [, line 210 */ if (z->c <= z->lb || z->p[z->c - 1] != 'u') { z->c = z->l - m1; goto lab0; } /* literal, line 210 */ z->c--; z->bra = z->c; /* ], line 210 */ { int m_test2 = z->l - z->c; /* test, line 210 */ if (z->c <= z->lb || z->p[z->c - 1] != 'g') { z->c = z->l - m1; goto lab0; } /* literal, line 210 */ z->c--; z->c = z->l - m_test2; } { int ret = r_RV(z); /* call RV, line 210 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 210 */ if (ret < 0) return ret; } lab0: ; } break; } return 1; } extern int spanish_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 216 */ { int ret = r_mark_regions(z); /* call mark_regions, line 216 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 217 */ { int m2 = z->l - z->c; (void)m2; /* do, line 218 */ { int ret = r_attached_pronoun(z); /* call attached_pronoun, line 218 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 219 */ { int m4 = z->l - z->c; (void)m4; /* or, line 219 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 219 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } goto lab3; lab4: z->c = z->l - m4; { int ret = r_y_verb_suffix(z); /* call y_verb_suffix, line 220 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } goto lab3; lab5: z->c = z->l - m4; { int ret = r_verb_suffix(z); /* call verb_suffix, line 221 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } { int m5 = z->l - z->c; (void)m5; /* do, line 223 */ { int ret = r_residual_suffix(z); /* call residual_suffix, line 223 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m5; } z->c = z->lb; { int c6 = z->c; /* do, line 225 */ { int ret = r_postlude(z); /* call postlude, line 225 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = c6; } return 1; } extern struct SN_env * spanish_ISO_8859_1_create_env(void) { return SN_create_env(0, 3, 0); } extern void spanish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_spanish.h000066400000000000000000000005451364126773500243150ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * spanish_ISO_8859_1_create_env(void); extern void spanish_ISO_8859_1_close_env(struct SN_env * z); extern int spanish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_swedish.c000066400000000000000000000252771364126773500243220ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int swedish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_other_suffix(struct SN_env * z); static int r_consonant_pair(struct SN_env * z); static int r_main_suffix(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * swedish_ISO_8859_1_create_env(void); extern void swedish_ISO_8859_1_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 'a' }; static const symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; static const symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; static const symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; static const symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; static const symbol s_0_5[2] = { 'a', 'd' }; static const symbol s_0_6[1] = { 'e' }; static const symbol s_0_7[3] = { 'a', 'd', 'e' }; static const symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; static const symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; static const symbol s_0_10[3] = { 'a', 'r', 'e' }; static const symbol s_0_11[4] = { 'a', 's', 't', 'e' }; static const symbol s_0_12[2] = { 'e', 'n' }; static const symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; static const symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; static const symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; static const symbol s_0_16[3] = { 'e', 'r', 'n' }; static const symbol s_0_17[2] = { 'a', 'r' }; static const symbol s_0_18[2] = { 'e', 'r' }; static const symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; static const symbol s_0_20[2] = { 'o', 'r' }; static const symbol s_0_21[1] = { 's' }; static const symbol s_0_22[2] = { 'a', 's' }; static const symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; static const symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; static const symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; static const symbol s_0_26[2] = { 'e', 's' }; static const symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; static const symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; static const symbol s_0_29[3] = { 'e', 'n', 's' }; static const symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; static const symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; static const symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; static const symbol s_0_33[2] = { 'a', 't' }; static const symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; static const symbol s_0_35[3] = { 'h', 'e', 't' }; static const symbol s_0_36[3] = { 'a', 's', 't' }; static const struct among a_0[37] = { /* 0 */ { 1, s_0_0, -1, 1, 0}, /* 1 */ { 4, s_0_1, 0, 1, 0}, /* 2 */ { 4, s_0_2, 0, 1, 0}, /* 3 */ { 7, s_0_3, 2, 1, 0}, /* 4 */ { 4, s_0_4, 0, 1, 0}, /* 5 */ { 2, s_0_5, -1, 1, 0}, /* 6 */ { 1, s_0_6, -1, 1, 0}, /* 7 */ { 3, s_0_7, 6, 1, 0}, /* 8 */ { 4, s_0_8, 6, 1, 0}, /* 9 */ { 4, s_0_9, 6, 1, 0}, /* 10 */ { 3, s_0_10, 6, 1, 0}, /* 11 */ { 4, s_0_11, 6, 1, 0}, /* 12 */ { 2, s_0_12, -1, 1, 0}, /* 13 */ { 5, s_0_13, 12, 1, 0}, /* 14 */ { 4, s_0_14, 12, 1, 0}, /* 15 */ { 5, s_0_15, 12, 1, 0}, /* 16 */ { 3, s_0_16, -1, 1, 0}, /* 17 */ { 2, s_0_17, -1, 1, 0}, /* 18 */ { 2, s_0_18, -1, 1, 0}, /* 19 */ { 5, s_0_19, 18, 1, 0}, /* 20 */ { 2, s_0_20, -1, 1, 0}, /* 21 */ { 1, s_0_21, -1, 2, 0}, /* 22 */ { 2, s_0_22, 21, 1, 0}, /* 23 */ { 5, s_0_23, 22, 1, 0}, /* 24 */ { 5, s_0_24, 22, 1, 0}, /* 25 */ { 5, s_0_25, 22, 1, 0}, /* 26 */ { 2, s_0_26, 21, 1, 0}, /* 27 */ { 4, s_0_27, 26, 1, 0}, /* 28 */ { 5, s_0_28, 26, 1, 0}, /* 29 */ { 3, s_0_29, 21, 1, 0}, /* 30 */ { 5, s_0_30, 29, 1, 0}, /* 31 */ { 6, s_0_31, 29, 1, 0}, /* 32 */ { 4, s_0_32, 21, 1, 0}, /* 33 */ { 2, s_0_33, -1, 1, 0}, /* 34 */ { 5, s_0_34, -1, 1, 0}, /* 35 */ { 3, s_0_35, -1, 1, 0}, /* 36 */ { 3, s_0_36, -1, 1, 0} }; static const symbol s_1_0[2] = { 'd', 'd' }; static const symbol s_1_1[2] = { 'g', 'd' }; static const symbol s_1_2[2] = { 'n', 'n' }; static const symbol s_1_3[2] = { 'd', 't' }; static const symbol s_1_4[2] = { 'g', 't' }; static const symbol s_1_5[2] = { 'k', 't' }; static const symbol s_1_6[2] = { 't', 't' }; static const struct among a_1[7] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0}, /* 2 */ { 2, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0}, /* 4 */ { 2, s_1_4, -1, -1, 0}, /* 5 */ { 2, s_1_5, -1, -1, 0}, /* 6 */ { 2, s_1_6, -1, -1, 0} }; static const symbol s_2_0[2] = { 'i', 'g' }; static const symbol s_2_1[3] = { 'l', 'i', 'g' }; static const symbol s_2_2[3] = { 'e', 'l', 's' }; static const symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; static const symbol s_2_4[4] = { 'l', 0xF6, 's', 't' }; static const struct among a_2[5] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 3, s_2_2, -1, 1, 0}, /* 3 */ { 5, s_2_3, -1, 3, 0}, /* 4 */ { 4, s_2_4, -1, 2, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; static const unsigned char g_s_ending[] = { 119, 127, 149 }; static const symbol s_0[] = { 'l', 0xF6, 's' }; static const symbol s_1[] = { 'f', 'u', 'l', 'l' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 28 */ { int c_test1 = z->c; /* test, line 29 */ { int ret = z->c + 3; /* hop, line 29 */ if (0 > ret || ret > z->l) return 0; z->c = ret; } z->I[1] = z->c; /* setmark x, line 29 */ z->c = c_test1; } if (out_grouping(z, g_v, 97, 246, 1) < 0) return 0; /* goto */ /* grouping v, line 30 */ { /* gopast */ /* non v, line 30 */ int ret = in_grouping(z, g_v, 97, 246, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 30 */ /* try, line 31 */ if (!(z->I[0] < z->I[1])) goto lab0; /* $p1 < , line 31 */ z->I[0] = z->I[1]; /* $p1 = , line 31 */ lab0: return 1; } static int r_main_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 37 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 37 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 37 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851442 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 37 */ among_var = find_among_b(z, a_0, 37); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 37 */ z->lb = mlimit1; } switch (among_var) { /* among, line 38 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 2: if (in_grouping_b(z, g_s_ending, 98, 121, 0)) return 0; /* grouping s_ending, line 46 */ { int ret = slice_del(z); /* delete, line 46 */ if (ret < 0) return ret; } break; } return 1; } static int r_consonant_pair(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 50 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 50 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; { int m2 = z->l - z->c; (void)m2; /* and, line 52 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1064976 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* among, line 51 */ if (!(find_among_b(z, a_1, 7))) { z->lb = mlimit1; return 0; } z->c = z->l - m2; z->ket = z->c; /* [, line 52 */ if (z->c <= z->lb) { z->lb = mlimit1; return 0; } z->c--; /* next, line 52 */ z->bra = z->c; /* ], line 52 */ { int ret = slice_del(z); /* delete, line 52 */ if (ret < 0) return ret; } } z->lb = mlimit1; } return 1; } static int r_other_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 55 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 55 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 56 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 56 */ among_var = find_among_b(z, a_2, 5); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 56 */ switch (among_var) { /* among, line 56 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = slice_del(z); /* delete, line 57 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_0); /* <-, line 58 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } extern int swedish_ISO_8859_1_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 66 */ { int ret = r_mark_regions(z); /* call mark_regions, line 66 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 67 */ { int m2 = z->l - z->c; (void)m2; /* do, line 68 */ { int ret = r_main_suffix(z); /* call main_suffix, line 68 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 69 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 69 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 70 */ { int ret = r_other_suffix(z); /* call other_suffix, line 70 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } z->c = z->lb; return 1; } extern struct SN_env * swedish_ISO_8859_1_create_env(void) { return SN_create_env(0, 2, 0); } extern void swedish_ISO_8859_1_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_1_swedish.h000066400000000000000000000005451364126773500243160ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * swedish_ISO_8859_1_create_env(void); extern void swedish_ISO_8859_1_close_env(struct SN_env * z); extern int swedish_ISO_8859_1_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_2_hungarian.c000066400000000000000000001177431364126773500246310ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int hungarian_ISO_8859_2_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_double(struct SN_env * z); static int r_undouble(struct SN_env * z); static int r_factive(struct SN_env * z); static int r_instrum(struct SN_env * z); static int r_plur_owner(struct SN_env * z); static int r_sing_owner(struct SN_env * z); static int r_owned(struct SN_env * z); static int r_plural(struct SN_env * z); static int r_case_other(struct SN_env * z); static int r_case_special(struct SN_env * z); static int r_case(struct SN_env * z); static int r_v_ending(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * hungarian_ISO_8859_2_create_env(void); extern void hungarian_ISO_8859_2_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[2] = { 'c', 's' }; static const symbol s_0_1[3] = { 'd', 'z', 's' }; static const symbol s_0_2[2] = { 'g', 'y' }; static const symbol s_0_3[2] = { 'l', 'y' }; static const symbol s_0_4[2] = { 'n', 'y' }; static const symbol s_0_5[2] = { 's', 'z' }; static const symbol s_0_6[2] = { 't', 'y' }; static const symbol s_0_7[2] = { 'z', 's' }; static const struct among a_0[8] = { /* 0 */ { 2, s_0_0, -1, -1, 0}, /* 1 */ { 3, s_0_1, -1, -1, 0}, /* 2 */ { 2, s_0_2, -1, -1, 0}, /* 3 */ { 2, s_0_3, -1, -1, 0}, /* 4 */ { 2, s_0_4, -1, -1, 0}, /* 5 */ { 2, s_0_5, -1, -1, 0}, /* 6 */ { 2, s_0_6, -1, -1, 0}, /* 7 */ { 2, s_0_7, -1, -1, 0} }; static const symbol s_1_0[1] = { 0xE1 }; static const symbol s_1_1[1] = { 0xE9 }; static const struct among a_1[2] = { /* 0 */ { 1, s_1_0, -1, 1, 0}, /* 1 */ { 1, s_1_1, -1, 2, 0} }; static const symbol s_2_0[2] = { 'b', 'b' }; static const symbol s_2_1[2] = { 'c', 'c' }; static const symbol s_2_2[2] = { 'd', 'd' }; static const symbol s_2_3[2] = { 'f', 'f' }; static const symbol s_2_4[2] = { 'g', 'g' }; static const symbol s_2_5[2] = { 'j', 'j' }; static const symbol s_2_6[2] = { 'k', 'k' }; static const symbol s_2_7[2] = { 'l', 'l' }; static const symbol s_2_8[2] = { 'm', 'm' }; static const symbol s_2_9[2] = { 'n', 'n' }; static const symbol s_2_10[2] = { 'p', 'p' }; static const symbol s_2_11[2] = { 'r', 'r' }; static const symbol s_2_12[3] = { 'c', 'c', 's' }; static const symbol s_2_13[2] = { 's', 's' }; static const symbol s_2_14[3] = { 'z', 'z', 's' }; static const symbol s_2_15[2] = { 't', 't' }; static const symbol s_2_16[2] = { 'v', 'v' }; static const symbol s_2_17[3] = { 'g', 'g', 'y' }; static const symbol s_2_18[3] = { 'l', 'l', 'y' }; static const symbol s_2_19[3] = { 'n', 'n', 'y' }; static const symbol s_2_20[3] = { 't', 't', 'y' }; static const symbol s_2_21[3] = { 's', 's', 'z' }; static const symbol s_2_22[2] = { 'z', 'z' }; static const struct among a_2[23] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 2, s_2_2, -1, -1, 0}, /* 3 */ { 2, s_2_3, -1, -1, 0}, /* 4 */ { 2, s_2_4, -1, -1, 0}, /* 5 */ { 2, s_2_5, -1, -1, 0}, /* 6 */ { 2, s_2_6, -1, -1, 0}, /* 7 */ { 2, s_2_7, -1, -1, 0}, /* 8 */ { 2, s_2_8, -1, -1, 0}, /* 9 */ { 2, s_2_9, -1, -1, 0}, /* 10 */ { 2, s_2_10, -1, -1, 0}, /* 11 */ { 2, s_2_11, -1, -1, 0}, /* 12 */ { 3, s_2_12, -1, -1, 0}, /* 13 */ { 2, s_2_13, -1, -1, 0}, /* 14 */ { 3, s_2_14, -1, -1, 0}, /* 15 */ { 2, s_2_15, -1, -1, 0}, /* 16 */ { 2, s_2_16, -1, -1, 0}, /* 17 */ { 3, s_2_17, -1, -1, 0}, /* 18 */ { 3, s_2_18, -1, -1, 0}, /* 19 */ { 3, s_2_19, -1, -1, 0}, /* 20 */ { 3, s_2_20, -1, -1, 0}, /* 21 */ { 3, s_2_21, -1, -1, 0}, /* 22 */ { 2, s_2_22, -1, -1, 0} }; static const symbol s_3_0[2] = { 'a', 'l' }; static const symbol s_3_1[2] = { 'e', 'l' }; static const struct among a_3[2] = { /* 0 */ { 2, s_3_0, -1, 1, 0}, /* 1 */ { 2, s_3_1, -1, 2, 0} }; static const symbol s_4_0[2] = { 'b', 'a' }; static const symbol s_4_1[2] = { 'r', 'a' }; static const symbol s_4_2[2] = { 'b', 'e' }; static const symbol s_4_3[2] = { 'r', 'e' }; static const symbol s_4_4[2] = { 'i', 'g' }; static const symbol s_4_5[3] = { 'n', 'a', 'k' }; static const symbol s_4_6[3] = { 'n', 'e', 'k' }; static const symbol s_4_7[3] = { 'v', 'a', 'l' }; static const symbol s_4_8[3] = { 'v', 'e', 'l' }; static const symbol s_4_9[2] = { 'u', 'l' }; static const symbol s_4_10[3] = { 'n', 0xE1, 'l' }; static const symbol s_4_11[3] = { 'n', 0xE9, 'l' }; static const symbol s_4_12[3] = { 'b', 0xF3, 'l' }; static const symbol s_4_13[3] = { 'r', 0xF3, 'l' }; static const symbol s_4_14[3] = { 't', 0xF3, 'l' }; static const symbol s_4_15[3] = { 'b', 0xF5, 'l' }; static const symbol s_4_16[3] = { 'r', 0xF5, 'l' }; static const symbol s_4_17[3] = { 't', 0xF5, 'l' }; static const symbol s_4_18[2] = { 0xFC, 'l' }; static const symbol s_4_19[1] = { 'n' }; static const symbol s_4_20[2] = { 'a', 'n' }; static const symbol s_4_21[3] = { 'b', 'a', 'n' }; static const symbol s_4_22[2] = { 'e', 'n' }; static const symbol s_4_23[3] = { 'b', 'e', 'n' }; static const symbol s_4_24[6] = { 'k', 0xE9, 'p', 'p', 'e', 'n' }; static const symbol s_4_25[2] = { 'o', 'n' }; static const symbol s_4_26[2] = { 0xF6, 'n' }; static const symbol s_4_27[4] = { 'k', 0xE9, 'p', 'p' }; static const symbol s_4_28[3] = { 'k', 'o', 'r' }; static const symbol s_4_29[1] = { 't' }; static const symbol s_4_30[2] = { 'a', 't' }; static const symbol s_4_31[2] = { 'e', 't' }; static const symbol s_4_32[4] = { 'k', 0xE9, 'n', 't' }; static const symbol s_4_33[6] = { 'a', 'n', 'k', 0xE9, 'n', 't' }; static const symbol s_4_34[6] = { 'e', 'n', 'k', 0xE9, 'n', 't' }; static const symbol s_4_35[6] = { 'o', 'n', 'k', 0xE9, 'n', 't' }; static const symbol s_4_36[2] = { 'o', 't' }; static const symbol s_4_37[3] = { 0xE9, 'r', 't' }; static const symbol s_4_38[2] = { 0xF6, 't' }; static const symbol s_4_39[3] = { 'h', 'e', 'z' }; static const symbol s_4_40[3] = { 'h', 'o', 'z' }; static const symbol s_4_41[3] = { 'h', 0xF6, 'z' }; static const symbol s_4_42[2] = { 'v', 0xE1 }; static const symbol s_4_43[2] = { 'v', 0xE9 }; static const struct among a_4[44] = { /* 0 */ { 2, s_4_0, -1, -1, 0}, /* 1 */ { 2, s_4_1, -1, -1, 0}, /* 2 */ { 2, s_4_2, -1, -1, 0}, /* 3 */ { 2, s_4_3, -1, -1, 0}, /* 4 */ { 2, s_4_4, -1, -1, 0}, /* 5 */ { 3, s_4_5, -1, -1, 0}, /* 6 */ { 3, s_4_6, -1, -1, 0}, /* 7 */ { 3, s_4_7, -1, -1, 0}, /* 8 */ { 3, s_4_8, -1, -1, 0}, /* 9 */ { 2, s_4_9, -1, -1, 0}, /* 10 */ { 3, s_4_10, -1, -1, 0}, /* 11 */ { 3, s_4_11, -1, -1, 0}, /* 12 */ { 3, s_4_12, -1, -1, 0}, /* 13 */ { 3, s_4_13, -1, -1, 0}, /* 14 */ { 3, s_4_14, -1, -1, 0}, /* 15 */ { 3, s_4_15, -1, -1, 0}, /* 16 */ { 3, s_4_16, -1, -1, 0}, /* 17 */ { 3, s_4_17, -1, -1, 0}, /* 18 */ { 2, s_4_18, -1, -1, 0}, /* 19 */ { 1, s_4_19, -1, -1, 0}, /* 20 */ { 2, s_4_20, 19, -1, 0}, /* 21 */ { 3, s_4_21, 20, -1, 0}, /* 22 */ { 2, s_4_22, 19, -1, 0}, /* 23 */ { 3, s_4_23, 22, -1, 0}, /* 24 */ { 6, s_4_24, 22, -1, 0}, /* 25 */ { 2, s_4_25, 19, -1, 0}, /* 26 */ { 2, s_4_26, 19, -1, 0}, /* 27 */ { 4, s_4_27, -1, -1, 0}, /* 28 */ { 3, s_4_28, -1, -1, 0}, /* 29 */ { 1, s_4_29, -1, -1, 0}, /* 30 */ { 2, s_4_30, 29, -1, 0}, /* 31 */ { 2, s_4_31, 29, -1, 0}, /* 32 */ { 4, s_4_32, 29, -1, 0}, /* 33 */ { 6, s_4_33, 32, -1, 0}, /* 34 */ { 6, s_4_34, 32, -1, 0}, /* 35 */ { 6, s_4_35, 32, -1, 0}, /* 36 */ { 2, s_4_36, 29, -1, 0}, /* 37 */ { 3, s_4_37, 29, -1, 0}, /* 38 */ { 2, s_4_38, 29, -1, 0}, /* 39 */ { 3, s_4_39, -1, -1, 0}, /* 40 */ { 3, s_4_40, -1, -1, 0}, /* 41 */ { 3, s_4_41, -1, -1, 0}, /* 42 */ { 2, s_4_42, -1, -1, 0}, /* 43 */ { 2, s_4_43, -1, -1, 0} }; static const symbol s_5_0[2] = { 0xE1, 'n' }; static const symbol s_5_1[2] = { 0xE9, 'n' }; static const symbol s_5_2[6] = { 0xE1, 'n', 'k', 0xE9, 'n', 't' }; static const struct among a_5[3] = { /* 0 */ { 2, s_5_0, -1, 2, 0}, /* 1 */ { 2, s_5_1, -1, 1, 0}, /* 2 */ { 6, s_5_2, -1, 3, 0} }; static const symbol s_6_0[4] = { 's', 't', 'u', 'l' }; static const symbol s_6_1[5] = { 'a', 's', 't', 'u', 'l' }; static const symbol s_6_2[5] = { 0xE1, 's', 't', 'u', 'l' }; static const symbol s_6_3[4] = { 's', 't', 0xFC, 'l' }; static const symbol s_6_4[5] = { 'e', 's', 't', 0xFC, 'l' }; static const symbol s_6_5[5] = { 0xE9, 's', 't', 0xFC, 'l' }; static const struct among a_6[6] = { /* 0 */ { 4, s_6_0, -1, 2, 0}, /* 1 */ { 5, s_6_1, 0, 1, 0}, /* 2 */ { 5, s_6_2, 0, 3, 0}, /* 3 */ { 4, s_6_3, -1, 2, 0}, /* 4 */ { 5, s_6_4, 3, 1, 0}, /* 5 */ { 5, s_6_5, 3, 4, 0} }; static const symbol s_7_0[1] = { 0xE1 }; static const symbol s_7_1[1] = { 0xE9 }; static const struct among a_7[2] = { /* 0 */ { 1, s_7_0, -1, 1, 0}, /* 1 */ { 1, s_7_1, -1, 2, 0} }; static const symbol s_8_0[1] = { 'k' }; static const symbol s_8_1[2] = { 'a', 'k' }; static const symbol s_8_2[2] = { 'e', 'k' }; static const symbol s_8_3[2] = { 'o', 'k' }; static const symbol s_8_4[2] = { 0xE1, 'k' }; static const symbol s_8_5[2] = { 0xE9, 'k' }; static const symbol s_8_6[2] = { 0xF6, 'k' }; static const struct among a_8[7] = { /* 0 */ { 1, s_8_0, -1, 7, 0}, /* 1 */ { 2, s_8_1, 0, 4, 0}, /* 2 */ { 2, s_8_2, 0, 6, 0}, /* 3 */ { 2, s_8_3, 0, 5, 0}, /* 4 */ { 2, s_8_4, 0, 1, 0}, /* 5 */ { 2, s_8_5, 0, 2, 0}, /* 6 */ { 2, s_8_6, 0, 3, 0} }; static const symbol s_9_0[2] = { 0xE9, 'i' }; static const symbol s_9_1[3] = { 0xE1, 0xE9, 'i' }; static const symbol s_9_2[3] = { 0xE9, 0xE9, 'i' }; static const symbol s_9_3[1] = { 0xE9 }; static const symbol s_9_4[2] = { 'k', 0xE9 }; static const symbol s_9_5[3] = { 'a', 'k', 0xE9 }; static const symbol s_9_6[3] = { 'e', 'k', 0xE9 }; static const symbol s_9_7[3] = { 'o', 'k', 0xE9 }; static const symbol s_9_8[3] = { 0xE1, 'k', 0xE9 }; static const symbol s_9_9[3] = { 0xE9, 'k', 0xE9 }; static const symbol s_9_10[3] = { 0xF6, 'k', 0xE9 }; static const symbol s_9_11[2] = { 0xE9, 0xE9 }; static const struct among a_9[12] = { /* 0 */ { 2, s_9_0, -1, 7, 0}, /* 1 */ { 3, s_9_1, 0, 6, 0}, /* 2 */ { 3, s_9_2, 0, 5, 0}, /* 3 */ { 1, s_9_3, -1, 9, 0}, /* 4 */ { 2, s_9_4, 3, 4, 0}, /* 5 */ { 3, s_9_5, 4, 1, 0}, /* 6 */ { 3, s_9_6, 4, 1, 0}, /* 7 */ { 3, s_9_7, 4, 1, 0}, /* 8 */ { 3, s_9_8, 4, 3, 0}, /* 9 */ { 3, s_9_9, 4, 2, 0}, /* 10 */ { 3, s_9_10, 4, 1, 0}, /* 11 */ { 2, s_9_11, 3, 8, 0} }; static const symbol s_10_0[1] = { 'a' }; static const symbol s_10_1[2] = { 'j', 'a' }; static const symbol s_10_2[1] = { 'd' }; static const symbol s_10_3[2] = { 'a', 'd' }; static const symbol s_10_4[2] = { 'e', 'd' }; static const symbol s_10_5[2] = { 'o', 'd' }; static const symbol s_10_6[2] = { 0xE1, 'd' }; static const symbol s_10_7[2] = { 0xE9, 'd' }; static const symbol s_10_8[2] = { 0xF6, 'd' }; static const symbol s_10_9[1] = { 'e' }; static const symbol s_10_10[2] = { 'j', 'e' }; static const symbol s_10_11[2] = { 'n', 'k' }; static const symbol s_10_12[3] = { 'u', 'n', 'k' }; static const symbol s_10_13[3] = { 0xE1, 'n', 'k' }; static const symbol s_10_14[3] = { 0xE9, 'n', 'k' }; static const symbol s_10_15[3] = { 0xFC, 'n', 'k' }; static const symbol s_10_16[2] = { 'u', 'k' }; static const symbol s_10_17[3] = { 'j', 'u', 'k' }; static const symbol s_10_18[4] = { 0xE1, 'j', 'u', 'k' }; static const symbol s_10_19[2] = { 0xFC, 'k' }; static const symbol s_10_20[3] = { 'j', 0xFC, 'k' }; static const symbol s_10_21[4] = { 0xE9, 'j', 0xFC, 'k' }; static const symbol s_10_22[1] = { 'm' }; static const symbol s_10_23[2] = { 'a', 'm' }; static const symbol s_10_24[2] = { 'e', 'm' }; static const symbol s_10_25[2] = { 'o', 'm' }; static const symbol s_10_26[2] = { 0xE1, 'm' }; static const symbol s_10_27[2] = { 0xE9, 'm' }; static const symbol s_10_28[1] = { 'o' }; static const symbol s_10_29[1] = { 0xE1 }; static const symbol s_10_30[1] = { 0xE9 }; static const struct among a_10[31] = { /* 0 */ { 1, s_10_0, -1, 18, 0}, /* 1 */ { 2, s_10_1, 0, 17, 0}, /* 2 */ { 1, s_10_2, -1, 16, 0}, /* 3 */ { 2, s_10_3, 2, 13, 0}, /* 4 */ { 2, s_10_4, 2, 13, 0}, /* 5 */ { 2, s_10_5, 2, 13, 0}, /* 6 */ { 2, s_10_6, 2, 14, 0}, /* 7 */ { 2, s_10_7, 2, 15, 0}, /* 8 */ { 2, s_10_8, 2, 13, 0}, /* 9 */ { 1, s_10_9, -1, 18, 0}, /* 10 */ { 2, s_10_10, 9, 17, 0}, /* 11 */ { 2, s_10_11, -1, 4, 0}, /* 12 */ { 3, s_10_12, 11, 1, 0}, /* 13 */ { 3, s_10_13, 11, 2, 0}, /* 14 */ { 3, s_10_14, 11, 3, 0}, /* 15 */ { 3, s_10_15, 11, 1, 0}, /* 16 */ { 2, s_10_16, -1, 8, 0}, /* 17 */ { 3, s_10_17, 16, 7, 0}, /* 18 */ { 4, s_10_18, 17, 5, 0}, /* 19 */ { 2, s_10_19, -1, 8, 0}, /* 20 */ { 3, s_10_20, 19, 7, 0}, /* 21 */ { 4, s_10_21, 20, 6, 0}, /* 22 */ { 1, s_10_22, -1, 12, 0}, /* 23 */ { 2, s_10_23, 22, 9, 0}, /* 24 */ { 2, s_10_24, 22, 9, 0}, /* 25 */ { 2, s_10_25, 22, 9, 0}, /* 26 */ { 2, s_10_26, 22, 10, 0}, /* 27 */ { 2, s_10_27, 22, 11, 0}, /* 28 */ { 1, s_10_28, -1, 18, 0}, /* 29 */ { 1, s_10_29, -1, 19, 0}, /* 30 */ { 1, s_10_30, -1, 20, 0} }; static const symbol s_11_0[2] = { 'i', 'd' }; static const symbol s_11_1[3] = { 'a', 'i', 'd' }; static const symbol s_11_2[4] = { 'j', 'a', 'i', 'd' }; static const symbol s_11_3[3] = { 'e', 'i', 'd' }; static const symbol s_11_4[4] = { 'j', 'e', 'i', 'd' }; static const symbol s_11_5[3] = { 0xE1, 'i', 'd' }; static const symbol s_11_6[3] = { 0xE9, 'i', 'd' }; static const symbol s_11_7[1] = { 'i' }; static const symbol s_11_8[2] = { 'a', 'i' }; static const symbol s_11_9[3] = { 'j', 'a', 'i' }; static const symbol s_11_10[2] = { 'e', 'i' }; static const symbol s_11_11[3] = { 'j', 'e', 'i' }; static const symbol s_11_12[2] = { 0xE1, 'i' }; static const symbol s_11_13[2] = { 0xE9, 'i' }; static const symbol s_11_14[4] = { 'i', 't', 'e', 'k' }; static const symbol s_11_15[5] = { 'e', 'i', 't', 'e', 'k' }; static const symbol s_11_16[6] = { 'j', 'e', 'i', 't', 'e', 'k' }; static const symbol s_11_17[5] = { 0xE9, 'i', 't', 'e', 'k' }; static const symbol s_11_18[2] = { 'i', 'k' }; static const symbol s_11_19[3] = { 'a', 'i', 'k' }; static const symbol s_11_20[4] = { 'j', 'a', 'i', 'k' }; static const symbol s_11_21[3] = { 'e', 'i', 'k' }; static const symbol s_11_22[4] = { 'j', 'e', 'i', 'k' }; static const symbol s_11_23[3] = { 0xE1, 'i', 'k' }; static const symbol s_11_24[3] = { 0xE9, 'i', 'k' }; static const symbol s_11_25[3] = { 'i', 'n', 'k' }; static const symbol s_11_26[4] = { 'a', 'i', 'n', 'k' }; static const symbol s_11_27[5] = { 'j', 'a', 'i', 'n', 'k' }; static const symbol s_11_28[4] = { 'e', 'i', 'n', 'k' }; static const symbol s_11_29[5] = { 'j', 'e', 'i', 'n', 'k' }; static const symbol s_11_30[4] = { 0xE1, 'i', 'n', 'k' }; static const symbol s_11_31[4] = { 0xE9, 'i', 'n', 'k' }; static const symbol s_11_32[5] = { 'a', 'i', 't', 'o', 'k' }; static const symbol s_11_33[6] = { 'j', 'a', 'i', 't', 'o', 'k' }; static const symbol s_11_34[5] = { 0xE1, 'i', 't', 'o', 'k' }; static const symbol s_11_35[2] = { 'i', 'm' }; static const symbol s_11_36[3] = { 'a', 'i', 'm' }; static const symbol s_11_37[4] = { 'j', 'a', 'i', 'm' }; static const symbol s_11_38[3] = { 'e', 'i', 'm' }; static const symbol s_11_39[4] = { 'j', 'e', 'i', 'm' }; static const symbol s_11_40[3] = { 0xE1, 'i', 'm' }; static const symbol s_11_41[3] = { 0xE9, 'i', 'm' }; static const struct among a_11[42] = { /* 0 */ { 2, s_11_0, -1, 10, 0}, /* 1 */ { 3, s_11_1, 0, 9, 0}, /* 2 */ { 4, s_11_2, 1, 6, 0}, /* 3 */ { 3, s_11_3, 0, 9, 0}, /* 4 */ { 4, s_11_4, 3, 6, 0}, /* 5 */ { 3, s_11_5, 0, 7, 0}, /* 6 */ { 3, s_11_6, 0, 8, 0}, /* 7 */ { 1, s_11_7, -1, 15, 0}, /* 8 */ { 2, s_11_8, 7, 14, 0}, /* 9 */ { 3, s_11_9, 8, 11, 0}, /* 10 */ { 2, s_11_10, 7, 14, 0}, /* 11 */ { 3, s_11_11, 10, 11, 0}, /* 12 */ { 2, s_11_12, 7, 12, 0}, /* 13 */ { 2, s_11_13, 7, 13, 0}, /* 14 */ { 4, s_11_14, -1, 24, 0}, /* 15 */ { 5, s_11_15, 14, 21, 0}, /* 16 */ { 6, s_11_16, 15, 20, 0}, /* 17 */ { 5, s_11_17, 14, 23, 0}, /* 18 */ { 2, s_11_18, -1, 29, 0}, /* 19 */ { 3, s_11_19, 18, 26, 0}, /* 20 */ { 4, s_11_20, 19, 25, 0}, /* 21 */ { 3, s_11_21, 18, 26, 0}, /* 22 */ { 4, s_11_22, 21, 25, 0}, /* 23 */ { 3, s_11_23, 18, 27, 0}, /* 24 */ { 3, s_11_24, 18, 28, 0}, /* 25 */ { 3, s_11_25, -1, 20, 0}, /* 26 */ { 4, s_11_26, 25, 17, 0}, /* 27 */ { 5, s_11_27, 26, 16, 0}, /* 28 */ { 4, s_11_28, 25, 17, 0}, /* 29 */ { 5, s_11_29, 28, 16, 0}, /* 30 */ { 4, s_11_30, 25, 18, 0}, /* 31 */ { 4, s_11_31, 25, 19, 0}, /* 32 */ { 5, s_11_32, -1, 21, 0}, /* 33 */ { 6, s_11_33, 32, 20, 0}, /* 34 */ { 5, s_11_34, -1, 22, 0}, /* 35 */ { 2, s_11_35, -1, 5, 0}, /* 36 */ { 3, s_11_36, 35, 4, 0}, /* 37 */ { 4, s_11_37, 36, 1, 0}, /* 38 */ { 3, s_11_38, 35, 4, 0}, /* 39 */ { 4, s_11_39, 38, 1, 0}, /* 40 */ { 3, s_11_40, 35, 2, 0}, /* 41 */ { 3, s_11_41, 35, 3, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 52, 14 }; static const symbol s_0[] = { 'a' }; static const symbol s_1[] = { 'e' }; static const symbol s_2[] = { 'e' }; static const symbol s_3[] = { 'a' }; static const symbol s_4[] = { 'a' }; static const symbol s_5[] = { 'a' }; static const symbol s_6[] = { 'e' }; static const symbol s_7[] = { 'a' }; static const symbol s_8[] = { 'e' }; static const symbol s_9[] = { 'e' }; static const symbol s_10[] = { 'a' }; static const symbol s_11[] = { 'e' }; static const symbol s_12[] = { 'a' }; static const symbol s_13[] = { 'e' }; static const symbol s_14[] = { 'a' }; static const symbol s_15[] = { 'e' }; static const symbol s_16[] = { 'a' }; static const symbol s_17[] = { 'e' }; static const symbol s_18[] = { 'a' }; static const symbol s_19[] = { 'e' }; static const symbol s_20[] = { 'a' }; static const symbol s_21[] = { 'e' }; static const symbol s_22[] = { 'a' }; static const symbol s_23[] = { 'e' }; static const symbol s_24[] = { 'a' }; static const symbol s_25[] = { 'e' }; static const symbol s_26[] = { 'a' }; static const symbol s_27[] = { 'e' }; static const symbol s_28[] = { 'a' }; static const symbol s_29[] = { 'e' }; static const symbol s_30[] = { 'a' }; static const symbol s_31[] = { 'e' }; static const symbol s_32[] = { 'a' }; static const symbol s_33[] = { 'e' }; static const symbol s_34[] = { 'a' }; static const symbol s_35[] = { 'e' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 46 */ { int c1 = z->c; /* or, line 51 */ if (in_grouping(z, g_v, 97, 252, 0)) goto lab1; /* grouping v, line 48 */ if (in_grouping(z, g_v, 97, 252, 1) < 0) goto lab1; /* goto */ /* non v, line 48 */ { int c2 = z->c; /* or, line 49 */ if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 3 || !((101187584 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab3; /* among, line 49 */ if (!(find_among(z, a_0, 8))) goto lab3; goto lab2; lab3: z->c = c2; if (z->c >= z->l) goto lab1; z->c++; /* next, line 49 */ } lab2: z->I[0] = z->c; /* setmark p1, line 50 */ goto lab0; lab1: z->c = c1; if (out_grouping(z, g_v, 97, 252, 0)) return 0; /* non v, line 53 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 53 */ } lab0: return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 58 */ return 1; } static int r_v_ending(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 61 */ if (z->c <= z->lb || (z->p[z->c - 1] != 225 && z->p[z->c - 1] != 233)) return 0; /* substring, line 61 */ among_var = find_among_b(z, a_1, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 61 */ { int ret = r_R1(z); /* call R1, line 61 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 61 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 62 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 63 */ if (ret < 0) return ret; } break; } return 1; } static int r_double(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 68 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((106790108 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 68 */ if (!(find_among_b(z, a_2, 23))) return 0; z->c = z->l - m_test1; } return 1; } static int r_undouble(struct SN_env * z) { /* backwardmode */ if (z->c <= z->lb) return 0; z->c--; /* next, line 73 */ z->ket = z->c; /* [, line 73 */ { int ret = z->c - 1; /* hop, line 73 */ if (z->lb > ret || ret > z->l) return 0; z->c = ret; } z->bra = z->c; /* ], line 73 */ { int ret = slice_del(z); /* delete, line 73 */ if (ret < 0) return ret; } return 1; } static int r_instrum(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 77 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 108) return 0; /* substring, line 77 */ among_var = find_among_b(z, a_3, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 77 */ { int ret = r_R1(z); /* call R1, line 77 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 77 */ case 0: return 0; case 1: { int ret = r_double(z); /* call double, line 78 */ if (ret <= 0) return ret; } break; case 2: { int ret = r_double(z); /* call double, line 79 */ if (ret <= 0) return ret; } break; } { int ret = slice_del(z); /* delete, line 81 */ if (ret < 0) return ret; } { int ret = r_undouble(z); /* call undouble, line 82 */ if (ret <= 0) return ret; } return 1; } static int r_case(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 87 */ if (!(find_among_b(z, a_4, 44))) return 0; /* substring, line 87 */ z->bra = z->c; /* ], line 87 */ { int ret = r_R1(z); /* call R1, line 87 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 111 */ if (ret < 0) return ret; } { int ret = r_v_ending(z); /* call v_ending, line 112 */ if (ret <= 0) return ret; } return 1; } static int r_case_special(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 116 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 110 && z->p[z->c - 1] != 116)) return 0; /* substring, line 116 */ among_var = find_among_b(z, a_5, 3); if (!(among_var)) return 0; z->bra = z->c; /* ], line 116 */ { int ret = r_R1(z); /* call R1, line 116 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 116 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_2); /* <-, line 117 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_3); /* <-, line 118 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_4); /* <-, line 119 */ if (ret < 0) return ret; } break; } return 1; } static int r_case_other(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 124 */ if (z->c - 3 <= z->lb || z->p[z->c - 1] != 108) return 0; /* substring, line 124 */ among_var = find_among_b(z, a_6, 6); if (!(among_var)) return 0; z->bra = z->c; /* ], line 124 */ { int ret = r_R1(z); /* call R1, line 124 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 124 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 125 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 126 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_5); /* <-, line 127 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_6); /* <-, line 128 */ if (ret < 0) return ret; } break; } return 1; } static int r_factive(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 133 */ if (z->c <= z->lb || (z->p[z->c - 1] != 225 && z->p[z->c - 1] != 233)) return 0; /* substring, line 133 */ among_var = find_among_b(z, a_7, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 133 */ { int ret = r_R1(z); /* call R1, line 133 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 133 */ case 0: return 0; case 1: { int ret = r_double(z); /* call double, line 134 */ if (ret <= 0) return ret; } break; case 2: { int ret = r_double(z); /* call double, line 135 */ if (ret <= 0) return ret; } break; } { int ret = slice_del(z); /* delete, line 137 */ if (ret < 0) return ret; } { int ret = r_undouble(z); /* call undouble, line 138 */ if (ret <= 0) return ret; } return 1; } static int r_plural(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 142 */ if (z->c <= z->lb || z->p[z->c - 1] != 107) return 0; /* substring, line 142 */ among_var = find_among_b(z, a_8, 7); if (!(among_var)) return 0; z->bra = z->c; /* ], line 142 */ { int ret = r_R1(z); /* call R1, line 142 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 142 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_7); /* <-, line 143 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_8); /* <-, line 144 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 145 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 146 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 147 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_del(z); /* delete, line 148 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_del(z); /* delete, line 149 */ if (ret < 0) return ret; } break; } return 1; } static int r_owned(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 154 */ if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 233)) return 0; /* substring, line 154 */ among_var = find_among_b(z, a_9, 12); if (!(among_var)) return 0; z->bra = z->c; /* ], line 154 */ { int ret = r_R1(z); /* call R1, line 154 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 154 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 155 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_9); /* <-, line 156 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_10); /* <-, line 157 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_11); /* <-, line 159 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_12); /* <-, line 160 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_del(z); /* delete, line 161 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 1, s_13); /* <-, line 162 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_del(z); /* delete, line 163 */ if (ret < 0) return ret; } break; } return 1; } static int r_sing_owner(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 168 */ among_var = find_among_b(z, a_10, 31); /* substring, line 168 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 168 */ { int ret = r_R1(z); /* call R1, line 168 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 168 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 169 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_14); /* <-, line 170 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_15); /* <-, line 171 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 172 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_16); /* <-, line 173 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_17); /* <-, line 174 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_del(z); /* delete, line 175 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_del(z); /* delete, line 176 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_del(z); /* delete, line 177 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 1, s_18); /* <-, line 178 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 1, s_19); /* <-, line 179 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_del(z); /* delete, line 180 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_del(z); /* delete, line 181 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 1, s_20); /* <-, line 182 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_from_s(z, 1, s_21); /* <-, line 183 */ if (ret < 0) return ret; } break; case 16: { int ret = slice_del(z); /* delete, line 184 */ if (ret < 0) return ret; } break; case 17: { int ret = slice_del(z); /* delete, line 185 */ if (ret < 0) return ret; } break; case 18: { int ret = slice_del(z); /* delete, line 186 */ if (ret < 0) return ret; } break; case 19: { int ret = slice_from_s(z, 1, s_22); /* <-, line 187 */ if (ret < 0) return ret; } break; case 20: { int ret = slice_from_s(z, 1, s_23); /* <-, line 188 */ if (ret < 0) return ret; } break; } return 1; } static int r_plur_owner(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 193 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((10768 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 193 */ among_var = find_among_b(z, a_11, 42); if (!(among_var)) return 0; z->bra = z->c; /* ], line 193 */ { int ret = r_R1(z); /* call R1, line 193 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 193 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 194 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_24); /* <-, line 195 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_25); /* <-, line 196 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 197 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 198 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_del(z); /* delete, line 199 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 1, s_26); /* <-, line 200 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 1, s_27); /* <-, line 201 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_del(z); /* delete, line 202 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_del(z); /* delete, line 203 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_del(z); /* delete, line 204 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 1, s_28); /* <-, line 205 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_from_s(z, 1, s_29); /* <-, line 206 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_del(z); /* delete, line 207 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_del(z); /* delete, line 208 */ if (ret < 0) return ret; } break; case 16: { int ret = slice_del(z); /* delete, line 209 */ if (ret < 0) return ret; } break; case 17: { int ret = slice_del(z); /* delete, line 210 */ if (ret < 0) return ret; } break; case 18: { int ret = slice_from_s(z, 1, s_30); /* <-, line 211 */ if (ret < 0) return ret; } break; case 19: { int ret = slice_from_s(z, 1, s_31); /* <-, line 212 */ if (ret < 0) return ret; } break; case 20: { int ret = slice_del(z); /* delete, line 214 */ if (ret < 0) return ret; } break; case 21: { int ret = slice_del(z); /* delete, line 215 */ if (ret < 0) return ret; } break; case 22: { int ret = slice_from_s(z, 1, s_32); /* <-, line 216 */ if (ret < 0) return ret; } break; case 23: { int ret = slice_from_s(z, 1, s_33); /* <-, line 217 */ if (ret < 0) return ret; } break; case 24: { int ret = slice_del(z); /* delete, line 218 */ if (ret < 0) return ret; } break; case 25: { int ret = slice_del(z); /* delete, line 219 */ if (ret < 0) return ret; } break; case 26: { int ret = slice_del(z); /* delete, line 220 */ if (ret < 0) return ret; } break; case 27: { int ret = slice_from_s(z, 1, s_34); /* <-, line 221 */ if (ret < 0) return ret; } break; case 28: { int ret = slice_from_s(z, 1, s_35); /* <-, line 222 */ if (ret < 0) return ret; } break; case 29: { int ret = slice_del(z); /* delete, line 223 */ if (ret < 0) return ret; } break; } return 1; } extern int hungarian_ISO_8859_2_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 229 */ { int ret = r_mark_regions(z); /* call mark_regions, line 229 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 230 */ { int m2 = z->l - z->c; (void)m2; /* do, line 231 */ { int ret = r_instrum(z); /* call instrum, line 231 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 232 */ { int ret = r_case(z); /* call case, line 232 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 233 */ { int ret = r_case_special(z); /* call case_special, line 233 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 234 */ { int ret = r_case_other(z); /* call case_other, line 234 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* do, line 235 */ { int ret = r_factive(z); /* call factive, line 235 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = z->l - m6; } { int m7 = z->l - z->c; (void)m7; /* do, line 236 */ { int ret = r_owned(z); /* call owned, line 236 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 237 */ { int ret = r_sing_owner(z); /* call sing_owner, line 237 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 238 */ { int ret = r_plur_owner(z); /* call plur_owner, line 238 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 239 */ { int ret = r_plural(z); /* call plural, line 239 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m10; } z->c = z->lb; return 1; } extern struct SN_env * hungarian_ISO_8859_2_create_env(void) { return SN_create_env(0, 1, 0); } extern void hungarian_ISO_8859_2_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_2_hungarian.h000066400000000000000000000005531364126773500246240ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * hungarian_ISO_8859_2_create_env(void); extern void hungarian_ISO_8859_2_close_env(struct SN_env * z); extern int hungarian_ISO_8859_2_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_2_romanian.c000066400000000000000000001115701364126773500244510ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int romanian_ISO_8859_2_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_vowel_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_combo_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_step_0(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * romanian_ISO_8859_2_create_env(void); extern void romanian_ISO_8859_2_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 'I' }; static const symbol s_0_2[1] = { 'U' }; static const struct among a_0[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_0_1, 0, 1, 0}, /* 2 */ { 1, s_0_2, 0, 2, 0} }; static const symbol s_1_0[2] = { 'e', 'a' }; static const symbol s_1_1[4] = { 'a', 0xFE, 'i', 'a' }; static const symbol s_1_2[3] = { 'a', 'u', 'a' }; static const symbol s_1_3[3] = { 'i', 'u', 'a' }; static const symbol s_1_4[4] = { 'a', 0xFE, 'i', 'e' }; static const symbol s_1_5[3] = { 'e', 'l', 'e' }; static const symbol s_1_6[3] = { 'i', 'l', 'e' }; static const symbol s_1_7[4] = { 'i', 'i', 'l', 'e' }; static const symbol s_1_8[3] = { 'i', 'e', 'i' }; static const symbol s_1_9[4] = { 'a', 't', 'e', 'i' }; static const symbol s_1_10[2] = { 'i', 'i' }; static const symbol s_1_11[4] = { 'u', 'l', 'u', 'i' }; static const symbol s_1_12[2] = { 'u', 'l' }; static const symbol s_1_13[4] = { 'e', 'l', 'o', 'r' }; static const symbol s_1_14[4] = { 'i', 'l', 'o', 'r' }; static const symbol s_1_15[5] = { 'i', 'i', 'l', 'o', 'r' }; static const struct among a_1[16] = { /* 0 */ { 2, s_1_0, -1, 3, 0}, /* 1 */ { 4, s_1_1, -1, 7, 0}, /* 2 */ { 3, s_1_2, -1, 2, 0}, /* 3 */ { 3, s_1_3, -1, 4, 0}, /* 4 */ { 4, s_1_4, -1, 7, 0}, /* 5 */ { 3, s_1_5, -1, 3, 0}, /* 6 */ { 3, s_1_6, -1, 5, 0}, /* 7 */ { 4, s_1_7, 6, 4, 0}, /* 8 */ { 3, s_1_8, -1, 4, 0}, /* 9 */ { 4, s_1_9, -1, 6, 0}, /* 10 */ { 2, s_1_10, -1, 4, 0}, /* 11 */ { 4, s_1_11, -1, 1, 0}, /* 12 */ { 2, s_1_12, -1, 1, 0}, /* 13 */ { 4, s_1_13, -1, 3, 0}, /* 14 */ { 4, s_1_14, -1, 4, 0}, /* 15 */ { 5, s_1_15, 14, 4, 0} }; static const symbol s_2_0[5] = { 'i', 'c', 'a', 'l', 'a' }; static const symbol s_2_1[5] = { 'i', 'c', 'i', 'v', 'a' }; static const symbol s_2_2[5] = { 'a', 't', 'i', 'v', 'a' }; static const symbol s_2_3[5] = { 'i', 't', 'i', 'v', 'a' }; static const symbol s_2_4[5] = { 'i', 'c', 'a', 'l', 'e' }; static const symbol s_2_5[6] = { 'a', 0xFE, 'i', 'u', 'n', 'e' }; static const symbol s_2_6[6] = { 'i', 0xFE, 'i', 'u', 'n', 'e' }; static const symbol s_2_7[6] = { 'a', 't', 'o', 'a', 'r', 'e' }; static const symbol s_2_8[6] = { 'i', 't', 'o', 'a', 'r', 'e' }; static const symbol s_2_9[6] = { 0xE3, 't', 'o', 'a', 'r', 'e' }; static const symbol s_2_10[7] = { 'i', 'c', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_11[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_12[9] = { 'i', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_13[7] = { 'i', 'v', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_14[5] = { 'i', 'c', 'i', 'v', 'e' }; static const symbol s_2_15[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_2_16[5] = { 'i', 't', 'i', 'v', 'e' }; static const symbol s_2_17[5] = { 'i', 'c', 'a', 'l', 'i' }; static const symbol s_2_18[5] = { 'a', 't', 'o', 'r', 'i' }; static const symbol s_2_19[7] = { 'i', 'c', 'a', 't', 'o', 'r', 'i' }; static const symbol s_2_20[5] = { 'i', 't', 'o', 'r', 'i' }; static const symbol s_2_21[5] = { 0xE3, 't', 'o', 'r', 'i' }; static const symbol s_2_22[7] = { 'i', 'c', 'i', 't', 'a', 't', 'i' }; static const symbol s_2_23[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'i' }; static const symbol s_2_24[7] = { 'i', 'v', 'i', 't', 'a', 't', 'i' }; static const symbol s_2_25[5] = { 'i', 'c', 'i', 'v', 'i' }; static const symbol s_2_26[5] = { 'a', 't', 'i', 'v', 'i' }; static const symbol s_2_27[5] = { 'i', 't', 'i', 'v', 'i' }; static const symbol s_2_28[6] = { 'i', 'c', 'i', 't', 0xE3, 'i' }; static const symbol s_2_29[8] = { 'a', 'b', 'i', 'l', 'i', 't', 0xE3, 'i' }; static const symbol s_2_30[6] = { 'i', 'v', 'i', 't', 0xE3, 'i' }; static const symbol s_2_31[7] = { 'i', 'c', 'i', 't', 0xE3, 0xFE, 'i' }; static const symbol s_2_32[9] = { 'a', 'b', 'i', 'l', 'i', 't', 0xE3, 0xFE, 'i' }; static const symbol s_2_33[7] = { 'i', 'v', 'i', 't', 0xE3, 0xFE, 'i' }; static const symbol s_2_34[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_2_35[4] = { 'a', 't', 'o', 'r' }; static const symbol s_2_36[6] = { 'i', 'c', 'a', 't', 'o', 'r' }; static const symbol s_2_37[4] = { 'i', 't', 'o', 'r' }; static const symbol s_2_38[4] = { 0xE3, 't', 'o', 'r' }; static const symbol s_2_39[4] = { 'i', 'c', 'i', 'v' }; static const symbol s_2_40[4] = { 'a', 't', 'i', 'v' }; static const symbol s_2_41[4] = { 'i', 't', 'i', 'v' }; static const symbol s_2_42[5] = { 'i', 'c', 'a', 'l', 0xE3 }; static const symbol s_2_43[5] = { 'i', 'c', 'i', 'v', 0xE3 }; static const symbol s_2_44[5] = { 'a', 't', 'i', 'v', 0xE3 }; static const symbol s_2_45[5] = { 'i', 't', 'i', 'v', 0xE3 }; static const struct among a_2[46] = { /* 0 */ { 5, s_2_0, -1, 4, 0}, /* 1 */ { 5, s_2_1, -1, 4, 0}, /* 2 */ { 5, s_2_2, -1, 5, 0}, /* 3 */ { 5, s_2_3, -1, 6, 0}, /* 4 */ { 5, s_2_4, -1, 4, 0}, /* 5 */ { 6, s_2_5, -1, 5, 0}, /* 6 */ { 6, s_2_6, -1, 6, 0}, /* 7 */ { 6, s_2_7, -1, 5, 0}, /* 8 */ { 6, s_2_8, -1, 6, 0}, /* 9 */ { 6, s_2_9, -1, 5, 0}, /* 10 */ { 7, s_2_10, -1, 4, 0}, /* 11 */ { 9, s_2_11, -1, 1, 0}, /* 12 */ { 9, s_2_12, -1, 2, 0}, /* 13 */ { 7, s_2_13, -1, 3, 0}, /* 14 */ { 5, s_2_14, -1, 4, 0}, /* 15 */ { 5, s_2_15, -1, 5, 0}, /* 16 */ { 5, s_2_16, -1, 6, 0}, /* 17 */ { 5, s_2_17, -1, 4, 0}, /* 18 */ { 5, s_2_18, -1, 5, 0}, /* 19 */ { 7, s_2_19, 18, 4, 0}, /* 20 */ { 5, s_2_20, -1, 6, 0}, /* 21 */ { 5, s_2_21, -1, 5, 0}, /* 22 */ { 7, s_2_22, -1, 4, 0}, /* 23 */ { 9, s_2_23, -1, 1, 0}, /* 24 */ { 7, s_2_24, -1, 3, 0}, /* 25 */ { 5, s_2_25, -1, 4, 0}, /* 26 */ { 5, s_2_26, -1, 5, 0}, /* 27 */ { 5, s_2_27, -1, 6, 0}, /* 28 */ { 6, s_2_28, -1, 4, 0}, /* 29 */ { 8, s_2_29, -1, 1, 0}, /* 30 */ { 6, s_2_30, -1, 3, 0}, /* 31 */ { 7, s_2_31, -1, 4, 0}, /* 32 */ { 9, s_2_32, -1, 1, 0}, /* 33 */ { 7, s_2_33, -1, 3, 0}, /* 34 */ { 4, s_2_34, -1, 4, 0}, /* 35 */ { 4, s_2_35, -1, 5, 0}, /* 36 */ { 6, s_2_36, 35, 4, 0}, /* 37 */ { 4, s_2_37, -1, 6, 0}, /* 38 */ { 4, s_2_38, -1, 5, 0}, /* 39 */ { 4, s_2_39, -1, 4, 0}, /* 40 */ { 4, s_2_40, -1, 5, 0}, /* 41 */ { 4, s_2_41, -1, 6, 0}, /* 42 */ { 5, s_2_42, -1, 4, 0}, /* 43 */ { 5, s_2_43, -1, 4, 0}, /* 44 */ { 5, s_2_44, -1, 5, 0}, /* 45 */ { 5, s_2_45, -1, 6, 0} }; static const symbol s_3_0[3] = { 'i', 'c', 'a' }; static const symbol s_3_1[5] = { 'a', 'b', 'i', 'l', 'a' }; static const symbol s_3_2[5] = { 'i', 'b', 'i', 'l', 'a' }; static const symbol s_3_3[4] = { 'o', 'a', 's', 'a' }; static const symbol s_3_4[3] = { 'a', 't', 'a' }; static const symbol s_3_5[3] = { 'i', 't', 'a' }; static const symbol s_3_6[4] = { 'a', 'n', 't', 'a' }; static const symbol s_3_7[4] = { 'i', 's', 't', 'a' }; static const symbol s_3_8[3] = { 'u', 't', 'a' }; static const symbol s_3_9[3] = { 'i', 'v', 'a' }; static const symbol s_3_10[2] = { 'i', 'c' }; static const symbol s_3_11[3] = { 'i', 'c', 'e' }; static const symbol s_3_12[5] = { 'a', 'b', 'i', 'l', 'e' }; static const symbol s_3_13[5] = { 'i', 'b', 'i', 'l', 'e' }; static const symbol s_3_14[4] = { 'i', 's', 'm', 'e' }; static const symbol s_3_15[4] = { 'i', 'u', 'n', 'e' }; static const symbol s_3_16[4] = { 'o', 'a', 's', 'e' }; static const symbol s_3_17[3] = { 'a', 't', 'e' }; static const symbol s_3_18[5] = { 'i', 't', 'a', 't', 'e' }; static const symbol s_3_19[3] = { 'i', 't', 'e' }; static const symbol s_3_20[4] = { 'a', 'n', 't', 'e' }; static const symbol s_3_21[4] = { 'i', 's', 't', 'e' }; static const symbol s_3_22[3] = { 'u', 't', 'e' }; static const symbol s_3_23[3] = { 'i', 'v', 'e' }; static const symbol s_3_24[3] = { 'i', 'c', 'i' }; static const symbol s_3_25[5] = { 'a', 'b', 'i', 'l', 'i' }; static const symbol s_3_26[5] = { 'i', 'b', 'i', 'l', 'i' }; static const symbol s_3_27[4] = { 'i', 'u', 'n', 'i' }; static const symbol s_3_28[5] = { 'a', 't', 'o', 'r', 'i' }; static const symbol s_3_29[3] = { 'o', 's', 'i' }; static const symbol s_3_30[3] = { 'a', 't', 'i' }; static const symbol s_3_31[5] = { 'i', 't', 'a', 't', 'i' }; static const symbol s_3_32[3] = { 'i', 't', 'i' }; static const symbol s_3_33[4] = { 'a', 'n', 't', 'i' }; static const symbol s_3_34[4] = { 'i', 's', 't', 'i' }; static const symbol s_3_35[3] = { 'u', 't', 'i' }; static const symbol s_3_36[4] = { 'i', 0xBA, 't', 'i' }; static const symbol s_3_37[3] = { 'i', 'v', 'i' }; static const symbol s_3_38[3] = { 'o', 0xBA, 'i' }; static const symbol s_3_39[4] = { 'i', 't', 0xE3, 'i' }; static const symbol s_3_40[5] = { 'i', 't', 0xE3, 0xFE, 'i' }; static const symbol s_3_41[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_3_42[4] = { 'i', 'b', 'i', 'l' }; static const symbol s_3_43[3] = { 'i', 's', 'm' }; static const symbol s_3_44[4] = { 'a', 't', 'o', 'r' }; static const symbol s_3_45[2] = { 'o', 's' }; static const symbol s_3_46[2] = { 'a', 't' }; static const symbol s_3_47[2] = { 'i', 't' }; static const symbol s_3_48[3] = { 'a', 'n', 't' }; static const symbol s_3_49[3] = { 'i', 's', 't' }; static const symbol s_3_50[2] = { 'u', 't' }; static const symbol s_3_51[2] = { 'i', 'v' }; static const symbol s_3_52[3] = { 'i', 'c', 0xE3 }; static const symbol s_3_53[5] = { 'a', 'b', 'i', 'l', 0xE3 }; static const symbol s_3_54[5] = { 'i', 'b', 'i', 'l', 0xE3 }; static const symbol s_3_55[4] = { 'o', 'a', 's', 0xE3 }; static const symbol s_3_56[3] = { 'a', 't', 0xE3 }; static const symbol s_3_57[3] = { 'i', 't', 0xE3 }; static const symbol s_3_58[4] = { 'a', 'n', 't', 0xE3 }; static const symbol s_3_59[4] = { 'i', 's', 't', 0xE3 }; static const symbol s_3_60[3] = { 'u', 't', 0xE3 }; static const symbol s_3_61[3] = { 'i', 'v', 0xE3 }; static const struct among a_3[62] = { /* 0 */ { 3, s_3_0, -1, 1, 0}, /* 1 */ { 5, s_3_1, -1, 1, 0}, /* 2 */ { 5, s_3_2, -1, 1, 0}, /* 3 */ { 4, s_3_3, -1, 1, 0}, /* 4 */ { 3, s_3_4, -1, 1, 0}, /* 5 */ { 3, s_3_5, -1, 1, 0}, /* 6 */ { 4, s_3_6, -1, 1, 0}, /* 7 */ { 4, s_3_7, -1, 3, 0}, /* 8 */ { 3, s_3_8, -1, 1, 0}, /* 9 */ { 3, s_3_9, -1, 1, 0}, /* 10 */ { 2, s_3_10, -1, 1, 0}, /* 11 */ { 3, s_3_11, -1, 1, 0}, /* 12 */ { 5, s_3_12, -1, 1, 0}, /* 13 */ { 5, s_3_13, -1, 1, 0}, /* 14 */ { 4, s_3_14, -1, 3, 0}, /* 15 */ { 4, s_3_15, -1, 2, 0}, /* 16 */ { 4, s_3_16, -1, 1, 0}, /* 17 */ { 3, s_3_17, -1, 1, 0}, /* 18 */ { 5, s_3_18, 17, 1, 0}, /* 19 */ { 3, s_3_19, -1, 1, 0}, /* 20 */ { 4, s_3_20, -1, 1, 0}, /* 21 */ { 4, s_3_21, -1, 3, 0}, /* 22 */ { 3, s_3_22, -1, 1, 0}, /* 23 */ { 3, s_3_23, -1, 1, 0}, /* 24 */ { 3, s_3_24, -1, 1, 0}, /* 25 */ { 5, s_3_25, -1, 1, 0}, /* 26 */ { 5, s_3_26, -1, 1, 0}, /* 27 */ { 4, s_3_27, -1, 2, 0}, /* 28 */ { 5, s_3_28, -1, 1, 0}, /* 29 */ { 3, s_3_29, -1, 1, 0}, /* 30 */ { 3, s_3_30, -1, 1, 0}, /* 31 */ { 5, s_3_31, 30, 1, 0}, /* 32 */ { 3, s_3_32, -1, 1, 0}, /* 33 */ { 4, s_3_33, -1, 1, 0}, /* 34 */ { 4, s_3_34, -1, 3, 0}, /* 35 */ { 3, s_3_35, -1, 1, 0}, /* 36 */ { 4, s_3_36, -1, 3, 0}, /* 37 */ { 3, s_3_37, -1, 1, 0}, /* 38 */ { 3, s_3_38, -1, 1, 0}, /* 39 */ { 4, s_3_39, -1, 1, 0}, /* 40 */ { 5, s_3_40, -1, 1, 0}, /* 41 */ { 4, s_3_41, -1, 1, 0}, /* 42 */ { 4, s_3_42, -1, 1, 0}, /* 43 */ { 3, s_3_43, -1, 3, 0}, /* 44 */ { 4, s_3_44, -1, 1, 0}, /* 45 */ { 2, s_3_45, -1, 1, 0}, /* 46 */ { 2, s_3_46, -1, 1, 0}, /* 47 */ { 2, s_3_47, -1, 1, 0}, /* 48 */ { 3, s_3_48, -1, 1, 0}, /* 49 */ { 3, s_3_49, -1, 3, 0}, /* 50 */ { 2, s_3_50, -1, 1, 0}, /* 51 */ { 2, s_3_51, -1, 1, 0}, /* 52 */ { 3, s_3_52, -1, 1, 0}, /* 53 */ { 5, s_3_53, -1, 1, 0}, /* 54 */ { 5, s_3_54, -1, 1, 0}, /* 55 */ { 4, s_3_55, -1, 1, 0}, /* 56 */ { 3, s_3_56, -1, 1, 0}, /* 57 */ { 3, s_3_57, -1, 1, 0}, /* 58 */ { 4, s_3_58, -1, 1, 0}, /* 59 */ { 4, s_3_59, -1, 3, 0}, /* 60 */ { 3, s_3_60, -1, 1, 0}, /* 61 */ { 3, s_3_61, -1, 1, 0} }; static const symbol s_4_0[2] = { 'e', 'a' }; static const symbol s_4_1[2] = { 'i', 'a' }; static const symbol s_4_2[3] = { 'e', 's', 'c' }; static const symbol s_4_3[3] = { 0xE3, 's', 'c' }; static const symbol s_4_4[3] = { 'i', 'n', 'd' }; static const symbol s_4_5[3] = { 0xE2, 'n', 'd' }; static const symbol s_4_6[3] = { 'a', 'r', 'e' }; static const symbol s_4_7[3] = { 'e', 'r', 'e' }; static const symbol s_4_8[3] = { 'i', 'r', 'e' }; static const symbol s_4_9[3] = { 0xE2, 'r', 'e' }; static const symbol s_4_10[2] = { 's', 'e' }; static const symbol s_4_11[3] = { 'a', 's', 'e' }; static const symbol s_4_12[4] = { 's', 'e', 's', 'e' }; static const symbol s_4_13[3] = { 'i', 's', 'e' }; static const symbol s_4_14[3] = { 'u', 's', 'e' }; static const symbol s_4_15[3] = { 0xE2, 's', 'e' }; static const symbol s_4_16[4] = { 'e', 0xBA, 't', 'e' }; static const symbol s_4_17[4] = { 0xE3, 0xBA, 't', 'e' }; static const symbol s_4_18[3] = { 'e', 'z', 'e' }; static const symbol s_4_19[2] = { 'a', 'i' }; static const symbol s_4_20[3] = { 'e', 'a', 'i' }; static const symbol s_4_21[3] = { 'i', 'a', 'i' }; static const symbol s_4_22[3] = { 's', 'e', 'i' }; static const symbol s_4_23[4] = { 'e', 0xBA, 't', 'i' }; static const symbol s_4_24[4] = { 0xE3, 0xBA, 't', 'i' }; static const symbol s_4_25[2] = { 'u', 'i' }; static const symbol s_4_26[3] = { 'e', 'z', 'i' }; static const symbol s_4_27[3] = { 'a', 0xBA, 'i' }; static const symbol s_4_28[4] = { 's', 'e', 0xBA, 'i' }; static const symbol s_4_29[5] = { 'a', 's', 'e', 0xBA, 'i' }; static const symbol s_4_30[6] = { 's', 'e', 's', 'e', 0xBA, 'i' }; static const symbol s_4_31[5] = { 'i', 's', 'e', 0xBA, 'i' }; static const symbol s_4_32[5] = { 'u', 's', 'e', 0xBA, 'i' }; static const symbol s_4_33[5] = { 0xE2, 's', 'e', 0xBA, 'i' }; static const symbol s_4_34[3] = { 'i', 0xBA, 'i' }; static const symbol s_4_35[3] = { 'u', 0xBA, 'i' }; static const symbol s_4_36[3] = { 0xE2, 0xBA, 'i' }; static const symbol s_4_37[2] = { 0xE2, 'i' }; static const symbol s_4_38[3] = { 'a', 0xFE, 'i' }; static const symbol s_4_39[4] = { 'e', 'a', 0xFE, 'i' }; static const symbol s_4_40[4] = { 'i', 'a', 0xFE, 'i' }; static const symbol s_4_41[3] = { 'e', 0xFE, 'i' }; static const symbol s_4_42[3] = { 'i', 0xFE, 'i' }; static const symbol s_4_43[3] = { 0xE2, 0xFE, 'i' }; static const symbol s_4_44[5] = { 'a', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_45[6] = { 's', 'e', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_46[7] = { 'a', 's', 'e', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_47[8] = { 's', 'e', 's', 'e', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_48[7] = { 'i', 's', 'e', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_49[7] = { 'u', 's', 'e', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_50[7] = { 0xE2, 's', 'e', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_51[5] = { 'i', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_52[5] = { 'u', 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_53[5] = { 0xE2, 'r', 0xE3, 0xFE, 'i' }; static const symbol s_4_54[2] = { 'a', 'm' }; static const symbol s_4_55[3] = { 'e', 'a', 'm' }; static const symbol s_4_56[3] = { 'i', 'a', 'm' }; static const symbol s_4_57[2] = { 'e', 'm' }; static const symbol s_4_58[4] = { 'a', 's', 'e', 'm' }; static const symbol s_4_59[5] = { 's', 'e', 's', 'e', 'm' }; static const symbol s_4_60[4] = { 'i', 's', 'e', 'm' }; static const symbol s_4_61[4] = { 'u', 's', 'e', 'm' }; static const symbol s_4_62[4] = { 0xE2, 's', 'e', 'm' }; static const symbol s_4_63[2] = { 'i', 'm' }; static const symbol s_4_64[2] = { 0xE2, 'm' }; static const symbol s_4_65[2] = { 0xE3, 'm' }; static const symbol s_4_66[4] = { 'a', 'r', 0xE3, 'm' }; static const symbol s_4_67[5] = { 's', 'e', 'r', 0xE3, 'm' }; static const symbol s_4_68[6] = { 'a', 's', 'e', 'r', 0xE3, 'm' }; static const symbol s_4_69[7] = { 's', 'e', 's', 'e', 'r', 0xE3, 'm' }; static const symbol s_4_70[6] = { 'i', 's', 'e', 'r', 0xE3, 'm' }; static const symbol s_4_71[6] = { 'u', 's', 'e', 'r', 0xE3, 'm' }; static const symbol s_4_72[6] = { 0xE2, 's', 'e', 'r', 0xE3, 'm' }; static const symbol s_4_73[4] = { 'i', 'r', 0xE3, 'm' }; static const symbol s_4_74[4] = { 'u', 'r', 0xE3, 'm' }; static const symbol s_4_75[4] = { 0xE2, 'r', 0xE3, 'm' }; static const symbol s_4_76[2] = { 'a', 'u' }; static const symbol s_4_77[3] = { 'e', 'a', 'u' }; static const symbol s_4_78[3] = { 'i', 'a', 'u' }; static const symbol s_4_79[4] = { 'i', 'n', 'd', 'u' }; static const symbol s_4_80[4] = { 0xE2, 'n', 'd', 'u' }; static const symbol s_4_81[2] = { 'e', 'z' }; static const symbol s_4_82[5] = { 'e', 'a', 's', 'c', 0xE3 }; static const symbol s_4_83[3] = { 'a', 'r', 0xE3 }; static const symbol s_4_84[4] = { 's', 'e', 'r', 0xE3 }; static const symbol s_4_85[5] = { 'a', 's', 'e', 'r', 0xE3 }; static const symbol s_4_86[6] = { 's', 'e', 's', 'e', 'r', 0xE3 }; static const symbol s_4_87[5] = { 'i', 's', 'e', 'r', 0xE3 }; static const symbol s_4_88[5] = { 'u', 's', 'e', 'r', 0xE3 }; static const symbol s_4_89[5] = { 0xE2, 's', 'e', 'r', 0xE3 }; static const symbol s_4_90[3] = { 'i', 'r', 0xE3 }; static const symbol s_4_91[3] = { 'u', 'r', 0xE3 }; static const symbol s_4_92[3] = { 0xE2, 'r', 0xE3 }; static const symbol s_4_93[4] = { 'e', 'a', 'z', 0xE3 }; static const struct among a_4[94] = { /* 0 */ { 2, s_4_0, -1, 1, 0}, /* 1 */ { 2, s_4_1, -1, 1, 0}, /* 2 */ { 3, s_4_2, -1, 1, 0}, /* 3 */ { 3, s_4_3, -1, 1, 0}, /* 4 */ { 3, s_4_4, -1, 1, 0}, /* 5 */ { 3, s_4_5, -1, 1, 0}, /* 6 */ { 3, s_4_6, -1, 1, 0}, /* 7 */ { 3, s_4_7, -1, 1, 0}, /* 8 */ { 3, s_4_8, -1, 1, 0}, /* 9 */ { 3, s_4_9, -1, 1, 0}, /* 10 */ { 2, s_4_10, -1, 2, 0}, /* 11 */ { 3, s_4_11, 10, 1, 0}, /* 12 */ { 4, s_4_12, 10, 2, 0}, /* 13 */ { 3, s_4_13, 10, 1, 0}, /* 14 */ { 3, s_4_14, 10, 1, 0}, /* 15 */ { 3, s_4_15, 10, 1, 0}, /* 16 */ { 4, s_4_16, -1, 1, 0}, /* 17 */ { 4, s_4_17, -1, 1, 0}, /* 18 */ { 3, s_4_18, -1, 1, 0}, /* 19 */ { 2, s_4_19, -1, 1, 0}, /* 20 */ { 3, s_4_20, 19, 1, 0}, /* 21 */ { 3, s_4_21, 19, 1, 0}, /* 22 */ { 3, s_4_22, -1, 2, 0}, /* 23 */ { 4, s_4_23, -1, 1, 0}, /* 24 */ { 4, s_4_24, -1, 1, 0}, /* 25 */ { 2, s_4_25, -1, 1, 0}, /* 26 */ { 3, s_4_26, -1, 1, 0}, /* 27 */ { 3, s_4_27, -1, 1, 0}, /* 28 */ { 4, s_4_28, -1, 2, 0}, /* 29 */ { 5, s_4_29, 28, 1, 0}, /* 30 */ { 6, s_4_30, 28, 2, 0}, /* 31 */ { 5, s_4_31, 28, 1, 0}, /* 32 */ { 5, s_4_32, 28, 1, 0}, /* 33 */ { 5, s_4_33, 28, 1, 0}, /* 34 */ { 3, s_4_34, -1, 1, 0}, /* 35 */ { 3, s_4_35, -1, 1, 0}, /* 36 */ { 3, s_4_36, -1, 1, 0}, /* 37 */ { 2, s_4_37, -1, 1, 0}, /* 38 */ { 3, s_4_38, -1, 2, 0}, /* 39 */ { 4, s_4_39, 38, 1, 0}, /* 40 */ { 4, s_4_40, 38, 1, 0}, /* 41 */ { 3, s_4_41, -1, 2, 0}, /* 42 */ { 3, s_4_42, -1, 2, 0}, /* 43 */ { 3, s_4_43, -1, 2, 0}, /* 44 */ { 5, s_4_44, -1, 1, 0}, /* 45 */ { 6, s_4_45, -1, 2, 0}, /* 46 */ { 7, s_4_46, 45, 1, 0}, /* 47 */ { 8, s_4_47, 45, 2, 0}, /* 48 */ { 7, s_4_48, 45, 1, 0}, /* 49 */ { 7, s_4_49, 45, 1, 0}, /* 50 */ { 7, s_4_50, 45, 1, 0}, /* 51 */ { 5, s_4_51, -1, 1, 0}, /* 52 */ { 5, s_4_52, -1, 1, 0}, /* 53 */ { 5, s_4_53, -1, 1, 0}, /* 54 */ { 2, s_4_54, -1, 1, 0}, /* 55 */ { 3, s_4_55, 54, 1, 0}, /* 56 */ { 3, s_4_56, 54, 1, 0}, /* 57 */ { 2, s_4_57, -1, 2, 0}, /* 58 */ { 4, s_4_58, 57, 1, 0}, /* 59 */ { 5, s_4_59, 57, 2, 0}, /* 60 */ { 4, s_4_60, 57, 1, 0}, /* 61 */ { 4, s_4_61, 57, 1, 0}, /* 62 */ { 4, s_4_62, 57, 1, 0}, /* 63 */ { 2, s_4_63, -1, 2, 0}, /* 64 */ { 2, s_4_64, -1, 2, 0}, /* 65 */ { 2, s_4_65, -1, 2, 0}, /* 66 */ { 4, s_4_66, 65, 1, 0}, /* 67 */ { 5, s_4_67, 65, 2, 0}, /* 68 */ { 6, s_4_68, 67, 1, 0}, /* 69 */ { 7, s_4_69, 67, 2, 0}, /* 70 */ { 6, s_4_70, 67, 1, 0}, /* 71 */ { 6, s_4_71, 67, 1, 0}, /* 72 */ { 6, s_4_72, 67, 1, 0}, /* 73 */ { 4, s_4_73, 65, 1, 0}, /* 74 */ { 4, s_4_74, 65, 1, 0}, /* 75 */ { 4, s_4_75, 65, 1, 0}, /* 76 */ { 2, s_4_76, -1, 1, 0}, /* 77 */ { 3, s_4_77, 76, 1, 0}, /* 78 */ { 3, s_4_78, 76, 1, 0}, /* 79 */ { 4, s_4_79, -1, 1, 0}, /* 80 */ { 4, s_4_80, -1, 1, 0}, /* 81 */ { 2, s_4_81, -1, 1, 0}, /* 82 */ { 5, s_4_82, -1, 1, 0}, /* 83 */ { 3, s_4_83, -1, 1, 0}, /* 84 */ { 4, s_4_84, -1, 2, 0}, /* 85 */ { 5, s_4_85, 84, 1, 0}, /* 86 */ { 6, s_4_86, 84, 2, 0}, /* 87 */ { 5, s_4_87, 84, 1, 0}, /* 88 */ { 5, s_4_88, 84, 1, 0}, /* 89 */ { 5, s_4_89, 84, 1, 0}, /* 90 */ { 3, s_4_90, -1, 1, 0}, /* 91 */ { 3, s_4_91, -1, 1, 0}, /* 92 */ { 3, s_4_92, -1, 1, 0}, /* 93 */ { 4, s_4_93, -1, 1, 0} }; static const symbol s_5_0[1] = { 'a' }; static const symbol s_5_1[1] = { 'e' }; static const symbol s_5_2[2] = { 'i', 'e' }; static const symbol s_5_3[1] = { 'i' }; static const symbol s_5_4[1] = { 0xE3 }; static const struct among a_5[5] = { /* 0 */ { 1, s_5_0, -1, 1, 0}, /* 1 */ { 1, s_5_1, -1, 1, 0}, /* 2 */ { 2, s_5_2, 1, 1, 0}, /* 3 */ { 1, s_5_3, -1, 1, 0}, /* 4 */ { 1, s_5_4, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 32 }; static const symbol s_0[] = { 'U' }; static const symbol s_1[] = { 'I' }; static const symbol s_2[] = { 'i' }; static const symbol s_3[] = { 'u' }; static const symbol s_4[] = { 'a' }; static const symbol s_5[] = { 'e' }; static const symbol s_6[] = { 'i' }; static const symbol s_7[] = { 'a', 'b' }; static const symbol s_8[] = { 'i' }; static const symbol s_9[] = { 'a', 't' }; static const symbol s_10[] = { 'a', 0xFE, 'i' }; static const symbol s_11[] = { 'a', 'b', 'i', 'l' }; static const symbol s_12[] = { 'i', 'b', 'i', 'l' }; static const symbol s_13[] = { 'i', 'v' }; static const symbol s_14[] = { 'i', 'c' }; static const symbol s_15[] = { 'a', 't' }; static const symbol s_16[] = { 'i', 't' }; static const symbol s_17[] = { 't' }; static const symbol s_18[] = { 'i', 's', 't' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ while(1) { /* repeat, line 32 */ int c1 = z->c; while(1) { /* goto, line 32 */ int c2 = z->c; if (in_grouping(z, g_v, 97, 238, 0)) goto lab1; /* grouping v, line 33 */ z->bra = z->c; /* [, line 33 */ { int c3 = z->c; /* or, line 33 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab3; /* literal, line 33 */ z->c++; z->ket = z->c; /* ], line 33 */ if (in_grouping(z, g_v, 97, 238, 0)) goto lab3; /* grouping v, line 33 */ { int ret = slice_from_s(z, 1, s_0); /* <-, line 33 */ if (ret < 0) return ret; } goto lab2; lab3: z->c = c3; if (z->c == z->l || z->p[z->c] != 'i') goto lab1; /* literal, line 34 */ z->c++; z->ket = z->c; /* ], line 34 */ if (in_grouping(z, g_v, 97, 238, 0)) goto lab1; /* grouping v, line 34 */ { int ret = slice_from_s(z, 1, s_1); /* <-, line 34 */ if (ret < 0) return ret; } } lab2: z->c = c2; break; lab1: z->c = c2; if (z->c >= z->l) goto lab0; z->c++; /* goto, line 32 */ } continue; lab0: z->c = c1; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 40 */ z->I[1] = z->l; /* $p1 = , line 41 */ z->I[2] = z->l; /* $p2 = , line 42 */ { int c1 = z->c; /* do, line 44 */ { int c2 = z->c; /* or, line 46 */ if (in_grouping(z, g_v, 97, 238, 0)) goto lab2; /* grouping v, line 45 */ { int c3 = z->c; /* or, line 45 */ if (out_grouping(z, g_v, 97, 238, 0)) goto lab4; /* non v, line 45 */ { /* gopast */ /* grouping v, line 45 */ int ret = out_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping(z, g_v, 97, 238, 0)) goto lab2; /* grouping v, line 45 */ { /* gopast */ /* non v, line 45 */ int ret = in_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping(z, g_v, 97, 238, 0)) goto lab0; /* non v, line 47 */ { int c4 = z->c; /* or, line 47 */ if (out_grouping(z, g_v, 97, 238, 0)) goto lab6; /* non v, line 47 */ { /* gopast */ /* grouping v, line 47 */ int ret = out_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping(z, g_v, 97, 238, 0)) goto lab0; /* grouping v, line 47 */ if (z->c >= z->l) goto lab0; z->c++; /* next, line 47 */ } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 48 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 50 */ { /* gopast */ /* grouping v, line 51 */ int ret = out_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 51 */ int ret = in_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 51 */ { /* gopast */ /* grouping v, line 52 */ int ret = out_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 52 */ int ret = in_grouping(z, g_v, 97, 238, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 52 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 56 */ int c1 = z->c; z->bra = z->c; /* [, line 58 */ if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else /* substring, line 58 */ among_var = find_among(z, a_0, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 58 */ switch (among_var) { /* among, line 58 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_2); /* <-, line 59 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_3); /* <-, line 60 */ if (ret < 0) return ret; } break; case 3: if (z->c >= z->l) goto lab0; z->c++; /* next, line 61 */ break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 68 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 69 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 70 */ return 1; } static int r_step_0(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 73 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((266786 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 73 */ among_var = find_among_b(z, a_1, 16); if (!(among_var)) return 0; z->bra = z->c; /* ], line 73 */ { int ret = r_R1(z); /* call R1, line 73 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 73 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 75 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_4); /* <-, line 77 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_5); /* <-, line 79 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_6); /* <-, line 81 */ if (ret < 0) return ret; } break; case 5: { int m1 = z->l - z->c; (void)m1; /* not, line 83 */ if (!(eq_s_b(z, 2, s_7))) goto lab0; /* literal, line 83 */ return 0; lab0: z->c = z->l - m1; } { int ret = slice_from_s(z, 1, s_8); /* <-, line 83 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 2, s_9); /* <-, line 85 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_10); /* <-, line 87 */ if (ret < 0) return ret; } break; } return 1; } static int r_combo_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m_test1 = z->l - z->c; /* test, line 91 */ z->ket = z->c; /* [, line 92 */ among_var = find_among_b(z, a_2, 46); /* substring, line 92 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ { int ret = r_R1(z); /* call R1, line 92 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 93 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_11); /* <-, line 101 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_12); /* <-, line 104 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_13); /* <-, line 107 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 2, s_14); /* <-, line 113 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 2, s_15); /* <-, line 118 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 2, s_16); /* <-, line 122 */ if (ret < 0) return ret; } break; } z->B[0] = 1; /* set standard_suffix_removed, line 125 */ z->c = z->l - m_test1; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->B[0] = 0; /* unset standard_suffix_removed, line 130 */ while(1) { /* repeat, line 131 */ int m1 = z->l - z->c; (void)m1; { int ret = r_combo_suffix(z); /* call combo_suffix, line 131 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } continue; lab0: z->c = z->l - m1; break; } z->ket = z->c; /* [, line 132 */ among_var = find_among_b(z, a_3, 62); /* substring, line 132 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 132 */ { int ret = r_R2(z); /* call R2, line 132 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 133 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 149 */ if (ret < 0) return ret; } break; case 2: if (z->c <= z->lb || z->p[z->c - 1] != 0xFE) return 0; /* literal, line 152 */ z->c--; z->bra = z->c; /* ], line 152 */ { int ret = slice_from_s(z, 1, s_17); /* <-, line 152 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 3, s_18); /* <-, line 156 */ if (ret < 0) return ret; } break; } z->B[0] = 1; /* set standard_suffix_removed, line 160 */ return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 164 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 164 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 165 */ among_var = find_among_b(z, a_4, 94); /* substring, line 165 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 165 */ switch (among_var) { /* among, line 165 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int m2 = z->l - z->c; (void)m2; /* or, line 200 */ if (out_grouping_b(z, g_v, 97, 238, 0)) goto lab1; /* non v, line 200 */ goto lab0; lab1: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'u') { z->lb = mlimit1; return 0; } /* literal, line 200 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 200 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 214 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_vowel_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 219 */ among_var = find_among_b(z, a_5, 5); /* substring, line 219 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 219 */ { int ret = r_RV(z); /* call RV, line 219 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 219 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 220 */ if (ret < 0) return ret; } break; } return 1; } extern int romanian_ISO_8859_2_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 226 */ { int ret = r_prelude(z); /* call prelude, line 226 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 227 */ { int ret = r_mark_regions(z); /* call mark_regions, line 227 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 228 */ { int m3 = z->l - z->c; (void)m3; /* do, line 229 */ { int ret = r_step_0(z); /* call step_0, line 229 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 230 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 230 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 231 */ { int m6 = z->l - z->c; (void)m6; /* or, line 231 */ if (!(z->B[0])) goto lab6; /* Boolean test standard_suffix_removed, line 231 */ goto lab5; lab6: z->c = z->l - m6; { int ret = r_verb_suffix(z); /* call verb_suffix, line 231 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: lab4: z->c = z->l - m5; } { int m7 = z->l - z->c; (void)m7; /* do, line 232 */ { int ret = r_vowel_suffix(z); /* call vowel_suffix, line 232 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m7; } z->c = z->lb; { int c8 = z->c; /* do, line 234 */ { int ret = r_postlude(z); /* call postlude, line 234 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = c8; } return 1; } extern struct SN_env * romanian_ISO_8859_2_create_env(void) { return SN_create_env(0, 3, 1); } extern void romanian_ISO_8859_2_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_ISO_8859_2_romanian.h000066400000000000000000000005501364126773500244510ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * romanian_ISO_8859_2_create_env(void); extern void romanian_ISO_8859_2_close_env(struct SN_env * z); extern int romanian_ISO_8859_2_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_KOI8_R_russian.c000066400000000000000000000605011364126773500237510ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int russian_KOI8_R_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_tidy_up(struct SN_env * z); static int r_derivational(struct SN_env * z); static int r_noun(struct SN_env * z); static int r_verb(struct SN_env * z); static int r_reflexive(struct SN_env * z); static int r_adjectival(struct SN_env * z); static int r_adjective(struct SN_env * z); static int r_perfective_gerund(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * russian_KOI8_R_create_env(void); extern void russian_KOI8_R_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[3] = { 0xD7, 0xDB, 0xC9 }; static const symbol s_0_1[4] = { 0xC9, 0xD7, 0xDB, 0xC9 }; static const symbol s_0_2[4] = { 0xD9, 0xD7, 0xDB, 0xC9 }; static const symbol s_0_3[1] = { 0xD7 }; static const symbol s_0_4[2] = { 0xC9, 0xD7 }; static const symbol s_0_5[2] = { 0xD9, 0xD7 }; static const symbol s_0_6[5] = { 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; static const symbol s_0_7[6] = { 0xC9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; static const symbol s_0_8[6] = { 0xD9, 0xD7, 0xDB, 0xC9, 0xD3, 0xD8 }; static const struct among a_0[9] = { /* 0 */ { 3, s_0_0, -1, 1, 0}, /* 1 */ { 4, s_0_1, 0, 2, 0}, /* 2 */ { 4, s_0_2, 0, 2, 0}, /* 3 */ { 1, s_0_3, -1, 1, 0}, /* 4 */ { 2, s_0_4, 3, 2, 0}, /* 5 */ { 2, s_0_5, 3, 2, 0}, /* 6 */ { 5, s_0_6, -1, 1, 0}, /* 7 */ { 6, s_0_7, 6, 2, 0}, /* 8 */ { 6, s_0_8, 6, 2, 0} }; static const symbol s_1_0[2] = { 0xC0, 0xC0 }; static const symbol s_1_1[2] = { 0xC5, 0xC0 }; static const symbol s_1_2[2] = { 0xCF, 0xC0 }; static const symbol s_1_3[2] = { 0xD5, 0xC0 }; static const symbol s_1_4[2] = { 0xC5, 0xC5 }; static const symbol s_1_5[2] = { 0xC9, 0xC5 }; static const symbol s_1_6[2] = { 0xCF, 0xC5 }; static const symbol s_1_7[2] = { 0xD9, 0xC5 }; static const symbol s_1_8[2] = { 0xC9, 0xC8 }; static const symbol s_1_9[2] = { 0xD9, 0xC8 }; static const symbol s_1_10[3] = { 0xC9, 0xCD, 0xC9 }; static const symbol s_1_11[3] = { 0xD9, 0xCD, 0xC9 }; static const symbol s_1_12[2] = { 0xC5, 0xCA }; static const symbol s_1_13[2] = { 0xC9, 0xCA }; static const symbol s_1_14[2] = { 0xCF, 0xCA }; static const symbol s_1_15[2] = { 0xD9, 0xCA }; static const symbol s_1_16[2] = { 0xC5, 0xCD }; static const symbol s_1_17[2] = { 0xC9, 0xCD }; static const symbol s_1_18[2] = { 0xCF, 0xCD }; static const symbol s_1_19[2] = { 0xD9, 0xCD }; static const symbol s_1_20[3] = { 0xC5, 0xC7, 0xCF }; static const symbol s_1_21[3] = { 0xCF, 0xC7, 0xCF }; static const symbol s_1_22[2] = { 0xC1, 0xD1 }; static const symbol s_1_23[2] = { 0xD1, 0xD1 }; static const symbol s_1_24[3] = { 0xC5, 0xCD, 0xD5 }; static const symbol s_1_25[3] = { 0xCF, 0xCD, 0xD5 }; static const struct among a_1[26] = { /* 0 */ { 2, s_1_0, -1, 1, 0}, /* 1 */ { 2, s_1_1, -1, 1, 0}, /* 2 */ { 2, s_1_2, -1, 1, 0}, /* 3 */ { 2, s_1_3, -1, 1, 0}, /* 4 */ { 2, s_1_4, -1, 1, 0}, /* 5 */ { 2, s_1_5, -1, 1, 0}, /* 6 */ { 2, s_1_6, -1, 1, 0}, /* 7 */ { 2, s_1_7, -1, 1, 0}, /* 8 */ { 2, s_1_8, -1, 1, 0}, /* 9 */ { 2, s_1_9, -1, 1, 0}, /* 10 */ { 3, s_1_10, -1, 1, 0}, /* 11 */ { 3, s_1_11, -1, 1, 0}, /* 12 */ { 2, s_1_12, -1, 1, 0}, /* 13 */ { 2, s_1_13, -1, 1, 0}, /* 14 */ { 2, s_1_14, -1, 1, 0}, /* 15 */ { 2, s_1_15, -1, 1, 0}, /* 16 */ { 2, s_1_16, -1, 1, 0}, /* 17 */ { 2, s_1_17, -1, 1, 0}, /* 18 */ { 2, s_1_18, -1, 1, 0}, /* 19 */ { 2, s_1_19, -1, 1, 0}, /* 20 */ { 3, s_1_20, -1, 1, 0}, /* 21 */ { 3, s_1_21, -1, 1, 0}, /* 22 */ { 2, s_1_22, -1, 1, 0}, /* 23 */ { 2, s_1_23, -1, 1, 0}, /* 24 */ { 3, s_1_24, -1, 1, 0}, /* 25 */ { 3, s_1_25, -1, 1, 0} }; static const symbol s_2_0[2] = { 0xC5, 0xCD }; static const symbol s_2_1[2] = { 0xCE, 0xCE }; static const symbol s_2_2[2] = { 0xD7, 0xDB }; static const symbol s_2_3[3] = { 0xC9, 0xD7, 0xDB }; static const symbol s_2_4[3] = { 0xD9, 0xD7, 0xDB }; static const symbol s_2_5[1] = { 0xDD }; static const symbol s_2_6[2] = { 0xC0, 0xDD }; static const symbol s_2_7[3] = { 0xD5, 0xC0, 0xDD }; static const struct among a_2[8] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 2, s_2_1, -1, 1, 0}, /* 2 */ { 2, s_2_2, -1, 1, 0}, /* 3 */ { 3, s_2_3, 2, 2, 0}, /* 4 */ { 3, s_2_4, 2, 2, 0}, /* 5 */ { 1, s_2_5, -1, 1, 0}, /* 6 */ { 2, s_2_6, 5, 1, 0}, /* 7 */ { 3, s_2_7, 6, 2, 0} }; static const symbol s_3_0[2] = { 0xD3, 0xD1 }; static const symbol s_3_1[2] = { 0xD3, 0xD8 }; static const struct among a_3[2] = { /* 0 */ { 2, s_3_0, -1, 1, 0}, /* 1 */ { 2, s_3_1, -1, 1, 0} }; static const symbol s_4_0[1] = { 0xC0 }; static const symbol s_4_1[2] = { 0xD5, 0xC0 }; static const symbol s_4_2[2] = { 0xCC, 0xC1 }; static const symbol s_4_3[3] = { 0xC9, 0xCC, 0xC1 }; static const symbol s_4_4[3] = { 0xD9, 0xCC, 0xC1 }; static const symbol s_4_5[2] = { 0xCE, 0xC1 }; static const symbol s_4_6[3] = { 0xC5, 0xCE, 0xC1 }; static const symbol s_4_7[3] = { 0xC5, 0xD4, 0xC5 }; static const symbol s_4_8[3] = { 0xC9, 0xD4, 0xC5 }; static const symbol s_4_9[3] = { 0xCA, 0xD4, 0xC5 }; static const symbol s_4_10[4] = { 0xC5, 0xCA, 0xD4, 0xC5 }; static const symbol s_4_11[4] = { 0xD5, 0xCA, 0xD4, 0xC5 }; static const symbol s_4_12[2] = { 0xCC, 0xC9 }; static const symbol s_4_13[3] = { 0xC9, 0xCC, 0xC9 }; static const symbol s_4_14[3] = { 0xD9, 0xCC, 0xC9 }; static const symbol s_4_15[1] = { 0xCA }; static const symbol s_4_16[2] = { 0xC5, 0xCA }; static const symbol s_4_17[2] = { 0xD5, 0xCA }; static const symbol s_4_18[1] = { 0xCC }; static const symbol s_4_19[2] = { 0xC9, 0xCC }; static const symbol s_4_20[2] = { 0xD9, 0xCC }; static const symbol s_4_21[2] = { 0xC5, 0xCD }; static const symbol s_4_22[2] = { 0xC9, 0xCD }; static const symbol s_4_23[2] = { 0xD9, 0xCD }; static const symbol s_4_24[1] = { 0xCE }; static const symbol s_4_25[2] = { 0xC5, 0xCE }; static const symbol s_4_26[2] = { 0xCC, 0xCF }; static const symbol s_4_27[3] = { 0xC9, 0xCC, 0xCF }; static const symbol s_4_28[3] = { 0xD9, 0xCC, 0xCF }; static const symbol s_4_29[2] = { 0xCE, 0xCF }; static const symbol s_4_30[3] = { 0xC5, 0xCE, 0xCF }; static const symbol s_4_31[3] = { 0xCE, 0xCE, 0xCF }; static const symbol s_4_32[2] = { 0xC0, 0xD4 }; static const symbol s_4_33[3] = { 0xD5, 0xC0, 0xD4 }; static const symbol s_4_34[2] = { 0xC5, 0xD4 }; static const symbol s_4_35[3] = { 0xD5, 0xC5, 0xD4 }; static const symbol s_4_36[2] = { 0xC9, 0xD4 }; static const symbol s_4_37[2] = { 0xD1, 0xD4 }; static const symbol s_4_38[2] = { 0xD9, 0xD4 }; static const symbol s_4_39[2] = { 0xD4, 0xD8 }; static const symbol s_4_40[3] = { 0xC9, 0xD4, 0xD8 }; static const symbol s_4_41[3] = { 0xD9, 0xD4, 0xD8 }; static const symbol s_4_42[3] = { 0xC5, 0xDB, 0xD8 }; static const symbol s_4_43[3] = { 0xC9, 0xDB, 0xD8 }; static const symbol s_4_44[2] = { 0xCE, 0xD9 }; static const symbol s_4_45[3] = { 0xC5, 0xCE, 0xD9 }; static const struct among a_4[46] = { /* 0 */ { 1, s_4_0, -1, 2, 0}, /* 1 */ { 2, s_4_1, 0, 2, 0}, /* 2 */ { 2, s_4_2, -1, 1, 0}, /* 3 */ { 3, s_4_3, 2, 2, 0}, /* 4 */ { 3, s_4_4, 2, 2, 0}, /* 5 */ { 2, s_4_5, -1, 1, 0}, /* 6 */ { 3, s_4_6, 5, 2, 0}, /* 7 */ { 3, s_4_7, -1, 1, 0}, /* 8 */ { 3, s_4_8, -1, 2, 0}, /* 9 */ { 3, s_4_9, -1, 1, 0}, /* 10 */ { 4, s_4_10, 9, 2, 0}, /* 11 */ { 4, s_4_11, 9, 2, 0}, /* 12 */ { 2, s_4_12, -1, 1, 0}, /* 13 */ { 3, s_4_13, 12, 2, 0}, /* 14 */ { 3, s_4_14, 12, 2, 0}, /* 15 */ { 1, s_4_15, -1, 1, 0}, /* 16 */ { 2, s_4_16, 15, 2, 0}, /* 17 */ { 2, s_4_17, 15, 2, 0}, /* 18 */ { 1, s_4_18, -1, 1, 0}, /* 19 */ { 2, s_4_19, 18, 2, 0}, /* 20 */ { 2, s_4_20, 18, 2, 0}, /* 21 */ { 2, s_4_21, -1, 1, 0}, /* 22 */ { 2, s_4_22, -1, 2, 0}, /* 23 */ { 2, s_4_23, -1, 2, 0}, /* 24 */ { 1, s_4_24, -1, 1, 0}, /* 25 */ { 2, s_4_25, 24, 2, 0}, /* 26 */ { 2, s_4_26, -1, 1, 0}, /* 27 */ { 3, s_4_27, 26, 2, 0}, /* 28 */ { 3, s_4_28, 26, 2, 0}, /* 29 */ { 2, s_4_29, -1, 1, 0}, /* 30 */ { 3, s_4_30, 29, 2, 0}, /* 31 */ { 3, s_4_31, 29, 1, 0}, /* 32 */ { 2, s_4_32, -1, 1, 0}, /* 33 */ { 3, s_4_33, 32, 2, 0}, /* 34 */ { 2, s_4_34, -1, 1, 0}, /* 35 */ { 3, s_4_35, 34, 2, 0}, /* 36 */ { 2, s_4_36, -1, 2, 0}, /* 37 */ { 2, s_4_37, -1, 2, 0}, /* 38 */ { 2, s_4_38, -1, 2, 0}, /* 39 */ { 2, s_4_39, -1, 1, 0}, /* 40 */ { 3, s_4_40, 39, 2, 0}, /* 41 */ { 3, s_4_41, 39, 2, 0}, /* 42 */ { 3, s_4_42, -1, 1, 0}, /* 43 */ { 3, s_4_43, -1, 2, 0}, /* 44 */ { 2, s_4_44, -1, 1, 0}, /* 45 */ { 3, s_4_45, 44, 2, 0} }; static const symbol s_5_0[1] = { 0xC0 }; static const symbol s_5_1[2] = { 0xC9, 0xC0 }; static const symbol s_5_2[2] = { 0xD8, 0xC0 }; static const symbol s_5_3[1] = { 0xC1 }; static const symbol s_5_4[1] = { 0xC5 }; static const symbol s_5_5[2] = { 0xC9, 0xC5 }; static const symbol s_5_6[2] = { 0xD8, 0xC5 }; static const symbol s_5_7[2] = { 0xC1, 0xC8 }; static const symbol s_5_8[2] = { 0xD1, 0xC8 }; static const symbol s_5_9[3] = { 0xC9, 0xD1, 0xC8 }; static const symbol s_5_10[1] = { 0xC9 }; static const symbol s_5_11[2] = { 0xC5, 0xC9 }; static const symbol s_5_12[2] = { 0xC9, 0xC9 }; static const symbol s_5_13[3] = { 0xC1, 0xCD, 0xC9 }; static const symbol s_5_14[3] = { 0xD1, 0xCD, 0xC9 }; static const symbol s_5_15[4] = { 0xC9, 0xD1, 0xCD, 0xC9 }; static const symbol s_5_16[1] = { 0xCA }; static const symbol s_5_17[2] = { 0xC5, 0xCA }; static const symbol s_5_18[3] = { 0xC9, 0xC5, 0xCA }; static const symbol s_5_19[2] = { 0xC9, 0xCA }; static const symbol s_5_20[2] = { 0xCF, 0xCA }; static const symbol s_5_21[2] = { 0xC1, 0xCD }; static const symbol s_5_22[2] = { 0xC5, 0xCD }; static const symbol s_5_23[3] = { 0xC9, 0xC5, 0xCD }; static const symbol s_5_24[2] = { 0xCF, 0xCD }; static const symbol s_5_25[2] = { 0xD1, 0xCD }; static const symbol s_5_26[3] = { 0xC9, 0xD1, 0xCD }; static const symbol s_5_27[1] = { 0xCF }; static const symbol s_5_28[1] = { 0xD1 }; static const symbol s_5_29[2] = { 0xC9, 0xD1 }; static const symbol s_5_30[2] = { 0xD8, 0xD1 }; static const symbol s_5_31[1] = { 0xD5 }; static const symbol s_5_32[2] = { 0xC5, 0xD7 }; static const symbol s_5_33[2] = { 0xCF, 0xD7 }; static const symbol s_5_34[1] = { 0xD8 }; static const symbol s_5_35[1] = { 0xD9 }; static const struct among a_5[36] = { /* 0 */ { 1, s_5_0, -1, 1, 0}, /* 1 */ { 2, s_5_1, 0, 1, 0}, /* 2 */ { 2, s_5_2, 0, 1, 0}, /* 3 */ { 1, s_5_3, -1, 1, 0}, /* 4 */ { 1, s_5_4, -1, 1, 0}, /* 5 */ { 2, s_5_5, 4, 1, 0}, /* 6 */ { 2, s_5_6, 4, 1, 0}, /* 7 */ { 2, s_5_7, -1, 1, 0}, /* 8 */ { 2, s_5_8, -1, 1, 0}, /* 9 */ { 3, s_5_9, 8, 1, 0}, /* 10 */ { 1, s_5_10, -1, 1, 0}, /* 11 */ { 2, s_5_11, 10, 1, 0}, /* 12 */ { 2, s_5_12, 10, 1, 0}, /* 13 */ { 3, s_5_13, 10, 1, 0}, /* 14 */ { 3, s_5_14, 10, 1, 0}, /* 15 */ { 4, s_5_15, 14, 1, 0}, /* 16 */ { 1, s_5_16, -1, 1, 0}, /* 17 */ { 2, s_5_17, 16, 1, 0}, /* 18 */ { 3, s_5_18, 17, 1, 0}, /* 19 */ { 2, s_5_19, 16, 1, 0}, /* 20 */ { 2, s_5_20, 16, 1, 0}, /* 21 */ { 2, s_5_21, -1, 1, 0}, /* 22 */ { 2, s_5_22, -1, 1, 0}, /* 23 */ { 3, s_5_23, 22, 1, 0}, /* 24 */ { 2, s_5_24, -1, 1, 0}, /* 25 */ { 2, s_5_25, -1, 1, 0}, /* 26 */ { 3, s_5_26, 25, 1, 0}, /* 27 */ { 1, s_5_27, -1, 1, 0}, /* 28 */ { 1, s_5_28, -1, 1, 0}, /* 29 */ { 2, s_5_29, 28, 1, 0}, /* 30 */ { 2, s_5_30, 28, 1, 0}, /* 31 */ { 1, s_5_31, -1, 1, 0}, /* 32 */ { 2, s_5_32, -1, 1, 0}, /* 33 */ { 2, s_5_33, -1, 1, 0}, /* 34 */ { 1, s_5_34, -1, 1, 0}, /* 35 */ { 1, s_5_35, -1, 1, 0} }; static const symbol s_6_0[3] = { 0xCF, 0xD3, 0xD4 }; static const symbol s_6_1[4] = { 0xCF, 0xD3, 0xD4, 0xD8 }; static const struct among a_6[2] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 4, s_6_1, -1, 1, 0} }; static const symbol s_7_0[4] = { 0xC5, 0xCA, 0xDB, 0xC5 }; static const symbol s_7_1[1] = { 0xCE }; static const symbol s_7_2[1] = { 0xD8 }; static const symbol s_7_3[3] = { 0xC5, 0xCA, 0xDB }; static const struct among a_7[4] = { /* 0 */ { 4, s_7_0, -1, 1, 0}, /* 1 */ { 1, s_7_1, -1, 2, 0}, /* 2 */ { 1, s_7_2, -1, 3, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0} }; static const unsigned char g_v[] = { 35, 130, 34, 18 }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 61 */ z->I[1] = z->l; /* $p2 = , line 62 */ { int c1 = z->c; /* do, line 63 */ { /* gopast */ /* grouping v, line 64 */ int ret = out_grouping(z, g_v, 192, 220, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[0] = z->c; /* setmark pV, line 64 */ { /* gopast */ /* non v, line 64 */ int ret = in_grouping(z, g_v, 192, 220, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* grouping v, line 65 */ int ret = out_grouping(z, g_v, 192, 220, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 65 */ int ret = in_grouping(z, g_v, 192, 220, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 65 */ lab0: z->c = c1; } return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 71 */ return 1; } static int r_perfective_gerund(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 74 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((25166336 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 74 */ among_var = find_among_b(z, a_0, 9); if (!(among_var)) return 0; z->bra = z->c; /* ], line 74 */ switch (among_var) { /* among, line 74 */ case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 78 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xC1) goto lab1; /* literal, line 78 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 0xD1) return 0; /* literal, line 78 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 78 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 85 */ if (ret < 0) return ret; } break; } return 1; } static int r_adjective(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 90 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((2271009 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 90 */ among_var = find_among_b(z, a_1, 26); if (!(among_var)) return 0; z->bra = z->c; /* ], line 90 */ switch (among_var) { /* among, line 90 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } break; } return 1; } static int r_adjectival(struct SN_env * z) { /* backwardmode */ int among_var; { int ret = r_adjective(z); /* call adjective, line 104 */ if (ret <= 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 111 */ z->ket = z->c; /* [, line 112 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((671113216 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m1; goto lab0; } /* substring, line 112 */ among_var = find_among_b(z, a_2, 8); if (!(among_var)) { z->c = z->l - m1; goto lab0; } z->bra = z->c; /* ], line 112 */ switch (among_var) { /* among, line 112 */ case 0: { z->c = z->l - m1; goto lab0; } case 1: { int m2 = z->l - z->c; (void)m2; /* or, line 117 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xC1) goto lab2; /* literal, line 117 */ z->c--; goto lab1; lab2: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 0xD1) { z->c = z->l - m1; goto lab0; } /* literal, line 117 */ z->c--; } lab1: { int ret = slice_del(z); /* delete, line 117 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 124 */ if (ret < 0) return ret; } break; } lab0: ; } return 1; } static int r_reflexive(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 131 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 209 && z->p[z->c - 1] != 216)) return 0; /* substring, line 131 */ among_var = find_among_b(z, a_3, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 131 */ switch (among_var) { /* among, line 131 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } break; } return 1; } static int r_verb(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 139 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((51443235 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 139 */ among_var = find_among_b(z, a_4, 46); if (!(among_var)) return 0; z->bra = z->c; /* ], line 139 */ switch (among_var) { /* among, line 139 */ case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 145 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xC1) goto lab1; /* literal, line 145 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 0xD1) return 0; /* literal, line 145 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 145 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 153 */ if (ret < 0) return ret; } break; } return 1; } static int r_noun(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 162 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((60991267 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 162 */ among_var = find_among_b(z, a_5, 36); if (!(among_var)) return 0; z->bra = z->c; /* ], line 162 */ switch (among_var) { /* among, line 162 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 169 */ if (ret < 0) return ret; } break; } return 1; } static int r_derivational(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 178 */ if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 212 && z->p[z->c - 1] != 216)) return 0; /* substring, line 178 */ among_var = find_among_b(z, a_6, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 178 */ { int ret = r_R2(z); /* call R2, line 178 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 178 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 181 */ if (ret < 0) return ret; } break; } return 1; } static int r_tidy_up(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 186 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 6 || !((151011360 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 186 */ among_var = find_among_b(z, a_7, 4); if (!(among_var)) return 0; z->bra = z->c; /* ], line 186 */ switch (among_var) { /* among, line 186 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 190 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 191 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xCE) return 0; /* literal, line 191 */ z->c--; z->bra = z->c; /* ], line 191 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xCE) return 0; /* literal, line 191 */ z->c--; { int ret = slice_del(z); /* delete, line 191 */ if (ret < 0) return ret; } break; case 2: if (z->c <= z->lb || z->p[z->c - 1] != 0xCE) return 0; /* literal, line 194 */ z->c--; { int ret = slice_del(z); /* delete, line 194 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 196 */ if (ret < 0) return ret; } break; } return 1; } extern int russian_KOI8_R_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 203 */ { int ret = r_mark_regions(z); /* call mark_regions, line 203 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 204 */ { int m2 = z->l - z->c; (void)m2; /* setlimit, line 204 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 204 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; { int m3 = z->l - z->c; (void)m3; /* do, line 205 */ { int m4 = z->l - z->c; (void)m4; /* or, line 206 */ { int ret = r_perfective_gerund(z); /* call perfective_gerund, line 206 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } goto lab2; lab3: z->c = z->l - m4; { int m5 = z->l - z->c; (void)m5; /* try, line 207 */ { int ret = r_reflexive(z); /* call reflexive, line 207 */ if (ret == 0) { z->c = z->l - m5; goto lab4; } if (ret < 0) return ret; } lab4: ; } { int m6 = z->l - z->c; (void)m6; /* or, line 208 */ { int ret = r_adjectival(z); /* call adjectival, line 208 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_verb(z); /* call verb, line 208 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } goto lab5; lab7: z->c = z->l - m6; { int ret = r_noun(z); /* call noun, line 208 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } } lab5: ; } lab2: lab1: z->c = z->l - m3; } { int m7 = z->l - z->c; (void)m7; /* try, line 211 */ z->ket = z->c; /* [, line 211 */ if (z->c <= z->lb || z->p[z->c - 1] != 0xC9) { z->c = z->l - m7; goto lab8; } /* literal, line 211 */ z->c--; z->bra = z->c; /* ], line 211 */ { int ret = slice_del(z); /* delete, line 211 */ if (ret < 0) return ret; } lab8: ; } { int m8 = z->l - z->c; (void)m8; /* do, line 214 */ { int ret = r_derivational(z); /* call derivational, line 214 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 215 */ { int ret = r_tidy_up(z); /* call tidy_up, line 215 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } lab10: z->c = z->l - m9; } z->lb = mlimit2; } z->c = z->lb; return 1; } extern struct SN_env * russian_KOI8_R_create_env(void) { return SN_create_env(0, 2, 0); } extern void russian_KOI8_R_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_KOI8_R_russian.h000066400000000000000000000005311364126773500237530ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * russian_KOI8_R_create_env(void); extern void russian_KOI8_R_close_env(struct SN_env * z); extern int russian_KOI8_R_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_arabic.c000066400000000000000000002172451364126773500234110ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int arabic_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_Checks1(struct SN_env * z); static int r_Normalize_pre(struct SN_env * z); static int r_Normalize_post(struct SN_env * z); static int r_Suffix_Verb_Step2c(struct SN_env * z); static int r_Suffix_Verb_Step2b(struct SN_env * z); static int r_Suffix_Verb_Step2a(struct SN_env * z); static int r_Suffix_Verb_Step1(struct SN_env * z); static int r_Suffix_Noun_Step3(struct SN_env * z); static int r_Suffix_Noun_Step2c2(struct SN_env * z); static int r_Suffix_Noun_Step2c1(struct SN_env * z); static int r_Suffix_Noun_Step2b(struct SN_env * z); static int r_Suffix_Noun_Step2a(struct SN_env * z); static int r_Suffix_Noun_Step1b(struct SN_env * z); static int r_Suffix_Noun_Step1a(struct SN_env * z); static int r_Suffix_All_alef_maqsura(struct SN_env * z); static int r_Prefix_Step4_Verb(struct SN_env * z); static int r_Prefix_Step3_Verb(struct SN_env * z); static int r_Prefix_Step3b_Noun(struct SN_env * z); static int r_Prefix_Step3a_Noun(struct SN_env * z); static int r_Prefix_Step2(struct SN_env * z); static int r_Prefix_Step1(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * arabic_UTF_8_create_env(void); extern void arabic_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { '!' }; static const symbol s_0_1[1] = { '"' }; static const symbol s_0_2[1] = { '%' }; static const symbol s_0_3[1] = { '*' }; static const symbol s_0_4[1] = { ',' }; static const symbol s_0_5[1] = { '.' }; static const symbol s_0_6[1] = { '/' }; static const symbol s_0_7[1] = { ':' }; static const symbol s_0_8[1] = { ';' }; static const symbol s_0_9[1] = { '?' }; static const symbol s_0_10[1] = { '\\' }; static const symbol s_0_11[2] = { 0xD8, 0x8C }; static const symbol s_0_12[2] = { 0xD8, 0x9B }; static const symbol s_0_13[2] = { 0xD8, 0x9F }; static const symbol s_0_14[2] = { 0xD9, 0x80 }; static const symbol s_0_15[2] = { 0xD9, 0x8B }; static const symbol s_0_16[2] = { 0xD9, 0x8C }; static const symbol s_0_17[2] = { 0xD9, 0x8D }; static const symbol s_0_18[2] = { 0xD9, 0x8E }; static const symbol s_0_19[2] = { 0xD9, 0x8F }; static const symbol s_0_20[2] = { 0xD9, 0x90 }; static const symbol s_0_21[2] = { 0xD9, 0x91 }; static const symbol s_0_22[2] = { 0xD9, 0x92 }; static const symbol s_0_23[2] = { 0xD9, 0xA0 }; static const symbol s_0_24[2] = { 0xD9, 0xA1 }; static const symbol s_0_25[2] = { 0xD9, 0xA2 }; static const symbol s_0_26[2] = { 0xD9, 0xA3 }; static const symbol s_0_27[2] = { 0xD9, 0xA4 }; static const symbol s_0_28[2] = { 0xD9, 0xA5 }; static const symbol s_0_29[2] = { 0xD9, 0xA6 }; static const symbol s_0_30[2] = { 0xD9, 0xA7 }; static const symbol s_0_31[2] = { 0xD9, 0xA8 }; static const symbol s_0_32[2] = { 0xD9, 0xA9 }; static const symbol s_0_33[2] = { 0xD9, 0xAA }; static const symbol s_0_34[2] = { 0xD9, 0xAB }; static const symbol s_0_35[2] = { 0xD9, 0xAC }; static const symbol s_0_36[3] = { 0xEF, 0xBA, 0x80 }; static const symbol s_0_37[3] = { 0xEF, 0xBA, 0x81 }; static const symbol s_0_38[3] = { 0xEF, 0xBA, 0x82 }; static const symbol s_0_39[3] = { 0xEF, 0xBA, 0x83 }; static const symbol s_0_40[3] = { 0xEF, 0xBA, 0x84 }; static const symbol s_0_41[3] = { 0xEF, 0xBA, 0x85 }; static const symbol s_0_42[3] = { 0xEF, 0xBA, 0x86 }; static const symbol s_0_43[3] = { 0xEF, 0xBA, 0x87 }; static const symbol s_0_44[3] = { 0xEF, 0xBA, 0x88 }; static const symbol s_0_45[3] = { 0xEF, 0xBA, 0x89 }; static const symbol s_0_46[3] = { 0xEF, 0xBA, 0x8A }; static const symbol s_0_47[3] = { 0xEF, 0xBA, 0x8B }; static const symbol s_0_48[3] = { 0xEF, 0xBA, 0x8C }; static const symbol s_0_49[3] = { 0xEF, 0xBA, 0x8D }; static const symbol s_0_50[3] = { 0xEF, 0xBA, 0x8E }; static const symbol s_0_51[3] = { 0xEF, 0xBA, 0x8F }; static const symbol s_0_52[3] = { 0xEF, 0xBA, 0x90 }; static const symbol s_0_53[3] = { 0xEF, 0xBA, 0x91 }; static const symbol s_0_54[3] = { 0xEF, 0xBA, 0x92 }; static const symbol s_0_55[3] = { 0xEF, 0xBA, 0x93 }; static const symbol s_0_56[3] = { 0xEF, 0xBA, 0x94 }; static const symbol s_0_57[3] = { 0xEF, 0xBA, 0x95 }; static const symbol s_0_58[3] = { 0xEF, 0xBA, 0x96 }; static const symbol s_0_59[3] = { 0xEF, 0xBA, 0x97 }; static const symbol s_0_60[3] = { 0xEF, 0xBA, 0x98 }; static const symbol s_0_61[3] = { 0xEF, 0xBA, 0x99 }; static const symbol s_0_62[3] = { 0xEF, 0xBA, 0x9A }; static const symbol s_0_63[3] = { 0xEF, 0xBA, 0x9B }; static const symbol s_0_64[3] = { 0xEF, 0xBA, 0x9C }; static const symbol s_0_65[3] = { 0xEF, 0xBA, 0x9D }; static const symbol s_0_66[3] = { 0xEF, 0xBA, 0x9E }; static const symbol s_0_67[3] = { 0xEF, 0xBA, 0x9F }; static const symbol s_0_68[3] = { 0xEF, 0xBA, 0xA0 }; static const symbol s_0_69[3] = { 0xEF, 0xBA, 0xA1 }; static const symbol s_0_70[3] = { 0xEF, 0xBA, 0xA2 }; static const symbol s_0_71[3] = { 0xEF, 0xBA, 0xA3 }; static const symbol s_0_72[3] = { 0xEF, 0xBA, 0xA4 }; static const symbol s_0_73[3] = { 0xEF, 0xBA, 0xA5 }; static const symbol s_0_74[3] = { 0xEF, 0xBA, 0xA6 }; static const symbol s_0_75[3] = { 0xEF, 0xBA, 0xA7 }; static const symbol s_0_76[3] = { 0xEF, 0xBA, 0xA8 }; static const symbol s_0_77[3] = { 0xEF, 0xBA, 0xA9 }; static const symbol s_0_78[3] = { 0xEF, 0xBA, 0xAA }; static const symbol s_0_79[3] = { 0xEF, 0xBA, 0xAB }; static const symbol s_0_80[3] = { 0xEF, 0xBA, 0xAC }; static const symbol s_0_81[3] = { 0xEF, 0xBA, 0xAD }; static const symbol s_0_82[3] = { 0xEF, 0xBA, 0xAE }; static const symbol s_0_83[3] = { 0xEF, 0xBA, 0xAF }; static const symbol s_0_84[3] = { 0xEF, 0xBA, 0xB0 }; static const symbol s_0_85[3] = { 0xEF, 0xBA, 0xB1 }; static const symbol s_0_86[3] = { 0xEF, 0xBA, 0xB2 }; static const symbol s_0_87[3] = { 0xEF, 0xBA, 0xB3 }; static const symbol s_0_88[3] = { 0xEF, 0xBA, 0xB4 }; static const symbol s_0_89[3] = { 0xEF, 0xBA, 0xB5 }; static const symbol s_0_90[3] = { 0xEF, 0xBA, 0xB6 }; static const symbol s_0_91[3] = { 0xEF, 0xBA, 0xB7 }; static const symbol s_0_92[3] = { 0xEF, 0xBA, 0xB8 }; static const symbol s_0_93[3] = { 0xEF, 0xBA, 0xB9 }; static const symbol s_0_94[3] = { 0xEF, 0xBA, 0xBA }; static const symbol s_0_95[3] = { 0xEF, 0xBA, 0xBB }; static const symbol s_0_96[3] = { 0xEF, 0xBA, 0xBC }; static const symbol s_0_97[3] = { 0xEF, 0xBA, 0xBD }; static const symbol s_0_98[3] = { 0xEF, 0xBA, 0xBE }; static const symbol s_0_99[3] = { 0xEF, 0xBA, 0xBF }; static const symbol s_0_100[3] = { 0xEF, 0xBB, 0x80 }; static const symbol s_0_101[3] = { 0xEF, 0xBB, 0x81 }; static const symbol s_0_102[3] = { 0xEF, 0xBB, 0x82 }; static const symbol s_0_103[3] = { 0xEF, 0xBB, 0x83 }; static const symbol s_0_104[3] = { 0xEF, 0xBB, 0x84 }; static const symbol s_0_105[3] = { 0xEF, 0xBB, 0x85 }; static const symbol s_0_106[3] = { 0xEF, 0xBB, 0x86 }; static const symbol s_0_107[3] = { 0xEF, 0xBB, 0x87 }; static const symbol s_0_108[3] = { 0xEF, 0xBB, 0x88 }; static const symbol s_0_109[3] = { 0xEF, 0xBB, 0x89 }; static const symbol s_0_110[3] = { 0xEF, 0xBB, 0x8A }; static const symbol s_0_111[3] = { 0xEF, 0xBB, 0x8B }; static const symbol s_0_112[3] = { 0xEF, 0xBB, 0x8C }; static const symbol s_0_113[3] = { 0xEF, 0xBB, 0x8D }; static const symbol s_0_114[3] = { 0xEF, 0xBB, 0x8E }; static const symbol s_0_115[3] = { 0xEF, 0xBB, 0x8F }; static const symbol s_0_116[3] = { 0xEF, 0xBB, 0x90 }; static const symbol s_0_117[3] = { 0xEF, 0xBB, 0x91 }; static const symbol s_0_118[3] = { 0xEF, 0xBB, 0x92 }; static const symbol s_0_119[3] = { 0xEF, 0xBB, 0x93 }; static const symbol s_0_120[3] = { 0xEF, 0xBB, 0x94 }; static const symbol s_0_121[3] = { 0xEF, 0xBB, 0x95 }; static const symbol s_0_122[3] = { 0xEF, 0xBB, 0x96 }; static const symbol s_0_123[3] = { 0xEF, 0xBB, 0x97 }; static const symbol s_0_124[3] = { 0xEF, 0xBB, 0x98 }; static const symbol s_0_125[3] = { 0xEF, 0xBB, 0x99 }; static const symbol s_0_126[3] = { 0xEF, 0xBB, 0x9A }; static const symbol s_0_127[3] = { 0xEF, 0xBB, 0x9B }; static const symbol s_0_128[3] = { 0xEF, 0xBB, 0x9C }; static const symbol s_0_129[3] = { 0xEF, 0xBB, 0x9D }; static const symbol s_0_130[3] = { 0xEF, 0xBB, 0x9E }; static const symbol s_0_131[3] = { 0xEF, 0xBB, 0x9F }; static const symbol s_0_132[3] = { 0xEF, 0xBB, 0xA0 }; static const symbol s_0_133[3] = { 0xEF, 0xBB, 0xA1 }; static const symbol s_0_134[3] = { 0xEF, 0xBB, 0xA2 }; static const symbol s_0_135[3] = { 0xEF, 0xBB, 0xA3 }; static const symbol s_0_136[3] = { 0xEF, 0xBB, 0xA4 }; static const symbol s_0_137[3] = { 0xEF, 0xBB, 0xA5 }; static const symbol s_0_138[3] = { 0xEF, 0xBB, 0xA6 }; static const symbol s_0_139[3] = { 0xEF, 0xBB, 0xA7 }; static const symbol s_0_140[3] = { 0xEF, 0xBB, 0xA8 }; static const symbol s_0_141[3] = { 0xEF, 0xBB, 0xA9 }; static const symbol s_0_142[3] = { 0xEF, 0xBB, 0xAA }; static const symbol s_0_143[3] = { 0xEF, 0xBB, 0xAB }; static const symbol s_0_144[3] = { 0xEF, 0xBB, 0xAC }; static const symbol s_0_145[3] = { 0xEF, 0xBB, 0xAD }; static const symbol s_0_146[3] = { 0xEF, 0xBB, 0xAE }; static const symbol s_0_147[3] = { 0xEF, 0xBB, 0xAF }; static const symbol s_0_148[3] = { 0xEF, 0xBB, 0xB0 }; static const symbol s_0_149[3] = { 0xEF, 0xBB, 0xB1 }; static const symbol s_0_150[3] = { 0xEF, 0xBB, 0xB2 }; static const symbol s_0_151[3] = { 0xEF, 0xBB, 0xB3 }; static const symbol s_0_152[3] = { 0xEF, 0xBB, 0xB4 }; static const symbol s_0_153[3] = { 0xEF, 0xBB, 0xB5 }; static const symbol s_0_154[3] = { 0xEF, 0xBB, 0xB6 }; static const symbol s_0_155[3] = { 0xEF, 0xBB, 0xB7 }; static const symbol s_0_156[3] = { 0xEF, 0xBB, 0xB8 }; static const symbol s_0_157[3] = { 0xEF, 0xBB, 0xB9 }; static const symbol s_0_158[3] = { 0xEF, 0xBB, 0xBA }; static const symbol s_0_159[3] = { 0xEF, 0xBB, 0xBB }; static const symbol s_0_160[3] = { 0xEF, 0xBB, 0xBC }; static const struct among a_0[161] = { /* 0 */ { 1, s_0_0, -1, 3, 0}, /* 1 */ { 1, s_0_1, -1, 3, 0}, /* 2 */ { 1, s_0_2, -1, 3, 0}, /* 3 */ { 1, s_0_3, -1, 3, 0}, /* 4 */ { 1, s_0_4, -1, 3, 0}, /* 5 */ { 1, s_0_5, -1, 3, 0}, /* 6 */ { 1, s_0_6, -1, 3, 0}, /* 7 */ { 1, s_0_7, -1, 3, 0}, /* 8 */ { 1, s_0_8, -1, 3, 0}, /* 9 */ { 1, s_0_9, -1, 3, 0}, /* 10 */ { 1, s_0_10, -1, 3, 0}, /* 11 */ { 2, s_0_11, -1, 4, 0}, /* 12 */ { 2, s_0_12, -1, 4, 0}, /* 13 */ { 2, s_0_13, -1, 4, 0}, /* 14 */ { 2, s_0_14, -1, 2, 0}, /* 15 */ { 2, s_0_15, -1, 1, 0}, /* 16 */ { 2, s_0_16, -1, 1, 0}, /* 17 */ { 2, s_0_17, -1, 1, 0}, /* 18 */ { 2, s_0_18, -1, 1, 0}, /* 19 */ { 2, s_0_19, -1, 1, 0}, /* 20 */ { 2, s_0_20, -1, 1, 0}, /* 21 */ { 2, s_0_21, -1, 1, 0}, /* 22 */ { 2, s_0_22, -1, 1, 0}, /* 23 */ { 2, s_0_23, -1, 5, 0}, /* 24 */ { 2, s_0_24, -1, 6, 0}, /* 25 */ { 2, s_0_25, -1, 7, 0}, /* 26 */ { 2, s_0_26, -1, 8, 0}, /* 27 */ { 2, s_0_27, -1, 9, 0}, /* 28 */ { 2, s_0_28, -1, 10, 0}, /* 29 */ { 2, s_0_29, -1, 11, 0}, /* 30 */ { 2, s_0_30, -1, 12, 0}, /* 31 */ { 2, s_0_31, -1, 13, 0}, /* 32 */ { 2, s_0_32, -1, 14, 0}, /* 33 */ { 2, s_0_33, -1, 15, 0}, /* 34 */ { 2, s_0_34, -1, 15, 0}, /* 35 */ { 2, s_0_35, -1, 15, 0}, /* 36 */ { 3, s_0_36, -1, 16, 0}, /* 37 */ { 3, s_0_37, -1, 20, 0}, /* 38 */ { 3, s_0_38, -1, 20, 0}, /* 39 */ { 3, s_0_39, -1, 17, 0}, /* 40 */ { 3, s_0_40, -1, 17, 0}, /* 41 */ { 3, s_0_41, -1, 21, 0}, /* 42 */ { 3, s_0_42, -1, 21, 0}, /* 43 */ { 3, s_0_43, -1, 18, 0}, /* 44 */ { 3, s_0_44, -1, 18, 0}, /* 45 */ { 3, s_0_45, -1, 19, 0}, /* 46 */ { 3, s_0_46, -1, 19, 0}, /* 47 */ { 3, s_0_47, -1, 19, 0}, /* 48 */ { 3, s_0_48, -1, 19, 0}, /* 49 */ { 3, s_0_49, -1, 22, 0}, /* 50 */ { 3, s_0_50, -1, 22, 0}, /* 51 */ { 3, s_0_51, -1, 23, 0}, /* 52 */ { 3, s_0_52, -1, 23, 0}, /* 53 */ { 3, s_0_53, -1, 23, 0}, /* 54 */ { 3, s_0_54, -1, 23, 0}, /* 55 */ { 3, s_0_55, -1, 24, 0}, /* 56 */ { 3, s_0_56, -1, 24, 0}, /* 57 */ { 3, s_0_57, -1, 25, 0}, /* 58 */ { 3, s_0_58, -1, 25, 0}, /* 59 */ { 3, s_0_59, -1, 25, 0}, /* 60 */ { 3, s_0_60, -1, 25, 0}, /* 61 */ { 3, s_0_61, -1, 26, 0}, /* 62 */ { 3, s_0_62, -1, 26, 0}, /* 63 */ { 3, s_0_63, -1, 26, 0}, /* 64 */ { 3, s_0_64, -1, 26, 0}, /* 65 */ { 3, s_0_65, -1, 27, 0}, /* 66 */ { 3, s_0_66, -1, 27, 0}, /* 67 */ { 3, s_0_67, -1, 27, 0}, /* 68 */ { 3, s_0_68, -1, 27, 0}, /* 69 */ { 3, s_0_69, -1, 28, 0}, /* 70 */ { 3, s_0_70, -1, 28, 0}, /* 71 */ { 3, s_0_71, -1, 28, 0}, /* 72 */ { 3, s_0_72, -1, 28, 0}, /* 73 */ { 3, s_0_73, -1, 29, 0}, /* 74 */ { 3, s_0_74, -1, 29, 0}, /* 75 */ { 3, s_0_75, -1, 29, 0}, /* 76 */ { 3, s_0_76, -1, 29, 0}, /* 77 */ { 3, s_0_77, -1, 30, 0}, /* 78 */ { 3, s_0_78, -1, 30, 0}, /* 79 */ { 3, s_0_79, -1, 31, 0}, /* 80 */ { 3, s_0_80, -1, 31, 0}, /* 81 */ { 3, s_0_81, -1, 32, 0}, /* 82 */ { 3, s_0_82, -1, 32, 0}, /* 83 */ { 3, s_0_83, -1, 33, 0}, /* 84 */ { 3, s_0_84, -1, 33, 0}, /* 85 */ { 3, s_0_85, -1, 34, 0}, /* 86 */ { 3, s_0_86, -1, 34, 0}, /* 87 */ { 3, s_0_87, -1, 34, 0}, /* 88 */ { 3, s_0_88, -1, 34, 0}, /* 89 */ { 3, s_0_89, -1, 35, 0}, /* 90 */ { 3, s_0_90, -1, 35, 0}, /* 91 */ { 3, s_0_91, -1, 35, 0}, /* 92 */ { 3, s_0_92, -1, 35, 0}, /* 93 */ { 3, s_0_93, -1, 36, 0}, /* 94 */ { 3, s_0_94, -1, 36, 0}, /* 95 */ { 3, s_0_95, -1, 36, 0}, /* 96 */ { 3, s_0_96, -1, 36, 0}, /* 97 */ { 3, s_0_97, -1, 37, 0}, /* 98 */ { 3, s_0_98, -1, 37, 0}, /* 99 */ { 3, s_0_99, -1, 37, 0}, /*100 */ { 3, s_0_100, -1, 37, 0}, /*101 */ { 3, s_0_101, -1, 38, 0}, /*102 */ { 3, s_0_102, -1, 38, 0}, /*103 */ { 3, s_0_103, -1, 38, 0}, /*104 */ { 3, s_0_104, -1, 38, 0}, /*105 */ { 3, s_0_105, -1, 39, 0}, /*106 */ { 3, s_0_106, -1, 39, 0}, /*107 */ { 3, s_0_107, -1, 39, 0}, /*108 */ { 3, s_0_108, -1, 39, 0}, /*109 */ { 3, s_0_109, -1, 40, 0}, /*110 */ { 3, s_0_110, -1, 40, 0}, /*111 */ { 3, s_0_111, -1, 40, 0}, /*112 */ { 3, s_0_112, -1, 40, 0}, /*113 */ { 3, s_0_113, -1, 41, 0}, /*114 */ { 3, s_0_114, -1, 41, 0}, /*115 */ { 3, s_0_115, -1, 41, 0}, /*116 */ { 3, s_0_116, -1, 41, 0}, /*117 */ { 3, s_0_117, -1, 42, 0}, /*118 */ { 3, s_0_118, -1, 42, 0}, /*119 */ { 3, s_0_119, -1, 42, 0}, /*120 */ { 3, s_0_120, -1, 42, 0}, /*121 */ { 3, s_0_121, -1, 43, 0}, /*122 */ { 3, s_0_122, -1, 43, 0}, /*123 */ { 3, s_0_123, -1, 43, 0}, /*124 */ { 3, s_0_124, -1, 43, 0}, /*125 */ { 3, s_0_125, -1, 44, 0}, /*126 */ { 3, s_0_126, -1, 44, 0}, /*127 */ { 3, s_0_127, -1, 44, 0}, /*128 */ { 3, s_0_128, -1, 44, 0}, /*129 */ { 3, s_0_129, -1, 45, 0}, /*130 */ { 3, s_0_130, -1, 45, 0}, /*131 */ { 3, s_0_131, -1, 45, 0}, /*132 */ { 3, s_0_132, -1, 45, 0}, /*133 */ { 3, s_0_133, -1, 46, 0}, /*134 */ { 3, s_0_134, -1, 46, 0}, /*135 */ { 3, s_0_135, -1, 46, 0}, /*136 */ { 3, s_0_136, -1, 46, 0}, /*137 */ { 3, s_0_137, -1, 47, 0}, /*138 */ { 3, s_0_138, -1, 47, 0}, /*139 */ { 3, s_0_139, -1, 47, 0}, /*140 */ { 3, s_0_140, -1, 47, 0}, /*141 */ { 3, s_0_141, -1, 48, 0}, /*142 */ { 3, s_0_142, -1, 48, 0}, /*143 */ { 3, s_0_143, -1, 48, 0}, /*144 */ { 3, s_0_144, -1, 48, 0}, /*145 */ { 3, s_0_145, -1, 49, 0}, /*146 */ { 3, s_0_146, -1, 49, 0}, /*147 */ { 3, s_0_147, -1, 50, 0}, /*148 */ { 3, s_0_148, -1, 50, 0}, /*149 */ { 3, s_0_149, -1, 51, 0}, /*150 */ { 3, s_0_150, -1, 51, 0}, /*151 */ { 3, s_0_151, -1, 51, 0}, /*152 */ { 3, s_0_152, -1, 51, 0}, /*153 */ { 3, s_0_153, -1, 55, 0}, /*154 */ { 3, s_0_154, -1, 55, 0}, /*155 */ { 3, s_0_155, -1, 53, 0}, /*156 */ { 3, s_0_156, -1, 53, 0}, /*157 */ { 3, s_0_157, -1, 54, 0}, /*158 */ { 3, s_0_158, -1, 54, 0}, /*159 */ { 3, s_0_159, -1, 52, 0}, /*160 */ { 3, s_0_160, -1, 52, 0} }; static const symbol s_1_0[2] = { 0xD8, 0xA2 }; static const symbol s_1_1[2] = { 0xD8, 0xA3 }; static const symbol s_1_2[2] = { 0xD8, 0xA4 }; static const symbol s_1_3[2] = { 0xD8, 0xA5 }; static const symbol s_1_4[2] = { 0xD8, 0xA6 }; static const struct among a_1[5] = { /* 0 */ { 2, s_1_0, -1, 1, 0}, /* 1 */ { 2, s_1_1, -1, 1, 0}, /* 2 */ { 2, s_1_2, -1, 2, 0}, /* 3 */ { 2, s_1_3, -1, 1, 0}, /* 4 */ { 2, s_1_4, -1, 3, 0} }; static const symbol s_2_0[2] = { 0xD8, 0xA2 }; static const symbol s_2_1[2] = { 0xD8, 0xA3 }; static const symbol s_2_2[2] = { 0xD8, 0xA4 }; static const symbol s_2_3[2] = { 0xD8, 0xA5 }; static const symbol s_2_4[2] = { 0xD8, 0xA6 }; static const struct among a_2[5] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 2, s_2_1, -1, 1, 0}, /* 2 */ { 2, s_2_2, -1, 2, 0}, /* 3 */ { 2, s_2_3, -1, 1, 0}, /* 4 */ { 2, s_2_4, -1, 3, 0} }; static const symbol s_3_0[4] = { 0xD8, 0xA7, 0xD9, 0x84 }; static const symbol s_3_1[6] = { 0xD8, 0xA8, 0xD8, 0xA7, 0xD9, 0x84 }; static const symbol s_3_2[6] = { 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x84 }; static const symbol s_3_3[4] = { 0xD9, 0x84, 0xD9, 0x84 }; static const struct among a_3[4] = { /* 0 */ { 4, s_3_0, -1, 2, 0}, /* 1 */ { 6, s_3_1, -1, 1, 0}, /* 2 */ { 6, s_3_2, -1, 1, 0}, /* 3 */ { 4, s_3_3, -1, 2, 0} }; static const symbol s_4_0[4] = { 0xD8, 0xA3, 0xD8, 0xA2 }; static const symbol s_4_1[4] = { 0xD8, 0xA3, 0xD8, 0xA3 }; static const symbol s_4_2[4] = { 0xD8, 0xA3, 0xD8, 0xA4 }; static const symbol s_4_3[4] = { 0xD8, 0xA3, 0xD8, 0xA5 }; static const symbol s_4_4[4] = { 0xD8, 0xA3, 0xD8, 0xA7 }; static const struct among a_4[5] = { /* 0 */ { 4, s_4_0, -1, 2, 0}, /* 1 */ { 4, s_4_1, -1, 1, 0}, /* 2 */ { 4, s_4_2, -1, 3, 0}, /* 3 */ { 4, s_4_3, -1, 5, 0}, /* 4 */ { 4, s_4_4, -1, 4, 0} }; static const symbol s_5_0[2] = { 0xD9, 0x81 }; static const symbol s_5_1[2] = { 0xD9, 0x88 }; static const struct among a_5[2] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 2, s_5_1, -1, 2, 0} }; static const symbol s_6_0[4] = { 0xD8, 0xA7, 0xD9, 0x84 }; static const symbol s_6_1[6] = { 0xD8, 0xA8, 0xD8, 0xA7, 0xD9, 0x84 }; static const symbol s_6_2[6] = { 0xD9, 0x83, 0xD8, 0xA7, 0xD9, 0x84 }; static const symbol s_6_3[4] = { 0xD9, 0x84, 0xD9, 0x84 }; static const struct among a_6[4] = { /* 0 */ { 4, s_6_0, -1, 2, 0}, /* 1 */ { 6, s_6_1, -1, 1, 0}, /* 2 */ { 6, s_6_2, -1, 1, 0}, /* 3 */ { 4, s_6_3, -1, 2, 0} }; static const symbol s_7_0[2] = { 0xD8, 0xA8 }; static const symbol s_7_1[4] = { 0xD8, 0xA8, 0xD8, 0xA8 }; static const symbol s_7_2[4] = { 0xD9, 0x83, 0xD9, 0x83 }; static const struct among a_7[3] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 4, s_7_1, 0, 2, 0}, /* 2 */ { 4, s_7_2, -1, 3, 0} }; static const symbol s_8_0[4] = { 0xD8, 0xB3, 0xD8, 0xA3 }; static const symbol s_8_1[4] = { 0xD8, 0xB3, 0xD8, 0xAA }; static const symbol s_8_2[4] = { 0xD8, 0xB3, 0xD9, 0x86 }; static const symbol s_8_3[4] = { 0xD8, 0xB3, 0xD9, 0x8A }; static const struct among a_8[4] = { /* 0 */ { 4, s_8_0, -1, 4, 0}, /* 1 */ { 4, s_8_1, -1, 2, 0}, /* 2 */ { 4, s_8_2, -1, 3, 0}, /* 3 */ { 4, s_8_3, -1, 1, 0} }; static const symbol s_9_0[6] = { 0xD8, 0xAA, 0xD8, 0xB3, 0xD8, 0xAA }; static const symbol s_9_1[6] = { 0xD9, 0x86, 0xD8, 0xB3, 0xD8, 0xAA }; static const symbol s_9_2[6] = { 0xD9, 0x8A, 0xD8, 0xB3, 0xD8, 0xAA }; static const struct among a_9[3] = { /* 0 */ { 6, s_9_0, -1, 1, 0}, /* 1 */ { 6, s_9_1, -1, 1, 0}, /* 2 */ { 6, s_9_2, -1, 1, 0} }; static const symbol s_10_0[2] = { 0xD9, 0x83 }; static const symbol s_10_1[4] = { 0xD9, 0x83, 0xD9, 0x85 }; static const symbol s_10_2[4] = { 0xD9, 0x87, 0xD9, 0x85 }; static const symbol s_10_3[4] = { 0xD9, 0x87, 0xD9, 0x86 }; static const symbol s_10_4[2] = { 0xD9, 0x87 }; static const symbol s_10_5[2] = { 0xD9, 0x8A }; static const symbol s_10_6[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD8, 0xA7 }; static const symbol s_10_7[6] = { 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xA7 }; static const symbol s_10_8[4] = { 0xD9, 0x86, 0xD8, 0xA7 }; static const symbol s_10_9[4] = { 0xD9, 0x87, 0xD8, 0xA7 }; static const struct among a_10[10] = { /* 0 */ { 2, s_10_0, -1, 1, 0}, /* 1 */ { 4, s_10_1, -1, 2, 0}, /* 2 */ { 4, s_10_2, -1, 2, 0}, /* 3 */ { 4, s_10_3, -1, 2, 0}, /* 4 */ { 2, s_10_4, -1, 1, 0}, /* 5 */ { 2, s_10_5, -1, 1, 0}, /* 6 */ { 6, s_10_6, -1, 3, 0}, /* 7 */ { 6, s_10_7, -1, 3, 0}, /* 8 */ { 4, s_10_8, -1, 2, 0}, /* 9 */ { 4, s_10_9, -1, 2, 0} }; static const symbol s_11_0[2] = { 0xD9, 0x86 }; static const struct among a_11[1] = { /* 0 */ { 2, s_11_0, -1, 1, 0} }; static const symbol s_12_0[2] = { 0xD9, 0x88 }; static const symbol s_12_1[2] = { 0xD9, 0x8A }; static const symbol s_12_2[2] = { 0xD8, 0xA7 }; static const struct among a_12[3] = { /* 0 */ { 2, s_12_0, -1, 1, 0}, /* 1 */ { 2, s_12_1, -1, 1, 0}, /* 2 */ { 2, s_12_2, -1, 1, 0} }; static const symbol s_13_0[4] = { 0xD8, 0xA7, 0xD8, 0xAA }; static const struct among a_13[1] = { /* 0 */ { 4, s_13_0, -1, 1, 0} }; static const symbol s_14_0[2] = { 0xD8, 0xAA }; static const struct among a_14[1] = { /* 0 */ { 2, s_14_0, -1, 1, 0} }; static const symbol s_15_0[2] = { 0xD8, 0xA9 }; static const struct among a_15[1] = { /* 0 */ { 2, s_15_0, -1, 1, 0} }; static const symbol s_16_0[2] = { 0xD9, 0x8A }; static const struct among a_16[1] = { /* 0 */ { 2, s_16_0, -1, 1, 0} }; static const symbol s_17_0[2] = { 0xD9, 0x83 }; static const symbol s_17_1[4] = { 0xD9, 0x83, 0xD9, 0x85 }; static const symbol s_17_2[4] = { 0xD9, 0x87, 0xD9, 0x85 }; static const symbol s_17_3[4] = { 0xD9, 0x83, 0xD9, 0x86 }; static const symbol s_17_4[4] = { 0xD9, 0x87, 0xD9, 0x86 }; static const symbol s_17_5[2] = { 0xD9, 0x87 }; static const symbol s_17_6[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x88 }; static const symbol s_17_7[4] = { 0xD9, 0x86, 0xD9, 0x8A }; static const symbol s_17_8[6] = { 0xD9, 0x83, 0xD9, 0x85, 0xD8, 0xA7 }; static const symbol s_17_9[6] = { 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xA7 }; static const symbol s_17_10[4] = { 0xD9, 0x86, 0xD8, 0xA7 }; static const symbol s_17_11[4] = { 0xD9, 0x87, 0xD8, 0xA7 }; static const struct among a_17[12] = { /* 0 */ { 2, s_17_0, -1, 1, 0}, /* 1 */ { 4, s_17_1, -1, 2, 0}, /* 2 */ { 4, s_17_2, -1, 2, 0}, /* 3 */ { 4, s_17_3, -1, 2, 0}, /* 4 */ { 4, s_17_4, -1, 2, 0}, /* 5 */ { 2, s_17_5, -1, 1, 0}, /* 6 */ { 6, s_17_6, -1, 3, 0}, /* 7 */ { 4, s_17_7, -1, 2, 0}, /* 8 */ { 6, s_17_8, -1, 3, 0}, /* 9 */ { 6, s_17_9, -1, 3, 0}, /* 10 */ { 4, s_17_10, -1, 2, 0}, /* 11 */ { 4, s_17_11, -1, 2, 0} }; static const symbol s_18_0[2] = { 0xD9, 0x86 }; static const symbol s_18_1[4] = { 0xD9, 0x88, 0xD9, 0x86 }; static const symbol s_18_2[4] = { 0xD9, 0x8A, 0xD9, 0x86 }; static const symbol s_18_3[4] = { 0xD8, 0xA7, 0xD9, 0x86 }; static const symbol s_18_4[4] = { 0xD8, 0xAA, 0xD9, 0x86 }; static const symbol s_18_5[2] = { 0xD9, 0x8A }; static const symbol s_18_6[2] = { 0xD8, 0xA7 }; static const symbol s_18_7[6] = { 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xA7 }; static const symbol s_18_8[4] = { 0xD9, 0x86, 0xD8, 0xA7 }; static const symbol s_18_9[4] = { 0xD8, 0xAA, 0xD8, 0xA7 }; static const symbol s_18_10[2] = { 0xD8, 0xAA }; static const struct among a_18[11] = { /* 0 */ { 2, s_18_0, -1, 2, 0}, /* 1 */ { 4, s_18_1, 0, 4, 0}, /* 2 */ { 4, s_18_2, 0, 4, 0}, /* 3 */ { 4, s_18_3, 0, 4, 0}, /* 4 */ { 4, s_18_4, 0, 3, 0}, /* 5 */ { 2, s_18_5, -1, 2, 0}, /* 6 */ { 2, s_18_6, -1, 2, 0}, /* 7 */ { 6, s_18_7, 6, 5, 0}, /* 8 */ { 4, s_18_8, 6, 3, 0}, /* 9 */ { 4, s_18_9, 6, 3, 0}, /* 10 */ { 2, s_18_10, -1, 1, 0} }; static const symbol s_19_0[4] = { 0xD8, 0xAA, 0xD9, 0x85 }; static const symbol s_19_1[4] = { 0xD9, 0x88, 0xD8, 0xA7 }; static const struct among a_19[2] = { /* 0 */ { 4, s_19_0, -1, 1, 0}, /* 1 */ { 4, s_19_1, -1, 1, 0} }; static const symbol s_20_0[2] = { 0xD9, 0x88 }; static const symbol s_20_1[6] = { 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x88 }; static const struct among a_20[2] = { /* 0 */ { 2, s_20_0, -1, 1, 0}, /* 1 */ { 6, s_20_1, 0, 2, 0} }; static const symbol s_21_0[2] = { 0xD9, 0x89 }; static const struct among a_21[1] = { /* 0 */ { 2, s_21_0, -1, 1, 0} }; static const symbol s_0[] = { '0' }; static const symbol s_1[] = { '1' }; static const symbol s_2[] = { '2' }; static const symbol s_3[] = { '3' }; static const symbol s_4[] = { '4' }; static const symbol s_5[] = { '5' }; static const symbol s_6[] = { '6' }; static const symbol s_7[] = { '7' }; static const symbol s_8[] = { '8' }; static const symbol s_9[] = { '9' }; static const symbol s_10[] = { 0xD8, 0xA1 }; static const symbol s_11[] = { 0xD8, 0xA3 }; static const symbol s_12[] = { 0xD8, 0xA5 }; static const symbol s_13[] = { 0xD8, 0xA6 }; static const symbol s_14[] = { 0xD8, 0xA2 }; static const symbol s_15[] = { 0xD8, 0xA4 }; static const symbol s_16[] = { 0xD8, 0xA7 }; static const symbol s_17[] = { 0xD8, 0xA8 }; static const symbol s_18[] = { 0xD8, 0xA9 }; static const symbol s_19[] = { 0xD8, 0xAA }; static const symbol s_20[] = { 0xD8, 0xAB }; static const symbol s_21[] = { 0xD8, 0xAC }; static const symbol s_22[] = { 0xD8, 0xAD }; static const symbol s_23[] = { 0xD8, 0xAE }; static const symbol s_24[] = { 0xD8, 0xAF }; static const symbol s_25[] = { 0xD8, 0xB0 }; static const symbol s_26[] = { 0xD8, 0xB1 }; static const symbol s_27[] = { 0xD8, 0xB2 }; static const symbol s_28[] = { 0xD8, 0xB3 }; static const symbol s_29[] = { 0xD8, 0xB4 }; static const symbol s_30[] = { 0xD8, 0xB5 }; static const symbol s_31[] = { 0xD8, 0xB6 }; static const symbol s_32[] = { 0xD8, 0xB7 }; static const symbol s_33[] = { 0xD8, 0xB8 }; static const symbol s_34[] = { 0xD8, 0xB9 }; static const symbol s_35[] = { 0xD8, 0xBA }; static const symbol s_36[] = { 0xD9, 0x81 }; static const symbol s_37[] = { 0xD9, 0x82 }; static const symbol s_38[] = { 0xD9, 0x83 }; static const symbol s_39[] = { 0xD9, 0x84 }; static const symbol s_40[] = { 0xD9, 0x85 }; static const symbol s_41[] = { 0xD9, 0x86 }; static const symbol s_42[] = { 0xD9, 0x87 }; static const symbol s_43[] = { 0xD9, 0x88 }; static const symbol s_44[] = { 0xD9, 0x89 }; static const symbol s_45[] = { 0xD9, 0x8A }; static const symbol s_46[] = { 0xD9, 0x84, 0xD8, 0xA7 }; static const symbol s_47[] = { 0xD9, 0x84, 0xD8, 0xA3 }; static const symbol s_48[] = { 0xD9, 0x84, 0xD8, 0xA5 }; static const symbol s_49[] = { 0xD9, 0x84, 0xD8, 0xA2 }; static const symbol s_50[] = { 0xD8, 0xA1 }; static const symbol s_51[] = { 0xD8, 0xA1 }; static const symbol s_52[] = { 0xD8, 0xA1 }; static const symbol s_53[] = { 0xD8, 0xA7 }; static const symbol s_54[] = { 0xD9, 0x88 }; static const symbol s_55[] = { 0xD9, 0x8A }; static const symbol s_56[] = { 0xD8, 0xA3 }; static const symbol s_57[] = { 0xD8, 0xA2 }; static const symbol s_58[] = { 0xD8, 0xA3 }; static const symbol s_59[] = { 0xD8, 0xA7 }; static const symbol s_60[] = { 0xD8, 0xA5 }; static const symbol s_61[] = { 0xD9, 0x81, 0xD8, 0xA7 }; static const symbol s_62[] = { 0xD9, 0x88, 0xD8, 0xA7 }; static const symbol s_63[] = { 0xD8, 0xA8, 0xD8, 0xA7 }; static const symbol s_64[] = { 0xD8, 0xA8 }; static const symbol s_65[] = { 0xD9, 0x83 }; static const symbol s_66[] = { 0xD9, 0x8A }; static const symbol s_67[] = { 0xD8, 0xAA }; static const symbol s_68[] = { 0xD9, 0x86 }; static const symbol s_69[] = { 0xD8, 0xA3 }; static const symbol s_70[] = { 0xD8, 0xA7, 0xD8, 0xB3, 0xD8, 0xAA }; static const symbol s_71[] = { 0xD9, 0x8A }; static int r_Normalize_pre(struct SN_env * z) { /* forwardmode */ int among_var; { int i; for (i = len_utf8(z->p); i > 0; i--) /* loop, line 259 */ { { int c1 = z->c; /* or, line 328 */ z->bra = z->c; /* [, line 261 */ among_var = find_among(z, a_0, 161); /* substring, line 261 */ if (!(among_var)) goto lab1; z->ket = z->c; /* ], line 261 */ switch (among_var) { /* among, line 261 */ case 0: goto lab1; case 1: { int ret = slice_del(z); /* delete, line 262 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 263 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 266 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 267 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_0); /* <-, line 270 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_1); /* <-, line 271 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 1, s_2); /* <-, line 272 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 1, s_3); /* <-, line 273 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 1, s_4); /* <-, line 274 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 1, s_5); /* <-, line 275 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 1, s_6); /* <-, line 276 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 1, s_7); /* <-, line 277 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_from_s(z, 1, s_8); /* <-, line 278 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 1, s_9); /* <-, line 279 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_del(z); /* delete, line 280 */ if (ret < 0) return ret; } break; case 16: { int ret = slice_from_s(z, 2, s_10); /* <-, line 283 */ if (ret < 0) return ret; } break; case 17: { int ret = slice_from_s(z, 2, s_11); /* <-, line 284 */ if (ret < 0) return ret; } break; case 18: { int ret = slice_from_s(z, 2, s_12); /* <-, line 285 */ if (ret < 0) return ret; } break; case 19: { int ret = slice_from_s(z, 2, s_13); /* <-, line 286 */ if (ret < 0) return ret; } break; case 20: { int ret = slice_from_s(z, 2, s_14); /* <-, line 287 */ if (ret < 0) return ret; } break; case 21: { int ret = slice_from_s(z, 2, s_15); /* <-, line 288 */ if (ret < 0) return ret; } break; case 22: { int ret = slice_from_s(z, 2, s_16); /* <-, line 289 */ if (ret < 0) return ret; } break; case 23: { int ret = slice_from_s(z, 2, s_17); /* <-, line 290 */ if (ret < 0) return ret; } break; case 24: { int ret = slice_from_s(z, 2, s_18); /* <-, line 291 */ if (ret < 0) return ret; } break; case 25: { int ret = slice_from_s(z, 2, s_19); /* <-, line 292 */ if (ret < 0) return ret; } break; case 26: { int ret = slice_from_s(z, 2, s_20); /* <-, line 293 */ if (ret < 0) return ret; } break; case 27: { int ret = slice_from_s(z, 2, s_21); /* <-, line 294 */ if (ret < 0) return ret; } break; case 28: { int ret = slice_from_s(z, 2, s_22); /* <-, line 295 */ if (ret < 0) return ret; } break; case 29: { int ret = slice_from_s(z, 2, s_23); /* <-, line 296 */ if (ret < 0) return ret; } break; case 30: { int ret = slice_from_s(z, 2, s_24); /* <-, line 297 */ if (ret < 0) return ret; } break; case 31: { int ret = slice_from_s(z, 2, s_25); /* <-, line 298 */ if (ret < 0) return ret; } break; case 32: { int ret = slice_from_s(z, 2, s_26); /* <-, line 299 */ if (ret < 0) return ret; } break; case 33: { int ret = slice_from_s(z, 2, s_27); /* <-, line 300 */ if (ret < 0) return ret; } break; case 34: { int ret = slice_from_s(z, 2, s_28); /* <-, line 301 */ if (ret < 0) return ret; } break; case 35: { int ret = slice_from_s(z, 2, s_29); /* <-, line 302 */ if (ret < 0) return ret; } break; case 36: { int ret = slice_from_s(z, 2, s_30); /* <-, line 303 */ if (ret < 0) return ret; } break; case 37: { int ret = slice_from_s(z, 2, s_31); /* <-, line 304 */ if (ret < 0) return ret; } break; case 38: { int ret = slice_from_s(z, 2, s_32); /* <-, line 305 */ if (ret < 0) return ret; } break; case 39: { int ret = slice_from_s(z, 2, s_33); /* <-, line 306 */ if (ret < 0) return ret; } break; case 40: { int ret = slice_from_s(z, 2, s_34); /* <-, line 307 */ if (ret < 0) return ret; } break; case 41: { int ret = slice_from_s(z, 2, s_35); /* <-, line 308 */ if (ret < 0) return ret; } break; case 42: { int ret = slice_from_s(z, 2, s_36); /* <-, line 309 */ if (ret < 0) return ret; } break; case 43: { int ret = slice_from_s(z, 2, s_37); /* <-, line 310 */ if (ret < 0) return ret; } break; case 44: { int ret = slice_from_s(z, 2, s_38); /* <-, line 311 */ if (ret < 0) return ret; } break; case 45: { int ret = slice_from_s(z, 2, s_39); /* <-, line 312 */ if (ret < 0) return ret; } break; case 46: { int ret = slice_from_s(z, 2, s_40); /* <-, line 313 */ if (ret < 0) return ret; } break; case 47: { int ret = slice_from_s(z, 2, s_41); /* <-, line 314 */ if (ret < 0) return ret; } break; case 48: { int ret = slice_from_s(z, 2, s_42); /* <-, line 315 */ if (ret < 0) return ret; } break; case 49: { int ret = slice_from_s(z, 2, s_43); /* <-, line 316 */ if (ret < 0) return ret; } break; case 50: { int ret = slice_from_s(z, 2, s_44); /* <-, line 317 */ if (ret < 0) return ret; } break; case 51: { int ret = slice_from_s(z, 2, s_45); /* <-, line 318 */ if (ret < 0) return ret; } break; case 52: { int ret = slice_from_s(z, 4, s_46); /* <-, line 321 */ if (ret < 0) return ret; } break; case 53: { int ret = slice_from_s(z, 4, s_47); /* <-, line 322 */ if (ret < 0) return ret; } break; case 54: { int ret = slice_from_s(z, 4, s_48); /* <-, line 323 */ if (ret < 0) return ret; } break; case 55: { int ret = slice_from_s(z, 4, s_49); /* <-, line 324 */ if (ret < 0) return ret; } break; } goto lab0; lab1: z->c = c1; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) return 0; z->c = ret; /* next, line 329 */ } } lab0: ; } } return 1; } static int r_Normalize_post(struct SN_env * z) { /* forwardmode */ int among_var; { int c1 = z->c; /* do, line 335 */ z->lb = z->c; z->c = z->l; /* backwards, line 337 */ z->ket = z->c; /* [, line 338 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 5 || !((124 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0; /* substring, line 338 */ among_var = find_among_b(z, a_1, 5); if (!(among_var)) goto lab0; z->bra = z->c; /* ], line 338 */ switch (among_var) { /* among, line 338 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 2, s_50); /* <-, line 339 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_51); /* <-, line 340 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_52); /* <-, line 341 */ if (ret < 0) return ret; } break; } z->c = z->lb; lab0: z->c = c1; } { int c2 = z->c; /* do, line 346 */ { int i; for (i = z->I[0]; i > 0; i--) /* loop, line 346 */ { { int c3 = z->c; /* or, line 355 */ z->bra = z->c; /* [, line 349 */ if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((124 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab3; /* substring, line 349 */ among_var = find_among(z, a_2, 5); if (!(among_var)) goto lab3; z->ket = z->c; /* ], line 349 */ switch (among_var) { /* among, line 349 */ case 0: goto lab3; case 1: { int ret = slice_from_s(z, 2, s_53); /* <-, line 350 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_54); /* <-, line 351 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_55); /* <-, line 352 */ if (ret < 0) return ret; } break; } goto lab2; lab3: z->c = c3; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab1; z->c = ret; /* next, line 356 */ } } lab2: ; } } lab1: z->c = c2; } return 1; } static int r_Checks1(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 362 */ z->bra = z->c; /* [, line 363 */ if (z->c + 3 >= z->l || (z->p[z->c + 3] != 132 && z->p[z->c + 3] != 167)) return 0; /* substring, line 363 */ among_var = find_among(z, a_3, 4); if (!(among_var)) return 0; z->ket = z->c; /* ], line 363 */ switch (among_var) { /* among, line 363 */ case 0: return 0; case 1: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 364 */ z->B[0] = 1; /* set is_noun, line 364 */ z->B[1] = 0; /* unset is_verb, line 364 */ z->B[2] = 1; /* set is_defined, line 364 */ break; case 2: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 365 */ z->B[0] = 1; /* set is_noun, line 365 */ z->B[1] = 0; /* unset is_verb, line 365 */ z->B[2] = 1; /* set is_defined, line 365 */ break; } return 1; } static int r_Prefix_Step1(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 372 */ z->bra = z->c; /* [, line 373 */ if (z->c + 3 >= z->l || z->p[z->c + 3] >> 5 != 5 || !((188 >> (z->p[z->c + 3] & 0x1f)) & 1)) return 0; /* substring, line 373 */ among_var = find_among(z, a_4, 5); if (!(among_var)) return 0; z->ket = z->c; /* ], line 373 */ switch (among_var) { /* among, line 373 */ case 0: return 0; case 1: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 374 */ { int ret = slice_from_s(z, 2, s_56); /* <-, line 374 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 375 */ { int ret = slice_from_s(z, 2, s_57); /* <-, line 375 */ if (ret < 0) return ret; } break; case 3: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 376 */ { int ret = slice_from_s(z, 2, s_58); /* <-, line 376 */ if (ret < 0) return ret; } break; case 4: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 377 */ { int ret = slice_from_s(z, 2, s_59); /* <-, line 377 */ if (ret < 0) return ret; } break; case 5: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 378 */ { int ret = slice_from_s(z, 2, s_60); /* <-, line 378 */ if (ret < 0) return ret; } break; } return 1; } static int r_Prefix_Step2(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 384 */ { int c1 = z->c; /* not, line 385 */ if (!(eq_s(z, 4, s_61))) goto lab0; /* literal, line 385 */ return 0; lab0: z->c = c1; } { int c2 = z->c; /* not, line 386 */ if (!(eq_s(z, 4, s_62))) goto lab1; /* literal, line 386 */ return 0; lab1: z->c = c2; } z->bra = z->c; /* [, line 387 */ if (z->c + 1 >= z->l || (z->p[z->c + 1] != 129 && z->p[z->c + 1] != 136)) return 0; /* substring, line 387 */ among_var = find_among(z, a_5, 2); if (!(among_var)) return 0; z->ket = z->c; /* ], line 387 */ switch (among_var) { /* among, line 387 */ case 0: return 0; case 1: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 388 */ { int ret = slice_del(z); /* delete, line 388 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 389 */ { int ret = slice_del(z); /* delete, line 389 */ if (ret < 0) return ret; } break; } return 1; } static int r_Prefix_Step3a_Noun(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 394 */ z->bra = z->c; /* [, line 395 */ if (z->c + 3 >= z->l || (z->p[z->c + 3] != 132 && z->p[z->c + 3] != 167)) return 0; /* substring, line 395 */ among_var = find_among(z, a_6, 4); if (!(among_var)) return 0; z->ket = z->c; /* ], line 395 */ switch (among_var) { /* among, line 395 */ case 0: return 0; case 1: if (!(z->I[0] > 5)) return 0; /* $word_len > , line 396 */ { int ret = slice_del(z); /* delete, line 396 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 397 */ { int ret = slice_del(z); /* delete, line 397 */ if (ret < 0) return ret; } break; } return 1; } static int r_Prefix_Step3b_Noun(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 402 */ { int c1 = z->c; /* not, line 403 */ if (!(eq_s(z, 4, s_63))) goto lab0; /* literal, line 403 */ return 0; lab0: z->c = c1; } z->bra = z->c; /* [, line 404 */ if (z->c + 1 >= z->l || (z->p[z->c + 1] != 168 && z->p[z->c + 1] != 131)) return 0; /* substring, line 404 */ among_var = find_among(z, a_7, 3); if (!(among_var)) return 0; z->ket = z->c; /* ], line 404 */ switch (among_var) { /* among, line 404 */ case 0: return 0; case 1: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 405 */ { int ret = slice_del(z); /* delete, line 405 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 407 */ { int ret = slice_from_s(z, 2, s_64); /* <-, line 407 */ if (ret < 0) return ret; } break; case 3: if (!(z->I[0] > 3)) return 0; /* $word_len > , line 408 */ { int ret = slice_from_s(z, 2, s_65); /* <-, line 408 */ if (ret < 0) return ret; } break; } return 1; } static int r_Prefix_Step3_Verb(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 414 */ z->bra = z->c; /* [, line 415 */ among_var = find_among(z, a_8, 4); /* substring, line 415 */ if (!(among_var)) return 0; z->ket = z->c; /* ], line 415 */ switch (among_var) { /* among, line 415 */ case 0: return 0; case 1: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 417 */ { int ret = slice_from_s(z, 2, s_66); /* <-, line 417 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 418 */ { int ret = slice_from_s(z, 2, s_67); /* <-, line 418 */ if (ret < 0) return ret; } break; case 3: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 419 */ { int ret = slice_from_s(z, 2, s_68); /* <-, line 419 */ if (ret < 0) return ret; } break; case 4: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 420 */ { int ret = slice_from_s(z, 2, s_69); /* <-, line 420 */ if (ret < 0) return ret; } break; } return 1; } static int r_Prefix_Step4_Verb(struct SN_env * z) { /* forwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 425 */ z->bra = z->c; /* [, line 426 */ if (z->c + 5 >= z->l || z->p[z->c + 5] != 170) return 0; /* substring, line 426 */ among_var = find_among(z, a_9, 3); if (!(among_var)) return 0; z->ket = z->c; /* ], line 426 */ switch (among_var) { /* among, line 426 */ case 0: return 0; case 1: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 427 */ z->B[1] = 1; /* set is_verb, line 427 */ z->B[0] = 0; /* unset is_noun, line 427 */ { int ret = slice_from_s(z, 6, s_70); /* <-, line 427 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step1a(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 435 */ z->ket = z->c; /* [, line 436 */ among_var = find_among_b(z, a_10, 10); /* substring, line 436 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 436 */ switch (among_var) { /* among, line 436 */ case 0: return 0; case 1: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 437 */ { int ret = slice_del(z); /* delete, line 437 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] >= 5)) return 0; /* $word_len >= , line 438 */ { int ret = slice_del(z); /* delete, line 438 */ if (ret < 0) return ret; } break; case 3: if (!(z->I[0] >= 6)) return 0; /* $word_len >= , line 439 */ { int ret = slice_del(z); /* delete, line 439 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step1b(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 443 */ z->ket = z->c; /* [, line 444 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 134) return 0; /* substring, line 444 */ among_var = find_among_b(z, a_11, 1); if (!(among_var)) return 0; z->bra = z->c; /* ], line 444 */ switch (among_var) { /* among, line 444 */ case 0: return 0; case 1: if (!(z->I[0] > 5)) return 0; /* $word_len > , line 445 */ { int ret = slice_del(z); /* delete, line 445 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step2a(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 450 */ z->ket = z->c; /* [, line 451 */ among_var = find_among_b(z, a_12, 3); /* substring, line 451 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 451 */ switch (among_var) { /* among, line 451 */ case 0: return 0; case 1: if (!(z->I[0] > 4)) return 0; /* $word_len > , line 452 */ { int ret = slice_del(z); /* delete, line 452 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step2b(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 457 */ z->ket = z->c; /* [, line 458 */ if (z->c - 3 <= z->lb || z->p[z->c - 1] != 170) return 0; /* substring, line 458 */ among_var = find_among_b(z, a_13, 1); if (!(among_var)) return 0; z->bra = z->c; /* ], line 458 */ switch (among_var) { /* among, line 458 */ case 0: return 0; case 1: if (!(z->I[0] >= 5)) return 0; /* $word_len >= , line 459 */ { int ret = slice_del(z); /* delete, line 459 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step2c1(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 464 */ z->ket = z->c; /* [, line 465 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 170) return 0; /* substring, line 465 */ among_var = find_among_b(z, a_14, 1); if (!(among_var)) return 0; z->bra = z->c; /* ], line 465 */ switch (among_var) { /* among, line 465 */ case 0: return 0; case 1: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 466 */ { int ret = slice_del(z); /* delete, line 466 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step2c2(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 470 */ z->ket = z->c; /* [, line 471 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 169) return 0; /* substring, line 471 */ among_var = find_among_b(z, a_15, 1); if (!(among_var)) return 0; z->bra = z->c; /* ], line 471 */ switch (among_var) { /* among, line 471 */ case 0: return 0; case 1: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 472 */ { int ret = slice_del(z); /* delete, line 472 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Noun_Step3(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 476 */ z->ket = z->c; /* [, line 477 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 138) return 0; /* substring, line 477 */ among_var = find_among_b(z, a_16, 1); if (!(among_var)) return 0; z->bra = z->c; /* ], line 477 */ switch (among_var) { /* among, line 477 */ case 0: return 0; case 1: if (!(z->I[0] >= 3)) return 0; /* $word_len >= , line 478 */ { int ret = slice_del(z); /* delete, line 478 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Verb_Step1(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 483 */ z->ket = z->c; /* [, line 484 */ among_var = find_among_b(z, a_17, 12); /* substring, line 484 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 484 */ switch (among_var) { /* among, line 484 */ case 0: return 0; case 1: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 485 */ { int ret = slice_del(z); /* delete, line 485 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] >= 5)) return 0; /* $word_len >= , line 486 */ { int ret = slice_del(z); /* delete, line 486 */ if (ret < 0) return ret; } break; case 3: if (!(z->I[0] >= 6)) return 0; /* $word_len >= , line 487 */ { int ret = slice_del(z); /* delete, line 487 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Verb_Step2a(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 491 */ z->ket = z->c; /* [, line 492 */ among_var = find_among_b(z, a_18, 11); /* substring, line 492 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 492 */ switch (among_var) { /* among, line 492 */ case 0: return 0; case 1: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 493 */ { int ret = slice_del(z); /* delete, line 493 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 494 */ { int ret = slice_del(z); /* delete, line 494 */ if (ret < 0) return ret; } break; case 3: if (!(z->I[0] >= 5)) return 0; /* $word_len >= , line 495 */ { int ret = slice_del(z); /* delete, line 495 */ if (ret < 0) return ret; } break; case 4: if (!(z->I[0] > 5)) return 0; /* $word_len > , line 496 */ { int ret = slice_del(z); /* delete, line 496 */ if (ret < 0) return ret; } break; case 5: if (!(z->I[0] >= 6)) return 0; /* $word_len >= , line 497 */ { int ret = slice_del(z); /* delete, line 497 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Verb_Step2b(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 502 */ z->ket = z->c; /* [, line 503 */ if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 133 && z->p[z->c - 1] != 167)) return 0; /* substring, line 503 */ among_var = find_among_b(z, a_19, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 503 */ switch (among_var) { /* among, line 503 */ case 0: return 0; case 1: if (!(z->I[0] >= 5)) return 0; /* $word_len >= , line 504 */ { int ret = slice_del(z); /* delete, line 504 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_Verb_Step2c(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 510 */ z->ket = z->c; /* [, line 511 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 136) return 0; /* substring, line 511 */ among_var = find_among_b(z, a_20, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 511 */ switch (among_var) { /* among, line 511 */ case 0: return 0; case 1: if (!(z->I[0] >= 4)) return 0; /* $word_len >= , line 512 */ { int ret = slice_del(z); /* delete, line 512 */ if (ret < 0) return ret; } break; case 2: if (!(z->I[0] >= 6)) return 0; /* $word_len >= , line 513 */ { int ret = slice_del(z); /* delete, line 513 */ if (ret < 0) return ret; } break; } return 1; } static int r_Suffix_All_alef_maqsura(struct SN_env * z) { /* backwardmode */ int among_var; z->I[0] = len_utf8(z->p); /* $word_len = , line 518 */ z->ket = z->c; /* [, line 519 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 137) return 0; /* substring, line 519 */ among_var = find_among_b(z, a_21, 1); if (!(among_var)) return 0; z->bra = z->c; /* ], line 519 */ switch (among_var) { /* among, line 519 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_71); /* <-, line 520 */ if (ret < 0) return ret; } break; } return 1; } extern int arabic_UTF_8_stem(struct SN_env * z) { /* forwardmode */ z->B[0] = 1; /* set is_noun, line 529 */ z->B[1] = 1; /* set is_verb, line 530 */ z->B[2] = 0; /* unset is_defined, line 531 */ { int c1 = z->c; /* do, line 534 */ { int ret = r_Checks1(z); /* call Checks1, line 534 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 537 */ { int ret = r_Normalize_pre(z); /* call Normalize_pre, line 537 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 540 */ { int m3 = z->l - z->c; (void)m3; /* do, line 542 */ { int m4 = z->l - z->c; (void)m4; /* or, line 556 */ if (!(z->B[1])) goto lab4; /* Boolean test is_verb, line 545 */ { int m5 = z->l - z->c; (void)m5; /* or, line 551 */ { int i = 1; while(1) { /* atleast, line 548 */ int m6 = z->l - z->c; (void)m6; { int ret = r_Suffix_Verb_Step1(z); /* call Suffix_Verb_Step1, line 548 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } i--; continue; lab7: z->c = z->l - m6; break; } if (i > 0) goto lab6; } { int m7 = z->l - z->c; (void)m7; /* or, line 549 */ { int ret = r_Suffix_Verb_Step2a(z); /* call Suffix_Verb_Step2a, line 549 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } goto lab8; lab9: z->c = z->l - m7; { int ret = r_Suffix_Verb_Step2c(z); /* call Suffix_Verb_Step2c, line 549 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } goto lab8; lab10: z->c = z->l - m7; { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) goto lab6; z->c = ret; /* next, line 549 */ } } lab8: goto lab5; lab6: z->c = z->l - m5; { int ret = r_Suffix_Verb_Step2b(z); /* call Suffix_Verb_Step2b, line 551 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } goto lab5; lab11: z->c = z->l - m5; { int ret = r_Suffix_Verb_Step2a(z); /* call Suffix_Verb_Step2a, line 552 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: goto lab3; lab4: z->c = z->l - m4; if (!(z->B[0])) goto lab12; /* Boolean test is_noun, line 557 */ { int m8 = z->l - z->c; (void)m8; /* try, line 560 */ { int m9 = z->l - z->c; (void)m9; /* or, line 562 */ { int ret = r_Suffix_Noun_Step2c2(z); /* call Suffix_Noun_Step2c2, line 561 */ if (ret == 0) goto lab15; if (ret < 0) return ret; } goto lab14; lab15: z->c = z->l - m9; /* not, line 562 */ if (!(z->B[2])) goto lab17; /* Boolean test is_defined, line 562 */ goto lab16; lab17: { int ret = r_Suffix_Noun_Step1a(z); /* call Suffix_Noun_Step1a, line 562 */ if (ret == 0) goto lab16; if (ret < 0) return ret; } { int m10 = z->l - z->c; (void)m10; /* or, line 564 */ { int ret = r_Suffix_Noun_Step2a(z); /* call Suffix_Noun_Step2a, line 563 */ if (ret == 0) goto lab19; if (ret < 0) return ret; } goto lab18; lab19: z->c = z->l - m10; { int ret = r_Suffix_Noun_Step2b(z); /* call Suffix_Noun_Step2b, line 564 */ if (ret == 0) goto lab20; if (ret < 0) return ret; } goto lab18; lab20: z->c = z->l - m10; { int ret = r_Suffix_Noun_Step2c1(z); /* call Suffix_Noun_Step2c1, line 565 */ if (ret == 0) goto lab21; if (ret < 0) return ret; } goto lab18; lab21: z->c = z->l - m10; { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) goto lab16; z->c = ret; /* next, line 566 */ } } lab18: goto lab14; lab16: z->c = z->l - m9; { int ret = r_Suffix_Noun_Step1b(z); /* call Suffix_Noun_Step1b, line 567 */ if (ret == 0) goto lab22; if (ret < 0) return ret; } { int m11 = z->l - z->c; (void)m11; /* or, line 569 */ { int ret = r_Suffix_Noun_Step2a(z); /* call Suffix_Noun_Step2a, line 568 */ if (ret == 0) goto lab24; if (ret < 0) return ret; } goto lab23; lab24: z->c = z->l - m11; { int ret = r_Suffix_Noun_Step2b(z); /* call Suffix_Noun_Step2b, line 569 */ if (ret == 0) goto lab25; if (ret < 0) return ret; } goto lab23; lab25: z->c = z->l - m11; { int ret = r_Suffix_Noun_Step2c1(z); /* call Suffix_Noun_Step2c1, line 570 */ if (ret == 0) goto lab22; if (ret < 0) return ret; } } lab23: goto lab14; lab22: z->c = z->l - m9; /* not, line 571 */ if (!(z->B[2])) goto lab27; /* Boolean test is_defined, line 571 */ goto lab26; lab27: { int ret = r_Suffix_Noun_Step2a(z); /* call Suffix_Noun_Step2a, line 571 */ if (ret == 0) goto lab26; if (ret < 0) return ret; } goto lab14; lab26: z->c = z->l - m9; { int ret = r_Suffix_Noun_Step2b(z); /* call Suffix_Noun_Step2b, line 572 */ if (ret == 0) { z->c = z->l - m8; goto lab13; } if (ret < 0) return ret; } } lab14: lab13: ; } { int ret = r_Suffix_Noun_Step3(z); /* call Suffix_Noun_Step3, line 574 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } goto lab3; lab12: z->c = z->l - m4; { int ret = r_Suffix_All_alef_maqsura(z); /* call Suffix_All_alef_maqsura, line 580 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } z->c = z->lb; { int c12 = z->c; /* do, line 585 */ { int c13 = z->c; /* try, line 586 */ { int ret = r_Prefix_Step1(z); /* call Prefix_Step1, line 586 */ if (ret == 0) { z->c = c13; goto lab29; } if (ret < 0) return ret; } lab29: ; } { int c14 = z->c; /* try, line 587 */ { int ret = r_Prefix_Step2(z); /* call Prefix_Step2, line 587 */ if (ret == 0) { z->c = c14; goto lab30; } if (ret < 0) return ret; } lab30: ; } { int c15 = z->c; /* or, line 589 */ { int ret = r_Prefix_Step3a_Noun(z); /* call Prefix_Step3a_Noun, line 588 */ if (ret == 0) goto lab32; if (ret < 0) return ret; } goto lab31; lab32: z->c = c15; if (!(z->B[0])) goto lab33; /* Boolean test is_noun, line 589 */ { int ret = r_Prefix_Step3b_Noun(z); /* call Prefix_Step3b_Noun, line 589 */ if (ret == 0) goto lab33; if (ret < 0) return ret; } goto lab31; lab33: z->c = c15; if (!(z->B[1])) goto lab28; /* Boolean test is_verb, line 590 */ { int c16 = z->c; /* try, line 590 */ { int ret = r_Prefix_Step3_Verb(z); /* call Prefix_Step3_Verb, line 590 */ if (ret == 0) { z->c = c16; goto lab34; } if (ret < 0) return ret; } lab34: ; } { int ret = r_Prefix_Step4_Verb(z); /* call Prefix_Step4_Verb, line 590 */ if (ret == 0) goto lab28; if (ret < 0) return ret; } } lab31: lab28: z->c = c12; } { int c17 = z->c; /* do, line 595 */ { int ret = r_Normalize_post(z); /* call Normalize_post, line 595 */ if (ret == 0) goto lab35; if (ret < 0) return ret; } lab35: z->c = c17; } return 1; } extern struct SN_env * arabic_UTF_8_create_env(void) { return SN_create_env(0, 1, 3); } extern void arabic_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_arabic.h000066400000000000000000000005231364126773500234030ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * arabic_UTF_8_create_env(void); extern void arabic_UTF_8_close_env(struct SN_env * z); extern int arabic_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_danish.c000066400000000000000000000273671364126773500234420ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int danish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_undouble(struct SN_env * z); static int r_other_suffix(struct SN_env * z); static int r_consonant_pair(struct SN_env * z); static int r_main_suffix(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * danish_UTF_8_create_env(void); extern void danish_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[3] = { 'h', 'e', 'd' }; static const symbol s_0_1[5] = { 'e', 't', 'h', 'e', 'd' }; static const symbol s_0_2[4] = { 'e', 'r', 'e', 'd' }; static const symbol s_0_3[1] = { 'e' }; static const symbol s_0_4[5] = { 'e', 'r', 'e', 'd', 'e' }; static const symbol s_0_5[4] = { 'e', 'n', 'd', 'e' }; static const symbol s_0_6[6] = { 'e', 'r', 'e', 'n', 'd', 'e' }; static const symbol s_0_7[3] = { 'e', 'n', 'e' }; static const symbol s_0_8[4] = { 'e', 'r', 'n', 'e' }; static const symbol s_0_9[3] = { 'e', 'r', 'e' }; static const symbol s_0_10[2] = { 'e', 'n' }; static const symbol s_0_11[5] = { 'h', 'e', 'd', 'e', 'n' }; static const symbol s_0_12[4] = { 'e', 'r', 'e', 'n' }; static const symbol s_0_13[2] = { 'e', 'r' }; static const symbol s_0_14[5] = { 'h', 'e', 'd', 'e', 'r' }; static const symbol s_0_15[4] = { 'e', 'r', 'e', 'r' }; static const symbol s_0_16[1] = { 's' }; static const symbol s_0_17[4] = { 'h', 'e', 'd', 's' }; static const symbol s_0_18[2] = { 'e', 's' }; static const symbol s_0_19[5] = { 'e', 'n', 'd', 'e', 's' }; static const symbol s_0_20[7] = { 'e', 'r', 'e', 'n', 'd', 'e', 's' }; static const symbol s_0_21[4] = { 'e', 'n', 'e', 's' }; static const symbol s_0_22[5] = { 'e', 'r', 'n', 'e', 's' }; static const symbol s_0_23[4] = { 'e', 'r', 'e', 's' }; static const symbol s_0_24[3] = { 'e', 'n', 's' }; static const symbol s_0_25[6] = { 'h', 'e', 'd', 'e', 'n', 's' }; static const symbol s_0_26[5] = { 'e', 'r', 'e', 'n', 's' }; static const symbol s_0_27[3] = { 'e', 'r', 's' }; static const symbol s_0_28[3] = { 'e', 't', 's' }; static const symbol s_0_29[5] = { 'e', 'r', 'e', 't', 's' }; static const symbol s_0_30[2] = { 'e', 't' }; static const symbol s_0_31[4] = { 'e', 'r', 'e', 't' }; static const struct among a_0[32] = { /* 0 */ { 3, s_0_0, -1, 1, 0}, /* 1 */ { 5, s_0_1, 0, 1, 0}, /* 2 */ { 4, s_0_2, -1, 1, 0}, /* 3 */ { 1, s_0_3, -1, 1, 0}, /* 4 */ { 5, s_0_4, 3, 1, 0}, /* 5 */ { 4, s_0_5, 3, 1, 0}, /* 6 */ { 6, s_0_6, 5, 1, 0}, /* 7 */ { 3, s_0_7, 3, 1, 0}, /* 8 */ { 4, s_0_8, 3, 1, 0}, /* 9 */ { 3, s_0_9, 3, 1, 0}, /* 10 */ { 2, s_0_10, -1, 1, 0}, /* 11 */ { 5, s_0_11, 10, 1, 0}, /* 12 */ { 4, s_0_12, 10, 1, 0}, /* 13 */ { 2, s_0_13, -1, 1, 0}, /* 14 */ { 5, s_0_14, 13, 1, 0}, /* 15 */ { 4, s_0_15, 13, 1, 0}, /* 16 */ { 1, s_0_16, -1, 2, 0}, /* 17 */ { 4, s_0_17, 16, 1, 0}, /* 18 */ { 2, s_0_18, 16, 1, 0}, /* 19 */ { 5, s_0_19, 18, 1, 0}, /* 20 */ { 7, s_0_20, 19, 1, 0}, /* 21 */ { 4, s_0_21, 18, 1, 0}, /* 22 */ { 5, s_0_22, 18, 1, 0}, /* 23 */ { 4, s_0_23, 18, 1, 0}, /* 24 */ { 3, s_0_24, 16, 1, 0}, /* 25 */ { 6, s_0_25, 24, 1, 0}, /* 26 */ { 5, s_0_26, 24, 1, 0}, /* 27 */ { 3, s_0_27, 16, 1, 0}, /* 28 */ { 3, s_0_28, 16, 1, 0}, /* 29 */ { 5, s_0_29, 28, 1, 0}, /* 30 */ { 2, s_0_30, -1, 1, 0}, /* 31 */ { 4, s_0_31, 30, 1, 0} }; static const symbol s_1_0[2] = { 'g', 'd' }; static const symbol s_1_1[2] = { 'd', 't' }; static const symbol s_1_2[2] = { 'g', 't' }; static const symbol s_1_3[2] = { 'k', 't' }; static const struct among a_1[4] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0}, /* 2 */ { 2, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0} }; static const symbol s_2_0[2] = { 'i', 'g' }; static const symbol s_2_1[3] = { 'l', 'i', 'g' }; static const symbol s_2_2[4] = { 'e', 'l', 'i', 'g' }; static const symbol s_2_3[3] = { 'e', 'l', 's' }; static const symbol s_2_4[5] = { 'l', 0xC3, 0xB8, 's', 't' }; static const struct among a_2[5] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 4, s_2_2, 1, 1, 0}, /* 3 */ { 3, s_2_3, -1, 1, 0}, /* 4 */ { 5, s_2_4, -1, 2, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; static const unsigned char g_s_ending[] = { 239, 254, 42, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16 }; static const symbol s_0[] = { 's', 't' }; static const symbol s_1[] = { 'i', 'g' }; static const symbol s_2[] = { 'l', 0xC3, 0xB8, 's' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 31 */ { int c_test1 = z->c; /* test, line 33 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, + 3); /* hop, line 33 */ if (ret < 0) return 0; z->c = ret; } z->I[1] = z->c; /* setmark x, line 33 */ z->c = c_test1; } if (out_grouping_U(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 34 */ { /* gopast */ /* non v, line 34 */ int ret = in_grouping_U(z, g_v, 97, 248, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 34 */ /* try, line 35 */ if (!(z->I[0] < z->I[1])) goto lab0; /* $p1 < , line 35 */ z->I[0] = z->I[1]; /* $p1 = , line 35 */ lab0: return 1; } static int r_main_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 41 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 41 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 41 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851440 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 41 */ among_var = find_among_b(z, a_0, 32); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 41 */ z->lb = mlimit1; } switch (among_var) { /* among, line 42 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 48 */ if (ret < 0) return ret; } break; case 2: if (in_grouping_b_U(z, g_s_ending, 97, 229, 0)) return 0; /* grouping s_ending, line 50 */ { int ret = slice_del(z); /* delete, line 50 */ if (ret < 0) return ret; } break; } return 1; } static int r_consonant_pair(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 55 */ { int m2 = z->l - z->c; (void)m2; /* setlimit, line 56 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 56 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; z->ket = z->c; /* [, line 56 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 116)) { z->lb = mlimit2; return 0; } /* substring, line 56 */ if (!(find_among_b(z, a_1, 4))) { z->lb = mlimit2; return 0; } z->bra = z->c; /* ], line 56 */ z->lb = mlimit2; } z->c = z->l - m_test1; } { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 62 */ } z->bra = z->c; /* ], line 62 */ { int ret = slice_del(z); /* delete, line 62 */ if (ret < 0) return ret; } return 1; } static int r_other_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* do, line 66 */ z->ket = z->c; /* [, line 66 */ if (!(eq_s_b(z, 2, s_0))) goto lab0; /* literal, line 66 */ z->bra = z->c; /* ], line 66 */ if (!(eq_s_b(z, 2, s_1))) goto lab0; /* literal, line 66 */ { int ret = slice_del(z); /* delete, line 66 */ if (ret < 0) return ret; } lab0: z->c = z->l - m1; } { int m2 = z->l - z->c; (void)m2; /* setlimit, line 67 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 67 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; z->ket = z->c; /* [, line 67 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit2; return 0; } /* substring, line 67 */ among_var = find_among_b(z, a_2, 5); if (!(among_var)) { z->lb = mlimit2; return 0; } z->bra = z->c; /* ], line 67 */ z->lb = mlimit2; } switch (among_var) { /* among, line 68 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 70 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* do, line 70 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 70 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m3; } break; case 2: { int ret = slice_from_s(z, 4, s_2); /* <-, line 72 */ if (ret < 0) return ret; } break; } return 1; } static int r_undouble(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 76 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 76 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 76 */ if (out_grouping_b_U(z, g_v, 97, 248, 0)) { z->lb = mlimit1; return 0; } /* non v, line 76 */ z->bra = z->c; /* ], line 76 */ z->S[0] = slice_to(z, z->S[0]); /* -> ch, line 76 */ if (z->S[0] == 0) return -1; /* -> ch, line 76 */ z->lb = mlimit1; } if (!(eq_v_b(z, z->S[0]))) return 0; /* name ch, line 77 */ { int ret = slice_del(z); /* delete, line 78 */ if (ret < 0) return ret; } return 1; } extern int danish_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 84 */ { int ret = r_mark_regions(z); /* call mark_regions, line 84 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 85 */ { int m2 = z->l - z->c; (void)m2; /* do, line 86 */ { int ret = r_main_suffix(z); /* call main_suffix, line 86 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 87 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 87 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 88 */ { int ret = r_other_suffix(z); /* call other_suffix, line 88 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 89 */ { int ret = r_undouble(z); /* call undouble, line 89 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = z->l - m5; } z->c = z->lb; return 1; } extern struct SN_env * danish_UTF_8_create_env(void) { return SN_create_env(1, 2, 0); } extern void danish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 1); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_danish.h000066400000000000000000000005231364126773500234300ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * danish_UTF_8_create_env(void); extern void danish_UTF_8_close_env(struct SN_env * z); extern int danish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_dutch.c000066400000000000000000000531621364126773500232730ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int dutch_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_standard_suffix(struct SN_env * z); static int r_undouble(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_en_ending(struct SN_env * z); static int r_e_ending(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * dutch_UTF_8_create_env(void); extern void dutch_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[2] = { 0xC3, 0xA1 }; static const symbol s_0_2[2] = { 0xC3, 0xA4 }; static const symbol s_0_3[2] = { 0xC3, 0xA9 }; static const symbol s_0_4[2] = { 0xC3, 0xAB }; static const symbol s_0_5[2] = { 0xC3, 0xAD }; static const symbol s_0_6[2] = { 0xC3, 0xAF }; static const symbol s_0_7[2] = { 0xC3, 0xB3 }; static const symbol s_0_8[2] = { 0xC3, 0xB6 }; static const symbol s_0_9[2] = { 0xC3, 0xBA }; static const symbol s_0_10[2] = { 0xC3, 0xBC }; static const struct among a_0[11] = { /* 0 */ { 0, 0, -1, 6, 0}, /* 1 */ { 2, s_0_1, 0, 1, 0}, /* 2 */ { 2, s_0_2, 0, 1, 0}, /* 3 */ { 2, s_0_3, 0, 2, 0}, /* 4 */ { 2, s_0_4, 0, 2, 0}, /* 5 */ { 2, s_0_5, 0, 3, 0}, /* 6 */ { 2, s_0_6, 0, 3, 0}, /* 7 */ { 2, s_0_7, 0, 4, 0}, /* 8 */ { 2, s_0_8, 0, 4, 0}, /* 9 */ { 2, s_0_9, 0, 5, 0}, /* 10 */ { 2, s_0_10, 0, 5, 0} }; static const symbol s_1_1[1] = { 'I' }; static const symbol s_1_2[1] = { 'Y' }; static const struct among a_1[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_1_1, 0, 2, 0}, /* 2 */ { 1, s_1_2, 0, 1, 0} }; static const symbol s_2_0[2] = { 'd', 'd' }; static const symbol s_2_1[2] = { 'k', 'k' }; static const symbol s_2_2[2] = { 't', 't' }; static const struct among a_2[3] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 2, s_2_2, -1, -1, 0} }; static const symbol s_3_0[3] = { 'e', 'n', 'e' }; static const symbol s_3_1[2] = { 's', 'e' }; static const symbol s_3_2[2] = { 'e', 'n' }; static const symbol s_3_3[5] = { 'h', 'e', 'd', 'e', 'n' }; static const symbol s_3_4[1] = { 's' }; static const struct among a_3[5] = { /* 0 */ { 3, s_3_0, -1, 2, 0}, /* 1 */ { 2, s_3_1, -1, 3, 0}, /* 2 */ { 2, s_3_2, -1, 2, 0}, /* 3 */ { 5, s_3_3, 2, 1, 0}, /* 4 */ { 1, s_3_4, -1, 3, 0} }; static const symbol s_4_0[3] = { 'e', 'n', 'd' }; static const symbol s_4_1[2] = { 'i', 'g' }; static const symbol s_4_2[3] = { 'i', 'n', 'g' }; static const symbol s_4_3[4] = { 'l', 'i', 'j', 'k' }; static const symbol s_4_4[4] = { 'b', 'a', 'a', 'r' }; static const symbol s_4_5[3] = { 'b', 'a', 'r' }; static const struct among a_4[6] = { /* 0 */ { 3, s_4_0, -1, 1, 0}, /* 1 */ { 2, s_4_1, -1, 2, 0}, /* 2 */ { 3, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 3, 0}, /* 4 */ { 4, s_4_4, -1, 4, 0}, /* 5 */ { 3, s_4_5, -1, 5, 0} }; static const symbol s_5_0[2] = { 'a', 'a' }; static const symbol s_5_1[2] = { 'e', 'e' }; static const symbol s_5_2[2] = { 'o', 'o' }; static const symbol s_5_3[2] = { 'u', 'u' }; static const struct among a_5[4] = { /* 0 */ { 2, s_5_0, -1, -1, 0}, /* 1 */ { 2, s_5_1, -1, -1, 0}, /* 2 */ { 2, s_5_2, -1, -1, 0}, /* 3 */ { 2, s_5_3, -1, -1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const unsigned char g_v_I[] = { 1, 0, 0, 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const unsigned char g_v_j[] = { 17, 67, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const symbol s_0[] = { 'a' }; static const symbol s_1[] = { 'e' }; static const symbol s_2[] = { 'i' }; static const symbol s_3[] = { 'o' }; static const symbol s_4[] = { 'u' }; static const symbol s_5[] = { 'Y' }; static const symbol s_6[] = { 'I' }; static const symbol s_7[] = { 'Y' }; static const symbol s_8[] = { 'y' }; static const symbol s_9[] = { 'i' }; static const symbol s_10[] = { 'g', 'e', 'm' }; static const symbol s_11[] = { 'h', 'e', 'i', 'd' }; static const symbol s_12[] = { 'h', 'e', 'i', 'd' }; static const symbol s_13[] = { 'e', 'n' }; static const symbol s_14[] = { 'i', 'g' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ int among_var; { int c_test1 = z->c; /* test, line 42 */ while(1) { /* repeat, line 42 */ int c2 = z->c; z->bra = z->c; /* [, line 43 */ if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((340306450 >> (z->p[z->c + 1] & 0x1f)) & 1)) among_var = 6; else /* substring, line 43 */ among_var = find_among(z, a_0, 11); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 43 */ switch (among_var) { /* among, line 43 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 45 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 47 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_2); /* <-, line 49 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_3); /* <-, line 51 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_4); /* <-, line 53 */ if (ret < 0) return ret; } break; case 6: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 54 */ } break; } continue; lab0: z->c = c2; break; } z->c = c_test1; } { int c3 = z->c; /* try, line 57 */ z->bra = z->c; /* [, line 57 */ if (z->c == z->l || z->p[z->c] != 'y') { z->c = c3; goto lab1; } /* literal, line 57 */ z->c++; z->ket = z->c; /* ], line 57 */ { int ret = slice_from_s(z, 1, s_5); /* <-, line 57 */ if (ret < 0) return ret; } lab1: ; } while(1) { /* repeat, line 58 */ int c4 = z->c; while(1) { /* goto, line 58 */ int c5 = z->c; if (in_grouping_U(z, g_v, 97, 232, 0)) goto lab3; /* grouping v, line 59 */ z->bra = z->c; /* [, line 59 */ { int c6 = z->c; /* or, line 59 */ if (z->c == z->l || z->p[z->c] != 'i') goto lab5; /* literal, line 59 */ z->c++; z->ket = z->c; /* ], line 59 */ if (in_grouping_U(z, g_v, 97, 232, 0)) goto lab5; /* grouping v, line 59 */ { int ret = slice_from_s(z, 1, s_6); /* <-, line 59 */ if (ret < 0) return ret; } goto lab4; lab5: z->c = c6; if (z->c == z->l || z->p[z->c] != 'y') goto lab3; /* literal, line 60 */ z->c++; z->ket = z->c; /* ], line 60 */ { int ret = slice_from_s(z, 1, s_7); /* <-, line 60 */ if (ret < 0) return ret; } } lab4: z->c = c5; break; lab3: z->c = c5; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab2; z->c = ret; /* goto, line 58 */ } } continue; lab2: z->c = c4; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 66 */ z->I[1] = z->l; /* $p2 = , line 67 */ { /* gopast */ /* grouping v, line 69 */ int ret = out_grouping_U(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 69 */ int ret = in_grouping_U(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 69 */ /* try, line 70 */ if (!(z->I[0] < 3)) goto lab0; /* $p1 < , line 70 */ z->I[0] = 3; /* $p1 = , line 70 */ lab0: { /* gopast */ /* grouping v, line 71 */ int ret = out_grouping_U(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 71 */ int ret = in_grouping_U(z, g_v, 97, 232, 1); if (ret < 0) return 0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 71 */ return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 75 */ int c1 = z->c; z->bra = z->c; /* [, line 77 */ if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 89)) among_var = 3; else /* substring, line 77 */ among_var = find_among(z, a_1, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 77 */ switch (among_var) { /* among, line 77 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_8); /* <-, line 78 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_9); /* <-, line 79 */ if (ret < 0) return ret; } break; case 3: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 80 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 87 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 88 */ return 1; } static int r_undouble(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 91 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1050640 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 91 */ if (!(find_among_b(z, a_2, 3))) return 0; z->c = z->l - m_test1; } z->ket = z->c; /* [, line 91 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 91 */ } z->bra = z->c; /* ], line 91 */ { int ret = slice_del(z); /* delete, line 91 */ if (ret < 0) return ret; } return 1; } static int r_e_ending(struct SN_env * z) { /* backwardmode */ z->B[0] = 0; /* unset e_found, line 95 */ z->ket = z->c; /* [, line 96 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 96 */ z->c--; z->bra = z->c; /* ], line 96 */ { int ret = r_R1(z); /* call R1, line 96 */ if (ret <= 0) return ret; } { int m_test1 = z->l - z->c; /* test, line 96 */ if (out_grouping_b_U(z, g_v, 97, 232, 0)) return 0; /* non v, line 96 */ z->c = z->l - m_test1; } { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } z->B[0] = 1; /* set e_found, line 97 */ { int ret = r_undouble(z); /* call undouble, line 98 */ if (ret <= 0) return ret; } return 1; } static int r_en_ending(struct SN_env * z) { /* backwardmode */ { int ret = r_R1(z); /* call R1, line 102 */ if (ret <= 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* and, line 102 */ if (out_grouping_b_U(z, g_v, 97, 232, 0)) return 0; /* non v, line 102 */ z->c = z->l - m1; { int m2 = z->l - z->c; (void)m2; /* not, line 102 */ if (!(eq_s_b(z, 3, s_10))) goto lab0; /* literal, line 102 */ return 0; lab0: z->c = z->l - m2; } } { int ret = slice_del(z); /* delete, line 102 */ if (ret < 0) return ret; } { int ret = r_undouble(z); /* call undouble, line 103 */ if (ret <= 0) return ret; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* do, line 107 */ z->ket = z->c; /* [, line 108 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((540704 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0; /* substring, line 108 */ among_var = find_among_b(z, a_3, 5); if (!(among_var)) goto lab0; z->bra = z->c; /* ], line 108 */ switch (among_var) { /* among, line 108 */ case 0: goto lab0; case 1: { int ret = r_R1(z); /* call R1, line 110 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } { int ret = slice_from_s(z, 4, s_11); /* <-, line 110 */ if (ret < 0) return ret; } break; case 2: { int ret = r_en_ending(z); /* call en_ending, line 113 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } break; case 3: { int ret = r_R1(z); /* call R1, line 116 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } if (out_grouping_b_U(z, g_v_j, 97, 232, 0)) goto lab0; /* non v_j, line 116 */ { int ret = slice_del(z); /* delete, line 116 */ if (ret < 0) return ret; } break; } lab0: z->c = z->l - m1; } { int m2 = z->l - z->c; (void)m2; /* do, line 120 */ { int ret = r_e_ending(z); /* call e_ending, line 120 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 122 */ z->ket = z->c; /* [, line 122 */ if (!(eq_s_b(z, 4, s_12))) goto lab2; /* literal, line 122 */ z->bra = z->c; /* ], line 122 */ { int ret = r_R2(z); /* call R2, line 122 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* not, line 122 */ if (z->c <= z->lb || z->p[z->c - 1] != 'c') goto lab3; /* literal, line 122 */ z->c--; goto lab2; lab3: z->c = z->l - m4; } { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 123 */ if (!(eq_s_b(z, 2, s_13))) goto lab2; /* literal, line 123 */ z->bra = z->c; /* ], line 123 */ { int ret = r_en_ending(z); /* call en_ending, line 123 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m5 = z->l - z->c; (void)m5; /* do, line 126 */ z->ket = z->c; /* [, line 127 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((264336 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab4; /* substring, line 127 */ among_var = find_among_b(z, a_4, 6); if (!(among_var)) goto lab4; z->bra = z->c; /* ], line 127 */ switch (among_var) { /* among, line 127 */ case 0: goto lab4; case 1: { int ret = r_R2(z); /* call R2, line 129 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 129 */ if (ret < 0) return ret; } { int m6 = z->l - z->c; (void)m6; /* or, line 130 */ z->ket = z->c; /* [, line 130 */ if (!(eq_s_b(z, 2, s_14))) goto lab6; /* literal, line 130 */ z->bra = z->c; /* ], line 130 */ { int ret = r_R2(z); /* call R2, line 130 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } { int m7 = z->l - z->c; (void)m7; /* not, line 130 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab7; /* literal, line 130 */ z->c--; goto lab6; lab7: z->c = z->l - m7; } { int ret = slice_del(z); /* delete, line 130 */ if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_undouble(z); /* call undouble, line 130 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: break; case 2: { int ret = r_R2(z); /* call R2, line 133 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* not, line 133 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab8; /* literal, line 133 */ z->c--; goto lab4; lab8: z->c = z->l - m8; } { int ret = slice_del(z); /* delete, line 133 */ if (ret < 0) return ret; } break; case 3: { int ret = r_R2(z); /* call R2, line 136 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 136 */ if (ret < 0) return ret; } { int ret = r_e_ending(z); /* call e_ending, line 136 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 139 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 139 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 142 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } if (!(z->B[0])) goto lab4; /* Boolean test e_found, line 142 */ { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } break; } lab4: z->c = z->l - m5; } { int m9 = z->l - z->c; (void)m9; /* do, line 146 */ if (out_grouping_b_U(z, g_v_I, 73, 232, 0)) goto lab9; /* non v_I, line 147 */ { int m_test10 = z->l - z->c; /* test, line 148 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((2129954 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab9; /* among, line 149 */ if (!(find_among_b(z, a_5, 4))) goto lab9; if (out_grouping_b_U(z, g_v, 97, 232, 0)) goto lab9; /* non v, line 150 */ z->c = z->l - m_test10; } z->ket = z->c; /* [, line 152 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) goto lab9; z->c = ret; /* next, line 152 */ } z->bra = z->c; /* ], line 152 */ { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } lab9: z->c = z->l - m9; } return 1; } extern int dutch_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 159 */ { int ret = r_prelude(z); /* call prelude, line 159 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 160 */ { int ret = r_mark_regions(z); /* call mark_regions, line 160 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 161 */ { int m3 = z->l - z->c; (void)m3; /* do, line 162 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 162 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } z->c = z->lb; { int c4 = z->c; /* do, line 163 */ { int ret = r_postlude(z); /* call postlude, line 163 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = c4; } return 1; } extern struct SN_env * dutch_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } extern void dutch_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_dutch.h000066400000000000000000000005201364126773500232660ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * dutch_UTF_8_create_env(void); extern void dutch_UTF_8_close_env(struct SN_env * z); extern int dutch_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_english.c000066400000000000000000001161151364126773500236130ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int english_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_exception2(struct SN_env * z); static int r_exception1(struct SN_env * z); static int r_Step_5(struct SN_env * z); static int r_Step_4(struct SN_env * z); static int r_Step_3(struct SN_env * z); static int r_Step_2(struct SN_env * z); static int r_Step_1c(struct SN_env * z); static int r_Step_1b(struct SN_env * z); static int r_Step_1a(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_shortv(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * english_UTF_8_create_env(void); extern void english_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[5] = { 'a', 'r', 's', 'e', 'n' }; static const symbol s_0_1[6] = { 'c', 'o', 'm', 'm', 'u', 'n' }; static const symbol s_0_2[5] = { 'g', 'e', 'n', 'e', 'r' }; static const struct among a_0[3] = { /* 0 */ { 5, s_0_0, -1, -1, 0}, /* 1 */ { 6, s_0_1, -1, -1, 0}, /* 2 */ { 5, s_0_2, -1, -1, 0} }; static const symbol s_1_0[1] = { '\'' }; static const symbol s_1_1[3] = { '\'', 's', '\'' }; static const symbol s_1_2[2] = { '\'', 's' }; static const struct among a_1[3] = { /* 0 */ { 1, s_1_0, -1, 1, 0}, /* 1 */ { 3, s_1_1, 0, 1, 0}, /* 2 */ { 2, s_1_2, -1, 1, 0} }; static const symbol s_2_0[3] = { 'i', 'e', 'd' }; static const symbol s_2_1[1] = { 's' }; static const symbol s_2_2[3] = { 'i', 'e', 's' }; static const symbol s_2_3[4] = { 's', 's', 'e', 's' }; static const symbol s_2_4[2] = { 's', 's' }; static const symbol s_2_5[2] = { 'u', 's' }; static const struct among a_2[6] = { /* 0 */ { 3, s_2_0, -1, 2, 0}, /* 1 */ { 1, s_2_1, -1, 3, 0}, /* 2 */ { 3, s_2_2, 1, 2, 0}, /* 3 */ { 4, s_2_3, 1, 1, 0}, /* 4 */ { 2, s_2_4, 1, -1, 0}, /* 5 */ { 2, s_2_5, 1, -1, 0} }; static const symbol s_3_1[2] = { 'b', 'b' }; static const symbol s_3_2[2] = { 'd', 'd' }; static const symbol s_3_3[2] = { 'f', 'f' }; static const symbol s_3_4[2] = { 'g', 'g' }; static const symbol s_3_5[2] = { 'b', 'l' }; static const symbol s_3_6[2] = { 'm', 'm' }; static const symbol s_3_7[2] = { 'n', 'n' }; static const symbol s_3_8[2] = { 'p', 'p' }; static const symbol s_3_9[2] = { 'r', 'r' }; static const symbol s_3_10[2] = { 'a', 't' }; static const symbol s_3_11[2] = { 't', 't' }; static const symbol s_3_12[2] = { 'i', 'z' }; static const struct among a_3[13] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_3_1, 0, 2, 0}, /* 2 */ { 2, s_3_2, 0, 2, 0}, /* 3 */ { 2, s_3_3, 0, 2, 0}, /* 4 */ { 2, s_3_4, 0, 2, 0}, /* 5 */ { 2, s_3_5, 0, 1, 0}, /* 6 */ { 2, s_3_6, 0, 2, 0}, /* 7 */ { 2, s_3_7, 0, 2, 0}, /* 8 */ { 2, s_3_8, 0, 2, 0}, /* 9 */ { 2, s_3_9, 0, 2, 0}, /* 10 */ { 2, s_3_10, 0, 1, 0}, /* 11 */ { 2, s_3_11, 0, 2, 0}, /* 12 */ { 2, s_3_12, 0, 1, 0} }; static const symbol s_4_0[2] = { 'e', 'd' }; static const symbol s_4_1[3] = { 'e', 'e', 'd' }; static const symbol s_4_2[3] = { 'i', 'n', 'g' }; static const symbol s_4_3[4] = { 'e', 'd', 'l', 'y' }; static const symbol s_4_4[5] = { 'e', 'e', 'd', 'l', 'y' }; static const symbol s_4_5[5] = { 'i', 'n', 'g', 'l', 'y' }; static const struct among a_4[6] = { /* 0 */ { 2, s_4_0, -1, 2, 0}, /* 1 */ { 3, s_4_1, 0, 1, 0}, /* 2 */ { 3, s_4_2, -1, 2, 0}, /* 3 */ { 4, s_4_3, -1, 2, 0}, /* 4 */ { 5, s_4_4, 3, 1, 0}, /* 5 */ { 5, s_4_5, -1, 2, 0} }; static const symbol s_5_0[4] = { 'a', 'n', 'c', 'i' }; static const symbol s_5_1[4] = { 'e', 'n', 'c', 'i' }; static const symbol s_5_2[3] = { 'o', 'g', 'i' }; static const symbol s_5_3[2] = { 'l', 'i' }; static const symbol s_5_4[3] = { 'b', 'l', 'i' }; static const symbol s_5_5[4] = { 'a', 'b', 'l', 'i' }; static const symbol s_5_6[4] = { 'a', 'l', 'l', 'i' }; static const symbol s_5_7[5] = { 'f', 'u', 'l', 'l', 'i' }; static const symbol s_5_8[6] = { 'l', 'e', 's', 's', 'l', 'i' }; static const symbol s_5_9[5] = { 'o', 'u', 's', 'l', 'i' }; static const symbol s_5_10[5] = { 'e', 'n', 't', 'l', 'i' }; static const symbol s_5_11[5] = { 'a', 'l', 'i', 't', 'i' }; static const symbol s_5_12[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; static const symbol s_5_13[5] = { 'i', 'v', 'i', 't', 'i' }; static const symbol s_5_14[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_5_15[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_5_16[5] = { 'a', 'l', 'i', 's', 'm' }; static const symbol s_5_17[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_5_18[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; static const symbol s_5_19[4] = { 'i', 'z', 'e', 'r' }; static const symbol s_5_20[4] = { 'a', 't', 'o', 'r' }; static const symbol s_5_21[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; static const symbol s_5_22[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; static const symbol s_5_23[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; static const struct among a_5[24] = { /* 0 */ { 4, s_5_0, -1, 3, 0}, /* 1 */ { 4, s_5_1, -1, 2, 0}, /* 2 */ { 3, s_5_2, -1, 13, 0}, /* 3 */ { 2, s_5_3, -1, 16, 0}, /* 4 */ { 3, s_5_4, 3, 12, 0}, /* 5 */ { 4, s_5_5, 4, 4, 0}, /* 6 */ { 4, s_5_6, 3, 8, 0}, /* 7 */ { 5, s_5_7, 3, 14, 0}, /* 8 */ { 6, s_5_8, 3, 15, 0}, /* 9 */ { 5, s_5_9, 3, 10, 0}, /* 10 */ { 5, s_5_10, 3, 5, 0}, /* 11 */ { 5, s_5_11, -1, 8, 0}, /* 12 */ { 6, s_5_12, -1, 12, 0}, /* 13 */ { 5, s_5_13, -1, 11, 0}, /* 14 */ { 6, s_5_14, -1, 1, 0}, /* 15 */ { 7, s_5_15, 14, 7, 0}, /* 16 */ { 5, s_5_16, -1, 8, 0}, /* 17 */ { 5, s_5_17, -1, 7, 0}, /* 18 */ { 7, s_5_18, 17, 6, 0}, /* 19 */ { 4, s_5_19, -1, 6, 0}, /* 20 */ { 4, s_5_20, -1, 7, 0}, /* 21 */ { 7, s_5_21, -1, 11, 0}, /* 22 */ { 7, s_5_22, -1, 9, 0}, /* 23 */ { 7, s_5_23, -1, 10, 0} }; static const symbol s_6_0[5] = { 'i', 'c', 'a', 't', 'e' }; static const symbol s_6_1[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_6_2[5] = { 'a', 'l', 'i', 'z', 'e' }; static const symbol s_6_3[5] = { 'i', 'c', 'i', 't', 'i' }; static const symbol s_6_4[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_6_5[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_6_6[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_6_7[3] = { 'f', 'u', 'l' }; static const symbol s_6_8[4] = { 'n', 'e', 's', 's' }; static const struct among a_6[9] = { /* 0 */ { 5, s_6_0, -1, 4, 0}, /* 1 */ { 5, s_6_1, -1, 6, 0}, /* 2 */ { 5, s_6_2, -1, 3, 0}, /* 3 */ { 5, s_6_3, -1, 4, 0}, /* 4 */ { 4, s_6_4, -1, 4, 0}, /* 5 */ { 6, s_6_5, -1, 1, 0}, /* 6 */ { 7, s_6_6, 5, 2, 0}, /* 7 */ { 3, s_6_7, -1, 5, 0}, /* 8 */ { 4, s_6_8, -1, 5, 0} }; static const symbol s_7_0[2] = { 'i', 'c' }; static const symbol s_7_1[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_7_2[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_7_3[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_7_4[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_7_5[3] = { 'a', 't', 'e' }; static const symbol s_7_6[3] = { 'i', 'v', 'e' }; static const symbol s_7_7[3] = { 'i', 'z', 'e' }; static const symbol s_7_8[3] = { 'i', 't', 'i' }; static const symbol s_7_9[2] = { 'a', 'l' }; static const symbol s_7_10[3] = { 'i', 's', 'm' }; static const symbol s_7_11[3] = { 'i', 'o', 'n' }; static const symbol s_7_12[2] = { 'e', 'r' }; static const symbol s_7_13[3] = { 'o', 'u', 's' }; static const symbol s_7_14[3] = { 'a', 'n', 't' }; static const symbol s_7_15[3] = { 'e', 'n', 't' }; static const symbol s_7_16[4] = { 'm', 'e', 'n', 't' }; static const symbol s_7_17[5] = { 'e', 'm', 'e', 'n', 't' }; static const struct among a_7[18] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 4, s_7_1, -1, 1, 0}, /* 2 */ { 4, s_7_2, -1, 1, 0}, /* 3 */ { 4, s_7_3, -1, 1, 0}, /* 4 */ { 4, s_7_4, -1, 1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 3, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 3, s_7_8, -1, 1, 0}, /* 9 */ { 2, s_7_9, -1, 1, 0}, /* 10 */ { 3, s_7_10, -1, 1, 0}, /* 11 */ { 3, s_7_11, -1, 2, 0}, /* 12 */ { 2, s_7_12, -1, 1, 0}, /* 13 */ { 3, s_7_13, -1, 1, 0}, /* 14 */ { 3, s_7_14, -1, 1, 0}, /* 15 */ { 3, s_7_15, -1, 1, 0}, /* 16 */ { 4, s_7_16, 15, 1, 0}, /* 17 */ { 5, s_7_17, 16, 1, 0} }; static const symbol s_8_0[1] = { 'e' }; static const symbol s_8_1[1] = { 'l' }; static const struct among a_8[2] = { /* 0 */ { 1, s_8_0, -1, 1, 0}, /* 1 */ { 1, s_8_1, -1, 2, 0} }; static const symbol s_9_0[7] = { 's', 'u', 'c', 'c', 'e', 'e', 'd' }; static const symbol s_9_1[7] = { 'p', 'r', 'o', 'c', 'e', 'e', 'd' }; static const symbol s_9_2[6] = { 'e', 'x', 'c', 'e', 'e', 'd' }; static const symbol s_9_3[7] = { 'c', 'a', 'n', 'n', 'i', 'n', 'g' }; static const symbol s_9_4[6] = { 'i', 'n', 'n', 'i', 'n', 'g' }; static const symbol s_9_5[7] = { 'e', 'a', 'r', 'r', 'i', 'n', 'g' }; static const symbol s_9_6[7] = { 'h', 'e', 'r', 'r', 'i', 'n', 'g' }; static const symbol s_9_7[6] = { 'o', 'u', 't', 'i', 'n', 'g' }; static const struct among a_9[8] = { /* 0 */ { 7, s_9_0, -1, -1, 0}, /* 1 */ { 7, s_9_1, -1, -1, 0}, /* 2 */ { 6, s_9_2, -1, -1, 0}, /* 3 */ { 7, s_9_3, -1, -1, 0}, /* 4 */ { 6, s_9_4, -1, -1, 0}, /* 5 */ { 7, s_9_5, -1, -1, 0}, /* 6 */ { 7, s_9_6, -1, -1, 0}, /* 7 */ { 6, s_9_7, -1, -1, 0} }; static const symbol s_10_0[5] = { 'a', 'n', 'd', 'e', 's' }; static const symbol s_10_1[5] = { 'a', 't', 'l', 'a', 's' }; static const symbol s_10_2[4] = { 'b', 'i', 'a', 's' }; static const symbol s_10_3[6] = { 'c', 'o', 's', 'm', 'o', 's' }; static const symbol s_10_4[5] = { 'd', 'y', 'i', 'n', 'g' }; static const symbol s_10_5[5] = { 'e', 'a', 'r', 'l', 'y' }; static const symbol s_10_6[6] = { 'g', 'e', 'n', 't', 'l', 'y' }; static const symbol s_10_7[4] = { 'h', 'o', 'w', 'e' }; static const symbol s_10_8[4] = { 'i', 'd', 'l', 'y' }; static const symbol s_10_9[5] = { 'l', 'y', 'i', 'n', 'g' }; static const symbol s_10_10[4] = { 'n', 'e', 'w', 's' }; static const symbol s_10_11[4] = { 'o', 'n', 'l', 'y' }; static const symbol s_10_12[6] = { 's', 'i', 'n', 'g', 'l', 'y' }; static const symbol s_10_13[5] = { 's', 'k', 'i', 'e', 's' }; static const symbol s_10_14[4] = { 's', 'k', 'i', 's' }; static const symbol s_10_15[3] = { 's', 'k', 'y' }; static const symbol s_10_16[5] = { 't', 'y', 'i', 'n', 'g' }; static const symbol s_10_17[4] = { 'u', 'g', 'l', 'y' }; static const struct among a_10[18] = { /* 0 */ { 5, s_10_0, -1, -1, 0}, /* 1 */ { 5, s_10_1, -1, -1, 0}, /* 2 */ { 4, s_10_2, -1, -1, 0}, /* 3 */ { 6, s_10_3, -1, -1, 0}, /* 4 */ { 5, s_10_4, -1, 3, 0}, /* 5 */ { 5, s_10_5, -1, 9, 0}, /* 6 */ { 6, s_10_6, -1, 7, 0}, /* 7 */ { 4, s_10_7, -1, -1, 0}, /* 8 */ { 4, s_10_8, -1, 6, 0}, /* 9 */ { 5, s_10_9, -1, 4, 0}, /* 10 */ { 4, s_10_10, -1, -1, 0}, /* 11 */ { 4, s_10_11, -1, 10, 0}, /* 12 */ { 6, s_10_12, -1, 11, 0}, /* 13 */ { 5, s_10_13, -1, 2, 0}, /* 14 */ { 4, s_10_14, -1, 1, 0}, /* 15 */ { 3, s_10_15, -1, -1, 0}, /* 16 */ { 5, s_10_16, -1, 5, 0}, /* 17 */ { 4, s_10_17, -1, 8, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1 }; static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; static const unsigned char g_valid_LI[] = { 55, 141, 2 }; static const symbol s_0[] = { 'Y' }; static const symbol s_1[] = { 'Y' }; static const symbol s_2[] = { 's', 's' }; static const symbol s_3[] = { 'i' }; static const symbol s_4[] = { 'i', 'e' }; static const symbol s_5[] = { 'e', 'e' }; static const symbol s_6[] = { 'e' }; static const symbol s_7[] = { 'e' }; static const symbol s_8[] = { 'i' }; static const symbol s_9[] = { 't', 'i', 'o', 'n' }; static const symbol s_10[] = { 'e', 'n', 'c', 'e' }; static const symbol s_11[] = { 'a', 'n', 'c', 'e' }; static const symbol s_12[] = { 'a', 'b', 'l', 'e' }; static const symbol s_13[] = { 'e', 'n', 't' }; static const symbol s_14[] = { 'i', 'z', 'e' }; static const symbol s_15[] = { 'a', 't', 'e' }; static const symbol s_16[] = { 'a', 'l' }; static const symbol s_17[] = { 'f', 'u', 'l' }; static const symbol s_18[] = { 'o', 'u', 's' }; static const symbol s_19[] = { 'i', 'v', 'e' }; static const symbol s_20[] = { 'b', 'l', 'e' }; static const symbol s_21[] = { 'o', 'g' }; static const symbol s_22[] = { 'f', 'u', 'l' }; static const symbol s_23[] = { 'l', 'e', 's', 's' }; static const symbol s_24[] = { 't', 'i', 'o', 'n' }; static const symbol s_25[] = { 'a', 't', 'e' }; static const symbol s_26[] = { 'a', 'l' }; static const symbol s_27[] = { 'i', 'c' }; static const symbol s_28[] = { 's', 'k', 'i' }; static const symbol s_29[] = { 's', 'k', 'y' }; static const symbol s_30[] = { 'd', 'i', 'e' }; static const symbol s_31[] = { 'l', 'i', 'e' }; static const symbol s_32[] = { 't', 'i', 'e' }; static const symbol s_33[] = { 'i', 'd', 'l' }; static const symbol s_34[] = { 'g', 'e', 'n', 't', 'l' }; static const symbol s_35[] = { 'u', 'g', 'l', 'i' }; static const symbol s_36[] = { 'e', 'a', 'r', 'l', 'i' }; static const symbol s_37[] = { 'o', 'n', 'l', 'i' }; static const symbol s_38[] = { 's', 'i', 'n', 'g', 'l' }; static const symbol s_39[] = { 'y' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset Y_found, line 26 */ { int c1 = z->c; /* do, line 27 */ z->bra = z->c; /* [, line 27 */ if (z->c == z->l || z->p[z->c] != '\'') goto lab0; /* literal, line 27 */ z->c++; z->ket = z->c; /* ], line 27 */ { int ret = slice_del(z); /* delete, line 27 */ if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 28 */ z->bra = z->c; /* [, line 28 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab1; /* literal, line 28 */ z->c++; z->ket = z->c; /* ], line 28 */ { int ret = slice_from_s(z, 1, s_0); /* <-, line 28 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 28 */ lab1: z->c = c2; } { int c3 = z->c; /* do, line 29 */ while(1) { /* repeat, line 29 */ int c4 = z->c; while(1) { /* goto, line 29 */ int c5 = z->c; if (in_grouping_U(z, g_v, 97, 121, 0)) goto lab4; /* grouping v, line 29 */ z->bra = z->c; /* [, line 29 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab4; /* literal, line 29 */ z->c++; z->ket = z->c; /* ], line 29 */ z->c = c5; break; lab4: z->c = c5; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab3; z->c = ret; /* goto, line 29 */ } } { int ret = slice_from_s(z, 1, s_1); /* <-, line 29 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 29 */ continue; lab3: z->c = c4; break; } z->c = c3; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 33 */ z->I[1] = z->l; /* $p2 = , line 34 */ { int c1 = z->c; /* do, line 35 */ { int c2 = z->c; /* or, line 41 */ if (z->c + 4 >= z->l || z->p[z->c + 4] >> 5 != 3 || !((2375680 >> (z->p[z->c + 4] & 0x1f)) & 1)) goto lab2; /* among, line 36 */ if (!(find_among(z, a_0, 3))) goto lab2; goto lab1; lab2: z->c = c2; { /* gopast */ /* grouping v, line 41 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 41 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } } lab1: z->I[0] = z->c; /* setmark p1, line 42 */ { /* gopast */ /* grouping v, line 43 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 43 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 43 */ lab0: z->c = c1; } return 1; } static int r_shortv(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 51 */ if (out_grouping_b_U(z, g_v_WXY, 89, 121, 0)) goto lab1; /* non v_WXY, line 50 */ if (in_grouping_b_U(z, g_v, 97, 121, 0)) goto lab1; /* grouping v, line 50 */ if (out_grouping_b_U(z, g_v, 97, 121, 0)) goto lab1; /* non v, line 50 */ goto lab0; lab1: z->c = z->l - m1; if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0; /* non v, line 52 */ if (in_grouping_b_U(z, g_v, 97, 121, 0)) return 0; /* grouping v, line 52 */ if (z->c > z->lb) return 0; /* atlimit, line 52 */ } lab0: return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 55 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 56 */ return 1; } static int r_Step_1a(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* try, line 59 */ z->ket = z->c; /* [, line 60 */ if (z->c <= z->lb || (z->p[z->c - 1] != 39 && z->p[z->c - 1] != 115)) { z->c = z->l - m1; goto lab0; } /* substring, line 60 */ among_var = find_among_b(z, a_1, 3); if (!(among_var)) { z->c = z->l - m1; goto lab0; } z->bra = z->c; /* ], line 60 */ switch (among_var) { /* among, line 60 */ case 0: { z->c = z->l - m1; goto lab0; } case 1: { int ret = slice_del(z); /* delete, line 62 */ if (ret < 0) return ret; } break; } lab0: ; } z->ket = z->c; /* [, line 65 */ if (z->c <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 115)) return 0; /* substring, line 65 */ among_var = find_among_b(z, a_2, 6); if (!(among_var)) return 0; z->bra = z->c; /* ], line 65 */ switch (among_var) { /* among, line 65 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_2); /* <-, line 66 */ if (ret < 0) return ret; } break; case 2: { int m2 = z->l - z->c; (void)m2; /* or, line 68 */ { int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 2); /* hop, line 68 */ if (ret < 0) goto lab2; z->c = ret; } { int ret = slice_from_s(z, 1, s_3); /* <-, line 68 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m2; { int ret = slice_from_s(z, 2, s_4); /* <-, line 68 */ if (ret < 0) return ret; } } lab1: break; case 3: { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 69 */ } { /* gopast */ /* grouping v, line 69 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } { int ret = slice_del(z); /* delete, line 69 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_1b(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 75 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33554576 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 75 */ among_var = find_among_b(z, a_4, 6); if (!(among_var)) return 0; z->bra = z->c; /* ], line 75 */ switch (among_var) { /* among, line 75 */ case 0: return 0; case 1: { int ret = r_R1(z); /* call R1, line 77 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 2, s_5); /* <-, line 77 */ if (ret < 0) return ret; } break; case 2: { int m_test1 = z->l - z->c; /* test, line 80 */ { /* gopast */ /* grouping v, line 80 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } z->c = z->l - m_test1; } { int ret = slice_del(z); /* delete, line 80 */ if (ret < 0) return ret; } { int m_test2 = z->l - z->c; /* test, line 81 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else /* substring, line 81 */ among_var = find_among_b(z, a_3, 13); if (!(among_var)) return 0; z->c = z->l - m_test2; } switch (among_var) { /* among, line 81 */ case 0: return 0; case 1: { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_6); /* <+, line 83 */ z->c = saved_c; } if (ret < 0) return ret; } break; case 2: z->ket = z->c; /* [, line 86 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 86 */ } z->bra = z->c; /* ], line 86 */ { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } break; case 3: if (z->c != z->I[0]) return 0; /* atmark, line 87 */ { int m_test3 = z->l - z->c; /* test, line 87 */ { int ret = r_shortv(z); /* call shortv, line 87 */ if (ret <= 0) return ret; } z->c = z->l - m_test3; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_7); /* <+, line 87 */ z->c = saved_c; } if (ret < 0) return ret; } break; } break; } return 1; } static int r_Step_1c(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 94 */ { int m1 = z->l - z->c; (void)m1; /* or, line 94 */ if (z->c <= z->lb || z->p[z->c - 1] != 'y') goto lab1; /* literal, line 94 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 'Y') return 0; /* literal, line 94 */ z->c--; } lab0: z->bra = z->c; /* ], line 94 */ if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0; /* non v, line 95 */ { int m2 = z->l - z->c; (void)m2; /* not, line 95 */ if (z->c > z->lb) goto lab2; /* atlimit, line 95 */ return 0; lab2: z->c = z->l - m2; } { int ret = slice_from_s(z, 1, s_8); /* <-, line 96 */ if (ret < 0) return ret; } return 1; } static int r_Step_2(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 100 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 100 */ among_var = find_among_b(z, a_5, 24); if (!(among_var)) return 0; z->bra = z->c; /* ], line 100 */ { int ret = r_R1(z); /* call R1, line 100 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 100 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_9); /* <-, line 101 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_10); /* <-, line 102 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_11); /* <-, line 103 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 4, s_12); /* <-, line 104 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_13); /* <-, line 105 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 3, s_14); /* <-, line 107 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_15); /* <-, line 109 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 2, s_16); /* <-, line 111 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 3, s_17); /* <-, line 112 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 3, s_18); /* <-, line 114 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 3, s_19); /* <-, line 116 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 3, s_20); /* <-, line 118 */ if (ret < 0) return ret; } break; case 13: if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 119 */ z->c--; { int ret = slice_from_s(z, 2, s_21); /* <-, line 119 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 3, s_22); /* <-, line 120 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_from_s(z, 4, s_23); /* <-, line 121 */ if (ret < 0) return ret; } break; case 16: if (in_grouping_b_U(z, g_valid_LI, 99, 116, 0)) return 0; /* grouping valid_LI, line 122 */ { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_3(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 127 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 127 */ among_var = find_among_b(z, a_6, 9); if (!(among_var)) return 0; z->bra = z->c; /* ], line 127 */ { int ret = r_R1(z); /* call R1, line 127 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 127 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_24); /* <-, line 128 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_25); /* <-, line 129 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_26); /* <-, line 130 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 2, s_27); /* <-, line 132 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } break; case 6: { int ret = r_R2(z); /* call R2, line 136 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 136 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_4(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 141 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1864232 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 141 */ among_var = find_among_b(z, a_7, 18); if (!(among_var)) return 0; z->bra = z->c; /* ], line 141 */ { int ret = r_R2(z); /* call R2, line 141 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 141 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 144 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 145 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab1; /* literal, line 145 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 't') return 0; /* literal, line 145 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 145 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_5(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 150 */ if (z->c <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) return 0; /* substring, line 150 */ among_var = find_among_b(z, a_8, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 150 */ switch (among_var) { /* among, line 150 */ case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 151 */ { int ret = r_R2(z); /* call R2, line 151 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_R1(z); /* call R1, line 151 */ if (ret <= 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* not, line 151 */ { int ret = r_shortv(z); /* call shortv, line 151 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } return 0; lab2: z->c = z->l - m2; } } lab0: { int ret = slice_del(z); /* delete, line 151 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 152 */ if (ret <= 0) return ret; } if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 152 */ z->c--; { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } break; } return 1; } static int r_exception2(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 158 */ if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0; /* substring, line 158 */ if (!(find_among_b(z, a_9, 8))) return 0; z->bra = z->c; /* ], line 158 */ if (z->c > z->lb) return 0; /* atlimit, line 158 */ return 1; } static int r_exception1(struct SN_env * z) { /* forwardmode */ int among_var; z->bra = z->c; /* [, line 170 */ if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((42750482 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0; /* substring, line 170 */ among_var = find_among(z, a_10, 18); if (!(among_var)) return 0; z->ket = z->c; /* ], line 170 */ if (z->c < z->l) return 0; /* atlimit, line 170 */ switch (among_var) { /* among, line 170 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 3, s_28); /* <-, line 174 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 3, s_29); /* <-, line 175 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 3, s_30); /* <-, line 176 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 3, s_31); /* <-, line 177 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_32); /* <-, line 178 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 3, s_33); /* <-, line 182 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 5, s_34); /* <-, line 183 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 4, s_35); /* <-, line 184 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 5, s_36); /* <-, line 185 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 4, s_37); /* <-, line 186 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 5, s_38); /* <-, line 187 */ if (ret < 0) return ret; } break; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ if (!(z->B[0])) return 0; /* Boolean test Y_found, line 203 */ while(1) { /* repeat, line 203 */ int c1 = z->c; while(1) { /* goto, line 203 */ int c2 = z->c; z->bra = z->c; /* [, line 203 */ if (z->c == z->l || z->p[z->c] != 'Y') goto lab1; /* literal, line 203 */ z->c++; z->ket = z->c; /* ], line 203 */ z->c = c2; break; lab1: z->c = c2; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* goto, line 203 */ } } { int ret = slice_from_s(z, 1, s_39); /* <-, line 203 */ if (ret < 0) return ret; } continue; lab0: z->c = c1; break; } return 1; } extern int english_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* or, line 207 */ { int ret = r_exception1(z); /* call exception1, line 207 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } goto lab0; lab1: z->c = c1; { int c2 = z->c; /* not, line 208 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, + 3); /* hop, line 208 */ if (ret < 0) goto lab3; z->c = ret; } goto lab2; lab3: z->c = c2; } goto lab0; lab2: z->c = c1; { int c3 = z->c; /* do, line 209 */ { int ret = r_prelude(z); /* call prelude, line 209 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = c3; } { int c4 = z->c; /* do, line 210 */ { int ret = r_mark_regions(z); /* call mark_regions, line 210 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = c4; } z->lb = z->c; z->c = z->l; /* backwards, line 211 */ { int m5 = z->l - z->c; (void)m5; /* do, line 213 */ { int ret = r_Step_1a(z); /* call Step_1a, line 213 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* or, line 215 */ { int ret = r_exception2(z); /* call exception2, line 215 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } goto lab7; lab8: z->c = z->l - m6; { int m7 = z->l - z->c; (void)m7; /* do, line 217 */ { int ret = r_Step_1b(z); /* call Step_1b, line 217 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 218 */ { int ret = r_Step_1c(z); /* call Step_1c, line 218 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } lab10: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 220 */ { int ret = r_Step_2(z); /* call Step_2, line 220 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } lab11: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 221 */ { int ret = r_Step_3(z); /* call Step_3, line 221 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } lab12: z->c = z->l - m10; } { int m11 = z->l - z->c; (void)m11; /* do, line 222 */ { int ret = r_Step_4(z); /* call Step_4, line 222 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } lab13: z->c = z->l - m11; } { int m12 = z->l - z->c; (void)m12; /* do, line 224 */ { int ret = r_Step_5(z); /* call Step_5, line 224 */ if (ret == 0) goto lab14; if (ret < 0) return ret; } lab14: z->c = z->l - m12; } } lab7: z->c = z->lb; { int c13 = z->c; /* do, line 227 */ { int ret = r_postlude(z); /* call postlude, line 227 */ if (ret == 0) goto lab15; if (ret < 0) return ret; } lab15: z->c = c13; } } lab0: return 1; } extern struct SN_env * english_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } extern void english_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_english.h000066400000000000000000000005261364126773500236160ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * english_UTF_8_create_env(void); extern void english_UTF_8_close_env(struct SN_env * z); extern int english_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_finnish.c000066400000000000000000000654201364126773500236220ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int finnish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_tidy(struct SN_env * z); static int r_other_endings(struct SN_env * z); static int r_t_plural(struct SN_env * z); static int r_i_plural(struct SN_env * z); static int r_case_ending(struct SN_env * z); static int r_VI(struct SN_env * z); static int r_LONG(struct SN_env * z); static int r_possessive(struct SN_env * z); static int r_particle_etc(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * finnish_UTF_8_create_env(void); extern void finnish_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[2] = { 'p', 'a' }; static const symbol s_0_1[3] = { 's', 't', 'i' }; static const symbol s_0_2[4] = { 'k', 'a', 'a', 'n' }; static const symbol s_0_3[3] = { 'h', 'a', 'n' }; static const symbol s_0_4[3] = { 'k', 'i', 'n' }; static const symbol s_0_5[4] = { 'h', 0xC3, 0xA4, 'n' }; static const symbol s_0_6[6] = { 'k', 0xC3, 0xA4, 0xC3, 0xA4, 'n' }; static const symbol s_0_7[2] = { 'k', 'o' }; static const symbol s_0_8[3] = { 'p', 0xC3, 0xA4 }; static const symbol s_0_9[3] = { 'k', 0xC3, 0xB6 }; static const struct among a_0[10] = { /* 0 */ { 2, s_0_0, -1, 1, 0}, /* 1 */ { 3, s_0_1, -1, 2, 0}, /* 2 */ { 4, s_0_2, -1, 1, 0}, /* 3 */ { 3, s_0_3, -1, 1, 0}, /* 4 */ { 3, s_0_4, -1, 1, 0}, /* 5 */ { 4, s_0_5, -1, 1, 0}, /* 6 */ { 6, s_0_6, -1, 1, 0}, /* 7 */ { 2, s_0_7, -1, 1, 0}, /* 8 */ { 3, s_0_8, -1, 1, 0}, /* 9 */ { 3, s_0_9, -1, 1, 0} }; static const symbol s_1_0[3] = { 'l', 'l', 'a' }; static const symbol s_1_1[2] = { 'n', 'a' }; static const symbol s_1_2[3] = { 's', 's', 'a' }; static const symbol s_1_3[2] = { 't', 'a' }; static const symbol s_1_4[3] = { 'l', 't', 'a' }; static const symbol s_1_5[3] = { 's', 't', 'a' }; static const struct among a_1[6] = { /* 0 */ { 3, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0}, /* 2 */ { 3, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0}, /* 4 */ { 3, s_1_4, 3, -1, 0}, /* 5 */ { 3, s_1_5, 3, -1, 0} }; static const symbol s_2_0[4] = { 'l', 'l', 0xC3, 0xA4 }; static const symbol s_2_1[3] = { 'n', 0xC3, 0xA4 }; static const symbol s_2_2[4] = { 's', 's', 0xC3, 0xA4 }; static const symbol s_2_3[3] = { 't', 0xC3, 0xA4 }; static const symbol s_2_4[4] = { 'l', 't', 0xC3, 0xA4 }; static const symbol s_2_5[4] = { 's', 't', 0xC3, 0xA4 }; static const struct among a_2[6] = { /* 0 */ { 4, s_2_0, -1, -1, 0}, /* 1 */ { 3, s_2_1, -1, -1, 0}, /* 2 */ { 4, s_2_2, -1, -1, 0}, /* 3 */ { 3, s_2_3, -1, -1, 0}, /* 4 */ { 4, s_2_4, 3, -1, 0}, /* 5 */ { 4, s_2_5, 3, -1, 0} }; static const symbol s_3_0[3] = { 'l', 'l', 'e' }; static const symbol s_3_1[3] = { 'i', 'n', 'e' }; static const struct among a_3[2] = { /* 0 */ { 3, s_3_0, -1, -1, 0}, /* 1 */ { 3, s_3_1, -1, -1, 0} }; static const symbol s_4_0[3] = { 'n', 's', 'a' }; static const symbol s_4_1[3] = { 'm', 'm', 'e' }; static const symbol s_4_2[3] = { 'n', 'n', 'e' }; static const symbol s_4_3[2] = { 'n', 'i' }; static const symbol s_4_4[2] = { 's', 'i' }; static const symbol s_4_5[2] = { 'a', 'n' }; static const symbol s_4_6[2] = { 'e', 'n' }; static const symbol s_4_7[3] = { 0xC3, 0xA4, 'n' }; static const symbol s_4_8[4] = { 'n', 's', 0xC3, 0xA4 }; static const struct among a_4[9] = { /* 0 */ { 3, s_4_0, -1, 3, 0}, /* 1 */ { 3, s_4_1, -1, 3, 0}, /* 2 */ { 3, s_4_2, -1, 3, 0}, /* 3 */ { 2, s_4_3, -1, 2, 0}, /* 4 */ { 2, s_4_4, -1, 1, 0}, /* 5 */ { 2, s_4_5, -1, 4, 0}, /* 6 */ { 2, s_4_6, -1, 6, 0}, /* 7 */ { 3, s_4_7, -1, 5, 0}, /* 8 */ { 4, s_4_8, -1, 3, 0} }; static const symbol s_5_0[2] = { 'a', 'a' }; static const symbol s_5_1[2] = { 'e', 'e' }; static const symbol s_5_2[2] = { 'i', 'i' }; static const symbol s_5_3[2] = { 'o', 'o' }; static const symbol s_5_4[2] = { 'u', 'u' }; static const symbol s_5_5[4] = { 0xC3, 0xA4, 0xC3, 0xA4 }; static const symbol s_5_6[4] = { 0xC3, 0xB6, 0xC3, 0xB6 }; static const struct among a_5[7] = { /* 0 */ { 2, s_5_0, -1, -1, 0}, /* 1 */ { 2, s_5_1, -1, -1, 0}, /* 2 */ { 2, s_5_2, -1, -1, 0}, /* 3 */ { 2, s_5_3, -1, -1, 0}, /* 4 */ { 2, s_5_4, -1, -1, 0}, /* 5 */ { 4, s_5_5, -1, -1, 0}, /* 6 */ { 4, s_5_6, -1, -1, 0} }; static const symbol s_6_0[1] = { 'a' }; static const symbol s_6_1[3] = { 'l', 'l', 'a' }; static const symbol s_6_2[2] = { 'n', 'a' }; static const symbol s_6_3[3] = { 's', 's', 'a' }; static const symbol s_6_4[2] = { 't', 'a' }; static const symbol s_6_5[3] = { 'l', 't', 'a' }; static const symbol s_6_6[3] = { 's', 't', 'a' }; static const symbol s_6_7[3] = { 't', 't', 'a' }; static const symbol s_6_8[3] = { 'l', 'l', 'e' }; static const symbol s_6_9[3] = { 'i', 'n', 'e' }; static const symbol s_6_10[3] = { 'k', 's', 'i' }; static const symbol s_6_11[1] = { 'n' }; static const symbol s_6_12[3] = { 'h', 'a', 'n' }; static const symbol s_6_13[3] = { 'd', 'e', 'n' }; static const symbol s_6_14[4] = { 's', 'e', 'e', 'n' }; static const symbol s_6_15[3] = { 'h', 'e', 'n' }; static const symbol s_6_16[4] = { 't', 't', 'e', 'n' }; static const symbol s_6_17[3] = { 'h', 'i', 'n' }; static const symbol s_6_18[4] = { 's', 'i', 'i', 'n' }; static const symbol s_6_19[3] = { 'h', 'o', 'n' }; static const symbol s_6_20[4] = { 'h', 0xC3, 0xA4, 'n' }; static const symbol s_6_21[4] = { 'h', 0xC3, 0xB6, 'n' }; static const symbol s_6_22[2] = { 0xC3, 0xA4 }; static const symbol s_6_23[4] = { 'l', 'l', 0xC3, 0xA4 }; static const symbol s_6_24[3] = { 'n', 0xC3, 0xA4 }; static const symbol s_6_25[4] = { 's', 's', 0xC3, 0xA4 }; static const symbol s_6_26[3] = { 't', 0xC3, 0xA4 }; static const symbol s_6_27[4] = { 'l', 't', 0xC3, 0xA4 }; static const symbol s_6_28[4] = { 's', 't', 0xC3, 0xA4 }; static const symbol s_6_29[4] = { 't', 't', 0xC3, 0xA4 }; static const struct among a_6[30] = { /* 0 */ { 1, s_6_0, -1, 8, 0}, /* 1 */ { 3, s_6_1, 0, -1, 0}, /* 2 */ { 2, s_6_2, 0, -1, 0}, /* 3 */ { 3, s_6_3, 0, -1, 0}, /* 4 */ { 2, s_6_4, 0, -1, 0}, /* 5 */ { 3, s_6_5, 4, -1, 0}, /* 6 */ { 3, s_6_6, 4, -1, 0}, /* 7 */ { 3, s_6_7, 4, 9, 0}, /* 8 */ { 3, s_6_8, -1, -1, 0}, /* 9 */ { 3, s_6_9, -1, -1, 0}, /* 10 */ { 3, s_6_10, -1, -1, 0}, /* 11 */ { 1, s_6_11, -1, 7, 0}, /* 12 */ { 3, s_6_12, 11, 1, 0}, /* 13 */ { 3, s_6_13, 11, -1, r_VI}, /* 14 */ { 4, s_6_14, 11, -1, r_LONG}, /* 15 */ { 3, s_6_15, 11, 2, 0}, /* 16 */ { 4, s_6_16, 11, -1, r_VI}, /* 17 */ { 3, s_6_17, 11, 3, 0}, /* 18 */ { 4, s_6_18, 11, -1, r_VI}, /* 19 */ { 3, s_6_19, 11, 4, 0}, /* 20 */ { 4, s_6_20, 11, 5, 0}, /* 21 */ { 4, s_6_21, 11, 6, 0}, /* 22 */ { 2, s_6_22, -1, 8, 0}, /* 23 */ { 4, s_6_23, 22, -1, 0}, /* 24 */ { 3, s_6_24, 22, -1, 0}, /* 25 */ { 4, s_6_25, 22, -1, 0}, /* 26 */ { 3, s_6_26, 22, -1, 0}, /* 27 */ { 4, s_6_27, 26, -1, 0}, /* 28 */ { 4, s_6_28, 26, -1, 0}, /* 29 */ { 4, s_6_29, 26, 9, 0} }; static const symbol s_7_0[3] = { 'e', 'j', 'a' }; static const symbol s_7_1[3] = { 'm', 'm', 'a' }; static const symbol s_7_2[4] = { 'i', 'm', 'm', 'a' }; static const symbol s_7_3[3] = { 'm', 'p', 'a' }; static const symbol s_7_4[4] = { 'i', 'm', 'p', 'a' }; static const symbol s_7_5[3] = { 'm', 'm', 'i' }; static const symbol s_7_6[4] = { 'i', 'm', 'm', 'i' }; static const symbol s_7_7[3] = { 'm', 'p', 'i' }; static const symbol s_7_8[4] = { 'i', 'm', 'p', 'i' }; static const symbol s_7_9[4] = { 'e', 'j', 0xC3, 0xA4 }; static const symbol s_7_10[4] = { 'm', 'm', 0xC3, 0xA4 }; static const symbol s_7_11[5] = { 'i', 'm', 'm', 0xC3, 0xA4 }; static const symbol s_7_12[4] = { 'm', 'p', 0xC3, 0xA4 }; static const symbol s_7_13[5] = { 'i', 'm', 'p', 0xC3, 0xA4 }; static const struct among a_7[14] = { /* 0 */ { 3, s_7_0, -1, -1, 0}, /* 1 */ { 3, s_7_1, -1, 1, 0}, /* 2 */ { 4, s_7_2, 1, -1, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 4, s_7_4, 3, -1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 4, s_7_6, 5, -1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 4, s_7_8, 7, -1, 0}, /* 9 */ { 4, s_7_9, -1, -1, 0}, /* 10 */ { 4, s_7_10, -1, 1, 0}, /* 11 */ { 5, s_7_11, 10, -1, 0}, /* 12 */ { 4, s_7_12, -1, 1, 0}, /* 13 */ { 5, s_7_13, 12, -1, 0} }; static const symbol s_8_0[1] = { 'i' }; static const symbol s_8_1[1] = { 'j' }; static const struct among a_8[2] = { /* 0 */ { 1, s_8_0, -1, -1, 0}, /* 1 */ { 1, s_8_1, -1, -1, 0} }; static const symbol s_9_0[3] = { 'm', 'm', 'a' }; static const symbol s_9_1[4] = { 'i', 'm', 'm', 'a' }; static const struct among a_9[2] = { /* 0 */ { 3, s_9_0, -1, 1, 0}, /* 1 */ { 4, s_9_1, 0, -1, 0} }; static const unsigned char g_AEI[] = { 17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 }; static const unsigned char g_V1[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; static const unsigned char g_V2[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; static const unsigned char g_particle_end[] = { 17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 }; static const symbol s_0[] = { 'k', 's', 'e' }; static const symbol s_1[] = { 'k', 's', 'i' }; static const symbol s_2[] = { 0xC3, 0xA4 }; static const symbol s_3[] = { 0xC3, 0xB6 }; static const symbol s_4[] = { 'i', 'e' }; static const symbol s_5[] = { 'p', 'o' }; static const symbol s_6[] = { 'p', 'o' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 43 */ z->I[1] = z->l; /* $p2 = , line 44 */ if (out_grouping_U(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 46 */ { /* gopast */ /* non V1, line 46 */ int ret = in_grouping_U(z, g_V1, 97, 246, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 46 */ if (out_grouping_U(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* grouping V1, line 47 */ { /* gopast */ /* non V1, line 47 */ int ret = in_grouping_U(z, g_V1, 97, 246, 1); if (ret < 0) return 0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 47 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 52 */ return 1; } static int r_particle_etc(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 55 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 55 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 55 */ among_var = find_among_b(z, a_0, 10); /* substring, line 55 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 55 */ z->lb = mlimit1; } switch (among_var) { /* among, line 56 */ case 0: return 0; case 1: if (in_grouping_b_U(z, g_particle_end, 97, 246, 0)) return 0; /* grouping particle_end, line 62 */ break; case 2: { int ret = r_R2(z); /* call R2, line 64 */ if (ret <= 0) return ret; } break; } { int ret = slice_del(z); /* delete, line 66 */ if (ret < 0) return ret; } return 1; } static int r_possessive(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 69 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 69 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 69 */ among_var = find_among_b(z, a_4, 9); /* substring, line 69 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 69 */ z->lb = mlimit1; } switch (among_var) { /* among, line 70 */ case 0: return 0; case 1: { int m2 = z->l - z->c; (void)m2; /* not, line 72 */ if (z->c <= z->lb || z->p[z->c - 1] != 'k') goto lab0; /* literal, line 72 */ z->c--; return 0; lab0: z->c = z->l - m2; } { int ret = slice_del(z); /* delete, line 72 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 74 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 74 */ if (!(eq_s_b(z, 3, s_0))) return 0; /* literal, line 74 */ z->bra = z->c; /* ], line 74 */ { int ret = slice_from_s(z, 3, s_1); /* <-, line 74 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 78 */ if (ret < 0) return ret; } break; case 4: if (z->c - 1 <= z->lb || z->p[z->c - 1] != 97) return 0; /* among, line 81 */ if (!(find_among_b(z, a_1, 6))) return 0; { int ret = slice_del(z); /* delete, line 81 */ if (ret < 0) return ret; } break; case 5: if (z->c - 2 <= z->lb || z->p[z->c - 1] != 164) return 0; /* among, line 83 */ if (!(find_among_b(z, a_2, 6))) return 0; { int ret = slice_del(z); /* delete, line 84 */ if (ret < 0) return ret; } break; case 6: if (z->c - 2 <= z->lb || z->p[z->c - 1] != 101) return 0; /* among, line 86 */ if (!(find_among_b(z, a_3, 2))) return 0; { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } break; } return 1; } static int r_LONG(struct SN_env * z) { /* backwardmode */ if (!(find_among_b(z, a_5, 7))) return 0; /* among, line 91 */ return 1; } static int r_VI(struct SN_env * z) { /* backwardmode */ if (z->c <= z->lb || z->p[z->c - 1] != 'i') return 0; /* literal, line 93 */ z->c--; if (in_grouping_b_U(z, g_V2, 97, 246, 0)) return 0; /* grouping V2, line 93 */ return 1; } static int r_case_ending(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 96 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 96 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 96 */ among_var = find_among_b(z, a_6, 30); /* substring, line 96 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 96 */ z->lb = mlimit1; } switch (among_var) { /* among, line 97 */ case 0: return 0; case 1: if (z->c <= z->lb || z->p[z->c - 1] != 'a') return 0; /* literal, line 98 */ z->c--; break; case 2: if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 99 */ z->c--; break; case 3: if (z->c <= z->lb || z->p[z->c - 1] != 'i') return 0; /* literal, line 100 */ z->c--; break; case 4: if (z->c <= z->lb || z->p[z->c - 1] != 'o') return 0; /* literal, line 101 */ z->c--; break; case 5: if (!(eq_s_b(z, 2, s_2))) return 0; /* literal, line 102 */ break; case 6: if (!(eq_s_b(z, 2, s_3))) return 0; /* literal, line 103 */ break; case 7: { int m2 = z->l - z->c; (void)m2; /* try, line 111 */ { int m3 = z->l - z->c; (void)m3; /* and, line 113 */ { int m4 = z->l - z->c; (void)m4; /* or, line 112 */ { int ret = r_LONG(z); /* call LONG, line 111 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m4; if (!(eq_s_b(z, 2, s_4))) { z->c = z->l - m2; goto lab0; } /* literal, line 112 */ } lab1: z->c = z->l - m3; { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) { z->c = z->l - m2; goto lab0; } z->c = ret; /* next, line 113 */ } } z->bra = z->c; /* ], line 113 */ lab0: ; } break; case 8: if (in_grouping_b_U(z, g_V1, 97, 246, 0)) return 0; /* grouping V1, line 119 */ if (out_grouping_b_U(z, g_V1, 97, 246, 0)) return 0; /* non V1, line 119 */ break; case 9: if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 121 */ z->c--; break; } { int ret = slice_del(z); /* delete, line 138 */ if (ret < 0) return ret; } z->B[0] = 1; /* set ending_removed, line 139 */ return 1; } static int r_other_endings(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 142 */ int mlimit1; if (z->c < z->I[1]) return 0; z->c = z->I[1]; /* tomark, line 142 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 142 */ among_var = find_among_b(z, a_7, 14); /* substring, line 142 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 142 */ z->lb = mlimit1; } switch (among_var) { /* among, line 143 */ case 0: return 0; case 1: { int m2 = z->l - z->c; (void)m2; /* not, line 146 */ if (!(eq_s_b(z, 2, s_5))) goto lab0; /* literal, line 146 */ return 0; lab0: z->c = z->l - m2; } break; } { int ret = slice_del(z); /* delete, line 151 */ if (ret < 0) return ret; } return 1; } static int r_i_plural(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 154 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 154 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 154 */ if (z->c <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 106)) { z->lb = mlimit1; return 0; } /* substring, line 154 */ if (!(find_among_b(z, a_8, 2))) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 154 */ z->lb = mlimit1; } { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } return 1; } static int r_t_plural(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 161 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 161 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 162 */ if (z->c <= z->lb || z->p[z->c - 1] != 't') { z->lb = mlimit1; return 0; } /* literal, line 162 */ z->c--; z->bra = z->c; /* ], line 162 */ { int m_test2 = z->l - z->c; /* test, line 162 */ if (in_grouping_b_U(z, g_V1, 97, 246, 0)) { z->lb = mlimit1; return 0; } /* grouping V1, line 162 */ z->c = z->l - m_test2; } { int ret = slice_del(z); /* delete, line 163 */ if (ret < 0) return ret; } z->lb = mlimit1; } { int m3 = z->l - z->c; (void)m3; /* setlimit, line 165 */ int mlimit3; if (z->c < z->I[1]) return 0; z->c = z->I[1]; /* tomark, line 165 */ mlimit3 = z->lb; z->lb = z->c; z->c = z->l - m3; z->ket = z->c; /* [, line 165 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] != 97) { z->lb = mlimit3; return 0; } /* substring, line 165 */ among_var = find_among_b(z, a_9, 2); if (!(among_var)) { z->lb = mlimit3; return 0; } z->bra = z->c; /* ], line 165 */ z->lb = mlimit3; } switch (among_var) { /* among, line 166 */ case 0: return 0; case 1: { int m4 = z->l - z->c; (void)m4; /* not, line 167 */ if (!(eq_s_b(z, 2, s_6))) goto lab0; /* literal, line 167 */ return 0; lab0: z->c = z->l - m4; } break; } { int ret = slice_del(z); /* delete, line 170 */ if (ret < 0) return ret; } return 1; } static int r_tidy(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 173 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 173 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; { int m2 = z->l - z->c; (void)m2; /* do, line 174 */ { int m3 = z->l - z->c; (void)m3; /* and, line 174 */ { int ret = r_LONG(z); /* call LONG, line 174 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } z->c = z->l - m3; z->ket = z->c; /* [, line 174 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) goto lab0; z->c = ret; /* next, line 174 */ } z->bra = z->c; /* ], line 174 */ { int ret = slice_del(z); /* delete, line 174 */ if (ret < 0) return ret; } } lab0: z->c = z->l - m2; } { int m4 = z->l - z->c; (void)m4; /* do, line 175 */ z->ket = z->c; /* [, line 175 */ if (in_grouping_b_U(z, g_AEI, 97, 228, 0)) goto lab1; /* grouping AEI, line 175 */ z->bra = z->c; /* ], line 175 */ if (out_grouping_b_U(z, g_V1, 97, 246, 0)) goto lab1; /* non V1, line 175 */ { int ret = slice_del(z); /* delete, line 175 */ if (ret < 0) return ret; } lab1: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 176 */ z->ket = z->c; /* [, line 176 */ if (z->c <= z->lb || z->p[z->c - 1] != 'j') goto lab2; /* literal, line 176 */ z->c--; z->bra = z->c; /* ], line 176 */ { int m6 = z->l - z->c; (void)m6; /* or, line 176 */ if (z->c <= z->lb || z->p[z->c - 1] != 'o') goto lab4; /* literal, line 176 */ z->c--; goto lab3; lab4: z->c = z->l - m6; if (z->c <= z->lb || z->p[z->c - 1] != 'u') goto lab2; /* literal, line 176 */ z->c--; } lab3: { int ret = slice_del(z); /* delete, line 176 */ if (ret < 0) return ret; } lab2: z->c = z->l - m5; } { int m7 = z->l - z->c; (void)m7; /* do, line 177 */ z->ket = z->c; /* [, line 177 */ if (z->c <= z->lb || z->p[z->c - 1] != 'o') goto lab5; /* literal, line 177 */ z->c--; z->bra = z->c; /* ], line 177 */ if (z->c <= z->lb || z->p[z->c - 1] != 'j') goto lab5; /* literal, line 177 */ z->c--; { int ret = slice_del(z); /* delete, line 177 */ if (ret < 0) return ret; } lab5: z->c = z->l - m7; } z->lb = mlimit1; } if (in_grouping_b_U(z, g_V1, 97, 246, 1) < 0) return 0; /* goto */ /* non V1, line 179 */ z->ket = z->c; /* [, line 179 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 179 */ } z->bra = z->c; /* ], line 179 */ z->S[0] = slice_to(z, z->S[0]); /* -> x, line 179 */ if (z->S[0] == 0) return -1; /* -> x, line 179 */ if (!(eq_v_b(z, z->S[0]))) return 0; /* name x, line 179 */ { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } return 1; } extern int finnish_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 185 */ { int ret = r_mark_regions(z); /* call mark_regions, line 185 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->B[0] = 0; /* unset ending_removed, line 186 */ z->lb = z->c; z->c = z->l; /* backwards, line 187 */ { int m2 = z->l - z->c; (void)m2; /* do, line 188 */ { int ret = r_particle_etc(z); /* call particle_etc, line 188 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 189 */ { int ret = r_possessive(z); /* call possessive, line 189 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 190 */ { int ret = r_case_ending(z); /* call case_ending, line 190 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 191 */ { int ret = r_other_endings(z); /* call other_endings, line 191 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* or, line 192 */ if (!(z->B[0])) goto lab6; /* Boolean test ending_removed, line 192 */ { int m7 = z->l - z->c; (void)m7; /* do, line 192 */ { int ret = r_i_plural(z); /* call i_plural, line 192 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m7; } goto lab5; lab6: z->c = z->l - m6; { int m8 = z->l - z->c; (void)m8; /* do, line 192 */ { int ret = r_t_plural(z); /* call t_plural, line 192 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m8; } } lab5: { int m9 = z->l - z->c; (void)m9; /* do, line 193 */ { int ret = r_tidy(z); /* call tidy, line 193 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m9; } z->c = z->lb; return 1; } extern struct SN_env * finnish_UTF_8_create_env(void) { return SN_create_env(1, 2, 1); } extern void finnish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 1); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_finnish.h000066400000000000000000000005261364126773500236230ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * finnish_UTF_8_create_env(void); extern void finnish_UTF_8_close_env(struct SN_env * z); extern int finnish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_french.c000066400000000000000000001372021364126773500234270ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int french_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_un_accent(struct SN_env * z); static int r_un_double(struct SN_env * z); static int r_residual_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_i_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * french_UTF_8_create_env(void); extern void french_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[3] = { 'c', 'o', 'l' }; static const symbol s_0_1[3] = { 'p', 'a', 'r' }; static const symbol s_0_2[3] = { 't', 'a', 'p' }; static const struct among a_0[3] = { /* 0 */ { 3, s_0_0, -1, -1, 0}, /* 1 */ { 3, s_0_1, -1, -1, 0}, /* 2 */ { 3, s_0_2, -1, -1, 0} }; static const symbol s_1_1[1] = { 'I' }; static const symbol s_1_2[1] = { 'U' }; static const symbol s_1_3[1] = { 'Y' }; static const struct among a_1[4] = { /* 0 */ { 0, 0, -1, 4, 0}, /* 1 */ { 1, s_1_1, 0, 1, 0}, /* 2 */ { 1, s_1_2, 0, 2, 0}, /* 3 */ { 1, s_1_3, 0, 3, 0} }; static const symbol s_2_0[3] = { 'i', 'q', 'U' }; static const symbol s_2_1[3] = { 'a', 'b', 'l' }; static const symbol s_2_2[4] = { 'I', 0xC3, 0xA8, 'r' }; static const symbol s_2_3[4] = { 'i', 0xC3, 0xA8, 'r' }; static const symbol s_2_4[3] = { 'e', 'u', 's' }; static const symbol s_2_5[2] = { 'i', 'v' }; static const struct among a_2[6] = { /* 0 */ { 3, s_2_0, -1, 3, 0}, /* 1 */ { 3, s_2_1, -1, 3, 0}, /* 2 */ { 4, s_2_2, -1, 4, 0}, /* 3 */ { 4, s_2_3, -1, 4, 0}, /* 4 */ { 3, s_2_4, -1, 2, 0}, /* 5 */ { 2, s_2_5, -1, 1, 0} }; static const symbol s_3_0[2] = { 'i', 'c' }; static const symbol s_3_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_3_2[2] = { 'i', 'v' }; static const struct among a_3[3] = { /* 0 */ { 2, s_3_0, -1, 2, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0}, /* 2 */ { 2, s_3_2, -1, 3, 0} }; static const symbol s_4_0[4] = { 'i', 'q', 'U', 'e' }; static const symbol s_4_1[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; static const symbol s_4_2[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_4_3[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_4_4[5] = { 'l', 'o', 'g', 'i', 'e' }; static const symbol s_4_5[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_4_6[4] = { 'i', 's', 'm', 'e' }; static const symbol s_4_7[4] = { 'e', 'u', 's', 'e' }; static const symbol s_4_8[4] = { 'i', 's', 't', 'e' }; static const symbol s_4_9[3] = { 'i', 'v', 'e' }; static const symbol s_4_10[2] = { 'i', 'f' }; static const symbol s_4_11[5] = { 'u', 's', 'i', 'o', 'n' }; static const symbol s_4_12[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_4_13[5] = { 'u', 't', 'i', 'o', 'n' }; static const symbol s_4_14[5] = { 'a', 't', 'e', 'u', 'r' }; static const symbol s_4_15[5] = { 'i', 'q', 'U', 'e', 's' }; static const symbol s_4_16[7] = { 'a', 't', 'r', 'i', 'c', 'e', 's' }; static const symbol s_4_17[5] = { 'a', 'n', 'c', 'e', 's' }; static const symbol s_4_18[5] = { 'e', 'n', 'c', 'e', 's' }; static const symbol s_4_19[6] = { 'l', 'o', 'g', 'i', 'e', 's' }; static const symbol s_4_20[5] = { 'a', 'b', 'l', 'e', 's' }; static const symbol s_4_21[5] = { 'i', 's', 'm', 'e', 's' }; static const symbol s_4_22[5] = { 'e', 'u', 's', 'e', 's' }; static const symbol s_4_23[5] = { 'i', 's', 't', 'e', 's' }; static const symbol s_4_24[4] = { 'i', 'v', 'e', 's' }; static const symbol s_4_25[3] = { 'i', 'f', 's' }; static const symbol s_4_26[6] = { 'u', 's', 'i', 'o', 'n', 's' }; static const symbol s_4_27[6] = { 'a', 't', 'i', 'o', 'n', 's' }; static const symbol s_4_28[6] = { 'u', 't', 'i', 'o', 'n', 's' }; static const symbol s_4_29[6] = { 'a', 't', 'e', 'u', 'r', 's' }; static const symbol s_4_30[5] = { 'm', 'e', 'n', 't', 's' }; static const symbol s_4_31[6] = { 'e', 'm', 'e', 'n', 't', 's' }; static const symbol s_4_32[9] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't', 's' }; static const symbol s_4_33[5] = { 'i', 't', 0xC3, 0xA9, 's' }; static const symbol s_4_34[4] = { 'm', 'e', 'n', 't' }; static const symbol s_4_35[5] = { 'e', 'm', 'e', 'n', 't' }; static const symbol s_4_36[8] = { 'i', 's', 's', 'e', 'm', 'e', 'n', 't' }; static const symbol s_4_37[6] = { 'a', 'm', 'm', 'e', 'n', 't' }; static const symbol s_4_38[6] = { 'e', 'm', 'm', 'e', 'n', 't' }; static const symbol s_4_39[3] = { 'a', 'u', 'x' }; static const symbol s_4_40[4] = { 'e', 'a', 'u', 'x' }; static const symbol s_4_41[3] = { 'e', 'u', 'x' }; static const symbol s_4_42[4] = { 'i', 't', 0xC3, 0xA9 }; static const struct among a_4[43] = { /* 0 */ { 4, s_4_0, -1, 1, 0}, /* 1 */ { 6, s_4_1, -1, 2, 0}, /* 2 */ { 4, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 5, 0}, /* 4 */ { 5, s_4_4, -1, 3, 0}, /* 5 */ { 4, s_4_5, -1, 1, 0}, /* 6 */ { 4, s_4_6, -1, 1, 0}, /* 7 */ { 4, s_4_7, -1, 11, 0}, /* 8 */ { 4, s_4_8, -1, 1, 0}, /* 9 */ { 3, s_4_9, -1, 8, 0}, /* 10 */ { 2, s_4_10, -1, 8, 0}, /* 11 */ { 5, s_4_11, -1, 4, 0}, /* 12 */ { 5, s_4_12, -1, 2, 0}, /* 13 */ { 5, s_4_13, -1, 4, 0}, /* 14 */ { 5, s_4_14, -1, 2, 0}, /* 15 */ { 5, s_4_15, -1, 1, 0}, /* 16 */ { 7, s_4_16, -1, 2, 0}, /* 17 */ { 5, s_4_17, -1, 1, 0}, /* 18 */ { 5, s_4_18, -1, 5, 0}, /* 19 */ { 6, s_4_19, -1, 3, 0}, /* 20 */ { 5, s_4_20, -1, 1, 0}, /* 21 */ { 5, s_4_21, -1, 1, 0}, /* 22 */ { 5, s_4_22, -1, 11, 0}, /* 23 */ { 5, s_4_23, -1, 1, 0}, /* 24 */ { 4, s_4_24, -1, 8, 0}, /* 25 */ { 3, s_4_25, -1, 8, 0}, /* 26 */ { 6, s_4_26, -1, 4, 0}, /* 27 */ { 6, s_4_27, -1, 2, 0}, /* 28 */ { 6, s_4_28, -1, 4, 0}, /* 29 */ { 6, s_4_29, -1, 2, 0}, /* 30 */ { 5, s_4_30, -1, 15, 0}, /* 31 */ { 6, s_4_31, 30, 6, 0}, /* 32 */ { 9, s_4_32, 31, 12, 0}, /* 33 */ { 5, s_4_33, -1, 7, 0}, /* 34 */ { 4, s_4_34, -1, 15, 0}, /* 35 */ { 5, s_4_35, 34, 6, 0}, /* 36 */ { 8, s_4_36, 35, 12, 0}, /* 37 */ { 6, s_4_37, 34, 13, 0}, /* 38 */ { 6, s_4_38, 34, 14, 0}, /* 39 */ { 3, s_4_39, -1, 10, 0}, /* 40 */ { 4, s_4_40, 39, 9, 0}, /* 41 */ { 3, s_4_41, -1, 1, 0}, /* 42 */ { 4, s_4_42, -1, 7, 0} }; static const symbol s_5_0[3] = { 'i', 'r', 'a' }; static const symbol s_5_1[2] = { 'i', 'e' }; static const symbol s_5_2[4] = { 'i', 's', 's', 'e' }; static const symbol s_5_3[7] = { 'i', 's', 's', 'a', 'n', 't', 'e' }; static const symbol s_5_4[1] = { 'i' }; static const symbol s_5_5[4] = { 'i', 'r', 'a', 'i' }; static const symbol s_5_6[2] = { 'i', 'r' }; static const symbol s_5_7[4] = { 'i', 'r', 'a', 's' }; static const symbol s_5_8[3] = { 'i', 'e', 's' }; static const symbol s_5_9[5] = { 0xC3, 0xAE, 'm', 'e', 's' }; static const symbol s_5_10[5] = { 'i', 's', 's', 'e', 's' }; static const symbol s_5_11[8] = { 'i', 's', 's', 'a', 'n', 't', 'e', 's' }; static const symbol s_5_12[5] = { 0xC3, 0xAE, 't', 'e', 's' }; static const symbol s_5_13[2] = { 'i', 's' }; static const symbol s_5_14[5] = { 'i', 'r', 'a', 'i', 's' }; static const symbol s_5_15[6] = { 'i', 's', 's', 'a', 'i', 's' }; static const symbol s_5_16[6] = { 'i', 'r', 'i', 'o', 'n', 's' }; static const symbol s_5_17[7] = { 'i', 's', 's', 'i', 'o', 'n', 's' }; static const symbol s_5_18[5] = { 'i', 'r', 'o', 'n', 's' }; static const symbol s_5_19[6] = { 'i', 's', 's', 'o', 'n', 's' }; static const symbol s_5_20[7] = { 'i', 's', 's', 'a', 'n', 't', 's' }; static const symbol s_5_21[2] = { 'i', 't' }; static const symbol s_5_22[5] = { 'i', 'r', 'a', 'i', 't' }; static const symbol s_5_23[6] = { 'i', 's', 's', 'a', 'i', 't' }; static const symbol s_5_24[6] = { 'i', 's', 's', 'a', 'n', 't' }; static const symbol s_5_25[7] = { 'i', 'r', 'a', 'I', 'e', 'n', 't' }; static const symbol s_5_26[8] = { 'i', 's', 's', 'a', 'I', 'e', 'n', 't' }; static const symbol s_5_27[5] = { 'i', 'r', 'e', 'n', 't' }; static const symbol s_5_28[6] = { 'i', 's', 's', 'e', 'n', 't' }; static const symbol s_5_29[5] = { 'i', 'r', 'o', 'n', 't' }; static const symbol s_5_30[3] = { 0xC3, 0xAE, 't' }; static const symbol s_5_31[5] = { 'i', 'r', 'i', 'e', 'z' }; static const symbol s_5_32[6] = { 'i', 's', 's', 'i', 'e', 'z' }; static const symbol s_5_33[4] = { 'i', 'r', 'e', 'z' }; static const symbol s_5_34[5] = { 'i', 's', 's', 'e', 'z' }; static const struct among a_5[35] = { /* 0 */ { 3, s_5_0, -1, 1, 0}, /* 1 */ { 2, s_5_1, -1, 1, 0}, /* 2 */ { 4, s_5_2, -1, 1, 0}, /* 3 */ { 7, s_5_3, -1, 1, 0}, /* 4 */ { 1, s_5_4, -1, 1, 0}, /* 5 */ { 4, s_5_5, 4, 1, 0}, /* 6 */ { 2, s_5_6, -1, 1, 0}, /* 7 */ { 4, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 1, 0}, /* 9 */ { 5, s_5_9, -1, 1, 0}, /* 10 */ { 5, s_5_10, -1, 1, 0}, /* 11 */ { 8, s_5_11, -1, 1, 0}, /* 12 */ { 5, s_5_12, -1, 1, 0}, /* 13 */ { 2, s_5_13, -1, 1, 0}, /* 14 */ { 5, s_5_14, 13, 1, 0}, /* 15 */ { 6, s_5_15, 13, 1, 0}, /* 16 */ { 6, s_5_16, -1, 1, 0}, /* 17 */ { 7, s_5_17, -1, 1, 0}, /* 18 */ { 5, s_5_18, -1, 1, 0}, /* 19 */ { 6, s_5_19, -1, 1, 0}, /* 20 */ { 7, s_5_20, -1, 1, 0}, /* 21 */ { 2, s_5_21, -1, 1, 0}, /* 22 */ { 5, s_5_22, 21, 1, 0}, /* 23 */ { 6, s_5_23, 21, 1, 0}, /* 24 */ { 6, s_5_24, -1, 1, 0}, /* 25 */ { 7, s_5_25, -1, 1, 0}, /* 26 */ { 8, s_5_26, -1, 1, 0}, /* 27 */ { 5, s_5_27, -1, 1, 0}, /* 28 */ { 6, s_5_28, -1, 1, 0}, /* 29 */ { 5, s_5_29, -1, 1, 0}, /* 30 */ { 3, s_5_30, -1, 1, 0}, /* 31 */ { 5, s_5_31, -1, 1, 0}, /* 32 */ { 6, s_5_32, -1, 1, 0}, /* 33 */ { 4, s_5_33, -1, 1, 0}, /* 34 */ { 5, s_5_34, -1, 1, 0} }; static const symbol s_6_0[1] = { 'a' }; static const symbol s_6_1[3] = { 'e', 'r', 'a' }; static const symbol s_6_2[4] = { 'a', 's', 's', 'e' }; static const symbol s_6_3[4] = { 'a', 'n', 't', 'e' }; static const symbol s_6_4[3] = { 0xC3, 0xA9, 'e' }; static const symbol s_6_5[2] = { 'a', 'i' }; static const symbol s_6_6[4] = { 'e', 'r', 'a', 'i' }; static const symbol s_6_7[2] = { 'e', 'r' }; static const symbol s_6_8[2] = { 'a', 's' }; static const symbol s_6_9[4] = { 'e', 'r', 'a', 's' }; static const symbol s_6_10[5] = { 0xC3, 0xA2, 'm', 'e', 's' }; static const symbol s_6_11[5] = { 'a', 's', 's', 'e', 's' }; static const symbol s_6_12[5] = { 'a', 'n', 't', 'e', 's' }; static const symbol s_6_13[5] = { 0xC3, 0xA2, 't', 'e', 's' }; static const symbol s_6_14[4] = { 0xC3, 0xA9, 'e', 's' }; static const symbol s_6_15[3] = { 'a', 'i', 's' }; static const symbol s_6_16[5] = { 'e', 'r', 'a', 'i', 's' }; static const symbol s_6_17[4] = { 'i', 'o', 'n', 's' }; static const symbol s_6_18[6] = { 'e', 'r', 'i', 'o', 'n', 's' }; static const symbol s_6_19[7] = { 'a', 's', 's', 'i', 'o', 'n', 's' }; static const symbol s_6_20[5] = { 'e', 'r', 'o', 'n', 's' }; static const symbol s_6_21[4] = { 'a', 'n', 't', 's' }; static const symbol s_6_22[3] = { 0xC3, 0xA9, 's' }; static const symbol s_6_23[3] = { 'a', 'i', 't' }; static const symbol s_6_24[5] = { 'e', 'r', 'a', 'i', 't' }; static const symbol s_6_25[3] = { 'a', 'n', 't' }; static const symbol s_6_26[5] = { 'a', 'I', 'e', 'n', 't' }; static const symbol s_6_27[7] = { 'e', 'r', 'a', 'I', 'e', 'n', 't' }; static const symbol s_6_28[6] = { 0xC3, 0xA8, 'r', 'e', 'n', 't' }; static const symbol s_6_29[6] = { 'a', 's', 's', 'e', 'n', 't' }; static const symbol s_6_30[5] = { 'e', 'r', 'o', 'n', 't' }; static const symbol s_6_31[3] = { 0xC3, 0xA2, 't' }; static const symbol s_6_32[2] = { 'e', 'z' }; static const symbol s_6_33[3] = { 'i', 'e', 'z' }; static const symbol s_6_34[5] = { 'e', 'r', 'i', 'e', 'z' }; static const symbol s_6_35[6] = { 'a', 's', 's', 'i', 'e', 'z' }; static const symbol s_6_36[4] = { 'e', 'r', 'e', 'z' }; static const symbol s_6_37[2] = { 0xC3, 0xA9 }; static const struct among a_6[38] = { /* 0 */ { 1, s_6_0, -1, 3, 0}, /* 1 */ { 3, s_6_1, 0, 2, 0}, /* 2 */ { 4, s_6_2, -1, 3, 0}, /* 3 */ { 4, s_6_3, -1, 3, 0}, /* 4 */ { 3, s_6_4, -1, 2, 0}, /* 5 */ { 2, s_6_5, -1, 3, 0}, /* 6 */ { 4, s_6_6, 5, 2, 0}, /* 7 */ { 2, s_6_7, -1, 2, 0}, /* 8 */ { 2, s_6_8, -1, 3, 0}, /* 9 */ { 4, s_6_9, 8, 2, 0}, /* 10 */ { 5, s_6_10, -1, 3, 0}, /* 11 */ { 5, s_6_11, -1, 3, 0}, /* 12 */ { 5, s_6_12, -1, 3, 0}, /* 13 */ { 5, s_6_13, -1, 3, 0}, /* 14 */ { 4, s_6_14, -1, 2, 0}, /* 15 */ { 3, s_6_15, -1, 3, 0}, /* 16 */ { 5, s_6_16, 15, 2, 0}, /* 17 */ { 4, s_6_17, -1, 1, 0}, /* 18 */ { 6, s_6_18, 17, 2, 0}, /* 19 */ { 7, s_6_19, 17, 3, 0}, /* 20 */ { 5, s_6_20, -1, 2, 0}, /* 21 */ { 4, s_6_21, -1, 3, 0}, /* 22 */ { 3, s_6_22, -1, 2, 0}, /* 23 */ { 3, s_6_23, -1, 3, 0}, /* 24 */ { 5, s_6_24, 23, 2, 0}, /* 25 */ { 3, s_6_25, -1, 3, 0}, /* 26 */ { 5, s_6_26, -1, 3, 0}, /* 27 */ { 7, s_6_27, 26, 2, 0}, /* 28 */ { 6, s_6_28, -1, 2, 0}, /* 29 */ { 6, s_6_29, -1, 3, 0}, /* 30 */ { 5, s_6_30, -1, 2, 0}, /* 31 */ { 3, s_6_31, -1, 3, 0}, /* 32 */ { 2, s_6_32, -1, 2, 0}, /* 33 */ { 3, s_6_33, 32, 2, 0}, /* 34 */ { 5, s_6_34, 33, 2, 0}, /* 35 */ { 6, s_6_35, 33, 3, 0}, /* 36 */ { 4, s_6_36, 32, 2, 0}, /* 37 */ { 2, s_6_37, -1, 2, 0} }; static const symbol s_7_0[1] = { 'e' }; static const symbol s_7_1[5] = { 'I', 0xC3, 0xA8, 'r', 'e' }; static const symbol s_7_2[5] = { 'i', 0xC3, 0xA8, 'r', 'e' }; static const symbol s_7_3[3] = { 'i', 'o', 'n' }; static const symbol s_7_4[3] = { 'I', 'e', 'r' }; static const symbol s_7_5[3] = { 'i', 'e', 'r' }; static const symbol s_7_6[2] = { 0xC3, 0xAB }; static const struct among a_7[7] = { /* 0 */ { 1, s_7_0, -1, 3, 0}, /* 1 */ { 5, s_7_1, 0, 2, 0}, /* 2 */ { 5, s_7_2, 0, 2, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 3, s_7_4, -1, 2, 0}, /* 5 */ { 3, s_7_5, -1, 2, 0}, /* 6 */ { 2, s_7_6, -1, 4, 0} }; static const symbol s_8_0[3] = { 'e', 'l', 'l' }; static const symbol s_8_1[4] = { 'e', 'i', 'l', 'l' }; static const symbol s_8_2[3] = { 'e', 'n', 'n' }; static const symbol s_8_3[3] = { 'o', 'n', 'n' }; static const symbol s_8_4[3] = { 'e', 't', 't' }; static const struct among a_8[5] = { /* 0 */ { 3, s_8_0, -1, -1, 0}, /* 1 */ { 4, s_8_1, -1, -1, 0}, /* 2 */ { 3, s_8_2, -1, -1, 0}, /* 3 */ { 3, s_8_3, -1, -1, 0}, /* 4 */ { 3, s_8_4, -1, -1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 130, 103, 8, 5 }; static const unsigned char g_keep_with_s[] = { 1, 65, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128 }; static const symbol s_0[] = { 'U' }; static const symbol s_1[] = { 'I' }; static const symbol s_2[] = { 'Y' }; static const symbol s_3[] = { 'Y' }; static const symbol s_4[] = { 'U' }; static const symbol s_5[] = { 'i' }; static const symbol s_6[] = { 'u' }; static const symbol s_7[] = { 'y' }; static const symbol s_8[] = { 'i', 'c' }; static const symbol s_9[] = { 'i', 'q', 'U' }; static const symbol s_10[] = { 'l', 'o', 'g' }; static const symbol s_11[] = { 'u' }; static const symbol s_12[] = { 'e', 'n', 't' }; static const symbol s_13[] = { 'a', 't' }; static const symbol s_14[] = { 'e', 'u', 'x' }; static const symbol s_15[] = { 'i' }; static const symbol s_16[] = { 'a', 'b', 'l' }; static const symbol s_17[] = { 'i', 'q', 'U' }; static const symbol s_18[] = { 'a', 't' }; static const symbol s_19[] = { 'i', 'c' }; static const symbol s_20[] = { 'i', 'q', 'U' }; static const symbol s_21[] = { 'e', 'a', 'u' }; static const symbol s_22[] = { 'a', 'l' }; static const symbol s_23[] = { 'e', 'u', 'x' }; static const symbol s_24[] = { 'a', 'n', 't' }; static const symbol s_25[] = { 'e', 'n', 't' }; static const symbol s_26[] = { 'i' }; static const symbol s_27[] = { 'g', 'u' }; static const symbol s_28[] = { 0xC3, 0xA9 }; static const symbol s_29[] = { 0xC3, 0xA8 }; static const symbol s_30[] = { 'e' }; static const symbol s_31[] = { 'i' }; static const symbol s_32[] = { 0xC3, 0xA7 }; static const symbol s_33[] = { 'c' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ while(1) { /* repeat, line 38 */ int c1 = z->c; while(1) { /* goto, line 38 */ int c2 = z->c; { int c3 = z->c; /* or, line 44 */ if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab3; /* grouping v, line 40 */ z->bra = z->c; /* [, line 40 */ { int c4 = z->c; /* or, line 40 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab5; /* literal, line 40 */ z->c++; z->ket = z->c; /* ], line 40 */ if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab5; /* grouping v, line 40 */ { int ret = slice_from_s(z, 1, s_0); /* <-, line 40 */ if (ret < 0) return ret; } goto lab4; lab5: z->c = c4; if (z->c == z->l || z->p[z->c] != 'i') goto lab6; /* literal, line 41 */ z->c++; z->ket = z->c; /* ], line 41 */ if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab6; /* grouping v, line 41 */ { int ret = slice_from_s(z, 1, s_1); /* <-, line 41 */ if (ret < 0) return ret; } goto lab4; lab6: z->c = c4; if (z->c == z->l || z->p[z->c] != 'y') goto lab3; /* literal, line 42 */ z->c++; z->ket = z->c; /* ], line 42 */ { int ret = slice_from_s(z, 1, s_2); /* <-, line 42 */ if (ret < 0) return ret; } } lab4: goto lab2; lab3: z->c = c3; z->bra = z->c; /* [, line 45 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab7; /* literal, line 45 */ z->c++; z->ket = z->c; /* ], line 45 */ if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab7; /* grouping v, line 45 */ { int ret = slice_from_s(z, 1, s_3); /* <-, line 45 */ if (ret < 0) return ret; } goto lab2; lab7: z->c = c3; if (z->c == z->l || z->p[z->c] != 'q') goto lab1; /* literal, line 47 */ z->c++; z->bra = z->c; /* [, line 47 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab1; /* literal, line 47 */ z->c++; z->ket = z->c; /* ], line 47 */ { int ret = slice_from_s(z, 1, s_4); /* <-, line 47 */ if (ret < 0) return ret; } } lab2: z->c = c2; break; lab1: z->c = c2; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* goto, line 38 */ } } continue; lab0: z->c = c1; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 52 */ z->I[1] = z->l; /* $p1 = , line 53 */ z->I[2] = z->l; /* $p2 = , line 54 */ { int c1 = z->c; /* do, line 56 */ { int c2 = z->c; /* or, line 58 */ if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab2; /* grouping v, line 57 */ if (in_grouping_U(z, g_v, 97, 251, 0)) goto lab2; /* grouping v, line 57 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab2; z->c = ret; /* next, line 57 */ } goto lab1; lab2: z->c = c2; if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 3 || !((331776 >> (z->p[z->c + 2] & 0x1f)) & 1)) goto lab3; /* among, line 59 */ if (!(find_among(z, a_0, 3))) goto lab3; goto lab1; lab3: z->c = c2; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 66 */ } { /* gopast */ /* grouping v, line 66 */ int ret = out_grouping_U(z, g_v, 97, 251, 1); if (ret < 0) goto lab0; z->c += ret; } } lab1: z->I[0] = z->c; /* setmark pV, line 67 */ lab0: z->c = c1; } { int c3 = z->c; /* do, line 69 */ { /* gopast */ /* grouping v, line 70 */ int ret = out_grouping_U(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 70 */ int ret = in_grouping_U(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 70 */ { /* gopast */ /* grouping v, line 71 */ int ret = out_grouping_U(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 71 */ int ret = in_grouping_U(z, g_v, 97, 251, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 71 */ lab4: z->c = c3; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 75 */ int c1 = z->c; z->bra = z->c; /* [, line 77 */ if (z->c >= z->l || z->p[z->c + 0] >> 5 != 2 || !((35652096 >> (z->p[z->c + 0] & 0x1f)) & 1)) among_var = 4; else /* substring, line 77 */ among_var = find_among(z, a_1, 4); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 77 */ switch (among_var) { /* among, line 77 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_5); /* <-, line 78 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_6); /* <-, line 79 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_7); /* <-, line 80 */ if (ret < 0) return ret; } break; case 4: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 81 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 87 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 88 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 89 */ return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 92 */ among_var = find_among_b(z, a_4, 43); /* substring, line 92 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ switch (among_var) { /* among, line 92 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 96 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 99 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 100 */ z->ket = z->c; /* [, line 100 */ if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m1; goto lab0; } /* literal, line 100 */ z->bra = z->c; /* ], line 100 */ { int m2 = z->l - z->c; (void)m2; /* or, line 100 */ { int ret = r_R2(z); /* call R2, line 100 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 100 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = z->l - m2; { int ret = slice_from_s(z, 3, s_9); /* <-, line 100 */ if (ret < 0) return ret; } } lab1: lab0: ; } break; case 3: { int ret = r_R2(z); /* call R2, line 104 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_10); /* <-, line 104 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 107 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_11); /* <-, line 107 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 110 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_12); /* <-, line 110 */ if (ret < 0) return ret; } break; case 6: { int ret = r_RV(z); /* call RV, line 114 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 114 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 115 */ z->ket = z->c; /* [, line 116 */ among_var = find_among_b(z, a_2, 6); /* substring, line 116 */ if (!(among_var)) { z->c = z->l - m3; goto lab3; } z->bra = z->c; /* ], line 116 */ switch (among_var) { /* among, line 116 */ case 0: { z->c = z->l - m3; goto lab3; } case 1: { int ret = r_R2(z); /* call R2, line 117 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 117 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 117 */ if (!(eq_s_b(z, 2, s_13))) { z->c = z->l - m3; goto lab3; } /* literal, line 117 */ z->bra = z->c; /* ], line 117 */ { int ret = r_R2(z); /* call R2, line 117 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 117 */ if (ret < 0) return ret; } break; case 2: { int m4 = z->l - z->c; (void)m4; /* or, line 118 */ { int ret = r_R2(z); /* call R2, line 118 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 118 */ if (ret < 0) return ret; } goto lab4; lab5: z->c = z->l - m4; { int ret = r_R1(z); /* call R1, line 118 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_from_s(z, 3, s_14); /* <-, line 118 */ if (ret < 0) return ret; } } lab4: break; case 3: { int ret = r_R2(z); /* call R2, line 120 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 120 */ if (ret < 0) return ret; } break; case 4: { int ret = r_RV(z); /* call RV, line 122 */ if (ret == 0) { z->c = z->l - m3; goto lab3; } if (ret < 0) return ret; } { int ret = slice_from_s(z, 1, s_15); /* <-, line 122 */ if (ret < 0) return ret; } break; } lab3: ; } break; case 7: { int ret = r_R2(z); /* call R2, line 129 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 129 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 130 */ z->ket = z->c; /* [, line 131 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m5; goto lab6; } /* substring, line 131 */ among_var = find_among_b(z, a_3, 3); if (!(among_var)) { z->c = z->l - m5; goto lab6; } z->bra = z->c; /* ], line 131 */ switch (among_var) { /* among, line 131 */ case 0: { z->c = z->l - m5; goto lab6; } case 1: { int m6 = z->l - z->c; (void)m6; /* or, line 132 */ { int ret = r_R2(z); /* call R2, line 132 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 132 */ if (ret < 0) return ret; } goto lab7; lab8: z->c = z->l - m6; { int ret = slice_from_s(z, 3, s_16); /* <-, line 132 */ if (ret < 0) return ret; } } lab7: break; case 2: { int m7 = z->l - z->c; (void)m7; /* or, line 133 */ { int ret = r_R2(z); /* call R2, line 133 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 133 */ if (ret < 0) return ret; } goto lab9; lab10: z->c = z->l - m7; { int ret = slice_from_s(z, 3, s_17); /* <-, line 133 */ if (ret < 0) return ret; } } lab9: break; case 3: { int ret = r_R2(z); /* call R2, line 134 */ if (ret == 0) { z->c = z->l - m5; goto lab6; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } break; } lab6: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 141 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 141 */ if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* try, line 142 */ z->ket = z->c; /* [, line 142 */ if (!(eq_s_b(z, 2, s_18))) { z->c = z->l - m8; goto lab11; } /* literal, line 142 */ z->bra = z->c; /* ], line 142 */ { int ret = r_R2(z); /* call R2, line 142 */ if (ret == 0) { z->c = z->l - m8; goto lab11; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 142 */ if (!(eq_s_b(z, 2, s_19))) { z->c = z->l - m8; goto lab11; } /* literal, line 142 */ z->bra = z->c; /* ], line 142 */ { int m9 = z->l - z->c; (void)m9; /* or, line 142 */ { int ret = r_R2(z); /* call R2, line 142 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } goto lab12; lab13: z->c = z->l - m9; { int ret = slice_from_s(z, 3, s_20); /* <-, line 142 */ if (ret < 0) return ret; } } lab12: lab11: ; } break; case 9: { int ret = slice_from_s(z, 3, s_21); /* <-, line 144 */ if (ret < 0) return ret; } break; case 10: { int ret = r_R1(z); /* call R1, line 145 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 2, s_22); /* <-, line 145 */ if (ret < 0) return ret; } break; case 11: { int m10 = z->l - z->c; (void)m10; /* or, line 147 */ { int ret = r_R2(z); /* call R2, line 147 */ if (ret == 0) goto lab15; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 147 */ if (ret < 0) return ret; } goto lab14; lab15: z->c = z->l - m10; { int ret = r_R1(z); /* call R1, line 147 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_23); /* <-, line 147 */ if (ret < 0) return ret; } } lab14: break; case 12: { int ret = r_R1(z); /* call R1, line 150 */ if (ret <= 0) return ret; } if (out_grouping_b_U(z, g_v, 97, 251, 0)) return 0; /* non v, line 150 */ { int ret = slice_del(z); /* delete, line 150 */ if (ret < 0) return ret; } break; case 13: { int ret = r_RV(z); /* call RV, line 155 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_24); /* <-, line 155 */ if (ret < 0) return ret; } return 0; /* fail, line 155 */ break; case 14: { int ret = r_RV(z); /* call RV, line 156 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_25); /* <-, line 156 */ if (ret < 0) return ret; } return 0; /* fail, line 156 */ break; case 15: { int m_test11 = z->l - z->c; /* test, line 158 */ if (in_grouping_b_U(z, g_v, 97, 251, 0)) return 0; /* grouping v, line 158 */ { int ret = r_RV(z); /* call RV, line 158 */ if (ret <= 0) return ret; } z->c = z->l - m_test11; } { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } return 0; /* fail, line 158 */ break; } return 1; } static int r_i_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 163 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 163 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 164 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68944418 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 164 */ among_var = find_among_b(z, a_5, 35); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 164 */ switch (among_var) { /* among, line 164 */ case 0: { z->lb = mlimit1; return 0; } case 1: if (out_grouping_b_U(z, g_v, 97, 251, 0)) { z->lb = mlimit1; return 0; } /* non v, line 170 */ { int ret = slice_del(z); /* delete, line 170 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 174 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 174 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 175 */ among_var = find_among_b(z, a_6, 38); /* substring, line 175 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 175 */ switch (among_var) { /* among, line 175 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = r_R2(z); /* call R2, line 177 */ if (ret == 0) { z->lb = mlimit1; return 0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 177 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 185 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 190 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 191 */ z->ket = z->c; /* [, line 191 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') { z->c = z->l - m2; goto lab0; } /* literal, line 191 */ z->c--; z->bra = z->c; /* ], line 191 */ { int ret = slice_del(z); /* delete, line 191 */ if (ret < 0) return ret; } lab0: ; } break; } z->lb = mlimit1; } return 1; } static int r_residual_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* try, line 199 */ z->ket = z->c; /* [, line 199 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') { z->c = z->l - m1; goto lab0; } /* literal, line 199 */ z->c--; z->bra = z->c; /* ], line 199 */ { int m_test2 = z->l - z->c; /* test, line 199 */ if (out_grouping_b_U(z, g_keep_with_s, 97, 232, 0)) { z->c = z->l - m1; goto lab0; } /* non keep_with_s, line 199 */ z->c = z->l - m_test2; } { int ret = slice_del(z); /* delete, line 199 */ if (ret < 0) return ret; } lab0: ; } { int m3 = z->l - z->c; (void)m3; /* setlimit, line 200 */ int mlimit3; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 200 */ mlimit3 = z->lb; z->lb = z->c; z->c = z->l - m3; z->ket = z->c; /* [, line 201 */ among_var = find_among_b(z, a_7, 7); /* substring, line 201 */ if (!(among_var)) { z->lb = mlimit3; return 0; } z->bra = z->c; /* ], line 201 */ switch (among_var) { /* among, line 201 */ case 0: { z->lb = mlimit3; return 0; } case 1: { int ret = r_R2(z); /* call R2, line 202 */ if (ret == 0) { z->lb = mlimit3; return 0; } if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* or, line 202 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab2; /* literal, line 202 */ z->c--; goto lab1; lab2: z->c = z->l - m4; if (z->c <= z->lb || z->p[z->c - 1] != 't') { z->lb = mlimit3; return 0; } /* literal, line 202 */ z->c--; } lab1: { int ret = slice_del(z); /* delete, line 202 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_26); /* <-, line 204 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 205 */ if (ret < 0) return ret; } break; case 4: if (!(eq_s_b(z, 2, s_27))) { z->lb = mlimit3; return 0; } /* literal, line 206 */ { int ret = slice_del(z); /* delete, line 206 */ if (ret < 0) return ret; } break; } z->lb = mlimit3; } return 1; } static int r_un_double(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 212 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1069056 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 212 */ if (!(find_among_b(z, a_8, 5))) return 0; z->c = z->l - m_test1; } z->ket = z->c; /* [, line 212 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 212 */ } z->bra = z->c; /* ], line 212 */ { int ret = slice_del(z); /* delete, line 212 */ if (ret < 0) return ret; } return 1; } static int r_un_accent(struct SN_env * z) { /* backwardmode */ { int i = 1; while(1) { /* atleast, line 216 */ if (out_grouping_b_U(z, g_v, 97, 251, 0)) goto lab0; /* non v, line 216 */ i--; continue; lab0: break; } if (i > 0) return 0; } z->ket = z->c; /* [, line 217 */ { int m1 = z->l - z->c; (void)m1; /* or, line 217 */ if (!(eq_s_b(z, 2, s_28))) goto lab2; /* literal, line 217 */ goto lab1; lab2: z->c = z->l - m1; if (!(eq_s_b(z, 2, s_29))) return 0; /* literal, line 217 */ } lab1: z->bra = z->c; /* ], line 217 */ { int ret = slice_from_s(z, 1, s_30); /* <-, line 217 */ if (ret < 0) return ret; } return 1; } extern int french_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 223 */ { int ret = r_prelude(z); /* call prelude, line 223 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 224 */ { int ret = r_mark_regions(z); /* call mark_regions, line 224 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 225 */ { int m3 = z->l - z->c; (void)m3; /* do, line 227 */ { int m4 = z->l - z->c; (void)m4; /* or, line 237 */ { int m5 = z->l - z->c; (void)m5; /* and, line 233 */ { int m6 = z->l - z->c; (void)m6; /* or, line 229 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 229 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_i_verb_suffix(z); /* call i_verb_suffix, line 230 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } goto lab5; lab7: z->c = z->l - m6; { int ret = r_verb_suffix(z); /* call verb_suffix, line 231 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: z->c = z->l - m5; { int m7 = z->l - z->c; (void)m7; /* try, line 234 */ z->ket = z->c; /* [, line 234 */ { int m8 = z->l - z->c; (void)m8; /* or, line 234 */ if (z->c <= z->lb || z->p[z->c - 1] != 'Y') goto lab10; /* literal, line 234 */ z->c--; z->bra = z->c; /* ], line 234 */ { int ret = slice_from_s(z, 1, s_31); /* <-, line 234 */ if (ret < 0) return ret; } goto lab9; lab10: z->c = z->l - m8; if (!(eq_s_b(z, 2, s_32))) { z->c = z->l - m7; goto lab8; } /* literal, line 235 */ z->bra = z->c; /* ], line 235 */ { int ret = slice_from_s(z, 1, s_33); /* <-, line 235 */ if (ret < 0) return ret; } } lab9: lab8: ; } } goto lab3; lab4: z->c = z->l - m4; { int ret = r_residual_suffix(z); /* call residual_suffix, line 238 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } { int m9 = z->l - z->c; (void)m9; /* do, line 243 */ { int ret = r_un_double(z); /* call un_double, line 243 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } lab11: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 244 */ { int ret = r_un_accent(z); /* call un_accent, line 244 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } lab12: z->c = z->l - m10; } z->c = z->lb; { int c11 = z->c; /* do, line 246 */ { int ret = r_postlude(z); /* call postlude, line 246 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } lab13: z->c = c11; } return 1; } extern struct SN_env * french_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } extern void french_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_french.h000066400000000000000000000005231364126773500234270ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * french_UTF_8_create_env(void); extern void french_UTF_8_close_env(struct SN_env * z); extern int french_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_german.c000066400000000000000000000446231364126773500234370ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int german_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_standard_suffix(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * german_UTF_8_create_env(void); extern void german_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 'U' }; static const symbol s_0_2[1] = { 'Y' }; static const symbol s_0_3[2] = { 0xC3, 0xA4 }; static const symbol s_0_4[2] = { 0xC3, 0xB6 }; static const symbol s_0_5[2] = { 0xC3, 0xBC }; static const struct among a_0[6] = { /* 0 */ { 0, 0, -1, 6, 0}, /* 1 */ { 1, s_0_1, 0, 2, 0}, /* 2 */ { 1, s_0_2, 0, 1, 0}, /* 3 */ { 2, s_0_3, 0, 3, 0}, /* 4 */ { 2, s_0_4, 0, 4, 0}, /* 5 */ { 2, s_0_5, 0, 5, 0} }; static const symbol s_1_0[1] = { 'e' }; static const symbol s_1_1[2] = { 'e', 'm' }; static const symbol s_1_2[2] = { 'e', 'n' }; static const symbol s_1_3[3] = { 'e', 'r', 'n' }; static const symbol s_1_4[2] = { 'e', 'r' }; static const symbol s_1_5[1] = { 's' }; static const symbol s_1_6[2] = { 'e', 's' }; static const struct among a_1[7] = { /* 0 */ { 1, s_1_0, -1, 2, 0}, /* 1 */ { 2, s_1_1, -1, 1, 0}, /* 2 */ { 2, s_1_2, -1, 2, 0}, /* 3 */ { 3, s_1_3, -1, 1, 0}, /* 4 */ { 2, s_1_4, -1, 1, 0}, /* 5 */ { 1, s_1_5, -1, 3, 0}, /* 6 */ { 2, s_1_6, 5, 2, 0} }; static const symbol s_2_0[2] = { 'e', 'n' }; static const symbol s_2_1[2] = { 'e', 'r' }; static const symbol s_2_2[2] = { 's', 't' }; static const symbol s_2_3[3] = { 'e', 's', 't' }; static const struct among a_2[4] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 2, s_2_1, -1, 1, 0}, /* 2 */ { 2, s_2_2, -1, 2, 0}, /* 3 */ { 3, s_2_3, 2, 1, 0} }; static const symbol s_3_0[2] = { 'i', 'g' }; static const symbol s_3_1[4] = { 'l', 'i', 'c', 'h' }; static const struct among a_3[2] = { /* 0 */ { 2, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0} }; static const symbol s_4_0[3] = { 'e', 'n', 'd' }; static const symbol s_4_1[2] = { 'i', 'g' }; static const symbol s_4_2[3] = { 'u', 'n', 'g' }; static const symbol s_4_3[4] = { 'l', 'i', 'c', 'h' }; static const symbol s_4_4[4] = { 'i', 's', 'c', 'h' }; static const symbol s_4_5[2] = { 'i', 'k' }; static const symbol s_4_6[4] = { 'h', 'e', 'i', 't' }; static const symbol s_4_7[4] = { 'k', 'e', 'i', 't' }; static const struct among a_4[8] = { /* 0 */ { 3, s_4_0, -1, 1, 0}, /* 1 */ { 2, s_4_1, -1, 2, 0}, /* 2 */ { 3, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 3, 0}, /* 4 */ { 4, s_4_4, -1, 2, 0}, /* 5 */ { 2, s_4_5, -1, 2, 0}, /* 6 */ { 4, s_4_6, -1, 3, 0}, /* 7 */ { 4, s_4_7, -1, 4, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8 }; static const unsigned char g_s_ending[] = { 117, 30, 5 }; static const unsigned char g_st_ending[] = { 117, 30, 4 }; static const symbol s_0[] = { 0xC3, 0x9F }; static const symbol s_1[] = { 's', 's' }; static const symbol s_2[] = { 'U' }; static const symbol s_3[] = { 'Y' }; static const symbol s_4[] = { 'y' }; static const symbol s_5[] = { 'u' }; static const symbol s_6[] = { 'a' }; static const symbol s_7[] = { 'o' }; static const symbol s_8[] = { 'u' }; static const symbol s_9[] = { 'n', 'i', 's' }; static const symbol s_10[] = { 'i', 'g' }; static const symbol s_11[] = { 'e', 'r' }; static const symbol s_12[] = { 'e', 'n' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ { int c_test1 = z->c; /* test, line 35 */ while(1) { /* repeat, line 35 */ int c2 = z->c; { int c3 = z->c; /* or, line 38 */ z->bra = z->c; /* [, line 37 */ if (!(eq_s(z, 2, s_0))) goto lab2; /* literal, line 37 */ z->ket = z->c; /* ], line 37 */ { int ret = slice_from_s(z, 2, s_1); /* <-, line 37 */ if (ret < 0) return ret; } goto lab1; lab2: z->c = c3; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 38 */ } } lab1: continue; lab0: z->c = c2; break; } z->c = c_test1; } while(1) { /* repeat, line 41 */ int c4 = z->c; while(1) { /* goto, line 41 */ int c5 = z->c; if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab4; /* grouping v, line 42 */ z->bra = z->c; /* [, line 42 */ { int c6 = z->c; /* or, line 42 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab6; /* literal, line 42 */ z->c++; z->ket = z->c; /* ], line 42 */ if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab6; /* grouping v, line 42 */ { int ret = slice_from_s(z, 1, s_2); /* <-, line 42 */ if (ret < 0) return ret; } goto lab5; lab6: z->c = c6; if (z->c == z->l || z->p[z->c] != 'y') goto lab4; /* literal, line 43 */ z->c++; z->ket = z->c; /* ], line 43 */ if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab4; /* grouping v, line 43 */ { int ret = slice_from_s(z, 1, s_3); /* <-, line 43 */ if (ret < 0) return ret; } } lab5: z->c = c5; break; lab4: z->c = c5; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab3; z->c = ret; /* goto, line 41 */ } } continue; lab3: z->c = c4; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 49 */ z->I[1] = z->l; /* $p2 = , line 50 */ { int c_test1 = z->c; /* test, line 52 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, + 3); /* hop, line 52 */ if (ret < 0) return 0; z->c = ret; } z->I[2] = z->c; /* setmark x, line 52 */ z->c = c_test1; } { /* gopast */ /* grouping v, line 54 */ int ret = out_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 54 */ int ret = in_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 54 */ /* try, line 55 */ if (!(z->I[0] < z->I[2])) goto lab0; /* $p1 < , line 55 */ z->I[0] = z->I[2]; /* $p1 = , line 55 */ lab0: { /* gopast */ /* grouping v, line 56 */ int ret = out_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } { /* gopast */ /* non v, line 56 */ int ret = in_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) return 0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 56 */ return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 60 */ int c1 = z->c; z->bra = z->c; /* [, line 62 */ among_var = find_among(z, a_0, 6); /* substring, line 62 */ if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 62 */ switch (among_var) { /* among, line 62 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_4); /* <-, line 63 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_5); /* <-, line 64 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_6); /* <-, line 65 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_7); /* <-, line 66 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_8); /* <-, line 67 */ if (ret < 0) return ret; } break; case 6: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 68 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 75 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 76 */ return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* do, line 79 */ z->ket = z->c; /* [, line 80 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((811040 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab0; /* substring, line 80 */ among_var = find_among_b(z, a_1, 7); if (!(among_var)) goto lab0; z->bra = z->c; /* ], line 80 */ { int ret = r_R1(z); /* call R1, line 80 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } switch (among_var) { /* among, line 80 */ case 0: goto lab0; case 1: { int ret = slice_del(z); /* delete, line 82 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 85 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 86 */ z->ket = z->c; /* [, line 86 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') { z->c = z->l - m2; goto lab1; } /* literal, line 86 */ z->c--; z->bra = z->c; /* ], line 86 */ if (!(eq_s_b(z, 3, s_9))) { z->c = z->l - m2; goto lab1; } /* literal, line 86 */ { int ret = slice_del(z); /* delete, line 86 */ if (ret < 0) return ret; } lab1: ; } break; case 3: if (in_grouping_b_U(z, g_s_ending, 98, 116, 0)) goto lab0; /* grouping s_ending, line 89 */ { int ret = slice_del(z); /* delete, line 89 */ if (ret < 0) return ret; } break; } lab0: z->c = z->l - m1; } { int m3 = z->l - z->c; (void)m3; /* do, line 93 */ z->ket = z->c; /* [, line 94 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1327104 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab2; /* substring, line 94 */ among_var = find_among_b(z, a_2, 4); if (!(among_var)) goto lab2; z->bra = z->c; /* ], line 94 */ { int ret = r_R1(z); /* call R1, line 94 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } switch (among_var) { /* among, line 94 */ case 0: goto lab2; case 1: { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; case 2: if (in_grouping_b_U(z, g_st_ending, 98, 116, 0)) goto lab2; /* grouping st_ending, line 99 */ { int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 3); /* hop, line 99 */ if (ret < 0) goto lab2; z->c = ret; } { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } break; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 103 */ z->ket = z->c; /* [, line 104 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1051024 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab3; /* substring, line 104 */ among_var = find_among_b(z, a_4, 8); if (!(among_var)) goto lab3; z->bra = z->c; /* ], line 104 */ { int ret = r_R2(z); /* call R2, line 104 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } switch (among_var) { /* among, line 104 */ case 0: goto lab3; case 1: { int ret = slice_del(z); /* delete, line 106 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 107 */ z->ket = z->c; /* [, line 107 */ if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m5; goto lab4; } /* literal, line 107 */ z->bra = z->c; /* ], line 107 */ { int m6 = z->l - z->c; (void)m6; /* not, line 107 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab5; /* literal, line 107 */ z->c--; { z->c = z->l - m5; goto lab4; } lab5: z->c = z->l - m6; } { int ret = r_R2(z); /* call R2, line 107 */ if (ret == 0) { z->c = z->l - m5; goto lab4; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 107 */ if (ret < 0) return ret; } lab4: ; } break; case 2: { int m7 = z->l - z->c; (void)m7; /* not, line 110 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab6; /* literal, line 110 */ z->c--; goto lab3; lab6: z->c = z->l - m7; } { int ret = slice_del(z); /* delete, line 110 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 113 */ if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* try, line 114 */ z->ket = z->c; /* [, line 115 */ { int m9 = z->l - z->c; (void)m9; /* or, line 115 */ if (!(eq_s_b(z, 2, s_11))) goto lab9; /* literal, line 115 */ goto lab8; lab9: z->c = z->l - m9; if (!(eq_s_b(z, 2, s_12))) { z->c = z->l - m8; goto lab7; } /* literal, line 115 */ } lab8: z->bra = z->c; /* ], line 115 */ { int ret = r_R1(z); /* call R1, line 115 */ if (ret == 0) { z->c = z->l - m8; goto lab7; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 115 */ if (ret < 0) return ret; } lab7: ; } break; case 4: { int ret = slice_del(z); /* delete, line 119 */ if (ret < 0) return ret; } { int m10 = z->l - z->c; (void)m10; /* try, line 120 */ z->ket = z->c; /* [, line 121 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 103 && z->p[z->c - 1] != 104)) { z->c = z->l - m10; goto lab10; } /* substring, line 121 */ among_var = find_among_b(z, a_3, 2); if (!(among_var)) { z->c = z->l - m10; goto lab10; } z->bra = z->c; /* ], line 121 */ { int ret = r_R2(z); /* call R2, line 121 */ if (ret == 0) { z->c = z->l - m10; goto lab10; } if (ret < 0) return ret; } switch (among_var) { /* among, line 121 */ case 0: { z->c = z->l - m10; goto lab10; } case 1: { int ret = slice_del(z); /* delete, line 123 */ if (ret < 0) return ret; } break; } lab10: ; } break; } lab3: z->c = z->l - m4; } return 1; } extern int german_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 134 */ { int ret = r_prelude(z); /* call prelude, line 134 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 135 */ { int ret = r_mark_regions(z); /* call mark_regions, line 135 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 136 */ { int m3 = z->l - z->c; (void)m3; /* do, line 137 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 137 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } z->c = z->lb; { int c4 = z->c; /* do, line 138 */ { int ret = r_postlude(z); /* call postlude, line 138 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = c4; } return 1; } extern struct SN_env * german_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } extern void german_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_german.h000066400000000000000000000005231364126773500234330ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * german_UTF_8_create_env(void); extern void german_UTF_8_close_env(struct SN_env * z); extern int german_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_hungarian.c000066400000000000000000001212241364126773500241330ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int hungarian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_double(struct SN_env * z); static int r_undouble(struct SN_env * z); static int r_factive(struct SN_env * z); static int r_instrum(struct SN_env * z); static int r_plur_owner(struct SN_env * z); static int r_sing_owner(struct SN_env * z); static int r_owned(struct SN_env * z); static int r_plural(struct SN_env * z); static int r_case_other(struct SN_env * z); static int r_case_special(struct SN_env * z); static int r_case(struct SN_env * z); static int r_v_ending(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * hungarian_UTF_8_create_env(void); extern void hungarian_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[2] = { 'c', 's' }; static const symbol s_0_1[3] = { 'd', 'z', 's' }; static const symbol s_0_2[2] = { 'g', 'y' }; static const symbol s_0_3[2] = { 'l', 'y' }; static const symbol s_0_4[2] = { 'n', 'y' }; static const symbol s_0_5[2] = { 's', 'z' }; static const symbol s_0_6[2] = { 't', 'y' }; static const symbol s_0_7[2] = { 'z', 's' }; static const struct among a_0[8] = { /* 0 */ { 2, s_0_0, -1, -1, 0}, /* 1 */ { 3, s_0_1, -1, -1, 0}, /* 2 */ { 2, s_0_2, -1, -1, 0}, /* 3 */ { 2, s_0_3, -1, -1, 0}, /* 4 */ { 2, s_0_4, -1, -1, 0}, /* 5 */ { 2, s_0_5, -1, -1, 0}, /* 6 */ { 2, s_0_6, -1, -1, 0}, /* 7 */ { 2, s_0_7, -1, -1, 0} }; static const symbol s_1_0[2] = { 0xC3, 0xA1 }; static const symbol s_1_1[2] = { 0xC3, 0xA9 }; static const struct among a_1[2] = { /* 0 */ { 2, s_1_0, -1, 1, 0}, /* 1 */ { 2, s_1_1, -1, 2, 0} }; static const symbol s_2_0[2] = { 'b', 'b' }; static const symbol s_2_1[2] = { 'c', 'c' }; static const symbol s_2_2[2] = { 'd', 'd' }; static const symbol s_2_3[2] = { 'f', 'f' }; static const symbol s_2_4[2] = { 'g', 'g' }; static const symbol s_2_5[2] = { 'j', 'j' }; static const symbol s_2_6[2] = { 'k', 'k' }; static const symbol s_2_7[2] = { 'l', 'l' }; static const symbol s_2_8[2] = { 'm', 'm' }; static const symbol s_2_9[2] = { 'n', 'n' }; static const symbol s_2_10[2] = { 'p', 'p' }; static const symbol s_2_11[2] = { 'r', 'r' }; static const symbol s_2_12[3] = { 'c', 'c', 's' }; static const symbol s_2_13[2] = { 's', 's' }; static const symbol s_2_14[3] = { 'z', 'z', 's' }; static const symbol s_2_15[2] = { 't', 't' }; static const symbol s_2_16[2] = { 'v', 'v' }; static const symbol s_2_17[3] = { 'g', 'g', 'y' }; static const symbol s_2_18[3] = { 'l', 'l', 'y' }; static const symbol s_2_19[3] = { 'n', 'n', 'y' }; static const symbol s_2_20[3] = { 't', 't', 'y' }; static const symbol s_2_21[3] = { 's', 's', 'z' }; static const symbol s_2_22[2] = { 'z', 'z' }; static const struct among a_2[23] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 2, s_2_2, -1, -1, 0}, /* 3 */ { 2, s_2_3, -1, -1, 0}, /* 4 */ { 2, s_2_4, -1, -1, 0}, /* 5 */ { 2, s_2_5, -1, -1, 0}, /* 6 */ { 2, s_2_6, -1, -1, 0}, /* 7 */ { 2, s_2_7, -1, -1, 0}, /* 8 */ { 2, s_2_8, -1, -1, 0}, /* 9 */ { 2, s_2_9, -1, -1, 0}, /* 10 */ { 2, s_2_10, -1, -1, 0}, /* 11 */ { 2, s_2_11, -1, -1, 0}, /* 12 */ { 3, s_2_12, -1, -1, 0}, /* 13 */ { 2, s_2_13, -1, -1, 0}, /* 14 */ { 3, s_2_14, -1, -1, 0}, /* 15 */ { 2, s_2_15, -1, -1, 0}, /* 16 */ { 2, s_2_16, -1, -1, 0}, /* 17 */ { 3, s_2_17, -1, -1, 0}, /* 18 */ { 3, s_2_18, -1, -1, 0}, /* 19 */ { 3, s_2_19, -1, -1, 0}, /* 20 */ { 3, s_2_20, -1, -1, 0}, /* 21 */ { 3, s_2_21, -1, -1, 0}, /* 22 */ { 2, s_2_22, -1, -1, 0} }; static const symbol s_3_0[2] = { 'a', 'l' }; static const symbol s_3_1[2] = { 'e', 'l' }; static const struct among a_3[2] = { /* 0 */ { 2, s_3_0, -1, 1, 0}, /* 1 */ { 2, s_3_1, -1, 2, 0} }; static const symbol s_4_0[2] = { 'b', 'a' }; static const symbol s_4_1[2] = { 'r', 'a' }; static const symbol s_4_2[2] = { 'b', 'e' }; static const symbol s_4_3[2] = { 'r', 'e' }; static const symbol s_4_4[2] = { 'i', 'g' }; static const symbol s_4_5[3] = { 'n', 'a', 'k' }; static const symbol s_4_6[3] = { 'n', 'e', 'k' }; static const symbol s_4_7[3] = { 'v', 'a', 'l' }; static const symbol s_4_8[3] = { 'v', 'e', 'l' }; static const symbol s_4_9[2] = { 'u', 'l' }; static const symbol s_4_10[4] = { 'b', 0xC5, 0x91, 'l' }; static const symbol s_4_11[4] = { 'r', 0xC5, 0x91, 'l' }; static const symbol s_4_12[4] = { 't', 0xC5, 0x91, 'l' }; static const symbol s_4_13[4] = { 'n', 0xC3, 0xA1, 'l' }; static const symbol s_4_14[4] = { 'n', 0xC3, 0xA9, 'l' }; static const symbol s_4_15[4] = { 'b', 0xC3, 0xB3, 'l' }; static const symbol s_4_16[4] = { 'r', 0xC3, 0xB3, 'l' }; static const symbol s_4_17[4] = { 't', 0xC3, 0xB3, 'l' }; static const symbol s_4_18[3] = { 0xC3, 0xBC, 'l' }; static const symbol s_4_19[1] = { 'n' }; static const symbol s_4_20[2] = { 'a', 'n' }; static const symbol s_4_21[3] = { 'b', 'a', 'n' }; static const symbol s_4_22[2] = { 'e', 'n' }; static const symbol s_4_23[3] = { 'b', 'e', 'n' }; static const symbol s_4_24[7] = { 'k', 0xC3, 0xA9, 'p', 'p', 'e', 'n' }; static const symbol s_4_25[2] = { 'o', 'n' }; static const symbol s_4_26[3] = { 0xC3, 0xB6, 'n' }; static const symbol s_4_27[5] = { 'k', 0xC3, 0xA9, 'p', 'p' }; static const symbol s_4_28[3] = { 'k', 'o', 'r' }; static const symbol s_4_29[1] = { 't' }; static const symbol s_4_30[2] = { 'a', 't' }; static const symbol s_4_31[2] = { 'e', 't' }; static const symbol s_4_32[5] = { 'k', 0xC3, 0xA9, 'n', 't' }; static const symbol s_4_33[7] = { 'a', 'n', 'k', 0xC3, 0xA9, 'n', 't' }; static const symbol s_4_34[7] = { 'e', 'n', 'k', 0xC3, 0xA9, 'n', 't' }; static const symbol s_4_35[7] = { 'o', 'n', 'k', 0xC3, 0xA9, 'n', 't' }; static const symbol s_4_36[2] = { 'o', 't' }; static const symbol s_4_37[4] = { 0xC3, 0xA9, 'r', 't' }; static const symbol s_4_38[3] = { 0xC3, 0xB6, 't' }; static const symbol s_4_39[3] = { 'h', 'e', 'z' }; static const symbol s_4_40[3] = { 'h', 'o', 'z' }; static const symbol s_4_41[4] = { 'h', 0xC3, 0xB6, 'z' }; static const symbol s_4_42[3] = { 'v', 0xC3, 0xA1 }; static const symbol s_4_43[3] = { 'v', 0xC3, 0xA9 }; static const struct among a_4[44] = { /* 0 */ { 2, s_4_0, -1, -1, 0}, /* 1 */ { 2, s_4_1, -1, -1, 0}, /* 2 */ { 2, s_4_2, -1, -1, 0}, /* 3 */ { 2, s_4_3, -1, -1, 0}, /* 4 */ { 2, s_4_4, -1, -1, 0}, /* 5 */ { 3, s_4_5, -1, -1, 0}, /* 6 */ { 3, s_4_6, -1, -1, 0}, /* 7 */ { 3, s_4_7, -1, -1, 0}, /* 8 */ { 3, s_4_8, -1, -1, 0}, /* 9 */ { 2, s_4_9, -1, -1, 0}, /* 10 */ { 4, s_4_10, -1, -1, 0}, /* 11 */ { 4, s_4_11, -1, -1, 0}, /* 12 */ { 4, s_4_12, -1, -1, 0}, /* 13 */ { 4, s_4_13, -1, -1, 0}, /* 14 */ { 4, s_4_14, -1, -1, 0}, /* 15 */ { 4, s_4_15, -1, -1, 0}, /* 16 */ { 4, s_4_16, -1, -1, 0}, /* 17 */ { 4, s_4_17, -1, -1, 0}, /* 18 */ { 3, s_4_18, -1, -1, 0}, /* 19 */ { 1, s_4_19, -1, -1, 0}, /* 20 */ { 2, s_4_20, 19, -1, 0}, /* 21 */ { 3, s_4_21, 20, -1, 0}, /* 22 */ { 2, s_4_22, 19, -1, 0}, /* 23 */ { 3, s_4_23, 22, -1, 0}, /* 24 */ { 7, s_4_24, 22, -1, 0}, /* 25 */ { 2, s_4_25, 19, -1, 0}, /* 26 */ { 3, s_4_26, 19, -1, 0}, /* 27 */ { 5, s_4_27, -1, -1, 0}, /* 28 */ { 3, s_4_28, -1, -1, 0}, /* 29 */ { 1, s_4_29, -1, -1, 0}, /* 30 */ { 2, s_4_30, 29, -1, 0}, /* 31 */ { 2, s_4_31, 29, -1, 0}, /* 32 */ { 5, s_4_32, 29, -1, 0}, /* 33 */ { 7, s_4_33, 32, -1, 0}, /* 34 */ { 7, s_4_34, 32, -1, 0}, /* 35 */ { 7, s_4_35, 32, -1, 0}, /* 36 */ { 2, s_4_36, 29, -1, 0}, /* 37 */ { 4, s_4_37, 29, -1, 0}, /* 38 */ { 3, s_4_38, 29, -1, 0}, /* 39 */ { 3, s_4_39, -1, -1, 0}, /* 40 */ { 3, s_4_40, -1, -1, 0}, /* 41 */ { 4, s_4_41, -1, -1, 0}, /* 42 */ { 3, s_4_42, -1, -1, 0}, /* 43 */ { 3, s_4_43, -1, -1, 0} }; static const symbol s_5_0[3] = { 0xC3, 0xA1, 'n' }; static const symbol s_5_1[3] = { 0xC3, 0xA9, 'n' }; static const symbol s_5_2[8] = { 0xC3, 0xA1, 'n', 'k', 0xC3, 0xA9, 'n', 't' }; static const struct among a_5[3] = { /* 0 */ { 3, s_5_0, -1, 2, 0}, /* 1 */ { 3, s_5_1, -1, 1, 0}, /* 2 */ { 8, s_5_2, -1, 3, 0} }; static const symbol s_6_0[4] = { 's', 't', 'u', 'l' }; static const symbol s_6_1[5] = { 'a', 's', 't', 'u', 'l' }; static const symbol s_6_2[6] = { 0xC3, 0xA1, 's', 't', 'u', 'l' }; static const symbol s_6_3[5] = { 's', 't', 0xC3, 0xBC, 'l' }; static const symbol s_6_4[6] = { 'e', 's', 't', 0xC3, 0xBC, 'l' }; static const symbol s_6_5[7] = { 0xC3, 0xA9, 's', 't', 0xC3, 0xBC, 'l' }; static const struct among a_6[6] = { /* 0 */ { 4, s_6_0, -1, 2, 0}, /* 1 */ { 5, s_6_1, 0, 1, 0}, /* 2 */ { 6, s_6_2, 0, 3, 0}, /* 3 */ { 5, s_6_3, -1, 2, 0}, /* 4 */ { 6, s_6_4, 3, 1, 0}, /* 5 */ { 7, s_6_5, 3, 4, 0} }; static const symbol s_7_0[2] = { 0xC3, 0xA1 }; static const symbol s_7_1[2] = { 0xC3, 0xA9 }; static const struct among a_7[2] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 2, s_7_1, -1, 2, 0} }; static const symbol s_8_0[1] = { 'k' }; static const symbol s_8_1[2] = { 'a', 'k' }; static const symbol s_8_2[2] = { 'e', 'k' }; static const symbol s_8_3[2] = { 'o', 'k' }; static const symbol s_8_4[3] = { 0xC3, 0xA1, 'k' }; static const symbol s_8_5[3] = { 0xC3, 0xA9, 'k' }; static const symbol s_8_6[3] = { 0xC3, 0xB6, 'k' }; static const struct among a_8[7] = { /* 0 */ { 1, s_8_0, -1, 7, 0}, /* 1 */ { 2, s_8_1, 0, 4, 0}, /* 2 */ { 2, s_8_2, 0, 6, 0}, /* 3 */ { 2, s_8_3, 0, 5, 0}, /* 4 */ { 3, s_8_4, 0, 1, 0}, /* 5 */ { 3, s_8_5, 0, 2, 0}, /* 6 */ { 3, s_8_6, 0, 3, 0} }; static const symbol s_9_0[3] = { 0xC3, 0xA9, 'i' }; static const symbol s_9_1[5] = { 0xC3, 0xA1, 0xC3, 0xA9, 'i' }; static const symbol s_9_2[5] = { 0xC3, 0xA9, 0xC3, 0xA9, 'i' }; static const symbol s_9_3[2] = { 0xC3, 0xA9 }; static const symbol s_9_4[3] = { 'k', 0xC3, 0xA9 }; static const symbol s_9_5[4] = { 'a', 'k', 0xC3, 0xA9 }; static const symbol s_9_6[4] = { 'e', 'k', 0xC3, 0xA9 }; static const symbol s_9_7[4] = { 'o', 'k', 0xC3, 0xA9 }; static const symbol s_9_8[5] = { 0xC3, 0xA1, 'k', 0xC3, 0xA9 }; static const symbol s_9_9[5] = { 0xC3, 0xA9, 'k', 0xC3, 0xA9 }; static const symbol s_9_10[5] = { 0xC3, 0xB6, 'k', 0xC3, 0xA9 }; static const symbol s_9_11[4] = { 0xC3, 0xA9, 0xC3, 0xA9 }; static const struct among a_9[12] = { /* 0 */ { 3, s_9_0, -1, 7, 0}, /* 1 */ { 5, s_9_1, 0, 6, 0}, /* 2 */ { 5, s_9_2, 0, 5, 0}, /* 3 */ { 2, s_9_3, -1, 9, 0}, /* 4 */ { 3, s_9_4, 3, 4, 0}, /* 5 */ { 4, s_9_5, 4, 1, 0}, /* 6 */ { 4, s_9_6, 4, 1, 0}, /* 7 */ { 4, s_9_7, 4, 1, 0}, /* 8 */ { 5, s_9_8, 4, 3, 0}, /* 9 */ { 5, s_9_9, 4, 2, 0}, /* 10 */ { 5, s_9_10, 4, 1, 0}, /* 11 */ { 4, s_9_11, 3, 8, 0} }; static const symbol s_10_0[1] = { 'a' }; static const symbol s_10_1[2] = { 'j', 'a' }; static const symbol s_10_2[1] = { 'd' }; static const symbol s_10_3[2] = { 'a', 'd' }; static const symbol s_10_4[2] = { 'e', 'd' }; static const symbol s_10_5[2] = { 'o', 'd' }; static const symbol s_10_6[3] = { 0xC3, 0xA1, 'd' }; static const symbol s_10_7[3] = { 0xC3, 0xA9, 'd' }; static const symbol s_10_8[3] = { 0xC3, 0xB6, 'd' }; static const symbol s_10_9[1] = { 'e' }; static const symbol s_10_10[2] = { 'j', 'e' }; static const symbol s_10_11[2] = { 'n', 'k' }; static const symbol s_10_12[3] = { 'u', 'n', 'k' }; static const symbol s_10_13[4] = { 0xC3, 0xA1, 'n', 'k' }; static const symbol s_10_14[4] = { 0xC3, 0xA9, 'n', 'k' }; static const symbol s_10_15[4] = { 0xC3, 0xBC, 'n', 'k' }; static const symbol s_10_16[2] = { 'u', 'k' }; static const symbol s_10_17[3] = { 'j', 'u', 'k' }; static const symbol s_10_18[5] = { 0xC3, 0xA1, 'j', 'u', 'k' }; static const symbol s_10_19[3] = { 0xC3, 0xBC, 'k' }; static const symbol s_10_20[4] = { 'j', 0xC3, 0xBC, 'k' }; static const symbol s_10_21[6] = { 0xC3, 0xA9, 'j', 0xC3, 0xBC, 'k' }; static const symbol s_10_22[1] = { 'm' }; static const symbol s_10_23[2] = { 'a', 'm' }; static const symbol s_10_24[2] = { 'e', 'm' }; static const symbol s_10_25[2] = { 'o', 'm' }; static const symbol s_10_26[3] = { 0xC3, 0xA1, 'm' }; static const symbol s_10_27[3] = { 0xC3, 0xA9, 'm' }; static const symbol s_10_28[1] = { 'o' }; static const symbol s_10_29[2] = { 0xC3, 0xA1 }; static const symbol s_10_30[2] = { 0xC3, 0xA9 }; static const struct among a_10[31] = { /* 0 */ { 1, s_10_0, -1, 18, 0}, /* 1 */ { 2, s_10_1, 0, 17, 0}, /* 2 */ { 1, s_10_2, -1, 16, 0}, /* 3 */ { 2, s_10_3, 2, 13, 0}, /* 4 */ { 2, s_10_4, 2, 13, 0}, /* 5 */ { 2, s_10_5, 2, 13, 0}, /* 6 */ { 3, s_10_6, 2, 14, 0}, /* 7 */ { 3, s_10_7, 2, 15, 0}, /* 8 */ { 3, s_10_8, 2, 13, 0}, /* 9 */ { 1, s_10_9, -1, 18, 0}, /* 10 */ { 2, s_10_10, 9, 17, 0}, /* 11 */ { 2, s_10_11, -1, 4, 0}, /* 12 */ { 3, s_10_12, 11, 1, 0}, /* 13 */ { 4, s_10_13, 11, 2, 0}, /* 14 */ { 4, s_10_14, 11, 3, 0}, /* 15 */ { 4, s_10_15, 11, 1, 0}, /* 16 */ { 2, s_10_16, -1, 8, 0}, /* 17 */ { 3, s_10_17, 16, 7, 0}, /* 18 */ { 5, s_10_18, 17, 5, 0}, /* 19 */ { 3, s_10_19, -1, 8, 0}, /* 20 */ { 4, s_10_20, 19, 7, 0}, /* 21 */ { 6, s_10_21, 20, 6, 0}, /* 22 */ { 1, s_10_22, -1, 12, 0}, /* 23 */ { 2, s_10_23, 22, 9, 0}, /* 24 */ { 2, s_10_24, 22, 9, 0}, /* 25 */ { 2, s_10_25, 22, 9, 0}, /* 26 */ { 3, s_10_26, 22, 10, 0}, /* 27 */ { 3, s_10_27, 22, 11, 0}, /* 28 */ { 1, s_10_28, -1, 18, 0}, /* 29 */ { 2, s_10_29, -1, 19, 0}, /* 30 */ { 2, s_10_30, -1, 20, 0} }; static const symbol s_11_0[2] = { 'i', 'd' }; static const symbol s_11_1[3] = { 'a', 'i', 'd' }; static const symbol s_11_2[4] = { 'j', 'a', 'i', 'd' }; static const symbol s_11_3[3] = { 'e', 'i', 'd' }; static const symbol s_11_4[4] = { 'j', 'e', 'i', 'd' }; static const symbol s_11_5[4] = { 0xC3, 0xA1, 'i', 'd' }; static const symbol s_11_6[4] = { 0xC3, 0xA9, 'i', 'd' }; static const symbol s_11_7[1] = { 'i' }; static const symbol s_11_8[2] = { 'a', 'i' }; static const symbol s_11_9[3] = { 'j', 'a', 'i' }; static const symbol s_11_10[2] = { 'e', 'i' }; static const symbol s_11_11[3] = { 'j', 'e', 'i' }; static const symbol s_11_12[3] = { 0xC3, 0xA1, 'i' }; static const symbol s_11_13[3] = { 0xC3, 0xA9, 'i' }; static const symbol s_11_14[4] = { 'i', 't', 'e', 'k' }; static const symbol s_11_15[5] = { 'e', 'i', 't', 'e', 'k' }; static const symbol s_11_16[6] = { 'j', 'e', 'i', 't', 'e', 'k' }; static const symbol s_11_17[6] = { 0xC3, 0xA9, 'i', 't', 'e', 'k' }; static const symbol s_11_18[2] = { 'i', 'k' }; static const symbol s_11_19[3] = { 'a', 'i', 'k' }; static const symbol s_11_20[4] = { 'j', 'a', 'i', 'k' }; static const symbol s_11_21[3] = { 'e', 'i', 'k' }; static const symbol s_11_22[4] = { 'j', 'e', 'i', 'k' }; static const symbol s_11_23[4] = { 0xC3, 0xA1, 'i', 'k' }; static const symbol s_11_24[4] = { 0xC3, 0xA9, 'i', 'k' }; static const symbol s_11_25[3] = { 'i', 'n', 'k' }; static const symbol s_11_26[4] = { 'a', 'i', 'n', 'k' }; static const symbol s_11_27[5] = { 'j', 'a', 'i', 'n', 'k' }; static const symbol s_11_28[4] = { 'e', 'i', 'n', 'k' }; static const symbol s_11_29[5] = { 'j', 'e', 'i', 'n', 'k' }; static const symbol s_11_30[5] = { 0xC3, 0xA1, 'i', 'n', 'k' }; static const symbol s_11_31[5] = { 0xC3, 0xA9, 'i', 'n', 'k' }; static const symbol s_11_32[5] = { 'a', 'i', 't', 'o', 'k' }; static const symbol s_11_33[6] = { 'j', 'a', 'i', 't', 'o', 'k' }; static const symbol s_11_34[6] = { 0xC3, 0xA1, 'i', 't', 'o', 'k' }; static const symbol s_11_35[2] = { 'i', 'm' }; static const symbol s_11_36[3] = { 'a', 'i', 'm' }; static const symbol s_11_37[4] = { 'j', 'a', 'i', 'm' }; static const symbol s_11_38[3] = { 'e', 'i', 'm' }; static const symbol s_11_39[4] = { 'j', 'e', 'i', 'm' }; static const symbol s_11_40[4] = { 0xC3, 0xA1, 'i', 'm' }; static const symbol s_11_41[4] = { 0xC3, 0xA9, 'i', 'm' }; static const struct among a_11[42] = { /* 0 */ { 2, s_11_0, -1, 10, 0}, /* 1 */ { 3, s_11_1, 0, 9, 0}, /* 2 */ { 4, s_11_2, 1, 6, 0}, /* 3 */ { 3, s_11_3, 0, 9, 0}, /* 4 */ { 4, s_11_4, 3, 6, 0}, /* 5 */ { 4, s_11_5, 0, 7, 0}, /* 6 */ { 4, s_11_6, 0, 8, 0}, /* 7 */ { 1, s_11_7, -1, 15, 0}, /* 8 */ { 2, s_11_8, 7, 14, 0}, /* 9 */ { 3, s_11_9, 8, 11, 0}, /* 10 */ { 2, s_11_10, 7, 14, 0}, /* 11 */ { 3, s_11_11, 10, 11, 0}, /* 12 */ { 3, s_11_12, 7, 12, 0}, /* 13 */ { 3, s_11_13, 7, 13, 0}, /* 14 */ { 4, s_11_14, -1, 24, 0}, /* 15 */ { 5, s_11_15, 14, 21, 0}, /* 16 */ { 6, s_11_16, 15, 20, 0}, /* 17 */ { 6, s_11_17, 14, 23, 0}, /* 18 */ { 2, s_11_18, -1, 29, 0}, /* 19 */ { 3, s_11_19, 18, 26, 0}, /* 20 */ { 4, s_11_20, 19, 25, 0}, /* 21 */ { 3, s_11_21, 18, 26, 0}, /* 22 */ { 4, s_11_22, 21, 25, 0}, /* 23 */ { 4, s_11_23, 18, 27, 0}, /* 24 */ { 4, s_11_24, 18, 28, 0}, /* 25 */ { 3, s_11_25, -1, 20, 0}, /* 26 */ { 4, s_11_26, 25, 17, 0}, /* 27 */ { 5, s_11_27, 26, 16, 0}, /* 28 */ { 4, s_11_28, 25, 17, 0}, /* 29 */ { 5, s_11_29, 28, 16, 0}, /* 30 */ { 5, s_11_30, 25, 18, 0}, /* 31 */ { 5, s_11_31, 25, 19, 0}, /* 32 */ { 5, s_11_32, -1, 21, 0}, /* 33 */ { 6, s_11_33, 32, 20, 0}, /* 34 */ { 6, s_11_34, -1, 22, 0}, /* 35 */ { 2, s_11_35, -1, 5, 0}, /* 36 */ { 3, s_11_36, 35, 4, 0}, /* 37 */ { 4, s_11_37, 36, 1, 0}, /* 38 */ { 3, s_11_38, 35, 4, 0}, /* 39 */ { 4, s_11_39, 38, 1, 0}, /* 40 */ { 4, s_11_40, 35, 2, 0}, /* 41 */ { 4, s_11_41, 35, 3, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 36, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1 }; static const symbol s_0[] = { 'a' }; static const symbol s_1[] = { 'e' }; static const symbol s_2[] = { 'e' }; static const symbol s_3[] = { 'a' }; static const symbol s_4[] = { 'a' }; static const symbol s_5[] = { 'a' }; static const symbol s_6[] = { 'e' }; static const symbol s_7[] = { 'a' }; static const symbol s_8[] = { 'e' }; static const symbol s_9[] = { 'e' }; static const symbol s_10[] = { 'a' }; static const symbol s_11[] = { 'e' }; static const symbol s_12[] = { 'a' }; static const symbol s_13[] = { 'e' }; static const symbol s_14[] = { 'a' }; static const symbol s_15[] = { 'e' }; static const symbol s_16[] = { 'a' }; static const symbol s_17[] = { 'e' }; static const symbol s_18[] = { 'a' }; static const symbol s_19[] = { 'e' }; static const symbol s_20[] = { 'a' }; static const symbol s_21[] = { 'e' }; static const symbol s_22[] = { 'a' }; static const symbol s_23[] = { 'e' }; static const symbol s_24[] = { 'a' }; static const symbol s_25[] = { 'e' }; static const symbol s_26[] = { 'a' }; static const symbol s_27[] = { 'e' }; static const symbol s_28[] = { 'a' }; static const symbol s_29[] = { 'e' }; static const symbol s_30[] = { 'a' }; static const symbol s_31[] = { 'e' }; static const symbol s_32[] = { 'a' }; static const symbol s_33[] = { 'e' }; static const symbol s_34[] = { 'a' }; static const symbol s_35[] = { 'e' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 46 */ { int c1 = z->c; /* or, line 51 */ if (in_grouping_U(z, g_v, 97, 369, 0)) goto lab1; /* grouping v, line 48 */ if (in_grouping_U(z, g_v, 97, 369, 1) < 0) goto lab1; /* goto */ /* non v, line 48 */ { int c2 = z->c; /* or, line 49 */ if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 3 || !((101187584 >> (z->p[z->c + 1] & 0x1f)) & 1)) goto lab3; /* among, line 49 */ if (!(find_among(z, a_0, 8))) goto lab3; goto lab2; lab3: z->c = c2; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab1; z->c = ret; /* next, line 49 */ } } lab2: z->I[0] = z->c; /* setmark p1, line 50 */ goto lab0; lab1: z->c = c1; if (out_grouping_U(z, g_v, 97, 369, 0)) return 0; /* non v, line 53 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping_U(z, g_v, 97, 369, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 53 */ } lab0: return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 58 */ return 1; } static int r_v_ending(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 61 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 161 && z->p[z->c - 1] != 169)) return 0; /* substring, line 61 */ among_var = find_among_b(z, a_1, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 61 */ { int ret = r_R1(z); /* call R1, line 61 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 61 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 62 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 63 */ if (ret < 0) return ret; } break; } return 1; } static int r_double(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 68 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((106790108 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 68 */ if (!(find_among_b(z, a_2, 23))) return 0; z->c = z->l - m_test1; } return 1; } static int r_undouble(struct SN_env * z) { /* backwardmode */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 73 */ } z->ket = z->c; /* [, line 73 */ { int ret = skip_utf8(z->p, z->c, z->lb, z->l, - 1); /* hop, line 73 */ if (ret < 0) return 0; z->c = ret; } z->bra = z->c; /* ], line 73 */ { int ret = slice_del(z); /* delete, line 73 */ if (ret < 0) return ret; } return 1; } static int r_instrum(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 77 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 108) return 0; /* substring, line 77 */ among_var = find_among_b(z, a_3, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 77 */ { int ret = r_R1(z); /* call R1, line 77 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 77 */ case 0: return 0; case 1: { int ret = r_double(z); /* call double, line 78 */ if (ret <= 0) return ret; } break; case 2: { int ret = r_double(z); /* call double, line 79 */ if (ret <= 0) return ret; } break; } { int ret = slice_del(z); /* delete, line 81 */ if (ret < 0) return ret; } { int ret = r_undouble(z); /* call undouble, line 82 */ if (ret <= 0) return ret; } return 1; } static int r_case(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 87 */ if (!(find_among_b(z, a_4, 44))) return 0; /* substring, line 87 */ z->bra = z->c; /* ], line 87 */ { int ret = r_R1(z); /* call R1, line 87 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 111 */ if (ret < 0) return ret; } { int ret = r_v_ending(z); /* call v_ending, line 112 */ if (ret <= 0) return ret; } return 1; } static int r_case_special(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 116 */ if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 110 && z->p[z->c - 1] != 116)) return 0; /* substring, line 116 */ among_var = find_among_b(z, a_5, 3); if (!(among_var)) return 0; z->bra = z->c; /* ], line 116 */ { int ret = r_R1(z); /* call R1, line 116 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 116 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_2); /* <-, line 117 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_3); /* <-, line 118 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_4); /* <-, line 119 */ if (ret < 0) return ret; } break; } return 1; } static int r_case_other(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 124 */ if (z->c - 3 <= z->lb || z->p[z->c - 1] != 108) return 0; /* substring, line 124 */ among_var = find_among_b(z, a_6, 6); if (!(among_var)) return 0; z->bra = z->c; /* ], line 124 */ { int ret = r_R1(z); /* call R1, line 124 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 124 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 125 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 126 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_5); /* <-, line 127 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_6); /* <-, line 128 */ if (ret < 0) return ret; } break; } return 1; } static int r_factive(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 133 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 161 && z->p[z->c - 1] != 169)) return 0; /* substring, line 133 */ among_var = find_among_b(z, a_7, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 133 */ { int ret = r_R1(z); /* call R1, line 133 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 133 */ case 0: return 0; case 1: { int ret = r_double(z); /* call double, line 134 */ if (ret <= 0) return ret; } break; case 2: { int ret = r_double(z); /* call double, line 135 */ if (ret <= 0) return ret; } break; } { int ret = slice_del(z); /* delete, line 137 */ if (ret < 0) return ret; } { int ret = r_undouble(z); /* call undouble, line 138 */ if (ret <= 0) return ret; } return 1; } static int r_plural(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 142 */ if (z->c <= z->lb || z->p[z->c - 1] != 107) return 0; /* substring, line 142 */ among_var = find_among_b(z, a_8, 7); if (!(among_var)) return 0; z->bra = z->c; /* ], line 142 */ { int ret = r_R1(z); /* call R1, line 142 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 142 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_7); /* <-, line 143 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_8); /* <-, line 144 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 145 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 146 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 147 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_del(z); /* delete, line 148 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_del(z); /* delete, line 149 */ if (ret < 0) return ret; } break; } return 1; } static int r_owned(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 154 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 169)) return 0; /* substring, line 154 */ among_var = find_among_b(z, a_9, 12); if (!(among_var)) return 0; z->bra = z->c; /* ], line 154 */ { int ret = r_R1(z); /* call R1, line 154 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 154 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 155 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_9); /* <-, line 156 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_10); /* <-, line 157 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_11); /* <-, line 159 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_12); /* <-, line 160 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_del(z); /* delete, line 161 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 1, s_13); /* <-, line 162 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_del(z); /* delete, line 163 */ if (ret < 0) return ret; } break; } return 1; } static int r_sing_owner(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 168 */ among_var = find_among_b(z, a_10, 31); /* substring, line 168 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 168 */ { int ret = r_R1(z); /* call R1, line 168 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 168 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 169 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_14); /* <-, line 170 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_15); /* <-, line 171 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 172 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_16); /* <-, line 173 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_17); /* <-, line 174 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_del(z); /* delete, line 175 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_del(z); /* delete, line 176 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_del(z); /* delete, line 177 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 1, s_18); /* <-, line 178 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 1, s_19); /* <-, line 179 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_del(z); /* delete, line 180 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_del(z); /* delete, line 181 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 1, s_20); /* <-, line 182 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_from_s(z, 1, s_21); /* <-, line 183 */ if (ret < 0) return ret; } break; case 16: { int ret = slice_del(z); /* delete, line 184 */ if (ret < 0) return ret; } break; case 17: { int ret = slice_del(z); /* delete, line 185 */ if (ret < 0) return ret; } break; case 18: { int ret = slice_del(z); /* delete, line 186 */ if (ret < 0) return ret; } break; case 19: { int ret = slice_from_s(z, 1, s_22); /* <-, line 187 */ if (ret < 0) return ret; } break; case 20: { int ret = slice_from_s(z, 1, s_23); /* <-, line 188 */ if (ret < 0) return ret; } break; } return 1; } static int r_plur_owner(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 193 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((10768 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 193 */ among_var = find_among_b(z, a_11, 42); if (!(among_var)) return 0; z->bra = z->c; /* ], line 193 */ { int ret = r_R1(z); /* call R1, line 193 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 193 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 194 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_24); /* <-, line 195 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_25); /* <-, line 196 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_del(z); /* delete, line 197 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_del(z); /* delete, line 198 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_del(z); /* delete, line 199 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 1, s_26); /* <-, line 200 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 1, s_27); /* <-, line 201 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_del(z); /* delete, line 202 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_del(z); /* delete, line 203 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_del(z); /* delete, line 204 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 1, s_28); /* <-, line 205 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_from_s(z, 1, s_29); /* <-, line 206 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_del(z); /* delete, line 207 */ if (ret < 0) return ret; } break; case 15: { int ret = slice_del(z); /* delete, line 208 */ if (ret < 0) return ret; } break; case 16: { int ret = slice_del(z); /* delete, line 209 */ if (ret < 0) return ret; } break; case 17: { int ret = slice_del(z); /* delete, line 210 */ if (ret < 0) return ret; } break; case 18: { int ret = slice_from_s(z, 1, s_30); /* <-, line 211 */ if (ret < 0) return ret; } break; case 19: { int ret = slice_from_s(z, 1, s_31); /* <-, line 212 */ if (ret < 0) return ret; } break; case 20: { int ret = slice_del(z); /* delete, line 214 */ if (ret < 0) return ret; } break; case 21: { int ret = slice_del(z); /* delete, line 215 */ if (ret < 0) return ret; } break; case 22: { int ret = slice_from_s(z, 1, s_32); /* <-, line 216 */ if (ret < 0) return ret; } break; case 23: { int ret = slice_from_s(z, 1, s_33); /* <-, line 217 */ if (ret < 0) return ret; } break; case 24: { int ret = slice_del(z); /* delete, line 218 */ if (ret < 0) return ret; } break; case 25: { int ret = slice_del(z); /* delete, line 219 */ if (ret < 0) return ret; } break; case 26: { int ret = slice_del(z); /* delete, line 220 */ if (ret < 0) return ret; } break; case 27: { int ret = slice_from_s(z, 1, s_34); /* <-, line 221 */ if (ret < 0) return ret; } break; case 28: { int ret = slice_from_s(z, 1, s_35); /* <-, line 222 */ if (ret < 0) return ret; } break; case 29: { int ret = slice_del(z); /* delete, line 223 */ if (ret < 0) return ret; } break; } return 1; } extern int hungarian_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 229 */ { int ret = r_mark_regions(z); /* call mark_regions, line 229 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 230 */ { int m2 = z->l - z->c; (void)m2; /* do, line 231 */ { int ret = r_instrum(z); /* call instrum, line 231 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 232 */ { int ret = r_case(z); /* call case, line 232 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 233 */ { int ret = r_case_special(z); /* call case_special, line 233 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 234 */ { int ret = r_case_other(z); /* call case_other, line 234 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = z->l - m5; } { int m6 = z->l - z->c; (void)m6; /* do, line 235 */ { int ret = r_factive(z); /* call factive, line 235 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = z->l - m6; } { int m7 = z->l - z->c; (void)m7; /* do, line 236 */ { int ret = r_owned(z); /* call owned, line 236 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 237 */ { int ret = r_sing_owner(z); /* call sing_owner, line 237 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 238 */ { int ret = r_plur_owner(z); /* call plur_owner, line 238 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 239 */ { int ret = r_plural(z); /* call plural, line 239 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m10; } z->c = z->lb; return 1; } extern struct SN_env * hungarian_UTF_8_create_env(void) { return SN_create_env(0, 1, 0); } extern void hungarian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_hungarian.h000066400000000000000000000005341364126773500241400ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * hungarian_UTF_8_create_env(void); extern void hungarian_UTF_8_close_env(struct SN_env * z); extern int hungarian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_italian.c000066400000000000000000001201161364126773500235770ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int italian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_vowel_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_attached_pronoun(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * italian_UTF_8_create_env(void); extern void italian_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[2] = { 'q', 'u' }; static const symbol s_0_2[2] = { 0xC3, 0xA1 }; static const symbol s_0_3[2] = { 0xC3, 0xA9 }; static const symbol s_0_4[2] = { 0xC3, 0xAD }; static const symbol s_0_5[2] = { 0xC3, 0xB3 }; static const symbol s_0_6[2] = { 0xC3, 0xBA }; static const struct among a_0[7] = { /* 0 */ { 0, 0, -1, 7, 0}, /* 1 */ { 2, s_0_1, 0, 6, 0}, /* 2 */ { 2, s_0_2, 0, 1, 0}, /* 3 */ { 2, s_0_3, 0, 2, 0}, /* 4 */ { 2, s_0_4, 0, 3, 0}, /* 5 */ { 2, s_0_5, 0, 4, 0}, /* 6 */ { 2, s_0_6, 0, 5, 0} }; static const symbol s_1_1[1] = { 'I' }; static const symbol s_1_2[1] = { 'U' }; static const struct among a_1[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_1_1, 0, 1, 0}, /* 2 */ { 1, s_1_2, 0, 2, 0} }; static const symbol s_2_0[2] = { 'l', 'a' }; static const symbol s_2_1[4] = { 'c', 'e', 'l', 'a' }; static const symbol s_2_2[6] = { 'g', 'l', 'i', 'e', 'l', 'a' }; static const symbol s_2_3[4] = { 'm', 'e', 'l', 'a' }; static const symbol s_2_4[4] = { 't', 'e', 'l', 'a' }; static const symbol s_2_5[4] = { 'v', 'e', 'l', 'a' }; static const symbol s_2_6[2] = { 'l', 'e' }; static const symbol s_2_7[4] = { 'c', 'e', 'l', 'e' }; static const symbol s_2_8[6] = { 'g', 'l', 'i', 'e', 'l', 'e' }; static const symbol s_2_9[4] = { 'm', 'e', 'l', 'e' }; static const symbol s_2_10[4] = { 't', 'e', 'l', 'e' }; static const symbol s_2_11[4] = { 'v', 'e', 'l', 'e' }; static const symbol s_2_12[2] = { 'n', 'e' }; static const symbol s_2_13[4] = { 'c', 'e', 'n', 'e' }; static const symbol s_2_14[6] = { 'g', 'l', 'i', 'e', 'n', 'e' }; static const symbol s_2_15[4] = { 'm', 'e', 'n', 'e' }; static const symbol s_2_16[4] = { 's', 'e', 'n', 'e' }; static const symbol s_2_17[4] = { 't', 'e', 'n', 'e' }; static const symbol s_2_18[4] = { 'v', 'e', 'n', 'e' }; static const symbol s_2_19[2] = { 'c', 'i' }; static const symbol s_2_20[2] = { 'l', 'i' }; static const symbol s_2_21[4] = { 'c', 'e', 'l', 'i' }; static const symbol s_2_22[6] = { 'g', 'l', 'i', 'e', 'l', 'i' }; static const symbol s_2_23[4] = { 'm', 'e', 'l', 'i' }; static const symbol s_2_24[4] = { 't', 'e', 'l', 'i' }; static const symbol s_2_25[4] = { 'v', 'e', 'l', 'i' }; static const symbol s_2_26[3] = { 'g', 'l', 'i' }; static const symbol s_2_27[2] = { 'm', 'i' }; static const symbol s_2_28[2] = { 's', 'i' }; static const symbol s_2_29[2] = { 't', 'i' }; static const symbol s_2_30[2] = { 'v', 'i' }; static const symbol s_2_31[2] = { 'l', 'o' }; static const symbol s_2_32[4] = { 'c', 'e', 'l', 'o' }; static const symbol s_2_33[6] = { 'g', 'l', 'i', 'e', 'l', 'o' }; static const symbol s_2_34[4] = { 'm', 'e', 'l', 'o' }; static const symbol s_2_35[4] = { 't', 'e', 'l', 'o' }; static const symbol s_2_36[4] = { 'v', 'e', 'l', 'o' }; static const struct among a_2[37] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 4, s_2_1, 0, -1, 0}, /* 2 */ { 6, s_2_2, 0, -1, 0}, /* 3 */ { 4, s_2_3, 0, -1, 0}, /* 4 */ { 4, s_2_4, 0, -1, 0}, /* 5 */ { 4, s_2_5, 0, -1, 0}, /* 6 */ { 2, s_2_6, -1, -1, 0}, /* 7 */ { 4, s_2_7, 6, -1, 0}, /* 8 */ { 6, s_2_8, 6, -1, 0}, /* 9 */ { 4, s_2_9, 6, -1, 0}, /* 10 */ { 4, s_2_10, 6, -1, 0}, /* 11 */ { 4, s_2_11, 6, -1, 0}, /* 12 */ { 2, s_2_12, -1, -1, 0}, /* 13 */ { 4, s_2_13, 12, -1, 0}, /* 14 */ { 6, s_2_14, 12, -1, 0}, /* 15 */ { 4, s_2_15, 12, -1, 0}, /* 16 */ { 4, s_2_16, 12, -1, 0}, /* 17 */ { 4, s_2_17, 12, -1, 0}, /* 18 */ { 4, s_2_18, 12, -1, 0}, /* 19 */ { 2, s_2_19, -1, -1, 0}, /* 20 */ { 2, s_2_20, -1, -1, 0}, /* 21 */ { 4, s_2_21, 20, -1, 0}, /* 22 */ { 6, s_2_22, 20, -1, 0}, /* 23 */ { 4, s_2_23, 20, -1, 0}, /* 24 */ { 4, s_2_24, 20, -1, 0}, /* 25 */ { 4, s_2_25, 20, -1, 0}, /* 26 */ { 3, s_2_26, 20, -1, 0}, /* 27 */ { 2, s_2_27, -1, -1, 0}, /* 28 */ { 2, s_2_28, -1, -1, 0}, /* 29 */ { 2, s_2_29, -1, -1, 0}, /* 30 */ { 2, s_2_30, -1, -1, 0}, /* 31 */ { 2, s_2_31, -1, -1, 0}, /* 32 */ { 4, s_2_32, 31, -1, 0}, /* 33 */ { 6, s_2_33, 31, -1, 0}, /* 34 */ { 4, s_2_34, 31, -1, 0}, /* 35 */ { 4, s_2_35, 31, -1, 0}, /* 36 */ { 4, s_2_36, 31, -1, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_3_1[4] = { 'e', 'n', 'd', 'o' }; static const symbol s_3_2[2] = { 'a', 'r' }; static const symbol s_3_3[2] = { 'e', 'r' }; static const symbol s_3_4[2] = { 'i', 'r' }; static const struct among a_3[5] = { /* 0 */ { 4, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0}, /* 2 */ { 2, s_3_2, -1, 2, 0}, /* 3 */ { 2, s_3_3, -1, 2, 0}, /* 4 */ { 2, s_3_4, -1, 2, 0} }; static const symbol s_4_0[2] = { 'i', 'c' }; static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_4_2[2] = { 'o', 's' }; static const symbol s_4_3[2] = { 'i', 'v' }; static const struct among a_4[4] = { /* 0 */ { 2, s_4_0, -1, -1, 0}, /* 1 */ { 4, s_4_1, -1, -1, 0}, /* 2 */ { 2, s_4_2, -1, -1, 0}, /* 3 */ { 2, s_4_3, -1, 1, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_5_2[2] = { 'i', 'v' }; static const struct among a_5[3] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 2, s_5_2, -1, 1, 0} }; static const symbol s_6_0[3] = { 'i', 'c', 'a' }; static const symbol s_6_1[5] = { 'l', 'o', 'g', 'i', 'a' }; static const symbol s_6_2[3] = { 'o', 's', 'a' }; static const symbol s_6_3[4] = { 'i', 's', 't', 'a' }; static const symbol s_6_4[3] = { 'i', 'v', 'a' }; static const symbol s_6_5[4] = { 'a', 'n', 'z', 'a' }; static const symbol s_6_6[4] = { 'e', 'n', 'z', 'a' }; static const symbol s_6_7[3] = { 'i', 'c', 'e' }; static const symbol s_6_8[6] = { 'a', 't', 'r', 'i', 'c', 'e' }; static const symbol s_6_9[4] = { 'i', 'c', 'h', 'e' }; static const symbol s_6_10[5] = { 'l', 'o', 'g', 'i', 'e' }; static const symbol s_6_11[5] = { 'a', 'b', 'i', 'l', 'e' }; static const symbol s_6_12[5] = { 'i', 'b', 'i', 'l', 'e' }; static const symbol s_6_13[6] = { 'u', 's', 'i', 'o', 'n', 'e' }; static const symbol s_6_14[6] = { 'a', 'z', 'i', 'o', 'n', 'e' }; static const symbol s_6_15[6] = { 'u', 'z', 'i', 'o', 'n', 'e' }; static const symbol s_6_16[5] = { 'a', 't', 'o', 'r', 'e' }; static const symbol s_6_17[3] = { 'o', 's', 'e' }; static const symbol s_6_18[4] = { 'a', 'n', 't', 'e' }; static const symbol s_6_19[5] = { 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_20[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_21[4] = { 'i', 's', 't', 'e' }; static const symbol s_6_22[3] = { 'i', 'v', 'e' }; static const symbol s_6_23[4] = { 'a', 'n', 'z', 'e' }; static const symbol s_6_24[4] = { 'e', 'n', 'z', 'e' }; static const symbol s_6_25[3] = { 'i', 'c', 'i' }; static const symbol s_6_26[6] = { 'a', 't', 'r', 'i', 'c', 'i' }; static const symbol s_6_27[4] = { 'i', 'c', 'h', 'i' }; static const symbol s_6_28[5] = { 'a', 'b', 'i', 'l', 'i' }; static const symbol s_6_29[5] = { 'i', 'b', 'i', 'l', 'i' }; static const symbol s_6_30[4] = { 'i', 's', 'm', 'i' }; static const symbol s_6_31[6] = { 'u', 's', 'i', 'o', 'n', 'i' }; static const symbol s_6_32[6] = { 'a', 'z', 'i', 'o', 'n', 'i' }; static const symbol s_6_33[6] = { 'u', 'z', 'i', 'o', 'n', 'i' }; static const symbol s_6_34[5] = { 'a', 't', 'o', 'r', 'i' }; static const symbol s_6_35[3] = { 'o', 's', 'i' }; static const symbol s_6_36[4] = { 'a', 'n', 't', 'i' }; static const symbol s_6_37[6] = { 'a', 'm', 'e', 'n', 't', 'i' }; static const symbol s_6_38[6] = { 'i', 'm', 'e', 'n', 't', 'i' }; static const symbol s_6_39[4] = { 'i', 's', 't', 'i' }; static const symbol s_6_40[3] = { 'i', 'v', 'i' }; static const symbol s_6_41[3] = { 'i', 'c', 'o' }; static const symbol s_6_42[4] = { 'i', 's', 'm', 'o' }; static const symbol s_6_43[3] = { 'o', 's', 'o' }; static const symbol s_6_44[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; static const symbol s_6_45[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; static const symbol s_6_46[3] = { 'i', 'v', 'o' }; static const symbol s_6_47[4] = { 'i', 't', 0xC3, 0xA0 }; static const symbol s_6_48[5] = { 'i', 's', 't', 0xC3, 0xA0 }; static const symbol s_6_49[5] = { 'i', 's', 't', 0xC3, 0xA8 }; static const symbol s_6_50[5] = { 'i', 's', 't', 0xC3, 0xAC }; static const struct among a_6[51] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 5, s_6_1, -1, 3, 0}, /* 2 */ { 3, s_6_2, -1, 1, 0}, /* 3 */ { 4, s_6_3, -1, 1, 0}, /* 4 */ { 3, s_6_4, -1, 9, 0}, /* 5 */ { 4, s_6_5, -1, 1, 0}, /* 6 */ { 4, s_6_6, -1, 5, 0}, /* 7 */ { 3, s_6_7, -1, 1, 0}, /* 8 */ { 6, s_6_8, 7, 1, 0}, /* 9 */ { 4, s_6_9, -1, 1, 0}, /* 10 */ { 5, s_6_10, -1, 3, 0}, /* 11 */ { 5, s_6_11, -1, 1, 0}, /* 12 */ { 5, s_6_12, -1, 1, 0}, /* 13 */ { 6, s_6_13, -1, 4, 0}, /* 14 */ { 6, s_6_14, -1, 2, 0}, /* 15 */ { 6, s_6_15, -1, 4, 0}, /* 16 */ { 5, s_6_16, -1, 2, 0}, /* 17 */ { 3, s_6_17, -1, 1, 0}, /* 18 */ { 4, s_6_18, -1, 1, 0}, /* 19 */ { 5, s_6_19, -1, 1, 0}, /* 20 */ { 6, s_6_20, 19, 7, 0}, /* 21 */ { 4, s_6_21, -1, 1, 0}, /* 22 */ { 3, s_6_22, -1, 9, 0}, /* 23 */ { 4, s_6_23, -1, 1, 0}, /* 24 */ { 4, s_6_24, -1, 5, 0}, /* 25 */ { 3, s_6_25, -1, 1, 0}, /* 26 */ { 6, s_6_26, 25, 1, 0}, /* 27 */ { 4, s_6_27, -1, 1, 0}, /* 28 */ { 5, s_6_28, -1, 1, 0}, /* 29 */ { 5, s_6_29, -1, 1, 0}, /* 30 */ { 4, s_6_30, -1, 1, 0}, /* 31 */ { 6, s_6_31, -1, 4, 0}, /* 32 */ { 6, s_6_32, -1, 2, 0}, /* 33 */ { 6, s_6_33, -1, 4, 0}, /* 34 */ { 5, s_6_34, -1, 2, 0}, /* 35 */ { 3, s_6_35, -1, 1, 0}, /* 36 */ { 4, s_6_36, -1, 1, 0}, /* 37 */ { 6, s_6_37, -1, 6, 0}, /* 38 */ { 6, s_6_38, -1, 6, 0}, /* 39 */ { 4, s_6_39, -1, 1, 0}, /* 40 */ { 3, s_6_40, -1, 9, 0}, /* 41 */ { 3, s_6_41, -1, 1, 0}, /* 42 */ { 4, s_6_42, -1, 1, 0}, /* 43 */ { 3, s_6_43, -1, 1, 0}, /* 44 */ { 6, s_6_44, -1, 6, 0}, /* 45 */ { 6, s_6_45, -1, 6, 0}, /* 46 */ { 3, s_6_46, -1, 9, 0}, /* 47 */ { 4, s_6_47, -1, 8, 0}, /* 48 */ { 5, s_6_48, -1, 1, 0}, /* 49 */ { 5, s_6_49, -1, 1, 0}, /* 50 */ { 5, s_6_50, -1, 1, 0} }; static const symbol s_7_0[4] = { 'i', 's', 'c', 'a' }; static const symbol s_7_1[4] = { 'e', 'n', 'd', 'a' }; static const symbol s_7_2[3] = { 'a', 't', 'a' }; static const symbol s_7_3[3] = { 'i', 't', 'a' }; static const symbol s_7_4[3] = { 'u', 't', 'a' }; static const symbol s_7_5[3] = { 'a', 'v', 'a' }; static const symbol s_7_6[3] = { 'e', 'v', 'a' }; static const symbol s_7_7[3] = { 'i', 'v', 'a' }; static const symbol s_7_8[6] = { 'e', 'r', 'e', 'b', 'b', 'e' }; static const symbol s_7_9[6] = { 'i', 'r', 'e', 'b', 'b', 'e' }; static const symbol s_7_10[4] = { 'i', 's', 'c', 'e' }; static const symbol s_7_11[4] = { 'e', 'n', 'd', 'e' }; static const symbol s_7_12[3] = { 'a', 'r', 'e' }; static const symbol s_7_13[3] = { 'e', 'r', 'e' }; static const symbol s_7_14[3] = { 'i', 'r', 'e' }; static const symbol s_7_15[4] = { 'a', 's', 's', 'e' }; static const symbol s_7_16[3] = { 'a', 't', 'e' }; static const symbol s_7_17[5] = { 'a', 'v', 'a', 't', 'e' }; static const symbol s_7_18[5] = { 'e', 'v', 'a', 't', 'e' }; static const symbol s_7_19[5] = { 'i', 'v', 'a', 't', 'e' }; static const symbol s_7_20[3] = { 'e', 't', 'e' }; static const symbol s_7_21[5] = { 'e', 'r', 'e', 't', 'e' }; static const symbol s_7_22[5] = { 'i', 'r', 'e', 't', 'e' }; static const symbol s_7_23[3] = { 'i', 't', 'e' }; static const symbol s_7_24[6] = { 'e', 'r', 'e', 's', 't', 'e' }; static const symbol s_7_25[6] = { 'i', 'r', 'e', 's', 't', 'e' }; static const symbol s_7_26[3] = { 'u', 't', 'e' }; static const symbol s_7_27[4] = { 'e', 'r', 'a', 'i' }; static const symbol s_7_28[4] = { 'i', 'r', 'a', 'i' }; static const symbol s_7_29[4] = { 'i', 's', 'c', 'i' }; static const symbol s_7_30[4] = { 'e', 'n', 'd', 'i' }; static const symbol s_7_31[4] = { 'e', 'r', 'e', 'i' }; static const symbol s_7_32[4] = { 'i', 'r', 'e', 'i' }; static const symbol s_7_33[4] = { 'a', 's', 's', 'i' }; static const symbol s_7_34[3] = { 'a', 't', 'i' }; static const symbol s_7_35[3] = { 'i', 't', 'i' }; static const symbol s_7_36[6] = { 'e', 'r', 'e', 's', 't', 'i' }; static const symbol s_7_37[6] = { 'i', 'r', 'e', 's', 't', 'i' }; static const symbol s_7_38[3] = { 'u', 't', 'i' }; static const symbol s_7_39[3] = { 'a', 'v', 'i' }; static const symbol s_7_40[3] = { 'e', 'v', 'i' }; static const symbol s_7_41[3] = { 'i', 'v', 'i' }; static const symbol s_7_42[4] = { 'i', 's', 'c', 'o' }; static const symbol s_7_43[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_7_44[4] = { 'e', 'n', 'd', 'o' }; static const symbol s_7_45[4] = { 'Y', 'a', 'm', 'o' }; static const symbol s_7_46[4] = { 'i', 'a', 'm', 'o' }; static const symbol s_7_47[5] = { 'a', 'v', 'a', 'm', 'o' }; static const symbol s_7_48[5] = { 'e', 'v', 'a', 'm', 'o' }; static const symbol s_7_49[5] = { 'i', 'v', 'a', 'm', 'o' }; static const symbol s_7_50[5] = { 'e', 'r', 'e', 'm', 'o' }; static const symbol s_7_51[5] = { 'i', 'r', 'e', 'm', 'o' }; static const symbol s_7_52[6] = { 'a', 's', 's', 'i', 'm', 'o' }; static const symbol s_7_53[4] = { 'a', 'm', 'm', 'o' }; static const symbol s_7_54[4] = { 'e', 'm', 'm', 'o' }; static const symbol s_7_55[6] = { 'e', 'r', 'e', 'm', 'm', 'o' }; static const symbol s_7_56[6] = { 'i', 'r', 'e', 'm', 'm', 'o' }; static const symbol s_7_57[4] = { 'i', 'm', 'm', 'o' }; static const symbol s_7_58[3] = { 'a', 'n', 'o' }; static const symbol s_7_59[6] = { 'i', 's', 'c', 'a', 'n', 'o' }; static const symbol s_7_60[5] = { 'a', 'v', 'a', 'n', 'o' }; static const symbol s_7_61[5] = { 'e', 'v', 'a', 'n', 'o' }; static const symbol s_7_62[5] = { 'i', 'v', 'a', 'n', 'o' }; static const symbol s_7_63[6] = { 'e', 'r', 'a', 'n', 'n', 'o' }; static const symbol s_7_64[6] = { 'i', 'r', 'a', 'n', 'n', 'o' }; static const symbol s_7_65[3] = { 'o', 'n', 'o' }; static const symbol s_7_66[6] = { 'i', 's', 'c', 'o', 'n', 'o' }; static const symbol s_7_67[5] = { 'a', 'r', 'o', 'n', 'o' }; static const symbol s_7_68[5] = { 'e', 'r', 'o', 'n', 'o' }; static const symbol s_7_69[5] = { 'i', 'r', 'o', 'n', 'o' }; static const symbol s_7_70[8] = { 'e', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; static const symbol s_7_71[8] = { 'i', 'r', 'e', 'b', 'b', 'e', 'r', 'o' }; static const symbol s_7_72[6] = { 'a', 's', 's', 'e', 'r', 'o' }; static const symbol s_7_73[6] = { 'e', 's', 's', 'e', 'r', 'o' }; static const symbol s_7_74[6] = { 'i', 's', 's', 'e', 'r', 'o' }; static const symbol s_7_75[3] = { 'a', 't', 'o' }; static const symbol s_7_76[3] = { 'i', 't', 'o' }; static const symbol s_7_77[3] = { 'u', 't', 'o' }; static const symbol s_7_78[3] = { 'a', 'v', 'o' }; static const symbol s_7_79[3] = { 'e', 'v', 'o' }; static const symbol s_7_80[3] = { 'i', 'v', 'o' }; static const symbol s_7_81[2] = { 'a', 'r' }; static const symbol s_7_82[2] = { 'i', 'r' }; static const symbol s_7_83[4] = { 'e', 'r', 0xC3, 0xA0 }; static const symbol s_7_84[4] = { 'i', 'r', 0xC3, 0xA0 }; static const symbol s_7_85[4] = { 'e', 'r', 0xC3, 0xB2 }; static const symbol s_7_86[4] = { 'i', 'r', 0xC3, 0xB2 }; static const struct among a_7[87] = { /* 0 */ { 4, s_7_0, -1, 1, 0}, /* 1 */ { 4, s_7_1, -1, 1, 0}, /* 2 */ { 3, s_7_2, -1, 1, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 3, s_7_4, -1, 1, 0}, /* 5 */ { 3, s_7_5, -1, 1, 0}, /* 6 */ { 3, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 6, s_7_8, -1, 1, 0}, /* 9 */ { 6, s_7_9, -1, 1, 0}, /* 10 */ { 4, s_7_10, -1, 1, 0}, /* 11 */ { 4, s_7_11, -1, 1, 0}, /* 12 */ { 3, s_7_12, -1, 1, 0}, /* 13 */ { 3, s_7_13, -1, 1, 0}, /* 14 */ { 3, s_7_14, -1, 1, 0}, /* 15 */ { 4, s_7_15, -1, 1, 0}, /* 16 */ { 3, s_7_16, -1, 1, 0}, /* 17 */ { 5, s_7_17, 16, 1, 0}, /* 18 */ { 5, s_7_18, 16, 1, 0}, /* 19 */ { 5, s_7_19, 16, 1, 0}, /* 20 */ { 3, s_7_20, -1, 1, 0}, /* 21 */ { 5, s_7_21, 20, 1, 0}, /* 22 */ { 5, s_7_22, 20, 1, 0}, /* 23 */ { 3, s_7_23, -1, 1, 0}, /* 24 */ { 6, s_7_24, -1, 1, 0}, /* 25 */ { 6, s_7_25, -1, 1, 0}, /* 26 */ { 3, s_7_26, -1, 1, 0}, /* 27 */ { 4, s_7_27, -1, 1, 0}, /* 28 */ { 4, s_7_28, -1, 1, 0}, /* 29 */ { 4, s_7_29, -1, 1, 0}, /* 30 */ { 4, s_7_30, -1, 1, 0}, /* 31 */ { 4, s_7_31, -1, 1, 0}, /* 32 */ { 4, s_7_32, -1, 1, 0}, /* 33 */ { 4, s_7_33, -1, 1, 0}, /* 34 */ { 3, s_7_34, -1, 1, 0}, /* 35 */ { 3, s_7_35, -1, 1, 0}, /* 36 */ { 6, s_7_36, -1, 1, 0}, /* 37 */ { 6, s_7_37, -1, 1, 0}, /* 38 */ { 3, s_7_38, -1, 1, 0}, /* 39 */ { 3, s_7_39, -1, 1, 0}, /* 40 */ { 3, s_7_40, -1, 1, 0}, /* 41 */ { 3, s_7_41, -1, 1, 0}, /* 42 */ { 4, s_7_42, -1, 1, 0}, /* 43 */ { 4, s_7_43, -1, 1, 0}, /* 44 */ { 4, s_7_44, -1, 1, 0}, /* 45 */ { 4, s_7_45, -1, 1, 0}, /* 46 */ { 4, s_7_46, -1, 1, 0}, /* 47 */ { 5, s_7_47, -1, 1, 0}, /* 48 */ { 5, s_7_48, -1, 1, 0}, /* 49 */ { 5, s_7_49, -1, 1, 0}, /* 50 */ { 5, s_7_50, -1, 1, 0}, /* 51 */ { 5, s_7_51, -1, 1, 0}, /* 52 */ { 6, s_7_52, -1, 1, 0}, /* 53 */ { 4, s_7_53, -1, 1, 0}, /* 54 */ { 4, s_7_54, -1, 1, 0}, /* 55 */ { 6, s_7_55, 54, 1, 0}, /* 56 */ { 6, s_7_56, 54, 1, 0}, /* 57 */ { 4, s_7_57, -1, 1, 0}, /* 58 */ { 3, s_7_58, -1, 1, 0}, /* 59 */ { 6, s_7_59, 58, 1, 0}, /* 60 */ { 5, s_7_60, 58, 1, 0}, /* 61 */ { 5, s_7_61, 58, 1, 0}, /* 62 */ { 5, s_7_62, 58, 1, 0}, /* 63 */ { 6, s_7_63, -1, 1, 0}, /* 64 */ { 6, s_7_64, -1, 1, 0}, /* 65 */ { 3, s_7_65, -1, 1, 0}, /* 66 */ { 6, s_7_66, 65, 1, 0}, /* 67 */ { 5, s_7_67, 65, 1, 0}, /* 68 */ { 5, s_7_68, 65, 1, 0}, /* 69 */ { 5, s_7_69, 65, 1, 0}, /* 70 */ { 8, s_7_70, -1, 1, 0}, /* 71 */ { 8, s_7_71, -1, 1, 0}, /* 72 */ { 6, s_7_72, -1, 1, 0}, /* 73 */ { 6, s_7_73, -1, 1, 0}, /* 74 */ { 6, s_7_74, -1, 1, 0}, /* 75 */ { 3, s_7_75, -1, 1, 0}, /* 76 */ { 3, s_7_76, -1, 1, 0}, /* 77 */ { 3, s_7_77, -1, 1, 0}, /* 78 */ { 3, s_7_78, -1, 1, 0}, /* 79 */ { 3, s_7_79, -1, 1, 0}, /* 80 */ { 3, s_7_80, -1, 1, 0}, /* 81 */ { 2, s_7_81, -1, 1, 0}, /* 82 */ { 2, s_7_82, -1, 1, 0}, /* 83 */ { 4, s_7_83, -1, 1, 0}, /* 84 */ { 4, s_7_84, -1, 1, 0}, /* 85 */ { 4, s_7_85, -1, 1, 0}, /* 86 */ { 4, s_7_86, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2, 1 }; static const unsigned char g_AEIO[] = { 17, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 8, 2 }; static const unsigned char g_CG[] = { 17 }; static const symbol s_0[] = { 0xC3, 0xA0 }; static const symbol s_1[] = { 0xC3, 0xA8 }; static const symbol s_2[] = { 0xC3, 0xAC }; static const symbol s_3[] = { 0xC3, 0xB2 }; static const symbol s_4[] = { 0xC3, 0xB9 }; static const symbol s_5[] = { 'q', 'U' }; static const symbol s_6[] = { 'U' }; static const symbol s_7[] = { 'I' }; static const symbol s_8[] = { 'i' }; static const symbol s_9[] = { 'u' }; static const symbol s_10[] = { 'e' }; static const symbol s_11[] = { 'i', 'c' }; static const symbol s_12[] = { 'l', 'o', 'g' }; static const symbol s_13[] = { 'u' }; static const symbol s_14[] = { 'e', 'n', 't', 'e' }; static const symbol s_15[] = { 'a', 't' }; static const symbol s_16[] = { 'a', 't' }; static const symbol s_17[] = { 'i', 'c' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ int among_var; { int c_test1 = z->c; /* test, line 35 */ while(1) { /* repeat, line 35 */ int c2 = z->c; z->bra = z->c; /* [, line 36 */ among_var = find_among(z, a_0, 7); /* substring, line 36 */ if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 36 */ switch (among_var) { /* among, line 36 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 2, s_0); /* <-, line 37 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_1); /* <-, line 38 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_2); /* <-, line 39 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 2, s_3); /* <-, line 40 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 2, s_4); /* <-, line 41 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 2, s_5); /* <-, line 42 */ if (ret < 0) return ret; } break; case 7: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 43 */ } break; } continue; lab0: z->c = c2; break; } z->c = c_test1; } while(1) { /* repeat, line 46 */ int c3 = z->c; while(1) { /* goto, line 46 */ int c4 = z->c; if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 47 */ z->bra = z->c; /* [, line 47 */ { int c5 = z->c; /* or, line 47 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab4; /* literal, line 47 */ z->c++; z->ket = z->c; /* ], line 47 */ if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab4; /* grouping v, line 47 */ { int ret = slice_from_s(z, 1, s_6); /* <-, line 47 */ if (ret < 0) return ret; } goto lab3; lab4: z->c = c5; if (z->c == z->l || z->p[z->c] != 'i') goto lab2; /* literal, line 48 */ z->c++; z->ket = z->c; /* ], line 48 */ if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 48 */ { int ret = slice_from_s(z, 1, s_7); /* <-, line 48 */ if (ret < 0) return ret; } } lab3: z->c = c4; break; lab2: z->c = c4; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab1; z->c = ret; /* goto, line 46 */ } } continue; lab1: z->c = c3; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 54 */ z->I[1] = z->l; /* $p1 = , line 55 */ z->I[2] = z->l; /* $p2 = , line 56 */ { int c1 = z->c; /* do, line 58 */ { int c2 = z->c; /* or, line 60 */ if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 59 */ { int c3 = z->c; /* or, line 59 */ if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab4; /* non v, line 59 */ { /* gopast */ /* grouping v, line 59 */ int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab2; /* grouping v, line 59 */ { /* gopast */ /* non v, line 59 */ int ret = in_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab0; /* non v, line 61 */ { int c4 = z->c; /* or, line 61 */ if (out_grouping_U(z, g_v, 97, 249, 0)) goto lab6; /* non v, line 61 */ { /* gopast */ /* grouping v, line 61 */ int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping_U(z, g_v, 97, 249, 0)) goto lab0; /* grouping v, line 61 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 61 */ } } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 62 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 64 */ { /* gopast */ /* grouping v, line 65 */ int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 65 */ int ret = in_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 65 */ { /* gopast */ /* grouping v, line 66 */ int ret = out_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 66 */ int ret = in_grouping_U(z, g_v, 97, 249, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 66 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 70 */ int c1 = z->c; z->bra = z->c; /* [, line 72 */ if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else /* substring, line 72 */ among_var = find_among(z, a_1, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 72 */ switch (among_var) { /* among, line 72 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_8); /* <-, line 73 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_9); /* <-, line 74 */ if (ret < 0) return ret; } break; case 3: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 75 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 82 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 83 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 84 */ return 1; } static int r_attached_pronoun(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 87 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((33314 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 87 */ if (!(find_among_b(z, a_2, 37))) return 0; z->bra = z->c; /* ], line 87 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0; /* among, line 97 */ among_var = find_among_b(z, a_3, 5); if (!(among_var)) return 0; { int ret = r_RV(z); /* call RV, line 97 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 97 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 98 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_10); /* <-, line 99 */ if (ret < 0) return ret; } break; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 104 */ among_var = find_among_b(z, a_6, 51); /* substring, line 104 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 104 */ switch (among_var) { /* among, line 104 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 111 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 111 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 113 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 113 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 114 */ z->ket = z->c; /* [, line 114 */ if (!(eq_s_b(z, 2, s_11))) { z->c = z->l - m1; goto lab0; } /* literal, line 114 */ z->bra = z->c; /* ], line 114 */ { int ret = r_R2(z); /* call R2, line 114 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 114 */ if (ret < 0) return ret; } lab0: ; } break; case 3: { int ret = r_R2(z); /* call R2, line 117 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_12); /* <-, line 117 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 119 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_13); /* <-, line 119 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 121 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 4, s_14); /* <-, line 121 */ if (ret < 0) return ret; } break; case 6: { int ret = r_RV(z); /* call RV, line 123 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 123 */ if (ret < 0) return ret; } break; case 7: { int ret = r_R1(z); /* call R1, line 125 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 125 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 126 */ z->ket = z->c; /* [, line 127 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4722696 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m2; goto lab1; } /* substring, line 127 */ among_var = find_among_b(z, a_4, 4); if (!(among_var)) { z->c = z->l - m2; goto lab1; } z->bra = z->c; /* ], line 127 */ { int ret = r_R2(z); /* call R2, line 127 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 127 */ if (ret < 0) return ret; } switch (among_var) { /* among, line 127 */ case 0: { z->c = z->l - m2; goto lab1; } case 1: z->ket = z->c; /* [, line 128 */ if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m2; goto lab1; } /* literal, line 128 */ z->bra = z->c; /* ], line 128 */ { int ret = r_R2(z); /* call R2, line 128 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 128 */ if (ret < 0) return ret; } break; } lab1: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 134 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 135 */ z->ket = z->c; /* [, line 136 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m3; goto lab2; } /* substring, line 136 */ among_var = find_among_b(z, a_5, 3); if (!(among_var)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; /* ], line 136 */ switch (among_var) { /* among, line 136 */ case 0: { z->c = z->l - m3; goto lab2; } case 1: { int ret = r_R2(z); /* call R2, line 137 */ if (ret == 0) { z->c = z->l - m3; goto lab2; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 137 */ if (ret < 0) return ret; } break; } lab2: ; } break; case 9: { int ret = r_R2(z); /* call R2, line 142 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 142 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 143 */ z->ket = z->c; /* [, line 143 */ if (!(eq_s_b(z, 2, s_16))) { z->c = z->l - m4; goto lab3; } /* literal, line 143 */ z->bra = z->c; /* ], line 143 */ { int ret = r_R2(z); /* call R2, line 143 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 143 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 143 */ if (!(eq_s_b(z, 2, s_17))) { z->c = z->l - m4; goto lab3; } /* literal, line 143 */ z->bra = z->c; /* ], line 143 */ { int ret = r_R2(z); /* call R2, line 143 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 143 */ if (ret < 0) return ret; } lab3: ; } break; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 148 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 148 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 149 */ among_var = find_among_b(z, a_7, 87); /* substring, line 149 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 149 */ switch (among_var) { /* among, line 149 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = slice_del(z); /* delete, line 163 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_vowel_suffix(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* try, line 171 */ z->ket = z->c; /* [, line 172 */ if (in_grouping_b_U(z, g_AEIO, 97, 242, 0)) { z->c = z->l - m1; goto lab0; } /* grouping AEIO, line 172 */ z->bra = z->c; /* ], line 172 */ { int ret = r_RV(z); /* call RV, line 172 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 172 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 173 */ if (z->c <= z->lb || z->p[z->c - 1] != 'i') { z->c = z->l - m1; goto lab0; } /* literal, line 173 */ z->c--; z->bra = z->c; /* ], line 173 */ { int ret = r_RV(z); /* call RV, line 173 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 173 */ if (ret < 0) return ret; } lab0: ; } { int m2 = z->l - z->c; (void)m2; /* try, line 175 */ z->ket = z->c; /* [, line 176 */ if (z->c <= z->lb || z->p[z->c - 1] != 'h') { z->c = z->l - m2; goto lab1; } /* literal, line 176 */ z->c--; z->bra = z->c; /* ], line 176 */ if (in_grouping_b_U(z, g_CG, 99, 103, 0)) { z->c = z->l - m2; goto lab1; } /* grouping CG, line 176 */ { int ret = r_RV(z); /* call RV, line 176 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 176 */ if (ret < 0) return ret; } lab1: ; } return 1; } extern int italian_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 182 */ { int ret = r_prelude(z); /* call prelude, line 182 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 183 */ { int ret = r_mark_regions(z); /* call mark_regions, line 183 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 184 */ { int m3 = z->l - z->c; (void)m3; /* do, line 185 */ { int ret = r_attached_pronoun(z); /* call attached_pronoun, line 185 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 186 */ { int m5 = z->l - z->c; (void)m5; /* or, line 186 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 186 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } goto lab4; lab5: z->c = z->l - m5; { int ret = r_verb_suffix(z); /* call verb_suffix, line 186 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } } lab4: lab3: z->c = z->l - m4; } { int m6 = z->l - z->c; (void)m6; /* do, line 187 */ { int ret = r_vowel_suffix(z); /* call vowel_suffix, line 187 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m6; } z->c = z->lb; { int c7 = z->c; /* do, line 189 */ { int ret = r_postlude(z); /* call postlude, line 189 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = c7; } return 1; } extern struct SN_env * italian_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } extern void italian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_italian.h000066400000000000000000000005261364126773500236060ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * italian_UTF_8_create_env(void); extern void italian_UTF_8_close_env(struct SN_env * z); extern int italian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_norwegian.c000066400000000000000000000243051364126773500241520ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int norwegian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_other_suffix(struct SN_env * z); static int r_consonant_pair(struct SN_env * z); static int r_main_suffix(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * norwegian_UTF_8_create_env(void); extern void norwegian_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 'a' }; static const symbol s_0_1[1] = { 'e' }; static const symbol s_0_2[3] = { 'e', 'd', 'e' }; static const symbol s_0_3[4] = { 'a', 'n', 'd', 'e' }; static const symbol s_0_4[4] = { 'e', 'n', 'd', 'e' }; static const symbol s_0_5[3] = { 'a', 'n', 'e' }; static const symbol s_0_6[3] = { 'e', 'n', 'e' }; static const symbol s_0_7[6] = { 'h', 'e', 't', 'e', 'n', 'e' }; static const symbol s_0_8[4] = { 'e', 'r', 't', 'e' }; static const symbol s_0_9[2] = { 'e', 'n' }; static const symbol s_0_10[5] = { 'h', 'e', 't', 'e', 'n' }; static const symbol s_0_11[2] = { 'a', 'r' }; static const symbol s_0_12[2] = { 'e', 'r' }; static const symbol s_0_13[5] = { 'h', 'e', 't', 'e', 'r' }; static const symbol s_0_14[1] = { 's' }; static const symbol s_0_15[2] = { 'a', 's' }; static const symbol s_0_16[2] = { 'e', 's' }; static const symbol s_0_17[4] = { 'e', 'd', 'e', 's' }; static const symbol s_0_18[5] = { 'e', 'n', 'd', 'e', 's' }; static const symbol s_0_19[4] = { 'e', 'n', 'e', 's' }; static const symbol s_0_20[7] = { 'h', 'e', 't', 'e', 'n', 'e', 's' }; static const symbol s_0_21[3] = { 'e', 'n', 's' }; static const symbol s_0_22[6] = { 'h', 'e', 't', 'e', 'n', 's' }; static const symbol s_0_23[3] = { 'e', 'r', 's' }; static const symbol s_0_24[3] = { 'e', 't', 's' }; static const symbol s_0_25[2] = { 'e', 't' }; static const symbol s_0_26[3] = { 'h', 'e', 't' }; static const symbol s_0_27[3] = { 'e', 'r', 't' }; static const symbol s_0_28[3] = { 'a', 's', 't' }; static const struct among a_0[29] = { /* 0 */ { 1, s_0_0, -1, 1, 0}, /* 1 */ { 1, s_0_1, -1, 1, 0}, /* 2 */ { 3, s_0_2, 1, 1, 0}, /* 3 */ { 4, s_0_3, 1, 1, 0}, /* 4 */ { 4, s_0_4, 1, 1, 0}, /* 5 */ { 3, s_0_5, 1, 1, 0}, /* 6 */ { 3, s_0_6, 1, 1, 0}, /* 7 */ { 6, s_0_7, 6, 1, 0}, /* 8 */ { 4, s_0_8, 1, 3, 0}, /* 9 */ { 2, s_0_9, -1, 1, 0}, /* 10 */ { 5, s_0_10, 9, 1, 0}, /* 11 */ { 2, s_0_11, -1, 1, 0}, /* 12 */ { 2, s_0_12, -1, 1, 0}, /* 13 */ { 5, s_0_13, 12, 1, 0}, /* 14 */ { 1, s_0_14, -1, 2, 0}, /* 15 */ { 2, s_0_15, 14, 1, 0}, /* 16 */ { 2, s_0_16, 14, 1, 0}, /* 17 */ { 4, s_0_17, 16, 1, 0}, /* 18 */ { 5, s_0_18, 16, 1, 0}, /* 19 */ { 4, s_0_19, 16, 1, 0}, /* 20 */ { 7, s_0_20, 19, 1, 0}, /* 21 */ { 3, s_0_21, 14, 1, 0}, /* 22 */ { 6, s_0_22, 21, 1, 0}, /* 23 */ { 3, s_0_23, 14, 1, 0}, /* 24 */ { 3, s_0_24, 14, 1, 0}, /* 25 */ { 2, s_0_25, -1, 1, 0}, /* 26 */ { 3, s_0_26, 25, 1, 0}, /* 27 */ { 3, s_0_27, -1, 3, 0}, /* 28 */ { 3, s_0_28, -1, 1, 0} }; static const symbol s_1_0[2] = { 'd', 't' }; static const symbol s_1_1[2] = { 'v', 't' }; static const struct among a_1[2] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0} }; static const symbol s_2_0[3] = { 'l', 'e', 'g' }; static const symbol s_2_1[4] = { 'e', 'l', 'e', 'g' }; static const symbol s_2_2[2] = { 'i', 'g' }; static const symbol s_2_3[3] = { 'e', 'i', 'g' }; static const symbol s_2_4[3] = { 'l', 'i', 'g' }; static const symbol s_2_5[4] = { 'e', 'l', 'i', 'g' }; static const symbol s_2_6[3] = { 'e', 'l', 's' }; static const symbol s_2_7[3] = { 'l', 'o', 'v' }; static const symbol s_2_8[4] = { 'e', 'l', 'o', 'v' }; static const symbol s_2_9[4] = { 's', 'l', 'o', 'v' }; static const symbol s_2_10[7] = { 'h', 'e', 't', 's', 'l', 'o', 'v' }; static const struct among a_2[11] = { /* 0 */ { 3, s_2_0, -1, 1, 0}, /* 1 */ { 4, s_2_1, 0, 1, 0}, /* 2 */ { 2, s_2_2, -1, 1, 0}, /* 3 */ { 3, s_2_3, 2, 1, 0}, /* 4 */ { 3, s_2_4, 2, 1, 0}, /* 5 */ { 4, s_2_5, 4, 1, 0}, /* 6 */ { 3, s_2_6, -1, 1, 0}, /* 7 */ { 3, s_2_7, -1, 1, 0}, /* 8 */ { 4, s_2_8, 7, 1, 0}, /* 9 */ { 4, s_2_9, 7, 1, 0}, /* 10 */ { 7, s_2_10, 9, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 128 }; static const unsigned char g_s_ending[] = { 119, 125, 149, 1 }; static const symbol s_0[] = { 'e', 'r' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 28 */ { int c_test1 = z->c; /* test, line 30 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, + 3); /* hop, line 30 */ if (ret < 0) return 0; z->c = ret; } z->I[1] = z->c; /* setmark x, line 30 */ z->c = c_test1; } if (out_grouping_U(z, g_v, 97, 248, 1) < 0) return 0; /* goto */ /* grouping v, line 31 */ { /* gopast */ /* non v, line 31 */ int ret = in_grouping_U(z, g_v, 97, 248, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 31 */ /* try, line 32 */ if (!(z->I[0] < z->I[1])) goto lab0; /* $p1 < , line 32 */ z->I[0] = z->I[1]; /* $p1 = , line 32 */ lab0: return 1; } static int r_main_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 38 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 38 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 38 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851426 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 38 */ among_var = find_among_b(z, a_0, 29); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 38 */ z->lb = mlimit1; } switch (among_var) { /* among, line 39 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 2: { int m2 = z->l - z->c; (void)m2; /* or, line 46 */ if (in_grouping_b_U(z, g_s_ending, 98, 122, 0)) goto lab1; /* grouping s_ending, line 46 */ goto lab0; lab1: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'k') return 0; /* literal, line 46 */ z->c--; if (out_grouping_b_U(z, g_v, 97, 248, 0)) return 0; /* non v, line 46 */ } lab0: { int ret = slice_del(z); /* delete, line 46 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_0); /* <-, line 48 */ if (ret < 0) return ret; } break; } return 1; } static int r_consonant_pair(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 53 */ { int m2 = z->l - z->c; (void)m2; /* setlimit, line 54 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 54 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; z->ket = z->c; /* [, line 54 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] != 116) { z->lb = mlimit2; return 0; } /* substring, line 54 */ if (!(find_among_b(z, a_1, 2))) { z->lb = mlimit2; return 0; } z->bra = z->c; /* ], line 54 */ z->lb = mlimit2; } z->c = z->l - m_test1; } { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 59 */ } z->bra = z->c; /* ], line 59 */ { int ret = slice_del(z); /* delete, line 59 */ if (ret < 0) return ret; } return 1; } static int r_other_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 63 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 63 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 63 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718720 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 63 */ among_var = find_among_b(z, a_2, 11); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 63 */ z->lb = mlimit1; } switch (among_var) { /* among, line 64 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 67 */ if (ret < 0) return ret; } break; } return 1; } extern int norwegian_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 74 */ { int ret = r_mark_regions(z); /* call mark_regions, line 74 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 75 */ { int m2 = z->l - z->c; (void)m2; /* do, line 76 */ { int ret = r_main_suffix(z); /* call main_suffix, line 76 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 77 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 77 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 78 */ { int ret = r_other_suffix(z); /* call other_suffix, line 78 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } z->c = z->lb; return 1; } extern struct SN_env * norwegian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } extern void norwegian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_norwegian.h000066400000000000000000000005341364126773500241550ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * norwegian_UTF_8_create_env(void); extern void norwegian_UTF_8_close_env(struct SN_env * z); extern int norwegian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_porter.c000066400000000000000000000625521364126773500235020ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int porter_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_Step_5b(struct SN_env * z); static int r_Step_5a(struct SN_env * z); static int r_Step_4(struct SN_env * z); static int r_Step_3(struct SN_env * z); static int r_Step_2(struct SN_env * z); static int r_Step_1c(struct SN_env * z); static int r_Step_1b(struct SN_env * z); static int r_Step_1a(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_shortv(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * porter_UTF_8_create_env(void); extern void porter_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 's' }; static const symbol s_0_1[3] = { 'i', 'e', 's' }; static const symbol s_0_2[4] = { 's', 's', 'e', 's' }; static const symbol s_0_3[2] = { 's', 's' }; static const struct among a_0[4] = { /* 0 */ { 1, s_0_0, -1, 3, 0}, /* 1 */ { 3, s_0_1, 0, 2, 0}, /* 2 */ { 4, s_0_2, 0, 1, 0}, /* 3 */ { 2, s_0_3, 0, -1, 0} }; static const symbol s_1_1[2] = { 'b', 'b' }; static const symbol s_1_2[2] = { 'd', 'd' }; static const symbol s_1_3[2] = { 'f', 'f' }; static const symbol s_1_4[2] = { 'g', 'g' }; static const symbol s_1_5[2] = { 'b', 'l' }; static const symbol s_1_6[2] = { 'm', 'm' }; static const symbol s_1_7[2] = { 'n', 'n' }; static const symbol s_1_8[2] = { 'p', 'p' }; static const symbol s_1_9[2] = { 'r', 'r' }; static const symbol s_1_10[2] = { 'a', 't' }; static const symbol s_1_11[2] = { 't', 't' }; static const symbol s_1_12[2] = { 'i', 'z' }; static const struct among a_1[13] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_1_1, 0, 2, 0}, /* 2 */ { 2, s_1_2, 0, 2, 0}, /* 3 */ { 2, s_1_3, 0, 2, 0}, /* 4 */ { 2, s_1_4, 0, 2, 0}, /* 5 */ { 2, s_1_5, 0, 1, 0}, /* 6 */ { 2, s_1_6, 0, 2, 0}, /* 7 */ { 2, s_1_7, 0, 2, 0}, /* 8 */ { 2, s_1_8, 0, 2, 0}, /* 9 */ { 2, s_1_9, 0, 2, 0}, /* 10 */ { 2, s_1_10, 0, 1, 0}, /* 11 */ { 2, s_1_11, 0, 2, 0}, /* 12 */ { 2, s_1_12, 0, 1, 0} }; static const symbol s_2_0[2] = { 'e', 'd' }; static const symbol s_2_1[3] = { 'e', 'e', 'd' }; static const symbol s_2_2[3] = { 'i', 'n', 'g' }; static const struct among a_2[3] = { /* 0 */ { 2, s_2_0, -1, 2, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 3, s_2_2, -1, 2, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 'c', 'i' }; static const symbol s_3_1[4] = { 'e', 'n', 'c', 'i' }; static const symbol s_3_2[4] = { 'a', 'b', 'l', 'i' }; static const symbol s_3_3[3] = { 'e', 'l', 'i' }; static const symbol s_3_4[4] = { 'a', 'l', 'l', 'i' }; static const symbol s_3_5[5] = { 'o', 'u', 's', 'l', 'i' }; static const symbol s_3_6[5] = { 'e', 'n', 't', 'l', 'i' }; static const symbol s_3_7[5] = { 'a', 'l', 'i', 't', 'i' }; static const symbol s_3_8[6] = { 'b', 'i', 'l', 'i', 't', 'i' }; static const symbol s_3_9[5] = { 'i', 'v', 'i', 't', 'i' }; static const symbol s_3_10[6] = { 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_3_11[7] = { 'a', 't', 'i', 'o', 'n', 'a', 'l' }; static const symbol s_3_12[5] = { 'a', 'l', 'i', 's', 'm' }; static const symbol s_3_13[5] = { 'a', 't', 'i', 'o', 'n' }; static const symbol s_3_14[7] = { 'i', 'z', 'a', 't', 'i', 'o', 'n' }; static const symbol s_3_15[4] = { 'i', 'z', 'e', 'r' }; static const symbol s_3_16[4] = { 'a', 't', 'o', 'r' }; static const symbol s_3_17[7] = { 'i', 'v', 'e', 'n', 'e', 's', 's' }; static const symbol s_3_18[7] = { 'f', 'u', 'l', 'n', 'e', 's', 's' }; static const symbol s_3_19[7] = { 'o', 'u', 's', 'n', 'e', 's', 's' }; static const struct among a_3[20] = { /* 0 */ { 4, s_3_0, -1, 3, 0}, /* 1 */ { 4, s_3_1, -1, 2, 0}, /* 2 */ { 4, s_3_2, -1, 4, 0}, /* 3 */ { 3, s_3_3, -1, 6, 0}, /* 4 */ { 4, s_3_4, -1, 9, 0}, /* 5 */ { 5, s_3_5, -1, 12, 0}, /* 6 */ { 5, s_3_6, -1, 5, 0}, /* 7 */ { 5, s_3_7, -1, 10, 0}, /* 8 */ { 6, s_3_8, -1, 14, 0}, /* 9 */ { 5, s_3_9, -1, 13, 0}, /* 10 */ { 6, s_3_10, -1, 1, 0}, /* 11 */ { 7, s_3_11, 10, 8, 0}, /* 12 */ { 5, s_3_12, -1, 10, 0}, /* 13 */ { 5, s_3_13, -1, 8, 0}, /* 14 */ { 7, s_3_14, 13, 7, 0}, /* 15 */ { 4, s_3_15, -1, 7, 0}, /* 16 */ { 4, s_3_16, -1, 8, 0}, /* 17 */ { 7, s_3_17, -1, 13, 0}, /* 18 */ { 7, s_3_18, -1, 11, 0}, /* 19 */ { 7, s_3_19, -1, 12, 0} }; static const symbol s_4_0[5] = { 'i', 'c', 'a', 't', 'e' }; static const symbol s_4_1[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_4_2[5] = { 'a', 'l', 'i', 'z', 'e' }; static const symbol s_4_3[5] = { 'i', 'c', 'i', 't', 'i' }; static const symbol s_4_4[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_4_5[3] = { 'f', 'u', 'l' }; static const symbol s_4_6[4] = { 'n', 'e', 's', 's' }; static const struct among a_4[7] = { /* 0 */ { 5, s_4_0, -1, 2, 0}, /* 1 */ { 5, s_4_1, -1, 3, 0}, /* 2 */ { 5, s_4_2, -1, 1, 0}, /* 3 */ { 5, s_4_3, -1, 2, 0}, /* 4 */ { 4, s_4_4, -1, 2, 0}, /* 5 */ { 3, s_4_5, -1, 3, 0}, /* 6 */ { 4, s_4_6, -1, 3, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'n', 'c', 'e' }; static const symbol s_5_2[4] = { 'e', 'n', 'c', 'e' }; static const symbol s_5_3[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_5_4[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_5_5[3] = { 'a', 't', 'e' }; static const symbol s_5_6[3] = { 'i', 'v', 'e' }; static const symbol s_5_7[3] = { 'i', 'z', 'e' }; static const symbol s_5_8[3] = { 'i', 't', 'i' }; static const symbol s_5_9[2] = { 'a', 'l' }; static const symbol s_5_10[3] = { 'i', 's', 'm' }; static const symbol s_5_11[3] = { 'i', 'o', 'n' }; static const symbol s_5_12[2] = { 'e', 'r' }; static const symbol s_5_13[3] = { 'o', 'u', 's' }; static const symbol s_5_14[3] = { 'a', 'n', 't' }; static const symbol s_5_15[3] = { 'e', 'n', 't' }; static const symbol s_5_16[4] = { 'm', 'e', 'n', 't' }; static const symbol s_5_17[5] = { 'e', 'm', 'e', 'n', 't' }; static const symbol s_5_18[2] = { 'o', 'u' }; static const struct among a_5[19] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 4, s_5_2, -1, 1, 0}, /* 3 */ { 4, s_5_3, -1, 1, 0}, /* 4 */ { 4, s_5_4, -1, 1, 0}, /* 5 */ { 3, s_5_5, -1, 1, 0}, /* 6 */ { 3, s_5_6, -1, 1, 0}, /* 7 */ { 3, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 1, 0}, /* 9 */ { 2, s_5_9, -1, 1, 0}, /* 10 */ { 3, s_5_10, -1, 1, 0}, /* 11 */ { 3, s_5_11, -1, 2, 0}, /* 12 */ { 2, s_5_12, -1, 1, 0}, /* 13 */ { 3, s_5_13, -1, 1, 0}, /* 14 */ { 3, s_5_14, -1, 1, 0}, /* 15 */ { 3, s_5_15, -1, 1, 0}, /* 16 */ { 4, s_5_16, 15, 1, 0}, /* 17 */ { 5, s_5_17, 16, 1, 0}, /* 18 */ { 2, s_5_18, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1 }; static const unsigned char g_v_WXY[] = { 1, 17, 65, 208, 1 }; static const symbol s_0[] = { 's', 's' }; static const symbol s_1[] = { 'i' }; static const symbol s_2[] = { 'e', 'e' }; static const symbol s_3[] = { 'e' }; static const symbol s_4[] = { 'e' }; static const symbol s_5[] = { 'i' }; static const symbol s_6[] = { 't', 'i', 'o', 'n' }; static const symbol s_7[] = { 'e', 'n', 'c', 'e' }; static const symbol s_8[] = { 'a', 'n', 'c', 'e' }; static const symbol s_9[] = { 'a', 'b', 'l', 'e' }; static const symbol s_10[] = { 'e', 'n', 't' }; static const symbol s_11[] = { 'e' }; static const symbol s_12[] = { 'i', 'z', 'e' }; static const symbol s_13[] = { 'a', 't', 'e' }; static const symbol s_14[] = { 'a', 'l' }; static const symbol s_15[] = { 'a', 'l' }; static const symbol s_16[] = { 'f', 'u', 'l' }; static const symbol s_17[] = { 'o', 'u', 's' }; static const symbol s_18[] = { 'i', 'v', 'e' }; static const symbol s_19[] = { 'b', 'l', 'e' }; static const symbol s_20[] = { 'a', 'l' }; static const symbol s_21[] = { 'i', 'c' }; static const symbol s_22[] = { 'Y' }; static const symbol s_23[] = { 'Y' }; static const symbol s_24[] = { 'y' }; static int r_shortv(struct SN_env * z) { /* backwardmode */ if (out_grouping_b_U(z, g_v_WXY, 89, 121, 0)) return 0; /* non v_WXY, line 19 */ if (in_grouping_b_U(z, g_v, 97, 121, 0)) return 0; /* grouping v, line 19 */ if (out_grouping_b_U(z, g_v, 97, 121, 0)) return 0; /* non v, line 19 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $p1 <= , line 21 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 22 */ return 1; } static int r_Step_1a(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 25 */ if (z->c <= z->lb || z->p[z->c - 1] != 115) return 0; /* substring, line 25 */ among_var = find_among_b(z, a_0, 4); if (!(among_var)) return 0; z->bra = z->c; /* ], line 25 */ switch (among_var) { /* among, line 25 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_0); /* <-, line 26 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 27 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 29 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_1b(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 34 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 100 && z->p[z->c - 1] != 103)) return 0; /* substring, line 34 */ among_var = find_among_b(z, a_2, 3); if (!(among_var)) return 0; z->bra = z->c; /* ], line 34 */ switch (among_var) { /* among, line 34 */ case 0: return 0; case 1: { int ret = r_R1(z); /* call R1, line 35 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 2, s_2); /* <-, line 35 */ if (ret < 0) return ret; } break; case 2: { int m_test1 = z->l - z->c; /* test, line 38 */ { /* gopast */ /* grouping v, line 38 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } z->c = z->l - m_test1; } { int ret = slice_del(z); /* delete, line 38 */ if (ret < 0) return ret; } { int m_test2 = z->l - z->c; /* test, line 39 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((68514004 >> (z->p[z->c - 1] & 0x1f)) & 1)) among_var = 3; else /* substring, line 39 */ among_var = find_among_b(z, a_1, 13); if (!(among_var)) return 0; z->c = z->l - m_test2; } switch (among_var) { /* among, line 39 */ case 0: return 0; case 1: { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_3); /* <+, line 41 */ z->c = saved_c; } if (ret < 0) return ret; } break; case 2: z->ket = z->c; /* [, line 44 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 44 */ } z->bra = z->c; /* ], line 44 */ { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 3: if (z->c != z->I[0]) return 0; /* atmark, line 45 */ { int m_test3 = z->l - z->c; /* test, line 45 */ { int ret = r_shortv(z); /* call shortv, line 45 */ if (ret <= 0) return ret; } z->c = z->l - m_test3; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_4); /* <+, line 45 */ z->c = saved_c; } if (ret < 0) return ret; } break; } break; } return 1; } static int r_Step_1c(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 52 */ { int m1 = z->l - z->c; (void)m1; /* or, line 52 */ if (z->c <= z->lb || z->p[z->c - 1] != 'y') goto lab1; /* literal, line 52 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 'Y') return 0; /* literal, line 52 */ z->c--; } lab0: z->bra = z->c; /* ], line 52 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping_b_U(z, g_v, 97, 121, 1); if (ret < 0) return 0; z->c -= ret; } { int ret = slice_from_s(z, 1, s_5); /* <-, line 54 */ if (ret < 0) return ret; } return 1; } static int r_Step_2(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 58 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((815616 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 58 */ among_var = find_among_b(z, a_3, 20); if (!(among_var)) return 0; z->bra = z->c; /* ], line 58 */ { int ret = r_R1(z); /* call R1, line 58 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 58 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_6); /* <-, line 59 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_7); /* <-, line 60 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_8); /* <-, line 61 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 4, s_9); /* <-, line 62 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 3, s_10); /* <-, line 63 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 1, s_11); /* <-, line 64 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 3, s_12); /* <-, line 66 */ if (ret < 0) return ret; } break; case 8: { int ret = slice_from_s(z, 3, s_13); /* <-, line 68 */ if (ret < 0) return ret; } break; case 9: { int ret = slice_from_s(z, 2, s_14); /* <-, line 69 */ if (ret < 0) return ret; } break; case 10: { int ret = slice_from_s(z, 2, s_15); /* <-, line 71 */ if (ret < 0) return ret; } break; case 11: { int ret = slice_from_s(z, 3, s_16); /* <-, line 72 */ if (ret < 0) return ret; } break; case 12: { int ret = slice_from_s(z, 3, s_17); /* <-, line 74 */ if (ret < 0) return ret; } break; case 13: { int ret = slice_from_s(z, 3, s_18); /* <-, line 76 */ if (ret < 0) return ret; } break; case 14: { int ret = slice_from_s(z, 3, s_19); /* <-, line 77 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_3(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 82 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((528928 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 82 */ among_var = find_among_b(z, a_4, 7); if (!(among_var)) return 0; z->bra = z->c; /* ], line 82 */ { int ret = r_R1(z); /* call R1, line 82 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 82 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 2, s_20); /* <-, line 83 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_21); /* <-, line 85 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 87 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_4(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 92 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((3961384 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 92 */ among_var = find_among_b(z, a_5, 19); if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ { int ret = r_R2(z); /* call R2, line 92 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 92 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 95 */ if (ret < 0) return ret; } break; case 2: { int m1 = z->l - z->c; (void)m1; /* or, line 96 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab1; /* literal, line 96 */ z->c--; goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 't') return 0; /* literal, line 96 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 96 */ if (ret < 0) return ret; } break; } return 1; } static int r_Step_5a(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 101 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 101 */ z->c--; z->bra = z->c; /* ], line 101 */ { int m1 = z->l - z->c; (void)m1; /* or, line 102 */ { int ret = r_R2(z); /* call R2, line 102 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_R1(z); /* call R1, line 102 */ if (ret <= 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* not, line 102 */ { int ret = r_shortv(z); /* call shortv, line 102 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } return 0; lab2: z->c = z->l - m2; } } lab0: { int ret = slice_del(z); /* delete, line 103 */ if (ret < 0) return ret; } return 1; } static int r_Step_5b(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 107 */ if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 107 */ z->c--; z->bra = z->c; /* ], line 107 */ { int ret = r_R2(z); /* call R2, line 108 */ if (ret <= 0) return ret; } if (z->c <= z->lb || z->p[z->c - 1] != 'l') return 0; /* literal, line 108 */ z->c--; { int ret = slice_del(z); /* delete, line 109 */ if (ret < 0) return ret; } return 1; } extern int porter_UTF_8_stem(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset Y_found, line 115 */ { int c1 = z->c; /* do, line 116 */ z->bra = z->c; /* [, line 116 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab0; /* literal, line 116 */ z->c++; z->ket = z->c; /* ], line 116 */ { int ret = slice_from_s(z, 1, s_22); /* <-, line 116 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 116 */ lab0: z->c = c1; } { int c2 = z->c; /* do, line 117 */ while(1) { /* repeat, line 117 */ int c3 = z->c; while(1) { /* goto, line 117 */ int c4 = z->c; if (in_grouping_U(z, g_v, 97, 121, 0)) goto lab3; /* grouping v, line 117 */ z->bra = z->c; /* [, line 117 */ if (z->c == z->l || z->p[z->c] != 'y') goto lab3; /* literal, line 117 */ z->c++; z->ket = z->c; /* ], line 117 */ z->c = c4; break; lab3: z->c = c4; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab2; z->c = ret; /* goto, line 117 */ } } { int ret = slice_from_s(z, 1, s_23); /* <-, line 117 */ if (ret < 0) return ret; } z->B[0] = 1; /* set Y_found, line 117 */ continue; lab2: z->c = c3; break; } z->c = c2; } z->I[0] = z->l; /* $p1 = , line 119 */ z->I[1] = z->l; /* $p2 = , line 120 */ { int c5 = z->c; /* do, line 121 */ { /* gopast */ /* grouping v, line 122 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 122 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 122 */ { /* gopast */ /* grouping v, line 123 */ int ret = out_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } { /* gopast */ /* non v, line 123 */ int ret = in_grouping_U(z, g_v, 97, 121, 1); if (ret < 0) goto lab4; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 123 */ lab4: z->c = c5; } z->lb = z->c; z->c = z->l; /* backwards, line 126 */ { int m6 = z->l - z->c; (void)m6; /* do, line 127 */ { int ret = r_Step_1a(z); /* call Step_1a, line 127 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = z->l - m6; } { int m7 = z->l - z->c; (void)m7; /* do, line 128 */ { int ret = r_Step_1b(z); /* call Step_1b, line 128 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m7; } { int m8 = z->l - z->c; (void)m8; /* do, line 129 */ { int ret = r_Step_1c(z); /* call Step_1c, line 129 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 130 */ { int ret = r_Step_2(z); /* call Step_2, line 130 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m9; } { int m10 = z->l - z->c; (void)m10; /* do, line 131 */ { int ret = r_Step_3(z); /* call Step_3, line 131 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m10; } { int m11 = z->l - z->c; (void)m11; /* do, line 132 */ { int ret = r_Step_4(z); /* call Step_4, line 132 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } lab10: z->c = z->l - m11; } { int m12 = z->l - z->c; (void)m12; /* do, line 133 */ { int ret = r_Step_5a(z); /* call Step_5a, line 133 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } lab11: z->c = z->l - m12; } { int m13 = z->l - z->c; (void)m13; /* do, line 134 */ { int ret = r_Step_5b(z); /* call Step_5b, line 134 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } lab12: z->c = z->l - m13; } z->c = z->lb; { int c14 = z->c; /* do, line 137 */ if (!(z->B[0])) goto lab13; /* Boolean test Y_found, line 137 */ while(1) { /* repeat, line 137 */ int c15 = z->c; while(1) { /* goto, line 137 */ int c16 = z->c; z->bra = z->c; /* [, line 137 */ if (z->c == z->l || z->p[z->c] != 'Y') goto lab15; /* literal, line 137 */ z->c++; z->ket = z->c; /* ], line 137 */ z->c = c16; break; lab15: z->c = c16; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab14; z->c = ret; /* goto, line 137 */ } } { int ret = slice_from_s(z, 1, s_24); /* <-, line 137 */ if (ret < 0) return ret; } continue; lab14: z->c = c15; break; } lab13: z->c = c14; } return 1; } extern struct SN_env * porter_UTF_8_create_env(void) { return SN_create_env(0, 2, 1); } extern void porter_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_porter.h000066400000000000000000000005231364126773500234750ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * porter_UTF_8_create_env(void); extern void porter_UTF_8_close_env(struct SN_env * z); extern int porter_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_portuguese.c000066400000000000000000001150301364126773500243570ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int portuguese_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_residual_form(struct SN_env * z); static int r_residual_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * portuguese_UTF_8_create_env(void); extern void portuguese_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[2] = { 0xC3, 0xA3 }; static const symbol s_0_2[2] = { 0xC3, 0xB5 }; static const struct among a_0[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_0_1, 0, 1, 0}, /* 2 */ { 2, s_0_2, 0, 2, 0} }; static const symbol s_1_1[2] = { 'a', '~' }; static const symbol s_1_2[2] = { 'o', '~' }; static const struct among a_1[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 2, s_1_1, 0, 1, 0}, /* 2 */ { 2, s_1_2, 0, 2, 0} }; static const symbol s_2_0[2] = { 'i', 'c' }; static const symbol s_2_1[2] = { 'a', 'd' }; static const symbol s_2_2[2] = { 'o', 's' }; static const symbol s_2_3[2] = { 'i', 'v' }; static const struct among a_2[4] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 2, s_2_2, -1, -1, 0}, /* 3 */ { 2, s_2_3, -1, 1, 0} }; static const symbol s_3_0[4] = { 'a', 'n', 't', 'e' }; static const symbol s_3_1[4] = { 'a', 'v', 'e', 'l' }; static const symbol s_3_2[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; static const struct among a_3[3] = { /* 0 */ { 4, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0}, /* 2 */ { 5, s_3_2, -1, 1, 0} }; static const symbol s_4_0[2] = { 'i', 'c' }; static const symbol s_4_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_4_2[2] = { 'i', 'v' }; static const struct among a_4[3] = { /* 0 */ { 2, s_4_0, -1, 1, 0}, /* 1 */ { 4, s_4_1, -1, 1, 0}, /* 2 */ { 2, s_4_2, -1, 1, 0} }; static const symbol s_5_0[3] = { 'i', 'c', 'a' }; static const symbol s_5_1[6] = { 0xC3, 0xA2, 'n', 'c', 'i', 'a' }; static const symbol s_5_2[6] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a' }; static const symbol s_5_3[5] = { 'l', 'o', 'g', 'i', 'a' }; static const symbol s_5_4[3] = { 'i', 'r', 'a' }; static const symbol s_5_5[5] = { 'a', 'd', 'o', 'r', 'a' }; static const symbol s_5_6[3] = { 'o', 's', 'a' }; static const symbol s_5_7[4] = { 'i', 's', 't', 'a' }; static const symbol s_5_8[3] = { 'i', 'v', 'a' }; static const symbol s_5_9[3] = { 'e', 'z', 'a' }; static const symbol s_5_10[5] = { 'i', 'd', 'a', 'd', 'e' }; static const symbol s_5_11[4] = { 'a', 'n', 't', 'e' }; static const symbol s_5_12[5] = { 'm', 'e', 'n', 't', 'e' }; static const symbol s_5_13[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; static const symbol s_5_14[5] = { 0xC3, 0xA1, 'v', 'e', 'l' }; static const symbol s_5_15[5] = { 0xC3, 0xAD, 'v', 'e', 'l' }; static const symbol s_5_16[3] = { 'i', 'c', 'o' }; static const symbol s_5_17[4] = { 'i', 's', 'm', 'o' }; static const symbol s_5_18[3] = { 'o', 's', 'o' }; static const symbol s_5_19[6] = { 'a', 'm', 'e', 'n', 't', 'o' }; static const symbol s_5_20[6] = { 'i', 'm', 'e', 'n', 't', 'o' }; static const symbol s_5_21[3] = { 'i', 'v', 'o' }; static const symbol s_5_22[6] = { 'a', 0xC3, 0xA7, 'a', '~', 'o' }; static const symbol s_5_23[6] = { 'u', 0xC3, 0xA7, 'a', '~', 'o' }; static const symbol s_5_24[4] = { 'a', 'd', 'o', 'r' }; static const symbol s_5_25[4] = { 'i', 'c', 'a', 's' }; static const symbol s_5_26[7] = { 0xC3, 0xAA, 'n', 'c', 'i', 'a', 's' }; static const symbol s_5_27[6] = { 'l', 'o', 'g', 'i', 'a', 's' }; static const symbol s_5_28[4] = { 'i', 'r', 'a', 's' }; static const symbol s_5_29[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; static const symbol s_5_30[4] = { 'o', 's', 'a', 's' }; static const symbol s_5_31[5] = { 'i', 's', 't', 'a', 's' }; static const symbol s_5_32[4] = { 'i', 'v', 'a', 's' }; static const symbol s_5_33[4] = { 'e', 'z', 'a', 's' }; static const symbol s_5_34[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; static const symbol s_5_35[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; static const symbol s_5_36[5] = { 'a', 'n', 't', 'e', 's' }; static const symbol s_5_37[7] = { 'a', 0xC3, 0xA7, 'o', '~', 'e', 's' }; static const symbol s_5_38[7] = { 'u', 0xC3, 0xA7, 'o', '~', 'e', 's' }; static const symbol s_5_39[4] = { 'i', 'c', 'o', 's' }; static const symbol s_5_40[5] = { 'i', 's', 'm', 'o', 's' }; static const symbol s_5_41[4] = { 'o', 's', 'o', 's' }; static const symbol s_5_42[7] = { 'a', 'm', 'e', 'n', 't', 'o', 's' }; static const symbol s_5_43[7] = { 'i', 'm', 'e', 'n', 't', 'o', 's' }; static const symbol s_5_44[4] = { 'i', 'v', 'o', 's' }; static const struct among a_5[45] = { /* 0 */ { 3, s_5_0, -1, 1, 0}, /* 1 */ { 6, s_5_1, -1, 1, 0}, /* 2 */ { 6, s_5_2, -1, 4, 0}, /* 3 */ { 5, s_5_3, -1, 2, 0}, /* 4 */ { 3, s_5_4, -1, 9, 0}, /* 5 */ { 5, s_5_5, -1, 1, 0}, /* 6 */ { 3, s_5_6, -1, 1, 0}, /* 7 */ { 4, s_5_7, -1, 1, 0}, /* 8 */ { 3, s_5_8, -1, 8, 0}, /* 9 */ { 3, s_5_9, -1, 1, 0}, /* 10 */ { 5, s_5_10, -1, 7, 0}, /* 11 */ { 4, s_5_11, -1, 1, 0}, /* 12 */ { 5, s_5_12, -1, 6, 0}, /* 13 */ { 6, s_5_13, 12, 5, 0}, /* 14 */ { 5, s_5_14, -1, 1, 0}, /* 15 */ { 5, s_5_15, -1, 1, 0}, /* 16 */ { 3, s_5_16, -1, 1, 0}, /* 17 */ { 4, s_5_17, -1, 1, 0}, /* 18 */ { 3, s_5_18, -1, 1, 0}, /* 19 */ { 6, s_5_19, -1, 1, 0}, /* 20 */ { 6, s_5_20, -1, 1, 0}, /* 21 */ { 3, s_5_21, -1, 8, 0}, /* 22 */ { 6, s_5_22, -1, 1, 0}, /* 23 */ { 6, s_5_23, -1, 3, 0}, /* 24 */ { 4, s_5_24, -1, 1, 0}, /* 25 */ { 4, s_5_25, -1, 1, 0}, /* 26 */ { 7, s_5_26, -1, 4, 0}, /* 27 */ { 6, s_5_27, -1, 2, 0}, /* 28 */ { 4, s_5_28, -1, 9, 0}, /* 29 */ { 6, s_5_29, -1, 1, 0}, /* 30 */ { 4, s_5_30, -1, 1, 0}, /* 31 */ { 5, s_5_31, -1, 1, 0}, /* 32 */ { 4, s_5_32, -1, 8, 0}, /* 33 */ { 4, s_5_33, -1, 1, 0}, /* 34 */ { 6, s_5_34, -1, 7, 0}, /* 35 */ { 6, s_5_35, -1, 1, 0}, /* 36 */ { 5, s_5_36, -1, 1, 0}, /* 37 */ { 7, s_5_37, -1, 1, 0}, /* 38 */ { 7, s_5_38, -1, 3, 0}, /* 39 */ { 4, s_5_39, -1, 1, 0}, /* 40 */ { 5, s_5_40, -1, 1, 0}, /* 41 */ { 4, s_5_41, -1, 1, 0}, /* 42 */ { 7, s_5_42, -1, 1, 0}, /* 43 */ { 7, s_5_43, -1, 1, 0}, /* 44 */ { 4, s_5_44, -1, 8, 0} }; static const symbol s_6_0[3] = { 'a', 'd', 'a' }; static const symbol s_6_1[3] = { 'i', 'd', 'a' }; static const symbol s_6_2[2] = { 'i', 'a' }; static const symbol s_6_3[4] = { 'a', 'r', 'i', 'a' }; static const symbol s_6_4[4] = { 'e', 'r', 'i', 'a' }; static const symbol s_6_5[4] = { 'i', 'r', 'i', 'a' }; static const symbol s_6_6[3] = { 'a', 'r', 'a' }; static const symbol s_6_7[3] = { 'e', 'r', 'a' }; static const symbol s_6_8[3] = { 'i', 'r', 'a' }; static const symbol s_6_9[3] = { 'a', 'v', 'a' }; static const symbol s_6_10[4] = { 'a', 's', 's', 'e' }; static const symbol s_6_11[4] = { 'e', 's', 's', 'e' }; static const symbol s_6_12[4] = { 'i', 's', 's', 'e' }; static const symbol s_6_13[4] = { 'a', 's', 't', 'e' }; static const symbol s_6_14[4] = { 'e', 's', 't', 'e' }; static const symbol s_6_15[4] = { 'i', 's', 't', 'e' }; static const symbol s_6_16[2] = { 'e', 'i' }; static const symbol s_6_17[4] = { 'a', 'r', 'e', 'i' }; static const symbol s_6_18[4] = { 'e', 'r', 'e', 'i' }; static const symbol s_6_19[4] = { 'i', 'r', 'e', 'i' }; static const symbol s_6_20[2] = { 'a', 'm' }; static const symbol s_6_21[3] = { 'i', 'a', 'm' }; static const symbol s_6_22[5] = { 'a', 'r', 'i', 'a', 'm' }; static const symbol s_6_23[5] = { 'e', 'r', 'i', 'a', 'm' }; static const symbol s_6_24[5] = { 'i', 'r', 'i', 'a', 'm' }; static const symbol s_6_25[4] = { 'a', 'r', 'a', 'm' }; static const symbol s_6_26[4] = { 'e', 'r', 'a', 'm' }; static const symbol s_6_27[4] = { 'i', 'r', 'a', 'm' }; static const symbol s_6_28[4] = { 'a', 'v', 'a', 'm' }; static const symbol s_6_29[2] = { 'e', 'm' }; static const symbol s_6_30[4] = { 'a', 'r', 'e', 'm' }; static const symbol s_6_31[4] = { 'e', 'r', 'e', 'm' }; static const symbol s_6_32[4] = { 'i', 'r', 'e', 'm' }; static const symbol s_6_33[5] = { 'a', 's', 's', 'e', 'm' }; static const symbol s_6_34[5] = { 'e', 's', 's', 'e', 'm' }; static const symbol s_6_35[5] = { 'i', 's', 's', 'e', 'm' }; static const symbol s_6_36[3] = { 'a', 'd', 'o' }; static const symbol s_6_37[3] = { 'i', 'd', 'o' }; static const symbol s_6_38[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_6_39[4] = { 'e', 'n', 'd', 'o' }; static const symbol s_6_40[4] = { 'i', 'n', 'd', 'o' }; static const symbol s_6_41[5] = { 'a', 'r', 'a', '~', 'o' }; static const symbol s_6_42[5] = { 'e', 'r', 'a', '~', 'o' }; static const symbol s_6_43[5] = { 'i', 'r', 'a', '~', 'o' }; static const symbol s_6_44[2] = { 'a', 'r' }; static const symbol s_6_45[2] = { 'e', 'r' }; static const symbol s_6_46[2] = { 'i', 'r' }; static const symbol s_6_47[2] = { 'a', 's' }; static const symbol s_6_48[4] = { 'a', 'd', 'a', 's' }; static const symbol s_6_49[4] = { 'i', 'd', 'a', 's' }; static const symbol s_6_50[3] = { 'i', 'a', 's' }; static const symbol s_6_51[5] = { 'a', 'r', 'i', 'a', 's' }; static const symbol s_6_52[5] = { 'e', 'r', 'i', 'a', 's' }; static const symbol s_6_53[5] = { 'i', 'r', 'i', 'a', 's' }; static const symbol s_6_54[4] = { 'a', 'r', 'a', 's' }; static const symbol s_6_55[4] = { 'e', 'r', 'a', 's' }; static const symbol s_6_56[4] = { 'i', 'r', 'a', 's' }; static const symbol s_6_57[4] = { 'a', 'v', 'a', 's' }; static const symbol s_6_58[2] = { 'e', 's' }; static const symbol s_6_59[5] = { 'a', 'r', 'd', 'e', 's' }; static const symbol s_6_60[5] = { 'e', 'r', 'd', 'e', 's' }; static const symbol s_6_61[5] = { 'i', 'r', 'd', 'e', 's' }; static const symbol s_6_62[4] = { 'a', 'r', 'e', 's' }; static const symbol s_6_63[4] = { 'e', 'r', 'e', 's' }; static const symbol s_6_64[4] = { 'i', 'r', 'e', 's' }; static const symbol s_6_65[5] = { 'a', 's', 's', 'e', 's' }; static const symbol s_6_66[5] = { 'e', 's', 's', 'e', 's' }; static const symbol s_6_67[5] = { 'i', 's', 's', 'e', 's' }; static const symbol s_6_68[5] = { 'a', 's', 't', 'e', 's' }; static const symbol s_6_69[5] = { 'e', 's', 't', 'e', 's' }; static const symbol s_6_70[5] = { 'i', 's', 't', 'e', 's' }; static const symbol s_6_71[2] = { 'i', 's' }; static const symbol s_6_72[3] = { 'a', 'i', 's' }; static const symbol s_6_73[3] = { 'e', 'i', 's' }; static const symbol s_6_74[5] = { 'a', 'r', 'e', 'i', 's' }; static const symbol s_6_75[5] = { 'e', 'r', 'e', 'i', 's' }; static const symbol s_6_76[5] = { 'i', 'r', 'e', 'i', 's' }; static const symbol s_6_77[6] = { 0xC3, 0xA1, 'r', 'e', 'i', 's' }; static const symbol s_6_78[6] = { 0xC3, 0xA9, 'r', 'e', 'i', 's' }; static const symbol s_6_79[6] = { 0xC3, 0xAD, 'r', 'e', 'i', 's' }; static const symbol s_6_80[7] = { 0xC3, 0xA1, 's', 's', 'e', 'i', 's' }; static const symbol s_6_81[7] = { 0xC3, 0xA9, 's', 's', 'e', 'i', 's' }; static const symbol s_6_82[7] = { 0xC3, 0xAD, 's', 's', 'e', 'i', 's' }; static const symbol s_6_83[6] = { 0xC3, 0xA1, 'v', 'e', 'i', 's' }; static const symbol s_6_84[5] = { 0xC3, 0xAD, 'e', 'i', 's' }; static const symbol s_6_85[7] = { 'a', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; static const symbol s_6_86[7] = { 'e', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; static const symbol s_6_87[7] = { 'i', 'r', 0xC3, 0xAD, 'e', 'i', 's' }; static const symbol s_6_88[4] = { 'a', 'd', 'o', 's' }; static const symbol s_6_89[4] = { 'i', 'd', 'o', 's' }; static const symbol s_6_90[4] = { 'a', 'm', 'o', 's' }; static const symbol s_6_91[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; static const symbol s_6_92[7] = { 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; static const symbol s_6_93[7] = { 0xC3, 0xAD, 'r', 'a', 'm', 'o', 's' }; static const symbol s_6_94[7] = { 0xC3, 0xA1, 'v', 'a', 'm', 'o', 's' }; static const symbol s_6_95[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_6_96[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_6_97[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_6_98[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_6_99[4] = { 'e', 'm', 'o', 's' }; static const symbol s_6_100[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; static const symbol s_6_101[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; static const symbol s_6_102[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; static const symbol s_6_103[8] = { 0xC3, 0xA1, 's', 's', 'e', 'm', 'o', 's' }; static const symbol s_6_104[8] = { 0xC3, 0xAA, 's', 's', 'e', 'm', 'o', 's' }; static const symbol s_6_105[8] = { 0xC3, 0xAD, 's', 's', 'e', 'm', 'o', 's' }; static const symbol s_6_106[4] = { 'i', 'm', 'o', 's' }; static const symbol s_6_107[5] = { 'a', 'r', 'm', 'o', 's' }; static const symbol s_6_108[5] = { 'e', 'r', 'm', 'o', 's' }; static const symbol s_6_109[5] = { 'i', 'r', 'm', 'o', 's' }; static const symbol s_6_110[5] = { 0xC3, 0xA1, 'm', 'o', 's' }; static const symbol s_6_111[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; static const symbol s_6_112[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; static const symbol s_6_113[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; static const symbol s_6_114[2] = { 'e', 'u' }; static const symbol s_6_115[2] = { 'i', 'u' }; static const symbol s_6_116[2] = { 'o', 'u' }; static const symbol s_6_117[4] = { 'a', 'r', 0xC3, 0xA1 }; static const symbol s_6_118[4] = { 'e', 'r', 0xC3, 0xA1 }; static const symbol s_6_119[4] = { 'i', 'r', 0xC3, 0xA1 }; static const struct among a_6[120] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 3, s_6_1, -1, 1, 0}, /* 2 */ { 2, s_6_2, -1, 1, 0}, /* 3 */ { 4, s_6_3, 2, 1, 0}, /* 4 */ { 4, s_6_4, 2, 1, 0}, /* 5 */ { 4, s_6_5, 2, 1, 0}, /* 6 */ { 3, s_6_6, -1, 1, 0}, /* 7 */ { 3, s_6_7, -1, 1, 0}, /* 8 */ { 3, s_6_8, -1, 1, 0}, /* 9 */ { 3, s_6_9, -1, 1, 0}, /* 10 */ { 4, s_6_10, -1, 1, 0}, /* 11 */ { 4, s_6_11, -1, 1, 0}, /* 12 */ { 4, s_6_12, -1, 1, 0}, /* 13 */ { 4, s_6_13, -1, 1, 0}, /* 14 */ { 4, s_6_14, -1, 1, 0}, /* 15 */ { 4, s_6_15, -1, 1, 0}, /* 16 */ { 2, s_6_16, -1, 1, 0}, /* 17 */ { 4, s_6_17, 16, 1, 0}, /* 18 */ { 4, s_6_18, 16, 1, 0}, /* 19 */ { 4, s_6_19, 16, 1, 0}, /* 20 */ { 2, s_6_20, -1, 1, 0}, /* 21 */ { 3, s_6_21, 20, 1, 0}, /* 22 */ { 5, s_6_22, 21, 1, 0}, /* 23 */ { 5, s_6_23, 21, 1, 0}, /* 24 */ { 5, s_6_24, 21, 1, 0}, /* 25 */ { 4, s_6_25, 20, 1, 0}, /* 26 */ { 4, s_6_26, 20, 1, 0}, /* 27 */ { 4, s_6_27, 20, 1, 0}, /* 28 */ { 4, s_6_28, 20, 1, 0}, /* 29 */ { 2, s_6_29, -1, 1, 0}, /* 30 */ { 4, s_6_30, 29, 1, 0}, /* 31 */ { 4, s_6_31, 29, 1, 0}, /* 32 */ { 4, s_6_32, 29, 1, 0}, /* 33 */ { 5, s_6_33, 29, 1, 0}, /* 34 */ { 5, s_6_34, 29, 1, 0}, /* 35 */ { 5, s_6_35, 29, 1, 0}, /* 36 */ { 3, s_6_36, -1, 1, 0}, /* 37 */ { 3, s_6_37, -1, 1, 0}, /* 38 */ { 4, s_6_38, -1, 1, 0}, /* 39 */ { 4, s_6_39, -1, 1, 0}, /* 40 */ { 4, s_6_40, -1, 1, 0}, /* 41 */ { 5, s_6_41, -1, 1, 0}, /* 42 */ { 5, s_6_42, -1, 1, 0}, /* 43 */ { 5, s_6_43, -1, 1, 0}, /* 44 */ { 2, s_6_44, -1, 1, 0}, /* 45 */ { 2, s_6_45, -1, 1, 0}, /* 46 */ { 2, s_6_46, -1, 1, 0}, /* 47 */ { 2, s_6_47, -1, 1, 0}, /* 48 */ { 4, s_6_48, 47, 1, 0}, /* 49 */ { 4, s_6_49, 47, 1, 0}, /* 50 */ { 3, s_6_50, 47, 1, 0}, /* 51 */ { 5, s_6_51, 50, 1, 0}, /* 52 */ { 5, s_6_52, 50, 1, 0}, /* 53 */ { 5, s_6_53, 50, 1, 0}, /* 54 */ { 4, s_6_54, 47, 1, 0}, /* 55 */ { 4, s_6_55, 47, 1, 0}, /* 56 */ { 4, s_6_56, 47, 1, 0}, /* 57 */ { 4, s_6_57, 47, 1, 0}, /* 58 */ { 2, s_6_58, -1, 1, 0}, /* 59 */ { 5, s_6_59, 58, 1, 0}, /* 60 */ { 5, s_6_60, 58, 1, 0}, /* 61 */ { 5, s_6_61, 58, 1, 0}, /* 62 */ { 4, s_6_62, 58, 1, 0}, /* 63 */ { 4, s_6_63, 58, 1, 0}, /* 64 */ { 4, s_6_64, 58, 1, 0}, /* 65 */ { 5, s_6_65, 58, 1, 0}, /* 66 */ { 5, s_6_66, 58, 1, 0}, /* 67 */ { 5, s_6_67, 58, 1, 0}, /* 68 */ { 5, s_6_68, 58, 1, 0}, /* 69 */ { 5, s_6_69, 58, 1, 0}, /* 70 */ { 5, s_6_70, 58, 1, 0}, /* 71 */ { 2, s_6_71, -1, 1, 0}, /* 72 */ { 3, s_6_72, 71, 1, 0}, /* 73 */ { 3, s_6_73, 71, 1, 0}, /* 74 */ { 5, s_6_74, 73, 1, 0}, /* 75 */ { 5, s_6_75, 73, 1, 0}, /* 76 */ { 5, s_6_76, 73, 1, 0}, /* 77 */ { 6, s_6_77, 73, 1, 0}, /* 78 */ { 6, s_6_78, 73, 1, 0}, /* 79 */ { 6, s_6_79, 73, 1, 0}, /* 80 */ { 7, s_6_80, 73, 1, 0}, /* 81 */ { 7, s_6_81, 73, 1, 0}, /* 82 */ { 7, s_6_82, 73, 1, 0}, /* 83 */ { 6, s_6_83, 73, 1, 0}, /* 84 */ { 5, s_6_84, 73, 1, 0}, /* 85 */ { 7, s_6_85, 84, 1, 0}, /* 86 */ { 7, s_6_86, 84, 1, 0}, /* 87 */ { 7, s_6_87, 84, 1, 0}, /* 88 */ { 4, s_6_88, -1, 1, 0}, /* 89 */ { 4, s_6_89, -1, 1, 0}, /* 90 */ { 4, s_6_90, -1, 1, 0}, /* 91 */ { 7, s_6_91, 90, 1, 0}, /* 92 */ { 7, s_6_92, 90, 1, 0}, /* 93 */ { 7, s_6_93, 90, 1, 0}, /* 94 */ { 7, s_6_94, 90, 1, 0}, /* 95 */ { 6, s_6_95, 90, 1, 0}, /* 96 */ { 8, s_6_96, 95, 1, 0}, /* 97 */ { 8, s_6_97, 95, 1, 0}, /* 98 */ { 8, s_6_98, 95, 1, 0}, /* 99 */ { 4, s_6_99, -1, 1, 0}, /*100 */ { 6, s_6_100, 99, 1, 0}, /*101 */ { 6, s_6_101, 99, 1, 0}, /*102 */ { 6, s_6_102, 99, 1, 0}, /*103 */ { 8, s_6_103, 99, 1, 0}, /*104 */ { 8, s_6_104, 99, 1, 0}, /*105 */ { 8, s_6_105, 99, 1, 0}, /*106 */ { 4, s_6_106, -1, 1, 0}, /*107 */ { 5, s_6_107, -1, 1, 0}, /*108 */ { 5, s_6_108, -1, 1, 0}, /*109 */ { 5, s_6_109, -1, 1, 0}, /*110 */ { 5, s_6_110, -1, 1, 0}, /*111 */ { 5, s_6_111, -1, 1, 0}, /*112 */ { 5, s_6_112, -1, 1, 0}, /*113 */ { 5, s_6_113, -1, 1, 0}, /*114 */ { 2, s_6_114, -1, 1, 0}, /*115 */ { 2, s_6_115, -1, 1, 0}, /*116 */ { 2, s_6_116, -1, 1, 0}, /*117 */ { 4, s_6_117, -1, 1, 0}, /*118 */ { 4, s_6_118, -1, 1, 0}, /*119 */ { 4, s_6_119, -1, 1, 0} }; static const symbol s_7_0[1] = { 'a' }; static const symbol s_7_1[1] = { 'i' }; static const symbol s_7_2[1] = { 'o' }; static const symbol s_7_3[2] = { 'o', 's' }; static const symbol s_7_4[2] = { 0xC3, 0xA1 }; static const symbol s_7_5[2] = { 0xC3, 0xAD }; static const symbol s_7_6[2] = { 0xC3, 0xB3 }; static const struct among a_7[7] = { /* 0 */ { 1, s_7_0, -1, 1, 0}, /* 1 */ { 1, s_7_1, -1, 1, 0}, /* 2 */ { 1, s_7_2, -1, 1, 0}, /* 3 */ { 2, s_7_3, -1, 1, 0}, /* 4 */ { 2, s_7_4, -1, 1, 0}, /* 5 */ { 2, s_7_5, -1, 1, 0}, /* 6 */ { 2, s_7_6, -1, 1, 0} }; static const symbol s_8_0[1] = { 'e' }; static const symbol s_8_1[2] = { 0xC3, 0xA7 }; static const symbol s_8_2[2] = { 0xC3, 0xA9 }; static const symbol s_8_3[2] = { 0xC3, 0xAA }; static const struct among a_8[4] = { /* 0 */ { 1, s_8_0, -1, 1, 0}, /* 1 */ { 2, s_8_1, -1, 2, 0}, /* 2 */ { 2, s_8_2, -1, 1, 0}, /* 3 */ { 2, s_8_3, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 19, 12, 2 }; static const symbol s_0[] = { 'a', '~' }; static const symbol s_1[] = { 'o', '~' }; static const symbol s_2[] = { 0xC3, 0xA3 }; static const symbol s_3[] = { 0xC3, 0xB5 }; static const symbol s_4[] = { 'l', 'o', 'g' }; static const symbol s_5[] = { 'u' }; static const symbol s_6[] = { 'e', 'n', 't', 'e' }; static const symbol s_7[] = { 'a', 't' }; static const symbol s_8[] = { 'a', 't' }; static const symbol s_9[] = { 'i', 'r' }; static const symbol s_10[] = { 'c' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 36 */ int c1 = z->c; z->bra = z->c; /* [, line 37 */ if (z->c + 1 >= z->l || (z->p[z->c + 1] != 163 && z->p[z->c + 1] != 181)) among_var = 3; else /* substring, line 37 */ among_var = find_among(z, a_0, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 37 */ switch (among_var) { /* among, line 37 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 2, s_0); /* <-, line 38 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_1); /* <-, line 39 */ if (ret < 0) return ret; } break; case 3: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 40 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 46 */ z->I[1] = z->l; /* $p1 = , line 47 */ z->I[2] = z->l; /* $p2 = , line 48 */ { int c1 = z->c; /* do, line 50 */ { int c2 = z->c; /* or, line 52 */ if (in_grouping_U(z, g_v, 97, 250, 0)) goto lab2; /* grouping v, line 51 */ { int c3 = z->c; /* or, line 51 */ if (out_grouping_U(z, g_v, 97, 250, 0)) goto lab4; /* non v, line 51 */ { /* gopast */ /* grouping v, line 51 */ int ret = out_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping_U(z, g_v, 97, 250, 0)) goto lab2; /* grouping v, line 51 */ { /* gopast */ /* non v, line 51 */ int ret = in_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping_U(z, g_v, 97, 250, 0)) goto lab0; /* non v, line 53 */ { int c4 = z->c; /* or, line 53 */ if (out_grouping_U(z, g_v, 97, 250, 0)) goto lab6; /* non v, line 53 */ { /* gopast */ /* grouping v, line 53 */ int ret = out_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping_U(z, g_v, 97, 250, 0)) goto lab0; /* grouping v, line 53 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 53 */ } } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 54 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 56 */ { /* gopast */ /* grouping v, line 57 */ int ret = out_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 57 */ int ret = in_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 57 */ { /* gopast */ /* grouping v, line 58 */ int ret = out_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 58 */ int ret = in_grouping_U(z, g_v, 97, 250, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 58 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 62 */ int c1 = z->c; z->bra = z->c; /* [, line 63 */ if (z->c + 1 >= z->l || z->p[z->c + 1] != 126) among_var = 3; else /* substring, line 63 */ among_var = find_among(z, a_1, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 63 */ switch (among_var) { /* among, line 63 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 2, s_2); /* <-, line 64 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_3); /* <-, line 65 */ if (ret < 0) return ret; } break; case 3: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 66 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 72 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 73 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 74 */ return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 77 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((823330 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 77 */ among_var = find_among_b(z, a_5, 45); if (!(among_var)) return 0; z->bra = z->c; /* ], line 77 */ switch (among_var) { /* among, line 77 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 93 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 93 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 98 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_4); /* <-, line 98 */ if (ret < 0) return ret; } break; case 3: { int ret = r_R2(z); /* call R2, line 102 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_5); /* <-, line 102 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 106 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 4, s_6); /* <-, line 106 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R1(z); /* call R1, line 110 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 110 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 111 */ z->ket = z->c; /* [, line 112 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m1; goto lab0; } /* substring, line 112 */ among_var = find_among_b(z, a_2, 4); if (!(among_var)) { z->c = z->l - m1; goto lab0; } z->bra = z->c; /* ], line 112 */ { int ret = r_R2(z); /* call R2, line 112 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 112 */ if (ret < 0) return ret; } switch (among_var) { /* among, line 112 */ case 0: { z->c = z->l - m1; goto lab0; } case 1: z->ket = z->c; /* [, line 113 */ if (!(eq_s_b(z, 2, s_7))) { z->c = z->l - m1; goto lab0; } /* literal, line 113 */ z->bra = z->c; /* ], line 113 */ { int ret = r_R2(z); /* call R2, line 113 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 113 */ if (ret < 0) return ret; } break; } lab0: ; } break; case 6: { int ret = r_R2(z); /* call R2, line 122 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 123 */ z->ket = z->c; /* [, line 124 */ if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 101 && z->p[z->c - 1] != 108)) { z->c = z->l - m2; goto lab1; } /* substring, line 124 */ among_var = find_among_b(z, a_3, 3); if (!(among_var)) { z->c = z->l - m2; goto lab1; } z->bra = z->c; /* ], line 124 */ switch (among_var) { /* among, line 124 */ case 0: { z->c = z->l - m2; goto lab1; } case 1: { int ret = r_R2(z); /* call R2, line 127 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 127 */ if (ret < 0) return ret; } break; } lab1: ; } break; case 7: { int ret = r_R2(z); /* call R2, line 134 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 134 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 135 */ z->ket = z->c; /* [, line 136 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m3; goto lab2; } /* substring, line 136 */ among_var = find_among_b(z, a_4, 3); if (!(among_var)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; /* ], line 136 */ switch (among_var) { /* among, line 136 */ case 0: { z->c = z->l - m3; goto lab2; } case 1: { int ret = r_R2(z); /* call R2, line 139 */ if (ret == 0) { z->c = z->l - m3; goto lab2; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 139 */ if (ret < 0) return ret; } break; } lab2: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 146 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 146 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 147 */ z->ket = z->c; /* [, line 148 */ if (!(eq_s_b(z, 2, s_8))) { z->c = z->l - m4; goto lab3; } /* literal, line 148 */ z->bra = z->c; /* ], line 148 */ { int ret = r_R2(z); /* call R2, line 148 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 148 */ if (ret < 0) return ret; } lab3: ; } break; case 9: { int ret = r_RV(z); /* call RV, line 153 */ if (ret <= 0) return ret; } if (z->c <= z->lb || z->p[z->c - 1] != 'e') return 0; /* literal, line 153 */ z->c--; { int ret = slice_from_s(z, 2, s_9); /* <-, line 154 */ if (ret < 0) return ret; } break; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 159 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 159 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 160 */ among_var = find_among_b(z, a_6, 120); /* substring, line 160 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 160 */ switch (among_var) { /* among, line 160 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_residual_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 184 */ among_var = find_among_b(z, a_7, 7); /* substring, line 184 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 184 */ switch (among_var) { /* among, line 184 */ case 0: return 0; case 1: { int ret = r_RV(z); /* call RV, line 187 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 187 */ if (ret < 0) return ret; } break; } return 1; } static int r_residual_form(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 192 */ among_var = find_among_b(z, a_8, 4); /* substring, line 192 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 192 */ switch (among_var) { /* among, line 192 */ case 0: return 0; case 1: { int ret = r_RV(z); /* call RV, line 194 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 194 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 194 */ { int m1 = z->l - z->c; (void)m1; /* or, line 194 */ if (z->c <= z->lb || z->p[z->c - 1] != 'u') goto lab1; /* literal, line 194 */ z->c--; z->bra = z->c; /* ], line 194 */ { int m_test2 = z->l - z->c; /* test, line 194 */ if (z->c <= z->lb || z->p[z->c - 1] != 'g') goto lab1; /* literal, line 194 */ z->c--; z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; if (z->c <= z->lb || z->p[z->c - 1] != 'i') return 0; /* literal, line 195 */ z->c--; z->bra = z->c; /* ], line 195 */ { int m_test3 = z->l - z->c; /* test, line 195 */ if (z->c <= z->lb || z->p[z->c - 1] != 'c') return 0; /* literal, line 195 */ z->c--; z->c = z->l - m_test3; } } lab0: { int ret = r_RV(z); /* call RV, line 195 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 195 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_10); /* <-, line 196 */ if (ret < 0) return ret; } break; } return 1; } extern int portuguese_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 202 */ { int ret = r_prelude(z); /* call prelude, line 202 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 203 */ { int ret = r_mark_regions(z); /* call mark_regions, line 203 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 204 */ { int m3 = z->l - z->c; (void)m3; /* do, line 205 */ { int m4 = z->l - z->c; (void)m4; /* or, line 209 */ { int m5 = z->l - z->c; (void)m5; /* and, line 207 */ { int m6 = z->l - z->c; (void)m6; /* or, line 206 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 206 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_verb_suffix(z); /* call verb_suffix, line 206 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: z->c = z->l - m5; { int m7 = z->l - z->c; (void)m7; /* do, line 207 */ z->ket = z->c; /* [, line 207 */ if (z->c <= z->lb || z->p[z->c - 1] != 'i') goto lab7; /* literal, line 207 */ z->c--; z->bra = z->c; /* ], line 207 */ { int m_test8 = z->l - z->c; /* test, line 207 */ if (z->c <= z->lb || z->p[z->c - 1] != 'c') goto lab7; /* literal, line 207 */ z->c--; z->c = z->l - m_test8; } { int ret = r_RV(z); /* call RV, line 207 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 207 */ if (ret < 0) return ret; } lab7: z->c = z->l - m7; } } goto lab3; lab4: z->c = z->l - m4; { int ret = r_residual_suffix(z); /* call residual_suffix, line 209 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } { int m9 = z->l - z->c; (void)m9; /* do, line 211 */ { int ret = r_residual_form(z); /* call residual_form, line 211 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = z->l - m9; } z->c = z->lb; { int c10 = z->c; /* do, line 213 */ { int ret = r_postlude(z); /* call postlude, line 213 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = c10; } return 1; } extern struct SN_env * portuguese_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } extern void portuguese_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_portuguese.h000066400000000000000000000005371364126773500243710ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * portuguese_UTF_8_create_env(void); extern void portuguese_UTF_8_close_env(struct SN_env * z); extern int portuguese_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_romanian.c000066400000000000000000001135421364126773500237670ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int romanian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_vowel_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_combo_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_step_0(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_prelude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * romanian_UTF_8_create_env(void); extern void romanian_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[1] = { 'I' }; static const symbol s_0_2[1] = { 'U' }; static const struct among a_0[3] = { /* 0 */ { 0, 0, -1, 3, 0}, /* 1 */ { 1, s_0_1, 0, 1, 0}, /* 2 */ { 1, s_0_2, 0, 2, 0} }; static const symbol s_1_0[2] = { 'e', 'a' }; static const symbol s_1_1[5] = { 'a', 0xC5, 0xA3, 'i', 'a' }; static const symbol s_1_2[3] = { 'a', 'u', 'a' }; static const symbol s_1_3[3] = { 'i', 'u', 'a' }; static const symbol s_1_4[5] = { 'a', 0xC5, 0xA3, 'i', 'e' }; static const symbol s_1_5[3] = { 'e', 'l', 'e' }; static const symbol s_1_6[3] = { 'i', 'l', 'e' }; static const symbol s_1_7[4] = { 'i', 'i', 'l', 'e' }; static const symbol s_1_8[3] = { 'i', 'e', 'i' }; static const symbol s_1_9[4] = { 'a', 't', 'e', 'i' }; static const symbol s_1_10[2] = { 'i', 'i' }; static const symbol s_1_11[4] = { 'u', 'l', 'u', 'i' }; static const symbol s_1_12[2] = { 'u', 'l' }; static const symbol s_1_13[4] = { 'e', 'l', 'o', 'r' }; static const symbol s_1_14[4] = { 'i', 'l', 'o', 'r' }; static const symbol s_1_15[5] = { 'i', 'i', 'l', 'o', 'r' }; static const struct among a_1[16] = { /* 0 */ { 2, s_1_0, -1, 3, 0}, /* 1 */ { 5, s_1_1, -1, 7, 0}, /* 2 */ { 3, s_1_2, -1, 2, 0}, /* 3 */ { 3, s_1_3, -1, 4, 0}, /* 4 */ { 5, s_1_4, -1, 7, 0}, /* 5 */ { 3, s_1_5, -1, 3, 0}, /* 6 */ { 3, s_1_6, -1, 5, 0}, /* 7 */ { 4, s_1_7, 6, 4, 0}, /* 8 */ { 3, s_1_8, -1, 4, 0}, /* 9 */ { 4, s_1_9, -1, 6, 0}, /* 10 */ { 2, s_1_10, -1, 4, 0}, /* 11 */ { 4, s_1_11, -1, 1, 0}, /* 12 */ { 2, s_1_12, -1, 1, 0}, /* 13 */ { 4, s_1_13, -1, 3, 0}, /* 14 */ { 4, s_1_14, -1, 4, 0}, /* 15 */ { 5, s_1_15, 14, 4, 0} }; static const symbol s_2_0[5] = { 'i', 'c', 'a', 'l', 'a' }; static const symbol s_2_1[5] = { 'i', 'c', 'i', 'v', 'a' }; static const symbol s_2_2[5] = { 'a', 't', 'i', 'v', 'a' }; static const symbol s_2_3[5] = { 'i', 't', 'i', 'v', 'a' }; static const symbol s_2_4[5] = { 'i', 'c', 'a', 'l', 'e' }; static const symbol s_2_5[7] = { 'a', 0xC5, 0xA3, 'i', 'u', 'n', 'e' }; static const symbol s_2_6[7] = { 'i', 0xC5, 0xA3, 'i', 'u', 'n', 'e' }; static const symbol s_2_7[6] = { 'a', 't', 'o', 'a', 'r', 'e' }; static const symbol s_2_8[6] = { 'i', 't', 'o', 'a', 'r', 'e' }; static const symbol s_2_9[7] = { 0xC4, 0x83, 't', 'o', 'a', 'r', 'e' }; static const symbol s_2_10[7] = { 'i', 'c', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_11[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_12[9] = { 'i', 'b', 'i', 'l', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_13[7] = { 'i', 'v', 'i', 't', 'a', 't', 'e' }; static const symbol s_2_14[5] = { 'i', 'c', 'i', 'v', 'e' }; static const symbol s_2_15[5] = { 'a', 't', 'i', 'v', 'e' }; static const symbol s_2_16[5] = { 'i', 't', 'i', 'v', 'e' }; static const symbol s_2_17[5] = { 'i', 'c', 'a', 'l', 'i' }; static const symbol s_2_18[5] = { 'a', 't', 'o', 'r', 'i' }; static const symbol s_2_19[7] = { 'i', 'c', 'a', 't', 'o', 'r', 'i' }; static const symbol s_2_20[5] = { 'i', 't', 'o', 'r', 'i' }; static const symbol s_2_21[6] = { 0xC4, 0x83, 't', 'o', 'r', 'i' }; static const symbol s_2_22[7] = { 'i', 'c', 'i', 't', 'a', 't', 'i' }; static const symbol s_2_23[9] = { 'a', 'b', 'i', 'l', 'i', 't', 'a', 't', 'i' }; static const symbol s_2_24[7] = { 'i', 'v', 'i', 't', 'a', 't', 'i' }; static const symbol s_2_25[5] = { 'i', 'c', 'i', 'v', 'i' }; static const symbol s_2_26[5] = { 'a', 't', 'i', 'v', 'i' }; static const symbol s_2_27[5] = { 'i', 't', 'i', 'v', 'i' }; static const symbol s_2_28[7] = { 'i', 'c', 'i', 't', 0xC4, 0x83, 'i' }; static const symbol s_2_29[9] = { 'a', 'b', 'i', 'l', 'i', 't', 0xC4, 0x83, 'i' }; static const symbol s_2_30[7] = { 'i', 'v', 'i', 't', 0xC4, 0x83, 'i' }; static const symbol s_2_31[9] = { 'i', 'c', 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_2_32[11] = { 'a', 'b', 'i', 'l', 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_2_33[9] = { 'i', 'v', 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_2_34[4] = { 'i', 'c', 'a', 'l' }; static const symbol s_2_35[4] = { 'a', 't', 'o', 'r' }; static const symbol s_2_36[6] = { 'i', 'c', 'a', 't', 'o', 'r' }; static const symbol s_2_37[4] = { 'i', 't', 'o', 'r' }; static const symbol s_2_38[5] = { 0xC4, 0x83, 't', 'o', 'r' }; static const symbol s_2_39[4] = { 'i', 'c', 'i', 'v' }; static const symbol s_2_40[4] = { 'a', 't', 'i', 'v' }; static const symbol s_2_41[4] = { 'i', 't', 'i', 'v' }; static const symbol s_2_42[6] = { 'i', 'c', 'a', 'l', 0xC4, 0x83 }; static const symbol s_2_43[6] = { 'i', 'c', 'i', 'v', 0xC4, 0x83 }; static const symbol s_2_44[6] = { 'a', 't', 'i', 'v', 0xC4, 0x83 }; static const symbol s_2_45[6] = { 'i', 't', 'i', 'v', 0xC4, 0x83 }; static const struct among a_2[46] = { /* 0 */ { 5, s_2_0, -1, 4, 0}, /* 1 */ { 5, s_2_1, -1, 4, 0}, /* 2 */ { 5, s_2_2, -1, 5, 0}, /* 3 */ { 5, s_2_3, -1, 6, 0}, /* 4 */ { 5, s_2_4, -1, 4, 0}, /* 5 */ { 7, s_2_5, -1, 5, 0}, /* 6 */ { 7, s_2_6, -1, 6, 0}, /* 7 */ { 6, s_2_7, -1, 5, 0}, /* 8 */ { 6, s_2_8, -1, 6, 0}, /* 9 */ { 7, s_2_9, -1, 5, 0}, /* 10 */ { 7, s_2_10, -1, 4, 0}, /* 11 */ { 9, s_2_11, -1, 1, 0}, /* 12 */ { 9, s_2_12, -1, 2, 0}, /* 13 */ { 7, s_2_13, -1, 3, 0}, /* 14 */ { 5, s_2_14, -1, 4, 0}, /* 15 */ { 5, s_2_15, -1, 5, 0}, /* 16 */ { 5, s_2_16, -1, 6, 0}, /* 17 */ { 5, s_2_17, -1, 4, 0}, /* 18 */ { 5, s_2_18, -1, 5, 0}, /* 19 */ { 7, s_2_19, 18, 4, 0}, /* 20 */ { 5, s_2_20, -1, 6, 0}, /* 21 */ { 6, s_2_21, -1, 5, 0}, /* 22 */ { 7, s_2_22, -1, 4, 0}, /* 23 */ { 9, s_2_23, -1, 1, 0}, /* 24 */ { 7, s_2_24, -1, 3, 0}, /* 25 */ { 5, s_2_25, -1, 4, 0}, /* 26 */ { 5, s_2_26, -1, 5, 0}, /* 27 */ { 5, s_2_27, -1, 6, 0}, /* 28 */ { 7, s_2_28, -1, 4, 0}, /* 29 */ { 9, s_2_29, -1, 1, 0}, /* 30 */ { 7, s_2_30, -1, 3, 0}, /* 31 */ { 9, s_2_31, -1, 4, 0}, /* 32 */ { 11, s_2_32, -1, 1, 0}, /* 33 */ { 9, s_2_33, -1, 3, 0}, /* 34 */ { 4, s_2_34, -1, 4, 0}, /* 35 */ { 4, s_2_35, -1, 5, 0}, /* 36 */ { 6, s_2_36, 35, 4, 0}, /* 37 */ { 4, s_2_37, -1, 6, 0}, /* 38 */ { 5, s_2_38, -1, 5, 0}, /* 39 */ { 4, s_2_39, -1, 4, 0}, /* 40 */ { 4, s_2_40, -1, 5, 0}, /* 41 */ { 4, s_2_41, -1, 6, 0}, /* 42 */ { 6, s_2_42, -1, 4, 0}, /* 43 */ { 6, s_2_43, -1, 4, 0}, /* 44 */ { 6, s_2_44, -1, 5, 0}, /* 45 */ { 6, s_2_45, -1, 6, 0} }; static const symbol s_3_0[3] = { 'i', 'c', 'a' }; static const symbol s_3_1[5] = { 'a', 'b', 'i', 'l', 'a' }; static const symbol s_3_2[5] = { 'i', 'b', 'i', 'l', 'a' }; static const symbol s_3_3[4] = { 'o', 'a', 's', 'a' }; static const symbol s_3_4[3] = { 'a', 't', 'a' }; static const symbol s_3_5[3] = { 'i', 't', 'a' }; static const symbol s_3_6[4] = { 'a', 'n', 't', 'a' }; static const symbol s_3_7[4] = { 'i', 's', 't', 'a' }; static const symbol s_3_8[3] = { 'u', 't', 'a' }; static const symbol s_3_9[3] = { 'i', 'v', 'a' }; static const symbol s_3_10[2] = { 'i', 'c' }; static const symbol s_3_11[3] = { 'i', 'c', 'e' }; static const symbol s_3_12[5] = { 'a', 'b', 'i', 'l', 'e' }; static const symbol s_3_13[5] = { 'i', 'b', 'i', 'l', 'e' }; static const symbol s_3_14[4] = { 'i', 's', 'm', 'e' }; static const symbol s_3_15[4] = { 'i', 'u', 'n', 'e' }; static const symbol s_3_16[4] = { 'o', 'a', 's', 'e' }; static const symbol s_3_17[3] = { 'a', 't', 'e' }; static const symbol s_3_18[5] = { 'i', 't', 'a', 't', 'e' }; static const symbol s_3_19[3] = { 'i', 't', 'e' }; static const symbol s_3_20[4] = { 'a', 'n', 't', 'e' }; static const symbol s_3_21[4] = { 'i', 's', 't', 'e' }; static const symbol s_3_22[3] = { 'u', 't', 'e' }; static const symbol s_3_23[3] = { 'i', 'v', 'e' }; static const symbol s_3_24[3] = { 'i', 'c', 'i' }; static const symbol s_3_25[5] = { 'a', 'b', 'i', 'l', 'i' }; static const symbol s_3_26[5] = { 'i', 'b', 'i', 'l', 'i' }; static const symbol s_3_27[4] = { 'i', 'u', 'n', 'i' }; static const symbol s_3_28[5] = { 'a', 't', 'o', 'r', 'i' }; static const symbol s_3_29[3] = { 'o', 's', 'i' }; static const symbol s_3_30[3] = { 'a', 't', 'i' }; static const symbol s_3_31[5] = { 'i', 't', 'a', 't', 'i' }; static const symbol s_3_32[3] = { 'i', 't', 'i' }; static const symbol s_3_33[4] = { 'a', 'n', 't', 'i' }; static const symbol s_3_34[4] = { 'i', 's', 't', 'i' }; static const symbol s_3_35[3] = { 'u', 't', 'i' }; static const symbol s_3_36[5] = { 'i', 0xC5, 0x9F, 't', 'i' }; static const symbol s_3_37[3] = { 'i', 'v', 'i' }; static const symbol s_3_38[5] = { 'i', 't', 0xC4, 0x83, 'i' }; static const symbol s_3_39[4] = { 'o', 0xC5, 0x9F, 'i' }; static const symbol s_3_40[7] = { 'i', 't', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_3_41[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_3_42[4] = { 'i', 'b', 'i', 'l' }; static const symbol s_3_43[3] = { 'i', 's', 'm' }; static const symbol s_3_44[4] = { 'a', 't', 'o', 'r' }; static const symbol s_3_45[2] = { 'o', 's' }; static const symbol s_3_46[2] = { 'a', 't' }; static const symbol s_3_47[2] = { 'i', 't' }; static const symbol s_3_48[3] = { 'a', 'n', 't' }; static const symbol s_3_49[3] = { 'i', 's', 't' }; static const symbol s_3_50[2] = { 'u', 't' }; static const symbol s_3_51[2] = { 'i', 'v' }; static const symbol s_3_52[4] = { 'i', 'c', 0xC4, 0x83 }; static const symbol s_3_53[6] = { 'a', 'b', 'i', 'l', 0xC4, 0x83 }; static const symbol s_3_54[6] = { 'i', 'b', 'i', 'l', 0xC4, 0x83 }; static const symbol s_3_55[5] = { 'o', 'a', 's', 0xC4, 0x83 }; static const symbol s_3_56[4] = { 'a', 't', 0xC4, 0x83 }; static const symbol s_3_57[4] = { 'i', 't', 0xC4, 0x83 }; static const symbol s_3_58[5] = { 'a', 'n', 't', 0xC4, 0x83 }; static const symbol s_3_59[5] = { 'i', 's', 't', 0xC4, 0x83 }; static const symbol s_3_60[4] = { 'u', 't', 0xC4, 0x83 }; static const symbol s_3_61[4] = { 'i', 'v', 0xC4, 0x83 }; static const struct among a_3[62] = { /* 0 */ { 3, s_3_0, -1, 1, 0}, /* 1 */ { 5, s_3_1, -1, 1, 0}, /* 2 */ { 5, s_3_2, -1, 1, 0}, /* 3 */ { 4, s_3_3, -1, 1, 0}, /* 4 */ { 3, s_3_4, -1, 1, 0}, /* 5 */ { 3, s_3_5, -1, 1, 0}, /* 6 */ { 4, s_3_6, -1, 1, 0}, /* 7 */ { 4, s_3_7, -1, 3, 0}, /* 8 */ { 3, s_3_8, -1, 1, 0}, /* 9 */ { 3, s_3_9, -1, 1, 0}, /* 10 */ { 2, s_3_10, -1, 1, 0}, /* 11 */ { 3, s_3_11, -1, 1, 0}, /* 12 */ { 5, s_3_12, -1, 1, 0}, /* 13 */ { 5, s_3_13, -1, 1, 0}, /* 14 */ { 4, s_3_14, -1, 3, 0}, /* 15 */ { 4, s_3_15, -1, 2, 0}, /* 16 */ { 4, s_3_16, -1, 1, 0}, /* 17 */ { 3, s_3_17, -1, 1, 0}, /* 18 */ { 5, s_3_18, 17, 1, 0}, /* 19 */ { 3, s_3_19, -1, 1, 0}, /* 20 */ { 4, s_3_20, -1, 1, 0}, /* 21 */ { 4, s_3_21, -1, 3, 0}, /* 22 */ { 3, s_3_22, -1, 1, 0}, /* 23 */ { 3, s_3_23, -1, 1, 0}, /* 24 */ { 3, s_3_24, -1, 1, 0}, /* 25 */ { 5, s_3_25, -1, 1, 0}, /* 26 */ { 5, s_3_26, -1, 1, 0}, /* 27 */ { 4, s_3_27, -1, 2, 0}, /* 28 */ { 5, s_3_28, -1, 1, 0}, /* 29 */ { 3, s_3_29, -1, 1, 0}, /* 30 */ { 3, s_3_30, -1, 1, 0}, /* 31 */ { 5, s_3_31, 30, 1, 0}, /* 32 */ { 3, s_3_32, -1, 1, 0}, /* 33 */ { 4, s_3_33, -1, 1, 0}, /* 34 */ { 4, s_3_34, -1, 3, 0}, /* 35 */ { 3, s_3_35, -1, 1, 0}, /* 36 */ { 5, s_3_36, -1, 3, 0}, /* 37 */ { 3, s_3_37, -1, 1, 0}, /* 38 */ { 5, s_3_38, -1, 1, 0}, /* 39 */ { 4, s_3_39, -1, 1, 0}, /* 40 */ { 7, s_3_40, -1, 1, 0}, /* 41 */ { 4, s_3_41, -1, 1, 0}, /* 42 */ { 4, s_3_42, -1, 1, 0}, /* 43 */ { 3, s_3_43, -1, 3, 0}, /* 44 */ { 4, s_3_44, -1, 1, 0}, /* 45 */ { 2, s_3_45, -1, 1, 0}, /* 46 */ { 2, s_3_46, -1, 1, 0}, /* 47 */ { 2, s_3_47, -1, 1, 0}, /* 48 */ { 3, s_3_48, -1, 1, 0}, /* 49 */ { 3, s_3_49, -1, 3, 0}, /* 50 */ { 2, s_3_50, -1, 1, 0}, /* 51 */ { 2, s_3_51, -1, 1, 0}, /* 52 */ { 4, s_3_52, -1, 1, 0}, /* 53 */ { 6, s_3_53, -1, 1, 0}, /* 54 */ { 6, s_3_54, -1, 1, 0}, /* 55 */ { 5, s_3_55, -1, 1, 0}, /* 56 */ { 4, s_3_56, -1, 1, 0}, /* 57 */ { 4, s_3_57, -1, 1, 0}, /* 58 */ { 5, s_3_58, -1, 1, 0}, /* 59 */ { 5, s_3_59, -1, 3, 0}, /* 60 */ { 4, s_3_60, -1, 1, 0}, /* 61 */ { 4, s_3_61, -1, 1, 0} }; static const symbol s_4_0[2] = { 'e', 'a' }; static const symbol s_4_1[2] = { 'i', 'a' }; static const symbol s_4_2[3] = { 'e', 's', 'c' }; static const symbol s_4_3[4] = { 0xC4, 0x83, 's', 'c' }; static const symbol s_4_4[3] = { 'i', 'n', 'd' }; static const symbol s_4_5[4] = { 0xC3, 0xA2, 'n', 'd' }; static const symbol s_4_6[3] = { 'a', 'r', 'e' }; static const symbol s_4_7[3] = { 'e', 'r', 'e' }; static const symbol s_4_8[3] = { 'i', 'r', 'e' }; static const symbol s_4_9[4] = { 0xC3, 0xA2, 'r', 'e' }; static const symbol s_4_10[2] = { 's', 'e' }; static const symbol s_4_11[3] = { 'a', 's', 'e' }; static const symbol s_4_12[4] = { 's', 'e', 's', 'e' }; static const symbol s_4_13[3] = { 'i', 's', 'e' }; static const symbol s_4_14[3] = { 'u', 's', 'e' }; static const symbol s_4_15[4] = { 0xC3, 0xA2, 's', 'e' }; static const symbol s_4_16[5] = { 'e', 0xC5, 0x9F, 't', 'e' }; static const symbol s_4_17[6] = { 0xC4, 0x83, 0xC5, 0x9F, 't', 'e' }; static const symbol s_4_18[3] = { 'e', 'z', 'e' }; static const symbol s_4_19[2] = { 'a', 'i' }; static const symbol s_4_20[3] = { 'e', 'a', 'i' }; static const symbol s_4_21[3] = { 'i', 'a', 'i' }; static const symbol s_4_22[3] = { 's', 'e', 'i' }; static const symbol s_4_23[5] = { 'e', 0xC5, 0x9F, 't', 'i' }; static const symbol s_4_24[6] = { 0xC4, 0x83, 0xC5, 0x9F, 't', 'i' }; static const symbol s_4_25[2] = { 'u', 'i' }; static const symbol s_4_26[3] = { 'e', 'z', 'i' }; static const symbol s_4_27[4] = { 'a', 0xC5, 0x9F, 'i' }; static const symbol s_4_28[5] = { 's', 'e', 0xC5, 0x9F, 'i' }; static const symbol s_4_29[6] = { 'a', 's', 'e', 0xC5, 0x9F, 'i' }; static const symbol s_4_30[7] = { 's', 'e', 's', 'e', 0xC5, 0x9F, 'i' }; static const symbol s_4_31[6] = { 'i', 's', 'e', 0xC5, 0x9F, 'i' }; static const symbol s_4_32[6] = { 'u', 's', 'e', 0xC5, 0x9F, 'i' }; static const symbol s_4_33[7] = { 0xC3, 0xA2, 's', 'e', 0xC5, 0x9F, 'i' }; static const symbol s_4_34[4] = { 'i', 0xC5, 0x9F, 'i' }; static const symbol s_4_35[4] = { 'u', 0xC5, 0x9F, 'i' }; static const symbol s_4_36[5] = { 0xC3, 0xA2, 0xC5, 0x9F, 'i' }; static const symbol s_4_37[3] = { 0xC3, 0xA2, 'i' }; static const symbol s_4_38[4] = { 'a', 0xC5, 0xA3, 'i' }; static const symbol s_4_39[5] = { 'e', 'a', 0xC5, 0xA3, 'i' }; static const symbol s_4_40[5] = { 'i', 'a', 0xC5, 0xA3, 'i' }; static const symbol s_4_41[4] = { 'e', 0xC5, 0xA3, 'i' }; static const symbol s_4_42[4] = { 'i', 0xC5, 0xA3, 'i' }; static const symbol s_4_43[7] = { 'a', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_44[8] = { 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_45[9] = { 'a', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_46[10] = { 's', 'e', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_47[9] = { 'i', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_48[9] = { 'u', 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_49[10] = { 0xC3, 0xA2, 's', 'e', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_50[7] = { 'i', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_51[7] = { 'u', 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_52[8] = { 0xC3, 0xA2, 'r', 0xC4, 0x83, 0xC5, 0xA3, 'i' }; static const symbol s_4_53[5] = { 0xC3, 0xA2, 0xC5, 0xA3, 'i' }; static const symbol s_4_54[2] = { 'a', 'm' }; static const symbol s_4_55[3] = { 'e', 'a', 'm' }; static const symbol s_4_56[3] = { 'i', 'a', 'm' }; static const symbol s_4_57[2] = { 'e', 'm' }; static const symbol s_4_58[4] = { 'a', 's', 'e', 'm' }; static const symbol s_4_59[5] = { 's', 'e', 's', 'e', 'm' }; static const symbol s_4_60[4] = { 'i', 's', 'e', 'm' }; static const symbol s_4_61[4] = { 'u', 's', 'e', 'm' }; static const symbol s_4_62[5] = { 0xC3, 0xA2, 's', 'e', 'm' }; static const symbol s_4_63[2] = { 'i', 'm' }; static const symbol s_4_64[3] = { 0xC4, 0x83, 'm' }; static const symbol s_4_65[5] = { 'a', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_66[6] = { 's', 'e', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_67[7] = { 'a', 's', 'e', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_68[8] = { 's', 'e', 's', 'e', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_69[7] = { 'i', 's', 'e', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_70[7] = { 'u', 's', 'e', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_71[8] = { 0xC3, 0xA2, 's', 'e', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_72[5] = { 'i', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_73[5] = { 'u', 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_74[6] = { 0xC3, 0xA2, 'r', 0xC4, 0x83, 'm' }; static const symbol s_4_75[3] = { 0xC3, 0xA2, 'm' }; static const symbol s_4_76[2] = { 'a', 'u' }; static const symbol s_4_77[3] = { 'e', 'a', 'u' }; static const symbol s_4_78[3] = { 'i', 'a', 'u' }; static const symbol s_4_79[4] = { 'i', 'n', 'd', 'u' }; static const symbol s_4_80[5] = { 0xC3, 0xA2, 'n', 'd', 'u' }; static const symbol s_4_81[2] = { 'e', 'z' }; static const symbol s_4_82[6] = { 'e', 'a', 's', 'c', 0xC4, 0x83 }; static const symbol s_4_83[4] = { 'a', 'r', 0xC4, 0x83 }; static const symbol s_4_84[5] = { 's', 'e', 'r', 0xC4, 0x83 }; static const symbol s_4_85[6] = { 'a', 's', 'e', 'r', 0xC4, 0x83 }; static const symbol s_4_86[7] = { 's', 'e', 's', 'e', 'r', 0xC4, 0x83 }; static const symbol s_4_87[6] = { 'i', 's', 'e', 'r', 0xC4, 0x83 }; static const symbol s_4_88[6] = { 'u', 's', 'e', 'r', 0xC4, 0x83 }; static const symbol s_4_89[7] = { 0xC3, 0xA2, 's', 'e', 'r', 0xC4, 0x83 }; static const symbol s_4_90[4] = { 'i', 'r', 0xC4, 0x83 }; static const symbol s_4_91[4] = { 'u', 'r', 0xC4, 0x83 }; static const symbol s_4_92[5] = { 0xC3, 0xA2, 'r', 0xC4, 0x83 }; static const symbol s_4_93[5] = { 'e', 'a', 'z', 0xC4, 0x83 }; static const struct among a_4[94] = { /* 0 */ { 2, s_4_0, -1, 1, 0}, /* 1 */ { 2, s_4_1, -1, 1, 0}, /* 2 */ { 3, s_4_2, -1, 1, 0}, /* 3 */ { 4, s_4_3, -1, 1, 0}, /* 4 */ { 3, s_4_4, -1, 1, 0}, /* 5 */ { 4, s_4_5, -1, 1, 0}, /* 6 */ { 3, s_4_6, -1, 1, 0}, /* 7 */ { 3, s_4_7, -1, 1, 0}, /* 8 */ { 3, s_4_8, -1, 1, 0}, /* 9 */ { 4, s_4_9, -1, 1, 0}, /* 10 */ { 2, s_4_10, -1, 2, 0}, /* 11 */ { 3, s_4_11, 10, 1, 0}, /* 12 */ { 4, s_4_12, 10, 2, 0}, /* 13 */ { 3, s_4_13, 10, 1, 0}, /* 14 */ { 3, s_4_14, 10, 1, 0}, /* 15 */ { 4, s_4_15, 10, 1, 0}, /* 16 */ { 5, s_4_16, -1, 1, 0}, /* 17 */ { 6, s_4_17, -1, 1, 0}, /* 18 */ { 3, s_4_18, -1, 1, 0}, /* 19 */ { 2, s_4_19, -1, 1, 0}, /* 20 */ { 3, s_4_20, 19, 1, 0}, /* 21 */ { 3, s_4_21, 19, 1, 0}, /* 22 */ { 3, s_4_22, -1, 2, 0}, /* 23 */ { 5, s_4_23, -1, 1, 0}, /* 24 */ { 6, s_4_24, -1, 1, 0}, /* 25 */ { 2, s_4_25, -1, 1, 0}, /* 26 */ { 3, s_4_26, -1, 1, 0}, /* 27 */ { 4, s_4_27, -1, 1, 0}, /* 28 */ { 5, s_4_28, -1, 2, 0}, /* 29 */ { 6, s_4_29, 28, 1, 0}, /* 30 */ { 7, s_4_30, 28, 2, 0}, /* 31 */ { 6, s_4_31, 28, 1, 0}, /* 32 */ { 6, s_4_32, 28, 1, 0}, /* 33 */ { 7, s_4_33, 28, 1, 0}, /* 34 */ { 4, s_4_34, -1, 1, 0}, /* 35 */ { 4, s_4_35, -1, 1, 0}, /* 36 */ { 5, s_4_36, -1, 1, 0}, /* 37 */ { 3, s_4_37, -1, 1, 0}, /* 38 */ { 4, s_4_38, -1, 2, 0}, /* 39 */ { 5, s_4_39, 38, 1, 0}, /* 40 */ { 5, s_4_40, 38, 1, 0}, /* 41 */ { 4, s_4_41, -1, 2, 0}, /* 42 */ { 4, s_4_42, -1, 2, 0}, /* 43 */ { 7, s_4_43, -1, 1, 0}, /* 44 */ { 8, s_4_44, -1, 2, 0}, /* 45 */ { 9, s_4_45, 44, 1, 0}, /* 46 */ { 10, s_4_46, 44, 2, 0}, /* 47 */ { 9, s_4_47, 44, 1, 0}, /* 48 */ { 9, s_4_48, 44, 1, 0}, /* 49 */ { 10, s_4_49, 44, 1, 0}, /* 50 */ { 7, s_4_50, -1, 1, 0}, /* 51 */ { 7, s_4_51, -1, 1, 0}, /* 52 */ { 8, s_4_52, -1, 1, 0}, /* 53 */ { 5, s_4_53, -1, 2, 0}, /* 54 */ { 2, s_4_54, -1, 1, 0}, /* 55 */ { 3, s_4_55, 54, 1, 0}, /* 56 */ { 3, s_4_56, 54, 1, 0}, /* 57 */ { 2, s_4_57, -1, 2, 0}, /* 58 */ { 4, s_4_58, 57, 1, 0}, /* 59 */ { 5, s_4_59, 57, 2, 0}, /* 60 */ { 4, s_4_60, 57, 1, 0}, /* 61 */ { 4, s_4_61, 57, 1, 0}, /* 62 */ { 5, s_4_62, 57, 1, 0}, /* 63 */ { 2, s_4_63, -1, 2, 0}, /* 64 */ { 3, s_4_64, -1, 2, 0}, /* 65 */ { 5, s_4_65, 64, 1, 0}, /* 66 */ { 6, s_4_66, 64, 2, 0}, /* 67 */ { 7, s_4_67, 66, 1, 0}, /* 68 */ { 8, s_4_68, 66, 2, 0}, /* 69 */ { 7, s_4_69, 66, 1, 0}, /* 70 */ { 7, s_4_70, 66, 1, 0}, /* 71 */ { 8, s_4_71, 66, 1, 0}, /* 72 */ { 5, s_4_72, 64, 1, 0}, /* 73 */ { 5, s_4_73, 64, 1, 0}, /* 74 */ { 6, s_4_74, 64, 1, 0}, /* 75 */ { 3, s_4_75, -1, 2, 0}, /* 76 */ { 2, s_4_76, -1, 1, 0}, /* 77 */ { 3, s_4_77, 76, 1, 0}, /* 78 */ { 3, s_4_78, 76, 1, 0}, /* 79 */ { 4, s_4_79, -1, 1, 0}, /* 80 */ { 5, s_4_80, -1, 1, 0}, /* 81 */ { 2, s_4_81, -1, 1, 0}, /* 82 */ { 6, s_4_82, -1, 1, 0}, /* 83 */ { 4, s_4_83, -1, 1, 0}, /* 84 */ { 5, s_4_84, -1, 2, 0}, /* 85 */ { 6, s_4_85, 84, 1, 0}, /* 86 */ { 7, s_4_86, 84, 2, 0}, /* 87 */ { 6, s_4_87, 84, 1, 0}, /* 88 */ { 6, s_4_88, 84, 1, 0}, /* 89 */ { 7, s_4_89, 84, 1, 0}, /* 90 */ { 4, s_4_90, -1, 1, 0}, /* 91 */ { 4, s_4_91, -1, 1, 0}, /* 92 */ { 5, s_4_92, -1, 1, 0}, /* 93 */ { 5, s_4_93, -1, 1, 0} }; static const symbol s_5_0[1] = { 'a' }; static const symbol s_5_1[1] = { 'e' }; static const symbol s_5_2[2] = { 'i', 'e' }; static const symbol s_5_3[1] = { 'i' }; static const symbol s_5_4[2] = { 0xC4, 0x83 }; static const struct among a_5[5] = { /* 0 */ { 1, s_5_0, -1, 1, 0}, /* 1 */ { 1, s_5_1, -1, 1, 0}, /* 2 */ { 2, s_5_2, 1, 1, 0}, /* 3 */ { 1, s_5_3, -1, 1, 0}, /* 4 */ { 2, s_5_4, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 4 }; static const symbol s_0[] = { 'U' }; static const symbol s_1[] = { 'I' }; static const symbol s_2[] = { 'i' }; static const symbol s_3[] = { 'u' }; static const symbol s_4[] = { 'a' }; static const symbol s_5[] = { 'e' }; static const symbol s_6[] = { 'i' }; static const symbol s_7[] = { 'a', 'b' }; static const symbol s_8[] = { 'i' }; static const symbol s_9[] = { 'a', 't' }; static const symbol s_10[] = { 'a', 0xC5, 0xA3, 'i' }; static const symbol s_11[] = { 'a', 'b', 'i', 'l' }; static const symbol s_12[] = { 'i', 'b', 'i', 'l' }; static const symbol s_13[] = { 'i', 'v' }; static const symbol s_14[] = { 'i', 'c' }; static const symbol s_15[] = { 'a', 't' }; static const symbol s_16[] = { 'i', 't' }; static const symbol s_17[] = { 0xC5, 0xA3 }; static const symbol s_18[] = { 't' }; static const symbol s_19[] = { 'i', 's', 't' }; static int r_prelude(struct SN_env * z) { /* forwardmode */ while(1) { /* repeat, line 32 */ int c1 = z->c; while(1) { /* goto, line 32 */ int c2 = z->c; if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab1; /* grouping v, line 33 */ z->bra = z->c; /* [, line 33 */ { int c3 = z->c; /* or, line 33 */ if (z->c == z->l || z->p[z->c] != 'u') goto lab3; /* literal, line 33 */ z->c++; z->ket = z->c; /* ], line 33 */ if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab3; /* grouping v, line 33 */ { int ret = slice_from_s(z, 1, s_0); /* <-, line 33 */ if (ret < 0) return ret; } goto lab2; lab3: z->c = c3; if (z->c == z->l || z->p[z->c] != 'i') goto lab1; /* literal, line 34 */ z->c++; z->ket = z->c; /* ], line 34 */ if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab1; /* grouping v, line 34 */ { int ret = slice_from_s(z, 1, s_1); /* <-, line 34 */ if (ret < 0) return ret; } } lab2: z->c = c2; break; lab1: z->c = c2; { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* goto, line 32 */ } } continue; lab0: z->c = c1; break; } return 1; } static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 40 */ z->I[1] = z->l; /* $p1 = , line 41 */ z->I[2] = z->l; /* $p2 = , line 42 */ { int c1 = z->c; /* do, line 44 */ { int c2 = z->c; /* or, line 46 */ if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab2; /* grouping v, line 45 */ { int c3 = z->c; /* or, line 45 */ if (out_grouping_U(z, g_v, 97, 259, 0)) goto lab4; /* non v, line 45 */ { /* gopast */ /* grouping v, line 45 */ int ret = out_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab2; /* grouping v, line 45 */ { /* gopast */ /* non v, line 45 */ int ret = in_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping_U(z, g_v, 97, 259, 0)) goto lab0; /* non v, line 47 */ { int c4 = z->c; /* or, line 47 */ if (out_grouping_U(z, g_v, 97, 259, 0)) goto lab6; /* non v, line 47 */ { /* gopast */ /* grouping v, line 47 */ int ret = out_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping_U(z, g_v, 97, 259, 0)) goto lab0; /* grouping v, line 47 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 47 */ } } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 48 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 50 */ { /* gopast */ /* grouping v, line 51 */ int ret = out_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 51 */ int ret = in_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 51 */ { /* gopast */ /* grouping v, line 52 */ int ret = out_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 52 */ int ret = in_grouping_U(z, g_v, 97, 259, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 52 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 56 */ int c1 = z->c; z->bra = z->c; /* [, line 58 */ if (z->c >= z->l || (z->p[z->c + 0] != 73 && z->p[z->c + 0] != 85)) among_var = 3; else /* substring, line 58 */ among_var = find_among(z, a_0, 3); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 58 */ switch (among_var) { /* among, line 58 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_2); /* <-, line 59 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_3); /* <-, line 60 */ if (ret < 0) return ret; } break; case 3: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 61 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 68 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 69 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 70 */ return 1; } static int r_step_0(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 73 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((266786 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 73 */ among_var = find_among_b(z, a_1, 16); if (!(among_var)) return 0; z->bra = z->c; /* ], line 73 */ { int ret = r_R1(z); /* call R1, line 73 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 73 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 75 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_4); /* <-, line 77 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_5); /* <-, line 79 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_6); /* <-, line 81 */ if (ret < 0) return ret; } break; case 5: { int m1 = z->l - z->c; (void)m1; /* not, line 83 */ if (!(eq_s_b(z, 2, s_7))) goto lab0; /* literal, line 83 */ return 0; lab0: z->c = z->l - m1; } { int ret = slice_from_s(z, 1, s_8); /* <-, line 83 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 2, s_9); /* <-, line 85 */ if (ret < 0) return ret; } break; case 7: { int ret = slice_from_s(z, 4, s_10); /* <-, line 87 */ if (ret < 0) return ret; } break; } return 1; } static int r_combo_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m_test1 = z->l - z->c; /* test, line 91 */ z->ket = z->c; /* [, line 92 */ among_var = find_among_b(z, a_2, 46); /* substring, line 92 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 92 */ { int ret = r_R1(z); /* call R1, line 92 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 93 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 4, s_11); /* <-, line 101 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_12); /* <-, line 104 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 2, s_13); /* <-, line 107 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 2, s_14); /* <-, line 113 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 2, s_15); /* <-, line 118 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_from_s(z, 2, s_16); /* <-, line 122 */ if (ret < 0) return ret; } break; } z->B[0] = 1; /* set standard_suffix_removed, line 125 */ z->c = z->l - m_test1; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->B[0] = 0; /* unset standard_suffix_removed, line 130 */ while(1) { /* repeat, line 131 */ int m1 = z->l - z->c; (void)m1; { int ret = r_combo_suffix(z); /* call combo_suffix, line 131 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } continue; lab0: z->c = z->l - m1; break; } z->ket = z->c; /* [, line 132 */ among_var = find_among_b(z, a_3, 62); /* substring, line 132 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 132 */ { int ret = r_R2(z); /* call R2, line 132 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 133 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 149 */ if (ret < 0) return ret; } break; case 2: if (!(eq_s_b(z, 2, s_17))) return 0; /* literal, line 152 */ z->bra = z->c; /* ], line 152 */ { int ret = slice_from_s(z, 1, s_18); /* <-, line 152 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 3, s_19); /* <-, line 156 */ if (ret < 0) return ret; } break; } z->B[0] = 1; /* set standard_suffix_removed, line 160 */ return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 164 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 164 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 165 */ among_var = find_among_b(z, a_4, 94); /* substring, line 165 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 165 */ switch (among_var) { /* among, line 165 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int m2 = z->l - z->c; (void)m2; /* or, line 200 */ if (out_grouping_b_U(z, g_v, 97, 259, 0)) goto lab1; /* non v, line 200 */ goto lab0; lab1: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'u') { z->lb = mlimit1; return 0; } /* literal, line 200 */ z->c--; } lab0: { int ret = slice_del(z); /* delete, line 200 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 214 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } static int r_vowel_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 219 */ among_var = find_among_b(z, a_5, 5); /* substring, line 219 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 219 */ { int ret = r_RV(z); /* call RV, line 219 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 219 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 220 */ if (ret < 0) return ret; } break; } return 1; } extern int romanian_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 226 */ { int ret = r_prelude(z); /* call prelude, line 226 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int c2 = z->c; /* do, line 227 */ { int ret = r_mark_regions(z); /* call mark_regions, line 227 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } z->lb = z->c; z->c = z->l; /* backwards, line 228 */ { int m3 = z->l - z->c; (void)m3; /* do, line 229 */ { int ret = r_step_0(z); /* call step_0, line 229 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 230 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 230 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } { int m5 = z->l - z->c; (void)m5; /* do, line 231 */ { int m6 = z->l - z->c; (void)m6; /* or, line 231 */ if (!(z->B[0])) goto lab6; /* Boolean test standard_suffix_removed, line 231 */ goto lab5; lab6: z->c = z->l - m6; { int ret = r_verb_suffix(z); /* call verb_suffix, line 231 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } } lab5: lab4: z->c = z->l - m5; } { int m7 = z->l - z->c; (void)m7; /* do, line 232 */ { int ret = r_vowel_suffix(z); /* call vowel_suffix, line 232 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = z->l - m7; } z->c = z->lb; { int c8 = z->c; /* do, line 234 */ { int ret = r_postlude(z); /* call postlude, line 234 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = c8; } return 1; } extern struct SN_env * romanian_UTF_8_create_env(void) { return SN_create_env(0, 3, 1); } extern void romanian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_romanian.h000066400000000000000000000005311364126773500237650ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * romanian_UTF_8_create_env(void); extern void romanian_UTF_8_close_env(struct SN_env * z); extern int romanian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_russian.c000066400000000000000000000627711364126773500236560ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int russian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_tidy_up(struct SN_env * z); static int r_derivational(struct SN_env * z); static int r_noun(struct SN_env * z); static int r_verb(struct SN_env * z); static int r_reflexive(struct SN_env * z); static int r_adjectival(struct SN_env * z); static int r_adjective(struct SN_env * z); static int r_perfective_gerund(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * russian_UTF_8_create_env(void); extern void russian_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[10] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; static const symbol s_0_1[12] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; static const symbol s_0_2[12] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8, 0xD1, 0x81, 0xD1, 0x8C }; static const symbol s_0_3[2] = { 0xD0, 0xB2 }; static const symbol s_0_4[4] = { 0xD1, 0x8B, 0xD0, 0xB2 }; static const symbol s_0_5[4] = { 0xD0, 0xB8, 0xD0, 0xB2 }; static const symbol s_0_6[6] = { 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; static const symbol s_0_7[8] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; static const symbol s_0_8[8] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88, 0xD0, 0xB8 }; static const struct among a_0[9] = { /* 0 */ { 10, s_0_0, -1, 1, 0}, /* 1 */ { 12, s_0_1, 0, 2, 0}, /* 2 */ { 12, s_0_2, 0, 2, 0}, /* 3 */ { 2, s_0_3, -1, 1, 0}, /* 4 */ { 4, s_0_4, 3, 2, 0}, /* 5 */ { 4, s_0_5, 3, 2, 0}, /* 6 */ { 6, s_0_6, -1, 1, 0}, /* 7 */ { 8, s_0_7, 6, 2, 0}, /* 8 */ { 8, s_0_8, 6, 2, 0} }; static const symbol s_1_0[6] = { 0xD0, 0xB5, 0xD0, 0xBC, 0xD1, 0x83 }; static const symbol s_1_1[6] = { 0xD0, 0xBE, 0xD0, 0xBC, 0xD1, 0x83 }; static const symbol s_1_2[4] = { 0xD1, 0x8B, 0xD1, 0x85 }; static const symbol s_1_3[4] = { 0xD0, 0xB8, 0xD1, 0x85 }; static const symbol s_1_4[4] = { 0xD1, 0x83, 0xD1, 0x8E }; static const symbol s_1_5[4] = { 0xD1, 0x8E, 0xD1, 0x8E }; static const symbol s_1_6[4] = { 0xD0, 0xB5, 0xD1, 0x8E }; static const symbol s_1_7[4] = { 0xD0, 0xBE, 0xD1, 0x8E }; static const symbol s_1_8[4] = { 0xD1, 0x8F, 0xD1, 0x8F }; static const symbol s_1_9[4] = { 0xD0, 0xB0, 0xD1, 0x8F }; static const symbol s_1_10[4] = { 0xD1, 0x8B, 0xD0, 0xB5 }; static const symbol s_1_11[4] = { 0xD0, 0xB5, 0xD0, 0xB5 }; static const symbol s_1_12[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; static const symbol s_1_13[4] = { 0xD0, 0xBE, 0xD0, 0xB5 }; static const symbol s_1_14[6] = { 0xD1, 0x8B, 0xD0, 0xBC, 0xD0, 0xB8 }; static const symbol s_1_15[6] = { 0xD0, 0xB8, 0xD0, 0xBC, 0xD0, 0xB8 }; static const symbol s_1_16[4] = { 0xD1, 0x8B, 0xD0, 0xB9 }; static const symbol s_1_17[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; static const symbol s_1_18[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; static const symbol s_1_19[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; static const symbol s_1_20[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; static const symbol s_1_21[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; static const symbol s_1_22[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; static const symbol s_1_23[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; static const symbol s_1_24[6] = { 0xD0, 0xB5, 0xD0, 0xB3, 0xD0, 0xBE }; static const symbol s_1_25[6] = { 0xD0, 0xBE, 0xD0, 0xB3, 0xD0, 0xBE }; static const struct among a_1[26] = { /* 0 */ { 6, s_1_0, -1, 1, 0}, /* 1 */ { 6, s_1_1, -1, 1, 0}, /* 2 */ { 4, s_1_2, -1, 1, 0}, /* 3 */ { 4, s_1_3, -1, 1, 0}, /* 4 */ { 4, s_1_4, -1, 1, 0}, /* 5 */ { 4, s_1_5, -1, 1, 0}, /* 6 */ { 4, s_1_6, -1, 1, 0}, /* 7 */ { 4, s_1_7, -1, 1, 0}, /* 8 */ { 4, s_1_8, -1, 1, 0}, /* 9 */ { 4, s_1_9, -1, 1, 0}, /* 10 */ { 4, s_1_10, -1, 1, 0}, /* 11 */ { 4, s_1_11, -1, 1, 0}, /* 12 */ { 4, s_1_12, -1, 1, 0}, /* 13 */ { 4, s_1_13, -1, 1, 0}, /* 14 */ { 6, s_1_14, -1, 1, 0}, /* 15 */ { 6, s_1_15, -1, 1, 0}, /* 16 */ { 4, s_1_16, -1, 1, 0}, /* 17 */ { 4, s_1_17, -1, 1, 0}, /* 18 */ { 4, s_1_18, -1, 1, 0}, /* 19 */ { 4, s_1_19, -1, 1, 0}, /* 20 */ { 4, s_1_20, -1, 1, 0}, /* 21 */ { 4, s_1_21, -1, 1, 0}, /* 22 */ { 4, s_1_22, -1, 1, 0}, /* 23 */ { 4, s_1_23, -1, 1, 0}, /* 24 */ { 6, s_1_24, -1, 1, 0}, /* 25 */ { 6, s_1_25, -1, 1, 0} }; static const symbol s_2_0[4] = { 0xD0, 0xB2, 0xD1, 0x88 }; static const symbol s_2_1[6] = { 0xD1, 0x8B, 0xD0, 0xB2, 0xD1, 0x88 }; static const symbol s_2_2[6] = { 0xD0, 0xB8, 0xD0, 0xB2, 0xD1, 0x88 }; static const symbol s_2_3[2] = { 0xD1, 0x89 }; static const symbol s_2_4[4] = { 0xD1, 0x8E, 0xD1, 0x89 }; static const symbol s_2_5[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x89 }; static const symbol s_2_6[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; static const symbol s_2_7[4] = { 0xD0, 0xBD, 0xD0, 0xBD }; static const struct among a_2[8] = { /* 0 */ { 4, s_2_0, -1, 1, 0}, /* 1 */ { 6, s_2_1, 0, 2, 0}, /* 2 */ { 6, s_2_2, 0, 2, 0}, /* 3 */ { 2, s_2_3, -1, 1, 0}, /* 4 */ { 4, s_2_4, 3, 1, 0}, /* 5 */ { 6, s_2_5, 4, 2, 0}, /* 6 */ { 4, s_2_6, -1, 1, 0}, /* 7 */ { 4, s_2_7, -1, 1, 0} }; static const symbol s_3_0[4] = { 0xD1, 0x81, 0xD1, 0x8C }; static const symbol s_3_1[4] = { 0xD1, 0x81, 0xD1, 0x8F }; static const struct among a_3[2] = { /* 0 */ { 4, s_3_0, -1, 1, 0}, /* 1 */ { 4, s_3_1, -1, 1, 0} }; static const symbol s_4_0[4] = { 0xD1, 0x8B, 0xD1, 0x82 }; static const symbol s_4_1[4] = { 0xD1, 0x8E, 0xD1, 0x82 }; static const symbol s_4_2[6] = { 0xD1, 0x83, 0xD1, 0x8E, 0xD1, 0x82 }; static const symbol s_4_3[4] = { 0xD1, 0x8F, 0xD1, 0x82 }; static const symbol s_4_4[4] = { 0xD0, 0xB5, 0xD1, 0x82 }; static const symbol s_4_5[6] = { 0xD1, 0x83, 0xD0, 0xB5, 0xD1, 0x82 }; static const symbol s_4_6[4] = { 0xD0, 0xB8, 0xD1, 0x82 }; static const symbol s_4_7[4] = { 0xD0, 0xBD, 0xD1, 0x8B }; static const symbol s_4_8[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD1, 0x8B }; static const symbol s_4_9[4] = { 0xD1, 0x82, 0xD1, 0x8C }; static const symbol s_4_10[6] = { 0xD1, 0x8B, 0xD1, 0x82, 0xD1, 0x8C }; static const symbol s_4_11[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD1, 0x8C }; static const symbol s_4_12[6] = { 0xD0, 0xB5, 0xD1, 0x88, 0xD1, 0x8C }; static const symbol s_4_13[6] = { 0xD0, 0xB8, 0xD1, 0x88, 0xD1, 0x8C }; static const symbol s_4_14[2] = { 0xD1, 0x8E }; static const symbol s_4_15[4] = { 0xD1, 0x83, 0xD1, 0x8E }; static const symbol s_4_16[4] = { 0xD0, 0xBB, 0xD0, 0xB0 }; static const symbol s_4_17[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB0 }; static const symbol s_4_18[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB0 }; static const symbol s_4_19[4] = { 0xD0, 0xBD, 0xD0, 0xB0 }; static const symbol s_4_20[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xB0 }; static const symbol s_4_21[6] = { 0xD0, 0xB5, 0xD1, 0x82, 0xD0, 0xB5 }; static const symbol s_4_22[6] = { 0xD0, 0xB8, 0xD1, 0x82, 0xD0, 0xB5 }; static const symbol s_4_23[6] = { 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; static const symbol s_4_24[8] = { 0xD1, 0x83, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; static const symbol s_4_25[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x82, 0xD0, 0xB5 }; static const symbol s_4_26[4] = { 0xD0, 0xBB, 0xD0, 0xB8 }; static const symbol s_4_27[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xB8 }; static const symbol s_4_28[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xB8 }; static const symbol s_4_29[2] = { 0xD0, 0xB9 }; static const symbol s_4_30[4] = { 0xD1, 0x83, 0xD0, 0xB9 }; static const symbol s_4_31[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; static const symbol s_4_32[2] = { 0xD0, 0xBB }; static const symbol s_4_33[4] = { 0xD1, 0x8B, 0xD0, 0xBB }; static const symbol s_4_34[4] = { 0xD0, 0xB8, 0xD0, 0xBB }; static const symbol s_4_35[4] = { 0xD1, 0x8B, 0xD0, 0xBC }; static const symbol s_4_36[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; static const symbol s_4_37[4] = { 0xD0, 0xB8, 0xD0, 0xBC }; static const symbol s_4_38[2] = { 0xD0, 0xBD }; static const symbol s_4_39[4] = { 0xD0, 0xB5, 0xD0, 0xBD }; static const symbol s_4_40[4] = { 0xD0, 0xBB, 0xD0, 0xBE }; static const symbol s_4_41[6] = { 0xD1, 0x8B, 0xD0, 0xBB, 0xD0, 0xBE }; static const symbol s_4_42[6] = { 0xD0, 0xB8, 0xD0, 0xBB, 0xD0, 0xBE }; static const symbol s_4_43[4] = { 0xD0, 0xBD, 0xD0, 0xBE }; static const symbol s_4_44[6] = { 0xD0, 0xB5, 0xD0, 0xBD, 0xD0, 0xBE }; static const symbol s_4_45[6] = { 0xD0, 0xBD, 0xD0, 0xBD, 0xD0, 0xBE }; static const struct among a_4[46] = { /* 0 */ { 4, s_4_0, -1, 2, 0}, /* 1 */ { 4, s_4_1, -1, 1, 0}, /* 2 */ { 6, s_4_2, 1, 2, 0}, /* 3 */ { 4, s_4_3, -1, 2, 0}, /* 4 */ { 4, s_4_4, -1, 1, 0}, /* 5 */ { 6, s_4_5, 4, 2, 0}, /* 6 */ { 4, s_4_6, -1, 2, 0}, /* 7 */ { 4, s_4_7, -1, 1, 0}, /* 8 */ { 6, s_4_8, 7, 2, 0}, /* 9 */ { 4, s_4_9, -1, 1, 0}, /* 10 */ { 6, s_4_10, 9, 2, 0}, /* 11 */ { 6, s_4_11, 9, 2, 0}, /* 12 */ { 6, s_4_12, -1, 1, 0}, /* 13 */ { 6, s_4_13, -1, 2, 0}, /* 14 */ { 2, s_4_14, -1, 2, 0}, /* 15 */ { 4, s_4_15, 14, 2, 0}, /* 16 */ { 4, s_4_16, -1, 1, 0}, /* 17 */ { 6, s_4_17, 16, 2, 0}, /* 18 */ { 6, s_4_18, 16, 2, 0}, /* 19 */ { 4, s_4_19, -1, 1, 0}, /* 20 */ { 6, s_4_20, 19, 2, 0}, /* 21 */ { 6, s_4_21, -1, 1, 0}, /* 22 */ { 6, s_4_22, -1, 2, 0}, /* 23 */ { 6, s_4_23, -1, 1, 0}, /* 24 */ { 8, s_4_24, 23, 2, 0}, /* 25 */ { 8, s_4_25, 23, 2, 0}, /* 26 */ { 4, s_4_26, -1, 1, 0}, /* 27 */ { 6, s_4_27, 26, 2, 0}, /* 28 */ { 6, s_4_28, 26, 2, 0}, /* 29 */ { 2, s_4_29, -1, 1, 0}, /* 30 */ { 4, s_4_30, 29, 2, 0}, /* 31 */ { 4, s_4_31, 29, 2, 0}, /* 32 */ { 2, s_4_32, -1, 1, 0}, /* 33 */ { 4, s_4_33, 32, 2, 0}, /* 34 */ { 4, s_4_34, 32, 2, 0}, /* 35 */ { 4, s_4_35, -1, 2, 0}, /* 36 */ { 4, s_4_36, -1, 1, 0}, /* 37 */ { 4, s_4_37, -1, 2, 0}, /* 38 */ { 2, s_4_38, -1, 1, 0}, /* 39 */ { 4, s_4_39, 38, 2, 0}, /* 40 */ { 4, s_4_40, -1, 1, 0}, /* 41 */ { 6, s_4_41, 40, 2, 0}, /* 42 */ { 6, s_4_42, 40, 2, 0}, /* 43 */ { 4, s_4_43, -1, 1, 0}, /* 44 */ { 6, s_4_44, 43, 2, 0}, /* 45 */ { 6, s_4_45, 43, 1, 0} }; static const symbol s_5_0[2] = { 0xD1, 0x83 }; static const symbol s_5_1[4] = { 0xD1, 0x8F, 0xD1, 0x85 }; static const symbol s_5_2[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD1, 0x85 }; static const symbol s_5_3[4] = { 0xD0, 0xB0, 0xD1, 0x85 }; static const symbol s_5_4[2] = { 0xD1, 0x8B }; static const symbol s_5_5[2] = { 0xD1, 0x8C }; static const symbol s_5_6[2] = { 0xD1, 0x8E }; static const symbol s_5_7[4] = { 0xD1, 0x8C, 0xD1, 0x8E }; static const symbol s_5_8[4] = { 0xD0, 0xB8, 0xD1, 0x8E }; static const symbol s_5_9[2] = { 0xD1, 0x8F }; static const symbol s_5_10[4] = { 0xD1, 0x8C, 0xD1, 0x8F }; static const symbol s_5_11[4] = { 0xD0, 0xB8, 0xD1, 0x8F }; static const symbol s_5_12[2] = { 0xD0, 0xB0 }; static const symbol s_5_13[4] = { 0xD0, 0xB5, 0xD0, 0xB2 }; static const symbol s_5_14[4] = { 0xD0, 0xBE, 0xD0, 0xB2 }; static const symbol s_5_15[2] = { 0xD0, 0xB5 }; static const symbol s_5_16[4] = { 0xD1, 0x8C, 0xD0, 0xB5 }; static const symbol s_5_17[4] = { 0xD0, 0xB8, 0xD0, 0xB5 }; static const symbol s_5_18[2] = { 0xD0, 0xB8 }; static const symbol s_5_19[4] = { 0xD0, 0xB5, 0xD0, 0xB8 }; static const symbol s_5_20[4] = { 0xD0, 0xB8, 0xD0, 0xB8 }; static const symbol s_5_21[6] = { 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; static const symbol s_5_22[8] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC, 0xD0, 0xB8 }; static const symbol s_5_23[6] = { 0xD0, 0xB0, 0xD0, 0xBC, 0xD0, 0xB8 }; static const symbol s_5_24[2] = { 0xD0, 0xB9 }; static const symbol s_5_25[4] = { 0xD0, 0xB5, 0xD0, 0xB9 }; static const symbol s_5_26[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xB9 }; static const symbol s_5_27[4] = { 0xD0, 0xB8, 0xD0, 0xB9 }; static const symbol s_5_28[4] = { 0xD0, 0xBE, 0xD0, 0xB9 }; static const symbol s_5_29[4] = { 0xD1, 0x8F, 0xD0, 0xBC }; static const symbol s_5_30[6] = { 0xD0, 0xB8, 0xD1, 0x8F, 0xD0, 0xBC }; static const symbol s_5_31[4] = { 0xD0, 0xB0, 0xD0, 0xBC }; static const symbol s_5_32[4] = { 0xD0, 0xB5, 0xD0, 0xBC }; static const symbol s_5_33[6] = { 0xD0, 0xB8, 0xD0, 0xB5, 0xD0, 0xBC }; static const symbol s_5_34[4] = { 0xD0, 0xBE, 0xD0, 0xBC }; static const symbol s_5_35[2] = { 0xD0, 0xBE }; static const struct among a_5[36] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 6, s_5_2, 1, 1, 0}, /* 3 */ { 4, s_5_3, -1, 1, 0}, /* 4 */ { 2, s_5_4, -1, 1, 0}, /* 5 */ { 2, s_5_5, -1, 1, 0}, /* 6 */ { 2, s_5_6, -1, 1, 0}, /* 7 */ { 4, s_5_7, 6, 1, 0}, /* 8 */ { 4, s_5_8, 6, 1, 0}, /* 9 */ { 2, s_5_9, -1, 1, 0}, /* 10 */ { 4, s_5_10, 9, 1, 0}, /* 11 */ { 4, s_5_11, 9, 1, 0}, /* 12 */ { 2, s_5_12, -1, 1, 0}, /* 13 */ { 4, s_5_13, -1, 1, 0}, /* 14 */ { 4, s_5_14, -1, 1, 0}, /* 15 */ { 2, s_5_15, -1, 1, 0}, /* 16 */ { 4, s_5_16, 15, 1, 0}, /* 17 */ { 4, s_5_17, 15, 1, 0}, /* 18 */ { 2, s_5_18, -1, 1, 0}, /* 19 */ { 4, s_5_19, 18, 1, 0}, /* 20 */ { 4, s_5_20, 18, 1, 0}, /* 21 */ { 6, s_5_21, 18, 1, 0}, /* 22 */ { 8, s_5_22, 21, 1, 0}, /* 23 */ { 6, s_5_23, 18, 1, 0}, /* 24 */ { 2, s_5_24, -1, 1, 0}, /* 25 */ { 4, s_5_25, 24, 1, 0}, /* 26 */ { 6, s_5_26, 25, 1, 0}, /* 27 */ { 4, s_5_27, 24, 1, 0}, /* 28 */ { 4, s_5_28, 24, 1, 0}, /* 29 */ { 4, s_5_29, -1, 1, 0}, /* 30 */ { 6, s_5_30, 29, 1, 0}, /* 31 */ { 4, s_5_31, -1, 1, 0}, /* 32 */ { 4, s_5_32, -1, 1, 0}, /* 33 */ { 6, s_5_33, 32, 1, 0}, /* 34 */ { 4, s_5_34, -1, 1, 0}, /* 35 */ { 2, s_5_35, -1, 1, 0} }; static const symbol s_6_0[6] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82 }; static const symbol s_6_1[8] = { 0xD0, 0xBE, 0xD1, 0x81, 0xD1, 0x82, 0xD1, 0x8C }; static const struct among a_6[2] = { /* 0 */ { 6, s_6_0, -1, 1, 0}, /* 1 */ { 8, s_6_1, -1, 1, 0} }; static const symbol s_7_0[6] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88 }; static const symbol s_7_1[2] = { 0xD1, 0x8C }; static const symbol s_7_2[8] = { 0xD0, 0xB5, 0xD0, 0xB9, 0xD1, 0x88, 0xD0, 0xB5 }; static const symbol s_7_3[2] = { 0xD0, 0xBD }; static const struct among a_7[4] = { /* 0 */ { 6, s_7_0, -1, 1, 0}, /* 1 */ { 2, s_7_1, -1, 3, 0}, /* 2 */ { 8, s_7_2, -1, 1, 0}, /* 3 */ { 2, s_7_3, -1, 2, 0} }; static const unsigned char g_v[] = { 33, 65, 8, 232 }; static const symbol s_0[] = { 0xD0, 0xB0 }; static const symbol s_1[] = { 0xD1, 0x8F }; static const symbol s_2[] = { 0xD0, 0xB0 }; static const symbol s_3[] = { 0xD1, 0x8F }; static const symbol s_4[] = { 0xD0, 0xB0 }; static const symbol s_5[] = { 0xD1, 0x8F }; static const symbol s_6[] = { 0xD0, 0xBD }; static const symbol s_7[] = { 0xD0, 0xBD }; static const symbol s_8[] = { 0xD0, 0xBD }; static const symbol s_9[] = { 0xD0, 0xB8 }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 59 */ z->I[1] = z->l; /* $p2 = , line 60 */ { int c1 = z->c; /* do, line 61 */ { /* gopast */ /* grouping v, line 62 */ int ret = out_grouping_U(z, g_v, 1072, 1103, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[0] = z->c; /* setmark pV, line 62 */ { /* gopast */ /* non v, line 62 */ int ret = in_grouping_U(z, g_v, 1072, 1103, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* grouping v, line 63 */ int ret = out_grouping_U(z, g_v, 1072, 1103, 1); if (ret < 0) goto lab0; z->c += ret; } { /* gopast */ /* non v, line 63 */ int ret = in_grouping_U(z, g_v, 1072, 1103, 1); if (ret < 0) goto lab0; z->c += ret; } z->I[1] = z->c; /* setmark p2, line 63 */ lab0: z->c = c1; } return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p2 <= , line 69 */ return 1; } static int r_perfective_gerund(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 72 */ among_var = find_among_b(z, a_0, 9); /* substring, line 72 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 72 */ switch (among_var) { /* among, line 72 */ case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 76 */ if (!(eq_s_b(z, 2, s_0))) goto lab1; /* literal, line 76 */ goto lab0; lab1: z->c = z->l - m1; if (!(eq_s_b(z, 2, s_1))) return 0; /* literal, line 76 */ } lab0: { int ret = slice_del(z); /* delete, line 76 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 83 */ if (ret < 0) return ret; } break; } return 1; } static int r_adjective(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 88 */ among_var = find_among_b(z, a_1, 26); /* substring, line 88 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 88 */ switch (among_var) { /* among, line 88 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 97 */ if (ret < 0) return ret; } break; } return 1; } static int r_adjectival(struct SN_env * z) { /* backwardmode */ int among_var; { int ret = r_adjective(z); /* call adjective, line 102 */ if (ret <= 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 109 */ z->ket = z->c; /* [, line 110 */ among_var = find_among_b(z, a_2, 8); /* substring, line 110 */ if (!(among_var)) { z->c = z->l - m1; goto lab0; } z->bra = z->c; /* ], line 110 */ switch (among_var) { /* among, line 110 */ case 0: { z->c = z->l - m1; goto lab0; } case 1: { int m2 = z->l - z->c; (void)m2; /* or, line 115 */ if (!(eq_s_b(z, 2, s_2))) goto lab2; /* literal, line 115 */ goto lab1; lab2: z->c = z->l - m2; if (!(eq_s_b(z, 2, s_3))) { z->c = z->l - m1; goto lab0; } /* literal, line 115 */ } lab1: { int ret = slice_del(z); /* delete, line 115 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } break; } lab0: ; } return 1; } static int r_reflexive(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 129 */ if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 140 && z->p[z->c - 1] != 143)) return 0; /* substring, line 129 */ among_var = find_among_b(z, a_3, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 129 */ switch (among_var) { /* among, line 129 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 132 */ if (ret < 0) return ret; } break; } return 1; } static int r_verb(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 137 */ among_var = find_among_b(z, a_4, 46); /* substring, line 137 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 137 */ switch (among_var) { /* among, line 137 */ case 0: return 0; case 1: { int m1 = z->l - z->c; (void)m1; /* or, line 143 */ if (!(eq_s_b(z, 2, s_4))) goto lab1; /* literal, line 143 */ goto lab0; lab1: z->c = z->l - m1; if (!(eq_s_b(z, 2, s_5))) return 0; /* literal, line 143 */ } lab0: { int ret = slice_del(z); /* delete, line 143 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 151 */ if (ret < 0) return ret; } break; } return 1; } static int r_noun(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 160 */ among_var = find_among_b(z, a_5, 36); /* substring, line 160 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 160 */ switch (among_var) { /* among, line 160 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 167 */ if (ret < 0) return ret; } break; } return 1; } static int r_derivational(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 176 */ if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 130 && z->p[z->c - 1] != 140)) return 0; /* substring, line 176 */ among_var = find_among_b(z, a_6, 2); if (!(among_var)) return 0; z->bra = z->c; /* ], line 176 */ { int ret = r_R2(z); /* call R2, line 176 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 176 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } break; } return 1; } static int r_tidy_up(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 184 */ among_var = find_among_b(z, a_7, 4); /* substring, line 184 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 184 */ switch (among_var) { /* among, line 184 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 188 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 189 */ if (!(eq_s_b(z, 2, s_6))) return 0; /* literal, line 189 */ z->bra = z->c; /* ], line 189 */ if (!(eq_s_b(z, 2, s_7))) return 0; /* literal, line 189 */ { int ret = slice_del(z); /* delete, line 189 */ if (ret < 0) return ret; } break; case 2: if (!(eq_s_b(z, 2, s_8))) return 0; /* literal, line 192 */ { int ret = slice_del(z); /* delete, line 192 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_del(z); /* delete, line 194 */ if (ret < 0) return ret; } break; } return 1; } extern int russian_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 201 */ { int ret = r_mark_regions(z); /* call mark_regions, line 201 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 202 */ { int m2 = z->l - z->c; (void)m2; /* setlimit, line 202 */ int mlimit2; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 202 */ mlimit2 = z->lb; z->lb = z->c; z->c = z->l - m2; { int m3 = z->l - z->c; (void)m3; /* do, line 203 */ { int m4 = z->l - z->c; (void)m4; /* or, line 204 */ { int ret = r_perfective_gerund(z); /* call perfective_gerund, line 204 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } goto lab2; lab3: z->c = z->l - m4; { int m5 = z->l - z->c; (void)m5; /* try, line 205 */ { int ret = r_reflexive(z); /* call reflexive, line 205 */ if (ret == 0) { z->c = z->l - m5; goto lab4; } if (ret < 0) return ret; } lab4: ; } { int m6 = z->l - z->c; (void)m6; /* or, line 206 */ { int ret = r_adjectival(z); /* call adjectival, line 206 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m6; { int ret = r_verb(z); /* call verb, line 206 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } goto lab5; lab7: z->c = z->l - m6; { int ret = r_noun(z); /* call noun, line 206 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } } lab5: ; } lab2: lab1: z->c = z->l - m3; } { int m7 = z->l - z->c; (void)m7; /* try, line 209 */ z->ket = z->c; /* [, line 209 */ if (!(eq_s_b(z, 2, s_9))) { z->c = z->l - m7; goto lab8; } /* literal, line 209 */ z->bra = z->c; /* ], line 209 */ { int ret = slice_del(z); /* delete, line 209 */ if (ret < 0) return ret; } lab8: ; } { int m8 = z->l - z->c; (void)m8; /* do, line 212 */ { int ret = r_derivational(z); /* call derivational, line 212 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = z->l - m8; } { int m9 = z->l - z->c; (void)m9; /* do, line 213 */ { int ret = r_tidy_up(z); /* call tidy_up, line 213 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } lab10: z->c = z->l - m9; } z->lb = mlimit2; } z->c = z->lb; return 1; } extern struct SN_env * russian_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } extern void russian_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_russian.h000066400000000000000000000005261364126773500236510ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * russian_UTF_8_create_env(void); extern void russian_UTF_8_close_env(struct SN_env * z); extern int russian_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_spanish.c000066400000000000000000001221111364126773500236200ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int spanish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_residual_suffix(struct SN_env * z); static int r_verb_suffix(struct SN_env * z); static int r_y_verb_suffix(struct SN_env * z); static int r_standard_suffix(struct SN_env * z); static int r_attached_pronoun(struct SN_env * z); static int r_R2(struct SN_env * z); static int r_R1(struct SN_env * z); static int r_RV(struct SN_env * z); static int r_mark_regions(struct SN_env * z); static int r_postlude(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * spanish_UTF_8_create_env(void); extern void spanish_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_1[2] = { 0xC3, 0xA1 }; static const symbol s_0_2[2] = { 0xC3, 0xA9 }; static const symbol s_0_3[2] = { 0xC3, 0xAD }; static const symbol s_0_4[2] = { 0xC3, 0xB3 }; static const symbol s_0_5[2] = { 0xC3, 0xBA }; static const struct among a_0[6] = { /* 0 */ { 0, 0, -1, 6, 0}, /* 1 */ { 2, s_0_1, 0, 1, 0}, /* 2 */ { 2, s_0_2, 0, 2, 0}, /* 3 */ { 2, s_0_3, 0, 3, 0}, /* 4 */ { 2, s_0_4, 0, 4, 0}, /* 5 */ { 2, s_0_5, 0, 5, 0} }; static const symbol s_1_0[2] = { 'l', 'a' }; static const symbol s_1_1[4] = { 's', 'e', 'l', 'a' }; static const symbol s_1_2[2] = { 'l', 'e' }; static const symbol s_1_3[2] = { 'm', 'e' }; static const symbol s_1_4[2] = { 's', 'e' }; static const symbol s_1_5[2] = { 'l', 'o' }; static const symbol s_1_6[4] = { 's', 'e', 'l', 'o' }; static const symbol s_1_7[3] = { 'l', 'a', 's' }; static const symbol s_1_8[5] = { 's', 'e', 'l', 'a', 's' }; static const symbol s_1_9[3] = { 'l', 'e', 's' }; static const symbol s_1_10[3] = { 'l', 'o', 's' }; static const symbol s_1_11[5] = { 's', 'e', 'l', 'o', 's' }; static const symbol s_1_12[3] = { 'n', 'o', 's' }; static const struct among a_1[13] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 4, s_1_1, 0, -1, 0}, /* 2 */ { 2, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0}, /* 4 */ { 2, s_1_4, -1, -1, 0}, /* 5 */ { 2, s_1_5, -1, -1, 0}, /* 6 */ { 4, s_1_6, 5, -1, 0}, /* 7 */ { 3, s_1_7, -1, -1, 0}, /* 8 */ { 5, s_1_8, 7, -1, 0}, /* 9 */ { 3, s_1_9, -1, -1, 0}, /* 10 */ { 3, s_1_10, -1, -1, 0}, /* 11 */ { 5, s_1_11, 10, -1, 0}, /* 12 */ { 3, s_1_12, -1, -1, 0} }; static const symbol s_2_0[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_2_1[5] = { 'i', 'e', 'n', 'd', 'o' }; static const symbol s_2_2[5] = { 'y', 'e', 'n', 'd', 'o' }; static const symbol s_2_3[5] = { 0xC3, 0xA1, 'n', 'd', 'o' }; static const symbol s_2_4[6] = { 'i', 0xC3, 0xA9, 'n', 'd', 'o' }; static const symbol s_2_5[2] = { 'a', 'r' }; static const symbol s_2_6[2] = { 'e', 'r' }; static const symbol s_2_7[2] = { 'i', 'r' }; static const symbol s_2_8[3] = { 0xC3, 0xA1, 'r' }; static const symbol s_2_9[3] = { 0xC3, 0xA9, 'r' }; static const symbol s_2_10[3] = { 0xC3, 0xAD, 'r' }; static const struct among a_2[11] = { /* 0 */ { 4, s_2_0, -1, 6, 0}, /* 1 */ { 5, s_2_1, -1, 6, 0}, /* 2 */ { 5, s_2_2, -1, 7, 0}, /* 3 */ { 5, s_2_3, -1, 2, 0}, /* 4 */ { 6, s_2_4, -1, 1, 0}, /* 5 */ { 2, s_2_5, -1, 6, 0}, /* 6 */ { 2, s_2_6, -1, 6, 0}, /* 7 */ { 2, s_2_7, -1, 6, 0}, /* 8 */ { 3, s_2_8, -1, 3, 0}, /* 9 */ { 3, s_2_9, -1, 4, 0}, /* 10 */ { 3, s_2_10, -1, 5, 0} }; static const symbol s_3_0[2] = { 'i', 'c' }; static const symbol s_3_1[2] = { 'a', 'd' }; static const symbol s_3_2[2] = { 'o', 's' }; static const symbol s_3_3[2] = { 'i', 'v' }; static const struct among a_3[4] = { /* 0 */ { 2, s_3_0, -1, -1, 0}, /* 1 */ { 2, s_3_1, -1, -1, 0}, /* 2 */ { 2, s_3_2, -1, -1, 0}, /* 3 */ { 2, s_3_3, -1, 1, 0} }; static const symbol s_4_0[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_4_1[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_4_2[4] = { 'a', 'n', 't', 'e' }; static const struct among a_4[3] = { /* 0 */ { 4, s_4_0, -1, 1, 0}, /* 1 */ { 4, s_4_1, -1, 1, 0}, /* 2 */ { 4, s_4_2, -1, 1, 0} }; static const symbol s_5_0[2] = { 'i', 'c' }; static const symbol s_5_1[4] = { 'a', 'b', 'i', 'l' }; static const symbol s_5_2[2] = { 'i', 'v' }; static const struct among a_5[3] = { /* 0 */ { 2, s_5_0, -1, 1, 0}, /* 1 */ { 4, s_5_1, -1, 1, 0}, /* 2 */ { 2, s_5_2, -1, 1, 0} }; static const symbol s_6_0[3] = { 'i', 'c', 'a' }; static const symbol s_6_1[5] = { 'a', 'n', 'c', 'i', 'a' }; static const symbol s_6_2[5] = { 'e', 'n', 'c', 'i', 'a' }; static const symbol s_6_3[5] = { 'a', 'd', 'o', 'r', 'a' }; static const symbol s_6_4[3] = { 'o', 's', 'a' }; static const symbol s_6_5[4] = { 'i', 's', 't', 'a' }; static const symbol s_6_6[3] = { 'i', 'v', 'a' }; static const symbol s_6_7[4] = { 'a', 'n', 'z', 'a' }; static const symbol s_6_8[6] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a' }; static const symbol s_6_9[4] = { 'i', 'd', 'a', 'd' }; static const symbol s_6_10[4] = { 'a', 'b', 'l', 'e' }; static const symbol s_6_11[4] = { 'i', 'b', 'l', 'e' }; static const symbol s_6_12[4] = { 'a', 'n', 't', 'e' }; static const symbol s_6_13[5] = { 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_14[6] = { 'a', 'm', 'e', 'n', 't', 'e' }; static const symbol s_6_15[6] = { 'a', 'c', 'i', 0xC3, 0xB3, 'n' }; static const symbol s_6_16[6] = { 'u', 'c', 'i', 0xC3, 0xB3, 'n' }; static const symbol s_6_17[3] = { 'i', 'c', 'o' }; static const symbol s_6_18[4] = { 'i', 's', 'm', 'o' }; static const symbol s_6_19[3] = { 'o', 's', 'o' }; static const symbol s_6_20[7] = { 'a', 'm', 'i', 'e', 'n', 't', 'o' }; static const symbol s_6_21[7] = { 'i', 'm', 'i', 'e', 'n', 't', 'o' }; static const symbol s_6_22[3] = { 'i', 'v', 'o' }; static const symbol s_6_23[4] = { 'a', 'd', 'o', 'r' }; static const symbol s_6_24[4] = { 'i', 'c', 'a', 's' }; static const symbol s_6_25[6] = { 'a', 'n', 'c', 'i', 'a', 's' }; static const symbol s_6_26[6] = { 'e', 'n', 'c', 'i', 'a', 's' }; static const symbol s_6_27[6] = { 'a', 'd', 'o', 'r', 'a', 's' }; static const symbol s_6_28[4] = { 'o', 's', 'a', 's' }; static const symbol s_6_29[5] = { 'i', 's', 't', 'a', 's' }; static const symbol s_6_30[4] = { 'i', 'v', 'a', 's' }; static const symbol s_6_31[5] = { 'a', 'n', 'z', 'a', 's' }; static const symbol s_6_32[7] = { 'l', 'o', 'g', 0xC3, 0xAD, 'a', 's' }; static const symbol s_6_33[6] = { 'i', 'd', 'a', 'd', 'e', 's' }; static const symbol s_6_34[5] = { 'a', 'b', 'l', 'e', 's' }; static const symbol s_6_35[5] = { 'i', 'b', 'l', 'e', 's' }; static const symbol s_6_36[7] = { 'a', 'c', 'i', 'o', 'n', 'e', 's' }; static const symbol s_6_37[7] = { 'u', 'c', 'i', 'o', 'n', 'e', 's' }; static const symbol s_6_38[6] = { 'a', 'd', 'o', 'r', 'e', 's' }; static const symbol s_6_39[5] = { 'a', 'n', 't', 'e', 's' }; static const symbol s_6_40[4] = { 'i', 'c', 'o', 's' }; static const symbol s_6_41[5] = { 'i', 's', 'm', 'o', 's' }; static const symbol s_6_42[4] = { 'o', 's', 'o', 's' }; static const symbol s_6_43[8] = { 'a', 'm', 'i', 'e', 'n', 't', 'o', 's' }; static const symbol s_6_44[8] = { 'i', 'm', 'i', 'e', 'n', 't', 'o', 's' }; static const symbol s_6_45[4] = { 'i', 'v', 'o', 's' }; static const struct among a_6[46] = { /* 0 */ { 3, s_6_0, -1, 1, 0}, /* 1 */ { 5, s_6_1, -1, 2, 0}, /* 2 */ { 5, s_6_2, -1, 5, 0}, /* 3 */ { 5, s_6_3, -1, 2, 0}, /* 4 */ { 3, s_6_4, -1, 1, 0}, /* 5 */ { 4, s_6_5, -1, 1, 0}, /* 6 */ { 3, s_6_6, -1, 9, 0}, /* 7 */ { 4, s_6_7, -1, 1, 0}, /* 8 */ { 6, s_6_8, -1, 3, 0}, /* 9 */ { 4, s_6_9, -1, 8, 0}, /* 10 */ { 4, s_6_10, -1, 1, 0}, /* 11 */ { 4, s_6_11, -1, 1, 0}, /* 12 */ { 4, s_6_12, -1, 2, 0}, /* 13 */ { 5, s_6_13, -1, 7, 0}, /* 14 */ { 6, s_6_14, 13, 6, 0}, /* 15 */ { 6, s_6_15, -1, 2, 0}, /* 16 */ { 6, s_6_16, -1, 4, 0}, /* 17 */ { 3, s_6_17, -1, 1, 0}, /* 18 */ { 4, s_6_18, -1, 1, 0}, /* 19 */ { 3, s_6_19, -1, 1, 0}, /* 20 */ { 7, s_6_20, -1, 1, 0}, /* 21 */ { 7, s_6_21, -1, 1, 0}, /* 22 */ { 3, s_6_22, -1, 9, 0}, /* 23 */ { 4, s_6_23, -1, 2, 0}, /* 24 */ { 4, s_6_24, -1, 1, 0}, /* 25 */ { 6, s_6_25, -1, 2, 0}, /* 26 */ { 6, s_6_26, -1, 5, 0}, /* 27 */ { 6, s_6_27, -1, 2, 0}, /* 28 */ { 4, s_6_28, -1, 1, 0}, /* 29 */ { 5, s_6_29, -1, 1, 0}, /* 30 */ { 4, s_6_30, -1, 9, 0}, /* 31 */ { 5, s_6_31, -1, 1, 0}, /* 32 */ { 7, s_6_32, -1, 3, 0}, /* 33 */ { 6, s_6_33, -1, 8, 0}, /* 34 */ { 5, s_6_34, -1, 1, 0}, /* 35 */ { 5, s_6_35, -1, 1, 0}, /* 36 */ { 7, s_6_36, -1, 2, 0}, /* 37 */ { 7, s_6_37, -1, 4, 0}, /* 38 */ { 6, s_6_38, -1, 2, 0}, /* 39 */ { 5, s_6_39, -1, 2, 0}, /* 40 */ { 4, s_6_40, -1, 1, 0}, /* 41 */ { 5, s_6_41, -1, 1, 0}, /* 42 */ { 4, s_6_42, -1, 1, 0}, /* 43 */ { 8, s_6_43, -1, 1, 0}, /* 44 */ { 8, s_6_44, -1, 1, 0}, /* 45 */ { 4, s_6_45, -1, 9, 0} }; static const symbol s_7_0[2] = { 'y', 'a' }; static const symbol s_7_1[2] = { 'y', 'e' }; static const symbol s_7_2[3] = { 'y', 'a', 'n' }; static const symbol s_7_3[3] = { 'y', 'e', 'n' }; static const symbol s_7_4[5] = { 'y', 'e', 'r', 'o', 'n' }; static const symbol s_7_5[5] = { 'y', 'e', 'n', 'd', 'o' }; static const symbol s_7_6[2] = { 'y', 'o' }; static const symbol s_7_7[3] = { 'y', 'a', 's' }; static const symbol s_7_8[3] = { 'y', 'e', 's' }; static const symbol s_7_9[4] = { 'y', 'a', 'i', 's' }; static const symbol s_7_10[5] = { 'y', 'a', 'm', 'o', 's' }; static const symbol s_7_11[3] = { 'y', 0xC3, 0xB3 }; static const struct among a_7[12] = { /* 0 */ { 2, s_7_0, -1, 1, 0}, /* 1 */ { 2, s_7_1, -1, 1, 0}, /* 2 */ { 3, s_7_2, -1, 1, 0}, /* 3 */ { 3, s_7_3, -1, 1, 0}, /* 4 */ { 5, s_7_4, -1, 1, 0}, /* 5 */ { 5, s_7_5, -1, 1, 0}, /* 6 */ { 2, s_7_6, -1, 1, 0}, /* 7 */ { 3, s_7_7, -1, 1, 0}, /* 8 */ { 3, s_7_8, -1, 1, 0}, /* 9 */ { 4, s_7_9, -1, 1, 0}, /* 10 */ { 5, s_7_10, -1, 1, 0}, /* 11 */ { 3, s_7_11, -1, 1, 0} }; static const symbol s_8_0[3] = { 'a', 'b', 'a' }; static const symbol s_8_1[3] = { 'a', 'd', 'a' }; static const symbol s_8_2[3] = { 'i', 'd', 'a' }; static const symbol s_8_3[3] = { 'a', 'r', 'a' }; static const symbol s_8_4[4] = { 'i', 'e', 'r', 'a' }; static const symbol s_8_5[3] = { 0xC3, 0xAD, 'a' }; static const symbol s_8_6[5] = { 'a', 'r', 0xC3, 0xAD, 'a' }; static const symbol s_8_7[5] = { 'e', 'r', 0xC3, 0xAD, 'a' }; static const symbol s_8_8[5] = { 'i', 'r', 0xC3, 0xAD, 'a' }; static const symbol s_8_9[2] = { 'a', 'd' }; static const symbol s_8_10[2] = { 'e', 'd' }; static const symbol s_8_11[2] = { 'i', 'd' }; static const symbol s_8_12[3] = { 'a', 's', 'e' }; static const symbol s_8_13[4] = { 'i', 'e', 's', 'e' }; static const symbol s_8_14[4] = { 'a', 's', 't', 'e' }; static const symbol s_8_15[4] = { 'i', 's', 't', 'e' }; static const symbol s_8_16[2] = { 'a', 'n' }; static const symbol s_8_17[4] = { 'a', 'b', 'a', 'n' }; static const symbol s_8_18[4] = { 'a', 'r', 'a', 'n' }; static const symbol s_8_19[5] = { 'i', 'e', 'r', 'a', 'n' }; static const symbol s_8_20[4] = { 0xC3, 0xAD, 'a', 'n' }; static const symbol s_8_21[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 'n' }; static const symbol s_8_22[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 'n' }; static const symbol s_8_23[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 'n' }; static const symbol s_8_24[2] = { 'e', 'n' }; static const symbol s_8_25[4] = { 'a', 's', 'e', 'n' }; static const symbol s_8_26[5] = { 'i', 'e', 's', 'e', 'n' }; static const symbol s_8_27[4] = { 'a', 'r', 'o', 'n' }; static const symbol s_8_28[5] = { 'i', 'e', 'r', 'o', 'n' }; static const symbol s_8_29[5] = { 'a', 'r', 0xC3, 0xA1, 'n' }; static const symbol s_8_30[5] = { 'e', 'r', 0xC3, 0xA1, 'n' }; static const symbol s_8_31[5] = { 'i', 'r', 0xC3, 0xA1, 'n' }; static const symbol s_8_32[3] = { 'a', 'd', 'o' }; static const symbol s_8_33[3] = { 'i', 'd', 'o' }; static const symbol s_8_34[4] = { 'a', 'n', 'd', 'o' }; static const symbol s_8_35[5] = { 'i', 'e', 'n', 'd', 'o' }; static const symbol s_8_36[2] = { 'a', 'r' }; static const symbol s_8_37[2] = { 'e', 'r' }; static const symbol s_8_38[2] = { 'i', 'r' }; static const symbol s_8_39[2] = { 'a', 's' }; static const symbol s_8_40[4] = { 'a', 'b', 'a', 's' }; static const symbol s_8_41[4] = { 'a', 'd', 'a', 's' }; static const symbol s_8_42[4] = { 'i', 'd', 'a', 's' }; static const symbol s_8_43[4] = { 'a', 'r', 'a', 's' }; static const symbol s_8_44[5] = { 'i', 'e', 'r', 'a', 's' }; static const symbol s_8_45[4] = { 0xC3, 0xAD, 'a', 's' }; static const symbol s_8_46[6] = { 'a', 'r', 0xC3, 0xAD, 'a', 's' }; static const symbol s_8_47[6] = { 'e', 'r', 0xC3, 0xAD, 'a', 's' }; static const symbol s_8_48[6] = { 'i', 'r', 0xC3, 0xAD, 'a', 's' }; static const symbol s_8_49[2] = { 'e', 's' }; static const symbol s_8_50[4] = { 'a', 's', 'e', 's' }; static const symbol s_8_51[5] = { 'i', 'e', 's', 'e', 's' }; static const symbol s_8_52[5] = { 'a', 'b', 'a', 'i', 's' }; static const symbol s_8_53[5] = { 'a', 'r', 'a', 'i', 's' }; static const symbol s_8_54[6] = { 'i', 'e', 'r', 'a', 'i', 's' }; static const symbol s_8_55[5] = { 0xC3, 0xAD, 'a', 'i', 's' }; static const symbol s_8_56[7] = { 'a', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; static const symbol s_8_57[7] = { 'e', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; static const symbol s_8_58[7] = { 'i', 'r', 0xC3, 0xAD, 'a', 'i', 's' }; static const symbol s_8_59[5] = { 'a', 's', 'e', 'i', 's' }; static const symbol s_8_60[6] = { 'i', 'e', 's', 'e', 'i', 's' }; static const symbol s_8_61[6] = { 'a', 's', 't', 'e', 'i', 's' }; static const symbol s_8_62[6] = { 'i', 's', 't', 'e', 'i', 's' }; static const symbol s_8_63[4] = { 0xC3, 0xA1, 'i', 's' }; static const symbol s_8_64[4] = { 0xC3, 0xA9, 'i', 's' }; static const symbol s_8_65[6] = { 'a', 'r', 0xC3, 0xA9, 'i', 's' }; static const symbol s_8_66[6] = { 'e', 'r', 0xC3, 0xA9, 'i', 's' }; static const symbol s_8_67[6] = { 'i', 'r', 0xC3, 0xA9, 'i', 's' }; static const symbol s_8_68[4] = { 'a', 'd', 'o', 's' }; static const symbol s_8_69[4] = { 'i', 'd', 'o', 's' }; static const symbol s_8_70[4] = { 'a', 'm', 'o', 's' }; static const symbol s_8_71[7] = { 0xC3, 0xA1, 'b', 'a', 'm', 'o', 's' }; static const symbol s_8_72[7] = { 0xC3, 0xA1, 'r', 'a', 'm', 'o', 's' }; static const symbol s_8_73[8] = { 'i', 0xC3, 0xA9, 'r', 'a', 'm', 'o', 's' }; static const symbol s_8_74[6] = { 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_8_75[8] = { 'a', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_8_76[8] = { 'e', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_8_77[8] = { 'i', 'r', 0xC3, 0xAD, 'a', 'm', 'o', 's' }; static const symbol s_8_78[4] = { 'e', 'm', 'o', 's' }; static const symbol s_8_79[6] = { 'a', 'r', 'e', 'm', 'o', 's' }; static const symbol s_8_80[6] = { 'e', 'r', 'e', 'm', 'o', 's' }; static const symbol s_8_81[6] = { 'i', 'r', 'e', 'm', 'o', 's' }; static const symbol s_8_82[7] = { 0xC3, 0xA1, 's', 'e', 'm', 'o', 's' }; static const symbol s_8_83[8] = { 'i', 0xC3, 0xA9, 's', 'e', 'm', 'o', 's' }; static const symbol s_8_84[4] = { 'i', 'm', 'o', 's' }; static const symbol s_8_85[5] = { 'a', 'r', 0xC3, 0xA1, 's' }; static const symbol s_8_86[5] = { 'e', 'r', 0xC3, 0xA1, 's' }; static const symbol s_8_87[5] = { 'i', 'r', 0xC3, 0xA1, 's' }; static const symbol s_8_88[3] = { 0xC3, 0xAD, 's' }; static const symbol s_8_89[4] = { 'a', 'r', 0xC3, 0xA1 }; static const symbol s_8_90[4] = { 'e', 'r', 0xC3, 0xA1 }; static const symbol s_8_91[4] = { 'i', 'r', 0xC3, 0xA1 }; static const symbol s_8_92[4] = { 'a', 'r', 0xC3, 0xA9 }; static const symbol s_8_93[4] = { 'e', 'r', 0xC3, 0xA9 }; static const symbol s_8_94[4] = { 'i', 'r', 0xC3, 0xA9 }; static const symbol s_8_95[3] = { 'i', 0xC3, 0xB3 }; static const struct among a_8[96] = { /* 0 */ { 3, s_8_0, -1, 2, 0}, /* 1 */ { 3, s_8_1, -1, 2, 0}, /* 2 */ { 3, s_8_2, -1, 2, 0}, /* 3 */ { 3, s_8_3, -1, 2, 0}, /* 4 */ { 4, s_8_4, -1, 2, 0}, /* 5 */ { 3, s_8_5, -1, 2, 0}, /* 6 */ { 5, s_8_6, 5, 2, 0}, /* 7 */ { 5, s_8_7, 5, 2, 0}, /* 8 */ { 5, s_8_8, 5, 2, 0}, /* 9 */ { 2, s_8_9, -1, 2, 0}, /* 10 */ { 2, s_8_10, -1, 2, 0}, /* 11 */ { 2, s_8_11, -1, 2, 0}, /* 12 */ { 3, s_8_12, -1, 2, 0}, /* 13 */ { 4, s_8_13, -1, 2, 0}, /* 14 */ { 4, s_8_14, -1, 2, 0}, /* 15 */ { 4, s_8_15, -1, 2, 0}, /* 16 */ { 2, s_8_16, -1, 2, 0}, /* 17 */ { 4, s_8_17, 16, 2, 0}, /* 18 */ { 4, s_8_18, 16, 2, 0}, /* 19 */ { 5, s_8_19, 16, 2, 0}, /* 20 */ { 4, s_8_20, 16, 2, 0}, /* 21 */ { 6, s_8_21, 20, 2, 0}, /* 22 */ { 6, s_8_22, 20, 2, 0}, /* 23 */ { 6, s_8_23, 20, 2, 0}, /* 24 */ { 2, s_8_24, -1, 1, 0}, /* 25 */ { 4, s_8_25, 24, 2, 0}, /* 26 */ { 5, s_8_26, 24, 2, 0}, /* 27 */ { 4, s_8_27, -1, 2, 0}, /* 28 */ { 5, s_8_28, -1, 2, 0}, /* 29 */ { 5, s_8_29, -1, 2, 0}, /* 30 */ { 5, s_8_30, -1, 2, 0}, /* 31 */ { 5, s_8_31, -1, 2, 0}, /* 32 */ { 3, s_8_32, -1, 2, 0}, /* 33 */ { 3, s_8_33, -1, 2, 0}, /* 34 */ { 4, s_8_34, -1, 2, 0}, /* 35 */ { 5, s_8_35, -1, 2, 0}, /* 36 */ { 2, s_8_36, -1, 2, 0}, /* 37 */ { 2, s_8_37, -1, 2, 0}, /* 38 */ { 2, s_8_38, -1, 2, 0}, /* 39 */ { 2, s_8_39, -1, 2, 0}, /* 40 */ { 4, s_8_40, 39, 2, 0}, /* 41 */ { 4, s_8_41, 39, 2, 0}, /* 42 */ { 4, s_8_42, 39, 2, 0}, /* 43 */ { 4, s_8_43, 39, 2, 0}, /* 44 */ { 5, s_8_44, 39, 2, 0}, /* 45 */ { 4, s_8_45, 39, 2, 0}, /* 46 */ { 6, s_8_46, 45, 2, 0}, /* 47 */ { 6, s_8_47, 45, 2, 0}, /* 48 */ { 6, s_8_48, 45, 2, 0}, /* 49 */ { 2, s_8_49, -1, 1, 0}, /* 50 */ { 4, s_8_50, 49, 2, 0}, /* 51 */ { 5, s_8_51, 49, 2, 0}, /* 52 */ { 5, s_8_52, -1, 2, 0}, /* 53 */ { 5, s_8_53, -1, 2, 0}, /* 54 */ { 6, s_8_54, -1, 2, 0}, /* 55 */ { 5, s_8_55, -1, 2, 0}, /* 56 */ { 7, s_8_56, 55, 2, 0}, /* 57 */ { 7, s_8_57, 55, 2, 0}, /* 58 */ { 7, s_8_58, 55, 2, 0}, /* 59 */ { 5, s_8_59, -1, 2, 0}, /* 60 */ { 6, s_8_60, -1, 2, 0}, /* 61 */ { 6, s_8_61, -1, 2, 0}, /* 62 */ { 6, s_8_62, -1, 2, 0}, /* 63 */ { 4, s_8_63, -1, 2, 0}, /* 64 */ { 4, s_8_64, -1, 1, 0}, /* 65 */ { 6, s_8_65, 64, 2, 0}, /* 66 */ { 6, s_8_66, 64, 2, 0}, /* 67 */ { 6, s_8_67, 64, 2, 0}, /* 68 */ { 4, s_8_68, -1, 2, 0}, /* 69 */ { 4, s_8_69, -1, 2, 0}, /* 70 */ { 4, s_8_70, -1, 2, 0}, /* 71 */ { 7, s_8_71, 70, 2, 0}, /* 72 */ { 7, s_8_72, 70, 2, 0}, /* 73 */ { 8, s_8_73, 70, 2, 0}, /* 74 */ { 6, s_8_74, 70, 2, 0}, /* 75 */ { 8, s_8_75, 74, 2, 0}, /* 76 */ { 8, s_8_76, 74, 2, 0}, /* 77 */ { 8, s_8_77, 74, 2, 0}, /* 78 */ { 4, s_8_78, -1, 1, 0}, /* 79 */ { 6, s_8_79, 78, 2, 0}, /* 80 */ { 6, s_8_80, 78, 2, 0}, /* 81 */ { 6, s_8_81, 78, 2, 0}, /* 82 */ { 7, s_8_82, 78, 2, 0}, /* 83 */ { 8, s_8_83, 78, 2, 0}, /* 84 */ { 4, s_8_84, -1, 2, 0}, /* 85 */ { 5, s_8_85, -1, 2, 0}, /* 86 */ { 5, s_8_86, -1, 2, 0}, /* 87 */ { 5, s_8_87, -1, 2, 0}, /* 88 */ { 3, s_8_88, -1, 2, 0}, /* 89 */ { 4, s_8_89, -1, 2, 0}, /* 90 */ { 4, s_8_90, -1, 2, 0}, /* 91 */ { 4, s_8_91, -1, 2, 0}, /* 92 */ { 4, s_8_92, -1, 2, 0}, /* 93 */ { 4, s_8_93, -1, 2, 0}, /* 94 */ { 4, s_8_94, -1, 2, 0}, /* 95 */ { 3, s_8_95, -1, 2, 0} }; static const symbol s_9_0[1] = { 'a' }; static const symbol s_9_1[1] = { 'e' }; static const symbol s_9_2[1] = { 'o' }; static const symbol s_9_3[2] = { 'o', 's' }; static const symbol s_9_4[2] = { 0xC3, 0xA1 }; static const symbol s_9_5[2] = { 0xC3, 0xA9 }; static const symbol s_9_6[2] = { 0xC3, 0xAD }; static const symbol s_9_7[2] = { 0xC3, 0xB3 }; static const struct among a_9[8] = { /* 0 */ { 1, s_9_0, -1, 1, 0}, /* 1 */ { 1, s_9_1, -1, 2, 0}, /* 2 */ { 1, s_9_2, -1, 1, 0}, /* 3 */ { 2, s_9_3, -1, 1, 0}, /* 4 */ { 2, s_9_4, -1, 1, 0}, /* 5 */ { 2, s_9_5, -1, 2, 0}, /* 6 */ { 2, s_9_6, -1, 1, 0}, /* 7 */ { 2, s_9_7, -1, 1, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 4, 10 }; static const symbol s_0[] = { 'a' }; static const symbol s_1[] = { 'e' }; static const symbol s_2[] = { 'i' }; static const symbol s_3[] = { 'o' }; static const symbol s_4[] = { 'u' }; static const symbol s_5[] = { 'i', 'e', 'n', 'd', 'o' }; static const symbol s_6[] = { 'a', 'n', 'd', 'o' }; static const symbol s_7[] = { 'a', 'r' }; static const symbol s_8[] = { 'e', 'r' }; static const symbol s_9[] = { 'i', 'r' }; static const symbol s_10[] = { 'i', 'c' }; static const symbol s_11[] = { 'l', 'o', 'g' }; static const symbol s_12[] = { 'u' }; static const symbol s_13[] = { 'e', 'n', 't', 'e' }; static const symbol s_14[] = { 'a', 't' }; static const symbol s_15[] = { 'a', 't' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $pV = , line 33 */ z->I[1] = z->l; /* $p1 = , line 34 */ z->I[2] = z->l; /* $p2 = , line 35 */ { int c1 = z->c; /* do, line 37 */ { int c2 = z->c; /* or, line 39 */ if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab2; /* grouping v, line 38 */ { int c3 = z->c; /* or, line 38 */ if (out_grouping_U(z, g_v, 97, 252, 0)) goto lab4; /* non v, line 38 */ { /* gopast */ /* grouping v, line 38 */ int ret = out_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab4; z->c += ret; } goto lab3; lab4: z->c = c3; if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab2; /* grouping v, line 38 */ { /* gopast */ /* non v, line 38 */ int ret = in_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab2; z->c += ret; } } lab3: goto lab1; lab2: z->c = c2; if (out_grouping_U(z, g_v, 97, 252, 0)) goto lab0; /* non v, line 40 */ { int c4 = z->c; /* or, line 40 */ if (out_grouping_U(z, g_v, 97, 252, 0)) goto lab6; /* non v, line 40 */ { /* gopast */ /* grouping v, line 40 */ int ret = out_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab6; z->c += ret; } goto lab5; lab6: z->c = c4; if (in_grouping_U(z, g_v, 97, 252, 0)) goto lab0; /* grouping v, line 40 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 40 */ } } lab5: ; } lab1: z->I[0] = z->c; /* setmark pV, line 41 */ lab0: z->c = c1; } { int c5 = z->c; /* do, line 43 */ { /* gopast */ /* grouping v, line 44 */ int ret = out_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 44 */ int ret = in_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[1] = z->c; /* setmark p1, line 44 */ { /* gopast */ /* grouping v, line 45 */ int ret = out_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } { /* gopast */ /* non v, line 45 */ int ret = in_grouping_U(z, g_v, 97, 252, 1); if (ret < 0) goto lab7; z->c += ret; } z->I[2] = z->c; /* setmark p2, line 45 */ lab7: z->c = c5; } return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ int among_var; while(1) { /* repeat, line 49 */ int c1 = z->c; z->bra = z->c; /* [, line 50 */ if (z->c + 1 >= z->l || z->p[z->c + 1] >> 5 != 5 || !((67641858 >> (z->p[z->c + 1] & 0x1f)) & 1)) among_var = 6; else /* substring, line 50 */ among_var = find_among(z, a_0, 6); if (!(among_var)) goto lab0; z->ket = z->c; /* ], line 50 */ switch (among_var) { /* among, line 50 */ case 0: goto lab0; case 1: { int ret = slice_from_s(z, 1, s_0); /* <-, line 51 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 1, s_1); /* <-, line 52 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_2); /* <-, line 53 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_3); /* <-, line 54 */ if (ret < 0) return ret; } break; case 5: { int ret = slice_from_s(z, 1, s_4); /* <-, line 55 */ if (ret < 0) return ret; } break; case 6: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab0; z->c = ret; /* next, line 57 */ } break; } continue; lab0: z->c = c1; break; } return 1; } static int r_RV(struct SN_env * z) { /* backwardmode */ if (!(z->I[0] <= z->c)) return 0; /* $pV <= , line 63 */ return 1; } static int r_R1(struct SN_env * z) { /* backwardmode */ if (!(z->I[1] <= z->c)) return 0; /* $p1 <= , line 64 */ return 1; } static int r_R2(struct SN_env * z) { /* backwardmode */ if (!(z->I[2] <= z->c)) return 0; /* $p2 <= , line 65 */ return 1; } static int r_attached_pronoun(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 68 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((557090 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 68 */ if (!(find_among_b(z, a_1, 13))) return 0; z->bra = z->c; /* ], line 68 */ if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 111 && z->p[z->c - 1] != 114)) return 0; /* substring, line 72 */ among_var = find_among_b(z, a_2, 11); if (!(among_var)) return 0; { int ret = r_RV(z); /* call RV, line 72 */ if (ret <= 0) return ret; } switch (among_var) { /* among, line 72 */ case 0: return 0; case 1: z->bra = z->c; /* ], line 73 */ { int ret = slice_from_s(z, 5, s_5); /* <-, line 73 */ if (ret < 0) return ret; } break; case 2: z->bra = z->c; /* ], line 74 */ { int ret = slice_from_s(z, 4, s_6); /* <-, line 74 */ if (ret < 0) return ret; } break; case 3: z->bra = z->c; /* ], line 75 */ { int ret = slice_from_s(z, 2, s_7); /* <-, line 75 */ if (ret < 0) return ret; } break; case 4: z->bra = z->c; /* ], line 76 */ { int ret = slice_from_s(z, 2, s_8); /* <-, line 76 */ if (ret < 0) return ret; } break; case 5: z->bra = z->c; /* ], line 77 */ { int ret = slice_from_s(z, 2, s_9); /* <-, line 77 */ if (ret < 0) return ret; } break; case 6: { int ret = slice_del(z); /* delete, line 81 */ if (ret < 0) return ret; } break; case 7: if (z->c <= z->lb || z->p[z->c - 1] != 'u') return 0; /* literal, line 82 */ z->c--; { int ret = slice_del(z); /* delete, line 82 */ if (ret < 0) return ret; } break; } return 1; } static int r_standard_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 87 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((835634 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* substring, line 87 */ among_var = find_among_b(z, a_6, 46); if (!(among_var)) return 0; z->bra = z->c; /* ], line 87 */ switch (among_var) { /* among, line 87 */ case 0: return 0; case 1: { int ret = r_R2(z); /* call R2, line 99 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 99 */ if (ret < 0) return ret; } break; case 2: { int ret = r_R2(z); /* call R2, line 105 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 105 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 106 */ z->ket = z->c; /* [, line 106 */ if (!(eq_s_b(z, 2, s_10))) { z->c = z->l - m1; goto lab0; } /* literal, line 106 */ z->bra = z->c; /* ], line 106 */ { int ret = r_R2(z); /* call R2, line 106 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 106 */ if (ret < 0) return ret; } lab0: ; } break; case 3: { int ret = r_R2(z); /* call R2, line 111 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 3, s_11); /* <-, line 111 */ if (ret < 0) return ret; } break; case 4: { int ret = r_R2(z); /* call R2, line 115 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 1, s_12); /* <-, line 115 */ if (ret < 0) return ret; } break; case 5: { int ret = r_R2(z); /* call R2, line 119 */ if (ret <= 0) return ret; } { int ret = slice_from_s(z, 4, s_13); /* <-, line 119 */ if (ret < 0) return ret; } break; case 6: { int ret = r_R1(z); /* call R1, line 123 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 123 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 124 */ z->ket = z->c; /* [, line 125 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4718616 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m2; goto lab1; } /* substring, line 125 */ among_var = find_among_b(z, a_3, 4); if (!(among_var)) { z->c = z->l - m2; goto lab1; } z->bra = z->c; /* ], line 125 */ { int ret = r_R2(z); /* call R2, line 125 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 125 */ if (ret < 0) return ret; } switch (among_var) { /* among, line 125 */ case 0: { z->c = z->l - m2; goto lab1; } case 1: z->ket = z->c; /* [, line 126 */ if (!(eq_s_b(z, 2, s_14))) { z->c = z->l - m2; goto lab1; } /* literal, line 126 */ z->bra = z->c; /* ], line 126 */ { int ret = r_R2(z); /* call R2, line 126 */ if (ret == 0) { z->c = z->l - m2; goto lab1; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 126 */ if (ret < 0) return ret; } break; } lab1: ; } break; case 7: { int ret = r_R2(z); /* call R2, line 135 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 135 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 136 */ z->ket = z->c; /* [, line 137 */ if (z->c - 3 <= z->lb || z->p[z->c - 1] != 101) { z->c = z->l - m3; goto lab2; } /* substring, line 137 */ among_var = find_among_b(z, a_4, 3); if (!(among_var)) { z->c = z->l - m3; goto lab2; } z->bra = z->c; /* ], line 137 */ switch (among_var) { /* among, line 137 */ case 0: { z->c = z->l - m3; goto lab2; } case 1: { int ret = r_R2(z); /* call R2, line 140 */ if (ret == 0) { z->c = z->l - m3; goto lab2; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 140 */ if (ret < 0) return ret; } break; } lab2: ; } break; case 8: { int ret = r_R2(z); /* call R2, line 147 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 147 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 148 */ z->ket = z->c; /* [, line 149 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((4198408 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->c = z->l - m4; goto lab3; } /* substring, line 149 */ among_var = find_among_b(z, a_5, 3); if (!(among_var)) { z->c = z->l - m4; goto lab3; } z->bra = z->c; /* ], line 149 */ switch (among_var) { /* among, line 149 */ case 0: { z->c = z->l - m4; goto lab3; } case 1: { int ret = r_R2(z); /* call R2, line 152 */ if (ret == 0) { z->c = z->l - m4; goto lab3; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } break; } lab3: ; } break; case 9: { int ret = r_R2(z); /* call R2, line 159 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 159 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 160 */ z->ket = z->c; /* [, line 161 */ if (!(eq_s_b(z, 2, s_15))) { z->c = z->l - m5; goto lab4; } /* literal, line 161 */ z->bra = z->c; /* ], line 161 */ { int ret = r_R2(z); /* call R2, line 161 */ if (ret == 0) { z->c = z->l - m5; goto lab4; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 161 */ if (ret < 0) return ret; } lab4: ; } break; } return 1; } static int r_y_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 168 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 168 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 168 */ among_var = find_among_b(z, a_7, 12); /* substring, line 168 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 168 */ z->lb = mlimit1; } switch (among_var) { /* among, line 168 */ case 0: return 0; case 1: if (z->c <= z->lb || z->p[z->c - 1] != 'u') return 0; /* literal, line 171 */ z->c--; { int ret = slice_del(z); /* delete, line 171 */ if (ret < 0) return ret; } break; } return 1; } static int r_verb_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 176 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 176 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 176 */ among_var = find_among_b(z, a_8, 96); /* substring, line 176 */ if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 176 */ z->lb = mlimit1; } switch (among_var) { /* among, line 176 */ case 0: return 0; case 1: { int m2 = z->l - z->c; (void)m2; /* try, line 179 */ if (z->c <= z->lb || z->p[z->c - 1] != 'u') { z->c = z->l - m2; goto lab0; } /* literal, line 179 */ z->c--; { int m_test3 = z->l - z->c; /* test, line 179 */ if (z->c <= z->lb || z->p[z->c - 1] != 'g') { z->c = z->l - m2; goto lab0; } /* literal, line 179 */ z->c--; z->c = z->l - m_test3; } lab0: ; } z->bra = z->c; /* ], line 179 */ { int ret = slice_del(z); /* delete, line 179 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_del(z); /* delete, line 200 */ if (ret < 0) return ret; } break; } return 1; } static int r_residual_suffix(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 205 */ among_var = find_among_b(z, a_9, 8); /* substring, line 205 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 205 */ switch (among_var) { /* among, line 205 */ case 0: return 0; case 1: { int ret = r_RV(z); /* call RV, line 208 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 208 */ if (ret < 0) return ret; } break; case 2: { int ret = r_RV(z); /* call RV, line 210 */ if (ret <= 0) return ret; } { int ret = slice_del(z); /* delete, line 210 */ if (ret < 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* try, line 210 */ z->ket = z->c; /* [, line 210 */ if (z->c <= z->lb || z->p[z->c - 1] != 'u') { z->c = z->l - m1; goto lab0; } /* literal, line 210 */ z->c--; z->bra = z->c; /* ], line 210 */ { int m_test2 = z->l - z->c; /* test, line 210 */ if (z->c <= z->lb || z->p[z->c - 1] != 'g') { z->c = z->l - m1; goto lab0; } /* literal, line 210 */ z->c--; z->c = z->l - m_test2; } { int ret = r_RV(z); /* call RV, line 210 */ if (ret == 0) { z->c = z->l - m1; goto lab0; } if (ret < 0) return ret; } { int ret = slice_del(z); /* delete, line 210 */ if (ret < 0) return ret; } lab0: ; } break; } return 1; } extern int spanish_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 216 */ { int ret = r_mark_regions(z); /* call mark_regions, line 216 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 217 */ { int m2 = z->l - z->c; (void)m2; /* do, line 218 */ { int ret = r_attached_pronoun(z); /* call attached_pronoun, line 218 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 219 */ { int m4 = z->l - z->c; (void)m4; /* or, line 219 */ { int ret = r_standard_suffix(z); /* call standard_suffix, line 219 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } goto lab3; lab4: z->c = z->l - m4; { int ret = r_y_verb_suffix(z); /* call y_verb_suffix, line 220 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } goto lab3; lab5: z->c = z->l - m4; { int ret = r_verb_suffix(z); /* call verb_suffix, line 221 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } } lab3: lab2: z->c = z->l - m3; } { int m5 = z->l - z->c; (void)m5; /* do, line 223 */ { int ret = r_residual_suffix(z); /* call residual_suffix, line 223 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = z->l - m5; } z->c = z->lb; { int c6 = z->c; /* do, line 225 */ { int ret = r_postlude(z); /* call postlude, line 225 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = c6; } return 1; } extern struct SN_env * spanish_UTF_8_create_env(void) { return SN_create_env(0, 3, 0); } extern void spanish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_spanish.h000066400000000000000000000005261364126773500236320ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * spanish_UTF_8_create_env(void); extern void spanish_UTF_8_close_env(struct SN_env * z); extern int spanish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_swedish.c000066400000000000000000000254231364126773500236310ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int swedish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_other_suffix(struct SN_env * z); static int r_consonant_pair(struct SN_env * z); static int r_main_suffix(struct SN_env * z); static int r_mark_regions(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * swedish_UTF_8_create_env(void); extern void swedish_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 'a' }; static const symbol s_0_1[4] = { 'a', 'r', 'n', 'a' }; static const symbol s_0_2[4] = { 'e', 'r', 'n', 'a' }; static const symbol s_0_3[7] = { 'h', 'e', 't', 'e', 'r', 'n', 'a' }; static const symbol s_0_4[4] = { 'o', 'r', 'n', 'a' }; static const symbol s_0_5[2] = { 'a', 'd' }; static const symbol s_0_6[1] = { 'e' }; static const symbol s_0_7[3] = { 'a', 'd', 'e' }; static const symbol s_0_8[4] = { 'a', 'n', 'd', 'e' }; static const symbol s_0_9[4] = { 'a', 'r', 'n', 'e' }; static const symbol s_0_10[3] = { 'a', 'r', 'e' }; static const symbol s_0_11[4] = { 'a', 's', 't', 'e' }; static const symbol s_0_12[2] = { 'e', 'n' }; static const symbol s_0_13[5] = { 'a', 'n', 'd', 'e', 'n' }; static const symbol s_0_14[4] = { 'a', 'r', 'e', 'n' }; static const symbol s_0_15[5] = { 'h', 'e', 't', 'e', 'n' }; static const symbol s_0_16[3] = { 'e', 'r', 'n' }; static const symbol s_0_17[2] = { 'a', 'r' }; static const symbol s_0_18[2] = { 'e', 'r' }; static const symbol s_0_19[5] = { 'h', 'e', 't', 'e', 'r' }; static const symbol s_0_20[2] = { 'o', 'r' }; static const symbol s_0_21[1] = { 's' }; static const symbol s_0_22[2] = { 'a', 's' }; static const symbol s_0_23[5] = { 'a', 'r', 'n', 'a', 's' }; static const symbol s_0_24[5] = { 'e', 'r', 'n', 'a', 's' }; static const symbol s_0_25[5] = { 'o', 'r', 'n', 'a', 's' }; static const symbol s_0_26[2] = { 'e', 's' }; static const symbol s_0_27[4] = { 'a', 'd', 'e', 's' }; static const symbol s_0_28[5] = { 'a', 'n', 'd', 'e', 's' }; static const symbol s_0_29[3] = { 'e', 'n', 's' }; static const symbol s_0_30[5] = { 'a', 'r', 'e', 'n', 's' }; static const symbol s_0_31[6] = { 'h', 'e', 't', 'e', 'n', 's' }; static const symbol s_0_32[4] = { 'e', 'r', 'n', 's' }; static const symbol s_0_33[2] = { 'a', 't' }; static const symbol s_0_34[5] = { 'a', 'n', 'd', 'e', 't' }; static const symbol s_0_35[3] = { 'h', 'e', 't' }; static const symbol s_0_36[3] = { 'a', 's', 't' }; static const struct among a_0[37] = { /* 0 */ { 1, s_0_0, -1, 1, 0}, /* 1 */ { 4, s_0_1, 0, 1, 0}, /* 2 */ { 4, s_0_2, 0, 1, 0}, /* 3 */ { 7, s_0_3, 2, 1, 0}, /* 4 */ { 4, s_0_4, 0, 1, 0}, /* 5 */ { 2, s_0_5, -1, 1, 0}, /* 6 */ { 1, s_0_6, -1, 1, 0}, /* 7 */ { 3, s_0_7, 6, 1, 0}, /* 8 */ { 4, s_0_8, 6, 1, 0}, /* 9 */ { 4, s_0_9, 6, 1, 0}, /* 10 */ { 3, s_0_10, 6, 1, 0}, /* 11 */ { 4, s_0_11, 6, 1, 0}, /* 12 */ { 2, s_0_12, -1, 1, 0}, /* 13 */ { 5, s_0_13, 12, 1, 0}, /* 14 */ { 4, s_0_14, 12, 1, 0}, /* 15 */ { 5, s_0_15, 12, 1, 0}, /* 16 */ { 3, s_0_16, -1, 1, 0}, /* 17 */ { 2, s_0_17, -1, 1, 0}, /* 18 */ { 2, s_0_18, -1, 1, 0}, /* 19 */ { 5, s_0_19, 18, 1, 0}, /* 20 */ { 2, s_0_20, -1, 1, 0}, /* 21 */ { 1, s_0_21, -1, 2, 0}, /* 22 */ { 2, s_0_22, 21, 1, 0}, /* 23 */ { 5, s_0_23, 22, 1, 0}, /* 24 */ { 5, s_0_24, 22, 1, 0}, /* 25 */ { 5, s_0_25, 22, 1, 0}, /* 26 */ { 2, s_0_26, 21, 1, 0}, /* 27 */ { 4, s_0_27, 26, 1, 0}, /* 28 */ { 5, s_0_28, 26, 1, 0}, /* 29 */ { 3, s_0_29, 21, 1, 0}, /* 30 */ { 5, s_0_30, 29, 1, 0}, /* 31 */ { 6, s_0_31, 29, 1, 0}, /* 32 */ { 4, s_0_32, 21, 1, 0}, /* 33 */ { 2, s_0_33, -1, 1, 0}, /* 34 */ { 5, s_0_34, -1, 1, 0}, /* 35 */ { 3, s_0_35, -1, 1, 0}, /* 36 */ { 3, s_0_36, -1, 1, 0} }; static const symbol s_1_0[2] = { 'd', 'd' }; static const symbol s_1_1[2] = { 'g', 'd' }; static const symbol s_1_2[2] = { 'n', 'n' }; static const symbol s_1_3[2] = { 'd', 't' }; static const symbol s_1_4[2] = { 'g', 't' }; static const symbol s_1_5[2] = { 'k', 't' }; static const symbol s_1_6[2] = { 't', 't' }; static const struct among a_1[7] = { /* 0 */ { 2, s_1_0, -1, -1, 0}, /* 1 */ { 2, s_1_1, -1, -1, 0}, /* 2 */ { 2, s_1_2, -1, -1, 0}, /* 3 */ { 2, s_1_3, -1, -1, 0}, /* 4 */ { 2, s_1_4, -1, -1, 0}, /* 5 */ { 2, s_1_5, -1, -1, 0}, /* 6 */ { 2, s_1_6, -1, -1, 0} }; static const symbol s_2_0[2] = { 'i', 'g' }; static const symbol s_2_1[3] = { 'l', 'i', 'g' }; static const symbol s_2_2[3] = { 'e', 'l', 's' }; static const symbol s_2_3[5] = { 'f', 'u', 'l', 'l', 't' }; static const symbol s_2_4[5] = { 'l', 0xC3, 0xB6, 's', 't' }; static const struct among a_2[5] = { /* 0 */ { 2, s_2_0, -1, 1, 0}, /* 1 */ { 3, s_2_1, 0, 1, 0}, /* 2 */ { 3, s_2_2, -1, 1, 0}, /* 3 */ { 5, s_2_3, -1, 3, 0}, /* 4 */ { 5, s_2_4, -1, 2, 0} }; static const unsigned char g_v[] = { 17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 32 }; static const unsigned char g_s_ending[] = { 119, 127, 149 }; static const symbol s_0[] = { 'l', 0xC3, 0xB6, 's' }; static const symbol s_1[] = { 'f', 'u', 'l', 'l' }; static int r_mark_regions(struct SN_env * z) { /* forwardmode */ z->I[0] = z->l; /* $p1 = , line 28 */ { int c_test1 = z->c; /* test, line 29 */ { int ret = skip_utf8(z->p, z->c, 0, z->l, + 3); /* hop, line 29 */ if (ret < 0) return 0; z->c = ret; } z->I[1] = z->c; /* setmark x, line 29 */ z->c = c_test1; } if (out_grouping_U(z, g_v, 97, 246, 1) < 0) return 0; /* goto */ /* grouping v, line 30 */ { /* gopast */ /* non v, line 30 */ int ret = in_grouping_U(z, g_v, 97, 246, 1); if (ret < 0) return 0; z->c += ret; } z->I[0] = z->c; /* setmark p1, line 30 */ /* try, line 31 */ if (!(z->I[0] < z->I[1])) goto lab0; /* $p1 < , line 31 */ z->I[0] = z->I[1]; /* $p1 = , line 31 */ lab0: return 1; } static int r_main_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 37 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 37 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 37 */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1851442 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 37 */ among_var = find_among_b(z, a_0, 37); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 37 */ z->lb = mlimit1; } switch (among_var) { /* among, line 38 */ case 0: return 0; case 1: { int ret = slice_del(z); /* delete, line 44 */ if (ret < 0) return ret; } break; case 2: if (in_grouping_b_U(z, g_s_ending, 98, 121, 0)) return 0; /* grouping s_ending, line 46 */ { int ret = slice_del(z); /* delete, line 46 */ if (ret < 0) return ret; } break; } return 1; } static int r_consonant_pair(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* setlimit, line 50 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 50 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; { int m2 = z->l - z->c; (void)m2; /* and, line 52 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1064976 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* among, line 51 */ if (!(find_among_b(z, a_1, 7))) { z->lb = mlimit1; return 0; } z->c = z->l - m2; z->ket = z->c; /* [, line 52 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) { z->lb = mlimit1; return 0; } z->c = ret; /* next, line 52 */ } z->bra = z->c; /* ], line 52 */ { int ret = slice_del(z); /* delete, line 52 */ if (ret < 0) return ret; } } z->lb = mlimit1; } return 1; } static int r_other_suffix(struct SN_env * z) { /* backwardmode */ int among_var; { int m1 = z->l - z->c; (void)m1; /* setlimit, line 55 */ int mlimit1; if (z->c < z->I[0]) return 0; z->c = z->I[0]; /* tomark, line 55 */ mlimit1 = z->lb; z->lb = z->c; z->c = z->l - m1; z->ket = z->c; /* [, line 56 */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((1572992 >> (z->p[z->c - 1] & 0x1f)) & 1)) { z->lb = mlimit1; return 0; } /* substring, line 56 */ among_var = find_among_b(z, a_2, 5); if (!(among_var)) { z->lb = mlimit1; return 0; } z->bra = z->c; /* ], line 56 */ switch (among_var) { /* among, line 56 */ case 0: { z->lb = mlimit1; return 0; } case 1: { int ret = slice_del(z); /* delete, line 57 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 4, s_0); /* <-, line 58 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 4, s_1); /* <-, line 59 */ if (ret < 0) return ret; } break; } z->lb = mlimit1; } return 1; } extern int swedish_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* do, line 66 */ { int ret = r_mark_regions(z); /* call mark_regions, line 66 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 67 */ { int m2 = z->l - z->c; (void)m2; /* do, line 68 */ { int ret = r_main_suffix(z); /* call main_suffix, line 68 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 69 */ { int ret = r_consonant_pair(z); /* call consonant_pair, line 69 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } { int m4 = z->l - z->c; (void)m4; /* do, line 70 */ { int ret = r_other_suffix(z); /* call other_suffix, line 70 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = z->l - m4; } z->c = z->lb; return 1; } extern struct SN_env * swedish_UTF_8_create_env(void) { return SN_create_env(0, 2, 0); } extern void swedish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_swedish.h000066400000000000000000000005261364126773500236330ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * swedish_UTF_8_create_env(void); extern void swedish_UTF_8_close_env(struct SN_env * z); extern int swedish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_tamil.c000066400000000000000000002346211364126773500232730ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int tamil_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_has_min_length(struct SN_env * z); static int r_remove_common_word_endings(struct SN_env * z); static int r_remove_tense_suffixes(struct SN_env * z); static int r_remove_tense_suffix(struct SN_env * z); static int r_fix_endings(struct SN_env * z); static int r_fix_ending(struct SN_env * z); static int r_fix_va_start(struct SN_env * z); static int r_remove_vetrumai_urupukal(struct SN_env * z); static int r_remove_um(struct SN_env * z); static int r_remove_command_suffixes(struct SN_env * z); static int r_remove_pronoun_prefixes(struct SN_env * z); static int r_remove_question_prefixes(struct SN_env * z); static int r_remove_question_suffixes(struct SN_env * z); static int r_remove_plural_suffix(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * tamil_UTF_8_create_env(void); extern void tamil_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_0_1[3] = { 0xE0, 0xAE, 0x99 }; static const symbol s_0_2[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_0_3[3] = { 0xE0, 0xAE, 0x9E }; static const symbol s_0_4[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_0_5[3] = { 0xE0, 0xAE, 0xA8 }; static const symbol s_0_6[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_0_7[3] = { 0xE0, 0xAE, 0xAE }; static const symbol s_0_8[3] = { 0xE0, 0xAE, 0xAF }; static const symbol s_0_9[3] = { 0xE0, 0xAE, 0xB5 }; static const struct among a_0[10] = { /* 0 */ { 3, s_0_0, -1, -1, 0}, /* 1 */ { 3, s_0_1, -1, -1, 0}, /* 2 */ { 3, s_0_2, -1, -1, 0}, /* 3 */ { 3, s_0_3, -1, -1, 0}, /* 4 */ { 3, s_0_4, -1, -1, 0}, /* 5 */ { 3, s_0_5, -1, -1, 0}, /* 6 */ { 3, s_0_6, -1, -1, 0}, /* 7 */ { 3, s_0_7, -1, -1, 0}, /* 8 */ { 3, s_0_8, -1, -1, 0}, /* 9 */ { 3, s_0_9, -1, -1, 0} }; static const symbol s_1_0[12] = { 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x8D }; static const symbol s_1_1[6] = { 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D }; static const symbol s_1_2[9] = { 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4 }; static const struct among a_1[3] = { /* 0 */ { 12, s_1_0, -1, -1, 0}, /* 1 */ { 6, s_1_1, -1, -1, 0}, /* 2 */ { 9, s_1_2, -1, -1, 0} }; static const symbol s_2_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_2_1[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_2_2[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_2[3] = { /* 0 */ { 3, s_2_0, -1, -1, 0}, /* 1 */ { 3, s_2_1, -1, -1, 0}, /* 2 */ { 3, s_2_2, -1, -1, 0} }; static const symbol s_3_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_3_1[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_3_2[3] = { 0xE0, 0xAE, 0x9F }; static const symbol s_3_3[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_3_4[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_3_5[3] = { 0xE0, 0xAE, 0xB1 }; static const struct among a_3[6] = { /* 0 */ { 3, s_3_0, -1, -1, 0}, /* 1 */ { 3, s_3_1, -1, -1, 0}, /* 2 */ { 3, s_3_2, -1, -1, 0}, /* 3 */ { 3, s_3_3, -1, -1, 0}, /* 4 */ { 3, s_3_4, -1, -1, 0}, /* 5 */ { 3, s_3_5, -1, -1, 0} }; static const symbol s_4_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_4_1[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_4_2[3] = { 0xE0, 0xAE, 0x9F }; static const symbol s_4_3[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_4_4[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_4_5[3] = { 0xE0, 0xAE, 0xB1 }; static const struct among a_4[6] = { /* 0 */ { 3, s_4_0, -1, -1, 0}, /* 1 */ { 3, s_4_1, -1, -1, 0}, /* 2 */ { 3, s_4_2, -1, -1, 0}, /* 3 */ { 3, s_4_3, -1, -1, 0}, /* 4 */ { 3, s_4_4, -1, -1, 0}, /* 5 */ { 3, s_4_5, -1, -1, 0} }; static const symbol s_5_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_5_1[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_5_2[3] = { 0xE0, 0xAE, 0x9F }; static const symbol s_5_3[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_5_4[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_5_5[3] = { 0xE0, 0xAE, 0xB1 }; static const struct among a_5[6] = { /* 0 */ { 3, s_5_0, -1, -1, 0}, /* 1 */ { 3, s_5_1, -1, -1, 0}, /* 2 */ { 3, s_5_2, -1, -1, 0}, /* 3 */ { 3, s_5_3, -1, -1, 0}, /* 4 */ { 3, s_5_4, -1, -1, 0}, /* 5 */ { 3, s_5_5, -1, -1, 0} }; static const symbol s_6_0[3] = { 0xE0, 0xAE, 0xAF }; static const symbol s_6_1[3] = { 0xE0, 0xAE, 0xB0 }; static const symbol s_6_2[3] = { 0xE0, 0xAE, 0xB2 }; static const symbol s_6_3[3] = { 0xE0, 0xAE, 0xB3 }; static const symbol s_6_4[3] = { 0xE0, 0xAE, 0xB4 }; static const symbol s_6_5[3] = { 0xE0, 0xAE, 0xB5 }; static const struct among a_6[6] = { /* 0 */ { 3, s_6_0, -1, -1, 0}, /* 1 */ { 3, s_6_1, -1, -1, 0}, /* 2 */ { 3, s_6_2, -1, -1, 0}, /* 3 */ { 3, s_6_3, -1, -1, 0}, /* 4 */ { 3, s_6_4, -1, -1, 0}, /* 5 */ { 3, s_6_5, -1, -1, 0} }; static const symbol s_7_0[3] = { 0xE0, 0xAE, 0x99 }; static const symbol s_7_1[3] = { 0xE0, 0xAE, 0x9E }; static const symbol s_7_2[3] = { 0xE0, 0xAE, 0xA3 }; static const symbol s_7_3[3] = { 0xE0, 0xAE, 0xA8 }; static const symbol s_7_4[3] = { 0xE0, 0xAE, 0xA9 }; static const symbol s_7_5[3] = { 0xE0, 0xAE, 0xAE }; static const struct among a_7[6] = { /* 0 */ { 3, s_7_0, -1, -1, 0}, /* 1 */ { 3, s_7_1, -1, -1, 0}, /* 2 */ { 3, s_7_2, -1, -1, 0}, /* 3 */ { 3, s_7_3, -1, -1, 0}, /* 4 */ { 3, s_7_4, -1, -1, 0}, /* 5 */ { 3, s_7_5, -1, -1, 0} }; static const symbol s_8_0[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8D }; static const symbol s_8_1[3] = { 0xE0, 0xAE, 0xAF }; static const symbol s_8_2[3] = { 0xE0, 0xAE, 0xB5 }; static const struct among a_8[3] = { /* 0 */ { 6, s_8_0, -1, -1, 0}, /* 1 */ { 3, s_8_1, -1, -1, 0}, /* 2 */ { 3, s_8_2, -1, -1, 0} }; static const symbol s_9_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_9_1[3] = { 0xE0, 0xAF, 0x81 }; static const symbol s_9_2[3] = { 0xE0, 0xAF, 0x82 }; static const symbol s_9_3[3] = { 0xE0, 0xAF, 0x86 }; static const symbol s_9_4[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_9_5[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_9_6[3] = { 0xE0, 0xAE, 0xBE }; static const symbol s_9_7[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_9[8] = { /* 0 */ { 3, s_9_0, -1, -1, 0}, /* 1 */ { 3, s_9_1, -1, -1, 0}, /* 2 */ { 3, s_9_2, -1, -1, 0}, /* 3 */ { 3, s_9_3, -1, -1, 0}, /* 4 */ { 3, s_9_4, -1, -1, 0}, /* 5 */ { 3, s_9_5, -1, -1, 0}, /* 6 */ { 3, s_9_6, -1, -1, 0}, /* 7 */ { 3, s_9_7, -1, -1, 0} }; static const symbol s_10_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_10_1[3] = { 0xE0, 0xAF, 0x81 }; static const symbol s_10_2[3] = { 0xE0, 0xAF, 0x82 }; static const symbol s_10_3[3] = { 0xE0, 0xAF, 0x86 }; static const symbol s_10_4[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_10_5[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_10_6[3] = { 0xE0, 0xAE, 0xBE }; static const symbol s_10_7[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_10[8] = { /* 0 */ { 3, s_10_0, -1, -1, 0}, /* 1 */ { 3, s_10_1, -1, -1, 0}, /* 2 */ { 3, s_10_2, -1, -1, 0}, /* 3 */ { 3, s_10_3, -1, -1, 0}, /* 4 */ { 3, s_10_4, -1, -1, 0}, /* 5 */ { 3, s_10_5, -1, -1, 0}, /* 6 */ { 3, s_10_6, -1, -1, 0}, /* 7 */ { 3, s_10_7, -1, -1, 0} }; static const symbol s_11_0[3] = { 0xE0, 0xAE, 0x85 }; static const symbol s_11_1[3] = { 0xE0, 0xAE, 0x87 }; static const symbol s_11_2[3] = { 0xE0, 0xAE, 0x89 }; static const struct among a_11[3] = { /* 0 */ { 3, s_11_0, -1, -1, 0}, /* 1 */ { 3, s_11_1, -1, -1, 0}, /* 2 */ { 3, s_11_2, -1, -1, 0} }; static const symbol s_12_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_12_1[3] = { 0xE0, 0xAE, 0x99 }; static const symbol s_12_2[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_12_3[3] = { 0xE0, 0xAE, 0x9E }; static const symbol s_12_4[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_12_5[3] = { 0xE0, 0xAE, 0xA8 }; static const symbol s_12_6[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_12_7[3] = { 0xE0, 0xAE, 0xAE }; static const symbol s_12_8[3] = { 0xE0, 0xAE, 0xAF }; static const symbol s_12_9[3] = { 0xE0, 0xAE, 0xB5 }; static const struct among a_12[10] = { /* 0 */ { 3, s_12_0, -1, -1, 0}, /* 1 */ { 3, s_12_1, -1, -1, 0}, /* 2 */ { 3, s_12_2, -1, -1, 0}, /* 3 */ { 3, s_12_3, -1, -1, 0}, /* 4 */ { 3, s_12_4, -1, -1, 0}, /* 5 */ { 3, s_12_5, -1, -1, 0}, /* 6 */ { 3, s_12_6, -1, -1, 0}, /* 7 */ { 3, s_12_7, -1, -1, 0}, /* 8 */ { 3, s_12_8, -1, -1, 0}, /* 9 */ { 3, s_12_9, -1, -1, 0} }; static const symbol s_13_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_13_1[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_13_2[3] = { 0xE0, 0xAE, 0x9F }; static const symbol s_13_3[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_13_4[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_13_5[3] = { 0xE0, 0xAE, 0xB1 }; static const struct among a_13[6] = { /* 0 */ { 3, s_13_0, -1, -1, 0}, /* 1 */ { 3, s_13_1, -1, -1, 0}, /* 2 */ { 3, s_13_2, -1, -1, 0}, /* 3 */ { 3, s_13_3, -1, -1, 0}, /* 4 */ { 3, s_13_4, -1, -1, 0}, /* 5 */ { 3, s_13_5, -1, -1, 0} }; static const symbol s_14_0[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_14_1[3] = { 0xE0, 0xAF, 0x8B }; static const symbol s_14_2[3] = { 0xE0, 0xAE, 0xBE }; static const struct among a_14[3] = { /* 0 */ { 3, s_14_0, -1, -1, 0}, /* 1 */ { 3, s_14_1, -1, -1, 0}, /* 2 */ { 3, s_14_2, -1, -1, 0} }; static const symbol s_15_0[6] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xBF }; static const symbol s_15_1[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF }; static const struct among a_15[2] = { /* 0 */ { 6, s_15_0, -1, -1, 0}, /* 1 */ { 6, s_15_1, -1, -1, 0} }; static const symbol s_16_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_16_1[3] = { 0xE0, 0xAF, 0x81 }; static const symbol s_16_2[3] = { 0xE0, 0xAF, 0x82 }; static const symbol s_16_3[3] = { 0xE0, 0xAF, 0x86 }; static const symbol s_16_4[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_16_5[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_16_6[3] = { 0xE0, 0xAE, 0xBE }; static const symbol s_16_7[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_16[8] = { /* 0 */ { 3, s_16_0, -1, -1, 0}, /* 1 */ { 3, s_16_1, -1, -1, 0}, /* 2 */ { 3, s_16_2, -1, -1, 0}, /* 3 */ { 3, s_16_3, -1, -1, 0}, /* 4 */ { 3, s_16_4, -1, -1, 0}, /* 5 */ { 3, s_16_5, -1, -1, 0}, /* 6 */ { 3, s_16_6, -1, -1, 0}, /* 7 */ { 3, s_16_7, -1, -1, 0} }; static const symbol s_17_0[15] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_17_1[18] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_17_2[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_17_3[12] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_17_4[18] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 }; static const symbol s_17_5[21] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB2, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_17_6[12] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F }; static const symbol s_17_7[15] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xA3 }; static const symbol s_17_8[9] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9 }; static const symbol s_17_9[18] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA4, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9 }; static const symbol s_17_10[15] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xB0, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xAF }; static const symbol s_17_11[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xBF }; static const symbol s_17_12[15] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAE, 0xBF }; static const struct among a_17[13] = { /* 0 */ { 15, s_17_0, -1, -1, 0}, /* 1 */ { 18, s_17_1, -1, -1, 0}, /* 2 */ { 9, s_17_2, -1, -1, 0}, /* 3 */ { 12, s_17_3, -1, -1, 0}, /* 4 */ { 18, s_17_4, -1, -1, 0}, /* 5 */ { 21, s_17_5, -1, -1, 0}, /* 6 */ { 12, s_17_6, -1, -1, 0}, /* 7 */ { 15, s_17_7, -1, -1, 0}, /* 8 */ { 9, s_17_8, -1, -1, 0}, /* 9 */ { 18, s_17_9, 8, -1, 0}, /* 10 */ { 15, s_17_10, -1, -1, 0}, /* 11 */ { 9, s_17_11, -1, -1, 0}, /* 12 */ { 15, s_17_12, -1, -1, 0} }; static const symbol s_18_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_18_1[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_18_2[3] = { 0xE0, 0xAE, 0x9F }; static const symbol s_18_3[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_18_4[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_18_5[3] = { 0xE0, 0xAE, 0xB1 }; static const struct among a_18[6] = { /* 0 */ { 3, s_18_0, -1, -1, 0}, /* 1 */ { 3, s_18_1, -1, -1, 0}, /* 2 */ { 3, s_18_2, -1, -1, 0}, /* 3 */ { 3, s_18_3, -1, -1, 0}, /* 4 */ { 3, s_18_4, -1, -1, 0}, /* 5 */ { 3, s_18_5, -1, -1, 0} }; static const symbol s_19_0[3] = { 0xE0, 0xAE, 0x95 }; static const symbol s_19_1[3] = { 0xE0, 0xAE, 0x9A }; static const symbol s_19_2[3] = { 0xE0, 0xAE, 0x9F }; static const symbol s_19_3[3] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_19_4[3] = { 0xE0, 0xAE, 0xAA }; static const symbol s_19_5[3] = { 0xE0, 0xAE, 0xB1 }; static const struct among a_19[6] = { /* 0 */ { 3, s_19_0, -1, -1, 0}, /* 1 */ { 3, s_19_1, -1, -1, 0}, /* 2 */ { 3, s_19_2, -1, -1, 0}, /* 3 */ { 3, s_19_3, -1, -1, 0}, /* 4 */ { 3, s_19_4, -1, -1, 0}, /* 5 */ { 3, s_19_5, -1, -1, 0} }; static const symbol s_20_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_20_1[3] = { 0xE0, 0xAF, 0x81 }; static const symbol s_20_2[3] = { 0xE0, 0xAF, 0x82 }; static const symbol s_20_3[3] = { 0xE0, 0xAF, 0x86 }; static const symbol s_20_4[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_20_5[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_20_6[3] = { 0xE0, 0xAE, 0xBE }; static const symbol s_20_7[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_20[8] = { /* 0 */ { 3, s_20_0, -1, -1, 0}, /* 1 */ { 3, s_20_1, -1, -1, 0}, /* 2 */ { 3, s_20_2, -1, -1, 0}, /* 3 */ { 3, s_20_3, -1, -1, 0}, /* 4 */ { 3, s_20_4, -1, -1, 0}, /* 5 */ { 3, s_20_5, -1, -1, 0}, /* 6 */ { 3, s_20_6, -1, -1, 0}, /* 7 */ { 3, s_20_7, -1, -1, 0} }; static const symbol s_21_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_21_1[3] = { 0xE0, 0xAF, 0x81 }; static const symbol s_21_2[3] = { 0xE0, 0xAF, 0x82 }; static const symbol s_21_3[3] = { 0xE0, 0xAF, 0x86 }; static const symbol s_21_4[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_21_5[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_21_6[3] = { 0xE0, 0xAE, 0xBE }; static const symbol s_21_7[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_21[8] = { /* 0 */ { 3, s_21_0, -1, -1, 0}, /* 1 */ { 3, s_21_1, -1, -1, 0}, /* 2 */ { 3, s_21_2, -1, -1, 0}, /* 3 */ { 3, s_21_3, -1, -1, 0}, /* 4 */ { 3, s_21_4, -1, -1, 0}, /* 5 */ { 3, s_21_5, -1, -1, 0}, /* 6 */ { 3, s_21_6, -1, -1, 0}, /* 7 */ { 3, s_21_7, -1, -1, 0} }; static const symbol s_22_0[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_22_1[24] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8A, 0xE0, 0xAE, 0xA3, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const struct among a_22[2] = { /* 0 */ { 9, s_22_0, -1, -1, 0}, /* 1 */ { 24, s_22_1, -1, -1, 0} }; static const symbol s_23_0[3] = { 0xE0, 0xAE, 0x85 }; static const symbol s_23_1[3] = { 0xE0, 0xAE, 0x86 }; static const symbol s_23_2[3] = { 0xE0, 0xAE, 0x87 }; static const symbol s_23_3[3] = { 0xE0, 0xAE, 0x88 }; static const symbol s_23_4[3] = { 0xE0, 0xAE, 0x89 }; static const symbol s_23_5[3] = { 0xE0, 0xAE, 0x8A }; static const symbol s_23_6[3] = { 0xE0, 0xAE, 0x8E }; static const symbol s_23_7[3] = { 0xE0, 0xAE, 0x8F }; static const symbol s_23_8[3] = { 0xE0, 0xAE, 0x90 }; static const symbol s_23_9[3] = { 0xE0, 0xAE, 0x92 }; static const symbol s_23_10[3] = { 0xE0, 0xAE, 0x93 }; static const symbol s_23_11[3] = { 0xE0, 0xAE, 0x94 }; static const struct among a_23[12] = { /* 0 */ { 3, s_23_0, -1, -1, 0}, /* 1 */ { 3, s_23_1, -1, -1, 0}, /* 2 */ { 3, s_23_2, -1, -1, 0}, /* 3 */ { 3, s_23_3, -1, -1, 0}, /* 4 */ { 3, s_23_4, -1, -1, 0}, /* 5 */ { 3, s_23_5, -1, -1, 0}, /* 6 */ { 3, s_23_6, -1, -1, 0}, /* 7 */ { 3, s_23_7, -1, -1, 0}, /* 8 */ { 3, s_23_8, -1, -1, 0}, /* 9 */ { 3, s_23_9, -1, -1, 0}, /* 10 */ { 3, s_23_10, -1, -1, 0}, /* 11 */ { 3, s_23_11, -1, -1, 0} }; static const symbol s_24_0[3] = { 0xE0, 0xAF, 0x80 }; static const symbol s_24_1[3] = { 0xE0, 0xAF, 0x81 }; static const symbol s_24_2[3] = { 0xE0, 0xAF, 0x82 }; static const symbol s_24_3[3] = { 0xE0, 0xAF, 0x86 }; static const symbol s_24_4[3] = { 0xE0, 0xAF, 0x87 }; static const symbol s_24_5[3] = { 0xE0, 0xAF, 0x88 }; static const symbol s_24_6[3] = { 0xE0, 0xAE, 0xBE }; static const symbol s_24_7[3] = { 0xE0, 0xAE, 0xBF }; static const struct among a_24[8] = { /* 0 */ { 3, s_24_0, -1, -1, 0}, /* 1 */ { 3, s_24_1, -1, -1, 0}, /* 2 */ { 3, s_24_2, -1, -1, 0}, /* 3 */ { 3, s_24_3, -1, -1, 0}, /* 4 */ { 3, s_24_4, -1, -1, 0}, /* 5 */ { 3, s_24_5, -1, -1, 0}, /* 6 */ { 3, s_24_6, -1, -1, 0}, /* 7 */ { 3, s_24_7, -1, -1, 0} }; static const symbol s_25_0[18] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D }; static const symbol s_25_1[21] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA8, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D }; static const symbol s_25_2[12] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D }; static const symbol s_25_3[15] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1 }; static const symbol s_25_4[18] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA8, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1 }; static const symbol s_25_5[9] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1 }; static const struct among a_25[6] = { /* 0 */ { 18, s_25_0, -1, -1, 0}, /* 1 */ { 21, s_25_1, -1, -1, 0}, /* 2 */ { 12, s_25_2, -1, -1, 0}, /* 3 */ { 15, s_25_3, -1, -1, 0}, /* 4 */ { 18, s_25_4, -1, -1, 0}, /* 5 */ { 9, s_25_5, -1, -1, 0} }; static const symbol s_0[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8B }; static const symbol s_1[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8B }; static const symbol s_2[] = { 0xE0, 0xAE, 0x93 }; static const symbol s_3[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8A }; static const symbol s_4[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8A }; static const symbol s_5[] = { 0xE0, 0xAE, 0x92 }; static const symbol s_6[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x81 }; static const symbol s_7[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x81 }; static const symbol s_8[] = { 0xE0, 0xAE, 0x89 }; static const symbol s_9[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x82 }; static const symbol s_10[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x82 }; static const symbol s_11[] = { 0xE0, 0xAE, 0x8A }; static const symbol s_12[] = { 0xE0, 0xAE, 0x8E }; static const symbol s_13[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_14[] = { 0xE0, 0xAE, 0xAF, 0xE0, 0xAF, 0x8D }; static const symbol s_15[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xAA, 0xE0, 0xAF, 0x8D }; static const symbol s_16[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D }; static const symbol s_17[] = { 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_18[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D }; static const symbol s_19[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_20[] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D }; static const symbol s_21[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_22[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D }; static const symbol s_23[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_24[] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x8D }; static const symbol s_25[] = { 0xE0, 0xAF, 0x88 }; static const symbol s_26[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_27[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D }; static const symbol s_28[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D }; static const symbol s_29[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_30[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_31[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_32[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D }; static const symbol s_33[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_34[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_35[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_36[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_37[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_38[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x81 }; static const symbol s_39[] = { 0xE0, 0xAE, 0x99, 0xE0, 0xAF, 0x8D }; static const symbol s_40[] = { 0xE0, 0xAF, 0x88 }; static const symbol s_41[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_42[] = { 0xE0, 0xAE, 0x99, 0xE0, 0xAF, 0x8D }; static const symbol s_43[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_44[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_45[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_46[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x99, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_47[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_48[] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_49[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_50[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_51[] = { 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_52[] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_53[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_54[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_55[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_56[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_57[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x88 }; static const symbol s_58[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_59[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAE, 0xBF }; static const symbol s_60[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF }; static const symbol s_61[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xAF }; static const symbol s_62[] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81 }; static const symbol s_63[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB3 }; static const symbol s_64[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x88, 0xE0, 0xAE, 0xAF }; static const symbol s_65[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x88 }; static const symbol s_66[] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_67[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB2 }; static const symbol s_68[] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9 }; static const symbol s_69[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF }; static const symbol s_70[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_71[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x88 }; static const symbol s_72[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x88 }; static const symbol s_73[] = { 0xE0, 0xAF, 0x88 }; static const symbol s_74[] = { 0xE0, 0xAF, 0x88 }; static const symbol s_75[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_76[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_77[] = { 0xE0, 0xAF, 0x8A, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_78[] = { 0xE0, 0xAF, 0x8B, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 }; static const symbol s_79[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_80[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D }; static const symbol s_81[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_82[] = { 0xE0, 0xAE, 0xAE }; static const symbol s_83[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81 }; static const symbol s_84[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 }; static const symbol s_85[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F }; static const symbol s_86[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_87[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_88[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x88 }; static const symbol s_89[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAE, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_90[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_91[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_92[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_93[] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xA3, 0xE0, 0xAF, 0x8D }; static const symbol s_94[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_95[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D }; static const symbol s_96[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D }; static const symbol s_97[] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x80, 0xE0, 0xAE, 0xB4, 0xE0, 0xAF, 0x8D }; static const symbol s_98[] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_99[] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 }; static const symbol s_100[] = { 0xE0, 0xAF, 0x80 }; static const symbol s_101[] = { 0xE0, 0xAE, 0xBF }; static const symbol s_102[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_103[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_104[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_105[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_106[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_107[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_108[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_109[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_110[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_111[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_112[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_113[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_114[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_115[] = { 0xE0, 0xAE, 0xA9 }; static const symbol s_116[] = { 0xE0, 0xAE, 0xAA }; static const symbol s_117[] = { 0xE0, 0xAE, 0x95 }; static const symbol s_118[] = { 0xE0, 0xAE, 0xA4 }; static const symbol s_119[] = { 0xE0, 0xAE, 0xAF }; static const symbol s_120[] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_121[] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_122[] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_123[] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 }; static const symbol s_124[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81 }; static const symbol s_125[] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_126[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_127[] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_128[] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_129[] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_130[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_131[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x88 }; static const symbol s_132[] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x88 }; static const symbol s_133[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_134[] = { 0xE0, 0xAE, 0x9A }; static const symbol s_135[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D }; static const symbol s_136[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_137[] = { 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_138[] = { 0xE0, 0xAE, 0xBE }; static const symbol s_139[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_140[] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_141[] = { 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_142[] = { 0xE0, 0xAF, 0x8B, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_143[] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_144[] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_145[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_146[] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D }; static const symbol s_147[] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAF, 0xE0, 0xAF, 0x8D }; static const symbol s_148[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D }; static const symbol s_149[] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_150[] = { 0xE0, 0xAF, 0x80, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_151[] = { 0xE0, 0xAF, 0x80, 0xE0, 0xAE, 0xAF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D }; static const symbol s_152[] = { 0xE0, 0xAF, 0x8D }; static const symbol s_153[] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81 }; static const symbol s_154[] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 }; static const symbol s_155[] = { 0xE0, 0xAF, 0x8D }; static int r_has_min_length(struct SN_env * z) { /* forwardmode */ z->I[0] = len_utf8(z->p); /* $length = , line 105 */ if (!(z->I[0] > 4)) return 0; /* $length > , line 106 */ return 1; } static int r_fix_va_start(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* or, line 110 */ { int c2 = z->c; /* and, line 110 */ { int c3 = z->c; /* try, line 110 */ if (!(eq_s(z, 6, s_0))) { z->c = c3; goto lab2; } /* literal, line 110 */ lab2: ; } z->c = c2; z->bra = z->c; /* [, line 110 */ } if (!(eq_s(z, 6, s_1))) goto lab1; /* literal, line 110 */ z->ket = z->c; /* ], line 110 */ { int ret = slice_from_s(z, 3, s_2); /* <-, line 110 */ if (ret < 0) return ret; } goto lab0; lab1: z->c = c1; { int c4 = z->c; /* and, line 111 */ { int c5 = z->c; /* try, line 111 */ if (!(eq_s(z, 6, s_3))) { z->c = c5; goto lab4; } /* literal, line 111 */ lab4: ; } z->c = c4; z->bra = z->c; /* [, line 111 */ } if (!(eq_s(z, 6, s_4))) goto lab3; /* literal, line 111 */ z->ket = z->c; /* ], line 111 */ { int ret = slice_from_s(z, 3, s_5); /* <-, line 111 */ if (ret < 0) return ret; } goto lab0; lab3: z->c = c1; { int c6 = z->c; /* and, line 112 */ { int c7 = z->c; /* try, line 112 */ if (!(eq_s(z, 6, s_6))) { z->c = c7; goto lab6; } /* literal, line 112 */ lab6: ; } z->c = c6; z->bra = z->c; /* [, line 112 */ } if (!(eq_s(z, 6, s_7))) goto lab5; /* literal, line 112 */ z->ket = z->c; /* ], line 112 */ { int ret = slice_from_s(z, 3, s_8); /* <-, line 112 */ if (ret < 0) return ret; } goto lab0; lab5: z->c = c1; { int c8 = z->c; /* and, line 113 */ { int c9 = z->c; /* try, line 113 */ if (!(eq_s(z, 6, s_9))) { z->c = c9; goto lab7; } /* literal, line 113 */ lab7: ; } z->c = c8; z->bra = z->c; /* [, line 113 */ } if (!(eq_s(z, 6, s_10))) return 0; /* literal, line 113 */ z->ket = z->c; /* ], line 113 */ { int ret = slice_from_s(z, 3, s_11); /* <-, line 113 */ if (ret < 0) return ret; } } lab0: return 1; } static int r_fix_endings(struct SN_env * z) { /* forwardmode */ z->B[2] = 1; /* set found_wrong_ending, line 117 */ while(1) { /* repeat, line 118 */ int c1 = z->c; if (!(z->B[2])) goto lab0; /* Boolean test found_wrong_ending, line 118 */ { int c2 = z->c; /* do, line 118 */ { int ret = r_fix_ending(z); /* call fix_ending, line 118 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } continue; lab0: z->c = c1; break; } return 1; } static int r_remove_question_prefixes(struct SN_env * z) { /* forwardmode */ z->bra = z->c; /* [, line 122 */ if (!(eq_s(z, 3, s_12))) return 0; /* literal, line 122 */ if (!(find_among(z, a_0, 10))) return 0; /* among, line 122 */ if (!(eq_s(z, 3, s_13))) return 0; /* literal, line 122 */ z->ket = z->c; /* ], line 122 */ { int ret = slice_del(z); /* delete, line 122 */ if (ret < 0) return ret; } { int c1 = z->c; /* do, line 123 */ { int ret = r_fix_va_start(z); /* call fix_va_start, line 123 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } return 1; } static int r_fix_ending(struct SN_env * z) { /* forwardmode */ z->B[2] = 0; /* unset found_wrong_ending, line 127 */ z->I[0] = len_utf8(z->p); /* $length = , line 128 */ if (!(z->I[0] > 3)) return 0; /* $length > , line 129 */ z->lb = z->c; z->c = z->l; /* backwards, line 130 */ { int m1 = z->l - z->c; (void)m1; /* or, line 132 */ z->ket = z->c; /* [, line 131 */ if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 141 && z->p[z->c - 1] != 164)) goto lab1; /* among, line 131 */ if (!(find_among_b(z, a_1, 3))) goto lab1; z->bra = z->c; /* ], line 131 */ { int ret = slice_del(z); /* delete, line 131 */ if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; z->ket = z->c; /* [, line 133 */ if (!(eq_s_b(z, 6, s_14))) goto lab2; /* literal, line 133 */ { int m_test2 = z->l - z->c; /* test, line 133 */ if (!(find_among_b(z, a_2, 3))) goto lab2; /* among, line 133 */ z->c = z->l - m_test2; } z->bra = z->c; /* ], line 133 */ { int ret = slice_del(z); /* delete, line 133 */ if (ret < 0) return ret; } goto lab0; lab2: z->c = z->l - m1; z->ket = z->c; /* [, line 135 */ { int m3 = z->l - z->c; (void)m3; /* or, line 135 */ if (!(eq_s_b(z, 12, s_15))) goto lab5; /* literal, line 135 */ goto lab4; lab5: z->c = z->l - m3; if (!(eq_s_b(z, 12, s_16))) goto lab3; /* literal, line 135 */ } lab4: z->bra = z->c; /* ], line 135 */ { int ret = slice_from_s(z, 6, s_17); /* <-, line 135 */ if (ret < 0) return ret; } goto lab0; lab3: z->c = z->l - m1; z->ket = z->c; /* [, line 137 */ if (!(eq_s_b(z, 12, s_18))) goto lab6; /* literal, line 137 */ z->bra = z->c; /* ], line 137 */ { int ret = slice_from_s(z, 6, s_19); /* <-, line 137 */ if (ret < 0) return ret; } goto lab0; lab6: z->c = z->l - m1; z->ket = z->c; /* [, line 140 */ if (!(eq_s_b(z, 12, s_20))) goto lab7; /* literal, line 140 */ z->bra = z->c; /* ], line 140 */ { int ret = slice_from_s(z, 6, s_21); /* <-, line 140 */ if (ret < 0) return ret; } goto lab0; lab7: z->c = z->l - m1; z->ket = z->c; /* [, line 142 */ if (!(eq_s_b(z, 12, s_22))) goto lab8; /* literal, line 142 */ z->bra = z->c; /* ], line 142 */ { int ret = slice_from_s(z, 6, s_23); /* <-, line 142 */ if (ret < 0) return ret; } goto lab0; lab8: z->c = z->l - m1; if (!(z->B[1])) goto lab9; /* Boolean test found_vetrumai_urupu, line 144 */ z->ket = z->c; /* [, line 144 */ if (!(eq_s_b(z, 12, s_24))) goto lab9; /* literal, line 144 */ { int m_test4 = z->l - z->c; /* test, line 144 */ { int m5 = z->l - z->c; (void)m5; /* not, line 144 */ if (!(eq_s_b(z, 3, s_25))) goto lab10; /* literal, line 144 */ goto lab9; lab10: z->c = z->l - m5; } z->c = z->l - m_test4; } z->bra = z->c; /* ], line 144 */ { int ret = slice_from_s(z, 6, s_26); /* <-, line 144 */ if (ret < 0) return ret; } z->bra = z->c; /* ], line 144 */ goto lab0; lab9: z->c = z->l - m1; z->ket = z->c; /* [, line 146 */ { int m6 = z->l - z->c; (void)m6; /* or, line 146 */ if (!(eq_s_b(z, 9, s_27))) goto lab13; /* literal, line 146 */ goto lab12; lab13: z->c = z->l - m6; if (!(eq_s_b(z, 15, s_28))) goto lab11; /* literal, line 146 */ } lab12: z->bra = z->c; /* ], line 146 */ { int ret = slice_from_s(z, 3, s_29); /* <-, line 146 */ if (ret < 0) return ret; } goto lab0; lab11: z->c = z->l - m1; z->ket = z->c; /* [, line 148 */ if (!(eq_s_b(z, 3, s_30))) goto lab14; /* literal, line 148 */ if (!(find_among_b(z, a_3, 6))) goto lab14; /* among, line 148 */ if (!(eq_s_b(z, 3, s_31))) goto lab14; /* literal, line 148 */ if (!(find_among_b(z, a_4, 6))) goto lab14; /* among, line 148 */ z->bra = z->c; /* ], line 148 */ { int ret = slice_del(z); /* delete, line 148 */ if (ret < 0) return ret; } goto lab0; lab14: z->c = z->l - m1; z->ket = z->c; /* [, line 150 */ if (!(eq_s_b(z, 9, s_32))) goto lab15; /* literal, line 150 */ z->bra = z->c; /* ], line 150 */ { int ret = slice_from_s(z, 3, s_33); /* <-, line 150 */ if (ret < 0) return ret; } goto lab0; lab15: z->c = z->l - m1; z->ket = z->c; /* [, line 152 */ if (!(eq_s_b(z, 3, s_34))) goto lab16; /* literal, line 152 */ if (!(find_among_b(z, a_5, 6))) goto lab16; /* among, line 152 */ z->bra = z->c; /* ], line 152 */ { int ret = slice_del(z); /* delete, line 152 */ if (ret < 0) return ret; } goto lab0; lab16: z->c = z->l - m1; z->ket = z->c; /* [, line 154 */ if (!(eq_s_b(z, 3, s_35))) goto lab17; /* literal, line 154 */ { int m7 = z->l - z->c; (void)m7; /* or, line 154 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 5 || !((4030464 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab19; /* among, line 154 */ if (!(find_among_b(z, a_6, 6))) goto lab19; goto lab18; lab19: z->c = z->l - m7; if (!(find_among_b(z, a_7, 6))) goto lab17; /* among, line 154 */ } lab18: if (!(eq_s_b(z, 3, s_36))) goto lab17; /* literal, line 154 */ z->bra = z->c; /* ], line 154 */ { int ret = slice_from_s(z, 3, s_37); /* <-, line 154 */ if (ret < 0) return ret; } goto lab0; lab17: z->c = z->l - m1; z->ket = z->c; /* [, line 156 */ if (!(find_among_b(z, a_8, 3))) goto lab20; /* among, line 156 */ z->bra = z->c; /* ], line 156 */ { int ret = slice_del(z); /* delete, line 156 */ if (ret < 0) return ret; } goto lab0; lab20: z->c = z->l - m1; z->ket = z->c; /* [, line 158 */ if (!(eq_s_b(z, 6, s_38))) goto lab21; /* literal, line 158 */ { int m_test8 = z->l - z->c; /* test, line 158 */ { int m9 = z->l - z->c; (void)m9; /* not, line 158 */ if (!(find_among_b(z, a_9, 8))) goto lab22; /* among, line 158 */ goto lab21; lab22: z->c = z->l - m9; } z->c = z->l - m_test8; } z->bra = z->c; /* ], line 158 */ { int ret = slice_del(z); /* delete, line 158 */ if (ret < 0) return ret; } goto lab0; lab21: z->c = z->l - m1; z->ket = z->c; /* [, line 160 */ if (!(eq_s_b(z, 6, s_39))) goto lab23; /* literal, line 160 */ { int m_test10 = z->l - z->c; /* test, line 160 */ { int m11 = z->l - z->c; (void)m11; /* not, line 160 */ if (!(eq_s_b(z, 3, s_40))) goto lab24; /* literal, line 160 */ goto lab23; lab24: z->c = z->l - m11; } z->c = z->l - m_test10; } z->bra = z->c; /* ], line 160 */ { int ret = slice_from_s(z, 6, s_41); /* <-, line 160 */ if (ret < 0) return ret; } goto lab0; lab23: z->c = z->l - m1; z->ket = z->c; /* [, line 162 */ if (!(eq_s_b(z, 6, s_42))) goto lab25; /* literal, line 162 */ z->bra = z->c; /* ], line 162 */ { int ret = slice_del(z); /* delete, line 162 */ if (ret < 0) return ret; } goto lab0; lab25: z->c = z->l - m1; z->ket = z->c; /* [, line 164 */ if (!(eq_s_b(z, 3, s_43))) return 0; /* literal, line 164 */ { int m_test12 = z->l - z->c; /* test, line 164 */ { int m13 = z->l - z->c; (void)m13; /* or, line 164 */ if (!(find_among_b(z, a_10, 8))) goto lab27; /* among, line 164 */ goto lab26; lab27: z->c = z->l - m13; if (!(eq_s_b(z, 3, s_44))) return 0; /* literal, line 164 */ } lab26: z->c = z->l - m_test12; } z->bra = z->c; /* ], line 164 */ { int ret = slice_del(z); /* delete, line 164 */ if (ret < 0) return ret; } } lab0: z->c = z->lb; z->B[2] = 1; /* set found_wrong_ending, line 167 */ return 1; } static int r_remove_pronoun_prefixes(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset found_a_match, line 171 */ z->bra = z->c; /* [, line 172 */ if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 4 || !((672 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0; /* among, line 172 */ if (!(find_among(z, a_11, 3))) return 0; if (!(find_among(z, a_12, 10))) return 0; /* among, line 172 */ if (!(eq_s(z, 3, s_45))) return 0; /* literal, line 172 */ z->ket = z->c; /* ], line 172 */ { int ret = slice_del(z); /* delete, line 172 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 173 */ { int c1 = z->c; /* do, line 174 */ { int ret = r_fix_va_start(z); /* call fix_va_start, line 174 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } return 1; } static int r_remove_plural_suffix(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset found_a_match, line 178 */ z->lb = z->c; z->c = z->l; /* backwards, line 179 */ { int m1 = z->l - z->c; (void)m1; /* or, line 180 */ z->ket = z->c; /* [, line 180 */ if (!(eq_s_b(z, 18, s_46))) goto lab1; /* literal, line 180 */ { int m_test2 = z->l - z->c; /* test, line 180 */ { int m3 = z->l - z->c; (void)m3; /* not, line 180 */ if (!(find_among_b(z, a_13, 6))) goto lab2; /* among, line 180 */ goto lab1; lab2: z->c = z->l - m3; } z->c = z->l - m_test2; } z->bra = z->c; /* ], line 180 */ { int ret = slice_from_s(z, 3, s_47); /* <-, line 180 */ if (ret < 0) return ret; } goto lab0; lab1: z->c = z->l - m1; z->ket = z->c; /* [, line 181 */ if (!(eq_s_b(z, 15, s_48))) goto lab3; /* literal, line 181 */ z->bra = z->c; /* ], line 181 */ { int ret = slice_from_s(z, 6, s_49); /* <-, line 181 */ if (ret < 0) return ret; } goto lab0; lab3: z->c = z->l - m1; z->ket = z->c; /* [, line 182 */ if (!(eq_s_b(z, 15, s_50))) goto lab4; /* literal, line 182 */ z->bra = z->c; /* ], line 182 */ { int ret = slice_from_s(z, 6, s_51); /* <-, line 182 */ if (ret < 0) return ret; } goto lab0; lab4: z->c = z->l - m1; z->ket = z->c; /* [, line 183 */ if (!(eq_s_b(z, 9, s_52))) return 0; /* literal, line 183 */ z->bra = z->c; /* ], line 183 */ { int ret = slice_del(z); /* delete, line 183 */ if (ret < 0) return ret; } } lab0: z->B[0] = 1; /* set found_a_match, line 184 */ z->c = z->lb; return 1; } static int r_remove_question_suffixes(struct SN_env * z) { /* forwardmode */ { int ret = r_has_min_length(z); /* call has_min_length, line 189 */ if (ret <= 0) return ret; } z->B[0] = 0; /* unset found_a_match, line 190 */ z->lb = z->c; z->c = z->l; /* backwards, line 191 */ { int m1 = z->l - z->c; (void)m1; /* do, line 192 */ z->ket = z->c; /* [, line 193 */ if (!(find_among_b(z, a_14, 3))) goto lab0; /* among, line 193 */ z->bra = z->c; /* ], line 193 */ { int ret = slice_from_s(z, 3, s_53); /* <-, line 193 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 194 */ lab0: z->c = z->l - m1; } z->c = z->lb; { int c2 = z->c; /* do, line 197 */ { int ret = r_fix_endings(z); /* call fix_endings, line 197 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } return 1; } static int r_remove_command_suffixes(struct SN_env * z) { /* forwardmode */ { int ret = r_has_min_length(z); /* call has_min_length, line 201 */ if (ret <= 0) return ret; } z->B[0] = 0; /* unset found_a_match, line 202 */ z->lb = z->c; z->c = z->l; /* backwards, line 203 */ z->ket = z->c; /* [, line 204 */ if (z->c - 5 <= z->lb || z->p[z->c - 1] != 191) return 0; /* among, line 204 */ if (!(find_among_b(z, a_15, 2))) return 0; z->bra = z->c; /* ], line 204 */ { int ret = slice_del(z); /* delete, line 204 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 205 */ z->c = z->lb; return 1; } static int r_remove_um(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset found_a_match, line 210 */ { int ret = r_has_min_length(z); /* call has_min_length, line 211 */ if (ret <= 0) return ret; } z->lb = z->c; z->c = z->l; /* backwards, line 212 */ z->ket = z->c; /* [, line 212 */ if (!(eq_s_b(z, 9, s_54))) return 0; /* literal, line 212 */ z->bra = z->c; /* ], line 212 */ { int ret = slice_from_s(z, 3, s_55); /* <-, line 212 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 213 */ z->c = z->lb; { int c1 = z->c; /* do, line 215 */ { int ret = r_fix_ending(z); /* call fix_ending, line 215 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } return 1; } static int r_remove_common_word_endings(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset found_a_match, line 222 */ { int ret = r_has_min_length(z); /* call has_min_length, line 223 */ if (ret <= 0) return ret; } z->lb = z->c; z->c = z->l; /* backwards, line 224 */ { int m1 = z->l - z->c; (void)m1; /* or, line 241 */ { int m_test2 = z->l - z->c; /* test, line 225 */ z->ket = z->c; /* [, line 225 */ { int m3 = z->l - z->c; (void)m3; /* or, line 225 */ if (!(eq_s_b(z, 12, s_56))) goto lab3; /* literal, line 225 */ goto lab2; lab3: z->c = z->l - m3; if (!(eq_s_b(z, 15, s_57))) goto lab4; /* literal, line 226 */ goto lab2; lab4: z->c = z->l - m3; if (!(eq_s_b(z, 12, s_58))) goto lab5; /* literal, line 227 */ goto lab2; lab5: z->c = z->l - m3; if (!(eq_s_b(z, 15, s_59))) goto lab6; /* literal, line 228 */ goto lab2; lab6: z->c = z->l - m3; if (!(eq_s_b(z, 9, s_60))) goto lab7; /* literal, line 229 */ goto lab2; lab7: z->c = z->l - m3; if (!(eq_s_b(z, 12, s_61))) goto lab8; /* literal, line 230 */ goto lab2; lab8: z->c = z->l - m3; if (!(eq_s_b(z, 15, s_62))) goto lab9; /* literal, line 231 */ goto lab2; lab9: z->c = z->l - m3; if (!(eq_s_b(z, 12, s_63))) goto lab10; /* literal, line 232 */ goto lab2; lab10: z->c = z->l - m3; if (!(eq_s_b(z, 12, s_64))) goto lab11; /* literal, line 233 */ goto lab2; lab11: z->c = z->l - m3; if (!(eq_s_b(z, 9, s_65))) goto lab12; /* literal, line 234 */ goto lab2; lab12: z->c = z->l - m3; if (!(eq_s_b(z, 15, s_66))) goto lab13; /* literal, line 235 */ goto lab2; lab13: z->c = z->l - m3; if (!(eq_s_b(z, 9, s_67))) goto lab14; /* literal, line 236 */ { int m_test4 = z->l - z->c; /* test, line 236 */ { int m5 = z->l - z->c; (void)m5; /* not, line 236 */ if (!(find_among_b(z, a_16, 8))) goto lab15; /* among, line 236 */ goto lab14; lab15: z->c = z->l - m5; } z->c = z->l - m_test4; } goto lab2; lab14: z->c = z->l - m3; if (!(eq_s_b(z, 6, s_68))) goto lab16; /* literal, line 237 */ goto lab2; lab16: z->c = z->l - m3; if (!(eq_s_b(z, 9, s_69))) goto lab1; /* literal, line 238 */ } lab2: z->bra = z->c; /* ], line 238 */ { int ret = slice_from_s(z, 3, s_70); /* <-, line 238 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 239 */ z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; { int m_test6 = z->l - z->c; /* test, line 242 */ z->ket = z->c; /* [, line 242 */ if (!(find_among_b(z, a_17, 13))) return 0; /* among, line 242 */ z->bra = z->c; /* ], line 255 */ { int ret = slice_del(z); /* delete, line 255 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 256 */ z->c = z->l - m_test6; } } lab0: z->c = z->lb; { int c7 = z->c; /* do, line 259 */ { int ret = r_fix_endings(z); /* call fix_endings, line 259 */ if (ret == 0) goto lab17; if (ret < 0) return ret; } lab17: z->c = c7; } return 1; } static int r_remove_vetrumai_urupukal(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset found_a_match, line 263 */ z->B[1] = 0; /* unset found_vetrumai_urupu, line 264 */ { int ret = r_has_min_length(z); /* call has_min_length, line 265 */ if (ret <= 0) return ret; } z->lb = z->c; z->c = z->l; /* backwards, line 266 */ { int m1 = z->l - z->c; (void)m1; /* or, line 269 */ { int m_test2 = z->l - z->c; /* test, line 268 */ z->ket = z->c; /* [, line 268 */ if (!(eq_s_b(z, 6, s_71))) goto lab1; /* literal, line 268 */ z->bra = z->c; /* ], line 268 */ { int ret = slice_del(z); /* delete, line 268 */ if (ret < 0) return ret; } z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; { int m_test3 = z->l - z->c; /* test, line 270 */ z->ket = z->c; /* [, line 270 */ { int m4 = z->l - z->c; (void)m4; /* or, line 271 */ { int m5 = z->l - z->c; (void)m5; /* or, line 270 */ if (!(eq_s_b(z, 9, s_72))) goto lab6; /* literal, line 270 */ goto lab5; lab6: z->c = z->l - m5; if (!(eq_s_b(z, 3, s_73))) goto lab4; /* literal, line 271 */ } lab5: { int m_test6 = z->l - z->c; /* test, line 271 */ { int m7 = z->l - z->c; (void)m7; /* not, line 271 */ if (!(find_among_b(z, a_18, 6))) goto lab7; /* among, line 271 */ goto lab4; lab7: z->c = z->l - m7; } z->c = z->l - m_test6; } goto lab3; lab4: z->c = z->l - m4; if (!(eq_s_b(z, 3, s_74))) goto lab2; /* literal, line 272 */ { int m_test8 = z->l - z->c; /* test, line 272 */ if (!(find_among_b(z, a_19, 6))) goto lab2; /* among, line 272 */ if (!(eq_s_b(z, 3, s_75))) goto lab2; /* literal, line 272 */ z->c = z->l - m_test8; } } lab3: z->bra = z->c; /* ], line 273 */ { int ret = slice_from_s(z, 3, s_76); /* <-, line 273 */ if (ret < 0) return ret; } z->c = z->l - m_test3; } goto lab0; lab2: z->c = z->l - m1; { int m_test9 = z->l - z->c; /* test, line 276 */ z->ket = z->c; /* [, line 276 */ { int m10 = z->l - z->c; (void)m10; /* or, line 277 */ if (!(eq_s_b(z, 9, s_77))) goto lab10; /* literal, line 277 */ goto lab9; lab10: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_78))) goto lab11; /* literal, line 278 */ goto lab9; lab11: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_79))) goto lab12; /* literal, line 279 */ goto lab9; lab12: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_80))) goto lab13; /* literal, line 280 */ goto lab9; lab13: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_81))) goto lab14; /* literal, line 281 */ { int m_test11 = z->l - z->c; /* test, line 281 */ { int m12 = z->l - z->c; (void)m12; /* not, line 281 */ if (!(eq_s_b(z, 3, s_82))) goto lab15; /* literal, line 281 */ goto lab14; lab15: z->c = z->l - m12; } z->c = z->l - m_test11; } goto lab9; lab14: z->c = z->l - m10; if (!(eq_s_b(z, 15, s_83))) goto lab16; /* literal, line 282 */ goto lab9; lab16: z->c = z->l - m10; if (!(eq_s_b(z, 21, s_84))) goto lab17; /* literal, line 283 */ goto lab9; lab17: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_85))) goto lab18; /* literal, line 284 */ goto lab9; lab18: z->c = z->l - m10; if (!(z->I[0] >= 7)) goto lab19; /* $length >= , line 285 */ if (!(eq_s_b(z, 12, s_86))) goto lab19; /* literal, line 285 */ goto lab9; lab19: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_87))) goto lab20; /* literal, line 286 */ goto lab9; lab20: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_88))) goto lab21; /* literal, line 287 */ goto lab9; lab21: z->c = z->l - m10; if (!(eq_s_b(z, 12, s_89))) goto lab22; /* literal, line 288 */ goto lab9; lab22: z->c = z->l - m10; if (!(eq_s_b(z, 6, s_90))) goto lab23; /* literal, line 289 */ { int m_test13 = z->l - z->c; /* test, line 289 */ { int m14 = z->l - z->c; (void)m14; /* not, line 289 */ if (!(find_among_b(z, a_20, 8))) goto lab24; /* among, line 289 */ goto lab23; lab24: z->c = z->l - m14; } z->c = z->l - m_test13; } goto lab9; lab23: z->c = z->l - m10; if (!(eq_s_b(z, 9, s_91))) goto lab8; /* literal, line 290 */ } lab9: z->bra = z->c; /* ], line 291 */ { int ret = slice_from_s(z, 3, s_92); /* <-, line 291 */ if (ret < 0) return ret; } z->c = z->l - m_test9; } goto lab0; lab8: z->c = z->l - m1; { int m_test15 = z->l - z->c; /* test, line 294 */ z->ket = z->c; /* [, line 294 */ { int m16 = z->l - z->c; (void)m16; /* or, line 295 */ if (!(eq_s_b(z, 9, s_93))) goto lab27; /* literal, line 295 */ goto lab26; lab27: z->c = z->l - m16; if (!(eq_s_b(z, 12, s_94))) goto lab28; /* literal, line 296 */ goto lab26; lab28: z->c = z->l - m16; if (!(eq_s_b(z, 12, s_95))) goto lab29; /* literal, line 297 */ goto lab26; lab29: z->c = z->l - m16; if (!(eq_s_b(z, 12, s_96))) goto lab30; /* literal, line 298 */ goto lab26; lab30: z->c = z->l - m16; if (!(eq_s_b(z, 12, s_97))) goto lab31; /* literal, line 299 */ goto lab26; lab31: z->c = z->l - m16; if (!(eq_s_b(z, 12, s_98))) goto lab32; /* literal, line 300 */ goto lab26; lab32: z->c = z->l - m16; if (!(eq_s_b(z, 6, s_99))) goto lab25; /* literal, line 301 */ { int m_test17 = z->l - z->c; /* test, line 301 */ { int m18 = z->l - z->c; (void)m18; /* not, line 301 */ if (!(find_among_b(z, a_21, 8))) goto lab33; /* among, line 301 */ goto lab25; lab33: z->c = z->l - m18; } z->c = z->l - m_test17; } } lab26: z->bra = z->c; /* ], line 302 */ { int ret = slice_del(z); /* delete, line 302 */ if (ret < 0) return ret; } z->c = z->l - m_test15; } goto lab0; lab25: z->c = z->l - m1; { int m_test19 = z->l - z->c; /* test, line 305 */ z->ket = z->c; /* [, line 305 */ if (!(eq_s_b(z, 3, s_100))) return 0; /* literal, line 305 */ z->bra = z->c; /* ], line 305 */ { int ret = slice_from_s(z, 3, s_101); /* <-, line 305 */ if (ret < 0) return ret; } z->c = z->l - m_test19; } } lab0: z->B[0] = 1; /* set found_a_match, line 307 */ z->B[1] = 1; /* set found_vetrumai_urupu, line 308 */ { int m20 = z->l - z->c; (void)m20; /* do, line 309 */ z->ket = z->c; /* [, line 309 */ if (!(eq_s_b(z, 9, s_102))) goto lab34; /* literal, line 309 */ z->bra = z->c; /* ], line 309 */ { int ret = slice_from_s(z, 3, s_103); /* <-, line 309 */ if (ret < 0) return ret; } lab34: z->c = z->l - m20; } z->c = z->lb; { int c21 = z->c; /* do, line 311 */ { int ret = r_fix_endings(z); /* call fix_endings, line 311 */ if (ret == 0) goto lab35; if (ret < 0) return ret; } lab35: z->c = c21; } return 1; } static int r_remove_tense_suffixes(struct SN_env * z) { /* forwardmode */ z->B[0] = 1; /* set found_a_match, line 315 */ while(1) { /* repeat, line 316 */ int c1 = z->c; if (!(z->B[0])) goto lab0; /* Boolean test found_a_match, line 316 */ { int c2 = z->c; /* do, line 316 */ { int ret = r_remove_tense_suffix(z); /* call remove_tense_suffix, line 316 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } continue; lab0: z->c = c1; break; } return 1; } static int r_remove_tense_suffix(struct SN_env * z) { /* forwardmode */ z->B[0] = 0; /* unset found_a_match, line 320 */ { int ret = r_has_min_length(z); /* call has_min_length, line 321 */ if (ret <= 0) return ret; } z->lb = z->c; z->c = z->l; /* backwards, line 322 */ { int m1 = z->l - z->c; (void)m1; /* do, line 323 */ { int m2 = z->l - z->c; (void)m2; /* or, line 330 */ { int m_test3 = z->l - z->c; /* test, line 324 */ z->ket = z->c; /* [, line 324 */ if (z->c - 8 <= z->lb || (z->p[z->c - 1] != 129 && z->p[z->c - 1] != 141)) goto lab2; /* among, line 324 */ if (!(find_among_b(z, a_22, 2))) goto lab2; z->bra = z->c; /* ], line 327 */ { int ret = slice_del(z); /* delete, line 327 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 328 */ z->c = z->l - m_test3; } goto lab1; lab2: z->c = z->l - m2; { int m_test4 = z->l - z->c; /* test, line 331 */ z->ket = z->c; /* [, line 331 */ { int m5 = z->l - z->c; (void)m5; /* or, line 332 */ if (!(eq_s_b(z, 12, s_104))) goto lab5; /* literal, line 332 */ goto lab4; lab5: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_105))) goto lab6; /* literal, line 333 */ goto lab4; lab6: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_106))) goto lab7; /* literal, line 334 */ goto lab4; lab7: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_107))) goto lab8; /* literal, line 335 */ goto lab4; lab8: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_108))) goto lab9; /* literal, line 336 */ goto lab4; lab9: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_109))) goto lab10; /* literal, line 337 */ goto lab4; lab10: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_110))) goto lab11; /* literal, line 338 */ { int m_test6 = z->l - z->c; /* test, line 338 */ { int m7 = z->l - z->c; (void)m7; /* not, line 338 */ if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 4 || !((1951712 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab12; /* among, line 338 */ if (!(find_among_b(z, a_23, 12))) goto lab12; goto lab11; lab12: z->c = z->l - m7; } z->c = z->l - m_test6; } goto lab4; lab11: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_111))) goto lab13; /* literal, line 339 */ goto lab4; lab13: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_112))) goto lab14; /* literal, line 340 */ goto lab4; lab14: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_113))) goto lab15; /* literal, line 341 */ goto lab4; lab15: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_114))) goto lab16; /* literal, line 342 */ goto lab4; lab16: z->c = z->l - m5; if (!(eq_s_b(z, 3, s_115))) goto lab17; /* literal, line 343 */ goto lab4; lab17: z->c = z->l - m5; if (!(eq_s_b(z, 3, s_116))) goto lab18; /* literal, line 343 */ goto lab4; lab18: z->c = z->l - m5; if (!(eq_s_b(z, 3, s_117))) goto lab19; /* literal, line 343 */ goto lab4; lab19: z->c = z->l - m5; if (!(eq_s_b(z, 3, s_118))) goto lab20; /* literal, line 343 */ goto lab4; lab20: z->c = z->l - m5; if (!(eq_s_b(z, 3, s_119))) goto lab21; /* literal, line 343 */ goto lab4; lab21: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_120))) goto lab22; /* literal, line 344 */ goto lab4; lab22: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_121))) goto lab23; /* literal, line 345 */ goto lab4; lab23: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_122))) goto lab24; /* literal, line 346 */ goto lab4; lab24: z->c = z->l - m5; if (!(eq_s_b(z, 6, s_123))) goto lab25; /* literal, line 347 */ { int m_test8 = z->l - z->c; /* test, line 347 */ { int m9 = z->l - z->c; (void)m9; /* not, line 347 */ if (!(find_among_b(z, a_24, 8))) goto lab26; /* among, line 347 */ goto lab25; lab26: z->c = z->l - m9; } z->c = z->l - m_test8; } goto lab4; lab25: z->c = z->l - m5; if (!(eq_s_b(z, 15, s_124))) goto lab27; /* literal, line 348 */ goto lab4; lab27: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_125))) goto lab28; /* literal, line 349 */ goto lab4; lab28: z->c = z->l - m5; if (!(eq_s_b(z, 9, s_126))) goto lab29; /* literal, line 350 */ goto lab4; lab29: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_127))) goto lab30; /* literal, line 351 */ goto lab4; lab30: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_128))) goto lab31; /* literal, line 352 */ goto lab4; lab31: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_129))) goto lab32; /* literal, line 353 */ goto lab4; lab32: z->c = z->l - m5; if (!(eq_s_b(z, 12, s_130))) goto lab33; /* literal, line 354 */ goto lab4; lab33: z->c = z->l - m5; if (!(eq_s_b(z, 6, s_131))) goto lab34; /* literal, line 355 */ goto lab4; lab34: z->c = z->l - m5; if (!(eq_s_b(z, 6, s_132))) goto lab3; /* literal, line 356 */ } lab4: z->bra = z->c; /* ], line 357 */ { int ret = slice_del(z); /* delete, line 357 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 358 */ z->c = z->l - m_test4; } goto lab1; lab3: z->c = z->l - m2; { int m_test10 = z->l - z->c; /* test, line 361 */ z->ket = z->c; /* [, line 361 */ { int m11 = z->l - z->c; (void)m11; /* or, line 362 */ if (!(eq_s_b(z, 9, s_133))) goto lab37; /* literal, line 362 */ { int m_test12 = z->l - z->c; /* test, line 362 */ { int m13 = z->l - z->c; (void)m13; /* not, line 362 */ if (!(eq_s_b(z, 3, s_134))) goto lab38; /* literal, line 362 */ goto lab37; lab38: z->c = z->l - m13; } z->c = z->l - m_test12; } goto lab36; lab37: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_135))) goto lab39; /* literal, line 363 */ goto lab36; lab39: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_136))) goto lab40; /* literal, line 364 */ goto lab36; lab40: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_137))) goto lab41; /* literal, line 365 */ goto lab36; lab41: z->c = z->l - m11; if (!(eq_s_b(z, 3, s_138))) goto lab42; /* literal, line 366 */ goto lab36; lab42: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_139))) goto lab43; /* literal, line 367 */ goto lab36; lab43: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_140))) goto lab44; /* literal, line 368 */ goto lab36; lab44: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_141))) goto lab45; /* literal, line 369 */ goto lab36; lab45: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_142))) goto lab46; /* literal, line 370 */ goto lab36; lab46: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_143))) goto lab47; /* literal, line 371 */ goto lab36; lab47: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_144))) goto lab48; /* literal, line 372 */ goto lab36; lab48: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_145))) goto lab49; /* literal, line 373 */ goto lab36; lab49: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_146))) goto lab50; /* literal, line 374 */ goto lab36; lab50: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_147))) goto lab51; /* literal, line 375 */ goto lab36; lab51: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_148))) goto lab52; /* literal, line 376 */ goto lab36; lab52: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_149))) goto lab53; /* literal, line 377 */ goto lab36; lab53: z->c = z->l - m11; if (!(eq_s_b(z, 9, s_150))) goto lab54; /* literal, line 378 */ goto lab36; lab54: z->c = z->l - m11; if (!(eq_s_b(z, 12, s_151))) goto lab35; /* literal, line 379 */ } lab36: z->bra = z->c; /* ], line 380 */ { int ret = slice_from_s(z, 3, s_152); /* <-, line 380 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 381 */ z->c = z->l - m_test10; } goto lab1; lab35: z->c = z->l - m2; { int m_test14 = z->l - z->c; /* test, line 384 */ z->ket = z->c; /* [, line 384 */ { int m15 = z->l - z->c; (void)m15; /* or, line 384 */ if (!(eq_s_b(z, 6, s_153))) goto lab56; /* literal, line 384 */ goto lab55; lab56: z->c = z->l - m15; if (!(eq_s_b(z, 6, s_154))) goto lab0; /* literal, line 384 */ } lab55: { int m_test16 = z->l - z->c; /* test, line 384 */ if (!(eq_s_b(z, 3, s_155))) goto lab0; /* literal, line 384 */ z->c = z->l - m_test16; } z->bra = z->c; /* ], line 384 */ { int ret = slice_del(z); /* delete, line 384 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 385 */ z->c = z->l - m_test14; } } lab1: lab0: z->c = z->l - m1; } { int m17 = z->l - z->c; (void)m17; /* do, line 388 */ z->ket = z->c; /* [, line 388 */ if (z->c - 8 <= z->lb || (z->p[z->c - 1] != 141 && z->p[z->c - 1] != 177)) goto lab57; /* among, line 388 */ if (!(find_among_b(z, a_25, 6))) goto lab57; z->bra = z->c; /* ], line 395 */ { int ret = slice_del(z); /* delete, line 395 */ if (ret < 0) return ret; } z->B[0] = 1; /* set found_a_match, line 396 */ lab57: z->c = z->l - m17; } z->c = z->lb; { int c18 = z->c; /* do, line 399 */ { int ret = r_fix_endings(z); /* call fix_endings, line 399 */ if (ret == 0) goto lab58; if (ret < 0) return ret; } lab58: z->c = c18; } return 1; } extern int tamil_UTF_8_stem(struct SN_env * z) { /* forwardmode */ z->B[1] = 0; /* unset found_vetrumai_urupu, line 403 */ { int c1 = z->c; /* do, line 404 */ { int ret = r_fix_ending(z); /* call fix_ending, line 404 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = c1; } { int ret = r_has_min_length(z); /* call has_min_length, line 405 */ if (ret <= 0) return ret; } { int c2 = z->c; /* do, line 406 */ { int ret = r_remove_question_prefixes(z); /* call remove_question_prefixes, line 406 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = c2; } { int c3 = z->c; /* do, line 407 */ { int ret = r_remove_pronoun_prefixes(z); /* call remove_pronoun_prefixes, line 407 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = c3; } { int c4 = z->c; /* do, line 408 */ { int ret = r_remove_question_suffixes(z); /* call remove_question_suffixes, line 408 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } lab3: z->c = c4; } { int c5 = z->c; /* do, line 409 */ { int ret = r_remove_um(z); /* call remove_um, line 409 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } lab4: z->c = c5; } { int c6 = z->c; /* do, line 410 */ { int ret = r_remove_common_word_endings(z); /* call remove_common_word_endings, line 410 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } lab5: z->c = c6; } { int c7 = z->c; /* do, line 411 */ { int ret = r_remove_vetrumai_urupukal(z); /* call remove_vetrumai_urupukal, line 411 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } lab6: z->c = c7; } { int c8 = z->c; /* do, line 412 */ { int ret = r_remove_plural_suffix(z); /* call remove_plural_suffix, line 412 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } lab7: z->c = c8; } { int c9 = z->c; /* do, line 413 */ { int ret = r_remove_command_suffixes(z); /* call remove_command_suffixes, line 413 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } lab8: z->c = c9; } { int c10 = z->c; /* do, line 414 */ { int ret = r_remove_tense_suffixes(z); /* call remove_tense_suffixes, line 414 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } lab9: z->c = c10; } return 1; } extern struct SN_env * tamil_UTF_8_create_env(void) { return SN_create_env(0, 1, 3); } extern void tamil_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_tamil.h000066400000000000000000000005201364126773500232650ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * tamil_UTF_8_create_env(void); extern void tamil_UTF_8_close_env(struct SN_env * z); extern int tamil_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_turkish.c000066400000000000000000002342741364126773500236620ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #include "../runtime/header.h" #ifdef __cplusplus extern "C" { #endif extern int turkish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif static int r_stem_suffix_chain_before_ki(struct SN_env * z); static int r_stem_noun_suffixes(struct SN_env * z); static int r_stem_nominal_verb_suffixes(struct SN_env * z); static int r_postlude(struct SN_env * z); static int r_post_process_last_consonants(struct SN_env * z); static int r_more_than_one_syllable_word(struct SN_env * z); static int r_mark_suffix_with_optional_s_consonant(struct SN_env * z); static int r_mark_suffix_with_optional_n_consonant(struct SN_env * z); static int r_mark_suffix_with_optional_U_vowel(struct SN_env * z); static int r_mark_suffix_with_optional_y_consonant(struct SN_env * z); static int r_mark_ysA(struct SN_env * z); static int r_mark_ymUs_(struct SN_env * z); static int r_mark_yken(struct SN_env * z); static int r_mark_yDU(struct SN_env * z); static int r_mark_yUz(struct SN_env * z); static int r_mark_yUm(struct SN_env * z); static int r_mark_yU(struct SN_env * z); static int r_mark_ylA(struct SN_env * z); static int r_mark_yA(struct SN_env * z); static int r_mark_possessives(struct SN_env * z); static int r_mark_sUnUz(struct SN_env * z); static int r_mark_sUn(struct SN_env * z); static int r_mark_sU(struct SN_env * z); static int r_mark_nUz(struct SN_env * z); static int r_mark_nUn(struct SN_env * z); static int r_mark_nU(struct SN_env * z); static int r_mark_ndAn(struct SN_env * z); static int r_mark_ndA(struct SN_env * z); static int r_mark_ncA(struct SN_env * z); static int r_mark_nA(struct SN_env * z); static int r_mark_lArI(struct SN_env * z); static int r_mark_lAr(struct SN_env * z); static int r_mark_ki(struct SN_env * z); static int r_mark_DUr(struct SN_env * z); static int r_mark_DAn(struct SN_env * z); static int r_mark_DA(struct SN_env * z); static int r_mark_cAsInA(struct SN_env * z); static int r_is_reserved_word(struct SN_env * z); static int r_check_vowel_harmony(struct SN_env * z); static int r_append_U_to_stems_ending_with_d_or_g(struct SN_env * z); #ifdef __cplusplus extern "C" { #endif extern struct SN_env * turkish_UTF_8_create_env(void); extern void turkish_UTF_8_close_env(struct SN_env * z); #ifdef __cplusplus } #endif static const symbol s_0_0[1] = { 'm' }; static const symbol s_0_1[1] = { 'n' }; static const symbol s_0_2[3] = { 'm', 'i', 'z' }; static const symbol s_0_3[3] = { 'n', 'i', 'z' }; static const symbol s_0_4[3] = { 'm', 'u', 'z' }; static const symbol s_0_5[3] = { 'n', 'u', 'z' }; static const symbol s_0_6[4] = { 'm', 0xC4, 0xB1, 'z' }; static const symbol s_0_7[4] = { 'n', 0xC4, 0xB1, 'z' }; static const symbol s_0_8[4] = { 'm', 0xC3, 0xBC, 'z' }; static const symbol s_0_9[4] = { 'n', 0xC3, 0xBC, 'z' }; static const struct among a_0[10] = { /* 0 */ { 1, s_0_0, -1, -1, 0}, /* 1 */ { 1, s_0_1, -1, -1, 0}, /* 2 */ { 3, s_0_2, -1, -1, 0}, /* 3 */ { 3, s_0_3, -1, -1, 0}, /* 4 */ { 3, s_0_4, -1, -1, 0}, /* 5 */ { 3, s_0_5, -1, -1, 0}, /* 6 */ { 4, s_0_6, -1, -1, 0}, /* 7 */ { 4, s_0_7, -1, -1, 0}, /* 8 */ { 4, s_0_8, -1, -1, 0}, /* 9 */ { 4, s_0_9, -1, -1, 0} }; static const symbol s_1_0[4] = { 'l', 'e', 'r', 'i' }; static const symbol s_1_1[5] = { 'l', 'a', 'r', 0xC4, 0xB1 }; static const struct among a_1[2] = { /* 0 */ { 4, s_1_0, -1, -1, 0}, /* 1 */ { 5, s_1_1, -1, -1, 0} }; static const symbol s_2_0[2] = { 'n', 'i' }; static const symbol s_2_1[2] = { 'n', 'u' }; static const symbol s_2_2[3] = { 'n', 0xC4, 0xB1 }; static const symbol s_2_3[3] = { 'n', 0xC3, 0xBC }; static const struct among a_2[4] = { /* 0 */ { 2, s_2_0, -1, -1, 0}, /* 1 */ { 2, s_2_1, -1, -1, 0}, /* 2 */ { 3, s_2_2, -1, -1, 0}, /* 3 */ { 3, s_2_3, -1, -1, 0} }; static const symbol s_3_0[2] = { 'i', 'n' }; static const symbol s_3_1[2] = { 'u', 'n' }; static const symbol s_3_2[3] = { 0xC4, 0xB1, 'n' }; static const symbol s_3_3[3] = { 0xC3, 0xBC, 'n' }; static const struct among a_3[4] = { /* 0 */ { 2, s_3_0, -1, -1, 0}, /* 1 */ { 2, s_3_1, -1, -1, 0}, /* 2 */ { 3, s_3_2, -1, -1, 0}, /* 3 */ { 3, s_3_3, -1, -1, 0} }; static const symbol s_4_0[1] = { 'a' }; static const symbol s_4_1[1] = { 'e' }; static const struct among a_4[2] = { /* 0 */ { 1, s_4_0, -1, -1, 0}, /* 1 */ { 1, s_4_1, -1, -1, 0} }; static const symbol s_5_0[2] = { 'n', 'a' }; static const symbol s_5_1[2] = { 'n', 'e' }; static const struct among a_5[2] = { /* 0 */ { 2, s_5_0, -1, -1, 0}, /* 1 */ { 2, s_5_1, -1, -1, 0} }; static const symbol s_6_0[2] = { 'd', 'a' }; static const symbol s_6_1[2] = { 't', 'a' }; static const symbol s_6_2[2] = { 'd', 'e' }; static const symbol s_6_3[2] = { 't', 'e' }; static const struct among a_6[4] = { /* 0 */ { 2, s_6_0, -1, -1, 0}, /* 1 */ { 2, s_6_1, -1, -1, 0}, /* 2 */ { 2, s_6_2, -1, -1, 0}, /* 3 */ { 2, s_6_3, -1, -1, 0} }; static const symbol s_7_0[3] = { 'n', 'd', 'a' }; static const symbol s_7_1[3] = { 'n', 'd', 'e' }; static const struct among a_7[2] = { /* 0 */ { 3, s_7_0, -1, -1, 0}, /* 1 */ { 3, s_7_1, -1, -1, 0} }; static const symbol s_8_0[3] = { 'd', 'a', 'n' }; static const symbol s_8_1[3] = { 't', 'a', 'n' }; static const symbol s_8_2[3] = { 'd', 'e', 'n' }; static const symbol s_8_3[3] = { 't', 'e', 'n' }; static const struct among a_8[4] = { /* 0 */ { 3, s_8_0, -1, -1, 0}, /* 1 */ { 3, s_8_1, -1, -1, 0}, /* 2 */ { 3, s_8_2, -1, -1, 0}, /* 3 */ { 3, s_8_3, -1, -1, 0} }; static const symbol s_9_0[4] = { 'n', 'd', 'a', 'n' }; static const symbol s_9_1[4] = { 'n', 'd', 'e', 'n' }; static const struct among a_9[2] = { /* 0 */ { 4, s_9_0, -1, -1, 0}, /* 1 */ { 4, s_9_1, -1, -1, 0} }; static const symbol s_10_0[2] = { 'l', 'a' }; static const symbol s_10_1[2] = { 'l', 'e' }; static const struct among a_10[2] = { /* 0 */ { 2, s_10_0, -1, -1, 0}, /* 1 */ { 2, s_10_1, -1, -1, 0} }; static const symbol s_11_0[2] = { 'c', 'a' }; static const symbol s_11_1[2] = { 'c', 'e' }; static const struct among a_11[2] = { /* 0 */ { 2, s_11_0, -1, -1, 0}, /* 1 */ { 2, s_11_1, -1, -1, 0} }; static const symbol s_12_0[2] = { 'i', 'm' }; static const symbol s_12_1[2] = { 'u', 'm' }; static const symbol s_12_2[3] = { 0xC4, 0xB1, 'm' }; static const symbol s_12_3[3] = { 0xC3, 0xBC, 'm' }; static const struct among a_12[4] = { /* 0 */ { 2, s_12_0, -1, -1, 0}, /* 1 */ { 2, s_12_1, -1, -1, 0}, /* 2 */ { 3, s_12_2, -1, -1, 0}, /* 3 */ { 3, s_12_3, -1, -1, 0} }; static const symbol s_13_0[3] = { 's', 'i', 'n' }; static const symbol s_13_1[3] = { 's', 'u', 'n' }; static const symbol s_13_2[4] = { 's', 0xC4, 0xB1, 'n' }; static const symbol s_13_3[4] = { 's', 0xC3, 0xBC, 'n' }; static const struct among a_13[4] = { /* 0 */ { 3, s_13_0, -1, -1, 0}, /* 1 */ { 3, s_13_1, -1, -1, 0}, /* 2 */ { 4, s_13_2, -1, -1, 0}, /* 3 */ { 4, s_13_3, -1, -1, 0} }; static const symbol s_14_0[2] = { 'i', 'z' }; static const symbol s_14_1[2] = { 'u', 'z' }; static const symbol s_14_2[3] = { 0xC4, 0xB1, 'z' }; static const symbol s_14_3[3] = { 0xC3, 0xBC, 'z' }; static const struct among a_14[4] = { /* 0 */ { 2, s_14_0, -1, -1, 0}, /* 1 */ { 2, s_14_1, -1, -1, 0}, /* 2 */ { 3, s_14_2, -1, -1, 0}, /* 3 */ { 3, s_14_3, -1, -1, 0} }; static const symbol s_15_0[5] = { 's', 'i', 'n', 'i', 'z' }; static const symbol s_15_1[5] = { 's', 'u', 'n', 'u', 'z' }; static const symbol s_15_2[7] = { 's', 0xC4, 0xB1, 'n', 0xC4, 0xB1, 'z' }; static const symbol s_15_3[7] = { 's', 0xC3, 0xBC, 'n', 0xC3, 0xBC, 'z' }; static const struct among a_15[4] = { /* 0 */ { 5, s_15_0, -1, -1, 0}, /* 1 */ { 5, s_15_1, -1, -1, 0}, /* 2 */ { 7, s_15_2, -1, -1, 0}, /* 3 */ { 7, s_15_3, -1, -1, 0} }; static const symbol s_16_0[3] = { 'l', 'a', 'r' }; static const symbol s_16_1[3] = { 'l', 'e', 'r' }; static const struct among a_16[2] = { /* 0 */ { 3, s_16_0, -1, -1, 0}, /* 1 */ { 3, s_16_1, -1, -1, 0} }; static const symbol s_17_0[3] = { 'n', 'i', 'z' }; static const symbol s_17_1[3] = { 'n', 'u', 'z' }; static const symbol s_17_2[4] = { 'n', 0xC4, 0xB1, 'z' }; static const symbol s_17_3[4] = { 'n', 0xC3, 0xBC, 'z' }; static const struct among a_17[4] = { /* 0 */ { 3, s_17_0, -1, -1, 0}, /* 1 */ { 3, s_17_1, -1, -1, 0}, /* 2 */ { 4, s_17_2, -1, -1, 0}, /* 3 */ { 4, s_17_3, -1, -1, 0} }; static const symbol s_18_0[3] = { 'd', 'i', 'r' }; static const symbol s_18_1[3] = { 't', 'i', 'r' }; static const symbol s_18_2[3] = { 'd', 'u', 'r' }; static const symbol s_18_3[3] = { 't', 'u', 'r' }; static const symbol s_18_4[4] = { 'd', 0xC4, 0xB1, 'r' }; static const symbol s_18_5[4] = { 't', 0xC4, 0xB1, 'r' }; static const symbol s_18_6[4] = { 'd', 0xC3, 0xBC, 'r' }; static const symbol s_18_7[4] = { 't', 0xC3, 0xBC, 'r' }; static const struct among a_18[8] = { /* 0 */ { 3, s_18_0, -1, -1, 0}, /* 1 */ { 3, s_18_1, -1, -1, 0}, /* 2 */ { 3, s_18_2, -1, -1, 0}, /* 3 */ { 3, s_18_3, -1, -1, 0}, /* 4 */ { 4, s_18_4, -1, -1, 0}, /* 5 */ { 4, s_18_5, -1, -1, 0}, /* 6 */ { 4, s_18_6, -1, -1, 0}, /* 7 */ { 4, s_18_7, -1, -1, 0} }; static const symbol s_19_0[7] = { 'c', 'a', 's', 0xC4, 0xB1, 'n', 'a' }; static const symbol s_19_1[6] = { 'c', 'e', 's', 'i', 'n', 'e' }; static const struct among a_19[2] = { /* 0 */ { 7, s_19_0, -1, -1, 0}, /* 1 */ { 6, s_19_1, -1, -1, 0} }; static const symbol s_20_0[2] = { 'd', 'i' }; static const symbol s_20_1[2] = { 't', 'i' }; static const symbol s_20_2[3] = { 'd', 'i', 'k' }; static const symbol s_20_3[3] = { 't', 'i', 'k' }; static const symbol s_20_4[3] = { 'd', 'u', 'k' }; static const symbol s_20_5[3] = { 't', 'u', 'k' }; static const symbol s_20_6[4] = { 'd', 0xC4, 0xB1, 'k' }; static const symbol s_20_7[4] = { 't', 0xC4, 0xB1, 'k' }; static const symbol s_20_8[4] = { 'd', 0xC3, 0xBC, 'k' }; static const symbol s_20_9[4] = { 't', 0xC3, 0xBC, 'k' }; static const symbol s_20_10[3] = { 'd', 'i', 'm' }; static const symbol s_20_11[3] = { 't', 'i', 'm' }; static const symbol s_20_12[3] = { 'd', 'u', 'm' }; static const symbol s_20_13[3] = { 't', 'u', 'm' }; static const symbol s_20_14[4] = { 'd', 0xC4, 0xB1, 'm' }; static const symbol s_20_15[4] = { 't', 0xC4, 0xB1, 'm' }; static const symbol s_20_16[4] = { 'd', 0xC3, 0xBC, 'm' }; static const symbol s_20_17[4] = { 't', 0xC3, 0xBC, 'm' }; static const symbol s_20_18[3] = { 'd', 'i', 'n' }; static const symbol s_20_19[3] = { 't', 'i', 'n' }; static const symbol s_20_20[3] = { 'd', 'u', 'n' }; static const symbol s_20_21[3] = { 't', 'u', 'n' }; static const symbol s_20_22[4] = { 'd', 0xC4, 0xB1, 'n' }; static const symbol s_20_23[4] = { 't', 0xC4, 0xB1, 'n' }; static const symbol s_20_24[4] = { 'd', 0xC3, 0xBC, 'n' }; static const symbol s_20_25[4] = { 't', 0xC3, 0xBC, 'n' }; static const symbol s_20_26[2] = { 'd', 'u' }; static const symbol s_20_27[2] = { 't', 'u' }; static const symbol s_20_28[3] = { 'd', 0xC4, 0xB1 }; static const symbol s_20_29[3] = { 't', 0xC4, 0xB1 }; static const symbol s_20_30[3] = { 'd', 0xC3, 0xBC }; static const symbol s_20_31[3] = { 't', 0xC3, 0xBC }; static const struct among a_20[32] = { /* 0 */ { 2, s_20_0, -1, -1, 0}, /* 1 */ { 2, s_20_1, -1, -1, 0}, /* 2 */ { 3, s_20_2, -1, -1, 0}, /* 3 */ { 3, s_20_3, -1, -1, 0}, /* 4 */ { 3, s_20_4, -1, -1, 0}, /* 5 */ { 3, s_20_5, -1, -1, 0}, /* 6 */ { 4, s_20_6, -1, -1, 0}, /* 7 */ { 4, s_20_7, -1, -1, 0}, /* 8 */ { 4, s_20_8, -1, -1, 0}, /* 9 */ { 4, s_20_9, -1, -1, 0}, /* 10 */ { 3, s_20_10, -1, -1, 0}, /* 11 */ { 3, s_20_11, -1, -1, 0}, /* 12 */ { 3, s_20_12, -1, -1, 0}, /* 13 */ { 3, s_20_13, -1, -1, 0}, /* 14 */ { 4, s_20_14, -1, -1, 0}, /* 15 */ { 4, s_20_15, -1, -1, 0}, /* 16 */ { 4, s_20_16, -1, -1, 0}, /* 17 */ { 4, s_20_17, -1, -1, 0}, /* 18 */ { 3, s_20_18, -1, -1, 0}, /* 19 */ { 3, s_20_19, -1, -1, 0}, /* 20 */ { 3, s_20_20, -1, -1, 0}, /* 21 */ { 3, s_20_21, -1, -1, 0}, /* 22 */ { 4, s_20_22, -1, -1, 0}, /* 23 */ { 4, s_20_23, -1, -1, 0}, /* 24 */ { 4, s_20_24, -1, -1, 0}, /* 25 */ { 4, s_20_25, -1, -1, 0}, /* 26 */ { 2, s_20_26, -1, -1, 0}, /* 27 */ { 2, s_20_27, -1, -1, 0}, /* 28 */ { 3, s_20_28, -1, -1, 0}, /* 29 */ { 3, s_20_29, -1, -1, 0}, /* 30 */ { 3, s_20_30, -1, -1, 0}, /* 31 */ { 3, s_20_31, -1, -1, 0} }; static const symbol s_21_0[2] = { 's', 'a' }; static const symbol s_21_1[2] = { 's', 'e' }; static const symbol s_21_2[3] = { 's', 'a', 'k' }; static const symbol s_21_3[3] = { 's', 'e', 'k' }; static const symbol s_21_4[3] = { 's', 'a', 'm' }; static const symbol s_21_5[3] = { 's', 'e', 'm' }; static const symbol s_21_6[3] = { 's', 'a', 'n' }; static const symbol s_21_7[3] = { 's', 'e', 'n' }; static const struct among a_21[8] = { /* 0 */ { 2, s_21_0, -1, -1, 0}, /* 1 */ { 2, s_21_1, -1, -1, 0}, /* 2 */ { 3, s_21_2, -1, -1, 0}, /* 3 */ { 3, s_21_3, -1, -1, 0}, /* 4 */ { 3, s_21_4, -1, -1, 0}, /* 5 */ { 3, s_21_5, -1, -1, 0}, /* 6 */ { 3, s_21_6, -1, -1, 0}, /* 7 */ { 3, s_21_7, -1, -1, 0} }; static const symbol s_22_0[4] = { 'm', 'i', 0xC5, 0x9F }; static const symbol s_22_1[4] = { 'm', 'u', 0xC5, 0x9F }; static const symbol s_22_2[5] = { 'm', 0xC4, 0xB1, 0xC5, 0x9F }; static const symbol s_22_3[5] = { 'm', 0xC3, 0xBC, 0xC5, 0x9F }; static const struct among a_22[4] = { /* 0 */ { 4, s_22_0, -1, -1, 0}, /* 1 */ { 4, s_22_1, -1, -1, 0}, /* 2 */ { 5, s_22_2, -1, -1, 0}, /* 3 */ { 5, s_22_3, -1, -1, 0} }; static const symbol s_23_0[1] = { 'b' }; static const symbol s_23_1[1] = { 'c' }; static const symbol s_23_2[1] = { 'd' }; static const symbol s_23_3[2] = { 0xC4, 0x9F }; static const struct among a_23[4] = { /* 0 */ { 1, s_23_0, -1, 1, 0}, /* 1 */ { 1, s_23_1, -1, 2, 0}, /* 2 */ { 1, s_23_2, -1, 3, 0}, /* 3 */ { 2, s_23_3, -1, 4, 0} }; static const unsigned char g_vowel[] = { 17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 1 }; static const unsigned char g_U[] = { 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1 }; static const unsigned char g_vowel1[] = { 1, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; static const unsigned char g_vowel2[] = { 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130 }; static const unsigned char g_vowel3[] = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; static const unsigned char g_vowel4[] = { 17 }; static const unsigned char g_vowel5[] = { 65 }; static const unsigned char g_vowel6[] = { 65 }; static const symbol s_0[] = { 0xC4, 0xB1 }; static const symbol s_1[] = { 0xC3, 0xB6 }; static const symbol s_2[] = { 0xC3, 0xBC }; static const symbol s_3[] = { 'k', 'i' }; static const symbol s_4[] = { 'k', 'e', 'n' }; static const symbol s_5[] = { 'p' }; static const symbol s_6[] = { 0xC3, 0xA7 }; static const symbol s_7[] = { 't' }; static const symbol s_8[] = { 'k' }; static const symbol s_9[] = { 0xC4, 0xB1 }; static const symbol s_10[] = { 0xC4, 0xB1 }; static const symbol s_11[] = { 'i' }; static const symbol s_12[] = { 'u' }; static const symbol s_13[] = { 0xC3, 0xB6 }; static const symbol s_14[] = { 0xC3, 0xBC }; static const symbol s_15[] = { 0xC3, 0xBC }; static const symbol s_16[] = { 'a', 'd' }; static const symbol s_17[] = { 's', 'o', 'y', 'a', 'd' }; static int r_check_vowel_harmony(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 112 */ if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) return 0; /* goto */ /* grouping vowel, line 114 */ { int m2 = z->l - z->c; (void)m2; /* or, line 116 */ if (z->c <= z->lb || z->p[z->c - 1] != 'a') goto lab1; /* literal, line 116 */ z->c--; if (out_grouping_b_U(z, g_vowel1, 97, 305, 1) < 0) goto lab1; /* goto */ /* grouping vowel1, line 116 */ goto lab0; lab1: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab2; /* literal, line 117 */ z->c--; if (out_grouping_b_U(z, g_vowel2, 101, 252, 1) < 0) goto lab2; /* goto */ /* grouping vowel2, line 117 */ goto lab0; lab2: z->c = z->l - m2; if (!(eq_s_b(z, 2, s_0))) goto lab3; /* literal, line 118 */ if (out_grouping_b_U(z, g_vowel3, 97, 305, 1) < 0) goto lab3; /* goto */ /* grouping vowel3, line 118 */ goto lab0; lab3: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'i') goto lab4; /* literal, line 119 */ z->c--; if (out_grouping_b_U(z, g_vowel4, 101, 105, 1) < 0) goto lab4; /* goto */ /* grouping vowel4, line 119 */ goto lab0; lab4: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'o') goto lab5; /* literal, line 120 */ z->c--; if (out_grouping_b_U(z, g_vowel5, 111, 117, 1) < 0) goto lab5; /* goto */ /* grouping vowel5, line 120 */ goto lab0; lab5: z->c = z->l - m2; if (!(eq_s_b(z, 2, s_1))) goto lab6; /* literal, line 121 */ if (out_grouping_b_U(z, g_vowel6, 246, 252, 1) < 0) goto lab6; /* goto */ /* grouping vowel6, line 121 */ goto lab0; lab6: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'u') goto lab7; /* literal, line 122 */ z->c--; if (out_grouping_b_U(z, g_vowel5, 111, 117, 1) < 0) goto lab7; /* goto */ /* grouping vowel5, line 122 */ goto lab0; lab7: z->c = z->l - m2; if (!(eq_s_b(z, 2, s_2))) return 0; /* literal, line 123 */ if (out_grouping_b_U(z, g_vowel6, 246, 252, 1) < 0) return 0; /* goto */ /* grouping vowel6, line 123 */ } lab0: z->c = z->l - m_test1; } return 1; } static int r_mark_suffix_with_optional_n_consonant(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 134 */ if (z->c <= z->lb || z->p[z->c - 1] != 'n') goto lab1; /* literal, line 133 */ z->c--; { int m_test2 = z->l - z->c; /* test, line 133 */ if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1; /* grouping vowel, line 133 */ z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; { int m3 = z->l - z->c; (void)m3; /* not, line 135 */ { int m_test4 = z->l - z->c; /* test, line 135 */ if (z->c <= z->lb || z->p[z->c - 1] != 'n') goto lab2; /* literal, line 135 */ z->c--; z->c = z->l - m_test4; } return 0; lab2: z->c = z->l - m3; } { int m_test5 = z->l - z->c; /* test, line 135 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 135 */ } if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0; /* grouping vowel, line 135 */ z->c = z->l - m_test5; } } lab0: return 1; } static int r_mark_suffix_with_optional_s_consonant(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 145 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab1; /* literal, line 144 */ z->c--; { int m_test2 = z->l - z->c; /* test, line 144 */ if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1; /* grouping vowel, line 144 */ z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; { int m3 = z->l - z->c; (void)m3; /* not, line 146 */ { int m_test4 = z->l - z->c; /* test, line 146 */ if (z->c <= z->lb || z->p[z->c - 1] != 's') goto lab2; /* literal, line 146 */ z->c--; z->c = z->l - m_test4; } return 0; lab2: z->c = z->l - m3; } { int m_test5 = z->l - z->c; /* test, line 146 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 146 */ } if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0; /* grouping vowel, line 146 */ z->c = z->l - m_test5; } } lab0: return 1; } static int r_mark_suffix_with_optional_y_consonant(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 155 */ if (z->c <= z->lb || z->p[z->c - 1] != 'y') goto lab1; /* literal, line 154 */ z->c--; { int m_test2 = z->l - z->c; /* test, line 154 */ if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1; /* grouping vowel, line 154 */ z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; { int m3 = z->l - z->c; (void)m3; /* not, line 156 */ { int m_test4 = z->l - z->c; /* test, line 156 */ if (z->c <= z->lb || z->p[z->c - 1] != 'y') goto lab2; /* literal, line 156 */ z->c--; z->c = z->l - m_test4; } return 0; lab2: z->c = z->l - m3; } { int m_test5 = z->l - z->c; /* test, line 156 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 156 */ } if (in_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0; /* grouping vowel, line 156 */ z->c = z->l - m_test5; } } lab0: return 1; } static int r_mark_suffix_with_optional_U_vowel(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 161 */ if (in_grouping_b_U(z, g_U, 105, 305, 0)) goto lab1; /* grouping U, line 160 */ { int m_test2 = z->l - z->c; /* test, line 160 */ if (out_grouping_b_U(z, g_vowel, 97, 305, 0)) goto lab1; /* non vowel, line 160 */ z->c = z->l - m_test2; } goto lab0; lab1: z->c = z->l - m1; { int m3 = z->l - z->c; (void)m3; /* not, line 162 */ { int m_test4 = z->l - z->c; /* test, line 162 */ if (in_grouping_b_U(z, g_U, 105, 305, 0)) goto lab2; /* grouping U, line 162 */ z->c = z->l - m_test4; } return 0; lab2: z->c = z->l - m3; } { int m_test5 = z->l - z->c; /* test, line 162 */ { int ret = skip_utf8(z->p, z->c, z->lb, 0, -1); if (ret < 0) return 0; z->c = ret; /* next, line 162 */ } if (out_grouping_b_U(z, g_vowel, 97, 305, 0)) return 0; /* non vowel, line 162 */ z->c = z->l - m_test5; } } lab0: return 1; } static int r_mark_possessives(struct SN_env * z) { /* backwardmode */ if (z->c <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((67133440 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 167 */ if (!(find_among_b(z, a_0, 10))) return 0; { int ret = r_mark_suffix_with_optional_U_vowel(z); /* call mark_suffix_with_optional_U_vowel, line 169 */ if (ret <= 0) return ret; } return 1; } static int r_mark_sU(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 173 */ if (ret <= 0) return ret; } if (in_grouping_b_U(z, g_U, 105, 305, 0)) return 0; /* grouping U, line 174 */ { int ret = r_mark_suffix_with_optional_s_consonant(z); /* call mark_suffix_with_optional_s_consonant, line 175 */ if (ret <= 0) return ret; } return 1; } static int r_mark_lArI(struct SN_env * z) { /* backwardmode */ if (z->c - 3 <= z->lb || (z->p[z->c - 1] != 105 && z->p[z->c - 1] != 177)) return 0; /* among, line 179 */ if (!(find_among_b(z, a_1, 2))) return 0; return 1; } static int r_mark_yU(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 183 */ if (ret <= 0) return ret; } if (in_grouping_b_U(z, g_U, 105, 305, 0)) return 0; /* grouping U, line 184 */ { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 185 */ if (ret <= 0) return ret; } return 1; } static int r_mark_nU(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 189 */ if (ret <= 0) return ret; } if (!(find_among_b(z, a_2, 4))) return 0; /* among, line 190 */ return 1; } static int r_mark_nUn(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 194 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || z->p[z->c - 1] != 110) return 0; /* among, line 195 */ if (!(find_among_b(z, a_3, 4))) return 0; { int ret = r_mark_suffix_with_optional_n_consonant(z); /* call mark_suffix_with_optional_n_consonant, line 196 */ if (ret <= 0) return ret; } return 1; } static int r_mark_yA(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 200 */ if (ret <= 0) return ret; } if (z->c <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 201 */ if (!(find_among_b(z, a_4, 2))) return 0; { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 202 */ if (ret <= 0) return ret; } return 1; } static int r_mark_nA(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 206 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 207 */ if (!(find_among_b(z, a_5, 2))) return 0; return 1; } static int r_mark_DA(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 211 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 212 */ if (!(find_among_b(z, a_6, 4))) return 0; return 1; } static int r_mark_ndA(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 216 */ if (ret <= 0) return ret; } if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 217 */ if (!(find_among_b(z, a_7, 2))) return 0; return 1; } static int r_mark_DAn(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 221 */ if (ret <= 0) return ret; } if (z->c - 2 <= z->lb || z->p[z->c - 1] != 110) return 0; /* among, line 222 */ if (!(find_among_b(z, a_8, 4))) return 0; return 1; } static int r_mark_ndAn(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 226 */ if (ret <= 0) return ret; } if (z->c - 3 <= z->lb || z->p[z->c - 1] != 110) return 0; /* among, line 227 */ if (!(find_among_b(z, a_9, 2))) return 0; return 1; } static int r_mark_ylA(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 231 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 232 */ if (!(find_among_b(z, a_10, 2))) return 0; { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 233 */ if (ret <= 0) return ret; } return 1; } static int r_mark_ki(struct SN_env * z) { /* backwardmode */ if (!(eq_s_b(z, 2, s_3))) return 0; /* literal, line 237 */ return 1; } static int r_mark_ncA(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 241 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 242 */ if (!(find_among_b(z, a_11, 2))) return 0; { int ret = r_mark_suffix_with_optional_n_consonant(z); /* call mark_suffix_with_optional_n_consonant, line 243 */ if (ret <= 0) return ret; } return 1; } static int r_mark_yUm(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 247 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || z->p[z->c - 1] != 109) return 0; /* among, line 248 */ if (!(find_among_b(z, a_12, 4))) return 0; { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 249 */ if (ret <= 0) return ret; } return 1; } static int r_mark_sUn(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 253 */ if (ret <= 0) return ret; } if (z->c - 2 <= z->lb || z->p[z->c - 1] != 110) return 0; /* among, line 254 */ if (!(find_among_b(z, a_13, 4))) return 0; return 1; } static int r_mark_yUz(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 258 */ if (ret <= 0) return ret; } if (z->c - 1 <= z->lb || z->p[z->c - 1] != 122) return 0; /* among, line 259 */ if (!(find_among_b(z, a_14, 4))) return 0; { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 260 */ if (ret <= 0) return ret; } return 1; } static int r_mark_sUnUz(struct SN_env * z) { /* backwardmode */ if (z->c - 4 <= z->lb || z->p[z->c - 1] != 122) return 0; /* among, line 264 */ if (!(find_among_b(z, a_15, 4))) return 0; return 1; } static int r_mark_lAr(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 268 */ if (ret <= 0) return ret; } if (z->c - 2 <= z->lb || z->p[z->c - 1] != 114) return 0; /* among, line 269 */ if (!(find_among_b(z, a_16, 2))) return 0; return 1; } static int r_mark_nUz(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 273 */ if (ret <= 0) return ret; } if (z->c - 2 <= z->lb || z->p[z->c - 1] != 122) return 0; /* among, line 274 */ if (!(find_among_b(z, a_17, 4))) return 0; return 1; } static int r_mark_DUr(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 278 */ if (ret <= 0) return ret; } if (z->c - 2 <= z->lb || z->p[z->c - 1] != 114) return 0; /* among, line 279 */ if (!(find_among_b(z, a_18, 8))) return 0; return 1; } static int r_mark_cAsInA(struct SN_env * z) { /* backwardmode */ if (z->c - 5 <= z->lb || (z->p[z->c - 1] != 97 && z->p[z->c - 1] != 101)) return 0; /* among, line 283 */ if (!(find_among_b(z, a_19, 2))) return 0; return 1; } static int r_mark_yDU(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 287 */ if (ret <= 0) return ret; } if (!(find_among_b(z, a_20, 32))) return 0; /* among, line 288 */ { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 292 */ if (ret <= 0) return ret; } return 1; } static int r_mark_ysA(struct SN_env * z) { /* backwardmode */ if (z->c - 1 <= z->lb || z->p[z->c - 1] >> 5 != 3 || !((26658 >> (z->p[z->c - 1] & 0x1f)) & 1)) return 0; /* among, line 297 */ if (!(find_among_b(z, a_21, 8))) return 0; { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 298 */ if (ret <= 0) return ret; } return 1; } static int r_mark_ymUs_(struct SN_env * z) { /* backwardmode */ { int ret = r_check_vowel_harmony(z); /* call check_vowel_harmony, line 302 */ if (ret <= 0) return ret; } if (z->c - 3 <= z->lb || z->p[z->c - 1] != 159) return 0; /* among, line 303 */ if (!(find_among_b(z, a_22, 4))) return 0; { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 304 */ if (ret <= 0) return ret; } return 1; } static int r_mark_yken(struct SN_env * z) { /* backwardmode */ if (!(eq_s_b(z, 3, s_4))) return 0; /* literal, line 308 */ { int ret = r_mark_suffix_with_optional_y_consonant(z); /* call mark_suffix_with_optional_y_consonant, line 308 */ if (ret <= 0) return ret; } return 1; } static int r_stem_nominal_verb_suffixes(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 312 */ z->B[0] = 1; /* set continue_stemming_noun_suffixes, line 313 */ { int m1 = z->l - z->c; (void)m1; /* or, line 315 */ { int m2 = z->l - z->c; (void)m2; /* or, line 314 */ { int ret = r_mark_ymUs_(z); /* call mark_ymUs_, line 314 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } goto lab2; lab3: z->c = z->l - m2; { int ret = r_mark_yDU(z); /* call mark_yDU, line 314 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } goto lab2; lab4: z->c = z->l - m2; { int ret = r_mark_ysA(z); /* call mark_ysA, line 314 */ if (ret == 0) goto lab5; if (ret < 0) return ret; } goto lab2; lab5: z->c = z->l - m2; { int ret = r_mark_yken(z); /* call mark_yken, line 314 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } } lab2: goto lab0; lab1: z->c = z->l - m1; { int ret = r_mark_cAsInA(z); /* call mark_cAsInA, line 316 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* or, line 316 */ { int ret = r_mark_sUnUz(z); /* call mark_sUnUz, line 316 */ if (ret == 0) goto lab8; if (ret < 0) return ret; } goto lab7; lab8: z->c = z->l - m3; { int ret = r_mark_lAr(z); /* call mark_lAr, line 316 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } goto lab7; lab9: z->c = z->l - m3; { int ret = r_mark_yUm(z); /* call mark_yUm, line 316 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } goto lab7; lab10: z->c = z->l - m3; { int ret = r_mark_sUn(z); /* call mark_sUn, line 316 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } goto lab7; lab11: z->c = z->l - m3; { int ret = r_mark_yUz(z); /* call mark_yUz, line 316 */ if (ret == 0) goto lab12; if (ret < 0) return ret; } goto lab7; lab12: z->c = z->l - m3; } lab7: { int ret = r_mark_ymUs_(z); /* call mark_ymUs_, line 316 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } goto lab0; lab6: z->c = z->l - m1; { int ret = r_mark_lAr(z); /* call mark_lAr, line 319 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } z->bra = z->c; /* ], line 319 */ { int ret = slice_del(z); /* delete, line 319 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 319 */ z->ket = z->c; /* [, line 319 */ { int m5 = z->l - z->c; (void)m5; /* or, line 319 */ { int ret = r_mark_DUr(z); /* call mark_DUr, line 319 */ if (ret == 0) goto lab16; if (ret < 0) return ret; } goto lab15; lab16: z->c = z->l - m5; { int ret = r_mark_yDU(z); /* call mark_yDU, line 319 */ if (ret == 0) goto lab17; if (ret < 0) return ret; } goto lab15; lab17: z->c = z->l - m5; { int ret = r_mark_ysA(z); /* call mark_ysA, line 319 */ if (ret == 0) goto lab18; if (ret < 0) return ret; } goto lab15; lab18: z->c = z->l - m5; { int ret = r_mark_ymUs_(z); /* call mark_ymUs_, line 319 */ if (ret == 0) { z->c = z->l - m4; goto lab14; } if (ret < 0) return ret; } } lab15: lab14: ; } z->B[0] = 0; /* unset continue_stemming_noun_suffixes, line 320 */ goto lab0; lab13: z->c = z->l - m1; { int ret = r_mark_nUz(z); /* call mark_nUz, line 323 */ if (ret == 0) goto lab19; if (ret < 0) return ret; } { int m6 = z->l - z->c; (void)m6; /* or, line 323 */ { int ret = r_mark_yDU(z); /* call mark_yDU, line 323 */ if (ret == 0) goto lab21; if (ret < 0) return ret; } goto lab20; lab21: z->c = z->l - m6; { int ret = r_mark_ysA(z); /* call mark_ysA, line 323 */ if (ret == 0) goto lab19; if (ret < 0) return ret; } } lab20: goto lab0; lab19: z->c = z->l - m1; { int m7 = z->l - z->c; (void)m7; /* or, line 325 */ { int ret = r_mark_sUnUz(z); /* call mark_sUnUz, line 325 */ if (ret == 0) goto lab24; if (ret < 0) return ret; } goto lab23; lab24: z->c = z->l - m7; { int ret = r_mark_yUz(z); /* call mark_yUz, line 325 */ if (ret == 0) goto lab25; if (ret < 0) return ret; } goto lab23; lab25: z->c = z->l - m7; { int ret = r_mark_sUn(z); /* call mark_sUn, line 325 */ if (ret == 0) goto lab26; if (ret < 0) return ret; } goto lab23; lab26: z->c = z->l - m7; { int ret = r_mark_yUm(z); /* call mark_yUm, line 325 */ if (ret == 0) goto lab22; if (ret < 0) return ret; } } lab23: z->bra = z->c; /* ], line 325 */ { int ret = slice_del(z); /* delete, line 325 */ if (ret < 0) return ret; } { int m8 = z->l - z->c; (void)m8; /* try, line 325 */ z->ket = z->c; /* [, line 325 */ { int ret = r_mark_ymUs_(z); /* call mark_ymUs_, line 325 */ if (ret == 0) { z->c = z->l - m8; goto lab27; } if (ret < 0) return ret; } lab27: ; } goto lab0; lab22: z->c = z->l - m1; { int ret = r_mark_DUr(z); /* call mark_DUr, line 327 */ if (ret <= 0) return ret; } z->bra = z->c; /* ], line 327 */ { int ret = slice_del(z); /* delete, line 327 */ if (ret < 0) return ret; } { int m9 = z->l - z->c; (void)m9; /* try, line 327 */ z->ket = z->c; /* [, line 327 */ { int m10 = z->l - z->c; (void)m10; /* or, line 327 */ { int ret = r_mark_sUnUz(z); /* call mark_sUnUz, line 327 */ if (ret == 0) goto lab30; if (ret < 0) return ret; } goto lab29; lab30: z->c = z->l - m10; { int ret = r_mark_lAr(z); /* call mark_lAr, line 327 */ if (ret == 0) goto lab31; if (ret < 0) return ret; } goto lab29; lab31: z->c = z->l - m10; { int ret = r_mark_yUm(z); /* call mark_yUm, line 327 */ if (ret == 0) goto lab32; if (ret < 0) return ret; } goto lab29; lab32: z->c = z->l - m10; { int ret = r_mark_sUn(z); /* call mark_sUn, line 327 */ if (ret == 0) goto lab33; if (ret < 0) return ret; } goto lab29; lab33: z->c = z->l - m10; { int ret = r_mark_yUz(z); /* call mark_yUz, line 327 */ if (ret == 0) goto lab34; if (ret < 0) return ret; } goto lab29; lab34: z->c = z->l - m10; } lab29: { int ret = r_mark_ymUs_(z); /* call mark_ymUs_, line 327 */ if (ret == 0) { z->c = z->l - m9; goto lab28; } if (ret < 0) return ret; } lab28: ; } } lab0: z->bra = z->c; /* ], line 328 */ { int ret = slice_del(z); /* delete, line 328 */ if (ret < 0) return ret; } return 1; } static int r_stem_suffix_chain_before_ki(struct SN_env * z) { /* backwardmode */ z->ket = z->c; /* [, line 333 */ { int ret = r_mark_ki(z); /* call mark_ki, line 334 */ if (ret <= 0) return ret; } { int m1 = z->l - z->c; (void)m1; /* or, line 342 */ { int ret = r_mark_DA(z); /* call mark_DA, line 336 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } z->bra = z->c; /* ], line 336 */ { int ret = slice_del(z); /* delete, line 336 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 336 */ z->ket = z->c; /* [, line 336 */ { int m3 = z->l - z->c; (void)m3; /* or, line 338 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 337 */ if (ret == 0) goto lab4; if (ret < 0) return ret; } z->bra = z->c; /* ], line 337 */ { int ret = slice_del(z); /* delete, line 337 */ if (ret < 0) return ret; } { int m4 = z->l - z->c; (void)m4; /* try, line 337 */ { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 337 */ if (ret == 0) { z->c = z->l - m4; goto lab5; } if (ret < 0) return ret; } lab5: ; } goto lab3; lab4: z->c = z->l - m3; { int ret = r_mark_possessives(z); /* call mark_possessives, line 339 */ if (ret == 0) { z->c = z->l - m2; goto lab2; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 339 */ { int ret = slice_del(z); /* delete, line 339 */ if (ret < 0) return ret; } { int m5 = z->l - z->c; (void)m5; /* try, line 339 */ z->ket = z->c; /* [, line 339 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 339 */ if (ret == 0) { z->c = z->l - m5; goto lab6; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 339 */ { int ret = slice_del(z); /* delete, line 339 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 339 */ if (ret == 0) { z->c = z->l - m5; goto lab6; } if (ret < 0) return ret; } lab6: ; } } lab3: lab2: ; } goto lab0; lab1: z->c = z->l - m1; { int ret = r_mark_nUn(z); /* call mark_nUn, line 343 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } z->bra = z->c; /* ], line 343 */ { int ret = slice_del(z); /* delete, line 343 */ if (ret < 0) return ret; } { int m6 = z->l - z->c; (void)m6; /* try, line 343 */ z->ket = z->c; /* [, line 343 */ { int m7 = z->l - z->c; (void)m7; /* or, line 345 */ { int ret = r_mark_lArI(z); /* call mark_lArI, line 344 */ if (ret == 0) goto lab10; if (ret < 0) return ret; } z->bra = z->c; /* ], line 344 */ { int ret = slice_del(z); /* delete, line 344 */ if (ret < 0) return ret; } goto lab9; lab10: z->c = z->l - m7; z->ket = z->c; /* [, line 346 */ { int m8 = z->l - z->c; (void)m8; /* or, line 346 */ { int ret = r_mark_possessives(z); /* call mark_possessives, line 346 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } goto lab12; lab13: z->c = z->l - m8; { int ret = r_mark_sU(z); /* call mark_sU, line 346 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } } lab12: z->bra = z->c; /* ], line 346 */ { int ret = slice_del(z); /* delete, line 346 */ if (ret < 0) return ret; } { int m9 = z->l - z->c; (void)m9; /* try, line 346 */ z->ket = z->c; /* [, line 346 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 346 */ if (ret == 0) { z->c = z->l - m9; goto lab14; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 346 */ { int ret = slice_del(z); /* delete, line 346 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 346 */ if (ret == 0) { z->c = z->l - m9; goto lab14; } if (ret < 0) return ret; } lab14: ; } goto lab9; lab11: z->c = z->l - m7; { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 348 */ if (ret == 0) { z->c = z->l - m6; goto lab8; } if (ret < 0) return ret; } } lab9: lab8: ; } goto lab0; lab7: z->c = z->l - m1; { int ret = r_mark_ndA(z); /* call mark_ndA, line 351 */ if (ret <= 0) return ret; } { int m10 = z->l - z->c; (void)m10; /* or, line 353 */ { int ret = r_mark_lArI(z); /* call mark_lArI, line 352 */ if (ret == 0) goto lab16; if (ret < 0) return ret; } z->bra = z->c; /* ], line 352 */ { int ret = slice_del(z); /* delete, line 352 */ if (ret < 0) return ret; } goto lab15; lab16: z->c = z->l - m10; { int ret = r_mark_sU(z); /* call mark_sU, line 354 */ if (ret == 0) goto lab17; if (ret < 0) return ret; } z->bra = z->c; /* ], line 354 */ { int ret = slice_del(z); /* delete, line 354 */ if (ret < 0) return ret; } { int m11 = z->l - z->c; (void)m11; /* try, line 354 */ z->ket = z->c; /* [, line 354 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 354 */ if (ret == 0) { z->c = z->l - m11; goto lab18; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 354 */ { int ret = slice_del(z); /* delete, line 354 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 354 */ if (ret == 0) { z->c = z->l - m11; goto lab18; } if (ret < 0) return ret; } lab18: ; } goto lab15; lab17: z->c = z->l - m10; { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 356 */ if (ret <= 0) return ret; } } lab15: ; } lab0: return 1; } static int r_stem_noun_suffixes(struct SN_env * z) { /* backwardmode */ { int m1 = z->l - z->c; (void)m1; /* or, line 363 */ z->ket = z->c; /* [, line 362 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 362 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } z->bra = z->c; /* ], line 362 */ { int ret = slice_del(z); /* delete, line 362 */ if (ret < 0) return ret; } { int m2 = z->l - z->c; (void)m2; /* try, line 362 */ { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 362 */ if (ret == 0) { z->c = z->l - m2; goto lab2; } if (ret < 0) return ret; } lab2: ; } goto lab0; lab1: z->c = z->l - m1; z->ket = z->c; /* [, line 364 */ { int ret = r_mark_ncA(z); /* call mark_ncA, line 364 */ if (ret == 0) goto lab3; if (ret < 0) return ret; } z->bra = z->c; /* ], line 364 */ { int ret = slice_del(z); /* delete, line 364 */ if (ret < 0) return ret; } { int m3 = z->l - z->c; (void)m3; /* try, line 365 */ { int m4 = z->l - z->c; (void)m4; /* or, line 367 */ z->ket = z->c; /* [, line 366 */ { int ret = r_mark_lArI(z); /* call mark_lArI, line 366 */ if (ret == 0) goto lab6; if (ret < 0) return ret; } z->bra = z->c; /* ], line 366 */ { int ret = slice_del(z); /* delete, line 366 */ if (ret < 0) return ret; } goto lab5; lab6: z->c = z->l - m4; z->ket = z->c; /* [, line 368 */ { int m5 = z->l - z->c; (void)m5; /* or, line 368 */ { int ret = r_mark_possessives(z); /* call mark_possessives, line 368 */ if (ret == 0) goto lab9; if (ret < 0) return ret; } goto lab8; lab9: z->c = z->l - m5; { int ret = r_mark_sU(z); /* call mark_sU, line 368 */ if (ret == 0) goto lab7; if (ret < 0) return ret; } } lab8: z->bra = z->c; /* ], line 368 */ { int ret = slice_del(z); /* delete, line 368 */ if (ret < 0) return ret; } { int m6 = z->l - z->c; (void)m6; /* try, line 368 */ z->ket = z->c; /* [, line 368 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 368 */ if (ret == 0) { z->c = z->l - m6; goto lab10; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 368 */ { int ret = slice_del(z); /* delete, line 368 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 368 */ if (ret == 0) { z->c = z->l - m6; goto lab10; } if (ret < 0) return ret; } lab10: ; } goto lab5; lab7: z->c = z->l - m4; z->ket = z->c; /* [, line 370 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 370 */ if (ret == 0) { z->c = z->l - m3; goto lab4; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 370 */ { int ret = slice_del(z); /* delete, line 370 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 370 */ if (ret == 0) { z->c = z->l - m3; goto lab4; } if (ret < 0) return ret; } } lab5: lab4: ; } goto lab0; lab3: z->c = z->l - m1; z->ket = z->c; /* [, line 374 */ { int m7 = z->l - z->c; (void)m7; /* or, line 374 */ { int ret = r_mark_ndA(z); /* call mark_ndA, line 374 */ if (ret == 0) goto lab13; if (ret < 0) return ret; } goto lab12; lab13: z->c = z->l - m7; { int ret = r_mark_nA(z); /* call mark_nA, line 374 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } } lab12: { int m8 = z->l - z->c; (void)m8; /* or, line 377 */ { int ret = r_mark_lArI(z); /* call mark_lArI, line 376 */ if (ret == 0) goto lab15; if (ret < 0) return ret; } z->bra = z->c; /* ], line 376 */ { int ret = slice_del(z); /* delete, line 376 */ if (ret < 0) return ret; } goto lab14; lab15: z->c = z->l - m8; { int ret = r_mark_sU(z); /* call mark_sU, line 378 */ if (ret == 0) goto lab16; if (ret < 0) return ret; } z->bra = z->c; /* ], line 378 */ { int ret = slice_del(z); /* delete, line 378 */ if (ret < 0) return ret; } { int m9 = z->l - z->c; (void)m9; /* try, line 378 */ z->ket = z->c; /* [, line 378 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 378 */ if (ret == 0) { z->c = z->l - m9; goto lab17; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 378 */ { int ret = slice_del(z); /* delete, line 378 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 378 */ if (ret == 0) { z->c = z->l - m9; goto lab17; } if (ret < 0) return ret; } lab17: ; } goto lab14; lab16: z->c = z->l - m8; { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 380 */ if (ret == 0) goto lab11; if (ret < 0) return ret; } } lab14: goto lab0; lab11: z->c = z->l - m1; z->ket = z->c; /* [, line 384 */ { int m10 = z->l - z->c; (void)m10; /* or, line 384 */ { int ret = r_mark_ndAn(z); /* call mark_ndAn, line 384 */ if (ret == 0) goto lab20; if (ret < 0) return ret; } goto lab19; lab20: z->c = z->l - m10; { int ret = r_mark_nU(z); /* call mark_nU, line 384 */ if (ret == 0) goto lab18; if (ret < 0) return ret; } } lab19: { int m11 = z->l - z->c; (void)m11; /* or, line 384 */ { int ret = r_mark_sU(z); /* call mark_sU, line 384 */ if (ret == 0) goto lab22; if (ret < 0) return ret; } z->bra = z->c; /* ], line 384 */ { int ret = slice_del(z); /* delete, line 384 */ if (ret < 0) return ret; } { int m12 = z->l - z->c; (void)m12; /* try, line 384 */ z->ket = z->c; /* [, line 384 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 384 */ if (ret == 0) { z->c = z->l - m12; goto lab23; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 384 */ { int ret = slice_del(z); /* delete, line 384 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 384 */ if (ret == 0) { z->c = z->l - m12; goto lab23; } if (ret < 0) return ret; } lab23: ; } goto lab21; lab22: z->c = z->l - m11; { int ret = r_mark_lArI(z); /* call mark_lArI, line 384 */ if (ret == 0) goto lab18; if (ret < 0) return ret; } } lab21: goto lab0; lab18: z->c = z->l - m1; z->ket = z->c; /* [, line 386 */ { int ret = r_mark_DAn(z); /* call mark_DAn, line 386 */ if (ret == 0) goto lab24; if (ret < 0) return ret; } z->bra = z->c; /* ], line 386 */ { int ret = slice_del(z); /* delete, line 386 */ if (ret < 0) return ret; } { int m13 = z->l - z->c; (void)m13; /* try, line 386 */ z->ket = z->c; /* [, line 386 */ { int m14 = z->l - z->c; (void)m14; /* or, line 389 */ { int ret = r_mark_possessives(z); /* call mark_possessives, line 388 */ if (ret == 0) goto lab27; if (ret < 0) return ret; } z->bra = z->c; /* ], line 388 */ { int ret = slice_del(z); /* delete, line 388 */ if (ret < 0) return ret; } { int m15 = z->l - z->c; (void)m15; /* try, line 388 */ z->ket = z->c; /* [, line 388 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 388 */ if (ret == 0) { z->c = z->l - m15; goto lab28; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 388 */ { int ret = slice_del(z); /* delete, line 388 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 388 */ if (ret == 0) { z->c = z->l - m15; goto lab28; } if (ret < 0) return ret; } lab28: ; } goto lab26; lab27: z->c = z->l - m14; { int ret = r_mark_lAr(z); /* call mark_lAr, line 390 */ if (ret == 0) goto lab29; if (ret < 0) return ret; } z->bra = z->c; /* ], line 390 */ { int ret = slice_del(z); /* delete, line 390 */ if (ret < 0) return ret; } { int m16 = z->l - z->c; (void)m16; /* try, line 390 */ { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 390 */ if (ret == 0) { z->c = z->l - m16; goto lab30; } if (ret < 0) return ret; } lab30: ; } goto lab26; lab29: z->c = z->l - m14; { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 392 */ if (ret == 0) { z->c = z->l - m13; goto lab25; } if (ret < 0) return ret; } } lab26: lab25: ; } goto lab0; lab24: z->c = z->l - m1; z->ket = z->c; /* [, line 396 */ { int m17 = z->l - z->c; (void)m17; /* or, line 396 */ { int ret = r_mark_nUn(z); /* call mark_nUn, line 396 */ if (ret == 0) goto lab33; if (ret < 0) return ret; } goto lab32; lab33: z->c = z->l - m17; { int ret = r_mark_ylA(z); /* call mark_ylA, line 396 */ if (ret == 0) goto lab31; if (ret < 0) return ret; } } lab32: z->bra = z->c; /* ], line 396 */ { int ret = slice_del(z); /* delete, line 396 */ if (ret < 0) return ret; } { int m18 = z->l - z->c; (void)m18; /* try, line 397 */ { int m19 = z->l - z->c; (void)m19; /* or, line 399 */ z->ket = z->c; /* [, line 398 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 398 */ if (ret == 0) goto lab36; if (ret < 0) return ret; } z->bra = z->c; /* ], line 398 */ { int ret = slice_del(z); /* delete, line 398 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 398 */ if (ret == 0) goto lab36; if (ret < 0) return ret; } goto lab35; lab36: z->c = z->l - m19; z->ket = z->c; /* [, line 400 */ { int m20 = z->l - z->c; (void)m20; /* or, line 400 */ { int ret = r_mark_possessives(z); /* call mark_possessives, line 400 */ if (ret == 0) goto lab39; if (ret < 0) return ret; } goto lab38; lab39: z->c = z->l - m20; { int ret = r_mark_sU(z); /* call mark_sU, line 400 */ if (ret == 0) goto lab37; if (ret < 0) return ret; } } lab38: z->bra = z->c; /* ], line 400 */ { int ret = slice_del(z); /* delete, line 400 */ if (ret < 0) return ret; } { int m21 = z->l - z->c; (void)m21; /* try, line 400 */ z->ket = z->c; /* [, line 400 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 400 */ if (ret == 0) { z->c = z->l - m21; goto lab40; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 400 */ { int ret = slice_del(z); /* delete, line 400 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 400 */ if (ret == 0) { z->c = z->l - m21; goto lab40; } if (ret < 0) return ret; } lab40: ; } goto lab35; lab37: z->c = z->l - m19; { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 402 */ if (ret == 0) { z->c = z->l - m18; goto lab34; } if (ret < 0) return ret; } } lab35: lab34: ; } goto lab0; lab31: z->c = z->l - m1; z->ket = z->c; /* [, line 406 */ { int ret = r_mark_lArI(z); /* call mark_lArI, line 406 */ if (ret == 0) goto lab41; if (ret < 0) return ret; } z->bra = z->c; /* ], line 406 */ { int ret = slice_del(z); /* delete, line 406 */ if (ret < 0) return ret; } goto lab0; lab41: z->c = z->l - m1; { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 408 */ if (ret == 0) goto lab42; if (ret < 0) return ret; } goto lab0; lab42: z->c = z->l - m1; z->ket = z->c; /* [, line 410 */ { int m22 = z->l - z->c; (void)m22; /* or, line 410 */ { int ret = r_mark_DA(z); /* call mark_DA, line 410 */ if (ret == 0) goto lab45; if (ret < 0) return ret; } goto lab44; lab45: z->c = z->l - m22; { int ret = r_mark_yU(z); /* call mark_yU, line 410 */ if (ret == 0) goto lab46; if (ret < 0) return ret; } goto lab44; lab46: z->c = z->l - m22; { int ret = r_mark_yA(z); /* call mark_yA, line 410 */ if (ret == 0) goto lab43; if (ret < 0) return ret; } } lab44: z->bra = z->c; /* ], line 410 */ { int ret = slice_del(z); /* delete, line 410 */ if (ret < 0) return ret; } { int m23 = z->l - z->c; (void)m23; /* try, line 410 */ z->ket = z->c; /* [, line 410 */ { int m24 = z->l - z->c; (void)m24; /* or, line 410 */ { int ret = r_mark_possessives(z); /* call mark_possessives, line 410 */ if (ret == 0) goto lab49; if (ret < 0) return ret; } z->bra = z->c; /* ], line 410 */ { int ret = slice_del(z); /* delete, line 410 */ if (ret < 0) return ret; } { int m25 = z->l - z->c; (void)m25; /* try, line 410 */ z->ket = z->c; /* [, line 410 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 410 */ if (ret == 0) { z->c = z->l - m25; goto lab50; } if (ret < 0) return ret; } lab50: ; } goto lab48; lab49: z->c = z->l - m24; { int ret = r_mark_lAr(z); /* call mark_lAr, line 410 */ if (ret == 0) { z->c = z->l - m23; goto lab47; } if (ret < 0) return ret; } } lab48: z->bra = z->c; /* ], line 410 */ { int ret = slice_del(z); /* delete, line 410 */ if (ret < 0) return ret; } z->ket = z->c; /* [, line 410 */ { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 410 */ if (ret == 0) { z->c = z->l - m23; goto lab47; } if (ret < 0) return ret; } lab47: ; } goto lab0; lab43: z->c = z->l - m1; z->ket = z->c; /* [, line 412 */ { int m26 = z->l - z->c; (void)m26; /* or, line 412 */ { int ret = r_mark_possessives(z); /* call mark_possessives, line 412 */ if (ret == 0) goto lab52; if (ret < 0) return ret; } goto lab51; lab52: z->c = z->l - m26; { int ret = r_mark_sU(z); /* call mark_sU, line 412 */ if (ret <= 0) return ret; } } lab51: z->bra = z->c; /* ], line 412 */ { int ret = slice_del(z); /* delete, line 412 */ if (ret < 0) return ret; } { int m27 = z->l - z->c; (void)m27; /* try, line 412 */ z->ket = z->c; /* [, line 412 */ { int ret = r_mark_lAr(z); /* call mark_lAr, line 412 */ if (ret == 0) { z->c = z->l - m27; goto lab53; } if (ret < 0) return ret; } z->bra = z->c; /* ], line 412 */ { int ret = slice_del(z); /* delete, line 412 */ if (ret < 0) return ret; } { int ret = r_stem_suffix_chain_before_ki(z); /* call stem_suffix_chain_before_ki, line 412 */ if (ret == 0) { z->c = z->l - m27; goto lab53; } if (ret < 0) return ret; } lab53: ; } } lab0: return 1; } static int r_post_process_last_consonants(struct SN_env * z) { /* backwardmode */ int among_var; z->ket = z->c; /* [, line 416 */ among_var = find_among_b(z, a_23, 4); /* substring, line 416 */ if (!(among_var)) return 0; z->bra = z->c; /* ], line 416 */ switch (among_var) { /* among, line 416 */ case 0: return 0; case 1: { int ret = slice_from_s(z, 1, s_5); /* <-, line 417 */ if (ret < 0) return ret; } break; case 2: { int ret = slice_from_s(z, 2, s_6); /* <-, line 418 */ if (ret < 0) return ret; } break; case 3: { int ret = slice_from_s(z, 1, s_7); /* <-, line 419 */ if (ret < 0) return ret; } break; case 4: { int ret = slice_from_s(z, 1, s_8); /* <-, line 420 */ if (ret < 0) return ret; } break; } return 1; } static int r_append_U_to_stems_ending_with_d_or_g(struct SN_env * z) { /* backwardmode */ { int m_test1 = z->l - z->c; /* test, line 431 */ { int m2 = z->l - z->c; (void)m2; /* or, line 431 */ if (z->c <= z->lb || z->p[z->c - 1] != 'd') goto lab1; /* literal, line 431 */ z->c--; goto lab0; lab1: z->c = z->l - m2; if (z->c <= z->lb || z->p[z->c - 1] != 'g') return 0; /* literal, line 431 */ z->c--; } lab0: z->c = z->l - m_test1; } { int m3 = z->l - z->c; (void)m3; /* or, line 433 */ { int m_test4 = z->l - z->c; /* test, line 432 */ if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) goto lab3; /* goto */ /* grouping vowel, line 432 */ { int m5 = z->l - z->c; (void)m5; /* or, line 432 */ if (z->c <= z->lb || z->p[z->c - 1] != 'a') goto lab5; /* literal, line 432 */ z->c--; goto lab4; lab5: z->c = z->l - m5; if (!(eq_s_b(z, 2, s_9))) goto lab3; /* literal, line 432 */ } lab4: z->c = z->l - m_test4; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 2, s_10); /* <+, line 432 */ z->c = saved_c; } if (ret < 0) return ret; } goto lab2; lab3: z->c = z->l - m3; { int m_test6 = z->l - z->c; /* test, line 434 */ if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) goto lab6; /* goto */ /* grouping vowel, line 434 */ { int m7 = z->l - z->c; (void)m7; /* or, line 434 */ if (z->c <= z->lb || z->p[z->c - 1] != 'e') goto lab8; /* literal, line 434 */ z->c--; goto lab7; lab8: z->c = z->l - m7; if (z->c <= z->lb || z->p[z->c - 1] != 'i') goto lab6; /* literal, line 434 */ z->c--; } lab7: z->c = z->l - m_test6; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_11); /* <+, line 434 */ z->c = saved_c; } if (ret < 0) return ret; } goto lab2; lab6: z->c = z->l - m3; { int m_test8 = z->l - z->c; /* test, line 436 */ if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) goto lab9; /* goto */ /* grouping vowel, line 436 */ { int m9 = z->l - z->c; (void)m9; /* or, line 436 */ if (z->c <= z->lb || z->p[z->c - 1] != 'o') goto lab11; /* literal, line 436 */ z->c--; goto lab10; lab11: z->c = z->l - m9; if (z->c <= z->lb || z->p[z->c - 1] != 'u') goto lab9; /* literal, line 436 */ z->c--; } lab10: z->c = z->l - m_test8; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 1, s_12); /* <+, line 436 */ z->c = saved_c; } if (ret < 0) return ret; } goto lab2; lab9: z->c = z->l - m3; { int m_test10 = z->l - z->c; /* test, line 438 */ if (out_grouping_b_U(z, g_vowel, 97, 305, 1) < 0) return 0; /* goto */ /* grouping vowel, line 438 */ { int m11 = z->l - z->c; (void)m11; /* or, line 438 */ if (!(eq_s_b(z, 2, s_13))) goto lab13; /* literal, line 438 */ goto lab12; lab13: z->c = z->l - m11; if (!(eq_s_b(z, 2, s_14))) return 0; /* literal, line 438 */ } lab12: z->c = z->l - m_test10; } { int ret; { int saved_c = z->c; ret = insert_s(z, z->c, z->c, 2, s_15); /* <+, line 438 */ z->c = saved_c; } if (ret < 0) return ret; } } lab2: return 1; } static int r_more_than_one_syllable_word(struct SN_env * z) { /* forwardmode */ { int c_test1 = z->c; /* test, line 446 */ { int i = 2; while(1) { /* atleast, line 446 */ int c2 = z->c; { /* gopast */ /* grouping vowel, line 446 */ int ret = out_grouping_U(z, g_vowel, 97, 305, 1); if (ret < 0) goto lab0; z->c += ret; } i--; continue; lab0: z->c = c2; break; } if (i > 0) return 0; } z->c = c_test1; } return 1; } static int r_is_reserved_word(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* or, line 451 */ { int c_test2 = z->c; /* test, line 450 */ while(1) { /* gopast, line 450 */ if (!(eq_s(z, 2, s_16))) goto lab2; /* literal, line 450 */ break; lab2: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) goto lab1; z->c = ret; /* gopast, line 450 */ } } z->I[0] = 2; /* $strlen = , line 450 */ if (!(z->I[0] == z->l)) goto lab1; /* $strlen == , line 450 */ z->c = c_test2; } goto lab0; lab1: z->c = c1; { int c_test3 = z->c; /* test, line 452 */ while(1) { /* gopast, line 452 */ if (!(eq_s(z, 5, s_17))) goto lab3; /* literal, line 452 */ break; lab3: { int ret = skip_utf8(z->p, z->c, 0, z->l, 1); if (ret < 0) return 0; z->c = ret; /* gopast, line 452 */ } } z->I[0] = 5; /* $strlen = , line 452 */ if (!(z->I[0] == z->l)) return 0; /* $strlen == , line 452 */ z->c = c_test3; } } lab0: return 1; } static int r_postlude(struct SN_env * z) { /* forwardmode */ { int c1 = z->c; /* not, line 456 */ { int ret = r_is_reserved_word(z); /* call is_reserved_word, line 456 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } return 0; lab0: z->c = c1; } z->lb = z->c; z->c = z->l; /* backwards, line 457 */ { int m2 = z->l - z->c; (void)m2; /* do, line 458 */ { int ret = r_append_U_to_stems_ending_with_d_or_g(z); /* call append_U_to_stems_ending_with_d_or_g, line 458 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } { int m3 = z->l - z->c; (void)m3; /* do, line 459 */ { int ret = r_post_process_last_consonants(z); /* call post_process_last_consonants, line 459 */ if (ret == 0) goto lab2; if (ret < 0) return ret; } lab2: z->c = z->l - m3; } z->c = z->lb; return 1; } extern int turkish_UTF_8_stem(struct SN_env * z) { /* forwardmode */ { int ret = r_more_than_one_syllable_word(z); /* call more_than_one_syllable_word, line 465 */ if (ret <= 0) return ret; } z->lb = z->c; z->c = z->l; /* backwards, line 467 */ { int m1 = z->l - z->c; (void)m1; /* do, line 468 */ { int ret = r_stem_nominal_verb_suffixes(z); /* call stem_nominal_verb_suffixes, line 468 */ if (ret == 0) goto lab0; if (ret < 0) return ret; } lab0: z->c = z->l - m1; } if (!(z->B[0])) return 0; /* Boolean test continue_stemming_noun_suffixes, line 469 */ { int m2 = z->l - z->c; (void)m2; /* do, line 470 */ { int ret = r_stem_noun_suffixes(z); /* call stem_noun_suffixes, line 470 */ if (ret == 0) goto lab1; if (ret < 0) return ret; } lab1: z->c = z->l - m2; } z->c = z->lb; { int ret = r_postlude(z); /* call postlude, line 473 */ if (ret <= 0) return ret; } return 1; } extern struct SN_env * turkish_UTF_8_create_env(void) { return SN_create_env(0, 1, 1); } extern void turkish_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); } RediSearch-1.2.2/src/dep/snowball/src_c/stem_UTF_8_turkish.h000066400000000000000000000005261364126773500236560ustar00rootroot00000000000000/* This file was generated automatically by the Snowball to ISO C compiler */ /* http://snowballstem.org/ */ #ifdef __cplusplus extern "C" { #endif extern struct SN_env * turkish_UTF_8_create_env(void); extern void turkish_UTF_8_close_env(struct SN_env * z); extern int turkish_UTF_8_stem(struct SN_env * z); #ifdef __cplusplus } #endif RediSearch-1.2.2/src/dep/thpool/000077500000000000000000000000001364126773500164075ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/thpool/thpool.c000077500000000000000000000322371364126773500200720ustar00rootroot00000000000000/* ******************************** * Author: Johan Hanssen Seferidis * License: MIT * Description: Library providing a threading pool where you can add * work. For usage, check the thpool.h file or README.md * */ /** @file thpool.h */ /* * ********************************/ //#define _POSIX_C_SOURCE 200809L #include #include #include #include #include #include #include #if defined(__linux__) #include #endif #include "thpool.h" #ifdef THPOOL_DEBUG #define THPOOL_DEBUG 1 #else #define THPOOL_DEBUG 0 #endif #if !defined(DISABLE_PRINT) || defined(THPOOL_DEBUG) #define err(str) fprintf(stderr, str) #else #define err(str) #endif static volatile int threads_keepalive; static volatile int threads_on_hold; /* ========================== STRUCTURES ============================ */ /* Binary semaphore */ typedef struct bsem { pthread_mutex_t mutex; pthread_cond_t cond; int v; } bsem; /* Job */ typedef struct job { struct job* prev; /* pointer to previous job */ void (*function)(void* arg); /* function pointer */ void* arg; /* function's argument */ } job; /* Job queue */ typedef struct jobqueue { pthread_mutex_t rwmutex; /* used for queue r/w access */ job* front; /* pointer to front of queue */ job* rear; /* pointer to rear of queue */ bsem* has_jobs; /* flag as binary semaphore */ int len; /* number of jobs in queue */ } jobqueue; /* Thread */ typedef struct thread { int id; /* friendly id */ pthread_t pthread; /* pointer to actual thread */ struct thpool_* thpool_p; /* access to thpool */ } thread; /* Threadpool */ typedef struct thpool_ { thread** threads; /* pointer to threads */ volatile int num_threads_alive; /* threads currently alive */ volatile int num_threads_working; /* threads currently working */ pthread_mutex_t thcount_lock; /* used for thread count etc */ pthread_cond_t threads_all_idle; /* signal to thpool_wait */ jobqueue jobqueue; /* job queue */ } thpool_; /* ========================== PROTOTYPES ============================ */ static int thread_init(thpool_* thpool_p, struct thread** thread_p, int id); static void* thread_do(struct thread* thread_p); static void thread_hold(int sig_id); static void thread_destroy(struct thread* thread_p); static int jobqueue_init(jobqueue* jobqueue_p); static void jobqueue_clear(jobqueue* jobqueue_p); static void jobqueue_push(jobqueue* jobqueue_p, struct job* newjob_p); static struct job* jobqueue_pull(jobqueue* jobqueue_p); static void jobqueue_destroy(jobqueue* jobqueue_p); static void bsem_init(struct bsem* bsem_p, int value); static void bsem_reset(struct bsem* bsem_p); static void bsem_post(struct bsem* bsem_p); static void bsem_post_all(struct bsem* bsem_p); static void bsem_wait(struct bsem* bsem_p); /* ========================== THREADPOOL ============================ */ /* Initialise thread pool */ struct thpool_* thpool_init(int num_threads) { threads_on_hold = 0; threads_keepalive = 1; if (num_threads < 0) { num_threads = 0; } /* Make new thread pool */ thpool_* thpool_p; thpool_p = (struct thpool_*)malloc(sizeof(struct thpool_)); if (thpool_p == NULL) { err("thpool_init(): Could not allocate memory for thread pool\n"); return NULL; } thpool_p->num_threads_alive = 0; thpool_p->num_threads_working = 0; /* Initialise the job queue */ if (jobqueue_init(&thpool_p->jobqueue) == -1) { err("thpool_init(): Could not allocate memory for job queue\n"); free(thpool_p); return NULL; } /* Make threads in pool */ thpool_p->threads = (struct thread**)malloc(num_threads * sizeof(struct thread*)); if (thpool_p->threads == NULL) { err("thpool_init(): Could not allocate memory for threads\n"); jobqueue_destroy(&thpool_p->jobqueue); free(thpool_p); return NULL; } pthread_mutex_init(&(thpool_p->thcount_lock), NULL); pthread_cond_init(&thpool_p->threads_all_idle, NULL); /* Thread init */ int n; for (n = 0; n < num_threads; n++) { thread_init(thpool_p, &thpool_p->threads[n], n); #if THPOOL_DEBUG printf("THPOOL_DEBUG: Created thread %d in pool \n", n); #endif } /* Wait for threads to initialize */ while (thpool_p->num_threads_alive != num_threads) { } return thpool_p; } /* Add work to the thread pool */ int thpool_add_work(thpool_* thpool_p, void (*function_p)(void*), void* arg_p) { job* newjob; newjob = (struct job*)malloc(sizeof(struct job)); if (newjob == NULL) { err("thpool_add_work(): Could not allocate memory for new job\n"); return -1; } /* add function and argument */ newjob->function = function_p; newjob->arg = arg_p; /* add job to queue */ jobqueue_push(&thpool_p->jobqueue, newjob); return 0; } /* Wait until all jobs have finished */ void thpool_wait(thpool_* thpool_p) { pthread_mutex_lock(&thpool_p->thcount_lock); while (thpool_p->jobqueue.len || thpool_p->num_threads_working) { pthread_cond_wait(&thpool_p->threads_all_idle, &thpool_p->thcount_lock); } pthread_mutex_unlock(&thpool_p->thcount_lock); } /* Destroy the threadpool */ void thpool_destroy(thpool_* thpool_p) { /* No need to destory if it's NULL */ if (thpool_p == NULL) return; volatile int threads_total = thpool_p->num_threads_alive; /* End each thread 's infinite loop */ threads_keepalive = 0; /* Give one second to kill idle threads */ double TIMEOUT = 1.0; time_t start, end; double tpassed = 0.0; time(&start); while (tpassed < TIMEOUT && thpool_p->num_threads_alive) { bsem_post_all(thpool_p->jobqueue.has_jobs); time(&end); tpassed = difftime(end, start); } /* Poll remaining threads */ while (thpool_p->num_threads_alive) { bsem_post_all(thpool_p->jobqueue.has_jobs); sleep(1); } /* Job queue cleanup */ jobqueue_destroy(&thpool_p->jobqueue); /* Deallocs */ int n; for (n = 0; n < threads_total; n++) { thread_destroy(thpool_p->threads[n]); } free(thpool_p->threads); free(thpool_p); } /* Pause all threads in threadpool */ void thpool_pause(thpool_* thpool_p) { int n; for (n = 0; n < thpool_p->num_threads_alive; n++) { pthread_kill(thpool_p->threads[n]->pthread, SIGUSR2); } } /* Resume all threads in threadpool */ void thpool_resume(thpool_* thpool_p) { // resuming a single threadpool hasn't been // implemented yet, meanwhile this supresses // the warnings (void)thpool_p; threads_on_hold = 0; } int thpool_num_threads_working(thpool_* thpool_p) { return thpool_p->num_threads_working; } /* ============================ THREAD ============================== */ /* Initialize a thread in the thread pool * * @param thread address to the pointer of the thread to be created * @param id id to be given to the thread * @return 0 on success, -1 otherwise. */ static int thread_init(thpool_* thpool_p, struct thread** thread_p, int id) { *thread_p = (struct thread*)malloc(sizeof(struct thread)); if (thread_p == NULL) { err("thread_init(): Could not allocate memory for thread\n"); return -1; } (*thread_p)->thpool_p = thpool_p; (*thread_p)->id = id; pthread_create(&(*thread_p)->pthread, NULL, (void*)thread_do, (*thread_p)); pthread_detach((*thread_p)->pthread); return 0; } /* Sets the calling thread on hold */ static void thread_hold(int sig_id) { (void)sig_id; threads_on_hold = 1; while (threads_on_hold) { sleep(1); } } /* What each thread is doing * * In principle this is an endless loop. The only time this loop gets interuppted is once * thpool_destroy() is invoked or the program exits. * * @param thread thread that will run this function * @return nothing */ static void* thread_do(struct thread* thread_p) { /* Set thread name for profiling and debuging */ char thread_name[128] = {0}; sprintf(thread_name, "thread-pool-%d", thread_p->id); #if defined(__linux__) /* Use prctl instead to prevent using _GNU_SOURCE flag and implicit declaration */ prctl(PR_SET_NAME, thread_name); #elif defined(__APPLE__) && defined(__MACH__) pthread_setname_np(thread_name); #else err("thread_do(): pthread_setname_np is not supported on this system"); #endif /* Assure all threads have been created before starting serving */ thpool_* thpool_p = thread_p->thpool_p; /* Register signal handler */ struct sigaction act; sigemptyset(&act.sa_mask); act.sa_flags = 0; act.sa_handler = thread_hold; if (sigaction(SIGUSR2, &act, NULL) == -1) { err("thread_do(): cannot handle SIGUSR1"); } /* Mark thread as alive (initialized) */ pthread_mutex_lock(&thpool_p->thcount_lock); thpool_p->num_threads_alive += 1; pthread_mutex_unlock(&thpool_p->thcount_lock); while (threads_keepalive) { bsem_wait(thpool_p->jobqueue.has_jobs); if (threads_keepalive) { pthread_mutex_lock(&thpool_p->thcount_lock); thpool_p->num_threads_working++; pthread_mutex_unlock(&thpool_p->thcount_lock); /* Read job from queue and execute it */ void (*func_buff)(void*); void* arg_buff; job* job_p = jobqueue_pull(&thpool_p->jobqueue); if (job_p) { func_buff = job_p->function; arg_buff = job_p->arg; func_buff(arg_buff); free(job_p); } pthread_mutex_lock(&thpool_p->thcount_lock); thpool_p->num_threads_working--; if (!thpool_p->num_threads_working) { pthread_cond_signal(&thpool_p->threads_all_idle); } pthread_mutex_unlock(&thpool_p->thcount_lock); } } pthread_mutex_lock(&thpool_p->thcount_lock); thpool_p->num_threads_alive--; pthread_mutex_unlock(&thpool_p->thcount_lock); return NULL; } /* Frees a thread */ static void thread_destroy(thread* thread_p) { free(thread_p); } /* ============================ JOB QUEUE =========================== */ /* Initialize queue */ static int jobqueue_init(jobqueue* jobqueue_p) { jobqueue_p->len = 0; jobqueue_p->front = NULL; jobqueue_p->rear = NULL; jobqueue_p->has_jobs = (struct bsem*)malloc(sizeof(struct bsem)); if (jobqueue_p->has_jobs == NULL) { return -1; } pthread_mutex_init(&(jobqueue_p->rwmutex), NULL); bsem_init(jobqueue_p->has_jobs, 0); return 0; } /* Clear the queue */ static void jobqueue_clear(jobqueue* jobqueue_p) { while (jobqueue_p->len) { free(jobqueue_pull(jobqueue_p)); } jobqueue_p->front = NULL; jobqueue_p->rear = NULL; bsem_reset(jobqueue_p->has_jobs); jobqueue_p->len = 0; } /* Add (allocated) job to queue */ static void jobqueue_push(jobqueue* jobqueue_p, struct job* newjob) { pthread_mutex_lock(&jobqueue_p->rwmutex); newjob->prev = NULL; switch (jobqueue_p->len) { case 0: /* if no jobs in queue */ jobqueue_p->front = newjob; jobqueue_p->rear = newjob; break; default: /* if jobs in queue */ jobqueue_p->rear->prev = newjob; jobqueue_p->rear = newjob; } jobqueue_p->len++; bsem_post(jobqueue_p->has_jobs); pthread_mutex_unlock(&jobqueue_p->rwmutex); } /* Get first job from queue(removes it from queue) <<<<<<< HEAD * * Notice: Caller MUST hold a mutex ======= >>>>>>> da2c0fe45e43ce0937f272c8cd2704bdc0afb490 */ static struct job* jobqueue_pull(jobqueue* jobqueue_p) { pthread_mutex_lock(&jobqueue_p->rwmutex); job* job_p = jobqueue_p->front; switch (jobqueue_p->len) { case 0: /* if no jobs in queue */ break; case 1: /* if one job in queue */ jobqueue_p->front = NULL; jobqueue_p->rear = NULL; jobqueue_p->len = 0; break; default: /* if >1 jobs in queue */ jobqueue_p->front = job_p->prev; jobqueue_p->len--; /* more than one job in queue -> post it */ bsem_post(jobqueue_p->has_jobs); } pthread_mutex_unlock(&jobqueue_p->rwmutex); return job_p; } /* Free all queue resources back to the system */ static void jobqueue_destroy(jobqueue* jobqueue_p) { jobqueue_clear(jobqueue_p); free(jobqueue_p->has_jobs); } /* ======================== SYNCHRONISATION ========================= */ /* Init semaphore to 1 or 0 */ static void bsem_init(bsem* bsem_p, int value) { if (value < 0 || value > 1) { err("bsem_init(): Binary semaphore can take only values 1 or 0"); exit(1); } pthread_mutex_init(&(bsem_p->mutex), NULL); pthread_cond_init(&(bsem_p->cond), NULL); bsem_p->v = value; } /* Reset semaphore to 0 */ static void bsem_reset(bsem* bsem_p) { bsem_init(bsem_p, 0); } /* Post to at least one thread */ static void bsem_post(bsem* bsem_p) { pthread_mutex_lock(&bsem_p->mutex); bsem_p->v = 1; pthread_cond_signal(&bsem_p->cond); pthread_mutex_unlock(&bsem_p->mutex); } /* Post to all threads */ static void bsem_post_all(bsem* bsem_p) { pthread_mutex_lock(&bsem_p->mutex); bsem_p->v = 1; pthread_cond_broadcast(&bsem_p->cond); pthread_mutex_unlock(&bsem_p->mutex); } /* Wait on semaphore until semaphore has value 0 */ static void bsem_wait(bsem* bsem_p) { pthread_mutex_lock(&bsem_p->mutex); while (bsem_p->v != 1) { pthread_cond_wait(&bsem_p->cond, &bsem_p->mutex); } bsem_p->v = 0; pthread_mutex_unlock(&bsem_p->mutex); } RediSearch-1.2.2/src/dep/thpool/thpool.h000077500000000000000000000110371364126773500200720ustar00rootroot00000000000000/********************************** * @author Johan Hanssen Seferidis * License: MIT * **********************************/ #ifndef _THPOOL_ #define _THPOOL_ #ifdef __cplusplus extern "C" { #endif /* =================================== API ======================================= */ typedef struct thpool_* threadpool; /** * @brief Initialize threadpool * * Initializes a threadpool. This function will not return untill all * threads have initialized successfully. * * @example * * .. * threadpool thpool; //First we declare a threadpool * thpool = thpool_init(4); //then we initialize it to 4 threads * .. * * @param num_threads number of threads to be created in the threadpool * @return threadpool created threadpool on success, * NULL on error */ threadpool thpool_init(int num_threads); /** * @brief Add work to the job queue * * Takes an action and its argument and adds it to the threadpool's job queue. * If you want to add to work a function with more than one arguments then * a way to implement this is by passing a pointer to a structure. * * NOTICE: You have to cast both the function and argument to not get warnings. * * @example * * void print_num(int num){ * printf("%d\n", num); * } * * int main() { * .. * int a = 10; * thpool_add_work(thpool, (void*)print_num, (void*)a); * .. * } * * @param threadpool threadpool to which the work will be added * @param function_p pointer to function to add as work * @param arg_p pointer to an argument * @return 0 on successs, -1 otherwise. */ int thpool_add_work(threadpool, void (*function_p)(void*), void* arg_p); /** * @brief Wait for all queued jobs to finish * * Will wait for all jobs - both queued and currently running to finish. * Once the queue is empty and all work has completed, the calling thread * (probably the main program) will continue. * * Smart polling is used in wait. The polling is initially 0 - meaning that * there is virtually no polling at all. If after 1 seconds the threads * haven't finished, the polling interval starts growing exponentially * untill it reaches max_secs seconds. Then it jumps down to a maximum polling * interval assuming that heavy processing is being used in the threadpool. * * @example * * .. * threadpool thpool = thpool_init(4); * .. * // Add a bunch of work * .. * thpool_wait(thpool); * puts("All added work has finished"); * .. * * @param threadpool the threadpool to wait for * @return nothing */ void thpool_wait(threadpool); /** * @brief Pauses all threads immediately * * The threads will be paused no matter if they are idle or working. * The threads return to their previous states once thpool_resume * is called. * * While the thread is being paused, new work can be added. * * @example * * threadpool thpool = thpool_init(4); * thpool_pause(thpool); * .. * // Add a bunch of work * .. * thpool_resume(thpool); // Let the threads start their magic * * @param threadpool the threadpool where the threads should be paused * @return nothing */ void thpool_pause(threadpool); /** * @brief Unpauses all threads if they are paused * * @example * .. * thpool_pause(thpool); * sleep(10); // Delay execution 10 seconds * thpool_resume(thpool); * .. * * @param threadpool the threadpool where the threads should be unpaused * @return nothing */ void thpool_resume(threadpool); /** * @brief Destroy the threadpool * * This will wait for the currently active threads to finish and then 'kill' * the whole threadpool to free up memory. * * @example * int main() { * threadpool thpool1 = thpool_init(2); * threadpool thpool2 = thpool_init(2); * .. * thpool_destroy(thpool1); * .. * return 0; * } * * @param threadpool the threadpool to destroy * @return nothing */ void thpool_destroy(threadpool); /** * @brief Show currently working threads * * Working threads are the threads that are performing work (not idle). * * @example * int main() { * threadpool thpool1 = thpool_init(2); * threadpool thpool2 = thpool_init(2); * .. * printf("Working threads: %d\n", thpool_num_threads_working(thpool1)); * .. * return 0; * } * * @param threadpool the threadpool of interest * @return integer number of threads working */ int thpool_num_threads_working(threadpool); #ifdef __cplusplus } #endif #endif RediSearch-1.2.2/src/dep/triemap/000077500000000000000000000000001364126773500165435ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/triemap/.gitignore000066400000000000000000000004301364126773500205300ustar00rootroot00000000000000# Object files *.o *.ko *.obj *.elf # Precompiled Headers *.gch *.pch # Libraries *.lib *.a *.la *.lo # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.app *.i*86 *.x86_64 *.hex # Debug files *.dSYM/ *.su .vscode test/test benchmark RediSearch-1.2.2/src/dep/triemap/LICENSE000066400000000000000000000024431364126773500175530ustar00rootroot00000000000000BSD 2-Clause License Copyright (c) 2017, Redis Labs All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. RediSearch-1.2.2/src/dep/triemap/Makefile000066400000000000000000000006341364126773500202060ustar00rootroot00000000000000# find the OS uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') # Compile flags for linux / osx CFLAGS ?= -W -fno-common -g -ggdb -fPIC -std=gnu99 -O3 SOURCEDIR = . CC_SOURCES = $(wildcard $(SOURCEDIR)/*.c) CC_OBJECTS = $(sort $(patsubst $(SOURCEDIR)/%.c, $(SOURCEDIR)/%.o, $(CC_SOURCES))) .SUFFIXES: .c .cc .o all: libtriemap.a libtriemap.a: $(CC_OBJECTS) ar rcs $@ $^ clean: rm -rf *.o *.a RediSearch-1.2.2/src/dep/triemap/README.md000066400000000000000000000014171364126773500200250ustar00rootroot00000000000000# triemap C implementation of a compact trie lookup map ## Features * High memory efficiency, fast lookups and insertions * Deletions with node rejoining * Prefix lookups with an iterator API * Random key extraction * No external dependencies, just one C and one H file ## Basic Example ```c TrieMap *tm = NewTrieMap(); char buf[32]; for (int i = 0; i < 100; i++) { sprintf(buf, "key%d", i); TrieMap_Add(tm, buf, strlen(buf), NULL, NULL); } TrieMapIterator *it = TrieMap_Iterate(tm, "key1", 4); char *str = NULL; tm_len_t len = 0; void *ptr = NULL; /* Prefix Iteration */ while (TrieMapIterator_Next(it, &str, &len, &ptr)) { printf("Found key %.*s\n", (int)len, str); } TrieMapIterator_Free(&it); TrieMap_Free(tm, NULL); ``` RediSearch-1.2.2/src/dep/triemap/test/000077500000000000000000000000001364126773500175225ustar00rootroot00000000000000RediSearch-1.2.2/src/dep/triemap/test/Makefile000066400000000000000000000014321364126773500211620ustar00rootroot00000000000000# find the OS uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') # Compile flags for linux / osx CFLAGS ?= -fno-common -g -ggdb -fPIC -std=gnu99 -O3 LDFLAGS ?= -lm SOURCEDIR = . CC_SOURCES = $(SOURCEDIR)/crc16.c CC_OBJECTS = $(sort $(patsubst $(SOURCEDIR)/%.c, $(SOURCEDIR)/%.o, $(CC_SOURCES))) .SUFFIXES: .c .cc .o all: test test_valgrind benchmark: $(CC_SOURCES) benchmark.c ../triemap.c $(CC) $(CFLAGS) -o benchmark $^ $(LDFLAGS) .PHONY = benchmark build_test: $(CC_SOURCES) test.c ../triemap.c $(CC) $(CFLAGS) -o test $^ $(LDFLAGS) .PHONY: test test: build_test $(sh) ./test test_valgrind: build_test valgrind --error-exitcode=1 --leak-resolution=low --quiet \ --leak-check=full --show-possibly-lost=no ./test clean: rm -rf *.o *.a benchmark test RediSearch-1.2.2/src/dep/triemap/test/benchmark.c000066400000000000000000000062461364126773500216300ustar00rootroot00000000000000#include "../triemap.h" #include "time_sample.h" #include #include #include uint16_t crc16(const char *buf, int len); #define MB(x) x / (float)(1024 * 1024) const char alphabet[] = " eeeeeeeeeeeeettttttttttaaaaaaaaaooooooooiiiiiiinnnnnnnsssss" "srrrrrrhhhhhllllddddcccuuummmffppggwwybbvkxjqz\0\0\0\0\0\0\0\0"; size_t formatRandomKey(char *buf, int i) { char *p = buf; size_t sz = 0; while (sz < i) { *p = alphabet[rand() % sizeof(alphabet)]; sz++; if (*p == 0 || sz == i) { *p = 0; return sz; } p++; } return sz; } size_t formatKey(char *buf, int i) { return sprintf(buf, "key:%d", i); // sprintf((char *)buf, "%04x", crc16(&buf[5], strlen(buf) - 5)); // buf[4] = ':'; } void populate(int N) { TrieMap *tm = NewTrieMap(); int k = 32; char buf[k + 1]; buf[k] = 0; size_t dataSize = 0; TimeSample ts; TimeSampler_Reset(&ts); for (int i = 0; i < N; i++) { size_t sz = formatKey(buf, i); // formatRandomKey((char *)buf, 12); if (!sz || buf[0] == 0) continue; // printf("%s\n", buf); dataSize += sz; TimeSampler_StartSection(&ts); TrieMap_Add(tm, buf, sz, NULL, NULL); TimeSampler_EndSection(&ts); TimeSampler_Tick(&ts); if (i % 1000000 == 999999) { printf("Insertion after %d items: %.03fsec (%.02fns/iteration), %.02fMB " "(%.02fMB raw data)\n", i + 1, TimeSampler_DurationSec(&ts), TimeSampler_IterationNS(&ts), MB(TrieMap_MemUsage(tm)), MB(dataSize)); // TimeSampler_Reset(&ts); } } // memset(childrenHist, 0, sizeof(childrenHist)); // size_t x = TrieMapNode_MemUsage(tm); // for (int i = 0; i < 256; i++) { // if (childrenHist[i]) // printf("%d -> %d\n", i, childrenHist[i]); // } int L = N; TimeSampler_Reset(&ts); TimeSampler_Start(&ts); for (int i = 0; i < L; i++) { size_t sz = formatKey((char *)buf, i); TrieMap_Find(tm, buf, sz); TimeSampler_Tick(&ts); } TimeSampler_End(&ts); printf("Lookup of %d SEQUENTIAL items: %.03fsec (%.02fns/iteration)\n", L, TimeSampler_DurationSec(&ts), TimeSampler_IterationNS(&ts)); TimeSampler_Reset(&ts); TimeSampler_Start(&ts); for (int i = 0; i < L; i++) { size_t sz = formatKey((char *)buf, rand() % N); TrieMap_Find(tm, buf, sz); TimeSampler_Tick(&ts); } TimeSampler_End(&ts); printf("Lookup of %d RANDOM items: %.03fsec (%.02fns/iteration)\n", L, TimeSampler_DurationSec(&ts), TimeSampler_IterationNS(&ts)); TimeSampler_Reset(&ts); for (int i = 0; i < N; i++) { formatKey((char *)buf, i); TimeSampler_StartSection(&ts); TrieMap_Delete(tm, buf, strlen((char *)buf), NULL); TimeSampler_EndSection(&ts); TimeSampler_Tick(&ts); if (i && i % 1000000 == 0) { printf("Deletion of %d items: %.03fsec (%.02fns/iteration)\n", i, TimeSampler_DurationSec(&ts), TimeSampler_IterationNS(&ts)); // TimeSampler_Reset(&ts); } } printf("Total Deletion of %d items: %.03fsec (%.02fns/iteration)\n", N, TimeSampler_DurationSec(&ts), TimeSampler_IterationNS(&ts)); } int main(int argc, char **argv) { populate(5000000); return 0; } RediSearch-1.2.2/src/dep/triemap/test/crc16.c000066400000000000000000000105741364126773500206130ustar00rootroot00000000000000#include /* * Copyright 2001-2010 Georges Menie (www.menie.org) * Copyright 2010-2012 Salvatore Sanfilippo (adapted to Redis coding style) * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the University of California, Berkeley nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* CRC16 implementation according to CCITT standards. * * Note by @antirez: this is actually the XMODEM CRC 16 algorithm, using the * following parameters: * * Name : "XMODEM", also known as "ZMODEM", "CRC-16/ACORN" * Width : 16 bit * Poly : 1021 (That is actually x^16 + x^12 + x^5 + 1) * Initialization : 0000 * Reflect Input byte : False * Reflect Output CRC : False * Xor constant to output CRC : 0000 * Output for "123456789" : 31C3 */ static const uint16_t crc16tab[256]= { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7, 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef, 0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6, 0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de, 0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485, 0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d, 0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4, 0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc, 0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823, 0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b, 0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12, 0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a, 0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41, 0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49, 0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70, 0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78, 0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f, 0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067, 0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e, 0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256, 0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d, 0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405, 0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c, 0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634, 0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab, 0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3, 0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a, 0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92, 0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9, 0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1, 0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8, 0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0 }; uint16_t crc16(const char *buf, int len) { int counter; uint16_t crc = 0; for (counter = 0; counter < len; counter++) crc = (crc<<8) ^ crc16tab[((crc>>8) ^ *buf++)&0x00FF]; return crc; } RediSearch-1.2.2/src/dep/triemap/test/minunit.h000066400000000000000000000325001364126773500213560ustar00rootroot00000000000000/* * Copyright (c) 2012 David Siñuela Pastor, siu.4coders@gmail.com * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES * OF CONTRACT, TOR WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ #ifndef __MINUNIT_H__ #define __MINUNIT_H__ #ifdef __cplusplus extern "C" { #endif #if defined(_WIN32) #include #elif defined(__unix__) || defined(__unix) || defined(unix) || \ (defined(__APPLE__) && defined(__MACH__)) /* Change POSIX C SOURCE version for pure c99 compilers */ #if !defined(_POSIX_C_SOURCE) || _POSIX_C_SOURCE < 200112L #undef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 200112L #endif #include /* POSIX flags */ #include /* clock_gettime(), time() */ #include /* gethrtime(), gettimeofday() */ #include #include #if defined(__MACH__) && defined(__APPLE__) #include #include #endif #else #error "Unable to define timers for an unknown OS." #endif #include #include /* Maximum length of last message */ #define MINUNIT_MESSAGE_LEN 1024 /* Do not change */ #define MINUNIT_EPSILON 1E-12 /* Misc. counters */ static int minunit_run = 0; static int minunit_assert = 0; static int minunit_fail = 0; static int minunit_status = 0; /* Timers */ static double minunit_real_timer = 0; static double minunit_proc_timer = 0; /* Last message */ static char minunit_last_message[MINUNIT_MESSAGE_LEN]; /* Test setup and teardown function pointers */ static void (*minunit_setup)(void) = NULL; static void (*minunit_teardown)(void) = NULL; /* Definitions */ #define MU_TEST(method_name) static void method_name() #define MU_TEST_SUITE(suite_name) static void suite_name() #define MU__SAFE_BLOCK(block) \ do { \ block \ } while (0) /* Run test suite and unset setup and teardown functions */ #define MU_RUN_SUITE(suite_name) \ MU__SAFE_BLOCK(suite_name(); minunit_setup = NULL; minunit_teardown = NULL;) /* Configure setup and teardown functions */ #define MU_SUITE_CONFIGURE(setup_fun, teardown_fun) \ MU__SAFE_BLOCK(minunit_setup = setup_fun; minunit_teardown = teardown_fun;) /* Test runner */ #define MU_RUN_TEST(test) \ MU__SAFE_BLOCK(if (minunit_real_timer == 0 && minunit_real_timer == 0) { \ minunit_real_timer = mu_timer_real(); \ minunit_proc_timer = mu_timer_cpu(); \ } if (minunit_setup) (*minunit_setup)(); \ minunit_status = 0; test(); minunit_run++; \ if (minunit_status) { \ minunit_fail++; \ printf("F"); \ printf("\n%s\n", minunit_last_message); \ } fflush(stdout); \ if (minunit_teardown) (*minunit_teardown)();) /* Report */ #define MU_REPORT() \ MU__SAFE_BLOCK( \ double minunit_end_real_timer; double minunit_end_proc_timer; \ printf("\n\n%d tests, %d assertions, %d failures\n", minunit_run, \ minunit_assert, minunit_fail); \ minunit_end_real_timer = mu_timer_real(); \ minunit_end_proc_timer = mu_timer_cpu(); \ printf("\nFinished in %.8f seconds (real) %.8f seconds (proc)\n\n", \ minunit_end_real_timer - minunit_real_timer, \ minunit_end_proc_timer - minunit_proc_timer);) /* Assertions */ #define mu_check(test) \ MU__SAFE_BLOCK(minunit_assert++; if (!(test)) { \ snprintf(minunit_last_message, MINUNIT_MESSAGE_LEN, \ "%s failed:\n\t%s:%d: %s", __func__, __FILE__, __LINE__, #test); \ minunit_status = 1; \ return; \ } else { printf("."); }) #define mu_fail(message) \ MU__SAFE_BLOCK(minunit_assert++; \ snprintf(minunit_last_message, MINUNIT_MESSAGE_LEN, \ "%s failed:\n\t%s:%d: %s", __func__, __FILE__, \ __LINE__, message); \ minunit_status = 1; return;) #define mu_assert(test, message) \ MU__SAFE_BLOCK(minunit_assert++; if (!(test)) { \ snprintf(minunit_last_message, MINUNIT_MESSAGE_LEN, \ "%s failed:\n\t%s:%d: %s", __func__, __FILE__, __LINE__, \ message); \ minunit_status = 1; \ return; \ } else { printf("."); }) #define mu_assert_int_eq(expected, result) \ MU__SAFE_BLOCK(int minunit_tmp_e; int minunit_tmp_r; minunit_assert++; \ minunit_tmp_e = (expected); minunit_tmp_r = (result); \ if (minunit_tmp_e != minunit_tmp_r) { \ snprintf(minunit_last_message, MINUNIT_MESSAGE_LEN, \ "%s failed:\n\t%s:%d: %d expected but was %d", \ __func__, __FILE__, __LINE__, minunit_tmp_e, \ minunit_tmp_r); \ minunit_status = 1; \ return; \ } else { printf("."); }) #define mu_assert_double_eq(expected, result) \ MU__SAFE_BLOCK(double minunit_tmp_e; double minunit_tmp_r; minunit_assert++; \ minunit_tmp_e = (expected); minunit_tmp_r = (result); \ if (fabs(minunit_tmp_e - minunit_tmp_r) > MINUNIT_EPSILON) { \ snprintf(minunit_last_message, MINUNIT_MESSAGE_LEN, \ "%s failed:\n\t%s:%d: %g expected but was %g", \ __func__, __FILE__, __LINE__, minunit_tmp_e, \ minunit_tmp_r); \ minunit_status = 1; \ return; \ } else { printf("."); }) /* * The following two functions were written by David Robert Nadeau * from http://NadeauSoftware.com/ and distributed under the * Creative Commons Attribution 3.0 Unported License */ /** * Returns the real time, in seconds, or -1.0 if an error occurred. * * Time is measured since an arbitrary and OS-dependent start time. * The returned real time is only useful for computing an elapsed time * between two calls to this function. */ static double mu_timer_real() { #if defined(_WIN32) FILETIME tm; ULONGLONG t; #if defined(NTDDI_WIN8) && NTDDI_VERSION >= NTDDI_WIN8 /* Windows 8, Windows Server 2012 and later. ---------------- */ GetSystemTimePreciseAsFileTime(&tm); #else /* Windows 2000 and later. ---------------------------------- */ GetSystemTimeAsFileTime(&tm); #endif t = ((ULONGLONG)tm.dwHighDateTime << 32) | (ULONGLONG)tm.dwLowDateTime; return (double)t / 10000000.0; #elif(defined(__hpux) || defined(hpux)) || \ ((defined(__sun__) || defined(__sun) || defined(sun)) && \ (defined(__SVR4) || defined(__svr4__))) /* HP-UX, Solaris. ------------------------------------------ */ return (double)gethrtime() / 1000000000.0; #elif defined(__MACH__) && defined(__APPLE__) /* OSX. ----------------------------------------------------- */ static double timeConvert = 0.0; if (timeConvert == 0.0) { mach_timebase_info_data_t timeBase; (void)mach_timebase_info(&timeBase); timeConvert = (double)timeBase.numer / (double)timeBase.denom / 1000000000.0; } return (double)mach_absolute_time() * timeConvert; #elif defined(_POSIX_VERSION) /* POSIX. --------------------------------------------------- */ #if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) { struct timespec ts; #if defined(CLOCK_MONOTONIC_PRECISE) /* BSD. --------------------------------------------- */ const clockid_t id = CLOCK_MONOTONIC_PRECISE; #elif defined(CLOCK_MONOTONIC_RAW) /* Linux. ------------------------------------------- */ const clockid_t id = CLOCK_MONOTONIC_RAW; #elif defined(CLOCK_HIGHRES) /* Solaris. ----------------------------------------- */ const clockid_t id = CLOCK_HIGHRES; #elif defined(CLOCK_MONOTONIC) /* AIX, BSD, Linux, POSIX, Solaris. ----------------- */ const clockid_t id = CLOCK_MONOTONIC; #elif defined(CLOCK_REALTIME) /* AIX, BSD, HP-UX, Linux, POSIX. ------------------- */ const clockid_t id = CLOCK_REALTIME; #else const clockid_t id = (clockid_t)-1; /* Unknown. */ #endif /* CLOCK_* */ if (id != (clockid_t)-1 && clock_gettime(id, &ts) != -1) return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0; /* Fall thru. */ } #endif /* _POSIX_TIMERS */ /* AIX, BSD, Cygwin, HP-UX, Linux, OSX, POSIX, Solaris. ----- */ struct timeval tm; gettimeofday(&tm, NULL); return (double)tm.tv_sec + (double)tm.tv_usec / 1000000.0; #else return -1.0; /* Failed. */ #endif } /** * Returns the amount of CPU time used by the current process, * in seconds, or -1.0 if an error occurred. */ static double mu_timer_cpu() { #if defined(_WIN32) /* Windows -------------------------------------------------- */ FILETIME createTime; FILETIME exitTime; FILETIME kernelTime; FILETIME userTime; if (GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &kernelTime, &userTime) != -1) { SYSTEMTIME userSystemTime; if (FileTimeToSystemTime(&userTime, &userSystemTime) != -1) return (double)userSystemTime.wHour * 3600.0 + (double)userSystemTime.wMinute * 60.0 + (double)userSystemTime.wSecond + (double)userSystemTime.wMilliseconds / 1000.0; } #elif defined(__unix__) || defined(__unix) || defined(unix) || \ (defined(__APPLE__) && defined(__MACH__)) /* AIX, BSD, Cygwin, HP-UX, Linux, OSX, and Solaris --------- */ #if defined(_POSIX_TIMERS) && (_POSIX_TIMERS > 0) /* Prefer high-res POSIX timers, when available. */ { clockid_t id; struct timespec ts; #if _POSIX_CPUTIME > 0 /* Clock ids vary by OS. Query the id, if possible. */ if (clock_getcpuclockid(0, &id) == -1) #endif #if defined(CLOCK_PROCESS_CPUTIME_ID) /* Use known clock id for AIX, Linux, or Solaris. */ id = CLOCK_PROCESS_CPUTIME_ID; #elif defined(CLOCK_VIRTUAL) /* Use known clock id for BSD or HP-UX. */ id = CLOCK_VIRTUAL; #else id = (clockid_t)-1; #endif if (id != (clockid_t)-1 && clock_gettime(id, &ts) != -1) return (double)ts.tv_sec + (double)ts.tv_nsec / 1000000000.0; } #endif #if defined(RUSAGE_SELF) { struct rusage rusage; if (getrusage(RUSAGE_SELF, &rusage) != -1) return (double)rusage.ru_utime.tv_sec + (double)rusage.ru_utime.tv_usec / 1000000.0; } #endif #if defined(_SC_CLK_TCK) { const double ticks = (double)sysconf(_SC_CLK_TCK); struct tms tms; if (times(&tms) != (clock_t)-1) return (double)tms.tms_utime / ticks; } #endif #if defined(CLOCKS_PER_SEC) { clock_t cl = clock(); if (cl != (clock_t)-1) return (double)cl / (double)CLOCKS_PER_SEC; } #endif #endif return -1; /* Failed. */ } #ifdef __cplusplus } #endif #endif /* __MINUNIT_H__ */RediSearch-1.2.2/src/dep/triemap/test/test.c000066400000000000000000000112071364126773500206460ustar00rootroot00000000000000#include "../triemap.h" #include "minunit.h" #include "time_sample.h" #include #include #include void testTrie() { TrieMap *tm = NewTrieMap(); char buf[32]; for (int i = 0; i < 100; i++) { sprintf(buf, "key%d", i); int *pi = malloc(sizeof(int)); *pi = i; int rc = TrieMap_Add(tm, buf, strlen(buf), NULL, NULL); mu_check(rc); rc = TrieMap_Add(tm, buf, strlen(buf), pi, NULL); mu_check(rc == 0); } mu_assert_int_eq(100, tm->cardinality); // check insertion of empty node int *empty = malloc(sizeof(int)); *empty = 1337; mu_check(1 == TrieMap_Add(tm, "", 0, NULL, NULL)); mu_assert_int_eq(101, tm->cardinality); mu_check(0 == TrieMap_Add(tm, "", 0, empty, NULL)); mu_assert_int_eq(101, tm->cardinality); void *ptr = TrieMap_Find(tm, "", 0); mu_check(ptr != TRIEMAP_NOTFOUND); mu_check(*(int *)ptr == 1337); mu_check(TrieMap_Delete(tm, "", 0, NULL)); mu_assert_int_eq(100, tm->cardinality); // check that everything was found for (int i = 0; i < 100; i++) { sprintf(buf, "key%d", i); void *p = TrieMap_Find(tm, buf, strlen(buf)); mu_check(p != NULL); mu_check(p != TRIEMAP_NOTFOUND); mu_check(*(int *)p == i); } for (int i = 0; i < 100; i++) { sprintf(buf, "key%d", i); int rc = TrieMap_Delete(tm, buf, strlen(buf), NULL); mu_check(rc); rc = TrieMap_Delete(tm, buf, strlen(buf), NULL); mu_check(rc == 0); mu_check(tm->cardinality == 100 - i - 1); } TrieMap_Free(tm, NULL); } void testTrieIterator() { TrieMap *tm = NewTrieMap(); char buf[32]; for (int i = 0; i < 100; i++) { sprintf(buf, "key%d", i); int *pi = malloc(sizeof(int)); *pi = i; TrieMap_Add(tm, buf, strlen(buf), pi, NULL); } mu_assert_int_eq(100, tm->cardinality); mu_check(1 == TrieMap_Add(tm, "", 0, NULL, NULL)); mu_assert_int_eq(101, tm->cardinality); TrieMapIterator *it = TrieMap_Iterate(tm, "key1", 4); mu_check(it); int count = 0; char *str = NULL; tm_len_t len = 0; void *ptr = NULL; while (0 != TrieMapIterator_Next(it, &str, &len, &ptr)) { mu_check(!strncmp("key1", str, 4)); mu_check(str); mu_check(len > 0); mu_check(ptr); mu_check(*(int *)ptr > 0); count++; } mu_assert_int_eq(11, count); TrieMapIterator_Free(it); /* Test iteration starting from the empty node */ it = TrieMap_Iterate(tm, "", 0); mu_check(it); mu_check(TrieMapIterator_Next(it, &str, &len, &ptr)); mu_check(len == 0); mu_check(ptr == NULL); count = 0; while (TrieMapIterator_Next(it, &str, &len, &ptr)) { mu_check(str); mu_check(len > 0); mu_check(ptr); count++; } mu_assert_int_eq(100, count); TrieMapIterator_Free(it); TrieMap_Free(tm, NULL); } void testRandomWalk() { TrieMap *tm = NewTrieMap(); char buf[32]; int N = 1000; for (int i = 0; i < N; i++) { sprintf(buf, "key%d", i); TrieMap_Add(tm, buf, strlen(buf), strdup(buf), NULL); } char *sbuf; tm_len_t len; void *ptr; for (int i = 0; i < 100; i++) { int rc = TrieMap_RandomKey(tm, &sbuf, &len, &ptr); mu_check(rc); mu_check(ptr); free(sbuf); } for (int i = 1; i < 9; i++) { char prefix[5]; sprintf(prefix, "key%d", i); for (int x = 0; x < 5; x++) { void *val = TrieMap_RandomValueByPrefix(tm, prefix, strlen(prefix)); mu_check(val); // printf("%d %s\n", i, (char*)val); mu_check(!strncmp((char *)val, prefix, strlen(prefix))); } } void *p = TrieMap_RandomValueByPrefix(tm, "x2x2x2", 6); mu_check(p == NULL); TrieMap_Free(tm, NULL); } void testRandom() { TrieMap *tm = NewTrieMap(); char buf[0xfffff + 10]; int N = 1000; for (int i = 0; i < N; i++) { int n = rand() % sizeof(buf); for (int j = 0; j < n; j++) { buf[j] = rand() % 255; } int *pi = malloc(sizeof(int)); *pi = i + 1; TrieMap_Add(tm, buf, n, pi, NULL); // if (i % 1000 == 0) printf("%d\n", i); } mu_assert_int_eq(N, tm->cardinality); // mu_check(1 == TrieMap_Add(tm, "", 0, NULL, NULL)); // mu_assert_int_eq(101, tm->cardinality); TrieMapIterator *it = TrieMap_Iterate(tm, "", 0); mu_check(it); int count = 0; char *str = NULL; tm_len_t len = 0; void *ptr = NULL; while (0 != TrieMapIterator_Next(it, &str, &len, &ptr)) { // mu_check(!strncmp("key1", str, 4)); mu_check(str); mu_check(len > 0); mu_check(ptr); mu_check(*(int *)ptr > 0); count++; } mu_assert_int_eq(N, count); TrieMapIterator_Free(it); } int main(int argc, char **argv) { MU_RUN_TEST(testTrie); MU_RUN_TEST(testTrieIterator); MU_RUN_TEST(testRandomWalk); MU_RUN_TEST(testRandom); MU_REPORT(); return minunit_status; }RediSearch-1.2.2/src/dep/triemap/test/time_sample.h000066400000000000000000000073511364126773500222000ustar00rootroot00000000000000#ifndef __RL_TIME_SAMPLE__ #define __RL_TIME_SAMPLE__ #include #include #include #include typedef struct { struct timespec startTime; struct timespec endTime; long long durationNS; int num; } TimeSample; static void TimeSampler_Reset(TimeSample *ts) { ts->num = 0; ts->durationNS = 0; ts->startTime.tv_nsec = 0; ts->startTime.tv_sec = 0; } static void TimeSampler_Start(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->startTime); ts->num = 0; ts->durationNS = 0; } static void TimeSampler_StartSection(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->startTime); } static void TimeSampler_EndSection(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->endTime); ts->durationNS += ((long long)1000000000 * ts->endTime.tv_sec + ts->endTime.tv_nsec) - ((long long)1000000000 * ts->startTime.tv_sec + ts->startTime.tv_nsec); } static void TimeSampler_Tick(TimeSample *ts) { ++ts->num; } static void TimeSampler_End(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->endTime); ts->durationNS = ((long long)1000000000 * ts->endTime.tv_sec + ts->endTime.tv_nsec) - ((long long)1000000000 * ts->startTime.tv_sec + ts->startTime.tv_nsec); } static long long TimeSampler_DurationNS(TimeSample *ts) { return ts->durationNS; } static long long TimeSampler_DurationMS(TimeSample *ts) { return ts->durationNS / 1000000; } static double TimeSampler_DurationSec(TimeSample *ts) { return (double)ts->durationNS / 1000000000.0; } static double TimeSampler_IterationSec(TimeSample *ts) { return ((double)ts->durationNS / 1000000000.0) / (double)(ts->num ? ts->num : 1.0); } static double TimeSampler_IterationMS(TimeSample *ts) { return ((double)ts->durationNS / 1000000.0) / (double)(ts->num ? ts->num : 1.0); } static double TimeSampler_IterationNS(TimeSample *ts) { return (double)ts->durationNS / (double)(ts->num ? ts->num : 1.0); } #define TIME_SAMPLE_RUN(blk) \ { \ TimeSample ts; \ TimeSampler_Start(&ts); \ { blk; }; \ TimeSampler_End(&ts); \ printf("Execution time for " #blk ": %f seconds\n", \ TimeSampler_DurationSec(&ts)); \ } #define TIME_SAMPLE_BLOCK(ts, blk) \ { \ TimeSampler_StartSection(&ts); \ blk;\ TimeSampler_EndSection(&ts);\ TimeSampler_Tick(&ts);\ } #define TIME_SAMPLE_RUN_LOOP(N, blk) \ { \ TimeSample ts; \ TimeSampler_Start(&ts); \ for (int __ts_loop = 0; __ts_loop < N; __ts_loop++) { \ blk; \ TimeSampler_Tick(&ts); \ }; \ TimeSampler_End(&ts); \ printf("Execution time for %d iterations of " #blk \ ": %f msec/iteration\n", \ ts.num, TimeSampler_IterationMS(&ts)); \ } #endifRediSearch-1.2.2/src/dep/triemap/triemap.c000066400000000000000000000517341364126773500203620ustar00rootroot00000000000000#include "triemap.h" #include #include void *TRIEMAP_NOTFOUND = "NOT FOUND"; void TrieMapNode_Free(TrieMapNode *n, void (*freeCB)(void *)); /* Get a pointer to the children array of a node. This is not an actual member * of the node for * memory saving reasons */ #define __trieMapNode_children(n) \ ((TrieMapNode **)((void *)n + sizeof(TrieMapNode) + (n->len + 1) + n->numChildren)) #define __trieMapNode_childKey(n, c) (char *)((char *)n + sizeof(TrieMapNode) + n->len + 1 + c) #define __trieMapNode_isTerminal(n) (n->flags & TM_NODE_TERMINAL) #define __trieMapNode_isDeleted(n) (n->flags & TM_NODE_DELETED) /* The byte size of a node, based on its internal string length and number of * children */ size_t __trieMapNode_Sizeof(tm_len_t numChildren, tm_len_t slen) { return (sizeof(TrieMapNode) + numChildren * sizeof(TrieMapNode *) + (slen + 1) + numChildren); } TrieMapNode *__trieMapNode_resizeChildren(TrieMapNode *n, int offset) { n = realloc(n, __trieMapNode_Sizeof(n->numChildren + offset, n->len)); TrieMapNode **children = __trieMapNode_children(n); // stretch or shrink the child key cache array memmove(((char *)children) + offset, (char *)children, sizeof(TrieMapNode *) * n->numChildren); n->numChildren += offset; return n; } /* Create a new trie node. str is a string to be copied into the node, * starting from offset up until len. numChildren is the initial number of * allocated child nodes */ TrieMapNode *__newTrieMapNode(char *str, tm_len_t offset, tm_len_t len, tm_len_t numChildren, void *value, int terminal) { tm_len_t nlen = len - offset; TrieMapNode *n = malloc(__trieMapNode_Sizeof(numChildren, nlen)); n->len = nlen; n->numChildren = numChildren; n->value = value; n->flags = terminal ? TM_NODE_TERMINAL : 0; memcpy(n->str, str + offset, nlen); return n; } TrieMap *NewTrieMap() { TrieMap *tm = malloc(sizeof(TrieMap)); tm->cardinality = 0; tm->root = __newTrieMapNode((char *)"", 0, 0, 0, NULL, 0); return tm; } TrieMapNode *__trieMapNode_AddChild(TrieMapNode *n, char *str, tm_len_t offset, tm_len_t len, void *value) { // make room for another child n = __trieMapNode_resizeChildren(n, 1); // a newly added child must be a terminal node TrieMapNode *child = __newTrieMapNode(str, offset, len, 0, value, 1); *__trieMapNode_childKey(n, n->numChildren - 1) = str[offset]; __trieMapNode_children(n)[n->numChildren - 1] = child; n->flags &= ~TM_NODE_SORTED; return n; } TrieMapNode *__trieMapNode_Split(TrieMapNode *n, tm_len_t offset) { // Copy the current node's data and children to a new child node TrieMapNode *newChild = __newTrieMapNode(n->str, offset, n->len, n->numChildren, n->value, __trieMapNode_isTerminal(n)); newChild->flags = n->flags; TrieMapNode **children = __trieMapNode_children(n); TrieMapNode **newChildren = __trieMapNode_children(newChild); memcpy(newChildren, children, sizeof(TrieMapNode *) * n->numChildren); memcpy(__trieMapNode_childKey(newChild, 0), __trieMapNode_childKey(n, 0), n->numChildren); // reduce the node to be just one child long with no score n->numChildren = 1; n->len = offset; n->value = NULL; // the parent node is now non terminal and non sorted n->flags = 0; //&= ~(TM_NODE_TERMINAL | TM_NODE_DELETED | TM_NODE_SORTED); n = realloc(n, __trieMapNode_Sizeof(n->numChildren, n->len)); __trieMapNode_children(n)[0] = newChild; *__trieMapNode_childKey(n, 0) = newChild->str[0]; return n; } int TrieMapNode_Add(TrieMapNode **np, char *str, tm_len_t len, void *value, TrieMapReplaceFunc cb) { TrieMapNode *n = *np; tm_len_t offset = 0; for (; offset < len && offset < n->len; offset++) { if (str[offset] != n->str[offset]) { break; } } // we broke off before the end of the string if (offset < n->len) { // split the node and create 2 child nodes: // 1. a child representing the new string from the diverted offset onwards // 2. a child representing the old node's suffix from the diverted offset // and the old children n = __trieMapNode_Split(n, offset); // the new string matches the split node exactly! // we simply turn the split node, which is now non terminal, into a // terminal node if (offset == len) { n->value = value; n->flags |= TM_NODE_TERMINAL; } else { // we add a child n = __trieMapNode_AddChild(n, str, offset, len, value); } *np = n; return 1; } // we're inserting in an existing node - just replace the value if (offset == len) { int term = __trieMapNode_isTerminal(n); int deleted = __trieMapNode_isDeleted(n); if (cb) { n->value = cb(n->value, value); } else { if (n->value) { free(n->value); } n->value = value; } // set the node as terminal n->flags |= TM_NODE_TERMINAL; // if it was deleted, make sure it's not now n->flags &= ~TM_NODE_DELETED; n->flags &= ~TM_NODE_SORTED; *np = n; // if the node existed - we return 0, otherwise return 1 as it's a new // node return (term && !deleted) ? 0 : 1; } // proceed to the next child or add a new child for the current char for (tm_len_t i = 0; i < n->numChildren; i++) { TrieMapNode *child = __trieMapNode_children(n)[i]; if (str[offset] == child->str[0]) { int rc = TrieMapNode_Add(&child, str + offset, len - offset, value, cb); __trieMapNode_children(n)[i] = child; // *__trieMapNode_childKey(n, i) = child->str[0]; return rc; } } *np = __trieMapNode_AddChild(n, str, offset, len, value); return 1; } int TrieMap_Add(TrieMap *t, char *str, tm_len_t len, void *value, TrieMapReplaceFunc cb) { int rc = TrieMapNode_Add(&t->root, str, len, value, cb); t->cardinality += rc; return rc; } // comparator for node sorting by child max score static int __cmp_nodes(const void *p1, const void *p2) { return (*(TrieMapNode **)p1)->str[0] - (*(TrieMapNode **)p2)->str[0]; } static int __cmp_chars(const void *p1, const void *p2) { return *(char *)p1 - *(char *)p2; } /* Sort the children of a node by their first letter to allow binary search */ static inline void __trieNode_sortChildren(TrieMapNode *n) { if ((0 == (n->flags & TM_NODE_SORTED)) && n->numChildren > 3) { qsort(__trieMapNode_children(n), n->numChildren, sizeof(TrieMapNode *), __cmp_nodes); qsort(__trieMapNode_childKey(n, 0), n->numChildren, 1, __cmp_chars); n->flags |= TM_NODE_SORTED; } } void *TrieMapNode_Find(TrieMapNode *n, char *str, tm_len_t len) { tm_len_t offset = 0; while (n && (offset < len || len == 0)) { tm_len_t localOffset = 0; tm_len_t nlen = n->len; while (offset < len && localOffset < nlen) { if (str[offset] != n->str[localOffset]) { break; } offset++; localOffset++; } // we've reached the end of the node's string if (localOffset == nlen) { // we're at the end of both strings! if (offset == len) { // If this is a terminal, non deleted node if (__trieMapNode_isTerminal(n) && !__trieMapNode_isDeleted(n)) { return n->value; } else { return TRIEMAP_NOTFOUND; } } // we've reached the end of the node's string but not the search string // let's find a child to continue to tm_len_t i = 0; TrieMapNode *nextChild = NULL; // if (!(n->flags & TM_NODE_SORTED) && n->numChildren > 2) { // qsort(__trieMapNode_children(n), n->numChildren, sizeof(TrieMapNode *), __cmp_nodes); // qsort(__trieMapNode_childKey(n, 0), n->numChildren, 1, __cmp_chars); // n->flags |= TM_NODE_SORTED; // } char *childKeys = __trieMapNode_childKey(n, 0); char c = str[offset]; // if (n->flags & TM_NODE_SORTED) { // int bottom = 0, top = n->numChildren - 1; // while (bottom <= top) { // int mid = (bottom + top) / 2; // char cc = *__trieMapNode_childKey(n, mid); // if (c == cc) { // nextChild = __trieMapNode_children(n)[mid]; // break; // } else if (c < cc) { // top = mid - 1; // } else { // bottom = mid + 1; // } // } // } else { tm_len_t nc = n->numChildren; while (i < nc) { if (str[offset] == childKeys[i]) { nextChild = __trieMapNode_children(n)[i]; break; } ++i; } //} // we couldn't find a matching child n = nextChild; } else { return TRIEMAP_NOTFOUND; } } return TRIEMAP_NOTFOUND; } /* Find a node by string. Return the node matching the string even if it is not * terminal. Puts the node local offset in *offset */ TrieMapNode *TrieMapNode_FindNode(TrieMapNode *n, char *str, tm_len_t len, tm_len_t *poffset) { tm_len_t offset = 0; while (n && (offset < len || len == 0)) { tm_len_t localOffset = 0; tm_len_t nlen = n->len; while (offset < len && localOffset < nlen) { if (str[offset] != n->str[localOffset]) { break; } offset++; localOffset++; } // we've reached the end of the string - return the node even if it's not // temrinal if (offset == len) { // let the caller know the local offset if (poffset) { *poffset = localOffset; } return n; } // we've reached the end of the node's string if (localOffset == nlen) { // we've reached the end of the node's string but not the search string // let's find a child to continue to tm_len_t i = 0; TrieMapNode *nextChild = NULL; char *childKeys = __trieMapNode_childKey(n, 0); char c = str[offset]; while (i < n->numChildren) { if (str[offset] == childKeys[i]) { nextChild = __trieMapNode_children(n)[i]; break; } ++i; } // we couldn't find a matching child n = nextChild; } else { return NULL; } } return NULL; } void *TrieMap_Find(TrieMap *t, char *str, tm_len_t len) { return TrieMapNode_Find(t->root, str, len); } /* If a node has a single child after delete, we can merged them. This * deletes * the node and returns a newly allocated node */ TrieMapNode *__trieMapNode_MergeWithSingleChild(TrieMapNode *n) { // we do not merge terminal nodes if (__trieMapNode_isTerminal(n) || n->numChildren != 1) { return n; } TrieMapNode *ch = *__trieMapNode_children(n); // Copy the current node's data and children to a new child node char nstr[n->len + ch->len + 1]; memcpy(nstr, n->str, sizeof(char) * n->len); memcpy(&nstr[n->len], ch->str, sizeof(char) * ch->len); TrieMapNode *merged = __newTrieMapNode(nstr, 0, n->len + ch->len, ch->numChildren, ch->value, __trieMapNode_isTerminal(ch)); merged->numChildren = ch->numChildren; merged->flags = ch->flags; memcpy(__trieMapNode_children(merged), __trieMapNode_children(ch), sizeof(TrieMapNode *) * merged->numChildren); memcpy(__trieMapNode_childKey(merged, 0), __trieMapNode_childKey(ch, 0), merged->numChildren); free(n); free(ch); return merged; } /* Optimize the node and its children: * 1. If a child should be deleted - delete it and reduce the child count * 2. If a child has a single child - merge them */ void __trieMapNode_optimizeChildren(TrieMapNode *n, void (*freeCB)(void *)) { int i = 0; TrieMapNode **nodes = __trieMapNode_children(n); // free deleted terminal nodes while (i < n->numChildren) { // if this is a deleted node with no children - remove it if (nodes[i]->numChildren == 0 && __trieMapNode_isDeleted(nodes[i])) { TrieMapNode_Free(nodes[i], freeCB); nodes[i] = NULL; char *nk = __trieMapNode_childKey(n, i); // just "fill" the hole with the next node up while (i < n->numChildren - 1) { nodes[i] = nodes[i + 1]; *nk = *(nk + 1); i++; nk++; } // reduce child count n->numChildren--; memmove(((char *)nodes) - 1, (char *)nodes, sizeof(TrieMapNode *) * n->numChildren); } else { // this node is ok! // if needed - merge this node with it its single child if (nodes[i] && nodes[i]->numChildren == 1) { nodes[i] = __trieMapNode_MergeWithSingleChild(nodes[i]); } } i++; } } int TrieMapNode_Delete(TrieMapNode *n, char *str, tm_len_t len, void (*freeCB)(void *)) { tm_len_t offset = 0; int stackCap = 8; TrieMapNode **stack = calloc(stackCap, sizeof(TrieMapNode *)); int stackPos = 0; int rc = 0; while (n && (offset < len || len == 0)) { stack[stackPos++] = n; if (stackPos == stackCap) { stackCap *= 2; stack = realloc(stack, stackCap * sizeof(TrieMapNode *)); } tm_len_t localOffset = 0; for (; offset < len && localOffset < n->len; offset++, localOffset++) { if (str[offset] != n->str[localOffset]) { break; } } if (offset == len) { // we're at the end of both strings! // this means we've found what we're looking for if (localOffset == n->len) { if (!(n->flags & TM_NODE_DELETED)) { n->flags |= TM_NODE_DELETED; n->flags &= ~TM_NODE_TERMINAL; if (n->value) { if (freeCB) { freeCB(n->value); } else { free(n->value); } n->value = NULL; } rc = 1; } goto end; } } else if (localOffset == n->len) { // we've reached the end of the node's string but not the search string // let's find a child to continue to tm_len_t i = 0; TrieMapNode *nextChild = NULL; for (; i < n->numChildren; i++) { if (str[offset] == *__trieMapNode_childKey(n, i)) { nextChild = __trieMapNode_children(n)[i]; break; } } // we couldn't find a matching child n = nextChild; } else { goto end; } } end: while (stackPos--) { __trieMapNode_optimizeChildren(stack[stackPos], freeCB); } free(stack); return rc; } int TrieMap_Delete(TrieMap *t, char *str, tm_len_t len, void (*freeCB)(void *)) { int rc = TrieMapNode_Delete(t->root, str, len, freeCB); t->cardinality -= rc; return rc; } size_t TrieMapNode_MemUsage(TrieMapNode *n) { size_t ret = __trieMapNode_Sizeof(n->numChildren, n->len); for (tm_len_t i = 0; i < n->numChildren; i++) { TrieMapNode *child = __trieMapNode_children(n)[i]; ret += TrieMapNode_MemUsage(child); } return ret; } size_t TrieMap_MemUsage(TrieMap *t) { return TrieMapNode_MemUsage(t->root); } void TrieMapNode_Free(TrieMapNode *n, void (*freeCB)(void *)) { for (tm_len_t i = 0; i < n->numChildren; i++) { TrieMapNode *child = __trieMapNode_children(n)[i]; TrieMapNode_Free(child, freeCB); } if (n->value) { if (freeCB) { freeCB(n->value); } else { free(n->value); } } free(n); } /* the current top of the iterator stack */ #define __tmi_current(it) &it->stack[it->stackOffset - 1] /* Step itearator return codes below: */ #define TM_ITERSTATE_SELF 0 #define TM_ITERSTATE_CHILDREN 1 /* Push a new trie node on the iterator's stack */ inline void __tmi_Push(TrieMapIterator *it, TrieMapNode *node) { if (it->stackOffset == it->stackCap) { // make sure we don't overflow stackCap if ((int)it->stackCap + 1024 > 0xFFFF) { it->stackCap = 0xFFFF; } else { it->stackCap += MIN(it->stackCap, 1024); } it->stack = realloc(it->stack, it->stackCap * sizeof(__tmi_stackNode)); } it->stack[it->stackOffset++] = (__tmi_stackNode){ .childOffset = 0, .stringOffset = 0, .n = node, .state = TM_ITERSTATE_SELF, }; } inline void __tmi_Pop(TrieMapIterator *it) { it->bufOffset -= (__tmi_current(it))->stringOffset; if (it->bufOffset < it->prefixLen) { it->inSuffix = 0; } --it->stackOffset; } TrieMapIterator *TrieMap_Iterate(TrieMap *t, const char *prefix, tm_len_t len) { TrieMapIterator *it = calloc(1, sizeof(TrieMapIterator)); it->bufLen = 16; it->buf = calloc(1, it->bufLen); it->stackCap = 8; it->stack = calloc(it->stackCap, sizeof(__tmi_stackNode)); it->bufOffset = 0; it->inSuffix = 0; it->prefix = prefix; it->prefixLen = len; __tmi_Push(it, t->root); return it; } void TrieMapIterator_Free(TrieMapIterator *it) { free(it->buf); free(it->stack); free(it); } int TrieMapIterator_Next(TrieMapIterator *it, char **ptr, tm_len_t *len, void **value) { while (it->stackOffset > 0) { __tmi_stackNode *current = __tmi_current(it); TrieMapNode *n = current->n; if (current->state == TM_ITERSTATE_SELF) { while (current->stringOffset < n->len) { char b = current->n->str[current->stringOffset]; if (!it->inSuffix) { // end of iteration in prefix mode if (it->prefix[it->bufOffset] != b) { goto pop; } if (it->bufOffset == it->prefixLen - 1) { it->inSuffix = 1; } } // advance the buffer offset and character offset it->buf[it->bufOffset++] = b; current->stringOffset++; // if needed - increase the buffer on the heap if (it->bufOffset == it->bufLen) { if ((int)it->bufLen + 1024 > 0xFFFF) { it->bufLen = 0xFFFF; } else { it->bufLen += MIN(it->bufLen, 1024); } it->buf = realloc(it->buf, it->bufLen); } } // this is required for an empty node to switch to suffix mode if (it->bufOffset == it->prefixLen) { it->inSuffix = 1; } // switch to "children mode" current->state = TM_ITERSTATE_CHILDREN; // we've reached if (__trieMapNode_isTerminal(n) && it->inSuffix) { *ptr = it->buf; *len = it->bufOffset; *value = n->value; return 1; } } if (current->state == TM_ITERSTATE_CHILDREN) { // push the next child that matches tm_len_t nch = current->n->numChildren; while (current->childOffset < nch) { if (it->inSuffix || *__trieMapNode_childKey(n, current->childOffset) == it->prefix[it->bufOffset]) { TrieMapNode *ch = __trieMapNode_children(n)[current->childOffset++]; // unless in suffix mode, no need to go back here after popping the // child, so we just set the child offset at the end if (!it->inSuffix) current->childOffset = nch; // Add the matching child to the stack __tmi_Push(it, ch); goto next; } // if the child doesn't match- just advance one current->childOffset++; } } pop: // at the end of the node - pop and go up __tmi_Pop(it); next: continue; } return 0; } void TrieMap_Free(TrieMap *t, void (*freeCB)(void *)) { TrieMapNode_Free(t->root, freeCB); free(t); } TrieMapNode *TrieMapNode_RandomWalk(TrieMapNode *n, int minSteps, char **str, tm_len_t *len) { // create an iteration stack we walk up and down size_t stackCap = minSteps; size_t stackSz = 1; TrieMapNode **stack = calloc(stackCap, sizeof(TrieMapNode *)); stack[0] = n; if (stackSz == stackCap) { stackCap += minSteps; stack = realloc(stack, stackCap * sizeof(TrieMapNode *)); } size_t bufCap = n->len; int steps = 0; while (steps < minSteps || !__trieMapNode_isTerminal(stack[stackSz - 1])) { n = stack[stackSz - 1]; /* select the next step - -1 means walk back up one level */ int rnd = rand() % (n->numChildren + 1) - 1; if (rnd == -1) { /* we can't walk up the top level */ if (stackSz > 1) { steps++; stackSz--; bufCap -= n->len; } continue; } /* Push a child on the stack */ stack[stackSz++] = n = __trieMapNode_children(n)[rnd]; steps++; if (stackSz == stackCap) { stackCap += minSteps; stack = realloc(stack, stackCap * sizeof(TrieMapNode *)); } bufCap += n->len; } /* Return the node at the top of the stack */ n = stack[stackSz - 1]; /* build the string by walking the stack and copying all node strings */ char *buf = malloc(bufCap + 1); buf[bufCap] = 0; tm_len_t bufSize = 0; for (size_t i = 0; i < stackSz; i++) { memcpy(buf + bufSize, stack[i]->str, stack[i]->len); bufSize += stack[i]->len; } *str = buf; *len = bufSize; free(stack); return n; } void *TrieMap_RandomValueByPrefix(TrieMap *t, const char *prefix, tm_len_t pflen) { char *str; tm_len_t len; TrieMapNode *root = TrieMapNode_FindNode(t->root, (char *)prefix, pflen, NULL); if (!root) { return NULL; } TrieMapNode *n = TrieMapNode_RandomWalk(root, (int)round(log2(1 + t->cardinality)), &str, &len); if (n) { free(str); return n->value; } return NULL; } int TrieMap_RandomKey(TrieMap *t, char **str, tm_len_t *len, void **ptr) { if (t->cardinality == 0) { return 0; } // TODO: deduce steps from cardinality properly TrieMapNode *n = TrieMapNode_RandomWalk(t->root, (int)round(log2(1 + t->cardinality)), str, len); *ptr = n->value; return 1; } RediSearch-1.2.2/src/dep/triemap/triemap.h000066400000000000000000000110141364126773500203520ustar00rootroot00000000000000#ifndef __TRIEMAP_H__ #define __TRIEMAP_H__ #include #include #include #include typedef uint16_t tm_len_t; #define TM_NODE_DELETED 0x01 #define TM_NODE_TERMINAL 0x02 #define TM_NODE_SORTED 0x04 /* This special pointer is returned when TrieMap_Find cannot find anything */ extern void *TRIEMAP_NOTFOUND; #pragma pack(1) /* TrieMapNode represents a single node in a trie. The actual size of it is * bigger, as the children are allocated after str[]. * The value pointer is optional, and NULL can be used if you are just * interested in the triemap as a set for strings */ typedef struct { // the string length of this node. can be 0 tm_len_t len; // the number of child nodes tm_len_t numChildren : 9; uint8_t flags : 7; void *value; // the string of the current node char str[]; // ... here come the first letters of each child childChars[] // ... now come the children, to be accessed with __trieMapNode_children } TrieMapNode; #pragma pack() typedef struct { TrieMapNode *root; size_t cardinality; } TrieMap; TrieMap *NewTrieMap(); typedef void *(*TrieMapReplaceFunc)(void *oldval, void *newval); /* Add a new string to a trie. Returns 1 if the key is new to the trie or 0 if * it already existed. * * If value is given, it is saved as a pyaload inside the trie node. * If the key already exists, we replace the old value with the new value, using * free() to free the old value. * * If cb is given, instead of replacing and freeing, we call the callback with * the old and new value, and the function should return the value to set in the * node, and take care of freeing any unwanted pointers. The returned value * can be NULL and doesn't have to be either the old or new value. */ int TrieMap_Add(TrieMap *t, char *str, tm_len_t len, void *value, TrieMapReplaceFunc cb); /* Find the entry with a given string and length, and return its value, even if * that was NULL. * * NOTE: If the key does not exist in the trie, we return the special * constant value TRIEMAP_NOTFOUND, so checking if the key exists is done by * comparing to it, becase NULL can be a valid result. */ void *TrieMap_Find(TrieMap *t, char *str, tm_len_t len); /* Mark a node as deleted. It also optimizes the trie by merging nodes if * needed. If freeCB is given, it will be used to free the value of the deleted * node. If it doesn't, we simply call free() */ int TrieMap_Delete(TrieMap *t, char *str, tm_len_t len, void (*freeCB)(void *)); /* Free the trie's root and all its children recursively. If freeCB is given, we * call it to free individual payload values. If not, free() is used instead. */ void TrieMap_Free(TrieMap *t, void (*freeCB)(void *)); /* Get a random key from the trie by doing a random walk down and up the tree * for a minimum number of steps. Returns 0 if the tree is empty and we couldn't * find a random node. * Assign's the key to str and saves its len (the key is NOT null terminated). * NOTE: It is the caller's responsibility to free the key string */ int TrieMap_RandomKey(TrieMap *t, char **str, tm_len_t *len, void **ptr); /* Get the value of a random element under a specific prefix. NULL if the prefix was not found */ void *TrieMap_RandomValueByPrefix(TrieMap *t, const char *prefix, tm_len_t pflen); size_t TrieMap_MemUsage(TrieMap *t); /************** Iterator API - not ported from the textual trie yet * ***********/ /* trie iterator stack node. for internal use only */ typedef struct { int state; TrieMapNode *n; tm_len_t stringOffset; tm_len_t childOffset; } __tmi_stackNode; typedef struct { char *buf; tm_len_t bufLen; tm_len_t bufOffset; __tmi_stackNode *stack; tm_len_t stackOffset; tm_len_t stackCap; const char *prefix; tm_len_t prefixLen; int inSuffix; } TrieMapIterator; void __tmi_Push(TrieMapIterator *it, TrieMapNode *node); void __tmi_Pop(TrieMapIterator *it); /* Iterate the trie for all the suffixes of a given prefix. This returns an * iterator object even if the prefix was not found, and subsequent calls to * TrieMapIterator_Next are needed to get the results from the iteration. If the * prefix is not found, the first call to next will return 0 */ TrieMapIterator *TrieMap_Iterate(TrieMap *t, const char *prefix, tm_len_t prefixLen); /* Free a trie iterator */ void TrieMapIterator_Free(TrieMapIterator *it); /* Iterate to the next matching entry in the trie. Returns 1 if we can continue, * or 0 if we're done and should exit */ int TrieMapIterator_Next(TrieMapIterator *it, char **ptr, tm_len_t *len, void **value); #endif RediSearch-1.2.2/src/doc_table.c000066400000000000000000000333161364126773500164200ustar00rootroot00000000000000#include "doc_table.h" #include #include #include #include "redismodule.h" #include "util/fnv.h" #include "dep/triemap/triemap.h" #include "sortable.h" #include "rmalloc.h" #include "spec.h" #include "config.h" /* Creates a new DocTable with a given capacity */ DocTable NewDocTable(size_t cap, size_t max_size) { return (DocTable){.size = 1, .cap = cap, .maxDocId = 0, .memsize = 0, .sortablesSize = 0, .maxSize = max_size, .buckets = rm_calloc(cap, sizeof(DMDChain)), .dim = NewDocIdMap()}; } static inline uint32_t DocTable_GetBucket(const DocTable *t, t_docId docId) { return docId < t->maxSize ? docId : docId % t->maxSize; } static inline int DocTable_ValidateDocId(const DocTable *t, t_docId docId) { return docId != 0 && docId <= t->maxDocId; } /* Get the metadata for a doc Id from the DocTable. * If docId is not inside the table, we return NULL */ int DMDChain_IsEmpty(const DMDChain *dmdChain) { return !dmdChain->last; } RSDocumentMetadata *DocTable_Get(const DocTable *t, t_docId docId) { if (!DocTable_ValidateDocId(t, docId)) { return NULL; } uint32_t bucketIndex = DocTable_GetBucket(t, docId); DMDChain *dmdChain = &t->buckets[bucketIndex]; RSDocumentMetadata *currDmd = dmdChain->first; while (currDmd) { if (currDmd->id == docId) { return currDmd; } currDmd = currDmd->next; } return NULL; } int DocTable_Exists(const DocTable *t, t_docId docId) { if (!docId || docId > t->maxDocId) { return 0; } uint32_t ix = DocTable_GetBucket(t, docId); const DMDChain *chain = t->buckets + ix; if (chain == NULL) { return 0; } for (const RSDocumentMetadata *md = chain->first; md; md = md->next) { if (md->id == docId && !(md->flags & Document_Deleted)) { return 1; } } return 0; } RSDocumentMetadata *DocTable_GetByKeyR(const DocTable *t, RedisModuleString *s) { RSDocumentKey k; k.str = RedisModule_StringPtrLen(s, &k.len); t_docId id = DocTable_GetId(t, k); return DocTable_Get(t, id); } static inline void DocTable_Set(DocTable *t, t_docId docId, RSDocumentMetadata *dmd) { uint32_t bucket = DocTable_GetBucket(t, docId); if (bucket >= t->cap && t->cap < t->maxSize) { /* We have to grow the array capacity. * We only grow till we reach maxSize, then we starts to add the dmds to * the already existing chains. */ size_t oldcap = t->cap; // We grow by half of the current capacity with maximum of 1m t->cap += 1 + (t->cap ? MIN(t->cap / 2, 1024 * 1024) : 1); t->cap = MIN(t->cap, t->maxSize); // make sure we do not excised maxSize t->cap = MAX(t->cap, bucket + 1); // docs[bucket] needs to be valid, so t->cap > bucket t->buckets = rm_realloc(t->buckets, t->cap * sizeof(DMDChain)); for (; oldcap < t->cap; oldcap++) { t->buckets[oldcap].first = NULL; t->buckets[oldcap].last = NULL; } } DMDChain *chain = &t->buckets[bucket]; DMD_Incref(dmd); // Adding the dmd to the chain if (DMDChain_IsEmpty(chain)) { chain->first = chain->last = dmd; } else { chain->last->next = dmd; dmd->prev = chain->last; dmd->next = NULL; chain->last = dmd; } } /** Get the docId of a key if it exists in the table, or 0 if it doesnt */ t_docId DocTable_GetId(const DocTable *dt, RSDocumentKey key) { return DocIdMap_Get(&dt->dim, key); } /* Set the payload for a document. Returns 1 if we set the payload, 0 if we couldn't find the * document */ int DocTable_SetPayload(DocTable *t, t_docId docId, const char *data, size_t len) { /* Get the metadata */ RSDocumentMetadata *dmd = DocTable_Get(t, docId); if (!dmd || !data) { return 0; } /* If we already have metadata - clean up the old data */ if (dmd->payload) { /* Free the old payload */ if (dmd->payload->data) { rm_free(dmd->payload->data); } t->memsize -= dmd->payload->len; } else { dmd->payload = rm_malloc(sizeof(RSPayload)); } /* Copy it... */ dmd->payload->data = rm_calloc(1, len + 1); dmd->payload->len = len; memcpy(dmd->payload->data, data, len); dmd->flags |= Document_HasPayload; t->memsize += len; return 1; } /* Set the sorting vector for a document. If the vector is NULL we mark the doc as not having a * vector. Returns 1 on success, 0 if the document does not exist. No further validation is done */ int DocTable_SetSortingVector(DocTable *t, t_docId docId, RSSortingVector *v) { RSDocumentMetadata *dmd = DocTable_Get(t, docId); if (!dmd) { return 0; } /* Null vector means remove the current vector if it exists */ if (!v) { if (dmd->sortVector) { SortingVector_Free(dmd->sortVector); } dmd->sortVector = NULL; dmd->flags &= ~Document_HasSortVector; return 1; } /* Set th new vector and the flags accordingly */ dmd->sortVector = v; dmd->flags |= Document_HasSortVector; t->sortablesSize += RSSortingVector_GetMemorySize(v); return 1; } int DocTable_SetByteOffsets(DocTable *t, t_docId docId, RSByteOffsets *v) { RSDocumentMetadata *dmd = DocTable_Get(t, docId); if (!dmd) { return 0; } dmd->byteOffsets = v; dmd->flags |= Document_HasOffsetVector; return 1; } /* Put a new document into the table, assign it an incremental id and store the metadata in the * table. * * Return 0 if the document is already in the index */ t_docId DocTable_Put(DocTable *t, RSDocumentKey key, double score, u_char flags, const char *payload, size_t payloadSize) { t_docId xid = DocIdMap_Get(&t->dim, key); // if the document is already in the index, return 0 if (xid) { return 0; } t_docId docId = ++t->maxDocId; /* Copy the payload since it's probably an input string not retained */ RSPayload *dpl = NULL; if (payload && payloadSize) { dpl = rm_malloc(sizeof(RSPayload)); dpl->data = rm_calloc(1, payloadSize + 1); memcpy(dpl->data, payload, payloadSize); dpl->len = payloadSize; flags |= Document_HasPayload; t->memsize += payloadSize + sizeof(RSPayload); } sds keyPtr = sdsnewlen(key.str, key.len); RSDocumentMetadata *dmd = rm_calloc(1, sizeof(RSDocumentMetadata)); dmd->keyPtr = keyPtr; dmd->score = score; dmd->flags = flags; dmd->payload = dpl; dmd->maxFreq = 1; dmd->id = docId; dmd->sortVector = NULL; DocTable_Set(t, docId, dmd); ++t->size; t->memsize += sizeof(RSDocumentMetadata) + sdsAllocSize(keyPtr); DocIdMap_Put(&t->dim, key, docId); return docId; } RSPayload *DocTable_GetPayload(DocTable *t, t_docId docId) { RSDocumentMetadata *dmd = DocTable_Get(t, docId); return dmd ? dmd->payload : NULL; } /* Get the "real" external key for an incremental id. Returns NULL if docId is not in the table. */ inline RSDocumentKey DocTable_GetKey(DocTable *t, t_docId docId) { RSDocumentMetadata *dmd = DocTable_Get(t, docId); if (!dmd) { return MakeDocKey(NULL, 0); } return MakeDocKey(dmd->keyPtr, sdslen(dmd->keyPtr)); } /* Get the score for a document from the table. Returns 0 if docId is not in the table. */ inline float DocTable_GetScore(DocTable *t, t_docId docId) { RSDocumentMetadata *dmd = DocTable_Get(t, docId); return dmd ? dmd->score : 0; } void DMD_Free(RSDocumentMetadata *md) { if (md->payload) { rm_free(md->payload->data); rm_free(md->payload); md->flags &= ~Document_HasPayload; md->payload = NULL; } if (md->sortVector) { SortingVector_Free(md->sortVector); md->sortVector = NULL; md->flags &= ~Document_HasSortVector; } if (md->byteOffsets) { RSByteOffsets_Free(md->byteOffsets); md->byteOffsets = NULL; md->flags &= ~Document_HasOffsetVector; } sdsfree(md->keyPtr); rm_free(md); } void DocTable_Free(DocTable *t) { for (int i = 0; i < t->cap; ++i) { DMDChain *chain = &t->buckets[i]; if (DMDChain_IsEmpty(chain)) { continue; } RSDocumentMetadata *md = chain->first; while (md) { RSDocumentMetadata *next = md->next; DMD_Free(md); md = next; } } rm_free(t->buckets); DocIdMap_Free(&t->dim); } static void DocTable_DmdUnchain(DocTable *t, RSDocumentMetadata *md) { uint32_t bucketIndex = DocTable_GetBucket(t, md->id); DMDChain *dmdChain = &t->buckets[bucketIndex]; if (dmdChain->first == md) { dmdChain->first = md->next; } if (dmdChain->last == md) { dmdChain->last = md->prev; } if (md->prev) { md->prev->next = md->next; } if (md->next) { md->next->prev = md->prev; } md->next = NULL; md->prev = NULL; } int DocTable_Delete(DocTable *t, RSDocumentKey key) { RSDocumentMetadata *md = DocTable_Pop(t, key); if (md) { DMD_Decref(md); return 1; } return 0; } RSDocumentMetadata *DocTable_Pop(DocTable *t, RSDocumentKey key) { t_docId docId = DocIdMap_Get(&t->dim, key); if (docId && docId <= t->maxDocId) { RSDocumentMetadata *md = DocTable_Get(t, docId); if (!md) { return NULL; } md->flags |= Document_Deleted; DocTable_DmdUnchain(t, md); DocIdMap_Delete(&t->dim, key); --t->size; return md; } return NULL; } void DocTable_RdbSave(DocTable *t, RedisModuleIO *rdb) { RedisModule_SaveUnsigned(rdb, t->size); RedisModule_SaveUnsigned(rdb, t->maxDocId); RedisModule_SaveUnsigned(rdb, t->maxSize); uint32_t elements_written = 0; for (uint32_t i = 0; i < t->cap; ++i) { if (DMDChain_IsEmpty(&t->buckets[i])) { continue; } RSDocumentMetadata *dmd = t->buckets[i].first; while (dmd) { RedisModule_SaveStringBuffer(rdb, dmd->keyPtr, sdslen(dmd->keyPtr)); RedisModule_SaveUnsigned(rdb, dmd->id); RedisModule_SaveUnsigned(rdb, dmd->flags); RedisModule_SaveUnsigned(rdb, dmd->maxFreq); RedisModule_SaveUnsigned(rdb, dmd->len); RedisModule_SaveFloat(rdb, dmd->score); if (dmd->flags & Document_HasPayload) { if (dmd->payload) { // save an extra space for the null terminator to make the payload null terminated on RedisModule_SaveStringBuffer(rdb, dmd->payload->data, dmd->payload->len + 1); } else { RedisModule_SaveStringBuffer(rdb, "", 1); } } if (dmd->flags & Document_HasSortVector) { SortingVector_RdbSave(rdb, dmd->sortVector); } if (dmd->flags & Document_HasOffsetVector) { Buffer tmp; Buffer_Init(&tmp, 16); RSByteOffsets_Serialize(dmd->byteOffsets, &tmp); RedisModule_SaveStringBuffer(rdb, tmp.data, tmp.offset); Buffer_Free(&tmp); } ++elements_written; dmd = dmd->next; } } assert(elements_written + 1 == t->size); } void DocTable_RdbLoad(DocTable *t, RedisModuleIO *rdb, int encver) { t->size = RedisModule_LoadUnsigned(rdb); t->maxDocId = RedisModule_LoadUnsigned(rdb); if (encver >= INDEX_MIN_COMPACTED_DOCTABLE_VERSION) { t->maxSize = RedisModule_LoadUnsigned(rdb); } else { t->maxSize = MIN(RSGlobalConfig.maxDocTableSize, t->maxDocId); } for (size_t i = 1; i < t->size; i++) { size_t len; RSDocumentMetadata *dmd = rm_calloc(1, sizeof(RSDocumentMetadata)); char *tmpPtr = RedisModule_LoadStringBuffer(rdb, &len); if (encver < INDEX_MIN_BINKEYS_VERSION) { // Previous versions would encode the NUL byte len--; } dmd->id = encver < INDEX_MIN_COMPACTED_DOCTABLE_VERSION ? i : RedisModule_LoadUnsigned(rdb); dmd->keyPtr = sdsnewlen(tmpPtr, len); rm_free(tmpPtr); dmd->flags = RedisModule_LoadUnsigned(rdb); dmd->maxFreq = 1; dmd->len = 1; if (encver > 1) { dmd->maxFreq = RedisModule_LoadUnsigned(rdb); } if (encver >= INDEX_MIN_DOCLEN_VERSION) { dmd->len = RedisModule_LoadUnsigned(rdb); } else { // In older versions, default the len to max freq to avoid division by zero. dmd->len = dmd->maxFreq; } dmd->score = RedisModule_LoadFloat(rdb); dmd->payload = NULL; // read payload if set if (dmd->flags & Document_HasPayload) { dmd->payload = RedisModule_Alloc(sizeof(RSPayload)); dmd->payload->data = RedisModule_LoadStringBuffer(rdb, &dmd->payload->len); dmd->payload->len--; t->memsize += dmd->payload->len + sizeof(RSPayload); } dmd->sortVector = NULL; if (dmd->flags & Document_HasSortVector) { dmd->sortVector = SortingVector_RdbLoad(rdb, encver); t->sortablesSize += RSSortingVector_GetMemorySize(dmd->sortVector); } if (dmd->flags & Document_HasOffsetVector) { size_t nTmp = 0; char *tmp = RedisModule_LoadStringBuffer(rdb, &nTmp); Buffer *bufTmp = Buffer_Wrap(tmp, nTmp); dmd->byteOffsets = LoadByteOffsets(bufTmp); free(bufTmp); rm_free(tmp); } // We always save deleted docs to rdb, but we don't want to load them back to the id map if (!(dmd->flags & Document_Deleted)) { DocIdMap_Put(&t->dim, MakeDocKey(dmd->keyPtr, sdslen(dmd->keyPtr)), dmd->id); } DocTable_Set(t, dmd->id, dmd); t->memsize += sizeof(RSDocumentMetadata) + len; } } DocIdMap NewDocIdMap() { TrieMap *m = NewTrieMap(); return (DocIdMap){m}; } t_docId DocIdMap_Get(const DocIdMap *m, RSDocumentKey key) { void *val = TrieMap_Find(m->tm, (char *)key.str, key.len); if (val && val != TRIEMAP_NOTFOUND) { return *((t_docId *)val); } return 0; } void *_docIdMap_replace(void *oldval, void *newval) { if (oldval) { rm_free(oldval); } return newval; } void DocIdMap_Put(DocIdMap *m, RSDocumentKey key, t_docId docId) { t_docId *pd = rm_malloc(sizeof(t_docId)); *pd = docId; TrieMap_Add(m->tm, (char *)key.str, key.len, pd, _docIdMap_replace); } void DocIdMap_Free(DocIdMap *m) { TrieMap_Free(m->tm, RedisModule_Free); } int DocIdMap_Delete(DocIdMap *m, RSDocumentKey key) { return TrieMap_Delete(m->tm, (char *)key.str, key.len, RedisModule_Free); } RediSearch-1.2.2/src/doc_table.h000066400000000000000000000147711364126773500164310ustar00rootroot00000000000000#ifndef __DOC_TABLE_H__ #define __DOC_TABLE_H__ #include #include #include "redismodule.h" #include "dep/triemap/triemap.h" #include "redisearch.h" #include "sortable.h" #include "byte_offsets.h" #include "rmutil/sds.h" // Simple pointer/size wrapper for a document key. typedef struct { const char *str; size_t len; } RSDocumentKey; // Returns a "DocumentKey" object suitable for use with the various DocTable // functions below. This returns a DocKey from a simple pointer/length pair static inline RSDocumentKey MakeDocKey(const char *key, size_t len) { return (RSDocumentKey){.str = key, .len = len}; } // This returns a DocumentKey from a RedisModuleString, curring out some boilerplate static inline RSDocumentKey MakeDocKeyR(RedisModuleString *s) { size_t len; const char *p = RedisModule_StringPtrLen(s, &len); return MakeDocKey(p, len); } // Retrieves the pointer and length for the document's key. static inline const char *DMD_KeyPtrLen(const RSDocumentMetadata *dmd, size_t *len) { if (len) { *len = sdslen(dmd->keyPtr); } return dmd->keyPtr; } // Convenience function to create a RedisModuleString from the document's key static inline RedisModuleString *DMD_CreateKeyString(const RSDocumentMetadata *dmd, RedisModuleCtx *ctx) { return RedisModule_CreateString(ctx, dmd->keyPtr, sdslen(dmd->keyPtr)); } /* Map between external id an incremental id */ typedef struct { TrieMap *tm; } DocIdMap; DocIdMap NewDocIdMap(); /* Get docId from a did-map. Returns 0 if the key is not in the map */ t_docId DocIdMap_Get(const DocIdMap *m, RSDocumentKey key); /* Put a new doc id in the map if it does not already exist */ void DocIdMap_Put(DocIdMap *m, RSDocumentKey key, t_docId docId); int DocIdMap_Delete(DocIdMap *m, RSDocumentKey key); /* Free the doc id map */ void DocIdMap_Free(DocIdMap *m); /* The DocTable is a simple mapping between incremental ids and the original document key and * metadata. It is also responsible for storing the id incrementor for the index and assigning * new * incremental ids to inserted keys. * * NOTE: Currently there is no deduplication on the table so we do not prevent dual insertion of * the * same key. This may result in document duplication in results */ typedef struct { struct RSDocumentMetadata_s *first; struct RSDocumentMetadata_s *last; } DMDChain; typedef struct { size_t size; // the maximum size this table is allowed to grow to size_t maxSize; t_docId maxDocId; size_t cap; size_t memsize; size_t sortablesSize; DMDChain *buckets; DocIdMap dim; } DocTable; /* increasing the ref count of the given dmd */ #define DMD_Incref(md) \ if (md) ++md->ref_count; #define DocTable_ForEach(dt, code) \ for (size_t i = 1; i < dt->cap; ++i) { \ DMDChain *chain = &dt->buckets[i]; \ if (DMDChain_IsEmpty(chain)) { \ continue; \ } \ RSDocumentMetadata *dmd = chain->first; \ while (dmd) { \ code; \ dmd = dmd->next; \ } \ } /* Creates a new DocTable with a given capacity */ DocTable NewDocTable(size_t cap, size_t max_size); #define DocTable_New(cap) NewDocTable(cap, RSGlobalConfig.maxDocTableSize) /* Get the metadata for a doc Id from the DocTable. * If docId is not inside the table, we return NULL */ RSDocumentMetadata *DocTable_Get(const DocTable *t, t_docId docId); RSDocumentMetadata *DocTable_GetByKeyR(const DocTable *r, RedisModuleString *s); /* Put a new document into the table, assign it an incremental id and store the metadata in the * table. * * NOTE: Currently there is no deduplication on the table so we do not prevent dual insertion of the * same key. This may result in document duplication in results */ t_docId DocTable_Put(DocTable *t, RSDocumentKey key, double score, u_char flags, const char *payload, size_t payloadSize); /* Get the "real" external key for an incremental i * If the document ID is not in the table, the returned key's `str` member will * be NULL */ RSDocumentKey DocTable_GetKey(DocTable *t, t_docId docId); /* Get the score for a document from the table. Returns 0 if docId is not in the table. */ float DocTable_GetScore(DocTable *t, t_docId docId); /* Set the payload for a document. Returns 1 if we set the payload, 0 if we couldn't find the * document */ int DocTable_SetPayload(DocTable *t, t_docId docId, const char *data, size_t len); /* * return true iff the given dmdChain holds no elements */ int DMDChain_IsEmpty(const DMDChain *dmdChain); int DocTable_Exists(const DocTable *t, t_docId docId); /* Set the sorting vector for a document. If the vector is NULL we mark the doc as not having a * vector. Returns 1 on success, 0 if the document does not exist. No further validation is done */ int DocTable_SetSortingVector(DocTable *t, t_docId docId, RSSortingVector *v); /* Set the offset vector for a document. This contains the byte offsets of each token found in * the document. This is used for highlighting */ int DocTable_SetByteOffsets(DocTable *t, t_docId docId, RSByteOffsets *offsets); /* Get the payload for a document, if any was set. If no payload has been set or the document id is * not found, we return NULL */ RSPayload *DocTable_GetPayload(DocTable *t, t_docId dodcId); /** Get the docId of a key if it exists in the table, or 0 if it doesnt */ t_docId DocTable_GetId(const DocTable *dt, RSDocumentKey key); /* Free the table and all the keys of documents */ void DocTable_Free(DocTable *t); int DocTable_Delete(DocTable *t, RSDocumentKey key); RSDocumentMetadata *DocTable_Pop(DocTable *t, RSDocumentKey key); static inline RSDocumentMetadata *DocTable_GetByKey(DocTable *dt, const char *key) { t_docId id = DocTable_GetId(dt, (RSDocumentKey){.str = key, .len = strlen(key)}); if (id == 0) { return NULL; } return DocTable_Get(dt, id); } /* don't use this function directly. Use DMD_Decref */ void DMD_Free(RSDocumentMetadata *); /* Decrement the refcount of the DMD object, freeing it if we're the last reference */ static inline void DMD_Decref(RSDocumentMetadata *dmd) { if (dmd && !--dmd->ref_count) { DMD_Free(dmd); } } /* Save the table to RDB. Called from the owning index */ void DocTable_RdbSave(DocTable *t, RedisModuleIO *rdb); /* Load the table from RDB */ void DocTable_RdbLoad(DocTable *t, RedisModuleIO *rdb, int encver); #endif RediSearch-1.2.2/src/document.c000066400000000000000000000506561364126773500163300ustar00rootroot00000000000000#include #include #include "document.h" #include "forward_index.h" #include "numeric_filter.h" #include "numeric_index.h" #include "rmutil/strings.h" #include "rmutil/util.h" #include "util/mempool.h" #include "spec.h" #include "tokenize.h" #include "util/logging.h" #include "search_request.h" #include "rmalloc.h" #include "indexer.h" #include "tag_index.h" #include "aggregate/expr/expression.h" // Memory pool for RSAddDocumentContext contexts static mempool_t *actxPool_g = NULL; // For documentation, see these functions' definitions static void *allocDocumentContext(void) { // See if there's one in the pool? RSAddDocumentCtx *aCtx = calloc(1, sizeof(*aCtx)); return aCtx; } static void freeDocumentContext(void *p) { RSAddDocumentCtx *aCtx = p; if (aCtx->fwIdx) { ForwardIndexFree(aCtx->fwIdx); } free(aCtx->fspecs); free(aCtx->fdatas); free(aCtx); } #define DUP_FIELD_ERRSTR "Requested to index field twice" static int AddDocumentCtx_SetDocument(RSAddDocumentCtx *aCtx, IndexSpec *sp, Document *base, size_t oldFieldCount) { aCtx->doc = *base; Document *doc = &aCtx->doc; if (oldFieldCount < doc->numFields) { // Pre-allocate the field specs aCtx->fspecs = realloc(aCtx->fspecs, sizeof(*aCtx->fspecs) * doc->numFields); aCtx->fdatas = realloc(aCtx->fdatas, sizeof(*aCtx->fdatas) * doc->numFields); } size_t numIndexable = 0; // size: uint16_t * SPEC_MAX_FIELDS FieldSpecDedupeArray dedupe = {0}; int hasTextFields = 0; int hasOtherFields = 0; for (int i = 0; i < doc->numFields; i++) { const DocumentField *f = doc->fields + i; FieldSpec *fs = IndexSpec_GetField(sp, f->name, strlen(f->name)); if (fs && f->text) { aCtx->fspecs[i] = *fs; if (dedupe[fs->index]) { aCtx->errorString = DUP_FIELD_ERRSTR; return -1; } dedupe[fs->index] = 1; if (FieldSpec_IsSortable(fs)) { // mark sortable fields to be updated in the state flags aCtx->stateFlags |= ACTX_F_SORTABLES; } if (FieldSpec_IsIndexable(fs)) { if (fs->type == FIELD_FULLTEXT) { numIndexable++; hasTextFields = 1; } else { hasOtherFields = 1; } } } else { // Field is not in schema, or is duplicate aCtx->fspecs[i].name = NULL; } } if (hasTextFields || hasOtherFields) { aCtx->stateFlags |= ACTX_F_INDEXABLES; } if (!hasTextFields) { aCtx->stateFlags |= ACTX_F_TEXTINDEXED; } if (!hasOtherFields) { aCtx->stateFlags |= ACTX_F_OTHERINDEXED; } if ((aCtx->stateFlags & ACTX_F_SORTABLES) && aCtx->sv == NULL) { aCtx->sv = NewSortingVector(sp->sortables->len); } if ((aCtx->options & DOCUMENT_ADD_NOSAVE) == 0 && numIndexable && (sp->flags & Index_StoreByteOffsets)) { if (!aCtx->byteOffsets) { aCtx->byteOffsets = NewByteOffsets(); ByteOffsetWriter_Init(&aCtx->offsetsWriter); } RSByteOffsets_ReserveFields(aCtx->byteOffsets, numIndexable); } return 0; } RSAddDocumentCtx *NewAddDocumentCtx(IndexSpec *sp, Document *b, const char **err) { if (!actxPool_g) { actxPool_g = mempool_new(16, allocDocumentContext, freeDocumentContext); } // Get a new context RSAddDocumentCtx *aCtx = mempool_get(actxPool_g); aCtx->stateFlags = 0; aCtx->errorString = NULL; aCtx->totalTokens = 0; aCtx->client.bc = NULL; aCtx->next = NULL; aCtx->specFlags = sp->flags; aCtx->indexer = GetDocumentIndexer(sp->name); // Assign the document: if (AddDocumentCtx_SetDocument(aCtx, sp, b, aCtx->doc.numFields) != 0) { *err = aCtx->errorString; mempool_release(actxPool_g, aCtx); return NULL; } // try to reuse the forward index on recycled contexts if (aCtx->fwIdx) { ForwardIndex_Reset(aCtx->fwIdx, &aCtx->doc, sp->flags); } else { aCtx->fwIdx = NewForwardIndex(&aCtx->doc, sp->flags); } if (sp->smap) { // we get a read only copy of the synonym map for accessing in the index thread with out worring // about thready safe issues aCtx->fwIdx->smap = SynonymMap_GetReadOnlyCopy(sp->smap); } else { aCtx->fwIdx->smap = NULL; } aCtx->tokenizer = GetTokenizer(b->language, aCtx->fwIdx->stemmer, sp->stopwords); StopWordList_Ref(sp->stopwords); aCtx->doc.docId = 0; return aCtx; } static void doReplyFinish(RSAddDocumentCtx *aCtx, RedisModuleCtx *ctx) { if (aCtx->errorString) { RedisModule_ReplyWithError(ctx, aCtx->errorString); } else { RedisModule_ReplyWithSimpleString(ctx, "OK"); } AddDocumentCtx_Free(aCtx); } static int replyCallback(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RSAddDocumentCtx *aCtx = RedisModule_GetBlockedClientPrivateData(ctx); doReplyFinish(aCtx, ctx); return REDISMODULE_OK; } static void threadCallback(void *p) { Document_AddToIndexes(p); } void AddDocumentCtx_Finish(RSAddDocumentCtx *aCtx) { if (aCtx->stateFlags & ACTX_F_NOBLOCK) { doReplyFinish(aCtx, aCtx->client.sctx->redisCtx); } else { RedisModule_UnblockClient(aCtx->client.bc, aCtx); } } // How many bytes in a document to warrant it being tokenized in a separate thread #define SELF_EXEC_THRESHOLD 1024 void Document_Dump(const Document *doc) { printf("Document Key: %s. ID=%llu\n", RedisModule_StringPtrLen(doc->docKey, NULL), (unsigned long long)doc->docId); for (size_t ii = 0; ii < doc->numFields; ++ii) { printf(" [%lu]: %s => %s\n", ii, doc->fields[ii].name, RedisModule_StringPtrLen(doc->fields[ii].text, NULL)); } } static void AddDocumentCtx_UpdateNoIndex(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx); static int AddDocumentCtx_ReplaceMerge(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx) { /** * The REPLACE operation contains fields which must be reindexed. This means * that a new document ID needs to be assigned, and as a consequence, all * fields must be reindexed. */ // Free the old field data size_t oldFieldCount = aCtx->doc.numFields; Document_ClearDetachedFields(&aCtx->doc, sctx->redisCtx); // Get a list of fields needed to be loaded for reindexing const char **toLoad = array_new(const char *, 8); for (size_t ii = 0; ii < sctx->spec->numFields; ++ii) { // TODO: We should only need to reload fields that are actually being reindexed! toLoad = array_append(toLoad, sctx->spec->fields[ii].name); } // for (size_t ii = 0; ii < array_len(toLoad); ++ii) { // printf("Loading: %s\n", toLoad[ii]); // } int rv = Redis_LoadDocumentEx(sctx, aCtx->doc.docKey, toLoad, array_len(toLoad), &aCtx->doc, NULL); // int rv = Redis_LoadDocument(sctx, aCtx->doc.docKey, &aCtx->doc); array_free(toLoad); if (rv != REDISMODULE_OK) { RedisModule_ReplyWithError(sctx->redisCtx, "Error updating document"); AddDocumentCtx_Free(aCtx); return 1; } // Keep hold of the new fields. Document_DetachFields(&aCtx->doc, sctx->redisCtx); AddDocumentCtx_SetDocument(aCtx, sctx->spec, &aCtx->doc, oldFieldCount); return 0; } static int handlePartialUpdate(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx) { // Handle partial update of fields if (aCtx->stateFlags & ACTX_F_INDEXABLES) { return AddDocumentCtx_ReplaceMerge(aCtx, sctx); } else { // No indexable fields are updated, we can just update the metadata. // Quick update just updates the score, payload and sortable fields of the document. // Thus full-reindexing of the document is not required AddDocumentCtx_UpdateNoIndex(aCtx, sctx); return 1; } } void AddDocumentCtx_Submit(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx, uint32_t options) { aCtx->options = options; if ((aCtx->options & DOCUMENT_ADD_PARTIAL) && handlePartialUpdate(aCtx, sctx)) { return; } if (AddDocumentCtx_IsBlockable(aCtx)) { aCtx->client.bc = RedisModule_BlockClient(sctx->redisCtx, replyCallback, NULL, NULL, 0); } else { aCtx->client.sctx = sctx; } assert(aCtx->client.bc); size_t totalSize = 0; for (size_t ii = 0; ii < aCtx->doc.numFields; ++ii) { const FieldSpec *fs = aCtx->fspecs + ii; if (fs->name && (fs->type == FIELD_FULLTEXT || fs->type == FIELD_TAG)) { size_t n; RedisModule_StringPtrLen(aCtx->doc.fields[ii].text, &n); totalSize += n; } } if (totalSize >= SELF_EXEC_THRESHOLD && AddDocumentCtx_IsBlockable(aCtx)) { ConcurrentSearch_ThreadPoolRun(threadCallback, aCtx, CONCURRENT_POOL_INDEX); } else { Document_AddToIndexes(aCtx); } } void AddDocumentCtx_Free(RSAddDocumentCtx *aCtx) { // Destroy the common fields: Document_FreeDetached(&aCtx->doc, aCtx->indexer->redisCtx); if (aCtx->sv) { SortingVector_Free(aCtx->sv); aCtx->sv = NULL; } if (aCtx->byteOffsets) { RSByteOffsets_Free(aCtx->byteOffsets); aCtx->byteOffsets = NULL; } if (aCtx->tokenizer) { // aCtx->tokenizer->Free(aCtx->tokenizer); Tokenizer_Release(aCtx->tokenizer); aCtx->tokenizer = NULL; } if (aCtx->oldMd) { DMD_Decref(aCtx->oldMd); aCtx->oldMd = NULL; } ByteOffsetWriter_Cleanup(&aCtx->offsetsWriter); mempool_release(actxPool_g, aCtx); } #define FIELD_HANDLER(name) \ static int name(RSAddDocumentCtx *aCtx, const DocumentField *field, const FieldSpec *fs, \ fieldData *fdata, const char **errorString) #define FIELD_BULK_INDEXER(name) \ static int name(IndexBulkData *bulk, RSAddDocumentCtx *aCtx, RedisSearchCtx *ctx, \ DocumentField *field, const FieldSpec *fs, fieldData *fdata, \ const char **errorString) #define FIELD_BULK_CTOR(name) \ static void name(IndexBulkData *bulk, const FieldSpec *fs, RedisSearchCtx *ctx) #define FIELD_BULK_FINALIZER(name) static void name(IndexBulkData *bulk, RedisSearchCtx *ctx) #define FIELD_PREPROCESSOR FIELD_HANDLER FIELD_PREPROCESSOR(fulltextPreprocessor) { size_t fl; const char *c = RedisModule_StringPtrLen(field->text, &fl); if (FieldSpec_IsSortable(fs)) { RSSortingVector_Put(aCtx->sv, fs->sortIdx, (void *)c, RS_SORTABLE_STR); } if (FieldSpec_IsIndexable(fs)) { Stemmer *stemmer = FieldSpec_IsNoStem(fs) ? NULL : aCtx->fwIdx->stemmer; ForwardIndexTokenizerCtx tokCtx; VarintVectorWriter *curOffsetWriter = NULL; RSByteOffsetField *curOffsetField = NULL; if (aCtx->byteOffsets) { curOffsetField = RSByteOffsets_AddField(aCtx->byteOffsets, fs->textOpts.id, aCtx->totalTokens + 1); curOffsetWriter = &aCtx->offsetsWriter; } ForwardIndexTokenizerCtx_Init(&tokCtx, aCtx->fwIdx, c, curOffsetWriter, fs->textOpts.id, fs->textOpts.weight); aCtx->tokenizer->Start(aCtx->tokenizer, (char *)c, fl, FieldSpec_IsNoStem(fs) ? TOKENIZE_NOSTEM : TOKENIZE_DEFAULT_OPTIONS); Token tok; uint32_t lastTokPos = 0; uint32_t newTokPos; while (0 != (newTokPos = aCtx->tokenizer->Next(aCtx->tokenizer, &tok))) { forwardIndexTokenFunc(&tokCtx, &tok); lastTokPos = newTokPos; } if (curOffsetField) { curOffsetField->lastTokPos = lastTokPos; } aCtx->totalTokens = lastTokPos; } return 0; } FIELD_PREPROCESSOR(numericPreprocessor) { if (RedisModule_StringToDouble(field->text, &fdata->numeric) == REDISMODULE_ERR) { *errorString = "Could not parse numeric index value"; return -1; } // If this is a sortable numeric value - copy the value to the sorting vector if (FieldSpec_IsSortable(fs)) { RSSortingVector_Put(aCtx->sv, fs->sortIdx, &fdata->numeric, RS_SORTABLE_NUM); } return 0; } FIELD_BULK_INDEXER(numericIndexer) { NumericRangeTree *rt = bulk->indexData; // NumericRangeTree *rt = OpenNumericIndex(ctx, fs->name, &idxKey); NumericRangeTree_Add(rt, aCtx->doc.docId, fdata->numeric); // RedisModule_CloseKey(idxKey); return 0; } FIELD_BULK_CTOR(numericCtor) { RedisModuleString *keyName = IndexSpec_GetFormattedKey(ctx->spec, fs); bulk->indexData = OpenNumericIndex(ctx, keyName, &bulk->indexKey); } FIELD_PREPROCESSOR(geoPreprocessor) { const char *c = RedisModule_StringPtrLen(field->text, NULL); char *pos = strpbrk(c, " ,"); if (!pos) { *errorString = "Invalid lon/lat format. Use \"lon lat\" or \"lon,lat\""; return -1; } *pos = '\0'; pos++; fdata->geo.slon = (char *)c; fdata->geo.slat = (char *)pos; return 0; } FIELD_BULK_INDEXER(geoIndexer) { GeoIndex gi = {.ctx = ctx, .sp = fs}; int rv = GeoIndex_AddStrings(&gi, aCtx->doc.docId, fdata->geo.slon, fdata->geo.slat); if (rv == REDISMODULE_ERR) { *errorString = "Could not index geo value"; return -1; } return 0; } FIELD_PREPROCESSOR(tagPreprocessor) { fdata->tags = TagIndex_Preprocess(&fs->tagOpts, field); if (fdata->tags == NULL) { return 0; } if (FieldSpec_IsSortable(fs)) { size_t fl; const char *c = RedisModule_StringPtrLen(field->text, &fl); RSSortingVector_Put(aCtx->sv, fs->sortIdx, (void *)c, RS_SORTABLE_STR); } return 0; } FIELD_BULK_CTOR(tagCtor) { RedisModuleString *kname = IndexSpec_GetFormattedKey(ctx->spec, fs); bulk->indexData = TagIndex_Open(ctx->redisCtx, kname, 1, &bulk->indexKey); } FIELD_BULK_INDEXER(tagIndexer) { int rc = 0; if (!bulk->indexData) { *errorString = "Could not open tag index for indexing"; rc = -1; } else { TagIndex_Index(bulk->indexData, fdata->tags, aCtx->doc.docId); } if (fdata->tags) { TagIndex_FreePreprocessedData(fdata->tags); } return rc; } PreprocessorFunc GetIndexPreprocessor(const FieldType ft) { switch (ft) { case FIELD_FULLTEXT: return fulltextPreprocessor; case FIELD_NUMERIC: return numericPreprocessor; case FIELD_GEO: return geoPreprocessor; case FIELD_TAG: return tagPreprocessor; default: return NULL; } } static BulkIndexer geoBulkProcs = {.BulkAdd = geoIndexer}; static BulkIndexer numBulkProcs = {.BulkInit = numericCtor, .BulkAdd = numericIndexer}; static BulkIndexer tagBulkProcs = {.BulkInit = tagCtor, .BulkAdd = tagIndexer}; const BulkIndexer *GetBulkIndexer(const FieldType ft) { switch (ft) { case FIELD_NUMERIC: return &numBulkProcs; case FIELD_TAG: return &tagBulkProcs; case FIELD_GEO: return &geoBulkProcs; default: abort(); return NULL; } } int Document_AddToIndexes(RSAddDocumentCtx *aCtx) { Document *doc = &aCtx->doc; int ourRv = REDISMODULE_OK; for (int i = 0; i < doc->numFields; i++) { const FieldSpec *fs = aCtx->fspecs + i; fieldData *fdata = aCtx->fdatas + i; if (fs->name == NULL) { LG_DEBUG("Skipping field %s not in index!", doc->fields[i].name); continue; } // Get handler PreprocessorFunc pp = GetIndexPreprocessor(fs->type); if (pp == NULL) { continue; } if (pp(aCtx, &doc->fields[i], fs, fdata, &aCtx->errorString) != 0) { ourRv = REDISMODULE_ERR; goto cleanup; } } if (Indexer_Add(aCtx->indexer, aCtx) != 0) { ourRv = REDISMODULE_ERR; goto cleanup; } cleanup: if (ourRv != REDISMODULE_OK) { if (aCtx->errorString == NULL) { aCtx->errorString = "ERR couldn't index document"; } AddDocumentCtx_Finish(aCtx); } return ourRv; } /* Evaluate an IF expression (e.g. IF "@foo == 'bar'") against a document, by getting the properties * from the sorting table or from the hash representation of the document. * * NOTE: This is disconnected from the document indexing flow, and loads the document and discards * of it internally * * Returns REDISMODULE_ERR on failure, OK otherwise*/ int Document_EvalExpression(RedisSearchCtx *sctx, RedisModuleString *key, const char *expr, int *result, char **err) { // Try to parser the expression first, fail if we can't RSExpr *e = RSExpr_Parse(expr, strlen(expr), err); if (!e) { return REDISMODULE_ERR; } // Get the fields needed to evaluate the expression, so we'll know what to load (if any) const char **fields = Expr_GetRequiredFields(e); Document doc = {.docKey = key}; // Get the metadata, which should include sortables RSDocumentMetadata *md = DocTable_GetByKeyR(&sctx->spec->docs, doc.docKey); // Make sure the field list only includes fields which are not already in the sorting vector size_t loadFields = 0; if (md && md->sortVector) { // If a field is in the sorting vector, we simply skip it. n is the total fields not in the // sorting vector for (size_t i = 0; i < array_len(fields); i++) { if (RSSortingTable_GetFieldIdx(sctx->spec->sortables, fields[i]) == -1) { fields[loadFields++] = fields[i]; } } } else { // If we don't have a sorting vector - we need to load all the fields. loadFields = array_len(fields); } // loadFields > 0 means that some fields needed are not sortable and should be loaded from hash if (loadFields > 0) { if (Redis_LoadDocumentEx(sctx, key, fields, loadFields, &doc, NULL) == REDISMODULE_ERR) { SET_ERR(err, "Could not load document"); array_free(fields); return REDISMODULE_ERR; } } // Create a field map from the document fields RSFieldMap *fm = RS_NewFieldMap(doc.numFields); for (int i = 0; i < doc.numFields; i++) { RSFieldMap_Add(&fm, doc.fields[i].name, RS_RedisStringVal(doc.fields[i].text)); } // create a mock search result SearchResult res = (SearchResult){ .docId = doc.docId, .fields = fm, .scorerPrivateData = md, }; // All this is needed to eval the expression RSFunctionEvalCtx *fctx = RS_NewFunctionEvalCtx(); fctx->res = &res; RSExprEvalCtx evctx = (RSExprEvalCtx){ .r = &res, .sortables = sctx ? (sctx->spec ? sctx->spec->sortables : NULL) : NULL, .fctx = fctx, }; RSValue out = RSVALUE_STATIC; int rc = REDISMODULE_OK; // Now actually eval the expression if (EXPR_EVAL_ERR == RSExpr_Eval(&evctx, e, &out, err)) { rc = REDISMODULE_ERR; } else { // The result is the boolean value of the expression's output *result = RSValue_BoolTest(&out); } // Cleanup array_free(fields); RSFunctionEvalCtx_Free(fctx); RSFieldMap_Free(fm); RSExpr_Free(e); Document_Free(&doc); return rc; } static void AddDocumentCtx_UpdateNoIndex(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx) { #define BAIL(s) \ do { \ aCtx->errorString = s; \ goto done; \ } while (0); Document *doc = &aCtx->doc; t_docId docId = DocTable_GetId(&sctx->spec->docs, MakeDocKeyR(doc->docKey)); if (docId == 0) { BAIL("Couldn't load old document"); } RSDocumentMetadata *md = DocTable_Get(&sctx->spec->docs, docId); if (!md) { BAIL("Couldn't load document metadata"); } // Update the score md->score = doc->score; // Set the payload if needed if (doc->payload) { DocTable_SetPayload(&sctx->spec->docs, docId, doc->payload, doc->payloadSize); } if (aCtx->stateFlags & ACTX_F_SORTABLES) { FieldSpecDedupeArray dedupes = {0}; // Update sortables if needed for (int i = 0; i < doc->numFields; i++) { DocumentField *f = &doc->fields[i]; FieldSpec *fs = IndexSpec_GetField(sctx->spec, f->name, strlen(f->name)); if (fs == NULL || !FieldSpec_IsSortable(fs)) { continue; } if (dedupes[fs->index]) { BAIL(DUP_FIELD_ERRSTR); } dedupes[fs->index] = 1; int idx = IndexSpec_GetFieldSortingIndex(sctx->spec, f->name, strlen(f->name)); if (idx < 0) continue; if (!md->sortVector) { md->sortVector = NewSortingVector(sctx->spec->sortables->len); } switch (fs->type) { case FIELD_FULLTEXT: RSSortingVector_Put(md->sortVector, idx, (void *)RedisModule_StringPtrLen(f->text, NULL), RS_SORTABLE_STR); break; case FIELD_NUMERIC: { double numval; if (RedisModule_StringToDouble(f->text, &numval) == REDISMODULE_ERR) { BAIL("Could not parse numeric index value"); } RSSortingVector_Put(md->sortVector, idx, &numval, RS_SORTABLE_NUM); break; } default: BAIL("Unsupported sortable type"); break; } } } done: if (aCtx->errorString) { RedisModule_ReplyWithError(sctx->redisCtx, aCtx->errorString); } else { RedisModule_ReplyWithSimpleString(sctx->redisCtx, "OK"); } AddDocumentCtx_Free(aCtx); } DocumentField *Document_GetField(Document *d, const char *fieldName) { if (!d || !fieldName) return NULL; for (int i = 0; i < d->numFields; i++) { if (!strcasecmp(d->fields[i].name, fieldName)) { return &d->fields[i]; } } return NULL; } RediSearch-1.2.2/src/document.h000066400000000000000000000226551364126773500163330ustar00rootroot00000000000000#ifndef __RS_DOCUMENT_H__ #define __RS_DOCUMENT_H__ #include #include "redismodule.h" #include "search_ctx.h" #include "redisearch.h" #include "tokenize.h" #include "concurrent_ctx.h" #include "byte_offsets.h" //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// General Architecture /// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /** * To index a document, call Document_PrepareForAdd on the document itself. * This initializes the Document structure for indexing purposes. Once the * document has been prepared, acquire a new RSAddDocumentCtx() by calling * NewAddDocumentCtx(). * * Once the new context has been received, call Document_AddToIndexes(). This * will start tokenizing the documents, and should be called in a separate * thread. This function will tokenize the document and send a reply back to * the client. You may free the RSAddDocumentCtx structure by calling * AddDocumentCtx_Free(). * * See document.c for the internals. */ typedef struct { const char *name; RedisModuleString *text; } DocumentField; typedef struct { RedisModuleString *docKey; DocumentField *fields; int numFields; float score; const char *language; t_docId docId; const char *payload; size_t payloadSize; int stringOwner; } Document; /** * Initialize document structure with the relevant fields. numFields will allocate * the fields array, but you must still actually copy the data along. * * Note that this function assumes that the pointers passed in will remain valid * throughout the lifetime of the document. If you need to make independent copies * of the data within the document, call Document_Detach on the document (after * calling this function). */ void Document_Init(Document *doc, RedisModuleString *docKey, double score, int numFields, const char *lang, const char *payload, size_t payloadSize); /** * Prepare a document for being added to NewAddDocumentCtx. * This calls Document_Init and Document_Detach, and aims to eliminate * common boilerplate when parsing arguments * * doc: The document to initialize * docKey: The string ID of the document * score: Document store * argv: The argv as passed to the command's entry point * fieldsOffset: The index at which the first field name is present * argc: The total length of argv * language: Language to use. DEFAULT_LANGUAGE will be used if this is NULL * payload: Optional payload * ctx: Owning context, used for Detach() * */ void Document_PrepareForAdd(Document *doc, RedisModuleString *docKey, double score, RedisModuleString **argv, size_t fieldsOffset, size_t argc, const char *language, RedisModuleString *payload, RedisModuleCtx *ctx); /** * Copy any data from the document into its own independent copies. srcCtx is * the context owning any RedisModuleString items - which are assigned using * RedisModule_RetainString. * * If the document contains fields, the field data is also retained. */ void Document_Detach(Document *doc, RedisModuleCtx *srcCtx); /** * These two functions are used to manipulate the internal field data within a * document _without_ additional allocations. ClearDetachedFields() will * clear the document's field count to 0, whereas DetachFields will detach * the newly loaded field data (via Redis_LoadDocument). */ void Document_ClearDetachedFields(Document *doc, RedisModuleCtx *anyCtx); void Document_DetachFields(Document *doc, RedisModuleCtx *ctx); /** * Print contents of document to screen */ void Document_Dump(const Document *doc); /** * Free any copied data within the document. anyCtx is any non-NULL * RedisModuleCtx. The reason for requiring a context is more related to the * Redis Module API requiring a context for AutoMemory purposes, though in * this case, the pointers are already removed from AutoMemory manangement * anyway. * * This function also calls Document_Free */ void Document_FreeDetached(Document *doc, RedisModuleCtx *anyCtx); /** * Free the document's internals (like the field array). */ void Document_Free(Document *doc); #define DOCUMENT_ADD_REPLACE 0x01 #define DOCUMENT_ADD_PARTIAL 0x02 #define DOCUMENT_ADD_NOSAVE 0x04 struct ForwardIndex; union FieldData; // The context has had its forward entries merged in the merge table. We can // skip merging its tokens #define ACTX_F_TEXTINDEXED 0x01 // The context has had an error and should not be processed further #define ACTX_F_ERRORED 0x02 // Non-text fields have been indexed. #define ACTX_F_OTHERINDEXED 0x04 // The content has indexable fields #define ACTX_F_INDEXABLES 0x08 // The content has sortable fields #define ACTX_F_SORTABLES 0x10 // Don't block/unblock the client when indexing. This is the case when the // operation is being done from within the context of AOF #define ACTX_F_NOBLOCK 0x20 struct DocumentIndexer; /** * Context used when indexing documents. */ typedef struct RSAddDocumentCtx { struct RSAddDocumentCtx *next; // Next context in the queue Document doc; // Document which is being indexed union { RedisModuleBlockedClient *bc; // Client RedisSearchCtx *sctx; } client; // Forward index. This contains all the terms found in the document struct ForwardIndex *fwIdx; struct DocumentIndexer *indexer; // Sorting vector for the document. If the document has sortable fields, they // are added to here as well RSSortingVector *sv; // Byte offsets for highlighting. If term offsets are stored, this contains // the field byte offset for each term. RSByteOffsets *byteOffsets; ByteOffsetWriter offsetsWriter; // Information about each field in the document. This is read from the spec // and cached, so that we can look it up without holding the GIL FieldSpec *fspecs; RSTokenizer *tokenizer; // Old document data. Contains sortables RSDocumentMetadata *oldMd; // Scratch space used by per-type field preprocessors (see the source) union FieldData *fdatas; const char *errorString; // Error message is placed here if there is an error during processing uint32_t totalTokens; // Number of tokens, used for offset vector uint32_t specFlags; // Cached index flags uint8_t options; // Indexing options - i.e. DOCUMENT_ADD_xxx uint8_t stateFlags; // Indexing state, ACTX_F_xxx } RSAddDocumentCtx; #define AddDocumentCtx_IsBlockable(aCtx) (!((aCtx)->stateFlags & ACTX_F_NOBLOCK)) /** * Creates a new context used for adding documents. Once created, call * Document_AddToIndexes on it. * * - client is a blocked client which will be used as the context for this * operation. * - sp is the index that this document will be added to * - base is the document to be index. The context will take ownership of the * document's contents (but not the structure itself). Thus, you should not * call Document_Free on the document after a successful return of this * function. * * When done, call AddDocumentCtx_Free */ RSAddDocumentCtx *NewAddDocumentCtx(IndexSpec *sp, Document *base, const char **err); /** * At this point the context will take over from the caller, and handle sending * the replies and so on. */ void AddDocumentCtx_Submit(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx, uint32_t options); /** * Indicate that processing is finished on the current document */ void AddDocumentCtx_Finish(RSAddDocumentCtx *aCtx); /** * This function will tokenize the document and add the resultant tokens to * the relevant inverted indexes. This function should be called from a * worker thread (see ConcurrentSearch functions). * * * When this function completes, it will send the reply to the client and * unblock the client passed when the context was first created. */ int Document_AddToIndexes(RSAddDocumentCtx *ctx); /** * Free the AddDocumentCtx. Should be done once AddToIndexes() completes; or * when the client is unblocked. */ void AddDocumentCtx_Free(RSAddDocumentCtx *aCtx); /* Load a single document */ int Redis_LoadDocument(RedisSearchCtx *ctx, RedisModuleString *key, Document *Doc); /* Evaluate an IF expression (e.g. IF "@foo == 'bar'") against a document, by getting the properties * from the sorting table or from the hash representation of the document. * * NOTE: This is disconnected from the document indexing flow, and loads the document and discards * of it internally * * Returns REDISMODULE_ERR on failure, OK otherwise*/ int Document_EvalExpression(RedisSearchCtx *sctx, RedisModuleString *key, const char *expr, int *result, char **err); /** * Load a single document fields is an array of fields to load from a document. * keyp is an [out] pointer to a key which may be closed after the document field * is no longer required. Can be NULL */ int Redis_LoadDocumentEx(RedisSearchCtx *ctx, RedisModuleString *key, const char **fields, size_t nfields, Document *doc, RedisModuleKey **keyp); /** * Save a document in the index. Used for returning contents in search results. */ int Redis_SaveDocument(RedisSearchCtx *ctx, Document *doc); /* Serialzie the document's fields to a redis client */ int Document_ReplyFields(RedisModuleCtx *ctx, Document *doc); DocumentField *Document_GetField(Document *d, const char *fieldName); #endifRediSearch-1.2.2/src/document_basic.c000066400000000000000000000071661364126773500174670ustar00rootroot00000000000000#include "document.h" #include "stemmer.h" void Document_Init(Document *doc, RedisModuleString *docKey, double score, int numFields, const char *lang, const char *payload, size_t payloadSize) { doc->docKey = docKey; doc->score = (float)score; doc->numFields = numFields; doc->fields = calloc(doc->numFields, sizeof(DocumentField)); doc->language = lang; doc->payload = payload; doc->payloadSize = payloadSize; } void Document_PrepareForAdd(Document *doc, RedisModuleString *docKey, double score, RedisModuleString **argv, size_t fieldsOffset, size_t argc, const char *language, RedisModuleString *payload, RedisModuleCtx *ctx) { size_t payloadSize = 0; const char *payloadStr = NULL; if (payload) { payloadStr = RedisModule_StringPtrLen(payload, &payloadSize); } Document_Init(doc, docKey, score, (argc - fieldsOffset) / 2, language ? language : DEFAULT_LANGUAGE, payloadStr, payloadSize); int n = 0; for (int i = fieldsOffset + 1; i < argc - 1; i += 2, n++) { // printf ("indexing '%s' => '%s'\n", RedisModule_StringPtrLen(argv[i], // NULL), // RedisModule_StringPtrLen(argv[i+1], NULL)); doc->fields[n].name = RedisModule_StringPtrLen(argv[i], NULL); doc->fields[n].text = RedisModule_CreateStringFromString(ctx, argv[i + 1]); } Document_Detach(doc, ctx); } void Document_DetachFields(Document *doc, RedisModuleCtx *ctx) { for (size_t ii = 0; ii < doc->numFields; ++ii) { DocumentField *f = doc->fields + ii; if (f->text) { RedisModule_RetainString(ctx, f->text); } f->name = strdup(f->name); } } void Document_ClearDetachedFields(Document *doc, RedisModuleCtx *anyCtx) { for (size_t ii = 0; ii < doc->numFields; ++ii) { if (doc->fields[ii].text) { RedisModule_FreeString(anyCtx, doc->fields[ii].text); } free((void *)doc->fields[ii].name); } free(doc->fields); doc->fields = NULL; doc->numFields = 0; } void Document_Detach(Document *doc, RedisModuleCtx *srcCtx) { RedisModule_RetainString(srcCtx, doc->docKey); doc->stringOwner = 1; Document_DetachFields(doc, srcCtx); if (doc->payload) { doc->payload = strndup(doc->payload, doc->payloadSize); } if (doc->language) { doc->language = strdup(doc->language); } } void Document_Free(Document *doc) { free(doc->fields); } void Document_FreeDetached(Document *doc, RedisModuleCtx *anyCtx) { RedisModule_FreeString(anyCtx, doc->docKey); Document_ClearDetachedFields(doc, anyCtx); free((char *)doc->payload); free((char *)doc->language); Document_Free(doc); } int Redis_SaveDocument(RedisSearchCtx *ctx, Document *doc) { RedisModuleKey *k = RedisModule_OpenKey(ctx->redisCtx, doc->docKey, REDISMODULE_WRITE | REDISMODULE_READ); if (k == NULL || (RedisModule_KeyType(k) != REDISMODULE_KEYTYPE_EMPTY && RedisModule_KeyType(k) != REDISMODULE_KEYTYPE_HASH)) { return REDISMODULE_ERR; } for (int i = 0; i < doc->numFields; i++) { RedisModule_HashSet(k, REDISMODULE_HASH_CFIELDS, doc->fields[i].name, doc->fields[i].text, NULL); } return REDISMODULE_OK; } int Document_ReplyFields(RedisModuleCtx *ctx, Document *doc) { if (!doc) { return REDISMODULE_ERR; } RedisModule_ReplyWithArray(ctx, doc->numFields * 2); for (size_t j = 0; j < doc->numFields; ++j) { RedisModule_ReplyWithStringBuffer(ctx, doc->fields[j].name, strlen(doc->fields[j].name)); if (doc->fields[j].text) { RedisModule_ReplyWithString(ctx, doc->fields[j].text); } else { RedisModule_ReplyWithNull(ctx); } } return REDISMODULE_OK; }RediSearch-1.2.2/src/err.h000066400000000000000000000006751364126773500153030ustar00rootroot00000000000000#ifndef RS_ERR_H_ #define RS_ERR_H_ #include #define FMT_ERR(e, fmt, ...) \ ({ \ asprintf(e, fmt, __VA_ARGS__); \ NULL; \ }) #define SET_ERR(e, msg) \ ({ \ if (e && !*e) *e = strdup(msg); \ NULL; \ }) #define ERR_FREE(e) \ if (e) { \ free(e); \ } #endifRediSearch-1.2.2/src/ext/000077500000000000000000000000001364126773500151325ustar00rootroot00000000000000RediSearch-1.2.2/src/ext/Makefile000066400000000000000000000001241364126773500165670ustar00rootroot00000000000000CFLAGS ?= -g -fPIC -lc -lm -O2 -std=gnu99 .SUFFIXES: .c .so .xo .o all: default.o RediSearch-1.2.2/src/ext/default.c000066400000000000000000000327261364126773500167340ustar00rootroot00000000000000#include #include #include #include "../redisearch.h" #include "../spec.h" #include "../query.h" #include "../synonym_map.h" #include "../dep/snowball/include/libstemmer.h" #include "default.h" #include "../tokenize.h" #include "../rmutil/vector.h" #include "../stemmer.h" /****************************************************************************************** * * TF-IDF Scoring Functions * * We have 2 TF-IDF scorers - one where TF is normalized by max frequency, the other where it is * normalized by total weighted number of terms in the document * ******************************************************************************************/ // normalize TF by max frequency #define NORM_MAXFREQ 1 // normalize TF by number of tokens (weighted) #define NORM_DOCLEN 2 // recursively calculate tf-idf double tfidfRecursive(RSIndexResult *r, RSDocumentMetadata *dmd) { if (r->type == RSResultType_Term) { return r->weight * ((double)r->freq) * (r->term.term ? r->term.term->idf : 0); } if (r->type & (RSResultType_Intersection | RSResultType_Union)) { double ret = 0; for (int i = 0; i < r->agg.numChildren; i++) { ret += tfidfRecursive(r->agg.children[i], dmd); } return r->weight * ret; } return r->weight * (double)r->freq; } /* internal common tf-idf function, where just the normalization method changes */ static inline double tfIdfInternal(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore, int normMode) { if (dmd->score == 0) return 0; double norm = normMode == NORM_MAXFREQ ? (double)dmd->maxFreq : dmd->len; double tfidf = dmd->score * tfidfRecursive(h, dmd) / norm; // no need to factor the distance if tfidf is already below minimal score if (tfidf < minScore) { return 0; } tfidf /= (double)ctx->GetSlop(h); return tfidf; } /* Calculate sum(TF-IDF)*document score for each result, where TF is normalized by maximum frequency * in this document*/ double TFIDFScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { return tfIdfInternal(ctx, h, dmd, minScore, NORM_MAXFREQ); } /* Identical scorer to TFIDFScorer, only the normalization is by total weighted frequency in the doc */ double TFIDFNormDocLenScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { return tfIdfInternal(ctx, h, dmd, minScore, NORM_DOCLEN); } /****************************************************************************************** * * BM25 Scoring Functions * * https://en.wikipedia.org/wiki/Okapi_BM25 * ******************************************************************************************/ /* recursively calculate score for each token, summing up sub tokens */ static double bm25Recursive(RSScoringFunctionCtx *ctx, RSIndexResult *r, RSDocumentMetadata *dmd) { static const float b = 0.5; static const float k1 = 1.2; double f = (double)r->freq; if (r->type == RSResultType_Term) { double idf = (r->term.term ? r->term.term->idf : 0); double ret = idf * f / (f + k1 * (1.0f - b + b * ctx->indexStats.avgDocLen)); return ret; } if (r->type & (RSResultType_Intersection | RSResultType_Union)) { double ret = 0; for (int i = 0; i < r->agg.numChildren; i++) { ret += bm25Recursive(ctx, r->agg.children[i], dmd); } return r->weight * ret; } // default for virtual type -just disregard the idf return r->weight * (r->freq ? f / (f + k1 * (1.0f - b + b * ctx->indexStats.avgDocLen)) : 0); } /* BM25 scoring function */ double BM25Scorer(RSScoringFunctionCtx *ctx, RSIndexResult *r, RSDocumentMetadata *dmd, double minScore) { double score = dmd->score * bm25Recursive(ctx, r, dmd); // no need to factor the distance if tfidf is already below minimal score if (score < minScore) { return 0; } score /= (double)ctx->GetSlop(r); return score; } /****************************************************************************************** * * Raw document-score scorer. Just returns the document score * ******************************************************************************************/ double DocScoreScorer(RSScoringFunctionCtx *ctx, RSIndexResult *r, RSDocumentMetadata *dmd, double minScore) { return dmd->score; } /****************************************************************************************** * * DISMAX-style scorer * ******************************************************************************************/ double _dismaxRecursive(RSIndexResult *r) { // for terms - we return the term frequency double ret = 0; switch (r->type) { case RSResultType_Term: case RSResultType_Numeric: case RSResultType_Virtual: ret = r->freq; break; // for intersections - we sum up the term scores case RSResultType_Intersection: for (int i = 0; i < r->agg.numChildren; i++) { ret += _dismaxRecursive(r->agg.children[i]); } break; // for unions - we take the max frequency case RSResultType_Union: for (int i = 0; i < r->agg.numChildren; i++) { ret = MAX(ret, _dismaxRecursive(r->agg.children[i])); } break; } return r->weight * ret; } /* Calculate sum(TF-IDF)*document score for each result */ double DisMaxScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { // printf("score for %d: %f\n", h->docId, dmd->score); // if (dmd->score == 0 || h == NULL) return 0; return _dismaxRecursive(h); } /* taken from redis - bitops.c */ static const unsigned char bitsinbyte[256] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8}; /* HAMMING - Scorer using Hamming distance between the query payload and the document payload. Only * works if both have the payloads the same length */ double HammingDistanceScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { // the strings must be of the same length > 0 if (!dmd->payload || !dmd->payload->len || dmd->payload->len != ctx->payload.len) { return 0; } size_t ret = 0; size_t len = ctx->payload.len; // if the strings are not aligned to 64 bit - calculate the diff byte by const unsigned char *a = (unsigned char *)ctx->payload.data; const unsigned char *b = (unsigned char *)dmd->payload->data; for (size_t i = 0; i < len; i++) { ret += bitsinbyte[(unsigned char)(a[i] ^ b[i])]; } // we inverse the distance, and add 1 to make sure a distance of 0 yields a perfect score of 1 return 1.0 / (double)(ret + 1); } typedef struct { int isCn; union { struct { RSTokenizer *tokenizer; Vector *tokList; } cn; struct sb_stemmer *latin; } data; } defaultExpanderCtx; static void expandCn(RSQueryExpanderCtx *ctx, RSToken *token) { defaultExpanderCtx *dd = ctx->privdata; RSTokenizer *tokenizer; if (!dd) { dd = ctx->privdata = calloc(1, sizeof(*dd)); dd->isCn = 1; } if (!dd->data.cn.tokenizer) { tokenizer = dd->data.cn.tokenizer = NewChineseTokenizer(NULL, NULL, 0); dd->data.cn.tokList = NewVector(char *, 4); } tokenizer = dd->data.cn.tokenizer; Vector *tokVec = dd->data.cn.tokList; tokVec->top = 0; tokenizer->Start(tokenizer, token->str, token->len, 0); Token tTok; while (tokenizer->Next(tokenizer, &tTok)) { char *s = strndup(tTok.tok, tTok.tokLen); Vector_Push(tokVec, s); } // Now expand the token with a phrase if (tokVec->top > 1) { // for (size_t ii = 0; ii < tokVec->top; ++ii) { // const char *s; // Vector_Get(tokVec, ii, &s); // printf("Split => %s\n", s); // } ctx->ExpandTokenWithPhrase(ctx, (const char **)tokVec->data, tokVec->top, token->flags, 1, 0); } else { for (size_t ii = 0; ii < tokVec->top; ++ii) { // Note, top <= 1; but just for simplicity char *s; Vector_Get(tokVec, ii, &s); free(s); } } } /****************************************************************************************** * * Stemmer based query expander * ******************************************************************************************/ void StemmerExpander(RSQueryExpanderCtx *ctx, RSToken *token) { // printf("Enter: %.*s\n", (int)token->len, token->str); // we store the stemmer as private data on the first call to expand defaultExpanderCtx *dd = ctx->privdata; struct sb_stemmer *sb; if (!ctx->privdata) { if (!strcasecmp(ctx->language, "chinese")) { expandCn(ctx, token); return; } else { dd = ctx->privdata = calloc(1, sizeof(*dd)); dd->isCn = 0; sb = dd->data.latin = sb_stemmer_new(ctx->language, NULL); } } if (dd->isCn) { expandCn(ctx, token); return; } sb = dd->data.latin; // No stemmer available for this language - just return the node so we won't // be called again if (!sb) { return; } const sb_symbol *b = (const sb_symbol *)token->str; const sb_symbol *stemmed = sb_stemmer_stem(sb, b, token->len); if (stemmed) { int sl = sb_stemmer_length(sb); // Make a copy of the stemmed buffer with the + prefix given to stems char *dup = malloc(sl + 2); dup[0] = STEM_PREFIX; memcpy(dup + 1, stemmed, sl + 1); ctx->ExpandToken(ctx, dup, sl + 1, 0x0); // TODO: Set proper flags here if (sl != token->len || strncmp((const char *)stemmed, token->str, token->len)) { ctx->ExpandToken(ctx, strndup((const char *)stemmed, sl), sl, 0x0); } } } void StemmerExpanderFree(void *p) { if (!p) { return; } defaultExpanderCtx *dd = p; if (dd->isCn) { dd->data.cn.tokenizer->Free(dd->data.cn.tokenizer); Vector_Free(dd->data.cn.tokList); } else if (dd->data.latin) { sb_stemmer_delete(dd->data.latin); } free(dd); } /****************************************************************************************** * * Synonyms based query expander * ******************************************************************************************/ void SynonymExpand(RSQueryExpanderCtx *ctx, RSToken *token) { #define BUFF_LEN 100 IndexSpec *spec = ctx->query->sctx->spec; if (!spec->smap) { return; } TermData *t_data = SynonymMap_GetIdsBySynonym(spec->smap, token->str, token->len); if (t_data == NULL) { return; } for (int i = 0; i < array_len(t_data->ids); ++i) { char buff[BUFF_LEN]; int len = SynonymMap_IdToStr(t_data->ids[i], buff, BUFF_LEN); ctx->ExpandToken(ctx, strdup((const char *)buff), len, 0x0); } } void SynonymExpanderFree(void *p) { } /****************************************************************************************** * * Default query expander * ******************************************************************************************/ void DefaultExpander(RSQueryExpanderCtx *ctx, RSToken *token) { StemmerExpander(ctx, token); SynonymExpand(ctx, token); } void DefaultExpanderFree(void *p) { StemmerExpanderFree(p); SynonymExpanderFree(p); } /* Register the default extension */ int DefaultExtensionInit(RSExtensionCtx *ctx) { /* TF-IDF scorer is the default scorer */ if (ctx->RegisterScoringFunction(DEFAULT_SCORER_NAME, TFIDFScorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* DisMax-alike scorer */ if (ctx->RegisterScoringFunction(DISMAX_SCORER_NAME, DisMaxScorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Register BM25 scorer */ if (ctx->RegisterScoringFunction(BM25_SCORER_NAME, BM25Scorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Register HAMMING scorer */ if (ctx->RegisterScoringFunction(HAMMINGDISTANCE_SCORER, HammingDistanceScorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Register TFIDF.DOCNORM */ if (ctx->RegisterScoringFunction(TFIDF_DOCNORM_SCORER_NAME, TFIDFNormDocLenScorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Register DOCSCORE scorer */ if (ctx->RegisterScoringFunction(DOCSCORE_SCORER, DocScoreScorer, NULL, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Snowball Stemmer is the default expander */ if (ctx->RegisterQueryExpander(STEMMER_EXPENDER_NAME, StemmerExpander, StemmerExpanderFree, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Synonyms expender */ if (ctx->RegisterQueryExpander(SYNONYMS_EXPENDER_NAME, SynonymExpand, SynonymExpanderFree, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } /* Synonyms expender */ if (ctx->RegisterQueryExpander(DEFAULT_EXPANDER_NAME, DefaultExpander, DefaultExpanderFree, NULL) == REDISEARCH_ERR) { return REDISEARCH_ERR; } return REDISEARCH_OK; } RediSearch-1.2.2/src/ext/default.h000066400000000000000000000007421364126773500167320ustar00rootroot00000000000000#ifndef __EXT_DEFAULT_H__ #define __EXT_DEFAULT_H__ #include "redisearch.h" #define SYNONYMS_EXPENDER_NAME "SYNONYM" #define STEMMER_EXPENDER_NAME "SBSTEM" #define DEFAULT_EXPANDER_NAME "DEFAULT" #define DEFAULT_SCORER_NAME "TFIDF" #define TFIDF_DOCNORM_SCORER_NAME "TFIDF.DOCNORM" #define DISMAX_SCORER_NAME "DISMAX" #define BM25_SCORER_NAME "BM25" #define DOCSCORE_SCORER "DOCSCORE" #define HAMMINGDISTANCE_SCORER "HAMMING" int DefaultExtensionInit(RSExtensionCtx *ctx); #endifRediSearch-1.2.2/src/extension.c000066400000000000000000000153741364126773500165240ustar00rootroot00000000000000#include #include #include "extension.h" #include "redisearch.h" #include "rmalloc.h" #include "redismodule.h" #include "index_result.h" #include "dep/triemap/triemap.h" #include "query.h" #include /* The registry for query expanders. Initialized by Extensions_Init() */ TrieMap *__queryExpanders = NULL; /* The registry for scorers. Initialized by Extensions_Init() */ TrieMap *__scorers = NULL; /* Init the extension system - currently just create the regsistries */ void Extensions_Init() { __queryExpanders = NewTrieMap(); __scorers = NewTrieMap(); } /* Register a scoring function by its alias. privdata is an optional pointer to a user defined * struct. ff is a free function releasing any resources allocated at the end of query execution */ int Ext_RegisterScoringFunction(const char *alias, RSScoringFunction func, RSFreeFunction ff, void *privdata) { if (func == NULL || __scorers == NULL) { return REDISEARCH_ERR; } ExtScoringFunctionCtx *ctx = rm_new(ExtScoringFunctionCtx); ctx->privdata = privdata; ctx->ff = ff; ctx->sf = func; /* Make sure that two scorers are never registered under the same name */ if (TrieMap_Find(__scorers, (char *)alias, strlen(alias)) != TRIEMAP_NOTFOUND) { rm_free(ctx); return REDISEARCH_ERR; } TrieMap_Add(__scorers, (char *)alias, strlen(alias), ctx, NULL); return REDISEARCH_OK; } /* Register a aquery expander */ int Ext_RegisterQueryExpander(const char *alias, RSQueryTokenExpander exp, RSFreeFunction ff, void *privdata) { if (exp == NULL || __queryExpanders == NULL) { return REDISEARCH_ERR; } ExtQueryExpanderCtx *ctx = rm_new(ExtQueryExpanderCtx); ctx->privdata = privdata; ctx->ff = ff; ctx->exp = exp; /* Make sure there are no two query expanders under the same name */ if (TrieMap_Find(__queryExpanders, (char *)alias, strlen(alias)) != TRIEMAP_NOTFOUND) { rm_free(ctx); return REDISEARCH_ERR; } TrieMap_Add(__queryExpanders, (char *)alias, strlen(alias), ctx, NULL); return REDISEARCH_OK; } /* Load an extension by calling its init function. return REDISEARCH_ERR or REDISEARCH_OK */ int Extension_Load(const char *name, RSExtensionInitFunc func) { // bind the callbacks in the context RSExtensionCtx ctx = { .RegisterScoringFunction = Ext_RegisterScoringFunction, .RegisterQueryExpander = Ext_RegisterQueryExpander, }; return func(&ctx); } /* Dynamically load a RediSearch extension by .so file path. Returns REDISMODULE_OK or ERR */ int Extension_LoadDynamic(const char *path, char **errMsg) { int (*init)(struct RSExtensionCtx *); void *handle; *errMsg = NULL; handle = dlopen(path, RTLD_NOW | RTLD_LOCAL); if (handle == NULL) { FMT_ERR(errMsg, "Extension %s failed to load: %s", path, dlerror()); return REDISMODULE_ERR; } init = (int (*)(struct RSExtensionCtx *))(unsigned long)dlsym(handle, "RS_ExtensionInit"); if (init == NULL) { FMT_ERR(errMsg, "Extension %s does not export RS_ExtensionInit() " "symbol. Module not loaded.", path); return REDISMODULE_ERR; } if (Extension_Load(path, init) == REDISEARCH_ERR) { FMT_ERR(errMsg, "Could not register extension %s", path); return REDISMODULE_ERR; } return REDISMODULE_OK; } /* Get a scoring function by name */ ExtScoringFunctionCtx *Extensions_GetScoringFunction(RSScoringFunctionCtx *ctx, const char *name) { if (!__scorers) return NULL; /* lookup the scorer by name (case sensitive) */ ExtScoringFunctionCtx *p = TrieMap_Find(__scorers, (char *)name, strlen(name)); if (p && (void *)p != TRIEMAP_NOTFOUND) { /* if no ctx was given, we just return the scorer */ if (ctx) { ctx->privdata = p->privdata; ctx->GetSlop = IndexResult_MinOffsetDelta; } return p; } return NULL; } /* The implementation of the actual query expansion. This function either turns the current node * into a union node with the original token node and new token node as children. Or if it is * already a union node (in consecutive calls), it just adds a new token node as a child to it */ void Ext_ExpandToken(struct RSQueryExpanderCtx *ctx, const char *str, size_t len, RSTokenFlags flags) { QueryParseCtx *q = ctx->query; QueryNode *qn = *ctx->currentNode; /* Replace current node with a new union node if needed */ if (qn->type != QN_UNION) { QueryNode *un = NewUnionNode(); un->opts.fieldMask = qn->opts.fieldMask; /* Append current node to the new union node as a child */ QueryUnionNode_AddChild(un, qn); *ctx->currentNode = un; } QueryNode *exp = NewTokenNodeExpanded(q, str, len, flags); exp->opts.fieldMask = qn->opts.fieldMask; /* Now the current node must be a union node - so we just add a new token node to it */ QueryUnionNode_AddChild(*ctx->currentNode, exp); // q->numTokens++; } /* The implementation of the actual query expansion. This function either turns the current node * into a union node with the original token node and new token node as children. Or if it is * already a union node (in consecutive calls), it just adds a new token node as a child to it */ void Ext_ExpandTokenWithPhrase(struct RSQueryExpanderCtx *ctx, const char **toks, size_t num, RSTokenFlags flags, int replace, int exact) { QueryParseCtx *q = ctx->query; QueryNode *qn = *ctx->currentNode; QueryNode *ph = NewPhraseNode(exact); for (size_t i = 0; i < num; i++) { QueryPhraseNode_AddChild(ph, NewTokenNodeExpanded(q, toks[i], strlen(toks[i]), flags)); } // if we're replacing - just set the expanded phrase instead of the token if (replace) { QueryNode_Free(qn); *ctx->currentNode = ph; } else { /* Replace current node with a new union node if needed */ if (qn->type != QN_UNION) { QueryNode *un = NewUnionNode(); /* Append current node to the new union node as a child */ QueryUnionNode_AddChild(un, qn); *ctx->currentNode = un; } /* Now the current node must be a union node - so we just add a new token node to it */ QueryUnionNode_AddChild(*ctx->currentNode, ph); } } /* Set the query payload */ void Ext_SetPayload(struct RSQueryExpanderCtx *ctx, RSPayload payload) { *ctx->query->opts.payload = payload; } /* Get an expander by name */ ExtQueryExpanderCtx *Extensions_GetQueryExpander(RSQueryExpanderCtx *ctx, const char *name) { if (!__queryExpanders) return NULL; ExtQueryExpanderCtx *p = TrieMap_Find(__queryExpanders, (char *)name, strlen(name)); if (p && (void *)p != TRIEMAP_NOTFOUND) { ctx->ExpandToken = Ext_ExpandToken; ctx->SetPayload = Ext_SetPayload; ctx->ExpandTokenWithPhrase = Ext_ExpandTokenWithPhrase; ctx->privdata = p->privdata; return p; } return NULL; } RediSearch-1.2.2/src/extension.h000066400000000000000000000023601364126773500165200ustar00rootroot00000000000000#ifndef __REDISEARCH_EXTN_H__ #define __REDISEARCH_EXTN_H__ #include "redisearch.h" /* Initialize the extensions mechanism, create registries, etc */ void Extensions_Init(); /* Context for saving a scoring function and its private data and free */ typedef struct { RSScoringFunction sf; RSFreeFunction ff; void *privdata; } ExtScoringFunctionCtx; /* Context for saving the a token expander and its free / privdata */ typedef struct { RSQueryTokenExpander exp; RSFreeFunction ff; void *privdata; } ExtQueryExpanderCtx; /* Get a scoring function by name. Returns NULL if no such scoring function exists */ ExtScoringFunctionCtx *Extensions_GetScoringFunction(RSScoringFunctionCtx *ctx, const char *name); /* Get a query expander function by name. Returns NULL if no such function exists */ ExtQueryExpanderCtx *Extensions_GetQueryExpander(RSQueryExpanderCtx *ctx, const char *name); /* Load an extension explicitly with its name and an init function */ int Extension_Load(const char *name, RSExtensionInitFunc func); /* Dynamically load a RediSearch extension by .so file path. Returns REDISMODULE_OK or ERR. errMsg * is set to NULL on success or an error message on failure */ int Extension_LoadDynamic(const char *path, char **errMsg); #endifRediSearch-1.2.2/src/forward_index.c000066400000000000000000000172241364126773500173370ustar00rootroot00000000000000#include "forward_index.h" #include "tokenize.h" #include "util/fnv.h" #include "util/logging.h" #include #include #include #include "rmalloc.h" typedef struct { KHTableEntry khBase; ForwardIndexEntry ent; } khIdxEntry; #define ENTRIES_PER_BLOCK 32 #define TERM_BLOCK_SIZE 128 static int khtCompare(const KHTableEntry *entBase, const void *s, size_t n, uint32_t h) { khIdxEntry *ee = (khIdxEntry *)entBase; ForwardIndexEntry *ent = &ee->ent; if (ent->hash != h) { return 1; } if (ent->len != n) { return 1; } return memcmp(ent->term, s, n); } static uint32_t khtHash(const KHTableEntry *entBase) { return ((khIdxEntry *)entBase)->ent.hash; } static KHTableEntry *allocBucketEntry(void *ptr) { BlkAlloc *alloc = ptr; void *p = BlkAlloc_Alloc(alloc, sizeof(khIdxEntry), ENTRIES_PER_BLOCK * sizeof(khIdxEntry)); return p; } static uint32_t hashKey(const void *s, size_t n) { return rs_fnv_32a_buf((void *)s, n, 0); } #define CHARS_PER_TERM 5 static size_t estimtateTermCount(const Document *doc) { size_t nChars = 0; for (size_t ii = 0; ii < doc->numFields; ++ii) { size_t n; RedisModule_StringPtrLen(doc->fields[ii].text, &n); nChars += n; } return nChars / CHARS_PER_TERM; } static void *vvwAlloc(void) { VarintVectorWriter *vvw = calloc(1, sizeof(*vvw)); VVW_Init(vvw, 64); return vvw; } static void vvwFree(void *p) { // printf("Releasing VVW=%p\n", p); VVW_Cleanup(p); free(p); } static void ForwardIndex_InitCommon(ForwardIndex *idx, Document *doc, uint32_t idxFlags) { idx->idxFlags = idxFlags; idx->maxFreq = 0; idx->totalFreq = 0; if (idx->stemmer && !ResetStemmer(idx->stemmer, SnowballStemmer, doc->language)) { idx->stemmer->Free(idx->stemmer); idx->stemmer = NULL; } if (!idx->stemmer) { idx->stemmer = NewStemmer(SnowballStemmer, doc->language); } } ForwardIndex *NewForwardIndex(Document *doc, uint32_t idxFlags) { ForwardIndex *idx = rm_malloc(sizeof(ForwardIndex)); BlkAlloc_Init(&idx->terms); BlkAlloc_Init(&idx->entries); static const KHTableProcs procs = { .Alloc = allocBucketEntry, .Compare = khtCompare, .Hash = khtHash, }; size_t termCount = estimtateTermCount(doc); idx->hits = calloc(1, sizeof(*idx->hits)); idx->stemmer = NULL; idx->totalFreq = 0; KHTable_Init(idx->hits, &procs, &idx->entries, termCount); idx->vvwPool = mempool_new(termCount, vvwAlloc, vvwFree); ForwardIndex_InitCommon(idx, doc, idxFlags); return idx; } static void clearEntry(void *elem, void *pool) { khIdxEntry *ent = elem; ForwardIndexEntry *fwEnt = &ent->ent; if (fwEnt->vw) { mempool_release(pool, fwEnt->vw); fwEnt->vw = NULL; } } void ForwardIndex_Reset(ForwardIndex *idx, Document *doc, uint32_t idxFlags) { BlkAlloc_Clear(&idx->terms, NULL, NULL, 0); BlkAlloc_Clear(&idx->entries, clearEntry, idx->vvwPool, sizeof(khIdxEntry)); KHTable_Clear(idx->hits); ForwardIndex_InitCommon(idx, doc, idxFlags); } static inline int hasOffsets(const ForwardIndex *idx) { return (idx->idxFlags & Index_StoreTermOffsets); } void ForwardIndexFree(ForwardIndex *idx) { size_t elemSize = sizeof(khIdxEntry); BlkAlloc_FreeAll(&idx->entries, clearEntry, idx->vvwPool, sizeof(khIdxEntry)); BlkAlloc_FreeAll(&idx->terms, NULL, NULL, 0); KHTable_Free(idx->hits); free(idx->hits); mempool_destroy(idx->vvwPool); if (idx->stemmer) { idx->stemmer->Free(idx->stemmer); } if (idx->smap) { SynonymMap_Free(idx->smap); } idx->smap = NULL; rm_free(idx); } static char *copyTempString(ForwardIndex *idx, const char *s, size_t n) { char *dst = BlkAlloc_Alloc(&idx->terms, n + 1, MAX(n + 1, TERM_BLOCK_SIZE)); memcpy(dst, s, n); dst[n] = '\0'; return dst; } static khIdxEntry *makeEntry(ForwardIndex *idx, const char *s, size_t n, uint32_t h, int *isNew) { KHTableEntry *bb = KHTable_GetEntry(idx->hits, s, n, h, isNew); return (khIdxEntry *)bb; } static void ForwardIndex_HandleToken(ForwardIndex *idx, const char *tok, size_t tokLen, uint32_t pos, float fieldScore, t_fieldId fieldId, int isStem, int shouldCopy) { // LG_DEBUG("token %.*s, hval %d\n", t.len, t.s, hval); ForwardIndexEntry *h = NULL; int isNew = 0; uint32_t hash = hashKey(tok, tokLen); khIdxEntry *kh = makeEntry(idx, tok, tokLen, hash, &isNew); h = &kh->ent; if (isNew) { // printf("New token %.*s\n", (int)t->len, t->s); h->fieldMask = 0; h->hash = hash; h->next = NULL; if (shouldCopy) { h->term = copyTempString(idx, tok, tokLen); } else { h->term = tok; } h->len = tokLen; h->freq = 0; if (hasOffsets(idx)) { h->vw = mempool_get(idx->vvwPool); // printf("Got VVW=%p\n", h->vw); VVW_Reset(h->vw); } else { h->vw = NULL; } } else { // printf("Existing token %.*s\n", (int)t->len, t->s); } h->fieldMask |= ((t_fieldMask)1) << fieldId; float score = (float)fieldScore; // stem tokens get lower score if (isStem) { score *= STEM_TOKEN_FACTOR; } h->freq += MAX(1, (uint32_t)score); idx->maxFreq = MAX(h->freq, idx->maxFreq); idx->totalFreq += h->freq; if (h->vw) { VVW_Write(h->vw, pos); } // LG_DEBUG("%d) %s, token freq: %f total freq: %f\n", t.pos, t.s, h->freq, idx->totalFreq); } // void ForwardIndex_NormalizeFreq(ForwardIndex *idx, ForwardIndexEntry *e) { // e->freq = e->freq / idx->maxFreq; // } int forwardIndexTokenFunc(void *ctx, const Token *tokInfo) { #define SYNONYM_BUFF_LEN 100 const ForwardIndexTokenizerCtx *tokCtx = ctx; ForwardIndex_HandleToken(tokCtx->idx, tokInfo->tok, tokInfo->tokLen, tokInfo->pos, tokCtx->fieldScore, tokCtx->fieldId, 0, tokInfo->flags & Token_CopyRaw); if (tokCtx->allOffsets) { VVW_Write(tokCtx->allOffsets, tokInfo->raw - tokCtx->doc); } if (tokInfo->stem) { ForwardIndex_HandleToken(tokCtx->idx, tokInfo->stem, tokInfo->stemLen, tokInfo->pos, tokCtx->fieldScore, tokCtx->fieldId, 1, tokInfo->flags & Token_CopyStem); } if (tokCtx->idx->smap) { TermData *t_data = SynonymMap_GetIdsBySynonym(tokCtx->idx->smap, tokInfo->tok, tokInfo->tokLen); if (t_data) { char synonym_buff[SYNONYM_BUFF_LEN]; size_t synonym_len; for (int i = 0; i < array_len(t_data->ids); ++i) { synonym_len = SynonymMap_IdToStr(t_data->ids[i], synonym_buff, SYNONYM_BUFF_LEN); ForwardIndex_HandleToken(tokCtx->idx, synonym_buff, synonym_len, tokInfo->pos, tokCtx->fieldScore, tokCtx->fieldId, 0, 1); } } } return 0; } ForwardIndexEntry *ForwardIndex_Find(ForwardIndex *i, const char *s, size_t n, uint32_t hash) { int dummy; KHTableEntry *baseEnt = KHTable_GetEntry(i->hits, s, n, hash, NULL); if (!baseEnt) { return NULL; } else { khIdxEntry *bEnt = (khIdxEntry *)baseEnt; return &bEnt->ent; } } ForwardIndexIterator ForwardIndex_Iterate(ForwardIndex *i) { ForwardIndexIterator iter; iter.hits = i->hits; iter.curBucketIdx = 0; iter.curEnt = NULL; // khTable_Dump(iter.hits); return iter; } ForwardIndexEntry *ForwardIndexIterator_Next(ForwardIndexIterator *iter) { KHTable *table = iter->hits; while (iter->curEnt == NULL && iter->curBucketIdx < table->numBuckets) { iter->curEnt = table->buckets[iter->curBucketIdx++]; } if (iter->curEnt == NULL) { return NULL; } KHTableEntry *ret = iter->curEnt; iter->curEnt = ret->next; // printf("Yielding entry: %.*s. Next=%p -- (%p)\n", (int)ret->self.ent.len, ret->self.ent.term, // ret->next, iter->curEnt); khIdxEntry *bEnt = (khIdxEntry *)ret; return &bEnt->ent; } RediSearch-1.2.2/src/forward_index.h000066400000000000000000000040631364126773500173410ustar00rootroot00000000000000#ifndef __FORWARD_INDEX_H__ #define __FORWARD_INDEX_H__ #include "redisearch.h" #include "util/block_alloc.h" #include "util/khtable.h" #include "util/mempool.h" #include "dep/triemap/triemap.h" #include "varint.h" #include "tokenize.h" #include "document.h" typedef struct ForwardIndexEntry { struct ForwardIndexEntry *next; t_docId docId; uint32_t freq; t_fieldMask fieldMask; const char *term; uint32_t len; uint32_t hash; VarintVectorWriter *vw; } ForwardIndexEntry; // the quantizationn factor used to encode normalized (0..1) frquencies in the index #define FREQ_QUANTIZE_FACTOR 0xFFFF typedef struct ForwardIndex { KHTable *hits; uint32_t maxFreq; uint32_t totalFreq; uint32_t idxFlags; Stemmer *stemmer; SynonymMap *smap; BlkAlloc terms; BlkAlloc entries; mempool_t *vvwPool; } ForwardIndex; typedef struct { const char *doc; VarintVectorWriter *allOffsets; ForwardIndex *idx; t_fieldId fieldId; float fieldScore; } ForwardIndexTokenizerCtx; static inline void ForwardIndexTokenizerCtx_Init(ForwardIndexTokenizerCtx *ctx, ForwardIndex *idx, const char *doc, VarintVectorWriter *vvw, t_fieldId fieldId, float score) { ctx->idx = idx; ctx->fieldId = fieldId; ctx->fieldScore = score; ctx->doc = doc; ctx->allOffsets = vvw; } typedef struct { KHTable *hits; KHTableEntry *curEnt; uint32_t curBucketIdx; } ForwardIndexIterator; int forwardIndexTokenFunc(void *ctx, const Token *tokInfo); void ForwardIndexFree(ForwardIndex *idx); void ForwardIndex_Reset(ForwardIndex *idx, Document *doc, uint32_t idxFlags); ForwardIndex *NewForwardIndex(Document *doc, uint32_t idxFlags); ForwardIndexIterator ForwardIndex_Iterate(ForwardIndex *i); ForwardIndexEntry *ForwardIndexIterator_Next(ForwardIndexIterator *iter); // Find an existing entry within the index ForwardIndexEntry *ForwardIndex_Find(ForwardIndex *i, const char *s, size_t n, uint32_t hash); void ForwardIndex_NormalizeFreq(ForwardIndex *, ForwardIndexEntry *); #endif RediSearch-1.2.2/src/fragmenter.c000066400000000000000000000416351364126773500166410ustar00rootroot00000000000000#include "fragmenter.h" #include "toksep.h" #include "tokenize.h" #include "util/minmax.h" #include #include #include #include // Estimated characters per token #define EST_CHARS_PER_TOK 6 static Fragment *FragmentList_LastFragment(FragmentList *fragList) { if (!fragList->frags.len) { return NULL; } return (Fragment *)(fragList->frags.data + (fragList->frags.len - sizeof(Fragment))); } static Fragment *FragmentList_AddFragment(FragmentList *fragList) { Fragment *frag = Array_Add(&fragList->frags, sizeof(Fragment)); memset(frag, 0, sizeof(*frag)); frag->fragPos = fragList->numFrags++; Array_Init(&frag->termLocs); return frag; } static size_t Fragment_GetNumTerms(const Fragment *frag) { return ARRAY_GETSIZE_AS(&frag->termLocs, TermLoc); } static int Fragment_HasTerm(const Fragment *frag, uint32_t termId) { TermLoc *locs = ARRAY_GETARRAY_AS(&frag->termLocs, TermLoc *); int firstOcurrence = 1; // If this is the first time the term appears in the fragment, increment the // fragment's score by the term's score. Otherwise, increment it by half // the fragment's score. This allows for better 'blended' results. for (size_t ii = 0; ii < Fragment_GetNumTerms(frag); ii++) { if (locs[ii].termId == termId) { return 1; } } return 0; } static Fragment *FragmentList_AddMatchingTerm(FragmentList *fragList, uint32_t termId, uint32_t tokPos, const char *tokBuf, size_t tokLen, float baseScore) { Fragment *curFrag = FragmentList_LastFragment(fragList); if (curFrag && tokPos - curFrag->lastMatchPos > fragList->maxDistance) { // There is too much distance between tokens for it to still be relevant. curFrag = NULL; } if (curFrag == NULL) { curFrag = FragmentList_AddFragment(fragList); fragList->numToksSinceLastMatch = 0; curFrag->buf = tokBuf; } if (!Fragment_HasTerm(curFrag, termId)) { curFrag->score += baseScore; } curFrag->len = (tokBuf - curFrag->buf) + tokLen; curFrag->lastMatchPos = tokPos; curFrag->numMatches++; curFrag->totalTokens += fragList->numToksSinceLastMatch + 1; fragList->numToksSinceLastMatch = 0; TermLoc *newLoc = Array_Add(&curFrag->termLocs, sizeof(TermLoc)); newLoc->termId = termId; newLoc->offset = tokBuf - curFrag->buf; newLoc->len = tokLen; return curFrag; } static void extractToken(FragmentList *fragList, const Token *tokInfo, const FragmentSearchTerm *terms, size_t numTerms) { const FragmentSearchTerm *term = NULL; uint32_t termId; // See if this token matches any of our terms. for (termId = 0; termId < numTerms; ++termId) { const FragmentSearchTerm *cur = terms + termId; if (tokInfo->tokLen == cur->len && strncmp(tokInfo->tok, cur->tok, cur->len) == 0) { } else if (tokInfo->stem && tokInfo->stemLen == cur->len && strncmp(tokInfo->stem, cur->tok, cur->len) == 0) { } else { continue; } term = cur; break; } // Don't care about this token if (!term) { fragList->numToksSinceLastMatch++; return; } FragmentList_AddMatchingTerm(fragList, termId, tokInfo->pos, tokInfo->raw, tokInfo->rawLen, term->score); } void FragmentList_FragmentizeBuffer(FragmentList *fragList, const char *doc, Stemmer *stemmer, StopWordList *stopwords, const FragmentSearchTerm *terms, size_t numTerms) { fragList->doc = doc; fragList->docLen = strlen(doc); RSTokenizer *tokenizer = NewSimpleTokenizer(stemmer, stopwords, TOKENIZE_NOMODIFY); tokenizer->Start(tokenizer, (char *)fragList->doc, fragList->docLen, 0); Token tokInfo; while (tokenizer->Next(tokenizer, &tokInfo)) { extractToken(fragList, &tokInfo, terms, numTerms); } } static void addToIov(const char *s, size_t n, Array *b) { if (n == 0 || s == NULL) { return; } struct iovec *iov = Array_Add(b, sizeof(*iov)); assert(iov); iov->iov_base = (void *)s; iov->iov_len = n; } /** * Writes a complete fragment as a series of IOVs. * - fragment is the fragment to write * - tags is the tags to use * - contextLen is any amount of context used to surround the fragment with * - iovs is the target buffer in which the iovs should be written * * - preamble is any prior text which may need to be written alongside the fragment. * In output, it contains the first byte after the fragment+context. This may be * used as the 'preamble' value for a subsequent call to this function, if the next * fragment being written is after the current one. */ static void Fragment_WriteIovs(const Fragment *curFrag, const char *openTag, size_t openLen, const char *closeTag, size_t closeLen, Array *iovs, const char **preamble) { const TermLoc *locs = ARRAY_GETARRAY_AS(&curFrag->termLocs, const TermLoc *); size_t nlocs = ARRAY_GETSIZE_AS(&curFrag->termLocs, TermLoc); const char *preamble_s = NULL; if (!preamble) { preamble = &preamble_s; } if (!*preamble) { *preamble = curFrag->buf; } for (size_t ii = 0; ii < nlocs; ++ii) { const TermLoc *curLoc = locs + ii; size_t preambleLen = (curFrag->buf + curLoc->offset) - *preamble; // Add any prior text if (preambleLen) { addToIov(*preamble, preambleLen, iovs); } if (openLen) { addToIov(openTag, openLen, iovs); } // Add the token itself addToIov(curFrag->buf + curLoc->offset, curLoc->len, iovs); // Add close tag if (closeLen) { addToIov(closeTag, closeLen, iovs); } *preamble = curFrag->buf + curLoc->offset + curLoc->len; } } void FragmentList_HighlightWholeDocV(const FragmentList *fragList, const HighlightTags *tags, Array *iovs) { const Fragment *frags = FragmentList_GetFragments(fragList); if (!fragList->numFrags) { // Whole doc, but no matches found addToIov(fragList->doc, fragList->docLen, iovs); return; } const char *preamble = fragList->doc; size_t openLen = strlen(tags->openTag); size_t closeLen = strlen(tags->closeTag); for (size_t ii = 0; ii < fragList->numFrags; ++ii) { const Fragment *curFrag = frags + ii; Fragment_WriteIovs(curFrag, tags->openTag, openLen, tags->closeTag, closeLen, iovs, &preamble); } // Write the last preamble size_t preambleLen = (fragList->doc + fragList->docLen) - preamble; // size_t preambleLen = strlen(preamble); if (preambleLen) { addToIov(preamble, preambleLen, iovs); } } char *FragmentList_HighlightWholeDocS(const FragmentList *fragList, const HighlightTags *tags) { Array iovsArr; Array_Init(&iovsArr); FragmentList_HighlightWholeDocV(fragList, tags, &iovsArr); // Calculate the length struct iovec *iovs = ARRAY_GETARRAY_AS(&iovsArr, struct iovec *); size_t niovs = ARRAY_GETSIZE_AS(&iovsArr, struct iovec); size_t docLen = 0; for (size_t ii = 0; ii < niovs; ++ii) { docLen += iovs[ii].iov_len; } char *docBuf = malloc(docLen + 1); docBuf[docLen] = '\0'; assert(docBuf); size_t offset = 0; for (size_t ii = 0; ii < niovs; ++ii) { memcpy(docBuf + offset, iovs[ii].iov_base, iovs[ii].iov_len); offset += iovs[ii].iov_len; } Array_Free(&iovsArr); return docBuf; } static int fragSortCmp(const void *pa, const void *pb) { const Fragment *a = *(const Fragment **)pa, *b = *(const Fragment **)pb; if (a->score == b->score) { return a - b; } return a->score > b->score ? -1 : 1; } static void FragmentList_Sort(FragmentList *fragList) { if (fragList->sortedFrags) { return; } const Fragment *origFrags = FragmentList_GetFragments(fragList); fragList->sortedFrags = malloc(sizeof(*fragList->sortedFrags) * fragList->numFrags); for (size_t ii = 0; ii < fragList->numFrags; ++ii) { fragList->sortedFrags[ii] = origFrags + ii; } qsort(fragList->sortedFrags, fragList->numFrags, sizeof(fragList->sortedFrags[0]), fragSortCmp); for (size_t ii = 0; ii < fragList->numFrags; ++ii) { ((Fragment *)fragList->sortedFrags[ii])->scoreRank = ii; } } static int sortByOrder(const void *pa, const void *pb) { const Fragment *a = *(const Fragment **)pa, *b = *(const Fragment **)pb; return (int)a->fragPos - (int)b->fragPos; } /** * Add context before and after the fragment. * - frag is the fragment to contextualize * - limitBefore, limitAfter are boundaries, such that the following will be * true: * - limitBefore <= before <= frag->buf * - limitAfter > after >= frag->buf + frag->len * If limitBefore is not specified, it defaults to the beginning of the fragList's doc * If limitAfter is not specified, then the limit ends after the first NUL terminator. */ static void FragmentList_FindContext(const FragmentList *fragList, const Fragment *frag, const char *limitBefore, const char *limitAfter, size_t contextSize, struct iovec *before, struct iovec *after) { if (limitBefore == NULL) { limitBefore = fragList->doc; } if (limitAfter == NULL) { limitAfter = fragList->doc + fragList->docLen - 1; } // Subtract the number of context (i.e. non-match) words // already inside the // snippet. if (contextSize <= frag->totalTokens - frag->numMatches) { before->iov_base = after->iov_base = NULL; before->iov_len = after->iov_len = 0; return; } contextSize -= (frag->totalTokens - frag->numMatches); // i.e. how much context before and after contextSize /= 2; // At some point we need to make a cutoff in terms of *bytes* contextSize *= fragList->estAvgWordSize; // TODO: If this context flows directly into a neighboring context, signal // some way to *merge* them. limitBefore = Max(frag->buf - contextSize, limitBefore); limitAfter = Min(frag->buf + frag->len + contextSize, limitAfter); before->iov_base = (void *)frag->buf; before->iov_len = 0; // Find the context immediately prior to our fragment, this means to advance // the cursor as much as possible until a separator is reached, and then // seek past that separator (if there are separators) for (; limitBefore < frag->buf && !istoksep(*limitBefore); limitBefore++) { // Found a separator. } for (; limitBefore < frag->buf && istoksep(*limitBefore); limitBefore++) { // Strip away future separators } before->iov_base = (void *)limitBefore; before->iov_len = frag->buf - limitBefore; // Do the same for the 'after' context. for (; limitAfter > frag->buf + frag->len && !istoksep(*limitAfter); limitAfter--) { // Found a separator } for (; limitAfter > frag->buf + frag->len && istoksep(*limitAfter); limitAfter--) { // Seek to the end of the last non-separator word } after->iov_base = (void *)frag->buf + frag->len; after->iov_len = limitAfter - (frag->buf + frag->len) + 1; } void FragmentList_HighlightFragments(FragmentList *fragList, const HighlightTags *tags, size_t contextSize, Array *iovArrList, size_t niovs, int order) { const Fragment *frags = FragmentList_GetFragments(fragList); niovs = Min(niovs, fragList->numFrags); if (!fragList->scratchFrags) { fragList->scratchFrags = malloc(sizeof(*fragList->scratchFrags) * fragList->numFrags); } const Fragment **indexes = fragList->scratchFrags; if (order == HIGHLIGHT_ORDER_POS) { for (size_t ii = 0; ii < niovs; ++ii) { indexes[ii] = frags + ii; } } else if (order & HIGHLIGHT_ORDER_SCORE) { FragmentList_Sort(fragList); for (size_t ii = 0; ii < niovs; ++ii) { indexes[ii] = fragList->sortedFrags[ii]; } if (order & HIGHLIGHT_ORDER_POS) { qsort(indexes, niovs, sizeof indexes[0], sortByOrder); } } size_t openLen = tags->openTag ? strlen(tags->openTag) : 0; size_t closeLen = tags->closeTag ? strlen(tags->closeTag) : 0; for (size_t ii = 0; ii < niovs; ++ii) { Array *curArr = iovArrList + ii; const char *beforeLimit = NULL, *afterLimit = NULL; const Fragment *curFrag = indexes[ii]; if (order & HIGHLIGHT_ORDER_POS) { if (ii > 0) { beforeLimit = indexes[ii - 1]->buf + indexes[ii - 1]->len; } if (ii + 1 < niovs) { afterLimit = indexes[ii + 1]->buf; } } struct iovec before, after; FragmentList_FindContext(fragList, curFrag, beforeLimit, afterLimit, contextSize, &before, &after); addToIov(before.iov_base, before.iov_len, curArr); Fragment_WriteIovs(curFrag, tags->openTag, openLen, tags->closeTag, closeLen, curArr, NULL); addToIov(after.iov_base, after.iov_len, curArr); } } void FragmentList_Free(FragmentList *fragList) { Fragment *frags = (Fragment *)FragmentList_GetFragments(fragList); for (size_t ii = 0; ii < fragList->numFrags; ii++) { Array_Free(&frags[ii].termLocs); } Array_Free(&fragList->frags); free(fragList->sortedFrags); free(fragList->scratchFrags); } /** * Tokenization: * If we have term offsets and document terms, we can skip the tokenization process. * * 1) Gather all matching terms for the documents, and get their offsets (in position) * 2) Sort all terms, by position * 3) Start reading the byte offset list, until we reach the first term of the match * list, then, consume the matches until the maximum distance has been reached, * noting the terms for each. */ void FragmentList_FragmentizeIter(FragmentList *fragList, const char *doc, size_t docLen, FragmentTermIterator *iter, int options) { fragList->docLen = docLen; fragList->doc = doc; FragmentTerm *curTerm; size_t lastTokPos = -1; size_t lastByteEnd = 0; while (FragmentTermIterator_Next(iter, &curTerm)) { if (curTerm == NULL) { fragList->numToksSinceLastMatch++; continue; } if (curTerm->tokPos == lastTokPos) { continue; } if (curTerm->bytePos < lastByteEnd) { // If our length estimations are off, don't use already-swallowed matches continue; } // Get the length of the current token. This is used to highlight the term // (if requested), and just terminates at the first non-separator character size_t len; if (options & FRAGMENTIZE_TOKLEN_EXACT) { len = curTerm->len; } else { len = 0; for (size_t ii = curTerm->bytePos; ii < fragList->docLen && !istoksep(doc[ii]); ++ii, ++len) { } } FragmentList_AddMatchingTerm(fragList, curTerm->termId, curTerm->tokPos, doc + curTerm->bytePos, len, curTerm->score); lastTokPos = curTerm->tokPos; lastByteEnd = curTerm->bytePos + len; } } void FragmentTermIterator_InitOffsets(FragmentTermIterator *iter, RSByteOffsetIterator *byteOffsets, RSOffsetIterator *offIter) { iter->offsetIter = offIter; iter->byteIter = byteOffsets; iter->curByteOffset = RSByteOffsetIterator_Next(iter->byteIter); // Advance the offset iterator to the first offset we care about (i.e. that // correlates with the first byte offset) do { iter->curTokPos = iter->offsetIter->Next(iter->offsetIter->ctx, &iter->curMatchRec); } while (iter->byteIter->curPos > iter->curTokPos); } int FragmentTermIterator_Next(FragmentTermIterator *iter, FragmentTerm **termInfo) { if (iter->curMatchRec == NULL || iter->curByteOffset == RSBYTEOFFSET_EOF || iter->curTokPos == RS_OFFSETVECTOR_EOF) { return 0; } if (iter->byteIter->curPos < iter->curTokPos) { iter->curByteOffset = RSByteOffsetIterator_Next(iter->byteIter); // No matching term at this position. // printf("IterPos=%lu. LastMatchPos=%u\n", iter->byteIter->curPos, iter->curTokPos); *termInfo = NULL; return 1; } // printf("ByteOffset=%lu. LastMatchPos=%u\n", iter->curByteOffset, iter->curTokPos); RSQueryTerm *term = iter->curMatchRec; // printf("Term Pointer: %p\n", term); iter->tmpTerm.score = term->idf; iter->tmpTerm.termId = term->id; iter->tmpTerm.len = term->len; iter->tmpTerm.tokPos = iter->curTokPos; iter->tmpTerm.bytePos = iter->curByteOffset; *termInfo = &iter->tmpTerm; uint32_t nextPos = iter->offsetIter->Next(iter->offsetIter->ctx, &iter->curMatchRec); if (nextPos != iter->curTokPos) { iter->curByteOffset = RSByteOffsetIterator_Next(iter->byteIter); } iter->curTokPos = nextPos; return 1; } void FragmentList_Dump(const FragmentList *fragList) { printf("NumFrags: %u\n", fragList->numFrags); for (size_t ii = 0; ii < fragList->numFrags; ++ii) { const Fragment *frag = ARRAY_GETITEM_AS(&fragList->frags, ii, Fragment *); printf("Frag[%lu]: Buf=%p, (pos=%lu), Len=%u\n", ii, frag->buf, frag->buf - fragList->doc, frag->len); printf(" Score: %f, Rank=%u. Total Tokens=%u\n", frag->score, frag->scoreRank, frag->totalTokens); printf(" BEGIN:\n"); printf(" %.*s\n", (int)frag->len, frag->buf); printf(" END\n"); printf("\n"); } } RediSearch-1.2.2/src/fragmenter.h000066400000000000000000000160151364126773500166400ustar00rootroot00000000000000#ifndef FRAGMENTER_H #define FRAGMENTER_H #include #include #include #include "util/array.h" #include "stemmer.h" #include "redisearch.h" #include "stopwords.h" #include "byte_offsets.h" /** * ## Implementation The summarization/highlight subsystem is implemented using an environment-agnostic highlighter/fragmenter, and a higher level which is integrated with RediSearch and the query keyword parser. The summarization process begins by tokenizing the requested field, and splitting the document into *fragments*. When a matching token (or its stemmed variant) is found, a distance counter begins. This counts the number of tokens following the matched token. If another matching token occurs before the maximum token distance has been exceeded, the counter is reset to 0 and the fragment is extended. Each time a token is found in a fragment, the fragment's score increases. The score increase is dependent on the base token score (this is provided as input to the fragmenter), and whether this term is being repeated, or if it is a new occurrence (within the same fragment). New terms get higher scores; which helps eliminate forms like "I said to Abraham: Abraham, why...". The input score for each term is calculated based on the term's overall frequency in the DB (lower frequency means higher score), but this is consider out of bounds for the fragmenter. Once all fragments are scored, they are then *contextualized*. The fragment's context is determined to be X amount of tokens surrounding the given matched tokens. Words in between the tokens are considered as well, ensuring that every fragment is more or less the same size. */ typedef struct { uint32_t tokPos; uint32_t bytePos; uint32_t termId; uint32_t len; float score; } FragmentTerm; typedef struct { RSByteOffsetIterator *byteIter; RSOffsetIterator *offsetIter; RSQueryTerm *curMatchRec; uint32_t curTokPos; uint32_t curByteOffset; FragmentTerm tmpTerm; } FragmentTermIterator; int FragmentTermIterator_Next(FragmentTermIterator *iter, FragmentTerm **termInfo); void FragmentTermIterator_InitOffsets(FragmentTermIterator *iter, RSByteOffsetIterator *bytesIter, RSOffsetIterator *offIter); typedef struct { // Position in current fragment (bytes) uint32_t offset; // Length of the token. This might be a stem, so not necessarily similar to termId uint16_t len; // Index into FragmentList::terms uint16_t termId; } TermLoc; typedef struct Fragment { const char *buf; uint32_t len; // (token-wise) position of the last matched token uint32_t lastMatchPos; // How many tokens are in this fragment uint32_t totalTokens; // How many _matched_ tokens are in this fragment uint32_t numMatches; // Inverted ranking (from 0..n) in the score array. A lower number means a higher score uint32_t scoreRank; // Position within the array of fragments uint32_t fragPos; // Score calculated from the number of matches float score; Array termLocs; // TermLoc } Fragment; typedef struct { // Array of fragments Array frags; // Array of indexes (in frags), sorted by score const Fragment **sortedFrags; // Scratch space, used internally const Fragment **scratchFrags; // Number of fragments uint32_t numFrags; // Number of tokens since last match. Used in determining 'context ratio' uint32_t numToksSinceLastMatch; const char *doc; uint32_t docLen; // Maximum allowable distance between relevant terms to be called a 'fragment' uint16_t maxDistance; // Average word size. Used when determining context. uint8_t estAvgWordSize; } FragmentList; static inline void FragmentList_Init(FragmentList *fragList, uint16_t maxDistance, uint8_t estWordSize) { fragList->doc = NULL; fragList->docLen = 0; fragList->numFrags = 0; fragList->maxDistance = maxDistance; fragList->estAvgWordSize = estWordSize; fragList->sortedFrags = NULL; fragList->scratchFrags = NULL; Array_Init(&fragList->frags); } static inline size_t FragmentList_GetNumFrags(const FragmentList *fragList) { return ARRAY_GETSIZE_AS(&fragList->frags, Fragment); } static const Fragment *FragmentList_GetFragments(const FragmentList *fragList) { return ARRAY_GETARRAY_AS(&fragList->frags, const Fragment *); } #define FRAGMENT_TERM(buf_, len_, score_) \ { .tok = buf_, .len = len_, .score = score_ } /** * A single term to use for searching. Used when fragmenting a buffer */ typedef struct { const char *tok; size_t len; float score; } FragmentSearchTerm; #define DOCLEN_NULTERM ((size_t)-1) /** * Split a document into a list of fragments. * - doc is the document to split * - numTerms is the number of terms to search for. The terms themselves are * not searched, but each Fragment needs to have this memory made available. * * Returns a list of fragments. */ void FragmentList_FragmentizeBuffer(FragmentList *fragList, const char *doc, Stemmer *stemmer, StopWordList *stopwords, const FragmentSearchTerm *terms, size_t numTerms); #define FRAGMENTIZE_TOKLEN_EXACT 0x01 void FragmentList_FragmentizeIter(FragmentList *fragList, const char *doc, size_t docLen, FragmentTermIterator *iter, int options); typedef struct { const char *openTag; const char *closeTag; } HighlightTags; void FragmentList_Free(FragmentList *frags); /** Highlight matches the entire document, returning a series of IOVs */ void FragmentList_HighlightWholeDocV(const FragmentList *fragList, const HighlightTags *tags, Array *iovs); /** Highlight matches the entire document, returning it as a freeable NUL-terminated buffer */ char *FragmentList_HighlightWholeDocS(const FragmentList *fragList, const HighlightTags *tags); /** * Return fragments by their score. The highest ranked fragment is returned fist */ #define HIGHLIGHT_ORDER_SCORE 0x01 /** * Return fragments by their order in the document. The fragment with the lowest * position is returned first. */ #define HIGHLIGHT_ORDER_POS 0x02 /** * First select the highest scoring elements and then sort them by position */ #define HIGHLIGHT_ORDER_SCOREPOS 0x03 /** * Highlight fragments for each document. * * - contextSize is the size of the surrounding context, in estimated words, * for each returned fragment. The function will use this as a hint. * * - iovBufList is an array of buffers. Each element corresponds to a fragment, * and the fragments are always returned in order. * * - niovs If niovs is less than the number of fragments, then only the first * fragments are returned. * * - order is one of the HIGHLIGHT_ORDER_ constants. See their documentation * for more details * */ void FragmentList_HighlightFragments(FragmentList *fragList, const HighlightTags *tags, size_t contextSize, Array *iovBufList, size_t niovs, int order); void FragmentList_Dump(const FragmentList *fragList); #endifRediSearch-1.2.2/src/gc.c000066400000000000000000000400271364126773500150720ustar00rootroot00000000000000#define RS_GC_C_ #include #include #include #include "inverted_index.h" #include "redis_index.h" #include "spec.h" #include "redismodule.h" #include "rmutil/util.h" #include "gc.h" #include "tests/time_sample.h" #include "numeric_index.h" #include "tag_index.h" #include "config.h" // convert a frequency to timespec struct timespec hzToTimeSpec(float hz) { struct timespec ret; ret.tv_sec = (time_t)floor(1.0 / hz); ret.tv_nsec = (long)floor(1000000000.0 / hz) % 1000000000L; return ret; } typedef struct NumericFieldGCCtx { NumericRangeTree *rt; uint32_t revisionId; NumericRangeTreeIterator *gcIterator; } NumericFieldGCCtx; #define NUMERIC_GC_INITIAL_SIZE 4 #define SPEC_STATUS_OK 1 #define SPEC_STATUS_INVALID 2 /* Internal definition of the garbage collector context (each index has one) */ typedef struct GarbageCollectorCtx { // current frequency float hz; // inverted index key name for reopening the index const RedisModuleString *keyName; // periodic timer struct RMUtilTimer *timer; // statistics for reporting GCStats stats; // flag for rdb loading. Set to 1 initially, but unce it's set to 0 we don't need to check anymore int rdbPossiblyLoading; NumericFieldGCCtx **numericGCCtx; uint64_t spec_unique_id; } GarbageCollectorCtx; /* Create a new garbage collector, with a string for the index name, and initial frequency */ GarbageCollectorCtx *NewGarbageCollector(const RedisModuleString *k, float initialHZ, uint64_t spec_unique_id) { GarbageCollectorCtx *gc = malloc(sizeof(*gc)); *gc = (GarbageCollectorCtx){ .timer = NULL, .hz = initialHZ, .keyName = k, .stats = {}, .rdbPossiblyLoading = 1, }; gc->numericGCCtx = array_new(NumericFieldGCCtx *, NUMERIC_GC_INITIAL_SIZE); gc->spec_unique_id = spec_unique_id; return gc; } /* Check if Redis is currently loading from RDB. Our thread starts before RDB loading is finished */ int isRdbLoading(RedisModuleCtx *ctx) { long long isLoading = 0; RMUtilInfo *info = RMUtil_GetRedisInfo(ctx); if (!info) { return 0; } if (!RMUtilInfo_GetInt(info, "loading", &isLoading)) { isLoading = 0; } RMUtilRedisInfo_Free(info); return isLoading == 1; } void gc_updateStats(RedisSearchCtx *sctx, GarbageCollectorCtx *gc, size_t recordsRemoved, size_t bytesCollected) { sctx->spec->stats.numRecords -= recordsRemoved; sctx->spec->stats.invertedSize -= bytesCollected; gc->stats.totalCollected += bytesCollected; } size_t gc_RandomTerm(RedisModuleCtx *ctx, GarbageCollectorCtx *gc, int *status) { RedisModuleKey *idxKey = NULL; RedisSearchCtx *sctx = NewSearchCtx(ctx, (RedisModuleString *)gc->keyName); size_t totalRemoved = 0; size_t totalCollected = 0; if (!sctx || sctx->spec->unique_id != gc->spec_unique_id) { RedisModule_Log(ctx, "warning", "No index spec for GC %s", RedisModule_StringPtrLen(gc->keyName, NULL)); *status = SPEC_STATUS_INVALID; goto end; } // Select a weighted random term TimeSample ts; char *term = IndexSpec_GetRandomTerm(sctx->spec, 20); // if the index is empty we won't get anything here if (!term) { goto end; } RedisModule_Log(ctx, "debug", "Garbage collecting for term '%s'", term); // Open the term's index InvertedIndex *idx = Redis_OpenInvertedIndexEx(sctx, term, strlen(term), 1, &idxKey); if (idx) { int blockNum = 0; do { IndexRepairParams params = {.limit = RSGlobalConfig.gcScanSize}; TimeSampler_Start(&ts); // repair 100 blocks at once blockNum = InvertedIndex_Repair(idx, &sctx->spec->docs, blockNum, ¶ms); TimeSampler_End(&ts); RedisModule_Log(ctx, "debug", "Repair took %lldns", TimeSampler_DurationNS(&ts)); /// update the statistics with the the number of records deleted totalRemoved += params.docsCollected; gc_updateStats(sctx, gc, params.docsCollected, params.bytesCollected); totalCollected += params.bytesCollected; // blockNum 0 means error or we've finished if (!blockNum) break; // After each iteration we yield execution // First we close the relevant keys we're touching RedisModule_CloseKey(idxKey); sctx = SearchCtx_Refresh(sctx, (RedisModuleString *)gc->keyName); // sctx null --> means it was deleted and we need to stop right now if (!sctx || sctx->spec->unique_id != gc->spec_unique_id) { *status = SPEC_STATUS_INVALID; break; } // reopen the inverted index - it might have gone away idx = Redis_OpenInvertedIndexEx(sctx, term, strlen(term), 1, &idxKey); } while (idx != NULL); } if (totalRemoved) { RedisModule_Log(ctx, "notice", "Garbage collected %zd bytes in %zd records for term '%s'", totalCollected, totalRemoved, term); } free(term); RedisModule_Log(ctx, "debug", "New HZ: %f\n", gc->hz); end: if (sctx) { RedisModule_CloseKey(sctx->key); SearchCtx_Free(sctx); } if (idxKey) RedisModule_CloseKey(idxKey); return totalRemoved; } static NumericRangeNode *NextGcNode(NumericFieldGCCtx *numericGcCtx) { bool runFromStart = false; NumericRangeNode *node = NULL; do { while ((node = NumericRangeTreeIterator_Next(numericGcCtx->gcIterator))) { if (node->range) { return node; } } assert(!runFromStart); NumericRangeTreeIterator_Free(numericGcCtx->gcIterator); numericGcCtx->gcIterator = NumericRangeTreeIterator_New(numericGcCtx->rt); runFromStart = true; } while (true); // will never reach here return NULL; } static NumericFieldGCCtx *gc_NewNumericGcCtx(NumericRangeTree *rt) { NumericFieldGCCtx *ctx = rm_malloc(sizeof(NumericFieldGCCtx)); ctx->rt = rt; ctx->revisionId = rt->revisionId; ctx->gcIterator = NumericRangeTreeIterator_New(rt); return ctx; } static void gc_FreeNumericGcCtx(NumericFieldGCCtx *ctx) { NumericRangeTreeIterator_Free(ctx->gcIterator); rm_free(ctx); } static void gc_FreeNumericGcCtxArray(GarbageCollectorCtx *gc) { for (int i = 0; i < array_len(gc->numericGCCtx); ++i) { gc_FreeNumericGcCtx(gc->numericGCCtx[i]); } array_trimm_len(gc->numericGCCtx, 0); } static FieldSpec **getFieldsByType(IndexSpec *spec, FieldType type) { #define FIELDS_ARRAY_CAP 2 FieldSpec **fields = array_new(FieldSpec *, FIELDS_ARRAY_CAP); for (int i = 0; i < spec->numFields; ++i) { if (spec->fields[i].type == type) { fields = array_append(fields, &(spec->fields[i])); } } return fields; } static RedisModuleString *getRandomFieldByType(IndexSpec *spec, FieldType type) { FieldSpec **tagFields = NULL; tagFields = getFieldsByType(spec, type); if (array_len(tagFields) == 0) { array_free(tagFields); return NULL; } // choose random tag field int randomIndex = rand() % array_len(tagFields); RedisModuleString *ret = IndexSpec_GetFormattedKey(spec, tagFields[randomIndex]); array_free(tagFields); return ret; } size_t gc_TagIndex(RedisModuleCtx *ctx, GarbageCollectorCtx *gc, int *status) { size_t totalRemoved = 0; RedisModuleKey *idxKey = NULL; RedisSearchCtx *sctx = NewSearchCtx(ctx, (RedisModuleString *)gc->keyName); if (!sctx || sctx->spec->unique_id != gc->spec_unique_id) { RedisModule_Log(ctx, "warning", "No index spec for GC %s", RedisModule_StringPtrLen(gc->keyName, NULL)); *status = SPEC_STATUS_INVALID; goto end; } IndexSpec *spec = sctx->spec; RedisModuleString *keyName = getRandomFieldByType(spec, FIELD_TAG); if (!keyName) { goto end; } TagIndex *indexTag = TagIndex_Open(ctx, keyName, false, &idxKey); if (!indexTag) { goto end; } InvertedIndex *iv; char *randomKey; tm_len_t len; if (!TrieMap_RandomKey(indexTag->values, &randomKey, &len, (void **)&iv)) { goto end; } int blockNum = 0; do { size_t bytesCollected = 0; size_t recordsRemoved = 0; // repair 100 blocks at once IndexRepairParams params = {.limit = RSGlobalConfig.gcScanSize, .arg = NULL}; blockNum = InvertedIndex_Repair(iv, &sctx->spec->docs, blockNum, ¶ms); /// update the statistics with the the number of records deleted totalRemoved += recordsRemoved; gc_updateStats(sctx, gc, recordsRemoved, bytesCollected); // blockNum 0 means error or we've finished if (!blockNum) break; // After each iteration we yield execution // First we close the relevant keys we're touching RedisModule_CloseKey(idxKey); sctx = SearchCtx_Refresh(sctx, (RedisModuleString *)gc->keyName); // sctx null --> means it was deleted and we need to stop right now if (!sctx || sctx->spec->unique_id != gc->spec_unique_id) { *status = SPEC_STATUS_INVALID; break; } // reopen inverted index indexTag = TagIndex_Open(ctx, keyName, false, &idxKey); if (!indexTag) { break; } iv = TrieMap_Find(indexTag->values, randomKey, len); if (iv == TRIEMAP_NOTFOUND) { break; } } while (true); end: if (idxKey) RedisModule_CloseKey(idxKey); if (sctx) { RedisModule_CloseKey(sctx->key); SearchCtx_Free(sctx); } return totalRemoved; } size_t gc_NumericIndex(RedisModuleCtx *ctx, GarbageCollectorCtx *gc, int *status) { size_t totalRemoved = 0; RedisModuleKey *idxKey = NULL; FieldSpec **numericFields = NULL; RedisSearchCtx *sctx = NewSearchCtx(ctx, (RedisModuleString *)gc->keyName); if (!sctx || sctx->spec->unique_id != gc->spec_unique_id) { RedisModule_Log(ctx, "warning", "No index spec for GC %s", RedisModule_StringPtrLen(gc->keyName, NULL)); *status = SPEC_STATUS_INVALID; goto end; } IndexSpec *spec = sctx->spec; // find all the numeric fields numericFields = getFieldsByType(spec, FIELD_NUMERIC); if (array_len(numericFields) == 0) { goto end; } if (array_len(numericFields) != array_len(gc->numericGCCtx)) { // add all numeric fields to our gc assert(array_len(numericFields) > array_len(gc->numericGCCtx)); // it is not possible to remove fields gc_FreeNumericGcCtxArray(gc); for (int i = 0; i < array_len(numericFields); ++i) { RedisModuleString *keyName = IndexSpec_GetFormattedKey(spec, numericFields[i]); NumericRangeTree *rt = OpenNumericIndex(sctx, keyName, &idxKey); // if we could not open the numeric field we probably have a // corruption in our data, better to know it now. assert(rt); gc->numericGCCtx = array_append(gc->numericGCCtx, gc_NewNumericGcCtx(rt)); if (idxKey) RedisModule_CloseKey(idxKey); } } // choose random numeric gc ctx int randomIndex = rand() % array_len(gc->numericGCCtx); NumericFieldGCCtx *numericGcCtx = gc->numericGCCtx[randomIndex]; // open the relevent numeric index to check that our pointer is valid RedisModuleString *keyName = IndexSpec_GetFormattedKey(spec, numericFields[randomIndex]); NumericRangeTree *rt = OpenNumericIndex(sctx, keyName, &idxKey); if (idxKey) RedisModule_CloseKey(idxKey); if (numericGcCtx->rt != rt || numericGcCtx->revisionId != numericGcCtx->rt->revisionId) { // memory or revision changed, recreating our numeric gc ctx assert(numericGcCtx->rt != rt || numericGcCtx->revisionId < numericGcCtx->rt->revisionId); gc->numericGCCtx[randomIndex] = gc_NewNumericGcCtx(rt); gc_FreeNumericGcCtx(numericGcCtx); numericGcCtx = gc->numericGCCtx[randomIndex]; } NumericRangeNode *nextNode = NextGcNode(numericGcCtx); int blockNum = 0; do { IndexRepairParams params = {.limit = RSGlobalConfig.gcScanSize, .arg = nextNode->range}; // repair 100 blocks at once blockNum = InvertedIndex_Repair(nextNode->range->entries, &sctx->spec->docs, blockNum, ¶ms); /// update the statistics with the the number of records deleted numericGcCtx->rt->numEntries -= params.docsCollected; totalRemoved += params.docsCollected; gc_updateStats(sctx, gc, params.docsCollected, params.bytesCollected); // blockNum 0 means error or we've finished if (!blockNum) break; sctx = SearchCtx_Refresh(sctx, (RedisModuleString *)gc->keyName); // sctx null --> means it was deleted and we need to stop right now if (!sctx || sctx->spec->unique_id != gc->spec_unique_id) { *status = SPEC_STATUS_INVALID; break; } if (numericGcCtx->revisionId != numericGcCtx->rt->revisionId) { break; } } while (true); end: if (numericFields) { array_free(numericFields); } if (sctx) { RedisModule_CloseKey(sctx->key); SearchCtx_Free(sctx); } return totalRemoved; } /* The GC periodic callback, called in a separate thread. It selects a random term (using weighted * random) */ static int gc_periodicCallback(RedisModuleCtx *ctx, void *privdata) { int status = SPEC_STATUS_OK; RedisModule_AutoMemory(ctx); RedisModule_ThreadSafeContextLock(ctx); GarbageCollectorCtx *gc = privdata; assert(gc); // Check if RDB is loading - not needed after the first time we find out that rdb is not reloading if (gc->rdbPossiblyLoading) { if (isRdbLoading(ctx)) { RedisModule_Log(ctx, "notice", "RDB Loading in progress, not performing GC"); goto end; } else { // the RDB will not load again, so it's safe to ignore the info check in the next cycles gc->rdbPossiblyLoading = 0; } } size_t totalRemoved = 0; totalRemoved += gc_RandomTerm(ctx, gc, &status); totalRemoved += gc_NumericIndex(ctx, gc, &status); totalRemoved += gc_TagIndex(ctx, gc, &status); gc->stats.numCycles++; gc->stats.effectiveCycles += totalRemoved > 0 ? 1 : 0; // if we didn't remove anything - reduce the frequency a bit. // if we did - increase the frequency a bit if (gc->timer) { // the timer is NULL if we've been cancelled if (totalRemoved > 0) { gc->hz = MIN(gc->hz * 1.2, GC_MAX_HZ); } else { gc->hz = MAX(gc->hz * 0.99, GC_MIN_HZ); } RMUtilTimer_SetInterval(gc->timer, hzToTimeSpec(gc->hz)); } end: RedisModule_ThreadSafeContextUnlock(ctx); return status == SPEC_STATUS_OK; } /* Termination callback for the GC. Called after we stop, and frees up all the resources. */ static void gc_onTerm(void *privdata) { GarbageCollectorCtx *gc = privdata; RedisModuleCtx *ctx = RedisModule_GetThreadSafeContext(NULL); RedisModule_ThreadSafeContextLock(ctx); RedisModule_FreeString(ctx, (RedisModuleString *)gc->keyName); for (int i = 0; i < array_len(gc->numericGCCtx); ++i) { gc_FreeNumericGcCtx(gc->numericGCCtx[i]); } array_free(gc->numericGCCtx); RedisModule_ThreadSafeContextUnlock(ctx); RedisModule_FreeThreadSafeContext(ctx); free(gc); } // Start the collector thread int GC_Start(GarbageCollectorCtx *ctx) { assert(ctx->timer == NULL); ctx->timer = RMUtil_NewPeriodicTimer(gc_periodicCallback, gc_onTerm, ctx, hzToTimeSpec(ctx->hz)); return REDISMODULE_OK; } /* Stop the garbage collector, and call its termination function asynchronously when its thread is * finished. This also frees the resources allocated for the GC context */ int GC_Stop(GarbageCollectorCtx *ctx) { if (ctx->timer) { RMUtilTimer_Terminate(ctx->timer); // set the timer to NULL so we won't call this twice ctx->timer = NULL; return REDISMODULE_ERR; } return REDISMODULE_OK; } // get the current stats from the collector const GCStats *GC_GetStats(GarbageCollectorCtx *ctx) { if (!ctx) return NULL; return &ctx->stats; } // called externally when the user deletes a document to hint at increasing the HZ void GC_OnDelete(GarbageCollectorCtx *ctx) { if (!ctx) return; ctx->hz = MIN(ctx->hz * 1.5, GC_MAX_HZ); } void GC_RenderStats(RedisModuleCtx *ctx, GarbageCollectorCtx *gc) { #define REPLY_KVNUM(n, k, v) \ RedisModule_ReplyWithSimpleString(ctx, k); \ RedisModule_ReplyWithDouble(ctx, (double)v); \ n += 2 int n = 0; RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); if (gc) { REPLY_KVNUM(n, "current_hz", gc->hz); REPLY_KVNUM(n, "bytes_collected", gc->stats.totalCollected); REPLY_KVNUM(n, "effectiv_cycles_rate", (double)gc->stats.effectiveCycles / (double)(gc->stats.numCycles ? gc->stats.numCycles : 1)); } RedisModule_ReplySetArrayLength(ctx, n); } RediSearch-1.2.2/src/gc.h000066400000000000000000000032061364126773500150750ustar00rootroot00000000000000#ifndef RS_GARBAGE_COLLECTOR_H_ #define RS_GARBAGE_COLLECTOR_H_ #include "redismodule.h" #include "rmutil/periodic.h" // the maximum frequency we are allowed to run in #define GC_MAX_HZ 100 #define GC_MIN_HZ 1 #define GC_DEFAULT_HZ 10 #define NUM_CYCLES_HISTORY 10 typedef struct { // total bytes collected by the GC size_t totalCollected; // number of cycle ran size_t numCycles; // the number of cycles that collected anything size_t effectiveCycles; // the collection result of the last N cycles. // this is a cyclical buffer size_t history[NUM_CYCLES_HISTORY]; // the offset in the history cyclical buffer int historyOffset; } GCStats; #ifndef RS_GC_C_ typedef struct GarbageCollectorCtx GarbageCollectorCtx; /* Create a new garbage collector, with a string for the index name, and initial frequency */ GarbageCollectorCtx *NewGarbageCollector(const RedisModuleString *k, float initial_hz, uint64_t spec_unique_id); // Start the collector thread int GC_Start(GarbageCollectorCtx *ctx); /* Stop the garbage collector, and call its termination function asynchronously when its thread is * finished. This also frees the resources allocated for the GC context */ int GC_Stop(GarbageCollectorCtx *ctx); // get the current stats from the collector const struct GCStats *GC_GetStats(GarbageCollectorCtx *ctx); // called externally when the user deletes a document to hint at increasing the HZ void GC_OnDelete(GarbageCollectorCtx *ctx); /* Render the GC stats to a redis connection, used by FT.INFO */ void GC_RenderStats(RedisModuleCtx *ctx, GarbageCollectorCtx *gc); #endif // RS_GC_C_ #endif RediSearch-1.2.2/src/geo_index.c000066400000000000000000000113221364126773500164360ustar00rootroot00000000000000#include "index.h" #include "geo_index.h" #include "rmutil/util.h" #include "rmalloc.h" #include "id_list.h" RedisModuleString *fmtGeoIndexKey(GeoIndex *gi) { return RedisModule_CreateStringPrintf(gi->ctx->redisCtx, GEOINDEX_KEY_FMT, gi->ctx->spec->name, gi->sp->name); } /* Add a docId to a geoindex key. Right now we just use redis' own GEOADD */ int GeoIndex_AddStrings(GeoIndex *gi, t_docId docId, char *slon, char *slat) { RedisModuleString *ks = fmtGeoIndexKey(gi); RedisModuleCtx *ctx = gi->ctx->redisCtx; /* GEOADD key longitude latitude member*/ RedisModuleCallReply *rep = RedisModule_Call(ctx, "GEOADD", "sccs", ks, slon, slat, RedisModule_CreateStringFromLongLong(ctx, (long long)docId)); RedisModule_FreeString(gi->ctx->redisCtx, ks); if (rep == NULL) { return REDISMODULE_ERR; } int repType = RedisModule_CallReplyType(rep); RedisModule_FreeCallReply(rep); if (repType == REDISMODULE_REPLY_ERROR) { return REDISMODULE_ERR; } else { return REDISMODULE_OK; } } /* Parse a geo filter from redis arguments. We assume the filter args start at argv[0], and FILTER * is not passed to us. * The GEO filter syntax is (FILTER) LONG LAT DIST m|km|ft|mi * Returns REDISMODUEL_OK or ERR */ int GeoFilter_Parse(GeoFilter *gf, RedisModuleString **argv, int argc) { gf->property = NULL; gf->lat = 0; gf->lon = 0; gf->unit = NULL; gf->radius = 0; if (argc != 5) { return REDISMODULE_ERR; } if (RMUtil_ParseArgs(argv, argc, 0, "cdddc", &gf->property, &gf->lon, &gf->lat, &gf->radius, &gf->unit) == REDISMODULE_ERR) { // don't dup the strings since we are exiting now if (gf->property) gf->property = NULL; if (gf->unit) gf->unit = NULL; return REDISMODULE_ERR; } gf->property = gf->property ? strdup(gf->property) : NULL; gf->unit = gf->unit ? strdup(gf->unit) : NULL; // verify unit if (!gf->unit || (strcasecmp(gf->unit, "m") && strcasecmp(gf->unit, "km") && strcasecmp(gf->unit, "ft") && strcasecmp(gf->unit, "mi"))) { // printf("wrong unit %s\n", gf->unit); return REDISMODULE_ERR; } return REDISMODULE_OK; } void GeoFilter_Free(GeoFilter *gf) { if (gf->property) free((char *)gf->property); if (gf->unit) free((char *)gf->unit); free(gf); } static int cmp_docids(const void *p1, const void *p2) { const t_docId *d1 = p1, *d2 = p2; return (int)(*d1 - *d2); } t_docId *__gr_load(GeoIndex *gi, GeoFilter *gf, size_t *num) { *num = 0; /*GEORADIUS key longitude latitude radius m|km|ft|mi */ RedisModuleCtx *ctx = gi->ctx->redisCtx; RedisModuleString *ks = fmtGeoIndexKey(gi); RedisModuleCallReply *rep = RedisModule_Call( gi->ctx->redisCtx, "GEORADIUS", "ssssc", ks, RedisModule_CreateStringPrintf(ctx, "%f", gf->lon), RedisModule_CreateStringPrintf(ctx, "%f", gf->lat), RedisModule_CreateStringPrintf(ctx, "%f", gf->radius), gf->unit ? gf->unit : "km"); if (rep == NULL || RedisModule_CallReplyType(rep) != REDISMODULE_REPLY_ARRAY) { return NULL; } size_t sz = RedisModule_CallReplyLength(rep); t_docId *docIds = rm_calloc(sz, sizeof(t_docId)); for (size_t i = 0; i < sz; i++) { const char *s = RedisModule_CallReplyStringPtr(RedisModule_CallReplyArrayElement(rep, i), NULL); if (!s) continue; docIds[i] = (t_docId)atol(s); } *num = sz; return docIds; } IndexIterator *NewGeoRangeIterator(GeoIndex *gi, GeoFilter *gf, double weight) { size_t sz; t_docId *docIds = __gr_load(gi, gf, &sz); if (!docIds) { return NULL; } IndexIterator *ret = NewIdListIterator(docIds, (t_offset)sz, weight); rm_free(docIds); return ret; } /* Create a geo filter from parsed strings and numbers */ GeoFilter *NewGeoFilter(double lon, double lat, double radius, const char *unit) { GeoFilter *gf = malloc(sizeof(*gf)); *gf = (GeoFilter){ .lon = lon, .lat = lat, .radius = radius, .unit = unit, }; return gf; } /* Make sure that the parameters of the filter make sense - i.e. coordinates are in range, radius is * sane, unit is valid. Return 1 if valid, 0 if not, and set the error string into err */ int GeoFilter_IsValid(GeoFilter *gf, char **err) { if (!gf->unit || (strcasecmp(gf->unit, "m") && strcasecmp(gf->unit, "km") && strcasecmp(gf->unit, "ft") && strcasecmp(gf->unit, "mi"))) { if (err) *err = "Invalid GeoFilter unit"; return 0; } // validate lat/lon if (gf->lat > 90 || gf->lat < -90 || gf->lon > 180 || gf->lon < -180) { if (err) *err = "Invalid GeoFilter lat/lon"; return 0; } // validate radius if (gf->radius <= 0) { if (err) *err = "Invalid GeoFilter radius"; return 0; } return 1; } RediSearch-1.2.2/src/geo_index.h000066400000000000000000000022311364126773500164420ustar00rootroot00000000000000#ifndef __GEO_INDEX_H__ #define __GEO_INDEX_H__ #include "redisearch.h" #include "redismodule.h" #include "index_result.h" #include "index_iterator.h" #include "search_ctx.h" typedef struct geoIndex { RedisSearchCtx *ctx; const FieldSpec *sp; } GeoIndex; #define GEOINDEX_KEY_FMT "geo:%s/%s" int GeoIndex_AddStrings(GeoIndex *gi, t_docId docId, char *slon, char *slat); typedef struct geoFilter { const char *property; double lat; double lon; double radius; const char *unit; } GeoFilter; /* Create a geo filter from parsed strings and numbers */ GeoFilter *NewGeoFilter(double lon, double lat, double radius, const char *unit); /* Make sure that the parameters of the filter make sense - i.e. coordinates are in range, radius is * sane, unit is valid. Return 1 if valid, 0 if not, and set the error string into err */ int GeoFilter_IsValid(GeoFilter *f, char **err); /* Parse a geo filter from redis arguments. We assume the filter args start at argv[0] */ int GeoFilter_Parse(GeoFilter *gf, RedisModuleString **argv, int argc); void GeoFilter_Free(GeoFilter *gf); IndexIterator *NewGeoRangeIterator(GeoIndex *gi, GeoFilter *gf, double weight); #endifRediSearch-1.2.2/src/highlight.h000066400000000000000000000003061364126773500164510ustar00rootroot00000000000000#ifndef HIGHLIGHT_H_ #define HIGHLIGHT_H_ #include "result_processor.h" #include "search_request.h" ResultProcessor *NewHighlightProcessor(ResultProcessor *upstream, RSSearchRequest *req); #endifRediSearch-1.2.2/src/highlight_processor.c000066400000000000000000000265671364126773500205640ustar00rootroot00000000000000#include "result_processor.h" #include "search_request.h" #include "highlight.h" #include "fragmenter.h" #include "value.h" #include "util/minmax.h" #include "toksep.h" #include typedef struct { int fragmentizeOptions; const FieldList *fields; } hlpContext; /** * Common parameters passed around for highlighting one or more fields within * a document. This structure exists to avoid passing these four parameters * discreetly (as we did in previous versiosn) */ typedef struct { // Byte offsets, byte-wise RSByteOffsets *byteOffsets; // Index result, which contains the term offsets (word-wise) RSIndexResult *indexResult; // in-out for search results RSFieldMap **fields; // Array used for in/out when writing fields. Optimization cache Array *iovsArr; } hlpDocContext; /** * Attempts to fragmentize a single field from its offset entries. This takes * the field name, gets the matching field ID, retrieves the offset iterator * for the field ID, and fragments the text based on the offsets. The fragmenter * itself is in fragmenter.{c,h} * * Returns true if the fragmentation succeeded, false otherwise. */ static int fragmentizeOffsets(IndexSpec *spec, const char *fieldName, const char *fieldText, size_t fieldLen, RSIndexResult *indexResult, RSByteOffsets *byteOffsets, FragmentList *fragList, int options) { const FieldSpec *fs = IndexSpec_GetField(spec, fieldName, strlen(fieldName)); if (!fs || fs->type != FIELD_FULLTEXT) { return 0; } int rc = 0; RSOffsetIterator offsIter = RSIndexResult_IterateOffsets(indexResult); FragmentTermIterator fragIter = {NULL}; RSByteOffsetIterator bytesIter; if (RSByteOffset_Iterate(byteOffsets, fs->textOpts.id, &bytesIter) != REDISMODULE_OK) { goto done; } FragmentTermIterator_InitOffsets(&fragIter, &bytesIter, &offsIter); FragmentList_FragmentizeIter(fragList, fieldText, fieldLen, &fragIter, options); if (fragList->numFrags == 0) { goto done; } rc = 1; done: offsIter.Free(offsIter.ctx); return rc; } // Strip spaces from a buffer in place. Returns the new length of the text, // with all duplicate spaces stripped and converted to a single ' '. static size_t stripDuplicateSpaces(char *s, size_t n) { int isLastSpace = 0; size_t oix = 0; char *out = s; for (size_t ii = 0; ii < n; ++ii) { if (isspace(s[ii])) { if (isLastSpace) { continue; } else { isLastSpace = 1; out[oix++] = ' '; } } else { isLastSpace = 0; out[oix++] = s[ii]; } } return oix; } static void normalizeSettings(const char *name, const ReturnedField *srcField, const ReturnedField *defaults, ReturnedField *out) { if (srcField == NULL) { // Global setting *out = *defaults; out->name = (char *)name; return; } // Otherwise it gets more complex if ((defaults->mode & SummarizeMode_Highlight) && (srcField->mode & SummarizeMode_Highlight) == 0) { out->highlightSettings = defaults->highlightSettings; } else if (srcField->mode && SummarizeMode_Highlight) { out->highlightSettings = srcField->highlightSettings; } if ((defaults->mode & SummarizeMode_Synopsis) && (srcField->mode & SummarizeMode_Synopsis) == 0) { out->summarizeSettings = defaults->summarizeSettings; } else { out->summarizeSettings = srcField->summarizeSettings; } out->mode |= defaults->mode | srcField->mode; out->name = (char *)name; } // Called when we cannot fragmentize based on byte offsets. // docLen is an in/out parameter. On input it should contain the length of the // field, and on output it contains the length of the trimmed summary. // Returns a string which should be freed using free() static char *trimField(const ReturnedField *fieldInfo, const char *docStr, size_t *docLen, size_t estWordSize) { // Number of desired fragments times the number of context words in each fragments, // in characters (estWordSize) size_t headLen = fieldInfo->summarizeSettings.contextLen * fieldInfo->summarizeSettings.numFrags * estWordSize; headLen += estWordSize; // Because we trim off a word when finding the toksep headLen = Min(headLen, *docLen); Array bufTmp; Array_InitEx(&bufTmp, ArrayAlloc_LibC); Array_Write(&bufTmp, docStr, headLen); headLen = stripDuplicateSpaces(bufTmp.data, headLen); Array_Resize(&bufTmp, headLen); while (bufTmp.len > 1) { if (istoksep(bufTmp.data[--bufTmp.len])) { --bufTmp.len; break; } } return Array_Steal(&bufTmp, docLen); } static void summarizeField(IndexSpec *spec, const ReturnedField *fieldInfo, const char *fieldName, RSValue *returnedField, hlpDocContext *docParams, int options) { FragmentList frags; FragmentList_Init(&frags, 8, 6); // Start gathering the terms HighlightTags tags = {.openTag = fieldInfo->highlightSettings.openTag, .closeTag = fieldInfo->highlightSettings.closeTag}; // First actually generate the fragments size_t docLen; const char *docStr = RSValue_StringPtrLen(returnedField, &docLen); if (docParams->byteOffsets == NULL || !fragmentizeOffsets(spec, fieldName, docStr, docLen, docParams->indexResult, docParams->byteOffsets, &frags, options)) { if (fieldInfo->mode == SummarizeMode_Synopsis) { // If summarizing is requested then trim the field so that the user isn't // spammed with a large blob of text char *summarized = trimField(fieldInfo, docStr, &docLen, frags.estAvgWordSize); RSFieldMap_Set(docParams->fields, fieldName, RS_StringVal(summarized, docLen)); } else { // Otherwise, just return the whole field, but without highlighting } FragmentList_Free(&frags); return; } // Highlight only if (fieldInfo->mode == SummarizeMode_Highlight) { // No need to return snippets; just return the entire doc with relevant tags // highlighted. char *hlDoc = FragmentList_HighlightWholeDocS(&frags, &tags); RSFieldMap_Set(docParams->fields, fieldName, RS_StringValC(hlDoc)); FragmentList_Free(&frags); return; } size_t numIovArr = Min(fieldInfo->summarizeSettings.numFrags, FragmentList_GetNumFrags(&frags)); for (size_t ii = 0; ii < numIovArr; ++ii) { Array_Resize(&docParams->iovsArr[ii], 0); } FragmentList_HighlightFragments(&frags, &tags, fieldInfo->summarizeSettings.contextLen, docParams->iovsArr, numIovArr, HIGHLIGHT_ORDER_SCOREPOS); // Buffer to store concatenated fragments Array bufTmp; Array_InitEx(&bufTmp, ArrayAlloc_LibC); for (size_t ii = 0; ii < numIovArr; ++ii) { Array *curIovs = docParams->iovsArr + ii; struct iovec *iovs = ARRAY_GETARRAY_AS(curIovs, struct iovec *); size_t numIovs = ARRAY_GETSIZE_AS(curIovs, struct iovec); size_t lastSize = bufTmp.len; for (size_t jj = 0; jj < numIovs; ++jj) { Array_Write(&bufTmp, iovs[jj].iov_base, iovs[jj].iov_len); } // Duplicate spaces for the current snippet are eliminated here. We shouldn't // move it to the end because the delimiter itself may contain a special kind // of whitespace. size_t newSize = stripDuplicateSpaces(bufTmp.data + lastSize, bufTmp.len - lastSize); Array_Resize(&bufTmp, lastSize + newSize); Array_Write(&bufTmp, fieldInfo->summarizeSettings.separator, strlen(fieldInfo->summarizeSettings.separator)); } // Set the string value to the contents of the array. It might be nice if we didn't // need to strndup it. size_t hlLen; char *hlText = Array_Steal(&bufTmp, &hlLen); RSFieldMap_Set(docParams->fields, fieldName, RS_StringVal(hlText, hlLen)); Array_Free(&bufTmp); FragmentList_Free(&frags); } static void resetIovsArr(Array **iovsArrp, size_t *curSize, size_t newSize) { if (*curSize < newSize) { *iovsArrp = realloc(*iovsArrp, sizeof(**iovsArrp) * newSize); } for (size_t ii = 0; ii < *curSize; ++ii) { Array_Resize((*iovsArrp) + ii, 0); } for (size_t ii = *curSize; ii < newSize; ++ii) { Array_Init((*iovsArrp) + ii); } *curSize = newSize; } static void processField(ResultProcessorCtx *ctx, hlpDocContext *docParams, ReturnedField *spec) { const char *fName = spec->name; RSValue *fieldValue = RSFieldMap_Get(*docParams->fields, fName); // Check if we have the value for this field. // TODO: Might this be 'RSValue_String' later on? if (fieldValue == NULL || !RSValue_IsString(fieldValue)) { RSFieldMap_Set(docParams->fields, fName, RS_NullVal()); return; } hlpContext *hlpCtx = ctx->privdata; summarizeField(RP_SPEC(ctx), spec, fName, fieldValue, docParams, hlpCtx->fragmentizeOptions); } static RSIndexResult *getIndexResult(QueryProcessingCtx *ctx, t_docId docId) { RSIndexResult *ir = NULL; if (ctx->rootFilter) { ctx->rootFilter->Rewind(ctx->rootFilter->ctx); if (INDEXREAD_OK != ctx->rootFilter->SkipTo(ctx->rootFilter->ctx, docId, &ir)) { return NULL; } } return ir; } static int hlp_Next(ResultProcessorCtx *ctx, SearchResult *r) { int rc = ResultProcessor_Next(ctx->upstream, r, 0); if (rc == RS_RESULT_EOF) { return rc; } // Get the index result for the current document from the root iterator. // The current result should not contain an index result RSIndexResult *ir = r->indexResult ? r->indexResult : getIndexResult(ctx->qxc, r->docId); // we can't work withot the inex result, just return QUEUED if (!ir) { return RS_RESULT_QUEUED; } size_t numIovsArr = 0; const hlpContext *hlpCtx = ctx->privdata; const FieldList *fields = hlpCtx->fields; RSDocumentMetadata *dmd = DocTable_Get(&RP_SPEC(ctx)->docs, r->docId); if (!dmd) { return RS_RESULT_QUEUED; } hlpDocContext docParams = { .byteOffsets = dmd->byteOffsets, .fields = &r->fields, .iovsArr = NULL, .indexResult = ir}; if (fields->numFields) { for (size_t ii = 0; ii < fields->numFields; ++ii) { if (fields->fields[ii].mode == SummarizeMode_None && fields->defaultField.mode == SummarizeMode_None) { // Ignore - this is a field for `RETURN`, not `SUMMARIZE` continue; } else { ReturnedField combinedSpec = {0}; normalizeSettings(fields->fields[ii].name, fields->fields + ii, &fields->defaultField, &combinedSpec); resetIovsArr(&docParams.iovsArr, &numIovsArr, combinedSpec.summarizeSettings.numFrags); processField(ctx, &docParams, &combinedSpec); } } } else if (fields->defaultField.mode != SummarizeMode_None) { for (size_t ii = 0; ii < r->fields->len; ++ii) { ReturnedField spec = {0}; normalizeSettings(r->fields->fields[ii].key, NULL, &fields->defaultField, &spec); resetIovsArr(&docParams.iovsArr, &numIovsArr, spec.summarizeSettings.numFrags); processField(ctx, &docParams, &spec); } } for (size_t ii = 0; ii < numIovsArr; ++ii) { Array_Free(&docParams.iovsArr[ii]); } free(docParams.iovsArr); return RS_RESULT_OK; } ResultProcessor *NewHighlightProcessor(ResultProcessor *parent, RSSearchRequest *req) { hlpContext *hlpCtx = calloc(1, sizeof(*hlpCtx)); hlpCtx->fields = &req->opts.fields; if (req->opts.language && strcasecmp(req->opts.language, "chinese") == 0) { hlpCtx->fragmentizeOptions = FRAGMENTIZE_TOKLEN_EXACT; } ResultProcessor *rp = NewResultProcessor(parent, hlpCtx); rp->Next = hlp_Next; rp->Free = ResultProcessor_GenericFree; return rp; }RediSearch-1.2.2/src/id_filter.c000066400000000000000000000016551364126773500164460ustar00rootroot00000000000000#include "id_filter.h" #include "doc_table.h" #include "rmalloc.h" #include "id_list.h" /* Create a new IdFilter from a list of redis strings. count is the number of strings, guaranteed to * be less than or equal to the length of args */ IdFilter *NewIdFilter(RedisModuleString **args, int count, DocTable *dt) { IdFilter *ret = malloc(sizeof(*ret)); *ret = (IdFilter){.ids = NULL, .keys = args, .size = 0}; if (count <= 0) { return ret; } ret->ids = calloc(count, sizeof(t_docId)); for (int i = 0; i < count; i++) { t_docId did = DocTable_GetId(dt, MakeDocKeyR(args[i])); if (did) { ret->ids[ret->size++] = did; } } return ret; } void IdFilter_Free(IdFilter *f) { if (f->ids) { free(f->ids); f->ids = NULL; } free(f); } IndexIterator *NewIdFilterIterator(IdFilter *f) { if (f->ids == NULL || f->size == 0) { return NULL; } return NewIdListIterator(f->ids, f->size, 1); }RediSearch-1.2.2/src/id_filter.h000066400000000000000000000015631364126773500164510ustar00rootroot00000000000000#ifndef __ID_FILTER_H__ #define __ID_FILTER_H__ #include "redismodule.h" #include "index_iterator.h" #include "doc_table.h" /* An IdFilter is a generic filter that limits the results of a query to a given set of ids. It is * created from a list of keys in the index */ typedef struct idFilter { t_docId *ids; RedisModuleString **keys; t_offset size; } IdFilter; /* Create a new IdFilter from a list of redis strings. count is the number of strings, guaranteed to * be less than or equal to the length of args */ IdFilter *NewIdFilter(RedisModuleString **args, int count, DocTable *dt); /* Free the filter's internal data, but not the filter itself, that is allocated on the stack */ void IdFilter_Free(IdFilter *f); /** Return a new id filter iterator from a filter. If no ids are in the filter, we return NULL */ IndexIterator *NewIdFilterIterator(IdFilter *f); #endif RediSearch-1.2.2/src/id_list.c000066400000000000000000000063331364126773500161320ustar00rootroot00000000000000#include "index_result.h" #include "index_iterator.h" #include "rmalloc.h" #include "id_list.h" /* Read the next entry from the iterator, into hit *e. * Returns INDEXREAD_EOF if at the end */ int IL_Read(void *ctx, RSIndexResult **r) { IdListIterator *it = ctx; if (it->atEOF || it->offset >= it->size) { it->atEOF = 1; return INDEXREAD_EOF; } it->lastDocId = it->docIds[it->offset++]; // TODO: Filter here it->res->docId = it->lastDocId; *r = it->res; return INDEXREAD_OK; } void IL_Abort(void *ctx) { ((IdListIterator *)ctx)->atEOF = 1; } /* Skip to a docid, potentially reading the entry into hit, if the docId * matches */ int IL_SkipTo(void *ctx, t_docId docId, RSIndexResult **r) { IdListIterator *it = ctx; if (it->atEOF || it->offset >= it->size) { return INDEXREAD_EOF; } if (docId > it->docIds[it->size - 1]) { it->atEOF = 1; return INDEXREAD_EOF; } t_offset top = it->size - 1, bottom = it->offset; t_offset i = bottom; while (bottom <= top) { t_docId did = it->docIds[i]; if (did == docId) { break; } if (docId < did) { if (i == 0) break; top = i - 1; } else { bottom = i + 1; } i = (bottom + top) / 2; } it->offset = i + 1; if (it->offset >= it->size) { it->atEOF = 1; } it->lastDocId = it->docIds[i]; it->res->docId = it->lastDocId; *r = it->res; if (it->lastDocId == docId) { return INDEXREAD_OK; } return INDEXREAD_NOTFOUND; } /* the last docId read */ t_docId IL_LastDocId(void *ctx) { return ((IdListIterator *)ctx)->lastDocId; } /* can we continue iteration? */ int IL_HasNext(void *ctx) { return !((IdListIterator *)ctx)->atEOF; } RSIndexResult *IL_Current(void *ctx) { return ((IdListIterator *)ctx)->res; } /* release the iterator's context and free everything needed */ void IL_Free(struct indexIterator *self) { IdListIterator *it = self->ctx; IndexResult_Free(it->res); rm_free(it->docIds); rm_free(it); rm_free(self); } /* Return the number of results in this iterator. Used by the query execution * on the top iterator */ size_t IL_Len(void *ctx) { return (size_t)((IdListIterator *)ctx)->size; } static int cmp_docids(const void *p1, const void *p2) { const t_docId *d1 = p1, *d2 = p2; return (int)(*d1 - *d2); } void IL_Rewind(void *p) { IdListIterator *il = p; il->atEOF = 0; il->lastDocId = 0; il->res->docId = 0; il->offset = 0; } IndexIterator *NewIdListIterator(t_docId *ids, t_offset num, double weight) { // first sort the ids, so the caller will not have to deal with it qsort(ids, (size_t)num, sizeof(t_docId), cmp_docids); IdListIterator *it = rm_new(IdListIterator); it->size = num; it->docIds = rm_calloc(num, sizeof(t_docId)); if (num > 0) memcpy(it->docIds, ids, num * sizeof(t_docId)); it->atEOF = 0; it->lastDocId = 0; it->res = NewVirtualResult(weight); it->res->fieldMask = RS_FIELDMASK_ALL; it->offset = 0; IndexIterator *ret = rm_new(IndexIterator); ret->ctx = it; ret->Free = IL_Free; ret->HasNext = IL_HasNext; ret->LastDocId = IL_LastDocId; ret->Len = IL_Len; ret->Read = IL_Read; ret->Current = IL_Current; ret->SkipTo = IL_SkipTo; ret->Abort = IL_Abort; ret->Rewind = IL_Rewind; return ret; } RediSearch-1.2.2/src/id_list.h000066400000000000000000000012441364126773500161330ustar00rootroot00000000000000#ifndef __ID_LIST_H__ #define __ID_LIST_H__ #include "index_iterator.h" /* A generic iterator over a pre-sorted list of document ids. This is used by the geo index and the * id filter. */ typedef struct { t_docId *docIds; t_docId lastDocId; t_offset size; t_offset offset; int atEOF; RSIndexResult *res; } IdListIterator; /* Create a new IdListIterator from a pre populated list of document ids of size num. The doc ids * are sorted in this function, so there is no need to sort them. They are automatically freed in * the end and assumed to be allocated using rm_malloc */ IndexIterator *NewIdListIterator(t_docId *ids, t_offset num, double weight); #endifRediSearch-1.2.2/src/index.c000066400000000000000000000574671364126773500156300ustar00rootroot00000000000000#include "forward_index.h" #include "index.h" #include "varint.h" #include "spec.h" #include #include #include #include #include #include #include "rmalloc.h" static RSIndexResult *UI_Current(void *ctx); static int UI_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit); static int UI_Next(void *ctx); static int UI_Read(void *ctx, RSIndexResult **hit); static int UI_HasNext(void *ctx); static size_t UI_Len(void *ctx); static int II_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit); static int II_Next(void *ctx); static int II_Read(void *ctx, RSIndexResult **hit); static int II_HasNext(void *ctx); static RSIndexResult *II_Current(void *ctx); static size_t II_Len(void *ctx); static t_docId II_LastDocId(void *ctx); static inline t_docId UI_LastDocId(void *ctx) { return ((UnionContext *)ctx)->minDocId; } static void UI_Abort(void *ctx) { UnionContext *it = ctx; it->atEnd = 1; for (int i = 0; i < it->num; i++) { if (it->its[i]) { it->its[i]->Abort(it->its[i]->ctx); } } } static void UI_Rewind(void *ctx) { UnionContext *ui = ctx; ui->atEnd = 0; ui->minDocId = 0; ui->pos = 0; ui->current->docId = 0; // rewind all child iterators for (int i = 0; i < ui->num; i++) { ui->docIds[i] = 0; if (ui->its[i]) { ui->its[i]->Rewind(ui->its[i]->ctx); } } } IndexIterator *NewUnionIterator(IndexIterator **its, int num, DocTable *dt, int quickExit, double weight) { // create union context UnionContext *ctx = calloc(1, sizeof(UnionContext)); ctx->its = its; ctx->weight = weight; ctx->num = num; ctx->docTable = dt; ctx->atEnd = 0; ctx->docIds = calloc(num, sizeof(t_docId)); ctx->current = NewUnionResult(num, weight); ctx->len = 0; ctx->quickExit = quickExit; // bind the union iterator calls IndexIterator *it = malloc(sizeof(IndexIterator)); it->ctx = ctx; it->LastDocId = UI_LastDocId; it->Current = UI_Current; it->Read = UI_Read; it->SkipTo = UI_SkipTo; it->HasNext = UI_HasNext; it->Free = UnionIterator_Free; it->Len = UI_Len; it->Abort = UI_Abort; it->Rewind = UI_Rewind; return it; } static RSIndexResult *UI_Current(void *ctx) { return ((UnionContext *)ctx)->current; } static inline int UI_Read(void *ctx, RSIndexResult **hit) { UnionContext *ui = ctx; // nothing to do if (ui->num == 0 || ui->atEnd) { ui->atEnd = 1; return INDEXREAD_EOF; } int numActive = 0; AggregateResult_Reset(ui->current); do { // find the minimal iterator t_docId minDocId = UINT32_MAX; int minIdx = -1; numActive = 0; int rc = INDEXREAD_EOF; for (int i = 0; i < ui->num; i++) { IndexIterator *it = ui->its[i]; if (it == NULL || !it->HasNext(it->ctx)) continue; RSIndexResult *res = it->Current(it->ctx); rc = INDEXREAD_OK; // if this hit is behind the min id - read the next entry // printf("ui->docIds[%d]: %d, ui->minDocId: %d\n", i, ui->docIds[i], ui->minDocId); while (ui->docIds[i] <= ui->minDocId && rc != INDEXREAD_EOF) { rc = INDEXREAD_NOTFOUND; // read while we're not at the end and perhaps the flags do not match while (rc == INDEXREAD_NOTFOUND) { rc = it->Read(it->ctx, &res); ui->docIds[i] = res->docId; } } if (rc != INDEXREAD_EOF) { numActive++; } else { continue; } if (rc == INDEXREAD_OK && res->docId <= minDocId) { minDocId = res->docId; minIdx = i; } } // take the minimum entry and collect all results matching to it if (minIdx != -1) { UI_SkipTo(ui, ui->docIds[minIdx], hit); // return INDEXREAD_OK; ui->minDocId = ui->docIds[minIdx]; ui->len++; return INDEXREAD_OK; } } while (numActive > 0); ui->atEnd = 1; return INDEXREAD_EOF; } static int UI_Next(void *ctx) { // RSIndexResult h = NewIndexResult(); return UI_Read(ctx, NULL); } // return 1 if at least one sub iterator has next static int UI_HasNext(void *ctx) { UnionContext *u = ctx; return !u->atEnd; } /** Skip to the given docId, or one place after it @param ctx IndexReader context @param docId docId to seek to @param hit an index hit we put our reads into @return INDEXREAD_OK if found, INDEXREAD_NOTFOUND if not found, INDEXREAD_EOF if at EOF */ static int UI_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit) { UnionContext *ui = ctx; // printf("UI %p skipto %d\n", ui, docId); if (docId == 0) { return UI_Read(ctx, hit); } if (ui->atEnd) { return INDEXREAD_EOF; } // reset the current hitf AggregateResult_Reset(ui->current); ui->current->weight = ui->weight; int numActive = 0; int found = 0; int rc = INDEXREAD_EOF; const int num = ui->num; const int quickExit = ui->quickExit; t_docId minDocId = UINT32_MAX; IndexIterator *it; RSIndexResult *res; RSIndexResult *minResult = NULL; // skip all iterators to docId for (int i = 0; i < num; i++) { // this happens for non existent words if (NULL == (it = ui->its[i])) continue; if (!it->HasNext(it->ctx)) continue; res = NULL; // If the requested docId is larger than the last read id from the iterator, // we need to read an entry from the iterator, seeking to this docId if (ui->docIds[i] < docId) { if ((rc = it->SkipTo(it->ctx, docId, &res)) == INDEXREAD_EOF) { continue; } if (res) ui->docIds[i] = res->docId; } else { // if the iterator is ahead of docId - we avoid reading the entry // in this case, we are either past or at the requested docId, no need to actually read rc = (ui->docIds[i] == docId) ? INDEXREAD_OK : INDEXREAD_NOTFOUND; res = it->Current(it->ctx); } // if we've read successfully, update the minimal docId we've found if (ui->docIds[i] && rc != INDEXREAD_EOF) { if (ui->docIds[i] < minDocId || !minResult) { minResult = res; minDocId = ui->docIds[i]; } // sminDocId = MIN(ui->docIds[i], minDocId); } // we found a hit - continue to all results matching the same docId if (rc == INDEXREAD_OK) { // add the result to the aggregate result we are holding if (hit) { AggregateResult_AddChild(ui->current, res ? res : it->Current(it->ctx)); } ui->minDocId = ui->docIds[i]; ++found; } ++numActive; // If we've found a single entry and we are iterating in quick exit mode - exit now if (found && quickExit) break; } // all iterators are at the end if (numActive == 0) { ui->atEnd = 1; return INDEXREAD_EOF; } // copy our aggregate to the upstream hit *hit = ui->current; if (found > 0) { return INDEXREAD_OK; } if (minResult) { *hit = minResult; AggregateResult_AddChild(ui->current, minResult); } // not found... ui->minDocId = minDocId; return INDEXREAD_NOTFOUND; } void UnionIterator_Free(IndexIterator *it) { if (it == NULL) return; UnionContext *ui = it->ctx; for (int i = 0; i < ui->num; i++) { if (ui->its[i]) { ui->its[i]->Free(ui->its[i]); } } free(ui->docIds); IndexResult_Free(ui->current); free(ui->its); free(ui); free(it); } static size_t UI_Len(void *ctx) { return ((UnionContext *)ctx)->len; } void IntersectIterator_Free(IndexIterator *it) { if (it == NULL) return; IntersectContext *ui = it->ctx; for (int i = 0; i < ui->num; i++) { if (ui->its[i] != NULL) { ui->its[i]->Free(ui->its[i]); } // IndexResult_Free(&ui->currentHits[i]); } free(ui->docIds); IndexResult_Free(ui->current); free(ui->its); free(it->ctx); free(it); } static void II_Abort(void *ctx) { IntersectContext *it = ctx; it->atEnd = 1; for (int i = 0; i < it->num; i++) { if (it->its[i]) { it->its[i]->Abort(it->its[i]->ctx); } } } static void II_Rewind(void *ctx) { IntersectContext *ii = ctx; ii->atEnd = 0; ii->lastDocId = 0; // rewind all child iterators for (int i = 0; i < ii->num; i++) { ii->docIds[i] = 0; if (ii->its[i]) { ii->its[i]->Rewind(ii->its[i]->ctx); } } } IndexIterator *NewIntersecIterator(IndexIterator **its, int num, DocTable *dt, t_fieldMask fieldMask, int maxSlop, int inOrder, double weight) { IntersectContext *ctx = calloc(1, sizeof(IntersectContext)); ctx->its = its; ctx->num = num; ctx->lastDocId = 0; ctx->lastFoundId = 0; ctx->len = 0; ctx->maxSlop = maxSlop; ctx->inOrder = inOrder; ctx->fieldMask = fieldMask; ctx->atEnd = 0; ctx->weight = weight; ctx->docIds = calloc(num, sizeof(t_docId)); ctx->current = NewIntersectResult(num, weight); ctx->docTable = dt; // bind the iterator calls IndexIterator *it = malloc(sizeof(IndexIterator)); it->ctx = ctx; it->LastDocId = II_LastDocId; it->Read = II_Read; it->SkipTo = II_SkipTo; it->Current = II_Current; it->HasNext = II_HasNext; it->Len = II_Len; it->Free = IntersectIterator_Free; it->Abort = II_Abort; it->Rewind = II_Rewind; return it; } static RSIndexResult *II_Current(void *ctx) { return ((IntersectContext *)ctx)->current; } static int II_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit) { /* A seek with docId 0 is equivalent to a read */ if (docId == 0) { return II_Read(ctx, hit); } IntersectContext *ic = ctx; AggregateResult_Reset(ic->current); int nfound = 0; int rc = INDEXREAD_EOF; // skip all iterators to docId for (int i = 0; i < ic->num; i++) { IndexIterator *it = ic->its[i]; if (!it || !it->HasNext(it->ctx)) return INDEXREAD_EOF; RSIndexResult *res = it->Current(it->ctx); rc = INDEXREAD_OK; // only read if we are not already at the seek to position if (ic->docIds[i] != docId) { rc = it->SkipTo(it->ctx, docId, &res); if (rc != INDEXREAD_EOF) { if (res) ic->docIds[i] = res->docId; } } if (rc == INDEXREAD_EOF) { // we are at the end! ic->atEnd = 1; return rc; } else if (rc == INDEXREAD_OK) { // YAY! found! AggregateResult_AddChild(ic->current, res); ic->lastDocId = docId; ++nfound; } else if (ic->docIds[i] > ic->lastDocId) { ic->lastDocId = ic->docIds[i]; break; } } // unless we got an EOF - we put the current record into hit // if the requested id was found on all children - we return OK if (nfound == ic->num) { // printf("Skipto %d hit @%d\n", docId, ic->current->docId); // Update the last found id ic->lastFoundId = ic->current->docId; if (hit) *hit = ic->current; return INDEXREAD_OK; } // Not found - but we need to read the next valid result into hit rc = II_Read(ic, hit); // this might have brought us to our end, in which case we just terminate if (rc == INDEXREAD_EOF) return INDEXREAD_EOF; // otherwise - not found return INDEXREAD_NOTFOUND; } static int II_Next(void *ctx) { return II_Read(ctx, NULL); } static int II_Read(void *ctx, RSIndexResult **hit) { IntersectContext *ic = (IntersectContext *)ctx; if (ic->num == 0) return INDEXREAD_EOF; AggregateResult_Reset(ic->current); int nh = 0; int i = 0; do { nh = 0; AggregateResult_Reset(ic->current); for (i = 0; i < ic->num; i++) { IndexIterator *it = ic->its[i]; if (!it) goto eof; RSIndexResult *h = it->Current(it->ctx); // skip to the next int rc = INDEXREAD_OK; if (ic->docIds[i] != ic->lastDocId || ic->lastDocId == 0) { if (i == 0 && ic->docIds[i] >= ic->lastDocId) { rc = it->Read(it->ctx, &h); } else { rc = it->SkipTo(it->ctx, ic->lastDocId, &h); } // printf("II %p last docId %d, it %d read docId %d(%d), rc %d\n", ic, ic->lastDocId, i, // h->docId, it->LastDocId(it->ctx), rc); if (rc == INDEXREAD_EOF) goto eof; ic->docIds[i] = h->docId; } if (ic->docIds[i] > ic->lastDocId) { ic->lastDocId = ic->docIds[i]; break; } if (rc == INDEXREAD_OK) { ++nh; AggregateResult_AddChild(ic->current, h); } else { ic->lastDocId++; } } if (nh == ic->num) { // printf("II %p HIT @ %d\n", ic, ic->current->docId); // sum up all hits if (hit != NULL) { *hit = ic->current; } // Update the last valid found id ic->lastFoundId = ic->current->docId; // advance the doc id so next time we'll read a new record ic->lastDocId++; // // make sure the flags are matching. if ((ic->current->fieldMask & ic->fieldMask) == 0) { continue; } // If we need to match slop and order, we do it now, and possibly skip the result if (ic->maxSlop >= 0) { if (!IndexResult_IsWithinRange(ic->current, ic->maxSlop, ic->inOrder)) { continue; } } ic->len++; return INDEXREAD_OK; } } while (1); eof: ic->atEnd = 1; return INDEXREAD_EOF; } static int II_HasNext(void *ctx) { IntersectContext *ic = ctx; // printf("%p %d\n", ic, ic->atEnd); return !ic->atEnd; } static t_docId II_LastDocId(void *ctx) { // return last FOUND id, not last read id form any child return ((IntersectContext *)ctx)->lastFoundId; } static size_t II_Len(void *ctx) { return ((IntersectContext *)ctx)->len; } static void NI_Abort(void *ctx) { NotContext *nc = ctx; if (nc->child) { nc->child->Abort(nc->child->ctx); } } static void NI_Rewind(void *ctx) { NotContext *nc = ctx; nc->lastDocId = 0; nc->current->docId = 0; if (nc->child) { nc->child->Rewind(nc->child->ctx); } } static void NI_Free(IndexIterator *it) { NotContext *nc = it->ctx; if (nc->child) { nc->child->Free(nc->child); } IndexResult_Free(nc->current); free(it->ctx); free(it); } /* SkipTo for NOT iterator. If we have a match - return NOTFOUND. If we don't or we're at the end - * return OK */ static int NI_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit) { NotContext *nc = ctx; // do not skip beyond max doc id if (docId > nc->maxDocId) { return INDEXREAD_EOF; } // If we don't have a child it means the sub iterator is of a meaningless expression. // So negating it means we will always return OK! if (!nc->child) { goto ok; } // Get the child's last read docId t_docId childId = nc->child->LastDocId(nc->child->ctx); // If the child is ahead of the skipto id, it means the child doesn't have this id. // So we are okay! if (childId > docId) { goto ok; } // If the child docId is the one we are looking for, it's an anti match! if (childId == docId) { nc->current->docId = docId; nc->lastDocId = docId; *hit = nc->current; return INDEXREAD_NOTFOUND; } // read the next entry from the child int rc = nc->child->SkipTo(nc->child->ctx, docId, hit); // OK means not found if (rc == INDEXREAD_OK) { return INDEXREAD_NOTFOUND; } ok: // NOT FOUND or end means OK. We need to set the docId on the hit we will bubble up nc->current->docId = docId; nc->lastDocId = docId; *hit = nc->current; return INDEXREAD_OK; } /* Read from a NOT iterator. This is applicable only if the only or leftmost node of a query is a * NOT node. We simply read until max docId, skipping docIds that exist in the child*/ static int NI_Read(void *ctx, RSIndexResult **hit) { NotContext *nc = ctx; if (nc->lastDocId > nc->maxDocId) return INDEXREAD_EOF; RSIndexResult *cr = NULL; // if we have a child, get the latest result from the child if (nc->child) { cr = nc->child->Current(nc->child->ctx); if (cr == NULL || cr->docId == 0) { nc->child->Read(nc->child->ctx, &cr); } } // advance our reader by one, and let's test if it's a valid value or not nc->current->docId++; // If we don't have a child result, or the child result is ahead of the current counter, // we just increment our virtual result's id until we hit the child result's // in which case we'll read from the child and bypass it by one. if (cr == NULL || cr->docId > nc->current->docId) { goto ok; } while (cr->docId == nc->current->docId) { // advance our docId to the next possible id nc->current->docId++; // read the next entry from the child if (nc->child->Read(nc->child->ctx, &cr) == INDEXREAD_EOF) { break; } } // make sure we did not overflow if (nc->current->docId > nc->maxDocId) { return INDEXREAD_EOF; } ok: // Set the next entry and return ok nc->lastDocId = nc->current->docId; if (hit) *hit = nc->current; ++nc->len; return INDEXREAD_OK; } /* We always have next, in case anyone asks... ;) */ static int NI_HasNext(void *ctx) { NotContext *nc = ctx; return nc->lastDocId <= nc->maxDocId; } /* Return the current hit */ static RSIndexResult *NI_Current(void *ctx) { NotContext *nc = ctx; return nc->current; } /* Our len is the child's len? TBD it might be better to just return 0 */ static size_t NI_Len(void *ctx) { NotContext *nc = ctx; return nc->len; } /* Last docId */ static t_docId NI_LastDocId(void *ctx) { NotContext *nc = ctx; return nc->lastDocId; } IndexIterator *NewNotIterator(IndexIterator *it, t_docId maxDocId, double weight) { NotContext *nc = malloc(sizeof(*nc)); nc->current = NewVirtualResult(weight); nc->current->fieldMask = RS_FIELDMASK_ALL; nc->current->docId = 0; nc->child = it; nc->lastDocId = 0; nc->maxDocId = maxDocId; nc->len = 0; nc->weight = weight; IndexIterator *ret = malloc(sizeof(*it)); ret->ctx = nc; ret->Current = NI_Current; ret->Free = NI_Free; ret->HasNext = NI_HasNext; ret->LastDocId = NI_LastDocId; ret->Len = NI_Len; ret->Read = NI_Read; ret->SkipTo = NI_SkipTo; ret->Abort = NI_Abort; ret->Rewind = NI_Rewind; return ret; } /********************************************************** * Optional clause iterator **********************************************************/ static void OI_Free(IndexIterator *it) { OptionalMatchContext *nc = it->ctx; if (nc->child) { nc->child->Free(nc->child); } IndexResult_Free(nc->virt); free(it->ctx); free(it); } /* SkipTo for NOT iterator. If we have a match - return NOTFOUND. If we don't or we're at the end - * return OK */ static int OI_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit) { OptionalMatchContext *nc = ctx; if (nc->lastDocId > nc->maxDocId) return INDEXREAD_EOF; // If we don't have a child it means the sub iterator is of a meaningless expression. // So negating it means we will always return OK! if (!nc->child) { goto ok; } RSIndexResult *res = nc->child->Current(nc->child->ctx); // if the child's current is already at our docId - just copy it to our current and hit's if (docId == (nc->lastDocId = res->docId)) { *hit = nc->current = res; return INDEXREAD_OK; } // read the next entry from the child int rc = nc->child->SkipTo(nc->child->ctx, docId, &nc->current); // OK means ok - pass the entry with the value if (rc == INDEXREAD_OK) { *hit = nc->current; return INDEXREAD_OK; } ok: // NOT FOUND or end means OK. We need to set the docId on the hit we will bubble up nc->current = nc->virt; nc->lastDocId = nc->current->docId = docId; *hit = nc->current; return INDEXREAD_OK; } /* Read has no meaning in the sense of an OPTIONAL iterator, so we just read the next record from * our child */ static int OI_Read(void *ctx, RSIndexResult **hit) { OptionalMatchContext *nc = ctx; if (nc->lastDocId > nc->maxDocId) return INDEXREAD_EOF; if (nc->child) { if (nc->child->Read(nc->child->ctx, &nc->current) == INDEXREAD_OK) { if (hit) { nc->current->weight = nc->weight; *hit = nc->current; } return INDEXREAD_OK; } } return INDEXREAD_EOF; } /* We always have next, in case anyone asks... ;) */ static int OI_HasNext(void *ctx) { OptionalMatchContext *nc = ctx; return (nc->lastDocId <= nc->maxDocId); } static void OI_Abort(void *ctx) { OptionalMatchContext *nc = ctx; if (nc->child) { nc->child->Abort(nc->child->ctx); } } /* Return the current hit */ static RSIndexResult *OI_Current(void *ctx) { OptionalMatchContext *nc = ctx; return nc->current; } /* Our len is the child's len? TBD it might be better to just return 0 */ static size_t OI_Len(void *ctx) { OptionalMatchContext *nc = ctx; return nc->child ? nc->child->Len(nc->child->ctx) : 0; } /* Last docId */ static t_docId OI_LastDocId(void *ctx) { OptionalMatchContext *nc = ctx; return nc->lastDocId; } static void OI_Rewind(void *ctx) { OptionalMatchContext *nc = ctx; nc->lastDocId = 0; nc->virt->docId = 0; if (nc->child) { nc->child->Rewind(nc->child->ctx); } } IndexIterator *NewOptionalIterator(IndexIterator *it, t_docId maxDocId, double weight) { OptionalMatchContext *nc = malloc(sizeof(*nc)); nc->virt = NewVirtualResult(weight); nc->virt->freq = 0; nc->virt->fieldMask = RS_FIELDMASK_ALL; nc->current = nc->virt; nc->child = it; nc->lastDocId = 0; nc->maxDocId = maxDocId; nc->weight = weight; IndexIterator *ret = malloc(sizeof(*ret)); ret->ctx = nc; ret->Current = OI_Current; ret->Free = OI_Free; ret->HasNext = OI_HasNext; ret->LastDocId = OI_LastDocId; ret->Len = OI_Len; ret->Read = OI_Read; ret->SkipTo = OI_SkipTo; ret->Abort = OI_Abort; ret->Rewind = OI_Rewind; return ret; } /* Wildcard iterator, matchin ALL documents in the index. This is used for one thing only - * purely negative queries. If the root of the query is a negative expression, we cannot process * it * without a positive expression. So we create a wildcard iterator that basically just iterates * all * the incremental document ids, and matches every skip within its range. */ typedef struct { t_docId topId; t_docId current; RSIndexResult *res; } WildcardIteratorCtx; /* Free a wildcard iterator */ static void WI_Free(IndexIterator *it) { WildcardIteratorCtx *nc = it->ctx; IndexResult_Free(nc->res); free(it->ctx); free(it); } /* Read reads the next consecutive id, unless we're at the end */ static int WI_Read(void *ctx, RSIndexResult **hit) { WildcardIteratorCtx *nc = ctx; if (nc->current > nc->topId) { return INDEXREAD_EOF; } nc->res->docId = nc->current++; if (hit) { *hit = nc->res; } return INDEXREAD_OK; } /* Skipto for wildcard iterator - always succeeds, but this should normally not happen as it has * no * meaning */ static int WI_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit) { // printf("WI_Skipto %d\n", docId); WildcardIteratorCtx *nc = ctx; if (nc->current > nc->topId) return INDEXREAD_EOF; if (docId == 0) return WI_Read(ctx, hit); nc->current = docId; nc->res->docId = docId; if (hit) { *hit = nc->res; } return INDEXREAD_OK; } static void WI_Abort(void *ctx) { WildcardIteratorCtx *nc = ctx; nc->current = nc->topId + 1; } /* We always have next, in case anyone asks... ;) */ static int WI_HasNext(void *ctx) { WildcardIteratorCtx *nc = ctx; return nc->current <= nc->topId; } /* Return the current hit */ static RSIndexResult *WI_Current(void *ctx) { WildcardIteratorCtx *nc = ctx; return nc->res; } /* Our len is the len of the index... */ static size_t WI_Len(void *ctx) { WildcardIteratorCtx *nc = ctx; return nc->topId; } /* Last docId */ static t_docId WI_LastDocId(void *ctx) { WildcardIteratorCtx *nc = ctx; return nc->current; } static void WI_Rewind(void *p) { WildcardIteratorCtx *ctx = p; ctx->current = 1; } /* Create a new wildcard iterator */ IndexIterator *NewWildcardIterator(t_docId maxId) { WildcardIteratorCtx *c = malloc(sizeof(*c)); c->current = 1; c->topId = maxId; c->res = NewVirtualResult(1); c->res->freq = 1; c->res->fieldMask = RS_FIELDMASK_ALL; IndexIterator *ret = malloc(sizeof(*ret)); ret->ctx = c; ret->Current = WI_Current; ret->Free = WI_Free; ret->HasNext = WI_HasNext; ret->LastDocId = WI_LastDocId; ret->Len = WI_Len; ret->Read = WI_Read; ret->SkipTo = WI_SkipTo; ret->Abort = WI_Abort; ret->Rewind = WI_Rewind; return ret; } RediSearch-1.2.2/src/index.h000066400000000000000000000074551364126773500156250ustar00rootroot00000000000000#ifndef __INDEX_H__ #define __INDEX_H__ #include "doc_table.h" #include "forward_index.h" #include "index_result.h" #include "index_iterator.h" #include "redisearch.h" #include "util/logging.h" #include "varint.h" #include #include #include #include /* Free the internal data of an index hit. Since index hits are usually on the stack, this does not actually free the hit itself */ void IndexResult_Terminate(RSIndexResult *h); /** Load document metadata for an index hit, marking it as having metadata. Currently has no effect due to performance issues */ int IndexResult_LoadMetadata(RSIndexResult *h, DocTable *dt); /* Free a union iterator */ void UnionIterator_Free(IndexIterator *it); /* Free an intersect iterator */ void IntersectIterator_Free(IndexIterator *it); /* Free a read iterator */ void ReadIterator_Free(IndexIterator *it); /* UnionContext is used during the running of a union iterator */ typedef struct { IndexIterator **its; t_docId *docIds; int num; int pos; size_t len; t_docId minDocId; RSIndexResult *current; DocTable *docTable; int atEnd; // If set to 1, we exit skips after the first hit found and not merge further results int quickExit; double weight; } UnionContext; /* Create a new UnionIterator over a list of underlying child iterators. It will return each document of the underlying iterators, exactly once */ IndexIterator *NewUnionIterator(IndexIterator **its, int num, DocTable *t, int quickExit, double weight); /* The context used by the intersection methods during iterating an intersect * iterator */ typedef struct { IndexIterator **its; t_docId *docIds; int *rcs; RSIndexResult *current; int num; size_t len; int maxSlop; int inOrder; // the last read docId from any child t_docId lastDocId; // the last id that was found on all children t_docId lastFoundId; // RSIndexResult *result; DocTable *docTable; t_fieldMask fieldMask; int atEnd; double weight; } IntersectContext; /* Create a new intersect iterator over the given list of child iterators. If maxSlop is not a * negative number, we will allow at most maxSlop intervening positions between the terms. If * maxSlop is set and inOrder is 1, we assert that the terms are in * order. I.e anexact match has maxSlop of 0 and inOrder 1. */ IndexIterator *NewIntersecIterator(IndexIterator **its, int num, DocTable *t, t_fieldMask fieldMask, int maxSlop, int inOrder, double weight); /* A Not iterator works by wrapping another iterator, and returning OK for misses, and NOTFOUND for * hits */ typedef struct { IndexIterator *child; RSIndexResult *current; t_docId lastDocId; t_docId maxDocId; size_t len; double weight; } NotContext; /* Create an Optional clause iterator by wrapping another index iterator. An optional iterator * always returns OK on skips, but a virtual hit with frequency of 0 if there is no hit */ IndexIterator *NewNotIterator(IndexIterator *it, t_docId maxDocId, double weight); typedef struct { IndexIterator *child; RSIndexResult *virt; RSIndexResult *current; t_fieldMask fieldMask; t_docId lastDocId; t_docId maxDocId; double weight; } OptionalMatchContext; /* Create a NOT iterator by wrapping another index iterator */ IndexIterator *NewOptionalIterator(IndexIterator *it, t_docId maxDocId, double weight); /* Create a wildcard iterator, matching ALL documents in the index. This is used for one thing only * - purely negative queries. If the root of the query is a negative expression, we cannot process * it without a positive expression. So we create a wildcard iterator that basically just iterates * all the incremental document ids, and matches every skip within its range. */ IndexIterator *NewWildcardIterator(t_docId maxId); #endifRediSearch-1.2.2/src/index_iterator.h000066400000000000000000000026471364126773500175340ustar00rootroot00000000000000#ifndef __INDEX_ITERATOR_H__ #define __INDEX_ITERATOR_H__ #include #include "redisearch.h" #include "index_result.h" #define INDEXREAD_EOF 0 #define INDEXREAD_OK 1 #define INDEXREAD_NOTFOUND 2 /* An abstract interface used by readers / intersectors / unioners etc. Basically query execution creates a tree of iterators that activate each other recursively */ typedef struct indexIterator { void *ctx; RSIndexResult *(*Current)(void *ctx); /* Read the next entry from the iterator, into hit *e. * Returns INDEXREAD_EOF if at the end */ int (*Read)(void *ctx, RSIndexResult **e); /* Skip to a docid, potentially reading the entry into hit, if the docId * matches */ int (*SkipTo)(void *ctx, t_docId docId, RSIndexResult **hit); /* the last docId read */ t_docId (*LastDocId)(void *ctx); /* can we continue iteration? */ int (*HasNext)(void *ctx); /* release the iterator's context and free everything needed */ void (*Free)(struct indexIterator *self); /* Return the number of results in this iterator. Used by the query execution * on the top iterator */ size_t (*Len)(void *ctx); /* Abort the execution of the iterator and mark it as EOF. This is used for early aborting in case * of data consistency issues due to multi threading */ void (*Abort)(void *ctx); /* Rewinde the iterator to the beginning and reset its state */ void (*Rewind)(void *ctx); } IndexIterator; #endifRediSearch-1.2.2/src/index_result.c000066400000000000000000000327361364126773500172160ustar00rootroot00000000000000#include "index_result.h" #include "varint.h" #include "rmalloc.h" #include #include /* Allocate a new aggregate result of a given type with a given capacity*/ RSIndexResult *__newAggregateResult(size_t cap, RSResultType t, double weight) { RSIndexResult *res = rm_new(RSIndexResult); *res = (RSIndexResult){ .type = t, .docId = 0, .freq = 0, .fieldMask = 0, .isCopy = 0, .weight = weight, .agg = (RSAggregateResult){.numChildren = 0, .childrenCap = cap, .typeMask = 0x0000, .children = rm_calloc(cap, sizeof(RSIndexResult *))}}; return res; } /* Allocate a new intersection result with a given capacity*/ RSIndexResult *NewIntersectResult(size_t cap, double weight) { return __newAggregateResult(cap, RSResultType_Intersection, weight); } /* Allocate a new union result with a given capacity*/ RSIndexResult *NewUnionResult(size_t cap, double weight) { return __newAggregateResult(cap, RSResultType_Union, weight); } /* Allocate a new token record result for a given term */ RSIndexResult *NewTokenRecord(RSQueryTerm *term, double weight) { RSIndexResult *res = rm_new(RSIndexResult); *res = (RSIndexResult){.type = RSResultType_Term, .docId = 0, .fieldMask = 0, .isCopy = 0, .freq = 0, .weight = weight, .term = (RSTermRecord){ .term = term, .offsets = (RSOffsetVector){}, }}; return res; } RSIndexResult *NewNumericResult() { RSIndexResult *res = rm_new(RSIndexResult); *res = (RSIndexResult){.type = RSResultType_Numeric, .docId = 0, .isCopy = 0, .fieldMask = RS_FIELDMASK_ALL, .freq = 1, .weight = 1, .num = (RSNumericRecord){.value = 0}}; return res; } RSIndexResult *NewVirtualResult(double weight) { RSIndexResult *res = rm_new(RSIndexResult); *res = (RSIndexResult){ .type = RSResultType_Virtual, .docId = 0, .fieldMask = 0, .freq = 0, .weight = weight, .isCopy = 0, }; return res; } RSIndexResult *IndexResult_DeepCopy(const RSIndexResult *src) { RSIndexResult *ret = rm_new(RSIndexResult); *ret = *src; ret->isCopy = 1; switch (src->type) { // copy aggregate types case RSResultType_Intersection: case RSResultType_Union: // allocate a new child pointer array ret->agg.children = rm_malloc(src->agg.numChildren * sizeof(RSIndexResult *)); ret->agg.childrenCap = src->agg.numChildren; // deep copy recursively all children for (int i = 0; i < src->agg.numChildren; i++) { ret->agg.children[i] = IndexResult_DeepCopy(src->agg.children[i]); } break; // copy term results case RSResultType_Term: // copy the offset vectors if (src->term.offsets.data) { ret->term.offsets.data = rm_malloc(ret->term.offsets.len); memcpy(ret->term.offsets.data, src->term.offsets.data, ret->term.offsets.len); } break; // the rest have no dynamic stuff, we can just copy the base result default: break; } return ret; } void IndexResult_Print(RSIndexResult *r, int depth) { for (int i = 0; i < depth; i++) printf(" "); if (r->type == RSResultType_Term) { printf("Term{%llu: %s},\n", (unsigned long long)r->docId, r->term.term ? r->term.term->str : "nil"); return; } if (r->type == RSResultType_Virtual) { printf("Virtual{%llu},\n", (unsigned long long)r->docId); return; } if (r->type == RSResultType_Numeric) { printf("Numeric{%llu:%f},\n", (unsigned long long)r->docId, r->num.value); return; } printf("%s => %llu{ \n", r->type == RSResultType_Intersection ? "Inter" : "Union", (unsigned long long)r->docId); for (int i = 0; i < r->agg.numChildren; i++) { IndexResult_Print(r->agg.children[i], depth + 1); } for (int i = 0; i < depth; i++) printf(" "); printf("},\n"); // printf("docId: %d, finalScore: %f, flags %x. Terms:\n", r->docId, r->finalScore, r->fieldMask); // for (int i = 0; i < r->numRecords; i++) { // printf("\t%s, %d tf %d, flags %x\n", r->records[i].term->str, r->records[i].docId, // r->records[i].freq, r->records[i].fieldMask); // } // printf("----------\n"); } RSQueryTerm *NewQueryTerm(RSToken *tok, int id) { RSQueryTerm *ret = rm_malloc(sizeof(RSQueryTerm)); ret->idf = 1; ret->str = tok->str ? rm_strndup(tok->str, tok->len) : NULL; ret->len = tok->len; ret->flags = tok->flags; ret->id = id; return ret; } void Term_Free(RSQueryTerm *t) { if (t) { if (t->str) rm_free(t->str); rm_free(t); } } void IndexResult_Init(RSIndexResult *h) { h->docId = 0; h->fieldMask = 0; h->freq = 0; if (h->type == RSResultType_Intersection || h->type == RSResultType_Union) { h->agg.numChildren = 0; } } int RSIndexResult_HasOffsets(RSIndexResult *res) { switch (res->type) { case RSResultType_Term: return res->term.offsets.len > 0; case RSResultType_Intersection: case RSResultType_Union: // the intersection and union aggregates can have offsets if they are not purely made of // virtual results return res->agg.typeMask != RSResultType_Virtual && res->agg.typeMask != RSResultType_Numeric; // a virtual result doesn't have offsets! case RSResultType_Virtual: case RSResultType_Numeric: default: return 0; } } void IndexResult_Free(RSIndexResult *r) { if (!r) return; if (r->type == RSResultType_Intersection || r->type == RSResultType_Union) { // for deep-copy results we also free the children if (r->isCopy && r->agg.children) { for (int i = 0; i < r->agg.numChildren; i++) { IndexResult_Free(r->agg.children[i]); } } rm_free(r->agg.children); r->agg.children = NULL; } else if (r->type == RSResultType_Term) { if (r->isCopy) { rm_free(r->term.offsets.data); } else { // non copy result... // we only free up terms for non copy results if (r->term.term != NULL) { Term_Free(r->term.term); } } } rm_free(r); } inline int RSIndexResult_IsAggregate(RSIndexResult *r) { return (r->type & RS_RESULT_AGGREGATE) != 0; } #define __absdelta(x, y) (x > y ? x - y : y - x) /** Find the minimal distance between members of the vectos. e.g. if V1 is {2,4,8} and V2 is {0,5,12}, the distance is 1 - abs(4-5) @param vs a list of vector pointers @param num the size of the list */ int IndexResult_MinOffsetDelta(RSIndexResult *r) { if (!RSIndexResult_IsAggregate(r) || r->agg.numChildren <= 1) { return 1; } RSAggregateResult *agg = &r->agg; int dist = 0; int num = agg->numChildren; RSOffsetIterator v1, v2; int i = 0; while (i < num) { // if either while (i < num && !RSIndexResult_HasOffsets(agg->children[i])) { i++; continue; } if (i == num) break; v1 = RSIndexResult_IterateOffsets(agg->children[i]); i++; while (i < num && !RSIndexResult_HasOffsets(agg->children[i])) { i++; continue; } if (i == num) { v1.Free(v1.ctx); dist = dist ? dist : 100; break; } v2 = RSIndexResult_IterateOffsets(agg->children[i]); uint32_t p1 = v1.Next(v1.ctx, NULL); uint32_t p2 = v2.Next(v2.ctx, NULL); int cd = __absdelta(p2, p1); while (cd > 1 && p1 != RS_OFFSETVECTOR_EOF && p2 != RS_OFFSETVECTOR_EOF) { cd = MIN(__absdelta(p2, p1), cd); if (p2 > p1) { p1 = v1.Next(v1.ctx, NULL); } else { p2 = v2.Next(v2.ctx, NULL); } } v1.Free(v1.ctx); v2.Free(v2.ctx); dist += cd * cd; } // we return 1 if ditance could not be calculate, to avoid division by zero return dist ? sqrt(dist) : agg->numChildren - 1; } void result_GetMatchedTerms(RSIndexResult *r, RSQueryTerm *arr[], size_t cap, size_t *len) { if (*len == cap) return; switch (r->type) { case RSResultType_Intersection: case RSResultType_Union: for (int i = 0; i < r->agg.numChildren; i++) { result_GetMatchedTerms(r->agg.children[i], arr, cap, len); } break; case RSResultType_Term: if (r->term.term) { const char *s = r->term.term->str; // make sure we have a term string and it's not an expansion if (s) { arr[(*len)++] = r->term.term; } // fprintf(stderr, "Term! %zd\n", *len); } default: return; } } size_t IndexResult_GetMatchedTerms(RSIndexResult *r, RSQueryTerm **arr, size_t cap) { size_t arrlen = 0; result_GetMatchedTerms(r, arr, cap, &arrlen); return arrlen; } int __indexResult_withinRangeInOrder(RSOffsetIterator *iters, uint32_t *positions, int num, int maxSlop) { while (1) { // we start from the beginning, and a span of 0 int span = 0; for (int i = 0; i < num; i++) { // take the current position and the position of the previous iterator. // For the first iterator we always advance once uint32_t pos = i ? positions[i] : iters[i].Next(iters[i].ctx, NULL); uint32_t lastPos = i ? positions[i - 1] : 0; // printf("Before: i=%d, pos=%d, lastPos %d\n", i, pos, lastPos); // read while we are not in order while (pos != RS_OFFSETVECTOR_EOF && pos < lastPos) { pos = iters[i].Next(iters[i].ctx, NULL); // printf("Reading: i=%d, pos=%d, lastPos %d\n", i, pos, lastPos); } // printf("i=%d, pos=%d, lastPos %d\n", i, pos, lastPos); // we've read through the entire list and it's not in order relative to the last pos if (pos == RS_OFFSETVECTOR_EOF) { return 0; } positions[i] = pos; // add the diff from the last pos to the total span if (i > 0) { span += ((int)pos - (int)lastPos - 1); // if we are already out of slop - just quit if (span > maxSlop) { break; } } } if (span <= maxSlop) { return 1; } } return 0; } static inline uint32_t _arrayMin(uint32_t *arr, int len, uint32_t *pos) { int m = arr[0]; *pos = 0; for (int i = 1; i < len; i++) { if (arr[i] < m) { m = arr[i]; *pos = i; } } return m; } static inline uint32_t _arrayMax(uint32_t *arr, int len, uint32_t *pos) { int m = arr[0]; *pos = 0; for (int i = 1; i < len; i++) { if (arr[i] >= m) { m = arr[i]; *pos = i; } } return m; } /* Check the index result for maximal slop, in an unordered fashion. * The algorithm is simple - we find the first offsets min and max such that max-min<=maxSlop */ int __indexResult_withinRangeUnordered(RSOffsetIterator *iters, uint32_t *positions, int num, int maxSlop) { for (int i = 0; i < num; i++) { positions[i] = iters[i].Next(iters[i].ctx, NULL); } uint32_t minPos, maxPos, min, max; // find the max member max = _arrayMax(positions, num, &maxPos); while (1) { // we start from the beginning, and a span of 0 min = _arrayMin(positions, num, &minPos); if (min != max) { // calculate max - min int span = (int)max - (int)min - (num - 1); // printf("maxslop %d min %d, max %d, minPos %d, maxPos %d, span %d\n", maxSlop, min, max, // minPos, maxPos, span); // if it matches the condition - just return success if (span <= maxSlop) { return 1; } } // if we are not meeting the conditions - advance the minimal iterator positions[minPos] = iters[minPos].Next(iters[minPos].ctx, NULL); // If the minimal iterator is larger than the max iterator, the minimal iterator is the new // maximal iterator. if (positions[minPos] != RS_OFFSETVECTOR_EOF && positions[minPos] > max) { maxPos = minPos; max = positions[maxPos]; } else if (positions[minPos] == RS_OFFSETVECTOR_EOF) { // this means we've reached the end break; } } return 0; } /** Test the result offset vectors to see if they fall within a max "slop" or distance between the * terms. That is the total number of non matched offsets between the terms is no bigger than * maxSlop. * e.g. for an exact match, the slop allowed is 0. */ int IndexResult_IsWithinRange(RSIndexResult *ir, int maxSlop, int inOrder) { // check if calculation is even relevant here... if ((ir->type & (RSResultType_Term | RSResultType_Virtual | RSResultType_Numeric)) || ir->agg.numChildren <= 1) { return 1; } RSAggregateResult *r = &ir->agg; int num = r->numChildren; // Fill a list of iterators and the last read positions RSOffsetIterator iters[num]; uint32_t positions[num]; int n = 0; for (int i = 0; i < num; i++) { // collect only iterators for nodes that can have offsets if (RSIndexResult_HasOffsets(r->children[i])) { iters[n] = RSIndexResult_IterateOffsets(r->children[i]); positions[n] = 0; n++; } } // No applicable offset children - just return 1 if (n == 0) { return 1; } int rc; // cal the relevant algorithm based on ordered/unordered condition if (inOrder) rc = __indexResult_withinRangeInOrder(iters, positions, n, maxSlop); else rc = __indexResult_withinRangeUnordered(iters, positions, n, maxSlop); // printf("slop result for %d: %d\n", ir->docId, rc); for (int i = 0; i < n; i++) { iters[i].Free(iters[i].ctx); } return rc; } RediSearch-1.2.2/src/index_result.h000066400000000000000000000050321364126773500172100ustar00rootroot00000000000000#ifndef __INDEX_RESULT_H__ #define __INDEX_RESULT_H__ #include "varint.h" #include "redisearch.h" #include "rmalloc.h" #define DEFAULT_RECORDLIST_SIZE 4 RSQueryTerm *NewQueryTerm(RSToken *tok, int id); void Term_Free(RSQueryTerm *t); /** Reset the state of an existing index hit. This can be used to recycle index hits during reads */ void IndexResult_Init(RSIndexResult *h); /* Reset the aggregate result's child vector */ static inline void AggregateResult_Reset(RSIndexResult *r) { r->docId = 0; r->agg.numChildren = 0; r->agg.typeMask = 0; } /* Allocate a new intersection result with a given capacity*/ RSIndexResult *NewIntersectResult(size_t cap, double weight); /* Allocate a new union result with a given capacity*/ RSIndexResult *NewUnionResult(size_t cap, double weight); RSIndexResult *NewVirtualResult(double weight); RSIndexResult *NewNumericResult(); /* Allocate a new token record result for a given term */ RSIndexResult *NewTokenRecord(RSQueryTerm *term, double weight); /* Append a child to an aggregate result */ static inline void AggregateResult_AddChild(RSIndexResult *parent, RSIndexResult *child) { RSAggregateResult *agg = &parent->agg; /* Increase capacity if needed */ if (agg->numChildren >= agg->childrenCap) { agg->childrenCap = agg->childrenCap ? agg->childrenCap * 2 : 1; agg->children = rm_realloc(agg->children, agg->childrenCap * sizeof(RSIndexResult *)); } agg->children[agg->numChildren++] = child; // update the parent's type mask agg->typeMask |= child->type; parent->freq += child->freq; parent->docId = child->docId; parent->fieldMask |= child->fieldMask; } /* Create a deep copy of the results that is totall thread safe. This is very slow so use it with * caution */ RSIndexResult *IndexResult_DeepCopy(const RSIndexResult *res); /* Debug print a result */ void IndexResult_Print(RSIndexResult *r, int depth); /* Free an index result's internal allocations, does not free the result itself */ void IndexResult_Free(RSIndexResult *r); /* Get the minimal delta between the terms in the result */ int IndexResult_MinOffsetDelta(RSIndexResult *r); /* Fill an array of max capacity cap with all the matching text terms for the result. The number of * matching terms is returned */ size_t IndexResult_GetMatchedTerms(RSIndexResult *r, RSQueryTerm **arr, size_t cap); /* Return 1 if the the result is within a given slop range, inOrder determines whether the tokens * need to be ordered as in the query or not */ int IndexResult_IsWithinRange(RSIndexResult *r, int maxSlop, int inOrder); #endifRediSearch-1.2.2/src/indexer.c000066400000000000000000000467631364126773500161540ustar00rootroot00000000000000#include "indexer.h" #include "forward_index.h" #include "numeric_index.h" #include "inverted_index.h" #include "geo_index.h" #include "index.h" #include "redis_index.h" #include static void writeIndexEntry(IndexSpec *spec, InvertedIndex *idx, IndexEncoder encoder, ForwardIndexEntry *entry) { size_t sz = InvertedIndex_WriteForwardIndexEntry(idx, encoder, entry); // Update index statistics: // Number of additional bytes spec->stats.invertedSize += sz; // Number of records spec->stats.numRecords++; /* Record the space saved for offset vectors */ if (spec->flags & Index_StoreTermOffsets) { spec->stats.offsetVecsSize += VVW_GetByteLength(entry->vw); spec->stats.offsetVecRecords += VVW_GetCount(entry->vw); } } // Number of terms for each block-allocator block #define TERMS_PER_BLOCK 128 // Effectively limits the maximum number of documents whose terms can be merged #define MAX_BULK_DOCS 1024 // Entry for the merged dictionary typedef struct mergedEntry { KHTableEntry base; // Base structure ForwardIndexEntry *head; // First document containing the term ForwardIndexEntry *tail; // Last document containing the term } mergedEntry; // Boilerplate hashtable compare function static int mergedCompare(const KHTableEntry *ent, const void *s, size_t n, uint32_t h) { mergedEntry *e = (mergedEntry *)ent; // 0 return value means "true" return !(e->head->hash == h && e->head->len == n && memcmp(e->head->term, s, n) == 0); } // Boilerplate hash retrieval function. Used for rebalancing the table static uint32_t mergedHash(const KHTableEntry *ent) { mergedEntry *e = (mergedEntry *)ent; return e->head->hash; } // Boilerplate dict entry allocator static KHTableEntry *mergedAlloc(void *ctx) { return BlkAlloc_Alloc(ctx, sizeof(mergedEntry), sizeof(mergedEntry) * TERMS_PER_BLOCK); } // This function used for debugging, and returns how many items are actually in the list static size_t countMerged(mergedEntry *ent) { size_t n = 0; for (ForwardIndexEntry *cur = ent->head; cur; cur = cur->next) { n++; } return n; } // Merges all terms in the queue into a single hash table. // parentMap is assumed to be a RSAddDocumentCtx*[] of capacity MAX_DOCID_ENTRIES // // This function returns the first aCtx which lacks its own document ID. // This wil be used when actually assigning document IDs later on, so that we // don't need to seek the document list again for it. static RSAddDocumentCtx *doMerge(RSAddDocumentCtx *aCtx, KHTable *ht, RSAddDocumentCtx **parentMap) { // Counter is to make sure we don't block the CPU if there are many many items // in the queue, though in reality the number of iterations is also limited // by MAX_DOCID_ENTRIES size_t counter = 0; // Current index within the parentMap, this is assigned as the placeholder // doc ID value size_t curIdIdx = 0; RSAddDocumentCtx *cur = aCtx; RSAddDocumentCtx *firstZeroId = NULL; while (cur && ++counter < 1000 && curIdIdx < MAX_BULK_DOCS) { ForwardIndexIterator it = ForwardIndex_Iterate(cur->fwIdx); ForwardIndexEntry *entry = ForwardIndexIterator_Next(&it); while (entry) { // Because we don't have the actual document ID at this point, the document // ID field will be used here to point to an index in the parentMap // that will contain the parent. The parent itself will contain the // document ID when assigned (when the lock is held). entry->docId = curIdIdx; // Get the entry for it. int isNew = 0; mergedEntry *mergedEnt = (mergedEntry *)KHTable_GetEntry(ht, entry->term, entry->len, entry->hash, &isNew); if (isNew) { mergedEnt->head = mergedEnt->tail = entry; } else { mergedEnt->tail->next = entry; mergedEnt->tail = entry; } entry->next = NULL; entry = ForwardIndexIterator_Next(&it); } // Set the document's text status as indexed. This is not strictly true, // but it means that there is no more index interaction with this specific // document. cur->stateFlags |= ACTX_F_TEXTINDEXED; parentMap[curIdIdx++] = cur; if (firstZeroId == NULL && cur->doc.docId == 0) { firstZeroId = cur; } cur = cur->next; } return firstZeroId; } // Writes all the entries in the hash table to the inverted index. // parentMap contains the actual mapping between the `docID` field and the actual // RSAddDocumentCtx which contains the document itself, which by this time should // have been assigned an ID via makeDocumentId() static int writeMergedEntries(DocumentIndexer *indexer, RSAddDocumentCtx *aCtx, RedisSearchCtx *ctx, KHTable *ht, RSAddDocumentCtx **parentMap) { IndexEncoder encoder = InvertedIndex_GetEncoder(ctx->spec->flags); const int isBlocked = AddDocumentCtx_IsBlockable(aCtx); // This is used as a cache layer, so that we don't need to derefernce the // RSAddDocumentCtx each time. uint32_t docIdMap[MAX_BULK_DOCS] = {0}; // Iterate over all the entries for (uint32_t curBucketIdx = 0; curBucketIdx < ht->numBuckets; curBucketIdx++) { for (KHTableEntry *entp = ht->buckets[curBucketIdx]; entp; entp = entp->next) { mergedEntry *merged = (mergedEntry *)entp; // Open the inverted index: ForwardIndexEntry *fwent = merged->head; // Add the term to the prefix trie. This only needs to be done once per term IndexSpec_AddTerm(ctx->spec, fwent->term, fwent->len); RedisModuleKey *idxKey = NULL; InvertedIndex *invidx = Redis_OpenInvertedIndexEx(ctx, fwent->term, fwent->len, 1, &idxKey); if (invidx == NULL) { continue; } for (; fwent != NULL; fwent = fwent->next) { // Get the Doc ID for this entry. // Note that we cache the lookup result itself, since accessing the // parent each time causes some memory access overhead. This saves // about 3% overall. uint32_t docId = docIdMap[fwent->docId]; if (docId == 0) { // Meaning the entry is not yet in the cache. RSAddDocumentCtx *parent = parentMap[fwent->docId]; if ((parent->stateFlags & ACTX_F_ERRORED) || parent->doc.docId == 0) { // Has an error, or for some reason it doesn't have a document ID(!? is this possible) continue; } else { // Place the entry in the cache, so we don't need a pointer dereference next time docId = docIdMap[fwent->docId] = parent->doc.docId; } } // Finally assign the document ID to the entry fwent->docId = docId; writeIndexEntry(ctx->spec, invidx, encoder, fwent); } if (idxKey) { RedisModule_CloseKey(idxKey); } if (isBlocked && CONCURRENT_CTX_TICK(&indexer->concCtx) && ctx->spec == NULL) { aCtx->errorString = "ERR Index is no longer valid!"; return -1; } } } return 0; } /** * Simple implementation, writes all the entries for a single document. This * function is used when there is only one item in the queue. In this case * it's simpler to forego building the merged dictionary because there is * nothing to merge. */ static void writeCurEntries(DocumentIndexer *indexer, RSAddDocumentCtx *aCtx, RedisSearchCtx *ctx) { ForwardIndexIterator it = ForwardIndex_Iterate(aCtx->fwIdx); ForwardIndexEntry *entry = ForwardIndexIterator_Next(&it); IndexEncoder encoder = InvertedIndex_GetEncoder(aCtx->specFlags); const int isBlocked = AddDocumentCtx_IsBlockable(aCtx); while (entry != NULL) { RedisModuleKey *idxKey = NULL; IndexSpec_AddTerm(ctx->spec, entry->term, entry->len); assert(ctx); InvertedIndex *invidx = Redis_OpenInvertedIndexEx(ctx, entry->term, entry->len, 1, &idxKey); if (invidx) { entry->docId = aCtx->doc.docId; assert(entry->docId); writeIndexEntry(ctx->spec, invidx, encoder, entry); } if (idxKey) { RedisModule_CloseKey(idxKey); } entry = ForwardIndexIterator_Next(&it); if (isBlocked && CONCURRENT_CTX_TICK(&indexer->concCtx) && ctx->spec == NULL) { aCtx->errorString = "ERR Index is no longer valid!"; return; } } } /** Assigns a document ID to a single document. */ static int makeDocumentId(RSAddDocumentCtx *aCtx, IndexSpec *spec, int replace, const char **errorString) { DocTable *table = &spec->docs; Document *doc = &aCtx->doc; RSDocumentKey docKey = MakeDocKeyR(doc->docKey); if (replace) { RSDocumentMetadata *dmd = DocTable_Pop(table, docKey); if (dmd) { // decrease the number of documents in the index stats only if the document was there --spec->stats.numDocuments; aCtx->oldMd = dmd; } } doc->docId = DocTable_Put(table, docKey, doc->score, 0, doc->payload, doc->payloadSize); if (doc->docId == 0) { *errorString = "Document already exists"; return -1; } ++spec->stats.numDocuments; return 0; } /** * Performs bulk document ID assignment to all items in the queue. * If one item cannot be assigned an ID, it is marked as being errored. * * This function also sets the document's sorting vector, if present. */ static void doAssignIds(RSAddDocumentCtx *cur, RedisSearchCtx *ctx) { IndexSpec *spec = ctx->spec; for (; cur; cur = cur->next) { if (cur->stateFlags & ACTX_F_ERRORED) { continue; } assert(!cur->doc.docId); int rv = makeDocumentId(cur, spec, cur->options & DOCUMENT_ADD_REPLACE, &cur->errorString); if (rv != 0) { cur->stateFlags |= ACTX_F_ERRORED; continue; } RSDocumentMetadata *md = DocTable_Get(&spec->docs, cur->doc.docId); md->maxFreq = cur->fwIdx->maxFreq; md->len = cur->fwIdx->totalFreq; if (cur->sv) { DocTable_SetSortingVector(&spec->docs, cur->doc.docId, cur->sv); cur->sv = NULL; } if (cur->byteOffsets) { ByteOffsetWriter_Move(&cur->offsetsWriter, cur->byteOffsets); DocTable_SetByteOffsets(&spec->docs, cur->doc.docId, cur->byteOffsets); cur->byteOffsets = NULL; } } } static void indexBulkFields(RSAddDocumentCtx *aCtx, RedisSearchCtx *sctx) { // Traverse all fields, seeing if there may be something which can be written! IndexBulkData bData[SPEC_MAX_FIELDS] = {{0}}; IndexBulkData *activeBulks[SPEC_MAX_FIELDS]; size_t numActiveBulks = 0; for (RSAddDocumentCtx *cur = aCtx; cur && cur->doc.docId; cur = cur->next) { if (cur->stateFlags & ACTX_F_ERRORED) { continue; } const Document *doc = &cur->doc; for (size_t ii = 0; ii < doc->numFields; ++ii) { const FieldSpec *fs = cur->fspecs + ii; fieldData *fdata = cur->fdatas + ii; if (fs->name == NULL || fs->type == FIELD_FULLTEXT || !FieldSpec_IsIndexable(fs)) { continue; } const BulkIndexer *procs = GetBulkIndexer(fs->type); IndexBulkData *bulk = &bData[fs->index]; if (!bulk->initialized) { if (procs->BulkInit) { procs->BulkInit(bulk, fs, sctx); } bulk->initialized = 1; bulk->type = fs->type; activeBulks[numActiveBulks++] = bulk; } if (procs->BulkAdd(bulk, cur, sctx, doc->fields + ii, fs, fdata, &cur->errorString) != 0) { cur->stateFlags |= ACTX_F_ERRORED; } cur->stateFlags |= ACTX_F_OTHERINDEXED; } } // Flush it! for (size_t ii = 0; ii < numActiveBulks; ++ii) { IndexBulkData *cur = activeBulks[ii]; const BulkIndexer *procs = GetBulkIndexer(cur->type); if (procs->BulkDone) { procs->BulkDone(cur, sctx); } if (cur->indexKey) { RedisModule_CloseKey(cur->indexKey); } } } static void reopenCb(RedisModuleKey *k, void *arg) { // Index Key RedisSearchCtx *ctx = arg; // we do not allow empty indexes when loading an existing index if (k == NULL || RedisModule_KeyType(k) == REDISMODULE_KEYTYPE_EMPTY || RedisModule_ModuleTypeGetType(k) != IndexSpecType) { ctx->spec = NULL; return; } ctx->spec = RedisModule_ModuleTypeGetValue(k); } // Routines for the merged hash table static const KHTableProcs mergedHtProcs = { .Alloc = mergedAlloc, .Compare = mergedCompare, .Hash = mergedHash}; #define ACTX_IS_INDEXED(actx) \ (((actx)->stateFlags & (ACTX_F_OTHERINDEXED | ACTX_F_TEXTINDEXED)) == \ (ACTX_F_OTHERINDEXED | ACTX_F_TEXTINDEXED)) /** * Perform the processing chain on a single document entry, optionally merging * the tokens of further entries in the queue */ static void Indexer_Process(DocumentIndexer *indexer, RSAddDocumentCtx *aCtx) { RSAddDocumentCtx *parentMap[MAX_BULK_DOCS]; RSAddDocumentCtx *firstZeroId = aCtx; RedisSearchCtx ctx = {NULL}; if (ACTX_IS_INDEXED(aCtx) || aCtx->stateFlags & (ACTX_F_ERRORED)) { // Document is complete or errored. No need for further processing. return; } int useTermHt = indexer->size > 1 && (aCtx->stateFlags & ACTX_F_TEXTINDEXED) == 0; if (useTermHt) { firstZeroId = doMerge(aCtx, &indexer->mergeHt, parentMap); if (firstZeroId && firstZeroId->stateFlags & ACTX_F_ERRORED) { // Don't treat an errored ctx as being the head of a new ID chain. It's // likely that subsequent entries do indeed have IDs. firstZeroId = NULL; } } const int isBlocked = AddDocumentCtx_IsBlockable(aCtx); if (isBlocked) { // Force a context at this point: if (!indexer->isDbSelected) { RedisModuleCtx *thCtx = RedisModule_GetThreadSafeContext(aCtx->client.bc); RedisModule_SelectDb(indexer->redisCtx, RedisModule_GetSelectedDb(thCtx)); RedisModule_FreeThreadSafeContext(thCtx); indexer->isDbSelected = 1; } ctx.redisCtx = indexer->redisCtx; ConcurrentSearch_SetKey(&indexer->concCtx, indexer->specKeyName, &ctx); ConcurrentSearchCtx_ResetClock(&indexer->concCtx); ConcurrentSearchCtx_Lock(&indexer->concCtx); } else { ctx = *aCtx->client.sctx; } if (!ctx.spec) { aCtx->errorString = "ERR Index no longer valid"; aCtx->stateFlags |= ACTX_F_ERRORED; goto cleanup; } Document *doc = &aCtx->doc; /** * Document ID assignment: * In order to hold the GIL for as short a time as possible, we assign * document IDs in bulk. We begin using the first document ID that is assumed * to be zero. * * When merging multiple document IDs, the merge stage scans through the chain * of proposed documents and selects the first document in the chain missing an * ID - the subsequent documents should also all be missing IDs. If none of * the documents are missing IDs then the firstZeroId document is NULL and * no ID assignment takes place. * * Assigning IDs in bulk speeds up indexing of smaller documents by about * 10% overall. */ if (firstZeroId != NULL && firstZeroId->doc.docId == 0) { doAssignIds(firstZeroId, &ctx); } // Handle FULLTEXT indexes if (useTermHt) { writeMergedEntries(indexer, aCtx, &ctx, &indexer->mergeHt, parentMap); } else if ((aCtx->fwIdx && (aCtx->stateFlags & ACTX_F_ERRORED) == 0)) { writeCurEntries(indexer, aCtx, &ctx); } if (!(aCtx->stateFlags & ACTX_F_OTHERINDEXED)) { indexBulkFields(aCtx, &ctx); } cleanup: if (isBlocked) { ConcurrentSearchCtx_Unlock(&indexer->concCtx); } if (useTermHt) { BlkAlloc_Clear(&indexer->alloc, NULL, NULL, 0); KHTable_Clear(&indexer->mergeHt); } } static void *Indexer_Run(void *p) { DocumentIndexer *indexer = p; while (1) { pthread_mutex_lock(&indexer->lock); while (indexer->head == NULL) { pthread_cond_wait(&indexer->cond, &indexer->lock); } RSAddDocumentCtx *cur = indexer->head; indexer->size--; if ((indexer->head = cur->next) == NULL) { indexer->tail = NULL; } pthread_mutex_unlock(&indexer->lock); Indexer_Process(indexer, cur); AddDocumentCtx_Finish(cur); } return NULL; } int Indexer_Add(DocumentIndexer *indexer, RSAddDocumentCtx *aCtx) { if (!AddDocumentCtx_IsBlockable(aCtx)) { Indexer_Process(indexer, aCtx); AddDocumentCtx_Finish(aCtx); return 0; } pthread_mutex_lock(&indexer->lock); if (indexer->tail) { indexer->tail->next = aCtx; indexer->tail = aCtx; } else { indexer->head = indexer->tail = aCtx; } pthread_cond_signal(&indexer->cond); pthread_mutex_unlock(&indexer->lock); indexer->size++; return 0; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /// Multiple Indexers /// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /** * Each index (i.e. IndexSpec) will have its own dedicated indexing thread. * This is because documents only need to be indexed in order with respect * to their document IDs, and the ID namespace is only unique among a given * index. * * Separating background threads also greatly simplifies the work of merging * or folding indexing and document ID assignment, as it can be assumed that * every item within the document ID belongs to the same index. */ // List of all the index threads typedef struct { DocumentIndexer *first; // First thread in the list volatile int lockMod; // "Spinlock" in case the list needs to be modified } IndexerList; // Instance of list static IndexerList indexers_g = {NULL, 0}; // Returns the given indexer, if it exists static DocumentIndexer *findDocumentIndexer(const char *specname) { for (DocumentIndexer *cur = indexers_g.first; cur; cur = cur->next) { if (strcmp(specname, cur->name) == 0) { return cur; } } return NULL; } // Creates a new DocumentIndexer. This initializes the structure and starts the // thread. This does not insert it into the list of threads, though static DocumentIndexer *NewDocumentIndexer(const char *name) { DocumentIndexer *indexer = calloc(1, sizeof(*indexer)); indexer->head = indexer->tail = NULL; BlkAlloc_Init(&indexer->alloc); static const KHTableProcs procs = { .Alloc = mergedAlloc, .Compare = mergedCompare, .Hash = mergedHash}; KHTable_Init(&indexer->mergeHt, &procs, &indexer->alloc, 4096); pthread_cond_init(&indexer->cond, NULL); pthread_mutex_init(&indexer->lock, NULL); static pthread_t dummyThr; pthread_create(&dummyThr, NULL, Indexer_Run, indexer); indexer->name = strdup(name); indexer->next = NULL; indexer->redisCtx = RedisModule_GetThreadSafeContext(NULL); indexer->specKeyName = RedisModule_CreateStringPrintf(indexer->redisCtx, INDEX_SPEC_KEY_FMT, indexer->name); ConcurrentSearchCtx_InitSingle(&indexer->concCtx, indexer->redisCtx, REDISMODULE_READ | REDISMODULE_WRITE, reopenCb); return indexer; } // Get the document indexer for the given index name. If the indexer does not // exist, it is created and placed into the list of indexes DocumentIndexer *GetDocumentIndexer(const char *specname) { DocumentIndexer *match = findDocumentIndexer(specname); if (match) { return match; } // This is akin to a spinlock. Wait until lockMod is 0, and then atomically // set it to 1. while (!__sync_bool_compare_and_swap(&indexers_g.lockMod, 0, 1)) { } // Try to find it again. Another thread may have modified the list while // we were waiting for lockMod to become 0. match = findDocumentIndexer(specname); if (match) { indexers_g.lockMod = 0; return match; } DocumentIndexer *newIndexer = NewDocumentIndexer(specname); newIndexer->next = indexers_g.first; indexers_g.first = newIndexer; indexers_g.lockMod = 0; return newIndexer; } RediSearch-1.2.2/src/indexer.h000066400000000000000000000065171364126773500161520ustar00rootroot00000000000000#ifndef INDEXER_H #define INDEXER_H #include "document.h" #include "util/khtable.h" #include "util/block_alloc.h" #include "concurrent_ctx.h" #include "util/arr.h" // Preprocessors can store field data to this location typedef union FieldData { double numeric; // i.e. the numeric value of the field struct { char *slon; char *slat; } geo; // lon/lat pair char **tags; } fieldData; typedef struct DocumentIndexer { RSAddDocumentCtx *head; // first item in the queue RSAddDocumentCtx *tail; // last item in the queue pthread_mutex_t lock; // lock - only used when adding or removing items from the queue pthread_cond_t cond; // condition - used to wait on items added to the queue size_t size; // number of items in the queue ConcurrentSearchCtx concCtx; // GIL locking. This is repopulated with the relevant key data RedisModuleCtx *redisCtx; // Context for keeping the spec key RedisModuleString *specKeyName; // Cached, used for opening/closing the spec key. int isDbSelected; char *name; // The name of the index this structure belongs to. For use with the list of indexers struct DocumentIndexer *next; // Next structure in the indexer list KHTable mergeHt; // Hashtable and block allocator for merging BlkAlloc alloc; } DocumentIndexer; /** * Get the indexing thread for the given spec `specname`. If no such thread is * running, a new one will be instantiated. */ DocumentIndexer *GetDocumentIndexer(const char *specname); /** * Add a document to the indexing queue. If successful, the indexer now takes * ownership of the document context (until it DocumentAddCtx_Finish). */ int Indexer_Add(DocumentIndexer *indexer, RSAddDocumentCtx *aCtx); /** * Function to preprocess field data. This should do as much stateless processing * as possible on the field - this means things like input validation and normalization. * * The `fdata` field is used to contain the result of the processing, which is then * actually written to the index at a later point in time. * * This function is called with the GIL released. */ typedef int (*PreprocessorFunc)(RSAddDocumentCtx *aCtx, const DocumentField *field, const FieldSpec *fs, fieldData *fdata, const char **errorString); /** * Function to write the entry for the field into the actual index. This is called * with the GIL locked, and it should therefore only write data, and nothing more. */ typedef int (*IndexerFunc)(RSAddDocumentCtx *aCtx, RedisSearchCtx *ctx, const DocumentField *field, const FieldSpec *fs, fieldData *fdata, const char **errorString); /** * Get the preprocessor function for a given index type */ PreprocessorFunc GetIndexPreprocessor(const FieldType ft); typedef struct { RedisModuleKey *indexKey; void *indexData; int initialized; int type; } IndexBulkData; typedef struct { void (*BulkInit)(IndexBulkData *bulk, const FieldSpec *fs, RedisSearchCtx *sctx); int (*BulkAdd)(IndexBulkData *bulk, RSAddDocumentCtx *aCtx, RedisSearchCtx *ctx, DocumentField *field, const FieldSpec *fs, fieldData *fdata, const char **errorString); void (*BulkDone)(IndexBulkData *bulk, RedisSearchCtx *ctx); } BulkIndexer; const BulkIndexer *GetBulkIndexer(const FieldType ft); #endifRediSearch-1.2.2/src/inverted_index.c000066400000000000000000000726171364126773500175220ustar00rootroot00000000000000#define QINT_API static #include "inverted_index.h" #include "math.h" #include "varint.h" #include #include #include "rmalloc.h" #include "qint.h" #include "qint.c" #include "redis_index.h" #include "numeric_filter.h" #include "redismodule.h" // The number of entries in each index block. A new block will be created after every N entries #define INDEX_BLOCK_SIZE 100 // Initial capacity (in bytes) of a new block #define INDEX_BLOCK_INITIAL_CAP 6 // The last block of the index #define INDEX_LAST_BLOCK(idx) (idx->blocks[idx->size - 1]) // pointer to the current block while reading the index #define IR_CURRENT_BLOCK(ir) (ir->idx->blocks[ir->currentBlock]) static IndexReader *NewIndexReaderGeneric(InvertedIndex *idx, IndexDecoder decoder, IndexDecoderCtx decoderCtx, RSIndexResult *record, double weight); /* Add a new block to the index with a given document id as the initial id */ static IndexBlock *InvertedIndex_AddBlock(InvertedIndex *idx, t_docId firstId) { idx->size++; idx->blocks = rm_realloc(idx->blocks, idx->size * sizeof(IndexBlock)); idx->blocks[idx->size - 1] = (IndexBlock){.firstId = firstId, .lastId = firstId, .numDocs = 0}; INDEX_LAST_BLOCK(idx).data = NewBuffer(INDEX_BLOCK_INITIAL_CAP); return &INDEX_LAST_BLOCK(idx); } InvertedIndex *NewInvertedIndex(IndexFlags flags, int initBlock) { InvertedIndex *idx = rm_malloc(sizeof(InvertedIndex)); idx->blocks = NULL; idx->size = 0; idx->lastId = 0; idx->gcMarker = 0; idx->flags = flags; idx->numDocs = 0; if (initBlock) { InvertedIndex_AddBlock(idx, 0); } return idx; } void indexBlock_Free(IndexBlock *blk) { Buffer_Free(blk->data); free(blk->data); } void InvertedIndex_Free(void *ctx) { InvertedIndex *idx = ctx; for (uint32_t i = 0; i < idx->size; i++) { indexBlock_Free(&idx->blocks[i]); } rm_free(idx->blocks); rm_free(idx); } /* A callback called from the ConcurrentSearchCtx after regaining execution and reopening the * underlying term key. We check for changes in the underlying key, or possible deletion of it */ void IndexReader_OnReopen(RedisModuleKey *k, void *privdata) { IndexReader *ir = privdata; // If the key has been deleted we'll get a NULL here, so we just mark ourselves as EOF if (k == NULL || RedisModule_ModuleTypeGetType(k) != InvertedIndexType) { ir->atEnd = 1; ir->idx = NULL; ir->br.buf = NULL; return; } // If the key is valid, we just reset the reader's buffer reader to the current block pointer ir->idx = RedisModule_ModuleTypeGetValue(k); // the gc marker tells us if there is a chance the keys has undergone GC while we were asleep if (ir->gcMarker == ir->idx->gcMarker) { // no GC - we just go to the same offset we were at size_t offset = ir->br.pos; ir->br = NewBufferReader(IR_CURRENT_BLOCK(ir).data); ir->br.pos = offset; } else { // if there has been a GC cycle on this key while we were asleep, the offset might not be valid // anymore. This means that we need to seek to last docId we were at // reset the state of the reader t_docId lastId = ir->lastId; ir->br = NewBufferReader(IR_CURRENT_BLOCK(ir).data); ir->lastId = IR_CURRENT_BLOCK(ir).firstId; // seek to the previous last id RSIndexResult *dummy = NULL; IR_SkipTo(ir, lastId, &dummy); } } /****************************************************************************** * Index Encoders Implementations. * * We have 9 distinct ways to encode the index records. Based on the index flags we select the * correct encoder when writing to the index * ******************************************************************************/ #define ENCODER(f) static size_t f(BufferWriter *bw, uint32_t delta, RSIndexResult *res) // 1. Encode the full data of the record, delta, frequency, field mask and offset vector ENCODER(encodeFull) { size_t sz = qint_encode4(bw, delta, res->freq, (uint32_t)res->fieldMask, res->offsetsSz); sz += Buffer_Write(bw, res->term.offsets.data, res->term.offsets.len); return sz; } ENCODER(encodeFullWide) { size_t sz = qint_encode3(bw, delta, res->freq, res->offsetsSz); sz += WriteVarintFieldMask(res->fieldMask, bw); sz += Buffer_Write(bw, res->term.offsets.data, res->term.offsets.len); return sz; } // 2. (Frequency, Field) ENCODER(encodeFreqsFields) { return qint_encode3(bw, (uint32_t)delta, (uint32_t)res->freq, (uint32_t)res->fieldMask); } ENCODER(encodeFreqsFieldsWide) { size_t sz = qint_encode2(bw, (uint32_t)delta, (uint32_t)res->freq); sz += WriteVarintFieldMask(res->fieldMask, bw); return sz; } // 3. Frequencies only ENCODER(encodeFreqsOnly) { return qint_encode2(bw, (uint32_t)delta, (uint32_t)res->freq); } // 4. Field mask only ENCODER(encodeFieldsOnly) { return qint_encode2(bw, (uint32_t)delta, (uint32_t)res->fieldMask); } ENCODER(encodeFieldsOnlyWide) { size_t sz = WriteVarint((uint32_t)delta, bw); sz += WriteVarintFieldMask(res->fieldMask, bw); return sz; } // 5. (field, offset) ENCODER(encodeFieldsOffsets) { size_t sz = qint_encode3(bw, delta, (uint32_t)res->fieldMask, res->term.offsets.len); sz += Buffer_Write(bw, res->term.offsets.data, res->term.offsets.len); return sz; } ENCODER(encodeFieldsOffsetsWide) { size_t sz = qint_encode2(bw, delta, res->term.offsets.len); sz += WriteVarintFieldMask(res->fieldMask, bw); sz += Buffer_Write(bw, res->term.offsets.data, res->term.offsets.len); return sz; } // 6. Offsets only ENCODER(encodeOffsetsOnly) { size_t sz = qint_encode2(bw, delta, res->term.offsets.len); sz += Buffer_Write(bw, res->term.offsets.data, res->term.offsets.len); return sz; } // 7. Offsets and freqs ENCODER(encodeFreqsOffsets) { size_t sz = qint_encode3(bw, delta, (uint32_t)res->freq, (uint32_t)res->term.offsets.len); sz += Buffer_Write(bw, res->term.offsets.data, res->term.offsets.len); return sz; } // 8. Encode only the doc ids ENCODER(encodeDocIdsOnly) { return WriteVarint(delta, bw); } /** * DeltaType{1,2} Float{3}(=1), IsInf{4} - Sign{5} IsDouble{6} Unused{7,8} * DeltaType{1,2} Float{3}(=0), Tiny{4}(1) - Number{5,6,7,8} * DeltaType{1,2} Float{3}(=0), Tiny{4}(0) - NumEncoding{5,6,7} Sign{8} */ #define NUM_TINYENC_MASK 0x07 // This flag is set if the number is 'tiny' typedef struct { uint8_t deltaEncoding : 2; uint8_t zero : 2; uint8_t valueByteCount : 3; uint8_t sign : 1; } NumEncodingInt; typedef struct { uint8_t deltaEncoding : 2; uint8_t zero : 1; uint8_t isTiny : 1; uint8_t tinyValue : 4; } NumEncodingTiny; typedef struct { uint8_t deltaEncoding : 2; uint8_t isFloat : 1; // Always set to 1 uint8_t isInf : 1; // -INFINITY has the 'sign' bit set too uint8_t sign : 1; uint8_t isDouble : 1; // Read 8 bytes rather than 4 } NumEncodingFloat; typedef struct { uint8_t deltaEncoding : 2; uint8_t isFloat : 1; uint8_t specific : 5; } NumEncodingCommon; typedef union { uint8_t storage; NumEncodingCommon encCommon; NumEncodingInt encInt; NumEncodingTiny encTiny; NumEncodingFloat encFloat; } EncodingHeader; #define NUM_TINY_MAX 0xF // Mask/Limit for 'Tiny' value static void dumpBits(uint64_t value, size_t numBits, FILE *fp) { while (numBits) { fprintf(fp, "%d", !!(value & (1 << (numBits - 1)))); numBits--; } } static void dumpEncoding(EncodingHeader header, FILE *fp) { fprintf(fp, "DeltaBytes: %u\n", header.encCommon.deltaEncoding + 1); fprintf(fp, "Type: "); if (header.encCommon.isFloat) { fprintf(fp, " FLOAT\n"); fprintf(fp, " SubType: %s\n", header.encFloat.isDouble ? "Double" : "Float"); fprintf(fp, " INF: %s\n", header.encFloat.isInf ? "Yes" : "No"); fprintf(fp, " Sign: %c\n", header.encFloat.sign ? '-' : '+'); } else if (header.encTiny.isTiny) { fprintf(fp, " TINY\n"); fprintf(fp, " Value: %u\n", header.encTiny.tinyValue); } else { fprintf(fp, " INT\n"); fprintf(fp, " Size: %u\n", header.encInt.valueByteCount + 1); fprintf(fp, " Sign: %c\n", header.encInt.sign ? '-' : '+'); } } // 9. Special encoder for numeric values ENCODER(encodeNumeric) { const double absVal = fabs(res->num.value); const double realVal = res->num.value; const float f32Num = absVal; uint64_t u64Num = (uint64_t)absVal; const uint8_t tinyNum = ((uint8_t)absVal) & NUM_TINYENC_MASK; EncodingHeader header = {.storage = 0}; size_t pos = BufferWriter_Offset(bw); size_t sz = Buffer_Write(bw, "\0", 1); // Write the delta size_t numDeltaBytes = 0; do { sz += Buffer_Write(bw, &delta, 1); numDeltaBytes++; delta >>= 8; } while (delta); header.encCommon.deltaEncoding = numDeltaBytes - 1; if ((double)tinyNum == realVal) { // Number is small enough to fit? header.encTiny.tinyValue = tinyNum; header.encTiny.isTiny = 1; } else if ((double)(uint64_t)absVal == absVal) { // Is a whole number uint64_t wholeNum = absVal; NumEncodingInt *encInt = &header.encInt; if (realVal < 0) { encInt->sign = 1; } size_t numValueBytes = 0; do { sz += Buffer_Write(bw, &u64Num, 1); numValueBytes++; u64Num >>= 8; } while (u64Num); encInt->valueByteCount = numValueBytes - 1; } else if (!isfinite(realVal)) { header.encCommon.isFloat = 1; header.encFloat.isInf = 1; if (realVal == -INFINITY) { header.encFloat.sign = 1; } } else { // Floating point NumEncodingFloat *encFloat = &header.encFloat; if (fabs(absVal - f32Num) < 0.01) { sz += Buffer_Write(bw, (void *)&f32Num, 4); encFloat->isDouble = 0; } else { sz += Buffer_Write(bw, (void *)&absVal, 8); encFloat->isDouble = 1; } encFloat->isFloat = 1; if (realVal < 0) { encFloat->sign = 1; } } *BufferWriter_PtrAt(bw, pos) = header.storage; // printf("== Encoded ==\n"); // dumpEncoding(header, stdout); return sz; } /* Get the appropriate encoder based on index flags */ IndexEncoder InvertedIndex_GetEncoder(IndexFlags flags) { switch (flags & INDEX_STORAGE_MASK) { // 1. Full encoding - docId, freq, flags, offset case Index_StoreFreqs | Index_StoreTermOffsets | Index_StoreFieldFlags: return encodeFull; case Index_StoreFreqs | Index_StoreTermOffsets | Index_StoreFieldFlags | Index_WideSchema: return encodeFullWide; // 2. (Frequency, Field) case Index_StoreFreqs | Index_StoreFieldFlags: return encodeFreqsFields; case Index_StoreFreqs | Index_StoreFieldFlags | Index_WideSchema: return encodeFreqsFieldsWide; // 3. Frequencies only case Index_StoreFreqs: return encodeFreqsOnly; // 4. Field only case Index_StoreFieldFlags: return encodeFieldsOnly; case Index_StoreFieldFlags | Index_WideSchema: return encodeFieldsOnlyWide; // 5. (field, offset) case Index_StoreFieldFlags | Index_StoreTermOffsets: return encodeFieldsOffsets; case Index_StoreFieldFlags | Index_StoreTermOffsets | Index_WideSchema: return encodeFieldsOffsetsWide; // 6. (offset) case Index_StoreTermOffsets: return encodeOffsetsOnly; // 7. (freq, offset) Store term offsets but not field flags case Index_StoreFreqs | Index_StoreTermOffsets: return encodeFreqsOffsets; // 0. docid only case Index_DocIdsOnly: return encodeDocIdsOnly; case Index_StoreNumeric: return encodeNumeric; // invalid encoder - we will fail default: break; } return NULL; } /* Write a forward-index entry to an index writer */ size_t InvertedIndex_WriteEntryGeneric(InvertedIndex *idx, IndexEncoder encoder, t_docId docId, RSIndexResult *entry) { // do not allow the same document to be written to the same index twice. // this can happen with duplicate tags for example if (idx->lastId && idx->lastId == docId) return 0; t_docId delta = 0; IndexBlock *blk = &INDEX_LAST_BLOCK(idx); // see if we need to grow the current block if (blk->numDocs >= INDEX_BLOCK_SIZE) { blk = InvertedIndex_AddBlock(idx, docId); } else if (blk->numDocs == 0) { blk->firstId = blk->lastId = docId; } delta = docId - blk->lastId; if (delta > UINT32_MAX) { blk = InvertedIndex_AddBlock(idx, docId); delta = 0; } BufferWriter bw = NewBufferWriter(blk->data); // printf("Writing docId %llu, delta %llu, flags %x\n", docId, delta, (int)idx->flags); size_t ret = encoder(&bw, delta, entry); idx->lastId = docId; blk->lastId = docId; ++blk->numDocs; ++idx->numDocs; return ret; } /** Write a forward-index entry to the index */ size_t InvertedIndex_WriteForwardIndexEntry(InvertedIndex *idx, IndexEncoder encoder, ForwardIndexEntry *ent) { RSIndexResult rec = {.type = RSResultType_Term, .docId = ent->docId, .offsetsSz = VVW_GetByteLength(ent->vw), .freq = ent->freq, .fieldMask = ent->fieldMask}; rec.term.term = NULL; if (ent->vw) { rec.term.offsets.data = VVW_GetByteData(ent->vw); rec.term.offsets.len = VVW_GetByteLength(ent->vw); } return InvertedIndex_WriteEntryGeneric(idx, encoder, ent->docId, &rec); } /* Write a numeric entry to the index */ size_t InvertedIndex_WriteNumericEntry(InvertedIndex *idx, t_docId docId, double value) { RSIndexResult rec = (RSIndexResult){ .docId = docId, .type = RSResultType_Numeric, .num = (RSNumericRecord){.value = value}, }; return InvertedIndex_WriteEntryGeneric(idx, encodeNumeric, docId, &rec); } int IR_HasNext(void *ctx) { IndexReader *ir = ctx; return !ir->atEnd; } static void IndexReader_AdvanceBlock(IndexReader *ir) { ir->currentBlock++; ir->br = NewBufferReader(IR_CURRENT_BLOCK(ir).data); ir->lastId = IR_CURRENT_BLOCK(ir).firstId; } /****************************************************************************** * Index Decoder Implementations. * * We have 9 distinct ways to decode the index records. Based on the index flags we select the * correct decoder for creating an index reader. A decoder both decodes the entry and does initial * filtering, returning 1 if the record is ok or 0 if it is filtered. * * Term indexes can filter based on fieldMask, and * ******************************************************************************/ #define DECODER(name) static int name(BufferReader *br, IndexDecoderCtx ctx, RSIndexResult *res) #define CHECK_FLAGS(ctx, res) return ((res->fieldMask & ctx.num) != 0) DECODER(readFreqsFlags) { qint_decode3(br, (uint32_t *)&res->docId, &res->freq, (uint32_t *)&res->fieldMask); // qint_decode3(br, &res->docId, &res->freq, &res->fieldMask); CHECK_FLAGS(ctx, res); } DECODER(readFreqsFlagsWide) { uint32_t maskSz; qint_decode2(br, (uint32_t *)&res->docId, &res->freq); res->fieldMask = ReadVarintFieldMask(br); CHECK_FLAGS(ctx, res); } DECODER(readFreqOffsetsFlags) { qint_decode4(br, (uint32_t *)&res->docId, &res->freq, (uint32_t *)&res->fieldMask, &res->offsetsSz); res->term.offsets = (RSOffsetVector){.data = BufferReader_Current(br), .len = res->offsetsSz}; Buffer_Skip(br, res->offsetsSz); CHECK_FLAGS(ctx, res); } DECODER(readFreqOffsetsFlagsWide) { uint32_t maskSz; qint_decode3(br, (uint32_t *)&res->docId, &res->freq, &res->offsetsSz); res->fieldMask = ReadVarintFieldMask(br); res->term.offsets = (RSOffsetVector){.data = BufferReader_Current(br), .len = res->offsetsSz}; Buffer_Skip(br, res->offsetsSz); CHECK_FLAGS(ctx, res); } // special decoder for decoding numeric results DECODER(readNumeric) { EncodingHeader header; Buffer_Read(br, &header, 1); res->docId = 0; Buffer_Read(br, &res->docId, header.encCommon.deltaEncoding + 1); if (header.encCommon.isFloat) { if (header.encFloat.isInf) { res->num.value = INFINITY; } else if (header.encFloat.isDouble) { Buffer_Read(br, &res->num.value, 8); } else { float f; Buffer_Read(br, &f, 4); res->num.value = f; } if (header.encFloat.sign) { res->num.value = -res->num.value; } } else if (header.encTiny.isTiny) { // Is embedded into the header res->num.value = header.encTiny.tinyValue; } else { // Is a whole number uint64_t num = 0; Buffer_Read(br, &num, header.encInt.valueByteCount + 1); res->num.value = num; if (header.encInt.sign) { res->num.value = -res->num.value; } } NumericFilter *f = ctx.ptr; if (f) { return NumericFilter_Match(f, res->num.value); } return 1; } DECODER(readFreqs) { qint_decode2(br, (uint32_t *)&res->docId, &res->freq); return 1; } DECODER(readFlags) { qint_decode2(br, (uint32_t *)&res->docId, (uint32_t *)&res->fieldMask); CHECK_FLAGS(ctx, res); } DECODER(readFlagsWide) { res->docId = ReadVarint(br); res->freq = 1; res->fieldMask = ReadVarintFieldMask(br); CHECK_FLAGS(ctx, res); } DECODER(readFlagsOffsets) { qint_decode3(br, (uint32_t *)&res->docId, (uint32_t *)&res->fieldMask, &res->offsetsSz); res->term.offsets = (RSOffsetVector){.data = BufferReader_Current(br), .len = res->offsetsSz}; Buffer_Skip(br, res->offsetsSz); CHECK_FLAGS(ctx, res); } DECODER(readFlagsOffsetsWide) { qint_decode2(br, (uint32_t *)&res->docId, &res->offsetsSz); res->fieldMask = ReadVarintFieldMask(br); res->term.offsets = (RSOffsetVector){.data = BufferReader_Current(br), .len = res->offsetsSz}; Buffer_Skip(br, res->offsetsSz); CHECK_FLAGS(ctx, res); } DECODER(readOffsets) { qint_decode2(br, (uint32_t *)&res->docId, &res->offsetsSz); res->term.offsets = (RSOffsetVector){.data = BufferReader_Current(br), .len = res->offsetsSz}; Buffer_Skip(br, res->offsetsSz); return 1; } DECODER(readFreqsOffsets) { qint_decode3(br, (uint32_t *)&res->docId, &res->freq, &res->offsetsSz); res->term.offsets = (RSOffsetVector){.data = BufferReader_Current(br), .len = res->offsetsSz}; Buffer_Skip(br, res->offsetsSz); return 1; } DECODER(readDocIdsOnly) { res->docId = ReadVarint(br); res->freq = 1; return 1; // Don't care about field mask } IndexDecoder InvertedIndex_GetDecoder(uint32_t flags) { switch (flags & INDEX_STORAGE_MASK) { // (freqs, fields, offset) case Index_StoreFreqs | Index_StoreFieldFlags | Index_StoreTermOffsets: return readFreqOffsetsFlags; case Index_StoreFreqs | Index_StoreFieldFlags | Index_StoreTermOffsets | Index_WideSchema: return readFreqOffsetsFlagsWide; // (freqs) case Index_StoreFreqs: return readFreqs; // (offsets) case Index_StoreTermOffsets: return readOffsets; // (fields) case Index_StoreFieldFlags: return readFlags; case Index_StoreFieldFlags | Index_WideSchema: return readFlagsWide; // () case Index_DocIdsOnly: return readDocIdsOnly; // (freqs, offsets) case Index_StoreFreqs | Index_StoreTermOffsets: return readFreqsOffsets; // (freqs, fields) case Index_StoreFreqs | Index_StoreFieldFlags: return readFreqsFlags; case Index_StoreFreqs | Index_StoreFieldFlags | Index_WideSchema: return readFreqsFlagsWide; // (fields, offsets) case Index_StoreFieldFlags | Index_StoreTermOffsets: return readFlagsOffsets; case Index_StoreFieldFlags | Index_StoreTermOffsets | Index_WideSchema: return readFlagsOffsetsWide; case Index_StoreNumeric: return readNumeric; default: fprintf(stderr, "No decoder for flags %x\n", flags & INDEX_STORAGE_MASK); return NULL; } } IndexReader *NewNumericReader(InvertedIndex *idx, NumericFilter *flt) { RSIndexResult *res = NewNumericResult(); res->freq = 1; res->fieldMask = RS_FIELDMASK_ALL; res->num.value = 0; IndexDecoderCtx ctx = {.ptr = flt}; return NewIndexReaderGeneric(idx, readNumeric, ctx, res, 1); } int IR_Read(void *ctx, RSIndexResult **e) { IndexReader *ir = ctx; if (ir->atEnd) { goto eof; } do { // if needed - skip to the next block (skipping empty blocks that may appear here due to GC) while (BufferReader_AtEnd(&ir->br)) { // We're at the end of the last block... if (ir->currentBlock + 1 == ir->idx->size) { goto eof; } IndexReader_AdvanceBlock(ir); } size_t pos = ir->br.pos; int rv = ir->decoder(&ir->br, ir->decoderCtx, ir->record); // We write the docid as a 32 bit number when decoding it with qint. uint32_t delta = *(uint32_t *)&ir->record->docId; if(pos == 0 && delta != 0){ // this is an old version rdb, the first entry is the docid itself and // not the delta ir->record->docId = delta; }else{ ir->record->docId = delta + ir->lastId; } ir->lastId = ir->record->docId; // The decoder also acts as a filter. A zero return value means that the // current record should not be processed. if (!rv) { continue; } ++ir->len; *e = ir->record; return INDEXREAD_OK; } while (1); eof: ir->atEnd = 1; return INDEXREAD_EOF; } RSIndexResult *IR_Current(void *ctx) { return ((IndexReader *)ctx)->record; } inline void IR_Seek(IndexReader *ir, t_offset offset, t_docId docId) { Buffer_Seek(&ir->br, offset); ir->lastId = docId; } #define BLOCK_MATCHES(blk, docId) (blk.firstId <= docId && docId <= blk.lastId) static int IndexReader_SkipToBlock(IndexReader *ir, t_docId docId) { InvertedIndex *idx = ir->idx; if (!idx->size || docId < idx->blocks[0].firstId) { return 0; } // if we don't need to move beyond the current block if (BLOCK_MATCHES(IR_CURRENT_BLOCK(ir), docId)) return 1; // the current block doesn't match and it's the last one - no point in searching if (ir->currentBlock + 1 == idx->size) return 0; uint32_t top = idx->size - 1; uint32_t bottom = ir->currentBlock + 1; uint32_t i = bottom; //(bottom + top) / 2; while (bottom <= top) { if (BLOCK_MATCHES(idx->blocks[i], docId)) { ir->currentBlock = i; goto found; } if (docId < idx->blocks[i].firstId) { top = i - 1; } else { bottom = i + 1; } i = (bottom + top) / 2; } ir->currentBlock = i; found: ir->lastId = IR_CURRENT_BLOCK(ir).firstId; ir->br = NewBufferReader(IR_CURRENT_BLOCK(ir).data); return 1; } /** Skip to the given docId, or one place after it @param ctx IndexReader context @param docId docId to seek to @param hit an index hit we put our reads into @return INDEXREAD_OK if found, INDEXREAD_NOTFOUND if not found, INDEXREAD_EOF if at EOF */ int IR_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit) { IndexReader *ir = ctx; // printf("IR %s skipTo %d\n", ir->term->str, docId); /* If we are skipping to 0, it's just like a normal read */ if (!docId) { return IR_Read(ctx, hit); } if (ir->atEnd) goto eof; if (docId > ir->idx->lastId) goto eof; // try to skip to the current block if (!IndexReader_SkipToBlock(ir, docId)) { if (IR_Read(ir, hit) == INDEXREAD_EOF) { goto eof; } return INDEXREAD_NOTFOUND; } int rc; t_docId rid; while (INDEXREAD_EOF != (rc = IR_Read(ir, hit))) { rid = ir->lastId; if (rid < docId) continue; if (rid == docId) return INDEXREAD_OK; return INDEXREAD_NOTFOUND; } eof: ir->atEnd = 1; return INDEXREAD_EOF; } size_t IR_NumDocs(void *ctx) { IndexReader *ir = ctx; // otherwise we use our counter return ir->len; } static IndexReader *NewIndexReaderGeneric(InvertedIndex *idx, IndexDecoder decoder, IndexDecoderCtx decoderCtx, RSIndexResult *record, double weight) { IndexReader *ret = rm_malloc(sizeof(IndexReader)); ret->currentBlock = 0; ret->idx = idx; ret->gcMarker = idx->gcMarker; ret->record = record; ret->len = 0; ret->atEnd = 0; ret->weight = weight; ret->lastId = IR_CURRENT_BLOCK(ret).firstId; ret->br = NewBufferReader(IR_CURRENT_BLOCK(ret).data); ret->decoder = decoder; ret->decoderCtx = decoderCtx; return ret; } IndexReader *NewTermIndexReader(InvertedIndex *idx, DocTable *docTable, t_fieldMask fieldMask, RSQueryTerm *term, double weight) { if (term && docTable) { // compute IDF based on num of docs in the header term->idf = CalculateIDF(docTable->size, idx->numDocs); } // Get the decoder IndexDecoder decoder = InvertedIndex_GetDecoder((uint32_t)idx->flags & INDEX_STORAGE_MASK); if (!decoder) { return NULL; } RSIndexResult *record = NewTokenRecord(term, weight); record->fieldMask = RS_FIELDMASK_ALL; record->freq = 1; IndexDecoderCtx dctx = {.num = fieldMask}; return NewIndexReaderGeneric(idx, decoder, dctx, record, weight); } void IR_Free(IndexReader *ir) { IndexResult_Free(ir->record); rm_free(ir); } void IR_Abort(void *ctx) { IndexReader *it = ctx; it->atEnd = 1; } void ReadIterator_Free(IndexIterator *it) { if (it == NULL) { return; } IR_Free(it->ctx); rm_free(it); } inline t_docId IR_LastDocId(void *ctx) { return ((IndexReader *)ctx)->lastId; } void IR_Rewind(void *ctx) { IndexReader *ir = ctx; ir->atEnd = 0; ir->currentBlock = 0; ir->gcMarker = ir->idx->gcMarker; ir->br = NewBufferReader(IR_CURRENT_BLOCK(ir).data); ir->lastId = IR_CURRENT_BLOCK(ir).firstId; } IndexIterator *NewReadIterator(IndexReader *ir) { IndexIterator *ri = rm_malloc(sizeof(IndexIterator)); ri->ctx = ir; ri->Read = IR_Read; ri->SkipTo = IR_SkipTo; ri->LastDocId = IR_LastDocId; ri->HasNext = IR_HasNext; ri->Free = ReadIterator_Free; ri->Len = IR_NumDocs; ri->Current = IR_Current; ri->Abort = IR_Abort; ri->Rewind = IR_Rewind; return ri; } /* Repair an index block by removing garbage - records pointing at deleted documents. * Returns the number of records collected, and puts the number of bytes collected in the given * pointer. If an error occurred - returns -1 */ static int IndexBlock_Repair(IndexBlock *blk, DocTable *dt, IndexFlags flags, IndexRepairParams *params) { t_docId lastReadId = blk->firstId; bool isFirstRes = true; blk->lastId = blk->firstId = 0; Buffer repair = *blk->data; repair.offset = 0; BufferReader br = NewBufferReader(blk->data); BufferWriter bw = NewBufferWriter(&repair); RSIndexResult *res = flags == Index_StoreNumeric ? NewNumericResult() : NewTokenRecord(NULL, 1); int frags = 0; uint32_t readFlags = flags & INDEX_STORAGE_MASK; IndexDecoder decoder = InvertedIndex_GetDecoder(readFlags); IndexEncoder encoder = InvertedIndex_GetEncoder(readFlags); if (!encoder || !decoder) { fprintf(stderr, "Could not get decoder/encoder for index\n"); return -1; } while (!BufferReader_AtEnd(&br)) { const char *bufBegin = BufferReader_Current(&br); decoder(&br, (IndexDecoderCtx){}, res); size_t sz = BufferReader_Current(&br) - bufBegin; if(!(isFirstRes && res->docId != 0)){ // if we are entering this here // then its not the first entry or its // not an old rdb version // on an old rdb version, the first entry is the docid itself and not // the delta, so no need to increase by the lastReadId res->docId = (*(uint32_t *)&res->docId) + lastReadId; } isFirstRes = false; lastReadId = res->docId; int docExists = DocTable_Exists(dt, res->docId); // If we found a deleted document, we increment the number of found "frags", // and not write anything, so the reader will advance but the writer won't. // this will close the "hole" in the index if (!docExists) { if (params->RepairCallback) { params->RepairCallback(res, params->arg); } ++frags; params->bytesCollected += sz; } else { // valid document // If we're already operating in a repaired block, we do nothing if we found no holes yet, or // write back the record at the writer's top end if we've found a hole before if (frags) { // In this case we are already closing holes, so we need to write back the record at the // writer's position. We also calculate the delta again if (!blk->lastId) { blk->lastId = res->docId; } encoder(&bw, res->docId - blk->lastId, res); } else { // Nothing to do - this block is not fragmented as of now, so we just advance the writer bw.buf->offset += sz; bw.pos += sz; } if (blk->firstId == 0) { blk->firstId = res->docId; } blk->lastId = res->docId; } } if (frags) { // If we deleted stuff from this block, we need to change the number of docs and the data // pointer blk->numDocs -= frags; *blk->data = repair; Buffer_Truncate(blk->data, 0); } IndexResult_Free(res); return frags; } int InvertedIndex_Repair(InvertedIndex *idx, DocTable *dt, uint32_t startBlock, IndexRepairParams *params) { size_t limit = params->limit ? params->limit : SIZE_MAX; size_t blocksProcessed = 0; for (; startBlock < idx->size && blocksProcessed < limit; ++startBlock, ++blocksProcessed) { IndexBlock *blk = idx->blocks + startBlock; if (blk->lastId - blk->firstId > UINT32_MAX) { // Skip over blocks which have a wide variation. In the future we might // want to split a block into two (or more) on high-delta boundaries. continue; } int repaired = IndexBlock_Repair(&idx->blocks[startBlock], dt, idx->flags, params); // We couldn't repair the block - return 0 if (repaired == -1) { return 0; } else if (repaired > 0) { // Record the number of records removed for gc stats params->docsCollected += repaired; // Increase the GC marker so other queries can tell that we did something ++idx->gcMarker; } } return startBlock < idx->size ? startBlock : 0; } RediSearch-1.2.2/src/inverted_index.h000066400000000000000000000145011364126773500175130ustar00rootroot00000000000000#ifndef __INVERTED_INDEX_H__ #define __INVERTED_INDEX_H__ #include "redisearch.h" #include "buffer.h" #include "doc_table.h" #include "forward_index.h" #include "index_iterator.h" #include "index_result.h" #include "spec.h" #include "numeric_filter.h" #include #include /* A single block of data in the index. The index is basically a list of blocks we iterate */ typedef struct { t_docId firstId; t_docId lastId; uint16_t numDocs; Buffer *data; } IndexBlock; typedef struct { IndexBlock *blocks; uint32_t size; IndexFlags flags; t_docId lastId; uint32_t numDocs; uint32_t gcMarker; } InvertedIndex; struct indexReadCtx; /** * This context is passed to the decoder callback, and can contain either * a a pointer or integer. It is intended to relay along any kind of additional * configuration information to help the decoder determine whether to filter * the entry */ typedef union { void *ptr; t_fieldMask num; } IndexDecoderCtx; /** * Called when an entry is removed */ typedef void (*RepairCallback)(const RSIndexResult *res, void *arg); typedef struct { size_t bytesCollected; /** out: Number of bytes collected */ size_t docsCollected; /** out: Number of documents collected */ size_t limit; /** in: how many index blocks to scan at once */ /** in: Callback to invoke when a document is collected */ void (*RepairCallback)(const RSIndexResult *, void *); /** argument to pass to callback */ void *arg; } IndexRepairParams; /* Create a new inverted index object, with the given flag. If initBlock is 1, we create the first * block */ InvertedIndex *NewInvertedIndex(IndexFlags flags, int initBlock); void InvertedIndex_Free(void *idx); int InvertedIndex_Repair(InvertedIndex *idx, DocTable *dt, uint32_t startBlock, IndexRepairParams *params); /** * Decode a single record from the buffer reader. This function is responsible for: * (1) Decoding the record at the given position of br * (2) Advancing the reader's position to the next record * (3) Filtering the record based on any relevant information (can be passed through `ctx`) * (4) Populating `res` with the information from the record. * * If the record should not be processed, it should not be populated and 0 should * be returned. Otherwise, the function should return 1. */ typedef int (*IndexDecoder)(BufferReader *br, IndexDecoderCtx ctx, RSIndexResult *res); /* Get the decoder for the index based on the index flags. This is used to externally inject the * endoder/decoder when reading and writing */ IndexDecoder InvertedIndex_GetDecoder(uint32_t flags); /* An IndexReader wraps an inverted index record for reading and iteration */ typedef struct indexReadCtx { // the underlying data buffer BufferReader br; InvertedIndex *idx; // last docId, used for delta encoding/decoding t_docId lastId; uint32_t currentBlock; /* The decoder's filtering context. It may be a number or a pointer. The number is used for * filtering field masks, the pointer for numeric filtering */ IndexDecoderCtx decoderCtx; /* The decoding function for reading the index */ IndexDecoder decoder; /* The number of records read */ size_t len; /* The record we are decoding into */ RSIndexResult *record; int atEnd; /* This marker lets us know whether the garbage collector has visited this index while the reading * thread was asleep, and reset the state in a deeper way */ uint32_t gcMarker; /* boosting weight */ double weight; } IndexReader; void IndexReader_OnReopen(RedisModuleKey *k, void *privdata); /* An index encoder is a callback that writes records to the index. It accepts a pre-calculated * delta for encoding */ typedef size_t (*IndexEncoder)(BufferWriter *bw, uint32_t delta, RSIndexResult *record); /* Write a ForwardIndexEntry into an indexWriter. Returns the number of bytes written to the index */ size_t InvertedIndex_WriteForwardIndexEntry(InvertedIndex *idx, IndexEncoder encoder, ForwardIndexEntry *ent); /* Write a numeric index entry to the index. it includes only a float value and docId. Returns the * number of bytes written */ size_t InvertedIndex_WriteNumericEntry(InvertedIndex *idx, t_docId docId, double value); size_t InvertedIndex_WriteEntryGeneric(InvertedIndex *idx, IndexEncoder encoder, t_docId docId, RSIndexResult *entry); /* Create a new index reader for numeric records, optionally using a given filter. If the filter * is * NULL we will return all the records in the index */ IndexReader *NewNumericReader(InvertedIndex *idx, NumericFilter *flt); /* Get the appropriate encoder for an inverted index given its flags. Returns NULL on invalid flags */ IndexEncoder InvertedIndex_GetEncoder(IndexFlags flags); /* Create a new index reader on an inverted index buffer, * optionally with a skip index, docTable and scoreIndex. * If singleWordMode is set to 1, we ignore the skip index and use the score * index. */ IndexReader *NewTermIndexReader(InvertedIndex *idx, DocTable *docTable, t_fieldMask fieldMask, RSQueryTerm *term, double weight); /* free an index reader */ void IR_Free(IndexReader *ir); /* Read an entry from an inverted index */ int IR_GenericRead(IndexReader *ir, RSIndexResult *res); /* Read an entry from an inverted index into RSIndexResult */ int IR_Read(void *ctx, RSIndexResult **e); /* Move to the next entry in an inverted index, without reading the whole entry */ int IR_Next(void *ctx); /* Can we read more from an index reader? */ int IR_HasNext(void *ctx); /* Skip to a specific docId in a reader,using the skip index, and read the entry * there */ int IR_SkipTo(void *ctx, t_docId docId, RSIndexResult **hit); RSIndexResult *IR_Current(void *ctx); /* The number of docs in an inverted index entry */ size_t IR_NumDocs(void *ctx); /* LastDocId of an inverted index stateful reader */ t_docId IR_LastDocId(void *ctx); /* Seek the inverted index reader to a specific offset and set the last docId */ void IR_Seek(IndexReader *ir, t_offset offset, t_docId docId); /* Create a reader iterator that iterates an inverted index record */ IndexIterator *NewReadIterator(IndexReader *ir); static inline double CalculateIDF(size_t totalDocs, size_t termDocs) { return logb(1.0F + totalDocs / (termDocs ? termDocs : (double)1)); } #endifRediSearch-1.2.2/src/leakcheck.supp000066400000000000000000000105531364126773500171610ustar00rootroot00000000000000{ Memcheck:Leak match-leak-kinds: definite ... fun:DefaultExtensionInit ... } { Memcheck:Leak match-leak-kinds: definite fun:malloc fun:__newTrieMapNode fun:__trieMapNode_AddChild fun:TrieMapNode_Add fun:TrieMap_Add fun:Ext_RegisterQueryExpander fun:DefaultExtensionInit fun:Extension_Load fun:RediSearch_InitModuleInternal fun:moduleLoad fun:moduleLoadFromQueue fun:main } { Memcheck:Leak match-leak-kinds: definite fun:malloc fun:__newTrieMapNode fun:__trieMapNode_AddChild fun:TrieMapNode_Add fun:TrieMap_Add fun:NewStopWordListCStr fun:DefaultStopWordList fun:NewIndexSpec fun:IndexSpec_Parse fun:IndexSpec_ParseRedisArgs fun:CreateIndexCommand fun:RedisModuleCommandDispatcher } { Memcheck:Leak match-leak-kinds: definite fun:malloc fun:__newTrieMapNode fun:__trieMapNode_Split fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMap_Add fun:NewStopWordListCStr fun:DefaultStopWordList fun:NewIndexSpec fun:IndexSpec_Parse fun:IndexSpec_ParseRedisArgs fun:CreateIndexCommand } { Memcheck:Leak match-leak-kinds: definite fun:malloc fun:__newTrieMapNode fun:__trieMapNode_AddChild fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMap_Add fun:NewStopWordListCStr fun:DefaultStopWordList fun:NewIndexSpec fun:IndexSpec_Parse fun:IndexSpec_ParseRedisArgs fun:CreateIndexCommand } { Memcheck:Leak match-leak-kinds: definite fun:malloc fun:__newTrieMapNode fun:__trieMapNode_AddChild fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMap_Add fun:NewStopWordListCStr fun:DefaultStopWordList fun:NewIndexSpec fun:IndexSpec_Parse fun:IndexSpec_ParseRedisArgs } { Memcheck:Leak match-leak-kinds: definite fun:realloc fun:__trieMapNode_resizeChildren fun:__trieMapNode_AddChild fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMap_Add fun:NewStopWordListCStr fun:DefaultStopWordList fun:NewIndexSpec fun:IndexSpec_Parse fun:IndexSpec_ParseRedisArgs } { Memcheck:Leak match-leak-kinds: definite ... fun:DefaultStopWordList } { Memcheck:Leak match-leak-kinds: definite fun:realloc fun:__trieMapNode_resizeChildren fun:__trieMapNode_AddChild fun:TrieMapNode_Add fun:TrieMapNode_Add fun:TrieMap_Add fun:NewStopWordListCStr fun:DefaultStopWordList fun:NewIndexSpec fun:IndexSpec_Parse fun:IndexSpec_ParseRedisArgs fun:CreateIndexCommand } { Memcheck:Leak match-leak-kinds: possible fun:calloc fun:allocate_dtv fun:_dl_allocate_tls fun:allocate_stack fun:pthread_create@@GLIBC_2.2.5 fun:NewDocumentIndexer fun:GetDocumentIndexer fun:Document_AddToIndexes fun:thread_do fun:start_thread fun:clone } { Memcheck:Leak match-leak-kinds: possible fun:calloc fun:allocate_dtv fun:_dl_allocate_tls fun:allocate_stack fun:pthread_create@@GLIBC_2.2.5 fun:bioInit fun:initServer fun:main } { Memcheck:Leak match-leak-kinds: possible fun:calloc fun:allocate_dtv fun:_dl_allocate_tls fun:allocate_stack fun:pthread_create@@GLIBC_2.2.5 fun:thread_init fun:thpool_init fun:ConcurrentSearch_ThreadPoolStart fun:RediSearch_InitModuleInternal fun:moduleLoad fun:moduleLoadFromQueue fun:main } { Memcheck:Leak match-leak-kinds: possible fun:calloc fun:allocate_dtv fun:_dl_allocate_tls fun:allocate_stack fun:pthread_create@@GLIBC_2.2.5 fun:thread_init fun:thpool_init fun:ConcurrentSearch_ThreadPoolStart fun:RediSearch_InitModuleInternal fun:moduleLoad fun:moduleLoadFromQueue fun:main } { Memcheck:Cond fun:lzf_compress } { Memcheck:Value4 fun:lzf_compress } { Memcheck:Value8 fun:lzf_compress } RediSearch-1.2.2/src/module-init/000077500000000000000000000000001364126773500165605ustar00rootroot00000000000000RediSearch-1.2.2/src/module-init/module-init.c000066400000000000000000000006531364126773500211560ustar00rootroot00000000000000#include "module.h" #include "version.h" #ifndef RS_STATIC /* This stub is compiled in (by the build system) if it's an end-target module */ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (RedisModule_Init(ctx, "ft", REDISEARCH_MODULE_VERSION, REDISMODULE_APIVER_1) == REDISMODULE_ERR) return REDISMODULE_ERR; return RediSearch_InitModuleInternal(ctx, argv, argc); } #endifRediSearch-1.2.2/src/module.c000066400000000000000000001471021364126773500157700ustar00rootroot00000000000000#include #include #include #include #include #include #include "commands.h" #include "document.h" #include "forward_index.h" #include "geo_index.h" #include "tag_index.h" #include "index.h" #include "numeric_filter.h" #include "numeric_index.h" #include "query.h" #include "query_node.h" #include "redis_index.h" #include "redismodule.h" #include "rmutil/strings.h" #include "rmutil/util.h" #include "spec.h" #include "stopwords.h" #include "trie/trie_type.h" #include "util/logging.h" #include "varint.h" #include "extension.h" #include "ext/default.h" #include "search_request.h" #include "config.h" #include "gc.h" #include "aggregate/aggregate.h" #include "rmalloc.h" #include "cursor.h" #include "version.h" #include "debug_commads.h" #define LOAD_INDEX(ctx, srcname, write) \ ({ \ IndexSpec *sptmp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(srcname, NULL), write); \ if (sptmp == NULL) { \ return RedisModule_ReplyWithError(ctx, "Unknown index name"); \ } \ sptmp; \ }) // Check if the current request can be executed in a threadb static int CheckConcurrentSupport(RedisModuleCtx *ctx) { // See if this client should be concurrent if (!RSGlobalConfig.concurrentMode) { return 0; } // Redis cannot use blocked contexts in lua and/or multi commands. Concurrent // search relies on blocking a client. In such cases, force non-concurrent // search mode. if (RedisModule_GetContextFlags && (RedisModule_GetContextFlags(ctx) & (REDISMODULE_CTX_FLAGS_LUA | REDISMODULE_CTX_FLAGS_MULTI))) { return 0; } return 1; } /* ## FT.ADD [NOSAVE] [REPLACE] [PARTIAL] [IF ] [LANGUAGE ] [PAYLOAD {payload}] FIELDS ....] Add a documet to the index. ## Parameters: - index: The Fulltext index name. The index must be first created with FT.CREATE - docId: The document's id that will be returned from searches. Note that the same docId cannot be added twice to the same index - score: The document's rank based on the user's ranking. This must be between 0.0 and 1.0. If you don't have a score just set it to 1 - NOSAVE: If set to true, we will not save the actual document in the index and only index it. - REPLACE: If set, we will do an update and delete an older version of the document if it exists - FIELDS: Following the FIELDS specifier, we are looking for pairs of to be indexed. Each field will be scored based on the index spec given in FT.CREATE. Passing fields that are not in the index spec will make them be stored as part of the document, or ignored if NOSAVE is set - LANGUAGE lang: If set, we use a stemmer for the supplied langauge during indexing. Defaults to English. If an unsupported language is sent, the command returns an error. The supported languages are: > "arabic", "danish", "dutch", "english", "finnish", "french", > "german", "hungarian", "italian", "norwegian", "portuguese", "romanian", > "russian", "spanish", "swedish", "tamil", "turkish" Returns OK on success, NOADD if the document was not added due to an IF expression not evaluating to true or an error if something went wrong. */ static int doAddDocument(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, int canBlock) { int nosave = RMUtil_ArgExists("NOSAVE", argv, argc, 1); int fieldsIdx = RMUtil_ArgExists("FIELDS", argv, argc, 1); int replace = RMUtil_ArgExists("REPLACE", argv, argc, 1); int partial = RMUtil_ArgExists("PARTIAL", argv, argc, 1); if (canBlock) { canBlock = CheckConcurrentSupport(ctx); } // printf("argc: %d, fieldsIdx: %d, argc - fieldsIdx: %d, nosave: %d\n", argc, // fieldsIdx, // argc-fieldsIdx, nosave); // nosave must be at place 4 and we must have at least 7 fields if (argc < 7 || fieldsIdx == 0 || (argc - fieldsIdx) % 2 == 0 || (nosave && nosave != 4)) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); RedisModule_Replicate(ctx, RS_SAFEADD_CMD, "v", argv + 1, argc - 1); // Load the document score double ds = 0; if (RedisModule_StringToDouble(argv[3], &ds) == REDISMODULE_ERR) { RedisModule_ReplyWithError(ctx, "Could not parse document score"); goto cleanup; } if (ds > 1 || ds < 0) { RedisModule_ReplyWithError(ctx, "Document scores must be normalized between 0.0 ... 1.0"); goto cleanup; } // Parse the optional LANGUAGE flag const char *lang = NULL; int langIdx = RMUtil_ArgIndex("LANGUAGE", argv, argc); if (langIdx > 0 && langIdx < fieldsIdx - 1) { lang = RedisModule_StringPtrLen(argv[langIdx + 1], NULL); } if (lang && !IsSupportedLanguage(lang, strlen(lang))) { RedisModule_ReplyWithError(ctx, "Unsupported Language"); goto cleanup; } // Parse the optional payload field RedisModuleString *payload = NULL; RMUtil_ParseArgsAfter("PAYLOAD", argv, argc, "s", &payload); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 0); if (!sp) { RedisModule_ReplyWithError(ctx, "Unknown index name"); goto cleanup; } RedisSearchCtx sctx = {.redisCtx = ctx, .spec = sp}; // If the ID is 0, then the document does not exist. int exists = !!DocTable_GetId(&sp->docs, MakeDocKeyR(argv[2])); if (exists && !replace) { RedisModule_ReplyWithError(ctx, "Document already in index"); goto cleanup; } // Parse optional IF "expr" flag before FIELDS, only if the document exists const char *expr = NULL; if (exists && RMUtil_ParseArgsAfter("IF", argv, fieldsIdx, "c", &expr) == REDISMODULE_OK) { char *err = NULL; int res = 0; if (Document_EvalExpression(&sctx, argv[2], expr, &res, &err) == REDISMODULE_OK) { if (res == 0) { RedisModule_ReplyWithSimpleString(ctx, "NOADD"); goto cleanup; } } else { char buf[1024]; snprintf(buf, sizeof(buf), "Could not evaluate IF expression: %s", err); RedisModule_ReplyWithError(ctx, buf); ERR_FREE(err); goto cleanup; } } Document doc; Document_PrepareForAdd(&doc, argv[2], ds, argv, fieldsIdx, argc, lang, payload, ctx); if (!nosave) { RedisSearchCtx sctx = SEARCH_CTX_STATIC(ctx, sp); if (Redis_SaveDocument(&sctx, &doc) != REDISMODULE_OK) { Document_FreeDetached(&doc, ctx); return RedisModule_ReplyWithError(ctx, "ERR couldn't save document"); } } LG_DEBUG("Adding doc %s with %d fields\n", RedisModule_StringPtrLen(doc.docKey, NULL), doc.numFields); const char *err; RSAddDocumentCtx *aCtx = NewAddDocumentCtx(sp, &doc, &err); if (aCtx == NULL) { Document_FreeDetached(&doc, ctx); return RedisModule_ReplyWithError(ctx, err); } // in partial mode uint32_t options = 0; if (exists) { if (replace) { options |= DOCUMENT_ADD_REPLACE; } if (partial) { options |= DOCUMENT_ADD_PARTIAL; } } if (nosave) { options |= DOCUMENT_ADD_NOSAVE; } if (!canBlock) { aCtx->stateFlags |= ACTX_F_NOBLOCK; } AddDocumentCtx_Submit(aCtx, &sctx, options); cleanup: return REDISMODULE_OK; } int AddDocumentCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { return doAddDocument(ctx, argv, argc, 1); } int SafeAddDocumentCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { return doAddDocument(ctx, argv, argc, 0); } /* FT.SETPAYLOAD {index} {docId} {payload} */ int SetPayloadCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // nosave must be at place 4 and we must have at least 7 fields if (argc != 4) { return RedisModule_WrongArity(ctx); } RedisModule_ReplicateVerbatim(ctx); RedisModule_AutoMemory(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 1); if (sp == NULL) { RedisModule_ReplyWithError(ctx, "Unknown Index name"); goto cleanup; } /* Find the document by its key */ t_docId docId = DocTable_GetId(&sp->docs, MakeDocKeyR(argv[2])); if (docId == 0) { RedisModule_ReplyWithError(ctx, "Document not in index"); goto cleanup; } size_t mdlen; const char *md = RedisModule_StringPtrLen(argv[3], &mdlen); if (DocTable_SetPayload(&sp->docs, docId, md, mdlen) == 0) { RedisModule_ReplyWithError(ctx, "Could not set payload ¯\\_(ツ)_/¯"); goto cleanup; } RedisModule_ReplyWithSimpleString(ctx, "OK"); cleanup: return REDISMODULE_OK; } #define REPLY_KVNUM(n, k, v) \ RedisModule_ReplyWithSimpleString(ctx, k); \ RedisModule_ReplyWithDouble(ctx, (double)v); \ n += 2 #define REPLY_KVSTR(n, k, v) \ RedisModule_ReplyWithSimpleString(ctx, k); \ RedisModule_ReplyWithSimpleString(ctx, v); \ n += 2 static int renderIndexOptions(RedisModuleCtx *ctx, IndexSpec *sp) { #define ADD_NEGATIVE_OPTION(flag, str) \ if (!(sp->flags & flag)) { \ RedisModule_ReplyWithStringBuffer(ctx, str, strlen(str)); \ n++; \ } RedisModule_ReplyWithSimpleString(ctx, "index_options"); RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); int n = 0; ADD_NEGATIVE_OPTION(Index_StoreFreqs, SPEC_NOFREQS_STR); ADD_NEGATIVE_OPTION(Index_StoreFieldFlags, SPEC_NOFIELDS_STR); ADD_NEGATIVE_OPTION(Index_StoreTermOffsets, SPEC_NOOFFSETS_STR); if (sp->flags & Index_WideSchema) { RedisModule_ReplyWithSimpleString(ctx, SPEC_SCHEMA_EXPANDABLE_STR); n++; } RedisModule_ReplySetArrayLength(ctx, n); return 2; } /* FT.INFO {index} * Provide info and stats about an index */ int IndexInfoCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RedisModule_AutoMemory(ctx); if (argc < 2) return RedisModule_WrongArity(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 1); if (sp == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); int n = 0; REPLY_KVSTR(n, "index_name", sp->name); n += renderIndexOptions(ctx, sp); RedisModule_ReplyWithSimpleString(ctx, "fields"); RedisModule_ReplyWithArray(ctx, sp->numFields); for (int i = 0; i < sp->numFields; i++) { RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); RedisModule_ReplyWithSimpleString(ctx, sp->fields[i].name); int nn = 1; REPLY_KVSTR(nn, "type", SpecTypeNames[sp->fields[i].type]); if (sp->fields[i].type == FIELD_FULLTEXT) { REPLY_KVNUM(nn, SPEC_WEIGHT_STR, sp->fields[i].textOpts.weight); } if (sp->fields[i].type == FIELD_TAG) { char buf[2]; sprintf(buf, "%c", sp->fields[i].tagOpts.separator); REPLY_KVSTR(nn, SPEC_SEPARATOR_STR, buf); } if (FieldSpec_IsSortable(&sp->fields[i])) { RedisModule_ReplyWithSimpleString(ctx, SPEC_SORTABLE_STR); ++nn; } if (FieldSpec_IsNoStem(&sp->fields[i])) { RedisModule_ReplyWithSimpleString(ctx, SPEC_NOSTEM_STR); ++nn; } if (!FieldSpec_IsIndexable(&sp->fields[i])) { RedisModule_ReplyWithSimpleString(ctx, SPEC_NOINDEX_STR); ++nn; } RedisModule_ReplySetArrayLength(ctx, nn); } n += 2; REPLY_KVNUM(n, "num_docs", sp->stats.numDocuments); REPLY_KVNUM(n, "max_doc_id", sp->docs.maxDocId); REPLY_KVNUM(n, "num_terms", sp->stats.numTerms); REPLY_KVNUM(n, "num_records", sp->stats.numRecords); REPLY_KVNUM(n, "inverted_sz_mb", sp->stats.invertedSize / (float)0x100000); // REPLY_KVNUM(n, "inverted_cap_mb", sp->stats.invertedCap / (float)0x100000); // REPLY_KVNUM(n, "inverted_cap_ovh", 0); //(float)(sp->stats.invertedCap - sp->stats.invertedSize) / (float)sp->stats.invertedCap); REPLY_KVNUM(n, "offset_vectors_sz_mb", sp->stats.offsetVecsSize / (float)0x100000); // REPLY_KVNUM(n, "skip_index_size_mb", sp->stats.skipIndexesSize / (float)0x100000); // REPLY_KVNUM(n, "score_index_size_mb", sp->stats.scoreIndexesSize / (float)0x100000); REPLY_KVNUM(n, "doc_table_size_mb", sp->docs.memsize / (float)0x100000); REPLY_KVNUM(n, "sortable_values_size_mb", sp->docs.sortablesSize / (float)0x100000); REPLY_KVNUM(n, "key_table_size_mb", TrieMap_MemUsage(sp->docs.dim.tm) / (float)0x100000); REPLY_KVNUM(n, "records_per_doc_avg", (float)sp->stats.numRecords / (float)sp->stats.numDocuments); REPLY_KVNUM(n, "bytes_per_record_avg", (float)sp->stats.invertedSize / (float)sp->stats.numRecords); REPLY_KVNUM(n, "offsets_per_term_avg", (float)sp->stats.offsetVecRecords / (float)sp->stats.numRecords); REPLY_KVNUM(n, "offset_bits_per_record_avg", 8.0F * (float)sp->stats.offsetVecsSize / (float)sp->stats.offsetVecRecords); RedisModule_ReplyWithSimpleString(ctx, "gc_stats"); GC_RenderStats(ctx, sp->gc); n += 2; RedisModule_ReplyWithSimpleString(ctx, "cursor_stats"); Cursors_RenderStats(&RSCursors, sp->name, ctx); n += 2; RedisModule_ReplySetArrayLength(ctx, n); return REDISMODULE_OK; } /* FT.MGET {index} {key} ... * Get document(s) by their id. * Currentlt it just performs HGETALL, but it's a future proof alternative allowing us to later on * replace the internal representation of the documents. * * If referred docs are missing or not HASH keys, we simply reply with Null, but the result will * be an array the same size of the ids list */ int GetDocumentsCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 3) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); RedisSearchCtx *sctx = NewSearchCtx(ctx, argv[1]); if (sctx == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } RedisModule_ReplyWithArray(ctx, argc - 2); for (int i = 2; i < argc; i++) { Document doc; if (Redis_LoadDocument(sctx, argv[i], &doc) == REDISMODULE_ERR) { RedisModule_ReplyWithNull(ctx); } else { Document_ReplyFields(ctx, &doc); Document_Free(&doc); } } SearchCtx_Free(sctx); return REDISMODULE_OK; } /* FT.GET {index} {key} ... * Get a single document by their id. * Currentlt it just performs HGETALL, but it's a future proof alternative allowing us to later on * replace the internal representation of the documents. * * If referred docs are missing or not HASH keys, we simply reply with Null */ int GetSingleDocumentCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc != 3) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); RedisSearchCtx *sctx = NewSearchCtx(ctx, argv[1]); if (sctx == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } Document doc; if (Redis_LoadDocument(sctx, argv[2], &doc) == REDISMODULE_ERR) { RedisModule_ReplyWithNull(ctx); } else { Document_ReplyFields(ctx, &doc); Document_Free(&doc); } SearchCtx_Free(sctx); return REDISMODULE_OK; } /* FT.EXPLAIN {index_name} {query} */ int QueryExplainCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // at least one field, and number of field/text args must be even if (argc < 3) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); RedisSearchCtx *sctx = NewSearchCtx(ctx, argv[1]); if (sctx == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } char *err = NULL; RSSearchRequest *req = ParseRequest(sctx, argv, argc, &err); if (req == NULL) { RedisModule_Log(ctx, "warning", "Error parsing request: %s", err); SearchCtx_Free(sctx); RedisModule_ReplyWithError(ctx, err); ERR_FREE(err); return REDISMODULE_OK; } QueryParseCtx *q = NewQueryParseCtx(sctx, req->rawQuery, req->qlen, &req->opts); if (!q) { SearchCtx_Free(sctx); return RedisModule_ReplyWithError(ctx, "Error parsing query"); } if (!Query_Parse(q, &err)) { if (err) { RedisModule_Log(ctx, "debug", "Error parsing query: %s", err); RedisModule_ReplyWithError(ctx, err); ERR_FREE(err); } else { /* Simulate an empty response - this means an empty query */ RedisModule_ReplyWithArray(ctx, 1); RedisModule_ReplyWithLongLong(ctx, 0); } goto end; } if (!(req->opts.flags & Search_Verbatim)) { Query_Expand(q, req->opts.expander); } if (req->geoFilter) { Query_SetGeoFilter(q, req->geoFilter); } if (req->idFilter) { Query_SetIdFilter(q, req->idFilter); } // set numeric filters if possible if (req->numericFilters) { for (int i = 0; i < Vector_Size(req->numericFilters); i++) { NumericFilter *nf; Vector_Get(req->numericFilters, i, &nf); if (nf) { Query_SetNumericFilter(q, nf); } } Vector_Free(req->numericFilters); req->numericFilters = NULL; } char *explain = (char *)Query_DumpExplain(q); RedisModule_ReplyWithStringBuffer(ctx, explain, strlen(explain)); free(explain); end: Query_Free(q); RSSearchRequest_Free(req); return REDISMODULE_OK; } #define GEN_CONCURRENT_WRAPPER(name, argcond, target, pooltype) \ static int name(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { \ if (!(argcond)) { \ return RedisModule_WrongArity(ctx); \ } \ if (CheckConcurrentSupport(ctx)) { \ return ConcurrentSearch_HandleRedisCommand(pooltype, target, ctx, argv, argc); \ } else { \ target(ctx, argv, argc, NULL); \ return REDISMODULE_OK; \ } \ } GEN_CONCURRENT_WRAPPER(CursorCommand, argc >= 4, AggregateCommand_ExecCursor, CONCURRENT_POOL_SEARCH) GEN_CONCURRENT_WRAPPER(AggregateCommand, argc >= 3, AggregateCommand_ExecAggregate, CONCURRENT_POOL_SEARCH); /* FT.DEL {index} {doc_id} * Delete a document from the index. Returns 1 if the document was in the index, or 0 if not. * * **NOTE**: This does not actually delete the document from the index, just marks it as deleted * If DD (Delete Document) is set, we also delete the document. */ int DeleteCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RedisModule_AutoMemory(ctx); if (argc < 3 || argc > 4) return RedisModule_WrongArity(ctx); RedisModule_ReplicateVerbatim(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 1); if (sp == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } int delDoc = 0; if (argc == 4 && RMUtil_StringEqualsCaseC(argv[3], "DD")) { delDoc = 1; } int rc = DocTable_Delete(&sp->docs, MakeDocKeyR(argv[2])); if (rc == 1) { sp->stats.numDocuments--; // If needed - delete the actual doc if (delDoc) { RedisModuleKey *dk = RedisModule_OpenKey(ctx, argv[2], REDISMODULE_WRITE); if (dk && RedisModule_KeyType(dk) == REDISMODULE_KEYTYPE_HASH) { RedisModule_DeleteKey(dk); } else { RedisModule_Log(ctx, "warning", "Document %s doesn't exist", RedisModule_StringPtrLen(argv[2], NULL)); } } // Increment the index's garbage collector's scanning frequency after document deletions GC_OnDelete(sp->gc); } return RedisModule_ReplyWithLongLong(ctx, rc); } /* FT.ADDHASH [LANGUAGE ] [REPLACE] * Index a document that's already saved in redis as a HASH object, unrelated to * the module. * This will not modify the document, just add it to the index if it is not * already there. ## Parameters: - index: The Fulltext index name. The index must be first created with FT.CREATE - docId: The document's id, that must be a HASH key already in redis. - score: The document's rank based on the user's ranking. This must be between 0.0 and 1.0. If you don't have a score just set it to 1 - REPLACE: If set, we will do an update and delete an older version of the document if it exists - LANGUAGE lang: If set, we use a stemmer for the supplied langauge during indexing. Defaults to English. If an unsupported language is sent, the command returns an error. The supported languages are: > "arabic", "danish", "dutch", "english", "finnish", "french", > "german", "hungarian", "italian", "norwegian", "portuguese", "romanian", > "russian", "spanish", "swedish", "tamil", "turkish" Returns OK on success, or an error if something went wrong. */ static int doAddHashCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, int isBlockable) { if (argc < 4 || argc > 7) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); RedisModule_Replicate(ctx, RS_SAFEADDHASH_CMD, "v", argv + 1, argc - 1); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 1); if (sp == NULL) { RedisModule_ReplyWithError(ctx, "Unknown Index name"); goto cleanup; } int replace = RMUtil_ArgExists("REPLACE", argv, argc, 1); // Load the document score double ds = 0; if (RedisModule_StringToDouble(argv[3], &ds) == REDISMODULE_ERR) { RedisModule_ReplyWithError(ctx, "Could not parse document score"); goto cleanup; } if (ds > 1 || ds < 0) { RedisModule_ReplyWithError(ctx, "Document scores must be normalized between 0.0 ... 1.0"); goto cleanup; } // Parse the optional LANGUAGE flag const char *lang = NULL; RMUtil_ParseArgsAfter("LANGUAGE", &argv[3], argc - 4, "c", &lang); if (lang && !IsSupportedLanguage(lang, strlen(lang))) { RedisModule_ReplyWithError(ctx, "Unsupported Language"); goto cleanup; } Document doc; RedisSearchCtx sctx = SEARCH_CTX_STATIC(ctx, sp); if (Redis_LoadDocument(&sctx, argv[2], &doc) != REDISMODULE_OK) { return RedisModule_ReplyWithError(ctx, "Could not load document"); } doc.docKey = argv[2]; doc.score = ds; doc.language = lang ? lang : DEFAULT_LANGUAGE; doc.payload = NULL; doc.payloadSize = 0; Document_Detach(&doc, ctx); LG_DEBUG("Adding doc %s with %d fields\n", RedisModule_StringPtrLen(doc.docKey, NULL), doc.numFields); const char *err; RSAddDocumentCtx *aCtx = NewAddDocumentCtx(sp, &doc, &err); if (aCtx == NULL) { Document_FreeDetached(&doc, ctx); return RedisModule_ReplyWithError(ctx, err); } if (isBlockable) { isBlockable = CheckConcurrentSupport(ctx); } if (!isBlockable) { aCtx->stateFlags |= ACTX_F_NOBLOCK; } AddDocumentCtx_Submit(aCtx, &sctx, replace ? DOCUMENT_ADD_REPLACE : 0); cleanup: return REDISMODULE_OK; } int AddHashCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { return doAddHashCommand(ctx, argv, argc, 1); } int SafeAddHashCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { return doAddHashCommand(ctx, argv, argc, 0); } /* ## FT.SEARCH [NOCONTENT] [LIMIT offset num] [INFIELDS field ...] [LANGUAGE lang] [VERBATIM] [FILTER {property} {min} {max}] [SLOP {slop}] [INORDER] [GEOFILTER {property} {lon} {lat} {radius} {unit}] Seach the index with a textual query, returning either documents or just ids. ### Parameters: - index: The Fulltext index name. The index must be first created with FT.CREATE - query: the text query to search. If it's more than a single word, put it in quotes. Basic syntax like quotes for exact matching is supported. - NOCONTENT: If it appears after the query, we only return the document ids and not the content. This is useful if rediseach is only an index on an external document collection - LIMIT fist num: If the parameters appear after the query, we limit the results to the offset and number of results given. The default is 0 10 - FILTER: Apply a numeric filter to a numeric field, with a minimum and maximum - GEOFILTER: Apply a radius filter to a geo field, with a given lon, lat, radius and radius units (m, km, mi, or ft) - PAYLOAD: Add a payload to the query that will be exposed to custrom scoring functions. - INFIELDS num field1 field2 ...: If set, filter the results to ones appearing only in specific fields of the document, like title or url. num is the number of specified field arguments - VERBATIM: If set, we turn off stemming for the query processing. Faster but will yield less results - WITHSCORES: If set, we also return the relative internal score of each document. this can be used to merge results from multiple instances - WITHPAYLOADS: If set, we return document payloads as they were inserted, or nil if no payload exists. - NOSTOPWORDS: If set, we do not check the query for stopwords - SLOP slop: If set, we allow a maximal intervening number of unmatched offsets between phrase terms. - INORDER: Phrase terms must appear in the document in the same order as in the query. - LANGUAGE lang: If set, we use a stemmer for the supplied langauge. Defaults to English. If an unsupported language is sent, the command returns an error. The supported languages are: > "arabic", "danish", "dutch", "english", "finnish", "french", > "german", "hungarian", "italian", "norwegian", "portuguese", "romanian", > "russian", "spanish", "swedish", "tamil", "turkish" ### Returns: An array reply, where the first element is the total number of results, and then pairs of document id, and a nested array of field/value, unless NOCONTENT was given */ void _SearchCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, struct ConcurrentCmdCtx *cmdCtx) { // at least one field, and number of field/text args must be even RedisModule_AutoMemory(ctx); RedisSearchCtx *sctx = NewSearchCtx(ctx, argv[1]); if (sctx == NULL) { RedisModule_ReplyWithError(ctx, "Unknown Index name"); return; } char *err = NULL; RSSearchRequest *req = NULL; QueryParseCtx *q = NULL; QueryPlan *plan = NULL; req = ParseRequest(sctx, argv, argc, &err); if (req == NULL) { RedisModule_Log(ctx, "warning", "Error parsing request: %s", err); RedisModule_ReplyWithError(ctx, err ? err : "Error parsing request"); goto end; } q = SearchRequest_ParseQuery(sctx, req, &err); if (!q && err) { RedisModule_Log(ctx, "warning", "Error parsing query: %s", err); RedisModule_ReplyWithError(ctx, err); goto end; } plan = SearchRequest_BuildPlan(sctx, req, q, &err); if (!plan) { if (err) { RedisModule_Log(ctx, "debug", "Error parsing query: %s", err); RedisModule_ReplyWithError(ctx, err); free(err); } else { /* Simulate an empty response - this means an empty query */ RedisModule_ReplyWithArray(ctx, 1); RedisModule_ReplyWithLongLong(ctx, 0); } goto end; } QueryPlan_Run(plan, ctx); if (err) { RedisModule_ReplyWithError(ctx, err); } end: ERR_FREE(err); if (plan) QueryPlan_Free(plan); if (sctx) SearchCtx_Free(sctx); if (req) RSSearchRequest_Free(req); if (q) Query_Free(q); } GEN_CONCURRENT_WRAPPER(SearchCommand, argc >= 3, _SearchCommand, CONCURRENT_POOL_SEARCH) /* FT.TAGVALS {idx} {field} * Return all the values of a tag field. * There is no sorting or paging, so be careful with high-cradinality tag fields */ int TagValsCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // at least one field, and number of field/text args must be even if (argc != 3) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); RedisSearchCtx *sctx = NewSearchCtx(ctx, argv[1]); if (sctx == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } size_t len; const char *field = RedisModule_StringPtrLen(argv[2], &len); FieldSpec *sp = IndexSpec_GetField(sctx->spec, field, len); if (!sp) { RedisModule_ReplyWithError(ctx, "No such field"); goto cleanup; } if (sp->type != FIELD_TAG) { RedisModule_ReplyWithError(ctx, "Not a tag field"); goto cleanup; } TagIndex *idx = TagIndex_Open(ctx, TagIndex_FormatName(sctx, field), 0, NULL); if (!idx) { RedisModule_ReplyWithArray(ctx, 0); goto cleanup; } TagIndex_SerializeValues(idx, ctx); cleanup: SearchCtx_Free(sctx); return REDISMODULE_OK; } /* ## FT.CREATE {index} [NOOFFSETS] [NOFIELDS] SCHEMA {field} [TEXT [NOSTEM] [WEIGHT {weight}]] | [NUMERIC] ... Creates an index with the given spec. The index name will be used in all the key names so keep it short! ### Parameters: - index: the index name to create. If it exists the old spec will be overwritten - NOOFFSETS: If set, we do not store term offsets for documents (saves memory, does not allow exact searches) - NOFIELDS: If set, we do not store field bits for each term. Saves memory, does not allow filtering by specific fields. - SCHEMA: After the SCHEMA keyword we define the index fields. They can be either numeric or textual. For textual fields we optionally specify a weight. The default weight is 1.0 The weight is a double, but does not need to be normalized. ### Returns: OK or an error */ int CreateIndexCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // at least one field, the SCHEMA keyword, and number of field/text args must be even if (argc < 5) { return RedisModule_WrongArity(ctx); } if (RedisModule_GetSelectedDb(ctx) != 0) { return RedisModule_ReplyWithError(ctx, "Cannot create index on db != 0"); } RedisModule_AutoMemory(ctx); RedisModule_ReplicateVerbatim(ctx); char *err; IndexSpec *sp = IndexSpec_CreateNew(ctx, argv, argc, &err); if (sp == NULL) { RedisModule_ReplyWithError(ctx, err ? err : "Could not create new index"); ERR_FREE(err); return REDISMODULE_OK; } return RedisModule_ReplyWithSimpleString(ctx, "OK"); } /* FT.OPTIMIZE * After the index is built (and doesn't need to be updated again withuot a * complete rebuild) * we can optimize memory consumption by trimming all index buffers to their * actual size. * * Warning 1: This will delete score indexes for small words (n < 5000), so * updating the index * after * optimizing it might lead to screwed up results (TODO: rebuild score indexes * if needed). * The simple solution to that is to call optimize again after adding * documents * to the index. * * Warning 2: This blocks redis for a long time. Do not run it on production * instances * */ int OptimizeIndexCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // at least one field, and number of field/text args must be even if (argc != 2) { return RedisModule_WrongArity(ctx); } RedisModule_AutoMemory(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 0); if (sp == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } // DEPRECATED - we now don't do anything. The GC optimizes the index in the background return RedisModule_ReplyWithLongLong(ctx, 0); } /* * FT.DROP [KEEPDOCS] * Deletes all the keys associated with the index. * If no other data is on the redis instance, this is equivalent to FLUSHDB, * apart from the fact that the index specification is not deleted. * * If KEEPDOCS exists, we do not delete the actual docs */ int DropIndexCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // at least one field, and number of field/text args must be even if (argc < 2 || argc > 3) { return RedisModule_WrongArity(ctx); } RedisModule_ReplicateVerbatim(ctx); RedisModule_AutoMemory(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 0); if (sp == NULL) { return RedisModule_ReplyWithError(ctx, "Unknown Index name"); } // Optional KEEPDOCS int delDocs = 1; if (argc == 3 && RMUtil_StringEqualsCaseC(argv[2], "KEEPDOCS")) { delDocs = 0; } RedisSearchCtx sctx = SEARCH_CTX_STATIC(ctx, sp); Redis_DropIndex(&sctx, delDocs); return RedisModule_ReplyWithSimpleString(ctx, "OK"); } /* ## FT.SUGGADD key string score [INCR] [PAYLOAD {payload}] Add a suggestion string to an auto-complete suggestion dictionary. This is disconnected from the index definitions, and leaves creating and updating suggestino dictionaries to the user. ### Parameters: - key: the suggestion dictionary key. - string: the suggestion string we index - score: a floating point number of the suggestion string's weight -INCR: if set, we increment the existing entry of the suggestion by the given score, instead of replacing the score. This is useful for updating the dictionary based on user queries in real time - PAYLOAD: Add a payload to the suggestion string that will be used as additional information. ### Returns: Integer reply: the current size of the suggestion dictionary. */ int SuggestAddCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 4 || argc > 7) return RedisModule_WrongArity(ctx); RedisModule_AutoMemory(ctx); /* Use automatic memory management. */ RedisModule_ReplicateVerbatim(ctx); RedisModuleKey *key = RedisModule_OpenKey(ctx, argv[1], REDISMODULE_READ | REDISMODULE_WRITE); int type = RedisModule_KeyType(key); if (type != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(key) != TrieType) { return RedisModule_ReplyWithError(ctx, REDISMODULE_ERRORMSG_WRONGTYPE); } RedisModuleString *val = argv[2]; double score; if ((RedisModule_StringToDouble(argv[3], &score) != REDISMODULE_OK)) { return RedisModule_ReplyWithError(ctx, "ERR invalid score"); } int incr = RMUtil_ArgExists("INCR", argv, argc, 4); // Parse the optional payload field RSPayload payload = {.data = NULL, .len = 0}; if (argc > 4) { RMUtil_ParseArgsAfter("PAYLOAD", &argv[3], argc - 3, "b", &payload.data, &payload.len); } /* Create an empty value object if the key is currently empty. */ Trie *tree; if (type == REDISMODULE_KEYTYPE_EMPTY) { tree = NewTrie(); RedisModule_ModuleTypeSetValue(key, TrieType, tree); } else { tree = RedisModule_ModuleTypeGetValue(key); } /* Insert the new element. */ Trie_Insert(tree, val, score, incr, &payload); RedisModule_ReplyWithLongLong(ctx, tree->size); RedisModule_ReplicateVerbatim(ctx); return REDISMODULE_OK; } /* ## FT.SUGLEN key Get the size of an autoc-complete suggestion dictionary ### Parameters: - key: the suggestion dictionary key. ### Returns: Integer reply: the current size of the suggestion dictionary. */ int SuggestLenCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RedisModule_AutoMemory(ctx); /* Use automatic memory management. */ if (argc != 2) return RedisModule_WrongArity(ctx); RedisModuleKey *key = RedisModule_OpenKey(ctx, argv[1], REDISMODULE_READ); int type = RedisModule_KeyType(key); if (type != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(key) != TrieType) { return RedisModule_ReplyWithError(ctx, REDISMODULE_ERRORMSG_WRONGTYPE); } Trie *tree = RedisModule_ModuleTypeGetValue(key); return RedisModule_ReplyWithLongLong(ctx, tree ? tree->size : 0); } /* ## FT.SUGDEL key str Delete a string from a suggestion index. ### Parameters: - key: the suggestion dictionary key. - str: the string to delete ### Returns: Integer reply: 1 if the string was found and deleted, 0 otherwise. */ int SuggestDelCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RedisModule_AutoMemory(ctx); /* Use automatic memory management. */ if (argc != 3) return RedisModule_WrongArity(ctx); RedisModule_ReplicateVerbatim(ctx); RedisModuleKey *key = RedisModule_OpenKey(ctx, argv[1], REDISMODULE_READ); int type = RedisModule_KeyType(key); if (type != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(key) != TrieType) { return RedisModule_ReplyWithError(ctx, REDISMODULE_ERRORMSG_WRONGTYPE); } Trie *tree = RedisModule_ModuleTypeGetValue(key); if (!tree) { return RedisModule_ReplyWithLongLong(ctx, 0); } size_t len; const char *str = RedisModule_StringPtrLen(argv[2], &len); return RedisModule_ReplyWithLongLong(ctx, Trie_Delete(tree, (char *)str, len)); } /* ## FT.SUGGET key prefix [FUZZY] [MAX num] [WITHSCORES] [TRIM] [OPTIMIZE] [WITHPAYLOADS] Get completion suggestions for a prefix ### Parameters: - key: the suggestion dictionary key - prefix: the prefix to complete on - FUZZY: if set,we do a fuzzy prefix search, including prefixes at levenshtein distance of 1 from the prefix sent - MAX num: If set, we limit the results to a maximum of `num`. The default is 5, and the number cannot be greater than 10. - WITHSCORES: If set, we also return each entry's score - TRIM: If set, we remove very unlikely results - WITHPAYLOADS: If set, we also return each entry's payload as they were inserted, or nil if no payload exists. ### Returns: Array reply: a list of the top suggestions matching the prefix */ int SuggestGetCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { RedisModule_AutoMemory(ctx); /* Use automatic memory management. */ if (argc < 3 || argc > 10) return RedisModule_WrongArity(ctx); RedisModuleKey *key = RedisModule_OpenKey(ctx, argv[1], REDISMODULE_READ); // make sure the key is a trie int type = RedisModule_KeyType(key); if (type != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(key) != TrieType) { return RedisModule_ReplyWithError(ctx, REDISMODULE_ERRORMSG_WRONGTYPE); } Trie *tree = RedisModule_ModuleTypeGetValue(key); if (tree == NULL) { return RedisModule_ReplyWithNull(ctx); } // get the string to search for size_t len; char *s = (char *)RedisModule_StringPtrLen(argv[2], &len); if (len >= TRIE_MAX_PREFIX * sizeof(rune)) { return RedisModule_ReplyWithError(ctx, "Invalid query length"); } // get optional FUZZY argument long maxDist = 0; if (RMUtil_ArgExists("FUZZY", argv, argc, 3)) { maxDist = 1; } // RedisModuleString **argv, int argc,const char *fmt long num = 5; RMUtil_ParseArgsAfter("MAX", argv, argc, "l", &num); if (num <= 0 || num > 10) { num = 5; } // detect WITHSCORES int withScores = RMUtil_ArgExists("WITHSCORES", argv, argc, 3); // detect TRIM int trim = RMUtil_ArgExists("TRIM", argv, argc, 3); int optimize = RMUtil_ArgExists("OPTIMIZE", argv, argc, 3); // detect WITHPAYLOADS int withPayloads = RMUtil_ArgExists("WITHPAYLOADS", argv, argc, 3); Vector *res = Trie_Search(tree, s, len, num, maxDist, 1, trim, optimize); if (!res) { return RedisModule_ReplyWithError(ctx, "Invalid query"); } // if we also need to return scores, we need double the records int mul = 1; mul = withScores ? mul + 1 : mul; mul = withPayloads ? mul + 1 : mul; RedisModule_ReplyWithArray(ctx, Vector_Size(res) * mul); for (int i = 0; i < Vector_Size(res); i++) { TrieSearchResult *e; Vector_Get(res, i, &e); RedisModule_ReplyWithStringBuffer(ctx, e->str, e->len); if (withScores) { RedisModule_ReplyWithDouble(ctx, e->score); } if (withPayloads) { if (e->payload) RedisModule_ReplyWithStringBuffer(ctx, e->payload, e->plen); else RedisModule_ReplyWithNull(ctx); } TrieSearchResult_Free(e); } Vector_Free(res); return REDISMODULE_OK; } /** * FT.SYNADD ... * * Add a synonym group to the given index. The synonym data structure is compose of synonyms groups. * Each Synonym group has a unique id. The SYNADD command creates a new synonym group with the given * terms and return its id. */ int SynAddCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 3) return RedisModule_WrongArity(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 0); if (!sp) { RedisModule_ReplyWithError(ctx, "Unknown index name"); return REDISMODULE_OK; } IndexSpec_InitializeSynonym(sp); uint32_t id = SynonymMap_AddRedisStr(sp->smap, argv + 2, argc - 2); RedisModule_ReplyWithLongLong(ctx, id); return REDISMODULE_OK; } int SynUpdateCommandInternal(RedisModuleCtx *ctx, RedisModuleString *indexName, long long id, RedisModuleString **synonyms, size_t size, bool checkIdSanity) { IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(indexName, NULL), 0); if (!sp) { RedisModule_ReplyWithError(ctx, "Unknown index name"); return REDISMODULE_OK; } if (checkIdSanity && (!sp->smap || id >= SynonymMap_GetMaxId(sp->smap))) { RedisModule_ReplyWithError(ctx, "given id does not exists"); return REDISMODULE_OK; } IndexSpec_InitializeSynonym(sp); SynonymMap_UpdateRedisStr(sp->smap, synonyms, size, id); RedisModule_ReplyWithSimpleString(ctx, "OK"); return REDISMODULE_OK; } /** * FT.SYNUPDATE ... * * Update an already existing synonym group with the given terms. * Its only to add new terms to a synonym group. * return true on success. */ int SynUpdateCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 4) return RedisModule_WrongArity(ctx); long long id; if (RedisModule_StringToLongLong(argv[2], &id) != REDISMODULE_OK) { RedisModule_ReplyWithError(ctx, "wrong parameters, id is not an integer"); return REDISMODULE_OK; } if (id < 0 || id > UINT32_MAX) { RedisModule_ReplyWithError(ctx, "wrong parameters, id out of range"); return REDISMODULE_OK; } return SynUpdateCommandInternal(ctx, argv[1], id, argv + 3, argc - 3, true); } int SynForceUpdateCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 4) return RedisModule_WrongArity(ctx); long long id; if (RedisModule_StringToLongLong(argv[2], &id) != REDISMODULE_OK) { RedisModule_ReplyWithError(ctx, "wrong parameters, id is not an integer"); return REDISMODULE_OK; } if (id < 0 || id > UINT32_MAX) { RedisModule_ReplyWithError(ctx, "wrong parameters, id out of range"); return REDISMODULE_OK; } return SynUpdateCommandInternal(ctx, argv[1], id, argv + 3, argc - 3, false); } /** * FT.SYNDUMP * * Dump the synonym data structure in the following format: * - term1 * - id1 * - id2 * - term2 * - id3 * - term3 * - id4 */ int SynDumpCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 2) return RedisModule_WrongArity(ctx); IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 0); if (!sp) { RedisModule_ReplyWithError(ctx, "Unknown index name"); return REDISMODULE_OK; } if (!sp->smap) { RedisModule_ReplyWithArray(ctx, 0); return REDISMODULE_OK; } size_t size; TermData **terms_data = SynonymMap_DumpAllTerms(sp->smap, &size); RedisModule_ReplyWithArray(ctx, size * 2); for (int i = 0; i < size; ++i) { TermData *t_data = terms_data[i]; RedisModule_ReplyWithStringBuffer(ctx, t_data->term, strlen(t_data->term)); RedisModule_ReplyWithArray(ctx, array_len(t_data->ids)); for (size_t j = 0; j < array_len(t_data->ids); ++j) { RedisModule_ReplyWithLongLong(ctx, t_data->ids[j]); } } rm_free(terms_data); return REDISMODULE_OK; } int AlterIndexCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Need at least if (argc < 5) { return RedisModule_WrongArity(ctx); } // I'd like to use CmdSchema, but want to avoid the ugly stuff.. if (!RMUtil_StringEqualsCaseC(argv[2], "SCHEMA") || !RMUtil_StringEqualsCaseC(argv[3], "ADD")) { return RedisModule_ReplyWithError(ctx, "Unknown command"); } IndexSpec *sp = IndexSpec_Load(ctx, RedisModule_StringPtrLen(argv[1], NULL), 1); if (!sp) { return RedisModule_ReplyWithError(ctx, "Unknown index name"); } const int schemaOffset = 4; char *err = NULL; if (argc - schemaOffset == 0) { return RedisModule_ReplyWithError(ctx, "No fields provided"); } int rc = IndexSpec_AddFieldsRedisArgs(sp, argv + schemaOffset, argc - schemaOffset, &err); if (!rc) { RedisModule_ReplyWithError(ctx, err); ERR_FREE(err); } else { RedisModule_ReplyWithSimpleString(ctx, "OK"); } return REDISMODULE_OK; } #define RM_TRY(f, ...) \ if (f(__VA_ARGS__) == REDISMODULE_ERR) { \ RedisModule_Log(ctx, "warning", "Could not run " #f "(" #__VA_ARGS__ ")"); \ return REDISMODULE_ERR; \ } else { \ RedisModule_Log(ctx, "verbose", "Successfully executed " #f); \ } /** * Check if we can run under the current AOF configuration. Returns true * or false */ static int validateAofSettings(RedisModuleCtx *ctx) { int rc = 1; if (RedisModule_GetContextFlags == NULL) { RedisModule_Log(ctx, "warning", "Could not determine if AOF is in use. AOF Rewrite will crash!"); return 1; } if ((RedisModule_GetContextFlags(ctx) & REDISMODULE_CTX_FLAGS_AOF) == 0) { // AOF disabled. All is OK, and no further checks needed return rc; } // Can't exexcute commands on the loading context, so make a new one RedisModuleCtx *confCtx = RedisModule_GetThreadSafeContext(NULL); RedisModuleCallReply *reply = RedisModule_Call(confCtx, "CONFIG", "cc", "GET", "aof-use-rdb-preamble"); assert(reply); assert(RedisModule_CallReplyType(reply) == REDISMODULE_REPLY_ARRAY); assert(RedisModule_CallReplyLength(reply) == 2); const char *value = RedisModule_CallReplyStringPtr(RedisModule_CallReplyArrayElement(reply, 1), NULL); // I tried using strcasecmp, but it seems that the yes/no replies have a trailing // embedded newline in them if (tolower(*value) == 'n') { RedisModule_Log(ctx, "warning", "FATAL: aof-use-rdb-preamble required if AOF is used!"); rc = 0; } RedisModule_FreeCallReply(reply); RedisModule_FreeThreadSafeContext(confCtx); return rc; } int RediSearch_InitModuleInternal(RedisModuleCtx *ctx, RedisModuleString **argv, int argc) { // Check that redis supports thread safe context. RC3 or below doesn't if (RedisModule_GetThreadSafeContext == NULL) { RedisModule_Log(ctx, "warning", "***** FATAL: Incompatible version of redis 4.0 detected. *****\n" "\t\t\t\tPlease use Redis 4.0.0 or later from https://redis.io/download\n" "\t\t\t\tRedis will exit now!"); return REDISMODULE_ERR; } // Print version string! RedisModule_Log(ctx, "notice", "RediSearch version %d.%d.%d (Git=%s)", REDISEARCH_VERSION_MAJOR, REDISEARCH_VERSION_MINOR, REDISEARCH_VERSION_PATCH, RS_GetExtraVersion()); const char *err; if (ReadConfig(argv, argc, &err) == REDISMODULE_ERR) { RedisModule_Log(ctx, "warning", "Invalid Configurations: %s", err); return REDISMODULE_ERR; } sds confstr = RSConfig_GetInfoString(&RSGlobalConfig); RedisModule_Log(ctx, "notice", confstr); sdsfree(confstr); if (RedisModule_GetContextFlags == NULL && RSGlobalConfig.concurrentMode) { RedisModule_Log(ctx, "warning", "GetContextFlags unsupported (need Redis >= 4.0.6). Commands executed in " "MULTI or LUA will " "malfunction unless 'safe' functions are used or SAFEMODE is enabled."); } if (!validateAofSettings(ctx)) { return REDISMODULE_ERR; } // Init extension mechanism Extensions_Init(); ConcurrentSearch_ThreadPoolStart(); // Init Schemata Aggregate_BuildSchema(); // Init cursors mechanism CursorList_Init(&RSCursors); RedisModule_Log(ctx, "notice", "Initialized thread pool!"); /* Load extensions if needed */ if (RSGlobalConfig.extLoad != NULL) { char *errMsg = NULL; // Load the extension so TODO: pass with param if (Extension_LoadDynamic(RSGlobalConfig.extLoad, &errMsg) == REDISMODULE_ERR) { RedisModule_Log(ctx, "warning", "Could not load extension %s: %s", RSGlobalConfig.extLoad, errMsg); ERR_FREE(errMsg); return REDISMODULE_ERR; } RedisModule_Log(ctx, "notice", "Loaded RediSearch extension '%s'", RSGlobalConfig.extLoad); } // Register the default hard coded extension if (Extension_Load("DEFAULT", DefaultExtensionInit) == REDISEARCH_ERR) { RedisModule_Log(ctx, "warning", "Could not register default extension"); return REDISMODULE_ERR; } // register trie type RM_TRY(TrieType_Register, ctx); RM_TRY(IndexSpec_RegisterType, ctx); RM_TRY(TagIndex_RegisterType, ctx); RM_TRY(InvertedIndex_RegisterType, ctx); RM_TRY(NumericIndexType_Register, ctx); RM_TRY(RedisModule_CreateCommand, ctx, RS_ADD_CMD, AddDocumentCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SAFEADD_CMD, SafeAddDocumentCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SETPAYLOAD_CMD, SetPayloadCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_ADDHASH_CMD, AddHashCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SAFEADDHASH_CMD, SafeAddHashCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_DEL_CMD, DeleteCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SEARCH_CMD, SearchCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_AGGREGATE_CMD, AggregateCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_GET_CMD, GetSingleDocumentCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_MGET_CMD, GetDocumentsCommand, "readonly", 0, 0, -1); RM_TRY(RedisModule_CreateCommand, ctx, RS_CREATE_CMD, CreateIndexCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_CMD_PREFIX ".OPTIMIZE", OptimizeIndexCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_DROP_CMD, DropIndexCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_INFO_CMD, IndexInfoCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_TAGVALS_CMD, TagValsCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_EXPLAIN_CMD, QueryExplainCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SUGADD_CMD, SuggestAddCommand, "write deny-oom", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SUGDEL_CMD, SuggestDelCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SUGLEN_CMD, SuggestLenCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SUGGET_CMD, SuggestGetCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_CURSOR_CMD, CursorCommand, "readonly", 2, 2, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SYNADD_CMD, SynAddCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SYNUPDATE_CMD, SynUpdateCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SYNFORCEUPDATE_CMD, SynForceUpdateCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_SYNDUMP_CMD, SynDumpCommand, "readonly", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_ALTER_CMD, AlterIndexCommand, "write", 1, 1, 1); RM_TRY(RedisModule_CreateCommand, ctx, RS_DEBUG, DebugCommand, "readonly", 1, 1, 1); return REDISMODULE_OK; } RediSearch-1.2.2/src/module.h000066400000000000000000000002501364126773500157650ustar00rootroot00000000000000#ifndef RS_MODULE_H_ #define RS_MODULE_H_ #include "redismodule.h" int RediSearch_InitModuleInternal(RedisModuleCtx *ctx, RedisModuleString **argv, int argc); #endifRediSearch-1.2.2/src/numeric_filter.c000066400000000000000000000104361364126773500175110ustar00rootroot00000000000000#include "numeric_filter.h" #include "rmutil/strings.h" #include "rmutil/util.h" #include "rmutil/vector.h" /* * Parse numeric filter arguments, in the form of: * min max * * By default, the interval specified by min and max is closed (inclusive). * It is possible to specify an open interval (exclusive) by prefixing the score * with the character * (. * For example: "score (1 5" * Will return filter elements with 1 < score <= 5 * * min and max can be -inf and +inf * * Returns a numeric filter on success, NULL if there was a problem with the * arguments */ NumericFilter *ParseNumericFilter(RedisSearchCtx *ctx, RedisModuleString **argv, int argc) { if (argc < 3) { return NULL; } // make sure we have an index spec for this filter and it's indeed numeric size_t len; const char *f = RedisModule_StringPtrLen(argv[0], &len); FieldSpec *fs = IndexSpec_GetField(ctx->spec, f, len); if (fs == NULL || fs->type != FIELD_NUMERIC) { return NULL; } NumericFilter *nf = malloc(sizeof(NumericFilter)); nf->fieldName = strndup(f, len); nf->inclusiveMax = 1; nf->inclusiveMin = 1; nf->min = 0; nf->max = 0; // Parse the min range // -inf means anything is acceptable as a minimum if (RMUtil_StringEqualsC(argv[1], "-inf")) { nf->min = NF_NEGATIVE_INFINITY; } else { // parse the min range value - if it's OK we just set the value if (RedisModule_StringToDouble(argv[1], &nf->min) != REDISMODULE_OK) { size_t len = 0; const char *p = RedisModule_StringPtrLen(argv[1], &len); // if the first character is ( we treat the minimum as exclusive if (*p == '(' && len > 1) { p++; nf->inclusiveMin = 0; // we need to create a temporary string to parse it again... RedisModuleString *s = RedisModule_CreateString(ctx->redisCtx, p, len - 1); if (RedisModule_StringToDouble(s, &nf->min) != REDISMODULE_OK) { RedisModule_FreeString(ctx->redisCtx, s); goto error; } // free the string now that it's parsed RedisModule_FreeString(ctx->redisCtx, s); } else goto error; // not a number } } // check if the max range is +inf if (RMUtil_StringEqualsC(argv[2], "+inf")) { nf->max = NF_INFINITY; } else { // parse the max range. OK means we just read it into nf->max if (RedisModule_StringToDouble(argv[2], &nf->max) != REDISMODULE_OK) { // check see if the first char is ( and this is an exclusive range size_t len = 0; const char *p = RedisModule_StringPtrLen(argv[2], &len); if (*p == '(' && len > 1) { p++; nf->inclusiveMax = 0; // now parse the number part of the RedisModuleString *s = RedisModule_CreateString(ctx->redisCtx, p, len - 1); if (RedisModule_StringToDouble(s, &nf->max) != REDISMODULE_OK) { RedisModule_FreeString(ctx->redisCtx, s); goto error; } RedisModule_FreeString(ctx->redisCtx, s); } else goto error; // not a number } } return nf; error: free(nf); return NULL; } void NumericFilter_Free(NumericFilter *nf) { if (nf->fieldName) { free((char *)nf->fieldName); } free(nf); } /* Parse multiple filters from an argument list. Returns a vector of filters parse, or NULL if no * filter could be parsed */ Vector *ParseMultipleFilters(RedisSearchCtx *ctx, RedisModuleString **argv, int argc) { int offset = RMUtil_ArgIndex("FILTER", argv, argc); if (offset == -1) { return NULL; } // the base offset from the original argv int base = 0; Vector *vec = NewVector(NumericFilter *, 2); while (offset >= 0) { base++; NumericFilter *flt = ParseNumericFilter(ctx, &argv[base + offset], argc - (offset + base)); if (flt) { Vector_Push(vec, flt); base += 3; offset = RMUtil_ArgIndex("FILTER", &argv[base + offset], argc - (offset + base)); } else { // we got a FILTER keyword but invalid filter - return NULL Vector_Free(vec); return NULL; } } return vec; } NumericFilter *NewNumericFilter(double min, double max, int inclusiveMin, int inclusiveMax) { NumericFilter *f = malloc(sizeof(NumericFilter)); f->min = min; f->max = max; f->fieldName = NULL; f->inclusiveMax = inclusiveMax; f->inclusiveMin = inclusiveMin; return f; } RediSearch-1.2.2/src/numeric_filter.h000066400000000000000000000021531364126773500175130ustar00rootroot00000000000000#ifndef __NUMERIC_FILTER_H__ #define __NUMERIC_FILTER_H__ #include "redisearch.h" #include "search_ctx.h" #include "rmutil/vector.h" #define NF_INFINITY (1.0 / 0.0) #define NF_NEGATIVE_INFINITY (-1.0 / 0.0) typedef struct numericFilter { const char *fieldName; double min; double max; int inclusiveMin; int inclusiveMax; } NumericFilter; NumericFilter *NewNumericFilter(double min, double max, int inclusiveMin, int inclusiveMax); void NumericFilter_Free(NumericFilter *nf); NumericFilter *ParseNumericFilter(RedisSearchCtx *ctx, RedisModuleString **argv, int argc); Vector *ParseMultipleFilters(RedisSearchCtx *ctx, RedisModuleString **argv, int argc); /* A numeric index allows indexing of documents by numeric ranges, and intersection of them with fulltext indexes. */ static inline int NumericFilter_Match(NumericFilter *f, double score) { int rc = 0; // match min - -inf or x >/>= score int matchMin = (f->inclusiveMin ? score >= f->min : score > f->min); if (matchMin) { // match max - +inf or x inclusiveMax ? score <= f->max : score < f->max); } return rc; } #endifRediSearch-1.2.2/src/numeric_index.c000066400000000000000000000466721364126773500173460ustar00rootroot00000000000000#include "numeric_index.h" #include "redis_index.h" #include "sys/param.h" #include "rmutil/vector.h" #include "rmutil/util.h" #include "index.h" #include "util/arr.h" #include #include "redismodule.h" #include "util/misc.h" //#include "tests/time_sample.h" #define NR_EXPONENT 4 #define NR_MAXRANGE_CARD 2500 #define NR_MAXRANGE_SIZE 10000 #define NR_MAX_DEPTH 2 typedef struct { IndexIterator *it; uint32_t lastRevId; } NumericUnionCtx; /* A callback called after a concurrent context regains execution context. When this happen we need * to make sure the key hasn't been deleted or its structure changed, which will render the * underlying iterators invalid */ void NumericRangeIterator_OnReopen(RedisModuleKey *k, void *privdata) { NumericUnionCtx *nu = privdata; NumericRangeTree *t = RedisModule_ModuleTypeGetValue(k); /* If the key has been deleted we'll get a NULL heere, so we just mark ourselves as EOF * We simply abort the root iterator which is either a union of many ranges or a single range * * If the numeric range tree has chained (split, nodes deleted, etc) since we last closed it, * We cannot continue iterating it, since the underlying pointers might be screwed. * For now we will just stop processing this query. This causes the query to return bad results, * so in the future we can try an reset the state here */ if (k == NULL || t == NULL || t->revisionId != nu->lastRevId) { nu->it->Abort(nu->it->ctx); } } /* Returns 1 if the entire numeric range is contained between min and max */ static inline int NumericRange_Contained(NumericRange *n, double min, double max) { if (!n) return 0; int rc = (n->minVal >= min && n->maxVal <= max); // printf("range %f..%f, min %f max %f, WITHIN? %d\n", n->minVal, n->maxVal, min, max, rc); return rc; } /* Returns 1 if min and max are both inside the range. this is the opposite of _Within */ static inline int NumericRange_Contains(NumericRange *n, double min, double max) { if (!n) return 0; int rc = (n->minVal <= min && n->maxVal > max); // printf("range %f..%f, min %f max %f, contains? %d\n", n->minVal, n->maxVal, min, max, rc); return rc; } /* Returns 1 if there is any overlap between the range and min/max */ int NumericRange_Overlaps(NumericRange *n, double min, double max) { if (!n) return 0; int rc = (min >= n->minVal && min <= n->maxVal) || (max >= n->minVal && max <= n->maxVal); // printf("range %f..%f, min %f max %f, overlaps? %d\n", n->minVal, n->maxVal, min, max, rc); return rc; } int NumericRange_Add(NumericRange *n, t_docId docId, double value, int checkCard) { int add = 0; if (checkCard) { add = 1; size_t card = n->card; for (int i = 0; i < MIN(card, n->splitCard); i++) { if (n->values[i] == value) { add = 0; break; } } } if (n->minVal == NF_NEGATIVE_INFINITY || value < n->minVal) n->minVal = value; if (n->maxVal == NF_INFINITY || value > n->maxVal) n->maxVal = value; if (add) { if (n->card < n->splitCard) { n->values[n->card] = value; n->unique_sum += value; } ++n->card; } InvertedIndex_WriteNumericEntry(n->entries, docId, value); return n->card; } double NumericRange_Split(NumericRange *n, NumericRangeNode **lp, NumericRangeNode **rp) { double split = (n->unique_sum) / (double)n->card; // printf("split point :%f\n", split); *lp = NewLeafNode(n->entries->numDocs / 2 + 1, n->minVal, split, MIN(NR_MAXRANGE_CARD, 1 + n->splitCard * NR_EXPONENT)); *rp = NewLeafNode(n->entries->numDocs / 2 + 1, split, n->maxVal, MIN(NR_MAXRANGE_CARD, 1 + n->splitCard * NR_EXPONENT)); RSIndexResult *res = NULL; IndexReader *ir = NewNumericReader(n->entries, NULL); while (INDEXREAD_OK == IR_Read(ir, &res)) { NumericRange_Add(res->num.value < split ? (*lp)->range : (*rp)->range, res->docId, res->num.value, 1); } IR_Free(ir); // printf("Splitting node %p %f..%f, card %d size %d\n", n, n->minVal, n->maxVal, n->card, // n->entries->numDocs); // printf("left node: %d, right: %d\n", (*lp)->range->entries->numDocs, // (*rp)->range->entries->numDocs); return split; } NumericRangeNode *NewLeafNode(size_t cap, double min, double max, size_t splitCard) { NumericRangeNode *n = RedisModule_Alloc(sizeof(NumericRangeNode)); n->left = NULL; n->right = NULL; n->value = 0; n->maxDepth = 0; n->range = RedisModule_Alloc(sizeof(NumericRange)); *n->range = (NumericRange){.minVal = min, .maxVal = max, .unique_sum = 0, .card = 0, .splitCard = splitCard, .values = RedisModule_Calloc(splitCard, sizeof(double)), .entries = NewInvertedIndex(Index_StoreNumeric, 1)}; return n; } int NumericRangeNode_Add(NumericRangeNode *n, t_docId docId, double value) { if (!NumericRangeNode_IsLeaf(n)) { // if this node has already split but retains a range, just add to the range without checking // anything if (n->range) { NumericRange_Add(n->range, docId, value, 0); } // recursively add to its left or right child. NumericRangeNode **childP = value < n->value ? &n->left : &n->right; NumericRangeNode *child = *childP; // if the child has split we get 1 in return int rc = NumericRangeNode_Add(child, docId, value); if (rc) { // if there was a split it means our max depth has increased. // we are too deep - we don't retain this node's range anymore. // this keeps memory footprint in check if (++n->maxDepth > NR_MAX_DEPTH && n->range) { InvertedIndex_Free(n->range->entries); RedisModule_Free(n->range->values); RedisModule_Free(n->range); n->range = NULL; } // check if we need to rebalance the child. // To ease the rebalance we don't rebalance the root // nor do we rebalance nodes that are with ranges (n->maxDepth > NR_MAX_DEPTH) if ((child->right->maxDepth - child->left->maxDepth) > NR_MAX_DEPTH) { // role to the left NumericRangeNode *right = child->right; child->right = right->left; right->left = child; --child->maxDepth; *childP = right; // replace the child with the new child } else if ((child->left->maxDepth - child->right->maxDepth) > NR_MAX_DEPTH) { // role to the right NumericRangeNode *left = child->left; child->left = left->right; left->right = child; --child->maxDepth; *childP = left; // replace the child with the new child } } // return 1 or 0 to our called, so this is done recursively return rc; } // if this node is a leaf - we add AND check the cardinality. We only split leaf nodes int card = NumericRange_Add(n->range, docId, value, 1); // printf("Added %d %f to node %f..%f, card now %zd, size now %zd\n", docId, value, // n->range->minVal, // n->range->maxVal, card, n->range->entries->numDocs); if (card >= n->range->splitCard || (n->range->entries->numDocs > NR_MAXRANGE_SIZE && n->range->card > 1)) { // split this node but don't delete its range double split = NumericRange_Split(n->range, &n->left, &n->right); n->value = split; n->maxDepth = 1; return 1; } return 0; } /* Recursively add a node's children to the range. */ void __recursiveAddRange(Vector *v, NumericRangeNode *n, double min, double max) { if (!n) return; if (n->range) { // printf("min %f, max %f, range %f..%f, contained? %d, overlaps? %d, leaf? %d\n", min, max, // n->range->minVal, n->range->maxVal, NumericRange_Contained(n->range, min, max), // NumericRange_Overlaps(n->range, min, max), __isLeaf(n)); // if the range is completely contained in the search, we can just add it and not inspect any // downwards if (NumericRange_Contained(n->range, min, max)) { Vector_Push(v, n->range); return; } // No overlap at all - no need to do anything if (!NumericRange_Overlaps(n->range, min, max)) { return; } } // for non leaf nodes - we try to descend into their children if (!NumericRangeNode_IsLeaf(n)) { __recursiveAddRange(v, n->left, min, max); __recursiveAddRange(v, n->right, min, max); } else if (NumericRange_Overlaps(n->range, min, max)) { Vector_Push(v, n->range); return; } } /* Find the numeric ranges that fit the range we are looking for. We try to minimize the number of * nodes we'll later need to union */ Vector *NumericRangeNode_FindRange(NumericRangeNode *n, double min, double max) { Vector *leaves = NewVector(NumericRange *, 8); __recursiveAddRange(leaves, n, min, max); // printf("Found %zd ranges for %f...%f\n", leaves->top, min, max); // for (int i = 0; i < leaves->top; i++) { // NumericRange *rng; // Vector_Get(leaves, i, &rng); // printf("%f...%f (%f). %d card, %d splitCard\n", rng->minVal, rng->maxVal, // rng->maxVal - rng->minVal, rng->entries->numDocs, rng->splitCard); // } return leaves; } void NumericRangeNode_Free(NumericRangeNode *n) { if (!n) return; if (n->range) { InvertedIndex_Free(n->range->entries); RedisModule_Free(n->range->values); RedisModule_Free(n->range); n->range = NULL; } NumericRangeNode_Free(n->left); NumericRangeNode_Free(n->right); RedisModule_Free(n); } /* Create a new numeric range tree */ NumericRangeTree *NewNumericRangeTree() { #define GC_NODES_INITIAL_SIZE 10 NumericRangeTree *ret = RedisModule_Alloc(sizeof(NumericRangeTree)); ret->root = NewLeafNode(2, NF_NEGATIVE_INFINITY, NF_INFINITY, 2); ret->numEntries = 0; ret->numRanges = 1; ret->revisionId = 0; ret->lastDocId = 0; return ret; } int NumericRangeTree_Add(NumericRangeTree *t, t_docId docId, double value) { // Do not allow duplicate entries. This might happen due to indexer bugs and we need to protect // from it if (docId <= t->lastDocId) { return 0; } t->lastDocId = docId; int rc = NumericRangeNode_Add(t->root, docId, value); // rc != 0 means the tree nodes have changed, and concurrent iteration is not allowed now // we increment the revision id of the tree, so currently running query iterators on it // will abort the next time they get execution context if (rc) { t->revisionId++; } t->numRanges += rc; t->numEntries++; return rc; } Vector *NumericRangeTree_Find(NumericRangeTree *t, double min, double max) { return NumericRangeNode_FindRange(t->root, min, max); } void NumericRangeNode_Traverse(NumericRangeNode *n, void (*callback)(NumericRangeNode *n, void *ctx), void *ctx) { callback(n, ctx); if (n->left) { NumericRangeNode_Traverse(n->left, callback, ctx); } if (n->right) { NumericRangeNode_Traverse(n->right, callback, ctx); } } void NumericRangeTree_Free(NumericRangeTree *t) { NumericRangeNode_Free(t->root); RedisModule_Free(t); } IndexIterator *NewNumericRangeIterator(NumericRange *nr, NumericFilter *f) { // if this range is at either end of the filter, we need to check each record if (NumericFilter_Match(f, nr->minVal) && NumericFilter_Match(f, nr->maxVal)) { // make the filter NULL so the reader will ignore it f = NULL; } IndexReader *ir = NewNumericReader(nr->entries, f); return NewReadIterator(ir); } /* Create a union iterator from the numeric filter, over all the sub-ranges in the tree that fit * the filter */ IndexIterator *createNumericIterator(NumericRangeTree *t, NumericFilter *f) { Vector *v = NumericRangeTree_Find(t, f->min, f->max); if (!v || Vector_Size(v) == 0) { // printf("Got no filter vector\n"); return NULL; } int n = Vector_Size(v); // if we only selected one range - we can just iterate it without union or anything if (n == 1) { NumericRange *rng; Vector_Get(v, 0, &rng); IndexIterator *it = NewNumericRangeIterator(rng, f); Vector_Free(v); return it; } // We create a union iterator, advancing a union on all the selected range, // treating them as one consecutive range IndexIterator **its = calloc(n, sizeof(IndexIterator *)); for (size_t i = 0; i < n; i++) { NumericRange *rng; Vector_Get(v, i, &rng); if (!rng) { continue; } its[i] = NewNumericRangeIterator(rng, f); } Vector_Free(v); IndexIterator *it = NewUnionIterator(its, n, NULL, 1, 1); return it; } RedisModuleType *NumericIndexType = NULL; #define NUMERICINDEX_KEY_FMT "nm:%s/%s" RedisModuleString *fmtRedisNumericIndexKey(RedisSearchCtx *ctx, const char *field) { return RedisModule_CreateStringPrintf(ctx->redisCtx, NUMERICINDEX_KEY_FMT, ctx->spec->name, field); } struct indexIterator *NewNumericFilterIterator(RedisSearchCtx *ctx, NumericFilter *flt, ConcurrentSearchCtx *csx) { RedisModuleString *s = fmtRedisNumericIndexKey(ctx, flt->fieldName); RedisModuleKey *key = RedisModule_OpenKey(ctx->redisCtx, s, REDISMODULE_READ); if (!key || RedisModule_ModuleTypeGetType(key) != NumericIndexType) { return NULL; } NumericRangeTree *t = RedisModule_ModuleTypeGetValue(key); IndexIterator *it = createNumericIterator(t, flt); if (!it) { return NULL; } NumericUnionCtx *uc = malloc(sizeof(*uc)); uc->lastRevId = t->revisionId; uc->it = it; if (csx) { ConcurrentSearch_AddKey(csx, key, REDISMODULE_READ, s, NumericRangeIterator_OnReopen, uc, free, ConcurrentKey_SharedNothing); } return it; } NumericRangeTree *OpenNumericIndex(RedisSearchCtx *ctx, RedisModuleString *keyName, RedisModuleKey **idxKey) { RedisModuleKey *key_s = NULL; if (!idxKey) { idxKey = &key_s; } *idxKey = RedisModule_OpenKey(ctx->redisCtx, keyName, REDISMODULE_READ | REDISMODULE_WRITE); int type = RedisModule_KeyType(*idxKey); if (type != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(*idxKey) != NumericIndexType) { return NULL; } /* Create an empty value object if the key is currently empty. */ NumericRangeTree *t; if (type == REDISMODULE_KEYTYPE_EMPTY) { t = NewNumericRangeTree(); RedisModule_ModuleTypeSetValue((*idxKey), NumericIndexType, t); } else { t = RedisModule_ModuleTypeGetValue(*idxKey); } return t; } void __numericIndex_memUsageCallback(NumericRangeNode *n, void *ctx) { unsigned long *sz = ctx; *sz += sizeof(NumericRangeNode); if (n->range) { *sz += sizeof(NumericRange); *sz += n->range->card * sizeof(double); if (n->range->entries) { *sz += InvertedIndex_MemUsage(n->range->entries); } } } unsigned long NumericIndexType_MemUsage(const void *value) { const NumericRangeTree *t = value; unsigned long ret = sizeof(NumericRangeTree); NumericRangeNode_Traverse(t->root, __numericIndex_memUsageCallback, &ret); return ret; } #define NUMERIC_INDEX_ENCVER 1 int NumericIndexType_Register(RedisModuleCtx *ctx) { RedisModuleTypeMethods tm = {.version = REDISMODULE_TYPE_METHOD_VERSION, .rdb_load = NumericIndexType_RdbLoad, .rdb_save = NumericIndexType_RdbSave, .aof_rewrite = GenericAofRewrite_DisabledHandler, .free = NumericIndexType_Free, .mem_usage = NumericIndexType_MemUsage}; NumericIndexType = RedisModule_CreateDataType(ctx, "numericdx", NUMERIC_INDEX_ENCVER, &tm); if (NumericIndexType == NULL) { return REDISMODULE_ERR; } return REDISMODULE_OK; } /* A single entry in a numeric index's single range. Since entries are binned together, each needs * to have the exact value */ typedef struct { t_docId docId; double value; } NumericRangeEntry; static int cmpdocId(const void *p1, const void *p2) { NumericRangeEntry *e1 = (NumericRangeEntry *)p1; NumericRangeEntry *e2 = (NumericRangeEntry *)p2; return (int)e1->docId - (int)e2->docId; } /** Version 0 stores the number of entries beforehand, and then loads them */ static size_t loadV0(RedisModuleIO *rdb, NumericRangeEntry **entriespp) { uint64_t num = RedisModule_LoadUnsigned(rdb); if (!num) { return 0; } *entriespp = array_newlen(NumericRangeEntry, num); NumericRangeEntry *entries = *entriespp; for (size_t ii = 0; ii < num; ++ii) { entries[ii].docId = RedisModule_LoadUnsigned(rdb); entries[ii].value = RedisModule_LoadDouble(rdb); } return num; } #define NUMERIC_IDX_INITIAL_LOAD_SIZE 1 << 16 /** Version 0 stores (id,value) pairs, with a final 0 as a terminator */ static size_t loadV1(RedisModuleIO *rdb, NumericRangeEntry **entriespp) { NumericRangeEntry *entries = array_new(NumericRangeEntry, NUMERIC_IDX_INITIAL_LOAD_SIZE); while (1) { NumericRangeEntry cur; cur.docId = RedisModule_LoadUnsigned(rdb); if (!cur.docId) { break; } cur.value = RedisModule_LoadDouble(rdb); entries = array_append(entries, cur); } *entriespp = entries; return array_len(entries); } void *NumericIndexType_RdbLoad(RedisModuleIO *rdb, int encver) { if (encver > NUMERIC_INDEX_ENCVER) { return NULL; } NumericRangeEntry *entries = NULL; size_t numEntries = 0; if (encver == 0) { numEntries = loadV0(rdb, &entries); } else if (encver == 1) { numEntries = loadV1(rdb, &entries); } else { return NULL; // Unknown version } // sort the entries by doc id, as they were not saved in this order qsort(entries, numEntries, sizeof(NumericRangeEntry), cmpdocId); NumericRangeTree *t = NewNumericRangeTree(); // now push them in order into the tree for (size_t i = 0; i < numEntries; i++) { NumericRangeTree_Add(t, entries[i].docId, entries[i].value); } array_free(entries); return t; } struct niRdbSaveCtx { RedisModuleIO *rdb; }; static void numericIndex_rdbSaveCallback(NumericRangeNode *n, void *ctx) { struct niRdbSaveCtx *rctx = ctx; if (NumericRangeNode_IsLeaf(n) && n->range) { NumericRange *rng = n->range; RSIndexResult *res = NULL; IndexReader *ir = NewNumericReader(rng->entries, NULL); while (INDEXREAD_OK == IR_Read(ir, &res)) { RedisModule_SaveUnsigned(rctx->rdb, res->docId); RedisModule_SaveDouble(rctx->rdb, res->num.value); } IR_Free(ir); } } void NumericIndexType_RdbSave(RedisModuleIO *rdb, void *value) { NumericRangeTree *t = value; struct niRdbSaveCtx ctx = {rdb}; NumericRangeNode_Traverse(t->root, numericIndex_rdbSaveCallback, &ctx); // Save the final record RedisModule_SaveUnsigned(rdb, 0); } void NumericIndexType_Digest(RedisModuleDigest *digest, void *value) { } void NumericIndexType_Free(void *value) { NumericRangeTree *t = value; NumericRangeTree_Free(t); } NumericRangeTreeIterator *NumericRangeTreeIterator_New(NumericRangeTree *t) { #define NODE_STACK_INITIAL_SIZE 4 NumericRangeTreeIterator *iter = rm_malloc(sizeof(NumericRangeTreeIterator)); iter->nodesStack = array_new(NumericRangeNode *, NODE_STACK_INITIAL_SIZE); array_append(iter->nodesStack, t->root); return iter; } NumericRangeNode *NumericRangeTreeIterator_Next(NumericRangeTreeIterator *iter) { if (array_len(iter->nodesStack) == 0) { return NULL; } NumericRangeNode *ret = array_pop(iter->nodesStack); if (!NumericRangeNode_IsLeaf(ret)) { iter->nodesStack = array_append(iter->nodesStack, ret->left); iter->nodesStack = array_append(iter->nodesStack, ret->right); } return ret; } void NumericRangeTreeIterator_Free(NumericRangeTreeIterator *iter) { array_free(iter->nodesStack); rm_free(iter); } RediSearch-1.2.2/src/numeric_index.h000066400000000000000000000101021364126773500173260ustar00rootroot00000000000000#ifndef __NUMERIC_INDEX_H__ #define __NUMERIC_INDEX_H__ #include #include #include "rmutil/vector.h" #include "redisearch.h" #include "index_result.h" #include "redismodule.h" #include "search_ctx.h" #include "concurrent_ctx.h" #include "inverted_index.h" #include "numeric_filter.h" #define RT_LEAF_CARDINALITY_MAX 500 /* A numeric range is a node in a numeric range tree, representing a range of values bunched * toghether. * Since we do not know the distribution of scores ahead, we use a splitting approach - we start * with single value nodes, and when a node passes some cardinality we split it. * We save the minimum and maximum values inside the node, and when we split we split by finding the * median value */ typedef struct { double minVal; double maxVal; double unique_sum; u_int16_t card; uint32_t splitCard; double *values; InvertedIndex *entries; } NumericRange; /* NumericRangeNode is a node in the range tree that can have a range in it or not, and can be a * leaf or not */ typedef struct rtNode { double value; int maxDepth; struct rtNode *left; struct rtNode *right; NumericRange *range; } NumericRangeNode; typedef struct { NumericRangeNode **nodesStack; } NumericRangeTreeIterator; /* The root tree and its metadata */ typedef struct { NumericRangeNode *root; size_t numRanges; size_t numEntries; size_t card; t_docId lastDocId; uint32_t revisionId; } NumericRangeTree; #define NumericRangeNode_IsLeaf(n) (n->left == NULL && n->right == NULL) struct indexIterator *NewNumericRangeIterator(NumericRange *nr, NumericFilter *f); struct indexIterator *NewNumericFilterIterator(RedisSearchCtx *ctx, NumericFilter *flt, ConcurrentSearchCtx *csx); /* Add an entry to a numeric range node. Returns the cardinality of the range after the * inserstion. * No deduplication is done */ int NumericRange_Add(NumericRange *r, t_docId docId, double value, int checkCard); /* Split n into two ranges, lp for left, and rp for right. We split by the median score */ double NumericRange_Split(NumericRange *n, NumericRangeNode **lp, NumericRangeNode **rp); /* Create a new range node with the given capacity, minimum and maximum values */ NumericRangeNode *NewLeafNode(size_t cap, double min, double max, size_t splitCard); /* Add a value to a tree node or its children recursively. Splits the relevant node if needed. * Returns 0 if no nodes were split, 1 if we splitted nodes */ int NumericRangeNode_Add(NumericRangeNode *n, t_docId docId, double value); /* Recursively find all the leaves under a node that correspond to a given min-max range. Returns a * vector with range node pointers. */ Vector *NumericRangeNode_FindRange(NumericRangeNode *n, double min, double max); /* Recursively free a node and its children */ void NumericRangeNode_Free(NumericRangeNode *n); /* Create a new tree */ NumericRangeTree *NewNumericRangeTree(); /* Add a value to a tree. Returns 0 if no nodes were split, 1 if we splitted nodes */ int NumericRangeTree_Add(NumericRangeTree *t, t_docId docId, double value); /* Recursively find all the leaves under tree's root, that correspond to a given min-max range. * Returns a vector with range node pointers. */ Vector *NumericRangeTree_Find(NumericRangeTree *t, double min, double max); /* Free the tree and all nodes */ void NumericRangeTree_Free(NumericRangeTree *t); extern RedisModuleType *NumericIndexType; NumericRangeTree *OpenNumericIndex(RedisSearchCtx *ctx, RedisModuleString *keyName, RedisModuleKey **idxKey); int NumericIndexType_Register(RedisModuleCtx *ctx); void *NumericIndexType_RdbLoad(RedisModuleIO *rdb, int encver); void NumericIndexType_RdbSave(RedisModuleIO *rdb, void *value); void NumericIndexType_Digest(RedisModuleDigest *digest, void *value); void NumericIndexType_Free(void *value); NumericRangeTreeIterator *NumericRangeTreeIterator_New(NumericRangeTree *t); NumericRangeNode *NumericRangeTreeIterator_Next(NumericRangeTreeIterator *iter); void NumericRangeTreeIterator_Free(NumericRangeTreeIterator *iter); #endif RediSearch-1.2.2/src/offset_vector.c000066400000000000000000000133421364126773500173510ustar00rootroot00000000000000#include "redisearch.h" #include "varint.h" #include "rmalloc.h" #include "util/mempool.h" #include /* We have two types of offset vector iterators - for terms and for aggregates. For terms we simply * yield the encoded offsets one by one. For aggregates, we merge them on the fly in order. * They are both encapsulated in an abstract iterator interface called RSOffsetIterator, with * callbacks and context matching the appropriate implementation. */ /* A raw offset vector iterator */ typedef struct { Buffer buf; BufferReader br; uint32_t lastValue; RSQueryTerm *term; } _RSOffsetVectorIterator; typedef struct { RSAggregateResult *res; size_t size; RSOffsetIterator *iters; uint32_t *offsets; RSQueryTerm **terms; // uint32_t lastOffset; - TODO: Avoid duplicate offsets } _RSAggregateOffsetIterator; /* Get the next entry, or return RS_OFFSETVECTOR_EOF */ uint32_t _ovi_Next(void *ctx, RSQueryTerm **t); /* Rewind the iterator */ void _ovi_Rewind(void *ctx); /* memory pool for buffer iterators */ mempool_t *__offsetIters = NULL; mempool_t *__aggregateIters = NULL; /* Free it */ void _ovi_free(void *ctx) { mempool_release(__offsetIters, ctx); } void *newOffsetIterator() { return malloc(sizeof(_RSOffsetVectorIterator)); } /* Create an offset iterator interface from a raw offset vector */ RSOffsetIterator _offsetVector_iterate(RSOffsetVector *v, RSQueryTerm *t) { if (!__offsetIters) { __offsetIters = mempool_new(8, newOffsetIterator, free); } _RSOffsetVectorIterator *it = mempool_get(__offsetIters); it->buf = (Buffer){.data = v->data, .offset = v->len, .cap = v->len}; it->br = NewBufferReader(&it->buf); it->lastValue = 0; it->term = t; return (RSOffsetIterator){.Next = _ovi_Next, .Rewind = _ovi_Rewind, .Free = _ovi_free, .ctx = it}; } /* An aggregate offset iterator yielding offsets one by one */ uint32_t _aoi_Next(void *ctx, RSQueryTerm **term); void _aoi_Free(void *ctx); void _aoi_Rewind(void *ctx); void *_newAggregateIter() { _RSAggregateOffsetIterator *it = malloc(sizeof(_RSAggregateOffsetIterator)); it->size = 0; it->offsets = NULL; it->iters = NULL; it->terms = NULL; return it; } /* Create an iterator from the aggregate offset iterators of the aggregate result */ RSOffsetIterator _aggregateResult_iterate(RSAggregateResult *agg) { if (!__aggregateIters) { __aggregateIters = mempool_new(8, _newAggregateIter, free); } _RSAggregateOffsetIterator *it = mempool_get(__aggregateIters); it->res = agg; if (agg->numChildren > it->size) { it->size = agg->numChildren; free(it->iters); free(it->offsets); free(it->terms); it->iters = calloc(agg->numChildren, sizeof(RSOffsetIterator)); it->offsets = calloc(agg->numChildren, sizeof(uint32_t)); it->terms = calloc(agg->numChildren, sizeof(RSQueryTerm *)); } for (int i = 0; i < agg->numChildren; i++) { it->iters[i] = RSIndexResult_IterateOffsets(agg->children[i]); it->offsets[i] = it->iters[i].Next(it->iters[i].ctx, &it->terms[i]); } return (RSOffsetIterator){.Next = _aoi_Next, .Rewind = _aoi_Rewind, .Free = _aoi_Free, .ctx = it}; } uint32_t _empty_Next(void *ctx, RSQueryTerm **t) { return RS_OFFSETVECTOR_EOF; } void _empty_Free(void *ctx) { } void _empty_Rewind(void *ctx) { } RSOffsetIterator _emptyIterator() { return (RSOffsetIterator){ .Next = _empty_Next, .Rewind = _empty_Rewind, .Free = _empty_Free, .ctx = NULL}; } /* Create the appropriate iterator from a result based on its type */ RSOffsetIterator RSIndexResult_IterateOffsets(RSIndexResult *res) { switch (res->type) { case RSResultType_Term: return _offsetVector_iterate(&res->term.offsets, res->term.term); // virtual and numeric entries have no offsets and cannot participate case RSResultType_Virtual: case RSResultType_Numeric: return _emptyIterator(); case RSResultType_Intersection: case RSResultType_Union: default: // if we only have one sub result, just iterate that... if (res->agg.numChildren == 1) { return RSIndexResult_IterateOffsets(res->agg.children[0]); } return _aggregateResult_iterate(&res->agg); break; } } /* Rewind an offset vector iterator and start reading it from the beginning. */ void _ovi_Rewind(void *ctx) { _RSOffsetVectorIterator *it = ctx; it->lastValue = 0; it->buf.offset = 0; it->br.pos = 0; } void _ovi_Free(void *ctx) { rm_free(ctx); } uint32_t _ovi_Next(void *ctx, RSQueryTerm **t) { _RSOffsetVectorIterator *vi = ctx; if (!BufferReader_AtEnd(&vi->br)) { vi->lastValue = ReadVarint(&vi->br) + vi->lastValue; if (t) *t = vi->term; return vi->lastValue; } return RS_OFFSETVECTOR_EOF; } uint32_t _aoi_Next(void *ctx, RSQueryTerm **t) { _RSAggregateOffsetIterator *it = ctx; int minIdx = -1; uint32_t minVal = RS_OFFSETVECTOR_EOF; uint32_t *offsets = it->offsets; register int num = it->res->numChildren; // find the minimal value that's not EOF for (register int i = 0; i < num; i++) { if (offsets[i] < minVal) { minIdx = i; minVal = offsets[i]; } } // if we found a minimal iterator - advance it for the next round if (minIdx != -1) { // copy the term of that iterator to t if it's not NULL if (t) *t = it->terms[minIdx]; it->offsets[minIdx] = it->iters[minIdx].Next(it->iters[minIdx].ctx, &it->terms[minIdx]); } return minVal; } void _aoi_Free(void *ctx) { _RSAggregateOffsetIterator *it = ctx; for (int i = 0; i < it->res->numChildren; i++) { it->iters[i].Free(it->iters[i].ctx); } mempool_release(__aggregateIters, ctx); } void _aoi_Rewind(void *ctx) { _RSAggregateOffsetIterator *it = ctx; for (int i = 0; i < it->res->numChildren; i++) { it->iters[i].Rewind(it->iters[i].ctx); it->offsets[i] = 0; } }RediSearch-1.2.2/src/print_version.c000066400000000000000000000005151364126773500174000ustar00rootroot00000000000000#ifdef PRINT_VERSION_TARGET #include #include "version.h" /* This is a utility that prints the current semantic version string, to be used in make files */ int main(int argc, char **argv) { printf("%d.%d.%d\n", REDISEARCH_VERSION_MAJOR, REDISEARCH_VERSION_MINOR, REDISEARCH_VERSION_PATCH); return 0; } #endifRediSearch-1.2.2/src/pytest/000077500000000000000000000000001364126773500156625ustar00rootroot00000000000000RediSearch-1.2.2/src/pytest/CMakeLists.txt000066400000000000000000000006771364126773500204340ustar00rootroot00000000000000# Find all the Python files with test_* in them FILE(GLOB PY_TEST_FILES "test_*.py") FOREACH(n ${PY_TEST_FILES}) GET_FILENAME_COMPONENT(test_name ${n} NAME_WE) ADD_TEST(NAME "PY_${test_name}" COMMAND "python" "-m" "unittest" "${test_name}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") SET_TESTS_PROPERTIES("PY_${test_name}" PROPERTIES ENVIRONMENT "REDIS_MODULE_PATH=$") ENDFOREACH()RediSearch-1.2.2/src/pytest/Makefile000066400000000000000000000000721364126773500173210ustar00rootroot00000000000000PYTHON:=python2 test: $(PYTHON) -m unittest discover -v RediSearch-1.2.2/src/pytest/base_case.py000066400000000000000000000004211364126773500201360ustar00rootroot00000000000000from rmtest import ModuleTestCase class BaseSearchTestCase(ModuleTestCase('../src/module-oss.so')): def setUp(self): self.flushdb() def search(self, *args): return self.cmd('ft.search', *args) def flushdb(self): self.cmd('flushdb') RediSearch-1.2.2/src/pytest/games.json.bz2000066400000000000000000012507751364126773500203660ustar00rootroot00000000000000BZh91AY&SY _d">`(=hH݇@(Z} H4ht 6!C@@PB0*@P(P)Tt"n*%xZ "%H D")Pt1E@u .∢ "%5@ETTQQ 6J5A@TE@RT}JMEkD(UiJ4"F!U(")E٥DJi+:T{jAUD%A@E{Օ :}v|GxQUJP*wbz.րlR%$H%Nh@i+vr!%v_)<ƛ㫭YMjr-ge6H#XdϠi73{') }`R>7|[NkWgA\)[^նwTn0낥ph;p;ٽ@s^}shҫh.\Un\wuf^ySFmzuE =5Mhn[{>#TXp5 ik@ݹjn}Yw+Wn;yۧw9}thwn{㮩D[Ɓ dtnDۼ1w^awwu_{>jzN=}= 9T+zS)1jf$Gs#vp:6 *T ,gP6[^g>KhO)R Q@*@ ($TFofq9ªl @깽rtV`#Jg={y{[yI={)W>}d gsv݇ܢs4ϼ́%L`f79Ε@jTSYM8RJB%:\5uλF%UH!e뻻θ;n]=u{k[c|ڻu}^\ݹW<_]rg3%8ק7=_'vhnUgW,hY[٢kggkt}zzw1rHtmU ր (Mqvx}Ҵ:skMլwzݕR Ҹ2P|W TyA$/.îliUn9xauih ׷\wȄg\: ِQE:.vF)v:u\(% u{'viKVw^֥X}vUwDիQL0NP$֣O-'bT]׻K{]XSnѫ9qu˜w8Ux{Ww$dw˫ܻ;g܈(% "IPI #ngfܟ|zVM$;;wكEEH >@A6ꆺY@=8FҀu({oFݺwy^w9c-7{`r'L5*](tش]۹'ҀQAoKjF,  m為=ѝXu67D)AV]]/P(;`r6nV wtg gS\7r{pjwvhUpujwN VjBn'g}Fz>5 ` m 4K{ 4@ @C@@BI 2DA&4iOORh#@$$HJx jM4hiJD@5OF$M=OjPiT"hL@ &@z6h4zMI 240RO%=O(j%;2PTDj cJ'RDEO_~u~1y^0oz[Z|Wa(l#hs?mznWG?8PNͿucӺ1VM5][^wrg)>~Α_,ݲ^ ã!fCԺQ}RuD,C(^]N|6/G 5Y '<=!}`bYN>Npp=m?g jIEV$v+Y{ d/4 Bφy$z_&yM<6d/aSdObY_S-ܨ:;H.<}wNgR顜}L ;*WJS!%Jѷ.@Q\õ֐]3+C d: _oq–K ٧ Q}6]iv3*YK}?M 2ҵ#vUӔVmdWElD%PQ;e_Ugp\:* "D@ 0*IK IK ,Ȍȣ2@MP,%*A @ HB$ @ "$*HR@  BH@ 0*A@@B(@1HCP  (PPA  U"P(H$ 0  J0 (+( !åu.m1L,_;|K _rOO<~7&L6haC#"i")𜈇]Xa8Czvx^1p^"70ꀎzq(+Vхv;&<Iӓ0lP5 ?i-u:Xj)SQ<%2NL>ZQs+oF't=6l}$:hg41]// 4ECȃo]Ϯ^Bz/blz_!]PT|m,hTJ\ lK[BBm ~W*Wt!3_0<CSǿhwb7F3B$Xh9!=r?.!ST8QV8` U]?sUUYuIۇ(%I0v$|m*{upvRkv'+v8pL1=O>Џ1""l[h f4wۋ˓!J(@ 8êo\-:(8G΅7~Pi:,qKE#03pUzU]:$\GO57Q۵1ov=7D c3L]~Mw43`rô{>FN:Daݻ1OeXg׋Mqe4O;=_Ik'Ó >ZҌ$&!ȯN90c% 5=^M_0^,GZy+7"2WK)祹9[^cٔcէTE+R k~*zf{z*\1vAժoBJQ-XGlV9ssmLKmD0<[gpoO вf/`=yn+|uq*d<bL_6|tu5R?aMawa]# 6zާilz]Y[:eA^./#~@e mN!4FCKúkvu jf+a.. O^j-{DVP-ԊrOuP ֗":VƘDBG~[3JFՂ[~!i?eDA=w5gpYD}{zgAAvPHؑ+?">ӣnW.0^];؊)xj[-ih`uq;a/!qĢf;ŕ;&".)Mpߣm[prRߞA?5]`;k%$-SY KʮIK8EdA==YQ:o)uFTXwMzJM6Hk]&7^m}}>t3uafD"&_0[lgTkrYXQqa6"UP>2%巯giB$".68].H§D~䤜2W: u4`*G"YocgHVٌu b-hL6_=B8AAW8[LO֣SgtC`Q;&cw`TcoS+hr!]\PTƲ|s.׎ M!]MO7 5R-4.Ta1>ʾYqTHqܦY~76rih0QY@s Ho:wup=W툝 b,po"Р%9_m'f0{a;nn逃aP#iϟb%ҽK#}\%  ,O`\>)"dnA+LuD 7Og R t%m v`c %!g v[M'Oam++-uڠt)Ql%sz,2)y+3m߳uǖV \6 $a3}av4ˈSl"U3 I9ήQA(:쾸s짰I uew8r㲎}Q?LAn?-컦A"̠ yŒl\PFV"GВ BQ!T@U $D?(PAH)  `ĜgiK/ۓI5p JjCQيr_h>{YkIUѡ*Hx"3~G;3l+t| yNe _.[:ŗl ʸp=sku)Q{?*xk1$Ja~ =F/ E=<#Vl=y &P%]Q"OTsUDvv{hm!*%׳?T'o@vNם r::z,ւCscҵ\'A"`INT@sH`:|GgfrZ)؂W H)j^LM Sz5O#l }W!2 !>zρomƲoIkӾa].BZ`Q> "vw;?ϣ{H`횛㑅u^OZ0;J.袌ҸcV$Gآϛ1-i}^=Ԗ l۴'p(ݣk-%K :/R`X(XM꿏3 8ԘS =1;e}qlݜh>V~󄃃ܢӦyҷ S*Zo!yB9pbJ**q#ve "lr{gA Dc,\SyYh6o~VfU]Vu?0=}Cٗ7Ιc='TGYPƊT@+4aϻcZ u:~N$Jv[ é Tx!PʙA, Ÿ o:HykOU>̠>@85%NXgM~X+ s<_ "eۯ1.gAk_?olg<# ]Z˫V(P6{xjp{ @H,< M|}'u/!>ه`mAYV].pwvL@{'uSWvtB.(W*%3ko7؂!VE{2" :"B́%?^-?%( @B!(,Q;;}pClpЍ g*+l k!)ghν@QGߍ,; Y^,N%gXz-*މDnY ,;=Ľ{YAZkx@.(t5'H++~%2:nHc (4pfDEuڨdo;Zcd~Yca AHr/OeWˑjS^ݱoj6YHU/oHVƬ^`$AtiGlJsz<=*'Kx}}BO"7/7ӱ>Pm؁ Q(ZY<ߕ:] @?}ymX)j4{=d%p"jHR3g-VWٿ p=1. ٶՃ߃/@?zA0P7!* yerpoB_׆#61ݗd7R^! ̓]:ۓ. jn|o@.!kcevW `3{*pѳ|q@'YP =nfi/|7uqwk_=0[;"PcޝY@QH?cT.)j/q>׉$ Nݿ{?6~]_M͛czz}7x6[mZ#;'^~.x}F~~nRFS p)A6 ?*PV3Vx7R/<He}5<:r`1xWۊD5n]s|5rIvw]>`TMPnuaܠ~.h}uLIpP#"Gnb[^\Նb5ics٤QD;G+ۀv"7\D|Ϸ(x ׳#85egVkxH~G.Z|ň :nEw*g[M]n6J`&#h9wm`|" u>caۖ/mH:n#9nMp93>u&:3@ׇr迫_6[A!{r%fNi]K26ۀIrxp±]YtF#{nҏ4g:tz"@Q /HNAP)j5d& v-sgI]rw> ܅%ݝO"F[AÛX"0K=pOMXeEB lxdmL8Ϯ3#{G:`7R{р/s& QK] OwmGID 1@p4*4Z NG:)tDsӦ: î!]r(.QW;P/=YyHDf;,e:4ByzY(pxL9te` -Z$ˬ#dҢe: > Bo 3L&&aMO]e1t6"}EPc$9W QqmB{$#{Oڈ_g?dzᇒp~VN(vzq^n #ks5ń;:cD~h\`~;Yb@ڨ.A,B ؇wM>Z(ZWC1Ol+ڌ$vݱ%d 1]֭ԠPǻʯm;] [T}~ #vbO0Ȟ$|«gRz{|8 V7𴘚Fay{ܷlgyaNw|[D] }nsdw<6o;T A apwވ7ۀK$J *^'kko^[o芲n&O' p;,CZ;uRUpm{,MOKU璞I\FxBj [*76߇!=z1BIóQ؍`Q7v?:l~s}IcE~'Decc[/\,P1nR&c˺Ԉz9'0cg%t }JsZ:ψhB Hulbp I`3k?\av4뻓WO:g]Gv*:'lr~[|l{;,=| OjOG^)\׾ۇp06~a0PT?TyiŽôAp[}LF(2}BF3J)7K zռc{^TXz' ޟib>Q g"3:߾$Uܜ0P|v:-aT*cP\'|Ua8Xwi&:b#;6<`@UH4;J [L Z2iF^=|,p Q'mC`6~=;o$M'/Q9}7k>v?)>b3vdsոh$>lr곊׫@Z!z$3d}.S![, Q5 _qGqMNohdvH$=(FRHhG}#Ջ|/W؃pd(AS޼ygӄ4@m]{(vCXkAJ ԩ'OׂlgO,A#­ɯ~Ma>K<0X"Vyi[ztx6u5Ǹ*7osL޾O5Vpκ&E(m+B^PZF lkQ (*.NW]: {cHS/zb5BѰ_ "5Byk{WGN%8@gfVr"._)yw0x/@Ԉډ<ȨU */Uߔ.~Lqʊ,kzp>\}~&z22pCnkUݤQ%"ZsA aNݫd8s >鹉J'D* @aVp %}~@׃z,F=g7/|l}`׎]nŏ;NsUA??dPiP=`Qy{d~vѼ|G;jhMF"2}@.tGRoI*;gBܐ44W朹O ~{v`#@1:w'^xiS (>Uh8(hsl?Lb#'ko1X9 mPpP8}VMw$nK ͶPR y1  P]4g{"`F0C1G*o< ƒPt@+)q Av@z}NjszxP\E t{ja#Ẹ]=#4>p!"$m)K_8tj/xma ɩluqr{Y䏛7uБЉwW="Ex?|MugwGۛ<5A-!Ur {ߠlWm<޹4/~€w`+Ջr(/dd{K7Ct,jD 5>>e>{.7mk(Hx(6}˫=Y'wP@-k!XFtrK?KF0˕?(ۗ]騲oK;="ۃ( )b5|1379N㏃j9VxvTuyRG2=%. ~x*@ x8|_n 8Y^îZ~?x i;LV:KI N>Ox f//0Wkx=^Ձm9HD<}#TCavn˚r+.r ]qR($/f 6! V(Pĥn@ag W U4&oupUW7wrP-/լb;X+qDH]CnW$I6~ۑFz؝)A$ D } 5?~zKF;%i{\cPIH  AFE~")fEu%H8~ Є./e;24)>Dxv V,W2:廜Uo%.8Y%P"rZiMߜ/a>ah륎I/+n2K)=n{w3<6|(!=hbNs;߿!! 2'*[`^IRV׆{RggBBOڋ4bK(D=lL܈HӷGz})߮4tJ݌)YJs :<ce~ٶhS'<6]󅫕÷Ŵk[.v**dcuŖLXO5OG}ѭQ6QosD Z8nu_]z.<=IŇZ -_)P~ECǒ=Q@U!߷ۻzw|jNcߓ& ٪]s򐾁` 躑O[a[K&0ԼR[_r61PELNL}A D{C0ņGT3SYFdu[Pa[JD@ȱ 9y#j5kEy6#~_ד_c0] G0OD 50+Al/%݂Т_D1i4?fN{{>1%AX2hcn9wj:M3~),2 zw}ûf~]ߨ~+'Sk 5($* Ap շn(8ճǧ~uGjI(J( o߷(wYhh'鑮}wO? hKpx t5zW:Cw_tRXwOr"ҏ?xvWE,Դ"c|6h^ESUŸ?_^ט؁9IX)Fug @E~a!c(JAhPkoEK*D~|ܑkKCD%l~&ש~:jŠ:0'Nxǭi<"[xkPe[X*;4{cX?_Ml4+Q4E28 nuɃ>u9.~W@aZ7w1ڝ+_/cDw3Ԣ UZf:JEڇxVDOѱMk0s^ā < zu.Q==K,=Qsm$ \oo}5`x@ }6|9NH%uxq3@A8xD&YcB( K/P?.;Qw"g%`^x/~ă۩>(`5ѧ|M^K.]}GÖe6qrz>ن'd$%;7wOYC j%ٟl rGosw!!Bm?|#j9bO< Ã}ƆႹ^BBԠGp;dK@qү1,P3Dy(OIJ#8 Nz'o_0 w;ý3$-}: +&?2YaO!|R_}O2P(DX`'+u;y+ʃ^S׺rԞ 1dyHݮp)bG[ .4s J5T-.D (t@E?N$3v] *5SS:{qǫg09Y-n p+k['n+}KwOB{2ƶɿ"e\+IG_?{;h<WusOxՄ?,Dn(  r=zr %a 1O/m1:miJSֆ=md>RaO,?QvM "  esG0RomNf@7JC0d"[hDVWpo}$\889.&f9|,[6!;"?X"$Y *(J 78҉`G=8-ELPj'rU[S۠I@IE.d1~Z0y2"[]?b2 } noƂEOoZD;nX{PC8Q#|6<wNu?Y]rۈ"(:5כa 3G/mg=[Ƈפ,zle,dB aw| E0 ldrBPszcÔ)MDe9qKOycC>h@Ɔ뭀er dT'MxUfбˎFhpq@1*f|tC #?gKg?ǬxtA@1[_eFcLOsӿӱ<ק^C,sA^G}~) PHckNo?[ uݩ1q =GI# Jуm$ːk54` rV i@ϣ#ꄢ{}F _r@[(#a ~axw/:(sa`5MAQ[HdYSo 0yáw>(:Sk9AWhtsjp;s8! CZsd|7Ŀ%]ҠCO}GYBI%b~T}} qߟ%Ln ߧ3i9wF p ~yg> Z bpHb-x,}~|\>?e-hirQoDz m9P}dƛ݆񻾯t0 lAb* 0'"[r-;JG8Jp5i)"}Fi fd6BFv(X8Vxa{>>:%0) @ E>}l"uVGCb TLoNU<>-vVc(' NHy({-! j:Q]A@ڼ{:gtw쇡!xmxujL(z$3 y{V׶V'v׻t%e zGh 8=nŵ$7yE&pI?~[oßxyf&PC|*(evG ,Bk׊p.kBP,'8_)AR%ҼR@\|@ mdezW( "B@ M lYwr Q\`GmQV;x2X$QOЈd$ rjɮ$.%5.Ό}t<|J']RkeNjQ8$QT`F]Dn/|W< }3t@$Z ̇@˳Kk!M'r3͌O}N.J\SspZxY0I;|T1J I2o j.lWVg7,CP,P|d O]Wo6ͱ?{fg=Ff@7@)$ (]Ve@^aVHȇgʳK &z}fS08H~nH$b y\ @qحL-髻~;#ϏLB|.[hܹچ[ *8fQ48 aYR %heaL[l '`AD?nxpG'&c{-^}|* Q`* zN oH_ŃwН6_ھlϣٝ? A>:((ȡ=9_XW Rg\#ک6؀#8< Q<¡TYD{`KU50fw ##VY `4g*rA((1)fSgU9)gC 0fOVf(!%r[K橁͔HA@sQörΠ7ROzOYz/!M)_\\ȄH&'g>QyHhzu΃yTO9Js 5/Hgh(>x`Ja+_^S`_Gz~\Ւ_5ݽ"?<|iȽ 0>1*`*1Ca`Cc?%Kk|e ?0WG~2ESx ދ7Y"ObOW8 ø?ݩ@E|s F)tiWI2__#["#-le:=dzj~wND4ps|o`(.iU~?8Ի׷lңO7%J15h;,wx1Ok{u3shm?7+[ d a $JI@J ^ `A>_AWe-`(@z<R)tR}z~;Sw{l '{41cvZPc4.?]K`?WWuv܌go tq_cGp^^*KG8g",6 L`?x ѪDyDR,criC!ПH7'a/WvL:C7JOIy0ؠyG 'K:&B7HGh]_O$txj TE"B.bf31 J,,:ޛ/:3 P!&\ dRS6yOӫ;kCx+EWԎ;}bL5$F !)4xQ ^QƈM<1gq6)8e:5To2 2Y!~z6fܯ+\_?L5!{c]^\{PfmmSK蠷<>骖\-_W:} WM?"{<;k9AQ~ (6t$N:]߿߮}u!x1ߨyE0o/I*'fBQ;i]~= =0b#Y_DDwo!rHڷLȤb3s궮;Qn`A)t m[{mo K2!^\_b;T%5£of`1!@@>} DRm w9%Qk7J&5_ "$;@#b;oƯId\)Q!6 ~(? aȗP _p|]U]cc+ ɺ'd 3y,־t8(t@H6J: v7O{ ;ܷqX8[)z-X;U$0dU^k72j^DVQ Q97;mrWL\2!rKbg2qg,jyPAJf?|D\ w?4$L.B.xB-6 /rC6nx逢{1 sS(g/D`zcɚDsMc=EN>1 xwu33*;n;{Or3&ӓۄ5 ee[$ىZ1}|u gM͝2,kV>'0|D=N+P=ÿPU %WK:O1)6,NƠo0")iP -8zl:X*#o!vqӘž 2 S:2zbOPхXQf[+.-9vaab&c DtnHqgb]`0qXȉ(uRnNqXw%+`o ;?Ks7?PlJ*6=p$cC6LH¢TjS`,8_iN)db &#P"޽>ġXP!a`sxyƮQ3e,#ac8IIa2@"Ks Q6WP?Yne.2ZBw=PudQ@\99״mU,uBua=FM&C>!G h= niv\/s'5X;T#^ zcj0sN<;8AT(x({~Jo:-@PC܉7N31М.] v%z}8xVu"7BEUݠȄ<᩻~o;MFgy>ʙӷ0E7݄!ƿ=ha=BՍ/"+_(ݜ?-2CźEjM|gM@GaStf{kۛ\ZN6JQEs3-ǧfFS4bU6,AJѠNsDAe.]|_9<0ΞĘb2ۜ"ta9N87 pIrH~%j%u w|7V+^8:gdf^)I( eu="y9%s)i4HQݚ^amB\rsa"#y{l8 DT~ kItdҨvox8 `wnޮyY'a}Qw?o`-P: dO8TuZbz=uy"d7Oc( }_K0k6pGK8 -_qמ#>¿zQf*6B9z-ǥxq,e" PTlz[?%Z'٪ ?䠌sRl=\ep 03U CC&X=pL9dQD~_z82 n<$7B >@$G(~81KˇouW/5r@ d5=$C& _BhDlQpGI26Kc 9{rtӼ!{@ʃA$C%T|Ba_=pݭ8,7Nyr$NZ%0f)C2JjTtb}.=DZ6޷R `Hu1UOc'=LBD)+~8<L۹^ 1TcP3C*yMDxWQP8%8a Ճ3d8Ujisfs#:'vE}bID{5lrVA*>&P(d@_{|PҵS֮5>򇗊CU8̈́Z2@(/Ql;ԺcY4%Izv,uo5@qyjWݝ d{(v Q8+ybô>!1)1c yP=mCѭf}&M!SS,[U.5bH&ɧMd,^d^o*_X'4g s -Y~*Ԃy8/ŊgD3/C#:ǡXYr Fjo6KjS5d[W8߸:!w)̽x/1.Y2d1]a0qQse @߷lq'M.P8|n?>>r`#VmUcm^:. xVMyӡfuLi8@Ex,,XLl&䴠&nDJ5WChbqۗW=Oj~q42[ P1I@ mm511qQ$Tl~\. [GbKqOfڴ\/cfS.3n79qo]gw[veKC`gW矋/y= XW,Gn P?ڰ}wG]C آtkAr@iHGİQv^}ѿ2,PʗZ0OG9HLu5=&PXU{7<[=p0{qO/24Ehھ,*;ѱ"l~< H_ ߟw -e 0H PYcS=3u2H@NdcP4LwBUÎ`cG_S*%wS}MP1}y= q)7Gb@DSW^SMa șKR"(ΐjvп## Hv]&W1c銐Aj#Y3Gc.:ߨQ4LBMj02j-wRS`l|gJ=]0{CQgQʴA'>_;(;\1[! 6Zjk&F&DLy0Һ$`hܜIq MeC~FÍ98#\ĜZߪqЌ,vBFk.1zav@`O-Ke9kr={pߠ \6sk(M,z}~?Ɔ' "/Bub -X t%՛oc8bRW 䏃 8bVЦvb{fD𽀋٠ZjBZ['ڜ,Lmnzcl)җYhbhalZ,RAhX? 0}TuL60Q$O"(4V<]]rV[!bwbzĎ8<wDXMWe 8al!#)gQ _#sFCy,)'}'M&uM4޿NNjӟ{yRRjws0MK wdHbe" NDg?P-rkB`w_pb+5̸Z7ǜu+6p&]bi$̽a;*@yi&roק,p 4WX>v_eԤ{dߖSv cИHg-59'{[|fZ!A=z !*gۤ~Q{7uz#7K8EDcIrS^~ؠ" [IdhY=,xaaǨ΅`s,`UuQ 85QQ,O]P ]rfF !" 2(e38_iZCX?G*N[t0Fy 0s.eLݞ:#ȎU~梕 SX@\~cnj2;@Wu tӈ -~ dR}c'(*JJdԷ!oZힽoK#&5oD(tGBm݃VĞ~{=l΀$`k eَqP 變POmq xP-k˗YžiVK,WzRk-m|G7C7OseڭaD6y l5#ڏذ[B2?7$98J;Htt0 E Ə0ԢPE=kZԍF^@S]^Z@> }60z8s^y(2r#dP#IsV!"@^| 8l۟hLmuKZ!BƂ C){ (&CH f N xt_l(+ie^ cIn j+=A*c[t 2gJ9)(Ҷ_kx)wXmk !d8!awċWqjF|?s TXEAaPsMP*P.#=&KV1FǑaBͬuB` ؂XӁ-~6M8 !0:Z;ȳO[!imqtPYC2M.KNذ2,X]v>sVҬ'+b[`k%8,Gf)k[x "LM$J P/E a- 3b1.+_e{+RdP5,U5>c1ȏݞb]/8뚥^>q1K;>;:Lˁ:G n߷H}[X,v?^zwC;l=ŨE3Isf%ڨhGCZ@٪\^P8 -'= $ oS Q+mu랛τbS-"Jk$V j'*V(rCCζ5Э{ߢ+z@ڹj>_Q _}}{u?L\UWSIȜ句;[q曔U;5xtL?7 "r3 f ǰ*+#Tf?._}zFUY}4@\2uz~X $Pou]GdAIo'Â#Y3t69ɢ,PCPzt ĭ]Ai SHD,Kru&h? s/3| %Q?24 ľzoi-BU筌,&@KϳHY[dm)M2J'6|eO '#2Cu.o8TuZ ^d+pJ8 l !ҾXpa3{ դΈn ۩~>x'G+e|Es:M2fGິ:և`y*st/'8X]c$vx8יtTz]d]GbL녿sM-cˮtfq%Av=`0!suxd=},l[Ӧ|Cyr٨kUB袲fg${|Lx9ϱF@anG`,>$ϻ]3~$[0amHއ? mr2M5jC U(br?=0Ġk!v#7:]pq&rt!q!;8B`z[:\ \{+U\Nˁ|CMӠe8]mp\X?kYμ߲HK.α5 SqpԵI,`[Y#z1 @.FXPjr'ZL1zƴ$~ (Äio3~r߹`X{c?~ixxh] 119MaKIC0+"-&0`wcO6.l=1#'JM}"^q׮[l%94g{owӛ<]8"Z'C&nXOs:c*|ČFkdQRR$L5Gqߟ0t;<(#}{H+C9/q&zbV6B^c>kR05 EbE n&pXrM %0wPo &Њ],"ug>'r+ҹQ3*y߮_{Q_IHȨ #K"3[/\Z3"[,8Ca }j׉c) ͇#K'Bm\0qh5JsN˛ge752'gN2sդ[izVol6V rWm P`ՑnT GA!Nf A!u,I^Db]Wzj`f30{ uĦ~Rhjf̡ܮ{+pk ,NvBfgcG޲tH8#A1VrpRu"x н0D! ʻv+ZOG|x7RU>bb\օF[sV'9 iYa,zza 6/.3cQ "ꦴ%B1 Nu@HVʎBp& g ~8[hT濫M\֒+R|L͛pĬg>H&YqX,hlHfQ*05.O ؚhFIy8 ͇30f -K>;$^MO͒ ?+?l.V;2i7eǥkTdNIRWA8-Fr_b_#b|Ep!5(vkw3 K?:q`HާYG3?_cXGy C@"C^ vFv'j3e|\ܥ-GmBlߴv@s5OqУ[",Q$6#i"HSᒡWF J/gߋ %pXAX4¯*R{WW1B3FKq"W_Ict2`80$f s.&46<(uGC\*UdLC/(IufxwGú˶ORQy _X C #r{7Zζ`u^+VYMqshc].BA׭^k_9%+ Hn1تD$U;:\`6f:*.wOV@oi5 .;;QޝPY0,Yuesblh~oRWgWe%"?I;WϹ /Lڷ$~X37`$Ha$f`=6yvFT|ke ܉1Uu kySߙPO3-X` ˣaϫ!i`7&A %s?i`tL Ʀ̕Ԑs ;e8S\:kٜg/45~=+OE&B熐V}ϮNa?Zf;Y>=+QC7%O笭>nrV0ȗ( \3x }S›|Dwn^^wzwko,((>YU0wM|>q|ЌQ-$˜+1"3ǃW괣 ݳq?e[bᣄmv(ߍvd`Fz'%]Nj"+d[e&,;eq;|5.# bk+v=9*A1l " JsE(嶒8ȋ~3kWՠ4dFPA T)ok;DCZBmpY`!\AI'֛#E_q5YP0%@p#'8ǣ1ց1F&,p'SÍ(HhAgmE jtb}Z0ZV?Ypgw$Mo7 ga`AI}|O>Ԋrk`Ud>Z \xLOlzE ~>> +@8)yfKƝ%Z1un\zŦ'Rpf?#ט,~Tg$K$h nWa5N\]c*!#wE UAڤ+WE@(΅8{F9Ids./Gb i1$+{lK?`gk ށ%qRSPp9W 73LD "`z| 7q_G|$w9,] C$:.;qۆ77Cgr8Ր!orܧP~LC ʘ&!Rq=hYsV=HtLVNkI^`:S(!(t&qVD j_4xQj˜nKT>/q}ޖ3dv9+b#Ҍ9/`?<$?|3[i-|6<{3ma}GZ6 [X`~h L wE?T81H3" 03"վ%PN f Em݀#xOӎ~}s||ΕFEP$NMC`Ɏ%c"9ƛ_I;ίnW`U fm R2eziyͯV*\Ŷᆨ8q4GŬkzR[66UEpxpXwqwt0Pm6# +܊QTJ *1tX%צ*mϖ#ԕEgV*37mfMhHă#'*{ڙr81! lT#3m0t7PW}(]!릘9 i6FXӍF /^.ل24;=sR\a0 Ok6]@ EB0/p+4?\=;ȝ,vxF vE0IXM+^ooYrOc"ko͠w!*zJ/l$Vz@υG2y<3Od|Əs< pVQPu Egc |vPCgJT+['(R%{+` $RU2mOd+e_m.g'#٣0 /PFWTV uwF.Z#n)قn=x3qd{]Jq|syL]/4_ ]?!ؙq(BFEK]}/@"(~T9-h7SB/\>`iW=sS1zwZz)d]/0~Acֆwj$ʮK]\[~= ! @nus/'w.83堓?ۭR|ł|tHODZDE= u{_䆌4H>l< TY`!l lp ʧК A YQD'}Rtmk~͑uMX|s`9pUsK#;Ь<ǖ aX`qOB8KV$R ~=oG.!U!{_+$z^*>O׹- %U`:h+nwG%y/bCjj KŅCa|~: F،9y"KH1p,>LqC7F[`bNnU^U S똈[9YT7Պ@vc3>0 DvmvIUX!`kvg2ӷ}"'cT54}}8LAd Sq=eв iHx;h=ֺ+ y"s8"3gZzzxq~45p 0zjÖթpSv4~"4cE Փ=CE=xyWx0):ÞA@}gt;H: tN!n>}M!dioc=|X$FP2%"^CsmIy*m<"|w/?宐 с(*TySW͠~gsjܸ7Y/H.PbYL6 b)bAzm6yŞ/:":7TܯXRiZEG=_qJR"^u+D$mIoۋSV,UND:W!%u ON"ܟ+,̋=i!&8%M]Jk A  J}$=<}I;Ij3F v2IJ,s.GA5kEjwTډ8]8Mbr79^ߡ`/d ' *V0#賃Sa/_ܹ4d9 FӁ5P+f/p\9aEvfefVKN2s'M!PX'k&'F`$k#BԬ`q٥s!:FCp0rup"TykςE$>Fjߔ5CeZ}G632S='-c[>]z\w @D6G#d9YC{dǛ wU Q%H^X9s"c1챥(gאDt_ m/[Ҝ]1?#l;ߧpYcRܵU ]t`q{l|l'!@i =F"B ͕X8tҜ3dwXE"^  <`4"u1{5ϔ] Rm1H#0!.J.*: d Lؙͤ#" :p`3W\ QMѳ<ڳU)+tW@D$S+0x?Åc G?*58“RhFSQGc12ȑ*0K^# qnPe/lΫ0is_I,YikK4! g!PlD8$*KDkUX3U[ fl Pε hOO8o6X>%+C7{8{('wm0OR;ތCǝ8 HWP^(8\۸" .dHXZuoZg(H"CdMgCvJ,ߖЌ# 5JzBRe 'Y6U|UnrjԐ}Z6Gm^)evխZAԃ˔ ;&Qq%ִoIm|CMc曄F, rV2ȇ(0tc_Yo#$!1fGZIž r r@A(beBힶ~*=bl @Lj` Ē )?k"cU1~gd0ezd8wB=S]B&+@tX[`WEp6AOVXL6xrO|ћFZsbgG\A(u[~s:p0R{1`~1}9{vп=>p4,P-!CuR"FlLcEA͘F.l ފδ#!l-ýt[Hnv2zRS9ajԔe+r`?þ1c0=Gl# l y@Kտ00zt:* <($__(^8SNld}mF^ŘT],aer2aO. ,۵v{ omd1Lf#CXo?J2Bbw\uY0Hz {1=~'wKΞL?X*NKر"ۡ'XN `D_sX{|g*&[|WFk?&D qĄޮ㚥u1?}w~,B DS9n+A*^033@?io4M+\XbAfA݅Dܧw <,bh9LvBGn48I#pssДĵFxզk|Fj7֩I74yi)nuݎUt3:Qp.s9;/m]MOP-w$ n?8 RZ|- j +o>z7>fDY)a?3  ?<^yxyv'q7˖A46['Y`ȱ;,nv,HsσmOi b~^.!HqE6o?GHjtz`[L S]y 0RU̾ҝ2qg(G7oN @k$.}b ,:*nj?tp|zߨ f 2$Ic1e z[(/.4-PъqMډ?&o+$[V9 ~\b$ƅ*YNp#BJ'k2Ř) a^M%/?Srm 3G-Hk.([@NoV__#,*c9=ʣ}orajN@~Wv2 !2ԈvpQM>m[聩Q`9@2͢(nki,yNC6?07ÿL1\By*/߼<= GXx7eGlL ry[A6kXNnu Y"Rx )y" VlQRI~55!AUe8"# ˯FɆm"MMj78"Mw4lxo3,é5T^v X`Ȟ+1^ ;-6ẌS"uDW3TȄ @sØ$&,z[o3ׄfA8`;|6#e'u+$5T)0L@.|W/;m !6 w3qXpV4"3A6V$^F׮~!M8>9X`r G$ n+/>A*%S\pkm"k*rؗ]vZ32cKj %vk(4/e[@C`@Z蜟dpʌ4g |3{Z lx%ߋ'X}_V) 2eV""e _kk̓ ^_HkP OR?z_~wSISM9 ΎK0IC:;n (N0oQh1j(P9L::ri_[r*(mSPAĎai)SR_d!{-^ % ,Oɛ? ^Y˕jX2:X(^_),[Pq,{?O>:Cg +Jp/JuO8yX LLz dgAիZ^YǕUt¿>4f#9~-tf+yۍ`TC{ :Ɯ<p0uT kC|2(:լYQAelͨ&'m ]> XӋːh*qKb !agYH&ʋ]Vbos7Hm܇b8W_oz:+=88'念=)Vhn<$L=&OØh`ӍlCk[9r{u@u/,6Kws"Xhcz]kQ78͡A΅ܿ<6$-|Ĺ[zC7v8_$}wO#Ќ4 d=sG <)owr`)XLH ^TV>jhEi!|Γ~i#YaXk % \ B_zR@zݜc (!p B00facU EswY vW\p/_徒 !QL @!pme oYRnuVL6W֗|9צ*x5ܡP@%T2u|y ;^E 'UQzLw9~`C&wu|Ж:Vmul{*E. Dffjec#͆ ʖJ4A-G]񹯴p+<{u\e,V磨1 |,TiJ9:]]Ud b_O8alcOk\bDPL9K_Mg, 4/ KdD9,ىZxW}U[N%/dk#0[fޝ`P+Lp]pXEͶ%FϔhP:Lv%x>x~&Y$"ɟтΈdo}UQ 3ƹڠJ`s:&8%ZDsFi&tVBbB8\᳨vUDZF?+)m$7#hg=Ho=F5) dVӑT`%wht>{Q)EVAIL86`#Jhw|4c[GE^u [w#n)H0Xրsv 2#lįӾH2QBS`%~6D0_Kdk(s$:#wd?]*-bnsqt>TJ,!!_gYӑ0$'˧%u\f|.:ys"<(k2$bYYߕSl&BepB V?oQۼ(}r uӦx˃0$t.1{񮓜cyo#^M$UXSHsss":}t`yp=m0Ċ//~rsI(Z PS8 f|P>AL$f@}7dj$?`gJ O@Xu9P :}lwYbK 6>놦flQ#:}~^+THJ 7}k)Уm!Z#eQ_@Zj$†Φ>@W-My̳E 쀡v/ڸRH0OVN@0|3޺&Kc 4"C@4K%{:%]c :J݇4oc>@}4wHĿ};w`$ "[H PkC\=1 Ot<д& 'b„7}7X_E{B%ŒUCT-g5 ®ײFZIŃhɾV0C>a78){#JU1Clʙi7*.fqHtAy8>n]@PHHZ2Oelߝ*71rE[ֿ+@`I[z&F !A”C} Հx!ṉo_C.NnCu jCйj ;hz9rCk_o]!sB}k9=!/BIP!ʪ@C\6 lt7o 0 r1Bb l'Aq pE@~,Ԇp,a:MT~3hDW>~|"En B881F|mVlHKE6XuϾ fHmLzBV@]<6 *\f^G}sg9POV:g.G!_J'}ҖE ֣pUn"o2 s3f2d:$ fB&,$l] pfƦ[oy!AshIf*p);P3bz1Τ[8C])AQ"ӌp-eJRur,g F1 C19*b4r2T#cTwLGzÀ0als1WR(1%<A+hU , Xu|5NsN(m;_N0F^bAr5b/vX%*'n Kbzͯ#ֱi8]Y3 tff룣%E֐_`G(|/U$ 4'>GAfbG,C{;6! E8q"`HTY Q@5*S{*hm(lFz#e']I V4贬!@oc8G("Go[jBF5A6Q3ɔ\Lp9B (]U}@ Vɟ# 800F-o(h]s[h4#ka$,@a&iwFiz]'8Du=EH} a^ `(r-os ī˥L4wNc^ 7LA TOc~LE{T|O QfM Aqfs¸+Y5v?"{;`O_+}q?~(,-6iSݝ v^7 v0;dߎxr{rJ'yi .ʴ'Ё\5,RK]ZZKe}"q9:y#^L̸ùdmz nG \~d7w5/=穏m;hQlf.Dl ;^"|b٥{L+XS/a'j-@1`dI d YCR-#$on!RD(zp>ӿ~=? cէq4XH&qUe;#CG5IgEJ_gcr*Bi+0º_3[rݨR!;?[-2ix!}|3>-s.(Z%>,(ћZ`¶h&Ey$"l|-#w !]'_y8fc6Z!0a.F(`\?"ө뮆:-h' [GnاILisX ê`rK8u)5[Dbn-d 3Rȍ oBQ`ˎsVW:me mL^wWG3 /W=3zܚ6m۬wxKǗת:H|Nx;ۇ#!u?*gWJ 1@ ,UD0`ӉEml{JE#XFUfupsܶZJ3C;ڲ(X ~dR5t}ٚǷF'=̞ '՜Ty-ҌAau) s<\DSY)I.(DjX?XdXc*@"e Y4DkQ"rLxyM٨&\ `bq{T~x>iE'w8:z&idlB(EG[ԻT w⨡𪍜d(r;ݣfYc_.( P)}؎J5_֜qʹ_obaD V &DZ2hJ) Ltj*N~0: hC@~7vkq3ph|Qy땪Pc  -_Q@Ʌg A(1ځu ڹ8 dp.pa|CK*æ/EP3&K ̈́/֌ĐH73?$ PQu=_\<@QNcZ}<#hI# }ԆM;7}KL@Y$P,"pdrP=aO1h@!SjoDbjIL\Y5@q x%iP " ,h] y12P߬D;[t9?GV?lgI 8 ɉF(8^(B>!C?J?$'(H?c?Gˤ!ìw]@Tj0C0ϠI?c+4,1RzH&݇?}Nq_3d$3[뇱ϝR<Y~aCQ:g[핡sU-%]|nǬRN N76n>c-CT5{w9:z”߸ny8C#03b/  */qFbkCޣiڬ1D\-,g ǥW z:92tsdiwh9խr:hY.$0g/A|^~{| Z@z% ^f/H{h37f+SÓpVC}"yѧC(pky%ED6&>#>숬.3dA(RXCO[mj.nq{_bk3@;ש\D'ŊAe8 Z| DC;(\AjqyYƫ7PNH XZ;y)Y/X2O05;$:*PA-3>[? Y<Wp^/, =1NN: %0|K ^&8G^_40!+P0L6 k2v2X:wP Nf"̷c^wyS]L2O=PЃe#_JEgwY0 :<řk9{ze5c-!߼1c,Wz^ck]Cqpi[h)0q,60ؘ b NhE;!~wӱ8k2Ǔ~# bau]33<9'G7Qr@ڞ->omϝNwG}o r3׫7-}*;#ش,<5ċK9ϰos#] KT_[?&dLq'ޖ(N=W]z !p%9",^ cSfzAru}̋˿,`2]8 =,{Ʋojj?@t#u]-q9n )+>o& pu࣌Qw5E|!9Z8=߳Ы q`>O) $"Ei )x] u]qmZ6 wS޵\<ߏop:}ѭaXx/z֧LʷkTw-O^C#cC]kqYwu>cRq>UMbK'~aZ~qFn tit Pۣ񙙴^7:qlLIlX/bLOT{!6zd0lǻ3fFHZ%Dب8,7rH@}g7`)D*2blSg.}s[^7!R/$G]P#?<בunZn'A-֧L5mX6z`B'P,4y#%X8ʹF[I(n:QCWfUrM C롗Ƌ y꺳&Mk0bdTp;yQt8g!_ \< h\\16SPA;|b4E>WOC02. \̉JN賝nb|ea쫢| &#\hf?}M*oY8)qK9@B# ?/\IvQ4uno'1< bC彄CZu6שxlW Kxq_*W؈׫xWx1ӳ=\0!ǿjq#tìoD0`%-6ĸb(97[N 2/z=#&#Ӆv`Gp~X- 7BP;].b/PEkƗG3H+Ξ 0wZDVߝb"=&V`3 F?SчA[-ffp6/njxjT:z}8:9e5B)3 9J#we)U/[ A"`'w jm޿WqBvUK@xu!S.bרBXzˍԍaĬ(ӲvS)tlXvxBEF#VD>G8FV[(fdͽoL|$hgF_'[B#q#} FL5x@McY-ϼ#So;up~Q{֥A`dAl;]{SfŻ`%D0>bC<wZ{In׏>J໑@] U" w<յ?(1y:(FPtyu'9c=Sp< H["_)C|y5"'XGW,H$L>T~Vު]&p3ru{2kg_-ć{h9ck~0]Jߗ@HӎWtaf0KD^FA5R1;KY~w(۳+~G^}}Ӄ["~ԏv8CϬeFCB~"s˶{ "mSaa4r 亊@z:"#5/ȵyϝv㥁wn P*?^^a{l̇l&v_pD;NU~Xy鹌aa"?ojk(fuA G?՝>};ϑDžU稙5ͼ !]'[p݌͛HFoZ|D<=b:x*klܪM`dK^m+x x8(M;-&!6u\'z (^1ܗ|t\ۛ@W,_vN> 9` ,j z\yieOׇuЫ֧懑1m^^kS#Փ.f [*\MC 6'f@ jaK 'Ax]x?vLH醕ۂ{:ĢIxT!c aq(hTg0,@}Xb-=?z}Π!})F&}c= qIK et=(9ɛ6";J- C}kě.hǶ?J~6PgCG:a$}d ,AH"DK 30gwp1~oO%/*-E<@Za'ER-1EK\ׁ"A5{GBml^=!j:a8Yn뛈pS"rCE+q컫JM9ozL{Vx,|q*,8hݲ 1`$H_o~UnZeZrQdHEʼn*_.;#c\Pz k뻨@jg0iJn$Xv (i_T YzE*pQ/z> 'BkFǕ`,cfa[_"h=09 _Oi4Jn=o$hydX0á|:&D:I$ip8&T EF}(L dH1^BQP bY>X?VФ4·d]&#=@D&B3"?{p$ ymM(cȷ֋(VGʡ$%wv (EK.4&.5y~_ .k 3j&8r e>&┏χ%*0@I@v2H0f> (.ܾN (1ԯT; !ʮM q؏K~<X>Wyt|7fk-g؁7w %~PɛcN+w_U>HꕟOE_1kZ>BNT]8BWVH1b9 a8!?(6i_ 'ovkN™yE'CǹPfF:c}$)Kƒ{c[ȲY(S2p9j||ZnbWW ̕4Q5MxAX_5m:gI _ޡ!fF!ʜ0OF~yƤG0>&HKn~$|^B z.r9dR$[=lP=v'ѮBcק?/60(%(C{<̰oFRp03"Ju.>}KD*Bu??Dzauf&(/T>狗"ar _m`d_D8tG2SlƐĝ$t CSDC<Q+ZMǒJт\'_21N,,!GIpǎٷ?(۬? G"5 Lj ޡG#zCX_/3a&T|܁Bs1H-} XȐa })59ي<~?Ytٲ^P?oտLW~}KG왪1l|?[1dʒG H?\4jM֜;sJR+Xzq1kKM9K|^X (a &) -wre4@X8@AxBgWYgȇ &†q [9\/$0 ; tO}>JhL$"G g51J ^$!?\XԵ0phhL .CX܇N|MA=mh)! (H5[#}]c oģo2n2E1Q?ȑN14q'm KqMᡳQ?h@NqxJDެSq^ns4s^r4҉8vΧ筴z$H!`[ŦT?P) èTHD+@щ1"w)ٳ1OnByȚo90&PɭpA#% 뚊 m\,GB-`hS KqMzǼegTcNu &7@^3>l8($V:<,{M$Y)pb"56CfmmU w=;̠1b:1IQɋ$ Gn2 4+-5oT^Qxq~YSj)ec@*x!ncmf1Dp %_7$<L: hdTùpbbfeЉ1`mvZPYClY-W=Dk I~0\"܊b0ܹqqu*߮{w#;SZT9)6N-Y=2 I|祉S#0u#3 h&Shβ A%m._zil@ptM'YAdyC"yR=WOӗӓ)׵}W{.>#vruOMQydh_QDFAhbMѽiֱ]㨐{~&V3Z^l<,G bS]視f .`1Cxك z@GGwu=э9*8D h)X.Z Єf:VLc P F}</uNr.ag=!7\×K#d.crNHYk:osh`h=Lhl]ɱR+#ʞFDFz!QT):iEx(ˆSq}GAxG~k {YqWV ߥhw^ F[؞cF8!k]lN,%/CĤv72s*s-\[\)fv3O/ 0`]=={'A,ܢ㮱_cPe}N3w-SL{X8ef/sխg :o6mZڢ9\J+Ou~0p2nwCJ_Nت[hC hT4b nP_\Z?uf7]iW*T4DczӚ(,*H*z]s)IM H4Ti+%@*J"Tt CHC 'GR$ bi hh*h")h&'dR߯B<`S  OybZ|5PVhA Fh_>f`x4bySrĬ74n3ԫ5T9YiJkmm?u_Ê+5锩n[I*ִ͕6j_@de,5 R.oܼ@R'E{W.4E1-ky&AUg^o֟: g'P=hkC<_z׭_ͭ8bw+* qM*LPqnm09J/=o&mB3W6S3sSk.tDb0UU`gc.M@>9>_v5ɢeǻ-u5 r暼v8qa3ZFp~vũt¶]Ksw-5\{hDB=~Ym+uƳU#U o;j. *u8W\PX/gݔa)J wli9DA(:Mx8rX=l-vFo4Wc˷&sV=;WԳ8_¹4 u[j+jˊyS}~r}b3O"5!āG Q!5g;© S?^〭 _uDBPTgUDry,Vzpy(< Y,%vN2tl>۩E`<@2!Y~X~eLB3f2dq-8*E\#teZTpc֊R̶pӇ*aEjtv<_[v{Ƌ?u5 / :K̜x-[6p\:ƺ6^/"ه0bRKXt,Cq%OVw!\a!.ΰr1Kzj;*'rfP:vA?Iܷ7x0k"._û},;.˃ߩ{q|vVcuI&__~ӌ]#z7eЗ6\"bʸ, أǸ|^Qa>HQZh+׃:΂Zv~Ha8_/w_i! 0"PlMk|m7N+lmpձuڰ5Ks~X,-?+B\q\/Vyo^]/>Y@9O}m(e ]FϬ ucR9/ζ0CGc!nvROYP6ӱWONRQi ̹KwNػOqy.rzo,pob%8dg:3B+ «_r~ZYѺƇǎFmMo&iMoF-G(h8>'GŸ/ '&!Ըt "H6g5E.\L OG,OuY)UOZqYN[uRxM/(8t#Ir r5BpZ^Ue}fIvyc~zD(zˁolKuMSvTa%Eӏr(.)\&t pf $e9Ecv,X}LRӜD򤃒&%$fxfXq46-對b_˭CBڣǁL(("3OX*NuqAex`8xVW.1~HʀdK-?" - ,͊:;\UTq/&2#*E^W\qzWr<qf£0RPug- <Gȏ :O[PP|Zu_V,UMsxLEjSo0Css3ݧSBІs-( CA\ 7;⠤ć&Lt5aP) l7~箿Y|.6#DRO ġ?4IITF6($Qg gIL$FbP -mkV(F m6AlA1:IE 1Z1&DRViԔAH'3cISUYdJ64M[bv]BCUmXklJURA0u%SHf%8"&!vlF2LVh(h#Uk`gVtIurE4HPbd[+b(h@ ,Fj*hSQQZ cD4RKPQY -'ZH3T$IcTMVk͈3["6l2"J&`t% UT$ATm.6B Ţb*8-ema44 R*NL4 T h5F#A1DΔ@HQ41XbJe66lD3lFbE(PTxBYD,aZQ B4!F"R hAi 4#B434H,@P b" JJZHT!Pt0 9ZU("\4@Јj4 a P3(3* UiQR!T(i((X1"Z5B4& )hBPih"(  R*#@SB+)4( M*(DVB(̓*Т4' ЃUH:B$TL@Ĩ%큪?’JFGrTBQJ" T+ZCAAt1#s 4hCBP(kl֑jhR:B򹒝&6hҚ֍D4UcmbN!B48Q:3lU@l,mR^Z@QeD&VFXBXD+{IH`C@t1,Os|b Py'#4z{ľӐk`rf&#eG7% H-b(k<~gusC>T+Mlz w4&ef龫+p[~{Cvơ? ~ھK}^3E4#{ XGVryMl`L@"(=4F">`9?}rf)UhP9[LJ"?`Cd??Im_@`?b8̇k0dBXw?{=YCr|frl(H_>m=i!wԀCK.\!'b ႅ߾;1o?wH%-_s)?-?<^ߟ#߲&҅'j ?JP&'AnO"=.iъ{""ؽҎ/O-Lh 1`Ztg6u+:y $?<>F[G{,o^41.d6Fe !\LdOCl 2C@SY`  :مoda9a"- #Zc?7>lz OTX\;2D7UBfOl _r?pI((Py*Qu*x#3&(O~$ 푳f_fVxց5?“ j c5 lRrG7l{btw9ϝFX-58Y Q:tZ<cۖG]Fk$_[v}; 8֎j\axoKdz\=M=[?pAӈ],pj˳Ӷ_G^,b').y4XboLmXEnH_V83kX 2\ -YJ*΃..۴^ueNDhwΚBE+9rynE޿n;H CT;ܨq޺6ʼ @q`,xI N+]ݧ9/hg,@DL$Oa>$u|vPLGo\Ky@[<>yY/HFS0u]|g)("AEXzVBx[=s :|_̼h˓3A?E9߇U{R&?_%I Tޏ!̅'%W]MzlAQqm%L?Fyx qsܫҤi ɵ:=LapALJD*1A {W+K="?(1 D? F8FWYo[ LjYQw2|> *-( lDEN-٪&"[u雊4g:7Äݘfp:2"G5CާaQa?R@rA !y|raЂK-!"Ҋ V\3Cy˥ p 'Zvrܘz "ʃ0^ D d X'NNaPX=r̩L D5PlJYr1ťx(B"]GF Ż'CR'BKA8rj"~}8[P0w<(0$ֆX1jj"Ч %f|K: 8a % f{uj\S&)܃BD(P3ƳqlԈ9y0l\Dd2)NK ΄ P $`I{A5ۼ;b4Cm !*dJ)b "bj)"RX"* b&$"IJj"""`)* fj (")" **I&(*jij"(J&(X* ))&H)"*Z) )U!X$b"ZJ( b)F)J P A bh$*ZJ%( (BfZ( @ D"B6s=W$;۷xkYۿyF }6ތlU\@nq@15e#!˥ࣥ+-V#FIvi|xliK=1v8QpRDޚ.O!߿1oB_}fg}k]NtQe£Ƒ L/uΕ:U=^q>6M|l~u*#Λ߳5 ?:oYeTm):\鞒XCyq_P,` N{, m-q+O-"6;b]jkpp/D1ݎO\=?#sW4No7[e_wm6&vǮSJXsJz Rr8/Юp-Jrܴڲ }Kxr|lzw>}dl{m=UG,\lmvA[?0_A Tq ,^1eܰ 8^{İfw(Rsjy?\ҡ¹r;4[DI% 5׬E&–꫁I(ͮx_~U[VtA %o6!8Xpfv_Uֹ#Z>"'ty7Qo=w*rH23ҬQ gN9б?6KabvM E]HI_lbY=fK fq&P[)AXd֚jd窝Opu^̉1tk{F]]j|c5^1"m@fD,lGj޶~F6+`kY#A2P7i02'}IE/ (hB(5(c(-$ylWTlR 33RK.N&д>5Xs:@A1aB   9h!7 xw<( {UχVK9D[`**Miq5} hFE#p)%!bʣ]*H#H?W\,= z _,k`@#b`sH+ 8'i~?ŵ=^v CS@Dl Hq![jQ$&9BYe@E$0`M>%ehAOW~NXBt O57Xo>ZO?f~)rPoy}9 ?s>>7#`}ÀGXr^$m'Vn%Ks0Ea!ע;y F Ur0 ñ,'*y_W et +LׂY ^Ԉ9]GGpk F+/Pb9hȌfjc{qiϬI *P;[|c*@c88R{+83 WM[9 uD {K}kɖٵ՞, 0t͋ˆELd<u#XPT WLN vELurk@3T!.6{ Sm?ӆ Yߊ3qbߘC{%b>2&F:E* a*nQX6vX`H |'[/zz5 =" W=YLɂzp|e*VagOG C,LGw.!0 ( Y?=J={]8uA<$)z&wNјzusG 7v$ԓa}ݱ>ΑRx2W*v.ȉ)`˼Nun6 s-nH>n pz&@"AX| N;50qA;ӈ9uߠu^t\_o#<m۸_W<8rvSU7}WaVS{=✖/O׺z=B޷:}QVuIXY CWԾuClvfW4yؘNО0?QlA.vI;ҠJhhi`5ѫ&6M("U$,֔8(=Y]lգ`_&h"+4oZK`){71s٨A%Q|C7q+ߒb%zhBmc|=zzTb&00+Ha_nHЌZ x Ԛnx!@~?yq°r0) 0MSa0 S>$bC-yokۤ20k8uϸ5ڕA2&^ Nj˜=O%kt%ɶ\X,l@@qi/_u$\#֔iSHY=v5Yc&$rp#s҄X\Lpw|t%|`y@C8U*_)L& c%݂ˮЉ黪ot)7J"/{E \e]EB#?xԍ,YTe}q|'0~<,>[ÍuO0 0 :q9q<9s`rf&1bzt0ТB t_<{2_+LK+ uU8Qf];yxDk!?ߪ]p``|io Abʬmx%b2)ğw9ʴqKD-@(Fy Nl-1{JİCk jS 'lpUb+&бk]@;x[L?N-'|.҂FPB` g ]*{-05$=D>er;9'\=pˬ~df54u['Ш\Z3CcW*=S_y8aT*ZN-Dz(VB۶/[} (LjLيݎ|NBPOxGcrCԓy`5^Ϯb$;}\f:.O^`:sV)3CSaґtz!f:8gw2uЭC'+JOs0f*>&0[8ˌ4N#Q˼3'v- U ϣ@w)T:`(wѐ^Vc,8>5Rd{.<;!ԇ5 _ڙih[yV*dxsXJVLk?!IЌ 7\$YU[zԜt2xV~;ެFZDG8P{w|rW.yKꙧhNŊ!sڎ;n5v-Wp*`YOLed$}bl_2rG͸3yAk`tDV!μq:U x~k#)eŘ\j۲8JPqӏ=k: W]#b\ ; /XBT9LˏyY cϦd(,6-Wi`'GčCkKVqq _oORUCy"LAx^-XQ;]123~7w+do;xa%O783E"w2tKf+$ T`QGiq QRG_\X9d@7S4ja7Ρ)xp1q"CūohEBNw@[,@pNmίݶ[f ; a2E7^?9^XbWӝ`DbB(B6>o.T>2rH]V"FB>z5v0?aO61^{)9JxmFC@eceE39)Ƴf{Jsx/V_q]?\dM#gD; !w缾8-8ɘd BXQ Jň^A A=Y092) $aѥzH\,[];7)VqHP,aq9E8@"(a^f$ʛ =Hee*bc K[uqywqMwq*`,X+ B҂0XY" @6"BKPu)JZV2ȉd߅홉ANs}yV-Ī -CUNE;If, ث"H`|+ͅ*CDRsIKpR]c~xL7p٪k j:`q"=_J$L^_z9N>v:zlaRxWuH.8~{_3:ME`7X{e]\|K0K:ӌ ~.p.{ ܏hocM hWU҃LH3Kg<}P0m') wjzE*pWJgnH1_(1ʆrΖ 5'<<=7JYfW|f?])d iXʺ;.CyOۃÁM*f:WGT:[bb&~7>C ̖9G eUO |z=l9Sʐ~@/: ^Q.]p,a#O{Mr@]hiRgdHuZ S>ҹ?wNd~ⷘE˗:Ϯ78 W"g8a_XNDcES!^$k'Ól02b AL?Gw~m@ } T٧oAB8dE:qAF8=eȕD0S=\r iRDMs9~w gA I9LGw 3*Gx4q( ;^:5]&u?짖TV󸪱 ~fD:(iOj2a2' vw Ҕү/4 ev":(Jt@GMd-l4/(uQ:κhZ"bJSmHfmSyL jŦpKC3!0f h&Dk0tC0ѐB,uE^  ́I $, 8dX ł)4-J[E[1NyX*[`S'Qx9NN whH0OЃd)8tHj,L昑d8!PZ,AJq793# 456QJ ˂ZN|?)ﶎ~㰌j~}^pY %v.Xd XA!~.BBH;HX0d5X&` X.mL}kE*b?'8kj e.VLLX0ij!UH'aY@HY4"z@|0x~Sdޖ1RCD+'dFU8> T4$@"QK@5߭;c;d# {r@g]q%Ŧ<aXA`D۞0U {$吇LZbB"A_<,348Sʋ,02\X@ݲ`* ,22_:FYL^8йRP}rҏ`Ӵ3COukHœOi.2 wx߄vRw 0di> |`63bo~X4P_a4*|HѶRda 4Pa0;@q"t&A!Lrݜ,Ȩ@[s̹[ ?K'߾>oc#2PHQS0(P dz[ v} }~вa>~˿ߐAMݓaN X׹']2t<`Ě}^sNv:!cĖpT @~ ^>w3^4"JO~>$+Pb6p2d~`=AEDr|P6ḭ W$LB*64si 'Y$Kp8IB aT#RKI2Q>d ltz]{>Ojy)܃NaBK rf S=>!h݃vpk w pB?.>kR:/#RɧbDE63M|63ݍcR}ѭL6==^:ުPáhBhss˹ ܹ@roẏȬ`zdfJ r( 4tp A'P \62i%3)֯(T{ D,@XIx6EB+N*s6IR&Q"<) B(-*BJj+N0 I$s6QOj&enѰAxd&x}g?ܳm}Hs?K>B(4 C;LF yʯ2VW^©]{{`@4Z$d$S. u# 23 >Bޙd?>HnB|%$X Hᒆ=&oPwTw|yǐBp7X{ m)ӑjo1Xn#TG]uVojo[iYL0]k;݋9 nͫ^D9 ]?f?+'P^v82 i@REsǵQ3+\h!/ YTR zy5]3<ydٺчqT"$@|_k")O`dB-yYy+Ӌ_PA?2vݰkD{+0A~5? Y^[ dTHAg$I)|@!LÎXE`G/T16#uzKoe.諒^_ְ8{Og5C@o{ tXve 9 B7F;V.rsTnrFg08847=.[@X\'gt5A`wZIf!MdU}=ʀ) HXK{m*Y ts7?x&d ‘yJJ9$D9ڗVaY>0,ݸ|ǿ4#y H0@*Jg6gɘ}>@ t#z7"O9 I;>IGU"!FqVcyzX/5, D_l<+u<6+ 3t-;yMB_%"Gi߄fDi@7{x`w[$T'h ۍdԄGjԓYb0rWuX 5AeE$Dn%`cz')rvΜL?zEAEU2)ЀУ~~ qKN}{$R[rcwv(|:$K|F-Z*SEU ,x'M*!n{o>vmHm;! t$ɦ9mo޻OYMWSpr  24BaeQd@(W 0Vܪ`7UPLPl?k q{WT :Y(0\ʊoZY aP*} @2ٌLػ3E3RB P/| M3@r2*k5#!ELI{:5{;ng&qaA#_'XDK}?> P&k] d  ZT(Ni! !S _OSk^5vp&Қ:hv~maßs=` @{%<U!BmP=nT_>DF;̈́qOU ( 2m!{cn#Oݾ4b-=q譲= 0}OXF{6>6(;z',$3 1O^&4\V*3I*avw;2@?[PO>grڍs?@6>PD$\HTNx\,&T%ŘD>̠ Clq$RP^K_ўv=hP"@fN;n"@jM= z_5y࣮^Ykm} nWV7'},K'^SAG {VR r39Ma\tմ7`',X"W-0"”%LB Q$^Y3 z a.ގ+;3M:xqR .A|DdDpd Eh!R S3aʂ[w 81?e2D uՠ5>C'Cd' O$D PlQ8-",3*B@Y%BS?3/ ĴA8@E"@-oXw Ge^!Q]6l!{ma͑[z .~Jv|+۟L kQf` G߳6ɇ/VZ0rY ah<=}'vfܯ<*=B5ԛl,Ci#"3ZoK׊%ypۭyK5-Np X4Lhqw«}Nm8w*=<]gbVS /f_e 19v'MPgQ:\7gg K x=x`ta@ˇ(`킹(R4g=Ö ) ,7Kۜit M7)O=/%lDG_Cj^*g^g{>|Z7Y}u^=ٯ|l OlyrDy67:=!5! D|2doV{Gt_+Y[`2@֙1gGKрP4.ZP?dlǭ*kBG‡33ݾ0 ӧpĶ5űU"lQ$MbR(\9 1D<S !O'8Jq5Du5,f$ i@#^>ж^kEeuzK|"ځ7cidP!j7O=Sv_wۿX$ }{ V8}6 mwl_9r"ix82Aa]!sPE}~B<=rZ MlYo<=ζ[Ep @ &@ic_}:m*{p\ܵm/dnϧc%] Uġ ۷m8pԸR?D1C?mɡP臀ɆsvrP +|/o+`d!5H2|S[Ϸwt:9GgK!?;uS l0MXqn>=?Ln챬} ~] u:ϮO[uiw흜}r §cAO^ݜ^X|8  H%Ccoaه)X,䲡IӵY"CN PD풢!h$-9=ð4G 9SF zꮕ_Xz~ M~ 嚃 bDji(Hyd{lPïD8<Gc.px\EY0ϻoI\&QO[mom\N@"0Yȿtt$mGo<:~ǖ&S~p".?-[;K;kܬ󫭄LJ]:\$@'nl.}lp#X@s"s{K!EyhX[uw XMA{F!\As!0 OE$YTIndAIi" yy\0;&!n8@Bkilq#&4;^eq 4v9bw|m5~G^ɂ Kߜs D;I^ jH! BN|S$-h.8hrù k&iEݞ j4Tbo0y~7juDU:2a1t{@ 2HB:!=TNNTTPnzwv={˓0:~"b<lQvKlϼ`TYfD8?BSNHJ g=껢>c>q}J:[ewƒ<.Q{{6߈Yu0N~k=`{6ڌםnpغ }@+o67*kؓpG\ԆjT]kB-pXDx dF., ͣUnDPU7%AHcx ZGN3}@[VqC?T?w@fo4Iz{% x'9XDl#4B5IyWQpf0"AKo"h*AxlxnI OAMG=WHDB_ ӟU EyX݄qvzMU77~ǦIYӿu7^66z]=zՖr'+kX;84==]<=[ldov?XwT,ItoPA(/" tیךewST|qoo7o5]_ceNa J<R×*8 sߗp "8B0?gϒPr@{&!HD$`חȏRz qTiۥ&AK|5ӍJ_jo044fd=J'P i'fc9&QA7aUo2 kbKР}o?3ՠ>z5( K(D{(a6 Y_TP=}&a薿mCxc>-AKTS:M}_6>=MD~z(:@L΢<_71çZ ,dJG B\ U(BLJZ~@P͞Yl0p*{p#@BB9{zy"ȭ--y8S} S BP:)"*" - C?FEG Y/@7|&ny5?q#P?8T2F})IŦ B9m;L?D'`ym]]<\N ܡ=dSυ'<6k 'vLfz$ͨQwC?n냑WӶnIBgMHPx˴d1 Iykǚ~J@a_jgрMw/GC}3W6> D5X>ώC۟YA05Oޒb,!JEobCI5l$C?jҐ1'tNc8$;&Ypnz6OvJtJ|D,'DƸiP )by'ߟY|~50~~Շ dGD @?M{n1é(){I׮?|F?BJ@ W9 a+ p,ϲHF=A" !Fߓu0g Լ [~zbA(A$'-um9 ͻ>uW`;#>cxd!(#Yhy 1`E_GHq :F@6<'o#q~wwQ˿t:>48$xX{d  6ce109k֜4V BR'H̚v0s$Q*V?_Ua6h=3"85k&3ǻ9C?ՇhJb^Oi(GySCwyOp0҈|lyq#H>XT8ʿKVa+h};NmEbl d800OU07 jO!+:S EpGpYSI?dB÷C?˭6?/*8"@ƳzA O:\{2;w)GG "G/Sk?꫹n:~kzkl'.6MYLPk>>>6n_( @tO qâ|iѰ @tf_.:l?D{!8'i2Y ' 㰘W."i#ϩq\rTi(N)?QI #L/8K^d?7qo(ADn#sP !c`xf\*rGx;_d9(dE3 S-3yC3I>lװs~>O @8**@ m&Zuv| 'U&#Đ<ـsh6R119:6M(gɉ$8P^"!jػ}Sul䠱A;3]}J|f~]c Q.BO.VfJ4q\liڃMH"q kmЄ HqPv4]fBY=k rE;lXXD"e+p/K6(С(3柞B9KOy&Z  H2?XBxs6 p%XOՇC{+%.  )A l,B_F]Xßy+'ps "%J@B@οwwCXMS[JNDӠ势8׮=۬҈(Tڞﹶ쓓d!9OwB~b"&Y7|؇壃<I (PC}^7izOL& (*=%ձ__.p!+}'mNPmXπP%v^^~V-ڶ 0t0'79۩6.

5~:`'^׵S֡%Q#4\sfߖGa|;Tοw\^);G_=e߶I~81;+30)H}欂K֚{n ʊsA2G'z{%z2]q/YYw/ޱWc?3n^rM:3wH08}H.,p.!$B{,|LJepl0  C7YsRvlٲ bP % 'FV$$XXp 駛k|!@vVIC]SWoo@QK(Ò]( pyejS?(IE]xB+01jۑwMWvQadzD7f2w6Mwɉ#B5X@`w(B~Ōԛ aW! Lr:&l9=N }}yvSf?ZԟS C *?8Z)l)rWƕMKQ6%CXU"0?3&|/]c/w[6:"Þ(g y>pfٚ k"^0'=H=RASL%H?RX|&cPllQWwS^-#/`9!_V7|?/Az靃:rdmß7]lo4 q5 {FG/G( iz&r o\4Vu&Tn7p13}{D@bmIvCdA:_2HSq NB%i41*@خ\#v) uu|O2)K(DG'Ⴒ%~({Po|0kᆓ^&"JϟT4`V( O0 | )O*= Ŕ5U T:'#'v q+êx2{k̳SO($5\ϫGgk.JŶ@c [ݲ\Gɷ'taC"7VR]^lrvlӳ➭`[Hv;\baG#G{ai~t3O v[a-*xa6 N+ x/!a__:vr:u:';7:Ϗ_ch[Vފ%rXءh-'#R;w^:SW|dSDhu'{1_g MN(*s\.} LjE)/L#ÂE?oa@Rzuw\TjХiXm;;h /hQۼ ChO)%^Ć(ksZ@p2Rrė{ 1ZBM&eBI(˂X )Y$R6%A}1(gݣ&uFU^9czF\r{j| $F O) ?g _Ssv(^'P\JShf=3.jYO;F(^+8Xz '}SdD=-TPFy@BiT~oM9N~r5=s=C<ނ4aRuT*)Q~M(sjl $OA^!w_/g__]j)=>>ioA?nDLfNwxݺnw^:R$߾/\fאg p=5 {rîwW ,(J]6[gLoE$y[*24BiC6?ea ZEQGIyG _/{\T]:d9/>ݞVG;0{=/WcMd3Z]u{Q|wH?mѓӇO^3F {WejW1\s W2ϛN Pt蕕QoR;$zk׍^EvqdWfvT:xeo] ކ{8xx_wuڛ|x]]A#Ѵ_~Yٓg2OL!kg'wb@Tu 9GY?W`L?'\T90??˳w=< !C@[GQ`5e\áQY 鑵W2s[r`^_ u A}g]zS?eXc¯wˎ``4vpa?,><.A7 Q$ ND'ܶdd }g"&}7P>]s{=%*>^[x-s܇* enx@DD|J$lpңs}員h1>C[ABPX@ 5pׇg.e[f`Tv+{Cn6{:ڼz=]U{ 7oE"L ivSxAxfAB"-uAPaMd<ȋ(*@}@6dr0 &P㥟z`nU{fs~=ݲxBL9`8n=R:23RC|*/|0o=XHD_%il9"v?&" i(Fj-@\`BI}Tӵ1'x{8??\v ( iDxި#|_3%O89@nQ Sa/ғDR6|^:,!Hi=_Klvt*=q'h2$3w,w2r8,A=Yw]abSeP-+H$Q30$KJwK%{!bD l NrrBrhɹlai(hk}dN?!K 9Pm- _8jƹ4(ZbmJ,\/Fje(>! dl?\ރW5?G~r?H}m->",&2މ^&oo֞+վJ&=wlM3@2DK`?;|32HH dI\&bQ) PK7rn/`O~4{~@[P'χn"5w[}zJ 8@e([fXy&;y< P?r 2) D@4r؂兹63}<k^G|9EMbJ.$~Q?LAAKOIAdP6e?‡L"OY BabBhf$@}}cL K*rh%bS!-?Ofy=h :XBN u ]*0~Wp3'?JN'dh  Bvp`-P=<pRdaAo~m:}ke__o6w;H-ߞ0ڻ7j: Hx0gD巈ӻdx':k%V'lţ.tuS LrU@5^Axp!]KmSRd5Ahy-pmr?^::zGSȀ=+@5U@ "ش|`h'sbC1kHz쐜q "Df;Wm\T,)^=3zXuI'fLCP2]Q$Xd ArX'c<}_7p;e>̎zp t;'{^m`U;|3#ZySomv#{P){@hWoG$F?F?׮/-_vO$Ơ~!Q~T 3jX@bFg#![$? >\&spsJ Ǘ8ޙ# ?S*⍗k5֛5'Kgv|L//Ve62hl?GM"W݀{fYLEqO8fXO3tv_D7IHMI^ݷ%8f._CZ)b(B H}H{Ѳy(dt*鄥JGzӬGqŅ [ ~yHÖCYO,HuA'=Nu(Iϭ='%|I ;: L( a".jRk(( Hz=ZAo5]N|q1@3W/E;WՆjBU c0ݬ+! p>SiQt2-( !'y@(aEDETrTy]J> ˦ S,(@̡{/:=\(jju&4meZ0F,s8unM:_f QJ &$i^dOi8uYҀKhBygFJ2 ))6D=`drDALGL&J$i6Ҿ(ar3g/'svO#?0d$hĺ!Aӆ3%)H y$=#k~ri)(?H_PnǖsL> d/;!!Cj@nTA@c>?KG?޽śL}?_~ָ])IeYVv; >rN# [K Ftaׄ?-o+ZtN&Z`GD|G\Jz\:D^,OG]Z! 7ݷn#v(_Q?ՁH_Kг~_dlјǸH Ra({ ² :8^#?矗ny68/d)0Ay+WS#~Vc=&+@r|yuwf(G >=guz3@S`J95QY}JC HdB \.Xx󳍨'Y@ `S|5ۦ5P Jj N!3IJHb Ih ~&:Ƿùp)`E騎PWT#80cs/~X:Rp*gU @HGo|'&zFD9v7"].!֬ 7AO/ZU8F ̎P32Pg)WWdX Cݯ¿#%(?z" UTV)!& (I ,f0qZ-퍠|c iM5lhwq Q7}\Eҍ*D(PG`&׾PJ`vaՌT93${qnYL@D Ne/@K/촠!d+g=p.zwR <j*@O2,aPhvDi,$ꉘp  8df&eƌrxdh3T)K{;'Lנ(u{7{.ի yDDDeĐ u:kR5G^ok.<_DPthVkJ(Tt݁)mscC=AQye(; ,Xn0H.Y =QI5?)hOXU}ץH!U_ԍLff.w+isMwOd&Q<=nY=r<-hVC).Pc0 @} H;41 R1< &H:$P4Y+枩߬m7t@CА:^L w)|<0'iPXQ'>?m%4 @6$ H0$~]y~eT@j!&BdN^Y5DG1[T $PR3(B+<ȃ%=()WsM}P1ˆLvp= 8yF 0ItcMj9T;8Bg;I"w6@|OMHz o˱{zk_vQl(4@xaFo^eslP@u6 S'i%gstͱt,qz#:oTO-hEpD*~2gwݢk?:*mӏk<;ȼ91J"@lDe P;WZjׂsݹ@46!/5J\)>g:5ݡ$lPwzW6{ٹڀ4^&6#r91 }w=Nb^ZW3d 5Hҹ2-q!R &fv8!_Mi`>PM :X5"_YX>XʘF)Qzn+ųC=mކ "iEqubx`QfM,C\AJj]['mcO"?Vm۟ˤ Pr Cyx1(.*U4Yh`MVnY0u Fbp]#Ȅ'1^ 1͗ 1B a;q%@AOk .W2I P*UQT/նPXa~ ɚ$JԹbm~f68MWP;2PA D:02E\c䟙Tzs;==g!Hu( ^?__} (`XSM;uLLê|9 ? CPR1A,eMf(!~||>vmDx f?M˥?Ֆ3 ?͙/9W>Xt~Vπ^qNcgӏu5evS^:/ Z?:Z=:m#3KG=ޏ_[ӥ ,f\uל?ňG%Å>44|opp~zzyg;-Z;!#_D‘'*9~-}ݬJ~xHĀ   >2L}p¤ cNiJ_lGArhȤw.fzLXekv}7Ԡ*ϑuDRć'׹ݷ'V3LKոXR޵BM?qܵ(+@(Tɯ/䬥JO:xb!ӧ8t"A@G'N wrԳiud+P<T@9!e燪7xFY27! t[p~MX^o\㯄viyEZF?lzp6lÿ9s= 2Z|=w@%< FN)f̷Qz Woa">@`>=}Ø!I2v'C**g)᩹ݻ5anQǯOUgruGjٍ:3. ^vfms>}rI|AAIHќGqUv8%j@FQXX&5gkro*Dn V Y@9ȕ0L_7cs)Z?Aбr=ʭ;?釻zL}4~}O^;}zvzC%G01}=5sN-ϪQǝһM}pt(@(@& 9e|Ȱ&C2*y!@Lyh=':wH Sk@ٰP`QQ7z\P>/|zwn~z_}OۜR,?4I`1I&. X 2藤ӼɺO3'af\)*y3 D-!!q9,42zećndY!H@$oI B(%)H J44ʦ `Q=dM?"5='C0w@rvWϫsqi9DYY O9>Rv-:@? r|/O(7Bi p`?e3!kk~Oxz%jId!Lb +zn si$*$4+Huaήhi)/a, L?阬` '?q[IiAV5PsXRntUIeH.$ ߚ9tItU]e߶d.0E;SP(-#lN n]۵iO:`aߗG#~&;}?\!;mZr9n9~  B@?ç06\#v>w}d?|?T脣AY;d zd7xwx8N[P_YcU  kW֖(qDZ0"tk)&f~pqMXO^ܓqU-}h7(T|YzSفNfb#kQM5@Lw:g~\㬿w׻@?֭715 CqGc|:<0Йhӛ)NjC4/k_e?nWcnA? 2/Y灷ma]o?Yj*"ܝ )#϶3J{=nڞ {ۓ25*L7(pyS[?O zgPg{sZthA$PI 1k~:j%W:9}eX[:|@}E!)(Y?ȃc14 0?F]?W}4ݧ{ mvx$[bd $0 !-v t0&OH2+I0lb] Ek}PC!piib,'b4hۜw~zށ߿# p=S6!9W#zὲ'.%ҧr8dxbӼPBC<"r2|w}]t>}z !&T ̮8P|uu~{!70i&G(xIa$644= J^JaC]K$3+Հ|L)kޗ^(o=̴QuקMfA<:!8@C,,x1, a H`;`tY' ¢a_yLEϟ~#4!۔e䭅3nόllՐ!G^Ǟ}#i;Ma}rI;gT|Y6O@3@"u$&ӑ4=!,.G C z"FAԍT4Jn8 ua\\:H  ''x n갛(P{!9vpgmdv 'J}ANSOId&KS`avu #m퇧e#*-B`ìfζ 6|M&Dǿi ӡRdg[ZA @vE+0N[M.[ߎNI-<uCCaF!C^Hw(Iv^8'[DwN'722֏oAl*h0Srmfhm!PDqUAd9xzz'q>C8B?;Ð~#J^ҫM iU?lJ*)_y4߿a#gs:8DFYfkRTb|?g "/hKS ƃ!4\nTA(ě~M,SjhCo`jlNtSqڗIRO<߾CGuLC_"/<.ZĄ^bo2}(>ETZkSɸژ_!Q8=b B0DAIJG5GX&c\/H?O2zVEZO |2VqQU~д%b%@;}0MW0JNnauR`&]yC:7-5ٰ $jp 9M$ Dymɷ$>Ycֵ&HV9DD5 .BqF"A0]lrXsE*D5Vwcdh7 0㗛+Y`4{{fF p-5 ""Եى.i#r'i rɌre25}C>4!K%RQ^JzuQ+jHܺk({J17*F\{йc4J,'@'0<=YԶWҝ8l~t>31πG͉Ly4́rW(grEG#*ڈ@AOlCwlsug>:%Mo7@NIP¿Oi|_^}&\ M[=|7qJb~9ɯocr|oیWKu(pg*k6 2] $7`  F+o6RLu_K6bPnI0dk#қ٢9vSY'fHYOu~;aO3Ô(YBy/wdLKbL;{d-a\U*@ D9CQE({pf }D -e8+&ZfB9Jz8LUTb |O7{L3|s ۇm SH[53 É`U@SB-,8mKR!eƿ}.[/p`ȆŔ 1J@,`q`x'؇K_3{18=54 A$s<gzTLG^' AeBbM`]AIqb67PpFA>?*aA}}7SޛHoj 4nq年Yv^5}+(CK=w(R[CXPS=8`mpa',ݘ$iH`c!ՇF;[9IRbaO+ žW 92}2z~_ 8|r45[] BiΠ/^B""8 *Mg~!3Zl}f I/9h,(߾t[nǾ{2[`C: zC)O=IЍ%RJbZ }zy!BHN[PЄ$4*RBtM#~|r PtO=QWrP6 Uɞɯ 6dʅjJ5%#w릍P]2F)Ad ni95*9C,|ZhI3ӅwRqLS'Wx};{;F>vwP`<1 }npO > ',I P P@|Bs?>Bfϑd*Jd* " dᶐĶ+(T$͡9^;y !no/w.eqB ́ ~M8@ $p&@"Ľ=pvCE?t Q Q>2jbP0f9yGR7xf Dѽត &H a龡ғsy`f DD$@t3VlFm?פ?X}P2d뭻QQBԛA!8Sϯd3چY "d)#/ u-1 .{{us'ߴ~^:׉݅`h7nOoqAYB' PHalm-~ /8wIu.C WS{u/wMP <ܹՎ+ΛdeiG}΋اѶd!4o UwQ=Iّ7ɣkaĜ|R!9< ^K lE$LHГeGDj`+Ě*MbH(@i9:z"@|/a^PYD 3L!(K1[M7ԅXsߘBi~x5@L_^2+Ζ}˿# ~/3+` dznYy Q`R bp`8y=:9R-k퉖ItZq͸-?? aZ| Z:Cs'No\7g6!ghvl05YĶ\ G@j 4XK;<: J @EB n:o6`7owlЇ/s8fa9CQ?.~"a_=PxϮtÔPh>gp,lyD5u45gPL1#AuA{X1 W].𚆘PO|'11t8\c>Û!!䜾\ Kk E3 l+DفHAYpY?rר>][|D)5W Bہkd8Fx3>\u>I֔MmH8e8ëk'&q9yT`w)zmt CgᵄxB'N"x_S \x8Q!K3D`_ӞN>a_g>ĩ ѰTX'VY|x8؟gǡhm>).vxgtA${0ƒY~vF$7[_3rp1@KdF[T`0_ux~gGD3)>̦[eik& S֟wrB{p}{t6,+V}:$gA4RADD4ZUG@aX>Zke̖C0Aah&_܏IijOlж)R `%}w*SiXMpg\٫"CHl>2yxf'@?fǩ/u_/f%R\X%q[dM=mlhq) /O2rLj4lc.XeD}dٛ%BY̩m*=K{-9~b'HQd#&OS˷fRJJ"~/m6\t +WOPQAzYbҨPSB;'c :`V`.%zXUv&Y`D𽼰.s^E`~%Lc28TFZE" MB&{K"3oS5eO.a?=e`)&4E>\[Êk( Hm)W%iyy71. ?u <^`G,5hBN%4 n)vBiő!1EƱ6(XC6yY:llh|?BUhb醷믍)/_js GD{`3O6kg0YB_D&zzA/\mW_ .\KWbDKKD{rt"uy,/q4bu݅Q }3 J:{2iIՉg8Č,b`{g!3b,vx AD̞Xwabl0uvijI;>:f+EmI#@F 8rxlYŬuRHt<8mVi@p86p K4[Xb NUajYRwvb k15+7ȝyXfȄA!s5<;$B v5q hqͶGhoQ~ 8F9-l` h8,ϲJFS]B'wUBA \<>Sy'pkImLu~I'\@ ~}F8 JAscj! &Dj%&ZRd(r ,TK-# G誈ʋ'%"^@ PJU|" v#=@ $ )չ?D;`= g]6P7>"wޯV~_jq2+)@)(ԁ0o! 9<Τw}nÈu$C흨(1f(bD)̆h& Rn&NTdX@Do[!<_4m|T#Ta`%`ۅmy/V*K\hr?Q6,쫥jJPD|ox5!uR9zb& $\J0Xyp'r̀jRfK $B9شlF }0'3y .qMdv铝H|0+wJ"RSAM)TA@ĕKZ(rƤvB1 6tiߩ^C:dv"TPӶyN~;/!9/XH "DĘWNƕe")XMavw뜂e(i uADԺt&`(+P"T!PưHs Ɣ@$R) R,^K%JrN%IA4hBĊE '%3T :):e]F~˿uK)BbJJ(+Pą :)t+ lf"&hNAh$;ybi!8O7bB І%q?Yz0k}o7v),+_u8#ԫɜ6* W~B'M/ADZ:yI(+y08 om[CqąRgY (j_)̨$64!f6Û9 徶KjTn\ rPvO+)Xv2vx, $q=UT'W&`X (p$9O|u E5Qv@OprRT`C(|1ߎSH)[|2#`O\'8[L&_ǽٱcwŎʀ<|1{!POd -7!2(d:Oݜx0<t +A<+hiF #+FX?W (=`s"1@p+JN whOٰbt7a7I05( 9^r#ԧ Ù!7 J wBvޕI+;oִoI% 3sP˸yb ܌sػip}*zH9t/m}P\0xP#J*A irH0 ht"@?I4v IRwxVĘp->Y{Ht$|'6.ODT5J "1M{)A11JQܘ %a_I B:aC J_~PN',aHas\4 @B0 _tSIc60CL?w |Fr$( 8#04*!$ ZkPKTƍĥlcndj1HCХc֯]Xz)%iGNAՉX.-bJK[J0)yA׫L+lR҈V{yQ뇐RŸƙ3;6Yl;PG1ePR^$:`ʦmBn-l*DO=qiU!n1-j-Q *\9!jEop-faTSP`:@R `@NԠpmՁFŬmXAAx8,2V |rN5`I(#bԶRVօ1-[MeD¶ݡXlM6yO3 pƺ(dAJI0cDX#?SJӘg#8Ю߰@<7̦prxxuQԴrpnm? Su]uh$v#N=Fo6`?1Jv=I:Ƿ).zdR鱮rU""j&IiWQ<'!(]8"u2K7Tn!C'@}m:GO>4 !;۰{ȾIX >{My>N==|ި÷w!ډ5tӗ{}Np$Y2?BFGlD-qV&p{DNCCjZY;/{[NvS*f9)n1 Ha /϶|^[i[undNr4Y&ǃ>t;K1x9) 3J$H:v$m4: >a=mUu(V;h_5 0)hA6:qe lhpLSchmZLVntQ;s 4!rė:>6f3v8 "42;tEM{:rpL`F"Lp d! B Dʞ.GkJLyȤF)78cG9!g9CX8 @g %~FWA#qSQRCPRɓoP5ֲkBL4Pu0lM>9F,EYPQ[l bʒ6YظB4d ZJVPQnQn)HrV6̐""(4av (*jb)0LQ:$ JԪ #(T;jb]qsr  HZe2 m-*N YUT@D@`U5kHcGY' Ul DU1@TZP"XDq%ed[i*5`дӧ;! 4!CziK q"%TG!@b*\LeDνeJKK%`BH[TU02 Q ~T @N7#Q. (AnmQF3yj%tK ~w#B.eDO(Dȸ?\{ga;AD,'ݎLsÜyHM-ِ}%^H)T"8 hT;6p* {(%7E ‡G8܎s {CeRP 2 !MBf0  ℬP ք Ԕb#"b&dA @̋C!"u!)K8@dI097mN%)1 d.E0 $2ud9 9XI ZO?!S?E%d&a %aQ@? R=o* E* JnL3^ /IY62hbJ W4]nq@BzG>wZ>]!=d( -vtsǻwm9liVW޼B"INzրC;)lE!4J[xw du.s P֞e{Z8 zYgQ>dᇸ3DUcۋm,[sK)4xxS^Hh m^Z}laRKOKjQndU "@u'֌eA0)8pb36Ԃ$$vB6i: p@xttҳ E'N0˨l# H^r` lfHsdR ZC|$<19ʂ3-P| 8<߇c ~*qwP}Ae.ŀ'zJXBT9%q'9@zLDDt2K%@T$8{Gr#ies4qP؛mdJu)؞&hL<1Nڂ[$*Db^%:M8=N?eYj^t}}i,`HYZ=?Vn(%A/ݓf)!:*zTZ ^=yE6YCPY"/},-R/,c=VF&s`qrocEqyf(X8|v(KKCC082b J\SͅuhLU M 3m)YԲ{(xhYu ۢ!@/i,1R0.͘sˤSt?Ԃ5MPT2AvƼhh/:!3[ mBU*hR4T3FhJb*)&N)~0^cS8IrrByx,d4hXEF Q"_`4EJが@Pk/ &2~c^06>BXLK$ᜄ=NF'Y e+l~d'Q KرO#j0߇V%ECYAچB">\ PEHs3Ϊ2ԥб ~9E 6#(_RaB (СCVd2H`,Da2vp1bIaC!?gɄ9wĀ=īᩩ.(`̾c{@u31/:u})CpN={l`x}ۚ³Bց¢`bئOm~ҧ=v{x9l%G3؞dyEVBC`TuPa'槒Kem TAOH;l"ү'rX}&J(*? 5z4QtZt {C̀s`IMMː.YM#Hɓ4E?$ v5DQ4$(EVH]Xn2 ">mC A DP+98d9GF3LH55ER=I< q@)~`|}Fm9%X1d*'>5J $*rAI!V VGLʊ!, \SX(,9 ڝ APV? BWJ*FA6(l3ߔSjO[؄.MɭMK ڧZsO9O>2f*RJIQTcԬ 9'Rekh̜Off4{I*4ƭGuW`+Jڣ{PEDfҊDڜebӟa!<7TS?$=Їׄ2En)x5B zoF;SuDs|ϙ^z[ϼCD`ĝZᳯ>Fnmb|ӫtI7ӠOއ Of'&Q7SufM ,{=mG3SǓ!99S&gxۖwثzN,}1NF+8ͪ‰dݟ^ N܋;tO s~\.>{ԠbJoq,> 8J[Z p Jಲ"Zw$g f,@#v(S`!O61 f (< m AᏆӨ,7ų?9;n4|:5H~xކVCi!_إ{P>逯b:Kp`PØIp犊}Z89۟>ctX89Sdރyc| EtRgp4#".@ܦi3G R ,9 u$qPۻ}09nxfϏlt󈎏֋|b;сla<çeCe y {W7 v5aԳVp4ڔH"'Fz,H ~Xɬ!^> Zf|΄ o/ 8L `çL}Iàj*suLY焛V2M@+ N'DIݤh~l2}gArOr>™ 5E1I(D2"$"4F7> =xm !6C+Χ\8R;a yme=A|790aӇ~'pzVCl1]o"b+ ʹ9c  2˗ *xgkvU4Tǿ[B ӕ9WH|2t|58uR_T'+cYfċaO,v&f H,G=XѣR9aG ,Urp$b= 8I!cBb{}?_ m-,@ 1q6M7hcq!Q.0ˈFj(} ĆG ` vy~c -18fc]x@N6Tz=7.t{be!;^* CP!Pxd3?t[DOվ nawс=nTj4 !cYղ È܇sB!☬mq=U<#dl@ᶫ[쐡f:X3b`u@pfgרfkpI@.*=; Te r!1#QN&`lCXeUC;6w:aa:1p:-(AZL79|92I mes|Ұ:= jD\"feAh Bb,Ya#3x5=!#d:LK0v1|$<) t#OE4 EF9٘?G%w{f_b+MѤzWĔx\GP;I!CHCFIcCT=TIi( 9q6&n DdtlUBbC  b ? NLV!ߧ\pbF( J3 zV{~mQ$a݋V>a3v+J~xn8Q+:Q| aTEm]ze7| ~]Gl*S2,o@fϵͭ,`uG?Iyfǃ!a2n3U g>~g(o706DkQ@CHC١%rĩ>a K1Gp4tp!ML@0"\n2^+?tdPK>ؑ,2>{r& {ED3jGԨ}\b-@M@@PrPufptzLPv}g!cw d1J;u7N_\!ՐV@]iGǛ8xig,"L6lB, =A,i,Bz[P@U%]uxoa, Z4a@qnj? 4^K{zC=qݚK8<2H`E^Y! 6&R9SlhiN,,GmO"PAb;幰zSyw6H;Ut/#&̦ <λzLm*txeah BUB=]8uL.}jGRt?mҦ^0 X !0`CB> NY,G*?4:6 w腍`!B MW7غsrHy| /tQ= /;LgJiijr2:V0ԄBn=KHP}LCQ`>7cIx  ;rwfh~<8ZHՄ h#;yAgn -Fٰ@i$L6=ǥ@pwG@K% D:kcTc tm 8 @W' d8tAP* #jK/N\R:b,4'"< !sSs!_K8V8aꆎLfЗ(ANv7~KΗ1\6Wv,sckszeY܌|_umG`nk !ȹc8 D}O%<6zp:#߉a'Dk-Q;?|zmbG'zƥ?(c&1N3B,@zffn'owaX|U|YA|/TSga8; s#.Da?=U>9PQ"$֙M!==4K2[8Lcӹ5='Z:\:4BQvpq)Hp]+VX*8;ȎDn$ ,: Z5^ INs4!Dιp+W,%lzƃfk̈́> 3THM RCPQIi$X H{ćЕ8'l$2;V:" LJ:aTۏ a=O]M9v0φ[:ʚ@wQXDh dv g \ 8pA Ir ? xz;[O^6l. W݄ Գ/׍7es%Xq uAFSb78jϡ v6 PtDq,x QtX H`cˡiSjF3,7֯vߴʱroo[܏d68& k FL=RMSOw>ju6W4"r􈔟wDr: ;gNvɮ@m&893;NSaSߪuۨLPۼxV#ATC ($V !pA:2E.GJ|0LNkgxĀz:cp'#cȻ8F ۢLtuodwJ$U:t1XKUz a7sߙC[k>,#O7r |S egwx387s,:V٥MCul{9YÖ^ޑQO7hdKnS܄\NXn_7=ty"Y7J/,v|}Ls /X8]DӞs.Ԥ"DH|qw[=N 12ͯ.42%fQ)KP0~PF<,ec_o,8!~DfYˍ[V@쁅%$18;H̤$w"so 3, ?,۬q!Gdd>Gq환&h7!q:r/bt24v+M;nQ F<uN;H \fq>q  >rawdS>ك&|x ipR2t—#c㶧h(M0I >Xro5׫%-GLO~62It %K?]ޡ $^vG-]0@ `@o]lCzMLD v%b}|g۹:Ͽ׽8uZx pHId; |Y:ePFaܧچaPfv}G0V;k<֠a%ā]PD~]x5n8$uZ}lJ!͸qns%اR1ԁ҈`"$N@@ N25ۤl8LTC;'ٻPv5K+c4ZŸ3VRÇf 0>,u8{q.xrBÏ *N9XĀ!zU>#Uo9n]:5H@@$ egN=yy.2$Q} "G<竲|Pd.7<96yo:qX7~C*v`}Fr- !?Z@fgc {}yt1Uq7hKƒΎqCp5Xb"<@ Yevkge.V'{1@bӎ8|8W;#Bkuܴ11Bnh"RH +5a>g3A9pbs,kʽ|lVRl0Çk-;qYU~qXEjU9\S-ջQ_Qd"r,uwֳrvLP"BzF`~IPT 8`^׃0D'$qM O%pP3KtN@*ோMU% 4aiAc R R1#&@-DEp(. ޽lQzzx@DK퀂6*2~taP]V3i#P}>bTr"  3C bgVo$uߡ%R} Lpdt`9eJ ʧc DFܑQ,)|mA#(!7g"QuC [%R#4CbI#TԮC^}T+wcS9&D1MI.)ޫTȮ++T7cWV] PUP:ބ?ˁ-7"&)V&54CAS? F#P}(D61a(P>a^]K30`6s./.aws}氵a 4hNqklnz:Nt"P8:tC!H\dI8M`/l =Ux LX.].J P*INPF4a!g!?rTY@x޶ q.ى̘*b$¥qSRcs85 z^' ؜DlYu?߇|! N)$G!2 u_ā`MlQσZ@'d ( EQA5K0k@ДC J- @DP!TIPPMQ: Ѐ |{4THw/O 0'cc@<ϳ@ Few`8Q1t?tL>Çc4‡Q4%UZsspdJ`I)b)JR `P4I+ 8wtï@̐cf%xTNV6X STktHG[.'ޓXdєl3HzYӳ ?(-<^ԓɐX~kphؾ%a(&" 3AlwG ň嵜Fu9I0QWo%E rw!qZ"AGLϮ@.OAbz! qa${9⩂cBmS <6XsDQt,3uG_ٖAgFVu]DwUqHHGx6Mߞ0>izuG~, ze޷-^F!{Χ,/}`ZZ?)F+;:"3&uͧ{Sp>Oi5H1_\>R4GF:8x6؀4)–7bK&&/@N1g %֘itXV9<]d[:Y8@F40P!e qgA`$jr3v}U> zE`iCnCOZn$(0M%aeİ%րiR#~8Q, KӽEp-KűIȱb_&ۡzȖ*K]=%F^wIe>KklpDpafM&~SކB}`|פBzcDW8Aua8C#3]#BFf;R2:[{oH= YwxA!aF8 BZ>p5y^Ca}r]JӁb@e$&~6nM5a!&`Dv2`f@pݎ. e0\v"FoŒ U 'B3ȞΦΆLzҊQ68瞹צM>FA!(D%DUPS5Oa'AXCV,M7`}QU2>d/pϙ|d/'@CLxiGh<󯫼M-) @ {~)Lo [>&;Bq/Ya2m7O:E!TE=SHGTEd9)`i0dR0(6S(rO2PŖMu~x4HSJCE %-4UU-41DLG=j,bNvfuL{vAOűI9.`2TTDkfHTHTi.vr`?\bv0O~5NXV:[2G8 .?3V&CAʥ ́La1 fg@I !(|<6#2 |%5.!2eBAϝ |q 颚"\لA7XI6md=~n ɰEvw$CI K@n@Ƅ>,/>0bD_V~>8B`~+u̍}r&ܿh@' ߑ+tz=h5?`EOd1!ޚLU"۹ߟˡ0ҰmcR QR ֐1obaay`PO(䊜oWܡDI(@IX/&&Ϲ'j@|A~{}rIaS^jSٓlD*!YB,FoʘS*a$L*8}]P}_>ڒ"jsr1 R8X({}xה!!IB };kxtEb4I0O̞v5*ǧߓUf2iӋpROyio 64aotI^qrWH߯۸CC@PJ~r?&Yn)`y}{%8 ,*sH0ZHv]&.!|}=^x8R.BrQbUC0b8vvP:МZ$<D(f;حjlKx [ bۢifZ)iCQR(6xSI%IߙW7?~WG0-:N)hijՁKy$ϜF,:})+9K#}| #-@&`LӒ&Km0eH;XfhvM8`T>1 !2:8(D"{6"ѧd2tȫpi(5gg b3CȀ@qgFÏ7y,wy8; Gn Q!y?@`XC_rbp1,)g sqp&T.,7Z ĵ<պo≻3c`'.va'd >/I~a!H9,g;WYYsm8Y/:fǕ~XڼBA7f K Dw%8~wUub4Ô r=!azh'G7Ǯm6tGIGa, 4v($s '>&%D /RI`xksC*khC7a3"l-RӘCIA P,hK˰}?-Sg3P 1 sm', :$Ph0:v35WhY=!m$ 曥+,ho LՃKEN'~y%塅 3S,| :5TԾbbicR TE<J;:\{pG˝~zH &EE `% X!$)(&"Z?hnyc{y[x@=OHD2 Rpn?)h(B;SaO!<}D5Hd#%LS@M1G!&l^}<Gvr=LCPOM8gIiCE?(ȿ@DM,L18ǷvB F61.{$whH.P5 l5\TZ"Iﮘtg}>`bd<asXi|<'κԄ}m:C5X;t% ud|juϔɶlt OnĢ'{I.D܈mT8&ud͒-sdɠUH)`zL[ɷb&c링[LeM`d !afC= M`X5 lg` Kwu-@ȏr6262/L%]z,j[q,Ɇ]oaY 4ὥW +Er8Q{,1o20> 48Y8A% [a˕_pow7~Ļ_]bEJXӷ,ɆI/NM b v ,S;Ȃ޹Tm {'zo4|n5S^S  =i{;K5]jD'VX`؅ԳLFω |><|wkxx9#+&H˦;oz3ط_⃰oa!yݮ|]T0#l[(}u+)9)Cd vq! '3p#Z!&dT^QZ:fh`$TH窍03 5H;Z8ИbF_^BH]a{hsNz곾Mv;qV"4i0 -cUl7O=o*EnHK4 z@V w#ױ;۱,t;u /l@5a)/LAe {2,C  @ukcr=@'aA(if<ʹ$A,@CAC?)wͰhey5է_ˍ 9*u0.?+TT:¢QD-w !0ePMb^RͅC`P@ӗɈ>t:`ly! eH`iy`W<΁ s#$::d量XH^⭸]ZJh0CIóK&'#Ά JiReT!w-!b9 E"ղr6pJnɂX BcP/c(7 6 G.w9f },');i `LYs+~ a"wιvڔ{Ąbd.ɚZe>8 )?qo;p]%aE Z# ~a8ސw˖En`hsI:zy6q{<~ }HJD H& b!"P  E|:~l#E<dWg rQ.' Bp`Q LU:D.QSk~>7} }쌾;/\=rxIrTMsgHDG҈BUhΞ)?V;?{`#>sڧ>Tg&fZ))h"C/, R aL/?tBC\ebA^#9^O%  |2?X$!b1R3zqdZ]e/ XCbctј50uR,bYd,:R?Cr,JOҍoknRrx`@8Ee6,c87!#Ws`&s\1:) pлc;%,v=j0!07<4-&2S9|U{gCu&[N'cxʯΥ);xtnDbǿ S\ Tsƀ2므g'v.to\9 '!oPQ,7Gn8 !`ׇo'q*P.NHU$2QA(:R$2wN3T5$:]h0XwL2KRr(Q倀 g#`:7ŒhwA̦*~|o)$4w7 EV~N3xg]̨:xXS-rO" B_ֻ0\0)u\}$ٚop,aXYAADNSɅc< ߁OĔ_'][kxԟ|UL#I8MOIHFI- gj:3?6e5]zxƬ.DNp쌌 w͡YL^q^Bq!̖iu5s縯1aa{ ߏ^(}>x =وq[k íkxI?RG0؎QX_R,ؕiFCJ7[ؠ]b\a;k *|[5adD(>QyUK^$jqf1yl>"j;9OނxKL.z;%ֳOI$ѩB| 699q=-Tߏb@!_ṍT<p ocx_4( /x楜.Z"oISDDA /",1~ zU.8?|ϥB;b~XŋbcR+e?W"i+Jja{~9:ΑDa)l^tC9?>K 0##΅A@&:2)KFqEIx ܳAh}&Ik  9UG >ae=? и :!IJOVE44*D |J;]Zf*QV*&$J*YZ 0mZV!-ߛjyFDBQwq8CyQCWa>LxnZ^;{;,V <9xMH#,,}9g^P:LaOP~vougӣMYL1 wYVY|zccyB} ~kwEԈU"<&b&yDzչ)-u1puN#+ѹʧw$ V 9l@*:xӣ̻@NĹ$0BiX/"B&#v-\ȓҋ3jMИ1/S vH!@zԳZAtF.,$= D,ĉ",D.j-;j1IT<߷Aubr]>Dfo T2g q18ؿ_<1H$S6H,>] 7ҧI hH)22'_!( ]Zg.>c}0>`hH}h  +orCꔆnV4^dH<"ށ+LD1ATPА3w}K̋ `RỠ!@ܑ;~-% AOXvE ٝu¤jB4&3)ƒ}NYi$>Ӿnـ3N7B{Q~R =m0B4а[ eJWvYQA ;k!&l_>Q6qwRxh@:c|s5Td;<4"0xIsW01+HJ(RҏnRr9##ċg#݁#НETEVƆKӭD'"SF(*Ho ,]B 5٥4f,D*,C 8KP95~dm/))@Q4RL ,HR!I$E%1IS6q24o7uRQ) _xQ4E$T@д~U>4PPRR/'KB`2$+R g(%)PqE.|rLb !( J_P@'0Yz=bb-r910*4 ÍO jű"C"@*) 9_^ǜG w#ٛa@nPi"#G! "8"h!<$N1~ s CT A*o&<^ЇDSnaJN 03΂)hI^I,`Z O u/pL,SYyLqI(^`mfTf:ok&Y(VQ30@w8o5@=,7C~w|A6EDVp:CpL$T)||"EB` JXHALؓIq 63+4gGm $0י[+Dz%YẒ AЄI*& } BbCs >0;H {'f "y@A3s ? P-ouЧhd0YE J=FddO`~k{8oHCۂouO{R1(VaT(T) :;9aE7<%~=ɟcE͒ %/ë΁JKㅡ?LRs$C 1~ybX$ `~_o]&\g>L#H2나H:C?=w0R >gE AM ]R)aAa@TG$/ 2rR{"*j_H hXSAU LJR̀ M"h"x?CW=e*oC{p*fQA" z!,ZET>(J)=rl"hUbP@}r#/hĢu)@ J@. xitIuC510G6áB`%)➟#3:=K {\v"z_]q[T+Φi_v!xjYm`QB!&U9&bVİvFF(ll-)KX\Rsh׮Mj̈́OmtNQ& ұFdV.W]3A0=JKRq\4i栛t`ް`7 6lh(5+*PID`װV["~-cuUo%P@ȃIH^wT{fCOoD٠CJGhrJJ$%X TfB(i(C o] 4 Ҕ #B !jnjx,hVxH¦M15!p6Zt'j 1bJ+^-vn(hnH^@AC( @w14D;ˈbUV=Ii _R^ `Ea>=?r7:c~SGYs#u"q% ` 7[x;c{מ7@Eb°S' E-~P5¿C #.$x{@'Za^E4/ɤOhZ@BpyA|Ϟۂ;1٠,OxQw2R֧R0a%!4P'7)Q*B $b NqL ;^6m&e DҧbPHM"PFXMS,Ґu#2 ) (u;]"L"C80c逝tцA4H(B&Cp $ fQ *d P2gYuv&ӹy-"4`Y!1/ךbтݩ)BRjS)EIRkOf/Q*#Q/[h4iQirDue`vAU99vIEfr!C'ucGU`d\lh" Xo.vl4Tb0H镑)I ɒ5$E 8ef,]d5U$ H zN"1b*$(#+ VaKu,ؓF vbلхl-U\clJU+`"&5BLBE$T J5\ 44hh:5("ykD(,D1pHmQźiiLl$#5YAf\RaV 3 ~_N~$:2 㚃o \8=@g (m peeօK)e J# #4R [4+2ݹ8<{1F7&3ٺY'4nGM`6Sbn  0KHq` _*5;e҇(JTāWd?uUI`w?Ypv +BR'D8;dMR"j DX ` h gq7%7D #xr !(A` *Aԅ@7͎TLBsHi@ ,` :J+*&lV({SIHGjcӿnmaeL5 $C0bJLLKA$UA@$TT4A1%HSM5SRDAQ1Q$DESME 0IEEDPKERT KQ$M% $D% DTK UD54A%4RS$DLHAU"QSDHS@R4U!3PU4WLUTEQ54D4DP50MU$AE1SD-SDUUA3MP@Q4MU@+IA$5@@1AH P"R (>cJuJг R)CJ$]5 JM4RPD@1 R  E BaB! i`Z(#BPTSBҁBPđ(DP4!JqUUQBLD4PRRЛa))(к1 4%4ĥ5Āq;PCAJBSԁJTSTPR k$̴4R̅D RD#@PSBR-!Kl@4TRTMI"  AA@!J5 ABPD$JD4TU$L$DRR#B҅"0BPQ4UR4- D iWER4% HTBK@!NMQo` f$}߆4˕ !X!7Ârv b)ER% ;iI J*Xd E` ([J"&*td5jD8qxu rF: Wߜ%qSCf.SZɄH%+-\Psad5S{uC:Z 1!+ '3!8d Fq4ܽJT):ЄE Q^B" 7plQC+O8 VQO1!K(lY(1DŻ$Ŷ.s8 ޽10dBjXxV&"h)>FWE. R@:)E%S[MAL0T|C_O(zEw! iDkGE^d _`e((TV_$hRfHʹPY$MBSD4(R%R%P-Ͳy$ 9@\2)uqQL`Cvvt$j {m3, 70B@E(h3@EreRTsm$$CT\xhCAB<6!RilBfe30v ؑ}d&iffj4E5c}jkc8 K!nx?KP<`1jT/" :`};u6Sbdy3L-Lj3A79x~7 D8Nx3a705́B&k̤בk Íge ]p#`6xwsC?lIDɹ!'-,g@ RS%gP#-nmc~squq< (9Ѳ}'CpBTpavLĥ+&"md pE,)JɄSY A::KM9Id tNijlPmUS/`i>RpBu 3#)HTG64)V\`fu +/t!'$R4Q!Dp/HBPZ)v ?͈P{equz.)~#dPyMoR]NU#,Xh-E$ĐŋT$5 e &%Ӊ}loܞa`,Ѫι!s6jH@{*) :6sp'W@wd߈raڔΙǵk\ߔtLHrnƍJBPIUX\Ф #.0RQ2OӏTpD&d Ҕd =V%SˆG`q" X@%Opy!`  Iɘj!lQ))S[HR/N'zJqbcsEp&ߎO㌁$h/ه}dR̆_jgsTH AsZJl)(Qy*a SZZd~gd>)gnyHsOQ(1<=:}1n; ! u%(4ĈRBhh̐fWBY0@Fk9c@~\=lY &&M4SHRrĮ ;xp:4)6ϣ} T3 300riD.<]mxi[J'0I[ g=h>C^㑏$$<;0&E'wo{MpɤY16Q鷏fd"m=oSq]@lN #͸2VI t&RCp@QHU6 4 yqMALRRFs>CuDK$o!#\ʦʉ S*FHV*&{WZJ'@ˈO<. ?PFZ"B( BJ=9 (iCT%<9*}RH(߾!uƻ6kvD{-ս)6 52Wq99q4P`@v|i ER-&\a &|<&!2mSEL&5u1B?}ow2N34 wJo3-U2Vk")$0Mh}=bKbj, |~;tf-ed7鑁`gJ~*J1Uc + B4kvo7?<BΟE(d$X^ v_4&ܙ1 tW}>l5Ρ]UHLHjM@fZSR(&v=zˊkӹ~ YBﯯc+Ia?Y90؃bLԿlR,ouNL}&zd*ams?,Bzs/ #>NU?)@5 ijp(!"2VtɾOJ'$ % R!$|*ߘWq>-m403؏X{60d|?/ߑe;J^1CY~69lH=E%@R%J* VlOumY!Y'!4a!;}p3-CkKM_@Q ;G?"4́&v^x̐MeN|N͗N m>٭LBpȡx~9'Z#Dƌ'0*\v4MГF]'d a}8%@XK18뭚AaȁAa6U`ͷM jr)=ew#O 6i 5) IBbMfCm}pdj2,(eSIQJE"ԯ)@ԁR Z"`㈝JΜ78JiOwdއfi//6u5qes[W,y|@d]mjfDPC4"%3r-:L$86zoKqM0&oPd`0k 05La' #sb&1v-1Ax^(B"nW;9w^񖓕 uf)mj9RLWH8}t:ߏt~8:ӭaHre6=b3Fq[ fsNUN[Lqφ14(=#X2=~d;JFڙ߿:ǡ$xAz_}y3RU2{݇{{߸i9pp! ޜPvɊCȬy]ƌufӭ5/.&ZƗFƵpC[]8ϮlZjqQ)oc{{~-d j^ƴhqO^E3r+gj>O\ߢ{OD'6=e"&! *h[XtD ^zΏZX) +dr7Mz]3.>!tG`G`Jmqi‚9`Z̐Hx$X#o 0fWűx|"^7P3JxC}D&¶Ǐ:L;>M{\7޹ߡ7#ˉBC"`SrlXC'NG1hXQ ʃH]̰p 﨔0H[TԈv6A9/#mhb-s~sZ]{xSYԈ$b#|z]z;3 }f;:{q'-ԏv&o }w nG|``ŧ.:K<8 ÝLQ53;y8Ex8_1qVa1޿¹O-9㊑gh=ץLg·6RpW wl\ZaMB3Pih<#G7T tva!pBX^oؓS,D"K{Gع[sG߷_WmGE֥$]5;&ՙ|im'E"P̸" `^Nq1;ME+NFꃩlZ2R0ltF:*_/ZR#H?>f+QGl^KZ']XeBCGQ}F+Ъ~ࢬb$pJ ehynoAI(vl6fq Ȟ~wu-̌\Zsm@~`.K dSpM }ksݾ7#T.{{n4E03z[2Uz@-N^@z3S͢u"09@K]Mmk3O:> t$G߾ <8{=02jُcԠWE..EN]X9w8ב69pKgP6G #uV!TY/MьqdNٙ]OOGETV烩s~b ăp\DQ2ND³7h"juX}4!ȦQO#(Vh$f?#H0f `߈MEA3 Q?,dlxo:>HJ q=߁6s"B,6dQ-Ȳy[mkp$spHrtqWXO^  {k|7:݁̄NutWdžCvcp1 @y_o ~,+v3R;]0: V_W~ }Aܾq'݄iWa2MϹT&t < z疿@@>XN\mKR"B da9׌ a'|{q AA; ~ЁѤ/8)J ~ iP$3%(ΖzV(%?) !B|HSHb)$-LPRDSICA-y %.dumB .t-%sR3 r' & hbJyw!5' -,K AQ5$JDV89uܡH"Ji&ZA{PRHR%/CȪ1nj=aU@U,1$CM%-D4%P34+42DD>!6Q5/uJ)@R4 % !O<(J%`)JJ;J=&B^ᄀ9:15yAT 'đ!71)!hh" *X"b:ɉZ*6R!TMa' f<[X<9km, 0KHI|/bF y.B_.Һ?TzT,ChGm %)AB̾ MѣE)~6,dPOi:QDXfA/6 oo;!N4$@(~8?VH z_Ǚ~?>H6V1&.9f]VlU?n_P$XTEeH,kdXX+.!=Ɍu)D`2AȄT;:_%Ӊ 4!("9 zEsgeUJY$ɘPR G W\݁O*M{Mk87 ,[f u@]A#dC Uj b;ɤ!GE%[2qըb];|> Z\ퟧ PRin,/|avJd%_9 $Ņ :AK6 V+ݱDCǮq!!d#X@*l ,b*'?))) ) "FP!ehi$i)bbR)V J @)F J"TiB *&(*X((JH "@JU((J(hJ FB"Ľe3B}ɩu3" P%OOqz=qFZT/L08< K f6hJsu%T 4mgD2d%3'Ode(Jn8[t!$Rhp^AOh@<~c>dάl:h$)gΟC(oύ>u808T c!ۛ ; } '`G5@Lp(HD8/< |UD(W"3e~l AT=i3C0lA`aYZHs>3d8TAqezy2R,[xq.۫uR;]Pw#zIXW 4~]U`1:?zdd[Y[x ozcHd"SH(5F:ׯ&tTZ鰲Iv-E;Yw._BYUT}OU] (G|iOKxR6avK=Dm`XB3O!S7*}N<?;d+_x~I(xԇ`ov֏ u,HSʂh~Kbm%;E HAl-`^׋;T<}c +آad$::j\.&mjoGMfYb$aԉa2!;~gyѦN_L>.P0b]}O([CW}{MW%VI\NqxԦwL;c!}hbog概ҕ2]#oxMOܒc7E9Q̘>IPӄPGܚpPsTiB~<0Ո iJj `@Ƕ@8Ma$%XoΈh &PM7iXØZ-< 1}ki͇(,9 LRd⑚n Y6yw??X=NT5v8tEywEM'<0(-#9ʉP1Q{JON8DI}*`?AJ  !«w ϛ( U ~ 5wjrE)i3Rryd4ZȻ:j 14QN2BB>mkV~3K<3&ݨd<(,cϽeC6îfZ1ۤ$& N6۴g2y!+fNa# '߽9(!`MH22aYxt#I)$LIU  XE4\SH h$B AmACGHP&iiu()D#PR=S DħaCi*/\ % L2R"Dx/㝬߮aN ̩qmKYdnuO?.%4JNgmZֹt5 B2)+@26zg|@ T17/A?{9Np{2x{,Q3i͌:fL뵢DolM%dWi jRHwR?fO$.dNg &6$zDB.퇇-BZkcR̩2S&󨨟ݍT%gj$'0N[,o{r-3$Yz`Lau8CDž 3~S|ϱ,g|&%-?^J kCc '! s* .Q)H#*Wݤv YBFC^ qI8dYQH ڱb1K51JT:`͍sJϷ0q8yn;__zuTWQma-ޯe:<`a<a q,R6H>d_MB! PoK fS1ٚmK!R7 4ױ}-NcWx)vv=>.{ZcGvҊJRz@yY9WAV\Lgc7Td8`qCAAIH@??q}-IND){T {]S~hrCΰP:Ct9ܳgI;>xMG3p%LL$3 Pk>0 Ix-^f*G'"e!G t`yjxO='YGe ŏs$2uͬ\< a2&B;:;OHi5PADPF(㒺$38/DzSD3PP 4wj) *a)i5IJt%U5CUJR-S݅U%;)Jt#5I$" H")-R)Z@dUcăqË0r2~Pgc qFK@_;И/ xrYfgOE#4k)!P+ɥlBWv,Cu'qn޺*T'qz^˵TR{wQEֲK~пU bjJ1\=WC$eɰ_?̜>BCFA]Sfq4v.rdxW-+=F ?ݧ9>2!2)J~|5yaqN{\rhOAցH>?{|~ym9}|Yi.H QP!2D[p곥[7Mav:h܅Md pX zK0[6ƝPT gnNy,?a[lR,>fڗjx4cAM!@]584婂`ķ"2Ș}3Pkz&lbV3ntV $I 1$m;,ٛ)ޙeNs˃KBm|d!7`d߳yNG,QA4 ^4rmot4oߡN.ѕ:ٕ 5~(WkfJ塩nx .!.Sfá2&8d14sqDK~\o*)-P*!z;='] ^~N4=!3oţ˖ &0bH5 6juMg!/tm{H74&s"]6YP7}tu~SO}Dm-FHѢI#ċb]tHaMc/Sr}qPjul^= t)ƴc#oУߜ6*Fn?-doRyoY瓶RhO_*}^zй()Z(%%<>43bp.>I糖M=L.!$lPVhJD($Fi4ymvh<,aF}u7۠'NV&j qDPAX{m|8[I Z${Z{ozP\n6(stA#8]@!@䞣 :yr$'D_͸ Q;f0Xs)ޞ/1WN`:vZB] .-#OM@4 0" (0B:x@w wY!ďe2nkUfqoW0 |Oe 0( Q5q#Cχ\lJ$kMz0?p'gQR}6e.yh4^"Ctlk (!u+FD}GvxffB`HXq*uvqaOo9 $W`5/W_37ׁ' @DTFM1O~PRDTcfaDE'p 1Mq޹< ޸0='4qIt`|?GX|L%wNJa刀8i4Uʒ u]>1dx=:nKW!2އrzgz&҆_D̂;FF 9N̓Dpr|`*r.Y$tJśR-`LA C֢ /%Hhmregxq• %:%X*Z86f̢+ikg ?!?GRT$dNo,x N6gT/Dt(c.bd@]m^>}:H0}q|JMRam'qx'Ŋ$=;eˀ ldg )n|sNzdrpvBM@)-TU Q+{l5TAMEK%)Bdhf(h%(vM R:DjBCE [m0<_YgCSl#._Xgu<~űS'﵊6gs u*Y/٤ԉ,eg2&e?*5ۭ^"/O <"2S]0Cŏ |8ͻxaoU3,:\pԥ*Hf`(L ;#F|d5+BS+ o>kϒrzX$W*6:.4֗ـjO&F-fҲ P$D. b2Z[R@d״c{UH!-EaH#d&b\a ʪZKМ(K RӋؽg!iA9RBd5>s dԓCPiRsClbmT-7/MLHD J  PP"%Ks9&`"pqB{>\uxL~{UV|e >Ց=9w'<]obF00nmqOr=18f֠@rөB.c|(!SFB $8JNOdį=QQºIH;ydP/$""zPs1<+N)sʊ2p۾ݟSXDvlY{0MP/zSd ]Ikׇu>󋧩=Iy:O! I$Ngә e60̦ɿϲ Σl>VwcAQno)K+R‘cRٴѺ V%97vٚ.51B-nfRGǙdഒq E76KQxh6ڔ%^nѣ.+nRx=ifX!S@BХ$ӂxa"[mu59iu+tv9GCj T?ʪDҜ,w^7iFI&VA-IH'C˨ݶ2/'$Eq;b֢$6m@EbB%!'v{5>"a{ǎPR@PK?HI;Gt9@wd@rX 쓂6|(,=(svz%X Flƃ@q.BAҦ |X٪ pG7@z+270^7HQ)\kMx =h~P~8-D8=ݗ"Vz`>>) WnaNɘY}7.ClR'%>cp% ' YVrDj/GV2FH&j`o݄ 4~҇a 35x(b+dc˫{+fOIR[i܌rC92+ V,d C4  . B8vDp PBi0;#Рט   {σapzYƉ] =>쳉;&xbDC|˱fQ"ZSD/@%?SPMxWke] as96Tzi5-)׵CObW=T:))` ]z38`0 Q?~ y0zcwH}p ~;'բ"yp6/>=7}Gnab~ _nӖ ӡJi3bE3E7ϟ˔֬ Umk],a:1k0 _w$+c*f!8pP˨Yq$-Drav8(ql&!A}H]P i%Hb l.s!84&^X(H23A ~cB~Fkbec/8D>| B09ZXaxJ KTCËjV5b#~KfU圵i rw.NjG"ɧN2)`kϑk-Uk=ː 8xܢBt.e3\N2v8Cb| IO,aLyqD;@Q/K_EKv=M T{h$6NQE[/a6 }k3 t0*dHHJ>1x>bf8]M!ǠT)$aX u/jJN/7pPd5,t f%!}L[4K~}LR>;I)zpc9/6dC?OZ6RYFmn/ttScloHTK:ӦkhUΎw:8gyTE>o0z{O:2m m0OyC<Nj$U|KA-f'ZkC1i4PfQP[)"(M&"H`POh)M d;vk5ƥϻ)0y $T h@z <7̪*.c=ưfpBs.jrA÷`09(iĜ#%E>p="4&Z:ANB0ԋD%S|}s9: !yySD3ô%kC0B!)D^A$AA2TLLE0RxɅ/u֖Vsk:"DD>ܦD 8)!DA5)3DWk*"H y潇;~٭gdώs6=!BQ+y~L Ͻ9'g2.!\@ wO}WuLq tj!h]Pjfpi'""u@u K(RA!Bx@di39՞! |Cb&Xb!aSBi@"HbFhd%@  m$LHQJT03p-" r'nt>OmN ̝AQVxw,8pF0?J`pd%(C71*dF;diC ĉB30{_]G&Hs~p^pPJ-I :i 96!!Y$tqc/GcEVdS {xܛ)ݐ}9ld0({G ϼ 8}ԟBNy<`q(TtCNgvهkH+!3nɳ†@Ć,C?TUTԦ40S{wDFl%d2=de~%;l%AzœIUӄ su˛FF!1P>y#݁U9N1^lIn`b ;\VUFp뵛%eYaI5Zm@.^1h»q!?ٻXfFm:X:ܦk.R4Y:3;hٔdzֳ1?ݎLu#[ \Qgu/ːvCaԞ*"›-OzfktQj؉zɊa'wpYս=VJd0*jRu?K+G=O&/=̶ Q gMFX h'9N]GV C׊ Ŕ4 e56ńp2j|d0x@) 9='f_!<G㺧Hu}m?Z"`x\+)2ɓ<ʑ@q4!&oQ7oq2 EXfiNY0AvKz>wtL .YL50 ,ݥIʆqP s߷Abc,ZMyf`_™wFR3azz`+~C~qG zp)Qb}JO{> ttpD];Hy]!SPb %Q`WrxZJ{.ݸy_JYY:ہgԷgӭk{0lS>O>㴮&o`ؿ4oC~^ߚB;[m[G%(GB]dF[[qFқX SYk[+wݤtW|Mߟ]$?՞JV6v]8IiMkמ~o`u)-S m;K-Ij窇tY lC7uZ(94Ĭ/2}吂!hX_,s ~Em1_!NF!S(\XJP3̚kyu>gcU~6KaXO9(AMd\seu =B)5?5ܮ6v$N]*zν<şO$A@D$Ez<=<yˆ%bRv tBng:臅c#1E @}hm7Z2$pɓ)?6"0xǨy+W؝ɝ (0@hɸA <#&%W`- 6aE!v h9!c ^NeB[Hd~CO|c뎧S2| L'j}I>uBz7OƤI?rru 2d2(|^&"I~$ CH{ k&"!*q߹ TD@K^i#8;^ױ&<`@b MZF8H.1((#n0E*P٨JOqs1ᔐPPUʺi.jS4bC[t pN'O]Z&*bI+8? W6gAZ!M:Q.F1Iʎ\E Dn]͊6@PD ,T[E`F h"B !:uKML$S$X'S4DI,KB ֱmbk+!Iり-Q3I]8zHLEH%$A% EPIAEL(RSPP$ Rp0JUCfTfK&gs8<(pa$,S\h*J9`E4 SH(EDAQCEMHLT%EQ4-x#dck;(Ϸ>JU}d&,H%CitPxv^HHC2HuA'E4 PF F&dZh JD!NTt&BY"iNJY+4J^c3ث$<䤓*H90$ ̂QХ" J*@J)CsiFH:NXy#2DM)@C2'P 'O>4h X!Y!uҜJJC@;^S & t1.I Nk$Pdd)9 Q+]uw*p*J9XbG$6f6]eC,Ó0¤0BIV%, y+a{@;﬩2.zu&hN}oq^UHr,2eE,SvڲVTYd 􀉮F,([BAH%U0**":VQP[3ZU""")JLϑC_ꋾh2}ъ̰i<=S`-*;>'Q̛#JjdM;ՠ1Dα洯:a;c4r"'FaSC9b$QkEv )H+bv1ēA@O#SѨ0R`J2 nҊE\JP7Ayaz8O07d6{ ϒ.ӉF}KXC]wYCiVJ,7Hwj_DUځ):g`I1DTH`vs0^HEԀ#ϧ.GV Xe5uFIAw :Ԅ]U\g4ĒnjB!%jbf+`L THBm!:=~s,"7dnt74ri0yq:0RT HqF:M!4" P- i4!OonyJ",X 6tR283ixBF@etKIIHZ4R!]68BG1"<@4- hR$F!@)))(HQ(V@:Q(!F()RiУWHJ 4:iB$J@( ZiXB Ў\@/R(!DH *PE40VAd*BVs02$(zF *kAiaR E7!T@KQI @頶uHx) Ru*JAAy~`9dhy"`#KƠSg9PDDL2P;7AJJ),uP8_$:l M{SbaezwZ6Lv87Cnpt9>#}J}sjg tɺ)sPp=,4`D3HûQI*t9;mS ςGc!LI01 Eo˃;u'v0NB$F0㟔8 N v]Q@Ght58-\XOj`IiG{iāKGIT`]m׶zˆ ^ڋ3Šl(N^Bfx)! C(SޖK}8='|;DU]B C~XN\l_S\S-!A~>{r6dGq(!_q_J,AG>!NEccAFV"y&\$reSyt8j{/ "kl8 DDRVNJi"!=CU' >i (:Z-N$WGC: %[Oi)S/>9*&t0䨓El".?b pCAP ɵ Awl ֓4aP N52)4d9޶W"WDC75!̀D9\Tb&G$ D*TlaX2kgbv,zEPX! XNJh'$ ށqBi9EXTŌ! H0&\sjQb0(!B!غ@0@Jx‚#شxy ^إQR("L%M\ƒ%@pIb))L9tBdtk~n'cJ5!HKAARϥ =֞9 -.tAԠ{` F"R2EY6"B(Zjd)i@ ,b,%! a Q2Krf$ȣJQlM1:DH$R!z ǡMdU\ A(eSPm,TP}Y}q}L!2i 3Z !]h$:o4m}}ݜ ͢Eb@%~sz!Ded̩ $P9pA@v RQJ   ) k)Zځx {)7`($?Cb\/ўRZǾvn Ǹ! &l(F "شs> BHAUE&4JM.|b? hJt&S)Ols$zrSZWד((da B|S~; Xa+$o/Scwwy: !|/l ilQg"O)~eHwК51a:O D_O$oI,  7>9=4(hF:mFZ`:M fZS*NRnFDJ[%@׎ٶrb:iuu`i 9tόxC1a@s+dD(k&3XFx[NaυiYϦ$ҲdUTa9< 639Hu rJ#yWo\sf>?` QN6'ŝިT=N8n@8'3t@dg|6v:˷|:`_+1& QN!7͎27a14Oڞ[̜xoԥZ9@ۆKDXtaFzzF@Yv 5v6<0e 2Pd NGwG'Gk/:Irb& a4!ۼ o'mSl$srs`׆3'rзg$ o  $Gh6Lio}0pw Azx2SkаHsGL4L9$I gNvx@v5( u@h|75ƽfO ԐCwvM㗅1$SA(CҢ@'2^϶rSo pyk`q9fY!M`|p:,61 CiSfZ6=`NlV!'(eLg! N)W0gf/nX%3" =Fܸ05ԚGMk,_2hx`3fWZ8.C&mCp @<5Co3vsm(䞊36$5F{{Igr5@b85&j>Q LI0g>%iB )(D(F (X$ZPtc`5#>?ohsD~ RDp| ɩ5ѽ?`d0K!C|uICtǺtͰ۬~+M~l-:w?T4bugI l ?-9Ck;μ4mz9.A>a\$ D7ɑ;}^OH0җ F̙2C<':# Npco$fz}浝E螨J#]r|pb  k|oɆɈfɨ y{!\H* )a\4?J{ Ӵ <'Ϥ| Wy2+/۽>ʆ]Z BBHDUJQE4igBH3% 4ʔAS{|9gF0; sHO) *!IE Gf ; Oϼߛߔe%:`yӶuX=kp}PS<K;=%N^\CߎaU+8a̝cC&9Ph() iH=!ĉ$1KTP4QA@Я$ PECT _A9(TM!(Wы7ֽ/?:AU;okz&gbA#k@uz܁FNۻQI !MA:qt#~B `,AW-~ÓzVp_7~ 4xO/a$>,5L@M*J|K߇=ZH(@H>0I- SJ(@PTM4Q0PEzf3JDP Q@I0?3X'״ 1.=k&"(SY6llC?BF;_#8!౨,:mHs + ~xB>%Rs9%RJ0UHbLFڂɳ)tb^0\&jmIAav2ܻnj0b/!:mRA 5QJF,/æ,=PR3ElKkaܗSqZ䅣#FsϭnD+uTO μz}CrW" @18PP-RAB+1Gwx'|SqԄpM#ITR+J BSliEU 1QHQ,QETABLTS#E L%,U 1))QDT-(B4%D @D+R1)08.b&C!CE=.UϿ!]+D>1MCQNuCdp)ф<Ւl2i 829v64* -G4[uO= Gqr$CL΄y`77svOYXc{r`{gͲ, ciNfD&$ r[!ʕGiŊdvSZ˙ONuk2%]Y:Yn bxbI);3xN (j%̆&9d rxڝPmߍ*|Yoyy 5 0RtKd_lrPAFñI뷘5DH D2ӔQ-P^ sl$XoGO|`ĈZj+$$ z|󾧃65)mIqgDS-^709gfV['u: _,@1b` m WdMxZWL$:(tb>{)Oġ)~B .r?cW 0:cX@(t)_GJT@B mB %?X|/wGrbx~~!{ ~0a,H' >'*n{k"ioI?-c7^*E! gԊC1`ƦswOzS;rz Y,N~f=SYFìz.ݝcֻ7mӏM}hI ai=9c!uՙԍ~Y44=Sk.yOX\ka֠%I`ey8Txecmd2LJw@_䜑1| T Gn!M -QBD,C@B$BMKD4 IM$!. Vq%?mT*1,P4C|wϜh5C% CKUUsa4k&H)=3 *6/3Bd(`!Sl3;Z*oǍH!&lA$MEL؉=TRezCH5M{ r{ 9nNWT!A_">Yv# 75}I$J$$%) VjP _ : OQ}HT qS?6E3llA&Pwr4Ft TpMfb  BHQQ"@)be@bbB df"bZBdJJ J))Zi$& R(& ($AjhFY- pxJ 8>! A6HBTAEzj õi%8Slf M!ؒIato@`psʙC]0s݅DcSsap+ ?}=͇U8a `#6> fDqO}onBR~uC2Q] |z tO]y&;MG(m &G ~^d|Lp~(Bts<Ϛ8\/z p!?j!zp9]jSL/ø(t H0ē1ܡ n:7΋)򇵛MXW6͵$%OM|S[za]h w:W,=<GakmJ97q 93[pcnkZ[)8bٚT !M_:v@DI"2 dvNbÕmf-P + |c,cb {ƕps9 2SP<9 f2LDMt$2z_ @w)s,t2~$Ps)BC+Q?~jV?x(EH 뷐@ b(<ԤX$UhL(fy^`i)nq3Dx6XH0b.fm@wh6ྜb!ٔ$2wMiX붇 ( @ه RNIl*ٲQ,Vj9$tE7T $%`Zl0}@mXEEEnszヒq1"m@&Ͷ18BcVx4uã'FbYx%zaE:Q􌤓mFls0ՒZE^τ׉|L\˙yH0tGvz7~_ }@a?,>cg*RTBLPTIPPʰCT4#E+n#rEPJF$'a{¢ 3j7(M`DPnaE-YAz.s?}{J[lAZ !PqQ9IA^.q9DF H( %Y `/斚Mabjb(*Jfh(;dJ΃P`tBRfPCPQ@P)ǡ2>&d{y (CB@(3/Z_|  yD}mEp.vs\[鲎{V8%Oꮡ@p(z.em]qqۖZ2}s[6~>hb`PWWXٙPo{d(7)׈>cnRS `@#8 `~//5ik<;| q{ \w DDKާOJ{@BMД>w6vs! 5|X@(a];aAfwDB$X7?pYMFlf2}sw( QK}>>`ria<@+{O%*D`{ydnDt) MX1ehm`^p3dुJƉمlC'@UTSCz|*6?O߄>""G?"jU{3 $[ ֓{= @u>zkχM^=z޿ &R h"D(JJ(hfj(h)@VJJ)F)BAh(@B(ZEB$F" J))XBqRmNuD=mvXI3tg7x?~2"qLlE*,QJ YJORgQgЭ(hALԋF¸Ic:oBHmJ]5Ip'ӄX!F9f(-U)1Dckmd "vb,\0'zz_:6J]}قǨLnj 5asC8A$'ώ1"RE |{3lL4NRFu4D!h5ENTҧRm)G@ ({М):wMu6LL m(O\u,׺rb2Z/iE Q hT2}} rpib #+D}Ӏ%#;$U7pA`zv5#6*l~dq (()jHHh^ )*m("hgx{G20ֵ}kQퟘwv<`ɏ=gYh~Т4Dj%kgƲۡ pFS[n<~hSI'd6pqJ)0-u&LBj&͢9I{" *J3kT6sn S0ֱ߯hd-cS+=ZaUc2 (}'HQJysYsd,ę'@P v'M$RAB#v()PPe=/TE4ʹICy3;˜RdxL !+1fZSSH~{9hwDٻ}D(@.C-ej)`'! =aYۺ~Qv/?dFȹq>~3ޓ3};{I|_i{Iۍ ]`QY3X޷{|c|XK 塅! J{QÈtYiP.I CQR#$x'`DPUEPL%%Q$RPM :F%DqC wֹ=)YDjtWXA4C5& N+L@R-J2勛JeX++`c1T;+Pm%61Fvض3nk%u %x=y S4:&LH} ӝؐo4a t?2:pYMMN`5(z,M5%b#$Mgí\H{}< ʩl@B[sXY3+D ,Ep |^PJ@`)JLlJ9a {Pkϼ% ^Ts:!I-@KPD N'vSUdVNg.9$cg4$:`i`՘g,ȶ+($(`1*`I6n-41,)^OHQRA✂s(P J Zh *b)~ %G02nvQ.A9NMQyM)R! )j*ؼh:%9f'?) dD@)'8iĝ m `+L8m9;xۋ6~cݎ|[*xP̜ΞG[,E~ND[*694V̚)UD63[l ,FG{?Mt!"o":1ڭB3)$(|}%0 4VwCG6!-/&ž"4QR -5!5,7B&Ih>캀bGiDYD"!P6 #̅ԽFj0X8{Fy{CON!C\ayHc XNuRZ4'ss8# "S @>IHb K*%Ow>j%F]"1 ڨ"E`E <}B)XHzn?;¾:ӧǍo}KB5DԄ2{a˃b8mT0[::;&H(Q~h(R"Pi;y' (|X(/]\Ivu{)h tCaAF@p>ckXɈ6>w4 dI0K?Aᖙކ6Ml=  $dص"X4ɈglN:]^E)enz)ڔQU nҴo[',5chQ@F ,PRAw^z*h),(VրV`'ji):ˤ# QENɩF632$Έ"R<ҍ`ڈ[ȋ g0D)Mv@ S6VaZ LfⴁS³Z h-6 3VQ(Cⅵ nS $K5KAj\ eQ#@['V"C6EӅXj֑H :[dB5Jz2<<2B@ ZQ2!dкJXMc+VoJņBAHA& 2TLJ,MDHI%8,AܣDAs7VaLKBE .R>O04#5Q'Fkg $ "^Dɳ`W\K. jeٝRde,԰Ӟ%UEH ihBT0,Bδ `NE&JQE4R4 PR>VԢUIbA(iX d[D3u.4裣jAJZ BBш-[B "#iK)P-eQO;on.%-DFB̐.CKDHXpUF &bk͎62sS5 3/1L0̂ZӶe녆Nc5- ;RZŁudEjkrtD$1յYY,:kcSUe,m^a fqeVZC9GDf) BPlLqk%VPFXR4Ųg$u8dS `.4*Dt(n24B 1[jbS %(R`i"ʄ,]LiaH]CQl[jً&a!YxcW,m$ j4m3VJ[2:+fJ]bh \RQHVPSA:w%XQ0R)ʯ3eu$DDXUDDYSdF U9Ksr" "u$u%Tt*cca4ԥmEB99Y9O RYQMR6+eYk h G  y@[#i;W hP{SP $";59Xmk:1jF4iwe2AhIKA-`GY #o*V1:fD93%A uJr3LJAU#Dm@Up2tFڬX0el\,en͔8^r9fX3Pm,cG#RU*Q\ZţؖP̵ R*\e*F-)b+3LʥD|t̯NUŤFY'sd@m6 :ZYq;dJXEE+2n +N\W[fΥ Xvڔ*U^KfcjΦUp׻E198J"B%a( VՍififJHbI XX":% #3ܙ(:95&!PPR4M XgcQT֡JeJrT,BLW1kml%L9nLl Qt0))iNT("F oSd*dRз42TZ{KUvh ȌW3Uq)tؘ4o$QLb T VʫڟuH28prETW1n+1$%ՙl>= L$4)TX'v0dCT]i,J h}z+(o',7_0/.('J*ihd@z:)q)Y7P1*R @4"1!B^Hĭ BR!44i Δ 5S$ )N1]R:UH LPDĤCMD@$@06b$GϘrLZ8HrV(;Lu:QAIQQL1͉CUELB( ,W][bs n D䎸@0L6m~]}ۋx]\5nKcmHZM[u ̐^QյTMN<+mۺ5bU(i0|bA;S5^y(C;{ORv7)!zRBKF?K*D4O ~<3*Ɍ>0&q zġi QIQxGpY7 'DӢu;)=PJJi$&" bhXZ}|̔ I!hsl|05͡'7"~tы O'N‰>;~m~?3l=rpgkN oƘºpѡɖ=zd:=i%N§m@aV4Qs=՟7&U1FZ%;ۄ ##?ۢOqd"BPQPc9CT" y!}}z ԧ"BzA^iC09l0jcP&  P m CS'jL̆9eOi}S5Ų+%@J@f_OO K!J?xJ!Ղ ze h>* _YjZ@Ľs rV J0I@0C i]K(z=@1uL5H(}d nl"iCzg2rw!H.$R;\8_,'R'5'\C'{ }I83.d>q@ܝb  ۳8O!1QIESJ1 DBQ}F2- ( 2k, 0(G]/!RQ9F%qC,3T #֍e,',a>ayC:X6YRF\J^<>NSq Eq(0PQC=Kcp F{xPxg*C 4Gmʉ f'C; JVc2d"Zqmi$JD$ՎkKAl΀tdêֹ"(Wwąr*qb L>v;_كo/)m 0@Es*.4WNOyC&-+לrLdU}e?+gMTyVC "֊NDVSZ4lsN1?/ќHI"mp"I/D@RmJmW׽PS ӝ9XOh'VTKp sL9Nt%/TS$u^* k&"hj EUY2 199G}xCw߆4`LMhY $j)ZR5AB4w=trA0:M +$F,4kgH+0p.`M, 3Y Xbmg:edik/R zԍ,ZnZ&X#j4Z La0Ffug&IIDSx|ǜ#`KQ*FZa4М,ֵ>?HdC[Ftw =x ? A$ K"P~^ÚPC!QTR%ҭR!CJPPr}0ew7\ x-Wa&Pg@@&!E[%4"!J(U  D-*jm9g|Suxcc? U%~7 ,#;߯;$ kAƈoW/@ОIScs날3;CԄrad̏z ;mRwxhǙծx@*SǗ6C\L`oxZv-i1 zXtAGnrK-vY̕QB ?5zpaZM6[()9X,Ā2g#JKG;K LKJ4Q94'^r!itPKOzx1ǿƣ.zi^[̬f&"āӐSa J/֯w~RN*:5_0"cYpO'_Ern5FH( BC0oa㍡(OyՏןVMn~0&/Fó@/vq">t|Mâxbۢtp!@L͢,ekmÈ `uinqDvH:$^PpmH@}=0萙k`fAŎ]UKe!;4akaF@$@dp MQ 5$ x1d+1?kz2BS+ja6Hʃ@ha(bL#A\}  h5CTpMRD? oڭ 蜶cԆO{l!fkhh2 g$OK g5 *(1Zyr2G49ZfHhL. /Ulcdͱ3Wct(B$d $4*@|}5:CoݰhZ|>|O)Ϣ8<8 H)؉>u=B뮶 ޠJ3\{cfxj2;ӛ !p `mB{dPS\`(#noCj0(勅DHvw0ÏhG*Ql {#.!D`j2% [>BC~lfam1>sɸDZK3ԉrB6e pR>x!9aBPR')\hg)f@zw<#fEZ}3q!O$Y>5-#Y<# $v=KCZao 1 쁃CɮqE5mm };Ԑ#EȅA Xe~BݎKY\)9GV~]"m=n&ɘvk >c}51p>;o,jg ؾyht0ߓ$ˢN(:t/\Dp"5D!FD1XpwUv mӛTVC^r>P#\pݟ`GZ W`:66Ղfv[Fb:("i,r(Y S ð ސR V  #ۍTAZFYPlihkM8{ ٶ/j=*^ ǵiڔka:>H'E-P^Aǿ3$tσ~8kdAXuEk$g:WuףwJ9V|"3= ނ$[28 pr%>@YA#p3o O`GҽW.;e<X τ\g|.S6RŊ4B:H&VrM%r9F:$tcޱ2ݑ㽸:6WM+P7ӌ$*#$Gpw n]OZ#qQXܹ"0@rB4aFws!PxZ@teNY>1pq8X` =n\Pqt}vVU!J |˾n #nB٧^+"#k\(5&&NM}ooBao6Y.*P;#`TWU!!Wp}!8]q]9fULmhiP0,k.Yz8:~< σoLǩ[#S&2zJԅr]=TLщ:ۺ m&KN7M 2CMy# C.sr,I>nC_`n-ɝ@9=;kARq}< IUx~טo pM.t21H:%8%^zRܻkk ڝ{G9|qi;<ə7e_B_3< :Z@`li3)ȇT4-b_Ȁ/ ?` (҉ MCLǾ"?>nljD ^b@PC i*VNu%ER]s%HrFО+F.ә&<3/Ǟ϶%]_Lz{oO͐ONފBuyw5}D8 X;l7BcXΣY$>O'cpA_.4 >8F֪ I d,ͷ#UԱ[bK"X-v% v2ӎMt&9ar\>{g,IabIU pXq0BU>| AQj),ݣ.{Lƫ(90$]JCӐ=LbyLsR7& }4VbYh;"&1KZ*& !vH# fF] -,pldNɽ*R?+(:]XwsHrws615$0CTI'4dF'i erƷ`d}U4K,캨6$*I]xj%LjO[D/Q7sC_LaxpF7.T,,7˼S;b6V&4s+5S\}86C>/fvZY(%!~TK1} TFNH4yu!8lg!1A sbYgd`#ow:aa:y?:OfؐP6dLXrPL_d!]ִ#UN)aRكI k#9_&Gy#1Q`~ԑ>n`R!Kཡy_1%Lae`X[;uBu0EpRLhN֦;c˸giB 'ڷPqx w3a0X%֔fBr8 #]-X'-WGb?O;\1}wxOGݍTn^ҋ4a|e3fE*/w!2޲jnh})w ska8GY[xDeO}a79&.cƾ0vmߝt,H| |<#j>>AS,)+A4`;'мw8bMCwO_*ܦoQNRXǵdH|ݎ?Yt?>f}%0,Skp]=fT#޷Cn#t0`ݐ>d]cQ 8nκA 9=8?ymwfd8^P| ?2Uli+n鐩Wa6ÈMWdD7qX;$<7k;6h*0$XpaAfӽi-Ufz!N> 8O2Fb(C"tWC8Ea@BC]RKH?D_xw4BX$K%;N@z%2kRKo{u3hjXdF{y\`b&:0;sL ,"b%6|D8R E#MX9( _X]ER_0 x4u֝&HF%vci0'r܊{TE2R"g@xba U%ODAr|\Z! h.uEma ћphtPK)%v)Sعefq+uQ͈yTQ1O{E(Ǩ'Ozv6E6)inz-M|U=WՕ"~2O <'&#90-Rĸ1 m>AUJR_`Nףao}DumwTE=pٕCYOS4z SjX`f/hf $34 rx 3[R:r;rEc+ݝB՜"5 #ʁz8$@`T'@ۏ^: Va`EcQZ&LR 0f(Qm^ j^}_xbzoʼnX[20 0)>O~̗YkۉT%0͏%`",D}uֱaӍ Ț /j_ZN 'vÿKP>p>B#J#N/@"XvZcӹ|\T.$VqgZ'kbmy) ȲGX\Sc(p#%DX AwWۇLRs4=N(a:@nS ]25É 9btX[\| FDBz}P|Y?BbV?>{JEH j`W*(?TpyDP[#/nGE%@ےa} 1X`ŐAz?Ɓ=\o 6`Vgܸ9kŠp9I2! ~@7ߟ,uH9:gyy&>Jx{`h`if(V ^ ~,kz IR: /tWF! 8F' 1:-<>@/bhk:צ'D׾6DҿWLŇ{ECƬYëX{xB0$DeƥvF Y ~f/Acwx8xQ쉤};rB"w .}rF_lFGX1L<5&qIxJ{Pw8@Bwv[ߤ1QЯP m0Ns7#.iLo)>*Q^IdXyHuD07 Yp3˴[$k#4`T28(72IPEF 4%E8 UxPy͈بN =.$ɑS" 2!_ʃΝ+'Gi%C]!}xIa<{y&{qaƎCۜWg6  #9p{*,S7<>Rn$z #̗ >G trv>$I}R7 T <4h7$p|0ii(82Ŀ/IS;ޘ2/@z(zOqݧo1sΛ[1` *vM @4*mzZ(M*ۉ?t" t\}( *bF&|D`B{O>>ւǧ.v q8j[ 4N[u]q1ߺroǗJd8=~\+ g@'L~|=|T(xIl 9O~OD(|=JߝM$,ޔV p&xRa6|׫35y($lt{n~eor %;C&x^?<1TF-ƺCr8-:2I [hPi2עN4n9yB"}?|Oxڟ=p(` biI&^t=#,Ba7KNL>zI'k]cҔ2 `;mw̹m\;ITP3?"_١?VyTE#Hް 9I53F,X R:h$a.˷X Mf~&`7wL2@:kPD:H RR#0#HɁ\VdiUh ; ޗrBЫId7ovWy(!!4NrX{sSُo{ISƺJW%-'2!㷓"OLDy6w ϿR\/ K13BPT1~Oh&>ad|w5aV?M(e[QTJsCQ5DPC ]Y zd3uƇD;*^+%hS!EhzqHb( $, yISI1E ,%"E"/X2t2tG@H$5E49{#0$JB4 8.b(?B,2t]7jpB?< C4h6V4^(h$}0+B*&!$}0%@n#ZiSTuJDT:dO3oNǹP&Cإ853ݐk qPU2}.e?/)m~>U۞ᎀ> _$,g@<栥BXef̵K,30K hVuwl'+g* 9ݻ[q v7tl"z(5anl2R`aa8Si95TǮ2׷yk7w˼?Q7O7ᇎOOX&Kn%M`mkNn,t=.* ̜~>8ȿH}uU-~`w]uOv Ժv=ztN닸MMt@?CT"Jzx`v-)"`Ii-U>2+h]!X"Q݇ CSwDi ^>8D:mF',kY3`|' $A sS$%N{NzR:lCW9$?v0'P\Q63 Bb:Z4>8üIDu!N=1upwf{6 J(%AJ`͗,8LRkƚʞMESd DMME<ةbhB"T&BYA9z뱄>'_>Mv(rJn۰FQLzM.x` 98^OQI}3ΐ pLȤ IJ=[렄\uh&Q,i'RcE5yG ~MOtN͝9[E_حbZS&7C )=a Ꝡbt U8cӵhHg,v'e|O( =[ p@Ð Vb=K !):(.a9-a>oϯ+s_]U[::qlf0Ω do@lo`@ί &)` B2D8S &Oi'M uŶ2XEpX4ƀf PjyD64 H{&`=H@t&yi'Q`tD_#:hCNu$;33a3,-\ⴜ]i 4NK(vLK3=qB*! #b{mLm8x=8ˋq"M !"`YCv4"t4Pl5&,bcdA0E1i#* HCS0f4xr@ 9er$` Jy4:KZ+B'-N # Ryq!Z("T1.j/]] }sŎb geL'9{ۭ,ocg+8 q8]TGuV%7&܎ّ'6ātSIƥY18LKHt8S1 FOQ6;QwoAPh˫S#qĘh% brd>lm\L!I[n` M寅Vt#^/vK.D;_ pK O{(P}OX߿y&Gg9Ǯa#@}x hU@En(dZڦFJ؞]10p@,SjReU MSLN(MذUu'dZ"40Ǝ hcQ b`FCTmO36a#dYPbCmMA7/ua>L.8v Rĕ d|gwWX% )~$7rDvzɎu8 4C{1> VN`U P3U<[jŒcMUF2䳭|H342 QTpH[ QRU"l9do H.Q 'kLD͸z+! >L.>" 9aJ0`mj#a^>=0e< 881.t``PzMN$i0%afۑҗmAaO$e YroRi2U7?IB4bXjN(:Ct@Ye;ϧrqhnkP:F.YվL^[@47[h OU/bo0+$lJL1<V3qy0I ̻tJIr_ s.JW\Y/kITb۵Q 8@B͖|\Z`&#,h nnPˋѧ ~adƆUL03k=A,70A ҈@ nSfqYfYapɴ- `t`fHt3,._zoPԂrƩ. H Pp 4liݜX\C <~1csxAo/gcj^s7!bCDT GqBp3qPEH``&p!;ee@J8d -QJi##Xxh[y$kBqD C1 lIєTI0ߘ|g!g?/rYL9`n/mیIVHFVj,Yg)TJH) Aʘa5E%C.v (`S=N&{|L_%Êi_IL{mRRIl%o60+Qŷy(-TL âF3`UVaC5] Neؼ6[Eʓs3R yֳ*{"rȽ1ڈ Rw.n((Q VYڃgT6(^7^teE!'s`0p4@ CdE XE ;V8M|2ab6ܰa Xͺ(fF41̶q6jq1pX "o ȫ=d;0aiΚ$Jt1g4o$""5sb: @r8R4ij]T An5ɻYW]81zFBv)B~Q'ť[=B? Nat)y+lZ abɐ#iYN4Q9ԏn.GYٰyЊwe״uHW$+r/@'ERs sxȚup"Q%"$- Q!J1)$ӟeuwƽ͹lgSz뺇3sq0Rli;! HӔ"~m2ihr8ַƧ8FcO`N8XfZd1bn@@p$2 SR4CܾBәRr)IkY73\KǸ) z}yLמs)jMNn0|EDvz `& hy rDL9vf|J5˜B,Ld@Ƭ ߗxwz[ݏ;@Qn>lH HTv5b9-2Ӿ6)MxN.lzCpC0>M^dfu61 r!_ dĻm=V1!N i #*(IU0 @54m+i;N'`+!G̊y*B APK7FcE-2BؿBFd)yޯ0nFMsBɐrn3 tBhh`J bcjXf3- +23h8uZA3CiX,u/=Jzm!{I?Hu,)Sk5N!{se|8yG9 S1)BLG$p f\Du fD(ML@/r@(Pb@d6y,R1h I**'L 3&JZ$CDwIB! 8nn[6R782iM:4>m(w. X"J@1~x9G×~ᇿYjR4IE@|{]ή"B$:s{C2D(rML5.[C ;'-ES ϐǭ2gq']a-}%f<Ǯ,x =f)K'9G@[AfDBRq?l 4TL"RPHP@@J #L|LJ E tz>ĎրƑ;3yNac B&Yˬb^'}Cv{&Оwt5W򦌍q4𞣴2{ BmдTSZ^Q WSM<?=:=uc`*ìG| 46 _V͙-SةRr8!U96,g7m!\J)U3l2.(Rb2iQ0av5y@XY̾8`Hw dSj^%mW,ڒldG2S* kBIhdEfu fL`XHui!M.NuNa\\0 I Aɵ(n?a(X<qz2gV*>)/ֱHU+=)imإQej, #Q Ƿ_K!c)P6^p[DDRy(6Vq(~vlƕj0mֈ,}hεIAJد+RYD>B'[ъGmbDX|o qcyX{Ca4iviMjZKj(mU[j*҂y0B}v8ol1k fزc ױXsu2Fҿcp޵Ҋ:ʊ*"r9R)h LG7jhQ802f:[Aq~GPc ux뙬zڕP!JysZtbQ3*Ln);ȝxώ|{F3܏e9 rHFi*jCn`D):uZ4eih8axjԕGYDFѳAdY(Be"(I)N( Cr銐)fj*jGXps,CXMvW9ǨN&L&nNxǗ3bzWۘ_`C]:b6Ksz?2MaٰpoP JBC2 u5 L! N9/6A%!zP}C5E2ICO"CIEg8ISW(*7Ց6 ]ACB!Թ)XLY7@7=rTX&SF Ȃ_SaNař$'NXpq7HVsd)YM]RILU%-$L .CPl2 b$eh_._dn&K OU?3o(pOԨ!J!A]”\D q!(b[f ߐJ~_ti >a{u(HsmvT^DYd-l 9#RyB|p)y1ύS}T8bL2r^/tr|04%EEAy*N ;jod]\"C+vOj#g~'M ,BE ab] t=rӾdDg@O\a"%ZRBC~b;>`qV (yJQJDprzE τpT>+( [%TTX>v|~¢V`Q&\ &_`rYT㜕 ^EX͎p/OEO663!L[bh2 b(6jsӞ"J].^}~\}h  }fT{@}>'PlsJ?^c$JLA0Bt4`}uIUMEP`cU5*H^CT`(TzLw (NXtMRZ7$xؤ3c!I0&/cJaKJz!,YF6|1(kWj nNtqdG1#, +ǯˡX( jޒ:VDwNqU OF،5 ]. c&vrS 5,.a`,v1Qމ$!AQ TT Ԥ}ic {> &`~VdN,>]۠%  ڎ?_m60c1bRϓOm?o'i'Ƚ ý?48?s@Z0`7?g=rQkQ4㇧'؇ LmxaRBT{ѡMbj>aO֑ȏ!&aY q%ԢZC!)TZBHTMգjvL^l)OU:UʏIm֍K@}* :fĀt;HkVՖk|~B1d>R XKÈٿqk1|þJ>EL@4 2t/|)̒C?8/A9_- 8?Eϳ\MPlJ:DA(aaDkPb1!=1PUQJQLC1YPdtmqbb1=T1:Ldh04qJ6!cɚZ|aE'AS3(N(klUj}_~@㡭,ɵ`:}i]Rc"g|-:unt|w}TJx;TSWT|Zzą AkXdns k&KX)J:LDM4\8ƪ Fh(%JHfGTzI D&<>|۾/"|gk2xz#A4EE%0ς)]0~!}|G0{[;&*kc%UL<ܔ؉ԉ<A\'wɘp _P1 D$BL TAH;k=M{yDuOhr"rP HkIAL&.zv,en*Rys9Ͳ>[ٯ`ސ&i( 9&J1E 53mC[ Q=vOӴ~5Eb%)DE?1o6?>b+$hZ[Nj J!R3 *P@T8@\Hϓ!}M 1K0$]wEC3QxH%4PHECA_hL ILszm7Bʃt@!Ƣjtbņ@OR#Ypb(DKCPipuJ4X-ۙœ eRjȧեŲˮLiJ S/ae9bVjXq~`AFHw@Ќ3"˄i)SO 8nzI<1 x vPD78.!f\a4I8?x,ZH"ulćxbj.BpRDKĹS#FHw"J;`9YliJpDCz,b};ff$Oo=uP^XNBo$\ 3qѨA(* g>K&GNKH] {Hi[ⱊAY7"{` 2J$NDB͍C^ˀ8\8X&$S0%BHpXY{MlMz:)aaQOoOBsOX,d!qOvOFP` UU@N6ԴHtsuȉ`&Ysl!=p5z`a.^7jSPS$1r1&AhnFM NY`6%Ҭ ş!ۏq2I;BR,CP 9wO `l])p^x }&Ds!08&˲%=!'@.!)Ab'T@32b#JgAp|j/x V8k{rzfq6wg/,)v^c2ٞV&G-!LL!EnB {`“EX.؀ȁtZ"U έ7.+ %H ;4,iC%#lF v_i )'GW8DӸ"A! CTc`X!hE v8٦Ç)`lީ:DgnP1 #jNuA,OQ(ssI6C[8$㱧4$GETVcbZNՍSВuѓ O$@P>͇[Tk ! f rAu=B9O&D &8BD Hpqn,'2hBEj&D: zS?.~}ia5?>(ѷ.\BGrkKі @*xͧ1-e)RXnyGL Ge?1w<=$)({0P( 8`it6Ԣ4hO̟/=9]9:}ןyvt? }GC c_Q2@0!Cb뼖}))~P'yHWL)l R)Vf9!f9},0/"nP`W_|8ogxp)ڊ{wu2n$UkaE6> G0!Ϟ¨"ªt@=\TPj D#Aho|7`~}ϊ dO ,(I$114CD$0LEAjZ$d)qxCCAVF@1{GCA^)B,$IKHRA)E4USPD@DQQEEL0B>ł* C9Ǟ.8@CENg5KE&:ߏh|Id?h)IURhM)"xMAD?fp:}R!+Ch *iQy{ B`E!XwΈiI&&'g"=/n᲏OSQI}1Ɂ+QiD?(PVIYdR 8_ϧ޷> P{( T}PO@@Ҥ@:G:(47u@\PwE PaH2v;2P]vR:gZE#JΆs2P+Ek]9PХK]t 6j q`L9Ě B:9РJ)PU*gYiCVf(PʍeeIPvj@P]0w4)tSA43mlv`Pe$1%`x| * u=(}Ғ:JK=h=:(:i=yr1< wv 4t 9Z"[5 > 7rw[v݀|( i2y\};vahXT}uB8-evXo۾t=޼) =nn}luʮ M󯦀/`Xp@tJbĚ뾽իS`{;`vݠ@hRRa{m;ɾUp(t}c>Owc.3seޛ}KPIﻥv:>|˸UN}G{9{_u̱ޟMWR*lj(7*R nk=Cfz2 PĀ@oN9LY('M'PT:*EHUB %HE#bn: {ʳ 7Mh!E} a}YI=;w7ǘm9 l (;{v]|*}oT/ȏ7wݻSwM}/u˔ҀIt:(k>Q6o3gJ8"J!n-%u93g9yH6۱:ӵ=T jn^wk V[oUju֛٪:KnoMY:λݦ[{msK(c"VKb Bðݭq;TΜ*(%ZTbT T[jmnsx&E@ʒ/su]vnݫ;w` 2{Dxkw}y=k/˺n݉uiF 378*htsw[&m٥ngl :v] ƪvیmczA (@(ڢ@eUPviݸY2wҕwq+Mwn_j02B$h ҃m >d;c:vܶw vRkt-wz T7cxv"X*ƯV}h+b|g}8PIAǙP]^;V3 ii2h Ij>EAP,o@@+)w@G] =ΥIEUEQ4PvШ }wwi(@@ @h GOQBh&L!I4  4bMSL&i5G茑4BJ$2i#O =C@b @&d02OSҧ@`& d4!LM#SmLdMh3 #H0fTOB{(*"?gn_ VPC$Eϵ CmȜkɞ^Q8P xg=ns͝Hυu)ѫ;XA6"BȊR)(H0  *BHªȃJ @$,L ( "P#+I $ A0DH"!+J@ H Q "0* $2@J(@,H (H"A?6~ox\u:TAXFo7R[\Rg&s̸U3D@Iġ٧5ȑ%۫slJ)IV~$^F*ZS]cP4?tJt5 aD6Ґz >spW\Au[=-L2.bXi_gŠhzruY,o+u&Sqh퓓BK{¿o})@֕L,Է b:ZǿAޒZ_Lۻ{_D٘ jY˙oM*&R0 #85y-v:ꆮ~ATk9oI0<ֽ_QE"xZ3*iy^{+}vH=#L򥐔d3H Z )I~)*z*"**|\xM'=iy%ǎ#O^3{ؽЎ+Ճ;'ֈŵx;?r k/&U$t];d \9P:_xB@?] M3w081u a#|A(,٧1zQ,1V# ^KLJأ&9بS$$]TOd!GQ+yץCXzax^dJ%Eͅ?/lv)ڧ H{!dR.K8CS¿\|9 B:](E8ϱ?'7 ٷRg蔶4ՙ]}Cu6:*04CDIw}}[}6Q?PgEڷGfMEsϒʉj#3y8vnWqjbOu#ͮriI_ U:Eo$V[1B ۨzLcKwey8}9h 5q3=jb4B P^l)hOdHTXوb(\nW%kp,#f6R0Qʤ>m=pSuaRygִr{ p/Ь8>3qdzi78cWW4uϙs?˗3 @G{ʩrEҨŪ AGTx{ ^RiD(؇-26gM:֕ ̬.'MKthv7˺qa8/X z"-Is)DL8)1ESP2uXcTM-(r/up]&|/vggu;$l+ҐOkHjzTU39Ӈ"C,GUhVz#z]b<8QL7/TGxP:;;b~Iֵ8I|a!O^TEGL]} C8W*2GΥߟ꽽 ꉇn*zc.4T*]{)NIJqTD [%1 wUWч c2 bCV,#>``,o`'ӓ>D 9.bj3bgӌD2GGld+ G^O{;7Üz2S aCZYIdؚ ѕ5?Pn9Z6BDA>H%&%/OEmHᛳ|!(R3os/W^  i|ӻ (ATSQ%58(&_bT `P=*gK#z2O8\5|s2 5C="!AJ~b~ԺZEȑ߷UsET&y{_t- @s\=FTQZ_FIdfY՟,>)dW}AM 篳XTakхO61>~Pm ȃ '6kj8;bBEw˦ Ӕ6'yC _q!D>noEȫqB"N-|GHnR@HK?:[z`TLmJ4l^LyR U)$Q(h@,`!&r(V2K%2A܈YȽ$N:vX” e4׺æP؟Ll>qj`9q-'-EJ QR=JB@0C=,gsѧ)#ۃF Cr0U$,~9R)Vk"ӧ RubCV5/b9QDYQӡ#(YiO*;uIWOUL~BJI} }x?y]Y)u—XÅMGcNZMeI$׫~УiŰ$$qk<輦R>\Q*k7H*B"ȗדr6A@b%~κdD*E+@繋ZT[TU4# aP9UNVa>Kg{'u#7=XP KevoٚYfn/reCKq_O:,qT>ADd^jcxMuKvDm:=]NF3yOS<9(`8-E^]~Nu9>?::YVf32}9OԈ# 8KKz;U7om5hNsm3r.poՏSȄ& bڢx}nSE#F\6O>=!=ybG(ˌNEV$.[Rq9J.tߤ6\:Y󞂲s Oe_>±LjOpgX!~r gj#vFSW֢8[{;B `t~䂁4 V:ry+P̈́== ɿ}`>#&$PñB6[^ Ê jO6 ;&#M+د-1rJdNF!mtke;*BuIcM2q34`i>?۸/e8]A )h"5t|yܒ.F\?ec[" n- I-MoM2rO:Sqoz|:d̅C3tedR: E=R+]e7 c܂="r7lVFd$J"|cupje*DCT*-BjH}H^(z"~ 1vG]#sY՟xco-=YٶNjG#$aAQ"_]wEh;vf]U0J,V'GW$0qC}IJ=BKC%`BV-G tRǫE<94o>+wIѣ^'sd :Ⱥ:+:V? z{ ( Z0K3x‚*GO]YAh)d*Bc^j<$%CxWE0V0MFO6[*FH U\Q@pRXm-N+uU :&du*ovC!΁  hRA/K] 8%w9/W= W¸gCW|9bHԽdnU "RQIGpm:dR/ic}!J ȵ?CiB==2+xU|Κ`GՂalϫ:W/.LktQl%/֩; ,)KS1 WĈX7g@貌'ٸ^zsqy|0Yc|*`ʊm*FV]a7F^mmzINP?,**/Q _9Ww2q?ꀿ-۟alH|Ƈ#0쀎\kWZ+Z ]h$ϯ>,~xcV` w>QQ$(K aү~= 4W\ѩanWM{$fÛ[vw~Ct |udxIwLR^uB# Xc6яS=m"jzXyҵ(P%W_E6y߿j)j0 IZFv]sQBSGUIk)s*l0l&ovONvRg XDY1^?)?'N}U64# ͐h}`x%CU7lNXAJUFby;Z=~($秔]#) u=#c><̲5H 4*G *ED9+gb˩DK(š/Ayq_Կ>jgV=qL~K덌x p֪zjh:G{ +Gyϑՠ4aUȞrboϚr {9UfV4ufdxS;q - OMq&N%m;i-FQ2~:+T&i=?3VoFqٌm#ZԈq[0^eq@o^n¡㬲F[_ zքq]PILcrY 1mLYʅm]6Jԙ 1 ݠ{߮Ix2QQ5;`zMzKoK~'mڬP|}E>l};;a4xj SU*uM5vUI4q|O_it ?ob-RE :E,0(-yDH#*.W2Du̚hV8 8QT=D{|c`fZnB7uYRA|2\SYf<,k xH=S6eo}W9'N,υReIml)g>9_Omٶ*T9Sb;Jh>4{ (^22tpM61v=ҩ)(t" 6?Zg=Tt=YUCS-d^3 vm{^'/.une;v^72^;. Æ+PkuZEzx@}2j"9ٴL0 KzREb޽{zR?J:P޹`q u:+/ѧ|dT LO\>/  Ҧ %Ph@Ѡ͊ޞMN*I<筨 $Qxc22P0{˨ lQqD?Z AQ%qv%CV](X^T頉%m`o4<:4gᖡz<zkW9 JRfv`4j7!+~v|uwQ{Jƃ5{SڭwC c3E=,9Ɇ&SN!Sma,n6;Uct.Ԉ|5jQ1ULd{nzNn&JG <|6,'N_z6L޾oodkx`6jugPt}zj:H|Ù~?kqP5KaHoT܎سGzb&߅ަ*},Bqa92QqC"Vځ*ta>L3v;aR=pqi*nJLU{<"٩cBi2C}DyPHBMI2q$=B"[J% 3LȖko.Y^7{ӣ޲ʂ^D".Zn&j(Kݢei2sٿ o(S6:JYKS(ʻؿ SM=AT$'0=^KԨJGr{gȩGNLz=u0tQl]H@3d]t2w)اIiߡ_rA>TT<*ܜ|iDDV!n%-aPmb|cĒ6V:!aٵ"n>(*qE0-f m^O 2 0Dx@Psϵ?nvZ]=n7_ouC1꺹PnQ᧫n4}GUg˜=<Gm,C];5g*LA5_[*c#%tPB t?qx"ڨAW=vӒ|!!5Q2#Y֧޺_L7OmR>Dmp*]*wkHzF@QR}cR:ԒU5Z]2N^yM1ʔ" ⨩^O<D6鐖m7"e]!J(o8/UkA=`?$:=[~{Y7K2/qIgu U*6"ډ?h< 4SK׳. S;2X}JAn$B5L49Z":-=n+a@{\PI@Fmz'%0 r5@&sm6*tֆQN{@jdZjGN2TZ(G|Gf-3g7%.]F?@ch&M; Ms#rMz^OͲjg%DK7X0MZ0a2@Xd't͏젖%e6s*m 4 H:)_nìP"SWǖƮ)ǻV}C{,99K(pX>幞-Ur(>|;6w䜕C%É?#ާT9 l]=u* NG׿(")oҧ!<J;LұHaRcMrž嚧 CԒwwΠQ$Y  !3k`K㯀yKvM ;;SvnbS.@l%¥:}vPQ]DA| :Ÿ)mhp!> %}`${Uus>yA5&%L MZLӷOw]׬j6>TpCv s̐psTԗXɟo[Lh =QMP ~T:1t3<> <%!l(WK"/sC&҆Пon?F20dvu~ΥL^e-I쇥qE`Tc8( 1߸f.b OPƝ#<R&9bzED>rl8HY".fso?T5=F[`~}~w٠4|KrhChQK3ӢֽcbM3]^u4:ZR k^1ESjV̀mU-p IM]oZΤw2{b}Dc70eɨDG$ ǩf2?j^9{[ug]ڍݷ7~>VyK7sG=|+3YS=Ю%[[ֶYz4cv}W$ z'!H;:]?߂kzcYAw}OM[E]:J\MfTKXyPK%hm9QH%&8"lof=LNx|DO?@'8'$Q&Nd6s7**<pǯ_|'AzNBO682HޟD'~~;ә<#F&,,Ă;;?/^am{Ҡ9QE=UwviIˇ.7FK+'W%ׇS>TbHg3;B2m;: % TT6;QOx?ʾģnQڷvU}K(D4DK(-bv6_ھ7^k(l?v1 2U]}T;}B8.t!N^YXqtFO5XVWqu&z)Z{?37 b[yhǹ1F7Mo'z|ej4[xm찚]ɂ(||gфTQ;K_A?OŚ~wR6D~, O uج&r*? [9zBS"{џpX!XU3DILØL2$3=:H}2/3;/&2k }1&؟pRIuejH4o'Z*u*OD8uN88X2;uس1%T|d'c8qI薞rX& ]@SwY\RFj|bb#o=AaV-з t7b{n|f鍶bPZP­"Zz {xU1 8LKц# J# D&)\ Zd8ZbE-͆8[#M$6v1KOx4?dvP ?|Ga)5(~񄧴3yq9(pV'tI3B=^O$XH LTXEfSY{mڧ|wd=Pô >f_Po#,p!t.B *-"(FNp>Qת&m{(Ŋqc0E"J4mu)^:hМJ3w" `(g"FMih) x%'u|ͲrZ)f9.-/eFT PMhʨN9xo !]n.LCnH,"n^* tvkϙ[UXf.:qMG<.O(mE4d9{u?*-+?POK:Yq-zrw\2iL7:}&>(KܝIޡ{B$)HVGwʖa:¹VwӞbm}_N[Do+'F 95ϜD`g ' jR Pni[AP@3`,&53:m9,Ĵ"jh3j 0:8rQUvG0HS鑡>đ8j}'}l 19(e$E #E}|_Wu&WӜ_8Sӭ q_g* |ONӸye"##'Ra९JÊ+"ԧ1T-T}14مA쌋L aUɁdZ9 9إwfM.j1wHbR"Xj!ujt:zI&y/ш,mL?XiE|ٔ䩭mZ;UCOBwL_Y; /3}[V[0#_@Z=xy i Gg} ~βa^L EA`vO#+KrфU ~؈ Z8sfO>:6D8]vS9ɑ(BF;Df `|[<ĩo6?L|T]\:&mM5H5XYTeZML:7[܏mԽUKNՕ^y\>hyaE"m:J,/s[vn.̸Eg5ND ܳ\249tśw~>4 .dc$af^z=*5ˣԉUTQ a㹇'ٶ[9bТ:BIz5i#kĮ7*OuR8J Ѽ2 i"V2[^&=4!2{,gW+/E6UM 1 Ge=31&fii>TkKUHkԹu *Y4Z4Uay^UЬe4Xaާ%g9LO_2M=`ZQsLQ-gO)\!5gdbO6Fm1:oGФ:T}quY>SA&5bX9>n&(M|3xoz.mz )?}}'u:dRњ}bׯ‘:(: G܋t&ڞ Npr{dF0Ou0On:Ќm\r3S_\(,@9ײ d n2Q@mR~AKA{PȬu+u KLsR9 +70a@7/$Ʊ1j2U=2scU#ORw4ag91M\4||7xXLQGc&3/{Wi59twD$^:} &x{9]wX dcK0xr4f"f5Amq ZIb5_ٹLfy-: hc:I۲À',A)M)5i,OתcS+'5!tљNchUxwKC:o^Lo#Flʵ'HsryI4 0b&PҊb;'BeNJ x"iTD <fNoz1_^SVoAL]c.xQB"S}4W r1U<8RW;ڷdefD%R7&鴛Ԩ&h5vs<@@Q!I[tRr70j%S~1΂yH"$'*F|s$!CCřݙVeJ0;*B"<]e~{9 ;͝ؽd:Q'PBG;Ԯ0?59C?T,J$79ٲOyr U[!"oYvQ44C ~H$סE_tI)gR&ɥ,tM*pN?! AGn=go%&2߰lhte!MƑ,YPSN%' S?i"LxjQpf*2E0R:GJorc޴1_=LȮ>ߗvU{W{"aXpKesjTOÌqkZ!POw91舳#*Laُ7y^ '#Od͒7fLƜ1ي[Ry2f5xra _]A)&عik$e[/XTIͱB$h aT@}%(հ٘-QLV}~Ik>bZ}zp\M4\j4<>$_sGOwF5Y>i2~ C@^""?=(⨲PU[}P^9?nKD W%.|i 5˹ISR RJVpӰѠVM+85!0p5_^aq "¶lOL$$$×ʪ-/vXGMy.PoÎ& ƶ}y]FCwJϵf~%Q?Y`[6W'@l={v 3"a/ϨkpZt kkϦ@kA8}a$&B@zC]35L_Xoqt4C(Up `..`Nއ7Yp6k1LYE5`Gm)}}}+:_CϜU檉ԹNЄV$#Wycn.!_r~uy4=,9 tf"Y#R2]5ٹRC6Plc\\yfl[;}֥\|U|^ ;N$Lo]l_#VL]+NT$UϷƍ37y 9OOKY|sX*}tݙ0!.Xd\_i=L(]}pV1%mZ_V J3=֖SCmj܊9%yF,ۨE&N|Gz٥J7tmk  LP~;n|d{j)˷2eGIDh &?w =Nfw=s<_mB|H͢|tέ&kYF),ϲQw295r7>5KR{(~[GȔ!΁D#RӬ Z8C2 Mg6wV/iD -T0„B3A׮#8wʔAkTeKUC5 @߲yQr An!z]?SYRUWpz7,FSc}Gکyg *Teƒ/T(0ES>(aÛ#`s˚Gf$>|q_CV\>nq= *P?F}î^8(VUqrC_;ºgMg(7(q ɌN?{рoLëO!rҏy(5b_ ?s1hfdOU|39X!Gč΍]tᅋTaD)֪RJjq/ֈ_7*?_T[66bE7-7&PϟxuSViL~/0)6~HQz2  Ut u6Hk ~:FA4҇!g; l'S>{5=0g3Dθbɳ7e*FG<8Q8_^!oklKZ/zg~De ҘW0;yT0(ZCdӏtzyוWS1r8tp;z:G!zPĭNd7_{#RU ]BA$W8/qaAi7=467DŽO4]^:՘#{ju'=8ꉜBfݷG6sZ:lݼrD;|{k(%U"V ұi-YSG jWm??b/l(ƈ_EyTyK[ֈ㒶l\xAFs🆋QgxOCII )œ"0d,H݇ :~a~ռ4Vv%;F̚wSʟaMх,u-,1pRR" S)<|̣fLX <#/10J4#VoSÓ$9~y fSΈVf>wI~ijȹ1 2&rE c2%M0j܅9 }sg>oI /][LDx#迶Wmm\oKs$prYP!N6jB*:d<_~+ב;PRCQ iP}?K?EZo߫\Vmсaw&SckŽ͜%k37q\/9aλ~ֽ>Sy.q H[[0q;fH@{/9a~ǝq.Q# (4eCF?(?kqG9N$m n7z[2Sa?)ZlTsr<}fl]9b:ﶿ0Sf}մ+3x+rj:Z`N*cy{垠}"_d u T*j,4$]Ģ bAOԪEz{M6d? iJH-jWdt~ Ay CmOg^ZPY&'<1we~MaҰȟryݷziag/.psylfI?K01܉cV&6k l<ɻD?%57PWhDFX:d^Gr)d hV&1BF~ b!_ҊJг3Ω 84_L[澙l 񘯭k5;"qAĴrS?F34kqnQk2T8i~ 8ͭ8䯌l%(p'x4+7?2;:KyU8^Wc?wQc2רi/ɬ:Qz_ޏu5d!1m+ʥ&(Ō5_wH4I'&k3.3(纅RV Y?sG p 8SuȨyi(% ʧ*!?Ts3pWI^#zJ\"iИi3Xnb#Y(H0 Z(i>*NT6]ؗO-I)O9ϯ:2!6*tșe Rl>lIA(R"fwi)Iz-uEC@(3^U~X1Z+f>Ho65rkժaD{ݭL v"mg.keiC=8ذxi}N?>/ђŒbZ%X" !b`(2jTJ[tZ]mpO[tO"%??W'Ljc)։#]kR8r!fuz73ڢ" K1`{rd\u,6Y 1@N̿Jb};BD.j=fwr$ǚ ߌ6cQRP\>juS53gN 9/AѾϸxdW<>\{+NUEA&ϳOXngg&ܸtߡsa8P>2@Ob,ع5 .bB r: s|OόT6&cQU-v(/H h* >K&V18ڱ2ƻtaFl(Ei86_CX-0٧kX*NH=OE{fb˯ul,yEE|bp-/?=}g>5̀|q&P?úI*a8^hk}z(sߚlK,|!犤*+6]%f5DC ִ.\It+͟ aƣŮl5N=VŎb[K e/X7,DgEIOcPÇ!6'Gڠ3:^7lk~Jn)b g٬q>WP%J'RnyVJUU5yo6t>?̧CBI.?rB/:Ka3wl($b|O<rݱpx_ǃ֓`X`ι^!: .y%p{Oo6iO%uԩ$in&1T{9,I_muCs#4(+&{.֧3*L GA( 9nC~Ȳi_֧XDĉ[',%.DQ*EӞFv} 8s1YU/.h4b]XA ԱI\#-7@N5)-np늉=-Lɭm+1k?/[m7^g-CHŗ~a C8#*)UJWy!K1<\B gš[)ΈS@> u4ʕ434L[dFzmR͇EܞPc&?1wA  /O5 IީN-oFڵZFiW樞e7 !{Ҷ)NYd!-v?ͮ6>-v^K`~0eIW~LZ6焗uօK}>0E`ds7?k(wS H[%D0 vՅeH26sy RFKSe!{(-YE[ " QBEgvAwS4v5I]zČ~w)NW'W'/#| ,?1D }X1  KC1*@aނyS:uV* Bi>%B:d@u&K|X ]&ʓJ6{o-?|M>C.l?kn&q9ŽߛO_咫VioL44C3bڿ$1xVw$a<7,hKiHkœZ栮x.Qg}t?yr{lzGȷF> D?_'h}&k_ij+ tΌFEσ}5nKHf/oFe0psz+6A&>1\^o0sz~\=$v30DGo+4úf1S;mFljºrc1fFyW /|}cOjLXwo|2f1MЌD?Ǫ%/-Sv>@J6qM'1>(9(h N eW}h{8 zc si}ZXR)lᵃ\]XkO3e,P#$%DucLⓊz Q,,#^xKAW+][E kf(.7M"XV*aS,K,7ZF+ہ/{\T:lT'Ra'tmDٜ,:mKUBmLC0'".&Tb4<xvSƽ=I%+Tn4M>0_tI9C%f'x0;/pP3Jy|A4DN<sjo}9.Ts !_Ɵ>|¶fEuڬxՍ=g8r֥W^PhdYXPA/ڌa?ȳi:q4?q[m7 ^aEB9tnԇXq+w8(LvQ<ǔnsMG5ɣ룐Oky$t -;J鷟+f10X>< "6}WZy-KwQ\95.j.D -/E'4EBtރ|y+{! Y+׽%89_ш^ aV1k,v4|Tz"?I?>l>$ He`01-h AEh\WB VCכ‚+y*efKl81H;V *}DRjN#RRSJ{bmGsM]^' ZG6NjstJ - 3jsZ+A_ X ˞}aE1:SQF7 1ؽ*?:.$L1sҤ/KJQMGH=@)RE0W>4KSTQ獿0vd@xzu9yBmdqԚd {GP *dtX͋|}b0ُl[Ƙ@wJ:=eУ\ 1 1l`f8S"L,s^[JbsȻ%qB" @>wq5[@=|CQ7KbKȇ*nhm@H+1w+2`yL1eJ?J\:?m~agpA*񊝱I!܅Ϟkd x?@+1"o޼ڪm[iS+*UD0j s50;>"=ڮ ʑi3yA[ׇ}8_  l٣lsH(/E@![Ea2+#25?p̐c4= 9%xN.Hl59JoZϘBÖtK0AɤFv`]d4SWӏ-](hklf[W^aRਿU-W PL Y|sbo)'jg,;J. -=M&&>?t3"=!0sJ^~ČJG"$l.LY>楡=5\{5G UHp$uAg{%7E vK-jɳ#>r1O17$8 14ڂ 18Ȫ-JoӍ]%215ҡK`:NVz-l kXú9X[S0 Dj[f1pߙ R8bus; .K10Rt|M#R5P(Џ)E|W}V9Ωف氞>t;Ss[ ? 8(ɟ: E}>hb F zǺ#o虖&kߗYYQM %HѮ#Dݡ=Uucܨ: Aω.z 3]٧@= Վ9 :i gZ[;/tRL5V[V,j !3*zwbBmIfG_H 5{gbA{Hr,niK4AK4'dDxkpfiwƙFJv`GO١K&G\7Ҳ E2u5Jˆ. 6THV3/!'XˇB?p?9 nhb?EB':T< xb9mJ3)-gl&0^,#m A/"!/Խ1Jkx7k >x5l>i?+OhˆD*TMf ؤڝjhSsSho3c{ =6YNݼ1쭟a$BivxV=VbzA M2sP((&aZJJFmiS;J!>R*@čxB$֍(Y7?ϯT$"?~qiܥfѥ3fƄkjp)DEWk'[Ӳpm4!S^QĶU;J`6~UyЖ=5Dp*Ӣ4Q R\T f^YvTag'yZF$8)/j]zuq?]}mS})M_se2k9>f-vF%̥5fWl] $bT?_D3@zj WغOxo2w)(Eǹ?'|lfL4 9Pt ~;}&þ;N/I{h¥s#TD].*zln3nzsv |Hd5Xf=4D阶OMݰzX2ܰ#}#kQB4jH}t=^̰7 h$^v(W".ƬGxaTTs,(W۪Nig$-#Q9)ۏ []ujskwi a*M%+h9>撺#5ţ$@|{d{h[EL--w(;o>>/2nDd::[`WITR+'lrKb<.|Q֮HTCN%L4)U4~Poտ9~+׭i P,{[{m28uP`rC{,/G)\"S>Z 5.D &O$kAR 3-K B\SF4/9{co_{Qvw5fӁ$BR[ vT\c3|D<g?>7*PQZe A+m89 ^[l)9b̓C]Co7s㕋i}_@tI2`b!l8z֕FtJԓqJGU, "_efxM5ÞY@0PkjIL"WPaafCKLQhs 6O`=`gDn0̦?Ǜ.*K*>°`tp^9`y}b) 2.kg bgPMUɓb QϮ{T=IN]Kga[v.?>jt TyKX?3lb\:V̰)deFQ4P| -7u^5LĔ}gg!xgy*ܝhtL5:PJbt9&)qNߪ4PHJRD۸qSͻg:ѿޠqU)~+tu~Z$qadep>6Vl=Fְ ]΢qUNc=1TȆ"#Evbuc٧B:5#mhL}r3LU |{/05.<[} w~I>"|:f-|T+mt:k*S:aXfM^ZFC V˪ cb>LH8B%kBxъգCq(^L 1Un3ӹlCi6z-7zod#J(a{p  Я|!.PaӟLbf7 (b#Seq#7UfcE,[l;5ZHf'%nKbBY0^z]#+}p/ *5* ȴ}v{)F/vlt%ӌ'DEOL'A[$9\DCbLVeCU>9s\r.xy. o#=rS`+F:0 uC{3~K9鐐؁rjt?쓳E %B{!x&Ekf#i"bv &+ȢH-Vą%eGiH:]_Z^C?8u~|[i&F g6)CS JZc.k9p'mA')yEbNB|tΖoFߡF8TqgDGNku#ru/ءxkϷ)[u~M♍glelb2Zl ~c|KG;'o kRĶL8龖8OM?"RӉ{oˢ|n߄u[t6W9TWs!RlV" j[ߚBVukk&c4Qz9œrLr2zDv|#9M9UF5>+[FatMh!6J c !'ؒBM/Ziª+ p~fy)}CuS޴ y=kכgs/4oefrő6 Tڴļb)>:\Su'GӗW˼{GtrۤQ:-{ʘFDXtWm^"6gP~ycGfly69vY'3ǏzڝdP{D|gҷ85-fr2OEPS ~u0cO=M+YWzP-r2.X"<(zk]ttE~o9svwgFPeGO7h8}Ta2vm 31@WV~ERs4k֝;5fU[L dfw9jY0O6+:ɃWMuFI)~sstwG 2S k/>qs#Cʦdc`VٓV a8o.b7&LnJ빺vT0EIC6gSJhќZճKVKuuR}⭘\2H.ܐϱwne牻Mg65XU `XkMgҾfwsc<89"_Oڥ#m,,tLöb oӭIS=n9Jpu8:,#㾧.9- &^ ]`5ކ3JS۪K:{j'x80aBFlӌD!o2ob3yUYSbjZDž^ηXI˨sjE8\GNjX]FEH(s1;x6z-fό\oMf*X8n=~_yKLJTSD7xnȭ{O|11~fvC|9/Pq=>h1GdϊE=N;phME`(w`%.MƆH/*$zm鹫mc[ޫW o+VS(GTܥF쟀u|z8ӽx"bE3W2$4& ^gHF֍hangӯ],=F%+scEݝD&J44C z߳,h TL7vRjCa΃mp2sZCi!= dA9P [wذnMN+5Qds(Q&#t2V9ل# "1Ev؅W8VT qA/3vV< ӕ )(t!j ׭ ;5z&%(UMYo'9sK պQ8Wh<@E\7v^[W]σD_n,6/UM~+'SqiHz%)%[I@cx%X*ε"}5zPcxmk,KpL#kVј&'67)2 ܹȮ fy֣N8|X$៨`ldy>Өc=NO4wZ=9tx'xՄtA} fyW /.N8PmD/s>i}_Q̉5F5d;DESXѕ9M7SɓB%u kӌT!1{Q^6~P|,/e=Kn"?uks{9U2[Xxl̕nAJ`*mfa 9eTH:l8Rm#ԉ69nK2oipǬNƞ)em]Gp:RTK5B~MR[N.ꭘ/Gx:s窌]gX/5P/W6(cN6ar̦M\y'mwptn-3ٗ,&׼Bo <]U^ yH܏0驲ǜб&>-46\c{ܘ rg#rЇV꿇ox^]!Z ߅PEQ*ՈBQ]A~`LvF wq67tG=0z?%a¤ΔZ>璐ULr}p S#RO)]t:f-M^ޮ(GP$x}'r>Ӕ0يx#?:e?>Ao۷7!,tQ(eU>?ruK88Lx|ax)%ya0b~)=ߏh>gbo ~4T;6ҍ1ZN;e+Y2©!RssQ8!UZwcC,eO6dH(^!ft'"`-pN:7B#&N H#\!A_b*98mEyTeDB[W_ 'R֮7t?="W)DL Q.ʺ%c3_Xs꺱 Ta͡h"}4IvS(RhѪfD(MjA0'z:Bǻ[gʔ!0_CC3\ \Ū $t$x{c8WƒA>>9oLU)Z=]9.?mEv;gD|QzY"oG3{ a'w|~zv8;ē\)aPjn8+֨%wm=6*GNu) [Sn@ueU'zƋFL)=Py|}vUwFuh(sLkâ3щ 5F.+uϔj-}cwKۼCdvx /wh::LE S*Y"1ҭ3:Lx޴}OxǵEiWq(ivN#A' : JP}"粈$/Nm^WY-4i;+u,h?BM>gc4IMu$ҋQ0L ))(E(/糚~PH I^ ] F#=κ%aR:HJFn`>4JG 7_/L)i<>nS WWEp̅& PkY MËX<&O8 ij4:j#PG*|W6KK۟ι0=cOnɄ\ yvA檥ɏft*xO/[C!6`a Pb6#^vI uz6x o;=4aNa_Q}Ο ^ҞtC9Cc dxT㶵#53: 2H ?f wɓ`K7GmfLz{}C_3ve/0팻X`s7xΝ+4Gxl24:䘪K3 ِ=WWNCey'3N~2T|}axb?)/?'ג0B]|7 dza{]5Nnn`ƥaCaaawF,i^ FܖPP&dh#_>5K7?A^Cb>"yDN>ǭfG_L5b,Vɑzd?NK  ?hx!O$xg7zszL/bա)׏si%̉pSB c, !}4nucpfg/{2(cN}C͝}|9uEz//kߌ\QpUs!c:u 9 0fhm\FmnBCm2Xo &C'&-N3׋<歕4pw/S3/9(z|XxZ1 m1?9}i=L/pX 1lO#T^6kQٚL/; 0әuj& bE̅|)uh9/ g]A^>{%.^:`qٯckfհhӃ 66FNC( gNxNN:%MXMi -}1둶: ΜfIuO%;n*rwpQiXΦ]W6vV嘓s{oD[ýUlwfΊ5NǮ\ܲy~Afbci-hvnhfZX˽sެ~U~wKP noPl2qSdv@Or,o8FH(]1jTd'8g~=)U{GWoҳ՝HL#1I4 R߅QYCPRPPTD%U1AQUQ TJU%RDDQQPDD3QSU S4D-0@@U#T5SUTҋRUaq.lA5};{R0!&J $p@PP J9:/44ƴ!aMӱFuйn\; {۬[b[f6m ^fTmhmI58E 2 i^̄m :Y`AhU^8h٦:DZAe 3bZFȱHSNƠ /a+W\WF$ fwtGGm'~ZFe0Fo5;)Eo&u7RNj*U9lB-Okk*.˳s% 2 ;S9n\lTl=U1R @pV65p7ɴh*癄 P6wZB죧)E5Kï̻Tz\#Wi:CG)it3VoWB5;n§^mzK:iQuRu6f%^,?=4j4Qug}vecZ;R<4m9bV.W6YJ2fŢvZ~˲vN<0_[jPSdQvMnnH/^;wyQZҴτ} *9A662ֽrHޏeN࣡ËY6Z\'(Q{sR+*bjCSɐ <(ң;Z$]ɒ2z +jkEetp᪈DURJZ:sp=kEwS6=LmҢV{S+%бwV.kr "eOjuvh*8tXWc㮎x+ڮG=u!{nϽ~=ǯ⣩Qzדמg9k׾o?ד*{\iWR5W[翇YzǜOY|xz=Q9םk߯}U0/^tyyx|k{\[=tOǺ}mꯝf=Ѿ9=s*qg1wz׮z]o13>sξ36sz5 |{;3ǾZߺ+=ybJ{]}i~^{=_\#Xf5Sys{3מufzosǨ c___ Kx^W{>s"|_߿wc5駙/~<]ꫬD/^|Dc_<ŽunGY^{ڍCΫ}xo=r:޾+u|8Ǯz3p_CO [P:?O]==; i]B͑%]2ExT& 3c0m5Ud{A[8t3cl9wERU>맜ENc ~-jT&CF644Յ EK94**57?sj]wEST<&|GuG̽hkurk#F3 UP^:2jkya$fkv wTҲ|rW/ƙQooh5 qG2 [! 1C=>^MA$8[Y@ -HCߛ>̜SѾ?<PPIktu21b#C\6_TAT] ԟ\;`X2f4Ud=0s1b\'}̢   T* L;=T iZB?fTuTF8c(Bs 4,8D$M1Q;&ۉ)P#gGϻt"e|YÌ.MHsPr^0I%nj]<=WcbM2TN-ךRqYs+ӓK=IK!1zT}#,~+OEݟ( \ȋ_M\f픺hW X?-܎U" VRz}zF_a7xw2X-H⺶V`q#^>J8RO؋BgfV JK@FQ Dq,<@i ާ!!_o4fat=T*_'?5/}4h5݉k&=XiCC܊(Q 0D{iR ( 5ˆ&__>E:uiPO{7|&BT(]GYݜ*&HS?4亇@;;{WD08!M+OB8MKХe7f^¶Qhj#Ef-UUQ.YǦ;;}Zf:}\Xu}r%#NVcf:{m%dD;RUv9SL-Zk>ʓХwS]>?*G]YGFج~x[}s{7hȧ[-(N('1b-/Vj!k, \ʊ4t7`Cq|\Dî|b+Pi̕yώ5zi7YT6F=~hmX+1Mv?} vr•@Bذ{ ?֛D!җڋ,l&tNTo2}kܲ;0x~h[gKy3&<3Pz=pB(w*vzSExV ^ T\)bJ/2Y^~۾ybҗ>=MΆ/uIJq^(Ǟ~Cm5>^M>nlOrb$DB@'iO`!).jq~h pO Nߟ?G]{{;ahm*ݎѝDeuM^}Gc f7%XhXX/x5vY{&žwsL&B!)э6g9ae>a!ONnT74NkCڐ2w|f>G/7&ʛ0-7uzSPC$Qִ]<`E&JR )8S)> vvgÈuuuDW;ĕ{xw/I SKW0N 1YV̳hUf2q.J+ȟZuDYzޣ)AiL܌dS'() zbuNz)!g;-C&1*(|V1a܍ `ָ\WXbZW ˦31IJw};Y)iȕc#1jWz7;Hd 0!!2QM3QDUA$TUQEA-0QA%TUTASA3S1RSDR4ME AKE43$U%EQE%DKA%0AS5E1T4@@3DL$MDIT$Q 55I@U210Q D PS3DI PUK3EEDED@SMTR"@%R4@ PP"@ЃHD#H%  E 42TM QIM-(-AA4CE44TH!w~/r6 6VB2 Ph*v'^ޔU͹c:_5i7䭓 \ tk`}[cЃ2iq MFkg8"5q0n[rUR}U9k[WDMUPyv<0nQ Xژ]W'IRAe% l8ԏu:Go-6}prG kzcREՖOm,BU"SIHo(X{^EŠ-v?؉bNHccaƬKG*Q<ۄ2:x?9%czo[S}"d`Dpvs֧9g/»ijl[zQ@gcϢ(ET'Jr[BBڅ,w_c}2nnQ̝([K t2,u|Q9 tk@qBg7{z{KƄA=kŐ[mMIzzb922*@)6TvR/ Ezn{y--uM٩bhZA'3:]57?l76zB3KX\BJ"% ?]%$8.y&N8gr6v\Fk z3UM4I>yAMC="϶ou8i{dCq/aPNEgWPr$!_ҵ">볽~RxGM˜_nqjcT; #`vfT7|Y# l5r ^xߞ?9Y_}ʌ ICu2t{=)!*UֳX^5>Zdlu_4ŲYo-?ݛcZ I-26r}~v#7|b3!nlwtTJl}p'gj>ǟMM ꞒӭLv η9o8CR?[(gw2IalkX|s9aciMY?˙c49 .rfyLFBm)yQ!Y?* o$:TxSCV>iِKϘ(B!х mcP=?Qo3j!| c6 Ǽ0IDIw?E>(nUlΞn7YǼuJj {(;0xpM"Goz:&A1_AmVaA |{HT9Oq쎉 kϲ7 s"# 4Z?k?mb\'QBLiyNbyeRGΠo)?ƍ"a{ȃrRov7ApR}6]:?yc4{׎Ç =3=d>kUB?b.%?1\![Zυw8#WXIN8d {]5ht|ڢw'/T4x+b $M/U[X6 ڔG,,vl=Eq}== 5u}rI@C IC;DzI /"CA  ]N(*t шIC5PumG9%|$=z|.7'dOL;rI>L'r ADY-f5qLv8ϙs;bETqB'뇲Ng? 'Y&&8}*qgT9Q#NeER&XV\+E"]+4}Лl-UK> :E`훦UoG*YhUziB Qھ)ۇ "~;pW w#5ޫgTRz#!tcX6b2a U؟)0T~ {p 6JVP$y)-gg@(9m_΄ה5pJ: [ 鷞N&C8ΘvMwZ]On'HA)JgìOPZlUK͌=IN­iL(+?=CǖZhp dz/MUqJ{ ɩ$A7 &=zaw&-Ɣe{& Sq H%~2D5Ȥ'DBǢҤ%s)ݣ~WF Z~X/=HRQJ-7Sء (\X$^#C jB WCڅʳ|QfAxT"Os""uIj6hw ?BUYE" "~1 VH>x'OFNUh:u x%** \* \z(zҷ M0mOuUaեo;kYi. Wn? MLkI!UQE@`R'X?*N 'S/C,t:I7V\?35liR =.W0asd]_@j=G'rWTbiA K)gOĪȉ'֜riz(g4~ gSL,"V2ñ2-G;NrDe=uҽ9\%$ RvLj~h(-kXuܿeha\t!{v:쪕|VI-Wdx%!?jr_<>ᦾınENiobe5RT=;R(܄h¹{$pGTZ!"XteVCd!ƜsWDGLDzb T^uҳ(R2 u+]ketP9jfyv[țx2U#YmdHȲhzP6?[k [.*[VXUs nr@?[:R 3=Gc C( X;~UoKnӱg1mP]olI>EJ g!?]y D4(]w:7bQBR" vzgZW ~}9u#o|YkUCqE>fO8z/.˃-u#_YfFw\NȯuMk Wy+|1p~ Bk~Y9D>g)}NůK-AF**-֧1m0pX9Em5"L*CDf(4aFԅ2H QɥT)MW2XEA(ߦ5u.Onkwc.]ʃ(*J@*FTgdtqBk^ Zs5/=[Tɴ֍jiK=EƑ%>5sU-CpD!ǩ;(PKK[fFX?כ[g/ڍb :kP7cUmEF cgC'GCsGəOjUNc( Ρo}%%ΜQH ÐH3"gxW笳x>&#[֊~-9 H&ERt㐆؅Wb.S5Z1LPPb56fwPafN~N22psssv]Ub9V#S]QckɭQ8yRn1Lo Hg)1BJx^{z7C&qizמxqPseW'v4 6ќ+VT۾(,T#Y8Y08tb*58UXuQn]a峒USL^p'0E>gP*oZZ&U5{NLj'JA wʥ&7Sf21KUOql%y{N5SNX|8{e858soÖkCx2,{pIuiG2I(VOINj]MI)[&#Yͽa࠘ɤI >s=ɐ-.;쨻 RhQ>'2KEƏIs O}F<%%Іĥ:6;!r1)Ngݡ?BhPggԈu(? B G,̥,0e;PڒhGT4^?E^ظcR18|KˉhU큷f8~^O'*?%jn=R?#neRbB[e;$9H7$PnD~g ?ݹ?VFKOtE˗0s"=pMA_ A+:>6qmv>m\ J( ͙ "@WĠÊ`<%KCd'HNDiV}5 )'z!Ǔёٝ^\1Ze'K,X+:m'} z:ԗn޳9ڗ=׷mSwb^ ܽ)}R; W(_CS!vQAF|CR(ԧď r#Pp$I2$'~1WyOͤ?_?>:D̻x=5hP=a (`G**%ө6 cn?=]rXilSpsW[ -Tq>ZQ]ZuYQ;Gl㢾= qҟ8'AfˠN( 7֞vcH5ԝȶad.CLDݰq,D8;ބ"jFnTY9R]w@bVxOMoҡ6,ѭ/og{`_%c;X@uh%j2`\o.2s[1(г<+]ˬ?+Cs]r[ZJXuqZjPӼXѷB²ӚR= ILZ^ .Sc-(e6ǀӘE2iM.!3Dq8g8Ġ..*䄬{4$jd7#Zʑ b`ޠ6 c*(P%qI*ZZ1q[>Jq`VDۖTZMT @8BM sQI 3uQI *B^q?>SEzGmusʿOތ6UegFjvleX|lCDa>9fǎkHצ*!+9l`7'<\eKѣi!mX~CI.zv\Ks5.DLtw?;IyAI.':4(̟|sԊ` Bc\!mU2Y$lM {) f"aHT,+QFi4(94f D*J'ff)֪)̶@8f=ʝ52S 2qd ]S25W1 =w14̅YO) D'A˿*OOv,C>5ݒV  3oU $ B|z9T( jHR0*7(t0:BPk֤1\?3jHg;*nёwq(љQxT-^;x8%u- (ɟrSH>fg{8牚@Q:)T/"zKۅԧ{wr'S"qZo%> hWaTmJ _7*hb+c,+:ʏ5+r&@y?4! q(ǐt_n /|x/?>hyry !<<:y ܟ? nGQҞl>]IO hy |o`hj.Lie,/q рe: *QPC& ~4 >g‰{x|3ה2+ҒZ^lKuˎ54 H+ݐ}4XEӮs^$u0B:eƣ+RghA¥JH]q0͒ y)br 3N1$dMNY5"]:nͮsbO>$efWPA8f{ ^}cUW (p:g"QHsµԍ ] JlzqS^:6JgΉ=l'q*X&oߏ bM}}Ĥl𠴆;!_DhF?,_# '>wpQpsR.řo^ߺ9K}w ADT,+YQpnVh?ǽ=Nq@uAW"|T"^?Mykͭd,6̽4rKH_G`gCd1Na}!∂2H F=U a!:JVdjAPP߀oNHe)F DM jC/5D7yƴdB f\$§^ ipv4"gqZ"0g***X6cs6S\\k`' '=Ak?}/4'҇t0!PK E? g *=z3*b&P= f0^PJU*Az{6옜1ckƟKy;QW`>Bg r~X-jlkVo%b >[')Rb}u~7 YbrCG4b0}Tc1¯^40YZ龬jP?HJ,A MVDz oN#*s8>̝Fi@DCe!CQ:'Q4ORaE]>wz==ܩޖ*'>jgRTCD@Aw--W_eVi+'K8"_{eV{Ҩy(JBUDvms"(]cªLJVB[é?^ e3Pey}.r.͡~lyz.8q8inFwjFc:u]]F\wj̎=,|Cn;e& =^)ln4& r҈`՞)#VMgoQҢz/_(-[i\.r%0}EGD6__$lTQ,Q8g!~t ShJV'fjE`ʩ_k'x4~v\=V7`$s=fJ(>5\E+lImO^(Q.ETfnXؕ઩ƥ&պ/싒qJa=6!j8`r=t9[G (BJh?t"L" lhE"BSD<;,+*}g,Vu(l}IC\킏'=+ 1sAr2q &lOSv)-[t¢ɠ~`lMl!JYxiS:Gs C26"i pa(d!1a+/!lbVP&:=3'giW(7]o3uyҽ.rҳ6[N9GM 'Ѹ^:a8T5*o7 ¼hd)_.O[>>ϟ.DB"}5X_߾wNseK/]yV6aXيM(PxCK[j8b͛usލmkZѝCfw(M]55ύUY#L |f<1\r'iKR{&>2pä~]u p:C#nmf-he8@Uֆ?^~ IUK+(3ĬJJK>U?b#QRn u}0~N1v(ha=ZL.]q?=j26r'iMC@ʅLc8W4APQAU(f™]]oއN9akcفz<um;DR֤[y޶tu~dM N6*nQwpYPMkr*l+P> ¦, nM{ ɨP)Ybg=tu+N3ݝ8r{`T +Zg7IjU4TV%AI.g*>g7/g-gOk8ׄ3m)D`tA5q9fRDݟ:h&/H IU6sM,īN/R&z큛yQzK]20m+nP sRxzC>$@Qafbߝ\(ݓzBitI6;C1 y0?Җ?g-9#d;ܘwN.'jo.r Gd$Z v,;[,,I'L>5V EPjwdN^u?M Tu2r%X?Y;g *<r*g$*qR雨 iT1d+r.5kdMS.)AΧ*k>4F%I\Yx--]W3&&>P΁vRmҰL=V,A+@3gk]ֹa,Yjm~0UUCQ*rлsV*$ɨ]/1ADNW'2%X(ER'g ׽KÆɈnD ߦՆJr8 lL3'u@M65\A~"mH+z[A~u@SpjSCLTMSrP*n6b]].*VlD3\VQÖmX )Ճo՟6:lRW烹W"I3SZj59"g Ol_/ǔѹz'AxqN|²=(鿹z|7/3}1\w^@wwsۿx:x|!}: ĘQ9DPN䂬r3M>7[~ 6 wL*ێNpn.N}9Sw}ˆjQ]"@b&.~ ~qsTEJ{P֟.Zh&bgzGyL/ve,#u/t!le%[:wVV_(Mo{'h 'n/Lq bNJbU>Ȱ#k]pk3Y9TB+7}e#웡)eҕ0e^/n/;֏|*XOnOP*{Iۊd\y_BJ,U1?@G*4"IL]Ç\ne4앾r:To7L[yr?Nc>8/|җ|)-Os=kۛMHö< C(b+/%>s-U\=BiMdqt!Ag,#yn"Oɫi[g69,T@ k=|MB#Ӌbm},2;_AatO;C1M/B킥` TܷJ'54eL}_3ki!(.E/ގΨ/HSk\*=isx-9գ,^z}r}b6,674z=yI|{Gjק"&IeAIADYUJ)'~nD!IkZF*6|zMqCTCetlѷcx)k\΋o}ې4:5vqGsfjooIp)G[?EUɦ{=G{T%c &1 cIj{귢,I j.FH5 8j{\-4&UgNUj@( A]TET~΄P̷] ~\63\'WwJ:bRگ&0 7Վ:V"U@n[]%Ls_S=ՐT^]ly@|B(KgۭbK7#מnTغc+jꇿS/k2{27?ntr/9,xK$E36~|hG8s HЧg\JTrwL)SONWXs0=p{ ]\ WsEŴ,v'}b"0.N;U m}4ITT,1w$=xi%Y'X}#-I'uDSIICM̎!]a7b% !&Fj2'cHOhh9pTS0<`(L\X.]vc2c϶3\K! ѭ9BfM:%N9cywR&®9S- >=[C ̒ǘg~Rؗ,e(4y@ҁ<㾹!ԏ.Ʉ)Gr7Qό/Co<{);Xq3կrpAaiPZd53-|nι|~maJhfy eyѼK| 3C ck4^-#+1w$uhj*H7D8.՘Vo0MнRq_E^H Ȋ} ;ǖ-ԉkk#zX` .{kiA>u3jr! 6aN dBp&#[]0%mo' 7בMCQ(2TzɆr}][ uV`"DdluYHf;tx WNAݐpxU.mI띦05zPPt s35~pL>>y[z&ۤATN_Lov&|;'4\9uiɓu a ;~!n3VhQRJ:'+EOO/pP۳+.μ뛴] 0t&8aZ Ja_=ư{ B@2B$P1CF=>C}l9:  YbL-mpow%āK@T v0ʡ&:B^!\b$obރR{d1lHuw&&L\2o= Sđ0^= n~z$4C)&ۀXډLAT0HD-{[dlqod'w0ʇtB}Sc4*j)(Cd7mqĉ#pPęrEk:W[L,}xMLLh1R dAэ>xgB@"{/Ѵ!ViPr3R(iٿfNd(-TUndk#od+,TE3F679O_gU=F8|&PR)mH[0*l(BcT-DrR/ WiTTPESkqqԝڗϳB%uoA3 d+Xa"c;|/cBOM4}BQ\.=Ӧଏ B|h$"e!OwݓR i CI @i;pH b aN&UTbq( !ZPU`](1'pgyq_ΊdP݀Ogv B`6%ol|]#œń\$'| *BE BIyfCy >N I@OY{=Q*֡`8=PE?eM1HS>g![io(J~wFUݟ7Ts~۝rݧnSY $hk@.&ĈVfx<^;73:t9j΍{H:z8]vf %á҃&}"#qXbsDD%P!Qb ( *(=b}LNRd.Yg^RQx&{Ӿm%BAD@3~~~Z0D _g{~oY=r)Vt;8t<1Ok:OU E0L6$.ɆZ9fB*:ӱ=7 LڻμP#p4%O7RENBkQDT,Ѿg<tw5}cFD8 :b^F!Ìi8Ɛb33z5r|ǍHT>fF Z/#$L_;yʧi|!헩#cfO:{E>bUG[RA†`:r_daAmRmpEԸI8T m CeJ ,T *64XfB|Axg3czX:hWL"z. T&[ #CS>*Oڴ2QaYW[?̢?~[Ӎ*X,~*tͯyzL5̗d B0$Cz]q΀v!wos_Hp즨# Bhb2IQ()B9%"kͲ|˱m7*)zv 1Nd5]nf k:l"tJ8sf}8#Nk(_*+CLd:&zW&rtd?q!x?+ba?&3 P ACEP DDPDQW:TZsCO^ `&D(>]}}OΆҴ8O%X{uiF|m]!y֨#*/ك:bʂ@TOLCtOD f@ /;p`XqelZ]Zg ?QTkxV;N˗{T1@es74ʀ5fT/c_ !Y'qPJ%jrKY9,UM'"@N0'/Ή_a?0#-$xJd T%+&Q !HN|RxDn>_`={qQY}=>S-I{m$gWQJK//47Ur{ AʀR՞<1y؛zjcR<.÷'TԒ ,ŠtGGȫꜫ(F_khhמߕ5^N*>h04DE^`Jm (x fG;9 UiJo35Tĭ9q]Wr}JU~:[mz'JJW-7F"! Z.wuԳJU~@U 4q{t# bU)ECdkf]t()p"A*f~ lW_ C  hkΣiQjY%XBnUVPVkI:TlG^55SXO bܥaNT6gr}^99Ӿ$D}%Ȫ`n&UνTsq%uhVC1u3KGyl$Κ(*C$2PU@{fН,1cN $X~L!!3Ya:ÆlMskUފq'A&NOR/zW(xy3 IdnPAYUOOq^9 'E5Wh(_VQBߣi>ӛ+eJRk2{rt9""'-x$P֪}Lt.S!n 8цtW4NLEp0%^uOD$l%JU BаJmjי׿o(ѽ4YfAYxvc Ui*.M v d"O;4t`8 .J0U]ҍkb'I'oj >N(H'NKѓ@4GGl18ېz< EVF?#aՕFon?[!Ɯ_ vhכ,wnm3BB ϡ**"Y 8޻q3V6x,jƶRs~uz2M13_Z` S3JDFxNQSTU4PNؾNn2.@!/.(&yß|//T)TTDR-"FdQC# VѶվhc7, y⋰b8w8rma`*=915C_ S% 細[BW܅795ʍ`J=<*EҷT]nh$8ȯ; o8 3?!5ҙ!#k RXk/(C҃PaRD akUKEPY)B R`Xx{Cܻ*~}??oDOW޿esuitWZ۬6[?Lpu~տ}Ob;& TbJDǁ-2[:Jtߢhgm\n oWKU{Zz̀Ȩ{ydʘ?%' !/>|B#Ji T / ûӶ]9>wUy헌 ~t3i0lz^V5RZ)>2l'5nntlw'.:SīճʬGP7񱜓T2 M>2 ozQ9Aod}4Yݺ۰vP1ĨQ3X޷UΡcJqo7 nwEjk8wNh;wNlj}^~U<:߳q/y' ݧMP[:g9EMdD3߾m:𧢡xwAf0\_su4z| T FA$ ڍ~r~?f1*DN3?t#Ɵ)xaNݍK6SѯT{C²>~=zտ_ѽK$6lY:|kb/ST#0NhNF[wj,hƹUxI:' T. ^}[=^F;fԻι.ʌU#=QV bug{ˣ=Hp]5 h՛|bHBS64ixX3k-&ntYLh_vwOo#@fA{gtE-T%G;+^dBw߹!>((#(p@9QJٔ|8&1`O 8DMB&&! Τ6otw meAw2TbJ-!Vf. 4f}Q$",EۅOЬE^wh@w8Lk}9߾as `&ĺcu[5OҤuXڀ[.MJHv03_GC8s` 6Mtڃ1*n7+n iS>1MG]hјj?Ś97DSѝxn|1JmT)"~_/ӳ}iïwEơ9t.+)9֎NoN&:"MiUpP9D ^?{(N(^ OPJ#}Nzm]4j=IM!ϟE1tt_to|%TmϿsjt ]7%L@΢"&#Q9D&}I#R +bZ+ۉ}(\KyO dw*o~lN(q6HuM4Y2%%RC5:EXJ]Esܧ&}t@^3II-s6d 4'o. ,.1, >3%9^NUPͽ^.8v#szB%>,Q^]]t z5QmQ$gIT&G!$*۱R%ԩ$u+Bۛz"$l2\'r*'dqx(#&b_'mv&0[C)ĘT~ڿ0I4vɯ'<9ty HoB)l20CsqwkWש;:\FTL6~7d}Oו*!\ɉS'{|goo/ö>p|XvᣳXYD;tmtSllsvClrE4:* Kߞ4r2:QDC2FG|4T7i|^N i@-wB][cNTs*'c MDgD0Ѡ'7)R 8 H9(=8?dW?-|azJ¦>̀lzgq۰i \ b}=_q@8{LlVfv* P8H_d2;rH|h Rex| LsZ[OTo??ޜu4b_SB*ECH9O۽x0X[(kYݡ2^8N,%TޒpI HIi5ʟ@5N\7SY0 ݿԞcPj{,f@rQٚ>m}-*B`I_?/)(d Hz7Ǧ~K Og2٥Č`ɾXUJ݄>;$);]DgTq5mHrũJzs?S`1%kƥd;P|y`~_DLq 9 ;=\`w}oKkI~Xh(n"/=py01g!?n;)ct*uK [LdkW6f3nMɣLc{*]g=\s_Fk ٷL)}һ5:}_μﳯu`ggMK p*٢psSV妚p˟>paE\)/!O'?~{,`F!u%z[3b WH~z_1&>3y>δhMt5%c\iA9e e:A:;+TNq>^XyzMQ^up#[ws)VikDؠ1Pc_ZT^+! k/ l8 TECZ1i)ڈlrfzJ&=ܡСPo]W{vI qۚ@sEE~tzܓؾ1[ItВ垛*P=}Ӏd$zFu#d Sp/ĥpx}u5Pkme؟_F>:0hI2nlphA{FaFTaDsDV)ŗҷ]ٗu0gͭrDUsf@UxF(`~M}1K>/{3v,TA3UTQG,L! D#F.d3srn &Mu/|6d \ !yK)By`eȞC 9;h8єkhV@jF1!29-njD?ENϯ>}#k=Lz!'VEEC*log?Yϐl;#ᙉ*9ɹ JJQKʱڵ3$Ȅ'PTUJ@3#:BIX^6zp1QMg_YXlthPP#'<7O߁ `> jM&  C44>Y>>4`l\km1`* |QslvuwC-_ Y(~ϣw{ly`pظmk7<L.QɩݐȜddݥD؋&BZ=BG)fPE 4>/6ώϗyzɀ.=6CyiJSm|eM%@s1? 6uz^ IV-∖\zTc{L& f<3*[ӥK#Yi5 _I/wE Fٞ*Z0-{DfwREq۹_8a$n=ECD9vyDTЎt1 +5="΋G J5r CS6D.~Ds5=/ORTCK2;gElNPUU(蟏?VP6I9{]D~8 N API S_{ҵf#`>yޛP$STUb2CF;*mёf^%2թ Z)ލrC^P:z0bc"**~$} 8hqJ$SF/Hۏh<)qXQ7#0N$Wt}s<w%HxwA^%CO:2EKD3~<cnYO, p2?|=YS 'َQިd>%62Rh_|B!0G'q]!;=I)F?dhٯ|0PHC=YO85!:G( p$)\`!P؀|]LA$|aJWb{0#łSr0R י Pa wG(>߳ X; gD>.|2bxnPwt*ҧ4G-:#h> \y,oQ Fa9\G PCJj iYX $)Fһ/I7/:FR^r}uh'YFK*dc9|רv/9=}5LHeIB$CR 0F/UTV O?oTkޗ"r nW8DвeoV / ʖ=b|Ɓ灃HK~c:** +G*7h>@~?n36".mx؉hlCb7&AAHo$ *UYS%P@s, D:s@ϒ$4B-1pYԛQPh@d^Ģ(Zq&R= ht|.t?^98TLBb#$c'"ٛ|&XDfC!V׼ۯٴz\8PZ˥˨0(׋=[5ir"e7*ƍZF;2 iA3%0JCl6`&%nYt"0 E93uTql2)E.$tG `Ed1A#:Q5$E!?p= lP;wV1^WϿ,h3W穲>chNmވX3g:†kn~rֿsҥу' C5ݒ;Q7Ts-΀qT$?$-z*pM QoZ>P>r'4o>8b5+GN)2G6}.>i9C2NLM\G.@HX{nZ'zY嗳r]|.bpobڅ٘}~U{W2[H) {^*=LL߮n=s>@yLdm_/]$Q@0.Sj+AlPOdT}wxFTXI=;%럲w_fl{ {=.[Imf쮩}]hSɓ߸bpK:{O @Q)?}>J[-::.:.dx<=%46uv귯:QMsn"Gڻ9ˣt0/IX8$ބOB j0S:ZySШqG[,󯷾>Q(VN_zX<{t)ٗjD@:S'TD=`mnYQFwԮj 6#?Т'z|GT|vlkw! fEIYviЂՖ  q"2?:b (zN<5Q}rEGHj@=,+H|2 $"_a+xP~X `i}-~?y'ꃟy a_:ҍf;&j (v%cJtF91>LI7n6d (.z ̓My 셳[zO>\ a&_ұQ:v//zPtB(HxA~tyWuftދqkB:5߻4pb vtPE*PLjw:ώ[)sD>zޙ32=MܴCm̍O(('ZuʁC0 E%)S0!!jFOgUP挕I `v>/I\ )f:k)5c٪[߇|{u;㡻{|2;7.n^>IBo;Q<_-41qe mѺZtVg_Uܸhҽ:ݻmݶc>FIǜ%1I2Miw=<Ԋ"qϴ>0tMNaTt_'GI $?Z3`wP{ٗ fG'>Cqfe{9tJ7ۋ\ENҞ;uf3S?tуu$ =]$ N3eBFQImv;qvhק_3~b3) IГX0/[!zbRkI2\A8GP 3}cR &4F0 z8&`~=(Pgh@dy0R;4ܺbLLF-F.ЇjOШjRI:vʵJZ:""KiKmH="z2hHo}V\v >I*5JwfqPX['\ g" 0=n2fO|qAO .2b=8zex#Y`AKyCuUG^36fH=@8㶼pbv Fvy@ٌy~Է@ceQ ֠gsW`1ը5ץ9OzØ:a5;H+@mfJcFL|qxZ*L{2!x,A4#dPE|$@Dm! x>=نsCQZkVa:Gmǵo7}ɤhrF_O1*@;)ӗP?Zgکys|V$ Rڅ3 !ĚSČ]rb֍&jx;Xћ;mOwr؀ º2 i樔۸$LTvb6̛u;xOOTcg( CWOXi)q/r?' )|2G\B`e$Ś&AkP8B5$p$"mC42V"qi>騈w 5)SALIJ,DQe'%Iw_JH""@{CG0RJ`Y RFdױ1)޽EDPN]?Ɍɤɕ*XzL#}G6Nň@ATc ){p9 ˜㋔\dOzǹ*t{`計N$E" y B (}b < xϥ1o^7O"BѐϿ]]?'0y&|ڤDFZoU2!' 1 $ FK EPQwixX~0;th!B#(1;FŒLD葪"fNzc#*w<ـtr7KPgMS 9'̄]}}ro5oC ?:1T^8NѤ4{G*~.4u!AOQ8nC*(şk$m*!'$́2MBzdH7gۓ\ *b.=sl!6`i'4OH6#"u$kad,3LzW*UB~Ǧ& d}w^2!!ͼS$Od+!tI$;0/׃KkE`/1q32"+PJxύ3d14f}ѤUc~/ l6nJ$P2C*3/ӭl_qc]3M0? 8{F&,%72+iq$x)3hhhf= ! Y s2];}&c\d߽é5Y^eR4&ZW*JWP5ٺ5nQgzp|L] |XŶiyޖ2F;Gb yd9jE21hDz4D ՛T뉑CNIHԐKBXF0pU榝R hb;r]A`M /4os[4#^ 8M sTAF"DEQ%u:KJLdgŻ(cڣ -+_,0q{LLp.^f ODu42R.{k"CI _.! LjuN80H]nXi5m)7ɏ9FKtуQ'n.;q]1:B^g^@|h(H{ Y$'sFaQL9=iS+ƌxWD% .DftEpC0;}yopʐ@r%> ~Z==(&jD[8kjW4]$91p)'Ib<_#U$~cT\$ݜ z6$ҸĀiЅC:#hľXB$ Lv_dнe'K ?:{C$+QKO?|Rc OBQ12(QA Q("ox}$lDbTT83/UqE%!B@ C 4uHK)D4 jpK/x l^XScgnAGΪCUԀz{;sCz(aŃ7bok}qw[HroHRFd2 ,h4*PbWCA+.L/|3=DƽI~29p %70O8;gF;'9 @ 6=znaƳ&_tUG A8ofsZBz,017KLum`sB._RJ]slKL1#Qz \^ q2? 4>=;Lĉ@Ї<É|8MNt; U `DQ0oA(ebĆI(a4$JArzwyP W7DAE4{u'\f$$H-B}(x.sX&l>Zb`) a>1@O>xOWofH~bP> h믙_MCF E%`|R akcc^UvZGӗUJRQ1hL̍,Q^ m #0)w*rЪ,uxJ@p۝7[Y(|$! 19C"Ԝw ):O;^:t*m|.I-3\srd9Cs652j*5`ә࡚  }̚)|t ^ B:8ԇ)v#+˕6%ks2;K[Л\.@6FҢ~LeƔU0cca%IwuyLzEJIe>RHpLv0'@P 5 LA0I$oB'̀ 2i\"fdm"ygJUT)5Je6h@PI=Ȩ? vD>#w>=0DROFbAYI~gv쮷\d9*CԤ0h&P݁id:71@5}Q (ǯM`~O3ypG㡙qR*e5dnWm:K)l. WAfH`Nh)1 3[ q4n,ŒcĘ`R.w*yԂ2=`&+E %Qx1>j(eAahHjfpUGY '\v̓I֚b4h6s n ;JH])^@a 2љuzTk+@6ZHz4fH*"H 4`Ia:=cpI#`-wd8{b NE+PTEPǴ4,z1 z9Ѩe[G/} OB_rt<_]膘jE?`{0x1=<":cnw?aJ(hk{a%ϔ5A,t-#2#ԏ4 ^[B`MB Oqgmae=Fu(U) *t -[\v"S!SL8!]Â( !(iH^ge95hF]a- YzxC呧bXP5w:$lDvC2b$ E4R'݃Ī&|q:SH0,{K10ý\])faXeݚ=zyiG(L[*cDZ0>_ v;=U'BF7Ib{&C׾7ŧ-:Fm}C}=h\'nA&<<+V9ª|(mzXyf9Jp̓7]m0*"%2h%8R7k*wц@nTؖ-:-{DMlro:xDpe8hL = Z]6y Ă<>>+(aLS\PT|~/?B1პQ =7hf7=t][v،9%ze`EwL5K=/ʌ WY n0J&c*sBtZjP$.y@`g6fB=N <u_2l`">(l"I'akVxR4c0:s>mKT:`2m%?x'9nǢp۴N cGH:=gXxE,4?˳{~B1uKEI o>r=DxSתIH;apL!B1B,]1H ,L@-Otǡzg QU>CQMl"k+*՝(-!nKtX2!0~Gٺ< <0xݦCQ=d̡İ_s%8*I \s/&‡r,0[ !cpo`1v@龯|RL|.["L=a 0bSfSH{imcM#ks(pFf iLIC8Zu4ZnP?fjN0wb"#eWZ-)$!5E.4  ԗ% <`H>unreDKZ ԓMP NJEJ UT"PbuܘE 99 R`GÅg9]LK1QCy\KG?7Ӽ]!(K E?hcch[D7tԧőD47h}MBewSS-):@orbqH")NB'9 eNKCx!0v˙ e$k7x/=4@ }KG"qb&*"j"Q)гꑴV67%4t}Le?' /Ld%&%Sv Ҕ!B P @]*J b ]UQE4DAĜBR2c HN%$HohPtyD's RlɆ6 QqWݡ]]9AScpS oR\bv0"Ə_ 1T1>hHa= tq.DzҪTr8ȅ]! yjDHbb!;0rz?~i]c| ]7IUJaaJD)A@5PDK3 : {!dq<oNAȲGA;1i;@c Mxu+/g`C!ASsM4Plc7q<DŽ]JRPY 6N/yʽa:$SP(S?/u s!, ߀@a5oSda jCj0O}sm rwё{$:?8qM +ɍ JC;HB`^dbM8olE-nӋCU$u\r 8#G&!1I!v;aσ [R(k5gK50=J?2D3'i0@L,%DģZSio ૌP.'>JT#zTNPݰ{@:<&"AQ lL>i%($:/L-)%E:1b)6 HT(%3#A7&ӌm KȌ3,)^w$xI$lF~b1\¦5Auc dmjTb!12r$Ue*`@SBXV-A6+P"!ceh3wEǼ&*H Tx{y! 1]&M&F"$-A1` lمNDlxq͕6fe#dcclbfbn@8ՄmAYc֘<1'#<'n6uG."~>>M4A @ ćoOЄ}C`pF6J"f)/I]Ϧp3|altmz,Qa&P+ U$f9 `T>mAN 1[?$g@,2* γ 4i(Ti7B DI,/q!<Ǒ^ Cᮦ23ʘHkLX9kCH J&VR(W(iiٰoO8}DPd+(<1\T&cX7am 5yQfQPͩ%F7l}Jwcpb917mRDx"΍ qj}#x8 ADNa,y뽃){B{ @!:(ciP {܋R&w搇Do$闃 /{7`qmNl@m{@F J+na14 ,4Ijd{-}Hɝ`>ɻQ\݃b?h8 $iN u"RLrDzRK'K- 0q'33Z(Lc(ñ1Vˀ,Di٣u n:{q\gpvrFO J$5 !<|-U˚uy$jRĦMڙeh j 0GT2;9ݓhbh0pa301PiD]LC(CICjG|[I?%>m* xH&Bp"\p?apz '嗐2J㛁:?L/2Ӝ#3)ĦSB}#IXF`fa 5v@:$.Mq"L Qrm8.4ΦI!Z84r8p,A$ |?N< ͖EV5(ŀOR4kVƨb<⤳\;{:<#OY7&$"xx' ذQQ!˻]i٧Gwg(@ݍ%THESGZP( %#D"}J:ir``B@\ 1J1Em @0!M1 :#Qy 09Od P υ\BP@(!rH}XyLQ4G*bBJ2;#a,6jP(ċf~7Tww>tLEUN^xݻ>V u&L#?y1EI01 "Ŷe4uDVBWĞU1$cxd菷wU8 p#DmV3b A(\X30}80ރi>^o8}<0ϊ*\ V23 R'Gi]Ma%Xhψn-plh#1@uMM>)=oNI`J,I,~2!.(q*P&2iA0^Z#, &L@qP#ʛX탺8b7TI j>>O@C7;aM ?qoMF.LJHDg4P`("`S43T% +wlvRr2m 1&kYY#Ldž2`T˅R1V]pV/}ާƐ+)ґcu 1X1qUDKlx($S /#{ |TN^/yh p`\;ǘ34t}Rp R$h e>} '>f H{!ё{- ݓdvGvv@CIGGv l,/vQѓ'$C8Lh8%8GK4MLR0'17 d e=}0I"VgN;'h0h:+a1 !ɈzE LI{|U݃AJwTEƒ>KN>Nj|=ԉv߯,5vrZ0kP۹zg&4#Gظ /*O!#^o|<uU(%a.ST)v0:K 3% Ea = >e x^!tyL)8t{!쯋ь8 &&K4!ŸWAT$0bFLѭD9M4x=e ы6R1m x2xy)IO+ &6LBӈ~y^HОG}`!sbΈjn#Q%EAQE94c6rbCwNJbņט q0y;'GN!`hHP/Poƴ2|M(?9&5PJCG%qBbq5f@2{Jy4#!2$EtorkWnNd:G&dN&9`A9xJPh3AN(& eRIۥ#*t1twM*Ķ 8@4kEE ZL`JhSQIX;dAq00=~?@$"i @Har E"˶ <5m?΋Hc̥Skxi d$et(BCl;x]4i>aHIͼP"66Lݵ6F eEGMhr] 21G8&;aAċ[/V ;E2 <)rniy ܜ(i.3\.Ap1KR5SB Ck}=P/hۄA@Vd&&M w. 8WYp<u#+;頌̟ӡ~P "p(S!%Qρ$7_ ֥BVmp`LI_!1*D b0LNLJղ/RW+Ύ,nflhb+ lŷ6hxPǍMʐxGe!f*J&V60ip,CRm9Cۆ'`p8 @SJ) ` I `)%= AeTGN '(T(G;HДD  pR! Mc6M `'q16|?I_E'.UoDD~IBC(?0RRCڣ6)ݢ6"3 Z{аR7w6[( :ӍOmMRc0B8qR pjs*uWf Qt3uv:-q2ؑp-.woG͘7=dk5QkjDwagbms s #FÒslf٩JMx0ó1Q,C׳.eۅ.8gWmŖWY=VrqٗHm'u5tvyApPtԇ&!Ҷ:TޠZΌt V_m!2Ǥ.;Qd ҌhՒ,U({̺;Pv;F{l"rd4Z(&N"s*^'uƆLzc}f`SfM"/Wms<k iqg\Xմ51OLzsfh>g=ۓClux~*X냃"YXEmj!e-Aú]:ƭ?g:1 7*-}d\G}t߼;s91vo^{SIha>Kdt̛"ՒAڀC;t0S ;hSlݧyAVT6ZO&p)þUW7uѹQV"q]*5!׷i 7*=,TU醃0fy3lAv-_89e|bmۂ8hkÁ4DŽnHs3(lּ*Mpo.dT,?͟o)wbW:yyǥr FlQ 3r"u|YtI?;-'0s2|;7L>26x}|>OFFҴaDN)\a֐"Kl_=*Pvq3{o;{9OUla'3hwuA l[3ۃ#<7I[Dvj2aTbz-8\f&voBowRsk݄x>Xx'kׯvJ-18>Q)ƾL| %ʀq]\us=pưM/%ھ)uѾxDgP :8enZXcL4 f%;[f55CC5tӾV'UCwٌwOҭzD4yAf̪ 06ˬ+XBx%"=HͶ1+G5n!j7fϤVqMw+ɞc Dw`<{w2dq$ YtzFhOMft|9] 刉702K+m=y"oL"%0sޙLCUw ֞9vNg<6/vLݰI%Kc,O|lK+N8nI>4!oTj=!.?uKуx0:a~`9sQz@s0@dB^ 2y$ml)Gu"=_:K-yi7Hb9ioQ%itcIOCC vC^8(핥$$=}Zf;NVK_O IӠN}-2vmH^a0sQD5I`=#7pz=B&uƓandj( GPe&TvyV]fy1c¯:r^N ZXl&a0ue4N,y}(Om&|"7a& ?F7Ӗ6vȪD&9.re8376k~/* ex15G&[UH gėD2ŝYn5Ĺr^z :fb@͉Au++z̵M÷hBml;;q0@ȑG#on1p3S.i2Ť$5J!_Vp&;&'ycL^9 oѢ>2?}0.e7D  sS תb &f_7;e$"k}֒VYCx+pъz"}S4cT<$:c)ɾKYyT\tɋ㞙i!(/^>QC CIpӚX}؄Hw͸"c/|se!ˤKapn=hdp7dAa|#T;Ɲg}h}dɺK0q#$)!@}{8OgM>Uzc:t[QL$B刖ӍVEӋO/{n!fFИ]L3msk1FlTeR8Pa{3(}-7$E>5imlˌqu/1q䶗[ԝgb%Z*;/YOxyX{XXY+oA2&5[l~ذ&tavXPͭFR>lD4=HRU0*9ˢ}Eo1Ο};.T8w~&OOk!x\maAS b|ɂO0)OKTe'nd,&F.Y }crM<&)6z}z6Z'mEf>ki"8 注$Q!3Do:f 4fû+Ϭfe (K#Ą7踽6ݽeFLcD){|yآ$j'~=&_? m^94d>\.*!4pާXaJپ,b7ŢO'X83Rٵ1qwEkƆf]R9'RSML&gVc殈lzp:I\Ǥ|ZU&i2FQiPT |qQjSUT_rƮx5IϹ72-X9L`bi;hW"3Y{ecyFYEKp) Q9T<+E)y^ӔY*4Fp|%{n 0z38iipx+1IUb*0.@*$iss+JuHue̖#{D+cf>c8,Ts,m}o_r%=ǩrv]nqpNk00* CCcьq{ sL-б{(.h*!ygHD BgyGqߐ׺ꦬ)ZАJX\Ł! eT2g Q6Y0s#bZ[3B 3lQߦwYmN$-cC7-0n81Fvb^}9F+0xihZ"%TFcًwwbqArń."ʋ!v=-,!u {n}^'Rֳ xL8;4*Nr[4{ uz1,RK{kˮ~D5N[Ircyq/z3e6:0N\4Բ}VI^rfC**.^c"z3!^jw^TS\a&V6fTe m9 Fw}A CֳS9s+k}`|ݜ%gSA3v˹uNV`1^\#7KGP? l*.5'~ն ;f1+qą̄iQᬞ6E}1*Y$mD1&a3wԙkSgp#eygg}Cgp|Uӹd{fcR#+ק`‰47[,RW'.2h">t;1:d"WhI 8Չ;u`=[5X9fu̶N+P5XxZѡ޵Loξo53Zn)̮tHn`'>8wvn^>f_63@Շ&nty5d;D@#DΦJL!!m@_O5==H b(%&ZBI  ӽ2+B9rsÁWg>S`5zzDNO%C\2RQK/lВ9c~X:7yf"LöOx7ttt:q[Yto(N 2Rp48lk'Oc8+xwʘ0`c,dqHrIc$;A?ts?qj aR! `*xܗT jd*i>G|>o0Kiie7/{j !'(@%C4@AAy2_k#AQ/( &0+^aR23•L@ D(PU!1DU)_NeTg!QCާ}4 !yfp0%fٸ ]Jc׻=˒>3QE5RSZԎ Ld D؛7`Iz]k93D'$1܅Ii|Ġ4VF8$G;H"!' > Xe0A( '|ktpP,LQ,55 fEƬ D9 j(χ|KʈZBI4ҡw;ޘsgA٭KHeEJ\qZ,pG oSV0Bdq+7KSEHzHʄ0FW ȉZc^:c`Pv9o\ wLAGN &]͟4pX1ܴJGlan,ĔM@. ,TD{Z(H3%CBq-yI)^1xA:etj>>ۂ#0JsEmQ,1Ul_"y'u":ѡ_aрBapc^[s,sA啐:ޘg#NvZg4Ȉ*45xFp8#1'"KEφ%>tk$ ob4?9:6~gL49f#p `-l+J@К S йk~3KZ5Q}S?yx|}CI [ǃA~m> ֺN:dV|b1?MM 45 {C>;G~<:9f1)9@5Π~ۺ| ђR>0y_fkmlKt2IBۍts7;awdƆ#爎*lU=I4-߅XzGLJL9*ԏщC0@]/MPbGP R!5cNW;P?髮Osw M@c|i:aAO;Y mi3/ϦGyyo}qwcϒ`]|tN[ȧMjyx< YD} NnQxNC}5{l2WU:x1obY^ɓ2]>9xABRD,Ofz}* ?~ D\E)Q~& Sý' Os:]kp;"xI `Wk \"`\/ PC)W۟؃DRP!-pA_^ <8C `*<}d0QIյ|BPZaVɨ}ZqdPip^tJjj71tӛ!F0m5Ek[4ņs@ġ4\{rB͹$ɺ>F͵v[ mDtz1kأAK&H^- GCL!fYe? B*#ô8UOgN񓤛xJXT을w:8ѢN2\% L)3#6 G(i8y"G7~d~=hCO @ALIA@A,IS %Ə_ uE Z|IjH"nW^oM"CD@$@P(}MG~H  LPR0A3(N1%ؗF"yg88!dF "Edm.S+γʢĕ*|.Ύvj?7.59gYznuY#-43mnLz[Jӎ8%QS&֎؍1̍oD=!Kv~ޟqECZL44Q4sf6CŁO7~Q8QD !|FX,L!d(Uzb9[ <8wX8DžEgS7\7ְ@[,kn3M v2glM+b5mbrKAQ5{ `E`6>h,[ъ" ,IM-]Q@ݎӫcM4qE̸ޫN]q(`EpsٙlѪcUDB4-uI6Pr>o.;1*41anGbr: r{3e i*f( S 9etjy:1퍶pld[)pCmfcAbz$o`χF$np,[͢FҥhJGSw/#eAHn@.!H:xK{YIA'5Cj>l()3zDD= ^d.;0֦3v>DIAró۳biQ)ކzhӑ(]~™2㉼z*n܂m՛Ck+Ιg7a63K(.4o 0iljz֮h̊513Wf3L"}75^` oXw%9}<,zی^uvm9L z7閎;4b|={JQ DKtH6Cf|u_r}=;]Z9^*(a.X8[X dCRJ1-KK=q_f]o 1*qWthǬ^k"aD@tR@1dV=Q,I_[$fw4ݯN3HB>+1cԨR2{7q&,^֧#4eTwTV|sՒH>$~_ 9pa1@cl 4!B-x䫢Qg۹hDD*Įt^zmBBZLI"?ӥta"@fHjZ&v`|O47C^Q9C<dC!b)I d@ 4:`x%l乽铔&" 7{It X>267g k6`Sk.3>H|N`HZbjTZD2;:^5/Gу뒝Ѹ,ki*%1~2@,?[nw ю`l(~I Ո[{#ǵڍ z0q:47ÝznxE W8;u2i!Ե Azɤ,DGY#(7u`⪯mhXZ^,}!;hI+BNgEZjBN$U1除h55cȚD-a4g'RDΛ$h1tyƇBF񸹍oY;/G[ש"4L 2?DDDQf\"$6C['(7ǣ;LSuHhv $I L6aU`69@e^O n?iύuNW k9GN-˧ȯ fȗqHfj e+v1 XV#ssL?lll"\(X_y~85I+ ~$Дin_ntt>k3zO#v&sXb.|KPIuUt4?q3wo-ӊ.c@g_}c%Fܷ[eMG^1 3#3iq}Q*^nA:n˧ap~tla{=C|㗆_4ܻEt ߕfHj|Ō` iWGw |"}calݙBn ~ϷֱM"DTO} 95%2x0ױa&4PZ.SĬ"DSwך^jZP!}u>3צL;;@!Zk=lv~yhݶ҂^wY؛WjK:6%r|\]txSxI6TvDtc\S:Ώ~Dܢ@l)FT(wҗoa-$58͌8f&9ltc(dQ C `I4+CPHQb1PBP_^btndAPON y0c.´dz HrE*(ƊULȸRQX6 #9nbgęx[nƒ;5m9Mu0il\3:*1ع_& 6ү:'k]d5]k$7M!,]1:WU%d`kѿ]/~6PtwU%SOΝ%yc:taz4Y Bv˘IIкHtn`1d1FזhŚ35#alg1|cUvXQ9TEM(JB(މ6@A0+><Pjoф1qwms:PCB@ S4H $3!31 HIA4ĤAl2D HCH) [~|GC &N 30:(Wpor]4#xзqcNlhО=1V"" Hc!Zq A<]0vP6A w4"<4 5PE*+I0)wYTH{ F{aJej|ͮcE-xy4ҙ%֡P!P üb`Q56fm4R `1we6uB1o!8-WVb Gb\ pٹJT Ě\cd&2Ñ Ce4ۨԚadWF~A^rR8BL BXSH-sӰ0(F4g2t`/}_bSZIX(fb^ϸ)I(DZOJMn92PbIw ׃d`VډҨD@˞y1."iཱྀ߉aL5): 5>6V ndJh|DJӠEp'DCxY4d R!iX_װA44LLBf+wKO`8{s A-J >(Ba/a70h'y0흅SS#:y'D,A0RMHIBs 7ox€("JJ1II0MLI)B}]- j-w(XF )3Uk]Zqt ?Wto ?4/XЊ&މ/ /$m`;oD~P#Ħ @ !" w<lؔ lb̑ C{~AzXbqyGadt<ĺ.'Ld( QH}ÍӃO\mApN?QdJhb & J()FJRHV$(e ޲j"J~3LAIT #PDP|NR $% @SM:4/J*'F<<^z)O8G_̂ /w*$) (ICYЋF#O*hc Y2  <]l~qJ$eS\)$OV:QntPM~ ~_b:~2 UU>tc; 4l *<2jN1ءm-q.`SK\N2+i;q 1Fѳo8It+ Az-|s Q:B aurQ `ty"[4Lх~\0CZ@u2$FY3   ȥ(HTJЀL"!@")[%44~r t$< v^rbcxOY{҇HaZ>B!bb&$ 4ρa6CO|ުnc&M>Ig^ Bq'SɡF)ZUP4"Ar `7 NcPaE~~58$XzɆEZ2[yrQב4p5m3-YPm!}7W͈|Km57&*&BMU(a u`RL<ű@o]%!1vd+z Xff2 buLi2 H7E8I1F@fh4xqsɈ\4[dvv8lLP$CUR'iAX^aH X,*RWχHZQfe=H Bh& h X`R%JN]Z  @ A靷abMV!%2~(iRO1-oa ='wlaF6u)UY!2DByzhO>_cRNpO#^C#_!DCJ#BFPb%1O[s9CPW $GD"{8kn+#/ƒ>D_"M\9MQ1֡%xE` ɐ~BP>wMhP:S@#!+f?*去Į2} =~U AȌʲv$A*RBR4|NG`$Q i44.N'4 V &f Hn..ҌT,DO#<2BQde=tpHb&.XuB0yyz$ bV`^P HiJ!<  =یBa;)te.04z zN9C&%6f]D14q)" 㢎g Dl^*v37lM AU0TPt)ǚxxi*6+%A#@K`Jh5IS4$_txaSnsゴe1)'Aq:zNӎ"tN9NU ]#֊e$b WbR ksTXy..*Hj!뚜/qA7m4 RtYL$pc1jsͧ}o<ɓ@ 8%5lc;a(R.>l]ga0vseL~345TbzHZJ9BBTĢ'4T'"k9@"R*9@;FVdP)B@Y$`%i*A2; )e|MB\l.X$0@0:eBaP/)ҽ$P噖仔}>SJ%F|]h"`&J((`f)*Vb$*jY&"* "iHZ)ZZHFbR(bbJZi)j((`*"%(($QCj)&i JHA+TJR5I HDI2@4*@DD6* i(JE ZXJTJT)RHhihZ`ZJ&&Y:LQ!MR,(UPPQ0 J" IB(R!41#@!J4C@BL0J3 IiT Z&(bB$R" F"I((PP(hE4jE'`WO#y~ip3PA&bd0RC@A)EQ ]jq$H⾂JP"l7n B@0q 鍢:1`$xG@H4J 9~aAh×?$ܸ'TS(ck *%(HI $ĴDL< osY]R*w#"X 0>˷pxlhi@yM&$4)Ď}S't*2d3sРĴdib*N5wŶgd1hgcQOdHS_|DATCMcUb2(*uI*k*!i&ӦH h4US$QL!4LLSAI$Q+N6ZYf&Iqe[b}w" PZlYw'`r@atXSr:v;EIQ@&.T'5=0ۀ~;H'4IN}LH4,BJP 4s@P9L@:OyT& ÿTrGC)^P ?wB;Jd>d)l~k%.2pB`æ?8VX!o#a2I[i('AG1 j0c}jHSc "*A(880C 5AQ-10En=֓u / Šz/qJ$qQFF+rw{8>wy߽."H(;R,/+-Ղ=p=JGc>@q&19NhhH7^q;Q_p.HU2cqx,=lOFuR|?i?9 L@v|nfy~h. 6gc.0O0]_֠ LhHC`Ka~C9>kn6v _|R'UBށh $@ULI,g=xj}Zk&#$C+_žC uф=J9y)9L+Qe-9[j=xhұ(L:=T$(% `P"Jk֋85HXI)sи~Fz#܏||ǑS;rQɈ>f< %Sg dw w_ x_hsK.bw2I94|,JpJ(O(UJP`@یuQ؈qjeIq:#EeS q$v#́F< m OBg-iP0RD^(FPQBzz p,U3 {ޗԱKDD\twm:hOSJGYϥ:h0J#_:ވE3&r4Y)#vkX]RI5lP@.ݜNyiP!6Q<tlJ:i zaPl$Hu{ A *5 1ZP( ?K#2{a2&)'97g"$Ij!RL̂H;ccsI-G7i vY%j!Pʀ.1cWdCe`S@3NE$)Fy<__!J)D+^xy}U7< "CPB?pJe!EdVa<{s>/'Z+ =3]u=@ty#)}cݗBjßqflP1|H0F)"Pa?6'&p&K{77)U)Jĸ LTFQ{"`;E<' zw8q51˙> Xtj@HURaM&߯FG튒iiXʯw4>PHĔPMTyea@ ש!$J>MJ*p;42$CF!\z~yƧ"p&ѝɄ s6"fA#D4pBsuI㟫\4/,#[0qMl!=h[V=$~Щ-%!ZIi!)bқPgC2釰A! hjK566,z-?h̋\=ԉ,F*} ¶AQQZ󤡳' 2 H#i/ر>?y0io {b=},b2hH3j)s a0v@CلJU۷㷃Mo3˄_dSG.3 G=Dk_9N&ϊZ߹ƝNCL:$=*NM%di (cdZ>B_N'nsWh.hv^)n}M9=C6ݛ'{:$mhAwe'$P0$ z 9cu{;!fa혞ީ cC2T}e}|?0^>Jdc[137!PsX7:zv-{B&l|ُ/ b֛>$<8ր<ަ`ܲ5X9EcJS׷.LJsPZ)1 L쌨wf|dDkYv9<":4j\[CseږF z׬z ʃdtiJQ@KCs5Q!)*RԓTyë8HH=2rƠI(DiV$f$(ݢXem܏ V8ƊZwQRCN02: h H=Y?4Ćh(Kا tmeq4N?:l@)z i S,P-#T34@~_w M@p 2IKG9o4DAB1[+6Pq/B(|TJR&d\L6}6=Uwz0>KUZ""))h)b ) ~{"$Y5f+$RN{A]%! @'ykġf\j`5{ME?1ƸH( ?Du2Q{‰IX"ZNLCBT4JJ R% XC`)4(E*!2NF?*B@HH%$ C+@ R%-!%,`>yxe;? CC$K}&La=LYk"v=F-oչ^ٴ>AmýRz&jFSvDC/)?˿pcd}9 X&gڽw=!5*r HHBKITF'P$= PS:O]z)(_̞ \I׋<(-O0f0{$.ݷ$yfoz%O+✎41@Oz=)`L*0+Y5rjx??4׉1X17v9V*}|4t #,G}ew>|7!sNTc%r CM[3D:0vH*653?G`D7֕~fK Ct'8DnX?߳r ( 4E$L,|Mk33CQΪVT_x^~9O BY wJ +l/ RnY`l2(z3/3G0-CLChDg#Zh0"e|@ײuܨtzoYoxP"DH4)2Ą4! !i*iFdJEbiZ)D)d$)(Q"b iJiV% (R(j!di @h( ((BX $ZߪirIISLB7 O5@9Cz`Qż(A 1Q@7C˳-#ƨߍ<پ`ؓ ]DRЪ\Ϙ):0 O8k(YW(e$T fRt tÀCl [[f/i4xP*Ef͔f:583{{)כ )O{O{CD=hb_/4جZ**v$< ҔI%BtyBGH5&‡h9--r{TQ$" F(g ĮOx^{NQ8h!)68IP `ۡ=Oǡ̗DrN$n'CHGL]Z@:N)ᯞD3ܳ>LJh 6 kGCmPCB( ICOo(ߠGZv_RC]-5YXe)ѹ Ag1m6)8z2g Cg-V :VRk fSPC9.cc"{2{'|H59 CZVd(E!euA6F-S |dS A[S ķxm2`S|L e7 )Wm# qM*s)LT'9tmOf_;ťcKc3T'f\Qo"c\c)Pr=;JrɆJ6IE"1$5X6LbM8AÖdIK}/q l¦.b4 8irY+Hi$ΰqMa102Z~Cm1d:$Tf\2Gv0ۀt0Q(h n 8i -]ē"Da@r#}:cSFy-GLa ݑC4˓StIf K;bFg0=F{Q=8 AMD!\:9HI.}pNA;H؜&(gCHN#R4G݉(HPLA!4vVl'aN_y(1{ŃEėiw!)+ͤiGQ>lDqA 臜 }|rqc¥]I8j.=xGi(G݃IoaNDa7Z&ZFay GNmIPO^Vrkkg% GGw}SUQGSC0hi<""-.6 u#@ԕ $TEcQZe%׀Xk!>GehG:_O,5 E!A=Iy<ӉyXpC,AE-Ex^$8 |:|xSNrJdcmP4y1 ㋣:xe;:F:=꓈bC/<ʧo81mw9*ôpi'nj @7%q%I0g+7XN,`)c\ݻ:!#ɀ}qq=pbzz! røi؂B$|BAsq77XJfrVp-)1j]b+0D!9B,s!,9"c,.l624AHY8IaD2Y u>6QlI" cT>Z!o*)$V:,xҶXKq&$ɶ$;d|1ϑ5ŀ$Dї -ð$E^@8W랗!hU"(J(RHZPWX` 䓶sfC'sDYTI8iyIcz}!yr@*q>׼!0> 9`6}`Drt`0pKN  ^zOs!vB Q6Fu&*Z=ptB@4ߺiYgPҮqAKM։lC^(1RB 4H-!HD{  h f x&dK#v55D)BҾFP F?ױ;/}xQ&.<rqKy x̒n3'stp!w j<\61L%_,1/G1Ovk1!1Jq(Ds^hhyW,D$4I밤ӧ Uqh" !Z)QLY)Xa$--`$NL:1 Y"1AԨC2Լ)I7s ɲo}/13*i g& &8%wE"0&m"xD1F4]k.=|LxNبpHx౎OeUngdCW]U HD}qL&6AY\%hZ!y 3!Ƙ'^3&d#7!L\H"3fvx4k aN  [Ƀp[ΉFH¶A6Ixj̆ӈ0fCƱq&qΊbDw`6F:2!Pcri=4U+lÄ@C#ig+9@\G4 m]^.LgLl׹ b2 8=c)jd!6e'15M &+8DM牧llin?C i&o~ Q6 @hGp:"rD!z(iш˨\!A(3@{XkMB(Wh14{)ʍD>fgȡF b>b8=6H3մ6ٿtCPNC->|9=y}@fs ^{: x>JhcZ\(gkbP_hji^pp]}c c 0VD0DDro*wG&$A>=d=P- T5/`>QCx3C]O=EξTnXrY!l0sSz;G ĒqLp Ae<߹M^&|Z(zaLs+73+p.wN1b^>8Ek9B{Ay &XcRQQP-L&`")$(* I*$iL&OB{HbE%~3` d` 1,`&dZ,f@+D`;@C0xB hё*l%VPq#`@W&%3˛vx{Ļچd 7@`e3Wȥ. k߇a cOY^wx" ǖ@6 )yK@]ACL inWBoWHҩxP|S8 h)=sopH̡ c4ʕhc0c Ӷ_?ty S$EP| ]OJdT|*RR*|̙3/ݺ7jdH|# cqdݘسUYtk1uޮ1?LM'SHx٧M!әɭu 3$".2llU0K 3MСm5jܘ3x1S2JJ$wdyaQL_N`lyz:0[19xzԷ{4]tF|u7^bM&!!JD a2T4&8N +ŻLekC9CX#YBVI5%YJ5LT2g]Ank%;6Ql+2^T,Dkj5ڡ;J/M 9NZfUu R1'1TS;Dc;tAX \`Z66 h.\0Up0 >!hg,7eE;cp dq=f 1d`¥.8T0Qkbw}]ӣksm:$b3W5m4FV!bzchl~w[7e|f`.˩^dĞe53Q b/w d~uEJ>^bEe˥Ⱎޜ>0TqȂZn _$Ǹ:h{Ho\w{iwZCI5 ɝ'qODΊH(+Ɉ&Om'i%)(*$*b" P% ^maV t x&'H󊁪("XBP @wzX^Ȏ{W!ҹX8MBs? kTw'ra V=ݐEp(:b m禒S|ua&M*C (JP+ԎAqq!!Fb9ܬCVQP d&J b%)b+9Ȫ%(^;d R:zhrt)j݊ *v(hIȴjAH//Ȑ_܆0~+-,c4h(>`#$W+2 QibȘC5O9Qxy+O DTC]2 P`0,18h h0@B*aD0ڥ "v}!$@;$V D,iOJEV#:+`J>ǒx3E,&SA1IB}ABI?}z Wd(ݑ!Hc2Hsq3&?/{3taCEw H)CaFQ}xs$W'(9KUD9- 0Ai@P? Mo͝ 7HSDR@44*8JJag"b k_g7Z>*+E s,2(48 )78RH/<#n3$Ĥq0ٗ&ΙγƑ똈5b[Z d.ez{1eP ujMp6q`zX\fR&qWڣ.p(:$֢[PsD-`qC44>cr'?'4z|dCcswY5H_L_v[!'h~f)1p݄|8+E}Ǥ;cRԭmBҐ3Xm\C+h v12c `$ItbYUf"M V2fR'9[񤞘ݠ(1E+ !LE֪ea $P67`m͖j#9ҼSqT*8|2753rXLFJy)aM&L)]8NpP:i m8LOAƴOg٥}64_gZ$ EXF!| 3۾pD {Hmľi1hgX%Ѹf8J˺jbD`23Z&4ŢXgгz.1,ڔ@|1xeu{(1,Iܑ-nv lҋc@#HgMuO'|l.L+r2 ftь 1c+Y8ǹ K~C'Lt풽MҨ 3s&5 $# $I/cً{!:EҔ>RDERhA}Hza$J~|>Z]R`.ĂtC0Pnr] b)`#16 w Čynp} 7'pB1L&Nt!Mi!cGZGؐ q ym b*`eMnEy6cIšaWgЯD?FW=傍{X5{h*3=ѝN?;5MPIL2Œ*Rg4}41!rxG4LR!b),EEI%ChtąT^.hr;d4DIlz>To%9((\kX J")ZdR  ) jB$I) $"JY nc%LssTxoL:>kg`hJP4JA1+HXhT@H!kI|}S {𢉵΀a (=%'xBhW/ % "t%4 j}"@{!M4B3)"Ht"t0Bǖ7~^HqאtJA"`$$GJ{ Lsxq$&BOe( /6"#T/-vDŽ! QC];=m!b! d)ʒ3>4Qkø<| cvH:ő(,;om0h qϑD5-f Pd(^.) 2 pN\1c$f)VK1EQ2Q D̔BK +FT Pk^ 6:N83pؠeDEp LMPXe |❅8ll1m !CyHXl&ekAl @45Z !e3HQEXi&B'uFGVq{ (hO!54QX O=>pL#k<0 ))tg|߯oiQ P X""Xw%1vЭ ʎ`jZdE'tƩ#C>~F@ dqP1PGY:MWƆ],;PUN.ȉ>L0>W$fu>*ڬHupxii "|T4<@6|$WBP2 +)eY !'z?E8H4n!cGqϘd$V|?3$&$0}ఈjݧFC΄|P~~Sx}>]>X$㦋˻@?#Lx{9ec( DBR'@y4Xc&?L?wW $0$A2H;BN)!M 7 D&O~FIқ+pX| y ;z!O*.)j yÒ1.P)@ɱưM41)PDCKlGawWT"D Z2AIN{P^p)ZN$Ųd+ 4 M&>B*nnmH/ |4;Lұa.H80Z| uEHtvJl&1 @EОq 8<ʗl&-xl$&O.`RH;+ua;A-o;آRUЯIY#xptƀ|hl<ʤو'9AGuv?<MJ@Wcp9{ ] R`C3ccPP˜! ԐjJJJ DZ C)AcAlA7mQEh;d;!3XTԺ#+zw+ 쉅_'NrhEƒ**L992CE(R>"Rz`蔿gߦѧ: 4 pg2 \rJiw\SVSe <(EI8C"üK6%YhO&#7зVˁYCvGxeMgnX $B>ױZA?7+GJaHN|һ郘%Loɫi 샣|G:L0| ?zm |!#8t51ƕg=|Pi N&/وw1+h1pe9< *4&6aS{8-XX)kXaǸ 4o HTBp@@fՉ\JI۩8#v":PEoNw.a{Z-Alp.%]|+=}bQ-_f6>w|Oپe|aybZ!Ɩ x_J0"9Hw?_ȔEDE'҈kS\=F?rI>6`lX6 % <„ 40@}F1dG٘87I$ 8+ =UJ\_RDdcuf.A4L oQR-4P̚ȿ d6fZ# awxx% ,+(T!U 4L. 613"͆ (!$jҖ@zh Cja{^fLJ1w3x^$HݏNp{Q4iHԙe &TH`>0RAT_$0~AL.%} ~D9 $`H** dv`HM=.J%&os:r?ۧ`d{9CAg> {'c}=Z`]B2#9Fa7 _^d(}~!(ixmP80ͷ]{!솔]i` M W >Zsw9/"%"~=TBЮ ȦMCBqfDDV!2䢩&, kcvNxgA`e(D$&fXh~IEQ H97?kC,\.1$<"3E'wLQ^HivpR<tcN:N#250D`A$#{|th.>_n@:A:B=*lX^nL5d1PҐm0 X;7\?3p Ấ-' 9Hj)=ĩ(>Q|.h"P4I40l;%1!HREPHSE3 4K%4 0$DLT ĂT= #HBR$M-M @^ݍ'YOiNu$&l3҄+%QpvM#j~kE$U ? J!,D\ooNCDăki6W~G#xy '!5޼n0]YaHKkL25}E9! AJcpH ے"~%Pk1&&Ō60E'H5DmfA;\@f̔E#_4ȃF k Wɲ9O~ώ>;2RzJTR3KPr LjN2DAKUi_zaA8q a l(W&DS}qOI؏a,TBJKSQp"l+mx ġUQC*CO""/ vi3Hyx QP./Rc&Aω4=';5M{?:_*艱;H5! @@LJNgc 9 %%P! G}Qϼ8 A10-(& 0ђt |70-Dħا|%d7z L t H+zL ѻ`'I<qB$&'X :asô$]y^KI;e*Js9>\;=\sJ+bJ BWo=,t *Hs-#xdϺw١ +k~0A ;``dɿìaщ:AG^PLL4RL4-ID0A#%#Uu=ܷ{!w$"I̴(`*R :Z  \ӬME $ULbUT"ł +pb(Fb> }Gdnų1$NA4CUB<|3?`z!/WOo#IB$i<$!E_Lm,T1D/և2t`و}pI:p|qܝՔDFw\Bx$ ! Y${w4prCRD`VQ8mZPEuČ$b|7J HYDCT4 4(Z0Pz:R!k؄)he#ZF"h(RR1sD0M &<S&%.C$(bX `>ǟ-ngDATvĉJҚ0Q;lKKEP 2!(7v4bhxLq (6ԬM#k*1R ٨ R(eCm!wZ3 ./ 4GD"suj09 ;kXhզ@EDF#aL 3C-3[5LK\- ᝏyOL9&O!go/m3=rEeh0tb3.Vfc'Nr`9]D S{_ =‡^~F}!@UPQ4 DD0 @BI7?OȌBJ8$@OJ&CBt7aPjP<d|0ξNEF+-1Dnل||HJk=r%brP4LQF]5EӨ8 (pfٴ: )D)1ĚW%P/zY"l$!~sǰx]sc=M?, `4I͞vq⻸'5!Y0"` k ^ ƒApv . OmX=JzeQ8m#`#X^?jiE7"R#VV#O}XQЀ~IꑆDۑ`QZY=Pzpㅆv ?t:bCcHCL|ҐT玌 <ĹURf i0d 4ib tۺhA=Q毀,dJISTC@O B6ƒm̈PZVf( 8BŒ1H0u*@"A;`L܀ѓaqu5=Pe%RVCdH` Ԛn3;p$a={R$ą4E HMJЅ!E *ĠEJD.R_ep*L$JF"eK!=YĚ^|O7߉;m!9DXr|E7`JOƢ5a̦h D7SD*PIHlEP(T h+%b4PRKPIBT5UD3E%KSxi~cJyq7&ݝ lɉ8;MSiMgp/@C)S'h6 ْgv07S$Xy6]}DbM̢p<H)܆ .nD4X&f" Pl?yѠJjX.-?3x+iQ ԔD"0@P2[CH;}ʺդf!A@摖<Hw$蔍FURu =, uGR")B47A*]f|bh1K4}8&qr:qEj&f Z$y=?ișd91/y`pǎBL}q b>KN9DD$@PAfT 2`$J@;<y2JV )(D)C1M C8"p hyvv9ሑ!yt V\` d'g#CmF~ܩ\ ,%}hjbUEhgP()2ReW,hw`6lF!i3#fEh@GQ!1$Gr l" 6N_5j1$+xO݌?(xJ?~6j Ct&nJCK }{y8y*e!ޕSV!OOM9F:@Պ5dٮ=xr8~91OÁ h 7ra~,+BPoF{46e 2)J%N%/ߎ"pA.K`_glf쪦)\9HwR E9c="|!43 DR)HH!7(>4-Z51_bF|J:1 A$D,M}C=A/bp*EFg't:%E;(ͻ֮2#EڷTq:28s% C4t{94`G q5oޛyrA>D@d8@ń6N2RP TwIֻq}-y4j quym;ŌaN+D#$wI-u ~O_ AJMn2`hnӴc}߼QD! 6$#*!<AxbNl&yUH" -}M) H]zT: n-VB8 d:*4lf("S^abv±V4ZVnh&40i$*aUY!&ƳDqHGO2e00ɚphH]D#O8P-O)9EM`#*f>]rS% ҚEr|܅34%Yd1c#cShLJS9{l(.Pyc d&on(AQx|0 v9䐄I*A/LLE8M`1; 6\ı@0h xD)JQM ġJ6L*m ֘l`H!3}0Q (P성@0ϹOxiuQ|$ȩ Lȝz)S`'ES *+!J7#vif_6^0=]CHpM)Sh33 В{>O\PɅ8*=90CkS>֪صU=@Q'D1}&S,M#-M,b|@5Lܩv|1L{@wvs|˄MŸy@ (.]ؖK" ۞n9PGqНևP !J2&|!Q!LF2БtGCHL(PH)%I_@%Q0Mvt`o8'E1gŹJ1CSM7"TǛDnGυ3'㱤̶CZLF`C50E= V.M$$\ hh>馏6Y&@jGAGy&zO ɠ8N8:ty-˓+H% JH&H" 1`$!y`,lO䠣!El틸M#4X(`9-ݫvB<'8+41a{L.4ĉ (ԥ4Wz>[c{'A6!i ^nT[ URGC'G1Jxvh[<6):K [r=Ivx+1ivL#c K`d Qݎ-hdF0!SLcF$<̹!i-=61qWiNtMqv- 2GG1NXZPʼn'54Gv6<35,uF!:&یrSݎט!<-F dZMxvÜɘ/0f5gLEcDg8<q; F9 Z4 +1$ĔCEK4SaJ6*Γʊ3-E]SPUTϝ0t< =ɨgQ鈭1:4ɳQ$HئLF%%-q7爥(`$(=sb\8.PEf}r- L*?:@t"t”w!8! ) &@TJR:̤>?:bjG0KC 1bpPɘ@ %p(ȇ MLq(A*\5%`w,-̔(Xn;angA^\G&J ,шg5(C4fz{ -hQaE |jj=:8yJ}8P0Jډn+Xa#+*Cu Y3 !0ʑXQy3S16ɓuapmG+Ujf&ZCLf_Xe1A:Ai:1b@3F1A')ZVI^'3 :BM\NEc(b'!!2Y1/maT>Ci9Lh{!>w4@4 O/ӝ t:05:7 ST,FR%"!)!ŇGC%HX+'sH*@t S.چif]eNe}{j K0p@ dF(4xw$]fP C`S@'H:@~mwd:%NQTEbpb H%8IR*bpW~$yVC hRH#uT}O-}`+x=:r1Ɏy0OpB̔3R '"&~~ǟ{Hyv# ڀbj!}ӓ.  :M#*+ -q̙pR1DZXQ(v&C; 4paRq4oS(+mvF3[:ډl!϶ BLI`d`DLTBVw0k=hbi t(B7w pT) 2iLRDIFh)x#% JSP2` i5CH(|)iR"%Eqa2ӅA?)P)a@ExaߒdIb(e R%HIYE&i F)by { zϔ?#@L0p$(YP(dJ& @ : Pt [Ll!QMJfo_pp aEQ.Wq^aHմX?)x0XV̱1iׇ$]w3q8 ALa 0uپ8+T 3E nȔxXѮ0ǮI0YPRRox>fV-ڨ^ܐFfx e]rztCz^:{H4Ƙtă7 ҳ0C,0>߱sIx]K (qkyΌnw:ܞvkfZ7OAg7xbNy-.HzAUM'&-~>*~s˭r8(#7W f̞|V6Q7H†sxݗIJz}<v|Ty.;K,0ᕴ?_}țOOsyXn$0gڬ<NT1DbaPT_( 'ק5Ϲ=00Qk"hVLpcI`{DJa?@}NpYyxQ$pO~'_#zy&sy>: km&W֯ L$TfۆhO^K9'ZiƗ+j7쉱i 5ҹ)]k$ #g=}.84#*9?wJ󸼶 H||׈e'E8]_z,6dsGb8oEmyUO`~vszܾ0o2/< 1fz&gMZ\=+dPd6C<2/Qur+)F f(DT&73u 1o&"/-r۽`>r 0}g'>nxo]9:E*c;ֲtl{1/c$|}R48W0Z5C(u=e;D.U7Gel&`uae93#3Z!z71n_|u7Z;P.;# 3p1sai{  6`YiU@ST(اwL寢R7o0y- ?leTXzߏ859"}LR1~F c?~`0y=RE#وlqݕc&Fξ>פYnL6@YcwO#"c|/imt^HjkjCBTv{>r__xbF71ؔgwDulCQӶfr">P:K@7ZPdGHZ4.*/0ޑ2QX$;6V ^0; 4:!C3OUx 8ua5o\'ia}|Ѹ'!Co@+CxUH9}_<j<:'U$!͆CU=8YӯLȔ֣N^[ALS _fBjTR5QGJHތDO> tr{MM4EE#%k ]&kŴ}D"B (cP2X5pML~ t~5n,+`&$d4;0ĝ(ZhW0CX~vF.Fzy8H$WLS5'HR%Y4GqQ"m_1qvիmY#L^NS4$fl&׃O-U k_K[n竚z+e%CBOKO(mi4ݑjTϯ -ܧn ˆt\eYI8>4tNʝ7y3bK33 3s h$8h J΋1$f2~$ps2, :C`w,')G]L4~].g:[/zFDm,LK75VRiF\vs753ֹ[9[(}mj+ x$F}`gaD9mxk^ڡAd4201xoĆ6wF1ᘿ.%au4V5zẏqK01TKUSӃLY4|=s^1yp9">g?q^>HM¬<0J^~W>|ϟN\aC^7fxFz>s,E0=Pax!C"'~GϢ> `C4|Zy|;jSq #g_6emE88~]bm5U NwߴG#UW B1xT74 73|vI 4|+D!W߶(:h<<ȸGrxy1.ߺp%ƱKoAvyo]9͗mŲ[dTO1v:IGXԣ?Ԑܸl':lL=.vZhD|BuV߅lly|=]>\#k-l|d6mR3YԹR(*PASYCm[މV̄aX-JkAAZ1-zI#8>DMaVC\ mF: ř*aeaP`L^A4>yП<=YmlA)dm=K4Nɬi̘zISrCARbI$ b^5u<] xD6ܤe2KbvQQOƘ18`8:|NL&ߓ@liy) A;pP[ 졔OBcFڡbXseTK21|o*$j$#Z oq rZ1XBQ&ҹƒy _܉EpHDT42̓#JRI3ZB{@6C/;?0"HS?T#~b¥>Fw;`4NR4A1LPTe<æYӤ=`d"C 10c`hYlB?Lm|%re I2?$q3(uq#lICC-4GQrqlg$"\:#&m\/@-]3$Bh !9 X s?dWt&@D*^"\kVHaiqd[h~VQKt,3!Jɳ ZK -!h3OACҿG\>>yu}^CPb\9* ٹ@0u7D5 S@&&ykmgh b@0,SRLqvYci@MR(#a'A}*$!39)i "@r:)v! 3(8a[(! !x=R'ޛ#oj{/] zCCJ4C#ﰌ14DXR;3rxXj%0 ZIzE!cTJc g}M,`5ԐjJ" 0|93'2_|2)!N|dʆrD+ {͎;RjB=[2o<`< 8@ y`7^RH6@t l`Hix$[&l%+BX_8l!MDU vmPA(1xIr,QD~%&c# #H|׮M\ fsKdRʑ(hP0FNDhẉ4;a/|lf-3""X0j%!G{aJ(dyU7Fl֔2ƫJ-d+pz03$.  &=߲ekB* )-t K6B*Sut4h02$a]7szzVf8R8 G*z=]$ -+372S(hp~wW:DUL~"bEvzdz\[$ɐr/t98ē XX4,HL"Lٗwa5KF rʌ!%FRUM ˍ[y)E:<X6.꤇bht srT;- |z]AY1!#IpQ4AK/2 ^p:2B9_4\D$3C68ho,)i]0y< Bet)@'nÔSzA J2k }U3UGvao#wu>3ϚL|qnY怴ezCK 3YЇAؚe{yLtKq! :F#ƞWR[貧pԕfِ:Nw<]GF"-Ƿbӆ%2R<(0P)r4)k;A=<΀:GT3هi#CDʪ5.!i)̓&w n;CGXcvڗwц*hm]rxyTST bul\;dB0ΜD]^:c2@تo1++LÚH (LS+%wjrc+^O 1w3#޷61{NF^fqSH@v.;gn'VH:5muGCs\5֎YќnEaØj T6*ac#Qh12JEwdVF (.IL/Avux2~nrpa9c-Bdf1=&:5c%vCꇉ,q!z cՎm̍23VF0I|hps29h,ĩqOl4Q8] |o $&`ߴ"f(>C, >b#>=ח/;B 0XO"e =Sf}` N=``ĔͩA!Up3 Pڛ}g4wfBP72"L2X9r>"LTOHQ'P,ZOZXbm&$d*'DM&%0FziāA`^\K}{ys U@JP%E,f)]aw'$J!&Zˬt"T A$4{hYN4k1 r@U0CM@U$K4PT%j] B1Q,UOI3*JCa:re5sad-RVbbjB&JD8L- ,$1IRMЗ·=tbόVFJąEY ASV hɦfeF1)ƢɎ Jx(ٷQpԈR0ArCUTF:i1x8)hEb+ !7JaA`б>o7FկXC $ x0W'ʷNa`yHd)N8xO(|XB|S2ϰwHP@AH CA||tV=D|Z7ૄ4qZmL%U/٭a S#FdPk6h}No{ak8XDi1sr+ApQ:AA]JhY֥%uơ.T&1X@4$ /F8y YCy~b!ɢOcB Imf"#eHQ1 䁓DS)B2w#/[ Q|]@QKr1D9HŻ|˷RaaXʼn̙)Q2D7/QLt}AM0e1l8>LKe53Q_QlZk[&bmff[Ns$ٓot^Lz?MG0mֈ0S:κq=WnDv8k"j8;q e{\I r88x0E!A0(lE(0.W1㓤OL(:DlK =vj: B4)'%CH4 L22R%'XAġ2 & 3 |!\C@!@w9LG2 D1}4)@UPR+{g*'89$)a YP0"4R@"_ c3t19sUHb8M7HJA(iS& @ J@ TA4"tDzP@>i! =QL!ՂXw)%ܩxԇ2S-:|OE>؇2W˖Xq*G(0HXBpgh ǔ' 2ȇ's9o\25<NrB>ŇN'D<;0&NX㧑iF[ La H²%thՌQ5;)adfwF kt$Zx8fhf![ӄ!A,5@P% 0)REA&CCRƫIԦ@iR ~v^GH0VԜ?M@Xhw")h]Ru43`( JI.@lw .B+&,I6CX㴩2"đ#EiFo2ax $y# labv$|)Iss.{vGH0-v$T2>{ٜ!&LI60 ><ݏ£8)Mm4P4t~uߑyzt㱎:hE`5]!50- TPxdgh"@m 1$Q G$A*=|v:<ܸMxK<ɀA:ԒM4C6>d tu`8Wcۘi3T`SGAcoD86,il$mO>x8LM=v#N*MS z^1U^16q5'j3Nka*Zmż66Ř3Wq:93˧GwP!y@[kY a.Q46Y̙J kf[wJ 2jfa8dhJ0Z,ۭR ~wz,(ĹNrecj@2sJCFCN89KL^Qgv6aV IAHӝa:SipKw39ѧE7(JIT-DR\ DG0FeˌDktQS1_w89Cm.|wD4lhQTg2Y]<Nr¸\| ya)Z$@!B!QLD©:$4C~R)hA "SAEBRDD$IRR$H0 H?̡< <[r~S5" X!l1<`~$P谣9v6BA =Q$#4 $oa`b|ņWU7prL65|dG$?rm(QIf΋ $|߬QHycbɭj-` xIg`dY D!_P{|z r/5yP(e ql Udg ծ4+CȂa<G9!/!p b$e J4XnZ;u ʖoԫCdeòI * AW)s C `AirC>#m4X8HFcq$#ޮ"D.ATx$=8(&VT8d}.@#712Â1)tXJb߇|Jy7vɲ);xcnMcna5!31(ZHlQ&u;!Cӫܸb3aL+Qfˊ+u7 ĈNZX˗xfmMh(D>G1n¬],34e^x[)RtdЭ<" 0/0=$1UZlmK;W5غ%o@ DK-2BE-4.AtM"٢cZ bbe !nn(^mDc=s61FhLOCmKK@qyퟠJ H` BzspB΋6ePeQ=<"'FCe14͡hyc̛y_UOSl`4]H $4`vQB3(l铇 `r.i@Ud5mdqT-MGɫ6ՌkLH`աNJ>HH&c!? Ibc;]<]PH%i2Ayщv$C \'=ʺ+iCfQj F(ÇS@c_`:"{irC4DP'&>OC2vCH%3C70ƲxpxP CH@D%`T#5V2&pʷw9 %- XPOl'7i Vt2g*T.bg"fa`bh~Mx^ÃϻVC*^^,OY=8l%5 4 # `)PŊ$e 8+_7CR9N|4!TNJzwr &x8#<<(؂,?p *h B(B haDݤ {ω$JWz9I&ļv>N/5y2S-*yI{c'3(i$I܄'9㟷 O~X*褏Ga&M!52H  C =z>X š?\B, W* ;Cg( f_!0`HF1-Xγe7Ed)r,GG#) &0J Ǿ3j0}>Љ=~OeQ#1 &j~wL4 OL,&Od=(PpxQ *} 1"D( CI~wJ&zP"~ ·~P'qX<pwHx"N{|8ˑ:BYQFFC+~~nqZ]bZT'SFJ GD*tN' j oe&N4!EB3)MIRDD썣L\=iOE )O1"!@+CB$̉J"0*43­ ;_#e/c &*Gu{V,3>ޯ ş)2sާxq6h,bJ= ݵ^n.4^v-qV%wpT6b{Լ8CIogf(4.ЎQQ& l(Ńy@3EJ&19CMꍰ';^i=EAhO=ǿ |.iHdzB.1R)g'8"!Bm@B Os mB~#tmG>& Bم$h^~=a/f?I߀]Jn-WHn Fp#4i mēN`~ Ac OD# RM0'=IzOu52$;\Зm#t,L`t2~5da49`cw{G>D  'udϭM,|B%X>`̿[|.NHw" `F93 }>s݉*mMP! c35uCgTQ vkK$EÑL P:Hb@ Ur G97OrB# &; qJ͘(@H ư,F=jcxu!0x@GX d`s>bZ p%H!i & 78є`@eWYʸ~BWs~d:a\X $AJQD4AJUTj)dZB`b(JdH:LII% $DC  b!!J ) JB`RS0!J!* M?4]i)o:-TP%2Ŗt(30wp-Pz!z0ipVHOLz_D(ڀ۶#NA"1B a IIXXk* A@o zya'R ˴TH1CH;n)>!˳ Bb#}"Q{!8D좇(Hdi$ *keop'N mi"T 7w 0_ ƛw-,@37?u_l^ B 'jhE#3_6 B_NRa)]S0sQo!tӔC$:~3 7NciJ 讫ThǾ@AjM A٪Y ܹ&OAohת:z#gD)2EP0M)>+<"WŘj) B$!R_c EJBK!n)VmtH~WBN+CrGQRT /a KbnM6i} ќ)V7]ZRuSσqX #V@7n~(Fd BxO* o%sv|N&Jo2bAEI*`aM21.Zp5dv hv\c>qYE5jͲ!G>},k. {/ ;^iԎ4#90jXЧ\Ѽ- S=0փ箲m(3s(|`Rɘ&ǭ5 j"*\> y3 I>葓 )^slCMK棎vFB%`ED\zX[*/ü%9q;#|m>^佉]!1x&'ۂv1He f%'Y ۹kXa.J|4 CI]Sl^m a.a%ԓT{+m]&a\|dž÷ 4I8kDEDkl$t.X9qRW8+lχ7E;mR8> A]ndly\du,6,vNd!jBeƋH"3ZuaqY*@ᷨql"+I3^3auZvPkd áB8myy`EF1+<ۯy44Mhg 8>aZ02LD &qĵe0S"׋)e0f?X٪`e90"lbĺbaFda{2BTy=#6NI4`jhk-E5ݽbW= (e[/"rn-7rE'2pM,\1 󘩤;AU}`ņ(N%n;ؑ.i&I|m p4F}R٤c0 a>:Ǔx (ō56^3W v| u:Y"'<^!0nHEGYZ&jh^)ob%oNunj (@Q;ǃMdmn9X'DG*-yas>bl|m9"q GW:W <ɜ(E%̿IĽOPgK|.gL޶Dp@% /Dq4Ԙd 43 ]@ 3h,|?V"|l<ͼS>()> g( (W ?ٳu8# "m"D|ȑHy())R$bIyn0abi!݃4Bq?KuGW>X05M#DQ$I1l VJR`H8(/ǯRA0 %%A4)T2E }C]!oSnm8;^yOq%' LwHY9s, J14ՌȏyJRB(pSWҋJ)Ovxb(/ҟp#Zdė@Dt &c9w]BAPRediSearch-1.2.2/src/pytest/hotels.py000066400000000000000000000160461364126773500175410ustar00rootroot00000000000000 hotels = [["Hilton Bracknell", "51.4086", "-0.7484"], ["Hilton London Islington", "51.5353", "-0.1041"], ["Hilton London Paddington", "51.5156", "-0.1757"], ["Hilton Blackpool", "53.83", "-3.055"], ["Hilton East Midlands Airport", "52.8467", "-1.298"], ["Hilton Newport", "51.451", "-1.311"], ["Hilton Croydon", "51.3581", "-0.1149"], ["Hilton Maidstone", "51.28534", "0.54577"], ["Hilton Craigendarroch", "57.051", "-3.048"], ["Hilton Nottingham", "52.956", "-1.148"], ["Hilton Brighton Metropole", "50.822", "-0.149"], ["Hilton Bath City", "51.3843", "-2.3595"], ["Hilton Basingstoke", "51.299", "-1.0515"], ["Hilton Belfast", "54.596", "-5.919"], ["Hilton Edinburgh Carlton", "55.9508", "-3.1874"], ["Hilton Newbury Centre", "51.3821", "-1.3183"], ["Hilton London Stansted Airport", "51.876", "0.213"], ["Hilton Coylumbridge", "57.175", "-3.805"], ["Hilton Bournemouth", "50.7191", "-1.8753"], ["Hilton Swindon", "51.5469", "-1.853"], ["Hilton Moorside", "53.3368", "-2.0254"], ["Hilton London Metropole", "51.5186", "-0.1682"], ["Hilton London Mews", "51.5058", "-0.149"], ["Hilton Milton Keynes", "52.0239", "-0.7002"], ["Hilton London Kensington", "51.5053", "-0.2133"], ["Hilton Cobham", "51.33356", "-0.43799"], ["Hilton Dunkeld House", "56.565", "-3.611"], ["Hilton Leeds City", "53.7936", "-1.5473"], ["Hilton St Helens", "53.452", "-2.725"], ["Hilton", "52.3677", "-2.0475"], ["Hilton Northampton", "52.1896", "-0.8956"], ["Hilton Puckrup Hall Tewkesbury", "52.0285", "-2.1638"], ["Hilton London Hyde Park Hotel", "51.5105", "-0.1877"], ["Hilton Dundee", "56.458", "-2.966"], ["Hilton Warwick", "52.2615", "-1.6102"], ["Hilton Templepatrick", "54.7115", "-6.092"], ["Hilton Edinburgh Airport", "55.9441", "-3.3595"], ["Hilton Birmingham Metropole", "52.45", "-1.716"], ["Hilton York", "53.956", "-1.08"], ["Hilton Dartford Bridge", "51.453", "0.245"], ["Hilton Leicester", "52.6", "-1.184"], ["Hilton Bradford", "53.8214", "-1.7184"], ["Hilton Edinburgh Grosvenor", "55.947", "-3.2173"], ["Hilton Cardiff", "51.48303", "-3.17857"], ["Hilton Manchester Airport", "53.366", "-2.271"], ["Hilton Southampton", "50.953", "-1.402"], ["Hilton London Green Park", "51.5059", "-0.1446"], ["Hilton London Olympia", "51.4964", "-0.2069"], ["Hilton London Tower Bridge", "51.5032", "-0.0791"], ["Hilton Manchester Deansgate", "53.47556", "-2.25057"], ["Hilton Birmingham Bromsgrove", "52.3674", "-2.0465"], ["Hilton Treetops", "57.135", "-2.151"], ["Hilton Strathclyde", "55.8318", "-4.0332"], ["Hilton St Annes Manor Bracknel", "51.411", "0.811"], ["Hilton London Heathrow Airport", "51.4587", "-0.4411"], ["Hilton Templepatrick Hotel & Country Club", "54.702", "-6.093"], ["Hilton London Canary Wharf", "51.5006", "-0.02"], ["Hilton Newcastle Gateshead", "54.9665", "-1.605"], ["Hilton London Euston", "51.5267", "-0.13046"], ["Hilton Garden Inn Luton North Hotel", "51.8957", "-0.38527"], ["Hilton London Gatwick Airport", "51.1559", "-0.16303"], ["Hilton Portsmouth", "50.8233", "-1.04448"], ["Hilton Avisford Park, Arundel", "50.85002", "-0.61641"], ["Hilton Burton St Georges Park", "52.81773", "-1.76009"], ["Hilton Garden Inn Aberdeen City Centre", "57.1501", "-2.10211"], [ "Hilton Garden Inn Birmingham Brindleyplace", "52.4771", "-1.9152"], ["Hilton Glasgow", "55.8579", "-4.2823"], ["Hilton London Heathrow T5", "51.47701", "-0.51727"], ["Hilton London Syon Park", "51.47934", "-0.31554"], ["Hilton London Wembley", "51.55739", "-0.28341"], ["Hilton Reading", "51.43032", "-0.97689"], ["Hilton St Anne'S Manor Bracknell", "51.4104", "-0.79854"], ["Hilton Newport", "51.6042", "-2.92186"], ["Hilton Liverpool", "53.4021", "-2.98877"], ["Hilton (London)", "51.4537", "0.2458"], ["Hilton London Heathrow Airport Terminal 5", "51.47639", "-0.51708"], [ "Hilton Garden Inn Birmingham Bridley Place", "52.4763", "-1.9134"], ["Hilton Garden Inn Bristol City Centre", "51.4516", "-2.5852"], ["Hilton Reading Hotel", "54.4607", "-0.9747"], ["Hilton Metropole (King Hilton Suite)", "51.51921", "-0.16975"], [ "Hilton At St George's Park Burton Upon Trent", "52.80797", "-1.75669"], ["Hilton Tree Tops", "57.1343", "-2.153"], [ "Hilton Garden Inn Birmingham Brindley Place", "52.47693", "-1.91489"], ["Hilton Grand Vacations Club Craigendarroch", "57.05568", "-3.05588"], ["Hilton London Gatwick South Terminal", "51.15673", "-0.15772"], ["Hilton Warwick Stratford-Upon-Avon", "52.2615", "-1.61016"], ["Hilton Cambridge City Centre", "52.20327", "0.12189"], ["Hilton Basingstoke Hotel", "51.26289", "-1.07138"], ["Hilton Watford", "51.66486", "-0.36057"], ["Hilton Garden Inn London Heathrow Airport", "51.46831", "-0.41839"], ["Hilton Dundeest Andrews Coast", "56.45801", "-2.96569"], ["Hilton Warwick Stratford-Upo", "52.2615", "-1.61016"], ["Hilton On Park Lane Mayfair Suite", "51.50566", "-0.15036"], ["Hilton London Syon Park Waldorf", "51.51851", "-0.10172"], ["Hilton London Heathrow Terminal 4", "51.45865", "-0.44155"], ["Hilton Lodore", "54.55976", "-3.13908"], ["Hilton Garforth", "53.7853", "-1.40465"], ["Hilton Newcastle Gateshead Hot", "54.9666", "-1.6053"], ["Hilton Dundee St Andrews Coast", "56.45755", "-2.97535"], ["Hilton Garden Inn Luton North", "50.5833", "-3.55"], ["Hilton Glasgow Hotel", "55.86141", "-4.26898"], ["Hilton Garden Inn Glasgow City Centre", "55.85779", "-4.28311"], ["Hilton Garden Inn Sunderland", "54.91573", "-1.38671"], ] RediSearch-1.2.2/src/pytest/rmtest.config000066400000000000000000000000431364126773500203640ustar00rootroot00000000000000[server] module = ../redisearch.so RediSearch-1.2.2/src/pytest/test.py000066400000000000000000002545701364126773500172300ustar00rootroot00000000000000# -*- coding: utf-8 -*- from rmtest import BaseModuleTestCase from hotels import hotels from redis._compat import (long, xrange) import redis import unittest import random import time class SearchTestCase(BaseModuleTestCase): def setUp(self): super(SearchTestCase, self).setUp() self.client.flushdb() def testAdd(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertTrue(r.exists('idx:idx')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'body', 'lorem ist ipsum')) for _ in r.retry_with_rdb_reload(): prefix = 'ft' self.assertExists(r, prefix + ':idx/hello') self.assertExists(r, prefix + ':idx/world') self.assertExists(r, prefix + ':idx/lorem') def testConditionalUpdate(self): self.assertOk(self.cmd( 'ft.create', 'idx', 'schema', 'foo', 'text', 'bar', 'numeric', 'sortable')) self.assertOk(self.cmd('ft.add', 'idx', '1', '1', 'fields', 'foo', 'hello', 'bar', '123')) self.assertOk(self.cmd('ft.add', 'idx', '1', '1', 'replace', 'if', '@foo == "hello"', 'fields', 'foo', 'world', 'bar', '123')) self.assertEqual('NOADD', self.cmd('ft.add', 'idx', '1', '1', 'replace', 'if', '@foo == "hello"', 'fields', 'foo', 'world', 'bar', '123')) self.assertEqual('NOADD', self.cmd('ft.add', 'idx', '1', '1', 'replace', 'if', '1 == 2', 'fields', 'foo', 'world', 'bar', '123')) self.assertOk(self.cmd('ft.add', 'idx', '1', '1', 'replace', 'partial', 'if', '@foo == "world"', 'fields', 'bar', '234')) self.assertOk(self.cmd('ft.add', 'idx', '1', '1', 'replace', 'if', '@bar == 234', 'fields', 'foo', 'hello', 'bar', '123')) # Ensure that conditionals are ignored if the document doesn't exist self.assertOk(self.cmd('FT.ADD', 'idx', '666', '1', 'IF', '@bar > 42', 'FIELDS', 'bar', '15')) # Ensure that it fails if we try again, because it already exists self.assertEqual('NOADD', self.cmd('FT.ADD', 'idx', '666', '1', 'REPLACE', 'IF', '@bar > 42', 'FIELDS', 'bar', '15')) # Ensure that it fails because we're not using 'REPLACE' with self.assertResponseError(): self.assertOk(self.cmd('FT.ADD', 'idx', '666', '1', 'IF', '@bar > 42', 'FIELDS', 'bar', '15')) def testUnionIdList(self): """ Regression test for https://github.com/RedisLabsModules/RediSearch/issues/306 """ with self.redis() as r: r.flushdb() N = 100 self.assertOk(r.execute_command( "ft.create", "test", "SCHEMA", "tags", "TAG", "waypoint", "GEO")) self.assertOk(r.execute_command( "ft.add", "test", "1", "1", "FIELDS", "tags", "alberta", "waypoint", "-113.524,53.5244")) self.assertOk(r.execute_command( "ft.add", "test", "2", "1", "FIELDS", "tags", "ontario", "waypoint", "-79.395,43.661667")) res = r.execute_command( 'ft.search', 'test', "@waypoint:[-113.52 53.52 20 mi]|@tags:{ontario}", 'nocontent') self.assertEqual(res, [2, '2', '1']) def testAttributes(self): self.assertOk(self.cmd('ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 't1 t2', 'body', 't3 t4 t5')) self.assertOk(self.cmd('ft.add', 'idx', 'doc2', 1.0, 'fields', 'body', 't1 t2', 'title', 't3 t5')) res = self.cmd( 'ft.search', 'idx', '(@title:(t1 t2) => {$weight: 0.2}) |(@body:(t1 t2) => {$weight: 0.5})', 'nocontent') self.assertListEqual([long(2), 'doc2', 'doc1'], res) res = self.cmd( 'ft.search', 'idx', '(@title:(t1 t2) => {$weight: 2.5}) |(@body:(t1 t2) => {$weight: 0.5})', 'nocontent') self.assertListEqual([long(2), 'doc1', 'doc2'], res) res = self.cmd( 'ft.search', 'idx', '(t3 t5) => {$slop: 4}', 'nocontent') self.assertListEqual([long(2), 'doc2', 'doc1'], res) res = self.cmd( 'ft.search', 'idx', '(t5 t3) => {$slop: 0}', 'nocontent') self.assertListEqual([long(1), 'doc2'], res) res = self.cmd( 'ft.search', 'idx', '(t5 t3) => {$slop: 0; $inorder:true}', 'nocontent') self.assertListEqual([0], res) def testUnion(self): with self.redis() as r: r.flushdb() N = 100 self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text')) for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'f', 'hello world' if i % 2 == 0 else 'hallo werld')) for _ in r.retry_with_rdb_reload(): res = r.execute_command( 'ft.search', 'idx', 'hello|hallo', 'nocontent', 'limit', '0', '100') self.assertEqual(N + 1, len(res)) self.assertEqual(N, res[0]) res = r.execute_command( 'ft.search', 'idx', 'hello|world', 'nocontent', 'limit', '0', '100') self.assertEqual(51, len(res)) self.assertEqual(50, res[0]) res = r.execute_command('ft.search', 'idx', '(hello|hello)(world|world)', 'nocontent', 'verbatim', 'limit', '0', '100') self.assertEqual(51, len(res)) self.assertEqual(50, res[0]) res = r.execute_command( 'ft.search', 'idx', '(hello|hallo)(werld|world)', 'nocontent', 'verbatim', 'limit', '0', '100') self.assertEqual(101, len(res)) self.assertEqual(100, res[0]) res = r.execute_command( 'ft.search', 'idx', '(hallo|hello)(world|werld)', 'nocontent', 'verbatim', 'limit', '0', '100') self.assertEqual(101, len(res)) self.assertEqual(100, res[0]) res = r.execute_command( 'ft.search', 'idx', '(hello|werld)(hallo|world)', 'nocontent', 'verbatim', 'limit', '0', '100') self.assertEqual(101, len(res)) self.assertEqual(100, res[0]) res = r.execute_command( 'ft.search', 'idx', '(hello|hallo) world', 'nocontent', 'verbatim', 'limit', '0', '100') self.assertEqual(51, len(res)) self.assertEqual(50, res[0]) res = r.execute_command( 'ft.search', 'idx', '(hello world)|((hello world)|(hallo world|werld) | hello world werld)', 'nocontent', 'verbatim', 'limit', '0', '100') self.assertEqual(101, len(res)) self.assertEqual(100, res[0]) def testSearch(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'weight', 10.0, 'body', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 0.5, 'fields', 'title', 'hello world', 'body', 'lorem ist ipsum')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'hello another world', 'body', 'lorem ist ipsum lorem lorem')) for _ in r.retry_with_rdb_reload(): res = r.execute_command('ft.search', 'idx', 'hello') self.assertTrue(len(res) == 5) self.assertEqual(res[0], long(2)) self.assertEqual(res[1], "doc2") self.assertTrue(isinstance(res[2], list)) self.assertTrue('title' in res[2]) self.assertTrue('hello another world' in res[2]) self.assertEqual(res[3], "doc1") self.assertTrue('hello world' in res[4]) # Test empty query res = r.execute_command('ft.search', 'idx', '') self.assertListEqual([0], res) # Test searching with no content res = r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent') self.assertTrue(len(res) == 3) self.assertEqual(res[0], long(2)) self.assertEqual(res[1], "doc2") self.assertEqual(res[2], "doc1") # Test searching WITHSCORES res = r.execute_command( 'ft.search', 'idx', 'hello', 'WITHSCORES') self.assertEqual(len(res), 7) self.assertEqual(res[0], long(2)) self.assertEqual(res[1], "doc2") self.assertTrue(float(res[2]) > 0) self.assertEqual(res[4], "doc1") self.assertTrue(float(res[5]) > 0) # Test searching WITHSCORES NOCONTENT res = r.execute_command( 'ft.search', 'idx', 'hello', 'WITHSCORES', 'NOCONTENT') self.assertEqual(len(res), 5) self.assertEqual(res[0], long(2)) self.assertEqual(res[1], "doc2") self.assertTrue(float(res[2]) > 0) self.assertEqual(res[3], "doc1") self.assertTrue(float(res[4]) > 0) def testSearchNosave(self): # Check to see what happens when we try to return unsaved documents self.cmd('ft.create', 'idx', 'SCHEMA', 'f1', 'text') # Add 3 documents for x in range(3): self.cmd('ft.add', 'idx', 'doc{}'.format(x), 1.0, 'NOSAVE', 'FIELDS', 'f1', 'value') # Now query the results res = self.cmd('ft.search', 'idx', 'value') self.assertEqual(3, res[0]) for content in res[2::2]: self.assertEqual([], content) def testGet(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text', 'bar', 'text')) for i in range(100): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'foo', 'hello world', 'bar', 'wat wat')) for i in range(100): res = r.execute_command('ft.get', 'idx', 'doc%d' % i) self.assertIsNotNone(res) self.assertListEqual( ['foo', 'hello world', 'bar', 'wat wat'], res) self.assertIsNone(r.execute_command( 'ft.get', 'idx', 'doc%dsdfsd' % i)) rr = r.execute_command( 'ft.mget', 'idx', *('doc%d' % i for i in range(100))) self.assertEqual(len(rr), 100) for res in rr: self.assertIsNotNone(res) self.assertListEqual( ['foo', 'hello world', 'bar', 'wat wat'], res) rr = r.execute_command( 'ft.mget', 'idx', *('doc-%d' % i for i in range(100))) self.assertEqual(len(rr), 100) for res in rr: self.assertIsNone(res) def testDelete(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text')) for i in range(100): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'f', 'hello world')) for i in range(100): # the doc hash should exist now self.assertTrue(r.exists('doc%d' % i)) # Delete the actual docs only half of the time self.assertEqual(1, r.execute_command( 'ft.del', 'idx', 'doc%d' % i, 'DD' if i % 2 == 0 else '')) # second delete should return 0 self.assertEqual(0, r.execute_command( 'ft.del', 'idx', 'doc%d' % i)) # After del with DD the doc hash should not exist if i % 2 == 0: self.assertFalse(r.exists('doc%d' % i)) else: self.assertTrue(r.exists('doc%d' % i)) res = r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'limit', 0, 100) self.assertNotIn('doc%d' % i, res) self.assertEqual(res[0], 100 - i - 1) self.assertEqual(len(res), 100 - i) # test reinsertion self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'f', 'hello world')) res = r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'limit', 0, 100) self.assertIn('doc%d' % i, res) self.assertEqual(1, r.execute_command( 'ft.del', 'idx', 'doc%d' % i)) for _ in r.retry_with_rdb_reload(): did = 'rrrr' self.assertOk(r.execute_command('ft.add', 'idx', did, 1, 'fields', 'f', 'hello world')) self.assertEqual(1, r.execute_command('ft.del', 'idx', did)) self.assertEqual(0, r.execute_command('ft.del', 'idx', did)) self.assertOk(r.execute_command('ft.add', 'idx', did, 1, 'fields', 'f', 'hello world')) self.assertEqual(1, r.execute_command('ft.del', 'idx', did)) self.assertEqual(0, r.execute_command('ft.del', 'idx', did)) def testReplace(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'f', 'hello world')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'f', 'hello world')) res = r.execute_command( 'ft.search', 'idx', 'hello world') self.assertEqual(2, res[0]) with self.assertResponseError(): # make sure we can't insert a doc twice res = r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'f', 'hello world') # now replace doc1 with a different content self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'replace', 'fields', 'f', 'goodbye universe')) for _ in r.retry_with_rdb_reload(): # make sure the query for hello world does not return the replaced # document res = r.execute_command( 'ft.search', 'idx', 'hello world', 'nocontent') self.assertEqual(1, res[0]) self.assertEqual('doc2', res[1]) # search for the doc's new content res = r.execute_command( 'ft.search', 'idx', 'goodbye universe', 'nocontent') self.assertEqual(1, res[0]) self.assertEqual('doc1', res[1]) def testDrop(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text', 'n', 'numeric', 't', 'tag', 'g', 'geo')) for i in range(100): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'f', 'hello world', 'n', 666, 't', 'foo bar', 'g', '19.04,47.497')) keys = r.keys('*') self.assertEqual(106, len(keys)) self.assertOk(r.execute_command('ft.drop', 'idx')) keys = r.keys('*') self.assertEqual(0, len(keys)) # Now do the same with KEEPDOCS self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text', 'n', 'numeric', 't', 'tag', 'g', 'geo')) for i in range(100): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'f', 'hello world', 'n', 666, 't', 'foo bar', 'g', '19.04,47.497')) keys = r.keys('*') self.assertEqual(106, len(keys)) self.assertOk(r.execute_command('ft.drop', 'idx', 'KEEPDOCS')) keys = r.keys('*') self.assertListEqual(['doc0', 'doc1', 'doc10', 'doc11', 'doc12', 'doc13', 'doc14', 'doc15', 'doc16', 'doc17', 'doc18', 'doc19', 'doc2', 'doc20', 'doc21', 'doc22', 'doc23', 'doc24', 'doc25', 'doc26', 'doc27', 'doc28', 'doc29', 'doc3', 'doc30', 'doc31', 'doc32', 'doc33', 'doc34', 'doc35', 'doc36', 'doc37', 'doc38', 'doc39', 'doc4', 'doc40', 'doc41', 'doc42', 'doc43', 'doc44', 'doc45', 'doc46', 'doc47', 'doc48', 'doc49', 'doc5', 'doc50', 'doc51', 'doc52', 'doc53', 'doc54', 'doc55', 'doc56', 'doc57', 'doc58', 'doc59', 'doc6', 'doc60', 'doc61', 'doc62', 'doc63', 'doc64', 'doc65', 'doc66', 'doc67', 'doc68', 'doc69', 'doc7', 'doc70', 'doc71', 'doc72', 'doc73', 'doc74', 'doc75', 'doc76', 'doc77', 'doc78', 'doc79', 'doc8', 'doc80', 'doc81', 'doc82', 'doc83', 'doc84', 'doc85', 'doc86', 'doc87', 'doc88', 'doc89', 'doc9', 'doc90', 'doc91', 'doc92', 'doc93', 'doc94', 'doc95', 'doc96', 'doc97', 'doc98', 'doc99'], sorted(keys)) def testCustomStopwords(self): with self.redis() as r: r.flushdb() # Index with default stopwords self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text')) # Index with custom stopwords self.assertOk(r.execute_command('ft.create', 'idx2', 'stopwords', 2, 'hello', 'world', 'schema', 'foo', 'text')) # Index with NO stopwords self.assertOk(r.execute_command('ft.create', 'idx3', 'stopwords', 0, 'schema', 'foo', 'text')) for idx in ('idx', 'idx2', 'idx3'): self.assertOk(r.execute_command( 'ft.add', idx, 'doc1', 1.0, 'fields', 'foo', 'hello world')) self.assertOk(r.execute_command( 'ft.add', idx, 'doc2', 1.0, 'fields', 'foo', 'to be or not to be')) for _ in r.retry_with_rdb_reload(): # Normal index should return results just for 'hello world' self.assertEqual([1, 'doc1'], r.execute_command( 'ft.search', 'idx', 'hello world', 'nocontent')) self.assertEqual([0], r.execute_command( 'ft.search', 'idx', 'to be or not', 'nocontent')) # Custom SW index should return results just for 'to be or not' self.assertEqual([0], r.execute_command( 'ft.search', 'idx2', 'hello world', 'nocontent')) self.assertEqual([1, 'doc2'], r.execute_command( 'ft.search', 'idx2', 'to be or not', 'nocontent')) # No SW index should return results for both self.assertEqual([1, 'doc1'], r.execute_command( 'ft.search', 'idx3', 'hello world', 'nocontent')) self.assertEqual([1, 'doc2'], r.execute_command( 'ft.search', 'idx3', 'to be or not', 'nocontent')) def testStopwords(self): # This test was taken from Python's tests, and failed due to some changes # made earlier self.cmd('ft.create', 'idx', 'stopwords', 3, 'foo', 'bar', 'baz', 'schema', 'txt', 'text') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'txt', 'foo bar') self.cmd('ft.add', 'idx', 'doc2', 1.0, 'fields', 'txt', 'hello world') r1 = self.cmd('ft.search', 'idx', 'foo bar', 'nocontent') r2 = self.cmd('ft.search', 'idx', 'foo bar hello world', 'nocontent') self.assertEqual(0, r1[0]) self.assertEqual(1, r2[0]) def testNoStopwords(self): # This test taken from Java's test suite self.cmd('ft.create', 'idx', 'schema', 'title', 'text') for i in range(100): self.cmd('ft.add', 'idx', 'doc{}'.format(i), 1.0, 'fields', 'title', 'hello world' if i % 2 == 0 else 'hello worlds') res = self.cmd('ft.search', 'idx', 'hello a world', 'NOCONTENT') self.assertEqual(100, res[0]) res = self.cmd('ft.search', 'idx', 'hello a world', 'VERBATIM', 'NOCONTENT') self.assertEqual(50, res[0]) res = self.cmd('ft.search', 'idx', 'hello a world', 'NOSTOPWORDS') self.assertEqual(0, res[0]) def testOptional(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'foo', 'hello wat woot')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'foo', 'hello world woot')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc3', 1.0, 'fields', 'foo', 'hello world werld')) res = r.execute_command('ft.search', 'idx', 'hello', 'nocontent') self.assertEqual([long(3), 'doc3', 'doc2', 'doc1'], res) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'nocontent', 'scorer', 'DISMAX') self.assertEqual([long(2), 'doc3', 'doc2'], res) res = r.execute_command( 'ft.search', 'idx', 'hello ~world', 'nocontent', 'scorer', 'DISMAX') self.assertEqual([long(3), 'doc3', 'doc2', 'doc1'], res) res = r.execute_command( 'ft.search', 'idx', 'hello ~world ~werld', 'nocontent', 'scorer', 'DISMAX') self.assertEqual([long(3), 'doc3', 'doc2', 'doc1'], res) def testExplain(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text', 'bar', 'numeric', 'sortable')) q = '(hello world) "what what" hello|world @bar:[10 100]|@bar:[200 300]' res = r.execute_command('ft.explain', 'idx', q) # print res.replace('\n', '\\n') expected = """INTERSECT {\n UNION {\n hello\n +hello(expanded)\n }\n UNION {\n world\n +world(expanded)\n }\n EXACT {\n what\n what\n }\n UNION {\n UNION {\n hello\n +hello(expanded)\n }\n UNION {\n world\n +world(expanded)\n }\n }\n UNION {\n NUMERIC {10.000000 <= @bar <= 100.000000}\n NUMERIC {200.000000 <= @bar <= 300.000000}\n }\n}\n""" self.assertEqual(res, expected) def testNoIndex(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text', 'num', 'numeric', 'sortable', 'noindex', 'extra', 'text', 'noindex', 'sortable')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', '0.1', 'fields', 'foo', 'hello world', 'num', 1, 'extra', 'hello lorem ipsum')) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'nocontent') self.assertListEqual([1, 'doc1'], res) res = r.execute_command( 'ft.search', 'idx', 'lorem ipsum', 'nocontent') self.assertListEqual([0], res) res = r.execute_command( 'ft.search', 'idx', '@extra:hello', 'nocontent') self.assertListEqual([0], res) res = r.execute_command( 'ft.search', 'idx', '@num:[1 1]', 'nocontent') self.assertListEqual([0], res) def testPartial(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text', 'num', 'numeric', 'sortable', 'noindex', 'extra', 'text', 'noindex')) # print r.execute_command('ft.info', 'idx') self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', '0.1', 'fields', 'foo', 'hello world', 'num', 1, 'extra', 'lorem ipsum')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', '0.1', 'fields', 'foo', 'hello world', 'num', 2, 'extra', 'abba')) res = r.execute_command('ft.search', 'idx', 'hello world', 'sortby', 'num', 'asc', 'nocontent', 'withsortkeys') self.assertListEqual([long(2), 'doc1', '#1', 'doc2', '#2'], res) res = r.execute_command('ft.search', 'idx', 'hello world', 'sortby', 'num', 'desc', 'nocontent', 'withsortkeys') self.assertListEqual([long(2), 'doc2', '#2', 'doc1', '#1'], res) # Updating non indexed fields doesn't affect search results self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', '0.1', 'replace', 'partial', 'fields', 'num', 3, 'extra', 'jorem gipsum')) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'sortby', 'num', 'desc',) self.assertListEqual([long(2), 'doc1', ['foo', 'hello world', 'num', '3', 'extra', 'jorem gipsum'], 'doc2', ['foo', 'hello world', 'num', '2', 'extra', 'abba']], res) res = r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'withscores') # Updating only indexed field affects search results self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', '0.1', 'replace', 'partial', 'fields', 'foo', 'wat wet')) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'nocontent') self.assertListEqual([long(1), 'doc2'], res) res = r.execute_command('ft.search', 'idx', 'wat', 'nocontent') self.assertListEqual([long(1), 'doc1'], res) # Test updating of score and no fields res = r.execute_command( 'ft.search', 'idx', 'wat', 'nocontent', 'withscores') self.assertLess(float(res[2]), 1) # self.assertListEqual([long(1), 'doc1'], res) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', '1.0', 'replace', 'partial', 'fields')) res = r.execute_command( 'ft.search', 'idx', 'wat', 'nocontent', 'withscores') self.assertGreater(float(res[2]), 1) # Test updating payloads res = r.execute_command( 'ft.search', 'idx', 'wat', 'nocontent', 'withpayloads') self.assertIsNone(res[2]) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', '1.0', 'replace', 'partial', 'payload', 'foobar', 'fields')) res = r.execute_command( 'ft.search', 'idx', 'wat', 'nocontent', 'withpayloads') self.assertEqual('foobar', res[2]) def testPaging(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text', 'bar', 'numeric', 'sortable')) N = 100 for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', '%d' % i, 1, 'fields', 'foo', 'hello', 'bar', i)) chunk = 7 offset = 0 while True: res = r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'limit', offset, chunk) self.assertEqual(res[0], N) if offset + chunk > N: self.assertTrue(len(res) - 1 <= chunk) break self.assertEqual(len(res), chunk + 1) for n, id in enumerate(res[1:]): self.assertEqual(int(id), N - 1 - (offset + n)) offset += chunk chunk = random.randrange(1, 10) res = r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'sortby', 'bar', 'asc', 'limit', N, 10) self.assertEqual(res[0], N) self.assertEqual(len(res), 1) with self.assertResponseError(): r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'limit', 0, -1) with self.assertResponseError(): r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'limit', -1, 10) with self.assertResponseError(): r.execute_command( 'ft.search', 'idx', 'hello', 'nocontent', 'limit', 0, 2000000) def testPrefix(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text')) N = 100 for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'foo', 'constant term%d' % (random.randrange(0, 5)))) for _ in r.retry_with_rdb_reload(): res = r.execute_command( 'ft.search', 'idx', 'constant term', 'nocontent') self.assertEqual([0], res) res = r.execute_command( 'ft.search', 'idx', 'constant term*', 'nocontent') self.assertEqual(N, res[0]) res = r.execute_command( 'ft.search', 'idx', 'const* term*', 'nocontent') self.assertEqual(N, res[0]) res = r.execute_command( 'ft.search', 'idx', 'constant term1*', 'nocontent') self.assertGreater(res[0], 2) res = r.execute_command( 'ft.search', 'idx', 'const* -term*', 'nocontent') self.assertEqual([0], res) res = r.execute_command( 'ft.search', 'idx', 'constant term9*', 'nocontent') self.assertEqual([0], res) def testSortBy(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text', 'sortable', 'bar', 'numeric', 'sortable')) N = 100 for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'foo', 'hello%03d world' % i, 'bar', 100 - i)) for _ in r.retry_with_rdb_reload(): res = r.execute_command( 'ft.search', 'idx', 'world', 'nocontent', 'sortby', 'foo') self.assertEqual([long(100), 'doc0', 'doc1', 'doc2', 'doc3', 'doc4', 'doc5', 'doc6', 'doc7', 'doc8', 'doc9'], res) res = r.execute_command( 'ft.search', 'idx', 'world', 'nocontent', 'sortby', 'foo', 'desc') self.assertEqual([long(100), 'doc99', 'doc98', 'doc97', 'doc96', 'doc95', 'doc94', 'doc93', 'doc92', 'doc91', 'doc90'], res) res = r.execute_command( 'ft.search', 'idx', 'world', 'nocontent', 'sortby', 'bar', 'desc') self.assertEqual([long(100), 'doc0', 'doc1', 'doc2', 'doc3', 'doc4', 'doc5', 'doc6', 'doc7', 'doc8', 'doc9'], res) res = r.execute_command( 'ft.search', 'idx', 'world', 'nocontent', 'sortby', 'bar', 'asc') self.assertEqual([long(100), 'doc99', 'doc98', 'doc97', 'doc96', 'doc95', 'doc94', 'doc93', 'doc92', 'doc91', 'doc90'], res) res = r.execute_command('ft.search', 'idx', 'world', 'nocontent', 'sortby', 'bar', 'desc', 'withscores', 'limit', '2', '5') self.assertEqual( [long(100), 'doc2', '0', 'doc3', '0', 'doc4', '0', 'doc5', '0', 'doc6', '0'], res) res = r.execute_command('ft.search', 'idx', 'world', 'nocontent', 'sortby', 'bar', 'desc', 'withsortkeys', 'limit', 0, 5) self.assertListEqual( [long(100), 'doc0', '#100', 'doc1', '#99', 'doc2', '#98', 'doc3', '#97', 'doc4', '#96'], res) res = r.execute_command('ft.search', 'idx', 'world', 'nocontent', 'sortby', 'foo', 'desc', 'withsortkeys', 'limit', 0, 5) self.assertListEqual([long(100), 'doc99', '$hello099 world', 'doc98', '$hello098 world', 'doc97', '$hello097 world', 'doc96', '$hello096 world', 'doc95', '$hello095 world'], res) def testNot(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text')) N = 10 for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'foo', 'constant term%d' % (random.randrange(0, 5)))) for i in range(5): inclusive = r.execute_command( 'ft.search', 'idx', 'constant term%d' % i, 'nocontent', 'limit', 0, N) exclusive = r.execute_command( 'ft.search', 'idx', 'constant -term%d' % i, 'nocontent', 'limit', 0, N) exclusive2 = r.execute_command( 'ft.search', 'idx', '-(term%d)' % i, 'nocontent', 'limit', 0, N) exclusive3 = r.execute_command( 'ft.search', 'idx', '(-term%d) (constant)' % i, 'nocontent', 'limit', 0, N) self.assertNotEqual(inclusive[0], N) self.assertEqual(inclusive[0] + exclusive[0], N) self.assertEqual(exclusive3[0], exclusive2[0]) self.assertEqual(exclusive3[0], exclusive[0]) s1, s2, s3, s4 = set(inclusive[1:]), set( exclusive[1:]), set(exclusive2[1:]), set(exclusive3[1:]) self.assertTrue(s1.difference(s2) == s1) self.assertTrue(s1.difference(s3) == s1) self.assertTrue(s1.difference(s4) == s1) self.assertTrue(s2 == s3) self.assertTrue(s2 == s4) self.assertTrue(s2.intersection(s1) == set()) self.assertTrue(s3.intersection(s1) == set()) self.assertTrue(s4.intersection(s1) == set()) # NOT on a non existing term self.assertEqual(r.execute_command( 'ft.search', 'idx', 'constant -dasdfasdf', 'nocontent')[0], N) # not on self term self.assertEqual(r.execute_command( 'ft.search', 'idx', 'constant -constant', 'nocontent'), [0]) self.assertEqual(r.execute_command( 'ft.search', 'idx', 'constant -(term0|term1|term2|term3|term4|nothing)', 'nocontent'), [0]) # self.assertEqual(r.execute_command('ft.search', 'idx', 'constant -(term1 term2)', 'nocontent')[0], N) def testNestedIntersection(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'a', 'text', 'b', 'text', 'c', 'text', 'd', 'text')) for i in range(20): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'a', 'foo', 'b', 'bar', 'c', 'baz', 'd', 'gaz')) res = [ r.execute_command('ft.search', 'idx', 'foo bar baz gaz', 'nocontent'), r.execute_command('ft.search', 'idx', '@a:foo @b:bar @c:baz @d:gaz', 'nocontent'), r.execute_command('ft.search', 'idx', '@b:bar @a:foo @c:baz @d:gaz', 'nocontent'), r.execute_command('ft.search', 'idx', '@c:baz @b:bar @a:foo @d:gaz', 'nocontent'), r.execute_command('ft.search', 'idx', '@d:gaz @c:baz @b:bar @a:foo', 'nocontent'), r.execute_command( 'ft.search', 'idx', '@a:foo (@b:bar (@c:baz @d:gaz))', 'nocontent'), r.execute_command( 'ft.search', 'idx', '@c:baz (@a:foo (@b:bar (@c:baz @d:gaz)))', 'nocontent'), r.execute_command( 'ft.search', 'idx', '@b:bar (@a:foo (@c:baz @d:gaz))', 'nocontent'), r.execute_command( 'ft.search', 'idx', '@d:gaz (@a:foo (@c:baz @b:bar))', 'nocontent'), r.execute_command('ft.search', 'idx', 'foo (bar baz gaz)', 'nocontent'), r.execute_command('ft.search', 'idx', 'foo (bar (baz gaz))', 'nocontent'), r.execute_command('ft.search', 'idx', 'foo (bar (foo bar) (foo bar))', 'nocontent'), r.execute_command('ft.search', 'idx', 'foo (foo (bar baz (gaz)))', 'nocontent'), r.execute_command('ft.search', 'idx', 'foo (foo (bar (baz (gaz (foo bar (gaz))))))', 'nocontent')] for i, r in enumerate(res): # print i, res[0], r self.assertListEqual(res[0], r) def testInKeys(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text')) for i in range(200): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'foo', 'hello world')) for _ in r.retry_with_rdb_reload(): for keys in ( ['doc%d' % i for i in range(10)], ['doc%d' % i for i in range(0, 30, 2)], [ 'doc%d' % i for i in range(99, 0, -5)] ): res = r.execute_command( 'ft.search', 'idx', 'hello world', 'NOCONTENT', 'LIMIT', 0, 100, 'INKEYS', len(keys), *keys) self.assertEqual(len(keys), res[0]) self.assertTrue(all((k in res for k in keys))) self.assertEqual(0, r.execute_command( 'ft.search', 'idx', 'hello world', 'NOCONTENT', 'LIMIT', 0, 100, 'INKEYS', 3, 'foo', 'bar', 'baz')[0]) with self.assertResponseError(): self.cmd('ft.search', 'idx', 'hello', 'INKEYS', 99) with self.assertResponseError(): self.cmd('ft.search', 'idx', 'hello', 'INKEYS', -1) with self.assertResponseError(): self.cmd('ft.search', 'idx', 'hello', 'inkeys', 4, 'foo') def testSlopInOrder(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1, 'fields', 'title', 't1 t2')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1, 'fields', 'title', 't1 t3 t2')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc3', 1, 'fields', 'title', 't1 t3 t4 t2')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc4', 1, 'fields', 'title', 't1 t3 t4 t5 t2')) res = r.execute_command( 'ft.search', 'idx', 't1|t4 t3|t2', 'slop', '0', 'inorder', 'nocontent') self.assertEqual({'doc3', 'doc4', 'doc2', 'doc1'}, set(res[1:])) res = r.execute_command( 'ft.search', 'idx', 't2 t1', 'slop', '0', 'nocontent') self.assertEqual(1, res[0]) self.assertEqual('doc1', res[1]) self.assertEqual(0, r.execute_command( 'ft.search', 'idx', 't2 t1', 'slop', '0', 'inorder')[0]) self.assertEqual(1, r.execute_command( 'ft.search', 'idx', 't1 t2', 'slop', '0', 'inorder')[0]) self.assertEqual(2, r.execute_command( 'ft.search', 'idx', 't1 t2', 'slop', '1', 'inorder')[0]) self.assertEqual(3, r.execute_command( 'ft.search', 'idx', 't1 t2', 'slop', '2', 'inorder')[0]) self.assertEqual(4, r.execute_command( 'ft.search', 'idx', 't1 t2', 'slop', '3', 'inorder')[0]) self.assertEqual(4, r.execute_command( 'ft.search', 'idx', 't1 t2', 'inorder')[0]) self.assertEqual(0, r.execute_command( 'ft.search', 'idx', 't t1', 'inorder')[0]) self.assertEqual(2, r.execute_command( 'ft.search', 'idx', 't1 t2 t3 t4')[0]) self.assertEqual(0, r.execute_command( 'ft.search', 'idx', 't1 t2 t3 t4', 'inorder')[0]) def testExact(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'weight', 10.0, 'body', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 0.5, 'fields', 'title', 'hello world', 'body', 'lorem ist ipsum')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'hello another world', 'body', 'lorem ist ipsum lorem lorem')) res = r.execute_command( 'ft.search', 'idx', '"hello world"', 'verbatim') self.assertEqual(3, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc1", res[1]) res = r.execute_command( 'ft.search', 'idx', "hello \"another world\"", 'verbatim') self.assertEqual(3, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc2", res[1]) def testGeo(self): with self.redis() as r: gsearch = lambda query, lon, lat, dist, unit='km': r.execute_command( 'ft.search', 'idx', query, 'geofilter', 'location', lon, lat, dist, unit) gsearch_inline = lambda query, lon, lat, dist, unit='km': r.execute_command( 'ft.search', 'idx', '{} @location:[{} {} {} {}]'.format(query, lon, lat, dist, unit)) r.flushdb() self.assertOk(r.execute_command('ft.create', 'idx', 'schema', 'name', 'text', 'location', 'geo')) for i, hotel in enumerate(hotels): self.assertOk(r.execute_command('ft.add', 'idx', 'hotel{}'.format(i), 1.0, 'fields', 'name', hotel[0], 'location', '{},{}'.format(hotel[2], hotel[1]))) for _ in r.retry_with_rdb_reload(): res = r.execute_command('ft.search', 'idx', 'hilton') self.assertEqual(len(hotels), res[0]) res = gsearch('hilton', "-0.1757", "51.5156", '1') self.assertEqual(3, res[0]) self.assertEqual('hotel2', res[5]) self.assertEqual('hotel21', res[3]) self.assertEqual('hotel79', res[1]) res2 = gsearch_inline('hilton', "-0.1757", "51.5156", '1') self.assertListEqual(res, res2) res = gsearch('hilton', "-0.1757", "51.5156", '10') self.assertEqual(14, res[0]) self.assertEqual('hotel93', res[1]) self.assertEqual('hotel92', res[3]) self.assertEqual('hotel79', res[5]) res2 = gsearch('hilton', "-0.1757", "51.5156", '10000', 'm') self.assertListEqual(res, res2) res2 = gsearch_inline('hilton', "-0.1757", "51.5156", '10') self.assertListEqual(res, res2) res = gsearch('heathrow', -0.44155, 51.45865, '10', 'm') self.assertEqual(1, res[0]) self.assertEqual('hotel94', res[1]) res2 = gsearch_inline( 'heathrow', -0.44155, 51.45865, '10', 'm') self.assertListEqual(res, res2) res = gsearch('heathrow', -0.44155, 51.45865, '10', 'km') self.assertEqual(5, res[0]) self.assertIn('hotel94', res) res2 = gsearch_inline( 'heathrow', -0.44155, 51.45865, '10', 'km') self.assertListEqual(res, res2) res = gsearch('heathrow', -0.44155, 51.45865, '5', 'km') self.assertEqual(3, res[0]) self.assertIn('hotel94', res) res2 = gsearch_inline( 'heathrow', -0.44155, 51.45865, '5', 'km') self.assertListEqual(res, res2) def testAddHash(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command('ft.create', 'idx', 'schema', 'title', 'text', 'weight', 10.0, 'body', 'text', 'price', 'numeric')) self.assertTrue( r.hmset('doc1', {"title": "hello world", "body": "lorem ipsum", "price": 2})) self.assertTrue( r.hmset('doc2', {"title": "hello werld", "body": "lorem ipsum", "price": 5})) self.assertOk(r.execute_command('ft.addhash', 'idx', 'doc1', 1.0)) self.assertOk(r.execute_command('ft.addhash', 'idx', 'doc2', 1.0)) res = r.execute_command('ft.search', 'idx', "hello", "nocontent") self.assertEqual(3, len(res)) self.assertEqual(2, res[0]) self.assertEqual("doc1", res[2]) self.assertEqual("doc2", res[1]) res = r.execute_command( 'ft.search', 'idx', "hello", "filter", "price", "0", "3") self.assertEqual(3, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc1", res[1]) for element in ['body', 'lorem ipsum', 'price', '2', 'title', 'hello world']: self.assertTrue(element in res[2]) res = r.execute_command( 'ft.search', 'idx', "hello werld", "nocontent") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc2", res[1]) def testInfields(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'weight', 10.0, 'body', 'text', 'weight', 1.0)) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 0.5, 'fields', 'title', 'hello world', 'body', 'lorem ipsum')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'hello world lorem ipsum', 'body', 'hello world')) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'verbatim', "infields", 1, "title", "nocontent") self.assertEqual(3, len(res)) self.assertEqual(2, res[0]) self.assertEqual("doc2", res[1]) self.assertEqual("doc1", res[2]) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'verbatim', "infields", 1, "body", "nocontent") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc2", res[1]) res = r.execute_command( 'ft.search', 'idx', 'hello', 'verbatim', "infields", 1, "body", "nocontent") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc2", res[1]) res = r.execute_command( 'ft.search', 'idx', '\"hello world\"', 'verbatim', "infields", 1, "body", "nocontent") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc2", res[1]) res = r.execute_command( 'ft.search', 'idx', '\"lorem ipsum\"', 'verbatim', "infields", 1, "body", "nocontent") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) self.assertEqual("doc1", res[1]) res = r.execute_command( 'ft.search', 'idx', 'lorem ipsum', "infields", 2, "body", "title", "nocontent") self.assertEqual(3, len(res)) self.assertEqual(2, res[0]) self.assertEqual("doc2", res[1]) self.assertEqual("doc1", res[2]) def testScorerSelection(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) # this is the default scorer res = r.execute_command( 'ft.search', 'idx', 'foo', 'scorer', 'TFIDF') self.assertEqual(res, [0]) with self.assertResponseError(): res = r.execute_command( 'ft.search', 'idx', 'foo', 'scorer', 'NOSUCHSCORER') def testFieldSelectors(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'TiTle', 'text', 'BoDy', 'text', "יוניקוד", 'text', 'field.with,punct', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1, 'fields', 'title', 'hello world', 'body', 'foo bar', 'יוניקוד', 'unicode', 'field.with,punct', 'punt')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 0.5, 'fields', 'body', 'hello world', 'title', 'foo bar', 'יוניקוד', 'unicode', 'field.with,punct', 'punt')) res = r.execute_command( 'ft.search', 'idx', '@title:hello world', 'nocontent') self.assertEqual(res, [1, 'doc1']) res = r.execute_command( 'ft.search', 'idx', '@body:hello world', 'nocontent') self.assertEqual(res, [1, 'doc2']) res = r.execute_command( 'ft.search', 'idx', '@body:hello @title:world', 'nocontent') self.assertEqual(res, [0]) res = r.execute_command( 'ft.search', 'idx', '@body:hello world @title:world', 'nocontent') self.assertEqual(res, [0]) res = r.execute_command( 'ft.search', 'idx', '@BoDy:(hello|foo) @Title:(world|bar)', 'nocontent') self.assertEqual(res, [2, 'doc1', 'doc2']) res = r.execute_command( 'ft.search', 'idx', '@body:(hello|foo world|bar)', 'nocontent') self.assertEqual(res, [2, 'doc1', 'doc2']) res = r.execute_command( 'ft.search', 'idx', '@body|title:(hello world)', 'nocontent') self.assertEqual(res, [2, 'doc1', 'doc2']) res = r.execute_command( 'ft.search', 'idx', '@יוניקוד:(unicode)', 'nocontent') self.assertEqual(res, [2, 'doc1', 'doc2']) res = r.execute_command( 'ft.search', 'idx', '@field\\.with\\,punct:(punt)', 'nocontent') self.assertEqual(res, [2, 'doc1', 'doc2']) def testStemming(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 0.5, 'fields', 'title', 'hello kitty')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'hello kitties')) res = r.execute_command( 'ft.search', 'idx', 'hello kitty', "nocontent") self.assertEqual(3, len(res)) self.assertEqual(2, res[0]) res = r.execute_command( 'ft.search', 'idx', 'hello kitty', "nocontent", "verbatim") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) # test for unknown language with self.assertResponseError(): res = r.execute_command( 'ft.search', 'idx', 'hello kitty', "nocontent", "language", "foofoofian") def testExpander(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 0.5, 'fields', 'title', 'hello kitty')) res = r.execute_command( 'ft.search', 'idx', 'kitties', "nocontent", "expander", "SBSTEM") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) res = r.execute_command( 'ft.search', 'idx', 'kitties', "nocontent", "expander", "noexpander") self.assertEqual(1, len(res)) self.assertEqual(0, res[0]) res = r.execute_command( 'ft.search', 'idx', 'kitti', "nocontent") self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) res = r.execute_command( 'ft.search', 'idx', 'kitti', "nocontent", 'verbatim') self.assertEqual(1, len(res)) self.assertEqual(0, res[0]) # Calling a stem directly works even with VERBATIM. # You need to use the + prefix escaped res = r.execute_command( 'ft.search', 'idx', '\\+kitti', "nocontent", 'verbatim') self.assertEqual(2, len(res)) self.assertEqual(1, res[0]) def testNumericRange(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'score', 'numeric', 'price', 'numeric')) for i in xrange(100): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1, 'fields', 'title', 'hello kitty', 'score', i, 'price', 100 + 10 * i)) for _ in r.retry_with_rdb_reload(): res = r.execute_command('ft.search', 'idx', 'hello kitty', "nocontent", "filter", "score", 0, 100) self.assertEqual(11, len(res)) self.assertEqual(100, res[0]) res = r.execute_command('ft.search', 'idx', 'hello kitty', "nocontent", "filter", "score", 0, 50) self.assertEqual(51, res[0]) res = r.execute_command('ft.search', 'idx', 'hello kitty', 'verbatim', "nocontent", "limit", 0, 100, "filter", "score", "(0", "(50") self.assertEqual(49, res[0]) res = r.execute_command('ft.search', 'idx', 'hello kitty', "nocontent", "filter", "score", "-inf", "+inf") self.assertEqual(100, res[0]) # test multi filters scrange = (19, 90) prrange = (290, 385) res = r.execute_command('ft.search', 'idx', 'hello kitty', "filter", "score", scrange[ 0], scrange[1], "filter", "price", prrange[0], prrange[1]) # print res for doc in res[2::2]: sc = int(doc[doc.index('score') + 1]) pr = int(doc[doc.index('price') + 1]) self.assertTrue(sc >= scrange[0] and sc <= scrange[1]) self.assertGreaterEqual(pr, prrange[0]) self.assertLessEqual(pr, prrange[1]) self.assertEqual(10, res[0]) res = r.execute_command('ft.search', 'idx', 'hello kitty', "filter", "score", "19", "90", "filter", "price", "90", "185") self.assertEqual(0, res[0]) # Test numeric ranges as part of query syntax res = r.execute_command( 'ft.search', 'idx', 'hello kitty @score:[0 100]', "nocontent") self.assertEqual(11, len(res)) self.assertEqual(100, res[0]) res = r.execute_command( 'ft.search', 'idx', 'hello kitty @score:[0 50]', "nocontent") self.assertEqual(51, res[0]) res = r.execute_command( 'ft.search', 'idx', 'hello kitty @score:[(0 (50]', 'verbatim', "nocontent") self.assertEqual(49, res[0]) res = r.execute_command( 'ft.search', 'idx', '@score:[(0 (50]', 'verbatim', "nocontent") self.assertEqual(49, res[0]) res = r.execute_command( 'ft.search', 'idx', 'hello kitty -@score:[(0 (50]', 'verbatim', "nocontent") self.assertEqual(51, res[0]) res = r.execute_command( 'ft.search', 'idx', 'hello kitty @score:[-inf +inf]', "nocontent") self.assertEqual(100, res[0]) def testSuggestions(self): with self.redis() as r: r.flushdb() self.assertEqual(1, r.execute_command( 'ft.SUGADD', 'ac', 'hello world', 1)) self.assertEqual(1, r.execute_command( 'ft.SUGADD', 'ac', 'hello world', 1, 'INCR')) res = r.execute_command("FT.SUGGET", "ac", "hello") self.assertEqual(1, len(res)) self.assertEqual("hello world", res[0]) terms = ["hello werld", "hallo world", "yellow world", "wazzup", "herp", "derp"] sz = 2 for term in terms: self.assertEqual(sz, r.execute_command( 'ft.SUGADD', 'ac', term, sz - 1)) sz += 1 for _ in r.retry_with_rdb_reload(): self.assertEqual(7, r.execute_command('ft.SUGLEN', 'ac')) # search not fuzzy self.assertEqual(["hello world", "hello werld"], r.execute_command("ft.SUGGET", "ac", "hello")) # print r.execute_command("ft.SUGGET", "ac", "hello", "FUZZY", "MAX", "1", "WITHSCORES") # search fuzzy - shuold yield more results self.assertEqual(['hello world', 'hello werld', 'yellow world', 'hallo world'], r.execute_command("ft.SUGGET", "ac", "hello", "FUZZY")) # search fuzzy with limit of 1 self.assertEqual(['hello world'], r.execute_command("ft.SUGGET", "ac", "hello", "FUZZY", "MAX", "1")) # scores should return on WITHSCORES rc = r.execute_command( "ft.SUGGET", "ac", "hello", "WITHSCORES") self.assertEqual(4, len(rc)) self.assertTrue(float(rc[1]) > 0) self.assertTrue(float(rc[3]) > 0) rc = r.execute_command("ft.SUGDEL", "ac", "hello world") self.assertEqual(long(1), rc) rc = r.execute_command("ft.SUGDEL", "ac", "world") self.assertEqual(long(0), rc) rc = r.execute_command("ft.SUGGET", "ac", "hello") self.assertEqual(['hello werld'], rc) def testSuggestPayload(self): with self.redis() as r: r.flushdb() self.assertEqual(1, r.execute_command( 'ft.SUGADD', 'ac', 'hello world', 1, 'PAYLOAD', 'foo')) self.assertEqual(2, r.execute_command( 'ft.SUGADD', 'ac', 'hello werld', 1, 'PAYLOAD', 'bar')) self.assertEqual(3, r.execute_command( 'ft.SUGADD', 'ac', 'hello nopayload', 1, 'PAYLOAD', '')) self.assertEqual(4, r.execute_command( 'ft.SUGADD', 'ac', 'hello nopayload2', 1)) res = r.execute_command("FT.SUGGET", "ac", "hello", 'WITHPAYLOADS') self.assertListEqual(['hello world', 'foo', 'hello werld', 'bar', 'hello nopayload', None, 'hello nopayload2', None], res) res = r.execute_command("FT.SUGGET", "ac", "hello") self.assertListEqual(['hello world', 'hello werld', 'hello nopayload', 'hello nopayload2'], res) res = r.execute_command( "FT.SUGGET", "ac", "hello", 'WITHPAYLOADS', 'WITHSCORES') # we don't compare the scores beause they may change self.assertEqual(12, len(res)) def testPayload(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text')) for i in range(10): self.assertOk(r.execute_command('ft.add', 'idx', '%d' % i, 1.0, 'payload', 'payload %d' % i, 'fields', 'f', 'hello world')) for x in r.retry_with_rdb_reload(): res = r.execute_command( 'ft.search', 'idx', 'hello world') self.assertEqual(21, len(res)) res = r.execute_command( 'ft.search', 'idx', 'hello world', 'withpayloads') self.assertEqual(31, len(res)) self.assertEqual(10, res[0]) for i in range(1, 30, 3): self.assertEqual(res[i + 1], 'payload %s' % res[i]) def testGarbageCollector(self): N = 100 with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'foo', 'text')) for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'foo', ' '.join(('term%d' % random.randrange(0, 10) for i in range(10))))) def get_stats(r): res = r.execute_command('ft.info', 'idx') d = {res[i]: res[i + 1] for i in range(0, len(res), 2)} gc_stats = {d['gc_stats'][x]: float( d['gc_stats'][x + 1]) for x in range(0, len(d['gc_stats']), 2)} d['gc_stats'] = gc_stats return d stats = get_stats(r) self.assertGreater(stats['gc_stats']['current_hz'], 8) self.assertEqual(0, stats['gc_stats']['bytes_collected']) self.assertGreater(int(stats['num_records']), 0) initialIndexSize = float(stats['inverted_sz_mb']) * 1024 * 1024 for i in range(N): self.assertEqual(1, r.execute_command( 'ft.del', 'idx', 'doc%d' % i)) st = time.time() while st + 2 > time.time(): time.sleep(0.1) stats = get_stats(r) if stats['num_records'] == '0': break self.assertEqual('0', stats['num_docs']) self.assertEqual('0', stats['num_records']) self.assertEqual('100', stats['max_doc_id']) self.assertGreater(stats['gc_stats']['current_hz'], 50) currentIndexSize = float(stats['inverted_sz_mb']) * 1024 * 1024 # print initialIndexSize, currentIndexSize, # stats['gc_stats']['bytes_collected'] self.assertGreater(initialIndexSize, currentIndexSize) self.assertGreater(stats['gc_stats'][ 'bytes_collected'], currentIndexSize) for i in range(10): res = r.execute_command('ft.search', 'idx', 'term%d' % i) self.assertEqual([0], res) def testReturning(self): self.assertCmdOk('ft.create', 'idx', 'schema', 'f1', 'text', 'f2', 'text', 'n1', 'numeric', 'f3', 'text') for i in range(10): self.assertCmdOk('ft.add', 'idx', 'DOC_{0}'.format(i), 1.0, 'fields', 'f2', 'val2', 'f1', 'val1', 'f3', 'val3', 'n1', i) # RETURN 0. Simplest case for x in self.retry_with_reload(): res = self.cmd('ft.search', 'idx', 'val*', 'return', '0') self.assertEqual(11, len(res)) self.assertEqual(10, res[0]) for r in res[1:]: self.assertTrue(r.startswith('DOC_')) for field in ('f1', 'f2', 'f3', 'n1'): res = self.cmd('ft.search', 'idx', 'val*', 'return', 1, field) self.assertEqual(21, len(res)) self.assertEqual(10, res[0]) for pair in grouper(res[1:], 2): docname, fields = pair self.assertEqual(2, len(fields)) self.assertEqual(field, fields[0]) self.assertTrue(docname.startswith('DOC_')) # Test when field is not found res = self.cmd('ft.search', 'idx', 'val*', 'return', 1, 'nonexist') self.assertEqual(21, len(res)) self.assertEqual(10, res[0]) for pair in grouper(res[1:], 2): _, pair = pair self.assertEqual(None, pair[1]) # Test that we don't crash if we're given the wrong number of fields with self.assertResponseError(): res = self.cmd('ft.search', 'idx', 'val*', 'return', 2, 'nonexist') def _test_create_options_real(self, *options): options = [x for x in options if x] has_offsets = 'NOOFFSETS' not in options has_fields = 'NOFIELDS' not in options has_freqs = 'NOFREQS' not in options try: self.cmd('ft.drop', 'idx') except: pass options = ['idx'] + options + ['schema', 'f1', 'text', 'f2', 'text'] self.assertCmdOk('ft.create', *options) for i in range(10): self.assertCmdOk('ft.add', 'idx', 'doc{}'.format( i), 0.5, 'fields', 'f1', 'value for {}'.format(i)) # Query res = self.cmd('ft.search', 'idx', "value for 3") if not has_offsets: self.assertFalse(res) else: self.assertTrue(res) # Frequencies: self.assertCmdOk('ft.add', 'idx', 'doc100', 1.0, 'fields', 'f1', 'foo bar') self.assertCmdOk('ft.add', 'idx', 'doc200', 1.0, 'fields', 'f1', ('foo ' * 10) + ' bar') res = self.cmd('ft.search', 'idx', 'foo') self.assertEqual(2, res[0]) if has_offsets: docname = res[1] if has_freqs: self.assertEqual('doc200', docname) else: self.assertEqual('doc100', docname) self.assertCmdOk('ft.add', 'idx', 'doc300', 1.0, 'fields', 'f1', 'Hello') res = self.cmd('ft.search', 'idx', '@f2:Hello') if has_fields: self.assertEqual(1, len(res)) else: self.assertEqual(3, len(res)) def testCreationOptions(self): from itertools import combinations for x in range(1, 5): for combo in combinations(('NOOFSETS', 'NOFREQS', 'NOFIELDS', ''), x): self._test_create_options_real(*combo) def testInfoCommand(self): from itertools import combinations with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'NOFIELDS', 'schema', 'title', 'text')) N = 50 for i in xrange(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1, 'replace', 'fields', 'title', 'hello term%d' % i)) for _ in r.retry_with_rdb_reload(): res = r.execute_command('ft.info', 'idx') d = {res[i]: res[i + 1] for i in range(0, len(res), 2)} self.assertEqual(d['index_name'], 'idx') self.assertEqual(d['index_options'], ['NOFIELDS']) self.assertListEqual( d['fields'], [['title', 'type', 'TEXT', 'WEIGHT', '1']]) self.assertEqual(int(d['num_docs']), N) self.assertEqual(int(d['num_terms']), N + 1) self.assertEqual(int(d['max_doc_id']), N) self.assertEqual(int(d['records_per_doc_avg']), 2) self.assertEqual(int(d['num_records']), N * 2) self.assertGreater(float(d['offset_vectors_sz_mb']), 0) self.assertGreater(float(d['key_table_size_mb']), 0) self.assertGreater(float(d['inverted_sz_mb']), 0) self.assertGreater(float(d['bytes_per_record_avg']), 0) self.assertGreater(float(d['doc_table_size_mb']), 0) for x in range(1, 5): for combo in combinations(('NOOFFSETS', 'NOFREQS', 'NOFIELDS', ''), x): combo = list(filter(None, combo)) options = combo + ['schema', 'f1', 'text'] try: self.cmd('ft.drop', 'idx') except: pass self.assertCmdOk('ft.create', 'idx', *options) info = self.cmd('ft.info', 'idx') ix = info.index('index_options') self.assertFalse(ix == -1) opts = info[ix + 1] # make sure that an empty opts string returns no options in # info if not combo: self.assertListEqual([], opts) for option in filter(None, combo): self.assertTrue(option in opts) def testNoStem(self): self.cmd('ft.create', 'idx', 'schema', 'body', 'text', 'name', 'text', 'nostem') for _ in self.retry_with_reload(): try: self.cmd('ft.del', 'idx', 'doc') except redis.ResponseError: pass # Insert a document self.assertCmdOk('ft.add', 'idx', 'doc', 1.0, 'fields', 'body', "located", 'name', "located") # Now search for the fields res_body = self.cmd('ft.search', 'idx', '@body:location') res_name = self.cmd('ft.search', 'idx', '@name:location') self.assertEqual(0, res_name[0]) self.assertEqual(1, res_body[0]) def testSearchNonexistField(self): # GH Issue 133 self.cmd('ft.create', 'idx', 'schema', 'title', 'text', 'weight', 5.0, 'body', 'text', 'url', 'text') self.cmd('ft.add', 'idx', 'd1', 1.0, 'nosave', 'fields', 'title', 'hello world', 'body', 'lorem dipsum', 'place', '-77.0366 38.8977') self.cmd('ft.search', 'idx', 'Foo', 'GEOFILTER', 'place', '-77.0366', '38.8977', '1', 'km') def testSortbyMissingField(self): # GH Issue 131 self.cmd('ft.create', 'ix', 'schema', 'txt', 'text', 'num', 'numeric', 'sortable') self.cmd('ft.add', 'ix', 'doc1', 1.0, 'fields', 'txt', 'foo') self.cmd('ft.search', 'ix', 'foo', 'sortby', 'num') def testParallelIndexing(self): # GH Issue 207 self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') from threading import Thread self.server.client() ndocs = 100 def runner(tid): cli = self.server.client() for num in range(ndocs): cli.execute_command('ft.add', 'idx', 'doc{}_{}'.format(tid, num), 1.0, 'fields', 'txt', 'hello world' * 20) ths = [] for tid in range(10): ths.append(Thread(target=runner, args=(tid,))) [th.start() for th in ths] [th.join() for th in ths] res = self.cmd('ft.info', 'idx') d = {res[i]: res[i + 1] for i in range(0, len(res), 2)} self.assertEqual(1000, int(d['num_docs'])) def testDoubleAdd(self): # Tests issue #210 self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'txt', 'hello world') with self.assertResponseError(): self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'txt', 'goodbye world') self.assertEqual('hello world', self.cmd('ft.get', 'idx', 'doc1')[1]) self.assertEqual(0, self.cmd('ft.search', 'idx', 'goodbye')[0]) self.assertEqual(1, self.cmd('ft.search', 'idx', 'hello')[0]) # Now with replace self.cmd('ft.add', 'idx', 'doc1', 1.0, 'replace', 'fields', 'txt', 'goodbye world') self.assertEqual(1, self.cmd('ft.search', 'idx', 'goodbye')[0]) self.assertEqual(0, self.cmd('ft.search', 'idx', 'hello')[0]) self.assertEqual('goodbye world', self.cmd('ft.get', 'idx', 'doc1')[1]) def testConcurrentErrors(self): from multiprocessing import Process import random self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') docs_per_thread = 100 num_threads = 50 docIds = ['doc{}'.format(x) for x in range(docs_per_thread)] def thrfn(): myIds = docIds[::] random.shuffle(myIds) cli = self.server.client() with cli.pipeline(transaction=False) as pl: for x in myIds: pl.execute_command('ft.add', 'idx', x, 1.0, 'fields', 'txt', ' hello world ' * 50) try: pl.execute() except Exception as e: pass # print e thrs = [Process(target=thrfn) for x in range(num_threads)] [th.start() for th in thrs] [th.join() for th in thrs] res = self.cmd('ft.info', 'idx') d = {res[i]: res[i + 1] for i in range(0, len(res), 2)} self.assertEqual(100, int(d['num_docs'])) def testBinaryKeys(self): self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') # Insert a document self.cmd('ft.add', 'idx', 'Hello', 1.0, 'fields', 'txt', 'NoBin match') self.cmd('ft.add', 'idx', 'Hello\x00World', 1.0, 'fields', 'txt', 'Bin match') for _ in self.client.retry_with_rdb_reload(): res = self.cmd('ft.search', 'idx', 'match') self.assertEqual(res, [long(2), 'Hello\x00World', [ 'txt', 'Bin match'], 'Hello', ['txt', 'NoBin match']]) def testNonDefaultDb(self): # Should be ok self.cmd('FT.CREATE', 'idx1', 'schema', 'txt', 'text') self.cmd('SELECT 1') # Should fail with self.assertResponseError(): self.cmd('FT.CREATE', 'idx2', 'schema', 'txt', 'text') def testDuplicateNonspecFields(self): self.cmd('FT.CREATE', 'idx', 'schema', 'txt', 'text') self.cmd('FT.ADD', 'idx', 'doc', 1.0, 'fields', 'f1', 'f1val', 'f1', 'f1val2', 'F1', 'f1Val3') res = self.cmd('ft.get', 'idx', 'doc') res = {res[i]: res[i + 1] for i in range(0, len(res), 2)} self.assertTrue(res['f1'] in ('f1val', 'f1val2')) self.assertEqual('f1Val3', res['F1']) def testDuplicateFields(self): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'txt', 'TEXT', 'num', 'NUMERIC', 'SORTABLE') for _ in self.retry_with_reload(): # Ensure the index assignment is correct after an rdb load with self.assertResponseError(): self.cmd('FT.ADD', 'idx', 'doc', 1.0, 'FIELDS', 'txt', 'foo', 'txt', 'bar', 'txt', 'baz') # Try add hash self.cmd('HMSET', 'newDoc', 'txt', 'foo', 'Txt', 'bar', 'txT', 'baz') # Get the actual value: from redis import ResponseError caught = False try: self.cmd('FT.ADDHASH', 'idx', 'newDoc', 1.0) except ResponseError as err: caught = True self.assertTrue('twice' in str(err)) self.assertTrue(caught) # Try with REPLACE with self.assertResponseError(): self.cmd('FT.ADD', 'idx', 'doc2', 1.0, 'REPLACE', 'FIELDS', 'txt', 'foo', 'txt', 'bar') # With replace partial self.cmd('FT.ADD', 'idx', 'doc2', 1.0, 'REPLACE', 'PARTIAL', 'FIELDS', 'num', 42) with self.assertResponseError(): self.cmd('FT.ADD', 'idx', 'doc2', 1.0, 'REPLACE', 'PARTIAL', 'FIELDS', 'num', 42, 'num', 32) def testDuplicateSpec(self): with self.assertResponseError(): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'f1', 'text', 'n1', 'numeric', 'f1', 'text') def testSortbyMissingFieldSparse(self): # Note, the document needs to have one present sortable field in # order for the indexer to give it a sort vector self.cmd('ft.create', 'idx', 'SCHEMA', 'lastName', 'text', 'SORTABLE', 'firstName', 'text', 'SORTABLE') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'lastName', 'mark') res = self.cmd('ft.search', 'idx', 'mark', 'WITHSORTKEYS', "SORTBY", "firstName", "ASC", "lastName", "DESC", "limit", 0, 100) self.assertEqual([long(1), 'doc1', None, ['lastName', 'mark']], res) def testLuaAndMulti(self): # Ensure we can work in Lua and Multi environments without crashing self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'f1', 'text', 'n1', 'numeric') self.cmd('HMSET', 'hashDoc', 'f1', 'v1', 'n1', 4) self.cmd('HMSET', 'hashDoc2', 'f1', 'v1', 'n1', 5) r = self.client r.eval( "return redis.call('ft.add', 'idx', 'doc1', 1.0, 'fields', 'f1', 'bar')", "0") r.eval("return redis.call('ft.addhash', 'idx', 'hashDoc', 1.0)", 0) # Try in a pipeline: with r.pipeline(transaction=True) as pl: pl.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'f1', 'v3') pl.execute_command('ft.add', 'idx', 'doc3', 1.0, 'fields', 'f1', 'v4') pl.execute_command('ft.addhash', 'idx', 'hashdoc2', 1.0) pl.execute() def testLanguageField(self): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'language', 'TEXT') self.cmd('FT.ADD', 'idx', 'doc1', 1.0, 'FIELDS', 'language', 'gibberish') res = self.cmd('FT.SEARCH', 'idx', 'gibberish') self.assertEqual([long(1), 'doc1', ['language', 'gibberish']], res) # The only way I can verify that LANGUAGE is parsed twice is ensuring we # provide a wrong language. This is much easier to test than trying to # figure out how a given word is stemmed with self.assertResponseError(): self.cmd('FT.ADD', 'idx', 'doc1', 1.0, 'LANGUAGE', 'blah', 'FIELDS', 'language', 'gibber') def testUninitSortvector(self): # This would previously crash self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'f1', 'TEXT') for x in range(2000): self.cmd('FT.ADD', 'idx', 'doc{}'.format( x), 1.0, 'FIELDS', 'f1', 'HELLO') self.cmd('SAVE') for x in range(10): self.cmd('DEBUG RELOAD') def testAlterIndex(self): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'f1', 'TEXT') self.cmd('FT.ADD', 'idx', 'doc1', 1.0, 'FIELDS', 'f1', 'hello', 'f2', 'world') self.cmd('FT.ALTER', 'idx', 'SCHEMA', 'ADD', 'f2', 'TEXT') self.cmd('FT.ADD', 'idx', 'doc2', 1.0, 'FIELDS', 'f1', 'hello', 'f2', 'world') for _ in self.retry_with_reload(): ret = self.cmd('FT.SEARCH', 'idx', 'world') self.assertEqual([1, 'doc2', ['f1', 'hello', 'f2', 'world']], ret) self.cmd('FT.ALTER', 'idx', 'SCHEMA', 'ADD', 'f3', 'TEXT', 'SORTABLE') for x in range(10): self.cmd('FT.ADD', 'idx', 'doc{}'.format(x + 3), 1.0, 'FIELDS', 'f1', 'hello', 'f3', 'val{}'.format(x)) for _ in self.retry_with_reload(): # Test that sortable works res = self.cmd('FT.SEARCH', 'idx', 'hello', 'SORTBY', 'f3', 'DESC') self.assertEqual( [12, 'doc12', ['f1', 'hello', 'f3', 'val9'], 'doc11', ['f1', 'hello', 'f3', 'val8'], 'doc10', ['f1', 'hello', 'f3', 'val7'], 'doc9', ['f1', 'hello', 'f3', 'val6'], 'doc8', ['f1', 'hello', 'f3', 'val5'], 'doc7', ['f1', 'hello', 'f3', 'val4'], 'doc6', ['f1', 'hello', 'f3', 'val3'], 'doc5', ['f1', 'hello', 'f3', 'val2'], 'doc4', ['f1', 'hello', 'f3', 'val1'], 'doc3', ['f1', 'hello', 'f3', 'val0']], res) # Test that we can add a numeric field self.cmd('FT.ALTER', 'idx', 'SCHEMA', 'ADD', 'n1', 'NUMERIC') self.cmd('FT.ADD', 'idx', 'docN1', 1.0, 'FIELDS', 'n1', 50) self.cmd('FT.ADD', 'idx', 'docN2', 1.0, 'FIELDS', 'n1', 250) for _ in self.retry_with_reload(): res = self.cmd('FT.SEARCH', 'idx', '@n1:[0 100]') self.assertEqual([1, 'docN1', ['n1', '50']], res) def testAlterValidation(self): # Test that constraints for ALTER comand self.cmd('FT.CREATE', 'idx1', 'SCHEMA', 'f0', 'TEXT') for x in range(1, 32): self.cmd('FT.ALTER', 'idx1', 'SCHEMA', 'ADD', 'f{}'.format(x), 'TEXT') # OK for now. # Should be too many indexes self.assertRaises(redis.ResponseError, self.cmd, 'FT.ALTER', 'idx1', 'SCHEMA', 'ADD', 'tooBig', 'TEXT') self.cmd('FT.CREATE', 'idx2', 'MAXTEXTFIELDS', 'SCHEMA', 'f0', 'TEXT') # print self.cmd('FT.INFO', 'idx2') for x in range(1, 50): self.cmd('FT.ALTER', 'idx2', 'SCHEMA', 'ADD', 'f{}'.format(x + 1), 'TEXT') self.cmd('FT.ADD', 'idx2', 'doc1', 1.0, 'FIELDS', 'f50', 'hello') for _ in self.retry_with_reload(): ret = self.cmd('FT.SEARCH', 'idx2', '@f50:hello') self.assertEqual([1, 'doc1', ['f50', 'hello']], ret) self.cmd('FT.CREATE', 'idx3', 'SCHEMA', 'f0', 'text') # Try to alter the index with garbage self.assertRaises(redis.ResponseError, self.cmd, 'FT.ALTER', 'idx3', 'SCHEMA', 'ADD', 'f1', 'TEXT', 'f2', 'garbage') ret = to_dict(self.cmd('ft.info', 'idx3')) self.assertEqual(1, len(ret['fields'])) self.assertRaises(redis.ResponseError, self.cmd, 'FT.ALTER', 'nonExist', 'SCHEMA', 'ADD', 'f1', 'TEXT') # test with no fields! self.assertRaises(redis.ResponseError, self.cmd, 'FT.ALTER', 'idx2', 'SCHEMA', 'ADD') def testIssue366(self): # Test random RDB regressions, see GH 366 self.cmd('FT.CREATE', 'idx1', 'SCHEMA', 'textfield', 'TEXT', 'numfield', 'NUMERIC') self.cmd('HSET', 'foo', 'textfield', 'blah', 'numfield', 1) self.cmd('FT.ADDHASH', 'idx1', 'foo', 1, 'replace') self.cmd('FT.DEL', 'idx1', 'foo') for _ in self.retry_with_reload(): pass # --just ensure it doesn't crash # FT.CREATE atest SCHEMA textfield TEXT numfield NUMERIC # FT.ADD atest anId 1 PAYLOAD '{"hello":"world"}' FIELDS textfield sometext numfield 1234 # FT.ADD atest anId 1 PAYLOAD '{"hello":"world2"}' REPLACE PARTIAL FIELDS numfield 1111 # shutdown self.cmd('FT.CREATE', 'idx2', 'SCHEMA', 'textfield', 'TEXT', 'numfield', 'NUMERIC') self.cmd('FT.ADD', 'idx1', 'doc1', 1, 'PAYLOAD', '{"hello":"world"}', 'FIELDS', 'textfield', 'sometext', 'numfield', 1234) self.cmd('ft.add', 'idx1', 'doc1', 1, 'PAYLOAD', '{"hello":"world2"}', 'REPLACE', 'PARTIAL', 'FIELDS', 'textfield', 'sometext', 'numfield', 1111) for _ in self.retry_with_reload(): pass # def testReplaceReload(self): self.cmd('FT.CREATE', 'idx2', 'SCHEMA', 'textfield', 'TEXT', 'numfield', 'NUMERIC') # Create a document and then replace it. self.cmd('FT.ADD', 'idx2', 'doc2', 1.0, 'FIELDS', 'textfield', 's1', 'numfield', 99) self.cmd('FT.ADD', 'idx2', 'doc2', 1.0, 'REPLACE', 'PARTIAL', 'FIELDS', 'textfield', 's100', 'numfield', 990) self.server.dump_and_reload() # RDB Should still be fine self.cmd('FT.ADD', 'idx2', 'doc2', 1.0, 'REPLACE', 'PARTIAL', 'FIELDS', 'textfield', 's200', 'numfield', 1090) doc = to_dict(self.cmd('FT.GET', 'idx2', 'doc2')) self.assertEqual('s200', doc['textfield']) self.assertEqual('1090', doc['numfield']) def grouper(iterable, n, fillvalue=None): "Collect data into fixed-length chunks or blocks" try: from itertools import zip_longest # python3 except: from itertools import izip_longest as zip_longest # python2 # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx args = [iter(iterable)] * n return zip_longest(fillvalue=fillvalue, *args) def to_dict(r): return {r[i]: r[i + 1] for i in range(0, len(r), 2)} if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_aggregate.py000066400000000000000000000436241364126773500212320ustar00rootroot00000000000000from rmtest import BaseModuleTestCase from redis._compat import (long, iteritems) import redis import bz2 import json import unittest import itertools import pprint import sys import os def to_dict(res): d = {res[i]: res[i + 1] for i in range(0, len(res), 2)} return d GAMES_JSON = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'games.json.bz2') class AggregateTestCase(BaseModuleTestCase): # ingested = False @property def module_args(self): args = super(AggregateTestCase, self).module_args return args + ['SAFEMODE'] def ingest(self): try: self.cmd('FT.CREATE', 'games', 'SCHEMA', 'title', 'TEXT', 'SORTABLE', 'brand', 'TEXT', 'NOSTEM', 'SORTABLE', 'description', 'TEXT', 'price', 'NUMERIC', 'SORTABLE', 'categories', 'TAG') except: return client = self.client fp = bz2.BZ2File(GAMES_JSON, 'r') for line in fp: obj = json.loads(line) id = obj['asin'] del obj['asin'] obj['price'] = obj.get('price') or 0 obj['categories'] = ','.join(obj['categories']) cmd = ['FT.ADD', 'games', id, 1, 'FIELDS', ] + \ [str(x) if x is not None else '' for x in itertools.chain( *obj.items())] # print cmd self.cmd(*cmd) def setUp(self): self.ingest() def _testGroupBy(self): cmd = ['ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'count', '0', 'AS', 'count', 'SORTBY', 2, '@count', 'desc', 'LIMIT', '0', '5' ] res = self.cmd(*cmd) self.assertIsNotNone(res) self.assertEqual([long(292), ['brand', '', 'count', '1518'], ['brand', 'mad catz', 'count', '43'], [ 'brand', 'generic', 'count', '40'], ['brand', 'steelseries', 'count', '37'], ['brand', 'logitech', 'count', '35']], res) def _testMinMax(self): cmd = ['ft.aggregate', 'games', 'sony', 'GROUPBY', '1', '@brand', 'REDUCE', 'count', '0', 'REDUCE', 'min', '1', '@price', 'as', 'minPrice', 'SORTBY', '2', '@minPrice', 'DESC'] res = self.cmd(*cmd) self.assertIsNotNone(res) row = to_dict(res[1]) self.assertEqual(88, int(float(row['minPrice']))) cmd = ['ft.aggregate', 'games', 'sony', 'GROUPBY', '1', '@brand', 'REDUCE', 'count', '0', 'REDUCE', 'max', '1', '@price', 'as', 'maxPrice', 'SORTBY', '2', '@maxPrice', 'DESC'] res = self.cmd(*cmd) row = to_dict(res[1]) self.assertEqual(695, int(float(row['maxPrice']))) def _testAvg(self): cmd = ['ft.aggregate', 'games', 'sony', 'GROUPBY', '1', '@brand', 'REDUCE', 'avg', '1', '@price', 'AS', 'avg_price', 'REDUCE', 'count', '0', 'SORTBY', '2', '@avg_price', 'DESC'] res = self.cmd(*cmd) self.assertIsNotNone(res) self.assertEqual(26, res[0]) # Ensure the formatting actually exists first_row = to_dict(res[1]) self.assertEqual(109, int(float(first_row['avg_price']))) for row in res[1:]: row = to_dict(row) self.assertIn('avg_price', row) # Test aliasing cmd = ['FT.AGGREGATE', 'games', 'sony', 'GROUPBY', '1', '@brand', 'REDUCE', 'avg', '1', '@price', 'AS', 'avgPrice'] res = self.cmd(*cmd) first_row = to_dict(res[1]) self.assertEqual(17, int(float(first_row['avgPrice']))) def _testCountDistinct(self): cmd = ['FT.AGGREGATE', 'games', '*', 'GROUPBY', '1', '@categories', 'REDUCE', 'COUNT_DISTINCT', '1', '@title', 'AS', 'count_distinct(title)', 'REDUCE', 'COUNT', '0' ] res = self.cmd(*cmd)[1:] row = to_dict(res[0]) self.assertEqual(2207, int(row['count_distinct(title)'])) cmd = ['FT.AGGREGATE', 'games', '*', 'GROUPBY', '1', '@categories', 'REDUCE', 'COUNT_DISTINCTISH', '1', '@title', 'AS', 'count_distinctish(title)', 'REDUCE', 'COUNT', '0' ] res = self.cmd(*cmd)[1:] row = to_dict(res[0]) self.assertEqual(2144, int(row['count_distinctish(title)'])) def _testQuantile(self): cmd = ['FT.AGGREGATE', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'QUANTILE', '2', '@price', '0.50', 'AS', 'q50', 'REDUCE', 'QUANTILE', '2', '@price', '0.90', 'AS', 'q90', 'REDUCE', 'QUANTILE', '2', '@price', '0.95', 'AS', 'q95', 'REDUCE', 'AVG', '1', '@price', 'REDUCE', 'COUNT', '0', 'SORTBY', '2', '@count', 'DESC', 'MAX', '10', 'LIMIT', '0', '10'] res = self.cmd(*cmd) row = to_dict(res[1]) self.assertEqual('14.99', row['q50']) self.assertEqual(106, int(float(row['q90']))) self.assertEqual(99, int(float(row['q95']))) def _testStdDev(self): cmd = ['FT.AGGREGATE', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'STDDEV', '1', '@price', 'AS', 'stddev(price)', 'REDUCE', 'AVG', '1', '@price', 'AS', 'avgPrice', 'REDUCE', 'QUANTILE', '2', '@price', '0.50', 'AS', 'q50Price', 'REDUCE', 'COUNT', '0', 'SORTBY', '2', '@count', 'DESC', 'LIMIT', '0', '10'] res = self.cmd(*cmd) row = to_dict(res[1]) self.assertEqual(14, int(float(row['q50Price']))) self.assertEqual(53, int(float(row['stddev(price)']))) self.assertEqual(29, int(float(row['avgPrice']))) def _testParseTime(self): cmd = ['FT.AGGREGATE', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'COUNT', '0', 'AS', 'count', 'APPLY', 'timefmt(1517417144)', 'AS', 'dt', 'APPLY', 'parse_time("%FT%TZ", @dt)', 'as', 'parsed_dt', 'LIMIT', '0', '1'] res = self.cmd(*cmd) self.assertEqual(['brand', '', 'count', '1518', 'dt', '2018-01-31T16:45:44Z', 'parsed_dt', '1517417144'], res[1]) def _testRandomSample(self): cmd = ['FT.AGGREGATE', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'COUNT', '0', 'AS', 'num', 'REDUCE', 'RANDOM_SAMPLE', '2', '@price', '10', 'SORTBY', '2', '@num', 'DESC', 'MAX', '10'] for row in self.cmd(*cmd)[1:]: self.assertIsInstance(row[5], list) self.assertGreater(len(row[5]), 0) self.assertGreaterEqual(int(row[3]), len(row[5])) self.assertLessEqual(len(row[5]), 10) def _testTimeFunctions(self): cmd = ['FT.AGGREGATE', 'games', '*', 'APPLY', '1517417144', 'AS', 'dt', 'APPLY', 'timefmt(@dt)', 'AS', 'timefmt', 'APPLY', 'day(@dt)', 'AS', 'day', 'APPLY', 'hour(@dt)', 'AS', 'hour', 'APPLY', 'minute(@dt)', 'AS', 'minute', 'APPLY', 'month(@dt)', 'AS', 'month', 'APPLY', 'dayofweek(@dt)', 'AS', 'dayofweek', 'APPLY', 'dayofmonth(@dt)', 'AS', 'dayofmonth', 'APPLY', 'dayofyear(@dt)', 'AS', 'dayofyear', 'APPLY', 'year(@dt)', 'AS', 'year', 'LIMIT', '0', '1'] res = self.cmd(*cmd) self.assertListEqual([long(1), ['dt', '1517417144', 'timefmt', '2018-01-31T16:45:44Z', 'day', '1517356800', 'hour', '1517414400', 'minute', '1517417100', 'month', '1514764800', 'dayofweek', '3', 'dayofmonth', '31', 'dayofyear', '30', 'year', '2018']], res) def _testStringFormat(self): cmd = ['FT.AGGREGATE', 'games', '@brand:sony', 'GROUPBY', '2', '@title', '@brand', 'REDUCE', 'COUNT', '0', 'REDUCE', 'MAX', '1', 'PRICE', 'AS', 'price', 'APPLY', 'format("%s|%s|%s|%s", @title, @brand, "Mark", @price)', 'as', 'titleBrand', 'LIMIT', '0', '10'] res = self.cmd(*cmd) for row in res[1:]: row = to_dict(row) expected = '%s|%s|%s|%g' % ( row['title'], row['brand'], 'Mark', float(row['price'])) self.assertEqual(expected, row['titleBrand']) def _testSum(self): cmd = ['ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'count', '0', 'AS', 'count', 'REDUCE', 'sum', 1, '@price', 'AS', 'sum(price)', 'SORTBY', 2, '@sum(price)', 'desc', 'LIMIT', '0', '5' ] res = self.cmd(*cmd) self.assertEqual([long(292), ['brand', '', 'count', '1518', 'sum(price)', '44780.69'], ['brand', 'mad catz', 'count', '43', 'sum(price)', '3973.48'], ['brand', 'razer', 'count', '26', 'sum(price)', '2558.58'], ['brand', 'logitech', 'count', '35', 'sum(price)', '2329.21'], ['brand', 'steelseries', 'count', '37', 'sum(price)', '1851.12']], res) def _testFilter(self): cmd = ['ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'count', '0', 'AS', 'count', 'FILTER', '@count > 5' ] res = self.cmd(*cmd) for row in res[1:]: row = to_dict(row) self.assertGreater(int(row['count']), 5) cmd = ['ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'count', '0', 'AS', 'count', 'FILTER', '@count < 5', 'FILTER', '@count > 2 && @brand != ""' ] res = self.cmd(*cmd) for row in res[1:]: row = to_dict(row) self.assertLess(int(row['count']), 5) self.assertGreater(int(row['count']), 2) def _testToList(self): cmd = ['ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'count_distinct', '1', '@price', 'as', 'count', 'REDUCE', 'tolist', 1, '@price', 'as', 'prices', 'SORTBY', 2, '@count', 'desc', 'LIMIT', '0', '5' ] res = self.cmd(*cmd) for row in res[1:]: row = to_dict(row) self.assertEqual(int(row['count']), len(row['prices'])) def _testSortBy(self): res = self.cmd('ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'sum', 1, '@price', 'as', 'price', 'SORTBY', 2, '@price', 'desc', 'LIMIT', '0', '2') self.assertListEqual([long(292), ['brand', '', 'price', '44780.69'], [ 'brand', 'mad catz', 'price', '3973.48']], res) res = self.cmd('ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'sum', 1, '@price', 'as', 'price', 'SORTBY', 2, '@price', 'asc', 'LIMIT', '0', '2') self.assertListEqual([long(292), ['brand', 'myiico', 'price', '0.23'], [ 'brand', 'crystal dynamics', 'price', '0.25']], res) # Test MAX with limit higher than it res = self.cmd('ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'sum', 1, '@price', 'as', 'price', 'SORTBY', 2, '@price', 'asc', 'MAX', 2, 'LIMIT', '0', '10') self.assertListEqual([long(292), ['brand', 'myiico', 'price', '0.23'], [ 'brand', 'crystal dynamics', 'price', '0.25']], res) # Test Sorting by multiple properties res = self.cmd('ft.aggregate', 'games', '*', 'GROUPBY', '1', '@brand', 'REDUCE', 'sum', 1, '@price', 'as', 'price', 'APPLY', '(@price % 10)', 'AS', 'price', 'SORTBY', 4, '@price', 'asc', '@brand', 'desc', 'MAX', 10, ) self.assertListEqual([long(292), ['brand', 'zps', 'price', '0'], ['brand', 'zalman', 'price', '0'], ['brand', 'yoozoo', 'price', '0'], ['brand', 'white label', 'price', '0'], ['brand', 'stinky', 'price', '0'], [ 'brand', 'polaroid', 'price', '0'], ['brand', 'plantronics', 'price', '0'], ['brand', 'ozone', 'price', '0'], ['brand', 'oooo', 'price', '0'], ['brand', 'neon', 'price', '0']], res) def _testExpressions(self): pass def _testNoGroup(self): res = self.cmd('ft.aggregate', 'games', '*', 'LOAD', '2', '@brand', '@price', 'APPLY', 'floor(sqrt(@price)) % 10', 'AS', 'price', 'SORTBY', 4, '@price', 'desc', '@brand', 'desc', 'MAX', 5, ) self.assertListEqual([long(2265), ['brand', 'Xbox', 'price', '9'], ['brand', 'Turtle Beach', 'price', '9'], [ 'brand', 'Trust', 'price', '9'], ['brand', 'SteelSeries', 'price', '9'], ['brand', 'Speedlink', 'price', '9']], res) def _testLoad(self): res = self.cmd('ft.aggregate', 'games', '*', 'LOAD', '3', '@brand', '@price', '@nonexist', 'LIMIT', 0, 5 ) self.assertListEqual([long(1), ['brand', 'Dark Age Miniatures', 'price', '31.23', 'nonexist', None], ['brand', 'Palladium Books', 'price', '9.55', 'nonexist', None], [ 'brand', '', 'price', '0', 'nonexist', None], ['brand', 'Evil Hat Productions', 'price', '15.48', 'nonexist', None], ['brand', 'Fantasy Flight Games', 'price', '33.96', 'nonexist', None]], res) def _testSplit(self): res = self.cmd('ft.aggregate', 'games', '*', 'APPLY', 'split("hello world, foo,,,bar,", ",", " ")', 'AS', 'strs', 'APPLY', 'split("hello world, foo,,,bar,", " ", ",")', 'AS', 'strs2', 'APPLY', 'split("hello world, foo,,,bar,", "", "")', 'AS', 'strs3', 'APPLY', 'split("hello world, foo,,,bar,")', 'AS', 'strs4', 'APPLY', 'split("hello world, foo,,,bar,",",")', 'AS', 'strs5', 'APPLY', 'split("")', 'AS', 'empty', 'LIMIT', '0', '1' ) self.assertListEqual([long(1), ['strs', ['hello world', 'foo', 'bar'], 'strs2', ['hello', 'world', 'foo,,,bar'], 'strs3', ['hello world, foo,,,bar,'], 'strs4', ['hello world', 'foo', 'bar'], 'strs5', ['hello world', 'foo', 'bar'], 'empty', []]], res) def _testFirstValue(self): res = self.cmd('ft.aggregate', 'games', '@brand:(sony|matias|beyerdynamic|(mad catz))', 'GROUPBY', 1, '@brand', 'REDUCE', 'FIRST_VALUE', 4, '@title', 'BY', '@price', 'DESC', 'AS', 'top_item', 'REDUCE', 'FIRST_VALUE', 4, '@price', 'BY', '@price', 'DESC', 'AS', 'top_price', 'REDUCE', 'FIRST_VALUE', 4, '@title', 'BY', '@price', 'ASC', 'AS', 'bottom_item', 'REDUCE', 'FIRST_VALUE', 4, '@price', 'BY', '@price', 'ASC', 'AS', 'bottom_price', 'SORTBY', 2, '@top_price', 'DESC', 'MAX', 5 ) self.assertListEqual([long(4), ['brand', 'sony', 'top_item', 'sony psp slim & lite 2000 console', 'top_price', '695.8', 'bottom_item', 'sony dlchd20p high speed hdmi cable for playstation 3', 'bottom_price', '5.88'], ['brand', 'matias', 'top_item', 'matias halfkeyboard usb', 'top_price', '559.99', 'bottom_item', 'matias halfkeyboard usb', 'bottom_price', '559.99'], ['brand', 'beyerdynamic', 'top_item', 'beyerdynamic mmx300 pc gaming premium digital headset with microphone', 'top_price', '359.74', 'bottom_item', 'beyerdynamic headzone pc gaming digital surround sound system with mmx300 digital headset with microphone', 'bottom_price', '0'], ['brand', 'mad catz', 'top_item', 'mad catz s.t.r.i.k.e.7 gaming keyboard', 'top_price', '295.95', 'bottom_item', 'madcatz mov4545 xbox replacement breakaway cable', 'bottom_price', '3.49']], res) def _testLoadAfterGroupBy(self): with self.assertResponseError(): self.cmd('ft.aggregate', 'games', '*', 'GROUPBY', 1, '@brand', 'LOAD', 1, '@brand') def _testLoadAfterSortBy(self): with self.assertResponseError(): self.cmd('ft.aggregate', 'games', '*', 'SORTBY', 1, '@brand', 'LOAD', 1, '@brand') def _testLoadAfterApply(self): with self.assertResponseError(): self.cmd('ft.aggregate', 'games', '*', 'APPLY', 'timefmt(1517417144)', 'AS', 'dt', 'LOAD', 1, '@brand') def _testLoadAfterFilter(self): with self.assertResponseError(): self.cmd('ft.aggregate', 'games', '*', 'FILTER', '@count > 5', 'LOAD', 1, '@brand') def _testLoadAfterLimit(self): with self.assertResponseError(): self.cmd('ft.aggregate', 'games', '*', 'LIMIT', '0', '5', 'LOAD', 1, '@brand') def testAll(self): for name, f in iteritems(self.__class__.__dict__): if name.startswith('_test'): f(self) sys.stdout.write('Aggregate.{} ... '.format(f.__name__[1:])) sys.stdout.flush() print('ok') if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_aof.py000066400000000000000000000110441364126773500200400ustar00rootroot00000000000000from rmtest import BaseModuleTestCase from hotels import hotels from redis._compat import (long, xrange) import redis import unittest import random import time class AofTestCase(BaseModuleTestCase): @property def server_args(self): args = super(AofTestCase, self).server_args args['use_aof'] = True args['aof-use-rdb-preamble'] = 'yes' return args def setUp(self): super(AofTestCase, self).setUp() if self.is_external_server: raise unittest.SkipTest('Cannot run AOF tests on external server') def aofTestCommon(self, reloadfn): # TODO: Change this attribute in rmtest self.cmd('ft.create', 'idx', 'schema', 'field1', 'text', 'field2', 'numeric') reloadfn() for x in range(1, 10): self.assertCmdOk('ft.add', 'idx', 'doc{}'.format(x), 1.0 / x, 'fields', 'field1', 'myText{}'.format(x), 'field2', 20 * x) exp = [long(9), 'doc1', ['field1', 'myText1', 'field2', '20'], 'doc2', ['field1', 'myText2', 'field2', '40'], 'doc3', ['field1', 'myText3', 'field2', '60'], 'doc4', ['field1', 'myText4', 'field2', '80'], 'doc5', ['field1', 'myText5', 'field2', '100'], 'doc6', ['field1', 'myText6', 'field2', '120'], 'doc7', ['field1', 'myText7', 'field2', '140'], 'doc8', ['field1', 'myText8', 'field2', '160'], 'doc9', ['field1', 'myText9', 'field2', '180']] reloadfn() ret = self.cmd('ft.search', 'idx', 'myt*') self.assertEqual(exp, ret) def testAof(self): self.aofTestCommon(lambda: self.restart_and_reload()) def testRawAof(self): self.aofTestCommon(lambda: self.cmd('debug loadaof')) def testRewriteAofSortables(self): self.cmd('FT.CREATE', 'idx', 'schema', 'field1', 'TEXT', 'SORTABLE', 'num1', 'NUMERIC', 'SORTABLE') self.cmd('FT.ADD', 'idx', 'doc', 1.0, 'FIELDS', 'field1', 'Hello World') self.restart_and_reload() self.cmd('SAVE') from random import randint # Load some documents for x in xrange(100): self.cmd('FT.ADD', 'idx', 'doc{}'.format(x), 1.0, 'FIELDS', 'field1', 'txt{}'.format(random.random()), 'num1', random.random()) cmd = ['FT.SEARCH', 'idx', 'txt', 'SORTBY', '2', 'field1', 'ASC', 'num1', 'DESC'] res = self.cmd(*cmd) self.restart_and_reload() res2 = self.cmd(*cmd) self.assertEqual(res, res2) def testAofRewriteSortkeys(self): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'foo', 'TEXT', 'SORTABLE', 'bar', 'TAG') self.cmd('FT.ADD', 'idx', '1', '1', 'FIELDS', 'foo', 'A', 'bar', '1') self.cmd('FT.ADD', 'idx', '2', '1', 'fields', 'foo', 'B', 'bar', '1') res_exp = self.cmd('FT.SEARCH', 'idx', '@bar:{1}', 'SORTBY', 'foo', 'ASC', 'RETURN', '1', 'foo', 'WITHSORTKEYS') self.restart_and_reload() res_got = self.cmd('FT.SEARCH', 'idx', '@bar:{1}', 'SORTBY', 'foo', 'ASC', 'RETURN', '1', 'foo', 'WITHSORTKEYS') self.assertEqual(res_exp, res_got) def testAofRewriteTags(self): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'foo', 'TEXT', 'SORTABLE', 'bar', 'TAG') self.cmd('FT.ADD', 'idx', '1', '1', 'FIELDS', 'foo', 'A', 'bar', '1') self.cmd('FT.ADD', 'idx', '2', '1', 'fields', 'foo', 'B', 'bar', '1') info_a = to_dict(self.cmd('FT.INFO', 'idx')) self.restart_and_reload() info_b = to_dict(self.cmd('FT.INFO', 'idx')) self.assertEqual(info_a['fields'], info_b['fields']) # Try to drop the schema self.cmd('FT.DROP', 'idx') # Try to create it again - should work! self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'foo', 'TEXT', 'SORTABLE', 'bar', 'TAG') self.cmd('FT.ADD', 'idx', '1', '1', 'FIELDS', 'foo', 'A', 'bar', '1') self.cmd('FT.ADD', 'idx', '2', '1', 'fields', 'foo', 'B', 'bar', '1') res = self.cmd('FT.SEARCH', 'idx', '@bar:{1}', 'SORTBY', 'foo', 'ASC', 'RETURN', '1', 'foo', 'WITHSORTKEYS') self.assertEqual([long(2), '1', '$a', ['foo', 'A'], '2', '$b', ['foo', 'B']], res) def to_dict(r): return {r[i]: r[i + 1] for i in range(0, len(r), 2)} RediSearch-1.2.2/src/pytest/test_cn.py000066400000000000000000000131031364126773500176710ustar00rootroot00000000000000# -*- coding: utf-8 -*- from rmtest import BaseModuleTestCase from redis._compat import (long, safe_unicode) import redis import unittest import sys import os SRCTEXT=os.path.join(os.path.dirname(__file__), '..', 'tests', 'cn_sample.txt') GENTXT=os.path.join(os.path.dirname(__file__), '..', 'tests', 'genesis.txt') GEN_CN_S = """ 太初,上帝创造了天地。 那时,大地空虚混沌,还没有成形,黑暗笼罩着深渊,上帝的灵运行在水面上。 上帝说:“要有光!”就有了光。 上帝看光是好的,就把光和暗分开, 称光为昼,称暗为夜。晚上过去,早晨到来,这是第一天。 上帝说:“水与水之间要有穹苍,把水分开。” 果然如此。上帝开辟了穹苍,用穹苍将水上下分开。 上帝称穹苍为天空。晚上过去,早晨到来,这是第二天。 """ GEN_CN_T = """ 太初,上帝創造了天地。 那時,大地空虛混沌,還沒有成形,黑暗籠罩著深淵,上帝的靈運行在水面上。 上帝說:「要有光!」就有了光。 上帝看光是好的,就把光和暗分開, 稱光為晝,稱暗為夜。晚上過去,早晨到來,這是第一天。 上帝說:「水與水之間要有穹蒼,把水分開。」 果然如此。上帝開闢了穹蒼,用穹蒼將水上下分開。 上帝稱穹蒼為天空。晚上過去,早晨到來,這是第二天。 """ class CnTestCase(BaseModuleTestCase): def testCn(self): text = open(SRCTEXT).read() self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'LANGUAGE', 'CHINESE', 'FIELDS', 'txt', text) res = self.cmd('ft.search', 'idx', '之旅', 'SUMMARIZE', 'HIGHLIGHT', 'LANGUAGE', 'chinese') res[2] = [safe_unicode(x) for x in res[2]] #self.assertEqual([long(1), 'doc1', ['txt', '2009\xe5\xb9\xb4\xef\xbc\x98\xe6\x9c\x88\xef\xbc\x96\xe6\x97\xa5\xe5\xbc\x80\xe5\xa7\x8b\xe5\xa4\xa7\xe5\xad\xa6\xe4\xb9\x8b\xe6\x97\x85\xef\xbc\x8c\xe5\xb2\xb3\xe9\x98\xb3\xe4\xbb\x8a\xe5\xa4\xa9\xe7\x9a\x84\xe6\xb0\x94\xe6\xb8\xa9\xe4\xb8\xba38.6\xe2\x84\x83, \xe4\xb9\x9f\xe5\xb0\xb1\xe6\x98\xaf101.48\xe2\x84\x89... \xef\xbc\x8c \xe5\x8d\x95\xe4\xbd\x8d \xe5\x92\x8c \xe5\x85\xa8\xe8\xa7\x92 : 2009\xe5\xb9\xb4 8\xe6\x9c\x88 6\xe6\x97\xa5 \xe5\xbc\x80\xe5\xa7\x8b \xe5\xa4\xa7\xe5\xad\xa6 \xe4\xb9\x8b\xe6\x97\x85 \xef\xbc\x8c \xe5\xb2\xb3\xe9\x98\xb3 \xe4\xbb\x8a\xe5\xa4\xa9 \xe7\x9a\x84 \xe6\xb0\x94\xe6\xb8\xa9 \xe4\xb8\xba 38.6\xe2\x84\x83 , \xe4\xb9\x9f\xe5\xb0\xb1\xe6\x98\xaf 101... ')]], res) res = self.cmd('ft.search', 'idx', 'hacker', 'summarize', 'highlight') res[2] = [safe_unicode(x) for x in res[2]] #self.assertEqual([long(1), 'doc1', ['txt', ' visit http://code.google.com/p/jcseg, we all admire the hacker spirit!\xe7\x89\xb9\xe6\xae\x8a\xe6\x95\xb0\xe5\xad\x97: \xe2\x91\xa0 \xe2\x91\xa9 \xe2\x91\xbd \xe3\x88\xa9. ... p / jcseg , we all admire appreciate like love enjoy the hacker spirit mind ! \xe7\x89\xb9\xe6\xae\x8a \xe6\x95\xb0\xe5\xad\x97 : \xe2\x91\xa0 \xe2\x91\xa9 \xe2\x91\xbd \xe3\x88\xa9 . ~~~ ... ']], res) # Check that we can tokenize english with friso (sub-optimal, but don't want gibberish) gentxt = open(GENTXT).read() self.cmd('ft.add', 'idx', 'doc2', 1.0, 'LANGUAGE', 'chinese', 'FIELDS', 'txt', gentxt) res = self.cmd('ft.search', 'idx', 'abraham', 'summarize', 'highlight') self.assertEqual(long(1), res[0]) self.assertEqual('doc2', res[1]) res[2] = [safe_unicode(x) for x in res[2]] self.assertTrue(u'Abraham' in res[2][1]) # Add an empty document. Hope we don't crash! self.cmd('ft.add', 'idx', 'doc3', 1.0, 'language', 'chinese', 'fields', 'txt1', '') # Check splitting. TODO - see how to actually test for matches self.cmd('ft.search', 'idx', 'redis客户端', 'language', 'chinese') self.cmd('ft.search', 'idx', '简介Redisson 是一个高级的分布式协调Redis客户端', 'language', 'chinese') def testMixedHighlight(self): txt = r""" Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。从盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。[8] """ self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'language', 'chinese', 'fields', 'txt', txt) # Should not crash! self.cmd('ft.search', 'idx', 'redis', 'highlight') # def testTradSimp(self): # # Ensure that traditional chinese characters get converted to their simplified variants # self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') # # self.cmd('ft.add', 'idx', 'genS', 1.0, 'language', 'chinese', 'fields', 'txt', GEN_CN_S) # self.cmd('ft.add', 'idx', 'genT', 1.0, 'language', 'chinese', 'fields', 'txt', GEN_CN_T) # # res = self.cmd('ft.search', 'idx', '那时', 'language', 'chinese', 'highlight', 'summarize') # self.assertEqual([long(2), 'genT', ['txt', '\xe9\x82\xa3\xe6\x99\x82\xef... '], 'genS', ['txt', '\xe9\x82\xa3\xe6\x97\xb6\xef... ']], res) # # # The variants should still show up as different, so as to not modify # self.assertTrue('那時' in res[2][1]) # self.assertTrue('那时' in res[4][1]) RediSearch-1.2.2/src/pytest/test_conditional_updates.py000066400000000000000000000122741364126773500233310ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest from hotels import hotels import random import time class ConditionalUpdateTestCase(BaseModuleTestCase): def testConditionalUpdateOnNoneExistingNumericField(self): self.cmd('flushdb') self.assertOk(self.cmd('ft.create', 'idx', 'schema', 'id1', 'numeric', 'SORTABLE')) self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'id1', '5')) # adding field to the schema self.assertOk(self.cmd('FT.ALTER', 'idx', 'SCHEMA', 'ADD', 'id2', 'numeric', 'SORTABLE')) self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 > @id2', 'fields', 'id1', '3', 'id2', '4'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 < @id2', 'fields', 'id1', '3', 'id2', '4'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 == @id2', 'fields', 'id1', '3', 'id2', '4'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 != @id2', 'fields', 'id1', '3', 'id2', '4'), 'NOADD') self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 == 5', 'fields', 'id1', '3', 'id2', '4')) def testConditionalUpdateOnNoneExistingTextField(self): self.cmd('flushdb') self.assertOk(self.cmd('ft.create', 'idx', 'schema', 'id1', 'text', 'SORTABLE')) self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'id1', 'some_text')) # adding field to the schema self.assertOk(self.cmd('FT.ALTER', 'idx', 'SCHEMA', 'ADD', 'id2', 'text', 'SORTABLE')) self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 > @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 < @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 == @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 != @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 == "some_text"', 'fields', 'id1', 'some_text', 'id2', 'some_text')) def testConditionalUpdateOnNoneExistingTagField(self): self.cmd('flushdb') self.assertOk(self.cmd('ft.create', 'idx', 'schema', 'id1', 'tag', 'SORTABLE')) self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'id1', 'some_text')) # adding field to the schema self.assertOk(self.cmd('FT.ALTER', 'idx', 'SCHEMA', 'ADD', 'id2', 'tag', 'SORTABLE')) self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 > @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 < @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 == @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertEqual(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 != @id2', 'fields', 'id1', 'some_text', 'id2', 'some_text'), 'NOADD') self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'REPLACE', 'PARTIAL', 'IF', '@id1 == "some_text"', 'fields', 'id1', 'some_text', 'id2', 'some_text')) RediSearch-1.2.2/src/pytest/test_cursors.py000066400000000000000000000073671364126773500210100ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest import pprint from redis import ResponseError from time import sleep, time def to_dict(res): d = {res[i]: res[i + 1] for i in range(0, len(res), 2)} return d class CursorTestCase(BaseModuleTestCase): def loadDocs(self, count=100, idx='idx', text='hello world'): self.cmd('FT.CREATE', idx, 'SCHEMA', 'f1', 'TEXT') for x in range(count): cmd = ['FT.ADD', idx, '{}_doc{}'.format(idx, x), 1.0, 'FIELDS', 'f1', text] self.cmd(*cmd) def exhaustCursor(self, idx, resp, *args): first, cid=resp rows = [resp] while cid: resp, cid=self.cmd('FT.CURSOR', 'READ', idx, cid, *args) rows.append([resp, cid]) return rows def getCursorStats(self, idx='idx'): return to_dict(to_dict(self.cmd('FT.INFO', idx))['cursor_stats']) def testCursors(self): self.loadDocs() query = ['FT.AGGREGATE', 'idx', '*', 'LOAD', 1, '@f1', 'WITHCURSOR'] resp = self.cmd(*query) resp = self.exhaustCursor('idx', resp) self.assertEqual(1, len(resp)) # Only one response self.assertEqual(0, resp[0][1]) self.assertEqual(101, len(resp[0][0])) # Check info and see if there are other cursors info = self.getCursorStats() self.assertEqual(0, info['global_total']) # Issue the same query, but using a specified count resp = self.cmd(*(query[::]+['COUNT', 10])) resp = self.exhaustCursor('idx', resp) # pprint.pprint(resp) self.assertEqual(11, len(resp)) def testMultipleIndexes(self): self.loadDocs(idx='idx2', text='goodbye') self.loadDocs(idx='idx1', text='hello') q1 = ['FT.AGGREGATE', 'idx1', '*', 'LOAD', 1, '@f1', 'WITHCURSOR', 'COUNT', 10 ] q2 = q1[::] q2[1] = 'idx2' r1 = self.exhaustCursor('idx1', self.cmd( * q1)) r2 = self.exhaustCursor('idx2', self.cmd( * q2)) self.assertEqual(11, len(r1[0][0])) self.assertEqual(11, len(r2[0][0])) # Compare last results last1 = r1[0][0][10] last2 = r2[0][0][10] self.assertEqual(['f1', 'hello'], last1) self.assertEqual(['f1', 'goodbye'], last2) def testCapacities(self): self.loadDocs(idx='idx1') self.loadDocs(idx='idx2') q1 = ['FT.AGGREGATE', 'idx1', '*', 'LOAD', '1', '@f1', 'WITHCURSOR', 'COUNT', 10] q2 = q1[::] q2[1] = 'idx2' cursors1 = [] cursors2 = [] for _ in range(128): cursors1.append(self.cmd( * q1)) cursors2.append(self.cmd( * q2)) # Get info for the cursors info = self.getCursorStats('idx1') self.assertEqual(128, info['index_total']) self.assertEqual(256, info['global_total']) info = self.getCursorStats('idx2') self.assertEqual(128, info['index_total']) # Try to create another cursor self.assertRaises(ResponseError, self.cmd, * q1) self.assertRaises(ResponseError, self.cmd, * q2) # Clear all the cursors for c in cursors1: self.cmd('FT.CURSOR', 'DEL', 'idx1', c[-1]) self.assertEqual(0, self.getCursorStats('idx1')['index_total']) # Check that we can create a new cursor c = self.cmd( * q1) self.cmd('FT.CURSOR', 'DEL', 'idx1', c[-1]) def testTimeout(self): self.loadDocs(idx='idx1') # Maximum idle of 1ms q1 = ['FT.AGGREGATE', 'idx1', '*', 'LOAD', '1', '@f1', 'WITHCURSOR', 'COUNT', 10, 'MAXIDLE', 1] resp = self.cmd( * q1) sleep(0.01) self.cmd('FT.CURSOR', 'GC', 'idx1', '0') self.assertEqual(0, self.getCursorStats('idx1')['index_total'])RediSearch-1.2.2/src/pytest/test_doctable.py000066400000000000000000000031031364126773500210450ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest from hotels import hotels import random import time class SearchTestCase(BaseModuleTestCase): @property def module_args(self): return super(SearchTestCase, self).module_args + ['MAXDOCTABLESIZE', '100'] # mainly this test adding and removing docs while the doc table size is 100 # and make sure we are not crashing and not leaking memory (when runs with valgrind). def testDocTable(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) # doc table size is 100 so insearting 1000 docs should gives us 10 docs in each bucket for i in range(1000): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'title', 'hello world %d' % (i % 100), 'body', 'lorem ist ipsum')) for i in range(100): res = r.execute_command('ft.search', 'idx', 'hello world %d' % i) self.assertEqual(res[0], 10) # deleting the first 100 docs for i in range(100): self.assertEqual(r.execute_command('ft.del', 'idx', 'doc%d' % i), 1) for i in range(100): res = r.execute_command('ft.search', 'idx', 'hello world %d' % i) self.assertEqual(res[0], 9) self.assertOk(r.execute_command('ft.drop', 'idx')) RediSearch-1.2.2/src/pytest/test_ext.py000066400000000000000000000024141364126773500200740ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest from hotels import hotels import random import time import subprocess import os import os.path # this file is 'pytest' SELF_DIR = os.path.abspath(os.path.dirname(__file__)) TEST_MODULE = SELF_DIR + '/../tests/ext-example/example.so' class ExtensionTestCase(BaseModuleTestCase): @property def module_args(self): return super(ExtensionTestCase, self).module_args + ['EXTLOAD', TEST_MODULE] def testExt(self): if not os.path.exists(TEST_MODULE): subprocess.call(['make', '-C', os.path.dirname(TEST_MODULE)]) with self.redis() as r: r.flushdb() N = 100 self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'f', 'text')) for i in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'f', 'hello world')) res = r.execute_command('ft.search', 'idx', 'hello world') self.assertEqual(N, res[0]) res = r.execute_command('ft.search', 'idx', 'hello world', 'scorer', 'filterout_scorer') self.assertEqual(0, res[0]) if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_fuzz.py000066400000000000000000000050201364126773500202660ustar00rootroot00000000000000from rmtest import BaseModuleTestCase from redis._compat import xrange import redis import unittest import random import time try: from functools import reduce # only in Python 3 except: pass class SearchTestCase(BaseModuleTestCase): _tokens = {} _docs = {} _docId = 1 _vocab_size = 10000 def _random_token(self): return 'tok%d' % random.randrange(1, self._vocab_size) def generate_random_doc(self, num_tokens=100): random.seed(time.time()) tokens = [] for i in range(num_tokens): tokens.append(self._random_token()) for tok in tokens: self._tokens.setdefault(tok, set()).add(self._docId) self._docs[self._docId] = tokens self._docId += 1 return self._docId - 1, tokens def createIndex(self, r): r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'txt', 'text')) for i in xrange(1000): did, tokens = self.generate_random_doc() r.execute_command('ft.add', 'idx', did, 1.0, 'fields', 'txt', ' '.join(tokens)) # print r.execute_command('ft.info', 'idx') def compareResults(self, r, num_unions=2, toks_per_union=7): # generate N unions of M tokens unions = [[self._random_token() for _ in range(toks_per_union)] for _ in range(num_unions)] # get the documents for each union union_docs = [reduce(lambda x, y: x.union(y), [self._tokens.get(t, set()) for t in u], set()) for u in unions] # intersect the result to get the actual search result for an # intersection of all unions result = reduce(lambda x, y: x.intersection(y), union_docs) # format the equivalent search query for the same tokens q = ''.join(('(%s)' % '|'.join(toks) for toks in unions)) args = ['ft.search', 'idx', q, 'nocontent', 'limit', 0, 100] # print args qr = set((int(x) for x in r.execute_command('ft.search', 'idx', q, 'nocontent', 'limit', 0, 100)[1:])) # print sorted(result), '<=>', sorted(qr) return result.difference(qr) def testFuzzy(self): # print self._tokens with self.redis() as r: self.createIndex(r) self.assertTrue(True) for x in range(100): self.assertFalse(self.compareResults(r, 5, 40)) if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_fuzzy.py000066400000000000000000000065361364126773500204740ustar00rootroot00000000000000from rmtest import BaseModuleTestCase from redis._compat import long import redis import unittest from hotels import hotels import random import time class FuzzyTestCase(BaseModuleTestCase): def testBasicFuzzy(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'body', 'this is a test')) res = r.execute_command('ft.search', 'idx', '%word%') self.assertEqual(res, [long(1), 'doc1', ['title', 'hello world', 'body', 'this is a test']]) def testLdLimit(self): self.cmd('ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world') self.assertEqual([long(1), 'doc1', ['title', 'hello world']], self.cmd('ft.search', 'idx', '%word%')) # should be ok self.assertEqual([long(0)], self.cmd('ft.search', 'idx', r'%sword%')) # should return nothing def testFuzzyMultipleResults(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'body', 'this is a test')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'hello word', 'body', 'this is a test')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc3', 1.0, 'fields', 'title', 'hello ward', 'body', 'this is a test')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc4', 1.0, 'fields', 'title', 'hello wakld', 'body', 'this is a test')) res = r.execute_command('ft.search', 'idx', '%word%') self.assertEqual(res, [long(3), 'doc3', ['title', 'hello ward', 'body', 'this is a test'], 'doc2', ['title', 'hello word', 'body', 'this is a test'], 'doc1', ['title', 'hello world', 'body', 'this is a test']]) def testFuzzySyntaxError(self): unallowChars = ('*', '$', '~', '&', '@', '!') with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'body', 'this is a test')) for ch in unallowChars: error = None try: r.execute_command('ft.search', 'idx', '%%wor%sd%%' % ch) except Exception as e: error = str(e) self.assertTrue('Syntax error' in error) RediSearch-1.2.2/src/pytest/test_gc.py000066400000000000000000000051431364126773500176670ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest from hotels import hotels import random import time class SearchGCTestCase(BaseModuleTestCase): def testBasicGC(self): self.cmd('flushdb') self.assertOk(self.cmd('ft.create', 'idx', 'schema', 'title', 'text', 'id', 'numeric', 't', 'tag')) self.assertOk(self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'id', '5', 't', 'tag1')) self.assertOk(self.cmd('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'hello world 1', 'id', '7', 't', 'tag2')) self.assertEqual(self.cmd('ft.debug', 'DUMP_INVIDX', 'idx', 'world'), [1, 2]) self.assertEqual(self.cmd('ft.debug', 'DUMP_NUMIDX', 'idx', 'id'), [[1, 2], [2], [1]]) self.assertEqual(self.cmd('ft.debug', 'DUMP_TAGIDX', 'idx', 't'), [['tag1', [1]], ['tag2', [2]]]) self.assertEqual(self.cmd('ft.del', 'idx', 'doc2'), 1) time.sleep(1) # check that the gc collected the deleted docs self.assertEqual(self.cmd('ft.debug', 'DUMP_INVIDX', 'idx', 'world'), [1]) self.assertEqual(self.cmd('ft.debug', 'DUMP_NUMIDX', 'idx', 'id'), [[1], [], [1]]) self.assertEqual(self.cmd('ft.debug', 'DUMP_TAGIDX', 'idx', 't'), [['tag1', [1]], ['tag2', []]]) def testNumerciGCIntensive(self): NumberOfDocs = 1000 self.cmd('flushdb') self.assertOk(self.cmd('ft.create', 'idx', 'schema', 'id', 'numeric')) for i in range(NumberOfDocs): self.assertOk(self.cmd('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'id', str(i))) for i in range(0, NumberOfDocs, 2): self.assertEqual(self.cmd('ft.del', 'idx', 'doc%d' % i), 1) time.sleep(1) res = self.cmd('ft.debug', 'DUMP_NUMIDX', 'idx', 'id') for r1 in res: for r2 in r1: self.assertEqual(r2 % 2, 0) def testTagGC(self): NumberOfDocs = 10 self.cmd('flushdb') self.assertOk(self.cmd('ft.create', 'idx', 'schema', 't', 'tag')) for i in range(NumberOfDocs): self.assertOk(self.cmd('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 't', str(i))) for i in range(0, NumberOfDocs, 2): self.assertEqual(self.cmd('ft.del', 'idx', 'doc%d' % i), 1) time.sleep(1) res = self.cmd('ft.debug', 'DUMP_TAGIDX', 'idx', 't') for r1 in res: for r2 in r1[1]: self.assertEqual(r2 % 2, 0) RediSearch-1.2.2/src/pytest/test_safemode.py000066400000000000000000000004301364126773500210530ustar00rootroot00000000000000# -*- coding: utf-8 -*- from test import SearchTestCase import os class SafemodeTestCase(SearchTestCase): # TODO: Implement a proper API in rmtest and expose this correctly _loadmodule_args = ( os.environ.get('REDIS_MODULE_PATH', '../redisearch.so'), 'SAFEMODE',)RediSearch-1.2.2/src/pytest/test_scorers.py000066400000000000000000000075761364126773500207720ustar00rootroot00000000000000import math import unittest from rmtest import BaseModuleTestCase from redis._compat import long class ScorersTestCase(BaseModuleTestCase): def search(self, r, *args): return r.execute_command('ft.search', *args) def testHammingScorer(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text')) for i in range(16): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1, 'payload', ('%x' % i) * 8, 'fields', 'title', 'hello world')) for i in range(16): res = r.execute_command('ft.search', 'idx', '*', 'PAYLOAD', ('%x' % i) * 8, 'SCORER', 'HAMMING', 'WITHSCORES', 'WITHPAYLOADS') self.assertEqual(res[1], 'doc%d' % i) self.assertEqual(res[2], '1') # test with payload of different lenght res = r.execute_command('ft.search', 'idx', '*', 'PAYLOAD', ('%x' % i) * 7, 'SCORER', 'HAMMING', 'WITHSCORES', 'WITHPAYLOADS') self.assertEqual(res[2], '0') # test with no payload res = r.execute_command('ft.search', 'idx', '*', 'SCORER', 'HAMMING', 'WITHSCORES', 'WITHPAYLOADS') self.assertEqual(res[2], '0') def testTagIndex(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'weight', 10, 'body', 'text')) N = 25 for n in range(N): sc = math.sqrt(float(N - n + 10) / float(N + 10)) # print n, sc self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % n, sc, 'fields', 'title', 'hello world ' * n, 'body', 'lorem ipsum ' * n)) results = [ [long(24), 'doc1', 1.97, 'doc2', 1.94, 'doc3', 1.91, 'doc4', 1.88, 'doc5', 1.85], [long(24), 'doc1', 0.9, 'doc2', 0.59, 'doc3', 0.43, 'doc4', 0.34, 'doc5', 0.28], [long(24), 'doc4', 1.75, 'doc5', 1.75, 'doc3', 1.74, 'doc6', 1.74, 'doc7', 1.72], [long(24), 'doc24', 480.0, 'doc23', 460.0, 'doc22', 440.0, 'doc21', 420.0, 'doc20', 400.0], [long(24), 'doc1', 0.99, 'doc2', 0.97, 'doc3', 0.96, 'doc4', 0.94, 'doc5', 0.93], [long(24), 'doc1', 1.97, 'doc2', 1.94, 'doc3', 1.91, 'doc4', 1.88, 'doc5', 1.85], [long(24), 'doc1', 0.9, 'doc2', 0.59, 'doc3', 0.43, 'doc4', 0.34, 'doc5', 0.28], [long(24), 'doc4', 1.75, 'doc5', 1.75, 'doc3', 1.74, 'doc6', 1.74, 'doc7', 1.72], [long(24), 'doc24', 480.0, 'doc23', 460.0, 'doc22', 440.0, 'doc21', 420.0, 'doc20', 400.0], [long(24), 'doc1', 0.99, 'doc2', 0.97, 'doc3', 0.96, 'doc4', 0.94, 'doc5', 0.93] ] scorers = ['TFIDF', 'TFIDF.DOCNORM', 'BM25', 'DISMAX', 'DOCSCORE'] for _ in r.retry_with_rdb_reload(): for i, scorer in enumerate(scorers): res = self.search(r, 'idx', 'hello world', 'scorer', scorer, 'nocontent', 'withscores', 'limit', 0, 5) res = [round(float(x), 2) if j > 0 and (j - 1) % 2 == 1 else x for j, x in enumerate(res)] #print res self.assertListEqual(results[i], res) if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_summarize.py000066400000000000000000000231631364126773500213140ustar00rootroot00000000000000from rmtest import BaseModuleTestCase from redis._compat import (long, safe_unicode) import unittest import os.path GENTEXT = os.path.dirname(os.path.abspath(__file__)) + '/../tests/genesis.txt' class SummarizeTestCase(BaseModuleTestCase): def setupGenesis(self): txt = open(GENTEXT, 'r').read() self.cmd('ft.create', 'idx', 'schema', 'txt', 'text') self.cmd('ft.add', 'idx', 'gen1', 1.0, 'fields', 'txt', txt) def testSummarization(self): # Load the file self.setupGenesis() res = self.cmd('FT.SEARCH', 'idx', 'abraham isaac jacob', 'SUMMARIZE', 'FIELDS', 1, 'txt', 'LEN', 20, 'HIGHLIGHT', 'FIELDS', 1, 'txt', 'TAGS', '', '') self.assertEqual(1, res[0]) # print res res_txt = res[2][1] # print res_txt self.assertTrue("Abraham" in res_txt) self.assertTrue("Isaac" in res_txt) self.assertTrue("Jacob" in res_txt) res = self.cmd('FT.SEARCH', 'idx', 'abraham isaac jacob', 'HIGHLIGHT', 'fields', 1, 'txt', 'TAGS', '', '') res_txt = res[2][1] self.assertGreaterEqual(len(res_txt), 160000) res = self.cmd('FT.SEARCH', 'idx', 'abraham isaac jacob', 'SUMMARIZE', 'FIELDS', 1, 'txt', 'FRAGS', 10000) # print res res_list = res[2][1] #self.assertIsInstance(res_list, list) # Search with custom separator res = self.cmd('FT.SEARCH', 'idx', 'isaac', 'SUMMARIZE', 'FIELDS', 1, 'txt', 'SEPARATOR', '\r\n', 'FRAGS', 4, 'LEN', 3) res[2] = [safe_unicode(x) for x in res[2]] self.assertEqual([long(1), u'gen1', [ u'txt', u'name Isaac: and\r\nwith Isaac,\r\nIsaac. {21:4} And Abraham circumcised his son Isaac\r\nson Isaac was\r\n']], res) # Attempt a query which doesn't have a corresponding matched term res = self.cmd('FT.SEARCH', 'idx', '-blah', 'SUMMARIZE', 'LEN', 3) self.assertEqual(long(1), res[0]) self.assertEqual('gen1', res[1]) res[2] = [safe_unicode(x) for x in res[2]] self.assertTrue(u'The First Book of Moses, called Genesis {1:1}' in res[2][1]) # Try the same, but attempting to highlight res = self.cmd('FT.SEARCH', 'idx', '-blah', 'HIGHLIGHT') res[2] = [safe_unicode(x) for x in res[2]] self.assertTrue(215000 >= len(res[2][1]) >= 211000) def testPrefixExpansion(self): # Search with prefix self.setupGenesis() res = self.cmd('FT.SEARCH', 'idx', 'begi*', 'HIGHLIGHT', 'FIELDS', 1, 'txt', 'TAGS', '', '', 'SUMMARIZE', 'FIELDS', 1, 'txt', 'LEN', 20) res[2] = [safe_unicode(x) for x in res[2]] # Prefix expansion uses "early exit" strategy, so the term highlighted won't necessarily be the # best term self.assertEqual([long(1), 'gen1', [ u'txt', 'is] one, and they have all one language; and this they begin to do: and now nothing will be restrained from them, which... ']], res) # self.assertEqual([long(1), 'gen1', ['txt', 'First Book of Moses, called Genesis {1:1} In the beginning God created the heaven and the earth. {1:2} And the earth... the mighty hunter before the LORD. {10:10} And the beginning of his kingdom was Babel, and Erech, and Accad, and Calneh... is] one, and they have all one language; and this they begin to do: and now nothing will be restrained from them, which... ']], res) def testSummarizationMultiField(self): p1 = "Redis is an open-source in-memory database project implementing a networked, in-memory key-value store with optional durability. Redis supports different kinds of abstract data structures, such as strings, lists, maps, sets, sorted sets, hyperloglogs, bitmaps and spatial indexes. The project is mainly developed by Salvatore Sanfilippo and is currently sponsored by Redis Labs.[4] Redis Labs creates and maintains the official Redis Enterprise Pack." p2 = "Redis typically holds the whole dataset in memory. Versions up to 2.4 could be configured to use what they refer to as virtual memory[19] in which some of the dataset is stored on disk, but this feature is deprecated. Persistence is now achieved in two different ways: one is called snapshotting, and is a semi-persistent durability mode where the dataset is asynchronously transferred from memory to disk from time to time, written in RDB dump format. Since version 1.1 the safer alternative is AOF, an append-only file (a journal) that is written as operations modifying the dataset in memory are processed. Redis is able to rewrite the append-only file in the background in order to avoid an indefinite growth of the journal." self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'txt1', 'TEXT', 'txt2', 'TEXT') self.cmd('FT.ADD', 'idx', 'redis', 1.0, 'FIELDS', 'txt1', p1, 'txt2', p2) # Now perform the multi-field search self.cmd('FT.SEARCH', 'idx', 'memory persistence salvatore', 'HIGHLIGHT', 'TAGS', '', '', 'SUMMARIZE', 'LEN', 5, 'RETURN', 2, 'txt1', 'txt2') # Now perform the multi-field search res = self.cmd('FT.SEARCH', 'idx', 'memory persistence salvatore', 'SUMMARIZE', 'FIELDS', 2, 'txt1', 'txt2', 'LEN', 5) # print res self.assertEqual(long(1), res[0]) self.assertEqual('redis', res[1]) res[2] = [safe_unicode(x) for x in res[2]] self.assertTrue(u'txt1' in res[2]) self.assertTrue(u'memory database project implementing a networked, in-memory ... by Salvatore Sanfilippo... ' in res[2]) self.assertTrue(u'txt2' in res[2]) self.assertTrue(u'dataset in memory. Versions... as virtual memory[19] in... persistent durability mode where the dataset is asynchronously transferred from memory... ' in res[2]) def testSummarizationDisabled(self): self.cmd('FT.CREATE', 'idx', 'NOOFFSETS', 'SCHEMA', 'body', 'TEXT') self.cmd('FT.ADD', 'idx', 'doc', 1.0, 'FIELDS', 'body', 'hello world') with self.assertResponseError(): res = self.cmd('FT.SEARCH', 'idx', 'hello', 'SUMMARIZE', 'FIELDS', 1, 'body') self.cmd('FT.CREATE', 'idx2', 'NOHL', 'SCHEMA', 'body', 'TEXT') self.cmd('FT.ADD', 'idx2', 'doc', 1.0, 'FIELDS', 'body', 'hello world') with self.assertResponseError(): res = self.cmd('FT.SEARCH', 'idx2', 'hello', 'SUMMARIZE', 'FIELDS', 1, 'body') def testSummarizationNoSave(self): self.cmd('FT.CREATE', 'idx', 'SCHEMA', 'body', 'TEXT') self.cmd('FT.ADD', 'idx', 'doc', 1.0, 'NOSAVE', 'fields', 'body', 'hello world') res = self.cmd('FT.SEARCH', 'idx', 'hello', 'SUMMARIZE', 'RETURN', 1, 'body') # print res self.assertEqual([long(1), 'doc', ['body', None]], res) def testSummarizationMeta(self): self.cmd('ft.create', 'idx', 'schema', 'foo', 'text', 'bar', 'text', 'baz', 'text') self.cmd('ft.add', 'idx', 'doc1', 1.0, 'fields', 'foo', 'pill', 'bar', 'pillow', 'baz', 'piller') # Now, return the fields: res = self.cmd('ft.search', 'idx', 'pill pillow piller', 'RETURN', 1, 'baz', 'SUMMARIZE', 'FIELDS', 2, 'foo', 'bar') self.assertEqual(1, res[0]) result = res[2] names = [x[0] for x in grouper(result, 2)] # RETURN restricts the number of fields self.assertEqual(set(('baz',)), set(names)) res = self.cmd('ft.search', 'idx', 'pill pillow piller', 'RETURN', 3, 'foo', 'bar', 'baz', 'SUMMARIZE') self.assertEqual([long(1), 'doc1', ['foo', 'pill... ', 'bar', 'pillow... ', 'baz', 'piller... ']], res) def testOverflow1(self): #"FT.CREATE" "netflix" "SCHEMA" "title" "TEXT" "WEIGHT" "1" "rating" "TEXT" "WEIGHT" "1" "level" "TEXT" "WEIGHT" "1" "description" "TEXT" "WEIGHT" "1" "year" "NUMERIC" "uscore" "NUMERIC" "usize" "NUMERIC" #FT.ADD" "netflix" "15ad80086ccc7f" "1" "FIELDS" "title" "The Vampire Diaries" "rating" "TV-14" "level" "Parents strongly cautioned. May be unsuitable for children ages 14 and under." "description" "90" "year" "2017" "uscore" "91" "usize" "80" self.cmd('FT.CREATE', 'netflix', 'SCHEMA', 'title', 'TEXT', 'rating', 'TEXT', 'leve', 'TEXT', 'description', 'TEXT', 'year', 'NUMERIC', 'uscore', 'NUMERIC', 'usize', 'NUMERIC') self.cmd('FT.ADD', "netflix", "15ad80086ccc7f", "1.0", "FIELDS", "title", "The Vampire Diaries", "rating", "TV-14", "level", "Parents strongly cautioned. May be unsuitable for children ages 14 and under.", "description", "90", "year", "2017", "uscore", "91", "usize", "80") res = self.cmd('ft.search', 'netflix', 'vampire', 'highlight') self.assertTrue(res[0] == long(1)) self.assertTrue(res[1] == u'15ad80086ccc7f') res[2] = [safe_unicode(x) for x in res[2]] self.assertTrue(u'The Vampire Diaries' in res[2]) def grouper(iterable, n, fillvalue=None): "Collect data into fixed-length chunks or blocks" try: from itertools import zip_longest # python3 except: from itertools import izip_longest as zip_longest # python2 # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx args = [iter(iterable)] * n return zip_longest(fillvalue=fillvalue, *args) if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_synonyms.py000066400000000000000000000270061364126773500211770ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest from hotels import hotels from redis._compat import long import random import time class SynonymsTestCase(BaseModuleTestCase): def testBasicSynonymsUseCase(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child'), 0) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'he is a boy', 'body', 'this is a test')) res = r.execute_command('ft.search', 'idx', 'child', 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(1), 'doc1', ['title', 'he is a boy', 'body', 'this is a test']]) def testTermOnTwoSynonymsGroup(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child'), 0) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'offspring'), 1) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'he is a boy', 'body', 'this is a test')) res = r.execute_command('ft.search', 'idx', 'child', 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(1), 'doc1', ['title', 'he is a boy', 'body', 'this is a test']]) res = r.execute_command('ft.search', 'idx', 'offspring', 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(1), 'doc1', ['title', 'he is a boy', 'body', 'this is a test']]) def testSynonymGroupWithThreeSynonyms(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child', 'offspring'), 0) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'he is a boy', 'body', 'this is a test')) res = r.execute_command('ft.search', 'idx', 'child', 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(1), 'doc1', ['title', 'he is a boy', 'body', 'this is a test']]) res = r.execute_command('ft.search', 'idx', 'offspring', 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(1), 'doc1', ['title', 'he is a boy', 'body', 'this is a test']]) def testSynonymWithMultipleDocs(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child', 'offspring'), 0) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'he is a boy', 'body', 'this is a test')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'she is a girl', 'body', 'the child sister')) res = r.execute_command('ft.search', 'idx', 'offspring', 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(2), 'doc2', ['title', 'she is a girl', 'body', 'the child sister'], 'doc1', ['title', 'he is a boy', 'body', 'this is a test']]) def testSynonymUpdate(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child', 'offspring'), 0) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'he is a baby', 'body', 'this is a test')) self.assertOk(r.execute_command('ft.synupdate', 'idx', '0', 'baby')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc2', 1.0, 'fields', 'title', 'he is another baby', 'body', 'another test')) res = r.execute_command('ft.search', 'idx', 'child', 'EXPANDER', 'SYNONYM') # synonyms are applied from the moment they were added, previuse docs are not reindexed self.assertEqual(res, [long(1), 'doc2', ['title', 'he is another baby', 'body', 'another test']]) def testSynonymDump(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child', 'offspring'), 0) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'baby', 'child'), 1) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'tree', 'wood'), 2) self.assertEqual(r.execute_command('ft.syndump', 'idx'), ['baby', [long(1)], 'offspring', [long(0)], 'wood', [long(2)], 'tree', [long(2)], 'child', [long(0), long(1)], 'boy', [long(0)]]) def testSynonymAddWorngArity(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) exceptionStr = None try: r.execute_command('ft.synadd', 'idx') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'wrong number of arguments for \'ft.synadd\' command') def testSynonymAddUnknownIndex(self): with self.redis() as r: r.flushdb() exceptionStr = None try: r.execute_command('ft.synadd', 'idx', 'boy', 'child') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'Unknown index name') def testSynonymUpdateWorngArity(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) r.execute_command('ft.synadd', 'idx', 'boy', 'child') exceptionStr = None try: r.execute_command('ft.synupdate', 'idx', '0') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'wrong number of arguments for \'ft.synupdate\' command') def testSynonymUpdateUnknownIndex(self): with self.redis() as r: r.flushdb() exceptionStr = None try: r.execute_command('ft.synupdate', 'idx', '0', 'child') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'Unknown index name') def testSynonymUpdateNotNumberId(self): with self.redis() as r: r.flushdb() exceptionStr = None try: r.execute_command('ft.synupdate', 'idx', 'test', 'child') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'wrong parameters, id is not an integer') def testSynonymUpdateOutOfRangeId(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) r.execute_command('ft.synadd', 'idx', 'boy', 'child') exceptionStr = None try: r.execute_command('ft.synupdate', 'idx', '1', 'child') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'given id does not exists') def testSynonymDumpWorngArity(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) r.execute_command('ft.synadd', 'idx', 'boy', 'child') exceptionStr = None try: r.execute_command('ft.syndump') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'wrong number of arguments for \'ft.syndump\' command') def testSynonymUnknownIndex(self): with self.redis() as r: r.flushdb() exceptionStr = None try: r.execute_command('ft.syndump', 'idx') except Exception as e: exceptionStr = str(e) self.assertEqual(exceptionStr, 'Unknown index name') def testSynonymsRdb(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child', 'offspring'), 0) for _ in self.client.retry_with_rdb_reload(): self.assertEqual(r.execute_command('ft.syndump', 'idx'), ['offspring', [long(0)], 'child', [long(0)], 'boy', [long(0)]]) def testTwoSynonymsSearch(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy', 'child', 'offspring'), 0) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'he is a boy child boy', 'body', 'another test')) res = r.execute_command('ft.search', 'idx', 'offspring offspring', 'EXPANDER', 'SYNONYM') # synonyms are applied from the moment they were added, previuse docs are not reindexed self.assertEqual(res, [long(1), 'doc1', ['title', 'he is a boy child boy', 'body', 'another test']]) def testSynonymsIntensiveLoad(self): iterations = 1000 with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'body', 'text')) for i in range(iterations): self.assertEqual(r.execute_command('ft.synadd', 'idx', 'boy%d' % i, 'child%d' % i, 'offspring%d' % i), i) for i in range(iterations): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % i, 1.0, 'fields', 'title', 'he is a boy%d' % i, 'body', 'this is a test')) for _ in self.client.retry_with_rdb_reload(): for i in range(iterations): res = r.execute_command('ft.search', 'idx', 'child%d' % i, 'EXPANDER', 'SYNONYM') self.assertEqual(res, [long(1), 'doc%d' % i, ['title', 'he is a boy%d' % i, 'body', 'this is a test']]) RediSearch-1.2.2/src/pytest/test_tags.py000066400000000000000000000145571364126773500202450ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest import platform class TagsTestCase(BaseModuleTestCase): def search(self, r, *args): return r.execute_command('ft.search', *args) def testTagIndex(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag')) N = 10 for n in range(N): self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % n, 1.0, 'fields', 'title', 'hello world term%d' % n, 'tags', 'foo bar,xxx,tag %d' % n)) for _ in r.retry_with_rdb_reload(): res = self.search(r, 'idx', 'hello world') self.assertEqual(10, res[0]) res = self.search(r, 'idx', 'foo bar') self.assertEqual(0, res[0]) res = self.search(r, 'idx', '@tags:{foo bar}') self.assertEqual(N, res[0]) # inorder should not affect tags res = self.search( r, 'idx', '@tags:{tag 1} @tags:{foo bar}', 'slop 0', 'inorder') self.assertEqual(1, res[0]) for n in range(N - 1): res = self.search( r, 'idx', '@tags:{tag %d}' % n, 'nocontent') self.assertEqual(1, res[0]) self.assertEqual('doc%d' % n, res[1]) res = self.search( r, 'idx', '@tags:{tag\\ %d}' % n, 'nocontent') self.assertEqual(1, res[0]) res = self.search( r, 'idx', 'hello world @tags:{tag\\ %d|tag %d}' % (n, n + 1), 'nocontent') self.assertEqual(2, res[0]) self.assertEqual('doc%d' % n, res[2]) self.assertEqual('doc%d' % (n + 1), res[1]) res = self.search( r, 'idx', 'term%d @tags:{tag %d}' % (n, n), 'nocontent') self.assertEqual(1, res[0]) self.assertEqual('doc%d' % n, res[1]) def testSeparator(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag', 'separator', ':')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'tags', 'x:hello world: fooz bar:foo,bar:BOO FAR')) for _ in r.retry_with_rdb_reload(): for q in ('@tags:{hello world}', '@tags:{fooz bar}', '@tags:{foo\\,bar}', '@tags:{boo\\ far}', '@tags:{x}'): res = self.search(r, 'idx', q) self.assertEqual( 1, res[0], msg='Error trying {}'.format(q)) r.flushdb() def testTagPrefix(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag', 'separator', ',')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'tags', 'hello world,hello-world,hell,jell')) for _ in r.retry_with_rdb_reload(): for q in ('@tags:{hello world}', '@tags:{hel*}', '@tags:{hello\\-*}', '@tags:{he*}'): res = self.search(r, 'idx', q) self.assertEqual( res[0], 1, msg='Error trying {}, got {}'.format(q, res)) r.flushdb() def testTagFieldCase(self): with self.redis() as r: r.flushdb() self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'TAgs', 'tag')) self.assertOk(r.execute_command('ft.add', 'idx', 'doc1', 1.0, 'fields', 'title', 'hello world', 'TAgs', 'HELLO WORLD,FOO BAR')) for _ in r.retry_with_rdb_reload(): self.assertListEqual([0], r.execute_command( 'FT.SEARCH', 'idx', '@tags:{HELLO WORLD}')) self.assertListEqual([1, 'doc1'], r.execute_command( 'FT.SEARCH', 'idx', '@TAgs:{HELLO WORLD}', 'NOCONTENT')) self.assertListEqual([1, 'doc1'], r.execute_command( 'FT.SEARCH', 'idx', '@TAgs:{foo bar}', 'NOCONTENT')) self.assertListEqual([0], r.execute_command( 'FT.SEARCH', 'idx', '@TAGS:{foo bar}', 'NOCONTENT')) r.flushdb() def testInvalidSyntax(self): with self.redis() as r: r.flushdb() # invalid syntax with self.assertResponseError(): r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag', 'separator') with self.assertResponseError(): r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag', 'separator', "foo") with self.assertResponseError(): r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag', 'separator', "") def testTagVals(self): with self.redis() as r: r.flushdb() r.execute_command( 'ft.create', 'idx', 'schema', 'title', 'text', 'tags', 'tag', 'othertags', 'tag') N = 100 alltags = set() for n in range(N): tags = ('foo %d' % n, 'bar %d' % n, 'x') alltags.add(tags[0]) alltags.add(tags[1]) alltags.add(tags[2]) self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % n, 1.0, 'fields', 'tags', ','.join(tags), 'othertags', 'baz %d' % int(n // 2))) for _ in r.retry_with_rdb_reload(): res = r.execute_command('ft.tagvals', 'idx', 'tags') self.assertEqual(N * 2 + 1, len(res)) self.assertSetEqual(alltags, set(res)) res = r.execute_command('ft.tagvals', 'idx', 'othertags') self.assertEqual(N / 2, len(res)) if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/pytest/test_wideschema.py000066400000000000000000000036531364126773500214130ustar00rootroot00000000000000from rmtest import BaseModuleTestCase import redis import unittest import platform class SearchTestCase(BaseModuleTestCase): def search(self, r, *args): return r.execute_command('ft.search', *args) def testWideSchema(self): with self.redis() as r: r.flushdb() schema = [] FIELDS = 128 if platform.architecture()[0] == '64bit' else 64 for i in range(FIELDS): schema.extend(('field_%d' % i, 'TEXT')) self.assertOk(r.execute_command( 'ft.create', 'idx', 'schema', *schema)) N = 10 for n in range(N): fields = [] for i in range(FIELDS): fields.extend(('field_%d' % i, 'hello token_%d' % i)) self.assertOk(r.execute_command('ft.add', 'idx', 'doc%d' % n, 1.0, 'fields', *fields)) for _ in r.retry_with_rdb_reload(): for i in range(FIELDS): res = self.search( r, 'idx', '@field_%d:token_%d' % (i, i), 'NOCONTENT') self.assertEqual(res[0], N) res = r.execute_command( 'ft.explain', 'idx', '@field_%d:token_%d' % (i, i), 'VERBATIM').strip() self.assertEqual('@field_%d:token_%d' % (i, i), res) res = self.search( r, 'idx', 'hello @field_%d:token_%d' % (i, i), 'NOCONTENT') self.assertEqual(res[0], N) res = self.search(r, 'idx', ' '.join( ('@field_%d:token_%d' % (i, i) for i in range(FIELDS)))) self.assertEqual(res[0], N) res = self.search(r, 'idx', ' '.join( ('token_%d' % (i) for i in range(FIELDS)))) self.assertEqual(res[0], N) if __name__ == '__main__': unittest.main() RediSearch-1.2.2/src/qint.c000066400000000000000000000205621364126773500154560ustar00rootroot00000000000000#include #include #include #include #include "buffer.h" #include "rmalloc.h" #include "qint.h" QINT_API size_t qint_encode(BufferWriter *bw, uint32_t arr[], int len) { if (len <= 0 || len > 4) return 0; char leading = 0; // save the current buffer possition size_t pos = Buffer_Offset(bw->buf); // write a zero for the leading byte size_t ret = Buffer_Write(bw, "\0", 1); // encode the integers one by one for (int i = 0; i < len; i++) { int n = 0; do { // write one byte into the buffer and advance the byte count ret += Buffer_Write(bw, (char *)&arr[i], 1); n++; // shift right until we have no more bigger bytes that are non zero arr[i] = arr[i] >> 8; } while (arr[i] && n < 4); // encode the bit length of our integer into the leading byte. // 0 means 1 byte, 1 - 2 bytes, 2 - 3 bytes, 3 - bytes. // we encode it at the i*2th place in the leading byte leading |= (((n - 1) & 0x03) << i * 2); } Buffer_WriteAt(bw, pos, &leading, 1); return ret; } static size_t __qint_encode(char *leading, BufferWriter *bw, uint32_t i, int offset); /* internal function to encode just one number out of a larger array at a given offset (<=4) */ inline size_t __qint_encode(char *leading, BufferWriter *bw, uint32_t i, int offset) { size_t ret = 0; // byte size counter int n = 0; do { // write one byte into the buffer and advance the byte count ret += Buffer_Write(bw, (unsigned char *)&i, 1); n++; // shift right until we have no more bigger bytes that are non zero i = i >> 8; } while (i && n < 4); // encode the bit length of our integer into the leading byte. // 0 means 1 byte, 1 - 2 bytes, 2 - 3 bytes, 3 - bytes. // we encode it at the i*2th place in the leading byte *leading |= ((n - 1) & 0x03) << (offset * 2); return ret; } /* Encode one number ... */ QINT_API size_t qint_encode1(BufferWriter *bw, uint32_t i) { size_t ret = 1; char leading = 0; size_t pos = Buffer_Offset(bw->buf); Buffer_Write(bw, "\0", 1); ret += __qint_encode(&leading, bw, i, 0); Buffer_WriteAt(bw, pos, &leading, 1); return ret; } /* Encode two integers with one leading byte. return the size of the encoded data written */ QINT_API size_t qint_encode2(BufferWriter *bw, uint32_t i1, uint32_t i2) { size_t ret = 1; char leading = 0; size_t pos = Buffer_Offset(bw->buf); Buffer_Write(bw, "\0", 1); ret += __qint_encode(&leading, bw, i1, 0); ret += __qint_encode(&leading, bw, i2, 1); Buffer_WriteAt(bw, pos, &leading, 1); return ret; } /* Encode three integers with one leading byte. return the size of the encoded data written */ QINT_API size_t qint_encode3(BufferWriter *bw, uint32_t i1, uint32_t i2, uint32_t i3) { size_t ret = 1; char leading = 0; size_t pos = Buffer_Offset(bw->buf); Buffer_Write(bw, "\0", 1); ret += __qint_encode(&leading, bw, i1, 0); ret += __qint_encode(&leading, bw, i2, 1); ret += __qint_encode(&leading, bw, i3, 2); Buffer_WriteAt(bw, pos, &leading, 1); return ret; } /* Encode 4 integers with one leading byte. return the size of the encoded data written */ QINT_API size_t qint_encode4(BufferWriter *bw, uint32_t i1, uint32_t i2, uint32_t i3, uint32_t i4) { size_t ret = 1; char leading = 0; size_t pos = Buffer_Offset(bw->buf); Buffer_Write(bw, "\0", 1); ret += __qint_encode(&leading, bw, i1, 0); ret += __qint_encode(&leading, bw, i2, 1); ret += __qint_encode(&leading, bw, i3, 2); ret += __qint_encode(&leading, bw, i4, 3); Buffer_WriteAt(bw, pos, &leading, 1); return ret; } #define QINT_DECODE_VALUE(lval, bits, ptr, nused) \ do { \ switch (bits) { \ case 2: \ lval = *(uint32_t *)ptr & 0xFFFFFF; \ nused = 3; \ break; \ case 0: \ lval = *ptr; \ nused = 1; \ break; \ case 1: \ lval = *(uint32_t *)ptr & 0xFFFF; \ nused = 2; \ break; \ default: \ lval = *(uint32_t *)ptr; \ nused = 4; \ break; \ } \ } while (0) /* Decode up to 4 integers into an array. Returns the amount of data consumed or 0 if len invalid */ size_t qint_decode(BufferReader *__restrict__ br, uint32_t *__restrict__ arr, int len) { const uint8_t *start = (uint8_t *)BufferReader_Current(br); const uint8_t *p = start; uint8_t header = *p; p++; for (int i = 0; i < len; i++) { const uint8_t val = (header >> (i * 2)) & 0x03; size_t nused; QINT_DECODE_VALUE(arr[i], val, p, nused); p += nused; } size_t nread = p - start; Buffer_Skip(br, nread); return nread; } #define QINT_DECODE_MULTI(lval, pos, p, total, tmp) \ do { \ QINT_DECODE_VALUE(lval, ((*p >> (pos * 2)) & 0x03), (p + total + 1), tmp); \ total += tmp; \ } while (0) QINT_API size_t qint_decode1(BufferReader *br, uint32_t *i) { const uint8_t *p = (uint8_t *)BufferReader_Current(br); size_t total = 0, tmp = 0; QINT_DECODE_MULTI(*i, 0, p, total, tmp); Buffer_Skip(br, total + 1); return total + 1; } QINT_API size_t qint_decode2(BufferReader *br, uint32_t *i, uint32_t *i2) { const uint8_t *p = (uint8_t *)BufferReader_Current(br); size_t total = 0, tmp = 0; QINT_DECODE_MULTI(*i, 0, p, total, tmp); QINT_DECODE_MULTI(*i2, 1, p, total, tmp); Buffer_Skip(br, total + 1); return total + 1; } QINT_API size_t qint_decode3(BufferReader *br, uint32_t *i, uint32_t *i2, uint32_t *i3) { const uint8_t *p = (uint8_t *)BufferReader_Current(br); size_t total = 0, tmp = 0; QINT_DECODE_MULTI(*i, 0, p, total, tmp); QINT_DECODE_MULTI(*i2, 1, p, total, tmp); QINT_DECODE_MULTI(*i3, 2, p, total, tmp); Buffer_Skip(br, total + 1); return total + 1; } QINT_API size_t qint_decode4(BufferReader *br, uint32_t *i, uint32_t *i2, uint32_t *i3, uint32_t *i4) { const uint8_t *p = (uint8_t *)BufferReader_Current(br); size_t total = 0, tmp = 0; QINT_DECODE_MULTI(*i, 0, p, total, tmp); QINT_DECODE_MULTI(*i2, 1, p, total, tmp); QINT_DECODE_MULTI(*i3, 2, p, total, tmp); QINT_DECODE_MULTI(*i4, 3, p, total, tmp); Buffer_Skip(br, total + 1); return total + 1; } // void printConfig(unsigned char c) { // int off = 1; // int headerMasks[4] = {0xff, 0xffff, 0xffffff, 0xffffffff}; // printf("{.fields = {"); // for (int i = 0; i < 8; i += 2) { // printf("{%d, 0x%x},", off, headerMasks[(c >> i) & 0x03]); // off += ((c >> i) & 0x03) + 1; // } // printf("}, .size = %d }, \n", off); // } // #ifdef QINT_MAIN // int main(int argc, char **argv) { // RM_PatchAlloc(); // // for (uint16_t i = 0; i < 256; i++) { // // printConfig(i); // // } // // return 0; // Buffer *b = NewBuffer(1024); // BufferWriter bw = NewBufferWriter(b); // size_t sz = 0; // int x = 0; // int N = 10; // while (x < N) { // uint32_t arr[4] = {1000, 100, 300, 4}; // sz += qint_encode(&bw, arr, 4); // // printf("sz: %zd, x: %d\n",sz, x); // x++; // } // unsigned char *buf = b->data; // qintConfig config = configs[*(uint8_t *)buf]; // uint64_t total = 0; // TimeSample ts; // TimeSampler_Start(&ts); // BufferReader br = NewBufferReader(b); // uint32_t i1, i2, i3, i4; // for (int i = 0; i < N; i++) { // qint_decode4(&br, &i1, &i2, &i3, &i4); // printf("Decoded: %d, %d, %d, %d\n", i1, i2, i3, i4); // total += i1; // TimeSampler_Tick(&ts); // } // TimeSampler_End(&ts); // printf("Total: %zdms for %d iters, %fns/iter", TimeSampler_DurationMS(&ts), ts.num, // (double)TimeSampler_DurationNS(&ts) / (double)ts.num); // printf("%d\n", total); // // //printf("%d %x\n",config.fields[i].offset, config.fields[i].headerMask); // // printf("%d\n", ); // // } // return 0; // } //#endifRediSearch-1.2.2/src/qint.h000066400000000000000000000045131364126773500154610ustar00rootroot00000000000000#ifndef __QINT_H__ #define __QINT_H__ #include #include #include "buffer.h" #ifndef QINT_API #define QINT_API #endif /* QInt - fast encoding and decoding of up to 4 unsinged 32 bit integers as variable width * integers. The algorithm uses a leading byte to encode the size of each integer in bits, and has a * table for the actual offsets of each integer, per possible leading byte */ /* Encode an array of up to 4 unsinged integers into a buffer */ QINT_API size_t qint_encode(BufferWriter *bw, uint32_t arr[], int len); /* Encode one integer. with one leading byte. This is inefficent and if you find yourself needing * this, you should probably opt for normal varint */ QINT_API size_t qint_encode1(BufferWriter *bw, uint32_t i); /* Encode two integers with one leading byte. return the size of the encoded data written */ QINT_API size_t qint_encode2(BufferWriter *bw, uint32_t i1, uint32_t i2); /* Encode three integers with one leading byte. return the size of the encoded data written */ QINT_API size_t qint_encode3(BufferWriter *bw, uint32_t i1, uint32_t i2, uint32_t i3); /* Encode 4 integers with one leading byte. return the size of the encoded data written */ QINT_API size_t qint_encode4(BufferWriter *bw, uint32_t i1, uint32_t i2, uint32_t i3, uint32_t i4); /* Decode up to 4 integers into an array. Returns the amount of data consumed or 0 if len invalid */ QINT_API size_t qint_decode(BufferReader *__restrict__ br, uint32_t *__restrict__ arr, int len); /* Decode one unsinged integer from the buffer. This can only be used if the record has been encoded * with encode1 */ QINT_API size_t qint_decode1(BufferReader *br, uint32_t *i); /* Decode two unsinged integers from the buffer. This can only be used if the record has been * encoded * with encode2 */ QINT_API size_t qint_decode2(BufferReader *br, uint32_t *i, uint32_t *i2); /* Decode 3 unsinged integer from the buffer. This can only be used if the record has been encoded * with encode3 */ QINT_API size_t qint_decode3(BufferReader *br, uint32_t *i, uint32_t *i2, uint32_t *i3); /* Decode 4 unsinged integer from the buffer. This can only be used if the record has been encoded * with encode4 or encoded array of len 4 */ QINT_API size_t qint_decode4(BufferReader *br, uint32_t *i, uint32_t *i2, uint32_t *i3, uint32_t *i4); #endifRediSearch-1.2.2/src/query.c000066400000000000000000000663701364126773500156570ustar00rootroot00000000000000#include #include #include #include #include #include "geo_index.h" #include "index.h" #include "query.h" #include "config.h" #include "query_parser/parser.h" #include "redis_index.h" #include "tokenize.h" #include "util/logging.h" #include "extension.h" #include "ext/default.h" #include "rmutil/sds.h" #include "tag_index.h" #include "err.h" #include "concurrent_ctx.h" #include "util/strconv.h" static void QueryTokenNode_Free(QueryTokenNode *tn) { if (tn->str) free(tn->str); } static void QueryPhraseNode_Free(QueryPhraseNode *pn) { for (int i = 0; i < pn->numChildren; i++) { QueryNode_Free(pn->children[i]); } if (pn->children) { free(pn->children); pn->children = NULL; } } static void QueryUnionNode_Free(QueryUnionNode *pn) { for (int i = 0; i < pn->numChildren; i++) { QueryNode_Free(pn->children[i]); } if (pn->children) { free(pn->children); pn->children = NULL; } } static void QueryTagNode_Free(QueryTagNode *tag) { for (int i = 0; i < tag->numChildren; i++) { QueryNode_Free(tag->children[i]); } if (tag->children) { free(tag->children); tag->children = NULL; } free((char *)tag->fieldName); } // void _queryNumericNode_Free(QueryNumericNode *nn) { free(nn->nf); } void QueryNode_Free(QueryNode *n) { if (!n) return; switch (n->type) { case QN_TOKEN: QueryTokenNode_Free(&n->tn); break; case QN_PHRASE: QueryPhraseNode_Free(&n->pn); break; case QN_UNION: QueryUnionNode_Free(&n->un); break; case QN_NUMERIC: NumericFilter_Free(n->nn.nf); break; // case QN_NOT: QueryNode_Free(n->not.child); break; case QN_OPTIONAL: QueryNode_Free(n->opt.child); break; case QN_PREFX: QueryTokenNode_Free(&n->pfx); break; case QN_GEO: if (n->gn.gf) { GeoFilter_Free(n->gn.gf); } break; case QN_FUZZY: QueryTokenNode_Free(&n->fz.tok); break; case QN_WILDCARD: case QN_IDS: break; case QN_TAG: QueryTagNode_Free(&n->tag); } free(n); } static QueryNode *NewQueryNode(QueryNodeType type) { QueryNode *s = calloc(1, sizeof(QueryNode)); s->type = type; s->opts = (QueryNodeOptions){ .fieldMask = RS_FIELDMASK_ALL, .flags = 0, .maxSlop = -1, .inOrder = 0, .weight = 1, }; return s; } QueryNode *NewTokenNodeExpanded(QueryParseCtx *q, const char *s, size_t len, RSTokenFlags flags) { QueryNode *ret = NewQueryNode(QN_TOKEN); q->numTokens++; ret->tn = (QueryTokenNode){.str = (char *)s, .len = len, .expanded = 1, .flags = flags}; return ret; } QueryNode *NewTokenNode(QueryParseCtx *q, const char *s, size_t len) { if (len == (size_t)-1) { len = strlen(s); } QueryNode *ret = NewQueryNode(QN_TOKEN); q->numTokens++; ret->tn = (QueryTokenNode){.str = (char *)s, .len = len, .expanded = 0, .flags = 0}; return ret; } QueryNode *NewWildcardNode() { return NewQueryNode(QN_WILDCARD); } QueryNode *NewPrefixNode(QueryParseCtx *q, const char *s, size_t len) { QueryNode *ret = NewQueryNode(QN_PREFX); q->numTokens++; ret->pfx = (QueryPrefixNode){.str = (char *)s, .len = len, .expanded = 0, .flags = 0}; return ret; } QueryNode *NewFuzzyNode(QueryParseCtx *q, const char *s, size_t len, int maxDist) { QueryNode *ret = NewQueryNode(QN_FUZZY); q->numTokens++; ret->fz = (QueryFuzzyNode){ .tok = (RSToken){ .str = (char *)s, .len = len, .expanded = 0, .flags = 0, }, .maxDist = maxDist, }; return ret; } QueryNode *NewUnionNode() { QueryNode *ret = NewQueryNode(QN_UNION); // ret->fieldMask = 0; ret->un = (QueryUnionNode){.children = NULL, .numChildren = 0}; return ret; } QueryNode *NewPhraseNode(int exact) { QueryNode *ret = NewQueryNode(QN_PHRASE); // ret->fieldMask = 0; ret->pn = (QueryPhraseNode){.children = NULL, .numChildren = 0, .exact = exact}; return ret; } QueryNode *NewNotNode(QueryNode *n) { QueryNode *ret = NewQueryNode(QN_NOT); ret->not.child = n; return ret; } QueryNode *NewOptionalNode(QueryNode *n) { QueryNode *ret = NewQueryNode(QN_OPTIONAL); ret->not.child = n; return ret; } QueryNode *NewTagNode(const char *field, size_t len) { QueryNode *ret = NewQueryNode(QN_TAG); ret->tag.fieldName = field; ret->tag.len = len; ret->tag.numChildren = 0; ret->tag.children = NULL; return ret; } QueryNode *NewNumericNode(NumericFilter *flt) { QueryNode *ret = NewQueryNode(QN_NUMERIC); ret->nn = (QueryNumericNode){.nf = flt}; return ret; } QueryNode *NewGeofilterNode(GeoFilter *flt) { QueryNode *ret = NewQueryNode(QN_GEO); ret->gn = (QueryGeofilterNode){.gf = flt}; return ret; } static void Query_SetFilterNode(QueryParseCtx *q, QueryNode *n) { if (q->root == NULL || n == NULL) return; // for a simple phrase node we just add the numeric node if (q->root->type == QN_PHRASE) { // we usually want the numeric range as the "leader" iterator. // TODO: do this in a smart manner QueryPhraseNode_AddChild(q->root, n); for (int i = q->root->pn.numChildren - 1; i > 0; --i) { q->root->pn.children[i] = q->root->pn.children[i - 1]; } q->root->pn.children[0] = n; q->numTokens++; } else { // for other types, we need to create a new phrase node QueryNode *nr = NewPhraseNode(0); QueryPhraseNode_AddChild(nr, n); QueryPhraseNode_AddChild(nr, q->root); q->numTokens++; q->root = nr; } } void Query_SetGeoFilter(QueryParseCtx *q, GeoFilter *gf) { Query_SetFilterNode(q, NewGeofilterNode(gf)); } void Query_SetNumericFilter(QueryParseCtx *q, NumericFilter *nf) { Query_SetFilterNode(q, NewNumericNode(nf)); } QueryNode *NewIdFilterNode(IdFilter *flt) { QueryNode *qn = NewQueryNode(QN_IDS); qn->fn.f = flt; return qn; } void Query_SetIdFilter(QueryParseCtx *q, IdFilter *f) { Query_SetFilterNode(q, NewIdFilterNode(f)); } static void QueryNode_Expand(RSQueryTokenExpander expander, RSQueryExpanderCtx *expCtx, QueryNode **pqn) { QueryNode *qn = *pqn; // Do not expand verbatim nodes if (qn->opts.flags & QueryNode_Verbatim) { return; } if (qn->type == QN_TOKEN) { expCtx->currentNode = pqn; expander(expCtx, &qn->tn); } else if (qn->type == QN_PHRASE && !qn->pn.exact) { // do not expand exact phrases for (int i = 0; i < qn->pn.numChildren; i++) { QueryNode_Expand(expander, expCtx, &qn->pn.children[i]); } } else if (qn->type == QN_UNION) { for (int i = 0; i < qn->un.numChildren; i++) { QueryNode_Expand(expander, expCtx, &qn->un.children[i]); } } } void Query_Expand(QueryParseCtx *q, const char *expander) { if (!q->root) return; RSQueryExpanderCtx expCtx = {.query = q, .language = q->opts.language ? q->opts.language : DEFAULT_LANGUAGE}; ExtQueryExpanderCtx *xpc = Extensions_GetQueryExpander(&expCtx, expander ? expander : DEFAULT_EXPANDER_NAME); if (xpc && xpc->exp) { QueryNode_Expand(xpc->exp, &expCtx, &q->root); if (xpc->ff) xpc->ff(expCtx.privdata); } } IndexIterator *Query_EvalTokenNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_TOKEN) { return NULL; } // if there's only one word in the query and no special field filtering, // and we are not paging beyond MAX_SCOREINDEX_SIZE // we can just use the optimized score index int isSingleWord = q->numTokens == 1 && q->opts->fieldMask == RS_FIELDMASK_ALL; RSQueryTerm *term = NewQueryTerm(&qn->tn, q->tokenId++); IndexReader *ir = Redis_OpenReader(q->sctx, term, q->docTable, isSingleWord, q->opts->fieldMask & qn->opts.fieldMask, q->conc, qn->opts.weight); if (ir == NULL) { Term_Free(term); return NULL; } return NewReadIterator(ir); } static IndexIterator *iterateExpandedTerms(QueryEvalCtx *q, Trie *terms, const char *str, size_t len, int maxDist, int prefixMode, QueryNodeOptions *opts) { TrieIterator *it = Trie_Iterate(terms, str, len, maxDist, prefixMode); if (!it) return NULL; size_t itsSz = 0, itsCap = 8; IndexIterator **its = calloc(itsCap, sizeof(*its)); rune *rstr = NULL; t_len slen = 0; float score = 0; int dist = 0; // an upper limit on the number of expansions is enforced to avoid stuff like "*" while (TrieIterator_Next(it, &rstr, &slen, NULL, &score, &dist) && itsSz < RSGlobalConfig.maxPrefixExpansions) { // Create a token for the reader RSToken tok = (RSToken){ .expanded = 0, .flags = 0, .len = 0, }; tok.str = runesToStr(rstr, slen, &tok.len); if (q->sctx && q->sctx->redisCtx) { RedisModule_Log(q->sctx->redisCtx, "debug", "Found fuzzy expansion: %s %f", tok.str, score); } RSQueryTerm *term = NewQueryTerm(&tok, q->tokenId++); // Open an index reader IndexReader *ir = Redis_OpenReader(q->sctx, term, &q->sctx->spec->docs, 0, q->opts->fieldMask & opts->fieldMask, q->conc, 1); free(tok.str); if (!ir) { Term_Free(term); continue; } // Add the reader to the iterator array its[itsSz++] = NewReadIterator(ir); if (itsSz == itsCap) { itsCap *= 2; its = realloc(its, itsCap * sizeof(*its)); } } DFAFilter_Free(it->ctx); free(it->ctx); TrieIterator_Free(it); // printf("Expanded %d terms!\n", itsSz); if (itsSz == 0) { free(its); return NULL; } return NewUnionIterator(its, itsSz, q->docTable, 1, opts->weight); } /* Ealuate a prefix node by expanding all its possible matches and creating one big UNION on all * of them */ static IndexIterator *Query_EvalPrefixNode(QueryEvalCtx *q, QueryNode *qn) { assert(qn->type == QN_PREFX); // we allow a minimum of 2 letters in the prefx by default (configurable) if (qn->pfx.len < RSGlobalConfig.minTermPrefix) { return NULL; } Trie *terms = q->sctx->spec->terms; if (!terms) return NULL; return iterateExpandedTerms(q, terms, qn->pfx.str, qn->pfx.len, 0, 1, &qn->opts); } static IndexIterator *Query_EvalFuzzyNode(QueryEvalCtx *q, QueryNode *qn) { assert(qn->type == QN_FUZZY); Trie *terms = q->sctx->spec->terms; if (!terms) return NULL; return iterateExpandedTerms(q, terms, qn->pfx.str, qn->pfx.len, qn->fz.maxDist, 0, &qn->opts); } static IndexIterator *Query_EvalPhraseNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_PHRASE) { return NULL; } QueryPhraseNode *node = &qn->pn; // an intersect stage with one child is the same as the child, so we just // return it if (node->numChildren == 1) { node->children[0]->opts.fieldMask &= qn->opts.fieldMask; return Query_EvalNode(q, node->children[0]); } // recursively eval the children IndexIterator **iters = calloc(node->numChildren, sizeof(IndexIterator *)); for (int i = 0; i < node->numChildren; i++) { node->children[i]->opts.fieldMask &= qn->opts.fieldMask; iters[i] = Query_EvalNode(q, node->children[i]); } IndexIterator *ret; if (node->exact) { ret = NewIntersecIterator(iters, node->numChildren, q->docTable, q->opts->fieldMask & qn->opts.fieldMask, 0, 1, qn->opts.weight); } else { // Let the query node override the slop/order parameters int slop = qn->opts.maxSlop; if (slop == -1) slop = q->opts->slop; // Let the query node override the inorder of the whole query int inOrder = q->opts->flags & Search_InOrder; if (qn->opts.inOrder) inOrder = 1; // If in order was specified and not slop, set slop to maximum possible value. // Otherwise we can't check if the results are in order if (inOrder && slop == -1) { slop = __INT_MAX__; } ret = NewIntersecIterator(iters, node->numChildren, q->docTable, q->opts->fieldMask & qn->opts.fieldMask, slop, inOrder, qn->opts.weight); } return ret; } static IndexIterator *Query_EvalWildcardNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_WILDCARD || !q->docTable) { return NULL; } return NewWildcardIterator(q->docTable->maxDocId); } static IndexIterator *Query_EvalNotNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_NOT) { return NULL; } QueryNotNode *node = &qn->not; return NewNotIterator(node->child ? Query_EvalNode(q, node->child) : NULL, q->docTable->maxDocId, qn->opts.weight); } static IndexIterator *Query_EvalOptionalNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_OPTIONAL) { return NULL; } QueryOptionalNode *node = &qn->opt; return NewOptionalIterator(node->child ? Query_EvalNode(q, node->child) : NULL, q->docTable->maxDocId, qn->opts.weight); } static IndexIterator *Query_EvalNumericNode(QueryEvalCtx *q, QueryNumericNode *node) { FieldSpec *fs = IndexSpec_GetField(q->sctx->spec, node->nf->fieldName, strlen(node->nf->fieldName)); if (!fs || fs->type != FIELD_NUMERIC) { return NULL; } return NewNumericFilterIterator(q->sctx, node->nf, q->conc); } static IndexIterator *Query_EvalGeofilterNode(QueryEvalCtx *q, QueryGeofilterNode *node, double weight) { FieldSpec *fs = IndexSpec_GetField(q->sctx->spec, node->gf->property, strlen(node->gf->property)); if (fs == NULL || fs->type != FIELD_GEO) { return NULL; } GeoIndex gi = {.ctx = q->sctx, .sp = fs}; return NewGeoRangeIterator(&gi, node->gf, weight); } static IndexIterator *Query_EvalIdFilterNode(QueryEvalCtx *q, QueryIdFilterNode *node) { return NewIdFilterIterator(node->f); } static IndexIterator *Query_EvalUnionNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_UNION) { return NULL; } QueryUnionNode *node = &qn->un; // a union stage with one child is the same as the child, so we just return it if (node->numChildren == 1) { node->children[0]->opts.fieldMask &= qn->opts.fieldMask; return Query_EvalNode(q, node->children[0]); } // recursively eval the children IndexIterator **iters = calloc(node->numChildren, sizeof(IndexIterator *)); int n = 0; for (int i = 0; i < node->numChildren; i++) { node->children[i]->opts.fieldMask &= qn->opts.fieldMask; IndexIterator *it = Query_EvalNode(q, node->children[i]); if (it) { iters[n++] = it; } } if (n == 0) { free(iters); return NULL; } if (n == 1) { IndexIterator *ret = iters[0]; free(iters); return ret; } IndexIterator *ret = NewUnionIterator(iters, n, q->docTable, 0, qn->opts.weight); return ret; } /* Evaluate a tag prefix by expanding it with a lookup on the tag index */ static IndexIterator *Query_EvalTagPrefixNode(QueryEvalCtx *q, TagIndex *idx, QueryNode *qn, RedisModuleKey *k, RedisModuleString *kn, double weight) { if (qn->type != QN_PREFX) { return NULL; } // we allow a minimum of 2 letters in the prefx by default (configurable) if (qn->pfx.len < RSGlobalConfig.minTermPrefix) { return NULL; } if (!idx || !idx->values) return NULL; TrieMapIterator *it = TrieMap_Iterate(idx->values, qn->pfx.str, qn->pfx.len); if (!it) return NULL; size_t itsSz = 0, itsCap = 8; IndexIterator **its = calloc(itsCap, sizeof(*its)); // an upper limit on the number of expansions is enforced to avoid stuff like "*" char *s; tm_len_t sl; void *ptr; // Find all completions of the prefix while (TrieMapIterator_Next(it, &s, &sl, &ptr) && itsSz < RSGlobalConfig.maxPrefixExpansions) { IndexIterator *ret = TagIndex_OpenReader(idx, q->docTable, s, sl, q->conc, k, kn, 1); if (!ret) continue; // Add the reader to the iterator array its[itsSz++] = ret; if (itsSz == itsCap) { itsCap *= 2; its = realloc(its, itsCap * sizeof(*its)); } } TrieMapIterator_Free(it); // printf("Expanded %d terms!\n", itsSz); if (itsSz == 0) { free(its); return NULL; } return NewUnionIterator(its, itsSz, q->docTable, 1, weight); } static IndexIterator *query_EvalSingleTagNode(QueryEvalCtx *q, TagIndex *idx, QueryNode *n, RedisModuleKey *k, RedisModuleString *kn, double weight) { switch (n->type) { case QN_TOKEN: return TagIndex_OpenReader(idx, q->docTable, n->tn.str, n->tn.len, q->conc, k, kn, weight); case QN_PREFX: return Query_EvalTagPrefixNode(q, idx, n, k, kn, weight); case QN_PHRASE: { char *terms[n->pn.numChildren]; for (int i = 0; i < n->pn.numChildren; i++) { if (n->pn.children[i]->type == QN_TOKEN) { terms[i] = n->pn.children[i]->tn.str; } else { terms[i] = ""; } } sds s = sdsjoin(terms, n->pn.numChildren, " "); IndexIterator *ret = TagIndex_OpenReader(idx, q->docTable, s, sdslen(s), q->conc, k, kn, weight); sdsfree(s); return ret; } default: return NULL; } } static IndexIterator *Query_EvalTagNode(QueryEvalCtx *q, QueryNode *qn) { if (qn->type != QN_TAG) { return NULL; } QueryTagNode *node = &qn->tag; RedisModuleKey *k = NULL; RedisModuleString *str = TagIndex_FormatName(q->sctx, node->fieldName); TagIndex *idx = TagIndex_Open(q->sctx->redisCtx, str, 0, &k); if (!idx) return NULL; // a union stage with one child is the same as the child, so we just return it if (node->numChildren == 1) { return query_EvalSingleTagNode(q, idx, node->children[0], k, str, qn->opts.weight); } // recursively eval the children IndexIterator **iters = calloc(node->numChildren, sizeof(IndexIterator *)); int n = 0; for (int i = 0; i < node->numChildren; i++) { IndexIterator *it = query_EvalSingleTagNode(q, idx, node->children[i], k, str, qn->opts.weight); if (it) { iters[n++] = it; } } if (n == 0) { free(iters); return NULL; } IndexIterator *ret = NewUnionIterator(iters, n, q->docTable, 0, qn->opts.weight); return ret; } IndexIterator *Query_EvalNode(QueryEvalCtx *q, QueryNode *n) { switch (n->type) { case QN_TOKEN: return Query_EvalTokenNode(q, n); case QN_PHRASE: return Query_EvalPhraseNode(q, n); case QN_UNION: return Query_EvalUnionNode(q, n); case QN_TAG: return Query_EvalTagNode(q, n); case QN_NOT: return Query_EvalNotNode(q, n); case QN_PREFX: return Query_EvalPrefixNode(q, n); case QN_FUZZY: return Query_EvalFuzzyNode(q, n); case QN_NUMERIC: return Query_EvalNumericNode(q, &n->nn); case QN_OPTIONAL: return Query_EvalOptionalNode(q, n); case QN_GEO: return Query_EvalGeofilterNode(q, &n->gn, n->opts.weight); case QN_IDS: return Query_EvalIdFilterNode(q, &n->fn); case QN_WILDCARD: return Query_EvalWildcardNode(q, n); } return NULL; } /* Set the field mask recursively on a query node. This is called by the parser to handle * situations like @foo:(bar baz|gaz), where a complex tree is being applied a field mask */ void QueryNode_SetFieldMask(QueryNode *n, t_fieldMask mask) { if (!n) return; n->opts.fieldMask &= mask; switch (n->type) { case QN_PHRASE: for (int i = 0; i < n->pn.numChildren; i++) { QueryNode_SetFieldMask(n->pn.children[i], mask); } break; case QN_UNION: for (int i = 0; i < n->un.numChildren; i++) { QueryNode_SetFieldMask(n->un.children[i], mask); } break; case QN_NOT: QueryNode_SetFieldMask(n->not.child, mask); break; case QN_OPTIONAL: QueryNode_SetFieldMask(n->opt.child, mask); break; default: break; } } void QueryPhraseNode_AddChild(QueryNode *parent, QueryNode *child) { if (!child) return; QueryPhraseNode *pn = &parent->pn; pn->children = realloc(pn->children, sizeof(QueryNode *) * (pn->numChildren + 1)); pn->children[pn->numChildren++] = child; // QueryNode_Print(NULL, parent, 0); } void QueryUnionNode_AddChild(QueryNode *parent, QueryNode *child) { if (!child) return; QueryUnionNode *un = &parent->un; un->children = realloc(un->children, sizeof(QueryNode *) * (un->numChildren + 1)); un->children[un->numChildren++] = child; } void QueryTagNode_AddChildren(QueryNode *parent, QueryNode **children, size_t num) { if (!children) return; QueryTagNode *tn = &parent->tag; tn->children = realloc(tn->children, sizeof(QueryNode *) * (tn->numChildren + num)); for (size_t i = 0; i < num; i++) { if (children[i] && (children[i]->type == QN_TOKEN || children[i]->type == QN_PHRASE || children[i]->type == QN_PREFX)) { tn->children[tn->numChildren++] = children[i]; } } } static void assignSearchOpts(RSSearchOptions *tgt, const RSSearchOptions *src, RedisSearchCtx *ctx) { if (src) { *tgt = *src; } else { *tgt = RS_DEFAULT_SEARCHOPTS; } if (tgt->flags & Search_NoStopwrods) { tgt->stopwords = EmptyStopWordList(); } else { tgt->stopwords = (ctx && ctx->spec && ctx->spec->stopwords) ? ctx->spec->stopwords : DefaultStopWordList(); } } QueryParseCtx *NewQueryParseCtx(RedisSearchCtx *sctx, const char *raw, size_t len, RSSearchOptions *opts) { QueryParseCtx *ctx = malloc(sizeof(*ctx)); ctx->len = len; ctx->raw = strdup(raw); ctx->numTokens = 0; ctx->ok = 1; ctx->root = NULL; ctx->sctx = sctx; ctx->tokenId = 1; ctx->errorMsg = NULL; assignSearchOpts(&ctx->opts, opts, sctx); return ctx; } /* Set the concurrent mode of the query. By default it's on, setting here to 0 will turn it off, * resulting in the query not performing context switches */ // void Query_SetConcurrentMode(QueryPlan *q, int concurrent) { // q->concurrentMode = concurrent; // } static sds doPad(sds s, int len) { if (!len) return s; char buf[len * 2 + 1]; memset(buf, ' ', len * 2); buf[len * 2] = 0; return sdscat(s, buf); } static sds QueryNode_DumpSds(sds s, QueryParseCtx *q, QueryNode *qs, int depth) { s = doPad(s, depth); if (qs->opts.fieldMask == 0) { s = sdscat(s, "@NULL:"); } if (qs->opts.fieldMask && qs->opts.fieldMask != RS_FIELDMASK_ALL && qs->type != QN_NUMERIC && qs->type != QN_GEO && qs->type != QN_IDS) { if (!q || !q->sctx->spec) { s = sdscatprintf(s, "@%" PRIu64, (uint64_t)qs->opts.fieldMask); } else { s = sdscat(s, "@"); t_fieldMask fm = qs->opts.fieldMask; int i = 0, n = 0; while (fm) { t_fieldMask bit = (fm & 1) << i; if (bit) { char *f = GetFieldNameByBit(q->sctx->spec, bit); s = sdscatprintf(s, "%s%s", n ? "|" : "", f ? f : "n/a"); n++; } fm = fm >> 1; i++; } } s = sdscat(s, ":"); } switch (qs->type) { case QN_PHRASE: s = sdscatprintf(s, "%s {\n", qs->pn.exact ? "EXACT" : "INTERSECT"); for (int i = 0; i < qs->pn.numChildren; i++) { s = QueryNode_DumpSds(s, q, qs->pn.children[i], depth + 1); } s = doPad(s, depth); break; case QN_TOKEN: s = sdscatprintf(s, "%s%s", (char *)qs->tn.str, qs->tn.expanded ? "(expanded)" : ""); if (qs->opts.weight != 1) { s = sdscatprintf(s, " => {$weight: %g;}", qs->opts.weight); } s = sdscat(s, "\n"); return s; case QN_PREFX: s = sdscatprintf(s, "PREFIX{%s*", (char *)qs->pfx.str); break; case QN_NOT: s = sdscat(s, "NOT{\n"); s = QueryNode_DumpSds(s, q, qs->not.child, depth + 1); s = doPad(s, depth); break; case QN_OPTIONAL: s = sdscat(s, "OPTIONAL{\n"); s = QueryNode_DumpSds(s, q, qs->not.child, depth + 1); s = doPad(s, depth); break; case QN_NUMERIC: { NumericFilter *f = qs->nn.nf; s = sdscatprintf(s, "NUMERIC {%f %s @%s %s %f", f->min, f->inclusiveMin ? "<=" : "<", f->fieldName, f->inclusiveMax ? "<=" : "<", f->max); } break; case QN_UNION: s = sdscat(s, "UNION {\n"); for (int i = 0; i < qs->un.numChildren; i++) { s = QueryNode_DumpSds(s, q, qs->un.children[i], depth + 1); } s = doPad(s, depth); break; case QN_TAG: s = sdscatprintf(s, "TAG:@%.*s {\n", (int)qs->tag.len, qs->tag.fieldName); for (int i = 0; i < qs->tag.numChildren; i++) { s = QueryNode_DumpSds(s, q, qs->tag.children[i], depth + 1); } s = doPad(s, depth); break; case QN_GEO: s = sdscatprintf(s, "GEO %s:{%f,%f --> %f %s", qs->gn.gf->property, qs->gn.gf->lon, qs->gn.gf->lat, qs->gn.gf->radius, qs->gn.gf->unit); break; case QN_IDS: s = sdscat(s, "IDS { "); for (int i = 0; i < qs->fn.f->size; i++) { s = sdscatprintf(s, "%llu,", (unsigned long long)qs->fn.f->ids[i]); } break; case QN_WILDCARD: s = sdscat(s, ""); break; case QN_FUZZY: s = sdscatprintf(s, "FUZZY{%s}\n", qs->fz.tok.str); return s; } s = sdscat(s, "}"); // print attributes if not the default if (qs->opts.weight != 1 || qs->opts.maxSlop != -1 || qs->opts.inOrder) { s = sdscat(s, " => {"); if (qs->opts.weight != 1) { s = sdscatprintf(s, " $weight: %g;", qs->opts.weight); } if (qs->opts.maxSlop != -1) { s = sdscatprintf(s, " $slop: %d;", qs->opts.maxSlop); } if (qs->opts.inOrder || qs->opts.maxSlop != -1) { s = sdscatprintf(s, " $inorder: %s;", qs->opts.inOrder ? "true" : "false"); } s = sdscat(s, " }"); } s = sdscat(s, "\n"); return s; } /* Return a string representation of the query parse tree. The string should be freed by the * caller */ const char *Query_DumpExplain(QueryParseCtx *q) { // empty query if (!q || !q->root) { return strdup("NULL"); } sds s = QueryNode_DumpSds(sdsnew(""), q, q->root, 0); const char *ret = strndup(s, sdslen(s)); sdsfree(s); return ret; } void QueryNode_Print(QueryParseCtx *q, QueryNode *qn, int depth) { sds s = QueryNode_DumpSds(sdsnew(""), q, qn, depth); printf("%s", s); sdsfree(s); } void Query_Free(QueryParseCtx *q) { if (q->root) { QueryNode_Free(q->root); } free(q->raw); free(q); } int QueryNode_ApplyAttribute(QueryNode *qn, QueryAttribute *attr, char **err) { // Apply slop: [-1 ... INF] if (STR_EQCASE(attr->name, attr->namelen, "slop")) { long long n; if (!ParseInteger(attr->value, &n) || n < -1) { SET_ERR(err, "Invalid value for slop"); return 0; } qn->opts.maxSlop = n; } else if (STR_EQCASE(attr->name, attr->namelen, "inorder")) { // Apply inorder: true|false int b; if (!ParseBoolean(attr->value, &b)) { SET_ERR(err, "Invalid value for 'inorder'"); return 0; } qn->opts.inOrder = b; } else if (STR_EQCASE(attr->name, attr->namelen, "weight")) { // Apply weight: [0 ... INF] double d; if (!ParseDouble(attr->value, &d) || d < 0) { SET_ERR(err, "Invalid value for 'weight'"); return 0; } qn->opts.weight = d; } else { FMT_ERR(err, "Invalid attribute '%.*s'", (int)attr->namelen, attr->name); return 0; } return 1; } int QueryNode_ApplyAttributes(QueryNode *qn, QueryAttribute *attrs, size_t len, char **err) { for (size_t i = 0; i < len; i++) { if (!QueryNode_ApplyAttribute(qn, &attrs[i], err)) { return 0; } } return 1; }RediSearch-1.2.2/src/query.h000066400000000000000000000061451364126773500156560ustar00rootroot00000000000000#ifndef __QUERY_H__ #define __QUERY_H__ #include #include "index.h" #include "numeric_filter.h" #include "rmutil/cmdparse.h" #include "numeric_index.h" #include "geo_index.h" #include "query_node.h" #include "query_parser/tokenizer.h" #include "redis_index.h" #include "redismodule.h" #include "spec.h" #include "id_filter.h" #include "redisearch.h" #include "rmutil/sds.h" #include "concurrent_ctx.h" #include "search_options.h" /* A QueryParseCtx represents the parse tree and execution plan for a single * search QueryParseCtx */ typedef struct RSQuery { // the raw query text char *raw; // the raw text len size_t len; // the token count int numTokens; // the current token id (we assign ids to all token nodes) int tokenId; // parsing state int ok; // Index spec RedisSearchCtx *sctx; // query root QueryNode *root; char *errorMsg; RSSearchOptions opts; } QueryParseCtx; typedef struct { ConcurrentSearchCtx *conc; RedisSearchCtx *sctx; int numTokens; int tokenId; DocTable *docTable; RSSearchOptions *opts; } QueryEvalCtx; /* Evaluate a QueryParseCtx stage and prepare it for execution. As execution is lazy this doesn't actually do anything besides prepare the execution chaing */ IndexIterator *Query_EvalNode(QueryEvalCtx *q, QueryNode *n); /* Free the QueryParseCtx execution stage and its children recursively */ void QueryNode_Free(QueryNode *n); QueryNode *NewTokenNode(QueryParseCtx *q, const char *s, size_t len); QueryNode *NewTokenNodeExpanded(QueryParseCtx *q, const char *s, size_t len, RSTokenFlags flags); QueryNode *NewPhraseNode(int exact); QueryNode *NewUnionNode(); QueryNode *NewPrefixNode(QueryParseCtx *q, const char *s, size_t len); QueryNode *NewFuzzyNode(QueryParseCtx *q, const char *s, size_t len, int maxDist); QueryNode *NewNotNode(QueryNode *n); QueryNode *NewOptionalNode(QueryNode *n); QueryNode *NewNumericNode(NumericFilter *flt); QueryNode *NewIdFilterNode(IdFilter *flt); QueryNode *NewWildcardNode(); QueryNode *NewGeofilterNode(GeoFilter *flt); QueryNode *NewTagNode(const char *tag, size_t len); void QueryNode_SetFieldMask(QueryNode *n, t_fieldMask mask); void Query_SetNumericFilter(QueryParseCtx *q, NumericFilter *nf); void Query_SetGeoFilter(QueryParseCtx *q, GeoFilter *gf); void Query_SetIdFilter(QueryParseCtx *q, IdFilter *f); /* Only used in tests, for now */ void QueryNode_Print(QueryParseCtx *q, QueryNode *qs, int depth); #define QUERY_ERROR_INTERNAL_STR "Internal error processing QueryParseCtx" #define QUERY_ERROR_INTERNAL -1 /* Initialize a new QueryParseCtx object from user input. This does not parse the QueryParseCtx * just yet */ QueryParseCtx *NewQueryParseCtx(RedisSearchCtx *sctx, const char *raw, size_t len, RSSearchOptions *opts); QueryNode *Query_Parse(QueryParseCtx *q, char **err); void Query_Expand(QueryParseCtx *q, const char *expander); /* Return a string representation of the QueryParseCtx parse tree. The string should be freed by * the * caller */ const char *Query_DumpExplain(QueryParseCtx *q); /* Free a QueryParseCtx object */ void Query_Free(QueryParseCtx *q); #endif RediSearch-1.2.2/src/query_node.h000066400000000000000000000073101364126773500166560ustar00rootroot00000000000000#ifndef __QUERY_NODE_H__ #define __QUERY_NODE_H__ #include #include "redisearch.h" //#include "numeric_index.h" struct RSQueryNode; struct numericFilter; struct geoFilter; struct idFilter; /* The types of query nodes */ typedef enum { /* Phrase (AND) node, exact or not */ QN_PHRASE, /* Union (OR) Node */ QN_UNION, /* Single token node */ QN_TOKEN, /* Numeric filter node */ QN_NUMERIC, /* NOT operator node */ QN_NOT, /* OPTIONAL (should match) node */ QN_OPTIONAL, /* Geo filter node */ QN_GEO, /* Prefix selection node */ QN_PREFX, /* Id Filter node */ QN_IDS, /* Wildcard node, used only in conjunction with negative root node to allow negative queries */ QN_WILDCARD, /* Tag node, a list of tags for a specific tag field */ QN_TAG, /* Fuzzy term - expand with levenshtein distance */ QN_FUZZY, } QueryNodeType; /* A prhase node represents a list of nodes with intersection between them, or a phrase in the case * of several token nodes. */ typedef struct { struct RSQueryNode **children; int numChildren; int exact; } QueryPhraseNode; /* A Union node represents a set of child nodes where the index unions the result between them */ typedef struct { struct RSQueryNode **children; int numChildren; } QueryUnionNode; typedef struct { const char *fieldName; size_t len; struct RSQueryNode **children; int numChildren; } QueryTagNode; typedef struct { struct RSQueryNode *child; } QueryNotNode; typedef struct { struct RSQueryNode *child; } QueryOptionalNode; /* A token node is a terminal, single term/token node. An expansion of synonyms is represented by a * Union node with several token nodes. A token can have private metadata written by expanders or * tokenizers. Later this gets passed to scoring functions in a Term object. See RSIndexRecord */ typedef RSToken QueryTokenNode; typedef RSToken QueryPrefixNode; typedef struct { RSToken tok; int maxDist; } QueryFuzzyNode; typedef struct { } QueryWildcardNode; /* A node with a numeric filter */ typedef struct { struct numericFilter *nf; } QueryNumericNode; typedef struct { struct geoFilter *gf; } QueryGeofilterNode; typedef struct { struct idFilter *f; } QueryIdFilterNode; typedef enum { QueryNode_Verbatim = 0x01, } QueryNodeFlags; /* Query attribute is a dynamic attribute that can be applied to any query node. * Currently supported are weight, slop, and inorder */ typedef struct { const char *name; size_t namelen; const char *value; size_t vallen; } QueryAttribute; /* Various modifiers and options that can apply to the entire query or any sub-query of it */ typedef struct { QueryNodeFlags flags; t_fieldMask fieldMask; int maxSlop; int inOrder; double weight; } QueryNodeOptions; /* QueryNode reqresents any query node in the query tree. It has a type to resolve which node it * is, and a union of all possible nodes */ typedef struct RSQueryNode { union { QueryPhraseNode pn; QueryTokenNode tn; QueryUnionNode un; QueryNumericNode nn; QueryGeofilterNode gn; QueryIdFilterNode fn; QueryNotNode not; QueryOptionalNode opt; QueryPrefixNode pfx; QueryWildcardNode wc; QueryTagNode tag; QueryFuzzyNode fz; }; /* The node type, for resolving the union access */ QueryNodeType type; QueryNodeOptions opts; } QueryNode; int QueryNode_ApplyAttributes(QueryNode *qn, QueryAttribute *attr, size_t len, char **err); /* Add a child to a phrase node */ void QueryPhraseNode_AddChild(QueryNode *parent, QueryNode *child); /* Add a child to a union node */ void QueryUnionNode_AddChild(QueryNode *parent, QueryNode *child); void QueryTagNode_AddChildren(QueryNode *parent, QueryNode **children, size_t num); #endif RediSearch-1.2.2/src/query_parser/000077500000000000000000000000001364126773500170535ustar00rootroot00000000000000RediSearch-1.2.2/src/query_parser/Makefile000066400000000000000000000001331364126773500205100ustar00rootroot00000000000000SRCUTIL := ../../srcutil PARSER_SYMBOL_PREFIX := RSQuery include $(SRCUTIL)/make-parser.mk RediSearch-1.2.2/src/query_parser/lexer.c000066400000000000000000000306201364126773500203370ustar00rootroot00000000000000 #line 1 "lexer.rl" #include #include #include #include #include #include "parse.h" #include "parser.h" #include "../query_node.h" #include "../stopwords.h" /* forward declarations of stuff generated by lemon */ void RSQuery_Parse(void *yyp, int yymajor, QueryToken yyminor, QueryParseCtx *ctx); void *RSQuery_ParseAlloc(void *(*mallocProc)(size_t)); void RSQuery_ParseFree(void *p, void (*freeProc)(void *)); #line 231 "lexer.rl" #line 25 "lexer.c" static const char _query_actions[] = { 0, 1, 0, 1, 1, 1, 2, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 2, 2, 3, 2, 2, 4, 2, 2, 5, 2, 2, 6, 2, 2, 7, 2, 2, 8, 2, 2, 9 }; static const unsigned char _query_key_offsets[] = { 0, 10, 20, 21, 22, 24, 34, 72, 83, 93, 94, 97, 100, 102, 116, 117, 127, 137, 149 }; static const char _query_trans_keys[] = { 9, 13, 32, 47, 58, 64, 91, 96, 123, 126, 9, 13, 32, 47, 58, 64, 91, 96, 123, 126, 110, 102, 48, 57, 9, 13, 32, 47, 58, 64, 91, 96, 123, 126, 32, 34, 36, 37, 39, 40, 41, 42, 43, 45, 58, 59, 61, 64, 91, 92, 93, 95, 105, 123, 124, 125, 126, 127, 0, 8, 9, 13, 14, 31, 33, 47, 48, 57, 60, 63, 94, 96, 42, 92, 96, 0, 47, 58, 64, 91, 94, 123, 127, 92, 96, 0, 47, 58, 64, 91, 94, 123, 127, 105, 105, 48, 57, 46, 48, 57, 48, 57, 42, 46, 92, 96, 0, 47, 48, 57, 58, 64, 91, 94, 123, 127, 62, 92, 96, 0, 47, 58, 64, 91, 94, 123, 127, 9, 13, 32, 47, 58, 64, 91, 96, 123, 126, 42, 92, 96, 110, 0, 47, 58, 64, 91, 94, 123, 127, 42, 92, 96, 102, 0, 47, 58, 64, 91, 94, 123, 127, 0 }; static const char _query_single_lengths[] = { 0, 0, 1, 1, 0, 0, 24, 3, 2, 1, 1, 1, 0, 4, 1, 2, 0, 4, 4 }; static const char _query_range_lengths[] = { 5, 5, 0, 0, 1, 5, 7, 4, 4, 0, 1, 1, 1, 5, 0, 4, 5, 4, 4 }; static const unsigned char _query_index_offsets[] = { 0, 6, 12, 14, 16, 18, 24, 56, 64, 71, 73, 76, 79, 81, 91, 93, 100, 106, 115 }; static const char _query_indicies[] = { 1, 1, 1, 1, 1, 0, 2, 2, 2, 2, 2, 0, 3, 0, 4, 0, 6, 5, 7, 7, 7, 7, 7, 0, 9, 11, 12, 13, 14, 15, 16, 17, 14, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 8, 8, 9, 8, 10, 19, 10, 10, 1, 33, 34, 0, 0, 0, 0, 0, 1, 35, 0, 0, 0, 0, 0, 2, 37, 36, 37, 39, 38, 41, 39, 40, 6, 40, 33, 41, 34, 40, 40, 19, 40, 40, 40, 1, 42, 36, 43, 0, 0, 0, 0, 0, 7, 1, 1, 1, 1, 1, 36, 33, 34, 44, 45, 44, 44, 44, 44, 1, 33, 34, 44, 46, 44, 44, 44, 44, 1, 0 }; static const char _query_trans_targs[] = { 6, 7, 8, 3, 6, 6, 12, 15, 6, 6, 6, 6, 8, 6, 9, 6, 6, 6, 10, 13, 6, 6, 14, 15, 6, 16, 6, 7, 17, 6, 6, 6, 6, 6, 0, 1, 6, 2, 6, 11, 6, 4, 6, 5, 6, 18, 7 }; static const char _query_trans_actions[] = { 55, 75, 63, 0, 9, 53, 0, 60, 41, 37, 39, 11, 72, 31, 72, 15, 17, 29, 69, 57, 23, 25, 0, 72, 33, 0, 35, 72, 75, 19, 13, 21, 27, 43, 0, 0, 49, 0, 47, 5, 45, 0, 7, 0, 51, 75, 66 }; static const char _query_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const char _query_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const unsigned char _query_eof_trans[] = { 1, 1, 1, 1, 6, 1, 0, 1, 1, 37, 39, 41, 41, 41, 37, 1, 37, 45, 45 }; static const int query_start = 6; static const int query_first_final = 6; static const int query_error = -1; static const int query_en_main = 6; #line 234 "lexer.rl" QueryNode *Query_Parse(QueryParseCtx *q, char **err) { void *pParser = RSQuery_ParseAlloc(malloc); int cs, act; const char* ts = q->raw; const char* te = q->raw + q->len; #line 161 "lexer.c" { cs = query_start; ts = 0; te = 0; act = 0; } #line 245 "lexer.rl" QueryToken tok = {.len = 0, .pos = 0, .s = 0}; //parseCtx ctx = {.root = NULL, .ok = 1, .errorMsg = NULL, .q = q}; const char* p = q->raw; const char* pe = q->raw + q->len; const char* eof = pe; #line 178 "lexer.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( p == pe ) goto _test_eof; _resume: _acts = _query_actions + _query_from_state_actions[cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 1: #line 1 "NONE" {ts = p;} break; #line 197 "lexer.c" } } _keys = _query_trans_keys + _query_key_offsets[cs]; _trans = _query_index_offsets[cs]; _klen = _query_single_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*p) < *_mid ) _upper = _mid - 1; else if ( (*p) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _query_range_lengths[cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*p) < _mid[0] ) _upper = _mid - 2; else if ( (*p) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: _trans = _query_indicies[_trans]; _eof_trans: cs = _query_trans_targs[_trans]; if ( _query_trans_actions[_trans] == 0 ) goto _again; _acts = _query_actions + _query_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 2: #line 1 "NONE" {te = p+1;} break; case 3: #line 48 "lexer.rl" {act = 1;} break; case 4: #line 60 "lexer.rl" {act = 2;} break; case 5: #line 69 "lexer.rl" {act = 3;} break; case 6: #line 87 "lexer.rl" {act = 5;} break; case 7: #line 156 "lexer.rl" {act = 14;} break; case 8: #line 199 "lexer.rl" {act = 21;} break; case 9: #line 202 "lexer.rl" {act = 23;} break; case 10: #line 78 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; tok.len = te - ts; tok.s = ts+1; RSQuery_Parse(pParser, ARROW, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 11: #line 87 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; tok.s = ts; tok.len = te-ts; tok.numval = *ts == '-' ? -INFINITY : INFINITY; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 12: #line 98 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, QUOTE, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 13: #line 105 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, OR, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 14: #line 112 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, LP, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 15: #line 120 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, RP, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 16: #line 127 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, LB, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 17: #line 134 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, RB, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 18: #line 141 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, COLON, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 19: #line 148 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, SEMICOLON, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 20: #line 163 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, TILDE, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 21: #line 170 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, STAR, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 22: #line 177 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, PERCENT, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 23: #line 184 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, LSQB, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 24: #line 191 "lexer.rl" {te = p+1;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, RSQB, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 25: #line 198 "lexer.rl" {te = p+1;} break; case 26: #line 199 "lexer.rl" {te = p+1;} break; case 27: #line 200 "lexer.rl" {te = p+1;} break; case 28: #line 216 "lexer.rl" {te = p+1;{ tok.len = te-ts - 1; tok.s = ts; tok.numval = 0; tok.pos = ts-q->raw; RSQuery_Parse(pParser, PREFIX, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 29: #line 48 "lexer.rl" {te = p;p--;{ tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-q->raw; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 30: #line 156 "lexer.rl" {te = p;p--;{ tok.pos = ts-q->raw; RSQuery_Parse(pParser, MINUS, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 31: #line 199 "lexer.rl" {te = p;p--;} break; case 32: #line 202 "lexer.rl" {te = p;p--;{ tok.len = te-ts; tok.s = ts; tok.numval = 0; tok.pos = ts-q->raw; if (!StopWordList_Contains(q->opts.stopwords, tok.s, tok.len)) { RSQuery_Parse(pParser, TERM, tok, q); } else { RSQuery_Parse(pParser, STOPWORD, tok, q); } if (!q->ok) { {p++; goto _out; } } }} break; case 33: #line 48 "lexer.rl" {{p = ((te))-1;}{ tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-q->raw; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { {p++; goto _out; } } }} break; case 34: #line 1 "NONE" { switch( act ) { case 1: {{p = ((te))-1;} tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-q->raw; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { {p++; goto _out; } } } break; case 2: {{p = ((te))-1;} tok.pos = ts-q->raw; tok.len = te - (ts + 1); tok.s = ts+1; RSQuery_Parse(pParser, MODIFIER, tok, q); if (!q->ok) { {p++; goto _out; } } } break; case 3: {{p = ((te))-1;} tok.pos = ts-q->raw; tok.len = te - (ts + 1); tok.s = ts+1; RSQuery_Parse(pParser, ATTRIBUTE, tok, q); if (!q->ok) { {p++; goto _out; } } } break; case 5: {{p = ((te))-1;} tok.pos = ts-q->raw; tok.s = ts; tok.len = te-ts; tok.numval = *ts == '-' ? -INFINITY : INFINITY; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { {p++; goto _out; } } } break; case 14: {{p = ((te))-1;} tok.pos = ts-q->raw; RSQuery_Parse(pParser, MINUS, tok, q); if (!q->ok) { {p++; goto _out; } } } break; case 23: {{p = ((te))-1;} tok.len = te-ts; tok.s = ts; tok.numval = 0; tok.pos = ts-q->raw; if (!StopWordList_Contains(q->opts.stopwords, tok.s, tok.len)) { RSQuery_Parse(pParser, TERM, tok, q); } else { RSQuery_Parse(pParser, STOPWORD, tok, q); } if (!q->ok) { {p++; goto _out; } } } break; default: {{p = ((te))-1;}} break; } } break; #line 620 "lexer.c" } } _again: _acts = _query_actions + _query_to_state_actions[cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 1 "NONE" {ts = 0;} break; #line 633 "lexer.c" } } if ( ++p != pe ) goto _resume; _test_eof: {} if ( p == eof ) { if ( _query_eof_trans[cs] > 0 ) { _trans = _query_eof_trans[cs] - 1; goto _eof_trans; } } _out: {} } #line 253 "lexer.rl" if (q->ok) { RSQuery_Parse(pParser, 0, tok, q); } RSQuery_ParseFree(pParser, free); if(!q->ok && q->root) { QueryNode_Free(q->root); q->root = NULL; } if (err) { *err = q->errorMsg; } return q->root; } RediSearch-1.2.2/src/query_parser/lexer.rl000066400000000000000000000114461364126773500205370ustar00rootroot00000000000000#include #include #include #include #include #include "parse.h" #include "parser.h" #include "../query_node.h" #include "../stopwords.h" /* forward declarations of stuff generated by lemon */ void RSQuery_Parse(void *yyp, int yymajor, QueryToken yyminor, QueryParseCtx *ctx); void *RSQuery_ParseAlloc(void *(*mallocProc)(size_t)); void RSQuery_ParseFree(void *p, void (*freeProc)(void *)); %%{ machine query; inf = ['+\-']? 'inf' $ 3; number = '-'? digit+('.' digit+)? $ 2; quote = '"'; or = '|'; lp = '('; rp = ')'; lb = '{'; rb = '}'; colon = ':'; semicolon = ';'; arrow = '=>'; minus = '-'; tilde = '~'; star = '*'; percent = '%'; rsqb = ']'; lsqb = '['; escape = '\\'; escaped_character = escape (punct | space | escape); term = (((any - (punct | cntrl | space | escape)) | escaped_character) | '_')+ $ 0 ; prefix = term.star $1; mod = '@'.term $ 1; attr = '$'.term $ 1; main := |* number => { tok.s = ts; tok.len = te-ts; char *ne = (char*)te; tok.numval = strtod(tok.s, &ne); tok.pos = ts-q->raw; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { fbreak; } }; mod => { tok.pos = ts-q->raw; tok.len = te - (ts + 1); tok.s = ts+1; RSQuery_Parse(pParser, MODIFIER, tok, q); if (!q->ok) { fbreak; } }; attr => { tok.pos = ts-q->raw; tok.len = te - (ts + 1); tok.s = ts+1; RSQuery_Parse(pParser, ATTRIBUTE, tok, q); if (!q->ok) { fbreak; } }; arrow => { tok.pos = ts-q->raw; tok.len = te - ts; tok.s = ts+1; RSQuery_Parse(pParser, ARROW, tok, q); if (!q->ok) { fbreak; } }; inf => { tok.pos = ts-q->raw; tok.s = ts; tok.len = te-ts; tok.numval = *ts == '-' ? -INFINITY : INFINITY; RSQuery_Parse(pParser, NUMBER, tok, q); if (!q->ok) { fbreak; } }; quote => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, QUOTE, tok, q); if (!q->ok) { fbreak; } }; or => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, OR, tok, q); if (!q->ok) { fbreak; } }; lp => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, LP, tok, q); if (!q->ok) { fbreak; } }; rp => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, RP, tok, q); if (!q->ok) { fbreak; } }; lb => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, LB, tok, q); if (!q->ok) { fbreak; } }; rb => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, RB, tok, q); if (!q->ok) { fbreak; } }; colon => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, COLON, tok, q); if (!q->ok) { fbreak; } }; semicolon => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, SEMICOLON, tok, q); if (!q->ok) { fbreak; } }; minus => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, MINUS, tok, q); if (!q->ok) { fbreak; } }; tilde => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, TILDE, tok, q); if (!q->ok) { fbreak; } }; star => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, STAR, tok, q); if (!q->ok) { fbreak; } }; percent => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, PERCENT, tok, q); if (!q->ok) { fbreak; } }; lsqb => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, LSQB, tok, q); if (!q->ok) { fbreak; } }; rsqb => { tok.pos = ts-q->raw; RSQuery_Parse(pParser, RSQB, tok, q); if (!q->ok) { fbreak; } }; space; punct; cntrl; term => { tok.len = te-ts; tok.s = ts; tok.numval = 0; tok.pos = ts-q->raw; if (!StopWordList_Contains(q->opts.stopwords, tok.s, tok.len)) { RSQuery_Parse(pParser, TERM, tok, q); } else { RSQuery_Parse(pParser, STOPWORD, tok, q); } if (!q->ok) { fbreak; } }; prefix => { tok.len = te-ts - 1; tok.s = ts; tok.numval = 0; tok.pos = ts-q->raw; RSQuery_Parse(pParser, PREFIX, tok, q); if (!q->ok) { fbreak; } }; *|; }%% %% write data; QueryNode *Query_Parse(QueryParseCtx *q, char **err) { void *pParser = RSQuery_ParseAlloc(malloc); int cs, act; const char* ts = q->raw; const char* te = q->raw + q->len; %% write init; QueryToken tok = {.len = 0, .pos = 0, .s = 0}; //parseCtx ctx = {.root = NULL, .ok = 1, .errorMsg = NULL, .q = q}; const char* p = q->raw; const char* pe = q->raw + q->len; const char* eof = pe; %% write exec; if (q->ok) { RSQuery_Parse(pParser, 0, tok, q); } RSQuery_ParseFree(pParser, free); if(!q->ok && q->root) { QueryNode_Free(q->root); q->root = NULL; } if (err) { *err = q->errorMsg; } return q->root; } RediSearch-1.2.2/src/query_parser/parse.h000066400000000000000000000002641364126773500203400ustar00rootroot00000000000000#ifndef __QUERY_PARSER_PARSE_H__ #define __QUERY_PARSER_PARSE_H__ #include "tokenizer.h" #include "../query.h" //#include "../rmutil/alloc.h" #endif // !__QUERY_PARSER_PARSE_H__RediSearch-1.2.2/src/query_parser/parser-toplevel.c000066400000000000000000000004441364126773500223450ustar00rootroot00000000000000#define Parse RSQuery_Parse #define ParseTrace RSQuery_ParseTrace #define ParseAlloc RSQuery_ParseAlloc #define ParseFree RSQuery_ParseFree #define ParseInit RSQuery_ParseInit #define ParseFinalize RSQuery_ParseFinalize #define ParseStackPeack RSQuery_ParseStackPeack #include "parser.c.inc" RediSearch-1.2.2/src/query_parser/parser.c.inc000066400000000000000000001775521364126773500213040ustar00rootroot00000000000000/* ** 2000-05-29 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Driver template for the LEMON parser generator. ** ** The "lemon" program processes an LALR(1) input grammar file, then uses ** this template to construct a parser. The "lemon" program inserts text ** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the ** interstitial "-" characters) contained in this template is changed into ** the value of the %name directive from the grammar. Otherwise, the content ** of this template is copied straight through into the generate parser ** source file. ** ** The following is the concatenation of all %include directives from the ** input grammar file: */ #include /************ Begin %include sections from the grammar ************************/ #line 36 "parser.y" #include #include #include #include #include "parse.h" #include "../util/arr.h" #include "../rmutil/vector.h" #include "../query_node.h" // strndup + lowercase in one pass! char *strdupcase(const char *s, size_t len) { char *ret = strndup(s, len); char *dst = ret; char *src = dst; while (*src) { // unescape if (*src == '\\' && (ispunct(*(src+1)) || isspace(*(src+1)))) { ++src; continue; } *dst = tolower(*src); ++dst; ++src; } *dst = '\0'; return ret; } // unescape a string (non null terminated) and return the new length (may be shorter than the original. This manipulates the string itself size_t unescapen(char *s, size_t sz) { char *dst = s; char *src = dst; char *end = s + sz; while (src < end) { // unescape if (*src == '\\' && src + 1 < end && (ispunct(*(src+1)) || isspace(*(src+1)))) { ++src; continue; } *dst++ = *src++; } return (size_t)(dst - s); } #line 80 "parser.c" /**************** End of %include directives **********************************/ /* These constants specify the various numeric values for terminal symbols ** in a format understandable to "makeheaders". This section is blank unless ** "lemon" is run with the "-m" command-line option. ***************** Begin makeheaders token definitions *************************/ /**************** End makeheaders token definitions ***************************/ /* The next sections is a series of control #defines. ** various aspects of the generated parser. ** YYCODETYPE is the data type used to store the integer codes ** that represent terminal and non-terminal symbols. ** "unsigned char" is used if there are fewer than ** 256 symbols. Larger types otherwise. ** YYNOCODE is a number of type YYCODETYPE that is not used for ** any terminal or nonterminal symbol. ** YYFALLBACK If defined, this indicates that one or more tokens ** (also known as: "terminal symbols") have fall-back ** values which should be used if the original symbol ** would not parse. This permits keywords to sometimes ** be used as identifiers, for example. ** YYACTIONTYPE is the data type used for "action codes" - numbers ** that indicate what to do in response to the next ** token. ** ParseTOKENTYPE is the data type used for minor type for terminal ** symbols. Background: A "minor type" is a semantic ** value associated with a terminal or non-terminal ** symbols. For example, for an "ID" terminal symbol, ** the minor type might be the name of the identifier. ** Each non-terminal can have a different minor type. ** Terminal symbols all have the same minor type, though. ** This macros defines the minor type for terminal ** symbols. ** YYMINORTYPE is the data type used for all minor types. ** This is typically a union of many types, one of ** which is ParseTOKENTYPE. The entry in the union ** for terminal symbols is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. If ** zero the stack is dynamically sized using realloc() ** ParseARG_SDECL A static variable declaration for the %extra_argument ** ParseARG_PDECL A parameter declaration for the %extra_argument ** ParseARG_PARAM Code to pass %extra_argument as a subroutine parameter ** ParseARG_STORE Code to store %extra_argument into yypParser ** ParseARG_FETCH Code to extract %extra_argument from yypParser ** ParseCTX_* As ParseARG_ except for %extra_context ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar ** YYNTOKEN Number of terminal symbols ** YY_MAX_SHIFT Maximum value for shift actions ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions ** YY_ERROR_ACTION The yy_action[] code for syntax error ** YY_ACCEPT_ACTION The yy_action[] code for accept ** YY_NO_ACTION The yy_action[] code for no-op ** YY_MIN_REDUCE Minimum value for reduce actions ** YY_MAX_REDUCE Maximum value for reduce actions */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned char #define YYNOCODE 41 #define YYACTIONTYPE unsigned char #define ParseTOKENTYPE QueryToken typedef union { int yyinit; ParseTOKENTYPE yy0; Vector* yy10; QueryAttribute yy17; QueryNode * yy37; NumericFilter * yy40; QueryAttribute * yy61; RangeNumber yy62; GeoFilter * yy68; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 #endif #define ParseARG_SDECL QueryParseCtx *ctx ; #define ParseARG_PDECL , QueryParseCtx *ctx #define ParseARG_PARAM ,ctx #define ParseARG_FETCH QueryParseCtx *ctx =yypParser->ctx ; #define ParseARG_STORE yypParser->ctx =ctx ; #define ParseCTX_SDECL #define ParseCTX_PDECL #define ParseCTX_PARAM #define ParseCTX_FETCH #define ParseCTX_STORE #define YYNSTATE 49 #define YYNRULE 49 #define YYNTOKEN 27 #define YY_MAX_SHIFT 48 #define YY_MIN_SHIFTREDUCE 79 #define YY_MAX_SHIFTREDUCE 127 #define YY_ERROR_ACTION 128 #define YY_ACCEPT_ACTION 129 #define YY_NO_ACTION 130 #define YY_MIN_REDUCE 131 #define YY_MAX_REDUCE 179 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. ** ** Applications can choose to define yytestcase() in the %include section ** to a macro that can assist in verifying code coverage. For production ** code the yytestcase() macro should be turned off. But it is useful ** for testing. */ #ifndef yytestcase # define yytestcase(X) #endif /* Next are the tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement ** functions that take a state number and lookahead value and return an ** action integer. ** ** Suppose the action integer is N. Then the action is determined as ** follows ** ** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead ** token onto the stack and goto state N. ** ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. ** ** N == YY_ERROR_ACTION A syntax error has occurred. ** ** N == YY_ACCEPT_ACTION The parser accepts its input. ** ** N == YY_NO_ACTION No such action. Denotes unused ** slots in the yy_action[] table. ** ** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE ** and YY_MAX_REDUCE ** ** The action table is constructed as a single large table named yy_action[]. ** Given state S and lookahead X, the action is computed as either: ** ** (A) N = yy_action[ yy_shift_ofst[S] + X ] ** (B) N = yy_default[S] ** ** The (A) formula is preferred. The B formula is used instead if ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. ** ** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of ** the yy_shift_ofst[] array. ** ** The following are the tables generated in this section: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ #define YY_ACTTAB_COUNT (238) static const YYACTIONTYPE yy_action[] = { /* 0 */ 22, 44, 5, 154, 19, 143, 6, 127, 100, 29, /* 10 */ 126, 106, 46, 8, 7, 88, 108, 131, 9, 5, /* 20 */ 48, 19, 47, 6, 127, 100, 33, 126, 106, 46, /* 30 */ 48, 7, 132, 108, 5, 9, 19, 48, 6, 127, /* 40 */ 100, 177, 126, 106, 46, 126, 7, 176, 108, 23, /* 50 */ 123, 127, 21, 42, 126, 106, 5, 24, 19, 25, /* 60 */ 6, 127, 100, 133, 126, 106, 46, 153, 7, 120, /* 70 */ 108, 165, 27, 142, 39, 23, 123, 17, 37, 26, /* 80 */ 94, 31, 19, 24, 6, 127, 100, 161, 126, 106, /* 90 */ 46, 9, 7, 48, 108, 162, 9, 95, 48, 127, /* 100 */ 127, 103, 126, 126, 43, 127, 103, 13, 126, 122, /* 110 */ 150, 36, 135, 38, 173, 40, 141, 171, 107, 41, /* 120 */ 34, 35, 5, 45, 19, 20, 6, 127, 100, 18, /* 130 */ 126, 106, 46, 1, 7, 118, 108, 130, 127, 100, /* 140 */ 130, 126, 106, 46, 130, 7, 30, 108, 130, 9, /* 150 */ 3, 48, 130, 150, 36, 135, 130, 130, 40, 130, /* 160 */ 130, 129, 41, 34, 14, 130, 130, 150, 36, 135, /* 170 */ 4, 130, 40, 150, 36, 135, 41, 34, 40, 130, /* 180 */ 130, 11, 41, 34, 150, 36, 135, 130, 130, 40, /* 190 */ 130, 130, 2, 41, 34, 150, 36, 135, 12, 130, /* 200 */ 40, 150, 36, 135, 41, 34, 40, 130, 130, 15, /* 210 */ 41, 34, 150, 36, 135, 130, 130, 40, 130, 130, /* 220 */ 16, 41, 34, 150, 36, 135, 168, 28, 40, 130, /* 230 */ 130, 96, 41, 34, 127, 130, 32, 126, }; static const YYCODETYPE yy_lookahead[] = { /* 0 */ 31, 36, 2, 40, 4, 28, 6, 7, 8, 40, /* 10 */ 10, 11, 12, 5, 14, 15, 16, 0, 18, 2, /* 20 */ 20, 4, 13, 6, 7, 8, 18, 10, 11, 12, /* 30 */ 20, 14, 0, 16, 2, 18, 4, 20, 6, 7, /* 40 */ 8, 36, 10, 11, 12, 10, 14, 36, 16, 6, /* 50 */ 7, 7, 36, 21, 10, 11, 2, 14, 4, 36, /* 60 */ 6, 7, 8, 0, 10, 11, 12, 40, 14, 26, /* 70 */ 16, 30, 31, 28, 29, 6, 7, 23, 22, 25, /* 80 */ 24, 40, 4, 14, 6, 7, 8, 40, 10, 11, /* 90 */ 12, 18, 14, 20, 16, 40, 18, 4, 20, 7, /* 100 */ 7, 8, 10, 10, 10, 7, 8, 27, 10, 26, /* 110 */ 30, 31, 32, 33, 34, 35, 40, 37, 12, 39, /* 120 */ 40, 5, 2, 10, 4, 23, 6, 7, 8, 18, /* 130 */ 10, 11, 12, 5, 14, 24, 16, 41, 7, 8, /* 140 */ 41, 10, 11, 12, 41, 14, 18, 16, 41, 18, /* 150 */ 27, 20, 41, 30, 31, 32, 41, 41, 35, 41, /* 160 */ 41, 38, 39, 40, 27, 41, 41, 30, 31, 32, /* 170 */ 27, 41, 35, 30, 31, 32, 39, 40, 35, 41, /* 180 */ 41, 27, 39, 40, 30, 31, 32, 41, 41, 35, /* 190 */ 41, 41, 27, 39, 40, 30, 31, 32, 27, 41, /* 200 */ 35, 30, 31, 32, 39, 40, 35, 41, 41, 27, /* 210 */ 39, 40, 30, 31, 32, 41, 41, 35, 41, 41, /* 220 */ 27, 39, 40, 30, 31, 32, 30, 31, 35, 41, /* 230 */ 41, 4, 39, 40, 7, 41, 40, 10, 41, 41, /* 240 */ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, /* 250 */ 41, 41, 41, 41, 41, 41, 41, 41, 41, }; #define YY_SHIFT_COUNT (48) #define YY_SHIFT_MIN (0) #define YY_SHIFT_MAX (227) static const unsigned short int yy_shift_ofst[] = { /* 0 */ 32, 54, 0, 17, 78, 120, 120, 120, 120, 120, /* 10 */ 120, 131, 73, 73, 73, 10, 10, 44, 44, 92, /* 20 */ 9, 43, 93, 69, 69, 69, 69, 98, 98, 227, /* 30 */ 92, 92, 92, 92, 92, 92, 35, 9, 111, 56, /* 40 */ 8, 128, 63, 83, 94, 106, 113, 116, 102, }; #define YY_REDUCE_COUNT (37) #define YY_REDUCE_MIN (-37) #define YY_REDUCE_MAX (196) static const short yy_reduce_ofst[] = { /* 0 */ 123, 80, 137, 137, 137, 143, 154, 165, 171, 182, /* 10 */ 193, 137, 137, 137, 137, 137, 137, 41, 196, -31, /* 20 */ 45, -35, -37, 5, 11, 16, 23, -37, -37, 27, /* 30 */ 47, 27, 27, 55, 27, 76, -37, -23, }; static const YYACTIONTYPE yy_default[] = { /* 0 */ 128, 128, 128, 128, 157, 128, 128, 128, 128, 128, /* 10 */ 128, 156, 139, 138, 134, 136, 137, 128, 128, 128, /* 20 */ 145, 128, 128, 128, 128, 128, 128, 166, 169, 128, /* 30 */ 128, 164, 167, 128, 149, 128, 151, 144, 163, 128, /* 40 */ 128, 128, 128, 128, 128, 128, 128, 128, 128, }; /********** End of lemon-generated parsing tables *****************************/ /* The next table maps tokens (terminal symbols) into fallback tokens. ** If a construct like the following: ** ** %fallback ID X Y Z. ** ** appears in the grammar, then ID becomes a fallback token for X, Y, ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser ** but it does not parse, the type of the token is changed to ID and ** the parse is retried before an error is thrown. ** ** This feature can be used, for example, to cause some keywords in a language ** to revert to identifiers if they keyword does not apply in the context where ** it appears. */ #ifdef YYFALLBACK static const YYCODETYPE yyFallback[] = { }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** ** + The state number for the parser at this level of the stack. ** ** + The value of the token stored at this level of the stack. ** (In other words, the "major" token.) ** ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. ** ** After the "shift" half of a SHIFTREDUCE action, the stateno field ** actually contains the reduce action for the second half of the ** SHIFTREDUCE. */ struct yyStackEntry { YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ YYCODETYPE major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This ** is the value of the token */ }; typedef struct yyStackEntry yyStackEntry; /* The state of the parser is completely contained in an instance of ** the following structure */ struct yyParser { yyStackEntry *yytos; /* Pointer to top element of the stack */ #ifdef YYTRACKMAXSTACKDEPTH int yyhwm; /* High-water mark of the stack */ #endif #ifndef YYNOERRORRECOVERY int yyerrcnt; /* Shifts left before out of the error */ #endif ParseARG_SDECL /* A place to hold %extra_argument */ ParseCTX_SDECL /* A place to hold %extra_context */ #if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ yyStackEntry *yystack; /* The parser's stack */ yyStackEntry yystk0; /* First stack entry */ #else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ yyStackEntry *yystackEnd; /* Last entry in the stack */ #endif }; typedef struct yyParser yyParser; #ifndef NDEBUG #include static FILE *yyTraceFILE = 0; static char *yyTracePrompt = 0; #endif /* NDEBUG */ #ifndef NDEBUG /* ** Turn parser tracing on by giving a stream to which to write the trace ** and a prompt to preface each trace message. Tracing is turned off ** by making either argument NULL ** ** Inputs: **

** ** Outputs: ** None. */ void ParseTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; else if( yyTracePrompt==0 ) yyTraceFILE = 0; } #endif /* NDEBUG */ #if defined(YYCOVERAGE) || !defined(NDEBUG) /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const yyTokenName[] = { /* 0 */ "$", /* 1 */ "LOWEST", /* 2 */ "TILDE", /* 3 */ "TAGLIST", /* 4 */ "QUOTE", /* 5 */ "COLON", /* 6 */ "MINUS", /* 7 */ "NUMBER", /* 8 */ "STOPWORD", /* 9 */ "TERMLIST", /* 10 */ "TERM", /* 11 */ "PREFIX", /* 12 */ "PERCENT", /* 13 */ "ATTRIBUTE", /* 14 */ "LP", /* 15 */ "RP", /* 16 */ "MODIFIER", /* 17 */ "AND", /* 18 */ "OR", /* 19 */ "ORX", /* 20 */ "ARROW", /* 21 */ "STAR", /* 22 */ "SEMICOLON", /* 23 */ "LB", /* 24 */ "RB", /* 25 */ "LSQB", /* 26 */ "RSQB", /* 27 */ "expr", /* 28 */ "attribute", /* 29 */ "attribute_list", /* 30 */ "prefix", /* 31 */ "termlist", /* 32 */ "union", /* 33 */ "tag_list", /* 34 */ "geo_filter", /* 35 */ "modifierlist", /* 36 */ "num", /* 37 */ "numeric_range", /* 38 */ "query", /* 39 */ "modifier", /* 40 */ "term", }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { /* 0 */ "query ::= expr", /* 1 */ "query ::=", /* 2 */ "query ::= STAR", /* 3 */ "expr ::= expr expr", /* 4 */ "expr ::= union", /* 5 */ "union ::= expr OR expr", /* 6 */ "union ::= union OR expr", /* 7 */ "expr ::= modifier COLON expr", /* 8 */ "expr ::= modifierlist COLON expr", /* 9 */ "expr ::= LP expr RP", /* 10 */ "attribute ::= ATTRIBUTE COLON term", /* 11 */ "attribute_list ::= attribute", /* 12 */ "attribute_list ::= attribute_list SEMICOLON attribute", /* 13 */ "attribute_list ::= attribute_list SEMICOLON", /* 14 */ "attribute_list ::=", /* 15 */ "expr ::= expr ARROW LB attribute_list RB", /* 16 */ "expr ::= QUOTE termlist QUOTE", /* 17 */ "expr ::= QUOTE term QUOTE", /* 18 */ "expr ::= term", /* 19 */ "expr ::= prefix", /* 20 */ "expr ::= termlist", /* 21 */ "expr ::= STOPWORD", /* 22 */ "termlist ::= term term", /* 23 */ "termlist ::= termlist term", /* 24 */ "termlist ::= termlist STOPWORD", /* 25 */ "expr ::= MINUS expr", /* 26 */ "expr ::= TILDE expr", /* 27 */ "prefix ::= PREFIX", /* 28 */ "expr ::= PERCENT TERM PERCENT", /* 29 */ "modifier ::= MODIFIER", /* 30 */ "modifierlist ::= modifier OR term", /* 31 */ "modifierlist ::= modifierlist OR term", /* 32 */ "expr ::= modifier COLON tag_list", /* 33 */ "tag_list ::= LB term", /* 34 */ "tag_list ::= LB prefix", /* 35 */ "tag_list ::= LB termlist", /* 36 */ "tag_list ::= tag_list OR term", /* 37 */ "tag_list ::= tag_list OR prefix", /* 38 */ "tag_list ::= tag_list OR termlist", /* 39 */ "tag_list ::= tag_list RB", /* 40 */ "expr ::= modifier COLON numeric_range", /* 41 */ "numeric_range ::= LSQB num num RSQB", /* 42 */ "expr ::= modifier COLON geo_filter", /* 43 */ "geo_filter ::= LSQB num num num TERM RSQB", /* 44 */ "num ::= NUMBER", /* 45 */ "num ::= LP num", /* 46 */ "num ::= MINUS num", /* 47 */ "term ::= TERM", /* 48 */ "term ::= NUMBER", }; #endif /* NDEBUG */ #if YYSTACKDEPTH<=0 /* ** Try to increase the size of the parser stack. Return the number ** of errors. Return 0 on success. */ static int yyGrowStack(yyParser *p){ int newSize; int idx; yyStackEntry *pNew; newSize = p->yystksz*2 + 100; idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; if( p->yystack==&p->yystk0 ){ pNew = malloc(newSize*sizeof(pNew[0])); if( pNew ) pNew[0] = p->yystk0; }else{ pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); } if( pNew ){ p->yystack = pNew; p->yytos = &p->yystack[idx]; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", yyTracePrompt, p->yystksz, newSize); } #endif p->yystksz = newSize; } return pNew==0; } #endif /* Datatype of the argument to the memory allocated passed as the ** second argument to ParseAlloc() below. This can be changed by ** putting an appropriate #define in the %include section of the input ** grammar. */ #ifndef YYMALLOCARGTYPE # define YYMALLOCARGTYPE size_t #endif /* Initialize a new parser that has already been allocated. */ void ParseInit(void *yypRawParser ParseCTX_PDECL){ yyParser *yypParser = (yyParser*)yypRawParser; ParseCTX_STORE #ifdef YYTRACKMAXSTACKDEPTH yypParser->yyhwm = 0; #endif #if YYSTACKDEPTH<=0 yypParser->yytos = NULL; yypParser->yystack = NULL; yypParser->yystksz = 0; if( yyGrowStack(yypParser) ){ yypParser->yystack = &yypParser->yystk0; yypParser->yystksz = 1; } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yypParser->yytos = yypParser->yystack; yypParser->yystack[0].stateno = 0; yypParser->yystack[0].major = 0; #if YYSTACKDEPTH>0 yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; #endif } #ifndef Parse_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like ** malloc. ** ** Inputs: ** A pointer to the function used to allocate memory. ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls ** to Parse and ParseFree. */ void *ParseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE) ParseCTX_PDECL){ yyParser *yypParser; yypParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); if( yypParser ){ ParseCTX_STORE ParseInit(yypParser ParseCTX_PARAM); } return (void*)yypParser; } #endif /* Parse_ENGINEALWAYSONSTACK */ /* The following function deletes the "minor type" or semantic value ** associated with a symbol. The symbol can be either a terminal ** or nonterminal. "yymajor" is the symbol code, and "yypminor" is ** a pointer to the value to be deleted. The code used to do the ** deletions is derived from the %destructor and/or %token_destructor ** directives of the input grammar. */ static void yy_destructor( yyParser *yypParser, /* The parser */ YYCODETYPE yymajor, /* Type code for object to destroy */ YYMINORTYPE *yypminor /* The object to be destroyed */ ){ ParseARG_FETCH ParseCTX_FETCH switch( yymajor ){ /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen ** when the symbol is popped from the stack during a ** reduce or during error processing or when a parser is ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ /********* Begin destructor definitions ***************************************/ /* Default NON-TERMINAL Destructor */ case 36: /* num */ case 38: /* query */ case 39: /* modifier */ case 40: /* term */ { #line 91 "parser.y" #line 663 "parser.c" } break; case 27: /* expr */ case 30: /* prefix */ case 31: /* termlist */ case 32: /* union */ case 33: /* tag_list */ { #line 94 "parser.y" QueryNode_Free((yypminor->yy37)); #line 674 "parser.c" } break; case 28: /* attribute */ { #line 97 "parser.y" free((char*)(yypminor->yy17).value); #line 681 "parser.c" } break; case 29: /* attribute_list */ { #line 100 "parser.y" array_free_ex((yypminor->yy61), free((char*)((QueryAttribute*)ptr )->value)); #line 688 "parser.c" } break; case 34: /* geo_filter */ { #line 116 "parser.y" GeoFilter_Free((yypminor->yy68)); #line 695 "parser.c" } break; case 35: /* modifierlist */ { #line 119 "parser.y" for (size_t i = 0; i < Vector_Size((yypminor->yy10)); i++) { char *s; Vector_Get((yypminor->yy10), i, &s); free(s); } Vector_Free((yypminor->yy10)); #line 709 "parser.c" } break; case 37: /* numeric_range */ { #line 131 "parser.y" NumericFilter_Free((yypminor->yy40)); #line 718 "parser.c" } break; /********* End destructor definitions *****************************************/ default: break; /* If no destructor action specified: do nothing */ } } /* ** Pop the parser's stack once. ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. */ static void yy_pop_parser_stack(yyParser *pParser){ yyStackEntry *yytos; assert( pParser->yytos!=0 ); assert( pParser->yytos > pParser->yystack ); yytos = pParser->yytos--; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); } #endif yy_destructor(pParser, yytos->major, &yytos->minor); } /* ** Clear all secondary memory allocations from the parser */ void ParseFinalize(void *p){ yyParser *pParser = (yyParser*)p; while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); #if YYSTACKDEPTH<=0 if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); #endif } #ifndef Parse_ENGINEALWAYSONSTACK /* ** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. ** ** If the YYPARSEFREENEVERNULL macro exists (for example because it ** is defined in a %include section of the input grammar) then it is ** assumed that the input pointer is never NULL. */ void ParseFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ #ifndef YYPARSEFREENEVERNULL if( p==0 ) return; #endif ParseFinalize(p); (*freeProc)(p); } #endif /* Parse_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. */ #ifdef YYTRACKMAXSTACKDEPTH int ParseStackPeak(void *p){ yyParser *pParser = (yyParser*)p; return pParser->yyhwm; } #endif /* This array of booleans keeps track of the parser statement ** coverage. The element yycoverage[X][Y] is set when the parser ** is in state X and has a lookahead token Y. In a well-tested ** systems, every element of this matrix should end up being set. */ #if defined(YYCOVERAGE) static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; #endif /* ** Write into out a description of every state/lookahead combination that ** ** (1) has not been used by the parser, and ** (2) is not a syntax error. ** ** Return the number of missed state/lookahead combinations. */ #if defined(YYCOVERAGE) int ParseCoverage(FILE *out){ int stateno, iLookAhead, i; int nMissed = 0; for(stateno=0; statenoYY_MAX_SHIFT ) return stateno; assert( stateno <= YY_SHIFT_COUNT ); #if defined(YYCOVERAGE) yycoverage[stateno][iLookAhead] = 1; #endif do{ i = yy_shift_ofst[stateno]; assert( i>=0 ); assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); assert( iLookAhead!=YYNOCODE ); assert( iLookAhead < YYNTOKEN ); i += iLookAhead; if( yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); } #endif assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */ iLookAhead = iFallback; continue; } #endif #ifdef YYWILDCARD { int j = i - iLookAhead + YYWILDCARD; if( #if YY_SHIFT_MIN+YYWILDCARD<0 j>=0 && #endif #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); } #endif /* NDEBUG */ return yy_action[j]; } } #endif /* YYWILDCARD */ return yy_default[stateno]; }else{ return yy_action[i]; } }while(1); } /* ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. */ static int yy_find_reduce_action( YYACTIONTYPE stateno, /* Current state number */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ int i; #ifdef YYERRORSYMBOL if( stateno>YY_REDUCE_COUNT ){ return yy_default[stateno]; } #else assert( stateno<=YY_REDUCE_COUNT ); #endif i = yy_reduce_ofst[stateno]; assert( iLookAhead!=YYNOCODE ); i += iLookAhead; #ifdef YYERRORSYMBOL if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ return yy_default[stateno]; } #else assert( i>=0 && iyytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will execute if the parser ** stack every overflows */ /******** Begin %stack_overflow code ******************************************/ /******** End %stack_overflow code ********************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument var */ ParseCTX_STORE } /* ** Print tracing information for a SHIFT action */ #ifndef NDEBUG static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){ if( yyTraceFILE ){ if( yyNewStateyytos->major], yyNewState); }else{ fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], yyNewState - YY_MIN_REDUCE); } } } #else # define yyTraceShift(X,Y,Z) #endif /* ** Perform a shift action. */ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ YYACTIONTYPE yyNewState, /* The new state to shift in */ YYCODETYPE yyMajor, /* The major token to shift in */ ParseTOKENTYPE yyMinor /* The minor token to shift in */ ){ yyStackEntry *yytos; yypParser->yytos++; #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>yypParser->yystackEnd ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ if( yyGrowStack(yypParser) ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } } #endif if( yyNewState > YY_MAX_SHIFT ){ yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; } yytos = yypParser->yytos; yytos->stateno = yyNewState; yytos->major = yyMajor; yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState, "Shift"); } /* The following table contains information about every rule that ** is used during the reduce. */ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { { 38, -1 }, /* (0) query ::= expr */ { 38, 0 }, /* (1) query ::= */ { 38, -1 }, /* (2) query ::= STAR */ { 27, -2 }, /* (3) expr ::= expr expr */ { 27, -1 }, /* (4) expr ::= union */ { 32, -3 }, /* (5) union ::= expr OR expr */ { 32, -3 }, /* (6) union ::= union OR expr */ { 27, -3 }, /* (7) expr ::= modifier COLON expr */ { 27, -3 }, /* (8) expr ::= modifierlist COLON expr */ { 27, -3 }, /* (9) expr ::= LP expr RP */ { 28, -3 }, /* (10) attribute ::= ATTRIBUTE COLON term */ { 29, -1 }, /* (11) attribute_list ::= attribute */ { 29, -3 }, /* (12) attribute_list ::= attribute_list SEMICOLON attribute */ { 29, -2 }, /* (13) attribute_list ::= attribute_list SEMICOLON */ { 29, 0 }, /* (14) attribute_list ::= */ { 27, -5 }, /* (15) expr ::= expr ARROW LB attribute_list RB */ { 27, -3 }, /* (16) expr ::= QUOTE termlist QUOTE */ { 27, -3 }, /* (17) expr ::= QUOTE term QUOTE */ { 27, -1 }, /* (18) expr ::= term */ { 27, -1 }, /* (19) expr ::= prefix */ { 27, -1 }, /* (20) expr ::= termlist */ { 27, -1 }, /* (21) expr ::= STOPWORD */ { 31, -2 }, /* (22) termlist ::= term term */ { 31, -2 }, /* (23) termlist ::= termlist term */ { 31, -2 }, /* (24) termlist ::= termlist STOPWORD */ { 27, -2 }, /* (25) expr ::= MINUS expr */ { 27, -2 }, /* (26) expr ::= TILDE expr */ { 30, -1 }, /* (27) prefix ::= PREFIX */ { 27, -3 }, /* (28) expr ::= PERCENT TERM PERCENT */ { 39, -1 }, /* (29) modifier ::= MODIFIER */ { 35, -3 }, /* (30) modifierlist ::= modifier OR term */ { 35, -3 }, /* (31) modifierlist ::= modifierlist OR term */ { 27, -3 }, /* (32) expr ::= modifier COLON tag_list */ { 33, -2 }, /* (33) tag_list ::= LB term */ { 33, -2 }, /* (34) tag_list ::= LB prefix */ { 33, -2 }, /* (35) tag_list ::= LB termlist */ { 33, -3 }, /* (36) tag_list ::= tag_list OR term */ { 33, -3 }, /* (37) tag_list ::= tag_list OR prefix */ { 33, -3 }, /* (38) tag_list ::= tag_list OR termlist */ { 33, -2 }, /* (39) tag_list ::= tag_list RB */ { 27, -3 }, /* (40) expr ::= modifier COLON numeric_range */ { 37, -4 }, /* (41) numeric_range ::= LSQB num num RSQB */ { 27, -3 }, /* (42) expr ::= modifier COLON geo_filter */ { 34, -6 }, /* (43) geo_filter ::= LSQB num num num TERM RSQB */ { 36, -1 }, /* (44) num ::= NUMBER */ { 36, -2 }, /* (45) num ::= LP num */ { 36, -2 }, /* (46) num ::= MINUS num */ { 40, -1 }, /* (47) term ::= TERM */ { 40, -1 }, /* (48) term ::= NUMBER */ }; static void yy_accept(yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. ** ** The yyLookahead and yyLookaheadToken parameters provide reduce actions ** access to the lookahead token (if any). The yyLookahead will be YYNOCODE ** if the lookahead token has already been consumed. As this procedure is ** only called from one place, optimizing compilers will in-line it, which ** means that the extra parameters have no performance impact. */ static YYACTIONTYPE yy_reduce( yyParser *yypParser, /* The parser */ unsigned int yyruleno, /* Number of the rule by which to reduce */ int yyLookahead, /* Lookahead token, or YYNOCODE if none */ ParseTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ ParseCTX_PDECL /* %extra_context */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ ParseARG_FETCH (void)yyLookahead; (void)yyLookaheadToken; yymsp = yypParser->yytos; #ifndef NDEBUG if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; if( yysize ){ fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", yyTracePrompt, yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno); }else{ fprintf(yyTraceFILE, "%sReduce %d [%s].\n", yyTracePrompt, yyruleno, yyRuleName[yyruleno]); } } #endif /* NDEBUG */ /* Check that the stack is large enough to grow by a single entry ** if the RHS of the rule is empty. This ensures that there is room ** enough on the stack to push the LHS value */ if( yyRuleInfo[yyruleno].nrhs==0 ){ #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack)); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>=yypParser->yystackEnd ){ yyStackOverflow(yypParser); /* The call to yyStackOverflow() above pops the stack until it is ** empty, causing the main parser loop to exit. So the return value ** is never used and does not matter. */ return 0; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ if( yyGrowStack(yypParser) ){ yyStackOverflow(yypParser); /* The call to yyStackOverflow() above pops the stack until it is ** empty, causing the main parser loop to exit. So the return value ** is never used and does not matter. */ return 0; } yymsp = yypParser->yytos; } #endif } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example ** follows: ** case 0: ** #line ** { ... } // User supplied code ** #line ** break; */ /********** Begin reduce actions **********************************************/ YYMINORTYPE yylhsminor; case 0: /* query ::= expr */ #line 135 "parser.y" { /* If the root is a negative node, we intersect it with a wildcard node */ ctx->root = yymsp[0].minor.yy37; } #line 1157 "parser.c" break; case 1: /* query ::= */ #line 141 "parser.y" { ctx->root = NULL; } #line 1164 "parser.c" break; case 2: /* query ::= STAR */ #line 145 "parser.y" { ctx->root = NewWildcardNode(); } #line 1171 "parser.c" break; case 3: /* expr ::= expr expr */ #line 153 "parser.y" { // if both yymsp[-1].minor.yy37 and yymsp[0].minor.yy37 are null we return null if (yymsp[-1].minor.yy37 == NULL && yymsp[0].minor.yy37 == NULL) { yylhsminor.yy37 = NULL; } else { if (yymsp[-1].minor.yy37 && yymsp[-1].minor.yy37->type == QN_PHRASE && yymsp[-1].minor.yy37->pn.exact == 0 && yymsp[-1].minor.yy37->opts.fieldMask == RS_FIELDMASK_ALL ) { yylhsminor.yy37 = yymsp[-1].minor.yy37; } else { yylhsminor.yy37 = NewPhraseNode(0); QueryPhraseNode_AddChild(yylhsminor.yy37, yymsp[-1].minor.yy37); } QueryPhraseNode_AddChild(yylhsminor.yy37, yymsp[0].minor.yy37); } } #line 1192 "parser.c" yymsp[-1].minor.yy37 = yylhsminor.yy37; break; case 4: /* expr ::= union */ #line 176 "parser.y" { yylhsminor.yy37 = yymsp[0].minor.yy37; } #line 1200 "parser.c" yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 5: /* union ::= expr OR expr */ #line 180 "parser.y" { if (yymsp[-2].minor.yy37 == NULL && yymsp[0].minor.yy37 == NULL) { yylhsminor.yy37 = NULL; } else if (yymsp[-2].minor.yy37 && yymsp[-2].minor.yy37->type == QN_UNION && yymsp[-2].minor.yy37->opts.fieldMask == RS_FIELDMASK_ALL) { yylhsminor.yy37 = yymsp[-2].minor.yy37; } else { yylhsminor.yy37 = NewUnionNode(); QueryUnionNode_AddChild(yylhsminor.yy37, yymsp[-2].minor.yy37); if (yymsp[-2].minor.yy37) yylhsminor.yy37->opts.fieldMask |= yymsp[-2].minor.yy37->opts.fieldMask; } if (yymsp[0].minor.yy37) { QueryUnionNode_AddChild(yylhsminor.yy37, yymsp[0].minor.yy37); yylhsminor.yy37->opts.fieldMask |= yymsp[0].minor.yy37->opts.fieldMask; QueryNode_SetFieldMask(yylhsminor.yy37, yylhsminor.yy37->opts.fieldMask); } } #line 1225 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 6: /* union ::= union OR expr */ #line 201 "parser.y" { yylhsminor.yy37 = yymsp[-2].minor.yy37; QueryUnionNode_AddChild(yylhsminor.yy37, yymsp[0].minor.yy37); yylhsminor.yy37->opts.fieldMask |= yymsp[0].minor.yy37->opts.fieldMask; QueryNode_SetFieldMask(yymsp[0].minor.yy37, yylhsminor.yy37->opts.fieldMask); } #line 1239 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 7: /* expr ::= modifier COLON expr */ #line 215 "parser.y" { if (yymsp[0].minor.yy37 == NULL) { yylhsminor.yy37 = NULL; } else { if (ctx->sctx->spec) { QueryNode_SetFieldMask(yymsp[0].minor.yy37, IndexSpec_GetFieldBit(ctx->sctx->spec, yymsp[-2].minor.yy0.s, yymsp[-2].minor.yy0.len)); } yylhsminor.yy37 = yymsp[0].minor.yy37; } } #line 1254 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 8: /* expr ::= modifierlist COLON expr */ #line 227 "parser.y" { if (yymsp[0].minor.yy37 == NULL) { yylhsminor.yy37 = NULL; } else { //yymsp[0].minor.yy37->opts.fieldMask = 0; t_fieldMask mask = 0; if (ctx->sctx->spec) { for (int i = 0; i < Vector_Size(yymsp[-2].minor.yy10); i++) { char *p; Vector_Get(yymsp[-2].minor.yy10, i, &p); mask |= IndexSpec_GetFieldBit(ctx->sctx->spec, p, strlen(p)); free(p); } } QueryNode_SetFieldMask(yymsp[0].minor.yy37, mask); Vector_Free(yymsp[-2].minor.yy10); yylhsminor.yy37=yymsp[0].minor.yy37; } } #line 1279 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 9: /* expr ::= LP expr RP */ #line 248 "parser.y" { yymsp[-2].minor.yy37 = yymsp[-1].minor.yy37; } #line 1287 "parser.c" break; case 10: /* attribute ::= ATTRIBUTE COLON term */ #line 256 "parser.y" { yylhsminor.yy17 = (QueryAttribute){ .name = yymsp[-2].minor.yy0.s, .namelen = yymsp[-2].minor.yy0.len, .value = strndup(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len), .vallen = yymsp[0].minor.yy0.len }; } #line 1295 "parser.c" yymsp[-2].minor.yy17 = yylhsminor.yy17; break; case 11: /* attribute_list ::= attribute */ #line 261 "parser.y" { yylhsminor.yy61 = array_new(QueryAttribute, 2); yylhsminor.yy61 = array_append(yylhsminor.yy61, yymsp[0].minor.yy17); } #line 1304 "parser.c" yymsp[0].minor.yy61 = yylhsminor.yy61; break; case 12: /* attribute_list ::= attribute_list SEMICOLON attribute */ #line 266 "parser.y" { yylhsminor.yy61 = array_append(yymsp[-2].minor.yy61, yymsp[0].minor.yy17); } #line 1312 "parser.c" yymsp[-2].minor.yy61 = yylhsminor.yy61; break; case 13: /* attribute_list ::= attribute_list SEMICOLON */ #line 270 "parser.y" { yylhsminor.yy61 = yymsp[-1].minor.yy61; } #line 1320 "parser.c" yymsp[-1].minor.yy61 = yylhsminor.yy61; break; case 14: /* attribute_list ::= */ #line 274 "parser.y" { yymsp[1].minor.yy61 = NULL; } #line 1328 "parser.c" break; case 15: /* expr ::= expr ARROW LB attribute_list RB */ #line 278 "parser.y" { if (yymsp[-1].minor.yy61) { char *err = NULL; if (!QueryNode_ApplyAttributes(yymsp[-4].minor.yy37, yymsp[-1].minor.yy61, array_len(yymsp[-1].minor.yy61), &err)) { ctx->ok = 0; ctx->errorMsg = err; } } array_free_ex(yymsp[-1].minor.yy61, free((char*)((QueryAttribute*)ptr )->value)); yylhsminor.yy37 = yymsp[-4].minor.yy37; } #line 1344 "parser.c" yymsp[-4].minor.yy37 = yylhsminor.yy37; break; case 16: /* expr ::= QUOTE termlist QUOTE */ #line 295 "parser.y" { yymsp[-1].minor.yy37->pn.exact =1; yymsp[-1].minor.yy37->opts.flags |= QueryNode_Verbatim; yymsp[-2].minor.yy37 = yymsp[-1].minor.yy37; } #line 1355 "parser.c" break; case 17: /* expr ::= QUOTE term QUOTE */ #line 302 "parser.y" { yymsp[-2].minor.yy37 = NewTokenNode(ctx, strdupcase(yymsp[-1].minor.yy0.s, yymsp[-1].minor.yy0.len), -1); yymsp[-2].minor.yy37->opts.flags |= QueryNode_Verbatim; } #line 1364 "parser.c" break; case 18: /* expr ::= term */ #line 308 "parser.y" { yylhsminor.yy37 = NewTokenNode(ctx, strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len), -1); } #line 1371 "parser.c" yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 19: /* expr ::= prefix */ #line 312 "parser.y" { yylhsminor.yy37= yymsp[0].minor.yy37; } #line 1379 "parser.c" yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 20: /* expr ::= termlist */ #line 316 "parser.y" { yylhsminor.yy37 = yymsp[0].minor.yy37; } #line 1387 "parser.c" yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 21: /* expr ::= STOPWORD */ #line 320 "parser.y" { yymsp[0].minor.yy37 = NULL; } #line 1395 "parser.c" break; case 22: /* termlist ::= term term */ #line 324 "parser.y" { yylhsminor.yy37 = NewPhraseNode(0); QueryPhraseNode_AddChild(yylhsminor.yy37, NewTokenNode(ctx, strdupcase(yymsp[-1].minor.yy0.s, yymsp[-1].minor.yy0.len), -1)); QueryPhraseNode_AddChild(yylhsminor.yy37, NewTokenNode(ctx, strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len), -1)); } #line 1404 "parser.c" yymsp[-1].minor.yy37 = yylhsminor.yy37; break; case 23: /* termlist ::= termlist term */ #line 330 "parser.y" { yylhsminor.yy37 = yymsp[-1].minor.yy37; QueryPhraseNode_AddChild(yylhsminor.yy37, NewTokenNode(ctx, strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len), -1)); } #line 1413 "parser.c" yymsp[-1].minor.yy37 = yylhsminor.yy37; break; case 24: /* termlist ::= termlist STOPWORD */ case 39: /* tag_list ::= tag_list RB */ yytestcase(yyruleno==39); #line 335 "parser.y" { yylhsminor.yy37 = yymsp[-1].minor.yy37; } #line 1422 "parser.c" yymsp[-1].minor.yy37 = yylhsminor.yy37; break; case 25: /* expr ::= MINUS expr */ #line 343 "parser.y" { yymsp[-1].minor.yy37 = NewNotNode(yymsp[0].minor.yy37); } #line 1430 "parser.c" break; case 26: /* expr ::= TILDE expr */ #line 351 "parser.y" { yymsp[-1].minor.yy37 = NewOptionalNode(yymsp[0].minor.yy37); } #line 1437 "parser.c" break; case 27: /* prefix ::= PREFIX */ #line 359 "parser.y" { yymsp[0].minor.yy0.s = strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len); yylhsminor.yy37 = NewPrefixNode(ctx, yymsp[0].minor.yy0.s, strlen(yymsp[0].minor.yy0.s)); } #line 1445 "parser.c" yymsp[0].minor.yy37 = yylhsminor.yy37; break; case 28: /* expr ::= PERCENT TERM PERCENT */ #line 368 "parser.y" { yymsp[-1].minor.yy0.s = strdupcase(yymsp[-1].minor.yy0.s, yymsp[-1].minor.yy0.len); yymsp[-2].minor.yy37 = NewFuzzyNode(ctx, yymsp[-1].minor.yy0.s, strlen(yymsp[-1].minor.yy0.s), 1); } #line 1454 "parser.c" break; case 29: /* modifier ::= MODIFIER */ #line 378 "parser.y" { yymsp[0].minor.yy0.len = unescapen((char*)yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len); yylhsminor.yy0 = yymsp[0].minor.yy0; } #line 1462 "parser.c" yymsp[0].minor.yy0 = yylhsminor.yy0; break; case 30: /* modifierlist ::= modifier OR term */ #line 383 "parser.y" { yylhsminor.yy10 = NewVector(char *, 2); char *s = strdupcase(yymsp[-2].minor.yy0.s, yymsp[-2].minor.yy0.len); Vector_Push(yylhsminor.yy10, s); s = strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len); Vector_Push(yylhsminor.yy10, s); } #line 1474 "parser.c" yymsp[-2].minor.yy10 = yylhsminor.yy10; break; case 31: /* modifierlist ::= modifierlist OR term */ #line 391 "parser.y" { char *s = strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len); Vector_Push(yymsp[-2].minor.yy10, s); yylhsminor.yy10 = yymsp[-2].minor.yy10; } #line 1484 "parser.c" yymsp[-2].minor.yy10 = yylhsminor.yy10; break; case 32: /* expr ::= modifier COLON tag_list */ #line 401 "parser.y" { if (!yymsp[0].minor.yy37) { yylhsminor.yy37= NULL; } else { // Tag field names must be case sensitive, we we can't do strdupcase char *s = strndup(yymsp[-2].minor.yy0.s, yymsp[-2].minor.yy0.len); size_t slen = unescapen((char*)s, yymsp[-2].minor.yy0.len); yylhsminor.yy37 = NewTagNode(s, slen); QueryTagNode_AddChildren(yylhsminor.yy37, yymsp[0].minor.yy37->pn.children, yymsp[0].minor.yy37->pn.numChildren); // Set the children count on yymsp[0].minor.yy37 to 0 so they won't get recursively free'd yymsp[0].minor.yy37->pn.numChildren = 0; QueryNode_Free(yymsp[0].minor.yy37); } } #line 1505 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 33: /* tag_list ::= LB term */ #line 418 "parser.y" { yymsp[-1].minor.yy37 = NewPhraseNode(0); QueryPhraseNode_AddChild(yymsp[-1].minor.yy37, NewTokenNode(ctx, strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len), -1)); } #line 1514 "parser.c" break; case 34: /* tag_list ::= LB prefix */ case 35: /* tag_list ::= LB termlist */ yytestcase(yyruleno==35); #line 423 "parser.y" { yymsp[-1].minor.yy37 = NewPhraseNode(0); QueryPhraseNode_AddChild(yymsp[-1].minor.yy37, yymsp[0].minor.yy37); } #line 1523 "parser.c" break; case 36: /* tag_list ::= tag_list OR term */ #line 433 "parser.y" { QueryPhraseNode_AddChild(yymsp[-2].minor.yy37, NewTokenNode(ctx, strdupcase(yymsp[0].minor.yy0.s, yymsp[0].minor.yy0.len), -1)); yylhsminor.yy37 = yymsp[-2].minor.yy37; } #line 1531 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 37: /* tag_list ::= tag_list OR prefix */ case 38: /* tag_list ::= tag_list OR termlist */ yytestcase(yyruleno==38); #line 438 "parser.y" { QueryPhraseNode_AddChild(yymsp[-2].minor.yy37, yymsp[0].minor.yy37); yylhsminor.yy37 = yymsp[-2].minor.yy37; } #line 1541 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 40: /* expr ::= modifier COLON numeric_range */ #line 457 "parser.y" { // we keep the capitalization as is yymsp[0].minor.yy40->fieldName = strndup(yymsp[-2].minor.yy0.s, yymsp[-2].minor.yy0.len); yylhsminor.yy37 = NewNumericNode(yymsp[0].minor.yy40); } #line 1551 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 41: /* numeric_range ::= LSQB num num RSQB */ #line 463 "parser.y" { yymsp[-3].minor.yy40 = NewNumericFilter(yymsp[-2].minor.yy62.num, yymsp[-1].minor.yy62.num, yymsp[-2].minor.yy62.inclusive, yymsp[-1].minor.yy62.inclusive); } #line 1559 "parser.c" break; case 42: /* expr ::= modifier COLON geo_filter */ #line 471 "parser.y" { // we keep the capitalization as is yymsp[0].minor.yy68->property = strndup(yymsp[-2].minor.yy0.s, yymsp[-2].minor.yy0.len); yylhsminor.yy37 = NewGeofilterNode(yymsp[0].minor.yy68); } #line 1568 "parser.c" yymsp[-2].minor.yy37 = yylhsminor.yy37; break; case 43: /* geo_filter ::= LSQB num num num TERM RSQB */ #line 477 "parser.y" { yymsp[-5].minor.yy68 = NewGeoFilter(yymsp[-4].minor.yy62.num, yymsp[-3].minor.yy62.num, yymsp[-2].minor.yy62.num, strdupcase(yymsp[-1].minor.yy0.s, yymsp[-1].minor.yy0.len)); char *err = NULL; if (!GeoFilter_IsValid(yymsp[-5].minor.yy68, &err)) { ctx->ok = 0; ctx->errorMsg = strdup(err); } } #line 1581 "parser.c" break; case 44: /* num ::= NUMBER */ #line 492 "parser.y" { yylhsminor.yy62.num = yymsp[0].minor.yy0.numval; yylhsminor.yy62.inclusive = 1; } #line 1589 "parser.c" yymsp[0].minor.yy62 = yylhsminor.yy62; break; case 45: /* num ::= LP num */ #line 497 "parser.y" { yymsp[-1].minor.yy62=yymsp[0].minor.yy62; yymsp[-1].minor.yy62.inclusive = 0; } #line 1598 "parser.c" break; case 46: /* num ::= MINUS num */ #line 502 "parser.y" { yymsp[0].minor.yy62.num = -yymsp[0].minor.yy62.num; yymsp[-1].minor.yy62 = yymsp[0].minor.yy62; } #line 1606 "parser.c" break; case 47: /* term ::= TERM */ case 48: /* term ::= NUMBER */ yytestcase(yyruleno==48); #line 507 "parser.y" { yylhsminor.yy0 = yymsp[0].minor.yy0; } #line 1614 "parser.c" yymsp[0].minor.yy0 = yylhsminor.yy0; break; default: break; /********** End reduce actions ************************************************/ }; assert( yyrulenoYY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); /* It is not possible for a REDUCE to be followed by an error */ assert( yyact!=YY_ERROR_ACTION ); yymsp += yysize+1; yypParser->yytos = yymsp; yymsp->stateno = (YYACTIONTYPE)yyact; yymsp->major = (YYCODETYPE)yygoto; yyTraceShift(yypParser, yyact, "... then shift"); return yyact; } /* ** The following code executes when the parse fails */ #ifndef YYNOERRORRECOVERY static void yy_parse_failed( yyParser *yypParser /* The parser */ ){ ParseARG_FETCH ParseCTX_FETCH #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); } #endif while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will be executed whenever the ** parser fails */ /************ Begin %parse_failure code ***************************************/ /************ End %parse_failure code *****************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE } #endif /* YYNOERRORRECOVERY */ /* ** The following code executes when a syntax error first occurs. */ static void yy_syntax_error( yyParser *yypParser, /* The parser */ int yymajor, /* The major type of the error token */ ParseTOKENTYPE yyminor /* The minor type of the error token */ ){ ParseARG_FETCH ParseCTX_FETCH #define TOKEN yyminor /************ Begin %syntax_error code ****************************************/ #line 26 "parser.y" int len = TOKEN.len + 100; char buf[len]; snprintf(buf, len, "Syntax error at offset %d near '%.*s'", TOKEN.pos, TOKEN.len, TOKEN.s); ctx->ok = 0; ctx->errorMsg = strdup(buf); #line 1686 "parser.c" /************ End %syntax_error code ******************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE } /* ** The following is executed when the parser accepts */ static void yy_accept( yyParser *yypParser /* The parser */ ){ ParseARG_FETCH ParseCTX_FETCH #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif assert( yypParser->yytos==yypParser->yystack ); /* Here code is inserted which will be executed whenever the ** parser accepts */ /*********** Begin %parse_accept code *****************************************/ /*********** End %parse_accept code *******************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE } /* The main parser program. ** The first argument is a pointer to a structure obtained from ** "ParseAlloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for ** use by the action routines. ** ** Inputs: **
    **
  • A pointer to the parser (an opaque structure.) **
  • The major token number. **
  • The minor token number. **
  • An option argument of a grammar-specified type. **
** ** Outputs: ** None. */ void Parse( void *yyp, /* The parser */ int yymajor, /* The major token code number */ ParseTOKENTYPE yyminor /* The value for the token */ ParseARG_PDECL /* Optional %extra_argument parameter */ ){ YYMINORTYPE yyminorunion; YYACTIONTYPE yyact; /* The parser action. */ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) int yyendofinput; /* True if we are at the end of input */ #endif #ifdef YYERRORSYMBOL int yyerrorhit = 0; /* True if yymajor has invoked an error */ #endif yyParser *yypParser = (yyParser*)yyp; /* The parser */ ParseCTX_FETCH ParseARG_STORE assert( yypParser->yytos!=0 ); #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) yyendofinput = (yymajor==0); #endif yyact = yypParser->yytos->stateno; #ifndef NDEBUG if( yyTraceFILE ){ if( yyact < YY_MIN_REDUCE ){ fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", yyTracePrompt,yyTokenName[yymajor],yyact); }else{ fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", yyTracePrompt,yyTokenName[yymajor],yyact-YY_MIN_REDUCE); } } #endif do{ assert( yyact==yypParser->yytos->stateno ); yyact = yy_find_shift_action(yymajor,yyact); if( yyact >= YY_MIN_REDUCE ){ yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor, yyminor ParseCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ yy_shift(yypParser,yyact,yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif break; }else if( yyact==YY_ACCEPT_ACTION ){ yypParser->yytos--; yy_accept(yypParser); return; }else{ assert( yyact == YY_ERROR_ACTION ); yyminorunion.yy0 = yyminor; #ifdef YYERRORSYMBOL int yymx; #endif #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); } #endif #ifdef YYERRORSYMBOL /* A syntax error has occurred. ** The response to an error depends upon whether or not the ** grammar defines an error token "ERROR". ** ** This is what we do if the grammar does define ERROR: ** ** * Call the %syntax_error function. ** ** * Begin popping the stack until we enter a state where ** it is legal to shift the error symbol, then shift ** the error symbol. ** ** * Set the error count to three. ** ** * Begin accepting and shifting new tokens. No new error ** processing will occur until three tokens have been ** shifted successfully. ** */ if( yypParser->yyerrcnt<0 ){ yy_syntax_error(yypParser,yymajor,yyminor); } yymx = yypParser->yytos->major; if( yymx==YYERRORSYMBOL || yyerrorhit ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sDiscard input token %s\n", yyTracePrompt,yyTokenName[yymajor]); } #endif yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ while( yypParser->yytos >= yypParser->yystack && yymx != YYERRORSYMBOL && (yyact = yy_find_reduce_action( yypParser->yytos->stateno, YYERRORSYMBOL)) >= YY_MIN_REDUCE ){ yy_pop_parser_stack(yypParser); } if( yypParser->yytos < yypParser->yystack || yymajor==0 ){ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yymajor = YYNOCODE; }else if( yymx!=YYERRORSYMBOL ){ yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); } } yypParser->yyerrcnt = 3; yyerrorhit = 1; if( yymajor==YYNOCODE ) break; yyact = yypParser->yytos->stateno; #elif defined(YYNOERRORRECOVERY) /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to ** do any kind of error recovery. Instead, simply invoke the syntax ** error routine and continue going as if nothing had happened. ** ** Applications can set this macro (for example inside %include) if ** they intend to abandon the parse upon the first syntax error seen. */ yy_syntax_error(yypParser,yymajor, yyminor); yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); break; #else /* YYERRORSYMBOL is not defined */ /* This is what we do if the grammar does not define ERROR: ** ** * Report an error message, and throw away the input token. ** ** * If the input token is $, then fail the parse. ** ** As before, subsequent error messages are suppressed until ** three input tokens have been successfully shifted. */ if( yypParser->yyerrcnt<=0 ){ yy_syntax_error(yypParser,yymajor, yyminor); } yypParser->yyerrcnt = 3; yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); if( yyendofinput ){ yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif } break; #endif } }while( yypParser->yytos>yypParser->yystack ); #ifndef NDEBUG if( yyTraceFILE ){ yyStackEntry *i; char cDiv = '['; fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); cDiv = ' '; } fprintf(yyTraceFILE,"]\n"); } #endif return; } RediSearch-1.2.2/src/query_parser/parser.h000066400000000000000000000021361364126773500205220ustar00rootroot00000000000000#define LOWEST 1 #define TILDE 2 #define TAGLIST 3 #define QUOTE 4 #define COLON 5 #define MINUS 6 #define NUMBER 7 #define STOPWORD 8 #define TERMLIST 9 #define TERM 10 #define PREFIX 11 #define PERCENT 12 #define ATTRIBUTE 13 #define LP 14 #define RP 15 #define MODIFIER 16 #define AND 17 #define OR 18 #define ORX 19 #define ARROW 20 #define STAR 21 #define SEMICOLON 22 #define LB 23 #define RB 24 #define LSQB 25 #define RSQB 26 RediSearch-1.2.2/src/query_parser/parser.y000066400000000000000000000273731364126773500205550ustar00rootroot00000000000000%left LOWEST. %left TILDE. %left TAGLIST. %left QUOTE. %left COLON. %left MINUS. %left NUMBER. %left STOPWORD. %left TERMLIST. %left TERM. %left PREFIX. %left PERCENT. %left ATTRIBUTE. %right LP. %left RP. // needs to be above lp/rp %left MODIFIER. %left AND. %left OR. %left ORX. %left ARROW. %token_type {QueryToken} %syntax_error { int len = TOKEN.len + 100; char buf[len]; snprintf(buf, len, "Syntax error at offset %d near '%.*s'", TOKEN.pos, TOKEN.len, TOKEN.s); ctx->ok = 0; ctx->errorMsg = strdup(buf); } %include { #include #include #include #include #include "parse.h" #include "../util/arr.h" #include "../rmutil/vector.h" #include "../query_node.h" // strndup + lowercase in one pass! char *strdupcase(const char *s, size_t len) { char *ret = strndup(s, len); char *dst = ret; char *src = dst; while (*src) { // unescape if (*src == '\\' && (ispunct(*(src+1)) || isspace(*(src+1)))) { ++src; continue; } *dst = tolower(*src); ++dst; ++src; } *dst = '\0'; return ret; } // unescape a string (non null terminated) and return the new length (may be shorter than the original. This manipulates the string itself size_t unescapen(char *s, size_t sz) { char *dst = s; char *src = dst; char *end = s + sz; while (src < end) { // unescape if (*src == '\\' && src + 1 < end && (ispunct(*(src+1)) || isspace(*(src+1)))) { ++src; continue; } *dst++ = *src++; } return (size_t)(dst - s); } } // END %include %extra_argument { QueryParseCtx *ctx } %default_type { QueryToken } %default_destructor { } %type expr { QueryNode * } %destructor expr { QueryNode_Free($$); } %type attribute { QueryAttribute } %destructor attribute { free((char*)$$.value); } %type attribute_list {QueryAttribute *} %destructor attribute_list { array_free_ex($$, free((char*)((QueryAttribute*)ptr )->value)); } %type prefix { QueryNode * } %destructor prefix { QueryNode_Free($$); } %type termlist { QueryNode * } %destructor termlist { QueryNode_Free($$); } %type union { QueryNode *} %destructor union { QueryNode_Free($$); } %type tag_list { QueryNode *} %destructor tag_list { QueryNode_Free($$); } //%type %type geo_filter { GeoFilter *} %destructor geo_filter { GeoFilter_Free($$); } %type modifierlist { Vector* } %destructor modifierlist { for (size_t i = 0; i < Vector_Size($$); i++) { char *s; Vector_Get($$, i, &s); free(s); } Vector_Free($$); } %type num { RangeNumber } %type numeric_range { NumericFilter * } %destructor numeric_range { NumericFilter_Free($$); } query ::= expr(A) . { /* If the root is a negative node, we intersect it with a wildcard node */ ctx->root = A; } query ::= . { ctx->root = NULL; } query ::= STAR . { ctx->root = NewWildcardNode(); } ///////////////////////////////////////////////////////////////// // AND Clause / Phrase ///////////////////////////////////////////////////////////////// expr(A) ::= expr(B) expr(C) . [AND] { // if both B and C are null we return null if (B == NULL && C == NULL) { A = NULL; } else { if (B && B->type == QN_PHRASE && B->pn.exact == 0 && B->opts.fieldMask == RS_FIELDMASK_ALL ) { A = B; } else { A = NewPhraseNode(0); QueryPhraseNode_AddChild(A, B); } QueryPhraseNode_AddChild(A, C); } } ///////////////////////////////////////////////////////////////// // Unions ///////////////////////////////////////////////////////////////// expr(A) ::= union(B) . [ORX] { A = B; } union(A) ::= expr(B) OR expr(C) . [OR] { if (B == NULL && C == NULL) { A = NULL; } else if (B && B->type == QN_UNION && B->opts.fieldMask == RS_FIELDMASK_ALL) { A = B; } else { A = NewUnionNode(); QueryUnionNode_AddChild(A, B); if (B) A->opts.fieldMask |= B->opts.fieldMask; } if (C) { QueryUnionNode_AddChild(A, C); A->opts.fieldMask |= C->opts.fieldMask; QueryNode_SetFieldMask(A, A->opts.fieldMask); } } union(A) ::= union(B) OR expr(C). [ORX] { A = B; QueryUnionNode_AddChild(A, C); A->opts.fieldMask |= C->opts.fieldMask; QueryNode_SetFieldMask(C, A->opts.fieldMask); } ///////////////////////////////////////////////////////////////// // Text Field Filters ///////////////////////////////////////////////////////////////// expr(A) ::= modifier(B) COLON expr(C) . [MODIFIER] { if (C == NULL) { A = NULL; } else { if (ctx->sctx->spec) { QueryNode_SetFieldMask(C, IndexSpec_GetFieldBit(ctx->sctx->spec, B.s, B.len)); } A = C; } } expr(A) ::= modifierlist(B) COLON expr(C) . [MODIFIER] { if (C == NULL) { A = NULL; } else { //C->opts.fieldMask = 0; t_fieldMask mask = 0; if (ctx->sctx->spec) { for (int i = 0; i < Vector_Size(B); i++) { char *p; Vector_Get(B, i, &p); mask |= IndexSpec_GetFieldBit(ctx->sctx->spec, p, strlen(p)); free(p); } } QueryNode_SetFieldMask(C, mask); Vector_Free(B); A=C; } } expr(A) ::= LP expr(B) RP . { A = B; } ///////////////////////////////////////////////////////////////// // Attributes ///////////////////////////////////////////////////////////////// attribute(A) ::= ATTRIBUTE(B) COLON term(C). { A = (QueryAttribute){ .name = B.s, .namelen = B.len, .value = strndup(C.s, C.len), .vallen = C.len }; } attribute_list(A) ::= attribute(B) . { A = array_new(QueryAttribute, 2); A = array_append(A, B); } attribute_list(A) ::= attribute_list(B) SEMICOLON attribute(C) . { A = array_append(B, C); } attribute_list(A) ::= attribute_list(B) SEMICOLON . { A = B; } attribute_list(A) ::= . { A = NULL; } expr(A) ::= expr(B) ARROW LB attribute_list(C) RB . { if (C) { char *err = NULL; if (!QueryNode_ApplyAttributes(B, C, array_len(C), &err)) { ctx->ok = 0; ctx->errorMsg = err; } } array_free_ex(C, free((char*)((QueryAttribute*)ptr )->value)); A = B; } ///////////////////////////////////////////////////////////////// // Term Lists ///////////////////////////////////////////////////////////////// expr(A) ::= QUOTE termlist(B) QUOTE. [TERMLIST] { B->pn.exact =1; B->opts.flags |= QueryNode_Verbatim; A = B; } expr(A) ::= QUOTE term(B) QUOTE. [TERMLIST] { A = NewTokenNode(ctx, strdupcase(B.s, B.len), -1); A->opts.flags |= QueryNode_Verbatim; } expr(A) ::= term(B) . [LOWEST] { A = NewTokenNode(ctx, strdupcase(B.s, B.len), -1); } expr(A) ::= prefix(B) . [PREFIX] { A= B; } expr(A) ::= termlist(B) . [TERMLIST] { A = B; } expr(A) ::= STOPWORD . [STOPWORD] { A = NULL; } termlist(A) ::= term(B) term(C). [TERMLIST] { A = NewPhraseNode(0); QueryPhraseNode_AddChild(A, NewTokenNode(ctx, strdupcase(B.s, B.len), -1)); QueryPhraseNode_AddChild(A, NewTokenNode(ctx, strdupcase(C.s, C.len), -1)); } termlist(A) ::= termlist(B) term(C) . [TERMLIST] { A = B; QueryPhraseNode_AddChild(A, NewTokenNode(ctx, strdupcase(C.s, C.len), -1)); } termlist(A) ::= termlist(B) STOPWORD . [TERMLIST] { A = B; } ///////////////////////////////////////////////////////////////// // Negative Clause ///////////////////////////////////////////////////////////////// expr(A) ::= MINUS expr(B) . { A = NewNotNode(B); } ///////////////////////////////////////////////////////////////// // Optional Clause ///////////////////////////////////////////////////////////////// expr(A) ::= TILDE expr(B) . { A = NewOptionalNode(B); } ///////////////////////////////////////////////////////////////// // Prefix experessions ///////////////////////////////////////////////////////////////// prefix(A) ::= PREFIX(B) . [PREFIX] { B.s = strdupcase(B.s, B.len); A = NewPrefixNode(ctx, B.s, strlen(B.s)); } ///////////////////////////////////////////////////////////////// // Fuzzy terms ///////////////////////////////////////////////////////////////// expr(A) ::= PERCENT TERM(B) PERCENT. [PREFIX] { B.s = strdupcase(B.s, B.len); A = NewFuzzyNode(ctx, B.s, strlen(B.s), 1); } ///////////////////////////////////////////////////////////////// // Field Modidiers ///////////////////////////////////////////////////////////////// modifier(A) ::= MODIFIER(B) . { B.len = unescapen((char*)B.s, B.len); A = B; } modifierlist(A) ::= modifier(B) OR term(C). { A = NewVector(char *, 2); char *s = strdupcase(B.s, B.len); Vector_Push(A, s); s = strdupcase(C.s, C.len); Vector_Push(A, s); } modifierlist(A) ::= modifierlist(B) OR term(C). { char *s = strdupcase(C.s, C.len); Vector_Push(B, s); A = B; } ///////////////////////////////////////////////////////////////// // Tag Lists - curly braces separated lists of words ///////////////////////////////////////////////////////////////// expr(A) ::= modifier(B) COLON tag_list(C) . { if (!C) { A= NULL; } else { // Tag field names must be case sensitive, we we can't do strdupcase char *s = strndup(B.s, B.len); size_t slen = unescapen((char*)s, B.len); A = NewTagNode(s, slen); QueryTagNode_AddChildren(A, C->pn.children, C->pn.numChildren); // Set the children count on C to 0 so they won't get recursively free'd C->pn.numChildren = 0; QueryNode_Free(C); } } tag_list(A) ::= LB term(B) . [TAGLIST] { A = NewPhraseNode(0); QueryPhraseNode_AddChild(A, NewTokenNode(ctx, strdupcase(B.s, B.len), -1)); } tag_list(A) ::= LB prefix(B) . [TAGLIST] { A = NewPhraseNode(0); QueryPhraseNode_AddChild(A, B); } tag_list(A) ::= LB termlist(B) . [TAGLIST] { A = NewPhraseNode(0); QueryPhraseNode_AddChild(A, B); } tag_list(A) ::= tag_list(B) OR term(C) . [TAGLIST] { QueryPhraseNode_AddChild(B, NewTokenNode(ctx, strdupcase(C.s, C.len), -1)); A = B; } tag_list(A) ::= tag_list(B) OR prefix(C) . [TAGLIST] { QueryPhraseNode_AddChild(B, C); A = B; } tag_list(A) ::= tag_list(B) OR termlist(C) . [TAGLIST] { QueryPhraseNode_AddChild(B, C); A = B; } tag_list(A) ::= tag_list(B) RB . [TAGLIST] { A = B; } ///////////////////////////////////////////////////////////////// // Numeric Ranges ///////////////////////////////////////////////////////////////// expr(A) ::= modifier(B) COLON numeric_range(C). { // we keep the capitalization as is C->fieldName = strndup(B.s, B.len); A = NewNumericNode(C); } numeric_range(A) ::= LSQB num(B) num(C) RSQB. [NUMBER] { A = NewNumericFilter(B.num, C.num, B.inclusive, C.inclusive); } ///////////////////////////////////////////////////////////////// // Geo Filters ///////////////////////////////////////////////////////////////// expr(A) ::= modifier(B) COLON geo_filter(C). { // we keep the capitalization as is C->property = strndup(B.s, B.len); A = NewGeofilterNode(C); } geo_filter(A) ::= LSQB num(B) num(C) num(D) TERM(E) RSQB. [NUMBER] { A = NewGeoFilter(B.num, C.num, D.num, strdupcase(E.s, E.len)); char *err = NULL; if (!GeoFilter_IsValid(A, &err)) { ctx->ok = 0; ctx->errorMsg = strdup(err); } } ///////////////////////////////////////////////////////////////// // Primitives - numbers and strings ///////////////////////////////////////////////////////////////// num(A) ::= NUMBER(B). { A.num = B.numval; A.inclusive = 1; } num(A) ::= LP num(B). { A=B; A.inclusive = 0; } num(A) ::= MINUS num(B). { B.num = -B.num; A = B; } term(A) ::= TERM(B) . { A = B; } term(A) ::= NUMBER(B) . { A = B; } RediSearch-1.2.2/src/query_parser/template.c.tpl000066400000000000000000000777201364126773500216450ustar00rootroot00000000000000/* ** 2000-05-29 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Driver template for the LEMON parser generator. ** ** The "lemon" program processes an LALR(1) input grammar file, then uses ** this template to construct a parser. The "lemon" program inserts text ** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the ** interstitial "-" characters) contained in this template is changed into ** the value of the %name directive from the grammar. Otherwise, the content ** of this template is copied straight through into the generate parser ** source file. ** ** The following is the concatenation of all %include directives from the ** input grammar file: */ #include /************ Begin %include sections from the grammar ************************/ %% /**************** End of %include directives **********************************/ /* These constants specify the various numeric values for terminal symbols ** in a format understandable to "makeheaders". This section is blank unless ** "lemon" is run with the "-m" command-line option. ***************** Begin makeheaders token definitions *************************/ %% /**************** End makeheaders token definitions ***************************/ /* The next sections is a series of control #defines. ** various aspects of the generated parser. ** YYCODETYPE is the data type used to store the integer codes ** that represent terminal and non-terminal symbols. ** "unsigned char" is used if there are fewer than ** 256 symbols. Larger types otherwise. ** YYNOCODE is a number of type YYCODETYPE that is not used for ** any terminal or nonterminal symbol. ** YYFALLBACK If defined, this indicates that one or more tokens ** (also known as: "terminal symbols") have fall-back ** values which should be used if the original symbol ** would not parse. This permits keywords to sometimes ** be used as identifiers, for example. ** YYACTIONTYPE is the data type used for "action codes" - numbers ** that indicate what to do in response to the next ** token. ** ParseTOKENTYPE is the data type used for minor type for terminal ** symbols. Background: A "minor type" is a semantic ** value associated with a terminal or non-terminal ** symbols. For example, for an "ID" terminal symbol, ** the minor type might be the name of the identifier. ** Each non-terminal can have a different minor type. ** Terminal symbols all have the same minor type, though. ** This macros defines the minor type for terminal ** symbols. ** YYMINORTYPE is the data type used for all minor types. ** This is typically a union of many types, one of ** which is ParseTOKENTYPE. The entry in the union ** for terminal symbols is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. If ** zero the stack is dynamically sized using realloc() ** ParseARG_SDECL A static variable declaration for the %extra_argument ** ParseARG_PDECL A parameter declaration for the %extra_argument ** ParseARG_STORE Code to store %extra_argument into yypParser ** ParseARG_FETCH Code to extract %extra_argument from yypParser ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar ** YY_MAX_SHIFT Maximum value for shift actions ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions ** YY_MIN_REDUCE Maximum value for reduce actions ** YY_ERROR_ACTION The yy_action[] code for syntax error ** YY_ACCEPT_ACTION The yy_action[] code for accept ** YY_NO_ACTION The yy_action[] code for no-op */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ %% /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. ** ** Applications can choose to define yytestcase() in the %include section ** to a macro that can assist in verifying code coverage. For production ** code the yytestcase() macro should be turned off. But it is useful ** for testing. */ #ifndef yytestcase # define yytestcase(X) #endif /* Next are the tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement ** functions that take a state number and lookahead value and return an ** action integer. ** ** Suppose the action integer is N. Then the action is determined as ** follows ** ** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead ** token onto the stack and goto state N. ** ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. ** ** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE ** and YY_MAX_REDUCE ** ** N == YY_ERROR_ACTION A syntax error has occurred. ** ** N == YY_ACCEPT_ACTION The parser accepts its input. ** ** N == YY_NO_ACTION No such action. Denotes unused ** slots in the yy_action[] table. ** ** The action table is constructed as a single large table named yy_action[]. ** Given state S and lookahead X, the action is computed as either: ** ** (A) N = yy_action[ yy_shift_ofst[S] + X ] ** (B) N = yy_default[S] ** ** The (A) formula is preferred. The B formula is used instead if: ** (1) The yy_shift_ofst[S]+X value is out of range, or ** (2) yy_lookahead[yy_shift_ofst[S]+X] is not equal to X, or ** (3) yy_shift_ofst[S] equal YY_SHIFT_USE_DFLT. ** (Implementation note: YY_SHIFT_USE_DFLT is chosen so that ** YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X. ** Hence only tests (1) and (2) need to be evaluated.) ** ** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of ** YY_SHIFT_USE_DFLT. ** ** The following are the tables generated in this section: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ %% /********** End of lemon-generated parsing tables *****************************/ /* The next table maps tokens (terminal symbols) into fallback tokens. ** If a construct like the following: ** ** %fallback ID X Y Z. ** ** appears in the grammar, then ID becomes a fallback token for X, Y, ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser ** but it does not parse, the type of the token is changed to ID and ** the parse is retried before an error is thrown. ** ** This feature can be used, for example, to cause some keywords in a language ** to revert to identifiers if they keyword does not apply in the context where ** it appears. */ #ifdef YYFALLBACK static const YYCODETYPE yyFallback[] = { %% }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** ** + The state number for the parser at this level of the stack. ** ** + The value of the token stored at this level of the stack. ** (In other words, the "major" token.) ** ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. ** ** After the "shift" half of a SHIFTREDUCE action, the stateno field ** actually contains the reduce action for the second half of the ** SHIFTREDUCE. */ struct yyStackEntry { YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ YYCODETYPE major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This ** is the value of the token */ }; typedef struct yyStackEntry yyStackEntry; /* The state of the parser is completely contained in an instance of ** the following structure */ struct yyParser { yyStackEntry *yytos; /* Pointer to top element of the stack */ #ifdef YYTRACKMAXSTACKDEPTH int yyhwm; /* High-water mark of the stack */ #endif #ifndef YYNOERRORRECOVERY int yyerrcnt; /* Shifts left before out of the error */ #endif ParseARG_SDECL /* A place to hold %extra_argument */ #if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ yyStackEntry *yystack; /* The parser's stack */ yyStackEntry yystk0; /* First stack entry */ #else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ #endif }; typedef struct yyParser yyParser; #ifndef NDEBUG #include static FILE *yyTraceFILE = 0; static char *yyTracePrompt = 0; #endif /* NDEBUG */ #ifndef NDEBUG /* ** Turn parser tracing on by giving a stream to which to write the trace ** and a prompt to preface each trace message. Tracing is turned off ** by making either argument NULL ** ** Inputs: **
    **
  • A FILE* to which trace output should be written. ** If NULL, then tracing is turned off. **
  • A prefix string written at the beginning of every ** line of trace output. If NULL, then tracing is ** turned off. **
** ** Outputs: ** None. */ void RSQuery_ParseTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; else if( yyTracePrompt==0 ) yyTraceFILE = 0; } #endif /* NDEBUG */ #ifndef NDEBUG /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const yyTokenName[] = { %% }; #endif /* NDEBUG */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { %% }; #endif /* NDEBUG */ #if YYSTACKDEPTH<=0 /* ** Try to increase the size of the parser stack. Return the number ** of errors. Return 0 on success. */ static int yyGrowStack(yyParser *p){ int newSize; int idx; yyStackEntry *pNew; newSize = p->yystksz*2 + 100; idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; if( p->yystack==&p->yystk0 ){ pNew = malloc(newSize*sizeof(pNew[0])); if( pNew ) pNew[0] = p->yystk0; }else{ pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); } if( pNew ){ p->yystack = pNew; p->yytos = &p->yystack[idx]; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", yyTracePrompt, p->yystksz, newSize); } #endif p->yystksz = newSize; } return pNew==0; } #endif /* Datatype of the argument to the memory allocated passed as the ** second argument to ParseAlloc() below. This can be changed by ** putting an appropriate #define in the %include section of the input ** grammar. */ #ifndef YYMALLOCARGTYPE # define YYMALLOCARGTYPE size_t #endif /* Initialize a new parser that has already been allocated. */ void RSQuery_ParseInit(void *yypParser){ yyParser *pParser = (yyParser*)yypParser; #ifdef YYTRACKMAXSTACKDEPTH pParser->yyhwm = 0; #endif #if YYSTACKDEPTH<=0 pParser->yytos = NULL; pParser->yystack = NULL; pParser->yystksz = 0; if( yyGrowStack(pParser) ){ pParser->yystack = &pParser->yystk0; pParser->yystksz = 1; } #endif #ifndef YYNOERRORRECOVERY pParser->yyerrcnt = -1; #endif pParser->yytos = pParser->yystack; pParser->yystack[0].stateno = 0; pParser->yystack[0].major = 0; } #ifndef Parse_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like ** malloc. ** ** Inputs: ** A pointer to the function used to allocate memory. ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls ** to Parse and ParseFree. */ void *RSQuery_ParseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE)){ yyParser *pParser; pParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); if( pParser ) RSQuery_ParseInit(pParser); return pParser; } #endif /* Parse_ENGINEALWAYSONSTACK */ /* The following function deletes the "minor type" or semantic value ** associated with a symbol. The symbol can be either a terminal ** or nonterminal. "yymajor" is the symbol code, and "yypminor" is ** a pointer to the value to be deleted. The code used to do the ** deletions is derived from the %destructor and/or %token_destructor ** directives of the input grammar. */ static void yy_destructor( yyParser *yypParser, /* The parser */ YYCODETYPE yymajor, /* Type code for object to destroy */ YYMINORTYPE *yypminor /* The object to be destroyed */ ){ ParseARG_FETCH; switch( yymajor ){ /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen ** when the symbol is popped from the stack during a ** reduce or during error processing or when a parser is ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ /********* Begin destructor definitions ***************************************/ %% /********* End destructor definitions *****************************************/ default: break; /* If no destructor action specified: do nothing */ } } /* ** Pop the parser's stack once. ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. */ static void yy_pop_parser_stack(yyParser *pParser){ yyStackEntry *yytos; assert( pParser->yytos!=0 ); assert( pParser->yytos > pParser->yystack ); yytos = pParser->yytos--; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); } #endif yy_destructor(pParser, yytos->major, &yytos->minor); } /* ** Clear all secondary memory allocations from the parser */ void RSQuery_ParseFinalize(void *p){ yyParser *pParser = (yyParser*)p; while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); #if YYSTACKDEPTH<=0 if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); #endif } #ifndef Parse_ENGINEALWAYSONSTACK /* ** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. ** ** If the YYPARSEFREENEVERNULL macro exists (for example because it ** is defined in a %include section of the input grammar) then it is ** assumed that the input pointer is never NULL. */ void RSQuery_ParseFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ #ifndef YYPARSEFREENEVERNULL if( p==0 ) return; #endif RSQuery_ParseFinalize(p); (*freeProc)(p); } #endif /* Parse_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. */ #ifdef YYTRACKMAXSTACKDEPTH int RSQuery_ParseStackPeak(void *p){ yyParser *pParser = (yyParser*)p; return pParser->yyhwm; } #endif /* ** Find the appropriate action for a parser given the terminal ** look-ahead token iLookAhead. */ static unsigned int yy_find_shift_action( yyParser *pParser, /* The parser */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ int i; int stateno = pParser->yytos->stateno; if( stateno>=YY_MIN_REDUCE ) return stateno; assert( stateno <= YY_SHIFT_COUNT ); do{ i = yy_shift_ofst[stateno]; assert( iLookAhead!=YYNOCODE ); i += iLookAhead; if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); } #endif assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */ iLookAhead = iFallback; continue; } #endif #ifdef YYWILDCARD { int j = i - iLookAhead + YYWILDCARD; if( #if YY_SHIFT_MIN+YYWILDCARD<0 j>=0 && #endif #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); } #endif /* NDEBUG */ return yy_action[j]; } } #endif /* YYWILDCARD */ return yy_default[stateno]; }else{ return yy_action[i]; } }while(1); } /* ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. */ static int yy_find_reduce_action( int stateno, /* Current state number */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ int i; #ifdef YYERRORSYMBOL if( stateno>YY_REDUCE_COUNT ){ return yy_default[stateno]; } #else assert( stateno<=YY_REDUCE_COUNT ); #endif i = yy_reduce_ofst[stateno]; assert( i!=YY_REDUCE_USE_DFLT ); assert( iLookAhead!=YYNOCODE ); i += iLookAhead; #ifdef YYERRORSYMBOL if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ return yy_default[stateno]; } #else assert( i>=0 && iyytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will execute if the parser ** stack every overflows */ /******** Begin %stack_overflow code ******************************************/ %% /******** End %stack_overflow code ********************************************/ ParseARG_STORE; /* Suppress warning about unused %extra_argument var */ } /* ** Print tracing information for a SHIFT action */ #ifndef NDEBUG static void yyTraceShift(yyParser *yypParser, int yyNewState){ if( yyTraceFILE ){ if( yyNewStateyytos->major], yyNewState); }else{ fprintf(yyTraceFILE,"%sShift '%s'\n", yyTracePrompt,yyTokenName[yypParser->yytos->major]); } } } #else # define yyTraceShift(X,Y) #endif /* ** Perform a shift action. */ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ int yyNewState, /* The new state to shift in */ int yyMajor, /* The major token to shift in */ ParseTOKENTYPE yyMinor /* The minor token to shift in */ ){ yyStackEntry *yytos; yypParser->yytos++; #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH] ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ if( yyGrowStack(yypParser) ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } } #endif if( yyNewState > YY_MAX_SHIFT ){ yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; } yytos = yypParser->yytos; yytos->stateno = (YYACTIONTYPE)yyNewState; yytos->major = (YYCODETYPE)yyMajor; yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState); } /* The following table contains information about every rule that ** is used during the reduce. */ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ unsigned char nrhs; /* Number of right-hand side symbols in the rule */ } yyRuleInfo[] = { %% }; static void yy_accept(yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. */ static void yy_reduce( yyParser *yypParser, /* The parser */ unsigned int yyruleno /* Number of the rule by which to reduce */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ ParseARG_FETCH; yymsp = yypParser->yytos; #ifndef NDEBUG if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt, yyRuleName[yyruleno], yymsp[-yysize].stateno); } #endif /* NDEBUG */ /* Check that the stack is large enough to grow by a single entry ** if the RHS of the rule is empty. This ensures that there is room ** enough on the stack to push the LHS value */ if( yyRuleInfo[yyruleno].nrhs==0 ){ #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack)); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>=&yypParser->yystack[YYSTACKDEPTH-1] ){ yyStackOverflow(yypParser); return; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ if( yyGrowStack(yypParser) ){ yyStackOverflow(yypParser); return; } yymsp = yypParser->yytos; } #endif } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example ** follows: ** case 0: ** #line ** { ... } // User supplied code ** #line ** break; */ /********** Begin reduce actions **********************************************/ %% /********** End reduce actions ************************************************/ }; assert( yyrulenoYY_MAX_SHIFT ){ yyact += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; } yymsp -= yysize-1; yypParser->yytos = yymsp; yymsp->stateno = (YYACTIONTYPE)yyact; yymsp->major = (YYCODETYPE)yygoto; yyTraceShift(yypParser, yyact); }else{ assert( yyact == YY_ACCEPT_ACTION ); yypParser->yytos -= yysize; yy_accept(yypParser); } } /* ** The following code executes when the parse fails */ #ifndef YYNOERRORRECOVERY static void yy_parse_failed( yyParser *yypParser /* The parser */ ){ ParseARG_FETCH; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); } #endif while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will be executed whenever the ** parser fails */ /************ Begin %parse_failure code ***************************************/ %% /************ End %parse_failure code *****************************************/ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } #endif /* YYNOERRORRECOVERY */ /* ** The following code executes when a syntax error first occurs. */ static void yy_syntax_error( yyParser *yypParser, /* The parser */ int yymajor, /* The major type of the error token */ ParseTOKENTYPE yyminor /* The minor type of the error token */ ){ ParseARG_FETCH; #define TOKEN yyminor /************ Begin %syntax_error code ****************************************/ %% /************ End %syntax_error code ******************************************/ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } /* ** The following is executed when the parser accepts */ static void yy_accept( yyParser *yypParser /* The parser */ ){ ParseARG_FETCH; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif assert( yypParser->yytos==yypParser->yystack ); /* Here code is inserted which will be executed whenever the ** parser accepts */ /*********** Begin %parse_accept code *****************************************/ %% /*********** End %parse_accept code *******************************************/ ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } /* The main parser program. ** The first argument is a pointer to a structure obtained from ** "ParseAlloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for ** use by the action routines. ** ** Inputs: **
    **
  • A pointer to the parser (an opaque structure.) **
  • The major token number. **
  • The minor token number. **
  • An option argument of a grammar-specified type. **
** ** Outputs: ** None. */ void RSQuery_Parse( void *yyp, /* The parser */ int yymajor, /* The major token code number */ ParseTOKENTYPE yyminor /* The value for the token */ ParseARG_PDECL /* Optional %extra_argument parameter */ ){ YYMINORTYPE yyminorunion; unsigned int yyact; /* The parser action. */ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) int yyendofinput; /* True if we are at the end of input */ #endif #ifdef YYERRORSYMBOL int yyerrorhit = 0; /* True if yymajor has invoked an error */ #endif yyParser *yypParser; /* The parser */ yypParser = (yyParser*)yyp; assert( yypParser->yytos!=0 ); #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) yyendofinput = (yymajor==0); #endif ParseARG_STORE; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sInput '%s'\n",yyTracePrompt,yyTokenName[yymajor]); } #endif do{ yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); if( yyact <= YY_MAX_SHIFTREDUCE ){ yy_shift(yypParser,yyact,yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif yymajor = YYNOCODE; }else if( yyact <= YY_MAX_REDUCE ){ yy_reduce(yypParser,yyact-YY_MIN_REDUCE); }else{ assert( yyact == YY_ERROR_ACTION ); yyminorunion.yy0 = yyminor; #ifdef YYERRORSYMBOL int yymx; #endif #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); } #endif #ifdef YYERRORSYMBOL /* A syntax error has occurred. ** The response to an error depends upon whether or not the ** grammar defines an error token "ERROR". ** ** This is what we do if the grammar does define ERROR: ** ** * Call the %syntax_error function. ** ** * Begin popping the stack until we enter a state where ** it is legal to shift the error symbol, then shift ** the error symbol. ** ** * Set the error count to three. ** ** * Begin accepting and shifting new tokens. No new error ** processing will occur until three tokens have been ** shifted successfully. ** */ if( yypParser->yyerrcnt<0 ){ yy_syntax_error(yypParser,yymajor,yyminor); } yymx = yypParser->yytos->major; if( yymx==YYERRORSYMBOL || yyerrorhit ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sDiscard input token %s\n", yyTracePrompt,yyTokenName[yymajor]); } #endif yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ while( yypParser->yytos >= yypParser->yystack && yymx != YYERRORSYMBOL && (yyact = yy_find_reduce_action( yypParser->yytos->stateno, YYERRORSYMBOL)) >= YY_MIN_REDUCE ){ yy_pop_parser_stack(yypParser); } if( yypParser->yytos < yypParser->yystack || yymajor==0 ){ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yymajor = YYNOCODE; }else if( yymx!=YYERRORSYMBOL ){ yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); } } yypParser->yyerrcnt = 3; yyerrorhit = 1; #elif defined(YYNOERRORRECOVERY) /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to ** do any kind of error recovery. Instead, simply invoke the syntax ** error routine and continue going as if nothing had happened. ** ** Applications can set this macro (for example inside %include) if ** they intend to abandon the parse upon the first syntax error seen. */ yy_syntax_error(yypParser,yymajor, yyminor); yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yymajor = YYNOCODE; #else /* YYERRORSYMBOL is not defined */ /* This is what we do if the grammar does not define ERROR: ** ** * Report an error message, and throw away the input token. ** ** * If the input token is $, then fail the parse. ** ** As before, subsequent error messages are suppressed until ** three input tokens have been successfully shifted. */ if( yypParser->yyerrcnt<=0 ){ yy_syntax_error(yypParser,yymajor, yyminor); } yypParser->yyerrcnt = 3; yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); if( yyendofinput ){ yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif } yymajor = YYNOCODE; #endif } }while( yymajor!=YYNOCODE && yypParser->yytos>yypParser->yystack ); #ifndef NDEBUG if( yyTraceFILE ){ yyStackEntry *i; char cDiv = '['; fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); cDiv = ' '; } fprintf(yyTraceFILE,"]\n"); } #endif return; }RediSearch-1.2.2/src/query_parser/tokenizer.h000066400000000000000000000015031364126773500212350ustar00rootroot00000000000000#ifndef __QUERY_TOKENIZER_H__ #define __QUERY_TOKENIZER_H__ #include #include "../tokenize.h" /* A query-specific tokenizer, that reads symbols like quots, pipes, etc */ typedef struct { const char *text; size_t len; char *pos; const char *separators; NormalizeFunc normalize; const char **stopwords; } QueryTokenizer; /* Quer tokenizer token type */ // typedef enum { T_WORD, T_QUOTE, T_AND, T_OR, T_END, T_STOPWORD } // QueryTokenType; /* A token in the process of parsing a query. Unlike the document tokenizer, it works iteratively and is not callback based. */ typedef struct { const char *s; int len; int pos; char *field; double numval; // QueryTokenType ; } QueryToken; typedef struct { double num; int inclusive; } RangeNumber; #define QUERY_STOPWORDS DEFAULT_STOPWORDS; #endifRediSearch-1.2.2/src/query_plan.c000066400000000000000000000232431364126773500166610ustar00rootroot00000000000000#include "query_plan.h" #include "config.h" #include "value.h" #include "aggregate/aggregate.h" /****************************************************************************************************** * Query Plan - the actual binding context of the whole execution plan - from filters to * processors ******************************************************************************************************/ #define FETCH_DMD() \ ({ \ if (!dmd) { \ dmd = DocTable_Get(&qex->ctx->spec->docs, r->docId); \ } \ dmd; \ }) static size_t serializeResult(QueryPlan *qex, SearchResult *r, RSSearchFlags flags, RedisModuleCtx *ctx) { size_t count = 0; RSDocumentMetadata *dmd = NULL; if (!(qex->opts.flags & Search_AggregationQuery) && FETCH_DMD()) { size_t klen; const char *k = DMD_KeyPtrLen(dmd, &klen); count += 1; RedisModule_ReplyWithStringBuffer(ctx, k, klen); } if (flags & Search_WithScores) { RedisModule_ReplyWithDouble(ctx, r->score); count++; } if (flags & Search_WithPayloads) { ++count; if (FETCH_DMD() && dmd->payload) { RedisModule_ReplyWithStringBuffer(ctx, dmd->payload->data, dmd->payload->len); } else { RedisModule_ReplyWithNull(ctx); } } if ((flags & Search_WithSortKeys) && FETCH_DMD()) { ++count; const RSValue *sortkey = RSSortingVector_Get(dmd->sortVector, qex->opts.sortBy); if (sortkey) { switch (sortkey->t) { case RSValue_Number: /* Serialize double - by prepending "%" to the number, so the coordinator/client can tell * it's a double and not just a numeric string value */ RedisModule_ReplyWithString( ctx, RedisModule_CreateStringPrintf(ctx, "#%.17g", sortkey->numval)); break; case RSValue_String: /* Serialize string - by prepending "$" to it */ RedisModule_ReplyWithString(ctx, RedisModule_CreateStringPrintf(ctx, "$%s", sortkey->strval)); break; case RSValue_RedisString: RedisModule_ReplyWithString( ctx, RedisModule_CreateStringPrintf( ctx, "$%s", RedisModule_StringPtrLen(sortkey->rstrval, NULL))); break; default: // NIL, or any other type: RedisModule_ReplyWithNull(ctx); } } else { RedisModule_ReplyWithNull(ctx); } } if (!(flags & Search_NoContent)) { count++; size_t fieldCount = r->fields ? r->fields->len : 0; RedisModule_ReplyWithArray(ctx, fieldCount * 2); for (int i = 0; i < fieldCount; i++) { RedisModule_ReplyWithStringBuffer(ctx, r->fields->fields[i].key, strlen(r->fields->fields[i].key)); RSValue_SendReply(ctx, RSFieldMap_Item(r->fields, i)); } } return count; } /** * Returns true if the query has timed out and the user has requested * that we do not drain partial results. */ #define HAS_TIMEOUT_FAILURE(qex) \ ((qex)->execCtx.state == QPState_TimedOut && (qex)->opts.timeoutPolicy == TimeoutPolicy_Fail) static void Query_SerializeResults(QueryPlan *qex, RedisModuleCtx *output) { int rc; int count = 0; // this just means it's a cursored request const int isCursor = qex->opts.flags & Search_IsCursor; // this means this is the first cursor call const int firstCursor = qex->execCtx.totalResults == 0; size_t limit = 0, nrows = 0; if (isCursor) { if ((limit = qex->opts.chunksize) == 0) { /* Always set limit if we're a cursor */ limit = -1; } /* Reset per-chunk variables */ qex->pause = 0; qex->count = 0; qex->outputFlags = 0; } do { SearchResult r = SEARCH_RESULT_INIT; rc = ResultProcessor_Next(qex->rootProcessor, &r, 1); if (rc == RS_RESULT_EOF) { qex->outputFlags |= QP_OUTPUT_FLAG_DONE; break; } if (HAS_TIMEOUT_FAILURE(qex)) { RSFieldMap_Free(r.fields); qex->outputFlags |= QP_OUTPUT_FLAG_DONE; break; } // First result! if (count == 0) { RedisModule_ReplyWithArray(output, REDISMODULE_POSTPONED_ARRAY_LEN); // call pre hook if needed if (qex->preHook.callback && firstCursor) { count += qex->preHook.callback(output, &qex->execCtx, qex->preHook.privdata); } RedisModule_ReplyWithLongLong(output, ResultProcessor_Total(qex->rootProcessor)); count++; } count += serializeResult(qex, &r, qex->opts.flags, output); // IndexResult_Free(r.indexResult); RSFieldMap_Free(r.fields); r.fields = NULL; if (limit) { if (++nrows >= limit || qex->pause) { break; } } } while (1); if (count == 0) { if (HAS_TIMEOUT_FAILURE(qex)) { RedisModule_ReplyWithError(output, "Command timed out"); qex->outputFlags |= QP_OUTPUT_FLAG_ERROR; return; } RedisModule_ReplyWithArray(output, REDISMODULE_POSTPONED_ARRAY_LEN); RedisModule_ReplyWithLongLong(output, ResultProcessor_Total(qex->rootProcessor)); count++; } if (qex->postHook.callback && firstCursor) { count += qex->postHook.callback(output, &qex->execCtx, qex->postHook.privdata); } RedisModule_ReplySetArrayLength(output, count); } /* A callback called when we regain concurrent execution context, and the index spec key is * reopened. We protect against the case that the spec has been deleted during query execution */ void Query_OnReopen(RedisModuleKey *k, void *privdata) { IndexSpec *sp = RedisModule_ModuleTypeGetValue(k); QueryPlan *q = privdata; // If we don't have a spec or key - we abort the query if (k == NULL || sp == NULL) { q->execCtx.state = QPState_Aborted; q->ctx->spec = NULL; return; } // The spec might have changed while we were sleeping - for example a realloc of the doc table q->ctx->spec = sp; // FIXME: Per-query!! if (RSGlobalConfig.queryTimeoutMS > 0) { // Check the elapsed processing time static struct timespec now; clock_gettime(CLOCK_MONOTONIC_RAW, &now); long long durationNS = (long long)1000000000 * (now.tv_sec - q->execCtx.startTime.tv_sec) + (now.tv_nsec - q->execCtx.startTime.tv_nsec); // printf("Elapsed: %zdms\n", durationNS / 1000000); // Abort on timeout if (durationNS > q->opts.timeoutMS * 1000000) { if (q->opts.flags & Search_IsCursor) { q->pause = 1; } else { q->execCtx.state = QPState_TimedOut; } } } // q->docTable = &sp->docs; } void QueryPlan_Free(QueryPlan *plan) { if (plan->rootProcessor) { ResultProcessor_Free(plan->rootProcessor); } if (plan->rootFilter) { plan->rootFilter->Free(plan->rootFilter); } if (plan->conc) { ConcurrentSearchCtx_Free(plan->conc); free(plan->conc); } if (plan->preHook.privdata) { if (plan->preHook.free) plan->preHook.free(plan->preHook.privdata); } if (plan->postHook.privdata) { if (plan->postHook.free) plan->postHook.free(plan->postHook.privdata); } free(plan); } /* Evaluate the query, and return 1 on success */ static int queryPlan_EvalQuery(QueryPlan *plan, QueryParseCtx *parsedQuery, RSSearchOptions *opts) { QueryEvalCtx ev = {.docTable = plan->ctx && plan->ctx->spec ? &plan->ctx->spec->docs : NULL, .conc = plan->conc, .numTokens = parsedQuery->numTokens, .tokenId = 1, .sctx = plan->ctx, .opts = opts}; plan->rootFilter = Query_EvalNode(&ev, parsedQuery->root); return plan->rootFilter ? 1 : 0; } QueryPlan *Query_BuildPlan(RedisSearchCtx *ctx, QueryParseCtx *parsedQuery, RSSearchOptions *opts, ProcessorChainBuilder pcb, void *chainBuilderContext, char **err) { QueryPlan *plan = calloc(1, sizeof(*plan)); plan->ctx = ctx; plan->conc = opts->concurrentMode ? malloc(sizeof(*plan->conc)) : NULL; plan->opts = opts ? *opts : RS_DEFAULT_SEARCHOPTS; if (plan->opts.timeoutMS == 0) { plan->opts.timeoutMS = RSGlobalConfig.queryTimeoutMS; } if (plan->opts.timeoutPolicy == TimeoutPolicy_Default) { plan->opts.timeoutPolicy = RSGlobalConfig.timeoutPolicy; } plan->execCtx = (QueryProcessingCtx){ .errorString = NULL, .minScore = 0, .totalResults = 0, .state = QPState_Running, .sctx = plan->ctx, .conc = plan->conc, }; clock_gettime(CLOCK_MONOTONIC_RAW, &plan->execCtx.startTime); if (plan->conc) { ConcurrentSearchCtx_Init(ctx->redisCtx, plan->conc); if (plan->ctx->key) { ConcurrentSearch_AddKey(plan->conc, plan->ctx->key, REDISMODULE_READ, plan->ctx->keyName, Query_OnReopen, plan, NULL, ConcurrentKey_SharedKeyString); } } if (parsedQuery && !queryPlan_EvalQuery(plan, parsedQuery, opts)) { QueryPlan_Free(plan); return NULL; } plan->execCtx.rootFilter = plan->rootFilter; plan->rootProcessor = pcb(plan, chainBuilderContext, err); if (!plan->rootProcessor) { QueryPlan_Free(plan); return NULL; } return plan; } void QueryPlan_Run(QueryPlan *plan, RedisModuleCtx *outputCtx) { Query_SerializeResults(plan, outputCtx); } void QueryPlan_SetHook(QueryPlan *plan, QueryPlanHookType ht, QueryHookCallback cb, void *privdata, void (*freefn)(void *)) { if (ht == QueryPlanHook_Pre) { plan->preHook = (QueryPlanHook){.callback = cb, .privdata = privdata, .free = freefn}; } else { plan->postHook = (QueryPlanHook){.callback = cb, .privdata = privdata, .free = freefn}; } } RediSearch-1.2.2/src/query_plan.h000066400000000000000000000053511364126773500166660ustar00rootroot00000000000000#ifndef QUERY_PLAN_H_ #define QUERY_PLAN_H_ #include "redisearch.h" #include "search_ctx.h" #include "index_iterator.h" #include "result_processor.h" #include "query.h" /****************************************************************************************************** * Query Plan - the actual binding context of the whole execution plan - from filters to * processors ******************************************************************************************************/ /** Indicates that all rows have been returned and no further chunks will follow */ #define QP_OUTPUT_FLAG_DONE 0x01 /** * Indicates that an error has been written to the output stream. More * information cannot be appended */ #define QP_OUTPUT_FLAG_ERROR 0x02 typedef int (*QueryHookCallback)(RedisModuleCtx *ctx, QueryProcessingCtx *qcx, void *privdata); /* Hooks are callbacks that can be called before or after the query execution */ typedef struct { // The callback should return the number of responses it wrote to the context QueryHookCallback callback; void *privdata; void (*free)(void *p); } QueryPlanHook; typedef enum { QueryPlanHook_Pre, QueryPlanHook_Post } QueryPlanHookType; typedef struct QueryPlan { RedisSearchCtx *ctx; IndexIterator *rootFilter; ResultProcessor *rootProcessor; QueryProcessingCtx execCtx; ConcurrentSearchCtx *conc; RSSearchOptions opts; // right now we allow a single pre and post hook // TODO: Add more QueryPlanHook preHook; QueryPlanHook postHook; /** Whether all rows have been returned */ unsigned outputFlags; /** Whether the query should be paused temporarily */ unsigned pause; /** Deferred count for RM_ReplyArray */ unsigned count; } QueryPlan; /* Set the concurrent mode of the QueryParseCtx. By default it's on, setting here to 0 will turn * it off, resulting in the QueryParseCtx not performing context switches */ void Query_SetConcurrentMode(QueryPlan *q, int concurrent); typedef ResultProcessor *(*ProcessorChainBuilder)(QueryPlan *plan, void *privdata, char **err); /* Build the processor chain of the QueryParseCtx, returning the root processor */ QueryPlan *Query_BuildPlan(RedisSearchCtx *ctx, QueryParseCtx *parsedQuery, RSSearchOptions *opts, ProcessorChainBuilder pcb, void *chainBuilderContext, char **err); ResultProcessor *Query_BuildProcessorChain(QueryPlan *q, void *privdata, char **err); void QueryPlan_SetHook(QueryPlan *plan, QueryPlanHookType ht, QueryHookCallback cb, void *privdata, void (*free)(void *)); /** Run the query plan, */ void QueryPlan_Run(QueryPlan *plan, RedisModuleCtx *outputCtx); void QueryPlan_Free(QueryPlan *plan); #define QueryPlan_HasError(plan) ((plan)->execCtx.state != QueryState_OK) #endifRediSearch-1.2.2/src/redis.conf000066400000000000000000000000331364126773500163030ustar00rootroot00000000000000loadmodule ./redisearch.so RediSearch-1.2.2/src/redis_index.c000066400000000000000000000376001364126773500170010ustar00rootroot00000000000000#include "redis_index.h" #include "doc_table.h" #include "redismodule.h" #include "inverted_index.h" #include "rmutil/strings.h" #include "rmutil/util.h" #include "util/logging.h" #include "util/misc.h" #include "tag_index.h" #include "rmalloc.h" #include RedisModuleType *InvertedIndexType; void *InvertedIndex_RdbLoad(RedisModuleIO *rdb, int encver) { if (encver > INVERTED_INDEX_ENCVER) { return NULL; } InvertedIndex *idx = NewInvertedIndex(RedisModule_LoadUnsigned(rdb), 0); // If the data was encoded with a version that did not include the store numeric / store freqs // options - we force adding StoreFreqs. if (encver <= INVERTED_INDEX_NOFREQFLAG_VER) { idx->flags |= Index_StoreFreqs; } idx->lastId = RedisModule_LoadUnsigned(rdb); idx->numDocs = RedisModule_LoadUnsigned(rdb); idx->size = RedisModule_LoadUnsigned(rdb); idx->blocks = rm_calloc(idx->size, sizeof(IndexBlock)); for (uint32_t i = 0; i < idx->size; i++) { IndexBlock *blk = &idx->blocks[i]; blk->firstId = RedisModule_LoadUnsigned(rdb); blk->lastId = RedisModule_LoadUnsigned(rdb); blk->numDocs = RedisModule_LoadUnsigned(rdb); size_t cap; char *data = RedisModule_LoadStringBuffer(rdb, &cap); blk->data = Buffer_Wrap(cap > 0 ? data : NULL, cap); blk->data->offset = cap; // if we read a buffer of 0 bytes we still read 1 byte from the RDB that needs to be freed if (!cap && data) RedisModule_Free(data); } return idx; } void InvertedIndex_RdbSave(RedisModuleIO *rdb, void *value) { InvertedIndex *idx = value; RedisModule_SaveUnsigned(rdb, idx->flags); RedisModule_SaveUnsigned(rdb, idx->lastId); RedisModule_SaveUnsigned(rdb, idx->numDocs); RedisModule_SaveUnsigned(rdb, idx->size); for (uint32_t i = 0; i < idx->size; i++) { IndexBlock *blk = &idx->blocks[i]; RedisModule_SaveUnsigned(rdb, blk->firstId); RedisModule_SaveUnsigned(rdb, blk->lastId); RedisModule_SaveUnsigned(rdb, blk->numDocs); RedisModule_SaveStringBuffer(rdb, blk->data->data ? blk->data->data : "", blk->data->offset); } } void InvertedIndex_Digest(RedisModuleDigest *digest, void *value) { } unsigned long InvertedIndex_MemUsage(const void *value) { const InvertedIndex *idx = value; unsigned long ret = sizeof(InvertedIndex); for (size_t i = 0; i < idx->size; i++) { ret += sizeof(IndexBlock); ret += sizeof(Buffer); ret += Buffer_Offset(idx->blocks[i].data); } return ret; } int InvertedIndex_RegisterType(RedisModuleCtx *ctx) { RedisModuleTypeMethods tm = {.version = REDISMODULE_TYPE_METHOD_VERSION, .rdb_load = InvertedIndex_RdbLoad, .rdb_save = InvertedIndex_RdbSave, .aof_rewrite = GenericAofRewrite_DisabledHandler, .mem_usage = InvertedIndex_MemUsage, .free = InvertedIndex_Free}; InvertedIndexType = RedisModule_CreateDataType(ctx, "ft_invidx", INVERTED_INDEX_ENCVER, &tm); if (InvertedIndexType == NULL) { RedisModule_Log(ctx, "error", "Could not create inverted index type"); return REDISMODULE_ERR; } return REDISMODULE_OK; } /** * Format redis key for a term. * TODO: Add index name to it */ RedisModuleString *fmtRedisTermKey(RedisSearchCtx *ctx, const char *term, size_t len) { char buf_s[1024] = {"ft:"}; size_t offset = 3; size_t nameLen = strlen(ctx->spec->name); char *buf, *bufDyn = NULL; if (nameLen + len + 10 > sizeof(buf_s)) { buf = bufDyn = calloc(1, nameLen + len + 10); strcpy(buf, "ft:"); } else { buf = buf_s; } memcpy(buf + offset, ctx->spec->name, nameLen); offset += nameLen; buf[offset++] = '/'; memcpy(buf + offset, term, len); offset += len; RedisModuleString *ret = RedisModule_CreateString(ctx->redisCtx, buf, offset); free(bufDyn); return ret; } RedisModuleString *fmtRedisSkipIndexKey(RedisSearchCtx *ctx, const char *term, size_t len) { return RedisModule_CreateStringPrintf(ctx->redisCtx, SKIPINDEX_KEY_FORMAT, ctx->spec->name, len, term); } RedisModuleString *fmtRedisScoreIndexKey(RedisSearchCtx *ctx, const char *term, size_t len) { return RedisModule_CreateStringPrintf(ctx->redisCtx, SCOREINDEX_KEY_FORMAT, ctx->spec->name, len, term); } RedisSearchCtx *NewSearchCtxC(RedisModuleCtx *ctx, const char *indexName) { RedisModuleString *keyName = RedisModule_CreateStringPrintf(ctx, INDEX_SPEC_KEY_FMT, indexName); RedisModuleKey *k = RedisModule_OpenKey(ctx, keyName, REDISMODULE_READ); // printf("open key %s: %p\n", RedisModule_StringPtrLen(keyName, NULL), k); // we do not allow empty indexes when loading an existing index if (k == NULL || RedisModule_ModuleTypeGetType(k) != IndexSpecType) { return NULL; } IndexSpec *sp = RedisModule_ModuleTypeGetValue(k); RedisSearchCtx *sctx = rm_malloc(sizeof(*sctx)); *sctx = (RedisSearchCtx){ .spec = sp, .redisCtx = ctx, .key = k, .keyName = keyName, }; return sctx; } RedisSearchCtx *NewSearchCtx(RedisModuleCtx *ctx, RedisModuleString *indexName) { return NewSearchCtxC(ctx, RedisModule_StringPtrLen(indexName, NULL)); } RedisSearchCtx *SearchCtx_Refresh(RedisSearchCtx *sctx, RedisModuleString *keyName) { // First we close the relevant keys we're touching RedisModule_CloseKey(sctx->key); RedisModuleCtx *redisCtx = sctx->redisCtx; SearchCtx_Free(sctx); // now release the global lock RedisModule_ThreadSafeContextUnlock(redisCtx); // try to acquire it again... RedisModule_ThreadSafeContextLock(redisCtx); // reopen the context - it might have gone away! return NewSearchCtx(redisCtx, keyName); } RedisSearchCtx *NewSearchCtxDefault(RedisModuleCtx *ctx) { RedisSearchCtx *sctx = rm_malloc(sizeof(*sctx)); *sctx = (RedisSearchCtx){.redisCtx = ctx}; return sctx; } void SearchCtx_Free(RedisSearchCtx *sctx) { rm_free(sctx); } /* * Select a random term from the index that matches the index prefix and inveted key format. * It tries RANDOMKEY 10 times and returns NULL if it can't find anything. */ const char *Redis_SelectRandomTermByIndex(RedisSearchCtx *ctx, size_t *tlen) { RedisModuleString *pf = fmtRedisTermKey(ctx, "", 0); size_t pflen; const char *prefix = RedisModule_StringPtrLen(pf, &pflen); for (int i = 0; i < 10; i++) { RedisModuleCallReply *rep = RedisModule_Call(ctx->redisCtx, "RANDOMKEY", ""); if (rep == NULL || RedisModule_CallReplyType(rep) != REDISMODULE_REPLY_STRING) { break; } // get the key and see if it matches the prefix size_t len; const char *kstr = RedisModule_CallReplyStringPtr(rep, &len); if (!strncmp(kstr, prefix, pflen)) { *tlen = len - pflen; return kstr + pflen; } } *tlen = 0; return NULL; } const char *Redis_SelectRandomTerm(RedisSearchCtx *ctx, size_t *tlen) { for (int i = 0; i < 5; i++) { RedisModuleCallReply *rep = RedisModule_Call(ctx->redisCtx, "RANDOMKEY", ""); if (rep == NULL || RedisModule_CallReplyType(rep) != REDISMODULE_REPLY_STRING) { break; } // get the key and see if it matches the prefix size_t len; RedisModuleString *krstr = RedisModule_CreateStringFromCallReply(rep); char *kstr = (char *)RedisModule_StringPtrLen(krstr, &len); if (!strncmp(kstr, TERM_KEY_PREFIX, strlen(TERM_KEY_PREFIX))) { // check to see that the key is indeed an inverted index record RedisModuleKey *k = RedisModule_OpenKey(ctx->redisCtx, krstr, REDISMODULE_READ); if (k == NULL || (RedisModule_KeyType(k) != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(k) != InvertedIndexType)) { continue; } RedisModule_CloseKey(k); size_t offset = strlen(TERM_KEY_PREFIX); char *idx = kstr + offset; while (offset < len && kstr[offset] != '/') { offset++; } if (offset < len) { kstr[offset++] = '\0'; } char *term = kstr + offset; *tlen = len - offset; // printf("Found index %s and term %sm len %zd\n", idx, term, *tlen); IndexSpec *sp = IndexSpec_Load(ctx->redisCtx, idx, 1); // printf("Spec: %p\n", sp); if (sp == NULL) { continue; } ctx->spec = sp; return term; } } return NULL; } InvertedIndex *Redis_OpenInvertedIndexEx(RedisSearchCtx *ctx, const char *term, size_t len, int write, RedisModuleKey **keyp) { RedisModuleString *termKey = fmtRedisTermKey(ctx, term, len); RedisModuleKey *k = RedisModule_OpenKey(ctx->redisCtx, termKey, REDISMODULE_READ | (write ? REDISMODULE_WRITE : 0)); RedisModule_FreeString(ctx->redisCtx, termKey); InvertedIndex *idx = NULL; // check that the key is empty if (k == NULL) { return NULL; } int kType = RedisModule_KeyType(k); if (kType == REDISMODULE_KEYTYPE_EMPTY) { if (write) { idx = NewInvertedIndex(ctx->spec->flags, 1); RedisModule_ModuleTypeSetValue(k, InvertedIndexType, idx); } } else if (kType == REDISMODULE_KEYTYPE_MODULE && RedisModule_ModuleTypeGetType(k) == InvertedIndexType) { idx = RedisModule_ModuleTypeGetValue(k); } if (idx == NULL) { RedisModule_CloseKey(k); return NULL; } else { if (keyp) { *keyp = k; } return idx; } } IndexReader *Redis_OpenReader(RedisSearchCtx *ctx, RSQueryTerm *term, DocTable *dt, int singleWordMode, t_fieldMask fieldMask, ConcurrentSearchCtx *csx, double weight) { RedisModuleString *termKey = fmtRedisTermKey(ctx, term->str, term->len); RedisModuleKey *k = RedisModule_OpenKey(ctx->redisCtx, termKey, REDISMODULE_READ); // we do not allow empty indexes when loading an existing index if (k == NULL || RedisModule_KeyType(k) == REDISMODULE_KEYTYPE_EMPTY || RedisModule_ModuleTypeGetType(k) != InvertedIndexType) { RedisModule_FreeString(ctx->redisCtx, termKey); return NULL; } InvertedIndex *idx = RedisModule_ModuleTypeGetValue(k); IndexReader *ret = NewTermIndexReader(idx, dt, fieldMask, term, weight); if (csx) { ConcurrentSearch_AddKey(csx, k, REDISMODULE_READ, termKey, IndexReader_OnReopen, ret, NULL, ConcurrentKey_SharedNothing); } return ret; } int Redis_LoadDocument(RedisSearchCtx *ctx, RedisModuleString *key, Document *doc) { doc->numFields = 0; doc->fields = NULL; RedisModuleCallReply *rep = RedisModule_Call(ctx->redisCtx, "HGETALL", "s", key); if (rep == NULL || RedisModule_CallReplyType(rep) != REDISMODULE_REPLY_ARRAY) { return REDISMODULE_ERR; } size_t len = RedisModule_CallReplyLength(rep); // Zero means the document does not exist in redis if (len == 0) { return REDISMODULE_ERR; } doc->fields = calloc(len / 2, sizeof(DocumentField)); doc->numFields = len / 2; int n = 0; RedisModuleCallReply *k, *v; for (int i = 0; i < len; i += 2, ++n) { k = RedisModule_CallReplyArrayElement(rep, i); v = RedisModule_CallReplyArrayElement(rep, i + 1); doc->fields[n].name = RedisModule_StringPtrLen(RedisModule_CreateStringFromCallReply(k), NULL); doc->fields[n].text = RedisModule_CreateStringFromCallReply(v); } return REDISMODULE_OK; } int Redis_LoadDocumentEx(RedisSearchCtx *ctx, RedisModuleString *key, const char **fields, size_t nfields, Document *doc, RedisModuleKey **rkeyp) { RedisModuleKey *rkeyp_s = NULL; if (!rkeyp) { rkeyp = &rkeyp_s; } *rkeyp = NULL; if (!fields) { return Redis_LoadDocument(ctx, key, doc); } // Get the key itself *rkeyp = RedisModule_OpenKey(ctx->redisCtx, key, REDISMODULE_READ); if (*rkeyp == NULL) { return REDISMODULE_ERR; } if (RedisModule_KeyType(*rkeyp) != REDISMODULE_KEYTYPE_HASH) { RedisModule_CloseKey(*rkeyp); return REDISMODULE_ERR; } doc->fields = malloc(sizeof(*doc->fields) * nfields); for (size_t ii = 0; ii < nfields; ++ii) { int rv = RedisModule_HashGet(*rkeyp, REDISMODULE_HASH_CFIELDS, fields[ii], &doc->fields[ii].text, NULL); if (rv == REDISMODULE_OK) { doc->numFields++; doc->fields[ii].name = fields[ii]; } } return REDISMODULE_OK; } int Redis_ScanKeys(RedisModuleCtx *ctx, const char *prefix, ScanFunc f, void *opaque) { long long ptr = 0; int num = 0; do { RedisModuleString *sptr = RedisModule_CreateStringFromLongLong(ctx, ptr); RedisModuleCallReply *r = RedisModule_Call(ctx, "SCAN", "scccc", sptr, "MATCH", prefix, "COUNT", "100"); RedisModule_FreeString(ctx, sptr); if (r == NULL || RedisModule_CallReplyType(r) == REDISMODULE_REPLY_ERROR) { return num; } if (RedisModule_CallReplyLength(r) < 1) { break; } sptr = RedisModule_CreateStringFromCallReply(RedisModule_CallReplyArrayElement(r, 0)); RedisModule_StringToLongLong(sptr, &ptr); RedisModule_FreeString(ctx, sptr); // printf("ptr: %s %lld\n", // RedisModule_CallReplyStringPtr(RedisModule_CallReplyArrayElement(r, 0), // NULL), ptr); if (RedisModule_CallReplyLength(r) == 2) { RedisModuleCallReply *keys = RedisModule_CallReplyArrayElement(r, 1); size_t nks = RedisModule_CallReplyLength(keys); for (size_t i = 0; i < nks; i++) { RedisModuleString *kn = RedisModule_CreateStringFromCallReply(RedisModule_CallReplyArrayElement(keys, i)); if (f(ctx, kn, opaque) != REDISMODULE_OK) goto end; // RedisModule_FreeString(ctx, kn); if (++num % 10000 == 0) { LG_DEBUG("Scanned %d keys", num); } } // RedisModule_FreeCallReply(keys); } RedisModule_FreeCallReply(r); } while (ptr); end: return num; } int Redis_DropScanHandler(RedisModuleCtx *ctx, RedisModuleString *kn, void *opaque) { // extract the term from the key RedisSearchCtx *sctx = opaque; RedisModuleString *pf = fmtRedisTermKey(sctx, "", 0); size_t pflen, len; RedisModule_StringPtrLen(pf, &pflen); char *k = (char *)RedisModule_StringPtrLen(kn, &len); k += pflen; // char *term = strndup(k, len - pflen); RedisModuleString *sck = fmtRedisScoreIndexKey(sctx, k, len - pflen); RedisModuleString *sik = fmtRedisSkipIndexKey(sctx, k, len - pflen); RedisModule_Call(ctx, "DEL", "sss", kn, sck, sik); RedisModule_FreeString(ctx, sck); RedisModule_FreeString(ctx, sik); // free(term); return REDISMODULE_OK; } static int Redis_DeleteKey(RedisModuleCtx *ctx, RedisModuleString *s) { RedisModuleKey *k = RedisModule_OpenKey(ctx, s, REDISMODULE_WRITE); if (k != NULL) { RedisModule_DeleteKey(k); RedisModule_CloseKey(k); return 1; } return 0; } int Redis_DropIndex(RedisSearchCtx *ctx, int deleteDocuments) { if (deleteDocuments) { DocTable *dt = &ctx->spec->docs; DocTable_ForEach(dt, Redis_DeleteKey(ctx->redisCtx, DMD_CreateKeyString(dmd, ctx->redisCtx))); } // Delete any dangling term keys RedisModuleString *pf = fmtRedisTermKey(ctx, "*", 1); const char *prefix = RedisModule_StringPtrLen(pf, NULL); Redis_ScanKeys(ctx->redisCtx, prefix, Redis_DropScanHandler, ctx); // Do the same with geo keys pf = RedisModule_CreateStringPrintf(ctx->redisCtx, GEOINDEX_KEY_FMT, ctx->spec->name, "*"); prefix = RedisModule_StringPtrLen(pf, NULL); Redis_ScanKeys(ctx->redisCtx, prefix, Redis_DropScanHandler, ctx); // Delete the numeric and tag indexes which reside on separate keys for (size_t i = 0; i < ctx->spec->numFields; i++) { const FieldSpec *spec = ctx->spec->fields + i; if (spec->type == FIELD_NUMERIC) { Redis_DeleteKey(ctx->redisCtx, fmtRedisNumericIndexKey(ctx, spec->name)); } else if (spec->type == FIELD_TAG) { Redis_DeleteKey(ctx->redisCtx, TagIndex_FormatName(ctx, spec->name)); } } // Delete the index spec int deleted = Redis_DeleteKey( ctx->redisCtx, RedisModule_CreateStringPrintf(ctx->redisCtx, INDEX_SPEC_KEY_FMT, ctx->spec->name)); return deleted ? REDISMODULE_OK : REDISMODULE_ERR; } RediSearch-1.2.2/src/redis_index.h000066400000000000000000000057721364126773500170130ustar00rootroot00000000000000#ifndef __REDIS_INDEX__ #define __REDIS_INDEX__ #include "document.h" #include "index.h" #include "inverted_index.h" #include "search_ctx.h" #include "concurrent_ctx.h" #include "spec.h" /* Open an inverted index reader on a redis DMA string, for a specific term. * If singleWordMode is set to 1, we do not load the skip index, only the score index */ IndexReader *Redis_OpenReader(RedisSearchCtx *ctx, RSQueryTerm *term, DocTable *dt, int singleWordMode, t_fieldMask fieldMask, ConcurrentSearchCtx *csx, double weight); InvertedIndex *Redis_OpenInvertedIndexEx(RedisSearchCtx *ctx, const char *term, size_t len, int write, RedisModuleKey **keyp); #define Redis_OpenInvertedIndex(ctx, term, len, isWrite) \ Redis_OpenInvertedIndexEx(ctx, term, len, isWrite, NULL) void Redis_CloseReader(IndexReader *r); /* * Select a random term from the index that matches the index prefix and inveted key format. * It tries RANDOMKEY 10 times and returns NULL if it can't find anything. */ const char *Redis_SelectRandomTerm(RedisSearchCtx *ctx, size_t *tlen); #define TERM_KEY_FORMAT "ft:%s/%.*s" #define TERM_KEY_PREFIX "ft:" #define SKIPINDEX_KEY_FORMAT "si:%s/%.*s" #define SCOREINDEX_KEY_FORMAT "ss:%s/%.*s" #define INVERTED_INDEX_ENCVER 1 #define INVERTED_INDEX_NOFREQFLAG_VER 0 typedef int (*ScanFunc)(RedisModuleCtx *ctx, RedisModuleString *keyName, void *opaque); /* Scan the keyspace with MATCH for a prefix, and call ScanFunc for each key found */ int Redis_ScanKeys(RedisModuleCtx *ctx, const char *prefix, ScanFunc f, void *opaque); /* Optimize the buffers of a speicif term hit */ int Redis_OptimizeScanHandler(RedisModuleCtx *ctx, RedisModuleString *kn, void *opaque); /* Drop the index and all the associated keys. * * If deleteDocuments is non zero, we will delete the saved documents (if they exist). * Only set this if there are no other indexes in the same redis instance. */ int Redis_DropIndex(RedisSearchCtx *ctx, int deleteDocuments); /* Drop all the index's internal keys using this scan handler */ int Redis_DropScanHandler(RedisModuleCtx *ctx, RedisModuleString *kn, void *opaque); /* Collect memory stas on the index */ int Redis_StatsScanHandler(RedisModuleCtx *ctx, RedisModuleString *kn, void *opaque); /** * Format redis key for a term. * TODO: Add index name to it */ RedisModuleString *fmtRedisTermKey(RedisSearchCtx *ctx, const char *term, size_t len); RedisModuleString *fmtRedisSkipIndexKey(RedisSearchCtx *ctx, const char *term, size_t len); RedisModuleString *fmtRedisNumericIndexKey(RedisSearchCtx *ctx, const char *field); extern RedisModuleType *InvertedIndexType; void InvertedIndex_Free(void *idx); void *InvertedIndex_RdbLoad(RedisModuleIO *rdb, int encver); void InvertedIndex_RdbSave(RedisModuleIO *rdb, void *value); void InvertedIndex_Digest(RedisModuleDigest *digest, void *value); int InvertedIndex_RegisterType(RedisModuleCtx *ctx); unsigned long InvertedIndex_MemUsage(const void *value); #endifRediSearch-1.2.2/src/redisearch.h000066400000000000000000000261021364126773500166150ustar00rootroot00000000000000#ifndef REDISEARCH_H__ #define REDISEARCH_H__ #include #include typedef uint64_t t_docId; typedef uint64_t t_offset; // used to represent the id of a single field. // to produce a field mask we calculate 2^fieldId typedef uint16_t t_fieldId; #if defined(__x86_64__) && !defined(RS_NO_U128) /* 64 bit architectures use 128 bit field masks and up to 128 fields */ typedef __uint128_t t_fieldMask; #define RS_FIELDMASK_ALL (((__uint128_t)1 << 127) - (__uint128_t)1 + ((__uint128_t)1 << 127)) #else /* 32 bit architectures use 64 bits and 64 fields only */ typedef uint64_t t_fieldMask; #define RS_FIELDMASK_ALL 0xFFFFFFFFFFFFFFFF #endif struct RSSortingVector; #define REDISEARCH_ERR 1 #define REDISEARCH_OK 0 /* A payload object is set either by a query expander or by the user, and can be used to process * scores. For examples, it can be a feature vector that is then compared to a feature vector * extracted from each result or document */ typedef struct { char *data; size_t len; } RSPayload; /* Internally used document flags */ typedef enum { Document_DefaultFlags = 0x00, Document_Deleted = 0x01, Document_HasPayload = 0x02, Document_HasSortVector = 0x04, Document_HasOffsetVector = 0x08 } RSDocumentFlags; /* RSDocumentMetadata describes metadata stored about a document in the index (not the document * itself). * * The key is the actual user defined key of the document, not the incremental id. It is used to * convert incremental internal ids to external string keys. * * Score is the original user score as inserted to the index * * Flags is not currently used, but should be used in the future to mark documents as deleted, etc. */ typedef struct RSDocumentMetadata_s { t_docId id; /* The actual key of the document, not the internal incremental id */ char *keyPtr; /* The a-priory document score as given by the user on insertion */ float score; /* The maximum frequency of any term in the index, used to normalize frequencies */ uint32_t maxFreq : 24; /* The total weighted number of tokens in the document, weighted by field weights */ uint32_t len : 24; /* Document flags */ RSDocumentFlags flags : 8; /* Optional user payload */ RSPayload *payload; struct RSSortingVector *sortVector; /* Offsets of all terms in the document (in bytes). Used by highlighter */ struct RSByteOffsets *byteOffsets; uint32_t ref_count; struct RSDocumentMetadata_s *next; struct RSDocumentMetadata_s *prev; } RSDocumentMetadata; /* Forward declaration of the opaque query object */ struct RSQuery; /* Forward declaration of the opaque query node object */ struct RSQueryNode; /* We support up to 30 user given flags for each token, flags 1 and 2 are taken by the engine */ typedef uint32_t RSTokenFlags; /* A token in the query. The expanders receive query tokens and can expand the query with more query * tokens */ typedef struct { /* The token string - which may or may not be NULL terminated */ char *str; /* The token length */ size_t len; /* Is this token an expansion? */ uint8_t expanded : 1; /* Extension set token flags - up to 31 bits */ RSTokenFlags flags : 31; } RSToken; /* RSQueryExpanderCtx is a context given to query expanders, containing callback methods and useful * data */ typedef struct RSQueryExpanderCtx { /* Opaque query object used internally by the engine, and should not be accessed */ struct RSQuery *query; /* Opaque query node object used internally by the engine, and should not be accessed */ struct RSQueryNode **currentNode; /* Private data of the extension, set on extension initialization or during expansion. If a Free * calback is provided, it will be used automatically to free this data */ void *privdata; /* The language of the query. Defaults to "english" */ const char *language; /* ExpandToken allows the user to add an expansion of the token in the query, that will be * union-merged with the given token in query time. str is the expanded string, len is its * length, and flags is a 32 bit flag mask that can be used by the extension to set private * information on the token * */ void (*ExpandToken)(struct RSQueryExpanderCtx *ctx, const char *str, size_t len, RSTokenFlags flags); /* Expand the token with a multi-word phrase, where all terms are intersected. toks is an array * with num its len, each member of it is a null terminated string. If replace is set to 1, we * replace the original token with the new phrase. If exact is 1 the expanded phrase is an exact * match phrase */ void (*ExpandTokenWithPhrase)(struct RSQueryExpanderCtx *ctx, const char **toks, size_t num, RSTokenFlags flags, int replace, int exact); /* SetPayload allows the query expander to set GLOBAL payload on the query (not unique per token) */ void (*SetPayload)(struct RSQueryExpanderCtx *ctx, RSPayload payload); } RSQueryExpanderCtx; /* The signature for a query expander instance */ typedef void (*RSQueryTokenExpander)(RSQueryExpanderCtx *ctx, RSToken *token); /* A free function called after the query expansion phase is over, to release per-query data */ typedef void (*RSFreeFunction)(void *); /* A single term being evaluated in query time */ typedef struct { /* The term string, not necessarily NULL terminated, hence the length is given as well */ char *str; /* The term length */ size_t len; /* Inverse document frequency of the term in the index. See * https://en.wikipedia.org/wiki/Tf%E2%80%93idf */ double idf; /* Each term in the query gets an incremental id */ int id; /* Flags given by the engine or by the query expander */ RSTokenFlags flags; } RSQueryTerm; /************************************** * Scoring Function API **************************************/ /* RS_OFFSETVECTOR_EOF is returned from an RSOffsetIterator when calling next and reaching the end. * When calling the iterator you should check for this return value */ #define RS_OFFSETVECTOR_EOF UINT32_MAX /* RSOffsetVector represents the encoded offsets of a term in a document. You can read the offsets * by iterating over it with RSOffsetVector_Iterate */ typedef struct RSOffsetVector { char *data; uint32_t len; } RSOffsetVector; /* RSOffsetIterator is an interface for iterating offset vectors of aggregate and token records */ typedef struct RSOffsetIterator { void *ctx; uint32_t (*Next)(void *ctx, RSQueryTerm **term); void (*Rewind)(void *ctx); void (*Free)(void *ctx); } RSOffsetIterator; /* RSIndexRecord represents a single record of a document inside a term in the inverted index */ typedef struct { /* The term that brought up this record */ RSQueryTerm *term; /* The encoded offsets in which the term appeared in the document */ RSOffsetVector offsets; } RSTermRecord; /* A virtual record represents a record that doesn't have a term or an aggregate, like numeric * records */ typedef struct { } RSVirtualRecord; typedef struct { double value; } RSNumericRecord; typedef enum { RSResultType_Union = 0x1, RSResultType_Intersection = 0x2, RSResultType_Term = 0x4, RSResultType_Virtual = 0x8, RSResultType_Numeric = 0x10 } RSResultType; #define RS_RESULT_AGGREGATE (RSResultType_Intersection | RSResultType_Union) typedef struct { /* The number of child records */ int numChildren; /* The capacity of the records array. Has no use for extensions */ int childrenCap; /* An array of recods */ struct RSIndexResult **children; // A map of the aggregate type of the underlying results RSResultType typeMask; } RSAggregateResult; #pragma pack(16) typedef struct RSIndexResult { /****************************************************************************** * IMPORTANT: The order of the following 4 variables must remain the same, and all * their type aliases must remain uint32_t. The record is decoded by casting it * to an array of 4 uint32_t integers to avoid redundant memcpy *******************************************************************************/ /* The docId of the result */ t_docId docId; /* the total frequency of all the records in this result */ uint32_t freq; /* The aggregate field mask of all the records in this result */ t_fieldMask fieldMask; /* For term records only. This is used as an optimization, allowing the result to be loaded * directly into memory */ uint32_t offsetsSz; /******************************************************************************* * END OF the "magic 4 uints" section ********************************************************************************/ union { // Aggregate record RSAggregateResult agg; // Term record RSTermRecord term; // virtual record with no values RSVirtualRecord virt; // numeric record with float value RSNumericRecord num; }; RSResultType type; // we mark copied results so we can treat them a bit differently on deletion, and pool them if we // want int isCopy; /* Relative weight for scoring calculations. This is derived from the result's iterator weight */ double weight; } RSIndexResult; #pragma pack() /* Iterate an offset vector. The iterator object is allocated on the heap and needs to be freed */ RSOffsetIterator RSIndexResult_IterateOffsets(RSIndexResult *res); int RSIndexResult_HasOffsets(RSIndexResult *res); int RSIndexResult_IsAggregate(RSIndexResult *r); /* RS_SCORE_FILTEROUT is a special value (-inf) that should be returned by scoring functions in * order to completely filter out results and disregard them in the totals count */ #define RS_SCORE_FILTEROUT (-1.0 / 0.0) typedef struct { size_t numDocs; size_t numTerms; double avgDocLen; } RSIndexStats; /* The context given to a scoring function. It includes the payload set by the user or expander, * the * private data set by the extensionm and callback functions */ typedef struct { /* Private data set by the extension on initialization time, or during scoring */ void *privdata; /* Payload set by the client or by the query expander */ RSPayload payload; /* Index statistics to be used by scoring functions */ RSIndexStats indexStats; /* The GetSlop() calback. Returns the cumulative "slop" or distance between the query terms, * that can be used to factor the result score */ int (*GetSlop)(RSIndexResult *res); } RSScoringFunctionCtx; /* RSScoringFunction is a callback type for query custom scoring function modules */ typedef double (*RSScoringFunction)(RSScoringFunctionCtx *ctx, RSIndexResult *res, RSDocumentMetadata *dmd, double minScore); /* The extension registeration context, containing the callbacks avaliable to the extension for * registering query expanders and scorers. */ typedef struct RSExtensionCtx { int (*RegisterScoringFunction)(const char *alias, RSScoringFunction func, RSFreeFunction ff, void *privdata); int (*RegisterQueryExpander)(const char *alias, RSQueryTokenExpander exp, RSFreeFunction ff, void *privdata); } RSExtensionCtx; /* An extension initialization function */ typedef int (*RSExtensionInitFunc)(RSExtensionCtx *ctx); #endif RediSearch-1.2.2/src/redismodule.h000066400000000000000000001103301364126773500170150ustar00rootroot00000000000000#ifndef REDISMODULE_H #define REDISMODULE_H #include #include #include /* ---------------- Defines common between core and modules --------------- */ /* Error status return values. */ #define REDISMODULE_OK 0 #define REDISMODULE_ERR 1 /* API versions. */ #define REDISMODULE_APIVER_1 1 /* API flags and constants */ #define REDISMODULE_READ (1<<0) #define REDISMODULE_WRITE (1<<1) #define REDISMODULE_LIST_HEAD 0 #define REDISMODULE_LIST_TAIL 1 /* Key types. */ #define REDISMODULE_KEYTYPE_EMPTY 0 #define REDISMODULE_KEYTYPE_STRING 1 #define REDISMODULE_KEYTYPE_LIST 2 #define REDISMODULE_KEYTYPE_HASH 3 #define REDISMODULE_KEYTYPE_SET 4 #define REDISMODULE_KEYTYPE_ZSET 5 #define REDISMODULE_KEYTYPE_MODULE 6 /* Reply types. */ #define REDISMODULE_REPLY_UNKNOWN -1 #define REDISMODULE_REPLY_STRING 0 #define REDISMODULE_REPLY_ERROR 1 #define REDISMODULE_REPLY_INTEGER 2 #define REDISMODULE_REPLY_ARRAY 3 #define REDISMODULE_REPLY_NULL 4 /* Postponed array length. */ #define REDISMODULE_POSTPONED_ARRAY_LEN -1 /* Expire */ #define REDISMODULE_NO_EXPIRE -1 /* Sorted set API flags. */ #define REDISMODULE_ZADD_XX (1<<0) #define REDISMODULE_ZADD_NX (1<<1) #define REDISMODULE_ZADD_ADDED (1<<2) #define REDISMODULE_ZADD_UPDATED (1<<3) #define REDISMODULE_ZADD_NOP (1<<4) /* Hash API flags. */ #define REDISMODULE_HASH_NONE 0 #define REDISMODULE_HASH_NX (1<<0) #define REDISMODULE_HASH_XX (1<<1) #define REDISMODULE_HASH_CFIELDS (1<<2) #define REDISMODULE_HASH_EXISTS (1<<3) /* Context Flags: Info about the current context returned by * RM_GetContextFlags(). */ /* The command is running in the context of a Lua script */ #define REDISMODULE_CTX_FLAGS_LUA (1<<0) /* The command is running inside a Redis transaction */ #define REDISMODULE_CTX_FLAGS_MULTI (1<<1) /* The instance is a master */ #define REDISMODULE_CTX_FLAGS_MASTER (1<<2) /* The instance is a slave */ #define REDISMODULE_CTX_FLAGS_SLAVE (1<<3) /* The instance is read-only (usually meaning it's a slave as well) */ #define REDISMODULE_CTX_FLAGS_READONLY (1<<4) /* The instance is running in cluster mode */ #define REDISMODULE_CTX_FLAGS_CLUSTER (1<<5) /* The instance has AOF enabled */ #define REDISMODULE_CTX_FLAGS_AOF (1<<6) /* The instance has RDB enabled */ #define REDISMODULE_CTX_FLAGS_RDB (1<<7) /* The instance has Maxmemory set */ #define REDISMODULE_CTX_FLAGS_MAXMEMORY (1<<8) /* Maxmemory is set and has an eviction policy that may delete keys */ #define REDISMODULE_CTX_FLAGS_EVICT (1<<9) /* Redis is out of memory according to the maxmemory flag. */ #define REDISMODULE_CTX_FLAGS_OOM (1<<10) /* Less than 25% of memory available according to maxmemory. */ #define REDISMODULE_CTX_FLAGS_OOM_WARNING (1<<11) /* The command was sent over the replication link. */ #define REDISMODULE_CTX_FLAGS_REPLICATED (1<<12) /* Redis is currently loading either from AOF or RDB. */ #define REDISMODULE_CTX_FLAGS_LOADING (1<<13) /* The replica has no link with its master, note that * there is the inverse flag as well: * * REDISMODULE_CTX_FLAGS_REPLICA_IS_ONLINE * * The two flags are exclusive, one or the other can be set. */ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_STALE (1<<14) /* The replica is trying to connect with the master. * (REPL_STATE_CONNECT and REPL_STATE_CONNECTING states) */ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_CONNECTING (1<<15) /* THe replica is receiving an RDB file from its master. */ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_TRANSFERRING (1<<16) /* The replica is online, receiving updates from its master. */ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_ONLINE (1<<17) /* There is currently some background process active. */ #define REDISMODULE_CTX_FLAGS_ACTIVE_CHILD (1<<18) #define REDISMODULE_NOTIFY_GENERIC (1<<2) /* g */ #define REDISMODULE_NOTIFY_STRING (1<<3) /* $ */ #define REDISMODULE_NOTIFY_LIST (1<<4) /* l */ #define REDISMODULE_NOTIFY_SET (1<<5) /* s */ #define REDISMODULE_NOTIFY_HASH (1<<6) /* h */ #define REDISMODULE_NOTIFY_ZSET (1<<7) /* z */ #define REDISMODULE_NOTIFY_EXPIRED (1<<8) /* x */ #define REDISMODULE_NOTIFY_EVICTED (1<<9) /* e */ #define REDISMODULE_NOTIFY_STREAM (1<<10) /* t */ #define REDISMODULE_NOTIFY_ALL (REDISMODULE_NOTIFY_GENERIC | REDISMODULE_NOTIFY_STRING | REDISMODULE_NOTIFY_LIST | REDISMODULE_NOTIFY_SET | REDISMODULE_NOTIFY_HASH | REDISMODULE_NOTIFY_ZSET | REDISMODULE_NOTIFY_EXPIRED | REDISMODULE_NOTIFY_EVICTED | REDISMODULE_NOTIFY_STREAM) /* A */ /* A special pointer that we can use between the core and the module to signal * field deletion, and that is impossible to be a valid pointer. */ #define REDISMODULE_HASH_DELETE ((RedisModuleString*)(long)1) /* Error messages. */ #define REDISMODULE_ERRORMSG_WRONGTYPE "WRONGTYPE Operation against a key holding the wrong kind of value" #define REDISMODULE_POSITIVE_INFINITE (1.0/0.0) #define REDISMODULE_NEGATIVE_INFINITE (-1.0/0.0) /* Cluster API defines. */ #define REDISMODULE_NODE_ID_LEN 40 #define REDISMODULE_NODE_MYSELF (1<<0) #define REDISMODULE_NODE_MASTER (1<<1) #define REDISMODULE_NODE_SLAVE (1<<2) #define REDISMODULE_NODE_PFAIL (1<<3) #define REDISMODULE_NODE_FAIL (1<<4) #define REDISMODULE_NODE_NOFAILOVER (1<<5) #define REDISMODULE_CLUSTER_FLAG_NONE 0 #define REDISMODULE_CLUSTER_FLAG_NO_FAILOVER (1<<1) #define REDISMODULE_CLUSTER_FLAG_NO_REDIRECTION (1<<2) #define REDISMODULE_NOT_USED(V) ((void) V) /* Bit flags for aux_save_triggers and the aux_load and aux_save callbacks */ #define REDISMODULE_AUX_BEFORE_RDB (1<<0) #define REDISMODULE_AUX_AFTER_RDB (1<<1) /* This type represents a timer handle, and is returned when a timer is * registered and used in order to invalidate a timer. It's just a 64 bit * number, because this is how each timer is represented inside the radix tree * of timers that are going to expire, sorted by expire time. */ typedef uint64_t RedisModuleTimerID; /* CommandFilter Flags */ /* Do filter RedisModule_Call() commands initiated by module itself. */ #define REDISMODULE_CMDFILTER_NOSELF (1<<0) /* ------------------------- End of common defines ------------------------ */ #ifndef REDISMODULE_CORE typedef long long mstime_t; /* Incomplete structures for compiler checks but opaque access. */ typedef struct RedisModuleCtx RedisModuleCtx; typedef struct RedisModuleKey RedisModuleKey; typedef struct RedisModuleString RedisModuleString; typedef struct RedisModuleCallReply RedisModuleCallReply; typedef struct RedisModuleIO RedisModuleIO; typedef struct RedisModuleType RedisModuleType; typedef struct RedisModuleDigest RedisModuleDigest; typedef struct RedisModuleBlockedClient RedisModuleBlockedClient; typedef struct RedisModuleClusterInfo RedisModuleClusterInfo; typedef struct RedisModuleDict RedisModuleDict; typedef struct RedisModuleDictIter RedisModuleDictIter; typedef struct RedisModuleCommandFilterCtx RedisModuleCommandFilterCtx; typedef struct RedisModuleCommandFilter RedisModuleCommandFilter; typedef int (*RedisModuleCmdFunc)(RedisModuleCtx *ctx, RedisModuleString **argv, int argc); typedef void (*RedisModuleDisconnectFunc)(RedisModuleCtx *ctx, RedisModuleBlockedClient *bc); typedef int (*RedisModuleNotificationFunc)(RedisModuleCtx *ctx, int type, const char *event, RedisModuleString *key); typedef void *(*RedisModuleTypeLoadFunc)(RedisModuleIO *rdb, int encver); typedef void (*RedisModuleTypeSaveFunc)(RedisModuleIO *rdb, void *value); typedef int (*RedisModuleTypeAuxLoadFunc)(RedisModuleIO *rdb, int encver, int when); typedef void (*RedisModuleTypeAuxSaveFunc)(RedisModuleIO *rdb, int when); typedef void (*RedisModuleTypeRewriteFunc)(RedisModuleIO *aof, RedisModuleString *key, void *value); typedef size_t (*RedisModuleTypeMemUsageFunc)(const void *value); typedef void (*RedisModuleTypeDigestFunc)(RedisModuleDigest *digest, void *value); typedef void (*RedisModuleTypeFreeFunc)(void *value); typedef void (*RedisModuleClusterMessageReceiver)(RedisModuleCtx *ctx, const char *sender_id, uint8_t type, const unsigned char *payload, uint32_t len); typedef void (*RedisModuleTimerProc)(RedisModuleCtx *ctx, void *data); typedef void (*RedisModuleCommandFilterFunc) (RedisModuleCommandFilterCtx *filter); #define REDISMODULE_TYPE_METHOD_VERSION 2 typedef struct RedisModuleTypeMethods { uint64_t version; RedisModuleTypeLoadFunc rdb_load; RedisModuleTypeSaveFunc rdb_save; RedisModuleTypeRewriteFunc aof_rewrite; RedisModuleTypeMemUsageFunc mem_usage; RedisModuleTypeDigestFunc digest; RedisModuleTypeFreeFunc free; RedisModuleTypeAuxLoadFunc aux_load; RedisModuleTypeAuxSaveFunc aux_save; int aux_save_triggers; } RedisModuleTypeMethods; #define REDISMODULE_GET_API(name) \ RedisModule_GetApi("RedisModule_" #name, ((void **)&RedisModule_ ## name)) #define REDISMODULE_API_FUNC(x) (*x) void *REDISMODULE_API_FUNC(RedisModule_Alloc)(size_t bytes) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_Realloc)(void *ptr, size_t bytes) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_Free)(void *ptr) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_Calloc)(size_t nmemb, size_t size) __attribute__((__common__)); char *REDISMODULE_API_FUNC(RedisModule_Strdup)(const char *str) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_GetApi)(const char *, void *) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_CreateCommand)(RedisModuleCtx *ctx, const char *name, RedisModuleCmdFunc cmdfunc, const char *strflags, int firstkey, int lastkey, int keystep) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SetModuleAttribs)(RedisModuleCtx *ctx, const char *name, int ver, int apiver) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_IsModuleNameBusy)(const char *name) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_WrongArity)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithLongLong)(RedisModuleCtx *ctx, long long ll) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_GetSelectedDb)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_SelectDb)(RedisModuleCtx *ctx, int newid) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_OpenKey)(RedisModuleCtx *ctx, RedisModuleString *keyname, int mode) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_CloseKey)(RedisModuleKey *kp) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_KeyType)(RedisModuleKey *kp) __attribute__((__common__)); size_t REDISMODULE_API_FUNC(RedisModule_ValueLength)(RedisModuleKey *kp) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ListPush)(RedisModuleKey *kp, int where, RedisModuleString *ele) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_ListPop)(RedisModuleKey *key, int where) __attribute__((__common__)); RedisModuleCallReply *REDISMODULE_API_FUNC(RedisModule_Call)(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...) __attribute__((__common__)); const char *REDISMODULE_API_FUNC(RedisModule_CallReplyProto)(RedisModuleCallReply *reply, size_t *len) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_FreeCallReply)(RedisModuleCallReply *reply) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_CallReplyType)(RedisModuleCallReply *reply) __attribute__((__common__)); long long REDISMODULE_API_FUNC(RedisModule_CallReplyInteger)(RedisModuleCallReply *reply) __attribute__((__common__)); size_t REDISMODULE_API_FUNC(RedisModule_CallReplyLength)(RedisModuleCallReply *reply) __attribute__((__common__)); RedisModuleCallReply *REDISMODULE_API_FUNC(RedisModule_CallReplyArrayElement)(RedisModuleCallReply *reply, size_t idx) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateString)(RedisModuleCtx *ctx, const char *ptr, size_t len) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringFromLongLong)(RedisModuleCtx *ctx, long long ll) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringFromString)(RedisModuleCtx *ctx, const RedisModuleString *str) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringPrintf)(RedisModuleCtx *ctx, const char *fmt, ...) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_FreeString)(RedisModuleCtx *ctx, RedisModuleString *str) __attribute__((__common__)); const char *REDISMODULE_API_FUNC(RedisModule_StringPtrLen)(const RedisModuleString *str, size_t *len) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithError)(RedisModuleCtx *ctx, const char *err) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithSimpleString)(RedisModuleCtx *ctx, const char *msg) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithArray)(RedisModuleCtx *ctx, long len) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_ReplySetArrayLength)(RedisModuleCtx *ctx, long len) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithStringBuffer)(RedisModuleCtx *ctx, const char *buf, size_t len) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithCString)(RedisModuleCtx *ctx, const char *buf) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithString)(RedisModuleCtx *ctx, RedisModuleString *str) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithNull)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithDouble)(RedisModuleCtx *ctx, double d) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplyWithCallReply)(RedisModuleCtx *ctx, RedisModuleCallReply *reply) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StringToLongLong)(const RedisModuleString *str, long long *ll) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StringToDouble)(const RedisModuleString *str, double *d) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_AutoMemory)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_Replicate)(RedisModuleCtx *ctx, const char *cmdname, const char *fmt, ...) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ReplicateVerbatim)(RedisModuleCtx *ctx) __attribute__((__common__)); const char *REDISMODULE_API_FUNC(RedisModule_CallReplyStringPtr)(RedisModuleCallReply *reply, size_t *len) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CreateStringFromCallReply)(RedisModuleCallReply *reply) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DeleteKey)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_UnlinkKey)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StringSet)(RedisModuleKey *key, RedisModuleString *str) __attribute__((__common__)); char *REDISMODULE_API_FUNC(RedisModule_StringDMA)(RedisModuleKey *key, size_t *len, int mode) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StringTruncate)(RedisModuleKey *key, size_t newlen) __attribute__((__common__)); mstime_t REDISMODULE_API_FUNC(RedisModule_GetExpire)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_SetExpire)(RedisModuleKey *key, mstime_t expire) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetAdd)(RedisModuleKey *key, double score, RedisModuleString *ele, int *flagsptr) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetIncrby)(RedisModuleKey *key, double score, RedisModuleString *ele, int *flagsptr, double *newscore) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetScore)(RedisModuleKey *key, RedisModuleString *ele, double *score) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetRem)(RedisModuleKey *key, RedisModuleString *ele, int *deleted) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_ZsetRangeStop)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetFirstInScoreRange)(RedisModuleKey *key, double min, double max, int minex, int maxex) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetLastInScoreRange)(RedisModuleKey *key, double min, double max, int minex, int maxex) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetFirstInLexRange)(RedisModuleKey *key, RedisModuleString *min, RedisModuleString *max) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetLastInLexRange)(RedisModuleKey *key, RedisModuleString *min, RedisModuleString *max) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_ZsetRangeCurrentElement)(RedisModuleKey *key, double *score) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetRangeNext)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetRangePrev)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ZsetRangeEndReached)(RedisModuleKey *key) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_HashSet)(RedisModuleKey *key, int flags, ...) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_HashGet)(RedisModuleKey *key, int flags, ...) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_IsKeysPositionRequest)(RedisModuleCtx *ctx) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_KeyAtPos)(RedisModuleCtx *ctx, int pos) __attribute__((__common__)); unsigned long long REDISMODULE_API_FUNC(RedisModule_GetClientId)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_GetContextFlags)(RedisModuleCtx *ctx) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_PoolAlloc)(RedisModuleCtx *ctx, size_t bytes) __attribute__((__common__)); RedisModuleType *REDISMODULE_API_FUNC(RedisModule_CreateDataType)(RedisModuleCtx *ctx, const char *name, int encver, RedisModuleTypeMethods *typemethods) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ModuleTypeSetValue)(RedisModuleKey *key, RedisModuleType *mt, void *value) __attribute__((__common__)); RedisModuleType *REDISMODULE_API_FUNC(RedisModule_ModuleTypeGetType)(RedisModuleKey *key) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_ModuleTypeGetValue)(RedisModuleKey *key) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SaveUnsigned)(RedisModuleIO *io, uint64_t value) __attribute__((__common__)); uint64_t REDISMODULE_API_FUNC(RedisModule_LoadUnsigned)(RedisModuleIO *io) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SaveSigned)(RedisModuleIO *io, int64_t value) __attribute__((__common__)); int64_t REDISMODULE_API_FUNC(RedisModule_LoadSigned)(RedisModuleIO *io) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_EmitAOF)(RedisModuleIO *io, const char *cmdname, const char *fmt, ...) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SaveString)(RedisModuleIO *io, RedisModuleString *s) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SaveStringBuffer)(RedisModuleIO *io, const char *str, size_t len) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_LoadString)(RedisModuleIO *io) __attribute__((__common__)); char *REDISMODULE_API_FUNC(RedisModule_LoadStringBuffer)(RedisModuleIO *io, size_t *lenptr) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SaveDouble)(RedisModuleIO *io, double value) __attribute__((__common__)); double REDISMODULE_API_FUNC(RedisModule_LoadDouble)(RedisModuleIO *io) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SaveFloat)(RedisModuleIO *io, float value) __attribute__((__common__)); float REDISMODULE_API_FUNC(RedisModule_LoadFloat)(RedisModuleIO *io) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_Log)(RedisModuleCtx *ctx, const char *level, const char *fmt, ...) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_LogIOError)(RedisModuleIO *io, const char *levelstr, const char *fmt, ...) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StringAppendBuffer)(RedisModuleCtx *ctx, RedisModuleString *str, const char *buf, size_t len) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_RetainString)(RedisModuleCtx *ctx, RedisModuleString *str) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StringCompare)(RedisModuleString *a, RedisModuleString *b) __attribute__((__common__)); RedisModuleCtx *REDISMODULE_API_FUNC(RedisModule_GetContextFromIO)(RedisModuleIO *io) __attribute__((__common__)); const RedisModuleString *REDISMODULE_API_FUNC(RedisModule_GetKeyNameFromIO)(RedisModuleIO *io) __attribute__((__common__)); long long REDISMODULE_API_FUNC(RedisModule_Milliseconds)(void) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_DigestAddStringBuffer)(RedisModuleDigest *md, unsigned char *ele, size_t len) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_DigestAddLongLong)(RedisModuleDigest *md, long long ele) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_DigestEndSequence)(RedisModuleDigest *md) __attribute__((__common__)); RedisModuleDict *REDISMODULE_API_FUNC(RedisModule_CreateDict)(RedisModuleCtx *ctx) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_FreeDict)(RedisModuleCtx *ctx, RedisModuleDict *d) __attribute__((__common__)); uint64_t REDISMODULE_API_FUNC(RedisModule_DictSize)(RedisModuleDict *d) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictSetC)(RedisModuleDict *d, void *key, size_t keylen, void *ptr) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictReplaceC)(RedisModuleDict *d, void *key, size_t keylen, void *ptr) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictSet)(RedisModuleDict *d, RedisModuleString *key, void *ptr) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictReplace)(RedisModuleDict *d, RedisModuleString *key, void *ptr) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_DictGetC)(RedisModuleDict *d, void *key, size_t keylen, int *nokey) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_DictGet)(RedisModuleDict *d, RedisModuleString *key, int *nokey) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictDelC)(RedisModuleDict *d, void *key, size_t keylen, void *oldval) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictDel)(RedisModuleDict *d, RedisModuleString *key, void *oldval) __attribute__((__common__)); RedisModuleDictIter *REDISMODULE_API_FUNC(RedisModule_DictIteratorStartC)(RedisModuleDict *d, const char *op, void *key, size_t keylen) __attribute__((__common__)); RedisModuleDictIter *REDISMODULE_API_FUNC(RedisModule_DictIteratorStart)(RedisModuleDict *d, const char *op, RedisModuleString *key) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_DictIteratorStop)(RedisModuleDictIter *di) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictIteratorReseekC)(RedisModuleDictIter *di, const char *op, void *key, size_t keylen) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictIteratorReseek)(RedisModuleDictIter *di, const char *op, RedisModuleString *key) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_DictNextC)(RedisModuleDictIter *di, size_t *keylen, void **dataptr) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_DictPrevC)(RedisModuleDictIter *di, size_t *keylen, void **dataptr) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_DictNext)(RedisModuleCtx *ctx, RedisModuleDictIter *di, void **dataptr) __attribute__((__common__)); RedisModuleString *REDISMODULE_API_FUNC(RedisModule_DictPrev)(RedisModuleCtx *ctx, RedisModuleDictIter *di, void **dataptr) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictCompareC)(RedisModuleDictIter *di, const char *op, void *key, size_t keylen) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_DictCompare)(RedisModuleDictIter *di, const char *op, RedisModuleString *key) __attribute__((__common__)); /* Experimental APIs */ #ifdef REDISMODULE_EXPERIMENTAL_API #define REDISMODULE_EXPERIMENTAL_API_VERSION 3 RedisModuleBlockedClient *REDISMODULE_API_FUNC(RedisModule_BlockClient)(RedisModuleCtx *ctx, RedisModuleCmdFunc reply_callback, RedisModuleCmdFunc timeout_callback, void (*free_privdata)(RedisModuleCtx*,void*), long long timeout_ms) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_UnblockClient)(RedisModuleBlockedClient *bc, void *privdata) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_IsBlockedReplyRequest)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_IsBlockedTimeoutRequest)(RedisModuleCtx *ctx) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_GetBlockedClientPrivateData)(RedisModuleCtx *ctx) __attribute__((__common__)); RedisModuleBlockedClient *REDISMODULE_API_FUNC(RedisModule_GetBlockedClientHandle)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_AbortBlock)(RedisModuleBlockedClient *bc) __attribute__((__common__)); RedisModuleCtx *REDISMODULE_API_FUNC(RedisModule_GetThreadSafeContext)(RedisModuleBlockedClient *bc) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_FreeThreadSafeContext)(RedisModuleCtx *ctx) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_ThreadSafeContextLock)(RedisModuleCtx *ctx) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_ThreadSafeContextUnlock)(RedisModuleCtx *ctx) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_SubscribeToKeyspaceEvents)(RedisModuleCtx *ctx, int types, RedisModuleNotificationFunc cb) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_BlockedClientDisconnected)(RedisModuleCtx *ctx) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_RegisterClusterMessageReceiver)(RedisModuleCtx *ctx, uint8_t type, RedisModuleClusterMessageReceiver callback) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_SendClusterMessage)(RedisModuleCtx *ctx, char *target_id, uint8_t type, unsigned char *msg, uint32_t len) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_GetClusterNodeInfo)(RedisModuleCtx *ctx, const char *id, char *ip, char *master_id, int *port, int *flags) __attribute__((__common__)); char **REDISMODULE_API_FUNC(RedisModule_GetClusterNodesList)(RedisModuleCtx *ctx, size_t *numnodes) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_FreeClusterNodesList)(char **ids) __attribute__((__common__)); RedisModuleTimerID REDISMODULE_API_FUNC(RedisModule_CreateTimer)(RedisModuleCtx *ctx, mstime_t period, RedisModuleTimerProc callback, void *data) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_StopTimer)(RedisModuleCtx *ctx, RedisModuleTimerID id, void **data) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_GetTimerInfo)(RedisModuleCtx *ctx, RedisModuleTimerID id, uint64_t *remaining, void **data) __attribute__((__common__)); const char *REDISMODULE_API_FUNC(RedisModule_GetMyClusterID)(void) __attribute__((__common__)); size_t REDISMODULE_API_FUNC(RedisModule_GetClusterSize)(void) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_GetRandomBytes)(unsigned char *dst, size_t len) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_GetRandomHexChars)(char *dst, size_t len) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SetDisconnectCallback)(RedisModuleBlockedClient *bc, RedisModuleDisconnectFunc callback) __attribute__((__common__)); void REDISMODULE_API_FUNC(RedisModule_SetClusterFlags)(RedisModuleCtx *ctx, uint64_t flags) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_ExportSharedAPI)(RedisModuleCtx *ctx, const char *apiname, void *func) __attribute__((__common__)); void *REDISMODULE_API_FUNC(RedisModule_GetSharedAPI)(RedisModuleCtx *ctx, const char *apiname) __attribute__((__common__)); RedisModuleCommandFilter *REDISMODULE_API_FUNC(RedisModule_RegisterCommandFilter)(RedisModuleCtx *ctx, RedisModuleCommandFilterFunc cb, int flags) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_UnregisterCommandFilter)(RedisModuleCtx *ctx, RedisModuleCommandFilter *filter) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_CommandFilterArgsCount)(RedisModuleCommandFilterCtx *fctx) __attribute__((__common__)); const RedisModuleString *REDISMODULE_API_FUNC(RedisModule_CommandFilterArgGet)(RedisModuleCommandFilterCtx *fctx, int pos) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_CommandFilterArgInsert)(RedisModuleCommandFilterCtx *fctx, int pos, RedisModuleString *arg) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_CommandFilterArgReplace)(RedisModuleCommandFilterCtx *fctx, int pos, RedisModuleString *arg) __attribute__((__common__)); int REDISMODULE_API_FUNC(RedisModule_CommandFilterArgDelete)(RedisModuleCommandFilterCtx *fctx, int pos) __attribute__((__common__)); #endif /* This is included inline inside each Redis module. */ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) __attribute__((unused)); static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int apiver) { void *getapifuncptr = ((void**)ctx)[0]; RedisModule_GetApi = (int (*)(const char *, void *)) (unsigned long)getapifuncptr; REDISMODULE_GET_API(Alloc); REDISMODULE_GET_API(Calloc); REDISMODULE_GET_API(Free); REDISMODULE_GET_API(Realloc); REDISMODULE_GET_API(Strdup); REDISMODULE_GET_API(CreateCommand); REDISMODULE_GET_API(SetModuleAttribs); REDISMODULE_GET_API(IsModuleNameBusy); REDISMODULE_GET_API(WrongArity); REDISMODULE_GET_API(ReplyWithLongLong); REDISMODULE_GET_API(ReplyWithError); REDISMODULE_GET_API(ReplyWithSimpleString); REDISMODULE_GET_API(ReplyWithArray); REDISMODULE_GET_API(ReplySetArrayLength); REDISMODULE_GET_API(ReplyWithStringBuffer); REDISMODULE_GET_API(ReplyWithCString); REDISMODULE_GET_API(ReplyWithString); REDISMODULE_GET_API(ReplyWithNull); REDISMODULE_GET_API(ReplyWithCallReply); REDISMODULE_GET_API(ReplyWithDouble); REDISMODULE_GET_API(GetSelectedDb); REDISMODULE_GET_API(SelectDb); REDISMODULE_GET_API(OpenKey); REDISMODULE_GET_API(CloseKey); REDISMODULE_GET_API(KeyType); REDISMODULE_GET_API(ValueLength); REDISMODULE_GET_API(ListPush); REDISMODULE_GET_API(ListPop); REDISMODULE_GET_API(StringToLongLong); REDISMODULE_GET_API(StringToDouble); REDISMODULE_GET_API(Call); REDISMODULE_GET_API(CallReplyProto); REDISMODULE_GET_API(FreeCallReply); REDISMODULE_GET_API(CallReplyInteger); REDISMODULE_GET_API(CallReplyType); REDISMODULE_GET_API(CallReplyLength); REDISMODULE_GET_API(CallReplyArrayElement); REDISMODULE_GET_API(CallReplyStringPtr); REDISMODULE_GET_API(CreateStringFromCallReply); REDISMODULE_GET_API(CreateString); REDISMODULE_GET_API(CreateStringFromLongLong); REDISMODULE_GET_API(CreateStringFromString); REDISMODULE_GET_API(CreateStringPrintf); REDISMODULE_GET_API(FreeString); REDISMODULE_GET_API(StringPtrLen); REDISMODULE_GET_API(AutoMemory); REDISMODULE_GET_API(Replicate); REDISMODULE_GET_API(ReplicateVerbatim); REDISMODULE_GET_API(DeleteKey); REDISMODULE_GET_API(UnlinkKey); REDISMODULE_GET_API(StringSet); REDISMODULE_GET_API(StringDMA); REDISMODULE_GET_API(StringTruncate); REDISMODULE_GET_API(GetExpire); REDISMODULE_GET_API(SetExpire); REDISMODULE_GET_API(ZsetAdd); REDISMODULE_GET_API(ZsetIncrby); REDISMODULE_GET_API(ZsetScore); REDISMODULE_GET_API(ZsetRem); REDISMODULE_GET_API(ZsetRangeStop); REDISMODULE_GET_API(ZsetFirstInScoreRange); REDISMODULE_GET_API(ZsetLastInScoreRange); REDISMODULE_GET_API(ZsetFirstInLexRange); REDISMODULE_GET_API(ZsetLastInLexRange); REDISMODULE_GET_API(ZsetRangeCurrentElement); REDISMODULE_GET_API(ZsetRangeNext); REDISMODULE_GET_API(ZsetRangePrev); REDISMODULE_GET_API(ZsetRangeEndReached); REDISMODULE_GET_API(HashSet); REDISMODULE_GET_API(HashGet); REDISMODULE_GET_API(IsKeysPositionRequest); REDISMODULE_GET_API(KeyAtPos); REDISMODULE_GET_API(GetClientId); REDISMODULE_GET_API(GetContextFlags); REDISMODULE_GET_API(PoolAlloc); REDISMODULE_GET_API(CreateDataType); REDISMODULE_GET_API(ModuleTypeSetValue); REDISMODULE_GET_API(ModuleTypeGetType); REDISMODULE_GET_API(ModuleTypeGetValue); REDISMODULE_GET_API(SaveUnsigned); REDISMODULE_GET_API(LoadUnsigned); REDISMODULE_GET_API(SaveSigned); REDISMODULE_GET_API(LoadSigned); REDISMODULE_GET_API(SaveString); REDISMODULE_GET_API(SaveStringBuffer); REDISMODULE_GET_API(LoadString); REDISMODULE_GET_API(LoadStringBuffer); REDISMODULE_GET_API(SaveDouble); REDISMODULE_GET_API(LoadDouble); REDISMODULE_GET_API(SaveFloat); REDISMODULE_GET_API(LoadFloat); REDISMODULE_GET_API(EmitAOF); REDISMODULE_GET_API(Log); REDISMODULE_GET_API(LogIOError); REDISMODULE_GET_API(StringAppendBuffer); REDISMODULE_GET_API(RetainString); REDISMODULE_GET_API(StringCompare); REDISMODULE_GET_API(GetContextFromIO); REDISMODULE_GET_API(GetKeyNameFromIO); REDISMODULE_GET_API(Milliseconds); REDISMODULE_GET_API(DigestAddStringBuffer); REDISMODULE_GET_API(DigestAddLongLong); REDISMODULE_GET_API(DigestEndSequence); REDISMODULE_GET_API(CreateDict); REDISMODULE_GET_API(FreeDict); REDISMODULE_GET_API(DictSize); REDISMODULE_GET_API(DictSetC); REDISMODULE_GET_API(DictReplaceC); REDISMODULE_GET_API(DictSet); REDISMODULE_GET_API(DictReplace); REDISMODULE_GET_API(DictGetC); REDISMODULE_GET_API(DictGet); REDISMODULE_GET_API(DictDelC); REDISMODULE_GET_API(DictDel); REDISMODULE_GET_API(DictIteratorStartC); REDISMODULE_GET_API(DictIteratorStart); REDISMODULE_GET_API(DictIteratorStop); REDISMODULE_GET_API(DictIteratorReseekC); REDISMODULE_GET_API(DictIteratorReseek); REDISMODULE_GET_API(DictNextC); REDISMODULE_GET_API(DictPrevC); REDISMODULE_GET_API(DictNext); REDISMODULE_GET_API(DictPrev); REDISMODULE_GET_API(DictCompare); REDISMODULE_GET_API(DictCompareC); #ifdef REDISMODULE_EXPERIMENTAL_API REDISMODULE_GET_API(GetThreadSafeContext); REDISMODULE_GET_API(FreeThreadSafeContext); REDISMODULE_GET_API(ThreadSafeContextLock); REDISMODULE_GET_API(ThreadSafeContextUnlock); REDISMODULE_GET_API(BlockClient); REDISMODULE_GET_API(UnblockClient); REDISMODULE_GET_API(IsBlockedReplyRequest); REDISMODULE_GET_API(IsBlockedTimeoutRequest); REDISMODULE_GET_API(GetBlockedClientPrivateData); REDISMODULE_GET_API(GetBlockedClientHandle); REDISMODULE_GET_API(AbortBlock); REDISMODULE_GET_API(SetDisconnectCallback); REDISMODULE_GET_API(SubscribeToKeyspaceEvents); REDISMODULE_GET_API(BlockedClientDisconnected); REDISMODULE_GET_API(RegisterClusterMessageReceiver); REDISMODULE_GET_API(SendClusterMessage); REDISMODULE_GET_API(GetClusterNodeInfo); REDISMODULE_GET_API(GetClusterNodesList); REDISMODULE_GET_API(FreeClusterNodesList); REDISMODULE_GET_API(CreateTimer); REDISMODULE_GET_API(StopTimer); REDISMODULE_GET_API(GetTimerInfo); REDISMODULE_GET_API(GetMyClusterID); REDISMODULE_GET_API(GetClusterSize); REDISMODULE_GET_API(GetRandomBytes); REDISMODULE_GET_API(GetRandomHexChars); REDISMODULE_GET_API(SetClusterFlags); REDISMODULE_GET_API(ExportSharedAPI); REDISMODULE_GET_API(GetSharedAPI); REDISMODULE_GET_API(RegisterCommandFilter); REDISMODULE_GET_API(UnregisterCommandFilter); REDISMODULE_GET_API(CommandFilterArgsCount); REDISMODULE_GET_API(CommandFilterArgGet); REDISMODULE_GET_API(CommandFilterArgInsert); REDISMODULE_GET_API(CommandFilterArgReplace); REDISMODULE_GET_API(CommandFilterArgDelete); #endif if (RedisModule_IsModuleNameBusy && RedisModule_IsModuleNameBusy(name)) return REDISMODULE_ERR; RedisModule_SetModuleAttribs(ctx,name,ver,apiver); return REDISMODULE_OK; } #else /* Things only defined for the modules core, not exported to modules * including this file. */ #define RedisModuleString robj #endif /* REDISMODULE_CORE */ #endif /* REDISMOUDLE_H */ RediSearch-1.2.2/src/result_processor.c000066400000000000000000000517411364126773500201230ustar00rootroot00000000000000#include "result_processor.h" #include "query.h" #include "extension.h" #include "util/minmax_heap.h" #include "ext/default.h" #include "query_plan.h" #include "highlight.h" /******************************************************************************************************************* * General Result Processor Helper functions ********************************************************************************************************************/ /* Create a new result processor with a given upstream processor, and context private data */ ResultProcessor *NewResultProcessor(ResultProcessor *upstream, void *privdata) { ResultProcessor *p = calloc(1, sizeof(ResultProcessor)); p->ctx = (ResultProcessorCtx){ .privdata = privdata, .upstream = upstream, .qxc = upstream ? upstream->ctx.qxc : NULL, }; return p; } /* Helper function - get the total from a processor, and if the Total callback is NULL, climb up * the * chain until we find a processor with a Total callback. This allows processors to avoid * implementing it if they have no calculations to add to Total (such as deeted/ignored results) * */ size_t ResultProcessor_Total(ResultProcessor *rp) { return rp->ctx.qxc ? rp->ctx.qxc->totalResults : 0; } /* Free a result processor - recursively freeing its upstream as well. If the processor does not * implement Free - we just call free() on the processor object itself. * * Do NOT call Free() callbacks on processors directly! */ void ResultProcessor_Free(ResultProcessor *rp) { ResultProcessor *upstream = rp->ctx.upstream; if (rp->Free) { rp->Free(rp); } else { // For processors that did not bother to define a special Free - we just call free() free(rp); } // continue to the upstream processor if (upstream) ResultProcessor_Free(upstream); } SearchResult *NewSearchResult() { SearchResult *ret = calloc(1, sizeof(*ret)); ret->fields = RS_NewFieldMap(4); ret->score = 0; return ret; } /* Free the search result's internal data but not the result itself - it may be allocated on the * stack */ void SearchResult_FreeInternal(SearchResult *r) { if (!r) return; // This won't affect anything if the result is null if (r->indexResult) { // IndexResult_Free(r->indexResult); r->indexResult = NULL; } if (r->fields) { RSFieldMap_Free(r->fields); r->fields = NULL; } } /* Free the search result object including the object itself */ void SearchResult_Free(void *p) { SearchResult_FreeInternal((SearchResult *)p); free(p); } /* Generic free function for result processors that just need to free their private data with free() */ void ResultProcessor_GenericFree(ResultProcessor *rp) { free(rp->ctx.privdata); free(rp); } /******************************************************************************************************************* * Base Result Processor - this processor is the topmost processor of every processing chain. * * It takes the raw index results from the index, and builds the search result to be sent * downstream. ********************************************************************************************************************/ /* Next implementation */ int baseResultProcessor_Next(ResultProcessorCtx *ctx, SearchResult *res) { QueryPlan *q = ctx->privdata; // No root filter - the query has 0 results if (q->rootFilter == NULL) { return RS_RESULT_EOF; } // if we've timed out - abort the root processor and return EOF if (q->execCtx.state == QPState_TimedOut) { q->rootFilter->Abort(q->rootFilter->ctx); return RS_RESULT_EOF; } RSIndexResult *r; RSDocumentMetadata *dmd; int rc; // Read from the root filter until we have a valid result do { rc = q->rootFilter->Read(q->rootFilter->ctx, &r); // This means we are done! if (rc == INDEXREAD_EOF) { return RS_RESULT_EOF; } else if (!r || rc == INDEXREAD_NOTFOUND) { continue; } dmd = DocTable_Get(&RP_SPEC(ctx)->docs, r->docId); // printf("%d => '%s'\n", r->docId, dmd->key); // skip deleted documents if (!dmd || (dmd->flags & Document_Deleted)) { continue; } // Increment the total results barring deleted results ++ctx->qxc->totalResults; // valid result! break; } while (1); // set the result data res->docId = r->docId; // the index result of the search result is not thread safe. It will be copied by the sorter later // on if we need it to be thread safe res->indexResult = r; // q->opts.needIndexResult ? r : NULL; res->score = 0; res->sorterPrivateData = dmd->sortVector; res->scorerPrivateData = dmd; if (res->fields != NULL) { res->fields->len = 0; } return RS_RESULT_OK; } /* Createa a new base processor */ ResultProcessor *NewBaseProcessor(QueryPlan *q, QueryProcessingCtx *xc) { ResultProcessor *rp = NewResultProcessor(NULL, q); rp->ctx.qxc = xc; rp->Next = baseResultProcessor_Next; return rp; } /******************************************************************************************************************* * Scoring Processor * * It takes results from upstream, and using a scoring function applies the score to each one. * * It may not be invoked if we are working in SORTBY mode (or later on in aggregations) ********************************************************************************************************************/ /* The scorer context - basically the scoring function and its private data */ struct scorerCtx { RSScoringFunction scorer; RSFreeFunction scorerFree; RSScoringFunctionCtx scorerCtx; }; int scorerProcessor_Next(ResultProcessorCtx *ctx, SearchResult *res) { struct scorerCtx *sc = ctx->privdata; int rc; do { if (RS_RESULT_EOF == (rc = ResultProcessor_Next(ctx->upstream, res, 0))) return rc; // Apply the scoring function res->score = sc->scorer(&sc->scorerCtx, res->indexResult, res->scorerPrivateData, ctx->qxc->minScore); // If we got the special score RS_SCORE_FILTEROUT - disregard the result and decrease the total // number of results (it's been increased by the upstream processor) if (res->score == RS_SCORE_FILTEROUT) ctx->qxc->totalResults--; break; } while (1); return rc; } /* Free impl. for scorer - frees up the scorer privdata if needed */ static void scorer_Free(ResultProcessor *rp) { struct scorerCtx *sc = rp->ctx.privdata; if (sc->scorerFree) { sc->scorerFree(sc->scorerCtx.privdata); } ResultProcessor_GenericFree(rp); } /* Create a new scorer by name. If the name is not found in the scorer registry, we use the defalt * scorer */ ResultProcessor *NewScorer(const char *scorer, ResultProcessor *upstream, RSSearchRequest *req) { struct scorerCtx *sc = malloc(sizeof(*sc)); ExtScoringFunctionCtx *scx = Extensions_GetScoringFunction(&sc->scorerCtx, scorer ? scorer : DEFAULT_SCORER_NAME); if (!scx) { scx = Extensions_GetScoringFunction(&sc->scorerCtx, DEFAULT_SCORER_NAME); } sc->scorer = scx->sf; sc->scorerFree = scx->ff; sc->scorerCtx.payload = req->payload; // Initialize scorer stats IndexSpec_GetStats(upstream->ctx.qxc->sctx->spec, &sc->scorerCtx.indexStats); ResultProcessor *rp = NewResultProcessor(upstream, sc); rp->Next = scorerProcessor_Next; rp->Free = scorer_Free; return rp; } /******************************************************************************************************************* * Sorting Processor * * This is where things become a bit complex... * * The sorter takes scored results from the scorer (or in the case of SORTBY, the raw results), and * maintains a heap of the top N results. * * Since we need it to be thread safe, every result that's put on the heap is copied, including its * index result tree. * * This means that from here down-stream, everything is thread safe, but we also need to properly * free discarded results. * * The sorter is actually a reducer - it returns RS_RESULT_QUEUED until its upstream parent returns * EOF. then it starts yielding results one by one by popping from the top of the heap. * * Note: We use a min-max heap to simplify maintaining a max heap where we can pop from the bottom * while * finding the top N results ********************************************************************************************************************/ typedef enum { Sort_ByScore, Sort_BySortKey, Sort_ByFields, } SortMode; /* Sorter's private context */ struct sorterCtx { // The desired size of the heap - top N results // If set to 0 this is a growing heap uint32_t size; // The offset - used when popping result after we're done uint32_t offset; // The heap. We use a min-max heap here heap_t *pq; // the compare function for the heap. We use it to test if a result needs to be added to the heap int (*cmp)(const void *e1, const void *e2, const void *udata); // private data for the compare function void *cmpCtx; // pooled result - we recycle it to avoid allocations SearchResult *pooledResult; // accumulation state - while this is true, any call to next() will yield QUEUED int accumulating; int saveIndexResults; SortMode sortMode; }; struct fieldCmpCtx { RSMultiKey *keys; // a bitmap where each bit corresponds to a variable in the keymap, specifying ascending (1) or // descending (0) uint64_t ascendMap; }; /* Yield - pops the current top result from the heap */ int sorter_Yield(struct sorterCtx *sc, SearchResult *r) { // make sure we don't overshoot the heap size, unless the heap size is dynamic if (sc->pq->count > 0 && (!sc->size || sc->offset++ < sc->size)) { SearchResult *sr = mmh_pop_max(sc->pq); *r = *sr; DMD_Decref(r->scorerPrivateData); free(sr); return RS_RESULT_OK; } return RS_RESULT_EOF; } void sorter_Free(ResultProcessor *rp) { struct sorterCtx *sc = rp->ctx.privdata; if (sc->pooledResult) { SearchResult_Free(sc->pooledResult); } if (sc->cmpCtx) { if (sc->sortMode == Sort_ByFields) { struct fieldCmpCtx *fcc = sc->cmpCtx; RSMultiKey_Free(fcc->keys); free(fcc); } } // calling mmh_free will free all the remaining results in the heap, if any mmh_free(sc->pq); free(sc); free(rp); } static void keepResult(struct sorterCtx *sctx, SearchResult *r) { DMD_Incref(r->scorerPrivateData); if (sctx->sortMode == Sort_ByFields && r->fields) { for (size_t ii = 0; ii < r->fields->len; ++ii) { r->fields->fields[ii].val = RSValue_MakePersistent(r->fields->fields[ii].val); r->fields->fields[ii].key = strdup(r->fields->fields[ii].key); r->fields->isKeyAlloc = 1; } } } int sorter_Next(ResultProcessorCtx *ctx, SearchResult *r) { struct sorterCtx *sc = ctx->privdata; // if we're not accumulating anymore - yield the top result if (!sc->accumulating) { return sorter_Yield(sc, r); } if (sc->pooledResult == NULL) { sc->pooledResult = NewSearchResult(); } else if (sc->pooledResult->fields) { sc->pooledResult->fields->len = 0; } SearchResult *h = sc->pooledResult; int rc = ResultProcessor_Next(ctx->upstream, h, 0); // if our upstream has finished - just change the state to not accumulating, and yield if (rc == RS_RESULT_EOF) { sc->accumulating = 0; return sorter_Yield(sc, r); } // If the queue is not full - we just push the result into it // If the pool size is 0 we always do that, letting the heap grow dynamically if (!sc->size || sc->pq->count + 1 < sc->pq->size) { // copy the index result to make it thread safe - but only if it is pushed to the heap h->indexResult = NULL; keepResult(sc, h); mmh_insert(sc->pq, h); sc->pooledResult = NULL; if (h->score < ctx->qxc->minScore) { ctx->qxc->minScore = h->score; } } else { // find the min result SearchResult *minh = mmh_peek_min(sc->pq); // update the min score. Irrelevant to SORTBY mode but hardly costs anything... if (minh->score > ctx->qxc->minScore) { ctx->qxc->minScore = minh->score; } // if needed - pop it and insert a new result if (sc->cmp(h, minh, sc->cmpCtx) > 0) { // copy the index result to make it thread safe - but only if it is pushed to the heap h->indexResult = NULL; sc->pooledResult = mmh_pop_min(sc->pq); SearchResult_FreeInternal(sc->pooledResult); keepResult(sc, h); mmh_insert(sc->pq, h); } else { // The current should not enter the pool, so just leave it as is h->indexResult = NULL; sc->pooledResult = h; // make sure we will not try to free the index result of the pooled result at the end SearchResult_FreeInternal(sc->pooledResult); } } return RS_RESULT_QUEUED; } /* Compare results for the heap by score */ static inline int cmpByScore(const void *e1, const void *e2, const void *udata) { const SearchResult *h1 = e1, *h2 = e2; if (h1->score < h2->score) { return -1; } else if (h1->score > h2->score) { return 1; } return h1->docId < h2->docId ? -1 : 1; } /* Compare results for the heap by sorting key */ static int cmpBySortKey(const void *e1, const void *e2, const void *udata) { const RSSortingKey *sk = udata; const SearchResult *h1 = e1, *h2 = e2; if (!h1->sorterPrivateData || !h2->sorterPrivateData) { return h1->docId < h2->docId ? -1 : 1; } return -RSSortingVector_Cmp(h1->sorterPrivateData, h2->sorterPrivateData, (RSSortingKey *)sk); } /* Compare results for the heap by sorting key */ static int cmpByFields(const void *e1, const void *e2, const void *udata) { const struct fieldCmpCtx *cc = udata; const SearchResult *h1 = e1, *h2 = e2; int ascending = 0; for (size_t i = 0; i < cc->keys->len && i < sizeof(cc->ascendMap) * 8; i++) { RSValue *v1 = RSFieldMap_GetByKey(h1->fields, &cc->keys->keys[i]); RSValue *v2 = RSFieldMap_GetByKey(h2->fields, &cc->keys->keys[i]); if (!v1 || !v2) { break; } int rc = RSValue_Cmp(v1, v2); // take the ascending bit for this property from the ascending bitmap ascending = cc->ascendMap & (1 << i) ? 1 : 0; if (rc != 0) return ascending ? -rc : rc; } int rc = h1->docId < h2->docId ? -1 : 1; return ascending ? -rc : rc; } ResultProcessor *NewSorter(SortMode sortMode, void *sortCtx, uint32_t size, ResultProcessor *upstream, int copyIndexResults) { struct sorterCtx *sc = malloc(sizeof(*sc)); // select the sorting function by the sort mode switch (sortMode) { case Sort_ByScore: sc->cmp = cmpByScore; break; case Sort_ByFields: sc->cmp = cmpByFields; break; case Sort_BySortKey: sc->cmp = cmpBySortKey; break; } sc->cmpCtx = sortCtx; sc->pq = mmh_init_with_size(size + 1, sc->cmp, sc->cmpCtx, SearchResult_Free); sc->size = size; sc->offset = 0; sc->pooledResult = NULL; sc->accumulating = 1; sc->saveIndexResults = copyIndexResults; sc->sortMode = sortMode; ResultProcessor *rp = NewResultProcessor(upstream, sc); rp->Next = sorter_Next; rp->Free = sorter_Free; return rp; } ResultProcessor *NewSorterByFields(RSMultiKey *mk, uint64_t ascendingMap, uint32_t size, ResultProcessor *upstream) { struct fieldCmpCtx *c = malloc(sizeof(*c)); c->ascendMap = ascendingMap; c->keys = mk; return NewSorter(Sort_ByFields, c, size, upstream, 0); } /******************************************************************************************************************* * Paging Processor * * The sorter builds a heap of size N, but the pager is responsible for taking result * FIRST...FIRST+NUM from it. * * For example, if we want to get results 40-50, we build a heap of size 50 on the sorter, and the * pager is responsible for discarding the first 40 results and returning just 10 * * They are separated so that later on we can cache the sorter's heap, and continue paging it * without re-executing the entire query *******************************************************************************************************************/ struct pagerCtx { uint32_t offset; uint32_t limit; uint32_t count; }; int pager_Next(ResultProcessorCtx *ctx, SearchResult *r) { struct pagerCtx *pc = ctx->privdata; int rc = ResultProcessor_Next(ctx->upstream, r, 1); // if our upstream has finished - just change the state to not accumulating, and yield if (rc == RS_RESULT_EOF) { return rc; } // not reached beginning of results if (pc->count < pc->offset) { // IndexResult_Free(r->indexResult); RSFieldMap_Free(r->fields); r->fields = NULL; pc->count++; return RS_RESULT_QUEUED; } // overshoot the count if (pc->count >= pc->limit + pc->offset) { // IndexResult_Free(r->indexResult); RSFieldMap_Free(r->fields); r->fields = NULL; return RS_RESULT_EOF; } pc->count++; return RS_RESULT_OK; } /* Create a new pager. The offset and limit are taken from the user request */ ResultProcessor *NewPager(ResultProcessor *upstream, uint32_t offset, uint32_t limit) { struct pagerCtx *pc = malloc(sizeof(*pc)); pc->offset = offset; pc->limit = limit; pc->count = 0; ResultProcessor *rp = NewResultProcessor(upstream, pc); rp->Next = pager_Next; // no need for a special free function rp->Free = ResultProcessor_GenericFree; return rp; } /******************************************************************************************************************* * Loading Processor * * This processor simply takes the search results, and based on the request parameters, loads the * relevant fields for the results that need to be displayed to the user, from redis. * * It fills the result objects' field map with values corresponding to the requested return fields * *******************************************************************************************************************/ struct loaderCtx { RedisSearchCtx *ctx; const char **fields; size_t numFields; int explicitReturn; }; int loader_Next(ResultProcessorCtx *ctx, SearchResult *r) { struct loaderCtx *lc = ctx->privdata; int rc = ResultProcessor_Next(ctx->upstream, r, 1); // END - let's write the total processed size if (rc == RS_RESULT_EOF) { return rc; } Document doc = {NULL}; RedisModuleKey *rkey = NULL; // Current behavior skips entire result if document does not exist. // I'm unusre if that's intentional or an oversight. RedisModuleString *idstr = DMD_CreateKeyString(r->scorerPrivateData, lc->ctx->redisCtx); if (!lc->explicitReturn) { Redis_LoadDocument(lc->ctx, idstr, &doc); } else { Redis_LoadDocumentEx(lc->ctx, idstr, lc->fields, lc->numFields, &doc, &rkey); RedisModule_FreeString(lc->ctx->redisCtx, idstr); } // TODO: load should return strings, not redis strings for (int i = 0; i < doc.numFields; i++) { if (doc.fields[i].text) { RSFieldMap_Set(&r->fields, doc.fields[i].name, RS_RedisStringVal(doc.fields[i].text)); } else { RSFieldMap_Set(&r->fields, doc.fields[i].name, RS_NullVal()); } } Document_Free(&doc); return RS_RESULT_OK; } void loader_Free(ResultProcessor *rp) { struct loaderCtx *lc = rp->ctx.privdata; free(lc->fields); free(lc); free(rp); } ResultProcessor *NewLoader(ResultProcessor *upstream, RedisSearchCtx *sctx, FieldList *fields) { struct loaderCtx *sc = malloc(sizeof(*sc)); sc->ctx = sctx; sc->fields = calloc(fields->numFields, sizeof(char *)); sc->numFields = fields->numFields; for (size_t i = 0; i < fields->numFields; i++) { sc->fields[i] = fields->fields[i].name; } sc->explicitReturn = fields->explicitReturn; ResultProcessor *rp = NewResultProcessor(upstream, sc); rp->Next = loader_Next; rp->Free = loader_Free; return rp; } /******************************************************************************************************************* * Building the processor chaing based on the processors available and the request parameters *******************************************************************************************************************/ ResultProcessor *Query_BuildProcessorChain(QueryPlan *q, void *privdata, char **err) { *err = NULL; RSSearchRequest *req = privdata; // The base processor translates index results into search results ResultProcessor *next = NewBaseProcessor(q, &q->execCtx); // If we are not in SORTBY mode - add a scorer to the chain if (q->opts.sortBy == NULL) { next = NewScorer(q->opts.scorer, next, req); // Scorers usually need the index results, let's tell the query plan that q->opts.needIndexResult = 1; } // The sorter sorts the top-N results next = NewSorter(q->opts.sortBy ? Sort_BySortKey : Sort_ByScore, q->opts.sortBy, q->opts.offset + q->opts.num, next, req->opts.fields.wantSummaries); // The pager pages over the results of the sorter next = NewPager(next, q->opts.offset, q->opts.num); // The loader loads the documents from redis // If we do not need to return any fields - we do not need the loader in the loop if (!(q->opts.flags & Search_NoContent)) { next = NewLoader(next, q->ctx, &req->opts.fields); if (req->opts.fields.wantSummaries && (q->ctx->spec->flags & Index_StoreTermOffsets) != 0) { next = NewHighlightProcessor(next, req); } } return next; } RediSearch-1.2.2/src/result_processor.h000066400000000000000000000223441364126773500201250ustar00rootroot00000000000000#ifndef RS_RESULT_PROCESSOR_H_ #define RS_RESULT_PROCESSOR_H_ #include "redisearch.h" #include "sortable.h" #include "value.h" #include "concurrent_ctx.h" #include "search_ctx.h" #include "index_iterator.h" #include "search_options.h" /******************************************************************************** * Result Processor Chain * * We use a chain of result processors to sort, score, filter and page the results coming from the * index. * * The index iterator tree is responsible for extracting results from the index, and the processor * chain is responsible for processing those and preparing them for the users. * The processors are exposing an iterator interface, adding values to SearchResult objects. * * SearchResult objects contain all the data needed for a search result - from docId and score, to * the actual fields loaded from redis. * * Processors can add more fields, rewrite them, change the score, etc. * The query plan builds the chain based on the request, and then the chain just processes the * results. * ********************************************************************************/ /* Query processing state */ typedef enum { QPState_Running, QPState_Aborted, // TimedOut state differs from aborted in that it lets the processors drain their accumulated // results instead of stopping in our tracks and returning nothing. QPState_TimedOut, } QueryProcessingState; /* Query processing context. It is shared by all result processors */ typedef struct { // Concurrent search context for thread switching ConcurrentSearchCtx *conc; // Contains our spec RedisSearchCtx *sctx; // the minimal score applicable for a result. It can be used to optimize the scorers double minScore; // the total results found in the query, incremented by the root processors and decremented by // others who might disqualify results uint32_t totalResults; // an optional error string if something went wrong - currently not used char *errorString; // the state - used for aborting queries QueryProcessingState state; IndexIterator *rootFilter; struct timespec startTime; } QueryProcessingCtx; static inline RSSortingTable *QueryProcessingCtx_GetSortingTable(QueryProcessingCtx *c) { if (c->sctx && c->sctx->spec) return c->sctx->spec->sortables; return NULL; } /* * SearchResult - the object all the processing chain is working on. * It has the indexResult which is what the index scan brought - scores, vectors, flags, etc. * * And a list of fields loaded by the chain - currenly only by the loader, but possibly by * aggregators later on */ typedef struct { t_docId docId; // not all results have score - TBD double score; // The sorting vector of the result. // should be use only on the sorter because of // Concurrency issues RSSortingVector *sorterPrivateData; // The entire document metadata. Guaranteed not to be NULL // should be use only on the scorer and not anywhere else because of // Concurrency issues` RSDocumentMetadata *scorerPrivateData; // index result should cover what you need for highlighting, // but we will add a method to duplicate index results to make // them thread safe RSIndexResult *indexResult; // dynamic fields RSFieldMap *fields; } SearchResult; #define SEARCH_RESULT_INIT \ ((SearchResult){.docId = 0, \ .score = 0, \ .scorerPrivateData = NULL, \ .sorterPrivateData = NULL, \ .indexResult = NULL, \ .fields = NULL}) /* Get a value by name from the result, either from its sorting table or from its loaded values */ static inline RSValue *SearchResult_GetValue(SearchResult *res, RSSortingTable *tbl, RSKey *k) { if (!k->key) goto noret; if (res->fields) { RSValue *ret = RSFieldMap_GetByKey(res->fields, k); if (!RSValue_IsNull(ret)) { return RSValue_Dereference(ret); } } // First try to get the group value by sortables if (tbl && res->scorerPrivateData && res->scorerPrivateData->sortVector) { int idx = k->sortableIdx; if (idx <= 0) { idx = RSSortingTable_GetFieldIdx(tbl, RSKEY(k->key)); if (k->sortableIdx != RSKEY_NOCACHE) { k->sortableIdx = idx; } } if (RSKEY_ISVALIDIDX(idx)) { if(idx >= res->scorerPrivateData->sortVector->len){ return RS_NullVal(); } return (res->scorerPrivateData->sortVector->values[idx]); } } noret: return RS_NullVal(); } /* Result processor return codes */ // OK - we have a valid result #define RS_RESULT_OK 0 // Queued - nothing yet, this is a reducer in accumulation state #define RS_RESULT_QUEUED 1 // EOF - no results from this processor #define RS_RESULT_EOF 2 /* Context for a single result processor, including global shared state, upstream processor and * private data */ typedef struct { // The processor's own private data. It's the processor's responsibility to free it void *privdata; // The upstream processor from which we read results struct resultProcessor *upstream; // The global state of the query processing chain QueryProcessingCtx *qxc; } ResultProcessorCtx; typedef struct resultProcessor { // the context should contain a pointer to the upstream step // like the index iterator does ResultProcessorCtx ctx; // Next is called by the downstream processor, and should return either: // * RS_RESULT_OK -> means we put something in the result pointer and it can be processed // * RS_RESULT_QUEUED -> no result yet, we're waiting for more results upstream. Caller should // return QUEUED as well // * RS_RESULT_EOF -> finished, nothing more from this processor int (*Next)(ResultProcessorCtx *ctx, SearchResult *res); // Free just frees up the processor. If left as NULL we simply use free() void (*Free)(struct resultProcessor *p); } ResultProcessor; /* Create a raw result processor object with no callbacks, just the upstream and privdata */ ResultProcessor *NewResultProcessor(ResultProcessor *upstream, void *privdata); /* Safely call Next on an upstream processor, putting the result into res. If allowSwitching is 1, * we check the concurrent context and perhaps switch if needed. * * Note 1: Do not call processors' Next() directly, ONLY USE THIS FUNCTION * * Note 2: this function will not return RS_RESULT_QUEUED, but only OK or EOF. Any queued events * will be handled by this function * */ /* Safely call Next on an upstream processor, putting the result into res. If allowSwitching is 1, * we check the concurrent context and perhaps switch if needed. * * Note 1: Do not call processors' Next() directly, ONLY USE THIS FUNCTION * * Note 2: this function will not return RS_RESULT_QUEUED, but only OK or EOF. Any queued events * will be handled by this function * */ static inline int ResultProcessor_Next(ResultProcessor *rp, SearchResult *res, int allowSwitching) { int rc; ConcurrentSearchCtx *cxc = rp->ctx.qxc ? rp->ctx.qxc->conc : NULL; do { // If we can switch - we check the concurrent context switch BEFORE calling the upstream if (allowSwitching && cxc) { CONCURRENT_CTX_TICK(cxc); // need to abort - return EOF if (rp->ctx.qxc->state == QPState_Aborted) { return RS_RESULT_EOF; } } rc = rp->Next(&rp->ctx, res); } while (rc == RS_RESULT_QUEUED); return rc; } /* Shortcut macro - call ResultProcessor_Next and return EOF if it returned EOF - otherwise it has * to return OK */ #define RESULTPROCESSOR_MAYBE_RET_EOF(proc, res, allowSwitch) \ { \ if (RS_RESULT_EOF == ResultProcessor_Next(ctx->upstream, res, allowSwitch)) { \ return RS_RESULT_EOF; \ } \ } /* Helper function - get the total from a processor, and if the Total callback is NULL, climb up * the * chain until we find a processor with a Total callback. This allows processors to avoid * implementing it if they have no calculations to add to Total (such as deeted/ignored results) * */ size_t ResultProcessor_Total(ResultProcessor *rp); /* Free a result processor - recursively freeing its upstream as well. If the processor does not * implement Free - we just call free() on the processor object itself. * * Do NOT call Free() callbacks on processors directly! */ void ResultProcessor_Free(ResultProcessor *rp); /** Frees the processor and privdata with `free()` */ void ResultProcessor_GenericFree(ResultProcessor *rp); // Get the index spec from the result processor #define RP_SPEC(rpctx) ((rpctx)->qxc->sctx->spec) SearchResult *NewSearchResult(); void SearchResult_Free(void *p); void SearchResult_FreeInternal(SearchResult *r); struct QueryPlan; ResultProcessor *NewSorterByFields(RSMultiKey *mk, uint64_t ascendingMap, uint32_t size, ResultProcessor *upstream); ResultProcessor *NewLoader(ResultProcessor *upstream, RedisSearchCtx *sctx, FieldList *fields); ResultProcessor *NewBaseProcessor(struct QueryPlan *q, QueryProcessingCtx *xc); ResultProcessor *NewPager(ResultProcessor *upstream, uint32_t offset, uint32_t limit); #endif // !RS_RESULT_PROCESSOR_H_ RediSearch-1.2.2/src/rmalloc.h000066400000000000000000000021141364126773500161320ustar00rootroot00000000000000#ifndef __REDISEARCH_ALLOC__ #define __REDISEARCH_ALLOC__ #include #include #include "redismodule.h" #ifdef REDIS_MODULE_TARGET /* Set this when compiling your code as a module */ static inline void *rm_malloc(size_t n) { return RedisModule_Alloc(n); } static inline void *rm_calloc(size_t nelem, size_t elemsz) { return RedisModule_Calloc(nelem, elemsz); } static inline void *rm_realloc(void *p, size_t n) { return RedisModule_Realloc(p, n); } static inline void rm_free(void *p) { RedisModule_Free(p); } static inline char *rm_strdup(const char *s) { return RedisModule_Strdup(s); } static char *rm_strndup(const char *s, size_t n) { char *ret = rm_malloc(n + 1); if (ret) { ret[n] = '\0'; memcpy(ret, s, n); } return ret; } #endif #ifndef REDIS_MODULE_TARGET /* for non redis module targets */ #define rm_malloc malloc #define rm_free free #define rm_calloc calloc #define rm_realloc realloc #define rm_free free #define rm_strdup strdup #define rm_strndup strndup #endif #define rm_new(x) rm_malloc(sizeof(x)) #endif /* __RMUTIL_ALLOC__ */ RediSearch-1.2.2/src/rmutil/000077500000000000000000000000001364126773500156465ustar00rootroot00000000000000RediSearch-1.2.2/src/rmutil/CMDPARSE.md000066400000000000000000000072061364126773500173730ustar00rootroot00000000000000# CmdParse - Complex Redis Command Parsing This is an API to help with parsing complex redis commands - where you need complex and recursive command structues. It can validate and semantically parse commands into a structured AST of sorts. The main idea is that you can define a Schema for the command, detailing its structure, argument types and so on - and the API can automatically validate and parse incoming redis arguments. It currently supports: * Named and positional arguments. * Required and optional arguments. * Typed parsing of strings, doubles and integers. * Argument tuples (with typed parsing) (e.g. `LIMIT {min:int} {max:int}`) * Argument vectors (e.g. `KEYS 3 foo bar baz`) * Flags (e.g. `SET [NX]`) * Options (`SET [XX|NX]`) * Nested sub-commands (`GROUPBY foo REDUCE SUM foo REDUCE AVG bar`) * Variadic vectors at the end of the argument list (as seen on `MSET`) * Any combination of the above. * Ouputting (currently pretty crude) help documentation from the schema. ## Quick Example Let's define the command `ZADD key [NX|XX] [CH] [INCR] score member [score member ...]` Defining the schema would be expressed as: ```c // Creating the command CmdSchemaNode *sc = NewSchema("ZADD", "ZAdd command"); // Adding the key argument - string typed. // Note that even positional args need a name to be referenced by CmdSchema_AddPostional(sc, "key", CmdSchema_NewArg('s'), CmdSchema_Required); // Adding [NX|XX] CmdSchema_AddPostional(sc, "nx_xx", CmdSchema_NewOption(2, (const char *[]){"NX", "XX"}), CmdSchema_Optional); // Add the CH and INCR flags CmdSchema_AddFlag(sc, "CH"); CmdSchema_AddFlag(sc, "INCR"); // Add the score/member variadic vector. "ds" means pairs will be consumed as double and string // and grouped into arrays CmdSchema_AddPostional(sc, "pairs", CmdSchema_NewVariadicVector("ds"), CmdSchema_Required); ``` And parsing it is done by calling `CmdParser_ParseRedisModuleCmd`, giving it the schema and the command arguments. Assuming our argument list is `"ZADD", "foo", "NX", "0", "bar", "1.3", "baz", "5", "froo"`, we will do the following: ```c int MyCmd(RedisModuleCtx *ctx, int argc, RedisModuleString **argv) { char *err; CmdArg *cmd; // Parse the command if (CmdParser_ParseRedisModuleCmd(sc, &cmd, argv, argc, &err, 1) == CMDPARSE_ERR) { RedisModule_ReplyWithError(ctx, err); // if an error is returned, we need to free it free(err); return REDISMODULE_ERR; } // just debug printing CmdArg_Print(cmd, 0); /* handle the command */ ... } ``` This will print the parsed command tree: ``` { key: => "foo" nx_xx: => "NX" pairs: => [[0.000000,"bar"],[1.300000,"baz"],[5.000000,"froo"]] CH: => FALSE INCR: => FALSE } ``` The CmdArg object generated from the parsing resembles a JSON object tree, and is combined of a union of: * Objects (key/value pairs, non unique) * Arrays * Doubles * Integers * Flags (booleans) * Strings We have a few convenience functions to iterate the arguments, for example, walking over the score/member pairs in the above command would look like: ```c // Get the score/member vector CmdArg *pairs = CmdArg_FirstOf(cmd, "pairs"); // Create an iterator for the score/member pairs CmdArgIterator it = CmdArg_Children(pairs); CmdArg *pair; // Walk the iterator while (NULL != (pair = CmdArgIterator_Next(&it))) { // Accessing the sub elements is done in a similar way. Each element is an array in turn. Since // we know its size and it is typed, we can access the values directly printf("Score: %f, element %s\n", CMDARRAY_ELEMENT(pair, 0)->d, CMDARRAY_ELEMENT(pair, 1)->s.str); } ``` RediSearch-1.2.2/src/rmutil/CMakeLists.txt000066400000000000000000000002241364126773500204040ustar00rootroot00000000000000ADD_LIBRARY(rmutil OBJECT alloc.c cmdparse.c heap.c periodic.c priority_queue.c sds.c strings.c util.c vector.c)RediSearch-1.2.2/src/rmutil/Makefile000066400000000000000000000013761364126773500173150ustar00rootroot00000000000000# set environment variable RM_INCLUDE_DIR to the location of redismodule.h ifndef RM_INCLUDE_DIR RM_INCLUDE_DIR=../ endif CFLAGS ?= -g -fPIC -O3 -std=gnu99 -Wall -Wno-unused-function CFLAGS += -I$(RM_INCLUDE_DIR) CC=gcc OBJS=util.o strings.o sds.o vector.o alloc.o periodic.o cmdparse.o all: librmutil.a clean: rm -rf *.o *.a librmutil.a: $(OBJS) ar rcs $@ $^ test_vector: test_vector.o vector.o $(CC) -Wall -o $@ $^ -lc -lpthread -O0 @(sh -c ./$@) .PHONY: test_vector test_periodic: test_periodic.o periodic.o $(CC) -Wall -o $@ $^ -lc -lpthread -O0 @(sh -c ./$@) .PHONY: test_periodic test_cmdparse: test_cmdparse.o cmdparse.o $(CC) -Wall -o $@ $^ -lc -lpthread -O0 @(sh -c ./$@) .PHONY: test_cmdparse test: test_periodic test_vector .PHONY: test RediSearch-1.2.2/src/rmutil/alloc.c000066400000000000000000000020071364126773500171030ustar00rootroot00000000000000#include #include #include #include "alloc.h" /* A patched implementation of strdup that will use our patched calloc */ char *rmalloc_strndup(const char *s, size_t n) { char *ret = calloc(n + 1, sizeof(char)); if (ret) memcpy(ret, s, n); return ret; } /* * Re-patching RedisModule_Alloc and friends to the original malloc functions * * This function shold be called if you are working with malloc-patched code * ouside of redis, usually for unit tests. Call it once when entering your unit * tests' main(). * * Since including "alloc.h" while defining REDIS_MODULE_TARGET * replaces all malloc functions in redis with the RM_Alloc family of functions, * when running that code outside of redis, your app will crash. This function * patches the RM_Alloc functions back to the original mallocs. */ void RMUTil_InitAlloc() { RedisModule_Alloc = malloc; RedisModule_Realloc = realloc; RedisModule_Calloc = calloc; RedisModule_Free = free; RedisModule_Strdup = strdup; } RediSearch-1.2.2/src/rmutil/alloc.h000066400000000000000000000030101364126773500171030ustar00rootroot00000000000000#ifndef __RMUTIL_ALLOC__ #define __RMUTIL_ALLOC__ /* Automatic Redis Module Allocation functions monkey-patching. * * Including this file while REDIS_MODULE_TARGET is defined, will explicitly * override malloc, calloc, realloc & free with RedisModule_Alloc, * RedisModule_Callc, etc implementations, that allow Redis better control and * reporting over allocations per module. * * You should include this file in all c files AS THE LAST INCLUDED FILE * * This only has effect when when compiling with the macro REDIS_MODULE_TARGET * defined. The idea is that for unit tests it will not be defined, but for the * module build target it will be. * */ #include #include char *rmalloc_strndup(const char *s, size_t n); #ifdef REDIS_MODULE_TARGET /* Set this when compiling your code as a module */ #define malloc(size) RedisModule_Alloc(size) #define calloc(count, size) RedisModule_Calloc(count, size) #define realloc(ptr, size) RedisModule_Realloc(ptr, size) #define free(ptr) RedisModule_Free(ptr) #ifdef strdup #undef strdup #endif #define strdup(ptr) RedisModule_Strdup(ptr) /* More overriding */ // needed to avoid calling strndup->malloc #ifdef strndup #undef strndup #endif #define strndup(s, n) rmalloc_strndup(s, n) #else #endif /* REDIS_MODULE_TARGET */ /* This function shold be called if you are working with malloc-patched code * ouside of redis, usually for unit tests. Call it once when entering your unit * tests' main() */ void RMUTil_InitAlloc(); #endif /* __RMUTIL_ALLOC__ */ RediSearch-1.2.2/src/rmutil/cmdparse.c000066400000000000000000000661751364126773500176270ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include "cmdparse.h" int CmdString_CaseEquals(CmdString *str, const char *other) { if (!str || !other) return 0; size_t l = strlen(other); if (l != str->len) return 0; return !strncasecmp(str->str, other, l); } #define pad(depth) \ { \ for (int pd = 0; pd < depth; pd++) putchar(' '); \ } void CmdArg_Print(CmdArg *n, int depth) { pad(depth); switch (n->type) { case CmdArg_Integer: printf("%zd", n->i); break; case CmdArg_Double: printf("%f", n->d); break; case CmdArg_String: printf("\"%.*s\"", (int)n->s.len, n->s.str); break; case CmdArg_Array: printf("["); for (int i = 0; i < n->a.len; i++) { CmdArg_Print(n->a.args[i], 0); if (i < n->a.len - 1) printf(","); } printf("]"); break; case CmdArg_Object: printf("{\n"); for (int i = 0; i < n->a.len; i++) { pad(depth + 2); printf("%s: =>", n->obj.entries[i].k); CmdArg_Print(n->obj.entries[i].v, depth + 2); printf("\n"); } pad(depth); printf("}\n"); break; case CmdArg_Flag: printf(n->b ? "TRUE" : "FALSE"); break; case CmdArg_NullPtr: printf("NULL"); break; } } static inline CmdArg *NewCmdArg(CmdArgType t) { CmdArg *ret = malloc(sizeof(CmdArg)); ret->type = t; return ret; } static CmdArg *NewCmdString(const char *s, size_t len) { CmdArg *ret = NewCmdArg(CmdArg_String); ret->s = (CmdString){.str = strdup(s), .len = len}; return ret; } static CmdArg *NewCmdInteger(long long i) { CmdArg *ret = NewCmdArg(CmdArg_Integer); ret->i = i; return ret; } static CmdArg *NewCmdDouble(double d) { CmdArg *ret = NewCmdArg(CmdArg_Double); ret->d = d; return ret; } static CmdArg *NewCmdFlag(int val) { CmdArg *ret = NewCmdArg(CmdArg_Flag); ret->b = val; return ret; } static CmdArg *NewCmdArray(size_t cap) { CmdArg *ret = NewCmdArg(CmdArg_Array); ret->a.cap = cap; ret->a.len = 0; ret->a.args = calloc(cap, sizeof(CmdArg *)); return ret; } static CmdArg *NewCmdObject(size_t cap) { CmdArg *ret = NewCmdArg(CmdArg_Object); ret->obj = (CmdObject){ .entries = calloc(cap, sizeof(CmdKeyValue)), .cap = cap, .len = 0, }; return ret; } /* return 1 if a flag with a given name exists in parent and is set to true */ int CmdArg_GetFlag(CmdArg *parent, const char *flag) { CmdArg *f = CmdArg_FirstOf(parent, flag); if (f && f->type == CmdArg_Flag) { return f->b; } return 0; } void CmdArg_Free(CmdArg *arg) { switch (arg->type) { case CmdArg_String: free(arg->s.str); break; case CmdArg_Object: for (size_t i = 0; i < arg->obj.len; i++) { CmdArg_Free(arg->obj.entries[i].v); } free(arg->obj.entries); break; case CmdArg_Array: for (size_t i = 0; i < arg->a.len; i++) { CmdArg_Free(arg->a.args[i]); } free(arg->a.args); break; default: break; } free(arg); } static int CmdObj_Set(CmdObject *obj, const char *key, CmdArg *val, int unique) { // if we enforce uniqueness, fail on duplicate records if (unique) { for (size_t i = 0; i < obj->len; i++) { if (!strcasecmp(key, obj->entries[i].k)) { return CMDPARSE_ERR; } } } if (obj->len + 1 > obj->cap) { obj->cap += obj->cap ? obj->cap : 2; obj->entries = realloc(obj->entries, obj->cap * sizeof(CmdKeyValue)); } obj->entries[obj->len++] = (CmdKeyValue){.k = key, .v = val}; return CMDPARSE_OK; } static int CmdArray_Append(CmdArray *arr, CmdArg *val) { if (arr->len == arr->cap) { arr->cap += arr->cap ? arr->cap : 2; arr->args = realloc(arr->args, arr->cap * sizeof(CmdArg *)); } arr->args[arr->len++] = val; return CMDPARSE_OK; } static CmdSchemaElement *newSchemaElement(CmdSchemaElementType type) { CmdSchemaElement *ret = calloc(1, sizeof(*ret)); ret->type = type; ret->validator = NULL; ret->validatorCtx = NULL; return ret; } static CmdSchemaNode *NewSchemaNode(CmdSchemaNodeType type, const char *name, CmdSchemaElement *element, CmdSchemaFlags flags, const char *help) { CmdSchemaNode *ret = malloc(sizeof(*ret)); *ret = (CmdSchemaNode){ .val = element, .flags = flags, .type = type, .name = name, .edges = NULL, .size = 0, .help = help, }; return ret; } static int cmdSchema_addChild(CmdSchemaNode *parent, CmdSchemaNode *child) { // make sure we are not adding anything after a variadic vector if (parent->size > 0 && parent->edges[parent->size - 1]->val && parent->edges[parent->size - 1]->val->type == CmdSchemaElement_Variadic) { return CMDPARSE_ERR; } parent->size++; parent->edges = realloc(parent->edges, parent->size * sizeof(CmdSchemaNode *)); parent->edges[parent->size - 1] = child; return CMDPARSE_OK; } int cmdSchema_genericAdd(CmdSchemaNode *s, CmdSchemaNodeType type, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags, const char *help) { if (s->type != CmdSchemaNode_Schema) { return CMDPARSE_ERR; } return cmdSchema_addChild(s, NewSchemaNode(type, param, elem, flags, help)); } int CmdSchema_AddNamed(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags) { return cmdSchema_genericAdd(s, CmdSchemaNode_NamedArg, param, elem, flags, NULL); } int CmdSchema_AddPostional(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags) { return cmdSchema_genericAdd(s, CmdSchemaNode_PositionalArg, param, elem, flags, NULL); } int CmdSchema_AddNamedWithHelp(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags, const char *help) { return cmdSchema_genericAdd(s, CmdSchemaNode_NamedArg, param, elem, flags, help); } int CmdSchema_AddPostionalWithHelp(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags, const char *help) { return cmdSchema_genericAdd(s, CmdSchemaNode_PositionalArg, param, elem, flags, help); } CmdSchemaElement *CmdSchema_Validate(CmdSchemaElement *e, CmdArgValidatorFunc f, void *privdata) { e->validator = f; e->validatorCtx = privdata; return e; } CmdSchemaElement *CmdSchema_NewTuple(const char *fmt, const char **names) { CmdSchemaElement *ret = newSchemaElement(CmdSchemaElement_Tuple); ret->tup.fmt = fmt; ret->tup.names = names; return ret; } CmdSchemaElement *CmdSchema_NewArg(const char type) { CmdSchemaElement *ret = newSchemaElement(CmdSchemaElement_Arg); ret->arg.type = type; return ret; } CmdSchemaElement *CmdSchema_NewArgAnnotated(const char type, const char *name) { CmdSchemaElement *ret = CmdSchema_NewArg(type); ret->arg.name = name; return ret; } CmdSchemaElement *CmdSchema_NewVector(const char type) { CmdSchemaElement *ret = newSchemaElement(CmdSchemaElement_Vector); ret->vec.type = type; return ret; } CmdSchemaElement *CmdSchema_NewVariadicVector(const char *fmt) { CmdSchemaElement *ret = newSchemaElement(CmdSchemaElement_Variadic); ret->var.fmt = fmt; return ret; } CmdSchemaElement *CmdSchema_NewOption(int num, const char **opts) { CmdSchemaElement *ret = newSchemaElement(CmdSchemaElement_Option); ret->opt.num = num; ret->opt.opts = opts; return ret; } // CmdSchemaElement *CmdSchema_NewOption(int num, ...) {} // CmdSchemaElement *NewFlag(int deflt); // CmdSchemaElement *CmdSchema_NewVariadicVector(const char **fmt); CmdSchemaNode *NewSchema(const char *name, const char *help) { CmdSchemaNode *ret = NewSchemaNode(CmdSchemaNode_Schema, name, NULL, 0, help); return ret; } int CmdSchema_AddFlag(CmdSchemaNode *parent, const char *name) { CmdSchemaNode *ret = NewSchemaNode( CmdSchemaNode_Flag, name, newSchemaElement(CmdSchemaElement_Flag), CmdSchema_Optional, NULL); cmdSchema_addChild(parent, ret); return CMDPARSE_OK; } int CmdSchema_AddFlagWithHelp(CmdSchemaNode *parent, const char *name, const char *help) { CmdSchemaNode *ret = NewSchemaNode( CmdSchemaNode_Flag, name, newSchemaElement(CmdSchemaElement_Flag), CmdSchema_Optional, help); cmdSchema_addChild(parent, ret); return CMDPARSE_OK; } CmdSchemaNode *CmdSchema_AddSubSchema(CmdSchemaNode *parent, const char *param, int flags, const char *help) { CmdSchemaNode *ret = NewSchemaNode(CmdSchemaNode_Schema, param, NULL, flags, help); parent->size++; parent->edges = realloc(parent->edges, parent->size * sizeof(CmdSchemaNode *)); parent->edges[parent->size - 1] = ret; return ret; } const char *typeString(char t) { switch (t) { case 's': return "string"; case 'l': return "integer"; case 'd': return "double"; default: return "INVALID TYPE"; } } void CmdSchemaElement_Print(const char *name, CmdSchemaElement *e) { switch (e->type) { case CmdSchemaElement_Arg: printf("{%s:%s}", e->arg.name ? e->arg.name : name, typeString(e->arg.type)); break; case CmdSchemaElement_Tuple: { for (int i = 0; i < strlen(e->tup.fmt); i++) { printf("{%s:%s} ", e->tup.names ? e->tup.names[i] : "arg", typeString(e->tup.fmt[i])); } break; } case CmdSchemaElement_Variadic: { for (int i = 0; i < strlen(e->var.fmt); i++) { printf("{%s} ", typeString(e->var.fmt[i])); } printf("..."); break; } case CmdSchemaElement_Vector: printf("{nargs:integer} {%s} ...", typeString(e->vec.type)); break; case CmdSchemaElement_Flag: printf("{%s}", name); break; case CmdSchemaElement_Option: { for (int i = 0; i < e->opt.num; i++) { printf("%s", e->opt.opts[i]); if (i < e->opt.num - 1) printf("|"); } break; } } } void CmdSchemaNode_Print(CmdSchemaNode *n, int depth) { pad(depth); if (n->flags & CmdSchema_Optional) { putchar('['); } switch (n->type) { case CmdSchemaNode_NamedArg: printf("%s ", n->name); CmdSchemaElement_Print(n->name, n->val); break; case CmdSchemaNode_PositionalArg: CmdSchemaElement_Print(n->name, n->val); break; case CmdSchemaNode_Schema: printf("%s\n", n->name); for (int i = 0; i < n->size; i++) { CmdSchemaNode_Print(n->edges[i], depth + 2); } pad(depth); break; case CmdSchemaNode_Flag: printf("%s", n->name); break; } if (n->flags & CmdSchema_Optional) { putchar(']'); } if (n->flags & CmdSchema_Repeating) { printf(" ... "); } if (n->help) { printf(" (%s)", n->help); } putchar('\n'); } void CmdSchema_Print(CmdSchemaNode *n) { CmdSchemaNode_Print(n, 0); } static int CmdSchemaNode_Match(CmdSchemaNode *n, CmdString *token) { switch (n->type) { case CmdSchemaNode_NamedArg: case CmdSchemaNode_Schema: case CmdSchemaNode_Flag: return CmdString_CaseEquals(token, n->name); case CmdSchemaNode_PositionalArg: { // Try to match optional positional args if (n->val && n->val->type == CmdSchemaElement_Option) { for (int i = 0; i < n->val->opt.num; i++) { if (CmdString_CaseEquals(token, n->val->opt.opts[i])) return 1; } return 0; } // all other positional args match return 1; } } return 0; } void CmdSchemaNode_Free(CmdSchemaNode *n) { if (n->type == CmdSchemaNode_Schema) { for (int i = 0; i < n->size; i++) { CmdSchemaNode_Free(n->edges[i]); } free(n->edges); } free(n->val); free(n); } typedef enum { CmdParser_New = 0x00, CmdParser_Visited = 0x01, CmdParser_Blocked = 0x02, } CmdParserStateFlags; typedef struct CmdParserCtx { CmdSchemaNode *node; CmdParserStateFlags *edgeFlags; } CmdParserCtx; static int parseInt(const char *arg, long long *val) { char *e = NULL; *val = strtoll(arg, &e, 10); errno = 0; if ((errno == ERANGE && (*val == LONG_MAX || *val == LONG_MIN)) || (errno != 0 && *val == 0) || *e != '\0') { *val = -1; return 0; } return 1; } static int parseDouble(const char *arg, double *d) { char *e; *d = strtod(arg, &e); errno = 0; if ((errno == ERANGE && (*d == HUGE_VAL || *d == -HUGE_VAL)) || (errno != 0 && *d == 0) || *e != '\0') { return 0; } return 1; } int typedParse(CmdArg **node, CmdString *arg, char type, char **err) { switch (type) { case 's': *node = NewCmdString(arg->str, arg->len); break; case 'l': { long long i; if (!parseInt(arg->str, &i)) { asprintf(err, "Could not parse int value '%s'", arg->str); return CMDPARSE_ERR; } *node = NewCmdInteger(i); break; } case 'd': { double d; if (!parseDouble(arg->str, &d)) { asprintf(err, "Could not parse double value '%s'", arg->str); return CMDPARSE_ERR; } *node = NewCmdDouble(d); break; } default: asprintf(err, "Invalid type specifier '%c'", type); return CMDPARSE_ERR; } return CMDPARSE_OK; } int CmdArg_ParseDouble(CmdArg *arg, double *d) { if (!arg) return 0; switch (arg->type) { case CmdArg_Double: *d = arg->d; return 1; case CmdArg_Integer: *d = (double)arg->i; case CmdArg_String: return parseDouble(arg->s.str, d); default: return 0; } } int CmdArg_ParseInt(CmdArg *arg, int64_t *i) { if (!arg) return 0; switch (arg->type) { case CmdArg_Double: *i = round(arg->d); return 1; case CmdArg_Integer: *i = arg->i; case CmdArg_String: { long long ii; int rc = parseInt(arg->s.str, &ii); if (rc) *i = ii; return rc; } default: return 0; } } #define CMDPARSE_CHECK_POS(pos, argc, err, msg) \ { \ if (pos >= argc) { \ *err = strdup(msg ? msg : "Insufficient Arguments"); \ return CMDPARSE_ERR; \ } \ } static int parseArg(CmdSchemaArg *arg, CmdArg **current, CmdString *argv, int argc, int *pos, char **err) { CMDPARSE_CHECK_POS(*pos, argc, err, NULL); int rc = typedParse(current, &argv[*pos], arg->type, err); if (rc == CMDPARSE_OK) (*pos)++; return rc; } static int parseTuple(CmdSchemaTuple *tup, CmdArg **current, CmdString *argv, int argc, int *pos, char **err) { size_t len = strlen(tup->fmt); CMDPARSE_CHECK_POS(*pos + len - 1, argc, err, "Tuple length out of range"); CmdArg *t = NewCmdArray(len); for (size_t i = 0; i < len; i++) { CmdArg *arg = NULL; if (CMDPARSE_ERR == typedParse(&arg, &argv[*pos], tup->fmt[i], err)) { CmdArg_Free(t); return CMDPARSE_ERR; } CmdArray_Append(&t->a, arg); (*pos)++; } *current = t; return CMDPARSE_OK; } static int parseVector(CmdSchemaVector *vec, CmdArg **current, CmdString *argv, int argc, int *pos, char **err) { CMDPARSE_CHECK_POS(*pos, argc, err, "Vector length out of range"); long long vlen = 0; if (!parseInt(argv[*pos].str, &vlen)) { asprintf(err, "Invalid vector length token '%s'", argv[*pos].str); return CMDPARSE_ERR; } if (vlen < 0 || *pos + vlen >= argc) { asprintf(err, "Invalid or out of range vector length: %lld", vlen); return CMDPARSE_ERR; } (*pos)++; CmdArg *t = NewCmdArray(vlen); for (size_t i = 0; i < vlen; i++) { CmdArg *n; if (CMDPARSE_ERR == typedParse(&n, &argv[*pos], vec->type, err)) { CmdArg_Free(t); return CMDPARSE_ERR; } CmdArray_Append(&t->a, n); (*pos)++; } *current = t; return CMDPARSE_OK; } static int parseVariadicVector(CmdSchemaVariadic *var, CmdArg **current, CmdString *argv, int argc, int *pos, char **err) { CMDPARSE_CHECK_POS(*pos, argc, err, NULL); int len = strlen(var->fmt); CmdArg *t = NewCmdArray((1 + argc - *pos) / len); while (*pos + len <= argc) { CmdArg *elem = len > 1 ? NewCmdArray(len) : NULL; for (int i = 0; i < len && *pos < argc; i++) { CmdArg *n; if (CMDPARSE_ERR == typedParse(&n, &argv[*pos], var->fmt[i], err)) { if (elem) CmdArg_Free(elem); CmdArg_Free(t); return CMDPARSE_ERR; } CmdArray_Append(elem ? &elem->a : &t->a, n); (*pos)++; } if (elem) { CmdArray_Append(&t->a, elem); } } *current = t; return CMDPARSE_OK; } static int processFlag(int flagVal, CmdArg **current, CmdString *argv, int argc, int *pos, char **err) { CMDPARSE_CHECK_POS(*pos, argc, err, NULL); (*pos)++; *current = NewCmdFlag(flagVal); return CMDPARSE_OK; } static int processOption(CmdSchemaOption *opt, CmdArg **current, CmdString *argv, int argc, int *pos, char **err) { CMDPARSE_CHECK_POS(*pos, argc, err, NULL); *current = NewCmdString(argv[*pos].str, argv[*pos].len); (*pos)++; return CMDPARSE_OK; } static int cmdParser_ProcessElement(CmdSchemaElement *elem, CmdArg **out, CmdString *argv, int argc, int *pos, char **err) { int rc = CMDPARSE_ERR; switch (elem->type) { case CmdSchemaElement_Arg: rc = parseArg(&elem->arg, out, argv, argc, pos, err); break; case CmdSchemaElement_Tuple: rc = parseTuple(&elem->tup, out, argv, argc, pos, err); break; case CmdSchemaElement_Vector: rc = parseVector(&elem->vec, out, argv, argc, pos, err); break; case CmdSchemaElement_Flag: rc = processFlag(1, out, argv, argc, pos, err); break; case CmdSchemaElement_Option: rc = processOption(&elem->opt, out, argv, argc, pos, err); break; case CmdSchemaElement_Variadic: rc = parseVariadicVector(&elem->var, out, argv, argc, pos, err); break; } if (rc == CMDPARSE_ERR) return rc; // if needed - validate the element if (elem->validator) { if (!elem->validator(*out, elem->validatorCtx)) { asprintf(err, "Validation failed at offset %d near '%s'", *pos, argv[*pos - 1].str); return CMDPARSE_ERR; } } return CMDPARSE_OK; } static int cmdArg_AddChild(CmdArg *parent, const char *name, CmdArg *child, char **err) { switch (parent->type) { case CmdArg_Object: return CmdObj_Set(&parent->obj, name, child, 0); case CmdArg_Array: return CmdArray_Append(&parent->a, child); default: { asprintf(err, "Cannot add child to node of type %d", parent->type); return CMDPARSE_ERR; } } return CMDPARSE_OK; } static int cmdParser_Parse(CmdSchemaNode *node, CmdArg **parent, CmdString *argv, int argc, int *pos, char **err, int depth) { // this is the root schema // skipe the node name if it's named if (node->type == CmdSchemaNode_NamedArg || node->type == CmdSchemaNode_Schema) { (*pos)++; } CmdArg *current = NULL; if (node->val) { // Parse the node value. This should consume tokens from the input array if (CMDPARSE_ERR == cmdParser_ProcessElement(node->val, ¤t, argv, argc, pos, err)) { if (current) CmdArg_Free(current); return CMDPARSE_ERR; } // Add the current node to the parent if (current) { if (CMDPARSE_ERR == cmdArg_AddChild(*parent, node->name, current, err)) { if (current) CmdArg_Free(current); return CMDPARSE_ERR; } } } if (node->type == CmdSchemaNode_Schema) { if (*parent) { current = NewCmdObject(1); // for sub-schemas - we append the schema to if (CMDPARSE_ERR == cmdArg_AddChild(*parent, node->name, current, err)) { CmdArg_Free(current); return CMDPARSE_ERR; } } else { // if this is the first layer of parsing - start from current and set parent to it *parent = NewCmdObject(1); current = *parent; } } // continue to parse any remaining transitional states until we consume the entire input array CmdParserStateFlags sf[node->size]; int minEdge = 0; memset(sf, 0, sizeof(sf)); while (*pos < argc) { // scan the next token CmdString *tok = &argv[*pos]; int found = 0; // find the first appropriate matching node for (int i = minEdge; i < node->size; i++) { // skip nodes we can't process anymore if (sf[i] & CmdParser_Blocked) continue; CmdSchemaNode *edge = node->edges[i]; if (CmdSchemaNode_Match(edge, tok)) { found = 1; // if parsing failed - just return immediately if (CMDPARSE_ERR == cmdParser_Parse(edge, ¤t, argv, argc, pos, err, depth + 2)) { return CMDPARSE_ERR; } // mark the node as visited sf[i] |= CmdParser_Visited; // if we got to a non repeating edge, make sure we do not enter it again if (!(edge->flags & CmdSchema_Repeating)) { sf[i] |= CmdParser_Blocked; } // If we just consumed a positional arg, we can't look for the next state behind it if (edge->type == CmdSchemaNode_PositionalArg) { minEdge = i + 1; } // continue scanning from the first valid position again break; } } if (!found) { goto end; } } end: // check that all the required nodes have been visited! for (int i = 0; i < node->size; i++) { CmdSchemaNode *edge = node->edges[i]; if (edge->flags & CmdSchema_Required && !(sf[i] & CmdParser_Visited)) { // set an error indicating the first missed required argument asprintf(err, "Missing required argument '%s' in '%s'", node->edges[i]->name, node->name); return CMDPARSE_ERR; } // find unvisited flags and "pseudo visit" them as value 0 if (edge->type == CmdSchemaNode_Flag && !(sf[i] & CmdParser_Visited)) { if (CMDPARSE_ERR == cmdArg_AddChild(current, edge->name, NewCmdFlag(0), err)) { return CMDPARSE_ERR; } } } // all is okay! return CMDPARSE_OK; } int CmdParser_ParseCmd(CmdSchemaNode *schema, CmdArg **arg, CmdString *argv, int argc, char **err, int strict) { int pos = 0; *arg = NULL; *err = NULL; if (CMDPARSE_ERR == cmdParser_Parse(schema, arg, argv, argc, &pos, err, 0)) { if (*arg) CmdArg_Free(*arg); *arg = NULL; return CMDPARSE_ERR; } if (strict && pos < argc) { asprintf(err, "Extra arguments not parsed. Only %d of %d args parsed", pos, argc); if (*arg) CmdArg_Free(*arg); *arg = NULL; return CMDPARSE_ERR; } return CMDPARSE_OK; } int CmdParser_ParseRedisModuleCmd(CmdSchemaNode *schema, CmdArg **cmd, RedisModuleString **argv, int argc, char **err, int strict) { CmdString *args = calloc(argc, sizeof(CmdString)); for (int i = 0; i < argc; i++) { size_t len; const char *arg = RedisModule_StringPtrLen(argv[i], &len); args[i] = (CmdString){.str = (char *)arg, .len = len}; } int rc = CmdParser_ParseCmd(schema, cmd, args, argc, err, strict); free(args); return rc; } CmdString *CmdParser_NewArgListV(size_t size, ...) { va_list ap; va_start(ap, size); CmdString *ret = calloc(size, sizeof(CmdString)); for (size_t i = 0; i < size; i++) { const char *arg = va_arg(ap, const char *); ret[i] = CMD_STRING((char *)arg); } va_end(ap); return ret; } CmdString *CmdParser_NewArgListC(const char **argv, size_t argc) { CmdString *ret = calloc(argc, sizeof(CmdString)); for (size_t i = 0; i < argc; i++) { ret[i] = CMD_STRING((char *)argv[i]); } return ret; } CmdArgIterator CmdArg_Select(CmdArg *arg, const char *key) { return (CmdArgIterator){ .arg = arg, .key = key, .pos = 0, }; } CmdArgIterator CmdArg_Children(CmdArg *arg) { return (CmdArgIterator){ .arg = arg, .key = NULL, .pos = 0, }; } CmdArg *CmdArgIterator_Next(CmdArgIterator *it, const char **key) { switch (it->arg->type) { case CmdArg_Object: { CmdObject *obj = &it->arg->obj; while (it->pos < obj->len) { if (it->key == NULL || !strcasecmp(it->key, obj->entries[it->pos].k)) { if (key) { *key = obj->entries[it->pos].k; } return obj->entries[it->pos++].v; } it->pos++; } break; } case CmdArg_Array: { CmdArray *arr = &it->arg->a; if (it->pos < arr->len) { if (key) { *key = NULL; } return arr->args[it->pos++]; } break; } default: break; } return NULL; } CmdArg *CmdArg_FirstOf(CmdArg *arg, const char *key) { if (arg->type != CmdArg_Object) return NULL; for (size_t i = 0; i < arg->obj.len; i++) { if (!strcasecmp(key, arg->obj.entries[i].k)) { return arg->obj.entries[i].v; } } return NULL; } /* count the number of children of an object that correspond to a specific key */ size_t CmdArg_Count(CmdArg *arg, const char *key) { if (arg->type != CmdArg_Object) return 0; size_t ret = 0; for (size_t i = 0; i < arg->obj.len; i++) { if (!strcasecmp(key, arg->obj.entries[i].k)) { ++ret; } } return ret; } size_t CmdArg_NumChildren(CmdArg *arg) { if (arg->type == CmdArg_Array) { return arg->a.len; } else if (arg->type == CmdArg_Object) { return arg->obj.len; } else { return 0; } } /* * - s: will be parsed as a string * - l: Will be parsed as a long integer * - d: Will be parsed as a double * - !: will be skipped * - ?: means evrything after is optional */ int CmdArg_ArrayAssign(CmdArray *arg, const char *fmt, ...) { va_list ap; va_start(ap, fmt); const char *p = fmt; size_t i = 0; int optional = 0; while (i < arg->len && *p) { switch (*p) { case 's': { char **ptr = va_arg(ap, char **); if (arg->args[i]->type != CmdArg_String) { goto err; } *ptr = CMDARG_STRPTR(arg->args[i]); break; } case 'l': { long long *lp = va_arg(ap, long long *); if (arg->args[i]->type != CmdArg_Integer) { goto err; } *lp = CMDARG_INT(arg->args[i]); break; } case 'd': { double *dp = va_arg(ap, double *); if (arg->args[i]->type != CmdArg_Double) { goto err; } *dp = CMDARG_DOUBLE(arg->args[i]); break; } case '!': // do nothing... break; case '?': optional = 1; // reduce i because it will be incremented soon i -= 1; break; default: goto err; } ++i; ++p; } // if we have stuff left to read in the format but we haven't gotten to the optional part -fail if (*p && !optional && i < arg->len) { printf("we have stuff left to read in the format but we haven't gotten to the optional part\n"); goto err; } // if we don't have anything left to read from the format but we haven't gotten to the array's // end, fail if (*p == 0 && i < arg->len) { printf("we haven't read all the arguments\n"); goto err; } va_end(ap); return CMDPARSE_OK; err: va_end(ap); return CMDPARSE_ERR; }RediSearch-1.2.2/src/rmutil/cmdparse.h000066400000000000000000000307251364126773500176240ustar00rootroot00000000000000#ifndef RMUTIL_CMDPARSE_ #define RMUTIL_CMDPARSE_ #include #include #define CMDPARSE_OK 0 #define CMDPARSE_ERR 1 typedef enum { CmdArg_Integer, CmdArg_Double, CmdArg_String, CmdArg_Array, CmdArg_Object, CmdArg_Flag, // this is a special type returned from type checks when the arg is null, and not really used CmdArg_NullPtr, } CmdArgType; struct CmdArg; typedef struct { char *str; size_t len; } CmdString; #define CMD_STRING(s) ((CmdString){.str = s, .len = strlen(s)}) int CmdString_CaseEquals(CmdString *str, const char *other); typedef struct { const char *k; struct CmdArg *v; } CmdKeyValue; typedef struct { size_t len; size_t cap; CmdKeyValue *entries; } CmdObject; typedef struct { size_t len; size_t cap; struct CmdArg **args; } CmdArray; // Variant value union typedef struct CmdArg { union { // numeric value double d; int64_t i; // boolean flag int b; // string value CmdString s; // array value CmdArray a; CmdObject obj; }; CmdArgType type; } CmdArg; void CmdArg_Free(CmdArg *arg); /* General signature for a command validator func. You can inject your own */ typedef int (*CmdArgValidatorFunc)(CmdArg *arg, void *ctx); /************************************************************************************************************************* * * Command Schema Definition Objects *************************************************************************************************************************/ /* Single typed argument in a schema. Can have the following type chars: * * - s: will be parsed as a string * - l: Will be parsed as a long integer * - d: Will be parsed as a double */ typedef struct { char type; const char *name; } CmdSchemaArg; /* dummy struct for flags - they don't need anything */ typedef struct { } CmdSchemaFlag; /* Command schema option - represents a multiple choice, mutually exclusive options */ typedef struct { /* The number of options */ int num; /* The option strings */ const char **opts; } CmdSchemaOption; /* Schema tuple - a fixed length array with known types */ typedef struct { /* Format string, containing s, l or d. The length of the tuple is the length of the format string */ const char *fmt; /* Element names - for help prints only */ const char **names; } CmdSchemaTuple; /* Schema vector - multiple elements (known only at run time by the first argument) with a single * type, either l, s or d */ typedef struct { char type; } CmdSchemaVector; typedef struct { const char *fmt; } CmdSchemaVariadic; /* Command schema element types */ typedef enum { CmdSchemaElement_Arg, CmdSchemaElement_Tuple, CmdSchemaElement_Vector, CmdSchemaElement_Flag, CmdSchemaElement_Option, CmdSchemaElement_Variadic, } CmdSchemaElementType; /* A single element in a command schema. */ typedef struct { union { CmdSchemaArg arg; CmdSchemaTuple tup; CmdSchemaVector vec; CmdSchemaFlag flag; CmdSchemaOption opt; CmdSchemaVariadic var; }; CmdSchemaElementType type; CmdArgValidatorFunc validator; void *validatorCtx; } CmdSchemaElement; /* Command schema node flags */ typedef enum { /* Required argument */ CmdSchema_Required = 0x01, /* Optional argument */ CmdSchema_Optional = 0x02, /* Repeating argument - my have more than one instance per schema */ CmdSchema_Repeating = 0x04, } CmdSchemaFlags; /* Schema node type. */ typedef enum { /* A schema or sub-schema object. This is the root of the command schema */ CmdSchemaNode_Schema, /* A position argument - it can only be parsed once, at a specific position */ CmdSchemaNode_PositionalArg, /* A named argument. It can appear anywhere, after the last positional argument */ CmdSchemaNode_NamedArg, /* A flag - an argument that may or may not appear, setting a boolean value to 0 or 1 */ CmdSchemaNode_Flag, } CmdSchemaNodeType; /* Schema nodes. Each node contains an element (apart from schema nodes). The node has its name * and flags, and the element defines how to parse the element this node contains */ typedef struct CmdSchemaNode { /* The value element conatined in this node. NULL for schema/sub-schema nodes */ CmdSchemaElement *val; /* Flags - required / optional and repeatable */ CmdSchemaFlags flags; /* The node type */ CmdSchemaNodeType type; /* The node name. Even positional nodes have names so we can refer to them */ const char *name; /* Optional help string to extract documentation */ const char *help; /* If this is a schema node, it may have edge nodes - other nodes that may be traversed from it. */ struct CmdSchemaNode **edges; /* The number of edges */ int size; } CmdSchemaNode; /* Create a new named schema with a given help message (can be left NULL) */ CmdSchemaNode *NewSchema(const char *name, const char *help); void CmdSchemaNode_Free(CmdSchemaNode *n); /* Add a named parameter to a schema or sub-schema, with a given name, and an element which can be a * value, tuple, vector or option. Flags can indicate unique/repeating, or optional arg */ int CmdSchema_AddNamed(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags); /* Add a positional parameter to a schema or sub-schema, with a given name, and an element which can * be a value, tuple, vector or option. Flags can indicate unique/repeating, or optional arg. A * positional argument has a name so it can referenced when accessing the parsed document */ int CmdSchema_AddPostional(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags); /* Add named with a help message */ int CmdSchema_AddNamedWithHelp(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags, const char *help); /* Add a positional with a help message */ int CmdSchema_AddPostionalWithHelp(CmdSchemaNode *s, const char *param, CmdSchemaElement *elem, CmdSchemaFlags flags, const char *help); /* Create a new tuple schema element to be added as a named/positional. The format string can be * composed of the letters d (double), l (long) or s (string). The expected length of the tuple is * the length of the format string */ CmdSchemaElement *CmdSchema_NewTuple(const char *fmt, const char **names); /* Wrap a schema element with a validator func. Only one validator per element allowed */ CmdSchemaElement *CmdSchema_Validate(CmdSchemaElement *e, CmdArgValidatorFunc f, void *privdata); /* Create a new single argument (string, long or double) to be added as a named or positional. The * type char can be d (double), l (long) or s (string) */ CmdSchemaElement *CmdSchema_NewArg(const char type); /* Samve as CmdSchema_NewArg, but with a name annotation for help messages */ CmdSchemaElement *CmdSchema_NewArgAnnotated(const char type, const char *name); /* Create a new vector to be added as a named or positional argument. A vector is a list of values * of the same type that starts with a length specifier (i.e. 3 foo bar baz) */ CmdSchemaElement *CmdSchema_NewVector(const char type); /* Add a variadic vector. This can only be added at the end of the command */ CmdSchemaElement *CmdSchema_NewVariadicVector(const char *fmt); /* Create a new option between mutually exclusive string values, to be added as a named/positional */ CmdSchemaElement *CmdSchema_NewOption(int num, const char **opts); /* Add a flag - which is a boolean optional value. If the flag exists in the arguments, the value is * set to 1, else to 0 */ int CmdSchema_AddFlag(CmdSchemaNode *parent, const char *name); /* Add a flag with a help message */ int CmdSchema_AddFlagWithHelp(CmdSchemaNode *parent, const char *name, const char *help); /* Add a sub schema - that is a complex schema with arguments that can reside under another command */ CmdSchemaNode *CmdSchema_AddSubSchema(CmdSchemaNode *parent, const char *param, int flags, const char *help); void CmdSchema_Print(CmdSchemaNode *n); void CmdArg_Print(CmdArg *n, int depth); /* Parse a list of arguments using a command schema. If a parsing error occurs, CMDPARSE_ERR is * returned and an error string is put into err. Note that it is a newly allocated string that needs * to be freed. If strict is 1, we make sure that all arguments have been consumed. Strict set to 0 * means we can do partial parsing */ int CmdParser_ParseCmd(CmdSchemaNode *schema, CmdArg **arg, CmdString *argv, int argc, char **err, int strict); /* Parse a list of redis module arguments using a command schema. If a parsing error occurs, * CMDPARSE_ERR is returned and an error string is put into err. Note that err is a newly allocated * string that needs to be freed. If strict is 1, we make sure that all arguments have been * consumed. Strict set to 0 means we can do partial parsing */ int CmdParser_ParseRedisModuleCmd(CmdSchemaNode *schema, CmdArg **cmd, RedisModuleString **argv, int argc, char **err, int strict); /* Convert a variadic list of strings to an array of command strings. Does not do extra * reallocations, so only the array itself needs to be freed */ CmdString *CmdParser_NewArgListV(size_t size, ...); /* Convert an array of C NULL terminated strings to an arg list. Does not do extra * reallocations, so only the array itself needs to be freed */ CmdString *CmdParser_NewArgListC(const char **args, size_t size); typedef struct { CmdArg *arg; const char *key; size_t pos; } CmdArgIterator; /* Return the number of children for arrays and objects, 0 for all others */ size_t CmdArg_NumChildren(CmdArg *arg); /* count the number of children of an object that correspond to a specific key */ size_t CmdArg_Count(CmdArg *arg, const char *key); /* Create an iterator of all children of an object node, named as key. If none exist, the first call * to Next() will return NULL */ CmdArgIterator CmdArg_Select(CmdArg *arg, const char *key); /* Create an iterator of all the children of an objet or array node */ CmdArgIterator CmdArg_Children(CmdArg *arg); /* Parse an argument as a double. Argument may already be a double or an int in which case it gets * returned, or a string in which case we try to parse it. Returns 1 if the conversion/parsing was * successful, 0 if not */ int CmdArg_ParseDouble(CmdArg *arg, double *d); /* return 1 if a flag with a given name exists in parent and is set to true */ int CmdArg_GetFlag(CmdArg *parent, const char *flag); /* Parse an argument as a integer. Argument may already be a int or a double in which case it * gets returned, or a string in which case we try to parse it. Returns 1 if the * conversion/parsing was successful, 0 if not */ int CmdArg_ParseInt(CmdArg *arg, int64_t *i); #define CMDARG_TYPE(arg) (arg ? arg->type : CmdArg_NullPtr) #define CMDARRAY_ELEMENT(arr, i) (arr->args[i]) #define CMDARRAY_LENGTH(arr) (arr->len) #define CMDARG_INT(a) (a->i) #define CMDARG_DOUBLE(a) (a->d) #define CMDARG_STR(a) (a->s) #define CMDARG_ORNULL(a, expr) (a ? expr(a) : NULL) #define CMDARG_STRLEN(a) (a->s.len) #define CMDARG_STRPTR(a) (a->s.str) #define CMDARG_STRLEN(a) (a->s.len) #define CMDARG_ARR(arr) (arr->a) #define CMDARG_OBJ(a) (a->obj) #define CMDARG_OBJLEN(arg) (arg->obj.len) #define CMDARG_OBJCHILD(arg, n) (&arg->obj.entries[n]) #define CMDARG_BOOL(a) (a->b) #define CMDARG_ARRLEN(arg) (arg->a.len) #define CMDARG_ARRELEM(arg, i) (arg->a.args[i]) int CmdArg_ArrayAssign(CmdArray *arg, const char *fmt, ...); /* Advane an iterator. Return NULL if the no objects can be read from the iterator */ CmdArg *CmdArgIterator_Next(CmdArgIterator *it, const char **key); /* Return the fist child of an object node that is named as key, NULL if this is not an object or no * such child exists */ CmdArg *CmdArg_FirstOf(CmdArg *, const char *key); /* Convenience macro for iterating all children of an object arg with a given expression - either a * function call or a code block. arg is the command arg we're iterating, key is the selection. The * resulting argument in the loop is always called "result" */ #define CMD_FOREACH_SELECT(arg, key, blk) \ { \ CmdArgIterator it = CmdArg_Select(arg, key); \ CmdArg *result = NULL; \ while (NULL != (result = CmdArgIterator_Next(&it, NULL))) { \ blk; \ } \ } #endifRediSearch-1.2.2/src/rmutil/heap.c000066400000000000000000000064671364126773500167440ustar00rootroot00000000000000#include "heap.h" /* Byte-wise swap two items of size SIZE. */ #define SWAP(a, b, size) \ do { \ register size_t __size = (size); \ register char *__a = (a), *__b = (b); \ do { \ char __tmp = *__a; \ *__a++ = *__b; \ *__b++ = __tmp; \ } while (--__size > 0); \ } while (0) char *__vector_GetPtr(Vector *v, size_t pos) { return v->data + (pos * v->elemSize); } void __sift_up(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)) { size_t len = last - first; if (len > 1) { len = (len - 2) / 2; size_t ptr = first + len; if (cmp(__vector_GetPtr(v, ptr), __vector_GetPtr(v, --last)) < 0) { char t[v->elemSize]; memcpy(t, __vector_GetPtr(v, last), v->elemSize); do { memcpy(__vector_GetPtr(v, last), __vector_GetPtr(v, ptr), v->elemSize); last = ptr; if (len == 0) break; len = (len - 1) / 2; ptr = first + len; } while (cmp(__vector_GetPtr(v, ptr), t) < 0); memcpy(__vector_GetPtr(v, last), t, v->elemSize); } } } void __sift_down(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *), size_t start) { // left-child of __start is at 2 * __start + 1 // right-child of __start is at 2 * __start + 2 size_t len = last - first; size_t child = start - first; if (len < 2 || (len - 2) / 2 < child) return; child = 2 * child + 1; if ((child + 1) < len && cmp(__vector_GetPtr(v, first + child), __vector_GetPtr(v, first + child + 1)) < 0) { // right-child exists and is greater than left-child ++child; } // check if we are in heap-order if (cmp(__vector_GetPtr(v, first + child), __vector_GetPtr(v, start)) < 0) // we are, __start is larger than it's largest child return; char top[v->elemSize]; memcpy(top, __vector_GetPtr(v, start), v->elemSize); do { // we are not in heap-order, swap the parent with it's largest child memcpy(__vector_GetPtr(v, start), __vector_GetPtr(v, first + child), v->elemSize); start = first + child; if ((len - 2) / 2 < child) break; // recompute the child based off of the updated parent child = 2 * child + 1; if ((child + 1) < len && cmp(__vector_GetPtr(v, first + child), __vector_GetPtr(v, first + child + 1)) < 0) { // right-child exists and is greater than left-child ++child; } // check if we are in heap-order } while (cmp(__vector_GetPtr(v, first + child), top) >= 0); memcpy(__vector_GetPtr(v, start), top, v->elemSize); } void Make_Heap(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)) { if (last - first > 1) { // start from the first parent, there is no need to consider children for (int start = (last - first - 2) / 2; start >= 0; --start) { __sift_down(v, first, last, cmp, first + start); } } } inline void Heap_Push(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)) { __sift_up(v, first, last, cmp); } inline void Heap_Pop(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)) { if (last - first > 1) { SWAP(__vector_GetPtr(v, first), __vector_GetPtr(v, --last), v->elemSize); __sift_down(v, first, last, cmp, first); } } RediSearch-1.2.2/src/rmutil/heap.h000066400000000000000000000037431364126773500167430ustar00rootroot00000000000000#ifndef __HEAP_H__ #define __HEAP_H__ #include "vector.h" /* Make heap from range * Rearranges the elements in the range [first,last) in such a way that they form a heap. * A heap is a way to organize the elements of a range that allows for fast retrieval of the element with the highest * value at any moment (with pop_heap), even repeatedly, while allowing for fast insertion of new elements (with * push_heap). * The element with the highest value is always pointed by first. The order of the other elements depends on the * particular implementation, but it is consistent throughout all heap-related functions of this header. * The elements are compared using cmp. */ void Make_Heap(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)); /* Push element into heap range * Given a heap in the range [first,last-1), this function extends the range considered a heap to [first,last) by * placing the value in (last-1) into its corresponding location within it. * A range can be organized into a heap by calling make_heap. After that, its heap properties are preserved if elements * are added and removed from it using push_heap and pop_heap, respectively. */ void Heap_Push(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)); /* Pop element from heap range * Rearranges the elements in the heap range [first,last) in such a way that the part considered a heap is shortened * by one: The element with the highest value is moved to (last-1). * While the element with the highest value is moved from first to (last-1) (which now is out of the heap), the other * elements are reorganized in such a way that the range [first,last-1) preserves the properties of a heap. * A range can be organized into a heap by calling make_heap. After that, its heap properties are preserved if elements * are added and removed from it using push_heap and pop_heap, respectively. */ void Heap_Pop(Vector *v, size_t first, size_t last, int (*cmp)(void *, void *)); #endif //__HEAP_H__ RediSearch-1.2.2/src/rmutil/logging.h000066400000000000000000000006401364126773500174450ustar00rootroot00000000000000#ifndef __RMUTIL_LOGGING_H__ #define __RMUTIL_LOGGING_H__ /* Convenience macros for redis logging */ #define RM_LOG_DEBUG(ctx, ...) RedisModule_Log(ctx, "debug", __VA_ARGS__) #define RM_LOG_VERBOSE(ctx, ...) RedisModule_Log(ctx, "verbose", __VA_ARGS__) #define RM_LOG_NOTICE(ctx, ...) RedisModule_Log(ctx, "notice", __VA_ARGS__) #define RM_LOG_WARNING(ctx, ...) RedisModule_Log(ctx, "warning", __VA_ARGS__) #endifRediSearch-1.2.2/src/rmutil/periodic.c000066400000000000000000000046671364126773500176250ustar00rootroot00000000000000#include "periodic.h" #include #include #include typedef struct RMUtilTimer { RMutilTimerFunc cb; RMUtilTimerTerminationFunc onTerm; void *privdata; struct timespec interval; pthread_t thread; pthread_mutex_t lock; pthread_cond_t cond; } RMUtilTimer; static struct timespec timespecAdd(struct timespec *a, struct timespec *b) { struct timespec ret; ret.tv_sec = a->tv_sec + b->tv_sec; long long ns = a->tv_nsec + b->tv_nsec; ret.tv_sec += ns / 1000000000; ret.tv_nsec = ns % 1000000000; return ret; } static void *rmutilTimer_Loop(void *ctx) { RMUtilTimer *tm = ctx; int rc = ETIMEDOUT; struct timespec ts; pthread_mutex_lock(&tm->lock); while (rc != 0) { clock_gettime(CLOCK_REALTIME, &ts); struct timespec timeout = timespecAdd(&ts, &tm->interval); if ((rc = pthread_cond_timedwait(&tm->cond, &tm->lock, &timeout)) == ETIMEDOUT) { // Create a thread safe context if we're running inside redis RedisModuleCtx *rctx = NULL; if (RedisModule_GetThreadSafeContext) rctx = RedisModule_GetThreadSafeContext(NULL); // call our callback... if (!tm->cb(rctx, tm->privdata)) { break; } // If needed - free the thread safe context. // It's up to the user to decide whether automemory is active there if (rctx) RedisModule_FreeThreadSafeContext(rctx); } if (rc == EINVAL) { perror("Error waiting for condition"); break; } } // call the termination callback if needed if (tm->onTerm != NULL) { tm->onTerm(tm->privdata); } // free resources associated with the timer pthread_cond_destroy(&tm->cond); free(tm); return NULL; } /* set a new frequency for the timer. This will take effect AFTER the next trigger */ void RMUtilTimer_SetInterval(struct RMUtilTimer *t, struct timespec newInterval) { t->interval = newInterval; } RMUtilTimer *RMUtil_NewPeriodicTimer(RMutilTimerFunc cb, RMUtilTimerTerminationFunc onTerm, void *privdata, struct timespec interval) { RMUtilTimer *ret = malloc(sizeof(*ret)); *ret = (RMUtilTimer){ .privdata = privdata, .interval = interval, .cb = cb, .onTerm = onTerm, }; pthread_cond_init(&ret->cond, NULL); pthread_mutex_init(&ret->lock, NULL); pthread_create(&ret->thread, NULL, rmutilTimer_Loop, ret); return ret; } int RMUtilTimer_Terminate(struct RMUtilTimer *t) { return pthread_cond_signal(&t->cond); } RediSearch-1.2.2/src/rmutil/periodic.h000066400000000000000000000042361364126773500176220ustar00rootroot00000000000000#ifndef RMUTIL_PERIODIC_H_ #define RMUTIL_PERIODIC_H_ #include #include /** periodic.h - Utility periodic timer running a task repeatedly every given time interval */ /* RMUtilTimer - opaque context for the timer */ struct RMUtilTimer; /* RMutilTimerFunc - callback type for timer tasks. The ctx is a thread-safe redis module context * that should be locked/unlocked by the callback when running stuff against redis. privdata is * pre-existing private data */ typedef int (*RMutilTimerFunc)(RedisModuleCtx *ctx, void *privdata); typedef void (*RMUtilTimerTerminationFunc)(void *privdata); /* Create and start a new periodic timer. Each timer has its own thread and can only be run and * stopped once. The timer runs `cb` every `interval` with `privdata` passed to the callback. */ struct RMUtilTimer *RMUtil_NewPeriodicTimer(RMutilTimerFunc cb, RMUtilTimerTerminationFunc onTerm, void *privdata, struct timespec interval); /* set a new frequency for the timer. This will take effect AFTER the next trigger */ void RMUtilTimer_SetInterval(struct RMUtilTimer *t, struct timespec newInterval); /* Stop the timer loop, call the termination callbck to free up any resources linked to the timer, * and free the timer after stopping. * * This function doesn't wait for the thread to terminate, as it may cause a race condition if the * timer's callback is waiting for the redis global lock. * Instead you should make sure any resources are freed by the callback after the thread loop is * finished. * * The timer is freed automatically, so the callback doesn't need to do anything about it. * The callback gets the timer's associated privdata as its argument. * * If no callback is specified we do not free up privdata. If privdata is NULL we still call the * callback, as it may log stuff or free global resources. */ int RMUtilTimer_Terminate(struct RMUtilTimer *t); /* DEPRECATED - do not use this function (well now you can't), use terminate instead Free the timer context. The caller should be responsible for freeing the private data at this * point */ // void RMUtilTimer_Free(struct RMUtilTimer *t); #endif RediSearch-1.2.2/src/rmutil/priority_queue.c000066400000000000000000000016071364126773500211030ustar00rootroot00000000000000#include "priority_queue.h" #include "heap.h" PriorityQueue *__newPriorityQueueSize(size_t elemSize, size_t cap, int (*cmp)(void *, void *)) { PriorityQueue *pq = malloc(sizeof(PriorityQueue)); pq->v = __newVectorSize(elemSize, cap); pq->cmp = cmp; return pq; } inline size_t Priority_Queue_Size(PriorityQueue *pq) { return Vector_Size(pq->v); } inline int Priority_Queue_Top(PriorityQueue *pq, void *ptr) { return Vector_Get(pq->v, 0, ptr); } inline size_t __priority_Queue_PushPtr(PriorityQueue *pq, void *elem) { size_t top = __vector_PushPtr(pq->v, elem); Heap_Push(pq->v, 0, top, pq->cmp); return top; } inline void Priority_Queue_Pop(PriorityQueue *pq) { if (pq->v->top == 0) { return; } Heap_Pop(pq->v, 0, pq->v->top, pq->cmp); pq->v->top--; } void Priority_Queue_Free(PriorityQueue *pq) { Vector_Free(pq->v); free(pq); } RediSearch-1.2.2/src/rmutil/priority_queue.h000066400000000000000000000036511364126773500211110ustar00rootroot00000000000000#ifndef __PRIORITY_QUEUE_H__ #define __PRIORITY_QUEUE_H__ #include "vector.h" /* Priority queue * Priority queues are designed such that its first element is always the greatest of the elements it contains. * This context is similar to a heap, where elements can be inserted at any moment, and only the max heap element can be * retrieved (the one at the top in the priority queue). * Priority queues are implemented as Vectors. Elements are popped from the "back" of Vector, which is known as the top * of the priority queue. */ typedef struct { Vector *v; int (*cmp)(void *, void *); } PriorityQueue; /* Construct priority queue * Constructs a priority_queue container adaptor object. */ PriorityQueue *__newPriorityQueueSize(size_t elemSize, size_t cap, int (*cmp)(void *, void *)); #define NewPriorityQueue(type, cap, cmp) __newPriorityQueueSize(sizeof(type), cap, cmp) /* Return size * Returns the number of elements in the priority_queue. */ size_t Priority_Queue_Size(PriorityQueue *pq); /* Access top element * Copy the top element in the priority_queue to ptr. * The top element is the element that compares higher in the priority_queue. */ int Priority_Queue_Top(PriorityQueue *pq, void *ptr); /* Insert element * Inserts a new element in the priority_queue. */ size_t __priority_Queue_PushPtr(PriorityQueue *pq, void *elem); #define Priority_Queue_Push(pq, elem) __priority_Queue_PushPtr(pq, &(typeof(elem)){elem}) /* Remove top element * Removes the element on top of the priority_queue, effectively reducing its size by one. The element removed is the * one with the highest value. * The value of this element can be retrieved before being popped by calling Priority_Queue_Top. */ void Priority_Queue_Pop(PriorityQueue *pq); /* free the priority queue and the underlying data. Does not release its elements if * they are pointers */ void Priority_Queue_Free(PriorityQueue *pq); #endif //__PRIORITY_QUEUE_H__ RediSearch-1.2.2/src/rmutil/sds.c000066400000000000000000001157431364126773500166160ustar00rootroot00000000000000/* SDSLib 2.0 -- A C dynamic strings library * * Copyright (c) 2006-2015, Salvatore Sanfilippo * Copyright (c) 2015, Oran Agra * Copyright (c) 2015, Redis Labs, Inc * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Redis nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include "sds.h" #include "sdsalloc.h" static inline int sdsHdrSize(char type) { switch(type&SDS_TYPE_MASK) { case SDS_TYPE_5: return sizeof(struct sdshdr5); case SDS_TYPE_8: return sizeof(struct sdshdr8); case SDS_TYPE_16: return sizeof(struct sdshdr16); case SDS_TYPE_32: return sizeof(struct sdshdr32); case SDS_TYPE_64: return sizeof(struct sdshdr64); } return 0; } static inline char sdsReqType(size_t string_size) { if (string_size < 32) return SDS_TYPE_5; if (string_size < 0xff) return SDS_TYPE_8; if (string_size < 0xffff) return SDS_TYPE_16; if (string_size < 0xffffffff) return SDS_TYPE_32; return SDS_TYPE_64; } /* Create a new sds string with the content specified by the 'init' pointer * and 'initlen'. * If NULL is used for 'init' the string is initialized with zero bytes. * * The string is always null-termined (all the sds strings are, always) so * even if you create an sds string with: * * mystring = sdsnewlen("abc",3); * * You can print the string with printf() as there is an implicit \0 at the * end of the string. However the string is binary safe and can contain * \0 characters in the middle, as the length is stored in the sds header. */ sds sdsnewlen(const void *init, size_t initlen) { void *sh; sds s; char type = sdsReqType(initlen); /* Empty strings are usually created in order to append. Use type 8 * since type 5 is not good at this. */ if (type == SDS_TYPE_5 && initlen == 0) type = SDS_TYPE_8; int hdrlen = sdsHdrSize(type); unsigned char *fp; /* flags pointer. */ sh = s_malloc(hdrlen+initlen+1); if (!init) memset(sh, 0, hdrlen+initlen+1); if (sh == NULL) return NULL; s = (char*)sh+hdrlen; fp = ((unsigned char*)s)-1; switch(type) { case SDS_TYPE_5: { *fp = type | (initlen << SDS_TYPE_BITS); break; } case SDS_TYPE_8: { SDS_HDR_VAR(8,s); sh->len = initlen; sh->alloc = initlen; *fp = type; break; } case SDS_TYPE_16: { SDS_HDR_VAR(16,s); sh->len = initlen; sh->alloc = initlen; *fp = type; break; } case SDS_TYPE_32: { SDS_HDR_VAR(32,s); sh->len = initlen; sh->alloc = initlen; *fp = type; break; } case SDS_TYPE_64: { SDS_HDR_VAR(64,s); sh->len = initlen; sh->alloc = initlen; *fp = type; break; } } if (initlen && init) memcpy(s, init, initlen); s[initlen] = '\0'; return s; } /* Create an empty (zero length) sds string. Even in this case the string * always has an implicit null term. */ sds sdsempty(void) { return sdsnewlen("",0); } /* Create a new sds string starting from a null terminated C string. */ sds sdsnew(const char *init) { size_t initlen = (init == NULL) ? 0 : strlen(init); return sdsnewlen(init, initlen); } /* Duplicate an sds string. */ sds sdsdup(const sds s) { return sdsnewlen(s, sdslen(s)); } /* Free an sds string. No operation is performed if 's' is NULL. */ void sdsfree(sds s) { if (s == NULL) return; s_free((char*)s-sdsHdrSize(s[-1])); } /* Set the sds string length to the length as obtained with strlen(), so * considering as content only up to the first null term character. * * This function is useful when the sds string is hacked manually in some * way, like in the following example: * * s = sdsnew("foobar"); * s[2] = '\0'; * sdsupdatelen(s); * printf("%d\n", sdslen(s)); * * The output will be "2", but if we comment out the call to sdsupdatelen() * the output will be "6" as the string was modified but the logical length * remains 6 bytes. */ void sdsupdatelen(sds s) { int reallen = strlen(s); sdssetlen(s, reallen); } /* Modify an sds string in-place to make it empty (zero length). * However all the existing buffer is not discarded but set as free space * so that next append operations will not require allocations up to the * number of bytes previously available. */ void sdsclear(sds s) { sdssetlen(s, 0); s[0] = '\0'; } /* Enlarge the free space at the end of the sds string so that the caller * is sure that after calling this function can overwrite up to addlen * bytes after the end of the string, plus one more byte for nul term. * * Note: this does not change the *length* of the sds string as returned * by sdslen(), but only the free buffer space we have. */ sds sdsMakeRoomFor(sds s, size_t addlen) { void *sh, *newsh; size_t avail = sdsavail(s); size_t len, newlen; char type, oldtype = s[-1] & SDS_TYPE_MASK; int hdrlen; /* Return ASAP if there is enough space left. */ if (avail >= addlen) return s; len = sdslen(s); sh = (char*)s-sdsHdrSize(oldtype); newlen = (len+addlen); if (newlen < SDS_MAX_PREALLOC) newlen *= 2; else newlen += SDS_MAX_PREALLOC; type = sdsReqType(newlen); /* Don't use type 5: the user is appending to the string and type 5 is * not able to remember empty space, so sdsMakeRoomFor() must be called * at every appending operation. */ if (type == SDS_TYPE_5) type = SDS_TYPE_8; hdrlen = sdsHdrSize(type); if (oldtype==type) { newsh = s_realloc(sh, hdrlen+newlen+1); if (newsh == NULL) return NULL; s = (char*)newsh+hdrlen; } else { /* Since the header size changes, need to move the string forward, * and can't use realloc */ newsh = s_malloc(hdrlen+newlen+1); if (newsh == NULL) return NULL; memcpy((char*)newsh+hdrlen, s, len+1); s_free(sh); s = (char*)newsh+hdrlen; s[-1] = type; sdssetlen(s, len); } sdssetalloc(s, newlen); return s; } /* Reallocate the sds string so that it has no free space at the end. The * contained string remains not altered, but next concatenation operations * will require a reallocation. * * After the call, the passed sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdsRemoveFreeSpace(sds s) { void *sh, *newsh; char type, oldtype = s[-1] & SDS_TYPE_MASK; int hdrlen; size_t len = sdslen(s); sh = (char*)s-sdsHdrSize(oldtype); type = sdsReqType(len); hdrlen = sdsHdrSize(type); if (oldtype==type) { newsh = s_realloc(sh, hdrlen+len+1); if (newsh == NULL) return NULL; s = (char*)newsh+hdrlen; } else { newsh = s_malloc(hdrlen+len+1); if (newsh == NULL) return NULL; memcpy((char*)newsh+hdrlen, s, len+1); s_free(sh); s = (char*)newsh+hdrlen; s[-1] = type; sdssetlen(s, len); } sdssetalloc(s, len); return s; } /* Return the total size of the allocation of the specifed sds string, * including: * 1) The sds header before the pointer. * 2) The string. * 3) The free buffer at the end if any. * 4) The implicit null term. */ size_t sdsAllocSize(sds s) { size_t alloc = sdsalloc(s); return sdsHdrSize(s[-1])+alloc+1; } /* Return the pointer of the actual SDS allocation (normally SDS strings * are referenced by the start of the string buffer). */ void *sdsAllocPtr(sds s) { return (void*) (s-sdsHdrSize(s[-1])); } /* Increment the sds length and decrements the left free space at the * end of the string according to 'incr'. Also set the null term * in the new end of the string. * * This function is used in order to fix the string length after the * user calls sdsMakeRoomFor(), writes something after the end of * the current string, and finally needs to set the new length. * * Note: it is possible to use a negative increment in order to * right-trim the string. * * Usage example: * * Using sdsIncrLen() and sdsMakeRoomFor() it is possible to mount the * following schema, to cat bytes coming from the kernel to the end of an * sds string without copying into an intermediate buffer: * * oldlen = sdslen(s); * s = sdsMakeRoomFor(s, BUFFER_SIZE); * nread = read(fd, s+oldlen, BUFFER_SIZE); * ... check for nread <= 0 and handle it ... * sdsIncrLen(s, nread); */ void sdsIncrLen(sds s, int incr) { unsigned char flags = s[-1]; size_t len; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: { unsigned char *fp = ((unsigned char*)s)-1; unsigned char oldlen = SDS_TYPE_5_LEN(flags); assert((incr > 0 && oldlen+incr < 32) || (incr < 0 && oldlen >= (unsigned int)(-incr))); *fp = SDS_TYPE_5 | ((oldlen+incr) << SDS_TYPE_BITS); len = oldlen+incr; break; } case SDS_TYPE_8: { SDS_HDR_VAR(8,s); assert((incr >= 0 && sh->alloc-sh->len >= incr) || (incr < 0 && sh->len >= (unsigned int)(-incr))); len = (sh->len += incr); break; } case SDS_TYPE_16: { SDS_HDR_VAR(16,s); assert((incr >= 0 && sh->alloc-sh->len >= incr) || (incr < 0 && sh->len >= (unsigned int)(-incr))); len = (sh->len += incr); break; } case SDS_TYPE_32: { SDS_HDR_VAR(32,s); assert((incr >= 0 && sh->alloc-sh->len >= (unsigned int)incr) || (incr < 0 && sh->len >= (unsigned int)(-incr))); len = (sh->len += incr); break; } case SDS_TYPE_64: { SDS_HDR_VAR(64,s); assert((incr >= 0 && sh->alloc-sh->len >= (uint64_t)incr) || (incr < 0 && sh->len >= (uint64_t)(-incr))); len = (sh->len += incr); break; } default: len = 0; /* Just to avoid compilation warnings. */ } s[len] = '\0'; } /* Grow the sds to have the specified length. Bytes that were not part of * the original length of the sds will be set to zero. * * if the specified length is smaller than the current length, no operation * is performed. */ sds sdsgrowzero(sds s, size_t len) { size_t curlen = sdslen(s); if (len <= curlen) return s; s = sdsMakeRoomFor(s,len-curlen); if (s == NULL) return NULL; /* Make sure added region doesn't contain garbage */ memset(s+curlen,0,(len-curlen+1)); /* also set trailing \0 byte */ sdssetlen(s, len); return s; } /* Append the specified binary-safe string pointed by 't' of 'len' bytes to the * end of the specified sds string 's'. * * After the call, the passed sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscatlen(sds s, const void *t, size_t len) { size_t curlen = sdslen(s); s = sdsMakeRoomFor(s,len); if (s == NULL) return NULL; memcpy(s+curlen, t, len); sdssetlen(s, curlen+len); s[curlen+len] = '\0'; return s; } /* Append the specified null termianted C string to the sds string 's'. * * After the call, the passed sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscat(sds s, const char *t) { return sdscatlen(s, t, strlen(t)); } /* Append the specified sds 't' to the existing sds 's'. * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscatsds(sds s, const sds t) { return sdscatlen(s, t, sdslen(t)); } /* Destructively modify the sds string 's' to hold the specified binary * safe string pointed by 't' of length 'len' bytes. */ sds sdscpylen(sds s, const char *t, size_t len) { if (sdsalloc(s) < len) { s = sdsMakeRoomFor(s,len-sdslen(s)); if (s == NULL) return NULL; } memcpy(s, t, len); s[len] = '\0'; sdssetlen(s, len); return s; } /* Like sdscpylen() but 't' must be a null-termined string so that the length * of the string is obtained with strlen(). */ sds sdscpy(sds s, const char *t) { return sdscpylen(s, t, strlen(t)); } /* Helper for sdscatlonglong() doing the actual number -> string * conversion. 's' must point to a string with room for at least * SDS_LLSTR_SIZE bytes. * * The function returns the length of the null-terminated string * representation stored at 's'. */ #define SDS_LLSTR_SIZE 21 int sdsll2str(char *s, long long value) { char *p, aux; unsigned long long v; size_t l; /* Generate the string representation, this method produces * an reversed string. */ v = (value < 0) ? -value : value; p = s; do { *p++ = '0'+(v%10); v /= 10; } while(v); if (value < 0) *p++ = '-'; /* Compute length and add null term. */ l = p-s; *p = '\0'; /* Reverse the string. */ p--; while(s < p) { aux = *s; *s = *p; *p = aux; s++; p--; } return l; } /* Identical sdsll2str(), but for unsigned long long type. */ int sdsull2str(char *s, unsigned long long v) { char *p, aux; size_t l; /* Generate the string representation, this method produces * an reversed string. */ p = s; do { *p++ = '0'+(v%10); v /= 10; } while(v); /* Compute length and add null term. */ l = p-s; *p = '\0'; /* Reverse the string. */ p--; while(s < p) { aux = *s; *s = *p; *p = aux; s++; p--; } return l; } /* Create an sds string from a long long value. It is much faster than: * * sdscatprintf(sdsempty(),"%lld\n", value); */ sds sdsfromlonglong(long long value) { char buf[SDS_LLSTR_SIZE]; int len = sdsll2str(buf,value); return sdsnewlen(buf,len); } /* Like sdscatprintf() but gets va_list instead of being variadic. */ sds sdscatvprintf(sds s, const char *fmt, va_list ap) { va_list cpy; char staticbuf[1024], *buf = staticbuf, *t; size_t buflen = strlen(fmt)*2; /* We try to start using a static buffer for speed. * If not possible we revert to heap allocation. */ if (buflen > sizeof(staticbuf)) { buf = s_malloc(buflen); if (buf == NULL) return NULL; } else { buflen = sizeof(staticbuf); } /* Try with buffers two times bigger every time we fail to * fit the string in the current buffer size. */ while(1) { buf[buflen-2] = '\0'; va_copy(cpy,ap); vsnprintf(buf, buflen, fmt, cpy); va_end(cpy); if (buf[buflen-2] != '\0') { if (buf != staticbuf) s_free(buf); buflen *= 2; buf = s_malloc(buflen); if (buf == NULL) return NULL; continue; } break; } /* Finally concat the obtained string to the SDS string and return it. */ t = sdscat(s, buf); if (buf != staticbuf) s_free(buf); return t; } /* Append to the sds string 's' a string obtained using printf-alike format * specifier. * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. * * Example: * * s = sdsnew("Sum is: "); * s = sdscatprintf(s,"%d+%d = %d",a,b,a+b). * * Often you need to create a string from scratch with the printf-alike * format. When this is the need, just use sdsempty() as the target string: * * s = sdscatprintf(sdsempty(), "... your format ...", args); */ sds sdscatprintf(sds s, const char *fmt, ...) { va_list ap; char *t; va_start(ap, fmt); t = sdscatvprintf(s,fmt,ap); va_end(ap); return t; } /* This function is similar to sdscatprintf, but much faster as it does * not rely on sprintf() family functions implemented by the libc that * are often very slow. Moreover directly handling the sds string as * new data is concatenated provides a performance improvement. * * However this function only handles an incompatible subset of printf-alike * format specifiers: * * %s - C String * %S - SDS string * %i - signed int * %I - 64 bit signed integer (long long, int64_t) * %u - unsigned int * %U - 64 bit unsigned integer (unsigned long long, uint64_t) * %% - Verbatim "%" character. */ sds sdscatfmt(sds s, char const *fmt, ...) { size_t initlen = sdslen(s); const char *f = fmt; int i; va_list ap; va_start(ap,fmt); f = fmt; /* Next format specifier byte to process. */ i = initlen; /* Position of the next byte to write to dest str. */ while(*f) { char next, *str; size_t l; long long num; unsigned long long unum; /* Make sure there is always space for at least 1 char. */ if (sdsavail(s)==0) { s = sdsMakeRoomFor(s,1); } switch(*f) { case '%': next = *(f+1); f++; switch(next) { case 's': case 'S': str = va_arg(ap,char*); l = (next == 's') ? strlen(str) : sdslen(str); if (sdsavail(s) < l) { s = sdsMakeRoomFor(s,l); } memcpy(s+i,str,l); sdsinclen(s,l); i += l; break; case 'i': case 'I': if (next == 'i') num = va_arg(ap,int); else num = va_arg(ap,long long); { char buf[SDS_LLSTR_SIZE]; l = sdsll2str(buf,num); if (sdsavail(s) < l) { s = sdsMakeRoomFor(s,l); } memcpy(s+i,buf,l); sdsinclen(s,l); i += l; } break; case 'u': case 'U': if (next == 'u') unum = va_arg(ap,unsigned int); else unum = va_arg(ap,unsigned long long); { char buf[SDS_LLSTR_SIZE]; l = sdsull2str(buf,unum); if (sdsavail(s) < l) { s = sdsMakeRoomFor(s,l); } memcpy(s+i,buf,l); sdsinclen(s,l); i += l; } break; default: /* Handle %% and generally %. */ s[i++] = next; sdsinclen(s,1); break; } break; default: s[i++] = *f; sdsinclen(s,1); break; } f++; } va_end(ap); /* Add null-term */ s[i] = '\0'; return s; } /* Remove the part of the string from left and from right composed just of * contiguous characters found in 'cset', that is a null terminted C string. * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. * * Example: * * s = sdsnew("AA...AA.a.aa.aHelloWorld :::"); * s = sdstrim(s,"Aa. :"); * printf("%s\n", s); * * Output will be just "Hello World". */ sds sdstrim(sds s, const char *cset) { char *start, *end, *sp, *ep; size_t len; sp = start = s; ep = end = s+sdslen(s)-1; while(sp <= end && strchr(cset, *sp)) sp++; while(ep > sp && strchr(cset, *ep)) ep--; len = (sp > ep) ? 0 : ((ep-sp)+1); if (s != sp) memmove(s, sp, len); s[len] = '\0'; sdssetlen(s,len); return s; } /* Turn the string into a smaller (or equal) string containing only the * substring specified by the 'start' and 'end' indexes. * * start and end can be negative, where -1 means the last character of the * string, -2 the penultimate character, and so forth. * * The interval is inclusive, so the start and end characters will be part * of the resulting string. * * The string is modified in-place. * * Example: * * s = sdsnew("Hello World"); * sdsrange(s,1,-1); => "ello World" */ void sdsrange(sds s, int start, int end) { size_t newlen, len = sdslen(s); if (len == 0) return; if (start < 0) { start = len+start; if (start < 0) start = 0; } if (end < 0) { end = len+end; if (end < 0) end = 0; } newlen = (start > end) ? 0 : (end-start)+1; if (newlen != 0) { if (start >= (signed)len) { newlen = 0; } else if (end >= (signed)len) { end = len-1; newlen = (start > end) ? 0 : (end-start)+1; } } else { start = 0; } if (start && newlen) memmove(s, s+start, newlen); s[newlen] = 0; sdssetlen(s,newlen); } /* Apply tolower() to every character of the sds string 's'. */ void sdstolower(sds s) { int len = sdslen(s), j; for (j = 0; j < len; j++) s[j] = tolower(s[j]); } /* Apply toupper() to every character of the sds string 's'. */ void sdstoupper(sds s) { int len = sdslen(s), j; for (j = 0; j < len; j++) s[j] = toupper(s[j]); } /* Compare two sds strings s1 and s2 with memcmp(). * * Return value: * * positive if s1 > s2. * negative if s1 < s2. * 0 if s1 and s2 are exactly the same binary string. * * If two strings share exactly the same prefix, but one of the two has * additional characters, the longer string is considered to be greater than * the smaller one. */ int sdscmp(const sds s1, const sds s2) { size_t l1, l2, minlen; int cmp; l1 = sdslen(s1); l2 = sdslen(s2); minlen = (l1 < l2) ? l1 : l2; cmp = memcmp(s1,s2,minlen); if (cmp == 0) return l1-l2; return cmp; } /* Split 's' with separator in 'sep'. An array * of sds strings is returned. *count will be set * by reference to the number of tokens returned. * * On out of memory, zero length string, zero length * separator, NULL is returned. * * Note that 'sep' is able to split a string using * a multi-character separator. For example * sdssplit("foo_-_bar","_-_"); will return two * elements "foo" and "bar". * * This version of the function is binary-safe but * requires length arguments. sdssplit() is just the * same function but for zero-terminated strings. */ sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count) { int elements = 0, slots = 5, start = 0, j; sds *tokens; if (seplen < 1 || len < 0) return NULL; tokens = s_malloc(sizeof(sds)*slots); if (tokens == NULL) return NULL; if (len == 0) { *count = 0; return tokens; } for (j = 0; j < (len-(seplen-1)); j++) { /* make sure there is room for the next element and the final one */ if (slots < elements+2) { sds *newtokens; slots *= 2; newtokens = s_realloc(tokens,sizeof(sds)*slots); if (newtokens == NULL) goto cleanup; tokens = newtokens; } /* search the separator */ if ((seplen == 1 && *(s+j) == sep[0]) || (memcmp(s+j,sep,seplen) == 0)) { tokens[elements] = sdsnewlen(s+start,j-start); if (tokens[elements] == NULL) goto cleanup; elements++; start = j+seplen; j = j+seplen-1; /* skip the separator */ } } /* Add the final element. We are sure there is room in the tokens array. */ tokens[elements] = sdsnewlen(s+start,len-start); if (tokens[elements] == NULL) goto cleanup; elements++; *count = elements; return tokens; cleanup: { int i; for (i = 0; i < elements; i++) sdsfree(tokens[i]); s_free(tokens); *count = 0; return NULL; } } /* Free the result returned by sdssplitlen(), or do nothing if 'tokens' is NULL. */ void sdsfreesplitres(sds *tokens, int count) { if (!tokens) return; while(count--) sdsfree(tokens[count]); s_free(tokens); } /* Append to the sds string "s" an escaped string representation where * all the non-printable characters (tested with isprint()) are turned into * escapes in the form "\n\r\a...." or "\x". * * After the call, the modified sds string is no longer valid and all the * references must be substituted with the new pointer returned by the call. */ sds sdscatrepr(sds s, const char *p, size_t len) { s = sdscatlen(s,"\"",1); while(len--) { switch(*p) { case '\\': case '"': s = sdscatprintf(s,"\\%c",*p); break; case '\n': s = sdscatlen(s,"\\n",2); break; case '\r': s = sdscatlen(s,"\\r",2); break; case '\t': s = sdscatlen(s,"\\t",2); break; case '\a': s = sdscatlen(s,"\\a",2); break; case '\b': s = sdscatlen(s,"\\b",2); break; default: if (isprint(*p)) s = sdscatprintf(s,"%c",*p); else s = sdscatprintf(s,"\\x%02x",(unsigned char)*p); break; } p++; } return sdscatlen(s,"\"",1); } /* Helper function for sdssplitargs() that returns non zero if 'c' * is a valid hex digit. */ int is_hex_digit(char c) { return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'); } /* Helper function for sdssplitargs() that converts a hex digit into an * integer from 0 to 15 */ int hex_digit_to_int(char c) { switch(c) { case '0': return 0; case '1': return 1; case '2': return 2; case '3': return 3; case '4': return 4; case '5': return 5; case '6': return 6; case '7': return 7; case '8': return 8; case '9': return 9; case 'a': case 'A': return 10; case 'b': case 'B': return 11; case 'c': case 'C': return 12; case 'd': case 'D': return 13; case 'e': case 'E': return 14; case 'f': case 'F': return 15; default: return 0; } } /* Split a line into arguments, where every argument can be in the * following programming-language REPL-alike form: * * foo bar "newline are supported\n" and "\xff\x00otherstuff" * * The number of arguments is stored into *argc, and an array * of sds is returned. * * The caller should free the resulting array of sds strings with * sdsfreesplitres(). * * Note that sdscatrepr() is able to convert back a string into * a quoted string in the same format sdssplitargs() is able to parse. * * The function returns the allocated tokens on success, even when the * input string is empty, or NULL if the input contains unbalanced * quotes or closed quotes followed by non space characters * as in: "foo"bar or "foo' */ sds *sdssplitargs(const char *line, int *argc) { const char *p = line; char *current = NULL; char **vector = NULL; *argc = 0; while(1) { /* skip blanks */ while(*p && isspace(*p)) p++; if (*p) { /* get a token */ int inq=0; /* set to 1 if we are in "quotes" */ int insq=0; /* set to 1 if we are in 'single quotes' */ int done=0; if (current == NULL) current = sdsempty(); while(!done) { if (inq) { if (*p == '\\' && *(p+1) == 'x' && is_hex_digit(*(p+2)) && is_hex_digit(*(p+3))) { unsigned char byte; byte = (hex_digit_to_int(*(p+2))*16)+ hex_digit_to_int(*(p+3)); current = sdscatlen(current,(char*)&byte,1); p += 3; } else if (*p == '\\' && *(p+1)) { char c; p++; switch(*p) { case 'n': c = '\n'; break; case 'r': c = '\r'; break; case 't': c = '\t'; break; case 'b': c = '\b'; break; case 'a': c = '\a'; break; default: c = *p; break; } current = sdscatlen(current,&c,1); } else if (*p == '"') { /* closing quote must be followed by a space or * nothing at all. */ if (*(p+1) && !isspace(*(p+1))) goto err; done=1; } else if (!*p) { /* unterminated quotes */ goto err; } else { current = sdscatlen(current,p,1); } } else if (insq) { if (*p == '\\' && *(p+1) == '\'') { p++; current = sdscatlen(current,"'",1); } else if (*p == '\'') { /* closing quote must be followed by a space or * nothing at all. */ if (*(p+1) && !isspace(*(p+1))) goto err; done=1; } else if (!*p) { /* unterminated quotes */ goto err; } else { current = sdscatlen(current,p,1); } } else { switch(*p) { case ' ': case '\n': case '\r': case '\t': case '\0': done=1; break; case '"': inq=1; break; case '\'': insq=1; break; default: current = sdscatlen(current,p,1); break; } } if (*p) p++; } /* add the token to the vector */ vector = s_realloc(vector,((*argc)+1)*sizeof(char*)); vector[*argc] = current; (*argc)++; current = NULL; } else { /* Even on empty input string return something not NULL. */ if (vector == NULL) vector = s_malloc(sizeof(void*)); return vector; } } err: while((*argc)--) sdsfree(vector[*argc]); s_free(vector); if (current) sdsfree(current); *argc = 0; return NULL; } /* Modify the string substituting all the occurrences of the set of * characters specified in the 'from' string to the corresponding character * in the 'to' array. * * For instance: sdsmapchars(mystring, "ho", "01", 2) * will have the effect of turning the string "hello" into "0ell1". * * The function returns the sds string pointer, that is always the same * as the input pointer since no resize is needed. */ sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen) { size_t j, i, l = sdslen(s); for (j = 0; j < l; j++) { for (i = 0; i < setlen; i++) { if (s[j] == from[i]) { s[j] = to[i]; break; } } } return s; } /* Join an array of C strings using the specified separator (also a C string). * Returns the result as an sds string. */ sds sdsjoin(char **argv, int argc, char *sep) { sds join = sdsempty(); int j; for (j = 0; j < argc; j++) { join = sdscat(join, argv[j]); if (j != argc-1) join = sdscat(join,sep); } return join; } /* Like sdsjoin, but joins an array of SDS strings. */ sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) { sds join = sdsempty(); int j; for (j = 0; j < argc; j++) { join = sdscatsds(join, argv[j]); if (j != argc-1) join = sdscatlen(join,sep,seplen); } return join; } /* Wrappers to the allocators used by SDS. Note that SDS will actually * just use the macros defined into sdsalloc.h in order to avoid to pay * the overhead of function calls. Here we define these wrappers only for * the programs SDS is linked to, if they want to touch the SDS internals * even if they use a different allocator. */ void *sds_malloc(size_t size) { return s_malloc(size); } void *sds_realloc(void *ptr, size_t size) { return s_realloc(ptr,size); } void sds_free(void *ptr) { s_free(ptr); } #if defined(SDS_TEST_MAIN) #include #include "testhelp.h" #include "limits.h" #define UNUSED(x) (void)(x) int sdsTest(void) { { sds x = sdsnew("foo"), y; test_cond("Create a string and obtain the length", sdslen(x) == 3 && memcmp(x,"foo\0",4) == 0) sdsfree(x); x = sdsnewlen("foo",2); test_cond("Create a string with specified length", sdslen(x) == 2 && memcmp(x,"fo\0",3) == 0) x = sdscat(x,"bar"); test_cond("Strings concatenation", sdslen(x) == 5 && memcmp(x,"fobar\0",6) == 0); x = sdscpy(x,"a"); test_cond("sdscpy() against an originally longer string", sdslen(x) == 1 && memcmp(x,"a\0",2) == 0) x = sdscpy(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk"); test_cond("sdscpy() against an originally shorter string", sdslen(x) == 33 && memcmp(x,"xyzxxxxxxxxxxyyyyyyyyyykkkkkkkkkk\0",33) == 0) sdsfree(x); x = sdscatprintf(sdsempty(),"%d",123); test_cond("sdscatprintf() seems working in the base case", sdslen(x) == 3 && memcmp(x,"123\0",4) == 0) sdsfree(x); x = sdsnew("--"); x = sdscatfmt(x, "Hello %s World %I,%I--", "Hi!", LLONG_MIN,LLONG_MAX); test_cond("sdscatfmt() seems working in the base case", sdslen(x) == 60 && memcmp(x,"--Hello Hi! World -9223372036854775808," "9223372036854775807--",60) == 0) printf("[%s]\n",x); sdsfree(x); x = sdsnew("--"); x = sdscatfmt(x, "%u,%U--", UINT_MAX, ULLONG_MAX); test_cond("sdscatfmt() seems working with unsigned numbers", sdslen(x) == 35 && memcmp(x,"--4294967295,18446744073709551615--",35) == 0) sdsfree(x); x = sdsnew(" x "); sdstrim(x," x"); test_cond("sdstrim() works when all chars match", sdslen(x) == 0) sdsfree(x); x = sdsnew(" x "); sdstrim(x," "); test_cond("sdstrim() works when a single char remains", sdslen(x) == 1 && x[0] == 'x') sdsfree(x); x = sdsnew("xxciaoyyy"); sdstrim(x,"xy"); test_cond("sdstrim() correctly trims characters", sdslen(x) == 4 && memcmp(x,"ciao\0",5) == 0) y = sdsdup(x); sdsrange(y,1,1); test_cond("sdsrange(...,1,1)", sdslen(y) == 1 && memcmp(y,"i\0",2) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,1,-1); test_cond("sdsrange(...,1,-1)", sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,-2,-1); test_cond("sdsrange(...,-2,-1)", sdslen(y) == 2 && memcmp(y,"ao\0",3) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,2,1); test_cond("sdsrange(...,2,1)", sdslen(y) == 0 && memcmp(y,"\0",1) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,1,100); test_cond("sdsrange(...,1,100)", sdslen(y) == 3 && memcmp(y,"iao\0",4) == 0) sdsfree(y); y = sdsdup(x); sdsrange(y,100,100); test_cond("sdsrange(...,100,100)", sdslen(y) == 0 && memcmp(y,"\0",1) == 0) sdsfree(y); sdsfree(x); x = sdsnew("foo"); y = sdsnew("foa"); test_cond("sdscmp(foo,foa)", sdscmp(x,y) > 0) sdsfree(y); sdsfree(x); x = sdsnew("bar"); y = sdsnew("bar"); test_cond("sdscmp(bar,bar)", sdscmp(x,y) == 0) sdsfree(y); sdsfree(x); x = sdsnew("aar"); y = sdsnew("bar"); test_cond("sdscmp(bar,bar)", sdscmp(x,y) < 0) sdsfree(y); sdsfree(x); x = sdsnewlen("\a\n\0foo\r",7); y = sdscatrepr(sdsempty(),x,sdslen(x)); test_cond("sdscatrepr(...data...)", memcmp(y,"\"\\a\\n\\x00foo\\r\"",15) == 0) { unsigned int oldfree; char *p; int step = 10, j, i; sdsfree(x); sdsfree(y); x = sdsnew("0"); test_cond("sdsnew() free/len buffers", sdslen(x) == 1 && sdsavail(x) == 0); /* Run the test a few times in order to hit the first two * SDS header types. */ for (i = 0; i < 10; i++) { int oldlen = sdslen(x); x = sdsMakeRoomFor(x,step); int type = x[-1]&SDS_TYPE_MASK; test_cond("sdsMakeRoomFor() len", sdslen(x) == oldlen); if (type != SDS_TYPE_5) { test_cond("sdsMakeRoomFor() free", sdsavail(x) >= step); oldfree = sdsavail(x); } p = x+oldlen; for (j = 0; j < step; j++) { p[j] = 'A'+j; } sdsIncrLen(x,step); } test_cond("sdsMakeRoomFor() content", memcmp("0ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ",x,101) == 0); test_cond("sdsMakeRoomFor() final length",sdslen(x)==101); sdsfree(x); } } test_report() return 0; } #endif #ifdef SDS_TEST_MAIN int main(void) { return sdsTest(); } #endif RediSearch-1.2.2/src/rmutil/sds.h000066400000000000000000000213461364126773500166160ustar00rootroot00000000000000/* SDSLib 2.0 -- A C dynamic strings library * * Copyright (c) 2006-2015, Salvatore Sanfilippo * Copyright (c) 2015, Oran Agra * Copyright (c) 2015, Redis Labs, Inc * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Redis nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #ifndef __SDS_H #define __SDS_H #define SDS_MAX_PREALLOC (1024*1024) #include #include #include typedef char *sds; /* Note: sdshdr5 is never used, we just access the flags byte directly. * However is here to document the layout of type 5 SDS strings. */ struct __attribute__ ((__packed__)) sdshdr5 { unsigned char flags; /* 3 lsb of type, and 5 msb of string length */ char buf[]; }; struct __attribute__ ((__packed__)) sdshdr8 { uint8_t len; /* used */ uint8_t alloc; /* excluding the header and null terminator */ unsigned char flags; /* 3 lsb of type, 5 unused bits */ char buf[]; }; struct __attribute__ ((__packed__)) sdshdr16 { uint16_t len; /* used */ uint16_t alloc; /* excluding the header and null terminator */ unsigned char flags; /* 3 lsb of type, 5 unused bits */ char buf[]; }; struct __attribute__ ((__packed__)) sdshdr32 { uint32_t len; /* used */ uint32_t alloc; /* excluding the header and null terminator */ unsigned char flags; /* 3 lsb of type, 5 unused bits */ char buf[]; }; struct __attribute__ ((__packed__)) sdshdr64 { uint64_t len; /* used */ uint64_t alloc; /* excluding the header and null terminator */ unsigned char flags; /* 3 lsb of type, 5 unused bits */ char buf[]; }; #define SDS_TYPE_5 0 #define SDS_TYPE_8 1 #define SDS_TYPE_16 2 #define SDS_TYPE_32 3 #define SDS_TYPE_64 4 #define SDS_TYPE_MASK 7 #define SDS_TYPE_BITS 3 #define SDS_HDR_VAR(T,s) struct sdshdr##T *sh = (void*)((s)-(sizeof(struct sdshdr##T))); #define SDS_HDR(T,s) ((struct sdshdr##T *)((s)-(sizeof(struct sdshdr##T)))) #define SDS_TYPE_5_LEN(f) ((f)>>SDS_TYPE_BITS) static inline size_t sdslen(const sds s) { unsigned char flags = s[-1]; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: return SDS_TYPE_5_LEN(flags); case SDS_TYPE_8: return SDS_HDR(8,s)->len; case SDS_TYPE_16: return SDS_HDR(16,s)->len; case SDS_TYPE_32: return SDS_HDR(32,s)->len; case SDS_TYPE_64: return SDS_HDR(64,s)->len; } return 0; } static inline size_t sdsavail(const sds s) { unsigned char flags = s[-1]; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: { return 0; } case SDS_TYPE_8: { SDS_HDR_VAR(8,s); return sh->alloc - sh->len; } case SDS_TYPE_16: { SDS_HDR_VAR(16,s); return sh->alloc - sh->len; } case SDS_TYPE_32: { SDS_HDR_VAR(32,s); return sh->alloc - sh->len; } case SDS_TYPE_64: { SDS_HDR_VAR(64,s); return sh->alloc - sh->len; } } return 0; } static inline void sdssetlen(sds s, size_t newlen) { unsigned char flags = s[-1]; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: { unsigned char *fp = ((unsigned char*)s)-1; *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); } break; case SDS_TYPE_8: SDS_HDR(8,s)->len = newlen; break; case SDS_TYPE_16: SDS_HDR(16,s)->len = newlen; break; case SDS_TYPE_32: SDS_HDR(32,s)->len = newlen; break; case SDS_TYPE_64: SDS_HDR(64,s)->len = newlen; break; } } static inline void sdsinclen(sds s, size_t inc) { unsigned char flags = s[-1]; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: { unsigned char *fp = ((unsigned char*)s)-1; unsigned char newlen = SDS_TYPE_5_LEN(flags)+inc; *fp = SDS_TYPE_5 | (newlen << SDS_TYPE_BITS); } break; case SDS_TYPE_8: SDS_HDR(8,s)->len += inc; break; case SDS_TYPE_16: SDS_HDR(16,s)->len += inc; break; case SDS_TYPE_32: SDS_HDR(32,s)->len += inc; break; case SDS_TYPE_64: SDS_HDR(64,s)->len += inc; break; } } /* sdsalloc() = sdsavail() + sdslen() */ static inline size_t sdsalloc(const sds s) { unsigned char flags = s[-1]; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: return SDS_TYPE_5_LEN(flags); case SDS_TYPE_8: return SDS_HDR(8,s)->alloc; case SDS_TYPE_16: return SDS_HDR(16,s)->alloc; case SDS_TYPE_32: return SDS_HDR(32,s)->alloc; case SDS_TYPE_64: return SDS_HDR(64,s)->alloc; } return 0; } static inline void sdssetalloc(sds s, size_t newlen) { unsigned char flags = s[-1]; switch(flags&SDS_TYPE_MASK) { case SDS_TYPE_5: /* Nothing to do, this type has no total allocation info. */ break; case SDS_TYPE_8: SDS_HDR(8,s)->alloc = newlen; break; case SDS_TYPE_16: SDS_HDR(16,s)->alloc = newlen; break; case SDS_TYPE_32: SDS_HDR(32,s)->alloc = newlen; break; case SDS_TYPE_64: SDS_HDR(64,s)->alloc = newlen; break; } } sds sdsnewlen(const void *init, size_t initlen); sds sdsnew(const char *init); sds sdsempty(void); sds sdsdup(const sds s); void sdsfree(sds s); sds sdsgrowzero(sds s, size_t len); sds sdscatlen(sds s, const void *t, size_t len); sds sdscat(sds s, const char *t); sds sdscatsds(sds s, const sds t); sds sdscpylen(sds s, const char *t, size_t len); sds sdscpy(sds s, const char *t); sds sdscatvprintf(sds s, const char *fmt, va_list ap); #ifdef __GNUC__ sds sdscatprintf(sds s, const char *fmt, ...) __attribute__((format(printf, 2, 3))); #else sds sdscatprintf(sds s, const char *fmt, ...); #endif sds sdscatfmt(sds s, char const *fmt, ...); sds sdstrim(sds s, const char *cset); void sdsrange(sds s, int start, int end); void sdsupdatelen(sds s); void sdsclear(sds s); int sdscmp(const sds s1, const sds s2); sds *sdssplitlen(const char *s, int len, const char *sep, int seplen, int *count); void sdsfreesplitres(sds *tokens, int count); void sdstolower(sds s); void sdstoupper(sds s); sds sdsfromlonglong(long long value); sds sdscatrepr(sds s, const char *p, size_t len); sds *sdssplitargs(const char *line, int *argc); sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen); sds sdsjoin(char **argv, int argc, char *sep); sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen); /* Low level functions exposed to the user API */ sds sdsMakeRoomFor(sds s, size_t addlen); void sdsIncrLen(sds s, int incr); sds sdsRemoveFreeSpace(sds s); size_t sdsAllocSize(sds s); void *sdsAllocPtr(sds s); /* Export the allocator used by SDS to the program using SDS. * Sometimes the program SDS is linked to, may use a different set of * allocators, but may want to allocate or free things that SDS will * respectively free or allocate. */ void *sds_malloc(size_t size); void *sds_realloc(void *ptr, size_t size); void sds_free(void *ptr); #ifdef REDIS_TEST int sdsTest(int argc, char *argv[]); #endif #endif RediSearch-1.2.2/src/rmutil/sdsalloc.h000066400000000000000000000041551364126773500176300ustar00rootroot00000000000000/* SDSLib 2.0 -- A C dynamic strings library * * Copyright (c) 2006-2015, Salvatore Sanfilippo * Copyright (c) 2015, Redis Labs, Inc * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Redis nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* SDS allocator selection. * * This file is used in order to change the SDS allocator at compile time. * Just define the following defines to what you want to use. Also add * the include of your alternate allocator if needed (not needed in order * to use the default libc allocator). */ #if defined(__MACH__) #include #else #include #endif //#include "zmalloc.h" #define s_malloc malloc #define s_realloc realloc #define s_free free RediSearch-1.2.2/src/rmutil/strings.c000066400000000000000000000035141364126773500175060ustar00rootroot00000000000000#include #include #include #include "strings.h" #include "alloc.h" #include "sds.h" // RedisModuleString *RMUtil_CreateFormattedString(RedisModuleCtx *ctx, const char *fmt, ...) { // sds s = sdsempty(); // va_list ap; // va_start(ap, fmt); // s = sdscatvprintf(s, fmt, ap); // va_end(ap); // RedisModuleString *ret = RedisModule_CreateString(ctx, (const char *)s, sdslen(s)); // sdsfree(s); // return ret; // } int RMUtil_StringEquals(RedisModuleString *s1, RedisModuleString *s2) { const char *c1, *c2; size_t l1, l2; c1 = RedisModule_StringPtrLen(s1, &l1); c2 = RedisModule_StringPtrLen(s2, &l2); if (l1 != l2) return 0; return strncmp(c1, c2, l1) == 0; } int RMUtil_StringEqualsC(RedisModuleString *s1, const char *s2) { const char *c1; size_t l1, l2 = strlen(s2); c1 = RedisModule_StringPtrLen(s1, &l1); if (l1 != l2) return 0; return strncmp(c1, s2, l1) == 0; } int RMUtil_StringEqualsCaseC(RedisModuleString *s1, const char *s2) { const char *c1; size_t l1, l2 = strlen(s2); c1 = RedisModule_StringPtrLen(s1, &l1); if (l1 != l2) return 0; return strncasecmp(c1, s2, l1) == 0; } void RMUtil_StringToLower(RedisModuleString *s) { size_t l; char *c = (char *)RedisModule_StringPtrLen(s, &l); size_t i; for (i = 0; i < l; i++) { *c = tolower(*c); ++c; } } void RMUtil_StringToUpper(RedisModuleString *s) { size_t l; char *c = (char *)RedisModule_StringPtrLen(s, &l); size_t i; for (i = 0; i < l; i++) { *c = toupper(*c); ++c; } } void RMUtil_StringConvert(RedisModuleString **rs, const char **ss, size_t n, int options) { for (size_t ii = 0; ii < n; ++ii) { const char *p = RedisModule_StringPtrLen(rs[ii], NULL); if (options & RMUTIL_STRINGCONVERT_COPY) { p = strdup(p); } ss[ii] = p; } }RediSearch-1.2.2/src/rmutil/strings.h000066400000000000000000000031101364126773500175030ustar00rootroot00000000000000#ifndef __RMUTIL_STRINGS_H__ #define __RMUTIL_STRINGS_H__ #include /* * Create a new RedisModuleString object from a printf-style format and arguments. * Note that RedisModuleString objects CANNOT be used as formatting arguments. */ // DEPRECATED since it was added to the RedisModule API. Replaced with a macro below // RedisModuleString *RMUtil_CreateFormattedString(RedisModuleCtx *ctx, const char *fmt, ...); #define RMUtil_CreateFormattedString RedisModule_CreateStringPrintf /* Return 1 if the two strings are equal. Case *sensitive* */ int RMUtil_StringEquals(RedisModuleString *s1, RedisModuleString *s2); /* Return 1 if the string is equal to a C NULL terminated string. Case *sensitive* */ int RMUtil_StringEqualsC(RedisModuleString *s1, const char *s2); /* Return 1 if the string is equal to a C NULL terminated string. Case *insensitive* */ int RMUtil_StringEqualsCaseC(RedisModuleString *s1, const char *s2); /* Converts a redis string to lowercase in place without reallocating anything */ void RMUtil_StringToLower(RedisModuleString *s); /* Converts a redis string to uppercase in place without reallocating anything */ void RMUtil_StringToUpper(RedisModuleString *s); // If set, copy the strings using strdup rather than simply storing pointers. #define RMUTIL_STRINGCONVERT_COPY 1 /** * Convert one or more RedisModuleString objects into `const char*`. * Both rs and ss are arrays, and should be of length. * Options may be 0 or `RMUTIL_STRINGCONVERT_COPY` */ void RMUtil_StringConvert(RedisModuleString **rs, const char **ss, size_t n, int options); #endif RediSearch-1.2.2/src/rmutil/test.h000066400000000000000000000063571364126773500170110ustar00rootroot00000000000000#ifndef __TESTUTIL_H__ #define __TESTUTIL_H__ #include #include #include static int numTests = 0; static int numAsserts = 0; #define TESTFUNC(f) \ printf(" Testing %s\t\t", __STRING(f)); \ numTests++; \ fflush(stdout); \ if (f()) { \ printf(" %s FAILED!\n", __STRING(f)); \ exit(1); \ } else \ printf("[PASS]\n"); #define ASSERTM(expr, ...) \ if (!(expr)) { \ fprintf(stderr, "%s:%d: Assertion '%s' Failed: " __VA_ARGS__ "\n", __FILE__, __LINE__, \ __STRING(expr)); \ return -1; \ } \ numAsserts++; #define ASSERT(expr) \ if (!(expr)) { \ fprintf(stderr, "%s:%d Assertion '%s' Failed\n", __FILE__, __LINE__, __STRING(expr)); \ return -1; \ } \ numAsserts++; #define ASSERT_STRING_EQ(s1, s2) \ if (strcmp(s1, s2)) { \ fprintf(stderr, "%s:%d: ", __FILE__, __LINE__); \ fprintf(stderr, "'%s' != '%s'\n", s1, s2); \ return -1; \ } #define ASSERT_EQUAL(x, y, ...) \ if (x != y) { \ fprintf(stderr, "%s:%d: ", __FILE__, __LINE__); \ fprintf(stderr, "%g != %g: " __VA_ARGS__ "\n", (double)x, (double)y); \ return -1; \ } \ numAsserts++; #define FAIL(fmt, ...) \ { \ fprintf(stderr, "%s:%d: FAIL: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); \ return -1; \ } #define RETURN_TEST_SUCCESS return 0; #define TEST_CASE(x, block) \ int x { \ block; \ return 0 \ } #define PRINT_TEST_SUMMARY printf("\nTotal: %d tests and %d assertions OK\n", numTests, numAsserts); #define TEST_MAIN(body) \ int main(int argc, char **argv) { \ printf("Starting Test '%s'...\n", argv[0]); \ body; \ PRINT_TEST_SUMMARY; \ printf("\n--------------------\n\n"); \ return 0; \ } #endifRediSearch-1.2.2/src/rmutil/test_cmdparse.c000066400000000000000000000366261364126773500206640ustar00rootroot00000000000000#include #include #include "test.h" #include "cmdparse.h" void CmdSchemaNode_Print(CmdSchemaNode *n, int depth); int testSchema() { CmdSchemaNode *root = NewSchema("FOO", "Test command"); ASSERT(root); ASSERT_EQUAL(root->type, CmdSchemaNode_Schema); ASSERT_EQUAL(root->size, 0); ASSERT_STRING_EQ("Test command", root->help); ASSERT(root->val == NULL); ASSERT(root->edges == NULL); ASSERT_EQUAL(CMDPARSE_OK, CmdSchema_AddPostional(root, "term", CmdSchema_NewArg('s'), CmdSchema_Required)); ASSERT(root->edges != NULL); ASSERT(root->size == 1); CmdSchema_AddNamed(root, "foo", CmdSchema_NewArg('s'), CmdSchema_Optional); ASSERT(root->size == 2); CmdSchema_AddFlag(root, "NX"); ASSERT(root->size == 3); CmdSchemaNode *sub = CmdSchema_AddSubSchema(root, "SUB", CmdSchema_Optional, "No Help"); ASSERT(sub != NULL); ASSERT(root->edges[3] == sub); ASSERT_EQUAL(sub->type, CmdSchemaNode_Schema); ASSERT_EQUAL(CMDPARSE_OK, CmdSchema_AddNamed(sub, "bar", CmdSchema_NewArg('l'), CmdSchema_Required)); ASSERT(sub->size == 1); ASSERT_EQUAL(CMDPARSE_OK, CmdSchema_AddFlag(root, "FLAG")); ASSERT(root->size == 5); ASSERT_EQUAL(CmdSchemaNode_Flag, root->edges[4]->type); ASSERT_EQUAL(CMDPARSE_OK, CmdSchema_AddPostional(root, "opt", CmdSchema_NewOption(3, (const char *[]){"FOO", "BAR", "BAZ"}), CmdSchema_Optional)); ASSERT(root->size == 6); ASSERT_EQUAL(CmdSchemaNode_PositionalArg, root->edges[5]->type); ASSERT_EQUAL(CmdSchemaElement_Option, root->edges[5]->val->type); CmdSchemaOption opt = root->edges[5]->val->opt; ASSERT_EQUAL(3, opt.num); ASSERT_STRING_EQ("FOO", opt.opts[0]); ASSERT_STRING_EQ("BAR", opt.opts[1]); ASSERT_STRING_EQ("BAZ", opt.opts[2]); printf("\n\n"); CmdSchemaNode_Free(root); CmdSchemaNode_Print(root, 0); return 0; } int testTuple() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "TUP", CmdSchema_NewTuple("lsd", (const char *[]){"foo", "bar", "baz"}), CmdSchema_Optional); CmdString *args = CmdParser_NewArgListV(5, "FOO", "TUP", "2", "hello", "0.5"); CmdSchemaNode_Print(sc, 0); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 5, &err, 1); if (err != NULL) printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg_Print(cmd, 0); ASSERT(cmd->type == CmdArg_Object); ASSERT_EQUAL(cmd->obj.len, 1); ASSERT_STRING_EQ(cmd->obj.entries[0].k, "TUP"); CmdArg *t = cmd->obj.entries[0].v; ASSERT_EQUAL(t->a.args[0]->type, CmdArg_Integer); ASSERT_EQUAL(t->a.args[0]->i, 2); ASSERT_EQUAL(t->a.args[1]->type, CmdArg_String); ASSERT_STRING_EQ(t->a.args[1]->s.str, "hello"); ASSERT_EQUAL(t->a.args[2]->type, CmdArg_Double); ASSERT_EQUAL(t->a.args[2]->d, 0.5); free(args); CmdArg_Free(cmd); // test out of range err = NULL; cmd = NULL; args = CmdParser_NewArgListV(4, "FOO", "TUP", "2", "hello"); rc = CmdParser_ParseCmd(sc, &cmd, args, 4, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); ASSERT(err != NULL); free(args); // Test invalid values err = NULL; cmd = NULL; args = CmdParser_NewArgListV(5, "FOO", "TUP", "xx", "hello", "xx"); rc = CmdParser_ParseCmd(sc, &cmd, args, 5, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); ASSERT(err != NULL); free(args); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } int testVector() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "vec", CmdSchema_NewVector('l'), CmdSchema_Optional); CmdString *args = CmdParser_NewArgListV(6, "FOO", "VEC", "3", "1", "2", "3"); CmdSchemaNode_Print(sc, 0); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 6, &err, 1); if (err != NULL) printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg_Print(cmd, 0); CmdArg *v = CmdArg_FirstOf(cmd, "vec"); ASSERT(v); CmdArgIterator it = CmdArg_Children(v); int i = 0; CmdArg *e = NULL; while (NULL != (e = CmdArgIterator_Next(&it, NULL))) { ASSERT_EQUAL(CmdArg_Integer, e->type); ASSERT_EQUAL(++i, e->i); } ASSERT_EQUAL(3, i); free(args); CmdArg_Free(cmd); // Test out of range args = CmdParser_NewArgListV(5, "FOO", "VEC", "3", "1", "2"); cmd = NULL; rc = CmdParser_ParseCmd(sc, &cmd, args, 5, &err, 1); if (err != NULL) printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); // Test parse error args = CmdParser_NewArgListV(6, "FOO", "VEC", "3", "1", "2", "x"); cmd = NULL; rc = CmdParser_ParseCmd(sc, &cmd, args, 6, &err, 1); if (err != NULL) printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } int testNamed() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "BAR", CmdSchema_NewArg('s'), CmdSchema_Optional); CmdString *args = CmdParser_NewArgListV(3, "FOO", "BAR", "baz"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 3, &err, 1); if (err != NULL) printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg_Print(cmd, 0); CmdArg *bar = CmdArg_FirstOf(cmd, "BAR"); ASSERT(bar); ASSERT(bar->type == CmdArg_String); ASSERT_STRING_EQ(bar->s.str, "baz"); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } int testPositional() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddPostional(sc, "BAR", CmdSchema_NewArg('s'), CmdSchema_Required); CmdSchema_AddPostional(sc, "BAZ", CmdSchema_NewArg('l'), CmdSchema_Required); CmdSchemaNode_Print(sc, 0); CmdString *args = CmdParser_NewArgListV(3, "FOO", "xxx", "123"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 3, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg *bar = CmdArg_FirstOf(cmd, "BAR"); ASSERT(bar->type == CmdArg_String); ASSERT_STRING_EQ(bar->s.str, "xxx"); CmdArg *baz = CmdArg_FirstOf(cmd, "BAZ"); ASSERT(baz->type == CmdArg_Integer); ASSERT_EQUAL(baz->i, 123); CmdArg_Print(cmd, 0); CmdArg_Free(cmd); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } int testFlag() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddFlag(sc, "BAR"); CmdSchema_AddFlag(sc, "BAZ"); CmdSchemaNode_Print(sc, 0); CmdString *args = CmdParser_NewArgListV(2, "FOO", "BAR"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 2, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg *bar = CmdArg_FirstOf(cmd, "bar"); ASSERT(bar); ASSERT_EQUAL(bar->type, CmdArg_Flag); ASSERT(bar->b == 1); CmdArg *baz = CmdArg_FirstOf(cmd, "baz"); ASSERT(baz); ASSERT_EQUAL(baz->type, CmdArg_Flag); ASSERT(baz->b == 0); free(args); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS } int testOption() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddPostional(sc, "barvaz", CmdSchema_NewOption(2, (const char *[]){"BAR", "BAZ"}), CmdSchema_Required); CmdSchemaNode_Print(sc, 0); CmdString *args = CmdParser_NewArgListV(2, "FOO", "BAR"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 2, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg *barvaz = CmdArg_FirstOf(cmd, "barvaz"); ASSERT(barvaz); ASSERT(barvaz->type == CmdArg_String); ASSERT_STRING_EQ(barvaz->s.str, "BAR"); CmdArg_Free(cmd); free(args); args = CmdParser_NewArgListV(2, "FOO", "BAZ"); rc = CmdParser_ParseCmd(sc, &cmd, args, 2, &err, 1); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); barvaz = CmdArg_FirstOf(cmd, "barvaz"); ASSERT(barvaz); ASSERT(barvaz->type == CmdArg_String); ASSERT_STRING_EQ(barvaz->s.str, "BAZ"); CmdArg_Free(cmd); free(args); args = CmdParser_NewArgListV(2, "FOO", "BGZ"); rc = CmdParser_ParseCmd(sc, &cmd, args, 2, &err, 1); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); ASSERT(err); free(args); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS } int testSubSchema() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchemaNode *sub = CmdSchema_AddSubSchema(sc, "SUB", CmdSchema_Required, NULL); CmdSchema_AddNamedWithHelp(sub, "BAR", CmdSchema_NewArg('s'), CmdSchema_Required, "Sub Bar"); CmdSchema_AddNamedWithHelp(sc, "BAR", CmdSchema_NewArg('s'), CmdSchema_Required, "Parent Bar"); CmdSchemaNode_Print(sc, 0); CmdString *args = CmdParser_NewArgListV(6, "FOO", "SUB", "BAR", "baz", "BAR", "gaz"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 6, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg *s = CmdArg_FirstOf(cmd, "sub"); ASSERT(s); ASSERT_EQUAL(CmdArg_Object, s->type); CmdArg *bar = CmdArg_FirstOf(s, "bar"); ASSERT(bar); ASSERT_EQUAL(CmdArg_String, bar->type); ASSERT_STRING_EQ("baz", bar->s.str); bar = CmdArg_FirstOf(cmd, "bar"); ASSERT(bar); ASSERT_EQUAL(CmdArg_String, bar->type); ASSERT_STRING_EQ("gaz", bar->s.str); CmdArg_Free(cmd); CmdSchemaNode_Free(sc); free(args); RETURN_TEST_SUCCESS } int testRequired() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "BAR", CmdSchema_NewArg('s'), CmdSchema_Optional); CmdSchema_AddNamed(sc, "BAZ", CmdSchema_NewArg('s'), CmdSchema_Required); CmdString *args = CmdParser_NewArgListV(3, "FOO", "BAZ", "123"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 3, &err, 1); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg_Print(cmd, 0); CmdArg_Free(cmd); free(args); cmd = NULL; args = CmdParser_NewArgListV(3, "FOO", "BAR", "123"); rc = CmdParser_ParseCmd(sc, &cmd, args, 3, &err, 1); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); ASSERT(err); free(args); free(err); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS } int testRepeating() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "BAR", CmdSchema_NewArg('l'), CmdSchema_Optional | CmdSchema_Repeating); CmdSchema_AddNamed(sc, "BAZ", CmdSchema_NewArg('s'), CmdSchema_Optional); CmdString *args = CmdParser_NewArgListV(9, "FOO", "BAR", "0", "BAZ", "abc", "BAR", "1", "BAR", "2"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 9, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); ASSERT(cmd->obj.len == 4); CmdArg_Print(cmd, 0); CmdArgIterator it = CmdArg_Select(cmd, "bar"); int i = 0; CmdArg *c = NULL; while (NULL != (c = CmdArgIterator_Next(&it, NULL))) { ASSERT_EQUAL(CmdArg_Integer, c->type); ASSERT_EQUAL(i++, c->i); } ASSERT_EQUAL(3, i); c = CmdArg_FirstOf(cmd, "baz"); ASSERT(c); ASSERT_EQUAL(CmdArg_String, c->type); ASSERT_STRING_EQ("abc", c->s.str); CmdArg_Free(cmd); free(args); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } int testStrict() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "BAR", CmdSchema_NewArg('l'), CmdSchema_Optional | CmdSchema_Repeating); CmdString *args = CmdParser_NewArgListV(9, "FOO", "BAR", "0", "BAR", "1", "BAR", "2", "BAZ", "bag"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 9, &err, 1); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(err); ASSERT(!cmd); rc = CmdParser_ParseCmd(sc, &cmd, args, 9, &err, 0); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(!err); ASSERT(cmd); CmdArg_Free(cmd); free(args); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } int testVariadic() { CmdSchemaNode *sc = NewSchema("FOO", "Test command"); CmdSchema_AddNamed(sc, "BAR", CmdSchema_NewArg('l'), CmdSchema_Optional | CmdSchema_Repeating); ASSERT_EQUAL(CMDPARSE_OK, CmdSchema_AddPostional(sc, "BAZ", CmdSchema_NewVariadicVector("sd"), CmdSchema_Required)); // can't add anything after a variadic vector ASSERT_EQUAL(CMDPARSE_ERR, CmdSchema_AddPostional(sc, "BAG", CmdSchema_NewArg('s'), CmdSchema_Required)); CmdSchemaNode_Print(sc, 0); CmdString *args = CmdParser_NewArgListV(10, "FOO", "BAR", "0", "one", "1", "two", "2", "three", "3", "four"); CmdArg *cmd = NULL; char *err = NULL; int rc = CmdParser_ParseCmd(sc, &cmd, args, 10, &err, 0); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_OK, rc); ASSERT(cmd != NULL); CmdArg *vec = CmdArg_FirstOf(cmd, "baz"); ASSERT(vec); ASSERT_EQUAL(CmdArg_Array, vec->type); ASSERT_EQUAL(3, vec->a.len); CmdArgIterator it = CmdArg_Children(vec); CmdArg *c; int i = 0; const char *expected[] = {"one", "two", "three"}; while (NULL != (c = CmdArgIterator_Next(&it, NULL))) { ASSERT_EQUAL(CmdArg_Array, c->type); ASSERT_EQUAL(2, c->a.len); ASSERT_EQUAL(CmdArg_String, c->a.args[0]->type); ASSERT_STRING_EQ(expected[i], c->a.args[0]->s.str); i++; ASSERT_EQUAL(i, c->a.args[1]->d); } ASSERT_EQUAL(3, i); CmdArg_Print(cmd, 0); CmdArg_Free(cmd); // test strict parsing - we have an extra arg here... rc = CmdParser_ParseCmd(sc, &cmd, args, 10, &err, 1); printf("%s\n", err); ASSERT_EQUAL(CMDPARSE_ERR, rc); ASSERT(cmd == NULL); ASSERT(err); free(args); CmdSchemaNode_Free(sc); RETURN_TEST_SUCCESS; } void exampleZadd() { // Creating the command CmdSchemaNode *sc = NewSchema("ZADD", "ZAdd command"); // Adding the key argument - string typed. // Note that even positional args need a name to be referenced by CmdSchema_AddPostional(sc, "key", CmdSchema_NewArg('s'), CmdSchema_Required); // Adding [NX|XX] CmdSchema_AddPostional(sc, "nx_xx", CmdSchema_NewOption(2, (const char *[]){"NX", "XX"}), CmdSchema_Optional); // Add the CH and INCR flags CmdSchema_AddFlag(sc, "CH"); CmdSchema_AddFlag(sc, "INCR"); // Add the score/member variadic vector. "ds" means pairs will be consumed as double and string // and grouped into arrays CmdSchema_AddPostional(sc, "pairs", CmdSchema_NewVariadicVector("ds"), CmdSchema_Required); // Let's create the argument list CmdString *args = CmdParser_NewArgListV(9, "ZADD", "foo", "NX", "0", "bar", "1.3", "baz", "5", "froo"); // Parsing the arguments char *err; CmdArg *cmd; if (CmdParser_ParseCmd(sc, &cmd, args, 9, &err, 1) == CMDPARSE_ERR) { printf("%s\n", err); exit(-1); } CmdArg_Print(cmd, 0); // Get the score/member vector CmdArg *pairs = CmdArg_FirstOf(cmd, "pairs"); // Create an iterator for the score/member pairs CmdArgIterator it = CmdArg_Children(pairs); CmdArg *pair; // Walk the iterator while (NULL != (pair = CmdArgIterator_Next(&it, NULL))) { // Accessing the sub elements is done in a similar way. Each element is an array in turn. Since // we know its size and it is typed, we can access the values directly printf("Score: %f, element %s\n", CMDARG_ARRELEM(pair, 0)->d, CMDARG_ARRELEM(pair, 1)->s.str); } } TEST_MAIN({ exampleZadd(); TESTFUNC(testSchema); TESTFUNC(testTuple); TESTFUNC(testVector); TESTFUNC(testNamed); TESTFUNC(testPositional); TESTFUNC(testFlag); TESTFUNC(testOption); TESTFUNC(testSubSchema); TESTFUNC(testRequired); TESTFUNC(testRepeating); TESTFUNC(testStrict); TESTFUNC(testVariadic); })RediSearch-1.2.2/src/rmutil/test_heap.c000066400000000000000000000013031364126773500177630ustar00rootroot00000000000000#include #include "heap.h" #include "assert.h" int cmp(void *a, void *b) { int *__a = (int *) a; int *__b = (int *) b; return *__a - *__b; } int main(int argc, char **argv) { int myints[] = {10, 20, 30, 5, 15}; Vector *v = NewVector(int, 5); for (int i = 0; i < 5; i++) { Vector_Push(v, myints[i]); } Make_Heap(v, 0, v->top, cmp); int n; Vector_Get(v, 0, &n); assert(30 == n); Heap_Pop(v, 0, v->top, cmp); v->top = 4; Vector_Get(v, 0, &n); assert(20 == n); Vector_Push(v, 99); Heap_Push(v, 0, v->top, cmp); Vector_Get(v, 0, &n); assert(99 == n); Vector_Free(v); printf("PASS!\n"); return 0; } RediSearch-1.2.2/src/rmutil/test_periodic.c000066400000000000000000000010161364126773500206450ustar00rootroot00000000000000#include #include #include #include "periodic.h" #include "assert.h" #include "test.h" void timerCb(RedisModuleCtx *ctx, void *p) { int *x = p; (*x)++; } int testPeriodic() { int x = 0; struct RMUtilTimer *tm = RMUtil_NewPeriodicTimer(timerCb, &x, (struct timespec){.tv_sec = 0, .tv_nsec = 10000000}); sleep(1); ASSERT_EQUAL(0, RMUtilTimer_Stop(tm)); ASSERT(x > 0); ASSERT(x <= 100); RMUtilTimer_Free(tm); return 0; } TEST_MAIN({ TESTFUNC(testPeriodic); }); RediSearch-1.2.2/src/rmutil/test_priority_queue.c000066400000000000000000000014621364126773500221410ustar00rootroot00000000000000#include #include "assert.h" #include "priority_queue.h" int cmp(void* i1, void* i2) { int *__i1 = (int*) i1; int *__i2 = (int*) i2; return *__i1 - *__i2; } int main(int argc, char **argv) { PriorityQueue *pq = NewPriorityQueue(int, 10, cmp); assert(0 == Priority_Queue_Size(pq)); for (int i = 0; i < 5; i++) { Priority_Queue_Push(pq, i); } assert(5 == Priority_Queue_Size(pq)); Priority_Queue_Pop(pq); assert(4 == Priority_Queue_Size(pq)); Priority_Queue_Push(pq, 10); Priority_Queue_Push(pq, 20); Priority_Queue_Push(pq, 15); int n; Priority_Queue_Top(pq, &n); assert(20 == n); Priority_Queue_Pop(pq); Priority_Queue_Top(pq, &n); assert(15 == n); Priority_Queue_Free(pq); printf("PASS!\n"); return 0; } RediSearch-1.2.2/src/rmutil/test_util.h000066400000000000000000000040621364126773500200350ustar00rootroot00000000000000#ifndef __TEST_UTIL_H__ #define __TEST_UTIL_H__ #include "util.h" #include #include #include #define RMUtil_Test(f) \ if (argc < 2 || RMUtil_ArgExists(__STRING(f), argv, argc, 1)) { \ int rc = f(ctx); \ if (rc != REDISMODULE_OK) { \ RedisModule_ReplyWithError(ctx, "Test " __STRING(f) " FAILED"); \ return REDISMODULE_ERR;\ }\ } #define RMUtil_Assert(expr) if (!(expr)) { fprintf (stderr, "Assertion '%s' Failed\n", __STRING(expr)); return REDISMODULE_ERR; } #define RMUtil_AssertReplyEquals(rep, cstr) RMUtil_Assert( \ RMUtil_StringEquals(RedisModule_CreateStringFromCallReply(rep), RedisModule_CreateString(ctx, cstr, strlen(cstr))) \ ) # /** * Create an arg list to pass to a redis command handler manually, based on the format in fmt. * The accepted format specifiers are: * c - for null terminated c strings * s - for RedisModuleString* objects * l - for longs * * Example: RMUtil_MakeArgs(ctx, &argc, "clc", "hello", 1337, "world"); * * Returns an array of RedisModuleString pointers. The size of the array is store in argcp */ RedisModuleString **RMUtil_MakeArgs(RedisModuleCtx *ctx, int *argcp, const char *fmt, ...) { va_list ap; va_start(ap, fmt); RedisModuleString **argv = calloc(strlen(fmt), sizeof(RedisModuleString*)); int argc = 0; const char *p = fmt; while(*p) { if (*p == 'c') { char *cstr = va_arg(ap,char*); argv[argc++] = RedisModule_CreateString(ctx, cstr, strlen(cstr)); } else if (*p == 's') { argv[argc++] = va_arg(ap,void*);; } else if (*p == 'l') { long ll = va_arg(ap,long long); argv[argc++] = RedisModule_CreateStringFromLongLong(ctx, ll); } else { goto fmterr; } p++; } *argcp = argc; return argv; fmterr: free(argv); return NULL; } #endifRediSearch-1.2.2/src/rmutil/test_vector.c000066400000000000000000000022531364126773500203550ustar00rootroot00000000000000#include "vector.h" #include #include "test.h" int testVector() { Vector *v = NewVector(int, 1); ASSERT(v != NULL); // Vector_Put(v, 0, 1); // Vector_Put(v, 1, 3); for (int i = 0; i < 10; i++) { Vector_Push(v, i); } ASSERT_EQUAL(10, Vector_Size(v)); ASSERT_EQUAL(16, Vector_Cap(v)); for (int i = 0; i < Vector_Size(v); i++) { int n; int rc = Vector_Get(v, i, &n); ASSERT_EQUAL(1, rc); // printf("%d %d\n", rc, n); ASSERT_EQUAL(n, i); } Vector_Free(v); v = NewVector(char *, 0); int N = 4; char *strings[4] = {"hello", "world", "foo", "bar"}; for (int i = 0; i < N; i++) { Vector_Push(v, strings[i]); } ASSERT_EQUAL(N, Vector_Size(v)); ASSERT(Vector_Cap(v) >= N); for (int i = 0; i < Vector_Size(v); i++) { char *x; int rc = Vector_Get(v, i, &x); ASSERT_EQUAL(1, rc); ASSERT_STRING_EQ(x, strings[i]); } int rc = Vector_Get(v, 100, NULL); ASSERT_EQUAL(0, rc); Vector_Free(v); return 0; // Vector_Push(v, "hello"); // Vector_Push(v, "world"); // char *x = NULL; // int rc = Vector_Getx(v, 0, &x); // printf("rc: %d got %s\n", rc, x); } TEST_MAIN({ TESTFUNC(testVector); }); RediSearch-1.2.2/src/rmutil/util.c000066400000000000000000000176111364126773500167750ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include "util.h" /** Check if an argument exists in an argument list (argv,argc), starting at offset. @return 0 if it doesn't exist, otherwise the offset it exists in */ int RMUtil_ArgExists(const char *arg, RedisModuleString **argv, int argc, int offset) { size_t larg = strlen(arg); for (; offset < argc; offset++) { size_t l; const char *carg = RedisModule_StringPtrLen(argv[offset], &l); if (l != larg) continue; if (carg != NULL && strncasecmp(carg, arg, larg) == 0) { return offset; } } return 0; } /** Check if an argument exists in an argument list (argv,argc) @return -1 if it doesn't exist, otherwise the offset it exists in */ int RMUtil_ArgIndex(const char *arg, RedisModuleString **argv, int argc) { size_t larg = strlen(arg); for (int offset = 0; offset < argc; offset++) { size_t l; const char *carg = RedisModule_StringPtrLen(argv[offset], &l); if (l != larg) continue; if (carg != NULL && strncasecmp(carg, arg, larg) == 0) { return offset; } } return -1; } RMUtilInfo *RMUtil_GetRedisInfo(RedisModuleCtx *ctx) { RedisModuleCallReply *r = RedisModule_Call(ctx, "INFO", "c", "all"); if (r == NULL || RedisModule_CallReplyType(r) == REDISMODULE_REPLY_ERROR) { return NULL; } int cap = 100; // rough estimate of info lines RMUtilInfo *info = malloc(sizeof(RMUtilInfo)); info->entries = calloc(cap, sizeof(RMUtilInfoEntry)); int i = 0; size_t sz; char *text = (char *)RedisModule_CallReplyStringPtr(r, &sz); char *line = text; while (line && line < text + sz) { char *line = strsep(&text, "\r\n"); if (line == NULL) break; if (!(*line >= 'a' && *line <= 'z')) { // skip non entry lines continue; } char *key = strsep(&line, ":"); info->entries[i].key = strdup(key); info->entries[i].val = strdup(line); i++; if (i >= cap) { cap *= 2; info->entries = realloc(info->entries, cap * sizeof(RMUtilInfoEntry)); } } info->numEntries = i; RedisModule_FreeCallReply(r); return info; } void RMUtilRedisInfo_Free(RMUtilInfo *info) { for (int i = 0; i < info->numEntries; i++) { free(info->entries[i].key); free(info->entries[i].val); } free(info->entries); free(info); } int RMUtilInfo_GetInt(RMUtilInfo *info, const char *key, long long *val) { const char *p = NULL; if (!RMUtilInfo_GetString(info, key, &p)) { return 0; } *val = strtoll(p, NULL, 10); if ((errno == ERANGE && (*val == LONG_MAX || *val == LONG_MIN)) || (errno != 0 && *val == 0)) { *val = -1; return 0; } return 1; } int RMUtilInfo_GetString(RMUtilInfo *info, const char *key, const char **str) { int i; for (i = 0; i < info->numEntries; i++) { if (!strcmp(key, info->entries[i].key)) { *str = info->entries[i].val; return 1; } } return 0; } int RMUtilInfo_GetDouble(RMUtilInfo *info, const char *key, double *d) { const char *p = NULL; if (!RMUtilInfo_GetString(info, key, &p)) { printf("not found %s\n", key); return 0; } *d = strtod(p, NULL); if ((errno == ERANGE && (*d == HUGE_VAL || *d == -HUGE_VAL)) || (errno != 0 && *d == 0)) { return 0; } return 1; } /* c -- pointer to a Null terminated C string pointer. b -- pointer to a C buffer, followed by pointer to a size_t for its length s -- pointer to a RedisModuleString l -- pointer to Long long integer. d -- pointer to a Double * -- do not parse this argument at all */ int RMUtil_ParseArgs(RedisModuleString **argv, int argc, int offset, const char *fmt, ...) { va_list ap; va_start(ap, fmt); int rc = rmutil_vparseArgs(argv, argc, offset, fmt, ap); va_end(ap); return rc; } // Internal function that parses arguments based on the format described above int rmutil_vparseArgs(RedisModuleString **argv, int argc, int offset, const char *fmt, va_list ap) { int i = offset; char *c = (char *)fmt; while (*c && i < argc) { // read c string if (*c == 'c') { char **p = va_arg(ap, char **); *p = (char *)RedisModule_StringPtrLen(argv[i], NULL); } else if (*c == 'b') { char **p = va_arg(ap, char **); size_t *len = va_arg(ap, size_t *); *p = (char *)RedisModule_StringPtrLen(argv[i], len); } else if (*c == 's') { // read redis string RedisModuleString **s = va_arg(ap, void *); *s = argv[i]; } else if (*c == 'l') { // read long long long *l = va_arg(ap, long long *); if (RedisModule_StringToLongLong(argv[i], l) != REDISMODULE_OK) { return REDISMODULE_ERR; } } else if (*c == 'd') { // read double double *d = va_arg(ap, double *); if (RedisModule_StringToDouble(argv[i], d) != REDISMODULE_OK) { return REDISMODULE_ERR; } } else if (*c == '*') { // skip current arg // do nothing } else { return REDISMODULE_ERR; // WAT? } c++; i++; } // if the format is longer than argc, retun an error if (*c != 0) { return REDISMODULE_ERR; } return REDISMODULE_OK; } int RMUtil_ParseArgsAfter(const char *token, RedisModuleString **argv, int argc, const char *fmt, ...) { int pos = RMUtil_ArgIndex(token, argv, argc); if (pos < 0) { return REDISMODULE_ERR; } va_list ap; va_start(ap, fmt); int rc = rmutil_vparseArgs(argv, argc, pos + 1, fmt, ap); va_end(ap); return rc; } RedisModuleCallReply *RedisModule_CallReplyArrayElementByPath(RedisModuleCallReply *rep, const char *path) { if (rep == NULL) return NULL; RedisModuleCallReply *ele = rep; const char *s = path; char *e; long idx; do { errno = 0; idx = strtol(s, &e, 10); if ((errno == ERANGE && (idx == LONG_MAX || idx == LONG_MIN)) || (errno != 0 && idx == 0) || (REDISMODULE_REPLY_ARRAY != RedisModule_CallReplyType(ele)) || (s == e)) { ele = NULL; break; } s = e; ele = RedisModule_CallReplyArrayElement(ele, idx - 1); } while ((ele != NULL) && (*e != '\0')); return ele; } int RedisModule_TryGetValue(RedisModuleKey *key, const RedisModuleType *type, void **out) { if (key == NULL) { return RMUTIL_VALUE_MISSING; } int keytype = RedisModule_KeyType(key); if (keytype == REDISMODULE_KEYTYPE_EMPTY) { return RMUTIL_VALUE_EMPTY; } else if (keytype == REDISMODULE_KEYTYPE_MODULE && RedisModule_ModuleTypeGetType(key) == type) { *out = RedisModule_ModuleTypeGetValue(key); return RMUTIL_VALUE_OK; } else { return RMUTIL_VALUE_MISMATCH; } } RedisModuleString **RMUtil_ParseVarArgs(RedisModuleString **argv, int argc, int offset, const char *keyword, size_t *nargs) { if (offset > argc) { return NULL; } argv += offset; argc -= offset; int ix = RMUtil_ArgIndex(keyword, argv, argc); if (ix < 0) { return NULL; } else if (ix >= argc - 1) { *nargs = RMUTIL_VARARGS_BADARG; return argv; } argv += (ix + 1); argc -= (ix + 1); long long n = 0; RMUtil_ParseArgs(argv, argc, 0, "l", &n); if (n > argc - 1 || n < 0) { *nargs = RMUTIL_VARARGS_BADARG; return argv; } *nargs = n; return argv + 1; } void RMUtil_DefaultAofRewrite(RedisModuleIO *aof, RedisModuleString *key, void *value) { RedisModuleCtx *ctx = RedisModule_GetThreadSafeContext(NULL); RedisModuleCallReply *rep = RedisModule_Call(ctx, "DUMP", "s", key); if (rep != NULL && RedisModule_CallReplyType(rep) == REDISMODULE_REPLY_STRING) { size_t n; const char *s = RedisModule_CallReplyStringPtr(rep, &n); RedisModule_EmitAOF(aof, "RESTORE", "slb", key, 0, s, n); } else { RedisModule_Log(RedisModule_GetContextFromIO(aof), "warning", "Failed to emit AOF"); } if (rep != NULL) { RedisModule_FreeCallReply(rep); } RedisModule_FreeThreadSafeContext(ctx); }RediSearch-1.2.2/src/rmutil/util.h000066400000000000000000000127341364126773500170030ustar00rootroot00000000000000#ifndef __UTIL_H__ #define __UTIL_H__ #include #include /// make sure the response is not NULL or an error, and if it is sends the error to the client and /// exit the current function #define RMUTIL_ASSERT_NOERROR(ctx, r) \ if (r == NULL) { \ return RedisModule_ReplyWithError(ctx, "ERR reply is NULL"); \ } else if (RedisModule_CallReplyType(r) == REDISMODULE_REPLY_ERROR) { \ RedisModule_ReplyWithCallReply(ctx, r); \ return REDISMODULE_ERR; \ } #define __rmutil_register_cmd(ctx, cmd, f, mode) \ if (RedisModule_CreateCommand(ctx, cmd, f, mode, 1, 1, 1) == REDISMODULE_ERR) \ return REDISMODULE_ERR; #define RMUtil_RegisterReadCmd(ctx, cmd, f) \ __rmutil_register_cmd(ctx, cmd, f, "readonly") \ } #define RMUtil_RegisterWriteCmd(ctx, cmd, f) __rmutil_register_cmd(ctx, cmd, f, "write") /* RedisModule utilities. */ /** DEPRECATED: Return the offset of an arg if it exists in the arg list, or 0 if it's not there */ int RMUtil_ArgExists(const char *arg, RedisModuleString **argv, int argc, int offset); /* Same as argExists but returns -1 if not found. Use this, RMUtil_ArgExists is kept for backwards compatibility. */ int RMUtil_ArgIndex(const char *arg, RedisModuleString **argv, int argc); /** Automatically conver the arg list to corresponding variable pointers according to a given format. You pass it the command arg list and count, the starting offset, a parsing format, and pointers to the variables. The format is a string consisting of the following identifiers: c -- pointer to a Null terminated C string pointer. s -- pointer to a RedisModuleString l -- pointer to Long long integer. d -- pointer to a Double * -- do not parse this argument at all Example: If I want to parse args[1], args[2] as a long long and double, I do: double d; long long l; RMUtil_ParseArgs(argv, argc, 1, "ld", &l, &d); */ int RMUtil_ParseArgs(RedisModuleString **argv, int argc, int offset, const char *fmt, ...); /** Same as RMUtil_ParseArgs, but only parses the arguments after `token`, if it was found. This is useful for optional stuff like [LIMIT [offset] [limit]] */ int RMUtil_ParseArgsAfter(const char *token, RedisModuleString **argv, int argc, const char *fmt, ...); int rmutil_vparseArgs(RedisModuleString **argv, int argc, int offset, const char *fmt, va_list ap); #define RMUTIL_VARARGS_BADARG ((size_t)-1) /** * Parse arguments in the form of KEYWORD {len} {arg} .. {arg}_len. * If keyword is present, returns the position within `argv` containing the arguments. * Returns NULL if the keyword is not found. * If a parse error has occurred, `nargs` is set to RMUTIL_VARARGS_BADARG, but * the return value is not NULL. */ RedisModuleString **RMUtil_ParseVarArgs(RedisModuleString **argv, int argc, int offset, const char *keyword, size_t *nargs); /** * Default implementation of an AoF rewrite function that simply calls DUMP/RESTORE * internally. To use this function, pass it as the .aof_rewrite value in * RedisModuleTypeMethods */ void RMUtil_DefaultAofRewrite(RedisModuleIO *aof, RedisModuleString *key, void *value); // A single key/value entry in a redis info map typedef struct { char *key; char *val; } RMUtilInfoEntry; // Representation of INFO command response, as a list of k/v pairs typedef struct { RMUtilInfoEntry *entries; int numEntries; } RMUtilInfo; /** * Get redis INFO result and parse it as RMUtilInfo. * Returns NULL if something goes wrong. * The resulting object needs to be freed with RMUtilRedisInfo_Free */ RMUtilInfo *RMUtil_GetRedisInfo(RedisModuleCtx *ctx); /** * Free an RMUtilInfo object and its entries */ void RMUtilRedisInfo_Free(RMUtilInfo *info); /** * Get an integer value from an info object. Returns 1 if the value was found and * is an integer, 0 otherwise. the value is placed in 'val' */ int RMUtilInfo_GetInt(RMUtilInfo *info, const char *key, long long *val); /** * Get a string value from an info object. The value is placed in str. * Returns 1 if the key was found, 0 if not */ int RMUtilInfo_GetString(RMUtilInfo *info, const char *key, const char **str); /** * Get a double value from an info object. Returns 1 if the value was found and is * a correctly formatted double, 0 otherwise. the value is placed in 'd' */ int RMUtilInfo_GetDouble(RMUtilInfo *info, const char *key, double *d); /* * Returns a call reply array's element given by a space-delimited path. E.g., * the path "1 2 3" will return the 3rd element from the 2 element of the 1st * element from an array (or NULL if not found) */ RedisModuleCallReply *RedisModule_CallReplyArrayElementByPath(RedisModuleCallReply *rep, const char *path); /** * Extract the module type from an opened key. */ typedef enum { RMUTIL_VALUE_OK = 0, RMUTIL_VALUE_MISSING, RMUTIL_VALUE_EMPTY, RMUTIL_VALUE_MISMATCH } RMUtil_TryGetValueStatus; /** * Tries to extract the module-specific type from the value. * @param key an opened key (may be null) * @param type the pointer to the type to match to * @param[out] out if the value is present, will be set to it. * @return a value in the @ref RMUtil_TryGetValueStatus enum. */ int RedisModule_TryGetValue(RedisModuleKey *key, const RedisModuleType *type, void **out); #endif RediSearch-1.2.2/src/rmutil/vector.c000066400000000000000000000036471364126773500173260ustar00rootroot00000000000000#include "vector.h" #include inline int __vector_PushPtr(Vector *v, void *elem) { if (v->top == v->cap) { Vector_Resize(v, v->cap ? v->cap * 2 : 1); } __vector_PutPtr(v, v->top, elem); return v->top; } inline int Vector_Get(Vector *v, size_t pos, void *ptr) { // return 0 if pos is out of bounds if (pos >= v->top) { return 0; } memcpy(ptr, v->data + (pos * v->elemSize), v->elemSize); return 1; } /* Get the element at the end of the vector, decreasing the size by one */ inline int Vector_Pop(Vector *v, void *ptr) { if (v->top > 0) { if (ptr != NULL) { Vector_Get(v, v->top - 1, ptr); } v->top--; return 1; } return 0; } inline int __vector_PutPtr(Vector *v, size_t pos, void *elem) { // resize if pos is out of bounds if (pos >= v->cap) { Vector_Resize(v, pos + 1); } if (elem) { memcpy(v->data + pos * v->elemSize, elem, v->elemSize); } else { memset(v->data + pos * v->elemSize, 0, v->elemSize); } // move the end offset to pos if we grew if (pos >= v->top) { v->top = pos + 1; } return 1; } int Vector_Resize(Vector *v, size_t newcap) { int oldcap = v->cap; v->cap = newcap; v->data = realloc(v->data, v->cap * v->elemSize); // If we grew: // put all zeros at the newly realloc'd part of the vector if (newcap > oldcap) { int offset = oldcap * v->elemSize; memset(v->data + offset, 0, v->cap * v->elemSize - offset); } return v->cap; } Vector *__newVectorSize(size_t elemSize, size_t cap) { Vector *vec = malloc(sizeof(Vector)); vec->data = calloc(cap, elemSize); vec->top = 0; vec->elemSize = elemSize; vec->cap = cap; return vec; } void Vector_Free(Vector *v) { free(v->data); free(v); } /* return the used size of the vector, regardless of capacity */ inline int Vector_Size(Vector *v) { return v->top; } /* return the actual capacity */ inline int Vector_Cap(Vector *v) { return v->cap; } RediSearch-1.2.2/src/rmutil/vector.h000066400000000000000000000042671364126773500173320ustar00rootroot00000000000000#ifndef __VECTOR_H__ #define __VECTOR_H__ #include #include #include /* * Generic resizable vector that can be used if you just want to store stuff * temporarily. * Works like C++ std::vector with an underlying resizable buffer */ typedef struct { char *data; size_t elemSize; size_t cap; size_t top; } Vector; /* Create a new vector with element size. This should generally be used * internall by the NewVector macro */ Vector *__newVectorSize(size_t elemSize, size_t cap); // Put a pointer in the vector. To be used internall by the library int __vector_PutPtr(Vector *v, size_t pos, void *elem); /* * Create a new vector for a given type and a given capacity. * e.g. NewVector(int, 0) - empty vector of ints */ #define NewVector(type, cap) __newVectorSize(sizeof(type), cap) /* * get the element at index pos. The value is copied in to ptr. If pos is outside * the vector capacity, we return 0 * otherwise 1 */ int Vector_Get(Vector *v, size_t pos, void *ptr); /* Get the element at the end of the vector, decreasing the size by one */ int Vector_Pop(Vector *v, void *ptr); //#define Vector_Getx(v, pos, ptr) pos < v->cap ? 1 : 0; *ptr = //*(typeof(ptr))(v->data + v->elemSize*pos) /* * Put an element at pos. * Note: If pos is outside the vector capacity, we resize it accordingly */ #define Vector_Put(v, pos, elem) __vector_PutPtr(v, pos, elem ? &(typeof(elem)){elem} : NULL) /* Push an element at the end of v, resizing it if needed. This macro wraps * __vector_PushPtr */ #define Vector_Push(v, elem) __vector_PushPtr(v, elem ? &(typeof(elem)){elem} : NULL) int __vector_PushPtr(Vector *v, void *elem); /* resize capacity of v */ int Vector_Resize(Vector *v, size_t newcap); /* return the used size of the vector, regardless of capacity */ int Vector_Size(Vector *v); /* return the actual capacity */ int Vector_Cap(Vector *v); /* free the vector and the underlying data. Does not release its elements if * they are pointers*/ void Vector_Free(Vector *v); /* free the vector and the underlying data. Calls freeCB() for each non null element */ void Vector_FreeEx(Vector *v, void (*freeCB)(void *)); int __vecotr_PutPtr(Vector *v, size_t pos, void *elem); #endifRediSearch-1.2.2/src/run_valgrind.sh000077500000000000000000000003051364126773500173610ustar00rootroot00000000000000#!/bin/sh if [ -z "$REDIS_PATH" ]; then REDIS_PATH="redis-server" fi valgrind --tool=memcheck --leak-check=full --show-leak-kinds=definite --suppressions=leakcheck.supp $REDIS_PATH redis.conf RediSearch-1.2.2/src/search_ctx.h000066400000000000000000000017621364126773500166340ustar00rootroot00000000000000#ifndef __SEARCH_CTX_H #define __SEARCH_CTX_H #include #include "redismodule.h" #include "spec.h" #include "trie/trie_type.h" #include /** Context passed to all redis related search handling functions. */ typedef struct { RedisModuleCtx *redisCtx; RedisModuleKey *key; RedisModuleString *keyName; IndexSpec *spec; } RedisSearchCtx; #define SEARCH_CTX_STATIC(ctx, sp) \ (RedisSearchCtx) { \ .redisCtx = ctx, .spec = sp \ } #define SEARCH_CTX_SORTABLES(ctx) ((ctx && ctx->spec) ? ctx->spec->sortables : NULL) // Create a string context on the heap RedisSearchCtx *NewSearchCtx(RedisModuleCtx *ctx, RedisModuleString *indexName); RedisSearchCtx *NewSearchCtxDefault(RedisModuleCtx *ctx); RedisSearchCtx *SearchCtx_Refresh(RedisSearchCtx *sctx, RedisModuleString *keyName); // Same as above, only from c string (null terminated) RedisSearchCtx *NewSearchCtxC(RedisModuleCtx *ctx, const char *indexName); void SearchCtx_Free(RedisSearchCtx *sctx); #endif RediSearch-1.2.2/src/search_options.h000066400000000000000000000067751364126773500175420ustar00rootroot00000000000000#ifndef RS_QUERY_OPTIONS_H_ #define RS_QUERY_OPTIONS_H_ #include #include #include #include "config.h" typedef enum { // No summaries SummarizeMode_None = 0x00, SummarizeMode_Highlight = 0x01, SummarizeMode_Synopsis = 0x02 } SummarizeMode; #define SUMMARIZE_MODE_DEFAULT SummarizeMode_Synopsis #define SUMMARIZE_FRAGSIZE_DEFAULT 20 #define SUMMARIZE_FRAGCOUNT_DEFAULT 3 #define SUMMARIZE_DEFAULT_OPEN_TAG "" #define SUMMARIZE_DEFAULT_CLOSE_TAG "" #define SUMMARIZE_DEFAULT_SEPARATOR "... " typedef struct { uint32_t contextLen; uint16_t numFrags; char *separator; } SummarizeSettings; typedef struct { char *openTag; char *closeTag; } HighlightSettings; typedef struct { char *name; SummarizeSettings summarizeSettings; HighlightSettings highlightSettings; SummarizeMode mode; // Whether this field was explicitly requested by `RETURN` int explicitReturn; } ReturnedField; typedef struct { ReturnedField defaultField; // List of individual field specifications ReturnedField *fields; size_t numFields; uint16_t wantSummaries; // Whether this list contains fields explicitly selected by `RETURN` uint16_t explicitReturn; } FieldList; ReturnedField *FieldList_GetCreateField(FieldList *fields, RedisModuleString *rname); void FieldList_Free(FieldList *fields); typedef enum { Search_NoContent = 0x01, Search_Verbatim = 0x02, Search_NoStopwrods = 0x04, Search_WithScores = 0x08, Search_WithPayloads = 0x10, Search_InOrder = 0x20, Search_WithSortKeys = 0x40, Search_AggregationQuery = 0x80, Search_IsCursor = 0x100 } RSSearchFlags; #define RS_DEFAULT_QUERY_FLAGS 0x00 // maximum results you can get in one query #define SEARCH_REQUEST_RESULTS_MAX 1000000 typedef struct { /* The index name - since we need to open the spec in a side thread */ char *indexName; // Stopword list StopWordList *stopwords; // Query language const char *language; // Pointer to payload info. The target resides in the search request itself RSPayload *payload; // Global field mask from INFIELDS t_fieldMask fieldMask; // Global flags RSSearchFlags flags; // Slop control int slop; int concurrentMode; RSSortingKey *sortBy; /* Paging */ size_t offset; size_t num; /* Cursor read limit */ size_t chunksize; char *expander; char *scorer; /* Does any stage in the query plan beyond the fiters nees the index results? Only scoring * functions need them, so for aggregate queries it makes our lives simpler to not assign it */ int needIndexResult; long long timeoutMS; RSTimeoutPolicy timeoutPolicy; FieldList fields; } RSSearchOptions; #define RS_DEFAULT_SEARCHOPTS \ ((RSSearchOptions){ \ .stopwords = NULL, \ .language = NULL, \ .payload = NULL, \ .fieldMask = RS_FIELDMASK_ALL, \ .flags = RS_DEFAULT_QUERY_FLAGS, \ .slop = -1, \ .concurrentMode = 1, \ .sortBy = NULL, \ .offset = 0, \ .num = 10, \ .expander = NULL, \ .scorer = NULL, \ .needIndexResult = 0, \ .timeoutMS = 0, \ .timeoutPolicy = TimeoutPolicy_Default, \ .fields = (FieldList){}, \ }) #endifRediSearch-1.2.2/src/search_request.c000066400000000000000000000242451364126773500175220ustar00rootroot00000000000000#include "search_request.h" #include "aggregate/aggregate.h" #include "rmutil/strings.h" #include "rmutil/util.h" #include "stemmer.h" #include "ext/default.h" #include "extension.h" #include "query.h" #include "concurrent_ctx.h" #include "redismodule.h" #include "rmalloc.h" #include "summarize_spec.h" #include "query_plan.h" #include #include #include RSSearchRequest *ParseRequest(RedisSearchCtx *ctx, RedisModuleString **argv, int argc, char **errStr) { RSSearchRequest *req = calloc(1, sizeof(*req)); *req = (RSSearchRequest){ .opts = RS_DEFAULT_SEARCHOPTS, }; req->opts.indexName = strdup(RedisModule_StringPtrLen(argv[1], NULL)); // Detect "NOCONTENT" if (RMUtil_ArgExists("NOCONTENT", argv, argc, 3)) req->opts.flags |= Search_NoContent; // parse WISTHSCORES if (RMUtil_ArgExists("WITHSCORES", argv, argc, 3)) req->opts.flags |= Search_WithScores; // parse WITHPAYLOADS if (RMUtil_ArgExists("WITHPAYLOADS", argv, argc, 3)) req->opts.flags |= Search_WithPayloads; // parse WITHSORTKEYS if (RMUtil_ArgExists("WITHSORTKEYS", argv, argc, 3)) req->opts.flags |= Search_WithSortKeys; // Parse VERBATIM and LANGUAGE arguments if (RMUtil_ArgExists("VERBATIM", argv, argc, 3)) req->opts.flags |= Search_Verbatim; // Parse NOSTOPWORDS argument if (RMUtil_ArgExists("NOSTOPWORDS", argv, argc, 3)) req->opts.flags |= Search_NoStopwrods; if (RMUtil_ArgExists("INORDER", argv, argc, 3)) { req->opts.flags |= Search_InOrder; // the slop will be parsed later, this is just the default when INORDER and no SLOP req->opts.slop = __INT_MAX__; } int sumIdx; if ((sumIdx = RMUtil_ArgExists("SUMMARIZE", argv, argc, 3)) > 0) { size_t tmpOffset = sumIdx; if (ParseSummarize(argv, argc, &tmpOffset, &req->opts.fields) != REDISMODULE_OK) { SET_ERR(errStr, "Couldn't parse `SUMMARIZE`"); goto err; } } if ((sumIdx = RMUtil_ArgExists("HIGHLIGHT", argv, argc, 3)) > 0) { // Parse the highlighter spec size_t tmpOffset = sumIdx; if (ParseHighlight(argv, argc, &tmpOffset, &req->opts.fields) != REDISMODULE_OK) { SET_ERR(errStr, "Couldn't parse `HIGHLIGHT`"); goto err; } } // Parse LIMIT argument long long offset = 0, limit = 10; if (RMUtil_ParseArgsAfter("LIMIT", argv, argc, "ll", &offset, &limit) == REDISMODULE_OK) { if (offset < 0 || limit <= 0 || (offset + limit > SEARCH_REQUEST_RESULTS_MAX)) { SET_ERR(errStr, "Invalid LIMIT parameters"); goto err; } } req->opts.offset = offset; req->opts.num = limit; RedisModuleString **vargs; size_t nargs; // if INFIELDS exists, parse the field mask req->opts.fieldMask = RS_FIELDMASK_ALL; if ((vargs = RMUtil_ParseVarArgs(argv, argc, 3, "INFIELDS", &nargs))) { if (nargs == RMUTIL_VARARGS_BADARG) { SET_ERR(errStr, "Bad argument for `INFIELDS`"); goto err; } req->opts.fieldMask = IndexSpec_ParseFieldMask(ctx->spec, vargs, nargs); RedisModule_Log(ctx->redisCtx, "debug", "Parsed field mask: 0x%x", req->opts.fieldMask); } // Parse numeric filter. currently only one supported int filterIdx = RMUtil_ArgExists("FILTER", argv, argc, 3); if (filterIdx > 0) { req->numericFilters = ParseMultipleFilters(ctx, &argv[filterIdx], argc - filterIdx); if (req->numericFilters == NULL) { SET_ERR(errStr, "Invalid numeric filter"); goto err; } } // parse geo filter if present int gfIdx = RMUtil_ArgExists("GEOFILTER", argv, argc, 3); if (gfIdx > 0 && gfIdx + 6 <= argc) { req->geoFilter = malloc(sizeof(GeoFilter)); if (GeoFilter_Parse(req->geoFilter, &argv[gfIdx + 1], 5) == REDISMODULE_ERR) { SET_ERR(errStr, "Invalid geo filter"); goto err; } } RMUtil_ParseArgsAfter("SLOP", argv, argc, "l", &req->opts.slop); // make sure we search for "language" only after the query if (argc > 3) { RMUtil_ParseArgsAfter("LANGUAGE", &argv[3], argc - 3, "c", &req->opts.language); if (req->opts.language && !IsSupportedLanguage(req->opts.language, strlen(req->opts.language))) { SET_ERR(errStr, "Unsupported Stemmer Language"); req->opts.language = NULL; goto err; } if (req->opts.language) req->opts.language = strdup(req->opts.language); } // parse the optional expander argument if (argc > 3) { RMUtil_ParseArgsAfter("EXPANDER", &argv[2], argc - 2, "c", &req->opts.expander); } if (!req->opts.expander) { req->opts.expander = DEFAULT_EXPANDER_NAME; } req->opts.expander = strdup(req->opts.expander); // IF a payload exists, init it req->payload = (RSPayload){.data = NULL, .len = 0}; if (argc > 3) { RedisModuleString *ps = NULL; RMUtil_ParseArgsAfter("PAYLOAD", &argv[2], argc - 2, "s", &ps); if (ps) { const char *data = RedisModule_StringPtrLen(ps, &req->payload.len); req->payload.data = malloc(req->payload.len); memcpy(req->payload.data, data, req->payload.len); req->opts.payload = &req->payload; } } // parse SCORER argument RMUtil_ParseArgsAfter("SCORER", &argv[3], argc - 3, "c", &req->opts.scorer); if (req->opts.scorer) { req->opts.scorer = strdup(req->opts.scorer); if (Extensions_GetScoringFunction(NULL, req->opts.scorer) == NULL) { SET_ERR(errStr, "Invalid scorer name"); goto err; } } // Parse SORTBY argument RSSortingKey sortKey; if (ctx->spec->sortables != NULL && RSSortingTable_ParseKey(ctx->spec->sortables, &sortKey, &argv[3], argc - 3)) { req->opts.sortBy = malloc(sizeof(RSSortingKey)); *req->opts.sortBy = sortKey; } // parse the id filter arguments if ((vargs = RMUtil_ParseVarArgs(argv, argc, 2, "INKEYS", &nargs))) { if (nargs == RMUTIL_VARARGS_BADARG) { SET_ERR(errStr, "Bad argument for `INKEYS`"); goto err; } req->idFilter = NewIdFilter(vargs, nargs, &ctx->spec->docs); } // parse RETURN argument if ((vargs = RMUtil_ParseVarArgs(argv, argc, 2, "RETURN", &nargs))) { if (nargs == RMUTIL_VARARGS_BADARG) { SET_ERR(errStr, "Bad argument for `RETURN`"); goto err; } if (!nargs) { req->opts.flags |= Search_NoContent; } else { req->opts.fields.explicitReturn = 1; for (size_t ii = 0; ii < nargs; ++ii) { ReturnedField *rf = FieldList_GetCreateField(&req->opts.fields, vargs[ii]); rf->explicitReturn = 1; } } } if (req->opts.fields.wantSummaries && !Index_SupportsHighlight(ctx->spec)) { SET_ERR(errStr, "HIGHLIGHT and SUMMARIZE not supported for this index"); goto err; } FieldList_RestrictReturn(&req->opts.fields); req->rawQuery = (char *)RedisModule_StringPtrLen(argv[2], &req->qlen); req->rawQuery = strndup(req->rawQuery, req->qlen); return req; err: RSSearchRequest_Free(req); return NULL; } static void ReturnedField_Free(ReturnedField *field) { free(field->highlightSettings.openTag); free(field->highlightSettings.closeTag); free(field->summarizeSettings.separator); free(field->name); } void FieldList_Free(FieldList *fields) { for (size_t ii = 0; ii < fields->numFields; ++ii) { ReturnedField_Free(fields->fields + ii); } ReturnedField_Free(&fields->defaultField); free(fields->fields); } ReturnedField *FieldList_GetCreateField(FieldList *fields, RedisModuleString *rname) { const char *name = RedisModule_StringPtrLen(rname, NULL); size_t foundIndex = -1; for (size_t ii = 0; ii < fields->numFields; ++ii) { if (!strcasecmp(fields->fields[ii].name, name)) { return fields->fields + ii; } } fields->fields = realloc(fields->fields, sizeof(*fields->fields) * ++fields->numFields); ReturnedField *ret = fields->fields + (fields->numFields - 1); memset(ret, 0, sizeof *ret); ret->name = strdup(name); return ret; } void FieldList_RestrictReturn(FieldList *fields) { if (!fields->explicitReturn) { return; } size_t oix = 0; for (size_t ii = 0; ii < fields->numFields; ++ii) { if (fields->fields[ii].explicitReturn == 0) { ReturnedField_Free(fields->fields + ii); } else if (ii != oix) { fields->fields[oix++] = fields->fields[ii]; } else { ++oix; } } fields->numFields = oix; } void RSSearchRequest_Free(RSSearchRequest *req) { if (req->opts.indexName) free(req->opts.indexName); if (req->opts.expander) free(req->opts.expander); if (req->opts.scorer) free(req->opts.scorer); if (req->opts.language) free((char *)req->opts.language); if (req->rawQuery) free(req->rawQuery); if (req->geoFilter) { GeoFilter_Free(req->geoFilter); } if (req->idFilter) { IdFilter_Free(req->idFilter); } if (req->payload.data) { free(req->payload.data); } if (req->opts.sortBy) { RSSortingKey_Free(req->opts.sortBy); } if (req->numericFilters) { for (int i = 0; i < Vector_Size(req->numericFilters); i++) { NumericFilter *nf; Vector_Get(req->numericFilters, 0, &nf); if (nf) { NumericFilter_Free(nf); } } Vector_Free(req->numericFilters); } FieldList_Free(&req->opts.fields); free(req); } QueryParseCtx *SearchRequest_ParseQuery(RedisSearchCtx *sctx, RSSearchRequest *req, char **err) { QueryParseCtx *q = NewQueryParseCtx(sctx, req->rawQuery, req->qlen, &req->opts); RedisModuleCtx *ctx = sctx->redisCtx; if (!Query_Parse(q, err)) { Query_Free(q); return NULL; } if (!(req->opts.flags & Search_Verbatim)) { Query_Expand(q, req->opts.expander); } if (req->geoFilter) { Query_SetGeoFilter(q, req->geoFilter); // Let the query tree handle the deletion req->geoFilter = NULL; } if (req->idFilter) { Query_SetIdFilter(q, req->idFilter); } // set numeric filters if possible if (req->numericFilters) { for (int i = 0; i < Vector_Size(req->numericFilters); i++) { NumericFilter *nf; Vector_Get(req->numericFilters, i, &nf); if (nf) { Query_SetNumericFilter(q, nf); } } Vector_Free(req->numericFilters); req->numericFilters = NULL; } return q; } QueryPlan *SearchRequest_BuildPlan(RedisSearchCtx *sctx, RSSearchRequest *req, QueryParseCtx *q, char **err) { if (!q) return NULL; return Query_BuildPlan(sctx, q, &req->opts, Query_BuildProcessorChain, req, err); } RediSearch-1.2.2/src/search_request.h000066400000000000000000000021031364126773500175140ustar00rootroot00000000000000#ifndef RS_SEARCH_REQUEST_H__ #define RS_SEARCH_REQUEST_H__ #include #include "redisearch.h" #include "numeric_filter.h" #include "geo_index.h" #include "id_filter.h" #include "sortable.h" #include "search_options.h" #include "query_plan.h" typedef struct { char *rawQuery; size_t qlen; RSSearchOptions opts; /* Numeric Filters */ Vector *numericFilters; /* Geo Filter */ GeoFilter *geoFilter; /* InKeys */ IdFilter *idFilter; RSPayload payload; } RSSearchRequest; RSSearchRequest *ParseRequest(RedisSearchCtx *ctx, RedisModuleString **argv, int argc, char **errStr); void RSSearchRequest_Free(RSSearchRequest *req); QueryParseCtx *SearchRequest_ParseQuery(RedisSearchCtx *sctx, RSSearchRequest *req, char **err); QueryPlan *SearchRequest_BuildPlan(RedisSearchCtx *sctx, RSSearchRequest *req, QueryParseCtx *q, char **err); // Remove any fields not explicitly requested by `RETURN`, iff any explicit // fields actually exist. void FieldList_RestrictReturn(FieldList *fields); #endifRediSearch-1.2.2/src/sortable.c000066400000000000000000000162031364126773500163130ustar00rootroot00000000000000#include #include #include #include "dep/libnu/libnu.h" #include "rmutil/util.h" #include "rmutil/strings.h" #include "rmalloc.h" #include "sortable.h" #include "buffer.h" /* Create a sorting vector of a given length for a document */ RSSortingVector *NewSortingVector(int len) { if (len > RS_SORTABLES_MAX) { return NULL; } RSSortingVector *ret = rm_calloc(1, sizeof(RSSortingVector) + len * (sizeof(RSValue))); ret->len = len; // set all values to NIL for (int i = 0; i < len; i++) { ret->values[i] = RSValue_IncrRef(RS_NullVal()); } return ret; } /* Internal compare function between members of the sorting vectors, sorted by sk */ inline int RSSortingVector_Cmp(RSSortingVector *self, RSSortingVector *other, RSSortingKey *sk) { RSValue *v1 = self->values[sk->index]; RSValue *v2 = other->values[sk->index]; int rc = RSValue_Cmp(v1, v2); return sk->ascending ? rc : -rc; } /* Normalize sorting string for storage. This folds everything to unicode equivalent strings. The * allocated return string needs to be freed later */ char *normalizeStr(const char *str) { size_t buflen = 2 * strlen(str) + 1; char *lower_buffer = rm_calloc(buflen, 1); char *lower = lower_buffer; char *end = lower + buflen; const char *p = str; size_t off = 0; while (*p != 0 && lower < end) { uint32_t in = 0; p = nu_utf8_read(p, &in); const char *lo = nu_tofold(in); if (lo != 0) { uint32_t u = 0; do { lo = nu_casemap_read(lo, &u); if (u == 0) break; lower = nu_utf8_write(u, lower); } while (u != 0 && lower < end); } else { lower = nu_utf8_write(in, lower); } } return lower_buffer; } /* Put a value in the sorting vector */ void RSSortingVector_Put(RSSortingVector *tbl, int idx, void *p, int type) { if (idx <= RS_SORTABLES_MAX) { switch (type) { case RS_SORTABLE_NUM: tbl->values[idx] = RSValue_IncrRef(RS_NumVal(*(double *)p)); break; case RS_SORTABLE_STR: { char *ns = normalizeStr((char *)p); tbl->values[idx] = RSValue_IncrRef(RS_StringValT(ns, strlen(ns), RSString_RMAlloc)); break; } case RS_SORTABLE_NIL: default: tbl->values[idx] = RSValue_IncrRef(RS_NullVal()); break; } } } RSValue *RSSortingVector_Get(RSSortingVector *v, RSSortingKey *k) { if (!v || !k) return NULL; if (k->index >= 0 && k->index < v->len) { return v->values[k->index]; } return NULL; } /* Free a sorting vector */ void SortingVector_Free(RSSortingVector *v) { for (int i = 0; i < v->len; i++) { RSValue_Free(v->values[i]); } rm_free(v); } /* Save a sorting vector to rdb. This is called from the doc table */ void SortingVector_RdbSave(RedisModuleIO *rdb, RSSortingVector *v) { if (!v) { RedisModule_SaveUnsigned(rdb, 0); return; } RedisModule_SaveUnsigned(rdb, v->len); for (int i = 0; i < v->len; i++) { RSValue *val = v->values[i]; if (!val) { RedisModule_SaveUnsigned(rdb, RSValue_Null); continue; } RedisModule_SaveUnsigned(rdb, val->t); switch (val->t) { case RSValue_String: // save string - one extra byte for null terminator RedisModule_SaveStringBuffer(rdb, val->strval.str, val->strval.len + 1); break; case RSValue_Number: // save numeric value RedisModule_SaveDouble(rdb, val->numval); break; // for nil we write nothing default: break; } } } /* Load a sorting vector from RDB */ RSSortingVector *SortingVector_RdbLoad(RedisModuleIO *rdb, int encver) { int len = (int)RedisModule_LoadUnsigned(rdb); if (len > RS_SORTABLES_MAX || len <= 0) { return NULL; } RSSortingVector *vec = NewSortingVector(len); for (int i = 0; i < len; i++) { RSValueType t = RedisModule_LoadUnsigned(rdb); switch (t) { case RSValue_String: { size_t len; // strings include an extra character for null terminator. we set it to zero just in case char *s = RedisModule_LoadStringBuffer(rdb, &len); s[len - 1] = '\0'; vec->values[i] = RSValue_IncrRef(RS_StringValT(s, len - 1, RSString_RMAlloc)); break; } case RS_SORTABLE_NUM: // load numeric value vec->values[i] = RSValue_IncrRef(RS_NumVal(RedisModule_LoadDouble(rdb))); break; // for nil we read nothing case RS_SORTABLE_NIL: default: vec->values[i] = RSValue_IncrRef(RS_NullVal()); break; } } return vec; } size_t RSSortingVector_GetMemorySize(RSSortingVector *v) { if (!v) return 0; size_t sum = v->len * sizeof(RSValue *); for (int i = 0; i < v->len; i++) { if (!v->values[i]) continue; sum += sizeof(RSValue); RSValue *val = RSValue_Dereference(v->values[i]); if (val && RSValue_IsString(val)) { size_t sz; RSValue_StringPtrLen(val, &sz); sum += sz; } } return sum; } /* Create a new sorting table of a given length */ RSSortingTable *NewSortingTable(void) { RSSortingTable *tbl = rm_calloc(1, sizeof(*tbl)); return tbl; } void SortingTable_Free(RSSortingTable *t) { rm_free(t); } int RSSortingTable_Add(RSSortingTable *tbl, const char *name, RSValueType t) { assert(tbl->len < RS_SORTABLES_MAX); tbl->fields[tbl->len].name = name; tbl->fields[tbl->len].type = t; return tbl->len++; } RSValueType SortingTable_GetFieldType(RSSortingTable *tbl, const char *name, RSValueType deflt) { if (tbl) { for (int i = 0; i < tbl->len; i++) { if (!strcasecmp(tbl->fields[i].name, name)) { return tbl->fields[i].type; } } } return deflt; } /* Get the field index by name from the sorting table. Returns -1 if the field was not found */ int RSSortingTable_GetFieldIdx(RSSortingTable *tbl, const char *field) { if (!tbl) return -1; for (int i = 0; i < tbl->len; i++) { if (!strcasecmp(tbl->fields[i].name, field)) { return i; } } return -1; } /* Parse the sorting key of a query from redis arguments. We expect SORTBY {filed} [ASC/DESC]. The * default is ASC if not specified. This function returns 1 if we found sorting args, they are * valid and the field name exists */ int RSSortingTable_ParseKey(RSSortingTable *tbl, RSSortingKey *k, RedisModuleString **argv, int argc) { const char *field = NULL; k->index = -1; k->ascending = 1; if (!tbl) return 0; int sortPos = RMUtil_ArgIndex("SORTBY", argv, argc); if (sortPos >= 0 && sortPos + 1 < argc) { // parse the sorting field RMUtil_ParseArgs(argv, argc, sortPos + 1, "c", &field); // if we've found a field... if (field) { // parse optional ASC/DESC if (sortPos + 2 < argc) { if (RMUtil_StringEqualsCaseC(argv[sortPos + 2], "ASC")) { k->ascending = 1; } else if (RMUtil_StringEqualsCaseC(argv[sortPos + 2], "DESC")) { k->ascending = 0; } } // Get the actual field index from the descriptor k->index = RSSortingTable_GetFieldIdx(tbl, field); } } // return 1 on successful parse, 0 if not found or no sorting key return k->index == -1 ? 0 : 1; } void RSSortingKey_Free(RSSortingKey *k) { free(k); }RediSearch-1.2.2/src/sortable.h000066400000000000000000000063061364126773500163230ustar00rootroot00000000000000#ifndef __RS_SORTABLE_H__ #define __RS_SORTABLE_H__ #include "redismodule.h" #include "value.h" /* Sortables - embedded sorting fields. When creating a schema we can specify fields that will be * sortable. * A sortable field means that its data will get copied into an inline table inside the index. right * now we copy strings in full so you should be careful about string length of sortable fields*/ // Maximum number of sortables #define RS_SORTABLES_MAX 255 #pragma pack(1) #define RS_SORTABLE_NUM 1 // #define RS_SORTABLE_EMBEDDED_STR 2 #define RS_SORTABLE_STR 3 // nil value means the value is empty #define RS_SORTABLE_NIL 4 /* RSSortingVector is a vector of sortable values. All documents in a schema where sortable fields * are defined will have such a vector. */ typedef struct RSSortingVector { unsigned int len : 8; RSValue *values[]; } RSSortingVector; #pragma pack() /* RSSortingTable defines the length and names of the fields in a sorting vector. It is saved as * part of the spec */ typedef struct { int len : 8; struct sortField { const char *name; RSValueType type; } fields[RS_SORTABLES_MAX]; } RSSortingTable; /* RSSortingKey describes the sorting of a query and is parsed from the redis command arguments */ typedef struct { /* The field index we are sorting by */ int index : 8; /* ASC/DESC flag */ int ascending; } RSSortingKey; void RSSortingKey_Free(RSSortingKey *k); /* Create a sorting table. */ RSSortingTable *NewSortingTable(); /* Free a sorting table */ void SortingTable_Free(RSSortingTable *t); /** Adds a field and returns the ID of the newly-inserted field */ int RSSortingTable_Add(RSSortingTable *tbl, const char *name, RSValueType t); /* Parse the sorting key of a query from redis arguments. We expect SORTBY {filed} [ASC/DESC]. The * default is ASC if not specified. This function returns 1 if we found sorting args, they are * valid and the field name exists */ int RSSortingTable_ParseKey(RSSortingTable *tbl, RSSortingKey *k, RedisModuleString **argv, int argc); /* Get the field index by name from the sorting table. Returns -1 if the field was not found */ int RSSortingTable_GetFieldIdx(RSSortingTable *tbl, const char *field); /* Get the type of the field by its name. If it doesn't exist, return deflt */ RSValueType SortingTable_GetFieldType(RSSortingTable *tbl, const char *name, RSValueType delt); /* Internal compare function between members of the sorting vectors, sorted by sk */ int RSSortingVector_Cmp(RSSortingVector *self, RSSortingVector *other, RSSortingKey *sk); /* Put a value in the sorting vector */ void RSSortingVector_Put(RSSortingVector *tbl, int idx, void *p, int type); RSValue *RSSortingVector_Get(RSSortingVector *v, RSSortingKey *k); size_t RSSortingVector_GetMemorySize(RSSortingVector *v); /* Create a sorting vector of a given length for a document */ RSSortingVector *NewSortingVector(int len); /* Free a sorting vector */ void SortingVector_Free(RSSortingVector *v); /* Save a document's sorting vector into an rdb dump */ void SortingVector_RdbSave(RedisModuleIO *rdb, RSSortingVector *v); /* Load a sorting vector from RDB */ RSSortingVector *SortingVector_RdbLoad(RedisModuleIO *rdb, int encver); #endifRediSearch-1.2.2/src/spec.c000066400000000000000000000616111364126773500154350ustar00rootroot00000000000000#include "rmutil/strings.h" #include "rmutil/util.h" #include "spec.h" #include "util/logging.h" #include "util/misc.h" #include "rmutil/vector.h" #include "trie/trie_type.h" #include #include #include #include "rmalloc.h" #include "config.h" #include "cursor.h" #include "tag_index.h" void (*IndexSpec_OnCreate)(const IndexSpec *) = NULL; RedisModuleType *IndexSpecType; uint64_t spec_unique_ids = 0; /* * Get a field spec by field name. Case insensitive! * Return the field spec if found, NULL if not */ FieldSpec *IndexSpec_GetField(IndexSpec *spec, const char *name, size_t len) { for (int i = 0; i < spec->numFields; i++) { if (len != strlen(spec->fields[i].name)) continue; if (!strncasecmp(spec->fields[i].name, name, len)) { return &spec->fields[i]; } } return NULL; }; t_fieldMask IndexSpec_GetFieldBit(IndexSpec *spec, const char *name, size_t len) { FieldSpec *sp = IndexSpec_GetField(spec, name, len); if (!sp || sp->type != FIELD_FULLTEXT || !FieldSpec_IsIndexable(sp)) return 0; return FIELD_BIT(sp); } int IndexSpec_GetFieldSortingIndex(IndexSpec *sp, const char *name, size_t len) { if (!sp->sortables) return -1; return RSSortingTable_GetFieldIdx(sp->sortables, name); } char *GetFieldNameByBit(IndexSpec *sp, t_fieldMask id) { for (int i = 0; i < sp->numFields; i++) { if (FIELD_BIT(&sp->fields[i]) == id && sp->fields[i].type == FIELD_FULLTEXT && FieldSpec_IsIndexable(&sp->fields[i])) { return sp->fields[i].name; } } return NULL; } /* * Parse an index spec from redis command arguments. * Returns REDISMODULE_ERR if there's a parsing error. * The command only receives the relevant part of argv. * * The format currently is FT.CREATE {index} [NOOFFSETS] [NOFIELDS] [NOFREQS] SCHEMA {field} [TEXT [WEIGHT {weight}]] | [NUMERIC] */ IndexSpec *IndexSpec_ParseRedisArgs(RedisModuleCtx *ctx, RedisModuleString *name, RedisModuleString **argv, int argc, char **err) { const char *args[argc]; for (int i = 0; i < argc; i++) { args[i] = RedisModule_StringPtrLen(argv[i], NULL); } IndexSpec *ret = IndexSpec_Parse(RedisModule_StringPtrLen(name, NULL), args, argc, err); return ret; } IndexSpec *IndexSpec_CreateNew(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, char **err) { IndexSpec *sp = IndexSpec_ParseRedisArgs(ctx, argv[1], &argv[2], argc - 2, err); if (sp == NULL) { SET_ERR(err, "Could not parse index spec"); return NULL; } RedisModuleString *keyString = RedisModule_CreateStringPrintf(ctx, INDEX_SPEC_KEY_FMT, sp->name); RedisModuleKey *k = RedisModule_OpenKey(ctx, keyString, REDISMODULE_READ | REDISMODULE_WRITE); // check that the key is empty if (k == NULL || (RedisModule_KeyType(k) != REDISMODULE_KEYTYPE_EMPTY)) { if (RedisModule_ModuleTypeGetType(k) != IndexSpecType) { SET_ERR(err, "Wrong type for index key"); } else { SET_ERR(err, "Index already exists. Drop it first!"); } IndexSpec_Free(sp); return NULL; } sp->unique_id = spec_unique_ids++; // Start the garbage collector IndexSpec_StartGC(ctx, sp, GC_DEFAULT_HZ); CursorList_AddSpec(&RSCursors, sp->name, RSCURSORS_DEFAULT_CAPACITY); // set the value in redis RedisModule_ModuleTypeSetValue(k, IndexSpecType, sp); if (IndexSpec_OnCreate) { IndexSpec_OnCreate(sp); } return sp; } static int findOffset(const char *arg, const char **argv, int argc) { for (int i = 0; i < argc; i++) { if (!strcasecmp(arg, argv[i])) { return i; } } return -1; } static int argExists(const char *arg, const char **argv, int argc, int maxIdx) { int idx = findOffset(arg, argv, argc); // printf("pos for %s: %d\n", arg, idx); return idx >= 0 && idx < maxIdx; } char *strtolower(char *str) { char *p = str; while (*p) { *p = tolower(*p); p++; } return str; } /* Parse a field definition from argv, at *offset. We advance offset as we progress. * Returns 1 on successful parse, 0 otherwise */ static int parseFieldSpec(const char **argv, int *offset, int argc, FieldSpec *sp, char **err) { // if we're at the end - fail if (*offset >= argc) return 0; sp->sortIdx = -1; sp->options = 0; // the field name comes here sp->name = rm_strdup(argv[*offset]); // we can't be at the end if (++*offset == argc) return 0; // this is a text field if (!strcasecmp(argv[*offset], SPEC_TEXT_STR)) { // init default weight and type sp->type = FIELD_FULLTEXT; sp->textOpts.weight = 1.0; while (++*offset < argc) { if (!strcasecmp(argv[*offset], SPEC_NOSTEM_STR)) { sp->options |= FieldSpec_NoStemming; } else if (!strcasecmp(argv[*offset], SPEC_WEIGHT_STR)) { // weight with no value is invalid if (++*offset == argc) { return 0; } // try and parse the weight double d = strtod(argv[*offset], NULL); if (d == 0 || d == HUGE_VAL || d == -HUGE_VAL || d < 0) { return 0; } sp->textOpts.weight = d; } else { break; } } if (*offset == argc) { return 1; } } else if (!strcasecmp(argv[*offset], NUMERIC_STR)) { sp->type = FIELD_NUMERIC; ++*offset; } else if (!strcasecmp(argv[*offset], GEO_STR)) { // geo field sp->type = FIELD_GEO; ++*offset; } else if (!strcasecmp(argv[*offset], SPEC_TAG_STR)) { // tag field sp->type = FIELD_TAG; sp->tagOpts.separator = ','; sp->tagOpts.flags = TAG_FIELD_DEFAULT_FLAGS; ++*offset; // Detectet SEPARATOR Argument if (*offset + 1 < argc && !strcasecmp(argv[*offset], SPEC_SEPARATOR_STR)) { ++*offset; if (strlen(argv[*offset]) == 1) { sp->tagOpts.separator = argv[*offset][0]; } else { SET_ERR(err, "Invalid separator, only 1 byte ascii characters allowed"); return 0; } ++*offset; } } else { // not numeric and not text - nothing more supported currently return 0; } while (*offset < argc) { if (!strcasecmp(argv[*offset], SPEC_SORTABLE_STR)) { // cannot sort by geo fields if (sp->type == FIELD_GEO) { SET_ERR(err, "Geo fields cannot be sortable"); return 0; } sp->options |= FieldSpec_Sortable; ++*offset; } else if (!strcasecmp(argv[*offset], SPEC_NOINDEX_STR)) { sp->options |= FieldSpec_NotIndexable; ++*offset; } else { break; } } return 1; } /* Convert field type rsvalue type */ RSValueType fieldTypeToValueType(FieldType ft) { switch (ft) { case FIELD_NUMERIC: return RSValue_Number; case FIELD_FULLTEXT: case FIELD_TAG: return RSValue_String; case FIELD_GEO: // geo is not sortable so we don't care as of now... break; } return RSValue_Null; } /** * Add fields to an existing (or newly created) index. If the addition fails, * */ static int IndexSpec_AddFieldsInternal(IndexSpec *sp, const char **argv, int argc, char **err, int isNew) { const size_t prevNumFields = sp->numFields; const size_t prevSortLen = sp->sortables->len; int textId = -1; for (size_t ii = 0; ii < sp->numFields; ++ii) { const FieldSpec *fs = sp->fields + ii; if (fs->type == FIELD_FULLTEXT) { textId = MAX(textId, fs->textOpts.id); } } for (int offset = 0; offset < argc && sp->numFields < SPEC_MAX_FIELDS;) { sp->fields = rm_realloc(sp->fields, sizeof(*sp->fields) * (sp->numFields + 1)); FieldSpec *fs = sp->fields + sp->numFields; memset(fs, 0, sizeof(*fs)); fs->index = sp->numFields; if (!parseFieldSpec(argv, &offset, argc, fs, err)) { SET_ERR(err, "Could not parse field spec"); goto reset; } if (fs->type == FIELD_FULLTEXT && FieldSpec_IsIndexable(fs)) { // make sure we don't have too many indexable fields textId++; // Explicit if (textId == SPEC_MAX_FIELD_ID) { SET_ERR(err, "Too many TEXT fields in schema"); goto reset; } // If we need to store field flags and we have over 32 fields, we need to switch to wide // schema encoding if (textId >= SPEC_WIDEFIELD_THRESHOLD && (sp->flags & Index_StoreFieldFlags)) { if (isNew) { sp->flags |= Index_WideSchema; } else if ((sp->flags & Index_WideSchema) == 0) { SET_ERR(err, "Cannot add more fields. Declare index with wide fields to allow adding " "unlimited fields"); goto reset; } } fs->textOpts.id = textId; } if (IndexSpec_GetField(sp, fs->name, strlen(fs->name))) { SET_ERR(err, "Duplicate field in schema"); goto reset; } if (FieldSpec_IsSortable(fs)) { fs->sortIdx = RSSortingTable_Add(sp->sortables, fs->name, fieldTypeToValueType(fs->type)); } sp->numFields++; } return 1; reset: sp->numFields = prevNumFields; sp->sortables->len = prevSortLen; return 0; } int IndexSpec_AddFields(IndexSpec *sp, const char **argv, int argc, char **err) { return IndexSpec_AddFieldsInternal(sp, argv, argc, err, 0); } int IndexSpec_AddFieldsRedisArgs(IndexSpec *sp, RedisModuleString **argv, int argc, char **err) { const char *args[argc]; for (int i = 0; i < argc; i++) { args[i] = RedisModule_StringPtrLen(argv[i], NULL); } return IndexSpec_AddFields(sp, args, argc, err); } /* The format currently is FT.CREATE {index} [NOOFFSETS] [NOFIELDS] SCHEMA {field} [TEXT [WEIGHT {weight}]] | [NUMERIC] */ IndexSpec *IndexSpec_Parse(const char *name, const char **argv, int argc, char **err) { *err = NULL; int schemaOffset = findOffset(SPEC_SCHEMA_STR, argv, argc); // no schema or schema towrards the end if (schemaOffset == -1) { SET_ERR(err, "schema not found"); return NULL; } IndexSpec *spec = NewIndexSpec(name, 0); if (argExists(SPEC_NOOFFSETS_STR, argv, argc, schemaOffset)) { spec->flags &= ~(Index_StoreTermOffsets | Index_StoreByteOffsets); } if (argExists(SPEC_NOHL_STR, argv, argc, schemaOffset)) { spec->flags &= ~Index_StoreByteOffsets; } if (argExists(SPEC_NOFIELDS_STR, argv, argc, schemaOffset)) { spec->flags &= ~Index_StoreFieldFlags; } if (argExists(SPEC_NOFREQS_STR, argv, argc, schemaOffset)) { spec->flags &= ~Index_StoreFreqs; } if (argExists(SPEC_SCHEMA_EXPANDABLE_STR, argv, argc, schemaOffset)) { spec->flags |= Index_WideSchema; } int swIndex = findOffset(SPEC_STOPWORDS_STR, argv, argc); if (swIndex >= 0 && swIndex + 1 < schemaOffset) { int listSize = atoi(argv[swIndex + 1]); if (listSize < 0 || (swIndex + 2 + listSize > schemaOffset)) { SET_ERR(err, "Invalid stopword list size"); goto failure; } spec->stopwords = NewStopWordListCStr(&argv[swIndex + 2], listSize); spec->flags |= Index_HasCustomStopwords; } else { spec->stopwords = DefaultStopWordList(); } schemaOffset++; if (!IndexSpec_AddFieldsInternal(spec, argv + schemaOffset, argc - schemaOffset, err, 1)) { goto failure; } return spec; failure: // on failure free the spec fields array and return an error IndexSpec_Free(spec); return NULL; } /* Initialize some index stats that might be useful for scoring functions */ void IndexSpec_GetStats(IndexSpec *sp, RSIndexStats *stats) { stats->numDocs = sp->stats.numDocuments; stats->numTerms = sp->stats.numTerms; stats->avgDocLen = stats->numDocs ? (double)sp->stats.numRecords / (double)sp->stats.numDocuments : 0; } int IndexSpec_AddTerm(IndexSpec *sp, const char *term, size_t len) { int isNew = Trie_InsertStringBuffer(sp->terms, (char *)term, len, 1, 1, NULL); if (isNew) { sp->stats.numTerms++; sp->stats.termsSize += len; } return isNew; } /// given an array of random weights, return the a weighted random selection, as the index in the /// array size_t weightedRandom(double weights[], size_t len) { double totalWeight = 0; for (size_t i = 0; i < len; i++) { totalWeight += weights[i]; } double selection = totalWeight * ((double)rand() / (double)(RAND_MAX)); totalWeight = 0; for (size_t i = 0; i < len; i++) { if (selection >= totalWeight && selection <= (totalWeight + weights[i])) { return i; } totalWeight += weights[i]; } // fallback return 0; } /* Get a random term from the index spec using weighted random. Weighted random is done by * sampling N terms from the index and then doing weighted random on them. A sample size of 10-20 * should be enough. Returns NULL if the index is empty */ char *IndexSpec_GetRandomTerm(IndexSpec *sp, size_t sampleSize) { if (sampleSize > sp->terms->size) { sampleSize = sp->terms->size; } if (!sampleSize) return NULL; char *samples[sampleSize]; double weights[sampleSize]; for (int i = 0; i < sampleSize; i++) { char *ret = NULL; t_len len = 0; double d = 0; if (!Trie_RandomKey(sp->terms, &ret, &len, &d) || len == 0) { return NULL; } samples[i] = ret; weights[i] = d; } size_t selection = weightedRandom(weights, sampleSize); for (int i = 0; i < sampleSize; i++) { if (i != selection) { free(samples[i]); } } // printf("Selected %s --> %f\n", samples[selection], weights[selection]); return samples[selection]; } void IndexSpec_Free(void *ctx) { IndexSpec *spec = ctx; if (spec->gc) { GC_Stop(spec->gc); } if (spec->terms) { TrieType_Free(spec->terms); } DocTable_Free(&spec->docs); if (spec->fields != NULL) { for (int i = 0; i < spec->numFields; i++) { rm_free(spec->fields[i].name); } rm_free(spec->fields); } rm_free(spec->name); if (spec->sortables) { SortingTable_Free(spec->sortables); spec->sortables = NULL; } if (spec->stopwords) { StopWordList_Unref(spec->stopwords); spec->stopwords = NULL; } if (spec->smap) { SynonymMap_Free(spec->smap); } if (spec->indexStrs) { for (size_t ii = 0; ii < spec->numFields; ++ii) { if (spec->indexStrs[ii]) { RedisModule_FreeString(spec->strCtx, spec->indexStrs[ii]); } } rm_free(spec->indexStrs); RedisModule_FreeThreadSafeContext(spec->strCtx); } rm_free(spec); } IndexSpec *IndexSpec_LoadEx(RedisModuleCtx *ctx, RedisModuleString *formattedKey, int openWrite, RedisModuleKey **keyp) { RedisModuleKey *key_s = NULL; if (!keyp) { keyp = &key_s; } *keyp = RedisModule_OpenKey(ctx, formattedKey, REDISMODULE_READ | (openWrite ? REDISMODULE_WRITE : 0)); // we do not allow empty indexes when loading an existing index if (*keyp == NULL || RedisModule_KeyType(*keyp) == REDISMODULE_KEYTYPE_EMPTY || RedisModule_ModuleTypeGetType(*keyp) != IndexSpecType) { return NULL; } IndexSpec *ret = RedisModule_ModuleTypeGetValue(*keyp); return ret; } /* Load the spec from the saved version */ IndexSpec *IndexSpec_Load(RedisModuleCtx *ctx, const char *name, int openWrite) { RedisModuleString *s = RedisModule_CreateStringPrintf(ctx, INDEX_SPEC_KEY_FMT, name); return IndexSpec_LoadEx(ctx, s, openWrite, NULL); } RedisModuleString *IndexSpec_GetFormattedKey(IndexSpec *sp, const FieldSpec *fs) { if (!sp->indexStrs) { sp->indexStrs = rm_calloc(SPEC_MAX_FIELDS, sizeof(*sp->indexStrs)); sp->strCtx = RedisModule_GetThreadSafeContext(NULL); } RedisModuleString *ret = sp->indexStrs[fs->index]; if (!ret) { RedisSearchCtx sctx = {.redisCtx = sp->strCtx, .spec = sp}; if (fs->type == FIELD_NUMERIC) { ret = fmtRedisNumericIndexKey(&sctx, fs->name); } else if (fs->type == FIELD_TAG) { ret = TagIndex_FormatName(&sctx, fs->name); } else { // Unknown ret = NULL; } } if (!ret) { return NULL; } sp->indexStrs[fs->index] = ret; return ret; } t_fieldMask IndexSpec_ParseFieldMask(IndexSpec *sp, RedisModuleString **argv, int argc) { t_fieldMask ret = 0; for (int i = 0; i < argc; i++) { size_t len; const char *p = RedisModule_StringPtrLen(argv[i], &len); ret |= IndexSpec_GetFieldBit(sp, p, len); } return ret; } void IndexSpec_InitializeSynonym(IndexSpec *sp) { if (!sp->smap) { sp->smap = SynonymMap_New(false); sp->flags |= Index_HasSmap; } } int IndexSpec_ParseStopWords(IndexSpec *sp, RedisModuleString **strs, size_t len) { // if the index already has custom stopwords, let us free them first if (sp->stopwords && sp->flags & Index_HasCustomStopwords) { StopWordList_Unref(sp->stopwords); sp->stopwords = NULL; } sp->stopwords = NewStopWordList(strs, len); // on failure we revert to the default stopwords list if (sp->stopwords == NULL) { sp->stopwords = DefaultStopWordList(); sp->flags &= ~Index_HasCustomStopwords; return 0; } else { sp->flags |= Index_HasCustomStopwords; } return 1; } int IndexSpec_IsStopWord(IndexSpec *sp, const char *term, size_t len) { if (!sp->stopwords) { return 0; } return StopWordList_Contains(sp->stopwords, term, len); } IndexSpec *NewIndexSpec(const char *name, size_t numFields) { IndexSpec *sp = rm_calloc(1, sizeof(IndexSpec)); sp->fields = rm_calloc(sizeof(FieldSpec), numFields ? numFields : SPEC_MAX_FIELDS); sp->sortables = NewSortingTable(); sp->flags = INDEX_DEFAULT_FLAGS; sp->name = rm_strdup(name); sp->docs = DocTable_New(100); sp->stopwords = DefaultStopWordList(); sp->terms = NewTrie(); memset(&sp->stats, 0, sizeof(sp->stats)); return sp; } /* Start the garbage collection loop on the index spec. The GC removes garbage data left on the * index after removing documents */ void IndexSpec_StartGC(RedisModuleCtx *ctx, IndexSpec *sp, float initialHZ) { assert(sp->gc == NULL); if (sp->gc == NULL && RSGlobalConfig.enableGC) { RedisModuleString *keyName = RedisModule_CreateString(ctx, sp->name, strlen(sp->name)); RedisModule_RetainString(ctx, keyName); sp->gc = NewGarbageCollector(keyName, initialHZ, sp->unique_id); GC_Start(sp->gc); RedisModule_Log(ctx, "verbose", "Starting GC for index %s", sp->name); } } // given a field mask with one bit lit, it returns its offset int bit(t_fieldMask id) { for (int i = 0; i < sizeof(t_fieldMask) * 8; i++) { if (((id >> i) & 1) == 1) { return i; } } return 0; } // Backwards compat version of load for rdbs with version < 8 static void FieldSpec_RdbLoadCompat8(RedisModuleIO *rdb, FieldSpec *f, int encver) { f->name = RedisModule_LoadStringBuffer(rdb, NULL); // the old versions encoded the bit id of the field directly // we convert that to a power of 2 if (encver < INDEX_MIN_WIDESCHEMA_VERSION) { f->textOpts.id = bit(RedisModule_LoadUnsigned(rdb)); } else { // the new version encodes just the power of 2 of the bit f->textOpts.id = RedisModule_LoadUnsigned(rdb); } f->type = RedisModule_LoadUnsigned(rdb); f->textOpts.weight = RedisModule_LoadDouble(rdb); f->tagOpts.flags = TAG_FIELD_DEFAULT_FLAGS; f->tagOpts.separator = ','; if (encver >= 4) { f->options = RedisModule_LoadUnsigned(rdb); f->sortIdx = RedisModule_LoadSigned(rdb); } } static void FieldSpec_RdbSave(RedisModuleIO *rdb, FieldSpec *f) { RedisModule_SaveStringBuffer(rdb, f->name, strlen(f->name) + 1); RedisModule_SaveUnsigned(rdb, f->type); RedisModule_SaveUnsigned(rdb, f->options); RedisModule_SaveSigned(rdb, f->sortIdx); // Save text specific options if (f->type == FIELD_FULLTEXT) { RedisModule_SaveUnsigned(rdb, f->textOpts.id); RedisModule_SaveDouble(rdb, f->textOpts.weight); } else if (f->type == FIELD_TAG) { RedisModule_SaveUnsigned(rdb, f->tagOpts.flags); RedisModule_SaveStringBuffer(rdb, &f->tagOpts.separator, 1); } } static void FieldSpec_RdbLoad(RedisModuleIO *rdb, FieldSpec *f, int encver) { // Fall back to legacy encoding if needed if (encver < INDEX_MIN_TAGFIELD_VERSION) { return FieldSpec_RdbLoadCompat8(rdb, f, encver); } f->name = RedisModule_LoadStringBuffer(rdb, NULL); f->type = RedisModule_LoadUnsigned(rdb); f->options = RedisModule_LoadUnsigned(rdb); f->sortIdx = RedisModule_LoadSigned(rdb); // Load text specific options if (f->type == FIELD_FULLTEXT) { f->textOpts.id = RedisModule_LoadUnsigned(rdb); f->textOpts.weight = RedisModule_LoadDouble(rdb); } // Load tag specific options if (f->type == FIELD_TAG) { f->tagOpts.flags = RedisModule_LoadUnsigned(rdb); // Load the separator size_t l; char *s = RedisModule_LoadStringBuffer(rdb, &l); assert(l == 1); f->tagOpts.separator = *s; rm_free(s); } } static void IndexStats_RdbLoad(RedisModuleIO *rdb, IndexStats *stats) { stats->numDocuments = RedisModule_LoadUnsigned(rdb); stats->numTerms = RedisModule_LoadUnsigned(rdb); stats->numRecords = RedisModule_LoadUnsigned(rdb); stats->invertedSize = RedisModule_LoadUnsigned(rdb); stats->invertedCap = RedisModule_LoadUnsigned(rdb); stats->skipIndexesSize = RedisModule_LoadUnsigned(rdb); stats->scoreIndexesSize = RedisModule_LoadUnsigned(rdb); stats->offsetVecsSize = RedisModule_LoadUnsigned(rdb); stats->offsetVecRecords = RedisModule_LoadUnsigned(rdb); stats->termsSize = RedisModule_LoadUnsigned(rdb); } static void IndexStats_RdbSave(RedisModuleIO *rdb, IndexStats *stats) { RedisModule_SaveUnsigned(rdb, stats->numDocuments); RedisModule_SaveUnsigned(rdb, stats->numTerms); RedisModule_SaveUnsigned(rdb, stats->numRecords); RedisModule_SaveUnsigned(rdb, stats->invertedSize); RedisModule_SaveUnsigned(rdb, stats->invertedCap); RedisModule_SaveUnsigned(rdb, stats->skipIndexesSize); RedisModule_SaveUnsigned(rdb, stats->scoreIndexesSize); RedisModule_SaveUnsigned(rdb, stats->offsetVecsSize); RedisModule_SaveUnsigned(rdb, stats->offsetVecRecords); RedisModule_SaveUnsigned(rdb, stats->termsSize); } void *IndexSpec_RdbLoad(RedisModuleIO *rdb, int encver) { if (encver < INDEX_MIN_COMPAT_VERSION) { return NULL; } RedisModuleCtx *ctx = RedisModule_GetContextFromIO(rdb); IndexSpec *sp = rm_calloc(1, sizeof(IndexSpec)); sp->sortables = NewSortingTable(); sp->terms = NULL; sp->docs = DocTable_New(1000); sp->name = RedisModule_LoadStringBuffer(rdb, NULL); sp->gc = NULL; sp->flags = (IndexFlags)RedisModule_LoadUnsigned(rdb); if (encver < INDEX_MIN_NOFREQ_VERSION) { sp->flags |= Index_StoreFreqs; } sp->numFields = RedisModule_LoadUnsigned(rdb); sp->fields = rm_calloc(sp->numFields, sizeof(FieldSpec)); int maxSortIdx = -1; for (int i = 0; i < sp->numFields; i++) { FieldSpec *fs = sp->fields + i; FieldSpec_RdbLoad(rdb, sp->fields + i, encver); sp->fields[i].index = i; if (FieldSpec_IsSortable(fs)) { assert(fs->sortIdx < RS_SORTABLES_MAX); sp->sortables->fields[fs->sortIdx].name = fs->name; sp->sortables->fields[fs->sortIdx].type = fieldTypeToValueType(fs->type); sp->sortables->len = MAX(sp->sortables->len, fs->sortIdx + 1); } } IndexStats_RdbLoad(rdb, &sp->stats); DocTable_RdbLoad(&sp->docs, rdb, encver); /* For version 3 or up - load the generic trie */ if (encver >= 3) { sp->terms = TrieType_GenericLoad(rdb, 0); } else { sp->terms = NewTrie(); } if (sp->flags & Index_HasCustomStopwords) { sp->stopwords = StopWordList_RdbLoad(rdb, encver); } else { sp->stopwords = DefaultStopWordList(); } sp->unique_id = spec_unique_ids++; IndexSpec_StartGC(ctx, sp, GC_DEFAULT_HZ); RedisModuleString *specKey = RedisModule_CreateStringPrintf(ctx, INDEX_SPEC_KEY_FMT, sp->name); CursorList_AddSpec(&RSCursors, sp->name, RSCURSORS_DEFAULT_CAPACITY); RedisModule_FreeString(ctx, specKey); sp->smap = NULL; if (sp->flags & Index_HasSmap) { sp->smap = SynonymMap_RdbLoad(rdb, encver); } if (IndexSpec_OnCreate) { IndexSpec_OnCreate(sp); } return sp; } void IndexSpec_RdbSave(RedisModuleIO *rdb, void *value) { IndexSpec *sp = value; // we save the name plus the null terminator RedisModule_SaveStringBuffer(rdb, sp->name, strlen(sp->name) + 1); RedisModule_SaveUnsigned(rdb, (uint)sp->flags); RedisModule_SaveUnsigned(rdb, sp->numFields); for (int i = 0; i < sp->numFields; i++) { FieldSpec_RdbSave(rdb, &sp->fields[i]); } IndexStats_RdbSave(rdb, &sp->stats); DocTable_RdbSave(&sp->docs, rdb); // save trie of terms TrieType_GenericSave(rdb, sp->terms, 0); // If we have custom stopwords, save them if (sp->flags & Index_HasCustomStopwords) { StopWordList_RdbSave(rdb, sp->stopwords); } if (sp->flags & Index_HasSmap) { SynonymMap_RdbSave(rdb, sp->smap); } } void IndexSpec_Digest(RedisModuleDigest *digest, void *value) { } int IndexSpec_RegisterType(RedisModuleCtx *ctx) { RedisModuleTypeMethods tm = {.version = REDISMODULE_TYPE_METHOD_VERSION, .rdb_load = IndexSpec_RdbLoad, .rdb_save = IndexSpec_RdbSave, .aof_rewrite = GenericAofRewrite_DisabledHandler, .free = IndexSpec_Free}; IndexSpecType = RedisModule_CreateDataType(ctx, "ft_index0", INDEX_CURRENT_VERSION, &tm); if (IndexSpecType == NULL) { RedisModule_Log(ctx, "error", "Could not create index spec type"); return REDISMODULE_ERR; } return REDISMODULE_OK; } RediSearch-1.2.2/src/spec.h000066400000000000000000000223231364126773500154370ustar00rootroot00000000000000#ifndef __SPEC_H__ #define __SPEC_H__ #include #include #include "redismodule.h" #include "doc_table.h" #include "trie/trie_type.h" #include "sortable.h" #include "stopwords.h" #include "gc.h" #include "synonym_map.h" typedef enum fieldType { FIELD_FULLTEXT, FIELD_NUMERIC, FIELD_GEO, FIELD_TAG } FieldType; #define NUMERIC_STR "NUMERIC" #define GEO_STR "GEO" #define SPEC_NOOFFSETS_STR "NOOFFSETS" #define SPEC_NOFIELDS_STR "NOFIELDS" #define SPEC_NOFREQS_STR "NOFREQS" #define SPEC_NOHL_STR "NOHL" #define SPEC_SCHEMA_STR "SCHEMA" #define SPEC_SCHEMA_EXPANDABLE_STR "MAXTEXTFIELDS" #define SPEC_TEXT_STR "TEXT" #define SPEC_WEIGHT_STR "WEIGHT" #define SPEC_NOSTEM_STR "NOSTEM" #define SPEC_TAG_STR "TAG" #define SPEC_SORTABLE_STR "SORTABLE" #define SPEC_STOPWORDS_STR "STOPWORDS" #define SPEC_NOINDEX_STR "NOINDEX" #define SPEC_SEPARATOR_STR "SEPARATOR" static const char *SpecTypeNames[] = {[FIELD_FULLTEXT] = SPEC_TEXT_STR, [FIELD_NUMERIC] = NUMERIC_STR, [FIELD_GEO] = GEO_STR, [FIELD_TAG] = SPEC_TAG_STR}; #define INDEX_SPEC_KEY_PREFIX "idx:" #define INDEX_SPEC_KEY_FMT INDEX_SPEC_KEY_PREFIX "%s" #define SPEC_MAX_FIELDS 1024 #define SPEC_MAX_FIELD_ID (sizeof(t_fieldMask) * 8) // The threshold after which we move to a special encoding for wide fields #define SPEC_WIDEFIELD_THRESHOLD 32 typedef enum { FieldSpec_Sortable = 0x01, FieldSpec_NoStemming = 0x02, FieldSpec_NotIndexable = 0x04 } FieldSpecOptions; // Specific options for text fields typedef struct { // weight in frequency calculations double weight; // bitwise id for field masks t_fieldId id; } TextFieldOptions; // Flags for tag fields typedef enum { TagField_CaseSensitive = 0x01, TagField_TrimSpace = 0x02, TagField_RemoveAccents = 0x04, } TagFieldFlags; #define TAG_FIELD_DEFAULT_FLAGS TagField_TrimSpace &TagField_RemoveAccents; // Specific options for tag fields typedef struct { char separator; TagFieldFlags flags; } TagFieldOptions; /* The fieldSpec represents a single field in the document's field spec. Each field has a unique id that's a power of two, so we can filter fields by a bit mask. Each field has a type, allowing us to add non text fields in the future */ typedef struct fieldSpec { char *name; FieldType type; FieldSpecOptions options; int sortIdx; /** * Unique field index. Each field has a unique index regardless of its type */ uint16_t index; union { TextFieldOptions textOpts; TagFieldOptions tagOpts; }; // TODO: More options here.. } FieldSpec; #define FieldSpec_IsSortable(fs) ((fs)->options & FieldSpec_Sortable) #define FieldSpec_IsNoStem(fs) ((fs)->options & FieldSpec_NoStemming) #define FieldSpec_IsIndexable(fs) (0 == ((fs)->options & FieldSpec_NotIndexable)) typedef struct { size_t numDocuments; size_t numTerms; size_t numRecords; size_t invertedSize; size_t invertedCap; size_t skipIndexesSize; size_t scoreIndexesSize; size_t offsetVecsSize; size_t offsetVecRecords; size_t termsSize; } IndexStats; typedef enum { Index_StoreTermOffsets = 0x01, Index_StoreFieldFlags = 0x02, // Was StoreScoreIndexes, but these are always stored, so this option is unused Index__Reserved1 = 0x04, Index_HasCustomStopwords = 0x08, Index_StoreFreqs = 0x010, Index_StoreNumeric = 0x020, Index_StoreByteOffsets = 0x40, Index_WideSchema = 0x080, Index_HasSmap = 0x100, Index_DocIdsOnly = 0x00, } IndexFlags; /** * This "ID" type is independent of the field mask, and is used to distinguish * between one field and another field. For now, the ID is the position in * the array of fields - a detail we'll try to hide. */ typedef uint16_t FieldSpecDedupeArray[SPEC_MAX_FIELDS]; #define INDEX_DEFAULT_FLAGS \ Index_StoreFreqs | Index_StoreTermOffsets | Index_StoreFieldFlags | Index_StoreByteOffsets #define INDEX_STORAGE_MASK \ (Index_StoreFreqs | Index_StoreFieldFlags | Index_StoreTermOffsets | Index_StoreNumeric | \ Index_WideSchema) #define INDEX_CURRENT_VERSION 12 // Those versions contains doc table as array, we modified it to be array of linked lists #define INDEX_MIN_COMPACTED_DOCTABLE_VERSION 12 #define INDEX_MIN_COMPAT_VERSION 2 // Versions below this always store the frequency #define INDEX_MIN_NOFREQ_VERSION 6 // Versions below this encode field ids as the actual value, // above - field ides are encoded as their exponent (bit offset) #define INDEX_MIN_WIDESCHEMA_VERSION 7 // Versions below this didn't know tag indexes #define INDEX_MIN_TAGFIELD_VERSION 8 // Versions below this one don't save the document len when serializing the table #define INDEX_MIN_DOCLEN_VERSION 9 #define INDEX_MIN_BINKEYS_VERSION 10 #define Index_SupportsHighlight(spec) \ (((spec)->flags & Index_StoreTermOffsets) && ((spec)->flags & Index_StoreByteOffsets)) #define FIELD_BIT(fs) (((t_fieldMask)1) << (fs)->textOpts.id) typedef struct { char *name; FieldSpec *fields; int numFields; IndexStats stats; IndexFlags flags; Trie *terms; RSSortingTable *sortables; DocTable docs; StopWordList *stopwords; void *gc; SynonymMap *smap; uint64_t unique_id; RedisModuleCtx *strCtx; RedisModuleString **indexStrs; } IndexSpec; extern RedisModuleType *IndexSpecType; /* * Get a field spec by field name. Case insensitive! * Return the field spec if found, NULL if not */ FieldSpec *IndexSpec_GetField(IndexSpec *spec, const char *name, size_t len); char *GetFieldNameByBit(IndexSpec *sp, t_fieldMask id); /* Get the field bitmask id of a text field by name. Return 0 if the field is not found or is not a * text field */ t_fieldMask IndexSpec_GetFieldBit(IndexSpec *spec, const char *name, size_t len); /* Get a sortable field's sort table index by its name. return -1 if the field was not found or is * not sortable */ int IndexSpec_GetFieldSortingIndex(IndexSpec *sp, const char *name, size_t len); /* Initialize some index stats that might be useful for scoring functions */ void IndexSpec_GetStats(IndexSpec *sp, RSIndexStats *stats); /* * Parse an index spec from redis command arguments. * Returns REDISMODULE_ERR if there's a parsing error. * The command only receives the relvant part of argv. * * The format currently is , ... */ IndexSpec *IndexSpec_ParseRedisArgs(RedisModuleCtx *ctx, RedisModuleString *name, RedisModuleString **argv, int argc, char **err); /* Create a new index spec from redis arguments, set it in a redis key and start its GC. * If an error occurred - we set an error string in err and return NULL. */ IndexSpec *IndexSpec_CreateNew(RedisModuleCtx *ctx, RedisModuleString **argv, int argc, char **err); /* Start the garbage collection loop on the index spec */ void IndexSpec_StartGC(RedisModuleCtx *ctx, IndexSpec *sp, float initialHZ); /* Same as above but with ordinary strings, to allow unit testing */ IndexSpec *IndexSpec_Parse(const char *name, const char **argv, int argc, char **err); /* Add fields to a redis schema */ int IndexSpec_AddFields(IndexSpec *sp, const char **argv, int argc, char **err); int IndexSpec_AddFieldsRedisArgs(IndexSpec *sp, RedisModuleString **argv, int argc, char **err); IndexSpec *IndexSpec_Load(RedisModuleCtx *ctx, const char *name, int openWrite); IndexSpec *IndexSpec_LoadEx(RedisModuleCtx *ctx, RedisModuleString *formattedKey, int openWrite, RedisModuleKey **keyp); // Global hook called when an index spec is created extern void (*IndexSpec_OnCreate)(const IndexSpec *sp); int IndexSpec_AddTerm(IndexSpec *sp, const char *term, size_t len); /* Get a random term from the index spec using weighted random. Weighted random is done by sampling * N terms from the index and then doing weighted random on them. A sample size of 10-20 should be * enough */ char *IndexSpec_GetRandomTerm(IndexSpec *sp, size_t sampleSize); /* * Free an indexSpec. This doesn't free the spec itself as it's not allocated by the parser * and should be on the request's stack */ void IndexSpec_Free(void *spec); /* Parse a new stopword list and set it. If the parsing fails we revert to the default stopword * list, and return 0 */ int IndexSpec_ParseStopWords(IndexSpec *sp, RedisModuleString **strs, size_t len); /* Return 1 if a term is a stopword for the specific index */ int IndexSpec_IsStopWord(IndexSpec *sp, const char *term, size_t len); /** * Returns a string suitable for indexes. This saves on string creation/destruction */ RedisModuleString *IndexSpec_GetFormattedKey(IndexSpec *sp, const FieldSpec *fs); IndexSpec *NewIndexSpec(const char *name, size_t numFields); void *IndexSpec_RdbLoad(RedisModuleIO *rdb, int encver); void IndexSpec_RdbSave(RedisModuleIO *rdb, void *value); void IndexSpec_Digest(RedisModuleDigest *digest, void *value); int IndexSpec_RegisterType(RedisModuleCtx *ctx); // void IndexSpec_Free(void *value); /* * Parse the field mask passed to a query, map field names to a bit mask passed down to the * execution engine, detailing which fields the query works on. See FT.SEARCH for API details */ t_fieldMask IndexSpec_ParseFieldMask(IndexSpec *sp, RedisModuleString **argv, int argc); void IndexSpec_InitializeSynonym(IndexSpec *sp); #endif RediSearch-1.2.2/src/stemmer.c000066400000000000000000000063511364126773500161570ustar00rootroot00000000000000#include "stemmer.h" #include #include #include #include #include "dep/snowball/include/libstemmer.h" const char *__supportedLanguages[] = {"arabic", "danish", "dutch", "english", "finnish", "french", "german", "hungarian", "italian", "norwegian", "portuguese", "romanian", "russian", "spanish", "swedish", "tamil", "turkish", "chinese", NULL}; int IsSupportedLanguage(const char *language, size_t len) { for (int i = 0; __supportedLanguages[i] != NULL; i++) { if (!strncasecmp(language, __supportedLanguages[i], MAX(len, strlen(__supportedLanguages[i])))) { return 1; } } return 0; } struct sbStemmerCtx { struct sb_stemmer *sb; char *buf; size_t cap; }; const char *__sbstemmer_Stem(void *ctx, const char *word, size_t len, size_t *outlen) { const sb_symbol *b = (const sb_symbol *)word; struct sbStemmerCtx *stctx = ctx; struct sb_stemmer *sb = stctx->sb; const sb_symbol *stemmed = sb_stemmer_stem(sb, b, (int)len); if (stemmed) { *outlen = sb_stemmer_length(sb); // if the stem and its origin are the same - don't do anything if (*outlen == len && strncasecmp(word, (const char *)stemmed, len) == 0) { return NULL; } // reserver one character for the '+' prefix *outlen += 1; // make sure the expansion plus the 1 char prefix fit in our static buffer if (*outlen + 2 > stctx->cap) { stctx->cap = *outlen + 2; stctx->buf = realloc(stctx->buf, stctx->cap); } // the first location is saved for the + prefix memcpy(stctx->buf + 1, stemmed, *outlen + 1); return (const char *)stctx->buf; } return NULL; } void __sbstemmer_Free(Stemmer *s) { struct sbStemmerCtx *ctx = s->ctx; sb_stemmer_delete(ctx->sb); free(ctx->buf); free(ctx); free(s); } static int sbstemmer_Reset(Stemmer *stemmer, StemmerType type, const char *language) { if (type != stemmer->type || stemmer->language == NULL || strcmp(stemmer->language, language)) { return 0; } return 1; } Stemmer *__newSnowballStemmer(const char *language) { struct sb_stemmer *sb = sb_stemmer_new(language, NULL); // No stemmer available for this language if (!sb) { return NULL; } struct sbStemmerCtx *ctx = malloc(sizeof(*ctx)); ctx->sb = sb; ctx->cap = 24; ctx->buf = malloc(ctx->cap); ctx->buf[0] = STEM_PREFIX; Stemmer *ret = malloc(sizeof(Stemmer)); ret->ctx = ctx; ret->Stem = __sbstemmer_Stem; ret->Free = __sbstemmer_Free; ret->Reset = sbstemmer_Reset; return ret; } Stemmer *NewStemmer(StemmerType type, const char *language) { Stemmer *ret = NULL; if (type == SnowballStemmer) { ret = __newSnowballStemmer(language); if (!ret) { return NULL; } } else { fprintf(stderr, "Invalid stemmer type"); return NULL; } for (const char **s = __supportedLanguages; *s; s++) { if (!strcmp(language, *s)) { ret->language = *s; break; } } ret->type = type; return ret; } int ResetStemmer(Stemmer *stemmer, StemmerType type, const char *language) { return stemmer->Reset && stemmer->Reset(stemmer, type, language); }RediSearch-1.2.2/src/stemmer.h000066400000000000000000000024321364126773500161600ustar00rootroot00000000000000#ifndef __RS_STEMMER_H__ #define __RS_STEMMER_H__ #include typedef enum { SnowballStemmer } StemmerType; #define DEFAULT_LANGUAGE "english" #define STEM_PREFIX '+' #define STEMMER_EXPANDER_NAME "stem" /* Abstract "interface" for a pluggable stemmer, ensuring we can use multiple * stemmer libs */ typedef struct stemmer { void *ctx; const char *(*Stem)(void *ctx, const char *word, size_t len, size_t *outlen); void (*Free)(struct stemmer *); // Attempts to reset the stemmer using the given language and type. Returns 0 // if this stemmer cannot be reused. int (*Reset)(struct stemmer *, StemmerType type, const char *language); const char *language; StemmerType type; // Type of stemmer } Stemmer; Stemmer *NewStemmer(StemmerType type, const char *language); int ResetStemmer(Stemmer *stemmer, StemmerType type, const char *language); /* check if a language is supported by our stemmers */ int IsSupportedLanguage(const char *language, size_t len); /* Get a stemmer expander instance for registering it */ void RegisterStemmerExpander(); /* Snoball Stemmer wrapper implementation */ const char *__sbstemmer_Stem(void *ctx, const char *word, size_t len, size_t *outlen); void __sbstemmer_Free(Stemmer *s); Stemmer *__newSnowballStemmer(const char *language); #endifRediSearch-1.2.2/src/stopwords.c000066400000000000000000000063101364126773500165420ustar00rootroot00000000000000#define __REDISEARCH_STOPORWORDS_C__ #include "stopwords.h" #include "dep/triemap/triemap.h" #include "rmalloc.h" #include #define MAX_STOPWORDLIST_SIZE 1024 typedef struct StopWordList { TrieMap *m; size_t refcount; } StopWordList; StopWordList *__default_stopwords = NULL; StopWordList *__empty_stopwords = NULL; StopWordList *DefaultStopWordList() { if (__default_stopwords == NULL) { __default_stopwords = NewStopWordListCStr(DEFAULT_STOPWORDS, sizeof(DEFAULT_STOPWORDS) / sizeof(const char *) - 1); } return __default_stopwords; } StopWordList *EmptyStopWordList() { if (__empty_stopwords == NULL) { __empty_stopwords = NewStopWordList(NULL, 0); } return __empty_stopwords; } /* Check if a stopword list contains a term. The term must be already lowercased */ int StopWordList_Contains(StopWordList *sl, const char *term, size_t len) { if (!sl || !term) { return 0; } return TrieMap_Find(sl->m, (char *)term, len) != TRIEMAP_NOTFOUND; } /* Create a new stopword list from a list of redis strings */ StopWordList *NewStopWordList(RedisModuleString **strs, size_t len) { if (len > MAX_STOPWORDLIST_SIZE) { len = MAX_STOPWORDLIST_SIZE; } const char *cstrs[len]; for (size_t i = 0; i < len && i < MAX_STOPWORDLIST_SIZE; i++) { cstrs[i] = (char *)RedisModule_StringPtrLen(strs[i], NULL); } return NewStopWordListCStr(cstrs, len); } StopWordList *NewStopWordListCStr(const char **strs, size_t len) { if (len > MAX_STOPWORDLIST_SIZE) { len = MAX_STOPWORDLIST_SIZE; } StopWordList *sl = rm_malloc(sizeof(*sl)); sl->refcount = 1; sl->m = NewTrieMap(); for (size_t i = 0; i < len; i++) { char *t = strdup(strs[i]); if (t == NULL) { break; } size_t tlen = strlen(t); // lowercase the letters for (size_t pos = 0; pos < tlen; pos++) { if (isalpha(t[pos])) { t[pos] = tolower(t[pos]); } } // printf("Adding stopword %s\n", t); TrieMap_Add(sl->m, t, tlen, NULL, NULL); free(t); } return sl; } void StopWordList_Ref(StopWordList *sl) { __sync_fetch_and_add(&sl->refcount, 1); } /* Free a stopword list's memory */ void StopWordList_Unref(StopWordList *sl) { if (sl == __default_stopwords) { return; } if (__sync_sub_and_fetch(&sl->refcount, 1)) { return; } if (sl) { TrieMap_Free(sl->m, NULL); } rm_free(sl); } /* Load a stopword list from RDB */ StopWordList *StopWordList_RdbLoad(RedisModuleIO *rdb, int encver) { uint64_t elements = RedisModule_LoadUnsigned(rdb); StopWordList *sl = rm_malloc(sizeof(*sl)); sl->m = NewTrieMap(); sl->refcount = 1; while (elements--) { size_t len; char *str = RedisModule_LoadStringBuffer(rdb, &len); TrieMap_Add(sl->m, str, len, NULL, NULL); RedisModule_Free(str); } return sl; } /* Save a stopword list to RDB */ void StopWordList_RdbSave(RedisModuleIO *rdb, StopWordList *sl) { RedisModule_SaveUnsigned(rdb, sl->m->cardinality); TrieMapIterator *it = TrieMap_Iterate(sl->m, "", 0); char *str; tm_len_t len; void *ptr; while (TrieMapIterator_Next(it, &str, &len, &ptr)) { RedisModule_SaveStringBuffer(rdb, str, len); } TrieMapIterator_Free(it); } RediSearch-1.2.2/src/stopwords.h000066400000000000000000000027441364126773500165560ustar00rootroot00000000000000#ifndef __REDISEARCH_STOPWORDS_H___ #define __REDISEARCH_STOPWORDS_H___ #include #include "redismodule.h" static const char *DEFAULT_STOPWORDS[] = { "a", "is", "the", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "it", "no", "not", "of", "on", "or", "such", "that", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with", NULL}; #ifndef __REDISEARCH_STOPORWORDS_C__ typedef struct StopWordList StopWordList; #else struct StopWordList; #endif /* Check if a stopword list contains a term. The term must be already lowercased */ int StopWordList_Contains(struct StopWordList *sl, const char *term, size_t len); struct StopWordList *DefaultStopWordList(); struct StopWordList *EmptyStopWordList(); /* Create a new stopword list from a list of redis strings */ struct StopWordList *NewStopWordList(RedisModuleString **strs, size_t len); /* Create a new stopword list from a list of NULL-terminated C strings */ struct StopWordList *NewStopWordListCStr(const char **strs, size_t len); /* Free a stopword list's memory */ void StopWordList_Unref(struct StopWordList *sl); #define StopWordList_Free StopWordList_Unref /* Load a stopword list from RDB */ struct StopWordList *StopWordList_RdbLoad(RedisModuleIO *rdb, int encver); /* Save a stopword list to RDB */ void StopWordList_RdbSave(RedisModuleIO *rdb, struct StopWordList *sl); void StopWordList_Ref(struct StopWordList *sl); #endifRediSearch-1.2.2/src/summarize_spec.c000066400000000000000000000132451364126773500175310ustar00rootroot00000000000000#include "summarize_spec.h" #include "search_request.h" #include "rmutil/util.h" #include "rmutil/strings.h" #include "util/array.h" /** * HIGHLIGHT [FIELDS {num} {field}…] [TAGS {open} {close}] * SUMMARISE [FIELDS {num} {field} …] [LEN {len}] [FRAGS {num}] */ static int parseTags(RedisModuleString **argv, int argc, size_t *offset, const char **open, const char **close) { if (argc - *offset < 3) { return REDISMODULE_ERR; } ++*offset; RMUtil_ParseArgs(argv, argc, *offset, "cc", open, close); *offset += 2; return REDISMODULE_OK; } static int parseSeparator(RedisModuleString **argv, int argc, size_t *offset, const char **sep) { if (argc - *offset < 2) { return REDISMODULE_ERR; } ++*offset; *sep = RedisModule_StringPtrLen(argv[*offset], NULL); ++*offset; return REDISMODULE_OK; } static int parseFragLen(RedisModuleString **argv, int argc, size_t *offset, uint32_t *fragSize) { if (argc - *offset < 2) { return REDISMODULE_ERR; } ++*offset; long long tmp; if (RMUtil_ParseArgs(argv, argc, *offset, "l", &tmp) != REDISMODULE_OK) { return REDISMODULE_ERR; } *fragSize = tmp; ++*offset; return REDISMODULE_OK; } static int parseNumFrags(RedisModuleString **argv, int argc, size_t *offset, uint16_t *numFrags) { uint32_t numP; int rv = parseFragLen(argv, argc, offset, &numP); if (rv == 0) { *numFrags = numP; } return rv; } static int parseFieldList(RedisModuleString **argv, int argc, size_t *offset, FieldList *fields, Array *fieldPtrs) { ++*offset; if (*offset == argc) { return -1; } long long numFields = 0; if (RedisModule_StringToLongLong(argv[*offset], &numFields) != REDISMODULE_OK) { return -1; } ++*offset; if (argc - *offset < numFields) { return -1; } for (size_t ii = 0; ii < numFields; ++ii) { ReturnedField *fieldInfo = FieldList_GetCreateField(fields, argv[*offset + ii]); size_t ix = (fieldInfo - fields->fields); Array_Write(fieldPtrs, &ix, sizeof(size_t)); } *offset += numFields; return 0; } static void setHighlightSettings(HighlightSettings *tgt, const HighlightSettings *defaults) { free(tgt->closeTag); free(tgt->openTag); tgt->closeTag = NULL; tgt->openTag = NULL; if (defaults->openTag) { tgt->openTag = strdup(defaults->openTag); } if (defaults->closeTag) { tgt->closeTag = strdup(defaults->closeTag); } } static void setSummarizeSettings(SummarizeSettings *tgt, const SummarizeSettings *defaults) { *tgt = *defaults; if (tgt->separator) { tgt->separator = strdup(tgt->separator); } } static void setFieldSettings(ReturnedField *tgt, const ReturnedField *defaults, int isHighlight) { if (isHighlight) { setHighlightSettings(&tgt->highlightSettings, &defaults->highlightSettings); tgt->mode |= SummarizeMode_Highlight; } else { setSummarizeSettings(&tgt->summarizeSettings, &defaults->summarizeSettings); tgt->mode |= SummarizeMode_Synopsis; } } static int parseCommon(RedisModuleString **argv, int argc, size_t *offset, FieldList *fields, int isHighlight) { size_t numFields = 0; int rc = REDISMODULE_OK; ReturnedField defOpts = {.summarizeSettings = {.contextLen = SUMMARIZE_FRAGSIZE_DEFAULT, .numFrags = SUMMARIZE_FRAGCOUNT_DEFAULT, .separator = SUMMARIZE_DEFAULT_SEPARATOR}, .highlightSettings = {.openTag = SUMMARIZE_DEFAULT_OPEN_TAG, .closeTag = SUMMARIZE_DEFAULT_CLOSE_TAG}}; Array fieldPtrs; ++*offset; Array_Init(&fieldPtrs); if (*offset == argc) { goto ok; } if (RMUtil_StringEqualsCaseC(argv[*offset], "FIELDS")) { if (parseFieldList(argv, argc, offset, fields, &fieldPtrs) != 0) { rc = -1; goto done; } } while (*offset != argc) { if (isHighlight && RMUtil_StringEqualsCaseC(argv[*offset], "TAGS")) { if (parseTags(argv, argc, offset, (const char **)&defOpts.highlightSettings.openTag, (const char **)&defOpts.highlightSettings.closeTag) != 0) { rc = REDISMODULE_ERR; goto done; } } else if (!isHighlight && RMUtil_StringEqualsCaseC(argv[*offset], "LEN")) { if (parseFragLen(argv, argc, offset, &defOpts.summarizeSettings.contextLen) != 0) { rc = REDISMODULE_ERR; goto done; } } else if (!isHighlight && RMUtil_StringEqualsCaseC(argv[*offset], "FRAGS")) { if (parseNumFrags(argv, argc, offset, &defOpts.summarizeSettings.numFrags) != 0) { rc = REDISMODULE_ERR; goto done; } } else if (!isHighlight && RMUtil_StringEqualsCaseC(argv[*offset], "SEPARATOR")) { if (parseSeparator(argv, argc, offset, (const char **)&defOpts.summarizeSettings.separator) != 0) { rc = REDISMODULE_ERR; goto done; } } else { break; } } ok: if (fieldPtrs.len) { size_t numNewPtrs = ARRAY_GETSIZE_AS(&fieldPtrs, size_t); for (size_t ii = 0; ii < numNewPtrs; ++ii) { size_t ix = ARRAY_GETARRAY_AS(&fieldPtrs, size_t *)[ii]; ReturnedField *fieldInfo = fields->fields + ix; setFieldSettings(fieldInfo, &defOpts, isHighlight); } } else { setFieldSettings(&fields->defaultField, &defOpts, isHighlight); } fields->wantSummaries = 1; done: Array_Free(&fieldPtrs); return rc; } int ParseSummarize(RedisModuleString **argv, int argc, size_t *offset, FieldList *fields) { return parseCommon(argv, argc, offset, fields, 0); } int ParseHighlight(RedisModuleString **argv, int argc, size_t *offset, FieldList *fields) { return parseCommon(argv, argc, offset, fields, 1); }RediSearch-1.2.2/src/summarize_spec.h000066400000000000000000000004721364126773500175340ustar00rootroot00000000000000#ifndef SUMMARIZE_SPEC_H #define SUMMARIZE_SPEC_H #include #include "redismodule.h" #include "search_request.h" int ParseSummarize(RedisModuleString **argv, int argc, size_t *offset, FieldList *fields); int ParseHighlight(RedisModuleString **argv, int argc, size_t *offset, FieldList *fields); #endifRediSearch-1.2.2/src/synonym_map.c000066400000000000000000000152411364126773500170520ustar00rootroot00000000000000#include "synonym_map.h" #include "rmalloc.h" #include "util/fnv.h" #define INITIAL_CAPACITY 2 #define SYNONYM_PREFIX "~" static const uint64_t calculate_hash(const char* str, size_t len) { return fnv_64a_buf((void*)str, len, 0); } static TermData* TermData_New(char* term) { TermData* t_data = rm_malloc(sizeof(TermData)); t_data->term = term; t_data->ids = array_new(uint32_t, INITIAL_CAPACITY); return t_data; } static void TermData_Free(TermData* t_data) { rm_free(t_data->term); array_free(t_data->ids); rm_free(t_data); } static bool TermData_IdExists(TermData* t_data, uint32_t id) { for (uint32_t i = 0; i < array_len(t_data->ids); ++i) { if (t_data->ids[i] == id) { return true; } } return false; } static void TermData_AddId(TermData* t_data, uint32_t id) { if (!TermData_IdExists(t_data, id)) { t_data->ids = array_append(t_data->ids, id); } } static TermData* TermData_Copy(TermData* t_data) { TermData* copy = TermData_New(rm_strdup(t_data->term)); for (int i = 0; i < array_len(t_data->ids); ++i) { TermData_AddId(copy, t_data->ids[i]); } return copy; } static void TermData_RdbSave(RedisModuleIO* rdb, TermData* t_data) { RedisModule_SaveStringBuffer(rdb, t_data->term, strlen(t_data->term) + 1); RedisModule_SaveUnsigned(rdb, array_len(t_data->ids)); for (int i = 0; i < array_len(t_data->ids); ++i) { RedisModule_SaveUnsigned(rdb, t_data->ids[0]); } } static TermData* TermData_RdbLoad(RedisModuleIO* rdb) { char* term = RedisModule_LoadStringBuffer(rdb, NULL); TermData* t_data = TermData_New(term); uint64_t ids_len = RedisModule_LoadUnsigned(rdb); for (int i = 0; i < ids_len; ++i) { uint64_t id = RedisModule_LoadUnsigned(rdb); TermData_AddId(t_data, id); } return t_data; } SynonymMap* SynonymMap_New(bool is_read_only) { SynonymMap* smap = rm_new(SynonymMap); smap->h_table = kh_init(SynMapKhid); smap->curr_id = 0; smap->is_read_only = is_read_only; smap->read_only_copy = NULL; smap->ref_count = 1; return smap; } void SynonymMap_Free(SynonymMap* smap) { if (smap->is_read_only) { --smap->ref_count; if (smap->ref_count > 0) { return; } } TermData* t_data; kh_foreach_value(smap->h_table, t_data, TermData_Free(t_data)); kh_destroy(SynMapKhid, smap->h_table); if (smap->read_only_copy) { SynonymMap_Free(smap->read_only_copy); } rm_free(smap); } static const char** SynonymMap_RedisStringArrToArr(RedisModuleString** synonyms, size_t size) { const char** arr = rm_malloc(sizeof(char*) * size); for (size_t i = 0; i < size; ++i) { arr[i] = RedisModule_StringPtrLen(synonyms[i], NULL); } return arr; } uint32_t SynonymMap_GetMaxId(SynonymMap* smap) { return smap->curr_id; } uint32_t SynonymMap_AddRedisStr(SynonymMap* smap, RedisModuleString** synonyms, size_t size) { const char** arr = SynonymMap_RedisStringArrToArr(synonyms, size); uint32_t ret_val = SynonymMap_Add(smap, arr, size); rm_free(arr); return ret_val; } void SynonymMap_UpdateRedisStr(SynonymMap* smap, RedisModuleString** synonyms, size_t size, uint32_t id) { const char** arr = SynonymMap_RedisStringArrToArr(synonyms, size); SynonymMap_Update(smap, arr, size, id); rm_free(arr); } uint32_t SynonymMap_Add(SynonymMap* smap, const char** synonyms, size_t size) { uint32_t id = smap->curr_id; SynonymMap_Update(smap, synonyms, size, id); return id; } void SynonymMap_Update(SynonymMap* smap, const char** synonyms, size_t size, uint32_t id) { assert(!smap->is_read_only); int ret; for (size_t i = 0; i < size; i++) { khiter_t k = kh_get(SynMapKhid, smap->h_table, calculate_hash(synonyms[i], strlen(synonyms[i]))); if (k == kh_end(smap->h_table)) { k = kh_put(SynMapKhid, smap->h_table, calculate_hash(synonyms[i], strlen(synonyms[i])), &ret); kh_value(smap->h_table, k) = TermData_New(rm_strdup(synonyms[i])); } TermData_AddId(kh_value(smap->h_table, k), id); } if (smap->read_only_copy) { SynonymMap_Free(smap->read_only_copy); smap->read_only_copy = NULL; } if(id >= smap->curr_id){ smap->curr_id = id + 1; } } TermData* SynonymMap_GetIdsBySynonym(SynonymMap* smap, const char* synonym, size_t len) { khiter_t k = kh_get(SynMapKhid, smap->h_table, calculate_hash(synonym, len)); if (k == kh_end(smap->h_table)) { return NULL; } TermData* t_data = kh_value(smap->h_table, k); return t_data; } TermData** SynonymMap_DumpAllTerms(SynonymMap* smap, size_t* size) { *size = kh_size(smap->h_table); TermData** dump = rm_malloc(sizeof(TermData*) * (*size)); int j = 0; TermData* val; kh_foreach_value(smap->h_table, val, dump[j++] = val); return dump; } size_t SynonymMap_IdToStr(uint32_t id, char* buff, size_t len) { int bytes_written = snprintf(buff, len, SYNONYM_PREFIX "%d", id); assert(bytes_written >= 0 && bytes_written < len && "buffer is not big enough"); return bytes_written; } static void SynonymMap_CopyEntry(SynonymMap* smap, uint64_t key, TermData* t_data) { int ret; khiter_t k = kh_put(SynMapKhid, smap->h_table, key, &ret); kh_value(smap->h_table, k) = TermData_Copy(t_data); } static SynonymMap* SynonymMap_GenerateReadOnlyCopy(SynonymMap* smap) { int ret; SynonymMap* read_only_smap = SynonymMap_New(true); read_only_smap->curr_id = smap->curr_id; uint64_t key; TermData* t_data; kh_foreach(smap->h_table, key, t_data, SynonymMap_CopyEntry(read_only_smap, key, t_data)); return read_only_smap; } SynonymMap* SynonymMap_GetReadOnlyCopy(SynonymMap* smap) { assert(!smap->is_read_only); if (!smap->read_only_copy) { // create a new read only copy and return it smap->read_only_copy = SynonymMap_GenerateReadOnlyCopy(smap); } ++smap->read_only_copy->ref_count; return smap->read_only_copy; } void SynonymMap_RdbSaveEntry(RedisModuleIO* rdb, uint64_t key, TermData* t_data) { RedisModule_SaveUnsigned(rdb, key); TermData_RdbSave(rdb, t_data); } void SynonymMap_RdbSave(RedisModuleIO* rdb, void* value) { SynonymMap* smap = value; uint64_t key; TermData* t_data; RedisModule_SaveUnsigned(rdb, smap->curr_id); RedisModule_SaveUnsigned(rdb, kh_size(smap->h_table)); kh_foreach(smap->h_table, key, t_data, SynonymMap_RdbSaveEntry(rdb, key, t_data)); } void* SynonymMap_RdbLoad(RedisModuleIO* rdb, int encver) { int ret; SynonymMap* smap = SynonymMap_New(false); smap->curr_id = RedisModule_LoadUnsigned(rdb); uint64_t smap_kh_size = RedisModule_LoadUnsigned(rdb); for (int i = 0; i < smap_kh_size; ++i) { uint64_t key = RedisModule_LoadUnsigned(rdb); TermData* t_data = TermData_RdbLoad(rdb); khiter_t k = kh_put(SynMapKhid, smap->h_table, key, &ret); kh_value(smap->h_table, k) = t_data; } return smap; } RediSearch-1.2.2/src/synonym_map.h000066400000000000000000000100101364126773500170440ustar00rootroot00000000000000/* * synonym_map.h * * Created on: May 2, 2018 * Author: meir */ #ifndef SRC_SYNONYM_MAP_H_ #define SRC_SYNONYM_MAP_H_ #include "util/khash.h" #include "redismodule.h" #include "util/arr.h" #include /** * Holding a term data * term - the term itself * ids - array of synonyms group ids that the term is belong to */ typedef struct { char* term; uint32_t* ids; } TermData; static const int SynMapKhid = 90; KHASH_MAP_INIT_INT64(SynMapKhid, TermData*); /** * The synonym map data structure */ typedef struct SynonymMap_s { uint32_t ref_count; uint32_t curr_id; khash_t(SynMapKhid) * h_table; bool is_read_only; struct SynonymMap_s* read_only_copy; } SynonymMap; /** * Creates a new synonym map data structure. * If is_read_only is true then it will only be possible to read from * this synonym map, Any attemp to write to it will result in assert failure. */ SynonymMap* SynonymMap_New(bool is_read_only); /** * Free the given SynonymMap internal and structure */ void SynonymMap_Free(SynonymMap* smap); /** * Synonym groups ids are increasing uint32_t. * Return the max id i.e the next id which will be given to the next synonym group. */ uint32_t SynonymMap_GetMaxId(SynonymMap* smap); /** * Add new synonym group * smap - the synonym map * synonyms - RedisModuleString array contains the terms to add to the synonym map * size - RedisModuleString array size */ uint32_t SynonymMap_AddRedisStr(SynonymMap* smap, RedisModuleString** synonyms, size_t size); /** * Updating an already existing synonym group * smap - the synonym map * synonyms - RedisModuleString array contains the terms to add to the synonym map * size - RedisModuleString array size * id - the synoym group id to update */ void SynonymMap_UpdateRedisStr(SynonymMap* smap, RedisModuleString** synonyms, size_t size, uint32_t id); /** * Add new synonym group * smap - the synonym map * synonyms - char* array contains the terms to add to the synonym map * size - char* array size */ uint32_t SynonymMap_Add(SynonymMap* smap, const char** synonyms, size_t size); /** * Updating an already existing synonym group * smap - the synonym map * synonyms - char* array contains the terms to add to the synonym map * size - char* array size * id - the synoym group id to update */ void SynonymMap_Update(SynonymMap* smap, const char** synonyms, size_t size, uint32_t id); /** * Return all the ids of a given term * smap - the synonym map * synonym - the term to search for * len - term len */ TermData* SynonymMap_GetIdsBySynonym(SynonymMap* smap, const char* synonym, size_t len); /** * Return array of all terms and the group ids they belong to * smap - the synonym map * size - a pointer to size_t to retrieve the result size */ TermData** SynonymMap_DumpAllTerms(SynonymMap* smap, size_t* size); /** * Return an str representation of the given id * id - the id * buff - buffer to put the str representation * len - the buff len * return the size of the str writen to buff */ size_t SynonymMap_IdToStr(uint32_t id, char* buff, size_t len); /** * Retun a read only copy of the given smap. * The read only copy is used in indexing to allow thread safe access to the synonym data structur * The read only copy is manage with ref count. The smap contians a reference to its read only copy * and will free it only when its data structure will change, then when someone will ask again for a * read only copy it will create a new one. The old read only copy will be freed when all the * indexers will finish using it. */ SynonymMap* SynonymMap_GetReadOnlyCopy(SynonymMap* smap); /** * Macro for using SynonymMap_GetIdsBySynonym with NULL terminated string */ #define SynonymMap_GetIdsBySynonym_cstr(smap, synonym) \ SynonymMap_GetIdsBySynonym(smap, synonym, strlen(synonym)) /** * Save the given smap to an rdb */ void SynonymMap_RdbSave(RedisModuleIO* rdb, void* value); /** * Loadin smap from an rdb */ void* SynonymMap_RdbLoad(RedisModuleIO* rdb, int encver); #endif /* SRC_SYNONYM_MAP_H_ */ RediSearch-1.2.2/src/tag_index.c000066400000000000000000000221571364126773500164470ustar00rootroot00000000000000#include "tag_index.h" #include "rmalloc.h" #include "rmutil/vector.h" #include "inverted_index.h" #include "redis_index.h" #include "rmutil/util.h" #include "util/misc.h" #include "util/arr.h" #include // Tags are limited to 4096 each #define MAX_TAG_LEN 0x1000 /* See tag_index.h for documentation */ TagIndex *NewTagIndex() { TagIndex *idx = rm_new(TagIndex); idx->values = NewTrieMap(); return idx; } /* read the next token from the string */ static inline char *mySep(char sep, char **s, int trimSpace, size_t *toklen) { char *orig = *s; char *end = orig; // trim spaces before start of token if (trimSpace) { while (isspace(*orig)) orig++; } char *pos = *s; for (; *pos; ++pos) { if (*pos == sep) { *pos = '\0'; end = pos; *s = (char *)++pos; break; } } if (!*pos) { end = pos; *s = NULL; } // trim trailing spaces if (trimSpace) { char *x = end - 1; while (isspace(*x) && x >= orig) { *x-- = 0; } if (*x) end = x + 1; // consume an all space string if (x == orig && isspace(*x)) end = x; } *toklen = end - orig; return orig; } char *strtolower(char *str); /* Preprocess a document tag field, returning a vector of all tags split from the content */ char **TagIndex_Preprocess(const TagFieldOptions *opts, const DocumentField *data) { size_t sz; char *p = (char *)RedisModule_StringPtrLen(data->text, &sz); if (!p || sz == 0) return NULL; char **ret = array_new(char *, 4); char *pp = p = strndup(p, sz); while (p) { // get the next token size_t toklen; char *tok = mySep(opts->separator, &p, 1, &toklen); // this means we're at the end if (tok == NULL) break; if (toklen > 0) { // lowercase the string (TODO: non latin lowercase) if (!(opts->flags & TagField_CaseSensitive)) { tok = strtolower(tok); } tok = strndup(tok, MIN(toklen, MAX_TAG_LEN)); ret = array_append(ret, tok); } } free(pp); return ret; } /* Ecode a single docId into a specific tag value */ static inline size_t tagIndex_Put(TagIndex *idx, char *value, size_t len, t_docId docId) { InvertedIndex *iv = TrieMap_Find(idx->values, value, len); if (iv == TRIEMAP_NOTFOUND) { iv = NewInvertedIndex(Index_DocIdsOnly, 1); TrieMap_Add(idx->values, value, len, iv, NULL); } IndexEncoder enc = InvertedIndex_GetEncoder(Index_DocIdsOnly); RSIndexResult rec = {.type = RSResultType_Virtual, .docId = docId, .offsetsSz = 0, .freq = 0}; return InvertedIndex_WriteEntryGeneric(iv, enc, docId, &rec); } /* Index a vector of pre-processed tags for a docId */ size_t TagIndex_Index(TagIndex *idx, char **values, t_docId docId) { if (!values) return 0; size_t ret = 0; array_foreach(values, tok, { if (tok && *tok != '\0') { ret += tagIndex_Put(idx, tok, strlen(tok), docId); } }); return ret; } struct TagReaderCtx { TagIndex *idx; IndexIterator *it; }; static void TagReader_OnReopen(RedisModuleKey *k, void *privdata) { struct TagReaderCtx *ctx = privdata; // If the key has been deleted we'll get a NULL here, so we just mark ourselves as EOF if (k == NULL || RedisModule_ModuleTypeGetType(k) != TagIndexType) { ctx->it->Abort(ctx->it->ctx); return; } // If the key is valid, we just reset the reader's buffer reader to the current block pointer ctx->idx = RedisModule_ModuleTypeGetValue(k); IndexReader *ir = ctx->it->ctx; ir->idx = ir->idx; // the gc marker tells us if there is a chance the keys has undergone GC while we were asleep if (ir->gcMarker == ir->idx->gcMarker) { // no GC - we just go to the same offset we were at size_t offset = ir->br.pos; ir->br = NewBufferReader(ir->idx->blocks[ir->currentBlock].data); ir->br.pos = offset; } else { // if there has been a GC cycle on this key while we were asleep, the offset might not be valid // anymore. This means that we need to seek to last docId we were at // reset the state of the reader t_docId lastId = ir->lastId; ir->br = NewBufferReader(ir->idx->blocks[ir->currentBlock].data); ir->lastId = 0; // seek to the previous last id RSIndexResult *dummy = NULL; IR_SkipTo(ir, lastId, &dummy); } } /* Open an index reader to iterate a tag index for a specific tag. Used at query evaluation time. * Returns NULL if there is no such tag in the index */ IndexIterator *TagIndex_OpenReader(TagIndex *idx, DocTable *dt, const char *value, size_t len, ConcurrentSearchCtx *csx, RedisModuleKey *k, RedisModuleString *keyName, double weight) { InvertedIndex *iv = TrieMap_Find(idx->values, (char *)value, len); if (iv == TRIEMAP_NOTFOUND || !iv) { return NULL; } RSToken tok = {.str = (char *)value, .len = len}; RSQueryTerm *t = NewQueryTerm(&tok, 0); IndexReader *r = NewTermIndexReader(iv, dt, RS_FIELDMASK_ALL, t, weight); if (!r) { return NULL; } IndexIterator *it = NewReadIterator(r); // register the on reopen function if (csx) { struct TagReaderCtx *tc = malloc(sizeof(*tc)); tc->idx = idx; tc->it = it; ConcurrentSearch_AddKey(csx, k, REDISMODULE_READ, keyName, TagReader_OnReopen, tc, free, ConcurrentKey_SharedKey | ConcurrentKey_SharedKeyString); } return it; } /* Format the key name for a tag index */ RedisModuleString *TagIndex_FormatName(RedisSearchCtx *sctx, const char *field) { return RedisModule_CreateStringPrintf(sctx->redisCtx, TAG_INDEX_KEY_FMT, sctx->spec->name, field); } /* Open the tag index in redis */ TagIndex *TagIndex_Open(RedisModuleCtx *ctx, RedisModuleString *formattedKey, int openWrite, RedisModuleKey **keyp) { RedisModuleKey *key_s = NULL; if (!keyp) { keyp = &key_s; } *keyp = RedisModule_OpenKey(ctx, formattedKey, REDISMODULE_READ | (openWrite ? REDISMODULE_WRITE : 0)); int type = RedisModule_KeyType(*keyp); if (type != REDISMODULE_KEYTYPE_EMPTY && RedisModule_ModuleTypeGetType(*keyp) != TagIndexType) { return NULL; } /* Create an empty value object if the key is currently empty. */ TagIndex *ret = NULL; if (type == REDISMODULE_KEYTYPE_EMPTY) { if (openWrite) { ret = NewTagIndex(); RedisModule_ModuleTypeSetValue((*keyp), TagIndexType, ret); } } else { ret = RedisModule_ModuleTypeGetValue(*keyp); } return ret; } /* Serialize all the tags in the index to the redis client */ void TagIndex_SerializeValues(TagIndex *idx, RedisModuleCtx *ctx) { TrieMapIterator *it = TrieMap_Iterate(idx->values, "", 0); char *str; tm_len_t slen; void *ptr; RedisModule_ReplyWithArray(ctx, REDISMODULE_POSTPONED_ARRAY_LEN); long long count = 0; while (TrieMapIterator_Next(it, &str, &slen, &ptr)) { ++count; RedisModule_ReplyWithStringBuffer(ctx, str, slen); } RedisModule_ReplySetArrayLength(ctx, count); TrieMapIterator_Free(it); } RedisModuleType *TagIndexType; void *TagIndex_RdbLoad(RedisModuleIO *rdb, int encver) { unsigned long long elems = RedisModule_LoadUnsigned(rdb); TagIndex *idx = NewTagIndex(); while (elems--) { size_t slen; char *s = RedisModule_LoadStringBuffer(rdb, &slen); InvertedIndex *inv = InvertedIndex_RdbLoad(rdb, INVERTED_INDEX_ENCVER); assert(inv != NULL); TrieMap_Add(idx->values, s, MIN(slen, MAX_TAG_LEN), inv, NULL); rm_free(s); } return idx; } void TagIndex_RdbSave(RedisModuleIO *rdb, void *value) { TagIndex *idx = value; RedisModule_SaveUnsigned(rdb, idx->values->cardinality); TrieMapIterator *it = TrieMap_Iterate(idx->values, "", 0); char *str; tm_len_t slen; void *ptr; size_t count = 0; while (TrieMapIterator_Next(it, &str, &slen, &ptr)) { count++; RedisModule_SaveStringBuffer(rdb, str, slen); InvertedIndex *inv = ptr; InvertedIndex_RdbSave(rdb, inv); } assert(count == idx->values->cardinality); TrieMapIterator_Free(it); } void TagIndex_Digest(RedisModuleDigest *digest, void *value) { } void TagIndex_Free(void *p) { TagIndex *idx = p; TrieMap_Free(idx->values, InvertedIndex_Free); rm_free(idx); } size_t TagIndex_MemUsage(const void *value) { const TagIndex *idx = value; size_t sz = sizeof(*idx); TrieMapIterator *it = TrieMap_Iterate(idx->values, "", 0); char *str; tm_len_t slen; void *ptr; while (TrieMapIterator_Next(it, &str, &slen, &ptr)) { sz += slen + InvertedIndex_MemUsage((InvertedIndex *)ptr); } TrieMapIterator_Free(it); return sz; } int TagIndex_RegisterType(RedisModuleCtx *ctx) { RedisModuleTypeMethods tm = {.version = REDISMODULE_TYPE_METHOD_VERSION, .rdb_load = TagIndex_RdbLoad, .rdb_save = TagIndex_RdbSave, .aof_rewrite = GenericAofRewrite_DisabledHandler, .free = TagIndex_Free, .mem_usage = TagIndex_MemUsage}; TagIndexType = RedisModule_CreateDataType(ctx, "ft_tagidx", TAGIDX_CURRENT_VERSION, &tm); if (TagIndexType == NULL) { RedisModule_Log(ctx, "error", "Could not create attribute index type"); return REDISMODULE_ERR; } return REDISMODULE_OK; } RediSearch-1.2.2/src/tag_index.h000066400000000000000000000112721364126773500164500ustar00rootroot00000000000000#ifndef RS_TAG_INDEX_H_ #define RS_TAG_INDEX_H_ #include "redismodule.h" #include "doc_table.h" #include "document.h" #include "value.h" #include "geo_index.h" /** * A Tag Index is an index that indexes textual tags for documents, in a simple manner than a full * text index, although * it uses the same internal mechanism as a full-text index. * * The main differences are: * * 1. An entire tag index resides in a single redis key, and doesn't have a key per term * * 2. We do not perform stemming on tag indexes. * * 3. The tokenization is simpler: The user can determine a separator (defaults to a comma), * and we do whitespace trimming at the end of tags. * Thus, tags can contain spaces, punctuation marks, accents, etc. The only two transformations * we perform are lower-casing (not unicode sensitive as of now), and whitespace trimming. * * 4. Tags cannot be found from a general full-text search. i.e. if a document has a field called * "tags" with the values "foo" and "bar", searching for foo or bar without a special tag * modifier * (see below) will not return this document. * * 4. The index is much simpler and more compressed: We do not store frequencies, offset vectors of * field flags. * The index contains only docuent ids encoded as deltas. This means that an entry in a tag index * is usually * one or two bytes long. This makes them very memory efficient and fast. * * ## Creating a tag field * * Tag fields can be added to the schema in FT.ADD with the following syntax: * * FT.CREATE ... SCHEMA ... {field_name} TAG [SEPARATOR {sep}] * * SEPARATOR defaults to a comma (`,`), and can be any printable ascii character. For example: * * FT.CREATE idx SCHEMA tags TAG SEPARATOR ";" * * An unlimited number of tag fields can be created per document, as long as the overall number of * fields is under 1024. * * ## Querying Tag Fields * * As mentioned above, just searching for a tag without any modifiers will not retrieve documents * containing it. * * The syntax for matching tags in a query is as follows (the curly braces are part of the syntax in * this case): * * @:{ | | ...} * * e.g. * * @tags:{hello world | foo bar} * * **IMPORTANT**: When specifying multiple tags in the same tag clause, the semantic meaning is a * **UNION** of the documents containing any of the tags (as in a SQL WHERE IN clause). * If you need to intersect tags, you should repeat several tag clauses. * For example: * * FT.SEARCH idx "@tags:{hello | world}" * * Will return documents containing either hello or world (or both). But: * * FT.SEARCH idx "@tags:{hello} @tags:{world}" * * Will return documents containing **both tags**. * * Notice that since tags can contain spaces (the separator by default is a comma), so can tags in * the query. * * However, if a tag contains stopwords (for example, the tag `to be or not to be` will cause a * syntax error), * you can alternatively escape the spaces inside the tags to avoid syntax errors. In redis-cli and * some clients, a second escaping is needed: * * 127.0.0.7:6379> FT.SEARCH idx "@tags:{to\\ be\\ or\\ not\\ to\\ be}" * * */ typedef struct { TrieMap *values; } TagIndex; #define TAG_INDEX_KEY_FMT "tag:%s/%s" /* Format the key name for a tag index */ RedisModuleString *TagIndex_FormatName(RedisSearchCtx *sctx, const char *field); /* Create a new tag index*/ TagIndex *NewTagIndex(); /* Preprocess a document tag field, returning a vector of all tags split from the content */ char **TagIndex_Preprocess(const TagFieldOptions *opts, const DocumentField *data); static inline void TagIndex_FreePreprocessedData(char **s) { array_free(s); } /* Index a vector of pre-processed tags for a docId */ size_t TagIndex_Index(TagIndex *idx, char **values, t_docId docId); /* Open an index reader to iterate a tag index for a specific tag. Used at query evaluation time. * Returns NULL if there is no such tag in the index */ IndexIterator *TagIndex_OpenReader(TagIndex *idx, DocTable *dt, const char *value, size_t len, ConcurrentSearchCtx *csx, RedisModuleKey *k, RedisModuleString *keyName, double weight); /* Open the tag index key in redis */ TagIndex *TagIndex_Open(RedisModuleCtx *ctx, RedisModuleString *formattedKey, int openWrite, RedisModuleKey **keyp); /* Serialize all the tags in the index to the redis client */ void TagIndex_SerializeValues(TagIndex *idx, RedisModuleCtx *ctx); #define TAGIDX_CURRENT_VERSION 1 extern RedisModuleType *TagIndexType; /* Register the tag index type in redis */ int TagIndex_RegisterType(RedisModuleCtx *ctx); #endifRediSearch-1.2.2/src/tests/000077500000000000000000000000001364126773500154745ustar00rootroot00000000000000RediSearch-1.2.2/src/tests/CMakeLists.txt000066400000000000000000000012201364126773500202270ustar00rootroot00000000000000INCLUDE (CTest) FUNCTION(RSTEST name) ADD_EXECUTABLE("${name}" "${name}.c") TARGET_LINK_LIBRARIES("${name}" "redisearchS") ADD_TEST(NAME "${name}" COMMAND "${name}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") ENDFUNCTION() FILE(GLOB TEST_SOURCES "test_*.c") FOREACH(n ${TEST_SOURCES}) GET_FILENAME_COMPONENT(test_name ${n} NAME_WE) MESSAGE("${n} => ${test_name}") RSTEST("${test_name}") ENDFOREACH() ADD_LIBRARY(example_extension SHARED "ext-example/example.c") ADD_DEPENDENCIES(test_extensions example_extension) SET_TESTS_PROPERTIES(test_extensions PROPERTIES ENVIRONMENT "EXT_TEST_PATH=$")RediSearch-1.2.2/src/tests/Makefile000066400000000000000000000050721364126773500171400ustar00rootroot00000000000000ifndef RM_INCLUDE_DIR RM_INCLUDE_DIR=../ endif CFLAGS = -g -ggdb -O0 -fPIC -D_GNU_SOURCE -std=gnu99 -I./ -Werror=implicit-function-declaration CFLAGS += -I$(RM_INCLUDE_DIR) %.c: %.y ifndef VERBOSE .SILENT: endif # Sources SOURCEDIR=$(abspath $(shell pwd -P)/../) CC_SOURCES = $(wildcard $(SOURCEDIR)/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/query_parser/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/ext/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/aggregate/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/aggregate/*/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/util/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/trie/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/dep/thpool/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/dep/hll/*.c) CC_SOURCES += $(wildcard $(SOURCEDIR)/dep/cndict/*.c) # Convert all sources to .o files DEP_OBJECTS := $(patsubst %.c, %.o, $(CC_SOURCES) ) CC_DEPS := $(patsubst %.c, %.d, $(CC_SOURCES) ) TEST_SOURCES = $(abspath $(wildcard test_*.c)) TEST_OBJECTS = $(patsubst %.c, %.o, $(TEST_SOURCES) ) TEST_EXECUTABLES = $(patsubst %.c, %.run, $(TEST_SOURCES) ) TEST_DEPS = $(patsubst %.c, %.d,$(TEST_SOURCES)) # Library dependencies DEP_LIBS = ../rmutil/librmutil.a ../trie/libtrie.a ../dep/triemap/libtriemap.a \ ../dep/libnu/libnu.a ../dep/snowball/libstemmer.o ../dep/friso/libfriso.a \ ../dep/miniz/libminiz.a ../dep/bloom/libbloom.a DEPS = $(DEP_OBJECTS) $(DEP_LIBS) SRCDIR := $(shell pwd) LDFLAGS := -lc -lm -ldl -lpthread CC=gcc %.o: %.c %.o: %.c $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@ -MMD -MF $(@:.o=.d) all: build test # Including this stuff makes sure everything gets built on changes to the source directory -include $(TEST_DEPS) -include $(CC_DEPS) # The exampe extension is a dependency to extension tests ext_example: $(MAKE) -C ./ext-example clean all .PHONY: ext_example # Compiling each test runner from its .o file %.run: %.o $(CC) $(CFLAGS) -o $@ $^ $(DEPS) $(LDFLAGS) # extra rule for test_extensions.run test_extensions.run: | ext_example build: $(TEST_OBJECTS) $(TEST_EXECUTABLES) $(DEPS) ext_example # Test all test: build $(TEST_EXECUTABLES) set -e; \ for t in test_*.run;\ do ./$$t;\ done memcheck: build $(TEST_EXECUTABLES) set -e; \ for t in test_*.run;\ do valgrind --tool=memcheck --leak-check=full --error-exitcode=1 --show-possibly-lost=no ./$$t;\ done # Target for individual tests - make run:{test name}, e.g. "make run:query" will run test_query.run run\:%: $(MAKE) test_$*.run ./test_$*.run clean: -rm -f *.o -rm -f *.run -rm -f ext-example/*.o ext-example/*.so .PHONY: clean rebuild: clean all RediSearch-1.2.2/src/tests/bench-decoder.c000066400000000000000000000023151364126773500203230ustar00rootroot00000000000000#include "redisearch.h" #include "index.h" #include "inverted_index.h" #include "spec.h" #include "rmutil/alloc.h" #include "time_sample.h" #define NUM_ENTRIES 5000000 #define MY_FLAGS Index_StoreFreqs | Index_StoreFieldFlags static void writeEntry(InvertedIndex *idx, size_t id) { ForwardIndexEntry ent = {0}; ent.docId = id; ent.docScore = 1.0; ent.fieldMask = RS_FIELDMASK_ALL; ent.freq = 3; ent.term = "foo"; ent.vw = NULL; ent.len = 3; InvertedIndex_WriteEntry(idx, &ent); } int main(int argc, char **argv) { RMUTil_InitAlloc(); InvertedIndex *idx = NewInvertedIndex(MY_FLAGS, 1); for (size_t ii = 0; ii < NUM_ENTRIES; ++ii) { writeEntry(idx, ii); } for (size_t ii = 0; ii < 100; ++ii) { IndexReader *r = NewIndexReader(idx, NULL, RS_FIELDMASK_ALL, MY_FLAGS, NULL, 0); IndexIterator *it = NewReadIterator(r); TimeSample ts; TimeSampler_Start(&ts); RSIndexResult *res; while (INDEXREAD_EOF != it->Read(it->ctx, &res)) { TimeSampler_Tick(&ts); } TimeSampler_End(&ts); printf("%d iterations in %lldms, %fns/iter\n", ts.num, TimeSampler_DurationMS(&ts), TimeSampler_IterationMS(&ts) * 1000000); ReadIterator_Free(it); } return 0; }RediSearch-1.2.2/src/tests/cn_sample.txt000066400000000000000000000070011364126773500201740ustar00rootroot00000000000000# 关于Friso Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,源码无需修改就能在各种平台下编译使用,加载完 20 万的词条,内存占用稳定为 14.5M. + 同时支持对 UTF-8/GBK 编码的切分,支持 php5 和 php7 扩展和 sphinx token 插件 + 三种切分模式: - 简易模式:FMM 算法,适合速度要求场合。 - 复杂模式- MMSEG 四种过滤算法,具有较高的岐义去除,分词准确率达到了98.41%。 - (!New)检测模式:只返回词库中已有的词条,很适合某些应用场合。(1.6.1版本开始) 请参考本算法的原作:http://technology.chtsai.org/mmseg/。 + 支持自定义词库。在 dict 文件夹下,可以随便添加/删除/更改词库和词库词条,并且对词库进行了分类。 + 简体/繁体/简体混合支持, 可以方便的针对简体,繁体或者简繁体切分。同时还可以以此实现简繁体的相互检索。 + 支持中英/英中混合词的识别(维护词库可以识别任何一种组合)。例如:卡拉ok, 漂亮mm, c语言,IC卡,哆啦a梦。 + 很好的英文支持,英文标点组合词识别, 例如c++, c#, 电子邮件,网址,小数,百分数。 + (!New)自定义保留标点:你可以自定义保留在切分结果中的标点,这样可以识别出一些复杂的组合,例如:c++, k&r,code.google.com。 + (!New)复杂英文切分的二次切分:默认 Friso 会保留数字和字母的原组合,开启此功能,可以进行二次切分提高检索的命中率。例如:qq2013会被切分成:qq/ 2013/ qq2013。 + 支持阿拉伯数字/小数基本单字单位的识别,例如2012年,1.75米,5吨,120斤,38.6℃。 + 自动英文圆角/半角,大写/小写转换。 + 同义词匹配:自动中文/英文同义词追加. (需要在 friso.ini 中开启 friso.add_syn 选项)。 + 自动中英文停止词过滤。(需要在 friso.ini 中开启 friso.clr_stw 选项)。 + 多配置支持, 安全的应用于多进程/多线程环境。 + 提供 friso.ini 配置文件, 可以依据你的需求轻松打造适合于你的应用的分词。 # 分词速度 测试环境:2.8GHZ/2G/Ubuntu 简单模式:3.8M/秒 复杂模式:1.8M/秒 # 分词测试 测试文本: ~~~text 歧义和同义词:研究生命起源,混合词: 做B超检查身体,x射线本质是什么,今天去奇都ktv唱卡拉ok去,哆啦a梦是一个动漫中的主角, 单位和全角: 2009年8月6日开始大学之旅,岳阳今天的气温为38.6℃, 也就是101.48℉, 英文数字: bug report example@gmail.com or visit http://code.google.com/p/jcseg, we all admire the hacker spirit!特殊数字: ① ⑩ ⑽ ㈩. ~~~ 分词结果: ~~~text 歧义 和 同义词 : 研究 琢磨 研讨 钻研 生命 起源 , 混合词 : 做 b超 检查 身体 , x射线 本质 是 什么 , 今天 去 奇都ktv 唱 卡拉ok 去 , 哆啦a梦 是 一个 动漫 中 的 主角 , 单位 和 全角 : 2009年 8月 6日 开始 大学 之旅 , 岳阳 今天 的 气温 为 38.6℃ , 也就是 101.48℉ , 英文 英语 数字 : bug report example gmail com example@gmail.com or visit http : / / code google com code.google.com / p / jcseg , we all admire appreciate like love enjoy the hacker spirit mind ! 特殊 数字 : ① ⑩ ⑽ ㈩ . ~~~ # 开发文档 请参考 git 项目下的 friso-help-doc.pdf RediSearch-1.2.2/src/tests/ext-example/000077500000000000000000000000001364126773500177255ustar00rootroot00000000000000RediSearch-1.2.2/src/tests/ext-example/Makefile000066400000000000000000000014261364126773500213700ustar00rootroot00000000000000#set environment variable RS_INCLUDE_DIR to the location of redismodule.h ifndef RS_INCLUDE_DIR RS_INCLUDE_DIR=../../ endif # find the OS uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not') CFLAGS = -I$(RS_INCLUDE_DIR) -Wall -g -fPIC -O0 -std=gnu99 CC:=$(shell sh -c 'type $(CC) >/dev/null 2>/dev/null && echo $(CC) || echo gcc') # Compile flags for non-osx / osx ifneq ($(uname_S),Darwin) SHOBJ_CFLAGS ?= -fno-common -g -ggdb SHOBJ_LDFLAGS ?= -shared -Bsymbolic else CFLAGS += -mmacosx-version-min=10.6 SHOBJ_CFLAGS ?= -dynamic -fno-common -g -ggdb SHOBJ_LDFLAGS ?= -dylib -exported_symbol _RS_ExtensionInit -macosx_version_min 10.6 endif all: example.so example.so: example.o $(LD) -o $@ example.o $(SHOBJ_LDFLAGS) $(LIBS) -lc clean: rm -rf *.xo *.so *.o FORCE:RediSearch-1.2.2/src/tests/ext-example/example.c000066400000000000000000000026401364126773500215260ustar00rootroot00000000000000#include #include #include #include #include "example.h" struct privdata { int freed; }; /* Calculate sum(TF-IDF)*document score for each result */ double myScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { return 3.141; } double filterOutScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { return RS_SCORE_FILTEROUT; } void myExpander(RSQueryExpanderCtx *ctx, RSToken *token) { ctx->ExpandToken(ctx, strdup("foo"), 3, 0x00ff); } int numFreed = 0; void myFreeFunc(void *p) { // printf("Freeing %p\n", p); numFreed++; free(p); } /* Register the default extension */ int RS_ExtensionInit(RSExtensionCtx *ctx) { struct privdata *spd = malloc(sizeof(struct privdata)); spd->freed = 0; if (ctx->RegisterScoringFunction("example_scorer", myScorer, myFreeFunc, spd) == REDISEARCH_ERR) { return REDISEARCH_ERR; } if (ctx->RegisterScoringFunction("filterout_scorer", filterOutScorer, myFreeFunc, spd) == REDISEARCH_ERR) { return REDISEARCH_ERR; } spd = malloc(sizeof(struct privdata)); spd->freed = 0; /* Snowball Stemmer is the default expander */ if (ctx->RegisterQueryExpander("example_expander", myExpander, myFreeFunc, spd) == REDISEARCH_ERR) { return REDISEARCH_ERR; } return REDISEARCH_OK; }RediSearch-1.2.2/src/tests/ext-example/example.h000066400000000000000000000003751364126773500215360ustar00rootroot00000000000000#ifndef EXT_EXAMPLE_H__ #define EXT_EXAMPLE_H__ #include "redisearch.h" #define EXPANDER_NAME "EXAMPLE_EXPANDER" #define SCORER_NAME "EXAMPLE_SCORER" const char *extentionName = "EXAMPLE_EXTENSION"; int RS_ExtensionInit(RSExtensionCtx *ctx); #endifRediSearch-1.2.2/src/tests/genesis.txt000066400000000000000000006435561364126773500177150ustar00rootroot00000000000000 The First Book of Moses, called Genesis {1:1} In the beginning God created the heaven and the earth. {1:2} And the earth was without form, and void; and darkness [was] upon the face of the deep. And the Spirit of God moved upon the face of the waters. {1:3} And God said, Let there be light: and there was light. {1:4} And God saw the light, that [it was] good: and God divided the light from the darkness. {1:5} And God called the light Day, and the darkness he called Night. And the evening and the morning were the first day. {1:6} And God said, Let there be a firmament in the midst of the waters, and let it divide the waters from the waters. {1:7} And God made the firmament, and divided the waters which [were] under the firmament from the waters which [were] above the firmament: and it was so. {1:8} And God called the firmament Heaven. And the evening and the morning were the second day. {1:9} And God said, Let the waters under the heaven be gathered together unto one place, and let the dry [land] appear: and it was so. {1:10} And God called the dry [land] Earth; and the gathering together of the waters called he Seas: and God saw that [it was] good. {1:11} And God said, Let the earth bring forth grass, the herb yielding seed, [and] the fruit tree yielding fruit after his kind, whose seed [is] in itself, upon the earth: and it was so. {1:12} And the earth brought forth grass, [and] herb yielding seed after his kind, and the tree yielding fruit, whose seed [was] in itself, after his kind: and God saw that [it was] good. {1:13} And the evening and the morning were the third day. {1:14} And God said, Let there be lights in the firmament of the heaven to divide the day from the night; and let them be for signs, and for seasons, and for days, and years: {1:15} And let them be for lights in the firmament of the heaven to give light upon the earth: and it was so. {1:16} And God made two great lights; the greater light to rule the day, and the lesser light to rule the night: [he made] the stars also. {1:17} And God set them in the firmament of the heaven to give light upon the earth, {1:18} And to rule over the day and over the night, and to divide the light from the darkness: and God saw that [it was] good. {1:19} And the evening and the morning were the fourth day. {1:20} And God said, Let the waters bring forth abundantly the moving creature that hath life, and fowl [that] may fly above the earth in the open firmament of heaven. {1:21} And God created great whales, and every living creature that moveth, which the waters brought forth abundantly, after their kind, and every winged fowl after his kind: and God saw that [it was] good. {1:22} And God blessed them, saying, Be fruitful, and multiply, and fill the waters in the seas, and let fowl multiply in the earth. {1:23} And the evening and the morning were the fifth day. {1:24} And God said, Let the earth bring forth the living creature after his kind, cattle, and creeping thing, and beast of the earth after his kind: and it was so. {1:25} And God made the beast of the earth after his kind, and cattle after their kind, and every thing that creepeth upon the earth after his kind: and God saw that [it was] good. {1:26} And God said, Let us make man in our image, after our likeness: and let them have dominion over the fish of the sea, and over the fowl of the air, and over the cattle, and over all the earth, and over every creeping thing that creepeth upon the earth. {1:27} So God created man in his [own] image, in the image of God created he him; male and female created he them. {1:28} And God blessed them, and God said unto them, Be fruitful, and multiply, and replenish the earth, and subdue it: and have dominion over the fish of the sea, and over the fowl of the air, and over every living thing that moveth upon the earth. {1:29} And God said, Behold, I have given you every herb bearing seed, which [is] upon the face of all the earth, and every tree, in the which [is] the fruit of a tree yielding seed; to you it shall be for meat. {1:30} And to every beast of the earth, and to every fowl of the air, and to every thing that creepeth upon the earth, wherein [there is] life, [I have given] every green herb for meat: and it was so. {1:31} And God saw every thing that he had made, and, behold, [it was] very good. And the evening and the morning were the sixth day. {2:1} Thus the heavens and the earth were finished, and all the host of them. {2:2} And on the seventh day God ended his work which he had made; and he rested on the seventh day from all his work which he had made. {2:3} And God blessed the seventh day, and sanctified it: because that in it he had rested from all his work which God created and made. {2:4} These [are] the generations of the heavens and of the earth when they were created, in the day that the LORD God made the earth and the heavens, {2:5} And every plant of the field before it was in the earth, and every herb of the field before it grew: for the LORD God had not caused it to rain upon the earth, and [there was] not a man to till the ground. {2:6} But there went up a mist from the earth, and watered the whole face of the ground. {2:7} And the LORD God formed man [of] the dust of the ground, and breathed into his nostrils the breath of life; and man became a living soul. {2:8} And the LORD God planted a garden eastward in Eden; and there he put the man whom he had formed. {2:9} And out of the ground made the LORD God to grow every tree that is pleasant to the sight, and good for food; the tree of life also in the midst of the garden, and the tree of knowledge of good and evil. {2:10} And a river went out of Eden to water the garden; and from thence it was parted, and became into four heads. {2:11} The name of the first [is] Pison: that [is] it which compasseth the whole land of Havilah, where [there is] gold; {2:12} And the gold of that land [is] good: there [is] bdellium and the onyx stone. {2:13} And the name of the second river [is] Gihon: the same [is] it that compasseth the whole land of Ethiopia. {2:14} And the name of the third river [is] Hiddekel: that [is] it which goeth toward the east of Assyria. And the fourth river [is] Euphrates. {2:15} And the LORD God took the man, and put him into the garden of Eden to dress it and to keep it. {2:16} And the LORD God commanded the man, saying, Of every tree of the garden thou mayest freely eat: {2:17} But of the tree of the knowledge of good and evil, thou shalt not eat of it: for in the day that thou eatest thereof thou shalt surely die. {2:18} And the LORD God said, [It is] not good that the man should be alone; I will make him an help meet for him. {2:19} And out of the ground the LORD God formed every beast of the field, and every fowl of the air; and brought [them] unto Adam to see what he would call them: and whatsoever Adam called every living creature, that [was] the name thereof. {2:20} And Adam gave names to all cattle, and to the fowl of the air, and to every beast of the field; but for Adam there was not found an help meet for him. {2:21} And the LORD God caused a deep sleep to fall upon Adam and he slept: and he took one of his ribs, and closed up the flesh instead thereof; {2:22} And the rib, which the LORD God had taken from man, made he a woman, and brought her unto the man. {2:23} And Adam said, This [is] now bone of my bones, and flesh of my flesh: she shall be called Woman, because she was taken out of Man. {2:24} Therefore shall a man leave his father and his mother, and shall cleave unto his wife: and they shall be one flesh. {2:25} And they were both naked, the man and his wife, and were not ashamed. {3:1} Now the serpent was more subtil than any beast of the field which the LORD God had made. And he said unto the woman, Yea, hath God said, Ye shall not eat of every tree of the garden? {3:2} And the woman said unto the serpent, We may eat of the fruit of the trees of the garden: {3:3} But of the fruit of the tree which [is] in the midst of the garden, God hath said, Ye shall not eat of it, neither shall ye touch it, lest ye die. {3:4} And the serpent said unto the woman, Ye shall not surely die: {3:5} For God doth know that in the day ye eat thereof, then your eyes shall be opened, and ye shall be as gods, knowing good and evil. {3:6} And when the woman saw that the tree [was] good for food, and that it [was] pleasant to the eyes, and a tree to be desired to make [one] wise, she took of the fruit thereof, and did eat, and gave also unto her husband with her; and he did eat. {3:7} And the eyes of them both were opened, and they knew that they [were] naked; and they sewed fig leaves together, and made themselves aprons. {3:8} And they heard the voice of the LORD God walking in the garden in the cool of the day: and Adam and his wife hid themselves from the presence of the LORD God amongst the trees of the garden. {3:9} And the LORD God called unto Adam, and said unto him, Where [art] thou? {3:10} And he said, I heard thy voice in the garden, and I was afraid, because I [was] naked; and I hid myself. {3:11} And he said, Who told thee that thou [wast] naked? Hast thou eaten of the tree, whereof I commanded thee that thou shouldest not eat? {3:12} And the man said, The woman whom thou gavest [to be] with me, she gave me of the tree, and I did eat. {3:13} And the LORD God said unto the woman, What [is] this [that] thou hast done? And the woman said, The serpent beguiled me, and I did eat. {3:14} And the LORD God said unto the serpent, Because thou hast done this, thou [art] cursed above all cattle, and above every beast of the field; upon thy belly shalt thou go, and dust shalt thou eat all the days of thy life: {3:15} And I will put enmity between thee and the woman, and between thy seed and her seed; it shall bruise thy head, and thou shalt bruise his heel. {3:16} Unto the woman he said, I will greatly multiply thy sorrow and thy conception; in sorrow thou shalt bring forth children; and thy desire [shall be] to thy husband, and he shall rule over thee. {3:17} And unto Adam he said, Because thou hast hearkened unto the voice of thy wife, and hast eaten of the tree, of which I commanded thee, saying, Thou shalt not eat of it: cursed [is] the ground for thy sake; in sorrow shalt thou eat [of] it all the days of thy life; {3:18} Thorns also and thistles shall it bring forth to thee; and thou shalt eat the herb of the field; {3:19} In the sweat of thy face shalt thou eat bread, till thou return unto the ground; for out of it wast thou taken: for dust thou [art,] and unto dust shalt thou return. {3:20} And Adam called his wife's name Eve; because she was the mother of all living. {3:21} Unto Adam also and to his wife did the LORD God make coats of skins, and clothed them. {3:22} And the LORD God said, Behold, the man is become as one of us, to know good and evil: and now, lest he put forth his hand, and take also of the tree of life, and eat, and live for ever: {3:23} Therefore the LORD God sent him forth from the garden of Eden, to till the ground from whence he was taken. {3:24} So he drove out the man; and he placed at the east of the garden of Eden Cherubim, and a flaming sword which turned every way, to keep the way of the tree of life. {4:1} And Adam knew Eve his wife; and she conceived, and bare Cain, and said, I have gotten a man from the LORD. {4:2} And she again bare his brother Abel. And Abel was a keeper of sheep, but Cain was a tiller of the ground. {4:3} And in process of time it came to pass, that Cain brought of the fruit of the ground an offering unto the LORD. {4:4} And Abel, he also brought of the firstlings of his flock and of the fat thereof. And the LORD had respect unto Abel and to his offering: {4:5} But unto Cain and to his offering he had not respect. And Cain was very wroth, and his countenance fell. {4:6} And the LORD said unto Cain, Why art thou wroth? and why is thy countenance fallen? {4:7} If thou doest well, shalt thou not be accepted? and if thou doest not well, sin lieth at the door. And unto thee [shall be] his desire, and thou shalt rule over him. {4:8} And Cain talked with Abel his brother: and it came to pass, when they were in the field, that Cain rose up against Abel his brother, and slew him. {4:9} And the LORD said unto Cain, Where [is] Abel thy brother? And he said, I know not: [Am] I my brother's keeper? {4:10} And he said, What hast thou done? the voice of thy brother's blood crieth unto me from the ground. {4:11} And now [art] thou cursed from the earth, which hath opened her mouth to receive thy brother's blood from thy hand; {4:12} When thou tillest the ground, it shall not henceforth yield unto thee her strength; a fugitive and a vagabond shalt thou be in the earth. {4:13} And Cain said unto the LORD, My punishment [is] greater than I can bear. {4:14} Behold, thou hast driven me out this day from the face of the earth; and from thy face shall I be hid; and I shall be a fugitive and a vagabond in the earth; and it shall come to pass, [that] every one that findeth me shall slay me. {4:15} And the LORD said unto him, Therefore whosoever slayeth Cain, vengeance shall be taken on him sevenfold. And the LORD set a mark upon Cain, lest any finding him should kill him. {4:16} And Cain went out from the presence of the LORD, and dwelt in the land of Nod, on the east of Eden. {4:17} And Cain knew his wife; and she conceived, and bare Enoch: and he builded a city, and called the name of the city, after the name of his son, Enoch. {4:18} And unto Enoch was born Irad: and Irad begat Mehujael: and Mehujael begat Methusael: and Methusael begat Lamech. {4:19} And Lamech took unto him two wives: the name of the one [was] Adah, and the name of the other Zillah. {4:20} And Adah bare Jabal: he was the father of such as dwell in tents, and [of such as have] cattle. {4:21} And his brother's name [was] Jubal: he was the father of all such as handle the harp and organ. {4:22} And Zillah, she also bare Tubal- cain, an instructer of every artificer in brass and iron: and the sister of Tubal-cain [was] Naamah. {4:23} And Lamech said unto his wives, Adah and Zillah, Hear my voice; ye wives of Lamech, hearken unto my speech: for I have slain a man to my wounding, and a young man to my hurt. {4:24} If Cain shall be avenged sevenfold, truly Lamech seventy and sevenfold. {4:25} And Adam knew his wife again; and she bare a son, and called his name Seth: For God, [said she,] hath appointed me another seed instead of Abel, whom Cain slew. {4:26} And to Seth, to him also there was born a son; and he called his name Enos: then began men to call upon the name of the LORD. {5:1} This [is] the book of the generations of Adam. In the day that God created man, in the likeness of God made he him; {5:2} Male and female created he them; and blessed them, and called their name Adam, in the day when they were created. {5:3} And Adam lived an hundred and thirty years, and begat [a son] in his own likeness, after his image; and called his name Seth: {5:4} And the days of Adam after he had begotten Seth were eight hundred years: and he begat sons and daughters: {5:5} And all the days that Adam lived were nine hundred and thirty years: and he died. {5:6} And Seth lived an hundred and five years, and begat Enos: {5:7} And Seth lived after he begat Enos eight hundred and seven years, and begat sons and daughters: {5:8} And all the days of Seth were nine hundred and twelve years: and he died. {5:9} And Enos lived ninety years, and begat Cainan: {5:10} And Enos lived after he begat Cainan eight hundred and fifteen years, and begat sons and daughters: {5:11} And all the days of Enos were nine hundred and five years: and he died. {5:12} And Cainan lived seventy years, and begat Mahalaleel: {5:13} And Cainan lived after he begat Mahalaleel eight hundred and forty years, and begat sons and daughters: {5:14} And all the days of Cainan were nine hundred and ten years: and he died. {5:15} And Mahalaleel lived sixty and five years, and begat Jared: {5:16} And Mahalaleel lived after he begat Jared eight hundred and thirty years, and begat sons and daughters: {5:17} And all the days of Mahalaleel were eight hundred ninety and five years: and he died. {5:18} And Jared lived an hundred sixty and two years, and he begat Enoch: {5:19} And Jared lived after he begat Enoch eight hundred years, and begat sons and daughters: {5:20} And all the days of Jared were nine hundred sixty and two years: and he died. {5:21} And Enoch lived sixty and five years, and begat Methuselah: {5:22} And Enoch walked with God after he begat Methuselah three hundred years, and begat sons and daughters: {5:23} And all the days of Enoch were three hundred sixty and five years: {5:24} And Enoch walked with God: and he [was] not; for God took him. {5:25} And Methuselah lived an hundred eighty and seven years, and begat Lamech: {5:26} And Methuselah lived after he begat Lamech seven hundred eighty and two years, and begat sons and daughters: {5:27} And all the days of Methuselah were nine hundred sixty and nine years: and he died. {5:28} And Lamech lived an hundred eighty and two years, and begat a son: {5:29} And he called his name Noah, saying, This [same] shall comfort us concerning our work and toil of our hands, because of the ground which the LORD hath cursed. {5:30} And Lamech lived after he begat Noah five hundred ninety and five years, and begat sons and daughters: {5:31} And all the days of Lamech were seven hundred seventy and seven years: and he died. {5:32} And Noah was five hundred years old: and Noah begat Shem, Ham, and Japheth. {6:1} And it came to pass, when men began to multiply on the face of the earth, and daughters were born unto them, {6:2} That the sons of God saw the daughters of men that they [were] fair; and they took them wives of all which they chose. {6:3} And the LORD said, My spirit shall not always strive with man, for that he also [is] flesh: yet his days shall be an hundred and twenty years. {6:4} There were giants in the earth in those days; and also after that, when the sons of God came in unto the daughters of men, and they bare [children] to them, the same [became] mighty men which [were] of old, men of renown. {6:5} And GOD saw that the wickedness of man [was] great in the earth, and [that] every imagination of the thoughts of his heart [was] only evil continually. {6:6} And it repented the LORD that he had made man on the earth, and it grieved him at his heart. {6:7} And the LORD said, I will destroy man whom I have created from the face of the earth; both man, and beast, and the creeping thing, and the fowls of the air; for it repenteth me that I have made them. {6:8} But Noah found grace in the eyes of the LORD. {6:9} These [are] the generations of Noah: Noah was a just man [and] perfect in his generations, [and] Noah walked with God. {6:10} And Noah begat three sons, Shem, Ham, and Japheth. {6:11} The earth also was corrupt before God, and the earth was filled with violence. {6:12} And God looked upon the earth, and, behold, it was corrupt; for all flesh had corrupted his way upon the earth. {6:13} And God said unto Noah, The end of all flesh is come before me; for the earth is filled with violence through them; and, behold, I will destroy them with the earth. {6:14} Make thee an ark of gopher wood; rooms shalt thou make in the ark, and shalt pitch it within and without with pitch. {6:15} And this [is the fashion] which thou shalt make it [of:] The length of the ark [shall be] three hundred cubits, the breadth of it fifty cubits, and the height of it thirty cubits. {6:16} A window shalt thou make to the ark, and in a cubit shalt thou finish it above; and the door of the ark shalt thou set in the side thereof; [with] lower, second, and third [stories] shalt thou make it. {6:17} And, behold, I, even I, do bring a flood of waters upon the earth, to destroy all flesh, wherein [is] the breath of life, from under heaven; [and] every thing that [is] in the earth shall die. {6:18} But with thee will I establish my covenant; and thou shalt come into the ark, thou, and thy sons, and thy wife, and thy sons' wives with thee. {6:19} And of every living thing of all flesh, two of every [sort] shalt thou bring into the ark, to keep [them] alive with thee; they shall be male and female. {6:20} Of fowls after their kind, and of cattle after their kind, of every creeping thing of the earth after his kind, two of every [sort] shall come unto thee, to keep [them] alive. {6:21} And take thou unto thee of all food that is eaten, and thou shalt gather [it] to thee; and it shall be for food for thee, and for them. {6:22} Thus did Noah; according to all that God commanded him, so did he. {7:1} And the LORD said unto Noah, Come thou and all thy house into the ark; for thee have I seen righteous before me in this generation. {7:2} Of every clean beast thou shalt take to thee by sevens, the male and his female: and of beasts that [are] not clean by two, the male and his female. {7:3} Of fowls also of the air by sevens, the male and the female; to keep seed alive upon the face of all the earth. {7:4} For yet seven days, and I will cause it to rain upon the earth forty days and forty nights; and every living substance that I have made will I destroy from off the face of the earth. {7:5} And Noah did according unto all that the LORD commanded him. {7:6} And Noah [was] six hundred years old when the flood of waters was upon the earth. {7:7} And Noah went in, and his sons, and his wife, and his sons' wives with him, into the ark, because of the waters of the flood. {7:8} Of clean beasts, and of beasts that [are] not clean, and of fowls, and of every thing that creepeth upon the earth, {7:9} There went in two and two unto Noah into the ark, the male and the female, as God had commanded Noah. {7:10} And it came to pass after seven days, that the waters of the flood were upon the earth. {7:11} In the six hundredth year of Noah's life, in the second month, the seventeenth day of the month, the same day were all the fountains of the great deep broken up, and the windows of heaven were opened. {7:12} And the rain was upon the earth forty days and forty nights. {7:13} In the selfsame day entered Noah, and Shem, and Ham, and Japheth, the sons of Noah, and Noah's wife, and the three wives of his sons with them, into the ark; {7:14} They, and every beast after his kind, and all the cattle after their kind, and every creeping thing that creepeth upon the earth after his kind, and every fowl after his kind, every bird of every sort. {7:15} And they went in unto Noah into the ark, two and two of all flesh, wherein [is] the breath of life. {7:16} And they that went in, went in male and female of all flesh, as God had commanded him: and the LORD shut him in. {7:17} And the flood was forty days upon the earth; and the waters increased, and bare up the ark, and it was lift up above the earth. {7:18} And the waters prevailed, and were increased greatly upon the earth; and the ark went upon the face of the waters. {7:19} And the waters prevailed exceedingly upon the earth; and all the high hills, that [were] under the whole heaven, were covered. {7:20} Fifteen cubits upward did the waters prevail; and the mountains were covered. {7:21} And all flesh died that moved upon the earth, both of fowl, and of cattle, and of beast, and of every creeping thing that creepeth upon the earth, and every man: {7:22} All in whose nostrils [was] the breath of life, of all that [was] in the dry [land,] died. {7:23} And every living substance was destroyed which was upon the face of the ground, both man, and cattle, and the creeping things, and the fowl of the heaven; and they were destroyed from the earth: and Noah only remained [alive,] and they that [were] with him in the ark. {7:24} And the waters prevailed upon the earth an hundred and fifty days. {8:1} And God remembered Noah, and every living thing, and all the cattle that [was] with him in the ark: and God made a wind to pass over the earth, and the waters asswaged; {8:2} The fountains also of the deep and the windows of heaven were stopped, and the rain from heaven was restrained; {8:3} And the waters returned from off the earth continually: and after the end of the hundred and fifty days the waters were abated. {8:4} And the ark rested in the seventh month, on the seventeenth day of the month, upon the mountains of Ararat. {8:5} And the waters decreased continually until the tenth month: in the tenth [month,] on the first [day] of the month, were the tops of the mountains seen. {8:6} And it came to pass at the end of forty days, that Noah opened the window of the ark which he had made: {8:7} And he sent forth a raven, which went forth to and fro, until the waters were dried up from off the earth. {8:8} Also he sent forth a dove from him, to see if the waters were abated from off the face of the ground; {8:9} But the dove found no rest for the sole of her foot, and she returned unto him into the ark, for the waters [were] on the face of the whole earth: then he put forth his hand, and took her, and pulled her in unto him into the ark. {8:10} And he stayed yet other seven days; and again he sent forth the dove out of the ark; {8:11} And the dove came in to him in the evening; and, lo, in her mouth [was] an olive leaf pluckt off: so Noah knew that the waters were abated from off the earth. {8:12} And he stayed yet other seven days; and sent forth the dove; which returned not again unto him any more. {8:13} And it came to pass in the six hundredth and first year, in the first [month,] the first [day] of the month, the waters were dried up from off the earth: and Noah removed the covering of the ark, and looked, and, behold, the face of the ground was dry. {8:14} And in the second month, on the seven and twentieth day of the month, was the earth dried. {8:15} And God spake unto Noah, saying, {8:16} Go forth of the ark, thou, and thy wife, and thy sons, and thy sons' wives with thee. {8:17} Bring forth with thee every living thing that [is] with thee, of all flesh, [both] of fowl, and of cattle, and of every creeping thing that creepeth upon the earth; that they may breed abundantly in the earth, and be fruitful, and multiply upon the earth. {8:18} And Noah went forth, and his sons, and his wife, and his sons' wives with him: {8:19} Every beast, every creeping thing, and every fowl, [and] whatsoever creepeth upon the earth, after their kinds, went forth out of the ark. {8:20} And Noah builded an altar unto the LORD; and took of every clean beast, and of every clean fowl, and offered burnt offerings on the altar. {8:21} And the LORD smelled a sweet savour; and the LORD said in his heart, I will not again curse the ground any more for man's sake; for the imagination of man's heart [is] evil from his youth; neither will I again smite any more every thing living, as I have done. {8:22} While the earth remaineth, seedtime and harvest, and cold and heat, and summer and winter, and day and night shall not cease. {9:1} And God blessed Noah and his sons, and said unto them, Be fruitful, and multiply, and replenish the earth. {9:2} And the fear of you and the dread of you shall be upon every beast of the earth, and upon every fowl of the air, upon all that moveth [upon] the earth, and upon all the fishes of the sea; into your hand are they delivered. {9:3} Every moving thing that liveth shall be meat for you; even as the green herb have I given you all things. {9:4} But flesh with the life thereof, [which is] the blood thereof, shall ye not eat. {9:5} And surely your blood of your lives will I require; at the hand of every beast will I require it, and at the hand of man; at the hand of every man's brother will I require the life of man. {9:6} Whoso sheddeth man's blood, by man shall his blood be shed: for in the image of God made he man. {9:7} And you, be ye fruitful, and multiply; bring forth abundantly in the earth, and multiply therein. {9:8} And God spake unto Noah, and to his sons with him, saying, {9:9} And I, behold, I establish my covenant with you, and with your seed after you; {9:10} And with every living creature that [is] with you, of the fowl, of the cattle, and of every beast of the earth with you; from all that go out of the ark, to every beast of the earth. {9:11} And I will establish my covenant with you; neither shall all flesh be cut off any more by the waters of a flood; neither shall there any more be a flood to destroy the earth. {9:12} And God said, This [is] the token of the covenant which I make between me and you and every living creature that [is] with you, for perpetual generations: {9:13} I do set my bow in the cloud, and it shall be for a token of a covenant between me and the earth. {9:14} And it shall come to pass, when I bring a cloud over the earth, that the bow shall be seen in the cloud: {9:15} And I will remember my covenant, which [is] between me and you and every living creature of all flesh; and the waters shall no more become a flood to destroy all flesh. {9:16} And the bow shall be in the cloud; and I will look upon it, that I may remember the everlasting covenant between God and every living creature of all flesh that [is] upon the earth. {9:17} And God said unto Noah, This [is] the token of the covenant, which I have established between me and all flesh that [is] upon the earth. {9:18} And the sons of Noah, that went forth of the ark, were Shem, and Ham, and Japheth: and Ham is the father of Canaan. {9:19} These [are] the three sons of Noah: and of them was the whole earth overspread. {9:20} And Noah began [to be] an husbandman, and he planted a vineyard: {9:21} And he drank of the wine, and was drunken; and he was uncovered within his tent. {9:22} And Ham, the father of Canaan, saw the nakedness of his father, and told his two brethren without. {9:23} And Shem and Japheth took a garment, and laid [it] upon both their shoulders, and went backward, and covered the nakedness of their father; and their faces [were] backward, and they saw not their father's nakedness. {9:24} And Noah awoke from his wine, and knew what his younger son had done unto him. {9:25} And he said, Cursed [be] Canaan; a servant of servants shall he be unto his brethren. {9:26} And he said, Blessed [be] the LORD God of Shem; and Canaan shall be his servant. {9:27} God shall enlarge Japheth, and he shall dwell in the tents of Shem; and Canaan shall be his servant. {9:28} And Noah lived after the flood three hundred and fifty years. {9:29} And all the days of Noah were nine hundred and fifty years: and he died. {10:1} Now these [are] the generations of the sons of Noah, Shem, Ham, and Japheth: and unto them were sons born after the flood. {10:2} The sons of Japheth; Gomer, and Magog, and Madai, and Javan, and Tubal, and Meshech, and Tiras. {10:3} And the sons of Gomer; Ashkenaz, and Riphath, and Togarmah. {10:4} And the sons of Javan; Elishah, and Tarshish, Kittim, and Dodanim. {10:5} By these were the isles of the Gentiles divided in their lands; every one after his tongue, after their families, in their nations. {10:6} And the sons of Ham; Cush, and Mizraim, and Phut, and Canaan. {10:7} And the sons of Cush; Seba, and Havilah, and Sabtah, and Raamah, and Sabtechah: and the sons of Raamah; Sheba, and Dedan. {10:8} And Cush begat Nimrod: he began to be a mighty one in the earth. {10:9} He was a mighty hunter before the LORD: wherefore it is said, Even as Nimrod the mighty hunter before the LORD. {10:10} And the beginning of his kingdom was Babel, and Erech, and Accad, and Calneh, in the land of Shinar. {10:11} Out of that land went forth Asshur, and builded Nineveh, and the city Rehoboth, and Calah, {10:12} And Resen between Nineveh and Calah: the same [is] a great city. {10:13} And Mizraim begat Ludim, and Anamim, and Lehabim, and Naphtuhim, {10:14} And Pathrusim, and Casluhim, (out of whom came Philistim,) and Caphtorim. {10:15} And Canaan begat Sidon his firstborn, and Heth, {10:16} And the Jebusite, and the Amorite, and the Girgasite, {10:17} And the Hivite, and the Arkite, and the Sinite, {10:18} And the Arvadite, and the Zemarite, and the Hamathite: and afterward were the families of the Canaanites spread abroad. {10:19} And the border of the Canaanites was from Sidon, as thou comest to Gerar, unto Gaza; as thou goest, unto Sodom, and Gomorrah, and Admah, and Zeboim, even unto Lasha. {10:20} These [are] the sons of Ham, after their families, after their tongues, in their countries, [and] in their nations. {10:21} Unto Shem also, the father of all the children of Eber, the brother of Japheth the elder, even to him were [children] born. {10:22} The children of Shem; Elam, and Asshur, and Arphaxad, and Lud, and Aram. {10:23} And the children of Aram; Uz, and Hul, and Gether, and Mash. {10:24} And Arphaxad begat Salah; and Salah begat Eber. {10:25} And unto Eber were born two sons: the name of one [was] Peleg; for in his days was the earth divided; and his brother's name [was] Joktan. {10:26} And Joktan begat Almodad, and Sheleph, and Hazar-maveth, and Jerah, {10:27} And Hadoram, and Uzal, and Diklah, {10:28} And Obal, and Abimael, and Sheba, {10:29} And Ophir, and Havilah, and Jobab: all these [were] the sons of Joktan. {10:30} And their dwelling was from Mesha, as thou goest unto Sephar a mount of the east. {10:31} These [are] the sons of Shem, after their families, after their tongues, in their lands, after their nations. {10:32} These [are] the families of the sons of Noah, after their generations, in their nations: and by these were the nations divided in the earth after the flood. {11:1} And the whole earth was of one language, and of one speech. {11:2} And it came to pass, as they journeyed from the east, that they found a plain in the land of Shinar; and they dwelt there. {11:3} And they said one to another, Go to, let us make brick, and burn them throughly. And they had brick for stone, and slime had they for morter. {11:4} And they said, Go to, let us build us a city and a tower, whose top [may reach] unto heaven; and let us make us a name, lest we be scattered abroad upon the face of the whole earth. {11:5} And the LORD came down to see the city and the tower, which the children of men builded. {11:6} And the LORD said, Behold, the people [is] one, and they have all one language; and this they begin to do: and now nothing will be restrained from them, which they have imagined to do. {11:7} Go to, let us go down, and there confound their language, that they may not understand one another's speech. {11:8} So the LORD scattered them abroad from thence upon the face of all the earth: and they left off to build the city. {11:9} Therefore is the name of it called Babel; because the LORD did there confound the language of all the earth: and from thence did the LORD scatter them abroad upon the face of all the earth. {11:10} These [are] the generations of Shem: Shem [was] an hundred years old, and begat Arphaxad two years after the flood: {11:11} And Shem lived after he begat Arphaxad five hundred years, and begat sons and daughters. {11:12} And Arphaxad lived five and thirty years, and begat Salah: {11:13} And Arphaxad lived after he begat Salah four hundred and three years, and begat sons and daughters. {11:14} And Salah lived thirty years, and begat Eber: {11:15} And Salah lived after he begat Eber four hundred and three years, and begat sons and daughters. {11:16} And Eber lived four and thirty years, and begat Peleg: {11:17} And Eber lived after he begat Peleg four hundred and thirty years, and begat sons and daughters. {11:18} And Peleg lived thirty years, and begat Reu: {11:19} And Peleg lived after he begat Reu two hundred and nine years, and begat sons and daughters. {11:20} And Reu lived two and thirty years, and begat Serug: {11:21} And Reu lived after he begat Serug two hundred and seven years, and begat sons and daughters. {11:22} And Serug lived thirty years, and begat Nahor: {11:23} And Serug lived after he begat Nahor two hundred years, and begat sons and daughters. {11:24} And Nahor lived nine and twenty years, and begat Terah: {11:25} And Nahor lived after he begat Terah an hundred and nineteen years, and begat sons and daughters. {11:26} And Terah lived seventy years, and begat Abram, Nahor, and Haran. {11:27} Now these [are] the generations of Terah: Terah begat Abram, Nahor, and Haran; and Haran begat Lot. {11:28} And Haran died before his father Terah in the land of his nativity, in Ur of the Chaldees. {11:29} And Abram and Nahor took them wives: the name of Abram's wife [was] Sarai; and the name of Nahor's wife, Milcah, the daughter of Haran, the father of Milcah, and the father of Iscah. {11:30} But Sarai was barren; she [had] no child. {11:31} And Terah took Abram his son, and Lot the son of Haran his son's son, and Sarai his daughter in law, his son Abram's wife; and they went forth with them from Ur of the Chaldees, to go into the land of Canaan; and they came unto Haran, and dwelt there. {11:32} And the days of Terah were two hundred and five years: and Terah died in Haran. {12:1} Now the LORD had said unto Abram, Get thee out of thy country, and from thy kindred, and from thy father's house, unto a land that I will shew thee: {12:2} And I will make of thee a great nation, and I will bless thee, and make thy name great; and thou shalt be a blessing: {12:3} And I will bless them that bless thee, and curse him that curseth thee: and in thee shall all families of the earth be blessed. {12:4} So Abram departed, as the LORD had spoken unto him; and Lot went with him: and Abram [was] seventy and five years old when he departed out of Haran. {12:5} And Abram took Sarai his wife, and Lot his brother's son, and all their substance that they had gathered, and the souls that they had gotten in Haran; and they went forth to go into the land of Canaan; and into the land of Canaan they came. {12:6} And Abram passed through the land unto the place of Sichem, unto the plain of Moreh. And the Canaanite [was] then in the land. {12:7} And the LORD appeared unto Abram, and said, Unto thy seed will I give this land: and there builded he an altar unto the LORD, who appeared unto him. {12:8} And he removed from thence unto a mountain on the east of Bethel, and pitched his tent, [having] Bethel on the west, and Hai on the east: and there he builded an altar unto the LORD, and called upon the name of the LORD. {12:9} And Abram journeyed, going on still toward the south. {12:10} And there was a famine in the land: and Abram went down into Egypt to sojourn there; for the famine [was] grievous in the land. {12:11} And it came to pass, when he was come near to enter into Egypt, that he said unto Sarai his wife, Behold now, I know that thou [art] a fair woman to look upon: {12:12} Therefore it shall come to pass, when the Egyptians shall see thee, that they shall say, This [is] his wife: and they will kill me, but they will save thee alive. {12:13} Say, I pray thee, thou [art] my sister: that it may be well with me for thy sake; and my soul shall live because of thee. {12:14} And it came to pass, that, when Abram was come into Egypt, the Egyptians beheld the woman that she [was] very fair. {12:15} The princes also of Pharaoh saw her, and commended her before Pharaoh: and the woman was taken into Pharaoh's house. {12:16} And he entreated Abram well for her sake: and he had sheep, and oxen, and he asses, and menservants, and maidservants, and she asses, and camels. {12:17} And the LORD plagued Pharaoh and his house with great plagues because of Sarai Abram's wife. {12:18} And Pharaoh called Abram, and said, What [is] this [that] thou hast done unto me? why didst thou not tell me that she [was] thy wife? {12:19} Why saidst thou, She [is] my sister? so I might have taken her to me to wife: now therefore behold thy wife, take [her,] and go thy way. {12:20} And Pharaoh commanded [his] men concerning him: and they sent him away, and his wife, and all that he had. {13:1} And Abram went up out of Egypt, he, and his wife, and all that he had, and Lot with him, into the south. {13:2} And Abram [was] very rich in cattle, in silver, and in gold. {13:3} And he went on his journeys from the south even to Bethel, unto the place where his tent had been at the beginning, between Bethel and Hai; {13:4} Unto the place of the altar, which he had made there at the first: and there Abram called on the name of the LORD. {13:5} And Lot also, which went with Abram, had flocks, and herds, and tents. {13:6} And the land was not able to bear them, that they might dwell together: for their substance was great, so that they could not dwell together. {13:7} And there was a strife between the herdmen of Abram's cattle and the herdmen of Lot's cattle: and the Canaanite and the Perizzite dwelled then in the land. {13:8} And Abram said unto Lot, Let there be no strife, I pray thee, between me and thee, and between my herdmen and thy herdmen; for we [be] brethren. {13:9} [Is] not the whole land before thee? separate thyself, I pray thee, from me: if [thou wilt take] the left hand, then I will go to the right; or if [thou depart] to the right hand, then I will go to the left. {13:10} And Lot lifted up his eyes, and beheld all the plain of Jordan, that it [was] well watered every where, before the LORD destroyed Sodom and Gomorrah, [even] as the garden of the LORD, like the land of Egypt, as thou comest unto Zoar. {13:11} Then Lot chose him all the plain of Jordan; and Lot journeyed east: and they separated themselves the one from the other. {13:12} Abram dwelled in the land of Canaan, and Lot dwelled in the cities of the plain, and pitched [his] tent toward Sodom. {13:13} But the men of Sodom [were] wicked and sinners before the LORD exceedingly. {13:14} And the LORD said unto Abram, after that Lot was separated from him, Lift up now thine eyes, and look from the place where thou art northward, and southward, and eastward, and westward: {13:15} For all the land which thou seest, to thee will I give it, and to thy seed for ever. {13:16} And I will make thy seed as the dust of the earth: so that if a man can number the dust of the earth, [then] shall thy seed also be numbered. {13:17} Arise, walk through the land in the length of it and in the breadth of it; for I will give it unto thee. {13:18} Then Abram removed [his] tent, and came and dwelt in the plain of Mamre, which [is] in Hebron, and built there an altar unto the LORD. {14:1} And it came to pass in the days of Amraphel king of Shinar, Arioch king of Ellasar, Chedorlaomer king of Elam, and Tidal king of nations; {14:2} [That these] made war with Bera king of Sodom, and with Birsha king of Gomorrah, Shinab king of Admah, and Shemeber king of Zeboiim, and the king of Bela, which is Zoar. {14:3} All these were joined together in the vale of Siddim, which is the salt sea. {14:4} Twelve years they served Chedorlaomer, and in the thirteenth year they rebelled. {14:5} And in the fourteenth year came Chedorlaomer, and the kings that [were] with him, and smote the Rephaims in Ashteroth Karnaim, and the Zuzims in Ham, and the Emims in Shaveh Kiriathaim, {14:6} And the Horites in their mount Seir, unto El-paran, which [is] by the wilderness. {14:7} And they returned, and came to En-mishpat, which [is] Kadesh, and smote all the country of the Amalekites, and also the Amorites that dwelt in Hazezon- tamar. {14:8} And there went out the king of Sodom, and the king of Gomorrah, and the king of Admah, and the king of Zeboiim, and the king of Bela (the same [is] Zoar;) and they joined battle with them in the vale of Siddim; {14:9} With Chedorlaomer the king of Elam, and with Tidal king of nations, and Amraphel king of Shinar, and Arioch king of Ellasar; four kings with five. {14:10} And the vale of Siddim [was full of] slimepits; and the kings of Sodom and Gomorrah fled, and fell there; and they that remained fled to the mountain. {14:11} And they took all the goods of Sodom and Gomorrah, and all their victuals, and went their way. {14:12} And they took Lot, Abram's brother's son, who dwelt in Sodom, and his goods, and departed. {14:13} And there came one that had escaped, and told Abram the Hebrew; for he dwelt in the plain of Mamre the Amorite, brother of Eshcol, and brother of Aner: and these [were] confederate with Abram. {14:14} And when Abram heard that his brother was taken captive, he armed his trained [servants,] born in his own house, three hundred and eighteen, and pursued [them] unto Dan. {14:15} And he divided himself against them, he and his servants, by night, and smote them, and pursued them unto Hobah, which [is] on the left hand of Damascus. {14:16} And he brought back all the goods, and also brought again his brother Lot, and his goods, and the women also, and the people. {14:17} And the king of Sodom went out to meet him after his return from the slaughter of Chedorlaomer, and of the kings that [were] with him, at the valley of Shaveh, which [is] the king's dale. {14:18} And Melchizedek king of Salem brought forth bread and wine: and he [was] the priest of the most high God. {14:19} And he blessed him, and said, Blessed [be] Abram of the most high God, possessor of heaven and earth: {14:20} And blessed be the most high God, which hath delivered thine enemies into thy hand. And he gave him tithes of all. {14:21} And the king of Sodom said unto Abram, Give me the persons, and take the goods to thyself. {14:22} And Abram said to the king of Sodom, I have lift up mine hand unto the LORD, the most high God, the possessor of heaven and earth, {14:23} That I will not [take] from a thread even to a shoelatchet, and that I will not take any thing that [is] thine, lest thou shouldest say, I have made Abram rich: {14:24} Save only that which the young men have eaten, and the portion of the men which went with me, Aner, Eshcol, and Mamre; let them take their portion. {15:1} After these things the word of the LORD came unto Abram in a vision, saying, Fear not, Abram: I [am] thy shield, [and] thy exceeding great reward. {15:2} And Abram said, Lord GOD, what wilt thou give me, seeing I go childless, and the steward of my house is this Eliezer of Damascus? {15:3} And Abram said, Behold, to me thou hast given no seed: and, lo, one born in my house is mine heir. {15:4} And, behold, the word of the LORD [came] unto him, saying, This shall not be thine heir; but he that shall come forth out of thine own bowels shall be thine heir. {15:5} And he brought him forth abroad, and said, Look now toward heaven, and tell the stars, if thou be able to number them: and he said unto him, So shall thy seed be. {15:6} And he believed in the LORD; and he counted it to him for righteousness. {15:7} And he said unto him, I [am] the LORD that brought thee out of Ur of the Chaldees, to give thee this land to inherit it. {15:8} And he said, Lord GOD, whereby shall I know that I shall inherit it? {15:9} And he said unto him, Take me an heifer of three years old, and a she goat of three years old, and a ram of three years old, and a turtledove, and a young pigeon. {15:10} And he took unto him all these, and divided them in the midst, and laid each piece one against another: but the birds divided he not. {15:11} And when the fowls came down upon the carcases, Abram drove them away. {15:12} And when the sun was going down, a deep sleep fell upon Abram; and, lo, an horror of great darkness fell upon him. {15:13} And he said unto Abram, Know of a surety that thy seed shall be a stranger in a land [that is] not theirs, and shall serve them; and they shall afflict them four hundred years; {15:14} And also that nation, whom they shall serve, will I judge: and afterward shall they come out with great substance. {15:15} And thou shalt go to thy fathers in peace; thou shalt be buried in a good old age. {15:16} But in the fourth generation they shall come hither again: for the iniquity of the Amorites [is] not yet full. {15:17} And it came to pass, that, when the sun went down, and it was dark, behold a smoking furnace, and a burning lamp that passed between those pieces. {15:18} In the same day the LORD made a covenant with Abram, saying, Unto thy seed have I given this land, from the river of Egypt unto the great river, the river Euphrates: {15:19} The Kenites, and the Kenizzites, and the Kadmonites, {15:20} And the Hittites, and the Perizzites, and the Rephaims, {15:21} And the Amorites, and the Canaanites, and the Girgashites, and the Jebusites. {16:1} Now Sarai Abram's wife bare him no children: and she had an handmaid, an Egyptian, whose name [was] Hagar. {16:2} And Sarai said unto Abram, Behold now, the LORD hath restrained me from bearing: I pray thee, go in unto my maid; it may be that I may obtain children by her. And Abram hearkened to the voice of Sarai. {16:3} And Sarai Abram's wife took Hagar her maid the Egyptian, after Abram had dwelt ten years in the land of Canaan, and gave her to her husband Abram to be his wife. {16:4} And he went in unto Hagar, and she conceived: and when she saw that she had conceived, her mistress was despised in her eyes. {16:5} And Sarai said unto Abram, My wrong [be] upon thee: I have given my maid into thy bosom; and when she saw that she had conceived, I was despised in her eyes: the LORD judge between me and thee. {16:6} But Abram said unto Sarai, Behold, thy maid [is] in thy hand; do to her as it pleaseth thee. And when Sarai dealt hardly with her, she fled from her face. {16:7} And the angel of the LORD found her by a fountain of water in the wilderness, by the fountain in the way to Shur. {16:8} And he said, Hagar, Sarai's maid, whence camest thou? and whither wilt thou go? And she said, I flee from the face of my mistress Sarai. {16:9} And the angel of the LORD said unto her, Return to thy mistress, and submit thyself under her hands. {16:10} And the angel of the LORD said unto her, I will multiply thy seed exceedingly, that it shall not be numbered for multitude. {16:11} And the angel of the LORD said unto her, Behold, thou [art] with child, and shalt bear a son, and shalt call his name Ishmael; because the LORD hath heard thy affliction. {16:12} And he will be a wild man; his hand [will be] against every man, and every man's hand against him; and he shall dwell in the presence of all his brethren. {16:13} And she called the name of the LORD that spake unto her, Thou God seest me: for she said, Have I also here looked after him that seeth me? {16:14} Wherefore the well was called Beer-lahai-roi; behold, [it is] between Kadesh and Bered. {16:15} And Hagar bare Abram a son: and Abram called his son's name, which Hagar bare, Ishmael. {16:16} And Abram [was] fourscore and six years old, when Hagar bare Ishmael to Abram. {17:1} And when Abram was ninety years old and nine, the LORD appeared to Abram, and said unto him, I [am] the Almighty God; walk before me, and be thou perfect. {17:2} And I will make my covenant between me and thee, and will multiply thee exceedingly. {17:3} And Abram fell on his face: and God talked with him, saying, {17:4} As for me, behold, my covenant [is] with thee, and thou shalt be a father of many nations. {17:5} Neither shall thy name any more be called Abram, but thy name shall be Abraham; for a father of many nations have I made thee. {17:6} And I will make thee exceeding fruitful, and I will make nations of thee, and kings shall come out of thee. {17:7} And I will establish my covenant between me and thee and thy seed after thee in their generations for an everlasting covenant, to be a God unto thee, and to thy seed after thee. {17:8} And I will give unto thee, and to thy seed after thee, the land wherein thou art a stranger, all the land of Canaan, for an everlasting possession; and I will be their God. {17:9} And God said unto Abraham, Thou shalt keep my covenant therefore, thou, and thy seed after thee in their generations. {17:10} This [is] my covenant, which ye shall keep, between me and you and thy seed after thee; Every man child among you shall be circumcised. {17:11} And ye shall circumcise the flesh of your foreskin; and it shall be a token of the covenant betwixt me and you. {17:12} And he that is eight days old shall be circumcised among you, every man child in your generations, he that is born in the house, or bought with money of any stranger, which [is] not of thy seed. {17:13} He that is born in thy house, and he that is bought with thy money, must needs be circumcised: and my covenant shall be in your flesh for an everlasting covenant. {17:14} And the uncircumcised man child whose flesh of his foreskin is not circumcised, that soul shall be cut off from his people; he hath broken my covenant. {17:15} And God said unto Abraham, As for Sarai thy wife, thou shalt not call her name Sarai, but Sarah [shall] her name [be. ]{17:16} And I will bless her, and give thee a son also of her: yea, I will bless her, and she shall be [a mother] of nations; kings of people shall be of her. {17:17} Then Abraham fell upon his face, and laughed, and said in his heart, Shall [a child] be born unto him that is an hundred years old? and shall Sarah, that is ninety years old, bear? {17:18} And Abraham said unto God, O that Ishmael might live before thee! {17:19} And God said, Sarah thy wife shall bear thee a son indeed; and thou shalt call his name Isaac: and I will establish my covenant with him for an everlasting covenant, [and] with his seed after him. {17:20} And as for Ishmael, I have heard thee: Behold, I have blessed him, and will make him fruitful, and will multiply him exceedingly; twelve princes shall he beget, and I will make him a great nation. {17:21} But my covenant will I establish with Isaac, which Sarah shall bear unto thee at this set time in the next year. {17:22} And he left off talking with him, and God went up from Abraham. {17:23} And Abraham took Ishmael his son, and all that were born in his house, and all that were bought with his money, every male among the men of Abraham's house; and circumcised the flesh of their foreskin in the selfsame day, as God had said unto him. {17:24} And Abraham [was] ninety years old and nine, when he was circumcised in the flesh of his foreskin. {17:25} And Ishmael his son [was] thirteen years old, when he was circumcised in the flesh of his foreskin. {17:26} In the selfsame day was Abraham circumcised, and Ishmael his son. {17:27} And all the men of his house, born in the house, and bought with money of the stranger, were circumcised with him. {18:1} And the LORD appeared unto him in the plains of Mamre: and he sat in the tent door in the heat of the day; {18:2} And he lift up his eyes and looked, and, lo, three men stood by him: and when he saw [them,] he ran to meet them from the tent door, and bowed himself toward the ground, {18:3} And said, My Lord, if now I have found favour in thy sight, pass not away, I pray thee, from thy servant: {18:4} Let a little water, I pray you, be fetched, and wash your feet, and rest yourselves under the tree: {18:5} And I will fetch a morsel of bread, and comfort ye your hearts; after that ye shall pass on: for therefore are ye come to your servant. And they said, So do, as thou hast said. {18:6} And Abraham hastened into the tent unto Sarah, and said, Make ready quickly three measures of fine meal, knead [it,] and make cakes upon the hearth. {18:7} And Abraham ran unto the herd, and fetcht a calf tender and good, and gave [it] unto a young man; and he hasted to dress it. {18:8} And he took butter, and milk, and the calf which he had dressed, and set [it] before them; and he stood by them under the tree, and they did eat. {18:9} And they said unto him, Where [is] Sarah thy wife? And he said, Behold, in the tent. {18:10} And he said, I will certainly return unto thee according to the time of life; and, lo, Sarah thy wife shall have a son. And Sarah heard [it] in the tent door, which [was] behind him. {18:11} Now Abraham and Sarah [were] old [and] well stricken in age; [and] it ceased to be with Sarah after the manner of women. {18:12} Therefore Sarah laughed within herself, saying, After I am waxed old shall I have pleasure, my lord being old also? {18:13} And the LORD said unto Abraham, Wherefore did Sarah laugh, saying, Shall I of a surety bear a child, which am old? {18:14} Is any thing too hard for the LORD? At the time appointed I will return unto thee, according to the time of life, and Sarah shall have a son. {18:15} Then Sarah denied, saying, I laughed not; for she was afraid. And he said, Nay; but thou didst laugh. {18:16} And the men rose up from thence, and looked toward Sodom: and Abraham went with them to bring them on the way. {18:17} And the LORD said, Shall I hide from Abraham that thing which I do; {18:18} Seeing that Abraham shall surely become a great and mighty nation, and all the nations of the earth shall be blessed in him? {18:19} For I know him, that he will command his children and his household after him, and they shall keep the way of the LORD, to do justice and judgment; that the LORD may bring upon Abraham that which he hath spoken of him. {18:20} And the LORD said, Because the cry of Sodom and Gomorrah is great, and because their sin is very grievous; {18:21} I will go down now, and see whether they have done altogether according to the cry of it, which is come unto me; and if not, I will know. {18:22} And the men turned their faces from thence, and went toward Sodom: but Abraham stood yet before the LORD. {18:23} And Abraham drew near, and said, Wilt thou also destroy the righteous with the wicked? {18:24} Peradventure there be fifty righteous within the city: wilt thou also destroy and not spare the place for the fifty righteous that [are] therein? {18:25} That be far from thee to do after this manner, to slay the righteous with the wicked: and that the righteous should be as the wicked, that be far from thee: Shall not the Judge of all the earth do right? {18:26} And the LORD said, If I find in Sodom fifty righteous within the city, then I will spare all the place for their sakes. {18:27} And Abraham answered and said, Behold now, I have taken upon me to speak unto the Lord, which [am but] dust and ashes: {18:28} Peradventure there shall lack five of the fifty righteous: wilt thou destroy all the city for [lack of] five? And he said, If I find there forty and five, I will not destroy [it. ]{18:29} And he spake unto him yet again, and said, Peradventure there shall be forty found there. And he said, I will not do [it] for forty's sake. {18:30} And he said [unto him,] Oh let not the Lord be angry, and I will speak: Peradventure there shall thirty be found there. And he said, I will not do [it,] if I find thirty there. {18:31} And he said, Behold now, I have taken upon me to speak unto the Lord: Peradventure there shall be twenty found there. And he said, I will not destroy [it] for twenty's sake. {18:32} And he said, Oh let not the Lord be angry, and I will speak yet but this once: Peradventure ten shall be found there. And he said, I will not destroy [it] for ten's sake. {18:33} And the LORD went his way, as soon as he had left communing with Abraham: and Abraham returned unto his place. {19:1} And there came two angels to Sodom at even; and Lot sat in the gate of Sodom: and Lot seeing [them] rose up to meet them; and he bowed himself with his face toward the ground; {19:2} And he said, Behold now, my lords, turn in, I pray you, into your servant's house, and tarry all night, and wash your feet, and ye shall rise up early, and go on your ways. And they said, Nay; but we will abide in the street all night. {19:3} And he pressed upon them greatly; and they turned in unto him, and entered into his house; and he made them a feast, and did bake unleavened bread, and they did eat. {19:4} But before they lay down, the men of the city, [even] the men of Sodom, compassed the house round, both old and young, all the people from every quarter: {19:5} And they called unto Lot, and said unto him, Where [are] the men which came in to thee this night? bring them out unto us, that we may know them. {19:6} And Lot went out at the door unto them, and shut the door after him, {19:7} And said, I pray you, brethren, do not so wickedly. {19:8} Behold now, I have two daughters which have not known man; let me, I pray you, bring them out unto you, and do ye to them as [is] good in your eyes: only unto these men do nothing; for therefore came they under the shadow of my roof. {19:9} And they said, Stand back. And they said [again,] This one [fellow] came in to sojourn, and he will needs be a judge: now will we deal worse with thee, than with them. And they pressed sore upon the man, [even] Lot, and came near to break the door. {19:10} But the men put forth their hand, and pulled Lot into the house to them, and shut to the door. {19:11} And they smote the men that [were] at the door of the house with blindness, both small and great: so that they wearied themselves to find the door. {19:12} And the men said unto Lot, Hast thou here any besides? son in law, and thy sons, and thy daughters, and whatsoever thou hast in the city, bring [them] out of this place: {19:13} For we will destroy this place, because the cry of them is waxen great before the face of the LORD; and the LORD hath sent us to destroy it. {19:14} And Lot went out, and spake unto his sons in law, which married his daughters, and said, Up, get you out of this place; for the LORD will destroy this city. But he seemed as one that mocked unto his sons in law. {19:15} And when the morning arose, then the angels hastened Lot, saying, Arise, take thy wife, and thy two daughters, which are here; lest thou be consumed in the iniquity of the city. {19:16} And while he lingered, the men laid hold upon his hand, and upon the hand of his wife, and upon the hand of his two daughters; the LORD being merciful unto him: and they brought him forth, and set him without the city. {19:17} And it came to pass, when they had brought them forth abroad, that he said, Escape for thy life; look not behind thee, neither stay thou in all the plain; escape to the mountain, lest thou be consumed. {19:18} And Lot said unto them, Oh, not so, my Lord: {19:19} Behold now, thy servant hath found grace in thy sight, and thou hast magnified thy mercy, which thou hast shewed unto me in saving my life; and I cannot escape to the mountain, lest some evil take me, and I die: {19:20} Behold now, this city is near to flee unto, and it is a little one: Oh, let me escape thither, ([is] it not a little one?) and my soul shall live. {19:21} And he said unto him, See, I have accepted thee concerning this thing also, that I will not overthrow this city, for the which thou hast spoken. {19:22} Haste thee, escape thither; for I cannot do any thing till thou be come thither. Therefore the name of the city was called Zoar. {19:23} The sun was risen upon the earth when Lot entered into Zoar. {19:24} Then the LORD rained upon Sodom and upon Gomorrah brimstone and fire from the LORD out of heaven; {19:25} And he overthrew those cities, and all the plain, and all the inhabitants of the cities, and that which grew upon the ground. {19:26} But his wife looked back from behind him, and she became a pillar of salt. {19:27} And Abraham gat up early in the morning to the place where he stood before the LORD: {19:28} And he looked toward Sodom and Gomorrah, and toward all the land of the plain, and beheld, and, lo, the smoke of the country went up as the smoke of a furnace. {19:29} And it came to pass, when God destroyed the cities of the plain, that God remembered Abraham, and sent Lot out of the midst of the overthrow, when he overthrew the cities in the which Lot dwelt. {19:30} And Lot went up out of Zoar, and dwelt in the mountain, and his two daughters with him; for he feared to dwell in Zoar: and he dwelt in a cave, he and his two daughters. {19:31} And the firstborn said unto the younger, Our father [is] old, and [there is] not a man in the earth to come in unto us after the manner of all the earth: {19:32} Come, let us make our father drink wine, and we will lie with him, that we may preserve seed of our father. {19:33} And they made their father drink wine that night: and the firstborn went in, and lay with her father; and he perceived not when she lay down, nor when she arose. {19:34} And it came to pass on the morrow, that the firstborn said unto the younger, Behold, I lay yesternight with my father: let us make him drink wine this night also; and go thou in, [and] lie with him, that we may preserve seed of our father. {19:35} And they made their father drink wine that night also: and the younger arose, and lay with him; and he perceived not when she lay down, nor when she arose. {19:36} Thus were both the daughters of Lot with child by their father. {19:37} And the firstborn bare a son, and called his name Moab: the same [is] the father of the Moabites unto this day. {19:38} And the younger, she also bare a son, and called his name Benammi: the same [is] the father of the children of Ammon unto this day. {20:1} And Abraham journeyed from thence toward the south country, and dwelled between Kadesh and Shur, and sojourned in Gerar. {20:2} And Abraham said of Sarah his wife, She [is] my sister: and Abimelech king of Gerar sent, and took Sarah. {20:3} But God came to Abimelech in a dream by night, and said to him, Behold, thou [art but] a dead man, for the woman which thou hast taken; for she [is] a man's wife. {20:4} But Abimelech had not come near her: and he said, Lord, wilt thou slay also a righteous nation? {20:5} Said he not unto me, She [is] my sister? and she, even she herself said, He [is] my brother: in the integrity of my heart and innocency of my hands have I done this. {20:6} And God said unto him in a dream, Yea, I know that thou didst this in the integrity of thy heart; for I also withheld thee from sinning against me: therefore suffered I thee not to touch her. {20:7} Now therefore restore the man [his] wife; for he [is] a prophet, and he shall pray for thee, and thou shalt live: and if thou restore [her] not, know thou that thou shalt surely die, thou, and all that [are] thine. {20:8} Therefore Abimelech rose early in the morning, and called all his servants, and told all these things in their ears: and the men were sore afraid. {20:9} Then Abimelech called Abraham, and said unto him, What hast thou done unto us? and what have I offended thee, that thou hast brought on me and on my kingdom a great sin? thou hast done deeds unto me that ought not to be done. {20:10} And Abimelech said unto Abraham, What sawest thou, that thou hast done this thing? {20:11} And Abraham said, Because I thought, Surely the fear of God [is] not in this place; and they will slay me for my wife's sake. {20:12} And yet indeed [she is] my sister; she [is] the daughter of my father, but not the daughter of my mother; and she became my wife. {20:13} And it came to pass, when God caused me to wander from my father's house, that I said unto her, This [is] thy kindness which thou shalt shew unto me; at every place whither we shall come, say of me, He [is] my brother. {20:14} And Abimelech took sheep, and oxen, and menservants, and womenservants, and gave [them] unto Abraham, and restored him Sarah his wife. {20:15} And Abimelech said, Behold, my land [is] before thee: dwell where it pleaseth thee. {20:16} And unto Sarah he said, Behold, I have given thy brother a thousand [pieces] of silver: behold, he [is] to thee a covering of the eyes, unto all that [are] with thee, and with all [other:] thus she was reproved. {20:17} So Abraham prayed unto God: and God healed Abimelech, and his wife, and his maidservants; and they bare [children. ]{20:18} For the LORD had fast closed up all the wombs of the house of Abimelech, because of Sarah Abraham's wife. {21:1} And the LORD visited Sarah as he had said, and the LORD did unto Sarah as he had spoken. {21:2} For Sarah conceived, and bare Abraham a son in his old age, at the set time of which God had spoken to him. {21:3} And Abraham called the name of his son that was born unto him, whom Sarah bare to him, Isaac. {21:4} And Abraham circumcised his son Isaac being eight days old, as God had commanded him. {21:5} And Abraham was an hundred years old, when his son Isaac was born unto him. {21:6} And Sarah said, God hath made me to laugh, [so that] all that hear will laugh with me. {21:7} And she said, Who would have said unto Abraham, that Sarah should have given children suck? for I have born [him] a son in his old age. {21:8} And the child grew, and was weaned: and Abraham made a great feast the [same] day that Isaac was weaned. {21:9} And Sarah saw the son of Hagar the Egyptian, which she had born unto Abraham, mocking. {21:10} Wherefore she said unto Abraham, Cast out this bondwoman and her son: for the son of this bondwoman shall not be heir with my son, [even] with Isaac. {21:11} And the thing was very grievous in Abraham's sight because of his son. {21:12} And God said unto Abraham, Let it not be grievous in thy sight because of the lad, and because of thy bondwoman; in all that Sarah hath said unto thee, hearken unto her voice; for in Isaac shall thy seed be called. {21:13} And also of the son of the bondwoman will I make a nation, because he [is] thy seed. {21:14} And Abraham rose up early in the morning, and took bread, and a bottle of water, and gave [it] unto Hagar, putting [it] on her shoulder, and the child, and sent her away: and she departed, and wandered in the wilderness of Beer-sheba. {21:15} And the water was spent in the bottle, and she cast the child under one of the shrubs. {21:16} And she went, and sat her down over against [him] a good way off, as it were a bowshot: for she said, Let me not see the death of the child. And she sat over against [him,] and lift up her voice, and wept. {21:17} And God heard the voice of the lad; and the angel of God called Hagar out of heaven, and said unto her, What aileth thee, Hagar? fear not; for God hath heard the voice of the lad where he [is. ]{21:18} Arise, lift up the lad, and hold him in thine hand; for I will make him a great nation. {21:19} And God opened her eyes, and she saw a well of water; and she went, and filled the bottle with water, and gave the lad drink. {21:20} And God was with the lad; and he grew, and dwelt in the wilderness, and became an archer. {21:21} And he dwelt in the wilderness of Paran: and his mother took him a wife out of the land of Egypt. {21:22} And it came to pass at that time, that Abimelech and Phichol the chief captain of his host spake unto Abraham, saying, God [is] with thee in all that thou doest: {21:23} Now therefore swear unto me here by God that thou wilt not deal falsely with me, nor with my son, nor with my son's son: [but] according to the kindness that I have done unto thee, thou shalt do unto me, and to the land wherein thou hast sojourned. {21:24} And Abraham said, I will swear. {21:25} And Abraham reproved Abimelech because of a well of water, which Abimelech's servants had violently taken away. {21:26} And Abimelech said, I wot not who hath done this thing: neither didst thou tell me, neither yet heard I [of it,] but to day. {21:27} And Abraham took sheep and oxen, and gave them unto Abimelech; and both of them made a covenant. {21:28} And Abraham set seven ewe lambs of the flock by themselves. {21:29} And Abimelech said unto Abraham, What [mean] these seven ewe lambs which thou hast set by themselves? {21:30} And he said, For [these] seven ewe lambs shalt thou take of my hand, that they may be a witness unto me, that I have digged this well. {21:31} Wherefore he called that place Beer-sheba; because there they sware both of them. {21:32} Thus they made a covenant at Beer-sheba: then Abimelech rose up, and Phichol the chief captain of his host, and they returned into the land of the Philistines. {21:33} And [Abraham] planted a grove in Beer-sheba, and called there on the name of the LORD, the everlasting God. {21:34} And Abraham sojourned in the Philistines' land many days. {22:1} And it came to pass after these things, that God did tempt Abraham, and said unto him, Abraham: and he said, Behold, [here] I [am. ]{22:2} And he said, Take now thy son, thine only [son] Isaac, whom thou lovest, and get thee into the land of Moriah; and offer him there for a burnt offering upon one of the mountains which I will tell thee of. {22:3} And Abraham rose up early in the morning, and saddled his ass, and took two of his young men with him, and Isaac his son, and clave the wood for the burnt offering, and rose up, and went unto the place of which God had told him. {22:4} Then on the third day Abraham lifted up his eyes, and saw the place afar off. {22:5} And Abraham said unto his young men, Abide ye here with the ass; and I and the lad will go yonder and worship, and come again to you, {22:6} And Abraham took the wood of the burnt offering, and laid [it] upon Isaac his son; and he took the fire in his hand, and a knife; and they went both of them together. {22:7} And Isaac spake unto Abraham his father, and said, My father: and he said, Here [am] I, my son. And he said, Behold the fire and the wood: but where [is] the lamb for a burnt offering? {22:8} And Abraham said, My son, God will provide himself a lamb for a burnt offering: so they went both of them together. {22:9} And they came to the place which God had told him of; and Abraham built an altar there, and laid the wood in order, and bound Isaac his son, and laid him on the altar upon the wood. {22:10} And Abraham stretched forth his hand, and took the knife to slay his son. {22:11} And the angel of the LORD called unto him out of heaven, and said, Abraham, Abraham: and he said, Here [am] I. {22:12} And he said, Lay not thine hand upon the lad, neither do thou any thing unto him: for now I know that thou fearest God, seeing thou hast not withheld thy son, thine only [son] from me. {22:13} And Abraham lifted up his eyes, and looked, and behold behind [him] a ram caught in a thicket by his horns: and Abraham went and took the ram, and offered him up for a burnt offering in the stead of his son. {22:14} And Abraham called the name of that place Jehovah-jireh: as it is said [to] this day, In the mount of the LORD it shall be seen. {22:15} And the angel of the LORD called unto Abraham out of heaven the second time, {22:16} And said, By myself have I sworn, saith the LORD, for because thou hast done this thing, and hast not withheld thy son, thine only [son: ]{22:17} That in blessing I will bless thee, and in multiplying I will multiply thy seed as the stars of the heaven, and as the sand which [is] upon the sea shore; and thy seed shall possess the gate of his enemies; {22:18} And in thy seed shall all the nations of the earth be blessed; because thou hast obeyed my voice. {22:19} So Abraham returned unto his young men, and they rose up and went together to Beer-sheba; and Abraham dwelt at Beer-sheba. {22:20} And it came to pass after these things, that it was told Abraham, saying, Behold, Milcah, she hath also born children unto thy brother Nahor; {22:21} Huz his firstborn, and Buz his brother, and Kemuel the father of Aram, {22:22} And Chesed, and Hazo, and Pildash, and Jidlaph, and Bethuel. {22:23} And Bethuel begat Rebekah: these eight Milcah did bear to Nahor, Abraham's brother. {22:24} And his concubine, whose name [was] Reumah, she bare also Tebah, and Gaham, and Thahash, and Maachah. {23:1} And Sarah was an hundred and seven and twenty years old: [these were] the years of the life of Sarah. {23:2} And Sarah died in Kirjath-arba; the same [is] Hebron in the land of Canaan: and Abraham came to mourn for Sarah, and to weep for her. {23:3} And Abraham stood up from before his dead, and spake unto the sons of Heth, saying, {23:4} I [am] a stranger and a sojourner with you: give me a possession of a buryingplace with you, that I may bury my dead out of my sight. {23:5} And the children of Heth answered Abraham, saying unto him, {23:6} Hear us, my lord: thou [art] a mighty prince among us: in the choice of our sepulchres bury thy dead; none of us shall withhold from thee his sepulchre, but that thou mayest bury thy dead. {23:7} And Abraham stood up, and bowed himself to the people of the land, [even] to the children of Heth. {23:8} And he communed with them, saying, If it be your mind that I should bury my dead out of my sight; hear me, and intreat for me to Ephron the son of Zohar, {23:9} That he may give me the cave of Machpelah, which he hath, which [is] in the end of his field; for as much money as it is worth he shall give it me for a possession of a buryingplace amongst you. {23:10} And Ephron dwelt among the children of Heth: and Ephron the Hittite answered Abraham in the audience of the children of Heth, [even] of all that went in at the gate of his city, saying, {23:11} Nay, my lord, hear me: the field give I thee, and the cave that [is] therein, I give it thee; in the presence of the sons of my people give I it thee: bury thy dead. {23:12} And Abraham bowed down himself before the people of the land. {23:13} And he spake unto Ephron in the audience of the people of the land, saying, But if thou [wilt give it,] I pray thee, hear me: I will give thee money for the field; take [it] of me, and I will bury my dead there. {23:14} And Ephron answered Abraham, saying unto him, {23:15} My lord, hearken unto me: the land [is worth] four hundred shekels of silver; what [is] that betwixt me and thee? bury therefore thy dead. {23:16} And Abraham hearkened unto Ephron; and Abraham weighed to Ephron the silver, which he had named in the audience of the sons of Heth, four hundred shekels of silver, current [money] with the merchant. {23:17} And the field of Ephron, which [was] in Machpelah, which [was] before Mamre, the field, and the cave which [was] therein, and all the trees that [were] in the field, that [were] in all the borders round about, were made sure {23:18} Unto Abraham for a possession in the presence of the children of Heth, before all that went in at the gate of his city. {23:19} And after this, Abraham buried Sarah his wife in the cave of the field of Machpelah before Mamre: the same [is] Hebron in the land of Canaan. {23:20} And the field, and the cave that [is] therein, were made sure unto Abraham for a possession of a buryingplace by the sons of Heth. {24:1} And Abraham was old, [and] well stricken in age: and the LORD had blessed Abraham in all things. {24:2} And Abraham said unto his eldest servant of his house, that ruled over all that he had, Put, I pray thee, thy hand under my thigh: {24:3} And I will make thee swear by the LORD, the God of heaven, and the God of the earth, that thou shalt not take a wife unto my son of the daughters of the Canaanites, among whom I dwell: {24:4} But thou shalt go unto my country, and to my kindred, and take a wife unto my son Isaac. {24:5} And the servant said unto him, Peradventure the woman will not be willing to follow me unto this land: must I needs bring thy son again unto the land from whence thou camest? {24:6} And Abraham said unto him, Beware thou that thou bring not my son thither again. {24:7} The LORD God of heaven, which took me from my father's house, and from the land of my kindred, and which spake unto me, and that sware unto me, saying, Unto thy seed will I give this land; he shall send his angel before thee, and thou shalt take a wife unto my son from thence. {24:8} And if the woman will not be willing to follow thee, then thou shalt be clear from this my oath: only bring not my son thither again. {24:9} And the servant put his hand under the thigh of Abraham his master, and sware to him concerning that matter. {24:10} And the servant took ten camels of the camels of his master, and departed; for all the goods of his master [were] in his hand: and he arose, and went to Mesopotamia, unto the city of Nahor. {24:11} And he made his camels to kneel down without the city by a well of water at the time of the evening, [even] the time that women go out to draw [water. ]{24:12} And he said, O LORD God of my master Abraham, I pray thee, send me good speed this day, and shew kindness unto my master Abraham. {24:13} Behold, I stand [here] by the well of water; and the daughters of the men of the city come out to draw water: {24:14} And let it come to pass, that the damsel to whom I shall say, Let down thy pitcher, I pray thee, that I may drink; and she shall say, Drink, and I will give thy camels drink also: [let the same be] she [that] thou hast appointed for thy servant Isaac; and thereby shall I know that thou hast shewed kindness unto my master. {24:15} And it came to pass, before he had done speaking, that, behold, Rebekah came out, who was born to Bethuel, son of Milcah, the wife of Nahor, Abraham's brother, with her pitcher upon her shoulder. {24:16} And the damsel [was] very fair to look upon, a virgin, neither had any man known her: and she went down to the well, and filled her pitcher, and came up. {24:17} And the servant ran to meet her, and said, Let me, I pray thee, drink a little water of thy pitcher. {24:18} And she said, Drink, my lord: and she hasted, and let down her pitcher upon her hand, and gave him drink. {24:19} And when she had done giving him drink, she said, I will draw [water] for thy camels also, until they have done drinking. {24:20} And she hasted, and emptied her pitcher into the trough, and ran again unto the well to draw [water,] and drew for all his camels. {24:21} And the man wondering at her held his peace, to wit whether the LORD had made his journey prosperous or not. {24:22} And it came to pass, as the camels had done drinking, that the man took a golden earring of half a shekel weight, and two bracelets for her hands of ten [shekels] weight of gold; {24:23} And said, Whose daughter [art] thou? tell me, I pray thee: is there room [in] thy father's house for us to lodge in? {24:24} And she said unto him, I [am] the daughter of Bethuel the son of Milcah, which she bare unto Nahor. {24:25} She said moreover unto him, We have both straw and provender enough, and room to lodge in. {24:26} And the man bowed down his head, and worshipped the LORD. {24:27} And he said, Blessed [be] the LORD God of my master Abraham, who hath not left destitute my master of his mercy and his truth: I [being] in the way, the LORD led me to the house of my master's brethren. {24:28} And the damsel ran, and told [them of] her mother's house these things. {24:29} And Rebekah had a brother, and his name [was] Laban: and Laban ran out unto the man, unto the well. {24:30} And it came to pass, when he saw the earring and bracelets upon his sister's hands, and when he heard the words of Rebekah his sister, saying, Thus spake the man unto me; that he came unto the man; and, behold, he stood by the camels at the well. {24:31} And he said, Come in, thou blessed of the LORD; wherefore standest thou without? for I have prepared the house, and room for the camels. {24:32} And the man came into the house: and he ungirded his camels, and gave straw and provender for the camels, and water to wash his feet, and the men's feet that [were] with him. {24:33} And there was set [meat] before him to eat: but he said, I will not eat, until I have told mine errand. And he said, Speak on. {24:34} And he said, I [am] Abraham's servant. {24:35} And the LORD hath blessed my master greatly; and he is become great: and he hath given him flocks, and herds, and silver, and gold, and menservants, and maidservants, and camels, and asses. {24:36} And Sarah my master's wife bare a son to my master when she was old: and unto him hath he given all that he hath. {24:37} And my master made me swear, saying, Thou shalt not take a wife to my son of the daughters of the Canaanites, in whose land I dwell: {24:38} But thou shalt go unto my father's house, and to my kindred, and take a wife unto my son. {24:39} And I said unto my master, Peradventure the woman will not follow me. {24:40} And he said unto me, The LORD, before whom I walk, will send his angel with thee, and prosper thy way; and thou shalt take a wife for my son of my kindred, and of my father's house: {24:41} Then shalt thou be clear from [this] my oath, when thou comest to my kindred; and if they give not thee [one,] thou shalt be clear from my oath. {24:42} And I came this day unto the well, and said, O LORD God of my master Abraham, if now thou do prosper my way which I go; {24:43} Behold, I stand by the well of water; and it shall come to pass, that when the virgin cometh forth to draw [water,] and I say to her, Give me, I pray thee, a little water of thy pitcher to drink; {24:44} And she say to me, Both drink thou, and I will also draw for thy camels: [let] the same [be] the woman whom the LORD hath appointed out for my master's son. {24:45} And before I had done speaking in mine heart, behold, Rebekah came forth with her pitcher on her shoulder; and she went down unto the well, and drew [water:] and I said unto her, Let me drink, I pray thee. {24:46} And she made haste, and let down her pitcher from her [shoulder,] and said, Drink, and I will give thy camels drink also: so I drank, and she made the camels drink also. {24:47} And I asked her, and said, Whose daughter [art] thou? And she said, The daughter of Bethuel, Nahor's son, whom Milcah bare unto him: and I put the earring upon her face, and the bracelets upon her hands. {24:48} And I bowed down my head, and worshipped the LORD, and blessed the LORD God of my master Abraham, which had led me in the right way to take my master's brother's daughter unto his son. {24:49} And now if ye will deal kindly and truly with my master, tell me: and if not, tell me; that I may turn to the right hand, or to the left. {24:50} Then Laban and Bethuel answered and said, The thing proceedeth from the LORD: we cannot speak unto thee bad or good. {24:51} Behold, Rebekah [is] before thee, take [her,] and go, and let her be thy master's son's wife, as the LORD hath spoken. {24:52} And it came to pass, that, when Abraham's servant heard their words, he worshipped the LORD, [bowing himself] to the earth. {24:53} And the servant brought forth jewels of silver, and jewels of gold, and raiment, and gave [them] to Rebekah: he gave also to her brother and to her mother precious things. {24:54} And they did eat and drink, he and the men that [were] with him, and tarried all night; and they rose up in the morning, and he said, Send me away unto my master. {24:55} And her brother and her mother said, Let the damsel abide with us [a few] days, at the least ten; after that she shall go. {24:56} And he said unto them, Hinder me not, seeing the LORD hath prospered my way; send me away that I may go to my master. {24:57} And they said, We will call the damsel, and enquire at her mouth. {24:58} And they called Rebekah, and said unto her, Wilt thou go with this man? And she said, I will go. {24:59} And they sent away Rebekah their sister, and her nurse, and Abraham's servant, and his men. {24:60} And they blessed Rebekah, and said unto her, Thou [art] our sister, be thou [the mother] of thousands of millions, and let thy seed possess the gate of those which hate them. {24:61} And Rebekah arose, and her damsels, and they rode upon the camels, and followed the man: and the servant took Rebekah, and went his way. {24:62} And Isaac came from the way of the well Lahai-roi; for he dwelt in the south country. {24:63} And Isaac went out to meditate in the field at the eventide: and he lifted up his eyes, and saw, and, behold, the camels [were] coming. {24:64} And Rebekah lifted up her eyes, and when she saw Isaac, she lighted off the camel. {24:65} For she [had] said unto the servant, What man [is] this that walketh in the field to meet us? And the servant [had] said, It [is] my master: therefore she took a vail, and covered herself. {24:66} And the servant told Isaac all things that he had done. {24:67} And Isaac brought her into his mother Sarah's tent, and took Rebekah, and she became his wife; and he loved her: and Isaac was comforted after his mother's [death.] {25:1} Then again Abraham took a wife, and her name [was] Keturah. {25:2} And she bare him Zimran, and Jokshan, and Medan, and Midian, and Ishbak, and Shuah. {25:3} And Jokshan begat Sheba, and Dedan. And the sons of Dedan were Asshurim, and Letushim, and Leummim. {25:4} And the sons of Midian; Ephah, and Epher, and Hanoch, and Abidah, and Eldaah. All these [were] the children of Keturah. {25:5} And Abraham gave all that he had unto Isaac. {25:6} But unto the sons of the concubines, which Abraham had, Abraham gave gifts, and sent them away from Isaac his son, while he yet lived, eastward, unto the east country. {25:7} And these [are] the days of the years of Abraham's life which he lived, an hundred threescore and fifteen years. {25:8} Then Abraham gave up the ghost, and died in a good old age, an old man, and full [of years;] and was gathered to his people. {25:9} And his sons Isaac and Ishmael buried him in the cave of Machpelah, in the field of Ephron the son of Zohar the Hittite, which [is] before Mamre; {25:10} The field which Abraham purchased of the sons of Heth: there was Abraham buried, and Sarah his wife. {25:11} And it came to pass after the death of Abraham, that God blessed his son Isaac; and Isaac dwelt by the well Lahai-roi. {25:12} Now these [are] the generations of Ishmael, Abraham's son, whom Hagar the Egyptian, Sarah's handmaid, bare unto Abraham: {25:13} And these [are] the names of the sons of Ishmael, by their names, according to their generations: the firstborn of Ishmael, Nebajoth; and Kedar, and Adbeel, and Mibsam, {25:14} And Mishma, and Dumah, and Massa, {25:15} Hadar, and Tema, Jetur, Naphish, and Kedemah: {25:16} These [are] the sons of Ishmael, and these [are] their names, by their towns, and by their castles; twelve princes according to their nations. {25:17} And these [are] the years of the life of Ishmael, an hundred and thirty and seven years: and he gave up the ghost and died; and was gathered unto his people. {25:18} And they dwelt from Havilah unto Shur, that [is] before Egypt, as thou goest toward Assyria: [and] he died in the presence of all his brethren. {25:19} And these [are] the generations of Isaac, Abraham's son: Abraham begat Isaac: {25:20} And Isaac was forty years old when he took Rebekah to wife, the daughter of Bethuel the Syrian of Padan-aram, the sister to Laban the Syrian. {25:21} And Isaac intreated the LORD for his wife, because she [was] barren: and the LORD was intreated of him, and Rebekah his wife conceived. {25:22} And the children struggled together within her; and she said, If [it be] so, why [am] I thus? And she went to enquire of the LORD. {25:23} And the LORD said unto her, Two nations [are] in thy womb, and two manner of people shall be separated from thy bowels; and [the one] people shall be stronger than [the other] people; and the elder shall serve the younger. {25:24} And when her days to be delivered were fulfilled, behold, [there were] twins in her womb. {25:25} And the first came out red, all over like an hairy garment; and they called his name Esau. {25:26} And after that came his brother out, and his hand took hold on Esau's heel; and his name was called Jacob: and Isaac [was] threescore years old when she bare them. {25:27} And the boys grew: and Esau was a cunning hunter, a man of the field; and Jacob [was] a plain man, dwelling in tents. {25:28} And Isaac loved Esau, because he did eat of [his] venison: but Rebekah loved Jacob. {25:29} And Jacob sod pottage: and Esau came from the field, and he [was] faint: {25:30} And Esau said to Jacob, Feed me, I pray thee, with that same red [pottage;] for I [am] faint: therefore was his name called Edom. {25:31} And Jacob said, Sell me this day thy birthright. {25:32} And Esau said, Behold, I [am] at the point to die: and what profit shall this birthright do to me? {25:33} And Jacob said, Swear to me this day; and he sware unto him: and he sold his birthright unto Jacob. {25:34} Then Jacob gave Esau bread and pottage of lentiles; and he did eat and drink, and rose up, and went his way: thus Esau despised [his] birthright. {26:1} And there was a famine in the land, beside the first famine that was in the days of Abraham. And Isaac went unto Abimelech king of the Philistines unto Gerar. {26:2} And the LORD appeared unto him, and said, Go not down into Egypt; dwell in the land which I shall tell thee of: {26:3} Sojourn in this land, and I will be with thee, and will bless thee; for unto thee, and unto thy seed, I will give all these countries, and I will perform the oath which I sware unto Abraham thy father; {26:4} And I will make thy seed to multiply as the stars of heaven, and will give unto thy seed all these countries; and in thy seed shall all the nations of the earth be blessed; {26:5} Because that Abraham obeyed my voice, and kept my charge, my commandments, my statutes, and my laws. {26:6} And Isaac dwelt in Gerar: {26:7} And the men of the place asked [him] of his wife; and he said, She [is] my sister: for he feared to say, [She is] my wife; lest, [said he,] the men of the place should kill me for Rebekah; because she [was] fair to look upon. {26:8} And it came to pass, when he had been there a long time, that Abimelech king of the Philistines looked out at a window, and saw, and, behold, Isaac [was] sporting with Rebekah his wife. {26:9} And Abimelech called Isaac, and said, Behold, of a surety she [is] thy wife: and how saidst thou, She [is] my sister? And Isaac said unto him, Because I said, Lest I die for her. {26:10} And Abimelech said, What [is] this thou hast done unto us? one of the people might lightly have lien with thy wife, and thou shouldest have brought guiltiness upon us. {26:11} And Abimelech charged all [his] people, saying, He that toucheth this man or his wife shall surely be put to death. {26:12} Then Isaac sowed in that land, and received in the same year an hundredfold: and the LORD blessed him. {26:13} And the man waxed great, and went forward, and grew until he became very great: {26:14} For he had possession of flocks, and possession of herds, and great store of servants: and the Philistines envied him. {26:15} For all the wells which his father's servants had digged in the days of Abraham his father, the Philistines had stopped them, and filled them with earth. {26:16} And Abimelech said unto Isaac, Go from us; for thou art much mightier than we. {26:17} And Isaac departed thence, and pitched his tent in the valley of Gerar, and dwelt there. {26:18} And Isaac digged again the wells of water, which they had digged in the days of Abraham his father; for the philistines had stopped them after the death of Abraham: and he called their names after the names by which his father had called them. {26:19} And Isaac's servants digged in the valley, and found there a well of springing water. {26:20} And the herdmen of Gerar did strive with Isaac's herdmen, saying, The water [is] ours: and he called the name of the well Esek; because they strove with him. {26:21} And they digged another well, and strove for that also: and he called the name of it Sitnah. {26:22} And he removed from thence, and digged another well; and for that they strove not: and he called the name of it Rehoboth; and he said, For now the LORD hath made room for us, and we shall be fruitful in the land. {26:23} And he went up from thence to Beer-sheba. {26:24} And the LORD appeared unto him the same night, and said, I [am] the God of Abraham thy father: fear not, for I [am] with thee, and will bless thee, and multiply thy seed for my servant Abraham's sake. {26:25} And he builded an altar there, and called upon the name of the LORD and pitched his tent there: and there Isaac's servants digged a well. {26:26} Then Abimelech went to him from Gerar, and Ahuzzath one of his friends, and Phichol the chief captain of his army. {26:27} And Isaac said unto them, Wherefore come ye to me, seeing ye hate me, and have sent me away from you? {26:28} And they said, We saw certainly that the LORD was with thee: and we said, Let there be now an oath betwixt us, [even] betwixt us and thee, and let us make a covenant with thee; {26:29} That thou wilt do us no hurt, as we have not touched thee, and as we have done unto thee nothing but good, and have sent thee away in peace: thou [art] now the blessed of the LORD. {26:30} And he made them a feast, and they did eat and drink. {26:31} And they rose up betimes in the morning, and sware one to another: and Isaac sent them away, and they departed from him in peace. {26:32} And it came to pass the same day, that Isaac's servants came, and told him concerning the well which they had digged, and said unto him, We have found water. {26:33} And he called it Shebah: therefore the name of the city [is] Beer-sheba unto this day. {26:34} And Esau was forty years old when he took to wife Judith the daughter of Beeri the Hittite, and Bashemath the daughter of Elon the Hittite: {26:35} Which were a grief of mind unto Isaac and to Rebekah. {27:1} And it came to pass, that when Isaac was old, and his eyes were dim, so that he could not see, he called Esau his eldest son, and said unto him, My son: and he said unto him, Behold, [here am] I. {27:2} And he said, Behold now, I am old, I know not the day of my death: {27:3} Now therefore take, I pray thee, thy weapons, thy quiver and thy bow, and go out to the field, and take me [some] venison; {27:4} And make me savoury meat, such as I love, and bring [it] to me, that I may eat; that my soul may bless thee before I die. {27:5} And Rebekah heard when Isaac spake to Esau his son. And Esau went to the field to hunt [for] venison, [and] to bring [it.] {27:6} And Rebekah spake unto Jacob her son, saying, Behold, I heard thy father speak unto Esau thy brother, saying, {27:7} Bring me venison, and make me savoury meat, that I may eat, and bless thee before the LORD before my death. {27:8} Now therefore, my son, obey my voice according to that which I command thee. {27:9} Go now to the flock, and fetch me from thence two good kids of the goats; and I will make them savoury meat for thy father, such as he loveth: {27:10} And thou shalt bring [it] to thy father, that he may eat, and that he may bless thee before his death. {27:11} And Jacob said to Rebekah his mother, Behold, Esau my brother [is] a hairy man, and I [am] a smooth man: {27:12} My father peradventure will feel me, and I shall seem to him as a deceiver; and I shall bring a curse upon me, and not a blessing. {27:13} And his mother said unto him, Upon me [be] thy curse, my son: only obey my voice, and go fetch me [them. ]{27:14} And he went, and fetched, and brought [them] to his mother: and his mother made savoury meat, such as his father loved. {27:15} And Rebekah took goodly raiment of her eldest son Esau, which [were] with her in the house, and put them upon Jacob her younger son: {27:16} And she put the skins of the kids of the goats upon his hands, and upon the smooth of his neck: {27:17} And she gave the savoury meat and the bread, which she had prepared, into the hand of her son Jacob. {27:18} And he came unto his father, and said, My father: and he said, Here [am] I; who [art] thou, my son? {27:19} And Jacob said unto his father, I [am] Esau thy firstborn; I have done according as thou badest me: arise, I pray thee, sit and eat of my venison, that thy soul may bless me. {27:20} And Isaac said unto his son, How [is it] that thou hast found [it] so quickly, my son? And he said, Because the LORD thy God brought [it] to me. {27:21} And Isaac said unto Jacob, Come near, I pray thee, that I may feel thee, my son, whether thou [be] my very son Esau or not. {27:22} And Jacob went near unto Isaac his father; and he felt him, and said, The voice [is] Jacob's voice, but the hands [are] the hands of Esau. {27:23} And he discerned him not, because his hands were hairy, as his brother Esau's hands: so he blessed him. {27:24} And he said, [Art] thou my very son Esau? And he said, I [am. ]{27:25} And he said, Bring [it] near to me, and I will eat of my son's venison, that my soul may bless thee. And he brought [it] near to him, and he did eat: and he brought him wine, and he drank. {27:26} And his father Isaac said unto him, Come near now, and kiss me, my son. {27:27} And he came near, and kissed him: and he smelled the smell of his raiment, and blessed him, and said, See, the smell of my son [is] as the smell of a field which the LORD hath blessed: {27:28} Therefore God give thee of the dew of heaven, and the fatness of the earth, and plenty of corn and wine: {27:29} Let people serve thee, and nations bow down to thee: be lord over thy brethren, and let thy mother's sons bow down to thee: cursed [be] every one that curseth thee, and blessed [be] he that blesseth thee. {27:30} And it came to pass, as soon as Isaac had made an end of blessing Jacob, and Jacob was yet scarce gone out from the presence of Isaac his father, that Esau his brother came in from his hunting. {27:31} And he also had made savoury meat, and brought it unto his father, and said unto his father, Let my father arise, and eat of his son's venison, that thy soul may bless me. {27:32} And Isaac his father said unto him, Who [art] thou? And he said, I [am] thy son, thy firstborn Esau. {27:33} And Isaac trembled very exceedingly, and said, Who? where [is] he that hath taken venison, and brought [it] me, and I have eaten of all before thou camest, and have blessed him? yea, [and] he shall be blessed. {27:34} And when Esau heard the words of his father, he cried with a great and exceeding bitter cry, and said unto his father, Bless me, [even] me also, O my father. {27:35} And he said, Thy brother came with subtilty, and hath taken away thy blessing. {27:36} And he said, Is not he rightly named Jacob? for he hath supplanted me these two times: he took away my birthright; and, behold, now he hath taken away my blessing. And he said, Hast thou not reserved a blessing for me? {27:37} And Isaac answered and said unto Esau, Behold, I have made him thy lord, and all his brethren have I given to him for servants; and with corn and wine have I sustained him: and what shall I do now unto thee, my son? {27:38} And Esau said unto his father, Hast thou but one blessing, my father? bless me, [even] me also, O my father. And Esau lifted up his voice, and wept. {27:39} And Isaac his father answered and said unto him, Behold, thy dwelling shall be the fatness of the earth, and of the dew of heaven from above; {27:40} And by thy sword shalt thou live, and shalt serve thy brother; and it shall come to pass when thou shalt have the dominion, that thou shalt break his yoke from off thy neck. {27:41} And Esau hated Jacob because of the blessing wherewith his father blessed him: and Esau said in his heart, The days of mourning for my father are at hand; then will I slay my brother Jacob. {27:42} And these words of Esau her elder son were told to Rebekah: and she sent and called Jacob her younger son, and said unto him, Behold, thy brother Esau, as touching thee, doth comfort himself, [purposing] to kill thee. {27:43} Now therefore, my son, obey my voice; and arise, flee thou to Laban my brother to Haran; {27:44} And tarry with him a few days, until thy brother's fury turn away; {27:45} Until thy brother's anger turn away from thee, and he forget [that] which thou hast done to him: then I will send, and fetch thee from thence: why should I be deprived also of you both in one day? {27:46} And Rebekah said to Isaac, I am weary of my life because of the daughters of Heth: if Jacob take a wife of the daughters of Heth, such as these [which are] of the daughters of the land, what good shall my life do me? {28:1} And Isaac called Jacob, and blessed him, and charged him, and said unto him, Thou shalt not take a wife of the daughters of Canaan. {28:2} Arise, go to Padan-aram, to the house of Bethuel thy mother's father; and take thee a wife from thence of the daughters of Laban thy mother's brother. {28:3} And God Almighty bless thee, and make thee fruitful, and multiply thee, that thou mayest be a multitude of people; {28:4} And give thee the blessing of Abraham, to thee, and to thy seed with thee; that thou mayest inherit the land wherein thou art a stranger, which God gave unto Abraham. {28:5} And Isaac sent away Jacob: and he went to Padan-aram unto Laban, son of Bethuel the Syrian, the brother of Rebekah, Jacob's and Esau's mother. {28:6} When Esau saw that Isaac had blessed Jacob, and sent him away to Padan-aram, to take him a wife from thence; and that as he blessed him he gave him a charge, saying, Thou shalt not take a wife of the daughters of Canaan; {28:7} And that Jacob obeyed his father and his mother, and was gone to Padan-aram; {28:8} And Esau seeing that the daughters of Canaan pleased not Isaac his father; {28:9} Then went Esau unto Ishmael, and took unto the wives which he had Mahalath the daughter of Ishmael Abraham's son, the sister of Nebajoth, to be his wife. {28:10} And Jacob went out from Beer-sheba, and went toward Haran. {28:11} And he lighted upon a certain place, and tarried there all night, because the sun was set; and he took of the stones of that place, and [put] them for his pillows, and lay down in that place to sleep. {28:12} And he dreamed, and behold a ladder set up on the earth, and the top of it reached to heaven: and behold the angels of God ascending and descending on it. {28:13} And, behold, the LORD stood above it, and said, I [am] the LORD God of Abraham thy father, and the God of Isaac: the land whereon thou liest, to thee will I give it, and to thy seed; {28:14} And thy seed shall be as the dust of the earth, and thou shalt spread abroad to the west, and to the east, and to the north, and to the south: and in thee and in thy seed shall all the families of the earth be blessed. {28:15} And, behold, I [am] with thee, and will keep thee in all [places] whither thou goest, and will bring thee again into this land; for I will not leave thee, until I have done [that] which I have spoken to thee of. {28:16} And Jacob awaked out of his sleep, and he said, Surely the LORD is in this place; and I knew [it] not. {28:17} And he was afraid, and said, How dreadful [is] this place! this is none other but the house of God, and this [is] the gate of heaven. {28:18} And Jacob rose up early in the morning, and took the stone that he had put [for] his pillows, and set it up [for] a pillar, and poured oil upon the top of it. {28:19} And he called the name of that place Bethel: but the name of that city [was called] Luz at the first. {28:20} And Jacob vowed a vow, saying, If God will be with me, and will keep me in this way that I go, and will give me bread to eat, and raiment to put on, {28:21} So that I come again to my father's house in peace; then shall the LORD be my God: {28:22} And this stone, which I have set [for] a pillar, shall be God's house: and of all that thou shalt give me I will surely give the tenth unto thee. {29:1} Then Jacob went on his journey, and came into the land of the people of the east. {29:2} And he looked, and behold a well in the field, and, lo, there [were] three flocks of sheep lying by it; for out of that well they watered the flocks: and a great stone [was] upon the well's mouth. {29:3} And thither were all the flocks gathered: and they rolled the stone from the well's mouth, and watered the sheep, and put the stone again upon the well's mouth in his place. {29:4} And Jacob said unto them, My brethren, whence [be] ye? And they said, Of Haran [are] we. {29:5} And he said unto them, Know ye Laban the son of Nahor? And they said, We know [him. ]{29:6} And he said unto them, [Is] he well? And they said, [He is] well: and, behold, Rachel his daughter cometh with the sheep. {29:7} And he said, Lo, [it is] yet high day, neither [is it] time that the cattle should be gathered together: water ye the sheep, and go [and] feed [them. ]{29:8} And they said, We cannot, until all the flocks be gathered together, and [till] they roll the stone from the well's mouth; then we water the sheep. {29:9} And while he yet spake with them, Rachel came with her father's sheep: for she kept them. {29:10} And it came to pass, when Jacob saw Rachel the daughter of Laban his mother's brother, and the sheep of Laban his mother's brother, that Jacob went near, and rolled the stone from the well's mouth, and watered the flock of Laban his mother's brother. {29:11} And Jacob kissed Rachel, and lifted up his voice, and wept. {29:12} And Jacob told Rachel that he [was] her father's brother, and that he [was] Rebekah's son: and she ran and told her father. {29:13} And it came to pass, when Laban heard the tidings of Jacob his sister's son, that he ran to meet him, and embraced him, and kissed him, and brought him to his house. And he told Laban all these things. {29:14} And Laban said to him, Surely thou [art] my bone and my flesh. And he abode with him the space of a month. {29:15} And Laban said unto Jacob, Because thou [art] my brother, shouldest thou therefore serve me for nought? tell me, what [shall] thy wages [be? ]{29:16} And Laban had two daughters: the name of the elder [was] Leah, and the name of the younger [was] Rachel. {29:17} Leah [was] tender eyed; but Rachel was beautiful and well favoured. {29:18} And Jacob loved Rachel; and said, I will serve thee seven years for Rachel thy younger daughter. {29:19} And Laban said, [It is] better that I give her to thee, than that I should give her to another man: abide with me. {29:20} And Jacob served seven years for Rachel; and they seemed unto him [but] a few days, for the love he had to her. {29:21} And Jacob said unto Laban, Give [me] my wife, for my days are fulfilled, that I may go in unto her. {29:22} And Laban gathered together all the men of the place, and made a feast. {29:23} And it came to pass in the evening, that he took Leah his daughter, and brought her to him; and he went in unto her. {29:24} And Laban gave unto his daughter Leah Zilpah his maid [for] an handmaid. {29:25} And it came to pass, that in the morning, behold, it [was] Leah: and he said to Laban, What [is] this thou hast done unto me? did not I serve with thee for Rachel? wherefore then hast thou beguiled me? {29:26} And Laban said, It must not be so done in our country, to give the younger before the firstborn. {29:27} Fulfil her week, and we will give thee this also for the service which thou shalt serve with me yet seven other years. {29:28} And Jacob did so, and fulfilled her week: and he gave him Rachel his daughter to wife also. {29:29} And Laban gave to Rachel his daughter Bilhah his handmaid to be her maid. {29:30} And he went in also unto Rachel, and he loved also Rachel more than Leah, and served with him yet seven other years. {29:31} And when the LORD saw that Leah [was] hated, he opened her womb: but Rachel [was] barren. {29:32} And Leah conceived, and bare a son, and she called his name Reuben: for she said, Surely the LORD hath looked upon my affliction; now therefore my husband will love me. {29:33} And she conceived again, and bare a son; and said, Because the LORD hath heard that I [was] hated, he hath therefore given me this [son] also: and she called his name Simeon. {29:34} And she conceived again, and bare a son; and said, Now this time will my husband be joined unto me, because I have born him three sons: therefore was his name called Levi. {29:35} And she conceived again, and bare a son: and she said, Now will I praise the LORD: therefore she called his name Judah; and left bearing. {30:1} And when Rachel saw that she bare Jacob no children, Rachel envied her sister; and said unto Jacob, Give me children, or else I die. {30:2} And Jacob's anger was kindled against Rachel: and he said, [Am] I in God's stead, who hath withheld from thee the fruit of the womb? {30:3} And she said, Behold my maid Bilhah, go in unto her; and she shall bear upon my knees that I may also have children by her. {30:4} And she gave him Bilhah her handmaid to wife: and Jacob went in unto her. {30:5} And Bilhah conceived, and bare Jacob a son. {30:6} And Rachel said, God hath judged me, and hath also heard my voice, and hath given me a son: therefore called she his name Dan. {30:7} And Bilhah Rachel's maid conceived again, and bare Jacob a second son. {30:8} And Rachel said, With great wrestlings have I wrestled with my sister, and I have prevailed: and she called his name Naphtali. {30:9} When Leah saw that she had left bearing, she took Zilpah her maid, and gave her Jacob to wife. {30:10} And Zilpah Leah's maid bare Jacob a son. {30:11} And Leah said, A troop cometh: and she called his name Gad. {30:12} And Zilpah Leah's maid bare Jacob a second son. {30:13} And Leah said, Happy am I, for the daughters will call me blessed: and she called his name Asher. {30:14} And Reuben went in the days of wheat harvest, and found mandrakes in the field, and brought them unto his mother Leah. Then Rachel said to Leah, Give me, I pray thee, of thy son's mandrakes. {30:15} And she said unto her, [Is it] a small matter that thou hast taken my husband? and wouldest thou take away my son's mandrakes also? And Rachel said, Therefore he shall lie with thee to night for thy son's mandrakes. {30:16} And Jacob came out of the field in the evening, and Leah went out to meet him, and said, Thou must come in unto me; for surely I have hired thee with my son's mandrakes. And he lay with her that night. {30:17} And God hearkened unto Leah, and she conceived, and bare Jacob the fifth son. {30:18} And Leah said, God hath given me my hire, because I have given my maiden to my husband: and she called his name Issachar. {30:19} And Leah conceived again, and bare Jacob the sixth son. {30:20} And Leah said, God hath endued me [with] a good dowry; now will my husband dwell with me, because I have born him six sons: and she called his name Zebulun. {30:21} And afterwards she bare a daughter, and called her name Dinah. {30:22} And God remembered Rachel, and God hearkened to her, and opened her womb. {30:23} And she conceived, and bare a son; and said, God hath taken away my reproach: {30:24} And she called his name Joseph; and said, The LORD shall add to me another son. {30:25} And it came to pass, when Rachel had born Joseph, that Jacob said unto Laban, Send me away, that I may go unto mine own place, and to my country. {30:26} Give [me] my wives and my children, for whom I have served thee, and let me go: for thou knowest my service which I have done thee. {30:27} And Laban said unto him, I pray thee, if I have found favour in thine eyes, [tarry: for] I have learned by experience that the LORD hath blessed me for thy sake. {30:28} And he said, Appoint me thy wages, and I will give [it. ]{30:29} And he said unto him, Thou knowest how I have served thee, and how thy cattle was with me. {30:30} For [it was] little which thou hadst before I [came,] and it is [now] increased unto a multitude; and the LORD hath blessed thee since my coming: and now when shall I provide for mine own house also? {30:31} And he said, What shall I give thee? And Jacob said, Thou shalt not give me any thing: if thou wilt do this thing for me, I will again feed [and] keep thy flock: {30:32} I will pass through all thy flock to day, removing from thence all the speckled and spotted cattle, and all the brown cattle among the sheep, and the spotted and speckled among the goats: and [of such] shall be my hire. {30:33} So shall my righteousness answer for me in time to come, when it shall come for my hire before thy face: every one that [is] not speckled and spotted among the goats, and brown among the sheep, that shall be counted stolen with me. {30:34} And Laban said, Behold, I would it might be according to thy word. {30:35} And he removed that day the he goats that were ringstraked and spotted, and all the she goats that were speckled and spotted, [and] every one that had [some] white in it, and all the brown among the sheep, and gave [them] into the hand of his sons. {30:36} And he set three days journey betwixt himself and Jacob: and Jacob fed the rest of Laban's flocks. {30:37} And Jacob took him rods of green poplar, and of the hazel and chesnut tree; and pilled white strakes in them, and made the white appear which [was] in the rods. {30:38} And he set the rods which he had pilled before the flocks in the gutters in the watering troughs when the flocks came to drink, that they should conceive when they came to drink. {30:39} And the flocks conceived before the rods, and brought forth cattle ringstraked, speckled, and spotted. {30:40} And Jacob did separate the lambs, and set the faces of the flocks toward the ringstraked, and all the brown in the flock of Laban; and he put his own flocks by themselves, and put them not unto Laban's cattle. {30:41} And it came to pass, whensoever the stronger cattle did conceive, that Jacob laid the rods before the eyes of the cattle in the gutters, that they might conceive among the rods. {30:42} But when the cattle were feeble, he put [them] not in: so the feebler were Laban's, and the stronger Jacob's. {30:43} And the man increased exceedingly, and had much cattle, and maidservants, and menservants, and camels, and asses. {31:1} And he heard the words of Laban's sons, saying, Jacob hath taken away all that [was] our father's; and of [that] which [was] our father's hath he gotten all this glory. {31:2} And Jacob beheld the countenance of Laban, and, behold, it [was] not toward him as before. {31:3} And the LORD said unto Jacob, Return unto the land of thy fathers, and to thy kindred; and I will be with thee. {31:4} And Jacob sent and called Rachel and Leah to the field unto his flock, {31:5} And said unto them, I see your father's countenance, that it [is] not toward me as before; but the God of my father hath been with me. {31:6} And ye know that with all my power I have served your father. {31:7} And your father hath deceived me, and changed my wages ten times; but God suffered him not to hurt me. {31:8} If he said thus, The speckled shall be thy wages; then all the cattle bare speckled: and if he said thus, The ringstraked shall be thy hire; then bare all the cattle ringstraked. {31:9} Thus God hath taken away the cattle of your father, and given [them] to me. {31:10} And it came to pass at the time that the cattle conceived, that I lifted up mine eyes, and saw in a dream, and, behold, the rams which leaped upon the cattle [were] ringstraked, speckled, and grisled. {31:11} And the angel of God spake unto me in a dream, [saying,] Jacob: And I said, Here [am] I. {31:12} And he said, Lift up now thine eyes, and see, all the rams which leap upon the cattle [are] ringstraked, speckled, and grisled: for I have seen all that Laban doeth unto thee. {31:13} I [am] the God of Bethel, where thou anointedst the pillar, [and] where thou vowedst a vow unto me: now arise, get thee out from this land, and return unto the land of thy kindred. {31:14} And Rachel and Leah answered and said unto him, [Is there] yet any portion or inheritance for us in our father's house? {31:15} Are we not counted of him strangers? for he hath sold us, and hath quite devoured also our money. {31:16} For all the riches which God hath taken from our father, that [is] ours, and our children's: now then, whatsoever God hath said unto thee, do. {31:17} Then Jacob rose up, and set his sons and his wives upon camels; {31:18} And he carried away all his cattle, and all his goods which he had gotten, the cattle of his getting, which he had gotten in Padan-aram, for to go to Isaac his father in the land of Canaan. {31:19} And Laban went to shear his sheep: and Rachel had stolen the images that [were] her father's. {31:20} And Jacob stole away unawares to Laban the Syrian, in that he told him not that he fled. {31:21} So he fled with all that he had; and he rose up, and passed over the river, and set his face [toward] the mount Gilead. {31:22} And it was told Laban on the third day that Jacob was fled. {31:23} And he took his brethren with him, and pursued after him seven days' journey; and they overtook him in the mount Gilead. {31:24} And God came to Laban the Syrian in a dream by night, and said unto him, Take heed that thou speak not to Jacob either good or bad. {31:25} Then Laban overtook Jacob. Now Jacob had pitched his tent in the mount: and Laban with his brethren pitched in the mount of Gilead. {31:26} And Laban said to Jacob, What hast thou done, that thou hast stolen away unawares to me, and carried away my daughters, as captives [taken] with the sword? {31:27} Wherefore didst thou flee away secretly, and steal away from me; and didst not tell me, that I might have sent thee away with mirth, and with songs, with tabret, and with harp? {31:28} And hast not suffered me to kiss my sons and my daughters? thou hast now done foolishly in so doing. {31:29} It is in the power of my hand to do you hurt: but the God of your father spake unto me yesternight, saying, Take thou heed that thou speak not to Jacob either good or bad. {31:30} And now, [though] thou wouldest needs be gone, because thou sore longedst after thy father's house, [yet] wherefore hast thou stolen my gods? {31:31} And Jacob answered and said to Laban, Because I was afraid: for I said, Peradventure thou wouldest take by force thy daughters from me. {31:32} With whomsoever thou findest thy gods, let him not live: before our brethren discern thou what [is] thine with me, and take [it] to thee. For Jacob knew not that Rachel had stolen them. {31:33} And Laban went into Jacob's tent, and into Leah's tent, and into the two maidservants' tents; but he found [them] not. Then went he out of Leah's tent, and entered into Rachel's tent. {31:34} Now Rachel had taken the images, and put them in the camel's furniture, and sat upon them. And Laban searched all the tent, but found [them] not. {31:35} And she said to her father, Let it not displease my lord that I cannot rise up before thee; for the custom of women is upon me. And he searched, but found not the images. {31:36} And Jacob was wroth, and chode with Laban: and Jacob answered and said to Laban, What [is] my trespass? what [is] my sin, that thou hast so hotly pursued after me? {31:37} Whereas thou hast searched all my stuff, what hast thou found of all thy household stuff? set [it] here before my brethren and thy brethren, that they may judge betwixt us both. {31:38} This twenty years [have] I [been] with thee; thy ewes and thy she goats have not cast their young, and the rams of thy flock have I not eaten. {31:39} That which was torn [of beasts] I brought not unto thee; I bare the loss of it; of my hand didst thou require it, [whether] stolen by day, or stolen by night. {31:40} [Thus] I was; in the day the drought consumed me, and the frost by night; and my sleep departed from mine eyes. {31:41} Thus have I been twenty years in thy house; I served thee fourteen years for thy two daughters, and six years for thy cattle: and thou hast changed my wages ten times. {31:42} Except the God of my father, the God of Abraham, and the fear of Isaac, had been with me, surely thou hadst sent me away now empty. God hath seen mine affliction and the labour of my hands, and rebuked [thee] yesternight. {31:43} And Laban answered and said unto Jacob, [These] daughters [are] my daughters, and [these] children [are] my children, and [these] cattle [are] my cattle, and all that thou seest [is] mine: and what can I do this day unto these my daughters, or unto their children which they have born? {31:44} Now therefore come thou, let us make a covenant, I and thou; and let it be for a witness between me and thee. {31:45} And Jacob took a stone, and set it up [for] a pillar. {31:46} And Jacob said unto his brethren, Gather stones; and they took stones, and made an heap: and they did eat there upon the heap. {31:47} And Laban called it Jegar-sahadutha: but Jacob called it Galeed. {31:48} And Laban said, This heap [is] a witness between me and thee this day. Therefore was the name of it called Galeed; {31:49} And Mizpah; for he said, The LORD watch between me and thee, when we are absent one from another. {31:50} If thou shalt afflict my daughters, or if thou shalt take [other] wives beside my daughters, no man [is] with us; see, God [is] witness betwixt me and thee. {31:51} And Laban said to Jacob, Behold this heap, and behold [this] pillar, which I have cast betwixt me and thee; {31:52} This heap [be] witness, and [this] pillar [be] witness, that I will not pass over this heap to thee, and that thou shalt not pass over this heap and this pillar unto me, for harm. {31:53} The God of Abraham, and the God of Nahor, the God of their father, judge betwixt us. And Jacob sware by the fear of his father Isaac. {31:54} Then Jacob offered sacrifice upon the mount, and called his brethren to eat bread: and they did eat bread, and tarried all night in the mount. {31:55} And early in the morning Laban rose up, and kissed his sons and his daughters, and blessed them: and Laban departed, and returned unto his place. {32:1} And Jacob went on his way, and the angels of God met him. {32:2} And when Jacob saw them, he said, This [is] God's host: and he called the name of that place Mahanaim. {32:3} And Jacob sent messengers before him to Esau his brother unto the land of Seir, the country of Edom. {32:4} And he commanded them, saying, Thus shall ye speak unto my lord Esau; Thy servant Jacob saith thus, I have sojourned with Laban, and stayed there until now: {32:5} And I have oxen, and asses, flocks, and menservants, and womenservants: and I have sent to tell my lord, that I may find grace in thy sight. {32:6} And the messengers returned to Jacob, saying, We came to thy brother Esau, and also he cometh to meet thee, and four hundred men with him. {32:7} Then Jacob was greatly afraid and distressed: and he divided the people that [was] with him, and the flocks, and herds, and the camels, into two bands; {32:8} And said, If Esau come to the one company, and smite it, then the other company which is left shall escape. {32:9} And Jacob said, O God of my father Abraham, and God of my father Isaac, the LORD which saidst unto me, Return unto thy country, and to thy kindred, and I will deal well with thee: {32:10} I am not worthy of the least of all the mercies, and of all the truth, which thou hast shewed unto thy servant; for with my staff I passed over this Jordan; and now I am become two bands. {32:11} Deliver me, I pray thee, from the hand of my brother, from the hand of Esau: for I fear him, lest he will come and smite me, [and] the mother with the children. {32:12} And thou saidst, I will surely do thee good, and make thy seed as the sand of the sea, which cannot be numbered for multitude. {32:13} And he lodged there that same night; and took of that which came to his hand a present for Esau his brother; {32:14} Two hundred she goats, and twenty he goats, two hundred ewes, and twenty rams, {32:15} Thirty milch camels with their colts, forty kine, and ten bulls, twenty she asses, and ten foals. {32:16} And he delivered [them] into the hand of his servants, every drove by themselves; and said unto his servants, Pass over before me, and put a space betwixt drove and drove. {32:17} And he commanded the foremost, saying, When Esau my brother meeteth thee, and asketh thee, saying, Whose [art] thou? and whither goest thou? and whose [are] these before thee? {32:18} Then thou shalt say, [They be] thy servant Jacob's; it [is] a present sent unto my lord Esau: and, behold, also he [is] behind us. {32:19} And so commanded he the second, and the third, and all that followed the droves, saying, On this manner shall ye speak unto Esau, when ye find him. {32:20} And say ye moreover, Behold, thy servant Jacob [is] behind us. For he said, I will appease him with the present that goeth before me, and afterward I will see his face; peradventure he will accept of me. {32:21} So went the present over before him: and himself lodged that night in the company. {32:22} And he rose up that night, and took his two wives, and his two womenservants, and his eleven sons, and passed over the ford Jabbok. {32:23} And he took them, and sent them over the brook, and sent over that he had. {32:24} And Jacob was left alone; and there wrestled a man with him until the breaking of the day. {32:25} And when he saw that he prevailed not against him, he touched the hollow of his thigh; and the hollow of Jacob's thigh was out of joint, as he wrestled with him. {32:26} And he said, Let me go, for the day breaketh. And he said, I will not let thee go, except thou bless me. {32:27} And he said unto him, What [is] thy name? And he said, Jacob. {32:28} And he said, Thy name shall be called no more Jacob, but Israel: for as a prince hast thou power with God and with men, and hast prevailed. {32:29} And Jacob asked [him,] and said, Tell [me,] I pray thee, thy name. And he said, Wherefore [is] it [that] thou dost ask after my name? And he blessed him there. {32:30} And Jacob called the name of the place Peniel: for I have seen God face to face, and my life is preserved. {32:31} And as he passed over Penuel the sun rose upon him, and he halted upon his thigh. {32:32} Therefore the children of Israel eat not [of] the sinew which shrank, which [is] upon the hollow of the thigh, unto this day: because he touched the hollow of Jacob's thigh in the sinew that shrank. {33:1} And Jacob lifted up his eyes, and looked, and, behold, Esau came, and with him four hundred men. And he divided the children unto Leah, and unto Rachel, and unto the two handmaids. {33:2} And he put the handmaids and their children foremost, and Leah and her children after, and Rachel and Joseph hindermost. {33:3} And he passed over before them, and bowed himself to the ground seven times, until he came near to his brother. {33:4} And Esau ran to meet him, and embraced him, and fell on his neck, and kissed him: and they wept. {33:5} And he lifted up his eyes, and saw the women and the children; and said, Who [are] those with thee? And he said, The children which God hath graciously given thy servant. {33:6} Then the handmaidens came near, they and their children, and they bowed themselves. {33:7} And Leah also with her children came near, and bowed themselves: and after came Joseph near and Rachel, and they bowed themselves. {33:8} And he said, What [meanest] thou by all this drove which I met? And he said, [These are] to find grace in the sight of my lord. {33:9} And Esau said, I have enough, my brother; keep that thou hast unto thyself. {33:10} And Jacob said, Nay, I pray thee, if now I have found grace in thy sight, then receive my present at my hand: for therefore I have seen thy face, as though I had seen the face of God, and thou wast pleased with me. {33:11} Take, I pray thee, my blessing that is brought to thee; because God hath dealt graciously with me, and because I have enough. And he urged him, and he took [it. ]{33:12} And he said, Let us take our journey, and let us go, and I will go before thee. {33:13} And he said unto him, My lord knoweth that the children [are] tender, and the flocks and herds with young [are] with me: and if men should overdrive them one day, all the flock will die. {33:14} Let my lord, I pray thee, pass over before his servant: and I will lead on softly, according as the cattle that goeth before me and the children be able to endure, until I come unto my lord unto Seir. {33:15} And Esau said, Let me now leave with thee [some] of the folk that [are] with me. And he said, What needeth it? let me find grace in the sight of my lord. {33:16} So Esau returned that day on his way unto Seir. {33:17} And Jacob journeyed to Succoth, and built him an house, and made booths for his cattle: therefore the name of the place is called Succoth. {33:18} And Jacob came to Shalem, a city of Shechem, which [is] in the land of Canaan, when he came from Padan-aram; and pitched his tent before the city. {33:19} And he bought a parcel of a field, where he had spread his tent, at the hand of the children of Hamor, Shechem's father, for an hundred pieces of money. {33:20} And he erected there an altar, and called it El-elohe-Israel. {34:1} And Dinah the daughter of Leah, which she bare unto Jacob, went out to see the daughters of the land. {34:2} And when Shechem the son of Hamor the Hivite, prince of the country, saw her, he took her, and lay with her, and defiled her. {34:3} And his soul clave unto Dinah the daughter of Jacob, and he loved the damsel, and spake kindly unto the damsel. {34:4} And Shechem spake unto his father Hamor, saying, Get me this damsel to wife. {34:5} And Jacob heard that he had defiled Dinah his daughter: now his sons were with his cattle in the field: and Jacob held his peace until they were come. {34:6} And Hamor the father of Shechem went out unto Jacob to commune with him. {34:7} And the sons of Jacob came out of the field when they heard [it:] and the men were grieved, and they were very wroth, because he had wrought folly in Israel in lying with Jacob's daughter; which thing ought not to be done. {34:8} And Hamor communed with them, saying, The soul of my son Shechem longeth for your daughter: I pray you give her him to wife. {34:9} And make ye marriages with us, [and] give your daughters unto us, and take our daughters unto you. {34:10} And ye shall dwell with us: and the land shall be before you; dwell and trade ye therein, and get you possessions therein. {34:11} And Shechem said unto her father and unto her brethren, Let me find grace in your eyes, and what ye shall say unto me I will give. {34:12} Ask me never so much dowry and gift, and I will give according as ye shall say unto me: but give me the damsel to wife. {34:13} And the sons of Jacob answered Shechem and Hamor his father deceitfully, and said, because he had defiled Dinah their sister: {34:14} And they said unto them, We cannot do this thing, to give our sister to one that is uncircumcised; for that [were] a reproach unto us: {34:15} But in this will we consent unto you: If ye will be as we [be,] that every male of you be circumcised; {34:16} Then will we give our daughters unto you, and we will take your daughters to us, and we will dwell with you, and we will become one people. {34:17} But if ye will not hearken unto us, to be circumcised; then will we take our daughter, and we will be gone. {34:18} And their words pleased Hamor, and Shechem Hamor's son. {34:19} And the young man deferred not to do the thing, because he had delight in Jacob's daughter: and he [was] more honourable than all the house of his father. {34:20} And Hamor and Shechem his son came unto the gate of their city, and communed with the men of their city, saying, {34:21} These men [are] peaceable with us; therefore let them dwell in the land, and trade therein; for the land, behold, [it is] large enough for them; let us take their daughters to us for wives, and let us give them our daughters. {34:22} Only herein will the men consent unto us for to dwell with us, to be one people, if every male among us be circumcised, as they [are] circumcised. {34:23} [Shall] not their cattle and their substance and every beast of theirs [be] ours? only let us consent unto them, and they will dwell with us. {34:24} And unto Hamor and unto Shechem his son hearkened all that went out of the gate of his city; and every male was circumcised, all that went out of the gate of his city. {34:25} And it came to pass on the third day, when they were sore, that two of the sons of Jacob, Simeon and Levi, Dinah's brethren, took each man his sword, and came upon the city boldly, and slew all the males. {34:26} And they slew Hamor and Shechem his son with the edge of the sword, and took Dinah out of Shechem's house, and went out. {34:27} The sons of Jacob came upon the slain, and spoiled the city, because they had defiled their sister. {34:28} They took their sheep, and their oxen, and their asses, and that which [was] in the city, and that which [was] in the field, {34:29} And all their wealth, and all their little ones, and their wives took they captive, and spoiled even all that [was] in the house. {34:30} And Jacob said to Simeon and Levi, Ye have troubled me to make me to stink among the inhabitants of the land, among the Canaanites and the Perizzites: and I [being] few in number, they shall gather themselves together against me, and slay me; and I shall be destroyed, I and my house. {34:31} And they said, Should he deal with our sister as with an harlot? {35:1} And God said unto Jacob, Arise, go up to Bethel, and dwell there: and make there an altar unto God, that appeared unto thee when thou fleddest from the face of Esau thy brother. {35:2} Then Jacob said unto his household, and to all that [were] with him, Put away the strange gods that [are] among you, and be clean, and change your garments: {35:3} And let us arise, and go up to Bethel; and I will make there an altar unto God, who answered me in the day of my distress, and was with me in the way which I went. {35:4} And they gave unto Jacob all the strange gods which [were] in their hand, and [all their] earrings which [were] in their ears; and Jacob hid them under the oak which [was] by Shechem. {35:5} And they journeyed: and the terror of God was upon the cities that [were] round about them, and they did not pursue after the sons of Jacob. {35:6} So Jacob came to Luz, which [is] in the land of Canaan, that [is,] Bethel, he and all the people that [were] with him. {35:7} And he built there an altar, and called the place El-beth-el: because there God appeared unto him, when he fled from the face of his brother. {35:8} But Deborah Rebekah's nurse died, and she was buried beneath Bethel under an oak: and the name of it was called Allon-bachuth. {35:9} And God appeared unto Jacob again, when he came out of Padan-aram, and blessed him. {35:10} And God said unto him, Thy name [is] Jacob: thy name shall not be called any more Jacob, but Israel shall be thy name: and he called his name Israel. {35:11} And God said unto him, I [am] God Almighty: be fruitful and multiply; a nation and a company of nations shall be of thee, and kings shall come out of thy loins; {35:12} And the land which I gave Abraham and Isaac, to thee I will give it, and to thy seed after thee will I give the land. {35:13} And God went up from him in the place where he talked with him. {35:14} And Jacob set up a pillar in the place where he talked with him, [even] a pillar of stone: and he poured a drink offering thereon, and he poured oil thereon. {35:15} And Jacob called the name of the place where God spake with him, Bethel. {35:16} And they journeyed from Bethel; and there was but a little way to come to Ephrath: and Rachel travailed, and she had hard labour. {35:17} And it came to pass, when she was in hard labour, that the midwife said unto her, Fear not; thou shalt have this son also. {35:18} And it came to pass, as her soul was in departing, (for she died) that she called his name Ben-oni: but his father called him Benjamin. {35:19} And Rachel died, and was buried in the way to Ephrath, which [is] Bethlehem. {35:20} And Jacob set a pillar upon her grave: that [is] the pillar of Rachel's grave unto this day. {35:21} And Israel journeyed, and spread his tent beyond the tower of Edar. {35:22} And it came to pass, when Israel dwelt in that land, that Reuben went and lay with Bilhah his father's concubine: and Israel heard [it.] Now the sons of Jacob were twelve: {35:23} The sons of Leah; Reuben, Jacob's firstborn, and Simeon, and Levi, and Judah, and Issachar, and Zebulun: {35:24} The sons of Rachel; Joseph, and Benjamin: {35:25} And the sons of Bilhah, Rachel's handmaid; Dan, and Naphtali: {35:26} And the sons of Zilpah, Leah's handmaid; Gad, and Asher: these [are] the sons of Jacob, which were born to him in Padan-aram. {35:27} And Jacob came unto Isaac his father unto Mamre, unto the city of Arbah, which [is] Hebron, where Abraham and Isaac sojourned. {35:28} And the days of Isaac were an hundred and fourscore years. {35:29} And Isaac gave up the ghost, and died, and was gathered unto his people, [being] old and full of days: and his sons Esau and Jacob buried him. {36:1} Now these [are] the generations of Esau, who [is] Edom. {36:2} Esau took his wives of the daughters of Canaan; Adah the daughter of Elon the Hittite, and Aholibamah the daughter of Anah the daughter of Zibeon the Hivite; {36:3} And Bashemath Ishmael's daughter, sister of Nebajoth. {36:4} And Adah bare to Esau Eliphaz; and Bashemath bare Reuel; {36:5} And Aholibamah bare Jeush, and Jaalam, and Korah: these [are] the sons of Esau, which were born unto him in the land of Canaan. {36:6} And Esau took his wives, and his sons, and his daughters, and all the persons of his house, and his cattle, and all his beasts, and all his substance, which he had got in the land of Canaan; and went into the country from the face of his brother Jacob. {36:7} For their riches were more than that they might dwell together; and the land wherein they were strangers could not bear them because of their cattle. {36:8} Thus dwelt Esau in mount Seir: Esau [is] Edom. {36:9} And these [are] the generations of Esau the father of the Edomites in mount Seir: {36:10} These [are] the names of Esau's sons; Eliphaz the son of Adah the wife of Esau, Reuel the son of Bashemath the wife of Esau. {36:11} And the sons of Eliphaz were Teman, Omar, Zepho, and Gatam, and Kenaz. {36:12} And Timna was concubine to Eliphaz Esau's son; and she bare to Eliphaz Amalek: these [were] the sons of Adah Esau's wife. {36:13} And these [are] the sons of Reuel; Nahath, and Zerah, Shammah, and Mizzah: these were the sons of Bashemath Esau's wife. {36:14} And these were the sons of Aholibamah, the daughter of Anah the daughter of Zibeon, Esau's wife: and she bare to Esau Jeush, and Jaalam, and Korah. {36:15} These [were] dukes of the sons of Esau: the sons of Eliphaz the firstborn [son] of Esau; duke Teman, duke Omar, duke Zepho, duke Kenaz, {36:16} Duke Korah, duke Gatam, [and] duke Amalek: these [are] the dukes [that came] of Eliphaz in the land of Edom; these [were] the sons of Adah. {36:17} And these [are] the sons of Reuel Esau's son; duke Nahath, duke Zerah, duke Shammah, duke Mizzah: these [are] the dukes [that came] of Reuel in the land of Edom; these [are] the sons of Bashemath Esau's wife. {36:18} And these [are] the sons of Aholibamah Esau's wife; duke Jeush, duke Jaalam, duke Korah: these [were] the dukes [that came] of Aholibamah the daughter of Anah, Esau's wife. {36:19} These [are] the sons of Esau, who [is] Edom, and these [are] their dukes. {36:20} These [are] the sons of Seir the Horite, who inhabited the land; Lotan, and Shobal, and Zibeon, and Anah, {36:21} And Dishon, and Ezer, and Dishan: these [are] the dukes of the Horites, the children of Seir in the land of Edom. {36:22} And the children of Lotan were Hori and Hemam; and Lotan's sister [was] Timna. {36:23} And the children of Shobal [were] these; Alvan, and Manahath, and Ebal, Shepho, and Onam. {36:24} And these [are] the children of Zibeon; both Ajah, and Anah: this [was that] Anah that found the mules in the wilderness, as he fed the asses of Zibeon his father. {36:25} And the children of Anah [were] these; Dishon, and Aholibamah the daughter of Anah. {36:26} And these [are] the children of Dishon; Hemdan, and Eshban, and Ithran, and Cheran. {36:27} The children of Ezer [are] these; Bilhan, and Zaavan, and Akan. {36:28} The children of Dishan [are] these: Uz, and Aran. {36:29} These [are] the dukes [that came] of the Horites; duke Lotan, duke Shobal, duke Zibeon, duke Anah, {36:30} Duke Dishon, duke Ezer, duke Dishan: these [are] the dukes [that came] of Hori, among their dukes in the land of Seir. {36:31} And these [are] the kings that reigned in the land of Edom, before there reigned any king over the children of Israel. {36:32} And Bela the son of Beor reigned in Edom: and the name of his city [was] Dinhabah. {36:33} And Bela died, and Jobab the son of Zerah of Bozrah reigned in his stead. {36:34} And Jobab died, and Husham of the land of Temani reigned in his stead. {36:35} And Husham died, and Hadad the son of Bedad, who smote Midian in the field of Moab, reigned in his stead: and the name of his city [was] Avith. {36:36} And Hadad died, and Samlah of Masrekah reigned in his stead. {36:37} And Samlah died, and Saul of Rehoboth [by] the river reigned in his stead. {36:38} And Saul died, and Baal-hanan the son of Achbor reigned in his stead. {36:39} And Baal-hanan the son of Achbor died, and Hadar reigned in his stead: and the name of his city [was] Pau; and his wife's name [was] Mehetabel, the daughter of Matred, the daughter of Mezahab. {36:40} And these [are] the names of the dukes [that came] of Esau, according to their families, after their places, by their names; duke Timnah, duke Alvah, duke Jetheth, {36:41} Duke Aholibamah, duke Elah, duke Pinon, {36:42} Duke Kenaz, duke Teman, duke Mibzar, {36:43} Duke Magdiel, duke Iram: these [be] the dukes of Edom, according to their habitations in the land of their possession: he [is] Esau the father of the Edomites. {37:1} And Jacob dwelt in the land wherein his father was a stranger, in the land of Canaan. {37:2} These [are] the generations of Jacob. Joseph, [being] seventeen years old, was feeding the flock with his brethren; and the lad [was] with the sons of Bilhah, and with the sons of Zilpah, his father's wives: and Joseph brought unto his father their evil report. {37:3} Now Israel loved Joseph more than all his children, because he [was] the son of his old age: and he made him a coat of [many] colours. {37:4} And when his brethren saw that their father loved him more than all his brethren, they hated him, and could not speak peaceably unto him. {37:5} And Joseph dreamed a dream, and he told [it] his brethren: and they hated him yet the more. {37:6} And he said unto them, Hear, I pray you, this dream which I have dreamed: {37:7} For, behold, we [were] binding sheaves in the field, and, lo, my sheaf arose, and also stood upright; and, behold, your sheaves stood round about, and made obeisance to my sheaf. {37:8} And his brethren said to him, Shalt thou indeed reign over us? or shalt thou indeed have dominion over us? And they hated him yet the more for his dreams, and for his words. {37:9} And he dreamed yet another dream, and told it his brethren, and said, Behold, I have dreamed a dream more; and, behold, the sun and the moon and the eleven stars made obeisance to me. {37:10} And he told [it] to his father, and to his brethren: and his father rebuked him, and said unto him, What [is] this dream that thou hast dreamed? Shall I and thy mother and thy brethren indeed come to bow down ourselves to thee to the earth? {37:11} And his brethren envied him; but his father observed the saying. {37:12} And his brethren went to feed their father's flock in Shechem. {37:13} And Israel said unto Joseph, Do not thy brethren feed [the flock] in Shechem? come, and I will send thee unto them. And he said to him, Here [am] I. {37:14} And he said to him, Go, I pray thee, see whether it be well with thy brethren, and well with the flocks; and bring me word again. So he sent him out of the vale of Hebron, and he came to Shechem. {37:15} And a certain man found him, and, behold, [he was] wandering in the field: and the man asked him, saying, What seekest thou? {37:16} And he said, I seek my brethren: tell me, I pray thee, where they feed [their flocks. ]{37:17} And the man said, They are departed hence; for I heard them say, Let us go to Dothan. And Joseph went after his brethren, and found them in Dothan. {37:18} And when they saw him afar off, even before he came near unto them, they conspired against him to slay him. {37:19} And they said one to another, Behold, this dreamer cometh. {37:20} Come now therefore, and let us slay him, and cast him into some pit, and we will say, Some evil beast hath devoured him: and we shall see what will become of his dreams. {37:21} And Reuben heard [it,] and he delivered him out of their hands; and said, Let us not kill him. {37:22} And Reuben said unto them, Shed no blood, [but] cast him into this pit that is in the wilderness, and lay no hand upon him; that he might rid him out of their hands, to deliver him to his father again. {37:23} And it came to pass, when Joseph was come unto his brethren, that they stript Joseph out of his coat, [his] coat of [many] colours that [was] on him; {37:24} And they took him, and cast him into a pit: and the pit [was] empty, [there was] no water in it. {37:25} And they sat down to eat bread: and they lifted up their eyes and looked, and, behold, a company of Ishmeelites came from Gilead with their camels bearing spicery and balm and myrrh, going to carry [it] down to Egypt. {37:26} And Judah said unto his brethren, What profit [is it] if we slay our brother, and conceal his blood? {37:27} Come, and let us sell him to the Ishmeelites, and let not our hand be upon him; for he [is] our brother [and] our flesh. And his brethren were content. {37:28} Then there passed by Midianites merchantmen; and they drew and lifted up Joseph out of the pit, and sold Joseph to the Ishmeelites for twenty [pieces] of silver: and they brought Joseph into Egypt. {37:29} And Reuben returned unto the pit; and, behold, Joseph [was] not in the pit; and he rent his clothes. {37:30} And he returned unto his brethren, and said, The child [is] not; and I, whither shall I go? {37:31} And they took Joseph's coat, and killed a kid of the goats, and dipped the coat in the blood; {37:32} And they sent the coat of [many] colours, and they brought [it] to their father; and said, This have we found: know now whether it [be] thy son's coat or no. {37:33} And he knew it, and said, [It is] my son's coat; an evil beast hath devoured him; Joseph is without doubt rent in pieces. {37:34} And Jacob rent his clothes, and put sackcloth upon his loins, and mourned for his son many days. {37:35} And all his sons and all his daughters rose up to comfort him; but he refused to be comforted; and he said, For I will go down into the grave unto my son mourning. Thus his father wept for him. {37:36} And the Midianites sold him into Egypt unto Potiphar, an officer of Pharaoh's, [and] captain of the guard. {38:1} And it came to pass at that time, that Judah went down from his brethren, and turned in to a certain Adullamite, whose name [was] Hirah. {38:2} And Judah saw there a daughter of a certain Canaanite, whose name [was] Shuah; and he took her, and went in unto her. {38:3} And she conceived, and bare a son; and he called his name Er. {38:4} And she conceived again, and bare a son; and she called his name Onan. {38:5} And she yet again conceived, and bare a son; and called his name Shelah: and he was at Chezib, when she bare him. {38:6} And Judah took a wife for Er his firstborn, whose name [was] Tamar. {38:7} And Er, Judah's firstborn, was wicked in the sight of the LORD; and the LORD slew him. {38:8} And Judah said unto Onan, Go in unto thy brother's wife, and marry her, and raise up seed to thy brother. {38:9} And Onan knew that the seed should not be his; and it came to pass, when he went in unto his brother's wife, that he spilled [it] on the ground, lest that he should give seed to his brother. {38:10} And the thing which he did displeased the LORD: wherefore he slew him also. {38:11} Then said Judah to Tamar his daughter in law, Remain a widow at thy father's house, till Shelah my son be grown: for he said, Lest peradventure he die also, as his brethren [did.] And Tamar went and dwelt in her father's house. {38:12} And in process of time the daughter of Shuah Judah's wife died; and Judah was comforted, and went up unto his sheepshearers to Timnath, he and his friend Hirah the Adullamite. {38:13} And it was told Tamar, saying, Behold thy father in law goeth up to Timnath to shear his sheep. {38:14} And she put her widow's garments off from her, and covered her with a vail, and wrapped herself, and sat in an open place, which [is] by the way to Timnath; for she saw that Shelah was grown, and she was not given unto him to wife. {38:15} When Judah saw her, he thought her [to be] an harlot; because she had covered her face. {38:16} And he turned unto her by the way, and said, Go to, I pray thee, let me come in unto thee; (for he knew not that she [was] his daughter in law.) And she said, What wilt thou give me, that thou mayest come in unto me? {38:17} And he said, I will send [thee] a kid from the flock. And she said, Wilt thou give [me] a pledge, till thou send [it? ]{38:18} And he said, What pledge shall I give thee? And she said, Thy signet, and thy bracelets, and thy staff that [is] in thine hand. And he gave [it] her, and came in unto her, and she conceived by him. {38:19} And she arose, and went away, and laid by her vail from her, and put on the garments of her widowhood. {38:20} And Judah sent the kid by the hand of his friend the Adullamite, to receive [his] pledge from the woman's hand: but he found her not. {38:21} Then he asked the men of that place, saying, Where [is] the harlot, that [was] openly by the way side? And they said, There was no harlot in this [place. ]{38:22} And he returned to Judah, and said, I cannot find her; and also the men of the place said, [that] there was no harlot in this [place. ]{38:23} And Judah said, Let her take [it] to her, lest we be shamed: behold, I sent this kid, and thou hast not found her. {38:24} And it came to pass about three months after, that it was told Judah, saying, Tamar thy daughter in law hath played the harlot; and also, behold, she [is] with child by whoredom. And Judah said, Bring her forth, and let her be burnt. {38:25} When she [was] brought forth, she sent to her father in law, saying, By the man, whose these [are, am] I with child: and she said, Discern, I pray thee, whose [are] these, the signet, and bracelets, and staff. {38:26} And Judah acknowledged [them,] and said, She hath been more righteous than I; because that I gave her not to Shelah my son. And he knew her again no more. {38:27} And it came to pass in the time of her travail, that, behold, twins [were] in her womb. {38:28} And it came to pass, when she travailed, that [the one] put out [his] hand: and the midwife took and bound upon his hand a scarlet thread, saying, This came out first, {38:29} And it came to pass, as he drew back his hand, that, behold, his brother came out: and she said, How hast thou broken forth? [this] breach [be] upon thee: therefore his name was called Pharez. {38:30} And afterward came out his brother, that had the scarlet thread upon his hand: and his name was called Zarah. {39:1} And Joseph was brought down to Egypt; and Potiphar, an officer of Pharaoh, captain of the guard, an Egyptian, bought him of the hands of the Ishmeelites, which had brought him down thither. {39:2} And the LORD was with Joseph, and he was a prosperous man; and he was in the house of his master the Egyptian. {39:3} And his master saw that the LORD [was] with him, and that the LORD made all [that] he did to prosper in his hand. {39:4} And Joseph found grace in his sight, and he served him: and he made him overseer over his house, and all that he had he put into his hand. {39:5} And it came to pass from the time [that] he had made him overseer in his house, and over all that he had, that the LORD blessed the Egyptian's house for Joseph's sake; and the blessing of the LORD was upon all that he had in the house, and in the field. {39:6} And he left all that he had in Joseph's hand; and he knew not ought he had, save the bread which he did eat. And Joseph was [a] goodly [person,] and well favoured. {39:7} And it came to pass after these things, that his master's wife cast her eyes upon Joseph; and she said, Lie with me. {39:8} But he refused, and said unto his master's wife, Behold, my master wotteth not what [is] with me in the house, and he hath committed all that he hath to my hand; {39:9} [There is] none greater in this house than I; neither hath he kept back any thing from me but thee, because thou [art] his wife: how then can I do this great wickedness, and sin against God? {39:10} And it came to pass, as she spake to Joseph day by day, that he hearkened not unto her, to lie by her, [or] to be with her. {39:11} And it came to pass about this time, that [Joseph] went into the house to do his business; and [there was] none of the men of the house there within. {39:12} And she caught him by his garment, saying, Lie with me: and he left his garment in her hand, and fled, and got him out. {39:13} And it came to pass, when she saw that he had left his garment in her hand, and was fled forth, {39:14} That she called unto the men of her house, and spake unto them, saying, See, he hath brought in an Hebrew unto us to mock us; he came in unto me to lie with me, and I cried with a loud voice: {39:15} And it came to pass, when he heard that I lifted up my voice and cried, that he left his garment with me, and fled, and got him out. {39:16} And she laid up his garment by her, until his lord came home. {39:17} And she spake unto him according to these words, saying, The Hebrew servant, which thou hast brought unto us, came in unto me to mock me: {39:18} And it came to pass, as I lifted up my voice and cried, that he left his garment with me, and fled out. {39:19} And it came to pass, when his master heard the words of his wife, which she spake unto him, saying, After this manner did thy servant to me; that his wrath was kindled. {39:20} And Joseph's master took him, and put him into the prison, a place where the king's prisoners [were] bound: and he was there in the prison. {39:21} But the LORD was with Joseph, and shewed him mercy, and gave him favour in the sight of the keeper of the prison. {39:22} And the keeper of the prison committed to Joseph's hand all the prisoners that [were] in the prison; and whatsoever they did there, he was the doer [of it. ]{39:23} The keeper of the prison looked not to any thing [that was] under his hand; because the LORD was with him, and [that] which he did, the LORD made [it] to prosper. {40:1} And it came to pass after these things, [that] the butler of the king of Egypt and [his] baker had offended their lord the king of Egypt. {40:2} And Pharaoh was wroth against two [of] his officers, against the chief of the butlers, and against the chief of the bakers. {40:3} And he put them in ward in the house of the captain of the guard, into the prison, the place where Joseph [was] bound. {40:4} And the captain of the guard charged Joseph with them, and he served them: and they continued a season in ward. {40:5} And they dreamed a dream both of them, each man his dream in one night, each man according to the interpretation of his dream, the butler and the baker of the king of Egypt, which [were] bound in the prison. {40:6} And Joseph came in unto them in the morning, and looked upon them, and, behold, they [were] sad. {40:7} And he asked Pharaoh's officers that [were] with him in the ward of his lord's house, saying, Wherefore look ye [so] sadly to day? {40:8} And they said unto him, We have dreamed a dream, and [there is] no interpreter of it. And Joseph said unto them, [Do] not interpretations [belong] to God? tell me [them,] I pray you. {40:9} And the chief butler told his dream to Joseph, and said to him, In my dream, behold, a vine [was] before me; {40:10} And in the vine [were] three branches: and it [was] as though it budded, [and] her blossoms shot forth; and the clusters thereof brought forth ripe grapes: {40:11} And Pharaoh's cup [was] in my hand: and I took the grapes, and pressed them into Pharaoh's cup, and I gave the cup into Pharaoh's hand. {40:12} And Joseph said unto him, This [is] the interpretation of it: The three branches [are] three days: {40:13} Yet within three days shall Pharaoh lift up thine head, and restore thee unto thy place: and thou shalt deliver Pharaoh's cup into his hand, after the former manner when thou wast his butler. {40:14} But think on me when it shall be well with thee, and shew kindness, I pray thee, unto me, and make mention of me unto Pharaoh, and bring me out of this house: {40:15} For indeed I was stolen away out of the land of the Hebrews: and here also have I done nothing that they should put me into the dungeon. {40:16} When the chief baker saw that the interpretation was good, he said unto Joseph, I also [was] in my dream, and, behold, [I had] three white baskets on my head: {40:17} And in the uppermost basket [there was] of all manner of bakemeats for Pharaoh; and the birds did eat them out of the basket upon my head. {40:18} And Joseph answered and said, This [is] the interpretation thereof: The three baskets [are] three days: {40:19} Yet within three days shall Pharaoh lift up thy head from off thee, and shall hang thee on a tree; and the birds shall eat thy flesh from off thee. {40:20} And it came to pass the third day, [which was] Pharaoh's birthday, that he made a feast unto all his servants: and he lifted up the head of the chief butler and of the chief baker among his servants. {40:21} And he restored the chief butler unto his butlership again; and he gave the cup into Pharaoh's hand: {40:22} But he hanged the chief baker: as Joseph had interpreted to them. {40:23} Yet did not the chief butler remember Joseph, but forgat him. {41:1} And it came to pass at the end of two full years, that Pharaoh dreamed: and, behold, he stood by the river. {41:2} And, behold, there came up out of the river seven well favoured kine and fatfleshed; and they fed in a meadow. {41:3} And, behold, seven other kine came up after them out of the river, ill favoured and leanfleshed; and stood by the [other] kine upon the brink of the river. {41:4} And the ill favoured and leanfleshed kine did eat up the seven well favoured and fat kine. So Pharaoh awoke. {41:5} And he slept and dreamed the second time: and, behold, seven ears of corn came up upon one stalk, rank and good. {41:6} And, behold, seven thin ears and blasted with the east wind sprung up after them. {41:7} And the seven thin ears devoured the seven rank and full ears. And Pharaoh awoke, and, behold, [it was] a dream. {41:8} And it came to pass in the morning that his spirit was troubled; and he sent and called for all the magicians of Egypt, and all the wise men thereof: and Pharaoh told them his dream; but [there was] none that could interpret them unto Pharaoh. {41:9} Then spake the chief butler unto Pharaoh, saying, I do remember my faults this day: {41:10} Pharaoh was wroth with his servants, and put me in ward in the captain of the guard's house, both [me] and the chief baker: {41:11} And we dreamed a dream in one night, I and he; we dreamed each man according to the interpretation of his dream. {41:12} And [there was] there with us a young man, an Hebrew, servant to the captain of the guard; and we told him, and he interpreted to us our dreams; to each man according to his dream he did interpret. {41:13} And it came to pass, as he interpreted to us, so it was; me he restored unto mine office, and him he hanged. {41:14} Then Pharaoh sent and called Joseph, and they brought him hastily out of the dungeon: and he shaved [himself,] and changed his raiment, and came in unto Pharaoh. {41:15} And Pharaoh said unto Joseph, I have dreamed a dream, and [there is] none that can interpret it: and I have heard say of thee, [that] thou canst understand a dream to interpret it. {41:16} And Joseph answered Pharaoh, saying, [It is] not in me: God shall give Pharaoh an answer of peace. {41:17} And Pharaoh said unto Joseph, In my dream, behold, I stood upon the bank of the river: {41:18} And, behold, there came up out of the river seven kine, fatfleshed and well favoured; and they fed in a meadow: {41:19} And, behold, seven other kine came up after them, poor and very ill favoured and leanfleshed, such as I never saw in all the land of Egypt for badness: {41:20} And the lean and the ill favoured kine did eat up the first seven fat kine: {41:21} And when they had eaten them up, it could not be known that they had eaten them; but they [were] still ill favoured, as at the beginning. So I awoke. {41:22} And I saw in my dream, and, behold, seven ears came up in one stalk, full and good: {41:23} And, behold, seven ears, withered, thin, [and] blasted with the east wind, sprung up after them: {41:24} And the thin ears devoured the seven good ears: and I told [this] unto the magicians; but [there was] none that could declare [it] to me. {41:25} And Joseph said unto Pharaoh, The dream of Pharaoh [is] one: God hath shewed Pharaoh what he [is] about to do. {41:26} The seven good kine [are] seven years; and the seven good ears [are] seven years: the dream [is] one. {41:27} And the seven thin and ill favoured kine that came up after them [are] seven years; and the seven empty ears blasted with the east wind shall be seven years of famine. {41:28} This [is] the thing which I have spoken unto Pharaoh: What God [is] about to do he sheweth unto Pharaoh. {41:29} Behold, there come seven years of great plenty throughout all the land of Egypt: {41:30} And there shall arise after them seven years of famine; and all the plenty shall be forgotten in the land of Egypt; and the famine shall consume the land; {41:31} And the plenty shall not be known in the land by reason of that famine following; for it [shall be] very grievous. {41:32} And for that the dream was doubled unto Pharaoh twice; [it is] because the thing [is] established by God, and God will shortly bring it to pass. {41:33} Now therefore let Pharaoh look out a man discreet and wise, and set him over the land of Egypt. {41:34} Let Pharaoh do [this,] and let him appoint officers over the land, and take up the fifth part of the land of Egypt in the seven plenteous years. {41:35} And let them gather all the food of those good years that come, and lay up corn under the hand of Pharaoh, and let them keep food in the cities. {41:36} And that food shall be for store to the land against the seven years of famine, which shall be in the land of Egypt; that the land perish not through the famine. {41:37} And the thing was good in the eyes of Pharaoh, and in the eyes of all his servants. {41:38} And Pharaoh said unto his servants, Can we find [such a one] as this [is,] a man in whom the Spirit of God is? {41:39} And Pharaoh said unto Joseph, Forasmuch as God hath shewed thee all this, [there is] none so discreet and wise as thou [art: ]{41:40} Thou shalt be over my house, and according unto thy word shall all my people be ruled: only in the throne will I be greater than thou. {41:41} And Pharaoh said unto Joseph, See, I have set thee over all the land of Egypt. {41:42} And Pharaoh took off his ring from his hand, and put it upon Joseph's hand, and arrayed him in vestures of fine linen, and put a gold chain about his neck; {41:43} And he made him to ride in the second chariot which he had; and they cried before him, Bow the knee: and he made him [ruler] over all the land of Egypt. {41:44} And Pharaoh said unto Joseph, I [am] Pharaoh, and without thee shall no man lift up his hand or foot in all the land of Egypt. {41:45} And Pharaoh called Joseph's name Zaphnath-paaneah; and he gave him to wife Asenath the daughter of Poti- pherah priest of On. And Joseph went out over [all] the land of Egypt. {41:46} And Joseph [was] thirty years old when he stood before Pharaoh king of Egypt. And Joseph went out from the presence of Pharaoh, and went throughout all the land of Egypt. {41:47} And in the seven plenteous years the earth brought forth by handfuls. {41:48} And he gathered up all the food of the seven years, which were in the land of Egypt, and laid up the food in the cities: the food of the field, which [was] round about every city, laid he up in the same. {41:49} And Joseph gathered corn as the sand of the sea, very much, until he left numbering; for [it was] without number. {41:50} And unto Joseph were born two sons before the years of famine came, which Asenath the daughter of Poti- pherah priest of On bare unto him. {41:51} And Joseph called the name of the firstborn Manasseh: For God, [said he,] hath made me forget all my toil, and all my father's house. {41:52} And the name of the second called he Ephraim: For God hath caused me to be fruitful in the land of my affliction. {41:53} And the seven years of plenteousness, that was in the land of Egypt, were ended. {41:54} And the seven years of dearth began to come, according as Joseph had said: and the dearth was in all lands; but in all the land of Egypt there was bread. {41:55} And when all the land of Egypt was famished, the people cried to Pharaoh for bread: and Pharaoh said unto all the Egyptians, Go unto Joseph; what he saith to you, do. {41:56} And the famine was over all the face of the earth: and Joseph opened all the storehouses, and sold unto the Egyptians; and the famine waxed sore in the land of Egypt. {41:57} And all countries came into Egypt to Joseph for to buy [corn;] because that the famine was so sore in all lands. {42:1} Now when Jacob saw that there was corn in Egypt, Jacob said unto his sons, Why do ye look one upon another? {42:2} And he said, Behold, I have heard that there is corn in Egypt: get you down thither, and buy for us from thence; that we may live, and not die. {42:3} And Joseph's ten brethren went down to buy corn in Egypt. {42:4} But Benjamin, Joseph's brother, Jacob sent not with his brethren; for he said, Lest peradventure mischief befall him. {42:5} And the sons of Israel came to buy [corn] among those that came: for the famine was in the land of Canaan. {42:6} And Joseph [was] the governor over the land, [and] he [it was] that sold to all the people of the land: and Joseph's brethren came, and bowed down themselves before him [with] their faces to the earth. {42:7} And Joseph saw his brethren, and he knew them, but made himself strange unto them, and spake roughly unto them; and he said unto them, Whence come ye? And they said, From the land of Canaan to buy food. {42:8} And Joseph knew his brethren, but they knew not him. {42:9} And Joseph remembered the dreams which he dreamed of them, and said unto them, Ye [are] spies; to see the nakedness of the land ye are come. {42:10} And they said unto him, Nay, my lord, but to buy food are thy servants come. {42:11} We [are] all one man's sons; we [are] true [men,] thy servants are no spies. {42:12} And he said unto them, Nay, but to see the nakedness of the land ye are come. {42:13} And they said, Thy servants [are] twelve brethren, the sons of one man in the land of Canaan; and, behold, the youngest [is] this day with our father, and one [is] not. {42:14} And Joseph said unto them, That [is it] that I spake unto you, saying, Ye [are] spies: {42:15} Hereby ye shall be proved: By the life of Pharaoh ye shall not go forth hence, except your youngest brother come hither. {42:16} Send one of you, and let him fetch your brother, and ye shall be kept in prison, that your words may be proved, whether [there be any] truth in you: or else by the life of Pharaoh surely ye [are] spies. {42:17} And he put them all together into ward three days. {42:18} And Joseph said unto them the third day, This do, and live; [for] I fear God: {42:19} If ye [be] true [men,] let one of your brethren be bound in the house of your prison: go ye, carry corn for the famine of your houses: {42:20} But bring your youngest brother unto me; so shall your words be verified, and ye shall not die. And they did so. {42:21} And they said one to another, We [are] verily guilty concerning our brother, in that we saw the anguish of his soul, when he besought us, and we would not hear; therefore is this distress come upon us. {42:22} And Reuben answered them, saying, Spake I not unto you, saying, Do not sin against the child; and ye would not hear? therefore, behold, also his blood is required. {42:23} And they knew not that Joseph understood [them;] for he spake unto them by an interpreter. {42:24} And he turned himself about from them, and wept; and returned to them again, and communed with them, and took from them Simeon, and bound him before their eyes. {42:25} Then Joseph commanded to fill their sacks with corn, and to restore every man's money into his sack, and to give them provision for the way: and thus did he unto them. {42:26} And they laded their asses with the corn, and departed thence. {42:27} And as one of them opened his sack to give his ass provender in the inn, he espied his money; for, behold, it [was] in his sack's mouth. {42:28} And he said unto his brethren, My money is restored; and, lo, [it is] even in my sack: and their heart failed [them,] and they were afraid, saying one to another, What [is] this [that] God hath done unto us? {42:29} And they came unto Jacob their father unto the land of Canaan, and told him all that befell unto them; saying, {42:30} The man, [who is] the lord of the land, spake roughly to us, and took us for spies of the country. {42:31} And we said unto him, We [are] true [men;] we are no spies: {42:32} We [be] twelve brethren, sons of our father; one [is] not, and the youngest [is] this day with our father in the land of Canaan. {42:33} And the man, the lord of the country, said unto us, Hereby shall I know that ye [are] true [men;] leave one of your brethren [here] with me, and take [food for] the famine of your households, and be gone: {42:34} And bring your youngest brother unto me: then shall I know that ye [are] no spies, but [that] ye [are] true [men: so] will I deliver you your brother, and ye shall traffick in the land. {42:35} And it came to pass as they emptied their sacks, that, behold, every man's bundle of money [was] in his sack: and when [both] they and their father saw the bundles of money, they were afraid. {42:36} And Jacob their father said unto them, Me have ye bereaved [of my children:] Joseph [is] not, and Simeon [is] not, and ye will take Benjamin [away:] all these things are against me. {42:37} And Reuben spake unto his father, saying, Slay my two sons, if I bring him not to thee: deliver him into my hand, and I will bring him to thee again. {42:38} And he said, My son shall not go down with you; for his brother is dead, and he is left alone: if mischief befall him by the way in the which ye go, then shall ye bring down my gray hairs with sorrow to the grave. {43:1} And the famine [was] sore in the land. {43:2} And it came to pass, when they had eaten up the corn which they had brought out of Egypt, their father said unto them, Go again, buy us a little food. {43:3} And Judah spake unto him, saying, The man did solemnly protest unto us, saying, Ye shall not see my face, except your brother [be] with you. {43:4} If thou wilt send our brother with us, we will go down and buy thee food: {43:5} But if thou wilt not send [him,] we will not go down: for the man said unto us, Ye shall not see my face, except your brother [be] with you. {43:6} And Israel said, Wherefore dealt ye so ill with me, as to tell the man whether ye had yet a brother? {43:7} And they said, The man asked us straitly of our state, and of our kindred, saying, [Is] your father yet alive? have ye [another] brother? and we told him according to the tenor of these words: could we certainly know that he would say, Bring your brother down? {43:8} And Judah said unto Israel his father, Send the lad with me, and we will arise and go; that we may live, and not die, both we, and thou, [and] also our little ones. {43:9} I will be surety for him; of my hand shalt thou require him: if I bring him not unto thee, and set him before thee, then let me bear the blame for ever: {43:10} For except we had lingered, surely now we had returned this second time. {43:11} And their father Israel said unto them, If [it must be] so now, do this; take of the best fruits in the land in your vessels, and carry down the man a present, a little balm, and a little honey, spices, and myrrh, nuts, and almonds: {43:12} And take double money in your hand; and the money that was brought again in the mouth of your sacks, carry [it] again in your hand; peradventure it [was] an oversight: {43:13} Take also your brother, and arise, go again unto the man: {43:14} And God Almighty give you mercy before the man, that he may send away your other brother, and Benjamin. If I be bereaved [of my children,] I am bereaved. {43:15} And the men took that present, and they took double money in their hand, and Benjamin; and rose up, and went down to Egypt, and stood before Joseph. {43:16} And when Joseph saw Benjamin with them, he said to the ruler of his house, Bring [these] men home, and slay, and make ready; for [these] men shall dine with me at noon. {43:17} And the man did as Joseph bade; and the man brought the men into Joseph's house. {43:18} And the men were afraid, because they were brought into Joseph's house; and they said, Because of the money that was returned in our sacks at the first time are we brought in; that he may seek occasion against us, and fall upon us, and take us for bondmen, and our asses. {43:19} And they came near to the steward of Joseph's house, and they communed with him at the door of the house, {43:20} And said, O sir, we came indeed down at the first time to buy food: {43:21} And it came to pass, when we came to the inn, that we opened our sacks, and, behold, [every] man's money [was] in the mouth of his sack, our money in full weight: and we have brought it again in our hand. {43:22} And other money have we brought down in our hands to buy food: we cannot tell who put our money in our sacks. {43:23} And he said, Peace [be] to you, fear not: your God, and the God of your father, hath given you treasure in your sacks: I had your money. And he brought Simeon out unto them. {43:24} And the man brought the men into Joseph's house, and gave [them] water, and they washed their feet; and he gave their asses provender. {43:25} And they made ready the present against Joseph came at noon: for they heard that they should eat bread there. {43:26} And when Joseph came home, they brought him the present which [was] in their hand into the house, and bowed themselves to him to the earth. {43:27} And he asked them of [their] welfare, and said, [Is] your father well, the old man of whom ye spake? [Is] he yet alive? {43:28} And they answered, Thy servant our father [is] in good health, he [is] yet alive. And they bowed down their heads, and made obeisance. {43:29} And he lifted up his eyes, and saw his brother Benjamin, his mother's son, and said, [Is] this your younger brother, of whom ye spake unto me? And he said, God be gracious unto thee, my son. {43:30} And Joseph made haste; for his bowels did yearn upon his brother: and he sought [where] to weep; and he entered into [his] chamber, and wept there. {43:31} And he washed his face, and went out, and refrained himself, and said, Set on bread. {43:32} And they set on for him by himself, and for them by themselves, and for the Egyptians, which did eat with him, by themselves: because the Egyptians might not eat bread with the Hebrews; for that [is] an abomination unto the Egyptians. {43:33} And they sat before him, the firstborn according to his birthright, and the youngest according to his youth: and the men marvelled one at another. {43:34} And he took [and sent] messes unto them from before him: but Benjamin's mess was five times so much as any of theirs. And they drank, and were merry with him. {44:1} And he commanded the steward of his house, saying, Fill the men's sacks [with] food, as much as they can carry, and put every man's money in his sack's mouth. {44:2} And put my cup, the silver cup, in the sack's mouth of the youngest, and his corn money. And he did according to the word that Joseph had spoken. {44:3} As soon as the morning was light, the men were sent away, they and their asses. {44:4} [And] when they were gone out of the city, [and] not [yet] far off, Joseph said unto his steward, Up, follow after the men; and when thou dost overtake them, say unto them, Wherefore have ye rewarded evil for good? {44:5} [Is] not this [it] in which my lord drinketh, and whereby indeed he divineth? ye have done evil in so doing. {44:6} And he overtook them, and he spake unto them these same words. {44:7} And they said unto him, Wherefore saith my lord these words? God forbid that thy servants should do according to this thing: {44:8} Behold, the money, which we found in our sacks' mouths, we brought again unto thee out of the land of Canaan: how then should we steal out of thy lord's house silver or gold? {44:9} With whomsoever of thy servants it be found, both let him die, and we also will be my lord's bondmen. {44:10} And he said, Now also [let] it [be] according unto your words; he with whom it is found shall be my servant; and ye shall be blameless. {44:11} Then they speedily took down every man his sack to the ground, and opened every man his sack. {44:12} And he searched, [and] began at the eldest, and left at the youngest: and the cup was found in Benjamin's sack. {44:13} Then they rent their clothes, and laded every man his ass, and returned to the city. {44:14} And Judah and his brethren came to Joseph's house; for he [was] yet there: and they fell before him on the ground. {44:15} And Joseph said unto them, What deed [is] this that ye have done? wot ye not that such a man as I can certainly divine? {44:16} And Judah said, What shall we say unto my lord? what shall we speak? or how shall we clear ourselves? God hath found out the iniquity of thy servants: behold, we [are] my lord's servants, both we, and [he] also with whom the cup is found. {44:17} And he said, God forbid that I should do so: [but] the man in whose hand the cup is found, he shall be my servant; and as for you, get you up in peace unto your father. {44:18} Then Judah came near unto him, and said, Oh my lord, let thy servant, I pray thee, speak a word in my lord's ears, and let not thine anger burn against thy servant: for thou [art] even as Pharaoh. {44:19} My lord asked his servants, saying, Have ye a father, or a brother? {44:20} And we said unto my lord, We have a father, an old man, and a child of his old age, a little one; and his brother is dead, and he alone is left of his mother, and his father loveth him. {44:21} And thou saidst unto thy servants, Bring him down unto me, that I may set mine eyes upon him. {44:22} And we said unto my lord, The lad cannot leave his father: for [if] he should leave his father, [his father] would die. {44:23} And thou saidst unto thy servants, Except your youngest brother come down with you, ye shall see my face no more. {44:24} And it came to pass when we came up unto thy servant my father, we told him the words of my lord. {44:25} And our father said, Go again, [and] buy us a little food. {44:26} And we said, We cannot go down: if our youngest brother be with us, then will we go down: for we may not see the man's face, except our youngest brother [be] with us. {44:27} And thy servant my father said unto us, Ye know that my wife bare me two [sons: ]{44:28} And the one went out from me, and I said, Surely he is torn in pieces; and I saw him not since: {44:29} And if ye take this also from me, and mischief befall him, ye shall bring down my gray hairs with sorrow to the grave. {44:30} Now therefore when I come to thy servant my father, and the lad [be] not with us; seeing that his life is bound up in the lad's life; {44:31} It shall come to pass, when he seeth that the lad [is] not [with us,] that he will die: and thy servants shall bring down the gray hairs of thy servant our father with sorrow to the grave. {44:32} For thy servant became surety for the lad unto my father, saying, If I bring him not unto thee, then I shall bear the blame to my father for ever. {44:33} Now therefore, I pray thee, let thy servant abide instead of the lad a bondman to my lord; and let the lad go up with his brethren. {44:34} For how shall I go up to my father, and the lad [be] not with me? lest peradventure I see the evil that shall come on my father. {45:1} Then Joseph could not refrain himself before all them that stood by him; and he cried, Cause every man to go out from me. And there stood no man with him, while Joseph made himself known unto his brethren. {45:2} And he wept aloud: and the Egyptians and the house of Pharaoh heard. {45:3} And Joseph said unto his brethren, I [am] Joseph; doth my father yet live? And his brethren could not answer him; for they were troubled at his presence. {45:4} And Joseph said unto his brethren, Come near to me, I pray you. And they came near. And he said, I [am] Joseph your brother, whom ye sold into Egypt. {45:5} Now therefore be not grieved, nor angry with yourselves, that ye sold me hither: for God did send me before you to preserve life. {45:6} For these two years [hath] the famine [been] in the land: and yet [there are] five years, in the which [there shall] neither [be] earing nor harvest. {45:7} And God sent me before you to preserve you a posterity in the earth, and to save your lives by a great deliverance. {45:8} So now [it was] not you [that] sent me hither, but God: and he hath made me a father to Pharaoh, and lord of all his house, and a ruler throughout all the land of Egypt. {45:9} Haste ye, and go up to my father, and say unto him, Thus saith thy son Joseph, God hath made me lord of all Egypt: come down unto me, tarry not: {45:10} And thou shalt dwell in the land of Goshen, and thou shalt be near unto me, thou, and thy children, and thy children's children, and thy flocks, and thy herds, and all that thou hast: {45:11} And there will I nourish thee; for yet [there are] five years of famine; lest thou, and thy household, and all that thou hast, come to poverty. {45:12} And, behold, your eyes see, and the eyes of my brother Benjamin, that [it is] my mouth that speaketh unto you. {45:13} And ye shall tell my father of all my glory in Egypt, and of all that ye have seen; and ye shall haste and bring down my father hither. {45:14} And he fell upon his brother Benjamin's neck, and wept; and Benjamin wept upon his neck. {45:15} Moreover he kissed all his brethren, and wept upon them: and after that his brethren talked with him. {45:16} And the fame thereof was heard in Pharaoh's house, saying, Joseph's brethren are come: and it pleased Pharaoh well, and his servants. {45:17} And Pharaoh said unto Joseph, Say unto thy brethren, This do ye; lade your beasts, and go, get you unto the land of Canaan; {45:18} And take your father and your households, and come unto me: and I will give you the good of the land of Egypt, and ye shall eat the fat of the land. {45:19} Now thou art commanded, this do ye; take you wagons out of the land of Egypt for your little ones, and for your wives, and bring your father, and come. {45:20} Also regard not your stuff; for the good of all the land of Egypt [is] yours. {45:21} And the children of Israel did so: and Joseph gave them wagons, according to the commandment of Pharaoh, and gave them provision for the way. {45:22} To all of them he gave each man changes of raiment; but to Benjamin he gave three hundred [pieces] of silver, and five changes of raiment. {45:23} And to his father he sent after this [manner;] ten asses laden with the good things of Egypt, and ten she asses laden with corn and bread and meat for his father by the way. {45:24} So he sent his brethren away, and they departed: and he said unto them, See that ye fall not out by the way. {45:25} And they went up out of Egypt, and came into the land of Canaan unto Jacob their father, {45:26} And told him, saying, Joseph [is] yet alive, and he [is] governor over all the land of Egypt. And Jacob's heart fainted, for he believed them not. {45:27} And they told him all the words of Joseph, which he had said unto them: and when he saw the wagons which Joseph had sent to carry him, the spirit of Jacob their father revived: {45:28} And Israel said, [It is] enough; Joseph my son [is] yet alive: I will go and see him before I die. {46:1} And Israel took his journey with all that he had, and came to Beer-sheba, and offered sacrifices unto the God of his father Isaac. {46:2} And God spake unto Israel in the visions of the night, and said, Jacob, Jacob. And he said, Here [am] I. {46:3} And he said, I [am] God, the God of thy father: fear not to go down into Egypt; for I will there make of thee a great nation: {46:4} I will go down with thee into Egypt; and I will also surely bring thee up [again:] and Joseph shall put his hand upon thine eyes. {46:5} And Jacob rose up from Beer-sheba: and the sons of Israel carried Jacob their father, and their little ones, and their wives, in the wagons which Pharaoh had sent to carry him. {46:6} And they took their cattle, and their goods, which they had gotten in the land of Canaan, and came into Egypt, Jacob, and all his seed with him: {46:7} His sons, and his sons' sons with him, his daughters, and his sons' daughters, and all his seed brought he with him into Egypt. {46:8} And these [are] the names of the children of Israel, which came into Egypt, Jacob and his sons: Reuben, Jacob's firstborn. {46:9} And the sons of Reuben; Hanoch, and Phallu, and Hezron, and Carmi. {46:10} And the sons of Simeon; Jemuel, and Jamin, and Ohad, and Jachin, and Zohar, and Shaul the son of a Canaanitish woman. {46:11} And the sons of Levi; Gershon, Kohath, and Merari. {46:12} And the sons of Judah; Er, and Onan, and Shelah, and Pharez, and Zarah: but Er and Onan died in the land of Canaan. And the sons of Pharez were Hezron and Hamul. {46:13} And the sons of Issachar; Tola, and Phuvah, and Job, and Shimron. {46:14} And the sons of Zebulun; Sered, and Elon, and Jahleel. {46:15} These [be] the sons of Leah, which she bare unto Jacob in Padan-aram, with his daughter Dinah: all the souls of his sons and his daughters [were] thirty and three. {46:16} And the sons of Gad; Ziphion, and Haggi, Shuni, and Ezbon, Eri, and Arodi, and Areli. {46:17} And the sons of Asher; Jimnah, and Ishuah, and Isui, and Beriah, and Serah their sister: and the sons of Beriah; Heber, and Malchiel. {46:18} These [are] the sons of Zilpah, whom Laban gave to Leah his daughter, and these she bare unto Jacob, [even] sixteen souls. {46:19} The sons of Rachel Jacob's wife; Joseph, and Benjamin. {46:20} And unto Joseph in the land of Egypt were born Manasseh and Ephraim, which Asenath the daughter of Poti-pherah priest of On bare unto him. {46:21} And the sons of Benjamin were Belah, and Becher, and Ashbel, Gera, and Naaman, Ehi, and Rosh, Muppim, and Huppim, and Ard. {46:22} These [are] the sons of Rachel, which were born to Jacob: all the souls [were] fourteen. {46:23} And the sons of Dan; Hushim. {46:24} And the sons of Naphtali; Jahzeel, and Guni, and Jezer, and Shillem. {46:25} These [are] the sons of Bilhah, which Laban gave unto Rachel his daughter, and she bare these unto Jacob: all the souls [were] seven. {46:26} All the souls that came with Jacob into Egypt, which came out of his loins, besides Jacob's sons' wives, all the souls [were] threescore and six; {46:27} And the sons of Joseph, which were born him in Egypt, [were] two souls: all the souls of the house of Jacob, which came into Egypt, [were] threescore and ten. {46:28} And he sent Judah before him unto Joseph, to direct his face unto Goshen; and they came into the land of Goshen. {46:29} And Joseph made ready his chariot, and went up to meet Israel his father, to Goshen, and presented himself unto him; and he fell on his neck, and wept on his neck a good while. {46:30} And Israel said unto Joseph, Now let me die, since I have seen thy face, because thou [art] yet alive. {46:31} And Joseph said unto his brethren, and unto his father's house, I will go up, and shew Pharaoh, and say unto him, My brethren, and my father's house, which [were] in the land of Canaan, are come unto me; {46:32} And the men [are] shepherds, for their trade hath been to feed cattle; and they have brought their flocks, and their herds, and all that they have. {46:33} And it shall come to pass, when Pharaoh shall call you, and shall say, What [is] your occupation? {46:34} That ye shall say, Thy servants' trade hath been about cattle from our youth even until now, both we, [and] also our fathers: that ye may dwell in the land of Goshen; for every shepherd [is] an abomination unto the Egyptians. {47:1} Then Joseph came and told Pharaoh, and said, My father and my brethren, and their flocks, and their herds, and all that they have, are come out of the land of Canaan; and, behold, they [are] in the land of Goshen. {47:2} And he took some of his brethren, [even] five men, and presented them unto Pharaoh. {47:3} And Pharaoh said unto his brethren, What [is] your occupation? And they said unto Pharaoh, Thy servants [are] shepherds, both we, [and] also our fathers. {47:4} They said moreover unto Pharaoh, For to sojourn in the land are we come; for thy servants have no pasture for their flocks; for the famine [is] sore in the land of Canaan: now therefore, we pray thee, let thy servants dwell in the land of Goshen. {47:5} And Pharaoh spake unto Joseph, saying, Thy father and thy brethren are come unto thee: {47:6} The land of Egypt [is] before thee; in the best of the land make thy father and brethren to dwell; in the land of Goshen let them dwell: and if thou knowest [any] men of activity among them, then make them rulers over my cattle. {47:7} And Joseph brought in Jacob his father, and set him before Pharaoh: and Jacob blessed Pharaoh. {47:8} And Pharaoh said unto Jacob, How old [art] thou? {47:9} And Jacob said unto Pharaoh, The days of the years of my pilgrimage [are] an hundred and thirty years: few and evil have the days of the years of my life been, and have not attained unto the days of the years of the life of my fathers in the days of their pilgrimage. {47:10} And Jacob blessed Pharaoh, and went out from before Pharaoh. {47:11} And Joseph placed his father and his brethren, and gave them a possession in the land of Egypt, in the best of the land, in the land of Rameses, as Pharaoh had commanded. {47:12} And Joseph nourished his father, and his brethren, and all his father's household, with bread, according to [their] families. {47:13} And [there was] no bread in all the land; for the famine [was] very sore, so that the land of Egypt and [all] the land of Canaan fainted by reason of the famine. {47:14} And Joseph gathered up all the money that was found in the land of Egypt, and in the land of Canaan, for the corn which they bought: and Joseph brought the money into Pharaoh's house. {47:15} And when money failed in the land of Egypt, and in the land of Canaan, all the Egyptians came unto Joseph, and said, Give us bread: for why should we die in thy presence? for the money faileth. {47:16} And Joseph said, Give your cattle; and I will give you for your cattle, if money fail. {47:17} And they brought their cattle unto Joseph: and Joseph gave them bread [in exchange] for horses, and for the flocks, and for the cattle of the herds, and for the asses: and he fed them with bread for all their cattle for that year. {47:18} When that year was ended, they came unto him the second year, and said unto him, We will not hide [it] from my lord, how that our money is spent; my lord also hath our herds of cattle; there is not ought left in the sight of my lord, but our bodies, and our lands: {47:19} Wherefore shall we die before thine eyes, both we and our land? buy us and our land for bread, and we and our land will be servants unto Pharaoh: and give [us] seed, that we may live, and not die, that the land be not desolate. {47:20} And Joseph bought all the land of Egypt for Pharaoh; for the Egyptians sold every man his field, because the famine prevailed over them: so the land became Pharaoh's. {47:21} And as for the people, he removed them to cities from [one] end of the borders of Egypt even to the [other] end thereof. {47:22} Only the land of the priests bought he not; for the priests had a portion [assigned them] of Pharaoh, and did eat their portion which Pharaoh gave them: wherefore they sold not their lands. {47:23} Then Joseph said unto the people, Behold, I have bought you this day and your land for Pharaoh: lo, [here is] seed for you, and ye shall sow the land. {47:24} And it shall come to pass in the increase, that ye shall give the fifth [part] unto Pharaoh, and four parts shall be your own, for seed of the field, and for your food, and for them of your households, and for food for your little ones. {47:25} And they said, Thou hast saved our lives: let us find grace in the sight of my lord, and we will be Pharaoh's servants. {47:26} And Joseph made it a law over the land of Egypt unto this day, [that] Pharaoh should have the fifth [part;] except the land of the priests only, [which] became not Pharaoh's. {47:27} And Israel dwelt in the land of Egypt, in the country of Goshen; and they had possessions therein, and grew, and multiplied exceedingly. {47:28} And Jacob lived in the land of Egypt seventeen years: so the whole age of Jacob was an hundred forty and seven years. {47:29} And the time drew nigh that Israel must die: and he called his son Joseph, and said unto him, If now I have found grace in thy sight, put, I pray thee, thy hand under my thigh, and deal kindly and truly with me; bury me not, I pray thee, in Egypt: {47:30} But I will lie with my fathers, and thou shalt carry me out of Egypt, and bury me in their buryingplace. And he said, I will do as thou hast said. {47:31} And he said, Swear unto me. And he sware unto him. And Israel bowed himself upon the bed's head. {48:1} And it came to pass after these things, that [one] told Joseph, Behold, thy father [is] sick: and he took with him his two sons, Manasseh and Ephraim. {48:2} And [one] told Jacob, and said, Behold, thy son Joseph cometh unto thee: and Israel strengthened himself, and sat upon the bed. {48:3} And Jacob said unto Joseph, God Almighty appeared unto me at Luz in the land of Canaan, and blessed me, {48:4} And said unto me, Behold, I will make thee fruitful, and multiply thee, and I will make of thee a multitude of people; and will give this land to thy seed after thee [for] an everlasting possession. {48:5} And now thy two sons, Ephraim and Manasseh, which were born unto thee in the land of Egypt before I came unto thee into Egypt, [are] mine; as Reuben and Simeon, they shall be mine. {48:6} And thy issue, which thou begettest after them, shall be thine, [and] shall be called after the name of their brethren in their inheritance. {48:7} And as for me, when I came from Padan, Rachel died by me in the land of Canaan in the way, when yet [there was] but a little way to come unto Ephrath: and I buried her there in the way of Ephrath; the same is Bethlehem. {48:8} And Israel beheld Joseph's sons, and said, Who [are] these? {48:9} And Joseph said unto his father, They [are] my sons, whom God hath given me in this [place.] And he said, Bring them, I pray thee, unto me, and I will bless them. {48:10} Now the eyes of Israel were dim for age, [so that] he could not see. And he brought them near unto him; and he kissed them, and embraced them. {48:11} And Israel said unto Joseph, I had not thought to see thy face: and, lo, God hath shewed me also thy seed. {48:12} And Joseph brought them out from between his knees, and he bowed himself with his face to the earth. {48:13} And Joseph took them both, Ephraim in his right hand toward Israel's left hand, and Manasseh in his left hand toward Israel's right hand, and brought [them] near unto him. {48:14} And Israel stretched out his right hand, and laid it upon Ephraim's head, who [was] the younger, and his left hand upon Manasseh's head, guiding his hands wittingly; for Manasseh [was] the firstborn. {48:15} And he blessed Joseph, and said, God, before whom my fathers Abraham and Isaac did walk, the God which fed me all my life long unto this day, {48:16} The Angel which redeemed me from all evil, bless the lads; and let my name be named on them, and the name of my fathers Abraham and Isaac; and let them grow into a multitude in the midst of the earth. {48:17} And when Joseph saw that his father laid his right hand upon the head of Ephraim, it displeased him: and he held up his father's hand, to remove it from Ephraim's head unto Manasseh's head. {48:18} And Joseph said unto his father, Not so, my father: for this [is] the firstborn; put thy right hand upon his head. {48:19} And his father refused, and said, I know [it,] my son, I know [it:] he also shall become a people, and he also shall be great: but truly his younger brother shall be greater than he, and his seed shall become a multitude of nations. {48:20} And he blessed them that day, saying, In thee shall Israel bless, saying, God make thee as Ephraim and as Manasseh: and he set Ephraim before Manasseh. {48:21} And Israel said unto Joseph, Behold, I die: but God shall be with you, and bring you again unto the land of your fathers. {48:22} Moreover I have given to thee one portion above thy brethren, which I took out of the hand of the Amorite with my sword and with my bow. {49:1} And Jacob called unto his sons, and said, Gather yourselves together, that I may tell you [that] which shall befall you in the last days. {49:2} Gather yourselves together, and hear, ye sons of Jacob; and hearken unto Israel your father. {49:3} Reuben, thou [art] my firstborn, my might, and the beginning of my strength, the excellency of dignity, and the excellency of power: {49:4} Unstable as water, thou shalt not excel; because thou wentest up to thy father's bed; then defiledst thou [it:] he went up to my couch. {49:5} Simeon and Levi [are] brethren; instruments of cruelty [are in] their habitations. {49:6} O my soul, come not thou into their secret; unto their assembly, mine honour, be not thou united: for in their anger they slew a man, and in their selfwill they digged down a wall. {49:7} Cursed [be] their anger, for [it was] fierce; and their wrath, for it was cruel: I will divide them in Jacob, and scatter them in Israel. {49:8} Judah, thou [art he] whom thy brethren shall praise: thy hand [shall be] in the neck of thine enemies; thy father's children shall bow down before thee. {49:9} Judah [is] a lion's whelp: from the prey, my son, thou art gone up: he stooped down, he couched as a lion, and as an old lion; who shall rouse him up? {49:10} The sceptre shall not depart from Judah, nor a lawgiver from between his feet, until Shiloh come; and unto him [shall] the gathering of the people [be. ]{49:11} Binding his foal unto the vine, and his ass's colt unto the choice vine; he washed his garments in wine, and his clothes in the blood of grapes: {49:12} His eyes [shall be] red with wine, and his teeth white with milk. {49:13} Zebulun shall dwell at the haven of the sea; and he [shall be] for an haven of ships; and his border [shall be] unto Zidon. {49:14} Issachar [is] a strong ass couching down between two burdens: {49:15} And he saw that rest [was] good, and the land that [it was] pleasant; and bowed his shoulder to bear, and became a servant unto tribute. {49:16} Dan shall judge his people, as one of the tribes of Israel. {49:17} Dan shall be a serpent by the way, an adder in the path, that biteth the horse heels, so that his rider shall fall backward. {49:18} I have waited for thy salvation, O LORD. {49:19} Gad, a troop shall overcome him: but he shall overcome at the last. {49:20} Out of Asher his bread [shall be] fat, and he shall yield royal dainties. {49:21} Naphtali [is] a hind let loose: he giveth goodly words. {49:22} Joseph [is] a fruitful bough, [even] a fruitful bough by a well; [whose] branches run over the wall: {49:23} The archers have sorely grieved him, and shot [at him,] and hated him: {49:24} But his bow abode in strength, and the arms of his hands were made strong by the hands of the mighty [God] of Jacob; (from thence [is] the shepherd, the stone of Israel:) {49:25} [Even] by the God of thy father, who shall help thee; and by the Almighty, who shall bless thee with blessings of heaven above, blessings of the deep that lieth under, blessings of the breasts, and of the womb: {49:26} The blessings of thy father have prevailed above the blessings of my progenitors unto the utmost bound of the everlasting hills: they shall be on the head of Joseph, and on the crown of the head of him that was separate from his brethren. {49:27} Benjamin shall ravin [as] a wolf: in the morning he shall devour the prey, and at night he shall divide the spoil. {49:28} All these [are] the twelve tribes of Israel: and this [is it] that their father spake unto them, and blessed them; every one according to his blessing he blessed them. {49:29} And he charged them, and said unto them, I am to be gathered unto my people: bury me with my fathers in the cave that [is] in the field of Ephron the Hittite, {49:30} In the cave that [is] in the field of Machpelah, which [is] before Mamre, in the land of Canaan, which Abraham bought with the field of Ephron the Hittite for a possession of a buryingplace. {49:31} There they buried Abraham and Sarah his wife; there they buried Isaac and Rebekah his wife; and there I buried Leah. {49:32} The purchase of the field and of the cave that [is] therein [was] from the children of Heth. {49:33} And when Jacob had made an end of commanding his sons, he gathered up his feet into the bed, and yielded up the ghost, and was gathered unto his people. {50:1} And Joseph fell upon his father's face, and wept upon him, and kissed him. {50:2} And Joseph commanded his servants the physicians to embalm his father: and the physicians embalmed Israel. {50:3} And forty days were fulfilled for him; for so are fulfilled the days of those which are embalmed: and the Egyptians mourned for him threescore and ten days. {50:4} And when the days of his mourning were past, Joseph spake unto the house of Pharaoh, saying, If now I have found grace in your eyes, speak, I pray you, in the ears of Pharaoh, saying, {50:5} My father made me swear, saying, Lo, I die: in my grave which I have digged for me in the land of Canaan, there shalt thou bury me. Now therefore let me go up, I pray thee, and bury my father, and I will come again. {50:6} And Pharaoh said, Go up, and bury thy father, according as he made thee swear. {50:7} And Joseph went up to bury his father: and with him went up all the servants of Pharaoh, the elders of his house, and all the elders of the land of Egypt, {50:8} And all the house of Joseph, and his brethren, and his father's house: only their little ones, and their flocks, and their herds, they left in the land of Goshen. {50:9} And there went up with him both chariots and horsemen: and it was a very great company. {50:10} And they came to the threshingfloor of Atad, which [is] beyond Jordan, and there they mourned with a great and very sore lamentation: and he made a mourning for his father seven days. {50:11} And when the inhabitants of the land, the Canaanites, saw the mourning in the floor of Atad, they said, This [is] a grievous mourning to the Egyptians: wherefore the name of it was called Abel-mizraim, which [is] beyond Jordan. {50:12} And his sons did unto him according as he commanded them: {50:13} For his sons carried him into the land of Canaan, and buried him in the cave of the field of Machpelah, which Abraham bought with the field for a possession of a buryingplace of Ephron the Hittite, before Mamre. {50:14} And Joseph returned into Egypt, he, and his brethren, and all that went up with him to bury his father, after he had buried his father. {50:15} And when Joseph's brethren saw that their father was dead, they said, Joseph will peradventure hate us, and will certainly requite us all the evil which we did unto him. {50:16} And they sent a messenger unto Joseph, saying, Thy father did command before he died, saying, {50:17} So shall ye say unto Joseph, Forgive, I pray thee now, the trespass of thy brethren, and their sin; for they did unto thee evil: and now, we pray thee, forgive the trespass of the servants of the God of thy father. And Joseph wept when they spake unto him. {50:18} And his brethren also went and fell down before his face; and they said, Behold, we [be] thy servants. {50:19} And Joseph said unto them, Fear not: for [am] I in the place of God? {50:20} But as for you, ye thought evil against me; [but] God meant it unto good, to bring to pass, as [it is] this day, to save much people alive. {50:21} Now therefore fear ye not: I will nourish you, and your little ones. And he comforted them, and spake kindly unto them. {50:22} And Joseph dwelt in Egypt, he, and his father's house: and Joseph lived an hundred and ten years. {50:23} And Joseph saw Ephraim's children of the third [generation:] the children also of Machir the son Manasseh were brought up upon Joseph's knees. {50:24} And Joseph said unto his brethren, I die: and God will surely visit you, and bring you out of this land unto the land which he sware to Abraham, to Isaac, and to Jacob. {50:25} And Joseph took an oath of the children of Israel, saying, God will surely visit you, and ye shall carry up my bones from hence. {50:26} So Joseph died, [being] an hundred and ten years old: and they embalmed him, and he was put in a coffin in Egypt. RediSearch-1.2.2/src/tests/quantile_data.txt000066400000000000000000000123331364126773500210520ustar00rootroot000000000000008 5 26 12 5 235 13 6 28 30 3 3 3 3 5 2 33 7 2 4 7 12 14 5 8 3 10 4 5 3 6 6 209 20 3 10 14 3 4 6 8 5 11 7 3 2 3 3 212 5 222 4 10 10 5 6 3 8 3 10 254 220 2 3 5 24 5 4 222 7 3 3 223 8 15 12 14 14 3 2 2 3 13 3 11 4 4 6 5 7 13 5 3 5 2 5 3 5 2 7 15 17 14 3 6 6 3 17 5 4 7 6 4 4 8 6 8 3 9 3 6 3 4 5 3 3 660 4 6 10 3 6 3 2 5 13 2 4 4 10 4 8 4 3 7 9 9 3 10 37 3 13 4 12 3 6 10 8 5 21 2 3 8 3 2 3 3 4 12 2 4 8 8 4 3 2 20 1 6 32 2 11 6 18 3 8 11 3 212 3 4 2 6 7 12 11 3 2 16 10 6 4 6 3 2 7 3 2 2 2 2 5 6 4 3 10 3 4 6 5 3 4 4 5 6 4 3 4 4 5 7 5 5 3 2 7 2 4 12 4 5 6 2 4 4 8 4 15 13 7 16 5 3 23 5 5 7 3 2 9 8 7 5 8 11 4 10 76 4 47 4 3 2 7 4 2 3 37 10 4 2 20 5 4 4 10 10 4 3 7 23 240 7 13 5 5 3 3 2 5 4 2 8 7 19 2 23 8 7 2 5 3 8 3 8 13 5 5 5 2 3 23 4 9 8 4 3 3 5 220 2 3 4 6 14 3 53 6 2 5 18 6 3 219 6 5 2 5 3 6 5 15 4 3 17 3 2 4 7 2 3 3 4 4 3 2 664 6 3 23 5 5 16 5 8 2 4 2 24 12 3 2 3 5 8 3 5 4 3 14 3 5 8 2 3 7 9 4 2 3 6 8 4 3 4 6 5 3 3 6 3 19 4 4 6 3 6 3 5 22 5 4 4 3 8 11 4 9 7 6 13 4 4 4 6 17 9 3 3 3 4 3 221 5 11 3 4 2 12 6 3 5 7 5 7 4 9 7 14 37 19 217 16 3 5 2 2 7 19 7 6 7 4 24 5 11 4 7 7 9 13 3 4 3 6 28 4 4 5 5 2 5 6 4 4 6 10 5 4 3 2 3 3 6 5 5 4 3 2 3 7 4 6 18 16 8 16 4 5 8 6 9 13 1545 6 215 6 5 6 3 45 31 5 2 2 4 3 3 2 5 4 3 5 7 7 4 5 8 5 4 749 2 31 9 11 2 11 5 4 4 7 9 11 4 5 4 7 3 4 6 2 15 3 4 3 4 3 5 2 13 5 5 3 3 23 4 4 5 7 4 13 2 4 3 4 2 6 2 7 3 5 5 3 29 5 4 4 3 10 2 3 79 16 6 6 7 7 3 5 5 7 4 3 7 9 5 6 5 9 6 3 6 4 17 2 10 9 3 6 2 3 21 22 5 11 4 2 17 2 224 2 14 3 4 4 2 4 4 4 4 5 3 4 4 10 2 6 3 3 5 7 2 7 5 6 3 218 2 2 5 2 6 3 5 222 14 6 33 3 2 5 3 3 3 9 5 3 3 2 7 4 3 4 3 5 6 5 26 4 13 9 7 3 221 3 3 4 4 4 4 2 18 5 3 7 9 6 8 3 10 3 11 9 5 4 17 5 5 6 6 3 2 4 12 17 6 7 218 4 2 4 10 3 5 15 3 9 4 3 3 6 29 3 3 4 5 5 3 8 5 6 6 7 5 3 5 3 29 2 31 5 15 24 16 5 207 4 3 3 2 15 4 4 13 5 5 4 6 10 2 7 8 4 6 20 5 3 4 3 12 12 5 17 7 3 3 3 6 10 3 5 25 80 4 9 3 2 11 3 3 2 3 8 7 5 5 19 5 3 3 12 11 2 6 5 5 5 3 3 3 4 209 14 3 2 5 19 4 4 3 4 14 5 6 4 13 9 7 4 7 10 2 9 5 7 2 8 4 6 5 5 222 8 7 12 5 216 3 4 4 6 3 14 8 7 13 4 3 3 3 3 17 5 4 3 33 6 6 33 7 5 3 8 7 5 2 9 4 2 233 24 7 4 8 10 3 4 15 2 16 3 3 13 12 7 5 4 207 4 2 4 27 15 2 5 2 25 6 5 5 6 13 6 18 6 4 12 225 10 7 5 2 2 11 4 14 21 8 10 3 5 4 232 2 5 5 3 7 17 11 6 6 23 4 6 3 5 4 2 17 3 6 5 8 3 2 2 14 9 4 4 2 5 5 3 7 6 12 6 10 3 6 2 2 19 5 4 4 9 2 4 13 3 5 6 3 6 5 4 9 6 3 5 7 3 6 6 4 3 10 6 3 221 3 5 3 6 4 8 5 3 6 4 4 2 54 5 6 11 3 3 4 4 4 3 7 3 11 11 7 10 6 13 223 213 15 231 7 3 7 228 2 3 4 4 5 6 7 4 13 3 4 5 3 6 4 6 7 2 4 3 4 3 3 6 3 7 3 5 18 5 6 8 10 3 3 3 2 4 2 4 4 5 6 6 4 10 13 3 12 5 12 16 8 4 19 11 2 4 5 6 8 5 6 4 18 10 4 2 216 6 6 6 2 4 12 8 3 11 5 6 14 5 3 13 4 5 4 5 3 28 6 3 7 219 3 9 7 3 10 6 3 4 19 5 7 11 6 15 19 4 13 11 3 7 5 10 2 8 11 2 6 4 6 24 6 3 3 3 3 6 18 4 11 4 2 5 10 8 3 9 5 3 4 5 6 2 5 7 4 4 14 6 4 4 5 5 7 2 4 3 7 3 3 6 4 5 4 4 4 3 3 3 3 8 14 2 3 5 3 2 4 5 3 7 3 3 18 3 4 4 5 7 3 3 3 13 5 4 8 211 5 5 3 5 2 5 4 2 655 6 3 5 11 2 5 3 12 9 15 11 5 12 217 2 6 17 3 3 207 5 5 4 5 9 3 2 8 5 4 3 2 5 12 4 14 5 4 2 13 5 8 4 225 4 3 4 5 4 3 3 6 23 9 2 6 7 233 4 4 6 18 3 4 6 3 4 4 2 3 7 4 13 227 4 3 5 4 2 12 9 17 3 7 14 6 4 5 21 4 8 9 2 9 25 16 3 6 4 7 8 5 2 3 5 4 3 3 5 3 3 3 2 3 19 2 4 3 4 2 3 4 4 2 4 3 3 3 2 6 3 17 5 6 4 3 13 5 3 3 3 4 9 4 2 14 12 4 5 24 4 3 37 12 11 21 3 4 3 13 4 2 3 15 4 11 4 4 3 8 3 4 4 12 8 5 3 3 4 2 220 3 5 223 3 3 3 10 3 15 4 241 9 7 3 6 6 23 4 13 7 3 4 7 4 9 3 3 4 10 5 5 1 5 24 2 4 5 5 6 14 3 8 2 3 5 13 13 3 5 2 3 15 3 4 2 10 4 4 4 5 5 3 5 3 4 7 4 27 3 6 4 15 3 5 6 6 5 4 8 3 9 2 6 3 4 3 7 4 18 3 11 3 3 8 9 7 24 3 219 7 10 4 5 9 12 2 5 4 4 4 3 3 19 5 8 16 8 6 22 3 23 3 242 9 4 3 3 5 7 3 3 5 8 3 7 5 14 8 10 3 4 3 7 4 6 7 4 10 4 3 11 3 7 10 3 13 6 8 12 10 5 7 9 3 4 7 7 10 8 30 9 19 4 3 19 15 4 13 3 215 223 4 7 4 8 17 16 3 7 6 5 5 4 12 3 7 4 4 13 4 5 2 5 6 5 6 6 7 10 18 23 9 3 3 6 5 2 4 2 7 3 3 2 5 5 14 10 224 6 3 4 3 7 5 9 3 6 4 2 5 11 4 3 3 2 8 4 7 4 10 7 3 3 18 18 17 3 3 3 4 5 3 3 4 12 7 3 11 13 5 4 7 13 5 4 11 3 12 3 6 4 4 21 4 6 9 5 3 10 8 4 6 4 4 6 5 4 8 6 4 6 4 4 5 9 6 3 4 2 9 3 18 2 4 3 13 3 6 6 8 7 9 3 2 16 3 4 6 3 2 33 22 14 4 9 12 4 5 6 3 23 9 4 3 5 5 3 4 5 3 5 3 10 4 5 5 8 4 4 6 8 5 4 3 4 6 3 3 3 5 9 12 6 5 9 3 5 3 2 2 2 18 3 2 21 2 5 4 6 4 5 10 3 9 3 2 10 7 3 6 6 4 4 8 12 7 3 7 3 3 9 3 4 5 4 4 5 5 10 15 4 4 14 6 227 3 14 5 216 22 5 4 2 2 6 3 4 2 9 9 4 3 28 13 11 4 5 3 3 2 3 3 5 3 4 3 5 23 26 3 4 5 6 4 6 3 5 5 3 4 3 2 2 2 7 14 3 6 7 17 2 2 15 14 16 4 6 7 13 6 4 5 6 16 3 3 28 3 6 15 3 9 2 4 6 3 3 22 4 12 6 7 2 5 4 10 3 16 6 9 2 5 12 7 5 5 5 5 2 11 9 17 4 3 11 7 3 5 15 4 3 4 211 8 7 5 4 7 6 7 6 3 6 5 6 5 3 4 4 26 4 6 10 4 4 3 2 3 3 4 5 9 3 9 4 4 5 5 8 2 4 2 3 8 4 11 19 5 8 6 3 5 6 12 3 2 4 16 12 3 4 4 8 6 5 6 6 219 8 222 6 16 3 13 19 5 4 3 11 6 10 4 7 7 12 5 3 3 5 6 10 3 8 2 5 4 7 2 4 4 2 12 9 6 4 2 40 2 4 10 4 223 4 2 20 6 7 24 5 4 5 2 20 16 6 5 13 2 3 3 19 3 2 4 5 6 7 11 12 5 6 7 7 3 5 3 5 3 14 3 4 4 2 11 1 7 3 9 6 11 12 5 8 6 221 4 2 12 4 3 15 4 5 226 7 218 7 5 4 5 18 4 5 9 4 4 2 9 18 18 9 5 6 6 3 3 7 3 5 4 4 4 12 3 6 31 5 4 7 3 6 5 6 5 11 2 2 11 11 6 7 5 8 7 10 5 23 7 4 3 5 34 2 5 23 7 3 6 8 4 4 4 2 5 3 8 5 4 8 25 2 3 17 8 3 4 8 7 3 15 6 5 7 21 9 5 6 6 5 3 2 3 10 3 6 3 14 7 4 4 8 7 8 2 6 12 4 213 6 5 21 8 2 5 23 3 11 2 3 6 25 2 3 6 7 6 6 4 4 6 3 17 9 7 6 4 3 10 7 2 3 3 3 11 8 3 7 6 4 14 36 3 4 3 3 22 13 21 4 2 7 4 4 17 15 3 7 11 2 4 7 6 209 6 3 2 2 24 4 9 4 3 3 3 29 2 2 4 3 3 5 4 6 3 3 2 4 RediSearch-1.2.2/src/tests/test_aggregate.c000066400000000000000000000213571364126773500206350ustar00rootroot00000000000000#include #include #include #include #include "test_util.h" #include "time_sample.h" #include #include struct mockProcessorCtx { int counter; char **values; int numvals; SearchResult *res; }; #define NUM_RESULTS 300000 int mock_Next(ResultProcessorCtx *ctx, SearchResult *res) { struct mockProcessorCtx *p = ctx->privdata; if (p->counter >= NUM_RESULTS) return RS_RESULT_EOF; res->docId = ++p->counter; // printf("%s\n", p->values[p->counter % p->numvals]); RSFieldMap_Set(&res->fields, "value", RS_ConstStringValC(p->values[p->counter % p->numvals])); RSFieldMap_Set(&res->fields, "score", RS_NumVal((double)p->counter)); //* res = * p->res; return RS_RESULT_OK; } int testGroupBy() { char *values[] = {"foo", "bar", "baz"}; struct mockProcessorCtx ctx = { 0, values, 3, NewSearchResult(), }; ResultProcessor *mp = NewResultProcessor(NULL, &ctx); mp->Next = mock_Next; mp->Free = NULL; RSMultiKey *keys = RS_NewMultiKeyVariadic(2, "value", "val"); Grouper *gr = NewGrouper(keys, NULL); Grouper_AddReducer(gr, NewCount(NULL, "countie")); Grouper_AddReducer(gr, NewSum(NULL, "score", NULL)); ResultProcessor *gp = NewGrouperProcessor(gr, mp); SearchResult *res = NewSearchResult(); res->fields = NULL; TimeSample ts; TimeSampler_Start(&ts); while (ResultProcessor_Next(gp, res, 0) != RS_RESULT_EOF) { RSFieldMap_Print(res->fields); RSFieldMap_Reset(res->fields); // res->fields->len = 0; // res->fields = NULL; printf("\n"); } SearchResult_Free(res); // res = NewSearchResult(); TimeSampler_End(&ts); printf("%d iterations in %fms, %fns/iter", NUM_RESULTS, TimeSampler_DurationSec(&ts) * 1000, (double)(TimeSampler_DurationNS(&ts)) / (double)NUM_RESULTS); gp->Free(gp); RETURN_TEST_SUCCESS; } int mock_Next_Arr(ResultProcessorCtx *ctx, SearchResult *res) { struct mockProcessorCtx *p = ctx->privdata; if (p->counter >= NUM_RESULTS) return RS_RESULT_EOF; res->docId = ++p->counter; res->fields = NULL; // printf("%s\n", p->values[p->counter % p->numvals]); RSFieldMap_Set(&res->fields, "value", RS_StringArrayT(p->values, p->numvals, RSString_Const)); //* res = * p->res; return RS_RESULT_OK; } int testPlanSchema() { RSSortingTable *tbl = NewSortingTable(); RSSortingTable_Add(tbl, "txt", RSValue_String); RSSortingTable_Add(tbl, "num", RSValue_Number); const char *args[] = {"FT.AGGREGATE", "idx", "*", "VERBATIM", "APPLY", "@txt", "AS", "txt2", "APPLY", "upper(@txt)", "AS", "upper", "APPLY", "@num/2", "AS", "halfnum", "APPLY", "sqrt(@num)", "AS", "sqrt", "GROUPBY", "2", "@txt", "@num", "reduce", "count", "0", "as", "count", "reduce", "tolist", "1", "@txt", "as", "list"}; int len = sizeof(args) / sizeof(char *); CmdString *argv = CmdParser_NewArgListC(args, len); CmdArg *cmd = NULL; char *err; Aggregate_BuildSchema(); CmdParser_ParseCmd(GetAggregateRequestSchema(), &cmd, argv, len, &err, 1); if (err) puts(err); ASSERT(!err); ASSERT(cmd); AggregatePlan plan; int rc = AggregatePlan_Build(&plan, cmd, &err); if (err) puts(err); ASSERT(rc); ASSERT(!err); AggregateSchema sc = AggregatePlan_GetSchema(&plan, tbl); AggregateProperty expected[] = { {"txt", RSValue_String, Property_Field}, {"txt2", RSValue_String, Property_Projection}, {"upper", RSValue_String, Property_Projection}, {"num", RSValue_Number, Property_Field}, {"halfnum", RSValue_Number, Property_Projection}, {"sqrt", RSValue_Number, Property_Projection}, {"count", RSValue_Number, Property_Aggregate}, {"list", RSValue_Array, Property_Aggregate}, }; for (int i = 0; i < array_len(sc); i++) { ASSERT_STRING_EQ(expected[i].property, sc[i].property); ASSERT_EQUAL(expected[i].kind, sc[i].kind); ASSERT_EQUAL(expected[i].type, sc[i].type); printf("%s, %s, %d\n", sc[i].property, RSValue_TypeName(sc[i].type), sc[i].kind); } array_free(sc); RETURN_TEST_SUCCESS; } int testGroupSplit() { char *values[] = {("foo"), ("bar"), ("baz")}; struct mockProcessorCtx ctx = { 0, values, 3, NewSearchResult(), }; ResultProcessor *mp = NewResultProcessor(NULL, &ctx); mp->Next = mock_Next_Arr; mp->Free = NULL; RSMultiKey *keys = RS_NewMultiKeyVariadic(1, "value"); Grouper *gr = NewGrouper(keys, NULL); Grouper_AddReducer(gr, NewCount(NULL, "countie")); ResultProcessor *gp = NewGrouperProcessor(gr, mp); SearchResult *res = NewSearchResult(); res->fields = NULL; TimeSample ts; TimeSampler_Start(&ts); int i = 0; while (ResultProcessor_Next(gp, res, 0) != RS_RESULT_EOF) { RSFieldMap_Print(res->fields); RSValue *rv = RSFieldMap_Get(res->fields, "value"); ASSERT(!RSValue_IsNull(rv)); ASSERT(RSValue_IsString(rv)); ASSERT((!strcmp(rv->strval.str, values[0]) || !strcmp(rv->strval.str, values[1]) || !strcmp(rv->strval.str, values[2]))) ASSERT_EQUAL(NUM_RESULTS, RSFieldMap_Get(res->fields, "countie")->numval); RSFieldMap_Reset(res->fields); } SearchResult_Free(res); // res = NewSearchResult(); TimeSampler_End(&ts); printf("%d iterations in %fms, %fns/iter", NUM_RESULTS, TimeSampler_DurationSec(&ts) * 1000, (double)(TimeSampler_DurationNS(&ts)) / (double)NUM_RESULTS); gp->Free(gp); RETURN_TEST_SUCCESS; } int testAggregatePlan() { CmdString *argv = CmdParser_NewArgListV( 39, "FT.AGGREGATE", "idx", "foo bar", "APPLY", "@foo", "AS", "@bar", "GROUPBY", "2", "@foo", "@bar", "REDUCE", "count_distinct", "1", "@foo", "REDUCE", "count", "0", "AS", "num", "SORTBY", "4", "@foo", "ASC", "@bar", "DESC", "MAX", "5", "APPLY", "@num/3", "AS", "subnum", "APPLY", "timefmt(@subnum)", "AS", "datenum", "LIMIT", "0", "100"); CmdArg *cmd = NULL; char *err; Aggregate_BuildSchema(); CmdParser_ParseCmd(GetAggregateRequestSchema(), &cmd, argv, 39, &err, 1); ASSERT(!err); ASSERT(cmd); CmdArg_Print(cmd, 0); AggregatePlan plan; int rc = AggregatePlan_Build(&plan, cmd, &err); if (err) printf("%s\n", err); ASSERT(rc); ASSERT(!err); AggregatePlan_Print(&plan); AggregateSchema sc = AggregatePlan_GetSchema(&plan, NULL); for (size_t i = 0; i < array_len(sc); i++) { printf("%s => %d (%d)\n", sc[i].property, sc[i].type, sc[i].kind); } RETURN_TEST_SUCCESS } /* int testDistribute() { CmdString *argv = CmdParser_NewArgListV( 22, "FT.AGGREGATE", "idx", "foo", "GROUPBY", "1", "@bar", "REDUCE", "AVG", "1", "@foo", "AS", "num", "REDUCE", "MAX", "1", "@bar", "AS", "sum_bar", "SORTBY", "2", "@num", "DESC"); CmdArg *cmd = NULL; char *err; Aggregate_BuildSchema(); CmdParser_ParseCmd(GetAggregateRequestSchema(), &cmd, argv, 22, &err, 1); printf("%s\n", err); ASSERT(!err); ASSERT(cmd); CmdArg_Print(cmd, 0); AggregatePlan plan; int rc = AggregatePlan_Build(&plan, cmd, &err); if (err) printf("%s\n", err); ASSERT(rc); ASSERT(!err); AggregatePlan_Print(&plan); printf("----------------\n"); printf("----------------\n"); AggregatePlan distro; rc = AggregatePlan_MakeDistributed(&plan, &distro); ASSERT(rc); printf("----------------\n"); AggregatePlan_Print(&plan); printf("----------------\n"); AggregatePlan_Print(&distro); AggregatePlan_Free(&plan); RETURN_TEST_SUCCESS; } int testRevertToBasic() { CmdString *argv = CmdParser_NewArgListV(22, "FT.AGGREGATE", "idx", "foo", "GROUPBY", "1", "@bar", "REDUCE", "COUNT_DISTINCT", "1", "@foo", "AS", "num", "REDUCE", "MAX", "1", "@bar", "AS", "sum_bar", "SORTBY", "2", "@num", "DESC"); CmdArg *cmd = NULL; char *err; Aggregate_BuildSchema(); CmdParser_ParseCmd(GetAggregateRequestSchema(), &cmd, argv, 22, &err, 1); printf("%s\n", err); ASSERT(!err); ASSERT(cmd); CmdArg_Print(cmd, 0); AggregatePlan plan; int rc = AggregatePlan_Build(&plan, cmd, &err); if (err) printf("%s\n", err); ASSERT(rc); ASSERT(!err); AggregatePlan_Print(&plan); printf("----------------\n"); printf("----------------\n"); AggregatePlan distro; rc = AggregatePlan_MakeDistributed(&plan, &distro); ASSERT(rc); printf("----------------\n"); AggregatePlan_Print(&plan); printf("----------------\n"); AggregatePlan_Print(&distro); AggregatePlan_Free(&plan); RETURN_TEST_SUCCESS; } */ TEST_MAIN({ RMUTil_InitAlloc(); // TESTFUNC(testRevertToBasic); TESTFUNC(testGroupSplit); TESTFUNC(testGroupBy); TESTFUNC(testAggregatePlan); TESTFUNC(testPlanSchema); // TESTFUNC(testDistribute); }) RediSearch-1.2.2/src/tests/test_arr.c000066400000000000000000000034131364126773500174640ustar00rootroot00000000000000#include #include "test_util.h" #include typedef struct { int x; double y; } foo; int testStruct() { foo *arr = array_new(foo, 8); for (int i = 0; i < 10; i++) { arr = array_append(arr, (foo){i}); ASSERT_EQUAL(i + 1, array_len(arr)); } for (int i = 0; i < 10; i++) { ASSERT_EQUAL(i, arr[i].x); } array_foreach(arr, elem, printf("%d\n", elem.x)); array_free(arr); RETURN_TEST_SUCCESS; } int testScalar() { int *ia = array_new(int, 8); for (int i = 0; i < 100; i++) { ia = array_append(ia, i); ASSERT_EQUAL(i + 1, array_len(ia)); ASSERT_EQUAL(i, array_tail(ia)); } for (int i = 0; i < array_len(ia); i++) { ASSERT_EQUAL(i, ia[i]); printf("%d %zd\n", ia[i], array_len(ia)); } array_free(ia); RETURN_TEST_SUCCESS; } int testStrings() { char *strs[] = {"foo", "bar", "baz", NULL}; char **a = array_new(char *, 1); int i = 0; for (i = 0; strs[i] != NULL; i++) { a = array_append(a, strdup(strs[i])); ASSERT_EQUAL(i + 1, array_len(a)); ASSERT_STRING_EQ(strs[i], array_tail(a)); } for (int j = 0; j < i; j++) { ASSERT_STRING_EQ(strs[j], a[j]); // printf("%s\n", a[j]); } array_free_ex(a, free(*(void **)ptr)); RETURN_TEST_SUCCESS; } int testTrimm() { char *strs[] = {"foo", "bar", "baz", NULL}; char **a = array_new(char *, 16); int i = 0; for (i = 0; strs[i] != NULL; i++) { a = array_append(a, strdup(strs[i])); ASSERT_EQUAL(i + 1, array_len(a)); ASSERT_STRING_EQ(strs[i], array_tail(a)); } a = array_trimm_cap(a, 2); ASSERT_EQUAL(array_len(a), 2); array_trimm_len(a, 1); ASSERT_EQUAL(array_len(a), 1); RETURN_TEST_SUCCESS; } TEST_MAIN({ TESTFUNC(testStruct); TESTFUNC(testStrings); TESTFUNC(testScalar); TESTFUNC(testTrimm); }) RediSearch-1.2.2/src/tests/test_array.c000066400000000000000000000012231364126773500200130ustar00rootroot00000000000000#include #include #include "util/array.h" #include "rmutil/alloc.h" #include "test_util.h" int testArray() { Array arr; Array_Init(&arr); ASSERT_EQUAL(0, arr.capacity); ASSERT_EQUAL(0, arr.len); ASSERT(arr.data == NULL); void *p = Array_Add(&arr, 2); ASSERT_EQUAL(16, arr.capacity); ASSERT_EQUAL(2, arr.len); ASSERT(p == arr.data); p = Array_Add(&arr, 20); ASSERT_EQUAL(32, arr.capacity); ASSERT_EQUAL(22, arr.len); ASSERT((char *)p == arr.data + 2); Array_ShrinkToSize(&arr); ASSERT_EQUAL(22, arr.capacity); Array_Free(&arr); return 0; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testArray); })RediSearch-1.2.2/src/tests/test_blkalloc.c000066400000000000000000000037311364126773500204660ustar00rootroot00000000000000#include "../util/block_alloc.h" #include "test_util.h" #include #include int testBlockAlloc() { BlkAlloc alloc; BlkAlloc_Init(&alloc); ASSERT(alloc.last == NULL); ASSERT(alloc.root == NULL); char *buf = BlkAlloc_Alloc(&alloc, 4, 16); ASSERT(buf != NULL); ASSERT(alloc.last != NULL); ASSERT(alloc.last == alloc.root); ASSERT(alloc.root->numUsed == 4); ASSERT(alloc.root->next == NULL); char *buf2 = BlkAlloc_Alloc(&alloc, 12, 16); ASSERT(buf2 != NULL); ASSERT(buf2 == buf + 4); ASSERT(alloc.root == alloc.last); char *buf3 = BlkAlloc_Alloc(&alloc, 4, 16); ASSERT(buf3 != NULL); ASSERT(alloc.root != alloc.last); ASSERT(alloc.last->numUsed == 4); BlkAllocBlock *lastHead = alloc.last; // Alloc a new item char *buf4 = BlkAlloc_Alloc(&alloc, 16, 16); ASSERT(alloc.last != lastHead); BlkAlloc_Clear(&alloc, NULL, NULL, 0); ASSERT(alloc.root == alloc.last && alloc.last == NULL); ASSERT(alloc.avail != NULL); for (BlkAllocBlock *blk = alloc.root; blk; blk = blk->next) { ASSERT(blk->capacity > 0); } BlkAllocBlock *oldAvail = alloc.avail; buf = BlkAlloc_Alloc(&alloc, 4, 16); ASSERT(buf != NULL); ASSERT(alloc.root == oldAvail); ASSERT(alloc.avail != oldAvail); BlkAlloc_FreeAll(&alloc, NULL, NULL, 0); return 0; } typedef struct { char fillerSpace[32]; uint32_t num; char trailerSpace[43]; } myDummy; static void freeFunc(void *elem, void *p) { myDummy *dummy = elem; uint32_t *count = p; assert(dummy->num == *count); (*count)++; } static int testFreeFunc() { BlkAlloc alloc; BlkAlloc_Init(&alloc); uint32_t count = 0; for (size_t i = 0; i < 30; i++) { myDummy *dummy = BlkAlloc_Alloc(&alloc, sizeof(*dummy), sizeof(*dummy) * 4); dummy->num = i; } // Let's check if the free func works appropriately BlkAlloc_FreeAll(&alloc, freeFunc, &count, sizeof(myDummy)); ASSERT(count == 30); return 0; } TEST_MAIN({ TESTFUNC(testBlockAlloc); TESTFUNC(testFreeFunc); })RediSearch-1.2.2/src/tests/test_cntokenize.c000066400000000000000000000032001364126773500210430ustar00rootroot00000000000000// TODO: We might not need all these includes #include "../buffer.h" #include "../index.h" #include "../inverted_index.h" #include "../index_result.h" #include "../query_parser/tokenizer.h" #include "../rmutil/alloc.h" #include "../spec.h" #include "../tokenize.h" #include "../varint.h" #include "test_util.h" #include "time_sample.h" #include "../rmutil/alloc.h" #include #include #include #include #include static char *getFile(const char *name) { FILE *fp = fopen(name, "rb"); if (fp == NULL) { perror(name); abort(); } if (fseek(fp, 0, SEEK_END) != 0) { perror(name); abort(); } size_t nbuf = ftell(fp); if (fseek(fp, 0, SEEK_SET) != 0) { perror(name); abort(); } if (nbuf == 0) { fprintf(stderr, "File is empty!\n"); abort(); } char *buf = malloc(nbuf + 1); buf[nbuf] = '\0'; size_t nr, offset = 0; do { nr = fread(buf + offset, 1, nbuf - offset, fp); offset += nr; } while (nr > 0); if (strlen(buf) == 0) { perror(name); abort(); } fclose(fp); return buf; } static int testCnTokenize(void) { char *cnTxt = getFile("cn_sample.txt"); RSTokenizer *cnTok = NewChineseTokenizer(NULL, NULL, 0); ASSERT(cnTok != NULL); cnTok->Start(cnTok, cnTxt, strlen(cnTxt), 0); Token t; uint32_t pos; while ((pos = cnTok->Next(cnTok, &t)) != 0) { printf("Token: %.*s. Raw: %.*s. Pos=%u\n", (int)t.tokLen, t.tok, (int)t.rawLen, t.raw, t.pos); ASSERT(pos == t.pos); } cnTok->Free(cnTok); free(cnTxt); return 0; } TEST_MAIN({ // LOGGING_INIT(L_INFO); RMUTil_InitAlloc(); TESTFUNC(testCnTokenize); });RediSearch-1.2.2/src/tests/test_expr.c000066400000000000000000000130641364126773500176610ustar00rootroot00000000000000#include "test_util.h" #include "time_sample.h" #include #include #include int testExpr() { RSExpr *l = RS_NewNumberLiteral(2); RSExpr *r = RS_NewNumberLiteral(4); RSExpr *op = RS_NewOp('+', l, r); RSValue val; char *err; int rc = RSExpr_Eval(NULL, op, &val, &err); ASSERT_EQUAL(EXPR_EVAL_OK, rc); ASSERT_EQUAL(RSValue_Number, val.t); ASSERT_EQUAL(6, val.numval); RETURN_TEST_SUCCESS; } int testParser() { char *e = "(((2 + 2) * (3 / 4) + 2 % 3 - 0.43) ^ -3)"; char *err = NULL; RSExpr *root = RSExpr_Parse(e, strlen(e), &err); if (err != NULL) { FAIL("Error parsing expression: %s", err); } ASSERT(root != NULL); RSExpr_Print(root); printf("\n"); RSValue val; int rc = RSExpr_Eval(NULL, root, &val, &err); ASSERT_EQUAL(EXPR_EVAL_OK, rc); ASSERT_EQUAL(RSValue_Number, val.t); RSValue_Print(&val); RETURN_TEST_SUCCESS; } int testGetFields() { char *e = "@foo + sqrt(@bar) / @baz + ' '"; char *err = NULL; RSExpr *root = RSExpr_Parse(e, strlen(e), &err); if (err != NULL) { FAIL("Error parsing expression: %s", err); } const char **fields = Expr_GetRequiredFields(root); ASSERT_EQUAL(3, array_len(fields)); ASSERT_STRING_EQ("foo", fields[0]); ASSERT_STRING_EQ("bar", fields[1]); ASSERT_STRING_EQ("baz", fields[2]); array_free(fields); RETURN_TEST_SUCCESS; } int testFunction() { // RSFunctionRegistry funcs = {0}; RegisterMathFunctions(); char *e = "floor(log2(35) + sqrt(4) % 10) - abs(-5/20)"; char *err = NULL; RSExpr *root = RSExpr_Parse(e, strlen(e), &err); if (err != NULL) { FAIL("Error parsing expression: %s", err); } ASSERT(root != NULL); RSExpr_Print(root); RSExprEvalCtx ctx = {}; RSValue val; int rc = RSExpr_Eval(&ctx, root, &val, &err); if (err != NULL) { FAIL("Error evaluating expression: %s", err); } ASSERT_EQUAL(EXPR_EVAL_OK, rc); ASSERT_EQUAL(RSValue_Number, val.t); RSValue_Print(&val); RETURN_TEST_SUCCESS; } int testEval(const char *e, SearchResult *r, int expected, char **err) { RSExpr *root = RSExpr_Parse(e, strlen(e), err); if (root == NULL) return 0; // RSExpr_Print(root); RSExprEvalCtx ctx = {.r = r}; RSValue val; int rc = RSExpr_Eval(&ctx, root, &val, err); if (*err != NULL) { return 0; } // printf(" => "); // RSValue_Print(&val); // printf("\n-----\n"); if ((int)val.numval != expected) return 0; return 1; } int testPredicate() { SearchResult *rs = NewSearchResult(); rs->docId = 1; RSFieldMap_Add(&rs->fields, "foo", RS_NumVal(1)); RSFieldMap_Add(&rs->fields, "bar", RS_NumVal(2)); char *err = NULL; #define TEST_EVAL(e, rs, expected, err) \ { \ if (!testEval(e, rs, expected, &err)) { \ if (err) FAIL("%s", err); \ FAIL("Expression eval failed: %s\n", e); \ } \ } TEST_EVAL("1 == 1", rs, 1, err); TEST_EVAL("1 < 2", rs, 1, err); TEST_EVAL("1 <= 1", rs, 1, err); TEST_EVAL("-1 == -1", rs, 1, err); TEST_EVAL("-1 == 1", rs, 0, err); TEST_EVAL("1 < 1", rs, 0, err); TEST_EVAL("1 != 1", rs, 0, err); TEST_EVAL("1 != 'foo'", rs, 1, err); TEST_EVAL("1 != NULL", rs, 1, err); TEST_EVAL("'foo' == 'foo'", rs, 1, err); TEST_EVAL("'foo' != 'bar'", rs, 1, err); TEST_EVAL("'foo' != 'foo'", rs, 0, err); TEST_EVAL("'foo' < 'goo'", rs, 1, err); TEST_EVAL("@foo == @bar", rs, 0, err); TEST_EVAL("@foo != @bar", rs, 1, err); TEST_EVAL("@foo != NULL", rs, 1, err); TEST_EVAL("@foo < @bar", rs, 1, err); TEST_EVAL("@foo <= @bar", rs, 1, err); TEST_EVAL("@foo >= @bar", rs, 0, err); TEST_EVAL("@foo > @bar", rs, 0, err); TEST_EVAL("NULL == NULL", rs, 1, err); TEST_EVAL("0 == NULL", rs, 0, err); TEST_EVAL("1 == 1 && 2 ==2 ", rs, 1, err); TEST_EVAL("1 == 1 && 1 ==2 ", rs, 0, err); TEST_EVAL("1 == 1 || 1 ==2 ", rs, 1, err); TEST_EVAL("1 == 3 || 1 ==2 ", rs, 0, err); TEST_EVAL("!(1 == 3)", rs, 1, err); TEST_EVAL("!(1 == 3) || 2", rs, 1, err); TEST_EVAL("!0", rs, 1, err); TEST_EVAL("!1", rs, 0, err); TEST_EVAL("!('foo' == 'bar')", rs, 1, err); TEST_EVAL("!NULL", rs, 1, err); RETURN_TEST_SUCCESS; } int testNull() { char *e = "NULL"; char *err = NULL; RSExpr *root = RSExpr_Parse(e, strlen(e), &err); ASSERT(root != NULL); ASSERT(err == NULL); RSExprEvalCtx ctx = {}; RSValue val; int rc = RSExpr_Eval(&ctx, root, &val, &err); if (err != NULL) { FAIL("Error evaluating expression: %s", err); } ASSERT_EQUAL(EXPR_EVAL_OK, rc); ASSERT(RSValue_IsNull(&val)); e = "null"; root = RSExpr_Parse(e, strlen(e), &err); ASSERT(root == NULL); ASSERT(err != NULL); RETURN_TEST_SUCCESS; } int testPropertyFetch() { RSFunctionRegistry funcs = {0}; RegisterMathFunctions(&funcs); char *e = "log(@foo) + 2*sqrt(@bar)"; char *err = NULL; SearchResult *rs = NewSearchResult(); rs->docId = 1; RSFieldMap_Add(&rs->fields, "foo", RS_NumVal(10)); RSFieldMap_Add(&rs->fields, "bar", RS_NumVal(10)); RSExpr *root = RSExpr_Parse(e, strlen(e), &err); RSExprEvalCtx ctx = {.r = rs}; RSValue val; int rc = RSExpr_Eval(&ctx, root, &val, &err); if (err != NULL) { FAIL("Error evaluating expression: %s", err); } ASSERT_EQUAL(EXPR_EVAL_OK, rc); ASSERT_EQUAL(RSValue_Number, val.t); RSValue_Print(&val); RETURN_TEST_SUCCESS; RETURN_TEST_SUCCESS; } TEST_MAIN({ TESTFUNC(testNull); TESTFUNC(testPredicate); TESTFUNC(testExpr); TESTFUNC(testParser); TESTFUNC(testFunction); TESTFUNC(testPropertyFetch); TESTFUNC(testGetFields); });RediSearch-1.2.2/src/tests/test_extensions.c000066400000000000000000000114401364126773500210760ustar00rootroot00000000000000#include "test_util.h" #include "../extension.h" #include "../redisearch.h" #include "../search_request.h" #include "../query.h" #include "../stopwords.h" #include "../ext/default.h" #include "../rmutil/alloc.h" struct privdata { int freed; }; static const char *getExtensionPath(void) { const char *extPath = getenv("EXT_TEST_PATH"); if (extPath == NULL || *extPath == 0) { extPath = "./ext-example/example.so"; } return extPath; } /* Calculate sum(TF-IDF)*document score for each result */ double myScorer(RSScoringFunctionCtx *ctx, RSIndexResult *h, RSDocumentMetadata *dmd, double minScore) { return 3.141; } void myExpander(RSQueryExpanderCtx *ctx, RSToken *token) { ctx->ExpandToken(ctx, strdup("foo"), 3, 0x00ff); } int numFreed = 0; void myFreeFunc(void *p) { numFreed++; printf("Freeing %p %d\n", p, numFreed); free(p); } /* Register the default extension */ int myRegisterFunc(RSExtensionCtx *ctx) { struct privdata *spd = malloc(sizeof(struct privdata)); spd->freed = 0; if (ctx->RegisterScoringFunction("myScorer", myScorer, myFreeFunc, spd) == REDISEARCH_ERR) { return REDISEARCH_ERR; } spd = malloc(sizeof(struct privdata)); spd->freed = 0; /* Snowball Stemmer is the default expander */ if (ctx->RegisterQueryExpander("myExpander", myExpander, myFreeFunc, spd) == REDISEARCH_ERR) { return REDISEARCH_ERR; } return REDISEARCH_OK; } int testExtenionRegistration() { Extensions_Init(); numFreed = 0; ASSERT(REDISEARCH_OK == Extension_Load("testung", myRegisterFunc)); RSQueryExpanderCtx qexp; ExtQueryExpanderCtx *qx = Extensions_GetQueryExpander(&qexp, "myExpander"); ASSERT(qx != NULL); ASSERT(qx->exp == myExpander); ASSERT(qx->ff == myFreeFunc); ASSERT(qx->privdata != NULL); ASSERT(qexp.privdata == qx->privdata); qx->ff(qx->privdata); ASSERT_EQUAL(1, numFreed); // verify case sensitivity and null on not-found ASSERT(NULL == Extensions_GetQueryExpander(&qexp, "MYEXPANDER")); RSScoringFunctionCtx scxp; ExtScoringFunctionCtx *sx = Extensions_GetScoringFunction(&scxp, "myScorer"); ASSERT(sx != NULL); ASSERT(sx->privdata = scxp.privdata); ASSERT(sx->ff = myFreeFunc); ASSERT(sx->sf = myScorer); sx->ff(sx->privdata); ASSERT_EQUAL(2, numFreed); ASSERT(NULL == Extensions_GetScoringFunction(&scxp, "MYScorer")); return 0; } int testDynamicLoading() { Extensions_Init(); char *errMsg = NULL; int rc = Extension_LoadDynamic(getExtensionPath(), &errMsg); ASSERT_EQUAL(rc, REDISMODULE_OK); if (errMsg != NULL) { FAIL("Error loading extension: %s", errMsg); } RSScoringFunctionCtx scxp; ExtScoringFunctionCtx *sx = Extensions_GetScoringFunction(&scxp, "example_scorer"); ASSERT(sx != NULL); RSQueryExpanderCtx qxcp; ExtQueryExpanderCtx *qx = Extensions_GetQueryExpander(&qxcp, "example_expander"); ASSERT(qx != NULL) return 0; } int testQueryExpander() { Extensions_Init(); numFreed = 0; ASSERT(REDISEARCH_OK == Extension_Load("testung", myRegisterFunc)); const char *qt = "hello world"; char *err = NULL; RSSearchOptions opt = (RSSearchOptions){.flags = RS_DEFAULT_QUERY_FLAGS, .fieldMask = RS_FIELDMASK_ALL, .indexName = "idx", .language = "en", .expander = "myExpander", .scorer = "myScore"}; QueryParseCtx *q = NewQueryParseCtx(NULL, qt, strlen(qt), &opt); // ASSERT(q->expander = myExpander); // ASSERT(q->expanderFree = myFreeFunc); // ASSERT(q->expCtx.privdata != NULL); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); ASSERT_EQUAL(q->numTokens, 2) Query_Expand(q, opt.expander); //__queryNode_Print(n, 0); ASSERT_EQUAL(q->numTokens, 4) ASSERT(n->pn.children[0]->type == QN_UNION); ASSERT_STRING_EQ("hello", n->pn.children[0]->un.children[0]->tn.str); ASSERT(n->pn.children[0]->un.children[0]->tn.expanded == 0) ASSERT_STRING_EQ("foo", n->pn.children[0]->un.children[1]->tn.str); ASSERT_EQUAL(0x00FF, n->pn.children[0]->un.children[1]->tn.flags); ASSERT(n->pn.children[0]->un.children[1]->tn.expanded != 0); ASSERT(n->pn.children[1]->type == QN_UNION); ASSERT_STRING_EQ("world", n->pn.children[1]->un.children[0]->tn.str); ASSERT_STRING_EQ("foo", n->pn.children[1]->un.children[1]->tn.str); RSQueryTerm *qtr = NewQueryTerm(&n->pn.children[1]->un.children[1]->tn, 1); ASSERT_STRING_EQ(qtr->str, n->pn.children[1]->un.children[1]->tn.str); ASSERT_EQUAL(0x00FF, qtr->flags); Term_Free(qtr); Query_Free(q); ASSERT_EQUAL(1, numFreed); RETURN_TEST_SUCCESS; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testExtenionRegistration); TESTFUNC(testQueryExpander); TESTFUNC(testDynamicLoading); });RediSearch-1.2.2/src/tests/test_index.c000066400000000000000000001027431364126773500200150ustar00rootroot00000000000000#include "../buffer.h" #include "../index.h" #include "../inverted_index.h" #include "../index_result.h" #include "../query_parser/tokenizer.h" #include "../rmutil/alloc.h" #include "../spec.h" #include "../tokenize.h" #include "../varint.h" #include "test_util.h" #include "time_sample.h" #include "../rmutil/alloc.h" #include #include #include #include #include RSOffsetIterator _offsetVector_iterate(RSOffsetVector *v); int testVarint() { VarintVectorWriter *vw = NewVarintVectorWriter(8); uint32_t expected[5] = {10, 1000, 1020, 10000, 10020}; for (int i = 0; i < 5; i++) { VVW_Write(vw, expected[i]); } // VVW_Write(vw, 100); // printf("%ld %ld\n", BufferLen(vw->bw.buf), vw->bw.buf->cap); VVW_Truncate(vw); RSOffsetVector vec = (RSOffsetVector)VVW_OFFSETVECTOR_INIT(vw); // Buffer_Seek(vw->bw.buf, 0); RSOffsetIterator it = _offsetVector_iterate(&vec); int x = 0; uint32_t n = 0; while (RS_OFFSETVECTOR_EOF != (n = it.Next(it.ctx, NULL))) { ASSERTM(n == expected[x++], "Wrong number decoded"); // printf("%d %d\n", x, n); } it.Free(it.ctx); VVW_Free(vw); return 0; } int testDistance() { VarintVectorWriter *vw = NewVarintVectorWriter(8); VarintVectorWriter *vw2 = NewVarintVectorWriter(8); VarintVectorWriter *vw3 = NewVarintVectorWriter(8); VVW_Write(vw, 1); VVW_Write(vw, 9); VVW_Write(vw, 13); VVW_Write(vw, 16); VVW_Write(vw, 22); VVW_Write(vw2, 4); VVW_Write(vw2, 7); VVW_Write(vw2, 32); VVW_Write(vw3, 20); VVW_Write(vw3, 25); VVW_Truncate(vw); VVW_Truncate(vw2); RSIndexResult *tr1 = NewTokenRecord(NULL, 1); tr1->docId = 1; tr1->term.offsets = (RSOffsetVector)(RSOffsetVector)VVW_OFFSETVECTOR_INIT(vw); RSIndexResult *tr2 = NewTokenRecord(NULL, 1); tr2->docId = 1; tr2->term.offsets = (RSOffsetVector)(RSOffsetVector)VVW_OFFSETVECTOR_INIT(vw2); RSIndexResult *res = NewIntersectResult(2, 1); AggregateResult_AddChild(res, tr1); AggregateResult_AddChild(res, tr2); int delta = IndexResult_MinOffsetDelta(res); ASSERT_EQUAL(2, delta); ASSERT_EQUAL(0, IndexResult_IsWithinRange(res, 0, 0)); ASSERT_EQUAL(0, IndexResult_IsWithinRange(res, 0, 1)); ASSERT_EQUAL(0, IndexResult_IsWithinRange(res, 1, 1)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 1, 0)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 2, 1)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 2, 0)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 3, 1)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 4, 0)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 4, 1)); ASSERT_EQUAL(1, IndexResult_IsWithinRange(res, 5, 1)); RSIndexResult *tr3 = NewTokenRecord(NULL, 1); tr3->docId = 1; tr3->term.offsets = (RSOffsetVector)VVW_OFFSETVECTOR_INIT(vw3); AggregateResult_AddChild(res, tr3); delta = IndexResult_MinOffsetDelta(res); ASSERT_EQUAL(7, delta); // test merge iteration RSOffsetIterator it = RSIndexResult_IterateOffsets(res); uint32_t expected[] = {1, 4, 7, 9, 13, 16, 20, 22, 25, 32, RS_OFFSETVECTOR_EOF}; uint32_t rc; int i = 0; do { rc = it.Next(it.ctx, NULL); ASSERT_EQUAL(rc, (expected[i++])); } while (rc != RS_OFFSETVECTOR_EOF); it.Free(it.ctx); IndexResult_Free(tr1); IndexResult_Free(tr2); IndexResult_Free(tr3); IndexResult_Free(res); VVW_Free(vw); VVW_Free(vw2); VVW_Free(vw3); return 0; } int testIndexReadWriteFlags(uint32_t indexFlags) { InvertedIndex *idx = NewInvertedIndex(indexFlags, 1); IndexEncoder enc = InvertedIndex_GetEncoder(indexFlags); ASSERT(enc != NULL); for (int i = 0; i < 200; i++) { // if (i % 10000 == 1) { // printf("iw cap: %ld, iw size: %d, numdocs: %d\n", w->cap, IW_Len(w), // w->ndocs); // } ForwardIndexEntry h; h.docId = i; h.fieldMask = 1; h.freq = (1 + i % 100) / (float)101; h.vw = NewVarintVectorWriter(8); for (int n = 0; n < i % 4; n++) { VVW_Write(h.vw, n); } VVW_Truncate(h.vw); InvertedIndex_WriteForwardIndexEntry(idx, enc, &h); // printf("doc %d, score %f offset %zd\n", h.docId, h.docScore, w->bw.buf->offset); VVW_Free(h.vw); } ASSERT_EQUAL(200, idx->numDocs); ASSERT_EQUAL(2, idx->size); ASSERT_EQUAL(199, idx->lastId); // IW_MakeSkipIndex(w, NewMemoryBuffer(8, BUFFER_WRITE)); // for (int x = 0; x < w->skipIdx.len; x++) { // printf("Skip entry %d: %d, %d\n", x, w->skipIdx.entries[x].docId, // w->skipIdx.entries[x].offset); // } // printf("iw cap: %ld, iw size: %ld, numdocs: %d\n", w->bw.buf->cap, IW_Len(w), w->ndocs); for (int xx = 0; xx < 1; xx++) { // printf("si: %d\n", si->len); IndexReader *ir = NewTermIndexReader(idx, NULL, RS_FIELDMASK_ALL, NULL, 1); // RSIndexResult *h = NULL; int n = 0; int rc; while (IR_HasNext(ir)) { if ((rc = IR_Read(ir, &h)) == INDEXREAD_EOF) { break; } ASSERT_EQUAL(INDEXREAD_OK, rc); ASSERT_EQUAL(h->docId, n); n++; } // for (int z= 0; z < 10; z++) { // clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start_time); // IR_SkipTo(ir, 900001, &h); // clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end_time); // long diffInNanos = end_time.tv_nsec - start_time.tv_nsec; // printf("Time elapsed: %ldnano\n", diffInNanos); // //IR_Free(ir); // } // IndexResult_Free(&h); IR_Free(ir); } // IW_Free(w); // // overriding the regular IW_Free because we already deleted the buffer InvertedIndex_Free(idx); return 0; } int testIndexReadWrite() { for (uint32_t i = 0; i < 32; i++) { // printf("Testing %u BEGIN\n", i); int rv = testIndexReadWriteFlags(i); // printf("Testing %u END\n", i); if (rv != 0) { return -1; } } return 0; } InvertedIndex *createIndex(int size, int idStep) { InvertedIndex *idx = NewInvertedIndex(INDEX_DEFAULT_FLAGS, 1); IndexEncoder enc = InvertedIndex_GetEncoder(idx->flags); t_docId id = idStep; for (int i = 0; i < size; i++) { // if (i % 10000 == 1) { // printf("iw cap: %ld, iw size: %d, numdocs: %d\n", w->cap, IW_Len(w), // w->ndocs); // } ForwardIndexEntry h; h.docId = id; h.fieldMask = 1; h.freq = 1; h.term = "hello"; h.len = 5; h.vw = NewVarintVectorWriter(8); for (int n = idStep; n < idStep + i % 4; n++) { VVW_Write(h.vw, n); } InvertedIndex_WriteForwardIndexEntry(idx, enc, &h); VVW_Free(h.vw); id += idStep; } // printf("BEFORE: iw cap: %ld, iw size: %zd, numdocs: %d\n", w->bw.buf->cap, // IW_Len(w), w->ndocs); return idx; } int printIntersect(void *ctx, RSIndexResult *hits, int argc) { printf("intersect: %llu\n", (unsigned long long)hits[0].docId); return 0; } int testReadIterator() { InvertedIndex *idx = createIndex(10, 1); IndexReader *r1 = NewTermIndexReader(idx, NULL, RS_FIELDMASK_ALL, NULL, 1); // RSIndexResult *h = NULL; IndexIterator *it = NewReadIterator(r1); int i = 1; while (it->HasNext(it->ctx)) { if (it->Read(it->ctx, &h) == INDEXREAD_EOF) { break; } // printf("Iter got %d\n", h.docId); ASSERT(h->docId == i++); } ASSERT(i == 11); it->Free(it); // IndexResult_Free(&h); InvertedIndex_Free(idx); return 0; } int testUnion() { InvertedIndex *w = createIndex(10, 2); InvertedIndex *w2 = createIndex(10, 3); IndexReader *r1 = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 1); // IndexReader *r2 = NewTermIndexReader(w2, NULL, RS_FIELDMASK_ALL, NULL, 1); // // printf("Reading!\n"); IndexIterator **irs = calloc(2, sizeof(IndexIterator *)); irs[0] = NewReadIterator(r1); irs[1] = NewReadIterator(r2); IndexIterator *ui = NewUnionIterator(irs, 2, NULL, 0, 1); RSIndexResult *h = NULL; int expected[] = {2, 3, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 27, 30}; int i = 0; while (ui->Read(ui->ctx, &h) != INDEXREAD_EOF) { // printf("%d <=> %d\n", h.docId, expected[i]); ASSERT(h->docId == expected[i++]); RSIndexResult *copy = IndexResult_DeepCopy(h); ASSERT(copy != NULL); ASSERT(copy != h); ASSERT(copy->isCopy == 1); ASSERT(copy->docId == h->docId); ASSERT(copy->type == h->type); IndexResult_Free(copy); // printf("%d, ", h.docId); } ui->Free(ui); // IndexResult_Free(&h); InvertedIndex_Free(w); InvertedIndex_Free(w2); return 0; } int testWeight() { InvertedIndex *w = createIndex(10, 1); InvertedIndex *w2 = createIndex(10, 2); IndexReader *r1 = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 0.5); // IndexReader *r2 = NewTermIndexReader(w2, NULL, RS_FIELDMASK_ALL, NULL, 1); // // printf("Reading!\n"); IndexIterator **irs = calloc(2, sizeof(IndexIterator *)); irs[0] = NewReadIterator(r1); irs[1] = NewReadIterator(r2); IndexIterator *ui = NewUnionIterator(irs, 2, NULL, 0, 0.8); RSIndexResult *h = NULL; int expected[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 16, 18, 20}; int i = 0; while (ui->Read(ui->ctx, &h) != INDEXREAD_EOF) { // printf("%d <=> %d\n", h.docId, expected[i]); ASSERT(h->docId == expected[i++]); ASSERT_EQUAL(h->weight, 0.8); if (h->agg.numChildren == 2) { ASSERT_EQUAL(h->agg.children[0]->weight, 0.5); ASSERT_EQUAL(h->agg.children[1]->weight, 1); } else { if (i <= 10) { ASSERT_EQUAL(h->agg.children[0]->weight, 0.5); } else { ASSERT_EQUAL(h->agg.children[0]->weight, 1); } } } ui->Free(ui); // IndexResult_Free(&h); InvertedIndex_Free(w); InvertedIndex_Free(w2); return 0; } int testNot() { InvertedIndex *w = createIndex(16, 1); // not all numbers that divide by 3 InvertedIndex *w2 = createIndex(10, 3); IndexReader *r1 = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 1); // IndexReader *r2 = NewTermIndexReader(w2, NULL, RS_FIELDMASK_ALL, NULL, 1); // // printf("Reading!\n"); IndexIterator **irs = calloc(2, sizeof(IndexIterator *)); irs[0] = NewReadIterator(r1); irs[1] = NewNotIterator(NewReadIterator(r2), w2->lastId, 1); IndexIterator *ui = NewIntersecIterator(irs, 2, NULL, RS_FIELDMASK_ALL, -1, 0, 1); RSIndexResult *h = NULL; int expected[] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16}; int i = 0; while (ui->Read(ui->ctx, &h) != INDEXREAD_EOF) { // printf("%d <=> %d\n", h->docId, expected[i]); ASSERT(h->docId == expected[i++]); // printf("%d, ", h.docId); } ui->Free(ui); // IndexResult_Free(&h); InvertedIndex_Free(w); InvertedIndex_Free(w2); return 0; } int testPureNot() { InvertedIndex *w = createIndex(10, 3); IndexReader *r1 = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 1); // printf("last id: %llu\n", (unsigned long long)w->lastId); IndexIterator *ir = NewNotIterator(NewReadIterator(r1), w->lastId + 5, 1); RSIndexResult *h = NULL; int expected[] = {1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, 31, 32, 33, 34, 35}; int i = 0; while (ir->Read(ir->ctx, &h) != INDEXREAD_EOF) { // printf("%d <=> %d\n", h->docId, expected[i]); ASSERT(h->docId == expected[i++]); } ir->Free(ir); InvertedIndex_Free(w); return 0; } int testOptional() { InvertedIndex *w = createIndex(16, 1); // not all numbers that divide by 3 InvertedIndex *w2 = createIndex(10, 3); IndexReader *r1 = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 1); // IndexReader *r2 = NewTermIndexReader(w2, NULL, RS_FIELDMASK_ALL, NULL, 1); // // printf("Reading!\n"); IndexIterator **irs = calloc(2, sizeof(IndexIterator *)); irs[0] = NewReadIterator(r1); irs[1] = NewOptionalIterator(NewReadIterator(r2), w2->lastId, 1); IndexIterator *ui = NewIntersecIterator(irs, 2, NULL, RS_FIELDMASK_ALL, -1, 0, 1); RSIndexResult *h = NULL; int i = 1; while (ui->Read(ui->ctx, &h) != INDEXREAD_EOF) { // printf("%d <=> %d\n", h->docId, expected[i]); ASSERT(h->docId == i); if (i > 0 && i % 3 == 0) { ASSERT(h->agg.children[1]->freq == 1) } else { ASSERT(h->agg.children[1]->freq == 0) } // printf("%d, ", h.docId); } ui->Free(ui); // IndexResult_Free(&h); InvertedIndex_Free(w); InvertedIndex_Free(w2); return 0; } int testNumericInverted() { InvertedIndex *idx = NewInvertedIndex(Index_StoreNumeric, 1); for (int i = 0; i < 75; i++) { size_t sz = InvertedIndex_WriteNumericEntry(idx, i + 1, (double)(i + 1)); // printf("written %zd bytes\n", sz); ASSERT(sz > 1); } ASSERT_EQUAL(75, idx->lastId); printf("written %zd bytes\n", idx->blocks[0].data->offset); IndexReader *ir = NewNumericReader(idx, NULL); IndexIterator *it = NewReadIterator(ir); RSIndexResult *res; t_docId i = 1; while (INDEXREAD_EOF != it->Read(it->ctx, &res)) { // printf("%d %f\n", res->docId, res->num.value); ASSERT_EQUAL(i++, res->docId); ASSERT_EQUAL(res->num.value, (float)res->docId); } InvertedIndex_Free(idx); it->Free(it); return 0; } int testNumericVaried() { InvertedIndex *idx = NewInvertedIndex(Index_StoreNumeric, 1); static const double nums[] = {0, 0.13, 0.001, -0.1, 1.0, 5.0, 4.323, 65535, 65535.53, 32768.432, 1LLU << 32, -(1LLU << 32), 1LLU << 40}; static const size_t numCount = sizeof(nums) / sizeof(double); for (size_t i = 0; i < numCount; i++) { size_t sz = InvertedIndex_WriteNumericEntry(idx, i + 1, nums[i]); ASSERT(sz > 1); // printf("[%lu]: Stored %lf\n", i, nums[i]); } IndexReader *ir = NewNumericReader(idx, NULL); IndexIterator *it = NewReadIterator(ir); RSIndexResult *res; for (size_t i = 0; i < numCount; i++) { printf("Checking i=%lu. Expected=%lf\n", i, nums[i]); int rv = it->Read(it->ctx, &res); ASSERT(INDEXREAD_EOF != rv); ASSERT(fabs(nums[i] - res->num.value) < 0.01); } ASSERT_EQUAL(INDEXREAD_EOF, it->Read(it->ctx, &res)); InvertedIndex_Free(idx); it->Free(it); return 0; } typedef struct { double value; size_t size; } encodingInfo; static const encodingInfo infos[] = { {0, 2}, // 0 {1, 2}, // 1 {63, 3}, // 2 {-1, 3}, // 3 {-63, 3}, // 4 {64, 3}, // 5 {-64, 3}, // 6 {255, 3}, // 7 {-255, 3}, // 8 {65535, 4}, // 9 {-65535, 4}, // 10 {16777215, 5}, // 11 {-16777215, 5}, // 12 {4294967295, 6}, // 13 {-4294967295, 6}, // 14 {4294967295 + 1, 7}, // 15 {4294967295 + 2, 7}, // 16 {549755813888.0, 7}, // 17 {549755813888.0 + 2, 7}, // 18 {549755813888.0 - 23, 7}, // 19 {-549755813888.0, 7}, // 20 {1503342028.957225, 10}, // 21 {42.4345, 6}, // 22 {(float)0.5, 6}, // 23 {DBL_MAX, 10}, // 24 {UINT64_MAX >> 12, 9}, // 25 {INFINITY, 2}, // 26 {-INFINITY, 2} // 27 }; int testNumericEncoding() { static const size_t numInfos = sizeof(infos) / sizeof(infos[0]); InvertedIndex *idx = NewInvertedIndex(Index_StoreNumeric, 1); // printf("TestNumericEncoding\n"); for (size_t ii = 0; ii < numInfos; ii++) { // printf("\n[%lu]: Expecting Val=%lf, Sz=%lu\n", ii, infos[ii].value, infos[ii].size); size_t sz = InvertedIndex_WriteNumericEntry(idx, ii + 1, infos[ii].value); ASSERT_EQUAL(infos[ii].size, sz); } IndexReader *ir = NewNumericReader(idx, NULL); IndexIterator *it = NewReadIterator(ir); RSIndexResult *res; for (size_t ii = 0; ii < numInfos; ii++) { // printf("\nReading [%lu]\n", ii); int rc = it->Read(it->ctx, &res); ASSERT(rc != INDEXREAD_EOF); // printf("%lf <-> %lf\n", infos[ii].value, res->num.value); if (fabs(infos[ii].value) == INFINITY) { ASSERT(infos[ii].value == res->num.value); } else { ASSERT(fabs(infos[ii].value - res->num.value) < 0.01); } } InvertedIndex_Free(idx); it->Free(it); return 0; } int testAbort() { InvertedIndex *w = createIndex(1000, 1); IndexReader *r = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 1); // IndexIterator *it = NewReadIterator(r); int n = 0; RSIndexResult *res; while (INDEXREAD_EOF != it->Read(it->ctx, &res)) { if (n == 50) { it->Abort(it->ctx); } n++; } ASSERT_EQUAL(51, n); it->Free(it); InvertedIndex_Free(w); return 0; } int testIntersection() { InvertedIndex *w = createIndex(100000, 4); InvertedIndex *w2 = createIndex(100000, 2); IndexReader *r1 = NewTermIndexReader(w, NULL, RS_FIELDMASK_ALL, NULL, 1); // IndexReader *r2 = NewTermIndexReader(w2, NULL, RS_FIELDMASK_ALL, NULL, 1); // IndexIterator **irs = calloc(2, sizeof(IndexIterator *)); irs[0] = NewReadIterator(r1); irs[1] = NewReadIterator(r2); int count = 0; IndexIterator *ii = NewIntersecIterator(irs, 2, NULL, RS_FIELDMASK_ALL, -1, 0, 1); RSIndexResult *h = NULL; TimeSample ts; TimeSampler_Start(&ts); float topFreq = 0; while (ii->Read(ii->ctx, &h) != INDEXREAD_EOF) { ASSERT(h->type == RSResultType_Intersection); ASSERT(RSIndexResult_IsAggregate(h)); ASSERT(RSIndexResult_HasOffsets(h)); topFreq = topFreq > h->freq ? topFreq : h->freq; RSIndexResult *copy = IndexResult_DeepCopy(h); ASSERT(copy != NULL); ASSERT(copy != h); ASSERT(copy->isCopy == 1); ASSERT(copy->docId == h->docId); ASSERT(copy->type == RSResultType_Intersection); IndexResult_Free(copy); // printf("%d\n", h.docId); TimeSampler_Tick(&ts); ++count; } TimeSampler_End(&ts); // int count = IR_Intersect(r1, r2, onIntersect, &ctx); // printf("%d intersections in %lldms, %.0fns per iteration\n", count, // TimeSampler_DurationMS(&ts), // 1000000 * TimeSampler_IterationMS(&ts)); // printf("top freq: %f\n", topFreq); ASSERT(count == 50000) ASSERT(topFreq == 100000.0); ii->Free(ii); // IndexResult_Free(&h); InvertedIndex_Free(w); InvertedIndex_Free(w2); return 0; } int testBuffer() { // TEST_START(); BufferWriter w = NewBufferWriter(NewBuffer(2)); ASSERTM(w.buf->cap == 2, "Wrong capacity"); ASSERT(w.buf->data != NULL); ASSERT(Buffer_Offset(w.buf) == 0); ASSERT(w.buf->data == w.pos); const char *x = "helololoolo"; size_t l = Buffer_Write(&w, (void *)x, strlen(x) + 1); ASSERT(l == strlen(x) + 1); ASSERT(Buffer_Offset(w.buf) == l); ASSERT_EQUAL(Buffer_Capacity(w.buf), 14); l = WriteVarint(1337654, &w); ASSERT(l == 3); ASSERT_EQUAL(Buffer_Offset(w.buf), 15); ASSERT_EQUAL(Buffer_Capacity(w.buf), 17); Buffer_Truncate(w.buf, 0); ASSERT(Buffer_Capacity(w.buf) == 15); BufferReader br = NewBufferReader(w.buf); ASSERT(br.pos == 0); char *y = malloc(strlen(x) + 1); l = Buffer_Read(&br, y, strlen(x) + 1); ASSERT(l == strlen(x) + 1); ASSERT(strcmp(y, x) == 0); ASSERT(BufferReader_Offset(&br) == l); free(y); int n = ReadVarint(&br); ASSERT(n == 1337654); Buffer_Free(w.buf); free(w.buf); return 0; } typedef struct { int num; char **expected; } tokenContext; int tokenFunc(void *ctx, const Token *t) { tokenContext *tx = ctx; int ret = strncmp(t->tok, tx->expected[tx->num++], t->tokLen); assert(ret == 0); assert(t->pos > 0); return 0; } // int testTokenize() { // char *txt = strdup("Hello? world... ? -WAZZ@UP? שלום"); // tokenContext ctx = {0}; // const char *expected[] = {"hello", "world", "wazz", "up", "שלום"}; // ctx.expected = (char **)expected; // tokenize(txt, &ctx, tokenFunc, NULL, 0, DefaultStopWordList(), 0); // ASSERT(ctx.num == 5); // free(txt); // return 0; // } // int testForwardIndex() { // Document doc = NewDocument(NULL, 1, 1, "english"); // doc.docId = 1; // doc.fields[0] = N // ForwardIndex *idx = NewForwardIndex(doc); // char *txt = strdup("Hello? world... hello hello ? __WAZZ@UP? שלום"); // tokenize(txt, 1, 1, idx, forwardIndexTokenFunc); // return 0; // } int testIndexSpec() { const char *title = "title", *body = "body", *foo = "foo", *bar = "bar", *name = "name"; const char *args[] = {"STOPWORDS", "2", "hello", "world", "SCHEMA", title, "text", "weight", "0.1", body, "text", "weight", "2.0", foo, "text", "sortable", bar, "numeric", "sortable", name, "text", "nostem"}; char *err = NULL; IndexSpec *s = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err); if (err != NULL) { FAIL("Error parsing spec: %s", err); } ASSERT(s != NULL); ASSERT(err == NULL); ASSERT(s->numFields == 5) ASSERT(s->stopwords != NULL); ASSERT(s->stopwords != DefaultStopWordList()); ASSERT(s->flags & Index_StoreFieldFlags); ASSERT(s->flags & Index_StoreTermOffsets); ASSERT(s->flags & Index_HasCustomStopwords); ASSERT(IndexSpec_IsStopWord(s, "hello", 5)); ASSERT(IndexSpec_IsStopWord(s, "world", 5)); ASSERT(!IndexSpec_IsStopWord(s, "werld", 5)); FieldSpec *f = IndexSpec_GetField(s, body, strlen(body)); ASSERT(f != NULL); ASSERT(f->type == FIELD_FULLTEXT); ASSERT(strcmp(f->name, body) == 0); ASSERT(f->textOpts.weight == 2.0); ASSERT_EQUAL(FIELD_BIT(f), 2); ASSERT(f->options == 0); ASSERT(f->sortIdx == -1); f = IndexSpec_GetField(s, title, strlen(title)); ASSERT(f != NULL); ASSERT(f->type == FIELD_FULLTEXT); ASSERT(strcmp(f->name, title) == 0); ASSERT(f->textOpts.weight == 0.1); ASSERT(FIELD_BIT(f) == 1); ASSERT(f->options == 0); ASSERT(f->sortIdx == -1); f = IndexSpec_GetField(s, foo, strlen(foo)); ASSERT(f != NULL); ASSERT(f->type == FIELD_FULLTEXT); ASSERT(strcmp(f->name, foo) == 0); ASSERT(f->textOpts.weight == 1); ASSERT(FIELD_BIT(f) == 4); ASSERT(f->options == FieldSpec_Sortable); ASSERT(f->sortIdx == 0); f = IndexSpec_GetField(s, bar, strlen(bar)); ASSERT(f != NULL); ASSERT(f->type == FIELD_NUMERIC); ASSERT(strcmp(f->name, bar) == 0); ASSERT(f->textOpts.weight == 0); ASSERT(FIELD_BIT(f) == 1); ASSERT(f->options == FieldSpec_Sortable); ASSERT(f->sortIdx == 1); ASSERT(IndexSpec_GetField(s, "fooz", 4) == NULL) f = IndexSpec_GetField(s, name, strlen(name)); ASSERT(f != NULL); ASSERT(f->type == FIELD_FULLTEXT); ASSERT(strcmp(f->name, name) == 0); ASSERT(f->textOpts.weight == 1); ASSERT(FIELD_BIT(f) == 8); ASSERT(f->options == FieldSpec_NoStemming); ASSERT(f->sortIdx == -1); ASSERT(s->sortables != NULL); ASSERT(s->sortables->len == 2); int rc = IndexSpec_GetFieldSortingIndex(s, foo, strlen(foo)); ASSERT_EQUAL(0, rc); rc = IndexSpec_GetFieldSortingIndex(s, bar, strlen(bar)); ASSERT_EQUAL(1, rc); rc = IndexSpec_GetFieldSortingIndex(s, title, strlen(title)); ASSERT_EQUAL(-1, rc); IndexSpec_Free(s); const char *args2[] = { "NOOFFSETS", "NOFIELDS", "SCHEMA", title, "text", }; s = IndexSpec_Parse("idx", args2, sizeof(args2) / sizeof(const char *), &err); if (err != NULL) { FAIL("Error parsing spec: %s", err); } ASSERT(s != NULL); ASSERT(err == NULL); ASSERT(s->numFields == 1); ASSERT(!(s->flags & Index_StoreFieldFlags)); ASSERT(!(s->flags & Index_StoreTermOffsets)); IndexSpec_Free(s); // User-reported bug const char *args3[] = {"mySpec", "SCHEMA", "ha", "NUMERIC", "hb", "TEXT", "WEIGHT", "1", "NOSTEM"}; s = IndexSpec_Parse("idx", args3, sizeof(args3) / sizeof(args3[0]), &err); if (err != NULL) { FAIL("Error parsing field spec: %s", err); } ASSERT(FieldSpec_IsNoStem(s->fields + 1)); IndexSpec_Free(s); return 0; } void fillSchema(char **args, int N, int *sz) { args[0] = "mySpec"; args[1] = "SCHEMA"; int n = 2; for (int i = 0; i < N; i++) { int _ = asprintf(&args[n++], "field%d", i); if (i % 2 == 0) { args[n++] = "TEXT"; } else { if (i < 40) { // odd fields under 40 are TEXT noINDEX args[n++] = ("TEXT"); args[n++] = ("NOINDEX"); } else { // the rest are numeric args[n++] = ("NUMERIC"); } } } *sz = n; for (int i = 0; i < n; i++) { printf("%s ", args[i]); } printf("\n"); } int testHugeSpec() { int N = 64; int n = 2; char *args[n + N * 3]; fillSchema(args, N, &n); char *err = NULL; IndexSpec *s = IndexSpec_Parse("idx", (const char **)args, n, &err); if (err != NULL) { FAIL("Error parsing spec: %s", err); } ASSERT(s != NULL); ASSERT(err == NULL); ASSERT(s->numFields == N); IndexSpec_Free(s); // test too big a schema N = 300; n = 2; char *args2[n + N * 3]; fillSchema(args2, N, &n); err = NULL; s = IndexSpec_Parse("idx", (const char **)args2, n, &err); ASSERT(s == NULL); ASSERT(err != NULL); ASSERT_STRING_EQ("Too many TEXT fields in schema", err); return 0; } typedef union { int i; float f; } u; int testIndexFlags() { ForwardIndexEntry h; h.docId = 1234; h.fieldMask = 0x01; h.freq = 1; h.vw = NewVarintVectorWriter(8); for (int n = 0; n < 10; n++) { VVW_Write(h.vw, n); } VVW_Truncate(h.vw); u_char flags = INDEX_DEFAULT_FLAGS; InvertedIndex *w = NewInvertedIndex(flags, 1); IndexEncoder enc = InvertedIndex_GetEncoder(w->flags); ASSERT(w->flags == flags); size_t sz = InvertedIndex_WriteForwardIndexEntry(w, enc, &h); // printf("written %zd bytes. Offset=%zd\n", sz, h.vw->buf.offset); ASSERT_EQUAL(15, sz); InvertedIndex_Free(w); flags &= ~Index_StoreTermOffsets; w = NewInvertedIndex(flags, 1); ASSERT(!(w->flags & Index_StoreTermOffsets)); enc = InvertedIndex_GetEncoder(w->flags); size_t sz2 = InvertedIndex_WriteForwardIndexEntry(w, enc, &h); // printf("Wrote %zd bytes. Offset=%zd\n", sz2, h.vw->buf.offset); ASSERT_EQUAL(sz2, sz - Buffer_Offset(&h.vw->buf) - 1); InvertedIndex_Free(w); flags = INDEX_DEFAULT_FLAGS | Index_WideSchema; w = NewInvertedIndex(flags, 1); ASSERT((w->flags & Index_WideSchema)); enc = InvertedIndex_GetEncoder(w->flags); h.fieldMask = 0xffffffffffff; ASSERT_EQUAL(21, InvertedIndex_WriteForwardIndexEntry(w, enc, &h)); InvertedIndex_Free(w); flags |= Index_WideSchema; w = NewInvertedIndex(flags, 1); ASSERT((w->flags & Index_WideSchema)); enc = InvertedIndex_GetEncoder(w->flags); h.fieldMask = 0xffffffffffff; sz = InvertedIndex_WriteForwardIndexEntry(w, enc, &h); ASSERT_EQUAL(21, sz); InvertedIndex_Free(w); flags &= Index_StoreFreqs; w = NewInvertedIndex(flags, 1); ASSERT(!(w->flags & Index_StoreTermOffsets)); ASSERT(!(w->flags & Index_StoreFieldFlags)); enc = InvertedIndex_GetEncoder(w->flags); sz = InvertedIndex_WriteForwardIndexEntry(w, enc, &h); ASSERT_EQUAL(3, sz); InvertedIndex_Free(w); flags |= Index_StoreFieldFlags | Index_WideSchema; w = NewInvertedIndex(flags, 1); ASSERT((w->flags & Index_WideSchema)); ASSERT((w->flags & Index_StoreFieldFlags)); enc = InvertedIndex_GetEncoder(w->flags); h.fieldMask = 0xffffffffffff; sz = InvertedIndex_WriteForwardIndexEntry(w, enc, &h); ASSERT_EQUAL(10, sz); InvertedIndex_Free(w); VVW_Free(h.vw); return 0; } int testDocTable() { char buf[16]; DocTable dt = NewDocTable(10, 10); t_docId did = 0; // N is set to 100 and the max cap of the doc table is 10 so we surely will // get overflow and check that everything works correctly int N = 100; for (int i = 0; i < N; i++) { sprintf(buf, "doc_%d", i); RSDocumentKey docKey = MakeDocKey(buf, strlen(buf)); t_docId nd = DocTable_Put(&dt, docKey, (double)i, Document_DefaultFlags, buf, strlen(buf)); ASSERT_EQUAL(did + 1, nd); did = nd; } ASSERT_EQUAL(N + 1, dt.size); ASSERT_EQUAL(N, dt.maxDocId); #ifdef __x86_64__ ASSERT_EQUAL(10980, (int)dt.memsize); #endif for (int i = 0; i < N; i++) { sprintf(buf, "doc_%d", i); RSDocumentKey docKey = DocTable_GetKey(&dt, i + 1); ASSERT_STRING_EQ(docKey.str, buf); float score = DocTable_GetScore(&dt, i + 1); ASSERT_EQUAL((int)score, i); RSDocumentMetadata *dmd = DocTable_Get(&dt, i + 1); DMD_Incref(dmd); ASSERT(dmd != NULL); ASSERT(dmd->flags & Document_HasPayload); ASSERT_STRING_EQ(dmd->keyPtr, (char *)buf); char *pl = dmd->payload->data; ASSERT(!(strncmp(pl, (char *)buf, dmd->payload->len))); ASSERT_EQUAL((int)dmd->score, i); ASSERT_EQUAL((int)dmd->flags, (int)(Document_DefaultFlags | Document_HasPayload)); t_docId xid = DocIdMap_Get(&dt.dim, MakeDocKey(buf, strlen(buf))); ASSERT_EQUAL((int)xid, i + 1); int rc = DocTable_Delete(&dt, MakeDocKey(dmd->keyPtr, sdslen(dmd->keyPtr))); ASSERT_EQUAL(1, rc); ASSERT((int)(dmd->flags & Document_Deleted)); DMD_Decref(dmd); dmd = DocTable_Get(&dt, i + 1); ASSERT(!dmd); } ASSERT(0 == DocIdMap_Get(&dt.dim, MakeDocKey("foo bar", strlen("foo bar")))); ASSERT(NULL == DocTable_Get(&dt, N + 2)); t_docId strDocId = DocTable_Put(&dt, MakeDocKey("Hello", 5), 1.0, 0, NULL, 0); ASSERT(0 != strDocId); // Test that binary keys also work here static const char binBuf[] = {"Hello\x00World"}; const size_t binBufLen = 11; ASSERT(0 == DocIdMap_Get(&dt.dim, MakeDocKey(binBuf, binBufLen))); t_docId binDocId = DocTable_Put(&dt, MakeDocKey(binBuf, binBufLen), 1.0, 0, NULL, 0); ASSERT(0 != binDocId); ASSERT(binDocId != strDocId); ASSERT_EQUAL(binDocId, DocIdMap_Get(&dt.dim, MakeDocKey(binBuf, binBufLen))); ASSERT(strDocId == DocIdMap_Get(&dt.dim, MakeDocKey("Hello", 5))); DocTable_Free(&dt); return 0; } int testSortable() { RSSortingTable *tbl = NewSortingTable(); RSSortingTable_Add(tbl, "foo", RSValue_String); RSSortingTable_Add(tbl, "bar", RSValue_String); RSSortingTable_Add(tbl, "baz", RSValue_String); ASSERT_EQUAL(3, tbl->len); ASSERT_STRING_EQ("foo", tbl->fields[0].name); ASSERT_EQUAL(RSValue_String, tbl->fields[0].type); ASSERT_STRING_EQ("bar", tbl->fields[1].name); ASSERT_STRING_EQ("baz", tbl->fields[2].name); ASSERT_EQUAL(0, RSSortingTable_GetFieldIdx(tbl, "foo")); ASSERT_EQUAL(0, RSSortingTable_GetFieldIdx(tbl, "FoO")); ASSERT_EQUAL(-1, RSSortingTable_GetFieldIdx(NULL, "FoO")); ASSERT_EQUAL(1, RSSortingTable_GetFieldIdx(tbl, "bar")); ASSERT_EQUAL(-1, RSSortingTable_GetFieldIdx(tbl, "barbar")); RSSortingVector *v = NewSortingVector(tbl->len); ASSERT_EQUAL(v->len, tbl->len); char *str = "hello"; char *masse = "Maße"; double num = 3.141; ASSERT(RSValue_IsNull(v->values[0])); RSSortingVector_Put(v, 0, str, RS_SORTABLE_STR); ASSERT_EQUAL(v->values[0]->t, RSValue_String); ASSERT_EQUAL(v->values[0]->strval.stype, RSString_RMAlloc); ASSERT(RSValue_IsNull(v->values[1])); ASSERT(RSValue_IsNull(v->values[2])); RSSortingVector_Put(v, 1, &num, RSValue_Number); ASSERT_EQUAL(v->values[1]->t, RS_SORTABLE_NUM); RSSortingVector *v2 = NewSortingVector(tbl->len); RSSortingVector_Put(v2, 0, masse, RS_SORTABLE_STR); /// test string unicode lowercase normalization ASSERT_STRING_EQ("masse", v2->values[0]->strval.str); double s2 = 4.444; RSSortingVector_Put(v2, 1, &s2, RS_SORTABLE_NUM); RSSortingKey sk = {.index = 0, .ascending = 0}; int rc = RSSortingVector_Cmp(v, v2, &sk); ASSERT(rc > 0); sk.ascending = 1; rc = RSSortingVector_Cmp(v, v2, &sk); ASSERT(rc < 0); rc = RSSortingVector_Cmp(v, v, &sk); ASSERT_EQUAL(0, rc); sk.index = 1; rc = RSSortingVector_Cmp(v, v2, &sk); ASSERT_EQUAL(-1, rc); sk.ascending = 0; rc = RSSortingVector_Cmp(v, v2, &sk); ASSERT_EQUAL(1, rc); SortingTable_Free(tbl); SortingVector_Free(v); SortingVector_Free(v2); return 0; } int testVarintFieldMask() { t_fieldMask x = 127; size_t expected[] = {1, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 19}; BufferWriter bw = NewBufferWriter(NewBuffer(1)); for (int i = 0; i < sizeof(t_fieldMask); i++, x |= x << 8) { size_t sz = WriteVarintFieldMask(x, &bw); ASSERT_EQUAL(expected[i], sz); BufferWriter_Seek(&bw, 0); BufferReader br = NewBufferReader(bw.buf); t_fieldMask y = ReadVarintFieldMask(&br); ASSERT(y == x); } RETURN_TEST_SUCCESS; } int testDeltaSplits() { InvertedIndex *idx = NewInvertedIndex(INDEX_DEFAULT_FLAGS, 1); ForwardIndexEntry ent = {0}; ent.docId = 1; ent.fieldMask = RS_FIELDMASK_ALL; IndexEncoder enc = InvertedIndex_GetEncoder(idx->flags); InvertedIndex_WriteForwardIndexEntry(idx, enc, &ent); ASSERT_EQUAL(idx->size, 1); ent.docId = 200; InvertedIndex_WriteForwardIndexEntry(idx, enc, &ent); ASSERT_EQUAL(idx->size, 1); ent.docId = 1LLU << 48; InvertedIndex_WriteForwardIndexEntry(idx, enc, &ent); ASSERT_EQUAL(idx->size, 2); ent.docId++; InvertedIndex_WriteForwardIndexEntry(idx, enc, &ent); ASSERT_EQUAL(idx->size, 2); IndexReader *ir = NewTermIndexReader(idx, NULL, RS_FIELDMASK_ALL, NULL, 1); RSIndexResult *h = NULL; ASSERT_EQUAL(INDEXREAD_OK, IR_Read(ir, &h)); ASSERT_EQUAL(1, h->docId); ASSERT_EQUAL(INDEXREAD_OK, IR_Read(ir, &h)); ASSERT_EQUAL(200, h->docId); ASSERT_EQUAL(INDEXREAD_OK, IR_Read(ir, &h)); ASSERT_EQUAL((1LLU << 48), h->docId); ASSERT_EQUAL(INDEXREAD_OK, IR_Read(ir, &h)); ASSERT_EQUAL((1LLU << 48) + 1, h->docId); ASSERT_EQUAL(INDEXREAD_EOF, IR_Read(ir, &h)); IR_Free(ir); InvertedIndex_Free(idx); RETURN_TEST_SUCCESS; } TEST_MAIN({ // LOGGING_INIT(L_INFO); RMUTil_InitAlloc(); TESTFUNC(testWeight); TESTFUNC(testVarintFieldMask); TESTFUNC(testPureNot); TESTFUNC(testHugeSpec); TESTFUNC(testAbort) TESTFUNC(testNumericInverted); TESTFUNC(testNumericVaried); TESTFUNC(testNumericEncoding); TESTFUNC(testVarint); TESTFUNC(testDistance); TESTFUNC(testIndexReadWrite); TESTFUNC(testReadIterator); TESTFUNC(testIntersection); TESTFUNC(testNot); TESTFUNC(testUnion); TESTFUNC(testBuffer); // TESTFUNC(testTokenize); TESTFUNC(testIndexSpec); TESTFUNC(testIndexFlags); TESTFUNC(testDocTable); TESTFUNC(testSortable); TESTFUNC(testDeltaSplits); }); RediSearch-1.2.2/src/tests/test_khtable.c000066400000000000000000000033341364126773500203140ustar00rootroot00000000000000#include "test_util.h" #include "../util/khtable.h" #include "../util/fnv.h" #include #include typedef struct { KHTableEntry base; char *key; uint32_t hash; uint32_t value; } MyEntry; static int myEntryCompare(const KHTableEntry *e, const void *k, size_t n, uint32_t h) { const MyEntry *ent = (const MyEntry *)e; return !(ent->hash == h && strcmp(k, ent->key) == 0); } static uint32_t myHash(const KHTableEntry *e) { return ((const MyEntry *)e)->hash; } static KHTableEntry *myAlloc() { return calloc(1, sizeof(MyEntry)); } static uint32_t calcHash(const char *s) { return rs_fnv_32a_buf((char *)s, strlen(s), 0); } static KHTableProcs myProcs = {.Alloc = myAlloc, .Hash = myHash, .Compare = myEntryCompare}; static void *pCtx = (void *)0x01; static void *pArg = (void *)0x02; static void freeFn(KHTableEntry *ent, void *ctx, void *arg) { free(ent); assert(ctx == pCtx); assert(arg == pArg); } int testKhTable() { KHTable kht; KHTable_Init(&kht, &myProcs, pCtx, 4); MyEntry *ent = NULL; ent = (void *)KHTable_GetEntry(&kht, "key", 0, calcHash("key"), NULL); ASSERT(ent == NULL); // Not found, and no isNew pointer int isNew = 0; ent = (void *)KHTable_GetEntry(&kht, "key", 0, calcHash("key"), &isNew); ASSERT(ent != NULL); ASSERT(isNew != 0); ent->key = "key"; ent->hash = calcHash("key"); ent->value = 42; isNew = 0; MyEntry *ent2 = (void *)KHTable_GetEntry(&kht, "key", 0, calcHash("key"), NULL); ASSERT(ent2 == ent); // Try it again, but with isNew ent2 = (void *)KHTable_GetEntry(&kht, "key", 0, calcHash("key"), &isNew); ASSERT(ent2 == ent); ASSERT(isNew == 0); KHTable_FreeEx(&kht, pArg, freeFn); return 0; } TEST_MAIN({ TESTFUNC(testKhTable); })RediSearch-1.2.2/src/tests/test_qint.c000066400000000000000000000015231364126773500176530ustar00rootroot00000000000000#include #include #include "qint.h" #include "rmutil/alloc.h" int main(int argc, char **argv) { RMUTil_InitAlloc(); Buffer *b = NewBuffer(1024); BufferWriter w = NewBufferWriter(b); qint_encode4(&w, 123, 456, 789, 101112); uint32_t arr[4]; BufferReader r = NewBufferReader(b); qint_decode(&r, arr, 4); assert(arr[0] == 123); assert(arr[1] == 456); assert(arr[2] == 789); assert(arr[3] == 101112); memset(arr, 0, sizeof arr); r = NewBufferReader(b); qint_decode4(&r, &arr[0], &arr[1], &arr[2], &arr[3]); assert(arr[0] == 123); assert(arr[1] == 456); assert(arr[2] == 789); assert(arr[3] == 101112); memset(arr, 0, sizeof arr); r = NewBufferReader(b); qint_decode3(&r, &arr[0], &arr[1], &arr[2]); assert(arr[0] == 123); assert(arr[1] == 456); assert(arr[2] == 789); return 0; }RediSearch-1.2.2/src/tests/test_quantile.c000066400000000000000000000022441364126773500205230ustar00rootroot00000000000000#include "../util/quantile.h" #include "../buffer.h" #include "../rmutil/alloc.h" #include "test_util.h" #include #include #include static FILE *fp; static Buffer buf; static double *input; static size_t numInput; static int testBasic() { double quantiles[] = {0.50, 0.90, 0.99}; QuantStream *stream = NewQuantileStream(quantiles, 3, 500); for (size_t ii = 0; ii < numInput; ++ii) { QS_Insert(stream, input[ii]); } double res50 = QS_Query(stream, 0.50); double res90 = QS_Query(stream, 0.90); double res99 = QS_Query(stream, 0.99); size_t count = QS_GetCount(stream); printf("50: %lf, 90: %lf, 99: %lf\n", res50, res90, res99); printf("Count: %lu\n", count); // QS_Dump(stream, stdout); QS_Free(stream); return 0; } TEST_MAIN({ RMUTil_InitAlloc(); fp = fopen("./quantile_data.txt", "rb"); assert(fp); Buffer_Init(&buf, 4096); BufferWriter bw = NewBufferWriter(&buf); double d; while (fscanf(fp, "%lf", &d) != EOF) { Buffer_Write(&bw, &d, sizeof d); numInput++; } fclose(fp); printf("Have %lu items\n", numInput); input = (double *)buf.data; TESTFUNC(testBasic); Buffer_Free(&buf); })RediSearch-1.2.2/src/tests/test_query.c000066400000000000000000000363531364126773500200560ustar00rootroot00000000000000#include "../query.h" #include "../query_parser/tokenizer.h" #include "../stopwords.h" #include "test_util.h" #include "time_sample.h" #include "../extension.h" #include "../search_request.h" #include "../ext/default.h" #include "../rmutil/alloc.h" #include void QueryNode_Print(QueryParseCtx *q, QueryNode *qs, int depth); #define SEARCH_OPTS(ctx) \ (RSSearchOptions) { \ .flags = RS_DEFAULT_QUERY_FLAGS, .fieldMask = RS_FIELDMASK_ALL, .indexName = "idx", \ .language = "en", .stopwords = DefaultStopWordList() \ } #define QUERY_PARSE_CTX(ctx, qt, opts) NewQueryParseCtx(&ctx, qt, strlen(qt), &opts); int isValidQuery(char *qt, RedisSearchCtx ctx) { char *err = NULL; RSSearchOptions opts = SEARCH_OPTS(ctx); QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qt, opts); QueryNode *n = Query_Parse(q, &err); if (err) { Query_Free(q); fprintf(stderr, "Error parsing query '%s': %s\n", qt, err); free(err); return 1; } if (n) { QueryNode_Print(q, n, 0); } Query_Free(q); return 0; } #define assertValidQuery(qt, ctx) \ { \ if (0 != isValidQuery(qt, ctx)) return -1; \ } #define assertInvalidQuery(qt, ctx) \ { \ if (0 == isValidQuery(qt, ctx)) return -1; \ } int testQueryParser() { RedisSearchCtx ctx; static const char *args[] = {"SCHEMA", "title", "text", "weight", "0.1", "body", "text", "weight", "2.0", "bar", "numeric", "loc", "geo", "tags", "tag"}; char *err = NULL; ctx.spec = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err); ASSERT(err == NULL); // test some valid queries assertValidQuery("hello", ctx); assertValidQuery("hello wor*", ctx); assertValidQuery("hello world", ctx); assertValidQuery("hello (world)", ctx); assertValidQuery("\"hello world\"", ctx); assertValidQuery("\"hello\"", ctx); assertValidQuery("\"hello world\" \"foo bar\"", ctx); assertValidQuery("\"hello world\"|\"foo bar\"", ctx); assertValidQuery("\"hello world\" (\"foo bar\")", ctx); assertValidQuery("hello \"foo bar\" world", ctx); assertValidQuery("hello|hallo|yellow world", ctx); assertValidQuery("(hello|world|foo) bar baz 123", ctx); assertValidQuery("(hello|world|foo) (bar baz)", ctx); // assertValidQuery("(hello world|foo \"bar baz\") \"bar baz\" bbbb"); assertValidQuery("@title:(barack obama) @body:us|president", ctx); assertValidQuery("@ti_tle:barack obama @body:us", ctx); assertValidQuery("@title:barack @body:obama", ctx); assertValidQuery("@tit_le|bo_dy:barack @body|title|url|something_else:obama", ctx); assertValidQuery("hello world&good+bye foo.bar", ctx); assertValidQuery("@BusinessName:\"Wells Fargo Bank, National Association\"", ctx); // escaping and unicode in field names assertValidQuery("@Business\\:\\-\\ Name:Wells Fargo", ctx); assertValidQuery("@שלום:Wells Fargo", ctx); assertValidQuery("foo -bar -(bar baz)", ctx); assertValidQuery("(hello world)|(goodbye moon)", ctx); assertInvalidQuery("@title:", ctx); assertInvalidQuery("@body:@title:", ctx); assertInvalidQuery("@body|title:@title:", ctx); assertInvalidQuery("@body|title", ctx); assertValidQuery("hello ~world ~war", ctx); assertValidQuery("hello ~(world war)", ctx); assertValidQuery("-foo", ctx); assertValidQuery("@title:-foo", ctx); assertValidQuery("-@title:foo", ctx); // some geo queries assertValidQuery("@loc:[15.1 -15 30 km]", ctx); assertValidQuery("@loc:[15 -15.1 30 m]", ctx); assertValidQuery("@loc:[15.03 -15.45 30 mi]", ctx); assertValidQuery("@loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("hello world @loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("hello world -@loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("hello world ~@loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("@title:hello world ~@loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("@loc:[15.65 -15.65 30 ft] @loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("@loc:[15.65 -15.65 30 ft]|@loc:[15.65 -15.65 30 ft]", ctx); assertValidQuery("hello (world @loc:[15.65 -15.65 30 ft])", ctx); assertInvalidQuery("@loc:[190.65 -100.65 30 ft])", ctx); assertInvalidQuery("@loc:[50 50 -1 ft])", ctx); assertInvalidQuery("@loc:[50 50 1 quoops])", ctx); assertInvalidQuery("@loc:[50 50 1 ftps])", ctx); assertInvalidQuery("@loc:[50 50 1 1])", ctx); assertInvalidQuery("@loc:[50 50 1])", ctx); // numeric assertValidQuery("@number:[100 200]", ctx); assertValidQuery("@number:[100 -200]", ctx); assertValidQuery("@number:[(100 (200]", ctx); assertValidQuery("@number:[100 inf]", ctx); assertValidQuery("@number:[100 -inf]", ctx); assertValidQuery("@number:[-inf +inf]", ctx); assertValidQuery("@number:[-inf +inf]|@number:[100 200]", ctx); assertInvalidQuery("@number:[100 foo]", ctx); // Tag queries assertValidQuery("@tags:{foo}", ctx); assertValidQuery("@tags:{foo|bar baz|boo}", ctx); assertValidQuery("@tags:{foo|bar\\ baz|boo}", ctx); assertValidQuery("@tags:{foo*}", ctx); assertValidQuery("@tags:{foo\\-*}", ctx); assertValidQuery("@tags:{bar | foo*}", ctx); assertValidQuery("@tags:{bar* | foo}", ctx); assertValidQuery("@tags:{bar* | foo*}", ctx); assertInvalidQuery("@tags:{foo|bar\\ baz|}", ctx); assertInvalidQuery("@tags:{foo|bar\\ baz|", ctx); assertInvalidQuery("{foo|bar\\ baz}", ctx); assertInvalidQuery("(foo", ctx); assertInvalidQuery("\"foo", ctx); assertValidQuery("", ctx); assertInvalidQuery("()", ctx); // test stopwords assertValidQuery("a for is", ctx); assertValidQuery("a|for|is", ctx); assertValidQuery("a little bit of party", ctx); // test utf-8 query assertValidQuery("שלום עולם", ctx); // Test attribute assertValidQuery("(foo bar) => {$weight: 0.5; $slop: 2}", ctx); assertValidQuery("foo => {$weight: 0.5} bar => {$weight: 0.1}", ctx); assertValidQuery("@title:(foo bar) => {$weight: 0.5; $slop: 2}", ctx); assertValidQuery( "@title:(foo bar) => {$weight: 0.5; $slop: 2} @body:(foo bar) => {$weight: 0.5; $slop: 2}", ctx); assertValidQuery("(foo => {$weight: 0.5;}) | ((bar) => {$weight: 0.5})", ctx); assertValidQuery("(foo => {$weight: 0.5;}) ((bar) => {}) => {}", ctx); assertValidQuery("@tag:{foo | bar} => {$weight: 0.5;} ", ctx); assertValidQuery("@num:[0 100] => {$weight: 0.5;} ", ctx); assertInvalidQuery("@tag:{foo | bar} => {$weight: -0.5;} ", ctx); assertInvalidQuery("@tag:{foo | bar} => {$great: 0.5;} ", ctx); assertInvalidQuery("@tag:{foo | bar} => {$great:;} ", ctx); assertInvalidQuery("@tag:{foo | bar} => {$:1;} ", ctx); assertInvalidQuery(" => {$weight: 0.5;} ", ctx); char *qt = "(hello|world) and \"another world\" (foo is bar) -(baz boo*)"; RSSearchOptions opts = SEARCH_OPTS(ctx); QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qt, opts); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); QueryNode_Print(q, n, 0); ASSERT(err == NULL); ASSERT(n != NULL); ASSERT_EQUAL(n->type, QN_PHRASE); ASSERT_EQUAL(n->pn.exact, 0); ASSERT_EQUAL(n->pn.numChildren, 4); ASSERT_EQUAL(n->opts.fieldMask, RS_FIELDMASK_ALL); ASSERT(n->pn.children[0]->type == QN_UNION); ASSERT_STRING_EQ("hello", n->pn.children[0]->un.children[0]->tn.str); ASSERT_STRING_EQ("world", n->pn.children[0]->un.children[1]->tn.str); QueryNode *_n = n->pn.children[1]; ASSERT(_n->type == QN_PHRASE); ASSERT(_n->pn.exact == 1); ASSERT_EQUAL(_n->pn.numChildren, 2); ASSERT_STRING_EQ("another", _n->pn.children[0]->tn.str); ASSERT_STRING_EQ("world", _n->pn.children[1]->tn.str); _n = n->pn.children[2]; ASSERT(_n->type == QN_PHRASE); ASSERT(_n->pn.exact == 0); ASSERT_EQUAL(_n->pn.numChildren, 2); ASSERT_STRING_EQ("foo", _n->pn.children[0]->tn.str); ASSERT_STRING_EQ("bar", _n->pn.children[1]->tn.str); _n = n->pn.children[3]; ASSERT(_n->type == QN_NOT); _n = _n->not.child; ASSERT(_n->pn.exact == 0); ASSERT_EQUAL(_n->pn.numChildren, 2); ASSERT_STRING_EQ("baz", _n->pn.children[0]->tn.str); ASSERT_EQUAL(_n->pn.children[1]->type, QN_PREFX); ASSERT_STRING_EQ("boo", _n->pn.children[1]->pfx.str); Query_Free(q); IndexSpec_Free(ctx.spec); return 0; } int testPureNegative() { char *err = NULL; const char *qs[] = {"-@title:hello", "-hello", "@title:-hello", "-(foo)", "-foo", "(-foo)", NULL}; static const char *args[] = {"SCHEMA", "title", "text", "weight", "0.1", "body", "text", "weight", "2.0", "bar", "numeric"}; RedisSearchCtx ctx = { .spec = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err)}; RSSearchOptions opts = SEARCH_OPTS(ctx); for (int i = 0; qs[i] != NULL; i++) { QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qs[i], opts); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); // QueryNode_Print(q, n, 0); ASSERT(err == NULL); ASSERT(n != NULL); ASSERT_EQUAL(n->type, QN_NOT); ASSERT(n->not.child != NULL); Query_Free(q); } return 0; } int testGeoQuery() { char *err; static const char *args[] = {"SCHEMA", "title", "text", "loc", "geo"}; RedisSearchCtx ctx = { .spec = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err)}; char *qt = "@title:hello world @loc:[31.52 32.1342 10.01 km]"; RSSearchOptions opts = SEARCH_OPTS(ctx); QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qt, opts); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); QueryNode_Print(q, n, 0); ASSERT(err == NULL); ASSERT(n != NULL); ASSERT_EQUAL(n->type, QN_PHRASE); ASSERT((n->opts.fieldMask == RS_FIELDMASK_ALL)); ASSERT_EQUAL(n->pn.numChildren, 2); QueryNode *gn = n->pn.children[1]; ASSERT_EQUAL(gn->type, QN_GEO); ASSERT_STRING_EQ(gn->gn.gf->property, "loc"); ASSERT_STRING_EQ(gn->gn.gf->unit, "km"); ASSERT_EQUAL(gn->gn.gf->lon, 31.52); ASSERT_EQUAL(gn->gn.gf->lat, 32.1342); ASSERT_EQUAL(gn->gn.gf->radius, 10.01); Query_Free(q); return 0; } int testFieldSpec() { char *err = NULL; static const char *args[] = {"SCHEMA", "title", "text", "weight", "0.1", "body", "text", "weight", "2.0", "bar", "numeric"}; RedisSearchCtx ctx = { .spec = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err)}; char *qt = "@title:hello world"; RSSearchOptions opts = SEARCH_OPTS(ctx); QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qt, opts); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); QueryNode_Print(q, n, 0); ASSERT(err == NULL); ASSERT(n != NULL); ASSERT_EQUAL(n->type, QN_PHRASE); ASSERT_EQUAL(n->opts.fieldMask, 0x01) Query_Free(q); qt = "(@title:hello) (@body:world)"; q = QUERY_PARSE_CTX(ctx, qt, opts); n = Query_Parse(q, &err); if (err) { Query_Free(q); IndexSpec_Free(ctx.spec); FAIL("Error parsing query: %s", err); } ASSERT(n != NULL); printf("%s ====> ", qt); QueryNode_Print(q, n, 0); ASSERT_EQUAL(n->type, QN_PHRASE); ASSERT_EQUAL(n->opts.fieldMask, RS_FIELDMASK_ALL) ASSERT_EQUAL(n->pn.children[0]->opts.fieldMask, 0x01) ASSERT_EQUAL(n->pn.children[1]->opts.fieldMask, 0x02) Query_Free(q); // test field modifiers qt = "@title:(hello world) @body:(world apart) @adas_dfsd:fofofof"; q = QUERY_PARSE_CTX(ctx, qt, opts); n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); ASSERT(n != NULL); printf("%s ====> ", qt); QueryNode_Print(q, n, 0); ASSERT_EQUAL(n->type, QN_PHRASE); ASSERT_EQUAL(n->opts.fieldMask, RS_FIELDMASK_ALL) ASSERT_EQUAL(n->pn.numChildren, 3) ASSERT_EQUAL(n->pn.children[0]->opts.fieldMask, 0x01) ASSERT_EQUAL(n->pn.children[1]->opts.fieldMask, 0x02) ASSERT_EQUAL(n->pn.children[2]->opts.fieldMask, 0x00) // ASSERT_EQUAL(n->pn.children[2]->fieldMask, 0x00) Query_Free(q); // test numeric ranges qt = "@num:[0.4 (500]"; q = QUERY_PARSE_CTX(ctx, qt, opts); n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); ASSERT(n != NULL); ASSERT_EQUAL(n->type, QN_NUMERIC); ASSERT_EQUAL(n->nn.nf->min, 0.4); ASSERT_EQUAL(n->nn.nf->max, 500.0); ASSERT_EQUAL(n->nn.nf->inclusiveMin, 1); ASSERT_EQUAL(n->nn.nf->inclusiveMax, 0); Query_Free(q); IndexSpec_Free(ctx.spec); return 0; } int testAttributes() { char *err = NULL; static const char *args[] = {"SCHEMA", "title", "text", "body", "text"}; RedisSearchCtx ctx = { .spec = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err)}; char *qt = "(@title:(foo bar) => {$weight: 0.5} @body:lol => {$weight: 0.2}) => " "{$weight:0.3; $slop:2; $inorder:true}"; RSSearchOptions opts = SEARCH_OPTS(ctx); QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qt, opts); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); QueryNode_Print(q, n, 0); ASSERT(err == NULL); ASSERT(n != NULL); ASSERT_EQUAL(0.3, n->opts.weight); ASSERT_EQUAL(2, n->opts.maxSlop); ASSERT_EQUAL(1, n->opts.inOrder); ASSERT_EQUAL(n->type, QN_PHRASE); ASSERT_EQUAL(n->pn.numChildren, 2) ASSERT_EQUAL(0.5, n->pn.children[0]->opts.weight) ASSERT_EQUAL(0.2, n->pn.children[1]->opts.weight) RETURN_TEST_SUCCESS; } int testTags() { char *err = NULL; static const char *args[] = {"SCHEMA", "title", "text", "tags", "tag", "separator", ";"}; RedisSearchCtx ctx = { .spec = IndexSpec_Parse("idx", args, sizeof(args) / sizeof(const char *), &err)}; char *qt = "@tags:{hello world |foo| שלום| lorem\\ ipsum }"; RSSearchOptions opts = SEARCH_OPTS(ctx); QueryParseCtx *q = QUERY_PARSE_CTX(ctx, qt, opts); QueryNode *n = Query_Parse(q, &err); if (err) FAIL("Error parsing query: %s", err); QueryNode_Print(q, n, 0); ASSERT(err == NULL); ASSERT(n != NULL); ASSERT_EQUAL(n->type, QN_TAG); ASSERT_EQUAL(4, n->tag.numChildren); ASSERT_EQUAL(QN_PHRASE, n->tag.children[0]->type) ASSERT_STRING_EQ("hello", n->tag.children[0]->pn.children[0]->tn.str) ASSERT_STRING_EQ("world", n->tag.children[0]->pn.children[1]->tn.str) ASSERT_EQUAL(QN_TOKEN, n->tag.children[1]->type) ASSERT_STRING_EQ("foo", n->tag.children[1]->tn.str) ASSERT_EQUAL(QN_TOKEN, n->tag.children[2]->type) ASSERT_STRING_EQ("שלום", n->tag.children[2]->tn.str) ASSERT_EQUAL(QN_TOKEN, n->tag.children[3]->type) ASSERT_STRING_EQ("lorem ipsum", n->tag.children[3]->tn.str) Query_Free(q); IndexSpec_Free(ctx.spec); RETURN_TEST_SUCCESS; } // void benchmarkQueryParser() { // char *qt = "(hello|world) \"another world\""; // char *err = NULL; // RSSearcreq = SEARCH_REQUEST(qt, NULL); // q = NewQueryParseCtx(&req); // QueryParseCtx *q = NewQuery(NULL, qt, strlen(qt), 0, 1, 0xff, 0, "en", DefaultStopWordList(), // NULL, -1, 0, NULL, (RSPayload){}, NULL); // TIME_SAMPLE_RUN_LOOP(50000, { Query_Parse(q, &err); }); // } void RMUTil_InitAlloc(); TEST_MAIN({ RMUTil_InitAlloc(); LOGGING_INIT(L_INFO); TESTFUNC(testTags) TESTFUNC(testGeoQuery); TESTFUNC(testQueryParser); TESTFUNC(testPureNegative); TESTFUNC(testFieldSpec); TESTFUNC(testAttributes); // benchmarkQueryParser(); }); RediSearch-1.2.2/src/tests/test_range.c000066400000000000000000000113231364126773500177730ustar00rootroot00000000000000#include "../numeric_index.h" #include #include "test_util.h" #include "time_sample.h" #include "../index.h" #include "../rmutil/alloc.h" // Helper so we get the same pseudo-random numbers // in tests across environments u_int prng_seed = 1337; #define PRNG_MOD 30980347 u_int prng() { prng_seed = (prng_seed * prng_seed) % PRNG_MOD; return prng_seed; } int testNumericRangeTree() { NumericRangeTree *t = NewNumericRangeTree(); ASSERT(t != NULL); for (int i = 0; i < 50000; i++) { NumericRangeTree_Add(t, i + 1, (double)(1 + prng() % 5000)); } ASSERT_EQUAL(t->numRanges, 16); ASSERT_EQUAL(t->numEntries, 50000); struct { double min; double max; } rngs[] = {{0, 100}, {10, 1000}, {2500, 3500}, {0, 5000}, {4999, 4999}, {0, 0}}; for (int r = 0; rngs[r].min || rngs[r].max; r++) { Vector *v = NumericRangeTree_Find(t, rngs[r].min, rngs[r].max); ASSERT(Vector_Size(v) > 0); // printf("Got %d ranges for %f..%f...\n", Vector_Size(v), rngs[r].min, rngs[r].max); for (int i = 0; i < Vector_Size(v); i++) { NumericRange *l; Vector_Get(v, i, &l); ASSERT(l); // printf("%f...%f\n", l->minVal, l->maxVal); ASSERT(!(l->minVal > rngs[r].max)); ASSERT(!(l->maxVal < rngs[r].min)); } Vector_Free(v); } NumericRangeTree_Free(t); return 0; } #define _min(x, y) (x < y ? x : y) #define _max(x, y) (x < y ? y : x) // declaration for an internal function implemented in numeric_index.c IndexIterator *createNumericIterator(NumericRangeTree *t, NumericFilter *f); int testRangeIterator() { NumericRangeTree *t = NewNumericRangeTree(); ASSERT(t != NULL); int N = 1000000; double *lookup = calloc(N + 1, sizeof(double)); uint8_t *matched = calloc(N + 1, sizeof(uint8_t)); for (int i = 0; i < N; i++) { t_docId docId = i + 1; double value = (double)(1 + prng() % (N / 5)); lookup[docId] = value; // printf("Adding %d > %f\n", docId, value); NumericRangeTree_Add(t, docId, value); } for (int i = 0; i < 5; i++) { double min = (double)(1 + prng() % (N / 5)); double max = (double)(1 + prng() % (N / 5)); memset(matched, 0, sizeof(uint8_t) * (N + 1)); NumericFilter *flt = NewNumericFilter(_min(min, max), _max(min, max), 1, 1); // count the number of elements in the range int count = 0; for (int i = 1; i <= N; i++) { if (NumericFilter_Match(flt, lookup[i])) { matched[i] = 1; count++; } } // printf("Testing range %f..%f, should have %d docs\n", min, max, count); IndexIterator *it = createNumericIterator(t, flt); int xcount = 0; RSIndexResult *res = NULL; while (it->HasNext(it->ctx)) { int rc = it->Read(it->ctx, &res); if (rc == INDEXREAD_EOF) { break; } ASSERT_EQUAL(matched[res->docId], 1); if (res->type == RSResultType_Union) { res = res->agg.children[0]; } matched[res->docId] = (uint8_t)2; // printf("rc: %d docId: %d, n %f lookup %f, flt %f..%f\n", rc, res->docId, res->num.value, // lookup[res->docId], flt->min, flt->max); ASSERT_EQUAL(res->num.value, lookup[res->docId]); ASSERT(NumericFilter_Match(flt, lookup[res->docId])); ASSERT_EQUAL(res->type, RSResultType_Numeric); // ASSERT_EQUAL(res->agg.typeMask, RSResultType_Virtual); ASSERT(!RSIndexResult_HasOffsets(res)); ASSERT(!RSIndexResult_IsAggregate(res)); ASSERT(res->docId > 0); ASSERT_EQUAL(res->fieldMask, RS_FIELDMASK_ALL); xcount++; } for (int i = 1; i <= N; i++) { if (matched[i] == 1) { printf("Miss: %d\n", i); } } // printf("The iterator returned %d elements\n", xcount); ASSERT_EQUAL(xcount, count); it->Free(it); } free(lookup); free(matched); ASSERT_EQUAL(t->numRanges, 145); ASSERT_EQUAL(t->numEntries, N); NumericRangeTree_Free(t); return 0; } int benchmarkNumericRangeTree() { NumericRangeTree *t = NewNumericRangeTree(); int count = 1; for (int i = 0; i < 100000; i++) { count += NumericRangeTree_Add(t, i, (double)(rand() % 500000)); } // printf("created %d range leaves\n", count); TIME_SAMPLE_RUN_LOOP(1000, { Vector *v = NumericRangeTree_Find(t, 1000, 20000); // printf("%d\n", v->top); Vector_Free(v); }); TimeSample ts; NumericFilter *flt = NewNumericFilter(1000, 50000, 0, 0); IndexIterator *it = createNumericIterator(t, flt); ASSERT(it->HasNext(it->ctx)); // ASSERT_EQUAL(it->Len(it->ctx), N); count = 0; RSIndexResult *res = NULL; it->Free(it); NumericRangeTree_Free(t); NumericFilter_Free(flt); return 0; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testNumericRangeTree); TESTFUNC(testRangeIterator); benchmarkNumericRangeTree(); }); RediSearch-1.2.2/src/tests/test_result_processor.c000066400000000000000000000041371364126773500223210ustar00rootroot00000000000000#include "test_util.h" #include #include struct processor1Ctx { int counter; }; #define NUM_RESULTS 5 int p1_Next(ResultProcessorCtx *ctx, SearchResult *res) { struct processor1Ctx *p = ctx->privdata; if (p->counter >= NUM_RESULTS) return RS_RESULT_EOF; res->docId = ++p->counter; res->score = (double)res->docId; RSFieldMap_Set(&res->fields, "foo", RS_NumVal(res->docId)); return RS_RESULT_OK; } int p2_Next(ResultProcessorCtx *ctx, SearchResult *res) { int rc = ResultProcessor_Next(ctx->upstream, res, 0); if (rc == RS_RESULT_EOF) return rc; RSFieldMap_Set(&res->fields, "bar", RS_NumVal(1337)); ctx->qxc->errorString = "Foo"; ctx->qxc->totalResults++; return RS_RESULT_OK; } static int numFreed = 0; static void resultProcessor_GenericFree(ResultProcessor *rp) { free(rp->ctx.privdata); free(rp); numFreed++; } int testProcessorChain() { QueryProcessingCtx pc = {}; struct processor1Ctx *p = malloc(sizeof(*p)); p->counter = 0; ResultProcessor *p1 = NewResultProcessor(NULL, p); p1->ctx.qxc = &pc; ASSERT(p1->ctx.privdata == p); ASSERT(p1->ctx.qxc == &pc); ASSERT(p1->ctx.upstream == NULL); p1->Next = p1_Next; p1->Free = resultProcessor_GenericFree; ResultProcessor *p2 = NewResultProcessor(p1, NULL); ASSERT(p2->ctx.privdata == NULL); ASSERT(p2->ctx.qxc == &pc); ASSERT(p2->ctx.upstream == p1); p2->Next = p2_Next; p2->Free = resultProcessor_GenericFree; int count = 0; SearchResult *r = NewSearchResult(); ASSERT(r != NULL); while (RS_RESULT_EOF != ResultProcessor_Next(p2, r, 0)) { count++; ASSERT_EQUAL(count, r->docId); ASSERT_EQUAL(count, r->score); RSValue *v = RSFieldMap_Get(r->fields, "foo"); ASSERT(v != NULL); ASSERT_EQUAL(RSValue_Number, v->t); ASSERT_EQUAL(count, v->numval); } ASSERT_EQUAL(NUM_RESULTS, count); ASSERT_EQUAL(NUM_RESULTS, pc.totalResults); ASSERT_STRING_EQ("Foo", pc.errorString); SearchResult_Free(r); numFreed = 0; ResultProcessor_Free(p2); ASSERT_EQUAL(2, numFreed); RETURN_TEST_SUCCESS; } TEST_MAIN({ TESTFUNC(testProcessorChain); })RediSearch-1.2.2/src/tests/test_stemmer.c000066400000000000000000000042151364126773500203550ustar00rootroot00000000000000#include "../stemmer.h" #include "../tokenize.h" #include "test_util.h" #include "../rmutil/alloc.h" #include int testStemmer() { Stemmer *s = NewStemmer(SnowballStemmer, "en"); ASSERT(s != NULL) size_t sl; const char *stem = s->Stem(s->ctx, "arbitrary", (size_t)strlen("arbitrary"), &sl); ASSERT(stem != NULL) ASSERT(!strcasecmp(stem, "+arbitrari")); ASSERT(sl == strlen(stem)); printf("stem: %s\n", stem); // free((void*)stem); s->Free(s); return 0; } typedef struct { int num; const char **expectedTokens; const char **expectedStems; } tokenContext; int testTokenize() { char *txt = strdup("Hello? world... worlds going ? -WAZZ@UP? שלום"); const char *expectedToks[] = {"hello", "world", "worlds", "going", "wazz", "up", "שלום"}; const char *expectedStems[] = {NULL /*hello*/, NULL /*world/*/, "+world" /*worlds*/, "+go" /*going*/, NULL /*wazz*/, NULL /*up*/, NULL /*שלום*/}; tokenContext ctx = {0}; ctx.expectedTokens = expectedToks; ctx.expectedStems = expectedStems; Stemmer *s = NewStemmer(SnowballStemmer, "en"); ASSERT(s != NULL) RSTokenizer *tk = NewSimpleTokenizer(s, DefaultStopWordList(), 0); Token t; tokenContext *tx = &ctx; tk->Start(tk, txt, strlen(txt), 0); while (tk->Next(tk, &t)) { printf("round %d\n", ctx.num); int ret = strncmp(t.tok, tx->expectedTokens[tx->num], t.tokLen); ASSERT(ret == 0); ASSERT(t.pos > 0); if (t.stem) { printf("Stem: %.*s, num=%d, orig=%.*s\n", (int)t.stemLen, t.stem, tx->num, (int)t.tokLen, t.tok); ASSERT(tx->expectedStems[tx->num]); ASSERT(strlen(tx->expectedStems[tx->num]) == t.stemLen); ASSERT(strncmp(tx->expectedStems[tx->num], t.stem, t.stemLen) == 0); } else { ASSERT(tx->expectedStems[tx->num] == NULL); } tx->num++; } ASSERT_EQUAL(ctx.num, 7); free(txt); return 0; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testStemmer); TESTFUNC(testTokenize); });RediSearch-1.2.2/src/tests/test_stopwords.c000066400000000000000000000027701364126773500207510ustar00rootroot00000000000000#include "test_util.h" #include #include void RMUTil_InitAlloc(); int testStopwordList() { char *terms[] = {strdup("foo"), strdup("bar"), strdup("שלום"), strdup("Hello"), strdup("WORLD")}; const char *test_terms[] = {"foo", "bar", "שלום", "hello", "world"}; StopWordList *sl = NewStopWordListCStr((const char **)terms, sizeof(terms) / sizeof(char *)); ASSERT(sl != NULL); for (int i = 0; i < sizeof(test_terms) / sizeof(const char *); i++) { ASSERT(StopWordList_Contains(sl, test_terms[i], strlen(test_terms[i]))); } ASSERT(!StopWordList_Contains(sl, "asdfasdf", strlen("asdfasdf"))); ASSERT(!StopWordList_Contains(sl, NULL, 0)); ASSERT(!StopWordList_Contains(NULL, NULL, 0)); StopWordList_Free(sl); for (int i = 0; i < sizeof(terms) / sizeof(const char *); i++) { free(terms[i]); } return 0; } int testDefaultStopwords() { StopWordList *sl = DefaultStopWordList(); for (int i = 0; DEFAULT_STOPWORDS[i] != NULL; i++) { ASSERT(StopWordList_Contains(sl, DEFAULT_STOPWORDS[i], strlen(DEFAULT_STOPWORDS[i]))); } const char *test_terms[] = {"foo", "bar", "שלום", "hello", "world", "x", "i", "t"}; for (int i = 0; i < sizeof(test_terms) / sizeof(const char *); i++) { // printf("checking %s\n", test_terms[i]); ASSERT(!StopWordList_Contains(sl, test_terms[i], strlen(test_terms[i]))); } StopWordList_Free(sl); return 0; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testStopwordList); TESTFUNC(testDefaultStopwords); });RediSearch-1.2.2/src/tests/test_summarize.c000066400000000000000000000064301364126773500207160ustar00rootroot00000000000000#include "test_util.h" #include "fragmenter.h" #include #include #include #include "../rmutil/alloc.h" #define LOREM_IPSUM_FILE "./lorem_ipsum.txt" #define GENESIS_FILE "./genesis.txt" static char *getFile(const char *name) { FILE *fp = fopen(name, "rb"); if (fp == NULL) { perror(name); abort(); } if (fseek(fp, 0, SEEK_END) != 0) { perror(name); abort(); } size_t nbuf = ftell(fp); if (fseek(fp, 0, SEEK_SET) != 0) { perror(name); abort(); } if (nbuf == 0) { fprintf(stderr, "File is empty!\n"); abort(); } char *buf = malloc(nbuf + 1); buf[nbuf] = '\0'; size_t nr, offset = 0; do { nr = fread(buf + offset, 1, nbuf - offset, fp); offset += nr; } while (nr > 0); if (strlen(buf) == 0) { perror(name); abort(); } fclose(fp); return buf; } #define SIMPLE_TERM(s) FRAGMENT_TERM(s, strlen(s), 1) #define SCORED_TERM(s, score) FRAGMENT_TERM(s, strlen(s), score) int testFragmentize() { char *lorem = getFile(GENESIS_FILE); const FragmentSearchTerm terms[] = {SCORED_TERM("adam", 1.5), SCORED_TERM("eve", 2), SIMPLE_TERM("good"), SIMPLE_TERM("woman"), SCORED_TERM("man", 0.7), SIMPLE_TERM("earth"), SCORED_TERM("evil", 1.3)}; size_t nterms = sizeof(terms) / sizeof(terms[0]); FragmentList fragList; FragmentList_Init(&fragList, 8, 6); // Fragmentize FragmentList_FragmentizeBuffer(&fragList, lorem, NULL, DefaultStopWordList(), terms, nterms); size_t nfrags = FragmentList_GetNumFrags(&fragList); const Fragment *allFrags = FragmentList_GetFragments(&fragList); ASSERT(allFrags != NULL); ASSERT(nfrags != 0); HighlightTags tags = {.openTag = "", .closeTag = ""}; char *hlRes = FragmentList_HighlightWholeDocS(&fragList, &tags); ASSERT(strlen(hlRes) > strlen(lorem)); free(hlRes); static const size_t numFrags = 3; Array contexts[numFrags]; memset(&contexts, 0, sizeof contexts[0] * numFrags); for (size_t ii = 0; ii < numFrags; ++ii) { Array_Init(&contexts[ii]); } FragmentList_HighlightFragments(&fragList, &tags, 15, contexts, numFrags, HIGHLIGHT_ORDER_SCOREPOS); // for (size_t ii = 0; ii < numFrags; ++ii) { // struct iovec *iovs = (struct iovec *)Buffer_GetData(&contexts[ii]); // size_t niovs = BUFFER_GETSIZE_AS(&contexts[ii], struct iovec); // printf("Frag[%lu]: NIOV=%lu\n", ii, niovs); // for (size_t jj = 0; jj < niovs; ++jj) { // const struct iovec *iov = iovs + jj; // printf("[%lu][%lu]: %.*s\n", ii, jj, (int)iov->iov_len, iov->iov_base); // } // } printf("Consolidated snippet ====\n"); for (size_t ii = 0; ii < numFrags; ++ii) { struct iovec *iovs = (void *)contexts[ii].data; size_t niovs = ARRAY_GETSIZE_AS(&contexts[ii], struct iovec); for (size_t jj = 0; jj < niovs; ++jj) { const struct iovec *iov = iovs + jj; printf("%.*s", (int)iov->iov_len, iov->iov_base); } printf(" ... "); } free(lorem); FragmentList_Free(&fragList); for (size_t ii = 0; ii < numFrags; ++ii) { Array_Free(contexts + ii); } return 0; } TEST_MAIN({ // LOGGING_INIT(L_INFO); RMUTil_InitAlloc(); TESTFUNC(testFragmentize); });RediSearch-1.2.2/src/tests/test_synonym_map.c000066400000000000000000000077151364126773500212620ustar00rootroot00000000000000#include "test_util.h" #include "../synonym_map.h" #include "rmutil/alloc.h" int testSynonymMapAddGetId() { SynonymMap* smap = SynonymMap_New(false); const char* values1[] = {"val1", "val2", "val3", "val4"}; const char* values2[] = {"val5", "val6", "val7", "val8"}; uint32_t id1 = SynonymMap_Add(smap, values1, 4); uint32_t id2 = SynonymMap_Add(smap, values2, 4); TermData* ret_id; ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val1")); ASSERT_EQUAL(ret_id->ids[0], id1); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val2")); ASSERT_EQUAL(ret_id->ids[0], id1); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val3")); ASSERT_EQUAL(ret_id->ids[0], id1); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val4")); ASSERT_EQUAL(ret_id->ids[0], id1); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val5")); ASSERT_EQUAL(ret_id->ids[0], id2); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val6")); ASSERT_EQUAL(ret_id->ids[0], id2); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val7")); ASSERT_EQUAL(ret_id->ids[0], id2); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val8")); ASSERT_EQUAL(ret_id->ids[0], id2); SynonymMap_Free(smap); RETURN_TEST_SUCCESS; } int testSynonymUpdate() { SynonymMap* smap = SynonymMap_New(false); const char* values[] = {"val1", "val2", "val3", "val4"}; const char* update_values[] = {"val5", "val6", "val7", "val8"}; uint32_t id = SynonymMap_Add(smap, values, 4); TermData* ret_id; ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val1")); ASSERT_EQUAL(ret_id->ids[0], id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val2")); ASSERT_EQUAL(ret_id->ids[0], id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val3")); ASSERT_EQUAL(ret_id->ids[0], id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val4")); ASSERT_EQUAL(ret_id->ids[0], id); SynonymMap_Update(smap, update_values, 4, id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val5")); ASSERT_EQUAL(ret_id->ids[0], id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val6")); ASSERT_EQUAL(ret_id->ids[0], id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val7")); ASSERT_EQUAL(ret_id->ids[0], id); ASSERT(ret_id = SynonymMap_GetIdsBySynonym_cstr(smap, "val8")); ASSERT_EQUAL(ret_id->ids[0], id); SynonymMap_Free(smap); RETURN_TEST_SUCCESS } int testSynonymGetMaxId() { SynonymMap* smap = SynonymMap_New(false); const char* values1[] = {"val1", "val2", "val3", "val4"}; const char* values2[] = {"val5", "val6", "val7", "val8"}; const char* values3[] = {"val9", "val10", "val11", "val12"}; SynonymMap_Add(smap, values1, 4); SynonymMap_Add(smap, values2, 4); SynonymMap_Add(smap, values3, 4); ASSERT_EQUAL(SynonymMap_GetMaxId(smap), 3); SynonymMap_Free(smap); RETURN_TEST_SUCCESS } int testSynonymGetReadOnlyCopy() { SynonymMap* smap = SynonymMap_New(false); const char* values1[] = {"val1", "val2", "val3", "val4"}; const char* values2[] = {"val5", "val6", "val7", "val8"}; const char* values3[] = {"val9", "val10", "val11", "val12"}; const char* values4[] = {"val13", "val14", "val15", "val16"}; SynonymMap_Add(smap, values1, 4); SynonymMap_Add(smap, values2, 4); SynonymMap_Add(smap, values3, 4); SynonymMap* read_only_copy1 = SynonymMap_GetReadOnlyCopy(smap); SynonymMap* read_only_copy2 = SynonymMap_GetReadOnlyCopy(smap); ASSERT(read_only_copy1 == read_only_copy2); SynonymMap_Add(smap, values4, 4); SynonymMap* read_only_copy3 = SynonymMap_GetReadOnlyCopy(smap); ASSERT(read_only_copy3 != read_only_copy2); SynonymMap_Free(smap); SynonymMap_Free(read_only_copy1); SynonymMap_Free(read_only_copy2); SynonymMap_Free(read_only_copy3); RETURN_TEST_SUCCESS } TEST_MAIN({ // LOGGING_INIT(L_INFO); RMUTil_InitAlloc(); TESTFUNC(testSynonymMapAddGetId); TESTFUNC(testSynonymUpdate); TESTFUNC(testSynonymGetMaxId); TESTFUNC(testSynonymGetReadOnlyCopy); }); RediSearch-1.2.2/src/tests/test_tag_index.c000066400000000000000000000025231364126773500206430ustar00rootroot00000000000000#include "test_util.h" #include "../tag_index.h" #include "../rmutil/alloc.h" #include "time_sample.h" #include "../util/arr.h" int testTagIndexCreate() { TagIndex *idx = NewTagIndex(); ASSERT(idx); // ASSERT_STRING_EQ(idx->) int N = 100000; char **v = array_newlen(char *, 3); v[0] = strdup("hello"); v[1] = strdup("world"); v[2] = strdup("foo"); size_t totalSZ = 0; for (t_docId d = 1; d <= N; d++) { size_t sz = TagIndex_Index(idx, v, d); ASSERT(sz > 0); totalSZ += sz; // make sure repeating push of the same vector doesn't get indexed sz = TagIndex_Index(idx, v, d); ASSERT(sz == 0); } ASSERT_EQUAL(idx->values->cardinality, array_len(v)); ASSERT_EQUAL(300000, totalSZ); IndexIterator *it = TagIndex_OpenReader(idx, NULL, "hello", 5, NULL, NULL, NULL, 1); ASSERT(it != NULL); RSIndexResult *r; t_docId n = 1; TimeSample ts; TimeSampler_Start(&ts); while (INDEXREAD_EOF != it->Read(it->ctx, &r)) { // printf("DocId: %d\n", r->docId); ASSERT_EQUAL(n++, r->docId); TimeSampler_Tick(&ts); } TimeSampler_End(&ts); printf("%d iterations in %lldns, rate %fns/iter\n", N, ts.durationNS, TimeSampler_IterationMS(&ts) * 1000000); ASSERT_EQUAL(N + 1, n); it->Free(it); array_free(v); return 0; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testTagIndexCreate); });RediSearch-1.2.2/src/tests/test_tokenize.c000066400000000000000000000017121364126773500205300ustar00rootroot00000000000000#include "test_util.h" #include "../tokenize.h" #include "../stemmer.h" #include "../rmutil/alloc.h" int testTokenize() { Stemmer *st = NewStemmer(SnowballStemmer, "english"); RSTokenizer *tk = GetSimpleTokenizer(st, DefaultStopWordList()); char *txt = strdup("hello worlds - - -,,, . . . -=- hello\\-world to be שלום עולם"); const char *expected[] = {"hello", "worlds", "hello-world", "שלום", "עולם"}; const char *stems[] = {NULL, "+world", NULL, NULL, NULL, NULL}; tk->Start(tk, txt, strlen(txt), TOKENIZE_DEFAULT_OPTIONS); Token tok; int i = 0; while (tk->Next(tk, &tok)) { ; ASSERT(tok.tokLen == strlen(expected[i])); ASSERT(!strncmp(tok.tok, expected[i], tok.tokLen)); if (!stems[i]) { ASSERT(tok.stem == NULL); } else { ASSERT(!strncmp(tok.stem, stems[i], tok.stemLen)); } i++; } free(txt); RETURN_TEST_SUCCESS; } TEST_MAIN({ RMUTil_InitAlloc(); TESTFUNC(testTokenize); })RediSearch-1.2.2/src/tests/test_trie.c000066400000000000000000000224461364126773500176520ustar00rootroot00000000000000#include "../trie/trie.h" #include "../trie/levenshtein.h" #include "../trie/rune_util.h" #include #include #include #include #include #include #include #include "test_util.h" #include "../dep/libnu/libnu.h" int count = 0; FilterCode stepFilter(unsigned char b, void *ctx, int *matched, void *matchCtx) { return F_CONTINUE; } // void *stepFilter(char b, void *ctx, void *stackCtx) { // SparseAutomaton *a = ctx; // dfaNode *dn = stackCtx; // unsigned char c = b; // if (dn->distance == -1) { // count++; // return NULL; // } // return dn->edges[c] ? dn->edges[c] : dn->fallback; // // // if (!SparseAutomaton_CanMatch(a,v)) { // // // return NULL; // // // } // // sparseVector *nv = SparseAutomaton_Step(a, v, b); // // // we should continue // // if (SparseAutomaton_CanMatch(a, nv)) { // // return nv; // // } // // sparseVector_free(nv); // // return NULL; // } int __trie_add(TrieNode **n, char *str, char *payloadStr, float sc, TrieAddOp op) { size_t rlen; rune *runes = strToRunes(str, &rlen); RSPayload payload = {.data = payloadStr, .len = payloadStr ? strlen(payloadStr) : 0}; int rc = TrieNode_Add(n, runes, rlen, &payload, sc, op); free(runes); return rc; } int testRuneUtil() { // convert from string to runes char *str = "yY"; rune expectedRunes[3] = {121, 89, 3}; size_t len; rune *runes = strToRunes(str, &len); ASSERT_EQUAL(len, 2); ASSERT_EQUAL(runes[0], expectedRunes[0]); ASSERT_EQUAL(runes[1], expectedRunes[1]); free(runes); // convert from runes back to string size_t backToStrLen; char *backToStr = runesToStr(expectedRunes, 2, &backToStrLen); ASSERT_STRING_EQ(str, backToStr); free(backToStr); // convert from string to runes size_t unicodeLen; rune expectedUnicodeRunes[5] = {216, 8719, 960, 229, 197}; char *expectedUnicodeStr = "Ø∏πåÅ"; rune *unicodeRunes = strToRunes(expectedUnicodeStr, &unicodeLen); ASSERT_EQUAL(unicodeLen, 5); for (int i = 0; i < 5; i++) { ASSERT_EQUAL(unicodeRunes[i], expectedUnicodeRunes[i]); } free(unicodeRunes); // convert from runes back to string size_t backUnicodeStrUtfLen; char *backUnicodeStr = runesToStr(expectedUnicodeRunes, 2, &backUnicodeStrUtfLen); for (int i = 0; i < 5; i++) { ASSERT_EQUAL(backUnicodeStr[i], expectedUnicodeStr[i]); } free(backUnicodeStr); size_t foldedLen; rune *foldedRunes = strToFoldedRunes("yY", &foldedLen); ASSERT_EQUAL(foldedLen, 2); ASSERT_EQUAL(foldedRunes[0], 121); ASSERT_EQUAL(foldedRunes[1], 121); free(foldedRunes); // TESTING ∏ and Å because ∏ doesn't have a lowercase form, but Å does size_t foldedUnicodeLen; rune *foldedUnicodeRunes = strToFoldedRunes("Ø∏πåÅ", &foldedUnicodeLen); ASSERT_EQUAL(runeFold(foldedUnicodeRunes[1]), foldedUnicodeRunes[1]); ASSERT_EQUAL(foldedUnicodeLen, 5); ASSERT_EQUAL(foldedUnicodeRunes[0], 248); ASSERT_EQUAL(foldedUnicodeRunes[1], 8719); ASSERT_EQUAL(foldedUnicodeRunes[2], 960); ASSERT_EQUAL(foldedUnicodeRunes[3], 229); ASSERT_EQUAL(foldedUnicodeRunes[4], 229); ASSERT_EQUAL(runeFold(foldedUnicodeRunes[4]), foldedUnicodeRunes[3]); free(foldedUnicodeRunes); return 0; } int testPayload() { rune *rootRunes = strToRunes("", NULL); TrieNode *root = __newTrieNode(rootRunes, 0, 0, NULL, 0, 0, 1, 0); ASSERT(root != NULL) free(rootRunes); char expectedRunes[3] = {'y', 'Y', '\0'}; int rc = __trie_add(&root, "hello", "yY", 1, ADD_REPLACE); ASSERT_EQUAL(1, rc); size_t rlen; rune *runes = strToRunes("hel", &rlen); DFAFilter fc = NewDFAFilter(runes, rlen, 1, 1); TrieIterator *it = TrieNode_Iterate(root, FilterFunc, StackPop, &fc); rune *s; t_len len; float score; RSPayload payload = {.data = NULL, .len = 0}; int matches = 0; int dist = 0; while (TrieIterator_Next(it, &s, &len, &payload, &score, &dist)) { ASSERT(score == 1); ASSERT(len > 0); ASSERT(payload.len == 2); ASSERT_EQUAL(payload.data[0], expectedRunes[0]); ASSERT_EQUAL(payload.data[1], expectedRunes[1]); matches++; } ASSERT(matches > 0); DFAFilter_Free(&fc); TrieIterator_Free(it); free(runes); TrieNode_Free(root); return 0; } int testTrie() { rune *rootRunes = strToRunes("", NULL); TrieNode *root = __newTrieNode(rootRunes, 0, 0, NULL, 0, 0, 1, 0); ASSERT(root != NULL) free(rootRunes); int rc = __trie_add(&root, "hello", NULL, 1, ADD_REPLACE); ASSERT_EQUAL(1, rc); rc = __trie_add(&root, "hello", NULL, 1, ADD_REPLACE); ASSERT_EQUAL(0, rc); // the second insert of the same term should result in 0 rc = __trie_add(&root, "help", NULL, 2, ADD_REPLACE); ASSERT_EQUAL(1, rc); __trie_add(&root, "helter skelter", NULL, 3, ADD_REPLACE); size_t rlen; rune *runes = strToRunes("helter skelter", &rlen); float sc = TrieNode_Find(root, runes, rlen); ASSERT(sc == 3); __trie_add(&root, "heltar skelter", NULL, 4, ADD_REPLACE); __trie_add(&root, "helter shelter", NULL, 5, ADD_REPLACE); // replace the score __trie_add(&root, "helter skelter", NULL, 6, ADD_REPLACE); sc = TrieNode_Find(root, runes, rlen); ASSERT(sc == 6); /// add with increment __trie_add(&root, "helter skelter", NULL, 6, ADD_INCR); sc = TrieNode_Find(root, runes, rlen); ASSERT(sc == 12); double score; rune *rstr; t_len l; TrieNode *rn = TrieNode_RandomWalk(root, 10, &rstr, &l); ASSERT(rn != NULL); ASSERT(rstr != NULL); ASSERT(l > 0); // ASSERT(rn->score > 0); size_t sl; char *str = runesToStr(rstr, l, &sl); fprintf(stderr, " found node: %s\n", str); free(rstr); rc = TrieNode_Delete(root, runes, rlen); ASSERT(rc == 1); rc = TrieNode_Delete(root, runes, rlen); ASSERT(rc == 0); sc = TrieNode_Find(root, runes, rlen); ASSERT(sc == 0); TrieNode_Free(root); free(runes); return 0; } int testUnicode() { char *str = "\xc4\x8c\xc4\x87"; rune *rn = strToRunes("", NULL); TrieNode *root = __newTrieNode(rn, 0, 0, NULL, 0, 0, 1, 0); free(rn); ASSERT(root != NULL) int rc = __trie_add(&root, str, NULL, 1, ADD_REPLACE); ASSERT_EQUAL(1, rc); rc = __trie_add(&root, str, NULL, 1, ADD_REPLACE); ASSERT_EQUAL(0, rc); size_t rlen; rune *runes = strToRunes(str, &rlen); float sc = TrieNode_Find(root, runes, rlen); free(runes); ASSERT(sc == 1); TrieNode_Free(root); return 0; } int testDFAFilter() { FILE *fp = fopen("./titles.csv", "r"); assert(fp != NULL); char *line = NULL; size_t len = 0; ssize_t read; size_t rlen; rune *runes = strToRunes("root", &rlen); TrieNode *root = __newTrieNode(runes, 0, rlen, NULL, 0, 0, 0, 0); ASSERT(root != NULL) free(runes); int i = 0; while ((read = getline(&line, &len, fp)) != -1) { char *sep = strchr(line, ','); if (!sep) continue; *sep = 0; double score = atof(sep + 1) + 1; sep--; while (*sep == ' ') { *sep-- = 0; } runes = strToRunes(line, &rlen); int rc = TrieNode_Add(&root, runes, rlen, NULL, (float)score, ADD_REPLACE); ASSERT(rc == 1); free(runes); i++; } fclose(fp); if (line) free(line); printf("loaded %d entries\n", i); char *terms[] = {"DostOEvsky", "dostoevski", "cbs", "cbxs", "gangsta", "geNGsta", "jezebel", "hezebel", "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d", "\xd7\xa9\xd7\x97\xd7\x95\xd7\x9d", NULL}; struct timespec start_time; clock_gettime(CLOCK_REALTIME, &start_time); for (i = 0; terms[i] != NULL; i++) { runes = strToFoldedRunes(terms[i], &rlen); DFAFilter fc = NewDFAFilter(runes, rlen, 2, 0); TrieIterator *it = TrieNode_Iterate(root, FilterFunc, StackPop, &fc); rune *s; t_len len; float score; int matches = 0; int dist = 0; clock_gettime(CLOCK_REALTIME, &start_time); while (TrieIterator_Next(it, &s, &len, NULL, &score, &dist)) { ASSERT(score > 0); ASSERT(dist <= 2 && dist >= 0) ASSERT(len > 0); // size_t ulen; // char *str = runesToStr(s, len, &ulen); // printf("Found %s -> %.*s -> %f, dist %d\n", terms[i], len, str, score, // dist); matches++; } ASSERT(matches > 0); DFAFilter_Free(&fc); TrieIterator_Free(it); free(runes); } char *prefixes[] = {"dos", "cb", "gang", "jez", "של", "שח", NULL}; for (i = 0; prefixes[i] != NULL; i++) { // printf("prefix %d: %s\n", i, prefixes[i]); runes = strToRunes(prefixes[i], &rlen); DFAFilter fc = NewDFAFilter(runes, rlen, 1, 1); TrieIterator *it = TrieNode_Iterate(root, FilterFunc, StackPop, &fc); rune *s; t_len len; float score; int matches = 0; int dist = 0; while (TrieIterator_Next(it, &s, &len, NULL, &score, &dist)) { ASSERT(score > 0); ASSERT(dist <= 1 && dist >= 0) ASSERT(len > 0); // printf("Found %s -> %.*s -> %f, dist %d\n", prefixes[i], len, s, // score, // dist); matches++; } ASSERT(matches > 0); DFAFilter_Free(&fc); TrieIterator_Free(it); free(runes); } TrieNode_Free(root); return 0; } TEST_MAIN({ TESTFUNC(testRuneUtil); TESTFUNC(testDFAFilter); TESTFUNC(testTrie); TESTFUNC(testPayload); TESTFUNC(testUnicode); }); RediSearch-1.2.2/src/tests/test_util.h000066400000000000000000000060271364126773500176660ustar00rootroot00000000000000#ifndef __TESTUTIL_H__ #define __TESTUTIL_H__ #include #include #include static int numTests = 0; static int numAsserts = 0; #define TESTFUNC(f) \ printf(" Testing %s\t\t", __STRING(f)); \ numTests++; \ fflush(stdout); \ if (f()) { \ printf(" %s FAILED!\n", __STRING(f)); \ exit(1); \ } else \ printf("[PASS]\n"); #define ASSERTM(expr, ...) \ if (!(expr)) { \ fprintf(stderr, "%s:%d: Assertion '%s' Failed: " __VA_ARGS__ "\n", __FILE__, __LINE__, \ __STRING(expr)); \ return -1; \ } \ numAsserts++; #define ASSERT(expr) \ if (!(expr)) { \ fprintf(stderr, "%s:%d Assertion '%s' Failed\n", __FILE__, __LINE__, __STRING(expr)); \ return -1; \ } \ numAsserts++; #define ASSERT_STRING_EQ(s1, s2) ASSERT(!strcmp(s1, s2)); #define ASSERT_EQUAL(x, y, ...) \ if (x != y) { \ fprintf(stderr, "%s:%d: ", __FILE__, __LINE__); \ fprintf(stderr, "%g != %g: " __VA_ARGS__ "\n", (double)x, (double)y); \ return -1; \ } \ numAsserts++; #define FAIL(fmt, ...) \ { \ fprintf(stderr, "%s:%d: FAIL: " fmt "\n", __FILE__, __LINE__, ##__VA_ARGS__); \ return -1; \ } #define RETURN_TEST_SUCCESS return 0; #define TEST_CASE(x, block) \ int x { \ block; \ return 0 \ } #define PRINT_TEST_SUMMARY printf("\nTotal: %d tests and %d assertions OK\n", numTests, numAsserts); #define TEST_MAIN(body) \ int main(int argc, char **argv) { \ printf("Starting Test '%s'...\n", argv[0]); \ body; \ PRINT_TEST_SUMMARY; \ printf("\n--------------------\n\n"); \ return 0; \ } #endifRediSearch-1.2.2/src/tests/test_value.c000066400000000000000000000056541364126773500200250ustar00rootroot00000000000000#include "test_util.h" #include int testValue() { RSValue *v = RS_NumVal(3); ASSERT_EQUAL(3, v->numval); ASSERT_EQUAL(RSValue_Number, v->t); v = RS_NullVal(); ASSERT_EQUAL(RSValue_Null, v->t); const char *str = "hello world"; v = RS_StringValC(strdup(str)); ASSERT_EQUAL(RSValue_String, v->t); ASSERT_EQUAL(strlen(str), v->strval.len); ASSERT(!strcmp(str, v->strval.str)); RSValue_Free(v); // cannot use redis strings in tests... v = RS_RedisStringVal(NULL); ASSERT_EQUAL(RSValue_RedisString, v->t); RETURN_TEST_SUCCESS; } int testField() { const char *k = "key"; RSField f = RS_NewField(k, RS_NumVal(3)); ASSERT_STRING_EQ(f.key, k); ASSERT_EQUAL(RSValue_Number, f.val->t); RETURN_TEST_SUCCESS; } int testArray() { RSValue *arr = RS_VStringArray(3, strdup("foo"), strdup("bar"), strdup("baz")); ASSERT_EQUAL(3, arr->arrval.len); ASSERT_EQUAL(RSValue_String, RSValue_ArrayItem(arr, 0)->t); ASSERT_STRING_EQ("foo", RSValue_ArrayItem(arr, 0)->strval.str); ASSERT_EQUAL(RSValue_String, RSValue_ArrayItem(arr, 1)->t); ASSERT_STRING_EQ("bar", RSValue_ArrayItem(arr, 1)->strval.str); ASSERT_EQUAL(RSValue_String, RSValue_ArrayItem(arr, 2)->t); ASSERT_STRING_EQ("baz", RSValue_ArrayItem(arr, 2)->strval.str); RSValue_Free(arr); char *strs[] = {strdup("foo"), strdup("bar"), strdup("baz")}; arr = RS_StringArray(strs, 3); ASSERT_EQUAL(3, arr->arrval.len); ASSERT_EQUAL(RSValue_String, RSValue_ArrayItem(arr, 0)->t); ASSERT_STRING_EQ("foo", RSValue_ArrayItem(arr, 0)->strval.str); ASSERT_EQUAL(RSValue_String, RSValue_ArrayItem(arr, 1)->t); ASSERT_STRING_EQ("bar", RSValue_ArrayItem(arr, 1)->strval.str); ASSERT_EQUAL(RSValue_String, RSValue_ArrayItem(arr, 2)->t); ASSERT_STRING_EQ("baz", RSValue_ArrayItem(arr, 2)->strval.str); RSValue_Free(arr); RETURN_TEST_SUCCESS; } int testFieldMap() { RSFieldMap *m = RS_NewFieldMap(8); ASSERT_EQUAL(0, m->len); ASSERT_EQUAL(8, m->cap); RSFieldMap_Add(&m, "foo", RS_NumVal(1)); RSFieldMap_Add(&m, "bar", RS_NumVal(2)); RSFieldMap_Add(&m, "baz", RS_NumVal(3)); ASSERT_EQUAL(3, m->len); ASSERT_EQUAL(8, m->cap); RSValue *v = RSFieldMap_Item(m, 0); ASSERT_EQUAL(v->t, RSValue_Number); ASSERT_EQUAL(1, v->numval); RSValue *v2 = RSFieldMap_Get(m, "foo"); ASSERT(v == v2); v = RSFieldMap_Item(m, 1); ASSERT_EQUAL(v->t, RSValue_Number); ASSERT_EQUAL(2, v->numval); v2 = RSFieldMap_Get(m, "bar"); ASSERT(v == v2); v = RSFieldMap_Item(m, 2); ASSERT_EQUAL(v->t, RSValue_Number); ASSERT_EQUAL(3, v->numval); v2 = RSFieldMap_Get(m, "baz"); ASSERT(v == v2); RSFieldMap_Set(&m, "foo", RS_NumVal(10)); v = RSFieldMap_Item(m, 0); ASSERT_EQUAL(v->t, RSValue_Number); ASSERT_EQUAL(10, v->numval); v2 = RSFieldMap_Get(m, "foo"); ASSERT(v == v2); RSFieldMap_Free(m); RETURN_TEST_SUCCESS; } TEST_MAIN({ TESTFUNC(testValue); TESTFUNC(testField); TESTFUNC(testArray); TESTFUNC(testFieldMap); })RediSearch-1.2.2/src/tests/time_sample.h000066400000000000000000000055711364126773500201540ustar00rootroot00000000000000#ifndef __RL_TIME_SAMPLE__ #define __RL_TIME_SAMPLE__ #include #include #include #include typedef struct { struct timespec startTime; struct timespec endTime; long long durationNS; int num; } TimeSample; static void TimeSampler_Start(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->startTime); ts->num = 0; } static void TimeSampler_Tick(TimeSample *ts) { ++ts->num; } static void TimeSampler_End(TimeSample *ts) { clock_gettime(CLOCK_REALTIME, &ts->endTime); ts->durationNS = ((long long)1000000000 * ts->endTime.tv_sec + ts->endTime.tv_nsec) - ((long long)1000000000 * ts->startTime.tv_sec + ts->startTime.tv_nsec); } static long long TimeSampler_DurationNS(TimeSample *ts) { return ts->durationNS; } static long long TimeSampler_DurationMS(TimeSample *ts) { return ts->durationNS / 1000000; } static double TimeSampler_DurationSec(TimeSample *ts) { return (double)ts->durationNS / 1000000000.0; } static double TimeSampler_IterationSec(TimeSample *ts) { return ((double)ts->durationNS / 1000000000.0) / (double)(ts->num ? ts->num : 1.0); } static double TimeSampler_IterationMS(TimeSample *ts) { return ((double)ts->durationNS / 1000000.0) / (double)(ts->num ? ts->num : 1.0); } #define TIME_SAMPLE_RUN(blk) \ { \ TimeSample ts; \ TimeSampler_Start(&ts); \ { blk; }; \ TimeSampler_End(&ts); \ printf("Execution time for " #blk ": %f seconds\n", \ TimeSampler_DurationSec(&ts)); \ } #define TIME_SAMPLE_RUN_LOOP(N, blk) \ { \ TimeSample ts; \ TimeSampler_Start(&ts); \ for (int __ts_loop = 0; __ts_loop < N; __ts_loop++) { \ blk; \ TimeSampler_Tick(&ts); \ }; \ TimeSampler_End(&ts); \ printf("Execution time for %d iterations of " #blk \ ": %f msec/iteration\n", \ ts.num, TimeSampler_IterationMS(&ts)); \ } #endifRediSearch-1.2.2/src/tests/titles.csv000066400000000000000000003005101364126773500175140ustar00rootroot00000000000000bhoj shala,1 radhika balakrishnan,1 ltm,1 steRlite energy,1 troll doll,11 sonNontiO,1 nickelodeon netherlands kids choice awards,1 jamAica National basketball team,5 clan mackenzie,1 secUre aTtention key,3 template talk indo pakistani war of 1971,1 hasSan fIrouzabadi,2 carter alan,1 alaN levY,1 tim severin,2 fauX pas derived from chinese pronunciation,1 jruby,3 tobIas nIelsén,1 avro 571 buffalo,1 treAsury stock,17 שלום,10 oxyGen 19,1 ntru,4 tenNis rAcquet,1 place of birth,4 couNcil Of canadians,1 urshu,1 ameRican hotel,1 dow corning corporation,3 lanGuage based learning disability,3 meri aashiqui tum se hi,30 speCificIty,9 edward l hedden,1 pelLi chEsukundam,2 of love and shadows,4 forT san felipe,2 american express gold card dress of lizzy gardiner,4 jovIan,5 kitashinagawa station,1 radHi jaIdi,1 cordelia scaife may,2 minOr eaRth major sky,1 bunty lawless stakes,1 higH capAcity color barcode,3 lyla lerrol,1 craWford roberts,1 collin balester,1 ugo crouSillat,1 om prakash chautala,3 izzY hoyLand,1 the poet,2 darYl saBara,6 aromatic acid,2 reiNa soFia,1 swierczek masovian voivodeship,1 houSing Segregation in the united states,2 karen maser,1 scaPtia Beyonceae,2 kitakyushu city,1 htc desiRe 610,4 dostoevsky,3 porTal vIctorian era,1 bose–einstein correlations,3 ralPh hoDgson,1 racquet club,2 walTer cAmp man of the year,1 australian movies,1 k04He,1 australia–india relations,2 johN wilLiam howard thompson,1 pro cathedral,1 padDyfieLd pipit,2 book finance,1 forD mavErick,10 slurve,4 mnoZil bRass,2 fiesta 9 1/8 inch square luncheon plate sunflower,1 korSi,1 draft 140th operations group,2 camP,29 series acceleration,1 aljOuf,1 democratic party of new mexico,2 uniTed kIngdom general election debates 2010,2 madura strait,2 bacK exaMination,1 borgata,2 il RitorNo di tobia,3 ovaphagous,1 motÖrheaD,9 hellmaster,1 ricHard Keynes,1 cryogenic treatment,3 monTe poRzio,1 transliteration of arabic,1 antI catHolic,2 a very merry pooh year,2 sufFixes in hebrew,3 barr body,16 alaSka cOnstitution,1 juan garrido,1 yi Lijun,1 wawa inc,2 endRe keLemen,1 l brands,18 lr44,1 coat of arms of the nagorno karabakh republic,1 antOnino fernandez,1 salisbury roller girls,1 zayAt,2 ian meadows,2 semIgaliA,1 khloe and lamar,2 holDing,1 larchmont edgewater,1 dynAmic Parcel distribution,6 seaworld,30 assIstanT secretary of war,1 digital currency,14 mazOmaniE wisconsin,1 sujatha rangarajan,8 strEet cHild,1 anna sheehan,1 vioLence jack,2 santi solari,1 temPlate talk texas in the civil war,1 colorss foundation,1 fauCaria,1 alfred gardyne de chastelain,2 traMp,1 cannington ontario,2 penGuinoNe,1 cardiac arrest,2 sumMan gRouper,1 cyndis list,1 cbs,2 salminus brasiliensis,2 kodIak bEar,26 cinemascore,9 phrAgmidIum,1 city of vultures,1 lawRence g romo,1 chandni chowk to china,1 scaRp reTreat,1 rosses point,1 carReterA de cádiz,1 chamunda,8 batTle oF stalingrad,1 who came first,2 salOme,5 portuguese historical museum,3 wesTfielD sarasota square,1 muehrckes nails,3 kenNebec north carolina,1 american classical league,1 how do yOu like them apples,1 mark halperin,20 cirCo,1 turner classic movies,2 ausTraliAn rules football in sweden,1 household silver,3 fraNk baIrd,1 escape from east berlin,2 a vIllagE romeo and juliet,1 wally nesbitt,6 josEph rEnzulli,2 spalding gray,1 danGaria kandha,1 pms asterisk,2 opeNal,1 romy haag,1 mh MessaGe handling system,4 pioneer 4,4 hmcS steTtler,1 gangsta,10 majOr thIrd,4 joan osbourn,1 mouNt coLumbia,2 active galactic nucleus,14 robErt cLary,8 eva pracht,1 ion implAntation,5 rydell poepon,4 balLer bLockin,2 enfield chase railway station,1 serGe auRier,13 florin vlaicu,1 van diemEns land,9 krishnapur bagalkot,1 oleKsandR zinchenko,96 collaborations,2 hecLa,2 amber marshall,7 ináCio hEnrique de gouveia,1 bronze age korea,1 slc punk,5 ryan jack,2 claThrus ruber,6 angel of death,4 valEntinEs park,1 extra pyramidal,1 kiaMi daVael,1 oleg i shuplyak,1 nidUm,2 friendship of salem,2 bèzE,3 arnold weinstock,1 ablE,1 s d ugamchand,1 the omegA glory,2 ami james,3 denMark At the 1968 summer olympics,1 kill me again,1 ricHmond town square,1 guy domville,1 jesSica Simpson,1 kinship care,1 bruGge rAilway station,2 unobtainium,16 carL johAn bernadotte,3 acacia concinna,5 epiNomis,1 interlachen country club,1 comPromiSe tariff,1 fairchild jk,1 dog traiNer,1 brian dabul,1 cai yong,1 jezebel,7 augArten porcelain,1 summerslam 1992,1 ion andoNi goikoetxea,2 dominican church vienna,1 iffHs woRlds best club coach,2 uruguayan presidential election 2009,2 savIng tHe queen,1 un cadavre,1 hisTory Of the jews in france,4 wbyg,1 chaRles De brosses,2 human weapon,2 hauNted Castle,3 austin maestro,1 seaRch fOr extra terrestrial intelligence,1 suwon,9 cosT per impression,1 osney lock,1 marKus eRiksson,1 cultural depictions of tony blair,2 eriCh keMpka,3 pornogrind,5 cheKhov,1 marilinda garcia,2 harD driVe,1 small arms,9 expLoratIon of north america,8 international korfball federation,1 phoTograPhic lens design,4 k hari prasad,1 lebAnese forces,3 greece at the 2004 summer olympics,1 letS triM our hair in accordance with the socialist lifestyle,2 battle of cassinga,5 donAld aNd the wheel,1 vti transmission,1 gilLe chLerig earl of mar,1 heart of atlanta motel inc v united states,6 oh Yeah,3 carol decker,5 praJakta shukre,4 profiling,17 thuKima,1 the great waldo search,1 nicK vinCent,2 the decision of the appeals jury is final and can only be overruled by a decision of the eXecutIve committee 2e,1 civilization board game,1 eraSmus+,1 eden phillpotts,1 unlEash The beast,1 varoujan hakhbandian,1 ferMats Last theorem,1 conan the indomitable,1 vagRant Records,1 house of villehardouin,1 zonEyeshA ulatha,1 ashur bel nisheshu,1 ten wijnGaerde,2 lgi homes,1 ameRican nietzsche a history of an icon and his ideas,1 european magpie,3 pabLo soTo,1 terminiello v chicago,1 vlaDimir cosma,2 battle of yunnan burma road,1 ophIrodeXia,1 thudar,1 norThern irish,2 bohemond of tarente,1 aniTa moOrjani,5 serra do gerês,1 forT horSted,1 metre gauge,2 staGe shOw,3 common flexor sheath of hand,2 conAll cOrc,1 array slicing,6 schÜfftaN process,1 anmol malik,3 out cold,2 antiknock,2 mosS forCe,1 paul medhurst,1 somOnauk illinois,1 george crum,11 babY talK,6 daniel mann,4 vacUum fLask,10 prostitution in the republic of ireland,5 butCh joNes,7 feminism in ukraine,1 st Marys church kilmore county wexford,1 sonny emory,1 satSuma Han,1 elben,1 the best of the rippingtons,3 m3p,1 boaT shaRing,1 iisco,1 hofToren,1 cannabis in the united kingdom,6 temPlate talk germany districts saxony anhalt,1 jean baptiste dutrou bornier,1 teyLers Museum,1 simons problem,2 gerArdus huysmans,1 pupillary distance,5 janE lowE,1 palais de justice brussels,1 hilLsdalE free will baptist college,1 raf wattisham,2 parNataaRa,1 jensen beach campus of the florida institute of technology,1 scoTtish gypsy and traveller groups,3 cliffs shaft mine museum,3 roaRing Forties,4 where in time is carmen sandiego?,2 perFect Field,1 rob schamberger,1 lcd sounDsystem,10 alan rathbone,26 setUp,1 gliding over all,4 dasTur,1 flensburger brauerei,3 berKeley global campus at richmond bay,1 kanakapura,1 minEworkErs union of namibia,1 tokneneng,3 mapUche Textiles,3 peranakan beaded slippers,1 gooDra,2 kanab ut,1 the gold act 1968,4 grey langur,1 proCol hArum,5 chris alexander,1 ft WaltoN beach metropolitan area,3 dimensionless quantity,16 the scieNce of mind,1 alfons schone,1 eupArtheNos nubilis,1 batrachotoxin,5 fabRic lIve 22,1 mchenry boatwright,1 lanGney Sports club,1 akela jones,1 looKout,2 matsuo tsurayaba,2 genEral Jackson,3 hair removal,14 afrIcan Party for the independence of cape verde,4 replica trick,1 broMfenaC,2 make someone happy,1 sam pancAke,1 denys finch hatton,10 latIn rhYthm albums,1 main bronchus,1 camPidogLio,4 cathaoirleach,1 emrEss jUstina,1 sulzbach hesse,1 nonCicatRicial alopecia,1 sylvan place,4 staLag i c,1 league of extraordinary gentlemen,1 serGey kOrolyov,2 serbian presidential election 1997,1 barNes lAke millers lake michigan,1 christmas island health centre,1 dayTon bAllet,2 gilles fauconnier,1 harAld sVergja,1 joanna newsom discography,2 astRo xi yue hd,1 code sharing,3 dreAmcasT vmu,1 armand emmanuel du plessis duc de richelieu,1 ecoLe suPérieure des arts du cirque,2 gerry mulligan,12 kaaKa kaAka,1 mexico at the 2012 summer olympics,4 bar wizaRds,2 christmas is almost here again,2 steRling heights michigan,4 gaultheria procumbens,3 ebeN etzEbeth,8 viktorija Čmilytė,1 los angeLes county california,39 family entertainment,2 quaNtum Well,9 elton,1 allAn frEwin jones,1 daniela ruah,32 gkd legeNd,1 coffman–graham algorithm,1 sanTa clAra durango,1 brian protheroe,3 craWler Transporter,10 lakshman,3 fes el bAli,2 mary a krupsak,1 iriSh ruGby football union,5 neuropsychiatry,2 josÉ pirEla,1 bonaire status referendum 2015,1 it,2 playhouse in the park,1 aleXandeR yakovlev,7 old bear,1 graPh toOl,2 merseyside west,1 romAnian armies in the battle of stalingrad,1 dark they were and golden eyed,1 aidAn obRien,8 town and davis,1 suuM cuiQue,3 german american day,2 norThampTon county pennsylvania,3 candidates of the south australian state election 2010,1 venAtor Marginatus,2 k60an,1 temPlate talk campaignbox seven years war european,1 maravi,1 flaIthbeRtach ua néill,1 junction ohio,1 davE walTer,1 london transport board,1 tuyUka,1 the moodys,3 noeL,3 eugen richter,1 cowAnshaNnock township armstrong county pennsylvania,1 pre columbian gold museum,1 lac demoSson,1 lincosamides,9 the vegaS connection,1 stephen e harris,1 alkAli fEldspar,2 brant hansen,1 draFt caRnatic music stub,4 the chemicals between us,1 bloOd anD bravery,1 san diego flash,3 covErt cHannel,5 ernest w adams,1 hilLs brOthers coffee,1 cosmic background explorer,4 intErnatIonal union of pure and applied physics,2 vladimir kramnik,21 hinTerlaNd,2 tinker bell and the legend of the neverbeast,5 ophIsops jerdonii,1 fine gold,1 net explOsive quantity,3 miss colorado teen usa,3 royAl phIlharmonic orchestra discography,1 elyazid maddour,1 matThew Kelly,2 templating language,1 japAn caMpaign,2 barack obama on mass surveillance,2 thoMas r donahue,1 old right,4 speNcer Kimball,1 golden kela awards,1 bliNn coLlege,3 w k simms,1 quiNto rOmano,1 richard mulrooney,1 mr BackuP z64,1 monetization of us in kind food aid,1 aleX chiLton,2 propaganda in the peoples republic of china,4 jiřÍ skaLák,8 m5 stuart tank,1 temPlate talk ap defensive players of the year,1 crisis,2 azuChi mOmoyama period,1 care and maintenance,2 a$aP mob,3 near field communication,111 hipS hipS hooray,1 promotional cd,1 andEan hAiry armadillo,1 trigueros del valle,1 elmWood Illinois,1 cantonment florida,2 marGo t Oge,1 national park service,36 monOngalIa county ballpark,3 bakemonogatari,6 felIcia Michaels,1 institute of oriental studies of the russian academy of sciences,2 ecoNomy Of eritrea,2 vincenzo chiarenza,1 micRoeleCtronics,4 fresno state bulldogs mens basketball,1 maoTou,1 blokely,1 dupLicatI,3 goud,2 nikI reiSer,1 edward leonard ellington,1 jasWant Singh of marwar,1 biharsharif,1 dynAsty /trackback/,1 machrihanish,4 jay steiNberg,1 peter luger steak house,3 palOokavIlle,1 ferrari grand prix results,2 banKruptCy discharge,2 mike mccue,2 nueStra Belleza méxico 2013,2 alex neal bullen,1 gus macdOnald baron macdonald of tradeston,2 florida circuit court,1 haaRp,2 v pudur block,1 groCer,1 shmuel hanavi,1 isaQueenA falls,2 jean moulin university,1 finAl faNtasy collection,1 template talk american frontier,1 cheX queSt,4 muslim students association,2 marCo piQue,1 jinja safari,1 the collEction,9 urban districts of germany,5 rajIv chIlaka,1 zion,2 vf 32,1 united states commission on civil rights,2 zazAm,1 barnettas,4 rebEcca Blasband,1 lincoln village,1 filM souNdtracks,1 angus t jones,77 snuPpy,3 w/indexphp,30 filE talK american world war ii senior military officials 1945jpeg,1 worship leader,1 ein qiniYa,1 buxton maine,1 matT dewItt,1 béla bollobás,3 earLysviLle union church,1 bae/mcdonnell douglas harrier ii gr9,1 calIfornIan condor,2 progressive enhancement,15 its not My time,4 ecw on tnn,2 ihoP,36 aeronautical chart,1 cliQue wIdth,1 fuengirola,8 arcHicebUs achilles,2 comparison of alcopops,1 carLa anDerson hills,1 roanoke county virginia,2 jaíLson Alves dos santos,1 rameses revenge,1 kayCee sTroh,5 les experts,1 nieLs skOusen,1 apollo hoax theories,1 merCedes w204,2 enhanced mitigation experience toolkit,15 berT barNes,1 serializability,6 ten plagUes of egypt,1 joe l brown,1 catEgory talk high importance chicago bears articles,1 stephen caffrey,3 eurOpean border surveillance system,2 achytonix,1 m2 MachiNe gun,1 gurieli,1 kunEfe,1 m33 helmet,3 litTle cArmine,1 smush,3 josÉ horAcio gómez,1 product recall,1 eggEr,1 wisconsin highway 55,1 harBledoWn,1 low copy repeats,1 curT genTry,1 united colors of benetton,1 adiAbatiC shear band,2 pea galaxy,1 wheRe arE you now,1 dils,1 surPrise s1,1 senate oceans caucus,2 winDsor New hampshire,1 a hawk and a hacksaw,1 i lOve iT loud,2 milbcom,1 old worlD vulture,7 camara v municipal court of city and county of san francisco,1 ski dubaI,1 st cyprians school,2 aibO,1 ticker symbol,2 henDrik Houthakker,1 shivering,5 jacOb arMinius,1 mowming,1 panJiva,2 namco libble rabble,5 rudOlph Bing,1 sindhi cap,2 logIcian,1 ford xa falcon,2 the sunnY side up show,1 helen adams,2 khaRchin,1 brittany maynard,13 kim kyu Jong,1 messier 103,3 leoN boiLer,1 the rapeman,1 twa fligHt 3,4 leading ladies,1 delTa ocTantis,2 qatari nationality law,1 lioNel cRipps,1 josé daniel carreño,1 cryPsotiDia longicosta,1 polish falcons,1 higHlandS north gauteng,1 the florida channel,1 oreSte bArale,1 ghazi of iraq,2 chaRles Grandison finney,4 ahmet ali,1 abbEytowN,1 caribou,3 big two,2 alien,14 aslAntaş dam,3 theme of the traitor and the hero,1 vlaDimir solovyov,1 laguna ojo de liebre,1 cliVe baRton,1 ebrahim daoud nonoo,1 ricHard Goodwin keats,2 back to the who tour 51,1 entErtaiNmentwise,1 ja preston,1 johN astIn,19 strict function,1 cam ranh international airport,2 gary pearson,1 sveN vätH,8 toad,6 johNny pAce,1 hunt stockwell,1 rolAndo Schiavi,1 claudia grassl,1 oxfOrd nOva scotia,1 maryland sheep and wool festival,1 conQuest of bread,1 erevan,1 comParisOn of islamic and jewish dietary laws,11 sheila burnford,1 estEvan Payan,1 ocean butterflies international,7 the royaL winnipeg rifles,1 green goblin in other media,2 vidEo gaMing in japan,8 church of the guanche people,4 gusTav hArtlaub,2 ian mcgeechan,4 hamMer aNd sickle,17 konkiep river,1 cerI ricHards,1 decentralized,2 depTh psYchology,3 centennial parkway,1 yugOslav monitor vardar,1 battle of bobbili,2 magNus iIi of sweden,1 england c national football team,2 thuRaakuNu,1 bab el ehr,1 koi,1 cully wilson,1 monEy laUndering,1 stirling western australia,1 jenNifer dinoia,1 eureka street,1 mesSage / call my name,1 make in maharashtra,4 hucKlebeRry creek patrol cabin,1 almost famous,5 truCk nuTs,4 vocus communications,1 gikWik,1 battle of bataan,4 conFluenCe pennsylvania,2 islander 23,1 mv SkorpIos ii,1 single wire earth return,1 polItics of odisha,1 crédit du nord,3 pipEr meThysticum,2 coble,2 katHleen a mattea,1 coachella valley music and arts festival,50 tooNiverSe,1 spofforth castle,1 araBian Knight,2 two airlines policy,1 hinDuja Group,17 swagg alabama,1 porTugueSe profanity,1 loomis gang,2 ninA vesElova,2 aegyrcitherium,1 beeS in Paradise,1 béládys anomaly,3 badAlte Rishtey,1 first bank fc,1 cysToseiRa,1 red book of endangered languages,1 rosE,6 terry mcgurrin,3 jasOn haWke,1 peter chernin,1 tu 204,1 the man who walked alone,1 tooL graDe steel,1 wrist spin,1 one step forward two steps back,1 theodor boveri,1 heuNginjImun,1 fama–french three factor model,34 bilLy whItehurst,1 rip it up,4 red lorrY yellow lorry,4 nao tōyama,8 genEral Macarthur,1 rabi oscillation,2 devÍn,1 olympus e 420,1 hydRa enTertainment,1 chris cheney,3 rio all Suite hotel and casino,3 the death gate cycle,2 fatIma,1 kamomioya shrine,1 fivE nigHts at freddys 3,14 the broom of the system,3 robErt bLincoe,1 history of wells fargo,9 pinOcytoSis,4 leaf phoenix,1 wxmW,2 tommy henriksen,13 gerI halLiwell discography,2 blade runneri have seen things you would not believe,1 madHwa bRahmins,1 i/o ventures,1 edoRisi Master ekhosuehi,2 junior orange bowl,1 khiT,2 sue jones,1 immOrtalIzed,35 city building series,4 qurAn trAnslation,1 united states consulate,1 dosE resPonse relationship,1 caitriona,1 colOcolo,21 medea class destroyer,1 vaaStav,1 etc1,1 johN altOon,2 thylacine,113 cycLing At the 1924 summer olympics,1 margaret nagle,1 supErpowEr,57 gülşen,1 antHems To the welkin at dusk,4 yerevan united fc,1 the famiLy fang,14 domain,4 higH speEd rail in india,14 trifolium pratense,7 floRida Mountains,2 national city corp,5 lenGth oF us participation in major wars,2 acacia acanthoclada,1 offAs dyKe path,2 enduro,7 howArd cEnter,1 littlebits,4 pláCido Domingo jr,1 hookdale illinois,1 the love language,1 cupids arrows,1 dc Talk,7 maesopsis eminii,1 herE comEs goodbye,1 freddie foreman,5 marVel cOmics publishers,1 consolidated city–county,5 couNtess marianne bernadotte of wisborg,1 los angeles baptist high school,1 magLalatIk,1 deo,2 meiLichiU,1 wade coleman,1 monSter Soul,2 julion alvarez,2 plaTinum 166,1 shark week,12 hosSbach memorandum,4 jack c massey,3 ardOre,1 philosopher king,5 dynAmic Random access memory,5 bronze age in southeastern europe,1 tamIl fiLms of 2012,1 nathalie cely,1 itaLian Capital,1 optic tract,3 shaKti kUmar,1 who killed bruce lee,1 parLemenT of brittany,3 san juan national historic site,2 livEwell,2 template talk om,1 al Bell,2 pzl w 3 sokół,8 durRës rAil station,3 david stubbs,1 phaRmacoN,3 railfan,7 comIcs bY country,2 cullen baker,1 maxImum Subarray problem,19 outlaws and angels,1 parAdise falls,2 mathias pogba,28 donElla Meadows,4 john leconte,2 swaZilanD national football team,7 gabriele detti,2 if Ever Youre in my arms again,1 christian basso,1 helEn shApiro,7 taisha abelar,1 fluId dyNamics,1 ernest wilberforce,1 kocAeli University,2 british m class submarine,1 modErn wOodmen of america,1 las posadas,3 fedEral Budget of germany,2 liberation front of chad,1 sanDomieRz,5 ap italian language and culture,1 manUel gOnzález,1 georgian military road,2 cleAr crEek county colorado,1 matt clark,2 tesT tubE,18 ak 47,1 dièGe,1 london school of economics+,1 micHael York,14 half eagle,6 strIke fOrce,1 type 054 frigate,2 sinO indIan relations,7 fern,3 louVencoUrt,1 ghb receptor,2 choNdrolAryngoplasty,2 andrew lewer,1 rosS kinG,1 colpix records,1 octOber 28,1 tatsunori hara,1 rosSana López león,1 haskell texas,3 towEr suBway,2 waspstrumental,1 temPlate talk nba anniversary teams,1 george leo leech,1 stiLl noThing moves you,1 blood cancer,3 bufFy lyNne williams,1 dpgc u know what im throwin up,1 danIel nAdler,1 khalifa sankaré,2 homO genUs,1 garðar thór cortes,3 veyYil,1 matt dodge,1 hipPonix subrufus,1 anostraca,1 harTshilL park,1 purple acid phosphatases,1 ausTromyRtus dulcis,1 shamirpet lake,1 favIla oF asturias,2 acute gastroenteritis,1 dalTon cAche pleasant camp border crossing,1 urobilinogen,13 ss KawarTha park,1 professional chess association,1 speCies Extinction,1 gapa hele bi sata,1 phyLlis Lyon and del martin,1 uk–us extradition treaty of 2003,1 a wOman Killed with kindness,1 how bizarre,1 norM augUstine,1 geil,1 volLeybaLl at the 2015 southeast asian games,2 jim ottaviani,1 cheKmaguShevskiy district,1 information search process,2 queEr,63 william pidgeon,1 ameLia aDamo,1 nato ouvrage "g",1 tamSin bEaumont,1 economy of syria,13 douGlas Dc 8 20,1 tama and friends,4 priNgles,22 kannada grammar,7 lotOja,1 peony,1 bmmI,1 eurovision song contest 1992,11 cerRo blAnco metro station,1 sherlock the riddle of the crown jewels,4 dorSa caTo,1 nkg2d,8 speCific heat,6 nokia 6310i,2 terGum,2 bahai temple,1 dal segnO,5 leigh chapman,2 tupOlev Tu 144,60 flight of ideas,1 ritA monTaner,1 vivien a schmidt,1 batTle oF the treasury islands,2 three kinds of evil destination,1 ricHlite,1 medinilla,2 timEline of aids,1 colin renfrew baron renfrew of kaimsthorn,2 hélÈne rOllès,1 pedro winter,1 sabIne fRee state,1 brzeg,1 palIsadeS park,1 gas gangrene,11 dotYk,2 daniela kix,1 canNa,16 property list,9 john hamburg,1 dunk island,5 albReda,1 scammed yankees,1 wirEball,3 junior 4,1 absOluteLy anything,15 linux operating system,1 solSbury hill,15 notopholia,1 scoTtish heraldry,2 template talk paper data storage media,1 catEgory talk religion in ancient sparta,1 category talk cancer deaths in puerto rico,1 mid michIgan community college,2 tvb anniversary awards,1 freDericK taylor gates,1 omoiyari yosan,3 jouRnal Of the physical society of japan,1 kings in the corner,2 nunGua,1 amerika,4 pacIfic Marine environmental laboratory,1 the thought exchange,1 itaLian Bee,5 roma in spain,1 sirInart,1 crandon wisconsin,1 shuBnikoV–de haas effect,6 portrait of maria portinari,4 colIn mcManus,1 universal personal telecommunications,1 royAl doCks,4 brecon and radnorshire,3 eilEma cAledonica,1 chalon sur saône,8 toyOta gRand hiace,1 sophorose,1 semIrefiNed 2bwax,1 mechanics institute chess club,1 the cultUre high,2 dont wake me up,1 traNscauCasian mole vole,1 harry zvi tabor,1 vhs assaUlt rifle,1 playing possum,2 omaR minAya,2 private university,1 yukI togAshi,3 ski free,2 say no mOre,1 diving at the 1999 summer universiade,1 armAndo Sosa peña,1 timur tekkal,1 jurA eleKtroapparate,1 pornographic magazine,1 tukUr yuSuf buratai,1 keep on moving,1 labOulbeNiomycetes,1 chiropractor solve problems,1 marK s aLlen,3 committees of the european parliament,4 bloNdie,7 veblungsnes,1 banK vauLt,10 smiling irish eyes,1 robErt kAlina,2 polarization ellipse,2 hunTingdOn priory,1 energy in the united kingdom,34 hamBle,1 raja sikander zaman,1 perIgea Hippia,1 college of liberal arts and sciences,1 booTblocK,1 nato reporting names,2 the serpEntwar saga,1 reformed churches in the netherlands,1 colLaborAtive document review,4 combat mission beyond overlord,3 vlrA,2 pat st john,1 oceAnid,5 itapetinga,1 insAne cHampionship wrestling,9 nathaniel gorham,1 estAdio Metropolitano de fútbol de lara,2 william of saint amour,2 new york drama critics circle award,1 alliant rq 6 outrider,2 ilsAn,1 top model po russki,1 wooLens,1 rutledge minnesota,1 joiGny cOach crash,2 zhou enlai the last perfect revolutionary,1 the theoRetical minimum,1 arrow security,1 johN sheLton wilder,2 jasdf,2 katIe maY,2 american jewish military history project,1 busIness professionals of america,1 questioned document examination,5 motOrola a760,1 american steel & wire,1 louIs arMstrong at the crescendo vol 1,1 edward vernon,3 marIa taIpaleenmäki,1 margical history tour,2 jar jar,1 australian oxford dictionary,2 revEnue Service,2 odoardo farnese hereditary prince of parma,1 weeKend In new england,1 laurence harbor new jersey,2 araMark Tower,1 stealers wheel,1 cepHalon,1 dawnguard,1 saiNtsbuRy,2 saint fuscien,1 ryoKo kuNinaka,1 farm to market road 1535,1 alaN kenNedy,2 esteban casagolda,1 shiN angYo onshi,1 william gowland,1 easTern Religions,6 kenny lala,1 alpHonso davies,1 tadamasa hayashi,1 meeT the parents,2 calvinist church,1 risToranTe paradiso,1 jose joaquim champalimaud,1 oliS,1 mill hill school,2 locKroy,1 battle of princeton,10 cenT,8 brough superior ss80,1 ras al kHaima club,3 washington international university,3 braDley Kasal,2 miguel Ángel varvello,1 oxyGen pErmeability,1 femoral circumflex artery,1 golDen sUn dark dawn,4 pusarla sindhu,1 toyOta wInglet,1 wind profiler,1 monTefioRe medical center,2 template talk guitar hero series,3 litTle lEaf linden,1 ramana,4 islAm in the czech republic,2 manuel vitorino,1 josEph rAdetzky von radetz,3 francois damiens,1 parAsite fighter,1 friday night at st andrews,3 hurBazum,1 haidhausen,1 petAbox,2 salmonella enteritidis,2 matThew R denver,1 de la salle,1 antI terRorism act 2015,6 brugsen,1 mouNtain times,1 columbia basin project,1 comMon wAllaroo,2 clepsis brunneograpta,1 red hot + dance,1 mao fumei,1 darK shrEw,1 coach,8 comE satUrday morning,1 aanmai thavarael,1 helLenia,1 donate life america,2 ploT of Beauty and the beast toronto musical,1 births in 1243,3 maiN pagE/wiki/portal technology,8 cambridgeshire archives and local studies,1 big pineS california,1 pegasus in popular culture,4 barOn glEndonbrook,1 your face sounds familiar,5 booM tubE,2 richard gough,8 the new Beginning in niigata,3 american academy of health physics,1 plaIn,9 tushino airfield,1 kinG geoRge v coronation medal,1 geologic overpressure,1 seiLle,1 calorimeter,25 freNch cIvil service,1 david l paterson,1 chiNese Gunboat chung shan,2 rhizobium inoculants,1 wizArd,4 baghestan,1 pauStian house,2 ellen pompeo,55 damIen wIlliams,1 tomoe tamiyasu,1 acuTe epIthelial keratitis,1 casey abrams,8 menDozitE,1 kantian ethics,2 mccLure Syndicate,1 tokyo metro,6 cuiSine Of guinea bissau,1 mossberg 500,18 molLie gIllen,1 above and beyond party,1 joeY carBone,1 faulkner state community college,1 tetSuya Ishikawa,1 electric flag,3 meeT the feebles,2 kplm,1 wheN we Were twenty one,1 horus bird,2 youTh in revolt,8 spongebob squarepants revenge of the flying dutchman,3 ehoW,5 nikos xydakis,2 zipRasidOne,19 ulsan airport,1 fleChtinGen,1 dave christian,3 delAware national guard,1 skaria thomas,1 iraCa,1 kkhi,2 swiMming at the 2015 world aquatics championships – mens 1500 metre freestyle,2 crossing lines,37 johN du Cane,1 i8,1 bauEr poTtery,1 affinity sutton,4 lotUs 119,1 uss arleigh burke,1 palMar iNterossei,2 nofx discography,4 bwiA wesT indies airways,3 gopala ii,1 norTh foRk correctional facility,1 szeged 2011,1 milLigraM per cent,2 halas and batchelor,1 whaT the day owes the night,1 sighișoara medieval festival,5 scaRning railway station,1 cambridge hospital,1 amnEsia Labyrinth,2 cokie roberts,7 savIngs Identity,3 pravia,1 mcgRath,4 pakistan boy scouts association,1 dan carpEnter,2 marikina–infanta highway,2 genEtic Analysis,2 template talk ohio state university,1 thoMas cHamberlain,4 moe book,1 coyOte wAits,1 black protestant,1 neeTu siNgh,19 mahmoud sarsak,1 casA lomA,28 bedivere,8 bouNdary park,2 danger danger,14 jenNifer coolidge,49 pop ya collar,1 colLaborAtion with the axis powers during world war ii,10 greenskeepers,1 the dukeS children,1 alaska off road warriors,1 tweNty fIve satang coin,1 template talk private equity investors,2 ameRican red cross,24 jason shepherd,1 geoRgetoWn college,2 ocean countess,1 ammOnium magnesium phosphate,1 community supported agriculture,5 phiLosopHy of suicide,4 yard ramp,2 capTain Germany,1 bob klapisch,1 i wIll nEver let you down,2 february 11,6 ron dennIs,13 rancid,16 the mall blackburn,1 south high school,6 chaRles Allen culberson,1 organizational behavior,66 autOmatiC route selection,1 uss the sullivans,9 yo No crEo en los hombres,1 janet,1 serEna aRmstrong jones viscountess linley,3 louisiana–lafayette ragin cajuns mens basketball,1 floWer fIlms,1 michelle ellsworth,1 norBertiNe rite,2 spanish mump,1 shaH jahAn,67 fraser coast region,1 matT corNwell,1 nra,1 creSted Butte mountain resort,1 college football playoff national championship,2 craIg heAney,4 devil weed,1 satSuki Sho,1 jordaan brown,1 litTle aNnie,4 thiha htet aung,1 the disrEputable history of frankie landau banks,1 mickey lewis,1 eldAr niZamutdinov,1 m1825 forage cap,1 antOnina makarova,1 mopani district municipality,2 al Jahra sc,1 chaim topol,4 tum saatH ho jab apne,1 piff the magic dragon,7 imaGininG argentina,1 ni 62,1 phyS rev lett,1 the peoples political party,1 casOto,1 popular movement of the revolution,4 hunTingtOwn maryland,1 la bohème,33 khiRbat Al jawfa,1 lycksele zoo,1 devEti kRug,2 cuba at the 2000 summer olympics,2 rosE wilSon,7 sammy lee,2 davE sheRidan,10 universal records,2 antIquitIes trade,3 shoveller,1 tapEred Integration,1 parker pen company,4 musHahid hussain syed,1 nynehead,1 couNter Reformation,2 nhl on nbc,11 ronNy roSenthal,2 arsenie todiraş,3 lobSter Random,1 halliburton,37 gorDon cOunty georgia,1 belle isle florida,3 molLy stAnton,3 green crombec,1 geoDesisT,2 abd al rahman al sufi,4 demOgrapHy of japan,26 live xxx tv,5 naiHanchI,1 cofinite,1 msnBot,5 clausard,1 mimIdae,1 wind direction,15 irrAtionAl winding of a torus,1 tursiops truncatus,1 truStee,1 lumacaftor/ivacaftor,2 balAncinG lake,2 shoe trees,1 cycLing At the 1928 summer olympics – mens team pursuit,1 calponia harrisonfordi,1 hinDu raTe of growth,1 dee gordon,7 pasSion White flag,2 frog skin,1 rudOlf eUcken,2 bayantal govisümber,1 chrIstopHer a iannella,1 robert myers,1 jamEs siMons,1 meng xuenong,1 abaYomi Olonisakin,1 milton wynants,1 cinCinnaTus powell,1 atomic bomb band,1 hopField network,12 jet pocket top must,1 the statE of the world,1 welf i duke of bavaria,2 ameRican civil liberties union v national security agency,3 elizabeth fedde,1 libRarytHing,2 kim fletcher,1 traCy isLand,2 praise song for the day,1 supErstaR,7 ewen spencer,1 bacK strIped weasel,1 cs concordia chiajna,1 bruCe cuRry,1 malificent,1 dr B r aMbedkar university,2 river plate,1 desHa coUnty arkansas,1 harare declaration,2 patRick Dehornoy,1 paul alan cox,2 aucKland mounted rifles regiment,1 mikoyan gurevich dis,3 corN excHange manchester,2 sharpshooter,1 the new York times manga best sellers of 2013,1 max perutz,2 andRei mAkolov,1 inazuma eleven saikyō gundan Ōga shūrai,2 tatRa 816,1 ashwin sanghi,8 pipEstonE township michigan,1 craig shoemaker,1 davId baTeson,1 lew lehr,1 creWe to manchester line,2 samurai champloo,36 talI ploSkov,2 janet sobel,3 kabE staTion,1 rippon,1 aleXandeR iii equestrian,1 louban,2 the twelFth night,1 delaware state forest,1 the amazIng race china 3,1 brillouins theorem,1 extReme North,3 super frelon,1 geoRge wAtsons,1 mungo park,1 worKin tOgether,3 boy,12 broWnsviLle toros,1 kim lim,1 futSal,63 motoring taxation in the united kingdom,1 accEleraTor physics codes,1 arytenoid cartilage,3 the pricE of beauty,3 life on the murder scene,2 hydRophySa psyllalis,1 jürgen brandt,2 ecoNomic history association,2 the sandwich girl,1 hebEr maCmahon,1 volume 1 sound magic,2 san franCisco–oakland–hayward ca metropolitan statistical area,9 harriet green,7 tarNawa Kolonia,1 eur1 movement certificate,20 annA nolAn,2 gulf of gökova,1 havErtowN,2 orlando scandrick,4 douG owsTon correctional centre,1 asterionella,4 espOstoa,1 ranked voting system,10 comMerciAl law,39 kirk,1 monGoliaN cuisine,8 turfanosuchus,1 artHur aNderson,4 sven olof lindholm,1 batHertoN,1 dimetrodon,1 piaNos bEcome the teeth,1 united kingdom in the eurovision song contest 1976,1 medIeval,11 it bites,1 ion teleVision,8 seaboard system railroad,3 sayAn moUntains,3 musaffah,1 chaRles De foucauld,3 urgh a music war,1 traNslit,1 american revolutionary war/article from the 1911 encyclopedia part 1,1 uss maunA kea,1 powder burn,1 balD facEd hornet,9 producer of the year,1 the most wanted man,1 clear history,8 mikAel lIlius,1 class invariant,4 forEver Michael,3 goofing off,3 towEr viEwer,3 claudiu marin,1 nicOlas Cage,1 waol,2 s10 nbc Respirator,2 education outreach,1 gyeOngsaN,2 template talk saints2008draftpicks,1 botAurus,1 francis harper,1 mauRitanIan general election 1971,1 kirsty roper,2 non sterOidal anti inflammatory drug,17 nearchus of elea,2 resIstanCe to antiviral drugs,1 raghavendra rajkumar,5 temPlate talk cc sa/sandbox,1 washington gubernatorial election 2012,2 pauL lovEns,1 express freighters australia,2 bunNy blEu,2 osaka prefecture,2 fedEral Reserve bank of boston,4 hacı ahmet,1 undErgroUnd chapter 1,10 filippo simeoni,2 the wondErful wizard of oz,3 sailing away,1 aveLino Gomez memorial award,1 badger,65 honGkou Football stadium,3 benjamin f cheatham,2 faiR isaAc,2 kwab,1 al Hank Aaron award,3 gender in dutch grammar,1 idiOm neUtral,2 da lata,1 tuu langUages,1 derivations are used,1 cleTe paTterson,1 danish folklore,4 andRoid App //orgwikipedia/http/enmwikipediaorg/wiki/westfield academy,1 toto,8 ea,1 victory bond tour,1 creDai,2 hérin,1 st James louisiana,1 necrolestes,2 cabLe knIt,1 saunderstown,1 us Route 52 in ohio,1 sailors rest tennessee,1 adlAi stEvenson i,6 miscibility,13 helP fooTnotes,13 murrell belanger,1 new hollAnd pennsylvania,5 haldanodon,1 femInine psychology,2 riot city wrestling,1 mobIle cOntent management system,2 zinio,1 cenTral Differencing scheme,2 enoch,2 usp florEnce admax,1 maester aemon,7 norMan "Lechero" st john,1 ice racing,1 tigEr cuB economies,6 klaipėda region,12 wu Qian,8 malayalam films of 1987,1 estAdio Nuevo la victoria,1 nanotoxicology,2 hot revoLver,1 nives ivankovic,1 gleN edwArd rogers,5 epicene,3 eocHaid Ailtlethan,1 judiciary of finland,1 en JerseY,1 statc,1 attA kim,1 mizi research,2 acs applIed materials & interfaces,1 thank god youre here,9 lonElineSs,8 h e b plus,2 corElla Bohol,1 money in the bank,59 golDen cIrcle air t bird,1 flash forward,1 catEgory talk philippine television series by network,1 dfmda,1 the road to wellville,8 ernst tüscher,1 comMissiOn,14 abdul rahman bin faisal,6 oveRsea Chinese banking corporation,7 ray malavasi,1 al QadisIyah fc,4 anisfield wolf book award,1 jacQues Van rees,1 jakki tha motamouth,1 scoOp,1 piti,2 carLos rEyes,1 v o chidambaram pillai,6 diaMonds sparkle,1 the great transformation,5 carDston alberta temple,1 la vendetta,1 miyOta nAgano,1 national shrine of st elizabeth ann seton,2 chaOtic,1 breastfeeding and hiv,1 friEdemaNn schulz von thun,1 mukhammas,2 fisHbowl worldwide media,1 mohamed amin,3 johN denSmore,10 suryadevara nayaks,1 metAl geAr solid peace walker,12 ché café,2 old growTh,1 lake view cemetery,1 konIgsbeRg class cruiser,1 courts of law,1 novA scoTia peninsula,3 jairam ramesh,4 porTal kErala/introduction,1 edinburgh 50 000 – the final push,1 ludAchriStmas,3 motion blur,1 delIberaTive process privilege,2 bubblegram,1 simOn brEach grenade,2 tess henley,1 gojInjo Daiko,1 common support aircraft,2 zelDa ruBinstein,9 yolanda kakabadse,1 ameRican studio woodturning movement,1 richard carpenter,67 vehIcle Door,3 transmission system operator,9 chrIsta Campbell,9 marolles en brie,1 korSholmA castle,1 murder of annie le,3 kimS,1 zionist union,8 porTal cUrrent events/june 2004,2 marination,8 cap haïtIen international airport,2 fujima kansai,1 vamPire Weekend discography,3 moncton coliseum,2 winG chaIr,1 el laco,2 casTle fRaser,1 template talk greek political parties,1 socIety Finch,1 chief executive officer,4 batTle oF bloody run,3 coat of arms of tunisia,2 nisHi kaWaguchi station,1 colonoscopy,30 vic taybAck,5 lonnie mack discography,3 yusUf saLman yusuf,2 marco simone,4 saiNt juSt,1 elizabeth taylor filmography,6 hagLöfs,2 yunis al astal,1 dayMond John,36 bedd y cawr hillfort,1 durJoy dAtta,1 wealtheow,1 aarOn mcEneff,1 culture in berlin,1 temPle oF saturn,6 nermin zolotić,1 the darwIn awards,1 patricio pérez,1 chrIs leVine,1 misanthropic,1 draGster,2 eldar,19 chrZanowO gmina szelków,1 zimmerberg base tunnel,6 jakOb scHaffner,1 california gubernatorial recall election 2003,1 tomMy moE,1 bikrami calendar,1 mamA saiD,11 hellenic armed forces,8 canDy boX,3 monstervision,3 kacHin iNdependent army,1 pro choice,1 tshIluba language,1 trucial states,9 colLana,1 best music video short form,1 pokÉmon +giratina+and+the+sky+warrior,1 etteldorf,1 acaDemic grading in chile,2 land and liberty,3 ausTraliAn bureau of meteorology,1 cheoin gu,1 wilLiam Henry green,1 ewsd,2 gatE of Hell,1 sioux falls regional airport,3 nevElj zSenit,1 bevo lebourveau,1 ranJana Ami ar asbona,1 shaun fleming,1 jeaN antOine siméon fort,1 sports book,1 vedRan sMailović,3 simple harmonic motion,29 wikIpediA talk wikiproject film/archive 16,1 princess jasmine,13 greAt buStard,5 allred unit,1 cheNg saN,1 mini paceman,1 flaVoproTein,2 storage wars canada,3 uniVersiTy rowing,2 category talk wikiproject saskatchewan communities,1 the washIngton sun,1 rotary dial,6 haiLar dIstrict,1 assistant secretary of the air force,2 the décoRation for the yellow house,5 chris mclennan,1 the cincInnati kid,4 education in the republic of ireland,15 steVe brOdie,2 country club of detroit,1 wazNer,1 portal spain,4 senNa,3 william j bernd house,1 balAji bAji rao,8 worth dying for,1 cooL rulEr,1 turn your lights down low,2 mavRoudiS bougaidis,1 national registry emergency medical technician,1 jamEs yoUng,8 eyewire,1 darK matTers twisted but true/,1 josé pascual monzo,1 gerMan eLection 1928,2 linton vassell,1 conVentiOn on the participation of foreigners in public life at local level,1 thorium fuel cycle,5 honEybabY honeybaby,1 golestan palace,3 lomBok iNternational airport,11 mainichi daily news,1 k&p,1 liberal network for latin america,1 cádIz meMorial,1 grupo corripio,1 eliE and earlsferry,1 isidore geoffroy saint hilaire,1 al SalmiYa sc,2 piano sonata hob xvi/33,1 e f bleiLer,1 national register of historic places listings in york county virginia,3 gupTa emPire,2 german immigration to the united states,1 thrOugh Gates of splendor,2 iap,1 lovE takEs wing,1 tours de merle,1 aleKsey Zelensky,1 paul almond,2 bosTon cAmbridge quincy ma nh metropolitan statistical area,1 komiks presents dragonna,1 priNcess victoire of france,1 alan pownall,3 tilAk naGar,2 lg life sciences co ltd,8 befOre tHeir eyes,1 labor right,5 micHiko To hatchin,1 susan p graber,1 xii,1 hanswulf,1 symBol rAte,17 myo18b,2 rowIng aT the 2010 asian games – mens coxed eight,1 caspar weinberger jr,2 betTle jUice,1 battle of the morannon,7 darLingtOn county south carolina,1 mayfield pennsylvania,1 ruwErrupT de mad,1 luthfi assyaukanie,1 fiaT panDa,30 wickiup reservoir,1 tanAbe–sUgano diagram,6 alexander sacher masoch prize,1 intRacelLular transport,1 church of the val de grâce,1 jebEl ad dair,1 rosalind e krauss,6 croSs orIgin resource sharing,97 readiness to sacrifice,1 creEl teRrazas family,1 phase portrait,9 subEpithElial connective tissue graft,1 lake malawi,18 phiLlips & drew,1 ernst vom rath,2 infInituS,1 geneva convention for the amelioration of the condition of the wounded and sick in armies in tHe fiEld,2 world heritage,1 dolE whiP,8 leveling effect,1 bioShip,3 vanilloids,2 supErionIc conductor,1 basil bernstein,7 armIn b Cremers,2 szlichtyngowa,1 beiXinqiAo station,1 united states presidential election in utah 1980,1 watSon v united states,3 willie mcgill,1 melLe beLgium,1 al majmaah,1 mesOlimbIc dopamine pathway,1 six flags new england,5 acp,2 geostrategy,2 oriGinal folk blues,1 wentworth military academy,1 broModicHloromethane,3 doublet,4 tawFiq aL rabiah,1 sergej jakirović,1 makO surGical corp,3 empire of lies,1 old soutHwest,1 bay of arguin,1 briNging up buddy,1 mustapha hadji,7 rayMond Kopa,7 evil horde,1 ketTerinG england,1 extravaganza,1 chrIstiaN labour party,2 joice mujuru,6 v,15 le père,4 my FatheRs dragon,2 cumulus cloud,32 fanTasy On themes from mozarts figaro and don giovanni,1 postpone indefinitely,1 extReme Point,1 iraq–israel relations,1 henRy le scrope 3rd baron scrope of masham,1 rating beer,1 claUde aLvin villee jr,2 clackamas town center,2 rooPe laTvala,4 richard bethell 1st baron westbury,1 ryaN gosLing,1 yelina salas,1 amiCus,1 cecilia bowes lyon countess of strathmore and kinghorne,6 proGrammIng style,9 now and then,9 somEthinGawful,1 nuka hiva campaign,1 bosTonguRka,2 jorge luis ochoa vázquez,1 phiLip bUrton,1 rainbow fish,7 roaD kilL,5 christiane frenette,2 as If,1 paul ricard,1 robErto Dañino,1 shoyu,1 jakArta,96 dean keith simonton,1 masTocytOsis,19 hiroko yakushimaru,3 proBlem Of other minds,2 jaunutis,1 tfp defiCiency,1 access atlantech edutainment,1 kriStian thulesen dahl,1 william wei,1 andY san dimas,10 kempten/allgäu,1 augUstus caesar,9 conrad janis,1 tugAya lAnao del sur,1 second generation antipsychotics,1 aneMa e Core,2 sucking the 70s,1 the czarS,2 vakulabharanam,1 f dOuble sharp,3 prymnesin,1 dicK bavEtta,2 billy jones,3 colUmbinE,4 file talk joseph bidenjpg,1 manDelbrOt set,79 constant elasticity of variance model,2 morRis mEthod,1 al shamal stadium,5 hes alriGht,1 madurai massacre,1 phiLip kWon,2 christadelphians,7 thiS man is dangerous,2 kiowa creek community church,1 pieR paoLo vergerio,1 order of the most holy annunciation,2 johN pleNder,1 vallée de joux,2 graYsby,1 ludwig minkus,3 potAto aPhid,1 bánh bột chiên,1 wilHelmsTraße,1 fee waybill,1 desIgned to sell,1 ironfall invasion,2 lieUtenaNt governor of the isle of man,1 third reading,2 eleAnor Roosevelt high school,1 su zhe,1 heaT conDuctivity,1 si satchanalai national park,1 etaLe spAce,1 faq,24 low carbOhydrate diet,1 differentiation of integrals,1 karL fogEl,2 tom chapman,3 jamEs gaMble rogers,2 jeff rector,1 burKut,9 joe robinson,1 turTle fLambeau flowage,1 moves like jagger,3 turBaco,1 oghuz turk,2 latEnt hUman error,5 square number,17 rugBy foOtball league championship third division,2 altoona pennsylvania,23 cirCus tEnt,1 satirical novel,1 claOxyloN,1 barbaros class frigate,4 oyeR and terminer,2 telephone numbers in the bahamas,1 thoMas c krajeski,2 mv glenachulish,1 spoRts bRoadcasting contracts in australia,3 car audio,1 ted lewiS,2 eric bogosian/robotstxt,2 furMan uNiversity japanese garden,1 jed clampett,2 fliNtstoNe,2 c of tranquility,2 rutAli,2 berkhamsted place,1 wisSam bEn yedder,13 nt5e,1 eroL onaRan,1 allium amplectens,1 the threE musketeers,2 north eastern alberta junior b hockey league,1 dogGie dAddy,1 lauma,1 the love racket,1 eta hoffman,1 ryaNs foUr,3 omerta – city of gangsters,1 humBerviEw secondary school,2 parels,1 the descEnt,1 evgenia linetskaya,1 manHunt International 1994,1 american society of animal science,1 ameRican samoa national rugby union team,1 faster faster,1 all creaTures great and small,1 mama said knock you out,9 rozHdestVeno memorial estate,2 wizard of odd,1 lugAlbanDa,4 beardsley minnesota,1 the roguE prince,10 uss escambia,1 stoRmy wEather,3 couleurs sur paris,1 madRigal,4 colin tibbett,1 lemElson–mit prize,2 phonetical singing,1 gluCophaGe,3 suetonius,10 ungRa,1 black and white minstrel,1 wooLwich west by election 1975,1 trolleybuses in wellington,2 jasOn maCdonald,3 ussr state prize,2 robErt m anderson,1 kichijōji,1 apaChe kId wilderness,1 sneaky pete,8 edwArd kNight,1 fabiano santacroce,1 hemEndra kumar ray,1 sweat therapy,1 steWart Onan,2 israel–turkey relations,1 natAlie Krill,5 clinoporus biporosus,1 kosMos 2470,2 vladislav sendecki,1 heaLthcaRe in madagascar,1 template talk 2010 european ryder cup team,1 ricHard Lyons,1 transfer of undertakings regs 2006,3 imaGe prOcessor,3 alvin wyckoff,1 kōbŌ abe,1 kettle valley rail trail,1 my Baby Just cares for me,3 u28,1 wesTern Australia police,10 scincidae,1 parTitioNism,1 glenmorangie distillery tour,1 rivEr caVe,1 szilárd tóth,1 i dOnt wAnt nobody to give me nothing,1 city,67 annAbel Dover,2 placebo discography,8 shoWbiz,8 solio ranch,1 loaN,191 morgan james,10 intErnatIonal federation of film critics,3 the frankenstones,2 pasTor bOnus,1 billy purvis,1 the gunfIghters,1 sandefjord,2 ohiO winE,2 for the love of a man,1 driFters,10 ilhéus,1 bikIni fRankenstein,1 subterranean homesick alien,1 cheMical nomenclature,17 great wicomico river,1 ingRid cAven,1 japanese destroyer takanami,1 nosLer pArtition,1 wagaman northern territory,1 sloVak pResidential election 2019,1 fuggerei,12 al Hibah,1 irish war of independence,2 joaN smaLlwood,1 anthony j celebrezze jr,1 merCedes benz m130 engine,2 phineas and ferb,2 belGium Womens national football team,3 reynevan,1 joe,1 alan wilson,1 ephA3,1 belarus national handball team,1 phaEdra,14 move,2 amaTeur Rocketry,3 epizootic hemorrhagic disease,5 praGue dErby,4 basilica of st thérèse lisieux,1 pomPeianUs,1 solved game,3 traMacet,19 essar energy,3 lumBar sTenosis,1 part,24 hải vân Tunnel,1 vsm group,3 walTer hOoper,2 consumer needs,1 belL helIcopter,18 launde abbey,2 ramUne,10 declarations of war during world war ii,1 saiNt laUrent de la salanque,1 balkenbrij,1 balGheim,1 out of the box,13 capPella,1 national pharmaceutical pricing authority,4 friEnd aNd foe,1 new democracy,1 easTern Phoebe,2 isipum of geumgwan gaya,1 tel quel,1 traveler,12 supErbeaSt,1 oddsac,1 zamOra sPain,1 declaration of state sovereignty of the russian soviet federative socialist republic,1 chuMash Painted cave state historic park california,3 zentiva,1 briTish Rail class 88,5 west indies cricket board,3 pauLi jøRgensen,1 punisher kills the marvel universe,7 wilLiam De percy,1 vehicle production group,4 uc IrvinE anteaters mens volleyball,2 dong sik yoon,1 hyæNa,2 canadian industries limited,1 mr Ii,1 jim muhwezi,1 citIzen Jane,2 night and day concert,1 douBle pRecision floating point format,2 herbal liqueurs,1 the fixeD period,5 pip/taz,1 lesSer cAucasus,2 uragasmanhandiya,2 altErnatIve words for british,2 khuzaima qutbuddin,1 helMut bAlderis,2 wesley r edens,1 scoTt saSsa,4 mutant mudds,3 easT kroTz springs louisiana,1 leonard frey,3 couNting sort,15 leandro gonzález pírez,2 shuLa maRks,1 sierville,1 calIfornIa commission on teacher credentialing,1 raymond loewy,10 beeVor fOundry,1 dog snapper,2 hitMan cOntracts,5 eduard herzog,1 witTard Nemesis of ragnarok,1 cape may light,1 al SaundErs,3 distant earth,2 beaM of Light,2 arent we all?,1 verIdicaLity,1 private enterprise,3 ramBhadrAcharya,3 dps,5 becKdorf,1 rúaidhrí de valera,1 vivIan bAng,3 sugar pine,1 vn ParamEswaran pillai,1 henry ross perot sr,1 the arcaDian,1 the record,6 g tUrner howard iii,1 oleksandr usyk,12 mumBai sUburban district,5 vicente dutra,1 paeAn,1 scottish piping society of london,1 ingOt,11 alex obrien,6 autOnomoUs counties of china,1 kaleorid,1 remIx & Repent,3 gender performativity,7 godHeadsIlo,1 tonsilloliths,1 la Dawri,1 kiran more,3 bilLboarD music award for woman of the year,1 tahitian ukulele,1 buiCk laCrosse,14 draft helen milner jury sent home for the night,2 hisTory Of japanese cuisine,6 time tunnel,1 albErt oDyssey 2,1 oysters rockefeller,4 jim mahoN,1 evolutionary invasion analysis,1 sunK cosT fallacy,3 universidad de manila,1 morGan cRucible,1 southern miss golden eagles football,2 horAtio Alger,13 biological psychopathology,1 holLywooD,115 product manager,21 thoMas bUrgh 3rd baron burgh,1 stan hack,1 pelOponeSian war,1 republic of china presidential election 2004,2 sanItariUm,4 growthgate,1 samUel e anderson,1 bobo faulkner,1 kafFebreNneriet,1 monponsett pond seaplane base,1 powErs oF horror,3 viburnum burkwoodii,1 new suez canal,5 gerardo ortíz,2 japHia lIfe,1 paul pastur,1 fulLer cRaft museum,1 nomal valley,1 inaUguraL address,1 saint Étienne du vigan,1 lip ribbOn microphone,2 mary cheney,2 pieBald,6 kadambas,1 traNsporTation in omaha,7 before the league,1 felTham And heston by election 2011,1 aboriginal music of canada,3 dnsSec,6 sshtunnels,1 robIn beNway,1 swimming at the 1968 summer olympics – mens 4 x 200 metre freestyle relay,1 comMissiOn internationale permanente pour lepreuve des armes à feu portatives,3 death rock,1 hugO junKers,6 gmt,3 keaNu reEves,2 beverly kansas,1 chaRlottE blair parker,1 kids,5 weiGht bEnch,1 kiasmos,8 basQue cOuntry autonomous basketball team,1 gideon toury,2 gugAk/,1 texass 32nd congressional district,2 havE you ever been lonely,1 take the weather with you,1 chuKchi,1 the magicians wife,1 juaN manUel bordeu,1 port gaverne,1 musIc foR films iii,1 northern edo masquerades,1 hanG gliDing,15 marine corps logistics base barstow,2 cenTury Iii mall,1 peter tarlow,1 theRmal Hall effect,1 david ogden stiers,18 webMonkeY,1 five cereals,2 oscEola Washington,1 clover virginia,2 sphInginAe,2 stuart brace,1 al Di meOla discography,7 sunflowers,1 hasTy geNeralization,4 polish athletic association,1 the purgE 3,2 bitetti combat mma 4,1 hirOko nAgata,2 mona seilitz,1 mixEd meMber proportional representation,7 rancho temecula,2 sinAi,1 norrmalmstorg robbery,5 silEsian walls,1 floyd stahl,1 garY becKer,1 knowledge engineering,5 porT of Mobile,1 luckiest girl alive,2 ilyA rabInovich,1 bridge,3 el GenerAl,3 cornerstone schools,1 gozMo,1 charles courtney curran,1 broKer,32 us senate committee on banking housing and urban affairs,2 retRoverSion of the sovereignty to the people,1 giorgi baramidze,1 larS graEl,1 abdul qadir,3 pgrEp,2 category talk seasons in danish womens football,1 malUs siEversii,1 god squad,4 catEgory of acts,1 melkote,1 linDa laNgston,1 sherry romanado,1 monTana Sky,8 history of burkina faso,1 iso 639 Kxu,1 los angeles fire department museum and memorial,1 recOgnizE,1 der bewegte mann,6 davY pröPper,1 outline of vehicles,2 gesTa frAncorum,1 sidney w pink,1 ronAld pIerce,1 martin munkácsi,1 norD norEg,1 accounting rate of return,7 urwErk,1 albert gallo,1 antEnnarIa dioica,3 transport in sudan,2 flaDry,1 cumayeri,1 benNingtOn college,11 pêro de alenquer,2 sixTh maN,1 william i of aquitaine,1 radIsson diamond,1 belgian united nations command,1 venUs geNetrix,1 sayesha saigal,14 invErse Dynamics,2 national constitutional assembly,1 honEy beAr,4 certosa di pavia,2 selEctivE breeding,31 let your conscience be your guide,1 han hyun jun,1 closed loop,8 temPlate talk golf major championships master,1 twin oaks community virginia,1 red flag,3 housing authority of new orleans,2 joiCe heTh,4 toñito,1 ivaN pavLov,2 madanapalle,4 ptaT,1 renger van der zande,1 anaErobiC metabolism,2 patrick osullivan,1 shiRakoyA okuma,1 permian high school,9 thoMas h ford,1 southfield high school,1 relIgion in kuwait,2 nathrop colorado,1 hefNer hUgh m,1 whitney bashor,1 popE sheNouda iii of alexandria,7 thomas henderson,1 tokKa anD rahzar,13 windows thumbnail cache,3 conSumer council for water,1 sake bombs and happy endings,1 lotHlórIen,1 the space bar,4 sakUma rAil park,1 oas albay,3 dan franKel,1 cliff hillegass,1 iroN sky,12 pentile matrix family,1 oreGon sYstem,1 california sea lion,7 jeaNneau,2 meadowhall interchange,1 lilLe caTholic university,1 nuñomoral,1 venDing Machine,30 xarelto,1 jonBenét ramsey,3 progresso castelmaggiore,1 tacTicitY,6 wing arms,1 gag,2 hank greenberg,8 garDa síOchána,14 puggy,1 p sAinatH,1 the year of living dangerously,9 armY resErve components overseas training ribbon,1 hmas nestor,1 johN becKwith,1 florida constitution,2 yonNe,3 benoît richaud,1 mamIlla Pool,2 gerald bull,14 davId haLberstam,12 my fair son,2 ncaA divIsion iii womens golf championships,1 anniela,1 kinG couNty,1 kamil jankovský,1 synAptic,3 rab,6 swiTched mode regulator,1 history of biochemistry,1 halAf,2 henry colley,1 co PostcOde area,3 social finance uk,1 cerCospoRa,2 the dao,1 uniTé raDicale,2 shinji hashimoto,3 tomMy reMengesau,3 isobel gowdie,2 mys prasAd,9 national palace museum of korea,1 basÍlica del salvador,2 no stone unturned,2 walTon gRoup,1 foramen ovale,1 slaVic nEopaganism,1 iowa county wisconsin,3 melOdi gRand prix junior,1 jarndyce and jarndyce,3 talAgundA,1 nicholas of autrecourt,1 subStituTion box,3 the power of the daleks,1 reaL gas,6 edward w hincks,1 kanGxi dIctionary,5 natural world,1 h h asquIth,21 francis steegmuller,1 sasHa roIz,3 media manipulation,1 looKing For comedy in the muslim world,2 bytown,4 preVisuaLization,1 rita ora discography,11 kieRsey Oklahoma,1 henry greville 3rd earl of warwick,1 draFt,4 phenolate,1 i bElievE,1 virologist,1 relIef iN abstract,1 eastern medical college,1 purVeyanCe,2 ascending to infinity,2 spoRtstiMe ohio,2 church of wells,1 ivoRy joE hunter,1 wayne mcgregor,2 lunA 17,4 viscount portman,2 wikIpediA talk wikipedia signpost/2009 07 27/technology report,1 negramaro,1 barKing Owl,2 i need you,2 broCkway mountain drive,1 template talk albatros aircraft,1 futUre sHock,11 china national highway 317,1 lauRent Gbagbo,7 plum pudding model,18 leaGue oF the rural people of finland,1 dundees rising,1 nikOn f55,1 olympic deaths,5 gemMa joNes,19 hafsa bint al hajj al rukuniyya,1 perSonal child health record,1 logic in computer science,11 bhyVe,3 hothouse,1 log housE,6 library of celsus,2 the lizzIe bennet diaries,1 leave this town the b sides ep,1 estImateD time of arrival,8 chariotry in ancient egypt,2 ameRican precision museum,1 dimos moutsis,1 scrIptleT,1 something in the wind,1 shaRka bLue,1 time on the cross the economics of american negro slavery,1 tomIslav kiš,1 khalid islambouli,7 banKruptCy abuse prevention and consumer protection act,7 gračanica bosnia and herzegovina,2 junGs thEory of neurosis,5 mgm animation,1 sovIet sUpport for iran during the iran–iraq war,3 native american,1 temPlate talk nigeria squad 1994 fifa world cup,1 norwegian lutheran church,4 adiA barNes,1 coatings,1 mehDi haJizadeh,1 the dead matter cemetery gates,1 fuzZy liTtle creatures,1 waje,7 anjI,1 heinz haber,1 turKish Albums chart,1 sebastian steinberg,1 priCe fiXing cases,2 bellator 48,1 edgAr r Champlin,1 otto hermann leopold heckmann,1 bisHops Stortford fc,4 stern–volmer relationship,6 morGan qUitno,2 five star general,1 iso 13406 2,1 black prince,11 leoPard Kung fu,1 felix wong,5 marY claIre king,6 alvar lidell,1 plaYonliNe,1 infantry branch,1 andRew pAttison,1 john turmel,1 kenT,74 edwin palmer hoyt,1 capTivitY narratives,1 jaguar xj220,1 hms tanaTside,2 new faces,2 edwArd lEvy lawson 1st baron burnham,1 samuel woodfill,3 jewIsh pArtisans,9 abandonware,16 earLy isLamic philosophy,2 sleeper cell,5 medIa of africa,2 san andreas,3 luxUria,2 egon hostovský,3 pelAgibaCteraceae,1 martin william currie,1 borEscopE,21 narratives of islamic origins the beginnings of islamic historical writing,1 lecOmptoN constitution,2 axé bahia,2 pauL gooDman,1 template talk washington nationals roster navbox,1 a sAucerFul of secrets,2 david carol macdonnell mather,1 porTal bUddhism,3 florestópolis,1 aleCs+goLf+ab,1 bank alfalah,1 fraNk peLlegrino,3 loutre,1 erp4it,2 monument to joe louis,2 witCh trIal of nogaredo,1 sabrina santiago,2 no Night so long,3 helena carter,1 renYa muTaguchi,3 yo yogi,4 bolIvariAn alliance for the americas,3 cooper boone,1 uss iowa,24 mitsuo iso,2 craNberrY,1 batrachotomus,1 ricHard Lester,5 bermudo pérez de traba,1 rosSer rEeves ruby,1 telecommunications in morocco,4 i a richArds,1 nidhal guessoum,1 lilLiefoRs test,6 the silenced,5 mamBilla plateau,1 sociology of health and illness,3 terEza cHlebovská,2 bismoll,3 kim suna,1 scream of the demon lover,1 joaN van ark,7 intended nationally determined contributions,6 dieTary Supplement,16 last chance mining museum,1 savOia mArchetti s65,1 if i can dream,1 mahAret And mekare,4 nea anchialos national airport,2 ameRican journal of digestive diseases,1 chance,2 locKheed f 94c starfire,1 the game game,1 kuzEy güNey,3 semmering base tunnel,1 thrEe miLe island,1 evaluation function,1 robErt mCkee,4 carmelo soria,1 monEta nOva,1 pīnyīn,1 intErnatIonal submarine band,3 elections in the bahamas,5 powEll aLabama,1 kmgv,1 chaRles Stuart duke of kendal,2 echo and narcissus,7 treNcrom hill,1 ashwini dutt,1 the herzEgovina museum,1 liverpool fc–manchester united fc rivalry,12 kerBer,1 flakpanzer 38,8 demOgrapHics of bihar,2 rico reeds,1 vanDenbeRg afb space launch complex 3,1 wiesendangen,1 lamM,1 allen doyle,2 anuSree,5 broad spectrum,1 bay middLeton,2 connect savannah,1 hisTory Of immigration to canada,22 waco fm,3 nakAno tAkeko,1 murnau am staffelsee,2 minArchy,1 haymans dwarf epauletted fruit bat,1 braChyglOttis repanda,1 associative,1 misSissiPpi aerial river transit,1 stefano siragusa,2 greGor tHe overlander,3 marine raider,1 pogOrzanS,1 sportcity,2 garAncahUa creek,1 vincent dimartino,3 ninJa,2 natural history museum of bern,1 revOlutiOnary catalonia,4 chiayi,1 aliX strAchey,3 looe island,1 colLege Football usa 96,1 off peak return,1 minSk 1 Airport,1 evangelical lutheran church in burma,2 rieMann–Roch theorem,1 the comic strip,2 vlaDimir istomin,1 america again,2 broWn trEecreeper,1 american high school,1 powErgliDe,2 oolitic limestone,1 daz1,1 jarrow vikings,1 pieRre pHilippe thomire,1 dorothy cadman,1 gasTon pAlewski,3 twin river bridges,1 im Yours,1 ambrose dudley 3rd earl of warwick,3 ssiM,2 original hits,1 cosMonauT,9 special educational needs and disability act 2001,4 wilL you speak this word,1 history of wolverhampton wanderers fc,1 don lawrEnce,1 tokyo metropolitan museum of photography,1 ordUspor,1 john lukacs,3 patRice Collazo,1 lords resistance army insurgency,5 ronAld "Slim" williams,5 drivin for linemen 200,1 nicOlò dA ponte,1 bucky pope,1 ewiNg miLes brown,2 ugly kid joe,28 ameRican flight 11,1 louzouer,1 disTrict hospital agra,1 jessica jane applegate,1 sexUalitY educators,1 serie a scandal of 2006,1 at War wIth reality,1 stephen wiltshire,13 vecHigen switzerland,1 rikki clarke,3 rayAkottAi,1 permanent magnet electric motor,1 qazI imdAdul haq,1 plywood,49 ntr teluGu desam party,1 skin lightening,1 royAl naTal national park,1 uss mcdougal,2 queEn of the sun,1 karanjachromene,1 on 90,1 enrique márquez,1 sieGfrieD and roy,1 city manager,6 wrdG,1 why i am not a christian,3 proTein Coding region,1 royal bank of queensland gympie,1 briTish Invasions of the river plate,2 yasufumi nakanoue,1 magNetic man,1 kickback,3 tilLandsIa subg allardtia,1 north american nr 349,1 ediCt of amboise,1 st andrew square edinburgh,2 flaG of Washington,2 timeless,2 new york state route 125,3 fudge,3 sinGle eNtry bookkeeping system,5 refractive surgery,8 bi MonthLy,1 park high school stanmore,1 norTon aNthology of english literature,1 michael wines,1 gafF rig,1 kosmos 1793,1 majOr faCilitator superfamily,2 talpur dynasty,1 byrOn brAdfute,1 quercitello,1 rcmP natIonal protective security program,1 ann kobayashi,1 recUrrinG saturday night live characters and sketches,3 abraham hill,1 nagApattInam district,4 pidgeon,3 mycAlessOs,1 technical university of hamburg,1 electric shock&ei=ahp0tbk0emvo gbe v2bbw&sa=x&oi=translate&ct=result&resnum=2&ved=0ceaq7gewaq&prev=/search?q=electric+shock&hl=da&biw=1024&bih=618&prmd=ivns,2 aim 54 phoenix,18 undercut,5 gokhale memorial girls college,1 digital penetration,19 centre for peace studies tromsø,1 richie williams,1 walloon region,1 albany city hall,2 maxine carr,4 anglosphere,18 effect of world war i on children in the united states,1 josh bell,1 german thaya,1 brian murphy,3 marguerite countess of blessington,1 leak,1 bubble point,5 international federation of human rights,1 clubcorp,2 greater philadelphia,1 daniel albright,1 macas,1 roses,4 woleu ntem,1 shades of blue,1 say aah,2 curtiss sbc,1 ion andone,1 firstborn,1 marringarr language,2 ann e todd,1 native american day,4 stand my ground,1 bavington,1 classification of indigenous peoples of the americas,2 always,6 leola south dakota,1 psycilicibin,2 roy rogers,1 marmalade,1 national prize of the gdr,1 shilp guru,1 m2 e 50,1 jorge majfud,2 cutter and bone,1 william steeves,1 lisa swerling,2 grace quigley,5 telecommunications in yemen,1 rarotonga international airport,7 cycling at the 2010 central american and caribbean games,2 mazda b3000,1 hanwencun,1 adurfrazgird,1 ivan ivanov vano,1 yhwh,1 qarshi,4 oshibori,2 uppada,1 iain clough,1 painted desert,7 tugzip,1 my little pony fighting is magic,143 pantheon,2 chinese people in zambia,1 yves saint laurent,3 texas helicopter m79t jet wasp ii,1 forever reign,1 charlotte crosby,32 ealdormen,9 copper phosphate,2 mean absolute difference,5 hôtel de soubise,5 josh rees,2 non commissioned officer,70 gb jones,1 im feeling you,2 book of shadows,9 brain trauma,1 sulpitius verulanus,1 vikranth,5 space adaptation syndrome,6 united states presidential election in hawaii 1988,1 joe garner,4 river suir bridge,2 the beach boys medley,1 joyce castle,1 christophe wargnier,1 ik people,2 sketch show,1 buena vista police department,1 file talk layzie bone clevelandjpg,1 gillian osullivan,3 prince albert of saxe coburg and gotha,2 berean academy,1 motorcraft quality parts 500,1 frederick law olmsted,21 born this way,9 sterling virginia,4 if wishes were horses beggars would ride,1 section mark,1 tapi,1 navy cross,1 housekeeper,1 gian battista marino,1 planá,1 chiromantes haematocheir,1 colonial life & accident insurance company,4 aduana building,2 kim johnston ulrich,1 berkelium 254,1 m&t bank corp,2 sit up,1 sheknows,1 phantom lady,1 bruce kamsinky,1 commercial drive,1 chinese people in the netherlands,1 sylvia young theatre school,4 influenza a virus subtype h2n3,1 dracut,2 nate webster,1 vila velebita,1 uaz patriot,4 democratic unification party,1 alexander slidell mackenzie,1 portland mulino airport,1 first person shooter,2 the temporary widow,1 terry austin,1 the foremans treachery,1 hms blenheim,1 sodium dichloro s triazinetrione,1 kurt becher,1 cumberland gap tn,1 newton cotes,1 daphne guinness,6 internal tide,1 god and gender in hinduism,2 howlin for you,1 stellarator,14 cavea,3 faye ginsburg,1 lady cop,3 template talk yugoslavia squad 1986 fiba world championship,1 solidarity economy,1 second presidency of carlos andrés pérez,1 bora bora,71 xfs,1 christina bonde,1 agriculture in australia,20 scenic drive,1 richard mantell,1 motordrome,1 broadview hawks,1 misty,2 international bank of commerce,2 istanbul sapphire,5 changkat keruing,1 the hotel inspector unseen,1 tharwa australian capital territory,2 strauss,2 shock film,1 ulick burke 1st marquess of clanricarde,2 valencia cathedral,5 kay bojesen,1 palogneux,1 texas beltway 8,1 jackie walorski,7 capital punishment in montana,1 byte pair encoding,2 upper deerfield township new jersey,2 lucca comics & games,1 lee chae young,1 czar alexander ii,1 kool ad,6 leopold van limburg stirum,1 john dunn,1 policeman,2 what dreams may come,3 grant ginder,1 chieverfueil,2 long island express,1 malmö sweden,2 song for my father,1 see saw,2 jean jacques françois le barbier,5 do rag,11 dsb bank,2 davical,6 cervical cap,1 gershon yankelewitz,1 the last hurrah,4 category talk educational institutions established in 1906,1 tour pleyel,1 león klimovsky,1 phyoe phyoe aung,1 phil sawyer,2 android app //orgwikipedia/http/enmwikipediaorg/wiki/swiftkey,1 deontological,3 juan dixon,12 robert pine,4 alexander tilloch galt,2 common tailorbird,12 derailed,7 mike campbell,3 terminator 2 3 d battle across time,3 technische universität münchen,4 baloana,1 echis leucogaster,1 lahore pigeon,1 william de beauchamp 9th earl of warwick,2 erin go bragh,14 economics u$a,1 villafranca montes de oca,1 pope eusebius,2 martin kruskal,1 félix de blochausen,1 jeff jacoby,1 mark krein,2 travis wester,2 fort louis de la louisiane,1 weddingwire,2 ping,54 don swayze,8 steve hamilton,3 rhenish,1 winrar,3 births in 1561,4 copyright law of the netherlands,2 floodland,9 tamil nadu tourism development corporation,1 dolls house,1 chkrootkit,1 search for the hero,1 avenal,1 tini,2 patamona,1 aspendos international opera and ballet festival,2 felix cora jr,5 yellow cardinal,2 antony jay,1 conda,1 a tramp shining,1 william miller,1 holomictic lake,2 growler,2 the violence of summer,1 meerschaum,3 cd138,1 karl friedrich may,1 history of iraq,2 henry ford,139 rumwold,1 beatrice di tenda,1 blaze,1 nick corfield,1 walt longmire,5 eleazar maccabeus,1 business edition,1 karl oyston,4 gypsy beats and balkan bangers,1 fa premier league 2004 05,1 agawan radar bomb scoring site,1 the hall of the dead,1 combat training centre,1 moroccan portuguese conflicts,2 pokipsy,1 minor characters in csi crime scene investigation,1 miguel molina,1 buckypaper,2 magazine,4 forget about it,2 marco schällibaum,1 r d smith,1 nfl playoff results,2 four score,1 centenary bank,2 london borough of camden,12 bhumij,1 counter reformation/trackback/,1 billy volek,1 cover song,1 awang bay,1 douglas fitzgerald dowd,3 architecture of ancient greece,5 ny1,2 academy award for best visual effects,3 history of the mbta,2 triangle group,1 charles r fenwick,1 berenice i of egypt,1 window detector,1 corruption perception index,1 leffrinckoucke,1 lee anna clark,1 burndy,2 inset day,2 american association of motor vehicle administrators,1 ckm matrix,1 angiopoietin 1,1 steven marsh,1 open reading frame,27 telesystems,1 pastoral poetry,1 west wycombe park,2 lithium,7 nogales international airport,1 wajków,1 sls 1,1 trillo,2 max s,1 verndale,1 yes sir i can boogie,1 blog spam,10 daniel veyt,1 william brown,3 takami yoshimoto,1 josh greenberg,4 geoffrey heyworth 1st baron heyworth,1 medeina,3 anja steinlechner,1 riviera beach florida,2 gerris wilkinson,1 north american lutheran church,1 paul dillett,11 proto euphratean language,1 best selling books,2 pumpellyite,1 business objects,1 fodor,2 xanadu,3 london river,1 draft juan de orduña,2 barriemore barlow,3 jew harp,1 birmingham,1 titus davis,1 march 2012 gaza–israel clashes,1 energy demand management,2 aquarium of the americas,3 tto,1 l h c tippett,1 optical fiber,88 onești,2 stanley ntagali,1 prussian blue,1 bill kovach,2 hip pointer,3 alessandra amoroso,4 fleet racing,1 navy maryland rivalry,1 cornering force,1 the mighty quest for epic loot,5 katalyst,2 the beef seeds,1 shack out on 101,1 aircraft carrier operations,1 overseas province,2 institute of state and law,1 light truck,5 plastics in the construction industry,2 little zizou,2 congenic,2 adriaen van utrecht,1 brian mcgrath,3 parvati,1 jason gwynne,1 kphp,1 miryusif mirbabayev,1 kōriyama castle,3 the making of a legend gone with the wind,2 shot traps,1 awa tag team championship,1 littlebourne,2 franchot tone,4 john dudley 2nd earl of warwick,2 mass spec,1 final fantasy vi,44 gerry ellis,1 adon olam,3 man 24310,1 p n okeke ojiudu,1 unqi,1 snom,1 bruce bagemihl,1 category talk animals described in 1932,1 metalist oblast sports complex,1 colley harman scotland,1 suka,1 anita sarkeesian,81 kazakhstan national under 17 football team,1 ym,2 matt barnes,1 tour phare,1 bellus–claisen rearrangement,2 turkey at the 2012 summer olympics,1 irréversible,32 umbilical nonseverance,1 wood stave,1 indian pentecostal church of god,1 camponotus nearcticus,3 john tesh,13 syncline,4 skins,50 kelsey manitoba,1 alkayida,2 polyglotism,17 forensic statistics,2 ram vilas sharma,8 pearl jam,71 dj max fever,1 islamic view of miracles,5 kds,1 alabama cavefish,1 johanna drucker,1 tom wolk,4 rottenburg,2 goshen connecticut,2 maker media,1 morphett street adelaide,1 keystone hotel,1 baseball hall of fame balloting 2005,1 gongzhuling south railway station,1 ss charles bulfinch,1 sig mkmo,1 cartman finds love,2 embassy of syria in washington dc,1 charles prince of wales,175 teachings of the prophet joseph smith,1 charles iv,1 alethea steven,1 type i rifle,2 a peter bailey,1 brain cancer,1 eric l clay,2 jett bandy,1 moro rebellion,9 eustachów,1 avianca el salvador,2 dont stop the party,4 reciprocal function,1 dagmar damková,1 hautmont,1 penguin english dictionary,2 waddie mitchell,1 technician fourth grade,3 hot girls in love,1 critérium du dauphiné,59 love song,2 roger ii,2 whitbread book award,1 thomas colepeper 2nd baron colepeper,2 a king and no king,1 big fish & begonia,5 mayville new york,2 molecularity,1 ed romero,1 one watt initiative,3 jeremy hellickson,2 william morgan,1 giammario piscitella,1 eastern lesser bamboo lemur,1 padre abad district,1 don brodie,1 facts on the ground,1 undeniable evolution and the science of creation,1 john of giscala,1 bryce harper,45 gabriela irimia,1 empire earth mobile,1 the queen vic,1 helen rowland,1 mixed nuts,5 malacosteus niger,2 george r r martin/a song of ice and fire,1 brock osweiler,11 tough,1 outline of agriculture,4 sea wolf,1 mo vaughn,4 the brood of erys,1 composite unit training exercise,1 isabella acres,4 the jersey,5 coal creek bridge,1 habana libre,1 nicole pulliam,1 john shortland,1 daniel pollen,1 magic kit,1 baruch adonai l&,1 a daughters a daughter,2 laughlin nevada,11 tubercule,1 louis laurie,1 internet boom,3 conversion of paul,1 comparison of software calculators,1 choctaw freedmen,2 josh eady,1 hôpital charles lemoyne,2 u mobile,2 john tomlinson,1 baré esporte clube,2 tuğçe güder,2 highams park railway station,4 newport east,1 clothing industry,6 scott rosenberg,6 my 5 wives,2 matt godfrey,1 port ellen,2 winecoff hotel fire,1 fide world chess championship 2005,2 lara piper,1 the little mermaid,1 foxmail,6 penn lyon homes,1 stockholm opera,1 american journal of theology,1 bernard gorcey,3 rodger collins,1 clarkeulia sepiaria,1 korean era name,3 melide ticino,1 unknown to no one,1 asilinae,1 scânteia train accident,1 parti de la liberté et de la justice sociale,1 falkland islands sovereignty dispute,13 castile,10 french battleship flandre,1 nils taube,1 anisa haghdadi,1 william tell told again,2 magister,3 zgc 7,1 national agricultural cooperative marketing federation of india,3 les bingaman,1 chebfun,1 portal current events/august 2014,2 eparchy of oradea mare,1 tempo and mode in evolution,2 seili,1 boniface,3 supportersvereniging ajax,1 support team,1 lactometer,1 twice as sweet,1 spruce pine mining district,2 banknotes of the east african shilling,1 cerebral cortex,3 tagalogs,1 german diaspora,8 grammelot,1 max a,1 category talk vienna culture,1 cheung kong graduate school of business,1 three certainties,1 multani,3 barry callebaut,15 joanne mcneil,1 z grill,4 commonwealth of australia constitution act 1900,1 ganzorigiin mandakhnaran,1 peter h schultz,1 ea pga tour,3 scars & memories,1 exodus from lydda,1 states reorganisation act 1956,4 guy brown,1 horsebridge,1 arthur mafokate,1 aldus manutius,5 american daylight,3 jean chaufourier,2 edmond de caillou,1 hms iron duke,9 displeased records,1 quantum turing machine,3 ncert textbook controversies,2 dracs,1 beyrouth governorate,1 staphylococcus caprae,1 tankard,2 surfaid international,1 hohenthurn,2 mission x 41,1 professional wrestling hall of fame,2 george mountbatten 4th marquess of milford haven,2 athletics at the 2012 summer paralympics womens club throw f31 32/51,1 knots and crosses,1 edge vector,1 philippe arthuys,1 baron raglan,1 odell beckham jr,3 elfriede geiringer,1 hyflux,1 author level metrics,2 ieee fellow,1 pori brigade,3 polyphenol antioxidant,1 the brothers,8 kakaji Ōita,1 shyam srinivasan,2 shahid kapoor,88 chuckie williams,1 colonial,4 roman spain,1 convolvulus pluricaulis,1 william j burns international detective agency,1 accessibility for ontarians with disabilities act 2005,1 linguist,1 agonist,2 xiaozi,1 holker hall,1 novatium,1 alois jirásek,1 lesser crested tern,1 names of european cities in different languages z,1 hydrogen cooled turbogenerator,2 indian airlines flight 257,1 united states attorney for the northern district of indiana,1 this is us,11 transaction capabilities application part,1 culiacán,6 hash based message authentication code,65 heinz murach,1 dual citizen,2 zhizn’ za tsarya,1 gabriel taborin technical school foundation inc,1 deaths in july 1999,1 aponi vi arizona,1 amish in the city,2 goodbye cruel world,1 st augustine grass,10 moesi,1 violette leduc,3 methyl formate,9 you walk away,1 the traveler,1 bond,89 moa cuba,3 hebrew medicine,1 women in the russian and soviet military,2 help log,2 cuillin,5 back fire,14 salesrepresentativesbiz,1 hogsnort rupert,1 dwarf minke whale,1 embassy of albania ottawa,1 cotai water jet,1 st lucie county florida,8 wesselman,1 american indian art,1 richard arkless,1 trolleybuses in bergen,1 vama buzăului,1 far east movement,9 threes a crowd,1 insane,3 linux technology center,4 patty duke,24 smuckers,1 kapalua,1 amf futsal world cup,5 umes chandra college,1 jnanappana,2 bar bar bar,1 beretta m951,2 libertarian anarchism,1 fart proudly,4 peyton place,5 phase detection autofocus,1 cavalry in the american civil war,9 class stratification,1 battle of cockpit point,1 regiment van heutsz,2 ana rivas logan,1 nenya,1 westland wah 64 apache,1 roslyn harbor new york,3 august wilhelm von hofmann,1 professional baseball,2 douglas feith,1 pogrom,21 aušra kėdainiai,1 pseudopeptidoglycan,4 arquà petrarca,1 wayampi,1 conservative government 1866 1868,1 world naked bike ride,28 fruitvale oil field,2 shuttle buran,1 robert c pruyn,1 totem,1 megalotheca,1 nkechi egbe,1 james p comeford,1 heavens memo pad,7 cauca valley,1 jungfraujoch railway station,2 seo in guk,24 bold for delphi,1 multiple frames interface,1 zhenli ye gon,6 kyabram victoria,1 two stars for peace solution,1 couette flow,9 new formalism,2 template talk 1930s comedy film stub,1 template talk scream,1 joona toivio,4 iaaf silver label road race,1 super bowl xxviii,5 i aint never,1 paul little racing,1 jacobite rising of 1715,3 katherine archuleta,1 programmable logic device,12 footsteps of our fathers,2 once upon a tour,1 tauck,1 budapest memorandum on security assurances,5 prostitution in chad,2 bebedouro,2 vice,2 madredeus,1 p diddy,1 princess alice of the united kingdom,20 jerry hairston jr,1 neo noir,3 self evaluation motives,1 relativity the special and the general theory,2 the sign of four,3 kevin deyoung,1 robin long,1 mokshaa helsa,1 nagaon,1 aniceto esquivel sáenz,1 sda,2 german battlecruiser gneisenau,1 assisted reproductive technology,12 cmmg,1 vision of you,1 keshia chanté discography,1 biofuel in the united kingdom,1 katinka ingabogovinanana,1 hutt valley,1 garwol dong,1 tunceli province,3 edwin bickerstaff,1 halloween 3 awesomeland,1 canadian records in track and field,1 ubisoft são paulo,1 midstream,16 jethro tull,4 childhoods end,55 ss rohilla,1 lagranges four square theorem,6 bucky pizzarelli,3 jannik bandowski,80 guðni Ágústsson,1 multidimensional probability distribution,1 brno–tuřany airport,2 broughtonia,5 cold hands warm heart,1 simone biles,32 bf homes parañaque,2 akaflieg köln ls11,3 street fighter legacy,2 beautiful kisses,1 first modern olympics,1 macbook air,1 dublab,1 silent night deadly night,6 earth defense force 2025,2 grant township carroll county iowa,1 gary williams,1 malmö aviation,1 geographical pricing,2 anaheim memorial medical center,1 mary+mallon,1 henry a byroade,1 wawasan 2020,4 eurovision dance contest,6 lydia polgreen,1 pilsen kansas,1 colin sampson,1 neelamegha perumal temple,1 james bye,2 canadian federation of agriculture,1 f w de klerk,34 bob casey jr,3 northport east,1 elian gonzalez affair,1 aleksei bibik,1 anthony dias blue,1 pyaar ke side effects,4 fusako kitashirakawa,1 cal robertson,4 shandong national cultural heritage list,1 police story 3 super cop,5 the third ingredient,3 dean horrix,1 pico el león,1 cesar chavez street,1 prospered,1 children in cocoa production,5 gervase helwys,1 binary digit,1 kovai sarala,4 mathematics and music,1 macroglossum,1 f gary gray,21 broadsoft,2 cachan,4 bukkake,21 church of st margaret of scotland,1 christopher cockerell,3 amsterdam oud zuid,1 county of bogong,1 intel mobile communications,1 the legend of white fang,1 millwright,19 will buckley,1 bill jelen,2 template talk san francisco 49ers coach navbox,1 amalia garcía,1 because he lives,1 air charts,1 stade edmond machtens,1 henry stommel,1 dxgi,1 misr el makasa sc,1 chad price,2 carl henning wijkmark,1 acanthogorgiidae,1 diqduq,1 prelog strain,2 crispin the cross of lead,4 avraham adan,2 barbershop arranging,1 free x tv,1 eric guillot,1 kht,1 never a dull moment,1 lwów school of mathematics,1 sears centre,3 chin state,6 van halen 2007 2008 tour,1 robert weinberg,3 fierté montréal,2 vince jack,1 heikki kuula,1 architecture of the republic of macedonia,1 glossary of education terms,1 aleksandra szwed,1 military history of europe,3 exeter central railway station,1 staroselye,1 lee thomas,7 saint peters square,2 romanization of hispania,2 file talk dodecahedrongif,1 signed and sealed in blood,8 colleges of worcester consortium,1 district electoral divisions,1 galkot,1 king África,3 monetary policy,57 brp ang pangulo,2 battle of mạo khê,1 air tube,1 ruth ashton taylor,2 keith jensen,1 headland alabama,1 willie loomis,1 interactive data extraction and analysis,2 georgetown city hall,2 chuck es in love,2 weeksville brooklyn,1 anatoly sagalevich,2 browett lindley & co,1 barnawartha victoria,1 pop,2 black balance,2 aceratorchis,1 emmeline pethick lawrence baroness pethick lawrence,1 osso buco,1 herminie cadolle,2 telegram & gazette,2 le van hieu,1 pine honey,2 nexvax2,1 leicester north railway station,1 jacqueline foster,1 bill handel,3 nizami street,1 radke,1 bob mulder,1 ambroise thomas,4 carles puigdemont i casamajó,1 callable bond,6 tesco metro,2 mohan dharia,1 great hammerhead,12 vinko coce,3 john mayne,1 cobb cloverleaf,1 uhlan,10 giulio migliaccio,1 belmont university,6 rinucumab,1 kearny high school,1 chūgen,1 stages,2 boar%27s head carol,1 knight of the bath,1 ayres thrush,7 sing hallelujah,1 the tender land,2 wholesale banking,1 jean jacques perrey,5 maxime bossis,2 sherman records,1 alan osório da costa silva,1 fannie willis johnson house,1 blacks equation,2 levinthals paradox,2 thomas scully,2 necron,3 university of alberta school of business,5 lake shetek,1 toby maduot,1 gavriil golovkin,1 sweetwater,3 atlantic revolutions,2 jaime reyes (comics,1 kajang by election 2014,1 mycotoxigenic,1 san marco altarpiece,2 line impedance stabilization network,2 santiago hernández,1 jazzland,3 host–guest chemistry,4 giovanni florio,2 st marylebone school,1 acqua fragile,1 the horse whisperer,10 don francis,1 mike molesevich,1 brad wright,1 north melbourne football club,3 brady dragmire,1 margaret snowling,2 wing chun terms,4 mckey sullivan,1 derek ford,1 cache bus,1 bernie grant arts centre,2 amata francisca,1 sinha,2 larissa loukianenko,1 oceans apart&sa=u&ved=0ahukewjw4n6eqdblahun7gmkhxxebd8qfgg4mag&usg=afqjcnhhjagrbamjgaxc7rpsso4i9z jgw,1 anemone heart,2 alison mcinnes,1 juan lindo,1 mahesh bhupati,1 baháí faith in taiwan,5 cinema impero,1 template talk rob thomas,1 likin,1 science & faith,1 fort saint elmo,3 delhi kumar,6 juha lallukka,1 situational sexual behavior,2 milligan indiana,1 william em lands,1 karl anselm duke of urach,2 hérold goulon,1 vedic mathematics,20 move to this,1 koussan,1 floored,1 raghu nandan mandal,1 angels gods secret agents,1 orthogonal,2 the little house on the prairie,1 chilean pintail,1 guardian angel,2 st leonard maryland,1 green parties in the united kingdom,1 time to say goodbye,1 alba michigan,2 harbourfront centre,1 corner tube boiler,1 consensus government,1 ppru 1,1 corporate anniversary,4 sazerac company,5 kyle friend,1 bmw k1100lt,1 pergola marche,1 commonwealth of kentucky,2 taiwan passport,2 clare quilty,1 domenico caprioli,1 frank m hull,1 cheng sui,2 nazi board games,3 spark bridge,1 derrick thomas,6 wunnumin 1,1 emotion remixed +,4 brian howard dix,2 brigalow queensland,2 burgi dynasty,1 apolonia supermercados,1 brandon lafell,2 one day,24 nara period,9 template talk the land before time,1 assyrians in iraq,1 trade union reform and employment rights act 1993,2 template talk evansville crimson giants seasons,1 boys be smile / 目覚めた朝にはきみが隣に,2 kapuloan sundha kecil,1 human impact of internet use,1 kolkata metro line 2,3 saint pardoux morterolles,1 carfin grotto,2 samuel johnson prize,3 french royal family,1 android app //orgwikipedia/http/enmwikipediaorg/wiki/victoria park,1 mazda xedos 9,1 măiestrit,1 petroleum economist,2 penetration,2 adrian rawlins,8 plutonium 239,11 culture of montreal,1 british germans,2 warszawa wesoła railway station,1 lorenzo di bonaventura,6 military ranks of estonia,1 uss flint,8 arthur f defranzo,1 sadeh,1 jammu and kashmir,3 igor budan,2 charmila,2 choi,1 mohammed ali khan walajah,1 sourabh varma,1 after here through midland,1 martyn day,1 justin larouche,1 illinoiss 6th congressional district,4 jackson wy,1 tyson apostol,4 mitch morse,1 robert davila,1 canons regular of saint john cantius,1 giant girdled lizard,2 cascade volcanoes,5 fools day,1 cordyline indivisa,1 pueraria,2 swiss folklore,4 meretz,3 united states senate elections 1836 and 1837,1 baby i need your love/ easy come easy go,1 butrus al bustani,2 the lion the lamb the man,1 rushikulya,1 brickworks,3 alliance party of kenya,1 ludlow college,1 internationalism,11 ernest halliwell,1 constantine phipps 1st marquess of normanby,1 kari ye bozorg,1 signal flow,4 i beam,1 devils lake,1 union of artists of the ussr,2 index of saint kitts and nevis related articles,1 ethernet physical layer,18 dimensional analysis,16 anatomical directions,2 supreme court of guam,1 sentul kuala lumpur,2 ducefixion,1 red breasted merganser,4 reservation,3 in the land of blood and honey,9 kate spade,2 albina airstrip,1 kankakee,1 servicelink,2 castilleja levisecta,1 tonmeister,2 chanda sahib,1 lists of patriarchs archbishops and bishops,1 mach zehnder modulator,1 giants causeway,79 literal,7 uss gerald r ford,1 monster hunter portable 3rd,3 bayern munich v norwich city,1 banking industry,1 prankton united,1 st elmo w acosta,1 speech disorder,9 welcome to my dna,1 nouriel roubini,6 arthur kill,2 bill grundy,7 jake gyllenhaal,1 world bowl 2000,1 wnt7a,1 pink flamingo,2 tridentine calendar,1 ray ratto,1 f 88 voodoo,1 super star,4 ondřej havelka,1 sophia dorothea of celle,12 clavulina tepurumenga,1 vampire bats,4 ihsan,1 ocotea foetens,1 gannett inc,1 kemira,4 gre–nal,2 farm bureau mutual,1 pete fox,1 let him have it,3 backwoods home magazine,6 te reo maori remixes,1 hussain andaryas,1 bagun sumbrai,1 the westin paris – vendôme,4 xochiquetzal,4 players tour championship 2013/2014,1 picnic,7 josh elliott,5 ernak,3 gracias,1 k280ff,1 bandaranaike–chelvanayakam pact,1 patrick baert,1 nausicaä of the valley of the wind,33 al jurisich,1 twitter,230 window,38 the power hour,1 duplex worm,1 sonam bajwa,16 baljit singh deo,1 indian jews,1 outline of madagascar,1 outback 8,1 dye fig,1 british columbia recall and initiative referendum 1991,1 felipe suau,1 north perry ohio,1 gilbeys gin,1 philippe cavoret,1 luděk pachman,1 the it girl,1 dragonnades,1 rick debruhl,2 xpath 20,2 sean mcnulty,1 william moser,1 international centre for the settlement of investment disputes,1 mendes napoli,2 canadian rugby championship,1 battle of maidstone,2 boulevard theatre,2 snow sheep,3 penalty corner,1 michael ricketts,5 crocodile,2 job safety analysis,5 duffy antigen,1 counties of virginia,1 a place to bury strangers,5 socialist workers’ party of iran,1 wlw t,1 core autosport,1 west francia,10 karen kilgariff,2 pacific tsunami museum,1 first avenue,1 troubadour,1 great podil fire,1 chilean presidential referendum 1988,1 pavol schmidt,1 handguard,1 crime without passion,1 dio at donington uk live 1983 & 1987,1 optic nerves,1 wake forest school of medicine,1 new jersey jewish news,2 luke boden,2 chris hicky,1 beforu,2 verch,1 st roch,3 civitas,1 tmrevolution,3 jamie spencer,1 bond beam,1 megan fox,4 battle of bayan,1 japan airlines flight 472,1 yuen kay san,1 the friendly ghost,1 rice,14 jack dellal,16 lee ranaldo,9 the overlanders,1 earl castle stewart,5 first down,1 rheum maximowiczii,1 washington state republican party,2 ostwald bas rhin,1 tennessee open,1 kenneth kister,1 ted kennedy,72 preben elkjaer,1 india reynolds,2 santagata de goti,1 henrietta churchill 2nd duchess of marlborough,1 creteil,1 ntt data,3 zoot allures,4 theatre of ancient greece,29 bujinkan,6 clube ferroviário da huíla,2 nhn,4 hp series 80,2 interstate 15,4 moszczanka,1 lawnside school district,1 virunga mountains,5 hallway,1 serb peoples radical party,1 free dance,1 mishawaka amphitheatre,1 deerhead kansas,1 utopiayile rajavu,1 john w olver transit center,1 futa tooro,1 digoxigenin,5 thomas schirrmacher,1 twipra kingdom,1 pulpwood,6 think blue linux,1 raho city taxi,1 frederic remington art museum,1 wajdi mouawad,1 semi automatic firearm,12 phyllis chase,1 malden new york,1 the aetiology of hysteria,2 my maserati does 185,1 friedrich wilhelm von jagow,1 apne rang hazaar,1 bór greater poland voivodeship,1 india rubber,2 bring your daughter to the slaughter,4 yasser radwan,1 kuala ketil,1 notre dame de paris,1 yuanjiang,1 fengjuan,1 tockenham,1 transnistrian presidential election 1991,1 gautami,28 providenciales airport,1 donald chumley,1 middle finger,8 calke abbey,4 thou shalt not kill,1 trail,7 battle of dunkirk,43 eyre yorke block,3 mactan,3 american ninja warrior,2 nevel papperman,1 ninja storm power rangers,1 uss castle rock,1 turcos,1 philippine sea frontier,1 irom chanu sharmila,7 for the first time,2 stian ringstad,1 tréon,1 hiro fujikake,1 renewable energy in norway,4 dedh ishqiya,18 leucothoe,2 ecmo,2 knfm,1 gangnam gu,1 oadby town fc,1 clamperl,2 mummy cave,2 kenneth d bailey,2 peter freuchen,2 dayanand bandodkar,2 shawn crahan,16 barbara trentham,2 university of virginia school of nursing,1 vöckla,1 intuitive surgical inc,1 cyncoed,4 john l stevens,1 daniel farabello,1 trent harmon,5 feroze gandhi unchahar thermal power station,1 samuel powell,1 pan slavic,1 swimming at the 1992 summer olympics – womens 4 × 100 metre freestyle relay,1 human behaviour,2 siege of port royal,3 eridug,1 lafee,1 north bethesda trail,1 scheveningen system,1 special penn thing,1 pserimos,1 pravda vítězí,1 wiki dankowska,1 transcript,13 second inauguration of grover cleveland,1 spent fuel,1 ertms regional,2 frederick scherger,1 nivis,1 herbert hugo menges,1 kapitan sino,1 samson,34 minae mizumura,2 gro kvinlog,1 chasing shadows,2 d j fontana,1 massively multiplayer online game,27 capture of new orleans,8 meat puppet,1 american pet products manufacturers association,3 villardonnel,1 sessile serrated adenoma,3 patch products,1 lodovico altieri,1 portal,2 jake maskall,4 the shops at la cantera,8 stage struck,5 elizabeth m tamposi,2 taylor swift,22 forum spam,9 barry cowdrill,3 patagopteryx,2 korg ms 2000,1 hmas dubbo,2 ss khaplang,2 kevin kelly,1 punk goes pop volume 5,3 spurt,2 bristol pound,5 military history of finland during world war ii,10 laguardia,1 josé marcó del pont,1 conditional expectation,18 the beat goes on,1 patricia buckley ebrey,1 ali ibn yusuf,2 caristii,1 william l brandon,1 fomite,5 barcelona el prat airport,7 mattequartier,4 invading the sacred,1 jefferson station,3 chibalo,1 phil voyles,1 ramen,41 archbishopric of athens,1 robert arnot,1 diethylhydroxylamine,2 christian vazquez,1 servage hosting,1 ufo alien invasion,1 blackburn railway station,3 performance metric,19 pencilings,1 phosphoenolpyruvate,1 under lights,2 diego de la hoya,1 felipe caicedo,5 jimmy arguello,1 cielo dalcamo,1 jan navrátil,1 linear pottery culture,9 wbga,1 k36dd,1 die hard 2,22 companding,8 this is the modern world,10 cosmology,26 craig borten,1 red pelicans,1 ac gilbert,2 fougasse,1 leonardos robot,4 john of whithorn,2 david prescott barrows,2 http cookie,168 emilia telese,6 herăstrău park,2 lauro villar,1 earl of lincoln,1 born again,2 milan rufus,1 weper,2 levitt bernstein,1 jean de thevenot,1 jill paton walsh,2 leudal,1 kyle mccafferty,1 pluralistic walkthrough,2 greetings to the new brunette,3 angus maccoll,1 loco live,2 palm i705,1 saila laakkonen,1 ssta,1 buch,1 eduardo cunha,7 marie bouliard,1 mystic society,2 chu jus house,1 boob tube,8 il mestiere della vita,1 hadley fraser,7 marek larwood,2 imperial knight,2 adbc,1 houdini,8 patrice talon,3 iodamoeba,1 long march,26 nyinba,1 maurice dunkley,1 new south wales state election 1874–75,1 john lee carroll,1 poya bridge,1 category talk military units and formations established in 2004,1 the family values tour 1999,2 brødrene hartmann,1 miomelon,1 john moran bailey,1 san juan archipelago,1 come as you are,7 hypo niederösterreich,1 saturn vi,2 cherokee county kansas,1 maher abu remeleh,1 file talk jb grace singlejpg,1 count paris,8 template talk anime and manga,1 kntv,4 ganges river dolphin,4 jerry pacht,1 rapid response,1 crunch bandicoot,1 big gay love,2 john mckay,1 bareq,1 nikon d2x,1 intercontinental paris le grand hotel,1 oakland alternative high school,1 ekow eshun,1 jimmy fortune,1 american gladiator,2 ella sophia armitage,1 united we stand what more can i give,5 maruti suzuki celerio,1 geraldo rivera/trackback/,1 dogs tobramycin contain a primary amine,1 hot coffee mod,11 shriners,25 mora missouri,1 seattle wa,1 all star baseball 2003,1 comparison of android e book reader software,7 calling out loud,2 initiative 912,1 charles batchelor,2 terry spraggan,2 wallace thurman,2 stefan smith,2 george holding,22 institute of business administration sukkar,1 staten island new york,4 valency,1 chintamani taluk,1 mahatma gandhi,1 co orbital,1 epex spot,1 theodoric the great,3 fk novi pazar,1 zappas olympics,2 gustav krupp von bohlen und halbach,1 yasmany tomás,4 notre temps,1 cats %,1 intramolecular vibrational energy redistribution,1 graduate management admission test,49 robin fleming,1 daniel gadzhev,1 achaean league,7 the four books,1 tunica people,1 murray hurst,1 hajipur,7 wolfgang fischer,1 bethel minnesota,2 wincdemu,1 aleksandar luković,5 zilog,6 will to live,1 pgc,1 captain sky,1 eprobemide,1 gunther plüschow,1 jackson laboratory,3 ss orontes,2 bishop morlino,1 eldorado air force station,2 tin oxide,1 john bell,2 ajay banga,2 nail polish remover induced contact dermatitis,1 quinctia,1 a/n urm 25d signal generator,1 the art company,3 seawind 300c,1 half and half,7 constantia czirenberg,1 halifax county north carolina,4 tunica vaginalis,9 life & times of michael k,2 methyl propionate,1 carla bley band,1 us secret service,2 maría elena moyano,2 lory meagher cup,9 malay sultanate,1 third lanark,1 olivier dacourt,10 angri,2 ukrainian catholic eparchy of saints peter and paul,1 phosphinooxazolines,1 allied health professions,24 hydroxybenzoic acid,1 srinatha,3 zone melting,5 miko,1 robert b downs,1 resource management,3 new year tree,1 agraw imazighen,1 catmando,8 python ide,5 rocky mount wilson roanoke rapids nc combined statistical area,1 spanish crown,3 ianis zicu,1 william c hubbard,2 islamic marital jurisprudence,5 the school of night,1 krdc,4 el centro imperials,1 atiq uz zaman,1 sliba zkha,1 file no mosquesvg,8 herzegovinians,1 paradise lost,1 the fairly oddparents,6 civic alliance,1 anbu,3 broadcaster,2 le bon,1 columbus nebraska,4 inuit people,1 the menace,6 ilya ilyich mechnikov,1 algonquin college,4 seat córdoba wrc,1 european route e30,6 three lakes florida,1 k10de,1 glyphonyx rhopalacanthus,1 ask rhod gilbert,1 bolas criollas,1 county borough of southport,1 roll on mississippi,1 pulitzer prize for photography,7 mark fisher,1 oakley g kelly,1 tajikistani presidential election 1999,1 the relapse,4 nabil bentaleb,8 apprentice,1 dale brown,3 studebaker packard hawk series,1 yu gi oh trading card game,14 paralimni,2 institut national polytechnique de toulouse,1 to catch a spy,1 hammer,4 mount judi,2 thomas posey,1 maxime baca,1 arthur susskind,1 elkins constructors,2 siege of gaeta,1 pemex,1 henry o flipper award,1 mccordsville indiana,1 carife,1 prima donna,1 proton,1 henry farrell,1 randall davidson,1 history of georgia,11 beef tongue,4 ted spread,4 douglas xt 30,3 heavenly mother,1 monte santangelo,1 lothar matthaus,1 american party,2 tire kingdom,1 bastrop state park,3 james maurice gavin,1 blue bird all american,4 time and a word,10 runny babbit,1 nordic regional airlines,6 advanced scientifics,2 the space traders,2 mongol invasion of anatolia,1 abu hayyan al gharnati,1 lisa geoghan,3 valentia harbour railway station,1 silo,10 jimmy zhingchak,1 glamma kid,1 bonneville high school,1 secant line,5 the longshots,2 costa rican general election 1917,1 an emotion away,1 rawlins high school,1 cold inflation pressure,4 receptionthe,2 tom payne,8 tb treatment,1 hatikvah,8 ol yellow eyes is back,1 vincent mroz,1 travis bickle,1 qatar stars league 1985–86,1 electronic document management,1 orliska,1 gáspár orbán,1 sunabeda,1 donatus magnus,1 lawrence e spivak,2 cavalieri,1 aw kuchler,1 coat of arms of kuwait,1 wallis–zieff–goldblatt syndrome,1 doug heffernan,3 g3 battlecruiser,3 imran abbas,1 plymouth,1 gould colorado,1 in japan,1 delmar watson,1 skygusty west virginia,1 vesque sisters,1 rushton triangular lodge,1 italic font,3 warner w hodgdon carolina 500,1 blackamoors,5 magna cum laude,14 follow that horse,1 jean snella,1 chris frith,1 soul power,2 spare me the details,1 ymer xhaferi,1 murano glass,5 michel magras,1 rashard and wallace go to white castle,1 venus figurines of malta,1 didnt we almost have it all,1 ew,1 david h koch institute for integrative cancer research,2 black coyote,1 priob,2 piera coppola,1 budhism,4 south african class h1 4 8 2t,1 dimitris papamichael+dimitris+papamixail,3 system sensor,1 farragut class destroyer,1 no down payment,1 william rogers,1 desperate choices to save my child,1 joe launchbury,7 queen seondeok of silla,11 adams county wisconsin,1 bandhan bank,1 x ray tubes,1 sporadic group,1 lozovaya,1 mairead maguire,3 royal challengers bangalore in 2016,1 janko of czarnków,1 marosormenyes,1 the deadly reclaim,1 rick doblin,1 gwen jorgensen,6 shire of halls creek,1 carlton house,6 urad bean,1 baton rouge louisiana,39 kiel institute for the world economy,3 the satuc cup,1 harlem division,1 argonaut,2 choi jeongrye,2 optical disc image,2 groesbeek canadian war cemetery,2 rangpur india,1 android n,72 tjeld class patrol boat,1 together for yes,2 tender dracula,1 shane nelson,1 palazzo ducale urbino,1 angels,4 double centralizer theorem,1 homme,4 world heart federation,1 patricia ja lee,4 a date with elvis,1 saints row,1 lanzhou lamian,1 subcompact car,1 jojo discography,5 gary,18 global returnable asset identifier,1 aloysia weber,2 emperor nero,2 heavyweights,6 hush records,1 mewa textil service,2 michigan gubernatorial election 1986,1 solanine,9 andré moritz,3 foreign relations of china,12 william t anderson,3 lindquist field,1 biggersdale hole,1 manayunk/norristown line,1 aliti,1 budhivanta,3 tm forum,4 off plan property,1 wu xin the monster killer,4 aharon leib shteinman,1 mark catano,1 llanfihangel,1 atp–adp translocase,4 tótkomlós,1 nikita magaloff,1 xo telescope,1 pseudomonas rhizosphaerae,1 pccooler,1 arcion therapeutics inc,8 oklahoma gubernatorial election 2010,1 seed treatment,3 connecticut education network,1 company85,1 bryan molloy,1 roupeiro,1 wendt beach park,2 entick v carrington,3 firemens auxiliary,1 shotcrete,14 sepharial,1 poet laureate of virginia,1 musth,6 dragon run state forest,3 focal point,10 pacific drilling,1 intro,2 priscus,1 rokurō mochizuki,1 bofur,2 tiffany mount,1 thanasis papazoglou,12 life is grand,1 ergersheim bas rhin,1 medical reserve corps,3 anthony ashley cooper 2nd earl of shaftesbury,1 uefa euro 2012 group a,32 america movil sab de cv,1 christopher cook,1 vladimir makanin,1 file talk first battle of saratogausmaeduhistorygif,1 dean foods,4 logical thinking,1 tychonic system,1 hand washing,17 bioresonance therapy,4 günther burstyn,4 religion in the united kingdom,35 bancroft ontario,2 alberta enterprise group,1 belizean spanish,1 minuscule 22,1 hmga2,3 sidama people,1 shigeaki mori,2 moonstars,1 hazard,24 chilis,6 rango,3 kenichi itō,1 isle of rum,1 shortwood united fc,1 bronx gangs,1 heterometaboly,2 beagling,4 jurgen pommerenke,1 rockin,1 st maria maggiore,1 philipp reis,1 timeboxing,12 template talk tallahassee radio,1 aarti puri,2 john paul verree,2 adam tomkins,1 knoppers,1 sven olov eriksson,1 ruth bowyer,1 höfðatorg tower 1,1 citywire,3 helen bosanquet,1 ulex europaeus,4 richard martyn,1 hana sugisaki,2 its all over now baby blue,6 the myths and legends of king arthur and the knights of the round table,2 dooce,1 german submarine u 9,1 george shearing,4 bishop of winchester,3 maximilian karl lamoral odonnell,2 hec edmundson,1 morgawr,3 sovereign state,67 avignon—la mitis—matane—matapédia,1 duramax v8 engine,12 villa rustica,2 carl dorsey,1 clairol,6 abruzzo,22 momsen lung,10 m23 rebellion,2 kira oreilly,1 constitutive relation,2 bifrontal craniotomy,1 basilica of st nicholas amsterdam,2 marinus kraus,1 moog prodigy,2 lucy hale,49 lingiya,1 idiopathic orbital inflammatory disease,3 shaanxi youser group,1 apeirohedron,1 program of all inclusive care for the elderly,2 tv3 ghana,3 arnold schwarzenegger,338 raquel carriedo tomás,1 cincinnati playhouse in the park,2 colobomata,2 star craft 2,1 yaaf,1 fc santa clarita,1 release me,3 notts county supporters trust,1 westchester airport,1 slowhand at 70 – live at the royal albert hall,1 bruce gray,2 only the good die young,1 sewell thomas stadium,1 kyle cook,1 northwest passage,1 eurex airlines,1 uss pierre,1 feitsui dam,1 sales force,1 obrien class destroyer,5 sant longowal institute of engineering and technology,3 united states presidential election in oklahoma 1952,1 edyta bartosiewicz,1 marquess of dorset,1 whiting wyoming,1 akanda,1 jim brewster,1 mozdok republic of north ossetia alania,1 maritime gendarmerie,2 paresh patel,1 communication art,1 santa anita handicap,2 dahlia,44 qikpad,1 pudhaiyal,3 oroshi,1 ioda,3 willis j gertsch,1 scurvy grass,1 bombing of rotterdam,2 gagarin russia,1 dynamic apnea without fins,1 loess,14 hans adolf krebs,4 poręby stare,1 kismat ki baazi,1 malcolm slesser,1 blue crane route local municipality,1 jean michel basquiat,104 customs trade partnership against terrorism,3 lower cove newfoundland and labrador,1 aashiqui 2,6 elliott lee,1 edison electric light company,2 i rigoberta menchú,1 battle of tennōji,2 transport workers union of america,1 physical review b,1 way too far,1 breguet 941,1 manuel hegen,1 the blacklist,12 john dorahy,4 cinderella sanyu,1 luis castañeda lossio,1 headquarters of a military area,1 jbala people,2 petrofac emirates,1 ins garuda,3 australia national rugby league team,2 state of emergency 2,3 mexican sex comedy,2 baby anikha,1 notions,1 android app //orgwikipedia/http/enmwikipediaorg/wiki/elasticity,1 kissing you,2 montearagón,1 grzegorz proksa,3 shook,1 may hegglin anomaly,1 chrysler rb engine,2 gmcsf,2 blacksburg,1 chris hollod,1 the new guy,1 thulimbah queensland,1 sust,1 knight kadosh,2 details,4 nickel mining in new caledonia,3 easter hotspot,1 surinamese interior war,1 field corn,2 bolesław iii wrymouth,6 lutwyche queensland,1 michael campbell,1 military ranks of turkey,3 mícheal martin,1 the architects dream,2 joel robert,1 thomas smith,1 inclusion probability,1 fucked company,1 genderfluid,5 lewisham by election 1891,1 net promoter,98 donald stewart,1 xml base,2 bhikhu parekh,4 anthocharis cardamines,1 vuosaari,1 demographics of burundi,1 dst,1 david ensor,2 mount pavlof,1 vince young,5 st beunos ignatian spirituality centre,4 ezekiel 48,1 lewis elliott chaze,1 template talk croatia squad 2012 mens european water polo championship,1 the voice of the philippines,4 whites ferry,1 cananga odorata,9 man of steel,2 john michael talbot,2 superior oblique myokymia,2 anisochilus,2 e421,1 midnight rider,14 matrícula consular,1 first nehru ministry,2 christopher mcculloch,2 ems chemie,12 dominique martin,1 university club of washington dc,1 nurse education,5 theyre coming to take me away ha haaa,1 bill dauterive,4 belhar,1 heel and toe,4 university of the arctic members,2 mitava,1 wjmx fm,1 father callahan,4 divine word academy of dagupan,1 bogs,1 denny heck,2 church of st james valletta,1 field cathedral of the polish army,1 indian skimmer,1 history of british airways,3 international mobile subscriber identity,38 suzel roche,1 steven watt,1 duke ellineton,1 kirbys avalanche,4 RediSearch-1.2.2/src/tokenize.c000066400000000000000000000125401364126773500163300ustar00rootroot00000000000000#include "forward_index.h" #include "stopwords.h" #include "tokenize.h" #include "toksep.h" #include "rmalloc.h" #include #include #include #include typedef struct { RSTokenizer base; char **pos; Stemmer *stemmer; } simpleTokenizer; static void simpleTokenizer_Start(RSTokenizer *base, char *text, size_t len, uint32_t options) { simpleTokenizer *self = (simpleTokenizer *)base; TokenizerCtx *ctx = &base->ctx; ctx->text = text; ctx->options = options; ctx->len = len; self->pos = &ctx->text; } // Shortest word which can/should actually be stemmed #define MIN_STEM_CANDIDATE_LEN 4 // Normalization buffer #define MAX_NORMALIZE_SIZE 128 /** * Normalizes text. * - s contains the raw token * - dst is the destination buffer which contains the normalized text * - len on input contains the length of the raw token. on output contains the * on output contains the length of the normalized token */ static char *DefaultNormalize(char *s, char *dst, size_t *len) { size_t origLen = *len; char *realDest = s; size_t dstLen = 0; #define SWITCH_DEST() \ if (realDest != dst) { \ realDest = dst; \ memcpy(realDest, s, ii); \ } // set to 1 if the previous character was a backslash escape int escaped = 0; for (size_t ii = 0; ii < origLen; ++ii) { if (isupper(s[ii])) { SWITCH_DEST(); realDest[dstLen++] = tolower(s[ii]); } else if ((isblank(s[ii]) && !escaped) || iscntrl(s[ii])) { SWITCH_DEST(); } else if (s[ii] == '\\' && !escaped) { SWITCH_DEST(); escaped = 1; continue; } else { dst[dstLen++] = s[ii]; } escaped = 0; } *len = dstLen; return dst; } // tokenize the text in the context uint32_t simpleTokenizer_Next(RSTokenizer *base, Token *t) { TokenizerCtx *ctx = &base->ctx; simpleTokenizer *self = (simpleTokenizer *)base; while (*self->pos != NULL) { // get the next token size_t origLen; char *tok = toksep(self->pos, &origLen); // normalize the token size_t normLen = origLen; char normalized_s[MAX_NORMALIZE_SIZE]; char *normBuf; if (ctx->options & TOKENIZE_NOMODIFY) { normBuf = normalized_s; if (normLen > MAX_NORMALIZE_SIZE) { normLen = MAX_NORMALIZE_SIZE; } } else { normBuf = tok; } char *normalized = DefaultNormalize(tok, normBuf, &normLen); // ignore tokens that turn into nothing if (normalized == NULL || normLen == 0) { continue; } // skip stopwords if (StopWordList_Contains(ctx->stopwords, normalized, normLen)) { continue; } *t = (Token){.tok = normalized, .tokLen = normLen, .raw = tok, .rawLen = origLen, .pos = ++ctx->lastOffset, .stem = NULL, .flags = Token_CopyStem}; // if we support stemming - try to stem the word if (!(ctx->options & TOKENIZE_NOSTEM) && self->stemmer && normLen >= MIN_STEM_CANDIDATE_LEN) { size_t sl; const char *stem = self->stemmer->Stem(self->stemmer->ctx, tok, normLen, &sl); if (stem) { t->stem = stem; t->stemLen = sl; } } return ctx->lastOffset; } return 0; } void simpleTokenizer_Free(RSTokenizer *self) { free(self); } static void doReset(RSTokenizer *tokbase, Stemmer *stemmer, StopWordList *stopwords, uint32_t opts) { simpleTokenizer *t = (simpleTokenizer *)tokbase; t->stemmer = stemmer; t->base.ctx.stopwords = stopwords; t->base.ctx.options = opts; t->base.ctx.lastOffset = 0; } RSTokenizer *NewSimpleTokenizer(Stemmer *stemmer, StopWordList *stopwords, uint32_t opts) { simpleTokenizer *t = calloc(1, sizeof(*t)); t->base.Free = simpleTokenizer_Free; t->base.Next = simpleTokenizer_Next; t->base.Start = simpleTokenizer_Start; t->base.Reset = doReset; t->base.Reset(&t->base, stemmer, stopwords, opts); return &t->base; } static mempool_t *tokpoolLatin_g = NULL; static mempool_t *tokpoolCn_g = NULL; static void *newLatinTokenizerAlloc() { return NewSimpleTokenizer(NULL, NULL, 0); } static void *newCnTokenizerAlloc() { return NewChineseTokenizer(NULL, NULL, 0); } static void tokenizerFree(void *p) { RSTokenizer *t = p; t->Free(t); } RSTokenizer *GetTokenizer(const char *language, Stemmer *stemmer, StopWordList *stopwords) { if (language && strcasecmp(language, "chinese") == 0) { return GetChineseTokenizer(stemmer, stopwords); } else { return GetSimpleTokenizer(stemmer, stopwords); } } RSTokenizer *GetChineseTokenizer(Stemmer *stemmer, StopWordList *stopwords) { if (!tokpoolCn_g) { tokpoolCn_g = mempool_new(16, newCnTokenizerAlloc, tokenizerFree); } RSTokenizer *t = mempool_get(tokpoolCn_g); t->Reset(t, stemmer, stopwords, 0); return t; } RSTokenizer *GetSimpleTokenizer(Stemmer *stemmer, StopWordList *stopwords) { if (!tokpoolLatin_g) { tokpoolLatin_g = mempool_new(16, newLatinTokenizerAlloc, tokenizerFree); } RSTokenizer *t = mempool_get(tokpoolLatin_g); t->Reset(t, stemmer, stopwords, 0); return t; } void Tokenizer_Release(RSTokenizer *t) { // In the future it would be nice to have an actual ID field or w/e, but for // now we can just compare callback pointers if (t->Next == simpleTokenizer_Next) { mempool_release(tokpoolLatin_g, t); } else { mempool_release(tokpoolCn_g, t); } }RediSearch-1.2.2/src/tokenize.h000066400000000000000000000047261364126773500163440ustar00rootroot00000000000000 #ifndef __TOKENIZE_H__ #define __TOKENIZE_H__ #include "stemmer.h" #include "stopwords.h" #include "redisearch.h" #include "varint.h" #include #include #include typedef enum { Token_CopyRaw = 0x01, Token_CopyStem = 0x02 } TokenFlags; /* Represents a token found in a document */ typedef struct { // Normalized string const char *tok; // token string length uint32_t tokLen; // Token needs to be copied. Don't rely on `raw` pointer. uint32_t flags; // Stem. May be NULL const char *stem; // stem length uint32_t stemLen; // Raw token as present in the source document. // Only relevant if TOKENIZE_NOMODIFY is set. const char *raw; // Length of raw token uint32_t rawLen; // position in the document - this is written to the inverted index uint32_t pos; } Token; // A NormalizeFunc converts a raw token to the normalized form in which it will be stored typedef char *(*NormalizeFunc)(char *, size_t *); #define STEM_TOKEN_FACTOR 0.2 typedef struct { char *text; size_t len; StopWordList *stopwords; uint32_t lastOffset; uint32_t options; } TokenizerCtx; typedef struct RSTokenizer { TokenizerCtx ctx; // read the next token. Return its position or 0 if we can't read anymore uint32_t (*Next)(struct RSTokenizer *self, Token *tok); void (*Free)(struct RSTokenizer *self); void (*Start)(struct RSTokenizer *self, char *txt, size_t len, uint32_t options); void (*Reset)(struct RSTokenizer *self, Stemmer *stemmer, StopWordList *stopwords, uint32_t opts); } RSTokenizer; RSTokenizer *NewSimpleTokenizer(Stemmer *stemmer, StopWordList *stopwords, uint32_t opts); RSTokenizer *NewChineseTokenizer(Stemmer *stemmer, StopWordList *stopwords, uint32_t opts); #define TOKENIZE_DEFAULT_OPTIONS 0x00 // Don't modify buffer at all during tokenization. #define TOKENIZE_NOMODIFY 0x01 // don't stem a field #define TOKENIZE_NOSTEM 0x02 /** * Pooled tokenizer functions: * These functions retrieve tokenizers using pools. * * These should all be called when the GIL is held. */ /** * Retrieves a tokenizer based on the language string. When this tokenizer * is no longer needed, return to the pool using Tokenizer_Release() */ RSTokenizer *GetTokenizer(const char *language, Stemmer *stemmer, StopWordList *stopwords); RSTokenizer *GetChineseTokenizer(Stemmer *stemmer, StopWordList *stopwords); RSTokenizer *GetSimpleTokenizer(Stemmer *stemmer, StopWordList *stopwords); void Tokenizer_Release(RSTokenizer *t); #endifRediSearch-1.2.2/src/tokenize_cn.c000066400000000000000000000063511364126773500170130ustar00rootroot00000000000000#include "tokenize.h" #include "config.h" #include "dep/friso/friso.h" #include "cndict_loader.h" #include static friso_config_t config_g; static friso_t friso_g; typedef struct { RSTokenizer base; friso_task_t fTask; } cnTokenizer; // TODO: This is just a global init static void maybeFrisoInit() { if (friso_g) { return; } const char *configfile = RSGlobalConfig.frisoIni; friso_g = friso_new(); config_g = friso_new_config(); if (configfile) { if (!friso_init_from_ifile(friso_g, config_g, (char *)configfile)) { fprintf(stderr, "Failed to initialize friso. Abort\n"); abort(); } } else { friso_dic_t dic = friso_dic_new(); ChineseDictLoad(dic); ChineseDictConfigure(friso_g, config_g); friso_set_dic(friso_g, dic); } // Overrides: // Don't segment english text. We might use our actual tokenizer later if needed config_g->en_sseg = 0; } static void cnTokenizer_Start(RSTokenizer *base, char *text, size_t len, uint32_t options) { cnTokenizer *self = (cnTokenizer *)base; base->ctx.text = text; base->ctx.len = len; base->ctx.options = options; friso_set_text(self->fTask, text); } static uint32_t cnTokenizer_Next(RSTokenizer *base, Token *t) { cnTokenizer *self = (cnTokenizer *)base; TokenizerCtx *ctx = &base->ctx; while (1) { friso_token_t tok = config_g->next_token(friso_g, config_g, self->fTask); if (tok == NULL) { return 0; } // Check if it's a stopword? if (ctx->stopwords && StopWordList_Contains(ctx->stopwords, tok->word, tok->length)) { continue; } switch (tok->type) { // Skip words we know we don't care about. case __LEX_STOPWORDS__: case __LEX_PUNC_WORDS__: case __LEX_ENPUN_WORDS__: case __LEX_CJK_UNITS__: case __LEX_NCSYN_WORDS__: continue; default: break; } // fprintf(stderr, "Pos: %u. Offset: %u. Len: %u. RLen: %u. Type: %u\n", tok->pos, tok->offset, // tok->length, tok->rlen, tok->type); // We don't care if it's english, chinese, or a mix. They all get treated the same in // the index. *t = (Token){.tok = tok->word, .tokLen = tok->length, .raw = ctx->text + tok->offset, .rawLen = tok->rlen, .stem = NULL, .flags = Token_CopyRaw | Token_CopyStem, .pos = ++ctx->lastOffset}; return t->pos; } } static void cnTokenizer_Free(RSTokenizer *base) { cnTokenizer *self = (cnTokenizer *)base; friso_free_task(self->fTask); free(self); } static void cnTokenizer_Reset(RSTokenizer *base, Stemmer *stemmer, StopWordList *stopwords, uint32_t opts) { // Nothing to do here base->ctx.lastOffset = 0; } RSTokenizer *NewChineseTokenizer(Stemmer *stemmer, StopWordList *stopwords, uint32_t opts) { cnTokenizer *tokenizer = calloc(1, sizeof(*tokenizer)); tokenizer->fTask = friso_new_task(); maybeFrisoInit(); tokenizer->base.ctx.options = opts; tokenizer->base.ctx.stopwords = stopwords; tokenizer->base.Start = cnTokenizer_Start; tokenizer->base.Next = cnTokenizer_Next; tokenizer->base.Free = cnTokenizer_Free; tokenizer->base.Reset = cnTokenizer_Reset; return &tokenizer->base; }RediSearch-1.2.2/src/toksep.h000066400000000000000000000024021364126773500160060ustar00rootroot00000000000000#ifndef TOKSEP_H #define TOKSEP_H #include #include //! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ ` { | } ~ static const char ToksepMap_g[256] = { [' '] = 1, ['\t'] = 1, [','] = 1, ['.'] = 1, ['/'] = 1, ['('] = 1, [')'] = 1, ['{'] = 1, ['}'] = 1, ['['] = 1, [']'] = 1, [':'] = 1, [';'] = 1, ['~'] = 1, ['!'] = 1, ['@'] = 1, ['#'] = 1, ['$'] = 1, ['%'] = 1, ['^'] = 1, ['&'] = 1, ['*'] = 1, ['-'] = 1, ['='] = 1, ['+'] = 1, ['|'] = 1, ['\''] = 1, ['`'] = 1, ['"'] = 1, ['<'] = 1, ['>'] = 1, ['?'] = 1, }; /** * Function reads string pointed to by `s` and indicates the length of the next * token in `tokLen`. `s` is set to NULL if this is the last token. */ static inline char *toksep(char **s, size_t *tokLen) { uint8_t *pos = (uint8_t *)*s; char *orig = *s; for (; *pos; ++pos) { if (ToksepMap_g[*pos] && ((char *)pos == orig || *(pos - 1) != '\\')) { *s = (char *)++pos; *tokLen = ((char *)pos - orig) - 1; if (!*pos) { *s = NULL; } return orig; } } // Didn't find a terminating token. Use a simpler length calculation *s = NULL; *tokLen = (char *)pos - orig; return orig; } static inline int istoksep(int c) { return ToksepMap_g[(uint8_t)c] != 0; } #endifRediSearch-1.2.2/src/trie/000077500000000000000000000000001364126773500152755ustar00rootroot00000000000000RediSearch-1.2.2/src/trie/Makefile000066400000000000000000000007471364126773500167450ustar00rootroot00000000000000# set environment variable RM_INCLUDE_DIR to the location of redismodule.h ifndef RM_INCLUDE_DIR RM_INCLUDE_DIR=../ endif CFLAGS ?= -g -fPIC -O3 -std=gnu99 -Wall -Wno-unused-function -Wno-unused-variable CFLAGS += -I$(RM_INCLUDE_DIR) CC=gcc OBJS=levenshtein.o rune_util.o sparse_vector.o trie.o trie_type.o all: libtrie.a clean: rm -rf *.o *.a libtrie.a: $(OBJS) ar rcs $@ $^ # test_trie: test.o $(OBJS) # $(CC) -Wall -o test test.o $(OBJS) -lc -O0 # @(sh -c ./test_vector) RediSearch-1.2.2/src/trie/levenshtein.c000066400000000000000000000165521364126773500177760ustar00rootroot00000000000000#include #include #include #include #include "levenshtein.h" #include "rune_util.h" // NewSparseAutomaton creates a new automaton for the string s, with a given max // edit distance check SparseAutomaton NewSparseAutomaton(const rune *s, size_t len, int maxEdits) { return (SparseAutomaton){s, len, maxEdits}; } // Start initializes the automaton's state vector and returns it for further // iteration sparseVector *SparseAutomaton_Start(SparseAutomaton *a) { int vals[a->max + 1]; for (int i = 0; i < a->max + 1; i++) { vals[i] = i; } return newSparseVector(vals, a->max + 1); } // Step returns the next state of the automaton given a previous state and a // character to check sparseVector *SparseAutomaton_Step(SparseAutomaton *a, sparseVector *state, rune c) { sparseVector *newVec = newSparseVectorCap(state->len); if (state->len) { sparseVectorEntry e = state->entries[0]; if (e.idx == 0 && e.val < a->max) { sparseVector_append(&newVec, 0, e.val + 1); } } for (int j = 0; j < state->len; j++) { sparseVectorEntry *entry = &state->entries[j]; if (entry->idx == a->len) { break; } register int val = state->entries[j].val; // increase the cost by 1 if (a->string[entry->idx] != c) ++val; if (newVec->len && newVec->entries[newVec->len - 1].idx == entry->idx) { val = MIN(val, newVec->entries[newVec->len - 1].val + 1); } if (j + 1 < state->len && state->entries[j + 1].idx == entry->idx + 1) { val = MIN(val, state->entries[j + 1].val + 1); } if (val <= a->max) { sparseVector_append(&newVec, entry->idx + 1, val); } } return newVec; } // IsMatch returns true if the current state vector represents a string that is // within the max // edit distance from the initial automaton string inline int SparseAutomaton_IsMatch(SparseAutomaton *a, sparseVector *v) { return v->len && v->entries[v->len - 1].idx == a->len; } // CanMatch returns true if there is a possibility that feeding the automaton // with more steps will // yield a match. Once CanMatch is false there is no point in continuing // iteration inline int SparseAutomaton_CanMatch(SparseAutomaton *a, sparseVector *v) { return v->len > 0; } dfaNode *__newDfaNode(int distance, sparseVector *state) { dfaNode *ret = calloc(1, sizeof(dfaNode)); ret->fallback = NULL; ret->distance = distance; ret->v = state; ret->edges = NULL; ret->numEdges = 0; return ret; } void __dfaNode_free(dfaNode *d) { sparseVector_free(d->v); if (d->edges) free(d->edges); free(d); } int __sv_equals(sparseVector *sv1, sparseVector *sv2) { if (sv1->len != sv2->len) return 0; for (int i = 0; i < sv1->len; i++) { if (sv1->entries[i].idx != sv2->entries[i].idx || sv1->entries[i].val != sv2->entries[i].val) { return 0; } } return 1; } dfaNode *__dfn_getCache(Vector *cache, sparseVector *v) { size_t n = Vector_Size(cache); for (int i = 0; i < n; i++) { dfaNode *dfn; Vector_Get(cache, i, &dfn); if (__sv_equals(v, dfn->v)) { return dfn; } } return NULL; } void __dfn_putCache(Vector *cache, dfaNode *dfn) { Vector_Push(cache, dfn); } inline dfaNode *__dfn_getEdge(dfaNode *n, rune r) { for (int i = 0; i < n->numEdges; i++) { if (n->edges[i].r == r) { return n->edges[i].n; } } return NULL; } void __dfn_addEdge(dfaNode *n, rune r, dfaNode *child) { n->edges = realloc(n->edges, sizeof(dfaEdge) * (n->numEdges + 1)); n->edges[n->numEdges++] = (dfaEdge){.r = r, .n = child}; } void dfa_build(dfaNode *parent, SparseAutomaton *a, Vector *cache) { parent->match = SparseAutomaton_IsMatch(a, parent->v); for (int i = 0; i < parent->v->len; i++) { if (parent->v->entries[i].idx < a->len) { rune c = a->string[parent->v->entries[i].idx]; // printf("%c ---> ", c); dfaNode *edge = __dfn_getEdge(parent, c); if (edge == NULL) { sparseVector *nv = SparseAutomaton_Step(a, parent->v, c); if (nv->len > 0) { dfaNode *dfn = __dfn_getCache(cache, nv); if (dfn == NULL) { int dist = nv->entries[nv->len - 1].val; edge = __newDfaNode(dist, nv); __dfn_addEdge(parent, c, edge); __dfn_putCache(cache, edge); dfa_build(edge, a, cache); continue; } else { __dfn_addEdge(parent, c, dfn); } } sparseVector_free(nv); } } } // if (parent->distance < a->max) { sparseVector *nv = SparseAutomaton_Step(a, parent->v, 1); if (nv->len > 0) { dfaNode *dfn = __dfn_getCache(cache, nv); if (dfn) { parent->fallback = dfn; } else { int dist = nv->entries[nv->len - 1].val; // printf("DEFAULT EDGE! edge %s - dist %d\n", a->string, dist); parent->fallback = __newDfaNode(dist, nv); __dfn_putCache(cache, parent->fallback); dfa_build(parent->fallback, a, cache); return; } } sparseVector_free(nv); //} } DFAFilter NewDFAFilter(rune *str, size_t len, int maxDist, int prefixMode) { Vector *cache = NewVector(dfaNode *, 8); SparseAutomaton a = NewSparseAutomaton(str, len, maxDist); sparseVector *v = SparseAutomaton_Start(&a); dfaNode *dr = __newDfaNode(0, v); __dfn_putCache(cache, dr); dfa_build(dr, &a, cache); DFAFilter ret; ret.cache = cache; ret.stack = NewVector(dfaNode *, 8); ret.distStack = NewVector(int, 8); ret.a = a; ret.prefixMode = prefixMode; Vector_Push(ret.stack, dr); Vector_Push(ret.distStack, (maxDist + 1)); return ret; } void DFAFilter_Free(DFAFilter *fc) { for (int i = 0; i < Vector_Size(fc->cache); i++) { dfaNode *dn; Vector_Get(fc->cache, i, &dn); if (dn) __dfaNode_free(dn); } Vector_Free(fc->cache); Vector_Free(fc->stack); Vector_Free(fc->distStack); } FilterCode FilterFunc(rune b, void *ctx, int *matched, void *matchCtx) { DFAFilter *fc = ctx; dfaNode *dn; int minDist; Vector_Get(fc->stack, Vector_Size(fc->stack) - 1, &dn); Vector_Get(fc->distStack, Vector_Size(fc->distStack) - 1, &minDist); // a null node means we're in prefix mode, and we're done matching our prefix if (dn == NULL) { *matched = 1; Vector_Push(fc->stack, NULL); Vector_Push(fc->distStack, minDist); return F_CONTINUE; } *matched = dn->match; if (*matched) { // printf("MATCH %c, dist %d\n", b, dn->distance); int *pdist = matchCtx; if (pdist) { *pdist = MIN(dn->distance, minDist); } } rune foldedRune = runeFold(b); // get the next state change dfaNode *next = __dfn_getEdge(dn, foldedRune); if (!next) next = dn->fallback; // we can continue - push the state on the stack if (next) { if (next->match) { // printf("MATCH NEXT %c, dist %d\n", b, next->distance); *matched = 1; int *pdist = matchCtx; if (pdist) { *pdist = MIN(next->distance, minDist); } // if (fc->prefixMode) next = NULL; } Vector_Push(fc->stack, next); Vector_Push(fc->distStack, MIN(next->distance, minDist)); return F_CONTINUE; } else if (fc->prefixMode && *matched) { Vector_Push(fc->stack, NULL); Vector_Push(fc->distStack, minDist); return F_CONTINUE; } return F_STOP; } void StackPop(void *ctx, int numLevels) { DFAFilter *fc = ctx; for (int i = 0; i < numLevels; i++) { Vector_Pop(fc->stack, NULL); Vector_Pop(fc->distStack, NULL); } } RediSearch-1.2.2/src/trie/levenshtein.h000066400000000000000000000064211364126773500177750ustar00rootroot00000000000000#ifndef __LEVENSHTEIN_H__ #define __LEVENSHTEIN_H__ #include #include "sparse_vector.h" #include "../rmutil/vector.h" #include "trie.h" /* * SparseAutomaton is a C implementation of a levenshtein automaton using * sparse vectors, as described and implemented here: * http://julesjacobs.github.io/2015/06/17/disqus-levenshtein-simple-and-fast.html * * We then convert the automaton to a simple DFA that is faster to evaluate during the query stage. * This DFA is used while traversing a Trie to decide where to stop. */ typedef struct { const rune *string; size_t len; int max; } SparseAutomaton; struct dfaEdge; /* dfaNode is DFA graph node constructed using the Levenshtein automaton */ typedef struct dfaNode { int distance; int match; sparseVector *v; struct dfaEdge *edges; size_t numEdges; struct dfaNode *fallback; } dfaNode; typedef struct dfaEdge { dfaNode *n; rune r; } dfaEdge; /* Get an edge for a dfa node given the next rune */ dfaNode *__dfn_getEdge(dfaNode *n, rune r); /* Create a new DFA node */ dfaNode *__newDfaNode(int distance, sparseVector *state); /* Recusively build the DFA node and all its descendants */ void dfa_build(dfaNode *parent, SparseAutomaton *a, Vector *cache); /* Create a new Sparse Levenshtein Automaton for string s and length len, with a maximal edit * distance of maxEdits */ SparseAutomaton NewSparseAutomaton(const rune *s, size_t len, int maxEdits); /* Create the initial state vector of the root automaton node */ sparseVector *SparseAutomaton_Start(SparseAutomaton *a); /* Step from a given state of the automaton to the next step given a specific character */ sparseVector *SparseAutomaton_Step(SparseAutomaton *a, sparseVector *state, rune c); /* Is the current state of the automaton a match for the query? */ int SparseAutomaton_IsMatch(SparseAutomaton *a, sparseVector *v); /* Can the current state lead to a possible match, or is this a dead end? */ int SparseAutomaton_CanMatch(SparseAutomaton *a, sparseVector *v); /* DFAFilter is a constructed DFA used to filter the traversal on the trie */ typedef struct { // a cache of the DFA states, allowing us to re-use the same state whenever we need it Vector *cache; // A stack of the states leading up to the current state Vector *stack; // A stack of the minimal distance for each state, used for prefix matching Vector *distStack; // whether the filter works in prefix mode or not int prefixMode; SparseAutomaton a; } DFAFilter; /* Create a new DFA filter using a Levenshtein automaton, for the given string and maximum * distance. If prefixMode is 1, we match prefixes within the given distance, and then continue * onwards to all suffixes. */ DFAFilter NewDFAFilter(rune *str, size_t len, int maxDist, int prefixMode); /* A callback function for the DFA Filter, passed to the Trie iterator */ FilterCode FilterFunc(rune b, void *ctx, int *matched, void *matchCtx); /* A stack-pop callback, passed to the trie iterator. It's called when we reach a dead end and need * to rewind the stack of the filter */ void StackPop(void *ctx, int numLevels); /* Free the underlying data of the DFA Filter. Note that since DFAFilter is created on the stack, it * is not freed by itself. */ void DFAFilter_Free(DFAFilter *fc); #endifRediSearch-1.2.2/src/trie/rune_util.c000066400000000000000000000037561364126773500174620ustar00rootroot00000000000000#include "../dep/libnu/libnu.h" #include "rune_util.h" #include #include // The maximum size we allow converting to at once #define MAX_RUNESTR_LEN 1024 static uint32_t __fold(uint32_t runelike) { uint32_t lowered = 0; const char *map = 0; map = nu_tofold(runelike); if (!map) { return runelike; } nu_casemap_read(map, &lowered); return lowered; } rune runeFold(rune r) { return __fold((uint32_t)r); } char *runesToStr(rune *in, size_t len, size_t *utflen) { if (len > MAX_RUNESTR_LEN) { if (utflen) *utflen = 0; return NULL; } uint32_t unicode[len + 1]; for (int i = 0; i < len; i++) { unicode[i] = (uint32_t)in[i]; } unicode[len] = 0; *utflen = nu_bytelen(unicode, nu_utf8_write); char *ret = calloc(1, *utflen + 1); nu_writestr(unicode, ret, nu_utf8_write); return ret; } /* implementation is identical to that of * strToRunes except for line where __fold is called */ rune *strToFoldedRunes(char *str, size_t *len) { ssize_t rlen = nu_strlen(str, nu_utf8_read); if (rlen > MAX_RUNESTR_LEN) { if (len) *len = 0; return NULL; } uint32_t decoded[rlen + 1]; decoded[rlen] = 0; nu_readstr(str, decoded, nu_utf8_read); rune *ret = calloc(rlen + 1, sizeof(rune)); for (int i = 0; i < rlen; i++) { uint32_t runelike = decoded[i]; ret[i] = (rune)__fold(runelike); } if (len) *len = rlen; return ret; } rune *strToRunes(const char *str, size_t *len) { ssize_t rlen = nu_strlen(str, nu_utf8_read); if (rlen > MAX_RUNESTR_LEN) { if (len) *len = 0; return NULL; } rune *ret = malloc((rlen + 1) * sizeof(rune)); strToRunesN(str, strlen(str), ret); ret[rlen] = '\0'; if (len) { *len = rlen; } return ret; } size_t strToRunesN(const char *src, size_t slen, rune *out) { const char *end = src + slen; size_t nout = 0; while (src < end) { uint32_t cp; src = nu_utf8_read(src, &cp); if (cp == 0) { break; } out[nout++] = (rune)cp; } return nout; }RediSearch-1.2.2/src/trie/rune_util.h000066400000000000000000000014071364126773500174560ustar00rootroot00000000000000#ifndef __RUNE_UTIL_H__ #define __RUNE_UTIL_H__ #include "../dep/libnu/libnu.h" /* Internally, the trie works with 16/32 bit "Runes", i.e. fixed width unicode * characters. 16 bit shuold be fine for most use cases */ #ifdef TRIE_32BIT_RUNES typedef uint32_t rune; #else // default - 16 bit runes typedef uint16_t rune; #endif /* fold rune: assumes rune is of the correct size */ rune runeFold(rune r); /* Convert a rune string to utf-8 characters */ char *runesToStr(rune *in, size_t len, size_t *utflen); rune *strToFoldedRunes(char *str, size_t *len); /* Convert a utf-8 string to constant width runes */ rune *strToRunes(const char *str, size_t *len); /* Decode a string to a rune in-place */ size_t strToRunesN(const char *s, size_t slen, rune *outbuf); #endif RediSearch-1.2.2/src/trie/sparse_vector.c000066400000000000000000000024271364126773500203250ustar00rootroot00000000000000#include "sparse_vector.h" #include inline size_t __sv_sizeof(size_t cap) { return sizeof(sparseVector) + cap * sizeof(sparseVectorEntry); } inline sparseVector *__sv_resize(sparseVector *v, size_t cap) { v = realloc(v, __sv_sizeof(cap)); v->cap = cap; return v; } inline sparseVector *newSparseVectorCap(size_t cap) { sparseVector *v = malloc(__sv_sizeof(cap)); v->cap = cap; v->len = 0; return v; } // newSparseVector creates a new sparse vector with the initial values of the // dense int slice given to it sparseVector *newSparseVector(int *values, int len) { sparseVector *v = newSparseVectorCap(len * 2); v->len = len; for (int i = 0; i < len; i++) { v->entries[i] = (sparseVectorEntry){i, values[i]}; } return v; } // append appends another sparse vector entry with the given index and value. // NOTE: We do not check // that an entry with the same index is present in the vector void sparseVector_append(sparseVector **vp, int index, int value) { sparseVector *v = *vp; if (v->len == v->cap) { v->cap = v->cap ? v->cap * 2 : 1; v = __sv_resize(v, v->cap); } v->entries[v->len++] = (sparseVectorEntry){index, value}; *vp = v; } void sparseVector_free(sparseVector *v) { free(v); } RediSearch-1.2.2/src/trie/sparse_vector.h000066400000000000000000000015671364126773500203360ustar00rootroot00000000000000#ifndef __SPARSEVECTOR_H__ #define __SPARSEVECTOR_H__ #include typedef struct { int idx, val; } sparseVectorEntry; // sparseVector is a crude implementation of a sparse vector for our needs typedef struct { size_t len; size_t cap; sparseVectorEntry entries[]; } sparseVector; size_t __sv_sizeof(size_t cap); sparseVector *__sv_resize(sparseVector *v, size_t cap); sparseVector *newSparseVectorCap(size_t cap); // append appends another sparse vector entry with the given index and value. // NOTE: We do not check // that an entry with the same index is present in the vector void sparseVector_append(sparseVector **v, int index, int value); // newSparseVector creates a new sparse vector with the initial values of the // dense int slice given to it sparseVector *newSparseVector(int *values, int len); void sparseVector_free(sparseVector *v); #endifRediSearch-1.2.2/src/trie/trie.c000066400000000000000000000424221364126773500164100ustar00rootroot00000000000000#include #include "trie.h" #include "sparse_vector.h" #include "redisearch.h" size_t __trieNode_Sizeof(t_len numChildren, t_len slen) { return sizeof(TrieNode) + numChildren * sizeof(TrieNode *) + sizeof(rune) * (slen + 1); } TriePayload *triePayload_New(const char *payload, uint32_t plen); // Allocate a new trie payload struct inline TriePayload *triePayload_New(const char *payload, uint32_t plen) { TriePayload *p = malloc(sizeof(TriePayload) + sizeof(char) * (plen + 1)); p->len = plen; memcpy(p->data, payload, sizeof(char) * plen); return p; } TrieNode *__newTrieNode(rune *str, t_len offset, t_len len, const char *payload, size_t plen, t_len numChildren, float score, int terminal) { TrieNode *n = calloc(1, __trieNode_Sizeof(numChildren, len - offset)); n->len = len - offset; n->numChildren = numChildren; n->score = score; n->flags = 0 | (terminal ? TRIENODE_TERMINAL : 0); n->maxChildScore = 0; memcpy(n->str, str + offset, sizeof(rune) * (len - offset)); if (payload != NULL && plen > 0) { n->payload = triePayload_New(payload, plen); } return n; } TrieNode *__trie_AddChild(TrieNode *n, rune *str, t_len offset, t_len len, RSPayload *payload, float score) { n->numChildren++; n = realloc((void *)n, __trieNode_Sizeof(n->numChildren, n->len)); // a newly added child must be a terminal node TrieNode *child = __newTrieNode(str, offset, len, payload ? payload->data : NULL, payload ? payload->len : 0, 0, score, 1); __trieNode_children(n)[n->numChildren - 1] = child; n->flags &= ~TRIENODE_SORTED; // the node is now not sorted return n; } TrieNode *__trie_SplitNode(TrieNode *n, t_len offset) { // Copy the current node's data and children to a new child node TrieNode *newChild = __newTrieNode(n->str, offset, n->len, n->payload ? n->payload->data : NULL, n->payload ? n->payload->len : 0, n->numChildren, n->score, __trieNode_isTerminal(n)); newChild->maxChildScore = n->maxChildScore; newChild->flags = n->flags; TrieNode **children = __trieNode_children(n); TrieNode **newChildren = __trieNode_children(newChild); memcpy(newChildren, children, sizeof(TrieNode *) * n->numChildren); // reduce the node to be just one child long with no score n->numChildren = 1; n->len = offset; n->score = 0; // the parent node is now non terminal and non sorted n->flags &= ~(TRIENODE_SORTED | TRIENODE_TERMINAL | TRIENODE_DELETED); n->maxChildScore = MAX(n->maxChildScore, newChild->score); if (n->payload != NULL) { free(n->payload); n->payload = NULL; } n = realloc(n, __trieNode_Sizeof(n->numChildren, n->len)); __trieNode_children(n)[0] = newChild; return n; } /* If a node has a single child after delete, we can merged them. This deletes * the node and returns a newly allocated node */ TrieNode *__trieNode_MergeWithSingleChild(TrieNode *n) { if (__trieNode_isTerminal(n) || n->numChildren != 1) { return n; } TrieNode *ch = *__trieNode_children(n); // Copy the current node's data and children to a new child node rune nstr[n->len + ch->len + 1]; memcpy(nstr, n->str, sizeof(rune) * n->len); memcpy(&nstr[n->len], ch->str, sizeof(rune) * ch->len); TrieNode *merged = __newTrieNode( nstr, 0, n->len + ch->len, ch->payload ? ch->payload->data : NULL, ch->payload ? ch->payload->len : 0, ch->numChildren, ch->score, __trieNode_isTerminal(ch)); merged->maxChildScore = ch->maxChildScore; merged->numChildren = ch->numChildren; merged->flags = ch->flags; TrieNode **children = __trieNode_children(ch); TrieNode **newChildren = __trieNode_children(merged); memcpy(newChildren, children, sizeof(TrieNode *) * merged->numChildren); if (ch->payload) { free(ch->payload); ch->payload = NULL; } if (n->payload != NULL) { free(n->payload); n->payload = NULL; } free(n); free(ch); return merged; } void TrieNode_Print(TrieNode *n, int idx, int depth) { for (int i = 0; i < depth; i++) { printf(" "); } printf("%d) Score %f, max ChildScore %f\n", idx, n->score, n->maxChildScore); for (int i = 0; i < n->numChildren; i++) { TrieNode_Print(__trieNode_children(n)[i], i, depth + 1); } } int TrieNode_Add(TrieNode **np, rune *str, t_len len, RSPayload *payload, float score, TrieAddOp op) { if (score == 0 || len == 0) { return 0; } TrieNode *n = *np; int offset = 0; for (; offset < len && offset < n->len; offset++) { if (str[offset] != n->str[offset]) { break; } } // we broke off before the end of the string if (offset < n->len) { // split the node and create 2 child nodes: // 1. a child representing the new string from the diverted offset onwards // 2. a child representing the old node's suffix from the diverted offset // and the old children n = __trie_SplitNode(n, offset); // the new string matches the split node exactly! // we simply turn the split node, which is now non terminal, into a terminal // node if (offset == len) { n->score = score; n->flags |= TRIENODE_TERMINAL; TrieNode *newChild = __trieNode_children(n)[0]; n = realloc(n, __trieNode_Sizeof(n->numChildren, n->len)); if (n->payload != NULL) { free(n->payload); n->payload = NULL; } if (payload != NULL && payload->data != NULL && payload->len > 0) { n->payload = triePayload_New(payload->data, payload->len); } __trieNode_children(n)[0] = newChild; } else { // we add a child n = __trie_AddChild(n, str, offset, len, payload, score); n->maxChildScore = MAX(n->maxChildScore, score); } *np = n; return 1; } n->maxChildScore = MAX(n->maxChildScore, score); // we're inserting in an existing node - just replace the value if (offset == len) { int term = __trieNode_isTerminal(n); int deleted = __trieNode_isDeleted(n); switch (op) { // in increment mode, just add the score to the node's score case ADD_INCR: n->score += score; break; // by default we just replace the score case ADD_REPLACE: default: n->score = score; } if (n->payload != NULL) { free(n->payload); n->payload = NULL; } if (payload != NULL && payload->data != NULL && payload->len > 0) { n->payload = triePayload_New(payload->data, payload->len); } // set the node as terminal n->flags |= TRIENODE_TERMINAL; // if it was deleted, make sure it's not now n->flags &= ~TRIENODE_DELETED; *np = n; return (term && !deleted) ? 0 : 1; } // proceed to the next child or add a new child for the current rune for (t_len i = 0; i < n->numChildren; i++) { TrieNode *child = __trieNode_children(n)[i]; if (str[offset] == child->str[0]) { int rc = TrieNode_Add(&child, str + offset, len - offset, payload, score, op); __trieNode_children(n)[i] = child; return rc; } } *np = __trie_AddChild(n, str, offset, len, payload, score); return 1; } float TrieNode_Find(TrieNode *n, rune *str, t_len len) { t_len offset = 0; while (n && offset < len) { // printf("n %.*s offset %d, len %d\n", n->len, n->str, offset, // len); t_len localOffset = 0; for (; offset < len && localOffset < n->len; offset++, localOffset++) { if (str[offset] != n->str[localOffset]) { break; } } if (offset == len) { // we're at the end of both strings! if (localOffset == n->len) return __trieNode_isDeleted(n) ? 0 : n->score; } else if (localOffset == n->len) { // we've reached the end of the node's string but not the search string // let's find a child to continue to t_len i = 0; TrieNode *nextChild = NULL; for (; i < n->numChildren; i++) { TrieNode *child = __trieNode_children(n)[i]; if (str[offset] == child->str[0]) { nextChild = child; break; } } // we couldn't find a matching child n = nextChild; } else { return 0; } } return 0; } void __trieNode_sortChildren(TrieNode *n); /* Optimize the node and its children: * 1. If a child should be deleted - delete it and reduce the child count * 2. If a child has a single child - merge them * 3. recalculate the max child score */ void __trieNode_optimizeChildren(TrieNode *n) { int i = 0; TrieNode **nodes = __trieNode_children(n); n->maxChildScore = n->score; // free deleted terminal nodes while (i < n->numChildren) { // if this is a deleted node with no children - remove it if (nodes[i]->numChildren == 0 && __trieNode_isDeleted(nodes[i])) { TrieNode_Free(nodes[i]); nodes[i] = NULL; // just "fill" the hole with the next node up while (i < n->numChildren - 1) { nodes[i] = nodes[i + 1]; n->maxChildScore = MAX(n->maxChildScore, nodes[i]->maxChildScore); i++; } // reduce child count n->numChildren--; } else { // this node is ok! // if needed - merge this node with it its single child if (nodes[i] && nodes[i]->numChildren == 1) { nodes[i] = __trieNode_MergeWithSingleChild(nodes[i]); } n->maxChildScore = MAX(n->maxChildScore, nodes[i]->maxChildScore); } i++; } __trieNode_sortChildren(n); } int TrieNode_Delete(TrieNode *n, rune *str, t_len len) { t_len offset = 0; static TrieNode *stack[TRIE_MAX_STRING_LEN]; int stackPos = 0; int rc = 0; while (n && offset < len) { stack[stackPos++] = n; t_len localOffset = 0; for (; offset < len && localOffset < n->len; offset++, localOffset++) { if (str[offset] != n->str[localOffset]) { break; } } if (offset == len) { // we're at the end of both strings! // this means we've found what we're looking for if (localOffset == n->len) { if (!(n->flags & TRIENODE_DELETED)) { n->flags |= TRIENODE_DELETED; n->flags &= ~TRIENODE_TERMINAL; n->score = 0; rc = 1; } goto end; } } else if (localOffset == n->len) { // we've reached the end of the node's string but not the search string // let's find a child to continue to t_len i = 0; TrieNode *nextChild = NULL; for (; i < n->numChildren; i++) { TrieNode *child = __trieNode_children(n)[i]; if (str[offset] == child->str[0]) { nextChild = child; break; } } // we couldn't find a matching child n = nextChild; } else { goto end; } } end: while (stackPos--) { __trieNode_optimizeChildren(stack[stackPos]); } return rc; } void TrieNode_Free(TrieNode *n) { for (t_len i = 0; i < n->numChildren; i++) { TrieNode *child = __trieNode_children(n)[i]; TrieNode_Free(child); } if (n->payload != NULL) { free(n->payload); n->payload = NULL; } free(n); } // comparator for node sorting by child max score static int __trieNode_Cmp(const void *p1, const void *p2) { TrieNode *n1 = *(TrieNode **)p1; TrieNode *n2 = *(TrieNode **)p2; if (n1->maxChildScore < n2->maxChildScore) { return 1; } else if (n1->maxChildScore > n2->maxChildScore) { return -1; } return 0; } /* Sort the children of a node by their maxChildScore */ void __trieNode_sortChildren(TrieNode *n) { if (!(n->flags & TRIENODE_SORTED) && n->numChildren > 1) { qsort(__trieNode_children(n), n->numChildren, sizeof(TrieNode *), __trieNode_Cmp); } n->flags |= TRIENODE_SORTED; } /* Push a new trie node on the iterator's stack */ inline void __ti_Push(TrieIterator *it, TrieNode *node, int skipped) { if (it->stackOffset < TRIE_MAX_STRING_LEN - 1) { stackNode *sn = &it->stack[it->stackOffset++]; sn->childOffset = 0; sn->stringOffset = 0; sn->isSkipped = skipped; sn->n = node; sn->state = ITERSTATE_SELF; } } inline void __ti_Pop(TrieIterator *it) { if (it->stackOffset > 0) { stackNode *current = __ti_current(it); if (it->popCallback) { it->popCallback(it->ctx, current->stringOffset); } it->bufOffset -= current->stringOffset; --it->stackOffset; } } inline int __ti_step(TrieIterator *it, void *matchCtx) { if (it->stackOffset == 0) { return __STEP_STOP; } stackNode *current = __ti_current(it); int matched = 0; // printf("[%.*s]current %p (%.*s %f), state %d, string offset %d/%d, child // offset %d/%d\n", // it->bufOffset, it->buf, current, current->n->len, current->n->str, // current->n->score, current->state, current->stringOffset, // current->n->len, // current->childOffset, current->n->numChildren); switch (current->state) { case ITERSTATE_MATCH: __ti_Pop(it); goto next; case ITERSTATE_SELF: if (current->stringOffset < current->n->len) { // get the current rune to feed the filter rune b = current->n->str[current->stringOffset]; if (it->filter) { // run the next character in the filter FilterCode rc = it->filter(b, it->ctx, &matched, matchCtx); // if we should stop... if (rc == F_STOP) { // match stop - change the state to MATCH and return if (matched) { current->state = ITERSTATE_MATCH; return __STEP_MATCH; } // normal stop - just pop and continue __ti_Pop(it); goto next; } } // advance the buffer offset and character offset it->buf[it->bufOffset++] = b; current->stringOffset++; // if we don't have a filter, a "match" is when we reach the end of the // node if (!it->filter) { if (current->n->len > 0 && current->stringOffset == current->n->len && __trieNode_isTerminal(current->n) && !__trieNode_isDeleted(current->n)) { matched = 1; } } return matched ? __STEP_MATCH : __STEP_CONT; } else { // switch to "children mode" current->state = ITERSTATE_CHILDREN; } case ITERSTATE_CHILDREN: default: if (!(current->n->flags & TRIENODE_SORTED)) { __trieNode_sortChildren(current->n); } // push the next child if (current->childOffset < current->n->numChildren) { TrieNode *ch = __trieNode_children(current->n)[current->childOffset++]; if (ch->maxChildScore >= it->minScore || ch->score >= it->minScore) { __ti_Push(it, ch, 0); it->nodesConsumed++; } else { //__ti_Push(it, ch, 1); it->nodesSkipped++; } } else { // at the end of the node - pop and go up __ti_Pop(it); } } next: return __STEP_CONT; } TrieIterator *TrieNode_Iterate(TrieNode *n, StepFilter f, StackPopCallback pf, void *ctx) { TrieIterator *it = calloc(1, sizeof(TrieIterator)); it->filter = f; it->popCallback = pf; it->minScore = 0; it->ctx = ctx; __ti_Push(it, n, 0); return it; } void TrieIterator_Free(TrieIterator *it) { free(it); } int TrieIterator_Next(TrieIterator *it, rune **ptr, t_len *len, RSPayload *payload, float *score, void *matchCtx) { int rc; while ((rc = __ti_step(it, matchCtx)) != __STEP_STOP) { if (rc == __STEP_MATCH) { stackNode *sn = __ti_current(it); if (__trieNode_isTerminal(sn->n) && sn->n->len == sn->stringOffset && !__trieNode_isDeleted(sn->n)) { *ptr = it->buf; *len = it->bufOffset; *score = sn->n->score; if (payload != NULL) { if (sn->n->payload != NULL) { payload->data = sn->n->payload->data; payload->len = sn->n->payload->len; } else { payload->data = NULL; payload->len = 0; } } return 1; } } } return 0; } TrieNode *TrieNode_RandomWalk(TrieNode *n, int minSteps, rune **str, t_len *len) { // create an iteration stack we walk up and down minSteps = MAX(minSteps, 4); size_t stackCap = minSteps; size_t stackSz = 1; TrieNode **stack = calloc(stackCap, sizeof(TrieNode *)); stack[0] = n; int bufCap = n->len; int steps = 0; while (steps < minSteps || !__trieNode_isTerminal(stack[stackSz - 1])) { n = stack[stackSz - 1]; /* select the next step - -1 means walk back up one level */ int rnd = (rand() % (n->numChildren + 1)) - 1; if (rnd == -1) { /* we can't walk up the top level */ if (stackSz > 1) { steps++; stackSz--; bufCap -= n->len; } continue; } /* Push a child on the stack */ TrieNode *child = __trieNode_children(n)[rnd]; stack[stackSz++] = child; steps++; if (stackSz == stackCap) { stackCap += minSteps; stack = realloc(stack, stackCap * sizeof(TrieNode *)); } bufCap += child->len; } /* Return the node at the top of the stack */ n = stack[stackSz - 1]; /* build the string by walking the stack and copying all node strings */ rune *buf = calloc(bufCap + 1, sizeof(rune)); t_len bufSize = 0; for (size_t i = 0; i < stackSz; i++) { memcpy(&buf[bufSize], stack[i]->str, sizeof(rune) * stack[i]->len); bufSize += stack[i]->len; } *str = buf; *len = bufSize; //(*str)[bufSize] = '\0'; free(stack); return n; } RediSearch-1.2.2/src/trie/trie.h000066400000000000000000000141511364126773500164130ustar00rootroot00000000000000#ifndef __TRIE_H__ #define __TRIE_H__ #include #include #include #include "rune_util.h" #include "redisearch.h" typedef uint16_t t_len; #define TRIE_MAX_STRING_LEN 255 #define TRIE_MAX_PREFIX 100 #define TRIENODE_SORTED 0x1 #define TRIENODE_TERMINAL 0x2 #define TRIENODE_DELETED 0x4 #pragma pack(1) typedef struct { uint32_t len; // 4G payload is more than enough!!!! char data[]; // this means the data will not take an extra pointer. } TriePayload; #pragma pack() /* The byte size of a TriePayload, based on its internal data length */ size_t __triePayload_Sizeof(uint32_t len); #pragma pack(1) /* TrieNode represents a single node in a trie. The actual size of it is bigger, * as the children are * allocated after str[]. * Non terminal nodes always have a score of 0, meaning you can't insert nodes * with score 0 to the * trie. */ typedef struct { // the string length of this node. can be 0 t_len len; // the number of child nodes t_len numChildren; unsigned char flags; // the node's score. Non termn float score; // the maximal score of any descendant of this node, used to optimize // traversal float maxChildScore; // the payload of terminal node. could be NULL if it's not terminal TriePayload *payload; // the string of the current node rune str[]; // ... now come the children, to be accessed with __trieNode_children } TrieNode; #pragma pack() void TrieNode_Print(TrieNode *n, int idx, int depth); /* The byte size of a node, based on its internal string length and number of * children */ size_t __trieNode_Sizeof(t_len numChildren, t_len slen); /* Create a new trie node. str is a string to be copied into the node, starting * from offset up until * len. numChildren is the initial number of allocated child nodes */ TrieNode *__newTrieNode(rune *str, t_len offset, t_len len, const char *payload, size_t plen, t_len numChildren, float score, int terminal); /* Get a pointer to the children array of a node. This is not an actual member * of the node for * memory saving reasons */ #define __trieNode_children(n) \ ((TrieNode **)((void *)n + sizeof(TrieNode) + (n->len + 1) * sizeof(rune))) #define __trieNode_isTerminal(n) (n->flags & TRIENODE_TERMINAL) #define __trieNode_isDeleted(n) (n->flags & TRIENODE_DELETED) /* Add a child node to the parent node n, with a string str starting at offset up until len, and a given score */ TrieNode *__trie_AddChild(TrieNode *n, rune *str, t_len offset, t_len len, RSPayload *payload, float score); /* Split node n at string offset n. This returns a new node which has a string * up until offset, and * a single child holding The old score of n, and its score */ TrieNode *__trie_SplitNode(TrieNode *n, t_len offset); typedef enum { ADD_REPLACE, ADD_INCR, } TrieAddOp; /* Add a new string to a trie. Returns 1 if the string did not exist there, or 0 * if we just replaced * the score. We pass a pointer to the node because it may actually change when * splitting */ int TrieNode_Add(TrieNode **n, rune *str, t_len len, RSPayload *payload, float score, TrieAddOp op); /* Find the entry with a given string and length, and return its score. Returns * 0 if the entry was * not found. * Note that you cannot put entries with zero score */ float TrieNode_Find(TrieNode *n, rune *str, t_len len); /* Mark a node as deleted. For simplicity for now we don't actually delete * anything, * but the node will not be persisted to disk, thus deleted after reload. * Returns 1 if the node was indeed deleted, 0 otherwise */ int TrieNode_Delete(TrieNode *n, rune *str, t_len len); /* Free the trie's root and all its children recursively */ void TrieNode_Free(TrieNode *n); /* trie iterator stack node. for internal use only */ typedef struct { int state; TrieNode *n; t_len stringOffset; t_len childOffset; int isSkipped; } stackNode; typedef enum { F_CONTINUE = 0, F_STOP = 1 } FilterCode; // A callback for an automaton that receives the current state, evaluates the // next byte, // and returns the next state of the automaton. If we should not continue down, // return F_STOP typedef FilterCode (*StepFilter)(rune b, void *ctx, int *match, void *matchCtx); typedef void (*StackPopCallback)(void *ctx, int num); #define ITERSTATE_SELF 0 #define ITERSTATE_CHILDREN 1 #define ITERSTATE_MATCH 2 /* Opaque trie iterator type */ // typedef struct TrieIterator TrieIterator; typedef struct TrieIterator { rune buf[TRIE_MAX_STRING_LEN + 1]; t_len bufOffset; stackNode stack[TRIE_MAX_STRING_LEN + 1]; t_len stackOffset; StepFilter filter; float minScore; int nodesConsumed; int nodesSkipped; StackPopCallback popCallback; void *ctx; } TrieIterator; /* push a new trie iterator stack node */ void __ti_Push(TrieIterator *it, TrieNode *node, int skipped); /* the current top of the iterator stack */ #define __ti_current(it) &it->stack[it->stackOffset - 1] /* pop a node from the iterator's stcak */ void __ti_Pop(TrieIterator *it); /* Step itearator return codes below: */ /* Stop the iteration */ #define __STEP_STOP 0 /* Continue to next node */ #define __STEP_CONT 1 /* We found a match, return the state to the user but continue afterwards */ #define __STEP_MATCH 3 /* Single step iteration, feeding the given filter/automaton with the next * character */ int __ti_step(TrieIterator *it, void *matchCtx); /* Iterate the tree with a step filter, which tells the iterator whether to * continue down the trie * or not. This can be a levenshtein automaton, a regex automaton, etc. A NULL * filter means just * continue iterating the entire trie. ctx is the filter's context */ TrieIterator *TrieNode_Iterate(TrieNode *n, StepFilter f, StackPopCallback pf, void *ctx); /* Free a trie iterator */ void TrieIterator_Free(TrieIterator *it); /* Iterate to the next matching entry in the trie. Returns 1 if we can continue, * or 0 if we're done * and should exit */ int TrieIterator_Next(TrieIterator *it, rune **ptr, t_len *len, RSPayload *payload, float *score, void *matchCtx); TrieNode *TrieNode_RandomWalk(TrieNode *n, int minSteps, rune **str, t_len *len); #endif RediSearch-1.2.2/src/trie/trie_type.c000066400000000000000000000245361364126773500174570ustar00rootroot00000000000000#include "../dep/libnu/libnu.h" #include "../rmutil/strings.h" #include "../rmutil/util.h" #include "../util/heap.h" #include "../util/misc.h" #include "rune_util.h" #include "trie_type.h" #include "../commands.h" #include #include #include #include #include Trie *NewTrie() { Trie *tree = RedisModule_Alloc(sizeof(Trie)); rune *rs = strToRunes("", 0); tree->root = __newTrieNode(rs, 0, 0, NULL, 0, 0, 0, 0); tree->size = 0; free(rs); return tree; } int Trie_Insert(Trie *t, RedisModuleString *s, double score, int incr, RSPayload *payload) { size_t len; char *str = (char *)RedisModule_StringPtrLen(s, &len); int ret = Trie_InsertStringBuffer(t, str, len, score, incr, payload); return ret; } #define RUNE_STATIC_ALLOC_SIZE 127 typedef struct { int isDynamic; union { rune s[RUNE_STATIC_ALLOC_SIZE + 1]; rune *p; } u; } runeBuf; static inline rune *runeBufFill(const char *s, size_t n, runeBuf *buf, size_t *len) { // Assume x2 growth. *len = n * 2; if (*len <= RUNE_STATIC_ALLOC_SIZE) { buf->isDynamic = 0; *len = strToRunesN(s, n, buf->u.s); buf->u.s[*len] = 0; return buf->u.s; } else { buf->isDynamic = 1; buf->u.p = strToRunes(s, len); return buf->u.p; } } static inline void runeBufFree(runeBuf *buf) { if (buf->isDynamic) { free(buf->u.p); } } int Trie_InsertStringBuffer(Trie *t, char *s, size_t len, double score, int incr, RSPayload *payload) { if (len > TRIE_MAX_STRING_LEN * sizeof(rune)) { return 0; } runeBuf buf; rune *runes = runeBufFill(s, len, &buf, &len); int rc; if (runes && len && len < TRIE_MAX_STRING_LEN) { rc = TrieNode_Add(&t->root, runes, len, payload, (float)score, incr ? ADD_INCR : ADD_REPLACE); t->size += rc; } else { rc = 0; } runeBufFree(&buf); return rc; } int Trie_Delete(Trie *t, char *s, size_t len) { rune *runes = strToRunes(s, &len); if (!runes || len > TRIE_MAX_STRING_LEN) { return 0; } int rc = TrieNode_Delete(t->root, runes, len); t->size -= rc; free(runes); return rc; } void TrieSearchResult_Free(TrieSearchResult *e) { if (e->str) { free(e->str); e->str = NULL; } e->payload = NULL; e->plen = 0; free(e); } static int cmpEntries(const void *p1, const void *p2, const void *udata) { const TrieSearchResult *e1 = p1, *e2 = p2; if (e1->score < e2->score) { return 1; } else if (e1->score > e2->score) { return -1; } return 0; } TrieIterator *Trie_Iterate(Trie *t, const char *prefix, size_t len, int maxDist, int prefixMode) { size_t rlen; rune *runes = strToFoldedRunes((char *)prefix, &rlen); if (!runes || rlen > TRIE_MAX_PREFIX) { return NULL; } DFAFilter *fc = malloc(sizeof(*fc)); *fc = NewDFAFilter(runes, rlen, maxDist, prefixMode); TrieIterator *it = TrieNode_Iterate(t->root, FilterFunc, StackPop, fc); free(runes); return it; } Vector *Trie_Search(Trie *tree, char *s, size_t len, size_t num, int maxDist, int prefixMode, int trim, int optimize) { if (len > TRIE_MAX_PREFIX * sizeof(rune)) { return NULL; } size_t rlen; rune *runes = strToFoldedRunes(s, &rlen); // make sure query length does not overflow if (!runes || rlen >= TRIE_MAX_PREFIX) { free(runes); return NULL; } heap_t *pq = malloc(heap_sizeof(num)); heap_init(pq, cmpEntries, NULL, num); DFAFilter fc = NewDFAFilter(runes, rlen, maxDist, prefixMode); TrieIterator *it = TrieNode_Iterate(tree->root, FilterFunc, StackPop, &fc); // TrieIterator *it = TrieNode_Iterate(tree->root,NULL, NULL, NULL); rune *rstr; t_len slen; float score; RSPayload payload = {.data = NULL, .len = 0}; TrieSearchResult *pooledEntry = NULL; int dist = maxDist + 1; while (TrieIterator_Next(it, &rstr, &slen, &payload, &score, &dist)) { if (pooledEntry == NULL) { pooledEntry = malloc(sizeof(TrieSearchResult)); pooledEntry->str = NULL; pooledEntry->payload = NULL; pooledEntry->plen = 0; } TrieSearchResult *ent = pooledEntry; ent->score = slen > 0 && slen == rlen && memcmp(runes, rstr, slen) == 0 ? INT_MAX : score; if (maxDist > 0) { // factor the distance into the score ent->score *= exp((double)-(2 * dist)); } // in prefix mode we also factor in the total length of the suffix if (prefixMode) { ent->score /= sqrt(1 + (slen >= len ? slen - len : len - slen)); } if (heap_count(pq) < heap_size(pq)) { ent->str = runesToStr(rstr, slen, &ent->len); ent->payload = payload.data; ent->plen = payload.len; heap_offerx(pq, ent); pooledEntry = NULL; if (heap_count(pq) == heap_size(pq)) { TrieSearchResult *qe = heap_peek(pq); it->minScore = qe->score; } } else { if (ent->score >= it->minScore) { pooledEntry = heap_poll(pq); free(pooledEntry->str); pooledEntry->str = NULL; ent->str = runesToStr(rstr, slen, &ent->len); ent->payload = payload.data; ent->plen = payload.len; heap_offerx(pq, ent); // get the new minimal score TrieSearchResult *qe = heap_peek(pq); if (qe->score > it->minScore) { it->minScore = qe->score; } } else { pooledEntry = ent; } } // dist = maxDist + 3; } if (pooledEntry) { TrieSearchResult_Free(pooledEntry); } // printf("Nodes consumed: %d/%d (%.02f%%)\n", it->nodesConsumed, // it->nodesConsumed + it->nodesSkipped, // 100.0 * (float)(it->nodesConsumed) / (float)(it->nodesConsumed + // it->nodesSkipped)); // put the results from the heap on a vector to return size_t n = MIN(heap_count(pq), num); Vector *ret = NewVector(TrieSearchResult *, n); for (int i = 0; i < n; ++i) { TrieSearchResult *h = heap_poll(pq); Vector_Put(ret, n - i - 1, h); } // trim the results to remove irrelevant results if (trim) { float maxScore = 0; int i; for (i = 0; i < n; ++i) { TrieSearchResult *h; Vector_Get(ret, i, &h); if (maxScore && h->score < maxScore / SCORE_TRIM_FACTOR) { // TODO: Fix trimming the vector ret->top = i; break; } maxScore = MAX(maxScore, h->score); } for (; i < n; ++i) { TrieSearchResult *h; Vector_Get(ret, i, &h); TrieSearchResult_Free(h); } } free(runes); TrieIterator_Free(it); DFAFilter_Free(&fc); heap_free(pq); return ret; } int Trie_RandomKey(Trie *t, char **str, t_len *len, double *score) { if (t->size == 0) { return 0; } rune *rstr; t_len rlen; // TODO: deduce steps from cardinality properly TrieNode *n = TrieNode_RandomWalk(t->root, 2 + rand() % 8 + (int)round(logb(1 + t->size)), &rstr, &rlen); if (!n) { return 0; } size_t sz; *str = runesToStr(rstr, rlen, &sz); *len = sz; free(rstr); *score = n->score; return 1; } /*************************************************************** * * Trie type methods * ***************************************************************/ /* declaration of the type for redis registration. */ RedisModuleType *TrieType; void *TrieType_RdbLoad(RedisModuleIO *rdb, int encver) { if (encver > TRIE_ENCVER_CURRENT) { return NULL; } return TrieType_GenericLoad(rdb, encver > TRIE_ENCVER_NOPAYLOADS); } void *TrieType_GenericLoad(RedisModuleIO *rdb, int loadPayloads) { uint64_t elements = RedisModule_LoadUnsigned(rdb); Trie *tree = NewTrie(); while (elements--) { size_t len; RSPayload payload = {.data = NULL, .len = 0}; char *str = RedisModule_LoadStringBuffer(rdb, &len); double score = RedisModule_LoadDouble(rdb); if (loadPayloads) { payload.data = RedisModule_LoadStringBuffer(rdb, &payload.len); // load an extra space for the null terminator payload.len--; } Trie_InsertStringBuffer(tree, str, len - 1, score, 0, payload.len ? &payload : NULL); RedisModule_Free(str); if (payload.data != NULL) RedisModule_Free(payload.data); } // TrieNode_Print(tree->root, 0, 0); return tree; } void TrieType_RdbSave(RedisModuleIO *rdb, void *value) { TrieType_GenericSave(rdb, (Trie *)value, 1); } void TrieType_GenericSave(RedisModuleIO *rdb, Trie *tree, int savePayloads) { RedisModule_SaveUnsigned(rdb, tree->size); RedisModuleCtx *ctx = RedisModule_GetContextFromIO(rdb); RedisModule_Log(ctx, "notice", "Trie: saving %zd nodes.", tree->size); int count = 0; if (tree->root) { TrieIterator *it = TrieNode_Iterate(tree->root, NULL, NULL, NULL); rune *rstr; t_len len; float score; RSPayload payload = {.data = NULL, .len = 0}; while (TrieIterator_Next(it, &rstr, &len, &payload, &score, NULL)) { size_t slen = 0; char *s = runesToStr(rstr, len, &slen); RedisModule_SaveStringBuffer(rdb, s, slen + 1); RedisModule_SaveDouble(rdb, (double)score); if (savePayloads) { // save an extra space for the null terminator to make the payload null terminated on load if (payload.data != NULL && payload.len > 0) { RedisModule_SaveStringBuffer(rdb, payload.data, payload.len + 1); } else { // If there's no payload - we save an empty string RedisModule_SaveStringBuffer(rdb, "", 1); } } // TODO: Save a marker for empty payload! free(s); count++; } if (count != tree->size) { RedisModule_Log(ctx, "warning", "Trie: saving %zd nodes actually iterated only %zd nodes", tree->size, count); } TrieIterator_Free(it); } } void TrieType_Digest(RedisModuleDigest *digest, void *value) { /* TODO: The DIGEST module interface is yet not implemented. */ } void TrieType_Free(void *value) { Trie *tree = value; if (tree->root) { TrieNode_Free(tree->root); } RedisModule_Free(tree); } int TrieType_Register(RedisModuleCtx *ctx) { RedisModuleTypeMethods tm = {.version = REDISMODULE_TYPE_METHOD_VERSION, .rdb_load = TrieType_RdbLoad, .rdb_save = TrieType_RdbSave, .aof_rewrite = GenericAofRewrite_DisabledHandler, .free = TrieType_Free}; TrieType = RedisModule_CreateDataType(ctx, "trietype0", TRIE_ENCVER_CURRENT, &tm); if (TrieType == NULL) { return REDISMODULE_ERR; } return REDISMODULE_OK; } RediSearch-1.2.2/src/trie/trie_type.h000066400000000000000000000037551364126773500174640ustar00rootroot00000000000000#ifndef __TRIE_TYPE_H__ #define __TRIE_TYPE_H__ #include "../redismodule.h" #include "trie.h" #include "levenshtein.h" extern RedisModuleType *TrieType; #define TRIE_ENCVER_CURRENT 1 #define TRIE_ENCVER_NOPAYLOADS 0 typedef struct { TrieNode *root; size_t size; } Trie; typedef struct { char *str; size_t len; float score; char *payload; size_t plen; } TrieSearchResult; #define SCORE_TRIM_FACTOR 10.0 Trie *NewTrie(); int Trie_Insert(Trie *t, RedisModuleString *s, double score, int incr, RSPayload *payload); int Trie_InsertStringBuffer(Trie *t, char *s, size_t len, double score, int incr, RSPayload *payload); /* Delete the string from the trie. Return 1 if the node was found and deleted, 0 otherwise */ int Trie_Delete(Trie *t, char *s, size_t len); void TrieSearchResult_Free(TrieSearchResult *e); Vector *Trie_Search(Trie *tree, char *s, size_t len, size_t num, int maxDist, int prefixMode, int trim, int optimize); /* Iterate the trie, using maxDist edit distance, returning a trie iterator that the * caller needs to free. If prefixmode is 1 we treat the string as only a prefix to iterate. * Otherwise we return an iterator to all strings within maxDist Levenshtein distance */ TrieIterator *Trie_Iterate(Trie *t, const char *prefix, size_t len, int maxDist, int prefixMode); /* Get a random key from the trie, and put the node's score in the score pointer. Returns 0 if the * trie is empty and we cannot do that */ int Trie_RandomKey(Trie *t, char **str, t_len *len, double *score); /* Commands related to the redis TrieType registration */ int TrieType_Register(RedisModuleCtx *ctx); void *TrieType_GenericLoad(RedisModuleIO *rdb, int loadPayloads); void TrieType_GenericSave(RedisModuleIO *rdb, Trie *t, int savePayloads); void *TrieType_RdbLoad(RedisModuleIO *rdb, int encver); void TrieType_RdbSave(RedisModuleIO *rdb, void *value); void TrieType_Digest(RedisModuleDigest *digest, void *value); void TrieType_Free(void *value); #endif RediSearch-1.2.2/src/util/000077500000000000000000000000001364126773500153075ustar00rootroot00000000000000RediSearch-1.2.2/src/util/Makefile000066400000000000000000000001741364126773500167510ustar00rootroot00000000000000CFLAGS ?= -g -ggdb -fPIC -lc -lm -O2 -std=gnu99 CC=gcc .SUFFIXES: .c .so .xo .o all: heap.o logging.o fnv.o block_alloc.o RediSearch-1.2.2/src/util/arr.h000066400000000000000000000127201364126773500162460ustar00rootroot00000000000000#ifndef UTIL_ARR_H_ #define UTIL_ARR_H_ /* arr.h - simple, easy to use dynamic array with fat pointers, * to allow native access to members. It can accept pointers, struct literals and scalars. * * Example usage: * * int *arr = array_new(int, 8); * // Add elements to the array * for (int i = 0; i < 100; i++) { * arr = array_append(arr, i); * } * * // read individual elements * for (int i = 0; i < array_len(arr); i++) { * printf("%d\n", arr[i]); * } * * array_free(arr); * * * */ #include #include #include #include #include #include /* Definition of malloc & friedns that can be overridden before including arr.h. * Alternatively you can include arr_rm_alloc.h, which wraps arr.h and sets the allcoation functions * to those of the RM_ family */ #ifndef array_alloc_fn #define array_alloc_fn malloc #define array_realloc_fn realloc #define array_free_fn free #endif typedef struct { uint32_t len; // TODO: optimize memory by making cap a 16-bit delta from len, and elem_sz 16 bit as well. This // makes the whole header fit in 64 bit uint32_t cap; uint32_t elem_sz; char buf[]; } array_hdr_t; typedef void *array_t; /* Internal - calculate the array size for allocations */ #define array_sizeof(hdr) (sizeof(array_hdr_t) + hdr->cap * hdr->elem_sz) /* Internal - get a pointer to the array header */ #define array_hdr(arr) ((array_hdr_t *)(((char *)arr) - sizeof(array_hdr_t))) /* Interanl - get a pointer to an element inside the array at a given index */ #define array_elem(arr, idx) (*((void **)((char *)arr + (idx * array_hdr(arr)->elem_sz)))) /* Initialize a new array with a given element size and capacity. Should not be used directly - use * array_new instead */ static array_t array_new_sz(uint32_t elem_sz, uint32_t cap, uint32_t len) { array_hdr_t *hdr = array_alloc_fn(sizeof(array_hdr_t) + cap * elem_sz); hdr->cap = cap; hdr->elem_sz = elem_sz; hdr->len = len; return (array_t)(hdr->buf); } /* Initialize an array for a given type T with a given capacity and zero length. The array should be * case to a pointer to that type. e.g. * * int *arr = array_new(int, 4); * * This allows direct access to elements * */ #define array_new(T, cap) (array_new_sz(sizeof(T), cap, 0)) /* Initialize an array for a given type T with a given length. The capacity allocated is identical * to the length * */ #define array_newlen(T, len) (array_new_sz(sizeof(T), len, len)) static inline array_t array_ensure_cap(array_t arr, uint32_t cap) { array_hdr_t *hdr = array_hdr(arr); if (cap > hdr->cap) { hdr->cap = MAX(hdr->cap * 2, cap); hdr = array_realloc_fn(hdr, array_sizeof(hdr)); } return (array_t)hdr->buf; } /* Ensure capacity for the array to grow by one */ static inline array_t array_grow(array_t arr) { return array_ensure_cap(arr, ++array_hdr(arr)->len); } /* get the last element in the array */ #define array_tail(arr) (arr[array_hdr(arr)->len - 1]) /* Append an element to the array, returning the array which may have been reallocated */ #define array_append(arr, x) \ ({ \ (arr) = array_grow((arr)); \ array_tail((arr)) = (x); \ (arr); \ }) /* Get the length of the array */ static inline uint32_t array_len(array_t arr) { return arr ? array_hdr(arr)->len : 0; } static inline void *array_trimm(array_t arr, uint32_t len, uint32_t cap) { array_hdr_t *arr_hdr = array_hdr(arr); assert(len >= 0 && "trimming len is negative"); assert((cap == -1 || cap > 0) && "trimming capacity is illegal"); assert((cap == -1 || cap >= len) && "trimming len is greater then capacity"); assert((len <= arr_hdr->len) && "trimming len is greater then current len"); arr_hdr->len = len; if (cap != -1) { arr_hdr->cap = cap; arr_hdr = array_realloc_fn(arr_hdr, array_sizeof(arr_hdr)); } return arr_hdr->buf; } #define array_trimm_len(arr, len) array_trimm(arr, len, -1) #define array_trimm_cap(arr, len) array_trimm(arr, len, len) /* Free the array, without dealing with individual elements */ static void array_free(array_t arr) { array_free_fn(array_hdr(arr)); } /* Repeate the code in "blk" for each element in the array, and give it the name of "as". * e.g: * int *arr = array_new(int, 10); * arr = array_append(arr, 1); * array_foreach(arr, i, printf("%d\n", i)); */ #define array_foreach(arr, as, blk) \ ({ \ for (uint32_t i = 0; i < array_len(arr); i++) { \ typeof(*arr) as = arr[i]; \ blk; \ } \ }) /* Free the array, freeing individual elements with free_cb */ #define array_free_ex(arr, blk) \ ({ \ if (arr) { \ for (uint32_t i = 0; i < array_len(arr); i++) { \ void *ptr = &arr[i]; \ { blk; } \ } \ array_free(arr); \ } \ }) /* Pop the top element from the array, reduce the size and return it */ #define array_pop(arr) \ ({ \ assert(array_hdr(arr)->len > 0); \ arr[--(array_hdr(arr)->len)]; \ }) #endif RediSearch-1.2.2/src/util/arr_rm_alloc.h000066400000000000000000000007641364126773500201230ustar00rootroot00000000000000#ifndef ARR_RM_ALLOC_H_ #define ARR_RM_ALLOC_H_ /* A wrapper for arr.h that sets the allocation functions to those of the RedisModule_Alloc & * friends. This file should not be included alongside arr.h, and should not be included from .h * files in general */ #include /* Define the allcation functions before including arr.h */ #define array_alloc_fn RedisModule_Alloc #define array_realloc_fn RedisModule_Realloc #define array_free_fn RedisModule_Free #include "arr.h" #endifRediSearch-1.2.2/src/util/array.c000066400000000000000000000032651364126773500165770ustar00rootroot00000000000000#include "array.h" #include "rmalloc.h" #include "util/minmax.h" static ArrayAllocProcs libcAllocProcs_g = {.Alloc = malloc, .Realloc = realloc, .Free = free}; static ArrayAllocProcs rmAllocProcs_g = { .Alloc = rm_malloc, .Realloc = rm_realloc, .Free = rm_free}; void Array_InitEx(Array *array, ArrayAllocatorType allocType) { array->capacity = 0; array->len = 0; array->data = NULL; if (allocType == ArrayAlloc_LibC) { array->procs = &libcAllocProcs_g; } else { array->procs = &rmAllocProcs_g; } } void Array_Free(Array *array) { array->procs->Free(array->data); array->capacity = 0; array->len = 0; array->data = NULL; } int Array_Resize(Array *array, uint32_t newSize) { uint32_t newCapacity = array->capacity ? array->capacity : 16; while (newCapacity - array->len < newSize) { newCapacity *= 2; if (newCapacity < array->capacity) { return -1; } } newCapacity = Max(newCapacity, 16); if ((array->data = array->procs->Realloc(array->data, newCapacity)) == NULL) { return -1; } array->capacity = newCapacity; array->len = newSize; return 0; } void *Array_Add(Array *array, uint32_t toAdd) { uint32_t oldLen = array->len; if (array->capacity - array->len < toAdd) { if (Array_Resize(array, array->len + toAdd) != 0) { return NULL; } } else { array->len += toAdd; } return array->data + oldLen; } void Array_Write(Array *arr, const void *data, size_t len) { void *ptr = Array_Add(arr, len); memcpy(ptr, data, len); } void Array_ShrinkToSize(Array *array) { if (array->capacity > array->len) { array->capacity = array->len; array->data = array->procs->Realloc(array->data, array->capacity); } }RediSearch-1.2.2/src/util/array.h000066400000000000000000000033731364126773500166040ustar00rootroot00000000000000#ifndef ARRAY_H #define ARRAY_H #include #include typedef struct { void *(*Alloc)(size_t); void *(*Realloc)(void *, size_t); void (*Free)(void *); } ArrayAllocProcs; /** Array datatype. Simple wrapper around a C array, with capacity and length. */ typedef struct Array { char *data; uint32_t len; uint32_t capacity; const ArrayAllocProcs *procs; } Array; typedef enum { ArrayAlloc_LibC, ArrayAlloc_RM, ArrayAlloc_Default = ArrayAlloc_RM } ArrayAllocatorType; void Array_InitEx(Array *array, ArrayAllocatorType allocType); static inline void Array_Init(Array *array) { Array_InitEx(array, ArrayAlloc_Default); } /** * Free any memory allocated by this array. */ void Array_Free(Array *array); /** * "Steal" the contents of the array. The caller now owns its contents. */ static inline char *Array_Steal(Array *array, size_t *len) { *len = array->len; char *ret = array->data; array->data = NULL; array->len = 0; array->capacity = 0; return ret; } /** * Add item to the array * elemSize is the size of the new item. * Returns a pointer to the newly added item. The memory is allocated but uninitialized */ void *Array_Add(Array *array, uint32_t elemSize); void Array_Write(Array *array, const void *data, size_t len); int Array_Resize(Array *array, uint32_t newSize); /** * Shrink the array down to size, so that any preemptive allocations are removed. * This should be used when no more elements will be added to the array. */ void Array_ShrinkToSize(Array *array); #define ARRAY_GETSIZE_AS(arr, T) ((arr)->len / (sizeof(T))) #define ARRAY_GETARRAY_AS(arr, T) ((T)((arr)->data)) #define ARRAY_ADD_AS(arr, T) Array_Add(arr, sizeof(T)) #define ARRAY_GETITEM_AS(arr, ix, T) (ARRAY_GETARRAY_AS(arr, T) + ix) #endifRediSearch-1.2.2/src/util/block_alloc.c000066400000000000000000000056661364126773500177340ustar00rootroot00000000000000#include "block_alloc.h" #include #include static void freeCommon(BlkAlloc *blocks, BlkAllocCleaner cleaner, void *arg, size_t elemSize, int reuse) { BlkAllocBlock *cur = blocks->root; while (cur) { if (cleaner) { for (char *p = cur->data; p < cur->data + cur->numUsed; p += elemSize) { cleaner(p, arg); } } BlkAllocBlock *curNext = cur->next; if (reuse) { cur->next = blocks->avail; blocks->avail = cur; } else { free(cur); } cur = curNext; } // size_t n = 0; // for (cur = blocks->avail; cur; cur = cur->next) { // n++; // } // printf("%p: Have %lu available blocks\n", blocks, n); if (reuse) { // assert(blocks->avail); } else if (blocks->avail) { cur = blocks->avail; while (cur) { BlkAllocBlock *curNext = cur->next; free(cur); cur = curNext; } } } void BlkAlloc_FreeAll(BlkAlloc *blocks, BlkAllocCleaner cleaner, void *arg, size_t elemSize) { freeCommon(blocks, cleaner, arg, elemSize, 0); } void BlkAlloc_Clear(BlkAlloc *blocks, BlkAllocCleaner cleaner, void *arg, size_t elemSize) { freeCommon(blocks, cleaner, arg, elemSize, 1); blocks->root = blocks->last = NULL; } static BlkAllocBlock *getNewBlock(BlkAlloc *alloc, size_t blockSize) { // printf("%p: getNewBlock BEGIN (sz=%llu)\n", alloc, blockSize); BlkAllocBlock *block = NULL; if (alloc->avail) { // printf("%p: have avail..\n", alloc); BlkAllocBlock *prev = NULL; for (BlkAllocBlock *cur = alloc->avail; cur; cur = cur->next) { if (cur->capacity >= blockSize) { // Set our block block = cur; if (cur == alloc->avail) { alloc->avail = cur->next; } else { assert(prev != NULL); prev->next = cur->next; } break; } else { prev = cur; } } } if (!block) { // printf("Allocating new block..\n"); block = malloc(sizeof(*alloc->root) + blockSize); block->capacity = blockSize; } else { // printf("Reusing block %p. Alloc->Avail=%p\n", block, alloc->avail); } block->numUsed = 0; block->next = NULL; // printf("%p: getNewBlock END\n", alloc); return block; } void *BlkAlloc_Alloc(BlkAlloc *blocks, size_t elemSize, size_t blockSize) { assert(blockSize >= elemSize); if (!blocks->root) { blocks->root = blocks->last = getNewBlock(blocks, blockSize); } else if (blocks->last->numUsed + elemSize > blockSize) { // Allocate a new element BlkAllocBlock *newBlock = getNewBlock(blocks, blockSize); blocks->last->next = newBlock; blocks->last = newBlock; // size_t n = 0; // for (BlkAllocBlock *tmp = blocks->root; tmp; tmp = tmp->next) { // n++; // } // printf("%p Allocated new block, elem size %d %d\n", blocks, elemSize, blockSize / elemSize); } void *p = blocks->last->data + blocks->last->numUsed; blocks->last->numUsed += elemSize; return p; }RediSearch-1.2.2/src/util/block_alloc.h000066400000000000000000000030071364126773500177240ustar00rootroot00000000000000#ifndef BLOCK_ALLOC_H #define BLOCK_ALLOC_H #include typedef struct BlkAllocBlock { struct BlkAllocBlock *next; size_t numUsed; size_t capacity; char data[0] __attribute__((aligned(16))); } BlkAllocBlock; typedef struct BlkAlloc { BlkAllocBlock *root; BlkAllocBlock *last; // Available blocks - used when recycling the allocator BlkAllocBlock *avail; } BlkAlloc; // Initialize a block allocator static inline void BlkAlloc_Init(BlkAlloc *alloc) { alloc->root = NULL; alloc->last = NULL; alloc->avail = NULL; } /** * Allocate a new element from the block allocator. A pointer of size elemSize * will be returned. blockSize is the size of the new block to be created * (if the current block has no more room for elemSize). blockSize should be * greater than elemSize, and should likely be a multiple thereof. * * The returned pointer remains valid until FreeAll is called. */ void *BlkAlloc_Alloc(BlkAlloc *alloc, size_t elemSize, size_t blockSize); typedef void (*BlkAllocCleaner)(void *ptr, void *arg); /** * Free all memory allocated by the allocator. * If a cleaner function is called, it will be called for each element. Elements * are assumed to be elemSize spaces apart from each other. */ void BlkAlloc_FreeAll(BlkAlloc *alloc, BlkAllocCleaner cleaner, void *arg, size_t elemSize); /** * Like FreeAll, except the blocks are recycled and placed inside the 'avail' * pool instead. */ void BlkAlloc_Clear(BlkAlloc *alloc, BlkAllocCleaner cleaner, void *arg, size_t elemSize); #endif RediSearch-1.2.2/src/util/fnv.c000066400000000000000000000043741364126773500162540ustar00rootroot00000000000000 #include "fnv.h" #include #include /* * fnv_32a_buf - perform a 32 bit Fowler/Noll/Vo FNV-1a hash on a buffer * * input: * buf - start of buffer to hash * len - length of buffer in octets * hval - previous hash value or 0 if first call * * returns: * 32 bit hash as a static hash type * * NOTE: To use the recommended 32 bit FNV-1a hash, use FNV1_32A_INIT as the * hval arg on the first call to either fnv_32a_buf() or fnv_32a_str(). */ uint32_t rs_fnv_32a_buf(void *buf, size_t len, uint32_t hval) { unsigned char *bp = (unsigned char *)buf; /* start of buffer */ unsigned char *be = bp + len; /* beyond end of buffer */ /* * FNV-1a hash each octet in the buffer */ while (bp < be) { /* xor the bottom with the current octet */ hval ^= (uint32_t)*bp++; /* multiply by the 32 bit FNV magic prime mod 2^32 */ #if defined(NO_FNV_GCC_OPTIMIZATION) hval *= FNV_32_PRIME; #else hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24); #endif } /* return our new hash value */ return hval; } /* * 64 bit magic FNV-1a prime */ #define FNV_64_PRIME ((uint64_t)0x100000001b3ULL) /* * fnv_64a_buf - perform a 64 bit Fowler/Noll/Vo FNV-1a hash on a buffer * * input: * buf - start of buffer to hash * len - length of buffer in octets * hval - previous hash value or 0 if first call * * returns: * 64 bit hash as a static hash type * * NOTE: To use the recommended 64 bit FNV-1a hash, use FNV1A_64_INIT as the * hval arg on the first call to either fnv_64a_buf() or fnv_64a_str(). */ uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval) { unsigned char *bp = (unsigned char *)buf; /* start of buffer */ unsigned char *be = bp + len; /* beyond end of buffer */ /* * FNV-1a hash each octet of the buffer */ while (bp < be) { /* xor the bottom with the current octet */ hval ^= (uint64_t)*bp++; /* multiply by the 64 bit FNV magic prime mod 2^64 */ #if defined(NO_FNV_GCC_OPTIMIZATION) hval *= FNV_64_PRIME; #else /* NO_FNV_GCC_OPTIMIZATION */ hval += (hval << 1) + (hval << 4) + (hval << 5) + (hval << 7) + (hval << 8) + (hval << 40); #endif /* NO_FNV_GCC_OPTIMIZATION */ } /* return our new hash value */ return hval; } RediSearch-1.2.2/src/util/fnv.h000066400000000000000000000004041364126773500162470ustar00rootroot00000000000000#ifndef __FT_FNV_H__ #define __FT_FNV_H__ #include #include #define FNV_32_PRIME ((Fnv32_t)0x01000193) uint32_t rs_fnv_32a_buf(void *buf, size_t len, uint32_t hval); uint64_t fnv_64a_buf(void *buf, size_t len, uint64_t hval); #endif RediSearch-1.2.2/src/util/heap.c000066400000000000000000000113141364126773500163700ustar00rootroot00000000000000 #include #include #include #include #include "heap.h" #define DEFAULT_CAPACITY 13 struct heap_s { /* size of array */ unsigned int size; /* items within heap */ unsigned int count; /** user data */ const void *udata; int (*cmp) (const void *, const void *, const void *); void * array[]; }; size_t heap_sizeof(unsigned int size) { return sizeof(heap_t) + size * sizeof(void *); } static int __child_left(const int idx) { return idx * 2 + 1; } static int __child_right(const int idx) { return idx * 2 + 2; } static int __parent(const int idx) { return (idx - 1) / 2; } void heap_init(heap_t* h, int (*cmp) (const void *, const void *, const void *udata), const void *udata, unsigned int size ) { h->cmp = cmp; h->udata = udata; h->size = size; h->count = 0; } heap_t *heap_new(int (*cmp) (const void *, const void *, const void *udata), const void *udata) { heap_t *h = malloc(heap_sizeof(DEFAULT_CAPACITY)); if (!h) return NULL; heap_init(h, cmp, udata, DEFAULT_CAPACITY); return h; } void heap_free(heap_t * h) { free(h); } /** * @return a new heap on success; NULL otherwise */ static heap_t* __ensurecapacity(heap_t * h) { if (h->count < h->size) return h; h->size *= 2; return realloc(h, heap_sizeof(h->size)); } static void __swap(heap_t * h, const int i1, const int i2) { void *tmp = h->array[i1]; h->array[i1] = h->array[i2]; h->array[i2] = tmp; } static int __pushup(heap_t * h, unsigned int idx) { /* 0 is the root node */ while (0 != idx) { int parent = __parent(idx); /* we are smaller than the parent */ if (h->cmp(h->array[idx], h->array[parent], h->udata) < 0) return -1; else __swap(h, idx, parent); idx = parent; } return idx; } static void __pushdown(heap_t * h, unsigned int idx) { while (1) { unsigned int childl, childr, child; childl = __child_left(idx); childr = __child_right(idx); if (childr >= h->count) { /* can't pushdown any further */ if (childl >= h->count) return; child = childl; } /* find biggest child */ else if (h->cmp(h->array[childl], h->array[childr], h->udata) < 0) child = childr; else child = childl; /* idx is smaller than child */ if (h->cmp(h->array[idx], h->array[child], h->udata) < 0) { __swap(h, idx, child); idx = child; /* bigger than the biggest child, we stop, we win */ } else return; } } static void __heap_offerx(heap_t * h, void *item) { h->array[h->count] = item; /* ensure heap properties */ __pushup(h, h->count++); } int heap_offerx(heap_t * h, void *item) { if (h->count == h->size) return -1; __heap_offerx(h, item); return 0; } int heap_offer(heap_t ** h, void *item) { if (NULL == (*h = __ensurecapacity(*h))) return -1; __heap_offerx(*h, item); return 0; } void *heap_poll(heap_t * h) { if (0 == heap_count(h)) return NULL; void *item = h->array[0]; h->array[0] = h->array[h->count - 1]; h->count--; if (h->count > 1) __pushdown(h, 0); return item; } void *heap_peek(const heap_t * h) { if (0 == heap_count(h)) return NULL; return h->array[0]; } void heap_clear(heap_t * h) { h->count = 0; } /** * @return item's index on the heap's array; otherwise -1 */ static int __item_get_idx(const heap_t * h, const void *item) { unsigned int idx; for (idx = 0; idx < h->count; idx++) if (0 == h->cmp(h->array[idx], item, h->udata)) return idx; return -1; } void *heap_remove_item(heap_t * h, const void *item) { int idx = __item_get_idx(h, item); if (idx == -1) return NULL; /* swap the item we found with the last item on the heap */ void *ret_item = h->array[idx]; h->array[idx] = h->array[h->count - 1]; h->array[h->count - 1] = NULL; h->count -= 1; /* ensure heap property */ __pushup(h, idx); return ret_item; } int heap_contains_item(const heap_t * h, const void *item) { return __item_get_idx(h, item) != -1; } int heap_count(const heap_t * h) { return h->count; } int heap_size(const heap_t * h) { return h->size; } /*--------------------------------------------------------------79-characters-*/RediSearch-1.2.2/src/util/heap.h000066400000000000000000000050751364126773500164040ustar00rootroot00000000000000#ifndef HEAP_H #define HEAP_H #include typedef struct heap_s heap_t; /** * Create new heap and initialise it. * * malloc()s space for heap. * * @param[in] cmp Callback used to get an item's priority * @param[in] udata User data passed through to cmp callback * @return initialised heap */ heap_t *heap_new(int (*cmp) (const void *, const void *, const void *udata), const void *udata); /** * Initialise heap. Use memory passed by user. * * No malloc()s are performed. * * @param[in] cmp Callback used to get an item's priority * @param[in] udata User data passed through to cmp callback * @param[in] size Initial size of the heap's array */ void heap_init(heap_t* h, int (*cmp) (const void *, const void *, const void *udata), const void *udata, unsigned int size); void heap_free(heap_t * hp); /** * Add item * * Ensures that the data structure can hold the item. * * NOTE: * realloc() possibly called. * The heap pointer will be changed if the heap needs to be enlarged. * * @param[in/out] hp_ptr Pointer to the heap. Changed when heap is enlarged. * @param[in] item The item to be added * @return 0 on success; -1 on failure */ int heap_offer(heap_t **hp_ptr, void *item); /** * Add item * * An error will occur if there isn't enough space for this item. * * NOTE: * no malloc()s called. * * @param[in] item The item to be added * @return 0 on success; -1 on error */ int heap_offerx(heap_t * hp, void *item); /** * Remove the item with the top priority * * @return top item */ void *heap_poll(heap_t * hp); /** * @return top item of the heap */ void *heap_peek(const heap_t * hp); /** * Clear all items * * NOTE: * Does not free items. * Only use if item memory is managed outside of heap */ void heap_clear(heap_t * hp); /** * @return number of items in heap */ int heap_count(const heap_t * hp); /** * @return size of array */ int heap_size(const heap_t * hp); /** * @return number of bytes needed for a heap of this size. */ size_t heap_sizeof(unsigned int size); /** * Remove item * * @param[in] item The item that is to be removed * @return item to be removed; NULL if item does not exist */ void *heap_remove_item(heap_t * hp, const void *item); /** * Test membership of item * * @param[in] item The item to test * @return 1 if the heap contains this item; otherwise 0 */ int heap_contains_item(const heap_t * hp, const void *item); #endif /* HEAP_H */RediSearch-1.2.2/src/util/khash.h000066400000000000000000001013251364126773500165600ustar00rootroot00000000000000/* The MIT License Copyright (c) 2008, 2009, 2011 by Attractive Chaos Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* An example: #include "khash.h" KHASH_MAP_INIT_INT(32, char) int main() { int ret, is_missing; khiter_t k; khash_t(32) *h = kh_init(32); k = kh_put(32, h, 5, &ret); kh_value(h, k) = 10; k = kh_get(32, h, 10); is_missing = (k == kh_end(h)); k = kh_get(32, h, 5); kh_del(32, h, k); for (k = kh_begin(h); k != kh_end(h); ++k) if (kh_exist(h, k)) kh_value(h, k) = 1; kh_destroy(32, h); return 0; } */ /* 2013-05-02 (0.2.8): * Use quadratic probing. When the capacity is power of 2, stepping function i*(i+1)/2 guarantees to traverse each bucket. It is better than double hashing on cache performance and is more robust than linear probing. In theory, double hashing should be more robust than quadratic probing. However, my implementation is probably not for large hash tables, because the second hash function is closely tied to the first hash function, which reduce the effectiveness of double hashing. Reference: http://research.cs.vt.edu/AVresearch/hashing/quadratic.php 2011-12-29 (0.2.7): * Minor code clean up; no actual effect. 2011-09-16 (0.2.6): * The capacity is a power of 2. This seems to dramatically improve the speed for simple keys. Thank Zilong Tan for the suggestion. Reference: - http://code.google.com/p/ulib/ - http://nothings.org/computer/judy/ * Allow to optionally use linear probing which usually has better performance for random input. Double hashing is still the default as it is more robust to certain non-random input. * Added Wang's integer hash function (not used by default). This hash function is more robust to certain non-random input. 2011-02-14 (0.2.5): * Allow to declare global functions. 2009-09-26 (0.2.4): * Improve portability 2008-09-19 (0.2.3): * Corrected the example * Improved interfaces 2008-09-11 (0.2.2): * Improved speed a little in kh_put() 2008-09-10 (0.2.1): * Added kh_clear() * Fixed a compiling error 2008-09-02 (0.2.0): * Changed to token concatenation which increases flexibility. 2008-08-31 (0.1.2): * Fixed a bug in kh_get(), which has not been tested previously. 2008-08-31 (0.1.1): * Added destructor */ #ifndef __AC_KHASH_H #define __AC_KHASH_H /*! @header Generic hash table library. */ #define AC_VERSION_KHASH_H "0.2.8" #include #include #include /* compiler specific configuration */ #if UINT_MAX == 0xffffffffu typedef unsigned int khint32_t; #elif ULONG_MAX == 0xffffffffu typedef unsigned long khint32_t; #endif #if ULONG_MAX == ULLONG_MAX typedef unsigned long khint64_t; #else typedef unsigned long long khint64_t; #endif #ifndef kh_inline #ifdef _MSC_VER #define kh_inline __inline #else #define kh_inline inline #endif #endif /* kh_inline */ #ifndef klib_unused #if (defined __clang__ && __clang_major__ >= 3) || (defined __GNUC__ && __GNUC__ >= 3) #define klib_unused __attribute__((__unused__)) #else #define klib_unused #endif #endif /* klib_unused */ typedef khint32_t khint_t; typedef khint_t khiter_t; #define __ac_isempty(flag, i) ((flag[i >> 4] >> ((i & 0xfU) << 1)) & 2) #define __ac_isdel(flag, i) ((flag[i >> 4] >> ((i & 0xfU) << 1)) & 1) #define __ac_iseither(flag, i) ((flag[i >> 4] >> ((i & 0xfU) << 1)) & 3) #define __ac_set_isdel_false(flag, i) (flag[i >> 4] &= ~(1ul << ((i & 0xfU) << 1))) #define __ac_set_isempty_false(flag, i) (flag[i >> 4] &= ~(2ul << ((i & 0xfU) << 1))) #define __ac_set_isboth_false(flag, i) (flag[i >> 4] &= ~(3ul << ((i & 0xfU) << 1))) #define __ac_set_isdel_true(flag, i) (flag[i >> 4] |= 1ul << ((i & 0xfU) << 1)) #define __ac_fsize(m) ((m) < 16 ? 1 : (m) >> 4) #ifndef kroundup32 #define kroundup32(x) \ (--(x), (x) |= (x) >> 1, (x) |= (x) >> 2, (x) |= (x) >> 4, (x) |= (x) >> 8, (x) |= (x) >> 16, \ ++(x)) #endif #ifndef kcalloc #define kcalloc(N, Z) calloc(N, Z) #endif #ifndef kmalloc #define kmalloc(Z) malloc(Z) #endif #ifndef krealloc #define krealloc(P, Z) realloc(P, Z) #endif #ifndef kfree #define kfree(P) free(P) #endif static const double __ac_HASH_UPPER = 0.77; #define __KHASH_TYPE(name, khkey_t, khval_t) \ typedef struct kh_##name##_s { \ khint_t n_buckets, size, n_occupied, upper_bound; \ khint32_t *flags; \ khkey_t *keys; \ khval_t *vals; \ } kh_##name##_t; #define __KHASH_PROTOTYPES(name, khkey_t, khval_t) \ extern kh_##name##_t *kh_init_##name(void); \ extern void kh_destroy_##name(kh_##name##_t *h); \ extern void kh_clear_##name(kh_##name##_t *h); \ extern khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key); \ extern int kh_resize_##name(kh_##name##_t *h, khint_t new_n_buckets); \ extern khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret); \ extern void kh_del_##name(kh_##name##_t *h, khint_t x); #define __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ SCOPE kh_##name##_t *kh_init_##name(void) { \ return (kh_##name##_t *)kcalloc(1, sizeof(kh_##name##_t)); \ } \ SCOPE void kh_destroy_##name(kh_##name##_t *h) { \ if (h) { \ kfree((void *)h->keys); \ kfree(h->flags); \ kfree((void *)h->vals); \ kfree(h); \ } \ } \ SCOPE void kh_clear_##name(kh_##name##_t *h) { \ if (h && h->flags) { \ memset(h->flags, 0xaa, __ac_fsize(h->n_buckets) * sizeof(khint32_t)); \ h->size = h->n_occupied = 0; \ } \ } \ SCOPE khint_t kh_get_##name(const kh_##name##_t *h, khkey_t key) { \ if (h->n_buckets) { \ khint_t k, i, last, mask, step = 0; \ mask = h->n_buckets - 1; \ k = __hash_func(key); \ i = k & mask; \ last = i; \ while (!__ac_isempty(h->flags, i) && \ (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ i = (i + (++step)) & mask; \ if (i == last) return h->n_buckets; \ } \ return __ac_iseither(h->flags, i) ? h->n_buckets : i; \ } else \ return 0; \ } \ SCOPE int kh_resize_##name(kh_##name##_t *h, \ khint_t new_n_buckets) { /* This function uses 0.25*n_buckets bytes \ of working space instead of \ [sizeof(key_t+val_t)+.25]*n_buckets. */ \ khint32_t *new_flags = 0; \ khint_t j = 1; \ { \ kroundup32(new_n_buckets); \ if (new_n_buckets < 4) new_n_buckets = 4; \ if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) \ j = 0; /* requested size is too small */ \ else { /* hash table size to be changed (shrink or expand); rehash */ \ new_flags = (khint32_t *)kmalloc(__ac_fsize(new_n_buckets) * sizeof(khint32_t)); \ if (!new_flags) return -1; \ memset(new_flags, 0xaa, __ac_fsize(new_n_buckets) * sizeof(khint32_t)); \ if (h->n_buckets < new_n_buckets) { /* expand */ \ khkey_t *new_keys = \ (khkey_t *)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \ if (!new_keys) { \ kfree(new_flags); \ return -1; \ } \ h->keys = new_keys; \ if (kh_is_map) { \ khval_t *new_vals = \ (khval_t *)krealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \ if (!new_vals) { \ kfree(new_flags); \ return -1; \ } \ h->vals = new_vals; \ } \ } /* otherwise shrink */ \ } \ } \ if (j) { /* rehashing is needed */ \ for (j = 0; j != h->n_buckets; ++j) { \ if (__ac_iseither(h->flags, j) == 0) { \ khkey_t key = h->keys[j]; \ khval_t val; \ khint_t new_mask; \ new_mask = new_n_buckets - 1; \ if (kh_is_map) val = h->vals[j]; \ __ac_set_isdel_true(h->flags, j); \ while (1) { /* kick-out process; sort of like in Cuckoo hashing */ \ khint_t k, i, step = 0; \ k = __hash_func(key); \ i = k & new_mask; \ while (!__ac_isempty(new_flags, i)) i = (i + (++step)) & new_mask; \ __ac_set_isempty_false(new_flags, i); \ if (i < h->n_buckets && \ __ac_iseither(h->flags, i) == 0) { /* kick out the existing element */ \ { \ khkey_t tmp = h->keys[i]; \ h->keys[i] = key; \ key = tmp; \ } \ if (kh_is_map) { \ khval_t tmp = h->vals[i]; \ h->vals[i] = val; \ val = tmp; \ } \ __ac_set_isdel_true(h->flags, i); /* mark it as deleted in the old hash table */ \ } else { /* write the element and jump out of the loop */ \ h->keys[i] = key; \ if (kh_is_map) h->vals[i] = val; \ break; \ } \ } \ } \ } \ if (h->n_buckets > new_n_buckets) { /* shrink the hash table */ \ h->keys = (khkey_t *)krealloc((void *)h->keys, new_n_buckets * sizeof(khkey_t)); \ if (kh_is_map) \ h->vals = (khval_t *)krealloc((void *)h->vals, new_n_buckets * sizeof(khval_t)); \ } \ kfree(h->flags); /* free the working space */ \ h->flags = new_flags; \ h->n_buckets = new_n_buckets; \ h->n_occupied = h->size; \ h->upper_bound = (khint_t)(h->n_buckets * __ac_HASH_UPPER + 0.5); \ } \ return 0; \ } \ SCOPE khint_t kh_put_##name(kh_##name##_t *h, khkey_t key, int *ret) { \ khint_t x; \ if (h->n_occupied >= h->upper_bound) { /* update the hash table */ \ if (h->n_buckets > (h->size << 1)) { \ if (kh_resize_##name(h, h->n_buckets - 1) < 0) { /* clear "deleted" elements */ \ *ret = -1; \ return h->n_buckets; \ } \ } else if (kh_resize_##name(h, h->n_buckets + 1) < 0) { /* expand the hash table */ \ *ret = -1; \ return h->n_buckets; \ } \ } /* TODO: to implement automatically shrinking; resize() already support shrinking */ \ { \ khint_t k, i, site, last, mask = h->n_buckets - 1, step = 0; \ x = site = h->n_buckets; \ k = __hash_func(key); \ i = k & mask; \ if (__ac_isempty(h->flags, i)) \ x = i; /* for speed up */ \ else { \ last = i; \ while (!__ac_isempty(h->flags, i) && \ (__ac_isdel(h->flags, i) || !__hash_equal(h->keys[i], key))) { \ if (__ac_isdel(h->flags, i)) site = i; \ i = (i + (++step)) & mask; \ if (i == last) { \ x = site; \ break; \ } \ } \ if (x == h->n_buckets) { \ if (__ac_isempty(h->flags, i) && site != h->n_buckets) \ x = site; \ else \ x = i; \ } \ } \ } \ if (__ac_isempty(h->flags, x)) { /* not present at all */ \ h->keys[x] = key; \ __ac_set_isboth_false(h->flags, x); \ ++h->size; \ ++h->n_occupied; \ *ret = 1; \ } else if (__ac_isdel(h->flags, x)) { /* deleted */ \ h->keys[x] = key; \ __ac_set_isboth_false(h->flags, x); \ ++h->size; \ *ret = 2; \ } else \ *ret = 0; /* Don't touch h->keys[x] if present and not deleted */ \ return x; \ } \ SCOPE void kh_del_##name(kh_##name##_t *h, khint_t x) { \ if (x != h->n_buckets && !__ac_iseither(h->flags, x)) { \ __ac_set_isdel_true(h->flags, x); \ --h->size; \ } \ } #define KHASH_DECLARE(name, khkey_t, khval_t) \ __KHASH_TYPE(name, khkey_t, khval_t) \ __KHASH_PROTOTYPES(name, khkey_t, khval_t) #define KHASH_INIT2(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ __KHASH_TYPE(name, khkey_t, khval_t) \ __KHASH_IMPL(name, SCOPE, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) #define KHASH_INIT(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal) \ KHASH_INIT2(name, static kh_inline klib_unused, khkey_t, khval_t, kh_is_map, __hash_func, \ __hash_equal) /* --- BEGIN OF HASH FUNCTIONS --- */ /*! @function @abstract Integer hash function @param key The integer [khint32_t] @return The hash value [khint_t] */ #define kh_int_hash_func(key) (khint32_t)(key) /*! @function @abstract Integer comparison function */ #define kh_int_hash_equal(a, b) ((a) == (b)) /*! @function @abstract 64-bit integer hash function @param key The integer [khint64_t] @return The hash value [khint_t] */ #define kh_int64_hash_func(key) (khint32_t)((key) >> 33 ^ (key) ^ (key) << 11) /*! @function @abstract 64-bit integer comparison function */ #define kh_int64_hash_equal(a, b) ((a) == (b)) /*! @function @abstract const char* hash function @param s Pointer to a null terminated string @return The hash value */ static kh_inline khint_t __ac_X31_hash_string(const char *s) { khint_t h = (khint_t)*s; if (h) for (++s; *s; ++s) h = (h << 5) - h + (khint_t)*s; return h; } /*! @function @abstract Another interface to const char* hash function @param key Pointer to a null terminated string [const char*] @return The hash value [khint_t] */ #define kh_str_hash_func(key) __ac_X31_hash_string(key) /*! @function @abstract Const char* comparison function */ #define kh_str_hash_equal(a, b) (strcmp(a, b) == 0) static kh_inline khint_t __ac_Wang_hash(khint_t key) { key += ~(key << 15); key ^= (key >> 10); key += (key << 3); key ^= (key >> 6); key += ~(key << 11); key ^= (key >> 16); return key; } #define kh_int_hash_func2(key) __ac_Wang_hash((khint_t)key) /* --- END OF HASH FUNCTIONS --- */ /* Other convenient macros... */ /*! @abstract Type of the hash table. @param name Name of the hash table [symbol] */ #define khash_t(name) kh_##name##_t /*! @function @abstract Initiate a hash table. @param name Name of the hash table [symbol] @return Pointer to the hash table [khash_t(name)*] */ #define kh_init(name) kh_init_##name() /*! @function @abstract Destroy a hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] */ #define kh_destroy(name, h) kh_destroy_##name(h) /*! @function @abstract Reset a hash table without deallocating memory. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] */ #define kh_clear(name, h) kh_clear_##name(h) /*! @function @abstract Resize a hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param s New size [khint_t] */ #define kh_resize(name, h, s) kh_resize_##name(h, s) /*! @function @abstract Insert a key to the hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param k Key [type of keys] @param r Extra return code: -1 if the operation failed; 0 if the key is present in the hash table; 1 if the bucket is empty (never used); 2 if the element in the bucket has been deleted [int*] @return Iterator to the inserted element [khint_t] */ #define kh_put(name, h, k, r) kh_put_##name(h, k, r) /*! @function @abstract Retrieve a key from the hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param k Key [type of keys] @return Iterator to the found element, or kh_end(h) if the element is absent [khint_t] */ #define kh_get(name, h, k) kh_get_##name(h, k) /*! @function @abstract Remove a key from the hash table. @param name Name of the hash table [symbol] @param h Pointer to the hash table [khash_t(name)*] @param k Iterator to the element to be deleted [khint_t] */ #define kh_del(name, h, k) kh_del_##name(h, k) /*! @function @abstract Test whether a bucket contains data. @param h Pointer to the hash table [khash_t(name)*] @param x Iterator to the bucket [khint_t] @return 1 if containing data; 0 otherwise [int] */ #define kh_exist(h, x) (!__ac_iseither((h)->flags, (x))) /*! @function @abstract Get key given an iterator @param h Pointer to the hash table [khash_t(name)*] @param x Iterator to the bucket [khint_t] @return Key [type of keys] */ #define kh_key(h, x) ((h)->keys[x]) /*! @function @abstract Get value given an iterator @param h Pointer to the hash table [khash_t(name)*] @param x Iterator to the bucket [khint_t] @return Value [type of values] @discussion For hash sets, calling this results in segfault. */ #define kh_val(h, x) ((h)->vals[x]) /*! @function @abstract Alias of kh_val() */ #define kh_value(h, x) ((h)->vals[x]) /*! @function @abstract Get the start iterator @param h Pointer to the hash table [khash_t(name)*] @return The start iterator [khint_t] */ #define kh_begin(h) (khint_t)(0) /*! @function @abstract Get the end iterator @param h Pointer to the hash table [khash_t(name)*] @return The end iterator [khint_t] */ #define kh_end(h) ((h)->n_buckets) /*! @function @abstract Get the number of elements in the hash table @param h Pointer to the hash table [khash_t(name)*] @return Number of elements in the hash table [khint_t] */ #define kh_size(h) ((h)->size) /*! @function @abstract Get the number of buckets in the hash table @param h Pointer to the hash table [khash_t(name)*] @return Number of buckets in the hash table [khint_t] */ #define kh_n_buckets(h) ((h)->n_buckets) /*! @function @abstract Iterate over the entries in the hash table @param h Pointer to the hash table [khash_t(name)*] @param kvar Variable to which key will be assigned @param vvar Variable to which value will be assigned @param code Block of code to execute */ #define kh_foreach(h, kvar, vvar, code) \ { \ khint_t __i; \ for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ if (!kh_exist(h, __i)) continue; \ (kvar) = kh_key(h, __i); \ (vvar) = kh_val(h, __i); \ code; \ } \ } /*! @function @abstract Iterate over the values in the hash table @param h Pointer to the hash table [khash_t(name)*] @param vvar Variable to which value will be assigned @param code Block of code to execute */ #define kh_foreach_value(h, vvar, code) \ { \ khint_t __i; \ for (__i = kh_begin(h); __i != kh_end(h); ++__i) { \ if (!kh_exist(h, __i)) continue; \ (vvar) = kh_val(h, __i); \ code; \ } \ } /* More conenient interfaces */ /*! @function @abstract Instantiate a hash set containing integer keys @param name Name of the hash table [symbol] */ #define KHASH_SET_INIT_INT(name) \ KHASH_INIT(name, khint32_t, char, 0, kh_int_hash_func, kh_int_hash_equal) /*! @function @abstract Instantiate a hash map containing integer keys @param name Name of the hash table [symbol] @param khval_t Type of values [type] */ #define KHASH_MAP_INIT_INT(name, khval_t) \ KHASH_INIT(name, khint32_t, khval_t, 1, kh_int_hash_func, kh_int_hash_equal) /*! @function @abstract Instantiate a hash map containing 64-bit integer keys @param name Name of the hash table [symbol] */ #define KHASH_SET_INIT_INT64(name) \ KHASH_INIT(name, khint64_t, char, 0, kh_int64_hash_func, kh_int64_hash_equal) /*! @function @abstract Instantiate a hash map containing 64-bit integer keys @param name Name of the hash table [symbol] @param khval_t Type of values [type] */ #define KHASH_MAP_INIT_INT64(name, khval_t) \ KHASH_INIT(name, khint64_t, khval_t, 1, kh_int64_hash_func, kh_int64_hash_equal) typedef const char *kh_cstr_t; /*! @function @abstract Instantiate a hash map containing const char* keys @param name Name of the hash table [symbol] */ #define KHASH_SET_INIT_STR(name) \ KHASH_INIT(name, kh_cstr_t, char, 0, kh_str_hash_func, kh_str_hash_equal) /*! @function @abstract Instantiate a hash map containing const char* keys @param name Name of the hash table [symbol] @param khval_t Type of values [type] */ #define KHASH_MAP_INIT_STR(name, khval_t) \ KHASH_INIT(name, kh_cstr_t, khval_t, 1, kh_str_hash_func, kh_str_hash_equal) #endif /* __AC_KHASH_H */RediSearch-1.2.2/src/util/khtable.c000066400000000000000000000120151364126773500170640ustar00rootroot00000000000000#include "khtable.h" #include #include static uint32_t primes[] = {5ul, 11ul, 23ul, 47ul, 97ul, 199ul, 409ul, 823ul, 1741ul, 3469ul, 6949ul, 14033ul, 28411ul, 57557ul, 116731ul, 236897ul, 480881ul, 976369ul, 1982627ul, 4026031ul, 8175383ul, 16601593ul, 33712729ul, 68460391ul, 139022417ul, 282312799ul, 0}; void KHTable_Init(KHTable *table, const KHTableProcs *procs, void *ctx, size_t estSize) { // Traverse a list of primes until we find one suitable uint32_t *p; for (p = primes; *p; p++) { if (*p > estSize) { table->numBuckets = *p; break; } } if (*p == 0) { p--; table->numBuckets = *p; } table->buckets = calloc(sizeof(*table->buckets), table->numBuckets); table->numItems = 0; table->procs = *procs; table->alloc = ctx; } void KHTable_Free(KHTable *table) { free(table->buckets); } void KHTable_Clear(KHTable *table) { memset(table->buckets, 0, sizeof(*table->buckets) * table->numBuckets); table->numItems = 0; } static int KHTable_Rehash(KHTable *table) { // Find new capacity size_t newCapacity = 0; for (uint32_t *p = primes; *p; p++) { if (*p > table->numItems) { newCapacity = *p; break; } } if (!newCapacity) { return 0; } // printf("Rehashing %lu -> %lu\n", table->numBuckets, newCapacity); KHTableEntry **newEntries = calloc(newCapacity, sizeof(*table->buckets)); for (size_t ii = 0; ii < table->numBuckets; ++ii) { KHTableEntry *cur = table->buckets[ii]; while (cur) { uint32_t hash = table->procs.Hash(cur); KHTableEntry **newBucket = newEntries + (hash % newCapacity); KHTableEntry *next = cur->next; if (*newBucket) { cur->next = *newBucket; } else { cur->next = NULL; } *newBucket = cur; cur = next; } } free(table->buckets); table->buckets = newEntries; table->numBuckets = newCapacity; return 1; } static KHTableEntry *KHTable_InsertNewEntry(KHTable *table, uint32_t hash, KHTableEntry **bucketHead) { if (++table->numItems == table->numBuckets) { KHTable_Rehash(table); bucketHead = table->buckets + (hash % table->numBuckets); } KHTableEntry *entry = table->procs.Alloc(table->alloc); if (*bucketHead) { entry->next = *bucketHead; } else { entry->next = NULL; } *bucketHead = entry; return entry; } /** * Return an entry for the given key, creating one if it does not already exist. */ KHTableEntry *KHTable_GetEntry(KHTable *table, const void *s, size_t n, uint32_t hash, int *isNew) { // Find the bucket uint32_t ix = hash % table->numBuckets; KHTableEntry **bucket = table->buckets + ix; if (*bucket == NULL) { if (!isNew) { return NULL; } *isNew = 1; // Most likely case - no need for rehashing if (++table->numItems != table->numBuckets) { *bucket = table->procs.Alloc(table->alloc); (*bucket)->next = NULL; return *bucket; } else { KHTable_Rehash(table); KHTableEntry *ret = KHTable_InsertNewEntry(table, hash, table->buckets + (hash % table->numBuckets)); // Decrement the count again table->numItems--; return ret; } } for (KHTableEntry *cur = *bucket; cur; cur = cur->next) { if (table->procs.Compare(cur, s, n, hash) == 0) { return cur; } } if (!isNew) { return NULL; } *isNew = 1; return KHTable_InsertNewEntry(table, hash, bucket); } void KHTableIter_Init(KHTable *ht, KHTableIterator *iter) { iter->ht = ht; iter->curBucket = 0; iter->cur = ht->buckets[iter->curBucket]; } KHTableEntry *KHtableIter_Next(KHTableIterator *iter) { KHTableEntry *ret = iter->cur; if (!iter->cur) { for (++iter->curBucket; iter->curBucket < iter->ht->numBuckets; ++iter->curBucket) { iter->cur = iter->ht->buckets[iter->curBucket]; if (iter->cur) { ret = iter->cur; break; } } } if (iter->cur) { iter->cur = iter->cur->next; } return ret; } void KHTable_FreeEx(KHTable *table, void *arg, void (*Free)(KHTableEntry *e, void *ctx, void *arg)) { KHTableIterator iter; KHTableIter_Init(table, &iter); KHTableEntry *ent; while ((ent = KHtableIter_Next(&iter))) { Free(ent, table->alloc, arg); } KHTable_Free(table); } static void khTable_Dump(const KHTable *table, FILE *fp) { printf("Table=%p\n", table); printf("NumEntries: %lu\n", table->numItems); printf("NumBuckets: %lu\n", table->numBuckets); for (size_t ii = 0; ii < table->numBuckets; ++ii) { KHTableEntry *baseEnt = table->buckets[ii]; if (!baseEnt) { continue; } printf("Bucket[%lu]\n", ii); for (; baseEnt; baseEnt = baseEnt->next) { printf(" => "); if (table->procs.Print) { table->procs.Print(baseEnt, fp); } else { fprintf(fp, "%p", baseEnt); } } } } RediSearch-1.2.2/src/util/khtable.h000066400000000000000000000110651364126773500170750ustar00rootroot00000000000000#ifndef KHTABLE_H #define KHTABLE_H #include #include #include // KHTable - Minimalistic hash table without deletion support // This uses a block allocator for its entries, so it's quite fast! /** * Entry structure for KHTable. The datastructure stored in the hashtable * should contain this in some form another, e.g. * * struct myStuff { * KHTableEntry base; * const char *key; * size_t keyLen; * int foo; * int bar; * }; * * The entry should contain the key and the key length, or at least have a way * that it may be accessed (See Compare function below) */ typedef struct KHTableEntry { struct KHTableEntry *next; } KHTableEntry; typedef struct { // Compare two entries and see if they match // The `item` is an entry previously returned via `Alloc`. // s and n are the key data and length. h is the hash itself. // This function is used when retrieving items from the table, and also when // inserting new items - to check for duplicates. // // It is assumed that the `item` is part of a larger user structure, and that // you have a way to retrieve the actual key/length from the item. // // Note that the hash is provided for convenience, in the event that the user // structure also maintains the hash (rather than recomputing on demand). In // this case, the hash can also be compared with the existing hash, and if // they don't match, the actual string comparison can be bypassed. // // Should return 0 if the key matches, and nonzero otherwise int (*Compare)(const KHTableEntry *item, const void *s, size_t n, uint32_t h); // Retrieve the hash from the entry. This should extract the key and key length // from the entry and return the hash. Note that you may also cache the hash // value in the entry if you so desire. uint32_t (*Hash)(const KHTableEntry *ent); // Allocate memory for a new entry. This is called via KHTable_GetEntry, and // should allocate enough memory for the entry and the encompassing user // structure. // // The pointer passed is the `ctx` argument to KHTable_Init(). // Note that there is no API to free an individual item. KHTableEntry *(*Alloc)(void *); // Print a textual representation of the entry to the given file. This is // used when printing the hash table. This function can be NULL void (*Print)(const KHTableEntry *ent, FILE *fp); } KHTableProcs; typedef struct KHTable { // Context (`ctx`) - usually an allocator of some sort void *alloc; // Buckets for the table KHTableEntry **buckets; // Number of buckets size_t numBuckets; // Number of items size_t numItems; // Item handling functions KHTableProcs procs; } KHTable; /** * Initialize a new table. Procs contains the routines for the table itself. * ctx is the allocator context passed to Alloc() * estSize is the approximate size of the table. This is used to estimate how * many buckets to initially create, and can help save on the number of rehashes. * * Note that currently there is no API to free individual elements. It is assumed * that the allocator is a block allocator. */ void KHTable_Init(KHTable *table, const KHTableProcs *procs, void *ctx, size_t estSize); /** * Free the storage space used by the buckets array. This does not free your own * entries */ void KHTable_Free(KHTable *table); /** * Resets the table but does not free the entries themselves */ void KHTable_Clear(KHTable *table); /** * Free individual items. This is passed both the `ctx` (as the context from * KHTable_Init()), and the `arg` (for the current call). * * This function also has the effect of calling KHTable_Free() */ void KHTable_FreeEx(KHTable *table, void *arg, void (*Free)(KHTableEntry *entry, void *ctx, void *arg)); /** * Get an entry from the hash table. * s, n are the buffer and length of the key. hash must be provided and is the * hashed value of the key. This should be consistent with whatever procs.Hash() * will give for the key. * * isNew is an in/out parameter. If isNew is not NULL, a new entry will be created * if it does not already exists; and isNew will be set to a nonzero value. * */ KHTableEntry *KHTable_GetEntry(KHTable *table, const void *s, size_t n, uint32_t hash, int *isNew); /** * Dumps a textual representation of the hash table to the given output stream */ void KHTable_Dump(const KHTable *table, FILE *fp); typedef struct { KHTable *ht; size_t curBucket; KHTableEntry *cur; } KHTableIterator; void KHTableIter_Init(KHTable *ht, KHTableIterator *iter); KHTableEntry *KHtableIter_Next(KHTableIterator *iter); #endifRediSearch-1.2.2/src/util/logging.c000066400000000000000000000001771364126773500171060ustar00rootroot00000000000000#include "logging.h" int LOGGING_LEVEL = 0; //L_DEBUG | L_INFO void LOGGING_INIT(int level) { LOGGING_LEVEL = level; } RediSearch-1.2.2/src/util/logging.h000066400000000000000000000014471364126773500171140ustar00rootroot00000000000000#ifndef __MDMA_LOGGING__ #define __MDMA_LOGGING__ #define L_DEBUG 1 #define L_INFO 2 #define L_WARN 4 #define L_ERROR 8 #define L_TRACE 16 extern int LOGGING_LEVEL; //L_DEBUG | L_INFO extern void LOGGING_INIT(int level); #define LG_MSG(...) fprintf(stdout, __VA_ARGS__); #define LG_DEBUG(...) if (LOGGING_LEVEL & L_DEBUG) { LG_MSG("[DEBUG %s:%d@%s] ", __FILE__ , __LINE__, __FUNCTION__); LG_MSG(__VA_ARGS__); LG_MSG("\n"); } #define LG_INFO(...) if (LOGGING_LEVEL & L_INFO) { LG_MSG("[INFO %s:%d] ", __FILE__ , __LINE__); LG_MSG(__VA_ARGS__); } #define LG_WARN(...) if (LOGGING_LEVEL & L_WARN) { LG_MSG("[WARNING %s:%d] ", __FILE__ , __LINE__); LG_MSG(__VA_ARGS__); } #define LG_ERROR(...) if (LOGGING_LEVEL & L_ERROR) { LG_MSG("[ERROR %s:%d] ", __FILE__ , __LINE__); LG_MSG(__VA_ARGS__); } #endif RediSearch-1.2.2/src/util/mempool.c000066400000000000000000000027131364126773500171260ustar00rootroot00000000000000#define _RS_MEMPOOL_C_ #include "mempool.h" #include #include #include typedef struct mempool_t { void **entries; size_t top; size_t cap; size_t max; // max size for pool mempool_alloc_fn alloc; mempool_free_fn free; pthread_mutex_t lock; } mempool_t; mempool_t *mempool_new(size_t cap, mempool_alloc_fn alloc, mempool_free_fn freefn) { return mempool_new_limited(cap, 0, alloc, freefn); } mempool_t *mempool_new_limited(size_t cap, size_t max, mempool_alloc_fn alloc, mempool_free_fn free) { mempool_t *p = malloc(sizeof(mempool_t)); p->entries = calloc(cap, sizeof(void *)); p->alloc = alloc; p->free = free; p->cap = cap; p->max = max; p->top = 0; return p; } void *mempool_get(mempool_t *p) { void *ret = NULL; if (p->top > 0) { ret = p->entries[--p->top]; } else { ret = p->alloc(); } return ret; } inline void mempool_release(mempool_t *p, void *ptr) { if (p->top == p->cap) { // This is a limited pool, and we can't outgrow ourselves now, just free the ptr immediately if (p->max && p->max == p->top) { p->free(ptr); return; } // grow the pool p->cap += p->cap ? MIN(p->cap, 1024) : 1; p->entries = realloc(p->entries, p->cap * sizeof(void *)); } p->entries[p->top++] = ptr; } void mempool_destroy(mempool_t *p) { for (size_t i = 0; i < p->top; i++) { p->free(p->entries[i]); } free(p->entries); } RediSearch-1.2.2/src/util/mempool.h000066400000000000000000000023061364126773500171310ustar00rootroot00000000000000#ifndef __RS_MEMPOOL_H__ #define __RS_MEMPOOL_H__ /* Mempool - an uber simple, thread-unsafe, memory pool */ #include #include /* stateless allocation function for the pool */ typedef void *(*mempool_alloc_fn)(); /* free function for the pool */ typedef void (*mempool_free_fn)(void *); /* mempool - the struct holding the memory pool */ #ifndef _RS_MEMPOOL_C_ typedef struct mempool_t mempool_t; #else struct mempool_t; #endif #define MEMPOOOL_STATIC_ALLOCATOR(name, sz) \ void *name() { \ return malloc(sz); \ } /* Create a new memory pool */ struct mempool_t *mempool_new(size_t cap, mempool_alloc_fn alloc, mempool_free_fn free); struct mempool_t *mempool_new_limited(size_t cap, size_t max_cap, mempool_alloc_fn alloc, mempool_free_fn free); /* Get an entry from the pool, allocating a new instance if unavailable */ void *mempool_get(struct mempool_t *p); /* Release an allocated instance to the pool */ void mempool_release(struct mempool_t *p, void *ptr); /* destroy the pool, releasing all entries in it and destroying its internal array */ void mempool_destroy(struct mempool_t *p); #endifRediSearch-1.2.2/src/util/minmax.h000066400000000000000000000001721364126773500167510ustar00rootroot00000000000000#ifndef MINMAX_H #define MINMAX_H #define Min(a, b) (a) < (b) ? (a) : (b) #define Max(a, b) (a) > (b) ? (a) : (b) #endifRediSearch-1.2.2/src/util/minmax_heap.c000077500000000000000000000141271364126773500177510ustar00rootroot00000000000000#include #include #include #include #include #include "minmax_heap.h" #define is_min(n) ((log2_32(n) & 1) == 0) #define parent(n) (n / 2) #define first_child(n) (n * 2) #define second_child(n) ((n * 2) + 1) #define heap_gt(h, x, y) (h->cmp(h->data[x], h->data[y], h->cmp_ctx) > 0) #define heap_lt(h, x, y) (h->cmp(h->data[x], h->data[y], h->cmp_ctx) < 0) #define heap_max(h, x, y) (heap_gt(h, x, y) ? h->data[x] : h->data[y]) static const int tab32[32] = {0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31}; static inline int log2_32(uint32_t value) { value |= value >> 1; value |= value >> 2; value |= value >> 4; value |= value >> 8; value |= value >> 16; return tab32[(uint32_t)(value * 0x07C4ACDD) >> 27]; } #define swap(h, i, j) \ { \ void* tmp = h->data[i]; \ h->data[i] = h->data[j]; \ h->data[j] = tmp; \ } static void bubbleup_min(heap_t* h, int i) { int pp_idx = parent(parent(i)); if (pp_idx <= 0) return; if (heap_lt(h, i, pp_idx)) { swap(h, i, pp_idx); bubbleup_min(h, pp_idx); } } static void bubbleup_max(heap_t* h, int i) { int pp_idx = parent(parent(i)); if (pp_idx <= 0) return; if (heap_gt(h, i, pp_idx)) { swap(h, i, pp_idx); bubbleup_max(h, pp_idx); } } static void bubbleup(heap_t* h, int i) { int p_idx = parent(i); if (p_idx <= 0) return; if (is_min(i)) { if (heap_gt(h, i, p_idx)) { swap(h, i, p_idx); bubbleup_max(h, p_idx); } else { bubbleup_min(h, i); } } else { if (heap_lt(h, i, p_idx)) { swap(h, i, p_idx); bubbleup_min(h, p_idx); } else { bubbleup_max(h, i); } } } int index_max_child_grandchild(heap_t* h, int i) { int a = first_child(i); int b = second_child(i); int d = second_child(a); int c = first_child(a); int f = second_child(b); int e = first_child(b); int min_idx = -1; if (a <= h->count) min_idx = a; if (b <= h->count && heap_gt(h, b, min_idx)) min_idx = b; if (c <= h->count && heap_gt(h, c, min_idx)) min_idx = c; if (d <= h->count && heap_gt(h, d, min_idx)) min_idx = d; if (e <= h->count && heap_gt(h, e, min_idx)) min_idx = e; if (f <= h->count && heap_gt(h, f, min_idx)) min_idx = f; return min_idx; } int index_min_child_grandchild(heap_t* h, int i) { int a = first_child(i); int b = second_child(i); int c = first_child(a); int d = second_child(a); int e = first_child(b); int f = second_child(b); int min_idx = -1; if (a <= h->count) min_idx = a; if (b <= h->count && heap_lt(h, b, min_idx)) min_idx = b; if (c <= h->count && heap_lt(h, c, min_idx)) min_idx = c; if (d <= h->count && heap_lt(h, d, min_idx)) min_idx = d; if (e <= h->count && heap_lt(h, e, min_idx)) min_idx = e; if (f <= h->count && heap_lt(h, f, min_idx)) min_idx = f; return min_idx; } static void trickledown_max(heap_t* h, int i) { int m = index_max_child_grandchild(h, i); if (m <= -1) return; if (m > second_child(i)) { // m is a grandchild if (heap_gt(h, m, i)) { swap(h, i, m); if (heap_lt(h, m, parent(m))) { swap(h, m, parent(m)); } trickledown_max(h, m); } } else { // m is a child if (heap_gt(h, m, i)) swap(h, i, m); } } static void trickledown_min(heap_t* h, int i) { int m = index_min_child_grandchild(h, i); if (m <= -1) return; if (m > second_child(i)) { // m is a grandchild if (heap_lt(h, m, i)) { swap(h, i, m); if (heap_gt(h, m, parent(m))) { swap(h, m, parent(m)); } trickledown_min(h, m); } } else { // m is a child if (heap_lt(h, m, i)) swap(h, i, m); } } static void trickledown(heap_t* h, int i) { if (is_min(i)) { trickledown_min(h, i); } else { trickledown_max(h, i); } } void mmh_insert(heap_t* h, void* value) { assert(value != NULL); h->count++; // check for realloc if (h->count == h->size) { h->size = h->size * 2; h->data = realloc(h->data, (1 + h->size) * sizeof(void*)); } h->data[h->count] = value; bubbleup(h, h->count); } void* mmh_pop_min(heap_t* h) { if (h->count > 1) { void* d = h->data[1]; h->data[1] = h->data[h->count--]; trickledown(h, 1); return d; } if (h->count == 1) { h->count--; return h->data[1]; } return NULL; } void* mmh_pop_max(heap_t* h) { if (h->count > 2) { int idx = 2; if (heap_lt(h, 2, 3)) idx = 3; void* d = h->data[idx]; h->data[idx] = h->data[h->count--]; trickledown(h, idx); return d; } if (h->count == 2) { h->count--; return h->data[2]; } if (h->count == 1) { h->count--; return h->data[1]; } return NULL; } void* mmh_peek_min(const heap_t* h) { if (h->count > 0) { return h->data[1]; } return NULL; } void* mmh_peek_max(const heap_t* h) { if (h->count > 2) { return heap_max(h, 2, 3); // h->data[2], h->data[3]); } if (h->count == 2) { return h->data[2]; } if (h->count == 1) { return h->data[1]; } return NULL; } // void mmh_dump(heap_t* h) { // printf("count is %d, elements are:\n\t [", h->count); // for (int i = 1; i <= h->count; i++) { // printf(" %d ", h->data[i]); // } // printf("]\n"); // } heap_t* mmh_init(mmh_cmp_func cmp, void* cmp_ctx, mmh_free_func ff) { return mmh_init_with_size(50, cmp, cmp_ctx, ff); } heap_t* mmh_init_with_size(size_t size, mmh_cmp_func cmp, void* cmp_ctx, mmh_free_func ff) { // first array element is wasted since 1st heap element is on position 1 // inside the array i.e. => [0,(1),(2), ... (n)] so minimum viable size is 2 size = size > 2 ? size : 2; heap_t* h = calloc(1, sizeof(heap_t)); // We allocate 1 extra space because we start at index 1 h->data = calloc(size + 1, sizeof(void*)); h->count = 0; h->size = size; h->cmp = cmp; h->cmp_ctx = cmp_ctx; h->free_func = ff; return h; } void mmh_free(heap_t* h) { if (h->free_func) { for (size_t i = 0; i <= h->count; i++) { h->free_func(h->data[i]); } } free(h->data); free(h); } RediSearch-1.2.2/src/util/minmax_heap.h000077500000000000000000000013541364126773500177540ustar00rootroot00000000000000#ifndef MINMAX_HEAP_H_ #define MINMAX_HEAP_H_ #include typedef int (*mmh_cmp_func)(const void*, const void*, const void*); typedef void (*mmh_free_func)(void*); typedef struct heap { size_t count; size_t size; mmh_cmp_func cmp; void* cmp_ctx; void** data; mmh_free_func free_func; } heap_t; heap_t* mmh_init(mmh_cmp_func cmp, void* cmp_ctx, mmh_free_func free_func); heap_t* mmh_init_with_size(size_t size, mmh_cmp_func cmp, void* cmp_ctx, mmh_free_func free_func); void mmh_free(heap_t* h); void mmh_dump(heap_t* h); void mmh_insert(heap_t* h, void* value); void* mmh_pop_min(heap_t* h); void* mmh_pop_max(heap_t* h); void* mmh_peek_min(const heap_t* h); void* mmh_peek_max(const heap_t* h); #endif // MINMAX_HEAP_H_ RediSearch-1.2.2/src/util/misc.c000066400000000000000000000004411364126773500164050ustar00rootroot00000000000000#include "misc.h" #include void GenericAofRewrite_DisabledHandler(RedisModuleIO *aof, RedisModuleString *key, void *value) { RedisModule_Log(RedisModule_GetContextFromIO(aof), "error", "Requested AOF, but this is unsupported for this module"); abort(); } RediSearch-1.2.2/src/util/misc.h000066400000000000000000000003071364126773500164130ustar00rootroot00000000000000#ifndef RS_MISC_H #define RS_MISC_H #include "redismodule.h" /** * This handler crashes */ void GenericAofRewrite_DisabledHandler(RedisModuleIO *aof, RedisModuleString *key, void *value); #endifRediSearch-1.2.2/src/util/quantile.c000066400000000000000000000172521364126773500173040ustar00rootroot00000000000000#include #include #include #include #include #include #include #include "util/block_alloc.h" #include "quantile.h" typedef struct Sample { // Variables are named per the paper double v; // Value represented float g; // Number of ranks float d; // Delta between ranks struct Sample *prev; struct Sample *next; } Sample; struct QuantStream { double *buffer; size_t bufferLength; size_t bufferCap; Sample *firstSample; Sample *lastSample; size_t n; // Total number of values size_t samplesLength; // Number of samples currently in list double *quantiles; size_t numQuantiles; Sample *pool; }; #define QUANT_EPSILON 0.01 static int dblCmp(const void *a, const void *b) { double da = *(const double *)a, db = *(const double *)b; return da < db ? -1 : da > db ? 1 : 0; } static double getMaxValUnknown(double r, double n) { return QUANT_EPSILON * 2.0 * r; } static double getMaxValFromQuantiles(double r, double n, const double *quantiles, size_t numQuantiles) { double m = DBL_MAX; double f; for (size_t ii = 0; ii < numQuantiles; ++ii) { double q = quantiles[ii]; if (q * n <= r) { f = (2 * QUANT_EPSILON * r) / q; } else { f = (2 * QUANT_EPSILON * (n - r)) / (1.0 - q); } if (f < m) { m = f; } } return m; } static inline void verifyCount(const QuantStream *stream) { size_t ii = 0; for (const Sample *cur = stream->firstSample; cur; cur = cur->next) { ++ii; } size_t expSize = stream->samplesLength; if (ii != expSize) { fprintf(stderr, "[->] Expected %lu. Have %lu\n", expSize, ii); abort(); } ii = 0; for (const Sample *cur = stream->lastSample; cur; cur = cur->prev) { ++ii; } if (ii != expSize) { fprintf(stderr, "[<-] Expected %lu. Have %lu\n", expSize, ii); abort(); } } #define INSERT_BEFORE 0 #define INSERT_AFTER 1 static void QS_InsertSampleAt(QuantStream *stream, Sample *pos, Sample *sample) { assert(pos); // printf("Inserting. Num=%lu. First=%p. Last=%p. posPrev=%p. posNext=%p\n", // stream->samplesLength, // stream->firstSample, stream->lastSample, pos->prev, pos->next); sample->next = pos; if (pos->prev) { pos->prev->next = sample; sample->prev = pos->prev; } else { // At head of the list stream->firstSample = sample; } pos->prev = sample; stream->samplesLength++; // verifyCount(stream); } static void QS_AppendSample(QuantStream *stream, Sample *sample) { assert(sample->prev == NULL && sample->next == NULL); if (stream->lastSample == NULL) { assert(stream->samplesLength == 0); stream->lastSample = stream->firstSample = sample; } else { sample->prev = stream->lastSample; stream->lastSample->next = sample; stream->lastSample = sample; assert(stream->samplesLength > 0); } stream->samplesLength++; // verifyCount(stream); } static void QS_RemoveSample(QuantStream *stream, Sample *sample) { if (sample->prev) { sample->prev->next = sample->next; } if (sample->next) { sample->next->prev = sample->prev; } if (sample == stream->lastSample) { stream->lastSample = sample->prev; } if (sample == stream->firstSample) { stream->firstSample = sample->next; } // Insert into pool sample->next = stream->pool; stream->pool = sample; stream->samplesLength--; // verifyCount(stream); } static Sample *QS_NewSample(QuantStream *stream) { if (stream->pool) { Sample *ret = stream->pool; stream->pool = ret->next; memset(ret, 0, sizeof(*ret)); return ret; } else { return calloc(1, sizeof(Sample)); } } static double QS_GetMaxVal(const QuantStream *stream, double r) { if (stream->numQuantiles) { return getMaxValFromQuantiles(r, stream->n, stream->quantiles, stream->numQuantiles); } else { return getMaxValUnknown(r, stream->n); } } // Clear the buffer from pending samples static void QS_Flush(QuantStream *stream) { qsort(stream->buffer, stream->bufferLength, sizeof(*stream->buffer), dblCmp); double r = 0; // Both the buffer and the samples are ordered. We use the first sample, and // insert Sample *pos = stream->firstSample; size_t posNum = 0; for (size_t ii = 0; ii < stream->bufferLength; ++ii) { double curBuf = stream->buffer[ii]; int inserted = 0; Sample *newSample = QS_NewSample(stream); newSample->v = curBuf; newSample->g = 1; while (pos) { if (pos->v > curBuf) { newSample->d = floor(QS_GetMaxVal(stream, r)) - 1; // printf("[Is=%lu, Ip=%lu, R=%lf] Delta: %lf\n", ii, posNum++, r, newSample->d); QS_InsertSampleAt(stream, pos, newSample); inserted = 1; break; } // printf("Sample %f: Pos->G: %lf, Pos->Value: %lf\n", curBuf, pos->g, pos->v); r += pos->g; pos = pos->next; posNum++; } if (!inserted) { assert(pos == NULL); newSample->d = 0; QS_AppendSample(stream, newSample); } stream->n++; } // Clear the buffer stream->bufferLength = 0; // Verification // for (Sample *s = stream->firstSample; s && s->next; s = s->next) { // if (s->v > s->next->v) { // printf("s->v (%lf) > s->next->v (%lf). ABORT\n", s->v, s->next->v); // abort(); // } // } } static void QS_Compress(QuantStream *stream) { if (stream->samplesLength < 2) { return; } // printf("COMPRESS\n"); Sample *cur = stream->lastSample->prev; double r = stream->n - 1 - stream->lastSample->g; size_t ii = 0; while (cur) { Sample *nextCur = cur->prev; Sample *parent = cur->next; double gCur = cur->g; if (cur->g + parent->g + parent->d <= QS_GetMaxVal(stream, r)) { parent->g += gCur; QS_RemoveSample(stream, cur); } r -= gCur; cur = nextCur; ii++; } } void QS_Insert(QuantStream *stream, double val) { assert(stream->bufferLength != stream->bufferCap); stream->buffer[stream->bufferLength] = val; if (++stream->bufferLength == stream->bufferCap) { QS_Flush(stream); QS_Compress(stream); } } double QS_Query(QuantStream *stream, double q) { if (stream->bufferLength) { QS_Flush(stream); } double t = ceil(q * stream->n); t += ceil(QS_GetMaxVal(stream, t) / 2.0); const Sample *prev = stream->firstSample; double r = 0; if (!prev) { return 0; } for (const Sample *cur = prev->next; cur; cur = cur->next) { if (r + cur->g + cur->d > t) { break; } r += cur->g; prev = cur; } return prev->v; } QuantStream *NewQuantileStream(const double *quantiles, size_t numQuantiles, size_t bufferLength) { QuantStream *ret = calloc(1, sizeof(QuantStream)); if ((ret->numQuantiles = numQuantiles)) { ret->quantiles = calloc(numQuantiles, sizeof(*quantiles)); memcpy(ret->quantiles, quantiles, sizeof(*quantiles) * numQuantiles); } ret->bufferCap = bufferLength; ret->buffer = malloc(bufferLength * sizeof(*ret->buffer)); return ret; } void QS_Free(QuantStream *qs) { free(qs->quantiles); free(qs->buffer); // Chain freeing the pools! Sample *cur = qs->firstSample; while (cur) { Sample *next = cur->next; free(cur); cur = next; } cur = qs->pool; while (cur) { Sample *next = cur->next; free(cur); cur = next; } free(qs); } void QS_Dump(const QuantStream *stream, FILE *fp) { size_t ii = 0; for (Sample *cur = stream->firstSample; cur; cur = cur->next, ++ii) { fprintf(fp, "[%lu]: Value: %lf. Width: %lf. Delta: %lf\n", ii, cur->v, cur->g, cur->d); } fprintf(fp, "N=%lu\n", stream->n); fprintf(fp, "NumSamples: %lu\n", stream->samplesLength); } size_t QS_GetCount(const QuantStream *stream) { return stream->n; }RediSearch-1.2.2/src/util/quantile.h000066400000000000000000000006761364126773500173130ustar00rootroot00000000000000#ifndef QUANTILE_H #define QUANTILE_H #include #include typedef struct QuantStream QuantStream; QuantStream *NewQuantileStream(const double *quantiles, size_t numQuantiles, size_t bufferLength); void QS_Insert(QuantStream *qs, double val); double QS_Query(QuantStream *qs, double val); void QS_Free(QuantStream *qs); void QS_Dump(const QuantStream *stream, FILE *fp); size_t QS_GetCount(const QuantStream *stream); #endifRediSearch-1.2.2/src/util/strconv.h000066400000000000000000000026141364126773500171610ustar00rootroot00000000000000#ifndef RS_STRCONV_H_ #define RS_STRCONV_H_ #include #include #include #include #include /* Strconv - common simple string conversion utils */ // Case insensitive string equal #define STR_EQCASE(str, len, other) (len == strlen(other) && !strncasecmp(str, other, len)) // Case sensitive string equal #define STR_EQ(str, len, other) (len == strlen(other) && !strncmp(str, other, len)) /* Parse string into int, returning 1 on success, 0 otherwise */ static int ParseInteger(const char *arg, long long *val) { char *e = NULL; *val = strtoll(arg, &e, 10); errno = 0; if ((errno == ERANGE && (*val == LONG_MAX || *val == LONG_MIN)) || (errno != 0 && *val == 0) || *e != '\0') { *val = -1; return 0; } return 1; } /* Parse string into double, returning 1 on success, 0 otherwise */ static int ParseDouble(const char *arg, double *d) { char *e; *d = strtod(arg, &e); errno = 0; if ((errno == ERANGE && (*d == HUGE_VAL || *d == -HUGE_VAL)) || (errno != 0 && *d == 0) || *e != '\0') { return 0; } return 1; } static int ParseBoolean(const char *arg, int *res) { if (STR_EQCASE(arg, strlen(arg), "true") || STR_EQCASE(arg, strlen(arg), "1")) { *res = 1; return 1; } if (STR_EQCASE(arg, strlen(arg), "false") || STR_EQCASE(arg, strlen(arg), "0")) { *res = 0; return 1; } return 0; } #endifRediSearch-1.2.2/src/value.c000066400000000000000000000506461364126773500156250ustar00rootroot00000000000000#include "value.h" #include "util/mempool.h" #include /////////////////////////////////////////////////////////////// // Variant Values - will be used in documents as well /////////////////////////////////////////////////////////////// typedef struct { mempool_t *values; mempool_t *fieldmaps; } mempoolThreadPool; static void mempoolThreadPoolDtor(void *p) { mempoolThreadPool *tp = p; mempool_destroy(tp->values); mempool_destroy(tp->fieldmaps); free(tp); } pthread_key_t mempoolKey_g; static void *_valueAlloc() { return malloc(sizeof(RSValue)); } static void _valueFree(void *p) { free(p); } /* The byte size of the field map */ static inline size_t RSFieldMap_SizeOf(uint16_t cap) { return sizeof(RSFieldMap) + cap * sizeof(RSField); } void *_fieldMapAlloc() { RSFieldMap *ret = calloc(1, RSFieldMap_SizeOf(8)); ret->cap = 8; return ret; } static void __attribute__((constructor)) initKey() { pthread_key_create(&mempoolKey_g, mempoolThreadPoolDtor); } static inline mempoolThreadPool *getPoolInfo() { mempoolThreadPool *tp = pthread_getspecific(mempoolKey_g); if (tp == NULL) { tp = calloc(1, sizeof(*tp)); tp->values = mempool_new_limited(1000, 0, _valueAlloc, _valueFree); tp->fieldmaps = mempool_new_limited(100, 1000, _fieldMapAlloc, free); pthread_setspecific(mempoolKey_g, tp); } return tp; } RSValue *RS_NewValue(RSValueType t) { RSValue *v = mempool_get(getPoolInfo()->values); v->t = t; v->refcount = 0; v->allocated = 1; return v; } /* Free a value's internal value. It only does anything in the case of a string, and doesn't free * the actual value object */ inline void RSValue_Free(RSValue *v) { if (!v) return; --v->refcount; // RSValue_Print(v); if (v->refcount <= 0) { switch (v->t) { case RSValue_String: // free strings by allocation strategy switch (v->strval.stype) { case RSString_Malloc: free(v->strval.str); break; case RSString_RMAlloc: RedisModule_Free(v->strval.str); break; case RSString_SDS: sdsfree(v->strval.str); break; case RSString_Const: case RSString_Volatile: break; } break; case RSValue_Array: for (uint32_t i = 0; i < v->arrval.len; i++) { RSValue_Free(v->arrval.vals[i]); } if (v->allocated) free(v->arrval.vals); break; case RSValue_Reference: RSValue_Free(v->ref); break; default: // no free break; } if (v->allocated) { mempool_release(getPoolInfo()->values, v); } } } RSValue RS_Value(RSValueType t) { RSValue v = (RSValue){ .t = t, .refcount = 1, .allocated = 0, }; return v; } inline void RSValue_SetNumber(RSValue *v, double n) { v->t = RSValue_Number; v->numval = n; } inline void RSValue_SetString(RSValue *v, char *str, size_t len) { v->t = RSValue_String; v->strval.len = len; v->strval.str = str; v->strval.stype = RSString_Malloc; } inline void RSValue_SetSDS(RSValue *v, sds s) { v->t = RSValue_String; v->strval.len = sdslen(s); v->strval.str = s; v->strval.stype = RSString_SDS; } inline void RSValue_SetConstString(RSValue *v, const char *str, size_t len) { v->t = RSValue_String; v->strval.len = len; v->strval.str = (char *)str; v->strval.stype = RSString_Const; } /* Wrap a string with length into a value object. Doesn't duplicate the string. Use strdup if * the value needs to be detached */ inline RSValue *RS_StringVal(char *str, uint32_t len) { assert(len <= (UINT32_MAX >> 4)); RSValue *v = RS_NewValue(RSValue_String); v->strval.str = str; v->strval.len = len; v->strval.stype = RSString_Malloc; return v; } /* Same as RS_StringVal but with explicit string type */ inline RSValue *RS_StringValT(char *str, uint32_t len, RSStringType t) { RSValue *v = RS_NewValue(RSValue_String); v->strval.str = str; v->strval.len = len; v->strval.stype = t; return v; } inline RSValue *RS_ConstStringVal(char *str, uint32_t len) { return RS_StringValT(str, len, RSString_Const); } /* Wrap a string with length into a value object, assuming the string is a null terminated C * string */ inline RSValue *RS_StringValC(char *str) { return RS_StringVal(str, strlen(str)); } RSValue *RS_StringValFmt(const char *fmt, ...) { char *buf; va_list ap; va_start(ap, fmt); vasprintf(&buf, fmt, ap); va_end(ap); return RS_StringVal(buf, strlen(buf)); } inline RSValue *RS_ConstStringValC(char *str) { return RS_StringValT(str, strlen(str), RSString_Const); } /* Wrap a redis string value */ inline RSValue *RS_RedisStringVal(RedisModuleString *str) { RSValue *v = RS_NewValue(RSValue_RedisString); v->rstrval = str; return v; } /* Convert a value to a string value. If the value is already a string value it gets * shallow-copied (no string buffer gets copied) */ void RSValue_ToString(RSValue *dst, RSValue *v) { switch (v->t) { case RSValue_String: RSValue_MakeReference(dst, v); break; case RSValue_RedisString: { size_t sz; const char *str = RedisModule_StringPtrLen(v->rstrval, &sz); RSValue_SetConstString(dst, str, sz); break; } case RSValue_Number: { char *str; asprintf(&str, "%.12g", v->numval); RSValue_SetString(dst, str, strlen(str)); break; } case RSValue_Reference: return RSValue_ToString(dst, v->ref); case RSValue_Null: default: return RSValue_SetConstString(dst, "", 0); } } RSValue *RSValue_ParseNumber(const char *p, size_t l) { char *e; errno = 0; double d = strtod(p, &e); if ((errno == ERANGE && (d == HUGE_VAL || d == -HUGE_VAL)) || (errno != 0 && d == 0) || *e != '\0') { return NULL; } return RS_NumVal(d); } /* Convert a value to a number, either returning the actual numeric values or by parsing a string into a number. Return 1 if the value is a number or a numeric string and can be converted, or 0 if not. If possible, we put the actual value into teh double pointer */ inline int RSValue_ToNumber(RSValue *v, double *d) { if (RSValue_IsNull(v)) return 0; v = RSValue_Dereference(v); const char *p = NULL; size_t l = 0; switch (v->t) { // for numerics - just set the value and return case RSValue_Number: *d = v->numval; return 1; case RSValue_String: // C strings - take the ptr and len p = v->strval.str; l = v->strval.len; break; case RSValue_RedisString: // Redis strings - take the number and len p = RedisModule_StringPtrLen(v->rstrval, &l); break; case RSValue_Null: case RSValue_Array: default: return 0; } // If we have a string - try to parse it if (p) { char *e; errno = 0; *d = strtod(p, &e); if ((errno == ERANGE && (*d == HUGE_VAL || *d == -HUGE_VAL)) || (errno != 0 && *d == 0) || *e != '\0') { return 0; } return 1; } return 0; } /** * Returns the value as a simple opaque buffer */ inline const void *RSValue_ToBuffer(RSValue *value, size_t *outlen) { value = RSValue_Dereference(value); switch (value->t) { case RSValue_Number: *outlen = sizeof(value->numval); return &value->numval; case RSValue_String: *outlen = value->strval.len; return value->strval.str; case RSValue_RedisString: return RedisModule_StringPtrLen(value->rstrval, outlen); case RSValue_Array: case RSValue_Null: default: *outlen = 0; return ""; } } // Gets the string pointer and length from the value inline const char *RSValue_StringPtrLen(RSValue *value, size_t *lenp) { value = RSValue_Dereference(value); switch (value->t) { case RSValue_String: if (lenp) { *lenp = value->strval.len; } return value->strval.str; case RSValue_RedisString: return RedisModule_StringPtrLen(value->rstrval, lenp); default: return NULL; } } // Combines PtrLen with ToString to convert any RSValue into a string buffer. // Returns NULL if buf is required, but is too small inline const char *RSValue_ConvertStringPtrLen(RSValue *value, size_t *lenp, char *buf, size_t buflen) { value = RSValue_Dereference(value); if (RSValue_IsString(value)) { return RSValue_StringPtrLen(value, lenp); } else if (value->t == RSValue_Number) { size_t n = snprintf(buf, buflen, "%f", value->numval); if (n >= buflen) { *lenp = 0; return ""; } *lenp = n; return buf; } else { // Array, Null, other types *lenp = 0; return ""; } } /* Wrap a number into a value object */ inline RSValue *RS_NumVal(double n) { RSValue *v = RS_NewValue(RSValue_Number); v->numval = n; return v; } /* Wrap an array of RSValue objects into an RSValue array object */ inline RSValue *RS_ArrVal(RSValue **vals, uint32_t len) { RSValue *v = RS_NewValue(RSValue_Array); v->arrval.vals = vals; v->arrval.len = len; for (uint32_t i = 0; i < len; i++) { RSValue_IncrRef(v->arrval.vals[i]); } return v; } RSValue *RS_VStringArray(uint32_t sz, ...) { RSValue **arr = calloc(sz, sizeof(*arr)); va_list ap; va_start(ap, sz); for (uint32_t i = 0; i < sz; i++) { char *p = va_arg(ap, char *); arr[i] = RS_StringValC(p); } va_end(ap); return RS_ArrVal(arr, sz); } /* Wrap an array of NULL terminated C strings into an RSValue array */ RSValue *RS_StringArray(char **strs, uint32_t sz) { RSValue **arr = calloc(sz, sizeof(RSValue *)); for (uint32_t i = 0; i < sz; i++) { arr[i] = RS_StringValC(strs[i]); } return RS_ArrVal(arr, sz); } RSValue *RS_StringArrayT(char **strs, uint32_t sz, RSStringType st) { RSValue **arr = calloc(sz, sizeof(RSValue *)); for (uint32_t i = 0; i < sz; i++) { arr[i] = RS_StringValT(strs[i], strlen(strs[i]), st); } return RS_ArrVal(arr, sz); } RSValue RS_NULL = {.t = RSValue_Null, .refcount = 1, .allocated = 0}; /* Create a new NULL RSValue */ inline RSValue *RS_NullVal() { return &RS_NULL; } RSValue *RS_NewValueFromCmdArg(CmdArg *arg) { switch (arg->type) { case CmdArg_Double: return RS_NumVal(CMDARG_DOUBLE(arg)); case CmdArg_Integer: return RS_NumVal((double)CMDARG_INT(arg)); case CmdArg_String: return RS_ConstStringVal(CMDARG_STRPTR(arg), CMDARG_STRLEN(arg)); case CmdArg_Flag: return RS_NumVal((double)CMDARG_BOOL(arg)); case CmdArg_Array: { RSValue **vals = calloc(CMDARG_ARRLEN(arg), sizeof(*vals)); for (size_t i = 0; i < CMDARG_ARRLEN(arg); ++i) { vals[i] = RS_NewValueFromCmdArg(CMDARG_ARRELEM(arg, i)); } return RS_ArrVal(vals, CMDARG_ARRLEN(arg)); } default: return RS_NullVal(); } } static inline int cmp_strings(const char *s1, const char *s2, size_t l1, size_t l2) { int cmp = strncmp(s1, s2, MIN(l1, l2)); if (l1 == l2) { // if the strings are the same length, just return the result of strcmp return cmp; } else { // if the lengths arent identical // if the strings are identical but the lengths aren't, return the longer string if (cmp == 0) { return l1 > l2 ? 1 : -1; } else { // the strings are lexically different, just return that return cmp; } } } int RSValue_Cmp(RSValue *v1, RSValue *v2) { assert(v1); assert(v2); v1 = RSValue_Dereference(v1); v2 = RSValue_Dereference(v2); if (v1->t == v2->t) { switch (v1->t) { case RSValue_Number: return v1->numval > v2->numval ? 1 : (v1->numval < v2->numval ? -1 : 0); case RSValue_String: return cmp_strings(v1->strval.str, v2->strval.str, v1->strval.len, v2->strval.len); case RSValue_RedisString: { size_t l1, l2; const char *s1 = RedisModule_StringPtrLen(v1->rstrval, &l1); const char *s2 = RedisModule_StringPtrLen(v2->rstrval, &l2); return cmp_strings(s1, s2, l1, l2); } case RSValue_Null: return 0; case RSValue_Array: // can't compare arrays ATM default: return 0; } } // if one of the values is null, the other wins if (v1->t == RSValue_Null) { return -1; } else if (v2->t == RSValue_Null) { return 1; } // cast to strings and compare as strings char buf1[100], buf2[100]; size_t l1, l2; const char *s1 = RSValue_ConvertStringPtrLen(v1, &l1, buf1, sizeof(buf1)); const char *s2 = RSValue_ConvertStringPtrLen(v2, &l2, buf2, sizeof(buf2)); return cmp_strings(s1, s2, l1, l2); } int RSValue_Equal(RSValue *v1, RSValue *v2) { return RSValue_Cmp(v1, v2) == 0; } /* Based on the value type, serialize the value into redis client response */ int RSValue_SendReply(RedisModuleCtx *ctx, RSValue *v) { if (!v) { return RedisModule_ReplyWithNull(ctx); } v = RSValue_Dereference(v); switch (v->t) { case RSValue_String: return RedisModule_ReplyWithStringBuffer(ctx, v->strval.str, v->strval.len); case RSValue_RedisString: return RedisModule_ReplyWithString(ctx, v->rstrval); case RSValue_Number: { char buf[128]; snprintf(buf, sizeof(buf), "%.12g", v->numval); return RedisModule_ReplyWithStringBuffer(ctx, buf, strlen(buf)); } case RSValue_Null: return RedisModule_ReplyWithNull(ctx); case RSValue_Array: RedisModule_ReplyWithArray(ctx, v->arrval.len); for (uint32_t i = 0; i < v->arrval.len; i++) { RSValue_SendReply(ctx, v->arrval.vals[i]); } return REDISMODULE_OK; default: RedisModule_ReplyWithNull(ctx); } return REDISMODULE_OK; } void RSValue_Print(RSValue *v) { if (!v) { printf("nil"); } switch (v->t) { case RSValue_String: printf("\"%.*s\"", v->strval.len, v->strval.str); break; case RSValue_RedisString: printf("\"%s\"", RedisModule_StringPtrLen(v->rstrval, NULL)); break; case RSValue_Number: printf("%.12g", v->numval); break; case RSValue_Null: printf("NULL"); break; case RSValue_Array: printf("["); for (uint32_t i = 0; i < v->arrval.len; i++) { RSValue_Print(v->arrval.vals[i]); printf(", "); } printf("]"); break; case RSValue_Reference: RSValue_Print(v->ref); break; } } RSMultiKey *RS_NewMultiKey(uint16_t len) { RSMultiKey *ret = calloc(1, sizeof(RSMultiKey) + len * sizeof(RSKey)); ret->len = len; ret->keysAllocated = 0; return ret; } RSMultiKey *RS_NewMultiKeyVariadic(int len, ...) { RSMultiKey *ret = calloc(1, sizeof(RSMultiKey) + len * sizeof(RSKey)); ret->len = len; ret->keysAllocated = 0; va_list ap; va_start(ap, len); for (int i = 0; i < len; i++) { const char *arg = va_arg(ap, const char *); ret->keys[i] = RS_KEY(RSKEY(arg)); } va_end(ap); return ret; } /* Create a multi-key from a string array */ RSMultiKey *RS_NewMultiKeyFromArgs(CmdArray *arr, int allowCaching, int duplicateStrings) { RSMultiKey *ret = RS_NewMultiKey(arr->len); ret->keysAllocated = duplicateStrings; for (size_t i = 0; i < arr->len; i++) { assert(CMDARRAY_ELEMENT(arr, i)->type == CmdArg_String); ret->keys[i] = RS_KEY(RSKEY(CMDARG_STRPTR(CMDARRAY_ELEMENT(arr, i)))); if (duplicateStrings) { ret->keys[i].key = strdup(ret->keys[i].key); } } return ret; } RSMultiKey *RSMultiKey_Copy(RSMultiKey *k, int copyKeys) { RSMultiKey *ret = RS_NewMultiKey(k->len); ret->keysAllocated = copyKeys; for (size_t i = 0; i < k->len; i++) { ret->keys[i] = RS_KEY(copyKeys ? strdup(k->keys[i].key) : k->keys[i].key); } return ret; } void RSMultiKey_Free(RSMultiKey *k) { if (k->keysAllocated) { for (size_t i = 0; i < k->len; i++) { free((char *)k->keys[i].key); } } free(k); } /* Create new KV field */ inline RSField RS_NewField(const char *k, RSValue *val) { RSField ret; ret.key = (RSKEY(k)); ret.val = RSValue_IncrRef(val); return ret; } /* Create a new field map with a given initial capacity */ RSFieldMap *RS_NewFieldMap(uint16_t cap) { if (!cap) cap = 1; RSFieldMap *m = mempool_get(getPoolInfo()->fieldmaps); m->len = 0; return m; } /* Make sure the fieldmap has enough capacity to add elements */ void RSFieldMap_EnsureCap(RSFieldMap **m) { if (!*m) { *m = RS_NewFieldMap(2); return; } if ((*m)->len + 1 >= (*m)->cap) { (*m)->cap = MIN((*m)->cap * 2, UINT16_MAX); *m = realloc(*m, RSFieldMap_SizeOf((*m)->cap)); } } #define FIELDMAP_FIELD(m, i) (m)->fields[i] RSValue *RSFieldMap_GetByKey(RSFieldMap *m, RSKey *k) { if (RSKEY_ISVALIDIDX(k->fieldIdx)) { return RSValue_Dereference(FIELDMAP_FIELD(m, k->fieldIdx).val); } for (uint16_t i = 0; i < m->len; i++) { if (!strcmp(FIELDMAP_FIELD(m, i).key, (k->key))) { if (k->fieldIdx != RSKEY_NOCACHE) { k->fieldIdx = i; } return RSValue_Dereference(FIELDMAP_FIELD(m, i).val); } } if (k->fieldIdx != RSKEY_NOCACHE) { k->fieldIdx = RSKEY_NOTFOUND; } return RS_NullVal(); } /* Add a filed to the map WITHOUT checking for duplications */ void RSFieldMap_Add(RSFieldMap **m, const char *key, RSValue *val) { RSFieldMap_EnsureCap(m); // Creating the field will create a reference and increase the ref count on val FIELDMAP_FIELD(*m, (*m)->len++) = RS_NewField(key, val); } /* Set a value in the map for a given key, checking for duplicates and replacing the existing * value if needed, and appending a new one if needed */ void RSFieldMap_Set(RSFieldMap **m, const char *key, RSValue *val) { key = RSKEY(key); if (*m) { for (uint16_t i = 0; i < (*m)->len; i++) { if (!strcmp(FIELDMAP_FIELD(*m, i).key, (key))) { // avoid memory leaks... RSValue_Free(FIELDMAP_FIELD(*m, i).val); // assign the new field FIELDMAP_FIELD(*m, i).val = RSValue_IncrRef(val); return; } } } RSFieldMap_EnsureCap(m); // not found - append a new field FIELDMAP_FIELD(*m, (*m)->len++) = RS_NewField(key, val); } void RSFieldMap_SetNumber(RSFieldMap **m, const char *key, double d) { RSFieldMap_Set(m, key, RS_NumVal(d)); } void RSFieldMap_Reset(RSFieldMap *m) { if (m) { for (size_t i = 0; i < m->len; i++) { RSValue_Free(m->fields[i].val); if (m->isKeyAlloc) { free((void *)m->fields[i].key); } } m->isKeyAlloc = 0; m->len = 0; } } void RSFieldMap_Free(RSFieldMap *m) { if (!m) { return; } RSFieldMap_Reset(m); mempool_release(getPoolInfo()->fieldmaps, m); // free(m); } void RSFieldMap_Print(RSFieldMap *m) { for (uint16_t i = 0; i < m->len; i++) { printf("%s: ", m->fields[i].key); RSValue_Print(m->fields[i].val); printf(", "); } printf("\n"); } /* * - s: will be parsed as a string * - l: Will be parsed as a long integer * - d: Will be parsed as a double * - !: will be skipped * - ?: means evrything after is optional */ int RSValue_ArrayAssign(RSValue **args, int argc, const char *fmt, ...) { va_list ap; va_start(ap, fmt); const char *p = fmt; size_t i = 0; int optional = 0; while (i < argc && *p) { switch (*p) { case 's': { char **ptr = va_arg(ap, char **); if (!RSValue_IsString(args[i])) { goto err; } *ptr = (char *)RSValue_StringPtrLen(args[i], NULL); break; } case 'l': { long long *lp = va_arg(ap, long long *); double d; if (!RSValue_ToNumber(args[i], &d)) { goto err; } *lp = (long long)d; break; } case 'd': { double *dp = va_arg(ap, double *); if (!RSValue_ToNumber(args[i], dp)) { goto err; } break; } case '!': // do nothing... break; case '?': optional = 1; // reduce i because it will be incremented soon i -= 1; break; default: goto err; } ++i; ++p; } // if we have stuff left to read in the format but we haven't gotten to the optional part -fail if (*p && !optional && i < argc) { goto err; } // if we don't have anything left to read from the format but we haven't gotten to the array's // end, fail if (*p == 0 && i < argc) { goto err; } va_end(ap); return 1; err: va_end(ap); return 0; } const char *RSValue_TypeName(RSValueType t) { switch (t) { case RSValue_Array: return "array"; case RSValue_Number: return "number"; case RSValue_String: return "string"; case RSValue_Null: return "(null)"; case RSValue_RedisString: return "redis-string"; case RSValue_Reference: return "reference"; default: return "!!UNKNOWN TYPE!!"; } } RediSearch-1.2.2/src/value.h000066400000000000000000000261071364126773500156250ustar00rootroot00000000000000#ifndef RS_VALUE_H_ #define RS_VALUE_H_ #include #include #include #include #include #include #include #include "redisearch.h" #include "util/fnv.h" #include "rmutil/cmdparse.h" /////////////////////////////////////////////////////////////// // Variant Values - will be used in documents as well /////////////////////////////////////////////////////////////// // Enumeration of possible value types typedef enum { RSValue_Number = 1, RSValue_String = 3, RSValue_Null = 4, RSValue_RedisString = 5, // An array of values, that can be of any type RSValue_Array = 6, // Reference to another value RSValue_Reference = 8, } RSValueType; /* Enumerate sub-types of C strings, basically the free() strategy */ typedef enum { RSString_Const = 0x00, RSString_Malloc = 0x01, RSString_RMAlloc = 0x02, RSString_SDS = 0x03, // Volatile strings are strings that need to be copied when retained RSString_Volatile = 0x04, } RSStringType; #define RSVALUE_STATIC ((RSValue){.allocated = 0}) #pragma pack(4) // Variant value union typedef struct rsvalue { union { // numeric value double numval; // string value struct { char *str; uint32_t len : 29; // sub type for string RSStringType stype : 3; } strval; // array value struct { struct rsvalue **vals; uint32_t len; } arrval; // redis string value struct RedisModuleString *rstrval; // reference to another value struct rsvalue *ref; }; RSValueType t : 8; int refcount : 23; uint8_t allocated : 1; } RSValue; #pragma pack() /* Free a value's internal value. It only does anything in the case of a string, and doesn't free * the actual value object */ void RSValue_Free(RSValue *v); static inline RSValue *RSValue_IncrRef(RSValue *v) { ++v->refcount; return v; } RSValue *RS_NewValue(RSValueType t); static RSValue RS_StaticValue(RSValueType t) { RSValue v = (RSValue){ .t = t, .refcount = 1, .allocated = 0, }; return v; } void RSValue_SetNumber(RSValue *v, double n); void RSValue_SetString(RSValue *v, char *str, size_t len); void RSValue_SetSDS(RSValue *v, sds s); void RSValue_SetConstString(RSValue *v, const char *str, size_t len); static inline void RSValue_MakeReference(RSValue *dst, RSValue *src) { *dst = (RSValue){ .t = RSValue_Reference, .refcount = 1, .allocated = 0, .ref = RSValue_IncrRef(src), }; } /* Return the value itself or its referred value */ static inline RSValue *RSValue_Dereference(RSValue *v) { return v && v->t == RSValue_Reference ? v->ref : v; } /* Wrap a string with length into a value object. Doesn't duplicate the string. Use strdup if * the value needs to be detached */ RSValue *RS_StringVal(char *str, uint32_t len); RSValue *RS_StringValFmt(const char *fmt, ...); /* Same as RS_StringVal but with explicit string type */ RSValue *RS_StringValT(char *str, uint32_t len, RSStringType t); RSValue *RS_ConstStringVal(char *str, uint32_t len); /* Wrap a string with length into a value object, assuming the string is a null terminated C * string */ RSValue *RS_StringValC(char *str); RSValue *RS_ConstStringValC(char *str); /* Wrap a redis string value */ RSValue *RS_RedisStringVal(RedisModuleString *str); const char *RSValue_TypeName(RSValueType t); // Returns true if the value contains a string static inline int RSValue_IsString(const RSValue *value) { return value && (value->t == RSValue_String || value->t == RSValue_RedisString); } /* Return 1 if the value is NULL, RSValue_Null or a reference to RSValue_Null */ static inline int RSValue_IsNull(const RSValue *value) { if (!value || value->t == RSValue_Null) return 1; if (value->t == RSValue_Reference) return RSValue_IsNull(value->ref); return 0; } /* Make sure a value can be long lived. If the underlying value is a volatile string that might go * away in the next iteration, we copy it at that stage. This doesn't change the ref count. * A volatile string usually comes from a block allocator and is not freed in RSVAlue_Free, so just * discarding the pointer here is "safe" */ static inline RSValue *RSValue_MakePersistent(RSValue *v) { if (v->t == RSValue_String && v->strval.stype == RSString_Volatile) { v->strval.str = strndup(v->strval.str, v->strval.len); v->strval.stype = RSString_Malloc; } else if (v->t == RSValue_Array) { for (size_t i = 0; i < v->arrval.len; i++) { RSValue_MakePersistent(v->arrval.vals[i]); } } return v; } /* Convert a value to a string value. If the value is already a string value it gets * shallow-copied (no string buffer gets copied) */ void RSValue_ToString(RSValue *dst, RSValue *v); /* New value from string, trying to parse it as a number */ RSValue *RSValue_ParseNumber(const char *p, size_t l); /* Convert a value to a number, either returning the actual numeric values or by parsing a string into a number. Return 1 if the value is a number or a numeric string and can be converted, or 0 if not. If possible, we put the actual value into teh double pointer */ int RSValue_ToNumber(RSValue *v, double *d); /* Return a 64 hash value of an RSValue. If this is not an incremental hashing, pass 0 as hval */ /* Return a 64 hash value of an RSValue. If this is not an incremental hashing, pass 0 as hval */ static inline uint64_t RSValue_Hash(RSValue *v, uint64_t hval) { if (!v) return 0; switch (v->t) { case RSValue_Reference: return RSValue_Hash(v->ref, hval); case RSValue_String: return fnv_64a_buf(v->strval.str, v->strval.len, hval); case RSValue_Number: return fnv_64a_buf(&v->numval, sizeof(double), hval); case RSValue_RedisString: { size_t sz; const char *c = RedisModule_StringPtrLen(v->rstrval, &sz); return fnv_64a_buf((void *)c, sz, hval); } case RSValue_Null: return 1337; // TODO: fix... case RSValue_Array: { for (uint32_t i = 0; i < v->arrval.len; i++) { hval = RSValue_Hash(v->arrval.vals[i], hval); } return hval; } } return 0; } // Gets the string pointer and length from the value const char *RSValue_StringPtrLen(RSValue *value, size_t *lenp); // Combines PtrLen with ToString to convert any RSValue into a string buffer. // Returns NULL if buf is required, but is too small const char *RSValue_ConvertStringPtrLen(RSValue *value, size_t *lenp, char *buf, size_t buflen); /* Wrap a number into a value object */ RSValue *RS_NumVal(double n); /* Wrap an array of RSValue objects into an RSValue array object */ RSValue *RS_ArrVal(RSValue **vals, uint32_t len); RSValue *RS_VStringArray(uint32_t sz, ...); /* Wrap an array of NULL terminated C strings into an RSValue array */ RSValue *RS_StringArray(char **strs, uint32_t sz); /* Initialize all strings in the array with a given string type */ RSValue *RS_StringArrayT(char **strs, uint32_t sz, RSStringType st); /* Create a new NULL RSValue */ RSValue *RS_NullVal(); RSValue *RS_NewValueFromCmdArg(CmdArg *arg); /* Compare 2 values for sorting */ int RSValue_Cmp(RSValue *v1, RSValue *v2); /* Return 1 if the two values are equal */ int RSValue_Equal(RSValue *v1, RSValue *v2); /* "truth testing" for a value. for a number - not zero. For a string/array - not empty. null is * considered false */ static inline int RSValue_BoolTest(RSValue *v) { if (RSValue_IsNull(v)) return 0; v = RSValue_Dereference(v); switch (v->t) { case RSValue_Array: return v->arrval.len != 0; case RSValue_Number: return v->numval != 0; case RSValue_String: return v->strval.len != 0; case RSValue_RedisString: { size_t l = 0; const char *p = RedisModule_StringPtrLen(v->rstrval, &l); return l != 0; } default: return 0; } } static inline RSValue *RSValue_ArrayItem(RSValue *arr, uint32_t index) { return arr->arrval.vals[index]; } static inline uint32_t RSValue_ArrayLen(RSValue *arr) { return arr ? arr->arrval.len : 0; } /* Based on the value type, serialize the value into redis client response */ int RSValue_SendReply(RedisModuleCtx *ctx, RSValue *v); void RSValue_Print(RSValue *v); // Convert a property key from '@property_name' format as used in queries to 'property_name' #define RSKEY(s) ((s && *s == '@') ? s + 1 : s) #define RSKEY_NOTFOUND -1 #define RSKEY_NOCACHE -2 #define RSKEY_UNCACHED -3 #define RSKEY_ISVALIDIDX(i) (i >= 0) typedef struct { const char *key; int fieldIdx; int sortableIdx; } RSKey; #define RS_KEY(s) \ ((RSKey){ \ .key = s, .fieldIdx = RSKEY_UNCACHED, .sortableIdx = RSKEY_UNCACHED, \ }) #define RS_KEY_STRDUP(s) RS_KEY(strdup(s)) typedef struct { uint16_t len; int keysAllocated : 1; RSKey keys[]; } RSMultiKey; RSMultiKey *RS_NewMultiKey(uint16_t len); RSMultiKey *RS_NewMultiKeyVariadic(int len, ...); /* Create a multi-key from a string array. * If allowCaching is 1, the keys are set to allow for index caching. * If duplicateStrings is 1, the key strings are copied */ RSMultiKey *RS_NewMultiKeyFromArgs(CmdArray *arr, int allowCaching, int duplicateStrings); RSMultiKey *RSMultiKey_Copy(RSMultiKey *k, int copyKeys); void RSMultiKey_Free(RSMultiKey *k); /* A result field is a key/value pair of variant type, used inside a value map */ typedef struct { const char *key; RSValue *val; } RSField; /* Create new KV field */ RSField RS_NewField(const char *k, RSValue *val); /* A "map" of fields for results and documents. */ typedef struct { uint16_t len; uint16_t cap; uint32_t isKeyAlloc; RSField fields[]; } RSFieldMap; /* Create a new field map with a given initial capacity */ RSFieldMap *RS_NewFieldMap(uint16_t cap); #define FIELDMAP_FIELD(m, i) (m)->fields[i] /* Get an item by index */ static inline RSValue *RSFieldMap_Item(RSFieldMap *m, uint16_t pos) { return RSValue_Dereference(m->fields[pos].val); } /* Find an item by name. */ static inline RSValue *RSFieldMap_Get(RSFieldMap *m, const char *k) { k = RSKEY(k); for (uint16_t i = 0; i < m->len; i++) { if (!strcmp(FIELDMAP_FIELD(m, i).key, k)) { return RSValue_Dereference(FIELDMAP_FIELD(m, i).val); } } return NULL; } RSValue *RSFieldMap_GetByKey(RSFieldMap *m, RSKey *k); /* Add a filed to the map WITHOUT checking for duplications */ void RSFieldMap_Add(RSFieldMap **m, const char *key, RSValue *val); /* Set a value in the map for a given key, checking for duplicates and replacing the existing * value if needed, and appending a new one if needed */ void RSFieldMap_Set(RSFieldMap **m, const char *key, RSValue *val); void RSFieldMap_SetNumber(RSFieldMap **m, const char *key, double d); void RSFieldMap_Reset(RSFieldMap *m); void RSFieldMap_Free(RSFieldMap *m); void RSFieldMap_Print(RSFieldMap *m); /* Read an array of RSVAlues into an array of strings or numbers based on fmt. Return 1 on success. * fmt: * - s: will be parsed as a string * - l: Will be parsed as a long integer * - d: Will be parsed as a double * - !: will be skipped * - ?: means evrything after is optional */ int RSValue_ArrayAssign(RSValue **args, int argc, const char *fmt, ...); #endif RediSearch-1.2.2/src/varint.c000066400000000000000000000053071364126773500160060ustar00rootroot00000000000000#include "varint.h" #include #include #include #include #include #include #include // static int msb = (int)(~0ULL << 25); typedef uint8_t varintBuf[24]; static inline size_t varintEncode(uint32_t value, uint8_t *vbuf) { unsigned pos = sizeof(varintBuf) - 1; vbuf[pos] = value & 127; while (value >>= 7) { vbuf[--pos] = 128 | (--value & 127); } return pos; } static size_t varintEncodeFieldMask(t_fieldMask value, uint8_t *vbuf) { unsigned pos = sizeof(varintBuf) - 1; vbuf[pos] = value & 127; while (value >>= 7) { vbuf[--pos] = 128 | (--value & 127); } return pos; } #define VARINT_BUF(buf, pos) ((buf) + pos) #define VARINT_LEN(pos) (sizeof(varintBuf) - (pos)) size_t WriteVarintRaw(uint32_t value, char *buf) { varintBuf varint; size_t pos = varintEncode(value, varint); memcpy(buf, VARINT_BUF(varint, pos), VARINT_LEN(pos)); return VARINT_LEN(pos); } size_t WriteVarintBuffer(uint32_t value, Buffer *buf) { varintBuf varint; size_t pos = varintEncode(value, varint); size_t n = VARINT_LEN(pos); Buffer_Reserve(buf, n); memcpy(buf->data + buf->offset, VARINT_BUF(varint, pos), n); buf->offset += n; return n; } size_t WriteVarint(uint32_t value, BufferWriter *w) { // printf("writing %d bytes\n", 16 - pos); varintBuf varint; size_t pos = varintEncode(value, varint); size_t nw = VARINT_LEN(pos); if (Buffer_Reserve(w->buf, nw)) { w->pos = w->buf->data + w->buf->offset; } memcpy(w->pos, VARINT_BUF(varint, pos), nw); w->buf->offset += nw; w->pos += nw; return nw; } size_t WriteVarintFieldMask(t_fieldMask value, BufferWriter *w) { // printf("writing %d bytes\n", 16 - pos); varintBuf varint; size_t pos = varintEncodeFieldMask(value, varint); size_t nw = VARINT_LEN(pos); return Buffer_Write(w, VARINT_BUF(varint, pos), nw); } void VVW_Free(VarintVectorWriter *w) { Buffer_Free(&w->buf); free(w); } VarintVectorWriter *NewVarintVectorWriter(size_t cap) { VarintVectorWriter *w = malloc(sizeof(VarintVectorWriter)); VVW_Init(w, cap); return w; } void VVW_Init(VarintVectorWriter *w, size_t cap) { w->lastValue = 0; w->nmemb = 0; Buffer_Init(&w->buf, cap); } /** Write an integer to the vector. @param w a vector writer @param i the integer we want to write @retur 0 if we're out of capacity, the varint's actual size otherwise */ size_t VVW_Write(VarintVectorWriter *w, uint32_t i) { Buffer_Reserve(&w->buf, 16); size_t n = WriteVarintBuffer(i - w->lastValue, &w->buf); if (n != 0) { w->nmemb += 1; w->lastValue = i; } return n; } // Truncate the vector size_t VVW_Truncate(VarintVectorWriter *w) { return Buffer_Truncate(&w->buf, 0); } RediSearch-1.2.2/src/varint.h000066400000000000000000000033531364126773500160120ustar00rootroot00000000000000#ifndef __VARINT_H__ #define __VARINT_H__ #include #include #include #include "buffer.h" #include "redisearch.h" /* Read an encoded integer from the buffer. It is assumed that the buffer will not overflow */ static inline uint32_t ReadVarint(BufferReader *b) { unsigned char c = BUFFER_READ_BYTE(b); uint32_t val = c & 127; while (c >> 7) { ++val; c = BUFFER_READ_BYTE(b); val = (val << 7) | (c & 127); } return val; } static inline t_fieldMask ReadVarintFieldMask(BufferReader *b) { unsigned char c = BUFFER_READ_BYTE(b); t_fieldMask val = c & 127; while (c >> 7) { ++val; c = BUFFER_READ_BYTE(b); val = (val << 7) | (c & 127); } return val; } size_t WriteVarint(uint32_t value, BufferWriter *w); size_t WriteVarintFieldMask(t_fieldMask value, BufferWriter *w); typedef struct { Buffer buf; // how many members we've put in size_t nmemb; uint32_t lastValue; } VarintVectorWriter; #define MAX_VARINT_LEN 5 VarintVectorWriter *NewVarintVectorWriter(size_t cap); size_t VVW_Write(VarintVectorWriter *w, uint32_t i); size_t VVW_Truncate(VarintVectorWriter *w); void VVW_Free(VarintVectorWriter *w); void VVW_Init(VarintVectorWriter *w, size_t cap); static inline void VVW_Cleanup(VarintVectorWriter *w) { Buffer_Free(&w->buf); memset(&w->buf, 0, sizeof w->buf); } static inline void VVW_Reset(VarintVectorWriter *w) { w->lastValue = 0; w->nmemb = 0; w->buf.offset = 0; } #define VVW_GetCount(vvw) ((vvw) ? (vvw)->nmemb : 0) #define VVW_GetByteLength(vvw) ((vvw) ? (vvw)->buf.offset : 0) #define VVW_GetByteData(vvw) ((vvw) ? (vvw)->buf.data : NULL) #define VVW_OFFSETVECTOR_INIT(vvw) \ { .data = VVW_GetByteData(vvw), .len = VVW_GetByteLength(vvw) } #endif RediSearch-1.2.2/src/version.h000066400000000000000000000010771364126773500161750ustar00rootroot00000000000000// This is where the modules build/version is declared. // If declared with -D in compile time, this file is ignored #ifndef REDISEARCH_MODULE_VERSION #define REDISEARCH_VERSION_MAJOR 1 #define REDISEARCH_VERSION_MINOR 2 #define REDISEARCH_VERSION_PATCH 0 #define REDISEARCH_MODULE_VERSION \ (REDISEARCH_VERSION_MAJOR * 10000 + REDISEARCH_VERSION_MINOR * 100 + REDISEARCH_VERSION_PATCH) #ifdef RS_GIT_VERSION static inline const char* RS_GetExtraVersion() { return RS_GIT_VERSION; } #else static inline const char* RS_GetExtraVersion() { return ""; } #endif #endif RediSearch-1.2.2/srcutil/000077500000000000000000000000001364126773500152305ustar00rootroot00000000000000RediSearch-1.2.2/srcutil/gen_parser_toplevel.py000077500000000000000000000021611364126773500216440ustar00rootroot00000000000000#!/usr/bin/env python import argparse import sys """ This script generates a source file suitable for compilation. Because our parser generator (Lemon) always outputs the same symbols, we need a way to namespace them so that they don't crash. The approach we use will leave the file as-is, but generate an include wrapper, so that the symbols are changed before the actual source file is included, and then compiled with the macro definition instead. This script writes to stdout; the output may be captured and redirected to another file. """ ap = argparse.ArgumentParser() ap.add_argument('-p', '--prefix', help='Prefix for function names', required=True) ap.add_argument('-i', '--include', help='Next-include for actual parser code', default='parser.c.inc') options = ap.parse_args() fp = sys.stdout NAMES = ( 'Parse', 'ParseTrace', 'ParseAlloc', 'ParseFree', 'ParseInit', 'ParseFinalize', 'ParseStackPeack') for name in NAMES: fp.write('#define {name} {prefix}_{name}\n'.format(name=name, prefix=options.prefix)) fp.flush() fp.write('#include "{}"\n'.format(options.include)) fp.flush()RediSearch-1.2.2/srcutil/lemon.c000066400000000000000000005214511364126773500165160ustar00rootroot00000000000000/* ** This file contains all sources (including headers) to the LEMON ** LALR(1) parser generator. The sources have been combined into a ** single file to make it easy to include LEMON in the source tree ** and Makefile of another program. ** ** The author of this program disclaims copyright. */ #include #include #include #include #include #include #define ISSPACE(X) isspace((unsigned char)(X)) #define ISDIGIT(X) isdigit((unsigned char)(X)) #define ISALNUM(X) isalnum((unsigned char)(X)) #define ISALPHA(X) isalpha((unsigned char)(X)) #define ISUPPER(X) isupper((unsigned char)(X)) #define ISLOWER(X) islower((unsigned char)(X)) #ifndef __WIN32__ # if defined(_WIN32) || defined(WIN32) # define __WIN32__ # endif #endif #ifdef __WIN32__ #ifdef __cplusplus extern "C" { #endif extern int access(const char *path, int mode); #ifdef __cplusplus } #endif #else #include #endif /* #define PRIVATE static */ #define PRIVATE #ifdef TEST #define MAXRHS 5 /* Set low to exercise exception code */ #else #define MAXRHS 1000 #endif static int showPrecedenceConflict = 0; static char *msort(char*,char**,int(*)(const char*,const char*)); /* ** Compilers are getting increasingly pedantic about type conversions ** as C evolves ever closer to Ada.... To work around the latest problems ** we have to define the following variant of strlen(). */ #define lemonStrlen(X) ((int)strlen(X)) /* ** Compilers are starting to complain about the use of sprintf() and strcpy(), ** saying they are unsafe. So we define our own versions of those routines too. ** ** There are three routines here: lemon_sprintf(), lemon_vsprintf(), and ** lemon_addtext(). The first two are replacements for sprintf() and vsprintf(). ** The third is a helper routine for vsnprintf() that adds texts to the end of a ** buffer, making sure the buffer is always zero-terminated. ** ** The string formatter is a minimal subset of stdlib sprintf() supporting only ** a few simply conversions: ** ** %d ** %s ** %.*s ** */ static void lemon_addtext( char *zBuf, /* The buffer to which text is added */ int *pnUsed, /* Slots of the buffer used so far */ const char *zIn, /* Text to add */ int nIn, /* Bytes of text to add. -1 to use strlen() */ int iWidth /* Field width. Negative to left justify */ ){ if( nIn<0 ) for(nIn=0; zIn[nIn]; nIn++){} while( iWidth>nIn ){ zBuf[(*pnUsed)++] = ' '; iWidth--; } if( nIn==0 ) return; memcpy(&zBuf[*pnUsed], zIn, nIn); *pnUsed += nIn; while( (-iWidth)>nIn ){ zBuf[(*pnUsed)++] = ' '; iWidth++; } zBuf[*pnUsed] = 0; } static int lemon_vsprintf(char *str, const char *zFormat, va_list ap){ int i, j, k, c; int nUsed = 0; const char *z; char zTemp[50]; str[0] = 0; for(i=j=0; (c = zFormat[i])!=0; i++){ if( c=='%' ){ int iWidth = 0; lemon_addtext(str, &nUsed, &zFormat[j], i-j, 0); c = zFormat[++i]; if( ISDIGIT(c) || (c=='-' && ISDIGIT(zFormat[i+1])) ){ if( c=='-' ) i++; while( ISDIGIT(zFormat[i]) ) iWidth = iWidth*10 + zFormat[i++] - '0'; if( c=='-' ) iWidth = -iWidth; c = zFormat[i]; } if( c=='d' ){ int v = va_arg(ap, int); if( v<0 ){ lemon_addtext(str, &nUsed, "-", 1, iWidth); v = -v; }else if( v==0 ){ lemon_addtext(str, &nUsed, "0", 1, iWidth); } k = 0; while( v>0 ){ k++; zTemp[sizeof(zTemp)-k] = (v%10) + '0'; v /= 10; } lemon_addtext(str, &nUsed, &zTemp[sizeof(zTemp)-k], k, iWidth); }else if( c=='s' ){ z = va_arg(ap, const char*); lemon_addtext(str, &nUsed, z, -1, iWidth); }else if( c=='.' && memcmp(&zFormat[i], ".*s", 3)==0 ){ i += 2; k = va_arg(ap, int); z = va_arg(ap, const char*); lemon_addtext(str, &nUsed, z, k, iWidth); }else if( c=='%' ){ lemon_addtext(str, &nUsed, "%", 1, 0); }else{ fprintf(stderr, "illegal format\n"); exit(1); } j = i+1; } } lemon_addtext(str, &nUsed, &zFormat[j], i-j, 0); return nUsed; } static int lemon_sprintf(char *str, const char *format, ...){ va_list ap; int rc; va_start(ap, format); rc = lemon_vsprintf(str, format, ap); va_end(ap); return rc; } static void lemon_strcpy(char *dest, const char *src){ while( (*(dest++) = *(src++))!=0 ){} } static void lemon_strcat(char *dest, const char *src){ while( *dest ) dest++; lemon_strcpy(dest, src); } /* a few forward declarations... */ struct rule; struct lemon; struct action; static struct action *Action_new(void); static struct action *Action_sort(struct action *); /********** From the file "build.h" ************************************/ void FindRulePrecedences(struct lemon*); void FindFirstSets(struct lemon*); void FindStates(struct lemon*); void FindLinks(struct lemon*); void FindFollowSets(struct lemon*); void FindActions(struct lemon*); /********* From the file "configlist.h" *********************************/ void Configlist_init(void); struct config *Configlist_add(struct rule *, int); struct config *Configlist_addbasis(struct rule *, int); void Configlist_closure(struct lemon *); void Configlist_sort(void); void Configlist_sortbasis(void); struct config *Configlist_return(void); struct config *Configlist_basis(void); void Configlist_eat(struct config *); void Configlist_reset(void); /********* From the file "error.h" ***************************************/ void ErrorMsg(const char *, int,const char *, ...); /****** From the file "option.h" ******************************************/ enum option_type { OPT_FLAG=1, OPT_INT, OPT_DBL, OPT_STR, OPT_FFLAG, OPT_FINT, OPT_FDBL, OPT_FSTR}; struct s_options { enum option_type type; const char *label; char *arg; const char *message; }; int OptInit(char**,struct s_options*,FILE*); int OptNArgs(void); char *OptArg(int); void OptErr(int); void OptPrint(void); /******** From the file "parse.h" *****************************************/ void Parse(struct lemon *lemp); /********* From the file "plink.h" ***************************************/ struct plink *Plink_new(void); void Plink_add(struct plink **, struct config *); void Plink_copy(struct plink **, struct plink *); void Plink_delete(struct plink *); /********** From the file "report.h" *************************************/ void Reprint(struct lemon *); void ReportOutput(struct lemon *); void ReportTable(struct lemon *, int); void ReportHeader(struct lemon *); void CompressTables(struct lemon *); void ResortStates(struct lemon *); /********** From the file "set.h" ****************************************/ void SetSize(int); /* All sets will be of size N */ char *SetNew(void); /* A new set for element 0..N */ void SetFree(char*); /* Deallocate a set */ int SetAdd(char*,int); /* Add element to a set */ int SetUnion(char *,char *); /* A <- A U B, thru element N */ #define SetFind(X,Y) (X[Y]) /* True if Y is in set X */ /********** From the file "struct.h" *************************************/ /* ** Principal data structures for the LEMON parser generator. */ typedef enum {LEMON_FALSE=0, LEMON_TRUE} Boolean; /* Symbols (terminals and nonterminals) of the grammar are stored ** in the following: */ enum symbol_type { TERMINAL, NONTERMINAL, MULTITERMINAL }; enum e_assoc { LEFT, RIGHT, NONE, UNK }; struct symbol { const char *name; /* Name of the symbol */ int index; /* Index number for this symbol */ enum symbol_type type; /* Symbols are all either TERMINALS or NTs */ struct rule *rule; /* Linked list of rules of this (if an NT) */ struct symbol *fallback; /* fallback token in case this token doesn't parse */ int prec; /* Precedence if defined (-1 otherwise) */ enum e_assoc assoc; /* Associativity if precedence is defined */ char *firstset; /* First-set for all rules of this symbol */ Boolean lambda; /* True if NT and can generate an empty string */ int useCnt; /* Number of times used */ char *destructor; /* Code which executes whenever this symbol is ** popped from the stack during error processing */ int destLineno; /* Line number for start of destructor. Set to ** -1 for duplicate destructors. */ char *datatype; /* The data type of information held by this ** object. Only used if type==NONTERMINAL */ int dtnum; /* The data type number. In the parser, the value ** stack is a union. The .yy%d element of this ** union is the correct data type for this object */ int bContent; /* True if this symbol ever carries content - if ** it is ever more than just syntax */ /* The following fields are used by MULTITERMINALs only */ int nsubsym; /* Number of constituent symbols in the MULTI */ struct symbol **subsym; /* Array of constituent symbols */ }; /* Each production rule in the grammar is stored in the following ** structure. */ struct rule { struct symbol *lhs; /* Left-hand side of the rule */ const char *lhsalias; /* Alias for the LHS (NULL if none) */ int lhsStart; /* True if left-hand side is the start symbol */ int ruleline; /* Line number for the rule */ int nrhs; /* Number of RHS symbols */ struct symbol **rhs; /* The RHS symbols */ const char **rhsalias; /* An alias for each RHS symbol (NULL if none) */ int line; /* Line number at which code begins */ const char *code; /* The code executed when this rule is reduced */ const char *codePrefix; /* Setup code before code[] above */ const char *codeSuffix; /* Breakdown code after code[] above */ int noCode; /* True if this rule has no associated C code */ int codeEmitted; /* True if the code has been emitted already */ struct symbol *precsym; /* Precedence symbol for this rule */ int index; /* An index number for this rule */ int iRule; /* Rule number as used in the generated tables */ Boolean canReduce; /* True if this rule is ever reduced */ Boolean doesReduce; /* Reduce actions occur after optimization */ struct rule *nextlhs; /* Next rule with the same LHS */ struct rule *next; /* Next rule in the global list */ }; /* A configuration is a production rule of the grammar together with ** a mark (dot) showing how much of that rule has been processed so far. ** Configurations also contain a follow-set which is a list of terminal ** symbols which are allowed to immediately follow the end of the rule. ** Every configuration is recorded as an instance of the following: */ enum cfgstatus { COMPLETE, INCOMPLETE }; struct config { struct rule *rp; /* The rule upon which the configuration is based */ int dot; /* The parse point */ char *fws; /* Follow-set for this configuration only */ struct plink *fplp; /* Follow-set forward propagation links */ struct plink *bplp; /* Follow-set backwards propagation links */ struct state *stp; /* Pointer to state which contains this */ enum cfgstatus status; /* used during followset and shift computations */ struct config *next; /* Next configuration in the state */ struct config *bp; /* The next basis configuration */ }; enum e_action { SHIFT, ACCEPT, REDUCE, ERROR, SSCONFLICT, /* A shift/shift conflict */ SRCONFLICT, /* Was a reduce, but part of a conflict */ RRCONFLICT, /* Was a reduce, but part of a conflict */ SH_RESOLVED, /* Was a shift. Precedence resolved conflict */ RD_RESOLVED, /* Was reduce. Precedence resolved conflict */ NOT_USED, /* Deleted by compression */ SHIFTREDUCE /* Shift first, then reduce */ }; /* Every shift or reduce operation is stored as one of the following */ struct action { struct symbol *sp; /* The look-ahead symbol */ enum e_action type; union { struct state *stp; /* The new state, if a shift */ struct rule *rp; /* The rule, if a reduce */ } x; struct symbol *spOpt; /* SHIFTREDUCE optimization to this symbol */ struct action *next; /* Next action for this state */ struct action *collide; /* Next action with the same hash */ }; /* Each state of the generated parser's finite state machine ** is encoded as an instance of the following structure. */ struct state { struct config *bp; /* The basis configurations for this state */ struct config *cfp; /* All configurations in this set */ int statenum; /* Sequential number for this state */ struct action *ap; /* List of actions for this state */ int nTknAct, nNtAct; /* Number of actions on terminals and nonterminals */ int iTknOfst, iNtOfst; /* yy_action[] offset for terminals and nonterms */ int iDfltReduce; /* Default action is to REDUCE by this rule */ struct rule *pDfltReduce;/* The default REDUCE rule. */ int autoReduce; /* True if this is an auto-reduce state */ }; #define NO_OFFSET (-2147483647) /* A followset propagation link indicates that the contents of one ** configuration followset should be propagated to another whenever ** the first changes. */ struct plink { struct config *cfp; /* The configuration to which linked */ struct plink *next; /* The next propagate link */ }; /* The state vector for the entire parser generator is recorded as ** follows. (LEMON uses no global variables and makes little use of ** static variables. Fields in the following structure can be thought ** of as begin global variables in the program.) */ struct lemon { struct state **sorted; /* Table of states sorted by state number */ struct rule *rule; /* List of all rules */ struct rule *startRule; /* First rule */ int nstate; /* Number of states */ int nxstate; /* nstate with tail degenerate states removed */ int nrule; /* Number of rules */ int nsymbol; /* Number of terminal and nonterminal symbols */ int nterminal; /* Number of terminal symbols */ int minShiftReduce; /* Minimum shift-reduce action value */ int errAction; /* Error action value */ int accAction; /* Accept action value */ int noAction; /* No-op action value */ int minReduce; /* Minimum reduce action */ int maxAction; /* Maximum action value of any kind */ struct symbol **symbols; /* Sorted array of pointers to symbols */ int errorcnt; /* Number of errors */ struct symbol *errsym; /* The error symbol */ struct symbol *wildcard; /* Token that matches anything */ char *name; /* Name of the generated parser */ char *arg; /* Declaration of the 3th argument to parser */ char *ctx; /* Declaration of 2nd argument to constructor */ char *tokentype; /* Type of terminal symbols in the parser stack */ char *vartype; /* The default type of non-terminal symbols */ char *start; /* Name of the start symbol for the grammar */ char *stacksize; /* Size of the parser stack */ char *include; /* Code to put at the start of the C file */ char *error; /* Code to execute when an error is seen */ char *overflow; /* Code to execute on a stack overflow */ char *failure; /* Code to execute on parser failure */ char *accept; /* Code to execute when the parser excepts */ char *extracode; /* Code appended to the generated file */ char *tokendest; /* Code to execute to destroy token data */ char *vardest; /* Code for the default non-terminal destructor */ char *filename; /* Name of the input file */ char *outname; /* Name of the current output file */ char *tokenprefix; /* A prefix added to token names in the .h file */ int nconflict; /* Number of parsing conflicts */ int nactiontab; /* Number of entries in the yy_action[] table */ int nlookaheadtab; /* Number of entries in yy_lookahead[] */ int tablesize; /* Total table size of all tables in bytes */ int basisflag; /* Print only basis configurations */ int has_fallback; /* True if any %fallback is seen in the grammar */ int nolinenosflag; /* True if #line statements should not be printed */ char *argv0; /* Name of the program */ }; #define MemoryCheck(X) if((X)==0){ \ extern void memory_error(); \ memory_error(); \ } /**************** From the file "table.h" *********************************/ /* ** All code in this file has been automatically generated ** from a specification in the file ** "table.q" ** by the associative array code building program "aagen". ** Do not edit this file! Instead, edit the specification ** file, then rerun aagen. */ /* ** Code for processing tables in the LEMON parser generator. */ /* Routines for handling a strings */ const char *Strsafe(const char *); void Strsafe_init(void); int Strsafe_insert(const char *); const char *Strsafe_find(const char *); /* Routines for handling symbols of the grammar */ struct symbol *Symbol_new(const char *); int Symbolcmpp(const void *, const void *); void Symbol_init(void); int Symbol_insert(struct symbol *, const char *); struct symbol *Symbol_find(const char *); struct symbol *Symbol_Nth(int); int Symbol_count(void); struct symbol **Symbol_arrayof(void); /* Routines to manage the state table */ int Configcmp(const char *, const char *); struct state *State_new(void); void State_init(void); int State_insert(struct state *, struct config *); struct state *State_find(struct config *); struct state **State_arrayof(void); /* Routines used for efficiency in Configlist_add */ void Configtable_init(void); int Configtable_insert(struct config *); struct config *Configtable_find(struct config *); void Configtable_clear(int(*)(struct config *)); /****************** From the file "action.c" *******************************/ /* ** Routines processing parser actions in the LEMON parser generator. */ /* Allocate a new parser action */ static struct action *Action_new(void){ static struct action *freelist = 0; struct action *newaction; if( freelist==0 ){ int i; int amt = 100; freelist = (struct action *)calloc(amt, sizeof(struct action)); if( freelist==0 ){ fprintf(stderr,"Unable to allocate memory for a new parser action."); exit(1); } for(i=0; inext; return newaction; } /* Compare two actions for sorting purposes. Return negative, zero, or ** positive if the first action is less than, equal to, or greater than ** the first */ static int actioncmp( struct action *ap1, struct action *ap2 ){ int rc; rc = ap1->sp->index - ap2->sp->index; if( rc==0 ){ rc = (int)ap1->type - (int)ap2->type; } if( rc==0 && (ap1->type==REDUCE || ap1->type==SHIFTREDUCE) ){ rc = ap1->x.rp->index - ap2->x.rp->index; } if( rc==0 ){ rc = (int) (ap2 - ap1); } return rc; } /* Sort parser actions */ static struct action *Action_sort( struct action *ap ){ ap = (struct action *)msort((char *)ap,(char **)&ap->next, (int(*)(const char*,const char*))actioncmp); return ap; } void Action_add( struct action **app, enum e_action type, struct symbol *sp, char *arg ){ struct action *newaction; newaction = Action_new(); newaction->next = *app; *app = newaction; newaction->type = type; newaction->sp = sp; newaction->spOpt = 0; if( type==SHIFT ){ newaction->x.stp = (struct state *)arg; }else{ newaction->x.rp = (struct rule *)arg; } } /********************** New code to implement the "acttab" module ***********/ /* ** This module implements routines use to construct the yy_action[] table. */ /* ** The state of the yy_action table under construction is an instance of ** the following structure. ** ** The yy_action table maps the pair (state_number, lookahead) into an ** action_number. The table is an array of integers pairs. The state_number ** determines an initial offset into the yy_action array. The lookahead ** value is then added to this initial offset to get an index X into the ** yy_action array. If the aAction[X].lookahead equals the value of the ** of the lookahead input, then the value of the action_number output is ** aAction[X].action. If the lookaheads do not match then the ** default action for the state_number is returned. ** ** All actions associated with a single state_number are first entered ** into aLookahead[] using multiple calls to acttab_action(). Then the ** actions for that single state_number are placed into the aAction[] ** array with a single call to acttab_insert(). The acttab_insert() call ** also resets the aLookahead[] array in preparation for the next ** state number. */ struct lookahead_action { int lookahead; /* Value of the lookahead token */ int action; /* Action to take on the given lookahead */ }; typedef struct acttab acttab; struct acttab { int nAction; /* Number of used slots in aAction[] */ int nActionAlloc; /* Slots allocated for aAction[] */ struct lookahead_action *aAction, /* The yy_action[] table under construction */ *aLookahead; /* A single new transaction set */ int mnLookahead; /* Minimum aLookahead[].lookahead */ int mnAction; /* Action associated with mnLookahead */ int mxLookahead; /* Maximum aLookahead[].lookahead */ int nLookahead; /* Used slots in aLookahead[] */ int nLookaheadAlloc; /* Slots allocated in aLookahead[] */ int nterminal; /* Number of terminal symbols */ int nsymbol; /* total number of symbols */ }; /* Return the number of entries in the yy_action table */ #define acttab_lookahead_size(X) ((X)->nAction) /* The value for the N-th entry in yy_action */ #define acttab_yyaction(X,N) ((X)->aAction[N].action) /* The value for the N-th entry in yy_lookahead */ #define acttab_yylookahead(X,N) ((X)->aAction[N].lookahead) /* Free all memory associated with the given acttab */ void acttab_free(acttab *p){ free( p->aAction ); free( p->aLookahead ); free( p ); } /* Allocate a new acttab structure */ acttab *acttab_alloc(int nsymbol, int nterminal){ acttab *p = (acttab *) calloc( 1, sizeof(*p) ); if( p==0 ){ fprintf(stderr,"Unable to allocate memory for a new acttab."); exit(1); } memset(p, 0, sizeof(*p)); p->nsymbol = nsymbol; p->nterminal = nterminal; return p; } /* Add a new action to the current transaction set. ** ** This routine is called once for each lookahead for a particular ** state. */ void acttab_action(acttab *p, int lookahead, int action){ if( p->nLookahead>=p->nLookaheadAlloc ){ p->nLookaheadAlloc += 25; p->aLookahead = (struct lookahead_action *) realloc( p->aLookahead, sizeof(p->aLookahead[0])*p->nLookaheadAlloc ); if( p->aLookahead==0 ){ fprintf(stderr,"malloc failed\n"); exit(1); } } if( p->nLookahead==0 ){ p->mxLookahead = lookahead; p->mnLookahead = lookahead; p->mnAction = action; }else{ if( p->mxLookaheadmxLookahead = lookahead; if( p->mnLookahead>lookahead ){ p->mnLookahead = lookahead; p->mnAction = action; } } p->aLookahead[p->nLookahead].lookahead = lookahead; p->aLookahead[p->nLookahead].action = action; p->nLookahead++; } /* ** Add the transaction set built up with prior calls to acttab_action() ** into the current action table. Then reset the transaction set back ** to an empty set in preparation for a new round of acttab_action() calls. ** ** Return the offset into the action table of the new transaction. ** ** If the makeItSafe parameter is true, then the offset is chosen so that ** it is impossible to overread the yy_lookaside[] table regardless of ** the lookaside token. This is done for the terminal symbols, as they ** come from external inputs and can contain syntax errors. When makeItSafe ** is false, there is more flexibility in selecting offsets, resulting in ** a smaller table. For non-terminal symbols, which are never syntax errors, ** makeItSafe can be false. */ int acttab_insert(acttab *p, int makeItSafe){ int i, j, k, n, end; assert( p->nLookahead>0 ); /* Make sure we have enough space to hold the expanded action table ** in the worst case. The worst case occurs if the transaction set ** must be appended to the current action table */ n = p->nsymbol + 1; if( p->nAction + n >= p->nActionAlloc ){ int oldAlloc = p->nActionAlloc; p->nActionAlloc = p->nAction + n + p->nActionAlloc + 20; p->aAction = (struct lookahead_action *) realloc( p->aAction, sizeof(p->aAction[0])*p->nActionAlloc); if( p->aAction==0 ){ fprintf(stderr,"malloc failed\n"); exit(1); } for(i=oldAlloc; inActionAlloc; i++){ p->aAction[i].lookahead = -1; p->aAction[i].action = -1; } } /* Scan the existing action table looking for an offset that is a ** duplicate of the current transaction set. Fall out of the loop ** if and when the duplicate is found. ** ** i is the index in p->aAction[] where p->mnLookahead is inserted. */ end = makeItSafe ? p->mnLookahead : 0; for(i=p->nAction-1; i>=end; i--){ if( p->aAction[i].lookahead==p->mnLookahead ){ /* All lookaheads and actions in the aLookahead[] transaction ** must match against the candidate aAction[i] entry. */ if( p->aAction[i].action!=p->mnAction ) continue; for(j=0; jnLookahead; j++){ k = p->aLookahead[j].lookahead - p->mnLookahead + i; if( k<0 || k>=p->nAction ) break; if( p->aLookahead[j].lookahead!=p->aAction[k].lookahead ) break; if( p->aLookahead[j].action!=p->aAction[k].action ) break; } if( jnLookahead ) continue; /* No possible lookahead value that is not in the aLookahead[] ** transaction is allowed to match aAction[i] */ n = 0; for(j=0; jnAction; j++){ if( p->aAction[j].lookahead<0 ) continue; if( p->aAction[j].lookahead==j+p->mnLookahead-i ) n++; } if( n==p->nLookahead ){ break; /* An exact match is found at offset i */ } } } /* If no existing offsets exactly match the current transaction, find an ** an empty offset in the aAction[] table in which we can add the ** aLookahead[] transaction. */ if( inAction, which means the ** transaction will be appended. */ i = makeItSafe ? p->mnLookahead : 0; for(; inActionAlloc - p->mxLookahead; i++){ if( p->aAction[i].lookahead<0 ){ for(j=0; jnLookahead; j++){ k = p->aLookahead[j].lookahead - p->mnLookahead + i; if( k<0 ) break; if( p->aAction[k].lookahead>=0 ) break; } if( jnLookahead ) continue; for(j=0; jnAction; j++){ if( p->aAction[j].lookahead==j+p->mnLookahead-i ) break; } if( j==p->nAction ){ break; /* Fits in empty slots */ } } } } /* Insert transaction set at index i. */ #if 0 printf("Acttab:"); for(j=0; jnLookahead; j++){ printf(" %d", p->aLookahead[j].lookahead); } printf(" inserted at %d\n", i); #endif for(j=0; jnLookahead; j++){ k = p->aLookahead[j].lookahead - p->mnLookahead + i; p->aAction[k] = p->aLookahead[j]; if( k>=p->nAction ) p->nAction = k+1; } if( makeItSafe && i+p->nterminal>=p->nAction ) p->nAction = i+p->nterminal+1; p->nLookahead = 0; /* Return the offset that is added to the lookahead in order to get the ** index into yy_action of the action */ return i - p->mnLookahead; } /* ** Return the size of the action table without the trailing syntax error ** entries. */ int acttab_action_size(acttab *p){ int n = p->nAction; while( n>0 && p->aAction[n-1].lookahead<0 ){ n--; } return n; } /********************** From the file "build.c" *****************************/ /* ** Routines to construction the finite state machine for the LEMON ** parser generator. */ /* Find a precedence symbol of every rule in the grammar. ** ** Those rules which have a precedence symbol coded in the input ** grammar using the "[symbol]" construct will already have the ** rp->precsym field filled. Other rules take as their precedence ** symbol the first RHS symbol with a defined precedence. If there ** are not RHS symbols with a defined precedence, the precedence ** symbol field is left blank. */ void FindRulePrecedences(struct lemon *xp) { struct rule *rp; for(rp=xp->rule; rp; rp=rp->next){ if( rp->precsym==0 ){ int i, j; for(i=0; inrhs && rp->precsym==0; i++){ struct symbol *sp = rp->rhs[i]; if( sp->type==MULTITERMINAL ){ for(j=0; jnsubsym; j++){ if( sp->subsym[j]->prec>=0 ){ rp->precsym = sp->subsym[j]; break; } } }else if( sp->prec>=0 ){ rp->precsym = rp->rhs[i]; } } } } return; } /* Find all nonterminals which will generate the empty string. ** Then go back and compute the first sets of every nonterminal. ** The first set is the set of all terminal symbols which can begin ** a string generated by that nonterminal. */ void FindFirstSets(struct lemon *lemp) { int i, j; struct rule *rp; int progress; for(i=0; insymbol; i++){ lemp->symbols[i]->lambda = LEMON_FALSE; } for(i=lemp->nterminal; insymbol; i++){ lemp->symbols[i]->firstset = SetNew(); } /* First compute all lambdas */ do{ progress = 0; for(rp=lemp->rule; rp; rp=rp->next){ if( rp->lhs->lambda ) continue; for(i=0; inrhs; i++){ struct symbol *sp = rp->rhs[i]; assert( sp->type==NONTERMINAL || sp->lambda==LEMON_FALSE ); if( sp->lambda==LEMON_FALSE ) break; } if( i==rp->nrhs ){ rp->lhs->lambda = LEMON_TRUE; progress = 1; } } }while( progress ); /* Now compute all first sets */ do{ struct symbol *s1, *s2; progress = 0; for(rp=lemp->rule; rp; rp=rp->next){ s1 = rp->lhs; for(i=0; inrhs; i++){ s2 = rp->rhs[i]; if( s2->type==TERMINAL ){ progress += SetAdd(s1->firstset,s2->index); break; }else if( s2->type==MULTITERMINAL ){ for(j=0; jnsubsym; j++){ progress += SetAdd(s1->firstset,s2->subsym[j]->index); } break; }else if( s1==s2 ){ if( s1->lambda==LEMON_FALSE ) break; }else{ progress += SetUnion(s1->firstset,s2->firstset); if( s2->lambda==LEMON_FALSE ) break; } } } }while( progress ); return; } /* Compute all LR(0) states for the grammar. Links ** are added to between some states so that the LR(1) follow sets ** can be computed later. */ PRIVATE struct state *getstate(struct lemon *); /* forward reference */ void FindStates(struct lemon *lemp) { struct symbol *sp; struct rule *rp; Configlist_init(); /* Find the start symbol */ if( lemp->start ){ sp = Symbol_find(lemp->start); if( sp==0 ){ ErrorMsg(lemp->filename,0, "The specified start symbol \"%s\" is not \ in a nonterminal of the grammar. \"%s\" will be used as the start \ symbol instead.",lemp->start,lemp->startRule->lhs->name); lemp->errorcnt++; sp = lemp->startRule->lhs; } }else{ sp = lemp->startRule->lhs; } /* Make sure the start symbol doesn't occur on the right-hand side of ** any rule. Report an error if it does. (YACC would generate a new ** start symbol in this case.) */ for(rp=lemp->rule; rp; rp=rp->next){ int i; for(i=0; inrhs; i++){ if( rp->rhs[i]==sp ){ /* FIX ME: Deal with multiterminals */ ErrorMsg(lemp->filename,0, "The start symbol \"%s\" occurs on the \ right-hand side of a rule. This will result in a parser which \ does not work properly.",sp->name); lemp->errorcnt++; } } } /* The basis configuration set for the first state ** is all rules which have the start symbol as their ** left-hand side */ for(rp=sp->rule; rp; rp=rp->nextlhs){ struct config *newcfp; rp->lhsStart = 1; newcfp = Configlist_addbasis(rp,0); SetAdd(newcfp->fws,0); } /* Compute the first state. All other states will be ** computed automatically during the computation of the first one. ** The returned pointer to the first state is not used. */ (void)getstate(lemp); return; } /* Return a pointer to a state which is described by the configuration ** list which has been built from calls to Configlist_add. */ PRIVATE void buildshifts(struct lemon *, struct state *); /* Forwd ref */ PRIVATE struct state *getstate(struct lemon *lemp) { struct config *cfp, *bp; struct state *stp; /* Extract the sorted basis of the new state. The basis was constructed ** by prior calls to "Configlist_addbasis()". */ Configlist_sortbasis(); bp = Configlist_basis(); /* Get a state with the same basis */ stp = State_find(bp); if( stp ){ /* A state with the same basis already exists! Copy all the follow-set ** propagation links from the state under construction into the ** preexisting state, then return a pointer to the preexisting state */ struct config *x, *y; for(x=bp, y=stp->bp; x && y; x=x->bp, y=y->bp){ Plink_copy(&y->bplp,x->bplp); Plink_delete(x->fplp); x->fplp = x->bplp = 0; } cfp = Configlist_return(); Configlist_eat(cfp); }else{ /* This really is a new state. Construct all the details */ Configlist_closure(lemp); /* Compute the configuration closure */ Configlist_sort(); /* Sort the configuration closure */ cfp = Configlist_return(); /* Get a pointer to the config list */ stp = State_new(); /* A new state structure */ MemoryCheck(stp); stp->bp = bp; /* Remember the configuration basis */ stp->cfp = cfp; /* Remember the configuration closure */ stp->statenum = lemp->nstate++; /* Every state gets a sequence number */ stp->ap = 0; /* No actions, yet. */ State_insert(stp,stp->bp); /* Add to the state table */ buildshifts(lemp,stp); /* Recursively compute successor states */ } return stp; } /* ** Return true if two symbols are the same. */ int same_symbol(struct symbol *a, struct symbol *b) { int i; if( a==b ) return 1; if( a->type!=MULTITERMINAL ) return 0; if( b->type!=MULTITERMINAL ) return 0; if( a->nsubsym!=b->nsubsym ) return 0; for(i=0; insubsym; i++){ if( a->subsym[i]!=b->subsym[i] ) return 0; } return 1; } /* Construct all successor states to the given state. A "successor" ** state is any state which can be reached by a shift action. */ PRIVATE void buildshifts(struct lemon *lemp, struct state *stp) { struct config *cfp; /* For looping thru the config closure of "stp" */ struct config *bcfp; /* For the inner loop on config closure of "stp" */ struct config *newcfg; /* */ struct symbol *sp; /* Symbol following the dot in configuration "cfp" */ struct symbol *bsp; /* Symbol following the dot in configuration "bcfp" */ struct state *newstp; /* A pointer to a successor state */ /* Each configuration becomes complete after it contibutes to a successor ** state. Initially, all configurations are incomplete */ for(cfp=stp->cfp; cfp; cfp=cfp->next) cfp->status = INCOMPLETE; /* Loop through all configurations of the state "stp" */ for(cfp=stp->cfp; cfp; cfp=cfp->next){ if( cfp->status==COMPLETE ) continue; /* Already used by inner loop */ if( cfp->dot>=cfp->rp->nrhs ) continue; /* Can't shift this config */ Configlist_reset(); /* Reset the new config set */ sp = cfp->rp->rhs[cfp->dot]; /* Symbol after the dot */ /* For every configuration in the state "stp" which has the symbol "sp" ** following its dot, add the same configuration to the basis set under ** construction but with the dot shifted one symbol to the right. */ for(bcfp=cfp; bcfp; bcfp=bcfp->next){ if( bcfp->status==COMPLETE ) continue; /* Already used */ if( bcfp->dot>=bcfp->rp->nrhs ) continue; /* Can't shift this one */ bsp = bcfp->rp->rhs[bcfp->dot]; /* Get symbol after dot */ if( !same_symbol(bsp,sp) ) continue; /* Must be same as for "cfp" */ bcfp->status = COMPLETE; /* Mark this config as used */ newcfg = Configlist_addbasis(bcfp->rp,bcfp->dot+1); Plink_add(&newcfg->bplp,bcfp); } /* Get a pointer to the state described by the basis configuration set ** constructed in the preceding loop */ newstp = getstate(lemp); /* The state "newstp" is reached from the state "stp" by a shift action ** on the symbol "sp" */ if( sp->type==MULTITERMINAL ){ int i; for(i=0; insubsym; i++){ Action_add(&stp->ap,SHIFT,sp->subsym[i],(char*)newstp); } }else{ Action_add(&stp->ap,SHIFT,sp,(char *)newstp); } } } /* ** Construct the propagation links */ void FindLinks(struct lemon *lemp) { int i; struct config *cfp, *other; struct state *stp; struct plink *plp; /* Housekeeping detail: ** Add to every propagate link a pointer back to the state to ** which the link is attached. */ for(i=0; instate; i++){ stp = lemp->sorted[i]; for(cfp=stp->cfp; cfp; cfp=cfp->next){ cfp->stp = stp; } } /* Convert all backlinks into forward links. Only the forward ** links are used in the follow-set computation. */ for(i=0; instate; i++){ stp = lemp->sorted[i]; for(cfp=stp->cfp; cfp; cfp=cfp->next){ for(plp=cfp->bplp; plp; plp=plp->next){ other = plp->cfp; Plink_add(&other->fplp,cfp); } } } } /* Compute all followsets. ** ** A followset is the set of all symbols which can come immediately ** after a configuration. */ void FindFollowSets(struct lemon *lemp) { int i; struct config *cfp; struct plink *plp; int progress; int change; for(i=0; instate; i++){ for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){ cfp->status = INCOMPLETE; } } do{ progress = 0; for(i=0; instate; i++){ for(cfp=lemp->sorted[i]->cfp; cfp; cfp=cfp->next){ if( cfp->status==COMPLETE ) continue; for(plp=cfp->fplp; plp; plp=plp->next){ change = SetUnion(plp->cfp->fws,cfp->fws); if( change ){ plp->cfp->status = INCOMPLETE; progress = 1; } } cfp->status = COMPLETE; } } }while( progress ); } static int resolve_conflict(struct action *,struct action *); /* Compute the reduce actions, and resolve conflicts. */ void FindActions(struct lemon *lemp) { int i,j; struct config *cfp; struct state *stp; struct symbol *sp; struct rule *rp; /* Add all of the reduce actions ** A reduce action is added for each element of the followset of ** a configuration which has its dot at the extreme right. */ for(i=0; instate; i++){ /* Loop over all states */ stp = lemp->sorted[i]; for(cfp=stp->cfp; cfp; cfp=cfp->next){ /* Loop over all configurations */ if( cfp->rp->nrhs==cfp->dot ){ /* Is dot at extreme right? */ for(j=0; jnterminal; j++){ if( SetFind(cfp->fws,j) ){ /* Add a reduce action to the state "stp" which will reduce by the ** rule "cfp->rp" if the lookahead symbol is "lemp->symbols[j]" */ Action_add(&stp->ap,REDUCE,lemp->symbols[j],(char *)cfp->rp); } } } } } /* Add the accepting token */ if( lemp->start ){ sp = Symbol_find(lemp->start); if( sp==0 ) sp = lemp->startRule->lhs; }else{ sp = lemp->startRule->lhs; } /* Add to the first state (which is always the starting state of the ** finite state machine) an action to ACCEPT if the lookahead is the ** start nonterminal. */ Action_add(&lemp->sorted[0]->ap,ACCEPT,sp,0); /* Resolve conflicts */ for(i=0; instate; i++){ struct action *ap, *nap; stp = lemp->sorted[i]; /* assert( stp->ap ); */ stp->ap = Action_sort(stp->ap); for(ap=stp->ap; ap && ap->next; ap=ap->next){ for(nap=ap->next; nap && nap->sp==ap->sp; nap=nap->next){ /* The two actions "ap" and "nap" have the same lookahead. ** Figure out which one should be used */ lemp->nconflict += resolve_conflict(ap,nap); } } } /* Report an error for each rule that can never be reduced. */ for(rp=lemp->rule; rp; rp=rp->next) rp->canReduce = LEMON_FALSE; for(i=0; instate; i++){ struct action *ap; for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){ if( ap->type==REDUCE ) ap->x.rp->canReduce = LEMON_TRUE; } } for(rp=lemp->rule; rp; rp=rp->next){ if( rp->canReduce ) continue; ErrorMsg(lemp->filename,rp->ruleline,"This rule can not be reduced.\n"); lemp->errorcnt++; } } /* Resolve a conflict between the two given actions. If the ** conflict can't be resolved, return non-zero. ** ** NO LONGER TRUE: ** To resolve a conflict, first look to see if either action ** is on an error rule. In that case, take the action which ** is not associated with the error rule. If neither or both ** actions are associated with an error rule, then try to ** use precedence to resolve the conflict. ** ** If either action is a SHIFT, then it must be apx. This ** function won't work if apx->type==REDUCE and apy->type==SHIFT. */ static int resolve_conflict( struct action *apx, struct action *apy ){ struct symbol *spx, *spy; int errcnt = 0; assert( apx->sp==apy->sp ); /* Otherwise there would be no conflict */ if( apx->type==SHIFT && apy->type==SHIFT ){ apy->type = SSCONFLICT; errcnt++; } if( apx->type==SHIFT && apy->type==REDUCE ){ spx = apx->sp; spy = apy->x.rp->precsym; if( spy==0 || spx->prec<0 || spy->prec<0 ){ /* Not enough precedence information. */ apy->type = SRCONFLICT; errcnt++; }else if( spx->prec>spy->prec ){ /* higher precedence wins */ apy->type = RD_RESOLVED; }else if( spx->precprec ){ apx->type = SH_RESOLVED; }else if( spx->prec==spy->prec && spx->assoc==RIGHT ){ /* Use operator */ apy->type = RD_RESOLVED; /* associativity */ }else if( spx->prec==spy->prec && spx->assoc==LEFT ){ /* to break tie */ apx->type = SH_RESOLVED; }else{ assert( spx->prec==spy->prec && spx->assoc==NONE ); apx->type = ERROR; } }else if( apx->type==REDUCE && apy->type==REDUCE ){ spx = apx->x.rp->precsym; spy = apy->x.rp->precsym; if( spx==0 || spy==0 || spx->prec<0 || spy->prec<0 || spx->prec==spy->prec ){ apy->type = RRCONFLICT; errcnt++; }else if( spx->prec>spy->prec ){ apy->type = RD_RESOLVED; }else if( spx->precprec ){ apx->type = RD_RESOLVED; } }else{ assert( apx->type==SH_RESOLVED || apx->type==RD_RESOLVED || apx->type==SSCONFLICT || apx->type==SRCONFLICT || apx->type==RRCONFLICT || apy->type==SH_RESOLVED || apy->type==RD_RESOLVED || apy->type==SSCONFLICT || apy->type==SRCONFLICT || apy->type==RRCONFLICT ); /* The REDUCE/SHIFT case cannot happen because SHIFTs come before ** REDUCEs on the list. If we reach this point it must be because ** the parser conflict had already been resolved. */ } return errcnt; } /********************* From the file "configlist.c" *************************/ /* ** Routines to processing a configuration list and building a state ** in the LEMON parser generator. */ static struct config *freelist = 0; /* List of free configurations */ static struct config *current = 0; /* Top of list of configurations */ static struct config **currentend = 0; /* Last on list of configs */ static struct config *basis = 0; /* Top of list of basis configs */ static struct config **basisend = 0; /* End of list of basis configs */ /* Return a pointer to a new configuration */ PRIVATE struct config *newconfig(void){ struct config *newcfg; if( freelist==0 ){ int i; int amt = 3; freelist = (struct config *)calloc( amt, sizeof(struct config) ); if( freelist==0 ){ fprintf(stderr,"Unable to allocate memory for a new configuration."); exit(1); } for(i=0; inext; return newcfg; } /* The configuration "old" is no longer used */ PRIVATE void deleteconfig(struct config *old) { old->next = freelist; freelist = old; } /* Initialized the configuration list builder */ void Configlist_init(void){ current = 0; currentend = ¤t; basis = 0; basisend = &basis; Configtable_init(); return; } /* Initialized the configuration list builder */ void Configlist_reset(void){ current = 0; currentend = ¤t; basis = 0; basisend = &basis; Configtable_clear(0); return; } /* Add another configuration to the configuration list */ struct config *Configlist_add( struct rule *rp, /* The rule */ int dot /* Index into the RHS of the rule where the dot goes */ ){ struct config *cfp, model; assert( currentend!=0 ); model.rp = rp; model.dot = dot; cfp = Configtable_find(&model); if( cfp==0 ){ cfp = newconfig(); cfp->rp = rp; cfp->dot = dot; cfp->fws = SetNew(); cfp->stp = 0; cfp->fplp = cfp->bplp = 0; cfp->next = 0; cfp->bp = 0; *currentend = cfp; currentend = &cfp->next; Configtable_insert(cfp); } return cfp; } /* Add a basis configuration to the configuration list */ struct config *Configlist_addbasis(struct rule *rp, int dot) { struct config *cfp, model; assert( basisend!=0 ); assert( currentend!=0 ); model.rp = rp; model.dot = dot; cfp = Configtable_find(&model); if( cfp==0 ){ cfp = newconfig(); cfp->rp = rp; cfp->dot = dot; cfp->fws = SetNew(); cfp->stp = 0; cfp->fplp = cfp->bplp = 0; cfp->next = 0; cfp->bp = 0; *currentend = cfp; currentend = &cfp->next; *basisend = cfp; basisend = &cfp->bp; Configtable_insert(cfp); } return cfp; } /* Compute the closure of the configuration list */ void Configlist_closure(struct lemon *lemp) { struct config *cfp, *newcfp; struct rule *rp, *newrp; struct symbol *sp, *xsp; int i, dot; assert( currentend!=0 ); for(cfp=current; cfp; cfp=cfp->next){ rp = cfp->rp; dot = cfp->dot; if( dot>=rp->nrhs ) continue; sp = rp->rhs[dot]; if( sp->type==NONTERMINAL ){ if( sp->rule==0 && sp!=lemp->errsym ){ ErrorMsg(lemp->filename,rp->line,"Nonterminal \"%s\" has no rules.", sp->name); lemp->errorcnt++; } for(newrp=sp->rule; newrp; newrp=newrp->nextlhs){ newcfp = Configlist_add(newrp,0); for(i=dot+1; inrhs; i++){ xsp = rp->rhs[i]; if( xsp->type==TERMINAL ){ SetAdd(newcfp->fws,xsp->index); break; }else if( xsp->type==MULTITERMINAL ){ int k; for(k=0; knsubsym; k++){ SetAdd(newcfp->fws, xsp->subsym[k]->index); } break; }else{ SetUnion(newcfp->fws,xsp->firstset); if( xsp->lambda==LEMON_FALSE ) break; } } if( i==rp->nrhs ) Plink_add(&cfp->fplp,newcfp); } } } return; } /* Sort the configuration list */ void Configlist_sort(void){ current = (struct config*)msort((char*)current,(char**)&(current->next), Configcmp); currentend = 0; return; } /* Sort the basis configuration list */ void Configlist_sortbasis(void){ basis = (struct config*)msort((char*)current,(char**)&(current->bp), Configcmp); basisend = 0; return; } /* Return a pointer to the head of the configuration list and ** reset the list */ struct config *Configlist_return(void){ struct config *old; old = current; current = 0; currentend = 0; return old; } /* Return a pointer to the head of the configuration list and ** reset the list */ struct config *Configlist_basis(void){ struct config *old; old = basis; basis = 0; basisend = 0; return old; } /* Free all elements of the given configuration list */ void Configlist_eat(struct config *cfp) { struct config *nextcfp; for(; cfp; cfp=nextcfp){ nextcfp = cfp->next; assert( cfp->fplp==0 ); assert( cfp->bplp==0 ); if( cfp->fws ) SetFree(cfp->fws); deleteconfig(cfp); } return; } /***************** From the file "error.c" *********************************/ /* ** Code for printing error message. */ void ErrorMsg(const char *filename, int lineno, const char *format, ...){ va_list ap; fprintf(stderr, "%s:%d: ", filename, lineno); va_start(ap, format); vfprintf(stderr,format,ap); va_end(ap); fprintf(stderr, "\n"); } /**************** From the file "main.c" ************************************/ /* ** Main program file for the LEMON parser generator. */ /* Report an out-of-memory condition and abort. This function ** is used mostly by the "MemoryCheck" macro in struct.h */ void memory_error(void){ fprintf(stderr,"Out of memory. Aborting...\n"); exit(1); } static int nDefine = 0; /* Number of -D options on the command line */ static char **azDefine = 0; /* Name of the -D macros */ /* This routine is called with the argument to each -D command-line option. ** Add the macro defined to the azDefine array. */ static void handle_D_option(char *z){ char **paz; nDefine++; azDefine = (char **) realloc(azDefine, sizeof(azDefine[0])*nDefine); if( azDefine==0 ){ fprintf(stderr,"out of memory\n"); exit(1); } paz = &azDefine[nDefine-1]; *paz = (char *) malloc( lemonStrlen(z)+1 ); if( *paz==0 ){ fprintf(stderr,"out of memory\n"); exit(1); } lemon_strcpy(*paz, z); for(z=*paz; *z && *z!='='; z++){} *z = 0; } /* Rember the name of the output directory */ static char *outputDir = NULL; static void handle_d_option(char *z){ outputDir = (char *) malloc( lemonStrlen(z)+1 ); if( outputDir==0 ){ fprintf(stderr,"out of memory\n"); exit(1); } lemon_strcpy(outputDir, z); } static char *user_templatename = NULL; static void handle_T_option(char *z){ user_templatename = (char *) malloc( lemonStrlen(z)+1 ); if( user_templatename==0 ){ memory_error(); } lemon_strcpy(user_templatename, z); } /* Merge together to lists of rules ordered by rule.iRule */ static struct rule *Rule_merge(struct rule *pA, struct rule *pB){ struct rule *pFirst = 0; struct rule **ppPrev = &pFirst; while( pA && pB ){ if( pA->iRuleiRule ){ *ppPrev = pA; ppPrev = &pA->next; pA = pA->next; }else{ *ppPrev = pB; ppPrev = &pB->next; pB = pB->next; } } if( pA ){ *ppPrev = pA; }else{ *ppPrev = pB; } return pFirst; } /* ** Sort a list of rules in order of increasing iRule value */ static struct rule *Rule_sort(struct rule *rp){ int i; struct rule *pNext; struct rule *x[32]; memset(x, 0, sizeof(x)); while( rp ){ pNext = rp->next; rp->next = 0; for(i=0; iindex = i; qsort(lem.symbols,lem.nsymbol,sizeof(struct symbol*), Symbolcmpp); for(i=0; iindex = i; while( lem.symbols[i-1]->type==MULTITERMINAL ){ i--; } assert( strcmp(lem.symbols[i-1]->name,"{default}")==0 ); lem.nsymbol = i - 1; for(i=1; ISUPPER(lem.symbols[i]->name[0]); i++); lem.nterminal = i; /* Assign sequential rule numbers. Start with 0. Put rules that have no ** reduce action C-code associated with them last, so that the switch() ** statement that selects reduction actions will have a smaller jump table. */ for(i=0, rp=lem.rule; rp; rp=rp->next){ rp->iRule = rp->code ? i++ : -1; } for(rp=lem.rule; rp; rp=rp->next){ if( rp->iRule<0 ) rp->iRule = i++; } lem.startRule = lem.rule; lem.rule = Rule_sort(lem.rule); /* Generate a reprint of the grammar, if requested on the command line */ if( rpflag ){ Reprint(&lem); }else{ /* Initialize the size for all follow and first sets */ SetSize(lem.nterminal+1); /* Find the precedence for every production rule (that has one) */ FindRulePrecedences(&lem); /* Compute the lambda-nonterminals and the first-sets for every ** nonterminal */ FindFirstSets(&lem); /* Compute all LR(0) states. Also record follow-set propagation ** links so that the follow-set can be computed later */ lem.nstate = 0; FindStates(&lem); lem.sorted = State_arrayof(); /* Tie up loose ends on the propagation links */ FindLinks(&lem); /* Compute the follow set of every reducible configuration */ FindFollowSets(&lem); /* Compute the action tables */ FindActions(&lem); /* Compress the action tables */ if( compress==0 ) CompressTables(&lem); /* Reorder and renumber the states so that states with fewer choices ** occur at the end. This is an optimization that helps make the ** generated parser tables smaller. */ if( noResort==0 ) ResortStates(&lem); /* Generate a report of the parser generated. (the "y.output" file) */ if( !quiet ) ReportOutput(&lem); /* Generate the source code for the parser */ ReportTable(&lem, mhflag); /* Produce a header file for use by the scanner. (This step is ** omitted if the "-m" option is used because makeheaders will ** generate the file for us.) */ if( !mhflag ) ReportHeader(&lem); } if( statistics ){ printf("Parser statistics:\n"); stats_line("terminal symbols", lem.nterminal); stats_line("non-terminal symbols", lem.nsymbol - lem.nterminal); stats_line("total symbols", lem.nsymbol); stats_line("rules", lem.nrule); stats_line("states", lem.nxstate); stats_line("conflicts", lem.nconflict); stats_line("action table entries", lem.nactiontab); stats_line("lookahead table entries", lem.nlookaheadtab); stats_line("total table size (bytes)", lem.tablesize); } if( lem.nconflict > 0 ){ fprintf(stderr,"%d parsing conflicts.\n",lem.nconflict); } /* return 0 on success, 1 on failure. */ exitcode = ((lem.errorcnt > 0) || (lem.nconflict > 0)) ? 1 : 0; exit(exitcode); return (exitcode); } /******************** From the file "msort.c" *******************************/ /* ** A generic merge-sort program. ** ** USAGE: ** Let "ptr" be a pointer to some structure which is at the head of ** a null-terminated list. Then to sort the list call: ** ** ptr = msort(ptr,&(ptr->next),cmpfnc); ** ** In the above, "cmpfnc" is a pointer to a function which compares ** two instances of the structure and returns an integer, as in ** strcmp. The second argument is a pointer to the pointer to the ** second element of the linked list. This address is used to compute ** the offset to the "next" field within the structure. The offset to ** the "next" field must be constant for all structures in the list. ** ** The function returns a new pointer which is the head of the list ** after sorting. ** ** ALGORITHM: ** Merge-sort. */ /* ** Return a pointer to the next structure in the linked list. */ #define NEXT(A) (*(char**)(((char*)A)+offset)) /* ** Inputs: ** a: A sorted, null-terminated linked list. (May be null). ** b: A sorted, null-terminated linked list. (May be null). ** cmp: A pointer to the comparison function. ** offset: Offset in the structure to the "next" field. ** ** Return Value: ** A pointer to the head of a sorted list containing the elements ** of both a and b. ** ** Side effects: ** The "next" pointers for elements in the lists a and b are ** changed. */ static char *merge( char *a, char *b, int (*cmp)(const char*,const char*), int offset ){ char *ptr, *head; if( a==0 ){ head = b; }else if( b==0 ){ head = a; }else{ if( (*cmp)(a,b)<=0 ){ ptr = a; a = NEXT(a); }else{ ptr = b; b = NEXT(b); } head = ptr; while( a && b ){ if( (*cmp)(a,b)<=0 ){ NEXT(ptr) = a; ptr = a; a = NEXT(a); }else{ NEXT(ptr) = b; ptr = b; b = NEXT(b); } } if( a ) NEXT(ptr) = a; else NEXT(ptr) = b; } return head; } /* ** Inputs: ** list: Pointer to a singly-linked list of structures. ** next: Pointer to pointer to the second element of the list. ** cmp: A comparison function. ** ** Return Value: ** A pointer to the head of a sorted list containing the elements ** orginally in list. ** ** Side effects: ** The "next" pointers for elements in list are changed. */ #define LISTSIZE 30 static char *msort( char *list, char **next, int (*cmp)(const char*,const char*) ){ unsigned long offset; char *ep; char *set[LISTSIZE]; int i; offset = (unsigned long)((char*)next - (char*)list); for(i=0; istate = WAITING_FOR_DECL_KEYWORD; }else if( ISLOWER(x[0]) ){ psp->lhs = Symbol_new(x); psp->nrhs = 0; psp->lhsalias = 0; psp->state = WAITING_FOR_ARROW; }else if( x[0]=='{' ){ if( psp->prevrule==0 ){ ErrorMsg(psp->filename,psp->tokenlineno, "There is no prior rule upon which to attach the code \ fragment which begins on this line."); psp->errorcnt++; }else if( psp->prevrule->code!=0 ){ ErrorMsg(psp->filename,psp->tokenlineno, "Code fragment beginning on this line is not the first \ to follow the previous rule."); psp->errorcnt++; }else{ psp->prevrule->line = psp->tokenlineno; psp->prevrule->code = &x[1]; psp->prevrule->noCode = 0; } }else if( x[0]=='[' ){ psp->state = PRECEDENCE_MARK_1; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Token \"%s\" should be either \"%%\" or a nonterminal name.", x); psp->errorcnt++; } break; case PRECEDENCE_MARK_1: if( !ISUPPER(x[0]) ){ ErrorMsg(psp->filename,psp->tokenlineno, "The precedence symbol must be a terminal."); psp->errorcnt++; }else if( psp->prevrule==0 ){ ErrorMsg(psp->filename,psp->tokenlineno, "There is no prior rule to assign precedence \"[%s]\".",x); psp->errorcnt++; }else if( psp->prevrule->precsym!=0 ){ ErrorMsg(psp->filename,psp->tokenlineno, "Precedence mark on this line is not the first \ to follow the previous rule."); psp->errorcnt++; }else{ psp->prevrule->precsym = Symbol_new(x); } psp->state = PRECEDENCE_MARK_2; break; case PRECEDENCE_MARK_2: if( x[0]!=']' ){ ErrorMsg(psp->filename,psp->tokenlineno, "Missing \"]\" on precedence mark."); psp->errorcnt++; } psp->state = WAITING_FOR_DECL_OR_RULE; break; case WAITING_FOR_ARROW: if( x[0]==':' && x[1]==':' && x[2]=='=' ){ psp->state = IN_RHS; }else if( x[0]=='(' ){ psp->state = LHS_ALIAS_1; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Expected to see a \":\" following the LHS symbol \"%s\".", psp->lhs->name); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case LHS_ALIAS_1: if( ISALPHA(x[0]) ){ psp->lhsalias = x; psp->state = LHS_ALIAS_2; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "\"%s\" is not a valid alias for the LHS \"%s\"\n", x,psp->lhs->name); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case LHS_ALIAS_2: if( x[0]==')' ){ psp->state = LHS_ALIAS_3; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case LHS_ALIAS_3: if( x[0]==':' && x[1]==':' && x[2]=='=' ){ psp->state = IN_RHS; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Missing \"->\" following: \"%s(%s)\".", psp->lhs->name,psp->lhsalias); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case IN_RHS: if( x[0]=='.' ){ struct rule *rp; rp = (struct rule *)calloc( sizeof(struct rule) + sizeof(struct symbol*)*psp->nrhs + sizeof(char*)*psp->nrhs, 1); if( rp==0 ){ ErrorMsg(psp->filename,psp->tokenlineno, "Can't allocate enough memory for this rule."); psp->errorcnt++; psp->prevrule = 0; }else{ int i; rp->ruleline = psp->tokenlineno; rp->rhs = (struct symbol**)&rp[1]; rp->rhsalias = (const char**)&(rp->rhs[psp->nrhs]); for(i=0; inrhs; i++){ rp->rhs[i] = psp->rhs[i]; rp->rhsalias[i] = psp->alias[i]; if( rp->rhsalias[i]!=0 ){ rp->rhs[i]->bContent = 1; } } rp->lhs = psp->lhs; rp->lhsalias = psp->lhsalias; rp->nrhs = psp->nrhs; rp->code = 0; rp->noCode = 1; rp->precsym = 0; rp->index = psp->gp->nrule++; rp->nextlhs = rp->lhs->rule; rp->lhs->rule = rp; rp->next = 0; if( psp->firstrule==0 ){ psp->firstrule = psp->lastrule = rp; }else{ psp->lastrule->next = rp; psp->lastrule = rp; } psp->prevrule = rp; } psp->state = WAITING_FOR_DECL_OR_RULE; }else if( ISALPHA(x[0]) ){ if( psp->nrhs>=MAXRHS ){ ErrorMsg(psp->filename,psp->tokenlineno, "Too many symbols on RHS of rule beginning at \"%s\".", x); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; }else{ psp->rhs[psp->nrhs] = Symbol_new(x); psp->alias[psp->nrhs] = 0; psp->nrhs++; } }else if( (x[0]=='|' || x[0]=='/') && psp->nrhs>0 ){ struct symbol *msp = psp->rhs[psp->nrhs-1]; if( msp->type!=MULTITERMINAL ){ struct symbol *origsp = msp; msp = (struct symbol *) calloc(1,sizeof(*msp)); memset(msp, 0, sizeof(*msp)); msp->type = MULTITERMINAL; msp->nsubsym = 1; msp->subsym = (struct symbol **) calloc(1,sizeof(struct symbol*)); msp->subsym[0] = origsp; msp->name = origsp->name; psp->rhs[psp->nrhs-1] = msp; } msp->nsubsym++; msp->subsym = (struct symbol **) realloc(msp->subsym, sizeof(struct symbol*)*msp->nsubsym); msp->subsym[msp->nsubsym-1] = Symbol_new(&x[1]); if( ISLOWER(x[1]) || ISLOWER(msp->subsym[0]->name[0]) ){ ErrorMsg(psp->filename,psp->tokenlineno, "Cannot form a compound containing a non-terminal"); psp->errorcnt++; } }else if( x[0]=='(' && psp->nrhs>0 ){ psp->state = RHS_ALIAS_1; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Illegal character on RHS of rule: \"%s\".",x); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case RHS_ALIAS_1: if( ISALPHA(x[0]) ){ psp->alias[psp->nrhs-1] = x; psp->state = RHS_ALIAS_2; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "\"%s\" is not a valid alias for the RHS symbol \"%s\"\n", x,psp->rhs[psp->nrhs-1]->name); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case RHS_ALIAS_2: if( x[0]==')' ){ psp->state = IN_RHS; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Missing \")\" following LHS alias name \"%s\".",psp->lhsalias); psp->errorcnt++; psp->state = RESYNC_AFTER_RULE_ERROR; } break; case WAITING_FOR_DECL_KEYWORD: if( ISALPHA(x[0]) ){ psp->declkeyword = x; psp->declargslot = 0; psp->decllinenoslot = 0; psp->insertLineMacro = 1; psp->state = WAITING_FOR_DECL_ARG; if( strcmp(x,"name")==0 ){ psp->declargslot = &(psp->gp->name); psp->insertLineMacro = 0; }else if( strcmp(x,"include")==0 ){ psp->declargslot = &(psp->gp->include); }else if( strcmp(x,"code")==0 ){ psp->declargslot = &(psp->gp->extracode); }else if( strcmp(x,"token_destructor")==0 ){ psp->declargslot = &psp->gp->tokendest; }else if( strcmp(x,"default_destructor")==0 ){ psp->declargslot = &psp->gp->vardest; }else if( strcmp(x,"token_prefix")==0 ){ psp->declargslot = &psp->gp->tokenprefix; psp->insertLineMacro = 0; }else if( strcmp(x,"syntax_error")==0 ){ psp->declargslot = &(psp->gp->error); }else if( strcmp(x,"parse_accept")==0 ){ psp->declargslot = &(psp->gp->accept); }else if( strcmp(x,"parse_failure")==0 ){ psp->declargslot = &(psp->gp->failure); }else if( strcmp(x,"stack_overflow")==0 ){ psp->declargslot = &(psp->gp->overflow); }else if( strcmp(x,"extra_argument")==0 ){ psp->declargslot = &(psp->gp->arg); psp->insertLineMacro = 0; }else if( strcmp(x,"extra_context")==0 ){ psp->declargslot = &(psp->gp->ctx); psp->insertLineMacro = 0; }else if( strcmp(x,"token_type")==0 ){ psp->declargslot = &(psp->gp->tokentype); psp->insertLineMacro = 0; }else if( strcmp(x,"default_type")==0 ){ psp->declargslot = &(psp->gp->vartype); psp->insertLineMacro = 0; }else if( strcmp(x,"stack_size")==0 ){ psp->declargslot = &(psp->gp->stacksize); psp->insertLineMacro = 0; }else if( strcmp(x,"start_symbol")==0 ){ psp->declargslot = &(psp->gp->start); psp->insertLineMacro = 0; }else if( strcmp(x,"left")==0 ){ psp->preccounter++; psp->declassoc = LEFT; psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; }else if( strcmp(x,"right")==0 ){ psp->preccounter++; psp->declassoc = RIGHT; psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; }else if( strcmp(x,"nonassoc")==0 ){ psp->preccounter++; psp->declassoc = NONE; psp->state = WAITING_FOR_PRECEDENCE_SYMBOL; }else if( strcmp(x,"destructor")==0 ){ psp->state = WAITING_FOR_DESTRUCTOR_SYMBOL; }else if( strcmp(x,"type")==0 ){ psp->state = WAITING_FOR_DATATYPE_SYMBOL; }else if( strcmp(x,"fallback")==0 ){ psp->fallback = 0; psp->state = WAITING_FOR_FALLBACK_ID; }else if( strcmp(x,"token")==0 ){ psp->state = WAITING_FOR_TOKEN_NAME; }else if( strcmp(x,"wildcard")==0 ){ psp->state = WAITING_FOR_WILDCARD_ID; }else if( strcmp(x,"token_class")==0 ){ psp->state = WAITING_FOR_CLASS_ID; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Unknown declaration keyword: \"%%%s\".",x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Illegal declaration keyword: \"%s\".",x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } break; case WAITING_FOR_DESTRUCTOR_SYMBOL: if( !ISALPHA(x[0]) ){ ErrorMsg(psp->filename,psp->tokenlineno, "Symbol name missing after %%destructor keyword"); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; }else{ struct symbol *sp = Symbol_new(x); psp->declargslot = &sp->destructor; psp->decllinenoslot = &sp->destLineno; psp->insertLineMacro = 1; psp->state = WAITING_FOR_DECL_ARG; } break; case WAITING_FOR_DATATYPE_SYMBOL: if( !ISALPHA(x[0]) ){ ErrorMsg(psp->filename,psp->tokenlineno, "Symbol name missing after %%type keyword"); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; }else{ struct symbol *sp = Symbol_find(x); if((sp) && (sp->datatype)){ ErrorMsg(psp->filename,psp->tokenlineno, "Symbol %%type \"%s\" already defined", x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; }else{ if (!sp){ sp = Symbol_new(x); } psp->declargslot = &sp->datatype; psp->insertLineMacro = 0; psp->state = WAITING_FOR_DECL_ARG; } } break; case WAITING_FOR_PRECEDENCE_SYMBOL: if( x[0]=='.' ){ psp->state = WAITING_FOR_DECL_OR_RULE; }else if( ISUPPER(x[0]) ){ struct symbol *sp; sp = Symbol_new(x); if( sp->prec>=0 ){ ErrorMsg(psp->filename,psp->tokenlineno, "Symbol \"%s\" has already be given a precedence.",x); psp->errorcnt++; }else{ sp->prec = psp->preccounter; sp->assoc = psp->declassoc; } }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Can't assign a precedence to \"%s\".",x); psp->errorcnt++; } break; case WAITING_FOR_DECL_ARG: if( x[0]=='{' || x[0]=='\"' || ISALNUM(x[0]) ){ const char *zOld, *zNew; char *zBuf, *z; int nOld, n, nLine = 0, nNew, nBack; int addLineMacro; char zLine[50]; zNew = x; if( zNew[0]=='"' || zNew[0]=='{' ) zNew++; nNew = lemonStrlen(zNew); if( *psp->declargslot ){ zOld = *psp->declargslot; }else{ zOld = ""; } nOld = lemonStrlen(zOld); n = nOld + nNew + 20; addLineMacro = !psp->gp->nolinenosflag && psp->insertLineMacro && (psp->decllinenoslot==0 || psp->decllinenoslot[0]!=0); if( addLineMacro ){ for(z=psp->filename, nBack=0; *z; z++){ if( *z=='\\' ) nBack++; } lemon_sprintf(zLine, "#line %d ", psp->tokenlineno); nLine = lemonStrlen(zLine); n += nLine + lemonStrlen(psp->filename) + nBack; } *psp->declargslot = (char *) realloc(*psp->declargslot, n); zBuf = *psp->declargslot + nOld; if( addLineMacro ){ if( nOld && zBuf[-1]!='\n' ){ *(zBuf++) = '\n'; } memcpy(zBuf, zLine, nLine); zBuf += nLine; *(zBuf++) = '"'; for(z=psp->filename; *z; z++){ if( *z=='\\' ){ *(zBuf++) = '\\'; } *(zBuf++) = *z; } *(zBuf++) = '"'; *(zBuf++) = '\n'; } if( psp->decllinenoslot && psp->decllinenoslot[0]==0 ){ psp->decllinenoslot[0] = psp->tokenlineno; } memcpy(zBuf, zNew, nNew); zBuf += nNew; *zBuf = 0; psp->state = WAITING_FOR_DECL_OR_RULE; }else{ ErrorMsg(psp->filename,psp->tokenlineno, "Illegal argument to %%%s: %s",psp->declkeyword,x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } break; case WAITING_FOR_FALLBACK_ID: if( x[0]=='.' ){ psp->state = WAITING_FOR_DECL_OR_RULE; }else if( !ISUPPER(x[0]) ){ ErrorMsg(psp->filename, psp->tokenlineno, "%%fallback argument \"%s\" should be a token", x); psp->errorcnt++; }else{ struct symbol *sp = Symbol_new(x); if( psp->fallback==0 ){ psp->fallback = sp; }else if( sp->fallback ){ ErrorMsg(psp->filename, psp->tokenlineno, "More than one fallback assigned to token %s", x); psp->errorcnt++; }else{ sp->fallback = psp->fallback; psp->gp->has_fallback = 1; } } break; case WAITING_FOR_TOKEN_NAME: /* Tokens do not have to be declared before use. But they can be ** in order to control their assigned integer number. The number for ** each token is assigned when it is first seen. So by including ** ** %token ONE TWO THREE ** ** early in the grammar file, that assigns small consecutive values ** to each of the tokens ONE TWO and THREE. */ if( x[0]=='.' ){ psp->state = WAITING_FOR_DECL_OR_RULE; }else if( !ISUPPER(x[0]) ){ ErrorMsg(psp->filename, psp->tokenlineno, "%%token argument \"%s\" should be a token", x); psp->errorcnt++; }else{ (void)Symbol_new(x); } break; case WAITING_FOR_WILDCARD_ID: if( x[0]=='.' ){ psp->state = WAITING_FOR_DECL_OR_RULE; }else if( !ISUPPER(x[0]) ){ ErrorMsg(psp->filename, psp->tokenlineno, "%%wildcard argument \"%s\" should be a token", x); psp->errorcnt++; }else{ struct symbol *sp = Symbol_new(x); if( psp->gp->wildcard==0 ){ psp->gp->wildcard = sp; }else{ ErrorMsg(psp->filename, psp->tokenlineno, "Extra wildcard to token: %s", x); psp->errorcnt++; } } break; case WAITING_FOR_CLASS_ID: if( !ISLOWER(x[0]) ){ ErrorMsg(psp->filename, psp->tokenlineno, "%%token_class must be followed by an identifier: ", x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; }else if( Symbol_find(x) ){ ErrorMsg(psp->filename, psp->tokenlineno, "Symbol \"%s\" already used", x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; }else{ psp->tkclass = Symbol_new(x); psp->tkclass->type = MULTITERMINAL; psp->state = WAITING_FOR_CLASS_TOKEN; } break; case WAITING_FOR_CLASS_TOKEN: if( x[0]=='.' ){ psp->state = WAITING_FOR_DECL_OR_RULE; }else if( ISUPPER(x[0]) || ((x[0]=='|' || x[0]=='/') && ISUPPER(x[1])) ){ struct symbol *msp = psp->tkclass; msp->nsubsym++; msp->subsym = (struct symbol **) realloc(msp->subsym, sizeof(struct symbol*)*msp->nsubsym); if( !ISUPPER(x[0]) ) x++; msp->subsym[msp->nsubsym-1] = Symbol_new(x); }else{ ErrorMsg(psp->filename, psp->tokenlineno, "%%token_class argument \"%s\" should be a token", x); psp->errorcnt++; psp->state = RESYNC_AFTER_DECL_ERROR; } break; case RESYNC_AFTER_RULE_ERROR: /* if( x[0]=='.' ) psp->state = WAITING_FOR_DECL_OR_RULE; ** break; */ case RESYNC_AFTER_DECL_ERROR: if( x[0]=='.' ) psp->state = WAITING_FOR_DECL_OR_RULE; if( x[0]=='%' ) psp->state = WAITING_FOR_DECL_KEYWORD; break; } } /* Run the preprocessor over the input file text. The global variables ** azDefine[0] through azDefine[nDefine-1] contains the names of all defined ** macros. This routine looks for "%ifdef" and "%ifndef" and "%endif" and ** comments them out. Text in between is also commented out as appropriate. */ static void preprocess_input(char *z){ int i, j, k, n; int exclude = 0; int start = 0; int lineno = 1; int start_lineno = 1; for(i=0; z[i]; i++){ if( z[i]=='\n' ) lineno++; if( z[i]!='%' || (i>0 && z[i-1]!='\n') ) continue; if( strncmp(&z[i],"%endif",6)==0 && ISSPACE(z[i+6]) ){ if( exclude ){ exclude--; if( exclude==0 ){ for(j=start; jfilename; ps.errorcnt = 0; ps.state = INITIALIZE; /* Begin by reading the input file */ fp = fopen(ps.filename,"rb"); if( fp==0 ){ ErrorMsg(ps.filename,0,"Can't open this file for reading."); gp->errorcnt++; return; } fseek(fp,0,2); filesize = ftell(fp); rewind(fp); filebuf = (char *)malloc( filesize+1 ); if( filesize>100000000 || filebuf==0 ){ ErrorMsg(ps.filename,0,"Input file too large."); gp->errorcnt++; fclose(fp); return; } if( fread(filebuf,1,filesize,fp)!=filesize ){ ErrorMsg(ps.filename,0,"Can't read in all %d bytes of this file.", filesize); free(filebuf); gp->errorcnt++; fclose(fp); return; } fclose(fp); filebuf[filesize] = 0; /* Make an initial pass through the file to handle %ifdef and %ifndef */ preprocess_input(filebuf); /* Now scan the text of the input file */ lineno = 1; for(cp=filebuf; (c= *cp)!=0; ){ if( c=='\n' ) lineno++; /* Keep track of the line number */ if( ISSPACE(c) ){ cp++; continue; } /* Skip all white space */ if( c=='/' && cp[1]=='/' ){ /* Skip C++ style comments */ cp+=2; while( (c= *cp)!=0 && c!='\n' ) cp++; continue; } if( c=='/' && cp[1]=='*' ){ /* Skip C style comments */ cp+=2; while( (c= *cp)!=0 && (c!='/' || cp[-1]!='*') ){ if( c=='\n' ) lineno++; cp++; } if( c ) cp++; continue; } ps.tokenstart = cp; /* Mark the beginning of the token */ ps.tokenlineno = lineno; /* Linenumber on which token begins */ if( c=='\"' ){ /* String literals */ cp++; while( (c= *cp)!=0 && c!='\"' ){ if( c=='\n' ) lineno++; cp++; } if( c==0 ){ ErrorMsg(ps.filename,startline, "String starting on this line is not terminated before the end of the file."); ps.errorcnt++; nextcp = cp; }else{ nextcp = cp+1; } }else if( c=='{' ){ /* A block of C code */ int level; cp++; for(level=1; (c= *cp)!=0 && (level>1 || c!='}'); cp++){ if( c=='\n' ) lineno++; else if( c=='{' ) level++; else if( c=='}' ) level--; else if( c=='/' && cp[1]=='*' ){ /* Skip comments */ int prevc; cp = &cp[2]; prevc = 0; while( (c= *cp)!=0 && (c!='/' || prevc!='*') ){ if( c=='\n' ) lineno++; prevc = c; cp++; } }else if( c=='/' && cp[1]=='/' ){ /* Skip C++ style comments too */ cp = &cp[2]; while( (c= *cp)!=0 && c!='\n' ) cp++; if( c ) lineno++; }else if( c=='\'' || c=='\"' ){ /* String a character literals */ int startchar, prevc; startchar = c; prevc = 0; for(cp++; (c= *cp)!=0 && (c!=startchar || prevc=='\\'); cp++){ if( c=='\n' ) lineno++; if( prevc=='\\' ) prevc = 0; else prevc = c; } } } if( c==0 ){ ErrorMsg(ps.filename,ps.tokenlineno, "C code starting on this line is not terminated before the end of the file."); ps.errorcnt++; nextcp = cp; }else{ nextcp = cp+1; } }else if( ISALNUM(c) ){ /* Identifiers */ while( (c= *cp)!=0 && (ISALNUM(c) || c=='_') ) cp++; nextcp = cp; }else if( c==':' && cp[1]==':' && cp[2]=='=' ){ /* The operator "::=" */ cp += 3; nextcp = cp; }else if( (c=='/' || c=='|') && ISALPHA(cp[1]) ){ cp += 2; while( (c = *cp)!=0 && (ISALNUM(c) || c=='_') ) cp++; nextcp = cp; }else{ /* All other (one character) operators */ cp++; nextcp = cp; } c = *cp; *cp = 0; /* Null terminate the token */ parseonetoken(&ps); /* Parse the token */ *cp = (char)c; /* Restore the buffer */ cp = nextcp; } free(filebuf); /* Release the buffer after parsing */ gp->rule = ps.firstrule; gp->errorcnt = ps.errorcnt; } /*************************** From the file "plink.c" *********************/ /* ** Routines processing configuration follow-set propagation links ** in the LEMON parser generator. */ static struct plink *plink_freelist = 0; /* Allocate a new plink */ struct plink *Plink_new(void){ struct plink *newlink; if( plink_freelist==0 ){ int i; int amt = 100; plink_freelist = (struct plink *)calloc( amt, sizeof(struct plink) ); if( plink_freelist==0 ){ fprintf(stderr, "Unable to allocate memory for a new follow-set propagation link.\n"); exit(1); } for(i=0; inext; return newlink; } /* Add a plink to a plink list */ void Plink_add(struct plink **plpp, struct config *cfp) { struct plink *newlink; newlink = Plink_new(); newlink->next = *plpp; *plpp = newlink; newlink->cfp = cfp; } /* Transfer every plink on the list "from" to the list "to" */ void Plink_copy(struct plink **to, struct plink *from) { struct plink *nextpl; while( from ){ nextpl = from->next; from->next = *to; *to = from; from = nextpl; } } /* Delete every plink on the list */ void Plink_delete(struct plink *plp) { struct plink *nextpl; while( plp ){ nextpl = plp->next; plp->next = plink_freelist; plink_freelist = plp; plp = nextpl; } } /*********************** From the file "report.c" **************************/ /* ** Procedures for generating reports and tables in the LEMON parser generator. */ /* Generate a filename with the given suffix. Space to hold the ** name comes from malloc() and must be freed by the calling ** function. */ PRIVATE char *file_makename(struct lemon *lemp, const char *suffix) { char *name; char *cp; char *filename = lemp->filename; int sz; if( outputDir ){ cp = strrchr(filename, '/'); if( cp ) filename = cp + 1; } sz = lemonStrlen(filename); sz += lemonStrlen(suffix); if( outputDir ) sz += lemonStrlen(outputDir) + 1; sz += 5; name = (char*)malloc( sz ); if( name==0 ){ fprintf(stderr,"Can't allocate space for a filename.\n"); exit(1); } name[0] = 0; if( outputDir ){ lemon_strcpy(name, outputDir); lemon_strcat(name, "/"); } lemon_strcat(name,filename); cp = strrchr(name,'.'); if( cp ) *cp = 0; lemon_strcat(name,suffix); return name; } /* Open a file with a name based on the name of the input file, ** but with a different (specified) suffix, and return a pointer ** to the stream */ PRIVATE FILE *file_open( struct lemon *lemp, const char *suffix, const char *mode ){ FILE *fp; if( lemp->outname ) free(lemp->outname); lemp->outname = file_makename(lemp, suffix); fp = fopen(lemp->outname,mode); if( fp==0 && *mode=='w' ){ fprintf(stderr,"Can't open file \"%s\".\n",lemp->outname); lemp->errorcnt++; return 0; } return fp; } /* Print the text of a rule */ void rule_print(FILE *out, struct rule *rp){ int i, j; fprintf(out, "%s",rp->lhs->name); /* if( rp->lhsalias ) fprintf(out,"(%s)",rp->lhsalias); */ fprintf(out," ::="); for(i=0; inrhs; i++){ struct symbol *sp = rp->rhs[i]; if( sp->type==MULTITERMINAL ){ fprintf(out," %s", sp->subsym[0]->name); for(j=1; jnsubsym; j++){ fprintf(out,"|%s", sp->subsym[j]->name); } }else{ fprintf(out," %s", sp->name); } /* if( rp->rhsalias[i] ) fprintf(out,"(%s)",rp->rhsalias[i]); */ } } /* Duplicate the input file without comments and without actions ** on rules */ void Reprint(struct lemon *lemp) { struct rule *rp; struct symbol *sp; int i, j, maxlen, len, ncolumns, skip; printf("// Reprint of input file \"%s\".\n// Symbols:\n",lemp->filename); maxlen = 10; for(i=0; insymbol; i++){ sp = lemp->symbols[i]; len = lemonStrlen(sp->name); if( len>maxlen ) maxlen = len; } ncolumns = 76/(maxlen+5); if( ncolumns<1 ) ncolumns = 1; skip = (lemp->nsymbol + ncolumns - 1)/ncolumns; for(i=0; insymbol; j+=skip){ sp = lemp->symbols[j]; assert( sp->index==j ); printf(" %3d %-*.*s",j,maxlen,maxlen,sp->name); } printf("\n"); } for(rp=lemp->rule; rp; rp=rp->next){ rule_print(stdout, rp); printf("."); if( rp->precsym ) printf(" [%s]",rp->precsym->name); /* if( rp->code ) printf("\n %s",rp->code); */ printf("\n"); } } /* Print a single rule. */ void RulePrint(FILE *fp, struct rule *rp, int iCursor){ struct symbol *sp; int i, j; fprintf(fp,"%s ::=",rp->lhs->name); for(i=0; i<=rp->nrhs; i++){ if( i==iCursor ) fprintf(fp," *"); if( i==rp->nrhs ) break; sp = rp->rhs[i]; if( sp->type==MULTITERMINAL ){ fprintf(fp," %s", sp->subsym[0]->name); for(j=1; jnsubsym; j++){ fprintf(fp,"|%s",sp->subsym[j]->name); } }else{ fprintf(fp," %s", sp->name); } } } /* Print the rule for a configuration. */ void ConfigPrint(FILE *fp, struct config *cfp){ RulePrint(fp, cfp->rp, cfp->dot); } /* #define TEST */ #if 0 /* Print a set */ PRIVATE void SetPrint(out,set,lemp) FILE *out; char *set; struct lemon *lemp; { int i; char *spacer; spacer = ""; fprintf(out,"%12s[",""); for(i=0; interminal; i++){ if( SetFind(set,i) ){ fprintf(out,"%s%s",spacer,lemp->symbols[i]->name); spacer = " "; } } fprintf(out,"]\n"); } /* Print a plink chain */ PRIVATE void PlinkPrint(out,plp,tag) FILE *out; struct plink *plp; char *tag; { while( plp ){ fprintf(out,"%12s%s (state %2d) ","",tag,plp->cfp->stp->statenum); ConfigPrint(out,plp->cfp); fprintf(out,"\n"); plp = plp->next; } } #endif /* Print an action to the given file descriptor. Return FALSE if ** nothing was actually printed. */ int PrintAction( struct action *ap, /* The action to print */ FILE *fp, /* Print the action here */ int indent /* Indent by this amount */ ){ int result = 1; switch( ap->type ){ case SHIFT: { struct state *stp = ap->x.stp; fprintf(fp,"%*s shift %-7d",indent,ap->sp->name,stp->statenum); break; } case REDUCE: { struct rule *rp = ap->x.rp; fprintf(fp,"%*s reduce %-7d",indent,ap->sp->name,rp->iRule); RulePrint(fp, rp, -1); break; } case SHIFTREDUCE: { struct rule *rp = ap->x.rp; fprintf(fp,"%*s shift-reduce %-7d",indent,ap->sp->name,rp->iRule); RulePrint(fp, rp, -1); break; } case ACCEPT: fprintf(fp,"%*s accept",indent,ap->sp->name); break; case ERROR: fprintf(fp,"%*s error",indent,ap->sp->name); break; case SRCONFLICT: case RRCONFLICT: fprintf(fp,"%*s reduce %-7d ** Parsing conflict **", indent,ap->sp->name,ap->x.rp->iRule); break; case SSCONFLICT: fprintf(fp,"%*s shift %-7d ** Parsing conflict **", indent,ap->sp->name,ap->x.stp->statenum); break; case SH_RESOLVED: if( showPrecedenceConflict ){ fprintf(fp,"%*s shift %-7d -- dropped by precedence", indent,ap->sp->name,ap->x.stp->statenum); }else{ result = 0; } break; case RD_RESOLVED: if( showPrecedenceConflict ){ fprintf(fp,"%*s reduce %-7d -- dropped by precedence", indent,ap->sp->name,ap->x.rp->iRule); }else{ result = 0; } break; case NOT_USED: result = 0; break; } if( result && ap->spOpt ){ fprintf(fp," /* because %s==%s */", ap->sp->name, ap->spOpt->name); } return result; } /* Generate the "*.out" log file */ void ReportOutput(struct lemon *lemp) { int i, n; struct state *stp; struct config *cfp; struct action *ap; struct rule *rp; FILE *fp; fp = file_open(lemp,".out","wb"); if( fp==0 ) return; for(i=0; inxstate; i++){ stp = lemp->sorted[i]; fprintf(fp,"State %d:\n",stp->statenum); if( lemp->basisflag ) cfp=stp->bp; else cfp=stp->cfp; while( cfp ){ char buf[20]; if( cfp->dot==cfp->rp->nrhs ){ lemon_sprintf(buf,"(%d)",cfp->rp->iRule); fprintf(fp," %5s ",buf); }else{ fprintf(fp," "); } ConfigPrint(fp,cfp); fprintf(fp,"\n"); #if 0 SetPrint(fp,cfp->fws,lemp); PlinkPrint(fp,cfp->fplp,"To "); PlinkPrint(fp,cfp->bplp,"From"); #endif if( lemp->basisflag ) cfp=cfp->bp; else cfp=cfp->next; } fprintf(fp,"\n"); for(ap=stp->ap; ap; ap=ap->next){ if( PrintAction(ap,fp,30) ) fprintf(fp,"\n"); } fprintf(fp,"\n"); } fprintf(fp, "----------------------------------------------------\n"); fprintf(fp, "Symbols:\n"); fprintf(fp, "The first-set of non-terminals is shown after the name.\n\n"); for(i=0; insymbol; i++){ int j; struct symbol *sp; sp = lemp->symbols[i]; fprintf(fp, " %3d: %s", i, sp->name); if( sp->type==NONTERMINAL ){ fprintf(fp, ":"); if( sp->lambda ){ fprintf(fp, " "); } for(j=0; jnterminal; j++){ if( sp->firstset && SetFind(sp->firstset, j) ){ fprintf(fp, " %s", lemp->symbols[j]->name); } } } if( sp->prec>=0 ) fprintf(fp," (precedence=%d)", sp->prec); fprintf(fp, "\n"); } fprintf(fp, "----------------------------------------------------\n"); fprintf(fp, "Syntax-only Symbols:\n"); fprintf(fp, "The following symbols never carry semantic content.\n\n"); for(i=n=0; insymbol; i++){ int w; struct symbol *sp = lemp->symbols[i]; if( sp->bContent ) continue; w = (int)strlen(sp->name); if( n>0 && n+w>75 ){ fprintf(fp,"\n"); n = 0; } if( n>0 ){ fprintf(fp, " "); n++; } fprintf(fp, "%s", sp->name); n += w; } if( n>0 ) fprintf(fp, "\n"); fprintf(fp, "----------------------------------------------------\n"); fprintf(fp, "Rules:\n"); for(rp=lemp->rule; rp; rp=rp->next){ fprintf(fp, "%4d: ", rp->iRule); rule_print(fp, rp); fprintf(fp,"."); if( rp->precsym ){ fprintf(fp," [%s precedence=%d]", rp->precsym->name, rp->precsym->prec); } fprintf(fp,"\n"); } fclose(fp); return; } /* Search for the file "name" which is in the same directory as ** the exacutable */ PRIVATE char *pathsearch(char *argv0, char *name, int modemask) { const char *pathlist; char *pathbufptr; char *pathbuf; char *path,*cp; char c; #ifdef __WIN32__ cp = strrchr(argv0,'\\'); #else cp = strrchr(argv0,'/'); #endif if( cp ){ c = *cp; *cp = 0; path = (char *)malloc( lemonStrlen(argv0) + lemonStrlen(name) + 2 ); if( path ) lemon_sprintf(path,"%s/%s",argv0,name); *cp = c; }else{ pathlist = getenv("PATH"); if( pathlist==0 ) pathlist = ".:/bin:/usr/bin"; pathbuf = (char *) malloc( lemonStrlen(pathlist) + 1 ); path = (char *)malloc( lemonStrlen(pathlist)+lemonStrlen(name)+2 ); if( (pathbuf != 0) && (path!=0) ){ pathbufptr = pathbuf; lemon_strcpy(pathbuf, pathlist); while( *pathbuf ){ cp = strchr(pathbuf,':'); if( cp==0 ) cp = &pathbuf[lemonStrlen(pathbuf)]; c = *cp; *cp = 0; lemon_sprintf(path,"%s/%s",pathbuf,name); *cp = c; if( c==0 ) pathbuf[0] = 0; else pathbuf = &cp[1]; if( access(path,modemask)==0 ) break; } free(pathbufptr); } } return path; } /* Given an action, compute the integer value for that action ** which is to be put in the action table of the generated machine. ** Return negative if no action should be generated. */ PRIVATE int compute_action(struct lemon *lemp, struct action *ap) { int act; switch( ap->type ){ case SHIFT: act = ap->x.stp->statenum; break; case SHIFTREDUCE: { /* Since a SHIFT is inherient after a prior REDUCE, convert any ** SHIFTREDUCE action with a nonterminal on the LHS into a simple ** REDUCE action: */ if( ap->sp->index>=lemp->nterminal ){ act = lemp->minReduce + ap->x.rp->iRule; }else{ act = lemp->minShiftReduce + ap->x.rp->iRule; } break; } case REDUCE: act = lemp->minReduce + ap->x.rp->iRule; break; case ERROR: act = lemp->errAction; break; case ACCEPT: act = lemp->accAction; break; default: act = -1; break; } return act; } #define LINESIZE 1000 /* The next cluster of routines are for reading the template file ** and writing the results to the generated parser */ /* The first function transfers data from "in" to "out" until ** a line is seen which begins with "%%". The line number is ** tracked. ** ** if name!=0, then any word that begin with "Parse" is changed to ** begin with *name instead. */ PRIVATE void tplt_xfer(char *name, FILE *in, FILE *out, int *lineno) { int i, iStart; char line[LINESIZE]; while( fgets(line,LINESIZE,in) && (line[0]!='%' || line[1]!='%') ){ (*lineno)++; iStart = 0; if( name ){ for(i=0; line[i]; i++){ if( line[i]=='P' && strncmp(&line[i],"Parse",5)==0 && (i==0 || !ISALPHA(line[i-1])) ){ if( i>iStart ) fprintf(out,"%.*s",i-iStart,&line[iStart]); fprintf(out,"%s",name); i += 4; iStart = i+1; } } } fprintf(out,"%s",&line[iStart]); } } /* The next function finds the template file and opens it, returning ** a pointer to the opened file. */ PRIVATE FILE *tplt_open(struct lemon *lemp) { static char templatename[] = "lempar.c"; char buf[1000]; FILE *in; char *tpltname; char *cp; /* first, see if user specified a template filename on the command line. */ if (user_templatename != 0) { if( access(user_templatename,004)==-1 ){ fprintf(stderr,"Can't find the parser driver template file \"%s\".\n", user_templatename); lemp->errorcnt++; return 0; } in = fopen(user_templatename,"rb"); if( in==0 ){ fprintf(stderr,"Can't open the template file \"%s\".\n", user_templatename); lemp->errorcnt++; return 0; } return in; } cp = strrchr(lemp->filename,'.'); if( cp ){ lemon_sprintf(buf,"%.*s.lt",(int)(cp-lemp->filename),lemp->filename); }else{ lemon_sprintf(buf,"%s.lt",lemp->filename); } if( access(buf,004)==0 ){ tpltname = buf; }else if( access(templatename,004)==0 ){ tpltname = templatename; }else{ tpltname = pathsearch(lemp->argv0,templatename,0); } if( tpltname==0 ){ fprintf(stderr,"Can't find the parser driver template file \"%s\".\n", templatename); lemp->errorcnt++; return 0; } in = fopen(tpltname,"rb"); if( in==0 ){ fprintf(stderr,"Can't open the template file \"%s\".\n",templatename); lemp->errorcnt++; return 0; } return in; } /* Print a #line directive line to the output file. */ PRIVATE void tplt_linedir(FILE *out, int lineno, char *filename) { fprintf(out,"#line %d \"",lineno); while( *filename ){ if( *filename == '\\' ) putc('\\',out); putc(*filename,out); filename++; } fprintf(out,"\"\n"); } /* Print a string to the file and keep the linenumber up to date */ PRIVATE void tplt_print(FILE *out, struct lemon *lemp, char *str, int *lineno) { if( str==0 ) return; while( *str ){ putc(*str,out); if( *str=='\n' ) (*lineno)++; str++; } if( str[-1]!='\n' ){ putc('\n',out); (*lineno)++; } if (!lemp->nolinenosflag) { (*lineno)++; tplt_linedir(out,*lineno,lemp->outname); } return; } /* ** The following routine emits code for the destructor for the ** symbol sp */ void emit_destructor_code( FILE *out, struct symbol *sp, struct lemon *lemp, int *lineno ){ char *cp = 0; if( sp->type==TERMINAL ){ cp = lemp->tokendest; if( cp==0 ) return; fprintf(out,"{\n"); (*lineno)++; }else if( sp->destructor ){ cp = sp->destructor; fprintf(out,"{\n"); (*lineno)++; if( !lemp->nolinenosflag ){ (*lineno)++; tplt_linedir(out,sp->destLineno,lemp->filename); } }else if( lemp->vardest ){ cp = lemp->vardest; if( cp==0 ) return; fprintf(out,"{\n"); (*lineno)++; }else{ assert( 0 ); /* Cannot happen */ } for(; *cp; cp++){ if( *cp=='$' && cp[1]=='$' ){ fprintf(out,"(yypminor->yy%d)",sp->dtnum); cp++; continue; } if( *cp=='\n' ) (*lineno)++; fputc(*cp,out); } fprintf(out,"\n"); (*lineno)++; if (!lemp->nolinenosflag) { (*lineno)++; tplt_linedir(out,*lineno,lemp->outname); } fprintf(out,"}\n"); (*lineno)++; return; } /* ** Return TRUE (non-zero) if the given symbol has a destructor. */ int has_destructor(struct symbol *sp, struct lemon *lemp) { int ret; if( sp->type==TERMINAL ){ ret = lemp->tokendest!=0; }else{ ret = lemp->vardest!=0 || sp->destructor!=0; } return ret; } /* ** Append text to a dynamically allocated string. If zText is 0 then ** reset the string to be empty again. Always return the complete text ** of the string (which is overwritten with each call). ** ** n bytes of zText are stored. If n==0 then all of zText up to the first ** \000 terminator is stored. zText can contain up to two instances of ** %d. The values of p1 and p2 are written into the first and second ** %d. ** ** If n==-1, then the previous character is overwritten. */ PRIVATE char *append_str(const char *zText, int n, int p1, int p2){ static char empty[1] = { 0 }; static char *z = 0; static int alloced = 0; static int used = 0; int c; char zInt[40]; if( zText==0 ){ if( used==0 && z!=0 ) z[0] = 0; used = 0; return z; } if( n<=0 ){ if( n<0 ){ used += n; assert( used>=0 ); } n = lemonStrlen(zText); } if( (int) (n+sizeof(zInt)*2+used) >= alloced ){ alloced = n + sizeof(zInt)*2 + used + 200; z = (char *) realloc(z, alloced); } if( z==0 ) return empty; while( n-- > 0 ){ c = *(zText++); if( c=='%' && n>0 && zText[0]=='d' ){ lemon_sprintf(zInt, "%d", p1); p1 = p2; lemon_strcpy(&z[used], zInt); used += lemonStrlen(&z[used]); zText++; n--; }else{ z[used++] = (char)c; } } z[used] = 0; return z; } /* ** Write and transform the rp->code string so that symbols are expanded. ** Populate the rp->codePrefix and rp->codeSuffix strings, as appropriate. ** ** Return 1 if the expanded code requires that "yylhsminor" local variable ** to be defined. */ PRIVATE int translate_code(struct lemon *lemp, struct rule *rp){ char *cp, *xp; int i; int rc = 0; /* True if yylhsminor is used */ int dontUseRhs0 = 0; /* If true, use of left-most RHS label is illegal */ const char *zSkip = 0; /* The zOvwrt comment within rp->code, or NULL */ char lhsused = 0; /* True if the LHS element has been used */ char lhsdirect; /* True if LHS writes directly into stack */ char used[MAXRHS]; /* True for each RHS element which is used */ char zLhs[50]; /* Convert the LHS symbol into this string */ char zOvwrt[900]; /* Comment that to allow LHS to overwrite RHS */ for(i=0; inrhs; i++) used[i] = 0; lhsused = 0; if( rp->code==0 ){ static char newlinestr[2] = { '\n', '\0' }; rp->code = newlinestr; rp->line = rp->ruleline; rp->noCode = 1; }else{ rp->noCode = 0; } if( rp->nrhs==0 ){ /* If there are no RHS symbols, then writing directly to the LHS is ok */ lhsdirect = 1; }else if( rp->rhsalias[0]==0 ){ /* The left-most RHS symbol has no value. LHS direct is ok. But ** we have to call the distructor on the RHS symbol first. */ lhsdirect = 1; if( has_destructor(rp->rhs[0],lemp) ){ append_str(0,0,0,0); append_str(" yy_destructor(yypParser,%d,&yymsp[%d].minor);\n", 0, rp->rhs[0]->index,1-rp->nrhs); rp->codePrefix = Strsafe(append_str(0,0,0,0)); rp->noCode = 0; } }else if( rp->lhsalias==0 ){ /* There is no LHS value symbol. */ lhsdirect = 1; }else if( strcmp(rp->lhsalias,rp->rhsalias[0])==0 ){ /* The LHS symbol and the left-most RHS symbol are the same, so ** direct writing is allowed */ lhsdirect = 1; lhsused = 1; used[0] = 1; if( rp->lhs->dtnum!=rp->rhs[0]->dtnum ){ ErrorMsg(lemp->filename,rp->ruleline, "%s(%s) and %s(%s) share the same label but have " "different datatypes.", rp->lhs->name, rp->lhsalias, rp->rhs[0]->name, rp->rhsalias[0]); lemp->errorcnt++; } }else{ lemon_sprintf(zOvwrt, "/*%s-overwrites-%s*/", rp->lhsalias, rp->rhsalias[0]); zSkip = strstr(rp->code, zOvwrt); if( zSkip!=0 ){ /* The code contains a special comment that indicates that it is safe ** for the LHS label to overwrite left-most RHS label. */ lhsdirect = 1; }else{ lhsdirect = 0; } } if( lhsdirect ){ sprintf(zLhs, "yymsp[%d].minor.yy%d",1-rp->nrhs,rp->lhs->dtnum); }else{ rc = 1; sprintf(zLhs, "yylhsminor.yy%d",rp->lhs->dtnum); } append_str(0,0,0,0); /* This const cast is wrong but harmless, if we're careful. */ for(cp=(char *)rp->code; *cp; cp++){ if( cp==zSkip ){ append_str(zOvwrt,0,0,0); cp += lemonStrlen(zOvwrt)-1; dontUseRhs0 = 1; continue; } if( ISALPHA(*cp) && (cp==rp->code || (!ISALNUM(cp[-1]) && cp[-1]!='_')) ){ char saved; for(xp= &cp[1]; ISALNUM(*xp) || *xp=='_'; xp++); saved = *xp; *xp = 0; if( rp->lhsalias && strcmp(cp,rp->lhsalias)==0 ){ append_str(zLhs,0,0,0); cp = xp; lhsused = 1; }else{ for(i=0; inrhs; i++){ if( rp->rhsalias[i] && strcmp(cp,rp->rhsalias[i])==0 ){ if( i==0 && dontUseRhs0 ){ ErrorMsg(lemp->filename,rp->ruleline, "Label %s used after '%s'.", rp->rhsalias[0], zOvwrt); lemp->errorcnt++; }else if( cp!=rp->code && cp[-1]=='@' ){ /* If the argument is of the form @X then substituted ** the token number of X, not the value of X */ append_str("yymsp[%d].major",-1,i-rp->nrhs+1,0); }else{ struct symbol *sp = rp->rhs[i]; int dtnum; if( sp->type==MULTITERMINAL ){ dtnum = sp->subsym[0]->dtnum; }else{ dtnum = sp->dtnum; } append_str("yymsp[%d].minor.yy%d",0,i-rp->nrhs+1, dtnum); } cp = xp; used[i] = 1; break; } } } *xp = saved; } append_str(cp, 1, 0, 0); } /* End loop */ /* Main code generation completed */ cp = append_str(0,0,0,0); if( cp && cp[0] ) rp->code = Strsafe(cp); append_str(0,0,0,0); /* Check to make sure the LHS has been used */ if( rp->lhsalias && !lhsused ){ ErrorMsg(lemp->filename,rp->ruleline, "Label \"%s\" for \"%s(%s)\" is never used.", rp->lhsalias,rp->lhs->name,rp->lhsalias); lemp->errorcnt++; } /* Generate destructor code for RHS minor values which are not referenced. ** Generate error messages for unused labels and duplicate labels. */ for(i=0; inrhs; i++){ if( rp->rhsalias[i] ){ if( i>0 ){ int j; if( rp->lhsalias && strcmp(rp->lhsalias,rp->rhsalias[i])==0 ){ ErrorMsg(lemp->filename,rp->ruleline, "%s(%s) has the same label as the LHS but is not the left-most " "symbol on the RHS.", rp->rhs[i]->name, rp->rhsalias); lemp->errorcnt++; } for(j=0; jrhsalias[j] && strcmp(rp->rhsalias[j],rp->rhsalias[i])==0 ){ ErrorMsg(lemp->filename,rp->ruleline, "Label %s used for multiple symbols on the RHS of a rule.", rp->rhsalias[i]); lemp->errorcnt++; break; } } } if( !used[i] ){ ErrorMsg(lemp->filename,rp->ruleline, "Label %s for \"%s(%s)\" is never used.", rp->rhsalias[i],rp->rhs[i]->name,rp->rhsalias[i]); lemp->errorcnt++; } }else if( i>0 && has_destructor(rp->rhs[i],lemp) ){ append_str(" yy_destructor(yypParser,%d,&yymsp[%d].minor);\n", 0, rp->rhs[i]->index,i-rp->nrhs+1); } } /* If unable to write LHS values directly into the stack, write the ** saved LHS value now. */ if( lhsdirect==0 ){ append_str(" yymsp[%d].minor.yy%d = ", 0, 1-rp->nrhs, rp->lhs->dtnum); append_str(zLhs, 0, 0, 0); append_str(";\n", 0, 0, 0); } /* Suffix code generation complete */ cp = append_str(0,0,0,0); if( cp && cp[0] ){ rp->codeSuffix = Strsafe(cp); rp->noCode = 0; } return rc; } /* ** Generate code which executes when the rule "rp" is reduced. Write ** the code to "out". Make sure lineno stays up-to-date. */ PRIVATE void emit_code( FILE *out, struct rule *rp, struct lemon *lemp, int *lineno ){ const char *cp; /* Setup code prior to the #line directive */ if( rp->codePrefix && rp->codePrefix[0] ){ fprintf(out, "{%s", rp->codePrefix); for(cp=rp->codePrefix; *cp; cp++){ if( *cp=='\n' ) (*lineno)++; } } /* Generate code to do the reduce action */ if( rp->code ){ if( !lemp->nolinenosflag ){ (*lineno)++; tplt_linedir(out,rp->line,lemp->filename); } fprintf(out,"{%s",rp->code); for(cp=rp->code; *cp; cp++){ if( *cp=='\n' ) (*lineno)++; } fprintf(out,"}\n"); (*lineno)++; if( !lemp->nolinenosflag ){ (*lineno)++; tplt_linedir(out,*lineno,lemp->outname); } } /* Generate breakdown code that occurs after the #line directive */ if( rp->codeSuffix && rp->codeSuffix[0] ){ fprintf(out, "%s", rp->codeSuffix); for(cp=rp->codeSuffix; *cp; cp++){ if( *cp=='\n' ) (*lineno)++; } } if( rp->codePrefix ){ fprintf(out, "}\n"); (*lineno)++; } return; } /* ** Print the definition of the union used for the parser's data stack. ** This union contains fields for every possible data type for tokens ** and nonterminals. In the process of computing and printing this ** union, also set the ".dtnum" field of every terminal and nonterminal ** symbol. */ void print_stack_union( FILE *out, /* The output stream */ struct lemon *lemp, /* The main info structure for this parser */ int *plineno, /* Pointer to the line number */ int mhflag /* True if generating makeheaders output */ ){ int lineno = *plineno; /* The line number of the output */ char **types; /* A hash table of datatypes */ int arraysize; /* Size of the "types" array */ int maxdtlength; /* Maximum length of any ".datatype" field. */ char *stddt; /* Standardized name for a datatype */ int i,j; /* Loop counters */ unsigned hash; /* For hashing the name of a type */ const char *name; /* Name of the parser */ /* Allocate and initialize types[] and allocate stddt[] */ arraysize = lemp->nsymbol * 2; types = (char**)calloc( arraysize, sizeof(char*) ); if( types==0 ){ fprintf(stderr,"Out of memory.\n"); exit(1); } for(i=0; ivartype ){ maxdtlength = lemonStrlen(lemp->vartype); } for(i=0; insymbol; i++){ int len; struct symbol *sp = lemp->symbols[i]; if( sp->datatype==0 ) continue; len = lemonStrlen(sp->datatype); if( len>maxdtlength ) maxdtlength = len; } stddt = (char*)malloc( maxdtlength*2 + 1 ); if( stddt==0 ){ fprintf(stderr,"Out of memory.\n"); exit(1); } /* Build a hash table of datatypes. The ".dtnum" field of each symbol ** is filled in with the hash index plus 1. A ".dtnum" value of 0 is ** used for terminal symbols. If there is no %default_type defined then ** 0 is also used as the .dtnum value for nonterminals which do not specify ** a datatype using the %type directive. */ for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; char *cp; if( sp==lemp->errsym ){ sp->dtnum = arraysize+1; continue; } if( sp->type!=NONTERMINAL || (sp->datatype==0 && lemp->vartype==0) ){ sp->dtnum = 0; continue; } cp = sp->datatype; if( cp==0 ) cp = lemp->vartype; j = 0; while( ISSPACE(*cp) ) cp++; while( *cp ) stddt[j++] = *cp++; while( j>0 && ISSPACE(stddt[j-1]) ) j--; stddt[j] = 0; if( lemp->tokentype && strcmp(stddt, lemp->tokentype)==0 ){ sp->dtnum = 0; continue; } hash = 0; for(j=0; stddt[j]; j++){ hash = hash*53 + stddt[j]; } hash = (hash & 0x7fffffff)%arraysize; while( types[hash] ){ if( strcmp(types[hash],stddt)==0 ){ sp->dtnum = hash + 1; break; } hash++; if( hash>=(unsigned)arraysize ) hash = 0; } if( types[hash]==0 ){ sp->dtnum = hash + 1; types[hash] = (char*)malloc( lemonStrlen(stddt)+1 ); if( types[hash]==0 ){ fprintf(stderr,"Out of memory.\n"); exit(1); } lemon_strcpy(types[hash],stddt); } } /* Print out the definition of YYTOKENTYPE and YYMINORTYPE */ name = lemp->name ? lemp->name : "Parse"; lineno = *plineno; if( mhflag ){ fprintf(out,"#if INTERFACE\n"); lineno++; } fprintf(out,"#define %sTOKENTYPE %s\n",name, lemp->tokentype?lemp->tokentype:"void*"); lineno++; if( mhflag ){ fprintf(out,"#endif\n"); lineno++; } fprintf(out,"typedef union {\n"); lineno++; fprintf(out," int yyinit;\n"); lineno++; fprintf(out," %sTOKENTYPE yy0;\n",name); lineno++; for(i=0; ierrsym && lemp->errsym->useCnt ){ fprintf(out," int yy%d;\n",lemp->errsym->dtnum); lineno++; } free(stddt); free(types); fprintf(out,"} YYMINORTYPE;\n"); lineno++; *plineno = lineno; } /* ** Return the name of a C datatype able to represent values between ** lwr and upr, inclusive. If pnByte!=NULL then also write the sizeof ** for that type (1, 2, or 4) into *pnByte. */ static const char *minimum_size_type(int lwr, int upr, int *pnByte){ const char *zType = "int"; int nByte = 4; if( lwr>=0 ){ if( upr<=255 ){ zType = "unsigned char"; nByte = 1; }else if( upr<65535 ){ zType = "unsigned short int"; nByte = 2; }else{ zType = "unsigned int"; nByte = 4; } }else if( lwr>=-127 && upr<=127 ){ zType = "signed char"; nByte = 1; }else if( lwr>=-32767 && upr<32767 ){ zType = "short"; nByte = 2; } if( pnByte ) *pnByte = nByte; return zType; } /* ** Each state contains a set of token transaction and a set of ** nonterminal transactions. Each of these sets makes an instance ** of the following structure. An array of these structures is used ** to order the creation of entries in the yy_action[] table. */ struct axset { struct state *stp; /* A pointer to a state */ int isTkn; /* True to use tokens. False for non-terminals */ int nAction; /* Number of actions */ int iOrder; /* Original order of action sets */ }; /* ** Compare to axset structures for sorting purposes */ static int axset_compare(const void *a, const void *b){ struct axset *p1 = (struct axset*)a; struct axset *p2 = (struct axset*)b; int c; c = p2->nAction - p1->nAction; if( c==0 ){ c = p1->iOrder - p2->iOrder; } assert( c!=0 || p1==p2 ); return c; } /* ** Write text on "out" that describes the rule "rp". */ static void writeRuleText(FILE *out, struct rule *rp){ int j; fprintf(out,"%s ::=", rp->lhs->name); for(j=0; jnrhs; j++){ struct symbol *sp = rp->rhs[j]; if( sp->type!=MULTITERMINAL ){ fprintf(out," %s", sp->name); }else{ int k; fprintf(out," %s", sp->subsym[0]->name); for(k=1; knsubsym; k++){ fprintf(out,"|%s",sp->subsym[k]->name); } } } } /* Generate C source code for the parser */ void ReportTable( struct lemon *lemp, int mhflag /* Output in makeheaders format if true */ ){ FILE *out, *in; char line[LINESIZE]; int lineno; struct state *stp; struct action *ap; struct rule *rp; struct acttab *pActtab; int i, j, n, sz; int szActionType; /* sizeof(YYACTIONTYPE) */ int szCodeType; /* sizeof(YYCODETYPE) */ const char *name; int mnTknOfst, mxTknOfst; int mnNtOfst, mxNtOfst; struct axset *ax; lemp->minShiftReduce = lemp->nstate; lemp->errAction = lemp->minShiftReduce + lemp->nrule; lemp->accAction = lemp->errAction + 1; lemp->noAction = lemp->accAction + 1; lemp->minReduce = lemp->noAction + 1; lemp->maxAction = lemp->minReduce + lemp->nrule; in = tplt_open(lemp); if( in==0 ) return; out = file_open(lemp,".c","wb"); if( out==0 ){ fclose(in); return; } lineno = 1; tplt_xfer(lemp->name,in,out,&lineno); /* Generate the include code, if any */ tplt_print(out,lemp,lemp->include,&lineno); if( mhflag ){ char *incName = file_makename(lemp, ".h"); fprintf(out,"#include \"%s\"\n", incName); lineno++; free(incName); } tplt_xfer(lemp->name,in,out,&lineno); /* Generate #defines for all tokens */ if( mhflag ){ const char *prefix; fprintf(out,"#if INTERFACE\n"); lineno++; if( lemp->tokenprefix ) prefix = lemp->tokenprefix; else prefix = ""; for(i=1; interminal; i++){ fprintf(out,"#define %s%-30s %2d\n",prefix,lemp->symbols[i]->name,i); lineno++; } fprintf(out,"#endif\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate the defines */ fprintf(out,"#define YYCODETYPE %s\n", minimum_size_type(0, lemp->nsymbol, &szCodeType)); lineno++; fprintf(out,"#define YYNOCODE %d\n",lemp->nsymbol); lineno++; fprintf(out,"#define YYACTIONTYPE %s\n", minimum_size_type(0,lemp->maxAction,&szActionType)); lineno++; if( lemp->wildcard ){ fprintf(out,"#define YYWILDCARD %d\n", lemp->wildcard->index); lineno++; } print_stack_union(out,lemp,&lineno,mhflag); fprintf(out, "#ifndef YYSTACKDEPTH\n"); lineno++; if( lemp->stacksize ){ fprintf(out,"#define YYSTACKDEPTH %s\n",lemp->stacksize); lineno++; }else{ fprintf(out,"#define YYSTACKDEPTH 100\n"); lineno++; } fprintf(out, "#endif\n"); lineno++; if( mhflag ){ fprintf(out,"#if INTERFACE\n"); lineno++; } name = lemp->name ? lemp->name : "Parse"; if( lemp->arg && lemp->arg[0] ){ i = lemonStrlen(lemp->arg); while( i>=1 && ISSPACE(lemp->arg[i-1]) ) i--; while( i>=1 && (ISALNUM(lemp->arg[i-1]) || lemp->arg[i-1]=='_') ) i--; fprintf(out,"#define %sARG_SDECL %s;\n",name,lemp->arg); lineno++; fprintf(out,"#define %sARG_PDECL ,%s\n",name,lemp->arg); lineno++; fprintf(out,"#define %sARG_PARAM ,%s\n",name,&lemp->arg[i]); lineno++; fprintf(out,"#define %sARG_FETCH %s=yypParser->%s;\n", name,lemp->arg,&lemp->arg[i]); lineno++; fprintf(out,"#define %sARG_STORE yypParser->%s=%s;\n", name,&lemp->arg[i],&lemp->arg[i]); lineno++; }else{ fprintf(out,"#define %sARG_SDECL\n",name); lineno++; fprintf(out,"#define %sARG_PDECL\n",name); lineno++; fprintf(out,"#define %sARG_PARAM\n",name); lineno++; fprintf(out,"#define %sARG_FETCH\n",name); lineno++; fprintf(out,"#define %sARG_STORE\n",name); lineno++; } if( lemp->ctx && lemp->ctx[0] ){ i = lemonStrlen(lemp->ctx); while( i>=1 && ISSPACE(lemp->ctx[i-1]) ) i--; while( i>=1 && (ISALNUM(lemp->ctx[i-1]) || lemp->ctx[i-1]=='_') ) i--; fprintf(out,"#define %sCTX_SDECL %s;\n",name,lemp->ctx); lineno++; fprintf(out,"#define %sCTX_PDECL ,%s\n",name,lemp->ctx); lineno++; fprintf(out,"#define %sCTX_PARAM ,%s\n",name,&lemp->ctx[i]); lineno++; fprintf(out,"#define %sCTX_FETCH %s=yypParser->%s;\n", name,lemp->ctx,&lemp->ctx[i]); lineno++; fprintf(out,"#define %sCTX_STORE yypParser->%s=%s;\n", name,&lemp->ctx[i],&lemp->ctx[i]); lineno++; }else{ fprintf(out,"#define %sCTX_SDECL\n",name); lineno++; fprintf(out,"#define %sCTX_PDECL\n",name); lineno++; fprintf(out,"#define %sCTX_PARAM\n",name); lineno++; fprintf(out,"#define %sCTX_FETCH\n",name); lineno++; fprintf(out,"#define %sCTX_STORE\n",name); lineno++; } if( mhflag ){ fprintf(out,"#endif\n"); lineno++; } if( lemp->errsym && lemp->errsym->useCnt ){ fprintf(out,"#define YYERRORSYMBOL %d\n",lemp->errsym->index); lineno++; fprintf(out,"#define YYERRSYMDT yy%d\n",lemp->errsym->dtnum); lineno++; } if( lemp->has_fallback ){ fprintf(out,"#define YYFALLBACK 1\n"); lineno++; } /* Compute the action table, but do not output it yet. The action ** table must be computed before generating the YYNSTATE macro because ** we need to know how many states can be eliminated. */ ax = (struct axset *) calloc(lemp->nxstate*2, sizeof(ax[0])); if( ax==0 ){ fprintf(stderr,"malloc failed\n"); exit(1); } for(i=0; inxstate; i++){ stp = lemp->sorted[i]; ax[i*2].stp = stp; ax[i*2].isTkn = 1; ax[i*2].nAction = stp->nTknAct; ax[i*2+1].stp = stp; ax[i*2+1].isTkn = 0; ax[i*2+1].nAction = stp->nNtAct; } mxTknOfst = mnTknOfst = 0; mxNtOfst = mnNtOfst = 0; /* In an effort to minimize the action table size, use the heuristic ** of placing the largest action sets first */ for(i=0; inxstate*2; i++) ax[i].iOrder = i; qsort(ax, lemp->nxstate*2, sizeof(ax[0]), axset_compare); pActtab = acttab_alloc(lemp->nsymbol, lemp->nterminal); for(i=0; inxstate*2 && ax[i].nAction>0; i++){ stp = ax[i].stp; if( ax[i].isTkn ){ for(ap=stp->ap; ap; ap=ap->next){ int action; if( ap->sp->index>=lemp->nterminal ) continue; action = compute_action(lemp, ap); if( action<0 ) continue; acttab_action(pActtab, ap->sp->index, action); } stp->iTknOfst = acttab_insert(pActtab, 1); if( stp->iTknOfstiTknOfst; if( stp->iTknOfst>mxTknOfst ) mxTknOfst = stp->iTknOfst; }else{ for(ap=stp->ap; ap; ap=ap->next){ int action; if( ap->sp->indexnterminal ) continue; if( ap->sp->index==lemp->nsymbol ) continue; action = compute_action(lemp, ap); if( action<0 ) continue; acttab_action(pActtab, ap->sp->index, action); } stp->iNtOfst = acttab_insert(pActtab, 0); if( stp->iNtOfstiNtOfst; if( stp->iNtOfst>mxNtOfst ) mxNtOfst = stp->iNtOfst; } #if 0 /* Uncomment for a trace of how the yy_action[] table fills out */ { int jj, nn; for(jj=nn=0; jjnAction; jj++){ if( pActtab->aAction[jj].action<0 ) nn++; } printf("%4d: State %3d %s n: %2d size: %5d freespace: %d\n", i, stp->statenum, ax[i].isTkn ? "Token" : "Var ", ax[i].nAction, pActtab->nAction, nn); } #endif } free(ax); /* Mark rules that are actually used for reduce actions after all ** optimizations have been applied */ for(rp=lemp->rule; rp; rp=rp->next) rp->doesReduce = LEMON_FALSE; for(i=0; inxstate; i++){ for(ap=lemp->sorted[i]->ap; ap; ap=ap->next){ if( ap->type==REDUCE || ap->type==SHIFTREDUCE ){ ap->x.rp->doesReduce = 1; } } } /* Finish rendering the constants now that the action table has ** been computed */ fprintf(out,"#define YYNSTATE %d\n",lemp->nxstate); lineno++; fprintf(out,"#define YYNRULE %d\n",lemp->nrule); lineno++; fprintf(out,"#define YYNTOKEN %d\n",lemp->nterminal); lineno++; fprintf(out,"#define YY_MAX_SHIFT %d\n",lemp->nxstate-1); lineno++; i = lemp->minShiftReduce; fprintf(out,"#define YY_MIN_SHIFTREDUCE %d\n",i); lineno++; i += lemp->nrule; fprintf(out,"#define YY_MAX_SHIFTREDUCE %d\n", i-1); lineno++; fprintf(out,"#define YY_ERROR_ACTION %d\n", lemp->errAction); lineno++; fprintf(out,"#define YY_ACCEPT_ACTION %d\n", lemp->accAction); lineno++; fprintf(out,"#define YY_NO_ACTION %d\n", lemp->noAction); lineno++; fprintf(out,"#define YY_MIN_REDUCE %d\n", lemp->minReduce); lineno++; i = lemp->minReduce + lemp->nrule; fprintf(out,"#define YY_MAX_REDUCE %d\n", i-1); lineno++; tplt_xfer(lemp->name,in,out,&lineno); /* Now output the action table and its associates: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. */ /* Output the yy_action table */ lemp->nactiontab = n = acttab_action_size(pActtab); lemp->tablesize += n*szActionType; fprintf(out,"#define YY_ACTTAB_COUNT (%d)\n", n); lineno++; fprintf(out,"static const YYACTIONTYPE yy_action[] = {\n"); lineno++; for(i=j=0; inoAction; if( j==0 ) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", action); if( j==9 || i==n-1 ){ fprintf(out, "\n"); lineno++; j = 0; }else{ j++; } } fprintf(out, "};\n"); lineno++; /* Output the yy_lookahead table */ lemp->nlookaheadtab = n = acttab_lookahead_size(pActtab); lemp->tablesize += n*szCodeType; fprintf(out,"static const YYCODETYPE yy_lookahead[] = {\n"); lineno++; for(i=j=0; insymbol; if( j==0 ) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", la); if( j==9 || i==n-1 ){ fprintf(out, "\n"); lineno++; j = 0; }else{ j++; } } fprintf(out, "};\n"); lineno++; /* Output the yy_shift_ofst[] table */ n = lemp->nxstate; while( n>0 && lemp->sorted[n-1]->iTknOfst==NO_OFFSET ) n--; fprintf(out, "#define YY_SHIFT_COUNT (%d)\n", n-1); lineno++; fprintf(out, "#define YY_SHIFT_MIN (%d)\n", mnTknOfst); lineno++; fprintf(out, "#define YY_SHIFT_MAX (%d)\n", mxTknOfst); lineno++; fprintf(out, "static const %s yy_shift_ofst[] = {\n", minimum_size_type(mnTknOfst, lemp->nterminal+lemp->nactiontab, &sz)); lineno++; lemp->tablesize += n*sz; for(i=j=0; isorted[i]; ofst = stp->iTknOfst; if( ofst==NO_OFFSET ) ofst = lemp->nactiontab; if( j==0 ) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", ofst); if( j==9 || i==n-1 ){ fprintf(out, "\n"); lineno++; j = 0; }else{ j++; } } fprintf(out, "};\n"); lineno++; /* Output the yy_reduce_ofst[] table */ n = lemp->nxstate; while( n>0 && lemp->sorted[n-1]->iNtOfst==NO_OFFSET ) n--; fprintf(out, "#define YY_REDUCE_COUNT (%d)\n", n-1); lineno++; fprintf(out, "#define YY_REDUCE_MIN (%d)\n", mnNtOfst); lineno++; fprintf(out, "#define YY_REDUCE_MAX (%d)\n", mxNtOfst); lineno++; fprintf(out, "static const %s yy_reduce_ofst[] = {\n", minimum_size_type(mnNtOfst-1, mxNtOfst, &sz)); lineno++; lemp->tablesize += n*sz; for(i=j=0; isorted[i]; ofst = stp->iNtOfst; if( ofst==NO_OFFSET ) ofst = mnNtOfst - 1; if( j==0 ) fprintf(out," /* %5d */ ", i); fprintf(out, " %4d,", ofst); if( j==9 || i==n-1 ){ fprintf(out, "\n"); lineno++; j = 0; }else{ j++; } } fprintf(out, "};\n"); lineno++; /* Output the default action table */ fprintf(out, "static const YYACTIONTYPE yy_default[] = {\n"); lineno++; n = lemp->nxstate; lemp->tablesize += n*szActionType; for(i=j=0; isorted[i]; if( j==0 ) fprintf(out," /* %5d */ ", i); if( stp->iDfltReduce<0 ){ fprintf(out, " %4d,", lemp->errAction); }else{ fprintf(out, " %4d,", stp->iDfltReduce + lemp->minReduce); } if( j==9 || i==n-1 ){ fprintf(out, "\n"); lineno++; j = 0; }else{ j++; } } fprintf(out, "};\n"); lineno++; tplt_xfer(lemp->name,in,out,&lineno); /* Generate the table of fallback tokens. */ if( lemp->has_fallback ){ int mx = lemp->nterminal - 1; while( mx>0 && lemp->symbols[mx]->fallback==0 ){ mx--; } lemp->tablesize += (mx+1)*szCodeType; for(i=0; i<=mx; i++){ struct symbol *p = lemp->symbols[i]; if( p->fallback==0 ){ fprintf(out, " 0, /* %10s => nothing */\n", p->name); }else{ fprintf(out, " %3d, /* %10s => %s */\n", p->fallback->index, p->name, p->fallback->name); } lineno++; } } tplt_xfer(lemp->name, in, out, &lineno); /* Generate a table containing the symbolic name of every symbol */ for(i=0; insymbol; i++){ lemon_sprintf(line,"\"%s\",",lemp->symbols[i]->name); fprintf(out," /* %4d */ \"%s\",\n",i, lemp->symbols[i]->name); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate a table containing a text string that describes every ** rule in the rule set of the grammar. This information is used ** when tracing REDUCE actions. */ for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ assert( rp->iRule==i ); fprintf(out," /* %3d */ \"", i); writeRuleText(out, rp); fprintf(out,"\",\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes every time a symbol is popped from ** the stack while processing errors or while destroying the parser. ** (In other words, generate the %destructor actions) */ if( lemp->tokendest ){ int once = 1; for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if( sp==0 || sp->type!=TERMINAL ) continue; if( once ){ fprintf(out, " /* TERMINAL Destructor */\n"); lineno++; once = 0; } fprintf(out," case %d: /* %s */\n", sp->index, sp->name); lineno++; } for(i=0; insymbol && lemp->symbols[i]->type!=TERMINAL; i++); if( insymbol ){ emit_destructor_code(out,lemp->symbols[i],lemp,&lineno); fprintf(out," break;\n"); lineno++; } } if( lemp->vardest ){ struct symbol *dflt_sp = 0; int once = 1; for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if( sp==0 || sp->type==TERMINAL || sp->index<=0 || sp->destructor!=0 ) continue; if( once ){ fprintf(out, " /* Default NON-TERMINAL Destructor */\n");lineno++; once = 0; } fprintf(out," case %d: /* %s */\n", sp->index, sp->name); lineno++; dflt_sp = sp; } if( dflt_sp!=0 ){ emit_destructor_code(out,dflt_sp,lemp,&lineno); } fprintf(out," break;\n"); lineno++; } for(i=0; insymbol; i++){ struct symbol *sp = lemp->symbols[i]; if( sp==0 || sp->type==TERMINAL || sp->destructor==0 ) continue; if( sp->destLineno<0 ) continue; /* Already emitted */ fprintf(out," case %d: /* %s */\n", sp->index, sp->name); lineno++; /* Combine duplicate destructors into a single case */ for(j=i+1; jnsymbol; j++){ struct symbol *sp2 = lemp->symbols[j]; if( sp2 && sp2->type!=TERMINAL && sp2->destructor && sp2->dtnum==sp->dtnum && strcmp(sp->destructor,sp2->destructor)==0 ){ fprintf(out," case %d: /* %s */\n", sp2->index, sp2->name); lineno++; sp2->destLineno = -1; /* Avoid emitting this destructor again */ } } emit_destructor_code(out,lemp->symbols[i],lemp,&lineno); fprintf(out," break;\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes whenever the parser stack overflows */ tplt_print(out,lemp,lemp->overflow,&lineno); tplt_xfer(lemp->name,in,out,&lineno); /* Generate the table of rule information ** ** Note: This code depends on the fact that rules are number ** sequentually beginning with 0. */ for(i=0, rp=lemp->rule; rp; rp=rp->next, i++){ fprintf(out," { %4d, %4d }, /* (%d) ",rp->lhs->index,-rp->nrhs,i); rule_print(out, rp); fprintf(out," */\n"); lineno++; } tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which execution during each REDUCE action */ i = 0; for(rp=lemp->rule; rp; rp=rp->next){ i += translate_code(lemp, rp); } if( i ){ fprintf(out," YYMINORTYPE yylhsminor;\n"); lineno++; } /* First output rules other than the default: rule */ for(rp=lemp->rule; rp; rp=rp->next){ struct rule *rp2; /* Other rules with the same action */ if( rp->codeEmitted ) continue; if( rp->noCode ){ /* No C code actions, so this will be part of the "default:" rule */ continue; } fprintf(out," case %d: /* ", rp->iRule); writeRuleText(out, rp); fprintf(out, " */\n"); lineno++; for(rp2=rp->next; rp2; rp2=rp2->next){ if( rp2->code==rp->code && rp2->codePrefix==rp->codePrefix && rp2->codeSuffix==rp->codeSuffix ){ fprintf(out," case %d: /* ", rp2->iRule); writeRuleText(out, rp2); fprintf(out," */ yytestcase(yyruleno==%d);\n", rp2->iRule); lineno++; rp2->codeEmitted = 1; } } emit_code(out,rp,lemp,&lineno); fprintf(out," break;\n"); lineno++; rp->codeEmitted = 1; } /* Finally, output the default: rule. We choose as the default: all ** empty actions. */ fprintf(out," default:\n"); lineno++; for(rp=lemp->rule; rp; rp=rp->next){ if( rp->codeEmitted ) continue; assert( rp->noCode ); fprintf(out," /* (%d) ", rp->iRule); writeRuleText(out, rp); if( rp->doesReduce ){ fprintf(out, " */ yytestcase(yyruleno==%d);\n", rp->iRule); lineno++; }else{ fprintf(out, " (OPTIMIZED OUT) */ assert(yyruleno!=%d);\n", rp->iRule); lineno++; } } fprintf(out," break;\n"); lineno++; tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes if a parse fails */ tplt_print(out,lemp,lemp->failure,&lineno); tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes when a syntax error occurs */ tplt_print(out,lemp,lemp->error,&lineno); tplt_xfer(lemp->name,in,out,&lineno); /* Generate code which executes when the parser accepts its input */ tplt_print(out,lemp,lemp->accept,&lineno); tplt_xfer(lemp->name,in,out,&lineno); /* Append any addition code the user desires */ tplt_print(out,lemp,lemp->extracode,&lineno); fclose(in); fclose(out); return; } /* Generate a header file for the parser */ void ReportHeader(struct lemon *lemp) { FILE *out, *in; const char *prefix; char line[LINESIZE]; char pattern[LINESIZE]; int i; if( lemp->tokenprefix ) prefix = lemp->tokenprefix; else prefix = ""; in = file_open(lemp,".h","rb"); if( in ){ int nextChar; for(i=1; interminal && fgets(line,LINESIZE,in); i++){ lemon_sprintf(pattern,"#define %s%-30s %3d\n", prefix,lemp->symbols[i]->name,i); if( strcmp(line,pattern) ) break; } nextChar = fgetc(in); fclose(in); if( i==lemp->nterminal && nextChar==EOF ){ /* No change in the file. Don't rewrite it. */ return; } } out = file_open(lemp,".h","wb"); if( out ){ for(i=1; interminal; i++){ fprintf(out,"#define %s%-30s %3d\n",prefix,lemp->symbols[i]->name,i); } fclose(out); } return; } /* Reduce the size of the action tables, if possible, by making use ** of defaults. ** ** In this version, we take the most frequent REDUCE action and make ** it the default. Except, there is no default if the wildcard token ** is a possible look-ahead. */ void CompressTables(struct lemon *lemp) { struct state *stp; struct action *ap, *ap2, *nextap; struct rule *rp, *rp2, *rbest; int nbest, n; int i; int usesWildcard; for(i=0; instate; i++){ stp = lemp->sorted[i]; nbest = 0; rbest = 0; usesWildcard = 0; for(ap=stp->ap; ap; ap=ap->next){ if( ap->type==SHIFT && ap->sp==lemp->wildcard ){ usesWildcard = 1; } if( ap->type!=REDUCE ) continue; rp = ap->x.rp; if( rp->lhsStart ) continue; if( rp==rbest ) continue; n = 1; for(ap2=ap->next; ap2; ap2=ap2->next){ if( ap2->type!=REDUCE ) continue; rp2 = ap2->x.rp; if( rp2==rbest ) continue; if( rp2==rp ) n++; } if( n>nbest ){ nbest = n; rbest = rp; } } /* Do not make a default if the number of rules to default ** is not at least 1 or if the wildcard token is a possible ** lookahead. */ if( nbest<1 || usesWildcard ) continue; /* Combine matching REDUCE actions into a single default */ for(ap=stp->ap; ap; ap=ap->next){ if( ap->type==REDUCE && ap->x.rp==rbest ) break; } assert( ap ); ap->sp = Symbol_new("{default}"); for(ap=ap->next; ap; ap=ap->next){ if( ap->type==REDUCE && ap->x.rp==rbest ) ap->type = NOT_USED; } stp->ap = Action_sort(stp->ap); for(ap=stp->ap; ap; ap=ap->next){ if( ap->type==SHIFT ) break; if( ap->type==REDUCE && ap->x.rp!=rbest ) break; } if( ap==0 ){ stp->autoReduce = 1; stp->pDfltReduce = rbest; } } /* Make a second pass over all states and actions. Convert ** every action that is a SHIFT to an autoReduce state into ** a SHIFTREDUCE action. */ for(i=0; instate; i++){ stp = lemp->sorted[i]; for(ap=stp->ap; ap; ap=ap->next){ struct state *pNextState; if( ap->type!=SHIFT ) continue; pNextState = ap->x.stp; if( pNextState->autoReduce && pNextState->pDfltReduce!=0 ){ ap->type = SHIFTREDUCE; ap->x.rp = pNextState->pDfltReduce; } } } /* If a SHIFTREDUCE action specifies a rule that has a single RHS term ** (meaning that the SHIFTREDUCE will land back in the state where it ** started) and if there is no C-code associated with the reduce action, ** then we can go ahead and convert the action to be the same as the ** action for the RHS of the rule. */ for(i=0; instate; i++){ stp = lemp->sorted[i]; for(ap=stp->ap; ap; ap=nextap){ nextap = ap->next; if( ap->type!=SHIFTREDUCE ) continue; rp = ap->x.rp; if( rp->noCode==0 ) continue; if( rp->nrhs!=1 ) continue; #if 1 /* Only apply this optimization to non-terminals. It would be OK to ** apply it to terminal symbols too, but that makes the parser tables ** larger. */ if( ap->sp->indexnterminal ) continue; #endif /* If we reach this point, it means the optimization can be applied */ nextap = ap; for(ap2=stp->ap; ap2 && (ap2==ap || ap2->sp!=rp->lhs); ap2=ap2->next){} assert( ap2!=0 ); ap->spOpt = ap2->sp; ap->type = ap2->type; ap->x = ap2->x; } } } /* ** Compare two states for sorting purposes. The smaller state is the ** one with the most non-terminal actions. If they have the same number ** of non-terminal actions, then the smaller is the one with the most ** token actions. */ static int stateResortCompare(const void *a, const void *b){ const struct state *pA = *(const struct state**)a; const struct state *pB = *(const struct state**)b; int n; n = pB->nNtAct - pA->nNtAct; if( n==0 ){ n = pB->nTknAct - pA->nTknAct; if( n==0 ){ n = pB->statenum - pA->statenum; } } assert( n!=0 ); return n; } /* ** Renumber and resort states so that states with fewer choices ** occur at the end. Except, keep state 0 as the first state. */ void ResortStates(struct lemon *lemp) { int i; struct state *stp; struct action *ap; for(i=0; instate; i++){ stp = lemp->sorted[i]; stp->nTknAct = stp->nNtAct = 0; stp->iDfltReduce = -1; /* Init dflt action to "syntax error" */ stp->iTknOfst = NO_OFFSET; stp->iNtOfst = NO_OFFSET; for(ap=stp->ap; ap; ap=ap->next){ int iAction = compute_action(lemp,ap); if( iAction>=0 ){ if( ap->sp->indexnterminal ){ stp->nTknAct++; }else if( ap->sp->indexnsymbol ){ stp->nNtAct++; }else{ assert( stp->autoReduce==0 || stp->pDfltReduce==ap->x.rp ); stp->iDfltReduce = iAction; } } } } qsort(&lemp->sorted[1], lemp->nstate-1, sizeof(lemp->sorted[0]), stateResortCompare); for(i=0; instate; i++){ lemp->sorted[i]->statenum = i; } lemp->nxstate = lemp->nstate; while( lemp->nxstate>1 && lemp->sorted[lemp->nxstate-1]->autoReduce ){ lemp->nxstate--; } } /***************** From the file "set.c" ************************************/ /* ** Set manipulation routines for the LEMON parser generator. */ static int size = 0; /* Set the set size */ void SetSize(int n) { size = n+1; } /* Allocate a new set */ char *SetNew(void){ char *s; s = (char*)calloc( size, 1); if( s==0 ){ extern void memory_error(); memory_error(); } return s; } /* Deallocate a set */ void SetFree(char *s) { free(s); } /* Add a new element to the set. Return TRUE if the element was added ** and FALSE if it was already there. */ int SetAdd(char *s, int e) { int rv; assert( e>=0 && esize = 1024; x1a->count = 0; x1a->tbl = (x1node*)calloc(1024, sizeof(x1node) + sizeof(x1node*)); if( x1a->tbl==0 ){ free(x1a); x1a = 0; }else{ int i; x1a->ht = (x1node**)&(x1a->tbl[1024]); for(i=0; i<1024; i++) x1a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int Strsafe_insert(const char *data) { x1node *np; unsigned h; unsigned ph; if( x1a==0 ) return 0; ph = strhash(data); h = ph & (x1a->size-1); np = x1a->ht[h]; while( np ){ if( strcmp(np->data,data)==0 ){ /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if( x1a->count>=x1a->size ){ /* Need to make the hash table bigger */ int i,arrSize; struct s_x1 array; array.size = arrSize = x1a->size*2; array.count = x1a->count; array.tbl = (x1node*)calloc(arrSize, sizeof(x1node) + sizeof(x1node*)); if( array.tbl==0 ) return 0; /* Fail due to malloc failure */ array.ht = (x1node**)&(array.tbl[arrSize]); for(i=0; icount; i++){ x1node *oldnp, *newnp; oldnp = &(x1a->tbl[i]); h = strhash(oldnp->data) & (arrSize-1); newnp = &(array.tbl[i]); if( array.ht[h] ) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x1a->tbl); *x1a = array; } /* Insert the new data */ h = ph & (x1a->size-1); np = &(x1a->tbl[x1a->count++]); np->data = data; if( x1a->ht[h] ) x1a->ht[h]->from = &(np->next); np->next = x1a->ht[h]; x1a->ht[h] = np; np->from = &(x1a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ const char *Strsafe_find(const char *key) { unsigned h; x1node *np; if( x1a==0 ) return 0; h = strhash(key) & (x1a->size-1); np = x1a->ht[h]; while( np ){ if( strcmp(np->data,key)==0 ) break; np = np->next; } return np ? np->data : 0; } /* Return a pointer to the (terminal or nonterminal) symbol "x". ** Create a new symbol if this is the first time "x" has been seen. */ struct symbol *Symbol_new(const char *x) { struct symbol *sp; sp = Symbol_find(x); if( sp==0 ){ sp = (struct symbol *)calloc(1, sizeof(struct symbol) ); MemoryCheck(sp); sp->name = Strsafe(x); sp->type = ISUPPER(*x) ? TERMINAL : NONTERMINAL; sp->rule = 0; sp->fallback = 0; sp->prec = -1; sp->assoc = UNK; sp->firstset = 0; sp->lambda = LEMON_FALSE; sp->destructor = 0; sp->destLineno = 0; sp->datatype = 0; sp->useCnt = 0; Symbol_insert(sp,sp->name); } sp->useCnt++; return sp; } /* Compare two symbols for sorting purposes. Return negative, ** zero, or positive if a is less then, equal to, or greater ** than b. ** ** Symbols that begin with upper case letters (terminals or tokens) ** must sort before symbols that begin with lower case letters ** (non-terminals). And MULTITERMINAL symbols (created using the ** %token_class directive) must sort at the very end. Other than ** that, the order does not matter. ** ** We find experimentally that leaving the symbols in their original ** order (the order they appeared in the grammar file) gives the ** smallest parser tables in SQLite. */ int Symbolcmpp(const void *_a, const void *_b) { const struct symbol *a = *(const struct symbol **) _a; const struct symbol *b = *(const struct symbol **) _b; int i1 = a->type==MULTITERMINAL ? 3 : a->name[0]>'Z' ? 2 : 1; int i2 = b->type==MULTITERMINAL ? 3 : b->name[0]>'Z' ? 2 : 1; return i1==i2 ? a->index - b->index : i1 - i2; } /* There is one instance of the following structure for each ** associative array of type "x2". */ struct s_x2 { int size; /* The number of available slots. */ /* Must be a power of 2 greater than or */ /* equal to 1 */ int count; /* Number of currently slots filled */ struct s_x2node *tbl; /* The data stored here */ struct s_x2node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x2". */ typedef struct s_x2node { struct symbol *data; /* The data */ const char *key; /* The key */ struct s_x2node *next; /* Next entry with the same hash */ struct s_x2node **from; /* Previous link */ } x2node; /* There is only one instance of the array, which is the following */ static struct s_x2 *x2a; /* Allocate a new associative array */ void Symbol_init(void){ if( x2a ) return; x2a = (struct s_x2*)malloc( sizeof(struct s_x2) ); if( x2a ){ x2a->size = 128; x2a->count = 0; x2a->tbl = (x2node*)calloc(128, sizeof(x2node) + sizeof(x2node*)); if( x2a->tbl==0 ){ free(x2a); x2a = 0; }else{ int i; x2a->ht = (x2node**)&(x2a->tbl[128]); for(i=0; i<128; i++) x2a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int Symbol_insert(struct symbol *data, const char *key) { x2node *np; unsigned h; unsigned ph; if( x2a==0 ) return 0; ph = strhash(key); h = ph & (x2a->size-1); np = x2a->ht[h]; while( np ){ if( strcmp(np->key,key)==0 ){ /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if( x2a->count>=x2a->size ){ /* Need to make the hash table bigger */ int i,arrSize; struct s_x2 array; array.size = arrSize = x2a->size*2; array.count = x2a->count; array.tbl = (x2node*)calloc(arrSize, sizeof(x2node) + sizeof(x2node*)); if( array.tbl==0 ) return 0; /* Fail due to malloc failure */ array.ht = (x2node**)&(array.tbl[arrSize]); for(i=0; icount; i++){ x2node *oldnp, *newnp; oldnp = &(x2a->tbl[i]); h = strhash(oldnp->key) & (arrSize-1); newnp = &(array.tbl[i]); if( array.ht[h] ) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->key = oldnp->key; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x2a->tbl); *x2a = array; } /* Insert the new data */ h = ph & (x2a->size-1); np = &(x2a->tbl[x2a->count++]); np->key = key; np->data = data; if( x2a->ht[h] ) x2a->ht[h]->from = &(np->next); np->next = x2a->ht[h]; x2a->ht[h] = np; np->from = &(x2a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ struct symbol *Symbol_find(const char *key) { unsigned h; x2node *np; if( x2a==0 ) return 0; h = strhash(key) & (x2a->size-1); np = x2a->ht[h]; while( np ){ if( strcmp(np->key,key)==0 ) break; np = np->next; } return np ? np->data : 0; } /* Return the n-th data. Return NULL if n is out of range. */ struct symbol *Symbol_Nth(int n) { struct symbol *data; if( x2a && n>0 && n<=x2a->count ){ data = x2a->tbl[n-1].data; }else{ data = 0; } return data; } /* Return the size of the array */ int Symbol_count() { return x2a ? x2a->count : 0; } /* Return an array of pointers to all data in the table. ** The array is obtained from malloc. Return NULL if memory allocation ** problems, or if the array is empty. */ struct symbol **Symbol_arrayof() { struct symbol **array; int i,arrSize; if( x2a==0 ) return 0; arrSize = x2a->count; array = (struct symbol **)calloc(arrSize, sizeof(struct symbol *)); if( array ){ for(i=0; itbl[i].data; } return array; } /* Compare two configurations */ int Configcmp(const char *_a,const char *_b) { const struct config *a = (struct config *) _a; const struct config *b = (struct config *) _b; int x; x = a->rp->index - b->rp->index; if( x==0 ) x = a->dot - b->dot; return x; } /* Compare two states */ PRIVATE int statecmp(struct config *a, struct config *b) { int rc; for(rc=0; rc==0 && a && b; a=a->bp, b=b->bp){ rc = a->rp->index - b->rp->index; if( rc==0 ) rc = a->dot - b->dot; } if( rc==0 ){ if( a ) rc = 1; if( b ) rc = -1; } return rc; } /* Hash a state */ PRIVATE unsigned statehash(struct config *a) { unsigned h=0; while( a ){ h = h*571 + a->rp->index*37 + a->dot; a = a->bp; } return h; } /* Allocate a new state structure */ struct state *State_new() { struct state *newstate; newstate = (struct state *)calloc(1, sizeof(struct state) ); MemoryCheck(newstate); return newstate; } /* There is one instance of the following structure for each ** associative array of type "x3". */ struct s_x3 { int size; /* The number of available slots. */ /* Must be a power of 2 greater than or */ /* equal to 1 */ int count; /* Number of currently slots filled */ struct s_x3node *tbl; /* The data stored here */ struct s_x3node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x3". */ typedef struct s_x3node { struct state *data; /* The data */ struct config *key; /* The key */ struct s_x3node *next; /* Next entry with the same hash */ struct s_x3node **from; /* Previous link */ } x3node; /* There is only one instance of the array, which is the following */ static struct s_x3 *x3a; /* Allocate a new associative array */ void State_init(void){ if( x3a ) return; x3a = (struct s_x3*)malloc( sizeof(struct s_x3) ); if( x3a ){ x3a->size = 128; x3a->count = 0; x3a->tbl = (x3node*)calloc(128, sizeof(x3node) + sizeof(x3node*)); if( x3a->tbl==0 ){ free(x3a); x3a = 0; }else{ int i; x3a->ht = (x3node**)&(x3a->tbl[128]); for(i=0; i<128; i++) x3a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int State_insert(struct state *data, struct config *key) { x3node *np; unsigned h; unsigned ph; if( x3a==0 ) return 0; ph = statehash(key); h = ph & (x3a->size-1); np = x3a->ht[h]; while( np ){ if( statecmp(np->key,key)==0 ){ /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if( x3a->count>=x3a->size ){ /* Need to make the hash table bigger */ int i,arrSize; struct s_x3 array; array.size = arrSize = x3a->size*2; array.count = x3a->count; array.tbl = (x3node*)calloc(arrSize, sizeof(x3node) + sizeof(x3node*)); if( array.tbl==0 ) return 0; /* Fail due to malloc failure */ array.ht = (x3node**)&(array.tbl[arrSize]); for(i=0; icount; i++){ x3node *oldnp, *newnp; oldnp = &(x3a->tbl[i]); h = statehash(oldnp->key) & (arrSize-1); newnp = &(array.tbl[i]); if( array.ht[h] ) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->key = oldnp->key; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x3a->tbl); *x3a = array; } /* Insert the new data */ h = ph & (x3a->size-1); np = &(x3a->tbl[x3a->count++]); np->key = key; np->data = data; if( x3a->ht[h] ) x3a->ht[h]->from = &(np->next); np->next = x3a->ht[h]; x3a->ht[h] = np; np->from = &(x3a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ struct state *State_find(struct config *key) { unsigned h; x3node *np; if( x3a==0 ) return 0; h = statehash(key) & (x3a->size-1); np = x3a->ht[h]; while( np ){ if( statecmp(np->key,key)==0 ) break; np = np->next; } return np ? np->data : 0; } /* Return an array of pointers to all data in the table. ** The array is obtained from malloc. Return NULL if memory allocation ** problems, or if the array is empty. */ struct state **State_arrayof(void) { struct state **array; int i,arrSize; if( x3a==0 ) return 0; arrSize = x3a->count; array = (struct state **)calloc(arrSize, sizeof(struct state *)); if( array ){ for(i=0; itbl[i].data; } return array; } /* Hash a configuration */ PRIVATE unsigned confighash(struct config *a) { unsigned h=0; h = h*571 + a->rp->index*37 + a->dot; return h; } /* There is one instance of the following structure for each ** associative array of type "x4". */ struct s_x4 { int size; /* The number of available slots. */ /* Must be a power of 2 greater than or */ /* equal to 1 */ int count; /* Number of currently slots filled */ struct s_x4node *tbl; /* The data stored here */ struct s_x4node **ht; /* Hash table for lookups */ }; /* There is one instance of this structure for every data element ** in an associative array of type "x4". */ typedef struct s_x4node { struct config *data; /* The data */ struct s_x4node *next; /* Next entry with the same hash */ struct s_x4node **from; /* Previous link */ } x4node; /* There is only one instance of the array, which is the following */ static struct s_x4 *x4a; /* Allocate a new associative array */ void Configtable_init(void){ if( x4a ) return; x4a = (struct s_x4*)malloc( sizeof(struct s_x4) ); if( x4a ){ x4a->size = 64; x4a->count = 0; x4a->tbl = (x4node*)calloc(64, sizeof(x4node) + sizeof(x4node*)); if( x4a->tbl==0 ){ free(x4a); x4a = 0; }else{ int i; x4a->ht = (x4node**)&(x4a->tbl[64]); for(i=0; i<64; i++) x4a->ht[i] = 0; } } } /* Insert a new record into the array. Return TRUE if successful. ** Prior data with the same key is NOT overwritten */ int Configtable_insert(struct config *data) { x4node *np; unsigned h; unsigned ph; if( x4a==0 ) return 0; ph = confighash(data); h = ph & (x4a->size-1); np = x4a->ht[h]; while( np ){ if( Configcmp((const char *) np->data,(const char *) data)==0 ){ /* An existing entry with the same key is found. */ /* Fail because overwrite is not allows. */ return 0; } np = np->next; } if( x4a->count>=x4a->size ){ /* Need to make the hash table bigger */ int i,arrSize; struct s_x4 array; array.size = arrSize = x4a->size*2; array.count = x4a->count; array.tbl = (x4node*)calloc(arrSize, sizeof(x4node) + sizeof(x4node*)); if( array.tbl==0 ) return 0; /* Fail due to malloc failure */ array.ht = (x4node**)&(array.tbl[arrSize]); for(i=0; icount; i++){ x4node *oldnp, *newnp; oldnp = &(x4a->tbl[i]); h = confighash(oldnp->data) & (arrSize-1); newnp = &(array.tbl[i]); if( array.ht[h] ) array.ht[h]->from = &(newnp->next); newnp->next = array.ht[h]; newnp->data = oldnp->data; newnp->from = &(array.ht[h]); array.ht[h] = newnp; } free(x4a->tbl); *x4a = array; } /* Insert the new data */ h = ph & (x4a->size-1); np = &(x4a->tbl[x4a->count++]); np->data = data; if( x4a->ht[h] ) x4a->ht[h]->from = &(np->next); np->next = x4a->ht[h]; x4a->ht[h] = np; np->from = &(x4a->ht[h]); return 1; } /* Return a pointer to data assigned to the given key. Return NULL ** if no such key. */ struct config *Configtable_find(struct config *key) { int h; x4node *np; if( x4a==0 ) return 0; h = confighash(key) & (x4a->size-1); np = x4a->ht[h]; while( np ){ if( Configcmp((const char *) np->data,(const char *) key)==0 ) break; np = np->next; } return np ? np->data : 0; } /* Remove all data from the table. Pass each data to the function "f" ** as it is removed. ("f" may be null to avoid this step.) */ void Configtable_clear(int(*f)(struct config *)) { int i; if( x4a==0 || x4a->count==0 ) return; if( f ) for(i=0; icount; i++) (*f)(x4a->tbl[i].data); for(i=0; isize; i++) x4a->ht[i] = 0; x4a->count = 0; return; } RediSearch-1.2.2/srcutil/lempar.c000066400000000000000000001065021364126773500166600ustar00rootroot00000000000000/* ** 2000-05-29 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Driver template for the LEMON parser generator. ** ** The "lemon" program processes an LALR(1) input grammar file, then uses ** this template to construct a parser. The "lemon" program inserts text ** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the ** interstitial "-" characters) contained in this template is changed into ** the value of the %name directive from the grammar. Otherwise, the content ** of this template is copied straight through into the generate parser ** source file. ** ** The following is the concatenation of all %include directives from the ** input grammar file: */ #include /************ Begin %include sections from the grammar ************************/ %% /**************** End of %include directives **********************************/ /* These constants specify the various numeric values for terminal symbols ** in a format understandable to "makeheaders". This section is blank unless ** "lemon" is run with the "-m" command-line option. ***************** Begin makeheaders token definitions *************************/ %% /**************** End makeheaders token definitions ***************************/ /* The next sections is a series of control #defines. ** various aspects of the generated parser. ** YYCODETYPE is the data type used to store the integer codes ** that represent terminal and non-terminal symbols. ** "unsigned char" is used if there are fewer than ** 256 symbols. Larger types otherwise. ** YYNOCODE is a number of type YYCODETYPE that is not used for ** any terminal or nonterminal symbol. ** YYFALLBACK If defined, this indicates that one or more tokens ** (also known as: "terminal symbols") have fall-back ** values which should be used if the original symbol ** would not parse. This permits keywords to sometimes ** be used as identifiers, for example. ** YYACTIONTYPE is the data type used for "action codes" - numbers ** that indicate what to do in response to the next ** token. ** ParseTOKENTYPE is the data type used for minor type for terminal ** symbols. Background: A "minor type" is a semantic ** value associated with a terminal or non-terminal ** symbols. For example, for an "ID" terminal symbol, ** the minor type might be the name of the identifier. ** Each non-terminal can have a different minor type. ** Terminal symbols all have the same minor type, though. ** This macros defines the minor type for terminal ** symbols. ** YYMINORTYPE is the data type used for all minor types. ** This is typically a union of many types, one of ** which is ParseTOKENTYPE. The entry in the union ** for terminal symbols is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. If ** zero the stack is dynamically sized using realloc() ** ParseARG_SDECL A static variable declaration for the %extra_argument ** ParseARG_PDECL A parameter declaration for the %extra_argument ** ParseARG_PARAM Code to pass %extra_argument as a subroutine parameter ** ParseARG_STORE Code to store %extra_argument into yypParser ** ParseARG_FETCH Code to extract %extra_argument from yypParser ** ParseCTX_* As ParseARG_ except for %extra_context ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar ** YYNTOKEN Number of terminal symbols ** YY_MAX_SHIFT Maximum value for shift actions ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions ** YY_ERROR_ACTION The yy_action[] code for syntax error ** YY_ACCEPT_ACTION The yy_action[] code for accept ** YY_NO_ACTION The yy_action[] code for no-op ** YY_MIN_REDUCE Minimum value for reduce actions ** YY_MAX_REDUCE Maximum value for reduce actions */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ %% /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. ** ** Applications can choose to define yytestcase() in the %include section ** to a macro that can assist in verifying code coverage. For production ** code the yytestcase() macro should be turned off. But it is useful ** for testing. */ #ifndef yytestcase # define yytestcase(X) #endif /* Next are the tables used to determine what action to take based on the ** current state and lookahead token. These tables are used to implement ** functions that take a state number and lookahead value and return an ** action integer. ** ** Suppose the action integer is N. Then the action is determined as ** follows ** ** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead ** token onto the stack and goto state N. ** ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. ** ** N == YY_ERROR_ACTION A syntax error has occurred. ** ** N == YY_ACCEPT_ACTION The parser accepts its input. ** ** N == YY_NO_ACTION No such action. Denotes unused ** slots in the yy_action[] table. ** ** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE ** and YY_MAX_REDUCE ** ** The action table is constructed as a single large table named yy_action[]. ** Given state S and lookahead X, the action is computed as either: ** ** (A) N = yy_action[ yy_shift_ofst[S] + X ] ** (B) N = yy_default[S] ** ** The (A) formula is preferred. The B formula is used instead if ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. ** ** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of ** the yy_shift_ofst[] array. ** ** The following are the tables generated in this section: ** ** yy_action[] A single table containing all actions. ** yy_lookahead[] A table containing the lookahead for each entry in ** yy_action. Used to detect hash collisions. ** yy_shift_ofst[] For each state, the offset into yy_action for ** shifting terminals. ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ %% /********** End of lemon-generated parsing tables *****************************/ /* The next table maps tokens (terminal symbols) into fallback tokens. ** If a construct like the following: ** ** %fallback ID X Y Z. ** ** appears in the grammar, then ID becomes a fallback token for X, Y, ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser ** but it does not parse, the type of the token is changed to ID and ** the parse is retried before an error is thrown. ** ** This feature can be used, for example, to cause some keywords in a language ** to revert to identifiers if they keyword does not apply in the context where ** it appears. */ #ifdef YYFALLBACK static const YYCODETYPE yyFallback[] = { %% }; #endif /* YYFALLBACK */ /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** ** + The state number for the parser at this level of the stack. ** ** + The value of the token stored at this level of the stack. ** (In other words, the "major" token.) ** ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. ** ** After the "shift" half of a SHIFTREDUCE action, the stateno field ** actually contains the reduce action for the second half of the ** SHIFTREDUCE. */ struct yyStackEntry { YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ YYCODETYPE major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This ** is the value of the token */ }; typedef struct yyStackEntry yyStackEntry; /* The state of the parser is completely contained in an instance of ** the following structure */ struct yyParser { yyStackEntry *yytos; /* Pointer to top element of the stack */ #ifdef YYTRACKMAXSTACKDEPTH int yyhwm; /* High-water mark of the stack */ #endif #ifndef YYNOERRORRECOVERY int yyerrcnt; /* Shifts left before out of the error */ #endif ParseARG_SDECL /* A place to hold %extra_argument */ ParseCTX_SDECL /* A place to hold %extra_context */ #if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ yyStackEntry *yystack; /* The parser's stack */ yyStackEntry yystk0; /* First stack entry */ #else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ yyStackEntry *yystackEnd; /* Last entry in the stack */ #endif }; typedef struct yyParser yyParser; #ifndef NDEBUG #include static FILE *yyTraceFILE = 0; static char *yyTracePrompt = 0; #endif /* NDEBUG */ #ifndef NDEBUG /* ** Turn parser tracing on by giving a stream to which to write the trace ** and a prompt to preface each trace message. Tracing is turned off ** by making either argument NULL ** ** Inputs: **
    **
  • A FILE* to which trace output should be written. ** If NULL, then tracing is turned off. **
  • A prefix string written at the beginning of every ** line of trace output. If NULL, then tracing is ** turned off. **
** ** Outputs: ** None. */ void ParseTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; else if( yyTracePrompt==0 ) yyTraceFILE = 0; } #endif /* NDEBUG */ #if defined(YYCOVERAGE) || !defined(NDEBUG) /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const yyTokenName[] = { %% }; #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { %% }; #endif /* NDEBUG */ #if YYSTACKDEPTH<=0 /* ** Try to increase the size of the parser stack. Return the number ** of errors. Return 0 on success. */ static int yyGrowStack(yyParser *p){ int newSize; int idx; yyStackEntry *pNew; newSize = p->yystksz*2 + 100; idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; if( p->yystack==&p->yystk0 ){ pNew = malloc(newSize*sizeof(pNew[0])); if( pNew ) pNew[0] = p->yystk0; }else{ pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); } if( pNew ){ p->yystack = pNew; p->yytos = &p->yystack[idx]; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", yyTracePrompt, p->yystksz, newSize); } #endif p->yystksz = newSize; } return pNew==0; } #endif /* Datatype of the argument to the memory allocated passed as the ** second argument to ParseAlloc() below. This can be changed by ** putting an appropriate #define in the %include section of the input ** grammar. */ #ifndef YYMALLOCARGTYPE # define YYMALLOCARGTYPE size_t #endif /* Initialize a new parser that has already been allocated. */ void ParseInit(void *yypRawParser ParseCTX_PDECL){ yyParser *yypParser = (yyParser*)yypRawParser; ParseCTX_STORE #ifdef YYTRACKMAXSTACKDEPTH yypParser->yyhwm = 0; #endif #if YYSTACKDEPTH<=0 yypParser->yytos = NULL; yypParser->yystack = NULL; yypParser->yystksz = 0; if( yyGrowStack(yypParser) ){ yypParser->yystack = &yypParser->yystk0; yypParser->yystksz = 1; } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yypParser->yytos = yypParser->yystack; yypParser->yystack[0].stateno = 0; yypParser->yystack[0].major = 0; #if YYSTACKDEPTH>0 yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; #endif } #ifndef Parse_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like ** malloc. ** ** Inputs: ** A pointer to the function used to allocate memory. ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls ** to Parse and ParseFree. */ void *ParseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE) ParseCTX_PDECL){ yyParser *yypParser; yypParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); if( yypParser ){ ParseCTX_STORE ParseInit(yypParser ParseCTX_PARAM); } return (void*)yypParser; } #endif /* Parse_ENGINEALWAYSONSTACK */ /* The following function deletes the "minor type" or semantic value ** associated with a symbol. The symbol can be either a terminal ** or nonterminal. "yymajor" is the symbol code, and "yypminor" is ** a pointer to the value to be deleted. The code used to do the ** deletions is derived from the %destructor and/or %token_destructor ** directives of the input grammar. */ static void yy_destructor( yyParser *yypParser, /* The parser */ YYCODETYPE yymajor, /* Type code for object to destroy */ YYMINORTYPE *yypminor /* The object to be destroyed */ ){ ParseARG_FETCH ParseCTX_FETCH switch( yymajor ){ /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen ** when the symbol is popped from the stack during a ** reduce or during error processing or when a parser is ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ /********* Begin destructor definitions ***************************************/ %% /********* End destructor definitions *****************************************/ default: break; /* If no destructor action specified: do nothing */ } } /* ** Pop the parser's stack once. ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. */ static void yy_pop_parser_stack(yyParser *pParser){ yyStackEntry *yytos; assert( pParser->yytos!=0 ); assert( pParser->yytos > pParser->yystack ); yytos = pParser->yytos--; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); } #endif yy_destructor(pParser, yytos->major, &yytos->minor); } /* ** Clear all secondary memory allocations from the parser */ void ParseFinalize(void *p){ yyParser *pParser = (yyParser*)p; while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); #if YYSTACKDEPTH<=0 if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); #endif } #ifndef Parse_ENGINEALWAYSONSTACK /* ** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. ** ** If the YYPARSEFREENEVERNULL macro exists (for example because it ** is defined in a %include section of the input grammar) then it is ** assumed that the input pointer is never NULL. */ void ParseFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ #ifndef YYPARSEFREENEVERNULL if( p==0 ) return; #endif ParseFinalize(p); (*freeProc)(p); } #endif /* Parse_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. */ #ifdef YYTRACKMAXSTACKDEPTH int ParseStackPeak(void *p){ yyParser *pParser = (yyParser*)p; return pParser->yyhwm; } #endif /* This array of booleans keeps track of the parser statement ** coverage. The element yycoverage[X][Y] is set when the parser ** is in state X and has a lookahead token Y. In a well-tested ** systems, every element of this matrix should end up being set. */ #if defined(YYCOVERAGE) static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; #endif /* ** Write into out a description of every state/lookahead combination that ** ** (1) has not been used by the parser, and ** (2) is not a syntax error. ** ** Return the number of missed state/lookahead combinations. */ #if defined(YYCOVERAGE) int ParseCoverage(FILE *out){ int stateno, iLookAhead, i; int nMissed = 0; for(stateno=0; statenoYY_MAX_SHIFT ) return stateno; assert( stateno <= YY_SHIFT_COUNT ); #if defined(YYCOVERAGE) yycoverage[stateno][iLookAhead] = 1; #endif do{ i = yy_shift_ofst[stateno]; assert( i>=0 ); assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); assert( iLookAhead!=YYNOCODE ); assert( iLookAhead < YYNTOKEN ); i += iLookAhead; if( yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); } #endif assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */ iLookAhead = iFallback; continue; } #endif #ifdef YYWILDCARD { int j = i - iLookAhead + YYWILDCARD; if( #if YY_SHIFT_MIN+YYWILDCARD<0 j>=0 && #endif #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); } #endif /* NDEBUG */ return yy_action[j]; } } #endif /* YYWILDCARD */ return yy_default[stateno]; }else{ return yy_action[i]; } }while(1); } /* ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. */ static int yy_find_reduce_action( YYACTIONTYPE stateno, /* Current state number */ YYCODETYPE iLookAhead /* The look-ahead token */ ){ int i; #ifdef YYERRORSYMBOL if( stateno>YY_REDUCE_COUNT ){ return yy_default[stateno]; } #else assert( stateno<=YY_REDUCE_COUNT ); #endif i = yy_reduce_ofst[stateno]; assert( iLookAhead!=YYNOCODE ); i += iLookAhead; #ifdef YYERRORSYMBOL if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ return yy_default[stateno]; } #else assert( i>=0 && iyytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will execute if the parser ** stack every overflows */ /******** Begin %stack_overflow code ******************************************/ %% /******** End %stack_overflow code ********************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument var */ ParseCTX_STORE } /* ** Print tracing information for a SHIFT action */ #ifndef NDEBUG static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){ if( yyTraceFILE ){ if( yyNewStateyytos->major], yyNewState); }else{ fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], yyNewState - YY_MIN_REDUCE); } } } #else # define yyTraceShift(X,Y,Z) #endif /* ** Perform a shift action. */ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ YYACTIONTYPE yyNewState, /* The new state to shift in */ YYCODETYPE yyMajor, /* The major token to shift in */ ParseTOKENTYPE yyMinor /* The minor token to shift in */ ){ yyStackEntry *yytos; yypParser->yytos++; #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>yypParser->yystackEnd ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ if( yyGrowStack(yypParser) ){ yypParser->yytos--; yyStackOverflow(yypParser); return; } } #endif if( yyNewState > YY_MAX_SHIFT ){ yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; } yytos = yypParser->yytos; yytos->stateno = yyNewState; yytos->major = yyMajor; yytos->minor.yy0 = yyMinor; yyTraceShift(yypParser, yyNewState, "Shift"); } /* The following table contains information about every rule that ** is used during the reduce. */ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { %% }; static void yy_accept(yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. ** ** The yyLookahead and yyLookaheadToken parameters provide reduce actions ** access to the lookahead token (if any). The yyLookahead will be YYNOCODE ** if the lookahead token has already been consumed. As this procedure is ** only called from one place, optimizing compilers will in-line it, which ** means that the extra parameters have no performance impact. */ static YYACTIONTYPE yy_reduce( yyParser *yypParser, /* The parser */ unsigned int yyruleno, /* Number of the rule by which to reduce */ int yyLookahead, /* Lookahead token, or YYNOCODE if none */ ParseTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ ParseCTX_PDECL /* %extra_context */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ ParseARG_FETCH (void)yyLookahead; (void)yyLookaheadToken; yymsp = yypParser->yytos; #ifndef NDEBUG if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; if( yysize ){ fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", yyTracePrompt, yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno); }else{ fprintf(yyTraceFILE, "%sReduce %d [%s].\n", yyTracePrompt, yyruleno, yyRuleName[yyruleno]); } } #endif /* NDEBUG */ /* Check that the stack is large enough to grow by a single entry ** if the RHS of the rule is empty. This ensures that there is room ** enough on the stack to push the LHS value */ if( yyRuleInfo[yyruleno].nrhs==0 ){ #ifdef YYTRACKMAXSTACKDEPTH if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ yypParser->yyhwm++; assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack)); } #endif #if YYSTACKDEPTH>0 if( yypParser->yytos>=yypParser->yystackEnd ){ yyStackOverflow(yypParser); /* The call to yyStackOverflow() above pops the stack until it is ** empty, causing the main parser loop to exit. So the return value ** is never used and does not matter. */ return 0; } #else if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ if( yyGrowStack(yypParser) ){ yyStackOverflow(yypParser); /* The call to yyStackOverflow() above pops the stack until it is ** empty, causing the main parser loop to exit. So the return value ** is never used and does not matter. */ return 0; } yymsp = yypParser->yytos; } #endif } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example ** follows: ** case 0: ** #line ** { ... } // User supplied code ** #line ** break; */ /********** Begin reduce actions **********************************************/ %% /********** End reduce actions ************************************************/ }; assert( yyrulenoYY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); /* It is not possible for a REDUCE to be followed by an error */ assert( yyact!=YY_ERROR_ACTION ); yymsp += yysize+1; yypParser->yytos = yymsp; yymsp->stateno = (YYACTIONTYPE)yyact; yymsp->major = (YYCODETYPE)yygoto; yyTraceShift(yypParser, yyact, "... then shift"); return yyact; } /* ** The following code executes when the parse fails */ #ifndef YYNOERRORRECOVERY static void yy_parse_failed( yyParser *yypParser /* The parser */ ){ ParseARG_FETCH ParseCTX_FETCH #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); } #endif while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will be executed whenever the ** parser fails */ /************ Begin %parse_failure code ***************************************/ %% /************ End %parse_failure code *****************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE } #endif /* YYNOERRORRECOVERY */ /* ** The following code executes when a syntax error first occurs. */ static void yy_syntax_error( yyParser *yypParser, /* The parser */ int yymajor, /* The major type of the error token */ ParseTOKENTYPE yyminor /* The minor type of the error token */ ){ ParseARG_FETCH ParseCTX_FETCH #define TOKEN yyminor /************ Begin %syntax_error code ****************************************/ %% /************ End %syntax_error code ******************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE } /* ** The following is executed when the parser accepts */ static void yy_accept( yyParser *yypParser /* The parser */ ){ ParseARG_FETCH ParseCTX_FETCH #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); } #endif #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif assert( yypParser->yytos==yypParser->yystack ); /* Here code is inserted which will be executed whenever the ** parser accepts */ /*********** Begin %parse_accept code *****************************************/ %% /*********** End %parse_accept code *******************************************/ ParseARG_STORE /* Suppress warning about unused %extra_argument variable */ ParseCTX_STORE } /* The main parser program. ** The first argument is a pointer to a structure obtained from ** "ParseAlloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for ** use by the action routines. ** ** Inputs: **
    **
  • A pointer to the parser (an opaque structure.) **
  • The major token number. **
  • The minor token number. **
  • An option argument of a grammar-specified type. **
** ** Outputs: ** None. */ void Parse( void *yyp, /* The parser */ int yymajor, /* The major token code number */ ParseTOKENTYPE yyminor /* The value for the token */ ParseARG_PDECL /* Optional %extra_argument parameter */ ){ YYMINORTYPE yyminorunion; YYACTIONTYPE yyact; /* The parser action. */ #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) int yyendofinput; /* True if we are at the end of input */ #endif #ifdef YYERRORSYMBOL int yyerrorhit = 0; /* True if yymajor has invoked an error */ #endif yyParser *yypParser = (yyParser*)yyp; /* The parser */ ParseCTX_FETCH ParseARG_STORE assert( yypParser->yytos!=0 ); #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) yyendofinput = (yymajor==0); #endif yyact = yypParser->yytos->stateno; #ifndef NDEBUG if( yyTraceFILE ){ if( yyact < YY_MIN_REDUCE ){ fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", yyTracePrompt,yyTokenName[yymajor],yyact); }else{ fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", yyTracePrompt,yyTokenName[yymajor],yyact-YY_MIN_REDUCE); } } #endif do{ assert( yyact==yypParser->yytos->stateno ); yyact = yy_find_shift_action(yymajor,yyact); if( yyact >= YY_MIN_REDUCE ){ yyact = yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor, yyminor ParseCTX_PARAM); }else if( yyact <= YY_MAX_SHIFTREDUCE ){ yy_shift(yypParser,yyact,yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif break; }else if( yyact==YY_ACCEPT_ACTION ){ yypParser->yytos--; yy_accept(yypParser); return; }else{ assert( yyact == YY_ERROR_ACTION ); yyminorunion.yy0 = yyminor; #ifdef YYERRORSYMBOL int yymx; #endif #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); } #endif #ifdef YYERRORSYMBOL /* A syntax error has occurred. ** The response to an error depends upon whether or not the ** grammar defines an error token "ERROR". ** ** This is what we do if the grammar does define ERROR: ** ** * Call the %syntax_error function. ** ** * Begin popping the stack until we enter a state where ** it is legal to shift the error symbol, then shift ** the error symbol. ** ** * Set the error count to three. ** ** * Begin accepting and shifting new tokens. No new error ** processing will occur until three tokens have been ** shifted successfully. ** */ if( yypParser->yyerrcnt<0 ){ yy_syntax_error(yypParser,yymajor,yyminor); } yymx = yypParser->yytos->major; if( yymx==YYERRORSYMBOL || yyerrorhit ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sDiscard input token %s\n", yyTracePrompt,yyTokenName[yymajor]); } #endif yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ while( yypParser->yytos >= yypParser->yystack && yymx != YYERRORSYMBOL && (yyact = yy_find_reduce_action( yypParser->yytos->stateno, YYERRORSYMBOL)) >= YY_MIN_REDUCE ){ yy_pop_parser_stack(yypParser); } if( yypParser->yytos < yypParser->yystack || yymajor==0 ){ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif yymajor = YYNOCODE; }else if( yymx!=YYERRORSYMBOL ){ yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); } } yypParser->yyerrcnt = 3; yyerrorhit = 1; if( yymajor==YYNOCODE ) break; yyact = yypParser->yytos->stateno; #elif defined(YYNOERRORRECOVERY) /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to ** do any kind of error recovery. Instead, simply invoke the syntax ** error routine and continue going as if nothing had happened. ** ** Applications can set this macro (for example inside %include) if ** they intend to abandon the parse upon the first syntax error seen. */ yy_syntax_error(yypParser,yymajor, yyminor); yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); break; #else /* YYERRORSYMBOL is not defined */ /* This is what we do if the grammar does not define ERROR: ** ** * Report an error message, and throw away the input token. ** ** * If the input token is $, then fail the parse. ** ** As before, subsequent error messages are suppressed until ** three input tokens have been successfully shifted. */ if( yypParser->yyerrcnt<=0 ){ yy_syntax_error(yypParser,yymajor, yyminor); } yypParser->yyerrcnt = 3; yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); if( yyendofinput ){ yy_parse_failed(yypParser); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt = -1; #endif } break; #endif } }while( yypParser->yytos>yypParser->yystack ); #ifndef NDEBUG if( yyTraceFILE ){ yyStackEntry *i; char cDiv = '['; fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); cDiv = ' '; } fprintf(yyTraceFILE,"]\n"); } #endif return; } RediSearch-1.2.2/srcutil/make-parser.mk000066400000000000000000000007031364126773500177700ustar00rootroot00000000000000LEMON := $(SRCUTIL)/lemon TEMPLATE := $(SRCUTIL)/lempar.c RAGEL := ragel all: lexer.c parser-toplevel.c parser.c.inc lexer.c: lexer.rl $(RAGEL) -s lexer.rl -o $@ parser.c.inc: parser.y $(LEMON) -s -T$(TEMPLATE) parser.y mv parser.c parser.c.inc parser-toplevel.c: $(SRCUTIL)/gen_parser_toplevel.py $(SRCUTIL)/gen_parser_toplevel.py -p $(PARSER_SYMBOL_PREFIX) -i parser.c.inc > $@ clean: rm -f lexer.c parser.c parser.c.inc parser-toplevel.c